From 79791ef22823fd9ef0f8dd6d4d69bfc7ac61f6a2 Mon Sep 17 00:00:00 2001 From: "Stanislav N. aka pztrn" Date: Mon, 14 Jun 2021 22:59:21 +0500 Subject: [PATCH] Update golang versions everywhere, use alpine 3.13 for image, remove vendor dir. --- .gitignore | 1 + Dockerfile | 6 +- docker-compose.yml | 2 +- go.mod | 2 +- .../github.com/alecthomas/chroma/.gitignore | 19 - .../alecthomas/chroma/.golangci.yml | 55 - .../alecthomas/chroma/.goreleaser.yml | 33 - .../github.com/alecthomas/chroma/.travis.yml | 12 - vendor/github.com/alecthomas/chroma/COPYING | 19 - vendor/github.com/alecthomas/chroma/Makefile | 19 - vendor/github.com/alecthomas/chroma/README.md | 267 - .../github.com/alecthomas/chroma/coalesce.go | 35 - vendor/github.com/alecthomas/chroma/colour.go | 164 - .../github.com/alecthomas/chroma/delegate.go | 137 - vendor/github.com/alecthomas/chroma/doc.go | 7 - .../github.com/alecthomas/chroma/formatter.go | 43 - .../alecthomas/chroma/formatters/api.go | 57 - .../alecthomas/chroma/formatters/html/html.go | 435 - .../alecthomas/chroma/formatters/json.go | 31 - .../formatters/svg/font_liberation_mono.go | 51 - .../alecthomas/chroma/formatters/svg/svg.go | 222 - .../alecthomas/chroma/formatters/tokens.go | 18 - .../chroma/formatters/tty_indexed.go | 260 - .../chroma/formatters/tty_truecolour.go | 42 - vendor/github.com/alecthomas/chroma/go.mod | 17 - vendor/github.com/alecthomas/chroma/go.sum | 33 - .../github.com/alecthomas/chroma/iterator.go | 76 - vendor/github.com/alecthomas/chroma/lexer.go | 120 - .../alecthomas/chroma/lexers/README.md | 37 - .../alecthomas/chroma/lexers/a/abap.go | 56 - .../alecthomas/chroma/lexers/a/abnf.go | 38 - .../chroma/lexers/a/actionscript.go | 39 - .../chroma/lexers/a/actionscript3.go | 56 - .../alecthomas/chroma/lexers/a/ada.go | 114 - .../alecthomas/chroma/lexers/a/angular2.go | 42 - .../alecthomas/chroma/lexers/a/antlr.go | 101 - .../alecthomas/chroma/lexers/a/apache.go | 38 - .../alecthomas/chroma/lexers/a/apl.go | 36 - .../alecthomas/chroma/lexers/a/applescript.go | 55 - .../alecthomas/chroma/lexers/a/arduino.go | 110 - .../alecthomas/chroma/lexers/a/awk.go | 48 - .../alecthomas/chroma/lexers/b/ballerina.go | 46 - .../alecthomas/chroma/lexers/b/bash.go | 95 - .../alecthomas/chroma/lexers/b/batch.go | 194 - .../alecthomas/chroma/lexers/b/bibtex.go | 76 - .../alecthomas/chroma/lexers/b/blitz.go | 48 - .../alecthomas/chroma/lexers/b/bnf.go | 24 - .../alecthomas/chroma/lexers/b/brainfuck.go | 34 - .../alecthomas/chroma/lexers/c/c.go | 91 - .../alecthomas/chroma/lexers/c/capnproto.go | 61 - .../alecthomas/chroma/lexers/c/ceylon.go | 63 - .../alecthomas/chroma/lexers/c/cfengine3.go | 56 - .../alecthomas/chroma/lexers/c/chaiscript.go | 63 - .../alecthomas/chroma/lexers/c/cheetah.go | 37 - .../alecthomas/chroma/lexers/c/cl.go | 306 - .../alecthomas/chroma/lexers/c/clojure.go | 38 - .../alecthomas/chroma/lexers/c/cmake.go | 44 - .../alecthomas/chroma/lexers/c/cobol.go | 51 - .../alecthomas/chroma/lexers/c/coffee.go | 91 - .../alecthomas/chroma/lexers/c/coldfusion.go | 48 - .../alecthomas/chroma/lexers/c/coq.go | 63 - .../alecthomas/chroma/lexers/c/cpp.go | 106 - .../alecthomas/chroma/lexers/c/cql.go | 69 - .../alecthomas/chroma/lexers/c/crystal.go | 262 - .../alecthomas/chroma/lexers/c/csharp.go | 51 - .../alecthomas/chroma/lexers/c/css.go | 104 - .../alecthomas/chroma/lexers/c/cython.go | 135 - .../alecthomas/chroma/lexers/circular/doc.go | 2 - .../alecthomas/chroma/lexers/circular/php.go | 91 - .../alecthomas/chroma/lexers/d/d.go | 69 - .../alecthomas/chroma/lexers/d/dart.go | 91 - .../alecthomas/chroma/lexers/d/diff.go | 29 - .../alecthomas/chroma/lexers/d/django.go | 53 - .../alecthomas/chroma/lexers/d/docker.go | 31 - .../alecthomas/chroma/lexers/d/dtd.go | 69 - .../alecthomas/chroma/lexers/e/ebnf.go | 51 - .../alecthomas/chroma/lexers/e/elixir.go | 270 - .../alecthomas/chroma/lexers/e/elm.go | 59 - .../alecthomas/chroma/lexers/e/emacs.go | 582 - .../alecthomas/chroma/lexers/e/erlang.go | 66 - .../alecthomas/chroma/lexers/f/factor.go | 115 - .../alecthomas/chroma/lexers/f/fish.go | 65 - .../alecthomas/chroma/lexers/f/forth.go | 40 - .../alecthomas/chroma/lexers/f/fortran.go | 47 - .../alecthomas/chroma/lexers/f/fsharp.go | 94 - .../alecthomas/chroma/lexers/g/gas.go | 55 - .../alecthomas/chroma/lexers/g/gdscript.go | 124 - .../alecthomas/chroma/lexers/g/genshi.go | 114 - .../alecthomas/chroma/lexers/g/glsl.go | 37 - .../alecthomas/chroma/lexers/g/gnuplot.go | 117 - .../alecthomas/chroma/lexers/g/go.go | 114 - .../alecthomas/chroma/lexers/g/graphql.go | 45 - .../alecthomas/chroma/lexers/g/groovy.go | 58 - .../alecthomas/chroma/lexers/h/handlebars.go | 56 - .../alecthomas/chroma/lexers/h/haskell.go | 99 - .../alecthomas/chroma/lexers/h/haxe.go | 642 -- .../alecthomas/chroma/lexers/h/hcl.go | 69 - .../alecthomas/chroma/lexers/h/hexdump.go | 67 - .../alecthomas/chroma/lexers/h/html.go | 59 - .../alecthomas/chroma/lexers/h/http.go | 128 - .../alecthomas/chroma/lexers/h/hy.go | 51 - .../alecthomas/chroma/lexers/hlb.go | 54 - .../alecthomas/chroma/lexers/i/idris.go | 80 - .../alecthomas/chroma/lexers/i/igor.go | 32 - .../alecthomas/chroma/lexers/i/ini.go | 25 - .../alecthomas/chroma/lexers/i/io.go | 40 - .../alecthomas/chroma/lexers/internal/api.go | 160 - .../alecthomas/chroma/lexers/j/j.go | 73 - .../alecthomas/chroma/lexers/j/java.go | 51 - .../alecthomas/chroma/lexers/j/javascript.go | 73 - .../alecthomas/chroma/lexers/j/json.go | 55 - .../alecthomas/chroma/lexers/j/jsx.go | 94 - .../alecthomas/chroma/lexers/j/julia.go | 95 - .../alecthomas/chroma/lexers/j/jungle.go | 50 - .../alecthomas/chroma/lexers/k/kotlin.go | 55 - .../alecthomas/chroma/lexers/l/lighttpd.go | 30 - .../alecthomas/chroma/lexers/l/llvm.go | 43 - .../alecthomas/chroma/lexers/l/lua.go | 75 - .../alecthomas/chroma/lexers/lexers.go | 59 - .../alecthomas/chroma/lexers/m/make.go | 54 - .../alecthomas/chroma/lexers/m/mako.go | 60 - .../alecthomas/chroma/lexers/m/markdown.go | 47 - .../alecthomas/chroma/lexers/m/mason.go | 43 - .../alecthomas/chroma/lexers/m/mathematica.go | 32 - .../alecthomas/chroma/lexers/m/matlab.go | 51 - .../alecthomas/chroma/lexers/m/minizinc.go | 41 - .../alecthomas/chroma/lexers/m/mlir.go | 43 - .../alecthomas/chroma/lexers/m/modula2.go | 115 - .../alecthomas/chroma/lexers/m/monkeyc.go | 62 - .../alecthomas/chroma/lexers/m/mwscript.go | 53 - .../alecthomas/chroma/lexers/m/myghty.go | 40 - .../alecthomas/chroma/lexers/m/mysql.go | 54 - .../alecthomas/chroma/lexers/n/nasm.go | 59 - .../alecthomas/chroma/lexers/n/newspeak.go | 55 - .../alecthomas/chroma/lexers/n/nginx.go | 47 - .../alecthomas/chroma/lexers/n/nim.go | 93 - .../alecthomas/chroma/lexers/n/nix.go | 122 - .../alecthomas/chroma/lexers/o/objectivec.go | 165 - .../alecthomas/chroma/lexers/o/ocaml.go | 66 - .../alecthomas/chroma/lexers/o/octave.go | 46 - .../alecthomas/chroma/lexers/o/openscad.go | 43 - .../alecthomas/chroma/lexers/o/org.go | 102 - .../alecthomas/chroma/lexers/p/pacman.go | 26 - .../alecthomas/chroma/lexers/p/perl.go | 138 - .../alecthomas/chroma/lexers/p/pig.go | 57 - .../alecthomas/chroma/lexers/p/pkgconfig.go | 41 - .../alecthomas/chroma/lexers/p/plaintext.go | 16 - .../alecthomas/chroma/lexers/p/plsql.go | 58 - .../alecthomas/chroma/lexers/p/postgres.go | 77 - .../alecthomas/chroma/lexers/p/postscript.go | 46 - .../alecthomas/chroma/lexers/p/povray.go | 35 - .../alecthomas/chroma/lexers/p/powershell.go | 66 - .../alecthomas/chroma/lexers/p/prolog.go | 50 - .../alecthomas/chroma/lexers/p/protobuf.go | 53 - .../alecthomas/chroma/lexers/p/puppet.go | 56 - .../alecthomas/chroma/lexers/p/python.go | 137 - .../alecthomas/chroma/lexers/p/python3.go | 137 - .../alecthomas/chroma/lexers/q/qbasic.go | 67 - .../alecthomas/chroma/lexers/r/r.go | 66 - .../alecthomas/chroma/lexers/r/racket.go | 102 - .../alecthomas/chroma/lexers/r/ragel.go | 76 - .../alecthomas/chroma/lexers/r/regedit.go | 32 - .../alecthomas/chroma/lexers/r/rexx.go | 59 - .../alecthomas/chroma/lexers/r/rst.go | 86 - .../alecthomas/chroma/lexers/r/ruby.go | 250 - .../alecthomas/chroma/lexers/r/rust.go | 135 - .../alecthomas/chroma/lexers/s/sas.go | 94 - .../alecthomas/chroma/lexers/s/sass.go | 144 - .../alecthomas/chroma/lexers/s/scala.go | 112 - .../alecthomas/chroma/lexers/s/scheme.go | 53 - .../alecthomas/chroma/lexers/s/scilab.go | 44 - .../alecthomas/chroma/lexers/s/scss.go | 124 - .../alecthomas/chroma/lexers/s/smalltalk.go | 99 - .../alecthomas/chroma/lexers/s/smarty.go | 40 - .../alecthomas/chroma/lexers/s/sml.go | 200 - .../alecthomas/chroma/lexers/s/snobol.go | 48 - .../alecthomas/chroma/lexers/s/solidity.go | 110 - .../alecthomas/chroma/lexers/s/sparql.go | 69 - .../alecthomas/chroma/lexers/s/sql.go | 49 - .../alecthomas/chroma/lexers/s/squid.go | 38 - .../alecthomas/chroma/lexers/s/swift.go | 87 - .../alecthomas/chroma/lexers/s/systemd.go | 28 - .../chroma/lexers/s/systemverilog.go | 73 - .../alecthomas/chroma/lexers/t/tablegen.go | 42 - .../alecthomas/chroma/lexers/t/tasm.go | 61 - .../alecthomas/chroma/lexers/t/tcl.go | 116 - .../alecthomas/chroma/lexers/t/tcsh.go | 59 - .../alecthomas/chroma/lexers/t/termcap.go | 42 - .../alecthomas/chroma/lexers/t/terminfo.go | 42 - .../alecthomas/chroma/lexers/t/terraform.go | 60 - .../alecthomas/chroma/lexers/t/tex.go | 56 - .../alecthomas/chroma/lexers/t/thrift.go | 73 - .../alecthomas/chroma/lexers/t/toml.go | 29 - .../alecthomas/chroma/lexers/t/tradingview.go | 40 - .../alecthomas/chroma/lexers/t/transactsql.go | 60 - .../alecthomas/chroma/lexers/t/turing.go | 43 - .../alecthomas/chroma/lexers/t/turtle.go | 67 - .../alecthomas/chroma/lexers/t/twig.go | 54 - .../alecthomas/chroma/lexers/t/typescript.go | 73 - .../alecthomas/chroma/lexers/t/typoscript.go | 125 - .../alecthomas/chroma/lexers/v/vb.go | 73 - .../alecthomas/chroma/lexers/v/verilog.go | 68 - .../alecthomas/chroma/lexers/v/vhdl.go | 66 - .../alecthomas/chroma/lexers/v/vim.go | 37 - .../alecthomas/chroma/lexers/v/vue.go | 107 - .../alecthomas/chroma/lexers/w/wdte.go | 29 - .../alecthomas/chroma/lexers/x/xml.go | 45 - .../alecthomas/chroma/lexers/x/xorg.go | 25 - .../alecthomas/chroma/lexers/y/yaml.go | 50 - .../github.com/alecthomas/chroma/mutators.go | 131 - .../alecthomas/chroma/pygments-lexers.txt | 325 - vendor/github.com/alecthomas/chroma/regexp.go | 439 - vendor/github.com/alecthomas/chroma/remap.go | 80 - vendor/github.com/alecthomas/chroma/style.go | 342 - .../alecthomas/chroma/styles/abap.go | 18 - .../alecthomas/chroma/styles/algol.go | 25 - .../alecthomas/chroma/styles/algol_nu.go | 25 - .../alecthomas/chroma/styles/api.go | 37 - .../alecthomas/chroma/styles/arduino.go | 25 - .../alecthomas/chroma/styles/autumn.go | 43 - .../alecthomas/chroma/styles/borland.go | 33 - .../github.com/alecthomas/chroma/styles/bw.go | 30 - .../alecthomas/chroma/styles/colorful.go | 59 - .../alecthomas/chroma/styles/dracula.go | 81 - .../alecthomas/chroma/styles/emacs.go | 51 - .../alecthomas/chroma/styles/friendly.go | 51 - .../alecthomas/chroma/styles/fruity.go | 26 - .../alecthomas/chroma/styles/github.go | 51 - .../alecthomas/chroma/styles/igor.go | 16 - .../alecthomas/chroma/styles/lovelace.go | 60 - .../alecthomas/chroma/styles/manni.go | 51 - .../alecthomas/chroma/styles/monokai.go | 36 - .../alecthomas/chroma/styles/monokailight.go | 33 - .../alecthomas/chroma/styles/murphy.go | 59 - .../alecthomas/chroma/styles/native.go | 42 - .../alecthomas/chroma/styles/paraiso-dark.go | 44 - .../alecthomas/chroma/styles/paraiso-light.go | 44 - .../alecthomas/chroma/styles/pastie.go | 52 - .../alecthomas/chroma/styles/perldoc.go | 44 - .../alecthomas/chroma/styles/pygments.go | 55 - .../alecthomas/chroma/styles/rainbow_dash.go | 47 - .../alecthomas/chroma/styles/rrt.go | 20 - .../chroma/styles/solarized-dark.go | 46 - .../chroma/styles/solarized-dark256.go | 48 - .../chroma/styles/solarized-light.go | 24 - .../alecthomas/chroma/styles/swapoff.go | 25 - .../alecthomas/chroma/styles/tango.go | 79 - .../alecthomas/chroma/styles/trac.go | 42 - .../alecthomas/chroma/styles/vim.go | 36 - .../github.com/alecthomas/chroma/styles/vs.go | 23 - .../alecthomas/chroma/styles/xcode.go | 29 - vendor/github.com/alecthomas/chroma/table.py | 15 - .../alecthomas/chroma/tokentype_string.go | 213 - vendor/github.com/alecthomas/chroma/types.go | 347 - .../danwakefield/fnmatch/.gitignore | 24 - .../github.com/danwakefield/fnmatch/LICENSE | 23 - .../github.com/danwakefield/fnmatch/README.md | 4 - .../danwakefield/fnmatch/fnmatch.go | 219 - vendor/github.com/dchest/captcha/.gitignore | 8 - vendor/github.com/dchest/captcha/LICENSE | 19 - vendor/github.com/dchest/captcha/README.md | 275 - vendor/github.com/dchest/captcha/audio.go | 232 - vendor/github.com/dchest/captcha/captcha.go | 165 - vendor/github.com/dchest/captcha/font.go | 214 - vendor/github.com/dchest/captcha/image.go | 271 - vendor/github.com/dchest/captcha/random.go | 108 - vendor/github.com/dchest/captcha/server.go | 87 - vendor/github.com/dchest/captcha/siprng.go | 278 - vendor/github.com/dchest/captcha/sounds.go | 9726 ----------------- vendor/github.com/dchest/captcha/store.go | 117 - vendor/github.com/dgrijalva/jwt-go/.gitignore | 4 - .../github.com/dgrijalva/jwt-go/.travis.yml | 13 - vendor/github.com/dgrijalva/jwt-go/LICENSE | 8 - .../dgrijalva/jwt-go/MIGRATION_GUIDE.md | 97 - vendor/github.com/dgrijalva/jwt-go/README.md | 100 - .../dgrijalva/jwt-go/VERSION_HISTORY.md | 118 - vendor/github.com/dgrijalva/jwt-go/claims.go | 134 - vendor/github.com/dgrijalva/jwt-go/doc.go | 4 - vendor/github.com/dgrijalva/jwt-go/ecdsa.go | 148 - .../dgrijalva/jwt-go/ecdsa_utils.go | 67 - vendor/github.com/dgrijalva/jwt-go/errors.go | 59 - vendor/github.com/dgrijalva/jwt-go/hmac.go | 95 - .../github.com/dgrijalva/jwt-go/map_claims.go | 94 - vendor/github.com/dgrijalva/jwt-go/none.go | 52 - vendor/github.com/dgrijalva/jwt-go/parser.go | 148 - vendor/github.com/dgrijalva/jwt-go/rsa.go | 101 - vendor/github.com/dgrijalva/jwt-go/rsa_pss.go | 126 - .../github.com/dgrijalva/jwt-go/rsa_utils.go | 101 - .../dgrijalva/jwt-go/signing_method.go | 35 - vendor/github.com/dgrijalva/jwt-go/token.go | 108 - vendor/github.com/dlclark/regexp2/.gitignore | 27 - vendor/github.com/dlclark/regexp2/.travis.yml | 5 - vendor/github.com/dlclark/regexp2/ATTRIB | 133 - vendor/github.com/dlclark/regexp2/LICENSE | 21 - vendor/github.com/dlclark/regexp2/README.md | 82 - vendor/github.com/dlclark/regexp2/match.go | 347 - vendor/github.com/dlclark/regexp2/regexp.go | 358 - vendor/github.com/dlclark/regexp2/replace.go | 177 - vendor/github.com/dlclark/regexp2/runner.go | 1621 --- .../dlclark/regexp2/syntax/charclass.go | 854 -- .../github.com/dlclark/regexp2/syntax/code.go | 274 - .../dlclark/regexp2/syntax/escape.go | 94 - .../github.com/dlclark/regexp2/syntax/fuzz.go | 20 - .../dlclark/regexp2/syntax/parser.go | 2202 ---- .../dlclark/regexp2/syntax/prefix.go | 896 -- .../dlclark/regexp2/syntax/replacerdata.go | 87 - .../github.com/dlclark/regexp2/syntax/tree.go | 654 -- .../dlclark/regexp2/syntax/writer.go | 500 - vendor/github.com/dlclark/regexp2/testoutput1 | 7061 ------------ .../github.com/go-sql-driver/mysql/.gitignore | 9 - .../go-sql-driver/mysql/.travis.yml | 107 - vendor/github.com/go-sql-driver/mysql/AUTHORS | 89 - .../go-sql-driver/mysql/CHANGELOG.md | 178 - .../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 | 420 - .../github.com/go-sql-driver/mysql/buffer.go | 147 - .../go-sql-driver/mysql/collations.go | 251 - .../go-sql-driver/mysql/connection.go | 461 - .../go-sql-driver/mysql/connection_go18.go | 207 - .../github.com/go-sql-driver/mysql/const.go | 174 - .../github.com/go-sql-driver/mysql/driver.go | 172 - 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 | 1286 --- .../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 | 726 -- .../go-sql-driver/mysql/utils_go17.go | 40 - .../go-sql-driver/mysql/utils_go18.go | 50 - vendor/github.com/jmoiron/sqlx/.gitignore | 24 - vendor/github.com/jmoiron/sqlx/.travis.yml | 27 - vendor/github.com/jmoiron/sqlx/LICENSE | 23 - vendor/github.com/jmoiron/sqlx/README.md | 187 - vendor/github.com/jmoiron/sqlx/bind.go | 217 - vendor/github.com/jmoiron/sqlx/doc.go | 12 - vendor/github.com/jmoiron/sqlx/go.mod | 7 - vendor/github.com/jmoiron/sqlx/go.sum | 6 - vendor/github.com/jmoiron/sqlx/named.go | 356 - .../github.com/jmoiron/sqlx/named_context.go | 132 - .../jmoiron/sqlx/reflectx/README.md | 17 - .../jmoiron/sqlx/reflectx/reflect.go | 441 - vendor/github.com/jmoiron/sqlx/sqlx.go | 1045 -- .../github.com/jmoiron/sqlx/sqlx_context.go | 346 - vendor/github.com/labstack/echo/.editorconfig | 25 - .../github.com/labstack/echo/.gitattributes | 20 - vendor/github.com/labstack/echo/.gitignore | 7 - vendor/github.com/labstack/echo/.travis.yml | 16 - vendor/github.com/labstack/echo/LICENSE | 21 - vendor/github.com/labstack/echo/Makefile | 3 - vendor/github.com/labstack/echo/README.md | 99 - vendor/github.com/labstack/echo/bind.go | 277 - vendor/github.com/labstack/echo/context.go | 600 - vendor/github.com/labstack/echo/echo.go | 782 -- vendor/github.com/labstack/echo/group.go | 121 - vendor/github.com/labstack/echo/log.go | 41 - .../labstack/echo/middleware/basic_auth.go | 106 - .../labstack/echo/middleware/body_dump.go | 111 - .../labstack/echo/middleware/body_limit.go | 117 - .../labstack/echo/middleware/compress.go | 122 - .../labstack/echo/middleware/cors.go | 143 - .../labstack/echo/middleware/csrf.go | 210 - .../labstack/echo/middleware/jwt.go | 227 - .../labstack/echo/middleware/key_auth.go | 150 - .../labstack/echo/middleware/logger.go | 217 - .../echo/middleware/method_override.go | 92 - .../labstack/echo/middleware/middleware.go | 38 - .../labstack/echo/middleware/proxy.go | 258 - .../labstack/echo/middleware/proxy_1_11.go | 25 - .../labstack/echo/middleware/proxy_1_11_n.go | 13 - .../labstack/echo/middleware/recover.go | 81 - .../labstack/echo/middleware/redirect.go | 153 - .../labstack/echo/middleware/request_id.go | 64 - .../labstack/echo/middleware/rewrite.go | 84 - .../labstack/echo/middleware/secure.go | 116 - .../labstack/echo/middleware/slash.go | 119 - .../labstack/echo/middleware/static.go | 229 - vendor/github.com/labstack/echo/response.go | 110 - vendor/github.com/labstack/echo/router.go | 435 - vendor/github.com/labstack/gommon/LICENSE | 22 - .../labstack/gommon/bytes/README.md | 29 - .../github.com/labstack/gommon/bytes/bytes.go | 109 - .../labstack/gommon/color/README.md | 86 - .../github.com/labstack/gommon/color/color.go | 407 - .../github.com/labstack/gommon/log/README.md | 5 - .../github.com/labstack/gommon/log/color.go | 13 - vendor/github.com/labstack/gommon/log/log.go | 416 - .../github.com/labstack/gommon/log/white.go | 12 - .../labstack/gommon/random/random.go | 48 - vendor/github.com/lib/pq/.gitignore | 4 - vendor/github.com/lib/pq/.travis.sh | 73 - vendor/github.com/lib/pq/.travis.yml | 44 - vendor/github.com/lib/pq/CONTRIBUTING.md | 29 - vendor/github.com/lib/pq/LICENSE.md | 8 - vendor/github.com/lib/pq/README.md | 95 - vendor/github.com/lib/pq/TESTS.md | 33 - vendor/github.com/lib/pq/array.go | 756 -- vendor/github.com/lib/pq/buf.go | 91 - vendor/github.com/lib/pq/conn.go | 1923 ---- vendor/github.com/lib/pq/conn_go18.go | 149 - vendor/github.com/lib/pq/connector.go | 110 - vendor/github.com/lib/pq/copy.go | 282 - vendor/github.com/lib/pq/doc.go | 245 - vendor/github.com/lib/pq/encode.go | 602 - vendor/github.com/lib/pq/error.go | 515 - vendor/github.com/lib/pq/go.mod | 1 - vendor/github.com/lib/pq/notify.go | 797 -- vendor/github.com/lib/pq/oid/doc.go | 6 - vendor/github.com/lib/pq/oid/types.go | 343 - vendor/github.com/lib/pq/rows.go | 93 - vendor/github.com/lib/pq/scram/scram.go | 264 - vendor/github.com/lib/pq/ssl.go | 175 - vendor/github.com/lib/pq/ssl_permissions.go | 20 - vendor/github.com/lib/pq/ssl_windows.go | 9 - 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/lib/pq/uuid.go | 23 - .../github.com/mattn/go-colorable/.travis.yml | 9 - vendor/github.com/mattn/go-colorable/LICENSE | 21 - .../github.com/mattn/go-colorable/README.md | 48 - .../mattn/go-colorable/colorable_appengine.go | 29 - .../mattn/go-colorable/colorable_others.go | 30 - .../mattn/go-colorable/colorable_windows.go | 980 -- vendor/github.com/mattn/go-colorable/go.mod | 3 - vendor/github.com/mattn/go-colorable/go.sum | 4 - .../mattn/go-colorable/noncolorable.go | 55 - vendor/github.com/mattn/go-isatty/.travis.yml | 13 - vendor/github.com/mattn/go-isatty/LICENSE | 9 - vendor/github.com/mattn/go-isatty/README.md | 50 - vendor/github.com/mattn/go-isatty/doc.go | 2 - vendor/github.com/mattn/go-isatty/go.mod | 3 - vendor/github.com/mattn/go-isatty/go.sum | 2 - .../mattn/go-isatty/isatty_android.go | 23 - .../github.com/mattn/go-isatty/isatty_bsd.go | 24 - .../mattn/go-isatty/isatty_others.go | 15 - .../mattn/go-isatty/isatty_solaris.go | 22 - .../mattn/go-isatty/isatty_tcgets.go | 19 - .../mattn/go-isatty/isatty_windows.go | 94 - vendor/github.com/pkg/errors/.gitignore | 24 - vendor/github.com/pkg/errors/.travis.yml | 15 - vendor/github.com/pkg/errors/LICENSE | 23 - vendor/github.com/pkg/errors/README.md | 52 - vendor/github.com/pkg/errors/appveyor.yml | 32 - vendor/github.com/pkg/errors/errors.go | 282 - vendor/github.com/pkg/errors/stack.go | 147 - vendor/github.com/pressly/goose/.gitignore | 11 - vendor/github.com/pressly/goose/.travis.yml | 11 - vendor/github.com/pressly/goose/Gopkg.toml | 11 - vendor/github.com/pressly/goose/LICENSE | 21 - vendor/github.com/pressly/goose/Makefile | 9 - vendor/github.com/pressly/goose/README.md | 256 - vendor/github.com/pressly/goose/create.go | 88 - vendor/github.com/pressly/goose/dialect.go | 211 - vendor/github.com/pressly/goose/down.go | 56 - vendor/github.com/pressly/goose/fix.go | 46 - vendor/github.com/pressly/goose/goose.go | 100 - vendor/github.com/pressly/goose/log.go | 30 - vendor/github.com/pressly/goose/migrate.go | 319 - vendor/github.com/pressly/goose/migration.go | 124 - .../github.com/pressly/goose/migration_sql.go | 240 - vendor/github.com/pressly/goose/redo.go | 33 - vendor/github.com/pressly/goose/reset.go | 60 - vendor/github.com/pressly/goose/status.go | 54 - vendor/github.com/pressly/goose/up.go | 65 - vendor/github.com/pressly/goose/version.go | 28 - vendor/github.com/rs/zerolog/.gitignore | 25 - vendor/github.com/rs/zerolog/.travis.yml | 15 - vendor/github.com/rs/zerolog/CNAME | 1 - vendor/github.com/rs/zerolog/LICENSE | 21 - vendor/github.com/rs/zerolog/README.md | 595 - vendor/github.com/rs/zerolog/_config.yml | 1 - vendor/github.com/rs/zerolog/array.go | 224 - vendor/github.com/rs/zerolog/console.go | 391 - vendor/github.com/rs/zerolog/context.go | 421 - vendor/github.com/rs/zerolog/ctx.go | 47 - vendor/github.com/rs/zerolog/encoder.go | 56 - vendor/github.com/rs/zerolog/encoder_cbor.go | 35 - vendor/github.com/rs/zerolog/encoder_json.go | 32 - vendor/github.com/rs/zerolog/event.go | 709 -- vendor/github.com/rs/zerolog/fields.go | 242 - vendor/github.com/rs/zerolog/globals.go | 110 - vendor/github.com/rs/zerolog/go.mod | 9 - vendor/github.com/rs/zerolog/go112.go | 7 - vendor/github.com/rs/zerolog/hook.go | 60 - .../rs/zerolog/internal/cbor/README.md | 56 - .../rs/zerolog/internal/cbor/base.go | 11 - .../rs/zerolog/internal/cbor/cbor.go | 100 - .../rs/zerolog/internal/cbor/decode_stream.go | 614 -- .../rs/zerolog/internal/cbor/string.go | 68 - .../rs/zerolog/internal/cbor/time.go | 93 - .../rs/zerolog/internal/cbor/types.go | 478 - .../rs/zerolog/internal/json/base.go | 12 - .../rs/zerolog/internal/json/bytes.go | 85 - .../rs/zerolog/internal/json/string.go | 121 - .../rs/zerolog/internal/json/time.go | 103 - .../rs/zerolog/internal/json/types.go | 407 - vendor/github.com/rs/zerolog/log.go | 417 - vendor/github.com/rs/zerolog/not_go112.go | 5 - vendor/github.com/rs/zerolog/pretty.png | Bin 144694 -> 0 bytes vendor/github.com/rs/zerolog/sampler.go | 130 - vendor/github.com/rs/zerolog/syslog.go | 57 - vendor/github.com/rs/zerolog/writer.go | 100 - .../valyala/bytebufferpool/.travis.yml | 15 - .../github.com/valyala/bytebufferpool/LICENSE | 22 - .../valyala/bytebufferpool/README.md | 21 - .../valyala/bytebufferpool/bytebuffer.go | 111 - .../github.com/valyala/bytebufferpool/doc.go | 7 - .../github.com/valyala/bytebufferpool/pool.go | 151 - .../github.com/valyala/fasttemplate/LICENSE | 22 - .../github.com/valyala/fasttemplate/README.md | 85 - vendor/github.com/valyala/fasttemplate/go.mod | 3 - vendor/github.com/valyala/fasttemplate/go.sum | 2 - .../valyala/fasttemplate/template.go | 317 - .../github.com/valyala/fasttemplate/unsafe.go | 22 - .../valyala/fasttemplate/unsafe_gae.go | 11 - vendor/go.dev.pztrn.name/flagger/.drone.yml | 66 - vendor/go.dev.pztrn.name/flagger/.gitignore | 1 - .../go.dev.pztrn.name/flagger/.golangci.yml | 23 - vendor/go.dev.pztrn.name/flagger/LICENSE | 7 - vendor/go.dev.pztrn.name/flagger/README.md | 57 - vendor/go.dev.pztrn.name/flagger/errors.go | 36 - vendor/go.dev.pztrn.name/flagger/exported.go | 53 - vendor/go.dev.pztrn.name/flagger/flag.go | 36 - vendor/go.dev.pztrn.name/flagger/flagger.go | 141 - vendor/go.dev.pztrn.name/flagger/go.mod | 8 - vendor/go.dev.pztrn.name/flagger/go.sum | 13 - .../flagger/loggerinterface.go | 31 - vendor/golang.org/x/crypto/AUTHORS | 3 - vendor/golang.org/x/crypto/CONTRIBUTORS | 3 - vendor/golang.org/x/crypto/LICENSE | 27 - vendor/golang.org/x/crypto/PATENTS | 22 - vendor/golang.org/x/crypto/acme/acme.go | 1097 -- .../x/crypto/acme/autocert/autocert.go | 1249 --- .../x/crypto/acme/autocert/cache.go | 136 - .../x/crypto/acme/autocert/listener.go | 157 - .../x/crypto/acme/autocert/renewal.go | 141 - vendor/golang.org/x/crypto/acme/http.go | 321 - vendor/golang.org/x/crypto/acme/jws.go | 184 - vendor/golang.org/x/crypto/acme/rfc8555.go | 392 - vendor/golang.org/x/crypto/acme/types.go | 548 - .../golang.org/x/crypto/acme/version_go112.go | 27 - vendor/golang.org/x/crypto/pbkdf2/pbkdf2.go | 77 - vendor/golang.org/x/crypto/scrypt/scrypt.go | 213 - vendor/golang.org/x/net/AUTHORS | 3 - vendor/golang.org/x/net/CONTRIBUTORS | 3 - vendor/golang.org/x/net/LICENSE | 27 - vendor/golang.org/x/net/PATENTS | 22 - vendor/golang.org/x/net/idna/idna10.0.0.go | 734 -- vendor/golang.org/x/net/idna/idna9.0.0.go | 682 -- vendor/golang.org/x/net/idna/punycode.go | 203 - vendor/golang.org/x/net/idna/tables10.0.0.go | 4559 -------- vendor/golang.org/x/net/idna/tables11.0.0.go | 4653 -------- vendor/golang.org/x/net/idna/tables9.0.0.go | 4486 -------- vendor/golang.org/x/net/idna/trie.go | 72 - vendor/golang.org/x/net/idna/trieval.go | 119 - vendor/golang.org/x/net/webdav/file.go | 795 -- vendor/golang.org/x/net/webdav/if.go | 173 - .../x/net/webdav/internal/xml/README | 11 - .../x/net/webdav/internal/xml/marshal.go | 1223 --- .../x/net/webdav/internal/xml/read.go | 692 -- .../x/net/webdav/internal/xml/typeinfo.go | 371 - .../x/net/webdav/internal/xml/xml.go | 1998 ---- vendor/golang.org/x/net/webdav/lock.go | 445 - vendor/golang.org/x/net/webdav/prop.go | 469 - vendor/golang.org/x/net/webdav/webdav.go | 706 -- vendor/golang.org/x/net/webdav/xml.go | 519 - vendor/golang.org/x/sys/AUTHORS | 3 - vendor/golang.org/x/sys/CONTRIBUTORS | 3 - vendor/golang.org/x/sys/LICENSE | 27 - vendor/golang.org/x/sys/PATENTS | 22 - vendor/golang.org/x/sys/unix/.gitignore | 2 - vendor/golang.org/x/sys/unix/README.md | 173 - .../golang.org/x/sys/unix/affinity_linux.go | 128 - vendor/golang.org/x/sys/unix/aliases.go | 14 - vendor/golang.org/x/sys/unix/asm_aix_ppc64.s | 17 - 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 - .../golang.org/x/sys/unix/asm_freebsd_arm64.s | 29 - vendor/golang.org/x/sys/unix/asm_linux_386.s | 65 - .../golang.org/x/sys/unix/asm_linux_amd64.s | 57 - vendor/golang.org/x/sys/unix/asm_linux_arm.s | 56 - .../golang.org/x/sys/unix/asm_linux_arm64.s | 52 - .../golang.org/x/sys/unix/asm_linux_mips64x.s | 56 - .../golang.org/x/sys/unix/asm_linux_mipsx.s | 54 - .../golang.org/x/sys/unix/asm_linux_ppc64x.s | 44 - .../golang.org/x/sys/unix/asm_linux_riscv64.s | 54 - .../golang.org/x/sys/unix/asm_linux_s390x.s | 56 - 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_netbsd_arm64.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_openbsd_arm.s | 29 - .../golang.org/x/sys/unix/asm_openbsd_arm64.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/cap_freebsd.go | 195 - vendor/golang.org/x/sys/unix/constants.go | 13 - vendor/golang.org/x/sys/unix/dev_aix_ppc.go | 27 - vendor/golang.org/x/sys/unix/dev_aix_ppc64.go | 29 - vendor/golang.org/x/sys/unix/dev_darwin.go | 24 - vendor/golang.org/x/sys/unix/dev_dragonfly.go | 30 - vendor/golang.org/x/sys/unix/dev_freebsd.go | 30 - vendor/golang.org/x/sys/unix/dev_linux.go | 42 - vendor/golang.org/x/sys/unix/dev_netbsd.go | 29 - vendor/golang.org/x/sys/unix/dev_openbsd.go | 29 - vendor/golang.org/x/sys/unix/dirent.go | 102 - vendor/golang.org/x/sys/unix/endian_big.go | 9 - vendor/golang.org/x/sys/unix/endian_little.go | 9 - vendor/golang.org/x/sys/unix/env_unix.go | 31 - .../x/sys/unix/errors_freebsd_386.go | 227 - .../x/sys/unix/errors_freebsd_amd64.go | 227 - .../x/sys/unix/errors_freebsd_arm.go | 226 - vendor/golang.org/x/sys/unix/fcntl.go | 32 - vendor/golang.org/x/sys/unix/fcntl_darwin.go | 18 - .../x/sys/unix/fcntl_linux_32bit.go | 13 - vendor/golang.org/x/sys/unix/gccgo.go | 62 - vendor/golang.org/x/sys/unix/gccgo_c.c | 39 - .../x/sys/unix/gccgo_linux_amd64.go | 20 - vendor/golang.org/x/sys/unix/ioctl.go | 30 - vendor/golang.org/x/sys/unix/mkall.sh | 227 - vendor/golang.org/x/sys/unix/mkerrors.sh | 666 -- vendor/golang.org/x/sys/unix/pagesize_unix.go | 15 - .../golang.org/x/sys/unix/pledge_openbsd.go | 163 - vendor/golang.org/x/sys/unix/race.go | 30 - vendor/golang.org/x/sys/unix/race0.go | 25 - .../x/sys/unix/readdirent_getdents.go | 12 - .../x/sys/unix/readdirent_getdirentries.go | 19 - .../golang.org/x/sys/unix/sockcmsg_linux.go | 36 - vendor/golang.org/x/sys/unix/sockcmsg_unix.go | 120 - vendor/golang.org/x/sys/unix/str.go | 26 - vendor/golang.org/x/sys/unix/syscall.go | 53 - vendor/golang.org/x/sys/unix/syscall_aix.go | 573 - .../golang.org/x/sys/unix/syscall_aix_ppc.go | 50 - .../x/sys/unix/syscall_aix_ppc64.go | 81 - vendor/golang.org/x/sys/unix/syscall_bsd.go | 618 -- .../golang.org/x/sys/unix/syscall_darwin.go | 717 -- .../x/sys/unix/syscall_darwin_386.go | 65 - .../x/sys/unix/syscall_darwin_amd64.go | 65 - .../x/sys/unix/syscall_darwin_arm.go | 68 - .../x/sys/unix/syscall_darwin_arm64.go | 70 - .../x/sys/unix/syscall_darwin_libSystem.go | 31 - .../x/sys/unix/syscall_dragonfly.go | 556 - .../x/sys/unix/syscall_dragonfly_amd64.go | 52 - .../golang.org/x/sys/unix/syscall_freebsd.go | 914 -- .../x/sys/unix/syscall_freebsd_386.go | 52 - .../x/sys/unix/syscall_freebsd_amd64.go | 52 - .../x/sys/unix/syscall_freebsd_arm.go | 52 - .../x/sys/unix/syscall_freebsd_arm64.go | 52 - vendor/golang.org/x/sys/unix/syscall_linux.go | 1868 ---- .../x/sys/unix/syscall_linux_386.go | 386 - .../x/sys/unix/syscall_linux_amd64.go | 190 - .../x/sys/unix/syscall_linux_amd64_gc.go | 13 - .../x/sys/unix/syscall_linux_arm.go | 287 - .../x/sys/unix/syscall_linux_arm64.go | 223 - .../golang.org/x/sys/unix/syscall_linux_gc.go | 14 - .../x/sys/unix/syscall_linux_gc_386.go | 16 - .../x/sys/unix/syscall_linux_gccgo_386.go | 30 - .../x/sys/unix/syscall_linux_gccgo_arm.go | 20 - .../x/sys/unix/syscall_linux_mips64x.go | 222 - .../x/sys/unix/syscall_linux_mipsx.go | 234 - .../x/sys/unix/syscall_linux_ppc64x.go | 152 - .../x/sys/unix/syscall_linux_riscv64.go | 226 - .../x/sys/unix/syscall_linux_s390x.go | 338 - .../x/sys/unix/syscall_linux_sparc64.go | 147 - .../golang.org/x/sys/unix/syscall_netbsd.go | 655 -- .../x/sys/unix/syscall_netbsd_386.go | 33 - .../x/sys/unix/syscall_netbsd_amd64.go | 33 - .../x/sys/unix/syscall_netbsd_arm.go | 33 - .../x/sys/unix/syscall_netbsd_arm64.go | 33 - .../golang.org/x/sys/unix/syscall_openbsd.go | 449 - .../x/sys/unix/syscall_openbsd_386.go | 37 - .../x/sys/unix/syscall_openbsd_amd64.go | 37 - .../x/sys/unix/syscall_openbsd_arm.go | 37 - .../x/sys/unix/syscall_openbsd_arm64.go | 37 - .../golang.org/x/sys/unix/syscall_solaris.go | 754 -- .../x/sys/unix/syscall_solaris_amd64.go | 23 - vendor/golang.org/x/sys/unix/syscall_unix.go | 431 - .../golang.org/x/sys/unix/syscall_unix_gc.go | 15 - .../x/sys/unix/syscall_unix_gc_ppc64x.go | 24 - vendor/golang.org/x/sys/unix/timestruct.go | 82 - .../golang.org/x/sys/unix/unveil_openbsd.go | 42 - vendor/golang.org/x/sys/unix/xattr_bsd.go | 240 - .../golang.org/x/sys/unix/zerrors_aix_ppc.go | 1374 --- .../x/sys/unix/zerrors_aix_ppc64.go | 1375 --- .../x/sys/unix/zerrors_darwin_386.go | 1783 --- .../x/sys/unix/zerrors_darwin_amd64.go | 1783 --- .../x/sys/unix/zerrors_darwin_arm.go | 1783 --- .../x/sys/unix/zerrors_darwin_arm64.go | 1783 --- .../x/sys/unix/zerrors_dragonfly_amd64.go | 1650 --- .../x/sys/unix/zerrors_freebsd_386.go | 1793 --- .../x/sys/unix/zerrors_freebsd_amd64.go | 1794 --- .../x/sys/unix/zerrors_freebsd_arm.go | 1802 --- .../x/sys/unix/zerrors_freebsd_arm64.go | 1794 --- .../x/sys/unix/zerrors_linux_386.go | 3020 ----- .../x/sys/unix/zerrors_linux_amd64.go | 3020 ----- .../x/sys/unix/zerrors_linux_arm.go | 3026 ----- .../x/sys/unix/zerrors_linux_arm64.go | 3011 ----- .../x/sys/unix/zerrors_linux_mips.go | 3027 ----- .../x/sys/unix/zerrors_linux_mips64.go | 3027 ----- .../x/sys/unix/zerrors_linux_mips64le.go | 3027 ----- .../x/sys/unix/zerrors_linux_mipsle.go | 3027 ----- .../x/sys/unix/zerrors_linux_ppc64.go | 3082 ------ .../x/sys/unix/zerrors_linux_ppc64le.go | 3082 ------ .../x/sys/unix/zerrors_linux_riscv64.go | 3007 ----- .../x/sys/unix/zerrors_linux_s390x.go | 3080 ------ .../x/sys/unix/zerrors_linux_sparc64.go | 3076 ------ .../x/sys/unix/zerrors_netbsd_386.go | 1772 --- .../x/sys/unix/zerrors_netbsd_amd64.go | 1762 --- .../x/sys/unix/zerrors_netbsd_arm.go | 1751 --- .../x/sys/unix/zerrors_netbsd_arm64.go | 1762 --- .../x/sys/unix/zerrors_openbsd_386.go | 1654 --- .../x/sys/unix/zerrors_openbsd_amd64.go | 1765 --- .../x/sys/unix/zerrors_openbsd_arm.go | 1656 --- .../x/sys/unix/zerrors_openbsd_arm64.go | 1789 --- .../x/sys/unix/zerrors_solaris_amd64.go | 1532 --- .../golang.org/x/sys/unix/zptrace386_linux.go | 80 - .../golang.org/x/sys/unix/zptracearm_linux.go | 41 - .../x/sys/unix/zptracemips_linux.go | 50 - .../x/sys/unix/zptracemipsle_linux.go | 50 - .../golang.org/x/sys/unix/zsyscall_aix_ppc.go | 1484 --- .../x/sys/unix/zsyscall_aix_ppc64.go | 1442 --- .../x/sys/unix/zsyscall_aix_ppc64_gc.go | 1192 -- .../x/sys/unix/zsyscall_aix_ppc64_gccgo.go | 1070 -- .../x/sys/unix/zsyscall_darwin_386.1_11.go | 1810 --- .../x/sys/unix/zsyscall_darwin_386.go | 2505 ----- .../x/sys/unix/zsyscall_darwin_386.s | 284 - .../x/sys/unix/zsyscall_darwin_amd64.1_11.go | 1810 --- .../x/sys/unix/zsyscall_darwin_amd64.go | 2520 ----- .../x/sys/unix/zsyscall_darwin_amd64.s | 286 - .../x/sys/unix/zsyscall_darwin_arm.1_11.go | 1793 --- .../x/sys/unix/zsyscall_darwin_arm.go | 2468 ----- .../x/sys/unix/zsyscall_darwin_arm.s | 280 - .../x/sys/unix/zsyscall_darwin_arm64.1_11.go | 1793 --- .../x/sys/unix/zsyscall_darwin_arm64.go | 2468 ----- .../x/sys/unix/zsyscall_darwin_arm64.s | 280 - .../x/sys/unix/zsyscall_dragonfly_amd64.go | 1676 --- .../x/sys/unix/zsyscall_freebsd_386.go | 2025 ---- .../x/sys/unix/zsyscall_freebsd_amd64.go | 2025 ---- .../x/sys/unix/zsyscall_freebsd_arm.go | 2025 ---- .../x/sys/unix/zsyscall_freebsd_arm64.go | 2025 ---- .../x/sys/unix/zsyscall_linux_386.go | 2270 ---- .../x/sys/unix/zsyscall_linux_amd64.go | 2437 ----- .../x/sys/unix/zsyscall_linux_arm.go | 2407 ---- .../x/sys/unix/zsyscall_linux_arm64.go | 2294 ---- .../x/sys/unix/zsyscall_linux_mips.go | 2450 ----- .../x/sys/unix/zsyscall_linux_mips64.go | 2421 ---- .../x/sys/unix/zsyscall_linux_mips64le.go | 2421 ---- .../x/sys/unix/zsyscall_linux_mipsle.go | 2450 ----- .../x/sys/unix/zsyscall_linux_ppc64.go | 2499 ----- .../x/sys/unix/zsyscall_linux_ppc64le.go | 2499 ----- .../x/sys/unix/zsyscall_linux_riscv64.go | 2274 ---- .../x/sys/unix/zsyscall_linux_s390x.go | 2269 ---- .../x/sys/unix/zsyscall_linux_sparc64.go | 2432 ----- .../x/sys/unix/zsyscall_netbsd_386.go | 1826 ---- .../x/sys/unix/zsyscall_netbsd_amd64.go | 1826 ---- .../x/sys/unix/zsyscall_netbsd_arm.go | 1826 ---- .../x/sys/unix/zsyscall_netbsd_arm64.go | 1826 ---- .../x/sys/unix/zsyscall_openbsd_386.go | 1692 --- .../x/sys/unix/zsyscall_openbsd_amd64.go | 1692 --- .../x/sys/unix/zsyscall_openbsd_arm.go | 1692 --- .../x/sys/unix/zsyscall_openbsd_arm64.go | 1692 --- .../x/sys/unix/zsyscall_solaris_amd64.go | 1953 ---- .../x/sys/unix/zsysctl_openbsd_386.go | 272 - .../x/sys/unix/zsysctl_openbsd_amd64.go | 270 - .../x/sys/unix/zsysctl_openbsd_arm.go | 272 - .../x/sys/unix/zsysctl_openbsd_arm64.go | 275 - .../x/sys/unix/zsysnum_darwin_386.go | 436 - .../x/sys/unix/zsysnum_darwin_amd64.go | 438 - .../x/sys/unix/zsysnum_darwin_arm.go | 436 - .../x/sys/unix/zsysnum_darwin_arm64.go | 436 - .../x/sys/unix/zsysnum_dragonfly_amd64.go | 315 - .../x/sys/unix/zsysnum_freebsd_386.go | 396 - .../x/sys/unix/zsysnum_freebsd_amd64.go | 396 - .../x/sys/unix/zsysnum_freebsd_arm.go | 396 - .../x/sys/unix/zsysnum_freebsd_arm64.go | 396 - .../x/sys/unix/zsysnum_linux_386.go | 432 - .../x/sys/unix/zsysnum_linux_amd64.go | 354 - .../x/sys/unix/zsysnum_linux_arm.go | 396 - .../x/sys/unix/zsysnum_linux_arm64.go | 299 - .../x/sys/unix/zsysnum_linux_mips.go | 417 - .../x/sys/unix/zsysnum_linux_mips64.go | 347 - .../x/sys/unix/zsysnum_linux_mips64le.go | 347 - .../x/sys/unix/zsysnum_linux_mipsle.go | 417 - .../x/sys/unix/zsysnum_linux_ppc64.go | 396 - .../x/sys/unix/zsysnum_linux_ppc64le.go | 396 - .../x/sys/unix/zsysnum_linux_riscv64.go | 298 - .../x/sys/unix/zsysnum_linux_s390x.go | 361 - .../x/sys/unix/zsysnum_linux_sparc64.go | 376 - .../x/sys/unix/zsysnum_netbsd_386.go | 274 - .../x/sys/unix/zsysnum_netbsd_amd64.go | 274 - .../x/sys/unix/zsysnum_netbsd_arm.go | 274 - .../x/sys/unix/zsysnum_netbsd_arm64.go | 274 - .../x/sys/unix/zsysnum_openbsd_386.go | 218 - .../x/sys/unix/zsysnum_openbsd_amd64.go | 218 - .../x/sys/unix/zsysnum_openbsd_arm.go | 218 - .../x/sys/unix/zsysnum_openbsd_arm64.go | 217 - .../golang.org/x/sys/unix/ztypes_aix_ppc.go | 352 - .../golang.org/x/sys/unix/ztypes_aix_ppc64.go | 356 - .../x/sys/unix/ztypes_darwin_386.go | 499 - .../x/sys/unix/ztypes_darwin_amd64.go | 509 - .../x/sys/unix/ztypes_darwin_arm.go | 500 - .../x/sys/unix/ztypes_darwin_arm64.go | 509 - .../x/sys/unix/ztypes_dragonfly_amd64.go | 469 - .../x/sys/unix/ztypes_freebsd_386.go | 700 -- .../x/sys/unix/ztypes_freebsd_amd64.go | 706 -- .../x/sys/unix/ztypes_freebsd_arm.go | 683 -- .../x/sys/unix/ztypes_freebsd_arm64.go | 684 -- .../golang.org/x/sys/unix/ztypes_linux_386.go | 2523 ----- .../x/sys/unix/ztypes_linux_amd64.go | 2537 ----- .../golang.org/x/sys/unix/ztypes_linux_arm.go | 2514 ----- .../x/sys/unix/ztypes_linux_arm64.go | 2516 ----- .../x/sys/unix/ztypes_linux_mips.go | 2520 ----- .../x/sys/unix/ztypes_linux_mips64.go | 2518 ----- .../x/sys/unix/ztypes_linux_mips64le.go | 2518 ----- .../x/sys/unix/ztypes_linux_mipsle.go | 2520 ----- .../x/sys/unix/ztypes_linux_ppc64.go | 2526 ----- .../x/sys/unix/ztypes_linux_ppc64le.go | 2526 ----- .../x/sys/unix/ztypes_linux_riscv64.go | 2544 ----- .../x/sys/unix/ztypes_linux_s390x.go | 2540 ----- .../x/sys/unix/ztypes_linux_sparc64.go | 2521 ----- .../x/sys/unix/ztypes_netbsd_386.go | 466 - .../x/sys/unix/ztypes_netbsd_amd64.go | 473 - .../x/sys/unix/ztypes_netbsd_arm.go | 471 - .../x/sys/unix/ztypes_netbsd_arm64.go | 473 - .../x/sys/unix/ztypes_openbsd_386.go | 571 - .../x/sys/unix/ztypes_openbsd_amd64.go | 571 - .../x/sys/unix/ztypes_openbsd_arm.go | 572 - .../x/sys/unix/ztypes_openbsd_arm64.go | 565 - .../x/sys/unix/ztypes_solaris_amd64.go | 442 - vendor/golang.org/x/text/AUTHORS | 3 - vendor/golang.org/x/text/CONTRIBUTORS | 3 - vendor/golang.org/x/text/LICENSE | 27 - vendor/golang.org/x/text/PATENTS | 22 - .../x/text/secure/bidirule/bidirule.go | 336 - .../x/text/secure/bidirule/bidirule10.0.0.go | 11 - .../x/text/secure/bidirule/bidirule9.0.0.go | 14 - .../golang.org/x/text/transform/transform.go | 705 -- vendor/golang.org/x/text/unicode/bidi/bidi.go | 198 - .../golang.org/x/text/unicode/bidi/bracket.go | 335 - vendor/golang.org/x/text/unicode/bidi/core.go | 1058 -- vendor/golang.org/x/text/unicode/bidi/prop.go | 206 - .../x/text/unicode/bidi/tables10.0.0.go | 1815 --- .../x/text/unicode/bidi/tables11.0.0.go | 1887 ---- .../x/text/unicode/bidi/tables9.0.0.go | 1781 --- .../golang.org/x/text/unicode/bidi/trieval.go | 60 - .../x/text/unicode/norm/composition.go | 512 - .../x/text/unicode/norm/forminfo.go | 278 - .../golang.org/x/text/unicode/norm/input.go | 109 - vendor/golang.org/x/text/unicode/norm/iter.go | 458 - .../x/text/unicode/norm/normalize.go | 609 -- .../x/text/unicode/norm/readwriter.go | 125 - .../x/text/unicode/norm/tables10.0.0.go | 7657 ------------- .../x/text/unicode/norm/tables11.0.0.go | 7693 ------------- .../x/text/unicode/norm/tables9.0.0.go | 7637 ------------- .../x/text/unicode/norm/transform.go | 88 - vendor/golang.org/x/text/unicode/norm/trie.go | 54 - vendor/google.golang.org/appengine/LICENSE | 202 - .../appengine/cloudsql/cloudsql.go | 62 - .../appengine/cloudsql/cloudsql_classic.go | 17 - .../appengine/cloudsql/cloudsql_vm.go | 16 - vendor/gopkg.in/yaml.v2/.travis.yml | 12 - vendor/gopkg.in/yaml.v2/LICENSE | 201 - vendor/gopkg.in/yaml.v2/LICENSE.libyaml | 31 - vendor/gopkg.in/yaml.v2/NOTICE | 13 - vendor/gopkg.in/yaml.v2/README.md | 133 - vendor/gopkg.in/yaml.v2/apic.go | 739 -- vendor/gopkg.in/yaml.v2/decode.go | 813 -- vendor/gopkg.in/yaml.v2/emitterc.go | 1685 --- vendor/gopkg.in/yaml.v2/encode.go | 390 - vendor/gopkg.in/yaml.v2/go.mod | 5 - vendor/gopkg.in/yaml.v2/parserc.go | 1095 -- vendor/gopkg.in/yaml.v2/readerc.go | 412 - vendor/gopkg.in/yaml.v2/resolve.go | 258 - vendor/gopkg.in/yaml.v2/scannerc.go | 2712 ----- vendor/gopkg.in/yaml.v2/sorter.go | 113 - vendor/gopkg.in/yaml.v2/writerc.go | 26 - vendor/gopkg.in/yaml.v2/yaml.go | 466 - vendor/gopkg.in/yaml.v2/yamlh.go | 738 -- vendor/gopkg.in/yaml.v2/yamlprivateh.go | 173 - vendor/modules.txt | 97 - 895 files changed, 6 insertions(+), 378854 deletions(-) delete mode 100644 vendor/github.com/alecthomas/chroma/.gitignore delete mode 100644 vendor/github.com/alecthomas/chroma/.golangci.yml delete mode 100644 vendor/github.com/alecthomas/chroma/.goreleaser.yml delete mode 100644 vendor/github.com/alecthomas/chroma/.travis.yml delete mode 100644 vendor/github.com/alecthomas/chroma/COPYING delete mode 100644 vendor/github.com/alecthomas/chroma/Makefile delete mode 100644 vendor/github.com/alecthomas/chroma/README.md delete mode 100644 vendor/github.com/alecthomas/chroma/coalesce.go delete mode 100644 vendor/github.com/alecthomas/chroma/colour.go delete mode 100644 vendor/github.com/alecthomas/chroma/delegate.go delete mode 100644 vendor/github.com/alecthomas/chroma/doc.go delete mode 100644 vendor/github.com/alecthomas/chroma/formatter.go delete mode 100644 vendor/github.com/alecthomas/chroma/formatters/api.go delete mode 100644 vendor/github.com/alecthomas/chroma/formatters/html/html.go delete mode 100644 vendor/github.com/alecthomas/chroma/formatters/json.go delete mode 100644 vendor/github.com/alecthomas/chroma/formatters/svg/font_liberation_mono.go delete mode 100644 vendor/github.com/alecthomas/chroma/formatters/svg/svg.go delete mode 100644 vendor/github.com/alecthomas/chroma/formatters/tokens.go delete mode 100644 vendor/github.com/alecthomas/chroma/formatters/tty_indexed.go delete mode 100644 vendor/github.com/alecthomas/chroma/formatters/tty_truecolour.go delete mode 100644 vendor/github.com/alecthomas/chroma/go.mod delete mode 100644 vendor/github.com/alecthomas/chroma/go.sum delete mode 100644 vendor/github.com/alecthomas/chroma/iterator.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexer.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/README.md delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/a/abap.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/a/abnf.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/a/actionscript.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/a/actionscript3.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/a/ada.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/a/angular2.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/a/antlr.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/a/apache.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/a/apl.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/a/applescript.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/a/arduino.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/a/awk.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/b/ballerina.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/b/bash.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/b/batch.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/b/bibtex.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/b/blitz.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/b/bnf.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/b/brainfuck.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/c/c.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/c/capnproto.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/c/ceylon.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/c/cfengine3.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/c/chaiscript.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/c/cheetah.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/c/cl.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/c/clojure.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/c/cmake.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/c/cobol.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/c/coffee.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/c/coldfusion.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/c/coq.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/c/cpp.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/c/cql.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/c/crystal.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/c/csharp.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/c/css.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/c/cython.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/circular/doc.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/circular/php.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/d/d.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/d/dart.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/d/diff.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/d/django.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/d/docker.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/d/dtd.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/e/ebnf.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/e/elixir.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/e/elm.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/e/emacs.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/e/erlang.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/f/factor.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/f/fish.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/f/forth.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/f/fortran.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/f/fsharp.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/g/gas.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/g/gdscript.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/g/genshi.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/g/glsl.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/g/gnuplot.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/g/go.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/g/graphql.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/g/groovy.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/h/handlebars.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/h/haskell.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/h/haxe.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/h/hcl.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/h/hexdump.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/h/html.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/h/http.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/h/hy.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/hlb.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/i/idris.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/i/igor.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/i/ini.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/i/io.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/internal/api.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/j/j.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/j/java.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/j/javascript.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/j/json.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/j/jsx.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/j/julia.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/j/jungle.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/k/kotlin.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/l/lighttpd.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/l/llvm.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/l/lua.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/lexers.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/m/make.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/m/mako.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/m/markdown.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/m/mason.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/m/mathematica.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/m/matlab.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/m/minizinc.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/m/mlir.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/m/modula2.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/m/monkeyc.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/m/mwscript.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/m/myghty.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/m/mysql.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/n/nasm.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/n/newspeak.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/n/nginx.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/n/nim.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/n/nix.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/o/objectivec.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/o/ocaml.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/o/octave.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/o/openscad.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/o/org.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/p/pacman.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/p/perl.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/p/pig.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/p/pkgconfig.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/p/plaintext.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/p/plsql.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/p/postgres.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/p/postscript.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/p/povray.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/p/powershell.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/p/prolog.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/p/protobuf.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/p/puppet.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/p/python.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/p/python3.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/q/qbasic.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/r/r.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/r/racket.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/r/ragel.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/r/regedit.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/r/rexx.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/r/rst.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/r/ruby.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/r/rust.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/s/sas.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/s/sass.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/s/scala.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/s/scheme.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/s/scilab.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/s/scss.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/s/smalltalk.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/s/smarty.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/s/sml.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/s/snobol.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/s/solidity.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/s/sparql.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/s/sql.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/s/squid.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/s/swift.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/s/systemd.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/s/systemverilog.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/t/tablegen.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/t/tasm.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/t/tcl.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/t/tcsh.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/t/termcap.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/t/terminfo.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/t/terraform.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/t/tex.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/t/thrift.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/t/toml.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/t/tradingview.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/t/transactsql.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/t/turing.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/t/turtle.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/t/twig.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/t/typescript.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/t/typoscript.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/v/vb.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/v/verilog.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/v/vhdl.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/v/vim.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/v/vue.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/w/wdte.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/x/xml.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/x/xorg.go delete mode 100644 vendor/github.com/alecthomas/chroma/lexers/y/yaml.go delete mode 100644 vendor/github.com/alecthomas/chroma/mutators.go delete mode 100644 vendor/github.com/alecthomas/chroma/pygments-lexers.txt delete mode 100644 vendor/github.com/alecthomas/chroma/regexp.go delete mode 100644 vendor/github.com/alecthomas/chroma/remap.go delete mode 100644 vendor/github.com/alecthomas/chroma/style.go delete mode 100644 vendor/github.com/alecthomas/chroma/styles/abap.go delete mode 100644 vendor/github.com/alecthomas/chroma/styles/algol.go delete mode 100644 vendor/github.com/alecthomas/chroma/styles/algol_nu.go delete mode 100644 vendor/github.com/alecthomas/chroma/styles/api.go delete mode 100644 vendor/github.com/alecthomas/chroma/styles/arduino.go delete mode 100644 vendor/github.com/alecthomas/chroma/styles/autumn.go delete mode 100644 vendor/github.com/alecthomas/chroma/styles/borland.go delete mode 100644 vendor/github.com/alecthomas/chroma/styles/bw.go delete mode 100644 vendor/github.com/alecthomas/chroma/styles/colorful.go delete mode 100644 vendor/github.com/alecthomas/chroma/styles/dracula.go delete mode 100644 vendor/github.com/alecthomas/chroma/styles/emacs.go delete mode 100644 vendor/github.com/alecthomas/chroma/styles/friendly.go delete mode 100644 vendor/github.com/alecthomas/chroma/styles/fruity.go delete mode 100644 vendor/github.com/alecthomas/chroma/styles/github.go delete mode 100644 vendor/github.com/alecthomas/chroma/styles/igor.go delete mode 100644 vendor/github.com/alecthomas/chroma/styles/lovelace.go delete mode 100644 vendor/github.com/alecthomas/chroma/styles/manni.go delete mode 100644 vendor/github.com/alecthomas/chroma/styles/monokai.go delete mode 100644 vendor/github.com/alecthomas/chroma/styles/monokailight.go delete mode 100644 vendor/github.com/alecthomas/chroma/styles/murphy.go delete mode 100644 vendor/github.com/alecthomas/chroma/styles/native.go delete mode 100644 vendor/github.com/alecthomas/chroma/styles/paraiso-dark.go delete mode 100644 vendor/github.com/alecthomas/chroma/styles/paraiso-light.go delete mode 100644 vendor/github.com/alecthomas/chroma/styles/pastie.go delete mode 100644 vendor/github.com/alecthomas/chroma/styles/perldoc.go delete mode 100644 vendor/github.com/alecthomas/chroma/styles/pygments.go delete mode 100644 vendor/github.com/alecthomas/chroma/styles/rainbow_dash.go delete mode 100644 vendor/github.com/alecthomas/chroma/styles/rrt.go delete mode 100644 vendor/github.com/alecthomas/chroma/styles/solarized-dark.go delete mode 100644 vendor/github.com/alecthomas/chroma/styles/solarized-dark256.go delete mode 100644 vendor/github.com/alecthomas/chroma/styles/solarized-light.go delete mode 100644 vendor/github.com/alecthomas/chroma/styles/swapoff.go delete mode 100644 vendor/github.com/alecthomas/chroma/styles/tango.go delete mode 100644 vendor/github.com/alecthomas/chroma/styles/trac.go delete mode 100644 vendor/github.com/alecthomas/chroma/styles/vim.go delete mode 100644 vendor/github.com/alecthomas/chroma/styles/vs.go delete mode 100644 vendor/github.com/alecthomas/chroma/styles/xcode.go delete mode 100644 vendor/github.com/alecthomas/chroma/table.py delete mode 100644 vendor/github.com/alecthomas/chroma/tokentype_string.go delete mode 100644 vendor/github.com/alecthomas/chroma/types.go delete mode 100644 vendor/github.com/danwakefield/fnmatch/.gitignore delete mode 100644 vendor/github.com/danwakefield/fnmatch/LICENSE delete mode 100644 vendor/github.com/danwakefield/fnmatch/README.md delete mode 100644 vendor/github.com/danwakefield/fnmatch/fnmatch.go delete mode 100644 vendor/github.com/dchest/captcha/.gitignore delete mode 100644 vendor/github.com/dchest/captcha/LICENSE delete mode 100644 vendor/github.com/dchest/captcha/README.md delete mode 100644 vendor/github.com/dchest/captcha/audio.go delete mode 100644 vendor/github.com/dchest/captcha/captcha.go delete mode 100644 vendor/github.com/dchest/captcha/font.go delete mode 100644 vendor/github.com/dchest/captcha/image.go delete mode 100644 vendor/github.com/dchest/captcha/random.go delete mode 100644 vendor/github.com/dchest/captcha/server.go delete mode 100644 vendor/github.com/dchest/captcha/siprng.go delete mode 100644 vendor/github.com/dchest/captcha/sounds.go delete mode 100644 vendor/github.com/dchest/captcha/store.go delete mode 100644 vendor/github.com/dgrijalva/jwt-go/.gitignore delete mode 100644 vendor/github.com/dgrijalva/jwt-go/.travis.yml delete mode 100644 vendor/github.com/dgrijalva/jwt-go/LICENSE delete mode 100644 vendor/github.com/dgrijalva/jwt-go/MIGRATION_GUIDE.md delete mode 100644 vendor/github.com/dgrijalva/jwt-go/README.md delete mode 100644 vendor/github.com/dgrijalva/jwt-go/VERSION_HISTORY.md delete mode 100644 vendor/github.com/dgrijalva/jwt-go/claims.go delete mode 100644 vendor/github.com/dgrijalva/jwt-go/doc.go delete mode 100644 vendor/github.com/dgrijalva/jwt-go/ecdsa.go delete mode 100644 vendor/github.com/dgrijalva/jwt-go/ecdsa_utils.go delete mode 100644 vendor/github.com/dgrijalva/jwt-go/errors.go delete mode 100644 vendor/github.com/dgrijalva/jwt-go/hmac.go delete mode 100644 vendor/github.com/dgrijalva/jwt-go/map_claims.go delete mode 100644 vendor/github.com/dgrijalva/jwt-go/none.go delete mode 100644 vendor/github.com/dgrijalva/jwt-go/parser.go delete mode 100644 vendor/github.com/dgrijalva/jwt-go/rsa.go delete mode 100644 vendor/github.com/dgrijalva/jwt-go/rsa_pss.go delete mode 100644 vendor/github.com/dgrijalva/jwt-go/rsa_utils.go delete mode 100644 vendor/github.com/dgrijalva/jwt-go/signing_method.go delete mode 100644 vendor/github.com/dgrijalva/jwt-go/token.go delete mode 100644 vendor/github.com/dlclark/regexp2/.gitignore delete mode 100644 vendor/github.com/dlclark/regexp2/.travis.yml delete mode 100644 vendor/github.com/dlclark/regexp2/ATTRIB delete mode 100644 vendor/github.com/dlclark/regexp2/LICENSE delete mode 100644 vendor/github.com/dlclark/regexp2/README.md delete mode 100644 vendor/github.com/dlclark/regexp2/match.go delete mode 100644 vendor/github.com/dlclark/regexp2/regexp.go delete mode 100644 vendor/github.com/dlclark/regexp2/replace.go delete mode 100644 vendor/github.com/dlclark/regexp2/runner.go delete mode 100644 vendor/github.com/dlclark/regexp2/syntax/charclass.go delete mode 100644 vendor/github.com/dlclark/regexp2/syntax/code.go delete mode 100644 vendor/github.com/dlclark/regexp2/syntax/escape.go delete mode 100644 vendor/github.com/dlclark/regexp2/syntax/fuzz.go delete mode 100644 vendor/github.com/dlclark/regexp2/syntax/parser.go delete mode 100644 vendor/github.com/dlclark/regexp2/syntax/prefix.go delete mode 100644 vendor/github.com/dlclark/regexp2/syntax/replacerdata.go delete mode 100644 vendor/github.com/dlclark/regexp2/syntax/tree.go delete mode 100644 vendor/github.com/dlclark/regexp2/syntax/writer.go delete mode 100644 vendor/github.com/dlclark/regexp2/testoutput1 delete mode 100644 vendor/github.com/go-sql-driver/mysql/.gitignore delete mode 100644 vendor/github.com/go-sql-driver/mysql/.travis.yml 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/connection_go18.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-sql-driver/mysql/utils_go17.go delete mode 100644 vendor/github.com/go-sql-driver/mysql/utils_go18.go delete mode 100644 vendor/github.com/jmoiron/sqlx/.gitignore delete mode 100644 vendor/github.com/jmoiron/sqlx/.travis.yml delete mode 100644 vendor/github.com/jmoiron/sqlx/LICENSE delete mode 100644 vendor/github.com/jmoiron/sqlx/README.md delete mode 100644 vendor/github.com/jmoiron/sqlx/bind.go delete mode 100644 vendor/github.com/jmoiron/sqlx/doc.go delete mode 100644 vendor/github.com/jmoiron/sqlx/go.mod delete mode 100644 vendor/github.com/jmoiron/sqlx/go.sum delete mode 100644 vendor/github.com/jmoiron/sqlx/named.go delete mode 100644 vendor/github.com/jmoiron/sqlx/named_context.go delete mode 100644 vendor/github.com/jmoiron/sqlx/reflectx/README.md delete mode 100644 vendor/github.com/jmoiron/sqlx/reflectx/reflect.go delete mode 100644 vendor/github.com/jmoiron/sqlx/sqlx.go delete mode 100644 vendor/github.com/jmoiron/sqlx/sqlx_context.go delete mode 100644 vendor/github.com/labstack/echo/.editorconfig delete mode 100644 vendor/github.com/labstack/echo/.gitattributes delete mode 100644 vendor/github.com/labstack/echo/.gitignore delete mode 100644 vendor/github.com/labstack/echo/.travis.yml delete mode 100644 vendor/github.com/labstack/echo/LICENSE delete mode 100644 vendor/github.com/labstack/echo/Makefile delete mode 100644 vendor/github.com/labstack/echo/README.md delete mode 100644 vendor/github.com/labstack/echo/bind.go delete mode 100644 vendor/github.com/labstack/echo/context.go delete mode 100644 vendor/github.com/labstack/echo/echo.go delete mode 100644 vendor/github.com/labstack/echo/group.go delete mode 100644 vendor/github.com/labstack/echo/log.go delete mode 100644 vendor/github.com/labstack/echo/middleware/basic_auth.go delete mode 100644 vendor/github.com/labstack/echo/middleware/body_dump.go delete mode 100644 vendor/github.com/labstack/echo/middleware/body_limit.go delete mode 100644 vendor/github.com/labstack/echo/middleware/compress.go delete mode 100644 vendor/github.com/labstack/echo/middleware/cors.go delete mode 100644 vendor/github.com/labstack/echo/middleware/csrf.go delete mode 100644 vendor/github.com/labstack/echo/middleware/jwt.go delete mode 100644 vendor/github.com/labstack/echo/middleware/key_auth.go delete mode 100644 vendor/github.com/labstack/echo/middleware/logger.go delete mode 100644 vendor/github.com/labstack/echo/middleware/method_override.go delete mode 100644 vendor/github.com/labstack/echo/middleware/middleware.go delete mode 100644 vendor/github.com/labstack/echo/middleware/proxy.go delete mode 100644 vendor/github.com/labstack/echo/middleware/proxy_1_11.go delete mode 100644 vendor/github.com/labstack/echo/middleware/proxy_1_11_n.go delete mode 100644 vendor/github.com/labstack/echo/middleware/recover.go delete mode 100644 vendor/github.com/labstack/echo/middleware/redirect.go delete mode 100644 vendor/github.com/labstack/echo/middleware/request_id.go delete mode 100644 vendor/github.com/labstack/echo/middleware/rewrite.go delete mode 100644 vendor/github.com/labstack/echo/middleware/secure.go delete mode 100644 vendor/github.com/labstack/echo/middleware/slash.go delete mode 100644 vendor/github.com/labstack/echo/middleware/static.go delete mode 100644 vendor/github.com/labstack/echo/response.go delete mode 100644 vendor/github.com/labstack/echo/router.go delete mode 100644 vendor/github.com/labstack/gommon/LICENSE delete mode 100644 vendor/github.com/labstack/gommon/bytes/README.md delete mode 100644 vendor/github.com/labstack/gommon/bytes/bytes.go delete mode 100644 vendor/github.com/labstack/gommon/color/README.md delete mode 100644 vendor/github.com/labstack/gommon/color/color.go delete mode 100644 vendor/github.com/labstack/gommon/log/README.md delete mode 100644 vendor/github.com/labstack/gommon/log/color.go delete mode 100644 vendor/github.com/labstack/gommon/log/log.go delete mode 100644 vendor/github.com/labstack/gommon/log/white.go delete mode 100644 vendor/github.com/labstack/gommon/random/random.go delete mode 100644 vendor/github.com/lib/pq/.gitignore delete mode 100644 vendor/github.com/lib/pq/.travis.sh delete mode 100644 vendor/github.com/lib/pq/.travis.yml 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/TESTS.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/conn_go18.go delete mode 100644 vendor/github.com/lib/pq/connector.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/go.mod 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/types.go delete mode 100644 vendor/github.com/lib/pq/rows.go delete mode 100644 vendor/github.com/lib/pq/scram/scram.go delete mode 100644 vendor/github.com/lib/pq/ssl.go delete mode 100644 vendor/github.com/lib/pq/ssl_permissions.go delete mode 100644 vendor/github.com/lib/pq/ssl_windows.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/lib/pq/uuid.go delete mode 100644 vendor/github.com/mattn/go-colorable/.travis.yml 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_appengine.go 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/go.mod delete mode 100644 vendor/github.com/mattn/go-colorable/go.sum delete mode 100644 vendor/github.com/mattn/go-colorable/noncolorable.go delete mode 100644 vendor/github.com/mattn/go-isatty/.travis.yml 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/go.mod delete mode 100644 vendor/github.com/mattn/go-isatty/go.sum delete mode 100644 vendor/github.com/mattn/go-isatty/isatty_android.go delete mode 100644 vendor/github.com/mattn/go-isatty/isatty_bsd.go delete mode 100644 vendor/github.com/mattn/go-isatty/isatty_others.go delete mode 100644 vendor/github.com/mattn/go-isatty/isatty_solaris.go delete mode 100644 vendor/github.com/mattn/go-isatty/isatty_tcgets.go delete mode 100644 vendor/github.com/mattn/go-isatty/isatty_windows.go delete mode 100644 vendor/github.com/pkg/errors/.gitignore delete mode 100644 vendor/github.com/pkg/errors/.travis.yml delete mode 100644 vendor/github.com/pkg/errors/LICENSE delete mode 100644 vendor/github.com/pkg/errors/README.md delete mode 100644 vendor/github.com/pkg/errors/appveyor.yml delete mode 100644 vendor/github.com/pkg/errors/errors.go delete mode 100644 vendor/github.com/pkg/errors/stack.go delete mode 100644 vendor/github.com/pressly/goose/.gitignore delete mode 100644 vendor/github.com/pressly/goose/.travis.yml delete mode 100644 vendor/github.com/pressly/goose/Gopkg.toml delete mode 100644 vendor/github.com/pressly/goose/LICENSE delete mode 100644 vendor/github.com/pressly/goose/Makefile delete mode 100644 vendor/github.com/pressly/goose/README.md delete mode 100644 vendor/github.com/pressly/goose/create.go delete mode 100644 vendor/github.com/pressly/goose/dialect.go delete mode 100644 vendor/github.com/pressly/goose/down.go delete mode 100644 vendor/github.com/pressly/goose/fix.go delete mode 100644 vendor/github.com/pressly/goose/goose.go delete mode 100644 vendor/github.com/pressly/goose/log.go delete mode 100644 vendor/github.com/pressly/goose/migrate.go delete mode 100644 vendor/github.com/pressly/goose/migration.go delete mode 100644 vendor/github.com/pressly/goose/migration_sql.go delete mode 100644 vendor/github.com/pressly/goose/redo.go delete mode 100644 vendor/github.com/pressly/goose/reset.go delete mode 100644 vendor/github.com/pressly/goose/status.go delete mode 100644 vendor/github.com/pressly/goose/up.go delete mode 100644 vendor/github.com/pressly/goose/version.go delete mode 100644 vendor/github.com/rs/zerolog/.gitignore delete mode 100644 vendor/github.com/rs/zerolog/.travis.yml delete mode 100644 vendor/github.com/rs/zerolog/CNAME delete mode 100644 vendor/github.com/rs/zerolog/LICENSE delete mode 100644 vendor/github.com/rs/zerolog/README.md delete mode 100644 vendor/github.com/rs/zerolog/_config.yml delete mode 100644 vendor/github.com/rs/zerolog/array.go delete mode 100644 vendor/github.com/rs/zerolog/console.go delete mode 100644 vendor/github.com/rs/zerolog/context.go delete mode 100644 vendor/github.com/rs/zerolog/ctx.go delete mode 100644 vendor/github.com/rs/zerolog/encoder.go delete mode 100644 vendor/github.com/rs/zerolog/encoder_cbor.go delete mode 100644 vendor/github.com/rs/zerolog/encoder_json.go delete mode 100644 vendor/github.com/rs/zerolog/event.go delete mode 100644 vendor/github.com/rs/zerolog/fields.go delete mode 100644 vendor/github.com/rs/zerolog/globals.go delete mode 100644 vendor/github.com/rs/zerolog/go.mod delete mode 100644 vendor/github.com/rs/zerolog/go112.go delete mode 100644 vendor/github.com/rs/zerolog/hook.go delete mode 100644 vendor/github.com/rs/zerolog/internal/cbor/README.md delete mode 100644 vendor/github.com/rs/zerolog/internal/cbor/base.go delete mode 100644 vendor/github.com/rs/zerolog/internal/cbor/cbor.go delete mode 100644 vendor/github.com/rs/zerolog/internal/cbor/decode_stream.go delete mode 100644 vendor/github.com/rs/zerolog/internal/cbor/string.go delete mode 100644 vendor/github.com/rs/zerolog/internal/cbor/time.go delete mode 100644 vendor/github.com/rs/zerolog/internal/cbor/types.go delete mode 100644 vendor/github.com/rs/zerolog/internal/json/base.go delete mode 100644 vendor/github.com/rs/zerolog/internal/json/bytes.go delete mode 100644 vendor/github.com/rs/zerolog/internal/json/string.go delete mode 100644 vendor/github.com/rs/zerolog/internal/json/time.go delete mode 100644 vendor/github.com/rs/zerolog/internal/json/types.go delete mode 100644 vendor/github.com/rs/zerolog/log.go delete mode 100644 vendor/github.com/rs/zerolog/not_go112.go delete mode 100644 vendor/github.com/rs/zerolog/pretty.png delete mode 100644 vendor/github.com/rs/zerolog/sampler.go delete mode 100644 vendor/github.com/rs/zerolog/syslog.go delete mode 100644 vendor/github.com/rs/zerolog/writer.go delete mode 100644 vendor/github.com/valyala/bytebufferpool/.travis.yml delete mode 100644 vendor/github.com/valyala/bytebufferpool/LICENSE delete mode 100644 vendor/github.com/valyala/bytebufferpool/README.md delete mode 100644 vendor/github.com/valyala/bytebufferpool/bytebuffer.go delete mode 100644 vendor/github.com/valyala/bytebufferpool/doc.go delete mode 100644 vendor/github.com/valyala/bytebufferpool/pool.go delete mode 100644 vendor/github.com/valyala/fasttemplate/LICENSE delete mode 100644 vendor/github.com/valyala/fasttemplate/README.md delete mode 100644 vendor/github.com/valyala/fasttemplate/go.mod delete mode 100644 vendor/github.com/valyala/fasttemplate/go.sum delete mode 100644 vendor/github.com/valyala/fasttemplate/template.go delete mode 100644 vendor/github.com/valyala/fasttemplate/unsafe.go delete mode 100644 vendor/github.com/valyala/fasttemplate/unsafe_gae.go delete mode 100644 vendor/go.dev.pztrn.name/flagger/.drone.yml delete mode 100644 vendor/go.dev.pztrn.name/flagger/.gitignore delete mode 100644 vendor/go.dev.pztrn.name/flagger/.golangci.yml delete mode 100644 vendor/go.dev.pztrn.name/flagger/LICENSE delete mode 100644 vendor/go.dev.pztrn.name/flagger/README.md delete mode 100644 vendor/go.dev.pztrn.name/flagger/errors.go delete mode 100644 vendor/go.dev.pztrn.name/flagger/exported.go delete mode 100644 vendor/go.dev.pztrn.name/flagger/flag.go delete mode 100644 vendor/go.dev.pztrn.name/flagger/flagger.go delete mode 100644 vendor/go.dev.pztrn.name/flagger/go.mod delete mode 100644 vendor/go.dev.pztrn.name/flagger/go.sum delete mode 100644 vendor/go.dev.pztrn.name/flagger/loggerinterface.go delete mode 100644 vendor/golang.org/x/crypto/AUTHORS delete mode 100644 vendor/golang.org/x/crypto/CONTRIBUTORS 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/acme/acme.go delete mode 100644 vendor/golang.org/x/crypto/acme/autocert/autocert.go delete mode 100644 vendor/golang.org/x/crypto/acme/autocert/cache.go delete mode 100644 vendor/golang.org/x/crypto/acme/autocert/listener.go delete mode 100644 vendor/golang.org/x/crypto/acme/autocert/renewal.go delete mode 100644 vendor/golang.org/x/crypto/acme/http.go delete mode 100644 vendor/golang.org/x/crypto/acme/jws.go delete mode 100644 vendor/golang.org/x/crypto/acme/rfc8555.go delete mode 100644 vendor/golang.org/x/crypto/acme/types.go delete mode 100644 vendor/golang.org/x/crypto/acme/version_go112.go delete mode 100644 vendor/golang.org/x/crypto/pbkdf2/pbkdf2.go delete mode 100644 vendor/golang.org/x/crypto/scrypt/scrypt.go delete mode 100644 vendor/golang.org/x/net/AUTHORS delete mode 100644 vendor/golang.org/x/net/CONTRIBUTORS 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/idna/idna10.0.0.go delete mode 100644 vendor/golang.org/x/net/idna/idna9.0.0.go delete mode 100644 vendor/golang.org/x/net/idna/punycode.go delete mode 100644 vendor/golang.org/x/net/idna/tables10.0.0.go delete mode 100644 vendor/golang.org/x/net/idna/tables11.0.0.go delete mode 100644 vendor/golang.org/x/net/idna/tables9.0.0.go delete mode 100644 vendor/golang.org/x/net/idna/trie.go delete mode 100644 vendor/golang.org/x/net/idna/trieval.go delete mode 100644 vendor/golang.org/x/net/webdav/file.go delete mode 100644 vendor/golang.org/x/net/webdav/if.go delete mode 100644 vendor/golang.org/x/net/webdav/internal/xml/README delete mode 100644 vendor/golang.org/x/net/webdav/internal/xml/marshal.go delete mode 100644 vendor/golang.org/x/net/webdav/internal/xml/read.go delete mode 100644 vendor/golang.org/x/net/webdav/internal/xml/typeinfo.go delete mode 100644 vendor/golang.org/x/net/webdav/internal/xml/xml.go delete mode 100644 vendor/golang.org/x/net/webdav/lock.go delete mode 100644 vendor/golang.org/x/net/webdav/prop.go delete mode 100644 vendor/golang.org/x/net/webdav/webdav.go delete mode 100644 vendor/golang.org/x/net/webdav/xml.go delete mode 100644 vendor/golang.org/x/sys/AUTHORS delete mode 100644 vendor/golang.org/x/sys/CONTRIBUTORS 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/.gitignore delete mode 100644 vendor/golang.org/x/sys/unix/README.md delete mode 100644 vendor/golang.org/x/sys/unix/affinity_linux.go delete mode 100644 vendor/golang.org/x/sys/unix/aliases.go delete mode 100644 vendor/golang.org/x/sys/unix/asm_aix_ppc64.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_freebsd_arm64.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_mipsx.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_riscv64.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_netbsd_arm64.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_openbsd_arm.s delete mode 100644 vendor/golang.org/x/sys/unix/asm_openbsd_arm64.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/cap_freebsd.go delete mode 100644 vendor/golang.org/x/sys/unix/constants.go delete mode 100644 vendor/golang.org/x/sys/unix/dev_aix_ppc.go delete mode 100644 vendor/golang.org/x/sys/unix/dev_aix_ppc64.go delete mode 100644 vendor/golang.org/x/sys/unix/dev_darwin.go delete mode 100644 vendor/golang.org/x/sys/unix/dev_dragonfly.go delete mode 100644 vendor/golang.org/x/sys/unix/dev_freebsd.go delete mode 100644 vendor/golang.org/x/sys/unix/dev_linux.go delete mode 100644 vendor/golang.org/x/sys/unix/dev_netbsd.go delete mode 100644 vendor/golang.org/x/sys/unix/dev_openbsd.go delete mode 100644 vendor/golang.org/x/sys/unix/dirent.go delete mode 100644 vendor/golang.org/x/sys/unix/endian_big.go delete mode 100644 vendor/golang.org/x/sys/unix/endian_little.go delete mode 100644 vendor/golang.org/x/sys/unix/env_unix.go delete mode 100644 vendor/golang.org/x/sys/unix/errors_freebsd_386.go delete mode 100644 vendor/golang.org/x/sys/unix/errors_freebsd_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/errors_freebsd_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/fcntl.go delete mode 100644 vendor/golang.org/x/sys/unix/fcntl_darwin.go delete mode 100644 vendor/golang.org/x/sys/unix/fcntl_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/ioctl.go delete mode 100644 vendor/golang.org/x/sys/unix/mkall.sh delete mode 100644 vendor/golang.org/x/sys/unix/mkerrors.sh delete mode 100644 vendor/golang.org/x/sys/unix/pagesize_unix.go delete mode 100644 vendor/golang.org/x/sys/unix/pledge_openbsd.go 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/readdirent_getdents.go delete mode 100644 vendor/golang.org/x/sys/unix/readdirent_getdirentries.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_aix.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_aix_ppc.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_aix_ppc64.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_darwin_libSystem.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_freebsd_arm64.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_amd64_gc.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_gc.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_gc_386.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_gccgo_386.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_gccgo_arm.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_mipsx.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_riscv64.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_netbsd_arm64.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_openbsd_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_openbsd_arm64.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/syscall_unix_gc.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_unix_gc_ppc64x.go delete mode 100644 vendor/golang.org/x/sys/unix/timestruct.go delete mode 100644 vendor/golang.org/x/sys/unix/unveil_openbsd.go delete mode 100644 vendor/golang.org/x/sys/unix/xattr_bsd.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_aix_ppc.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_aix_ppc64.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_freebsd_arm64.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_mips.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_mipsle.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_riscv64.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_netbsd_arm64.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_openbsd_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_openbsd_arm64.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_solaris_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/zptrace386_linux.go delete mode 100644 vendor/golang.org/x/sys/unix/zptracearm_linux.go delete mode 100644 vendor/golang.org/x/sys/unix/zptracemips_linux.go delete mode 100644 vendor/golang.org/x/sys/unix/zptracemipsle_linux.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_aix_ppc.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gc.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gccgo.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_386.1_11.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_386.s delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.1_11.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_amd64.s delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.1_11.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_arm.s delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.1_11.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s 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_freebsd_arm64.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_mips.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_mipsle.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_riscv64.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_netbsd_arm64.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_openbsd_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.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_386.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysctl_openbsd_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysctl_openbsd_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysctl_openbsd_arm64.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_freebsd_arm64.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_mips.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_mipsle.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_riscv64.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_netbsd_arm64.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_openbsd_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm64.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_aix_ppc.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_aix_ppc64.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_freebsd_arm64.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_mips.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_mipsle.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_riscv64.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_netbsd_arm64.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_openbsd_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_openbsd_arm64.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go delete mode 100644 vendor/golang.org/x/text/AUTHORS delete mode 100644 vendor/golang.org/x/text/CONTRIBUTORS 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/secure/bidirule/bidirule.go delete mode 100644 vendor/golang.org/x/text/secure/bidirule/bidirule10.0.0.go delete mode 100644 vendor/golang.org/x/text/secure/bidirule/bidirule9.0.0.go delete mode 100644 vendor/golang.org/x/text/transform/transform.go delete mode 100644 vendor/golang.org/x/text/unicode/bidi/bidi.go delete mode 100644 vendor/golang.org/x/text/unicode/bidi/bracket.go delete mode 100644 vendor/golang.org/x/text/unicode/bidi/core.go delete mode 100644 vendor/golang.org/x/text/unicode/bidi/prop.go delete mode 100644 vendor/golang.org/x/text/unicode/bidi/tables10.0.0.go delete mode 100644 vendor/golang.org/x/text/unicode/bidi/tables11.0.0.go delete mode 100644 vendor/golang.org/x/text/unicode/bidi/tables9.0.0.go delete mode 100644 vendor/golang.org/x/text/unicode/bidi/trieval.go delete mode 100644 vendor/golang.org/x/text/unicode/norm/composition.go delete mode 100644 vendor/golang.org/x/text/unicode/norm/forminfo.go delete mode 100644 vendor/golang.org/x/text/unicode/norm/input.go delete mode 100644 vendor/golang.org/x/text/unicode/norm/iter.go delete mode 100644 vendor/golang.org/x/text/unicode/norm/normalize.go delete mode 100644 vendor/golang.org/x/text/unicode/norm/readwriter.go delete mode 100644 vendor/golang.org/x/text/unicode/norm/tables10.0.0.go delete mode 100644 vendor/golang.org/x/text/unicode/norm/tables11.0.0.go delete mode 100644 vendor/golang.org/x/text/unicode/norm/tables9.0.0.go delete mode 100644 vendor/golang.org/x/text/unicode/norm/transform.go delete mode 100644 vendor/golang.org/x/text/unicode/norm/trie.go delete mode 100644 vendor/google.golang.org/appengine/LICENSE delete mode 100644 vendor/google.golang.org/appengine/cloudsql/cloudsql.go delete mode 100644 vendor/google.golang.org/appengine/cloudsql/cloudsql_classic.go delete mode 100644 vendor/google.golang.org/appengine/cloudsql/cloudsql_vm.go delete mode 100644 vendor/gopkg.in/yaml.v2/.travis.yml delete mode 100644 vendor/gopkg.in/yaml.v2/LICENSE delete mode 100644 vendor/gopkg.in/yaml.v2/LICENSE.libyaml delete mode 100644 vendor/gopkg.in/yaml.v2/NOTICE delete mode 100644 vendor/gopkg.in/yaml.v2/README.md delete mode 100644 vendor/gopkg.in/yaml.v2/apic.go delete mode 100644 vendor/gopkg.in/yaml.v2/decode.go delete mode 100644 vendor/gopkg.in/yaml.v2/emitterc.go delete mode 100644 vendor/gopkg.in/yaml.v2/encode.go delete mode 100644 vendor/gopkg.in/yaml.v2/go.mod delete mode 100644 vendor/gopkg.in/yaml.v2/parserc.go delete mode 100644 vendor/gopkg.in/yaml.v2/readerc.go delete mode 100644 vendor/gopkg.in/yaml.v2/resolve.go delete mode 100644 vendor/gopkg.in/yaml.v2/scannerc.go delete mode 100644 vendor/gopkg.in/yaml.v2/sorter.go delete mode 100644 vendor/gopkg.in/yaml.v2/writerc.go delete mode 100644 vendor/gopkg.in/yaml.v2/yaml.go delete mode 100644 vendor/gopkg.in/yaml.v2/yamlh.go delete mode 100644 vendor/gopkg.in/yaml.v2/yamlprivateh.go delete mode 100644 vendor/modules.txt diff --git a/.gitignore b/.gitignore index 70b2e19..e97f52d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ examples/fastpastebin.yaml dist/ data/ +vendor/ .idea .vscode *DS_Store* diff --git a/Dockerfile b/Dockerfile index 936ca4f..8f1b89e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,13 +1,13 @@ -FROM golang:1.13.1-alpine AS build +FROM golang:1.16.5-alpine AS build WORKDIR /fastpastebin COPY . . WORKDIR /fastpastebin/cmd/fastpastebin -RUN GOFLAGS="-mod=vendor" go build +RUN CGO_ENABLED=0 go build -tags netgo -FROM alpine:3.10 +FROM alpine:3.13 LABEL maintainer "Stanislav N. " COPY --from=build /fastpastebin/cmd/fastpastebin/fastpastebin /app/fastpastebin diff --git a/docker-compose.yml b/docker-compose.yml index 89403ba..e9efa1d 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -5,7 +5,7 @@ volumes: services: database: - image: mariadb:10.3 + image: mariadb:10.5 container_name: database restart: always volumes: diff --git a/go.mod b/go.mod index 32a4725..d15caf3 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module go.dev.pztrn.name/fastpastebin -go 1.13 +go 1.16 require ( github.com/alecthomas/chroma v0.8.2 diff --git a/vendor/github.com/alecthomas/chroma/.gitignore b/vendor/github.com/alecthomas/chroma/.gitignore deleted file mode 100644 index ccacd12..0000000 --- a/vendor/github.com/alecthomas/chroma/.gitignore +++ /dev/null @@ -1,19 +0,0 @@ -# Binaries for programs and plugins -*.exe -*.dll -*.so -*.dylib -/cmd/chroma/chroma - -# Test binary, build with `go test -c` -*.test - -# Output of the go coverage tool, specifically when used with LiteIDE -*.out - -# Project-local glide cache, RE: https://github.com/Masterminds/glide/issues/736 -.glide/ - -_models/ - -_examples/ diff --git a/vendor/github.com/alecthomas/chroma/.golangci.yml b/vendor/github.com/alecthomas/chroma/.golangci.yml deleted file mode 100644 index b1e51f3..0000000 --- a/vendor/github.com/alecthomas/chroma/.golangci.yml +++ /dev/null @@ -1,55 +0,0 @@ -run: - tests: true - skip-dirs: - - _examples - -output: - print-issued-lines: false - -linters: - enable-all: true - disable: - - maligned - - megacheck - - lll - - gocyclo - - dupl - - gochecknoglobals - - funlen - - godox - - wsl - - gomnd - - gocognit - -linters-settings: - govet: - check-shadowing: true - gocyclo: - min-complexity: 10 - dupl: - threshold: 100 - goconst: - min-len: 8 - min-occurrences: 3 - -issues: - max-per-linter: 0 - max-same: 0 - exclude-use-default: false - exclude: - # Captured by errcheck. - - '^(G104|G204):' - # Very commonly not checked. - - 'Error return value of .(.*\.Help|.*\.MarkFlagRequired|(os\.)?std(out|err)\..*|.*Close|.*Flush|os\.Remove(All)?|.*printf?|os\.(Un)?Setenv). is not checked' - - 'exported method (.*\.MarshalJSON|.*\.UnmarshalJSON|.*\.EntityURN|.*\.GoString|.*\.Pos) should have comment or be unexported' - - 'composite literal uses unkeyed fields' - - 'declaration of "err" shadows declaration' - - 'should not use dot imports' - - 'Potential file inclusion via variable' - - 'should have comment or be unexported' - - 'comment on exported var .* should be of the form' - - 'at least one file in a package should have a package comment' - - 'string literal contains the Unicode' - - 'methods on the same type should have the same receiver name' - - '_TokenType_name should be _TokenTypeName' - - '`_TokenType_map` should be `_TokenTypeMap`' diff --git a/vendor/github.com/alecthomas/chroma/.goreleaser.yml b/vendor/github.com/alecthomas/chroma/.goreleaser.yml deleted file mode 100644 index 99d13e3..0000000 --- a/vendor/github.com/alecthomas/chroma/.goreleaser.yml +++ /dev/null @@ -1,33 +0,0 @@ -project_name: chroma -release: - github: - owner: alecthomas - name: chroma -brews: - - - install: bin.install "chroma" -builds: -- goos: - - linux - - darwin - - windows - goarch: - - amd64 - - "386" - goarm: - - "6" - main: ./cmd/chroma/main.go - ldflags: -s -w -X main.version={{.Version}} -X main.commit={{.Commit}} -X main.date={{.Date}} - binary: chroma -archives: - - - format: tar.gz - name_template: '{{ .Binary }}-{{ .Version }}-{{ .Os }}-{{ .Arch }}{{ if .Arm }}v{{ - .Arm }}{{ end }}' - files: - - COPYING - - README* -snapshot: - name_template: SNAPSHOT-{{ .Commit }} -checksum: - name_template: '{{ .ProjectName }}-{{ .Version }}-checksums.txt' diff --git a/vendor/github.com/alecthomas/chroma/.travis.yml b/vendor/github.com/alecthomas/chroma/.travis.yml deleted file mode 100644 index 9216ec9..0000000 --- a/vendor/github.com/alecthomas/chroma/.travis.yml +++ /dev/null @@ -1,12 +0,0 @@ -sudo: false -language: go -go: - - "1.13.x" -script: - - go test -v ./... - - curl -sfL https://install.goreleaser.com/github.com/golangci/golangci-lint.sh | bash -s v1.22.2 - - ./bin/golangci-lint run - - git clean -fdx . -after_success: - curl -sL https://git.io/goreleaser | bash && goreleaser - diff --git a/vendor/github.com/alecthomas/chroma/COPYING b/vendor/github.com/alecthomas/chroma/COPYING deleted file mode 100644 index 92dc39f..0000000 --- a/vendor/github.com/alecthomas/chroma/COPYING +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (C) 2017 Alec Thomas - -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/alecthomas/chroma/Makefile b/vendor/github.com/alecthomas/chroma/Makefile deleted file mode 100644 index 1b8320a..0000000 --- a/vendor/github.com/alecthomas/chroma/Makefile +++ /dev/null @@ -1,19 +0,0 @@ -.PHONY: chromad upload all - -all: README.md tokentype_string.go - -README.md: lexers/*/*.go - ./table.py - -tokentype_string.go: types.go - go generate - -chromad: - (cd ./cmd/chromad && go get github.com/GeertJohan/go.rice/rice@master && go install github.com/GeertJohan/go.rice/rice) - rm -f chromad - (export CGOENABLED=0 GOOS=linux ; cd ./cmd/chromad && go build -o ../../chromad .) - rice append -i ./cmd/chromad --exec=./chromad - -upload: chromad - scp chromad root@swapoff.org: && \ - ssh root@swapoff.org 'install -m755 ./chromad /srv/http/swapoff.org/bin && service chromad restart' diff --git a/vendor/github.com/alecthomas/chroma/README.md b/vendor/github.com/alecthomas/chroma/README.md deleted file mode 100644 index 490adea..0000000 --- a/vendor/github.com/alecthomas/chroma/README.md +++ /dev/null @@ -1,267 +0,0 @@ -# Chroma — A general purpose syntax highlighter in pure Go [![Golang Documentation](https://godoc.org/github.com/alecthomas/chroma?status.svg)](https://godoc.org/github.com/alecthomas/chroma) [![Build Status](https://travis-ci.org/alecthomas/chroma.svg)](https://travis-ci.org/alecthomas/chroma) [![Gitter chat](https://badges.gitter.im/alecthomas.svg)](https://gitter.im/alecthomas/Lobby) - -> **NOTE:** As Chroma has just been released, its API is still in flux. That said, the high-level interface should not change significantly. - -Chroma takes source code and other structured text and converts it into syntax -highlighted HTML, ANSI-coloured text, etc. - -Chroma is based heavily on [Pygments](http://pygments.org/), and includes -translators for Pygments lexers and styles. - - -## Table of Contents - - - -1. [Table of Contents](#table-of-contents) -2. [Supported languages](#supported-languages) -3. [Try it](#try-it) -4. [Using the library](#using-the-library) - 1. [Quick start](#quick-start) - 2. [Identifying the language](#identifying-the-language) - 3. [Formatting the output](#formatting-the-output) - 4. [The HTML formatter](#the-html-formatter) -5. [More detail](#more-detail) - 1. [Lexers](#lexers) - 2. [Formatters](#formatters) - 3. [Styles](#styles) -6. [Command-line interface](#command-line-interface) -7. [What's missing compared to Pygments?](#whats-missing-compared-to-pygments) - - - - -## Supported languages - -Prefix | Language -:----: | -------- -A | ABAP, ABNF, ActionScript, ActionScript 3, Ada, Angular2, ANTLR, ApacheConf, APL, AppleScript, Arduino, Awk -B | Ballerina, Base Makefile, Bash, Batchfile, BlitzBasic, BNF, Brainfuck -C | C, C#, C++, Cap'n Proto, Cassandra CQL, Ceylon, CFEngine3, cfstatement, ChaiScript, Cheetah, Clojure, CMake, COBOL, CoffeeScript, Common Lisp, Coq, Crystal, CSS, Cython -D | D, Dart, Diff, Django/Jinja, Docker, DTD -E | EBNF, Elixir, Elm, EmacsLisp, Erlang -F | Factor, Fish, Forth, Fortran, FSharp -G | GAS, GDScript, Genshi, Genshi HTML, Genshi Text, GLSL, Gnuplot, Go, Go HTML Template, Go Text Template, GraphQL, Groovy -H | Handlebars, Haskell, Haxe, HCL, Hexdump, HTML, HTTP, Hy -I | Idris, INI, Io -J | J, Java, JavaScript, JSON, Julia, Jungle -K | Kotlin -L | Lighttpd configuration file, LLVM, Lua -M | Mako, markdown, Mason, Mathematica, Matlab, MiniZinc, MLIR, Modula-2, MonkeyC, MorrowindScript, Myghty, MySQL -N | NASM, Newspeak, Nginx configuration file, Nim, Nix -O | Objective-C, OCaml, Octave, OpenSCAD, Org Mode -P | PacmanConf, Perl, PHP, Pig, PkgConfig, PL/pgSQL, plaintext, PostgreSQL SQL dialect, PostScript, POVRay, PowerShell, Prolog, Protocol Buffer, Puppet, Python, Python 3 -Q | QBasic -R | R, Racket, Ragel, react, reg, reStructuredText, Rexx, Ruby, Rust -S | Sass, Scala, Scheme, Scilab, SCSS, Smalltalk, Smarty, SML, Snobol, Solidity, SPARQL, SQL, SquidConf, Swift, SYSTEMD, systemverilog -T | TableGen, TASM, Tcl, Tcsh, Termcap, Terminfo, Terraform, TeX, Thrift, TOML, TradingView, Transact-SQL, Turing, Turtle, Twig, TypeScript, TypoScript, TypoScriptCssData, TypoScriptHtmlData -V | VB.net, verilog, VHDL, VimL, vue -W | WDTE -X | XML, Xorg -Y | YAML - - -_I will attempt to keep this section up to date, but an authoritative list can be -displayed with `chroma --list`._ - - -## Try it - -Try out various languages and styles on the [Chroma Playground](https://swapoff.org/chroma/playground/). - - -## Using the library - -Chroma, like Pygments, has the concepts of -[lexers](https://github.com/alecthomas/chroma/tree/master/lexers), -[formatters](https://github.com/alecthomas/chroma/tree/master/formatters) and -[styles](https://github.com/alecthomas/chroma/tree/master/styles). - -Lexers convert source text into a stream of tokens, styles specify how token -types are mapped to colours, and formatters convert tokens and styles into -formatted output. - -A package exists for each of these, containing a global `Registry` variable -with all of the registered implementations. There are also helper functions -for using the registry in each package, such as looking up lexers by name or -matching filenames, etc. - -In all cases, if a lexer, formatter or style can not be determined, `nil` will -be returned. In this situation you may want to default to the `Fallback` -value in each respective package, which provides sane defaults. - - -### Quick start - -A convenience function exists that can be used to simply format some source -text, without any effort: - -```go -err := quick.Highlight(os.Stdout, someSourceCode, "go", "html", "monokai") -``` - - -### Identifying the language - -To highlight code, you'll first have to identify what language the code is -written in. There are three primary ways to do that: - -1. Detect the language from its filename. - - ```go - lexer := lexers.Match("foo.go") - ``` - -3. Explicitly specify the language by its Chroma syntax ID (a full list is available from `lexers.Names()`). - - ```go - lexer := lexers.Get("go") - ``` - -3. Detect the language from its content. - - ```go - lexer := lexers.Analyse("package main\n\nfunc main()\n{\n}\n") - ``` - -In all cases, `nil` will be returned if the language can not be identified. - -```go -if lexer == nil { - lexer = lexers.Fallback -} -``` - -At this point, it should be noted that some lexers can be extremely chatty. To -mitigate this, you can use the coalescing lexer to coalesce runs of identical -token types into a single token: - -```go -lexer = chroma.Coalesce(lexer) -``` - - -### Formatting the output - -Once a language is identified you will need to pick a formatter and a style (theme). - -```go -style := styles.Get("swapoff") -if style == nil { - style = styles.Fallback -} -formatter := formatters.Get("html") -if formatter == nil { - formatter = formatters.Fallback -} -``` - -Then obtain an iterator over the tokens: - -```go -contents, err := ioutil.ReadAll(r) -iterator, err := lexer.Tokenise(nil, string(contents)) -``` - -And finally, format the tokens from the iterator: - -```go -err := formatter.Format(w, style, iterator) -``` - - -### The HTML formatter - -By default the `html` registered formatter generates standalone HTML with -embedded CSS. More flexibility is available through the `formatters/html` package. - -Firstly, the output generated by the formatter can be customised with the -following constructor options: - -- `Standalone()` - generate standalone HTML with embedded CSS. -- `WithClasses()` - use classes rather than inlined style attributes. -- `ClassPrefix(prefix)` - prefix each generated CSS class. -- `TabWidth(width)` - Set the rendered tab width, in characters. -- `WithLineNumbers()` - Render line numbers (style with `LineNumbers`). -- `LinkableLineNumbers()` - Make the line numbers linkable. -- `HighlightLines(ranges)` - Highlight lines in these ranges (style with `LineHighlight`). -- `LineNumbersInTable()` - Use a table for formatting line numbers and code, rather than spans. - -If `WithClasses()` is used, the corresponding CSS can be obtained from the formatter with: - -```go -formatter := html.New(html.WithClasses()) -err := formatter.WriteCSS(w, style) -``` - - -## More detail - - -### Lexers - -See the [Pygments documentation](http://pygments.org/docs/lexerdevelopment/) -for details on implementing lexers. Most concepts apply directly to Chroma, -but see existing lexer implementations for real examples. - -In many cases lexers can be automatically converted directly from Pygments by -using the included Python 3 script `pygments2chroma.py`. I use something like -the following: - -```sh -python3 ~/Projects/chroma/_tools/pygments2chroma.py \ - pygments.lexers.jvm.KotlinLexer \ - > ~/Projects/chroma/lexers/kotlin.go \ - && gofmt -s -w ~/Projects/chroma/lexers/*.go -``` - -See notes in [pygments-lexers.go](https://github.com/alecthomas/chroma/blob/master/pygments-lexers.txt) -for a list of lexers, and notes on some of the issues importing them. - - -### Formatters - -Chroma supports HTML output, as well as terminal output in 8 colour, 256 colour, and true-colour. - -A `noop` formatter is included that outputs the token text only, and a `tokens` -formatter outputs raw tokens. The latter is useful for debugging lexers. - - -### Styles - -Chroma styles use the [same syntax](http://pygments.org/docs/styles/) as Pygments. - -All Pygments styles have been converted to Chroma using the `_tools/style.py` script. - -When you work with one of [Chroma's styles](https://github.com/alecthomas/chroma/tree/master/styles), know that the `chroma.Background` token type provides the default style for tokens. It does so by defining a foreground color and background color. - -For example, this gives each token name not defined in the style a default color of `#f8f8f8` and uses `#000000` for the highlighted code block's background: - -~~~go -chroma.Background: "#f8f8f2 bg:#000000", -~~~ - -Also, token types in a style file are hierarchical. For instance, when `CommentSpecial` is not defined, Chroma uses the token style from `Comment`. So when several comment tokens use the same color, you'll only need to define `Comment` and override the one that has a different color. - -For a quick overview of the available styles and how they look, check out the [Chroma Style Gallery](https://xyproto.github.io/splash/docs/). - - -## Command-line interface - -A command-line interface to Chroma is included. It can be installed with: - -```sh -go get -u github.com/alecthomas/chroma/cmd/chroma -``` - - -## What's missing compared to Pygments? - -- Quite a few lexers, for various reasons (pull-requests welcome): - - Pygments lexers for complex languages often include custom code to - handle certain aspects, such as Perl6's ability to nest code inside - regular expressions. These require time and effort to convert. - - I mostly only converted languages I had heard of, to reduce the porting cost. -- Some more esoteric features of Pygments are omitted for simplicity. -- Though the Chroma API supports content detection, very few languages support them. - I have plans to implement a statistical analyser at some point, but not enough time. diff --git a/vendor/github.com/alecthomas/chroma/coalesce.go b/vendor/github.com/alecthomas/chroma/coalesce.go deleted file mode 100644 index f504895..0000000 --- a/vendor/github.com/alecthomas/chroma/coalesce.go +++ /dev/null @@ -1,35 +0,0 @@ -package chroma - -// Coalesce is a Lexer interceptor that collapses runs of common types into a single token. -func Coalesce(lexer Lexer) Lexer { return &coalescer{lexer} } - -type coalescer struct{ Lexer } - -func (d *coalescer) Tokenise(options *TokeniseOptions, text string) (Iterator, error) { - var prev Token - it, err := d.Lexer.Tokenise(options, text) - if err != nil { - return nil, err - } - return func() Token { - for token := it(); token != (EOF); token = it() { - if len(token.Value) == 0 { - continue - } - if prev == EOF { - prev = token - } else { - if prev.Type == token.Type && len(prev.Value) < 8192 { - prev.Value += token.Value - } else { - out := prev - prev = token - return out - } - } - } - out := prev - prev = EOF - return out - }, nil -} diff --git a/vendor/github.com/alecthomas/chroma/colour.go b/vendor/github.com/alecthomas/chroma/colour.go deleted file mode 100644 index 15d794c..0000000 --- a/vendor/github.com/alecthomas/chroma/colour.go +++ /dev/null @@ -1,164 +0,0 @@ -package chroma - -import ( - "fmt" - "math" - "strconv" - "strings" -) - -// ANSI2RGB maps ANSI colour names, as supported by Chroma, to hex RGB values. -var ANSI2RGB = map[string]string{ - "#ansiblack": "000000", - "#ansidarkred": "7f0000", - "#ansidarkgreen": "007f00", - "#ansibrown": "7f7fe0", - "#ansidarkblue": "00007f", - "#ansipurple": "7f007f", - "#ansiteal": "007f7f", - "#ansilightgray": "e5e5e5", - // Normal - "#ansidarkgray": "555555", - "#ansired": "ff0000", - "#ansigreen": "00ff00", - "#ansiyellow": "ffff00", - "#ansiblue": "0000ff", - "#ansifuchsia": "ff00ff", - "#ansiturquoise": "00ffff", - "#ansiwhite": "ffffff", - - // Aliases without the "ansi" prefix, because...why? - "#black": "000000", - "#darkred": "7f0000", - "#darkgreen": "007f00", - "#brown": "7f7fe0", - "#darkblue": "00007f", - "#purple": "7f007f", - "#teal": "007f7f", - "#lightgray": "e5e5e5", - // Normal - "#darkgray": "555555", - "#red": "ff0000", - "#green": "00ff00", - "#yellow": "ffff00", - "#blue": "0000ff", - "#fuchsia": "ff00ff", - "#turquoise": "00ffff", - "#white": "ffffff", -} - -// Colour represents an RGB colour. -type Colour int32 - -// NewColour creates a Colour directly from RGB values. -func NewColour(r, g, b uint8) Colour { - return ParseColour(fmt.Sprintf("%02x%02x%02x", r, g, b)) -} - -// Distance between this colour and another. -// -// This uses the approach described here (https://www.compuphase.com/cmetric.htm). -// This is not as accurate as LAB, et. al. but is *vastly* simpler and sufficient for our needs. -func (c Colour) Distance(e2 Colour) float64 { - ar, ag, ab := int64(c.Red()), int64(c.Green()), int64(c.Blue()) - br, bg, bb := int64(e2.Red()), int64(e2.Green()), int64(e2.Blue()) - rmean := (ar + br) / 2 - r := ar - br - g := ag - bg - b := ab - bb - return math.Sqrt(float64((((512 + rmean) * r * r) >> 8) + 4*g*g + (((767 - rmean) * b * b) >> 8))) -} - -// Brighten returns a copy of this colour with its brightness adjusted. -// -// If factor is negative, the colour is darkened. -// -// Uses approach described here (http://www.pvladov.com/2012/09/make-color-lighter-or-darker.html). -func (c Colour) Brighten(factor float64) Colour { - r := float64(c.Red()) - g := float64(c.Green()) - b := float64(c.Blue()) - - if factor < 0 { - factor++ - r *= factor - g *= factor - b *= factor - } else { - r = (255-r)*factor + r - g = (255-g)*factor + g - b = (255-b)*factor + b - } - return NewColour(uint8(r), uint8(g), uint8(b)) -} - -// BrightenOrDarken brightens a colour if it is < 0.5 brighteness or darkens if > 0.5 brightness. -func (c Colour) BrightenOrDarken(factor float64) Colour { - if c.Brightness() < 0.5 { - return c.Brighten(factor) - } - return c.Brighten(-factor) -} - -// Brightness of the colour (roughly) in the range 0.0 to 1.0 -func (c Colour) Brightness() float64 { - return (float64(c.Red()) + float64(c.Green()) + float64(c.Blue())) / 255.0 / 3.0 -} - -// ParseColour in the forms #rgb, #rrggbb, #ansi, or #. -// Will return an "unset" colour if invalid. -func ParseColour(colour string) Colour { - colour = normaliseColour(colour) - n, err := strconv.ParseUint(colour, 16, 32) - if err != nil { - return 0 - } - return Colour(n + 1) -} - -// MustParseColour is like ParseColour except it panics if the colour is invalid. -// -// Will panic if colour is in an invalid format. -func MustParseColour(colour string) Colour { - parsed := ParseColour(colour) - if !parsed.IsSet() { - panic(fmt.Errorf("invalid colour %q", colour)) - } - return parsed -} - -// IsSet returns true if the colour is set. -func (c Colour) IsSet() bool { return c != 0 } - -func (c Colour) String() string { return fmt.Sprintf("#%06x", int(c-1)) } -func (c Colour) GoString() string { return fmt.Sprintf("Colour(0x%06x)", int(c-1)) } - -// Red component of colour. -func (c Colour) Red() uint8 { return uint8(((c - 1) >> 16) & 0xff) } - -// Green component of colour. -func (c Colour) Green() uint8 { return uint8(((c - 1) >> 8) & 0xff) } - -// Blue component of colour. -func (c Colour) Blue() uint8 { return uint8((c - 1) & 0xff) } - -// Colours is an orderable set of colours. -type Colours []Colour - -func (c Colours) Len() int { return len(c) } -func (c Colours) Swap(i, j int) { c[i], c[j] = c[j], c[i] } -func (c Colours) Less(i, j int) bool { return c[i] < c[j] } - -// Convert colours to #rrggbb. -func normaliseColour(colour string) string { - if ansi, ok := ANSI2RGB[colour]; ok { - return ansi - } - if strings.HasPrefix(colour, "#") { - colour = colour[1:] - if len(colour) == 3 { - return colour[0:1] + colour[0:1] + colour[1:2] + colour[1:2] + colour[2:3] + colour[2:3] - } - } - return colour -} diff --git a/vendor/github.com/alecthomas/chroma/delegate.go b/vendor/github.com/alecthomas/chroma/delegate.go deleted file mode 100644 index 5cef01b..0000000 --- a/vendor/github.com/alecthomas/chroma/delegate.go +++ /dev/null @@ -1,137 +0,0 @@ -package chroma - -import ( - "bytes" -) - -type delegatingLexer struct { - root Lexer - language Lexer -} - -// DelegatingLexer combines two lexers to handle the common case of a language embedded inside another, such as PHP -// inside HTML or PHP inside plain text. -// -// It takes two lexer as arguments: a root lexer and a language lexer. First everything is scanned using the language -// lexer, which must return "Other" for unrecognised tokens. Then all "Other" tokens are lexed using the root lexer. -// Finally, these two sets of tokens are merged. -// -// The lexers from the template lexer package use this base lexer. -func DelegatingLexer(root Lexer, language Lexer) Lexer { - return &delegatingLexer{ - root: root, - language: language, - } -} - -func (d *delegatingLexer) Config() *Config { - return d.language.Config() -} - -// An insertion is the character range where language tokens should be inserted. -type insertion struct { - start, end int - tokens []Token -} - -func (d *delegatingLexer) Tokenise(options *TokeniseOptions, text string) (Iterator, error) { // nolint: gocognit - tokens, err := Tokenise(Coalesce(d.language), options, text) - if err != nil { - return nil, err - } - // Compute insertions and gather "Other" tokens. - others := &bytes.Buffer{} - insertions := []*insertion{} - var insert *insertion - offset := 0 - var last Token - for _, t := range tokens { - if t.Type == Other { - if last != EOF && insert != nil && last.Type != Other { - insert.end = offset - } - others.WriteString(t.Value) - } else { - if last == EOF || last.Type == Other { - insert = &insertion{start: offset} - insertions = append(insertions, insert) - } - insert.tokens = append(insert.tokens, t) - } - last = t - offset += len(t.Value) - } - - if len(insertions) == 0 { - return d.root.Tokenise(options, text) - } - - // Lex the other tokens. - rootTokens, err := Tokenise(Coalesce(d.root), options, others.String()) - if err != nil { - return nil, err - } - - // Interleave the two sets of tokens. - var out []Token - offset = 0 // Offset into text. - tokenIndex := 0 - nextToken := func() Token { - if tokenIndex >= len(rootTokens) { - return EOF - } - t := rootTokens[tokenIndex] - tokenIndex++ - return t - } - insertionIndex := 0 - nextInsertion := func() *insertion { - if insertionIndex >= len(insertions) { - return nil - } - i := insertions[insertionIndex] - insertionIndex++ - return i - } - t := nextToken() - i := nextInsertion() - for t != EOF || i != nil { - // fmt.Printf("%d->%d:%q %d->%d:%q\n", offset, offset+len(t.Value), t.Value, i.start, i.end, Stringify(i.tokens...)) - if t == EOF || (i != nil && i.start < offset+len(t.Value)) { - var l Token - l, t = splitToken(t, i.start-offset) - if l != EOF { - out = append(out, l) - offset += len(l.Value) - } - out = append(out, i.tokens...) - offset += i.end - i.start - if t == EOF { - t = nextToken() - } - i = nextInsertion() - } else { - out = append(out, t) - offset += len(t.Value) - t = nextToken() - } - } - return Literator(out...), nil -} - -func splitToken(t Token, offset int) (l Token, r Token) { - if t == EOF { - return EOF, EOF - } - if offset == 0 { - return EOF, t - } - if offset == len(t.Value) { - return t, EOF - } - l = t.Clone() - r = t.Clone() - l.Value = l.Value[:offset] - r.Value = r.Value[offset:] - return -} diff --git a/vendor/github.com/alecthomas/chroma/doc.go b/vendor/github.com/alecthomas/chroma/doc.go deleted file mode 100644 index 4dde77c..0000000 --- a/vendor/github.com/alecthomas/chroma/doc.go +++ /dev/null @@ -1,7 +0,0 @@ -// Package chroma takes source code and other structured text and converts it into syntax highlighted HTML, ANSI- -// coloured text, etc. -// -// Chroma is based heavily on Pygments, and includes translators for Pygments lexers and styles. -// -// For more information, go here: https://github.com/alecthomas/chroma -package chroma diff --git a/vendor/github.com/alecthomas/chroma/formatter.go b/vendor/github.com/alecthomas/chroma/formatter.go deleted file mode 100644 index 00dd5d8..0000000 --- a/vendor/github.com/alecthomas/chroma/formatter.go +++ /dev/null @@ -1,43 +0,0 @@ -package chroma - -import ( - "io" -) - -// A Formatter for Chroma lexers. -type Formatter interface { - // Format returns a formatting function for tokens. - // - // If the iterator panics, the Formatter should recover. - Format(w io.Writer, style *Style, iterator Iterator) error -} - -// A FormatterFunc is a Formatter implemented as a function. -// -// Guards against iterator panics. -type FormatterFunc func(w io.Writer, style *Style, iterator Iterator) error - -func (f FormatterFunc) Format(w io.Writer, s *Style, it Iterator) (err error) { // nolint - defer func() { - if perr := recover(); perr != nil { - err = perr.(error) - } - }() - return f(w, s, it) -} - -type recoveringFormatter struct { - Formatter -} - -func (r recoveringFormatter) Format(w io.Writer, s *Style, it Iterator) (err error) { - defer func() { - if perr := recover(); perr != nil { - err = perr.(error) - } - }() - return r.Formatter.Format(w, s, it) -} - -// RecoveringFormatter wraps a formatter with panic recovery. -func RecoveringFormatter(formatter Formatter) Formatter { return recoveringFormatter{formatter} } diff --git a/vendor/github.com/alecthomas/chroma/formatters/api.go b/vendor/github.com/alecthomas/chroma/formatters/api.go deleted file mode 100644 index 6da0a24..0000000 --- a/vendor/github.com/alecthomas/chroma/formatters/api.go +++ /dev/null @@ -1,57 +0,0 @@ -package formatters - -import ( - "io" - "sort" - - "github.com/alecthomas/chroma" - "github.com/alecthomas/chroma/formatters/html" - "github.com/alecthomas/chroma/formatters/svg" -) - -var ( - // NoOp formatter. - NoOp = Register("noop", chroma.FormatterFunc(func(w io.Writer, s *chroma.Style, iterator chroma.Iterator) error { - for t := iterator(); t != chroma.EOF; t = iterator() { - if _, err := io.WriteString(w, t.Value); err != nil { - return err - } - } - return nil - })) - // Default HTML formatter outputs self-contained HTML. - htmlFull = Register("html", html.New(html.Standalone(true), html.WithClasses(true))) // nolint - SVG = Register("svg", svg.New(svg.EmbedFont("Liberation Mono", svg.FontLiberationMono, svg.WOFF))) -) - -// Fallback formatter. -var Fallback = NoOp - -// Registry of Formatters. -var Registry = map[string]chroma.Formatter{} - -// Names of registered formatters. -func Names() []string { - out := []string{} - for name := range Registry { - out = append(out, name) - } - sort.Strings(out) - return out -} - -// Get formatter by name. -// -// If the given formatter is not found, the Fallback formatter will be returned. -func Get(name string) chroma.Formatter { - if f, ok := Registry[name]; ok { - return f - } - return Fallback -} - -// Register a named formatter. -func Register(name string, formatter chroma.Formatter) chroma.Formatter { - Registry[name] = formatter - return formatter -} diff --git a/vendor/github.com/alecthomas/chroma/formatters/html/html.go b/vendor/github.com/alecthomas/chroma/formatters/html/html.go deleted file mode 100644 index f0ef44a..0000000 --- a/vendor/github.com/alecthomas/chroma/formatters/html/html.go +++ /dev/null @@ -1,435 +0,0 @@ -package html - -import ( - "fmt" - "html" - "io" - "sort" - "strings" - - "github.com/alecthomas/chroma" -) - -// Option sets an option of the HTML formatter. -type Option func(f *Formatter) - -// Standalone configures the HTML formatter for generating a standalone HTML document. -func Standalone(b bool) Option { return func(f *Formatter) { f.standalone = b } } - -// ClassPrefix sets the CSS class prefix. -func ClassPrefix(prefix string) Option { return func(f *Formatter) { f.prefix = prefix } } - -// WithClasses emits HTML using CSS classes, rather than inline styles. -func WithClasses(b bool) Option { return func(f *Formatter) { f.Classes = b } } - -// TabWidth sets the number of characters for a tab. Defaults to 8. -func TabWidth(width int) Option { return func(f *Formatter) { f.tabWidth = width } } - -// PreventSurroundingPre prevents the surrounding pre tags around the generated code. -func PreventSurroundingPre(b bool) Option { - return func(f *Formatter) { - if b { - f.preWrapper = nopPreWrapper - } else { - f.preWrapper = defaultPreWrapper - } - } -} - -// WithPreWrapper allows control of the surrounding pre tags. -func WithPreWrapper(wrapper PreWrapper) Option { - return func(f *Formatter) { - f.preWrapper = wrapper - } -} - -// WithLineNumbers formats output with line numbers. -func WithLineNumbers(b bool) Option { - return func(f *Formatter) { - f.lineNumbers = b - } -} - -// LineNumbersInTable will, when combined with WithLineNumbers, separate the line numbers -// and code in table td's, which make them copy-and-paste friendly. -func LineNumbersInTable(b bool) Option { - return func(f *Formatter) { - f.lineNumbersInTable = b - } -} - -// LinkableLineNumbers decorates the line numbers HTML elements with an "id" -// attribute so they can be linked. -func LinkableLineNumbers(b bool, prefix string) Option { - return func(f *Formatter) { - f.linkableLineNumbers = b - f.lineNumbersIDPrefix = prefix - } -} - -// HighlightLines higlights the given line ranges with the Highlight style. -// -// A range is the beginning and ending of a range as 1-based line numbers, inclusive. -func HighlightLines(ranges [][2]int) Option { - return func(f *Formatter) { - f.highlightRanges = ranges - sort.Sort(f.highlightRanges) - } -} - -// BaseLineNumber sets the initial number to start line numbering at. Defaults to 1. -func BaseLineNumber(n int) Option { - return func(f *Formatter) { - f.baseLineNumber = n - } -} - -// New HTML formatter. -func New(options ...Option) *Formatter { - f := &Formatter{ - baseLineNumber: 1, - preWrapper: defaultPreWrapper, - } - for _, option := range options { - option(f) - } - return f -} - -// PreWrapper defines the operations supported in WithPreWrapper. -type PreWrapper interface { - // Start is called to write a start
 element.
-	// The code flag tells whether this block surrounds
-	// highlighted code. This will be false when surrounding
-	// line numbers.
-	Start(code bool, styleAttr string) string
-
-	// End is called to write the end 
element. - End(code bool) string -} - -type preWrapper struct { - start func(code bool, styleAttr string) string - end func(code bool) string -} - -func (p preWrapper) Start(code bool, styleAttr string) string { - return p.start(code, styleAttr) -} - -func (p preWrapper) End(code bool) string { - return p.end(code) -} - -var ( - nopPreWrapper = preWrapper{ - start: func(code bool, styleAttr string) string { return "" }, - end: func(code bool) string { return "" }, - } - defaultPreWrapper = preWrapper{ - start: func(code bool, styleAttr string) string { - return fmt.Sprintf("", styleAttr) - }, - end: func(code bool) string { - return "" - }, - } -) - -// Formatter that generates HTML. -type Formatter struct { - standalone bool - prefix string - Classes bool // Exported field to detect when classes are being used - preWrapper PreWrapper - tabWidth int - lineNumbers bool - lineNumbersInTable bool - linkableLineNumbers bool - lineNumbersIDPrefix string - highlightRanges highlightRanges - baseLineNumber int -} - -type highlightRanges [][2]int - -func (h highlightRanges) Len() int { return len(h) } -func (h highlightRanges) Swap(i, j int) { h[i], h[j] = h[j], h[i] } -func (h highlightRanges) Less(i, j int) bool { return h[i][0] < h[j][0] } - -func (f *Formatter) Format(w io.Writer, style *chroma.Style, iterator chroma.Iterator) (err error) { - return f.writeHTML(w, style, iterator.Tokens()) -} - -// We deliberately don't use html/template here because it is two orders of magnitude slower (benchmarked). -// -// OTOH we need to be super careful about correct escaping... -func (f *Formatter) writeHTML(w io.Writer, style *chroma.Style, tokens []chroma.Token) (err error) { // nolint: gocyclo - css := f.styleToCSS(style) - if !f.Classes { - for t, style := range css { - css[t] = compressStyle(style) - } - } - if f.standalone { - fmt.Fprint(w, "\n") - if f.Classes { - fmt.Fprint(w, "") - } - fmt.Fprintf(w, "\n", f.styleAttr(css, chroma.Background)) - } - - wrapInTable := f.lineNumbers && f.lineNumbersInTable - - lines := chroma.SplitTokensIntoLines(tokens) - lineDigits := len(fmt.Sprintf("%d", f.baseLineNumber+len(lines)-1)) - highlightIndex := 0 - - if wrapInTable { - // List line numbers in its own - fmt.Fprintf(w, "\n", f.styleAttr(css, chroma.Background)) - fmt.Fprintf(w, "", f.styleAttr(css, chroma.LineTable)) - fmt.Fprintf(w, "\n", f.styleAttr(css, chroma.LineTableTD)) - fmt.Fprintf(w, f.preWrapper.Start(false, f.styleAttr(css, chroma.Background))) - for index := range lines { - line := f.baseLineNumber + index - highlight, next := f.shouldHighlight(highlightIndex, line) - if next { - highlightIndex++ - } - if highlight { - fmt.Fprintf(w, "", f.styleAttr(css, chroma.LineHighlight)) - } - - fmt.Fprintf(w, "%*d\n", f.styleAttr(css, chroma.LineNumbersTable), f.lineIDAttribute(line), lineDigits, line) - - if highlight { - fmt.Fprintf(w, "") - } - } - fmt.Fprint(w, f.preWrapper.End(false)) - fmt.Fprint(w, "\n") - fmt.Fprintf(w, "\n", f.styleAttr(css, chroma.LineTableTD, "width:100%")) - } - - fmt.Fprintf(w, f.preWrapper.Start(true, f.styleAttr(css, chroma.Background))) - - highlightIndex = 0 - for index, tokens := range lines { - // 1-based line number. - line := f.baseLineNumber + index - highlight, next := f.shouldHighlight(highlightIndex, line) - if next { - highlightIndex++ - } - if highlight { - fmt.Fprintf(w, "", f.styleAttr(css, chroma.LineHighlight)) - } - - if f.lineNumbers && !wrapInTable { - fmt.Fprintf(w, "%*d", f.styleAttr(css, chroma.LineNumbers), f.lineIDAttribute(line), lineDigits, line) - } - - for _, token := range tokens { - html := html.EscapeString(token.String()) - attr := f.styleAttr(css, token.Type) - if attr != "" { - html = fmt.Sprintf("%s", attr, html) - } - fmt.Fprint(w, html) - } - if highlight { - fmt.Fprintf(w, "") - } - } - - fmt.Fprintf(w, f.preWrapper.End(true)) - - if wrapInTable { - fmt.Fprint(w, "\n") - fmt.Fprint(w, "\n") - } - - if f.standalone { - fmt.Fprint(w, "\n\n") - fmt.Fprint(w, "\n") - } - - return nil -} - -func (f *Formatter) lineIDAttribute(line int) string { - if !f.linkableLineNumbers { - return "" - } - return fmt.Sprintf(" id=\"%s%d\"", f.lineNumbersIDPrefix, line) -} - -func (f *Formatter) shouldHighlight(highlightIndex, line int) (bool, bool) { - next := false - for highlightIndex < len(f.highlightRanges) && line > f.highlightRanges[highlightIndex][1] { - highlightIndex++ - next = true - } - if highlightIndex < len(f.highlightRanges) { - hrange := f.highlightRanges[highlightIndex] - if line >= hrange[0] && line <= hrange[1] { - return true, next - } - } - return false, next -} - -func (f *Formatter) class(t chroma.TokenType) string { - for t != 0 { - if cls, ok := chroma.StandardTypes[t]; ok { - if cls != "" { - return f.prefix + cls - } - return "" - } - t = t.Parent() - } - if cls := chroma.StandardTypes[t]; cls != "" { - return f.prefix + cls - } - return "" -} - -func (f *Formatter) styleAttr(styles map[chroma.TokenType]string, tt chroma.TokenType, extraCSS ...string) string { - if f.Classes { - cls := f.class(tt) - if cls == "" { - return "" - } - return fmt.Sprintf(` class="%s"`, cls) - } - if _, ok := styles[tt]; !ok { - tt = tt.SubCategory() - if _, ok := styles[tt]; !ok { - tt = tt.Category() - if _, ok := styles[tt]; !ok { - return "" - } - } - } - css := []string{styles[tt]} - css = append(css, extraCSS...) - return fmt.Sprintf(` style="%s"`, strings.Join(css, ";")) -} - -func (f *Formatter) tabWidthStyle() string { - if f.tabWidth != 0 && f.tabWidth != 8 { - return fmt.Sprintf("; -moz-tab-size: %[1]d; -o-tab-size: %[1]d; tab-size: %[1]d", f.tabWidth) - } - return "" -} - -// WriteCSS writes CSS style definitions (without any surrounding HTML). -func (f *Formatter) WriteCSS(w io.Writer, style *chroma.Style) error { - css := f.styleToCSS(style) - // Special-case background as it is mapped to the outer ".chroma" class. - if _, err := fmt.Fprintf(w, "/* %s */ .%schroma { %s }\n", chroma.Background, f.prefix, css[chroma.Background]); err != nil { - return err - } - // Special-case code column of table to expand width. - if f.lineNumbers && f.lineNumbersInTable { - if _, err := fmt.Fprintf(w, "/* %s */ .%schroma .%s:last-child { width: 100%%; }", - chroma.LineTableTD, f.prefix, f.class(chroma.LineTableTD)); err != nil { - return err - } - } - // Special-case line number highlighting when targeted. - if f.lineNumbers || f.lineNumbersInTable { - targetedLineCSS := StyleEntryToCSS(style.Get(chroma.LineHighlight)) - for _, tt := range []chroma.TokenType{chroma.LineNumbers, chroma.LineNumbersTable} { - fmt.Fprintf(w, "/* %s targeted by URL anchor */ .%schroma .%s:target { %s }\n", tt, f.prefix, f.class(tt), targetedLineCSS) - } - } - tts := []int{} - for tt := range css { - tts = append(tts, int(tt)) - } - sort.Ints(tts) - for _, ti := range tts { - tt := chroma.TokenType(ti) - if tt == chroma.Background { - continue - } - styles := css[tt] - if _, err := fmt.Fprintf(w, "/* %s */ .%schroma .%s { %s }\n", tt, f.prefix, f.class(tt), styles); err != nil { - return err - } - } - return nil -} - -func (f *Formatter) styleToCSS(style *chroma.Style) map[chroma.TokenType]string { - classes := map[chroma.TokenType]string{} - bg := style.Get(chroma.Background) - // Convert the style. - for t := range chroma.StandardTypes { - entry := style.Get(t) - if t != chroma.Background { - entry = entry.Sub(bg) - } - if entry.IsZero() { - continue - } - classes[t] = StyleEntryToCSS(entry) - } - classes[chroma.Background] += f.tabWidthStyle() - lineNumbersStyle := "margin-right: 0.4em; padding: 0 0.4em 0 0.4em;" - // All rules begin with default rules followed by user provided rules - classes[chroma.LineNumbers] = lineNumbersStyle + classes[chroma.LineNumbers] - classes[chroma.LineNumbersTable] = lineNumbersStyle + classes[chroma.LineNumbersTable] - classes[chroma.LineHighlight] = "display: block; width: 100%;" + classes[chroma.LineHighlight] - classes[chroma.LineTable] = "border-spacing: 0; padding: 0; margin: 0; border: 0; width: auto; overflow: auto; display: block;" + classes[chroma.LineTable] - classes[chroma.LineTableTD] = "vertical-align: top; padding: 0; margin: 0; border: 0;" + classes[chroma.LineTableTD] - return classes -} - -// StyleEntryToCSS converts a chroma.StyleEntry to CSS attributes. -func StyleEntryToCSS(e chroma.StyleEntry) string { - styles := []string{} - if e.Colour.IsSet() { - styles = append(styles, "color: "+e.Colour.String()) - } - if e.Background.IsSet() { - styles = append(styles, "background-color: "+e.Background.String()) - } - if e.Bold == chroma.Yes { - styles = append(styles, "font-weight: bold") - } - if e.Italic == chroma.Yes { - styles = append(styles, "font-style: italic") - } - if e.Underline == chroma.Yes { - styles = append(styles, "text-decoration: underline") - } - return strings.Join(styles, "; ") -} - -// Compress CSS attributes - remove spaces, transform 6-digit colours to 3. -func compressStyle(s string) string { - parts := strings.Split(s, ";") - out := []string{} - for _, p := range parts { - p = strings.Join(strings.Fields(p), " ") - p = strings.Replace(p, ": ", ":", 1) - if strings.Contains(p, "#") { - c := p[len(p)-6:] - if c[0] == c[1] && c[2] == c[3] && c[4] == c[5] { - p = p[:len(p)-6] + c[0:1] + c[2:3] + c[4:5] - } - } - out = append(out, p) - } - return strings.Join(out, ";") -} diff --git a/vendor/github.com/alecthomas/chroma/formatters/json.go b/vendor/github.com/alecthomas/chroma/formatters/json.go deleted file mode 100644 index 95df4bb..0000000 --- a/vendor/github.com/alecthomas/chroma/formatters/json.go +++ /dev/null @@ -1,31 +0,0 @@ -package formatters - -import ( - "encoding/json" - "fmt" - "io" - - "github.com/alecthomas/chroma" -) - -// JSON formatter outputs the raw token structures as JSON. -var JSON = Register("json", chroma.FormatterFunc(func(w io.Writer, s *chroma.Style, it chroma.Iterator) error { - fmt.Fprintln(w, "[") - i := 0 - for t := it(); t != chroma.EOF; t = it() { - if i > 0 { - fmt.Fprintln(w, ",") - } - i++ - bytes, err := json.Marshal(t) - if err != nil { - return err - } - if _, err := fmt.Fprint(w, " "+string(bytes)); err != nil { - return err - } - } - fmt.Fprintln(w) - fmt.Fprintln(w, "]") - return nil -})) diff --git a/vendor/github.com/alecthomas/chroma/formatters/svg/font_liberation_mono.go b/vendor/github.com/alecthomas/chroma/formatters/svg/font_liberation_mono.go deleted file mode 100644 index 70d692e..0000000 --- a/vendor/github.com/alecthomas/chroma/formatters/svg/font_liberation_mono.go +++ /dev/null @@ -1,51 +0,0 @@ -// Digitized data copyright (c) 2010 Google Corporation -// with Reserved Font Arimo, Tinos and Cousine. -// Copyright (c) 2012 Red Hat, Inc. -// with Reserved Font Name Liberation. -// -// This Font Software is licensed under the SIL Open Font License, Version 1.1. -// This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL -// -// ----------------------------------------------------------- -// SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 -// ----------------------------------------------------------- -// -// PREAMBLE -// The goals of the Open Font License (OFL) are to stimulate worldwide development of collaborative font projects, to support the font creation efforts of academic and linguistic communities, and to provide a free and open framework in which fonts may be shared and improved in partnership with others. -// -// The OFL allows the licensed fonts to be used, studied, modified and redistributed freely as long as they are not sold by themselves. The fonts, including any derivative works, can be bundled, embedded, redistributed and/or sold with any software provided that any reserved names are not used by derivative works. The fonts and derivatives, however, cannot be released under any other type of license. The requirement for fonts to remain under this license does not apply to any document created using the fonts or their derivatives. -// -// DEFINITIONS -// "Font Software" refers to the set of files released by the Copyright Holder(s) under this license and clearly marked as such. This may include source files, build scripts and documentation. -// -// "Reserved Font Name" refers to any names specified as such after the copyright statement(s). -// -// "Original Version" refers to the collection of Font Software components as distributed by the Copyright Holder(s). -// -// "Modified Version" refers to any derivative made by adding to, deleting, or substituting -- in part or in whole -- any of the components of the Original Version, by changing formats or by porting the Font Software to a new environment. -// -// "Author" refers to any designer, engineer, programmer, technical writer or other person who contributed to the Font Software. -// -// PERMISSION & CONDITIONS -// Permission is hereby granted, free of charge, to any person obtaining a copy of the Font Software, to use, study, copy, merge, embed, modify, redistribute, and sell modified and unmodified copies of the Font Software, subject to the following conditions: -// -// 1) Neither the Font Software nor any of its individual components, in Original or Modified Versions, may be sold by itself. -// -// 2) Original or Modified Versions of the Font Software may be bundled, redistributed and/or sold with any software, provided that each copy contains the above copyright notice and this license. These can be included either as stand-alone text files, human-readable headers or in the appropriate machine-readable metadata fields within text or binary files as long as those fields can be easily viewed by the user. -// -// 3) No Modified Version of the Font Software may use the Reserved Font Name(s) unless explicit written permission is granted by the corresponding Copyright Holder. This restriction only applies to the primary font name as presented to the users. -// -// 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font Software shall not be used to promote, endorse or advertise any Modified Version, except to acknowledge the contribution(s) of the Copyright Holder(s) and the Author(s) or with their explicit written permission. -// -// 5) The Font Software, modified or unmodified, in part or in whole, must be distributed entirely under this license, and must not be distributed under any other license. The requirement for fonts to remain under this license does not apply to any document created using the Font Software. -// -// TERMINATION -// This license becomes null and void if any of the above conditions are not met. -// -// DISCLAIMER -// THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. - -package svg - -// Liberation Mono as base64 encoded woff (SIL Open Font License)[https://en.wikipedia.org/wiki/Liberation_fonts] -var FontLiberationMono = `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` diff --git a/vendor/github.com/alecthomas/chroma/formatters/svg/svg.go b/vendor/github.com/alecthomas/chroma/formatters/svg/svg.go deleted file mode 100644 index 631fa14..0000000 --- a/vendor/github.com/alecthomas/chroma/formatters/svg/svg.go +++ /dev/null @@ -1,222 +0,0 @@ -// Package svg contains an SVG formatter. -package svg - -import ( - "encoding/base64" - "errors" - "fmt" - "io" - "io/ioutil" - "path" - "strings" - - "github.com/alecthomas/chroma" -) - -// Option sets an option of the SVG formatter. -type Option func(f *Formatter) - -// FontFamily sets the font-family. -func FontFamily(fontFamily string) Option { return func(f *Formatter) { f.fontFamily = fontFamily } } - -// EmbedFontFile embeds given font file -func EmbedFontFile(fontFamily string, fileName string) (option Option, err error) { - var format FontFormat - switch path.Ext(fileName) { - case ".woff": - format = WOFF - case ".woff2": - format = WOFF2 - case ".ttf": - format = TRUETYPE - default: - return nil, errors.New("unexpected font file suffix") - } - - var content []byte - if content, err = ioutil.ReadFile(fileName); err == nil { - option = EmbedFont(fontFamily, base64.StdEncoding.EncodeToString(content), format) - } - return -} - -// EmbedFont embeds given base64 encoded font -func EmbedFont(fontFamily string, font string, format FontFormat) Option { - return func(f *Formatter) { f.fontFamily = fontFamily; f.embeddedFont = font; f.fontFormat = format } -} - -// New SVG formatter. -func New(options ...Option) *Formatter { - f := &Formatter{fontFamily: "Consolas, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, monospace"} - for _, option := range options { - option(f) - } - return f -} - -// Formatter that generates SVG. -type Formatter struct { - fontFamily string - embeddedFont string - fontFormat FontFormat -} - -func (f *Formatter) Format(w io.Writer, style *chroma.Style, iterator chroma.Iterator) (err error) { - f.writeSVG(w, style, iterator.Tokens()) - return err -} - -var svgEscaper = strings.NewReplacer( - `&`, "&", - `<`, "<", - `>`, ">", - `"`, """, - ` `, " ", - ` `, "    ", -) - -// EscapeString escapes special characters. -func escapeString(s string) string { - return svgEscaper.Replace(s) -} - -func (f *Formatter) writeSVG(w io.Writer, style *chroma.Style, tokens []chroma.Token) { // nolint: gocyclo - svgStyles := f.styleToSVG(style) - lines := chroma.SplitTokensIntoLines(tokens) - - fmt.Fprint(w, "\n") - fmt.Fprint(w, "\n") - fmt.Fprintf(w, "\n", 8*maxLineWidth(lines), 10+int(16.8*float64(len(lines)+1))) - - if f.embeddedFont != "" { - f.writeFontStyle(w) - } - - fmt.Fprintf(w, "\n", style.Get(chroma.Background).Background.String()) - fmt.Fprintf(w, "\n", f.fontFamily, style.Get(chroma.Text).Colour.String()) - - f.writeTokenBackgrounds(w, lines, style) - - for index, tokens := range lines { - fmt.Fprintf(w, "", 1.2*float64(index+1)) - - for _, token := range tokens { - text := escapeString(token.String()) - attr := f.styleAttr(svgStyles, token.Type) - if attr != "" { - text = fmt.Sprintf("%s", attr, text) - } - fmt.Fprint(w, text) - } - fmt.Fprint(w, "") - } - - fmt.Fprint(w, "\n\n") - fmt.Fprint(w, "\n") -} - -func maxLineWidth(lines [][]chroma.Token) int { - maxWidth := 0 - for _, tokens := range lines { - length := 0 - for _, token := range tokens { - length += len(strings.Replace(token.String(), ` `, " ", -1)) - } - if length > maxWidth { - maxWidth = length - } - } - return maxWidth -} - -// There is no background attribute for text in SVG so simply calculate the position and text -// of tokens with a background color that differs from the default and add a rectangle for each before -// adding the token. -func (f *Formatter) writeTokenBackgrounds(w io.Writer, lines [][]chroma.Token, style *chroma.Style) { - for index, tokens := range lines { - lineLength := 0 - for _, token := range tokens { - length := len(strings.Replace(token.String(), ` `, " ", -1)) - tokenBackground := style.Get(token.Type).Background - if tokenBackground.IsSet() && tokenBackground != style.Get(chroma.Background).Background { - fmt.Fprintf(w, "\n", escapeString(token.String()), lineLength, 1.2*float64(index)+0.25, length, style.Get(token.Type).Background.String()) - } - lineLength += length - } - } -} - -type FontFormat int - -// https://transfonter.org/formats -const ( - WOFF FontFormat = iota - WOFF2 - TRUETYPE -) - -var fontFormats = [...]string{ - "woff", - "woff2", - "truetype", -} - -func (f *Formatter) writeFontStyle(w io.Writer) { - fmt.Fprintf(w, ``, f.fontFamily, fontFormats[f.fontFormat], f.embeddedFont, fontFormats[f.fontFormat]) -} - -func (f *Formatter) styleAttr(styles map[chroma.TokenType]string, tt chroma.TokenType) string { - if _, ok := styles[tt]; !ok { - tt = tt.SubCategory() - if _, ok := styles[tt]; !ok { - tt = tt.Category() - if _, ok := styles[tt]; !ok { - return "" - } - } - } - return styles[tt] -} - -func (f *Formatter) styleToSVG(style *chroma.Style) map[chroma.TokenType]string { - converted := map[chroma.TokenType]string{} - bg := style.Get(chroma.Background) - // Convert the style. - for t := range chroma.StandardTypes { - entry := style.Get(t) - if t != chroma.Background { - entry = entry.Sub(bg) - } - if entry.IsZero() { - continue - } - converted[t] = StyleEntryToSVG(entry) - } - return converted -} - -// StyleEntryToSVG converts a chroma.StyleEntry to SVG attributes. -func StyleEntryToSVG(e chroma.StyleEntry) string { - var styles []string - - if e.Colour.IsSet() { - styles = append(styles, "fill=\""+e.Colour.String()+"\"") - } - if e.Bold == chroma.Yes { - styles = append(styles, "font-weight=\"bold\"") - } - if e.Italic == chroma.Yes { - styles = append(styles, "font-style=\"italic\"") - } - if e.Underline == chroma.Yes { - styles = append(styles, "text-decoration=\"underline\"") - } - return strings.Join(styles, " ") -} diff --git a/vendor/github.com/alecthomas/chroma/formatters/tokens.go b/vendor/github.com/alecthomas/chroma/formatters/tokens.go deleted file mode 100644 index 91d80d1..0000000 --- a/vendor/github.com/alecthomas/chroma/formatters/tokens.go +++ /dev/null @@ -1,18 +0,0 @@ -package formatters - -import ( - "fmt" - "io" - - "github.com/alecthomas/chroma" -) - -// Tokens formatter outputs the raw token structures. -var Tokens = Register("tokens", chroma.FormatterFunc(func(w io.Writer, s *chroma.Style, it chroma.Iterator) error { - for t := it(); t != chroma.EOF; t = it() { - if _, err := fmt.Fprintln(w, t.GoString()); err != nil { - return err - } - } - return nil -})) diff --git a/vendor/github.com/alecthomas/chroma/formatters/tty_indexed.go b/vendor/github.com/alecthomas/chroma/formatters/tty_indexed.go deleted file mode 100644 index eb90ea7..0000000 --- a/vendor/github.com/alecthomas/chroma/formatters/tty_indexed.go +++ /dev/null @@ -1,260 +0,0 @@ -package formatters - -import ( - "fmt" - "io" - "math" - - "github.com/alecthomas/chroma" -) - -type ttyTable struct { - foreground map[chroma.Colour]string - background map[chroma.Colour]string -} - -var c = chroma.MustParseColour - -var ttyTables = map[int]*ttyTable{ - 8: { - foreground: map[chroma.Colour]string{ - c("#000000"): "\033[30m", c("#7f0000"): "\033[31m", c("#007f00"): "\033[32m", c("#7f7fe0"): "\033[33m", - c("#00007f"): "\033[34m", c("#7f007f"): "\033[35m", c("#007f7f"): "\033[36m", c("#e5e5e5"): "\033[37m", - c("#555555"): "\033[90m", c("#ff0000"): "\033[91m", c("#00ff00"): "\033[92m", c("#ffff00"): "\033[93m", - c("#0000ff"): "\033[94m", c("#ff00ff"): "\033[95m", c("#00ffff"): "\033[96m", c("#ffffff"): "\033[97m", - }, - background: map[chroma.Colour]string{ - c("#000000"): "\033[40m", c("#7f0000"): "\033[41m", c("#007f00"): "\033[42m", c("#7f7fe0"): "\033[43m", - c("#00007f"): "\033[44m", c("#7f007f"): "\033[45m", c("#007f7f"): "\033[46m", c("#e5e5e5"): "\033[47m", - c("#555555"): "\033[100m", c("#ff0000"): "\033[101m", c("#00ff00"): "\033[102m", c("#ffff00"): "\033[103m", - c("#0000ff"): "\033[104m", c("#ff00ff"): "\033[105m", c("#00ffff"): "\033[106m", c("#ffffff"): "\033[107m", - }, - }, - 256: { - foreground: map[chroma.Colour]string{ - c("#000000"): "\033[38;5;0m", c("#800000"): "\033[38;5;1m", c("#008000"): "\033[38;5;2m", c("#808000"): "\033[38;5;3m", - c("#000080"): "\033[38;5;4m", c("#800080"): "\033[38;5;5m", c("#008080"): "\033[38;5;6m", c("#c0c0c0"): "\033[38;5;7m", - c("#808080"): "\033[38;5;8m", c("#ff0000"): "\033[38;5;9m", c("#00ff00"): "\033[38;5;10m", c("#ffff00"): "\033[38;5;11m", - c("#0000ff"): "\033[38;5;12m", c("#ff00ff"): "\033[38;5;13m", c("#00ffff"): "\033[38;5;14m", c("#ffffff"): "\033[38;5;15m", - c("#000000"): "\033[38;5;16m", c("#00005f"): "\033[38;5;17m", c("#000087"): "\033[38;5;18m", c("#0000af"): "\033[38;5;19m", - c("#0000d7"): "\033[38;5;20m", c("#0000ff"): "\033[38;5;21m", c("#005f00"): "\033[38;5;22m", c("#005f5f"): "\033[38;5;23m", - c("#005f87"): "\033[38;5;24m", c("#005faf"): "\033[38;5;25m", c("#005fd7"): "\033[38;5;26m", c("#005fff"): "\033[38;5;27m", - c("#008700"): "\033[38;5;28m", c("#00875f"): "\033[38;5;29m", c("#008787"): "\033[38;5;30m", c("#0087af"): "\033[38;5;31m", - c("#0087d7"): "\033[38;5;32m", c("#0087ff"): "\033[38;5;33m", c("#00af00"): "\033[38;5;34m", c("#00af5f"): "\033[38;5;35m", - c("#00af87"): "\033[38;5;36m", c("#00afaf"): "\033[38;5;37m", c("#00afd7"): "\033[38;5;38m", c("#00afff"): "\033[38;5;39m", - c("#00d700"): "\033[38;5;40m", c("#00d75f"): "\033[38;5;41m", c("#00d787"): "\033[38;5;42m", c("#00d7af"): "\033[38;5;43m", - c("#00d7d7"): "\033[38;5;44m", c("#00d7ff"): "\033[38;5;45m", c("#00ff00"): "\033[38;5;46m", c("#00ff5f"): "\033[38;5;47m", - c("#00ff87"): "\033[38;5;48m", c("#00ffaf"): "\033[38;5;49m", c("#00ffd7"): "\033[38;5;50m", c("#00ffff"): "\033[38;5;51m", - c("#5f0000"): "\033[38;5;52m", c("#5f005f"): "\033[38;5;53m", c("#5f0087"): "\033[38;5;54m", c("#5f00af"): "\033[38;5;55m", - c("#5f00d7"): "\033[38;5;56m", c("#5f00ff"): "\033[38;5;57m", c("#5f5f00"): "\033[38;5;58m", c("#5f5f5f"): "\033[38;5;59m", - c("#5f5f87"): "\033[38;5;60m", c("#5f5faf"): "\033[38;5;61m", c("#5f5fd7"): "\033[38;5;62m", c("#5f5fff"): "\033[38;5;63m", - c("#5f8700"): "\033[38;5;64m", c("#5f875f"): "\033[38;5;65m", c("#5f8787"): "\033[38;5;66m", c("#5f87af"): "\033[38;5;67m", - c("#5f87d7"): "\033[38;5;68m", c("#5f87ff"): "\033[38;5;69m", c("#5faf00"): "\033[38;5;70m", c("#5faf5f"): "\033[38;5;71m", - c("#5faf87"): "\033[38;5;72m", c("#5fafaf"): "\033[38;5;73m", c("#5fafd7"): "\033[38;5;74m", c("#5fafff"): "\033[38;5;75m", - c("#5fd700"): "\033[38;5;76m", c("#5fd75f"): "\033[38;5;77m", c("#5fd787"): "\033[38;5;78m", c("#5fd7af"): "\033[38;5;79m", - c("#5fd7d7"): "\033[38;5;80m", c("#5fd7ff"): "\033[38;5;81m", c("#5fff00"): "\033[38;5;82m", c("#5fff5f"): "\033[38;5;83m", - c("#5fff87"): "\033[38;5;84m", c("#5fffaf"): "\033[38;5;85m", c("#5fffd7"): "\033[38;5;86m", c("#5fffff"): "\033[38;5;87m", - c("#870000"): "\033[38;5;88m", c("#87005f"): "\033[38;5;89m", c("#870087"): "\033[38;5;90m", c("#8700af"): "\033[38;5;91m", - c("#8700d7"): "\033[38;5;92m", c("#8700ff"): "\033[38;5;93m", c("#875f00"): "\033[38;5;94m", c("#875f5f"): "\033[38;5;95m", - c("#875f87"): "\033[38;5;96m", c("#875faf"): "\033[38;5;97m", c("#875fd7"): "\033[38;5;98m", c("#875fff"): "\033[38;5;99m", - c("#878700"): "\033[38;5;100m", c("#87875f"): "\033[38;5;101m", c("#878787"): "\033[38;5;102m", c("#8787af"): "\033[38;5;103m", - c("#8787d7"): "\033[38;5;104m", c("#8787ff"): "\033[38;5;105m", c("#87af00"): "\033[38;5;106m", c("#87af5f"): "\033[38;5;107m", - c("#87af87"): "\033[38;5;108m", c("#87afaf"): "\033[38;5;109m", c("#87afd7"): "\033[38;5;110m", c("#87afff"): "\033[38;5;111m", - c("#87d700"): "\033[38;5;112m", c("#87d75f"): "\033[38;5;113m", c("#87d787"): "\033[38;5;114m", c("#87d7af"): "\033[38;5;115m", - c("#87d7d7"): "\033[38;5;116m", c("#87d7ff"): "\033[38;5;117m", c("#87ff00"): "\033[38;5;118m", c("#87ff5f"): "\033[38;5;119m", - c("#87ff87"): "\033[38;5;120m", c("#87ffaf"): "\033[38;5;121m", c("#87ffd7"): "\033[38;5;122m", c("#87ffff"): "\033[38;5;123m", - c("#af0000"): "\033[38;5;124m", c("#af005f"): "\033[38;5;125m", c("#af0087"): "\033[38;5;126m", c("#af00af"): "\033[38;5;127m", - c("#af00d7"): "\033[38;5;128m", c("#af00ff"): "\033[38;5;129m", c("#af5f00"): "\033[38;5;130m", c("#af5f5f"): "\033[38;5;131m", - c("#af5f87"): "\033[38;5;132m", c("#af5faf"): "\033[38;5;133m", c("#af5fd7"): "\033[38;5;134m", c("#af5fff"): "\033[38;5;135m", - c("#af8700"): "\033[38;5;136m", c("#af875f"): "\033[38;5;137m", c("#af8787"): "\033[38;5;138m", c("#af87af"): "\033[38;5;139m", - c("#af87d7"): "\033[38;5;140m", c("#af87ff"): "\033[38;5;141m", c("#afaf00"): "\033[38;5;142m", c("#afaf5f"): "\033[38;5;143m", - c("#afaf87"): "\033[38;5;144m", c("#afafaf"): "\033[38;5;145m", c("#afafd7"): "\033[38;5;146m", c("#afafff"): "\033[38;5;147m", - c("#afd700"): "\033[38;5;148m", c("#afd75f"): "\033[38;5;149m", c("#afd787"): "\033[38;5;150m", c("#afd7af"): "\033[38;5;151m", - c("#afd7d7"): "\033[38;5;152m", c("#afd7ff"): "\033[38;5;153m", c("#afff00"): "\033[38;5;154m", c("#afff5f"): "\033[38;5;155m", - c("#afff87"): "\033[38;5;156m", c("#afffaf"): "\033[38;5;157m", c("#afffd7"): "\033[38;5;158m", c("#afffff"): "\033[38;5;159m", - c("#d70000"): "\033[38;5;160m", c("#d7005f"): "\033[38;5;161m", c("#d70087"): "\033[38;5;162m", c("#d700af"): "\033[38;5;163m", - c("#d700d7"): "\033[38;5;164m", c("#d700ff"): "\033[38;5;165m", c("#d75f00"): "\033[38;5;166m", c("#d75f5f"): "\033[38;5;167m", - c("#d75f87"): "\033[38;5;168m", c("#d75faf"): "\033[38;5;169m", c("#d75fd7"): "\033[38;5;170m", c("#d75fff"): "\033[38;5;171m", - c("#d78700"): "\033[38;5;172m", c("#d7875f"): "\033[38;5;173m", c("#d78787"): "\033[38;5;174m", c("#d787af"): "\033[38;5;175m", - c("#d787d7"): "\033[38;5;176m", c("#d787ff"): "\033[38;5;177m", c("#d7af00"): "\033[38;5;178m", c("#d7af5f"): "\033[38;5;179m", - c("#d7af87"): "\033[38;5;180m", c("#d7afaf"): "\033[38;5;181m", c("#d7afd7"): "\033[38;5;182m", c("#d7afff"): "\033[38;5;183m", - c("#d7d700"): "\033[38;5;184m", c("#d7d75f"): "\033[38;5;185m", c("#d7d787"): "\033[38;5;186m", c("#d7d7af"): "\033[38;5;187m", - c("#d7d7d7"): "\033[38;5;188m", c("#d7d7ff"): "\033[38;5;189m", c("#d7ff00"): "\033[38;5;190m", c("#d7ff5f"): "\033[38;5;191m", - c("#d7ff87"): "\033[38;5;192m", c("#d7ffaf"): "\033[38;5;193m", c("#d7ffd7"): "\033[38;5;194m", c("#d7ffff"): "\033[38;5;195m", - c("#ff0000"): "\033[38;5;196m", c("#ff005f"): "\033[38;5;197m", c("#ff0087"): "\033[38;5;198m", c("#ff00af"): "\033[38;5;199m", - c("#ff00d7"): "\033[38;5;200m", c("#ff00ff"): "\033[38;5;201m", c("#ff5f00"): "\033[38;5;202m", c("#ff5f5f"): "\033[38;5;203m", - c("#ff5f87"): "\033[38;5;204m", c("#ff5faf"): "\033[38;5;205m", c("#ff5fd7"): "\033[38;5;206m", c("#ff5fff"): "\033[38;5;207m", - c("#ff8700"): "\033[38;5;208m", c("#ff875f"): "\033[38;5;209m", c("#ff8787"): "\033[38;5;210m", c("#ff87af"): "\033[38;5;211m", - c("#ff87d7"): "\033[38;5;212m", c("#ff87ff"): "\033[38;5;213m", c("#ffaf00"): "\033[38;5;214m", c("#ffaf5f"): "\033[38;5;215m", - c("#ffaf87"): "\033[38;5;216m", c("#ffafaf"): "\033[38;5;217m", c("#ffafd7"): "\033[38;5;218m", c("#ffafff"): "\033[38;5;219m", - c("#ffd700"): "\033[38;5;220m", c("#ffd75f"): "\033[38;5;221m", c("#ffd787"): "\033[38;5;222m", c("#ffd7af"): "\033[38;5;223m", - c("#ffd7d7"): "\033[38;5;224m", c("#ffd7ff"): "\033[38;5;225m", c("#ffff00"): "\033[38;5;226m", c("#ffff5f"): "\033[38;5;227m", - c("#ffff87"): "\033[38;5;228m", c("#ffffaf"): "\033[38;5;229m", c("#ffffd7"): "\033[38;5;230m", c("#ffffff"): "\033[38;5;231m", - c("#080808"): "\033[38;5;232m", c("#121212"): "\033[38;5;233m", c("#1c1c1c"): "\033[38;5;234m", c("#262626"): "\033[38;5;235m", - c("#303030"): "\033[38;5;236m", c("#3a3a3a"): "\033[38;5;237m", c("#444444"): "\033[38;5;238m", c("#4e4e4e"): "\033[38;5;239m", - c("#585858"): "\033[38;5;240m", c("#626262"): "\033[38;5;241m", c("#6c6c6c"): "\033[38;5;242m", c("#767676"): "\033[38;5;243m", - c("#808080"): "\033[38;5;244m", c("#8a8a8a"): "\033[38;5;245m", c("#949494"): "\033[38;5;246m", c("#9e9e9e"): "\033[38;5;247m", - c("#a8a8a8"): "\033[38;5;248m", c("#b2b2b2"): "\033[38;5;249m", c("#bcbcbc"): "\033[38;5;250m", c("#c6c6c6"): "\033[38;5;251m", - c("#d0d0d0"): "\033[38;5;252m", c("#dadada"): "\033[38;5;253m", c("#e4e4e4"): "\033[38;5;254m", c("#eeeeee"): "\033[38;5;255m", - }, - background: map[chroma.Colour]string{ - c("#000000"): "\033[48;5;0m", c("#800000"): "\033[48;5;1m", c("#008000"): "\033[48;5;2m", c("#808000"): "\033[48;5;3m", - c("#000080"): "\033[48;5;4m", c("#800080"): "\033[48;5;5m", c("#008080"): "\033[48;5;6m", c("#c0c0c0"): "\033[48;5;7m", - c("#808080"): "\033[48;5;8m", c("#ff0000"): "\033[48;5;9m", c("#00ff00"): "\033[48;5;10m", c("#ffff00"): "\033[48;5;11m", - c("#0000ff"): "\033[48;5;12m", c("#ff00ff"): "\033[48;5;13m", c("#00ffff"): "\033[48;5;14m", c("#ffffff"): "\033[48;5;15m", - c("#000000"): "\033[48;5;16m", c("#00005f"): "\033[48;5;17m", c("#000087"): "\033[48;5;18m", c("#0000af"): "\033[48;5;19m", - c("#0000d7"): "\033[48;5;20m", c("#0000ff"): "\033[48;5;21m", c("#005f00"): "\033[48;5;22m", c("#005f5f"): "\033[48;5;23m", - c("#005f87"): "\033[48;5;24m", c("#005faf"): "\033[48;5;25m", c("#005fd7"): "\033[48;5;26m", c("#005fff"): "\033[48;5;27m", - c("#008700"): "\033[48;5;28m", c("#00875f"): "\033[48;5;29m", c("#008787"): "\033[48;5;30m", c("#0087af"): "\033[48;5;31m", - c("#0087d7"): "\033[48;5;32m", c("#0087ff"): "\033[48;5;33m", c("#00af00"): "\033[48;5;34m", c("#00af5f"): "\033[48;5;35m", - c("#00af87"): "\033[48;5;36m", c("#00afaf"): "\033[48;5;37m", c("#00afd7"): "\033[48;5;38m", c("#00afff"): "\033[48;5;39m", - c("#00d700"): "\033[48;5;40m", c("#00d75f"): "\033[48;5;41m", c("#00d787"): "\033[48;5;42m", c("#00d7af"): "\033[48;5;43m", - c("#00d7d7"): "\033[48;5;44m", c("#00d7ff"): "\033[48;5;45m", c("#00ff00"): "\033[48;5;46m", c("#00ff5f"): "\033[48;5;47m", - c("#00ff87"): "\033[48;5;48m", c("#00ffaf"): "\033[48;5;49m", c("#00ffd7"): "\033[48;5;50m", c("#00ffff"): "\033[48;5;51m", - c("#5f0000"): "\033[48;5;52m", c("#5f005f"): "\033[48;5;53m", c("#5f0087"): "\033[48;5;54m", c("#5f00af"): "\033[48;5;55m", - c("#5f00d7"): "\033[48;5;56m", c("#5f00ff"): "\033[48;5;57m", c("#5f5f00"): "\033[48;5;58m", c("#5f5f5f"): "\033[48;5;59m", - c("#5f5f87"): "\033[48;5;60m", c("#5f5faf"): "\033[48;5;61m", c("#5f5fd7"): "\033[48;5;62m", c("#5f5fff"): "\033[48;5;63m", - c("#5f8700"): "\033[48;5;64m", c("#5f875f"): "\033[48;5;65m", c("#5f8787"): "\033[48;5;66m", c("#5f87af"): "\033[48;5;67m", - c("#5f87d7"): "\033[48;5;68m", c("#5f87ff"): "\033[48;5;69m", c("#5faf00"): "\033[48;5;70m", c("#5faf5f"): "\033[48;5;71m", - c("#5faf87"): "\033[48;5;72m", c("#5fafaf"): "\033[48;5;73m", c("#5fafd7"): "\033[48;5;74m", c("#5fafff"): "\033[48;5;75m", - c("#5fd700"): "\033[48;5;76m", c("#5fd75f"): "\033[48;5;77m", c("#5fd787"): "\033[48;5;78m", c("#5fd7af"): "\033[48;5;79m", - c("#5fd7d7"): "\033[48;5;80m", c("#5fd7ff"): "\033[48;5;81m", c("#5fff00"): "\033[48;5;82m", c("#5fff5f"): "\033[48;5;83m", - c("#5fff87"): "\033[48;5;84m", c("#5fffaf"): "\033[48;5;85m", c("#5fffd7"): "\033[48;5;86m", c("#5fffff"): "\033[48;5;87m", - c("#870000"): "\033[48;5;88m", c("#87005f"): "\033[48;5;89m", c("#870087"): "\033[48;5;90m", c("#8700af"): "\033[48;5;91m", - c("#8700d7"): "\033[48;5;92m", c("#8700ff"): "\033[48;5;93m", c("#875f00"): "\033[48;5;94m", c("#875f5f"): "\033[48;5;95m", - c("#875f87"): "\033[48;5;96m", c("#875faf"): "\033[48;5;97m", c("#875fd7"): "\033[48;5;98m", c("#875fff"): "\033[48;5;99m", - c("#878700"): "\033[48;5;100m", c("#87875f"): "\033[48;5;101m", c("#878787"): "\033[48;5;102m", c("#8787af"): "\033[48;5;103m", - c("#8787d7"): "\033[48;5;104m", c("#8787ff"): "\033[48;5;105m", c("#87af00"): "\033[48;5;106m", c("#87af5f"): "\033[48;5;107m", - c("#87af87"): "\033[48;5;108m", c("#87afaf"): "\033[48;5;109m", c("#87afd7"): "\033[48;5;110m", c("#87afff"): "\033[48;5;111m", - c("#87d700"): "\033[48;5;112m", c("#87d75f"): "\033[48;5;113m", c("#87d787"): "\033[48;5;114m", c("#87d7af"): "\033[48;5;115m", - c("#87d7d7"): "\033[48;5;116m", c("#87d7ff"): "\033[48;5;117m", c("#87ff00"): "\033[48;5;118m", c("#87ff5f"): "\033[48;5;119m", - c("#87ff87"): "\033[48;5;120m", c("#87ffaf"): "\033[48;5;121m", c("#87ffd7"): "\033[48;5;122m", c("#87ffff"): "\033[48;5;123m", - c("#af0000"): "\033[48;5;124m", c("#af005f"): "\033[48;5;125m", c("#af0087"): "\033[48;5;126m", c("#af00af"): "\033[48;5;127m", - c("#af00d7"): "\033[48;5;128m", c("#af00ff"): "\033[48;5;129m", c("#af5f00"): "\033[48;5;130m", c("#af5f5f"): "\033[48;5;131m", - c("#af5f87"): "\033[48;5;132m", c("#af5faf"): "\033[48;5;133m", c("#af5fd7"): "\033[48;5;134m", c("#af5fff"): "\033[48;5;135m", - c("#af8700"): "\033[48;5;136m", c("#af875f"): "\033[48;5;137m", c("#af8787"): "\033[48;5;138m", c("#af87af"): "\033[48;5;139m", - c("#af87d7"): "\033[48;5;140m", c("#af87ff"): "\033[48;5;141m", c("#afaf00"): "\033[48;5;142m", c("#afaf5f"): "\033[48;5;143m", - c("#afaf87"): "\033[48;5;144m", c("#afafaf"): "\033[48;5;145m", c("#afafd7"): "\033[48;5;146m", c("#afafff"): "\033[48;5;147m", - c("#afd700"): "\033[48;5;148m", c("#afd75f"): "\033[48;5;149m", c("#afd787"): "\033[48;5;150m", c("#afd7af"): "\033[48;5;151m", - c("#afd7d7"): "\033[48;5;152m", c("#afd7ff"): "\033[48;5;153m", c("#afff00"): "\033[48;5;154m", c("#afff5f"): "\033[48;5;155m", - c("#afff87"): "\033[48;5;156m", c("#afffaf"): "\033[48;5;157m", c("#afffd7"): "\033[48;5;158m", c("#afffff"): "\033[48;5;159m", - c("#d70000"): "\033[48;5;160m", c("#d7005f"): "\033[48;5;161m", c("#d70087"): "\033[48;5;162m", c("#d700af"): "\033[48;5;163m", - c("#d700d7"): "\033[48;5;164m", c("#d700ff"): "\033[48;5;165m", c("#d75f00"): "\033[48;5;166m", c("#d75f5f"): "\033[48;5;167m", - c("#d75f87"): "\033[48;5;168m", c("#d75faf"): "\033[48;5;169m", c("#d75fd7"): "\033[48;5;170m", c("#d75fff"): "\033[48;5;171m", - c("#d78700"): "\033[48;5;172m", c("#d7875f"): "\033[48;5;173m", c("#d78787"): "\033[48;5;174m", c("#d787af"): "\033[48;5;175m", - c("#d787d7"): "\033[48;5;176m", c("#d787ff"): "\033[48;5;177m", c("#d7af00"): "\033[48;5;178m", c("#d7af5f"): "\033[48;5;179m", - c("#d7af87"): "\033[48;5;180m", c("#d7afaf"): "\033[48;5;181m", c("#d7afd7"): "\033[48;5;182m", c("#d7afff"): "\033[48;5;183m", - c("#d7d700"): "\033[48;5;184m", c("#d7d75f"): "\033[48;5;185m", c("#d7d787"): "\033[48;5;186m", c("#d7d7af"): "\033[48;5;187m", - c("#d7d7d7"): "\033[48;5;188m", c("#d7d7ff"): "\033[48;5;189m", c("#d7ff00"): "\033[48;5;190m", c("#d7ff5f"): "\033[48;5;191m", - c("#d7ff87"): "\033[48;5;192m", c("#d7ffaf"): "\033[48;5;193m", c("#d7ffd7"): "\033[48;5;194m", c("#d7ffff"): "\033[48;5;195m", - c("#ff0000"): "\033[48;5;196m", c("#ff005f"): "\033[48;5;197m", c("#ff0087"): "\033[48;5;198m", c("#ff00af"): "\033[48;5;199m", - c("#ff00d7"): "\033[48;5;200m", c("#ff00ff"): "\033[48;5;201m", c("#ff5f00"): "\033[48;5;202m", c("#ff5f5f"): "\033[48;5;203m", - c("#ff5f87"): "\033[48;5;204m", c("#ff5faf"): "\033[48;5;205m", c("#ff5fd7"): "\033[48;5;206m", c("#ff5fff"): "\033[48;5;207m", - c("#ff8700"): "\033[48;5;208m", c("#ff875f"): "\033[48;5;209m", c("#ff8787"): "\033[48;5;210m", c("#ff87af"): "\033[48;5;211m", - c("#ff87d7"): "\033[48;5;212m", c("#ff87ff"): "\033[48;5;213m", c("#ffaf00"): "\033[48;5;214m", c("#ffaf5f"): "\033[48;5;215m", - c("#ffaf87"): "\033[48;5;216m", c("#ffafaf"): "\033[48;5;217m", c("#ffafd7"): "\033[48;5;218m", c("#ffafff"): "\033[48;5;219m", - c("#ffd700"): "\033[48;5;220m", c("#ffd75f"): "\033[48;5;221m", c("#ffd787"): "\033[48;5;222m", c("#ffd7af"): "\033[48;5;223m", - c("#ffd7d7"): "\033[48;5;224m", c("#ffd7ff"): "\033[48;5;225m", c("#ffff00"): "\033[48;5;226m", c("#ffff5f"): "\033[48;5;227m", - c("#ffff87"): "\033[48;5;228m", c("#ffffaf"): "\033[48;5;229m", c("#ffffd7"): "\033[48;5;230m", c("#ffffff"): "\033[48;5;231m", - c("#080808"): "\033[48;5;232m", c("#121212"): "\033[48;5;233m", c("#1c1c1c"): "\033[48;5;234m", c("#262626"): "\033[48;5;235m", - c("#303030"): "\033[48;5;236m", c("#3a3a3a"): "\033[48;5;237m", c("#444444"): "\033[48;5;238m", c("#4e4e4e"): "\033[48;5;239m", - c("#585858"): "\033[48;5;240m", c("#626262"): "\033[48;5;241m", c("#6c6c6c"): "\033[48;5;242m", c("#767676"): "\033[48;5;243m", - c("#808080"): "\033[48;5;244m", c("#8a8a8a"): "\033[48;5;245m", c("#949494"): "\033[48;5;246m", c("#9e9e9e"): "\033[48;5;247m", - c("#a8a8a8"): "\033[48;5;248m", c("#b2b2b2"): "\033[48;5;249m", c("#bcbcbc"): "\033[48;5;250m", c("#c6c6c6"): "\033[48;5;251m", - c("#d0d0d0"): "\033[48;5;252m", c("#dadada"): "\033[48;5;253m", c("#e4e4e4"): "\033[48;5;254m", c("#eeeeee"): "\033[48;5;255m", - }, - }, -} - -func entryToEscapeSequence(table *ttyTable, entry chroma.StyleEntry) string { - out := "" - if entry.Bold == chroma.Yes { - out += "\033[1m" - } - if entry.Underline == chroma.Yes { - out += "\033[4m" - } - if entry.Italic == chroma.Yes { - out += "\033[3m" - } - if entry.Colour.IsSet() { - out += table.foreground[findClosest(table, entry.Colour)] - } - if entry.Background.IsSet() { - out += table.background[findClosest(table, entry.Background)] - } - return out -} - -func findClosest(table *ttyTable, seeking chroma.Colour) chroma.Colour { - closestColour := chroma.Colour(0) - closest := float64(math.MaxFloat64) - for colour := range table.foreground { - distance := colour.Distance(seeking) - if distance < closest { - closest = distance - closestColour = colour - } - } - return closestColour -} - -func styleToEscapeSequence(table *ttyTable, style *chroma.Style) map[chroma.TokenType]string { - style = clearBackground(style) - out := map[chroma.TokenType]string{} - for _, ttype := range style.Types() { - entry := style.Get(ttype) - out[ttype] = entryToEscapeSequence(table, entry) - } - return out -} - -// Clear the background colour. -func clearBackground(style *chroma.Style) *chroma.Style { - builder := style.Builder() - bg := builder.Get(chroma.Background) - bg.Background = 0 - bg.NoInherit = true - builder.AddEntry(chroma.Background, bg) - style, _ = builder.Build() - return style -} - -type indexedTTYFormatter struct { - table *ttyTable -} - -func (c *indexedTTYFormatter) Format(w io.Writer, style *chroma.Style, it chroma.Iterator) (err error) { - theme := styleToEscapeSequence(c.table, style) - for token := it(); token != chroma.EOF; token = it() { - // TODO: Cache token lookups? - clr, ok := theme[token.Type] - if !ok { - clr, ok = theme[token.Type.SubCategory()] - if !ok { - clr = theme[token.Type.Category()] - // if !ok { - // clr = theme[chroma.InheritStyle] - // } - } - } - if clr != "" { - fmt.Fprint(w, clr) - } - fmt.Fprint(w, token.Value) - if clr != "" { - fmt.Fprintf(w, "\033[0m") - } - } - return nil -} - -// TTY8 is an 8-colour terminal formatter. -// -// The Lab colour space is used to map RGB values to the most appropriate index colour. -var TTY8 = Register("terminal", &indexedTTYFormatter{ttyTables[8]}) - -// TTY256 is a 256-colour terminal formatter. -// -// The Lab colour space is used to map RGB values to the most appropriate index colour. -var TTY256 = Register("terminal256", &indexedTTYFormatter{ttyTables[256]}) diff --git a/vendor/github.com/alecthomas/chroma/formatters/tty_truecolour.go b/vendor/github.com/alecthomas/chroma/formatters/tty_truecolour.go deleted file mode 100644 index b02e636..0000000 --- a/vendor/github.com/alecthomas/chroma/formatters/tty_truecolour.go +++ /dev/null @@ -1,42 +0,0 @@ -package formatters - -import ( - "fmt" - "io" - - "github.com/alecthomas/chroma" -) - -// TTY16m is a true-colour terminal formatter. -var TTY16m = Register("terminal16m", chroma.FormatterFunc(trueColourFormatter)) - -func trueColourFormatter(w io.Writer, style *chroma.Style, it chroma.Iterator) error { - style = clearBackground(style) - for token := it(); token != chroma.EOF; token = it() { - entry := style.Get(token.Type) - if !entry.IsZero() { - out := "" - if entry.Bold == chroma.Yes { - out += "\033[1m" - } - if entry.Underline == chroma.Yes { - out += "\033[4m" - } - if entry.Italic == chroma.Yes { - out += "\033[3m" - } - if entry.Colour.IsSet() { - out += fmt.Sprintf("\033[38;2;%d;%d;%dm", entry.Colour.Red(), entry.Colour.Green(), entry.Colour.Blue()) - } - if entry.Background.IsSet() { - out += fmt.Sprintf("\033[48;2;%d;%d;%dm", entry.Background.Red(), entry.Background.Green(), entry.Background.Blue()) - } - fmt.Fprint(w, out) - } - fmt.Fprint(w, token.Value) - if !entry.IsZero() { - fmt.Fprint(w, "\033[0m") - } - } - return nil -} diff --git a/vendor/github.com/alecthomas/chroma/go.mod b/vendor/github.com/alecthomas/chroma/go.mod deleted file mode 100644 index 307b4ff..0000000 --- a/vendor/github.com/alecthomas/chroma/go.mod +++ /dev/null @@ -1,17 +0,0 @@ -module github.com/alecthomas/chroma - -go 1.13 - -require ( - github.com/alecthomas/assert v0.0.0-20170929043011-405dbfeb8e38 - github.com/alecthomas/colour v0.0.0-20160524082231-60882d9e2721 // indirect - github.com/alecthomas/kong v0.2.1-0.20190708041108-0548c6b1afae - github.com/alecthomas/repr v0.0.0-20180818092828-117648cd9897 // indirect - github.com/danwakefield/fnmatch v0.0.0-20160403171240-cbb64ac3d964 - github.com/dlclark/regexp2 v1.1.6 - github.com/mattn/go-colorable v0.0.9 - github.com/mattn/go-isatty v0.0.4 - github.com/sergi/go-diff v1.0.0 // indirect - github.com/stretchr/testify v1.3.0 // indirect - golang.org/x/sys v0.0.0-20181128092732-4ed8d59d0b35 // indirect -) diff --git a/vendor/github.com/alecthomas/chroma/go.sum b/vendor/github.com/alecthomas/chroma/go.sum deleted file mode 100644 index 82643a3..0000000 --- a/vendor/github.com/alecthomas/chroma/go.sum +++ /dev/null @@ -1,33 +0,0 @@ -github.com/alecthomas/assert v0.0.0-20170929043011-405dbfeb8e38 h1:smF2tmSOzy2Mm+0dGI2AIUHY+w0BUc+4tn40djz7+6U= -github.com/alecthomas/assert v0.0.0-20170929043011-405dbfeb8e38/go.mod h1:r7bzyVFMNntcxPZXK3/+KdruV1H5KSlyVY0gc+NgInI= -github.com/alecthomas/colour v0.0.0-20160524082231-60882d9e2721 h1:JHZL0hZKJ1VENNfmXvHbgYlbUOvpzYzvy2aZU5gXVeo= -github.com/alecthomas/colour v0.0.0-20160524082231-60882d9e2721/go.mod h1:QO9JBoKquHd+jz9nshCh40fOfO+JzsoXy8qTHF68zU0= -github.com/alecthomas/kong v0.2.1-0.20190708041108-0548c6b1afae h1:C4Q9m+oXOxcSWwYk9XzzafY2xAVAaeubZbUHJkw3PlY= -github.com/alecthomas/kong v0.2.1-0.20190708041108-0548c6b1afae/go.mod h1:+inYUSluD+p4L8KdviBSgzcqEjUQOfC5fQDRFuc36lI= -github.com/alecthomas/repr v0.0.0-20180818092828-117648cd9897 h1:p9Sln00KOTlrYkxI1zYWl1QLnEqAqEARBEYa8FQnQcY= -github.com/alecthomas/repr v0.0.0-20180818092828-117648cd9897/go.mod h1:xTS7Pm1pD1mvyM075QCDSRqH6qRLXylzS24ZTpRiSzQ= -github.com/danwakefield/fnmatch v0.0.0-20160403171240-cbb64ac3d964 h1:y5HC9v93H5EPKqaS1UYVg1uYah5Xf51mBfIoWehClUQ= -github.com/danwakefield/fnmatch v0.0.0-20160403171240-cbb64ac3d964/go.mod h1:Xd9hchkHSWYkEqJwUGisez3G1QY8Ryz0sdWrLPMGjLk= -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/dlclark/regexp2 v1.1.6 h1:CqB4MjHw0MFCDj+PHHjiESmHX+N7t0tJzKvC6M97BRg= -github.com/dlclark/regexp2 v1.1.6/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= -github.com/mattn/go-colorable v0.0.9 h1:UVL0vNpWh04HeJXV0KLcaT7r06gOH2l4OW6ddYRUIY4= -github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-isatty v0.0.4 h1:bnP0vzxcAdeI1zdubAl5PjU6zsERjGZb7raWodagDYs= -github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= -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/sergi/go-diff v1.0.0 h1:Kpca3qRNrduNnOQeazBd0ysaKrUJiIuISHxogkT9RPQ= -github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -golang.org/x/sys v0.0.0-20181128092732-4ed8d59d0b35 h1:YAFjXN64LMvktoUZH9zgY4lGc/msGN7HQfoSuKCgaDU= -golang.org/x/sys v0.0.0-20181128092732-4ed8d59d0b35/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= diff --git a/vendor/github.com/alecthomas/chroma/iterator.go b/vendor/github.com/alecthomas/chroma/iterator.go deleted file mode 100644 index c8845a1..0000000 --- a/vendor/github.com/alecthomas/chroma/iterator.go +++ /dev/null @@ -1,76 +0,0 @@ -package chroma - -import "strings" - -// An Iterator across tokens. -// -// nil will be returned at the end of the Token stream. -// -// If an error occurs within an Iterator, it may propagate this in a panic. Formatters should recover. -type Iterator func() Token - -// Tokens consumes all tokens from the iterator and returns them as a slice. -func (i Iterator) Tokens() []Token { - var out []Token - for t := i(); t != EOF; t = i() { - out = append(out, t) - } - return out -} - -// Concaterator concatenates tokens from a series of iterators. -func Concaterator(iterators ...Iterator) Iterator { - return func() Token { - for len(iterators) > 0 { - t := iterators[0]() - if t != EOF { - return t - } - iterators = iterators[1:] - } - return EOF - } -} - -// Literator converts a sequence of literal Tokens into an Iterator. -func Literator(tokens ...Token) Iterator { - return func() Token { - if len(tokens) == 0 { - return EOF - } - token := tokens[0] - tokens = tokens[1:] - return token - } -} - -// SplitTokensIntoLines splits tokens containing newlines in two. -func SplitTokensIntoLines(tokens []Token) (out [][]Token) { - var line []Token // nolint: prealloc - for _, token := range tokens { - for strings.Contains(token.Value, "\n") { - parts := strings.SplitAfterN(token.Value, "\n", 2) - // Token becomes the tail. - token.Value = parts[1] - - // Append the head to the line and flush the line. - clone := token.Clone() - clone.Value = parts[0] - line = append(line, clone) - out = append(out, line) - line = nil - } - line = append(line, token) - } - if len(line) > 0 { - out = append(out, line) - } - // Strip empty trailing token line. - if len(out) > 0 { - last := out[len(out)-1] - if len(last) == 1 && last[0].Value == "" { - out = out[:len(out)-1] - } - } - return -} diff --git a/vendor/github.com/alecthomas/chroma/lexer.go b/vendor/github.com/alecthomas/chroma/lexer.go deleted file mode 100644 index a6ae84b..0000000 --- a/vendor/github.com/alecthomas/chroma/lexer.go +++ /dev/null @@ -1,120 +0,0 @@ -package chroma - -import ( - "fmt" -) - -var ( - defaultOptions = &TokeniseOptions{ - State: "root", - } -) - -// Config for a lexer. -type Config struct { - // Name of the lexer. - Name string - - // Shortcuts for the lexer - Aliases []string - - // File name globs - Filenames []string - - // Secondary file name globs - AliasFilenames []string - - // MIME types - MimeTypes []string - - // Regex matching is case-insensitive. - CaseInsensitive bool - - // Regex matches all characters. - DotAll bool - - // Regex does not match across lines ($ matches EOL). - // - // Defaults to multiline. - NotMultiline bool - - // Don't strip leading and trailing newlines from the input. - // DontStripNL bool - - // Strip all leading and trailing whitespace from the input - // StripAll bool - - // Make sure that the input ends with a newline. This - // is required for some lexers that consume input linewise. - EnsureNL bool - - // If given and greater than 0, expand tabs in the input. - // TabSize int - - // Priority of lexer. - // - // If this is 0 it will be treated as a default of 1. - Priority float32 -} - -// Token output to formatter. -type Token struct { - Type TokenType `json:"type"` - Value string `json:"value"` -} - -func (t *Token) String() string { return t.Value } -func (t *Token) GoString() string { return fmt.Sprintf("&Token{%s, %q}", t.Type, t.Value) } - -// Clone returns a clone of the Token. -func (t *Token) Clone() Token { - return *t -} - -// EOF is returned by lexers at the end of input. -var EOF Token - -// TokeniseOptions contains options for tokenisers. -type TokeniseOptions struct { - // State to start tokenisation in. Defaults to "root". - State string - // Nested tokenisation. - Nested bool -} - -// A Lexer for tokenising source code. -type Lexer interface { - // Config describing the features of the Lexer. - Config() *Config - // Tokenise returns an Iterator over tokens in text. - Tokenise(options *TokeniseOptions, text string) (Iterator, error) -} - -// Lexers is a slice of lexers sortable by name. -type Lexers []Lexer - -func (l Lexers) Len() int { return len(l) } -func (l Lexers) Swap(i, j int) { l[i], l[j] = l[j], l[i] } -func (l Lexers) Less(i, j int) bool { return l[i].Config().Name < l[j].Config().Name } - -// PrioritisedLexers is a slice of lexers sortable by priority. -type PrioritisedLexers []Lexer - -func (l PrioritisedLexers) Len() int { return len(l) } -func (l PrioritisedLexers) Swap(i, j int) { l[i], l[j] = l[j], l[i] } -func (l PrioritisedLexers) Less(i, j int) bool { - ip := l[i].Config().Priority - if ip == 0 { - ip = 1 - } - jp := l[j].Config().Priority - if jp == 0 { - jp = 1 - } - return ip > jp -} - -// Analyser determines how appropriate this lexer is for the given text. -type Analyser interface { - AnalyseText(text string) float32 -} diff --git a/vendor/github.com/alecthomas/chroma/lexers/README.md b/vendor/github.com/alecthomas/chroma/lexers/README.md deleted file mode 100644 index 2421710..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/README.md +++ /dev/null @@ -1,37 +0,0 @@ -# Lexer tests - -The tests in this directory feed a known input `testdata/.actual` into the parser for `` and check -that its output matches `.exported`. - -## Running the tests - -Run the tests as normal: -```go -go test ./lexers -``` - -## Update existing tests -When you add a new test data file (`*.actual`), you need to regenerate all tests. That's how Chroma creates the `*.expected` test file based on the corresponding lexer. - -To regenerate all tests, type in your terminal: - -```go -RECORD=true go test ./lexers -``` - -This first sets the `RECORD` environment variable to `true`. Then it runs `go test` on the `./lexers` directory of the Chroma project. - -(That environment variable tells Chroma it needs to output test data. After running `go test ./lexers` you can remove or reset that variable.) - -### Windows users -Windows users will find that the `RECORD=true go test ./lexers` command fails in both the standard command prompt terminal and in PowerShell. - -Instead we have to perform both steps separately: - -- Set the `RECORD` environment variable to `true`. - + In the regular command prompt window, the `set` command sets an environment variable for the current session: `set RECORD=true`. See [this page](https://superuser.com/questions/212150/how-to-set-env-variable-in-windows-cmd-line) for more. - + In PowerShell, you can use the `$env:RECORD = 'true'` command for that. See [this article](https://mcpmag.com/articles/2019/03/28/environment-variables-in-powershell.aspx) for more. - + You can also make a persistent environment variable by hand in the Windows computer settings. See [this article](https://www.computerhope.com/issues/ch000549.htm) for how. -- When the environment variable is set, run `go tests ./lexers`. - -Chroma will now regenerate the test files and print its results to the console window. diff --git a/vendor/github.com/alecthomas/chroma/lexers/a/abap.go b/vendor/github.com/alecthomas/chroma/lexers/a/abap.go deleted file mode 100644 index 61c294e..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/a/abap.go +++ /dev/null @@ -1,56 +0,0 @@ -package a - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// ABAP lexer. -var Abap = internal.Register(MustNewLexer( - &Config{ - Name: "ABAP", - Aliases: []string{"abap"}, - Filenames: []string{"*.abap", "*.ABAP"}, - MimeTypes: []string{"text/x-abap"}, - CaseInsensitive: true, - }, - Rules{ - "common": { - {`\s+`, Text, nil}, - {`^\*.*$`, CommentSingle, nil}, - {`\".*?\n`, CommentSingle, nil}, - {`##\w+`, CommentSpecial, nil}, - }, - "variable-names": { - {`<\S+>`, NameVariable, nil}, - {`\w[\w~]*(?:(\[\])|->\*)?`, NameVariable, nil}, - }, - "root": { - Include("common"), - {`CALL\s+(?:BADI|CUSTOMER-FUNCTION|FUNCTION)`, Keyword, nil}, - {`(CALL\s+(?:DIALOG|SCREEN|SUBSCREEN|SELECTION-SCREEN|TRANSACTION|TRANSFORMATION))\b`, Keyword, nil}, - {`(FORM|PERFORM)(\s+)(\w+)`, ByGroups(Keyword, Text, NameFunction), nil}, - {`(PERFORM)(\s+)(\()(\w+)(\))`, ByGroups(Keyword, Text, Punctuation, NameVariable, Punctuation), nil}, - {`(MODULE)(\s+)(\S+)(\s+)(INPUT|OUTPUT)`, ByGroups(Keyword, Text, NameFunction, Text, Keyword), nil}, - {`(METHOD)(\s+)([\w~]+)`, ByGroups(Keyword, Text, NameFunction), nil}, - {`(\s+)([\w\-]+)([=\-]>)([\w\-~]+)`, ByGroups(Text, NameVariable, Operator, NameFunction), nil}, - {`(?<=(=|-)>)([\w\-~]+)(?=\()`, NameFunction, nil}, - {`(TEXT)(-)(\d{3})`, ByGroups(Keyword, Punctuation, LiteralNumberInteger), nil}, - {`(TEXT)(-)(\w{3})`, ByGroups(Keyword, Punctuation, NameVariable), nil}, - {`(ADD-CORRESPONDING|AUTHORITY-CHECK|CLASS-DATA|CLASS-EVENTS|CLASS-METHODS|CLASS-POOL|DELETE-ADJACENT|DIVIDE-CORRESPONDING|EDITOR-CALL|ENHANCEMENT-POINT|ENHANCEMENT-SECTION|EXIT-COMMAND|FIELD-GROUPS|FIELD-SYMBOLS|FUNCTION-POOL|INTERFACE-POOL|INVERTED-DATE|LOAD-OF-PROGRAM|LOG-POINT|MESSAGE-ID|MOVE-CORRESPONDING|MULTIPLY-CORRESPONDING|NEW-LINE|NEW-PAGE|NEW-SECTION|NO-EXTENSION|OUTPUT-LENGTH|PRINT-CONTROL|SELECT-OPTIONS|START-OF-SELECTION|SUBTRACT-CORRESPONDING|SYNTAX-CHECK|SYSTEM-EXCEPTIONS|TYPE-POOL|TYPE-POOLS|NO-DISPLAY)\b`, Keyword, nil}, - {`(?])(CREATE\s+(PUBLIC|PRIVATE|DATA|OBJECT)|(PUBLIC|PRIVATE|PROTECTED)\s+SECTION|(TYPE|LIKE)\s+((LINE\s+OF|REF\s+TO|(SORTED|STANDARD|HASHED)\s+TABLE\s+OF))?|FROM\s+(DATABASE|MEMORY)|CALL\s+METHOD|(GROUP|ORDER) BY|HAVING|SEPARATED BY|GET\s+(BADI|BIT|CURSOR|DATASET|LOCALE|PARAMETER|PF-STATUS|(PROPERTY|REFERENCE)\s+OF|RUN\s+TIME|TIME\s+(STAMP)?)?|SET\s+(BIT|BLANK\s+LINES|COUNTRY|CURSOR|DATASET|EXTENDED\s+CHECK|HANDLER|HOLD\s+DATA|LANGUAGE|LEFT\s+SCROLL-BOUNDARY|LOCALE|MARGIN|PARAMETER|PF-STATUS|PROPERTY\s+OF|RUN\s+TIME\s+(ANALYZER|CLOCK\s+RESOLUTION)|SCREEN|TITLEBAR|UPADTE\s+TASK\s+LOCAL|USER-COMMAND)|CONVERT\s+((INVERTED-)?DATE|TIME|TIME\s+STAMP|TEXT)|(CLOSE|OPEN)\s+(DATASET|CURSOR)|(TO|FROM)\s+(DATA BUFFER|INTERNAL TABLE|MEMORY ID|DATABASE|SHARED\s+(MEMORY|BUFFER))|DESCRIBE\s+(DISTANCE\s+BETWEEN|FIELD|LIST|TABLE)|FREE\s(MEMORY|OBJECT)?|PROCESS\s+(BEFORE\s+OUTPUT|AFTER\s+INPUT|ON\s+(VALUE-REQUEST|HELP-REQUEST))|AT\s+(LINE-SELECTION|USER-COMMAND|END\s+OF|NEW)|AT\s+SELECTION-SCREEN(\s+(ON(\s+(BLOCK|(HELP|VALUE)-REQUEST\s+FOR|END\s+OF|RADIOBUTTON\s+GROUP))?|OUTPUT))?|SELECTION-SCREEN:?\s+((BEGIN|END)\s+OF\s+((TABBED\s+)?BLOCK|LINE|SCREEN)|COMMENT|FUNCTION\s+KEY|INCLUDE\s+BLOCKS|POSITION|PUSHBUTTON|SKIP|ULINE)|LEAVE\s+(LIST-PROCESSING|PROGRAM|SCREEN|TO LIST-PROCESSING|TO TRANSACTION)(ENDING|STARTING)\s+AT|FORMAT\s+(COLOR|INTENSIFIED|INVERSE|HOTSPOT|INPUT|FRAMES|RESET)|AS\s+(CHECKBOX|SUBSCREEN|WINDOW)|WITH\s+(((NON-)?UNIQUE)?\s+KEY|FRAME)|(BEGIN|END)\s+OF|DELETE(\s+ADJACENT\s+DUPLICATES\sFROM)?|COMPARING(\s+ALL\s+FIELDS)?|(INSERT|APPEND)(\s+INITIAL\s+LINE\s+(IN)?TO|\s+LINES\s+OF)?|IN\s+((BYTE|CHARACTER)\s+MODE|PROGRAM)|END-OF-(DEFINITION|PAGE|SELECTION)|WITH\s+FRAME(\s+TITLE)|(REPLACE|FIND)\s+((FIRST|ALL)\s+OCCURRENCES?\s+OF\s+)?(SUBSTRING|REGEX)?|MATCH\s+(LENGTH|COUNT|LINE|OFFSET)|(RESPECTING|IGNORING)\s+CASE|IN\s+UPDATE\s+TASK|(SOURCE|RESULT)\s+(XML)?|REFERENCE\s+INTO|AND\s+(MARK|RETURN)|CLIENT\s+SPECIFIED|CORRESPONDING\s+FIELDS\s+OF|IF\s+FOUND|FOR\s+EVENT|INHERITING\s+FROM|LEAVE\s+TO\s+SCREEN|LOOP\s+AT\s+(SCREEN)?|LOWER\s+CASE|MATCHCODE\s+OBJECT|MODIF\s+ID|MODIFY\s+SCREEN|NESTING\s+LEVEL|NO\s+INTERVALS|OF\s+STRUCTURE|RADIOBUTTON\s+GROUP|RANGE\s+OF|REF\s+TO|SUPPRESS DIALOG|TABLE\s+OF|UPPER\s+CASE|TRANSPORTING\s+NO\s+FIELDS|VALUE\s+CHECK|VISIBLE\s+LENGTH|HEADER\s+LINE|COMMON\s+PART)\b`, Keyword, nil}, - {`(^|(?<=(\s|\.)))(ABBREVIATED|ABSTRACT|ADD|ALIASES|ALIGN|ALPHA|ASSERT|AS|ASSIGN(ING)?|AT(\s+FIRST)?|BACK|BLOCK|BREAK-POINT|CASE|CATCH|CHANGING|CHECK|CLASS|CLEAR|COLLECT|COLOR|COMMIT|CREATE|COMMUNICATION|COMPONENTS?|COMPUTE|CONCATENATE|CONDENSE|CONSTANTS|CONTEXTS|CONTINUE|CONTROLS|COUNTRY|CURRENCY|DATA|DATE|DECIMALS|DEFAULT|DEFINE|DEFINITION|DEFERRED|DEMAND|DETAIL|DIRECTORY|DIVIDE|DO|DUMMY|ELSE(IF)?|ENDAT|ENDCASE|ENDCATCH|ENDCLASS|ENDDO|ENDFORM|ENDFUNCTION|ENDIF|ENDINTERFACE|ENDLOOP|ENDMETHOD|ENDMODULE|ENDSELECT|ENDTRY|ENDWHILE|ENHANCEMENT|EVENTS|EXACT|EXCEPTIONS?|EXIT|EXPONENT|EXPORT|EXPORTING|EXTRACT|FETCH|FIELDS?|FOR|FORM|FORMAT|FREE|FROM|FUNCTION|HIDE|ID|IF|IMPORT|IMPLEMENTATION|IMPORTING|IN|INCLUDE|INCLUDING|INDEX|INFOTYPES|INITIALIZATION|INTERFACE|INTERFACES|INTO|LANGUAGE|LEAVE|LENGTH|LINES|LOAD|LOCAL|JOIN|KEY|NEXT|MAXIMUM|MESSAGE|METHOD[S]?|MINIMUM|MODULE|MODIFIER|MODIFY|MOVE|MULTIPLY|NODES|NUMBER|OBLIGATORY|OBJECT|OF|OFF|ON|OTHERS|OVERLAY|PACK|PAD|PARAMETERS|PERCENTAGE|POSITION|PROGRAM|PROVIDE|PUBLIC|PUT|PF\d\d|RAISE|RAISING|RANGES?|READ|RECEIVE|REDEFINITION|REFRESH|REJECT|REPORT|RESERVE|RESUME|RETRY|RETURN|RETURNING|RIGHT|ROLLBACK|REPLACE|SCROLL|SEARCH|SELECT|SHIFT|SIGN|SINGLE|SIZE|SKIP|SORT|SPLIT|STATICS|STOP|STYLE|SUBMATCHES|SUBMIT|SUBTRACT|SUM(?!\()|SUMMARY|SUMMING|SUPPLY|TABLE|TABLES|TIMESTAMP|TIMES?|TIMEZONE|TITLE|\??TO|TOP-OF-PAGE|TRANSFER|TRANSLATE|TRY|TYPES|ULINE|UNDER|UNPACK|UPDATE|USING|VALUE|VALUES|VIA|VARYING|VARY|WAIT|WHEN|WHERE|WIDTH|WHILE|WITH|WINDOW|WRITE|XSD|ZERO)\b`, Keyword, nil}, - {`(abs|acos|asin|atan|boolc|boolx|bit_set|char_off|charlen|ceil|cmax|cmin|condense|contains|contains_any_of|contains_any_not_of|concat_lines_of|cos|cosh|count|count_any_of|count_any_not_of|dbmaxlen|distance|escape|exp|find|find_end|find_any_of|find_any_not_of|floor|frac|from_mixed|insert|lines|log|log10|match|matches|nmax|nmin|numofchar|repeat|replace|rescale|reverse|round|segment|shift_left|shift_right|sign|sin|sinh|sqrt|strlen|substring|substring_after|substring_from|substring_before|substring_to|tan|tanh|to_upper|to_lower|to_mixed|translate|trunc|xstrlen)(\()\b`, ByGroups(NameBuiltin, Punctuation), nil}, - {`&[0-9]`, Name, nil}, - {`[0-9]+`, LiteralNumberInteger, nil}, - {`(?<=(\s|.))(AND|OR|EQ|NE|GT|LT|GE|LE|CO|CN|CA|NA|CS|NOT|NS|CP|NP|BYTE-CO|BYTE-CN|BYTE-CA|BYTE-NA|BYTE-CS|BYTE-NS|IS\s+(NOT\s+)?(INITIAL|ASSIGNED|REQUESTED|BOUND))\b`, OperatorWord, nil}, - Include("variable-names"), - {`[?*<>=\-+&]`, Operator, nil}, - {`'(''|[^'])*'`, LiteralStringSingle, nil}, - {"`([^`])*`", LiteralStringSingle, nil}, - {`([|}])([^{}|]*?)([|{])`, ByGroups(Punctuation, LiteralStringSingle, Punctuation), nil}, - {`[/;:()\[\],.]`, Punctuation, nil}, - {`(!)(\w+)`, ByGroups(Operator, Name), nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/a/abnf.go b/vendor/github.com/alecthomas/chroma/lexers/a/abnf.go deleted file mode 100644 index ff29aed..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/a/abnf.go +++ /dev/null @@ -1,38 +0,0 @@ -package a - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Abnf lexer. -var Abnf = internal.Register(MustNewLexer( - &Config{ - Name: "ABNF", - Aliases: []string{"abnf"}, - Filenames: []string{"*.abnf"}, - MimeTypes: []string{"text/x-abnf"}, - }, - Rules{ - "root": { - {`;.*$`, CommentSingle, nil}, - {`(%[si])?"[^"]*"`, Literal, nil}, - {`%b[01]+\-[01]+\b`, Literal, nil}, - {`%b[01]+(\.[01]+)*\b`, Literal, nil}, - {`%d[0-9]+\-[0-9]+\b`, Literal, nil}, - {`%d[0-9]+(\.[0-9]+)*\b`, Literal, nil}, - {`%x[0-9a-fA-F]+\-[0-9a-fA-F]+\b`, Literal, nil}, - {`%x[0-9a-fA-F]+(\.[0-9a-fA-F]+)*\b`, Literal, nil}, - {`\b[0-9]+\*[0-9]+`, Operator, nil}, - {`\b[0-9]+\*`, Operator, nil}, - {`\b[0-9]+`, Operator, nil}, - {`\*`, Operator, nil}, - {Words(``, `\b`, `ALPHA`, `BIT`, `CHAR`, `CR`, `CRLF`, `CTL`, `DIGIT`, `DQUOTE`, `HEXDIG`, `HTAB`, `LF`, `LWSP`, `OCTET`, `SP`, `VCHAR`, `WSP`), Keyword, nil}, - {`[a-zA-Z][a-zA-Z0-9-]+\b`, NameClass, nil}, - {`(=/|=|/)`, Operator, nil}, - {`[\[\]()]`, Punctuation, nil}, - {`\s+`, Text, nil}, - {`.`, Text, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/a/actionscript.go b/vendor/github.com/alecthomas/chroma/lexers/a/actionscript.go deleted file mode 100644 index 43d3852..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/a/actionscript.go +++ /dev/null @@ -1,39 +0,0 @@ -package a - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Actionscript lexer. -var Actionscript = internal.Register(MustNewLexer( - &Config{ - Name: "ActionScript", - Aliases: []string{"as", "actionscript"}, - Filenames: []string{"*.as"}, - MimeTypes: []string{"application/x-actionscript", "text/x-actionscript", "text/actionscript"}, - NotMultiline: true, - DotAll: true, - }, - Rules{ - "root": { - {`\s+`, Text, nil}, - {`//.*?\n`, CommentSingle, nil}, - {`/\*.*?\*/`, CommentMultiline, nil}, - {`/(\\\\|\\/|[^/\n])*/[gim]*`, LiteralStringRegex, nil}, - {`[~^*!%&<>|+=:;,/?\\-]+`, Operator, nil}, - {`[{}\[\]();.]+`, Punctuation, nil}, - {Words(``, `\b`, `case`, `default`, `for`, `each`, `in`, `while`, `do`, `break`, `return`, `continue`, `if`, `else`, `throw`, `try`, `catch`, `var`, `with`, `new`, `typeof`, `arguments`, `instanceof`, `this`, `switch`), Keyword, nil}, - {Words(``, `\b`, `class`, `public`, `final`, `internal`, `native`, `override`, `private`, `protected`, `static`, `import`, `extends`, `implements`, `interface`, `intrinsic`, `return`, `super`, `dynamic`, `function`, `const`, `get`, `namespace`, `package`, `set`), KeywordDeclaration, nil}, - {`(true|false|null|NaN|Infinity|-Infinity|undefined|Void)\b`, KeywordConstant, nil}, - {Words(``, `\b`, `Accessibility`, `AccessibilityProperties`, `ActionScriptVersion`, `ActivityEvent`, `AntiAliasType`, `ApplicationDomain`, `AsBroadcaster`, `Array`, `AsyncErrorEvent`, `AVM1Movie`, `BevelFilter`, `Bitmap`, `BitmapData`, `BitmapDataChannel`, `BitmapFilter`, `BitmapFilterQuality`, `BitmapFilterType`, `BlendMode`, `BlurFilter`, `Boolean`, `ByteArray`, `Camera`, `Capabilities`, `CapsStyle`, `Class`, `Color`, `ColorMatrixFilter`, `ColorTransform`, `ContextMenu`, `ContextMenuBuiltInItems`, `ContextMenuEvent`, `ContextMenuItem`, `ConvultionFilter`, `CSMSettings`, `DataEvent`, `Date`, `DefinitionError`, `DeleteObjectSample`, `Dictionary`, `DisplacmentMapFilter`, `DisplayObject`, `DisplacmentMapFilterMode`, `DisplayObjectContainer`, `DropShadowFilter`, `Endian`, `EOFError`, `Error`, `ErrorEvent`, `EvalError`, `Event`, `EventDispatcher`, `EventPhase`, `ExternalInterface`, `FileFilter`, `FileReference`, `FileReferenceList`, `FocusDirection`, `FocusEvent`, `Font`, `FontStyle`, `FontType`, `FrameLabel`, `FullScreenEvent`, `Function`, `GlowFilter`, `GradientBevelFilter`, `GradientGlowFilter`, `GradientType`, `Graphics`, `GridFitType`, `HTTPStatusEvent`, `IBitmapDrawable`, `ID3Info`, `IDataInput`, `IDataOutput`, `IDynamicPropertyOutputIDynamicPropertyWriter`, `IEventDispatcher`, `IExternalizable`, `IllegalOperationError`, `IME`, `IMEConversionMode`, `IMEEvent`, `int`, `InteractiveObject`, `InterpolationMethod`, `InvalidSWFError`, `InvokeEvent`, `IOError`, `IOErrorEvent`, `JointStyle`, `Key`, `Keyboard`, `KeyboardEvent`, `KeyLocation`, `LineScaleMode`, `Loader`, `LoaderContext`, `LoaderInfo`, `LoadVars`, `LocalConnection`, `Locale`, `Math`, `Matrix`, `MemoryError`, `Microphone`, `MorphShape`, `Mouse`, `MouseEvent`, `MovieClip`, `MovieClipLoader`, `Namespace`, `NetConnection`, `NetStatusEvent`, `NetStream`, `NewObjectSample`, `Number`, `Object`, `ObjectEncoding`, `PixelSnapping`, `Point`, `PrintJob`, `PrintJobOptions`, `PrintJobOrientation`, `ProgressEvent`, `Proxy`, `QName`, `RangeError`, `Rectangle`, `ReferenceError`, `RegExp`, `Responder`, `Sample`, `Scene`, `ScriptTimeoutError`, `Security`, `SecurityDomain`, `SecurityError`, `SecurityErrorEvent`, `SecurityPanel`, `Selection`, `Shape`, `SharedObject`, `SharedObjectFlushStatus`, `SimpleButton`, `Socket`, `Sound`, `SoundChannel`, `SoundLoaderContext`, `SoundMixer`, `SoundTransform`, `SpreadMethod`, `Sprite`, `StackFrame`, `StackOverflowError`, `Stage`, `StageAlign`, `StageDisplayState`, `StageQuality`, `StageScaleMode`, `StaticText`, `StatusEvent`, `String`, `StyleSheet`, `SWFVersion`, `SyncEvent`, `SyntaxError`, `System`, `TextColorType`, `TextField`, `TextFieldAutoSize`, `TextFieldType`, `TextFormat`, `TextFormatAlign`, `TextLineMetrics`, `TextRenderer`, `TextSnapshot`, `Timer`, `TimerEvent`, `Transform`, `TypeError`, `uint`, `URIError`, `URLLoader`, `URLLoaderDataFormat`, `URLRequest`, `URLRequestHeader`, `URLRequestMethod`, `URLStream`, `URLVariabeles`, `VerifyError`, `Video`, `XML`, `XMLDocument`, `XMLList`, `XMLNode`, `XMLNodeType`, `XMLSocket`, `XMLUI`), NameBuiltin, nil}, - {Words(``, `\b`, `decodeURI`, `decodeURIComponent`, `encodeURI`, `escape`, `eval`, `isFinite`, `isNaN`, `isXMLName`, `clearInterval`, `fscommand`, `getTimer`, `getURL`, `getVersion`, `parseFloat`, `parseInt`, `setInterval`, `trace`, `updateAfterEvent`, `unescape`), NameFunction, nil}, - {`[$a-zA-Z_]\w*`, NameOther, nil}, - {`[0-9][0-9]*\.[0-9]+([eE][0-9]+)?[fd]?`, LiteralNumberFloat, nil}, - {`0x[0-9a-f]+`, LiteralNumberHex, nil}, - {`[0-9]+`, LiteralNumberInteger, nil}, - {`"(\\\\|\\"|[^"])*"`, LiteralStringDouble, nil}, - {`'(\\\\|\\'|[^'])*'`, LiteralStringSingle, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/a/actionscript3.go b/vendor/github.com/alecthomas/chroma/lexers/a/actionscript3.go deleted file mode 100644 index 3404bd5..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/a/actionscript3.go +++ /dev/null @@ -1,56 +0,0 @@ -package a - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Actionscript 3 lexer. -var Actionscript3 = internal.Register(MustNewLexer( - &Config{ - Name: "ActionScript 3", - Aliases: []string{"as3", "actionscript3"}, - Filenames: []string{"*.as"}, - MimeTypes: []string{"application/x-actionscript3", "text/x-actionscript3", "text/actionscript3"}, - DotAll: true, - }, - Rules{ - "root": { - {`\s+`, Text, nil}, - {`(function\s+)([$a-zA-Z_]\w*)(\s*)(\()`, ByGroups(KeywordDeclaration, NameFunction, Text, Operator), Push("funcparams")}, - {`(var|const)(\s+)([$a-zA-Z_]\w*)(\s*)(:)(\s*)([$a-zA-Z_]\w*(?:\.<\w+>)?)`, ByGroups(KeywordDeclaration, Text, Name, Text, Punctuation, Text, KeywordType), nil}, - {`(import|package)(\s+)((?:[$a-zA-Z_]\w*|\.)+)(\s*)`, ByGroups(Keyword, Text, NameNamespace, Text), nil}, - {`(new)(\s+)([$a-zA-Z_]\w*(?:\.<\w+>)?)(\s*)(\()`, ByGroups(Keyword, Text, KeywordType, Text, Operator), nil}, - {`//.*?\n`, CommentSingle, nil}, - {`/\*.*?\*/`, CommentMultiline, nil}, - {`/(\\\\|\\/|[^\n])*/[gisx]*`, LiteralStringRegex, nil}, - {`(\.)([$a-zA-Z_]\w*)`, ByGroups(Operator, NameAttribute), nil}, - {`(case|default|for|each|in|while|do|break|return|continue|if|else|throw|try|catch|with|new|typeof|arguments|instanceof|this|switch|import|include|as|is)\b`, Keyword, nil}, - {`(class|public|final|internal|native|override|private|protected|static|import|extends|implements|interface|intrinsic|return|super|dynamic|function|const|get|namespace|package|set)\b`, KeywordDeclaration, nil}, - {`(true|false|null|NaN|Infinity|-Infinity|undefined|void)\b`, KeywordConstant, nil}, - {`(decodeURI|decodeURIComponent|encodeURI|escape|eval|isFinite|isNaN|isXMLName|clearInterval|fscommand|getTimer|getURL|getVersion|isFinite|parseFloat|parseInt|setInterval|trace|updateAfterEvent|unescape)\b`, NameFunction, nil}, - {`[$a-zA-Z_]\w*`, Name, nil}, - {`[0-9][0-9]*\.[0-9]+([eE][0-9]+)?[fd]?`, LiteralNumberFloat, nil}, - {`0x[0-9a-f]+`, LiteralNumberHex, nil}, - {`[0-9]+`, LiteralNumberInteger, nil}, - {`"(\\\\|\\"|[^"])*"`, LiteralStringDouble, nil}, - {`'(\\\\|\\'|[^'])*'`, LiteralStringSingle, nil}, - {`[~^*!%&<>|+=:;,/?\\{}\[\]().-]+`, Operator, nil}, - }, - "funcparams": { - {`\s+`, Text, nil}, - {`(\s*)(\.\.\.)?([$a-zA-Z_]\w*)(\s*)(:)(\s*)([$a-zA-Z_]\w*(?:\.<\w+>)?|\*)(\s*)`, ByGroups(Text, Punctuation, Name, Text, Operator, Text, KeywordType, Text), Push("defval")}, - {`\)`, Operator, Push("type")}, - }, - "type": { - {`(\s*)(:)(\s*)([$a-zA-Z_]\w*(?:\.<\w+>)?|\*)`, ByGroups(Text, Operator, Text, KeywordType), Pop(2)}, - {`\s+`, Text, Pop(2)}, - Default(Pop(2)), - }, - "defval": { - {`(=)(\s*)([^(),]+)(\s*)(,?)`, ByGroups(Operator, Text, UsingSelf("root"), Text, Operator), Pop(1)}, - {`,`, Operator, Pop(1)}, - Default(Pop(1)), - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/a/ada.go b/vendor/github.com/alecthomas/chroma/lexers/a/ada.go deleted file mode 100644 index d9b34e3..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/a/ada.go +++ /dev/null @@ -1,114 +0,0 @@ -package a - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Ada lexer. -var Ada = internal.Register(MustNewLexer( - &Config{ - Name: "Ada", - Aliases: []string{"ada", "ada95", "ada2005"}, - Filenames: []string{"*.adb", "*.ads", "*.ada"}, - MimeTypes: []string{"text/x-ada"}, - CaseInsensitive: true, - }, - Rules{ - "root": { - {`[^\S\n]+`, Text, nil}, - {`--.*?\n`, CommentSingle, nil}, - {`[^\S\n]+`, Text, nil}, - {`function|procedure|entry`, KeywordDeclaration, Push("subprogram")}, - {`(subtype|type)(\s+)(\w+)`, ByGroups(KeywordDeclaration, Text, KeywordType), Push("type_def")}, - {`task|protected`, KeywordDeclaration, nil}, - {`(subtype)(\s+)`, ByGroups(KeywordDeclaration, Text), nil}, - {`(end)(\s+)`, ByGroups(KeywordReserved, Text), Push("end")}, - {`(pragma)(\s+)(\w+)`, ByGroups(KeywordReserved, Text, CommentPreproc), nil}, - {`(true|false|null)\b`, KeywordConstant, nil}, - {Words(``, `\b`, `Address`, `Byte`, `Boolean`, `Character`, `Controlled`, `Count`, `Cursor`, `Duration`, `File_Mode`, `File_Type`, `Float`, `Generator`, `Integer`, `Long_Float`, `Long_Integer`, `Long_Long_Float`, `Long_Long_Integer`, `Natural`, `Positive`, `Reference_Type`, `Short_Float`, `Short_Integer`, `Short_Short_Float`, `Short_Short_Integer`, `String`, `Wide_Character`, `Wide_String`), KeywordType, nil}, - {`(and(\s+then)?|in|mod|not|or(\s+else)|rem)\b`, OperatorWord, nil}, - {`generic|private`, KeywordDeclaration, nil}, - {`package`, KeywordDeclaration, Push("package")}, - {`array\b`, KeywordReserved, Push("array_def")}, - {`(with|use)(\s+)`, ByGroups(KeywordNamespace, Text), Push("import")}, - {`(\w+)(\s*)(:)(\s*)(constant)`, ByGroups(NameConstant, Text, Punctuation, Text, KeywordReserved), nil}, - {`<<\w+>>`, NameLabel, nil}, - {`(\w+)(\s*)(:)(\s*)(declare|begin|loop|for|while)`, ByGroups(NameLabel, Text, Punctuation, Text, KeywordReserved), nil}, - {Words(`\b`, `\b`, `abort`, `abs`, `abstract`, `accept`, `access`, `aliased`, `all`, `array`, `at`, `begin`, `body`, `case`, `constant`, `declare`, `delay`, `delta`, `digits`, `do`, `else`, `elsif`, `end`, `entry`, `exception`, `exit`, `interface`, `for`, `goto`, `if`, `is`, `limited`, `loop`, `new`, `null`, `of`, `or`, `others`, `out`, `overriding`, `pragma`, `protected`, `raise`, `range`, `record`, `renames`, `requeue`, `return`, `reverse`, `select`, `separate`, `subtype`, `synchronized`, `task`, `tagged`, `terminate`, `then`, `type`, `until`, `when`, `while`, `xor`), KeywordReserved, nil}, - {`"[^"]*"`, LiteralString, nil}, - Include("attribute"), - Include("numbers"), - {`'[^']'`, LiteralStringChar, nil}, - {`(\w+)(\s*|[(,])`, ByGroups(Name, UsingSelf("root")), nil}, - {`(<>|=>|:=|[()|:;,.'])`, Punctuation, nil}, - {`[*<>+=/&-]`, Operator, nil}, - {`\n+`, Text, nil}, - }, - "numbers": { - {`[0-9_]+#[0-9a-f]+#`, LiteralNumberHex, nil}, - {`[0-9_]+\.[0-9_]*`, LiteralNumberFloat, nil}, - {`[0-9_]+`, LiteralNumberInteger, nil}, - }, - "attribute": { - {`(')(\w+)`, ByGroups(Punctuation, NameAttribute), nil}, - }, - "subprogram": { - {`\(`, Punctuation, Push("#pop", "formal_part")}, - {`;`, Punctuation, Pop(1)}, - {`is\b`, KeywordReserved, Pop(1)}, - {`"[^"]+"|\w+`, NameFunction, nil}, - Include("root"), - }, - "end": { - {`(if|case|record|loop|select)`, KeywordReserved, nil}, - {`"[^"]+"|[\w.]+`, NameFunction, nil}, - {`\s+`, Text, nil}, - {`;`, Punctuation, Pop(1)}, - }, - "type_def": { - {`;`, Punctuation, Pop(1)}, - {`\(`, Punctuation, Push("formal_part")}, - {`with|and|use`, KeywordReserved, nil}, - {`array\b`, KeywordReserved, Push("#pop", "array_def")}, - {`record\b`, KeywordReserved, Push("record_def")}, - {`(null record)(;)`, ByGroups(KeywordReserved, Punctuation), Pop(1)}, - Include("root"), - }, - "array_def": { - {`;`, Punctuation, Pop(1)}, - {`(\w+)(\s+)(range)`, ByGroups(KeywordType, Text, KeywordReserved), nil}, - Include("root"), - }, - "record_def": { - {`end record`, KeywordReserved, Pop(1)}, - Include("root"), - }, - "import": { - {`[\w.]+`, NameNamespace, Pop(1)}, - Default(Pop(1)), - }, - "formal_part": { - {`\)`, Punctuation, Pop(1)}, - {`\w+`, NameVariable, nil}, - {`,|:[^=]`, Punctuation, nil}, - {`(in|not|null|out|access)\b`, KeywordReserved, nil}, - Include("root"), - }, - "package": { - {`body`, KeywordDeclaration, nil}, - {`is\s+new|renames`, KeywordReserved, nil}, - {`is`, KeywordReserved, Pop(1)}, - {`;`, Punctuation, Pop(1)}, - {`\(`, Punctuation, Push("package_instantiation")}, - {`([\w.]+)`, NameClass, nil}, - Include("root"), - }, - "package_instantiation": { - {`("[^"]+"|\w+)(\s+)(=>)`, ByGroups(NameVariable, Text, Punctuation), nil}, - {`[\w.\'"]`, Text, nil}, - {`\)`, Punctuation, Pop(1)}, - Include("root"), - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/a/angular2.go b/vendor/github.com/alecthomas/chroma/lexers/a/angular2.go deleted file mode 100644 index 5258c92..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/a/angular2.go +++ /dev/null @@ -1,42 +0,0 @@ -package a - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Angular2 lexer. -var Angular2 = internal.Register(MustNewLexer( - &Config{ - Name: "Angular2", - Aliases: []string{"ng2"}, - Filenames: []string{}, - MimeTypes: []string{}, - }, - Rules{ - "root": { - {`[^{([*#]+`, Other, nil}, - {`(\{\{)(\s*)`, ByGroups(CommentPreproc, Text), Push("ngExpression")}, - {`([([]+)([\w:.-]+)([\])]+)(\s*)(=)(\s*)`, ByGroups(Punctuation, NameAttribute, Punctuation, Text, Operator, Text), Push("attr")}, - {`([([]+)([\w:.-]+)([\])]+)(\s*)`, ByGroups(Punctuation, NameAttribute, Punctuation, Text), nil}, - {`([*#])([\w:.-]+)(\s*)(=)(\s*)`, ByGroups(Punctuation, NameAttribute, Punctuation, Operator), Push("attr")}, - {`([*#])([\w:.-]+)(\s*)`, ByGroups(Punctuation, NameAttribute, Punctuation), nil}, - }, - "ngExpression": { - {`\s+(\|\s+)?`, Text, nil}, - {`\}\}`, CommentPreproc, Pop(1)}, - {`:?(true|false)`, LiteralStringBoolean, nil}, - {`:?"(\\\\|\\"|[^"])*"`, LiteralStringDouble, nil}, - {`:?'(\\\\|\\'|[^'])*'`, LiteralStringSingle, nil}, - {`[0-9](\.[0-9]*)?(eE[+-][0-9])?[flFLdD]?|0[xX][0-9a-fA-F]+[Ll]?`, LiteralNumber, nil}, - {`[a-zA-Z][\w-]*(\(.*\))?`, NameVariable, nil}, - {`\.[\w-]+(\(.*\))?`, NameVariable, nil}, - {`(\?)(\s*)([^}\s]+)(\s*)(:)(\s*)([^}\s]+)(\s*)`, ByGroups(Operator, Text, LiteralString, Text, Operator, Text, LiteralString, Text), nil}, - }, - "attr": { - {`".*?"`, LiteralString, Pop(1)}, - {`'.*?'`, LiteralString, Pop(1)}, - {`[^\s>]+`, LiteralString, Pop(1)}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/a/antlr.go b/vendor/github.com/alecthomas/chroma/lexers/a/antlr.go deleted file mode 100644 index d7649d4..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/a/antlr.go +++ /dev/null @@ -1,101 +0,0 @@ -package a - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// ANTLR lexer. -var ANTLR = internal.Register(MustNewLexer( - &Config{ - Name: "ANTLR", - Aliases: []string{"antlr"}, - Filenames: []string{}, - MimeTypes: []string{}, - }, - Rules{ - "whitespace": { - {`\s+`, TextWhitespace, nil}, - }, - "comments": { - {`//.*$`, Comment, nil}, - {`/\*(.|\n)*?\*/`, Comment, nil}, - }, - "root": { - Include("whitespace"), - Include("comments"), - {`(lexer|parser|tree)?(\s*)(grammar\b)(\s*)([A-Za-z]\w*)(;)`, ByGroups(Keyword, TextWhitespace, Keyword, TextWhitespace, NameClass, Punctuation), nil}, - {`options\b`, Keyword, Push("options")}, - {`tokens\b`, Keyword, Push("tokens")}, - {`(scope)(\s*)([A-Za-z]\w*)(\s*)(\{)`, ByGroups(Keyword, TextWhitespace, NameVariable, TextWhitespace, Punctuation), Push("action")}, - {`(catch|finally)\b`, Keyword, Push("exception")}, - {`(@[A-Za-z]\w*)(\s*)(::)?(\s*)([A-Za-z]\w*)(\s*)(\{)`, ByGroups(NameLabel, TextWhitespace, Punctuation, TextWhitespace, NameLabel, TextWhitespace, Punctuation), Push("action")}, - {`((?:protected|private|public|fragment)\b)?(\s*)([A-Za-z]\w*)(!)?`, ByGroups(Keyword, TextWhitespace, NameLabel, Punctuation), Push("rule-alts", "rule-prelims")}, - }, - "exception": { - {`\n`, TextWhitespace, Pop(1)}, - {`\s`, TextWhitespace, nil}, - Include("comments"), - {`\[`, Punctuation, Push("nested-arg-action")}, - {`\{`, Punctuation, Push("action")}, - }, - "rule-prelims": { - Include("whitespace"), - Include("comments"), - {`returns\b`, Keyword, nil}, - {`\[`, Punctuation, Push("nested-arg-action")}, - {`\{`, Punctuation, Push("action")}, - {`(throws)(\s+)([A-Za-z]\w*)`, ByGroups(Keyword, TextWhitespace, NameLabel), nil}, - {`(,)(\s*)([A-Za-z]\w*)`, ByGroups(Punctuation, TextWhitespace, NameLabel), nil}, - {`options\b`, Keyword, Push("options")}, - {`(scope)(\s+)(\{)`, ByGroups(Keyword, TextWhitespace, Punctuation), Push("action")}, - {`(scope)(\s+)([A-Za-z]\w*)(\s*)(;)`, ByGroups(Keyword, TextWhitespace, NameLabel, TextWhitespace, Punctuation), nil}, - {`(@[A-Za-z]\w*)(\s*)(\{)`, ByGroups(NameLabel, TextWhitespace, Punctuation), Push("action")}, - {`:`, Punctuation, Pop(1)}, - }, - "rule-alts": { - Include("whitespace"), - Include("comments"), - {`options\b`, Keyword, Push("options")}, - {`:`, Punctuation, nil}, - {`'(\\\\|\\'|[^'])*'`, LiteralString, nil}, - {`"(\\\\|\\"|[^"])*"`, LiteralString, nil}, - {`<<([^>]|>[^>])>>`, LiteralString, nil}, - {`\$?[A-Z_]\w*`, NameConstant, nil}, - {`\$?[a-z_]\w*`, NameVariable, nil}, - {`(\+|\||->|=>|=|\(|\)|\.\.|\.|\?|\*|\^|!|\#|~)`, Operator, nil}, - {`,`, Punctuation, nil}, - {`\[`, Punctuation, Push("nested-arg-action")}, - {`\{`, Punctuation, Push("action")}, - {`;`, Punctuation, Pop(1)}, - }, - "tokens": { - Include("whitespace"), - Include("comments"), - {`\{`, Punctuation, nil}, - {`([A-Z]\w*)(\s*)(=)?(\s*)(\'(?:\\\\|\\\'|[^\']*)\')?(\s*)(;)`, ByGroups(NameLabel, TextWhitespace, Punctuation, TextWhitespace, LiteralString, TextWhitespace, Punctuation), nil}, - {`\}`, Punctuation, Pop(1)}, - }, - "options": { - Include("whitespace"), - Include("comments"), - {`\{`, Punctuation, nil}, - {`([A-Za-z]\w*)(\s*)(=)(\s*)([A-Za-z]\w*|\'(?:\\\\|\\\'|[^\']*)\'|[0-9]+|\*)(\s*)(;)`, ByGroups(NameVariable, TextWhitespace, Punctuation, TextWhitespace, Text, TextWhitespace, Punctuation), nil}, - {`\}`, Punctuation, Pop(1)}, - }, - "action": { - {`([^${}\'"/\\]+|"(\\\\|\\"|[^"])*"|'(\\\\|\\'|[^'])*'|//.*$\n?|/\*(.|\n)*?\*/|/(?!\*)(\\\\|\\/|[^/])*/|\\(?!%)|/)+`, Other, nil}, - {`(\\)(%)`, ByGroups(Punctuation, Other), nil}, - {`(\$[a-zA-Z]+)(\.?)(text|value)?`, ByGroups(NameVariable, Punctuation, NameProperty), nil}, - {`\{`, Punctuation, Push()}, - {`\}`, Punctuation, Pop(1)}, - }, - "nested-arg-action": { - {`([^$\[\]\'"/]+|"(\\\\|\\"|[^"])*"|'(\\\\|\\'|[^'])*'|//.*$\n?|/\*(.|\n)*?\*/|/(?!\*)(\\\\|\\/|[^/])*/|/)+`, Other, nil}, - {`\[`, Punctuation, Push()}, - {`\]`, Punctuation, Pop(1)}, - {`(\$[a-zA-Z]+)(\.?)(text|value)?`, ByGroups(NameVariable, Punctuation, NameProperty), nil}, - {`(\\\\|\\\]|\\\[|[^\[\]])+`, Other, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/a/apache.go b/vendor/github.com/alecthomas/chroma/lexers/a/apache.go deleted file mode 100644 index 6c56a1d..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/a/apache.go +++ /dev/null @@ -1,38 +0,0 @@ -package a - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Apacheconf lexer. -var Apacheconf = internal.Register(MustNewLexer( - &Config{ - Name: "ApacheConf", - Aliases: []string{"apacheconf", "aconf", "apache"}, - Filenames: []string{".htaccess", "apache.conf", "apache2.conf"}, - MimeTypes: []string{"text/x-apacheconf"}, - CaseInsensitive: true, - }, - Rules{ - "root": { - {`\s+`, Text, nil}, - {`(#.*?)$`, Comment, nil}, - {`(<[^\s>]+)(?:(\s+)(.*?))?(>)`, ByGroups(NameTag, Text, LiteralString, NameTag), nil}, - {`([a-z]\w*)(\s+)`, ByGroups(NameBuiltin, Text), Push("value")}, - {`\.+`, Text, nil}, - }, - "value": { - {`\\\n`, Text, nil}, - {`$`, Text, Pop(1)}, - {`\\`, Text, nil}, - {`[^\S\n]+`, Text, nil}, - {`\d+\.\d+\.\d+\.\d+(?:/\d+)?`, LiteralNumber, nil}, - {`\d+`, LiteralNumber, nil}, - {`/([a-z0-9][\w./-]+)`, LiteralStringOther, nil}, - {`(on|off|none|any|all|double|email|dns|min|minimal|os|productonly|full|emerg|alert|crit|error|warn|notice|info|debug|registry|script|inetd|standalone|user|group)\b`, Keyword, nil}, - {`"([^"\\]*(?:\\.[^"\\]*)*)"`, LiteralStringDouble, nil}, - {`[^\s"\\]+`, Text, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/a/apl.go b/vendor/github.com/alecthomas/chroma/lexers/a/apl.go deleted file mode 100644 index 820e13b..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/a/apl.go +++ /dev/null @@ -1,36 +0,0 @@ -package a - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Apl lexer. -var Apl = internal.Register(MustNewLexer( - &Config{ - Name: "APL", - Aliases: []string{"apl"}, - Filenames: []string{"*.apl"}, - MimeTypes: []string{}, - }, - Rules{ - "root": { - {`\s+`, Text, nil}, - {`[⍝#].*$`, CommentSingle, nil}, - {`\'((\'\')|[^\'])*\'`, LiteralStringSingle, nil}, - {`"(("")|[^"])*"`, LiteralStringDouble, nil}, - {`[⋄◇()]`, Punctuation, nil}, - {`[\[\];]`, LiteralStringRegex, nil}, - {`⎕[A-Za-zΔ∆⍙][A-Za-zΔ∆⍙_¯0-9]*`, NameFunction, nil}, - {`[A-Za-zΔ∆⍙][A-Za-zΔ∆⍙_¯0-9]*`, NameVariable, nil}, - {`¯?(0[Xx][0-9A-Fa-f]+|[0-9]*\.?[0-9]+([Ee][+¯]?[0-9]+)?|¯|∞)([Jj]¯?(0[Xx][0-9A-Fa-f]+|[0-9]*\.?[0-9]+([Ee][+¯]?[0-9]+)?|¯|∞))?`, LiteralNumber, nil}, - {`[\.\\/⌿⍀¨⍣⍨⍠⍤∘]`, NameAttribute, nil}, - {`[+\-×÷⌈⌊∣|⍳?*⍟○!⌹<≤=>≥≠≡≢∊⍷∪∩~∨∧⍱⍲⍴,⍪⌽⊖⍉↑↓⊂⊃⌷⍋⍒⊤⊥⍕⍎⊣⊢⍁⍂≈⌸⍯↗]`, Operator, nil}, - {`⍬`, NameConstant, nil}, - {`[⎕⍞]`, NameVariableGlobal, nil}, - {`[←→]`, KeywordDeclaration, nil}, - {`[⍺⍵⍶⍹∇:]`, NameBuiltinPseudo, nil}, - {`[{}]`, KeywordType, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/a/applescript.go b/vendor/github.com/alecthomas/chroma/lexers/a/applescript.go deleted file mode 100644 index db83ed0..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/a/applescript.go +++ /dev/null @@ -1,55 +0,0 @@ -package a - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Applescript lexer. -var Applescript = internal.Register(MustNewLexer( - &Config{ - Name: "AppleScript", - Aliases: []string{"applescript"}, - Filenames: []string{"*.applescript"}, - MimeTypes: []string{}, - DotAll: true, - }, - Rules{ - "root": { - {`\s+`, Text, nil}, - {`¬\n`, LiteralStringEscape, nil}, - {`'s\s+`, Text, nil}, - {`(--|#).*?$`, Comment, nil}, - {`\(\*`, CommentMultiline, Push("comment")}, - {`[(){}!,.:]`, Punctuation, nil}, - {`(«)([^»]+)(»)`, ByGroups(Text, NameBuiltin, Text), nil}, - {`\b((?:considering|ignoring)\s*)(application responses|case|diacriticals|hyphens|numeric strings|punctuation|white space)`, ByGroups(Keyword, NameBuiltin), nil}, - {`(-|\*|\+|&|≠|>=?|<=?|=|≥|≤|/|÷|\^)`, Operator, nil}, - {`\b(and|or|is equal|equals|(is )?equal to|is not|isn't|isn't equal( to)?|is not equal( to)?|doesn't equal|does not equal|(is )?greater than|comes after|is not less than or equal( to)?|isn't less than or equal( to)?|(is )?less than|comes before|is not greater than or equal( to)?|isn't greater than or equal( to)?|(is )?greater than or equal( to)?|is not less than|isn't less than|does not come before|doesn't come before|(is )?less than or equal( to)?|is not greater than|isn't greater than|does not come after|doesn't come after|starts? with|begins? with|ends? with|contains?|does not contain|doesn't contain|is in|is contained by|is not in|is not contained by|isn't contained by|div|mod|not|(a )?(ref( to)?|reference to)|is|does)\b`, OperatorWord, nil}, - {`^(\s*(?:on|end)\s+)(zoomed|write to file|will zoom|will show|will select tab view item|will resize( sub views)?|will resign active|will quit|will pop up|will open|will move|will miniaturize|will hide|will finish launching|will display outline cell|will display item cell|will display cell|will display browser cell|will dismiss|will close|will become active|was miniaturized|was hidden|update toolbar item|update parameters|update menu item|shown|should zoom|should selection change|should select tab view item|should select row|should select item|should select column|should quit( after last window closed)?|should open( untitled)?|should expand item|should end editing|should collapse item|should close|should begin editing|selection changing|selection changed|selected tab view item|scroll wheel|rows changed|right mouse up|right mouse dragged|right mouse down|resized( sub views)?|resigned main|resigned key|resigned active|read from file|prepare table drop|prepare table drag|prepare outline drop|prepare outline drag|prepare drop|plugin loaded|parameters updated|panel ended|opened|open untitled|number of rows|number of items|number of browser rows|moved|mouse up|mouse moved|mouse exited|mouse entered|mouse dragged|mouse down|miniaturized|load data representation|launched|keyboard up|keyboard down|items changed|item value changed|item value|item expandable|idle|exposed|end editing|drop|drag( (entered|exited|updated))?|double clicked|document nib name|dialog ended|deminiaturized|data representation|conclude drop|column resized|column moved|column clicked|closed|clicked toolbar item|clicked|choose menu item|child of item|changed|change item value|change cell value|cell value changed|cell value|bounds changed|begin editing|became main|became key|awake from nib|alert ended|activated|action|accept table drop|accept outline drop)`, ByGroups(Keyword, NameFunction), nil}, - {`^(\s*)(in|on|script|to)(\s+)`, ByGroups(Text, Keyword, Text), nil}, - {`\b(as )(alias |application |boolean |class |constant |date |file |integer |list |number |POSIX file |real |record |reference |RGB color |script |text |unit types|(?:Unicode )?text|string)\b`, ByGroups(Keyword, NameClass), nil}, - {`\b(AppleScript|current application|false|linefeed|missing value|pi|quote|result|return|space|tab|text item delimiters|true|version)\b`, NameConstant, nil}, - {`\b(ASCII (character|number)|activate|beep|choose URL|choose application|choose color|choose file( name)?|choose folder|choose from list|choose remote application|clipboard info|close( access)?|copy|count|current date|delay|delete|display (alert|dialog)|do shell script|duplicate|exists|get eof|get volume settings|info for|launch|list (disks|folder)|load script|log|make|mount volume|new|offset|open( (for access|location))?|path to|print|quit|random number|read|round|run( script)?|say|scripting components|set (eof|the clipboard to|volume)|store script|summarize|system attribute|system info|the clipboard|time to GMT|write|quoted form)\b`, NameBuiltin, nil}, - {`\b(considering|else|error|exit|from|if|ignoring|in|repeat|tell|then|times|to|try|until|using terms from|while|with|with timeout( of)?|with transaction|by|continue|end|its?|me|my|return|of|as)\b`, Keyword, nil}, - {`\b(global|local|prop(erty)?|set|get)\b`, Keyword, nil}, - {`\b(but|put|returning|the)\b`, NameBuiltin, nil}, - {`\b(attachment|attribute run|character|day|month|paragraph|word|year)s?\b`, NameBuiltin, nil}, - {`\b(about|above|against|apart from|around|aside from|at|below|beneath|beside|between|for|given|instead of|on|onto|out of|over|since)\b`, NameBuiltin, nil}, - {`\b(accepts arrow key|action method|active|alignment|allowed identifiers|allows branch selection|allows column reordering|allows column resizing|allows column selection|allows customization|allows editing text attributes|allows empty selection|allows mixed state|allows multiple selection|allows reordering|allows undo|alpha( value)?|alternate image|alternate increment value|alternate title|animation delay|associated file name|associated object|auto completes|auto display|auto enables items|auto repeat|auto resizes( outline column)?|auto save expanded items|auto save name|auto save table columns|auto saves configuration|auto scroll|auto sizes all columns to fit|auto sizes cells|background color|bezel state|bezel style|bezeled|border rect|border type|bordered|bounds( rotation)?|box type|button returned|button type|can choose directories|can choose files|can draw|can hide|cell( (background color|size|type))?|characters|class|click count|clicked( data)? column|clicked data item|clicked( data)? row|closeable|collating|color( (mode|panel))|command key down|configuration|content(s| (size|view( margins)?))?|context|continuous|control key down|control size|control tint|control view|controller visible|coordinate system|copies( on scroll)?|corner view|current cell|current column|current( field)? editor|current( menu)? item|current row|current tab view item|data source|default identifiers|delta (x|y|z)|destination window|directory|display mode|displayed cell|document( (edited|rect|view))?|double value|dragged column|dragged distance|dragged items|draws( cell)? background|draws grid|dynamically scrolls|echos bullets|edge|editable|edited( data)? column|edited data item|edited( data)? row|enabled|enclosing scroll view|ending page|error handling|event number|event type|excluded from windows menu|executable path|expanded|fax number|field editor|file kind|file name|file type|first responder|first visible column|flipped|floating|font( panel)?|formatter|frameworks path|frontmost|gave up|grid color|has data items|has horizontal ruler|has horizontal scroller|has parent data item|has resize indicator|has shadow|has sub menu|has vertical ruler|has vertical scroller|header cell|header view|hidden|hides when deactivated|highlights by|horizontal line scroll|horizontal page scroll|horizontal ruler view|horizontally resizable|icon image|id|identifier|ignores multiple clicks|image( (alignment|dims when disabled|frame style|scaling))?|imports graphics|increment value|indentation per level|indeterminate|index|integer value|intercell spacing|item height|key( (code|equivalent( modifier)?|window))?|knob thickness|label|last( visible)? column|leading offset|leaf|level|line scroll|loaded|localized sort|location|loop mode|main( (bunde|menu|window))?|marker follows cell|matrix mode|maximum( content)? size|maximum visible columns|menu( form representation)?|miniaturizable|miniaturized|minimized image|minimized title|minimum column width|minimum( content)? size|modal|modified|mouse down state|movie( (controller|file|rect))?|muted|name|needs display|next state|next text|number of tick marks|only tick mark values|opaque|open panel|option key down|outline table column|page scroll|pages across|pages down|palette label|pane splitter|parent data item|parent window|pasteboard|path( (names|separator))?|playing|plays every frame|plays selection only|position|preferred edge|preferred type|pressure|previous text|prompt|properties|prototype cell|pulls down|rate|released when closed|repeated|requested print time|required file type|resizable|resized column|resource path|returns records|reuses columns|rich text|roll over|row height|rulers visible|save panel|scripts path|scrollable|selectable( identifiers)?|selected cell|selected( data)? columns?|selected data items?|selected( data)? rows?|selected item identifier|selection by rect|send action on arrow key|sends action when done editing|separates columns|separator item|sequence number|services menu|shared frameworks path|shared support path|sheet|shift key down|shows alpha|shows state by|size( mode)?|smart insert delete enabled|sort case sensitivity|sort column|sort order|sort type|sorted( data rows)?|sound|source( mask)?|spell checking enabled|starting page|state|string value|sub menu|super menu|super view|tab key traverses cells|tab state|tab type|tab view|table view|tag|target( printer)?|text color|text container insert|text container origin|text returned|tick mark position|time stamp|title(d| (cell|font|height|position|rect))?|tool tip|toolbar|trailing offset|transparent|treat packages as directories|truncated labels|types|unmodified characters|update views|use sort indicator|user defaults|uses data source|uses ruler|uses threaded animation|uses title from previous column|value wraps|version|vertical( (line scroll|page scroll|ruler view))?|vertically resizable|view|visible( document rect)?|volume|width|window|windows menu|wraps|zoomable|zoomed)\b`, NameAttribute, nil}, - {`\b(action cell|alert reply|application|box|browser( cell)?|bundle|button( cell)?|cell|clip view|color well|color-panel|combo box( item)?|control|data( (cell|column|item|row|source))?|default entry|dialog reply|document|drag info|drawer|event|font(-panel)?|formatter|image( (cell|view))?|matrix|menu( item)?|item|movie( view)?|open-panel|outline view|panel|pasteboard|plugin|popup button|progress indicator|responder|save-panel|scroll view|secure text field( cell)?|slider|sound|split view|stepper|tab view( item)?|table( (column|header cell|header view|view))|text( (field( cell)?|view))?|toolbar( item)?|user-defaults|view|window)s?\b`, NameBuiltin, nil}, - {`\b(animate|append|call method|center|close drawer|close panel|display|display alert|display dialog|display panel|go|hide|highlight|increment|item for|load image|load movie|load nib|load panel|load sound|localized string|lock focus|log|open drawer|path for|pause|perform action|play|register|resume|scroll|select( all)?|show|size to fit|start|step back|step forward|stop|synchronize|unlock focus|update)\b`, NameBuiltin, nil}, - {`\b((in )?back of|(in )?front of|[0-9]+(st|nd|rd|th)|first|second|third|fourth|fifth|sixth|seventh|eighth|ninth|tenth|after|back|before|behind|every|front|index|last|middle|some|that|through|thru|where|whose)\b`, NameBuiltin, nil}, - {`"(\\\\|\\"|[^"])*"`, LiteralStringDouble, nil}, - {`\b([a-zA-Z]\w*)\b`, NameVariable, nil}, - {`[-+]?(\d+\.\d*|\d*\.\d+)(E[-+][0-9]+)?`, LiteralNumberFloat, nil}, - {`[-+]?\d+`, LiteralNumberInteger, nil}, - }, - "comment": { - {`\(\*`, CommentMultiline, Push()}, - {`\*\)`, CommentMultiline, Pop(1)}, - {`[^*(]+`, CommentMultiline, nil}, - {`[*(]`, CommentMultiline, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/a/arduino.go b/vendor/github.com/alecthomas/chroma/lexers/a/arduino.go deleted file mode 100644 index b0cd8c9..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/a/arduino.go +++ /dev/null @@ -1,110 +0,0 @@ -package a - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Arduino lexer. -var Arduino = internal.Register(MustNewLexer( - &Config{ - Name: "Arduino", - Aliases: []string{"arduino"}, - Filenames: []string{"*.ino"}, - MimeTypes: []string{"text/x-arduino"}, - EnsureNL: true, - }, - Rules{ - "statements": { - {Words(``, `\b`, `catch`, `const_cast`, `delete`, `dynamic_cast`, `explicit`, `export`, `friend`, `mutable`, `namespace`, `new`, `operator`, `private`, `protected`, `public`, `reinterpret_cast`, `restrict`, `static_cast`, `template`, `this`, `throw`, `throws`, `try`, `typeid`, `typename`, `using`, `virtual`, `constexpr`, `nullptr`, `decltype`, `thread_local`, `alignas`, `alignof`, `static_assert`, `noexcept`, `override`, `final`), Keyword, nil}, - {`char(16_t|32_t)\b`, KeywordType, nil}, - {`(class)\b`, ByGroups(Keyword, Text), Push("classname")}, - {`(R)(")([^\\()\s]{,16})(\()((?:.|\n)*?)(\)\3)(")`, ByGroups(LiteralStringAffix, LiteralString, LiteralStringDelimiter, LiteralStringDelimiter, LiteralString, LiteralStringDelimiter, LiteralString), nil}, - {`(u8|u|U)(")`, ByGroups(LiteralStringAffix, LiteralString), Push("string")}, - {`(L?)(")`, ByGroups(LiteralStringAffix, LiteralString), Push("string")}, - {`(L?)(')(\\.|\\[0-7]{1,3}|\\x[a-fA-F0-9]{1,2}|[^\\\'\n])(')`, ByGroups(LiteralStringAffix, LiteralStringChar, LiteralStringChar, LiteralStringChar), nil}, - {`(\d+\.\d*|\.\d+|\d+)[eE][+-]?\d+[LlUu]*`, LiteralNumberFloat, nil}, - {`(\d+\.\d*|\.\d+|\d+[fF])[fF]?`, LiteralNumberFloat, nil}, - {`0x[0-9a-fA-F]+[LlUu]*`, LiteralNumberHex, nil}, - {`0[0-7]+[LlUu]*`, LiteralNumberOct, nil}, - {`\d+[LlUu]*`, LiteralNumberInteger, nil}, - {`\*/`, Error, nil}, - {`[~!%^&*+=|?:<>/-]`, Operator, nil}, - {`[()\[\],.]`, Punctuation, nil}, - {Words(``, `\b`, `asm`, `auto`, `break`, `case`, `const`, `continue`, `default`, `do`, `else`, `enum`, `extern`, `for`, `goto`, `if`, `register`, `restricted`, `return`, `sizeof`, `static`, `struct`, `switch`, `typedef`, `union`, `volatile`, `while`), Keyword, nil}, - {`(_Bool|_Complex|_Imaginary|array|atomic_bool|atomic_char|atomic_int|atomic_llong|atomic_long|atomic_schar|atomic_short|atomic_uchar|atomic_uint|atomic_ullong|atomic_ulong|atomic_ushort|auto|bool|boolean|BooleanVariables|Byte|byte|Char|char|char16_t|char32_t|class|complex|Const|const|const_cast|delete|double|dynamic_cast|enum|explicit|extern|Float|float|friend|inline|Int|int|int16_t|int32_t|int64_t|int8_t|Long|long|new|NULL|null|operator|private|PROGMEM|protected|public|register|reinterpret_cast|short|signed|sizeof|Static|static|static_cast|String|struct|typedef|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|virtual|Void|void|Volatile|volatile|word)\b`, KeywordType, nil}, - // Start of: Arduino-specific syntax - {`(and|final|If|Loop|loop|not|or|override|setup|Setup|throw|try|xor)\b`, Keyword, nil}, // Addition to keywords already defined by C++ - {`(ANALOG_MESSAGE|BIN|CHANGE|DEC|DEFAULT|DIGITAL_MESSAGE|EXTERNAL|FALLING|FIRMATA_STRING|HALF_PI|HEX|HIGH|INPUT|INPUT_PULLUP|INTERNAL|INTERNAL1V1|INTERNAL1V1|INTERNAL2V56|INTERNAL2V56|LED_BUILTIN|LED_BUILTIN_RX|LED_BUILTIN_TX|LOW|LSBFIRST|MSBFIRST|OCT|OUTPUT|PI|REPORT_ANALOG|REPORT_DIGITAL|RISING|SET_PIN_MODE|SYSEX_START|SYSTEM_RESET|TWO_PI)\b`, KeywordConstant, nil}, - {`(boolean|const|byte|word|string|String|array)\b`, NameVariable, nil}, - {`(Keyboard|KeyboardController|MouseController|SoftwareSerial|EthernetServer|EthernetClient|LiquidCrystal|RobotControl|GSMVoiceCall|EthernetUDP|EsploraTFT|HttpClient|RobotMotor|WiFiClient|GSMScanner|FileSystem|Scheduler|GSMServer|YunClient|YunServer|IPAddress|GSMClient|GSMModem|Keyboard|Ethernet|Console|GSMBand|Esplora|Stepper|Process|WiFiUDP|GSM_SMS|Mailbox|USBHost|Firmata|PImage|Client|Server|GSMPIN|FileIO|Bridge|Serial|EEPROM|Stream|Mouse|Audio|Servo|File|Task|GPRS|WiFi|Wire|TFT|GSM|SPI|SD)\b`, NameClass, nil}, - {`(abs|Abs|accept|ACos|acos|acosf|addParameter|analogRead|AnalogRead|analogReadResolution|AnalogReadResolution|analogReference|AnalogReference|analogWrite|AnalogWrite|analogWriteResolution|AnalogWriteResolution|answerCall|asin|ASin|asinf|atan|ATan|atan2|ATan2|atan2f|atanf|attach|attached|attachGPRS|attachInterrupt|AttachInterrupt|autoscroll|available|availableForWrite|background|beep|begin|beginPacket|beginSD|beginSMS|beginSpeaker|beginTFT|beginTransmission|beginWrite|bit|Bit|BitClear|bitClear|bitRead|BitRead|bitSet|BitSet|BitWrite|bitWrite|blink|blinkVersion|BSSID|buffer|byte|cbrt|cbrtf|Ceil|ceil|ceilf|changePIN|char|charAt|checkPIN|checkPUK|checkReg|circle|cityNameRead|cityNameWrite|clear|clearScreen|click|close|compareTo|compassRead|concat|config|connect|connected|constrain|Constrain|copysign|copysignf|cos|Cos|cosf|cosh|coshf|countryNameRead|countryNameWrite|createChar|cursor|debugPrint|degrees|Delay|delay|DelayMicroseconds|delayMicroseconds|detach|DetachInterrupt|detachInterrupt|DigitalPinToInterrupt|digitalPinToInterrupt|DigitalRead|digitalRead|DigitalWrite|digitalWrite|disconnect|display|displayLogos|drawBMP|drawCompass|encryptionType|end|endPacket|endSMS|endsWith|endTransmission|endWrite|equals|equalsIgnoreCase|exists|exitValue|Exp|exp|expf|fabs|fabsf|fdim|fdimf|fill|find|findUntil|float|floor|Floor|floorf|flush|fma|fmaf|fmax|fmaxf|fmin|fminf|fmod|fmodf|gatewayIP|get|getAsynchronously|getBand|getButton|getBytes|getCurrentCarrier|getIMEI|getKey|getModifiers|getOemKey|getPINUsed|getResult|getSignalStrength|getSocket|getVoiceCallStatus|getXChange|getYChange|hangCall|height|highByte|HighByte|home|hypot|hypotf|image|indexOf|int|interrupts|IPAddress|IRread|isActionDone|isAlpha|isAlphaNumeric|isAscii|isControl|isDigit|isDirectory|isfinite|isGraph|isHexadecimalDigit|isinf|isListening|isLowerCase|isnan|isPIN|isPressed|isPrintable|isPunct|isSpace|isUpperCase|isValid|isWhitespace|keyboardRead|keyPressed|keyReleased|knobRead|lastIndexOf|ldexp|ldexpf|leftToRight|length|line|lineFollowConfig|listen|listenOnLocalhost|loadImage|localIP|log|Log|log10|log10f|logf|long|lowByte|LowByte|lrint|lrintf|lround|lroundf|macAddress|maintain|map|Map|Max|max|messageAvailable|Micros|micros|millis|Millis|Min|min|mkdir|motorsStop|motorsWrite|mouseDragged|mouseMoved|mousePressed|mouseReleased|move|noAutoscroll|noBlink|noBuffer|noCursor|noDisplay|noFill|noInterrupts|NoInterrupts|noListenOnLocalhost|noStroke|noTone|NoTone|onReceive|onRequest|open|openNextFile|overflow|parseCommand|parseFloat|parseInt|parsePacket|pauseMode|peek|PinMode|pinMode|playFile|playMelody|point|pointTo|position|Pow|pow|powf|prepare|press|print|printFirmwareVersion|println|printVersion|process|processInput|PulseIn|pulseIn|pulseInLong|PulseInLong|put|radians|random|Random|randomSeed|RandomSeed|read|readAccelerometer|readBlue|readButton|readBytes|readBytesUntil|readGreen|readJoystickButton|readJoystickSwitch|readJoystickX|readJoystickY|readLightSensor|readMessage|readMicrophone|readNetworks|readRed|readSlider|readString|readStringUntil|readTemperature|ready|rect|release|releaseAll|remoteIP|remoteNumber|remotePort|remove|replace|requestFrom|retrieveCallingNumber|rewindDirectory|rightToLeft|rmdir|robotNameRead|robotNameWrite|round|roundf|RSSI|run|runAsynchronously|running|runShellCommand|runShellCommandAsynchronously|scanNetworks|scrollDisplayLeft|scrollDisplayRight|seek|sendAnalog|sendDigitalPortPair|sendDigitalPorts|sendString|sendSysex|Serial_Available|Serial_Begin|Serial_End|Serial_Flush|Serial_Peek|Serial_Print|Serial_Println|Serial_Read|serialEvent|setBand|setBitOrder|setCharAt|setClockDivider|setCursor|setDataMode|setDNS|setFirmwareVersion|setMode|setPINUsed|setSpeed|setTextSize|setTimeout|ShiftIn|shiftIn|ShiftOut|shiftOut|shutdown|signbit|sin|Sin|sinf|sinh|sinhf|size|sizeof|Sq|sq|Sqrt|sqrt|sqrtf|SSID|startLoop|startsWith|step|stop|stroke|subnetMask|substring|switchPIN|tan|Tan|tanf|tanh|tanhf|tempoWrite|text|toCharArray|toInt|toLowerCase|tone|Tone|toUpperCase|transfer|trim|trunc|truncf|tuneWrite|turn|updateIR|userNameRead|userNameWrite|voiceCall|waitContinue|width|WiFiServer|word|write|writeBlue|writeGreen|writeJSON|writeMessage|writeMicroseconds|writeRed|writeRGB|yield|Yield)\b`, NameFunction, nil}, - // End of: Arduino-specific syntax - {Words(``, `\b`, `inline`, `_inline`, `__inline`, `naked`, `restrict`, `thread`, `typename`), KeywordReserved, nil}, - {`(__m(128i|128d|128|64))\b`, KeywordReserved, nil}, - {Words(`__`, `\b`, `asm`, `int8`, `based`, `except`, `int16`, `stdcall`, `cdecl`, `fastcall`, `int32`, `declspec`, `finally`, `int64`, `try`, `leave`, `wchar_t`, `w64`, `unaligned`, `raise`, `noop`, `identifier`, `forceinline`, `assume`), KeywordReserved, nil}, - {`(true|false|NULL)\b`, NameBuiltin, nil}, - {`([a-zA-Z_]\w*)(\s*)(:)(?!:)`, ByGroups(NameLabel, Text, Punctuation), nil}, - {`[a-zA-Z_]\w*`, Name, nil}, - }, - "root": { - Include("whitespace"), - {`((?:[\w*\s])+?(?:\s|[*]))([a-zA-Z_]\w*)(\s*\([^;]*?\))([^;{]*)(\{)`, ByGroups(UsingSelf("root"), NameFunction, UsingSelf("root"), UsingSelf("root"), Punctuation), Push("function")}, - {`((?:[\w*\s])+?(?:\s|[*]))([a-zA-Z_]\w*)(\s*\([^;]*?\))([^;]*)(;)`, ByGroups(UsingSelf("root"), NameFunction, UsingSelf("root"), UsingSelf("root"), Punctuation), nil}, - Default(Push("statement")), - {Words(`__`, `\b`, `virtual_inheritance`, `uuidof`, `super`, `single_inheritance`, `multiple_inheritance`, `interface`, `event`), KeywordReserved, nil}, - {`__(offload|blockingoffload|outer)\b`, KeywordPseudo, nil}, - }, - "classname": { - {`[a-zA-Z_]\w*`, NameClass, Pop(1)}, - {`\s*(?=>)`, Text, Pop(1)}, - }, - "whitespace": { - {`^#if\s+0`, CommentPreproc, Push("if0")}, - {`^#`, CommentPreproc, Push("macro")}, - {`^(\s*(?:/[*].*?[*]/\s*)?)(#if\s+0)`, ByGroups(UsingSelf("root"), CommentPreproc), Push("if0")}, - {`^(\s*(?:/[*].*?[*]/\s*)?)(#)`, ByGroups(UsingSelf("root"), CommentPreproc), Push("macro")}, - {`\n`, Text, nil}, - {`\s+`, Text, nil}, - {`\\\n`, Text, nil}, - {`//(\n|[\w\W]*?[^\\]\n)`, CommentSingle, nil}, - {`/(\\\n)?[*][\w\W]*?[*](\\\n)?/`, CommentMultiline, nil}, - {`/(\\\n)?[*][\w\W]*`, CommentMultiline, nil}, - }, - "statement": { - Include("whitespace"), - Include("statements"), - {`[{}]`, Punctuation, nil}, - {`;`, Punctuation, Pop(1)}, - }, - "function": { - Include("whitespace"), - Include("statements"), - {`;`, Punctuation, nil}, - {`\{`, Punctuation, Push()}, - {`\}`, Punctuation, Pop(1)}, - }, - "string": { - {`"`, LiteralString, Pop(1)}, - {`\\([\\abfnrtv"\']|x[a-fA-F0-9]{2,4}|u[a-fA-F0-9]{4}|U[a-fA-F0-9]{8}|[0-7]{1,3})`, LiteralStringEscape, nil}, - {`[^\\"\n]+`, LiteralString, nil}, - {`\\\n`, LiteralString, nil}, - {`\\`, LiteralString, nil}, - }, - "macro": { - {`(include)(\s*(?:/[*].*?[*]/\s*)?)([^\n]+)`, ByGroups(CommentPreproc, Text, CommentPreprocFile), nil}, - {`[^/\n]+`, CommentPreproc, nil}, - {`/[*](.|\n)*?[*]/`, CommentMultiline, nil}, - {`//.*?\n`, CommentSingle, Pop(1)}, - {`/`, CommentPreproc, nil}, - {`(?<=\\)\n`, CommentPreproc, nil}, - {`\n`, CommentPreproc, Pop(1)}, - }, - "if0": { - {`^\s*#if.*?(?+*%\^/!=|])=?`, Operator, Push("slashstartsregex")}, - {`[{(\[;,]`, Punctuation, Push("slashstartsregex")}, - {`[})\].]`, Punctuation, nil}, - {`(break|continue|do|while|exit|for|if|else|return)\b`, Keyword, Push("slashstartsregex")}, - {`function\b`, KeywordDeclaration, Push("slashstartsregex")}, - {`(atan2|cos|exp|int|log|rand|sin|sqrt|srand|gensub|gsub|index|length|match|split|sprintf|sub|substr|tolower|toupper|close|fflush|getline|next|nextfile|print|printf|strftime|systime|delete|system)\b`, KeywordReserved, nil}, - {`(ARGC|ARGIND|ARGV|BEGIN|CONVFMT|ENVIRON|END|ERRNO|FIELDWIDTHS|FILENAME|FNR|FS|IGNORECASE|NF|NR|OFMT|OFS|ORFS|RLENGTH|RS|RSTART|RT|SUBSEP)\b`, NameBuiltin, nil}, - {`[$a-zA-Z_]\w*`, NameOther, nil}, - {`[0-9][0-9]*\.[0-9]+([eE][0-9]+)?[fd]?`, LiteralNumberFloat, nil}, - {`0x[0-9a-fA-F]+`, LiteralNumberHex, nil}, - {`[0-9]+`, LiteralNumberInteger, nil}, - {`"(\\\\|\\"|[^"])*"`, LiteralStringDouble, nil}, - {`'(\\\\|\\'|[^'])*'`, LiteralStringSingle, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/b/ballerina.go b/vendor/github.com/alecthomas/chroma/lexers/b/ballerina.go deleted file mode 100644 index 91dc901..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/b/ballerina.go +++ /dev/null @@ -1,46 +0,0 @@ -package b - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Ballerina lexer. -var Ballerina = internal.Register(MustNewLexer( - &Config{ - Name: "Ballerina", - Aliases: []string{"ballerina"}, - Filenames: []string{"*.bal"}, - MimeTypes: []string{"text/x-ballerina"}, - DotAll: true, - }, - Rules{ - "root": { - {`[^\S\n]+`, Text, nil}, - {`//.*?\n`, CommentSingle, nil}, - {`/\*.*?\*/`, CommentMultiline, nil}, - {`(break|catch|continue|done|else|finally|foreach|forever|fork|if|lock|match|return|throw|transaction|try|while)\b`, Keyword, nil}, - {`((?:(?:[^\W\d]|\$)[\w.\[\]$<>]*\s+)+?)((?:[^\W\d]|\$)[\w$]*)(\s*)(\()`, ByGroups(UsingSelf("root"), NameFunction, Text, Operator), nil}, - {`@[^\W\d][\w.]*`, NameDecorator, nil}, - {`(annotation|bind|but|endpoint|error|function|object|private|public|returns|service|type|var|with|worker)\b`, KeywordDeclaration, nil}, - {`(boolean|byte|decimal|float|int|json|map|nil|record|string|table|xml)\b`, KeywordType, nil}, - {`(true|false|null)\b`, KeywordConstant, nil}, - {`(import)(\s+)`, ByGroups(KeywordNamespace, Text), Push("import")}, - {`"(\\\\|\\"|[^"])*"`, LiteralString, nil}, - {`'\\.'|'[^\\]'|'\\u[0-9a-fA-F]{4}'`, LiteralStringChar, nil}, - {`(\.)((?:[^\W\d]|\$)[\w$]*)`, ByGroups(Operator, NameAttribute), nil}, - {`^\s*([^\W\d]|\$)[\w$]*:`, NameLabel, nil}, - {`([^\W\d]|\$)[\w$]*`, Name, nil}, - {`([0-9][0-9_]*\.([0-9][0-9_]*)?|\.[0-9][0-9_]*)([eE][+\-]?[0-9][0-9_]*)?[fFdD]?|[0-9][eE][+\-]?[0-9][0-9_]*[fFdD]?|[0-9]([eE][+\-]?[0-9][0-9_]*)?[fFdD]|0[xX]([0-9a-fA-F][0-9a-fA-F_]*\.?|([0-9a-fA-F][0-9a-fA-F_]*)?\.[0-9a-fA-F][0-9a-fA-F_]*)[pP][+\-]?[0-9][0-9_]*[fFdD]?`, LiteralNumberFloat, nil}, - {`0[xX][0-9a-fA-F][0-9a-fA-F_]*[lL]?`, LiteralNumberHex, nil}, - {`0[bB][01][01_]*[lL]?`, LiteralNumberBin, nil}, - {`0[0-7_]+[lL]?`, LiteralNumberOct, nil}, - {`0|[1-9][0-9_]*[lL]?`, LiteralNumberInteger, nil}, - {`[~^*!%&\[\](){}<>|+=:;,./?-]`, Operator, nil}, - {`\n`, Text, nil}, - }, - "import": { - {`[\w.]+`, NameNamespace, Pop(1)}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/b/bash.go b/vendor/github.com/alecthomas/chroma/lexers/b/bash.go deleted file mode 100644 index 38b3f22..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/b/bash.go +++ /dev/null @@ -1,95 +0,0 @@ -package b - -import ( - "regexp" - - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -var bashAnalyserRe = regexp.MustCompile(`(?m)^#!.*/bin/(?:env |)(?:bash|zsh|sh|ksh)`) - -// Bash lexer. -var Bash = internal.Register(MustNewLexer( - &Config{ - Name: "Bash", - Aliases: []string{"bash", "sh", "ksh", "zsh", "shell"}, - Filenames: []string{"*.sh", "*.ksh", "*.bash", "*.ebuild", "*.eclass", "*.exheres-0", "*.exlib", "*.zsh", "*.zshrc", ".bashrc", "bashrc", ".bash_*", "bash_*", "zshrc", ".zshrc", "PKGBUILD"}, - MimeTypes: []string{"application/x-sh", "application/x-shellscript"}, - }, - Rules{ - "root": { - Include("basic"), - {"`", LiteralStringBacktick, Push("backticks")}, - Include("data"), - Include("interp"), - }, - "interp": { - {`\$\(\(`, Keyword, Push("math")}, - {`\$\(`, Keyword, Push("paren")}, - {`\$\{#?`, LiteralStringInterpol, Push("curly")}, - {`\$[a-zA-Z_]\w*`, NameVariable, nil}, - {`\$(?:\d+|[#$?!_*@-])`, NameVariable, nil}, - {`\$`, Text, nil}, - }, - "basic": { - {`\b(if|fi|else|while|do|done|for|then|return|function|case|select|continue|until|esac|elif)(\s*)\b`, ByGroups(Keyword, Text), nil}, - {"\\b(alias|bg|bind|break|builtin|caller|cd|command|compgen|complete|declare|dirs|disown|echo|enable|eval|exec|exit|export|false|fc|fg|getopts|hash|help|history|jobs|kill|let|local|logout|popd|printf|pushd|pwd|read|readonly|set|shift|shopt|source|suspend|test|time|times|trap|true|type|typeset|ulimit|umask|unalias|unset|wait)(?=[\\s)`])", NameBuiltin, nil}, - {`\A#!.+\n`, CommentPreproc, nil}, - {`#.*\S`, CommentSingle, nil}, - {`\\[\w\W]`, LiteralStringEscape, nil}, - {`(\b\w+)(\s*)(\+?=)`, ByGroups(NameVariable, Text, Operator), nil}, - {`[\[\]{}()=]`, Operator, nil}, - {`<<<`, Operator, nil}, - {`<<-?\s*(\'?)\\?(\w+)[\w\W]+?\2`, LiteralString, nil}, - {`&&|\|\|`, Operator, nil}, - }, - "data": { - {`(?s)\$?"(\\\\|\\[0-7]+|\\.|[^"\\$])*"`, LiteralStringDouble, nil}, - {`"`, LiteralStringDouble, Push("string")}, - {`(?s)\$'(\\\\|\\[0-7]+|\\.|[^'\\])*'`, LiteralStringSingle, nil}, - {`(?s)'.*?'`, LiteralStringSingle, nil}, - {`;`, Punctuation, nil}, - {`&`, Punctuation, nil}, - {`\|`, Punctuation, nil}, - {`\s+`, Text, nil}, - {`\d+(?= |$)`, LiteralNumber, nil}, - {"[^=\\s\\[\\]{}()$\"\\'`\\\\<&|;]+", Text, nil}, - {`<`, Text, nil}, - }, - "string": { - {`"`, LiteralStringDouble, Pop(1)}, - {`(?s)(\\\\|\\[0-7]+|\\.|[^"\\$])+`, LiteralStringDouble, nil}, - Include("interp"), - }, - "curly": { - {`\}`, LiteralStringInterpol, Pop(1)}, - {`:-`, Keyword, nil}, - {`\w+`, NameVariable, nil}, - {"[^}:\"\\'`$\\\\]+", Punctuation, nil}, - {`:`, Punctuation, nil}, - Include("root"), - }, - "paren": { - {`\)`, Keyword, Pop(1)}, - Include("root"), - }, - "math": { - {`\)\)`, Keyword, Pop(1)}, - {`[-+*/%^|&]|\*\*|\|\|`, Operator, nil}, - {`\d+#\d+`, LiteralNumber, nil}, - {`\d+#(?! )`, LiteralNumber, nil}, - {`\d+`, LiteralNumber, nil}, - Include("root"), - }, - "backticks": { - {"`", LiteralStringBacktick, Pop(1)}, - Include("root"), - }, - }, -).SetAnalyser(func(text string) float32 { - if bashAnalyserRe.FindString(text) != "" { - return 1.0 - } - return 0.0 -})) diff --git a/vendor/github.com/alecthomas/chroma/lexers/b/batch.go b/vendor/github.com/alecthomas/chroma/lexers/b/batch.go deleted file mode 100644 index dc6ce52..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/b/batch.go +++ /dev/null @@ -1,194 +0,0 @@ -package b - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Batchfile lexer. -var Batchfile = internal.Register(MustNewLexer( - &Config{ - Name: "Batchfile", - Aliases: []string{"bat", "batch", "dosbatch", "winbatch"}, - Filenames: []string{"*.bat", "*.cmd"}, - MimeTypes: []string{"application/x-dos-batch"}, - CaseInsensitive: true, - }, - Rules{ - "root": { - {`\)((?=\()|(?=\^?[\t\v\f\r ,;=\xa0]|[&<>|\n\x1a]))(?:(?:[^\n\x1a^]|\^[\n\x1a]?[\w\W])*)`, CommentSingle, nil}, - {`(?=((?:(?<=^[^:])|^[^:]?)[\t\v\f\r ,;=\xa0]*)(:))`, Text, Push("follow")}, - {`(?:(?:(?:\^[\n\x1a])?[\t\v\f\r ,;=\xa0])+)`, UsingSelf("text"), nil}, - Include("redirect"), - {`[\n\x1a]+`, Text, nil}, - {`\(`, Punctuation, Push("root/compound")}, - {`@+`, Punctuation, nil}, - {`((?:for|if|rem)(?:(?=(?:\^[\n\x1a]?)?/)|(?:(?!\^)|(?<=m))(?:(?=\()|(?=\^?[\t\v\f\r ,;=\xa0]|[&<>|\n\x1a]))))((?:(?:(?:\^[\n\x1a])?[\t\v\f\r ,;=\xa0])+)?(?:(?:(?:\^[\n\x1a]?)?[^"\n\x1a&<>|\t\v\f\r ,;=\xa0])+)?(?:\^[\n\x1a]?)?/(?:\^[\n\x1a]?)?\?)`, ByGroups(Keyword, UsingSelf("text")), Push("follow")}, - {`(goto(?=(?:\^[\n\x1a]?)?[\t\v\f\r ,;=\xa0+./:[\\\]]|[\n\x1a&<>|(]))((?:(?:"[^\n\x1a"]*(?:"|(?=[\n\x1a])))|(?:(?:%(?:\*|(?:~[a-z]*(?:\$[^:]+:)?)?\d|[^%:\n\x1a]+(?::(?:~(?:-?\d+)?(?:,(?:-?\d+)?)?|(?:[^%\n\x1a^]|\^[^%\n\x1a])[^=\n\x1a]*=(?:[^%\n\x1a^]|\^[^%\n\x1a])*)?)?%))|(?:\^?![^!:\n\x1a]+(?::(?:~(?:-?\d+)?(?:,(?:-?\d+)?)?|(?:[^!\n\x1a^]|\^[^!\n\x1a])[^=\n\x1a]*=(?:[^!\n\x1a^]|\^[^!\n\x1a])*)?)?\^?!))|[^"%\n\x1a&<>|])*(?:\^[\n\x1a]?)?/(?:\^[\n\x1a]?)?\?(?:(?:"[^\n\x1a"]*(?:"|(?=[\n\x1a])))|(?:(?:%(?:\*|(?:~[a-z]*(?:\$[^:]+:)?)?\d|[^%:\n\x1a]+(?::(?:~(?:-?\d+)?(?:,(?:-?\d+)?)?|(?:[^%\n\x1a^]|\^[^%\n\x1a])[^=\n\x1a]*=(?:[^%\n\x1a^]|\^[^%\n\x1a])*)?)?%))|(?:\^?![^!:\n\x1a]+(?::(?:~(?:-?\d+)?(?:,(?:-?\d+)?)?|(?:[^!\n\x1a^]|\^[^!\n\x1a])[^=\n\x1a]*=(?:[^!\n\x1a^]|\^[^!\n\x1a])*)?)?\^?!))|[^"%\n\x1a&<>|])*)`, ByGroups(Keyword, UsingSelf("text")), Push("follow")}, - {Words(``, `(?=(?:\^[\n\x1a]?)?[\t\v\f\r ,;=\xa0+./:[\\\]]|[\n\x1a&<>|(])`, `assoc`, `break`, `cd`, `chdir`, `cls`, `color`, `copy`, `date`, `del`, `dir`, `dpath`, `echo`, `endlocal`, `erase`, `exit`, `ftype`, `keys`, `md`, `mkdir`, `mklink`, `move`, `path`, `pause`, `popd`, `prompt`, `pushd`, `rd`, `ren`, `rename`, `rmdir`, `setlocal`, `shift`, `start`, `time`, `title`, `type`, `ver`, `verify`, `vol`), Keyword, Push("follow")}, - {`(call)((?:(?:(?:\^[\n\x1a])?[\t\v\f\r ,;=\xa0])+)?)(:)`, ByGroups(Keyword, UsingSelf("text"), Punctuation), Push("call")}, - {`call(?=(?:\^[\n\x1a]?)?[\t\v\f\r ,;=\xa0+./:[\\\]]|[\n\x1a&<>|(])`, Keyword, nil}, - {`(for(?=\^?[\t\v\f\r ,;=\xa0]|[&<>|\n\x1a])(?!\^))((?:(?:(?:\^[\n\x1a])?[\t\v\f\r ,;=\xa0])+))(/f(?=\^?[\t\v\f\r ,;=\xa0]|[&<>|\n\x1a]))`, ByGroups(Keyword, UsingSelf("text"), Keyword), Push("for/f", "for")}, - {`(for(?=\^?[\t\v\f\r ,;=\xa0]|[&<>|\n\x1a])(?!\^))((?:(?:(?:\^[\n\x1a])?[\t\v\f\r ,;=\xa0])+))(/l(?=\^?[\t\v\f\r ,;=\xa0]|[&<>|\n\x1a]))`, ByGroups(Keyword, UsingSelf("text"), Keyword), Push("for/l", "for")}, - {`for(?=\^?[\t\v\f\r ,;=\xa0]|[&<>|\n\x1a])(?!\^)`, Keyword, Push("for2", "for")}, - {`(goto(?=(?:\^[\n\x1a]?)?[\t\v\f\r ,;=\xa0+./:[\\\]]|[\n\x1a&<>|(]))((?:(?:(?:\^[\n\x1a])?[\t\v\f\r ,;=\xa0])+)?)(:?)`, ByGroups(Keyword, UsingSelf("text"), Punctuation), Push("label")}, - {`(if(?:(?=\()|(?=\^?[\t\v\f\r ,;=\xa0]|[&<>|\n\x1a]))(?!\^))((?:(?:(?:\^[\n\x1a])?[\t\v\f\r ,;=\xa0])+)?)((?:/i(?=\^?[\t\v\f\r ,;=\xa0]|[&<>|\n\x1a]))?)((?:(?:(?:\^[\n\x1a])?[\t\v\f\r ,;=\xa0])+)?)((?:not(?=\^?[\t\v\f\r ,;=\xa0]|[&<>|\n\x1a]))?)((?:(?:(?:\^[\n\x1a])?[\t\v\f\r ,;=\xa0])+)?)`, ByGroups(Keyword, UsingSelf("text"), Keyword, UsingSelf("text"), Keyword, UsingSelf("text")), Push("(?", "if")}, - {`rem(((?=\()|(?=\^?[\t\v\f\r ,;=\xa0]|[&<>|\n\x1a]))(?:(?:(?:\^[\n\x1a])?[\t\v\f\r ,;=\xa0])+)?(?:[&<>|]+|(?:(?:"[^\n\x1a"]*(?:"|(?=[\n\x1a])))|(?:(?:%(?:\*|(?:~[a-z]*(?:\$[^:]+:)?)?\d|[^%:\n\x1a]+(?::(?:~(?:-?\d+)?(?:,(?:-?\d+)?)?|(?:[^%\n\x1a^]|\^[^%\n\x1a])[^=\n\x1a]*=(?:[^%\n\x1a^]|\^[^%\n\x1a])*)?)?%))|(?:\^?![^!:\n\x1a]+(?::(?:~(?:-?\d+)?(?:,(?:-?\d+)?)?|(?:[^!\n\x1a^]|\^[^!\n\x1a])[^=\n\x1a]*=(?:[^!\n\x1a^]|\^[^!\n\x1a])*)?)?\^?!))|(?:(?:(?:\^[\n\x1a]?)?[^"\n\x1a&<>|\t\v\f\r ,;=\xa0])+))+)?.*|(?=(?:\^[\n\x1a]?)?[\t\v\f\r ,;=\xa0+./:[\\\]]|[\n\x1a&<>|(])(?:(?:[^\n\x1a^]|\^[\n\x1a]?[\w\W])*))`, CommentSingle, Push("follow")}, - {`(set(?=(?:\^[\n\x1a]?)?[\t\v\f\r ,;=\xa0+./:[\\\]]|[\n\x1a&<>|(]))((?:(?:\^[\n\x1a]?)?[^\S\n])*)(/a)`, ByGroups(Keyword, UsingSelf("text"), Keyword), Push("arithmetic")}, - {`(set(?=(?:\^[\n\x1a]?)?[\t\v\f\r ,;=\xa0+./:[\\\]]|[\n\x1a&<>|(]))((?:(?:\^[\n\x1a]?)?[^\S\n])*)((?:/p)?)((?:(?:\^[\n\x1a]?)?[^\S\n])*)((?:(?:(?:\^[\n\x1a]?)?[^"\n\x1a&<>|^=]|\^[\n\x1a]?[^"=])+)?)((?:(?:\^[\n\x1a]?)?=)?)`, ByGroups(Keyword, UsingSelf("text"), Keyword, UsingSelf("text"), UsingSelf("variable"), Punctuation), Push("follow")}, - Default(Push("follow")), - }, - "follow": { - {`((?:(?<=^[^:])|^[^:]?)[\t\v\f\r ,;=\xa0]*)(:)([\t\v\f\r ,;=\xa0]*)((?:(?:[^\n\x1a&<>|\t\v\f\r ,;=\xa0+:^]|\^[\n\x1a]?[\w\W])*))(.*)`, ByGroups(Text, Punctuation, Text, NameLabel, CommentSingle), nil}, - Include("redirect"), - {`(?=[\n\x1a])`, Text, Pop(1)}, - {`\|\|?|&&?`, Punctuation, Pop(1)}, - Include("text"), - }, - "arithmetic": { - {`0[0-7]+`, LiteralNumberOct, nil}, - {`0x[\da-f]+`, LiteralNumberHex, nil}, - {`\d+`, LiteralNumberInteger, nil}, - {`[(),]+`, Punctuation, nil}, - {`([=+\-*/!~]|%|\^\^)+`, Operator, nil}, - {`((?:"[^\n\x1a"]*(?:"|(?=[\n\x1a])))|(?:(?:%(?:\*|(?:~[a-z]*(?:\$[^:]+:)?)?\d|[^%:\n\x1a]+(?::(?:~(?:-?\d+)?(?:,(?:-?\d+)?)?|(?:[^%\n\x1a^]|\^[^%\n\x1a])[^=\n\x1a]*=(?:[^%\n\x1a^]|\^[^%\n\x1a])*)?)?%))|(?:\^?![^!:\n\x1a]+(?::(?:~(?:-?\d+)?(?:,(?:-?\d+)?)?|(?:[^!\n\x1a^]|\^[^!\n\x1a])[^=\n\x1a]*=(?:[^!\n\x1a^]|\^[^!\n\x1a])*)?)?\^?!))|(\^[\n\x1a]?)?[^()=+\-*/!~%^"\n\x1a&<>|\t\v\f\r ,;=\xa0]|\^[\n\x1a\t\v\f\r ,;=\xa0]?[\w\W])+`, UsingSelf("variable"), nil}, - {`(?=[\x00|&])`, Text, Pop(1)}, - Include("follow"), - }, - "call": { - {`(:?)((?:(?:[^\n\x1a&<>|\t\v\f\r ,;=\xa0+:^]|\^[\n\x1a]?[\w\W])*))`, ByGroups(Punctuation, NameLabel), Pop(1)}, - }, - "label": { - {`((?:(?:[^\n\x1a&<>|\t\v\f\r ,;=\xa0+:^]|\^[\n\x1a]?[\w\W])*)?)((?:(?:"[^\n\x1a"]*(?:"|(?=[\n\x1a])))|(?:(?:%(?:\*|(?:~[a-z]*(?:\$[^:]+:)?)?\d|[^%:\n\x1a]+(?::(?:~(?:-?\d+)?(?:,(?:-?\d+)?)?|(?:[^%\n\x1a^]|\^[^%\n\x1a])[^=\n\x1a]*=(?:[^%\n\x1a^]|\^[^%\n\x1a])*)?)?%))|(?:\^?![^!:\n\x1a]+(?::(?:~(?:-?\d+)?(?:,(?:-?\d+)?)?|(?:[^!\n\x1a^]|\^[^!\n\x1a])[^=\n\x1a]*=(?:[^!\n\x1a^]|\^[^!\n\x1a])*)?)?\^?!))|\^[\n\x1a]?[\w\W]|[^"%^\n\x1a&<>|])*)`, ByGroups(NameLabel, CommentSingle), Pop(1)}, - }, - "redirect": { - {`((?:(?<=[\n\x1a\t\v\f\r ,;=\xa0])\d)?)(>>?&|<&)([\n\x1a\t\v\f\r ,;=\xa0]*)(\d)`, ByGroups(LiteralNumberInteger, Punctuation, Text, LiteralNumberInteger), nil}, - {`((?:(?<=[\n\x1a\t\v\f\r ,;=\xa0])(?>?|<)((?:(?:(?:\^[\n\x1a])?[\t\v\f\r ,;=\xa0])+)?(?:[&<>|]+|(?:(?:"[^\n\x1a"]*(?:"|(?=[\n\x1a])))|(?:(?:%(?:\*|(?:~[a-z]*(?:\$[^:]+:)?)?\d|[^%:\n\x1a]+(?::(?:~(?:-?\d+)?(?:,(?:-?\d+)?)?|(?:[^%\n\x1a^]|\^[^%\n\x1a])[^=\n\x1a]*=(?:[^%\n\x1a^]|\^[^%\n\x1a])*)?)?%))|(?:\^?![^!:\n\x1a]+(?::(?:~(?:-?\d+)?(?:,(?:-?\d+)?)?|(?:[^!\n\x1a^]|\^[^!\n\x1a])[^=\n\x1a]*=(?:[^!\n\x1a^]|\^[^!\n\x1a])*)?)?\^?!))|(?:(?:(?:\^[\n\x1a]?)?[^"\n\x1a&<>|\t\v\f\r ,;=\xa0])+))+))`, ByGroups(LiteralNumberInteger, Punctuation, UsingSelf("text")), nil}, - }, - "root/compound": { - {`\)`, Punctuation, Pop(1)}, - {`(?=((?:(?<=^[^:])|^[^:]?)[\t\v\f\r ,;=\xa0]*)(:))`, Text, Push("follow/compound")}, - {`(?:(?:(?:\^[\n\x1a])?[\t\v\f\r ,;=\xa0])+)`, UsingSelf("text"), nil}, - Include("redirect/compound"), - {`[\n\x1a]+`, Text, nil}, - {`\(`, Punctuation, Push("root/compound")}, - {`@+`, Punctuation, nil}, - {`((?:for|if|rem)(?:(?=(?:\^[\n\x1a]?)?/)|(?:(?!\^)|(?<=m))(?:(?=\()|(?:(?=\))|(?=\^?[\t\v\f\r ,;=\xa0]|[&<>|\n\x1a])))))((?:(?:(?:\^[\n\x1a])?[\t\v\f\r ,;=\xa0])+)?(?:(?:(?:\^[\n\x1a]?)?[^"\n\x1a&<>|\t\v\f\r ,;=\xa0)])+)?(?:\^[\n\x1a]?)?/(?:\^[\n\x1a]?)?\?)`, ByGroups(Keyword, UsingSelf("text")), Push("follow/compound")}, - {`(goto(?:(?=\))|(?=(?:\^[\n\x1a]?)?[\t\v\f\r ,;=\xa0+./:[\\\]]|[\n\x1a&<>|(])))((?:(?:"[^\n\x1a"]*(?:"|(?=[\n\x1a])))|(?:(?:%(?:\*|(?:~[a-z]*(?:\$[^:]+:)?)?\d|[^%:\n\x1a]+(?::(?:~(?:-?\d+)?(?:,(?:-?\d+)?)?|(?:[^%\n\x1a^]|\^[^%\n\x1a])[^=\n\x1a]*=(?:[^%\n\x1a^]|\^[^%\n\x1a])*)?)?%))|(?:\^?![^!:\n\x1a]+(?::(?:~(?:-?\d+)?(?:,(?:-?\d+)?)?|(?:[^!\n\x1a^]|\^[^!\n\x1a])[^=\n\x1a]*=(?:[^!\n\x1a^]|\^[^!\n\x1a])*)?)?\^?!))|[^"%\n\x1a&<>|)])*(?:\^[\n\x1a]?)?/(?:\^[\n\x1a]?)?\?(?:(?:"[^\n\x1a"]*(?:"|(?=[\n\x1a])))|(?:(?:%(?:\*|(?:~[a-z]*(?:\$[^:]+:)?)?\d|[^%:\n\x1a]+(?::(?:~(?:-?\d+)?(?:,(?:-?\d+)?)?|(?:[^%\n\x1a^]|\^[^%\n\x1a])[^=\n\x1a]*=(?:[^%\n\x1a^]|\^[^%\n\x1a])*)?)?%))|(?:\^?![^!:\n\x1a]+(?::(?:~(?:-?\d+)?(?:,(?:-?\d+)?)?|(?:[^!\n\x1a^]|\^[^!\n\x1a])[^=\n\x1a]*=(?:[^!\n\x1a^]|\^[^!\n\x1a])*)?)?\^?!))|[^"%\n\x1a&<>|)])*)`, ByGroups(Keyword, UsingSelf("text")), Push("follow/compound")}, - {Words(``, `(?:(?=\))|(?=(?:\^[\n\x1a]?)?[\t\v\f\r ,;=\xa0+./:[\\\]]|[\n\x1a&<>|(]))`, `assoc`, `break`, `cd`, `chdir`, `cls`, `color`, `copy`, `date`, `del`, `dir`, `dpath`, `echo`, `endlocal`, `erase`, `exit`, `ftype`, `keys`, `md`, `mkdir`, `mklink`, `move`, `path`, `pause`, `popd`, `prompt`, `pushd`, `rd`, `ren`, `rename`, `rmdir`, `setlocal`, `shift`, `start`, `time`, `title`, `type`, `ver`, `verify`, `vol`), Keyword, Push("follow/compound")}, - {`(call)((?:(?:(?:\^[\n\x1a])?[\t\v\f\r ,;=\xa0])+)?)(:)`, ByGroups(Keyword, UsingSelf("text"), Punctuation), Push("call/compound")}, - {`call(?:(?=\))|(?=(?:\^[\n\x1a]?)?[\t\v\f\r ,;=\xa0+./:[\\\]]|[\n\x1a&<>|(]))`, Keyword, nil}, - {`(for(?:(?=\))|(?=\^?[\t\v\f\r ,;=\xa0]|[&<>|\n\x1a]))(?!\^))((?:(?:(?:\^[\n\x1a])?[\t\v\f\r ,;=\xa0])+))(/f(?:(?=\))|(?=\^?[\t\v\f\r ,;=\xa0]|[&<>|\n\x1a])))`, ByGroups(Keyword, UsingSelf("text"), Keyword), Push("for/f", "for")}, - {`(for(?:(?=\))|(?=\^?[\t\v\f\r ,;=\xa0]|[&<>|\n\x1a]))(?!\^))((?:(?:(?:\^[\n\x1a])?[\t\v\f\r ,;=\xa0])+))(/l(?:(?=\))|(?=\^?[\t\v\f\r ,;=\xa0]|[&<>|\n\x1a])))`, ByGroups(Keyword, UsingSelf("text"), Keyword), Push("for/l", "for")}, - {`for(?:(?=\))|(?=\^?[\t\v\f\r ,;=\xa0]|[&<>|\n\x1a]))(?!\^)`, Keyword, Push("for2", "for")}, - {`(goto(?:(?=\))|(?=(?:\^[\n\x1a]?)?[\t\v\f\r ,;=\xa0+./:[\\\]]|[\n\x1a&<>|(])))((?:(?:(?:\^[\n\x1a])?[\t\v\f\r ,;=\xa0])+)?)(:?)`, ByGroups(Keyword, UsingSelf("text"), Punctuation), Push("label/compound")}, - {`(if(?:(?=\()|(?:(?=\))|(?=\^?[\t\v\f\r ,;=\xa0]|[&<>|\n\x1a])))(?!\^))((?:(?:(?:\^[\n\x1a])?[\t\v\f\r ,;=\xa0])+)?)((?:/i(?:(?=\))|(?=\^?[\t\v\f\r ,;=\xa0]|[&<>|\n\x1a])))?)((?:(?:(?:\^[\n\x1a])?[\t\v\f\r ,;=\xa0])+)?)((?:not(?:(?=\))|(?=\^?[\t\v\f\r ,;=\xa0]|[&<>|\n\x1a])))?)((?:(?:(?:\^[\n\x1a])?[\t\v\f\r ,;=\xa0])+)?)`, ByGroups(Keyword, UsingSelf("text"), Keyword, UsingSelf("text"), Keyword, UsingSelf("text")), Push("(?", "if")}, - {`rem(((?=\()|(?:(?=\))|(?=\^?[\t\v\f\r ,;=\xa0]|[&<>|\n\x1a])))(?:(?:(?:\^[\n\x1a])?[\t\v\f\r ,;=\xa0])+)?(?:[&<>|]+|(?:(?:"[^\n\x1a"]*(?:"|(?=[\n\x1a])))|(?:(?:%(?:\*|(?:~[a-z]*(?:\$[^:]+:)?)?\d|[^%:\n\x1a]+(?::(?:~(?:-?\d+)?(?:,(?:-?\d+)?)?|(?:[^%\n\x1a^]|\^[^%\n\x1a])[^=\n\x1a]*=(?:[^%\n\x1a^]|\^[^%\n\x1a])*)?)?%))|(?:\^?![^!:\n\x1a]+(?::(?:~(?:-?\d+)?(?:,(?:-?\d+)?)?|(?:[^!\n\x1a^]|\^[^!\n\x1a])[^=\n\x1a]*=(?:[^!\n\x1a^]|\^[^!\n\x1a])*)?)?\^?!))|(?:(?:(?:\^[\n\x1a]?)?[^"\n\x1a&<>|\t\v\f\r ,;=\xa0])+))+)?.*|(?:(?=\))|(?=(?:\^[\n\x1a]?)?[\t\v\f\r ,;=\xa0+./:[\\\]]|[\n\x1a&<>|(]))(?:(?:[^\n\x1a^)]|\^[\n\x1a]?[^)])*))`, CommentSingle, Push("follow/compound")}, - {`(set(?:(?=\))|(?=(?:\^[\n\x1a]?)?[\t\v\f\r ,;=\xa0+./:[\\\]]|[\n\x1a&<>|(])))((?:(?:\^[\n\x1a]?)?[^\S\n])*)(/a)`, ByGroups(Keyword, UsingSelf("text"), Keyword), Push("arithmetic/compound")}, - {`(set(?:(?=\))|(?=(?:\^[\n\x1a]?)?[\t\v\f\r ,;=\xa0+./:[\\\]]|[\n\x1a&<>|(])))((?:(?:\^[\n\x1a]?)?[^\S\n])*)((?:/p)?)((?:(?:\^[\n\x1a]?)?[^\S\n])*)((?:(?:(?:\^[\n\x1a]?)?[^"\n\x1a&<>|^=)]|\^[\n\x1a]?[^"=])+)?)((?:(?:\^[\n\x1a]?)?=)?)`, ByGroups(Keyword, UsingSelf("text"), Keyword, UsingSelf("text"), UsingSelf("variable"), Punctuation), Push("follow/compound")}, - Default(Push("follow/compound")), - }, - "follow/compound": { - {`(?=\))`, Text, Pop(1)}, - {`((?:(?<=^[^:])|^[^:]?)[\t\v\f\r ,;=\xa0]*)(:)([\t\v\f\r ,;=\xa0]*)((?:(?:[^\n\x1a&<>|\t\v\f\r ,;=\xa0+:^)]|\^[\n\x1a]?[^)])*))(.*)`, ByGroups(Text, Punctuation, Text, NameLabel, CommentSingle), nil}, - Include("redirect/compound"), - {`(?=[\n\x1a])`, Text, Pop(1)}, - {`\|\|?|&&?`, Punctuation, Pop(1)}, - Include("text"), - }, - "arithmetic/compound": { - {`(?=\))`, Text, Pop(1)}, - {`0[0-7]+`, LiteralNumberOct, nil}, - {`0x[\da-f]+`, LiteralNumberHex, nil}, - {`\d+`, LiteralNumberInteger, nil}, - {`[(),]+`, Punctuation, nil}, - {`([=+\-*/!~]|%|\^\^)+`, Operator, nil}, - {`((?:"[^\n\x1a"]*(?:"|(?=[\n\x1a])))|(?:(?:%(?:\*|(?:~[a-z]*(?:\$[^:]+:)?)?\d|[^%:\n\x1a]+(?::(?:~(?:-?\d+)?(?:,(?:-?\d+)?)?|(?:[^%\n\x1a^]|\^[^%\n\x1a])[^=\n\x1a]*=(?:[^%\n\x1a^]|\^[^%\n\x1a])*)?)?%))|(?:\^?![^!:\n\x1a]+(?::(?:~(?:-?\d+)?(?:,(?:-?\d+)?)?|(?:[^!\n\x1a^]|\^[^!\n\x1a])[^=\n\x1a]*=(?:[^!\n\x1a^]|\^[^!\n\x1a])*)?)?\^?!))|(\^[\n\x1a]?)?[^()=+\-*/!~%^"\n\x1a&<>|\t\v\f\r ,;=\xa0]|\^[\n\x1a\t\v\f\r ,;=\xa0]?[^)])+`, UsingSelf("variable"), nil}, - {`(?=[\x00|&])`, Text, Pop(1)}, - Include("follow"), - }, - "call/compound": { - {`(?=\))`, Text, Pop(1)}, - {`(:?)((?:(?:[^\n\x1a&<>|\t\v\f\r ,;=\xa0+:^)]|\^[\n\x1a]?[^)])*))`, ByGroups(Punctuation, NameLabel), Pop(1)}, - }, - "label/compound": { - {`(?=\))`, Text, Pop(1)}, - {`((?:(?:[^\n\x1a&<>|\t\v\f\r ,;=\xa0+:^)]|\^[\n\x1a]?[^)])*)?)((?:(?:"[^\n\x1a"]*(?:"|(?=[\n\x1a])))|(?:(?:%(?:\*|(?:~[a-z]*(?:\$[^:]+:)?)?\d|[^%:\n\x1a]+(?::(?:~(?:-?\d+)?(?:,(?:-?\d+)?)?|(?:[^%\n\x1a^]|\^[^%\n\x1a])[^=\n\x1a]*=(?:[^%\n\x1a^]|\^[^%\n\x1a])*)?)?%))|(?:\^?![^!:\n\x1a]+(?::(?:~(?:-?\d+)?(?:,(?:-?\d+)?)?|(?:[^!\n\x1a^]|\^[^!\n\x1a])[^=\n\x1a]*=(?:[^!\n\x1a^]|\^[^!\n\x1a])*)?)?\^?!))|\^[\n\x1a]?[^)]|[^"%^\n\x1a&<>|)])*)`, ByGroups(NameLabel, CommentSingle), Pop(1)}, - }, - "redirect/compound": { - {`((?:(?<=[\n\x1a\t\v\f\r ,;=\xa0])\d)?)(>>?&|<&)([\n\x1a\t\v\f\r ,;=\xa0]*)(\d)`, ByGroups(LiteralNumberInteger, Punctuation, Text, LiteralNumberInteger), nil}, - {`((?:(?<=[\n\x1a\t\v\f\r ,;=\xa0])(?>?|<)((?:(?:(?:\^[\n\x1a])?[\t\v\f\r ,;=\xa0])+)?(?:[&<>|]+|(?:(?:"[^\n\x1a"]*(?:"|(?=[\n\x1a])))|(?:(?:%(?:\*|(?:~[a-z]*(?:\$[^:]+:)?)?\d|[^%:\n\x1a]+(?::(?:~(?:-?\d+)?(?:,(?:-?\d+)?)?|(?:[^%\n\x1a^]|\^[^%\n\x1a])[^=\n\x1a]*=(?:[^%\n\x1a^]|\^[^%\n\x1a])*)?)?%))|(?:\^?![^!:\n\x1a]+(?::(?:~(?:-?\d+)?(?:,(?:-?\d+)?)?|(?:[^!\n\x1a^]|\^[^!\n\x1a])[^=\n\x1a]*=(?:[^!\n\x1a^]|\^[^!\n\x1a])*)?)?\^?!))|(?:(?:(?:\^[\n\x1a]?)?[^"\n\x1a&<>|\t\v\f\r ,;=\xa0)])+))+))`, ByGroups(LiteralNumberInteger, Punctuation, UsingSelf("text")), nil}, - }, - "variable-or-escape": { - {`(?:(?:%(?:\*|(?:~[a-z]*(?:\$[^:]+:)?)?\d|[^%:\n\x1a]+(?::(?:~(?:-?\d+)?(?:,(?:-?\d+)?)?|(?:[^%\n\x1a^]|\^[^%\n\x1a])[^=\n\x1a]*=(?:[^%\n\x1a^]|\^[^%\n\x1a])*)?)?%))|(?:\^?![^!:\n\x1a]+(?::(?:~(?:-?\d+)?(?:,(?:-?\d+)?)?|(?:[^!\n\x1a^]|\^[^!\n\x1a])[^=\n\x1a]*=(?:[^!\n\x1a^]|\^[^!\n\x1a])*)?)?\^?!))`, NameVariable, nil}, - {`%%|\^[\n\x1a]?(\^!|[\w\W])`, LiteralStringEscape, nil}, - }, - "string": { - {`"`, LiteralStringDouble, Pop(1)}, - {`(?:(?:%(?:\*|(?:~[a-z]*(?:\$[^:]+:)?)?\d|[^%:\n\x1a]+(?::(?:~(?:-?\d+)?(?:,(?:-?\d+)?)?|(?:[^%\n\x1a^]|\^[^%\n\x1a])[^=\n\x1a]*=(?:[^%\n\x1a^]|\^[^%\n\x1a])*)?)?%))|(?:\^?![^!:\n\x1a]+(?::(?:~(?:-?\d+)?(?:,(?:-?\d+)?)?|(?:[^!\n\x1a^]|\^[^!\n\x1a])[^=\n\x1a]*=(?:[^!\n\x1a^]|\^[^!\n\x1a])*)?)?\^?!))`, NameVariable, nil}, - {`\^!|%%`, LiteralStringEscape, nil}, - {`[^"%^\n\x1a]+|[%^]`, LiteralStringDouble, nil}, - Default(Pop(1)), - }, - "sqstring": { - Include("variable-or-escape"), - {`[^%]+|%`, LiteralStringSingle, nil}, - }, - "bqstring": { - Include("variable-or-escape"), - {`[^%]+|%`, LiteralStringBacktick, nil}, - }, - "text": { - {`"`, LiteralStringDouble, Push("string")}, - Include("variable-or-escape"), - {`[^"%^\n\x1a&<>|\t\v\f\r ,;=\xa0\d)]+|.`, Text, nil}, - }, - "variable": { - {`"`, LiteralStringDouble, Push("string")}, - Include("variable-or-escape"), - {`[^"%^\n\x1a]+|.`, NameVariable, nil}, - }, - "for": { - {`((?:(?:(?:\^[\n\x1a])?[\t\v\f\r ,;=\xa0])+))(in)((?:(?:(?:\^[\n\x1a])?[\t\v\f\r ,;=\xa0])+))(\()`, ByGroups(UsingSelf("text"), Keyword, UsingSelf("text"), Punctuation), Pop(1)}, - Include("follow"), - }, - "for2": { - {`\)`, Punctuation, nil}, - {`((?:(?:(?:\^[\n\x1a])?[\t\v\f\r ,;=\xa0])+))(do(?=\^?[\t\v\f\r ,;=\xa0]|[&<>|\n\x1a]))`, ByGroups(UsingSelf("text"), Keyword), Pop(1)}, - {`[\n\x1a]+`, Text, nil}, - Include("follow"), - }, - "for/f": { - {`(")((?:(?:(?:%(?:\*|(?:~[a-z]*(?:\$[^:]+:)?)?\d|[^%:\n\x1a]+(?::(?:~(?:-?\d+)?(?:,(?:-?\d+)?)?|(?:[^%\n\x1a^]|\^[^%\n\x1a])[^=\n\x1a]*=(?:[^%\n\x1a^]|\^[^%\n\x1a])*)?)?%))|(?:\^?![^!:\n\x1a]+(?::(?:~(?:-?\d+)?(?:,(?:-?\d+)?)?|(?:[^!\n\x1a^]|\^[^!\n\x1a])[^=\n\x1a]*=(?:[^!\n\x1a^]|\^[^!\n\x1a])*)?)?\^?!))|[^"])*?")([\n\x1a\t\v\f\r ,;=\xa0]*)(\))`, ByGroups(LiteralStringDouble, UsingSelf("string"), Text, Punctuation), nil}, - {`"`, LiteralStringDouble, Push("#pop", "for2", "string")}, - {`('(?:%%|(?:(?:%(?:\*|(?:~[a-z]*(?:\$[^:]+:)?)?\d|[^%:\n\x1a]+(?::(?:~(?:-?\d+)?(?:,(?:-?\d+)?)?|(?:[^%\n\x1a^]|\^[^%\n\x1a])[^=\n\x1a]*=(?:[^%\n\x1a^]|\^[^%\n\x1a])*)?)?%))|(?:\^?![^!:\n\x1a]+(?::(?:~(?:-?\d+)?(?:,(?:-?\d+)?)?|(?:[^!\n\x1a^]|\^[^!\n\x1a])[^=\n\x1a]*=(?:[^!\n\x1a^]|\^[^!\n\x1a])*)?)?\^?!))|[\w\W])*?')([\n\x1a\t\v\f\r ,;=\xa0]*)(\))`, ByGroups(UsingSelf("sqstring"), Text, Punctuation), nil}, - {"(`(?:%%|(?:(?:%(?:\\*|(?:~[a-z]*(?:\\$[^:]+:)?)?\\d|[^%:\\n\\x1a]+(?::(?:~(?:-?\\d+)?(?:,(?:-?\\d+)?)?|(?:[^%\\n\\x1a^]|\\^[^%\\n\\x1a])[^=\\n\\x1a]*=(?:[^%\\n\\x1a^]|\\^[^%\\n\\x1a])*)?)?%))|(?:\\^?![^!:\\n\\x1a]+(?::(?:~(?:-?\\d+)?(?:,(?:-?\\d+)?)?|(?:[^!\\n\\x1a^]|\\^[^!\\n\\x1a])[^=\\n\\x1a]*=(?:[^!\\n\\x1a^]|\\^[^!\\n\\x1a])*)?)?\\^?!))|[\\w\\W])*?`)([\\n\\x1a\\t\\v\\f\\r ,;=\\xa0]*)(\\))", ByGroups(UsingSelf("bqstring"), Text, Punctuation), nil}, - Include("for2"), - }, - "for/l": { - {`-?\d+`, LiteralNumberInteger, nil}, - Include("for2"), - }, - "if": { - {`((?:cmdextversion|errorlevel)(?=\^?[\t\v\f\r ,;=\xa0]|[&<>|\n\x1a]))((?:(?:(?:\^[\n\x1a])?[\t\v\f\r ,;=\xa0])+))(\d+)`, ByGroups(Keyword, UsingSelf("text"), LiteralNumberInteger), Pop(1)}, - {`(defined(?=\^?[\t\v\f\r ,;=\xa0]|[&<>|\n\x1a]))((?:(?:(?:\^[\n\x1a])?[\t\v\f\r ,;=\xa0])+))((?:[&<>|]+|(?:(?:"[^\n\x1a"]*(?:"|(?=[\n\x1a])))|(?:(?:%(?:\*|(?:~[a-z]*(?:\$[^:]+:)?)?\d|[^%:\n\x1a]+(?::(?:~(?:-?\d+)?(?:,(?:-?\d+)?)?|(?:[^%\n\x1a^]|\^[^%\n\x1a])[^=\n\x1a]*=(?:[^%\n\x1a^]|\^[^%\n\x1a])*)?)?%))|(?:\^?![^!:\n\x1a]+(?::(?:~(?:-?\d+)?(?:,(?:-?\d+)?)?|(?:[^!\n\x1a^]|\^[^!\n\x1a])[^=\n\x1a]*=(?:[^!\n\x1a^]|\^[^!\n\x1a])*)?)?\^?!))|(?:(?:(?:\^[\n\x1a]?)?[^"\n\x1a&<>|\t\v\f\r ,;=\xa0])+))+))`, ByGroups(Keyword, UsingSelf("text"), UsingSelf("variable")), Pop(1)}, - {`(exist(?=\^?[\t\v\f\r ,;=\xa0]|[&<>|\n\x1a]))((?:(?:(?:\^[\n\x1a])?[\t\v\f\r ,;=\xa0])+)(?:[&<>|]+|(?:(?:"[^\n\x1a"]*(?:"|(?=[\n\x1a])))|(?:(?:%(?:\*|(?:~[a-z]*(?:\$[^:]+:)?)?\d|[^%:\n\x1a]+(?::(?:~(?:-?\d+)?(?:,(?:-?\d+)?)?|(?:[^%\n\x1a^]|\^[^%\n\x1a])[^=\n\x1a]*=(?:[^%\n\x1a^]|\^[^%\n\x1a])*)?)?%))|(?:\^?![^!:\n\x1a]+(?::(?:~(?:-?\d+)?(?:,(?:-?\d+)?)?|(?:[^!\n\x1a^]|\^[^!\n\x1a])[^=\n\x1a]*=(?:[^!\n\x1a^]|\^[^!\n\x1a])*)?)?\^?!))|(?:(?:(?:\^[\n\x1a]?)?[^"\n\x1a&<>|\t\v\f\r ,;=\xa0])+))+))`, ByGroups(Keyword, UsingSelf("text")), Pop(1)}, - {`((?:-?(?:0[0-7]+|0x[\da-f]+|\d+)(?=\^?[\t\v\f\r ,;=\xa0]|[&<>|\n\x1a]))(?:(?:(?:\^[\n\x1a])?[\t\v\f\r ,;=\xa0])+))((?:equ|geq|gtr|leq|lss|neq))((?:(?:(?:\^[\n\x1a])?[\t\v\f\r ,;=\xa0])+)(?:-?(?:0[0-7]+|0x[\da-f]+|\d+)(?=\^?[\t\v\f\r ,;=\xa0]|[&<>|\n\x1a])))`, ByGroups(UsingSelf("arithmetic"), OperatorWord, UsingSelf("arithmetic")), Pop(1)}, - {`(?:[&<>|]+|(?:(?:"[^\n\x1a"]*(?:"|(?=[\n\x1a])))|(?:(?:%(?:\*|(?:~[a-z]*(?:\$[^:]+:)?)?\d|[^%:\n\x1a]+(?::(?:~(?:-?\d+)?(?:,(?:-?\d+)?)?|(?:[^%\n\x1a^]|\^[^%\n\x1a])[^=\n\x1a]*=(?:[^%\n\x1a^]|\^[^%\n\x1a])*)?)?%))|(?:\^?![^!:\n\x1a]+(?::(?:~(?:-?\d+)?(?:,(?:-?\d+)?)?|(?:[^!\n\x1a^]|\^[^!\n\x1a])[^=\n\x1a]*=(?:[^!\n\x1a^]|\^[^!\n\x1a])*)?)?\^?!))|(?:(?:(?:\^[\n\x1a]?)?[^"\n\x1a&<>|\t\v\f\r ,;=\xa0])+))+)`, UsingSelf("text"), Push("#pop", "if2")}, - }, - "if2": { - {`((?:(?:(?:\^[\n\x1a])?[\t\v\f\r ,;=\xa0])+)?)(==)((?:(?:(?:\^[\n\x1a])?[\t\v\f\r ,;=\xa0])+)?(?:[&<>|]+|(?:(?:"[^\n\x1a"]*(?:"|(?=[\n\x1a])))|(?:(?:%(?:\*|(?:~[a-z]*(?:\$[^:]+:)?)?\d|[^%:\n\x1a]+(?::(?:~(?:-?\d+)?(?:,(?:-?\d+)?)?|(?:[^%\n\x1a^]|\^[^%\n\x1a])[^=\n\x1a]*=(?:[^%\n\x1a^]|\^[^%\n\x1a])*)?)?%))|(?:\^?![^!:\n\x1a]+(?::(?:~(?:-?\d+)?(?:,(?:-?\d+)?)?|(?:[^!\n\x1a^]|\^[^!\n\x1a])[^=\n\x1a]*=(?:[^!\n\x1a^]|\^[^!\n\x1a])*)?)?\^?!))|(?:(?:(?:\^[\n\x1a]?)?[^"\n\x1a&<>|\t\v\f\r ,;=\xa0])+))+))`, ByGroups(UsingSelf("text"), Operator, UsingSelf("text")), Pop(1)}, - {`((?:(?:(?:\^[\n\x1a])?[\t\v\f\r ,;=\xa0])+))((?:equ|geq|gtr|leq|lss|neq))((?:(?:(?:\^[\n\x1a])?[\t\v\f\r ,;=\xa0])+)(?:[&<>|]+|(?:(?:"[^\n\x1a"]*(?:"|(?=[\n\x1a])))|(?:(?:%(?:\*|(?:~[a-z]*(?:\$[^:]+:)?)?\d|[^%:\n\x1a]+(?::(?:~(?:-?\d+)?(?:,(?:-?\d+)?)?|(?:[^%\n\x1a^]|\^[^%\n\x1a])[^=\n\x1a]*=(?:[^%\n\x1a^]|\^[^%\n\x1a])*)?)?%))|(?:\^?![^!:\n\x1a]+(?::(?:~(?:-?\d+)?(?:,(?:-?\d+)?)?|(?:[^!\n\x1a^]|\^[^!\n\x1a])[^=\n\x1a]*=(?:[^!\n\x1a^]|\^[^!\n\x1a])*)?)?\^?!))|(?:(?:(?:\^[\n\x1a]?)?[^"\n\x1a&<>|\t\v\f\r ,;=\xa0])+))+))`, ByGroups(UsingSelf("text"), OperatorWord, UsingSelf("text")), Pop(1)}, - }, - "(?": { - {`(?:(?:(?:\^[\n\x1a])?[\t\v\f\r ,;=\xa0])+)`, UsingSelf("text"), nil}, - {`\(`, Punctuation, Push("#pop", "else?", "root/compound")}, - Default(Pop(1)), - }, - "else?": { - {`(?:(?:(?:\^[\n\x1a])?[\t\v\f\r ,;=\xa0])+)`, UsingSelf("text"), nil}, - {`else(?=\^?[\t\v\f\r ,;=\xa0]|[&<>|\n\x1a])`, Keyword, Pop(1)}, - Default(Pop(1)), - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/b/bibtex.go b/vendor/github.com/alecthomas/chroma/lexers/b/bibtex.go deleted file mode 100644 index 1d76b1d..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/b/bibtex.go +++ /dev/null @@ -1,76 +0,0 @@ -package b - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Bibtex lexer. -var Bibtex = internal.Register(MustNewLexer( - &Config{ - Name: "BibTeX", - Aliases: []string{"bib", "bibtex"}, - Filenames: []string{"*.bib"}, - MimeTypes: []string{"text/x-bibtex"}, - NotMultiline: true, - CaseInsensitive: true, - }, - Rules{ - "root": { - Include("whitespace"), - {`@comment`, Comment, nil}, - {`@preamble`, NameClass, Push("closing-brace", "value", "opening-brace")}, - {`@string`, NameClass, Push("closing-brace", "field", "opening-brace")}, - {"@[a-z_@!$&*+\\-./:;<>?\\[\\\\\\]^`|~][\\w@!$&*+\\-./:;<>?\\[\\\\\\]^`|~]*", NameClass, Push("closing-brace", "command-body", "opening-brace")}, - {`.+`, Comment, nil}, - }, - "opening-brace": { - Include("whitespace"), - {`[{(]`, Punctuation, Pop(1)}, - }, - "closing-brace": { - Include("whitespace"), - {`[})]`, Punctuation, Pop(1)}, - }, - "command-body": { - Include("whitespace"), - {`[^\s\,\}]+`, NameLabel, Push("#pop", "fields")}, - }, - "fields": { - Include("whitespace"), - {`,`, Punctuation, Push("field")}, - Default(Pop(1)), - }, - "field": { - Include("whitespace"), - {"[a-z_@!$&*+\\-./:;<>?\\[\\\\\\]^`|~][\\w@!$&*+\\-./:;<>?\\[\\\\\\]^`|~]*", NameAttribute, Push("value", "=")}, - Default(Pop(1)), - }, - "=": { - Include("whitespace"), - {`=`, Punctuation, Pop(1)}, - }, - "value": { - Include("whitespace"), - {"[a-z_@!$&*+\\-./:;<>?\\[\\\\\\]^`|~][\\w@!$&*+\\-./:;<>?\\[\\\\\\]^`|~]*", NameVariable, nil}, - {`"`, LiteralString, Push("quoted-string")}, - {`\{`, LiteralString, Push("braced-string")}, - {`[\d]+`, LiteralNumber, nil}, - {`#`, Punctuation, nil}, - Default(Pop(1)), - }, - "quoted-string": { - {`\{`, LiteralString, Push("braced-string")}, - {`"`, LiteralString, Pop(1)}, - {`[^\{\"]+`, LiteralString, nil}, - }, - "braced-string": { - {`\{`, LiteralString, Push()}, - {`\}`, LiteralString, Pop(1)}, - {`[^\{\}]+`, LiteralString, nil}, - }, - "whitespace": { - {`\s+`, Text, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/b/blitz.go b/vendor/github.com/alecthomas/chroma/lexers/b/blitz.go deleted file mode 100644 index 5d5ffc8..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/b/blitz.go +++ /dev/null @@ -1,48 +0,0 @@ -package b - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Blitzbasic lexer. -var Blitzbasic = internal.Register(MustNewLexer( - &Config{ - Name: "BlitzBasic", - Aliases: []string{"blitzbasic", "b3d", "bplus"}, - Filenames: []string{"*.bb", "*.decls"}, - MimeTypes: []string{"text/x-bb"}, - CaseInsensitive: true, - }, - Rules{ - "root": { - {`[ \t]+`, Text, nil}, - {`;.*?\n`, CommentSingle, nil}, - {`"`, LiteralStringDouble, Push("string")}, - {`[0-9]+\.[0-9]*(?!\.)`, LiteralNumberFloat, nil}, - {`\.[0-9]+(?!\.)`, LiteralNumberFloat, nil}, - {`[0-9]+`, LiteralNumberInteger, nil}, - {`\$[0-9a-f]+`, LiteralNumberHex, nil}, - {`\%[10]+`, LiteralNumberBin, nil}, - {Words(`\b`, `\b`, `Shl`, `Shr`, `Sar`, `Mod`, `Or`, `And`, `Not`, `Abs`, `Sgn`, `Handle`, `Int`, `Float`, `Str`, `First`, `Last`, `Before`, `After`), Operator, nil}, - {`([+\-*/~=<>^])`, Operator, nil}, - {`[(),:\[\]\\]`, Punctuation, nil}, - {`\.([ \t]*)([a-z]\w*)`, NameLabel, nil}, - {`\b(New)\b([ \t]+)([a-z]\w*)`, ByGroups(KeywordReserved, Text, NameClass), nil}, - {`\b(Gosub|Goto)\b([ \t]+)([a-z]\w*)`, ByGroups(KeywordReserved, Text, NameLabel), nil}, - {`\b(Object)\b([ \t]*)([.])([ \t]*)([a-z]\w*)\b`, ByGroups(Operator, Text, Punctuation, Text, NameClass), nil}, - {`\b([a-z]\w*)(?:([ \t]*)(@{1,2}|[#$%])|([ \t]*)([.])([ \t]*)(?:([a-z]\w*)))?\b([ \t]*)(\()`, ByGroups(NameFunction, Text, KeywordType, Text, Punctuation, Text, NameClass, Text, Punctuation), nil}, - {`\b(Function)\b([ \t]+)([a-z]\w*)(?:([ \t]*)(@{1,2}|[#$%])|([ \t]*)([.])([ \t]*)(?:([a-z]\w*)))?`, ByGroups(KeywordReserved, Text, NameFunction, Text, KeywordType, Text, Punctuation, Text, NameClass), nil}, - {`\b(Type)([ \t]+)([a-z]\w*)`, ByGroups(KeywordReserved, Text, NameClass), nil}, - {`\b(Pi|True|False|Null)\b`, KeywordConstant, nil}, - {`\b(Local|Global|Const|Field|Dim)\b`, KeywordDeclaration, nil}, - {Words(`\b`, `\b`, `End`, `Return`, `Exit`, `Chr`, `Len`, `Asc`, `New`, `Delete`, `Insert`, `Include`, `Function`, `Type`, `If`, `Then`, `Else`, `ElseIf`, `EndIf`, `For`, `To`, `Next`, `Step`, `Each`, `While`, `Wend`, `Repeat`, `Until`, `Forever`, `Select`, `Case`, `Default`, `Goto`, `Gosub`, `Data`, `Read`, `Restore`), KeywordReserved, nil}, - {`([a-z]\w*)(?:([ \t]*)(@{1,2}|[#$%])|([ \t]*)([.])([ \t]*)(?:([a-z]\w*)))?`, ByGroups(NameVariable, Text, KeywordType, Text, Punctuation, Text, NameClass), nil}, - }, - "string": { - {`""`, LiteralStringDouble, nil}, - {`"C?`, LiteralStringDouble, Pop(1)}, - {`[^"]+`, LiteralStringDouble, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/b/bnf.go b/vendor/github.com/alecthomas/chroma/lexers/b/bnf.go deleted file mode 100644 index 5123a45..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/b/bnf.go +++ /dev/null @@ -1,24 +0,0 @@ -package b - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Bnf lexer. -var Bnf = internal.Register(MustNewLexer( - &Config{ - Name: "BNF", - Aliases: []string{"bnf"}, - Filenames: []string{"*.bnf"}, - MimeTypes: []string{"text/x-bnf"}, - }, - Rules{ - "root": { - {`(<)([ -;=?-~]+)(>)`, ByGroups(Punctuation, NameClass, Punctuation), nil}, - {`::=`, Operator, nil}, - {`[^<>:]+`, Text, nil}, - {`.`, Text, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/b/brainfuck.go b/vendor/github.com/alecthomas/chroma/lexers/b/brainfuck.go deleted file mode 100644 index 6fac5f5..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/b/brainfuck.go +++ /dev/null @@ -1,34 +0,0 @@ -package b - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Brainfuck lexer. -var Brainfuck = internal.Register(MustNewLexer( - &Config{ - Name: "Brainfuck", - Aliases: []string{"brainfuck", "bf"}, - Filenames: []string{"*.bf", "*.b"}, - MimeTypes: []string{"application/x-brainfuck"}, - }, - Rules{ - "common": { - {`[.,]+`, NameTag, nil}, - {`[+-]+`, NameBuiltin, nil}, - {`[<>]+`, NameVariable, nil}, - {`[^.,+\-<>\[\]]+`, Comment, nil}, - }, - "root": { - {`\[`, Keyword, Push("loop")}, - {`\]`, Error, nil}, - Include("common"), - }, - "loop": { - {`\[`, Keyword, Push()}, - {`\]`, Keyword, Pop(1)}, - Include("common"), - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/c/c.go b/vendor/github.com/alecthomas/chroma/lexers/c/c.go deleted file mode 100644 index df2c0fa..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/c/c.go +++ /dev/null @@ -1,91 +0,0 @@ -package c - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// C lexer. -var C = internal.Register(MustNewLexer( - &Config{ - Name: "C", - Aliases: []string{"c"}, - Filenames: []string{"*.c", "*.h", "*.idc"}, - MimeTypes: []string{"text/x-chdr", "text/x-csrc"}, - }, - Rules{ - "whitespace": { - {`^#if\s+0`, CommentPreproc, Push("if0")}, - {`^#`, CommentPreproc, Push("macro")}, - {`^(\s*(?:/[*].*?[*]/\s*)?)(#if\s+0)`, ByGroups(UsingSelf("root"), CommentPreproc), Push("if0")}, - {`^(\s*(?:/[*].*?[*]/\s*)?)(#)`, ByGroups(UsingSelf("root"), CommentPreproc), Push("macro")}, - {`\n`, Text, nil}, - {`\s+`, Text, nil}, - {`\\\n`, Text, nil}, - {`//(\n|[\w\W]*?[^\\]\n)`, CommentSingle, nil}, - {`/(\\\n)?[*][\w\W]*?[*](\\\n)?/`, CommentMultiline, nil}, - {`/(\\\n)?[*][\w\W]*`, CommentMultiline, nil}, - }, - "statements": { - {`(L?)(")`, ByGroups(LiteralStringAffix, LiteralString), Push("string")}, - {`(L?)(')(\\.|\\[0-7]{1,3}|\\x[a-fA-F0-9]{1,2}|[^\\\'\n])(')`, ByGroups(LiteralStringAffix, LiteralStringChar, LiteralStringChar, LiteralStringChar), nil}, - {`(\d+\.\d*|\.\d+|\d+)[eE][+-]?\d+[LlUu]*`, LiteralNumberFloat, nil}, - {`(\d+\.\d*|\.\d+|\d+[fF])[fF]?`, LiteralNumberFloat, nil}, - {`0x[0-9a-fA-F]+[LlUu]*`, LiteralNumberHex, nil}, - {`0[0-7]+[LlUu]*`, LiteralNumberOct, nil}, - {`\d+[LlUu]*`, LiteralNumberInteger, nil}, - {`\*/`, Error, nil}, - {`[~!%^&*+=|?:<>/-]`, Operator, nil}, - {`[()\[\],.]`, Punctuation, nil}, - {Words(``, `\b`, `asm`, `auto`, `break`, `case`, `const`, `continue`, `default`, `do`, `else`, `enum`, `extern`, `for`, `goto`, `if`, `register`, `restricted`, `return`, `sizeof`, `static`, `struct`, `switch`, `typedef`, `union`, `volatile`, `while`), Keyword, nil}, - {`(bool|int|long|float|short|double|char|unsigned|signed|void)\b`, KeywordType, nil}, - {Words(``, `\b`, `inline`, `_inline`, `__inline`, `naked`, `restrict`, `thread`, `typename`), KeywordReserved, nil}, - {`(__m(128i|128d|128|64))\b`, KeywordReserved, nil}, - {Words(`__`, `\b`, `asm`, `int8`, `based`, `except`, `int16`, `stdcall`, `cdecl`, `fastcall`, `int32`, `declspec`, `finally`, `int64`, `try`, `leave`, `wchar_t`, `w64`, `unaligned`, `raise`, `noop`, `identifier`, `forceinline`, `assume`), KeywordReserved, nil}, - {`(true|false|NULL)\b`, NameBuiltin, nil}, - {`([a-zA-Z_]\w*)(\s*)(:)(?!:)`, ByGroups(NameLabel, Text, Punctuation), nil}, - {`[a-zA-Z_]\w*`, Name, nil}, - }, - "root": { - Include("whitespace"), - {`((?:[\w*\s])+?(?:\s|[*]))([a-zA-Z_]\w*)(\s*\([^;]*?\))([^;{]*)(\{)`, ByGroups(UsingSelf("root"), NameFunction, UsingSelf("root"), UsingSelf("root"), Punctuation), Push("function")}, - {`((?:[\w*\s])+?(?:\s|[*]))([a-zA-Z_]\w*)(\s*\([^;]*?\))([^;]*)(;)`, ByGroups(UsingSelf("root"), NameFunction, UsingSelf("root"), UsingSelf("root"), Punctuation), nil}, - Default(Push("statement")), - }, - "statement": { - Include("whitespace"), - Include("statements"), - {`[{}]`, Punctuation, nil}, - {`;`, Punctuation, Pop(1)}, - }, - "function": { - Include("whitespace"), - Include("statements"), - {`;`, Punctuation, nil}, - {`\{`, Punctuation, Push()}, - {`\}`, Punctuation, Pop(1)}, - }, - "string": { - {`"`, LiteralString, Pop(1)}, - {`\\([\\abfnrtv"\']|x[a-fA-F0-9]{2,4}|u[a-fA-F0-9]{4}|U[a-fA-F0-9]{8}|[0-7]{1,3})`, LiteralStringEscape, nil}, - {`[^\\"\n]+`, LiteralString, nil}, - {`\\\n`, LiteralString, nil}, - {`\\`, LiteralString, nil}, - }, - "macro": { - {`(include)(\s*(?:/[*].*?[*]/\s*)?)([^\n]+)`, ByGroups(CommentPreproc, Text, CommentPreprocFile), nil}, - {`[^/\n]+`, CommentPreproc, nil}, - {`/[*](.|\n)*?[*]/`, CommentMultiline, nil}, - {`//.*?\n`, CommentSingle, Pop(1)}, - {`/`, CommentPreproc, nil}, - {`(?<=\\)\n`, CommentPreproc, nil}, - {`\n`, CommentPreproc, Pop(1)}, - }, - "if0": { - {`^\s*#if.*?(?|+=:;,./?-]`, Operator, nil}, - {`\d{1,3}(_\d{3})+\.\d{1,3}(_\d{3})+[kMGTPmunpf]?`, LiteralNumberFloat, nil}, - {`\d{1,3}(_\d{3})+\.[0-9]+([eE][+-]?[0-9]+)?[kMGTPmunpf]?`, LiteralNumberFloat, nil}, - {`[0-9][0-9]*\.\d{1,3}(_\d{3})+[kMGTPmunpf]?`, LiteralNumberFloat, nil}, - {`[0-9][0-9]*\.[0-9]+([eE][+-]?[0-9]+)?[kMGTPmunpf]?`, LiteralNumberFloat, nil}, - {`#([0-9a-fA-F]{4})(_[0-9a-fA-F]{4})+`, LiteralNumberHex, nil}, - {`#[0-9a-fA-F]+`, LiteralNumberHex, nil}, - {`\$([01]{4})(_[01]{4})+`, LiteralNumberBin, nil}, - {`\$[01]+`, LiteralNumberBin, nil}, - {`\d{1,3}(_\d{3})+[kMGTP]?`, LiteralNumberInteger, nil}, - {`[0-9]+[kMGTP]?`, LiteralNumberInteger, nil}, - {`\n`, Text, nil}, - }, - "class": { - {`[A-Za-z_]\w*`, NameClass, Pop(1)}, - }, - "import": { - {`[a-z][\w.]*`, NameNamespace, Pop(1)}, - }, - "comment": { - {`[^*/]`, CommentMultiline, nil}, - {`/\*`, CommentMultiline, Push()}, - {`\*/`, CommentMultiline, Pop(1)}, - {`[*/]`, CommentMultiline, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/c/cfengine3.go b/vendor/github.com/alecthomas/chroma/lexers/c/cfengine3.go deleted file mode 100644 index f96252f..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/c/cfengine3.go +++ /dev/null @@ -1,56 +0,0 @@ -package c - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Cfengine3 lexer. -var Cfengine3 = internal.Register(MustNewLexer( - &Config{ - Name: "CFEngine3", - Aliases: []string{"cfengine3", "cf3"}, - Filenames: []string{"*.cf"}, - MimeTypes: []string{}, - }, - Rules{ - "root": { - {`#.*?\n`, Comment, nil}, - {`(body)(\s+)(\S+)(\s+)(control)`, ByGroups(Keyword, Text, Keyword, Text, Keyword), nil}, - {`(body|bundle)(\s+)(\S+)(\s+)(\w+)(\()`, ByGroups(Keyword, Text, Keyword, Text, NameFunction, Punctuation), Push("arglist")}, - {`(body|bundle)(\s+)(\S+)(\s+)(\w+)`, ByGroups(Keyword, Text, Keyword, Text, NameFunction), nil}, - {`(")([^"]+)(")(\s+)(string|slist|int|real)(\s*)(=>)(\s*)`, ByGroups(Punctuation, NameVariable, Punctuation, Text, KeywordType, Text, Operator, Text), nil}, - {`(\S+)(\s*)(=>)(\s*)`, ByGroups(KeywordReserved, Text, Operator, Text), nil}, - {`"`, LiteralString, Push("string")}, - {`(\w+)(\()`, ByGroups(NameFunction, Punctuation), nil}, - {`([\w.!&|()]+)(::)`, ByGroups(NameClass, Punctuation), nil}, - {`(\w+)(:)`, ByGroups(KeywordDeclaration, Punctuation), nil}, - {`@[{(][^)}]+[})]`, NameVariable, nil}, - {`[(){},;]`, Punctuation, nil}, - {`=>`, Operator, nil}, - {`->`, Operator, nil}, - {`\d+\.\d+`, LiteralNumberFloat, nil}, - {`\d+`, LiteralNumberInteger, nil}, - {`\w+`, NameFunction, nil}, - {`\s+`, Text, nil}, - }, - "string": { - {`\$[{(]`, LiteralStringInterpol, Push("interpol")}, - {`\\.`, LiteralStringEscape, nil}, - {`"`, LiteralString, Pop(1)}, - {`\n`, LiteralString, nil}, - {`.`, LiteralString, nil}, - }, - "interpol": { - {`\$[{(]`, LiteralStringInterpol, Push()}, - {`[})]`, LiteralStringInterpol, Pop(1)}, - {`[^${()}]+`, LiteralStringInterpol, nil}, - }, - "arglist": { - {`\)`, Punctuation, Pop(1)}, - {`,`, Punctuation, nil}, - {`\w+`, NameVariable, nil}, - {`\s+`, Text, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/c/chaiscript.go b/vendor/github.com/alecthomas/chroma/lexers/c/chaiscript.go deleted file mode 100644 index d2aa50d..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/c/chaiscript.go +++ /dev/null @@ -1,63 +0,0 @@ -package c - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Chaiscript lexer. -var Chaiscript = internal.Register(MustNewLexer( - &Config{ - Name: "ChaiScript", - Aliases: []string{"chai", "chaiscript"}, - Filenames: []string{"*.chai"}, - MimeTypes: []string{"text/x-chaiscript", "application/x-chaiscript"}, - DotAll: true, - }, - Rules{ - "commentsandwhitespace": { - {`\s+`, Text, nil}, - {`//.*?\n`, CommentSingle, nil}, - {`/\*.*?\*/`, CommentMultiline, nil}, - {`^\#.*?\n`, CommentSingle, nil}, - }, - "slashstartsregex": { - Include("commentsandwhitespace"), - {`/(\\.|[^[/\\\n]|\[(\\.|[^\]\\\n])*])+/([gim]+\b|\B)`, LiteralStringRegex, Pop(1)}, - {`(?=/)`, Text, Push("#pop", "badregex")}, - Default(Pop(1)), - }, - "badregex": { - {`\n`, Text, Pop(1)}, - }, - "root": { - Include("commentsandwhitespace"), - {`\n`, Text, nil}, - {`[^\S\n]+`, Text, nil}, - {`\+\+|--|~|&&|\?|:|\|\||\\(?=\n)|\.\.(<<|>>>?|==?|!=?|[-<>+*%&|^/])=?`, Operator, Push("slashstartsregex")}, - {`[{(\[;,]`, Punctuation, Push("slashstartsregex")}, - {`[})\].]`, Punctuation, nil}, - {`[=+\-*/]`, Operator, nil}, - {`(for|in|while|do|break|return|continue|if|else|throw|try|catch)\b`, Keyword, Push("slashstartsregex")}, - {`(var)\b`, KeywordDeclaration, Push("slashstartsregex")}, - {`(attr|def|fun)\b`, KeywordReserved, nil}, - {`(true|false)\b`, KeywordConstant, nil}, - {`(eval|throw)\b`, NameBuiltin, nil}, - {"`\\S+`", NameBuiltin, nil}, - {`[$a-zA-Z_]\w*`, NameOther, nil}, - {`[0-9][0-9]*\.[0-9]+([eE][0-9]+)?[fd]?`, LiteralNumberFloat, nil}, - {`0x[0-9a-fA-F]+`, LiteralNumberHex, nil}, - {`[0-9]+`, LiteralNumberInteger, nil}, - {`"`, LiteralStringDouble, Push("dqstring")}, - {`'(\\\\|\\'|[^'])*'`, LiteralStringSingle, nil}, - }, - "dqstring": { - {`\$\{[^"}]+?\}`, LiteralStringInterpol, nil}, - {`\$`, LiteralStringDouble, nil}, - {`\\\\`, LiteralStringDouble, nil}, - {`\\"`, LiteralStringDouble, nil}, - {`[^\\"$]+`, LiteralStringDouble, nil}, - {`"`, LiteralStringDouble, Pop(1)}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/c/cheetah.go b/vendor/github.com/alecthomas/chroma/lexers/c/cheetah.go deleted file mode 100644 index b2cb9c4..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/c/cheetah.go +++ /dev/null @@ -1,37 +0,0 @@ -package c - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" - . "github.com/alecthomas/chroma/lexers/p" // nolint -) - -// Cheetah lexer. -var Cheetah = internal.Register(MustNewLexer( - &Config{ - Name: "Cheetah", - Aliases: []string{"cheetah", "spitfire"}, - Filenames: []string{"*.tmpl", "*.spt"}, - MimeTypes: []string{"application/x-cheetah", "application/x-spitfire"}, - }, - Rules{ - "root": { - {`(##[^\n]*)$`, ByGroups(Comment), nil}, - {`#[*](.|\n)*?[*]#`, Comment, nil}, - {`#end[^#\n]*(?:#|$)`, CommentPreproc, nil}, - {`#slurp$`, CommentPreproc, nil}, - {`(#[a-zA-Z]+)([^#\n]*)(#|$)`, ByGroups(CommentPreproc, Using(Python), CommentPreproc), nil}, - {`(\$)([a-zA-Z_][\w.]*\w)`, ByGroups(CommentPreproc, Using(Python)), nil}, - {`(\$\{!?)(.*?)(\})(?s)`, ByGroups(CommentPreproc, Using(Python), CommentPreproc), nil}, - {`(?sx) - (.+?) # anything, followed by: - (?: - (?=\#[#a-zA-Z]*) | # an eval comment - (?=\$[a-zA-Z_{]) | # a substitution - \Z # end of string - ) - `, Other, nil}, - {`\s+`, Text, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/c/cl.go b/vendor/github.com/alecthomas/chroma/lexers/c/cl.go deleted file mode 100644 index fdc9729..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/c/cl.go +++ /dev/null @@ -1,306 +0,0 @@ -package c - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -var ( - clBuiltinFunctions = []string{ - "<", "<=", "=", ">", ">=", "-", "/", "/=", "*", "+", "1-", "1+", - "abort", "abs", "acons", "acos", "acosh", "add-method", "adjoin", - "adjustable-array-p", "adjust-array", "allocate-instance", - "alpha-char-p", "alphanumericp", "append", "apply", "apropos", - "apropos-list", "aref", "arithmetic-error-operands", - "arithmetic-error-operation", "array-dimension", "array-dimensions", - "array-displacement", "array-element-type", "array-has-fill-pointer-p", - "array-in-bounds-p", "arrayp", "array-rank", "array-row-major-index", - "array-total-size", "ash", "asin", "asinh", "assoc", "assoc-if", - "assoc-if-not", "atan", "atanh", "atom", "bit", "bit-and", "bit-andc1", - "bit-andc2", "bit-eqv", "bit-ior", "bit-nand", "bit-nor", "bit-not", - "bit-orc1", "bit-orc2", "bit-vector-p", "bit-xor", "boole", - "both-case-p", "boundp", "break", "broadcast-stream-streams", - "butlast", "byte", "byte-position", "byte-size", "caaaar", "caaadr", - "caaar", "caadar", "caaddr", "caadr", "caar", "cadaar", "cadadr", - "cadar", "caddar", "cadddr", "caddr", "cadr", "call-next-method", "car", - "cdaaar", "cdaadr", "cdaar", "cdadar", "cdaddr", "cdadr", "cdar", - "cddaar", "cddadr", "cddar", "cdddar", "cddddr", "cdddr", "cddr", "cdr", - "ceiling", "cell-error-name", "cerror", "change-class", "char", "char<", - "char<=", "char=", "char>", "char>=", "char/=", "character", - "characterp", "char-code", "char-downcase", "char-equal", - "char-greaterp", "char-int", "char-lessp", "char-name", - "char-not-equal", "char-not-greaterp", "char-not-lessp", "char-upcase", - "cis", "class-name", "class-of", "clear-input", "clear-output", - "close", "clrhash", "code-char", "coerce", "compile", - "compiled-function-p", "compile-file", "compile-file-pathname", - "compiler-macro-function", "complement", "complex", "complexp", - "compute-applicable-methods", "compute-restarts", "concatenate", - "concatenated-stream-streams", "conjugate", "cons", "consp", - "constantly", "constantp", "continue", "copy-alist", "copy-list", - "copy-pprint-dispatch", "copy-readtable", "copy-seq", "copy-structure", - "copy-symbol", "copy-tree", "cos", "cosh", "count", "count-if", - "count-if-not", "decode-float", "decode-universal-time", "delete", - "delete-duplicates", "delete-file", "delete-if", "delete-if-not", - "delete-package", "denominator", "deposit-field", "describe", - "describe-object", "digit-char", "digit-char-p", "directory", - "directory-namestring", "disassemble", "documentation", "dpb", - "dribble", "echo-stream-input-stream", "echo-stream-output-stream", - "ed", "eighth", "elt", "encode-universal-time", "endp", - "enough-namestring", "ensure-directories-exist", - "ensure-generic-function", "eq", "eql", "equal", "equalp", "error", - "eval", "evenp", "every", "exp", "export", "expt", "fboundp", - "fceiling", "fdefinition", "ffloor", "fifth", "file-author", - "file-error-pathname", "file-length", "file-namestring", - "file-position", "file-string-length", "file-write-date", - "fill", "fill-pointer", "find", "find-all-symbols", "find-class", - "find-if", "find-if-not", "find-method", "find-package", "find-restart", - "find-symbol", "finish-output", "first", "float", "float-digits", - "floatp", "float-precision", "float-radix", "float-sign", "floor", - "fmakunbound", "force-output", "format", "fourth", "fresh-line", - "fround", "ftruncate", "funcall", "function-keywords", - "function-lambda-expression", "functionp", "gcd", "gensym", "gentemp", - "get", "get-decoded-time", "get-dispatch-macro-character", "getf", - "gethash", "get-internal-real-time", "get-internal-run-time", - "get-macro-character", "get-output-stream-string", "get-properties", - "get-setf-expansion", "get-universal-time", "graphic-char-p", - "hash-table-count", "hash-table-p", "hash-table-rehash-size", - "hash-table-rehash-threshold", "hash-table-size", "hash-table-test", - "host-namestring", "identity", "imagpart", "import", - "initialize-instance", "input-stream-p", "inspect", - "integer-decode-float", "integer-length", "integerp", - "interactive-stream-p", "intern", "intersection", - "invalid-method-error", "invoke-debugger", "invoke-restart", - "invoke-restart-interactively", "isqrt", "keywordp", "last", "lcm", - "ldb", "ldb-test", "ldiff", "length", "lisp-implementation-type", - "lisp-implementation-version", "list", "list*", "list-all-packages", - "listen", "list-length", "listp", "load", - "load-logical-pathname-translations", "log", "logand", "logandc1", - "logandc2", "logbitp", "logcount", "logeqv", "logical-pathname", - "logical-pathname-translations", "logior", "lognand", "lognor", - "lognot", "logorc1", "logorc2", "logtest", "logxor", "long-site-name", - "lower-case-p", "machine-instance", "machine-type", "machine-version", - "macroexpand", "macroexpand-1", "macro-function", "make-array", - "make-broadcast-stream", "make-concatenated-stream", "make-condition", - "make-dispatch-macro-character", "make-echo-stream", "make-hash-table", - "make-instance", "make-instances-obsolete", "make-list", - "make-load-form", "make-load-form-saving-slots", "make-package", - "make-pathname", "make-random-state", "make-sequence", "make-string", - "make-string-input-stream", "make-string-output-stream", "make-symbol", - "make-synonym-stream", "make-two-way-stream", "makunbound", "map", - "mapc", "mapcan", "mapcar", "mapcon", "maphash", "map-into", "mapl", - "maplist", "mask-field", "max", "member", "member-if", "member-if-not", - "merge", "merge-pathnames", "method-combination-error", - "method-qualifiers", "min", "minusp", "mismatch", "mod", - "muffle-warning", "name-char", "namestring", "nbutlast", "nconc", - "next-method-p", "nintersection", "ninth", "no-applicable-method", - "no-next-method", "not", "notany", "notevery", "nreconc", "nreverse", - "nset-difference", "nset-exclusive-or", "nstring-capitalize", - "nstring-downcase", "nstring-upcase", "nsublis", "nsubst", "nsubst-if", - "nsubst-if-not", "nsubstitute", "nsubstitute-if", "nsubstitute-if-not", - "nth", "nthcdr", "null", "numberp", "numerator", "nunion", "oddp", - "open", "open-stream-p", "output-stream-p", "package-error-package", - "package-name", "package-nicknames", "packagep", - "package-shadowing-symbols", "package-used-by-list", "package-use-list", - "pairlis", "parse-integer", "parse-namestring", "pathname", - "pathname-device", "pathname-directory", "pathname-host", - "pathname-match-p", "pathname-name", "pathnamep", "pathname-type", - "pathname-version", "peek-char", "phase", "plusp", "position", - "position-if", "position-if-not", "pprint", "pprint-dispatch", - "pprint-fill", "pprint-indent", "pprint-linear", "pprint-newline", - "pprint-tab", "pprint-tabular", "prin1", "prin1-to-string", "princ", - "princ-to-string", "print", "print-object", "probe-file", "proclaim", - "provide", "random", "random-state-p", "rassoc", "rassoc-if", - "rassoc-if-not", "rational", "rationalize", "rationalp", "read", - "read-byte", "read-char", "read-char-no-hang", "read-delimited-list", - "read-from-string", "read-line", "read-preserving-whitespace", - "read-sequence", "readtable-case", "readtablep", "realp", "realpart", - "reduce", "reinitialize-instance", "rem", "remhash", "remove", - "remove-duplicates", "remove-if", "remove-if-not", "remove-method", - "remprop", "rename-file", "rename-package", "replace", "require", - "rest", "restart-name", "revappend", "reverse", "room", "round", - "row-major-aref", "rplaca", "rplacd", "sbit", "scale-float", "schar", - "search", "second", "set", "set-difference", - "set-dispatch-macro-character", "set-exclusive-or", - "set-macro-character", "set-pprint-dispatch", "set-syntax-from-char", - "seventh", "shadow", "shadowing-import", "shared-initialize", - "short-site-name", "signal", "signum", "simple-bit-vector-p", - "simple-condition-format-arguments", "simple-condition-format-control", - "simple-string-p", "simple-vector-p", "sin", "sinh", "sixth", "sleep", - "slot-boundp", "slot-exists-p", "slot-makunbound", "slot-missing", - "slot-unbound", "slot-value", "software-type", "software-version", - "some", "sort", "special-operator-p", "sqrt", "stable-sort", - "standard-char-p", "store-value", "stream-element-type", - "stream-error-stream", "stream-external-format", "streamp", "string", - "string<", "string<=", "string=", "string>", "string>=", "string/=", - "string-capitalize", "string-downcase", "string-equal", - "string-greaterp", "string-left-trim", "string-lessp", - "string-not-equal", "string-not-greaterp", "string-not-lessp", - "stringp", "string-right-trim", "string-trim", "string-upcase", - "sublis", "subseq", "subsetp", "subst", "subst-if", "subst-if-not", - "substitute", "substitute-if", "substitute-if-not", "subtypep", "svref", - "sxhash", "symbol-function", "symbol-name", "symbolp", "symbol-package", - "symbol-plist", "symbol-value", "synonym-stream-symbol", "syntax:", - "tailp", "tan", "tanh", "tenth", "terpri", "third", - "translate-logical-pathname", "translate-pathname", "tree-equal", - "truename", "truncate", "two-way-stream-input-stream", - "two-way-stream-output-stream", "type-error-datum", - "type-error-expected-type", "type-of", "typep", "unbound-slot-instance", - "unexport", "unintern", "union", "unread-char", "unuse-package", - "update-instance-for-different-class", - "update-instance-for-redefined-class", "upgraded-array-element-type", - "upgraded-complex-part-type", "upper-case-p", "use-package", - "user-homedir-pathname", "use-value", "values", "values-list", "vector", - "vectorp", "vector-pop", "vector-push", "vector-push-extend", "warn", - "wild-pathname-p", "write", "write-byte", "write-char", "write-line", - "write-sequence", "write-string", "write-to-string", "yes-or-no-p", - "y-or-n-p", "zerop", - } - - clSpecialForms = []string{ - "block", "catch", "declare", "eval-when", "flet", "function", "go", "if", - "labels", "lambda", "let", "let*", "load-time-value", "locally", "macrolet", - "multiple-value-call", "multiple-value-prog1", "progn", "progv", "quote", - "return-from", "setq", "symbol-macrolet", "tagbody", "the", "throw", - "unwind-protect", - } - - clMacros = []string{ - "and", "assert", "call-method", "case", "ccase", "check-type", "cond", - "ctypecase", "decf", "declaim", "defclass", "defconstant", "defgeneric", - "define-compiler-macro", "define-condition", "define-method-combination", - "define-modify-macro", "define-setf-expander", "define-symbol-macro", - "defmacro", "defmethod", "defpackage", "defparameter", "defsetf", - "defstruct", "deftype", "defun", "defvar", "destructuring-bind", "do", - "do*", "do-all-symbols", "do-external-symbols", "dolist", "do-symbols", - "dotimes", "ecase", "etypecase", "formatter", "handler-bind", - "handler-case", "ignore-errors", "incf", "in-package", "lambda", "loop", - "loop-finish", "make-method", "multiple-value-bind", "multiple-value-list", - "multiple-value-setq", "nth-value", "or", "pop", - "pprint-exit-if-list-exhausted", "pprint-logical-block", "pprint-pop", - "print-unreadable-object", "prog", "prog*", "prog1", "prog2", "psetf", - "psetq", "push", "pushnew", "remf", "restart-bind", "restart-case", - "return", "rotatef", "setf", "shiftf", "step", "time", "trace", "typecase", - "unless", "untrace", "when", "with-accessors", "with-compilation-unit", - "with-condition-restarts", "with-hash-table-iterator", - "with-input-from-string", "with-open-file", "with-open-stream", - "with-output-to-string", "with-package-iterator", "with-simple-restart", - "with-slots", "with-standard-io-syntax", - } - - clLambdaListKeywords = []string{ - "&allow-other-keys", "&aux", "&body", "&environment", "&key", "&optional", - "&rest", "&whole", - } - - clDeclarations = []string{ - "dynamic-extent", "ignore", "optimize", "ftype", "inline", "special", - "ignorable", "notinline", "type", - } - - clBuiltinTypes = []string{ - "atom", "boolean", "base-char", "base-string", "bignum", "bit", - "compiled-function", "extended-char", "fixnum", "keyword", "nil", - "signed-byte", "short-float", "single-float", "double-float", "long-float", - "simple-array", "simple-base-string", "simple-bit-vector", "simple-string", - "simple-vector", "standard-char", "unsigned-byte", - - // Condition Types - "arithmetic-error", "cell-error", "condition", "control-error", - "division-by-zero", "end-of-file", "error", "file-error", - "floating-point-inexact", "floating-point-overflow", - "floating-point-underflow", "floating-point-invalid-operation", - "parse-error", "package-error", "print-not-readable", "program-error", - "reader-error", "serious-condition", "simple-condition", "simple-error", - "simple-type-error", "simple-warning", "stream-error", "storage-condition", - "style-warning", "type-error", "unbound-variable", "unbound-slot", - "undefined-function", "warning", - } - - clBuiltinClasses = []string{ - "array", "broadcast-stream", "bit-vector", "built-in-class", "character", - "class", "complex", "concatenated-stream", "cons", "echo-stream", - "file-stream", "float", "function", "generic-function", "hash-table", - "integer", "list", "logical-pathname", "method-combination", "method", - "null", "number", "package", "pathname", "ratio", "rational", "readtable", - "real", "random-state", "restart", "sequence", "standard-class", - "standard-generic-function", "standard-method", "standard-object", - "string-stream", "stream", "string", "structure-class", "structure-object", - "symbol", "synonym-stream", "t", "two-way-stream", "vector", - } -) - -// Common Lisp lexer. -var CommonLisp = internal.Register(TypeRemappingLexer(MustNewLexer( - &Config{ - Name: "Common Lisp", - Aliases: []string{"common-lisp", "cl", "lisp"}, - Filenames: []string{"*.cl", "*.lisp"}, - MimeTypes: []string{"text/x-common-lisp"}, - CaseInsensitive: true, - }, - Rules{ - "root": { - Default(Push("body")), - }, - "multiline-comment": { - {`#\|`, CommentMultiline, Push()}, - {`\|#`, CommentMultiline, Pop(1)}, - {`[^|#]+`, CommentMultiline, nil}, - {`[|#]`, CommentMultiline, nil}, - }, - "commented-form": { - {`\(`, CommentPreproc, Push()}, - {`\)`, CommentPreproc, Pop(1)}, - {`[^()]+`, CommentPreproc, nil}, - }, - "body": { - {`\s+`, Text, nil}, - {`;.*$`, CommentSingle, nil}, - {`#\|`, CommentMultiline, Push("multiline-comment")}, - {`#\d*Y.*$`, CommentSpecial, nil}, - {`"(\\.|\\\n|[^"\\])*"`, LiteralString, nil}, - {`:(\|[^|]+\||(?:\\.|[\w!$%&*+-/<=>?@\[\]^{}~])(?:\\.|[\w!$%&*+-/<=>?@\[\]^{}~]|[#.:])*)`, LiteralStringSymbol, nil}, - {`::(\|[^|]+\||(?:\\.|[\w!$%&*+-/<=>?@\[\]^{}~])(?:\\.|[\w!$%&*+-/<=>?@\[\]^{}~]|[#.:])*)`, LiteralStringSymbol, nil}, - {`:#(\|[^|]+\||(?:\\.|[\w!$%&*+-/<=>?@\[\]^{}~])(?:\\.|[\w!$%&*+-/<=>?@\[\]^{}~]|[#.:])*)`, LiteralStringSymbol, nil}, - {`'(\|[^|]+\||(?:\\.|[\w!$%&*+-/<=>?@\[\]^{}~])(?:\\.|[\w!$%&*+-/<=>?@\[\]^{}~]|[#.:])*)`, LiteralStringSymbol, nil}, - {`'`, Operator, nil}, - {"`", Operator, nil}, - {"[-+]?\\d+\\.?(?=[ \"()\\'\\n,;`])", LiteralNumberInteger, nil}, - {"[-+]?\\d+/\\d+(?=[ \"()\\'\\n,;`])", LiteralNumber, nil}, - {"[-+]?(\\d*\\.\\d+([defls][-+]?\\d+)?|\\d+(\\.\\d*)?[defls][-+]?\\d+)(?=[ \"()\\'\\n,;`])", LiteralNumberFloat, nil}, - {"#\\\\.(?=[ \"()\\'\\n,;`])", LiteralStringChar, nil}, - {`#\\(\|[^|]+\||(?:\\.|[\w!$%&*+-/<=>?@\[\]^{}~])(?:\\.|[\w!$%&*+-/<=>?@\[\]^{}~]|[#.:])*)`, LiteralStringChar, nil}, - {`#\(`, Operator, Push("body")}, - {`#\d*\*[01]*`, LiteralOther, nil}, - {`#:(\|[^|]+\||(?:\\.|[\w!$%&*+-/<=>?@\[\]^{}~])(?:\\.|[\w!$%&*+-/<=>?@\[\]^{}~]|[#.:])*)`, LiteralStringSymbol, nil}, - {`#[.,]`, Operator, nil}, - {`#\'`, NameFunction, nil}, - {`#b[+-]?[01]+(/[01]+)?`, LiteralNumberBin, nil}, - {`#o[+-]?[0-7]+(/[0-7]+)?`, LiteralNumberOct, nil}, - {`#x[+-]?[0-9a-f]+(/[0-9a-f]+)?`, LiteralNumberHex, nil}, - {`#\d+r[+-]?[0-9a-z]+(/[0-9a-z]+)?`, LiteralNumber, nil}, - {`(#c)(\()`, ByGroups(LiteralNumber, Punctuation), Push("body")}, - {`(#\d+a)(\()`, ByGroups(LiteralOther, Punctuation), Push("body")}, - {`(#s)(\()`, ByGroups(LiteralOther, Punctuation), Push("body")}, - {`#p?"(\\.|[^"])*"`, LiteralOther, nil}, - {`#\d+=`, Operator, nil}, - {`#\d+#`, Operator, nil}, - {"#+nil(?=[ \"()\\'\\n,;`])\\s*\\(", CommentPreproc, Push("commented-form")}, - {`#[+-]`, Operator, nil}, - {`(,@|,|\.)`, Operator, nil}, - {"(t|nil)(?=[ \"()\\'\\n,;`])", NameConstant, nil}, - {`\*(\|[^|]+\||(?:\\.|[\w!$%&*+-/<=>?@\[\]^{}~])(?:\\.|[\w!$%&*+-/<=>?@\[\]^{}~]|[#.:])*)\*`, NameVariableGlobal, nil}, - {`(\|[^|]+\||(?:\\.|[\w!$%&*+-/<=>?@\[\]^{}~])(?:\\.|[\w!$%&*+-/<=>?@\[\]^{}~]|[#.:])*)`, NameVariable, nil}, - {`\(`, Punctuation, Push("body")}, - {`\)`, Punctuation, Pop(1)}, - }, - }, -), TypeMapping{ - {NameVariable, NameFunction, clBuiltinFunctions}, - {NameVariable, Keyword, clSpecialForms}, - {NameVariable, NameBuiltin, clMacros}, - {NameVariable, Keyword, clLambdaListKeywords}, - {NameVariable, Keyword, clDeclarations}, - {NameVariable, KeywordType, clBuiltinTypes}, - {NameVariable, NameClass, clBuiltinClasses}, -})) diff --git a/vendor/github.com/alecthomas/chroma/lexers/c/clojure.go b/vendor/github.com/alecthomas/chroma/lexers/c/clojure.go deleted file mode 100644 index e63752a..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/c/clojure.go +++ /dev/null @@ -1,38 +0,0 @@ -package c - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Clojure lexer. -var Clojure = internal.Register(MustNewLexer( - &Config{ - Name: "Clojure", - Aliases: []string{"clojure", "clj"}, - Filenames: []string{"*.clj"}, - MimeTypes: []string{"text/x-clojure", "application/x-clojure"}, - }, - Rules{ - "root": { - {`;.*$`, CommentSingle, nil}, - {`[,\s]+`, Text, nil}, - {`-?\d+\.\d+`, LiteralNumberFloat, nil}, - {`-?\d+`, LiteralNumberInteger, nil}, - {`0x-?[abcdef\d]+`, LiteralNumberHex, nil}, - {`"(\\\\|\\"|[^"])*"`, LiteralString, nil}, - {`'(?!#)[\w!$%*+<=>?/.#-]+`, LiteralStringSymbol, nil}, - {`\\(.|[a-z]+)`, LiteralStringChar, nil}, - {`::?#?(?!#)[\w!$%*+<=>?/.#-]+`, LiteralStringSymbol, nil}, - {"~@|[`\\'#^~&@]", Operator, nil}, - {Words(``, ` `, `.`, `def`, `do`, `fn`, `if`, `let`, `new`, `quote`, `var`, `loop`), Keyword, nil}, - {Words(``, ` `, `def-`, `defn`, `defn-`, `defmacro`, `defmulti`, `defmethod`, `defstruct`, `defonce`, `declare`, `definline`, `definterface`, `defprotocol`, `defrecord`, `deftype`, `defproject`, `ns`), KeywordDeclaration, nil}, - {Words(``, ` `, `*`, `+`, `-`, `->`, `/`, `<`, `<=`, `=`, `==`, `>`, `>=`, `..`, `accessor`, `agent`, `agent-errors`, `aget`, `alength`, `all-ns`, `alter`, `and`, `append-child`, `apply`, `array-map`, `aset`, `aset-boolean`, `aset-byte`, `aset-char`, `aset-double`, `aset-float`, `aset-int`, `aset-long`, `aset-short`, `assert`, `assoc`, `await`, `await-for`, `bean`, `binding`, `bit-and`, `bit-not`, `bit-or`, `bit-shift-left`, `bit-shift-right`, `bit-xor`, `boolean`, `branch?`, `butlast`, `byte`, `cast`, `char`, `children`, `class`, `clear-agent-errors`, `comment`, `commute`, `comp`, `comparator`, `complement`, `concat`, `conj`, `cons`, `constantly`, `cond`, `if-not`, `construct-proxy`, `contains?`, `count`, `create-ns`, `create-struct`, `cycle`, `dec`, `deref`, `difference`, `disj`, `dissoc`, `distinct`, `doall`, `doc`, `dorun`, `doseq`, `dosync`, `dotimes`, `doto`, `double`, `down`, `drop`, `drop-while`, `edit`, `end?`, `ensure`, `eval`, `every?`, `false?`, `ffirst`, `file-seq`, `filter`, `find`, `find-doc`, `find-ns`, `find-var`, `first`, `float`, `flush`, `for`, `fnseq`, `frest`, `gensym`, `get-proxy-class`, `get`, `hash-map`, `hash-set`, `identical?`, `identity`, `if-let`, `import`, `in-ns`, `inc`, `index`, `insert-child`, `insert-left`, `insert-right`, `inspect-table`, `inspect-tree`, `instance?`, `int`, `interleave`, `intersection`, `into`, `into-array`, `iterate`, `join`, `key`, `keys`, `keyword`, `keyword?`, `last`, `lazy-cat`, `lazy-cons`, `left`, `lefts`, `line-seq`, `list*`, `list`, `load`, `load-file`, `locking`, `long`, `loop`, `macroexpand`, `macroexpand-1`, `make-array`, `make-node`, `map`, `map-invert`, `map?`, `mapcat`, `max`, `max-key`, `memfn`, `merge`, `merge-with`, `meta`, `min`, `min-key`, `name`, `namespace`, `neg?`, `new`, `newline`, `next`, `nil?`, `node`, `not`, `not-any?`, `not-every?`, `not=`, `ns-imports`, `ns-interns`, `ns-map`, `ns-name`, `ns-publics`, `ns-refers`, `ns-resolve`, `ns-unmap`, `nth`, `nthrest`, `or`, `parse`, `partial`, `path`, `peek`, `pop`, `pos?`, `pr`, `pr-str`, `print`, `print-str`, `println`, `println-str`, `prn`, `prn-str`, `project`, `proxy`, `proxy-mappings`, `quot`, `rand`, `rand-int`, `range`, `re-find`, `re-groups`, `re-matcher`, `re-matches`, `re-pattern`, `re-seq`, `read`, `read-line`, `reduce`, `ref`, `ref-set`, `refer`, `rem`, `remove`, `remove-method`, `remove-ns`, `rename`, `rename-keys`, `repeat`, `replace`, `replicate`, `resolve`, `rest`, `resultset-seq`, `reverse`, `rfirst`, `right`, `rights`, `root`, `rrest`, `rseq`, `second`, `select`, `select-keys`, `send`, `send-off`, `seq`, `seq-zip`, `seq?`, `set`, `short`, `slurp`, `some`, `sort`, `sort-by`, `sorted-map`, `sorted-map-by`, `sorted-set`, `special-symbol?`, `split-at`, `split-with`, `str`, `string?`, `struct`, `struct-map`, `subs`, `subvec`, `symbol`, `symbol?`, `sync`, `take`, `take-nth`, `take-while`, `test`, `time`, `to-array`, `to-array-2d`, `tree-seq`, `true?`, `union`, `up`, `update-proxy`, `val`, `vals`, `var-get`, `var-set`, `var?`, `vector`, `vector-zip`, `vector?`, `when`, `when-first`, `when-let`, `when-not`, `with-local-vars`, `with-meta`, `with-open`, `with-out-str`, `xml-seq`, `xml-zip`, `zero?`, `zipmap`, `zipper`), NameBuiltin, nil}, - {`(?<=\()(?!#)[\w!$%*+<=>?/.#-]+`, NameFunction, nil}, - {`(?!#)[\w!$%*+<=>?/.#-]+`, NameVariable, nil}, - {`(\[|\])`, Punctuation, nil}, - {`(\{|\})`, Punctuation, nil}, - {`(\(|\))`, Punctuation, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/c/cmake.go b/vendor/github.com/alecthomas/chroma/lexers/c/cmake.go deleted file mode 100644 index 163f17d..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/c/cmake.go +++ /dev/null @@ -1,44 +0,0 @@ -package c - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Cmake lexer. -var Cmake = internal.Register(MustNewLexer( - &Config{ - Name: "CMake", - Aliases: []string{"cmake"}, - Filenames: []string{"*.cmake", "CMakeLists.txt"}, - MimeTypes: []string{"text/x-cmake"}, - }, - Rules{ - "root": { - {`\b(\w+)([ \t]*)(\()`, ByGroups(NameBuiltin, Text, Punctuation), Push("args")}, - Include("keywords"), - Include("ws"), - }, - "args": { - {`\(`, Punctuation, Push()}, - {`\)`, Punctuation, Pop(1)}, - {`(\$\{)(.+?)(\})`, ByGroups(Operator, NameVariable, Operator), nil}, - {`(\$ENV\{)(.+?)(\})`, ByGroups(Operator, NameVariable, Operator), nil}, - {`(\$<)(.+?)(>)`, ByGroups(Operator, NameVariable, Operator), nil}, - {`(?s)".*?"`, LiteralStringDouble, nil}, - {`\\\S+`, LiteralString, nil}, - {`[^)$"# \t\n]+`, LiteralString, nil}, - {`\n`, Text, nil}, - Include("keywords"), - Include("ws"), - }, - "string": {}, - "keywords": { - {`\b(WIN32|UNIX|APPLE|CYGWIN|BORLAND|MINGW|MSVC|MSVC_IDE|MSVC60|MSVC70|MSVC71|MSVC80|MSVC90)\b`, Keyword, nil}, - }, - "ws": { - {`[ \t]+`, Text, nil}, - {`#.*\n`, Comment, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/c/cobol.go b/vendor/github.com/alecthomas/chroma/lexers/c/cobol.go deleted file mode 100644 index e9ae0bb..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/c/cobol.go +++ /dev/null @@ -1,51 +0,0 @@ -package c - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Cobol lexer. -var Cobol = internal.Register(MustNewLexer( - &Config{ - Name: "COBOL", - Aliases: []string{"cobol"}, - Filenames: []string{"*.cob", "*.COB", "*.cpy", "*.CPY"}, - MimeTypes: []string{"text/x-cobol"}, - CaseInsensitive: true, - }, - Rules{ - "root": { - Include("comment"), - Include("strings"), - Include("core"), - Include("nums"), - {`[a-z0-9]([\w\-]*[a-z0-9]+)?`, NameVariable, nil}, - {`[ \t]+`, Text, nil}, - }, - "comment": { - {`(^.{6}[*/].*\n|^.{6}|\*>.*\n)`, Comment, nil}, - }, - "core": { - {`(^|(?<=[^\w\-]))(ALL\s+)?((ZEROES)|(HIGH-VALUE|LOW-VALUE|QUOTE|SPACE|ZERO)(S)?)\s*($|(?=[^\w\-]))`, NameConstant, nil}, - {Words(`(^|(?<=[^\w\-]))`, `\s*($|(?=[^\w\-]))`, `ACCEPT`, `ADD`, `ALLOCATE`, `CALL`, `CANCEL`, `CLOSE`, `COMPUTE`, `CONFIGURATION`, `CONTINUE`, `DATA`, `DELETE`, `DISPLAY`, `DIVIDE`, `DIVISION`, `ELSE`, `END`, `END-ACCEPT`, `END-ADD`, `END-CALL`, `END-COMPUTE`, `END-DELETE`, `END-DISPLAY`, `END-DIVIDE`, `END-EVALUATE`, `END-IF`, `END-MULTIPLY`, `END-OF-PAGE`, `END-PERFORM`, `END-READ`, `END-RETURN`, `END-REWRITE`, `END-SEARCH`, `END-START`, `END-STRING`, `END-SUBTRACT`, `END-UNSTRING`, `END-WRITE`, `ENVIRONMENT`, `EVALUATE`, `EXIT`, `FD`, `FILE`, `FILE-CONTROL`, `FOREVER`, `FREE`, `GENERATE`, `GO`, `GOBACK`, `IDENTIFICATION`, `IF`, `INITIALIZE`, `INITIATE`, `INPUT-OUTPUT`, `INSPECT`, `INVOKE`, `I-O-CONTROL`, `LINKAGE`, `LOCAL-STORAGE`, `MERGE`, `MOVE`, `MULTIPLY`, `OPEN`, `PERFORM`, `PROCEDURE`, `PROGRAM-ID`, `RAISE`, `READ`, `RELEASE`, `RESUME`, `RETURN`, `REWRITE`, `SCREEN`, `SD`, `SEARCH`, `SECTION`, `SET`, `SORT`, `START`, `STOP`, `STRING`, `SUBTRACT`, `SUPPRESS`, `TERMINATE`, `THEN`, `UNLOCK`, `UNSTRING`, `USE`, `VALIDATE`, `WORKING-STORAGE`, `WRITE`), KeywordReserved, nil}, - {Words(`(^|(?<=[^\w\-]))`, `\s*($|(?=[^\w\-]))`, `ACCESS`, `ADDRESS`, `ADVANCING`, `AFTER`, `ALL`, `ALPHABET`, `ALPHABETIC`, `ALPHABETIC-LOWER`, `ALPHABETIC-UPPER`, `ALPHANUMERIC`, `ALPHANUMERIC-EDITED`, `ALSO`, `ALTER`, `ALTERNATEANY`, `ARE`, `AREA`, `AREAS`, `ARGUMENT-NUMBER`, `ARGUMENT-VALUE`, `AS`, `ASCENDING`, `ASSIGN`, `AT`, `AUTO`, `AUTO-SKIP`, `AUTOMATIC`, `AUTOTERMINATE`, `BACKGROUND-COLOR`, `BASED`, `BEEP`, `BEFORE`, `BELL`, `BLANK`, `BLINK`, `BLOCK`, `BOTTOM`, `BY`, `BYTE-LENGTH`, `CHAINING`, `CHARACTER`, `CHARACTERS`, `CLASS`, `CODE`, `CODE-SET`, `COL`, `COLLATING`, `COLS`, `COLUMN`, `COLUMNS`, `COMMA`, `COMMAND-LINE`, `COMMIT`, `COMMON`, `CONSTANT`, `CONTAINS`, `CONTENT`, `CONTROL`, `CONTROLS`, `CONVERTING`, `COPY`, `CORR`, `CORRESPONDING`, `COUNT`, `CRT`, `CURRENCY`, `CURSOR`, `CYCLE`, `DATE`, `DAY`, `DAY-OF-WEEK`, `DE`, `DEBUGGING`, `DECIMAL-POINT`, `DECLARATIVES`, `DEFAULT`, `DELIMITED`, `DELIMITER`, `DEPENDING`, `DESCENDING`, `DETAIL`, `DISK`, `DOWN`, `DUPLICATES`, `DYNAMIC`, `EBCDIC`, `ENTRY`, `ENVIRONMENT-NAME`, `ENVIRONMENT-VALUE`, `EOL`, `EOP`, `EOS`, `ERASE`, `ERROR`, `ESCAPE`, `EXCEPTION`, `EXCLUSIVE`, `EXTEND`, `EXTERNAL`, `FILE-ID`, `FILLER`, `FINAL`, `FIRST`, `FIXED`, `FLOAT-LONG`, `FLOAT-SHORT`, `FOOTING`, `FOR`, `FOREGROUND-COLOR`, `FORMAT`, `FROM`, `FULL`, `FUNCTION`, `FUNCTION-ID`, `GIVING`, `GLOBAL`, `GROUP`, `HEADING`, `HIGHLIGHT`, `I-O`, `ID`, `IGNORE`, `IGNORING`, `IN`, `INDEX`, `INDEXED`, `INDICATE`, `INITIAL`, `INITIALIZED`, `INPUT`, `INTO`, `INTRINSIC`, `INVALID`, `IS`, `JUST`, `JUSTIFIED`, `KEY`, `LABEL`, `LAST`, `LEADING`, `LEFT`, `LENGTH`, `LIMIT`, `LIMITS`, `LINAGE`, `LINAGE-COUNTER`, `LINE`, `LINES`, `LOCALE`, `LOCK`, `LOWLIGHT`, `MANUAL`, `MEMORY`, `MINUS`, `MODE`, `MULTIPLE`, `NATIONAL`, `NATIONAL-EDITED`, `NATIVE`, `NEGATIVE`, `NEXT`, `NO`, `NULL`, `NULLS`, `NUMBER`, `NUMBERS`, `NUMERIC`, `NUMERIC-EDITED`, `OBJECT-COMPUTER`, `OCCURS`, `OF`, `OFF`, `OMITTED`, `ON`, `ONLY`, `OPTIONAL`, `ORDER`, `ORGANIZATION`, `OTHER`, `OUTPUT`, `OVERFLOW`, `OVERLINE`, `PACKED-DECIMAL`, `PADDING`, `PAGE`, `PARAGRAPH`, `PLUS`, `POINTER`, `POSITION`, `POSITIVE`, `PRESENT`, `PREVIOUS`, `PRINTER`, `PRINTING`, `PROCEDURE-POINTER`, `PROCEDURES`, `PROCEED`, `PROGRAM`, `PROGRAM-POINTER`, `PROMPT`, `QUOTE`, `QUOTES`, `RANDOM`, `RD`, `RECORD`, `RECORDING`, `RECORDS`, `RECURSIVE`, `REDEFINES`, `REEL`, `REFERENCE`, `RELATIVE`, `REMAINDER`, `REMOVAL`, `RENAMES`, `REPLACING`, `REPORT`, `REPORTING`, `REPORTS`, `REPOSITORY`, `REQUIRED`, `RESERVE`, `RETURNING`, `REVERSE-VIDEO`, `REWIND`, `RIGHT`, `ROLLBACK`, `ROUNDED`, `RUN`, `SAME`, `SCROLL`, `SECURE`, `SEGMENT-LIMIT`, `SELECT`, `SENTENCE`, `SEPARATE`, `SEQUENCE`, `SEQUENTIAL`, `SHARING`, `SIGN`, `SIGNED`, `SIGNED-INT`, `SIGNED-LONG`, `SIGNED-SHORT`, `SIZE`, `SORT-MERGE`, `SOURCE`, `SOURCE-COMPUTER`, `SPECIAL-NAMES`, `STANDARD`, `STANDARD-1`, `STANDARD-2`, `STATUS`, `SUM`, `SYMBOLIC`, `SYNC`, `SYNCHRONIZED`, `TALLYING`, `TAPE`, `TEST`, `THROUGH`, `THRU`, `TIME`, `TIMES`, `TO`, `TOP`, `TRAILING`, `TRANSFORM`, `TYPE`, `UNDERLINE`, `UNIT`, `UNSIGNED`, `UNSIGNED-INT`, `UNSIGNED-LONG`, `UNSIGNED-SHORT`, `UNTIL`, `UP`, `UPDATE`, `UPON`, `USAGE`, `USING`, `VALUE`, `VALUES`, `VARYING`, `WAIT`, `WHEN`, `WITH`, `WORDS`, `YYYYDDD`, `YYYYMMDD`), KeywordPseudo, nil}, - {Words(`(^|(?<=[^\w\-]))`, `\s*($|(?=[^\w\-]))`, `ACTIVE-CLASS`, `ALIGNED`, `ANYCASE`, `ARITHMETIC`, `ATTRIBUTE`, `B-AND`, `B-NOT`, `B-OR`, `B-XOR`, `BIT`, `BOOLEAN`, `CD`, `CENTER`, `CF`, `CH`, `CHAIN`, `CLASS-ID`, `CLASSIFICATION`, `COMMUNICATION`, `CONDITION`, `DATA-POINTER`, `DESTINATION`, `DISABLE`, `EC`, `EGI`, `EMI`, `ENABLE`, `END-RECEIVE`, `ENTRY-CONVENTION`, `EO`, `ESI`, `EXCEPTION-OBJECT`, `EXPANDS`, `FACTORY`, `FLOAT-BINARY-16`, `FLOAT-BINARY-34`, `FLOAT-BINARY-7`, `FLOAT-DECIMAL-16`, `FLOAT-DECIMAL-34`, `FLOAT-EXTENDED`, `FORMAT`, `FUNCTION-POINTER`, `GET`, `GROUP-USAGE`, `IMPLEMENTS`, `INFINITY`, `INHERITS`, `INTERFACE`, `INTERFACE-ID`, `INVOKE`, `LC_ALL`, `LC_COLLATE`, `LC_CTYPE`, `LC_MESSAGES`, `LC_MONETARY`, `LC_NUMERIC`, `LC_TIME`, `LINE-COUNTER`, `MESSAGE`, `METHOD`, `METHOD-ID`, `NESTED`, `NONE`, `NORMAL`, `OBJECT`, `OBJECT-REFERENCE`, `OPTIONS`, `OVERRIDE`, `PAGE-COUNTER`, `PF`, `PH`, `PROPERTY`, `PROTOTYPE`, `PURGE`, `QUEUE`, `RAISE`, `RAISING`, `RECEIVE`, `RELATION`, `REPLACE`, `REPRESENTS-NOT-A-NUMBER`, `RESET`, `RESUME`, `RETRY`, `RF`, `RH`, `SECONDS`, `SEGMENT`, `SELF`, `SEND`, `SOURCES`, `STATEMENT`, `STEP`, `STRONG`, `SUB-QUEUE-1`, `SUB-QUEUE-2`, `SUB-QUEUE-3`, `SUPER`, `SYMBOL`, `SYSTEM-DEFAULT`, `TABLE`, `TERMINAL`, `TEXT`, `TYPEDEF`, `UCS-4`, `UNIVERSAL`, `USER-DEFAULT`, `UTF-16`, `UTF-8`, `VAL-STATUS`, `VALID`, `VALIDATE`, `VALIDATE-STATUS`), Error, nil}, - {`(^|(?<=[^\w\-]))(PIC\s+.+?(?=(\s|\.\s))|PICTURE\s+.+?(?=(\s|\.\s))|(COMPUTATIONAL)(-[1-5X])?|(COMP)(-[1-5X])?|BINARY-C-LONG|BINARY-CHAR|BINARY-DOUBLE|BINARY-LONG|BINARY-SHORT|BINARY)\s*($|(?=[^\w\-]))`, KeywordType, nil}, - {`(\*\*|\*|\+|-|/|<=|>=|<|>|==|/=|=)`, Operator, nil}, - {`([(),;:&%.])`, Punctuation, nil}, - {`(^|(?<=[^\w\-]))(ABS|ACOS|ANNUITY|ASIN|ATAN|BYTE-LENGTH|CHAR|COMBINED-DATETIME|CONCATENATE|COS|CURRENT-DATE|DATE-OF-INTEGER|DATE-TO-YYYYMMDD|DAY-OF-INTEGER|DAY-TO-YYYYDDD|EXCEPTION-(?:FILE|LOCATION|STATEMENT|STATUS)|EXP10|EXP|E|FACTORIAL|FRACTION-PART|INTEGER-OF-(?:DATE|DAY|PART)|INTEGER|LENGTH|LOCALE-(?:DATE|TIME(?:-FROM-SECONDS)?)|LOG(?:10)?|LOWER-CASE|MAX|MEAN|MEDIAN|MIDRANGE|MIN|MOD|NUMVAL(?:-C)?|ORD(?:-MAX|-MIN)?|PI|PRESENT-VALUE|RANDOM|RANGE|REM|REVERSE|SECONDS-FROM-FORMATTED-TIME|SECONDS-PAST-MIDNIGHT|SIGN|SIN|SQRT|STANDARD-DEVIATION|STORED-CHAR-LENGTH|SUBSTITUTE(?:-CASE)?|SUM|TAN|TEST-DATE-YYYYMMDD|TEST-DAY-YYYYDDD|TRIM|UPPER-CASE|VARIANCE|WHEN-COMPILED|YEAR-TO-YYYY)\s*($|(?=[^\w\-]))`, NameFunction, nil}, - {`(^|(?<=[^\w\-]))(true|false)\s*($|(?=[^\w\-]))`, NameBuiltin, nil}, - {`(^|(?<=[^\w\-]))(equal|equals|ne|lt|le|gt|ge|greater|less|than|not|and|or)\s*($|(?=[^\w\-]))`, OperatorWord, nil}, - }, - "strings": { - {`"[^"\n]*("|\n)`, LiteralStringDouble, nil}, - {`'[^'\n]*('|\n)`, LiteralStringSingle, nil}, - }, - "nums": { - {`\d+(\s*|\.$|$)`, LiteralNumberInteger, nil}, - {`[+-]?\d*\.\d+(E[-+]?\d+)?`, LiteralNumberFloat, nil}, - {`[+-]?\d+\.\d*(E[-+]?\d+)?`, LiteralNumberFloat, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/c/coffee.go b/vendor/github.com/alecthomas/chroma/lexers/c/coffee.go deleted file mode 100644 index e402b8f..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/c/coffee.go +++ /dev/null @@ -1,91 +0,0 @@ -package c - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Coffeescript lexer. -var Coffeescript = internal.Register(MustNewLexer( - &Config{ - Name: "CoffeeScript", - Aliases: []string{"coffee-script", "coffeescript", "coffee"}, - Filenames: []string{"*.coffee"}, - MimeTypes: []string{"text/coffeescript"}, - NotMultiline: true, - DotAll: true, - }, - Rules{ - "commentsandwhitespace": { - {`\s+`, Text, nil}, - {`###[^#].*?###`, CommentMultiline, nil}, - {`#(?!##[^#]).*?\n`, CommentSingle, nil}, - }, - "multilineregex": { - {`[^/#]+`, LiteralStringRegex, nil}, - {`///([gim]+\b|\B)`, LiteralStringRegex, Pop(1)}, - {`#\{`, LiteralStringInterpol, Push("interpoling_string")}, - {`[/#]`, LiteralStringRegex, nil}, - }, - "slashstartsregex": { - Include("commentsandwhitespace"), - {`///`, LiteralStringRegex, Push("#pop", "multilineregex")}, - {`/(?! )(\\.|[^[/\\\n]|\[(\\.|[^\]\\\n])*])+/([gim]+\b|\B)`, LiteralStringRegex, Pop(1)}, - {`/`, Operator, nil}, - Default(Pop(1)), - }, - "root": { - Include("commentsandwhitespace"), - {`^(?=\s|/)`, Text, Push("slashstartsregex")}, - {"\\+\\+|~|&&|\\band\\b|\\bor\\b|\\bis\\b|\\bisnt\\b|\\bnot\\b|\\?|:|\\|\\||\\\\(?=\\n)|(<<|>>>?|==?(?!>)|!=?|=(?!>)|-(?!>)|[<>+*`%&\\|\\^/])=?", Operator, Push("slashstartsregex")}, - {`(?:\([^()]*\))?\s*[=-]>`, NameFunction, Push("slashstartsregex")}, - {`[{(\[;,]`, Punctuation, Push("slashstartsregex")}, - {`[})\].]`, Punctuation, nil}, - {`(?=|<|>|==`, Operator, nil}, - {`mod\b`, Operator, nil}, - {`(eq|lt|gt|lte|gte|not|is|and|or)\b`, Operator, nil}, - {`\|\||&&`, Operator, nil}, - {`\?`, Operator, nil}, - {`"`, LiteralStringDouble, Push("string")}, - {`'.*?'`, LiteralStringSingle, nil}, - {`\d+`, LiteralNumber, nil}, - {`(if|else|len|var|xml|default|break|switch|component|property|function|do|try|catch|in|continue|for|return|while|required|any|array|binary|boolean|component|date|guid|numeric|query|string|struct|uuid|case)\b`, Keyword, nil}, - {`(true|false|null)\b`, KeywordConstant, nil}, - {`(application|session|client|cookie|super|this|variables|arguments)\b`, NameConstant, nil}, - {`([a-z_$][\w.]*)(\s*)(\()`, ByGroups(NameFunction, Text, Punctuation), nil}, - {`[a-z_$][\w.]*`, NameVariable, nil}, - {`[()\[\]{};:,.\\]`, Punctuation, nil}, - {`\s+`, Text, nil}, - }, - "string": { - {`""`, LiteralStringDouble, nil}, - {`#.+?#`, LiteralStringInterpol, nil}, - {`[^"#]+`, LiteralStringDouble, nil}, - {`#`, LiteralStringDouble, nil}, - {`"`, LiteralStringDouble, Pop(1)}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/c/coq.go b/vendor/github.com/alecthomas/chroma/lexers/c/coq.go deleted file mode 100644 index e69a5c1..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/c/coq.go +++ /dev/null @@ -1,63 +0,0 @@ -package c - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Coq lexer. -var Coq = internal.Register(MustNewLexer( - &Config{ - Name: "Coq", - Aliases: []string{"coq"}, - Filenames: []string{"*.v"}, - MimeTypes: []string{"text/x-coq"}, - }, - Rules{ - "root": { - {`\s+`, Text, nil}, - {`false|true|\(\)|\[\]`, NameBuiltinPseudo, nil}, - {`\(\*`, Comment, Push("comment")}, - {Words(`\b`, `\b`, `Section`, `Module`, `End`, `Require`, `Import`, `Export`, `Variable`, `Variables`, `Parameter`, `Parameters`, `Axiom`, `Hypothesis`, `Hypotheses`, `Notation`, `Local`, `Tactic`, `Reserved`, `Scope`, `Open`, `Close`, `Bind`, `Delimit`, `Definition`, `Let`, `Ltac`, `Fixpoint`, `CoFixpoint`, `Morphism`, `Relation`, `Implicit`, `Arguments`, `Set`, `Unset`, `Contextual`, `Strict`, `Prenex`, `Implicits`, `Inductive`, `CoInductive`, `Record`, `Structure`, `Canonical`, `Coercion`, `Theorem`, `Lemma`, `Corollary`, `Proposition`, `Fact`, `Remark`, `Example`, `Proof`, `Goal`, `Save`, `Qed`, `Defined`, `Hint`, `Resolve`, `Rewrite`, `View`, `Search`, `Show`, `Print`, `Printing`, `All`, `Graph`, `Projections`, `inside`, `outside`, `Check`, `Global`, `Instance`, `Class`, `Existing`, `Universe`, `Polymorphic`, `Monomorphic`, `Context`), KeywordNamespace, nil}, - {Words(`\b`, `\b`, `forall`, `exists`, `exists2`, `fun`, `fix`, `cofix`, `struct`, `match`, `end`, `in`, `return`, `let`, `if`, `is`, `then`, `else`, `for`, `of`, `nosimpl`, `with`, `as`), Keyword, nil}, - {Words(`\b`, `\b`, `Type`, `Prop`), KeywordType, nil}, - {Words(`\b`, `\b`, `pose`, `set`, `move`, `case`, `elim`, `apply`, `clear`, `hnf`, `intro`, `intros`, `generalize`, `rename`, `pattern`, `after`, `destruct`, `induction`, `using`, `refine`, `inversion`, `injection`, `rewrite`, `congr`, `unlock`, `compute`, `ring`, `field`, `replace`, `fold`, `unfold`, `change`, `cutrewrite`, `simpl`, `have`, `suff`, `wlog`, `suffices`, `without`, `loss`, `nat_norm`, `assert`, `cut`, `trivial`, `revert`, `bool_congr`, `nat_congr`, `symmetry`, `transitivity`, `auto`, `split`, `left`, `right`, `autorewrite`, `tauto`, `setoid_rewrite`, `intuition`, `eauto`, `eapply`, `econstructor`, `etransitivity`, `constructor`, `erewrite`, `red`, `cbv`, `lazy`, `vm_compute`, `native_compute`, `subst`), Keyword, nil}, - {Words(`\b`, `\b`, `by`, `done`, `exact`, `reflexivity`, `tauto`, `romega`, `omega`, `assumption`, `solve`, `contradiction`, `discriminate`, `congruence`), KeywordPseudo, nil}, - {Words(`\b`, `\b`, `do`, `last`, `first`, `try`, `idtac`, `repeat`), KeywordReserved, nil}, - {`\b([A-Z][\w\']*)`, Name, nil}, - {"(\u03bb|\u03a0|\\|\\}|\\{\\||\\\\/|/\\\\|=>|~|\\}|\\|]|\\||\\{<|\\{|`|_|]|\\[\\||\\[>|\\[<|\\[|\\?\\?|\\?|>\\}|>]|>|=|<->|<-|<|;;|;|:>|:=|::|:|\\.\\.|\\.|->|-\\.|-|,|\\+|\\*|\\)|\\(|&&|&|#|!=)", Operator, nil}, - {`([=<>@^|&+\*/$%-]|[!?~])?[!$%&*+\./:<=>?@^|~-]`, Operator, nil}, - {`\b(unit|nat|bool|string|ascii|list)\b`, KeywordType, nil}, - {`[^\W\d][\w']*`, Name, nil}, - {`\d[\d_]*`, LiteralNumberInteger, nil}, - {`0[xX][\da-fA-F][\da-fA-F_]*`, LiteralNumberHex, nil}, - {`0[oO][0-7][0-7_]*`, LiteralNumberOct, nil}, - {`0[bB][01][01_]*`, LiteralNumberBin, nil}, - {`-?\d[\d_]*(.[\d_]*)?([eE][+\-]?\d[\d_]*)`, LiteralNumberFloat, nil}, - {`'(?:(\\[\\\"'ntbr ])|(\\[0-9]{3})|(\\x[0-9a-fA-F]{2}))'`, LiteralStringChar, nil}, - {`'.'`, LiteralStringChar, nil}, - {`'`, Keyword, nil}, - {`"`, LiteralStringDouble, Push("string")}, - {`[~?][a-z][\w\']*:`, Name, nil}, - }, - "comment": { - {`[^(*)]+`, Comment, nil}, - {`\(\*`, Comment, Push()}, - {`\*\)`, Comment, Pop(1)}, - {`[(*)]`, Comment, nil}, - }, - "string": { - {`[^"]+`, LiteralStringDouble, nil}, - {`""`, LiteralStringDouble, nil}, - {`"`, LiteralStringDouble, Pop(1)}, - }, - "dotted": { - {`\s+`, Text, nil}, - {`\.`, Punctuation, nil}, - {`[A-Z][\w\']*(?=\s*\.)`, NameNamespace, nil}, - {`[A-Z][\w\']*`, NameClass, Pop(1)}, - {`[a-z][a-z0-9_\']*`, Name, Pop(1)}, - Default(Pop(1)), - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/c/cpp.go b/vendor/github.com/alecthomas/chroma/lexers/c/cpp.go deleted file mode 100644 index 104be24..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/c/cpp.go +++ /dev/null @@ -1,106 +0,0 @@ -package c - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// CPP lexer. -var CPP = internal.Register(MustNewLexer( - &Config{ - Name: "C++", - Aliases: []string{"cpp", "c++"}, - Filenames: []string{"*.cpp", "*.hpp", "*.c++", "*.h++", "*.cc", "*.hh", "*.cxx", "*.hxx", "*.C", "*.H", "*.cp", "*.CPP"}, - MimeTypes: []string{"text/x-c++hdr", "text/x-c++src"}, - EnsureNL: true, - }, - Rules{ - "statements": { - {Words(``, `\b`, `catch`, `const_cast`, `delete`, `dynamic_cast`, `explicit`, `export`, `friend`, `mutable`, `namespace`, `new`, `operator`, `private`, `protected`, `public`, `reinterpret_cast`, `restrict`, `static_cast`, `template`, `this`, `throw`, `throws`, `try`, `typeid`, `typename`, `using`, `virtual`, `constexpr`, `nullptr`, `decltype`, `thread_local`, `alignas`, `alignof`, `static_assert`, `noexcept`, `override`, `final`, `concept`, `requires`, `consteval`, `co_await`, `co_return`, `co_yield`), Keyword, nil}, - {`(enum)\b(\s+)(class)\b(\s*)`, ByGroups(Keyword, Text, Keyword, Text), Push("classname")}, - {`(class|struct|enum|union)\b(\s*)`, ByGroups(Keyword, Text), Push("classname")}, - {`\[\[.+\]\]`, NameAttribute, nil}, - {`(R)(")([^\\()\s]{,16})(\()((?:.|\n)*?)(\)\3)(")`, ByGroups(LiteralStringAffix, LiteralString, LiteralStringDelimiter, LiteralStringDelimiter, LiteralString, LiteralStringDelimiter, LiteralString), nil}, - {`(u8|u|U)(")`, ByGroups(LiteralStringAffix, LiteralString), Push("string")}, - {`(L?)(")`, ByGroups(LiteralStringAffix, LiteralString), Push("string")}, - {`(L?)(')(\\.|\\[0-7]{1,3}|\\x[a-fA-F0-9]{1,2}|[^\\\'\n])(')`, ByGroups(LiteralStringAffix, LiteralStringChar, LiteralStringChar, LiteralStringChar), nil}, - {`(\d+\.\d*|\.\d+|\d+)[eE][+-]?\d+[LlUu]*`, LiteralNumberFloat, nil}, - {`(\d+\.\d*|\.\d+|\d+[fF])[fF]?`, LiteralNumberFloat, nil}, - {`0[xX]([0-9A-Fa-f]('?[0-9A-Fa-f]+)*)[LlUu]*`, LiteralNumberHex, nil}, - {`0('?[0-7]+)+[LlUu]*`, LiteralNumberOct, nil}, - {`0[Bb][01]('?[01]+)*[LlUu]*`, LiteralNumberBin, nil}, - {`[0-9]('?[0-9]+)*[LlUu]*`, LiteralNumberInteger, nil}, - {`\*/`, Error, nil}, - {`[~!%^&*+=|?:<>/-]`, Operator, nil}, - {`[()\[\],.]`, Punctuation, nil}, - {Words(``, `\b`, `asm`, `auto`, `break`, `case`, `const`, `continue`, `default`, `do`, `else`, `enum`, `extern`, `for`, `goto`, `if`, `register`, `restricted`, `return`, `sizeof`, `static`, `struct`, `switch`, `typedef`, `union`, `volatile`, `while`), Keyword, nil}, - {`(bool|int|long|float|short|double|char((8|16|32)_t)?|wchar_t|unsigned|signed|void|u?int(_fast|_least|)(8|16|32|64)_t)\b`, KeywordType, nil}, - {Words(``, `\b`, `inline`, `_inline`, `__inline`, `naked`, `restrict`, `thread`, `typename`), KeywordReserved, nil}, - {`(__m(128i|128d|128|64))\b`, KeywordReserved, nil}, - {Words(`__`, `\b`, `asm`, `int8`, `based`, `except`, `int16`, `stdcall`, `cdecl`, `fastcall`, `int32`, `declspec`, `finally`, `int64`, `try`, `leave`, `w64`, `unaligned`, `raise`, `noop`, `identifier`, `forceinline`, `assume`), KeywordReserved, nil}, - {`(true|false|NULL)\b`, NameBuiltin, nil}, - {`([a-zA-Z_]\w*)(\s*)(:)(?!:)`, ByGroups(NameLabel, Text, Punctuation), nil}, - {`[a-zA-Z_]\w*`, Name, nil}, - }, - "root": { - Include("whitespace"), - {`((?:[\w*\s])+?(?:\s|[*]))([a-zA-Z_]\w*)(\s*\([^;]*?\))([^;{]*)(\{)`, ByGroups(UsingSelf("root"), NameFunction, UsingSelf("root"), UsingSelf("root"), Punctuation), Push("function")}, - {`((?:[\w*\s])+?(?:\s|[*]))([a-zA-Z_]\w*)(\s*\([^;]*?\))([^;]*)(;)`, ByGroups(UsingSelf("root"), NameFunction, UsingSelf("root"), UsingSelf("root"), Punctuation), nil}, - Default(Push("statement")), - {Words(`__`, `\b`, `virtual_inheritance`, `uuidof`, `super`, `single_inheritance`, `multiple_inheritance`, `interface`, `event`), KeywordReserved, nil}, - {`__(offload|blockingoffload|outer)\b`, KeywordPseudo, nil}, - }, - "classname": { - {`(\[\[.+\]\])(\s*)`, ByGroups(NameAttribute, Text), nil}, - {`[a-zA-Z_]\w*`, NameClass, Pop(1)}, - {`\s*(?=[>{])`, Text, Pop(1)}, - }, - "whitespace": { - {`^#if\s+0`, CommentPreproc, Push("if0")}, - {`^#`, CommentPreproc, Push("macro")}, - {`^(\s*(?:/[*].*?[*]/\s*)?)(#if\s+0)`, ByGroups(UsingSelf("root"), CommentPreproc), Push("if0")}, - {`^(\s*(?:/[*].*?[*]/\s*)?)(#)`, ByGroups(UsingSelf("root"), CommentPreproc), Push("macro")}, - {`\n`, Text, nil}, - {`\s+`, Text, nil}, - {`\\\n`, Text, nil}, - {`//(\n|[\w\W]*?[^\\]\n)`, CommentSingle, nil}, - {`/(\\\n)?[*][\w\W]*?[*](\\\n)?/`, CommentMultiline, nil}, - {`/(\\\n)?[*][\w\W]*`, CommentMultiline, nil}, - }, - "statement": { - Include("whitespace"), - Include("statements"), - {`[{]`, Punctuation, Push("root")}, - {`[;}]`, Punctuation, Pop(1)}, - }, - "function": { - Include("whitespace"), - Include("statements"), - {`;`, Punctuation, nil}, - {`\{`, Punctuation, Push()}, - {`\}`, Punctuation, Pop(1)}, - }, - "string": { - {`"`, LiteralString, Pop(1)}, - {`\\([\\abfnrtv"\']|x[a-fA-F0-9]{2,4}|u[a-fA-F0-9]{4}|U[a-fA-F0-9]{8}|[0-7]{1,3})`, LiteralStringEscape, nil}, - {`[^\\"\n]+`, LiteralString, nil}, - {`\\\n`, LiteralString, nil}, - {`\\`, LiteralString, nil}, - }, - "macro": { - {`(include)(\s*(?:/[*].*?[*]/\s*)?)([^\n]+)`, ByGroups(CommentPreproc, Text, CommentPreprocFile), nil}, - {`[^/\n]+`, CommentPreproc, nil}, - {`/[*](.|\n)*?[*]/`, CommentMultiline, nil}, - {`//.*?\n`, CommentSingle, Pop(1)}, - {`/`, CommentPreproc, nil}, - {`(?<=\\)\n`, CommentPreproc, nil}, - {`\n`, CommentPreproc, Pop(1)}, - }, - "if0": { - {`^\s*#if.*?(?=~!@#%^&|`?-]+", Operator, nil}, - {`(?s)(java|javascript)(\s+)(AS)(\s+)('|\$\$)(.*?)(\5)`, - UsingByGroup( - internal.Get, - 1, 6, - NameBuiltin, TextWhitespace, Keyword, TextWhitespace, - LiteralStringHeredoc, LiteralStringHeredoc, LiteralStringHeredoc, - ), - nil, - }, - {`(true|false|null)\b`, KeywordConstant, nil}, - {`0x[0-9a-f]+`, LiteralNumberHex, nil}, - {`[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}`, LiteralNumberHex, nil}, - {`\.[0-9]+(e[+-]?[0-9]+)?`, Error, nil}, - {`-?[0-9]+(\.[0-9])?(e[+-]?[0-9]+)?`, LiteralNumberFloat, nil}, - {`[0-9]+`, LiteralNumberInteger, nil}, - {`'`, LiteralStringSingle, Push("string")}, - {`"`, LiteralStringName, Push("quoted-ident")}, - {`\$\$`, LiteralStringHeredoc, Push("dollar-string")}, - {`[a-z_]\w*`, Name, nil}, - {`:(['"]?)[a-z]\w*\b\1`, NameVariable, nil}, - {`[;:()\[\]\{\},.]`, Punctuation, nil}, - }, - "multiline-comments": { - {`/\*`, CommentMultiline, Push("multiline-comments")}, - {`\*/`, CommentMultiline, Pop(1)}, - {`[^/*]+`, CommentMultiline, nil}, - {`[/*]`, CommentMultiline, nil}, - }, - "string": { - {`[^']+`, LiteralStringSingle, nil}, - {`''`, LiteralStringSingle, nil}, - {`'`, LiteralStringSingle, Pop(1)}, - }, - "quoted-ident": { - {`[^"]+`, LiteralStringName, nil}, - {`""`, LiteralStringName, nil}, - {`"`, LiteralStringName, Pop(1)}, - }, - "dollar-string": { - {`[^\$]+`, LiteralStringHeredoc, nil}, - {`\$\$`, LiteralStringHeredoc, Pop(1)}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/c/crystal.go b/vendor/github.com/alecthomas/chroma/lexers/c/crystal.go deleted file mode 100644 index 69e053c..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/c/crystal.go +++ /dev/null @@ -1,262 +0,0 @@ -package c - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Crystal lexer. -var Crystal = internal.Register(MustNewLexer( - &Config{ - Name: "Crystal", - Aliases: []string{"cr", "crystal"}, - Filenames: []string{"*.cr"}, - MimeTypes: []string{"text/x-crystal"}, - DotAll: true, - }, - Rules{ - "root": { - {`#.*?$`, CommentSingle, nil}, - {Words(``, `\b`, `abstract`, `asm`, `as`, `begin`, `break`, `case`, `do`, `else`, `elsif`, `end`, `ensure`, `extend`, `ifdef`, `if`, `include`, `instance_sizeof`, `next`, `of`, `pointerof`, `private`, `protected`, `rescue`, `return`, `require`, `sizeof`, `super`, `then`, `typeof`, `unless`, `until`, `when`, `while`, `with`, `yield`), Keyword, nil}, - {Words(``, `\b`, `true`, `false`, `nil`), KeywordConstant, nil}, - {`(module|lib)(\s+)([a-zA-Z_]\w*(?:::[a-zA-Z_]\w*)*)`, ByGroups(Keyword, Text, NameNamespace), nil}, - {`(def|fun|macro)(\s+)((?:[a-zA-Z_]\w*::)*)`, ByGroups(Keyword, Text, NameNamespace), Push("funcname")}, - {"def(?=[*%&^`~+-/\\[<>=])", Keyword, Push("funcname")}, - {`(class|struct|union|type|alias|enum)(\s+)((?:[a-zA-Z_]\w*::)*)`, ByGroups(Keyword, Text, NameNamespace), Push("classname")}, - {`(self|out|uninitialized)\b|(is_a|responds_to)\?`, KeywordPseudo, nil}, - {Words(``, `\b`, `debugger`, `record`, `pp`, `assert_responds_to`, `spawn`, `parallel`, `getter`, `setter`, `property`, `delegate`, `def_hash`, `def_equals`, `def_equals_and_hash`, `forward_missing_to`), NameBuiltinPseudo, nil}, - {`getter[!?]|property[!?]|__(DIR|FILE|LINE)__\b`, NameBuiltinPseudo, nil}, - {Words(`(?~!:])|(?<=(?:\s|;)when\s)|(?<=(?:\s|;)or\s)|(?<=(?:\s|;)and\s)|(?<=\.index\s)|(?<=\.scan\s)|(?<=\.sub\s)|(?<=\.sub!\s)|(?<=\.gsub\s)|(?<=\.gsub!\s)|(?<=\.match\s)|(?<=(?:\s|;)if\s)|(?<=(?:\s|;)elsif\s)|(?<=^when\s)|(?<=^index\s)|(?<=^scan\s)|(?<=^sub\s)|(?<=^gsub\s)|(?<=^sub!\s)|(?<=^gsub!\s)|(?<=^match\s)|(?<=^if\s)|(?<=^elsif\s))(\s*)(/)`, ByGroups(Text, LiteralStringRegex), Push("multiline-regex")}, - {`(?<=\(|,|\[)/`, LiteralStringRegex, Push("multiline-regex")}, - {`(\s+)(/)(?![\s=])`, ByGroups(Text, LiteralStringRegex), Push("multiline-regex")}, - {`(0o[0-7]+(?:_[0-7]+)*(?:_?[iu][0-9]+)?)\b(\s*)([/?])?`, ByGroups(LiteralNumberOct, Text, Operator), nil}, - {`(0x[0-9A-Fa-f]+(?:_[0-9A-Fa-f]+)*(?:_?[iu][0-9]+)?)\b(\s*)([/?])?`, ByGroups(LiteralNumberHex, Text, Operator), nil}, - {`(0b[01]+(?:_[01]+)*(?:_?[iu][0-9]+)?)\b(\s*)([/?])?`, ByGroups(LiteralNumberBin, Text, Operator), nil}, - {`((?:0(?![0-9])|[1-9][\d_]*)(?:\.\d[\d_]*)(?:e[+-]?[0-9]+)?(?:_?f[0-9]+)?)(\s*)([/?])?`, ByGroups(LiteralNumberFloat, Text, Operator), nil}, - {`((?:0(?![0-9])|[1-9][\d_]*)(?:\.\d[\d_]*)?(?:e[+-]?[0-9]+)(?:_?f[0-9]+)?)(\s*)([/?])?`, ByGroups(LiteralNumberFloat, Text, Operator), nil}, - {`((?:0(?![0-9])|[1-9][\d_]*)(?:\.\d[\d_]*)?(?:e[+-]?[0-9]+)?(?:_?f[0-9]+))(\s*)([/?])?`, ByGroups(LiteralNumberFloat, Text, Operator), nil}, - {`(0\b|[1-9][\d]*(?:_\d+)*(?:_?[iu][0-9]+)?)\b(\s*)([/?])?`, ByGroups(LiteralNumberInteger, Text, Operator), nil}, - {`@@[a-zA-Z_]\w*`, NameVariableClass, nil}, - {`@[a-zA-Z_]\w*`, NameVariableInstance, nil}, - {`\$\w+`, NameVariableGlobal, nil}, - {"\\$[!@&`\\'+~=/\\\\,;.<>_*$?:\"^-]", NameVariableGlobal, nil}, - {`\$-[0adFiIlpvw]`, NameVariableGlobal, nil}, - {`::`, Operator, nil}, - Include("strings"), - {`\?(\\[MC]-)*(\\([\\befnrtv#"\']|x[a-fA-F0-9]{1,2}|[0-7]{1,3})|\S)(?!\w)`, LiteralStringChar, nil}, - {`[A-Z][A-Z_]+\b`, NameConstant, nil}, - {`\{%`, LiteralStringInterpol, Push("in-macro-control")}, - {`\{\{`, LiteralStringInterpol, Push("in-macro-expr")}, - {`(@\[)(\s*)([A-Z]\w*)`, ByGroups(Operator, Text, NameDecorator), Push("in-attr")}, - {Words(`(\.|::)`, ``, `!=`, `!~`, `!`, `%`, `&&`, `&`, `**`, `*`, `+`, `-`, `/`, `<=>`, `<<`, `<=`, `<`, `===`, `==`, `=~`, `=`, `>=`, `>>`, `>`, `[]=`, `[]?`, `[]`, `^`, `||`, `|`, `~`), ByGroups(Operator, NameOperator), nil}, - {"(\\.|::)([a-zA-Z_]\\w*[!?]?|[*%&^`~+\\-/\\[<>=])", ByGroups(Operator, Name), nil}, - {`[a-zA-Z_]\w*(?:[!?](?!=))?`, Name, nil}, - {`(\[|\]\??|\*\*|<=>?|>=|<>?|=~|===|!~|&&?|\|\||\.{1,3})`, Operator, nil}, - {`[-+/*%=<>&!^|~]=?`, Operator, nil}, - {`[(){};,/?:\\]`, Punctuation, nil}, - {`\s+`, Text, nil}, - }, - "funcname": { - {"(?:([a-zA-Z_]\\w*)(\\.))?([a-zA-Z_]\\w*[!?]?|\\*\\*?|[-+]@?|[/%&|^`~]|\\[\\]=?|<<|>>|<=?>|>=?|===?)", ByGroups(NameClass, Operator, NameFunction), Pop(1)}, - Default(Pop(1)), - }, - "classname": { - {`[A-Z_]\w*`, NameClass, nil}, - {`(\()(\s*)([A-Z_]\w*)(\s*)(\))`, ByGroups(Punctuation, Text, NameClass, Text, Punctuation), nil}, - Default(Pop(1)), - }, - "in-intp": { - {`\{`, LiteralStringInterpol, Push()}, - {`\}`, LiteralStringInterpol, Pop(1)}, - Include("root"), - }, - "string-intp": { - {`#\{`, LiteralStringInterpol, Push("in-intp")}, - }, - "string-escaped": { - {`\\([\\befnstv#"\']|x[a-fA-F0-9]{1,2}|[0-7]{1,3})`, LiteralStringEscape, nil}, - }, - "string-intp-escaped": { - Include("string-intp"), - Include("string-escaped"), - }, - "interpolated-regex": { - Include("string-intp"), - {`[\\#]`, LiteralStringRegex, nil}, - {`[^\\#]+`, LiteralStringRegex, nil}, - }, - "interpolated-string": { - Include("string-intp"), - {`[\\#]`, LiteralStringOther, nil}, - {`[^\\#]+`, LiteralStringOther, nil}, - }, - "multiline-regex": { - Include("string-intp"), - {`\\\\`, LiteralStringRegex, nil}, - {`\\/`, LiteralStringRegex, nil}, - {`[\\#]`, LiteralStringRegex, nil}, - {`[^\\/#]+`, LiteralStringRegex, nil}, - {`/[imsx]*`, LiteralStringRegex, Pop(1)}, - }, - "end-part": { - {`.+`, CommentPreproc, Pop(1)}, - }, - "in-macro-control": { - {`\{%`, LiteralStringInterpol, Push()}, - {`%\}`, LiteralStringInterpol, Pop(1)}, - {`for\b|in\b`, Keyword, nil}, - Include("root"), - }, - "in-macro-expr": { - {`\{\{`, LiteralStringInterpol, Push()}, - {`\}\}`, LiteralStringInterpol, Pop(1)}, - Include("root"), - }, - "in-attr": { - {`\[`, Operator, Push()}, - {`\]`, Operator, Pop(1)}, - Include("root"), - }, - "strings": { - {`\:@{0,2}[a-zA-Z_]\w*[!?]?`, LiteralStringSymbol, nil}, - {Words(`\:@{0,2}`, ``, `!=`, `!~`, `!`, `%`, `&&`, `&`, `**`, `*`, `+`, `-`, `/`, `<=>`, `<<`, `<=`, `<`, `===`, `==`, `=~`, `=`, `>=`, `>>`, `>`, `[]=`, `[]?`, `[]`, `^`, `||`, `|`, `~`), LiteralStringSymbol, nil}, - {`:'(\\\\|\\'|[^'])*'`, LiteralStringSymbol, nil}, - {`'(\\\\|\\'|[^']|\\[^'\\]+)'`, LiteralStringChar, nil}, - {`:"`, LiteralStringSymbol, Push("simple-sym")}, - {`([a-zA-Z_]\w*)(:)(?!:)`, ByGroups(LiteralStringSymbol, Punctuation), nil}, - {`"`, LiteralStringDouble, Push("simple-string")}, - {"(?&!^|~,(])(\s*)(%([\t ])(?:(?:\\\3|(?!\3).)*)\3)`, ByGroups(Text, LiteralStringOther, None), nil}, - {`^(\s*)(%([\t ])(?:(?:\\\3|(?!\3).)*)\3)`, ByGroups(Text, LiteralStringOther, None), nil}, - {`(%([\[{(<]))((?:\\\2|(?!\2).)*)(\2)`, String, nil}, - }, - "simple-string": { - Include("string-intp-escaped"), - {`[^\\"#]+`, LiteralStringDouble, nil}, - {`[\\#]`, LiteralStringDouble, nil}, - {`"`, LiteralStringDouble, Pop(1)}, - }, - "simple-sym": { - Include("string-escaped"), - {`[^\\"#]+`, LiteralStringSymbol, nil}, - {`[\\#]`, LiteralStringSymbol, nil}, - {`"`, LiteralStringSymbol, Pop(1)}, - }, - "simple-backtick": { - Include("string-intp-escaped"), - {"[^\\\\`#]+", LiteralStringBacktick, nil}, - {`[\\#]`, LiteralStringBacktick, nil}, - {"`", LiteralStringBacktick, Pop(1)}, - }, - "cb-intp-string": { - {`\\[\{]`, LiteralStringOther, nil}, - {`\{`, LiteralStringOther, Push()}, - {`\}`, LiteralStringOther, Pop(1)}, - Include("string-intp-escaped"), - {`[\\#{}]`, LiteralStringOther, nil}, - {`[^\\#{}]+`, LiteralStringOther, nil}, - }, - "cb-string": { - {`\\[\\{}]`, LiteralStringOther, nil}, - {`\{`, LiteralStringOther, Push()}, - {`\}`, LiteralStringOther, Pop(1)}, - {`[\\#{}]`, LiteralStringOther, nil}, - {`[^\\#{}]+`, LiteralStringOther, nil}, - }, - "cb-regex": { - {`\\[\\{}]`, LiteralStringRegex, nil}, - {`\{`, LiteralStringRegex, Push()}, - {`\}[imsx]*`, LiteralStringRegex, Pop(1)}, - Include("string-intp"), - {`[\\#{}]`, LiteralStringRegex, nil}, - {`[^\\#{}]+`, LiteralStringRegex, nil}, - }, - "sb-intp-string": { - {`\\[\[]`, LiteralStringOther, nil}, - {`\[`, LiteralStringOther, Push()}, - {`\]`, LiteralStringOther, Pop(1)}, - Include("string-intp-escaped"), - {`[\\#\[\]]`, LiteralStringOther, nil}, - {`[^\\#\[\]]+`, LiteralStringOther, nil}, - }, - "sb-string": { - {`\\[\\\[\]]`, LiteralStringOther, nil}, - {`\[`, LiteralStringOther, Push()}, - {`\]`, LiteralStringOther, Pop(1)}, - {`[\\#\[\]]`, LiteralStringOther, nil}, - {`[^\\#\[\]]+`, LiteralStringOther, nil}, - }, - "sb-regex": { - {`\\[\\\[\]]`, LiteralStringRegex, nil}, - {`\[`, LiteralStringRegex, Push()}, - {`\][imsx]*`, LiteralStringRegex, Pop(1)}, - Include("string-intp"), - {`[\\#\[\]]`, LiteralStringRegex, nil}, - {`[^\\#\[\]]+`, LiteralStringRegex, nil}, - }, - "pa-intp-string": { - {`\\[\(]`, LiteralStringOther, nil}, - {`\(`, LiteralStringOther, Push()}, - {`\)`, LiteralStringOther, Pop(1)}, - Include("string-intp-escaped"), - {`[\\#()]`, LiteralStringOther, nil}, - {`[^\\#()]+`, LiteralStringOther, nil}, - }, - "pa-string": { - {`\\[\\()]`, LiteralStringOther, nil}, - {`\(`, LiteralStringOther, Push()}, - {`\)`, LiteralStringOther, Pop(1)}, - {`[\\#()]`, LiteralStringOther, nil}, - {`[^\\#()]+`, LiteralStringOther, nil}, - }, - "pa-regex": { - {`\\[\\()]`, LiteralStringRegex, nil}, - {`\(`, LiteralStringRegex, Push()}, - {`\)[imsx]*`, LiteralStringRegex, Pop(1)}, - Include("string-intp"), - {`[\\#()]`, LiteralStringRegex, nil}, - {`[^\\#()]+`, LiteralStringRegex, nil}, - }, - "ab-intp-string": { - {`\\[<]`, LiteralStringOther, nil}, - {`<`, LiteralStringOther, Push()}, - {`>`, LiteralStringOther, Pop(1)}, - Include("string-intp-escaped"), - {`[\\#<>]`, LiteralStringOther, nil}, - {`[^\\#<>]+`, LiteralStringOther, nil}, - }, - "ab-string": { - {`\\[\\<>]`, LiteralStringOther, nil}, - {`<`, LiteralStringOther, Push()}, - {`>`, LiteralStringOther, Pop(1)}, - {`[\\#<>]`, LiteralStringOther, nil}, - {`[^\\#<>]+`, LiteralStringOther, nil}, - }, - "ab-regex": { - {`\\[\\<>]`, LiteralStringRegex, nil}, - {`<`, LiteralStringRegex, Push()}, - {`>[imsx]*`, LiteralStringRegex, Pop(1)}, - Include("string-intp"), - {`[\\#<>]`, LiteralStringRegex, nil}, - {`[^\\#<>]+`, LiteralStringRegex, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/c/csharp.go b/vendor/github.com/alecthomas/chroma/lexers/c/csharp.go deleted file mode 100644 index c6a5f46..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/c/csharp.go +++ /dev/null @@ -1,51 +0,0 @@ -package c - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// CSharp lexer. -var CSharp = internal.Register(MustNewLexer( - &Config{ - Name: "C#", - Aliases: []string{"csharp", "c#"}, - Filenames: []string{"*.cs"}, - MimeTypes: []string{"text/x-csharp"}, - DotAll: true, - EnsureNL: true, - }, - Rules{ - "root": { - {`^\s*\[.*?\]`, NameAttribute, nil}, - {`[^\S\n]+`, Text, nil}, - {`\\\n`, Text, nil}, - {`//.*?\n`, CommentSingle, nil}, - {`/[*].*?[*]/`, CommentMultiline, nil}, - {`\n`, Text, nil}, - {`[~!%^&*()+=|\[\]:;,.<>/?-]`, Punctuation, nil}, - {`[{}]`, Punctuation, nil}, - {`@"(""|[^"])*"`, LiteralString, nil}, - {`\$@?"(""|[^"])*"`, LiteralString, nil}, - {`"(\\\\|\\"|[^"\n])*["\n]`, LiteralString, nil}, - {`'\\.'|'[^\\]'`, LiteralStringChar, nil}, - {`[0-9](\.[0-9]*)?([eE][+-][0-9]+)?[flFLdD]?|0[xX][0-9a-fA-F]+[Ll]?`, LiteralNumber, nil}, - {`#[ \t]*(if|endif|else|elif|define|undef|line|error|warning|region|endregion|pragma)\b.*?\n`, CommentPreproc, nil}, - {`\b(extern)(\s+)(alias)\b`, ByGroups(Keyword, Text, Keyword), nil}, - {`(abstract|as|async|await|base|break|by|case|catch|checked|const|continue|default|delegate|do|else|enum|event|explicit|extern|false|finally|fixed|for|foreach|goto|if|implicit|in|interface|internal|is|let|lock|new|null|on|operator|out|override|params|private|protected|public|readonly|ref|return|sealed|sizeof|stackalloc|static|switch|this|throw|true|try|typeof|unchecked|unsafe|virtual|void|while|get|set|new|partial|yield|add|remove|value|alias|ascending|descending|from|group|into|orderby|select|thenby|where|join|equals)\b`, Keyword, nil}, - {`(global)(::)`, ByGroups(Keyword, Punctuation), nil}, - {`(bool|byte|char|decimal|double|dynamic|float|int|long|object|sbyte|short|string|uint|ulong|ushort|var)\b\??`, KeywordType, nil}, - {`(class|struct)(\s+)`, ByGroups(Keyword, Text), Push("class")}, - {`(namespace|using)(\s+)`, ByGroups(Keyword, Text), Push("namespace")}, - {`@?[_a-zA-Z]\w*`, Name, nil}, - }, - "class": { - {`@?[_a-zA-Z]\w*`, NameClass, Pop(1)}, - Default(Pop(1)), - }, - "namespace": { - {`(?=\()`, Text, Pop(1)}, - {`(@?[_a-zA-Z]\w*|\.)+`, NameNamespace, Pop(1)}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/c/css.go b/vendor/github.com/alecthomas/chroma/lexers/c/css.go deleted file mode 100644 index fedc809..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/c/css.go +++ /dev/null @@ -1,104 +0,0 @@ -package c - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// CSS lexer. -var CSS = internal.Register(MustNewLexer( - &Config{ - Name: "CSS", - Aliases: []string{"css"}, - Filenames: []string{"*.css"}, - MimeTypes: []string{"text/css"}, - }, - Rules{ - "root": { - Include("basics"), - }, - "basics": { - {`\s+`, Text, nil}, - {`/\*(?:.|\n)*?\*/`, Comment, nil}, - {`\{`, Punctuation, Push("content")}, - {`(\:{1,2})([\w-]+)`, ByGroups(Punctuation, NameDecorator), nil}, - {`(\.)([\w-]+)`, ByGroups(Punctuation, NameClass), nil}, - {`(\#)([\w-]+)`, ByGroups(Punctuation, NameNamespace), nil}, - {`(@)([\w-]+)`, ByGroups(Punctuation, Keyword), Push("atrule")}, - {`[\w-]+`, NameTag, nil}, - {`[~^*!%&$\[\]()<>|+=@:;,./?-]`, Operator, nil}, - {`"(\\\\|\\"|[^"])*"`, LiteralStringDouble, nil}, - {`'(\\\\|\\'|[^'])*'`, LiteralStringSingle, nil}, - }, - "atrule": { - {`\{`, Punctuation, Push("atcontent")}, - {`;`, Punctuation, Pop(1)}, - Include("basics"), - }, - "atcontent": { - Include("basics"), - {`\}`, Punctuation, Pop(2)}, - }, - "content": { - {`\s+`, Text, nil}, - {`\}`, Punctuation, Pop(1)}, - {`;`, Punctuation, nil}, - {`^@.*?$`, CommentPreproc, nil}, - {Words(``, ``, `-ms-`, `mso-`, `-moz-`, `-o-`, `-xv-`, `-atsc-`, `-wap-`, `-khtml-`, `-webkit-`, `prince-`, `-ah-`, `-hp-`, `-ro-`, `-rim-`, `-tc-`), KeywordPseudo, nil}, - {`(align-content|align-items|align-self|alignment-baseline|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|appearance|azimuth|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|baseline-shift|bookmark-label|bookmark-level|bookmark-state|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-boundary|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-decoration-break|box-shadow|box-sizing|box-snap|box-suppress|break-after|break-before|break-inside|caption-side|caret|caret-animation|caret-color|caret-shape|chains|clear|clip|clip-path|clip-rule|color|color-interpolation-filters|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|counter-set|crop|cue|cue-after|cue-before|cursor|direction|display|dominant-baseline|elevation|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|float-defer|float-offset|float-reference|flood-color|flood-opacity|flow|flow-from|flow-into|font|font-family|font-feature-settings|font-kerning|font-language-override|font-size|font-size-adjust|font-stretch|font-style|font-synthesis|font-variant|font-variant-alternates|font-variant-caps|font-variant-east-asian|font-variant-ligatures|font-variant-numeric|font-variant-position|font-weight|footnote-display|footnote-policy|glyph-orientation-vertical|grid|grid-area|grid-auto-columns|grid-auto-flow|grid-auto-rows|grid-column|grid-column-end|grid-column-gap|grid-column-start|grid-gap|grid-row|grid-row-end|grid-row-gap|grid-row-start|grid-template|grid-template-areas|grid-template-columns|grid-template-rows|hanging-punctuation|height|hyphenate-character|hyphenate-limit-chars|hyphenate-limit-last|hyphenate-limit-lines|hyphenate-limit-zone|hyphens|image-orientation|image-resolution|initial-letter|initial-letter-align|initial-letter-wrap|isolation|justify-content|justify-items|justify-self|left|letter-spacing|lighting-color|line-break|line-grid|line-height|line-snap|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|marker-side|marquee-direction|marquee-loop|marquee-speed|marquee-style|mask|mask-border|mask-border-mode|mask-border-outset|mask-border-repeat|mask-border-slice|mask-border-source|mask-border-width|mask-clip|mask-composite|mask-image|mask-mode|mask-origin|mask-position|mask-repeat|mask-size|mask-type|max-height|max-lines|max-width|min-height|min-width|mix-blend-mode|motion|motion-offset|motion-path|motion-rotation|move-to|nav-down|nav-left|nav-right|nav-up|object-fit|object-position|offset-after|offset-before|offset-end|offset-start|opacity|order|orphans|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-style|overflow-wrap|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page|page-break-after|page-break-before|page-break-inside|page-policy|pause|pause-after|pause-before|perspective|perspective-origin|pitch|pitch-range|play-during|polar-angle|polar-distance|position|presentation-level|quotes|region-fragment|resize|rest|rest-after|rest-before|richness|right|rotation|rotation-point|ruby-align|ruby-merge|ruby-position|running|scroll-snap-coordinate|scroll-snap-destination|scroll-snap-points-x|scroll-snap-points-y|scroll-snap-type|shape-image-threshold|shape-inside|shape-margin|shape-outside|size|speak|speak-as|speak-header|speak-numeral|speak-punctuation|speech-rate|stress|string-set|tab-size|table-layout|text-align|text-align-last|text-combine-upright|text-decoration|text-decoration-color|text-decoration-line|text-decoration-skip|text-decoration-style|text-emphasis|text-emphasis-color|text-emphasis-position|text-emphasis-style|text-indent|text-justify|text-orientation|text-overflow|text-shadow|text-space-collapse|text-space-trim|text-spacing|text-transform|text-underline-position|text-wrap|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch|voice-range|voice-rate|voice-stress|voice-volume|volume|white-space|widows|width|will-change|word-break|word-spacing|word-wrap|wrap-after|wrap-before|wrap-flow|wrap-inside|wrap-through|writing-mode|z-index)(\s*)(\:)`, ByGroups(Keyword, Text, Punctuation), Push("value-start")}, - {`(--[a-zA-Z_][\w-]*)(\s*)(\:)`, ByGroups(NameVariable, Text, Punctuation), Push("value-start")}, - {`([a-zA-Z_][\w-]*)(\s*)(\:)`, ByGroups(Name, Text, Punctuation), Push("value-start")}, - {`/\*(?:.|\n)*?\*/`, Comment, nil}, - }, - "value-start": { - Include("common-values"), - {Words(``, `\b`, `align-content`, `align-items`, `align-self`, `alignment-baseline`, `all`, `animation`, `animation-delay`, `animation-direction`, `animation-duration`, `animation-fill-mode`, `animation-iteration-count`, `animation-name`, `animation-play-state`, `animation-timing-function`, `appearance`, `azimuth`, `backface-visibility`, `background`, `background-attachment`, `background-blend-mode`, `background-clip`, `background-color`, `background-image`, `background-origin`, `background-position`, `background-repeat`, `background-size`, `baseline-shift`, `bookmark-label`, `bookmark-level`, `bookmark-state`, `border`, `border-bottom`, `border-bottom-color`, `border-bottom-left-radius`, `border-bottom-right-radius`, `border-bottom-style`, `border-bottom-width`, `border-boundary`, `border-collapse`, `border-color`, `border-image`, `border-image-outset`, `border-image-repeat`, `border-image-slice`, `border-image-source`, `border-image-width`, `border-left`, `border-left-color`, `border-left-style`, `border-left-width`, `border-radius`, `border-right`, `border-right-color`, `border-right-style`, `border-right-width`, `border-spacing`, `border-style`, `border-top`, `border-top-color`, `border-top-left-radius`, `border-top-right-radius`, `border-top-style`, `border-top-width`, `border-width`, `bottom`, `box-decoration-break`, `box-shadow`, `box-sizing`, `box-snap`, `box-suppress`, `break-after`, `break-before`, `break-inside`, `caption-side`, `caret`, `caret-animation`, `caret-color`, `caret-shape`, `chains`, `clear`, `clip`, `clip-path`, `clip-rule`, `color`, `color-interpolation-filters`, `column-count`, `column-fill`, `column-gap`, `column-rule`, `column-rule-color`, `column-rule-style`, `column-rule-width`, `column-span`, `column-width`, `columns`, `content`, `counter-increment`, `counter-reset`, `counter-set`, `crop`, `cue`, `cue-after`, `cue-before`, `cursor`, `direction`, `display`, `dominant-baseline`, `elevation`, `empty-cells`, `filter`, `flex`, `flex-basis`, `flex-direction`, `flex-flow`, `flex-grow`, `flex-shrink`, `flex-wrap`, `float`, `float-defer`, `float-offset`, `float-reference`, `flood-color`, `flood-opacity`, `flow`, `flow-from`, `flow-into`, `font`, `font-family`, `font-feature-settings`, `font-kerning`, `font-language-override`, `font-size`, `font-size-adjust`, `font-stretch`, `font-style`, `font-synthesis`, `font-variant`, `font-variant-alternates`, `font-variant-caps`, `font-variant-east-asian`, `font-variant-ligatures`, `font-variant-numeric`, `font-variant-position`, `font-weight`, `footnote-display`, `footnote-policy`, `glyph-orientation-vertical`, `grid`, `grid-area`, `grid-auto-columns`, `grid-auto-flow`, `grid-auto-rows`, `grid-column`, `grid-column-end`, `grid-column-gap`, `grid-column-start`, `grid-gap`, `grid-row`, `grid-row-end`, `grid-row-gap`, `grid-row-start`, `grid-template`, `grid-template-areas`, `grid-template-columns`, `grid-template-rows`, `hanging-punctuation`, `height`, `hyphenate-character`, `hyphenate-limit-chars`, `hyphenate-limit-last`, `hyphenate-limit-lines`, `hyphenate-limit-zone`, `hyphens`, `image-orientation`, `image-resolution`, `initial-letter`, `initial-letter-align`, `initial-letter-wrap`, `isolation`, `justify-content`, `justify-items`, `justify-self`, `left`, `letter-spacing`, `lighting-color`, `line-break`, `line-grid`, `line-height`, `line-snap`, `list-style`, `list-style-image`, `list-style-position`, `list-style-type`, `margin`, `margin-bottom`, `margin-left`, `margin-right`, `margin-top`, `marker-side`, `marquee-direction`, `marquee-loop`, `marquee-speed`, `marquee-style`, `mask`, `mask-border`, `mask-border-mode`, `mask-border-outset`, `mask-border-repeat`, `mask-border-slice`, `mask-border-source`, `mask-border-width`, `mask-clip`, `mask-composite`, `mask-image`, `mask-mode`, `mask-origin`, `mask-position`, `mask-repeat`, `mask-size`, `mask-type`, `max-height`, `max-lines`, `max-width`, `min-height`, `min-width`, `mix-blend-mode`, `motion`, `motion-offset`, `motion-path`, `motion-rotation`, `move-to`, `nav-down`, `nav-left`, `nav-right`, `nav-up`, `object-fit`, `object-position`, `offset-after`, `offset-before`, `offset-end`, `offset-start`, `opacity`, `order`, `orphans`, `outline`, `outline-color`, `outline-offset`, `outline-style`, `outline-width`, `overflow`, `overflow-style`, `overflow-wrap`, `overflow-x`, `overflow-y`, `padding`, `padding-bottom`, `padding-left`, `padding-right`, `padding-top`, `page`, `page-break-after`, `page-break-before`, `page-break-inside`, `page-policy`, `pause`, `pause-after`, `pause-before`, `perspective`, `perspective-origin`, `pitch`, `pitch-range`, `play-during`, `polar-angle`, `polar-distance`, `position`, `presentation-level`, `quotes`, `region-fragment`, `resize`, `rest`, `rest-after`, `rest-before`, `richness`, `right`, `rotation`, `rotation-point`, `ruby-align`, `ruby-merge`, `ruby-position`, `running`, `scroll-snap-coordinate`, `scroll-snap-destination`, `scroll-snap-points-x`, `scroll-snap-points-y`, `scroll-snap-type`, `shape-image-threshold`, `shape-inside`, `shape-margin`, `shape-outside`, `size`, `speak`, `speak-as`, `speak-header`, `speak-numeral`, `speak-punctuation`, `speech-rate`, `stress`, `string-set`, `tab-size`, `table-layout`, `text-align`, `text-align-last`, `text-combine-upright`, `text-decoration`, `text-decoration-color`, `text-decoration-line`, `text-decoration-skip`, `text-decoration-style`, `text-emphasis`, `text-emphasis-color`, `text-emphasis-position`, `text-emphasis-style`, `text-indent`, `text-justify`, `text-orientation`, `text-overflow`, `text-shadow`, `text-space-collapse`, `text-space-trim`, `text-spacing`, `text-transform`, `text-underline-position`, `text-wrap`, `top`, `transform`, `transform-origin`, `transform-style`, `transition`, `transition-delay`, `transition-duration`, `transition-property`, `transition-timing-function`, `unicode-bidi`, `user-select`, `vertical-align`, `visibility`, `voice-balance`, `voice-duration`, `voice-family`, `voice-pitch`, `voice-range`, `voice-rate`, `voice-stress`, `voice-volume`, `volume`, `white-space`, `widows`, `width`, `will-change`, `word-break`, `word-spacing`, `word-wrap`, `wrap-after`, `wrap-before`, `wrap-flow`, `wrap-inside`, `wrap-through`, `writing-mode`, `z-index`), Keyword, nil}, - {`\!important`, CommentPreproc, nil}, - {`/\*(?:.|\n)*?\*/`, Comment, nil}, - Include("numeric-values"), - {`[~^*!%&<>|+=@:./?-]+`, Operator, nil}, - {`[\[\](),]+`, Punctuation, nil}, - {`"(\\\\|\\"|[^"])*"`, LiteralStringDouble, nil}, - {`'(\\\\|\\'|[^'])*'`, LiteralStringSingle, nil}, - {`[a-zA-Z_][\w-]*`, Name, nil}, - {`;`, Punctuation, Pop(1)}, - {`\}`, Punctuation, Pop(2)}, - }, - "function-start": { - Include("common-values"), - {`/\*(?:.|\n)*?\*/`, Comment, nil}, - Include("numeric-values"), - {`[*+/-]`, Operator, nil}, - {`[,]`, Punctuation, nil}, - {`"(\\\\|\\"|[^"])*"`, LiteralStringDouble, nil}, - {`'(\\\\|\\'|[^'])*'`, LiteralStringSingle, nil}, - {`[a-zA-Z_-]\w*`, Name, nil}, - {`\)`, Punctuation, Pop(1)}, - }, - "common-values": { - {`\s+`, Text, nil}, - {Words(``, ``, `-ms-`, `mso-`, `-moz-`, `-o-`, `-xv-`, `-atsc-`, `-wap-`, `-khtml-`, `-webkit-`, `prince-`, `-ah-`, `-hp-`, `-ro-`, `-rim-`, `-tc-`), KeywordPseudo, nil}, - Include("urls"), - {`(attr|blackness|blend|blenda|blur|brightness|calc|circle|color-mod|contrast|counter|cubic-bezier|device-cmyk|drop-shadow|ellipse|gray|grayscale|hsl|hsla|hue|hue-rotate|hwb|image|inset|invert|lightness|linear-gradient|matrix|matrix3d|opacity|perspective|polygon|radial-gradient|rect|repeating-linear-gradient|repeating-radial-gradient|rgb|rgba|rotate|rotate3d|rotateX|rotateY|rotateZ|saturate|saturation|scale|scale3d|scaleX|scaleY|scaleZ|sepia|shade|skewX|skewY|steps|tint|toggle|translate|translate3d|translateX|translateY|translateZ|whiteness)(\()`, ByGroups(NameBuiltin, Punctuation), Push("function-start")}, - {`([a-zA-Z_][\w-]+)(\()`, ByGroups(NameFunction, Punctuation), Push("function-start")}, - {Words(``, `\b`, `absolute`, `alias`, `all`, `all-petite-caps`, `all-scroll`, `all-small-caps`, `allow-end`, `alpha`, `alternate`, `alternate-reverse`, `always`, `armenian`, `auto`, `avoid`, `avoid-column`, `avoid-page`, `backwards`, `balance`, `baseline`, `below`, `blink`, `block`, `bold`, `bolder`, `border-box`, `both`, `bottom`, `box-decoration`, `break-word`, `capitalize`, `cell`, `center`, `circle`, `clip`, `clone`, `close-quote`, `col-resize`, `collapse`, `color`, `color-burn`, `color-dodge`, `column`, `column-reverse`, `compact`, `condensed`, `contain`, `container`, `content-box`, `context-menu`, `copy`, `cover`, `crisp-edges`, `crosshair`, `currentColor`, `cursive`, `darken`, `dashed`, `decimal`, `decimal-leading-zero`, `default`, `descendants`, `difference`, `digits`, `disc`, `distribute`, `dot`, `dotted`, `double`, `double-circle`, `e-resize`, `each-line`, `ease`, `ease-in`, `ease-in-out`, `ease-out`, `edges`, `ellipsis`, `end`, `ew-resize`, `exclusion`, `expanded`, `extra-condensed`, `extra-expanded`, `fantasy`, `fill`, `fill-box`, `filled`, `first`, `fixed`, `flat`, `flex`, `flex-end`, `flex-start`, `flip`, `force-end`, `forwards`, `from-image`, `full-width`, `geometricPrecision`, `georgian`, `groove`, `hanging`, `hard-light`, `help`, `hidden`, `hide`, `horizontal`, `hue`, `icon`, `infinite`, `inherit`, `initial`, `ink`, `inline`, `inline-block`, `inline-flex`, `inline-table`, `inset`, `inside`, `inter-word`, `invert`, `isolate`, `italic`, `justify`, `large`, `larger`, `last`, `left`, `lighten`, `lighter`, `line-through`, `linear`, `list-item`, `local`, `loose`, `lower-alpha`, `lower-greek`, `lower-latin`, `lower-roman`, `lowercase`, `ltr`, `luminance`, `luminosity`, `mandatory`, `manipulation`, `manual`, `margin-box`, `match-parent`, `medium`, `mixed`, `monospace`, `move`, `multiply`, `n-resize`, `ne-resize`, `nesw-resize`, `no-close-quote`, `no-drop`, `no-open-quote`, `no-repeat`, `none`, `normal`, `not-allowed`, `nowrap`, `ns-resize`, `nw-resize`, `nwse-resize`, `objects`, `oblique`, `off`, `on`, `open`, `open-quote`, `optimizeLegibility`, `optimizeSpeed`, `outset`, `outside`, `over`, `overlay`, `overline`, `padding-box`, `page`, `pan-down`, `pan-left`, `pan-right`, `pan-up`, `pan-x`, `pan-y`, `paused`, `petite-caps`, `pixelated`, `pointer`, `preserve-3d`, `progress`, `proximity`, `relative`, `repeat`, `repeat no-repeat`, `repeat-x`, `repeat-y`, `reverse`, `ridge`, `right`, `round`, `row`, `row-resize`, `row-reverse`, `rtl`, `ruby`, `ruby-base`, `ruby-base-container`, `ruby-text`, `ruby-text-container`, `run-in`, `running`, `s-resize`, `sans-serif`, `saturation`, `scale-down`, `screen`, `scroll`, `se-resize`, `semi-condensed`, `semi-expanded`, `separate`, `serif`, `sesame`, `show`, `sideways`, `sideways-left`, `sideways-right`, `slice`, `small`, `small-caps`, `smaller`, `smooth`, `snap`, `soft-light`, `solid`, `space`, `space-around`, `space-between`, `spaces`, `square`, `start`, `static`, `step-end`, `step-start`, `sticky`, `stretch`, `strict`, `stroke-box`, `style`, `sw-resize`, `table`, `table-caption`, `table-cell`, `table-column`, `table-column-group`, `table-footer-group`, `table-header-group`, `table-row`, `table-row-group`, `text`, `thick`, `thin`, `titling-caps`, `to`, `top`, `triangle`, `ultra-condensed`, `ultra-expanded`, `under`, `underline`, `unicase`, `unset`, `upper-alpha`, `upper-latin`, `upper-roman`, `uppercase`, `upright`, `use-glyph-orientation`, `vertical`, `vertical-text`, `view-box`, `visible`, `w-resize`, `wait`, `wavy`, `weight`, `weight style`, `wrap`, `wrap-reverse`, `x-large`, `x-small`, `xx-large`, `xx-small`, `zoom-in`, `zoom-out`), KeywordConstant, nil}, - {Words(``, `\b`, `above`, `aural`, `behind`, `bidi-override`, `center-left`, `center-right`, `cjk-ideographic`, `continuous`, `crop`, `cross`, `embed`, `far-left`, `far-right`, `fast`, `faster`, `hebrew`, `high`, `higher`, `hiragana`, `hiragana-iroha`, `katakana`, `katakana-iroha`, `landscape`, `left-side`, `leftwards`, `level`, `loud`, `low`, `lower`, `message-box`, `middle`, `mix`, `narrower`, `once`, `portrait`, `right-side`, `rightwards`, `silent`, `slow`, `slower`, `small-caption`, `soft`, `spell-out`, `status-bar`, `super`, `text-bottom`, `text-top`, `wider`, `x-fast`, `x-high`, `x-loud`, `x-low`, `x-soft`, `yes`, `pre`, `pre-wrap`, `pre-line`), KeywordConstant, nil}, - {Words(``, `\b`, `aliceblue`, `antiquewhite`, `aqua`, `aquamarine`, `azure`, `beige`, `bisque`, `black`, `blanchedalmond`, `blue`, `blueviolet`, `brown`, `burlywood`, `cadetblue`, `chartreuse`, `chocolate`, `coral`, `cornflowerblue`, `cornsilk`, `crimson`, `cyan`, `darkblue`, `darkcyan`, `darkgoldenrod`, `darkgray`, `darkgreen`, `darkgrey`, `darkkhaki`, `darkmagenta`, `darkolivegreen`, `darkorange`, `darkorchid`, `darkred`, `darksalmon`, `darkseagreen`, `darkslateblue`, `darkslategray`, `darkslategrey`, `darkturquoise`, `darkviolet`, `deeppink`, `deepskyblue`, `dimgray`, `dimgrey`, `dodgerblue`, `firebrick`, `floralwhite`, `forestgreen`, `fuchsia`, `gainsboro`, `ghostwhite`, `gold`, `goldenrod`, `gray`, `green`, `greenyellow`, `grey`, `honeydew`, `hotpink`, `indianred`, `indigo`, `ivory`, `khaki`, `lavender`, `lavenderblush`, `lawngreen`, `lemonchiffon`, `lightblue`, `lightcoral`, `lightcyan`, `lightgoldenrodyellow`, `lightgray`, `lightgreen`, `lightgrey`, `lightpink`, `lightsalmon`, `lightseagreen`, `lightskyblue`, `lightslategray`, `lightslategrey`, `lightsteelblue`, `lightyellow`, `lime`, `limegreen`, `linen`, `magenta`, `maroon`, `mediumaquamarine`, `mediumblue`, `mediumorchid`, `mediumpurple`, `mediumseagreen`, `mediumslateblue`, `mediumspringgreen`, `mediumturquoise`, `mediumvioletred`, `midnightblue`, `mintcream`, `mistyrose`, `moccasin`, `navajowhite`, `navy`, `oldlace`, `olive`, `olivedrab`, `orange`, `orangered`, `orchid`, `palegoldenrod`, `palegreen`, `paleturquoise`, `palevioletred`, `papayawhip`, `peachpuff`, `peru`, `pink`, `plum`, `powderblue`, `purple`, `rebeccapurple`, `red`, `rosybrown`, `royalblue`, `saddlebrown`, `salmon`, `sandybrown`, `seagreen`, `seashell`, `sienna`, `silver`, `skyblue`, `slateblue`, `slategray`, `slategrey`, `snow`, `springgreen`, `steelblue`, `tan`, `teal`, `thistle`, `tomato`, `turquoise`, `violet`, `wheat`, `white`, `whitesmoke`, `yellow`, `yellowgreen`, `transparent`), KeywordConstant, nil}, - }, - "urls": { - {`(url)(\()(".*?")(\))`, ByGroups(NameBuiltin, Punctuation, LiteralStringDouble, Punctuation), nil}, - {`(url)(\()('.*?')(\))`, ByGroups(NameBuiltin, Punctuation, LiteralStringSingle, Punctuation), nil}, - {`(url)(\()(.*?)(\))`, ByGroups(NameBuiltin, Punctuation, LiteralStringOther, Punctuation), nil}, - }, - "numeric-values": { - {`\#[a-zA-Z0-9]{1,6}`, LiteralNumberHex, nil}, - {`[+\-]?[0-9]*[.][0-9]+`, LiteralNumberFloat, Push("numeric-end")}, - {`[+\-]?[0-9]+`, LiteralNumberInteger, Push("numeric-end")}, - }, - "numeric-end": { - {Words(``, `\b`, `deg`, `grad`, `rad`, `turn`, `Hz`, `kHz`, `em`, `ex`, `ch`, `rem`, `vh`, `vw`, `vmin`, `vmax`, `px`, `mm`, `cm`, `in`, `pt`, `pc`, `q`, `dpi`, `dpcm`, `dppx`, `s`, `ms`), KeywordType, nil}, - {`%`, KeywordType, nil}, - Default(Pop(1)), - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/c/cython.go b/vendor/github.com/alecthomas/chroma/lexers/c/cython.go deleted file mode 100644 index 701e2b7..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/c/cython.go +++ /dev/null @@ -1,135 +0,0 @@ -package c - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Cython lexer. -var Cython = internal.Register(MustNewLexer( - &Config{ - Name: "Cython", - Aliases: []string{"cython", "pyx", "pyrex"}, - Filenames: []string{"*.pyx", "*.pxd", "*.pxi"}, - MimeTypes: []string{"text/x-cython", "application/x-cython"}, - }, - Rules{ - "root": { - {`\n`, Text, nil}, - {`^(\s*)("""(?:.|\n)*?""")`, ByGroups(Text, LiteralStringDoc), nil}, - {`^(\s*)('''(?:.|\n)*?''')`, ByGroups(Text, LiteralStringDoc), nil}, - {`[^\S\n]+`, Text, nil}, - {`#.*$`, Comment, nil}, - {`[]{}:(),;[]`, Punctuation, nil}, - {`\\\n`, Text, nil}, - {`\\`, Text, nil}, - {`(in|is|and|or|not)\b`, OperatorWord, nil}, - {`(<)([a-zA-Z0-9.?]+)(>)`, ByGroups(Punctuation, KeywordType, Punctuation), nil}, - {`!=|==|<<|>>|[-~+/*%=<>&^|.?]`, Operator, nil}, - {`(from)(\d+)(<=)(\s+)(<)(\d+)(:)`, ByGroups(Keyword, LiteralNumberInteger, Operator, Name, Operator, Name, Punctuation), nil}, - Include("keywords"), - {`(def|property)(\s+)`, ByGroups(Keyword, Text), Push("funcname")}, - {`(cp?def)(\s+)`, ByGroups(Keyword, Text), Push("cdef")}, - {`(cdef)(:)`, ByGroups(Keyword, Punctuation), nil}, - {`(class|struct)(\s+)`, ByGroups(Keyword, Text), Push("classname")}, - {`(from)(\s+)`, ByGroups(Keyword, Text), Push("fromimport")}, - {`(c?import)(\s+)`, ByGroups(Keyword, Text), Push("import")}, - Include("builtins"), - Include("backtick"), - {`(?:[rR]|[uU][rR]|[rR][uU])"""`, LiteralString, Push("tdqs")}, - {`(?:[rR]|[uU][rR]|[rR][uU])'''`, LiteralString, Push("tsqs")}, - {`(?:[rR]|[uU][rR]|[rR][uU])"`, LiteralString, Push("dqs")}, - {`(?:[rR]|[uU][rR]|[rR][uU])'`, LiteralString, Push("sqs")}, - {`[uU]?"""`, LiteralString, Combined("stringescape", "tdqs")}, - {`[uU]?'''`, LiteralString, Combined("stringescape", "tsqs")}, - {`[uU]?"`, LiteralString, Combined("stringescape", "dqs")}, - {`[uU]?'`, LiteralString, Combined("stringescape", "sqs")}, - Include("name"), - Include("numbers"), - }, - "keywords": { - {Words(``, `\b`, `assert`, `break`, `by`, `continue`, `ctypedef`, `del`, `elif`, `else`, `except`, `except?`, `exec`, `finally`, `for`, `fused`, `gil`, `global`, `if`, `include`, `lambda`, `nogil`, `pass`, `print`, `raise`, `return`, `try`, `while`, `yield`, `as`, `with`), Keyword, nil}, - {`(DEF|IF|ELIF|ELSE)\b`, CommentPreproc, nil}, - }, - "builtins": { - {Words(`(?`, CommentPreproc, Pop(1)}, - {`(<<<)([\'"]?)((?:[\\_a-z]|[^\x00-\x7f])(?:[\\\w]|[^\x00-\x7f])*)(\2\n.*?\n\s*)(\3)(;?)(\n)`, ByGroups(LiteralString, LiteralString, LiteralStringDelimiter, LiteralString, LiteralStringDelimiter, Punctuation, Text), nil}, - {`\s+`, Text, nil}, - {`#.*?\n`, CommentSingle, nil}, - {`//.*?\n`, CommentSingle, nil}, - {`/\*\*/`, CommentMultiline, nil}, - {`/\*\*.*?\*/`, LiteralStringDoc, nil}, - {`/\*.*?\*/`, CommentMultiline, nil}, - {`(->|::)(\s*)((?:[\\_a-z]|[^\x00-\x7f])(?:[\\\w]|[^\x00-\x7f])*)`, ByGroups(Operator, Text, NameAttribute), nil}, - {`[~!%^&*+=|:.<>/@-]+`, Operator, nil}, - {`\?`, Operator, nil}, - {`[\[\]{}();,]+`, Punctuation, nil}, - {`(class)(\s+)`, ByGroups(Keyword, Text), Push("classname")}, - {`(function)(\s*)(?=\()`, ByGroups(Keyword, Text), nil}, - {`(function)(\s+)(&?)(\s*)`, ByGroups(Keyword, Text, Operator, Text), Push("functionname")}, - {`(const)(\s+)((?:[\\_a-z]|[^\x00-\x7f])(?:[\\\w]|[^\x00-\x7f])*)`, ByGroups(Keyword, Text, NameConstant), nil}, - {`(and|E_PARSE|old_function|E_ERROR|or|as|E_WARNING|parent|eval|PHP_OS|break|exit|case|extends|PHP_VERSION|cfunction|FALSE|print|for|require|continue|foreach|require_once|declare|return|default|static|do|switch|die|stdClass|echo|else|TRUE|elseif|var|empty|if|xor|enddeclare|include|virtual|endfor|include_once|while|endforeach|global|endif|list|endswitch|new|endwhile|not|array|E_ALL|NULL|final|php_user_filter|interface|implements|public|private|protected|abstract|clone|try|catch|throw|this|use|namespace|trait|yield|finally)\b`, Keyword, nil}, - {`(true|false|null)\b`, KeywordConstant, nil}, - Include("magicconstants"), - {`\$\{\$+(?:[\\_a-z]|[^\x00-\x7f])(?:[\\\w]|[^\x00-\x7f])*\}`, NameVariable, nil}, - {`\$+(?:[\\_a-z]|[^\x00-\x7f])(?:[\\\w]|[^\x00-\x7f])*`, NameVariable, nil}, - {`(?:[\\_a-z]|[^\x00-\x7f])(?:[\\\w]|[^\x00-\x7f])*`, NameOther, nil}, - {`(\d+\.\d*|\d*\.\d+)(e[+-]?[0-9]+)?`, LiteralNumberFloat, nil}, - {`\d+e[+-]?[0-9]+`, LiteralNumberFloat, nil}, - {`0[0-7]+`, LiteralNumberOct, nil}, - {`0x[a-f0-9]+`, LiteralNumberHex, nil}, - {`\d+`, LiteralNumberInteger, nil}, - {`0b[01]+`, LiteralNumberBin, nil}, - {`'([^'\\]*(?:\\.[^'\\]*)*)'`, LiteralStringSingle, nil}, - {"`([^`\\\\]*(?:\\\\.[^`\\\\]*)*)`", LiteralStringBacktick, nil}, - {`"`, LiteralStringDouble, Push("string")}, - }, - "magicfuncs": { - {Words(``, `\b`, `__construct`, `__destruct`, `__call`, `__callStatic`, `__get`, `__set`, `__isset`, `__unset`, `__sleep`, `__wakeup`, `__toString`, `__invoke`, `__set_state`, `__clone`, `__debugInfo`), NameFunctionMagic, nil}, - }, - "magicconstants": { - {Words(``, `\b`, `__LINE__`, `__FILE__`, `__DIR__`, `__FUNCTION__`, `__CLASS__`, `__TRAIT__`, `__METHOD__`, `__NAMESPACE__`), NameConstant, nil}, - }, - "classname": { - {`(?:[\\_a-z]|[^\x00-\x7f])(?:[\\\w]|[^\x00-\x7f])*`, NameClass, Pop(1)}, - }, - "functionname": { - Include("magicfuncs"), - {`(?:[\\_a-z]|[^\x00-\x7f])(?:[\\\w]|[^\x00-\x7f])*`, NameFunction, Pop(1)}, - Default(Pop(1)), - }, - "string": { - {`"`, LiteralStringDouble, Pop(1)}, - {`[^{$"\\]+`, LiteralStringDouble, nil}, - {`\\([nrt"$\\]|[0-7]{1,3}|x[0-9a-f]{1,2})`, LiteralStringEscape, nil}, - {`\$(?:[\\_a-z]|[^\x00-\x7f])(?:[\\\w]|[^\x00-\x7f])*(\[\S+?\]|->(?:[\\_a-z]|[^\x00-\x7f])(?:[\\\w]|[^\x00-\x7f])*)?`, LiteralStringInterpol, nil}, - {`(\{\$\{)(.*?)(\}\})`, ByGroups(LiteralStringInterpol, UsingSelf("root"), LiteralStringInterpol), nil}, - {`(\{)(\$.*?)(\})`, ByGroups(LiteralStringInterpol, UsingSelf("root"), LiteralStringInterpol), nil}, - {`(\$\{)(\S+)(\})`, ByGroups(LiteralStringInterpol, NameVariable, LiteralStringInterpol), nil}, - {`[${\\]`, LiteralStringDouble, nil}, - }, - }, -).SetAnalyser(func(text string) float32 { - if strings.Contains(text, "]*\s+)+?)((?:[^\W\d]|\$)[\w$]*)(\s*)(\()`, ByGroups(UsingSelf("root"), NameFunction, Text, Operator), nil}, - - // https://dlang.org/spec/attribute.html#uda - {`@[\w.]*`, NameDecorator, nil}, - {`(abstract|auto|alias|align|const|delegate|enum|export|final|function|inout|lazy|nothrow|override|package|private|protected|public|pure|static|synchronized|template|volatile|__gshared)\b`, KeywordDeclaration, nil}, - - // https://dlang.org/spec/type.html#basic-data-types - {`(void|bool|byte|ubyte|short|ushort|int|uint|long|ulong|cent|ucent|float|double|real|ifloat|idouble|ireal|cfloat|cdouble|creal|char|wchar|dchar|string|wstring|dstring)\b`, KeywordType, nil}, - {`(module)(\s+)`, ByGroups(KeywordNamespace, Text), Push("import")}, - {`(true|false|null)\b`, KeywordConstant, nil}, - {`(class|interface|struct|template|union)(\s+)`, ByGroups(KeywordDeclaration, Text), Push("class")}, - {`(import)(\s+)`, ByGroups(KeywordNamespace, Text), Push("import")}, - - // https://dlang.org/spec/lex.html#string_literals - // TODO support delimited strings - {`[qr]?"(\\\\|\\"|[^"])*"[cwd]?`, LiteralString, nil}, - {"(`)([^`]*)(`)[cwd]?", LiteralString, nil}, - {`'\\.'|'[^\\]'|'\\u[0-9a-fA-F]{4}'`, LiteralStringChar, nil}, - {`(\.)((?:[^\W\d]|\$)[\w$]*)`, ByGroups(Operator, NameAttribute), nil}, - {`^\s*([^\W\d]|\$)[\w$]*:`, NameLabel, nil}, - - // https://dlang.org/spec/lex.html#floatliteral - {`([0-9][0-9_]*\.([0-9][0-9_]*)?|\.[0-9][0-9_]*)([eE][+\-]?[0-9][0-9_]*)?[fFL]?i?|[0-9][eE][+\-]?[0-9][0-9_]*[fFL]?|[0-9]([eE][+\-]?[0-9][0-9_]*)?[fFL]|0[xX]([0-9a-fA-F][0-9a-fA-F_]*\.?|([0-9a-fA-F][0-9a-fA-F_]*)?\.[0-9a-fA-F][0-9a-fA-F_]*)[pP][+\-]?[0-9][0-9_]*[fFL]?`, LiteralNumberFloat, nil}, - // https://dlang.org/spec/lex.html#integerliteral - {`0[xX][0-9a-fA-F][0-9a-fA-F_]*[lL]?`, LiteralNumberHex, nil}, - {`0[bB][01][01_]*[lL]?`, LiteralNumberBin, nil}, - {`0[0-7_]+[lL]?`, LiteralNumberOct, nil}, - {`0|[1-9][0-9_]*[lL]?`, LiteralNumberInteger, nil}, - {`([~^*!%&\[\](){}<>|+=:;,./?-]|q{)`, Operator, nil}, - {`([^\W\d]|\$)[\w$]*`, Name, nil}, - {`\n`, Text, nil}, - }, - "class": { - {`([^\W\d]|\$)[\w$]*`, NameClass, Pop(1)}, - }, - "import": { - {`[\w.]+\*?`, NameNamespace, Pop(1)}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/d/dart.go b/vendor/github.com/alecthomas/chroma/lexers/d/dart.go deleted file mode 100644 index 6dab3b4..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/d/dart.go +++ /dev/null @@ -1,91 +0,0 @@ -package d - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Dart lexer. -var Dart = internal.Register(MustNewLexer( - &Config{ - Name: "Dart", - Aliases: []string{"dart"}, - Filenames: []string{"*.dart"}, - MimeTypes: []string{"text/x-dart"}, - DotAll: true, - }, - Rules{ - "root": { - Include("string_literal"), - {`#!(.*?)$`, CommentPreproc, nil}, - {`\b(import|export)\b`, Keyword, Push("import_decl")}, - {`\b(library|source|part of|part)\b`, Keyword, nil}, - {`[^\S\n]+`, Text, nil}, - {`//.*?\n`, CommentSingle, nil}, - {`/\*.*?\*/`, CommentMultiline, nil}, - {`\b(class)\b(\s+)`, ByGroups(KeywordDeclaration, Text), Push("class")}, - {`\b(assert|break|case|catch|continue|default|do|else|finally|for|if|in|is|new|return|super|switch|this|throw|try|while)\b`, Keyword, nil}, - {`\b(abstract|async|await|const|extends|factory|final|get|implements|native|operator|set|static|sync|typedef|var|with|yield)\b`, KeywordDeclaration, nil}, - {`\b(bool|double|dynamic|int|num|Object|String|void)\b`, KeywordType, nil}, - {`\b(false|null|true)\b`, KeywordConstant, nil}, - {`[~!%^&*+=|?:<>/-]|as\b`, Operator, nil}, - {`[a-zA-Z_$]\w*:`, NameLabel, nil}, - {`[a-zA-Z_$]\w*`, Name, nil}, - {`[(){}\[\],.;]`, Punctuation, nil}, - {`0[xX][0-9a-fA-F]+`, LiteralNumberHex, nil}, - {`\d+(\.\d*)?([eE][+-]?\d+)?`, LiteralNumber, nil}, - {`\.\d+([eE][+-]?\d+)?`, LiteralNumber, nil}, - {`\n`, Text, nil}, - }, - "class": { - {`[a-zA-Z_$]\w*`, NameClass, Pop(1)}, - }, - "import_decl": { - Include("string_literal"), - {`\s+`, Text, nil}, - {`\b(as|show|hide)\b`, Keyword, nil}, - {`[a-zA-Z_$]\w*`, Name, nil}, - {`\,`, Punctuation, nil}, - {`\;`, Punctuation, Pop(1)}, - }, - "string_literal": { - {`r"""([\w\W]*?)"""`, LiteralStringDouble, nil}, - {`r'''([\w\W]*?)'''`, LiteralStringSingle, nil}, - {`r"(.*?)"`, LiteralStringDouble, nil}, - {`r'(.*?)'`, LiteralStringSingle, nil}, - {`"""`, LiteralStringDouble, Push("string_double_multiline")}, - {`'''`, LiteralStringSingle, Push("string_single_multiline")}, - {`"`, LiteralStringDouble, Push("string_double")}, - {`'`, LiteralStringSingle, Push("string_single")}, - }, - "string_common": { - {`\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|u\{[0-9A-Fa-f]*\}|[a-z'\"$\\])`, LiteralStringEscape, nil}, - {`(\$)([a-zA-Z_]\w*)`, ByGroups(LiteralStringInterpol, Name), nil}, - {`(\$\{)(.*?)(\})`, ByGroups(LiteralStringInterpol, UsingSelf("root"), LiteralStringInterpol), nil}, - }, - "string_double": { - {`"`, LiteralStringDouble, Pop(1)}, - {`[^"$\\\n]+`, LiteralStringDouble, nil}, - Include("string_common"), - {`\$+`, LiteralStringDouble, nil}, - }, - "string_double_multiline": { - {`"""`, LiteralStringDouble, Pop(1)}, - {`[^"$\\]+`, LiteralStringDouble, nil}, - Include("string_common"), - {`(\$|\")+`, LiteralStringDouble, nil}, - }, - "string_single": { - {`'`, LiteralStringSingle, Pop(1)}, - {`[^'$\\\n]+`, LiteralStringSingle, nil}, - Include("string_common"), - {`\$+`, LiteralStringSingle, nil}, - }, - "string_single_multiline": { - {`'''`, LiteralStringSingle, Pop(1)}, - {`[^\'$\\]+`, LiteralStringSingle, nil}, - Include("string_common"), - {`(\$|\')+`, LiteralStringSingle, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/d/diff.go b/vendor/github.com/alecthomas/chroma/lexers/d/diff.go deleted file mode 100644 index 264ed45..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/d/diff.go +++ /dev/null @@ -1,29 +0,0 @@ -package d - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Diff lexer. -var Diff = internal.Register(MustNewLexer( - &Config{ - Name: "Diff", - Aliases: []string{"diff", "udiff"}, - EnsureNL: true, - Filenames: []string{"*.diff", "*.patch"}, - MimeTypes: []string{"text/x-diff", "text/x-patch"}, - }, - Rules{ - "root": { - {` .*\n`, Text, nil}, - {`\+.*\n`, GenericInserted, nil}, - {`-.*\n`, GenericDeleted, nil}, - {`!.*\n`, GenericStrong, nil}, - {`@.*\n`, GenericSubheading, nil}, - {`([Ii]ndex|diff).*\n`, GenericHeading, nil}, - {`=.*\n`, GenericHeading, nil}, - {`.*\n`, Text, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/d/django.go b/vendor/github.com/alecthomas/chroma/lexers/d/django.go deleted file mode 100644 index d72d99a..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/d/django.go +++ /dev/null @@ -1,53 +0,0 @@ -package d - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Django/Jinja lexer. -var DjangoJinja = internal.Register(MustNewLexer( - &Config{ - Name: "Django/Jinja", - Aliases: []string{"django", "jinja"}, - Filenames: []string{}, - MimeTypes: []string{"application/x-django-templating", "application/x-jinja"}, - DotAll: true, - }, - Rules{ - "root": { - {`[^{]+`, Other, nil}, - {`\{\{`, CommentPreproc, Push("var")}, - {`\{[*#].*?[*#]\}`, Comment, nil}, - {`(\{%)(-?\s*)(comment)(\s*-?)(%\})(.*?)(\{%)(-?\s*)(endcomment)(\s*-?)(%\})`, ByGroups(CommentPreproc, Text, Keyword, Text, CommentPreproc, Comment, CommentPreproc, Text, Keyword, Text, CommentPreproc), nil}, - {`(\{%)(-?\s*)(raw)(\s*-?)(%\})(.*?)(\{%)(-?\s*)(endraw)(\s*-?)(%\})`, ByGroups(CommentPreproc, Text, Keyword, Text, CommentPreproc, Text, CommentPreproc, Text, Keyword, Text, CommentPreproc), nil}, - {`(\{%)(-?\s*)(filter)(\s+)([a-zA-Z_]\w*)`, ByGroups(CommentPreproc, Text, Keyword, Text, NameFunction), Push("block")}, - {`(\{%)(-?\s*)([a-zA-Z_]\w*)`, ByGroups(CommentPreproc, Text, Keyword), Push("block")}, - {`\{`, Other, nil}, - }, - "varnames": { - {`(\|)(\s*)([a-zA-Z_]\w*)`, ByGroups(Operator, Text, NameFunction), nil}, - {`(is)(\s+)(not)?(\s+)?([a-zA-Z_]\w*)`, ByGroups(Keyword, Text, Keyword, Text, NameFunction), nil}, - {`(_|true|false|none|True|False|None)\b`, KeywordPseudo, nil}, - {`(in|as|reversed|recursive|not|and|or|is|if|else|import|with(?:(?:out)?\s*context)?|scoped|ignore\s+missing)\b`, Keyword, nil}, - {`(loop|block|super|forloop)\b`, NameBuiltin, nil}, - {`[a-zA-Z_][\w-]*`, NameVariable, nil}, - {`\.\w+`, NameVariable, nil}, - {`:?"(\\\\|\\"|[^"])*"`, LiteralStringDouble, nil}, - {`:?'(\\\\|\\'|[^'])*'`, LiteralStringSingle, nil}, - {`([{}()\[\]+\-*/,:~]|[><=]=?)`, Operator, nil}, - {`[0-9](\.[0-9]*)?(eE[+-][0-9])?[flFLdD]?|0[xX][0-9a-fA-F]+[Ll]?`, LiteralNumber, nil}, - }, - "var": { - {`\s+`, Text, nil}, - {`(-?)(\}\})`, ByGroups(Text, CommentPreproc), Pop(1)}, - Include("varnames"), - }, - "block": { - {`\s+`, Text, nil}, - {`(-?)(%\})`, ByGroups(Text, CommentPreproc), Pop(1)}, - Include("varnames"), - {`.`, Punctuation, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/d/docker.go b/vendor/github.com/alecthomas/chroma/lexers/d/docker.go deleted file mode 100644 index a650eba..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/d/docker.go +++ /dev/null @@ -1,31 +0,0 @@ -package d - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/b" - "github.com/alecthomas/chroma/lexers/internal" - "github.com/alecthomas/chroma/lexers/j" -) - -// Docker lexer. -var Docker = internal.Register(MustNewLexer( - &Config{ - Name: "Docker", - Aliases: []string{"docker", "dockerfile"}, - Filenames: []string{"Dockerfile", "*.docker"}, - MimeTypes: []string{"text/x-dockerfile-config"}, - CaseInsensitive: true, - }, - Rules{ - "root": { - {`#.*`, Comment, nil}, - {`(ONBUILD)((?:\s*\\?\s*))`, ByGroups(Keyword, Using(b.Bash)), nil}, - {`(HEALTHCHECK)(((?:\s*\\?\s*)--\w+=\w+(?:\s*\\?\s*))*)`, ByGroups(Keyword, Using(b.Bash)), nil}, - {`(VOLUME|ENTRYPOINT|CMD|SHELL)((?:\s*\\?\s*))(\[.*?\])`, ByGroups(Keyword, Using(b.Bash), Using(j.JSON)), nil}, - {`(LABEL|ENV|ARG)((?:(?:\s*\\?\s*)\w+=\w+(?:\s*\\?\s*))*)`, ByGroups(Keyword, Using(b.Bash)), nil}, - {`((?:FROM|MAINTAINER|EXPOSE|WORKDIR|USER|STOPSIGNAL)|VOLUME)\b(.*)`, ByGroups(Keyword, LiteralString), nil}, - {`((?:RUN|CMD|ENTRYPOINT|ENV|ARG|LABEL|ADD|COPY))`, Keyword, nil}, - {`(.*\\\n)*.+`, Using(b.Bash), nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/d/dtd.go b/vendor/github.com/alecthomas/chroma/lexers/d/dtd.go deleted file mode 100644 index 99bf5d3..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/d/dtd.go +++ /dev/null @@ -1,69 +0,0 @@ -package d - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Dtd lexer. -var Dtd = internal.Register(MustNewLexer( - &Config{ - Name: "DTD", - Aliases: []string{"dtd"}, - Filenames: []string{"*.dtd"}, - MimeTypes: []string{"application/xml-dtd"}, - DotAll: true, - }, - Rules{ - "root": { - Include("common"), - {`(\s]+)`, ByGroups(Keyword, Text, NameTag), nil}, - {`PUBLIC|SYSTEM`, KeywordConstant, nil}, - {`[\[\]>]`, Keyword, nil}, - }, - "common": { - {`\s+`, Text, nil}, - {`(%|&)[^;]*;`, NameEntity, nil}, - {``, Comment, Pop(1)}, - {`-`, Comment, nil}, - }, - "element": { - Include("common"), - {`EMPTY|ANY|#PCDATA`, KeywordConstant, nil}, - {`[^>\s|()?+*,]+`, NameTag, nil}, - {`>`, Keyword, Pop(1)}, - }, - "attlist": { - Include("common"), - {`CDATA|IDREFS|IDREF|ID|NMTOKENS|NMTOKEN|ENTITIES|ENTITY|NOTATION`, KeywordConstant, nil}, - {`#REQUIRED|#IMPLIED|#FIXED`, KeywordConstant, nil}, - {`xml:space|xml:lang`, KeywordReserved, nil}, - {`[^>\s|()?+*,]+`, NameAttribute, nil}, - {`>`, Keyword, Pop(1)}, - }, - "entity": { - Include("common"), - {`SYSTEM|PUBLIC|NDATA`, KeywordConstant, nil}, - {`[^>\s|()?+*,]+`, NameEntity, nil}, - {`>`, Keyword, Pop(1)}, - }, - "notation": { - Include("common"), - {`SYSTEM|PUBLIC`, KeywordConstant, nil}, - {`[^>\s|()?+*,]+`, NameAttribute, nil}, - {`>`, Keyword, Pop(1)}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/e/ebnf.go b/vendor/github.com/alecthomas/chroma/lexers/e/ebnf.go deleted file mode 100644 index 42a3a37..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/e/ebnf.go +++ /dev/null @@ -1,51 +0,0 @@ -package e - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Ebnf lexer. -var Ebnf = internal.Register(MustNewLexer( - &Config{ - Name: "EBNF", - Aliases: []string{"ebnf"}, - Filenames: []string{"*.ebnf"}, - MimeTypes: []string{"text/x-ebnf"}, - }, - Rules{ - "root": { - Include("whitespace"), - Include("comment_start"), - Include("identifier"), - {`=`, Operator, Push("production")}, - }, - "production": { - Include("whitespace"), - Include("comment_start"), - Include("identifier"), - {`"[^"]*"`, LiteralStringDouble, nil}, - {`'[^']*'`, LiteralStringSingle, nil}, - {`(\?[^?]*\?)`, NameEntity, nil}, - {`[\[\]{}(),|]`, Punctuation, nil}, - {`-`, Operator, nil}, - {`;`, Punctuation, Pop(1)}, - {`\.`, Punctuation, Pop(1)}, - }, - "whitespace": { - {`\s+`, Text, nil}, - }, - "comment_start": { - {`\(\*`, CommentMultiline, Push("comment")}, - }, - "comment": { - {`[^*)]`, CommentMultiline, nil}, - Include("comment_start"), - {`\*\)`, CommentMultiline, Pop(1)}, - {`[*)]`, CommentMultiline, nil}, - }, - "identifier": { - {`([a-zA-Z][\w \-]*)`, Keyword, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/e/elixir.go b/vendor/github.com/alecthomas/chroma/lexers/e/elixir.go deleted file mode 100644 index 4073029..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/e/elixir.go +++ /dev/null @@ -1,270 +0,0 @@ -package e - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Elixir lexer. -var Elixir = internal.Register(MustNewLexer( - &Config{ - Name: "Elixir", - Aliases: []string{"elixir", "ex", "exs"}, - Filenames: []string{"*.ex", "*.exs"}, - MimeTypes: []string{"text/x-elixir"}, - }, - Rules{ - "root": { - {`\s+`, Text, nil}, - {`#.*$`, CommentSingle, nil}, - {`(\?)(\\x\{)([\da-fA-F]+)(\})`, ByGroups(LiteralStringChar, LiteralStringEscape, LiteralNumberHex, LiteralStringEscape), nil}, - {`(\?)(\\x[\da-fA-F]{1,2})`, ByGroups(LiteralStringChar, LiteralStringEscape), nil}, - {`(\?)(\\[abdefnrstv])`, ByGroups(LiteralStringChar, LiteralStringEscape), nil}, - {`\?\\?.`, LiteralStringChar, nil}, - {`:::`, LiteralStringSymbol, nil}, - {`::`, Operator, nil}, - {`:(?:\.\.\.|<<>>|%\{\}|%|\{\})`, LiteralStringSymbol, nil}, - {`:(?:(?:\.\.\.|[a-z_]\w*[!?]?)|[A-Z]\w*(?:\.[A-Z]\w*)*|(?:\<\<\<|\>\>\>|\|\|\||\&\&\&|\^\^\^|\~\~\~|\=\=\=|\!\=\=|\~\>\>|\<\~\>|\|\~\>|\<\|\>|\=\=|\!\=|\<\=|\>\=|\&\&|\|\||\<\>|\+\+|\-\-|\|\>|\=\~|\-\>|\<\-|\||\.|\=|\~\>|\<\~|\<|\>|\+|\-|\*|\/|\!|\^|\&))`, LiteralStringSymbol, nil}, - {`:"`, LiteralStringSymbol, Push("string_double_atom")}, - {`:'`, LiteralStringSymbol, Push("string_single_atom")}, - {`((?:\.\.\.|<<>>|%\{\}|%|\{\})|(?:(?:\.\.\.|[a-z_]\w*[!?]?)|[A-Z]\w*(?:\.[A-Z]\w*)*|(?:\<\<\<|\>\>\>|\|\|\||\&\&\&|\^\^\^|\~\~\~|\=\=\=|\!\=\=|\~\>\>|\<\~\>|\|\~\>|\<\|\>|\=\=|\!\=|\<\=|\>\=|\&\&|\|\||\<\>|\+\+|\-\-|\|\>|\=\~|\-\>|\<\-|\||\.|\=|\~\>|\<\~|\<|\>|\+|\-|\*|\/|\!|\^|\&)))(:)(?=\s|\n)`, ByGroups(LiteralStringSymbol, Punctuation), nil}, - {`@(?:\.\.\.|[a-z_]\w*[!?]?)`, NameAttribute, nil}, - {`(?:\.\.\.|[a-z_]\w*[!?]?)`, Name, nil}, - {`(%?)([A-Z]\w*(?:\.[A-Z]\w*)*)`, ByGroups(Punctuation, NameClass), nil}, - {`\<\<\<|\>\>\>|\|\|\||\&\&\&|\^\^\^|\~\~\~|\=\=\=|\!\=\=|\~\>\>|\<\~\>|\|\~\>|\<\|\>`, Operator, nil}, - {`\=\=|\!\=|\<\=|\>\=|\&\&|\|\||\<\>|\+\+|\-\-|\|\>|\=\~|\-\>|\<\-|\||\.|\=|\~\>|\<\~`, Operator, nil}, - {`\\\\|\<\<|\>\>|\=\>|\(|\)|\:|\;|\,|\[|\]`, Punctuation, nil}, - {`&\d`, NameEntity, nil}, - {`\<|\>|\+|\-|\*|\/|\!|\^|\&`, Operator, nil}, - {`0b[01](_?[01])*`, LiteralNumberBin, nil}, - {`0o[0-7](_?[0-7])*`, LiteralNumberOct, nil}, - {`0x[\da-fA-F](_?[\dA-Fa-f])*`, LiteralNumberHex, nil}, - {`\d(_?\d)*\.\d(_?\d)*([eE][-+]?\d(_?\d)*)?`, LiteralNumberFloat, nil}, - {`\d(_?\d)*`, LiteralNumberInteger, nil}, - {`"""\s*`, LiteralStringHeredoc, Push("heredoc_double")}, - {`'''\s*$`, LiteralStringHeredoc, Push("heredoc_single")}, - {`"`, LiteralStringDouble, Push("string_double")}, - {`'`, LiteralStringSingle, Push("string_single")}, - Include("sigils"), - {`%\{`, Punctuation, Push("map_key")}, - {`\{`, Punctuation, Push("tuple")}, - }, - "heredoc_double": { - {`^\s*"""`, LiteralStringHeredoc, Pop(1)}, - Include("heredoc_interpol"), - }, - "heredoc_single": { - {`^\s*'''`, LiteralStringHeredoc, Pop(1)}, - Include("heredoc_interpol"), - }, - "heredoc_interpol": { - {`[^#\\\n]+`, LiteralStringHeredoc, nil}, - Include("escapes"), - {`\\.`, LiteralStringHeredoc, nil}, - {`\n+`, LiteralStringHeredoc, nil}, - Include("interpol"), - }, - "heredoc_no_interpol": { - {`[^\\\n]+`, LiteralStringHeredoc, nil}, - {`\\.`, LiteralStringHeredoc, nil}, - {`\n+`, LiteralStringHeredoc, nil}, - }, - "escapes": { - {`(\\x\{)([\da-fA-F]+)(\})`, ByGroups(LiteralStringEscape, LiteralNumberHex, LiteralStringEscape), nil}, - {`(\\x[\da-fA-F]{1,2})`, LiteralStringEscape, nil}, - {`(\\[abdefnrstv])`, LiteralStringEscape, nil}, - }, - "interpol": { - {`#\{`, LiteralStringInterpol, Push("interpol_string")}, - }, - "interpol_string": { - {`\}`, LiteralStringInterpol, Pop(1)}, - Include("root"), - }, - "map_key": { - Include("root"), - {`:`, Punctuation, Push("map_val")}, - {`=>`, Punctuation, Push("map_val")}, - {`\}`, Punctuation, Pop(1)}, - }, - "map_val": { - Include("root"), - {`,`, Punctuation, Pop(1)}, - {`(?=\})`, Punctuation, Pop(1)}, - }, - "tuple": { - Include("root"), - {`\}`, Punctuation, Pop(1)}, - }, - "string_double": { - {`[^#"\\]+`, LiteralStringDouble, nil}, - Include("escapes"), - {`\\.`, LiteralStringDouble, nil}, - {`(")`, ByGroups(LiteralStringDouble), Pop(1)}, - Include("interpol"), - }, - "string_single": { - {`[^#'\\]+`, LiteralStringSingle, nil}, - Include("escapes"), - {`\\.`, LiteralStringSingle, nil}, - {`(')`, ByGroups(LiteralStringSingle), Pop(1)}, - Include("interpol"), - }, - "string_double_atom": { - {`[^#"\\]+`, LiteralStringSymbol, nil}, - Include("escapes"), - {`\\.`, LiteralStringSymbol, nil}, - {`(")`, ByGroups(LiteralStringSymbol), Pop(1)}, - Include("interpol"), - }, - "string_single_atom": { - {`[^#'\\]+`, LiteralStringSymbol, nil}, - Include("escapes"), - {`\\.`, LiteralStringSymbol, nil}, - {`(')`, ByGroups(LiteralStringSymbol), Pop(1)}, - Include("interpol"), - }, - "sigils": { - {`(~[a-z])(""")`, ByGroups(LiteralStringOther, LiteralStringHeredoc), Push("triquot-end", "triquot-intp")}, - {`(~[A-Z])(""")`, ByGroups(LiteralStringOther, LiteralStringHeredoc), Push("triquot-end", "triquot-no-intp")}, - {`(~[a-z])(''')`, ByGroups(LiteralStringOther, LiteralStringHeredoc), Push("triapos-end", "triapos-intp")}, - {`(~[A-Z])(''')`, ByGroups(LiteralStringOther, LiteralStringHeredoc), Push("triapos-end", "triapos-no-intp")}, - {`~[a-z]\{`, LiteralStringOther, Push("cb-intp")}, - {`~[A-Z]\{`, LiteralStringOther, Push("cb-no-intp")}, - {`~[a-z]\[`, LiteralStringOther, Push("sb-intp")}, - {`~[A-Z]\[`, LiteralStringOther, Push("sb-no-intp")}, - {`~[a-z]\(`, LiteralStringOther, Push("pa-intp")}, - {`~[A-Z]\(`, LiteralStringOther, Push("pa-no-intp")}, - {`~[a-z]<`, LiteralStringOther, Push("ab-intp")}, - {`~[A-Z]<`, LiteralStringOther, Push("ab-no-intp")}, - {`~[a-z]/`, LiteralStringOther, Push("slas-intp")}, - {`~[A-Z]/`, LiteralStringOther, Push("slas-no-intp")}, - {`~[a-z]\|`, LiteralStringOther, Push("pipe-intp")}, - {`~[A-Z]\|`, LiteralStringOther, Push("pipe-no-intp")}, - {`~[a-z]"`, LiteralStringOther, Push("quot-intp")}, - {`~[A-Z]"`, LiteralStringOther, Push("quot-no-intp")}, - {`~[a-z]'`, LiteralStringOther, Push("apos-intp")}, - {`~[A-Z]'`, LiteralStringOther, Push("apos-no-intp")}, - }, - "triquot-end": { - {`[a-zA-Z]+`, LiteralStringOther, Pop(1)}, - Default(Pop(1)), - }, - "triquot-intp": { - {`^\s*"""`, LiteralStringHeredoc, Pop(1)}, - Include("heredoc_interpol"), - }, - "triquot-no-intp": { - {`^\s*"""`, LiteralStringHeredoc, Pop(1)}, - Include("heredoc_no_interpol"), - }, - "triapos-end": { - {`[a-zA-Z]+`, LiteralStringOther, Pop(1)}, - Default(Pop(1)), - }, - "triapos-intp": { - {`^\s*'''`, LiteralStringHeredoc, Pop(1)}, - Include("heredoc_interpol"), - }, - "triapos-no-intp": { - {`^\s*'''`, LiteralStringHeredoc, Pop(1)}, - Include("heredoc_no_interpol"), - }, - "cb-intp": { - {`[^#\}\\]+`, LiteralStringOther, nil}, - Include("escapes"), - {`\\.`, LiteralStringOther, nil}, - {`\}[a-zA-Z]*`, LiteralStringOther, Pop(1)}, - Include("interpol"), - }, - "cb-no-intp": { - {`[^\}\\]+`, LiteralStringOther, nil}, - {`\\.`, LiteralStringOther, nil}, - {`\}[a-zA-Z]*`, LiteralStringOther, Pop(1)}, - }, - "sb-intp": { - {`[^#\]\\]+`, LiteralStringOther, nil}, - Include("escapes"), - {`\\.`, LiteralStringOther, nil}, - {`\][a-zA-Z]*`, LiteralStringOther, Pop(1)}, - Include("interpol"), - }, - "sb-no-intp": { - {`[^\]\\]+`, LiteralStringOther, nil}, - {`\\.`, LiteralStringOther, nil}, - {`\][a-zA-Z]*`, LiteralStringOther, Pop(1)}, - }, - "pa-intp": { - {`[^#\)\\]+`, LiteralStringOther, nil}, - Include("escapes"), - {`\\.`, LiteralStringOther, nil}, - {`\)[a-zA-Z]*`, LiteralStringOther, Pop(1)}, - Include("interpol"), - }, - "pa-no-intp": { - {`[^\)\\]+`, LiteralStringOther, nil}, - {`\\.`, LiteralStringOther, nil}, - {`\)[a-zA-Z]*`, LiteralStringOther, Pop(1)}, - }, - "ab-intp": { - {`[^#>\\]+`, LiteralStringOther, nil}, - Include("escapes"), - {`\\.`, LiteralStringOther, nil}, - {`>[a-zA-Z]*`, LiteralStringOther, Pop(1)}, - Include("interpol"), - }, - "ab-no-intp": { - {`[^>\\]+`, LiteralStringOther, nil}, - {`\\.`, LiteralStringOther, nil}, - {`>[a-zA-Z]*`, LiteralStringOther, Pop(1)}, - }, - "slas-intp": { - {`[^#/\\]+`, LiteralStringOther, nil}, - Include("escapes"), - {`\\.`, LiteralStringOther, nil}, - {`/[a-zA-Z]*`, LiteralStringOther, Pop(1)}, - Include("interpol"), - }, - "slas-no-intp": { - {`[^/\\]+`, LiteralStringOther, nil}, - {`\\.`, LiteralStringOther, nil}, - {`/[a-zA-Z]*`, LiteralStringOther, Pop(1)}, - }, - "pipe-intp": { - {`[^#\|\\]+`, LiteralStringOther, nil}, - Include("escapes"), - {`\\.`, LiteralStringOther, nil}, - {`\|[a-zA-Z]*`, LiteralStringOther, Pop(1)}, - Include("interpol"), - }, - "pipe-no-intp": { - {`[^\|\\]+`, LiteralStringOther, nil}, - {`\\.`, LiteralStringOther, nil}, - {`\|[a-zA-Z]*`, LiteralStringOther, Pop(1)}, - }, - "quot-intp": { - {`[^#"\\]+`, LiteralStringOther, nil}, - Include("escapes"), - {`\\.`, LiteralStringOther, nil}, - {`"[a-zA-Z]*`, LiteralStringOther, Pop(1)}, - Include("interpol"), - }, - "quot-no-intp": { - {`[^"\\]+`, LiteralStringOther, nil}, - {`\\.`, LiteralStringOther, nil}, - {`"[a-zA-Z]*`, LiteralStringOther, Pop(1)}, - }, - "apos-intp": { - {`[^#'\\]+`, LiteralStringOther, nil}, - Include("escapes"), - {`\\.`, LiteralStringOther, nil}, - {`'[a-zA-Z]*`, LiteralStringOther, Pop(1)}, - Include("interpol"), - }, - "apos-no-intp": { - {`[^'\\]+`, LiteralStringOther, nil}, - {`\\.`, LiteralStringOther, nil}, - {`'[a-zA-Z]*`, LiteralStringOther, Pop(1)}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/e/elm.go b/vendor/github.com/alecthomas/chroma/lexers/e/elm.go deleted file mode 100644 index a71c627..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/e/elm.go +++ /dev/null @@ -1,59 +0,0 @@ -package e - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Elm lexer. -var Elm = internal.Register(MustNewLexer( - &Config{ - Name: "Elm", - Aliases: []string{"elm"}, - Filenames: []string{"*.elm"}, - MimeTypes: []string{"text/x-elm"}, - }, - Rules{ - "root": { - {`\{-`, CommentMultiline, Push("comment")}, - {`--.*`, CommentSingle, nil}, - {`\s+`, Text, nil}, - {`"`, LiteralString, Push("doublequote")}, - {`^\s*module\s*`, KeywordNamespace, Push("imports")}, - {`^\s*import\s*`, KeywordNamespace, Push("imports")}, - {`\[glsl\|.*`, NameEntity, Push("shader")}, - {Words(``, `\b`, `alias`, `as`, `case`, `else`, `if`, `import`, `in`, `let`, `module`, `of`, `port`, `then`, `type`, `where`), KeywordReserved, nil}, - {`[A-Z]\w*`, KeywordType, nil}, - {`^main `, KeywordReserved, nil}, - {Words(`\(`, `\)`, `~`, `||`, `|>`, `|`, "`", `^`, `\`, `'`, `>>`, `>=`, `>`, `==`, `=`, `<~`, `<|`, `<=`, `<<`, `<-`, `<`, `::`, `:`, `/=`, `//`, `/`, `..`, `.`, `->`, `-`, `++`, `+`, `*`, `&&`, `%`), NameFunction, nil}, - {Words(``, ``, `~`, `||`, `|>`, `|`, "`", `^`, `\`, `'`, `>>`, `>=`, `>`, `==`, `=`, `<~`, `<|`, `<=`, `<<`, `<-`, `<`, `::`, `:`, `/=`, `//`, `/`, `..`, `.`, `->`, `-`, `++`, `+`, `*`, `&&`, `%`), NameFunction, nil}, - Include("numbers"), - {`[a-z_][a-zA-Z_\']*`, NameVariable, nil}, - {`[,()\[\]{}]`, Punctuation, nil}, - }, - "comment": { - {`-(?!\})`, CommentMultiline, nil}, - {`\{-`, CommentMultiline, Push("comment")}, - {`[^-}]`, CommentMultiline, nil}, - {`-\}`, CommentMultiline, Pop(1)}, - }, - "doublequote": { - {`\\u[0-9a-fA-F]{4}`, LiteralStringEscape, nil}, - {`\\[nrfvb\\"]`, LiteralStringEscape, nil}, - {`[^"]`, LiteralString, nil}, - {`"`, LiteralString, Pop(1)}, - }, - "imports": { - {`\w+(\.\w+)*`, NameClass, Pop(1)}, - }, - "numbers": { - {`_?\d+\.(?=\d+)`, LiteralNumberFloat, nil}, - {`_?\d+`, LiteralNumberInteger, nil}, - }, - "shader": { - {`\|(?!\])`, NameEntity, nil}, - {`\|\]`, NameEntity, Pop(1)}, - {`.*\n`, NameEntity, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/e/emacs.go b/vendor/github.com/alecthomas/chroma/lexers/e/emacs.go deleted file mode 100644 index 78ffda1..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/e/emacs.go +++ /dev/null @@ -1,582 +0,0 @@ -package e - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -var ( - emacsMacros = []string{ - "atomic-change-group", "case", "block", "cl-block", "cl-callf", "cl-callf2", - "cl-case", "cl-decf", "cl-declaim", "cl-declare", - "cl-define-compiler-macro", "cl-defmacro", "cl-defstruct", - "cl-defsubst", "cl-deftype", "cl-defun", "cl-destructuring-bind", - "cl-do", "cl-do*", "cl-do-all-symbols", "cl-do-symbols", "cl-dolist", - "cl-dotimes", "cl-ecase", "cl-etypecase", "eval-when", "cl-eval-when", "cl-flet", - "cl-flet*", "cl-function", "cl-incf", "cl-labels", "cl-letf", - "cl-letf*", "cl-load-time-value", "cl-locally", "cl-loop", - "cl-macrolet", "cl-multiple-value-bind", "cl-multiple-value-setq", - "cl-progv", "cl-psetf", "cl-psetq", "cl-pushnew", "cl-remf", - "cl-return", "cl-return-from", "cl-rotatef", "cl-shiftf", - "cl-symbol-macrolet", "cl-tagbody", "cl-the", "cl-typecase", - "combine-after-change-calls", "condition-case-unless-debug", "decf", - "declaim", "declare", "declare-function", "def-edebug-spec", - "defadvice", "defclass", "defcustom", "defface", "defgeneric", - "defgroup", "define-advice", "define-alternatives", - "define-compiler-macro", "define-derived-mode", "define-generic-mode", - "define-global-minor-mode", "define-globalized-minor-mode", - "define-minor-mode", "define-modify-macro", - "define-obsolete-face-alias", "define-obsolete-function-alias", - "define-obsolete-variable-alias", "define-setf-expander", - "define-skeleton", "defmacro", "defmethod", "defsetf", "defstruct", - "defsubst", "deftheme", "deftype", "defun", "defvar-local", - "delay-mode-hooks", "destructuring-bind", "do", "do*", - "do-all-symbols", "do-symbols", "dolist", "dont-compile", "dotimes", - "dotimes-with-progress-reporter", "ecase", "ert-deftest", "etypecase", - "eval-and-compile", "eval-when-compile", "flet", "ignore-errors", - "incf", "labels", "lambda", "letrec", "lexical-let", "lexical-let*", - "loop", "multiple-value-bind", "multiple-value-setq", "noreturn", - "oref", "oref-default", "oset", "oset-default", "pcase", - "pcase-defmacro", "pcase-dolist", "pcase-exhaustive", "pcase-let", - "pcase-let*", "pop", "psetf", "psetq", "push", "pushnew", "remf", - "return", "rotatef", "rx", "save-match-data", "save-selected-window", - "save-window-excursion", "setf", "setq-local", "shiftf", - "track-mouse", "typecase", "unless", "use-package", "when", - "while-no-input", "with-case-table", "with-category-table", - "with-coding-priority", "with-current-buffer", "with-demoted-errors", - "with-eval-after-load", "with-file-modes", "with-local-quit", - "with-output-to-string", "with-output-to-temp-buffer", - "with-parsed-tramp-file-name", "with-selected-frame", - "with-selected-window", "with-silent-modifications", "with-slots", - "with-syntax-table", "with-temp-buffer", "with-temp-file", - "with-temp-message", "with-timeout", "with-tramp-connection-property", - "with-tramp-file-property", "with-tramp-progress-reporter", - "with-wrapper-hook", "load-time-value", "locally", "macrolet", "progv", - "return-from", - } - - emacsSpecialForms = []string{ - "and", "catch", "cond", "condition-case", "defconst", "defvar", - "function", "if", "interactive", "let", "let*", "or", "prog1", - "prog2", "progn", "quote", "save-current-buffer", "save-excursion", - "save-restriction", "setq", "setq-default", "subr-arity", - "unwind-protect", "while", - } - - emacsBuiltinFunction = []string{ - "%", "*", "+", "-", "/", "/=", "1+", "1-", "<", "<=", "=", ">", ">=", - "Snarf-documentation", "abort-recursive-edit", "abs", - "accept-process-output", "access-file", "accessible-keymaps", "acos", - "active-minibuffer-window", "add-face-text-property", - "add-name-to-file", "add-text-properties", "all-completions", - "append", "apply", "apropos-internal", "aref", "arrayp", "aset", - "ash", "asin", "assoc", "assoc-string", "assq", "atan", "atom", - "autoload", "autoload-do-load", "backtrace", "backtrace--locals", - "backtrace-debug", "backtrace-eval", "backtrace-frame", - "backward-char", "backward-prefix-chars", "barf-if-buffer-read-only", - "base64-decode-region", "base64-decode-string", - "base64-encode-region", "base64-encode-string", "beginning-of-line", - "bidi-find-overridden-directionality", "bidi-resolved-levels", - "bitmap-spec-p", "bobp", "bolp", "bool-vector", - "bool-vector-count-consecutive", "bool-vector-count-population", - "bool-vector-exclusive-or", "bool-vector-intersection", - "bool-vector-not", "bool-vector-p", "bool-vector-set-difference", - "bool-vector-subsetp", "bool-vector-union", "boundp", - "buffer-base-buffer", "buffer-chars-modified-tick", - "buffer-enable-undo", "buffer-file-name", "buffer-has-markers-at", - "buffer-list", "buffer-live-p", "buffer-local-value", - "buffer-local-variables", "buffer-modified-p", "buffer-modified-tick", - "buffer-name", "buffer-size", "buffer-string", "buffer-substring", - "buffer-substring-no-properties", "buffer-swap-text", "bufferp", - "bury-buffer-internal", "byte-code", "byte-code-function-p", - "byte-to-position", "byte-to-string", "byteorder", - "call-interactively", "call-last-kbd-macro", "call-process", - "call-process-region", "cancel-kbd-macro-events", "capitalize", - "capitalize-region", "capitalize-word", "car", "car-less-than-car", - "car-safe", "case-table-p", "category-docstring", - "category-set-mnemonics", "category-table", "category-table-p", - "ccl-execute", "ccl-execute-on-string", "ccl-program-p", "cdr", - "cdr-safe", "ceiling", "char-after", "char-before", - "char-category-set", "char-charset", "char-equal", "char-or-string-p", - "char-resolve-modifiers", "char-syntax", "char-table-extra-slot", - "char-table-p", "char-table-parent", "char-table-range", - "char-table-subtype", "char-to-string", "char-width", "characterp", - "charset-after", "charset-id-internal", "charset-plist", - "charset-priority-list", "charsetp", "check-coding-system", - "check-coding-systems-region", "clear-buffer-auto-save-failure", - "clear-charset-maps", "clear-face-cache", "clear-font-cache", - "clear-image-cache", "clear-string", "clear-this-command-keys", - "close-font", "clrhash", "coding-system-aliases", - "coding-system-base", "coding-system-eol-type", "coding-system-p", - "coding-system-plist", "coding-system-priority-list", - "coding-system-put", "color-distance", "color-gray-p", - "color-supported-p", "combine-after-change-execute", - "command-error-default-function", "command-remapping", "commandp", - "compare-buffer-substrings", "compare-strings", - "compare-window-configurations", "completing-read", - "compose-region-internal", "compose-string-internal", - "composition-get-gstring", "compute-motion", "concat", "cons", - "consp", "constrain-to-field", "continue-process", - "controlling-tty-p", "coordinates-in-window-p", "copy-alist", - "copy-category-table", "copy-file", "copy-hash-table", "copy-keymap", - "copy-marker", "copy-sequence", "copy-syntax-table", "copysign", - "cos", "current-active-maps", "current-bidi-paragraph-direction", - "current-buffer", "current-case-table", "current-column", - "current-global-map", "current-idle-time", "current-indentation", - "current-input-mode", "current-local-map", "current-message", - "current-minor-mode-maps", "current-time", "current-time-string", - "current-time-zone", "current-window-configuration", - "cygwin-convert-file-name-from-windows", - "cygwin-convert-file-name-to-windows", "daemon-initialized", - "daemonp", "dbus--init-bus", "dbus-get-unique-name", - "dbus-message-internal", "debug-timer-check", "declare-equiv-charset", - "decode-big5-char", "decode-char", "decode-coding-region", - "decode-coding-string", "decode-sjis-char", "decode-time", - "default-boundp", "default-file-modes", "default-printer-name", - "default-toplevel-value", "default-value", "define-category", - "define-charset-alias", "define-charset-internal", - "define-coding-system-alias", "define-coding-system-internal", - "define-fringe-bitmap", "define-hash-table-test", "define-key", - "define-prefix-command", "delete", - "delete-all-overlays", "delete-and-extract-region", "delete-char", - "delete-directory-internal", "delete-field", "delete-file", - "delete-frame", "delete-other-windows-internal", "delete-overlay", - "delete-process", "delete-region", "delete-terminal", - "delete-window-internal", "delq", "describe-buffer-bindings", - "describe-vector", "destroy-fringe-bitmap", "detect-coding-region", - "detect-coding-string", "ding", "directory-file-name", - "directory-files", "directory-files-and-attributes", "discard-input", - "display-supports-face-attributes-p", "do-auto-save", "documentation", - "documentation-property", "downcase", "downcase-region", - "downcase-word", "draw-string", "dump-colors", "dump-emacs", - "dump-face", "dump-frame-glyph-matrix", "dump-glyph-matrix", - "dump-glyph-row", "dump-redisplay-history", "dump-tool-bar-row", - "elt", "emacs-pid", "encode-big5-char", "encode-char", - "encode-coding-region", "encode-coding-string", "encode-sjis-char", - "encode-time", "end-kbd-macro", "end-of-line", "eobp", "eolp", "eq", - "eql", "equal", "equal-including-properties", "erase-buffer", - "error-message-string", "eval", "eval-buffer", "eval-region", - "event-convert-list", "execute-kbd-macro", "exit-recursive-edit", - "exp", "expand-file-name", "expt", "external-debugging-output", - "face-attribute-relative-p", "face-attributes-as-vector", "face-font", - "fboundp", "fceiling", "fetch-bytecode", "ffloor", - "field-beginning", "field-end", "field-string", - "field-string-no-properties", "file-accessible-directory-p", - "file-acl", "file-attributes", "file-attributes-lessp", - "file-directory-p", "file-executable-p", "file-exists-p", - "file-locked-p", "file-modes", "file-name-absolute-p", - "file-name-all-completions", "file-name-as-directory", - "file-name-completion", "file-name-directory", - "file-name-nondirectory", "file-newer-than-file-p", "file-readable-p", - "file-regular-p", "file-selinux-context", "file-symlink-p", - "file-system-info", "file-system-info", "file-writable-p", - "fillarray", "find-charset-region", "find-charset-string", - "find-coding-systems-region-internal", "find-composition-internal", - "find-file-name-handler", "find-font", "find-operation-coding-system", - "float", "float-time", "floatp", "floor", "fmakunbound", - "following-char", "font-at", "font-drive-otf", "font-face-attributes", - "font-family-list", "font-get", "font-get-glyphs", - "font-get-system-font", "font-get-system-normal-font", "font-info", - "font-match-p", "font-otf-alternates", "font-put", - "font-shape-gstring", "font-spec", "font-variation-glyphs", - "font-xlfd-name", "fontp", "fontset-font", "fontset-info", - "fontset-list", "fontset-list-all", "force-mode-line-update", - "force-window-update", "format", "format-mode-line", - "format-network-address", "format-time-string", "forward-char", - "forward-comment", "forward-line", "forward-word", - "frame-border-width", "frame-bottom-divider-width", - "frame-can-run-window-configuration-change-hook", "frame-char-height", - "frame-char-width", "frame-face-alist", "frame-first-window", - "frame-focus", "frame-font-cache", "frame-fringe-width", "frame-list", - "frame-live-p", "frame-or-buffer-changed-p", "frame-parameter", - "frame-parameters", "frame-pixel-height", "frame-pixel-width", - "frame-pointer-visible-p", "frame-right-divider-width", - "frame-root-window", "frame-scroll-bar-height", - "frame-scroll-bar-width", "frame-selected-window", "frame-terminal", - "frame-text-cols", "frame-text-height", "frame-text-lines", - "frame-text-width", "frame-total-cols", "frame-total-lines", - "frame-visible-p", "framep", "frexp", "fringe-bitmaps-at-pos", - "fround", "fset", "ftruncate", "funcall", "funcall-interactively", - "function-equal", "functionp", "gap-position", "gap-size", - "garbage-collect", "gc-status", "generate-new-buffer-name", "get", - "get-buffer", "get-buffer-create", "get-buffer-process", - "get-buffer-window", "get-byte", "get-char-property", - "get-char-property-and-overlay", "get-file-buffer", "get-file-char", - "get-internal-run-time", "get-load-suffixes", "get-pos-property", - "get-process", "get-screen-color", "get-text-property", - "get-unicode-property-internal", "get-unused-category", - "get-unused-iso-final-char", "getenv-internal", "gethash", - "gfile-add-watch", "gfile-rm-watch", "global-key-binding", - "gnutls-available-p", "gnutls-boot", "gnutls-bye", "gnutls-deinit", - "gnutls-error-fatalp", "gnutls-error-string", "gnutls-errorp", - "gnutls-get-initstage", "gnutls-peer-status", - "gnutls-peer-status-warning-describe", "goto-char", "gpm-mouse-start", - "gpm-mouse-stop", "group-gid", "group-real-gid", - "handle-save-session", "handle-switch-frame", "hash-table-count", - "hash-table-p", "hash-table-rehash-size", - "hash-table-rehash-threshold", "hash-table-size", "hash-table-test", - "hash-table-weakness", "iconify-frame", "identity", "image-flush", - "image-mask-p", "image-metadata", "image-size", "imagemagick-types", - "imagep", "indent-to", "indirect-function", "indirect-variable", - "init-image-library", "inotify-add-watch", "inotify-rm-watch", - "input-pending-p", "insert", "insert-and-inherit", - "insert-before-markers", "insert-before-markers-and-inherit", - "insert-buffer-substring", "insert-byte", "insert-char", - "insert-file-contents", "insert-startup-screen", "int86", - "integer-or-marker-p", "integerp", "interactive-form", "intern", - "intern-soft", "internal--track-mouse", "internal-char-font", - "internal-complete-buffer", "internal-copy-lisp-face", - "internal-default-process-filter", - "internal-default-process-sentinel", "internal-describe-syntax-value", - "internal-event-symbol-parse-modifiers", - "internal-face-x-get-resource", "internal-get-lisp-face-attribute", - "internal-lisp-face-attribute-values", "internal-lisp-face-empty-p", - "internal-lisp-face-equal-p", "internal-lisp-face-p", - "internal-make-lisp-face", "internal-make-var-non-special", - "internal-merge-in-global-face", - "internal-set-alternative-font-family-alist", - "internal-set-alternative-font-registry-alist", - "internal-set-font-selection-order", - "internal-set-lisp-face-attribute", - "internal-set-lisp-face-attribute-from-resource", - "internal-show-cursor", "internal-show-cursor-p", "interrupt-process", - "invisible-p", "invocation-directory", "invocation-name", "isnan", - "iso-charset", "key-binding", "key-description", - "keyboard-coding-system", "keymap-parent", "keymap-prompt", "keymapp", - "keywordp", "kill-all-local-variables", "kill-buffer", "kill-emacs", - "kill-local-variable", "kill-process", "last-nonminibuffer-frame", - "lax-plist-get", "lax-plist-put", "ldexp", "length", - "libxml-parse-html-region", "libxml-parse-xml-region", - "line-beginning-position", "line-end-position", "line-pixel-height", - "list", "list-fonts", "list-system-processes", "listp", "load", - "load-average", "local-key-binding", "local-variable-if-set-p", - "local-variable-p", "locale-info", "locate-file-internal", - "lock-buffer", "log", "logand", "logb", "logior", "lognot", "logxor", - "looking-at", "lookup-image", "lookup-image-map", "lookup-key", - "lower-frame", "lsh", "macroexpand", "make-bool-vector", - "make-byte-code", "make-category-set", "make-category-table", - "make-char", "make-char-table", "make-directory-internal", - "make-frame-invisible", "make-frame-visible", "make-hash-table", - "make-indirect-buffer", "make-keymap", "make-list", - "make-local-variable", "make-marker", "make-network-process", - "make-overlay", "make-serial-process", "make-sparse-keymap", - "make-string", "make-symbol", "make-symbolic-link", "make-temp-name", - "make-terminal-frame", "make-variable-buffer-local", - "make-variable-frame-local", "make-vector", "makunbound", - "map-char-table", "map-charset-chars", "map-keymap", - "map-keymap-internal", "mapatoms", "mapc", "mapcar", "mapconcat", - "maphash", "mark-marker", "marker-buffer", "marker-insertion-type", - "marker-position", "markerp", "match-beginning", "match-data", - "match-end", "matching-paren", "max", "max-char", "md5", "member", - "memory-info", "memory-limit", "memory-use-counts", "memq", "memql", - "menu-bar-menu-at-x-y", "menu-or-popup-active-p", - "menu-or-popup-active-p", "merge-face-attribute", "message", - "message-box", "message-or-box", "min", - "minibuffer-completion-contents", "minibuffer-contents", - "minibuffer-contents-no-properties", "minibuffer-depth", - "minibuffer-prompt", "minibuffer-prompt-end", - "minibuffer-selected-window", "minibuffer-window", "minibufferp", - "minor-mode-key-binding", "mod", "modify-category-entry", - "modify-frame-parameters", "modify-syntax-entry", - "mouse-pixel-position", "mouse-position", "move-overlay", - "move-point-visually", "move-to-column", "move-to-window-line", - "msdos-downcase-filename", "msdos-long-file-names", "msdos-memget", - "msdos-memput", "msdos-mouse-disable", "msdos-mouse-enable", - "msdos-mouse-init", "msdos-mouse-p", "msdos-remember-default-colors", - "msdos-set-keyboard", "msdos-set-mouse-buttons", - "multibyte-char-to-unibyte", "multibyte-string-p", "narrow-to-region", - "natnump", "nconc", "network-interface-info", - "network-interface-list", "new-fontset", "newline-cache-check", - "next-char-property-change", "next-frame", "next-overlay-change", - "next-property-change", "next-read-file-uses-dialog-p", - "next-single-char-property-change", "next-single-property-change", - "next-window", "nlistp", "nreverse", "nth", "nthcdr", "null", - "number-or-marker-p", "number-to-string", "numberp", - "open-dribble-file", "open-font", "open-termscript", - "optimize-char-table", "other-buffer", "other-window-for-scrolling", - "overlay-buffer", "overlay-end", "overlay-get", "overlay-lists", - "overlay-properties", "overlay-put", "overlay-recenter", - "overlay-start", "overlayp", "overlays-at", "overlays-in", - "parse-partial-sexp", "play-sound-internal", "plist-get", - "plist-member", "plist-put", "point", "point-marker", "point-max", - "point-max-marker", "point-min", "point-min-marker", - "pos-visible-in-window-p", "position-bytes", "posix-looking-at", - "posix-search-backward", "posix-search-forward", "posix-string-match", - "posn-at-point", "posn-at-x-y", "preceding-char", - "prefix-numeric-value", "previous-char-property-change", - "previous-frame", "previous-overlay-change", - "previous-property-change", "previous-single-char-property-change", - "previous-single-property-change", "previous-window", "prin1", - "prin1-to-string", "princ", "print", "process-attributes", - "process-buffer", "process-coding-system", "process-command", - "process-connection", "process-contact", "process-datagram-address", - "process-exit-status", "process-filter", "process-filter-multibyte-p", - "process-id", "process-inherit-coding-system-flag", "process-list", - "process-mark", "process-name", "process-plist", - "process-query-on-exit-flag", "process-running-child-p", - "process-send-eof", "process-send-region", "process-send-string", - "process-sentinel", "process-status", "process-tty-name", - "process-type", "processp", "profiler-cpu-log", - "profiler-cpu-running-p", "profiler-cpu-start", "profiler-cpu-stop", - "profiler-memory-log", "profiler-memory-running-p", - "profiler-memory-start", "profiler-memory-stop", "propertize", - "purecopy", "put", "put-text-property", - "put-unicode-property-internal", "puthash", "query-font", - "query-fontset", "quit-process", "raise-frame", "random", "rassoc", - "rassq", "re-search-backward", "re-search-forward", "read", - "read-buffer", "read-char", "read-char-exclusive", - "read-coding-system", "read-command", "read-event", - "read-from-minibuffer", "read-from-string", "read-function", - "read-key-sequence", "read-key-sequence-vector", - "read-no-blanks-input", "read-non-nil-coding-system", "read-string", - "read-variable", "recent-auto-save-p", "recent-doskeys", - "recent-keys", "recenter", "recursion-depth", "recursive-edit", - "redirect-debugging-output", "redirect-frame-focus", "redisplay", - "redraw-display", "redraw-frame", "regexp-quote", "region-beginning", - "region-end", "register-ccl-program", "register-code-conversion-map", - "remhash", "remove-list-of-text-properties", "remove-text-properties", - "rename-buffer", "rename-file", "replace-match", - "reset-this-command-lengths", "resize-mini-window-internal", - "restore-buffer-modified-p", "resume-tty", "reverse", "round", - "run-hook-with-args", "run-hook-with-args-until-failure", - "run-hook-with-args-until-success", "run-hook-wrapped", "run-hooks", - "run-window-configuration-change-hook", "run-window-scroll-functions", - "safe-length", "scan-lists", "scan-sexps", "scroll-down", - "scroll-left", "scroll-other-window", "scroll-right", "scroll-up", - "search-backward", "search-forward", "secure-hash", "select-frame", - "select-window", "selected-frame", "selected-window", - "self-insert-command", "send-string-to-terminal", "sequencep", - "serial-process-configure", "set", "set-buffer", - "set-buffer-auto-saved", "set-buffer-major-mode", - "set-buffer-modified-p", "set-buffer-multibyte", "set-case-table", - "set-category-table", "set-char-table-extra-slot", - "set-char-table-parent", "set-char-table-range", "set-charset-plist", - "set-charset-priority", "set-coding-system-priority", - "set-cursor-size", "set-default", "set-default-file-modes", - "set-default-toplevel-value", "set-file-acl", "set-file-modes", - "set-file-selinux-context", "set-file-times", "set-fontset-font", - "set-frame-height", "set-frame-position", "set-frame-selected-window", - "set-frame-size", "set-frame-width", "set-fringe-bitmap-face", - "set-input-interrupt-mode", "set-input-meta-mode", "set-input-mode", - "set-keyboard-coding-system-internal", "set-keymap-parent", - "set-marker", "set-marker-insertion-type", "set-match-data", - "set-message-beep", "set-minibuffer-window", - "set-mouse-pixel-position", "set-mouse-position", - "set-network-process-option", "set-output-flow-control", - "set-process-buffer", "set-process-coding-system", - "set-process-datagram-address", "set-process-filter", - "set-process-filter-multibyte", - "set-process-inherit-coding-system-flag", "set-process-plist", - "set-process-query-on-exit-flag", "set-process-sentinel", - "set-process-window-size", "set-quit-char", - "set-safe-terminal-coding-system-internal", "set-screen-color", - "set-standard-case-table", "set-syntax-table", - "set-terminal-coding-system-internal", "set-terminal-local-value", - "set-terminal-parameter", "set-text-properties", "set-time-zone-rule", - "set-visited-file-modtime", "set-window-buffer", - "set-window-combination-limit", "set-window-configuration", - "set-window-dedicated-p", "set-window-display-table", - "set-window-fringes", "set-window-hscroll", "set-window-margins", - "set-window-new-normal", "set-window-new-pixel", - "set-window-new-total", "set-window-next-buffers", - "set-window-parameter", "set-window-point", "set-window-prev-buffers", - "set-window-redisplay-end-trigger", "set-window-scroll-bars", - "set-window-start", "set-window-vscroll", "setcar", "setcdr", - "setplist", "show-face-resources", "signal", "signal-process", "sin", - "single-key-description", "skip-chars-backward", "skip-chars-forward", - "skip-syntax-backward", "skip-syntax-forward", "sleep-for", "sort", - "sort-charsets", "special-variable-p", "split-char", - "split-window-internal", "sqrt", "standard-case-table", - "standard-category-table", "standard-syntax-table", "start-kbd-macro", - "start-process", "stop-process", "store-kbd-macro-event", "string", - "string-as-multibyte", "string-as-unibyte", "string-bytes", - "string-collate-equalp", "string-collate-lessp", "string-equal", - "string-lessp", "string-make-multibyte", "string-make-unibyte", - "string-match", "string-to-char", "string-to-multibyte", - "string-to-number", "string-to-syntax", "string-to-unibyte", - "string-width", "stringp", "subr-name", "subrp", - "subst-char-in-region", "substitute-command-keys", - "substitute-in-file-name", "substring", "substring-no-properties", - "suspend-emacs", "suspend-tty", "suspicious-object", "sxhash", - "symbol-function", "symbol-name", "symbol-plist", "symbol-value", - "symbolp", "syntax-table", "syntax-table-p", "system-groups", - "system-move-file-to-trash", "system-name", "system-users", "tan", - "terminal-coding-system", "terminal-list", "terminal-live-p", - "terminal-local-value", "terminal-name", "terminal-parameter", - "terminal-parameters", "terpri", "test-completion", - "text-char-description", "text-properties-at", "text-property-any", - "text-property-not-all", "this-command-keys", - "this-command-keys-vector", "this-single-command-keys", - "this-single-command-raw-keys", "time-add", "time-less-p", - "time-subtract", "tool-bar-get-system-style", "tool-bar-height", - "tool-bar-pixel-width", "top-level", "trace-redisplay", - "trace-to-stderr", "translate-region-internal", "transpose-regions", - "truncate", "try-completion", "tty-display-color-cells", - "tty-display-color-p", "tty-no-underline", - "tty-suppress-bold-inverse-default-colors", "tty-top-frame", - "tty-type", "type-of", "undo-boundary", "unencodable-char-position", - "unhandled-file-name-directory", "unibyte-char-to-multibyte", - "unibyte-string", "unicode-property-table-internal", "unify-charset", - "unintern", "unix-sync", "unlock-buffer", "upcase", "upcase-initials", - "upcase-initials-region", "upcase-region", "upcase-word", - "use-global-map", "use-local-map", "user-full-name", - "user-login-name", "user-real-login-name", "user-real-uid", - "user-uid", "variable-binding-locus", "vconcat", "vector", - "vector-or-char-table-p", "vectorp", "verify-visited-file-modtime", - "vertical-motion", "visible-frame-list", "visited-file-modtime", - "w16-get-clipboard-data", "w16-selection-exists-p", - "w16-set-clipboard-data", "w32-battery-status", - "w32-default-color-map", "w32-define-rgb-color", - "w32-display-monitor-attributes-list", "w32-frame-menu-bar-size", - "w32-frame-rect", "w32-get-clipboard-data", - "w32-get-codepage-charset", "w32-get-console-codepage", - "w32-get-console-output-codepage", "w32-get-current-locale-id", - "w32-get-default-locale-id", "w32-get-keyboard-layout", - "w32-get-locale-info", "w32-get-valid-codepages", - "w32-get-valid-keyboard-layouts", "w32-get-valid-locale-ids", - "w32-has-winsock", "w32-long-file-name", "w32-reconstruct-hot-key", - "w32-register-hot-key", "w32-registered-hot-keys", - "w32-selection-exists-p", "w32-send-sys-command", - "w32-set-clipboard-data", "w32-set-console-codepage", - "w32-set-console-output-codepage", "w32-set-current-locale", - "w32-set-keyboard-layout", "w32-set-process-priority", - "w32-shell-execute", "w32-short-file-name", "w32-toggle-lock-key", - "w32-unload-winsock", "w32-unregister-hot-key", "w32-window-exists-p", - "w32notify-add-watch", "w32notify-rm-watch", - "waiting-for-user-input-p", "where-is-internal", "widen", - "widget-apply", "widget-get", "widget-put", - "window-absolute-pixel-edges", "window-at", "window-body-height", - "window-body-width", "window-bottom-divider-width", "window-buffer", - "window-combination-limit", "window-configuration-frame", - "window-configuration-p", "window-dedicated-p", - "window-display-table", "window-edges", "window-end", "window-frame", - "window-fringes", "window-header-line-height", "window-hscroll", - "window-inside-absolute-pixel-edges", "window-inside-edges", - "window-inside-pixel-edges", "window-left-child", - "window-left-column", "window-line-height", "window-list", - "window-list-1", "window-live-p", "window-margins", - "window-minibuffer-p", "window-mode-line-height", "window-new-normal", - "window-new-pixel", "window-new-total", "window-next-buffers", - "window-next-sibling", "window-normal-size", "window-old-point", - "window-parameter", "window-parameters", "window-parent", - "window-pixel-edges", "window-pixel-height", "window-pixel-left", - "window-pixel-top", "window-pixel-width", "window-point", - "window-prev-buffers", "window-prev-sibling", - "window-redisplay-end-trigger", "window-resize-apply", - "window-resize-apply-total", "window-right-divider-width", - "window-scroll-bar-height", "window-scroll-bar-width", - "window-scroll-bars", "window-start", "window-system", - "window-text-height", "window-text-pixel-size", "window-text-width", - "window-top-child", "window-top-line", "window-total-height", - "window-total-width", "window-use-time", "window-valid-p", - "window-vscroll", "windowp", "write-char", "write-region", - "x-backspace-delete-keys-p", "x-change-window-property", - "x-change-window-property", "x-close-connection", - "x-close-connection", "x-create-frame", "x-create-frame", - "x-delete-window-property", "x-delete-window-property", - "x-disown-selection-internal", "x-display-backing-store", - "x-display-backing-store", "x-display-color-cells", - "x-display-color-cells", "x-display-grayscale-p", - "x-display-grayscale-p", "x-display-list", "x-display-list", - "x-display-mm-height", "x-display-mm-height", "x-display-mm-width", - "x-display-mm-width", "x-display-monitor-attributes-list", - "x-display-pixel-height", "x-display-pixel-height", - "x-display-pixel-width", "x-display-pixel-width", "x-display-planes", - "x-display-planes", "x-display-save-under", "x-display-save-under", - "x-display-screens", "x-display-screens", "x-display-visual-class", - "x-display-visual-class", "x-family-fonts", "x-file-dialog", - "x-file-dialog", "x-file-dialog", "x-focus-frame", "x-frame-geometry", - "x-frame-geometry", "x-get-atom-name", "x-get-resource", - "x-get-selection-internal", "x-hide-tip", "x-hide-tip", - "x-list-fonts", "x-load-color-file", "x-menu-bar-open-internal", - "x-menu-bar-open-internal", "x-open-connection", "x-open-connection", - "x-own-selection-internal", "x-parse-geometry", "x-popup-dialog", - "x-popup-menu", "x-register-dnd-atom", "x-select-font", - "x-select-font", "x-selection-exists-p", "x-selection-owner-p", - "x-send-client-message", "x-server-max-request-size", - "x-server-max-request-size", "x-server-vendor", "x-server-vendor", - "x-server-version", "x-server-version", "x-show-tip", "x-show-tip", - "x-synchronize", "x-synchronize", "x-uses-old-gtk-dialog", - "x-window-property", "x-window-property", "x-wm-set-size-hint", - "xw-color-defined-p", "xw-color-defined-p", "xw-color-values", - "xw-color-values", "xw-display-color-p", "xw-display-color-p", - "yes-or-no-p", "zlib-available-p", "zlib-decompress-region", - "forward-point", - } - - emacsBuiltinFunctionHighlighted = []string{ - "defvaralias", "provide", "require", - "with-no-warnings", "define-widget", "with-electric-help", - "throw", "defalias", "featurep", - } - - emacsLambdaListKeywords = []string{ - "&allow-other-keys", "&aux", "&body", "&environment", "&key", "&optional", - "&rest", "&whole", - } - - emacsErrorKeywords = []string{ - "cl-assert", "cl-check-type", "error", "signal", - "user-error", "warn", - } -) - -// EmacsLisp lexer. -var EmacsLisp = internal.Register(TypeRemappingLexer(MustNewLexer( - &Config{ - Name: "EmacsLisp", - Aliases: []string{"emacs", "elisp", "emacs-lisp"}, - Filenames: []string{"*.el"}, - MimeTypes: []string{"text/x-elisp", "application/x-elisp"}, - }, - Rules{ - "root": { - Default(Push("body")), - }, - "body": { - {`\s+`, Text, nil}, - {`;.*$`, CommentSingle, nil}, - {`"`, LiteralString, Push("string")}, - {`\?([^\\]|\\.)`, LiteralStringChar, nil}, - {`:((?:\\.|[\w!$%&*+-/<=>?@^{}~|])(?:\\.|[\w!$%&*+-/<=>?@^{}~|]|[#.:])*)`, NameBuiltin, nil}, - {`::((?:\\.|[\w!$%&*+-/<=>?@^{}~|])(?:\\.|[\w!$%&*+-/<=>?@^{}~|]|[#.:])*)`, LiteralStringSymbol, nil}, - {`'((?:\\.|[\w!$%&*+-/<=>?@^{}~|])(?:\\.|[\w!$%&*+-/<=>?@^{}~|]|[#.:])*)`, LiteralStringSymbol, nil}, - {`'`, Operator, nil}, - {"`", Operator, nil}, - {"[-+]?\\d+\\.?(?=[ \"()\\]\\'\\n,;`])", LiteralNumberInteger, nil}, - {"[-+]?\\d+/\\d+(?=[ \"()\\]\\'\\n,;`])", LiteralNumber, nil}, - {"[-+]?(\\d*\\.\\d+([defls][-+]?\\d+)?|\\d+(\\.\\d*)?[defls][-+]?\\d+)(?=[ \"()\\]\\'\\n,;`])", LiteralNumberFloat, nil}, - {`\[|\]`, Punctuation, nil}, - {`#:((?:\\.|[\w!$%&*+-/<=>?@^{}~|])(?:\\.|[\w!$%&*+-/<=>?@^{}~|]|[#.:])*)`, LiteralStringSymbol, nil}, - {`#\^\^?`, Operator, nil}, - {`#\'`, NameFunction, nil}, - {`#[bB][+-]?[01]+(/[01]+)?`, LiteralNumberBin, nil}, - {`#[oO][+-]?[0-7]+(/[0-7]+)?`, LiteralNumberOct, nil}, - {`#[xX][+-]?[0-9a-fA-F]+(/[0-9a-fA-F]+)?`, LiteralNumberHex, nil}, - {`#\d+r[+-]?[0-9a-zA-Z]+(/[0-9a-zA-Z]+)?`, LiteralNumber, nil}, - {`#\d+=`, Operator, nil}, - {`#\d+#`, Operator, nil}, - {`(,@|,|\.|:)`, Operator, nil}, - {"(t|nil)(?=[ \"()\\]\\'\\n,;`])", NameConstant, nil}, - {`\*((?:\\.|[\w!$%&*+-/<=>?@^{}~|])(?:\\.|[\w!$%&*+-/<=>?@^{}~|]|[#.:])*)\*`, NameVariableGlobal, nil}, - {`((?:\\.|[\w!$%&*+-/<=>?@^{}~|])(?:\\.|[\w!$%&*+-/<=>?@^{}~|]|[#.:])*)`, NameVariable, nil}, - {`#\(`, Operator, Push("body")}, - {`\(`, Punctuation, Push("body")}, - {`\)`, Punctuation, Pop(1)}, - }, - "string": { - {"[^\"\\\\`]+", LiteralString, nil}, - {"`((?:\\\\.|[\\w!$%&*+-/<=>?@^{}~|])(?:\\\\.|[\\w!$%&*+-/<=>?@^{}~|]|[#.:])*)\\'", LiteralStringSymbol, nil}, - {"`", LiteralString, nil}, - {`\\.`, LiteralString, nil}, - {`\\\n`, LiteralString, nil}, - {`"`, LiteralString, Pop(1)}, - }, - }, -), TypeMapping{ - {NameVariable, NameFunction, emacsBuiltinFunction}, - {NameVariable, NameBuiltin, emacsSpecialForms}, - {NameVariable, NameException, emacsErrorKeywords}, - {NameVariable, NameBuiltin, append(emacsBuiltinFunctionHighlighted, emacsMacros...)}, - {NameVariable, KeywordPseudo, emacsLambdaListKeywords}, -})) diff --git a/vendor/github.com/alecthomas/chroma/lexers/e/erlang.go b/vendor/github.com/alecthomas/chroma/lexers/e/erlang.go deleted file mode 100644 index 63cd59a..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/e/erlang.go +++ /dev/null @@ -1,66 +0,0 @@ -package e - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Erlang lexer. -var Erlang = internal.Register(MustNewLexer( - &Config{ - Name: "Erlang", - Aliases: []string{"erlang"}, - Filenames: []string{"*.erl", "*.hrl", "*.es", "*.escript"}, - MimeTypes: []string{"text/x-erlang"}, - }, - Rules{ - "root": { - {`\s+`, Text, nil}, - {`%.*\n`, Comment, nil}, - {Words(``, `\b`, `after`, `begin`, `case`, `catch`, `cond`, `end`, `fun`, `if`, `let`, `of`, `query`, `receive`, `try`, `when`), Keyword, nil}, - {Words(``, `\b`, `abs`, `append_element`, `apply`, `atom_to_list`, `binary_to_list`, `bitstring_to_list`, `binary_to_term`, `bit_size`, `bump_reductions`, `byte_size`, `cancel_timer`, `check_process_code`, `delete_module`, `demonitor`, `disconnect_node`, `display`, `element`, `erase`, `exit`, `float`, `float_to_list`, `fun_info`, `fun_to_list`, `function_exported`, `garbage_collect`, `get`, `get_keys`, `group_leader`, `hash`, `hd`, `integer_to_list`, `iolist_to_binary`, `iolist_size`, `is_atom`, `is_binary`, `is_bitstring`, `is_boolean`, `is_builtin`, `is_float`, `is_function`, `is_integer`, `is_list`, `is_number`, `is_pid`, `is_port`, `is_process_alive`, `is_record`, `is_reference`, `is_tuple`, `length`, `link`, `list_to_atom`, `list_to_binary`, `list_to_bitstring`, `list_to_existing_atom`, `list_to_float`, `list_to_integer`, `list_to_pid`, `list_to_tuple`, `load_module`, `localtime_to_universaltime`, `make_tuple`, `md5`, `md5_final`, `md5_update`, `memory`, `module_loaded`, `monitor`, `monitor_node`, `node`, `nodes`, `open_port`, `phash`, `phash2`, `pid_to_list`, `port_close`, `port_command`, `port_connect`, `port_control`, `port_call`, `port_info`, `port_to_list`, `process_display`, `process_flag`, `process_info`, `purge_module`, `put`, `read_timer`, `ref_to_list`, `register`, `resume_process`, `round`, `send`, `send_after`, `send_nosuspend`, `set_cookie`, `setelement`, `size`, `spawn`, `spawn_link`, `spawn_monitor`, `spawn_opt`, `split_binary`, `start_timer`, `statistics`, `suspend_process`, `system_flag`, `system_info`, `system_monitor`, `system_profile`, `term_to_binary`, `tl`, `trace`, `trace_delivered`, `trace_info`, `trace_pattern`, `trunc`, `tuple_size`, `tuple_to_list`, `universaltime_to_localtime`, `unlink`, `unregister`, `whereis`), NameBuiltin, nil}, - {Words(``, `\b`, `and`, `andalso`, `band`, `bnot`, `bor`, `bsl`, `bsr`, `bxor`, `div`, `not`, `or`, `orelse`, `rem`, `xor`), OperatorWord, nil}, - {`^-`, Punctuation, Push("directive")}, - {`(\+\+?|--?|\*|/|<|>|/=|=:=|=/=|=<|>=|==?|<-|!|\?)`, Operator, nil}, - {`"`, LiteralString, Push("string")}, - {`<<`, NameLabel, nil}, - {`>>`, NameLabel, nil}, - {`((?:[a-z]\w*|'[^\n']*[^\\]'))(:)`, ByGroups(NameNamespace, Punctuation), nil}, - {`(?:^|(?<=:))((?:[a-z]\w*|'[^\n']*[^\\]'))(\s*)(\()`, ByGroups(NameFunction, Text, Punctuation), nil}, - {`[+-]?(?:[2-9]|[12][0-9]|3[0-6])#[0-9a-zA-Z]+`, LiteralNumberInteger, nil}, - {`[+-]?\d+`, LiteralNumberInteger, nil}, - {`[+-]?\d+.\d+`, LiteralNumberFloat, nil}, - {`[]\[:_@\".{}()|;,]`, Punctuation, nil}, - {`(?:[A-Z_]\w*)`, NameVariable, nil}, - {`(?:[a-z]\w*|'[^\n']*[^\\]')`, Name, nil}, - {`\?(?:(?:[A-Z_]\w*)|(?:[a-z]\w*|'[^\n']*[^\\]'))`, NameConstant, nil}, - {`\$(?:(?:\\(?:[bdefnrstv\'"\\]|[0-7][0-7]?[0-7]?|(?:x[0-9a-fA-F]{2}|x\{[0-9a-fA-F]+\})|\^[a-zA-Z]))|\\[ %]|[^\\])`, LiteralStringChar, nil}, - {`#(?:[a-z]\w*|'[^\n']*[^\\]')(:?\.(?:[a-z]\w*|'[^\n']*[^\\]'))?`, NameLabel, nil}, - {`\A#!.+\n`, CommentHashbang, nil}, - {`#\{`, Punctuation, Push("map_key")}, - }, - "string": { - {`(?:\\(?:[bdefnrstv\'"\\]|[0-7][0-7]?[0-7]?|(?:x[0-9a-fA-F]{2}|x\{[0-9a-fA-F]+\})|\^[a-zA-Z]))`, LiteralStringEscape, nil}, - {`"`, LiteralString, Pop(1)}, - {`~[0-9.*]*[~#+BPWXb-ginpswx]`, LiteralStringInterpol, nil}, - {`[^"\\~]+`, LiteralString, nil}, - {`~`, LiteralString, nil}, - }, - "directive": { - {`(define)(\s*)(\()((?:(?:[A-Z_]\w*)|(?:[a-z]\w*|'[^\n']*[^\\]')))`, ByGroups(NameEntity, Text, Punctuation, NameConstant), Pop(1)}, - {`(record)(\s*)(\()((?:(?:[A-Z_]\w*)|(?:[a-z]\w*|'[^\n']*[^\\]')))`, ByGroups(NameEntity, Text, Punctuation, NameLabel), Pop(1)}, - {`(?:[a-z]\w*|'[^\n']*[^\\]')`, NameEntity, Pop(1)}, - }, - "map_key": { - Include("root"), - {`=>`, Punctuation, Push("map_val")}, - {`:=`, Punctuation, Push("map_val")}, - {`\}`, Punctuation, Pop(1)}, - }, - "map_val": { - Include("root"), - {`,`, Punctuation, Pop(1)}, - {`(?=\})`, Punctuation, Pop(1)}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/f/factor.go b/vendor/github.com/alecthomas/chroma/lexers/f/factor.go deleted file mode 100644 index 26c0d56..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/f/factor.go +++ /dev/null @@ -1,115 +0,0 @@ -package f - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Factor lexer. -var Factor = internal.Register(MustNewLexer( - &Config{ - Name: "Factor", - Aliases: []string{"factor"}, - Filenames: []string{"*.factor"}, - MimeTypes: []string{"text/x-factor"}, - }, - Rules{ - "root": { - {`#!.*$`, CommentPreproc, nil}, - Default(Push("base")), - }, - "base": { - {`\s+`, Text, nil}, - {`((?:MACRO|MEMO|TYPED)?:[:]?)(\s+)(\S+)`, ByGroups(Keyword, Text, NameFunction), nil}, - {`(M:[:]?)(\s+)(\S+)(\s+)(\S+)`, ByGroups(Keyword, Text, NameClass, Text, NameFunction), nil}, - {`(C:)(\s+)(\S+)(\s+)(\S+)`, ByGroups(Keyword, Text, NameFunction, Text, NameClass), nil}, - {`(GENERIC:)(\s+)(\S+)`, ByGroups(Keyword, Text, NameFunction), nil}, - {`(HOOK:|GENERIC#)(\s+)(\S+)(\s+)(\S+)`, ByGroups(Keyword, Text, NameFunction, Text, NameFunction), nil}, - {`\(\s`, NameFunction, Push("stackeffect")}, - {`;\s`, Keyword, nil}, - {`(USING:)(\s+)`, ByGroups(KeywordNamespace, Text), Push("vocabs")}, - {`(USE:|UNUSE:|IN:|QUALIFIED:)(\s+)(\S+)`, ByGroups(KeywordNamespace, Text, NameNamespace), nil}, - {`(QUALIFIED-WITH:)(\s+)(\S+)(\s+)(\S+)`, ByGroups(KeywordNamespace, Text, NameNamespace, Text, NameNamespace), nil}, - {`(FROM:|EXCLUDE:)(\s+)(\S+)(\s+=>\s)`, ByGroups(KeywordNamespace, Text, NameNamespace, Text), Push("words")}, - {`(RENAME:)(\s+)(\S+)(\s+)(\S+)(\s+=>\s+)(\S+)`, ByGroups(KeywordNamespace, Text, NameFunction, Text, NameNamespace, Text, NameFunction), nil}, - {`(ALIAS:|TYPEDEF:)(\s+)(\S+)(\s+)(\S+)`, ByGroups(KeywordNamespace, Text, NameFunction, Text, NameFunction), nil}, - {`(DEFER:|FORGET:|POSTPONE:)(\s+)(\S+)`, ByGroups(KeywordNamespace, Text, NameFunction), nil}, - {`(TUPLE:|ERROR:)(\s+)(\S+)(\s+<\s+)(\S+)`, ByGroups(Keyword, Text, NameClass, Text, NameClass), Push("slots")}, - {`(TUPLE:|ERROR:|BUILTIN:)(\s+)(\S+)`, ByGroups(Keyword, Text, NameClass), Push("slots")}, - {`(MIXIN:|UNION:|INTERSECTION:)(\s+)(\S+)`, ByGroups(Keyword, Text, NameClass), nil}, - {`(PREDICATE:)(\s+)(\S+)(\s+<\s+)(\S+)`, ByGroups(Keyword, Text, NameClass, Text, NameClass), nil}, - {`(C:)(\s+)(\S+)(\s+)(\S+)`, ByGroups(Keyword, Text, NameFunction, Text, NameClass), nil}, - {`(INSTANCE:)(\s+)(\S+)(\s+)(\S+)`, ByGroups(Keyword, Text, NameClass, Text, NameClass), nil}, - {`(SLOT:)(\s+)(\S+)`, ByGroups(Keyword, Text, NameFunction), nil}, - {`(SINGLETON:)(\s+)(\S+)`, ByGroups(Keyword, Text, NameClass), nil}, - {`SINGLETONS:`, Keyword, Push("classes")}, - {`(CONSTANT:|SYMBOL:|MAIN:|HELP:)(\s+)(\S+)`, ByGroups(Keyword, Text, NameFunction), nil}, - {`SYMBOLS:\s`, Keyword, Push("words")}, - {`SYNTAX:\s`, Keyword, nil}, - {`ALIEN:\s`, Keyword, nil}, - {`(STRUCT:)(\s+)(\S+)`, ByGroups(Keyword, Text, NameClass), nil}, - {`(FUNCTION:)(\s+\S+\s+)(\S+)(\s+\(\s+[^)]+\)\s)`, ByGroups(KeywordNamespace, Text, NameFunction, Text), nil}, - {`(FUNCTION-ALIAS:)(\s+)(\S+)(\s+\S+\s+)(\S+)(\s+\(\s+[^)]+\)\s)`, ByGroups(KeywordNamespace, Text, NameFunction, Text, NameFunction, Text), nil}, - {`(?:)\s`, KeywordNamespace, nil}, - {`"""\s+(?:.|\n)*?\s+"""`, LiteralString, nil}, - {`"(?:\\\\|\\"|[^"])*"`, LiteralString, nil}, - {`\S+"\s+(?:\\\\|\\"|[^"])*"`, LiteralString, nil}, - {`CHAR:\s+(?:\\[\\abfnrstv]|[^\\]\S*)\s`, LiteralStringChar, nil}, - {`!\s+.*$`, Comment, nil}, - {`#!\s+.*$`, Comment, nil}, - {`/\*\s+(?:.|\n)*?\s\*/\s`, Comment, nil}, - {`[tf]\s`, NameConstant, nil}, - {`[\\$]\s+\S+`, NameConstant, nil}, - {`M\\\s+\S+\s+\S+`, NameConstant, nil}, - {`[+-]?(?:[\d,]*\d)?\.(?:\d([\d,]*\d)?)?(?:[eE][+-]?\d+)?\s`, LiteralNumber, nil}, - {`[+-]?\d(?:[\d,]*\d)?(?:[eE][+-]?\d+)?\s`, LiteralNumber, nil}, - {`0x[a-fA-F\d](?:[a-fA-F\d,]*[a-fA-F\d])?(?:p\d([\d,]*\d)?)?\s`, LiteralNumber, nil}, - {`NAN:\s+[a-fA-F\d](?:[a-fA-F\d,]*[a-fA-F\d])?(?:p\d([\d,]*\d)?)?\s`, LiteralNumber, nil}, - {`0b[01]+\s`, LiteralNumberBin, nil}, - {`0o[0-7]+\s`, LiteralNumberOct, nil}, - {`(?:\d([\d,]*\d)?)?\+\d(?:[\d,]*\d)?/\d(?:[\d,]*\d)?\s`, LiteralNumber, nil}, - {`(?:\-\d([\d,]*\d)?)?\-\d(?:[\d,]*\d)?/\d(?:[\d,]*\d)?\s`, LiteralNumber, nil}, - {`(?:deprecated|final|foldable|flushable|inline|recursive)\s`, Keyword, nil}, - {Words(``, `\s`, `-rot`, `2bi`, `2bi@`, `2bi*`, `2curry`, `2dip`, `2drop`, `2dup`, `2keep`, `2nip`, `2over`, `2tri`, `2tri@`, `2tri*`, `3bi`, `3curry`, `3dip`, `3drop`, `3dup`, `3keep`, `3tri`, `4dip`, `4drop`, `4dup`, `4keep`, ``, `=`, `>boolean`, `clone`, `?`, `?execute`, `?if`, `and`, `assert`, `assert=`, `assert?`, `bi`, `bi-curry`, `bi-curry@`, `bi-curry*`, `bi@`, `bi*`, `boa`, `boolean`, `boolean?`, `both?`, `build`, `call`, `callstack`, `callstack>array`, `callstack?`, `clear`, `(clone)`, `compose`, `compose?`, `curry`, `curry?`, `datastack`, `die`, `dip`, `do`, `drop`, `dup`, `dupd`, `either?`, `eq?`, `equal?`, `execute`, `hashcode`, `hashcode*`, `identity-hashcode`, `identity-tuple`, `identity-tuple?`, `if`, `if*`, `keep`, `loop`, `most`, `new`, `nip`, `not`, `null`, `object`, `or`, `over`, `pick`, `prepose`, `retainstack`, `rot`, `same?`, `swap`, `swapd`, `throw`, `tri`, `tri-curry`, `tri-curry@`, `tri-curry*`, `tri@`, `tri*`, `tuple`, `tuple?`, `unless`, `unless*`, `until`, `when`, `when*`, `while`, `with`, `wrapper`, `wrapper?`, `xor`), NameBuiltin, nil}, - {Words(``, `\s`, `2cache`, ``, `>alist`, `?at`, `?of`, `assoc`, `assoc-all?`, `assoc-any?`, `assoc-clone-like`, `assoc-combine`, `assoc-diff`, `assoc-diff!`, `assoc-differ`, `assoc-each`, `assoc-empty?`, `assoc-filter`, `assoc-filter!`, `assoc-filter-as`, `assoc-find`, `assoc-hashcode`, `assoc-intersect`, `assoc-like`, `assoc-map`, `assoc-map-as`, `assoc-partition`, `assoc-refine`, `assoc-size`, `assoc-stack`, `assoc-subset?`, `assoc-union`, `assoc-union!`, `assoc=`, `assoc>map`, `assoc?`, `at`, `at+`, `at*`, `cache`, `change-at`, `clear-assoc`, `delete-at`, `delete-at*`, `enum`, `enum?`, `extract-keys`, `inc-at`, `key?`, `keys`, `map>assoc`, `maybe-set-at`, `new-assoc`, `of`, `push-at`, `rename-at`, `set-at`, `sift-keys`, `sift-values`, `substitute`, `unzip`, `value-at`, `value-at*`, `value?`, `values`, `zip`), NameBuiltin, nil}, - {Words(``, `\s`, `2cleave`, `2cleave>quot`, `3cleave`, `3cleave>quot`, `4cleave`, `4cleave>quot`, `alist>quot`, `call-effect`, `case`, `case-find`, `case>quot`, `cleave`, `cleave>quot`, `cond`, `cond>quot`, `deep-spread>quot`, `execute-effect`, `linear-case-quot`, `no-case`, `no-case?`, `no-cond`, `no-cond?`, `recursive-hashcode`, `shallow-spread>quot`, `spread`, `to-fixed-point`, `wrong-values`, `wrong-values?`), NameBuiltin, nil}, - {Words(``, `\s`, `-`, `/`, `/f`, `/i`, `/mod`, `2/`, `2^`, `<`, `<=`, ``, `>`, `>=`, `>bignum`, `>fixnum`, `>float`, `>integer`, `(all-integers?)`, `(each-integer)`, `(find-integer)`, `*`, `+`, `?1+`, `abs`, `align`, `all-integers?`, `bignum`, `bignum?`, `bit?`, `bitand`, `bitnot`, `bitor`, `bits>double`, `bits>float`, `bitxor`, `complex`, `complex?`, `denominator`, `double>bits`, `each-integer`, `even?`, `find-integer`, `find-last-integer`, `fixnum`, `fixnum?`, `float`, `float>bits`, `float?`, `fp-bitwise=`, `fp-infinity?`, `fp-nan-payload`, `fp-nan?`, `fp-qnan?`, `fp-sign`, `fp-snan?`, `fp-special?`, `if-zero`, `imaginary-part`, `integer`, `integer>fixnum`, `integer>fixnum-strict`, `integer?`, `log2`, `log2-expects-positive`, `log2-expects-positive?`, `mod`, `neg`, `neg?`, `next-float`, `next-power-of-2`, `number`, `number=`, `number?`, `numerator`, `odd?`, `out-of-fixnum-range`, `out-of-fixnum-range?`, `power-of-2?`, `prev-float`, `ratio`, `ratio?`, `rational`, `rational?`, `real`, `real-part`, `real?`, `recip`, `rem`, `sgn`, `shift`, `sq`, `times`, `u<`, `u<=`, `u>`, `u>=`, `unless-zero`, `unordered?`, `when-zero`, `zero?`), NameBuiltin, nil}, - {Words(``, `\s`, `1sequence`, `2all?`, `2each`, `2map`, `2map-as`, `2map-reduce`, `2reduce`, `2selector`, `2sequence`, `3append`, `3append-as`, `3each`, `3map`, `3map-as`, `3sequence`, `4sequence`, ``, ``, ``, `?first`, `?last`, `?nth`, `?second`, `?set-nth`, `accumulate`, `accumulate!`, `accumulate-as`, `all?`, `any?`, `append`, `append!`, `append-as`, `assert-sequence`, `assert-sequence=`, `assert-sequence?`, `binary-reduce`, `bounds-check`, `bounds-check?`, `bounds-error`, `bounds-error?`, `but-last`, `but-last-slice`, `cartesian-each`, `cartesian-map`, `cartesian-product`, `change-nth`, `check-slice`, `check-slice-error`, `clone-like`, `collapse-slice`, `collector`, `collector-for`, `concat`, `concat-as`, `copy`, `count`, `cut`, `cut-slice`, `cut*`, `delete-all`, `delete-slice`, `drop-prefix`, `each`, `each-from`, `each-index`, `empty?`, `exchange`, `filter`, `filter!`, `filter-as`, `find`, `find-from`, `find-index`, `find-index-from`, `find-last`, `find-last-from`, `first`, `first2`, `first3`, `first4`, `flip`, `follow`, `fourth`, `glue`, `halves`, `harvest`, `head`, `head-slice`, `head-slice*`, `head*`, `head?`, `if-empty`, `immutable`, `immutable-sequence`, `immutable-sequence?`, `immutable?`, `index`, `index-from`, `indices`, `infimum`, `infimum-by`, `insert-nth`, `interleave`, `iota`, `iota-tuple`, `iota-tuple?`, `join`, `join-as`, `last`, `last-index`, `last-index-from`, `length`, `lengthen`, `like`, `longer`, `longer?`, `longest`, `map`, `map!`, `map-as`, `map-find`, `map-find-last`, `map-index`, `map-integers`, `map-reduce`, `map-sum`, `max-length`, `member-eq?`, `member?`, `midpoint@`, `min-length`, `mismatch`, `move`, `new-like`, `new-resizable`, `new-sequence`, `non-negative-integer-expected`, `non-negative-integer-expected?`, `nth`, `nths`, `pad-head`, `pad-tail`, `padding`, `partition`, `pop`, `pop*`, `prefix`, `prepend`, `prepend-as`, `produce`, `produce-as`, `product`, `push`, `push-all`, `push-either`, `push-if`, `reduce`, `reduce-index`, `remove`, `remove!`, `remove-eq`, `remove-eq!`, `remove-nth`, `remove-nth!`, `repetition`, `repetition?`, `replace-slice`, `replicate`, `replicate-as`, `rest`, `rest-slice`, `reverse`, `reverse!`, `reversed`, `reversed?`, `second`, `selector`, `selector-for`, `sequence`, `sequence-hashcode`, `sequence=`, `sequence?`, `set-first`, `set-fourth`, `set-last`, `set-length`, `set-nth`, `set-second`, `set-third`, `short`, `shorten`, `shorter`, `shorter?`, `shortest`, `sift`, `slice`, `slice-error`, `slice-error?`, `slice?`, `snip`, `snip-slice`, `start`, `start*`, `subseq`, `subseq?`, `suffix`, `suffix!`, `sum`, `sum-lengths`, `supremum`, `supremum-by`, `surround`, `tail`, `tail-slice`, `tail-slice*`, `tail*`, `tail?`, `third`, `trim`, `trim-head`, `trim-head-slice`, `trim-slice`, `trim-tail`, `trim-tail-slice`, `unclip`, `unclip-last`, `unclip-last-slice`, `unclip-slice`, `unless-empty`, `virtual-exemplar`, `virtual-sequence`, `virtual-sequence?`, `virtual@`, `when-empty`), NameBuiltin, nil}, - {Words(``, `\s`, `+@`, `change`, `change-global`, `counter`, `dec`, `get`, `get-global`, `global`, `inc`, `init-namespaces`, `initialize`, `is-global`, `make-assoc`, `namespace`, `namestack`, `off`, `on`, `set`, `set-global`, `set-namestack`, `toggle`, `with-global`, `with-scope`, `with-variable`, `with-variables`), NameBuiltin, nil}, - {Words(``, `\s`, `1array`, `2array`, `3array`, `4array`, ``, `>array`, `array`, `array?`, `pair`, `pair?`, `resize-array`), NameBuiltin, nil}, - {Words(``, `\s`, `(each-stream-block-slice)`, `(each-stream-block)`, `(stream-contents-by-block)`, `(stream-contents-by-element)`, `(stream-contents-by-length-or-block)`, `(stream-contents-by-length)`, `+byte+`, `+character+`, `bad-seek-type`, `bad-seek-type?`, `bl`, `contents`, `each-block`, `each-block-size`, `each-block-slice`, `each-line`, `each-morsel`, `each-stream-block`, `each-stream-block-slice`, `each-stream-line`, `error-stream`, `flush`, `input-stream`, `input-stream?`, `invalid-read-buffer`, `invalid-read-buffer?`, `lines`, `nl`, `output-stream`, `output-stream?`, `print`, `read`, `read-into`, `read-partial`, `read-partial-into`, `read-until`, `read1`, `readln`, `seek-absolute`, `seek-absolute?`, `seek-end`, `seek-end?`, `seek-input`, `seek-output`, `seek-relative`, `seek-relative?`, `stream-bl`, `stream-contents`, `stream-contents*`, `stream-copy`, `stream-copy*`, `stream-element-type`, `stream-flush`, `stream-length`, `stream-lines`, `stream-nl`, `stream-print`, `stream-read`, `stream-read-into`, `stream-read-partial`, `stream-read-partial-into`, `stream-read-partial-unsafe`, `stream-read-unsafe`, `stream-read-until`, `stream-read1`, `stream-readln`, `stream-seek`, `stream-seekable?`, `stream-tell`, `stream-write`, `stream-write1`, `tell-input`, `tell-output`, `with-error-stream`, `with-error-stream*`, `with-error>output`, `with-input-output+error-streams`, `with-input-output+error-streams*`, `with-input-stream`, `with-input-stream*`, `with-output-stream`, `with-output-stream*`, `with-output>error`, `with-output+error-stream`, `with-output+error-stream*`, `with-streams`, `with-streams*`, `write`, `write1`), NameBuiltin, nil}, - {Words(``, `\s`, `1string`, ``, `>string`, `resize-string`, `string`, `string?`), NameBuiltin, nil}, - {Words(``, `\s`, `1vector`, ``, `>vector`, `?push`, `vector`, `vector?`), NameBuiltin, nil}, - {Words(``, `\s`, ``, ``, ``, `attempt-all`, `attempt-all-error`, `attempt-all-error?`, `callback-error-hook`, `callcc0`, `callcc1`, `cleanup`, `compute-restarts`, `condition`, `condition?`, `continuation`, `continuation?`, `continue`, `continue-restart`, `continue-with`, `current-continuation`, `error`, `error-continuation`, `error-in-thread`, `error-thread`, `ifcc`, `ignore-errors`, `in-callback?`, `original-error`, `recover`, `restart`, `restart?`, `restarts`, `rethrow`, `rethrow-restarts`, `return`, `return-continuation`, `thread-error-hook`, `throw-continue`, `throw-restarts`, `with-datastack`, `with-return`), NameBuiltin, nil}, - {`\S+`, Text, nil}, - }, - "stackeffect": { - {`\s+`, Text, nil}, - {`\(\s+`, NameFunction, Push("stackeffect")}, - {`\)\s`, NameFunction, Pop(1)}, - {`--\s`, NameFunction, nil}, - {`\S+`, NameVariable, nil}, - }, - "slots": { - {`\s+`, Text, nil}, - {`;\s`, Keyword, Pop(1)}, - {`(\{\s+)(\S+)(\s+[^}]+\s+\}\s)`, ByGroups(Text, NameVariable, Text), nil}, - {`\S+`, NameVariable, nil}, - }, - "vocabs": { - {`\s+`, Text, nil}, - {`;\s`, Keyword, Pop(1)}, - {`\S+`, NameNamespace, nil}, - }, - "classes": { - {`\s+`, Text, nil}, - {`;\s`, Keyword, Pop(1)}, - {`\S+`, NameClass, nil}, - }, - "words": { - {`\s+`, Text, nil}, - {`;\s`, Keyword, Pop(1)}, - {`\S+`, NameFunction, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/f/fish.go b/vendor/github.com/alecthomas/chroma/lexers/f/fish.go deleted file mode 100644 index 185fc92..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/f/fish.go +++ /dev/null @@ -1,65 +0,0 @@ -package f - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Fish lexer. -var Fish = internal.Register(MustNewLexer( - &Config{ - Name: "Fish", - Aliases: []string{"fish", "fishshell"}, - Filenames: []string{"*.fish", "*.load"}, - MimeTypes: []string{"application/x-fish"}, - }, - Rules{ - "root": { - Include("basic"), - Include("data"), - Include("interp"), - }, - "interp": { - {`\$\(\(`, Keyword, Push("math")}, - {`\(`, Keyword, Push("paren")}, - {`\$#?(\w+|.)`, NameVariable, nil}, - }, - "basic": { - {`\b(begin|end|if|else|while|break|for|in|return|function|block|case|continue|switch|not|and|or|set|echo|exit|pwd|true|false|cd|count|test)(\s*)\b`, ByGroups(Keyword, Text), nil}, - {`\b(alias|bg|bind|breakpoint|builtin|command|commandline|complete|contains|dirh|dirs|emit|eval|exec|fg|fish|fish_config|fish_indent|fish_pager|fish_prompt|fish_right_prompt|fish_update_completions|fishd|funced|funcsave|functions|help|history|isatty|jobs|math|mimedb|nextd|open|popd|prevd|psub|pushd|random|read|set_color|source|status|trap|type|ulimit|umask|vared|fc|getopts|hash|kill|printf|time|wait)\s*\b(?!\.)`, NameBuiltin, nil}, - {`#.*\n`, Comment, nil}, - {`\\[\w\W]`, LiteralStringEscape, nil}, - {`(\b\w+)(\s*)(=)`, ByGroups(NameVariable, Text, Operator), nil}, - {`[\[\]()=]`, Operator, nil}, - {`<<-?\s*(\'?)\\?(\w+)[\w\W]+?\2`, LiteralString, nil}, - }, - "data": { - {`(?s)\$?"(\\\\|\\[0-7]+|\\.|[^"\\$])*"`, LiteralStringDouble, nil}, - {`"`, LiteralStringDouble, Push("string")}, - {`(?s)\$'(\\\\|\\[0-7]+|\\.|[^'\\])*'`, LiteralStringSingle, nil}, - {`(?s)'.*?'`, LiteralStringSingle, nil}, - {`;`, Punctuation, nil}, - {`&|\||\^|<|>`, Operator, nil}, - {`\s+`, Text, nil}, - {`\d+(?= |\Z)`, LiteralNumber, nil}, - {"[^=\\s\\[\\]{}()$\"\\'`\\\\<&|;]+", Text, nil}, - }, - "string": { - {`"`, LiteralStringDouble, Pop(1)}, - {`(?s)(\\\\|\\[0-7]+|\\.|[^"\\$])+`, LiteralStringDouble, nil}, - Include("interp"), - }, - "paren": { - {`\)`, Keyword, Pop(1)}, - Include("root"), - }, - "math": { - {`\)\)`, Keyword, Pop(1)}, - {`[-+*/%^|&]|\*\*|\|\|`, Operator, nil}, - {`\d+#\d+`, LiteralNumber, nil}, - {`\d+#(?! )`, LiteralNumber, nil}, - {`\d+`, LiteralNumber, nil}, - Include("root"), - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/f/forth.go b/vendor/github.com/alecthomas/chroma/lexers/f/forth.go deleted file mode 100644 index 47de636..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/f/forth.go +++ /dev/null @@ -1,40 +0,0 @@ -package f - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Forth lexer. -var Forth = internal.Register(MustNewLexer( - &Config{ - Name: "Forth", - Aliases: []string{"forth"}, - Filenames: []string{"*.frt", "*.fth", "*.fs"}, - MimeTypes: []string{"application/x-forth"}, - CaseInsensitive: true, - }, - Rules{ - "root": { - {`\s+`, Text, nil}, - {`\\.*?\n`, CommentSingle, nil}, - {`\([\s].*?\)`, CommentSingle, nil}, - {`(:|variable|constant|value|buffer:)(\s+)`, ByGroups(KeywordNamespace, Text), Push("worddef")}, - {`([.sc]")(\s+?)`, ByGroups(LiteralString, Text), Push("stringdef")}, - {`(blk|block|buffer|evaluate|flush|load|save-buffers|update|empty-buffers|list|refill|scr|thru|\#s|\*\/mod|\+loop|\/mod|0<|0=|1\+|1-|2!|2\*|2\/|2@|2drop|2dup|2over|2swap|>body|>in|>number|>r|\?dup|abort|abort\"|abs|accept|align|aligned|allot|and|base|begin|bl|c!|c,|c@|cell\+|cells|char|char\+|chars|constant|count|cr|create|decimal|depth|do|does>|drop|dup|else|emit|environment\?|evaluate|execute|exit|fill|find|fm\/mod|here|hold|i|if|immediate|invert|j|key|leave|literal|loop|lshift|m\*|max|min|mod|move|negate|or|over|postpone|quit|r>|r@|recurse|repeat|rot|rshift|s\"|s>d|sign|sm\/rem|source|space|spaces|state|swap|then|type|u\.|u\<|um\*|um\/mod|unloop|until|variable|while|word|xor|\[char\]|\[\'\]|@|!|\#|<\#|\#>|:|;|\+|-|\*|\/|,|<|>|\|1\+|1-|\.|\.r|0<>|0>|2>r|2r>|2r@|:noname|\?do|again|c\"|case|compile,|endcase|endof|erase|false|hex|marker|nip|of|pad|parse|pick|refill|restore-input|roll|save-input|source-id|to|true|tuck|u\.r|u>|unused|value|within|\[compile\]|\#tib|convert|expect|query|span|tib|2constant|2literal|2variable|d\+|d-|d\.|d\.r|d0<|d0=|d2\*|d2\/|d<|d=|d>s|dabs|dmax|dmin|dnegate|m\*\/|m\+|2rot|du<|catch|throw|abort|abort\"|at-xy|key\?|page|ekey|ekey>char|ekey\?|emit\?|ms|time&date|BIN|CLOSE-FILE|CREATE-FILE|DELETE-FILE|FILE-POSITION|FILE-SIZE|INCLUDE-FILE|INCLUDED|OPEN-FILE|R\/O|R\/W|READ-FILE|READ-LINE|REPOSITION-FILE|RESIZE-FILE|S\"|SOURCE-ID|W/O|WRITE-FILE|WRITE-LINE|FILE-STATUS|FLUSH-FILE|REFILL|RENAME-FILE|>float|d>f|f!|f\*|f\+|f-|f\/|f0<|f0=|f<|f>d|f@|falign|faligned|fconstant|fdepth|fdrop|fdup|fliteral|float\+|floats|floor|fmax|fmin|fnegate|fover|frot|fround|fswap|fvariable|represent|df!|df@|dfalign|dfaligned|dfloat\+|dfloats|f\*\*|f\.|fabs|facos|facosh|falog|fasin|fasinh|fatan|fatan2|fatanh|fcos|fcosh|fe\.|fexp|fexpm1|fln|flnp1|flog|fs\.|fsin|fsincos|fsinh|fsqrt|ftan|ftanh|f~|precision|set-precision|sf!|sf@|sfalign|sfaligned|sfloat\+|sfloats|\(local\)|to|locals\||allocate|free|resize|definitions|find|forth-wordlist|get-current|get-order|search-wordlist|set-current|set-order|wordlist|also|forth|only|order|previous|-trailing|\/string|blank|cmove|cmove>|compare|search|sliteral|.s|dump|see|words|;code|ahead|assembler|bye|code|cs-pick|cs-roll|editor|state|\[else\]|\[if\]|\[then\]|forget|defer|defer@|defer!|action-of|begin-structure|field:|buffer:|parse-name|buffer:|traverse-wordlist|n>r|nr>|2value|fvalue|name>interpret|name>compile|name>string|cfield:|end-structure)\s`, Keyword, nil}, - {`(\$[0-9A-F]+)`, LiteralNumberHex, nil}, - {`(\#|%|&|\-|\+)?[0-9]+`, LiteralNumberInteger, nil}, - {`(\#|%|&|\-|\+)?[0-9.]+`, KeywordType, nil}, - {`(@i|!i|@e|!e|pause|noop|turnkey|sleep|itype|icompare|sp@|sp!|rp@|rp!|up@|up!|>a|a>|a@|a!|a@+|a@-|>b|b>|b@|b!|b@+|b@-|find-name|1ms|sp0|rp0|\(evaluate\)|int-trap|int!)\s`, NameConstant, nil}, - {`(do-recognizer|r:fail|recognizer:|get-recognizers|set-recognizers|r:float|r>comp|r>int|r>post|r:name|r:word|r:dnum|r:num|recognizer|forth-recognizer|rec:num|rec:float|rec:word)\s`, NameDecorator, nil}, - {`(Evalue|Rvalue|Uvalue|Edefer|Rdefer|Udefer)(\s+)`, ByGroups(KeywordNamespace, Text), Push("worddef")}, - {`[^\s]+(?=[\s])`, NameFunction, nil}, - }, - "worddef": { - {`\S+`, NameClass, Pop(1)}, - }, - "stringdef": { - {`[^"]+`, LiteralString, Pop(1)}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/f/fortran.go b/vendor/github.com/alecthomas/chroma/lexers/f/fortran.go deleted file mode 100644 index 6c57afa..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/f/fortran.go +++ /dev/null @@ -1,47 +0,0 @@ -package f - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Fortran lexer. -var Fortran = internal.Register(MustNewLexer( - &Config{ - Name: "Fortran", - Aliases: []string{"fortran"}, - Filenames: []string{"*.f03", "*.f90", "*.F03", "*.F90"}, - MimeTypes: []string{"text/x-fortran"}, - CaseInsensitive: true, - }, - Rules{ - "root": { - {`^#.*\n`, CommentPreproc, nil}, - {`!.*\n`, Comment, nil}, - Include("strings"), - Include("core"), - {`[a-z][\w$]*`, Name, nil}, - Include("nums"), - {`[\s]+`, Text, nil}, - }, - "core": { - {Words(`\b`, `\s*\b`, `ABSTRACT`, `ACCEPT`, `ALL`, `ALLSTOP`, `ALLOCATABLE`, `ALLOCATE`, `ARRAY`, `ASSIGN`, `ASSOCIATE`, `ASYNCHRONOUS`, `BACKSPACE`, `BIND`, `BLOCK`, `BLOCKDATA`, `BYTE`, `CALL`, `CASE`, `CLASS`, `CLOSE`, `CODIMENSION`, `COMMON`, `CONCURRRENT`, `CONTIGUOUS`, `CONTAINS`, `CONTINUE`, `CRITICAL`, `CYCLE`, `DATA`, `DEALLOCATE`, `DECODE`, `DEFERRED`, `DIMENSION`, `DO`, `ELEMENTAL`, `ELSE`, `ENCODE`, `END`, `ENTRY`, `ENUM`, `ENUMERATOR`, `EQUIVALENCE`, `EXIT`, `EXTENDS`, `EXTERNAL`, `EXTRINSIC`, `FILE`, `FINAL`, `FORALL`, `FORMAT`, `FUNCTION`, `GENERIC`, `GOTO`, `IF`, `IMAGES`, `IMPLICIT`, `IMPORT`, `IMPURE`, `INCLUDE`, `INQUIRE`, `INTENT`, `INTERFACE`, `INTRINSIC`, `IS`, `LOCK`, `MEMORY`, `MODULE`, `NAMELIST`, `NULLIFY`, `NONE`, `NON_INTRINSIC`, `NON_OVERRIDABLE`, `NOPASS`, `OPEN`, `OPTIONAL`, `OPTIONS`, `PARAMETER`, `PASS`, `PAUSE`, `POINTER`, `PRINT`, `PRIVATE`, `PROGRAM`, `PROCEDURE`, `PROTECTED`, `PUBLIC`, `PURE`, `READ`, `RECURSIVE`, `RESULT`, `RETURN`, `REWIND`, `SAVE`, `SELECT`, `SEQUENCE`, `STOP`, `SUBMODULE`, `SUBROUTINE`, `SYNC`, `SYNCALL`, `SYNCIMAGES`, `SYNCMEMORY`, `TARGET`, `THEN`, `TYPE`, `UNLOCK`, `USE`, `VALUE`, `VOLATILE`, `WHERE`, `WRITE`, `WHILE`), Keyword, nil}, - {Words(`\b`, `\s*\b`, `CHARACTER`, `COMPLEX`, `DOUBLE PRECISION`, `DOUBLE COMPLEX`, `INTEGER`, `LOGICAL`, `REAL`, `C_INT`, `C_SHORT`, `C_LONG`, `C_LONG_LONG`, `C_SIGNED_CHAR`, `C_SIZE_T`, `C_INT8_T`, `C_INT16_T`, `C_INT32_T`, `C_INT64_T`, `C_INT_LEAST8_T`, `C_INT_LEAST16_T`, `C_INT_LEAST32_T`, `C_INT_LEAST64_T`, `C_INT_FAST8_T`, `C_INT_FAST16_T`, `C_INT_FAST32_T`, `C_INT_FAST64_T`, `C_INTMAX_T`, `C_INTPTR_T`, `C_FLOAT`, `C_DOUBLE`, `C_LONG_DOUBLE`, `C_FLOAT_COMPLEX`, `C_DOUBLE_COMPLEX`, `C_LONG_DOUBLE_COMPLEX`, `C_BOOL`, `C_CHAR`, `C_PTR`, `C_FUNPTR`), KeywordType, nil}, - {`(\*\*|\*|\+|-|\/|<|>|<=|>=|==|\/=|=)`, Operator, nil}, - {`(::)`, KeywordDeclaration, nil}, - {`[()\[\],:&%;.]`, Punctuation, nil}, - {Words(`\b`, `\s*\b`, `Abort`, `Abs`, `Access`, `AChar`, `ACos`, `ACosH`, `AdjustL`, `AdjustR`, `AImag`, `AInt`, `Alarm`, `All`, `Allocated`, `ALog`, `AMax`, `AMin`, `AMod`, `And`, `ANInt`, `Any`, `ASin`, `ASinH`, `Associated`, `ATan`, `ATanH`, `Atomic_Define`, `Atomic_Ref`, `BesJ`, `BesJN`, `Bessel_J0`, `Bessel_J1`, `Bessel_JN`, `Bessel_Y0`, `Bessel_Y1`, `Bessel_YN`, `BesY`, `BesYN`, `BGE`, `BGT`, `BLE`, `BLT`, `Bit_Size`, `BTest`, `CAbs`, `CCos`, `Ceiling`, `CExp`, `Char`, `ChDir`, `ChMod`, `CLog`, `Cmplx`, `Command_Argument_Count`, `Complex`, `Conjg`, `Cos`, `CosH`, `Count`, `CPU_Time`, `CShift`, `CSin`, `CSqRt`, `CTime`, `C_Loc`, `C_Associated`, `C_Null_Ptr`, `C_Null_Funptr`, `C_F_Pointer`, `C_F_ProcPointer`, `C_Null_Char`, `C_Alert`, `C_Backspace`, `C_Form_Feed`, `C_FunLoc`, `C_Sizeof`, `C_New_Line`, `C_Carriage_Return`, `C_Horizontal_Tab`, `C_Vertical_Tab`, `DAbs`, `DACos`, `DASin`, `DATan`, `Date_and_Time`, `DbesJ`, `DbesJN`, `DbesY`, `DbesYN`, `Dble`, `DCos`, `DCosH`, `DDiM`, `DErF`, `DErFC`, `DExp`, `Digits`, `DiM`, `DInt`, `DLog`, `DMax`, `DMin`, `DMod`, `DNInt`, `Dot_Product`, `DProd`, `DSign`, `DSinH`, `DShiftL`, `DShiftR`, `DSin`, `DSqRt`, `DTanH`, `DTan`, `DTime`, `EOShift`, `Epsilon`, `ErF`, `ErFC`, `ErFC_Scaled`, `ETime`, `Execute_Command_Line`, `Exit`, `Exp`, `Exponent`, `Extends_Type_Of`, `FDate`, `FGet`, `FGetC`, `FindLoc`, `Float`, `Floor`, `Flush`, `FNum`, `FPutC`, `FPut`, `Fraction`, `FSeek`, `FStat`, `FTell`, `Gamma`, `GError`, `GetArg`, `Get_Command`, `Get_Command_Argument`, `Get_Environment_Variable`, `GetCWD`, `GetEnv`, `GetGId`, `GetLog`, `GetPId`, `GetUId`, `GMTime`, `HostNm`, `Huge`, `Hypot`, `IAbs`, `IAChar`, `IAll`, `IAnd`, `IAny`, `IArgC`, `IBClr`, `IBits`, `IBSet`, `IChar`, `IDate`, `IDiM`, `IDInt`, `IDNInt`, `IEOr`, `IErrNo`, `IFix`, `Imag`, `ImagPart`, `Image_Index`, `Index`, `Int`, `IOr`, `IParity`, `IRand`, `IsaTty`, `IShft`, `IShftC`, `ISign`, `Iso_C_Binding`, `Is_Contiguous`, `Is_Iostat_End`, `Is_Iostat_Eor`, `ITime`, `Kill`, `Kind`, `LBound`, `LCoBound`, `Len`, `Len_Trim`, `LGe`, `LGt`, `Link`, `LLe`, `LLt`, `LnBlnk`, `Loc`, `Log`, `Log_Gamma`, `Logical`, `Long`, `LShift`, `LStat`, `LTime`, `MaskL`, `MaskR`, `MatMul`, `Max`, `MaxExponent`, `MaxLoc`, `MaxVal`, `MClock`, `Merge`, `Merge_Bits`, `Move_Alloc`, `Min`, `MinExponent`, `MinLoc`, `MinVal`, `Mod`, `Modulo`, `MvBits`, `Nearest`, `New_Line`, `NInt`, `Norm2`, `Not`, `Null`, `Num_Images`, `Or`, `Pack`, `Parity`, `PError`, `Precision`, `Present`, `Product`, `Radix`, `Rand`, `Random_Number`, `Random_Seed`, `Range`, `Real`, `RealPart`, `Rename`, `Repeat`, `Reshape`, `RRSpacing`, `RShift`, `Same_Type_As`, `Scale`, `Scan`, `Second`, `Selected_Char_Kind`, `Selected_Int_Kind`, `Selected_Real_Kind`, `Set_Exponent`, `Shape`, `ShiftA`, `ShiftL`, `ShiftR`, `Short`, `Sign`, `Signal`, `SinH`, `Sin`, `Sleep`, `Sngl`, `Spacing`, `Spread`, `SqRt`, `SRand`, `Stat`, `Storage_Size`, `Sum`, `SymLnk`, `System`, `System_Clock`, `Tan`, `TanH`, `Time`, `This_Image`, `Tiny`, `TrailZ`, `Transfer`, `Transpose`, `Trim`, `TtyNam`, `UBound`, `UCoBound`, `UMask`, `Unlink`, `Unpack`, `Verify`, `XOr`, `ZAbs`, `ZCos`, `ZExp`, `ZLog`, `ZSin`, `ZSqRt`), NameBuiltin, nil}, - {`\.(true|false)\.`, NameBuiltin, nil}, - {`\.(eq|ne|lt|le|gt|ge|not|and|or|eqv|neqv)\.`, OperatorWord, nil}, - }, - "strings": { - {`(?s)"(\\\\|\\[0-7]+|\\.|[^"\\])*"`, LiteralStringDouble, nil}, - {`(?s)'(\\\\|\\[0-7]+|\\.|[^'\\])*'`, LiteralStringSingle, nil}, - }, - "nums": { - {`\d+(?![.e])(_[a-z]\w+)?`, LiteralNumberInteger, nil}, - {`[+-]?\d*\.\d+([ed][-+]?\d+)?(_[a-z]\w+)?`, LiteralNumberFloat, nil}, - {`[+-]?\d+\.\d*([ed][-+]?\d+)?(_[a-z]\w+)?`, LiteralNumberFloat, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/f/fsharp.go b/vendor/github.com/alecthomas/chroma/lexers/f/fsharp.go deleted file mode 100644 index d00f63d..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/f/fsharp.go +++ /dev/null @@ -1,94 +0,0 @@ -package f - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Fsharp lexer. -var Fsharp = internal.Register(MustNewLexer( - &Config{ - Name: "FSharp", - Aliases: []string{"fsharp"}, - Filenames: []string{"*.fs", "*.fsi"}, - MimeTypes: []string{"text/x-fsharp"}, - }, - Rules{ - "escape-sequence": { - {`\\[\\"\'ntbrafv]`, LiteralStringEscape, nil}, - {`\\[0-9]{3}`, LiteralStringEscape, nil}, - {`\\u[0-9a-fA-F]{4}`, LiteralStringEscape, nil}, - {`\\U[0-9a-fA-F]{8}`, LiteralStringEscape, nil}, - }, - "root": { - {`\s+`, Text, nil}, - {`\(\)|\[\]`, NameBuiltinPseudo, nil}, - {`\b(?|-|\\.\\.|\\.|::|:=|:>|:|;;|;|<-|<\\]|<|>\\]|>|\\?\\?|\\?|\\[<|\\[\\||\\[|\\]|_|`|\\{|\\|\\]|\\||\\}|~|<@@|<@|=|@>|@@>)", Operator, nil}, - {`([=<>@^|&+\*/$%-]|[!?~])?[!$%&*+\./:<=>?@^|~-]`, Operator, nil}, - {`\b(and|or|not)\b`, OperatorWord, nil}, - {`\b(sbyte|byte|char|nativeint|unativeint|float32|single|float|double|int8|uint8|int16|uint16|int32|uint32|int64|uint64|decimal|unit|bool|string|list|exn|obj|enum)\b`, KeywordType, nil}, - {`#[ \t]*(if|endif|else|line|nowarn|light|\d+)\b.*?\n`, CommentPreproc, nil}, - {`[^\W\d][\w']*`, Name, nil}, - {`\d[\d_]*[uU]?[yslLnQRZINGmM]?`, LiteralNumberInteger, nil}, - {`0[xX][\da-fA-F][\da-fA-F_]*[uU]?[yslLn]?[fF]?`, LiteralNumberHex, nil}, - {`0[oO][0-7][0-7_]*[uU]?[yslLn]?`, LiteralNumberOct, nil}, - {`0[bB][01][01_]*[uU]?[yslLn]?`, LiteralNumberBin, nil}, - {`-?\d[\d_]*(.[\d_]*)?([eE][+\-]?\d[\d_]*)[fFmM]?`, LiteralNumberFloat, nil}, - {`'(?:(\\[\\\"'ntbr ])|(\\[0-9]{3})|(\\x[0-9a-fA-F]{2}))'B?`, LiteralStringChar, nil}, - {`'.'`, LiteralStringChar, nil}, - {`'`, Keyword, nil}, - {`@?"`, LiteralStringDouble, Push("string")}, - {`[~?][a-z][\w\']*:`, NameVariable, nil}, - }, - "dotted": { - {`\s+`, Text, nil}, - {`\.`, Punctuation, nil}, - {`[A-Z][\w\']*(?=\s*\.)`, NameNamespace, nil}, - {`[A-Z][\w\']*`, Name, Pop(1)}, - {`[a-z_][\w\']*`, Name, Pop(1)}, - Default(Pop(1)), - }, - "comment": { - {`[^(*)@"]+`, Comment, nil}, - {`\(\*`, Comment, Push()}, - {`\*\)`, Comment, Pop(1)}, - {`@"`, LiteralString, Push("lstring")}, - {`"""`, LiteralString, Push("tqs")}, - {`"`, LiteralString, Push("string")}, - {`[(*)@]`, Comment, nil}, - }, - "string": { - {`[^\\"]+`, LiteralString, nil}, - Include("escape-sequence"), - {`\\\n`, LiteralString, nil}, - {`\n`, LiteralString, nil}, - {`"B?`, LiteralString, Pop(1)}, - }, - "lstring": { - {`[^"]+`, LiteralString, nil}, - {`\n`, LiteralString, nil}, - {`""`, LiteralString, nil}, - {`"B?`, LiteralString, Pop(1)}, - }, - "tqs": { - {`[^"]+`, LiteralString, nil}, - {`\n`, LiteralString, nil}, - {`"""B?`, LiteralString, Pop(1)}, - {`"`, LiteralString, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/g/gas.go b/vendor/github.com/alecthomas/chroma/lexers/g/gas.go deleted file mode 100644 index a922806..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/g/gas.go +++ /dev/null @@ -1,55 +0,0 @@ -package g - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Gas lexer. -var Gas = internal.Register(MustNewLexer( - &Config{ - Name: "GAS", - Aliases: []string{"gas", "asm"}, - Filenames: []string{"*.s", "*.S"}, - MimeTypes: []string{"text/x-gas"}, - }, - Rules{ - "root": { - Include("whitespace"), - {`(?:[a-zA-Z$_][\w$.@-]*|\.[\w$.@-]+):`, NameLabel, nil}, - {`\.(?:[a-zA-Z$_][\w$.@-]*|\.[\w$.@-]+)`, NameAttribute, Push("directive-args")}, - {`lock|rep(n?z)?|data\d+`, NameAttribute, nil}, - {`(?:[a-zA-Z$_][\w$.@-]*|\.[\w$.@-]+)`, NameFunction, Push("instruction-args")}, - {`[\r\n]+`, Text, nil}, - }, - "directive-args": { - {`(?:[a-zA-Z$_][\w$.@-]*|\.[\w$.@-]+)`, NameConstant, nil}, - {`"(\\"|[^"])*"`, LiteralString, nil}, - {`@(?:[a-zA-Z$_][\w$.@-]*|\.[\w$.@-]+)`, NameAttribute, nil}, - {`(?:0[xX][a-zA-Z0-9]+|\d+)`, LiteralNumberInteger, nil}, - {`[\r\n]+`, Text, Pop(1)}, - Include("punctuation"), - Include("whitespace"), - }, - "instruction-args": { - {`([a-z0-9]+)( )(<)((?:[a-zA-Z$_][\w$.@-]*|\.[\w$.@-]+))(>)`, ByGroups(LiteralNumberHex, Text, Punctuation, NameConstant, Punctuation), nil}, - {`([a-z0-9]+)( )(<)((?:[a-zA-Z$_][\w$.@-]*|\.[\w$.@-]+))([-+])((?:0[xX][a-zA-Z0-9]+|\d+))(>)`, ByGroups(LiteralNumberHex, Text, Punctuation, NameConstant, Punctuation, LiteralNumberInteger, Punctuation), nil}, - {`(?:[a-zA-Z$_][\w$.@-]*|\.[\w$.@-]+)`, NameConstant, nil}, - {`(?:0[xX][a-zA-Z0-9]+|\d+)`, LiteralNumberInteger, nil}, - {`%(?:[a-zA-Z$_][\w$.@-]*|\.[\w$.@-]+)`, NameVariable, nil}, - {`$(?:0[xX][a-zA-Z0-9]+|\d+)`, LiteralNumberInteger, nil}, - {`$'(.|\\')'`, LiteralStringChar, nil}, - {`[\r\n]+`, Text, Pop(1)}, - Include("punctuation"), - Include("whitespace"), - }, - "whitespace": { - {`\n`, Text, nil}, - {`\s+`, Text, nil}, - {`[;#].*?\n`, Comment, nil}, - }, - "punctuation": { - {`[-*,.()\[\]!:]+`, Punctuation, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/g/gdscript.go b/vendor/github.com/alecthomas/chroma/lexers/g/gdscript.go deleted file mode 100644 index bfe3063..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/g/gdscript.go +++ /dev/null @@ -1,124 +0,0 @@ -package g - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// GDScript lexer. -var GDScript = internal.Register(MustNewLexer( - &Config{ - Name: "GDScript", - Aliases: []string{"gdscript", "gd"}, - Filenames: []string{"*.gd"}, - MimeTypes: []string{"text/x-gdscript", "application/x-gdscript"}, - }, - Rules{ - "root": { - {`\n`, Text, nil}, - {`^(\s*)([rRuUbB]{,2})("""(?:.|\n)*?""")`, ByGroups(Text, LiteralStringAffix, LiteralStringDoc), nil}, - {`^(\s*)([rRuUbB]{,2})('''(?:.|\n)*?''')`, ByGroups(Text, LiteralStringAffix, LiteralStringDoc), nil}, - {`[^\S\n]+`, Text, nil}, - {`#.*$`, CommentSingle, nil}, - {`[]{}:(),;[]`, Punctuation, nil}, - {`\\\n`, Text, nil}, - {`\\`, Text, nil}, - {`(in|and|or|not)\b`, OperatorWord, nil}, - {`!=|==|<<|>>|&&|\+=|-=|\*=|/=|%=|&=|\|=|\|\||[-~+/*%=<>&^.!|$]`, Operator, nil}, - Include("keywords"), - {`(def)((?:\s|\\\s)+)`, ByGroups(Keyword, Text), Push("funcname")}, - {`(class)((?:\s|\\\s)+)`, ByGroups(Keyword, Text), Push("classname")}, - Include("builtins"), - {`([rR]|[uUbB][rR]|[rR][uUbB])(""")`, ByGroups(LiteralStringAffix, LiteralStringDouble), Push("tdqs")}, - {`([rR]|[uUbB][rR]|[rR][uUbB])(''')`, ByGroups(LiteralStringAffix, LiteralStringSingle), Push("tsqs")}, - {`([rR]|[uUbB][rR]|[rR][uUbB])(")`, ByGroups(LiteralStringAffix, LiteralStringDouble), Push("dqs")}, - {`([rR]|[uUbB][rR]|[rR][uUbB])(')`, ByGroups(LiteralStringAffix, LiteralStringSingle), Push("sqs")}, - {`([uUbB]?)(""")`, ByGroups(LiteralStringAffix, LiteralStringDouble), Combined("stringescape", "tdqs")}, - {`([uUbB]?)(''')`, ByGroups(LiteralStringAffix, LiteralStringSingle), Combined("stringescape", "tsqs")}, - {`([uUbB]?)(")`, ByGroups(LiteralStringAffix, LiteralStringDouble), Combined("stringescape", "dqs")}, - {`([uUbB]?)(')`, ByGroups(LiteralStringAffix, LiteralStringSingle), Combined("stringescape", "sqs")}, - Include("name"), - Include("numbers"), - }, - "keywords": { - {Words(``, `\b`, - `if`, `elif`, `else`, `for`, `do`, - `while`, `switch`, `case`, `break`, `continue`, - `pass`, `return`, `class`, `extends`, `tool`, - `signal`, `func`, `static`, `const`, `enum`, - `var`, `onready`, `export`, `setget`, `breakpoint`), Keyword, nil}, - }, - "builtins": { - {Words(`(?)`, ByGroups(CommentPreproc, Using(Python), CommentPreproc), nil}, - {`<\s*(script|style)\s*.*?>.*?<\s*/\1\s*>`, Other, nil}, - {`<\s*py:[a-zA-Z0-9]+`, NameTag, Push("pytag")}, - {`<\s*[a-zA-Z0-9:.]+`, NameTag, Push("tag")}, - Include("variable"), - {`[<$]`, Other, nil}, - }, - "pytag": { - {`\s+`, Text, nil}, - {`[\w:-]+\s*=`, NameAttribute, Push("pyattr")}, - {`/?\s*>`, NameTag, Pop(1)}, - }, - "pyattr": { - {`(")(.*?)(")`, ByGroups(LiteralString, Using(Python), LiteralString), Pop(1)}, - {`(')(.*?)(')`, ByGroups(LiteralString, Using(Python), LiteralString), Pop(1)}, - {`[^\s>]+`, LiteralString, Pop(1)}, - }, - "tag": { - {`\s+`, Text, nil}, - {`py:[\w-]+\s*=`, NameAttribute, Push("pyattr")}, - {`[\w:-]+\s*=`, NameAttribute, Push("attr")}, - {`/?\s*>`, NameTag, Pop(1)}, - }, - "attr": { - {`"`, LiteralString, Push("attr-dstring")}, - {`'`, LiteralString, Push("attr-sstring")}, - {`[^\s>]*`, LiteralString, Pop(1)}, - }, - "attr-dstring": { - {`"`, LiteralString, Pop(1)}, - Include("strings"), - {`'`, LiteralString, nil}, - }, - "attr-sstring": { - {`'`, LiteralString, Pop(1)}, - Include("strings"), - {`'`, LiteralString, nil}, - }, - "strings": { - {`[^"'$]+`, LiteralString, nil}, - Include("variable"), - }, - "variable": { - {`(?>|<=?|>=?|==?|&&?|\^|\|\|?`, Operator, nil}, - {`[?:]`, Operator, nil}, - {`\bdefined\b`, Operator, nil}, - {`[;{}(),\[\]]`, Punctuation, nil}, - {`[+-]?\d*\.\d+([eE][-+]?\d+)?`, LiteralNumberFloat, nil}, - {`[+-]?\d+\.\d*([eE][-+]?\d+)?`, LiteralNumberFloat, nil}, - {`0[xX][0-9a-fA-F]*`, LiteralNumberHex, nil}, - {`0[0-7]*`, LiteralNumberOct, nil}, - {`[1-9][0-9]*`, LiteralNumberInteger, nil}, - {Words(`\b`, `\b`, `attribute`, `const`, `uniform`, `varying`, `centroid`, `break`, `continue`, `do`, `for`, `while`, `if`, `else`, `in`, `out`, `inout`, `float`, `int`, `void`, `bool`, `true`, `false`, `invariant`, `discard`, `return`, `mat2`, `mat3mat4`, `mat2x2`, `mat3x2`, `mat4x2`, `mat2x3`, `mat3x3`, `mat4x3`, `mat2x4`, `mat3x4`, `mat4x4`, `vec2`, `vec3`, `vec4`, `ivec2`, `ivec3`, `ivec4`, `bvec2`, `bvec3`, `bvec4`, `sampler1D`, `sampler2D`, `sampler3DsamplerCube`, `sampler1DShadow`, `sampler2DShadow`, `struct`), Keyword, nil}, - {Words(`\b`, `\b`, `asm`, `class`, `union`, `enum`, `typedef`, `template`, `this`, `packed`, `goto`, `switch`, `default`, `inline`, `noinline`, `volatile`, `public`, `static`, `extern`, `external`, `interface`, `long`, `short`, `double`, `half`, `fixed`, `unsigned`, `lowp`, `mediump`, `highp`, `precision`, `input`, `output`, `hvec2`, `hvec3`, `hvec4`, `dvec2`, `dvec3`, `dvec4`, `fvec2`, `fvec3`, `fvec4`, `sampler2DRect`, `sampler3DRect`, `sampler2DRectShadow`, `sizeof`, `cast`, `namespace`, `using`), Keyword, nil}, - {`[a-zA-Z_]\w*`, Name, nil}, - {`\.`, Punctuation, nil}, - {`\s+`, Text, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/g/gnuplot.go b/vendor/github.com/alecthomas/chroma/lexers/g/gnuplot.go deleted file mode 100644 index 77c6363..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/g/gnuplot.go +++ /dev/null @@ -1,117 +0,0 @@ -package g - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Gnuplot lexer. -var Gnuplot = internal.Register(MustNewLexer( - &Config{ - Name: "Gnuplot", - Aliases: []string{"gnuplot"}, - Filenames: []string{"*.plot", "*.plt"}, - MimeTypes: []string{"text/x-gnuplot"}, - }, - Rules{ - "root": { - Include("whitespace"), - {`bind\b|bin\b|bi\b`, Keyword, Push("bind")}, - {`exit\b|exi\b|ex\b|quit\b|qui\b|qu\b|q\b`, Keyword, Push("quit")}, - {`fit\b|fi\b|f\b`, Keyword, Push("fit")}, - {`(if)(\s*)(\()`, ByGroups(Keyword, Text, Punctuation), Push("if")}, - {`else\b`, Keyword, nil}, - {`pause\b|paus\b|pau\b|pa\b`, Keyword, Push("pause")}, - {`plot\b|plo\b|pl\b|p\b|replot\b|replo\b|repl\b|rep\b|splot\b|splo\b|spl\b|sp\b`, Keyword, Push("plot")}, - {`save\b|sav\b|sa\b`, Keyword, Push("save")}, - {`set\b|se\b`, Keyword, Push("genericargs", "optionarg")}, - {`show\b|sho\b|sh\b|unset\b|unse\b|uns\b`, Keyword, Push("noargs", "optionarg")}, - {`lower\b|lowe\b|low\b|raise\b|rais\b|rai\b|ra\b|call\b|cal\b|ca\b|cd\b|clear\b|clea\b|cle\b|cl\b|help\b|hel\b|he\b|h\b|\?\b|history\b|histor\b|histo\b|hist\b|his\b|hi\b|load\b|loa\b|lo\b|l\b|print\b|prin\b|pri\b|pr\b|pwd\b|reread\b|rerea\b|rere\b|rer\b|re\b|reset\b|rese\b|res\b|screendump\b|screendum\b|screendu\b|screend\b|screen\b|scree\b|scre\b|scr\b|shell\b|shel\b|she\b|system\b|syste\b|syst\b|sys\b|sy\b|update\b|updat\b|upda\b|upd\b|up\b`, Keyword, Push("genericargs")}, - {`pwd\b|reread\b|rerea\b|rere\b|rer\b|re\b|reset\b|rese\b|res\b|screendump\b|screendum\b|screendu\b|screend\b|screen\b|scree\b|scre\b|scr\b|shell\b|shel\b|she\b|test\b`, Keyword, Push("noargs")}, - {`([a-zA-Z_]\w*)(\s*)(=)`, ByGroups(NameVariable, Text, Operator), Push("genericargs")}, - {`([a-zA-Z_]\w*)(\s*\(.*?\)\s*)(=)`, ByGroups(NameFunction, Text, Operator), Push("genericargs")}, - {`@[a-zA-Z_]\w*`, NameConstant, nil}, - {`;`, Keyword, nil}, - }, - "comment": { - {`[^\\\n]`, Comment, nil}, - {`\\\n`, Comment, nil}, - {`\\`, Comment, nil}, - Default(Pop(1)), - }, - "whitespace": { - {`#`, Comment, Push("comment")}, - {`[ \t\v\f]+`, Text, nil}, - }, - "noargs": { - Include("whitespace"), - {`;`, Punctuation, Pop(1)}, - {`\n`, Text, Pop(1)}, - }, - "dqstring": { - {`"`, LiteralString, Pop(1)}, - {`\\([\\abfnrtv"\']|x[a-fA-F0-9]{2,4}|[0-7]{1,3})`, LiteralStringEscape, nil}, - {`[^\\"\n]+`, LiteralString, nil}, - {`\\\n`, LiteralString, nil}, - {`\\`, LiteralString, nil}, - {`\n`, LiteralString, Pop(1)}, - }, - "sqstring": { - {`''`, LiteralString, nil}, - {`'`, LiteralString, Pop(1)}, - {`[^\\'\n]+`, LiteralString, nil}, - {`\\\n`, LiteralString, nil}, - {`\\`, LiteralString, nil}, - {`\n`, LiteralString, Pop(1)}, - }, - "genericargs": { - Include("noargs"), - {`"`, LiteralString, Push("dqstring")}, - {`'`, LiteralString, Push("sqstring")}, - {`(\d+\.\d*|\.\d+|\d+)[eE][+-]?\d+`, LiteralNumberFloat, nil}, - {`(\d+\.\d*|\.\d+)`, LiteralNumberFloat, nil}, - {`-?\d+`, LiteralNumberInteger, nil}, - {`[,.~!%^&*+=|?:<>/-]`, Operator, nil}, - {`[{}()\[\]]`, Punctuation, nil}, - {`(eq|ne)\b`, OperatorWord, nil}, - {`([a-zA-Z_]\w*)(\s*)(\()`, ByGroups(NameFunction, Text, Punctuation), nil}, - {`[a-zA-Z_]\w*`, Name, nil}, - {`@[a-zA-Z_]\w*`, NameConstant, nil}, - {`\\\n`, Text, nil}, - }, - "optionarg": { - Include("whitespace"), - {`all\b|al\b|a\b|angles\b|angle\b|angl\b|ang\b|an\b|arrow\b|arro\b|arr\b|ar\b|autoscale\b|autoscal\b|autosca\b|autosc\b|autos\b|auto\b|aut\b|au\b|bars\b|bar\b|ba\b|b\b|border\b|borde\b|bord\b|bor\b|boxwidth\b|boxwidt\b|boxwid\b|boxwi\b|boxw\b|box\b|clabel\b|clabe\b|clab\b|cla\b|cl\b|clip\b|cli\b|cl\b|c\b|cntrparam\b|cntrpara\b|cntrpar\b|cntrpa\b|cntrp\b|cntr\b|cnt\b|cn\b|contour\b|contou\b|conto\b|cont\b|con\b|co\b|data\b|dat\b|da\b|datafile\b|datafil\b|datafi\b|dataf\b|data\b|dgrid3d\b|dgrid3\b|dgrid\b|dgri\b|dgr\b|dg\b|dummy\b|dumm\b|dum\b|du\b|encoding\b|encodin\b|encodi\b|encod\b|enco\b|enc\b|decimalsign\b|decimalsig\b|decimalsi\b|decimals\b|decimal\b|decima\b|decim\b|deci\b|dec\b|fit\b|fontpath\b|fontpat\b|fontpa\b|fontp\b|font\b|format\b|forma\b|form\b|for\b|fo\b|function\b|functio\b|functi\b|funct\b|func\b|fun\b|fu\b|functions\b|function\b|functio\b|functi\b|funct\b|func\b|fun\b|fu\b|grid\b|gri\b|gr\b|g\b|hidden3d\b|hidden3\b|hidden\b|hidde\b|hidd\b|hid\b|historysize\b|historysiz\b|historysi\b|historys\b|history\b|histor\b|histo\b|hist\b|his\b|isosamples\b|isosample\b|isosampl\b|isosamp\b|isosam\b|isosa\b|isos\b|iso\b|is\b|key\b|ke\b|k\b|keytitle\b|keytitl\b|keytit\b|keyti\b|keyt\b|label\b|labe\b|lab\b|la\b|linestyle\b|linestyl\b|linesty\b|linest\b|lines\b|line\b|lin\b|li\b|ls\b|loadpath\b|loadpat\b|loadpa\b|loadp\b|load\b|loa\b|locale\b|local\b|loca\b|loc\b|logscale\b|logscal\b|logsca\b|logsc\b|logs\b|log\b|macros\b|macro\b|macr\b|mac\b|mapping\b|mappin\b|mappi\b|mapp\b|map\b|mapping3d\b|mapping3\b|mapping\b|mappin\b|mappi\b|mapp\b|map\b|margin\b|margi\b|marg\b|mar\b|lmargin\b|lmargi\b|lmarg\b|lmar\b|rmargin\b|rmargi\b|rmarg\b|rmar\b|tmargin\b|tmargi\b|tmarg\b|tmar\b|bmargin\b|bmargi\b|bmarg\b|bmar\b|mouse\b|mous\b|mou\b|mo\b|multiplot\b|multiplo\b|multipl\b|multip\b|multi\b|mxtics\b|mxtic\b|mxti\b|mxt\b|nomxtics\b|nomxtic\b|nomxti\b|nomxt\b|mx2tics\b|mx2tic\b|mx2ti\b|mx2t\b|nomx2tics\b|nomx2tic\b|nomx2ti\b|nomx2t\b|mytics\b|mytic\b|myti\b|myt\b|nomytics\b|nomytic\b|nomyti\b|nomyt\b|my2tics\b|my2tic\b|my2ti\b|my2t\b|nomy2tics\b|nomy2tic\b|nomy2ti\b|nomy2t\b|mztics\b|mztic\b|mzti\b|mzt\b|nomztics\b|nomztic\b|nomzti\b|nomzt\b|mcbtics\b|mcbtic\b|mcbti\b|mcbt\b|nomcbtics\b|nomcbtic\b|nomcbti\b|nomcbt\b|offsets\b|offset\b|offse\b|offs\b|off\b|of\b|origin\b|origi\b|orig\b|ori\b|or\b|output\b|outpu\b|outp\b|out\b|ou\b|o\b|parametric\b|parametri\b|parametr\b|paramet\b|parame\b|param\b|para\b|par\b|pa\b|pm3d\b|pm3\b|pm\b|palette\b|palett\b|palet\b|pale\b|pal\b|colorbox\b|colorbo\b|colorb\b|plot\b|plo\b|pl\b|p\b|pointsize\b|pointsiz\b|pointsi\b|points\b|point\b|poin\b|poi\b|polar\b|pola\b|pol\b|print\b|prin\b|pri\b|pr\b|object\b|objec\b|obje\b|obj\b|samples\b|sample\b|sampl\b|samp\b|sam\b|sa\b|size\b|siz\b|si\b|style\b|styl\b|sty\b|st\b|surface\b|surfac\b|surfa\b|surf\b|sur\b|su\b|table\b|terminal\b|termina\b|termin\b|termi\b|term\b|ter\b|te\b|t\b|termoptions\b|termoption\b|termoptio\b|termopti\b|termopt\b|termop\b|termo\b|tics\b|tic\b|ti\b|ticscale\b|ticscal\b|ticsca\b|ticsc\b|ticslevel\b|ticsleve\b|ticslev\b|ticsle\b|ticsl\b|timefmt\b|timefm\b|timef\b|timestamp\b|timestam\b|timesta\b|timest\b|times\b|time\b|tim\b|title\b|titl\b|tit\b|variables\b|variable\b|variabl\b|variab\b|varia\b|vari\b|var\b|va\b|v\b|version\b|versio\b|versi\b|vers\b|ver\b|ve\b|view\b|vie\b|vi\b|xyplane\b|xyplan\b|xypla\b|xypl\b|xyp\b|xdata\b|xdat\b|xda\b|x2data\b|x2dat\b|x2da\b|ydata\b|ydat\b|yda\b|y2data\b|y2dat\b|y2da\b|zdata\b|zdat\b|zda\b|cbdata\b|cbdat\b|cbda\b|xlabel\b|xlabe\b|xlab\b|xla\b|xl\b|x2label\b|x2labe\b|x2lab\b|x2la\b|x2l\b|ylabel\b|ylabe\b|ylab\b|yla\b|yl\b|y2label\b|y2labe\b|y2lab\b|y2la\b|y2l\b|zlabel\b|zlabe\b|zlab\b|zla\b|zl\b|cblabel\b|cblabe\b|cblab\b|cbla\b|cbl\b|xtics\b|xtic\b|xti\b|noxtics\b|noxtic\b|noxti\b|x2tics\b|x2tic\b|x2ti\b|nox2tics\b|nox2tic\b|nox2ti\b|ytics\b|ytic\b|yti\b|noytics\b|noytic\b|noyti\b|y2tics\b|y2tic\b|y2ti\b|noy2tics\b|noy2tic\b|noy2ti\b|ztics\b|ztic\b|zti\b|noztics\b|noztic\b|nozti\b|cbtics\b|cbtic\b|cbti\b|nocbtics\b|nocbtic\b|nocbti\b|xdtics\b|xdtic\b|xdti\b|noxdtics\b|noxdtic\b|noxdti\b|x2dtics\b|x2dtic\b|x2dti\b|nox2dtics\b|nox2dtic\b|nox2dti\b|ydtics\b|ydtic\b|ydti\b|noydtics\b|noydtic\b|noydti\b|y2dtics\b|y2dtic\b|y2dti\b|noy2dtics\b|noy2dtic\b|noy2dti\b|zdtics\b|zdtic\b|zdti\b|nozdtics\b|nozdtic\b|nozdti\b|cbdtics\b|cbdtic\b|cbdti\b|nocbdtics\b|nocbdtic\b|nocbdti\b|xmtics\b|xmtic\b|xmti\b|noxmtics\b|noxmtic\b|noxmti\b|x2mtics\b|x2mtic\b|x2mti\b|nox2mtics\b|nox2mtic\b|nox2mti\b|ymtics\b|ymtic\b|ymti\b|noymtics\b|noymtic\b|noymti\b|y2mtics\b|y2mtic\b|y2mti\b|noy2mtics\b|noy2mtic\b|noy2mti\b|zmtics\b|zmtic\b|zmti\b|nozmtics\b|nozmtic\b|nozmti\b|cbmtics\b|cbmtic\b|cbmti\b|nocbmtics\b|nocbmtic\b|nocbmti\b|xrange\b|xrang\b|xran\b|xra\b|xr\b|x2range\b|x2rang\b|x2ran\b|x2ra\b|x2r\b|yrange\b|yrang\b|yran\b|yra\b|yr\b|y2range\b|y2rang\b|y2ran\b|y2ra\b|y2r\b|zrange\b|zrang\b|zran\b|zra\b|zr\b|cbrange\b|cbrang\b|cbran\b|cbra\b|cbr\b|rrange\b|rrang\b|rran\b|rra\b|rr\b|trange\b|trang\b|tran\b|tra\b|tr\b|urange\b|urang\b|uran\b|ura\b|ur\b|vrange\b|vrang\b|vran\b|vra\b|vr\b|xzeroaxis\b|xzeroaxi\b|xzeroax\b|xzeroa\b|x2zeroaxis\b|x2zeroaxi\b|x2zeroax\b|x2zeroa\b|yzeroaxis\b|yzeroaxi\b|yzeroax\b|yzeroa\b|y2zeroaxis\b|y2zeroaxi\b|y2zeroax\b|y2zeroa\b|zzeroaxis\b|zzeroaxi\b|zzeroax\b|zzeroa\b|zeroaxis\b|zeroaxi\b|zeroax\b|zeroa\b|zero\b|zer\b|ze\b|z\b`, NameBuiltin, Pop(1)}, - }, - "bind": { - {`!`, Keyword, Pop(1)}, - {`allwindows\b|allwindow\b|allwindo\b|allwind\b|allwin\b|allwi\b|allw\b|all\b`, NameBuiltin, nil}, - Include("genericargs"), - }, - "quit": { - {`gnuplot\b`, Keyword, nil}, - Include("noargs"), - }, - "fit": { - {`via\b`, NameBuiltin, nil}, - Include("plot"), - }, - "if": { - {`\)`, Punctuation, Pop(1)}, - Include("genericargs"), - }, - "pause": { - {`(mouse|any|button1|button2|button3)\b`, NameBuiltin, nil}, - {`keypress\b|keypres\b|keypre\b|keypr\b|keyp\b|key\b`, NameBuiltin, nil}, - Include("genericargs"), - }, - "plot": { - {`axes\b|axe\b|ax\b|axis\b|axi\b|binary\b|binar\b|bina\b|bin\b|every\b|ever\b|eve\b|ev\b|index\b|inde\b|ind\b|in\b|i\b|matrix\b|matri\b|matr\b|mat\b|smooth\b|smoot\b|smoo\b|smo\b|sm\b|s\b|thru\b|title\b|titl\b|tit\b|ti\b|t\b|notitle\b|notitl\b|notit\b|noti\b|not\b|using\b|usin\b|usi\b|us\b|u\b|with\b|wit\b|wi\b|w\b`, NameBuiltin, nil}, - Include("genericargs"), - }, - "save": { - {`functions\b|function\b|functio\b|functi\b|funct\b|func\b|fun\b|fu\b|f\b|set\b|se\b|s\b|terminal\b|termina\b|termin\b|termi\b|term\b|ter\b|te\b|t\b|variables\b|variable\b|variabl\b|variab\b|varia\b|vari\b|var\b|va\b|v\b`, NameBuiltin, nil}, - Include("genericargs"), - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/g/go.go b/vendor/github.com/alecthomas/chroma/lexers/g/go.go deleted file mode 100644 index a93fa8b..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/g/go.go +++ /dev/null @@ -1,114 +0,0 @@ -package g - -import ( - "strings" - - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/h" - "github.com/alecthomas/chroma/lexers/internal" -) - -// Go lexer. -var Go = internal.Register(MustNewLexer( - &Config{ - Name: "Go", - Aliases: []string{"go", "golang"}, - Filenames: []string{"*.go"}, - MimeTypes: []string{"text/x-gosrc"}, - }, - Rules{ - "root": { - {`\n`, Text, nil}, - {`\s+`, Text, nil}, - {`\\\n`, Text, nil}, - {`//(.*?)\n`, CommentSingle, nil}, - {`/(\\\n)?[*](.|\n)*?[*](\\\n)?/`, CommentMultiline, nil}, - {`(import|package)\b`, KeywordNamespace, nil}, - {`(var|func|struct|map|chan|type|interface|const)\b`, KeywordDeclaration, nil}, - {Words(``, `\b`, `break`, `default`, `select`, `case`, `defer`, `go`, `else`, `goto`, `switch`, `fallthrough`, `if`, `range`, `continue`, `for`, `return`), Keyword, nil}, - {`(true|false|iota|nil)\b`, KeywordConstant, nil}, - {Words(``, `\b(\()`, `uint`, `uint8`, `uint16`, `uint32`, `uint64`, `int`, `int8`, `int16`, `int32`, `int64`, `float`, `float32`, `float64`, `complex64`, `complex128`, `byte`, `rune`, `string`, `bool`, `error`, `uintptr`, `print`, `println`, `panic`, `recover`, `close`, `complex`, `real`, `imag`, `len`, `cap`, `append`, `copy`, `delete`, `new`, `make`), ByGroups(NameBuiltin, Punctuation), nil}, - {Words(``, `\b`, `uint`, `uint8`, `uint16`, `uint32`, `uint64`, `int`, `int8`, `int16`, `int32`, `int64`, `float`, `float32`, `float64`, `complex64`, `complex128`, `byte`, `rune`, `string`, `bool`, `error`, `uintptr`), KeywordType, nil}, - {`\d+i`, LiteralNumber, nil}, - {`\d+\.\d*([Ee][-+]\d+)?i`, LiteralNumber, nil}, - {`\.\d+([Ee][-+]\d+)?i`, LiteralNumber, nil}, - {`\d+[Ee][-+]\d+i`, LiteralNumber, nil}, - {`\d+(\.\d+[eE][+\-]?\d+|\.\d*|[eE][+\-]?\d+)`, LiteralNumberFloat, nil}, - {`\.\d+([eE][+\-]?\d+)?`, LiteralNumberFloat, nil}, - {`0[0-7]+`, LiteralNumberOct, nil}, - {`0[xX][0-9a-fA-F]+`, LiteralNumberHex, nil}, - {`(0|[1-9][0-9]*)`, LiteralNumberInteger, nil}, - {`'(\\['"\\abfnrtv]|\\x[0-9a-fA-F]{2}|\\[0-7]{1,3}|\\u[0-9a-fA-F]{4}|\\U[0-9a-fA-F]{8}|[^\\])'`, LiteralStringChar, nil}, - {"(`)([^`]*)(`)", ByGroups(LiteralString, Using(TypeRemappingLexer(GoTextTemplate, TypeMapping{{Other, LiteralString, nil}})), LiteralString), nil}, - {`"(\\\\|\\"|[^"])*"`, LiteralString, nil}, - {`(<<=|>>=|<<|>>|<=|>=|&\^=|&\^|\+=|-=|\*=|/=|%=|&=|\|=|&&|\|\||<-|\+\+|--|==|!=|:=|\.\.\.|[+\-*/%&])`, Operator, nil}, - {`([a-zA-Z_]\w*)(\s*)(\()`, ByGroups(NameFunction, UsingSelf("root"), Punctuation), nil}, - {`[|^<>=!()\[\]{}.,;:]`, Punctuation, nil}, - {`[^\W\d]\w*`, NameOther, nil}, - }, - }, -).SetAnalyser(func(text string) float32 { - if strings.Contains(text, "fmt.") && strings.Contains(text, "package ") { - return 0.5 - } - if strings.Contains(text, "package ") { - return 0.1 - } - return 0.0 -})) - -var goTemplateRules = Rules{ - "root": { - {`{{[-]?`, CommentPreproc, Push("template")}, - {`[^{]+`, Other, nil}, - {`{`, Other, nil}, - }, - "template": { - {`[-]?}}`, CommentPreproc, Pop(1)}, - {`/\*.*?\*/`, Comment, nil}, - {`(?=}})`, CommentPreproc, Pop(1)}, // Terminate the pipeline - {`\(`, Operator, Push("subexpression")}, - {`"(\\\\|\\"|[^"])*"`, LiteralString, nil}, - Include("expression"), - }, - "subexpression": { - {`\)`, Operator, Pop(1)}, - Include("expression"), - }, - "expression": { - {`\s+`, Whitespace, nil}, - {`\(`, Operator, Push("subexpression")}, - {`(range|if|else|while|with|template|end|true|false|nil|and|call|html|index|js|len|not|or|print|printf|println|urlquery|eq|ne|lt|le|gt|ge)\b`, Keyword, nil}, - {`\||:=`, Operator, nil}, - {`[$]?[^\W\d]\w*`, NameOther, nil}, - {`[$]?\.(?:[^\W\d]\w*)?`, NameAttribute, nil}, - {`"(\\\\|\\"|[^"])*"`, LiteralString, nil}, - {`\d+i`, LiteralNumber, nil}, - {`\d+\.\d*([Ee][-+]\d+)?i`, LiteralNumber, nil}, - {`\.\d+([Ee][-+]\d+)?i`, LiteralNumber, nil}, - {`\d+[Ee][-+]\d+i`, LiteralNumber, nil}, - {`\d+(\.\d+[eE][+\-]?\d+|\.\d*|[eE][+\-]?\d+)`, LiteralNumberFloat, nil}, - {`\.\d+([eE][+\-]?\d+)?`, LiteralNumberFloat, nil}, - {`0[0-7]+`, LiteralNumberOct, nil}, - {`0[xX][0-9a-fA-F]+`, LiteralNumberHex, nil}, - {`(0|[1-9][0-9]*)`, LiteralNumberInteger, nil}, - {`'(\\['"\\abfnrtv]|\\x[0-9a-fA-F]{2}|\\[0-7]{1,3}|\\u[0-9a-fA-F]{4}|\\U[0-9a-fA-F]{8}|[^\\])'`, LiteralStringChar, nil}, - {"`[^`]*`", LiteralString, nil}, - }, -} - -var GoHTMLTemplate = internal.Register(DelegatingLexer(h.HTML, MustNewLexer( - &Config{ - Name: "Go HTML Template", - Aliases: []string{"go-html-template"}, - }, - goTemplateRules, -))) - -var GoTextTemplate = internal.Register(MustNewLexer( - &Config{ - Name: "Go Text Template", - Aliases: []string{"go-text-template"}, - }, - goTemplateRules, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/g/graphql.go b/vendor/github.com/alecthomas/chroma/lexers/g/graphql.go deleted file mode 100644 index a57e693..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/g/graphql.go +++ /dev/null @@ -1,45 +0,0 @@ -package g - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Go lexer. -var Graphql = internal.Register(MustNewLexer( - &Config{ - Name: "GraphQL", - Aliases: []string{"graphql", "graphqls", "gql"}, - Filenames: []string{"*.graphql", "*.graphqls"}, - }, - Rules{ - "root": { - {`(query|mutation|subscription|fragment|scalar|implements|interface|union|enum|input|type)`, KeywordDeclaration, Push("type")}, - {`(on|extend|schema|directive|\.\.\.)`, KeywordDeclaration, nil}, - {`(QUERY|MUTATION|SUBSCRIPTION|FIELD|FRAGMENT_DEFINITION|FRAGMENT_SPREAD|INLINE_FRAGMENT|SCHEMA|SCALAR|OBJECT|FIELD_DEFINITION|ARGUMENT_DEFINITION|INTERFACE|UNION|ENUM|ENUM_VALUE|INPUT_OBJECT|INPUT_FIELD_DEFINITION)\b`, KeywordConstant, nil}, - {`[^\W\d]\w*`, NameProperty, nil}, - {`\@\w+`, NameDecorator, nil}, - {`:`, Punctuation, Push("type")}, - {`[\(\)\{\}\[\],!\|=]`, Punctuation, nil}, - {`\$\w+`, NameVariable, nil}, - {`\d+i`, LiteralNumber, nil}, - {`\d+\.\d*([Ee][-+]\d+)?i`, LiteralNumber, nil}, - {`\.\d+([Ee][-+]\d+)?i`, LiteralNumber, nil}, - {`\d+[Ee][-+]\d+i`, LiteralNumber, nil}, - {`\d+(\.\d+[eE][+\-]?\d+|\.\d*|[eE][+\-]?\d+)`, LiteralNumberFloat, nil}, - {`\.\d+([eE][+\-]?\d+)?`, LiteralNumberFloat, nil}, - {`(0|[1-9][0-9]*)`, LiteralNumberInteger, nil}, - {`"""[\x00-\x7F]*?"""`, LiteralString, nil}, - {`"(\\["\\abfnrtv]|\\x[0-9a-fA-F]{2}|\\[0-7]{1,3}|\\u[0-9a-fA-F]{4}|\\U[0-9a-fA-F]{8}|[^\\])"`, LiteralStringChar, nil}, - {`"(\\\\|\\"|[^"])*"`, LiteralString, nil}, - {`"(true|false|null)*"`, Literal, nil}, - {`[\r\n\s]+`, Whitespace, nil}, - {`#[^\r\n]*`, Comment, nil}, - }, - // Treats the next word as a class, default rules it would be a property - "type": { - {`[^\W\d]\w*`, NameClass, Pop(1)}, - Include("root"), - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/g/groovy.go b/vendor/github.com/alecthomas/chroma/lexers/g/groovy.go deleted file mode 100644 index a395415..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/g/groovy.go +++ /dev/null @@ -1,58 +0,0 @@ -package g - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Groovy lexer. -var Groovy = internal.Register(MustNewLexer( - &Config{ - Name: "Groovy", - Aliases: []string{"groovy"}, - Filenames: []string{"*.groovy", "*.gradle"}, - MimeTypes: []string{"text/x-groovy"}, - DotAll: true, - }, - Rules{ - "root": { - {`#!(.*?)$`, CommentPreproc, Push("base")}, - Default(Push("base")), - }, - "base": { - {`^(\s*(?:[a-zA-Z_][\w.\[\]]*\s+)+?)([a-zA-Z_]\w*)(\s*)(\()`, ByGroups(UsingSelf("root"), NameFunction, Text, Operator), nil}, - {`[^\S\n]+`, Text, nil}, - {`//.*?\n`, CommentSingle, nil}, - {`/\*.*?\*/`, CommentMultiline, nil}, - {`@[a-zA-Z_][\w.]*`, NameDecorator, nil}, - {`(as|assert|break|case|catch|continue|default|do|else|finally|for|if|in|goto|instanceof|new|return|switch|this|throw|try|while|in|as)\b`, Keyword, nil}, - {`(abstract|const|enum|extends|final|implements|native|private|protected|public|static|strictfp|super|synchronized|throws|transient|volatile)\b`, KeywordDeclaration, nil}, - {`(def|boolean|byte|char|double|float|int|long|short|void)\b`, KeywordType, nil}, - {`(package)(\s+)`, ByGroups(KeywordNamespace, Text), nil}, - {`(true|false|null)\b`, KeywordConstant, nil}, - {`(class|interface)(\s+)`, ByGroups(KeywordDeclaration, Text), Push("class")}, - {`(import)(\s+)`, ByGroups(KeywordNamespace, Text), Push("import")}, - {`""".*?"""`, LiteralStringDouble, nil}, - {`'''.*?'''`, LiteralStringSingle, nil}, - {`"(\\\\|\\"|[^"])*"`, LiteralStringDouble, nil}, - {`'(\\\\|\\'|[^'])*'`, LiteralStringSingle, nil}, - {`\$/((?!/\$).)*/\$`, LiteralString, nil}, - {`/(\\\\|\\"|[^/])*/`, LiteralString, nil}, - {`'\\.'|'[^\\]'|'\\u[0-9a-fA-F]{4}'`, LiteralStringChar, nil}, - {`(\.)([a-zA-Z_]\w*)`, ByGroups(Operator, NameAttribute), nil}, - {`[a-zA-Z_]\w*:`, NameLabel, nil}, - {`[a-zA-Z_$]\w*`, Name, nil}, - {`[~^*!%&\[\](){}<>|+=:;,./?-]`, Operator, nil}, - {`[0-9][0-9]*\.[0-9]+([eE][0-9]+)?[fd]?`, LiteralNumberFloat, nil}, - {`0x[0-9a-fA-F]+`, LiteralNumberHex, nil}, - {`[0-9]+L?`, LiteralNumberInteger, nil}, - {`\n`, Text, nil}, - }, - "class": { - {`[a-zA-Z_]\w*`, NameClass, Pop(1)}, - }, - "import": { - {`[\w.]+\*?`, NameNamespace, Pop(1)}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/h/handlebars.go b/vendor/github.com/alecthomas/chroma/lexers/h/handlebars.go deleted file mode 100644 index 07072da..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/h/handlebars.go +++ /dev/null @@ -1,56 +0,0 @@ -package h - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Handlebars lexer. -var Handlebars = internal.Register(MustNewLexer( - &Config{ - Name: "Handlebars", - Aliases: []string{"handlebars"}, - Filenames: []string{"*.handlebars"}, - MimeTypes: []string{}, - }, - Rules{ - "root": { - {`[^{]+`, Other, nil}, - {`\{\{!.*\}\}`, Comment, nil}, - {`(\{\{\{)(\s*)`, ByGroups(CommentSpecial, Text), Push("tag")}, - {`(\{\{)(\s*)`, ByGroups(CommentPreproc, Text), Push("tag")}, - }, - "tag": { - {`\s+`, Text, nil}, - {`\}\}\}`, CommentSpecial, Pop(1)}, - {`\}\}`, CommentPreproc, Pop(1)}, - {`([#/]*)(each|if|unless|else|with|log|in(?:line)?)`, ByGroups(Keyword, Keyword), nil}, - {`#\*inline`, Keyword, nil}, - {`([#/])([\w-]+)`, ByGroups(NameFunction, NameFunction), nil}, - {`([\w-]+)(=)`, ByGroups(NameAttribute, Operator), nil}, - {`(>)(\s*)(@partial-block)`, ByGroups(Keyword, Text, Keyword), nil}, - {`(#?>)(\s*)([\w-]+)`, ByGroups(Keyword, Text, NameVariable), nil}, - {`(>)(\s*)(\()`, ByGroups(Keyword, Text, Punctuation), Push("dynamic-partial")}, - Include("generic"), - }, - "dynamic-partial": { - {`\s+`, Text, nil}, - {`\)`, Punctuation, Pop(1)}, - {`(lookup)(\s+)(\.|this)(\s+)`, ByGroups(Keyword, Text, NameVariable, Text), nil}, - {`(lookup)(\s+)(\S+)`, ByGroups(Keyword, Text, UsingSelf("variable")), nil}, - {`[\w-]+`, NameFunction, nil}, - Include("generic"), - }, - "variable": { - {`[a-zA-Z][\w-]*`, NameVariable, nil}, - {`\.[\w-]+`, NameVariable, nil}, - {`(this\/|\.\/|(\.\.\/)+)[\w-]+`, NameVariable, nil}, - }, - "generic": { - Include("variable"), - {`:?"(\\\\|\\"|[^"])*"`, LiteralStringDouble, nil}, - {`:?'(\\\\|\\'|[^'])*'`, LiteralStringSingle, nil}, - {`[0-9](\.[0-9]*)?(eE[+-][0-9])?[flFLdD]?|0[xX][0-9a-fA-F]+[Ll]?`, LiteralNumber, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/h/haskell.go b/vendor/github.com/alecthomas/chroma/lexers/h/haskell.go deleted file mode 100644 index b018eab..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/h/haskell.go +++ /dev/null @@ -1,99 +0,0 @@ -package h - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Haskell lexer. -var Haskell = internal.Register(MustNewLexer( - &Config{ - Name: "Haskell", - Aliases: []string{"haskell", "hs"}, - Filenames: []string{"*.hs"}, - MimeTypes: []string{"text/x-haskell"}, - }, - Rules{ - "root": { - {`\s+`, Text, nil}, - {`--(?![!#$%&*+./<=>?@^|_~:\\]).*?$`, CommentSingle, nil}, - {`\{-`, CommentMultiline, Push("comment")}, - {`\bimport\b`, KeywordReserved, Push("import")}, - {`\bmodule\b`, KeywordReserved, Push("module")}, - {`\berror\b`, NameException, nil}, - {`\b(case|class|data|default|deriving|do|else|family|if|in|infix[lr]?|instance|let|newtype|of|then|type|where|_)(?!\')\b`, KeywordReserved, nil}, - {`'[^\\]'`, LiteralStringChar, nil}, - {`^[_a-zµß-öø-ÿāăąćĉċčďđēĕėęěĝğġģĥħĩīĭįıijĵķ-ĸĺļľŀłńņň-ʼnŋōŏőœŕŗřśŝşšţťŧũūŭůűųŵŷźżž-ƀƃƅƈƌ-ƍƒƕƙ-ƛƞơƣƥƨƪ-ƫƭưƴƶƹ-ƺƽ-ƿdžljnjǎǐǒǔǖǘǚǜ-ǝǟǡǣǥǧǩǫǭǯ-ǰdzǵǹǻǽǿȁȃȅȇȉȋȍȏȑȓȕȗșțȝȟȡȣȥȧȩȫȭȯȱȳ-ȹȼȿ-ɀɂɇɉɋɍɏ-ʓʕ-ʯͱͳͷͻ-ͽΐά-ώϐ-ϑϕ-ϗϙϛϝϟϡϣϥϧϩϫϭϯ-ϳϵϸϻ-ϼа-џѡѣѥѧѩѫѭѯѱѳѵѷѹѻѽѿҁҋҍҏґғҕҗҙқҝҟҡңҥҧҩҫҭүұҳҵҷҹһҽҿӂӄӆӈӊӌӎ-ӏӑӓӕӗәӛӝӟӡӣӥӧөӫӭӯӱӳӵӷӹӻӽӿԁԃԅԇԉԋԍԏԑԓԕԗԙԛԝԟԡԣԥԧա-ևᴀ-ᴫᵫ-ᵷᵹ-ᶚḁḃḅḇḉḋḍḏḑḓḕḗḙḛḝḟḡḣḥḧḩḫḭḯḱḳḵḷḹḻḽḿṁṃṅṇṉṋṍṏṑṓṕṗṙṛṝṟṡṣṥṧṩṫṭṯṱṳṵṷṹṻṽṿẁẃẅẇẉẋẍẏẑẓẕ-ẝẟạảấầẩẫậắằẳẵặẹẻẽếềểễệỉịọỏốồổỗộớờởỡợụủứừửữựỳỵỷỹỻỽỿ-ἇἐ-ἕἠ-ἧἰ-ἷὀ-ὅὐ-ὗὠ-ὧὰ-ώᾀ-ᾇᾐ-ᾗᾠ-ᾧᾰ-ᾴᾶ-ᾷιῂ-ῄῆ-ῇῐ-ΐῖ-ῗῠ-ῧῲ-ῴῶ-ῷℊℎ-ℏℓℯℴℹℼ-ℽⅆ-ⅉⅎↄⰰ-ⱞⱡⱥ-ⱦⱨⱪⱬⱱⱳ-ⱴⱶ-ⱻⲁⲃⲅⲇⲉⲋⲍⲏⲑⲓⲕⲗⲙⲛⲝⲟⲡⲣⲥⲧⲩⲫⲭⲯⲱⲳⲵⲷⲹⲻⲽⲿⳁⳃⳅⳇⳉⳋⳍⳏⳑⳓⳕⳗⳙⳛⳝⳟⳡⳣ-ⳤⳬⳮⳳⴀ-ⴥⴧⴭꙁꙃꙅꙇꙉꙋꙍꙏꙑꙓꙕꙗꙙꙛꙝꙟꙡꙣꙥꙧꙩꙫꙭꚁꚃꚅꚇꚉꚋꚍꚏꚑꚓꚕꚗꜣꜥꜧꜩꜫꜭꜯ-ꜱꜳꜵꜷꜹꜻꜽꜿꝁꝃꝅꝇꝉꝋꝍꝏꝑꝓꝕꝗꝙꝛꝝꝟꝡꝣꝥꝧꝩꝫꝭꝯꝱ-ꝸꝺꝼꝿꞁꞃꞅꞇꞌꞎꞑꞓꞡꞣꞥꞧꞩꟺff-stﬓ-ﬗa-z𐐨-𐑏𝐚-𝐳𝑎-𝑔𝑖-𝑧𝒂-𝒛𝒶-𝒹𝒻𝒽-𝓃𝓅-𝓏𝓪-𝔃𝔞-𝔷𝕒-𝕫𝖆-𝖟𝖺-𝗓𝗮-𝘇𝘢-𝘻𝙖-𝙯𝚊-𝚥𝛂-𝛚𝛜-𝛡𝛼-𝜔𝜖-𝜛𝜶-𝝎𝝐-𝝕𝝰-𝞈𝞊-𝞏𝞪-𝟂𝟄-𝟉𝟋][\w\']*`, NameFunction, nil}, - {`'?[_a-zµß-öø-ÿāăąćĉċčďđēĕėęěĝğġģĥħĩīĭįıijĵķ-ĸĺļľŀłńņň-ʼnŋōŏőœŕŗřśŝşšţťŧũūŭůűųŵŷźżž-ƀƃƅƈƌ-ƍƒƕƙ-ƛƞơƣƥƨƪ-ƫƭưƴƶƹ-ƺƽ-ƿdžljnjǎǐǒǔǖǘǚǜ-ǝǟǡǣǥǧǩǫǭǯ-ǰdzǵǹǻǽǿȁȃȅȇȉȋȍȏȑȓȕȗșțȝȟȡȣȥȧȩȫȭȯȱȳ-ȹȼȿ-ɀɂɇɉɋɍɏ-ʓʕ-ʯͱͳͷͻ-ͽΐά-ώϐ-ϑϕ-ϗϙϛϝϟϡϣϥϧϩϫϭϯ-ϳϵϸϻ-ϼа-џѡѣѥѧѩѫѭѯѱѳѵѷѹѻѽѿҁҋҍҏґғҕҗҙқҝҟҡңҥҧҩҫҭүұҳҵҷҹһҽҿӂӄӆӈӊӌӎ-ӏӑӓӕӗәӛӝӟӡӣӥӧөӫӭӯӱӳӵӷӹӻӽӿԁԃԅԇԉԋԍԏԑԓԕԗԙԛԝԟԡԣԥԧա-ևᴀ-ᴫᵫ-ᵷᵹ-ᶚḁḃḅḇḉḋḍḏḑḓḕḗḙḛḝḟḡḣḥḧḩḫḭḯḱḳḵḷḹḻḽḿṁṃṅṇṉṋṍṏṑṓṕṗṙṛṝṟṡṣṥṧṩṫṭṯṱṳṵṷṹṻṽṿẁẃẅẇẉẋẍẏẑẓẕ-ẝẟạảấầẩẫậắằẳẵặẹẻẽếềểễệỉịọỏốồổỗộớờởỡợụủứừửữựỳỵỷỹỻỽỿ-ἇἐ-ἕἠ-ἧἰ-ἷὀ-ὅὐ-ὗὠ-ὧὰ-ώᾀ-ᾇᾐ-ᾗᾠ-ᾧᾰ-ᾴᾶ-ᾷιῂ-ῄῆ-ῇῐ-ΐῖ-ῗῠ-ῧῲ-ῴῶ-ῷℊℎ-ℏℓℯℴℹℼ-ℽⅆ-ⅉⅎↄⰰ-ⱞⱡⱥ-ⱦⱨⱪⱬⱱⱳ-ⱴⱶ-ⱻⲁⲃⲅⲇⲉⲋⲍⲏⲑⲓⲕⲗⲙⲛⲝⲟⲡⲣⲥⲧⲩⲫⲭⲯⲱⲳⲵⲷⲹⲻⲽⲿⳁⳃⳅⳇⳉⳋⳍⳏⳑⳓⳕⳗⳙⳛⳝⳟⳡⳣ-ⳤⳬⳮⳳⴀ-ⴥⴧⴭꙁꙃꙅꙇꙉꙋꙍꙏꙑꙓꙕꙗꙙꙛꙝꙟꙡꙣꙥꙧꙩꙫꙭꚁꚃꚅꚇꚉꚋꚍꚏꚑꚓꚕꚗꜣꜥꜧꜩꜫꜭꜯ-ꜱꜳꜵꜷꜹꜻꜽꜿꝁꝃꝅꝇꝉꝋꝍꝏꝑꝓꝕꝗꝙꝛꝝꝟꝡꝣꝥꝧꝩꝫꝭꝯꝱ-ꝸꝺꝼꝿꞁꞃꞅꞇꞌꞎꞑꞓꞡꞣꞥꞧꞩꟺff-stﬓ-ﬗa-z𐐨-𐑏𝐚-𝐳𝑎-𝑔𝑖-𝑧𝒂-𝒛𝒶-𝒹𝒻𝒽-𝓃𝓅-𝓏𝓪-𝔃𝔞-𝔷𝕒-𝕫𝖆-𝖟𝖺-𝗓𝗮-𝘇𝘢-𝘻𝙖-𝙯𝚊-𝚥𝛂-𝛚𝛜-𝛡𝛼-𝜔𝜖-𝜛𝜶-𝝎𝝐-𝝕𝝰-𝞈𝞊-𝞏𝞪-𝟂𝟄-𝟉𝟋][\w']*`, Name, nil}, - {`('')?[A-ZÀ-ÖØ-ÞĀĂĄĆĈĊČĎĐĒĔĖĘĚĜĞĠĢĤĦĨĪĬĮİIJĴĶĹĻĽĿŁŃŅŇŊŌŎŐŒŔŖŘŚŜŞŠŢŤŦŨŪŬŮŰŲŴŶŸ-ŹŻŽƁ-ƂƄƆ-ƇƉ-ƋƎ-ƑƓ-ƔƖ-ƘƜ-ƝƟ-ƠƢƤƦ-ƧƩƬƮ-ƯƱ-ƳƵƷ-ƸƼDŽLJNJǍǏǑǓǕǗǙǛǞǠǢǤǦǨǪǬǮDZǴǶ-ǸǺǼǾȀȂȄȆȈȊȌȎȐȒȔȖȘȚȜȞȠȢȤȦȨȪȬȮȰȲȺ-ȻȽ-ȾɁɃ-ɆɈɊɌɎͰͲͶΆΈ-ΊΌΎ-ΏΑ-ΡΣ-ΫϏϒ-ϔϘϚϜϞϠϢϤϦϨϪϬϮϴϷϹ-ϺϽ-ЯѠѢѤѦѨѪѬѮѰѲѴѶѸѺѼѾҀҊҌҎҐҒҔҖҘҚҜҞҠҢҤҦҨҪҬҮҰҲҴҶҸҺҼҾӀ-ӁӃӅӇӉӋӍӐӒӔӖӘӚӜӞӠӢӤӦӨӪӬӮӰӲӴӶӸӺӼӾԀԂԄԆԈԊԌԎԐԒԔԖԘԚԜԞԠԢԤԦԱ-ՖႠ-ჅჇჍḀḂḄḆḈḊḌḎḐḒḔḖḘḚḜḞḠḢḤḦḨḪḬḮḰḲḴḶḸḺḼḾṀṂṄṆṈṊṌṎṐṒṔṖṘṚṜṞṠṢṤṦṨṪṬṮṰṲṴṶṸṺṼṾẀẂẄẆẈẊẌẎẐẒẔẞẠẢẤẦẨẪẬẮẰẲẴẶẸẺẼẾỀỂỄỆỈỊỌỎỐỒỔỖỘỚỜỞỠỢỤỦỨỪỬỮỰỲỴỶỸỺỼỾἈ-ἏἘ-ἝἨ-ἯἸ-ἿὈ-ὍὙὛὝὟὨ-ὯᾸ-ΆῈ-ΉῘ-ΊῨ-ῬῸ-Ώℂℇℋ-ℍℐ-ℒℕℙ-ℝℤΩℨK-ℭℰ-ℳℾ-ℿⅅↃⰀ-ⰮⱠⱢ-ⱤⱧⱩⱫⱭ-ⱰⱲⱵⱾ-ⲀⲂⲄⲆⲈⲊⲌⲎⲐⲒⲔⲖⲘⲚⲜⲞⲠⲢⲤⲦⲨⲪⲬⲮⲰⲲⲴⲶⲸⲺⲼⲾⳀⳂⳄⳆⳈⳊⳌⳎⳐⳒⳔⳖⳘⳚⳜⳞⳠⳢⳫⳭⳲꙀꙂꙄꙆꙈꙊꙌꙎꙐꙒꙔꙖꙘꙚꙜꙞꙠꙢꙤꙦꙨꙪꙬꚀꚂꚄꚆꚈꚊꚌꚎꚐꚒꚔꚖꜢꜤꜦꜨꜪꜬꜮꜲꜴꜶꜸꜺꜼꜾꝀꝂꝄꝆꝈꝊꝌꝎꝐꝒꝔꝖꝘꝚꝜꝞꝠꝢꝤꝦꝨꝪꝬꝮꝹꝻꝽ-ꝾꞀꞂꞄꞆꞋꞍꞐꞒꞠꞢꞤꞦꞨꞪA-Z𐐀-𐐧𝐀-𝐙𝐴-𝑍𝑨-𝒁𝒜𝒞-𝒟𝒢𝒥-𝒦𝒩-𝒬𝒮-𝒵𝓐-𝓩𝔄-𝔅𝔇-𝔊𝔍-𝔔𝔖-𝔜𝔸-𝔹𝔻-𝔾𝕀-𝕄𝕆𝕊-𝕐𝕬-𝖅𝖠-𝖹𝗔-𝗭𝘈-𝘡𝘼-𝙕𝙰-𝚉𝚨-𝛀𝛢-𝛺𝜜-𝜴𝝖-𝝮𝞐-𝞨𝟊][\w\']*`, KeywordType, nil}, - {`(')[A-ZÀ-ÖØ-ÞĀĂĄĆĈĊČĎĐĒĔĖĘĚĜĞĠĢĤĦĨĪĬĮİIJĴĶĹĻĽĿŁŃŅŇŊŌŎŐŒŔŖŘŚŜŞŠŢŤŦŨŪŬŮŰŲŴŶŸ-ŹŻŽƁ-ƂƄƆ-ƇƉ-ƋƎ-ƑƓ-ƔƖ-ƘƜ-ƝƟ-ƠƢƤƦ-ƧƩƬƮ-ƯƱ-ƳƵƷ-ƸƼDŽLJNJǍǏǑǓǕǗǙǛǞǠǢǤǦǨǪǬǮDZǴǶ-ǸǺǼǾȀȂȄȆȈȊȌȎȐȒȔȖȘȚȜȞȠȢȤȦȨȪȬȮȰȲȺ-ȻȽ-ȾɁɃ-ɆɈɊɌɎͰͲͶΆΈ-ΊΌΎ-ΏΑ-ΡΣ-ΫϏϒ-ϔϘϚϜϞϠϢϤϦϨϪϬϮϴϷϹ-ϺϽ-ЯѠѢѤѦѨѪѬѮѰѲѴѶѸѺѼѾҀҊҌҎҐҒҔҖҘҚҜҞҠҢҤҦҨҪҬҮҰҲҴҶҸҺҼҾӀ-ӁӃӅӇӉӋӍӐӒӔӖӘӚӜӞӠӢӤӦӨӪӬӮӰӲӴӶӸӺӼӾԀԂԄԆԈԊԌԎԐԒԔԖԘԚԜԞԠԢԤԦԱ-ՖႠ-ჅჇჍḀḂḄḆḈḊḌḎḐḒḔḖḘḚḜḞḠḢḤḦḨḪḬḮḰḲḴḶḸḺḼḾṀṂṄṆṈṊṌṎṐṒṔṖṘṚṜṞṠṢṤṦṨṪṬṮṰṲṴṶṸṺṼṾẀẂẄẆẈẊẌẎẐẒẔẞẠẢẤẦẨẪẬẮẰẲẴẶẸẺẼẾỀỂỄỆỈỊỌỎỐỒỔỖỘỚỜỞỠỢỤỦỨỪỬỮỰỲỴỶỸỺỼỾἈ-ἏἘ-ἝἨ-ἯἸ-ἿὈ-ὍὙὛὝὟὨ-ὯᾸ-ΆῈ-ΉῘ-ΊῨ-ῬῸ-Ώℂℇℋ-ℍℐ-ℒℕℙ-ℝℤΩℨK-ℭℰ-ℳℾ-ℿⅅↃⰀ-ⰮⱠⱢ-ⱤⱧⱩⱫⱭ-ⱰⱲⱵⱾ-ⲀⲂⲄⲆⲈⲊⲌⲎⲐⲒⲔⲖⲘⲚⲜⲞⲠⲢⲤⲦⲨⲪⲬⲮⲰⲲⲴⲶⲸⲺⲼⲾⳀⳂⳄⳆⳈⳊⳌⳎⳐⳒⳔⳖⳘⳚⳜⳞⳠⳢⳫⳭⳲꙀꙂꙄꙆꙈꙊꙌꙎꙐꙒꙔꙖꙘꙚꙜꙞꙠꙢꙤꙦꙨꙪꙬꚀꚂꚄꚆꚈꚊꚌꚎꚐꚒꚔꚖꜢꜤꜦꜨꜪꜬꜮꜲꜴꜶꜸꜺꜼꜾꝀꝂꝄꝆꝈꝊꝌꝎꝐꝒꝔꝖꝘꝚꝜꝞꝠꝢꝤꝦꝨꝪꝬꝮꝹꝻꝽ-ꝾꞀꞂꞄꞆꞋꞍꞐꞒꞠꞢꞤꞦꞨꞪA-Z𐐀-𐐧𝐀-𝐙𝐴-𝑍𝑨-𝒁𝒜𝒞-𝒟𝒢𝒥-𝒦𝒩-𝒬𝒮-𝒵𝓐-𝓩𝔄-𝔅𝔇-𝔊𝔍-𝔔𝔖-𝔜𝔸-𝔹𝔻-𝔾𝕀-𝕄𝕆𝕊-𝕐𝕬-𝖅𝖠-𝖹𝗔-𝗭𝘈-𝘡𝘼-𝙕𝙰-𝚉𝚨-𝛀𝛢-𝛺𝜜-𝜴𝝖-𝝮𝞐-𝞨𝟊][\w\']*`, KeywordType, nil}, - {`(')\[[^\]]*\]`, KeywordType, nil}, - {`(')\([^)]*\)`, KeywordType, nil}, - {`\\(?![:!#$%&*+.\\/<=>?@^|~-]+)`, NameFunction, nil}, - {`(<-|::|->|=>|=)(?![:!#$%&*+.\\/<=>?@^|~-]+)`, OperatorWord, nil}, - {`:[:!#$%&*+.\\/<=>?@^|~-]*`, KeywordType, nil}, - {`[:!#$%&*+.\\/<=>?@^|~-]+`, Operator, nil}, - {`\d+[eE][+-]?\d+`, LiteralNumberFloat, nil}, - {`\d+\.\d+([eE][+-]?\d+)?`, LiteralNumberFloat, nil}, - {`0[oO][0-7]+`, LiteralNumberOct, nil}, - {`0[xX][\da-fA-F]+`, LiteralNumberHex, nil}, - {`\d+`, LiteralNumberInteger, nil}, - {`'`, LiteralStringChar, Push("character")}, - {`"`, LiteralString, Push("string")}, - {`\[\]`, KeywordType, nil}, - {`\(\)`, NameBuiltin, nil}, - {"[][(),;`{}]", Punctuation, nil}, - }, - "import": { - {`\s+`, Text, nil}, - {`"`, LiteralString, Push("string")}, - {`\)`, Punctuation, Pop(1)}, - {`qualified\b`, Keyword, nil}, - {`([A-ZÀ-ÖØ-ÞĀĂĄĆĈĊČĎĐĒĔĖĘĚĜĞĠĢĤĦĨĪĬĮİIJĴĶĹĻĽĿŁŃŅŇŊŌŎŐŒŔŖŘŚŜŞŠŢŤŦŨŪŬŮŰŲŴŶŸ-ŹŻŽƁ-ƂƄƆ-ƇƉ-ƋƎ-ƑƓ-ƔƖ-ƘƜ-ƝƟ-ƠƢƤƦ-ƧƩƬƮ-ƯƱ-ƳƵƷ-ƸƼDŽLJNJǍǏǑǓǕǗǙǛǞǠǢǤǦǨǪǬǮDZǴǶ-ǸǺǼǾȀȂȄȆȈȊȌȎȐȒȔȖȘȚȜȞȠȢȤȦȨȪȬȮȰȲȺ-ȻȽ-ȾɁɃ-ɆɈɊɌɎͰͲͶΆΈ-ΊΌΎ-ΏΑ-ΡΣ-ΫϏϒ-ϔϘϚϜϞϠϢϤϦϨϪϬϮϴϷϹ-ϺϽ-ЯѠѢѤѦѨѪѬѮѰѲѴѶѸѺѼѾҀҊҌҎҐҒҔҖҘҚҜҞҠҢҤҦҨҪҬҮҰҲҴҶҸҺҼҾӀ-ӁӃӅӇӉӋӍӐӒӔӖӘӚӜӞӠӢӤӦӨӪӬӮӰӲӴӶӸӺӼӾԀԂԄԆԈԊԌԎԐԒԔԖԘԚԜԞԠԢԤԦԱ-ՖႠ-ჅჇჍḀḂḄḆḈḊḌḎḐḒḔḖḘḚḜḞḠḢḤḦḨḪḬḮḰḲḴḶḸḺḼḾṀṂṄṆṈṊṌṎṐṒṔṖṘṚṜṞṠṢṤṦṨṪṬṮṰṲṴṶṸṺṼṾẀẂẄẆẈẊẌẎẐẒẔẞẠẢẤẦẨẪẬẮẰẲẴẶẸẺẼẾỀỂỄỆỈỊỌỎỐỒỔỖỘỚỜỞỠỢỤỦỨỪỬỮỰỲỴỶỸỺỼỾἈ-ἏἘ-ἝἨ-ἯἸ-ἿὈ-ὍὙὛὝὟὨ-ὯᾸ-ΆῈ-ΉῘ-ΊῨ-ῬῸ-Ώℂℇℋ-ℍℐ-ℒℕℙ-ℝℤΩℨK-ℭℰ-ℳℾ-ℿⅅↃⰀ-ⰮⱠⱢ-ⱤⱧⱩⱫⱭ-ⱰⱲⱵⱾ-ⲀⲂⲄⲆⲈⲊⲌⲎⲐⲒⲔⲖⲘⲚⲜⲞⲠⲢⲤⲦⲨⲪⲬⲮⲰⲲⲴⲶⲸⲺⲼⲾⳀⳂⳄⳆⳈⳊⳌⳎⳐⳒⳔⳖⳘⳚⳜⳞⳠⳢⳫⳭⳲꙀꙂꙄꙆꙈꙊꙌꙎꙐꙒꙔꙖꙘꙚꙜꙞꙠꙢꙤꙦꙨꙪꙬꚀꚂꚄꚆꚈꚊꚌꚎꚐꚒꚔꚖꜢꜤꜦꜨꜪꜬꜮꜲꜴꜶꜸꜺꜼꜾꝀꝂꝄꝆꝈꝊꝌꝎꝐꝒꝔꝖꝘꝚꝜꝞꝠꝢꝤꝦꝨꝪꝬꝮꝹꝻꝽ-ꝾꞀꞂꞄꞆꞋꞍꞐꞒꞠꞢꞤꞦꞨꞪA-Z𐐀-𐐧𝐀-𝐙𝐴-𝑍𝑨-𝒁𝒜𝒞-𝒟𝒢𝒥-𝒦𝒩-𝒬𝒮-𝒵𝓐-𝓩𝔄-𝔅𝔇-𝔊𝔍-𝔔𝔖-𝔜𝔸-𝔹𝔻-𝔾𝕀-𝕄𝕆𝕊-𝕐𝕬-𝖅𝖠-𝖹𝗔-𝗭𝘈-𝘡𝘼-𝙕𝙰-𝚉𝚨-𝛀𝛢-𝛺𝜜-𝜴𝝖-𝝮𝞐-𝞨𝟊][\w.]*)(\s+)(as)(\s+)([A-ZÀ-ÖØ-ÞĀĂĄĆĈĊČĎĐĒĔĖĘĚĜĞĠĢĤĦĨĪĬĮİIJĴĶĹĻĽĿŁŃŅŇŊŌŎŐŒŔŖŘŚŜŞŠŢŤŦŨŪŬŮŰŲŴŶŸ-ŹŻŽƁ-ƂƄƆ-ƇƉ-ƋƎ-ƑƓ-ƔƖ-ƘƜ-ƝƟ-ƠƢƤƦ-ƧƩƬƮ-ƯƱ-ƳƵƷ-ƸƼDŽLJNJǍǏǑǓǕǗǙǛǞǠǢǤǦǨǪǬǮDZǴǶ-ǸǺǼǾȀȂȄȆȈȊȌȎȐȒȔȖȘȚȜȞȠȢȤȦȨȪȬȮȰȲȺ-ȻȽ-ȾɁɃ-ɆɈɊɌɎͰͲͶΆΈ-ΊΌΎ-ΏΑ-ΡΣ-ΫϏϒ-ϔϘϚϜϞϠϢϤϦϨϪϬϮϴϷϹ-ϺϽ-ЯѠѢѤѦѨѪѬѮѰѲѴѶѸѺѼѾҀҊҌҎҐҒҔҖҘҚҜҞҠҢҤҦҨҪҬҮҰҲҴҶҸҺҼҾӀ-ӁӃӅӇӉӋӍӐӒӔӖӘӚӜӞӠӢӤӦӨӪӬӮӰӲӴӶӸӺӼӾԀԂԄԆԈԊԌԎԐԒԔԖԘԚԜԞԠԢԤԦԱ-ՖႠ-ჅჇჍḀḂḄḆḈḊḌḎḐḒḔḖḘḚḜḞḠḢḤḦḨḪḬḮḰḲḴḶḸḺḼḾṀṂṄṆṈṊṌṎṐṒṔṖṘṚṜṞṠṢṤṦṨṪṬṮṰṲṴṶṸṺṼṾẀẂẄẆẈẊẌẎẐẒẔẞẠẢẤẦẨẪẬẮẰẲẴẶẸẺẼẾỀỂỄỆỈỊỌỎỐỒỔỖỘỚỜỞỠỢỤỦỨỪỬỮỰỲỴỶỸỺỼỾἈ-ἏἘ-ἝἨ-ἯἸ-ἿὈ-ὍὙὛὝὟὨ-ὯᾸ-ΆῈ-ΉῘ-ΊῨ-ῬῸ-Ώℂℇℋ-ℍℐ-ℒℕℙ-ℝℤΩℨK-ℭℰ-ℳℾ-ℿⅅↃⰀ-ⰮⱠⱢ-ⱤⱧⱩⱫⱭ-ⱰⱲⱵⱾ-ⲀⲂⲄⲆⲈⲊⲌⲎⲐⲒⲔⲖⲘⲚⲜⲞⲠⲢⲤⲦⲨⲪⲬⲮⲰⲲⲴⲶⲸⲺⲼⲾⳀⳂⳄⳆⳈⳊⳌⳎⳐⳒⳔⳖⳘⳚⳜⳞⳠⳢⳫⳭⳲꙀꙂꙄꙆꙈꙊꙌꙎꙐꙒꙔꙖꙘꙚꙜꙞꙠꙢꙤꙦꙨꙪꙬꚀꚂꚄꚆꚈꚊꚌꚎꚐꚒꚔꚖꜢꜤꜦꜨꜪꜬꜮꜲꜴꜶꜸꜺꜼꜾꝀꝂꝄꝆꝈꝊꝌꝎꝐꝒꝔꝖꝘꝚꝜꝞꝠꝢꝤꝦꝨꝪꝬꝮꝹꝻꝽ-ꝾꞀꞂꞄꞆꞋꞍꞐꞒꞠꞢꞤꞦꞨꞪA-Z𐐀-𐐧𝐀-𝐙𝐴-𝑍𝑨-𝒁𝒜𝒞-𝒟𝒢𝒥-𝒦𝒩-𝒬𝒮-𝒵𝓐-𝓩𝔄-𝔅𝔇-𝔊𝔍-𝔔𝔖-𝔜𝔸-𝔹𝔻-𝔾𝕀-𝕄𝕆𝕊-𝕐𝕬-𝖅𝖠-𝖹𝗔-𝗭𝘈-𝘡𝘼-𝙕𝙰-𝚉𝚨-𝛀𝛢-𝛺𝜜-𝜴𝝖-𝝮𝞐-𝞨𝟊][\w.]*)`, ByGroups(NameNamespace, Text, Keyword, Text, Name), Pop(1)}, - {`([A-ZÀ-ÖØ-ÞĀĂĄĆĈĊČĎĐĒĔĖĘĚĜĞĠĢĤĦĨĪĬĮİIJĴĶĹĻĽĿŁŃŅŇŊŌŎŐŒŔŖŘŚŜŞŠŢŤŦŨŪŬŮŰŲŴŶŸ-ŹŻŽƁ-ƂƄƆ-ƇƉ-ƋƎ-ƑƓ-ƔƖ-ƘƜ-ƝƟ-ƠƢƤƦ-ƧƩƬƮ-ƯƱ-ƳƵƷ-ƸƼDŽLJNJǍǏǑǓǕǗǙǛǞǠǢǤǦǨǪǬǮDZǴǶ-ǸǺǼǾȀȂȄȆȈȊȌȎȐȒȔȖȘȚȜȞȠȢȤȦȨȪȬȮȰȲȺ-ȻȽ-ȾɁɃ-ɆɈɊɌɎͰͲͶΆΈ-ΊΌΎ-ΏΑ-ΡΣ-ΫϏϒ-ϔϘϚϜϞϠϢϤϦϨϪϬϮϴϷϹ-ϺϽ-ЯѠѢѤѦѨѪѬѮѰѲѴѶѸѺѼѾҀҊҌҎҐҒҔҖҘҚҜҞҠҢҤҦҨҪҬҮҰҲҴҶҸҺҼҾӀ-ӁӃӅӇӉӋӍӐӒӔӖӘӚӜӞӠӢӤӦӨӪӬӮӰӲӴӶӸӺӼӾԀԂԄԆԈԊԌԎԐԒԔԖԘԚԜԞԠԢԤԦԱ-ՖႠ-ჅჇჍḀḂḄḆḈḊḌḎḐḒḔḖḘḚḜḞḠḢḤḦḨḪḬḮḰḲḴḶḸḺḼḾṀṂṄṆṈṊṌṎṐṒṔṖṘṚṜṞṠṢṤṦṨṪṬṮṰṲṴṶṸṺṼṾẀẂẄẆẈẊẌẎẐẒẔẞẠẢẤẦẨẪẬẮẰẲẴẶẸẺẼẾỀỂỄỆỈỊỌỎỐỒỔỖỘỚỜỞỠỢỤỦỨỪỬỮỰỲỴỶỸỺỼỾἈ-ἏἘ-ἝἨ-ἯἸ-ἿὈ-ὍὙὛὝὟὨ-ὯᾸ-ΆῈ-ΉῘ-ΊῨ-ῬῸ-Ώℂℇℋ-ℍℐ-ℒℕℙ-ℝℤΩℨK-ℭℰ-ℳℾ-ℿⅅↃⰀ-ⰮⱠⱢ-ⱤⱧⱩⱫⱭ-ⱰⱲⱵⱾ-ⲀⲂⲄⲆⲈⲊⲌⲎⲐⲒⲔⲖⲘⲚⲜⲞⲠⲢⲤⲦⲨⲪⲬⲮⲰⲲⲴⲶⲸⲺⲼⲾⳀⳂⳄⳆⳈⳊⳌⳎⳐⳒⳔⳖⳘⳚⳜⳞⳠⳢⳫⳭⳲꙀꙂꙄꙆꙈꙊꙌꙎꙐꙒꙔꙖꙘꙚꙜꙞꙠꙢꙤꙦꙨꙪꙬꚀꚂꚄꚆꚈꚊꚌꚎꚐꚒꚔꚖꜢꜤꜦꜨꜪꜬꜮꜲꜴꜶꜸꜺꜼꜾꝀꝂꝄꝆꝈꝊꝌꝎꝐꝒꝔꝖꝘꝚꝜꝞꝠꝢꝤꝦꝨꝪꝬꝮꝹꝻꝽ-ꝾꞀꞂꞄꞆꞋꞍꞐꞒꞠꞢꞤꞦꞨꞪA-Z𐐀-𐐧𝐀-𝐙𝐴-𝑍𝑨-𝒁𝒜𝒞-𝒟𝒢𝒥-𝒦𝒩-𝒬𝒮-𝒵𝓐-𝓩𝔄-𝔅𝔇-𝔊𝔍-𝔔𝔖-𝔜𝔸-𝔹𝔻-𝔾𝕀-𝕄𝕆𝕊-𝕐𝕬-𝖅𝖠-𝖹𝗔-𝗭𝘈-𝘡𝘼-𝙕𝙰-𝚉𝚨-𝛀𝛢-𝛺𝜜-𝜴𝝖-𝝮𝞐-𝞨𝟊][\w.]*)(\s+)(hiding)(\s+)(\()`, ByGroups(NameNamespace, Text, Keyword, Text, Punctuation), Push("funclist")}, - {`([A-ZÀ-ÖØ-ÞĀĂĄĆĈĊČĎĐĒĔĖĘĚĜĞĠĢĤĦĨĪĬĮİIJĴĶĹĻĽĿŁŃŅŇŊŌŎŐŒŔŖŘŚŜŞŠŢŤŦŨŪŬŮŰŲŴŶŸ-ŹŻŽƁ-ƂƄƆ-ƇƉ-ƋƎ-ƑƓ-ƔƖ-ƘƜ-ƝƟ-ƠƢƤƦ-ƧƩƬƮ-ƯƱ-ƳƵƷ-ƸƼDŽLJNJǍǏǑǓǕǗǙǛǞǠǢǤǦǨǪǬǮDZǴǶ-ǸǺǼǾȀȂȄȆȈȊȌȎȐȒȔȖȘȚȜȞȠȢȤȦȨȪȬȮȰȲȺ-ȻȽ-ȾɁɃ-ɆɈɊɌɎͰͲͶΆΈ-ΊΌΎ-ΏΑ-ΡΣ-ΫϏϒ-ϔϘϚϜϞϠϢϤϦϨϪϬϮϴϷϹ-ϺϽ-ЯѠѢѤѦѨѪѬѮѰѲѴѶѸѺѼѾҀҊҌҎҐҒҔҖҘҚҜҞҠҢҤҦҨҪҬҮҰҲҴҶҸҺҼҾӀ-ӁӃӅӇӉӋӍӐӒӔӖӘӚӜӞӠӢӤӦӨӪӬӮӰӲӴӶӸӺӼӾԀԂԄԆԈԊԌԎԐԒԔԖԘԚԜԞԠԢԤԦԱ-ՖႠ-ჅჇჍḀḂḄḆḈḊḌḎḐḒḔḖḘḚḜḞḠḢḤḦḨḪḬḮḰḲḴḶḸḺḼḾṀṂṄṆṈṊṌṎṐṒṔṖṘṚṜṞṠṢṤṦṨṪṬṮṰṲṴṶṸṺṼṾẀẂẄẆẈẊẌẎẐẒẔẞẠẢẤẦẨẪẬẮẰẲẴẶẸẺẼẾỀỂỄỆỈỊỌỎỐỒỔỖỘỚỜỞỠỢỤỦỨỪỬỮỰỲỴỶỸỺỼỾἈ-ἏἘ-ἝἨ-ἯἸ-ἿὈ-ὍὙὛὝὟὨ-ὯᾸ-ΆῈ-ΉῘ-ΊῨ-ῬῸ-Ώℂℇℋ-ℍℐ-ℒℕℙ-ℝℤΩℨK-ℭℰ-ℳℾ-ℿⅅↃⰀ-ⰮⱠⱢ-ⱤⱧⱩⱫⱭ-ⱰⱲⱵⱾ-ⲀⲂⲄⲆⲈⲊⲌⲎⲐⲒⲔⲖⲘⲚⲜⲞⲠⲢⲤⲦⲨⲪⲬⲮⲰⲲⲴⲶⲸⲺⲼⲾⳀⳂⳄⳆⳈⳊⳌⳎⳐⳒⳔⳖⳘⳚⳜⳞⳠⳢⳫⳭⳲꙀꙂꙄꙆꙈꙊꙌꙎꙐꙒꙔꙖꙘꙚꙜꙞꙠꙢꙤꙦꙨꙪꙬꚀꚂꚄꚆꚈꚊꚌꚎꚐꚒꚔꚖꜢꜤꜦꜨꜪꜬꜮꜲꜴꜶꜸꜺꜼꜾꝀꝂꝄꝆꝈꝊꝌꝎꝐꝒꝔꝖꝘꝚꝜꝞꝠꝢꝤꝦꝨꝪꝬꝮꝹꝻꝽ-ꝾꞀꞂꞄꞆꞋꞍꞐꞒꞠꞢꞤꞦꞨꞪA-Z𐐀-𐐧𝐀-𝐙𝐴-𝑍𝑨-𝒁𝒜𝒞-𝒟𝒢𝒥-𝒦𝒩-𝒬𝒮-𝒵𝓐-𝓩𝔄-𝔅𝔇-𝔊𝔍-𝔔𝔖-𝔜𝔸-𝔹𝔻-𝔾𝕀-𝕄𝕆𝕊-𝕐𝕬-𝖅𝖠-𝖹𝗔-𝗭𝘈-𝘡𝘼-𝙕𝙰-𝚉𝚨-𝛀𝛢-𝛺𝜜-𝜴𝝖-𝝮𝞐-𝞨𝟊][\w.]*)(\s+)(\()`, ByGroups(NameNamespace, Text, Punctuation), Push("funclist")}, - {`[\w.]+`, NameNamespace, Pop(1)}, - }, - "module": { - {`\s+`, Text, nil}, - {`([A-ZÀ-ÖØ-ÞĀĂĄĆĈĊČĎĐĒĔĖĘĚĜĞĠĢĤĦĨĪĬĮİIJĴĶĹĻĽĿŁŃŅŇŊŌŎŐŒŔŖŘŚŜŞŠŢŤŦŨŪŬŮŰŲŴŶŸ-ŹŻŽƁ-ƂƄƆ-ƇƉ-ƋƎ-ƑƓ-ƔƖ-ƘƜ-ƝƟ-ƠƢƤƦ-ƧƩƬƮ-ƯƱ-ƳƵƷ-ƸƼDŽLJNJǍǏǑǓǕǗǙǛǞǠǢǤǦǨǪǬǮDZǴǶ-ǸǺǼǾȀȂȄȆȈȊȌȎȐȒȔȖȘȚȜȞȠȢȤȦȨȪȬȮȰȲȺ-ȻȽ-ȾɁɃ-ɆɈɊɌɎͰͲͶΆΈ-ΊΌΎ-ΏΑ-ΡΣ-ΫϏϒ-ϔϘϚϜϞϠϢϤϦϨϪϬϮϴϷϹ-ϺϽ-ЯѠѢѤѦѨѪѬѮѰѲѴѶѸѺѼѾҀҊҌҎҐҒҔҖҘҚҜҞҠҢҤҦҨҪҬҮҰҲҴҶҸҺҼҾӀ-ӁӃӅӇӉӋӍӐӒӔӖӘӚӜӞӠӢӤӦӨӪӬӮӰӲӴӶӸӺӼӾԀԂԄԆԈԊԌԎԐԒԔԖԘԚԜԞԠԢԤԦԱ-ՖႠ-ჅჇჍḀḂḄḆḈḊḌḎḐḒḔḖḘḚḜḞḠḢḤḦḨḪḬḮḰḲḴḶḸḺḼḾṀṂṄṆṈṊṌṎṐṒṔṖṘṚṜṞṠṢṤṦṨṪṬṮṰṲṴṶṸṺṼṾẀẂẄẆẈẊẌẎẐẒẔẞẠẢẤẦẨẪẬẮẰẲẴẶẸẺẼẾỀỂỄỆỈỊỌỎỐỒỔỖỘỚỜỞỠỢỤỦỨỪỬỮỰỲỴỶỸỺỼỾἈ-ἏἘ-ἝἨ-ἯἸ-ἿὈ-ὍὙὛὝὟὨ-ὯᾸ-ΆῈ-ΉῘ-ΊῨ-ῬῸ-Ώℂℇℋ-ℍℐ-ℒℕℙ-ℝℤΩℨK-ℭℰ-ℳℾ-ℿⅅↃⰀ-ⰮⱠⱢ-ⱤⱧⱩⱫⱭ-ⱰⱲⱵⱾ-ⲀⲂⲄⲆⲈⲊⲌⲎⲐⲒⲔⲖⲘⲚⲜⲞⲠⲢⲤⲦⲨⲪⲬⲮⲰⲲⲴⲶⲸⲺⲼⲾⳀⳂⳄⳆⳈⳊⳌⳎⳐⳒⳔⳖⳘⳚⳜⳞⳠⳢⳫⳭⳲꙀꙂꙄꙆꙈꙊꙌꙎꙐꙒꙔꙖꙘꙚꙜꙞꙠꙢꙤꙦꙨꙪꙬꚀꚂꚄꚆꚈꚊꚌꚎꚐꚒꚔꚖꜢꜤꜦꜨꜪꜬꜮꜲꜴꜶꜸꜺꜼꜾꝀꝂꝄꝆꝈꝊꝌꝎꝐꝒꝔꝖꝘꝚꝜꝞꝠꝢꝤꝦꝨꝪꝬꝮꝹꝻꝽ-ꝾꞀꞂꞄꞆꞋꞍꞐꞒꞠꞢꞤꞦꞨꞪA-Z𐐀-𐐧𝐀-𝐙𝐴-𝑍𝑨-𝒁𝒜𝒞-𝒟𝒢𝒥-𝒦𝒩-𝒬𝒮-𝒵𝓐-𝓩𝔄-𝔅𝔇-𝔊𝔍-𝔔𝔖-𝔜𝔸-𝔹𝔻-𝔾𝕀-𝕄𝕆𝕊-𝕐𝕬-𝖅𝖠-𝖹𝗔-𝗭𝘈-𝘡𝘼-𝙕𝙰-𝚉𝚨-𝛀𝛢-𝛺𝜜-𝜴𝝖-𝝮𝞐-𝞨𝟊][\w.]*)(\s+)(\()`, ByGroups(NameNamespace, Text, Punctuation), Push("funclist")}, - {`[A-ZÀ-ÖØ-ÞĀĂĄĆĈĊČĎĐĒĔĖĘĚĜĞĠĢĤĦĨĪĬĮİIJĴĶĹĻĽĿŁŃŅŇŊŌŎŐŒŔŖŘŚŜŞŠŢŤŦŨŪŬŮŰŲŴŶŸ-ŹŻŽƁ-ƂƄƆ-ƇƉ-ƋƎ-ƑƓ-ƔƖ-ƘƜ-ƝƟ-ƠƢƤƦ-ƧƩƬƮ-ƯƱ-ƳƵƷ-ƸƼDŽLJNJǍǏǑǓǕǗǙǛǞǠǢǤǦǨǪǬǮDZǴǶ-ǸǺǼǾȀȂȄȆȈȊȌȎȐȒȔȖȘȚȜȞȠȢȤȦȨȪȬȮȰȲȺ-ȻȽ-ȾɁɃ-ɆɈɊɌɎͰͲͶΆΈ-ΊΌΎ-ΏΑ-ΡΣ-ΫϏϒ-ϔϘϚϜϞϠϢϤϦϨϪϬϮϴϷϹ-ϺϽ-ЯѠѢѤѦѨѪѬѮѰѲѴѶѸѺѼѾҀҊҌҎҐҒҔҖҘҚҜҞҠҢҤҦҨҪҬҮҰҲҴҶҸҺҼҾӀ-ӁӃӅӇӉӋӍӐӒӔӖӘӚӜӞӠӢӤӦӨӪӬӮӰӲӴӶӸӺӼӾԀԂԄԆԈԊԌԎԐԒԔԖԘԚԜԞԠԢԤԦԱ-ՖႠ-ჅჇჍḀḂḄḆḈḊḌḎḐḒḔḖḘḚḜḞḠḢḤḦḨḪḬḮḰḲḴḶḸḺḼḾṀṂṄṆṈṊṌṎṐṒṔṖṘṚṜṞṠṢṤṦṨṪṬṮṰṲṴṶṸṺṼṾẀẂẄẆẈẊẌẎẐẒẔẞẠẢẤẦẨẪẬẮẰẲẴẶẸẺẼẾỀỂỄỆỈỊỌỎỐỒỔỖỘỚỜỞỠỢỤỦỨỪỬỮỰỲỴỶỸỺỼỾἈ-ἏἘ-ἝἨ-ἯἸ-ἿὈ-ὍὙὛὝὟὨ-ὯᾸ-ΆῈ-ΉῘ-ΊῨ-ῬῸ-Ώℂℇℋ-ℍℐ-ℒℕℙ-ℝℤΩℨK-ℭℰ-ℳℾ-ℿⅅↃⰀ-ⰮⱠⱢ-ⱤⱧⱩⱫⱭ-ⱰⱲⱵⱾ-ⲀⲂⲄⲆⲈⲊⲌⲎⲐⲒⲔⲖⲘⲚⲜⲞⲠⲢⲤⲦⲨⲪⲬⲮⲰⲲⲴⲶⲸⲺⲼⲾⳀⳂⳄⳆⳈⳊⳌⳎⳐⳒⳔⳖⳘⳚⳜⳞⳠⳢⳫⳭⳲꙀꙂꙄꙆꙈꙊꙌꙎꙐꙒꙔꙖꙘꙚꙜꙞꙠꙢꙤꙦꙨꙪꙬꚀꚂꚄꚆꚈꚊꚌꚎꚐꚒꚔꚖꜢꜤꜦꜨꜪꜬꜮꜲꜴꜶꜸꜺꜼꜾꝀꝂꝄꝆꝈꝊꝌꝎꝐꝒꝔꝖꝘꝚꝜꝞꝠꝢꝤꝦꝨꝪꝬꝮꝹꝻꝽ-ꝾꞀꞂꞄꞆꞋꞍꞐꞒꞠꞢꞤꞦꞨꞪA-Z𐐀-𐐧𝐀-𝐙𝐴-𝑍𝑨-𝒁𝒜𝒞-𝒟𝒢𝒥-𝒦𝒩-𝒬𝒮-𝒵𝓐-𝓩𝔄-𝔅𝔇-𝔊𝔍-𝔔𝔖-𝔜𝔸-𝔹𝔻-𝔾𝕀-𝕄𝕆𝕊-𝕐𝕬-𝖅𝖠-𝖹𝗔-𝗭𝘈-𝘡𝘼-𝙕𝙰-𝚉𝚨-𝛀𝛢-𝛺𝜜-𝜴𝝖-𝝮𝞐-𝞨𝟊][\w.]*`, NameNamespace, Pop(1)}, - }, - "funclist": { - {`\s+`, Text, nil}, - {`[A-ZÀ-ÖØ-ÞĀĂĄĆĈĊČĎĐĒĔĖĘĚĜĞĠĢĤĦĨĪĬĮİIJĴĶĹĻĽĿŁŃŅŇŊŌŎŐŒŔŖŘŚŜŞŠŢŤŦŨŪŬŮŰŲŴŶŸ-ŹŻŽƁ-ƂƄƆ-ƇƉ-ƋƎ-ƑƓ-ƔƖ-ƘƜ-ƝƟ-ƠƢƤƦ-ƧƩƬƮ-ƯƱ-ƳƵƷ-ƸƼDŽLJNJǍǏǑǓǕǗǙǛǞǠǢǤǦǨǪǬǮDZǴǶ-ǸǺǼǾȀȂȄȆȈȊȌȎȐȒȔȖȘȚȜȞȠȢȤȦȨȪȬȮȰȲȺ-ȻȽ-ȾɁɃ-ɆɈɊɌɎͰͲͶΆΈ-ΊΌΎ-ΏΑ-ΡΣ-ΫϏϒ-ϔϘϚϜϞϠϢϤϦϨϪϬϮϴϷϹ-ϺϽ-ЯѠѢѤѦѨѪѬѮѰѲѴѶѸѺѼѾҀҊҌҎҐҒҔҖҘҚҜҞҠҢҤҦҨҪҬҮҰҲҴҶҸҺҼҾӀ-ӁӃӅӇӉӋӍӐӒӔӖӘӚӜӞӠӢӤӦӨӪӬӮӰӲӴӶӸӺӼӾԀԂԄԆԈԊԌԎԐԒԔԖԘԚԜԞԠԢԤԦԱ-ՖႠ-ჅჇჍḀḂḄḆḈḊḌḎḐḒḔḖḘḚḜḞḠḢḤḦḨḪḬḮḰḲḴḶḸḺḼḾṀṂṄṆṈṊṌṎṐṒṔṖṘṚṜṞṠṢṤṦṨṪṬṮṰṲṴṶṸṺṼṾẀẂẄẆẈẊẌẎẐẒẔẞẠẢẤẦẨẪẬẮẰẲẴẶẸẺẼẾỀỂỄỆỈỊỌỎỐỒỔỖỘỚỜỞỠỢỤỦỨỪỬỮỰỲỴỶỸỺỼỾἈ-ἏἘ-ἝἨ-ἯἸ-ἿὈ-ὍὙὛὝὟὨ-ὯᾸ-ΆῈ-ΉῘ-ΊῨ-ῬῸ-Ώℂℇℋ-ℍℐ-ℒℕℙ-ℝℤΩℨK-ℭℰ-ℳℾ-ℿⅅↃⰀ-ⰮⱠⱢ-ⱤⱧⱩⱫⱭ-ⱰⱲⱵⱾ-ⲀⲂⲄⲆⲈⲊⲌⲎⲐⲒⲔⲖⲘⲚⲜⲞⲠⲢⲤⲦⲨⲪⲬⲮⲰⲲⲴⲶⲸⲺⲼⲾⳀⳂⳄⳆⳈⳊⳌⳎⳐⳒⳔⳖⳘⳚⳜⳞⳠⳢⳫⳭⳲꙀꙂꙄꙆꙈꙊꙌꙎꙐꙒꙔꙖꙘꙚꙜꙞꙠꙢꙤꙦꙨꙪꙬꚀꚂꚄꚆꚈꚊꚌꚎꚐꚒꚔꚖꜢꜤꜦꜨꜪꜬꜮꜲꜴꜶꜸꜺꜼꜾꝀꝂꝄꝆꝈꝊꝌꝎꝐꝒꝔꝖꝘꝚꝜꝞꝠꝢꝤꝦꝨꝪꝬꝮꝹꝻꝽ-ꝾꞀꞂꞄꞆꞋꞍꞐꞒꞠꞢꞤꞦꞨꞪA-Z𐐀-𐐧𝐀-𝐙𝐴-𝑍𝑨-𝒁𝒜𝒞-𝒟𝒢𝒥-𝒦𝒩-𝒬𝒮-𝒵𝓐-𝓩𝔄-𝔅𝔇-𝔊𝔍-𝔔𝔖-𝔜𝔸-𝔹𝔻-𝔾𝕀-𝕄𝕆𝕊-𝕐𝕬-𝖅𝖠-𝖹𝗔-𝗭𝘈-𝘡𝘼-𝙕𝙰-𝚉𝚨-𝛀𝛢-𝛺𝜜-𝜴𝝖-𝝮𝞐-𝞨𝟊]\w*`, KeywordType, nil}, - {`(_[\w\']+|[a-zµß-öø-ÿāăąćĉċčďđēĕėęěĝğġģĥħĩīĭįıijĵķ-ĸĺļľŀłńņň-ʼnŋōŏőœŕŗřśŝşšţťŧũūŭůűųŵŷźżž-ƀƃƅƈƌ-ƍƒƕƙ-ƛƞơƣƥƨƪ-ƫƭưƴƶƹ-ƺƽ-ƿdžljnjǎǐǒǔǖǘǚǜ-ǝǟǡǣǥǧǩǫǭǯ-ǰdzǵǹǻǽǿȁȃȅȇȉȋȍȏȑȓȕȗșțȝȟȡȣȥȧȩȫȭȯȱȳ-ȹȼȿ-ɀɂɇɉɋɍɏ-ʓʕ-ʯͱͳͷͻ-ͽΐά-ώϐ-ϑϕ-ϗϙϛϝϟϡϣϥϧϩϫϭϯ-ϳϵϸϻ-ϼа-џѡѣѥѧѩѫѭѯѱѳѵѷѹѻѽѿҁҋҍҏґғҕҗҙқҝҟҡңҥҧҩҫҭүұҳҵҷҹһҽҿӂӄӆӈӊӌӎ-ӏӑӓӕӗәӛӝӟӡӣӥӧөӫӭӯӱӳӵӷӹӻӽӿԁԃԅԇԉԋԍԏԑԓԕԗԙԛԝԟԡԣԥԧա-ևᴀ-ᴫᵫ-ᵷᵹ-ᶚḁḃḅḇḉḋḍḏḑḓḕḗḙḛḝḟḡḣḥḧḩḫḭḯḱḳḵḷḹḻḽḿṁṃṅṇṉṋṍṏṑṓṕṗṙṛṝṟṡṣṥṧṩṫṭṯṱṳṵṷṹṻṽṿẁẃẅẇẉẋẍẏẑẓẕ-ẝẟạảấầẩẫậắằẳẵặẹẻẽếềểễệỉịọỏốồổỗộớờởỡợụủứừửữựỳỵỷỹỻỽỿ-ἇἐ-ἕἠ-ἧἰ-ἷὀ-ὅὐ-ὗὠ-ὧὰ-ώᾀ-ᾇᾐ-ᾗᾠ-ᾧᾰ-ᾴᾶ-ᾷιῂ-ῄῆ-ῇῐ-ΐῖ-ῗῠ-ῧῲ-ῴῶ-ῷℊℎ-ℏℓℯℴℹℼ-ℽⅆ-ⅉⅎↄⰰ-ⱞⱡⱥ-ⱦⱨⱪⱬⱱⱳ-ⱴⱶ-ⱻⲁⲃⲅⲇⲉⲋⲍⲏⲑⲓⲕⲗⲙⲛⲝⲟⲡⲣⲥⲧⲩⲫⲭⲯⲱⲳⲵⲷⲹⲻⲽⲿⳁⳃⳅⳇⳉⳋⳍⳏⳑⳓⳕⳗⳙⳛⳝⳟⳡⳣ-ⳤⳬⳮⳳⴀ-ⴥⴧⴭꙁꙃꙅꙇꙉꙋꙍꙏꙑꙓꙕꙗꙙꙛꙝꙟꙡꙣꙥꙧꙩꙫꙭꚁꚃꚅꚇꚉꚋꚍꚏꚑꚓꚕꚗꜣꜥꜧꜩꜫꜭꜯ-ꜱꜳꜵꜷꜹꜻꜽꜿꝁꝃꝅꝇꝉꝋꝍꝏꝑꝓꝕꝗꝙꝛꝝꝟꝡꝣꝥꝧꝩꝫꝭꝯꝱ-ꝸꝺꝼꝿꞁꞃꞅꞇꞌꞎꞑꞓꞡꞣꞥꞧꞩꟺff-stﬓ-ﬗa-z𐐨-𐑏𝐚-𝐳𝑎-𝑔𝑖-𝑧𝒂-𝒛𝒶-𝒹𝒻𝒽-𝓃𝓅-𝓏𝓪-𝔃𝔞-𝔷𝕒-𝕫𝖆-𝖟𝖺-𝗓𝗮-𝘇𝘢-𝘻𝙖-𝙯𝚊-𝚥𝛂-𝛚𝛜-𝛡𝛼-𝜔𝜖-𝜛𝜶-𝝎𝝐-𝝕𝝰-𝞈𝞊-𝞏𝞪-𝟂𝟄-𝟉𝟋][\w\']*)`, NameFunction, nil}, - {`--(?![!#$%&*+./<=>?@^|_~:\\]).*?$`, CommentSingle, nil}, - {`\{-`, CommentMultiline, Push("comment")}, - {`,`, Punctuation, nil}, - {`[:!#$%&*+.\\/<=>?@^|~-]+`, Operator, nil}, - {`\(`, Punctuation, Push("funclist", "funclist")}, - {`\)`, Punctuation, Pop(2)}, - }, - "comment": { - {`[^-{}]+`, CommentMultiline, nil}, - {`\{-`, CommentMultiline, Push()}, - {`-\}`, CommentMultiline, Pop(1)}, - {`[-{}]`, CommentMultiline, nil}, - }, - "character": { - {`[^\\']'`, LiteralStringChar, Pop(1)}, - {`\\`, LiteralStringEscape, Push("escape")}, - {`'`, LiteralStringChar, Pop(1)}, - }, - "string": { - {`[^\\"]+`, LiteralString, nil}, - {`\\`, LiteralStringEscape, Push("escape")}, - {`"`, LiteralString, Pop(1)}, - }, - "escape": { - {`[abfnrtv"\'&\\]`, LiteralStringEscape, Pop(1)}, - {`\^[][A-ZÀ-ÖØ-ÞĀĂĄĆĈĊČĎĐĒĔĖĘĚĜĞĠĢĤĦĨĪĬĮİIJĴĶĹĻĽĿŁŃŅŇŊŌŎŐŒŔŖŘŚŜŞŠŢŤŦŨŪŬŮŰŲŴŶŸ-ŹŻŽƁ-ƂƄƆ-ƇƉ-ƋƎ-ƑƓ-ƔƖ-ƘƜ-ƝƟ-ƠƢƤƦ-ƧƩƬƮ-ƯƱ-ƳƵƷ-ƸƼDŽLJNJǍǏǑǓǕǗǙǛǞǠǢǤǦǨǪǬǮDZǴǶ-ǸǺǼǾȀȂȄȆȈȊȌȎȐȒȔȖȘȚȜȞȠȢȤȦȨȪȬȮȰȲȺ-ȻȽ-ȾɁɃ-ɆɈɊɌɎͰͲͶΆΈ-ΊΌΎ-ΏΑ-ΡΣ-ΫϏϒ-ϔϘϚϜϞϠϢϤϦϨϪϬϮϴϷϹ-ϺϽ-ЯѠѢѤѦѨѪѬѮѰѲѴѶѸѺѼѾҀҊҌҎҐҒҔҖҘҚҜҞҠҢҤҦҨҪҬҮҰҲҴҶҸҺҼҾӀ-ӁӃӅӇӉӋӍӐӒӔӖӘӚӜӞӠӢӤӦӨӪӬӮӰӲӴӶӸӺӼӾԀԂԄԆԈԊԌԎԐԒԔԖԘԚԜԞԠԢԤԦԱ-ՖႠ-ჅჇჍḀḂḄḆḈḊḌḎḐḒḔḖḘḚḜḞḠḢḤḦḨḪḬḮḰḲḴḶḸḺḼḾṀṂṄṆṈṊṌṎṐṒṔṖṘṚṜṞṠṢṤṦṨṪṬṮṰṲṴṶṸṺṼṾẀẂẄẆẈẊẌẎẐẒẔẞẠẢẤẦẨẪẬẮẰẲẴẶẸẺẼẾỀỂỄỆỈỊỌỎỐỒỔỖỘỚỜỞỠỢỤỦỨỪỬỮỰỲỴỶỸỺỼỾἈ-ἏἘ-ἝἨ-ἯἸ-ἿὈ-ὍὙὛὝὟὨ-ὯᾸ-ΆῈ-ΉῘ-ΊῨ-ῬῸ-Ώℂℇℋ-ℍℐ-ℒℕℙ-ℝℤΩℨK-ℭℰ-ℳℾ-ℿⅅↃⰀ-ⰮⱠⱢ-ⱤⱧⱩⱫⱭ-ⱰⱲⱵⱾ-ⲀⲂⲄⲆⲈⲊⲌⲎⲐⲒⲔⲖⲘⲚⲜⲞⲠⲢⲤⲦⲨⲪⲬⲮⲰⲲⲴⲶⲸⲺⲼⲾⳀⳂⳄⳆⳈⳊⳌⳎⳐⳒⳔⳖⳘⳚⳜⳞⳠⳢⳫⳭⳲꙀꙂꙄꙆꙈꙊꙌꙎꙐꙒꙔꙖꙘꙚꙜꙞꙠꙢꙤꙦꙨꙪꙬꚀꚂꚄꚆꚈꚊꚌꚎꚐꚒꚔꚖꜢꜤꜦꜨꜪꜬꜮꜲꜴꜶꜸꜺꜼꜾꝀꝂꝄꝆꝈꝊꝌꝎꝐꝒꝔꝖꝘꝚꝜꝞꝠꝢꝤꝦꝨꝪꝬꝮꝹꝻꝽ-ꝾꞀꞂꞄꞆꞋꞍꞐꞒꞠꞢꞤꞦꞨꞪA-Z𐐀-𐐧𝐀-𝐙𝐴-𝑍𝑨-𝒁𝒜𝒞-𝒟𝒢𝒥-𝒦𝒩-𝒬𝒮-𝒵𝓐-𝓩𝔄-𝔅𝔇-𝔊𝔍-𝔔𝔖-𝔜𝔸-𝔹𝔻-𝔾𝕀-𝕄𝕆𝕊-𝕐𝕬-𝖅𝖠-𝖹𝗔-𝗭𝘈-𝘡𝘼-𝙕𝙰-𝚉𝚨-𝛀𝛢-𝛺𝜜-𝜴𝝖-𝝮𝞐-𝞨𝟊@^_]`, LiteralStringEscape, Pop(1)}, - {`NUL|SOH|[SE]TX|EOT|ENQ|ACK|BEL|BS|HT|LF|VT|FF|CR|S[OI]|DLE|DC[1-4]|NAK|SYN|ETB|CAN|EM|SUB|ESC|[FGRU]S|SP|DEL`, LiteralStringEscape, Pop(1)}, - {`o[0-7]+`, LiteralStringEscape, Pop(1)}, - {`x[\da-fA-F]+`, LiteralStringEscape, Pop(1)}, - {`\d+`, LiteralStringEscape, Pop(1)}, - {`\s+\\`, LiteralStringEscape, Pop(1)}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/h/haxe.go b/vendor/github.com/alecthomas/chroma/lexers/h/haxe.go deleted file mode 100644 index 5958543..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/h/haxe.go +++ /dev/null @@ -1,642 +0,0 @@ -package h - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Haxe lexer. -var Haxe = internal.Register(MustNewLexer( - &Config{ - Name: "Haxe", - Aliases: []string{"hx", "haxe", "hxsl"}, - Filenames: []string{"*.hx", "*.hxsl"}, - MimeTypes: []string{"text/haxe", "text/x-haxe", "text/x-hx"}, - DotAll: true, - }, - Rules{ - "root": { - Include("spaces"), - Include("meta"), - {`(?:package)\b`, KeywordNamespace, Push("semicolon", "package")}, - {`(?:import)\b`, KeywordNamespace, Push("semicolon", "import")}, - {`(?:using)\b`, KeywordNamespace, Push("semicolon", "using")}, - {`(?:extern|private)\b`, KeywordDeclaration, nil}, - {`(?:abstract)\b`, KeywordDeclaration, Push("abstract")}, - {`(?:class|interface)\b`, KeywordDeclaration, Push("class")}, - {`(?:enum)\b`, KeywordDeclaration, Push("enum")}, - {`(?:typedef)\b`, KeywordDeclaration, Push("typedef")}, - {`(?=.)`, Text, Push("expr-statement")}, - }, - "spaces": { - {`\s+`, Text, nil}, - {`//[^\n\r]*`, CommentSingle, nil}, - {`/\*.*?\*/`, CommentMultiline, nil}, - {`(#)(if|elseif|else|end|error)\b`, CommentPreproc, MutatorFunc(haxePreProcMutator)}, - }, - "string-single-interpol": { - {`\$\{`, LiteralStringInterpol, Push("string-interpol-close", "expr")}, - {`\$\$`, LiteralStringEscape, nil}, - {`\$(?=(?:_*[a-z]\w*|_+[0-9]\w*|_*[A-Z]\w*|_+|\$\w+))`, LiteralStringInterpol, Push("ident")}, - Include("string-single"), - }, - "string-single": { - {`'`, LiteralStringSingle, Pop(1)}, - {`\\.`, LiteralStringEscape, nil}, - {`.`, LiteralStringSingle, nil}, - }, - "string-double": { - {`"`, LiteralStringDouble, Pop(1)}, - {`\\.`, LiteralStringEscape, nil}, - {`.`, LiteralStringDouble, nil}, - }, - "string-interpol-close": { - {`\$(?:_*[a-z]\w*|_+[0-9]\w*|_*[A-Z]\w*|_+|\$\w+)`, LiteralStringInterpol, nil}, - {`\}`, LiteralStringInterpol, Pop(1)}, - }, - "package": { - Include("spaces"), - {`(?:_*[a-z]\w*|_+[0-9]\w*|_*[A-Z]\w*|_+|\$\w+)`, NameNamespace, nil}, - {`\.`, Punctuation, Push("import-ident")}, - Default(Pop(1)), - }, - "import": { - Include("spaces"), - {`(?:_*[a-z]\w*|_+[0-9]\w*|_*[A-Z]\w*|_+|\$\w+)`, NameNamespace, nil}, - {`\*`, Keyword, nil}, - {`\.`, Punctuation, Push("import-ident")}, - {`in`, KeywordNamespace, Push("ident")}, - Default(Pop(1)), - }, - "import-ident": { - Include("spaces"), - {`\*`, Keyword, Pop(1)}, - {`(?:_*[a-z]\w*|_+[0-9]\w*|_*[A-Z]\w*|_+|\$\w+)`, NameNamespace, Pop(1)}, - }, - "using": { - Include("spaces"), - {`(?:_*[a-z]\w*|_+[0-9]\w*|_*[A-Z]\w*|_+|\$\w+)`, NameNamespace, nil}, - {`\.`, Punctuation, Push("import-ident")}, - Default(Pop(1)), - }, - "preproc-error": { - {`\s+`, CommentPreproc, nil}, - {`'`, LiteralStringSingle, Push("#pop", "string-single")}, - {`"`, LiteralStringDouble, Push("#pop", "string-double")}, - Default(Pop(1)), - }, - "preproc-expr": { - {`\s+`, CommentPreproc, nil}, - {`\!`, CommentPreproc, nil}, - {`\(`, CommentPreproc, Push("#pop", "preproc-parenthesis")}, - {`(?:_*[a-z]\w*|_+[0-9]\w*|_*[A-Z]\w*|_+|\$\w+)`, CommentPreproc, Pop(1)}, - {`\.[0-9]+`, LiteralNumberFloat, nil}, - {`[0-9]+[eE][+\-]?[0-9]+`, LiteralNumberFloat, nil}, - {`[0-9]+\.[0-9]*[eE][+\-]?[0-9]+`, LiteralNumberFloat, nil}, - {`[0-9]+\.[0-9]+`, LiteralNumberFloat, nil}, - {`[0-9]+\.(?!(?:_*[a-z]\w*|_+[0-9]\w*|_*[A-Z]\w*|_+|\$\w+)|\.\.)`, LiteralNumberFloat, nil}, - {`0x[0-9a-fA-F]+`, LiteralNumberHex, nil}, - {`[0-9]+`, LiteralNumberInteger, nil}, - {`'`, LiteralStringSingle, Push("#pop", "string-single")}, - {`"`, LiteralStringDouble, Push("#pop", "string-double")}, - }, - "preproc-parenthesis": { - {`\s+`, CommentPreproc, nil}, - {`\)`, CommentPreproc, Pop(1)}, - Default(Push("preproc-expr-in-parenthesis")), - }, - "preproc-expr-chain": { - {`\s+`, CommentPreproc, nil}, - {`(?:%=|&=|\|=|\^=|\+=|\-=|\*=|/=|<<=|>\s*>\s*=|>\s*>\s*>\s*=|==|!=|<=|>\s*=|&&|\|\||<<|>>>|>\s*>|\.\.\.|<|>|%|&|\||\^|\+|\*|/|\-|=>|=)`, CommentPreproc, Push("#pop", "preproc-expr-in-parenthesis")}, - Default(Pop(1)), - }, - "preproc-expr-in-parenthesis": { - {`\s+`, CommentPreproc, nil}, - {`\!`, CommentPreproc, nil}, - {`\(`, CommentPreproc, Push("#pop", "preproc-expr-chain", "preproc-parenthesis")}, - {`(?:_*[a-z]\w*|_+[0-9]\w*|_*[A-Z]\w*|_+|\$\w+)`, CommentPreproc, Push("#pop", "preproc-expr-chain")}, - {`\.[0-9]+`, LiteralNumberFloat, Push("#pop", "preproc-expr-chain")}, - {`[0-9]+[eE][+\-]?[0-9]+`, LiteralNumberFloat, Push("#pop", "preproc-expr-chain")}, - {`[0-9]+\.[0-9]*[eE][+\-]?[0-9]+`, LiteralNumberFloat, Push("#pop", "preproc-expr-chain")}, - {`[0-9]+\.[0-9]+`, LiteralNumberFloat, Push("#pop", "preproc-expr-chain")}, - {`[0-9]+\.(?!(?:_*[a-z]\w*|_+[0-9]\w*|_*[A-Z]\w*|_+|\$\w+)|\.\.)`, LiteralNumberFloat, Push("#pop", "preproc-expr-chain")}, - {`0x[0-9a-fA-F]+`, LiteralNumberHex, Push("#pop", "preproc-expr-chain")}, - {`[0-9]+`, LiteralNumberInteger, Push("#pop", "preproc-expr-chain")}, - {`'`, LiteralStringSingle, Push("#pop", "preproc-expr-chain", "string-single")}, - {`"`, LiteralStringDouble, Push("#pop", "preproc-expr-chain", "string-double")}, - }, - "abstract": { - Include("spaces"), - Default(Pop(1), Push("abstract-body"), Push("abstract-relation"), Push("abstract-opaque"), Push("type-param-constraint"), Push("type-name")), - }, - "abstract-body": { - Include("spaces"), - {`\{`, Punctuation, Push("#pop", "class-body")}, - }, - "abstract-opaque": { - Include("spaces"), - {`\(`, Punctuation, Push("#pop", "parenthesis-close", "type")}, - Default(Pop(1)), - }, - "abstract-relation": { - Include("spaces"), - {`(?:to|from)`, KeywordDeclaration, Push("type")}, - {`,`, Punctuation, nil}, - Default(Pop(1)), - }, - "meta": { - Include("spaces"), - {`@`, NameDecorator, Push("meta-body", "meta-ident", "meta-colon")}, - }, - "meta-colon": { - Include("spaces"), - {`:`, NameDecorator, Pop(1)}, - Default(Pop(1)), - }, - "meta-ident": { - Include("spaces"), - {`(?:_*[a-z]\w*|_+[0-9]\w*|_*[A-Z]\w*|_+|\$\w+)`, NameDecorator, Pop(1)}, - }, - "meta-body": { - Include("spaces"), - {`\(`, NameDecorator, Push("#pop", "meta-call")}, - Default(Pop(1)), - }, - "meta-call": { - Include("spaces"), - {`\)`, NameDecorator, Pop(1)}, - Default(Pop(1), Push("meta-call-sep"), Push("expr")), - }, - "meta-call-sep": { - Include("spaces"), - {`\)`, NameDecorator, Pop(1)}, - {`,`, Punctuation, Push("#pop", "meta-call")}, - }, - "typedef": { - Include("spaces"), - Default(Pop(1), Push("typedef-body"), Push("type-param-constraint"), Push("type-name")), - }, - "typedef-body": { - Include("spaces"), - {`=`, Operator, Push("#pop", "optional-semicolon", "type")}, - }, - "enum": { - Include("spaces"), - Default(Pop(1), Push("enum-body"), Push("bracket-open"), Push("type-param-constraint"), Push("type-name")), - }, - "enum-body": { - Include("spaces"), - Include("meta"), - {`\}`, Punctuation, Pop(1)}, - {`(?!(?:function|class|static|var|if|else|while|do|for|break|return|continue|extends|implements|import|switch|case|default|public|private|try|untyped|catch|new|this|throw|extern|enum|in|interface|cast|override|dynamic|typedef|package|inline|using|null|true|false|abstract)\b)(?:_*[a-z]\w*|_+[0-9]\w*|_*[A-Z]\w*|_+|\$\w+)`, Name, Push("enum-member", "type-param-constraint")}, - }, - "enum-member": { - Include("spaces"), - {`\(`, Punctuation, Push("#pop", "semicolon", "flag", "function-param")}, - Default(Pop(1), Push("semicolon"), Push("flag")), - }, - "class": { - Include("spaces"), - Default(Pop(1), Push("class-body"), Push("bracket-open"), Push("extends"), Push("type-param-constraint"), Push("type-name")), - }, - "extends": { - Include("spaces"), - {`(?:extends|implements)\b`, KeywordDeclaration, Push("type")}, - {`,`, Punctuation, nil}, - Default(Pop(1)), - }, - "bracket-open": { - Include("spaces"), - {`\{`, Punctuation, Pop(1)}, - }, - "bracket-close": { - Include("spaces"), - {`\}`, Punctuation, Pop(1)}, - }, - "class-body": { - Include("spaces"), - Include("meta"), - {`\}`, Punctuation, Pop(1)}, - {`(?:static|public|private|override|dynamic|inline|macro)\b`, KeywordDeclaration, nil}, - Default(Push("class-member")), - }, - "class-member": { - Include("spaces"), - {`(var)\b`, KeywordDeclaration, Push("#pop", "optional-semicolon", "var")}, - {`(function)\b`, KeywordDeclaration, Push("#pop", "optional-semicolon", "class-method")}, - }, - "function-local": { - Include("spaces"), - {`(?!(?:function|class|static|var|if|else|while|do|for|break|return|continue|extends|implements|import|switch|case|default|public|private|try|untyped|catch|new|this|throw|extern|enum|in|interface|cast|override|dynamic|typedef|package|inline|using|null|true|false|abstract)\b)(?:_*[a-z]\w*|_+[0-9]\w*|_*[A-Z]\w*|_+|\$\w+)`, NameFunction, Push("#pop", "optional-expr", "flag", "function-param", "parenthesis-open", "type-param-constraint")}, - Default(Pop(1), Push("optional-expr"), Push("flag"), Push("function-param"), Push("parenthesis-open"), Push("type-param-constraint")), - }, - "optional-expr": { - Include("spaces"), - Include("expr"), - Default(Pop(1)), - }, - "class-method": { - Include("spaces"), - {`(?:_*[a-z]\w*|_+[0-9]\w*|_*[A-Z]\w*|_+|\$\w+)`, NameFunction, Push("#pop", "optional-expr", "flag", "function-param", "parenthesis-open", "type-param-constraint")}, - }, - "function-param": { - Include("spaces"), - {`\)`, Punctuation, Pop(1)}, - {`\?`, Punctuation, nil}, - {`(?!(?:function|class|static|var|if|else|while|do|for|break|return|continue|extends|implements|import|switch|case|default|public|private|try|untyped|catch|new|this|throw|extern|enum|in|interface|cast|override|dynamic|typedef|package|inline|using|null|true|false|abstract)\b)(?:_*[a-z]\w*|_+[0-9]\w*|_*[A-Z]\w*|_+|\$\w+)`, Name, Push("#pop", "function-param-sep", "assign", "flag")}, - }, - "function-param-sep": { - Include("spaces"), - {`\)`, Punctuation, Pop(1)}, - {`,`, Punctuation, Push("#pop", "function-param")}, - }, - "prop-get-set": { - Include("spaces"), - {`\(`, Punctuation, Push("#pop", "parenthesis-close", "prop-get-set-opt", "comma", "prop-get-set-opt")}, - Default(Pop(1)), - }, - "prop-get-set-opt": { - Include("spaces"), - {`(?:default|null|never|dynamic|get|set)\b`, Keyword, Pop(1)}, - {`(?!(?:function|class|static|var|if|else|while|do|for|break|return|continue|extends|implements|import|switch|case|default|public|private|try|untyped|catch|new|this|throw|extern|enum|in|interface|cast|override|dynamic|typedef|package|inline|using|null|true|false|abstract)\b)(?:_*[a-z]\w*|_+[0-9]\w*|_*[A-Z]\w*|_+|\$\w+)`, Text, Pop(1)}, - }, - "expr-statement": { - Include("spaces"), - Default(Pop(1), Push("optional-semicolon"), Push("expr")), - }, - "expr": { - Include("spaces"), - {`@`, NameDecorator, Push("#pop", "optional-expr", "meta-body", "meta-ident", "meta-colon")}, - {`(?:\+\+|\-\-|~(?!/)|!|\-)`, Operator, nil}, - {`\(`, Punctuation, Push("#pop", "expr-chain", "parenthesis")}, - {`(?:static|public|private|override|dynamic|inline)\b`, KeywordDeclaration, nil}, - {`(?:function)\b`, KeywordDeclaration, Push("#pop", "expr-chain", "function-local")}, - {`\{`, Punctuation, Push("#pop", "expr-chain", "bracket")}, - {`(?:true|false|null)\b`, KeywordConstant, Push("#pop", "expr-chain")}, - {`(?:this)\b`, Keyword, Push("#pop", "expr-chain")}, - {`(?:cast)\b`, Keyword, Push("#pop", "expr-chain", "cast")}, - {`(?:try)\b`, Keyword, Push("#pop", "catch", "expr")}, - {`(?:var)\b`, KeywordDeclaration, Push("#pop", "var")}, - {`(?:new)\b`, Keyword, Push("#pop", "expr-chain", "new")}, - {`(?:switch)\b`, Keyword, Push("#pop", "switch")}, - {`(?:if)\b`, Keyword, Push("#pop", "if")}, - {`(?:do)\b`, Keyword, Push("#pop", "do")}, - {`(?:while)\b`, Keyword, Push("#pop", "while")}, - {`(?:for)\b`, Keyword, Push("#pop", "for")}, - {`(?:untyped|throw)\b`, Keyword, nil}, - {`(?:return)\b`, Keyword, Push("#pop", "optional-expr")}, - {`(?:macro)\b`, Keyword, Push("#pop", "macro")}, - {`(?:continue|break)\b`, Keyword, Pop(1)}, - {`(?:\$\s*[a-z]\b|\$(?!(?:_*[a-z]\w*|_+[0-9]\w*|_*[A-Z]\w*|_+|\$\w+)))`, Name, Push("#pop", "dollar")}, - {`(?!(?:function|class|static|var|if|else|while|do|for|break|return|continue|extends|implements|import|switch|case|default|public|private|try|untyped|catch|new|this|throw|extern|enum|in|interface|cast|override|dynamic|typedef|package|inline|using|null|true|false|abstract)\b)(?:_*[a-z]\w*|_+[0-9]\w*|_*[A-Z]\w*|_+|\$\w+)`, Name, Push("#pop", "expr-chain")}, - {`\.[0-9]+`, LiteralNumberFloat, Push("#pop", "expr-chain")}, - {`[0-9]+[eE][+\-]?[0-9]+`, LiteralNumberFloat, Push("#pop", "expr-chain")}, - {`[0-9]+\.[0-9]*[eE][+\-]?[0-9]+`, LiteralNumberFloat, Push("#pop", "expr-chain")}, - {`[0-9]+\.[0-9]+`, LiteralNumberFloat, Push("#pop", "expr-chain")}, - {`[0-9]+\.(?!(?:_*[a-z]\w*|_+[0-9]\w*|_*[A-Z]\w*|_+|\$\w+)|\.\.)`, LiteralNumberFloat, Push("#pop", "expr-chain")}, - {`0x[0-9a-fA-F]+`, LiteralNumberHex, Push("#pop", "expr-chain")}, - {`[0-9]+`, LiteralNumberInteger, Push("#pop", "expr-chain")}, - {`'`, LiteralStringSingle, Push("#pop", "expr-chain", "string-single-interpol")}, - {`"`, LiteralStringDouble, Push("#pop", "expr-chain", "string-double")}, - {`~/(\\\\|\\/|[^/\n])*/[gimsu]*`, LiteralStringRegex, Push("#pop", "expr-chain")}, - {`\[`, Punctuation, Push("#pop", "expr-chain", "array-decl")}, - }, - "expr-chain": { - Include("spaces"), - {`(?:\+\+|\-\-)`, Operator, nil}, - {`(?:%=|&=|\|=|\^=|\+=|\-=|\*=|/=|<<=|>\s*>\s*=|>\s*>\s*>\s*=|==|!=|<=|>\s*=|&&|\|\||<<|>>>|>\s*>|\.\.\.|<|>|%|&|\||\^|\+|\*|/|\-|=>|=)`, Operator, Push("#pop", "expr")}, - {`(?:in)\b`, Keyword, Push("#pop", "expr")}, - {`\?`, Operator, Push("#pop", "expr", "ternary", "expr")}, - {`(\.)((?!(?:function|class|static|var|if|else|while|do|for|break|return|continue|extends|implements|import|switch|case|default|public|private|try|untyped|catch|new|this|throw|extern|enum|in|interface|cast|override|dynamic|typedef|package|inline|using|null|true|false|abstract)\b)(?:_*[a-z]\w*|_+[0-9]\w*|_*[A-Z]\w*|_+|\$\w+))`, ByGroups(Punctuation, Name), nil}, - {`\[`, Punctuation, Push("array-access")}, - {`\(`, Punctuation, Push("call")}, - Default(Pop(1)), - }, - "macro": { - Include("spaces"), - Include("meta"), - {`:`, Punctuation, Push("#pop", "type")}, - {`(?:extern|private)\b`, KeywordDeclaration, nil}, - {`(?:abstract)\b`, KeywordDeclaration, Push("#pop", "optional-semicolon", "abstract")}, - {`(?:class|interface)\b`, KeywordDeclaration, Push("#pop", "optional-semicolon", "macro-class")}, - {`(?:enum)\b`, KeywordDeclaration, Push("#pop", "optional-semicolon", "enum")}, - {`(?:typedef)\b`, KeywordDeclaration, Push("#pop", "optional-semicolon", "typedef")}, - Default(Pop(1), Push("expr")), - }, - "macro-class": { - {`\{`, Punctuation, Push("#pop", "class-body")}, - Include("class"), - }, - "cast": { - Include("spaces"), - {`\(`, Punctuation, Push("#pop", "parenthesis-close", "cast-type", "expr")}, - Default(Pop(1), Push("expr")), - }, - "cast-type": { - Include("spaces"), - {`,`, Punctuation, Push("#pop", "type")}, - Default(Pop(1)), - }, - "catch": { - Include("spaces"), - {`(?:catch)\b`, Keyword, Push("expr", "function-param", "parenthesis-open")}, - Default(Pop(1)), - }, - "do": { - Include("spaces"), - Default(Pop(1), Push("do-while"), Push("expr")), - }, - "do-while": { - Include("spaces"), - {`(?:while)\b`, Keyword, Push("#pop", "parenthesis", "parenthesis-open")}, - }, - "while": { - Include("spaces"), - {`\(`, Punctuation, Push("#pop", "expr", "parenthesis")}, - }, - "for": { - Include("spaces"), - {`\(`, Punctuation, Push("#pop", "expr", "parenthesis")}, - }, - "if": { - Include("spaces"), - {`\(`, Punctuation, Push("#pop", "else", "optional-semicolon", "expr", "parenthesis")}, - }, - "else": { - Include("spaces"), - {`(?:else)\b`, Keyword, Push("#pop", "expr")}, - Default(Pop(1)), - }, - "switch": { - Include("spaces"), - Default(Pop(1), Push("switch-body"), Push("bracket-open"), Push("expr")), - }, - "switch-body": { - Include("spaces"), - {`(?:case|default)\b`, Keyword, Push("case-block", "case")}, - {`\}`, Punctuation, Pop(1)}, - }, - "case": { - Include("spaces"), - {`:`, Punctuation, Pop(1)}, - Default(Pop(1), Push("case-sep"), Push("case-guard"), Push("expr")), - }, - "case-sep": { - Include("spaces"), - {`:`, Punctuation, Pop(1)}, - {`,`, Punctuation, Push("#pop", "case")}, - }, - "case-guard": { - Include("spaces"), - {`(?:if)\b`, Keyword, Push("#pop", "parenthesis", "parenthesis-open")}, - Default(Pop(1)), - }, - "case-block": { - Include("spaces"), - {`(?!(?:case|default)\b|\})`, Keyword, Push("expr-statement")}, - Default(Pop(1)), - }, - "new": { - Include("spaces"), - Default(Pop(1), Push("call"), Push("parenthesis-open"), Push("type")), - }, - "array-decl": { - Include("spaces"), - {`\]`, Punctuation, Pop(1)}, - Default(Pop(1), Push("array-decl-sep"), Push("expr")), - }, - "array-decl-sep": { - Include("spaces"), - {`\]`, Punctuation, Pop(1)}, - {`,`, Punctuation, Push("#pop", "array-decl")}, - }, - "array-access": { - Include("spaces"), - Default(Pop(1), Push("array-access-close"), Push("expr")), - }, - "array-access-close": { - Include("spaces"), - {`\]`, Punctuation, Pop(1)}, - }, - "comma": { - Include("spaces"), - {`,`, Punctuation, Pop(1)}, - }, - "colon": { - Include("spaces"), - {`:`, Punctuation, Pop(1)}, - }, - "semicolon": { - Include("spaces"), - {`;`, Punctuation, Pop(1)}, - }, - "optional-semicolon": { - Include("spaces"), - {`;`, Punctuation, Pop(1)}, - Default(Pop(1)), - }, - "ident": { - Include("spaces"), - {`(?:_*[a-z]\w*|_+[0-9]\w*|_*[A-Z]\w*|_+|\$\w+)`, Name, Pop(1)}, - }, - "dollar": { - Include("spaces"), - {`\{`, Punctuation, Push("#pop", "expr-chain", "bracket-close", "expr")}, - Default(Pop(1), Push("expr-chain")), - }, - "type-name": { - Include("spaces"), - {`_*[A-Z]\w*`, Name, Pop(1)}, - }, - "type-full-name": { - Include("spaces"), - {`\.`, Punctuation, Push("ident")}, - Default(Pop(1)), - }, - "type": { - Include("spaces"), - {`\?`, Punctuation, nil}, - {`(?:_*[a-z]\w*|_+[0-9]\w*|_*[A-Z]\w*|_+|\$\w+)`, Name, Push("#pop", "type-check", "type-full-name")}, - {`\{`, Punctuation, Push("#pop", "type-check", "type-struct")}, - {`\(`, Punctuation, Push("#pop", "type-check", "type-parenthesis")}, - }, - "type-parenthesis": { - Include("spaces"), - Default(Pop(1), Push("parenthesis-close"), Push("type")), - }, - "type-check": { - Include("spaces"), - {`->`, Punctuation, Push("#pop", "type")}, - {`<(?!=)`, Punctuation, Push("type-param")}, - Default(Pop(1)), - }, - "type-struct": { - Include("spaces"), - {`\}`, Punctuation, Pop(1)}, - {`\?`, Punctuation, nil}, - {`>`, Punctuation, Push("comma", "type")}, - {`(?!(?:function|class|static|var|if|else|while|do|for|break|return|continue|extends|implements|import|switch|case|default|public|private|try|untyped|catch|new|this|throw|extern|enum|in|interface|cast|override|dynamic|typedef|package|inline|using|null|true|false|abstract)\b)(?:_*[a-z]\w*|_+[0-9]\w*|_*[A-Z]\w*|_+|\$\w+)`, Name, Push("#pop", "type-struct-sep", "type", "colon")}, - Include("class-body"), - }, - "type-struct-sep": { - Include("spaces"), - {`\}`, Punctuation, Pop(1)}, - {`,`, Punctuation, Push("#pop", "type-struct")}, - }, - "type-param-type": { - {`\.[0-9]+`, LiteralNumberFloat, Pop(1)}, - {`[0-9]+[eE][+\-]?[0-9]+`, LiteralNumberFloat, Pop(1)}, - {`[0-9]+\.[0-9]*[eE][+\-]?[0-9]+`, LiteralNumberFloat, Pop(1)}, - {`[0-9]+\.[0-9]+`, LiteralNumberFloat, Pop(1)}, - {`[0-9]+\.(?!(?:_*[a-z]\w*|_+[0-9]\w*|_*[A-Z]\w*|_+|\$\w+)|\.\.)`, LiteralNumberFloat, Pop(1)}, - {`0x[0-9a-fA-F]+`, LiteralNumberHex, Pop(1)}, - {`[0-9]+`, LiteralNumberInteger, Pop(1)}, - {`'`, LiteralStringSingle, Push("#pop", "string-single")}, - {`"`, LiteralStringDouble, Push("#pop", "string-double")}, - {`~/(\\\\|\\/|[^/\n])*/[gim]*`, LiteralStringRegex, Pop(1)}, - {`\[`, Operator, Push("#pop", "array-decl")}, - Include("type"), - }, - "type-param": { - Include("spaces"), - Default(Pop(1), Push("type-param-sep"), Push("type-param-type")), - }, - "type-param-sep": { - Include("spaces"), - {`>`, Punctuation, Pop(1)}, - {`,`, Punctuation, Push("#pop", "type-param")}, - }, - "type-param-constraint": { - Include("spaces"), - {`<(?!=)`, Punctuation, Push("#pop", "type-param-constraint-sep", "type-param-constraint-flag", "type-name")}, - Default(Pop(1)), - }, - "type-param-constraint-sep": { - Include("spaces"), - {`>`, Punctuation, Pop(1)}, - {`,`, Punctuation, Push("#pop", "type-param-constraint-sep", "type-param-constraint-flag", "type-name")}, - }, - "type-param-constraint-flag": { - Include("spaces"), - {`:`, Punctuation, Push("#pop", "type-param-constraint-flag-type")}, - Default(Pop(1)), - }, - "type-param-constraint-flag-type": { - Include("spaces"), - {`\(`, Punctuation, Push("#pop", "type-param-constraint-flag-type-sep", "type")}, - Default(Pop(1), Push("type")), - }, - "type-param-constraint-flag-type-sep": { - Include("spaces"), - {`\)`, Punctuation, Pop(1)}, - {`,`, Punctuation, Push("type")}, - }, - "parenthesis": { - Include("spaces"), - Default(Pop(1), Push("parenthesis-close"), Push("flag"), Push("expr")), - }, - "parenthesis-open": { - Include("spaces"), - {`\(`, Punctuation, Pop(1)}, - }, - "parenthesis-close": { - Include("spaces"), - {`\)`, Punctuation, Pop(1)}, - }, - "var": { - Include("spaces"), - {`(?!(?:function|class|static|var|if|else|while|do|for|break|return|continue|extends|implements|import|switch|case|default|public|private|try|untyped|catch|new|this|throw|extern|enum|in|interface|cast|override|dynamic|typedef|package|inline|using|null|true|false|abstract)\b)(?:_*[a-z]\w*|_+[0-9]\w*|_*[A-Z]\w*|_+|\$\w+)`, Text, Push("#pop", "var-sep", "assign", "flag", "prop-get-set")}, - }, - "var-sep": { - Include("spaces"), - {`,`, Punctuation, Push("#pop", "var")}, - Default(Pop(1)), - }, - "assign": { - Include("spaces"), - {`=`, Operator, Push("#pop", "expr")}, - Default(Pop(1)), - }, - "flag": { - Include("spaces"), - {`:`, Punctuation, Push("#pop", "type")}, - Default(Pop(1)), - }, - "ternary": { - Include("spaces"), - {`:`, Operator, Pop(1)}, - }, - "call": { - Include("spaces"), - {`\)`, Punctuation, Pop(1)}, - Default(Pop(1), Push("call-sep"), Push("expr")), - }, - "call-sep": { - Include("spaces"), - {`\)`, Punctuation, Pop(1)}, - {`,`, Punctuation, Push("#pop", "call")}, - }, - "bracket": { - Include("spaces"), - {`(?!(?:\$\s*[a-z]\b|\$(?!(?:_*[a-z]\w*|_+[0-9]\w*|_*[A-Z]\w*|_+|\$\w+))))(?!(?:function|class|static|var|if|else|while|do|for|break|return|continue|extends|implements|import|switch|case|default|public|private|try|untyped|catch|new|this|throw|extern|enum|in|interface|cast|override|dynamic|typedef|package|inline|using|null|true|false|abstract)\b)(?:_*[a-z]\w*|_+[0-9]\w*|_*[A-Z]\w*|_+|\$\w+)`, Name, Push("#pop", "bracket-check")}, - {`'`, LiteralStringSingle, Push("#pop", "bracket-check", "string-single")}, - {`"`, LiteralStringDouble, Push("#pop", "bracket-check", "string-double")}, - Default(Pop(1), Push("block")), - }, - "bracket-check": { - Include("spaces"), - {`:`, Punctuation, Push("#pop", "object-sep", "expr")}, - Default(Pop(1), Push("block"), Push("optional-semicolon"), Push("expr-chain")), - }, - "block": { - Include("spaces"), - {`\}`, Punctuation, Pop(1)}, - Default(Push("expr-statement")), - }, - "object": { - Include("spaces"), - {`\}`, Punctuation, Pop(1)}, - Default(Pop(1), Push("object-sep"), Push("expr"), Push("colon"), Push("ident-or-string")), - }, - "ident-or-string": { - Include("spaces"), - {`(?!(?:function|class|static|var|if|else|while|do|for|break|return|continue|extends|implements|import|switch|case|default|public|private|try|untyped|catch|new|this|throw|extern|enum|in|interface|cast|override|dynamic|typedef|package|inline|using|null|true|false|abstract)\b)(?:_*[a-z]\w*|_+[0-9]\w*|_*[A-Z]\w*|_+|\$\w+)`, Name, Pop(1)}, - {`'`, LiteralStringSingle, Push("#pop", "string-single")}, - {`"`, LiteralStringDouble, Push("#pop", "string-double")}, - }, - "object-sep": { - Include("spaces"), - {`\}`, Punctuation, Pop(1)}, - {`,`, Punctuation, Push("#pop", "object")}, - }, - }, -)) - -func haxePreProcMutator(state *LexerState) error { - stack, ok := state.Get("haxe-pre-proc").([][]string) - if !ok { - stack = [][]string{} - } - - proc := state.Groups[2] - switch proc { - case "if": - stack = append(stack, state.Stack) - case "else", "elseif": - if len(stack) > 0 { - state.Stack = stack[len(stack)-1] - } - case "end": - stack = stack[:len(stack)-1] - } - - if proc == "if" || proc == "elseif" { - state.Stack = append(state.Stack, "preproc-expr") - } - - if proc == "error" { - state.Stack = append(state.Stack, "preproc-error") - } - state.Set("haxe-pre-proc", stack) - return nil -} diff --git a/vendor/github.com/alecthomas/chroma/lexers/h/hcl.go b/vendor/github.com/alecthomas/chroma/lexers/h/hcl.go deleted file mode 100644 index ce7064b..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/h/hcl.go +++ /dev/null @@ -1,69 +0,0 @@ -package h - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// HCL lexer. -var HCL = internal.Register(MustNewLexer( - &Config{ - Name: "HCL", - Aliases: []string{"hcl"}, - Filenames: []string{"*.hcl"}, - MimeTypes: []string{"application/x-hcl"}, - }, - Rules{ - "root": { - Include("string"), - Include("punctuation"), - Include("curly"), - Include("basic"), - Include("whitespace"), - {`[0-9]+`, LiteralNumber, nil}, - }, - "basic": { - {Words(`\b`, `\b`, `true`, `false`), KeywordType, nil}, - {`\s*/\*`, CommentMultiline, Push("comment")}, - {`\s*#.*\n`, CommentSingle, nil}, - {`(.*?)(\s*)(=)`, ByGroups(Name, Text, Operator), nil}, - {`\d+`, Number, nil}, - {`\b\w+\b`, Keyword, nil}, - {`\$\{`, LiteralStringInterpol, Push("var_builtin")}, - }, - "function": { - {`(\s+)(".*")(\s+)`, ByGroups(Text, LiteralString, Text), nil}, - Include("punctuation"), - Include("curly"), - }, - "var_builtin": { - {`\$\{`, LiteralStringInterpol, Push()}, - {Words(`\b`, `\b`, `concat`, `file`, `join`, `lookup`, `element`), NameBuiltin, nil}, - Include("string"), - Include("punctuation"), - {`\s+`, Text, nil}, - {`\}`, LiteralStringInterpol, Pop(1)}, - }, - "string": { - {`(".*")`, ByGroups(LiteralStringDouble), nil}, - }, - "punctuation": { - {`[\[\](),.]`, Punctuation, nil}, - }, - "curly": { - {`\{`, TextPunctuation, nil}, - {`\}`, TextPunctuation, nil}, - }, - "comment": { - {`[^*/]`, CommentMultiline, nil}, - {`/\*`, CommentMultiline, Push()}, - {`\*/`, CommentMultiline, Pop(1)}, - {`[*/]`, CommentMultiline, nil}, - }, - "whitespace": { - {`\n`, Text, nil}, - {`\s+`, Text, nil}, - {`\\\n`, Text, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/h/hexdump.go b/vendor/github.com/alecthomas/chroma/lexers/h/hexdump.go deleted file mode 100644 index 8b7e7bd..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/h/hexdump.go +++ /dev/null @@ -1,67 +0,0 @@ -package h - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Hexdump lexer. -var Hexdump = internal.Register(MustNewLexer( - &Config{ - Name: "Hexdump", - Aliases: []string{"hexdump"}, - Filenames: []string{}, - MimeTypes: []string{}, - }, - Rules{ - "root": { - {`\n`, Text, nil}, - Include("offset"), - {`([0-9A-Ha-h]{2})(\-)([0-9A-Ha-h]{2})`, ByGroups(LiteralNumberHex, Punctuation, LiteralNumberHex), nil}, - {`[0-9A-Ha-h]{2}`, LiteralNumberHex, nil}, - {`(\s{2,3})(\>)(.{16})(\<)$`, ByGroups(Text, Punctuation, LiteralString, Punctuation), Push("bracket-strings")}, - {`(\s{2,3})(\|)(.{16})(\|)$`, ByGroups(Text, Punctuation, LiteralString, Punctuation), Push("piped-strings")}, - {`(\s{2,3})(\>)(.{1,15})(\<)$`, ByGroups(Text, Punctuation, LiteralString, Punctuation), nil}, - {`(\s{2,3})(\|)(.{1,15})(\|)$`, ByGroups(Text, Punctuation, LiteralString, Punctuation), nil}, - {`(\s{2,3})(.{1,15})$`, ByGroups(Text, LiteralString), nil}, - {`(\s{2,3})(.{16}|.{20})$`, ByGroups(Text, LiteralString), Push("nonpiped-strings")}, - {`\s`, Text, nil}, - {`^\*`, Punctuation, nil}, - }, - "offset": { - {`^([0-9A-Ha-h]+)(:)`, ByGroups(NameLabel, Punctuation), Push("offset-mode")}, - {`^[0-9A-Ha-h]+`, NameLabel, nil}, - }, - "offset-mode": { - {`\s`, Text, Pop(1)}, - {`[0-9A-Ha-h]+`, NameLabel, nil}, - {`:`, Punctuation, nil}, - }, - "piped-strings": { - {`\n`, Text, nil}, - Include("offset"), - {`[0-9A-Ha-h]{2}`, LiteralNumberHex, nil}, - {`(\s{2,3})(\|)(.{1,16})(\|)$`, ByGroups(Text, Punctuation, LiteralString, Punctuation), nil}, - {`\s`, Text, nil}, - {`^\*`, Punctuation, nil}, - }, - "bracket-strings": { - {`\n`, Text, nil}, - Include("offset"), - {`[0-9A-Ha-h]{2}`, LiteralNumberHex, nil}, - {`(\s{2,3})(\>)(.{1,16})(\<)$`, ByGroups(Text, Punctuation, LiteralString, Punctuation), nil}, - {`\s`, Text, nil}, - {`^\*`, Punctuation, nil}, - }, - "nonpiped-strings": { - {`\n`, Text, nil}, - Include("offset"), - {`([0-9A-Ha-h]{2})(\-)([0-9A-Ha-h]{2})`, ByGroups(LiteralNumberHex, Punctuation, LiteralNumberHex), nil}, - {`[0-9A-Ha-h]{2}`, LiteralNumberHex, nil}, - {`(\s{19,})(.{1,20}?)$`, ByGroups(Text, LiteralString), nil}, - {`(\s{2,3})(.{1,20})$`, ByGroups(Text, LiteralString), nil}, - {`\s`, Text, nil}, - {`^\*`, Punctuation, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/h/html.go b/vendor/github.com/alecthomas/chroma/lexers/h/html.go deleted file mode 100644 index 07fc27e..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/h/html.go +++ /dev/null @@ -1,59 +0,0 @@ -package h - -import ( - . "github.com/alecthomas/chroma" // nolint - . "github.com/alecthomas/chroma/lexers/c" // nolint - "github.com/alecthomas/chroma/lexers/internal" - . "github.com/alecthomas/chroma/lexers/j" // nolint -) - -// HTML lexer. -var HTML = internal.Register(MustNewLexer( - &Config{ - Name: "HTML", - Aliases: []string{"html"}, - Filenames: []string{"*.html", "*.htm", "*.xhtml", "*.xslt"}, - MimeTypes: []string{"text/html", "application/xhtml+xml"}, - NotMultiline: true, - DotAll: true, - CaseInsensitive: true, - }, - Rules{ - "root": { - {`[^<&]+`, Text, nil}, - {`&\S*?;`, NameEntity, nil}, - {`\<\!\[CDATA\[.*?\]\]\>`, CommentPreproc, nil}, - {``, Comment, Pop(1)}, - {`-`, Comment, nil}, - }, - "tag": { - {`\s+`, Text, nil}, - {`([\w:-]+\s*)(=)(\s*)`, ByGroups(NameAttribute, Operator, Text), Push("attr")}, - {`[\w:-]+`, NameAttribute, nil}, - {`(/?)(\s*)(>)`, ByGroups(Punctuation, Text, Punctuation), Pop(1)}, - }, - "script-content": { - {`(<)(\s*)(/)(\s*)(script)(\s*)(>)`, ByGroups(Punctuation, Text, Punctuation, Text, NameTag, Text, Punctuation), Pop(1)}, - {`.+?(?=<\s*/\s*script\s*>)`, Using(Javascript), nil}, - }, - "style-content": { - {`(<)(\s*)(/)(\s*)(style)(\s*)(>)`, ByGroups(Punctuation, Text, Punctuation, Text, NameTag, Text, Punctuation), Pop(1)}, - {`.+?(?=<\s*/\s*style\s*>)`, Using(CSS), nil}, - }, - "attr": { - {`".*?"`, LiteralString, Pop(1)}, - {`'.*?'`, LiteralString, Pop(1)}, - {`[^\s>]+`, LiteralString, Pop(1)}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/h/http.go b/vendor/github.com/alecthomas/chroma/lexers/h/http.go deleted file mode 100644 index 0a1264c..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/h/http.go +++ /dev/null @@ -1,128 +0,0 @@ -package h - -import ( - "strings" - - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// HTTP lexer. -var HTTP = internal.Register(httpBodyContentTypeLexer(MustNewLexer( - &Config{ - Name: "HTTP", - Aliases: []string{"http"}, - Filenames: []string{}, - MimeTypes: []string{}, - NotMultiline: true, - DotAll: true, - }, - Rules{ - "root": { - {`(GET|POST|PUT|DELETE|HEAD|OPTIONS|TRACE|PATCH|CONNECT)( +)([^ ]+)( +)(HTTP)(/)(1\.[01])(\r?\n|\Z)`, ByGroups(NameFunction, Text, NameNamespace, Text, KeywordReserved, Operator, LiteralNumber, Text), Push("headers")}, - {`(HTTP)(/)(1\.[01])( +)(\d{3})( +)([^\r\n]+)(\r?\n|\Z)`, ByGroups(KeywordReserved, Operator, LiteralNumber, Text, LiteralNumber, Text, NameException, Text), Push("headers")}, - }, - "headers": { - {`([^\s:]+)( *)(:)( *)([^\r\n]+)(\r?\n|\Z)`, EmitterFunc(httpHeaderBlock), nil}, - {`([\t ]+)([^\r\n]+)(\r?\n|\Z)`, EmitterFunc(httpContinuousHeaderBlock), nil}, - {`\r?\n`, Text, Push("content")}, - }, - "content": { - {`.+`, EmitterFunc(httpContentBlock), nil}, - }, - }, -))) - -func httpContentBlock(groups []string, lexer Lexer) Iterator { - tokens := []Token{ - {Generic, groups[0]}, - } - return Literator(tokens...) -} - -func httpHeaderBlock(groups []string, lexer Lexer) Iterator { - tokens := []Token{ - {Name, groups[1]}, - {Text, groups[2]}, - {Operator, groups[3]}, - {Text, groups[4]}, - {Literal, groups[5]}, - {Text, groups[6]}, - } - return Literator(tokens...) -} - -func httpContinuousHeaderBlock(groups []string, lexer Lexer) Iterator { - tokens := []Token{ - {Text, groups[1]}, - {Literal, groups[2]}, - {Text, groups[3]}, - } - return Literator(tokens...) -} - -func httpBodyContentTypeLexer(lexer Lexer) Lexer { return &httpBodyContentTyper{lexer} } - -type httpBodyContentTyper struct{ Lexer } - -func (d *httpBodyContentTyper) Tokenise(options *TokeniseOptions, text string) (Iterator, error) { // nolint: gocognit - var contentType string - var isContentType bool - var subIterator Iterator - - it, err := d.Lexer.Tokenise(options, text) - if err != nil { - return nil, err - } - - return func() Token { - token := it() - - if token == EOF { - if subIterator != nil { - return subIterator() - } - return EOF - } - - switch { - case token.Type == Name && strings.ToLower(token.Value) == "content-type": - { - isContentType = true - } - case token.Type == Literal && isContentType: - { - isContentType = false - contentType = strings.TrimSpace(token.Value) - pos := strings.Index(contentType, ";") - if pos > 0 { - contentType = strings.TrimSpace(contentType[:pos]) - } - } - case token.Type == Generic && contentType != "": - { - lexer := internal.MatchMimeType(contentType) - - // application/calendar+xml can be treated as application/xml - // if there's not a better match. - if lexer == nil && strings.Contains(contentType, "+") { - slashPos := strings.Index(contentType, "/") - plusPos := strings.LastIndex(contentType, "+") - contentType = contentType[:slashPos+1] + contentType[plusPos+1:] - lexer = internal.MatchMimeType(contentType) - } - - if lexer == nil { - token.Type = Text - } else { - subIterator, err = lexer.Tokenise(nil, token.Value) - if err != nil { - panic(err) - } - return EOF - } - } - } - return token - }, nil -} diff --git a/vendor/github.com/alecthomas/chroma/lexers/h/hy.go b/vendor/github.com/alecthomas/chroma/lexers/h/hy.go deleted file mode 100644 index 17385e8..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/h/hy.go +++ /dev/null @@ -1,51 +0,0 @@ -package h - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Hy lexer. -var Hy = internal.Register(MustNewLexer( - &Config{ - Name: "Hy", - Aliases: []string{"hylang"}, - Filenames: []string{"*.hy"}, - MimeTypes: []string{"text/x-hy", "application/x-hy"}, - }, - Rules{ - "root": { - {`;.*$`, CommentSingle, nil}, - {`[,\s]+`, Text, nil}, - {`-?\d+\.\d+`, LiteralNumberFloat, nil}, - {`-?\d+`, LiteralNumberInteger, nil}, - {`0[0-7]+j?`, LiteralNumberOct, nil}, - {`0[xX][a-fA-F0-9]+`, LiteralNumberHex, nil}, - {`"(\\\\|\\"|[^"])*"`, LiteralString, nil}, - {`'(?!#)[\w!$%*+<=>?/.#-]+`, LiteralStringSymbol, nil}, - {`\\(.|[a-z]+)`, LiteralStringChar, nil}, - {`^(\s*)([rRuU]{,2}"""(?:.|\n)*?""")`, ByGroups(Text, LiteralStringDoc), nil}, - {`^(\s*)([rRuU]{,2}'''(?:.|\n)*?''')`, ByGroups(Text, LiteralStringDoc), nil}, - {`::?(?!#)[\w!$%*+<=>?/.#-]+`, LiteralStringSymbol, nil}, - {"~@|[`\\'#^~&@]", Operator, nil}, - Include("py-keywords"), - Include("py-builtins"), - {Words(``, ` `, `cond`, `for`, `->`, `->>`, `car`, `cdr`, `first`, `rest`, `let`, `when`, `unless`, `import`, `do`, `progn`, `get`, `slice`, `assoc`, `with-decorator`, `,`, `list_comp`, `kwapply`, `~`, `is`, `in`, `is-not`, `not-in`, `quasiquote`, `unquote`, `unquote-splice`, `quote`, `|`, `<<=`, `>>=`, `foreach`, `while`, `eval-and-compile`, `eval-when-compile`), Keyword, nil}, - {Words(``, ` `, `def`, `defn`, `defun`, `defmacro`, `defclass`, `lambda`, `fn`, `setv`), KeywordDeclaration, nil}, - {Words(``, ` `, `cycle`, `dec`, `distinct`, `drop`, `even?`, `filter`, `inc`, `instance?`, `iterable?`, `iterate`, `iterator?`, `neg?`, `none?`, `nth`, `numeric?`, `odd?`, `pos?`, `remove`, `repeat`, `repeatedly`, `take`, `take_nth`, `take_while`, `zero?`), NameBuiltin, nil}, - {`(?<=\()(?!#)[\w!$%*+<=>?/.#-]+`, NameFunction, nil}, - {`(?!#)[\w!$%*+<=>?/.#-]+`, NameVariable, nil}, - {`(\[|\])`, Punctuation, nil}, - {`(\{|\})`, Punctuation, nil}, - {`(\(|\))`, Punctuation, nil}, - }, - "py-keywords": { - {Words(``, `\b`, `assert`, `break`, `continue`, `del`, `elif`, `else`, `except`, `exec`, `finally`, `for`, `global`, `if`, `lambda`, `pass`, `print`, `raise`, `return`, `try`, `while`, `yield`, `yield from`, `as`, `with`), Keyword, nil}, - }, - "py-builtins": { - {Words(`(??@^|_~:\\]).*?)$`, ByGroups(Text, CommentSingle), nil}, - {`(\s*)(\|{3}.*?)$`, ByGroups(Text, CommentSingle), nil}, - {`(\s*)(\{-)`, ByGroups(Text, CommentMultiline), Push("comment")}, - {`^(\s*)([^\s(){}]+)(\s*)(:)(\s*)`, ByGroups(Text, NameFunction, Text, OperatorWord, Text), nil}, - {`\b(case|class|data|default|using|do|else|if|in|infix[lr]?|instance|rewrite|auto|namespace|codata|mutual|private|public|abstract|total|partial|let|proof|of|then|static|where|_|with|pattern|term|syntax|prefix|postulate|parameters|record|dsl|impossible|implicit|tactics|intros|intro|compute|refine|exact|trivial)(?!\')\b`, KeywordReserved, nil}, - {`(import|module)(\s+)`, ByGroups(KeywordReserved, Text), Push("module")}, - {`('')?[A-Z][\w\']*`, KeywordType, nil}, - {`[a-z][\w\']*`, Text, nil}, - {`(<-|::|->|=>|=)`, OperatorWord, nil}, - {`([(){}\[\]:!#$%&*+.\\/<=>?@^|~-]+)`, OperatorWord, nil}, - {`\d+[eE][+-]?\d+`, LiteralNumberFloat, nil}, - {`\d+\.\d+([eE][+-]?\d+)?`, LiteralNumberFloat, nil}, - {`0[xX][\da-fA-F]+`, LiteralNumberHex, nil}, - {`\d+`, LiteralNumberInteger, nil}, - {`'`, LiteralStringChar, Push("character")}, - {`"`, LiteralString, Push("string")}, - {`[^\s(){}]+`, Text, nil}, - {`\s+?`, Text, nil}, - }, - "module": { - {`\s+`, Text, nil}, - {`([A-Z][\w.]*)(\s+)(\()`, ByGroups(NameNamespace, Text, Punctuation), Push("funclist")}, - {`[A-Z][\w.]*`, NameNamespace, Pop(1)}, - }, - "funclist": { - {`\s+`, Text, nil}, - {`[A-Z]\w*`, KeywordType, nil}, - {`(_[\w\']+|[a-z][\w\']*)`, NameFunction, nil}, - {`--.*$`, CommentSingle, nil}, - {`\{-`, CommentMultiline, Push("comment")}, - {`,`, Punctuation, nil}, - {`[:!#$%&*+.\\/<=>?@^|~-]+`, Operator, nil}, - {`\(`, Punctuation, Push("funclist", "funclist")}, - {`\)`, Punctuation, Pop(2)}, - }, - "comment": { - {`[^-{}]+`, CommentMultiline, nil}, - {`\{-`, CommentMultiline, Push()}, - {`-\}`, CommentMultiline, Pop(1)}, - {`[-{}]`, CommentMultiline, nil}, - }, - "character": { - {`[^\\']`, LiteralStringChar, nil}, - {`\\`, LiteralStringEscape, Push("escape")}, - {`'`, LiteralStringChar, Pop(1)}, - }, - "string": { - {`[^\\"]+`, LiteralString, nil}, - {`\\`, LiteralStringEscape, Push("escape")}, - {`"`, LiteralString, Pop(1)}, - }, - "escape": { - {`[abfnrtv"\'&\\]`, LiteralStringEscape, Pop(1)}, - {`\^[][A-Z@^_]`, LiteralStringEscape, Pop(1)}, - {`NUL|SOH|[SE]TX|EOT|ENQ|ACK|BEL|BS|HT|LF|VT|FF|CR|S[OI]|DLE|DC[1-4]|NAK|SYN|ETB|CAN|EM|SUB|ESC|[FGRU]S|SP|DEL`, LiteralStringEscape, Pop(1)}, - {`o[0-7]+`, LiteralStringEscape, Pop(1)}, - {`x[\da-fA-F]+`, LiteralStringEscape, Pop(1)}, - {`\d+`, LiteralStringEscape, Pop(1)}, - {`\s+\\`, LiteralStringEscape, Pop(1)}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/i/igor.go b/vendor/github.com/alecthomas/chroma/lexers/i/igor.go deleted file mode 100644 index d704a4f..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/i/igor.go +++ /dev/null @@ -1,32 +0,0 @@ -package i - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Igor lexer. -var Igor = internal.Register(MustNewLexer( - &Config{ - Name: "Igor", - Aliases: []string{"igor", "igorpro"}, - Filenames: []string{"*.ipf"}, - MimeTypes: []string{"text/ipf"}, - CaseInsensitive: true, - }, - Rules{ - "root": { - {`//.*$`, CommentSingle, nil}, - {`"([^"\\]|\\.)*"`, LiteralString, nil}, - {Words(`\b`, `\b`, `if`, `else`, `elseif`, `endif`, `for`, `endfor`, `strswitch`, `switch`, `case`, `default`, `endswitch`, `do`, `while`, `try`, `catch`, `endtry`, `break`, `continue`, `return`, `AbortOnRTE`, `AbortOnValue`), Keyword, nil}, - {Words(`\b`, `\b`, `variable`, `string`, `constant`, `strconstant`, `NVAR`, `SVAR`, `WAVE`, `STRUCT`, `dfref`, `funcref`, `char`, `uchar`, `int16`, `uint16`, `int32`, `uint32`, `int64`, `uint64`, `float`, `double`), KeywordType, nil}, - {Words(`\b`, `\b`, `override`, `ThreadSafe`, `MultiThread`, `static`, `Proc`, `Picture`, `Prompt`, `DoPrompt`, `macro`, `window`, `function`, `end`, `Structure`, `EndStructure`, `EndMacro`, `Menu`, `SubMenu`), KeywordReserved, nil}, - {Words(`\b`, `\b`, `Abort`, `AddFIFOData`, `AddFIFOVectData`, `AddMovieAudio`, `AddMovieFrame`, `AddWavesToBoxPlot`, `AddWavesToViolinPlot`, `AdoptFiles`, `APMath`, `Append`, `AppendBoxPlot`, `AppendImage`, `AppendLayoutObject`, `AppendMatrixContour`, `AppendText`, `AppendToGizmo`, `AppendToGraph`, `AppendToLayout`, `AppendToTable`, `AppendViolinPlot`, `AppendXYZContour`, `AutoPositionWindow`, `AxonTelegraphFindServers`, `BackgroundInfo`, `Beep`, `BoundingBall`, `BoxSmooth`, `BrowseURL`, `BuildMenu`, `Button`, `cd`, `Chart`, `CheckBox`, `CheckDisplayed`, `ChooseColor`, `Close`, `CloseHelp`, `CloseMovie`, `CloseProc`, `ColorScale`, `ColorTab2Wave`, `Concatenate`, `ControlBar`, `ControlInfo`, `ControlUpdate`, `ConvertGlobalStringTextEncoding`, `ConvexHull`, `Convolve`, `CopyDimLabels`, `CopyFile`, `CopyFolder`, `CopyScales`, `Correlate`, `CreateAliasShortcut`, `CreateBrowser`, `Cross`, `CtrlBackground`, `CtrlFIFO`, `CtrlNamedBackground`, `Cursor`, `CurveFit`, `CustomControl`, `CWT`, `DAQmx_AI_SetupReader`, `DAQmx_AO_SetOutputs`, `DAQmx_CTR_CountEdges`, `DAQmx_CTR_OutputPulse`, `DAQmx_CTR_Period`, `DAQmx_CTR_PulseWidth`, `DAQmx_DIO_Config`, `DAQmx_DIO_WriteNewData`, `DAQmx_Scan`, `DAQmx_WaveformGen`, `Debugger`, `DebuggerOptions`, `DefaultFont`, `DefaultGuiControls`, `DefaultGuiFont`, `DefaultTextEncoding`, `DefineGuide`, `DelayUpdate`, `DeleteAnnotations`, `DeleteFile`, `DeleteFolder`, `DeletePoints`, `Differentiate`, `dir`, `Display`, `DisplayHelpTopic`, `DisplayProcedure`, `DoAlert`, `DoIgorMenu`, `DoUpdate`, `DoWindow`, `DoXOPIdle`, `DPSS`, `DrawAction`, `DrawArc`, `DrawBezier`, `DrawLine`, `DrawOval`, `DrawPICT`, `DrawPoly`, `DrawRect`, `DrawRRect`, `DrawText`, `DrawUserShape`, `DSPDetrend`, `DSPPeriodogram`, `Duplicate`, `DuplicateDataFolder`, `DWT`, `EdgeStats`, `Edit`, `ErrorBars`, `EstimatePeakSizes`, `Execute`, `ExecuteScriptText`, `ExperimentInfo`, `ExperimentModified`, `ExportGizmo`, `Extract`, `FastGaussTransform`, `FastOp`, `FBinRead`, `FBinWrite`, `FFT`, `FGetPos`, `FIFOStatus`, `FIFO2Wave`, `FilterFIR`, `FilterIIR`, `FindAPeak`, `FindContour`, `FindDuplicates`, `FindLevel`, `FindLevels`, `FindPeak`, `FindPointsInPoly`, `FindRoots`, `FindSequence`, `FindValue`, `FMaxFlat`, `FPClustering`, `fprintf`, `FReadLine`, `FSetPos`, `FStatus`, `FTPCreateDirectory`, `FTPDelete`, `FTPDownload`, `FTPUpload`, `FuncFit`, `FuncFitMD`, `GBLoadWave`, `GetAxis`, `GetCamera`, `GetFileFolderInfo`, `GetGizmo`, `GetLastUserMenuInfo`, `GetMarquee`, `GetMouse`, `GetSelection`, `GetWindow`, `GISCreateVectorLayer`, `GISGetRasterInfo`, `GISGetRegisteredFileInfo`, `GISGetVectorLayerInfo`, `GISLoadRasterData`, `GISLoadVectorData`, `GISRasterizeVectorData`, `GISRegisterFile`, `GISTransformCoords`, `GISUnRegisterFile`, `GISWriteFieldData`, `GISWriteGeometryData`, `GISWriteRaster`, `GPIBReadBinaryWave2`, `GPIBReadBinary2`, `GPIBReadWave2`, `GPIBRead2`, `GPIBWriteBinaryWave2`, `GPIBWriteBinary2`, `GPIBWriteWave2`, `GPIBWrite2`, `GPIB2`, `GraphNormal`, `GraphWaveDraw`, `GraphWaveEdit`, `Grep`, `GroupBox`, `Hanning`, `HDFInfo`, `HDFReadImage`, `HDFReadSDS`, `HDFReadVset`, `HDF5CloseFile`, `HDF5CloseGroup`, `HDF5ConvertColors`, `HDF5CreateFile`, `HDF5CreateGroup`, `HDF5CreateLink`, `HDF5Dump`, `HDF5DumpErrors`, `HDF5DumpState`, `HDF5FlushFile`, `HDF5ListAttributes`, `HDF5ListGroup`, `HDF5LoadData`, `HDF5LoadGroup`, `HDF5LoadImage`, `HDF5OpenFile`, `HDF5OpenGroup`, `HDF5SaveData`, `HDF5SaveGroup`, `HDF5SaveImage`, `HDF5TestOperation`, `HDF5UnlinkObject`, `HideIgorMenus`, `HideInfo`, `HideProcedures`, `HideTools`, `HilbertTransform`, `Histogram`, `ICA`, `IFFT`, `ImageAnalyzeParticles`, `ImageBlend`, `ImageBoundaryToMask`, `ImageComposite`, `ImageEdgeDetection`, `ImageFileInfo`, `ImageFilter`, `ImageFocus`, `ImageFromXYZ`, `ImageGenerateROIMask`, `ImageGLCM`, `ImageHistModification`, `ImageHistogram`, `ImageInterpolate`, `ImageLineProfile`, `ImageLoad`, `ImageMorphology`, `ImageRegistration`, `ImageRemoveBackground`, `ImageRestore`, `ImageRotate`, `ImageSave`, `ImageSeedFill`, `ImageSkeleton3d`, `ImageSnake`, `ImageStats`, `ImageThreshold`, `ImageTransform`, `ImageUnwrapPhase`, `ImageWindow`, `IndexSort`, `InsertPoints`, `Integrate`, `IntegrateODE`, `Integrate2D`, `Interpolate2`, `Interpolate3D`, `Interp3DPath`, `ITCCloseAll2`, `ITCCloseDevice2`, `ITCConfigAllChannels2`, `ITCConfigChannelReset2`, `ITCConfigChannelUpload2`, `ITCConfigChannel2`, `ITCFIFOAvailableAll2`, `ITCFIFOAvailable2`, `ITCGetAllChannelsConfig2`, `ITCGetChannelConfig2`, `ITCGetCurrentDevice2`, `ITCGetDeviceInfo2`, `ITCGetDevices2`, `ITCGetErrorString2`, `ITCGetSerialNumber2`, `ITCGetState2`, `ITCGetVersions2`, `ITCInitialize2`, `ITCOpenDevice2`, `ITCReadADC2`, `ITCReadDigital2`, `ITCReadTimer2`, `ITCSelectDevice2`, `ITCSetDAC2`, `ITCSetGlobals2`, `ITCSetModes2`, `ITCSetState2`, `ITCStartAcq2`, `ITCStopAcq2`, `ITCUpdateFIFOPositionAll2`, `ITCUpdateFIFOPosition2`, `ITCWriteDigital2`, `JCAMPLoadWave`, `JointHistogram`, `KillBackground`, `KillControl`, `KillDataFolder`, `KillFIFO`, `KillFreeAxis`, `KillPath`, `KillPICTs`, `KillStrings`, `KillVariables`, `KillWaves`, `KillWindow`, `KMeans`, `Label`, `Layout`, `LayoutPageAction`, `LayoutSlideShow`, `Legend`, `LinearFeedbackShiftRegister`, `ListBox`, `LoadData`, `LoadPackagePreferences`, `LoadPICT`, `LoadWave`, `Loess`, `LombPeriodogram`, `Make`, `MakeIndex`, `MarkPerfTestTime`, `MatrixConvolve`, `MatrixCorr`, `MatrixEigenV`, `MatrixFilter`, `MatrixGaussJ`, `MatrixGLM`, `MatrixInverse`, `MatrixLinearSolve`, `MatrixLinearSolveTD`, `MatrixLLS`, `MatrixLUBkSub`, `MatrixLUD`, `MatrixLUDTD`, `MatrixMultiply`, `MatrixOP`, `MatrixSchur`, `MatrixSolve`, `MatrixSVBkSub`, `MatrixSVD`, `MatrixTranspose`, `MCC_FindServers`, `MeasureStyledText`, `MFR_CheckForNewBricklets`, `MFR_CloseResultFile`, `MFR_CreateOverviewTable`, `MFR_GetBrickletCount`, `MFR_GetBrickletData`, `MFR_GetBrickletDeployData`, `MFR_GetBrickletMetaData`, `MFR_GetBrickletRawData`, `MFR_GetReportTemplate`, `MFR_GetResultFileMetaData`, `MFR_GetResultFileName`, `MFR_GetVernissageVersion`, `MFR_GetVersion`, `MFR_GetXOPErrorMessage`, `MFR_OpenResultFile`, `MLLoadWave`, `Modify`, `ModifyBoxPlot`, `ModifyBrowser`, `ModifyCamera`, `ModifyContour`, `ModifyControl`, `ModifyControlList`, `ModifyFreeAxis`, `ModifyGizmo`, `ModifyGraph`, `ModifyImage`, `ModifyLayout`, `ModifyPanel`, `ModifyTable`, `ModifyViolinPlot`, `ModifyWaterfall`, `MoveDataFolder`, `MoveFile`, `MoveFolder`, `MoveString`, `MoveSubwindow`, `MoveVariable`, `MoveWave`, `MoveWindow`, `MultiTaperPSD`, `MultiThreadingControl`, `NC_CloseFile`, `NC_DumpErrors`, `NC_Inquire`, `NC_ListAttributes`, `NC_ListObjects`, `NC_LoadData`, `NC_OpenFile`, `NeuralNetworkRun`, `NeuralNetworkTrain`, `NewCamera`, `NewDataFolder`, `NewFIFO`, `NewFIFOChan`, `NewFreeAxis`, `NewGizmo`, `NewImage`, `NewLayout`, `NewMovie`, `NewNotebook`, `NewPanel`, `NewPath`, `NewWaterfall`, `NILoadWave`, `NI4882`, `Note`, `Notebook`, `NotebookAction`, `Open`, `OpenHelp`, `OpenNotebook`, `Optimize`, `ParseOperationTemplate`, `PathInfo`, `PauseForUser`, `PauseUpdate`, `PCA`, `PlayMovie`, `PlayMovieAction`, `PlaySound`, `PopupContextualMenu`, `PopupMenu`, `Preferences`, `PrimeFactors`, `Print`, `printf`, `PrintGraphs`, `PrintLayout`, `PrintNotebook`, `PrintSettings`, `PrintTable`, `Project`, `PulseStats`, `PutScrapText`, `pwd`, `Quit`, `RatioFromNumber`, `Redimension`, `Remez`, `Remove`, `RemoveContour`, `RemoveFromGizmo`, `RemoveFromGraph`, `RemoveFromLayout`, `RemoveFromTable`, `RemoveImage`, `RemoveLayoutObjects`, `RemovePath`, `Rename`, `RenameDataFolder`, `RenamePath`, `RenamePICT`, `RenameWindow`, `ReorderImages`, `ReorderTraces`, `ReplaceText`, `ReplaceWave`, `Resample`, `ResumeUpdate`, `Reverse`, `Rotate`, `Save`, `SaveData`, `SaveExperiment`, `SaveGizmoCopy`, `SaveGraphCopy`, `SaveNotebook`, `SavePackagePreferences`, `SavePICT`, `SaveTableCopy`, `SetActiveSubwindow`, `SetAxis`, `SetBackground`, `SetDashPattern`, `SetDataFolder`, `SetDimLabel`, `SetDrawEnv`, `SetDrawLayer`, `SetFileFolderInfo`, `SetFormula`, `SetIdlePeriod`, `SetIgorHook`, `SetIgorMenuMode`, `SetIgorOption`, `SetMarquee`, `SetProcessSleep`, `SetRandomSeed`, `SetScale`, `SetVariable`, `SetWaveLock`, `SetWaveTextEncoding`, `SetWindow`, `ShowIgorMenus`, `ShowInfo`, `ShowTools`, `Silent`, `Sleep`, `Slider`, `Smooth`, `SmoothCustom`, `Sort`, `SortColumns`, `SoundInRecord`, `SoundInSet`, `SoundInStartChart`, `SoundInStatus`, `SoundInStopChart`, `SoundLoadWave`, `SoundSaveWave`, `SphericalInterpolate`, `SphericalTriangulate`, `SplitString`, `SplitWave`, `sprintf`, `SQLHighLevelOp`, `sscanf`, `Stack`, `StackWindows`, `StatsAngularDistanceTest`, `StatsANOVA1Test`, `StatsANOVA2NRTest`, `StatsANOVA2RMTest`, `StatsANOVA2Test`, `StatsChiTest`, `StatsCircularCorrelationTest`, `StatsCircularMeans`, `StatsCircularMoments`, `StatsCircularTwoSampleTest`, `StatsCochranTest`, `StatsContingencyTable`, `StatsDIPTest`, `StatsDunnettTest`, `StatsFriedmanTest`, `StatsFTest`, `StatsHodgesAjneTest`, `StatsJBTest`, `StatsKDE`, `StatsKendallTauTest`, `StatsKSTest`, `StatsKWTest`, `StatsLinearCorrelationTest`, `StatsLinearRegression`, `StatsMultiCorrelationTest`, `StatsNPMCTest`, `StatsNPNominalSRTest`, `StatsQuantiles`, `StatsRankCorrelationTest`, `StatsResample`, `StatsSample`, `StatsScheffeTest`, `StatsShapiroWilkTest`, `StatsSignTest`, `StatsSRTest`, `StatsTTest`, `StatsTukeyTest`, `StatsVariancesTest`, `StatsWatsonUSquaredTest`, `StatsWatsonWilliamsTest`, `StatsWheelerWatsonTest`, `StatsWilcoxonRankTest`, `StatsWRCorrelationTest`, `STFT`, `String`, `StructFill`, `StructGet`, `StructPut`, `SumDimension`, `SumSeries`, `TabControl`, `Tag`, `TDMLoadData`, `TDMSaveData`, `TextBox`, `ThreadGroupPutDF`, `ThreadStart`, `TickWavesFromAxis`, `Tile`, `TileWindows`, `TitleBox`, `ToCommandLine`, `ToolsGrid`, `Triangulate3d`, `Unwrap`, `URLRequest`, `ValDisplay`, `Variable`, `VDTClosePort2`, `VDTGetPortList2`, `VDTGetStatus2`, `VDTOpenPort2`, `VDTOperationsPort2`, `VDTReadBinaryWave2`, `VDTReadBinary2`, `VDTReadHexWave2`, `VDTReadHex2`, `VDTReadWave2`, `VDTRead2`, `VDTTerminalPort2`, `VDTWriteBinaryWave2`, `VDTWriteBinary2`, `VDTWriteHexWave2`, `VDTWriteHex2`, `VDTWriteWave2`, `VDTWrite2`, `VDT2`, `VISAControl`, `VISARead`, `VISAReadBinary`, `VISAReadBinaryWave`, `VISAReadWave`, `VISAWrite`, `VISAWriteBinary`, `VISAWriteBinaryWave`, `VISAWriteWave`, `WaveMeanStdv`, `WaveStats`, `WaveTransform`, `wfprintf`, `WignerTransform`, `WindowFunction`, `XLLoadWave`), NameClass, nil}, - {Words(`\b`, `\b`, `abs`, `acos`, `acosh`, `AddListItem`, `AiryA`, `AiryAD`, `AiryB`, `AiryBD`, `alog`, `AnnotationInfo`, `AnnotationList`, `area`, `areaXY`, `asin`, `asinh`, `atan`, `atanh`, `atan2`, `AxisInfo`, `AxisList`, `AxisValFromPixel`, `AxonTelegraphAGetDataNum`, `AxonTelegraphAGetDataString`, `AxonTelegraphAGetDataStruct`, `AxonTelegraphGetDataNum`, `AxonTelegraphGetDataString`, `AxonTelegraphGetDataStruct`, `AxonTelegraphGetTimeoutMs`, `AxonTelegraphSetTimeoutMs`, `Base64Decode`, `Base64Encode`, `Besseli`, `Besselj`, `Besselk`, `Bessely`, `beta`, `betai`, `BinarySearch`, `BinarySearchInterp`, `binomial`, `binomialln`, `binomialNoise`, `cabs`, `CaptureHistory`, `CaptureHistoryStart`, `ceil`, `cequal`, `char2num`, `chebyshev`, `chebyshevU`, `CheckName`, `ChildWindowList`, `CleanupName`, `cmplx`, `cmpstr`, `conj`, `ContourInfo`, `ContourNameList`, `ContourNameToWaveRef`, `ContourZ`, `ControlNameList`, `ConvertTextEncoding`, `cos`, `cosh`, `cosIntegral`, `cot`, `coth`, `CountObjects`, `CountObjectsDFR`, `cpowi`, `CreationDate`, `csc`, `csch`, `CsrInfo`, `CsrWave`, `CsrWaveRef`, `CsrXWave`, `CsrXWaveRef`, `CTabList`, `DataFolderDir`, `DataFolderExists`, `DataFolderRefsEqual`, `DataFolderRefStatus`, `date`, `datetime`, `DateToJulian`, `date2secs`, `Dawson`, `defined`, `deltax`, `digamma`, `dilogarithm`, `DimDelta`, `DimOffset`, `DimSize`, `ei`, `enoise`, `equalWaves`, `erf`, `erfc`, `erfcw`, `exists`, `exp`, `expInt`, `expIntegralE1`, `expNoise`, `factorial`, `Faddeeva`, `fakedata`, `faverage`, `faverageXY`, `fDAQmx_AI_GetReader`, `fDAQmx_AO_UpdateOutputs`, `fDAQmx_ConnectTerminals`, `fDAQmx_CTR_Finished`, `fDAQmx_CTR_IsFinished`, `fDAQmx_CTR_IsPulseFinished`, `fDAQmx_CTR_ReadCounter`, `fDAQmx_CTR_ReadWithOptions`, `fDAQmx_CTR_SetPulseFrequency`, `fDAQmx_CTR_Start`, `fDAQmx_DeviceNames`, `fDAQmx_DIO_Finished`, `fDAQmx_DIO_PortWidth`, `fDAQmx_DIO_Read`, `fDAQmx_DIO_Write`, `fDAQmx_DisconnectTerminals`, `fDAQmx_ErrorString`, `fDAQmx_ExternalCalDate`, `fDAQmx_NumAnalogInputs`, `fDAQmx_NumAnalogOutputs`, `fDAQmx_NumCounters`, `fDAQmx_NumDIOPorts`, `fDAQmx_ReadChan`, `fDAQmx_ReadNamedChan`, `fDAQmx_ResetDevice`, `fDAQmx_ScanGetAvailable`, `fDAQmx_ScanGetNextIndex`, `fDAQmx_ScanStart`, `fDAQmx_ScanStop`, `fDAQmx_ScanWait`, `fDAQmx_ScanWaitWithTimeout`, `fDAQmx_SelfCalDate`, `fDAQmx_SelfCalibration`, `fDAQmx_WaveformStart`, `fDAQmx_WaveformStop`, `fDAQmx_WF_IsFinished`, `fDAQmx_WF_WaitUntilFinished`, `fDAQmx_WriteChan`, `FetchURL`, `FindDimLabel`, `FindListItem`, `floor`, `FontList`, `FontSizeHeight`, `FontSizeStringWidth`, `FresnelCos`, `FresnelSin`, `FuncRefInfo`, `FunctionInfo`, `FunctionList`, `FunctionPath`, `gamma`, `gammaEuler`, `gammaInc`, `gammaNoise`, `gammln`, `gammp`, `gammq`, `Gauss`, `Gauss1D`, `Gauss2D`, `gcd`, `GetBrowserLine`, `GetBrowserSelection`, `GetDataFolder`, `GetDataFolderDFR`, `GetDefaultFont`, `GetDefaultFontSize`, `GetDefaultFontStyle`, `GetDimLabel`, `GetEnvironmentVariable`, `GetErrMessage`, `GetFormula`, `GetIndependentModuleName`, `GetIndexedObjName`, `GetIndexedObjNameDFR`, `GetKeyState`, `GetRTErrMessage`, `GetRTError`, `GetRTLocation`, `GetRTLocInfo`, `GetRTStackInfo`, `GetScrapText`, `GetUserData`, `GetWavesDataFolder`, `GetWavesDataFolderDFR`, `GISGetAllFileFormats`, `GISSRefsAreEqual`, `GizmoInfo`, `GizmoScale`, `gnoise`, `GrepList`, `GrepString`, `GuideInfo`, `GuideNameList`, `Hash`, `hcsr`, `HDF5AttributeInfo`, `HDF5DatasetInfo`, `HDF5LibraryInfo`, `HDF5TypeInfo`, `hermite`, `hermiteGauss`, `HyperGNoise`, `HyperGPFQ`, `HyperG0F1`, `HyperG1F1`, `HyperG2F1`, `IgorInfo`, `IgorVersion`, `imag`, `ImageInfo`, `ImageNameList`, `ImageNameToWaveRef`, `IndependentModuleList`, `IndexedDir`, `IndexedFile`, `IndexToScale`, `Inf`, `Integrate1D`, `interp`, `Interp2D`, `Interp3D`, `inverseERF`, `inverseERFC`, `ItemsInList`, `JacobiCn`, `JacobiSn`, `JulianToDate`, `Laguerre`, `LaguerreA`, `LaguerreGauss`, `LambertW`, `LayoutInfo`, `leftx`, `LegendreA`, `limit`, `ListMatch`, `ListToTextWave`, `ListToWaveRefWave`, `ln`, `log`, `logNormalNoise`, `lorentzianNoise`, `LowerStr`, `MacroList`, `magsqr`, `MandelbrotPoint`, `MarcumQ`, `MatrixCondition`, `MatrixDet`, `MatrixDot`, `MatrixRank`, `MatrixTrace`, `max`, `MCC_AutoBridgeBal`, `MCC_AutoFastComp`, `MCC_AutoPipetteOffset`, `MCC_AutoSlowComp`, `MCC_AutoWholeCellComp`, `MCC_GetBridgeBalEnable`, `MCC_GetBridgeBalResist`, `MCC_GetFastCompCap`, `MCC_GetFastCompTau`, `MCC_GetHolding`, `MCC_GetHoldingEnable`, `MCC_GetMode`, `MCC_GetNeutralizationCap`, `MCC_GetNeutralizationEnable`, `MCC_GetOscKillerEnable`, `MCC_GetPipetteOffset`, `MCC_GetPrimarySignalGain`, `MCC_GetPrimarySignalHPF`, `MCC_GetPrimarySignalLPF`, `MCC_GetRsCompBandwidth`, `MCC_GetRsCompCorrection`, `MCC_GetRsCompEnable`, `MCC_GetRsCompPrediction`, `MCC_GetSecondarySignalGain`, `MCC_GetSecondarySignalLPF`, `MCC_GetSlowCompCap`, `MCC_GetSlowCompTau`, `MCC_GetSlowCompTauX20Enable`, `MCC_GetSlowCurrentInjEnable`, `MCC_GetSlowCurrentInjLevel`, `MCC_GetSlowCurrentInjSetlTime`, `MCC_GetWholeCellCompCap`, `MCC_GetWholeCellCompEnable`, `MCC_GetWholeCellCompResist`, `MCC_SelectMultiClamp700B`, `MCC_SetBridgeBalEnable`, `MCC_SetBridgeBalResist`, `MCC_SetFastCompCap`, `MCC_SetFastCompTau`, `MCC_SetHolding`, `MCC_SetHoldingEnable`, `MCC_SetMode`, `MCC_SetNeutralizationCap`, `MCC_SetNeutralizationEnable`, `MCC_SetOscKillerEnable`, `MCC_SetPipetteOffset`, `MCC_SetPrimarySignalGain`, `MCC_SetPrimarySignalHPF`, `MCC_SetPrimarySignalLPF`, `MCC_SetRsCompBandwidth`, `MCC_SetRsCompCorrection`, `MCC_SetRsCompEnable`, `MCC_SetRsCompPrediction`, `MCC_SetSecondarySignalGain`, `MCC_SetSecondarySignalLPF`, `MCC_SetSlowCompCap`, `MCC_SetSlowCompTau`, `MCC_SetSlowCompTauX20Enable`, `MCC_SetSlowCurrentInjEnable`, `MCC_SetSlowCurrentInjLevel`, `MCC_SetSlowCurrentInjSetlTime`, `MCC_SetTimeoutMs`, `MCC_SetWholeCellCompCap`, `MCC_SetWholeCellCompEnable`, `MCC_SetWholeCellCompResist`, `mean`, `median`, `min`, `mod`, `ModDate`, `MPFXEMGPeak`, `MPFXExpConvExpPeak`, `MPFXGaussPeak`, `MPFXLorenzianPeak`, `MPFXVoigtPeak`, `NameOfWave`, `NaN`, `NewFreeDataFolder`, `NewFreeWave`, `norm`, `NormalizeUnicode`, `note`, `NumberByKey`, `numpnts`, `numtype`, `NumVarOrDefault`, `num2char`, `num2istr`, `num2str`, `NVAR_Exists`, `OperationList`, `PadString`, `PanelResolution`, `ParamIsDefault`, `ParseFilePath`, `PathList`, `pcsr`, `Pi`, `PICTInfo`, `PICTList`, `PixelFromAxisVal`, `pnt2x`, `poissonNoise`, `poly`, `PolygonArea`, `poly2D`, `PossiblyQuoteName`, `ProcedureText`, `p2rect`, `qcsr`, `real`, `RemoveByKey`, `RemoveEnding`, `RemoveFromList`, `RemoveListItem`, `ReplaceNumberByKey`, `ReplaceString`, `ReplaceStringByKey`, `rightx`, `round`, `r2polar`, `sawtooth`, `scaleToIndex`, `ScreenResolution`, `sec`, `sech`, `Secs2Date`, `Secs2Time`, `SelectNumber`, `SelectString`, `SetEnvironmentVariable`, `sign`, `sin`, `sinc`, `sinh`, `sinIntegral`, `SortList`, `SpecialCharacterInfo`, `SpecialCharacterList`, `SpecialDirPath`, `SphericalBessJ`, `SphericalBessJD`, `SphericalBessY`, `SphericalBessYD`, `SphericalHarmonics`, `SQLAllocHandle`, `SQLAllocStmt`, `SQLBinaryWavesToTextWave`, `SQLBindCol`, `SQLBindParameter`, `SQLBrowseConnect`, `SQLBulkOperations`, `SQLCancel`, `SQLCloseCursor`, `SQLColAttributeNum`, `SQLColAttributeStr`, `SQLColumnPrivileges`, `SQLColumns`, `SQLConnect`, `SQLDataSources`, `SQLDescribeCol`, `SQLDescribeParam`, `SQLDisconnect`, `SQLDriverConnect`, `SQLDrivers`, `SQLEndTran`, `SQLError`, `SQLExecDirect`, `SQLExecute`, `SQLFetch`, `SQLFetchScroll`, `SQLForeignKeys`, `SQLFreeConnect`, `SQLFreeEnv`, `SQLFreeHandle`, `SQLFreeStmt`, `SQLGetConnectAttrNum`, `SQLGetConnectAttrStr`, `SQLGetCursorName`, `SQLGetDataNum`, `SQLGetDataStr`, `SQLGetDescFieldNum`, `SQLGetDescFieldStr`, `SQLGetDescRec`, `SQLGetDiagFieldNum`, `SQLGetDiagFieldStr`, `SQLGetDiagRec`, `SQLGetEnvAttrNum`, `SQLGetEnvAttrStr`, `SQLGetFunctions`, `SQLGetInfoNum`, `SQLGetInfoStr`, `SQLGetStmtAttrNum`, `SQLGetStmtAttrStr`, `SQLGetTypeInfo`, `SQLMoreResults`, `SQLNativeSql`, `SQLNumParams`, `SQLNumResultCols`, `SQLNumResultRowsIfKnown`, `SQLNumRowsFetched`, `SQLParamData`, `SQLPrepare`, `SQLPrimaryKeys`, `SQLProcedureColumns`, `SQLProcedures`, `SQLPutData`, `SQLReinitialize`, `SQLRowCount`, `SQLSetConnectAttrNum`, `SQLSetConnectAttrStr`, `SQLSetCursorName`, `SQLSetDescFieldNum`, `SQLSetDescFieldStr`, `SQLSetDescRec`, `SQLSetEnvAttrNum`, `SQLSetEnvAttrStr`, `SQLSetPos`, `SQLSetStmtAttrNum`, `SQLSetStmtAttrStr`, `SQLSpecialColumns`, `SQLStatistics`, `SQLTablePrivileges`, `SQLTables`, `SQLTextWaveToBinaryWaves`, `SQLTextWaveTo2DBinaryWave`, `SQLUpdateBoundValues`, `SQLXOPCheckState`, `SQL2DBinaryWaveToTextWave`, `sqrt`, `StartMSTimer`, `StatsBetaCDF`, `StatsBetaPDF`, `StatsBinomialCDF`, `StatsBinomialPDF`, `StatsCauchyCDF`, `StatsCauchyPDF`, `StatsChiCDF`, `StatsChiPDF`, `StatsCMSSDCDF`, `StatsCorrelation`, `StatsDExpCDF`, `StatsDExpPDF`, `StatsErlangCDF`, `StatsErlangPDF`, `StatsErrorPDF`, `StatsEValueCDF`, `StatsEValuePDF`, `StatsExpCDF`, `StatsExpPDF`, `StatsFCDF`, `StatsFPDF`, `StatsFriedmanCDF`, `StatsGammaCDF`, `StatsGammaPDF`, `StatsGeometricCDF`, `StatsGeometricPDF`, `StatsGEVCDF`, `StatsGEVPDF`, `StatsHyperGCDF`, `StatsHyperGPDF`, `StatsInvBetaCDF`, `StatsInvBinomialCDF`, `StatsInvCauchyCDF`, `StatsInvChiCDF`, `StatsInvCMSSDCDF`, `StatsInvDExpCDF`, `StatsInvEValueCDF`, `StatsInvExpCDF`, `StatsInvFCDF`, `StatsInvFriedmanCDF`, `StatsInvGammaCDF`, `StatsInvGeometricCDF`, `StatsInvKuiperCDF`, `StatsInvLogisticCDF`, `StatsInvLogNormalCDF`, `StatsInvMaxwellCDF`, `StatsInvMooreCDF`, `StatsInvNBinomialCDF`, `StatsInvNCChiCDF`, `StatsInvNCFCDF`, `StatsInvNormalCDF`, `StatsInvParetoCDF`, `StatsInvPoissonCDF`, `StatsInvPowerCDF`, `StatsInvQCDF`, `StatsInvQpCDF`, `StatsInvRayleighCDF`, `StatsInvRectangularCDF`, `StatsInvSpearmanCDF`, `StatsInvStudentCDF`, `StatsInvTopDownCDF`, `StatsInvTriangularCDF`, `StatsInvUsquaredCDF`, `StatsInvVonMisesCDF`, `StatsInvWeibullCDF`, `StatsKuiperCDF`, `StatsLogisticCDF`, `StatsLogisticPDF`, `StatsLogNormalCDF`, `StatsLogNormalPDF`, `StatsMaxwellCDF`, `StatsMaxwellPDF`, `StatsMedian`, `StatsMooreCDF`, `StatsNBinomialCDF`, `StatsNBinomialPDF`, `StatsNCChiCDF`, `StatsNCChiPDF`, `StatsNCFCDF`, `StatsNCFPDF`, `StatsNCTCDF`, `StatsNCTPDF`, `StatsNormalCDF`, `StatsNormalPDF`, `StatsParetoCDF`, `StatsParetoPDF`, `StatsPermute`, `StatsPoissonCDF`, `StatsPoissonPDF`, `StatsPowerCDF`, `StatsPowerNoise`, `StatsPowerPDF`, `StatsQCDF`, `StatsQpCDF`, `StatsRayleighCDF`, `StatsRayleighPDF`, `StatsRectangularCDF`, `StatsRectangularPDF`, `StatsRunsCDF`, `StatsSpearmanRhoCDF`, `StatsStudentCDF`, `StatsStudentPDF`, `StatsTopDownCDF`, `StatsTriangularCDF`, `StatsTriangularPDF`, `StatsTrimmedMean`, `StatsUSquaredCDF`, `StatsVonMisesCDF`, `StatsVonMisesNoise`, `StatsVonMisesPDF`, `StatsWaldCDF`, `StatsWaldPDF`, `StatsWeibullCDF`, `StatsWeibullPDF`, `StopMSTimer`, `StringByKey`, `stringCRC`, `StringFromList`, `StringList`, `stringmatch`, `strlen`, `strsearch`, `StrVarOrDefault`, `str2num`, `StudentA`, `StudentT`, `sum`, `SVAR_Exists`, `TableInfo`, `TagVal`, `TagWaveRef`, `tan`, `tango_close_device`, `tango_command_inout`, `tango_compute_image_proj`, `tango_get_dev_attr_list`, `tango_get_dev_black_box`, `tango_get_dev_cmd_list`, `tango_get_dev_status`, `tango_get_dev_timeout`, `tango_get_error_stack`, `tango_open_device`, `tango_ping_device`, `tango_read_attribute`, `tango_read_attributes`, `tango_reload_dev_interface`, `tango_resume_attr_monitor`, `tango_set_attr_monitor_period`, `tango_set_dev_timeout`, `tango_start_attr_monitor`, `tango_stop_attr_monitor`, `tango_suspend_attr_monitor`, `tango_write_attribute`, `tango_write_attributes`, `tanh`, `TDMAddChannel`, `TDMAddGroup`, `TDMAppendDataValues`, `TDMAppendDataValuesTime`, `TDMChannelPropertyExists`, `TDMCloseChannel`, `TDMCloseFile`, `TDMCloseGroup`, `TDMCreateChannelProperty`, `TDMCreateFile`, `TDMCreateFileProperty`, `TDMCreateGroupProperty`, `TDMFilePropertyExists`, `TDMGetChannelPropertyNames`, `TDMGetChannelPropertyNum`, `TDMGetChannelPropertyStr`, `TDMGetChannelPropertyTime`, `TDMGetChannelPropertyType`, `TDMGetChannels`, `TDMGetChannelStringPropertyLen`, `TDMGetDataType`, `TDMGetDataValues`, `TDMGetDataValuesTime`, `TDMGetFilePropertyNames`, `TDMGetFilePropertyNum`, `TDMGetFilePropertyStr`, `TDMGetFilePropertyTime`, `TDMGetFilePropertyType`, `TDMGetFileStringPropertyLen`, `TDMGetGroupPropertyNames`, `TDMGetGroupPropertyNum`, `TDMGetGroupPropertyStr`, `TDMGetGroupPropertyTime`, `TDMGetGroupPropertyType`, `TDMGetGroups`, `TDMGetGroupStringPropertyLen`, `TDMGetLibraryErrorDescription`, `TDMGetNumChannelProperties`, `TDMGetNumChannels`, `TDMGetNumDataValues`, `TDMGetNumFileProperties`, `TDMGetNumGroupProperties`, `TDMGetNumGroups`, `TDMGroupPropertyExists`, `TDMOpenFile`, `TDMOpenFileEx`, `TDMRemoveChannel`, `TDMRemoveGroup`, `TDMReplaceDataValues`, `TDMReplaceDataValuesTime`, `TDMSaveFile`, `TDMSetChannelPropertyNum`, `TDMSetChannelPropertyStr`, `TDMSetChannelPropertyTime`, `TDMSetDataValues`, `TDMSetDataValuesTime`, `TDMSetFilePropertyNum`, `TDMSetFilePropertyStr`, `TDMSetFilePropertyTime`, `TDMSetGroupPropertyNum`, `TDMSetGroupPropertyStr`, `TDMSetGroupPropertyTime`, `TextEncodingCode`, `TextEncodingName`, `TextFile`, `ThreadGroupCreate`, `ThreadGroupGetDF`, `ThreadGroupGetDFR`, `ThreadGroupRelease`, `ThreadGroupWait`, `ThreadProcessorCount`, `ThreadReturnValue`, `ticks`, `time`, `TraceFromPixel`, `TraceInfo`, `TraceNameList`, `TraceNameToWaveRef`, `TrimString`, `trunc`, `UniqueName`, `UnPadString`, `UnsetEnvironmentVariable`, `UpperStr`, `URLDecode`, `URLEncode`, `VariableList`, `Variance`, `vcsr`, `viAssertIntrSignal`, `viAssertTrigger`, `viAssertUtilSignal`, `viClear`, `viClose`, `viDisableEvent`, `viDiscardEvents`, `viEnableEvent`, `viFindNext`, `viFindRsrc`, `viGetAttribute`, `viGetAttributeString`, `viGpibCommand`, `viGpibControlATN`, `viGpibControlREN`, `viGpibPassControl`, `viGpibSendIFC`, `viIn8`, `viIn16`, `viIn32`, `viLock`, `viMapAddress`, `viMapTrigger`, `viMemAlloc`, `viMemFree`, `viMoveIn8`, `viMoveIn16`, `viMoveIn32`, `viMoveOut8`, `viMoveOut16`, `viMoveOut32`, `viOpen`, `viOpenDefaultRM`, `viOut8`, `viOut16`, `viOut32`, `viPeek8`, `viPeek16`, `viPeek32`, `viPoke8`, `viPoke16`, `viPoke32`, `viRead`, `viReadSTB`, `viSetAttribute`, `viSetAttributeString`, `viStatusDesc`, `viTerminate`, `viUnlock`, `viUnmapAddress`, `viUnmapTrigger`, `viUsbControlIn`, `viUsbControlOut`, `viVxiCommandQuery`, `viWaitOnEvent`, `viWrite`, `VoigtFunc`, `VoigtPeak`, `WaveCRC`, `WaveDims`, `WaveExists`, `WaveHash`, `WaveInfo`, `WaveList`, `WaveMax`, `WaveMin`, `WaveName`, `WaveRefIndexed`, `WaveRefIndexedDFR`, `WaveRefsEqual`, `WaveRefWaveToList`, `WaveTextEncoding`, `WaveType`, `WaveUnits`, `WhichListItem`, `WinList`, `WinName`, `WinRecreation`, `WinType`, `wnoise`, `xcsr`, `XWaveName`, `XWaveRefFromTrace`, `x2pnt`, `zcsr`, `ZernikeR`, `zeromq_client_connect`, `zeromq_client_connect`, `zeromq_client_recv`, `zeromq_client_recv`, `zeromq_client_send`, `zeromq_client_send`, `zeromq_handler_start`, `zeromq_handler_start`, `zeromq_handler_stop`, `zeromq_handler_stop`, `zeromq_server_bind`, `zeromq_server_bind`, `zeromq_server_recv`, `zeromq_server_recv`, `zeromq_server_send`, `zeromq_server_send`, `zeromq_set`, `zeromq_set`, `zeromq_stop`, `zeromq_stop`, `zeromq_test_callfunction`, `zeromq_test_callfunction`, `zeromq_test_serializeWave`, `zeromq_test_serializeWave`, `zeta`), NameFunction, nil}, - {`^#(include|pragma|define|undef|ifdef|ifndef|if|elif|else|endif)`, NameDecorator, nil}, - {`[^a-z"/]+$`, Text, nil}, - {`.`, Text, nil}, - {`\n|\r`, Text, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/i/ini.go b/vendor/github.com/alecthomas/chroma/lexers/i/ini.go deleted file mode 100644 index 39b5edd..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/i/ini.go +++ /dev/null @@ -1,25 +0,0 @@ -package i - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Ini lexer. -var Ini = internal.Register(MustNewLexer( - &Config{ - Name: "INI", - Aliases: []string{"ini", "cfg", "dosini"}, - Filenames: []string{"*.ini", "*.cfg", "*.inf", ".gitconfig"}, - MimeTypes: []string{"text/x-ini", "text/inf"}, - }, - Rules{ - "root": { - {`\s+`, Text, nil}, - {`[;#].*`, CommentSingle, nil}, - {`\[.*?\]$`, Keyword, nil}, - {`(.*?)([ \t]*)(=)([ \t]*)(.*(?:\n[ \t].+)*)`, ByGroups(NameAttribute, Text, Operator, Text, LiteralString), nil}, - {`(.+?)$`, NameAttribute, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/i/io.go b/vendor/github.com/alecthomas/chroma/lexers/i/io.go deleted file mode 100644 index 840feea..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/i/io.go +++ /dev/null @@ -1,40 +0,0 @@ -package i - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Io lexer. -var Io = internal.Register(MustNewLexer( - &Config{ - Name: "Io", - Aliases: []string{"io"}, - Filenames: []string{"*.io"}, - MimeTypes: []string{"text/x-iosrc"}, - }, - Rules{ - "root": { - {`\n`, Text, nil}, - {`\s+`, Text, nil}, - {`//(.*?)\n`, CommentSingle, nil}, - {`#(.*?)\n`, CommentSingle, nil}, - {`/(\\\n)?[*](.|\n)*?[*](\\\n)?/`, CommentMultiline, nil}, - {`/\+`, CommentMultiline, Push("nestedcomment")}, - {`"(\\\\|\\"|[^"])*"`, LiteralString, nil}, - {`::=|:=|=|\(|\)|;|,|\*|-|\+|>|<|@|!|/|\||\^|\.|%|&|\[|\]|\{|\}`, Operator, nil}, - {`(clone|do|doFile|doString|method|for|if|else|elseif|then)\b`, Keyword, nil}, - {`(nil|false|true)\b`, NameConstant, nil}, - {`(Object|list|List|Map|args|Sequence|Coroutine|File)\b`, NameBuiltin, nil}, - {`[a-zA-Z_]\w*`, Name, nil}, - {`(\d+\.?\d*|\d*\.\d+)([eE][+-]?[0-9]+)?`, LiteralNumberFloat, nil}, - {`\d+`, LiteralNumberInteger, nil}, - }, - "nestedcomment": { - {`[^+/]+`, CommentMultiline, nil}, - {`/\+`, CommentMultiline, Push()}, - {`\+/`, CommentMultiline, Pop(1)}, - {`[+/]`, CommentMultiline, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/internal/api.go b/vendor/github.com/alecthomas/chroma/lexers/internal/api.go deleted file mode 100644 index 002997a..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/internal/api.go +++ /dev/null @@ -1,160 +0,0 @@ -// Package internal contains common API functions and structures shared between lexer packages. -package internal - -import ( - "path/filepath" - "sort" - "strings" - - "github.com/danwakefield/fnmatch" - - "github.com/alecthomas/chroma" -) - -// Registry of Lexers. -var Registry = struct { - Lexers chroma.Lexers - byName map[string]chroma.Lexer - byAlias map[string]chroma.Lexer -}{ - byName: map[string]chroma.Lexer{}, - byAlias: map[string]chroma.Lexer{}, -} - -// Names of all lexers, optionally including aliases. -func Names(withAliases bool) []string { - out := []string{} - for _, lexer := range Registry.Lexers { - config := lexer.Config() - out = append(out, config.Name) - if withAliases { - out = append(out, config.Aliases...) - } - } - sort.Strings(out) - return out -} - -// Get a Lexer by name, alias or file extension. -func Get(name string) chroma.Lexer { - candidates := chroma.PrioritisedLexers{} - if lexer := Registry.byName[name]; lexer != nil { - candidates = append(candidates, lexer) - } - if lexer := Registry.byAlias[name]; lexer != nil { - candidates = append(candidates, lexer) - } - if lexer := Registry.byName[strings.ToLower(name)]; lexer != nil { - candidates = append(candidates, lexer) - } - if lexer := Registry.byAlias[strings.ToLower(name)]; lexer != nil { - candidates = append(candidates, lexer) - } - // Try file extension. - if lexer := Match("filename." + name); lexer != nil { - candidates = append(candidates, lexer) - } - // Try exact filename. - if lexer := Match(name); lexer != nil { - candidates = append(candidates, lexer) - } - if len(candidates) == 0 { - return nil - } - sort.Sort(candidates) - return candidates[0] -} - -// MatchMimeType attempts to find a lexer for the given MIME type. -func MatchMimeType(mimeType string) chroma.Lexer { - matched := chroma.PrioritisedLexers{} - for _, l := range Registry.Lexers { - for _, lmt := range l.Config().MimeTypes { - if mimeType == lmt { - matched = append(matched, l) - } - } - } - if len(matched) != 0 { - sort.Sort(matched) - return matched[0] - } - return nil -} - -// Match returns the first lexer matching filename. -func Match(filename string) chroma.Lexer { - filename = filepath.Base(filename) - matched := chroma.PrioritisedLexers{} - // First, try primary filename matches. - for _, lexer := range Registry.Lexers { - config := lexer.Config() - for _, glob := range config.Filenames { - if fnmatch.Match(glob, filename, 0) { - matched = append(matched, lexer) - } - } - } - if len(matched) > 0 { - sort.Sort(matched) - return matched[0] - } - matched = nil - // Next, try filename aliases. - for _, lexer := range Registry.Lexers { - config := lexer.Config() - for _, glob := range config.AliasFilenames { - if fnmatch.Match(glob, filename, 0) { - matched = append(matched, lexer) - } - } - } - if len(matched) > 0 { - sort.Sort(matched) - return matched[0] - } - return nil -} - -// Analyse text content and return the "best" lexer.. -func Analyse(text string) chroma.Lexer { - var picked chroma.Lexer - highest := float32(0.0) - for _, lexer := range Registry.Lexers { - if analyser, ok := lexer.(chroma.Analyser); ok { - weight := analyser.AnalyseText(text) - if weight > highest { - picked = lexer - highest = weight - } - } - } - return picked -} - -// Register a Lexer with the global registry. -func Register(lexer chroma.Lexer) chroma.Lexer { - config := lexer.Config() - Registry.byName[config.Name] = lexer - Registry.byName[strings.ToLower(config.Name)] = lexer - for _, alias := range config.Aliases { - Registry.byAlias[alias] = lexer - Registry.byAlias[strings.ToLower(alias)] = lexer - } - Registry.Lexers = append(Registry.Lexers, lexer) - return lexer -} - -// Used for the fallback lexer as well as the explicit plaintext lexer -var PlaintextRules = chroma.Rules{ - "root": []chroma.Rule{ - {`.+`, chroma.Text, nil}, - {`\n`, chroma.Text, nil}, - }, -} - -// Fallback lexer if no other is found. -var Fallback chroma.Lexer = chroma.MustNewLexer(&chroma.Config{ - Name: "fallback", - Filenames: []string{"*"}, -}, PlaintextRules) diff --git a/vendor/github.com/alecthomas/chroma/lexers/j/j.go b/vendor/github.com/alecthomas/chroma/lexers/j/j.go deleted file mode 100644 index 686e53b..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/j/j.go +++ /dev/null @@ -1,73 +0,0 @@ -package j - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// J lexer. -var J = internal.Register(MustNewLexer( - &Config{ - Name: "J", - Aliases: []string{"j"}, - Filenames: []string{"*.ijs"}, - MimeTypes: []string{"text/x-j"}, - }, - Rules{ - "root": { - {`#!.*$`, CommentPreproc, nil}, - {`NB\..*`, CommentSingle, nil}, - {`\n+\s*Note`, CommentMultiline, Push("comment")}, - {`\s*Note.*`, CommentSingle, nil}, - {`\s+`, Text, nil}, - {`'`, LiteralString, Push("singlequote")}, - {`0\s+:\s*0|noun\s+define\s*$`, NameEntity, Push("nounDefinition")}, - {`(([1-4]|13)\s+:\s*0|(adverb|conjunction|dyad|monad|verb)\s+define)\b`, NameFunction, Push("explicitDefinition")}, - {Words(``, `\b[a-zA-Z]\w*\.`, `for_`, `goto_`, `label_`), NameLabel, nil}, - {Words(``, `\.`, `assert`, `break`, `case`, `catch`, `catchd`, `catcht`, `continue`, `do`, `else`, `elseif`, `end`, `fcase`, `for`, `if`, `return`, `select`, `throw`, `try`, `while`, `whilst`), NameLabel, nil}, - {`\b[a-zA-Z]\w*`, NameVariable, nil}, - {Words(``, ``, `ARGV`, `CR`, `CRLF`, `DEL`, `Debug`, `EAV`, `EMPTY`, `FF`, `JVERSION`, `LF`, `LF2`, `Note`, `TAB`, `alpha17`, `alpha27`, `apply`, `bind`, `boxopen`, `boxxopen`, `bx`, `clear`, `cutLF`, `cutopen`, `datatype`, `def`, `dfh`, `drop`, `each`, `echo`, `empty`, `erase`, `every`, `evtloop`, `exit`, `expand`, `fetch`, `file2url`, `fixdotdot`, `fliprgb`, `getargs`, `getenv`, `hfd`, `inv`, `inverse`, `iospath`, `isatty`, `isutf8`, `items`, `leaf`, `list`, `nameclass`, `namelist`, `names`, `nc`, `nl`, `on`, `pick`, `rows`, `script`, `scriptd`, `sign`, `sminfo`, `smoutput`, `sort`, `split`, `stderr`, `stdin`, `stdout`, `table`, `take`, `timespacex`, `timex`, `tmoutput`, `toCRLF`, `toHOST`, `toJ`, `tolower`, `toupper`, `type`, `ucp`, `ucpcount`, `usleep`, `utf8`, `uucp`), NameFunction, nil}, - {`=[.:]`, Operator, nil}, - {"[-=+*#$%@!~`^&\";:.,<>{}\\[\\]\\\\|/]", Operator, nil}, - {`[abCdDeEfHiIjLMoprtT]\.`, KeywordReserved, nil}, - {`[aDiLpqsStux]\:`, KeywordReserved, nil}, - {`(_[0-9])\:`, KeywordConstant, nil}, - {`\(`, Punctuation, Push("parentheses")}, - Include("numbers"), - }, - "comment": { - {`[^)]`, CommentMultiline, nil}, - {`^\)`, CommentMultiline, Pop(1)}, - {`[)]`, CommentMultiline, nil}, - }, - "explicitDefinition": { - {`\b[nmuvxy]\b`, NameDecorator, nil}, - Include("root"), - {`[^)]`, Name, nil}, - {`^\)`, NameLabel, Pop(1)}, - {`[)]`, Name, nil}, - }, - "numbers": { - {`\b_{1,2}\b`, LiteralNumber, nil}, - {`_?\d+(\.\d+)?(\s*[ejr]\s*)_?\d+(\.?=\d+)?`, LiteralNumber, nil}, - {`_?\d+\.(?=\d+)`, LiteralNumberFloat, nil}, - {`_?\d+x`, LiteralNumberIntegerLong, nil}, - {`_?\d+`, LiteralNumberInteger, nil}, - }, - "nounDefinition": { - {`[^)]`, LiteralString, nil}, - {`^\)`, NameLabel, Pop(1)}, - {`[)]`, LiteralString, nil}, - }, - "parentheses": { - {`\)`, Punctuation, Pop(1)}, - Include("explicitDefinition"), - Include("root"), - }, - "singlequote": { - {`[^']`, LiteralString, nil}, - {`''`, LiteralString, nil}, - {`'`, LiteralString, Pop(1)}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/j/java.go b/vendor/github.com/alecthomas/chroma/lexers/j/java.go deleted file mode 100644 index c6b9a76..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/j/java.go +++ /dev/null @@ -1,51 +0,0 @@ -package j - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Java lexer. -var Java = internal.Register(MustNewLexer( - &Config{ - Name: "Java", - Aliases: []string{"java"}, - Filenames: []string{"*.java"}, - MimeTypes: []string{"text/x-java"}, - DotAll: true, - }, - Rules{ - "root": { - {`[^\S\n]+`, Text, nil}, - {`//.*?\n`, CommentSingle, nil}, - {`/\*.*?\*/`, CommentMultiline, nil}, - {`(assert|break|case|catch|continue|default|do|else|finally|for|if|goto|instanceof|new|return|switch|this|throw|try|while)\b`, Keyword, nil}, - {`((?:(?:[^\W\d]|\$)[\w.\[\]$<>]*\s+)+?)((?:[^\W\d]|\$)[\w$]*)(\s*)(\()`, ByGroups(UsingSelf("root"), NameFunction, Text, Operator), nil}, - {`@[^\W\d][\w.]*`, NameDecorator, nil}, - {`(abstract|const|enum|extends|final|implements|native|private|protected|public|static|strictfp|super|synchronized|throws|transient|volatile)\b`, KeywordDeclaration, nil}, - {`(boolean|byte|char|double|float|int|long|short|void)\b`, KeywordType, nil}, - {`(package)(\s+)`, ByGroups(KeywordNamespace, Text), Push("import")}, - {`(true|false|null)\b`, KeywordConstant, nil}, - {`(class|interface)(\s+)`, ByGroups(KeywordDeclaration, Text), Push("class")}, - {`(import(?:\s+static)?)(\s+)`, ByGroups(KeywordNamespace, Text), Push("import")}, - {`"(\\\\|\\"|[^"])*"`, LiteralString, nil}, - {`'\\.'|'[^\\]'|'\\u[0-9a-fA-F]{4}'`, LiteralStringChar, nil}, - {`(\.)((?:[^\W\d]|\$)[\w$]*)`, ByGroups(Operator, NameAttribute), nil}, - {`^\s*([^\W\d]|\$)[\w$]*:`, NameLabel, nil}, - {`([^\W\d]|\$)[\w$]*`, Name, nil}, - {`([0-9][0-9_]*\.([0-9][0-9_]*)?|\.[0-9][0-9_]*)([eE][+\-]?[0-9][0-9_]*)?[fFdD]?|[0-9][eE][+\-]?[0-9][0-9_]*[fFdD]?|[0-9]([eE][+\-]?[0-9][0-9_]*)?[fFdD]|0[xX]([0-9a-fA-F][0-9a-fA-F_]*\.?|([0-9a-fA-F][0-9a-fA-F_]*)?\.[0-9a-fA-F][0-9a-fA-F_]*)[pP][+\-]?[0-9][0-9_]*[fFdD]?`, LiteralNumberFloat, nil}, - {`0[xX][0-9a-fA-F][0-9a-fA-F_]*[lL]?`, LiteralNumberHex, nil}, - {`0[bB][01][01_]*[lL]?`, LiteralNumberBin, nil}, - {`0[0-7_]+[lL]?`, LiteralNumberOct, nil}, - {`0|[1-9][0-9_]*[lL]?`, LiteralNumberInteger, nil}, - {`[~^*!%&\[\](){}<>|+=:;,./?-]`, Operator, nil}, - {`\n`, Text, nil}, - }, - "class": { - {`([^\W\d]|\$)[\w$]*`, NameClass, Pop(1)}, - }, - "import": { - {`[\w.]+\*?`, NameNamespace, Pop(1)}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/j/javascript.go b/vendor/github.com/alecthomas/chroma/lexers/j/javascript.go deleted file mode 100644 index 282501d..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/j/javascript.go +++ /dev/null @@ -1,73 +0,0 @@ -package j - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Javascript lexer. -var JavascriptRules = Rules{ - "commentsandwhitespace": { - {`\s+`, Text, nil}, - {``, `||`, `&&`, `>`, `<`, `>=`, `≥`, `<=`, `≤`, `==`, `===`, `≡`, `!=`, `≠`, `!==`, `≢`, `.>`, `.<`, `.>=`, `.≥`, `.<=`, `.≤`, `.==`, `.!=`, `.≠`, `.=`, `.!`, `<:`, `>:`, `∈`, `∉`, `∋`, `∌`, `⊆`, `⊈`, `⊂`, `⊄`, `⊊`, `|>`, `<|`, `:`, `+`, `-`, `.+`, `.-`, `|`, `∪`, `$`, `<<`, `>>`, `>>>`, `.<<`, `.>>`, `.>>>`, `*`, `/`, `./`, `÷`, `.÷`, `%`, `⋅`, `.%`, `.*`, `\`, `.\`, `&`, `∩`, `//`, `.//`, `^`, `.^`, `::`, `.`, `+`, `-`, `!`, `√`, `∛`, `∜`), Operator, nil}, - {`'(\\.|\\[0-7]{1,3}|\\x[a-fA-F0-9]{1,3}|\\u[a-fA-F0-9]{1,4}|\\U[a-fA-F0-9]{1,6}|[^\\\'\n])'`, LiteralStringChar, nil}, - {`(?<=[.\w)\]])\'+`, Operator, nil}, - {`"""`, LiteralString, Push("tqstring")}, - {`"`, LiteralString, Push("string")}, - {`r"""`, LiteralStringRegex, Push("tqregex")}, - {`r"`, LiteralStringRegex, Push("regex")}, - {"`", LiteralStringBacktick, Push("command")}, - {`((?:[a-zA-Z_¡-￿]|[𐀀-􏿿])(?:[a-zA-Z_0-9¡-￿]|[𐀀-􏿿])*!*)(')?`, ByGroups(Name, Operator), nil}, - {`(@(?:[a-zA-Z_¡-￿]|[𐀀-􏿿])(?:[a-zA-Z_0-9¡-￿]|[𐀀-􏿿])*!*)(')?`, ByGroups(NameDecorator, Operator), nil}, - {`(\d+(_\d+)+\.\d*|\d*\.\d+(_\d+)+)([eEf][+-]?[0-9]+)?`, LiteralNumberFloat, nil}, - {`(\d+\.\d*|\d*\.\d+)([eEf][+-]?[0-9]+)?`, LiteralNumberFloat, nil}, - {`\d+(_\d+)+[eEf][+-]?[0-9]+`, LiteralNumberFloat, nil}, - {`\d+[eEf][+-]?[0-9]+`, LiteralNumberFloat, nil}, - {`0b[01]+(_[01]+)+`, LiteralNumberBin, nil}, - {`0b[01]+`, LiteralNumberBin, nil}, - {`0o[0-7]+(_[0-7]+)+`, LiteralNumberOct, nil}, - {`0o[0-7]+`, LiteralNumberOct, nil}, - {`0x[a-fA-F0-9]+(_[a-fA-F0-9]+)+`, LiteralNumberHex, nil}, - {`0x[a-fA-F0-9]+`, LiteralNumberHex, nil}, - {`\d+(_\d+)+`, LiteralNumberInteger, nil}, - {`\d+`, LiteralNumberInteger, nil}, - }, - "blockcomment": { - {`[^=#]`, CommentMultiline, nil}, - {`#=`, CommentMultiline, Push()}, - {`=#`, CommentMultiline, Pop(1)}, - {`[=#]`, CommentMultiline, nil}, - }, - "string": { - {`"`, LiteralString, Pop(1)}, - {`\\([\\"\'$nrbtfav]|(x|u|U)[a-fA-F0-9]+|\d+)`, LiteralStringEscape, nil}, - {`\$(?:[a-zA-Z_¡-￿]|[𐀀-􏿿])(?:[a-zA-Z_0-9¡-￿]|[𐀀-􏿿])*!*`, LiteralStringInterpol, nil}, - {`(\$)(\()`, ByGroups(LiteralStringInterpol, Punctuation), Push("in-intp")}, - {`%[-#0 +]*([0-9]+|[*])?(\.([0-9]+|[*]))?[hlL]?[E-GXc-giorsux%]`, LiteralStringInterpol, nil}, - {`.|\s`, LiteralString, nil}, - }, - "tqstring": { - {`"""`, LiteralString, Pop(1)}, - {`\\([\\"\'$nrbtfav]|(x|u|U)[a-fA-F0-9]+|\d+)`, LiteralStringEscape, nil}, - {`\$(?:[a-zA-Z_¡-￿]|[𐀀-􏿿])(?:[a-zA-Z_0-9¡-￿]|[𐀀-􏿿])*!*`, LiteralStringInterpol, nil}, - {`(\$)(\()`, ByGroups(LiteralStringInterpol, Punctuation), Push("in-intp")}, - {`.|\s`, LiteralString, nil}, - }, - "regex": { - {`"`, LiteralStringRegex, Pop(1)}, - {`\\"`, LiteralStringRegex, nil}, - {`.|\s`, LiteralStringRegex, nil}, - }, - "tqregex": { - {`"""`, LiteralStringRegex, Pop(1)}, - {`.|\s`, LiteralStringRegex, nil}, - }, - "command": { - {"`", LiteralStringBacktick, Pop(1)}, - {`\$(?:[a-zA-Z_¡-￿]|[𐀀-􏿿])(?:[a-zA-Z_0-9¡-￿]|[𐀀-􏿿])*!*`, LiteralStringInterpol, nil}, - {`(\$)(\()`, ByGroups(LiteralStringInterpol, Punctuation), Push("in-intp")}, - {`.|\s`, LiteralStringBacktick, nil}, - }, - "in-intp": { - {`\(`, Punctuation, Push()}, - {`\)`, Punctuation, Pop(1)}, - Include("root"), - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/j/jungle.go b/vendor/github.com/alecthomas/chroma/lexers/j/jungle.go deleted file mode 100644 index 83d46a4..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/j/jungle.go +++ /dev/null @@ -1,50 +0,0 @@ -package j - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -var Jungle = internal.Register(MustNewLexer( - &Config{ - Name: "Jungle", - Aliases: []string{"jungle"}, - Filenames: []string{"*.jungle"}, - MimeTypes: []string{"text/x-jungle"}, - }, - Rules{ - "root": { - {`[^\S\n]+`, Text, nil}, - {`\n`, Text, nil}, - {`#(\n|[\w\W]*?[^#]\n)`, CommentSingle, nil}, - {`^(?=\S)`, None, Push("instruction")}, - {`[\.;\[\]\(\)\$]`, Punctuation, nil}, - {`[a-zA-Z_]\w*`, Name, nil}, - }, - "instruction": { - {`[^\S\n]+`, Text, nil}, - {`=`, Operator, Push("value")}, - {`(?=\S)`, None, Push("var")}, - Default(Pop(1)), - }, - "value": { - {`[^\S\n]+`, Text, nil}, - {`\$\(`, Punctuation, Push("var")}, - {`[;\[\]\(\)\$]`, Punctuation, nil}, - {`#(\n|[\w\W]*?[^#]\n)`, CommentSingle, nil}, - {`[\w_\-\.\/\\]+`, Text, nil}, - Default(Pop(1)), - }, - "var": { - {`[^\S\n]+`, Text, nil}, - {`\b(((re)?source|barrel)Path|excludeAnnotations|annotations|lang)\b`, NameBuiltin, nil}, - {`\bbase\b`, NameConstant, nil}, - {`\b(ind|zsm|hrv|ces|dan|dut|eng|fin|fre|deu|gre|hun|ita|nob|po[lr]|rus|sl[ov]|spa|swe|ara|heb|zh[st]|jpn|kor|tha|vie|bul|tur)`, NameConstant, nil}, - {`\b((semi)?round|rectangle)(-\d+x\d+)?\b`, NameConstant, nil}, - {`[\.;\[\]\(\$]`, Punctuation, nil}, - {`\)`, Punctuation, Pop(1)}, - {`[a-zA-Z_]\w*`, Name, nil}, - Default(Pop(1)), - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/k/kotlin.go b/vendor/github.com/alecthomas/chroma/lexers/k/kotlin.go deleted file mode 100644 index 56b7966..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/k/kotlin.go +++ /dev/null @@ -1,55 +0,0 @@ -package k - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -var kotlinIdentifier = "_A-Z\u00c0-\u00d6\u00d8-\u00de\u0100\u0102\u0104\u0106\u0108\u010a\u010c\u010e\u0110\u0112\u0114\u0116\u0118\u011a\u011c\u011e\u0120\u0122\u0124\u0126\u0128\u012a\u012c\u012e\u0130\u0132\u0134\u0136\u0139\u013b\u013d\u013f\u0141\u0143\u0145\u0147\u014a\u014c\u014e\u0150\u0152\u0154\u0156\u0158\u015a\u015c\u015e\u0160\u0162\u0164\u0166\u0168\u016a\u016c\u016e\u0170\u0172\u0174\u0176\u0178-\u0179\u017b\u017d\u0181-\u0182\u0184\u0186-\u0187\u0189-\u018b\u018e-\u0191\u0193-\u0194\u0196-\u0198\u019c-\u019d\u019f-\u01a0\u01a2\u01a4\u01a6-\u01a7\u01a9\u01ac\u01ae-\u01af\u01b1-\u01b3\u01b5\u01b7-\u01b8\u01bc\u01c4\u01c7\u01ca\u01cd\u01cf\u01d1\u01d3\u01d5\u01d7\u01d9\u01db\u01de\u01e0\u01e2\u01e4\u01e6\u01e8\u01ea\u01ec\u01ee\u01f1\u01f4\u01f6-\u01f8\u01fa\u01fc\u01fe\u0200\u0202\u0204\u0206\u0208\u020a\u020c\u020e\u0210\u0212\u0214\u0216\u0218\u021a\u021c\u021e\u0220\u0222\u0224\u0226\u0228\u022a\u022c\u022e\u0230\u0232\u023a-\u023b\u023d-\u023e\u0241\u0243-\u0246\u0248\u024a\u024c\u024e\u0370\u0372\u0376\u0386\u0388-\u038a\u038c\u038e-\u038f\u0391-\u03a1\u03a3-\u03ab\u03cf\u03d2-\u03d4\u03d8\u03da\u03dc\u03de\u03e0\u03e2\u03e4\u03e6\u03e8\u03ea\u03ec\u03ee\u03f4\u03f7\u03f9-\u03fa\u03fd-\u042f\u0460\u0462\u0464\u0466\u0468\u046a\u046c\u046e\u0470\u0472\u0474\u0476\u0478\u047a\u047c\u047e\u0480\u048a\u048c\u048e\u0490\u0492\u0494\u0496\u0498\u049a\u049c\u049e\u04a0\u04a2\u04a4\u04a6\u04a8\u04aa\u04ac\u04ae\u04b0\u04b2\u04b4\u04b6\u04b8\u04ba\u04bc\u04be\u04c0-\u04c1\u04c3\u04c5\u04c7\u04c9\u04cb\u04cd\u04d0\u04d2\u04d4\u04d6\u04d8\u04da\u04dc\u04de\u04e0\u04e2\u04e4\u04e6\u04e8\u04ea\u04ec\u04ee\u04f0\u04f2\u04f4\u04f6\u04f8\u04fa\u04fc\u04fe\u0500\u0502\u0504\u0506\u0508\u050a\u050c\u050e\u0510\u0512\u0514\u0516\u0518\u051a\u051c\u051e\u0520\u0522\u0524\u0526\u0531-\u0556\u10a0-\u10c5\u10c7\u10cd\u1e00\u1e02\u1e04\u1e06\u1e08\u1e0a\u1e0c\u1e0e\u1e10\u1e12\u1e14\u1e16\u1e18\u1e1a\u1e1c\u1e1e\u1e20\u1e22\u1e24\u1e26\u1e28\u1e2a\u1e2c\u1e2e\u1e30\u1e32\u1e34\u1e36\u1e38\u1e3a\u1e3c\u1e3e\u1e40\u1e42\u1e44\u1e46\u1e48\u1e4a\u1e4c\u1e4e\u1e50\u1e52\u1e54\u1e56\u1e58\u1e5a\u1e5c\u1e5e\u1e60\u1e62\u1e64\u1e66\u1e68\u1e6a\u1e6c\u1e6e\u1e70\u1e72\u1e74\u1e76\u1e78\u1e7a\u1e7c\u1e7e\u1e80\u1e82\u1e84\u1e86\u1e88\u1e8a\u1e8c\u1e8e\u1e90\u1e92\u1e94\u1e9e\u1ea0\u1ea2\u1ea4\u1ea6\u1ea8\u1eaa\u1eac\u1eae\u1eb0\u1eb2\u1eb4\u1eb6\u1eb8\u1eba\u1ebc\u1ebe\u1ec0\u1ec2\u1ec4\u1ec6\u1ec8\u1eca\u1ecc\u1ece\u1ed0\u1ed2\u1ed4\u1ed6\u1ed8\u1eda\u1edc\u1ede\u1ee0\u1ee2\u1ee4\u1ee6\u1ee8\u1eea\u1eec\u1eee\u1ef0\u1ef2\u1ef4\u1ef6\u1ef8\u1efa\u1efc\u1efe\u1f08-\u1f0f\u1f18-\u1f1d\u1f28-\u1f2f\u1f38-\u1f3f\u1f48-\u1f4d\u1f59\u1f5b\u1f5d\u1f5f\u1f68-\u1f6f\u1fb8-\u1fbb\u1fc8-\u1fcb\u1fd8-\u1fdb\u1fe8-\u1fec\u1ff8-\u1ffb\u2102\u2107\u210b-\u210d\u2110-\u2112\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u2130-\u2133\u213e-\u213f\u2145\u2183\u2c00-\u2c2e\u2c60\u2c62-\u2c64\u2c67\u2c69\u2c6b\u2c6d-\u2c70\u2c72\u2c75\u2c7e-\u2c80\u2c82\u2c84\u2c86\u2c88\u2c8a\u2c8c\u2c8e\u2c90\u2c92\u2c94\u2c96\u2c98\u2c9a\u2c9c\u2c9e\u2ca0\u2ca2\u2ca4\u2ca6\u2ca8\u2caa\u2cac\u2cae\u2cb0\u2cb2\u2cb4\u2cb6\u2cb8\u2cba\u2cbc\u2cbe\u2cc0\u2cc2\u2cc4\u2cc6\u2cc8\u2cca\u2ccc\u2cce\u2cd0\u2cd2\u2cd4\u2cd6\u2cd8\u2cda\u2cdc\u2cde\u2ce0\u2ce2\u2ceb\u2ced\u2cf2\ua640\ua642\ua644\ua646\ua648\ua64a\ua64c\ua64e\ua650\ua652\ua654\ua656\ua658\ua65a\ua65c\ua65e\ua660\ua662\ua664\ua666\ua668\ua66a\ua66c\ua680\ua682\ua684\ua686\ua688\ua68a\ua68c\ua68e\ua690\ua692\ua694\ua696\ua722\ua724\ua726\ua728\ua72a\ua72c\ua72e\ua732\ua734\ua736\ua738\ua73a\ua73c\ua73e\ua740\ua742\ua744\ua746\ua748\ua74a\ua74c\ua74e\ua750\ua752\ua754\ua756\ua758\ua75a\ua75c\ua75e\ua760\ua762\ua764\ua766\ua768\ua76a\ua76c\ua76e\ua779\ua77b\ua77d-\ua77e\ua780\ua782\ua784\ua786\ua78b\ua78d\ua790\ua792\ua7a0\ua7a2\ua7a4\ua7a6\ua7a8\ua7aa\uff21-\uff3aa-z\u00b5\u00df-\u00f6\u00f8-\u00ff\u0101\u0103\u0105\u0107\u0109\u010b\u010d\u010f\u0111\u0113\u0115\u0117\u0119\u011b\u011d\u011f\u0121\u0123\u0125\u0127\u0129\u012b\u012d\u012f\u0131\u0133\u0135\u0137-\u0138\u013a\u013c\u013e\u0140\u0142\u0144\u0146\u0148-\u0149\u014b\u014d\u014f\u0151\u0153\u0155\u0157\u0159\u015b\u015d\u015f\u0161\u0163\u0165\u0167\u0169\u016b\u016d\u016f\u0171\u0173\u0175\u0177\u017a\u017c\u017e-\u0180\u0183\u0185\u0188\u018c-\u018d\u0192\u0195\u0199-\u019b\u019e\u01a1\u01a3\u01a5\u01a8\u01aa-\u01ab\u01ad\u01b0\u01b4\u01b6\u01b9-\u01ba\u01bd-\u01bf\u01c6\u01c9\u01cc\u01ce\u01d0\u01d2\u01d4\u01d6\u01d8\u01da\u01dc-\u01dd\u01df\u01e1\u01e3\u01e5\u01e7\u01e9\u01eb\u01ed\u01ef-\u01f0\u01f3\u01f5\u01f9\u01fb\u01fd\u01ff\u0201\u0203\u0205\u0207\u0209\u020b\u020d\u020f\u0211\u0213\u0215\u0217\u0219\u021b\u021d\u021f\u0221\u0223\u0225\u0227\u0229\u022b\u022d\u022f\u0231\u0233-\u0239\u023c\u023f-\u0240\u0242\u0247\u0249\u024b\u024d\u024f-\u0293\u0295-\u02af\u0371\u0373\u0377\u037b-\u037d\u0390\u03ac-\u03ce\u03d0-\u03d1\u03d5-\u03d7\u03d9\u03db\u03dd\u03df\u03e1\u03e3\u03e5\u03e7\u03e9\u03eb\u03ed\u03ef-\u03f3\u03f5\u03f8\u03fb-\u03fc\u0430-\u045f\u0461\u0463\u0465\u0467\u0469\u046b\u046d\u046f\u0471\u0473\u0475\u0477\u0479\u047b\u047d\u047f\u0481\u048b\u048d\u048f\u0491\u0493\u0495\u0497\u0499\u049b\u049d\u049f\u04a1\u04a3\u04a5\u04a7\u04a9\u04ab\u04ad\u04af\u04b1\u04b3\u04b5\u04b7\u04b9\u04bb\u04bd\u04bf\u04c2\u04c4\u04c6\u04c8\u04ca\u04cc\u04ce-\u04cf\u04d1\u04d3\u04d5\u04d7\u04d9\u04db\u04dd\u04df\u04e1\u04e3\u04e5\u04e7\u04e9\u04eb\u04ed\u04ef\u04f1\u04f3\u04f5\u04f7\u04f9\u04fb\u04fd\u04ff\u0501\u0503\u0505\u0507\u0509\u050b\u050d\u050f\u0511\u0513\u0515\u0517\u0519\u051b\u051d\u051f\u0521\u0523\u0525\u0527\u0561-\u0587\u1d00-\u1d2b\u1d6b-\u1d77\u1d79-\u1d9a\u1e01\u1e03\u1e05\u1e07\u1e09\u1e0b\u1e0d\u1e0f\u1e11\u1e13\u1e15\u1e17\u1e19\u1e1b\u1e1d\u1e1f\u1e21\u1e23\u1e25\u1e27\u1e29\u1e2b\u1e2d\u1e2f\u1e31\u1e33\u1e35\u1e37\u1e39\u1e3b\u1e3d\u1e3f\u1e41\u1e43\u1e45\u1e47\u1e49\u1e4b\u1e4d\u1e4f\u1e51\u1e53\u1e55\u1e57\u1e59\u1e5b\u1e5d\u1e5f\u1e61\u1e63\u1e65\u1e67\u1e69\u1e6b\u1e6d\u1e6f\u1e71\u1e73\u1e75\u1e77\u1e79\u1e7b\u1e7d\u1e7f\u1e81\u1e83\u1e85\u1e87\u1e89\u1e8b\u1e8d\u1e8f\u1e91\u1e93\u1e95-\u1e9d\u1e9f\u1ea1\u1ea3\u1ea5\u1ea7\u1ea9\u1eab\u1ead\u1eaf\u1eb1\u1eb3\u1eb5\u1eb7\u1eb9\u1ebb\u1ebd\u1ebf\u1ec1\u1ec3\u1ec5\u1ec7\u1ec9\u1ecb\u1ecd\u1ecf\u1ed1\u1ed3\u1ed5\u1ed7\u1ed9\u1edb\u1edd\u1edf\u1ee1\u1ee3\u1ee5\u1ee7\u1ee9\u1eeb\u1eed\u1eef\u1ef1\u1ef3\u1ef5\u1ef7\u1ef9\u1efb\u1efd\u1eff-\u1f07\u1f10-\u1f15\u1f20-\u1f27\u1f30-\u1f37\u1f40-\u1f45\u1f50-\u1f57\u1f60-\u1f67\u1f70-\u1f7d\u1f80-\u1f87\u1f90-\u1f97\u1fa0-\u1fa7\u1fb0-\u1fb4\u1fb6-\u1fb7\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fc7\u1fd0-\u1fd3\u1fd6-\u1fd7\u1fe0-\u1fe7\u1ff2-\u1ff4\u1ff6-\u1ff7\u210a\u210e-\u210f\u2113\u212f\u2134\u2139\u213c-\u213d\u2146-\u2149\u214e\u2184\u2c30-\u2c5e\u2c61\u2c65-\u2c66\u2c68\u2c6a\u2c6c\u2c71\u2c73-\u2c74\u2c76-\u2c7b\u2c81\u2c83\u2c85\u2c87\u2c89\u2c8b\u2c8d\u2c8f\u2c91\u2c93\u2c95\u2c97\u2c99\u2c9b\u2c9d\u2c9f\u2ca1\u2ca3\u2ca5\u2ca7\u2ca9\u2cab\u2cad\u2caf\u2cb1\u2cb3\u2cb5\u2cb7\u2cb9\u2cbb\u2cbd\u2cbf\u2cc1\u2cc3\u2cc5\u2cc7\u2cc9\u2ccb\u2ccd\u2ccf\u2cd1\u2cd3\u2cd5\u2cd7\u2cd9\u2cdb\u2cdd\u2cdf\u2ce1\u2ce3-\u2ce4\u2cec\u2cee\u2cf3\u2d00-\u2d25\u2d27\u2d2d\ua641\ua643\ua645\ua647\ua649\ua64b\ua64d\ua64f\ua651\ua653\ua655\ua657\ua659\ua65b\ua65d\ua65f\ua661\ua663\ua665\ua667\ua669\ua66b\ua66d\ua681\ua683\ua685\ua687\ua689\ua68b\ua68d\ua68f\ua691\ua693\ua695\ua697\ua723\ua725\ua727\ua729\ua72b\ua72d\ua72f-\ua731\ua733\ua735\ua737\ua739\ua73b\ua73d\ua73f\ua741\ua743\ua745\ua747\ua749\ua74b\ua74d\ua74f\ua751\ua753\ua755\ua757\ua759\ua75b\ua75d\ua75f\ua761\ua763\ua765\ua767\ua769\ua76b\ua76d\ua76f\ua771-\ua778\ua77a\ua77c\ua77f\ua781\ua783\ua785\ua787\ua78c\ua78e\ua791\ua793\ua7a1\ua7a3\ua7a5\ua7a7\ua7a9\ua7fa\ufb00-\ufb06\ufb13-\ufb17\uff41-\uff5a\u01c5\u01c8\u01cb\u01f2\u1f88-\u1f8f\u1f98-\u1f9f\u1fa8-\u1faf\u1fbc\u1fcc\u1ffc\u02b0-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0374\u037a\u0559\u0640\u06e5-\u06e6\u07f4-\u07f5\u07fa\u081a\u0824\u0828\u0971\u0e46\u0ec6\u10fc\u17d7\u1843\u1aa7\u1c78-\u1c7d\u1d2c-\u1d6a\u1d78\u1d9b-\u1dbf\u2071\u207f\u2090-\u209c\u2c7c-\u2c7d\u2d6f\u2e2f\u3005\u3031-\u3035\u303b\u309d-\u309e\u30fc-\u30fe\ua015\ua4f8-\ua4fd\ua60c\ua67f\ua717-\ua71f\ua770\ua788\ua7f8-\ua7f9\ua9cf\uaa70\uaadd\uaaf3-\uaaf4\uff70\uff9e-\uff9f\u16ee-\u16f0\u2160-\u2182\u2185-\u2188\u3007\u3021-\u3029\u3038-\u303a\ua6e6-\ua6ef][A-Z\u00c0-\u00d6\u00d8-\u00de\u0100\u0102\u0104\u0106\u0108\u010a\u010c\u010e\u0110\u0112\u0114\u0116\u0118\u011a\u011c\u011e\u0120\u0122\u0124\u0126\u0128\u012a\u012c\u012e\u0130\u0132\u0134\u0136\u0139\u013b\u013d\u013f\u0141\u0143\u0145\u0147\u014a\u014c\u014e\u0150\u0152\u0154\u0156\u0158\u015a\u015c\u015e\u0160\u0162\u0164\u0166\u0168\u016a\u016c\u016e\u0170\u0172\u0174\u0176\u0178-\u0179\u017b\u017d\u0181-\u0182\u0184\u0186-\u0187\u0189-\u018b\u018e-\u0191\u0193-\u0194\u0196-\u0198\u019c-\u019d\u019f-\u01a0\u01a2\u01a4\u01a6-\u01a7\u01a9\u01ac\u01ae-\u01af\u01b1-\u01b3\u01b5\u01b7-\u01b8\u01bc\u01c4\u01c7\u01ca\u01cd\u01cf\u01d1\u01d3\u01d5\u01d7\u01d9\u01db\u01de\u01e0\u01e2\u01e4\u01e6\u01e8\u01ea\u01ec\u01ee\u01f1\u01f4\u01f6-\u01f8\u01fa\u01fc\u01fe\u0200\u0202\u0204\u0206\u0208\u020a\u020c\u020e\u0210\u0212\u0214\u0216\u0218\u021a\u021c\u021e\u0220\u0222\u0224\u0226\u0228\u022a\u022c\u022e\u0230\u0232\u023a-\u023b\u023d-\u023e\u0241\u0243-\u0246\u0248\u024a\u024c\u024e\u0370\u0372\u0376\u0386\u0388-\u038a\u038c\u038e-\u038f\u0391-\u03a1\u03a3-\u03ab\u03cf\u03d2-\u03d4\u03d8\u03da\u03dc\u03de\u03e0\u03e2\u03e4\u03e6\u03e8\u03ea\u03ec\u03ee\u03f4\u03f7\u03f9-\u03fa\u03fd-\u042f\u0460\u0462\u0464\u0466\u0468\u046a\u046c\u046e\u0470\u0472\u0474\u0476\u0478\u047a\u047c\u047e\u0480\u048a\u048c\u048e\u0490\u0492\u0494\u0496\u0498\u049a\u049c\u049e\u04a0\u04a2\u04a4\u04a6\u04a8\u04aa\u04ac\u04ae\u04b0\u04b2\u04b4\u04b6\u04b8\u04ba\u04bc\u04be\u04c0-\u04c1\u04c3\u04c5\u04c7\u04c9\u04cb\u04cd\u04d0\u04d2\u04d4\u04d6\u04d8\u04da\u04dc\u04de\u04e0\u04e2\u04e4\u04e6\u04e8\u04ea\u04ec\u04ee\u04f0\u04f2\u04f4\u04f6\u04f8\u04fa\u04fc\u04fe\u0500\u0502\u0504\u0506\u0508\u050a\u050c\u050e\u0510\u0512\u0514\u0516\u0518\u051a\u051c\u051e\u0520\u0522\u0524\u0526\u0531-\u0556\u10a0-\u10c5\u10c7\u10cd\u1e00\u1e02\u1e04\u1e06\u1e08\u1e0a\u1e0c\u1e0e\u1e10\u1e12\u1e14\u1e16\u1e18\u1e1a\u1e1c\u1e1e\u1e20\u1e22\u1e24\u1e26\u1e28\u1e2a\u1e2c\u1e2e\u1e30\u1e32\u1e34\u1e36\u1e38\u1e3a\u1e3c\u1e3e\u1e40\u1e42\u1e44\u1e46\u1e48\u1e4a\u1e4c\u1e4e\u1e50\u1e52\u1e54\u1e56\u1e58\u1e5a\u1e5c\u1e5e\u1e60\u1e62\u1e64\u1e66\u1e68\u1e6a\u1e6c\u1e6e\u1e70\u1e72\u1e74\u1e76\u1e78\u1e7a\u1e7c\u1e7e\u1e80\u1e82\u1e84\u1e86\u1e88\u1e8a\u1e8c\u1e8e\u1e90\u1e92\u1e94\u1e9e\u1ea0\u1ea2\u1ea4\u1ea6\u1ea8\u1eaa\u1eac\u1eae\u1eb0\u1eb2\u1eb4\u1eb6\u1eb8\u1eba\u1ebc\u1ebe\u1ec0\u1ec2\u1ec4\u1ec6\u1ec8\u1eca\u1ecc\u1ece\u1ed0\u1ed2\u1ed4\u1ed6\u1ed8\u1eda\u1edc\u1ede\u1ee0\u1ee2\u1ee4\u1ee6\u1ee8\u1eea\u1eec\u1eee\u1ef0\u1ef2\u1ef4\u1ef6\u1ef8\u1efa\u1efc\u1efe\u1f08-\u1f0f\u1f18-\u1f1d\u1f28-\u1f2f\u1f38-\u1f3f\u1f48-\u1f4d\u1f59\u1f5b\u1f5d\u1f5f\u1f68-\u1f6f\u1fb8-\u1fbb\u1fc8-\u1fcb\u1fd8-\u1fdb\u1fe8-\u1fec\u1ff8-\u1ffb\u2102\u2107\u210b-\u210d\u2110-\u2112\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u2130-\u2133\u213e-\u213f\u2145\u2183\u2c00-\u2c2e\u2c60\u2c62-\u2c64\u2c67\u2c69\u2c6b\u2c6d-\u2c70\u2c72\u2c75\u2c7e-\u2c80\u2c82\u2c84\u2c86\u2c88\u2c8a\u2c8c\u2c8e\u2c90\u2c92\u2c94\u2c96\u2c98\u2c9a\u2c9c\u2c9e\u2ca0\u2ca2\u2ca4\u2ca6\u2ca8\u2caa\u2cac\u2cae\u2cb0\u2cb2\u2cb4\u2cb6\u2cb8\u2cba\u2cbc\u2cbe\u2cc0\u2cc2\u2cc4\u2cc6\u2cc8\u2cca\u2ccc\u2cce\u2cd0\u2cd2\u2cd4\u2cd6\u2cd8\u2cda\u2cdc\u2cde\u2ce0\u2ce2\u2ceb\u2ced\u2cf2\ua640\ua642\ua644\ua646\ua648\ua64a\ua64c\ua64e\ua650\ua652\ua654\ua656\ua658\ua65a\ua65c\ua65e\ua660\ua662\ua664\ua666\ua668\ua66a\ua66c\ua680\ua682\ua684\ua686\ua688\ua68a\ua68c\ua68e\ua690\ua692\ua694\ua696\ua722\ua724\ua726\ua728\ua72a\ua72c\ua72e\ua732\ua734\ua736\ua738\ua73a\ua73c\ua73e\ua740\ua742\ua744\ua746\ua748\ua74a\ua74c\ua74e\ua750\ua752\ua754\ua756\ua758\ua75a\ua75c\ua75e\ua760\ua762\ua764\ua766\ua768\ua76a\ua76c\ua76e\ua779\ua77b\ua77d-\ua77e\ua780\ua782\ua784\ua786\ua78b\ua78d\ua790\ua792\ua7a0\ua7a2\ua7a4\ua7a6\ua7a8\ua7aa\uff21-\uff3aa-z\u00b5\u00df-\u00f6\u00f8-\u00ff\u0101\u0103\u0105\u0107\u0109\u010b\u010d\u010f\u0111\u0113\u0115\u0117\u0119\u011b\u011d\u011f\u0121\u0123\u0125\u0127\u0129\u012b\u012d\u012f\u0131\u0133\u0135\u0137-\u0138\u013a\u013c\u013e\u0140\u0142\u0144\u0146\u0148-\u0149\u014b\u014d\u014f\u0151\u0153\u0155\u0157\u0159\u015b\u015d\u015f\u0161\u0163\u0165\u0167\u0169\u016b\u016d\u016f\u0171\u0173\u0175\u0177\u017a\u017c\u017e-\u0180\u0183\u0185\u0188\u018c-\u018d\u0192\u0195\u0199-\u019b\u019e\u01a1\u01a3\u01a5\u01a8\u01aa-\u01ab\u01ad\u01b0\u01b4\u01b6\u01b9-\u01ba\u01bd-\u01bf\u01c6\u01c9\u01cc\u01ce\u01d0\u01d2\u01d4\u01d6\u01d8\u01da\u01dc-\u01dd\u01df\u01e1\u01e3\u01e5\u01e7\u01e9\u01eb\u01ed\u01ef-\u01f0\u01f3\u01f5\u01f9\u01fb\u01fd\u01ff\u0201\u0203\u0205\u0207\u0209\u020b\u020d\u020f\u0211\u0213\u0215\u0217\u0219\u021b\u021d\u021f\u0221\u0223\u0225\u0227\u0229\u022b\u022d\u022f\u0231\u0233-\u0239\u023c\u023f-\u0240\u0242\u0247\u0249\u024b\u024d\u024f-\u0293\u0295-\u02af\u0371\u0373\u0377\u037b-\u037d\u0390\u03ac-\u03ce\u03d0-\u03d1\u03d5-\u03d7\u03d9\u03db\u03dd\u03df\u03e1\u03e3\u03e5\u03e7\u03e9\u03eb\u03ed\u03ef-\u03f3\u03f5\u03f8\u03fb-\u03fc\u0430-\u045f\u0461\u0463\u0465\u0467\u0469\u046b\u046d\u046f\u0471\u0473\u0475\u0477\u0479\u047b\u047d\u047f\u0481\u048b\u048d\u048f\u0491\u0493\u0495\u0497\u0499\u049b\u049d\u049f\u04a1\u04a3\u04a5\u04a7\u04a9\u04ab\u04ad\u04af\u04b1\u04b3\u04b5\u04b7\u04b9\u04bb\u04bd\u04bf\u04c2\u04c4\u04c6\u04c8\u04ca\u04cc\u04ce-\u04cf\u04d1\u04d3\u04d5\u04d7\u04d9\u04db\u04dd\u04df\u04e1\u04e3\u04e5\u04e7\u04e9\u04eb\u04ed\u04ef\u04f1\u04f3\u04f5\u04f7\u04f9\u04fb\u04fd\u04ff\u0501\u0503\u0505\u0507\u0509\u050b\u050d\u050f\u0511\u0513\u0515\u0517\u0519\u051b\u051d\u051f\u0521\u0523\u0525\u0527\u0561-\u0587\u1d00-\u1d2b\u1d6b-\u1d77\u1d79-\u1d9a\u1e01\u1e03\u1e05\u1e07\u1e09\u1e0b\u1e0d\u1e0f\u1e11\u1e13\u1e15\u1e17\u1e19\u1e1b\u1e1d\u1e1f\u1e21\u1e23\u1e25\u1e27\u1e29\u1e2b\u1e2d\u1e2f\u1e31\u1e33\u1e35\u1e37\u1e39\u1e3b\u1e3d\u1e3f\u1e41\u1e43\u1e45\u1e47\u1e49\u1e4b\u1e4d\u1e4f\u1e51\u1e53\u1e55\u1e57\u1e59\u1e5b\u1e5d\u1e5f\u1e61\u1e63\u1e65\u1e67\u1e69\u1e6b\u1e6d\u1e6f\u1e71\u1e73\u1e75\u1e77\u1e79\u1e7b\u1e7d\u1e7f\u1e81\u1e83\u1e85\u1e87\u1e89\u1e8b\u1e8d\u1e8f\u1e91\u1e93\u1e95-\u1e9d\u1e9f\u1ea1\u1ea3\u1ea5\u1ea7\u1ea9\u1eab\u1ead\u1eaf\u1eb1\u1eb3\u1eb5\u1eb7\u1eb9\u1ebb\u1ebd\u1ebf\u1ec1\u1ec3\u1ec5\u1ec7\u1ec9\u1ecb\u1ecd\u1ecf\u1ed1\u1ed3\u1ed5\u1ed7\u1ed9\u1edb\u1edd\u1edf\u1ee1\u1ee3\u1ee5\u1ee7\u1ee9\u1eeb\u1eed\u1eef\u1ef1\u1ef3\u1ef5\u1ef7\u1ef9\u1efb\u1efd\u1eff-\u1f07\u1f10-\u1f15\u1f20-\u1f27\u1f30-\u1f37\u1f40-\u1f45\u1f50-\u1f57\u1f60-\u1f67\u1f70-\u1f7d\u1f80-\u1f87\u1f90-\u1f97\u1fa0-\u1fa7\u1fb0-\u1fb4\u1fb6-\u1fb7\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fc7\u1fd0-\u1fd3\u1fd6-\u1fd7\u1fe0-\u1fe7\u1ff2-\u1ff4\u1ff6-\u1ff7\u210a\u210e-\u210f\u2113\u212f\u2134\u2139\u213c-\u213d\u2146-\u2149\u214e\u2184\u2c30-\u2c5e\u2c61\u2c65-\u2c66\u2c68\u2c6a\u2c6c\u2c71\u2c73-\u2c74\u2c76-\u2c7b\u2c81\u2c83\u2c85\u2c87\u2c89\u2c8b\u2c8d\u2c8f\u2c91\u2c93\u2c95\u2c97\u2c99\u2c9b\u2c9d\u2c9f\u2ca1\u2ca3\u2ca5\u2ca7\u2ca9\u2cab\u2cad\u2caf\u2cb1\u2cb3\u2cb5\u2cb7\u2cb9\u2cbb\u2cbd\u2cbf\u2cc1\u2cc3\u2cc5\u2cc7\u2cc9\u2ccb\u2ccd\u2ccf\u2cd1\u2cd3\u2cd5\u2cd7\u2cd9\u2cdb\u2cdd\u2cdf\u2ce1\u2ce3-\u2ce4\u2cec\u2cee\u2cf3\u2d00-\u2d25\u2d27\u2d2d\ua641\ua643\ua645\ua647\ua649\ua64b\ua64d\ua64f\ua651\ua653\ua655\ua657\ua659\ua65b\ua65d\ua65f\ua661\ua663\ua665\ua667\ua669\ua66b\ua66d\ua681\ua683\ua685\ua687\ua689\ua68b\ua68d\ua68f\ua691\ua693\ua695\ua697\ua723\ua725\ua727\ua729\ua72b\ua72d\ua72f-\ua731\ua733\ua735\ua737\ua739\ua73b\ua73d\ua73f\ua741\ua743\ua745\ua747\ua749\ua74b\ua74d\ua74f\ua751\ua753\ua755\ua757\ua759\ua75b\ua75d\ua75f\ua761\ua763\ua765\ua767\ua769\ua76b\ua76d\ua76f\ua771-\ua778\ua77a\ua77c\ua77f\ua781\ua783\ua785\ua787\ua78c\ua78e\ua791\ua793\ua7a1\ua7a3\ua7a5\ua7a7\ua7a9\ua7fa\ufb00-\ufb06\ufb13-\ufb17\uff41-\uff5a\u01c5\u01c8\u01cb\u01f2\u1f88-\u1f8f\u1f98-\u1f9f\u1fa8-\u1faf\u1fbc\u1fcc\u1ffc\u02b0-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0374\u037a\u0559\u0640\u06e5-\u06e6\u07f4-\u07f5\u07fa\u081a\u0824\u0828\u0971\u0e46\u0ec6\u10fc\u17d7\u1843\u1aa7\u1c78-\u1c7d\u1d2c-\u1d6a\u1d78\u1d9b-\u1dbf\u2071\u207f\u2090-\u209c\u2c7c-\u2c7d\u2d6f\u2e2f\u3005\u3031-\u3035\u303b\u309d-\u309e\u30fc-\u30fe\ua015\ua4f8-\ua4fd\ua60c\ua67f\ua717-\ua71f\ua770\ua788\ua7f8-\ua7f9\ua9cf\uaa70\uaadd\uaaf3-\uaaf4\uff70\uff9e-\uff9f\u16ee-\u16f0\u2160-\u2182\u2185-\u2188\u3007\u3021-\u3029\u3038-\u303a\ua6e6-\ua6ef0-9\u0660-\u0669\u06f0-\u06f9\u07c0-\u07c9\u0966-\u096f\u09e6-\u09ef\u0a66-\u0a6f\u0ae6-\u0aef\u0b66-\u0b6f\u0be6-\u0bef\u0c66-\u0c6f\u0ce6-\u0cef\u0d66-\u0d6f\u0e50-\u0e59\u0ed0-\u0ed9\u0f20-\u0f29\u1040-\u1049\u1090-\u1099\u17e0-\u17e9\u1810-\u1819\u1946-\u194f\u19d0-\u19d9\u1a80-\u1a89\u1a90-\u1a99\u1b50-\u1b59\u1bb0-\u1bb9\u1c40-\u1c49\u1c50-\u1c59\ua620-\ua629\ua8d0-\ua8d9\ua900-\ua909\ua9d0-\ua9d9\uaa50-\uaa59\uabf0-\uabf9\uff10-\uff19_\u203f-\u2040\u2054\ufe33-\ufe34\ufe4d-\ufe4f\uff3f\u00ad\u0600-\u0604\u061c\u06dd\u070f\u180e\u200b-\u200f\u202a-\u202e\u2060-\u2064\u2066-\u206f\ufeff\ufff9-\ufffb\u0300-\u036f\u0483-\u0487\u0591-\u05bd\u05bf\u05c1-\u05c2\u05c4-\u05c5\u05c7\u0610-\u061a\u064b-\u065f\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7-\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u08e4-\u08fe\u0900-\u0902\u093a\u093c\u0941-\u0948\u094d\u0951-\u0957\u0962-\u0963\u0981\u09bc\u09c1-\u09c4\u09cd\u09e2-\u09e3\u0a01-\u0a02\u0a3c\u0a41-\u0a42\u0a47-\u0a48\u0a4b-\u0a4d\u0a51\u0a70-\u0a71\u0a75\u0a81-\u0a82\u0abc\u0ac1-\u0ac5\u0ac7-\u0ac8\u0acd\u0ae2-\u0ae3\u0b01\u0b3c\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b62-\u0b63\u0b82\u0bc0\u0bcd\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55-\u0c56\u0c62-\u0c63\u0cbc\u0cbf\u0cc6\u0ccc-\u0ccd\u0ce2-\u0ce3\u0d41-\u0d44\u0d4d\u0d62-\u0d63\u0dca\u0dd2-\u0dd4\u0dd6\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb-\u0ebc\u0ec8-\u0ecd\u0f18-\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86-\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039-\u103a\u103d-\u103e\u1058-\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085-\u1086\u108d\u109d\u135d-\u135f\u1712-\u1714\u1732-\u1734\u1752-\u1753\u1772-\u1773\u17b4-\u17b5\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927-\u1928\u1932\u1939-\u193b\u1a17-\u1a18\u1a1b\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80-\u1b81\u1ba2-\u1ba5\u1ba8-\u1ba9\u1bab\u1be6\u1be8-\u1be9\u1bed\u1bef-\u1bf1\u1c2c-\u1c33\u1c36-\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1cf4\u1dc0-\u1de6\u1dfc-\u1dff\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302d\u3099-\u309a\ua66f\ua674-\ua67d\ua69f\ua6f0-\ua6f1\ua802\ua806\ua80b\ua825-\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31-\uaa32\uaa35-\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7-\uaab8\uaabe-\uaabf\uaac1\uaaec-\uaaed\uaaf6\uabe5\uabe8\uabed\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\u0903\u093b\u093e-\u0940\u0949-\u094c\u094e-\u094f\u0982-\u0983\u09be-\u09c0\u09c7-\u09c8\u09cb-\u09cc\u09d7\u0a03\u0a3e-\u0a40\u0a83\u0abe-\u0ac0\u0ac9\u0acb-\u0acc\u0b02-\u0b03\u0b3e\u0b40\u0b47-\u0b48\u0b4b-\u0b4c\u0b57\u0bbe-\u0bbf\u0bc1-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcc\u0bd7\u0c01-\u0c03\u0c41-\u0c44\u0c82-\u0c83\u0cbe\u0cc0-\u0cc4\u0cc7-\u0cc8\u0cca-\u0ccb\u0cd5-\u0cd6\u0d02-\u0d03\u0d3e-\u0d40\u0d46-\u0d48\u0d4a-\u0d4c\u0d57\u0d82-\u0d83\u0dcf-\u0dd1\u0dd8-\u0ddf\u0df2-\u0df3\u0f3e-\u0f3f\u0f7f\u102b-\u102c\u1031\u1038\u103b-\u103c\u1056-\u1057\u1062-\u1064\u1067-\u106d\u1083-\u1084\u1087-\u108c\u108f\u109a-\u109c\u17b6\u17be-\u17c5\u17c7-\u17c8\u1923-\u1926\u1929-\u192b\u1930-\u1931\u1933-\u1938\u19b0-\u19c0\u19c8-\u19c9\u1a19-\u1a1a\u1a55\u1a57\u1a61\u1a63-\u1a64\u1a6d-\u1a72\u1b04\u1b35\u1b3b\u1b3d-\u1b41\u1b43-\u1b44\u1b82\u1ba1\u1ba6-\u1ba7\u1baa\u1bac-\u1bad\u1be7\u1bea-\u1bec\u1bee\u1bf2-\u1bf3\u1c24-\u1c2b\u1c34-\u1c35\u1ce1\u1cf2-\u1cf3\u302e-\u302f\ua823-\ua824\ua827\ua880-\ua881\ua8b4-\ua8c3\ua952-\ua953\ua983\ua9b4-\ua9b5\ua9ba-\ua9bb\ua9bd-\ua9c0\uaa2f-\uaa30\uaa33-\uaa34\uaa4d\uaa7b\uaaeb\uaaee-\uaaef\uaaf5\uabe3-\uabe4\uabe6-\uabe7\uabe9-\uabea\uabec]*|`@?[_A-Z\u00c0-\u00d6\u00d8-\u00de\u0100\u0102\u0104\u0106\u0108\u010a\u010c\u010e\u0110\u0112\u0114\u0116\u0118\u011a\u011c\u011e\u0120\u0122\u0124\u0126\u0128\u012a\u012c\u012e\u0130\u0132\u0134\u0136\u0139\u013b\u013d\u013f\u0141\u0143\u0145\u0147\u014a\u014c\u014e\u0150\u0152\u0154\u0156\u0158\u015a\u015c\u015e\u0160\u0162\u0164\u0166\u0168\u016a\u016c\u016e\u0170\u0172\u0174\u0176\u0178-\u0179\u017b\u017d\u0181-\u0182\u0184\u0186-\u0187\u0189-\u018b\u018e-\u0191\u0193-\u0194\u0196-\u0198\u019c-\u019d\u019f-\u01a0\u01a2\u01a4\u01a6-\u01a7\u01a9\u01ac\u01ae-\u01af\u01b1-\u01b3\u01b5\u01b7-\u01b8\u01bc\u01c4\u01c7\u01ca\u01cd\u01cf\u01d1\u01d3\u01d5\u01d7\u01d9\u01db\u01de\u01e0\u01e2\u01e4\u01e6\u01e8\u01ea\u01ec\u01ee\u01f1\u01f4\u01f6-\u01f8\u01fa\u01fc\u01fe\u0200\u0202\u0204\u0206\u0208\u020a\u020c\u020e\u0210\u0212\u0214\u0216\u0218\u021a\u021c\u021e\u0220\u0222\u0224\u0226\u0228\u022a\u022c\u022e\u0230\u0232\u023a-\u023b\u023d-\u023e\u0241\u0243-\u0246\u0248\u024a\u024c\u024e\u0370\u0372\u0376\u0386\u0388-\u038a\u038c\u038e-\u038f\u0391-\u03a1\u03a3-\u03ab\u03cf\u03d2-\u03d4\u03d8\u03da\u03dc\u03de\u03e0\u03e2\u03e4\u03e6\u03e8\u03ea\u03ec\u03ee\u03f4\u03f7\u03f9-\u03fa\u03fd-\u042f\u0460\u0462\u0464\u0466\u0468\u046a\u046c\u046e\u0470\u0472\u0474\u0476\u0478\u047a\u047c\u047e\u0480\u048a\u048c\u048e\u0490\u0492\u0494\u0496\u0498\u049a\u049c\u049e\u04a0\u04a2\u04a4\u04a6\u04a8\u04aa\u04ac\u04ae\u04b0\u04b2\u04b4\u04b6\u04b8\u04ba\u04bc\u04be\u04c0-\u04c1\u04c3\u04c5\u04c7\u04c9\u04cb\u04cd\u04d0\u04d2\u04d4\u04d6\u04d8\u04da\u04dc\u04de\u04e0\u04e2\u04e4\u04e6\u04e8\u04ea\u04ec\u04ee\u04f0\u04f2\u04f4\u04f6\u04f8\u04fa\u04fc\u04fe\u0500\u0502\u0504\u0506\u0508\u050a\u050c\u050e\u0510\u0512\u0514\u0516\u0518\u051a\u051c\u051e\u0520\u0522\u0524\u0526\u0531-\u0556\u10a0-\u10c5\u10c7\u10cd\u1e00\u1e02\u1e04\u1e06\u1e08\u1e0a\u1e0c\u1e0e\u1e10\u1e12\u1e14\u1e16\u1e18\u1e1a\u1e1c\u1e1e\u1e20\u1e22\u1e24\u1e26\u1e28\u1e2a\u1e2c\u1e2e\u1e30\u1e32\u1e34\u1e36\u1e38\u1e3a\u1e3c\u1e3e\u1e40\u1e42\u1e44\u1e46\u1e48\u1e4a\u1e4c\u1e4e\u1e50\u1e52\u1e54\u1e56\u1e58\u1e5a\u1e5c\u1e5e\u1e60\u1e62\u1e64\u1e66\u1e68\u1e6a\u1e6c\u1e6e\u1e70\u1e72\u1e74\u1e76\u1e78\u1e7a\u1e7c\u1e7e\u1e80\u1e82\u1e84\u1e86\u1e88\u1e8a\u1e8c\u1e8e\u1e90\u1e92\u1e94\u1e9e\u1ea0\u1ea2\u1ea4\u1ea6\u1ea8\u1eaa\u1eac\u1eae\u1eb0\u1eb2\u1eb4\u1eb6\u1eb8\u1eba\u1ebc\u1ebe\u1ec0\u1ec2\u1ec4\u1ec6\u1ec8\u1eca\u1ecc\u1ece\u1ed0\u1ed2\u1ed4\u1ed6\u1ed8\u1eda\u1edc\u1ede\u1ee0\u1ee2\u1ee4\u1ee6\u1ee8\u1eea\u1eec\u1eee\u1ef0\u1ef2\u1ef4\u1ef6\u1ef8\u1efa\u1efc\u1efe\u1f08-\u1f0f\u1f18-\u1f1d\u1f28-\u1f2f\u1f38-\u1f3f\u1f48-\u1f4d\u1f59\u1f5b\u1f5d\u1f5f\u1f68-\u1f6f\u1fb8-\u1fbb\u1fc8-\u1fcb\u1fd8-\u1fdb\u1fe8-\u1fec\u1ff8-\u1ffb\u2102\u2107\u210b-\u210d\u2110-\u2112\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u2130-\u2133\u213e-\u213f\u2145\u2183\u2c00-\u2c2e\u2c60\u2c62-\u2c64\u2c67\u2c69\u2c6b\u2c6d-\u2c70\u2c72\u2c75\u2c7e-\u2c80\u2c82\u2c84\u2c86\u2c88\u2c8a\u2c8c\u2c8e\u2c90\u2c92\u2c94\u2c96\u2c98\u2c9a\u2c9c\u2c9e\u2ca0\u2ca2\u2ca4\u2ca6\u2ca8\u2caa\u2cac\u2cae\u2cb0\u2cb2\u2cb4\u2cb6\u2cb8\u2cba\u2cbc\u2cbe\u2cc0\u2cc2\u2cc4\u2cc6\u2cc8\u2cca\u2ccc\u2cce\u2cd0\u2cd2\u2cd4\u2cd6\u2cd8\u2cda\u2cdc\u2cde\u2ce0\u2ce2\u2ceb\u2ced\u2cf2\ua640\ua642\ua644\ua646\ua648\ua64a\ua64c\ua64e\ua650\ua652\ua654\ua656\ua658\ua65a\ua65c\ua65e\ua660\ua662\ua664\ua666\ua668\ua66a\ua66c\ua680\ua682\ua684\ua686\ua688\ua68a\ua68c\ua68e\ua690\ua692\ua694\ua696\ua722\ua724\ua726\ua728\ua72a\ua72c\ua72e\ua732\ua734\ua736\ua738\ua73a\ua73c\ua73e\ua740\ua742\ua744\ua746\ua748\ua74a\ua74c\ua74e\ua750\ua752\ua754\ua756\ua758\ua75a\ua75c\ua75e\ua760\ua762\ua764\ua766\ua768\ua76a\ua76c\ua76e\ua779\ua77b\ua77d-\ua77e\ua780\ua782\ua784\ua786\ua78b\ua78d\ua790\ua792\ua7a0\ua7a2\ua7a4\ua7a6\ua7a8\ua7aa\uff21-\uff3aa-z\u00b5\u00df-\u00f6\u00f8-\u00ff\u0101\u0103\u0105\u0107\u0109\u010b\u010d\u010f\u0111\u0113\u0115\u0117\u0119\u011b\u011d\u011f\u0121\u0123\u0125\u0127\u0129\u012b\u012d\u012f\u0131\u0133\u0135\u0137-\u0138\u013a\u013c\u013e\u0140\u0142\u0144\u0146\u0148-\u0149\u014b\u014d\u014f\u0151\u0153\u0155\u0157\u0159\u015b\u015d\u015f\u0161\u0163\u0165\u0167\u0169\u016b\u016d\u016f\u0171\u0173\u0175\u0177\u017a\u017c\u017e-\u0180\u0183\u0185\u0188\u018c-\u018d\u0192\u0195\u0199-\u019b\u019e\u01a1\u01a3\u01a5\u01a8\u01aa-\u01ab\u01ad\u01b0\u01b4\u01b6\u01b9-\u01ba\u01bd-\u01bf\u01c6\u01c9\u01cc\u01ce\u01d0\u01d2\u01d4\u01d6\u01d8\u01da\u01dc-\u01dd\u01df\u01e1\u01e3\u01e5\u01e7\u01e9\u01eb\u01ed\u01ef-\u01f0\u01f3\u01f5\u01f9\u01fb\u01fd\u01ff\u0201\u0203\u0205\u0207\u0209\u020b\u020d\u020f\u0211\u0213\u0215\u0217\u0219\u021b\u021d\u021f\u0221\u0223\u0225\u0227\u0229\u022b\u022d\u022f\u0231\u0233-\u0239\u023c\u023f-\u0240\u0242\u0247\u0249\u024b\u024d\u024f-\u0293\u0295-\u02af\u0371\u0373\u0377\u037b-\u037d\u0390\u03ac-\u03ce\u03d0-\u03d1\u03d5-\u03d7\u03d9\u03db\u03dd\u03df\u03e1\u03e3\u03e5\u03e7\u03e9\u03eb\u03ed\u03ef-\u03f3\u03f5\u03f8\u03fb-\u03fc\u0430-\u045f\u0461\u0463\u0465\u0467\u0469\u046b\u046d\u046f\u0471\u0473\u0475\u0477\u0479\u047b\u047d\u047f\u0481\u048b\u048d\u048f\u0491\u0493\u0495\u0497\u0499\u049b\u049d\u049f\u04a1\u04a3\u04a5\u04a7\u04a9\u04ab\u04ad\u04af\u04b1\u04b3\u04b5\u04b7\u04b9\u04bb\u04bd\u04bf\u04c2\u04c4\u04c6\u04c8\u04ca\u04cc\u04ce-\u04cf\u04d1\u04d3\u04d5\u04d7\u04d9\u04db\u04dd\u04df\u04e1\u04e3\u04e5\u04e7\u04e9\u04eb\u04ed\u04ef\u04f1\u04f3\u04f5\u04f7\u04f9\u04fb\u04fd\u04ff\u0501\u0503\u0505\u0507\u0509\u050b\u050d\u050f\u0511\u0513\u0515\u0517\u0519\u051b\u051d\u051f\u0521\u0523\u0525\u0527\u0561-\u0587\u1d00-\u1d2b\u1d6b-\u1d77\u1d79-\u1d9a\u1e01\u1e03\u1e05\u1e07\u1e09\u1e0b\u1e0d\u1e0f\u1e11\u1e13\u1e15\u1e17\u1e19\u1e1b\u1e1d\u1e1f\u1e21\u1e23\u1e25\u1e27\u1e29\u1e2b\u1e2d\u1e2f\u1e31\u1e33\u1e35\u1e37\u1e39\u1e3b\u1e3d\u1e3f\u1e41\u1e43\u1e45\u1e47\u1e49\u1e4b\u1e4d\u1e4f\u1e51\u1e53\u1e55\u1e57\u1e59\u1e5b\u1e5d\u1e5f\u1e61\u1e63\u1e65\u1e67\u1e69\u1e6b\u1e6d\u1e6f\u1e71\u1e73\u1e75\u1e77\u1e79\u1e7b\u1e7d\u1e7f\u1e81\u1e83\u1e85\u1e87\u1e89\u1e8b\u1e8d\u1e8f\u1e91\u1e93\u1e95-\u1e9d\u1e9f\u1ea1\u1ea3\u1ea5\u1ea7\u1ea9\u1eab\u1ead\u1eaf\u1eb1\u1eb3\u1eb5\u1eb7\u1eb9\u1ebb\u1ebd\u1ebf\u1ec1\u1ec3\u1ec5\u1ec7\u1ec9\u1ecb\u1ecd\u1ecf\u1ed1\u1ed3\u1ed5\u1ed7\u1ed9\u1edb\u1edd\u1edf\u1ee1\u1ee3\u1ee5\u1ee7\u1ee9\u1eeb\u1eed\u1eef\u1ef1\u1ef3\u1ef5\u1ef7\u1ef9\u1efb\u1efd\u1eff-\u1f07\u1f10-\u1f15\u1f20-\u1f27\u1f30-\u1f37\u1f40-\u1f45\u1f50-\u1f57\u1f60-\u1f67\u1f70-\u1f7d\u1f80-\u1f87\u1f90-\u1f97\u1fa0-\u1fa7\u1fb0-\u1fb4\u1fb6-\u1fb7\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fc7\u1fd0-\u1fd3\u1fd6-\u1fd7\u1fe0-\u1fe7\u1ff2-\u1ff4\u1ff6-\u1ff7\u210a\u210e-\u210f\u2113\u212f\u2134\u2139\u213c-\u213d\u2146-\u2149\u214e\u2184\u2c30-\u2c5e\u2c61\u2c65-\u2c66\u2c68\u2c6a\u2c6c\u2c71\u2c73-\u2c74\u2c76-\u2c7b\u2c81\u2c83\u2c85\u2c87\u2c89\u2c8b\u2c8d\u2c8f\u2c91\u2c93\u2c95\u2c97\u2c99\u2c9b\u2c9d\u2c9f\u2ca1\u2ca3\u2ca5\u2ca7\u2ca9\u2cab\u2cad\u2caf\u2cb1\u2cb3\u2cb5\u2cb7\u2cb9\u2cbb\u2cbd\u2cbf\u2cc1\u2cc3\u2cc5\u2cc7\u2cc9\u2ccb\u2ccd\u2ccf\u2cd1\u2cd3\u2cd5\u2cd7\u2cd9\u2cdb\u2cdd\u2cdf\u2ce1\u2ce3-\u2ce4\u2cec\u2cee\u2cf3\u2d00-\u2d25\u2d27\u2d2d\ua641\ua643\ua645\ua647\ua649\ua64b\ua64d\ua64f\ua651\ua653\ua655\ua657\ua659\ua65b\ua65d\ua65f\ua661\ua663\ua665\ua667\ua669\ua66b\ua66d\ua681\ua683\ua685\ua687\ua689\ua68b\ua68d\ua68f\ua691\ua693\ua695\ua697\ua723\ua725\ua727\ua729\ua72b\ua72d\ua72f-\ua731\ua733\ua735\ua737\ua739\ua73b\ua73d\ua73f\ua741\ua743\ua745\ua747\ua749\ua74b\ua74d\ua74f\ua751\ua753\ua755\ua757\ua759\ua75b\ua75d\ua75f\ua761\ua763\ua765\ua767\ua769\ua76b\ua76d\ua76f\ua771-\ua778\ua77a\ua77c\ua77f\ua781\ua783\ua785\ua787\ua78c\ua78e\ua791\ua793\ua7a1\ua7a3\ua7a5\ua7a7\ua7a9\ua7fa\ufb00-\ufb06\ufb13-\ufb17\uff41-\uff5a\u01c5\u01c8\u01cb\u01f2\u1f88-\u1f8f\u1f98-\u1f9f\u1fa8-\u1faf\u1fbc\u1fcc\u1ffc\u02b0-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0374\u037a\u0559\u0640\u06e5-\u06e6\u07f4-\u07f5\u07fa\u081a\u0824\u0828\u0971\u0e46\u0ec6\u10fc\u17d7\u1843\u1aa7\u1c78-\u1c7d\u1d2c-\u1d6a\u1d78\u1d9b-\u1dbf\u2071\u207f\u2090-\u209c\u2c7c-\u2c7d\u2d6f\u2e2f\u3005\u3031-\u3035\u303b\u309d-\u309e\u30fc-\u30fe\ua015\ua4f8-\ua4fd\ua60c\ua67f\ua717-\ua71f\ua770\ua788\ua7f8-\ua7f9\ua9cf\uaa70\uaadd\uaaf3-\uaaf4\uff70\uff9e-\uff9f\u16ee-\u16f0\u2160-\u2182\u2185-\u2188\u3007\u3021-\u3029\u3038-\u303a\ua6e6-\ua6ef][A-Z\u00c0-\u00d6\u00d8-\u00de\u0100\u0102\u0104\u0106\u0108\u010a\u010c\u010e\u0110\u0112\u0114\u0116\u0118\u011a\u011c\u011e\u0120\u0122\u0124\u0126\u0128\u012a\u012c\u012e\u0130\u0132\u0134\u0136\u0139\u013b\u013d\u013f\u0141\u0143\u0145\u0147\u014a\u014c\u014e\u0150\u0152\u0154\u0156\u0158\u015a\u015c\u015e\u0160\u0162\u0164\u0166\u0168\u016a\u016c\u016e\u0170\u0172\u0174\u0176\u0178-\u0179\u017b\u017d\u0181-\u0182\u0184\u0186-\u0187\u0189-\u018b\u018e-\u0191\u0193-\u0194\u0196-\u0198\u019c-\u019d\u019f-\u01a0\u01a2\u01a4\u01a6-\u01a7\u01a9\u01ac\u01ae-\u01af\u01b1-\u01b3\u01b5\u01b7-\u01b8\u01bc\u01c4\u01c7\u01ca\u01cd\u01cf\u01d1\u01d3\u01d5\u01d7\u01d9\u01db\u01de\u01e0\u01e2\u01e4\u01e6\u01e8\u01ea\u01ec\u01ee\u01f1\u01f4\u01f6-\u01f8\u01fa\u01fc\u01fe\u0200\u0202\u0204\u0206\u0208\u020a\u020c\u020e\u0210\u0212\u0214\u0216\u0218\u021a\u021c\u021e\u0220\u0222\u0224\u0226\u0228\u022a\u022c\u022e\u0230\u0232\u023a-\u023b\u023d-\u023e\u0241\u0243-\u0246\u0248\u024a\u024c\u024e\u0370\u0372\u0376\u0386\u0388-\u038a\u038c\u038e-\u038f\u0391-\u03a1\u03a3-\u03ab\u03cf\u03d2-\u03d4\u03d8\u03da\u03dc\u03de\u03e0\u03e2\u03e4\u03e6\u03e8\u03ea\u03ec\u03ee\u03f4\u03f7\u03f9-\u03fa\u03fd-\u042f\u0460\u0462\u0464\u0466\u0468\u046a\u046c\u046e\u0470\u0472\u0474\u0476\u0478\u047a\u047c\u047e\u0480\u048a\u048c\u048e\u0490\u0492\u0494\u0496\u0498\u049a\u049c\u049e\u04a0\u04a2\u04a4\u04a6\u04a8\u04aa\u04ac\u04ae\u04b0\u04b2\u04b4\u04b6\u04b8\u04ba\u04bc\u04be\u04c0-\u04c1\u04c3\u04c5\u04c7\u04c9\u04cb\u04cd\u04d0\u04d2\u04d4\u04d6\u04d8\u04da\u04dc\u04de\u04e0\u04e2\u04e4\u04e6\u04e8\u04ea\u04ec\u04ee\u04f0\u04f2\u04f4\u04f6\u04f8\u04fa\u04fc\u04fe\u0500\u0502\u0504\u0506\u0508\u050a\u050c\u050e\u0510\u0512\u0514\u0516\u0518\u051a\u051c\u051e\u0520\u0522\u0524\u0526\u0531-\u0556\u10a0-\u10c5\u10c7\u10cd\u1e00\u1e02\u1e04\u1e06\u1e08\u1e0a\u1e0c\u1e0e\u1e10\u1e12\u1e14\u1e16\u1e18\u1e1a\u1e1c\u1e1e\u1e20\u1e22\u1e24\u1e26\u1e28\u1e2a\u1e2c\u1e2e\u1e30\u1e32\u1e34\u1e36\u1e38\u1e3a\u1e3c\u1e3e\u1e40\u1e42\u1e44\u1e46\u1e48\u1e4a\u1e4c\u1e4e\u1e50\u1e52\u1e54\u1e56\u1e58\u1e5a\u1e5c\u1e5e\u1e60\u1e62\u1e64\u1e66\u1e68\u1e6a\u1e6c\u1e6e\u1e70\u1e72\u1e74\u1e76\u1e78\u1e7a\u1e7c\u1e7e\u1e80\u1e82\u1e84\u1e86\u1e88\u1e8a\u1e8c\u1e8e\u1e90\u1e92\u1e94\u1e9e\u1ea0\u1ea2\u1ea4\u1ea6\u1ea8\u1eaa\u1eac\u1eae\u1eb0\u1eb2\u1eb4\u1eb6\u1eb8\u1eba\u1ebc\u1ebe\u1ec0\u1ec2\u1ec4\u1ec6\u1ec8\u1eca\u1ecc\u1ece\u1ed0\u1ed2\u1ed4\u1ed6\u1ed8\u1eda\u1edc\u1ede\u1ee0\u1ee2\u1ee4\u1ee6\u1ee8\u1eea\u1eec\u1eee\u1ef0\u1ef2\u1ef4\u1ef6\u1ef8\u1efa\u1efc\u1efe\u1f08-\u1f0f\u1f18-\u1f1d\u1f28-\u1f2f\u1f38-\u1f3f\u1f48-\u1f4d\u1f59\u1f5b\u1f5d\u1f5f\u1f68-\u1f6f\u1fb8-\u1fbb\u1fc8-\u1fcb\u1fd8-\u1fdb\u1fe8-\u1fec\u1ff8-\u1ffb\u2102\u2107\u210b-\u210d\u2110-\u2112\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u2130-\u2133\u213e-\u213f\u2145\u2183\u2c00-\u2c2e\u2c60\u2c62-\u2c64\u2c67\u2c69\u2c6b\u2c6d-\u2c70\u2c72\u2c75\u2c7e-\u2c80\u2c82\u2c84\u2c86\u2c88\u2c8a\u2c8c\u2c8e\u2c90\u2c92\u2c94\u2c96\u2c98\u2c9a\u2c9c\u2c9e\u2ca0\u2ca2\u2ca4\u2ca6\u2ca8\u2caa\u2cac\u2cae\u2cb0\u2cb2\u2cb4\u2cb6\u2cb8\u2cba\u2cbc\u2cbe\u2cc0\u2cc2\u2cc4\u2cc6\u2cc8\u2cca\u2ccc\u2cce\u2cd0\u2cd2\u2cd4\u2cd6\u2cd8\u2cda\u2cdc\u2cde\u2ce0\u2ce2\u2ceb\u2ced\u2cf2\ua640\ua642\ua644\ua646\ua648\ua64a\ua64c\ua64e\ua650\ua652\ua654\ua656\ua658\ua65a\ua65c\ua65e\ua660\ua662\ua664\ua666\ua668\ua66a\ua66c\ua680\ua682\ua684\ua686\ua688\ua68a\ua68c\ua68e\ua690\ua692\ua694\ua696\ua722\ua724\ua726\ua728\ua72a\ua72c\ua72e\ua732\ua734\ua736\ua738\ua73a\ua73c\ua73e\ua740\ua742\ua744\ua746\ua748\ua74a\ua74c\ua74e\ua750\ua752\ua754\ua756\ua758\ua75a\ua75c\ua75e\ua760\ua762\ua764\ua766\ua768\ua76a\ua76c\ua76e\ua779\ua77b\ua77d-\ua77e\ua780\ua782\ua784\ua786\ua78b\ua78d\ua790\ua792\ua7a0\ua7a2\ua7a4\ua7a6\ua7a8\ua7aa\uff21-\uff3aa-z\u00b5\u00df-\u00f6\u00f8-\u00ff\u0101\u0103\u0105\u0107\u0109\u010b\u010d\u010f\u0111\u0113\u0115\u0117\u0119\u011b\u011d\u011f\u0121\u0123\u0125\u0127\u0129\u012b\u012d\u012f\u0131\u0133\u0135\u0137-\u0138\u013a\u013c\u013e\u0140\u0142\u0144\u0146\u0148-\u0149\u014b\u014d\u014f\u0151\u0153\u0155\u0157\u0159\u015b\u015d\u015f\u0161\u0163\u0165\u0167\u0169\u016b\u016d\u016f\u0171\u0173\u0175\u0177\u017a\u017c\u017e-\u0180\u0183\u0185\u0188\u018c-\u018d\u0192\u0195\u0199-\u019b\u019e\u01a1\u01a3\u01a5\u01a8\u01aa-\u01ab\u01ad\u01b0\u01b4\u01b6\u01b9-\u01ba\u01bd-\u01bf\u01c6\u01c9\u01cc\u01ce\u01d0\u01d2\u01d4\u01d6\u01d8\u01da\u01dc-\u01dd\u01df\u01e1\u01e3\u01e5\u01e7\u01e9\u01eb\u01ed\u01ef-\u01f0\u01f3\u01f5\u01f9\u01fb\u01fd\u01ff\u0201\u0203\u0205\u0207\u0209\u020b\u020d\u020f\u0211\u0213\u0215\u0217\u0219\u021b\u021d\u021f\u0221\u0223\u0225\u0227\u0229\u022b\u022d\u022f\u0231\u0233-\u0239\u023c\u023f-\u0240\u0242\u0247\u0249\u024b\u024d\u024f-\u0293\u0295-\u02af\u0371\u0373\u0377\u037b-\u037d\u0390\u03ac-\u03ce\u03d0-\u03d1\u03d5-\u03d7\u03d9\u03db\u03dd\u03df\u03e1\u03e3\u03e5\u03e7\u03e9\u03eb\u03ed\u03ef-\u03f3\u03f5\u03f8\u03fb-\u03fc\u0430-\u045f\u0461\u0463\u0465\u0467\u0469\u046b\u046d\u046f\u0471\u0473\u0475\u0477\u0479\u047b\u047d\u047f\u0481\u048b\u048d\u048f\u0491\u0493\u0495\u0497\u0499\u049b\u049d\u049f\u04a1\u04a3\u04a5\u04a7\u04a9\u04ab\u04ad\u04af\u04b1\u04b3\u04b5\u04b7\u04b9\u04bb\u04bd\u04bf\u04c2\u04c4\u04c6\u04c8\u04ca\u04cc\u04ce-\u04cf\u04d1\u04d3\u04d5\u04d7\u04d9\u04db\u04dd\u04df\u04e1\u04e3\u04e5\u04e7\u04e9\u04eb\u04ed\u04ef\u04f1\u04f3\u04f5\u04f7\u04f9\u04fb\u04fd\u04ff\u0501\u0503\u0505\u0507\u0509\u050b\u050d\u050f\u0511\u0513\u0515\u0517\u0519\u051b\u051d\u051f\u0521\u0523\u0525\u0527\u0561-\u0587\u1d00-\u1d2b\u1d6b-\u1d77\u1d79-\u1d9a\u1e01\u1e03\u1e05\u1e07\u1e09\u1e0b\u1e0d\u1e0f\u1e11\u1e13\u1e15\u1e17\u1e19\u1e1b\u1e1d\u1e1f\u1e21\u1e23\u1e25\u1e27\u1e29\u1e2b\u1e2d\u1e2f\u1e31\u1e33\u1e35\u1e37\u1e39\u1e3b\u1e3d\u1e3f\u1e41\u1e43\u1e45\u1e47\u1e49\u1e4b\u1e4d\u1e4f\u1e51\u1e53\u1e55\u1e57\u1e59\u1e5b\u1e5d\u1e5f\u1e61\u1e63\u1e65\u1e67\u1e69\u1e6b\u1e6d\u1e6f\u1e71\u1e73\u1e75\u1e77\u1e79\u1e7b\u1e7d\u1e7f\u1e81\u1e83\u1e85\u1e87\u1e89\u1e8b\u1e8d\u1e8f\u1e91\u1e93\u1e95-\u1e9d\u1e9f\u1ea1\u1ea3\u1ea5\u1ea7\u1ea9\u1eab\u1ead\u1eaf\u1eb1\u1eb3\u1eb5\u1eb7\u1eb9\u1ebb\u1ebd\u1ebf\u1ec1\u1ec3\u1ec5\u1ec7\u1ec9\u1ecb\u1ecd\u1ecf\u1ed1\u1ed3\u1ed5\u1ed7\u1ed9\u1edb\u1edd\u1edf\u1ee1\u1ee3\u1ee5\u1ee7\u1ee9\u1eeb\u1eed\u1eef\u1ef1\u1ef3\u1ef5\u1ef7\u1ef9\u1efb\u1efd\u1eff-\u1f07\u1f10-\u1f15\u1f20-\u1f27\u1f30-\u1f37\u1f40-\u1f45\u1f50-\u1f57\u1f60-\u1f67\u1f70-\u1f7d\u1f80-\u1f87\u1f90-\u1f97\u1fa0-\u1fa7\u1fb0-\u1fb4\u1fb6-\u1fb7\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fc7\u1fd0-\u1fd3\u1fd6-\u1fd7\u1fe0-\u1fe7\u1ff2-\u1ff4\u1ff6-\u1ff7\u210a\u210e-\u210f\u2113\u212f\u2134\u2139\u213c-\u213d\u2146-\u2149\u214e\u2184\u2c30-\u2c5e\u2c61\u2c65-\u2c66\u2c68\u2c6a\u2c6c\u2c71\u2c73-\u2c74\u2c76-\u2c7b\u2c81\u2c83\u2c85\u2c87\u2c89\u2c8b\u2c8d\u2c8f\u2c91\u2c93\u2c95\u2c97\u2c99\u2c9b\u2c9d\u2c9f\u2ca1\u2ca3\u2ca5\u2ca7\u2ca9\u2cab\u2cad\u2caf\u2cb1\u2cb3\u2cb5\u2cb7\u2cb9\u2cbb\u2cbd\u2cbf\u2cc1\u2cc3\u2cc5\u2cc7\u2cc9\u2ccb\u2ccd\u2ccf\u2cd1\u2cd3\u2cd5\u2cd7\u2cd9\u2cdb\u2cdd\u2cdf\u2ce1\u2ce3-\u2ce4\u2cec\u2cee\u2cf3\u2d00-\u2d25\u2d27\u2d2d\ua641\ua643\ua645\ua647\ua649\ua64b\ua64d\ua64f\ua651\ua653\ua655\ua657\ua659\ua65b\ua65d\ua65f\ua661\ua663\ua665\ua667\ua669\ua66b\ua66d\ua681\ua683\ua685\ua687\ua689\ua68b\ua68d\ua68f\ua691\ua693\ua695\ua697\ua723\ua725\ua727\ua729\ua72b\ua72d\ua72f-\ua731\ua733\ua735\ua737\ua739\ua73b\ua73d\ua73f\ua741\ua743\ua745\ua747\ua749\ua74b\ua74d\ua74f\ua751\ua753\ua755\ua757\ua759\ua75b\ua75d\ua75f\ua761\ua763\ua765\ua767\ua769\ua76b\ua76d\ua76f\ua771-\ua778\ua77a\ua77c\ua77f\ua781\ua783\ua785\ua787\ua78c\ua78e\ua791\ua793\ua7a1\ua7a3\ua7a5\ua7a7\ua7a9\ua7fa\ufb00-\ufb06\ufb13-\ufb17\uff41-\uff5a\u01c5\u01c8\u01cb\u01f2\u1f88-\u1f8f\u1f98-\u1f9f\u1fa8-\u1faf\u1fbc\u1fcc\u1ffc\u02b0-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0374\u037a\u0559\u0640\u06e5-\u06e6\u07f4-\u07f5\u07fa\u081a\u0824\u0828\u0971\u0e46\u0ec6\u10fc\u17d7\u1843\u1aa7\u1c78-\u1c7d\u1d2c-\u1d6a\u1d78\u1d9b-\u1dbf\u2071\u207f\u2090-\u209c\u2c7c-\u2c7d\u2d6f\u2e2f\u3005\u3031-\u3035\u303b\u309d-\u309e\u30fc-\u30fe\ua015\ua4f8-\ua4fd\ua60c\ua67f\ua717-\ua71f\ua770\ua788\ua7f8-\ua7f9\ua9cf\uaa70\uaadd\uaaf3-\uaaf4\uff70\uff9e-\uff9f\u16ee-\u16f0\u2160-\u2182\u2185-\u2188\u3007\u3021-\u3029\u3038-\u303a\ua6e6-\ua6ef0-9\u0660-\u0669\u06f0-\u06f9\u07c0-\u07c9\u0966-\u096f\u09e6-\u09ef\u0a66-\u0a6f\u0ae6-\u0aef\u0b66-\u0b6f\u0be6-\u0bef\u0c66-\u0c6f\u0ce6-\u0cef\u0d66-\u0d6f\u0e50-\u0e59\u0ed0-\u0ed9\u0f20-\u0f29\u1040-\u1049\u1090-\u1099\u17e0-\u17e9\u1810-\u1819\u1946-\u194f\u19d0-\u19d9\u1a80-\u1a89\u1a90-\u1a99\u1b50-\u1b59\u1bb0-\u1bb9\u1c40-\u1c49\u1c50-\u1c59\ua620-\ua629\ua8d0-\ua8d9\ua900-\ua909\ua9d0-\ua9d9\uaa50-\uaa59\uabf0-\uabf9\uff10-\uff19_\u203f-\u2040\u2054\ufe33-\ufe34\ufe4d-\ufe4f\uff3f\u00ad\u0600-\u0604\u061c\u06dd\u070f\u180e\u200b-\u200f\u202a-\u202e\u2060-\u2064\u2066-\u206f\ufeff\ufff9-\ufffb\u0300-\u036f\u0483-\u0487\u0591-\u05bd\u05bf\u05c1-\u05c2\u05c4-\u05c5\u05c7\u0610-\u061a\u064b-\u065f\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7-\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u08e4-\u08fe\u0900-\u0902\u093a\u093c\u0941-\u0948\u094d\u0951-\u0957\u0962-\u0963\u0981\u09bc\u09c1-\u09c4\u09cd\u09e2-\u09e3\u0a01-\u0a02\u0a3c\u0a41-\u0a42\u0a47-\u0a48\u0a4b-\u0a4d\u0a51\u0a70-\u0a71\u0a75\u0a81-\u0a82\u0abc\u0ac1-\u0ac5\u0ac7-\u0ac8\u0acd\u0ae2-\u0ae3\u0b01\u0b3c\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b62-\u0b63\u0b82\u0bc0\u0bcd\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55-\u0c56\u0c62-\u0c63\u0cbc\u0cbf\u0cc6\u0ccc-\u0ccd\u0ce2-\u0ce3\u0d41-\u0d44\u0d4d\u0d62-\u0d63\u0dca\u0dd2-\u0dd4\u0dd6\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb-\u0ebc\u0ec8-\u0ecd\u0f18-\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86-\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039-\u103a\u103d-\u103e\u1058-\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085-\u1086\u108d\u109d\u135d-\u135f\u1712-\u1714\u1732-\u1734\u1752-\u1753\u1772-\u1773\u17b4-\u17b5\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927-\u1928\u1932\u1939-\u193b\u1a17-\u1a18\u1a1b\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80-\u1b81\u1ba2-\u1ba5\u1ba8-\u1ba9\u1bab\u1be6\u1be8-\u1be9\u1bed\u1bef-\u1bf1\u1c2c-\u1c33\u1c36-\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1cf4\u1dc0-\u1de6\u1dfc-\u1dff\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302d\u3099-\u309a\ua66f\ua674-\ua67d\ua69f\ua6f0-\ua6f1\ua802\ua806\ua80b\ua825-\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31-\uaa32\uaa35-\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7-\uaab8\uaabe-\uaabf\uaac1\uaaec-\uaaed\uaaf6\uabe5\uabe8\uabed\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\u0903\u093b\u093e-\u0940\u0949-\u094c\u094e-\u094f\u0982-\u0983\u09be-\u09c0\u09c7-\u09c8\u09cb-\u09cc\u09d7\u0a03\u0a3e-\u0a40\u0a83\u0abe-\u0ac0\u0ac9\u0acb-\u0acc\u0b02-\u0b03\u0b3e\u0b40\u0b47-\u0b48\u0b4b-\u0b4c\u0b57\u0bbe-\u0bbf\u0bc1-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcc\u0bd7\u0c01-\u0c03\u0c41-\u0c44\u0c82-\u0c83\u0cbe\u0cc0-\u0cc4\u0cc7-\u0cc8\u0cca-\u0ccb\u0cd5-\u0cd6\u0d02-\u0d03\u0d3e-\u0d40\u0d46-\u0d48\u0d4a-\u0d4c\u0d57\u0d82-\u0d83\u0dcf-\u0dd1\u0dd8-\u0ddf\u0df2-\u0df3\u0f3e-\u0f3f\u0f7f\u102b-\u102c\u1031\u1038\u103b-\u103c\u1056-\u1057\u1062-\u1064\u1067-\u106d\u1083-\u1084\u1087-\u108c\u108f\u109a-\u109c\u17b6\u17be-\u17c5\u17c7-\u17c8\u1923-\u1926\u1929-\u192b\u1930-\u1931\u1933-\u1938\u19b0-\u19c0\u19c8-\u19c9\u1a19-\u1a1a\u1a55\u1a57\u1a61\u1a63-\u1a64\u1a6d-\u1a72\u1b04\u1b35\u1b3b\u1b3d-\u1b41\u1b43-\u1b44\u1b82\u1ba1\u1ba6-\u1ba7\u1baa\u1bac-\u1bad\u1be7\u1bea-\u1bec\u1bee\u1bf2-\u1bf3\u1c24-\u1c2b\u1c34-\u1c35\u1ce1\u1cf2-\u1cf3\u302e-\u302f\ua823-\ua824\ua827\ua880-\ua881\ua8b4-\ua8c3\ua952-\ua953\ua983\ua9b4-\ua9b5\ua9ba-\ua9bb\ua9bd-\ua9c0\uaa2f-\uaa30\uaa33-\uaa34\uaa4d\uaa7b\uaaeb\uaaee-\uaaef\uaaf5\uabe3-\uabe4\uabe6-\uabe7\uabe9-\uabea\uabec" - -// Kotlin lexer. -var Kotlin = internal.Register(MustNewLexer( - &Config{ - Name: "Kotlin", - Aliases: []string{"kotlin"}, - Filenames: []string{"*.kt"}, - MimeTypes: []string{"text/x-kotlin"}, - DotAll: true, - }, - Rules{ - "root": { - {`^\s*\[.*?\]`, NameAttribute, nil}, - {`[^\S\n]+`, Text, nil}, - {`\\\n`, Text, nil}, - {`//[^\n]*\n?`, CommentSingle, nil}, - {`/[*].*?[*]/`, CommentMultiline, nil}, - {`\n`, Text, nil}, - {`::|!!|\?[:.]`, Operator, nil}, - {`[~!%^&*()+=|\[\]:;,.<>/?-]`, Punctuation, nil}, - {`[{}]`, Punctuation, nil}, - {`"""[^"]*"""`, LiteralString, nil}, - {`"(\\\\|\\"|[^"\n])*["\n]`, LiteralString, nil}, - {`'\\.'|'[^\\]'`, LiteralStringChar, nil}, - {`0[xX][0-9a-fA-F]+[Uu]?[Ll]?|[0-9]+(\.[0-9]*)?([eE][+-][0-9]+)?[fF]?[Uu]?[Ll]?`, LiteralNumber, nil}, - {`(companion)(\s+)(object)`, ByGroups(Keyword, Text, Keyword), nil}, - {`(class|interface|object)(\s+)`, ByGroups(Keyword, Text), Push("class")}, - {`(package|import)(\s+)`, ByGroups(Keyword, Text), Push("package")}, - {`(val|var)(\s+)`, ByGroups(Keyword, Text), Push("property")}, - {`(fun)(\s+)(<[^>]*>\s+)?`, ByGroups(Keyword, Text, Text), Push("function")}, - {`(abstract|actual|annotation|as|break|by|catch|class|companion|const|constructor|continue|crossinline|data|do|dynamic|else|enum|expect|external|false|final|finally|for|fun|get|if|import|in|infix|inline|inner|interface|internal|is|lateinit|noinline|null|object|open|operator|out|override|package|private|protected|public|reified|return|sealed|set|super|suspend|tailrec|this|throw|true|try|val|var|vararg|when|where|while)\b`, Keyword, nil}, - {"(@?[" + kotlinIdentifier + "]*`)", Name, nil}, - }, - "package": { - {`\S+`, NameNamespace, Pop(1)}, - }, - "class": { - {"(@?[" + kotlinIdentifier + "]*`)", NameClass, Pop(1)}, - }, - "property": { - {"(@?[" + kotlinIdentifier + " ]*`)", NameProperty, Pop(1)}, - }, - "function": { - {"(@?[" + kotlinIdentifier + " ]*`)", NameFunction, Pop(1)}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/l/lighttpd.go b/vendor/github.com/alecthomas/chroma/lexers/l/lighttpd.go deleted file mode 100644 index 799b77c..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/l/lighttpd.go +++ /dev/null @@ -1,30 +0,0 @@ -package l - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Lighttpd Configuration File lexer. -var Lighttpd = internal.Register(MustNewLexer( - &Config{ - Name: "Lighttpd configuration file", - Aliases: []string{"lighty", "lighttpd"}, - Filenames: []string{}, - MimeTypes: []string{"text/x-lighttpd-conf"}, - }, - Rules{ - "root": { - {`#.*\n`, CommentSingle, nil}, - {`/\S*`, Name, nil}, - {`[a-zA-Z._-]+`, Keyword, nil}, - {`\d+\.\d+\.\d+\.\d+(?:/\d+)?`, LiteralNumber, nil}, - {`[0-9]+`, LiteralNumber, nil}, - {`=>|=~|\+=|==|=|\+`, Operator, nil}, - {`\$[A-Z]+`, NameBuiltin, nil}, - {`[(){}\[\],]`, Punctuation, nil}, - {`"([^"\\]*(?:\\.[^"\\]*)*)"`, LiteralStringDouble, nil}, - {`\s+`, Text, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/l/llvm.go b/vendor/github.com/alecthomas/chroma/lexers/l/llvm.go deleted file mode 100644 index 8f5b0b1..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/l/llvm.go +++ /dev/null @@ -1,43 +0,0 @@ -package l - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Llvm lexer. -var Llvm = internal.Register(MustNewLexer( - &Config{ - Name: "LLVM", - Aliases: []string{"llvm"}, - Filenames: []string{"*.ll"}, - MimeTypes: []string{"text/x-llvm"}, - }, - Rules{ - "root": { - Include("whitespace"), - {`([-a-zA-Z$._][\w\-$.]*|"[^"]*?")\s*:`, NameLabel, nil}, - Include("keyword"), - {`%([-a-zA-Z$._][\w\-$.]*|"[^"]*?")`, NameVariable, nil}, - {`@([-a-zA-Z$._][\w\-$.]*|"[^"]*?")`, NameVariableGlobal, nil}, - {`%\d+`, NameVariableAnonymous, nil}, - {`@\d+`, NameVariableGlobal, nil}, - {`#\d+`, NameVariableGlobal, nil}, - {`!([-a-zA-Z$._][\w\-$.]*|"[^"]*?")`, NameVariable, nil}, - {`!\d+`, NameVariableAnonymous, nil}, - {`c?"[^"]*?"`, LiteralString, nil}, - {`0[xX][a-fA-F0-9]+`, LiteralNumber, nil}, - {`-?\d+(?:[.]\d+)?(?:[eE][-+]?\d+(?:[.]\d+)?)?`, LiteralNumber, nil}, - {`[=<>{}\[\]()*.,!]|x\b`, Punctuation, nil}, - }, - "whitespace": { - {`(\n|\s)+`, Text, nil}, - {`;.*?\n`, Comment, nil}, - }, - "keyword": { - {Words(``, `\b`, `begin`, `end`, `true`, `false`, `declare`, `define`, `global`, `constant`, `private`, `linker_private`, `internal`, `available_externally`, `linkonce`, `linkonce_odr`, `weak`, `weak_odr`, `appending`, `dllimport`, `dllexport`, `common`, `default`, `hidden`, `protected`, `extern_weak`, `external`, `thread_local`, `zeroinitializer`, `undef`, `null`, `to`, `tail`, `target`, `triple`, `datalayout`, `volatile`, `nuw`, `nsw`, `nnan`, `ninf`, `nsz`, `arcp`, `fast`, `exact`, `inbounds`, `align`, `addrspace`, `section`, `alias`, `module`, `asm`, `sideeffect`, `gc`, `dbg`, `linker_private_weak`, `attributes`, `blockaddress`, `initialexec`, `localdynamic`, `localexec`, `prefix`, `unnamed_addr`, `ccc`, `fastcc`, `coldcc`, `x86_stdcallcc`, `x86_fastcallcc`, `arm_apcscc`, `arm_aapcscc`, `arm_aapcs_vfpcc`, `ptx_device`, `ptx_kernel`, `intel_ocl_bicc`, `msp430_intrcc`, `spir_func`, `spir_kernel`, `x86_64_sysvcc`, `x86_64_win64cc`, `x86_thiscallcc`, `cc`, `c`, `signext`, `zeroext`, `inreg`, `sret`, `nounwind`, `noreturn`, `noalias`, `nocapture`, `byval`, `nest`, `readnone`, `readonly`, `inlinehint`, `noinline`, `alwaysinline`, `optsize`, `ssp`, `sspreq`, `noredzone`, `noimplicitfloat`, `naked`, `builtin`, `cold`, `nobuiltin`, `noduplicate`, `nonlazybind`, `optnone`, `returns_twice`, `sanitize_address`, `sanitize_memory`, `sanitize_thread`, `sspstrong`, `uwtable`, `returned`, `type`, `opaque`, `eq`, `ne`, `slt`, `sgt`, `sle`, `sge`, `ult`, `ugt`, `ule`, `uge`, `oeq`, `one`, `olt`, `ogt`, `ole`, `oge`, `ord`, `uno`, `ueq`, `une`, `x`, `acq_rel`, `acquire`, `alignstack`, `atomic`, `catch`, `cleanup`, `filter`, `inteldialect`, `max`, `min`, `monotonic`, `nand`, `personality`, `release`, `seq_cst`, `singlethread`, `umax`, `umin`, `unordered`, `xchg`, `add`, `fadd`, `sub`, `fsub`, `mul`, `fmul`, `udiv`, `sdiv`, `fdiv`, `urem`, `srem`, `frem`, `shl`, `lshr`, `ashr`, `and`, `or`, `xor`, `icmp`, `fcmp`, `phi`, `call`, `trunc`, `zext`, `sext`, `fptrunc`, `fpext`, `uitofp`, `sitofp`, `fptoui`, `fptosi`, `inttoptr`, `ptrtoint`, `bitcast`, `addrspacecast`, `select`, `va_arg`, `ret`, `br`, `switch`, `invoke`, `unwind`, `unreachable`, `indirectbr`, `landingpad`, `resume`, `malloc`, `alloca`, `free`, `load`, `store`, `getelementptr`, `extractelement`, `insertelement`, `shufflevector`, `getresult`, `extractvalue`, `insertvalue`, `atomicrmw`, `cmpxchg`, `fence`, `allocsize`, `amdgpu_cs`, `amdgpu_gs`, `amdgpu_kernel`, `amdgpu_ps`, `amdgpu_vs`, `any`, `anyregcc`, `argmemonly`, `avr_intrcc`, `avr_signalcc`, `caller`, `catchpad`, `catchret`, `catchswitch`, `cleanuppad`, `cleanupret`, `comdat`, `convergent`, `cxx_fast_tlscc`, `deplibs`, `dereferenceable`, `dereferenceable_or_null`, `distinct`, `exactmatch`, `externally_initialized`, `from`, `ghccc`, `hhvm_ccc`, `hhvmcc`, `ifunc`, `inaccessiblemem_or_argmemonly`, `inaccessiblememonly`, `inalloca`, `jumptable`, `largest`, `local_unnamed_addr`, `minsize`, `musttail`, `noduplicates`, `none`, `nonnull`, `norecurse`, `notail`, `preserve_allcc`, `preserve_mostcc`, `prologue`, `safestack`, `samesize`, `source_filename`, `swiftcc`, `swifterror`, `swiftself`, `webkit_jscc`, `within`, `writeonly`, `x86_intrcc`, `x86_vectorcallcc`), Keyword, nil}, - {Words(``, ``, `void`, `half`, `float`, `double`, `x86_fp80`, `fp128`, `ppc_fp128`, `label`, `metadata`, `token`), KeywordType, nil}, - {`i[1-9]\d*`, Keyword, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/l/lua.go b/vendor/github.com/alecthomas/chroma/lexers/l/lua.go deleted file mode 100644 index c397de0..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/l/lua.go +++ /dev/null @@ -1,75 +0,0 @@ -package l - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Lua lexer. -var Lua = internal.Register(MustNewLexer( - &Config{ - Name: "Lua", - Aliases: []string{"lua"}, - Filenames: []string{"*.lua", "*.wlua"}, - MimeTypes: []string{"text/x-lua", "application/x-lua"}, - }, - Rules{ - "root": { - {`#!.*`, CommentPreproc, nil}, - Default(Push("base")), - }, - "ws": { - {`(?:--\[(=*)\[[\w\W]*?\](\1)\])`, CommentMultiline, nil}, - {`(?:--.*$)`, CommentSingle, nil}, - {`(?:\s+)`, Text, nil}, - }, - "base": { - Include("ws"), - {`(?i)0x[\da-f]*(\.[\da-f]*)?(p[+-]?\d+)?`, LiteralNumberHex, nil}, - {`(?i)(\d*\.\d+|\d+\.\d*)(e[+-]?\d+)?`, LiteralNumberFloat, nil}, - {`(?i)\d+e[+-]?\d+`, LiteralNumberFloat, nil}, - {`\d+`, LiteralNumberInteger, nil}, - {`(?s)\[(=*)\[.*?\]\1\]`, LiteralString, nil}, - {`::`, Punctuation, Push("label")}, - {`\.{3}`, Punctuation, nil}, - {`[=<>|~&+\-*/%#^]+|\.\.`, Operator, nil}, - {`[\[\]{}().,:;]`, Punctuation, nil}, - {`(and|or|not)\b`, OperatorWord, nil}, - {`(break|do|else|elseif|end|for|if|in|repeat|return|then|until|while)\b`, KeywordReserved, nil}, - {`goto\b`, KeywordReserved, Push("goto")}, - {`(local)\b`, KeywordDeclaration, nil}, - {`(true|false|nil)\b`, KeywordConstant, nil}, - {`(function)\b`, KeywordReserved, Push("funcname")}, - {`[A-Za-z_]\w*(\.[A-Za-z_]\w*)?`, Name, nil}, - {`'`, LiteralStringSingle, Combined("stringescape", "sqs")}, - {`"`, LiteralStringDouble, Combined("stringescape", "dqs")}, - }, - "funcname": { - Include("ws"), - {`[.:]`, Punctuation, nil}, - {`(?:[^\W\d]\w*)(?=(?:(?:--\[(=*)\[[\w\W]*?\](\2)\])|(?:--.*$)|(?:\s+))*[.:])`, NameClass, nil}, - {`(?:[^\W\d]\w*)`, NameFunction, Pop(1)}, - {`\(`, Punctuation, Pop(1)}, - }, - "goto": { - Include("ws"), - {`(?:[^\W\d]\w*)`, NameLabel, Pop(1)}, - }, - "label": { - Include("ws"), - {`::`, Punctuation, Pop(1)}, - {`(?:[^\W\d]\w*)`, NameLabel, nil}, - }, - "stringescape": { - {`\\([abfnrtv\\"\']|[\r\n]{1,2}|z\s*|x[0-9a-fA-F]{2}|\d{1,3}|u\{[0-9a-fA-F]+\})`, LiteralStringEscape, nil}, - }, - "sqs": { - {`'`, LiteralStringSingle, Pop(1)}, - {`[^\\']+`, LiteralStringSingle, nil}, - }, - "dqs": { - {`"`, LiteralStringDouble, Pop(1)}, - {`[^\\"]+`, LiteralStringDouble, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/lexers.go b/vendor/github.com/alecthomas/chroma/lexers/lexers.go deleted file mode 100644 index 2897299..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/lexers.go +++ /dev/null @@ -1,59 +0,0 @@ -// Package lexers contains the registry of all lexers. -// -// Sub-packages contain lexer implementations. -package lexers - -// nolint: golint -import ( - "github.com/alecthomas/chroma" - _ "github.com/alecthomas/chroma/lexers/a" - _ "github.com/alecthomas/chroma/lexers/b" - _ "github.com/alecthomas/chroma/lexers/c" - _ "github.com/alecthomas/chroma/lexers/circular" - _ "github.com/alecthomas/chroma/lexers/d" - _ "github.com/alecthomas/chroma/lexers/e" - _ "github.com/alecthomas/chroma/lexers/f" - _ "github.com/alecthomas/chroma/lexers/g" - _ "github.com/alecthomas/chroma/lexers/h" - _ "github.com/alecthomas/chroma/lexers/i" - "github.com/alecthomas/chroma/lexers/internal" - _ "github.com/alecthomas/chroma/lexers/j" - _ "github.com/alecthomas/chroma/lexers/k" - _ "github.com/alecthomas/chroma/lexers/l" - _ "github.com/alecthomas/chroma/lexers/m" - _ "github.com/alecthomas/chroma/lexers/n" - _ "github.com/alecthomas/chroma/lexers/o" - _ "github.com/alecthomas/chroma/lexers/p" - _ "github.com/alecthomas/chroma/lexers/q" - _ "github.com/alecthomas/chroma/lexers/r" - _ "github.com/alecthomas/chroma/lexers/s" - _ "github.com/alecthomas/chroma/lexers/t" - _ "github.com/alecthomas/chroma/lexers/v" - _ "github.com/alecthomas/chroma/lexers/w" - _ "github.com/alecthomas/chroma/lexers/x" - _ "github.com/alecthomas/chroma/lexers/y" -) - -// Registry of Lexers. -var Registry = internal.Registry - -// Names of all lexers, optionally including aliases. -func Names(withAliases bool) []string { return internal.Names(withAliases) } - -// Get a Lexer by name, alias or file extension. -func Get(name string) chroma.Lexer { return internal.Get(name) } - -// MatchMimeType attempts to find a lexer for the given MIME type. -func MatchMimeType(mimeType string) chroma.Lexer { return internal.MatchMimeType(mimeType) } - -// Match returns the first lexer matching filename. -func Match(filename string) chroma.Lexer { return internal.Match(filename) } - -// Analyse text content and return the "best" lexer.. -func Analyse(text string) chroma.Lexer { return internal.Analyse(text) } - -// Register a Lexer with the global registry. -func Register(lexer chroma.Lexer) chroma.Lexer { return internal.Register(lexer) } - -// Fallback lexer if no other is found. -var Fallback = internal.Fallback diff --git a/vendor/github.com/alecthomas/chroma/lexers/m/make.go b/vendor/github.com/alecthomas/chroma/lexers/m/make.go deleted file mode 100644 index eb9d9e6..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/m/make.go +++ /dev/null @@ -1,54 +0,0 @@ -package m - -import ( - . "github.com/alecthomas/chroma" // nolint - . "github.com/alecthomas/chroma/lexers/b" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Makefile lexer. -var Makefile = internal.Register(MustNewLexer( - &Config{ - Name: "Base Makefile", - Aliases: []string{"make", "makefile", "mf", "bsdmake"}, - Filenames: []string{"*.mak", "*.mk", "Makefile", "makefile", "Makefile.*", "GNUmakefile"}, - MimeTypes: []string{"text/x-makefile"}, - EnsureNL: true, - }, - Rules{ - "root": { - {`^(?:[\t ]+.*\n|\n)+`, Using(Bash), nil}, - {`\$[<@$+%?|*]`, Keyword, nil}, - {`\s+`, Text, nil}, - {`#.*?\n`, Comment, nil}, - {`(export)(\s+)(?=[\w${}\t -]+\n)`, ByGroups(Keyword, Text), Push("export")}, - {`export\s+`, Keyword, nil}, - {`([\w${}().-]+)(\s*)([!?:+]?=)([ \t]*)((?:.*\\\n)+|.*\n)`, ByGroups(NameVariable, Text, Operator, Text, Using(Bash)), nil}, - {`(?s)"(\\\\|\\.|[^"\\])*"`, LiteralStringDouble, nil}, - {`(?s)'(\\\\|\\.|[^'\\])*'`, LiteralStringSingle, nil}, - {`([^\n:]+)(:+)([ \t]*)`, ByGroups(NameFunction, Operator, Text), Push("block-header")}, - {`\$\(`, Keyword, Push("expansion")}, - }, - "expansion": { - {`[^$a-zA-Z_()]+`, Text, nil}, - {`[a-zA-Z_]+`, NameVariable, nil}, - {`\$`, Keyword, nil}, - {`\(`, Keyword, Push()}, - {`\)`, Keyword, Pop(1)}, - }, - "export": { - {`[\w${}-]+`, NameVariable, nil}, - {`\n`, Text, Pop(1)}, - {`\s+`, Text, nil}, - }, - "block-header": { - {`[,|]`, Punctuation, nil}, - {`#.*?\n`, Comment, Pop(1)}, - {`\\\n`, Text, nil}, - {`\$\(`, Keyword, Push("expansion")}, - {`[a-zA-Z_]+`, Name, nil}, - {`\n`, Text, Pop(1)}, - {`.`, Text, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/m/mako.go b/vendor/github.com/alecthomas/chroma/lexers/m/mako.go deleted file mode 100644 index f7c140d..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/m/mako.go +++ /dev/null @@ -1,60 +0,0 @@ -package m - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" - . "github.com/alecthomas/chroma/lexers/p" // nolint -) - -// Mako lexer. -var Mako = internal.Register(MustNewLexer( - &Config{ - Name: "Mako", - Aliases: []string{"mako"}, - Filenames: []string{"*.mao"}, - MimeTypes: []string{"application/x-mako"}, - }, - Rules{ - "root": { - {`(\s*)(%)(\s*end(?:\w+))(\n|\Z)`, ByGroups(Text, CommentPreproc, Keyword, Other), nil}, - {`(\s*)(%)([^\n]*)(\n|\Z)`, ByGroups(Text, CommentPreproc, Using(Python), Other), nil}, - {`(\s*)(##[^\n]*)(\n|\Z)`, ByGroups(Text, CommentPreproc, Other), nil}, - {`(?s)<%doc>.*?`, CommentPreproc, nil}, - {`(<%)([\w.:]+)`, ByGroups(CommentPreproc, NameBuiltin), Push("tag")}, - {`()`, ByGroups(CommentPreproc, NameBuiltin, CommentPreproc), nil}, - {`<%(?=([\w.:]+))`, CommentPreproc, Push("ondeftags")}, - {`(<%(?:!?))(.*?)(%>)(?s)`, ByGroups(CommentPreproc, Using(Python), CommentPreproc), nil}, - {`(\$\{)(.*?)(\})`, ByGroups(CommentPreproc, Using(Python), CommentPreproc), nil}, - {`(?sx) - (.+?) # anything, followed by: - (?: - (?<=\n)(?=%|\#\#) | # an eval or comment line - (?=\#\*) | # multiline comment - (?=`, CommentPreproc, Pop(1)}, - {`\s+`, Text, nil}, - }, - "attr": { - {`".*?"`, LiteralString, Pop(1)}, - {`'.*?'`, LiteralString, Pop(1)}, - {`[^\s>]+`, LiteralString, Pop(1)}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/m/markdown.go b/vendor/github.com/alecthomas/chroma/lexers/m/markdown.go deleted file mode 100644 index 3720da2..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/m/markdown.go +++ /dev/null @@ -1,47 +0,0 @@ -package m - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Markdown lexer. -var Markdown = internal.Register(MustNewLexer( - &Config{ - Name: "markdown", - Aliases: []string{"md", "mkd"}, - Filenames: []string{"*.md", "*.mkd", "*.markdown"}, - MimeTypes: []string{"text/x-markdown"}, - }, - Rules{ - "root": { - {`^(#[^#].+\n)`, ByGroups(GenericHeading), nil}, - {`^(#{2,6}.+\n)`, ByGroups(GenericSubheading), nil}, - {`^(\s*)([*-] )(\[[ xX]\])( .+\n)`, ByGroups(Text, Keyword, Keyword, UsingSelf("inline")), nil}, - {`^(\s*)([*-])(\s)(.+\n)`, ByGroups(Text, Keyword, Text, UsingSelf("inline")), nil}, - {`^(\s*)([0-9]+\.)( .+\n)`, ByGroups(Text, Keyword, UsingSelf("inline")), nil}, - {`^(\s*>\s)(.+\n)`, ByGroups(Keyword, GenericEmph), nil}, - {"^(```\\n)([\\w\\W]*?)(^```$)", ByGroups(String, Text, String), nil}, - {"^(```)(\\w+)(\\n)([\\w\\W]*?)(^```$)", - UsingByGroup( - internal.Get, - 2, 4, - String, String, String, Text, String, - ), - nil, - }, - Include("inline"), - }, - "inline": { - {`\\.`, Text, nil}, - {`(\s)([*_][^*_]+[*_])(\W|\n)`, ByGroups(Text, GenericEmph, Text), nil}, - {`(\s)((\*\*|__).*?)\3((?=\W|\n))`, ByGroups(Text, GenericStrong, GenericStrong, Text), nil}, - {`(\s)(~~[^~]+~~)((?=\W|\n))`, ByGroups(Text, GenericDeleted, Text), nil}, - {"`[^`]+`", LiteralStringBacktick, nil}, - {`[@#][\w/:]+`, NameEntity, nil}, - {`(!?\[)([^]]+)(\])(\()([^)]+)(\))`, ByGroups(Text, NameTag, Text, Text, NameAttribute, Text), nil}, - {`[^\\\s]+`, Text, nil}, - {`.|\n`, Text, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/m/mason.go b/vendor/github.com/alecthomas/chroma/lexers/m/mason.go deleted file mode 100644 index 5c70ab0..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/m/mason.go +++ /dev/null @@ -1,43 +0,0 @@ -package m - -import ( - . "github.com/alecthomas/chroma" // nolint - . "github.com/alecthomas/chroma/lexers/h" // nolint - "github.com/alecthomas/chroma/lexers/internal" - . "github.com/alecthomas/chroma/lexers/p" // nolint -) - -// Mason lexer. -var Mason = internal.Register(MustNewLexer( - &Config{ - Name: "Mason", - Aliases: []string{"mason"}, - Filenames: []string{"*.m", "*.mhtml", "*.mc", "*.mi", "autohandler", "dhandler"}, - MimeTypes: []string{"application/x-mason"}, - Priority: 0.1, - }, - Rules{ - "root": { - {`\s+`, Text, nil}, - {`(<%doc>)(.*?)()(?s)`, ByGroups(NameTag, CommentMultiline, NameTag), nil}, - {`(<%(?:def|method))(\s*)(.*?)(>)(.*?)()(?s)`, ByGroups(NameTag, Text, NameFunction, NameTag, UsingSelf("root"), NameTag), nil}, - {`(<%\w+)(.*?)(>)(.*?)()(?s)`, ByGroups(NameTag, NameFunction, NameTag, Using(Perl), NameTag), nil}, - {`(<&[^|])(.*?)(,.*?)?(&>)(?s)`, ByGroups(NameTag, NameFunction, Using(Perl), NameTag), nil}, - {`(<&\|)(.*?)(,.*?)?(&>)(?s)`, ByGroups(NameTag, NameFunction, Using(Perl), NameTag), nil}, - {``, NameTag, nil}, - {`(<%!?)(.*?)(%>)(?s)`, ByGroups(NameTag, Using(Perl), NameTag), nil}, - {`(?<=^)#[^\n]*(\n|\Z)`, Comment, nil}, - {`(?<=^)(%)([^\n]*)(\n|\Z)`, ByGroups(NameTag, Using(Perl), Other), nil}, - {`(?sx) - (.+?) # anything, followed by: - (?: - (?<=\n)(?=[%#]) | # an eval or comment line - (?=`, `:>`, `/.`, `+`, `-`, `*`, `/`, `^`, `&&`, `||`, `!`, `<>`, `|`, `/;`, `?`, `@`, `//`, `/@`, `@@`, `@@@`, `~~`, `===`, `&`, `<`, `>`, `<=`, `>=`), Operator, nil}, - {Words(``, ``, `,`, `;`, `(`, `)`, `[`, `]`, `{`, `}`), Punctuation, nil}, - {`".*?"`, LiteralString, nil}, - {`\s+`, TextWhitespace, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/m/matlab.go b/vendor/github.com/alecthomas/chroma/lexers/m/matlab.go deleted file mode 100644 index 5b0baa5..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/m/matlab.go +++ /dev/null @@ -1,51 +0,0 @@ -package m - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Matlab lexer. -var Matlab = internal.Register(MustNewLexer( - &Config{ - Name: "Matlab", - Aliases: []string{"matlab"}, - Filenames: []string{"*.m"}, - MimeTypes: []string{"text/matlab"}, - }, - Rules{ - "root": { - {`\n`, Text, nil}, - {`^!.*`, LiteralStringOther, nil}, - {`%\{\s*\n`, CommentMultiline, Push("blockcomment")}, - {`%.*$`, Comment, nil}, - {`^\s*function`, Keyword, Push("deffunc")}, - {Words(``, `\b`, `break`, `case`, `catch`, `classdef`, `continue`, `else`, `elseif`, `end`, `enumerated`, `events`, `for`, `function`, `global`, `if`, `methods`, `otherwise`, `parfor`, `persistent`, `properties`, `return`, `spmd`, `switch`, `try`, `while`), Keyword, nil}, - {`(sin|sind|sinh|asin|asind|asinh|cos|cosd|cosh|acos|acosd|acosh|tan|tand|tanh|atan|atand|atan2|atanh|sec|secd|sech|asec|asecd|asech|csc|cscd|csch|acsc|acscd|acsch|cot|cotd|coth|acot|acotd|acoth|hypot|exp|expm1|log|log1p|log10|log2|pow2|realpow|reallog|realsqrt|sqrt|nthroot|nextpow2|abs|angle|complex|conj|imag|real|unwrap|isreal|cplxpair|fix|floor|ceil|round|mod|rem|sign|airy|besselj|bessely|besselh|besseli|besselk|beta|betainc|betaln|ellipj|ellipke|erf|erfc|erfcx|erfinv|expint|gamma|gammainc|gammaln|psi|legendre|cross|dot|factor|isprime|primes|gcd|lcm|rat|rats|perms|nchoosek|factorial|cart2sph|cart2pol|pol2cart|sph2cart|hsv2rgb|rgb2hsv|zeros|ones|eye|repmat|rand|randn|linspace|logspace|freqspace|meshgrid|accumarray|size|length|ndims|numel|disp|isempty|isequal|isequalwithequalnans|cat|reshape|diag|blkdiag|tril|triu|fliplr|flipud|flipdim|rot90|find|end|sub2ind|ind2sub|bsxfun|ndgrid|permute|ipermute|shiftdim|circshift|squeeze|isscalar|isvector|ans|eps|realmax|realmin|pi|i|inf|nan|isnan|isinf|isfinite|j|why|compan|gallery|hadamard|hankel|hilb|invhilb|magic|pascal|rosser|toeplitz|vander|wilkinson)\b`, NameBuiltin, nil}, - {`\.\.\..*$`, Comment, nil}, - {`-|==|~=|<|>|<=|>=|&&|&|~|\|\|?`, Operator, nil}, - {`\.\*|\*|\+|\.\^|\.\\|\.\/|\/|\\`, Operator, nil}, - {`\[|\]|\(|\)|\{|\}|:|@|\.|,`, Punctuation, nil}, - {`=|:|;`, Punctuation, nil}, - {`(?<=[\w)\].])\'+`, Operator, nil}, - {`(\d+\.\d*|\d*\.\d+)([eEf][+-]?[0-9]+)?`, LiteralNumberFloat, nil}, - {`\d+[eEf][+-]?[0-9]+`, LiteralNumberFloat, nil}, - {`\d+`, LiteralNumberInteger, nil}, - {`(?|->|<-|\\/|xor|/\\)`, Operator, nil}, - {`(<|>|<=|>=|==|=|!=)`, Operator, nil}, - {`(\+|-|\*|/|div|mod)`, Operator, nil}, - {Words(`\b`, `\b`, `in`, `subset`, `superset`, `union`, `diff`, `symdiff`, `intersect`), Operator, nil}, - {`(\\|\.\.|\+\+)`, Operator, nil}, - {`[|()\[\]{},:;]`, Punctuation, nil}, - {`(true|false)\b`, KeywordConstant, nil}, - {`([+-]?)\d+(\.(?!\.)\d*)?([eE][-+]?\d+)?`, LiteralNumber, nil}, - {`::\s*([^\W\d]\w*)(\s*\([^\)]*\))?`, NameDecorator, nil}, - {`\b([^\W\d]\w*)\b(\()`, ByGroups(NameFunction, Punctuation), nil}, - {`[^\W\d]\w*`, NameOther, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/m/mlir.go b/vendor/github.com/alecthomas/chroma/lexers/m/mlir.go deleted file mode 100644 index 2ae4b00..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/m/mlir.go +++ /dev/null @@ -1,43 +0,0 @@ -package m - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// MLIR lexer. -var Mlir = internal.Register(MustNewLexer( - &Config{ - Name: "MLIR", - Aliases: []string{"mlir"}, - Filenames: []string{"*.mlir"}, - MimeTypes: []string{"text/x-mlir"}, - }, - Rules{ - "root": { - Include("whitespace"), - {`c?"[^"]*?"`, LiteralString, nil}, - {`\^([-a-zA-Z$._][\w\-$.0-9]*)\s*`, NameLabel, nil}, - {`([\w\d_$.]+)\s*=`, NameLabel, nil}, - Include("keyword"), - {`->`, Punctuation, nil}, - {`@([\w_][\w\d_$.]*)`, NameFunction, nil}, - {`[%#][\w\d_$.]+`, NameVariable, nil}, - {`([1-9?][\d?]*\s*x)+`, LiteralNumber, nil}, - {`0[xX][a-fA-F0-9]+`, LiteralNumber, nil}, - {`-?\d+(?:[.]\d+)?(?:[eE][-+]?\d+(?:[.]\d+)?)?`, LiteralNumber, nil}, - {`[=<>{}\[\]()*.,!:]|x\b`, Punctuation, nil}, - {`[\w\d]+`, Text, nil}, - }, - "whitespace": { - {`(\n|\s)+`, Text, nil}, - {`//.*?\n`, Comment, nil}, - }, - "keyword": { - {Words(``, ``, `constant`, `return`), KeywordType, nil}, - {Words(``, ``, `func`, `loc`, `memref`, `tensor`, `vector`), KeywordType, nil}, - {`bf16|f16|f32|f64|index`, Keyword, nil}, - {`i[1-9]\d*`, Keyword, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/m/modula2.go b/vendor/github.com/alecthomas/chroma/lexers/m/modula2.go deleted file mode 100644 index 6fadb79..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/m/modula2.go +++ /dev/null @@ -1,115 +0,0 @@ -package m - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Modula-2 lexer. -var Modula2 = internal.Register(MustNewLexer( - &Config{ - Name: "Modula-2", - Aliases: []string{"modula2", "m2"}, - Filenames: []string{"*.def", "*.mod"}, - MimeTypes: []string{"text/x-modula2"}, - DotAll: true, - }, - Rules{ - "whitespace": { - {`\n+`, Text, nil}, - {`\s+`, Text, nil}, - }, - "dialecttags": { - {`\(\*!m2pim\*\)`, CommentSpecial, nil}, - {`\(\*!m2iso\*\)`, CommentSpecial, nil}, - {`\(\*!m2r10\*\)`, CommentSpecial, nil}, - {`\(\*!objm2\*\)`, CommentSpecial, nil}, - {`\(\*!m2iso\+aglet\*\)`, CommentSpecial, nil}, - {`\(\*!m2pim\+gm2\*\)`, CommentSpecial, nil}, - {`\(\*!m2iso\+p1\*\)`, CommentSpecial, nil}, - {`\(\*!m2iso\+xds\*\)`, CommentSpecial, nil}, - }, - "identifiers": { - {`([a-zA-Z_$][\w$]*)`, Name, nil}, - }, - "prefixed_number_literals": { - {`0b[01]+(\'[01]+)*`, LiteralNumberBin, nil}, - {`0[ux][0-9A-F]+(\'[0-9A-F]+)*`, LiteralNumberHex, nil}, - }, - "plain_number_literals": { - {`[0-9]+(\'[0-9]+)*\.[0-9]+(\'[0-9]+)*[eE][+-]?[0-9]+(\'[0-9]+)*`, LiteralNumberFloat, nil}, - {`[0-9]+(\'[0-9]+)*\.[0-9]+(\'[0-9]+)*`, LiteralNumberFloat, nil}, - {`[0-9]+(\'[0-9]+)*`, LiteralNumberInteger, nil}, - }, - "suffixed_number_literals": { - {`[0-7]+B`, LiteralNumberOct, nil}, - {`[0-7]+C`, LiteralNumberOct, nil}, - {`[0-9A-F]+H`, LiteralNumberHex, nil}, - }, - "string_literals": { - {`'(\\\\|\\'|[^'])*'`, LiteralString, nil}, - {`"(\\\\|\\"|[^"])*"`, LiteralString, nil}, - }, - "digraph_operators": { - {`\*\.`, Operator, nil}, - {`\+>`, Operator, nil}, - {`<>`, Operator, nil}, - {`<=`, Operator, nil}, - {`>=`, Operator, nil}, - {`==`, Operator, nil}, - {`::`, Operator, nil}, - {`:=`, Operator, nil}, - {`\+\+`, Operator, nil}, - {`--`, Operator, nil}, - }, - "unigraph_operators": { - {`[+-]`, Operator, nil}, - {`[*/]`, Operator, nil}, - {`\\`, Operator, nil}, - {`[=#<>]`, Operator, nil}, - {`\^`, Operator, nil}, - {`@`, Operator, nil}, - {`&`, Operator, nil}, - {`~`, Operator, nil}, - {"`", Operator, nil}, - }, - "digraph_punctuation": { - {`\.\.`, Punctuation, nil}, - {`<<`, Punctuation, nil}, - {`>>`, Punctuation, nil}, - {`->`, Punctuation, nil}, - {`\|#`, Punctuation, nil}, - {`##`, Punctuation, nil}, - {`\|\*`, Punctuation, nil}, - }, - "unigraph_punctuation": { - {`[()\[\]{},.:;|]`, Punctuation, nil}, - {`!`, Punctuation, nil}, - {`\?`, Punctuation, nil}, - }, - "comments": { - {`^//.*?\n`, CommentSingle, nil}, - {`\(\*([^$].*?)\*\)`, CommentMultiline, nil}, - {`/\*(.*?)\*/`, CommentMultiline, nil}, - }, - "pragmas": { - {`<\*.*?\*>`, CommentPreproc, nil}, - {`\(\*\$.*?\*\)`, CommentPreproc, nil}, - }, - "root": { - Include("whitespace"), - Include("dialecttags"), - Include("pragmas"), - Include("comments"), - Include("identifiers"), - Include("suffixed_number_literals"), - Include("prefixed_number_literals"), - Include("plain_number_literals"), - Include("string_literals"), - Include("digraph_punctuation"), - Include("digraph_operators"), - Include("unigraph_punctuation"), - Include("unigraph_operators"), - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/m/monkeyc.go b/vendor/github.com/alecthomas/chroma/lexers/m/monkeyc.go deleted file mode 100644 index 828ff0b..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/m/monkeyc.go +++ /dev/null @@ -1,62 +0,0 @@ -package m - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -var MonkeyC = internal.Register(MustNewLexer( - &Config{ - Name: "MonkeyC", - Aliases: []string{"monkeyc"}, - Filenames: []string{"*.mc"}, - MimeTypes: []string{"text/x-monkeyc"}, - }, - Rules{ - "root": { - {`[^\S\n]+`, Text, nil}, - {`\n`, Text, nil}, - {`//(\n|[\w\W]*?[^\\]\n)`, CommentSingle, nil}, - {`/(\\\n)?[*][\w\W]*?[*](\\\n)?/`, CommentMultiline, nil}, - {`/(\\\n)?[*][\w\W]*`, CommentMultiline, nil}, - {`:[a-zA-Z_][\w_\.]*`, StringSymbol, nil}, - {`[{}\[\]\(\),;:\.]`, Punctuation, nil}, - {`[&~\|\^!+\-*\/%=?]`, Operator, nil}, - {`=>|[+-]=|&&|\|\||>>|<<|[<>]=?|[!=]=`, Operator, nil}, - {`\b(and|or|instanceof|has|extends|new)`, OperatorWord, nil}, - {Words(``, `\b`, `NaN`, `null`, `true`, `false`), KeywordConstant, nil}, - {`(using)((?:\s|\\\\s)+)`, ByGroups(KeywordNamespace, Text), Push("import")}, - {`(class)((?:\s|\\\\s)+)`, ByGroups(KeywordDeclaration, Text), Push("class")}, - {`(function)((?:\s|\\\\s)+)`, ByGroups(KeywordDeclaration, Text), Push("function")}, - {`(module)((?:\s|\\\\s)+)`, ByGroups(KeywordDeclaration, Text), Push("module")}, - {`\b(if|else|for|switch|case|while|break|continue|default|do|try|catch|finally|return|throw|extends|function)\b`, Keyword, nil}, - {`\b(const|enum|hidden|public|protected|private|static)\b`, KeywordType, nil}, - {`\bvar\b`, KeywordDeclaration, nil}, - {`\b(Activity(Monitor|Recording)?|Ant(Plus)?|Application|Attention|Background|Communications|Cryptography|FitContributor|Graphics|Gregorian|Lang|Math|Media|Persisted(Content|Locations)|Position|Properties|Sensor(History|Logging)?|Storage|StringUtil|System|Test|Time(r)?|Toybox|UserProfile|WatchUi|Rez|Drawables|Strings|Fonts|method)\b`, NameBuiltin, nil}, - {`\b(me|self|\$)\b`, NameBuiltinPseudo, nil}, - {`"(\\\\|\\"|[^"])*"`, LiteralStringDouble, nil}, - {`'(\\\\|\\'|[^''])*'`, LiteralStringSingle, nil}, - {`-?(0x[0-9a-fA-F]+l?)`, NumberHex, nil}, - {`-?([0-9]+(\.[0-9]+[df]?|[df]))\b`, NumberFloat, nil}, - {`-?([0-9]+l?)`, NumberInteger, nil}, - {`[a-zA-Z_]\w*`, Name, nil}, - }, - "import": { - {`([a-zA-Z_][\w_\.]*)(?:(\s+)(as)(\s+)([a-zA-Z_][\w_]*))?`, ByGroups(NameNamespace, Text, KeywordNamespace, Text, NameNamespace), nil}, - Default(Pop(1)), - }, - "class": { - {`([a-zA-Z_][\w_\.]*)(?:(\s+)(extends)(\s+)([a-zA-Z_][\w_\.]*))?`, ByGroups(NameClass, Text, KeywordDeclaration, Text, NameClass), nil}, - Default(Pop(1)), - }, - "function": { - {`initialize`, NameFunctionMagic, nil}, - {`[a-zA-Z_][\w_\.]*`, NameFunction, nil}, - Default(Pop(1)), - }, - "module": { - {`[a-zA-Z_][\w_\.]*`, NameNamespace, nil}, - Default(Pop(1)), - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/m/mwscript.go b/vendor/github.com/alecthomas/chroma/lexers/m/mwscript.go deleted file mode 100644 index b86bbdf..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/m/mwscript.go +++ /dev/null @@ -1,53 +0,0 @@ -package m - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// MorrowindScript lexer. -var MorrowindScript = internal.Register(MustNewLexer( - &Config{ - Name: "MorrowindScript", - Aliases: []string{"morrowind", "mwscript"}, - Filenames: []string{}, - MimeTypes: []string{}, - }, - Rules{ - "root": { - {`\s+`, Text, nil}, - {`;.*$`, Comment, nil}, - {`(["'])(?:(?=(\\?))\2.)*?\1`, LiteralString, nil}, - {`[0-9]+`, LiteralNumberInteger, nil}, - {`[0-9]+\.[0-9]*(?!\.)`, LiteralNumberFloat, nil}, - Include("keywords"), - Include("types"), - Include("builtins"), - Include("punct"), - Include("operators"), - {`\n`, Text, nil}, - {`\S+\s+`, Text, nil}, - {`[a-zA-Z0-9_]\w*`, Name, nil}, - }, - "keywords": { - {`(?i)(begin|if|else|elseif|endif|while|endwhile|return|to)\b`, Keyword, nil}, - {`(?i)(end)\b`, Keyword, nil}, - {`(?i)(end)\w+.*$`, Text, nil}, - {`[\w+]->[\w+]`, Operator, nil}, - }, - "builtins": { - {`(?i)(Activate|AddItem|AddSoulGem|AddSpell|AddToLevCreature|AddToLevItem|AddTopic|AIActivate|AIEscort|AIEscortCell|AIFollow|AiFollowCell|AITravel|AIWander|BecomeWerewolf|Cast|ChangeWeather|Choice|ClearForceJump|ClearForceMoveJump|ClearForceRun|ClearForceSneak|ClearInfoActor|Disable|DisableLevitation|DisablePlayerControls|DisablePlayerFighting|DisablePlayerJumping|DisablePlayerLooking|DisablePlayerMagic|DisablePlayerViewSwitch|DisableTeleporting|DisableVanityMode|DontSaveObject|Drop|Enable|EnableBirthMenu|EnableClassMenu|EnableInventoryMenu|EnableLevelUpMenu|EnableLevitation|EnableMagicMenu|EnableMapMenu|EnableNameMenu|EnablePlayerControls|EnablePlayerFighting|EnablePlayerJumping|EnablePlayerLooking|EnablePlayerMagic|EnablePlayerViewSwitch|EnableRaceMenu|EnableRest|EnableStatsMenu|EnableTeleporting|EnableVanityMode|Equip|ExplodeSpell|Face|FadeIn|FadeOut|FadeTo|Fall|ForceGreeting|ForceJump|ForceRun|ForceSneak|Flee|GotoJail|HurtCollidingActor|HurtStandingActor|Journal|Lock|LoopGroup|LowerRank|MenuTest|MessageBox|ModAcrobatics|ModAgility|ModAlarm|ModAlchemy|ModAlteration|ModArmorBonus|ModArmorer|ModAthletics|ModAttackBonus|ModAxe|ModBlock|ModBluntWeapon|ModCastPenalty|ModChameleon|ModConjuration|ModCurrentFatigue|ModCurrentHealth|ModCurrentMagicka|ModDefendBonus|ModDestruction|ModDisposition|ModEnchant|ModEndurance|ModFactionReaction|ModFatigue|ModFight|ModFlee|ModFlying|ModHandToHand|ModHealth|ModHeavyArmor|ModIllusion|ModIntelligence|ModInvisible|ModLightArmor|ModLongBlade|ModLuck|ModMagicka|ModMarksman|ModMediumArmor|ModMercantile|ModMysticism|ModParalysis|ModPCCrimeLevel|ModPCFacRep|ModPersonality|ModRegion|ModReputation|ModResistBlight|ModResistCorprus|ModResistDisease|ModResistFire|ModResistFrost|ModResistMagicka|ModResistNormalWeapons|ModResistParalysis|ModResistPoison|ModResistShock|ModRestoration|ModScale|ModSecurity|ModShortBlade|ModSilence|ModSneak|ModSpear|ModSpeechcraft|ModSpeed|ModStrength|ModSuperJump|ModSwimSpeed|ModUnarmored|ModWaterBreathing|ModWaterLevel|ModWaterWalking|ModWillpower|Move|MoveWorld|PayFine|PayFineThief|PCClearExpelled|PCExpell|PCForce1stPerson|PCForce3rdPerson|PCJoinFaction|PCLowerRank|PCRaiseRank|PlaceAtMe|PlaceAtPC|PlaceItem|PlaceItemCell|PlayBink|PlayGroup|PlayLoopSound3D|PlayLoopSound3DVP|PlaySound|PlaySound3D|PlaySound3DVP|PlaySoundVP|Position|PositionCell|RaiseRank|RemoveEffects|RemoveFromLevCreature|RemoveFromLevItem|RemoveItem|RemoveSoulgem|RemoveSpell|RemoveSpellEffects|ResetActors|Resurrect|Rotate|RotateWorld|Say|StartScript|[S|s]et|SetAcrobatics|SetAgility|SetAlarm|SetAlchemy|SetAlteration|SetAngle|SetArmorBonus|SetArmorer|SetAthletics|SetAtStart|SetAttackBonus|SetAxe|SetBlock|SetBluntWeapon|SetCastPenalty|SetChameleon|SetConjuration|SetDelete|SetDefendBonus|SetDestruction|SetDisposition|SetEnchant|SetEndurance|SetFactionReaction|SetFatigue|SetFight|SetFlee|SetFlying|SetHandToHand|SetHealth|SetHeavyArmor|SetIllusion|SetIntelligence|SetInvisible|SetJournalIndex|SetLightArmor|SetLevel|SetLongBlade|SetLuck|SetMagicka|SetMarksman|SetMediumArmor|SetMercantile|SetMysticism|SetParalysis|SetPCCCrimeLevel|SetPCFacRep|SetPersonality|SetPos|SetReputation|SetResistBlight|SetResistCorprus|SetResistDisease|SetResistFire|SetResistFrost|SetResistMagicka|SetResistNormalWeapons|SetResistParalysis|SetResistPoison|SetResistShock|SetRestoration|SetScale|SetSecurity|SetShortBlade|SetSilence|SetSneak|SetSpear|SetSpeechcraft|SetSpeed|SetStrength|SetSuperJump|SetSwimSpeed|SetUnarmored|SetWaterBreathing|SetWaterlevel|SetWaterWalking|SetWerewolfAcrobatics|SetWillpower|ShowMap|ShowRestMenu|SkipAnim|StartCombat|StopCombat|StopScript|StopSound|StreamMusic|TurnMoonRed|TurnMoonWhite|UndoWerewolf|Unlock|WakeUpPC|CenterOnCell|CenterOnExterior|FillMap|FixMe|ToggleAI|ToggleCollision|ToggleFogOfWar|ToggleGodMode|ToggleMenus|ToggleSky|ToggleWorld|ToggleVanityMode|CellChanged|GetAcrobatics|GetAgility|GetAIPackageDone|GetAlarm|GetAlchemy|GetAlteration|GetAngle|GetArmorBonus|GetArmorer|GetAthletics|GetAttackBonus|GetAttacked|GetArmorType,|GetAxe|GetBlightDisease|GetBlock|GetBluntWeapon|GetButtonPressed|GetCastPenalty|GetChameleon|GetCollidingActor|GetCollidingPC|GetCommonDisease|GetConjuration|GetCurrentAIPackage|GetCurrentTime|GetCurrentWeather|GetDeadCount|GetDefendBonus|GetDestruction|GetDetected|GetDisabled|GetDisposition|GetDistance|GetEffect|GetEnchant|GetEndurance|GetFatigue|GetFight|GetFlee|GetFlying|GetForceJump|GetForceRun|GetForceSneak|GetHandToHand|GetHealth|GetHealthGetRatio|GetHeavyArmor|GetIllusion|GetIntelligence|GetInterior|GetInvisible|GetItemCount|GetJournalIndex|GetLightArmor|GetLineOfSight|GetLOS|GetLevel|GetLocked|GetLongBlade|GetLuck|GetMagicka|GetMarksman|GetMasserPhase|GetSecundaPhase|GetMediumArmor|GetMercantile|GetMysticism|GetParalysis|GetPCCell|GetPCCrimeLevel|GetPCinJail|GetPCJumping|GetPCRank|GetPCRunning|GetPCSleep|GetPCSneaking|GetPCTraveling|GetPersonality|GetPlayerControlsDisabled|GetPlayerFightingDisabled|GetPlayerJumpingDisabled|GetPlayerLookingDisabled|GetPlayerMagicDisabled|GetPos|GetRace|GetReputation|GetResistBlight|GetResistCorprus|GetResistDisease|GetResistFire|GetResistFrost|GetResistMagicka|GetResistNormalWeapons|GetResistParalysis|GetResistPoison|GetResistShock|GetRestoration|GetScale|GetSecondsPassed|GetSecurity|GetShortBlade|GetSilence|GetSneak|GetSoundPlaying|GetSpear|GetSpeechcraft|GetSpeed|GetSpell|GetSpellEffects|GetSpellReadied|GetSquareRoot|GetStandingActor|GetStandingPC|GetStrength|GetSuperJump|GetSwimSpeed|GetTarget|GetUnarmored|GetVanityModeDisabled|GetWaterBreathing|GetWaterLevel|GetWaterWalking|GetWeaponDrawn|GetWeaponType|GetWerewolfKills|GetWillpower|GetWindSpeed|HasItemEquipped|HasSoulgem|HitAttemptOnMe|HitOnMe|IsWerewolf|MenuMode|OnActivate|OnDeath|OnKnockout|OnMurder|PCExpelled|PCGet3rdPerson|PCKnownWerewolf|Random|RepairedOnMe|SameFaction|SayDone|ScriptRunning|AllowWereWolfForceGreeting|Companion|MinimumProfit|NoFlee|NoHello|NoIdle|NoLore|OnPCAdd|OnPCDrop|OnPCEquip|OnPCHitMe|OnPCRepair|PCSkipEquip|OnPCSoulGemUse|StayOutside|CrimeGoldDiscount|CrimeGoldTurnIn|Day|DaysPassed|GameHour|Month|NPCVoiceDistance|PCRace|PCWerewolf|PCVampire|TimeScale|VampClan|Year)\b`, NameBuiltin, nil}, - {`(?i)(sEffectWaterBreathing|sEffectSwiftSwim|sEffectWaterWalking|sEffectShield|sEffectFireShield|sEffectLightningShield|sEffectFrostShield|sEffectBurden|sEffectFeather|sEffectJump|sEffectLevitate|sEffectSlowFall|sEffectLock|sEffectOpen|sEffectFireDamage|sEffectShockDamage|sEffectFrostDamage|sEffectDrainAttribute|sEffectDrainHealth|sEffectDrainSpellpoints|sEffectDrainFatigue|sEffectDrainSkill|sEffectDamageAttribute|sEffectDamageHealth|sEffectDamageMagicka|sEffectDamageFatigue|sEffectDamageSkill|sEffectPoison|sEffectWeaknessToFire|sEffectWeaknessToFrost|sEffectWeaknessToShock|sEffectWeaknessToMagicka|sEffectWeaknessToCommonDisease|sEffectWeaknessToBlightDisease|sEffectWeaknessToCorprusDisease|sEffectWeaknessToPoison|sEffectWeaknessToNormalWeapons|sEffectDisintegrateWeapon|sEffectDisintegrateArmor|sEffectInvisibility|sEffectChameleon|sEffectLight|sEffectSanctuary|sEffectNightEye|sEffectCharm|sEffectParalyze|sEffectSilence|sEffectBlind|sEffectSound|sEffectCalmHumanoid|sEffectCalmCreature|sEffectFrenzyHumanoid|sEffectFrenzyCreature|sEffectDemoralizeHumanoid|sEffectDemoralizeCreature|sEffectRallyHumanoid|sEffectRallyCreature|sEffectDispel|sEffectSoultrap|sEffectTelekinesis|sEffectMark|sEffectRecall|sEffectDivineIntervention|sEffectAlmsiviIntervention|sEffectDetectAnimal|sEffectDetectEnchantment|sEffectDetectKey|sEffectSpellAbsorption|sEffectReflect|sEffectCureCommonDisease|sEffectCureBlightDisease|sEffectCureCorprusDisease|sEffectCurePoison|sEffectCureParalyzation|sEffectRestoreAttribute|sEffectRestoreHealth|sEffectRestoreSpellPoints|sEffectRestoreFatigue|sEffectRestoreSkill|sEffectFortifyAttribute|sEffectFortifyHealth|sEffectFortifySpellpoints|sEffectFortifyFatigue|sEffectFortifySkill|sEffectFortifyMagickaMultiplier|sEffectAbsorbAttribute|sEffectAbsorbHealth|sEffectAbsorbSpellPoints|sEffectAbsorbFatigue|sEffectAbsorbSkill|sEffectResistFire|sEffectResistFrost|sEffectResistShock|sEffectResistMagicka|sEffectResistCommonDisease|sEffectResistBlightDisease|sEffectResistCorprusDisease|sEffectResistPoison|sEffectResistNormalWeapons|sEffectResistParalysis|sEffectRemoveCurse|sEffectTurnUndead|sEffectSummonScamp|sEffectSummonClannfear|sEffectSummonDaedroth|sEffectSummonDremora|sEffectSummonAncestralGhost|sEffectSummonSkeletalMinion|sEffectSummonLeastBonewalker|sEffectSummonGreaterBonewalker|sEffectSummonBonelord|sEffectSummonWingedTwilight|sEffectSummonHunger|sEffectSummonGoldensaint|sEffectSummonFlameAtronach|sEffectSummonFrostAtronach|sEffectSummonStormAtronach|sEffectFortifyAttackBonus|sEffectCommandCreatures|sEffectCommandHumanoids|sEffectBoundDagger|sEffectBoundLongsword|sEffectBoundMace|sEffectBoundBattleAxe|sEffectBoundSpear|sEffectBoundLongbow|sEffectExtraSpell|sEffectBoundCuirass|sEffectBoundHelm|sEffectBoundBoots|sEffectBoundShield|sEffectBoundGloves|sEffectCorpus|sEffectVampirism|sEffectSummonCenturionSphere|sEffectSunDamage|sEffectStuntedMagicka)`, NameBuiltin, nil}, - }, - "types": { - {`(?i)(short|long|float)\b`, KeywordType, nil}, - }, - "punct": { - {`[()]`, Punctuation, nil}, - }, - "operators": { - {`[#=,./%+\-?]`, Operator, nil}, - {`(==|<=|<|>=|>|!=)`, Operator, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/m/myghty.go b/vendor/github.com/alecthomas/chroma/lexers/m/myghty.go deleted file mode 100644 index 02a20ea..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/m/myghty.go +++ /dev/null @@ -1,40 +0,0 @@ -package m - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" - . "github.com/alecthomas/chroma/lexers/p" // nolint -) - -// Myghty lexer. -var Myghty = internal.Register(MustNewLexer( - &Config{ - Name: "Myghty", - Aliases: []string{"myghty"}, - Filenames: []string{"*.myt", "autodelegate"}, - MimeTypes: []string{"application/x-myghty"}, - }, - Rules{ - "root": { - {`\s+`, Text, nil}, - {`(<%(?:def|method))(\s*)(.*?)(>)(.*?)()(?s)`, ByGroups(NameTag, Text, NameFunction, NameTag, UsingSelf("root"), NameTag), nil}, - {`(<%\w+)(.*?)(>)(.*?)()(?s)`, ByGroups(NameTag, NameFunction, NameTag, Using(Python), NameTag), nil}, - {`(<&[^|])(.*?)(,.*?)?(&>)`, ByGroups(NameTag, NameFunction, Using(Python), NameTag), nil}, - {`(<&\|)(.*?)(,.*?)?(&>)(?s)`, ByGroups(NameTag, NameFunction, Using(Python), NameTag), nil}, - {``, NameTag, nil}, - {`(<%!?)(.*?)(%>)(?s)`, ByGroups(NameTag, Using(Python), NameTag), nil}, - {`(?<=^)#[^\n]*(\n|\Z)`, Comment, nil}, - {`(?<=^)(%)([^\n]*)(\n|\Z)`, ByGroups(NameTag, Using(Python), Other), nil}, - {`(?sx) - (.+?) # anything, followed by: - (?: - (?<=\n)(?=[%#]) | # an eval or comment line - (?==~!@#%^&|`?-]", Operator, nil}, - {`\b(tinyint|smallint|mediumint|int|integer|bigint|date|datetime|time|bit|bool|tinytext|mediumtext|longtext|text|tinyblob|mediumblob|longblob|blob|float|double|double\s+precision|real|numeric|dec|decimal|timestamp|year|char|varchar|varbinary|varcharacter|enum|set)(\b\s*)(\()?`, ByGroups(KeywordType, Text, Punctuation), nil}, - {`\b(add|all|alter|analyze|and|as|asc|asensitive|before|between|bigint|binary|blob|both|by|call|cascade|case|change|char|character|check|collate|column|condition|constraint|continue|convert|create|cross|current_date|current_time|current_timestamp|current_user|cursor|database|databases|day_hour|day_microsecond|day_minute|day_second|dec|decimal|declare|default|delayed|delete|desc|describe|deterministic|distinct|distinctrow|div|double|drop|dual|each|else|elseif|enclosed|escaped|exists|exit|explain|fetch|flush|float|float4|float8|for|force|foreign|from|fulltext|grant|group|having|high_priority|hour_microsecond|hour_minute|hour_second|identified|if|ignore|in|index|infile|inner|inout|insensitive|insert|int|int1|int2|int3|int4|int8|integer|interval|into|is|iterate|join|key|keys|kill|leading|leave|left|like|limit|lines|load|localtime|localtimestamp|lock|long|loop|low_priority|match|minute_microsecond|minute_second|mod|modifies|natural|no_write_to_binlog|not|numeric|on|optimize|option|optionally|or|order|out|outer|outfile|precision|primary|privileges|procedure|purge|raid0|read|reads|real|references|regexp|release|rename|repeat|replace|require|restrict|return|revoke|right|rlike|schema|schemas|second_microsecond|select|sensitive|separator|set|show|smallint|soname|spatial|specific|sql|sql_big_result|sql_calc_found_rows|sql_small_result|sqlexception|sqlstate|sqlwarning|ssl|starting|straight_join|table|terminated|then|to|trailing|trigger|undo|union|unique|unlock|unsigned|update|usage|use|user|using|utc_date|utc_time|utc_timestamp|values|varying|when|where|while|with|write|x509|xor|year_month|zerofill)\b`, Keyword, nil}, - {`\b(auto_increment|engine|charset|tables)\b`, KeywordPseudo, nil}, - {`(true|false|null)`, NameConstant, nil}, - {`([a-z_]\w*)(\s*)(\()`, ByGroups(NameFunction, Text, Punctuation), nil}, - {`[a-z_]\w*`, Name, nil}, - {`@[a-z0-9]*[._]*[a-z0-9]*`, NameVariable, nil}, - {`[;:()\[\],.]`, Punctuation, nil}, - }, - "multiline-comments": { - {`/\*`, CommentMultiline, Push("multiline-comments")}, - {`\*/`, CommentMultiline, Pop(1)}, - {`[^/*]+`, CommentMultiline, nil}, - {`[/*]`, CommentMultiline, nil}, - }, - "string": { - {`[^']+`, LiteralStringSingle, nil}, - {`''`, LiteralStringSingle, nil}, - {`'`, LiteralStringSingle, Pop(1)}, - }, - "double-string": { - {`[^"]+`, LiteralStringDouble, nil}, - {`""`, LiteralStringDouble, nil}, - {`"`, LiteralStringDouble, Pop(1)}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/n/nasm.go b/vendor/github.com/alecthomas/chroma/lexers/n/nasm.go deleted file mode 100644 index d769d15..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/n/nasm.go +++ /dev/null @@ -1,59 +0,0 @@ -package n - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Nasm lexer. -var Nasm = internal.Register(MustNewLexer( - &Config{ - Name: "NASM", - Aliases: []string{"nasm"}, - Filenames: []string{"*.asm", "*.ASM"}, - MimeTypes: []string{"text/x-nasm"}, - CaseInsensitive: true, - }, - Rules{ - "root": { - {`^\s*%`, CommentPreproc, Push("preproc")}, - Include("whitespace"), - {`[a-z$._?][\w$.?#@~]*:`, NameLabel, nil}, - {`([a-z$._?][\w$.?#@~]*)(\s+)(equ)`, ByGroups(NameConstant, KeywordDeclaration, KeywordDeclaration), Push("instruction-args")}, - {`BITS|USE16|USE32|SECTION|SEGMENT|ABSOLUTE|EXTERN|GLOBAL|ORG|ALIGN|STRUC|ENDSTRUC|COMMON|CPU|GROUP|UPPERCASE|IMPORT|EXPORT|LIBRARY|MODULE`, Keyword, Push("instruction-args")}, - {`(?:res|d)[bwdqt]|times`, KeywordDeclaration, Push("instruction-args")}, - {`[a-z$._?][\w$.?#@~]*`, NameFunction, Push("instruction-args")}, - {`[\r\n]+`, Text, nil}, - }, - "instruction-args": { - {"\"(\\\\\"|[^\"\\n])*\"|'(\\\\'|[^'\\n])*'|`(\\\\`|[^`\\n])*`", LiteralString, nil}, - {`(?:0x[0-9a-f]+|$0[0-9a-f]*|[0-9]+[0-9a-f]*h)`, LiteralNumberHex, nil}, - {`[0-7]+q`, LiteralNumberOct, nil}, - {`[01]+b`, LiteralNumberBin, nil}, - {`[0-9]+\.e?[0-9]+`, LiteralNumberFloat, nil}, - {`[0-9]+`, LiteralNumberInteger, nil}, - Include("punctuation"), - {`r[0-9][0-5]?[bwd]|[a-d][lh]|[er]?[a-d]x|[er]?[sb]p|[er]?[sd]i|[c-gs]s|st[0-7]|mm[0-7]|cr[0-4]|dr[0-367]|tr[3-7]`, NameBuiltin, nil}, - {`[a-z$._?][\w$.?#@~]*`, NameVariable, nil}, - {`[\r\n]+`, Text, Pop(1)}, - Include("whitespace"), - }, - "preproc": { - {`[^;\n]+`, CommentPreproc, nil}, - {`;.*?\n`, CommentSingle, Pop(1)}, - {`\n`, CommentPreproc, Pop(1)}, - }, - "whitespace": { - {`\n`, Text, nil}, - {`[ \t]+`, Text, nil}, - {`;.*`, CommentSingle, nil}, - }, - "punctuation": { - {`[,():\[\]]+`, Punctuation, nil}, - {`[&|^<>+*/%~-]+`, Operator, nil}, - {`[$]+`, KeywordConstant, nil}, - {`seg|wrt|strict`, OperatorWord, nil}, - {`byte|[dq]?word`, KeywordType, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/n/newspeak.go b/vendor/github.com/alecthomas/chroma/lexers/n/newspeak.go deleted file mode 100644 index 1a6a37b..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/n/newspeak.go +++ /dev/null @@ -1,55 +0,0 @@ -package n - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Newspeak lexer. -var Newspeak = internal.Register(MustNewLexer( - &Config{ - Name: "Newspeak", - Aliases: []string{"newspeak"}, - Filenames: []string{"*.ns2"}, - MimeTypes: []string{"text/x-newspeak"}, - }, - Rules{ - "root": { - {`\b(Newsqueak2)\b`, KeywordDeclaration, nil}, - {`'[^']*'`, LiteralString, nil}, - {`\b(class)(\s+)(\w+)(\s*)`, ByGroups(KeywordDeclaration, Text, NameClass, Text), nil}, - {`\b(mixin|self|super|private|public|protected|nil|true|false)\b`, Keyword, nil}, - {`(\w+\:)(\s*)([a-zA-Z_]\w+)`, ByGroups(NameFunction, Text, NameVariable), nil}, - {`(\w+)(\s*)(=)`, ByGroups(NameAttribute, Text, Operator), nil}, - {`<\w+>`, CommentSpecial, nil}, - Include("expressionstat"), - Include("whitespace"), - }, - "expressionstat": { - {`(\d+\.\d*|\.\d+|\d+[fF])[fF]?`, LiteralNumberFloat, nil}, - {`\d+`, LiteralNumberInteger, nil}, - {`:\w+`, NameVariable, nil}, - {`(\w+)(::)`, ByGroups(NameVariable, Operator), nil}, - {`\w+:`, NameFunction, nil}, - {`\w+`, NameVariable, nil}, - {`\(|\)`, Punctuation, nil}, - {`\[|\]`, Punctuation, nil}, - {`\{|\}`, Punctuation, nil}, - {`(\^|\+|\/|~|\*|<|>|=|@|%|\||&|\?|!|,|-|:)`, Operator, nil}, - {`\.|;`, Punctuation, nil}, - Include("whitespace"), - Include("literals"), - }, - "literals": { - {`\$.`, LiteralString, nil}, - {`'[^']*'`, LiteralString, nil}, - {`#'[^']*'`, LiteralStringSymbol, nil}, - {`#\w+:?`, LiteralStringSymbol, nil}, - {`#(\+|\/|~|\*|<|>|=|@|%|\||&|\?|!|,|-)+`, LiteralStringSymbol, nil}, - }, - "whitespace": { - {`\s+`, Text, nil}, - {`"[^"]*"`, Comment, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/n/nginx.go b/vendor/github.com/alecthomas/chroma/lexers/n/nginx.go deleted file mode 100644 index 840d100..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/n/nginx.go +++ /dev/null @@ -1,47 +0,0 @@ -package n - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Nginx Configuration File lexer. -var Nginx = internal.Register(MustNewLexer( - &Config{ - Name: "Nginx configuration file", - Aliases: []string{"nginx"}, - Filenames: []string{"nginx.conf"}, - MimeTypes: []string{"text/x-nginx-conf"}, - }, - Rules{ - "root": { - {`(include)(\s+)([^\s;]+)`, ByGroups(Keyword, Text, Name), nil}, - {`[^\s;#]+`, Keyword, Push("stmt")}, - Include("base"), - }, - "block": { - {`\}`, Punctuation, Pop(2)}, - {`[^\s;#]+`, KeywordNamespace, Push("stmt")}, - Include("base"), - }, - "stmt": { - {`\{`, Punctuation, Push("block")}, - {`;`, Punctuation, Pop(1)}, - Include("base"), - }, - "base": { - {`#.*\n`, CommentSingle, nil}, - {`on|off`, NameConstant, nil}, - {`\$[^\s;#()]+`, NameVariable, nil}, - {`([a-z0-9.-]+)(:)([0-9]+)`, ByGroups(Name, Punctuation, LiteralNumberInteger), nil}, - {`[a-z-]+/[a-z-+]+`, LiteralString, nil}, - {`[0-9]+[km]?\b`, LiteralNumberInteger, nil}, - {`(~)(\s*)([^\s{]+)`, ByGroups(Punctuation, Text, LiteralStringRegex), nil}, - {`[:=~]`, Punctuation, nil}, - {`[^\s;#{}$]+`, LiteralString, nil}, - {`/[^\s;#]*`, Name, nil}, - {`\s+`, Text, nil}, - {`[$;]`, Text, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/n/nim.go b/vendor/github.com/alecthomas/chroma/lexers/n/nim.go deleted file mode 100644 index b08c2f9..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/n/nim.go +++ /dev/null @@ -1,93 +0,0 @@ -package n - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Nim lexer. -var Nim = internal.Register(MustNewLexer( - &Config{ - Name: "Nim", - Aliases: []string{"nim", "nimrod"}, - Filenames: []string{"*.nim", "*.nimrod"}, - MimeTypes: []string{"text/x-nim"}, - CaseInsensitive: true, - }, - Rules{ - "root": { - {`#\[[\s\S]*?\]#`, CommentMultiline, nil}, - {`##.*$`, LiteralStringDoc, nil}, - {`#.*$`, Comment, nil}, - {`[*=><+\-/@$~&%!?|\\\[\]]`, Operator, nil}, - {"\\.\\.|\\.|,|\\[\\.|\\.\\]|\\{\\.|\\.\\}|\\(\\.|\\.\\)|\\{|\\}|\\(|\\)|:|\\^|`|;", Punctuation, nil}, - {`(?:[\w]+)"`, LiteralString, Push("rdqs")}, - {`"""`, LiteralString, Push("tdqs")}, - {`"`, LiteralString, Push("dqs")}, - {`'`, LiteralStringChar, Push("chars")}, - {`(a_?n_?d_?|o_?r_?|n_?o_?t_?|x_?o_?r_?|s_?h_?l_?|s_?h_?r_?|d_?i_?v_?|m_?o_?d_?|i_?n_?|n_?o_?t_?i_?n_?|i_?s_?|i_?s_?n_?o_?t_?)\b`, OperatorWord, nil}, - {`(p_?r_?o_?c_?\s)(?![(\[\]])`, Keyword, Push("funcname")}, - {`(a_?d_?d_?r_?|a_?n_?d_?|a_?s_?|a_?s_?m_?|a_?t_?o_?m_?i_?c_?|b_?i_?n_?d_?|b_?l_?o_?c_?k_?|b_?r_?e_?a_?k_?|c_?a_?s_?e_?|c_?a_?s_?t_?|c_?o_?n_?c_?e_?p_?t_?|c_?o_?n_?s_?t_?|c_?o_?n_?t_?i_?n_?u_?e_?|c_?o_?n_?v_?e_?r_?t_?e_?r_?|d_?e_?f_?e_?r_?|d_?i_?s_?c_?a_?r_?d_?|d_?i_?s_?t_?i_?n_?c_?t_?|d_?i_?v_?|d_?o_?|e_?l_?i_?f_?|e_?l_?s_?e_?|e_?n_?d_?|e_?n_?u_?m_?|e_?x_?c_?e_?p_?t_?|e_?x_?p_?o_?r_?t_?|f_?i_?n_?a_?l_?l_?y_?|f_?o_?r_?|f_?u_?n_?c_?|i_?f_?|i_?n_?|y_?i_?e_?l_?d_?|i_?n_?t_?e_?r_?f_?a_?c_?e_?|i_?s_?|i_?s_?n_?o_?t_?|i_?t_?e_?r_?a_?t_?o_?r_?|l_?e_?t_?|m_?a_?c_?r_?o_?|m_?e_?t_?h_?o_?d_?|m_?i_?x_?i_?n_?|m_?o_?d_?|n_?o_?t_?|n_?o_?t_?i_?n_?|o_?b_?j_?e_?c_?t_?|o_?f_?|o_?r_?|o_?u_?t_?|p_?r_?o_?c_?|p_?t_?r_?|r_?a_?i_?s_?e_?|r_?e_?f_?|r_?e_?t_?u_?r_?n_?|s_?h_?a_?r_?e_?d_?|s_?h_?l_?|s_?h_?r_?|s_?t_?a_?t_?i_?c_?|t_?e_?m_?p_?l_?a_?t_?e_?|t_?r_?y_?|t_?u_?p_?l_?e_?|t_?y_?p_?e_?|w_?h_?e_?n_?|w_?h_?i_?l_?e_?|w_?i_?t_?h_?|w_?i_?t_?h_?o_?u_?t_?|x_?o_?r_?)\b`, Keyword, nil}, - {`(f_?r_?o_?m_?|i_?m_?p_?o_?r_?t_?|i_?n_?c_?l_?u_?d_?e_?)\b`, KeywordNamespace, nil}, - {`(v_?a_?r)\b`, KeywordDeclaration, nil}, - {`(i_?n_?t_?|i_?n_?t_?8_?|i_?n_?t_?1_?6_?|i_?n_?t_?3_?2_?|i_?n_?t_?6_?4_?|f_?l_?o_?a_?t_?|f_?l_?o_?a_?t_?3_?2_?|f_?l_?o_?a_?t_?6_?4_?|b_?o_?o_?l_?|c_?h_?a_?r_?|r_?a_?n_?g_?e_?|a_?r_?r_?a_?y_?|s_?e_?q_?|s_?e_?t_?|s_?t_?r_?i_?n_?g_?)\b`, KeywordType, nil}, - {`(n_?i_?l_?|t_?r_?u_?e_?|f_?a_?l_?s_?e_?)\b`, KeywordPseudo, nil}, - {`\b_\b`, Name, nil}, // Standalone _ used as discardable variable identifier - {`\b((?![_\d])\w)(((?!_)\w)|(_(?!_)\w))*`, Name, nil}, - {`[0-9][0-9_]*(?=([e.]|\'f(32|64)))`, LiteralNumberFloat, Push("float-suffix", "float-number")}, - {`0x[a-f0-9][a-f0-9_]*`, LiteralNumberHex, Push("int-suffix")}, - {`0b[01][01_]*`, LiteralNumberBin, Push("int-suffix")}, - {`0o[0-7][0-7_]*`, LiteralNumberOct, Push("int-suffix")}, - {`[0-9][0-9_]*`, LiteralNumberInteger, Push("int-suffix")}, - {`\s+`, Text, nil}, - {`.+$`, Error, nil}, - }, - "chars": { - {`\\([\\abcefnrtvl"\']|x[a-f0-9]{2}|[0-9]{1,3})`, LiteralStringEscape, nil}, - {`'`, LiteralStringChar, Pop(1)}, - {`.`, LiteralStringChar, nil}, - }, - "strings": { - {`(? <= < >= > *")...), Operator, nil}, - {`[;:]`, Punctuation, nil}, - }, - "comment": { - {`\*/`, CommentMultiline, Pop(1)}, - {`.|\n`, CommentMultiline, nil}, - }, - "paren": { - {`\)`, Punctuation, Pop(1)}, - Include("root"), - }, - "list": { - {`\]`, Punctuation, Pop(1)}, - Include("root"), - }, - "qstring": { - {`"`, StringDouble, Pop(1)}, - {`\${`, StringInterpol, Push("interpol")}, - {`\\.`, StringEscape, nil}, - {`.|\n`, StringDouble, nil}, - }, - "istring": { - {`''\$`, StringEscape, nil}, // "$" - {`'''`, StringEscape, nil}, // "''" - {`''\\.`, StringEscape, nil}, // "\." - {`''`, StringSingle, Pop(1)}, - {`\${`, StringInterpol, Push("interpol")}, - // The next rule is important: "$" escapes any symbol except "{"! - {`\$.`, StringSingle, nil}, // "$." - {`.|\n`, StringSingle, nil}, - }, - "scope": { - {`}:`, Punctuation, Pop(1)}, - {`}`, Punctuation, Pop(1)}, - {`in` + nixb, Keyword, Pop(1)}, - {`\${`, StringInterpol, Push("interpol")}, - Include("root"), // "==" has to be above "=" - {Words(``, ``, strings.Fields("= ? ,")...), Operator, nil}, - }, - "interpol": { - {`}`, StringInterpol, Pop(1)}, - Include("root"), - }, - "id": { - {`[a-zA-Z_][a-zA-Z0-9_'-]*`, Name, nil}, - }, - "uri": { - {`[a-zA-Z][a-zA-Z0-9+.-]*:[a-zA-Z0-9%/?:@&=+$,_.!~*'-]+`, StringDoc, nil}, - }, - "path": { - {`[a-zA-Z0-9._+-]*(/[a-zA-Z0-9._+-]+)+`, StringRegex, nil}, - {`~(/[a-zA-Z0-9._+-]+)+/?`, StringRegex, nil}, - {`<[a-zA-Z0-9._+-]+(/[a-zA-Z0-9._+-]+)*>`, StringRegex, nil}, - }, - "int": { - {`-?[0-9]+` + nixb, NumberInteger, nil}, - }, - "float": { - {`-?(([1-9][0-9]*\.[0-9]*)|(0?\.[0-9]+))([Ee][+-]?[0-9]+)?` + nixb, NumberFloat, nil}, - }, - "space": { - {`[ \t\r\n]+`, Text, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/o/objectivec.go b/vendor/github.com/alecthomas/chroma/lexers/o/objectivec.go deleted file mode 100644 index e3d0b1c..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/o/objectivec.go +++ /dev/null @@ -1,165 +0,0 @@ -package o - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Objective-C lexer. -var ObjectiveC = internal.Register(MustNewLexer( - &Config{ - Name: "Objective-C", - Aliases: []string{"objective-c", "objectivec", "obj-c", "objc"}, - Filenames: []string{"*.m", "*.h"}, - MimeTypes: []string{"text/x-objective-c"}, - }, - Rules{ - "statements": { - {`@"`, LiteralString, Push("string")}, - {`@(YES|NO)`, LiteralNumber, nil}, - {`@'(\\.|\\[0-7]{1,3}|\\x[a-fA-F0-9]{1,2}|[^\\\'\n])'`, LiteralStringChar, nil}, - {`@(\d+\.\d*|\.\d+|\d+)[eE][+-]?\d+[lL]?`, LiteralNumberFloat, nil}, - {`@(\d+\.\d*|\.\d+|\d+[fF])[fF]?`, LiteralNumberFloat, nil}, - {`@0x[0-9a-fA-F]+[Ll]?`, LiteralNumberHex, nil}, - {`@0[0-7]+[Ll]?`, LiteralNumberOct, nil}, - {`@\d+[Ll]?`, LiteralNumberInteger, nil}, - {`@\(`, Literal, Push("literal_number")}, - {`@\[`, Literal, Push("literal_array")}, - {`@\{`, Literal, Push("literal_dictionary")}, - {Words(``, `\b`, `@selector`, `@private`, `@protected`, `@public`, `@encode`, `@synchronized`, `@try`, `@throw`, `@catch`, `@finally`, `@end`, `@property`, `@synthesize`, `__bridge`, `__bridge_transfer`, `__autoreleasing`, `__block`, `__weak`, `__strong`, `weak`, `strong`, `copy`, `retain`, `assign`, `unsafe_unretained`, `atomic`, `nonatomic`, `readonly`, `readwrite`, `setter`, `getter`, `typeof`, `in`, `out`, `inout`, `release`, `class`, `@dynamic`, `@optional`, `@required`, `@autoreleasepool`), Keyword, nil}, - {Words(``, `\b`, `id`, `instancetype`, `Class`, `IMP`, `SEL`, `BOOL`, `IBOutlet`, `IBAction`, `unichar`), KeywordType, nil}, - {`@(true|false|YES|NO)\n`, NameBuiltin, nil}, - {`(YES|NO|nil|self|super)\b`, NameBuiltin, nil}, - {`(Boolean|UInt8|SInt8|UInt16|SInt16|UInt32|SInt32)\b`, KeywordType, nil}, - {`(TRUE|FALSE)\b`, NameBuiltin, nil}, - {`(@interface|@implementation)(\s+)`, ByGroups(Keyword, Text), Push("#pop", "oc_classname")}, - {`(@class|@protocol)(\s+)`, ByGroups(Keyword, Text), Push("#pop", "oc_forward_classname")}, - {`@`, Punctuation, nil}, - {`(L?)(")`, ByGroups(LiteralStringAffix, LiteralString), Push("string")}, - {`(L?)(')(\\.|\\[0-7]{1,3}|\\x[a-fA-F0-9]{1,2}|[^\\\'\n])(')`, ByGroups(LiteralStringAffix, LiteralStringChar, LiteralStringChar, LiteralStringChar), nil}, - {`(\d+\.\d*|\.\d+|\d+)[eE][+-]?\d+[LlUu]*`, LiteralNumberFloat, nil}, - {`(\d+\.\d*|\.\d+|\d+[fF])[fF]?`, LiteralNumberFloat, nil}, - {`0x[0-9a-fA-F]+[LlUu]*`, LiteralNumberHex, nil}, - {`0[0-7]+[LlUu]*`, LiteralNumberOct, nil}, - {`\d+[LlUu]*`, LiteralNumberInteger, nil}, - {`\*/`, Error, nil}, - {`[~!%^&*+=|?:<>/-]`, Operator, nil}, - {`[()\[\],.]`, Punctuation, nil}, - {Words(``, `\b`, `asm`, `auto`, `break`, `case`, `const`, `continue`, `default`, `do`, `else`, `enum`, `extern`, `for`, `goto`, `if`, `register`, `restricted`, `return`, `sizeof`, `static`, `struct`, `switch`, `typedef`, `union`, `volatile`, `while`), Keyword, nil}, - {`(bool|int|long|float|short|double|char|unsigned|signed|void)\b`, KeywordType, nil}, - {Words(``, `\b`, `inline`, `_inline`, `__inline`, `naked`, `restrict`, `thread`, `typename`), KeywordReserved, nil}, - {`(__m(128i|128d|128|64))\b`, KeywordReserved, nil}, - {Words(`__`, `\b`, `asm`, `int8`, `based`, `except`, `int16`, `stdcall`, `cdecl`, `fastcall`, `int32`, `declspec`, `finally`, `int64`, `try`, `leave`, `wchar_t`, `w64`, `unaligned`, `raise`, `noop`, `identifier`, `forceinline`, `assume`), KeywordReserved, nil}, - {`(true|false|NULL)\b`, NameBuiltin, nil}, - {`([a-zA-Z_]\w*)(\s*)(:)(?!:)`, ByGroups(NameLabel, Text, Punctuation), nil}, - {`[a-zA-Z_]\w*`, Name, nil}, - }, - "oc_classname": { - {`([a-zA-Z$_][\w$]*)(\s*:\s*)([a-zA-Z$_][\w$]*)?(\s*)(\{)`, ByGroups(NameClass, Text, NameClass, Text, Punctuation), Push("#pop", "oc_ivars")}, - {`([a-zA-Z$_][\w$]*)(\s*:\s*)([a-zA-Z$_][\w$]*)?`, ByGroups(NameClass, Text, NameClass), Pop(1)}, - {`([a-zA-Z$_][\w$]*)(\s*)(\([a-zA-Z$_][\w$]*\))(\s*)(\{)`, ByGroups(NameClass, Text, NameLabel, Text, Punctuation), Push("#pop", "oc_ivars")}, - {`([a-zA-Z$_][\w$]*)(\s*)(\([a-zA-Z$_][\w$]*\))`, ByGroups(NameClass, Text, NameLabel), Pop(1)}, - {`([a-zA-Z$_][\w$]*)(\s*)(\{)`, ByGroups(NameClass, Text, Punctuation), Push("#pop", "oc_ivars")}, - {`([a-zA-Z$_][\w$]*)`, NameClass, Pop(1)}, - }, - "oc_forward_classname": { - {`([a-zA-Z$_][\w$]*)(\s*,\s*)`, ByGroups(NameClass, Text), Push("oc_forward_classname")}, - {`([a-zA-Z$_][\w$]*)(\s*;?)`, ByGroups(NameClass, Text), Pop(1)}, - }, - "oc_ivars": { - Include("whitespace"), - Include("statements"), - {`;`, Punctuation, nil}, - {`\{`, Punctuation, Push()}, - {`\}`, Punctuation, Pop(1)}, - }, - "root": { - {`^([-+])(\s*)(\(.*?\))?(\s*)([a-zA-Z$_][\w$]*:?)`, ByGroups(Punctuation, Text, UsingSelf("root"), Text, NameFunction), Push("method")}, - Include("whitespace"), - {`((?:[\w*\s])+?(?:\s|[*]))([a-zA-Z_]\w*)(\s*\([^;]*?\))([^;{]*)(\{)`, ByGroups(UsingSelf("root"), NameFunction, UsingSelf("root"), UsingSelf("root"), Punctuation), Push("function")}, - {`((?:[\w*\s])+?(?:\s|[*]))([a-zA-Z_]\w*)(\s*\([^;]*?\))([^;]*)(;)`, ByGroups(UsingSelf("root"), NameFunction, UsingSelf("root"), UsingSelf("root"), Punctuation), nil}, - Default(Push("statement")), - }, - "method": { - Include("whitespace"), - {`,`, Punctuation, nil}, - {`\.\.\.`, Punctuation, nil}, - {`(\(.*?\))(\s*)([a-zA-Z$_][\w$]*)`, ByGroups(UsingSelf("root"), Text, NameVariable), nil}, - {`[a-zA-Z$_][\w$]*:`, NameFunction, nil}, - {`;`, Punctuation, Pop(1)}, - {`\{`, Punctuation, Push("function")}, - Default(Pop(1)), - }, - "literal_number": { - {`\(`, Punctuation, Push("literal_number_inner")}, - {`\)`, Literal, Pop(1)}, - Include("statement"), - }, - "literal_number_inner": { - {`\(`, Punctuation, Push()}, - {`\)`, Punctuation, Pop(1)}, - Include("statement"), - }, - "literal_array": { - {`\[`, Punctuation, Push("literal_array_inner")}, - {`\]`, Literal, Pop(1)}, - Include("statement"), - }, - "literal_array_inner": { - {`\[`, Punctuation, Push()}, - {`\]`, Punctuation, Pop(1)}, - Include("statement"), - }, - "literal_dictionary": { - {`\}`, Literal, Pop(1)}, - Include("statement"), - }, - "whitespace": { - {`^#if\s+0`, CommentPreproc, Push("if0")}, - {`^#`, CommentPreproc, Push("macro")}, - {`^(\s*(?:/[*].*?[*]/\s*)?)(#if\s+0)`, ByGroups(UsingSelf("root"), CommentPreproc), Push("if0")}, - {`^(\s*(?:/[*].*?[*]/\s*)?)(#)`, ByGroups(UsingSelf("root"), CommentPreproc), Push("macro")}, - {`\n`, Text, nil}, - {`\s+`, Text, nil}, - {`\\\n`, Text, nil}, - {`//(\n|[\w\W]*?[^\\]\n)`, CommentSingle, nil}, - {`/(\\\n)?[*][\w\W]*?[*](\\\n)?/`, CommentMultiline, nil}, - {`/(\\\n)?[*][\w\W]*`, CommentMultiline, nil}, - }, - "statement": { - Include("whitespace"), - Include("statements"), - {`[{}]`, Punctuation, nil}, - {`;`, Punctuation, Pop(1)}, - }, - "function": { - Include("whitespace"), - Include("statements"), - {`;`, Punctuation, nil}, - {`\{`, Punctuation, Push()}, - {`\}`, Punctuation, Pop(1)}, - }, - "string": { - {`"`, LiteralString, Pop(1)}, - {`\\([\\abfnrtv"\']|x[a-fA-F0-9]{2,4}|u[a-fA-F0-9]{4}|U[a-fA-F0-9]{8}|[0-7]{1,3})`, LiteralStringEscape, nil}, - {`[^\\"\n]+`, LiteralString, nil}, - {`\\\n`, LiteralString, nil}, - {`\\`, LiteralString, nil}, - }, - "macro": { - {`(include)(\s*(?:/[*].*?[*]/\s*)?)([^\n]+)`, ByGroups(CommentPreproc, Text, CommentPreprocFile), nil}, - {`[^/\n]+`, CommentPreproc, nil}, - {`/[*](.|\n)*?[*]/`, CommentMultiline, nil}, - {`//.*?\n`, CommentSingle, Pop(1)}, - {`/`, CommentPreproc, nil}, - {`(?<=\\)\n`, CommentPreproc, nil}, - {`\n`, CommentPreproc, Pop(1)}, - }, - "if0": { - {`^\s*#if.*?(?|\\[<|\\[|\\?\\?|\\?|>\\}|>]|>|=|<-|<|;;|;|:>|:=|::|:|\\.\\.|\\.|->|-\\.|-|,|\\+|\\*|\\)|\\(|&&|&|#|!=)", Operator, nil}, - {`([=<>@^|&+\*/$%-]|[!?~])?[!$%&*+\./:<=>?@^|~-]`, Operator, nil}, - {`\b(and|asr|land|lor|lsl|lxor|mod|or)\b`, OperatorWord, nil}, - {`\b(unit|int|float|bool|string|char|list|array)\b`, KeywordType, nil}, - {`[^\W\d][\w']*`, Name, nil}, - {`-?\d[\d_]*(.[\d_]*)?([eE][+\-]?\d[\d_]*)`, LiteralNumberFloat, nil}, - {`0[xX][\da-fA-F][\da-fA-F_]*`, LiteralNumberHex, nil}, - {`0[oO][0-7][0-7_]*`, LiteralNumberOct, nil}, - {`0[bB][01][01_]*`, LiteralNumberBin, nil}, - {`\d[\d_]*`, LiteralNumberInteger, nil}, - {`'(?:(\\[\\\"'ntbr ])|(\\[0-9]{3})|(\\x[0-9a-fA-F]{2}))'`, LiteralStringChar, nil}, - {`'.'`, LiteralStringChar, nil}, - {`'`, Keyword, nil}, - {`"`, LiteralStringDouble, Push("string")}, - {`[~?][a-z][\w\']*:`, NameVariable, nil}, - }, - "comment": { - {`[^(*)]+`, Comment, nil}, - {`\(\*`, Comment, Push()}, - {`\*\)`, Comment, Pop(1)}, - {`[(*)]`, Comment, nil}, - }, - "string": { - {`[^\\"]+`, LiteralStringDouble, nil}, - Include("escape-sequence"), - {`\\\n`, LiteralStringDouble, nil}, - {`"`, LiteralStringDouble, Pop(1)}, - }, - "dotted": { - {`\s+`, Text, nil}, - {`\.`, Punctuation, nil}, - {`[A-Z][\w\']*(?=\s*\.)`, NameNamespace, nil}, - {`[A-Z][\w\']*`, NameClass, Pop(1)}, - {`[a-z_][\w\']*`, Name, Pop(1)}, - Default(Pop(1)), - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/o/octave.go b/vendor/github.com/alecthomas/chroma/lexers/o/octave.go deleted file mode 100644 index c23b586..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/o/octave.go +++ /dev/null @@ -1,46 +0,0 @@ -package o - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Octave lexer. -var Octave = internal.Register(MustNewLexer( - &Config{ - Name: "Octave", - Aliases: []string{"octave"}, - Filenames: []string{"*.m"}, - MimeTypes: []string{"text/octave"}, - }, - Rules{ - "root": { - {`[%#].*$`, Comment, nil}, - {`^\s*function`, Keyword, Push("deffunc")}, - {Words(``, `\b`, `__FILE__`, `__LINE__`, `break`, `case`, `catch`, `classdef`, `continue`, `do`, `else`, `elseif`, `end`, `end_try_catch`, `end_unwind_protect`, `endclassdef`, `endevents`, `endfor`, `endfunction`, `endif`, `endmethods`, `endproperties`, `endswitch`, `endwhile`, `events`, `for`, `function`, `get`, `global`, `if`, `methods`, `otherwise`, `persistent`, `properties`, `return`, `set`, `static`, `switch`, `try`, `until`, `unwind_protect`, `unwind_protect_cleanup`, `while`), Keyword, nil}, - {Words(``, `\b`, `addlistener`, `addpath`, `addproperty`, `all`, `and`, `any`, `argnames`, `argv`, `assignin`, `atexit`, `autoload`, `available_graphics_toolkits`, `beep_on_error`, `bitand`, `bitmax`, `bitor`, `bitshift`, `bitxor`, `cat`, `cell`, `cellstr`, `char`, `class`, `clc`, `columns`, `command_line_path`, `completion_append_char`, `completion_matches`, `complex`, `confirm_recursive_rmdir`, `cputime`, `crash_dumps_octave_core`, `ctranspose`, `cumprod`, `cumsum`, `debug_on_error`, `debug_on_interrupt`, `debug_on_warning`, `default_save_options`, `dellistener`, `diag`, `diff`, `disp`, `doc_cache_file`, `do_string_escapes`, `double`, `drawnow`, `e`, `echo_executing_commands`, `eps`, `eq`, `errno`, `errno_list`, `error`, `eval`, `evalin`, `exec`, `exist`, `exit`, `eye`, `false`, `fclear`, `fclose`, `fcntl`, `fdisp`, `feof`, `ferror`, `feval`, `fflush`, `fgetl`, `fgets`, `fieldnames`, `file_in_loadpath`, `file_in_path`, `filemarker`, `filesep`, `find_dir_in_path`, `fixed_point_format`, `fnmatch`, `fopen`, `fork`, `formula`, `fprintf`, `fputs`, `fread`, `freport`, `frewind`, `fscanf`, `fseek`, `fskipl`, `ftell`, `functions`, `fwrite`, `ge`, `genpath`, `get`, `getegid`, `getenv`, `geteuid`, `getgid`, `getpgrp`, `getpid`, `getppid`, `getuid`, `glob`, `gt`, `gui_mode`, `history_control`, `history_file`, `history_size`, `history_timestamp_format_string`, `home`, `horzcat`, `hypot`, `ifelse`, `ignore_function_time_stamp`, `inferiorto`, `info_file`, `info_program`, `inline`, `input`, `intmax`, `intmin`, `ipermute`, `is_absolute_filename`, `isargout`, `isbool`, `iscell`, `iscellstr`, `ischar`, `iscomplex`, `isempty`, `isfield`, `isfloat`, `isglobal`, `ishandle`, `isieee`, `isindex`, `isinteger`, `islogical`, `ismatrix`, `ismethod`, `isnull`, `isnumeric`, `isobject`, `isreal`, `is_rooted_relative_filename`, `issorted`, `isstruct`, `isvarname`, `kbhit`, `keyboard`, `kill`, `lasterr`, `lasterror`, `lastwarn`, `ldivide`, `le`, `length`, `link`, `linspace`, `logical`, `lstat`, `lt`, `make_absolute_filename`, `makeinfo_program`, `max_recursion_depth`, `merge`, `methods`, `mfilename`, `minus`, `mislocked`, `mkdir`, `mkfifo`, `mkstemp`, `mldivide`, `mlock`, `mouse_wheel_zoom`, `mpower`, `mrdivide`, `mtimes`, `munlock`, `nargin`, `nargout`, `native_float_format`, `ndims`, `ne`, `nfields`, `nnz`, `norm`, `not`, `numel`, `nzmax`, `octave_config_info`, `octave_core_file_limit`, `octave_core_file_name`, `octave_core_file_options`, `ones`, `or`, `output_max_field_width`, `output_precision`, `page_output_immediately`, `page_screen_output`, `path`, `pathsep`, `pause`, `pclose`, `permute`, `pi`, `pipe`, `plus`, `popen`, `power`, `print_empty_dimensions`, `printf`, `print_struct_array_contents`, `prod`, `program_invocation_name`, `program_name`, `putenv`, `puts`, `pwd`, `quit`, `rats`, `rdivide`, `readdir`, `readlink`, `read_readline_init_file`, `realmax`, `realmin`, `rehash`, `rename`, `repelems`, `re_read_readline_init_file`, `reset`, `reshape`, `resize`, `restoredefaultpath`, `rethrow`, `rmdir`, `rmfield`, `rmpath`, `rows`, `save_header_format_string`, `save_precision`, `saving_history`, `scanf`, `set`, `setenv`, `shell_cmd`, `sighup_dumps_octave_core`, `sigterm_dumps_octave_core`, `silent_functions`, `single`, `size`, `size_equal`, `sizemax`, `sizeof`, `sleep`, `source`, `sparse_auto_mutate`, `split_long_rows`, `sprintf`, `squeeze`, `sscanf`, `stat`, `stderr`, `stdin`, `stdout`, `strcmp`, `strcmpi`, `string_fill_char`, `strncmp`, `strncmpi`, `struct`, `struct_levels_to_print`, `strvcat`, `subsasgn`, `subsref`, `sum`, `sumsq`, `superiorto`, `suppress_verbose_help_message`, `symlink`, `system`, `tic`, `tilde_expand`, `times`, `tmpfile`, `tmpnam`, `toc`, `toupper`, `transpose`, `true`, `typeinfo`, `umask`, `uminus`, `uname`, `undo_string_escapes`, `unlink`, `uplus`, `upper`, `usage`, `usleep`, `vec`, `vectorize`, `vertcat`, `waitpid`, `warning`, `warranty`, `whos_line_format`, `yes_or_no`, `zeros`, `inf`, `Inf`, `nan`, `NaN`, `close`, `load`, `who`, `whos`, `accumarray`, `accumdim`, `acosd`, `acotd`, `acscd`, `addtodate`, `allchild`, `ancestor`, `anova`, `arch_fit`, `arch_rnd`, `arch_test`, `area`, `arma_rnd`, `arrayfun`, `ascii`, `asctime`, `asecd`, `asind`, `assert`, `atand`, `autoreg_matrix`, `autumn`, `axes`, `axis`, `bar`, `barh`, `bartlett`, `bartlett_test`, `beep`, `betacdf`, `betainv`, `betapdf`, `betarnd`, `bicgstab`, `bicubic`, `binary`, `binocdf`, `binoinv`, `binopdf`, `binornd`, `bitcmp`, `bitget`, `bitset`, `blackman`, `blanks`, `blkdiag`, `bone`, `box`, `brighten`, `calendar`, `cast`, `cauchy_cdf`, `cauchy_inv`, `cauchy_pdf`, `cauchy_rnd`, `caxis`, `celldisp`, `center`, `cgs`, `chisquare_test_homogeneity`, `chisquare_test_independence`, `circshift`, `cla`, `clabel`, `clf`, `clock`, `cloglog`, `closereq`, `colon`, `colorbar`, `colormap`, `colperm`, `comet`, `common_size`, `commutation_matrix`, `compan`, `compare_versions`, `compass`, `computer`, `cond`, `condest`, `contour`, `contourc`, `contourf`, `contrast`, `conv`, `convhull`, `cool`, `copper`, `copyfile`, `cor`, `corrcoef`, `cor_test`, `cosd`, `cotd`, `cov`, `cplxpair`, `cross`, `cscd`, `cstrcat`, `csvread`, `csvwrite`, `ctime`, `cumtrapz`, `curl`, `cut`, `cylinder`, `date`, `datenum`, `datestr`, `datetick`, `datevec`, `dblquad`, `deal`, `deblank`, `deconv`, `delaunay`, `delaunayn`, `delete`, `demo`, `detrend`, `diffpara`, `diffuse`, `dir`, `discrete_cdf`, `discrete_inv`, `discrete_pdf`, `discrete_rnd`, `display`, `divergence`, `dlmwrite`, `dos`, `dsearch`, `dsearchn`, `duplication_matrix`, `durbinlevinson`, `ellipsoid`, `empirical_cdf`, `empirical_inv`, `empirical_pdf`, `empirical_rnd`, `eomday`, `errorbar`, `etime`, `etreeplot`, `example`, `expcdf`, `expinv`, `expm`, `exppdf`, `exprnd`, `ezcontour`, `ezcontourf`, `ezmesh`, `ezmeshc`, `ezplot`, `ezpolar`, `ezsurf`, `ezsurfc`, `factor`, `factorial`, `fail`, `fcdf`, `feather`, `fftconv`, `fftfilt`, `fftshift`, `figure`, `fileattrib`, `fileparts`, `fill`, `findall`, `findobj`, `findstr`, `finv`, `flag`, `flipdim`, `fliplr`, `flipud`, `fpdf`, `fplot`, `fractdiff`, `freqz`, `freqz_plot`, `frnd`, `fsolve`, `f_test_regression`, `ftp`, `fullfile`, `fzero`, `gamcdf`, `gaminv`, `gampdf`, `gamrnd`, `gca`, `gcbf`, `gcbo`, `gcf`, `genvarname`, `geocdf`, `geoinv`, `geopdf`, `geornd`, `getfield`, `ginput`, `glpk`, `gls`, `gplot`, `gradient`, `graphics_toolkit`, `gray`, `grid`, `griddata`, `griddatan`, `gtext`, `gunzip`, `gzip`, `hadamard`, `hamming`, `hankel`, `hanning`, `hggroup`, `hidden`, `hilb`, `hist`, `histc`, `hold`, `hot`, `hotelling_test`, `housh`, `hsv`, `hurst`, `hygecdf`, `hygeinv`, `hygepdf`, `hygernd`, `idivide`, `ifftshift`, `image`, `imagesc`, `imfinfo`, `imread`, `imshow`, `imwrite`, `index`, `info`, `inpolygon`, `inputname`, `interpft`, `interpn`, `intersect`, `invhilb`, `iqr`, `isa`, `isdefinite`, `isdir`, `is_duplicate_entry`, `isequal`, `isequalwithequalnans`, `isfigure`, `ishermitian`, `ishghandle`, `is_leap_year`, `isletter`, `ismac`, `ismember`, `ispc`, `isprime`, `isprop`, `isscalar`, `issquare`, `isstrprop`, `issymmetric`, `isunix`, `is_valid_file_id`, `isvector`, `jet`, `kendall`, `kolmogorov_smirnov_cdf`, `kolmogorov_smirnov_test`, `kruskal_wallis_test`, `krylov`, `kurtosis`, `laplace_cdf`, `laplace_inv`, `laplace_pdf`, `laplace_rnd`, `legend`, `legendre`, `license`, `line`, `linkprop`, `list_primes`, `loadaudio`, `loadobj`, `logistic_cdf`, `logistic_inv`, `logistic_pdf`, `logistic_rnd`, `logit`, `loglog`, `loglogerr`, `logm`, `logncdf`, `logninv`, `lognpdf`, `lognrnd`, `logspace`, `lookfor`, `ls_command`, `lsqnonneg`, `magic`, `mahalanobis`, `manova`, `matlabroot`, `mcnemar_test`, `mean`, `meansq`, `median`, `menu`, `mesh`, `meshc`, `meshgrid`, `meshz`, `mexext`, `mget`, `mkpp`, `mode`, `moment`, `movefile`, `mpoles`, `mput`, `namelengthmax`, `nargchk`, `nargoutchk`, `nbincdf`, `nbininv`, `nbinpdf`, `nbinrnd`, `nchoosek`, `ndgrid`, `newplot`, `news`, `nonzeros`, `normcdf`, `normest`, `norminv`, `normpdf`, `normrnd`, `now`, `nthroot`, `null`, `ocean`, `ols`, `onenormest`, `optimget`, `optimset`, `orderfields`, `orient`, `orth`, `pack`, `pareto`, `parseparams`, `pascal`, `patch`, `pathdef`, `pcg`, `pchip`, `pcolor`, `pcr`, `peaks`, `periodogram`, `perl`, `perms`, `pie`, `pink`, `planerot`, `playaudio`, `plot`, `plotmatrix`, `plotyy`, `poisscdf`, `poissinv`, `poisspdf`, `poissrnd`, `polar`, `poly`, `polyaffine`, `polyarea`, `polyderiv`, `polyfit`, `polygcd`, `polyint`, `polyout`, `polyreduce`, `polyval`, `polyvalm`, `postpad`, `powerset`, `ppder`, `ppint`, `ppjumps`, `ppplot`, `ppval`, `pqpnonneg`, `prepad`, `primes`, `print`, `print_usage`, `prism`, `probit`, `qp`, `qqplot`, `quadcc`, `quadgk`, `quadl`, `quadv`, `quiver`, `qzhess`, `rainbow`, `randi`, `range`, `rank`, `ranks`, `rat`, `reallog`, `realpow`, `realsqrt`, `record`, `rectangle_lw`, `rectangle_sw`, `rectint`, `refresh`, `refreshdata`, `regexptranslate`, `repmat`, `residue`, `ribbon`, `rindex`, `roots`, `rose`, `rosser`, `rotdim`, `rref`, `run`, `run_count`, `rundemos`, `run_test`, `runtests`, `saveas`, `saveaudio`, `saveobj`, `savepath`, `scatter`, `secd`, `semilogx`, `semilogxerr`, `semilogy`, `semilogyerr`, `setaudio`, `setdiff`, `setfield`, `setxor`, `shading`, `shift`, `shiftdim`, `sign_test`, `sinc`, `sind`, `sinetone`, `sinewave`, `skewness`, `slice`, `sombrero`, `sortrows`, `spaugment`, `spconvert`, `spdiags`, `spearman`, `spectral_adf`, `spectral_xdf`, `specular`, `speed`, `spencer`, `speye`, `spfun`, `sphere`, `spinmap`, `spline`, `spones`, `sprand`, `sprandn`, `sprandsym`, `spring`, `spstats`, `spy`, `sqp`, `stairs`, `statistics`, `std`, `stdnormal_cdf`, `stdnormal_inv`, `stdnormal_pdf`, `stdnormal_rnd`, `stem`, `stft`, `strcat`, `strchr`, `strjust`, `strmatch`, `strread`, `strsplit`, `strtok`, `strtrim`, `strtrunc`, `structfun`, `studentize`, `subplot`, `subsindex`, `subspace`, `substr`, `substruct`, `summer`, `surf`, `surface`, `surfc`, `surfl`, `surfnorm`, `svds`, `swapbytes`, `sylvester_matrix`, `symvar`, `synthesis`, `table`, `tand`, `tar`, `tcdf`, `tempdir`, `tempname`, `test`, `text`, `textread`, `textscan`, `tinv`, `title`, `toeplitz`, `tpdf`, `trace`, `trapz`, `treelayout`, `treeplot`, `triangle_lw`, `triangle_sw`, `tril`, `trimesh`, `triplequad`, `triplot`, `trisurf`, `triu`, `trnd`, `tsearchn`, `t_test`, `t_test_regression`, `type`, `unidcdf`, `unidinv`, `unidpdf`, `unidrnd`, `unifcdf`, `unifinv`, `unifpdf`, `unifrnd`, `union`, `unique`, `unix`, `unmkpp`, `unpack`, `untabify`, `untar`, `unwrap`, `unzip`, `u_test`, `validatestring`, `vander`, `var`, `var_test`, `vech`, `ver`, `version`, `view`, `voronoi`, `voronoin`, `waitforbuttonpress`, `wavread`, `wavwrite`, `wblcdf`, `wblinv`, `wblpdf`, `wblrnd`, `weekday`, `welch_test`, `what`, `white`, `whitebg`, `wienrnd`, `wilcoxon_test`, `wilkinson`, `winter`, `xlabel`, `xlim`, `ylabel`, `yulewalker`, `zip`, `zlabel`, `z_test`, `airy`, `amd`, `balance`, `besselh`, `besseli`, `besselj`, `besselk`, `bessely`, `bitpack`, `bsxfun`, `builtin`, `ccolamd`, `cellfun`, `cellslices`, `chol`, `choldelete`, `cholinsert`, `cholinv`, `cholshift`, `cholupdate`, `colamd`, `colloc`, `convhulln`, `convn`, `csymamd`, `cummax`, `cummin`, `daspk`, `daspk_options`, `dasrt`, `dasrt_options`, `dassl`, `dassl_options`, `dbclear`, `dbdown`, `dbstack`, `dbstatus`, `dbstop`, `dbtype`, `dbup`, `dbwhere`, `det`, `dlmread`, `dmperm`, `dot`, `eig`, `eigs`, `endgrent`, `endpwent`, `etree`, `fft`, `fftn`, `fftw`, `filter`, `find`, `full`, `gcd`, `getgrent`, `getgrgid`, `getgrnam`, `getpwent`, `getpwnam`, `getpwuid`, `getrusage`, `givens`, `gmtime`, `gnuplot_binary`, `hess`, `ifft`, `ifftn`, `inv`, `isdebugmode`, `issparse`, `kron`, `localtime`, `lookup`, `lsode`, `lsode_options`, `lu`, `luinc`, `luupdate`, `matrix_type`, `max`, `min`, `mktime`, `pinv`, `qr`, `qrdelete`, `qrinsert`, `qrshift`, `qrupdate`, `quad`, `quad_options`, `qz`, `rand`, `rande`, `randg`, `randn`, `randp`, `randperm`, `rcond`, `regexp`, `regexpi`, `regexprep`, `schur`, `setgrent`, `setpwent`, `sort`, `spalloc`, `sparse`, `spparms`, `sprank`, `sqrtm`, `strfind`, `strftime`, `strptime`, `strrep`, `svd`, `svd_driver`, `syl`, `symamd`, `symbfact`, `symrcm`, `time`, `tsearch`, `typecast`, `urlread`, `urlwrite`, `abs`, `acos`, `acosh`, `acot`, `acoth`, `acsc`, `acsch`, `angle`, `arg`, `asec`, `asech`, `asin`, `asinh`, `atan`, `atanh`, `beta`, `betainc`, `betaln`, `bincoeff`, `cbrt`, `ceil`, `conj`, `cos`, `cosh`, `cot`, `coth`, `csc`, `csch`, `erf`, `erfc`, `erfcx`, `erfinv`, `exp`, `finite`, `fix`, `floor`, `fmod`, `gamma`, `gammainc`, `gammaln`, `imag`, `isalnum`, `isalpha`, `isascii`, `iscntrl`, `isdigit`, `isfinite`, `isgraph`, `isinf`, `islower`, `isna`, `isnan`, `isprint`, `ispunct`, `isspace`, `isupper`, `isxdigit`, `lcm`, `lgamma`, `log`, `lower`, `mod`, `real`, `rem`, `round`, `roundb`, `sec`, `sech`, `sign`, `sin`, `sinh`, `sqrt`, `tan`, `tanh`, `toascii`, `tolower`, `xor`), NameBuiltin, nil}, - {Words(``, `\b`, `EDITOR`, `EXEC_PATH`, `I`, `IMAGE_PATH`, `NA`, `OCTAVE_HOME`, `OCTAVE_VERSION`, `PAGER`, `PAGER_FLAGS`, `SEEK_CUR`, `SEEK_END`, `SEEK_SET`, `SIG`, `S_ISBLK`, `S_ISCHR`, `S_ISDIR`, `S_ISFIFO`, `S_ISLNK`, `S_ISREG`, `S_ISSOCK`, `WCONTINUE`, `WCOREDUMP`, `WEXITSTATUS`, `WIFCONTINUED`, `WIFEXITED`, `WIFSIGNALED`, `WIFSTOPPED`, `WNOHANG`, `WSTOPSIG`, `WTERMSIG`, `WUNTRACED`), NameConstant, nil}, - {`-=|!=|!|/=|--`, Operator, nil}, - {`-|==|~=|<|>|<=|>=|&&|&|~|\|\|?`, Operator, nil}, - {`\*=|\+=|\^=|\/=|\\=|\*\*|\+\+|\.\*\*`, Operator, nil}, - {`\.\*|\*|\+|\.\^|\.\\|\.\/|\/|\\`, Operator, nil}, - {`[\[\](){}:@.,]`, Punctuation, nil}, - {`=|:|;`, Punctuation, nil}, - {`"[^"]*"`, LiteralString, nil}, - {`(\d+\.\d*|\d*\.\d+)([eEf][+-]?[0-9]+)?`, LiteralNumberFloat, nil}, - {`\d+[eEf][+-]?[0-9]+`, LiteralNumberFloat, nil}, - {`\d+`, LiteralNumberInteger, nil}, - {`(?<=[\w)\].])\'+`, Operator, nil}, - {`(?=|>|&&|\|\|`, Operator, nil}, - {`\$(f[asn]|t|vp[rtd]|children)`, NameVariableMagic, nil}, - {Words(``, `\b`, `PI`, `undef`), KeywordConstant, nil}, - {`(use|include)((?:\s|\\\\s)+)`, ByGroups(KeywordNamespace, Text), Push("includes")}, - {`(module)(\s*)([^\s\(]+)`, ByGroups(KeywordNamespace, Text, NameNamespace), nil}, - {`(function)(\s*)([^\s\(]+)`, ByGroups(KeywordDeclaration, Text, NameFunction), nil}, - {`\b(true|false)\b`, Literal, nil}, - {`\b(function|module|include|use|for|intersection_for|if|else|return)\b`, Keyword, nil}, - {`\b(circle|square|polygon|text|sphere|cube|cylinder|polyhedron|translate|rotate|scale|resize|mirror|multmatrix|color|offset|hull|minkowski|union|difference|intersection|abs|sign|sin|cos|tan|acos|asin|atan|atan2|floor|round|ceil|ln|log|pow|sqrt|exp|rands|min|max|concat|lookup|str|chr|search|version|version_num|norm|cross|parent_module|echo|import|import_dxf|dxf_linear_extrude|linear_extrude|rotate_extrude|surface|projection|render|dxf_cross|dxf_dim|let|assign|len)\b`, NameBuiltin, nil}, - {`\bchildren\b`, NameBuiltinPseudo, nil}, - {`"(\\\\|\\"|[^"])*"`, LiteralStringDouble, nil}, - {`-?\d+(\.\d+)?(e[+-]?\d+)?`, Number, nil}, - {`[a-zA-Z_]\w*`, Name, nil}, - }, - "includes": { - {"(<)([^>]*)(>)", ByGroups(Punctuation, CommentPreprocFile, Punctuation), nil}, - Default(Pop(1)), - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/o/org.go b/vendor/github.com/alecthomas/chroma/lexers/o/org.go deleted file mode 100644 index 1064eaf..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/o/org.go +++ /dev/null @@ -1,102 +0,0 @@ -package o - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Org mode lexer. -var Org = internal.Register(MustNewLexer( - &Config{ - Name: "Org Mode", - Aliases: []string{"org", "orgmode"}, - Filenames: []string{"*.org"}, - MimeTypes: []string{"text/org"}, // https://lists.gnu.org/r/emacs-orgmode/2017-09/msg00087.html - }, - Rules{ - "root": { - {`^# .*$`, Comment, nil}, - // Headings - {`^(\*)( COMMENT)( .*)$`, ByGroups(GenericHeading, NameEntity, GenericStrong), nil}, - {`^(\*\*+)( COMMENT)( .*)$`, ByGroups(GenericSubheading, NameEntity, Text), nil}, - {`^(\*)( DONE)( .*)$`, ByGroups(GenericHeading, LiteralStringRegex, GenericStrong), nil}, - {`^(\*\*+)( DONE)( .*)$`, ByGroups(GenericSubheading, LiteralStringRegex, Text), nil}, - {`^(\*)( TODO)( .*)$`, ByGroups(GenericHeading, Error, GenericStrong), nil}, - {`^(\*\*+)( TODO)( .*)$`, ByGroups(GenericSubheading, Error, Text), nil}, - {`^(\*)( .+?)( :[a-zA-Z0-9_@:]+:)$`, ByGroups(GenericHeading, GenericStrong, GenericEmph), nil}, // Level 1 heading with tags - {`^(\*)( .+)$`, ByGroups(GenericHeading, GenericStrong), nil}, // // Level 1 heading with NO tags - {`^(\*\*+)( .+?)( :[a-zA-Z0-9_@:]+:)$`, ByGroups(GenericSubheading, Text, GenericEmph), nil}, // Level 2+ heading with tags - {`^(\*\*+)( .+)$`, ByGroups(GenericSubheading, Text), nil}, // Level 2+ heading with NO tags - // Checkbox lists - {`^( *)([+-] )(\[[ X]\])( .+)$`, ByGroups(Text, Keyword, Keyword, UsingSelf("inline")), nil}, - {`^( +)(\* )(\[[ X]\])( .+)$`, ByGroups(Text, Keyword, Keyword, UsingSelf("inline")), nil}, - // Definition lists - {`^( *)([+-] )([^ \n]+ ::)( .+)$`, ByGroups(Text, Keyword, Keyword, UsingSelf("inline")), nil}, - {`^( +)(\* )([^ \n]+ ::)( .+)$`, ByGroups(Text, Keyword, Keyword, UsingSelf("inline")), nil}, - // Unordered lists - {`^( *)([+-] )(.+)$`, ByGroups(Text, Keyword, UsingSelf("inline")), nil}, - {`^( +)(\* )(.+)$`, ByGroups(Text, Keyword, UsingSelf("inline")), nil}, - // Ordered lists - {`^( *)([0-9]+[.)])( \[@[0-9]+\])( .+)$`, ByGroups(Text, Keyword, GenericEmph, UsingSelf("inline")), nil}, - {`^( *)([0-9]+[.)])( .+)$`, ByGroups(Text, Keyword, UsingSelf("inline")), nil}, - // Dynamic Blocks - {`(?i)^( *#\+begin: )([^ ]+)([\w\W]*?\n)([\w\W]*?)(^ *#\+end: *$)`, ByGroups(Comment, CommentSpecial, Comment, UsingSelf("inline"), Comment), nil}, - // Blocks - // - Comment Blocks - {`(?i)^( *#\+begin_comment *\n)([\w\W]*?)(^ *#\+end_comment *$)`, ByGroups(Comment, Comment, Comment), nil}, - // - Src Blocks - {`(?i)^( *#\+begin_src )([^ \n]+)(.*?\n)([\w\W]*?)(^ *#\+end_src *$)`, - UsingByGroup( - internal.Get, - 2, 4, - Comment, CommentSpecial, Comment, Text, Comment, - ), - nil, - }, - // - Export Blocks - {`(?i)^( *#\+begin_export )(\w+)( *\n)([\w\W]*?)(^ *#\+end_export *$)`, - UsingByGroup( - internal.Get, - 2, 4, - Comment, CommentSpecial, Text, Text, Comment, - ), - nil, - }, - // - Org Special, Example, Verse, etc. Blocks - {`(?i)^( *#\+begin_)(\w+)( *\n)([\w\W]*?)(^ *#\+end_\2)( *$)`, ByGroups(Comment, Comment, Text, Text, Comment, Text), nil}, - // Keywords - {`^(#\+\w+)(:.*)$`, ByGroups(CommentSpecial, Comment), nil}, // Other Org keywords like #+title - // Properties and Drawers - {`(?i)^( *:\w+: *\n)([\w\W]*?)(^ *:end: *$)`, ByGroups(Comment, CommentSpecial, Comment), nil}, - // Line break operator - {`^(.*)(\\\\)$`, ByGroups(UsingSelf("inline"), Operator), nil}, - // Deadline/Scheduled - {`(?i)^( *(?:DEADLINE|SCHEDULED): )(<[^<>]+?> *)$`, ByGroups(Comment, CommentSpecial), nil}, // DEADLINE/SCHEDULED: - // DONE state CLOSED - {`(?i)^( *CLOSED: )(\[[^][]+?\] *)$`, ByGroups(Comment, CommentSpecial), nil}, // CLOSED: [datestamp] - // All other lines - Include("inline"), - }, - "inline": { - {`(\s)*(\*[^ \n*][^*]+?[^ \n*]\*)((?=\W|\n|$))`, ByGroups(Text, GenericStrong, Text), nil}, // Bold - {`(\s)*(/[^/]+?/)((?=\W|\n|$))`, ByGroups(Text, GenericEmph, Text), nil}, // Italic - {`(\s)*(=[^\n=]+?=)((?=\W|\n|$))`, ByGroups(Text, NameClass, Text), nil}, // Verbatim - {`(\s)*(~[^\n~]+?~)((?=\W|\n|$))`, ByGroups(Text, NameClass, Text), nil}, // Code - {`(\s)*(\+[^+]+?\+)((?=\W|\n|$))`, ByGroups(Text, GenericDeleted, Text), nil}, // Strikethrough - {`(\s)*(_[^_]+?_)((?=\W|\n|$))`, ByGroups(Text, GenericUnderline, Text), nil}, // Underline - {`(<)([^<>]+?)(>)`, ByGroups(Text, String, Text), nil}, // - {`[{]{3}[^}]+[}]{3}`, NameBuiltin, nil}, // {{{macro(foo,1)}}} - {`([^[])(\[fn:)([^]]+?)(\])([^]])`, ByGroups(Text, NameBuiltinPseudo, LiteralString, NameBuiltinPseudo, Text), nil}, // [fn:1] - // Links - {`(\[\[)([^][]+?)(\]\[)([^][]+)(\]\])`, ByGroups(Text, NameAttribute, Text, NameTag, Text), nil}, // [[link][descr]] - {`(\[\[)([^][]+?)(\]\])`, ByGroups(Text, NameAttribute, Text), nil}, // [[link]] - {`(<<)([^<>]+?)(>>)`, ByGroups(Text, NameAttribute, Text), nil}, // <> - // Tables - {`^( *)(\|[ -].*?[ -]\|)$`, ByGroups(Text, String), nil}, - // Blank lines, newlines - {`\n`, Text, nil}, - // Any other text - {`.`, Text, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/p/pacman.go b/vendor/github.com/alecthomas/chroma/lexers/p/pacman.go deleted file mode 100644 index 807b67c..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/p/pacman.go +++ /dev/null @@ -1,26 +0,0 @@ -package p - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Pacmanconf lexer. -var Pacmanconf = internal.Register(MustNewLexer( - &Config{ - Name: "PacmanConf", - Aliases: []string{"pacmanconf"}, - Filenames: []string{"pacman.conf"}, - MimeTypes: []string{}, - }, - Rules{ - "root": { - {`#.*$`, CommentSingle, nil}, - {`^\s*\[.*?\]\s*$`, Keyword, nil}, - {`(\w+)(\s*)(=)`, ByGroups(NameAttribute, Text, Operator), nil}, - {`^(\s*)(\w+)(\s*)$`, ByGroups(Text, NameAttribute, Text), nil}, - {Words(``, `\b`, `$repo`, `$arch`, `%o`, `%u`), NameVariable, nil}, - {`.`, Text, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/p/perl.go b/vendor/github.com/alecthomas/chroma/lexers/p/perl.go deleted file mode 100644 index 0a2b35b..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/p/perl.go +++ /dev/null @@ -1,138 +0,0 @@ -package p - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Perl lexer. -var Perl = internal.Register(MustNewLexer( - &Config{ - Name: "Perl", - Aliases: []string{"perl", "pl"}, - Filenames: []string{"*.pl", "*.pm", "*.t"}, - MimeTypes: []string{"text/x-perl", "application/x-perl"}, - DotAll: true, - }, - Rules{ - "balanced-regex": { - {`/(\\\\|\\[^\\]|[^\\/])*/[egimosx]*`, LiteralStringRegex, Pop(1)}, - {`!(\\\\|\\[^\\]|[^\\!])*![egimosx]*`, LiteralStringRegex, Pop(1)}, - {`\\(\\\\|[^\\])*\\[egimosx]*`, LiteralStringRegex, Pop(1)}, - {`\{(\\\\|\\[^\\]|[^\\}])*\}[egimosx]*`, LiteralStringRegex, Pop(1)}, - {`<(\\\\|\\[^\\]|[^\\>])*>[egimosx]*`, LiteralStringRegex, Pop(1)}, - {`\[(\\\\|\\[^\\]|[^\\\]])*\][egimosx]*`, LiteralStringRegex, Pop(1)}, - {`\((\\\\|\\[^\\]|[^\\)])*\)[egimosx]*`, LiteralStringRegex, Pop(1)}, - {`@(\\\\|\\[^\\]|[^\\@])*@[egimosx]*`, LiteralStringRegex, Pop(1)}, - {`%(\\\\|\\[^\\]|[^\\%])*%[egimosx]*`, LiteralStringRegex, Pop(1)}, - {`\$(\\\\|\\[^\\]|[^\\$])*\$[egimosx]*`, LiteralStringRegex, Pop(1)}, - }, - "root": { - {`\A\#!.+?$`, CommentHashbang, nil}, - {`\#.*?$`, CommentSingle, nil}, - {`^=[a-zA-Z0-9]+\s+.*?\n=cut`, CommentMultiline, nil}, - {Words(``, `\b`, `case`, `continue`, `do`, `else`, `elsif`, `for`, `foreach`, `if`, `last`, `my`, `next`, `our`, `redo`, `reset`, `then`, `unless`, `until`, `while`, `print`, `new`, `BEGIN`, `CHECK`, `INIT`, `END`, `return`), Keyword, nil}, - {`(format)(\s+)(\w+)(\s*)(=)(\s*\n)`, ByGroups(Keyword, Text, Name, Text, Punctuation, Text), Push("format")}, - {`(eq|lt|gt|le|ge|ne|not|and|or|cmp)\b`, OperatorWord, nil}, - {`s/(\\\\|\\[^\\]|[^\\/])*/(\\\\|\\[^\\]|[^\\/])*/[egimosx]*`, LiteralStringRegex, nil}, - {`s!(\\\\|\\!|[^!])*!(\\\\|\\!|[^!])*![egimosx]*`, LiteralStringRegex, nil}, - {`s\\(\\\\|[^\\])*\\(\\\\|[^\\])*\\[egimosx]*`, LiteralStringRegex, nil}, - {`s@(\\\\|\\[^\\]|[^\\@])*@(\\\\|\\[^\\]|[^\\@])*@[egimosx]*`, LiteralStringRegex, nil}, - {`s%(\\\\|\\[^\\]|[^\\%])*%(\\\\|\\[^\\]|[^\\%])*%[egimosx]*`, LiteralStringRegex, nil}, - {`s\{(\\\\|\\[^\\]|[^\\}])*\}\s*`, LiteralStringRegex, Push("balanced-regex")}, - {`s<(\\\\|\\[^\\]|[^\\>])*>\s*`, LiteralStringRegex, Push("balanced-regex")}, - {`s\[(\\\\|\\[^\\]|[^\\\]])*\]\s*`, LiteralStringRegex, Push("balanced-regex")}, - {`s\((\\\\|\\[^\\]|[^\\)])*\)\s*`, LiteralStringRegex, Push("balanced-regex")}, - {`m?/(\\\\|\\[^\\]|[^\\/\n])*/[gcimosx]*`, LiteralStringRegex, nil}, - {`m(?=[/!\\{<\[(@%$])`, LiteralStringRegex, Push("balanced-regex")}, - {`((?<==~)|(?<=\())\s*/(\\\\|\\[^\\]|[^\\/])*/[gcimosx]*`, LiteralStringRegex, nil}, - {`\s+`, Text, nil}, - {Words(``, `\b`, `abs`, `accept`, `alarm`, `atan2`, `bind`, `binmode`, `bless`, `caller`, `chdir`, `chmod`, `chomp`, `chop`, `chown`, `chr`, `chroot`, `close`, `closedir`, `connect`, `continue`, `cos`, `crypt`, `dbmclose`, `dbmopen`, `defined`, `delete`, `die`, `dump`, `each`, `endgrent`, `endhostent`, `endnetent`, `endprotoent`, `endpwent`, `endservent`, `eof`, `eval`, `exec`, `exists`, `exit`, `exp`, `fcntl`, `fileno`, `flock`, `fork`, `format`, `formline`, `getc`, `getgrent`, `getgrgid`, `getgrnam`, `gethostbyaddr`, `gethostbyname`, `gethostent`, `getlogin`, `getnetbyaddr`, `getnetbyname`, `getnetent`, `getpeername`, `getpgrp`, `getppid`, `getpriority`, `getprotobyname`, `getprotobynumber`, `getprotoent`, `getpwent`, `getpwnam`, `getpwuid`, `getservbyname`, `getservbyport`, `getservent`, `getsockname`, `getsockopt`, `glob`, `gmtime`, `goto`, `grep`, `hex`, `import`, `index`, `int`, `ioctl`, `join`, `keys`, `kill`, `last`, `lc`, `lcfirst`, `length`, `link`, `listen`, `local`, `localtime`, `log`, `lstat`, `map`, `mkdir`, `msgctl`, `msgget`, `msgrcv`, `msgsnd`, `my`, `next`, `oct`, `open`, `opendir`, `ord`, `our`, `pack`, `pipe`, `pop`, `pos`, `printf`, `prototype`, `push`, `quotemeta`, `rand`, `read`, `readdir`, `readline`, `readlink`, `readpipe`, `recv`, `redo`, `ref`, `rename`, `reverse`, `rewinddir`, `rindex`, `rmdir`, `scalar`, `seek`, `seekdir`, `select`, `semctl`, `semget`, `semop`, `send`, `setgrent`, `sethostent`, `setnetent`, `setpgrp`, `setpriority`, `setprotoent`, `setpwent`, `setservent`, `setsockopt`, `shift`, `shmctl`, `shmget`, `shmread`, `shmwrite`, `shutdown`, `sin`, `sleep`, `socket`, `socketpair`, `sort`, `splice`, `split`, `sprintf`, `sqrt`, `srand`, `stat`, `study`, `substr`, `symlink`, `syscall`, `sysopen`, `sysread`, `sysseek`, `system`, `syswrite`, `tell`, `telldir`, `tie`, `tied`, `time`, `times`, `tr`, `truncate`, `uc`, `ucfirst`, `umask`, `undef`, `unlink`, `unpack`, `unshift`, `untie`, `utime`, `values`, `vec`, `wait`, `waitpid`, `wantarray`, `warn`, `write`), NameBuiltin, nil}, - {`((__(DATA|DIE|WARN)__)|(STD(IN|OUT|ERR)))\b`, NameBuiltinPseudo, nil}, - {`(<<)([\'"]?)([a-zA-Z_]\w*)(\2;?\n.*?\n)(\3)(\n)`, ByGroups(LiteralString, LiteralString, LiteralStringDelimiter, LiteralString, LiteralStringDelimiter, Text), nil}, - {`__END__`, CommentPreproc, Push("end-part")}, - {`\$\^[ADEFHILMOPSTWX]`, NameVariableGlobal, nil}, - {"\\$[\\\\\\\"\\[\\]'&`+*.,;=%~?@$!<>(^|/-](?!\\w)", NameVariableGlobal, nil}, - {`[$@%#]+`, NameVariable, Push("varname")}, - {`0_?[0-7]+(_[0-7]+)*`, LiteralNumberOct, nil}, - {`0x[0-9A-Fa-f]+(_[0-9A-Fa-f]+)*`, LiteralNumberHex, nil}, - {`0b[01]+(_[01]+)*`, LiteralNumberBin, nil}, - {`(?i)(\d*(_\d*)*\.\d+(_\d*)*|\d+(_\d*)*\.\d+(_\d*)*)(e[+-]?\d+)?`, LiteralNumberFloat, nil}, - {`(?i)\d+(_\d*)*e[+-]?\d+(_\d*)*`, LiteralNumberFloat, nil}, - {`\d+(_\d+)*`, LiteralNumberInteger, nil}, - {`'(\\\\|\\[^\\]|[^'\\])*'`, LiteralString, nil}, - {`"(\\\\|\\[^\\]|[^"\\])*"`, LiteralString, nil}, - {"`(\\\\\\\\|\\\\[^\\\\]|[^`\\\\])*`", LiteralStringBacktick, nil}, - {`<([^\s>]+)>`, LiteralStringRegex, nil}, - {`(q|qq|qw|qr|qx)\{`, LiteralStringOther, Push("cb-string")}, - {`(q|qq|qw|qr|qx)\(`, LiteralStringOther, Push("rb-string")}, - {`(q|qq|qw|qr|qx)\[`, LiteralStringOther, Push("sb-string")}, - {`(q|qq|qw|qr|qx)\<`, LiteralStringOther, Push("lt-string")}, - {`(q|qq|qw|qr|qx)([\W_])(.|\n)*?\2`, LiteralStringOther, nil}, - {`(package)(\s+)([a-zA-Z_]\w*(?:::[a-zA-Z_]\w*)*)`, ByGroups(Keyword, Text, NameNamespace), nil}, - {`(use|require|no)(\s+)([a-zA-Z_]\w*(?:::[a-zA-Z_]\w*)*)`, ByGroups(Keyword, Text, NameNamespace), nil}, - {`(sub)(\s+)`, ByGroups(Keyword, Text), Push("funcname")}, - {Words(``, `\b`, `no`, `package`, `require`, `use`), Keyword, nil}, - {`(\[\]|\*\*|::|<<|>>|>=|<=>|<=|={3}|!=|=~|!~|&&?|\|\||\.{1,3})`, Operator, nil}, - {`[-+/*%=<>&^|!\\~]=?`, Operator, nil}, - {`[()\[\]:;,<>/?{}]`, Punctuation, nil}, - {`(?=\w)`, Name, Push("name")}, - }, - "format": { - {`\.\n`, LiteralStringInterpol, Pop(1)}, - {`[^\n]*\n`, LiteralStringInterpol, nil}, - }, - "varname": { - {`\s+`, Text, nil}, - {`\{`, Punctuation, Pop(1)}, - {`\)|,`, Punctuation, Pop(1)}, - {`\w+::`, NameNamespace, nil}, - {`[\w:]+`, NameVariable, Pop(1)}, - }, - "name": { - {`[a-zA-Z_]\w*(::[a-zA-Z_]\w*)*(::)?(?=\s*->)`, NameNamespace, Pop(1)}, - {`[a-zA-Z_]\w*(::[a-zA-Z_]\w*)*::`, NameNamespace, Pop(1)}, - {`[\w:]+`, Name, Pop(1)}, - {`[A-Z_]+(?=\W)`, NameConstant, Pop(1)}, - {`(?=\W)`, Text, Pop(1)}, - }, - "funcname": { - {`[a-zA-Z_]\w*[!?]?`, NameFunction, nil}, - {`\s+`, Text, nil}, - {`(\([$@%]*\))(\s*)`, ByGroups(Punctuation, Text), nil}, - {`;`, Punctuation, Pop(1)}, - {`.*?\{`, Punctuation, Pop(1)}, - }, - "cb-string": { - {`\\[{}\\]`, LiteralStringOther, nil}, - {`\\`, LiteralStringOther, nil}, - {`\{`, LiteralStringOther, Push("cb-string")}, - {`\}`, LiteralStringOther, Pop(1)}, - {`[^{}\\]+`, LiteralStringOther, nil}, - }, - "rb-string": { - {`\\[()\\]`, LiteralStringOther, nil}, - {`\\`, LiteralStringOther, nil}, - {`\(`, LiteralStringOther, Push("rb-string")}, - {`\)`, LiteralStringOther, Pop(1)}, - {`[^()]+`, LiteralStringOther, nil}, - }, - "sb-string": { - {`\\[\[\]\\]`, LiteralStringOther, nil}, - {`\\`, LiteralStringOther, nil}, - {`\[`, LiteralStringOther, Push("sb-string")}, - {`\]`, LiteralStringOther, Pop(1)}, - {`[^\[\]]+`, LiteralStringOther, nil}, - }, - "lt-string": { - {`\\[<>\\]`, LiteralStringOther, nil}, - {`\\`, LiteralStringOther, nil}, - {`\<`, LiteralStringOther, Push("lt-string")}, - {`\>`, LiteralStringOther, Pop(1)}, - {`[^<>]+`, LiteralStringOther, nil}, - }, - "end-part": { - {`.+`, CommentPreproc, Pop(1)}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/p/pig.go b/vendor/github.com/alecthomas/chroma/lexers/p/pig.go deleted file mode 100644 index 0dbc591..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/p/pig.go +++ /dev/null @@ -1,57 +0,0 @@ -package p - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Pig lexer. -var Pig = internal.Register(MustNewLexer( - &Config{ - Name: "Pig", - Aliases: []string{"pig"}, - Filenames: []string{"*.pig"}, - MimeTypes: []string{"text/x-pig"}, - CaseInsensitive: true, - }, - Rules{ - "root": { - {`\s+`, Text, nil}, - {`--.*`, Comment, nil}, - {`/\*[\w\W]*?\*/`, CommentMultiline, nil}, - {`\\\n`, Text, nil}, - {`\\`, Text, nil}, - {`\'(?:\\[ntbrf\\\']|\\u[0-9a-f]{4}|[^\'\\\n\r])*\'`, LiteralString, nil}, - Include("keywords"), - Include("types"), - Include("builtins"), - Include("punct"), - Include("operators"), - {`[0-9]*\.[0-9]+(e[0-9]+)?[fd]?`, LiteralNumberFloat, nil}, - {`0x[0-9a-f]+`, LiteralNumberHex, nil}, - {`[0-9]+L?`, LiteralNumberInteger, nil}, - {`\n`, Text, nil}, - {`([a-z_]\w*)(\s*)(\()`, ByGroups(NameFunction, Text, Punctuation), nil}, - {`[()#:]`, Text, nil}, - {`[^(:#\'")\s]+`, Text, nil}, - {`\S+\s+`, Text, nil}, - }, - "keywords": { - {`(assert|and|any|all|arrange|as|asc|bag|by|cache|CASE|cat|cd|cp|%declare|%default|define|dense|desc|describe|distinct|du|dump|eval|exex|explain|filter|flatten|foreach|full|generate|group|help|if|illustrate|import|inner|input|into|is|join|kill|left|limit|load|ls|map|matches|mkdir|mv|not|null|onschema|or|order|outer|output|parallel|pig|pwd|quit|register|returns|right|rm|rmf|rollup|run|sample|set|ship|split|stderr|stdin|stdout|store|stream|through|union|using|void)\b`, Keyword, nil}, - }, - "builtins": { - {`(AVG|BinStorage|cogroup|CONCAT|copyFromLocal|copyToLocal|COUNT|cross|DIFF|MAX|MIN|PigDump|PigStorage|SIZE|SUM|TextLoader|TOKENIZE)\b`, NameBuiltin, nil}, - }, - "types": { - {`(bytearray|BIGINTEGER|BIGDECIMAL|chararray|datetime|double|float|int|long|tuple)\b`, KeywordType, nil}, - }, - "punct": { - {`[;(){}\[\]]`, Punctuation, nil}, - }, - "operators": { - {`[#=,./%+\-?]`, Operator, nil}, - {`(eq|gt|lt|gte|lte|neq|matches)\b`, Operator, nil}, - {`(==|<=|<|>=|>|!=)`, Operator, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/p/pkgconfig.go b/vendor/github.com/alecthomas/chroma/lexers/p/pkgconfig.go deleted file mode 100644 index 0a4872e..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/p/pkgconfig.go +++ /dev/null @@ -1,41 +0,0 @@ -package p - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Pkgconfig lexer. -var Pkgconfig = internal.Register(MustNewLexer( - &Config{ - Name: "PkgConfig", - Aliases: []string{"pkgconfig"}, - Filenames: []string{"*.pc"}, - MimeTypes: []string{}, - }, - Rules{ - "root": { - {`#.*$`, CommentSingle, nil}, - {`^(\w+)(=)`, ByGroups(NameAttribute, Operator), nil}, - {`^([\w.]+)(:)`, ByGroups(NameTag, Punctuation), Push("spvalue")}, - Include("interp"), - {`[^${}#=:\n.]+`, Text, nil}, - {`.`, Text, nil}, - }, - "interp": { - {`\$\$`, Text, nil}, - {`\$\{`, LiteralStringInterpol, Push("curly")}, - }, - "curly": { - {`\}`, LiteralStringInterpol, Pop(1)}, - {`\w+`, NameAttribute, nil}, - }, - "spvalue": { - Include("interp"), - {`#.*$`, CommentSingle, Pop(1)}, - {`\n`, Text, Pop(1)}, - {`[^${}#\n]+`, Text, nil}, - {`.`, Text, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/p/plaintext.go b/vendor/github.com/alecthomas/chroma/lexers/p/plaintext.go deleted file mode 100644 index 50b8f35..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/p/plaintext.go +++ /dev/null @@ -1,16 +0,0 @@ -package p - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -var Plaintext = internal.Register(MustNewLexer( - &Config{ - Name: "plaintext", - Aliases: []string{"text", "plain", "no-highlight"}, - Filenames: []string{"*.txt"}, - MimeTypes: []string{"text/plain"}, - }, - internal.PlaintextRules, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/p/plsql.go b/vendor/github.com/alecthomas/chroma/lexers/p/plsql.go deleted file mode 100644 index a6068fd..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/p/plsql.go +++ /dev/null @@ -1,58 +0,0 @@ -package p - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Pl/Pgsql lexer. -var PLpgSQL = internal.Register(MustNewLexer( - &Config{ - Name: "PL/pgSQL", - Aliases: []string{"plpgsql"}, - Filenames: []string{}, - MimeTypes: []string{"text/x-plpgsql"}, - NotMultiline: true, - CaseInsensitive: true, - }, - Rules{ - "root": { - {`\%[a-z]\w*\b`, NameBuiltin, nil}, - {`:=`, Operator, nil}, - {`\<\<[a-z]\w*\>\>`, NameLabel, nil}, - {`\#[a-z]\w*\b`, KeywordPseudo, nil}, - {`\s+`, Text, nil}, - {`--.*\n?`, CommentSingle, nil}, - {`/\*`, CommentMultiline, Push("multiline-comments")}, - {`(bigint|bigserial|bit|bit\s+varying|bool|boolean|box|bytea|char|character|character\s+varying|cidr|circle|date|decimal|double\s+precision|float4|float8|inet|int|int2|int4|int8|integer|interval|json|jsonb|line|lseg|macaddr|money|numeric|path|pg_lsn|point|polygon|real|serial|serial2|serial4|serial8|smallint|smallserial|text|time|timestamp|timestamptz|timetz|tsquery|tsvector|txid_snapshot|uuid|varbit|varchar|with\s+time\s+zone|without\s+time\s+zone|xml|anyarray|anyelement|anyenum|anynonarray|anyrange|cstring|fdw_handler|internal|language_handler|opaque|record|void)\b`, NameBuiltin, nil}, - {Words(``, `\b`, `ABORT`, `ABSOLUTE`, `ACCESS`, `ACTION`, `ADD`, `ADMIN`, `AFTER`, `AGGREGATE`, `ALL`, `ALSO`, `ALTER`, `ALWAYS`, `ANALYSE`, `ANALYZE`, `AND`, `ANY`, `ARRAY`, `AS`, `ASC`, `ASSERTION`, `ASSIGNMENT`, `ASYMMETRIC`, `AT`, `ATTRIBUTE`, `AUTHORIZATION`, `BACKWARD`, `BEFORE`, `BEGIN`, `BETWEEN`, `BIGINT`, `BINARY`, `BIT`, `BOOLEAN`, `BOTH`, `BY`, `CACHE`, `CALLED`, `CASCADE`, `CASCADED`, `CASE`, `CAST`, `CATALOG`, `CHAIN`, `CHAR`, `CHARACTER`, `CHARACTERISTICS`, `CHECK`, `CHECKPOINT`, `CLASS`, `CLOSE`, `CLUSTER`, `COALESCE`, `COLLATE`, `COLLATION`, `COLUMN`, `COMMENT`, `COMMENTS`, `COMMIT`, `COMMITTED`, `CONCURRENTLY`, `CONFIGURATION`, `CONNECTION`, `CONSTRAINT`, `CONSTRAINTS`, `CONTENT`, `CONTINUE`, `CONVERSION`, `COPY`, `COST`, `CREATE`, `CROSS`, `CSV`, `CURRENT`, `CURRENT_CATALOG`, `CURRENT_DATE`, `CURRENT_ROLE`, `CURRENT_SCHEMA`, `CURRENT_TIME`, `CURRENT_TIMESTAMP`, `CURRENT_USER`, `CURSOR`, `CYCLE`, `DATA`, `DATABASE`, `DAY`, `DEALLOCATE`, `DEC`, `DECIMAL`, `DECLARE`, `DEFAULT`, `DEFAULTS`, `DEFERRABLE`, `DEFERRED`, `DEFINER`, `DELETE`, `DELIMITER`, `DELIMITERS`, `DESC`, `DICTIONARY`, `DISABLE`, `DISCARD`, `DISTINCT`, `DO`, `DOCUMENT`, `DOMAIN`, `DOUBLE`, `DROP`, `EACH`, `ELSE`, `ENABLE`, `ENCODING`, `ENCRYPTED`, `END`, `ENUM`, `ESCAPE`, `EVENT`, `EXCEPT`, `EXCLUDE`, `EXCLUDING`, `EXCLUSIVE`, `EXECUTE`, `EXISTS`, `EXPLAIN`, `EXTENSION`, `EXTERNAL`, `EXTRACT`, `FALSE`, `FAMILY`, `FETCH`, `FILTER`, `FIRST`, `FLOAT`, `FOLLOWING`, `FOR`, `FORCE`, `FOREIGN`, `FORWARD`, `FREEZE`, `FROM`, `FULL`, `FUNCTION`, `FUNCTIONS`, `GLOBAL`, `GRANT`, `GRANTED`, `GREATEST`, `GROUP`, `HANDLER`, `HAVING`, `HEADER`, `HOLD`, `HOUR`, `IDENTITY`, `IF`, `ILIKE`, `IMMEDIATE`, `IMMUTABLE`, `IMPLICIT`, `IN`, `INCLUDING`, `INCREMENT`, `INDEX`, `INDEXES`, `INHERIT`, `INHERITS`, `INITIALLY`, `INLINE`, `INNER`, `INOUT`, `INPUT`, `INSENSITIVE`, `INSERT`, `INSTEAD`, `INT`, `INTEGER`, `INTERSECT`, `INTERVAL`, `INTO`, `INVOKER`, `IS`, `ISNULL`, `ISOLATION`, `JOIN`, `KEY`, `LABEL`, `LANGUAGE`, `LARGE`, `LAST`, `LATERAL`, `LC_COLLATE`, `LC_CTYPE`, `LEADING`, `LEAKPROOF`, `LEAST`, `LEFT`, `LEVEL`, `LIKE`, `LIMIT`, `LISTEN`, `LOAD`, `LOCAL`, `LOCALTIME`, `LOCALTIMESTAMP`, `LOCATION`, `LOCK`, `MAPPING`, `MATCH`, `MATERIALIZED`, `MAXVALUE`, `MINUTE`, `MINVALUE`, `MODE`, `MONTH`, `MOVE`, `NAME`, `NAMES`, `NATIONAL`, `NATURAL`, `NCHAR`, `NEXT`, `NO`, `NONE`, `NOT`, `NOTHING`, `NOTIFY`, `NOTNULL`, `NOWAIT`, `NULL`, `NULLIF`, `NULLS`, `NUMERIC`, `OBJECT`, `OF`, `OFF`, `OFFSET`, `OIDS`, `ON`, `ONLY`, `OPERATOR`, `OPTION`, `OPTIONS`, `OR`, `ORDER`, `ORDINALITY`, `OUT`, `OUTER`, `OVER`, `OVERLAPS`, `OVERLAY`, `OWNED`, `OWNER`, `PARSER`, `PARTIAL`, `PARTITION`, `PASSING`, `PASSWORD`, `PLACING`, `PLANS`, `POLICY`, `POSITION`, `PRECEDING`, `PRECISION`, `PREPARE`, `PREPARED`, `PRESERVE`, `PRIMARY`, `PRIOR`, `PRIVILEGES`, `PROCEDURAL`, `PROCEDURE`, `PROGRAM`, `QUOTE`, `RANGE`, `READ`, `REAL`, `REASSIGN`, `RECHECK`, `RECURSIVE`, `REF`, `REFERENCES`, `REFRESH`, `REINDEX`, `RELATIVE`, `RELEASE`, `RENAME`, `REPEATABLE`, `REPLACE`, `REPLICA`, `RESET`, `RESTART`, `RESTRICT`, `RETURNING`, `RETURNS`, `REVOKE`, `RIGHT`, `ROLE`, `ROLLBACK`, `ROW`, `ROWS`, `RULE`, `SAVEPOINT`, `SCHEMA`, `SCROLL`, `SEARCH`, `SECOND`, `SECURITY`, `SELECT`, `SEQUENCE`, `SEQUENCES`, `SERIALIZABLE`, `SERVER`, `SESSION`, `SESSION_USER`, `SET`, `SETOF`, `SHARE`, `SHOW`, `SIMILAR`, `SIMPLE`, `SMALLINT`, `SNAPSHOT`, `SOME`, `STABLE`, `STANDALONE`, `START`, `STATEMENT`, `STATISTICS`, `STDIN`, `STDOUT`, `STORAGE`, `STRICT`, `STRIP`, `SUBSTRING`, `SYMMETRIC`, `SYSID`, `SYSTEM`, `TABLE`, `TABLES`, `TABLESPACE`, `TEMP`, `TEMPLATE`, `TEMPORARY`, `TEXT`, `THEN`, `TIME`, `TIMESTAMP`, `TO`, `TRAILING`, `TRANSACTION`, `TREAT`, `TRIGGER`, `TRIM`, `TRUE`, `TRUNCATE`, `TRUSTED`, `TYPE`, `TYPES`, `UNBOUNDED`, `UNCOMMITTED`, `UNENCRYPTED`, `UNION`, `UNIQUE`, `UNKNOWN`, `UNLISTEN`, `UNLOGGED`, `UNTIL`, `UPDATE`, `USER`, `USING`, `VACUUM`, `VALID`, `VALIDATE`, `VALIDATOR`, `VALUE`, `VALUES`, `VARCHAR`, `VARIADIC`, `VARYING`, `VERBOSE`, `VERSION`, `VIEW`, `VIEWS`, `VOLATILE`, `WHEN`, `WHERE`, `WHITESPACE`, `WINDOW`, `WITH`, `WITHIN`, `WITHOUT`, `WORK`, `WRAPPER`, `WRITE`, `XML`, `XMLATTRIBUTES`, `XMLCONCAT`, `XMLELEMENT`, `XMLEXISTS`, `XMLFOREST`, `XMLPARSE`, `XMLPI`, `XMLROOT`, `XMLSERIALIZE`, `YEAR`, `YES`, `ZONE`, `ALIAS`, `CONSTANT`, `DIAGNOSTICS`, `ELSIF`, `EXCEPTION`, `EXIT`, `FOREACH`, `GET`, `LOOP`, `NOTICE`, `OPEN`, `PERFORM`, `QUERY`, `RAISE`, `RETURN`, `REVERSE`, `SQLSTATE`, `WHILE`), Keyword, nil}, - {"[+*/<>=~!@#%^&|`?-]+", Operator, nil}, - {`::`, Operator, nil}, - {`\$\d+`, NameVariable, nil}, - {`([0-9]*\.[0-9]*|[0-9]+)(e[+-]?[0-9]+)?`, LiteralNumberFloat, nil}, - {`[0-9]+`, LiteralNumberInteger, nil}, - {`((?:E|U&)?)(')`, ByGroups(LiteralStringAffix, LiteralStringSingle), Push("string")}, - {`((?:U&)?)(")`, ByGroups(LiteralStringAffix, LiteralStringName), Push("quoted-ident")}, - // { `(?s)(\$)([^$]*)(\$)(.*?)(\$)(\2)(\$)`, ?? ??, nil }, - {`[a-z_]\w*`, Name, nil}, - {`:(['"]?)[a-z]\w*\b\1`, NameVariable, nil}, - {`[;:()\[\]{},.]`, Punctuation, nil}, - }, - "multiline-comments": { - {`/\*`, CommentMultiline, Push("multiline-comments")}, - {`\*/`, CommentMultiline, Pop(1)}, - {`[^/*]+`, CommentMultiline, nil}, - {`[/*]`, CommentMultiline, nil}, - }, - "string": { - {`[^']+`, LiteralStringSingle, nil}, - {`''`, LiteralStringSingle, nil}, - {`'`, LiteralStringSingle, Pop(1)}, - }, - "quoted-ident": { - {`[^"]+`, LiteralStringName, nil}, - {`""`, LiteralStringName, nil}, - {`"`, LiteralStringName, Pop(1)}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/p/postgres.go b/vendor/github.com/alecthomas/chroma/lexers/p/postgres.go deleted file mode 100644 index 3afa54d..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/p/postgres.go +++ /dev/null @@ -1,77 +0,0 @@ -package p - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Postgresql Sql Dialect lexer. -var PostgreSQL = internal.Register(MustNewLexer( - &Config{ - Name: "PostgreSQL SQL dialect", - Aliases: []string{"postgresql", "postgres"}, - Filenames: []string{}, - MimeTypes: []string{"text/x-postgresql"}, - NotMultiline: true, - CaseInsensitive: true, - }, - Rules{ - "root": { - {`\s+`, Text, nil}, - {`--.*\n?`, CommentSingle, nil}, - {`/\*`, CommentMultiline, Push("multiline-comments")}, - {`(bigint|bigserial|bit|bit\s+varying|bool|boolean|box|bytea|char|character|character\s+varying|cidr|circle|date|decimal|double\s+precision|float4|float8|inet|int|int2|int4|int8|integer|interval|json|jsonb|line|lseg|macaddr|money|numeric|path|pg_lsn|point|polygon|real|serial|serial2|serial4|serial8|smallint|smallserial|text|time|timestamp|timestamptz|timetz|tsquery|tsvector|txid_snapshot|uuid|varbit|varchar|with\s+time\s+zone|without\s+time\s+zone|xml|anyarray|anyelement|anyenum|anynonarray|anyrange|cstring|fdw_handler|internal|language_handler|opaque|record|void)\b`, NameBuiltin, nil}, - {`(?s)(DO)(\s+)(?:(LANGUAGE)?(\s+)('?)(\w+)?('?)(\s+))?(\$)([^$]*)(\$)(.*?)(\$)(\10)(\$)`, - UsingByGroup( - internal.Get, - 6, 12, - Keyword, Text, Keyword, Text, // DO LANGUAGE - StringSingle, StringSingle, StringSingle, Text, // 'plpgsql' - StringHeredoc, StringHeredoc, StringHeredoc, // $tag$ - StringHeredoc, // (code block) - StringHeredoc, StringHeredoc, StringHeredoc, // $tag$ - ), - nil, - }, - {Words(``, `\b`, `ABORT`, `ABSOLUTE`, `ACCESS`, `ACTION`, `ADD`, `ADMIN`, `AFTER`, `AGGREGATE`, `ALL`, `ALSO`, `ALTER`, `ALWAYS`, `ANALYSE`, `ANALYZE`, `AND`, `ANY`, `ARRAY`, `AS`, `ASC`, `ASSERTION`, `ASSIGNMENT`, `ASYMMETRIC`, `AT`, `ATTRIBUTE`, `AUTHORIZATION`, `BACKWARD`, `BEFORE`, `BEGIN`, `BETWEEN`, `BIGINT`, `BINARY`, `BIT`, `BOOLEAN`, `BOTH`, `BY`, `CACHE`, `CALLED`, `CASCADE`, `CASCADED`, `CASE`, `CAST`, `CATALOG`, `CHAIN`, `CHAR`, `CHARACTER`, `CHARACTERISTICS`, `CHECK`, `CHECKPOINT`, `CLASS`, `CLOSE`, `CLUSTER`, `COALESCE`, `COLLATE`, `COLLATION`, `COLUMN`, `COMMENT`, `COMMENTS`, `COMMIT`, `COMMITTED`, `CONCURRENTLY`, `CONFIGURATION`, `CONNECTION`, `CONSTRAINT`, `CONSTRAINTS`, `CONTENT`, `CONTINUE`, `CONVERSION`, `COPY`, `COST`, `CREATE`, `CROSS`, `CSV`, `CURRENT`, `CURRENT_CATALOG`, `CURRENT_DATE`, `CURRENT_ROLE`, `CURRENT_SCHEMA`, `CURRENT_TIME`, `CURRENT_TIMESTAMP`, `CURRENT_USER`, `CURSOR`, `CYCLE`, `DATA`, `DATABASE`, `DAY`, `DEALLOCATE`, `DEC`, `DECIMAL`, `DECLARE`, `DEFAULT`, `DEFAULTS`, `DEFERRABLE`, `DEFERRED`, `DEFINER`, `DELETE`, `DELIMITER`, `DELIMITERS`, `DESC`, `DICTIONARY`, `DISABLE`, `DISCARD`, `DISTINCT`, `DO`, `DOCUMENT`, `DOMAIN`, `DOUBLE`, `DROP`, `EACH`, `ELSE`, `ENABLE`, `ENCODING`, `ENCRYPTED`, `END`, `ENUM`, `ESCAPE`, `EVENT`, `EXCEPT`, `EXCLUDE`, `EXCLUDING`, `EXCLUSIVE`, `EXECUTE`, `EXISTS`, `EXPLAIN`, `EXTENSION`, `EXTERNAL`, `EXTRACT`, `FALSE`, `FAMILY`, `FETCH`, `FILTER`, `FIRST`, `FLOAT`, `FOLLOWING`, `FOR`, `FORCE`, `FOREIGN`, `FORWARD`, `FREEZE`, `FROM`, `FULL`, `FUNCTION`, `FUNCTIONS`, `GLOBAL`, `GRANT`, `GRANTED`, `GREATEST`, `GROUP`, `HANDLER`, `HAVING`, `HEADER`, `HOLD`, `HOUR`, `IDENTITY`, `IF`, `ILIKE`, `IMMEDIATE`, `IMMUTABLE`, `IMPLICIT`, `IN`, `INCLUDING`, `INCREMENT`, `INDEX`, `INDEXES`, `INHERIT`, `INHERITS`, `INITIALLY`, `INLINE`, `INNER`, `INOUT`, `INPUT`, `INSENSITIVE`, `INSERT`, `INSTEAD`, `INT`, `INTEGER`, `INTERSECT`, `INTERVAL`, `INTO`, `INVOKER`, `IS`, `ISNULL`, `ISOLATION`, `JOIN`, `KEY`, `LABEL`, `LANGUAGE`, `LARGE`, `LAST`, `LATERAL`, `LC_COLLATE`, `LC_CTYPE`, `LEADING`, `LEAKPROOF`, `LEAST`, `LEFT`, `LEVEL`, `LIKE`, `LIMIT`, `LISTEN`, `LOAD`, `LOCAL`, `LOCALTIME`, `LOCALTIMESTAMP`, `LOCATION`, `LOCK`, `MAPPING`, `MATCH`, `MATERIALIZED`, `MAXVALUE`, `MINUTE`, `MINVALUE`, `MODE`, `MONTH`, `MOVE`, `NAME`, `NAMES`, `NATIONAL`, `NATURAL`, `NCHAR`, `NEXT`, `NO`, `NONE`, `NOT`, `NOTHING`, `NOTIFY`, `NOTNULL`, `NOWAIT`, `NULL`, `NULLIF`, `NULLS`, `NUMERIC`, `OBJECT`, `OF`, `OFF`, `OFFSET`, `OIDS`, `ON`, `ONLY`, `OPERATOR`, `OPTION`, `OPTIONS`, `OR`, `ORDER`, `ORDINALITY`, `OUT`, `OUTER`, `OVER`, `OVERLAPS`, `OVERLAY`, `OWNED`, `OWNER`, `PARSER`, `PARTIAL`, `PARTITION`, `PASSING`, `PASSWORD`, `PLACING`, `PLANS`, `POLICY`, `POSITION`, `PRECEDING`, `PRECISION`, `PREPARE`, `PREPARED`, `PRESERVE`, `PRIMARY`, `PRIOR`, `PRIVILEGES`, `PROCEDURAL`, `PROCEDURE`, `PROGRAM`, `QUOTE`, `RANGE`, `READ`, `REAL`, `REASSIGN`, `RECHECK`, `RECURSIVE`, `REF`, `REFERENCES`, `REFRESH`, `REINDEX`, `RELATIVE`, `RELEASE`, `RENAME`, `REPEATABLE`, `REPLACE`, `REPLICA`, `RESET`, `RESTART`, `RESTRICT`, `RETURNING`, `RETURNS`, `REVOKE`, `RIGHT`, `ROLE`, `ROLLBACK`, `ROW`, `ROWS`, `RULE`, `SAVEPOINT`, `SCHEMA`, `SCROLL`, `SEARCH`, `SECOND`, `SECURITY`, `SELECT`, `SEQUENCE`, `SEQUENCES`, `SERIALIZABLE`, `SERVER`, `SESSION`, `SESSION_USER`, `SET`, `SETOF`, `SHARE`, `SHOW`, `SIMILAR`, `SIMPLE`, `SMALLINT`, `SNAPSHOT`, `SOME`, `STABLE`, `STANDALONE`, `START`, `STATEMENT`, `STATISTICS`, `STDIN`, `STDOUT`, `STORAGE`, `STRICT`, `STRIP`, `SUBSTRING`, `SYMMETRIC`, `SYSID`, `SYSTEM`, `TABLE`, `TABLES`, `TABLESPACE`, `TEMP`, `TEMPLATE`, `TEMPORARY`, `TEXT`, `THEN`, `TIME`, `TIMESTAMP`, `TO`, `TRAILING`, `TRANSACTION`, `TREAT`, `TRIGGER`, `TRIM`, `TRUE`, `TRUNCATE`, `TRUSTED`, `TYPE`, `TYPES`, `UNBOUNDED`, `UNCOMMITTED`, `UNENCRYPTED`, `UNION`, `UNIQUE`, `UNKNOWN`, `UNLISTEN`, `UNLOGGED`, `UNTIL`, `UPDATE`, `USER`, `USING`, `VACUUM`, `VALID`, `VALIDATE`, `VALIDATOR`, `VALUE`, `VALUES`, `VARCHAR`, `VARIADIC`, `VARYING`, `VERBOSE`, `VERSION`, `VIEW`, `VIEWS`, `VOLATILE`, `WHEN`, `WHERE`, `WHITESPACE`, `WINDOW`, `WITH`, `WITHIN`, `WITHOUT`, `WORK`, `WRAPPER`, `WRITE`, `XML`, `XMLATTRIBUTES`, `XMLCONCAT`, `XMLELEMENT`, `XMLEXISTS`, `XMLFOREST`, `XMLPARSE`, `XMLPI`, `XMLROOT`, `XMLSERIALIZE`, `YEAR`, `YES`, `ZONE`), Keyword, nil}, - {"[+*/<>=~!@#%^&|`?-]+", Operator, nil}, - {`::`, Operator, nil}, - {`\$\d+`, NameVariable, nil}, - {`([0-9]*\.[0-9]*|[0-9]+)(e[+-]?[0-9]+)?`, LiteralNumberFloat, nil}, - {`[0-9]+`, LiteralNumberInteger, nil}, - {`((?:E|U&)?)(')`, ByGroups(LiteralStringAffix, LiteralStringSingle), Push("string")}, - {`((?:U&)?)(")`, ByGroups(LiteralStringAffix, LiteralStringName), Push("quoted-ident")}, - {`(?s)(\$)([^$]*)(\$)(.*?)(\$)(\2)(\$)(\s+)(LANGUAGE)?(\s+)('?)(\w+)?('?)`, - UsingByGroup(internal.Get, - 12, 4, - StringHeredoc, StringHeredoc, StringHeredoc, // $tag$ - StringHeredoc, // (code block) - StringHeredoc, StringHeredoc, StringHeredoc, // $tag$ - Text, Keyword, Text, // LANGUAGE - StringSingle, StringSingle, StringSingle, // 'type' - ), - nil, - }, - {`(?s)(\$)([^$]*)(\$)(.*?)(\$)(\2)(\$)`, LiteralStringHeredoc, nil}, - {`[a-z_]\w*`, Name, nil}, - {`:(['"]?)[a-z]\w*\b\1`, NameVariable, nil}, - {`[;:()\[\]{},.]`, Punctuation, nil}, - }, - "multiline-comments": { - {`/\*`, CommentMultiline, Push("multiline-comments")}, - {`\*/`, CommentMultiline, Pop(1)}, - {`[^/*]+`, CommentMultiline, nil}, - {`[/*]`, CommentMultiline, nil}, - }, - "string": { - {`[^']+`, LiteralStringSingle, nil}, - {`''`, LiteralStringSingle, nil}, - {`'`, LiteralStringSingle, Pop(1)}, - }, - "quoted-ident": { - {`[^"]+`, LiteralStringName, nil}, - {`""`, LiteralStringName, nil}, - {`"`, LiteralStringName, Pop(1)}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/p/postscript.go b/vendor/github.com/alecthomas/chroma/lexers/p/postscript.go deleted file mode 100644 index 0cfa3a5..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/p/postscript.go +++ /dev/null @@ -1,46 +0,0 @@ -package p - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Postscript lexer. -var Postscript = internal.Register(MustNewLexer( - &Config{ - Name: "PostScript", - Aliases: []string{"postscript", "postscr"}, - Filenames: []string{"*.ps", "*.eps"}, - MimeTypes: []string{"application/postscript"}, - }, - Rules{ - "root": { - {`^%!.+\n`, CommentPreproc, nil}, - {`%%.*\n`, CommentSpecial, nil}, - {`(^%.*\n){2,}`, CommentMultiline, nil}, - {`%.*\n`, CommentSingle, nil}, - {`\(`, LiteralString, Push("stringliteral")}, - {`[{}<>\[\]]`, Punctuation, nil}, - {`<[0-9A-Fa-f]+>(?=[()<>\[\]{}/%\s])`, LiteralNumberHex, nil}, - {`[0-9]+\#(\-|\+)?([0-9]+\.?|[0-9]*\.[0-9]+|[0-9]+\.[0-9]*)((e|E)[0-9]+)?(?=[()<>\[\]{}/%\s])`, LiteralNumberOct, nil}, - {`(\-|\+)?([0-9]+\.?|[0-9]*\.[0-9]+|[0-9]+\.[0-9]*)((e|E)[0-9]+)?(?=[()<>\[\]{}/%\s])`, LiteralNumberFloat, nil}, - {`(\-|\+)?[0-9]+(?=[()<>\[\]{}/%\s])`, LiteralNumberInteger, nil}, - {`\/[^()<>\[\]{}/%\s]+(?=[()<>\[\]{}/%\s])`, NameVariable, nil}, - {`[^()<>\[\]{}/%\s]+(?=[()<>\[\]{}/%\s])`, NameFunction, nil}, - {`(false|true)(?=[()<>\[\]{}/%\s])`, KeywordConstant, nil}, - {`(eq|ne|g[et]|l[et]|and|or|not|if(?:else)?|for(?:all)?)(?=[()<>\[\]{}/%\s])`, KeywordReserved, nil}, - {Words(``, `(?=[()<>\[\]{}/%\s])`, `abs`, `add`, `aload`, `arc`, `arcn`, `array`, `atan`, `begin`, `bind`, `ceiling`, `charpath`, `clip`, `closepath`, `concat`, `concatmatrix`, `copy`, `cos`, `currentlinewidth`, `currentmatrix`, `currentpoint`, `curveto`, `cvi`, `cvs`, `def`, `defaultmatrix`, `dict`, `dictstackoverflow`, `div`, `dtransform`, `dup`, `end`, `exch`, `exec`, `exit`, `exp`, `fill`, `findfont`, `floor`, `get`, `getinterval`, `grestore`, `gsave`, `gt`, `identmatrix`, `idiv`, `idtransform`, `index`, `invertmatrix`, `itransform`, `length`, `lineto`, `ln`, `load`, `log`, `loop`, `matrix`, `mod`, `moveto`, `mul`, `neg`, `newpath`, `pathforall`, `pathbbox`, `pop`, `print`, `pstack`, `put`, `quit`, `rand`, `rangecheck`, `rcurveto`, `repeat`, `restore`, `rlineto`, `rmoveto`, `roll`, `rotate`, `round`, `run`, `save`, `scale`, `scalefont`, `setdash`, `setfont`, `setgray`, `setlinecap`, `setlinejoin`, `setlinewidth`, `setmatrix`, `setrgbcolor`, `shfill`, `show`, `showpage`, `sin`, `sqrt`, `stack`, `stringwidth`, `stroke`, `strokepath`, `sub`, `syntaxerror`, `transform`, `translate`, `truncate`, `typecheck`, `undefined`, `undefinedfilename`, `undefinedresult`), NameBuiltin, nil}, - {`\s+`, Text, nil}, - }, - "stringliteral": { - {`[^()\\]+`, LiteralString, nil}, - {`\\`, LiteralStringEscape, Push("escape")}, - {`\(`, LiteralString, Push()}, - {`\)`, LiteralString, Pop(1)}, - }, - "escape": { - {`[0-8]{3}|n|r|t|b|f|\\|\(|\)`, LiteralStringEscape, Pop(1)}, - Default(Pop(1)), - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/p/povray.go b/vendor/github.com/alecthomas/chroma/lexers/p/povray.go deleted file mode 100644 index 6f1bb52..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/p/povray.go +++ /dev/null @@ -1,35 +0,0 @@ -package p - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Povray lexer. -var Povray = internal.Register(MustNewLexer( - &Config{ - Name: "POVRay", - Aliases: []string{"pov"}, - Filenames: []string{"*.pov", "*.inc"}, - MimeTypes: []string{"text/x-povray"}, - }, - Rules{ - "root": { - {`/\*[\w\W]*?\*/`, CommentMultiline, nil}, - {`//.*\n`, CommentSingle, nil}, - {`(?s)"(?:\\.|[^"\\])+"`, LiteralStringDouble, nil}, - {Words(`#`, `\b`, `break`, `case`, `debug`, `declare`, `default`, `define`, `else`, `elseif`, `end`, `error`, `fclose`, `fopen`, `for`, `if`, `ifdef`, `ifndef`, `include`, `local`, `macro`, `range`, `read`, `render`, `statistics`, `switch`, `undef`, `version`, `warning`, `while`, `write`), CommentPreproc, nil}, - {Words(`\b`, `\b`, `aa_level`, `aa_threshold`, `abs`, `acos`, `acosh`, `adaptive`, `adc_bailout`, `agate`, `agate_turb`, `all`, `alpha`, `ambient`, `ambient_light`, `angle`, `aperture`, `arc_angle`, `area_light`, `asc`, `asin`, `asinh`, `assumed_gamma`, `atan`, `atan2`, `atanh`, `atmosphere`, `atmospheric_attenuation`, `attenuating`, `average`, `background`, `black_hole`, `blue`, `blur_samples`, `bounded_by`, `box_mapping`, `bozo`, `break`, `brick`, `brick_size`, `brightness`, `brilliance`, `bumps`, `bumpy1`, `bumpy2`, `bumpy3`, `bump_map`, `bump_size`, `case`, `caustics`, `ceil`, `checker`, `chr`, `clipped_by`, `clock`, `color`, `color_map`, `colour`, `colour_map`, `component`, `composite`, `concat`, `confidence`, `conic_sweep`, `constant`, `control0`, `control1`, `cos`, `cosh`, `count`, `crackle`, `crand`, `cube`, `cubic_spline`, `cylindrical_mapping`, `debug`, `declare`, `default`, `degrees`, `dents`, `diffuse`, `direction`, `distance`, `distance_maximum`, `div`, `dust`, `dust_type`, `eccentricity`, `else`, `emitting`, `end`, `error`, `error_bound`, `exp`, `exponent`, `fade_distance`, `fade_power`, `falloff`, `falloff_angle`, `false`, `file_exists`, `filter`, `finish`, `fisheye`, `flatness`, `flip`, `floor`, `focal_point`, `fog`, `fog_alt`, `fog_offset`, `fog_type`, `frequency`, `gif`, `global_settings`, `glowing`, `gradient`, `granite`, `gray_threshold`, `green`, `halo`, `hexagon`, `hf_gray_16`, `hierarchy`, `hollow`, `hypercomplex`, `if`, `ifdef`, `iff`, `image_map`, `incidence`, `include`, `int`, `interpolate`, `inverse`, `ior`, `irid`, `irid_wavelength`, `jitter`, `lambda`, `leopard`, `linear`, `linear_spline`, `linear_sweep`, `location`, `log`, `looks_like`, `look_at`, `low_error_factor`, `mandel`, `map_type`, `marble`, `material_map`, `matrix`, `max`, `max_intersections`, `max_iteration`, `max_trace_level`, `max_value`, `metallic`, `min`, `minimum_reuse`, `mod`, `mortar`, `nearest_count`, `no`, `normal`, `normal_map`, `no_shadow`, `number_of_waves`, `octaves`, `off`, `offset`, `omega`, `omnimax`, `on`, `once`, `onion`, `open`, `orthographic`, `panoramic`, `pattern1`, `pattern2`, `pattern3`, `perspective`, `pgm`, `phase`, `phong`, `phong_size`, `pi`, `pigment`, `pigment_map`, `planar_mapping`, `png`, `point_at`, `pot`, `pow`, `ppm`, `precision`, `pwr`, `quadratic_spline`, `quaternion`, `quick_color`, `quick_colour`, `quilted`, `radial`, `radians`, `radiosity`, `radius`, `rainbow`, `ramp_wave`, `rand`, `range`, `reciprocal`, `recursion_limit`, `red`, `reflection`, `refraction`, `render`, `repeat`, `rgb`, `rgbf`, `rgbft`, `rgbt`, `right`, `ripples`, `rotate`, `roughness`, `samples`, `scale`, `scallop_wave`, `scattering`, `seed`, `shadowless`, `sin`, `sine_wave`, `sinh`, `sky`, `sky_sphere`, `slice`, `slope_map`, `smooth`, `specular`, `spherical_mapping`, `spiral`, `spiral1`, `spiral2`, `spotlight`, `spotted`, `sqr`, `sqrt`, `statistics`, `str`, `strcmp`, `strength`, `strlen`, `strlwr`, `strupr`, `sturm`, `substr`, `switch`, `sys`, `t`, `tan`, `tanh`, `test_camera_1`, `test_camera_2`, `test_camera_3`, `test_camera_4`, `texture`, `texture_map`, `tga`, `thickness`, `threshold`, `tightness`, `tile2`, `tiles`, `track`, `transform`, `translate`, `transmit`, `triangle_wave`, `true`, `ttf`, `turbulence`, `turb_depth`, `type`, `ultra_wide_angle`, `up`, `use_color`, `use_colour`, `use_index`, `u_steps`, `val`, `variance`, `vaxis_rotate`, `vcross`, `vdot`, `version`, `vlength`, `vnormalize`, `volume_object`, `volume_rendered`, `vol_with_light`, `vrotate`, `v_steps`, `warning`, `warp`, `water_level`, `waves`, `while`, `width`, `wood`, `wrinkles`, `yes`), Keyword, nil}, - {Words(``, `\b`, `bicubic_patch`, `blob`, `box`, `camera`, `cone`, `cubic`, `cylinder`, `difference`, `disc`, `height_field`, `intersection`, `julia_fractal`, `lathe`, `light_source`, `merge`, `mesh`, `object`, `plane`, `poly`, `polygon`, `prism`, `quadric`, `quartic`, `smooth_triangle`, `sor`, `sphere`, `superellipsoid`, `text`, `torus`, `triangle`, `union`), NameBuiltin, nil}, - {`[\[\](){}<>;,]`, Punctuation, nil}, - {`[-+*/=]`, Operator, nil}, - {`\b(x|y|z|u|v)\b`, NameBuiltinPseudo, nil}, - {`[a-zA-Z_]\w*`, Name, nil}, - {`[0-9]+\.[0-9]*`, LiteralNumberFloat, nil}, - {`\.[0-9]+`, LiteralNumberFloat, nil}, - {`[0-9]+`, LiteralNumberInteger, nil}, - {`"(\\\\|\\"|[^"])*"`, LiteralString, nil}, - {`\s+`, Text, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/p/powershell.go b/vendor/github.com/alecthomas/chroma/lexers/p/powershell.go deleted file mode 100644 index 10eba4f..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/p/powershell.go +++ /dev/null @@ -1,66 +0,0 @@ -package p - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Powershell lexer. -var Powershell = internal.Register(MustNewLexer( - &Config{ - Name: "PowerShell", - Aliases: []string{"powershell", "posh", "ps1", "psm1"}, - Filenames: []string{"*.ps1", "*.psm1"}, - MimeTypes: []string{"text/x-powershell"}, - DotAll: true, - CaseInsensitive: true, - }, - Rules{ - "root": { - {`\(`, Punctuation, Push("child")}, - {`\s+`, Text, nil}, - {`^(\s*#[#\s]*)(\.(?:component|description|example|externalhelp|forwardhelpcategory|forwardhelptargetname|functionality|inputs|link|notes|outputs|parameter|remotehelprunspace|role|synopsis))([^\n]*$)`, ByGroups(Comment, LiteralStringDoc, Comment), nil}, - {`#[^\n]*?$`, Comment, nil}, - {`(<|<)#`, CommentMultiline, Push("multline")}, - {`(?i)([A-Z]:)`, Name, nil}, - {`@"\n`, LiteralStringHeredoc, Push("heredoc-double")}, - {`@'\n.*?\n'@`, LiteralStringHeredoc, nil}, - {"`[\\'\"$@-]", Punctuation, nil}, - {`"`, LiteralStringDouble, Push("string")}, - {`'([^']|'')*'`, LiteralStringSingle, nil}, - {`(\$|@@|@)((global|script|private|env):)?\w+`, NameVariable, nil}, - {`(while|validateset|validaterange|validatepattern|validatelength|validatecount|until|trap|switch|return|ref|process|param|parameter|in|if|global:|function|foreach|for|finally|filter|end|elseif|else|dynamicparam|do|default|continue|cmdletbinding|break|begin|alias|\?|%|#script|#private|#local|#global|mandatory|parametersetname|position|valuefrompipeline|valuefrompipelinebypropertyname|valuefromremainingarguments|helpmessage|try|catch|throw)\b`, Keyword, nil}, - {`-(and|as|band|bnot|bor|bxor|casesensitive|ccontains|ceq|cge|cgt|cle|clike|clt|cmatch|cne|cnotcontains|cnotlike|cnotmatch|contains|creplace|eq|exact|f|file|ge|gt|icontains|ieq|ige|igt|ile|ilike|ilt|imatch|ine|inotcontains|inotlike|inotmatch|ireplace|is|isnot|le|like|lt|match|ne|not|notcontains|notlike|notmatch|or|regex|replace|wildcard)\b`, Operator, nil}, - {`(write|where|watch|wait|use|update|unregister|unpublish|unprotect|unlock|uninstall|undo|unblock|trace|test|tee|take|sync|switch|suspend|submit|stop|step|start|split|sort|skip|show|set|send|select|search|scroll|save|revoke|resume|restore|restart|resolve|resize|reset|request|repair|rename|remove|register|redo|receive|read|push|publish|protect|pop|ping|out|optimize|open|new|move|mount|merge|measure|lock|limit|join|invoke|install|initialize|import|hide|group|grant|get|format|foreach|find|export|expand|exit|enter|enable|edit|dismount|disconnect|disable|deny|debug|cxnew|copy|convertto|convertfrom|convert|connect|confirm|compress|complete|compare|close|clear|checkpoint|block|backup|assert|approve|aggregate|add)-[a-z_]\w*\b`, NameBuiltin, nil}, - {`(ac|asnp|cat|cd|cfs|chdir|clc|clear|clhy|cli|clp|cls|clv|cnsn|compare|copy|cp|cpi|cpp|curl|cvpa|dbp|del|diff|dir|dnsn|ebp|echo|epal|epcsv|epsn|erase|etsn|exsn|fc|fhx|fl|foreach|ft|fw|gal|gbp|gc|gci|gcm|gcs|gdr|ghy|gi|gjb|gl|gm|gmo|gp|gps|gpv|group|gsn|gsnp|gsv|gu|gv|gwmi|h|history|icm|iex|ihy|ii|ipal|ipcsv|ipmo|ipsn|irm|ise|iwmi|iwr|kill|lp|ls|man|md|measure|mi|mount|move|mp|mv|nal|ndr|ni|nmo|npssc|nsn|nv|ogv|oh|popd|ps|pushd|pwd|r|rbp|rcjb|rcsn|rd|rdr|ren|ri|rjb|rm|rmdir|rmo|rni|rnp|rp|rsn|rsnp|rujb|rv|rvpa|rwmi|sajb|sal|saps|sasv|sbp|sc|select|set|shcm|si|sl|sleep|sls|sort|sp|spjb|spps|spsv|start|sujb|sv|swmi|tee|trcm|type|wget|where|wjb|write)\s`, NameBuiltin, nil}, - {"\\[[a-z_\\[][\\w. `,\\[\\]]*\\]", NameConstant, nil}, - {`-[a-z_]\w*`, Name, nil}, - {`\w+`, Name, nil}, - {"[.,;@{}\\[\\]$()=+*/\\\\&%!~?^`|<>-]|::", Punctuation, nil}, - }, - "child": { - {`\)`, Punctuation, Pop(1)}, - Include("root"), - }, - "multline": { - {`[^#&.]+`, CommentMultiline, nil}, - {`#(>|>)`, CommentMultiline, Pop(1)}, - {`\.(component|description|example|externalhelp|forwardhelpcategory|forwardhelptargetname|functionality|inputs|link|notes|outputs|parameter|remotehelprunspace|role|synopsis)`, LiteralStringDoc, nil}, - {`[#&.]`, CommentMultiline, nil}, - }, - "string": { - {"`[0abfnrtv'\\\"$`]", LiteralStringEscape, nil}, - {"[^$`\"]+", LiteralStringDouble, nil}, - {`\$\(`, Punctuation, Push("child")}, - {`""`, LiteralStringDouble, nil}, - {"[`$]", LiteralStringDouble, nil}, - {`"`, LiteralStringDouble, Pop(1)}, - }, - "heredoc-double": { - {`\n"@`, LiteralStringHeredoc, Pop(1)}, - {`\$\(`, Punctuation, Push("child")}, - {`[^@\n]+"]`, LiteralStringHeredoc, nil}, - {`.`, LiteralStringHeredoc, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/p/prolog.go b/vendor/github.com/alecthomas/chroma/lexers/p/prolog.go deleted file mode 100644 index 08b4812..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/p/prolog.go +++ /dev/null @@ -1,50 +0,0 @@ -package p - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Prolog lexer. -var Prolog = internal.Register(MustNewLexer( - &Config{ - Name: "Prolog", - Aliases: []string{"prolog"}, - Filenames: []string{"*.ecl", "*.prolog", "*.pro", "*.pl"}, - MimeTypes: []string{"text/x-prolog"}, - }, - Rules{ - "root": { - {`/\*`, CommentMultiline, Push("nested-comment")}, - {`%.*`, CommentSingle, nil}, - {`0\'.`, LiteralStringChar, nil}, - {`0b[01]+`, LiteralNumberBin, nil}, - {`0o[0-7]+`, LiteralNumberOct, nil}, - {`0x[0-9a-fA-F]+`, LiteralNumberHex, nil}, - {`\d\d?\'[a-zA-Z0-9]+`, LiteralNumberInteger, nil}, - {`(\d+\.\d*|\d*\.\d+)([eE][+-]?[0-9]+)?`, LiteralNumberFloat, nil}, - {`\d+`, LiteralNumberInteger, nil}, - {`[\[\](){}|.,;!]`, Punctuation, nil}, - {`:-|-->`, Punctuation, nil}, - {`"(?:\\x[0-9a-fA-F]+\\|\\u[0-9a-fA-F]{4}|\\U[0-9a-fA-F]{8}|\\[0-7]+\\|\\["\nabcefnrstv]|[^\\"])*"`, LiteralStringDouble, nil}, - {`'(?:''|[^'])*'`, LiteralStringAtom, nil}, - {`is\b`, Operator, nil}, - {`(<|>|=<|>=|==|=:=|=|/|//|\*|\+|-)(?=\s|[a-zA-Z0-9\[])`, Operator, nil}, - {`(mod|div|not)\b`, Operator, nil}, - {`_`, Keyword, nil}, - {`([a-z]+)(:)`, ByGroups(NameNamespace, Punctuation), nil}, - {`([a-zÀ-῿぀-퟿-￯][\w$À-῿぀-퟿-￯]*)(\s*)(:-|-->)`, ByGroups(NameFunction, Text, Operator), nil}, - {`([a-zÀ-῿぀-퟿-￯][\w$À-῿぀-퟿-￯]*)(\s*)(\()`, ByGroups(NameFunction, Text, Punctuation), nil}, - {`[a-zÀ-῿぀-퟿-￯][\w$À-῿぀-퟿-￯]*`, LiteralStringAtom, nil}, - {`[#&*+\-./:<=>?@\\^~¡-¿‐-〿]+`, LiteralStringAtom, nil}, - {`[A-Z_]\w*`, NameVariable, nil}, - {`\s+|[ -‏￰-￾￯]`, Text, nil}, - }, - "nested-comment": { - {`\*/`, CommentMultiline, Pop(1)}, - {`/\*`, CommentMultiline, Push()}, - {`[^*/]+`, CommentMultiline, nil}, - {`[*/]`, CommentMultiline, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/p/protobuf.go b/vendor/github.com/alecthomas/chroma/lexers/p/protobuf.go deleted file mode 100644 index 3014013..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/p/protobuf.go +++ /dev/null @@ -1,53 +0,0 @@ -package p - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// ProtocolBuffer lexer. -var ProtocolBuffer = internal.Register(MustNewLexer( - &Config{ - Name: "Protocol Buffer", - Aliases: []string{"protobuf", "proto"}, - Filenames: []string{"*.proto"}, - MimeTypes: []string{}, - }, - Rules{ - "root": { - {`[ \t]+`, Text, nil}, - {`[,;{}\[\]()<>]`, Punctuation, nil}, - {`/(\\\n)?/(\n|(.|\n)*?[^\\]\n)`, CommentSingle, nil}, - {`/(\\\n)?\*(.|\n)*?\*(\\\n)?/`, CommentMultiline, nil}, - {Words(`\b`, `\b`, `import`, `option`, `optional`, `required`, `repeated`, `default`, `packed`, `ctype`, `extensions`, `to`, `max`, `rpc`, `returns`, `oneof`), Keyword, nil}, - {Words(``, `\b`, `int32`, `int64`, `uint32`, `uint64`, `sint32`, `sint64`, `fixed32`, `fixed64`, `sfixed32`, `sfixed64`, `float`, `double`, `bool`, `string`, `bytes`), KeywordType, nil}, - {`(true|false)\b`, KeywordConstant, nil}, - {`(package)(\s+)`, ByGroups(KeywordNamespace, Text), Push("package")}, - {`(message|extend)(\s+)`, ByGroups(KeywordDeclaration, Text), Push("message")}, - {`(enum|group|service)(\s+)`, ByGroups(KeywordDeclaration, Text), Push("type")}, - {`\".*?\"`, LiteralString, nil}, - {`\'.*?\'`, LiteralString, nil}, - {`(\d+\.\d*|\.\d+|\d+)[eE][+-]?\d+[LlUu]*`, LiteralNumberFloat, nil}, - {`(\d+\.\d*|\.\d+|\d+[fF])[fF]?`, LiteralNumberFloat, nil}, - {`(\-?(inf|nan))\b`, LiteralNumberFloat, nil}, - {`0x[0-9a-fA-F]+[LlUu]*`, LiteralNumberHex, nil}, - {`0[0-7]+[LlUu]*`, LiteralNumberOct, nil}, - {`\d+[LlUu]*`, LiteralNumberInteger, nil}, - {`[+-=]`, Operator, nil}, - {`([a-zA-Z_][\w.]*)([ \t]*)(=)`, ByGroups(Name, Text, Operator), nil}, - {`[a-zA-Z_][\w.]*`, Name, nil}, - }, - "package": { - {`[a-zA-Z_]\w*`, NameNamespace, Pop(1)}, - Default(Pop(1)), - }, - "message": { - {`[a-zA-Z_]\w*`, NameClass, Pop(1)}, - Default(Pop(1)), - }, - "type": { - {`[a-zA-Z_]\w*`, Name, Pop(1)}, - Default(Pop(1)), - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/p/puppet.go b/vendor/github.com/alecthomas/chroma/lexers/p/puppet.go deleted file mode 100644 index a1db0d2..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/p/puppet.go +++ /dev/null @@ -1,56 +0,0 @@ -package p - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Puppet lexer. -var Puppet = internal.Register(MustNewLexer( - &Config{ - Name: "Puppet", - Aliases: []string{"puppet"}, - Filenames: []string{"*.pp"}, - MimeTypes: []string{}, - }, - Rules{ - "root": { - Include("comments"), - Include("keywords"), - Include("names"), - Include("numbers"), - Include("operators"), - Include("strings"), - {`[]{}:(),;[]`, Punctuation, nil}, - {`[^\S\n]+`, Text, nil}, - }, - "comments": { - {`\s*#.*$`, Comment, nil}, - {`/(\\\n)?[*](.|\n)*?[*](\\\n)?/`, CommentMultiline, nil}, - }, - "operators": { - {`(=>|\?|<|>|=|\+|-|/|\*|~|!|\|)`, Operator, nil}, - {`(in|and|or|not)\b`, OperatorWord, nil}, - }, - "names": { - {`[a-zA-Z_]\w*`, NameAttribute, nil}, - {`(\$\S+)(\[)(\S+)(\])`, ByGroups(NameVariable, Punctuation, LiteralString, Punctuation), nil}, - {`\$\S+`, NameVariable, nil}, - }, - "numbers": { - {`(\d+\.\d*|\d*\.\d+)([eE][+-]?[0-9]+)?j?`, LiteralNumberFloat, nil}, - {`\d+[eE][+-]?[0-9]+j?`, LiteralNumberFloat, nil}, - {`0[0-7]+j?`, LiteralNumberOct, nil}, - {`0[xX][a-fA-F0-9]+`, LiteralNumberHex, nil}, - {`\d+L`, LiteralNumberIntegerLong, nil}, - {`\d+j?`, LiteralNumberInteger, nil}, - }, - "keywords": { - {Words(`(?i)`, `\b`, `absent`, `alert`, `alias`, `audit`, `augeas`, `before`, `case`, `check`, `class`, `computer`, `configured`, `contained`, `create_resources`, `crit`, `cron`, `debug`, `default`, `define`, `defined`, `directory`, `else`, `elsif`, `emerg`, `err`, `exec`, `extlookup`, `fail`, `false`, `file`, `filebucket`, `fqdn_rand`, `generate`, `host`, `if`, `import`, `include`, `info`, `inherits`, `inline_template`, `installed`, `interface`, `k5login`, `latest`, `link`, `loglevel`, `macauthorization`, `mailalias`, `maillist`, `mcx`, `md5`, `mount`, `mounted`, `nagios_command`, `nagios_contact`, `nagios_contactgroup`, `nagios_host`, `nagios_hostdependency`, `nagios_hostescalation`, `nagios_hostextinfo`, `nagios_hostgroup`, `nagios_service`, `nagios_servicedependency`, `nagios_serviceescalation`, `nagios_serviceextinfo`, `nagios_servicegroup`, `nagios_timeperiod`, `node`, `noop`, `notice`, `notify`, `package`, `present`, `purged`, `realize`, `regsubst`, `resources`, `role`, `router`, `running`, `schedule`, `scheduled_task`, `search`, `selboolean`, `selmodule`, `service`, `sha1`, `shellquote`, `split`, `sprintf`, `ssh_authorized_key`, `sshkey`, `stage`, `stopped`, `subscribe`, `tag`, `tagged`, `template`, `tidy`, `true`, `undef`, `unmounted`, `user`, `versioncmp`, `vlan`, `warning`, `yumrepo`, `zfs`, `zone`, `zpool`), Keyword, nil}, - }, - "strings": { - {`"([^"])*"`, LiteralString, nil}, - {`'(\\'|[^'])*'`, LiteralString, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/p/python.go b/vendor/github.com/alecthomas/chroma/lexers/p/python.go deleted file mode 100644 index 77f2c8d..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/p/python.go +++ /dev/null @@ -1,137 +0,0 @@ -package p - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Python lexer. -var Python = internal.Register(MustNewLexer( - &Config{ - Name: "Python", - Aliases: []string{"python", "py", "sage"}, - Filenames: []string{"*.py", "*.pyw", "*.sc", "SConstruct", "SConscript", "*.tac", "*.sage"}, - MimeTypes: []string{"text/x-python", "application/x-python"}, - }, - Rules{ - "root": { - {`\n`, Text, nil}, - {`^(\s*)([rRuUbB]{,2})("""(?:.|\n)*?""")`, ByGroups(Text, LiteralStringAffix, LiteralStringDoc), nil}, - {`^(\s*)([rRuUbB]{,2})('''(?:.|\n)*?''')`, ByGroups(Text, LiteralStringAffix, LiteralStringDoc), nil}, - {`[^\S\n]+`, Text, nil}, - {`\A#!.+$`, CommentHashbang, nil}, - {`#.*$`, CommentSingle, nil}, - {`[]{}:(),;[]`, Punctuation, nil}, - {`\\\n`, Text, nil}, - {`\\`, Text, nil}, - {`(in|is|and|or|not)\b`, OperatorWord, nil}, - {`!=|==|<<|>>|[-~+/*%=<>&^|.]`, Operator, nil}, - Include("keywords"), - {`(def)((?:\s|\\\s)+)`, ByGroups(Keyword, Text), Push("funcname")}, - {`(class)((?:\s|\\\s)+)`, ByGroups(Keyword, Text), Push("classname")}, - {`(from)((?:\s|\\\s)+)`, ByGroups(KeywordNamespace, Text), Push("fromimport")}, - {`(import)((?:\s|\\\s)+)`, ByGroups(KeywordNamespace, Text), Push("import")}, - Include("builtins"), - Include("magicfuncs"), - Include("magicvars"), - Include("backtick"), - {`([rR]|[uUbB][rR]|[rR][uUbB])(""")`, ByGroups(LiteralStringAffix, LiteralStringDouble), Push("tdqs")}, - {`([rR]|[uUbB][rR]|[rR][uUbB])(''')`, ByGroups(LiteralStringAffix, LiteralStringSingle), Push("tsqs")}, - {`([rR]|[uUbB][rR]|[rR][uUbB])(")`, ByGroups(LiteralStringAffix, LiteralStringDouble), Push("dqs")}, - {`([rR]|[uUbB][rR]|[rR][uUbB])(')`, ByGroups(LiteralStringAffix, LiteralStringSingle), Push("sqs")}, - {`([uUbB]?)(""")`, ByGroups(LiteralStringAffix, LiteralStringDouble), Combined("stringescape", "tdqs")}, - {`([uUbB]?)(''')`, ByGroups(LiteralStringAffix, LiteralStringSingle), Combined("stringescape", "tsqs")}, - {`([uUbB]?)(")`, ByGroups(LiteralStringAffix, LiteralStringDouble), Combined("stringescape", "dqs")}, - {`([uUbB]?)(')`, ByGroups(LiteralStringAffix, LiteralStringSingle), Combined("stringescape", "sqs")}, - Include("name"), - Include("numbers"), - }, - "keywords": { - {Words(``, `\b`, `assert`, `break`, `continue`, `del`, `elif`, `else`, `except`, `exec`, `finally`, `for`, `global`, `if`, `lambda`, `pass`, `print`, `raise`, `return`, `try`, `while`, `yield`, `yield from`, `as`, `with`), Keyword, nil}, - }, - "builtins": { - {Words(`(?>|[-~+/*%=<>&^|.]`, Operator, nil}, - Include("keywords"), - {`(def)((?:\s|\\\s)+)`, ByGroups(Keyword, Text), Push("funcname")}, - {`(class)((?:\s|\\\s)+)`, ByGroups(Keyword, Text), Push("classname")}, - {`(from)((?:\s|\\\s)+)`, ByGroups(KeywordNamespace, Text), Push("fromimport")}, - {`(import)((?:\s|\\\s)+)`, ByGroups(KeywordNamespace, Text), Push("import")}, - Include("builtins"), - Include("magicfuncs"), - Include("magicvars"), - Include("backtick"), - {`([rR]|[uUbB][rR]|[rR][uUbB])(""")`, ByGroups(LiteralStringAffix, LiteralStringDouble), Push("tdqs")}, - {`([rR]|[uUbB][rR]|[rR][uUbB])(''')`, ByGroups(LiteralStringAffix, LiteralStringSingle), Push("tsqs")}, - {`([rR]|[uUbB][rR]|[rR][uUbB])(")`, ByGroups(LiteralStringAffix, LiteralStringDouble), Push("dqs")}, - {`([rR]|[uUbB][rR]|[rR][uUbB])(')`, ByGroups(LiteralStringAffix, LiteralStringSingle), Push("sqs")}, - {`([uUbB]?)(""")`, ByGroups(LiteralStringAffix, LiteralStringDouble), Combined("stringescape", "tdqs")}, - {`([uUbB]?)(''')`, ByGroups(LiteralStringAffix, LiteralStringSingle), Combined("stringescape", "tsqs")}, - {`([uUbB]?)(")`, ByGroups(LiteralStringAffix, LiteralStringDouble), Combined("stringescape", "dqs")}, - {`([uUbB]?)(')`, ByGroups(LiteralStringAffix, LiteralStringSingle), Combined("stringescape", "sqs")}, - Include("name"), - Include("numbers"), - }, - "keywords": { - {Words(``, `\b`, `assert`, `async`, `await`, `break`, `continue`, `del`, `elif`, `else`, `except`, `finally`, `for`, `global`, `if`, `lambda`, `pass`, `raise`, `nonlocal`, `return`, `try`, `while`, `yield`, `yield from`, `as`, `with`), Keyword, nil}, - {Words(``, `\b`, `True`, `False`, `None`), KeywordConstant, nil}, - }, - "builtins": { - {Words(`(?=\^])?[-+ ]?#?0?(\d+)?,?(\.\d+)?[E-GXb-gnosx%]?)?\}`, LiteralStringInterpol, nil}, - {`[^\\\'"%{\n]+`, LiteralStringSingle, nil}, - {`[\'"\\]`, LiteralStringSingle, nil}, - {`%|(\{{1,2})`, LiteralStringSingle, nil}, - }, - "strings-double": { - {`%(\(\w+\))?[-#0 +]*([0-9]+|[*])?(\.([0-9]+|[*]))?[hlL]?[E-GXc-giorsux%]`, LiteralStringInterpol, nil}, - {`\{((\w+)((\.\w+)|(\[[^\]]+\]))*)?(\![sra])?(\:(.?[<>=\^])?[-+ ]?#?0?(\d+)?,?(\.\d+)?[E-GXb-gnosx%]?)?\}`, LiteralStringInterpol, nil}, - {`[^\\\'"%{\n]+`, LiteralStringDouble, nil}, - {`[\'"\\]`, LiteralStringDouble, nil}, - {`%|(\{{1,2})`, LiteralStringDouble, nil}, - }, - "dqs": { - {`"`, LiteralStringDouble, Pop(1)}, - {`\\\\|\\"|\\\n`, LiteralStringEscape, nil}, - Include("strings-double"), - }, - "sqs": { - {`'`, LiteralStringSingle, Pop(1)}, - {`\\\\|\\'|\\\n`, LiteralStringEscape, nil}, - Include("strings-single"), - }, - "tdqs": { - {`"""`, LiteralStringDouble, Pop(1)}, - Include("strings-double"), - {`\n`, LiteralStringDouble, nil}, - }, - "tsqs": { - {`'''`, LiteralStringSingle, Pop(1)}, - Include("strings-single"), - {`\n`, LiteralStringSingle, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/q/qbasic.go b/vendor/github.com/alecthomas/chroma/lexers/q/qbasic.go deleted file mode 100644 index fd47c08..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/q/qbasic.go +++ /dev/null @@ -1,67 +0,0 @@ -package q - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Qbasic lexer. -var Qbasic = internal.Register(MustNewLexer( - &Config{ - Name: "QBasic", - Aliases: []string{"qbasic", "basic"}, - Filenames: []string{"*.BAS", "*.bas"}, - MimeTypes: []string{"text/basic"}, - }, - Rules{ - "root": { - {`\n+`, Text, nil}, - {`\s+`, TextWhitespace, nil}, - {`^(\s*)(\d*)(\s*)(REM .*)$`, ByGroups(TextWhitespace, NameLabel, TextWhitespace, CommentSingle), nil}, - {`^(\s*)(\d+)(\s*)`, ByGroups(TextWhitespace, NameLabel, TextWhitespace), nil}, - {`(?=[\s]*)(\w+)(?=[\s]*=)`, NameVariableGlobal, nil}, - {`(?=[^"]*)\'.*$`, CommentSingle, nil}, - {`"[^\n"]*"`, LiteralStringDouble, nil}, - {`(END)(\s+)(FUNCTION|IF|SELECT|SUB)`, ByGroups(KeywordReserved, TextWhitespace, KeywordReserved), nil}, - {`(DECLARE)(\s+)([A-Z]+)(\s+)(\S+)`, ByGroups(KeywordDeclaration, TextWhitespace, NameVariable, TextWhitespace, Name), nil}, - {`(DIM)(\s+)(SHARED)(\s+)([^\s(]+)`, ByGroups(KeywordDeclaration, TextWhitespace, NameVariable, TextWhitespace, NameVariableGlobal), nil}, - {`(DIM)(\s+)([^\s(]+)`, ByGroups(KeywordDeclaration, TextWhitespace, NameVariableGlobal), nil}, - {`^(\s*)([a-zA-Z_]+)(\s*)(\=)`, ByGroups(TextWhitespace, NameVariableGlobal, TextWhitespace, Operator), nil}, - {`(GOTO|GOSUB)(\s+)(\w+\:?)`, ByGroups(KeywordReserved, TextWhitespace, NameLabel), nil}, - {`(SUB)(\s+)(\w+\:?)`, ByGroups(KeywordReserved, TextWhitespace, NameLabel), nil}, - Include("declarations"), - Include("functions"), - Include("metacommands"), - Include("operators"), - Include("statements"), - Include("keywords"), - {`[a-zA-Z_]\w*[$@#&!]`, NameVariableGlobal, nil}, - {`[a-zA-Z_]\w*\:`, NameLabel, nil}, - {`\-?\d*\.\d+[@|#]?`, LiteralNumberFloat, nil}, - {`\-?\d+[@|#]`, LiteralNumberFloat, nil}, - {`\-?\d+#?`, LiteralNumberIntegerLong, nil}, - {`\-?\d+#?`, LiteralNumberInteger, nil}, - {`!=|==|:=|\.=|<<|>>|[-~+/\\*%=<>&^|?:!.]`, Operator, nil}, - {`[\[\]{}(),;]`, Punctuation, nil}, - {`[\w]+`, NameVariableGlobal, nil}, - }, - "declarations": { - {`\b(DATA|LET)(?=\(|\b)`, KeywordDeclaration, nil}, - }, - "functions": { - {`\b(ABS|ASC|ATN|CDBL|CHR\$|CINT|CLNG|COMMAND\$|COS|CSNG|CSRLIN|CVD|CVDMBF|CVI|CVL|CVS|CVSMBF|DATE\$|ENVIRON\$|EOF|ERDEV|ERDEV\$|ERL|ERR|EXP|FILEATTR|FIX|FRE|FREEFILE|HEX\$|INKEY\$|INP|INPUT\$|INSTR|INT|IOCTL\$|LBOUND|LCASE\$|LEFT\$|LEN|LOC|LOF|LOG|LPOS|LTRIM\$|MID\$|MKD\$|MKDMBF\$|MKI\$|MKL\$|MKS\$|MKSMBF\$|OCT\$|PEEK|PEN|PLAY|PMAP|POINT|POS|RIGHT\$|RND|RTRIM\$|SADD|SCREEN|SEEK|SETMEM|SGN|SIN|SPACE\$|SPC|SQR|STICK|STR\$|STRIG|STRING\$|TAB|TAN|TIME\$|TIMER|UBOUND|UCASE\$|VAL|VARPTR|VARPTR\$|VARSEG)(?=\(|\b)`, KeywordReserved, nil}, - }, - "metacommands": { - {`\b(\$DYNAMIC|\$INCLUDE|\$STATIC)(?=\(|\b)`, KeywordConstant, nil}, - }, - "operators": { - {`\b(AND|EQV|IMP|NOT|OR|XOR)(?=\(|\b)`, OperatorWord, nil}, - }, - "statements": { - {`\b(BEEP|BLOAD|BSAVE|CALL|CALL\ ABSOLUTE|CALL\ INTERRUPT|CALLS|CHAIN|CHDIR|CIRCLE|CLEAR|CLOSE|CLS|COLOR|COM|COMMON|CONST|DATA|DATE\$|DECLARE|DEF\ FN|DEF\ SEG|DEFDBL|DEFINT|DEFLNG|DEFSNG|DEFSTR|DEF|DIM|DO|LOOP|DRAW|END|ENVIRON|ERASE|ERROR|EXIT|FIELD|FILES|FOR|NEXT|FUNCTION|GET|GOSUB|GOTO|IF|THEN|INPUT|INPUT\ \#|IOCTL|KEY|KEY|KILL|LET|LINE|LINE\ INPUT|LINE\ INPUT\ \#|LOCATE|LOCK|UNLOCK|LPRINT|LSET|MID\$|MKDIR|NAME|ON\ COM|ON\ ERROR|ON\ KEY|ON\ PEN|ON\ PLAY|ON\ STRIG|ON\ TIMER|ON\ UEVENT|ON|OPEN|OPEN\ COM|OPTION\ BASE|OUT|PAINT|PALETTE|PCOPY|PEN|PLAY|POKE|PRESET|PRINT|PRINT\ \#|PRINT\ USING|PSET|PUT|PUT|RANDOMIZE|READ|REDIM|REM|RESET|RESTORE|RESUME|RETURN|RMDIR|RSET|RUN|SCREEN|SEEK|SELECT\ CASE|SHARED|SHELL|SLEEP|SOUND|STATIC|STOP|STRIG|SUB|SWAP|SYSTEM|TIME\$|TIMER|TROFF|TRON|TYPE|UEVENT|UNLOCK|VIEW|WAIT|WHILE|WEND|WIDTH|WINDOW|WRITE)\b`, KeywordReserved, nil}, - }, - "keywords": { - {`\b(ACCESS|ALIAS|ANY|APPEND|AS|BASE|BINARY|BYVAL|CASE|CDECL|DOUBLE|ELSE|ELSEIF|ENDIF|INTEGER|IS|LIST|LOCAL|LONG|LOOP|MOD|NEXT|OFF|ON|OUTPUT|RANDOM|SIGNAL|SINGLE|STEP|STRING|THEN|TO|UNTIL|USING|WEND)\b`, Keyword, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/r/r.go b/vendor/github.com/alecthomas/chroma/lexers/r/r.go deleted file mode 100644 index c2d3f56..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/r/r.go +++ /dev/null @@ -1,66 +0,0 @@ -package r - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// R/S lexer. -var R = internal.Register(MustNewLexer( - &Config{ - Name: "R", - Aliases: []string{"splus", "s", "r"}, - Filenames: []string{"*.S", "*.R", "*.r", ".Rhistory", ".Rprofile", ".Renviron"}, - MimeTypes: []string{"text/S-plus", "text/S", "text/x-r-source", "text/x-r", "text/x-R", "text/x-r-history", "text/x-r-profile"}, - }, - Rules{ - "comments": { - {`#.*$`, CommentSingle, nil}, - }, - "valid_name": { - {"(?:`[^`\\\\]*(?:\\\\.[^`\\\\]*)*`)|(?:(?:[a-zA-z]|[_.][^0-9])[\\w_.]*)", Name, nil}, - }, - "punctuation": { - {`\[{1,2}|\]{1,2}|\(|\)|;|,`, Punctuation, nil}, - }, - "keywords": { - {`(if|else|for|while|repeat|in|next|break|return|switch|function)(?![\w.])`, KeywordReserved, nil}, - }, - "operators": { - {`<>?|-|==|<=|>=|<|>|&&?|!=|\|\|?|\?`, Operator, nil}, - {`\*|\+|\^|/|!|%[^%]*%|=|~|\$|@|:{1,3}`, Operator, nil}, - }, - "builtin_symbols": { - {`(NULL|NA(_(integer|real|complex|character)_)?|letters|LETTERS|Inf|TRUE|FALSE|NaN|pi|\.\.(\.|[0-9]+))(?![\w.])`, KeywordConstant, nil}, - {`(T|F)\b`, NameBuiltinPseudo, nil}, - }, - "numbers": { - {`0[xX][a-fA-F0-9]+([pP][0-9]+)?[Li]?`, LiteralNumberHex, nil}, - {`[+-]?([0-9]+(\.[0-9]+)?|\.[0-9]+|\.)([eE][+-]?[0-9]+)?[Li]?`, LiteralNumber, nil}, - }, - "statements": { - Include("comments"), - {`\s+`, Text, nil}, - {`\'`, LiteralString, Push("string_squote")}, - {`\"`, LiteralString, Push("string_dquote")}, - Include("builtin_symbols"), - Include("valid_name"), - Include("numbers"), - Include("keywords"), - Include("punctuation"), - Include("operators"), - }, - "root": { - {"((?:`[^`\\\\]*(?:\\\\.[^`\\\\]*)*`)|(?:(?:[a-zA-z]|[_.][^0-9])[\\w_.]*))\\s*(?=\\()", NameFunction, nil}, - Include("statements"), - {`\{|\}`, Punctuation, nil}, - {`.`, Text, nil}, - }, - "string_squote": { - {`([^\'\\]|\\.)*\'`, LiteralString, Pop(1)}, - }, - "string_dquote": { - {`([^"\\]|\\.)*"`, LiteralString, Pop(1)}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/r/racket.go b/vendor/github.com/alecthomas/chroma/lexers/r/racket.go deleted file mode 100644 index cf27ea1..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/r/racket.go +++ /dev/null @@ -1,102 +0,0 @@ -package r - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Racket lexer. -var Racket = internal.Register(MustNewLexer( - &Config{ - Name: "Racket", - Aliases: []string{"racket", "rkt"}, - Filenames: []string{"*.rkt", "*.rktd", "*.rktl"}, - MimeTypes: []string{"text/x-racket", "application/x-racket"}, - }, - Rules{ - "root": { - {`[)\]}]`, Error, nil}, - {`(?!\Z)`, Text, Push("unquoted-datum")}, - }, - "datum": { - {`(?s)#;|#![ /]([^\\\n]|\\.)*`, Comment, nil}, - {`;[^\n\r…

]*`, CommentSingle, nil}, - {`#\|`, CommentMultiline, Push("block-comment")}, - {`\s+`, Text, nil}, - {"(?i)(?:#e)?(?:#d)?(?:#e)?[-+]?\\d+(?=[()[\\]{}\",\\'`;\\s])", LiteralNumberInteger, Pop(1)}, - {"(?i)(?:#e)?(?:#d)?(?:#e)?[-+]?(\\d+(\\.\\d*)?|\\.\\d+)([deflst][-+]?\\d+)?(?=[()[\\]{}\",\\'`;\\s])", LiteralNumberFloat, Pop(1)}, - {"(?i)(?:#e)?(?:#d)?(?:#e)?[-+]?((?:(?:\\d+(?:/\\d+|\\.\\d*)?|\\.\\d+)(?:[defls][-+]?\\d+)?)([-+](?:(?:\\d+(?:/\\d+|\\.\\d*)?|\\.\\d+)(?:[defls][-+]?\\d+)?)?i)?|[-+](?:(?:\\d+(?:/\\d+|\\.\\d*)?|\\.\\d+)(?:[defls][-+]?\\d+)?)?i)(?=[()[\\]{}\",\\'`;\\s])", LiteralNumber, Pop(1)}, - {"(?i)(#d)?((?:[-+]?(?:(?:(?:\\d+(?:/\\d+|\\.\\d*)?|\\.\\d+)|(?:\\d+#+(?:\\.#*|/\\d+#*)?|\\.\\d+#+|\\d+(?:\\.\\d*#+|/\\d+#+)))(?:[defls][-+]?\\d+)?)|[-+](?:(?:inf|nan)\\.[0f]))([-+](?:(?:(?:(?:\\d+(?:/\\d+|\\.\\d*)?|\\.\\d+)|(?:\\d+#+(?:\\.#*|/\\d+#*)?|\\.\\d+#+|\\d+(?:\\.\\d*#+|/\\d+#+)))(?:[defls][-+]?\\d+)?)|(?:(?:inf|nan)\\.[0f]))?i)?|[-+](?:(?:(?:(?:\\d+(?:/\\d+|\\.\\d*)?|\\.\\d+)|(?:\\d+#+(?:\\.#*|/\\d+#*)?|\\.\\d+#+|\\d+(?:\\.\\d*#+|/\\d+#+)))(?:[defls][-+]?\\d+)?)|(?:(?:inf|nan)\\.[0f]))?i|(?:[-+]?(?:(?:(?:\\d+(?:/\\d+|\\.\\d*)?|\\.\\d+)|(?:\\d+#+(?:\\.#*|/\\d+#*)?|\\.\\d+#+|\\d+(?:\\.\\d*#+|/\\d+#+)))(?:[defls][-+]?\\d+)?)|[-+](?:(?:inf|nan)\\.[0f]))@(?:[-+]?(?:(?:(?:\\d+(?:/\\d+|\\.\\d*)?|\\.\\d+)|(?:\\d+#+(?:\\.#*|/\\d+#*)?|\\.\\d+#+|\\d+(?:\\.\\d*#+|/\\d+#+)))(?:[defls][-+]?\\d+)?)|[-+](?:(?:inf|nan)\\.[0f])))(?=[()[\\]{}\",\\'`;\\s])", LiteralNumberFloat, Pop(1)}, - {"(?i)(([-+]?(?:(?:\\d+(?:/\\d+|\\.\\d*)?|\\.\\d+)|(?:\\d+#+(?:\\.#*|/\\d+#*)?|\\.\\d+#+|\\d+(?:\\.\\d*#+|/\\d+#+)))t[-+]?\\d+)|[-+](inf|nan)\\.t)(?=[()[\\]{}\",\\'`;\\s])", LiteralNumberFloat, Pop(1)}, - {"(?i)(#[ei])?#b(?:\\|[^|]*\\||\\\\[\\w\\W]|[^|\\\\()[\\]{}\",\\'`;\\s]+)+", LiteralNumberBin, Pop(1)}, - {"(?i)(#[ei])?#o(?:\\|[^|]*\\||\\\\[\\w\\W]|[^|\\\\()[\\]{}\",\\'`;\\s]+)+", LiteralNumberOct, Pop(1)}, - {"(?i)(#[ei])?#x(?:\\|[^|]*\\||\\\\[\\w\\W]|[^|\\\\()[\\]{}\",\\'`;\\s]+)+", LiteralNumberHex, Pop(1)}, - {"(?i)(#d)?#i(?:\\|[^|]*\\||\\\\[\\w\\W]|[^|\\\\()[\\]{}\",\\'`;\\s]+)+", LiteralNumberFloat, Pop(1)}, - {`#?"`, LiteralStringDouble, Push("#pop", "string")}, - {`#<<(.+)\n(^(?!\1$).*$\n)*^\1$`, LiteralStringHeredoc, Pop(1)}, - {`#\\(u[\da-fA-F]{1,4}|U[\da-fA-F]{1,8})`, LiteralStringChar, Pop(1)}, - {`(?is)#\\([0-7]{3}|[a-z]+|.)`, LiteralStringChar, Pop(1)}, - {`(?s)#[pr]x#?"(\\?.)*?"`, LiteralStringRegex, Pop(1)}, - {`#(true|false|[tTfF])`, NameConstant, Pop(1)}, - {"#:(?:\\|[^|]*\\||\\\\[\\w\\W]|[^|\\\\()[\\]{}\",\\'`;\\s]+)+", KeywordDeclaration, Pop(1)}, - {`(#lang |#!)(\S+)`, ByGroups(KeywordNamespace, NameNamespace), nil}, - {`#reader`, KeywordNamespace, Push("quoted-datum")}, - {"(?i)\\.(?=[()[\\]{}\",\\'`;\\s])|#c[is]|#['`]|#,@?", Operator, nil}, - {`'|#[s&]|#hash(eqv?)?|#\d*(?=[([{])`, Operator, Push("#pop", "quoted-datum")}, - }, - "datum*": { - {"`|,@?", Operator, nil}, - {"(?:\\|[^|]*\\||\\\\[\\w\\W]|[^|\\\\()[\\]{}\",\\'`;\\s]+)+", LiteralStringSymbol, Pop(1)}, - {`[|\\]`, Error, nil}, - Default(Pop(1)), - }, - "list": { - {`[)\]}]`, Punctuation, Pop(1)}, - }, - "unquoted-datum": { - Include("datum"), - {"quote(?=[()[\\]{}\",\\'`;\\s])", Keyword, Push("#pop", "quoted-datum")}, - {"`", Operator, Push("#pop", "quasiquoted-datum")}, - {"quasiquote(?=[()[\\]{}\",\\'`;\\s])", Keyword, Push("#pop", "quasiquoted-datum")}, - {`[([{]`, Punctuation, Push("#pop", "unquoted-list")}, - {Words(``, "(?=[()[\\]{}\",\\'`;\\s])", `#%app`, `#%datum`, `#%declare`, `#%expression`, `#%module-begin`, `#%plain-app`, `#%plain-lambda`, `#%plain-module-begin`, `#%printing-module-begin`, `#%provide`, `#%require`, `#%stratified-body`, `#%top`, `#%top-interaction`, `#%variable-reference`, `->`, `->*`, `->*m`, `->d`, `->dm`, `->i`, `->m`, `...`, `:do-in`, `==`, `=>`, `_`, `absent`, `abstract`, `all-defined-out`, `all-from-out`, `and`, `any`, `augment`, `augment*`, `augment-final`, `augment-final*`, `augride`, `augride*`, `begin`, `begin-for-syntax`, `begin0`, `case`, `case->`, `case->m`, `case-lambda`, `class`, `class*`, `class-field-accessor`, `class-field-mutator`, `class/c`, `class/derived`, `combine-in`, `combine-out`, `command-line`, `compound-unit`, `compound-unit/infer`, `cond`, `cons/dc`, `contract`, `contract-out`, `contract-struct`, `contracted`, `define`, `define-compound-unit`, `define-compound-unit/infer`, `define-contract-struct`, `define-custom-hash-types`, `define-custom-set-types`, `define-for-syntax`, `define-local-member-name`, `define-logger`, `define-match-expander`, `define-member-name`, `define-module-boundary-contract`, `define-namespace-anchor`, `define-opt/c`, `define-sequence-syntax`, `define-serializable-class`, `define-serializable-class*`, `define-signature`, `define-signature-form`, `define-struct`, `define-struct/contract`, `define-struct/derived`, `define-syntax`, `define-syntax-rule`, `define-syntaxes`, `define-unit`, `define-unit-binding`, `define-unit-from-context`, `define-unit/contract`, `define-unit/new-import-export`, `define-unit/s`, `define-values`, `define-values-for-export`, `define-values-for-syntax`, `define-values/invoke-unit`, `define-values/invoke-unit/infer`, `define/augment`, `define/augment-final`, `define/augride`, `define/contract`, `define/final-prop`, `define/match`, `define/overment`, `define/override`, `define/override-final`, `define/private`, `define/public`, `define/public-final`, `define/pubment`, `define/subexpression-pos-prop`, `define/subexpression-pos-prop/name`, `delay`, `delay/idle`, `delay/name`, `delay/strict`, `delay/sync`, `delay/thread`, `do`, `else`, `except`, `except-in`, `except-out`, `export`, `extends`, `failure-cont`, `false`, `false/c`, `field`, `field-bound?`, `file`, `flat-murec-contract`, `flat-rec-contract`, `for`, `for*`, `for*/and`, `for*/async`, `for*/first`, `for*/fold`, `for*/fold/derived`, `for*/hash`, `for*/hasheq`, `for*/hasheqv`, `for*/last`, `for*/list`, `for*/lists`, `for*/mutable-set`, `for*/mutable-seteq`, `for*/mutable-seteqv`, `for*/or`, `for*/product`, `for*/set`, `for*/seteq`, `for*/seteqv`, `for*/stream`, `for*/sum`, `for*/vector`, `for*/weak-set`, `for*/weak-seteq`, `for*/weak-seteqv`, `for-label`, `for-meta`, `for-syntax`, `for-template`, `for/and`, `for/async`, `for/first`, `for/fold`, `for/fold/derived`, `for/hash`, `for/hasheq`, `for/hasheqv`, `for/last`, `for/list`, `for/lists`, `for/mutable-set`, `for/mutable-seteq`, `for/mutable-seteqv`, `for/or`, `for/product`, `for/set`, `for/seteq`, `for/seteqv`, `for/stream`, `for/sum`, `for/vector`, `for/weak-set`, `for/weak-seteq`, `for/weak-seteqv`, `gen:custom-write`, `gen:dict`, `gen:equal+hash`, `gen:set`, `gen:stream`, `generic`, `get-field`, `hash/dc`, `if`, `implies`, `import`, `include`, `include-at/relative-to`, `include-at/relative-to/reader`, `include/reader`, `inherit`, `inherit-field`, `inherit/inner`, `inherit/super`, `init`, `init-depend`, `init-field`, `init-rest`, `inner`, `inspect`, `instantiate`, `interface`, `interface*`, `invariant-assertion`, `invoke-unit`, `invoke-unit/infer`, `lambda`, `lazy`, `let`, `let*`, `let*-values`, `let-syntax`, `let-syntaxes`, `let-values`, `let/cc`, `let/ec`, `letrec`, `letrec-syntax`, `letrec-syntaxes`, `letrec-syntaxes+values`, `letrec-values`, `lib`, `link`, `local`, `local-require`, `log-debug`, `log-error`, `log-fatal`, `log-info`, `log-warning`, `match`, `match*`, `match*/derived`, `match-define`, `match-define-values`, `match-lambda`, `match-lambda*`, `match-lambda**`, `match-let`, `match-let*`, `match-let*-values`, `match-let-values`, `match-letrec`, `match-letrec-values`, `match/derived`, `match/values`, `member-name-key`, `mixin`, `module`, `module*`, `module+`, `nand`, `new`, `nor`, `object-contract`, `object/c`, `only`, `only-in`, `only-meta-in`, `open`, `opt/c`, `or`, `overment`, `overment*`, `override`, `override*`, `override-final`, `override-final*`, `parameterize`, `parameterize*`, `parameterize-break`, `parametric->/c`, `place`, `place*`, `place/context`, `planet`, `prefix`, `prefix-in`, `prefix-out`, `private`, `private*`, `prompt-tag/c`, `protect-out`, `provide`, `provide-signature-elements`, `provide/contract`, `public`, `public*`, `public-final`, `public-final*`, `pubment`, `pubment*`, `quasiquote`, `quasisyntax`, `quasisyntax/loc`, `quote`, `quote-syntax`, `quote-syntax/prune`, `recontract-out`, `recursive-contract`, `relative-in`, `rename`, `rename-in`, `rename-inner`, `rename-out`, `rename-super`, `require`, `send`, `send*`, `send+`, `send-generic`, `send/apply`, `send/keyword-apply`, `set!`, `set!-values`, `set-field!`, `shared`, `stream`, `stream*`, `stream-cons`, `struct`, `struct*`, `struct-copy`, `struct-field-index`, `struct-out`, `struct/c`, `struct/ctc`, `struct/dc`, `submod`, `super`, `super-instantiate`, `super-make-object`, `super-new`, `syntax`, `syntax-case`, `syntax-case*`, `syntax-id-rules`, `syntax-rules`, `syntax/loc`, `tag`, `this`, `this%`, `thunk`, `thunk*`, `time`, `unconstrained-domain->`, `unit`, `unit-from-context`, `unit/c`, `unit/new-import-export`, `unit/s`, `unless`, `unquote`, `unquote-splicing`, `unsyntax`, `unsyntax-splicing`, `values/drop`, `when`, `with-continuation-mark`, `with-contract`, `with-contract-continuation-mark`, `with-handlers`, `with-handlers*`, `with-method`, `with-syntax`, `λ`), Keyword, Pop(1)}, - {Words(``, "(?=[()[\\]{}\",\\'`;\\s])", `*`, `*list/c`, `+`, `-`, `/`, `<`, ``, `>/c`, `>=`, `>=/c`, `abort-current-continuation`, `abs`, `absolute-path?`, `acos`, `add-between`, `add1`, `alarm-evt`, `always-evt`, `and/c`, `andmap`, `angle`, `any/c`, `append`, `append*`, `append-map`, `apply`, `argmax`, `argmin`, `arithmetic-shift`, `arity-at-least`, `arity-at-least-value`, `arity-at-least?`, `arity-checking-wrapper`, `arity-includes?`, `arity=?`, `arrow-contract-info`, `arrow-contract-info-accepts-arglist`, `arrow-contract-info-chaperone-procedure`, `arrow-contract-info-check-first-order`, `arrow-contract-info?`, `asin`, `assf`, `assoc`, `assq`, `assv`, `atan`, `bad-number-of-results`, `banner`, `base->-doms/c`, `base->-rngs/c`, `base->?`, `between/c`, `bitwise-and`, `bitwise-bit-field`, `bitwise-bit-set?`, `bitwise-ior`, `bitwise-not`, `bitwise-xor`, `blame-add-car-context`, `blame-add-cdr-context`, `blame-add-context`, `blame-add-missing-party`, `blame-add-nth-arg-context`, `blame-add-range-context`, `blame-add-unknown-context`, `blame-context`, `blame-contract`, `blame-fmt->-string`, `blame-missing-party?`, `blame-negative`, `blame-original?`, `blame-positive`, `blame-replace-negative`, `blame-source`, `blame-swap`, `blame-swapped?`, `blame-update`, `blame-value`, `blame?`, `boolean=?`, `boolean?`, `bound-identifier=?`, `box`, `box-cas!`, `box-immutable`, `box-immutable/c`, `box/c`, `box?`, `break-enabled`, `break-parameterization?`, `break-thread`, `build-chaperone-contract-property`, `build-compound-type-name`, `build-contract-property`, `build-flat-contract-property`, `build-list`, `build-path`, `build-path/convention-type`, `build-string`, `build-vector`, `byte-pregexp`, `byte-pregexp?`, `byte-ready?`, `byte-regexp`, `byte-regexp?`, `byte?`, `bytes`, `bytes->immutable-bytes`, `bytes->list`, `bytes->path`, `bytes->path-element`, `bytes->string/latin-1`, `bytes->string/locale`, `bytes->string/utf-8`, `bytes-append`, `bytes-append*`, `bytes-close-converter`, `bytes-convert`, `bytes-convert-end`, `bytes-converter?`, `bytes-copy`, `bytes-copy!`, `bytes-environment-variable-name?`, `bytes-fill!`, `bytes-join`, `bytes-length`, `bytes-no-nuls?`, `bytes-open-converter`, `bytes-ref`, `bytes-set!`, `bytes-utf-8-index`, `bytes-utf-8-length`, `bytes-utf-8-ref`, `bytes?`, `bytes?`, `caaaar`, `caaadr`, `caaar`, `caadar`, `caaddr`, `caadr`, `caar`, `cadaar`, `cadadr`, `cadar`, `caddar`, `cadddr`, `caddr`, `cadr`, `call-in-nested-thread`, `call-with-atomic-output-file`, `call-with-break-parameterization`, `call-with-composable-continuation`, `call-with-continuation-barrier`, `call-with-continuation-prompt`, `call-with-current-continuation`, `call-with-default-reading-parameterization`, `call-with-escape-continuation`, `call-with-exception-handler`, `call-with-file-lock/timeout`, `call-with-immediate-continuation-mark`, `call-with-input-bytes`, `call-with-input-file`, `call-with-input-file*`, `call-with-input-string`, `call-with-output-bytes`, `call-with-output-file`, `call-with-output-file*`, `call-with-output-string`, `call-with-parameterization`, `call-with-semaphore`, `call-with-semaphore/enable-break`, `call-with-values`, `call/cc`, `call/ec`, `car`, `cartesian-product`, `cdaaar`, `cdaadr`, `cdaar`, `cdadar`, `cdaddr`, `cdadr`, `cdar`, `cddaar`, `cddadr`, `cddar`, `cdddar`, `cddddr`, `cdddr`, `cddr`, `cdr`, `ceiling`, `channel-get`, `channel-put`, `channel-put-evt`, `channel-put-evt?`, `channel-try-get`, `channel/c`, `channel?`, `chaperone-box`, `chaperone-channel`, `chaperone-continuation-mark-key`, `chaperone-contract-property?`, `chaperone-contract?`, `chaperone-evt`, `chaperone-hash`, `chaperone-hash-set`, `chaperone-of?`, `chaperone-procedure`, `chaperone-procedure*`, `chaperone-prompt-tag`, `chaperone-struct`, `chaperone-struct-type`, `chaperone-vector`, `chaperone?`, `char->integer`, `char-alphabetic?`, `char-blank?`, `char-ci<=?`, `char-ci=?`, `char-ci>?`, `char-downcase`, `char-foldcase`, `char-general-category`, `char-graphic?`, `char-in`, `char-in/c`, `char-iso-control?`, `char-lower-case?`, `char-numeric?`, `char-punctuation?`, `char-ready?`, `char-symbolic?`, `char-title-case?`, `char-titlecase`, `char-upcase`, `char-upper-case?`, `char-utf-8-length`, `char-whitespace?`, `char<=?`, `char=?`, `char>?`, `char?`, `check-duplicate-identifier`, `check-duplicates`, `checked-procedure-check-and-extract`, `choice-evt`, `class->interface`, `class-info`, `class-seal`, `class-unseal`, `class?`, `cleanse-path`, `close-input-port`, `close-output-port`, `coerce-chaperone-contract`, `coerce-chaperone-contracts`, `coerce-contract`, `coerce-contract/f`, `coerce-contracts`, `coerce-flat-contract`, `coerce-flat-contracts`, `collect-garbage`, `collection-file-path`, `collection-path`, `combinations`, `compile`, `compile-allow-set!-undefined`, `compile-context-preservation-enabled`, `compile-enforce-module-constants`, `compile-syntax`, `compiled-expression-recompile`, `compiled-expression?`, `compiled-module-expression?`, `complete-path?`, `complex?`, `compose`, `compose1`, `conjoin`, `conjugate`, `cons`, `cons/c`, `cons?`, `const`, `continuation-mark-key/c`, `continuation-mark-key?`, `continuation-mark-set->context`, `continuation-mark-set->list`, `continuation-mark-set->list*`, `continuation-mark-set-first`, `continuation-mark-set?`, `continuation-marks`, `continuation-prompt-available?`, `continuation-prompt-tag?`, `continuation?`, `contract-continuation-mark-key`, `contract-custom-write-property-proc`, `contract-exercise`, `contract-first-order`, `contract-first-order-passes?`, `contract-late-neg-projection`, `contract-name`, `contract-proc`, `contract-projection`, `contract-property?`, `contract-random-generate`, `contract-random-generate-fail`, `contract-random-generate-fail?`, `contract-random-generate-get-current-environment`, `contract-random-generate-stash`, `contract-random-generate/choose`, `contract-stronger?`, `contract-struct-exercise`, `contract-struct-generate`, `contract-struct-late-neg-projection`, `contract-struct-list-contract?`, `contract-val-first-projection`, `contract?`, `convert-stream`, `copy-directory/files`, `copy-file`, `copy-port`, `cos`, `cosh`, `count`, `current-blame-format`, `current-break-parameterization`, `current-code-inspector`, `current-command-line-arguments`, `current-compile`, `current-compiled-file-roots`, `current-continuation-marks`, `current-contract-region`, `current-custodian`, `current-directory`, `current-directory-for-user`, `current-drive`, `current-environment-variables`, `current-error-port`, `current-eval`, `current-evt-pseudo-random-generator`, `current-force-delete-permissions`, `current-future`, `current-gc-milliseconds`, `current-get-interaction-input-port`, `current-inexact-milliseconds`, `current-input-port`, `current-inspector`, `current-library-collection-links`, `current-library-collection-paths`, `current-load`, `current-load-extension`, `current-load-relative-directory`, `current-load/use-compiled`, `current-locale`, `current-logger`, `current-memory-use`, `current-milliseconds`, `current-module-declare-name`, `current-module-declare-source`, `current-module-name-resolver`, `current-module-path-for-load`, `current-namespace`, `current-output-port`, `current-parameterization`, `current-plumber`, `current-preserved-thread-cell-values`, `current-print`, `current-process-milliseconds`, `current-prompt-read`, `current-pseudo-random-generator`, `current-read-interaction`, `current-reader-guard`, `current-readtable`, `current-seconds`, `current-security-guard`, `current-subprocess-custodian-mode`, `current-thread`, `current-thread-group`, `current-thread-initial-stack-size`, `current-write-relative-directory`, `curry`, `curryr`, `custodian-box-value`, `custodian-box?`, `custodian-limit-memory`, `custodian-managed-list`, `custodian-memory-accounting-available?`, `custodian-require-memory`, `custodian-shutdown-all`, `custodian?`, `custom-print-quotable-accessor`, `custom-print-quotable?`, `custom-write-accessor`, `custom-write-property-proc`, `custom-write?`, `date`, `date*`, `date*-nanosecond`, `date*-time-zone-name`, `date*?`, `date-day`, `date-dst?`, `date-hour`, `date-minute`, `date-month`, `date-second`, `date-time-zone-offset`, `date-week-day`, `date-year`, `date-year-day`, `date?`, `datum->syntax`, `datum-intern-literal`, `default-continuation-prompt-tag`, `degrees->radians`, `delete-directory`, `delete-directory/files`, `delete-file`, `denominator`, `dict->list`, `dict-can-functional-set?`, `dict-can-remove-keys?`, `dict-clear`, `dict-clear!`, `dict-copy`, `dict-count`, `dict-empty?`, `dict-for-each`, `dict-has-key?`, `dict-implements/c`, `dict-implements?`, `dict-iter-contract`, `dict-iterate-first`, `dict-iterate-key`, `dict-iterate-next`, `dict-iterate-value`, `dict-key-contract`, `dict-keys`, `dict-map`, `dict-mutable?`, `dict-ref`, `dict-ref!`, `dict-remove`, `dict-remove!`, `dict-set`, `dict-set!`, `dict-set*`, `dict-set*!`, `dict-update`, `dict-update!`, `dict-value-contract`, `dict-values`, `dict?`, `directory-exists?`, `directory-list`, `disjoin`, `display`, `display-lines`, `display-lines-to-file`, `display-to-file`, `displayln`, `double-flonum?`, `drop`, `drop-common-prefix`, `drop-right`, `dropf`, `dropf-right`, `dump-memory-stats`, `dup-input-port`, `dup-output-port`, `dynamic->*`, `dynamic-get-field`, `dynamic-object/c`, `dynamic-place`, `dynamic-place*`, `dynamic-require`, `dynamic-require-for-syntax`, `dynamic-send`, `dynamic-set-field!`, `dynamic-wind`, `eighth`, `empty`, `empty-sequence`, `empty-stream`, `empty?`, `environment-variables-copy`, `environment-variables-names`, `environment-variables-ref`, `environment-variables-set!`, `environment-variables?`, `eof`, `eof-evt`, `eof-object?`, `ephemeron-value`, `ephemeron?`, `eprintf`, `eq-contract-val`, `eq-contract?`, `eq-hash-code`, `eq?`, `equal-contract-val`, `equal-contract?`, `equal-hash-code`, `equal-secondary-hash-code`, `equal<%>`, `equal?`, `equal?/recur`, `eqv-hash-code`, `eqv?`, `error`, `error-display-handler`, `error-escape-handler`, `error-print-context-length`, `error-print-source-location`, `error-print-width`, `error-value->string-handler`, `eval`, `eval-jit-enabled`, `eval-syntax`, `even?`, `evt/c`, `evt?`, `exact->inexact`, `exact-ceiling`, `exact-floor`, `exact-integer?`, `exact-nonnegative-integer?`, `exact-positive-integer?`, `exact-round`, `exact-truncate`, `exact?`, `executable-yield-handler`, `exit`, `exit-handler`, `exn`, `exn-continuation-marks`, `exn-message`, `exn:break`, `exn:break-continuation`, `exn:break:hang-up`, `exn:break:hang-up?`, `exn:break:terminate`, `exn:break:terminate?`, `exn:break?`, `exn:fail`, `exn:fail:contract`, `exn:fail:contract:arity`, `exn:fail:contract:arity?`, `exn:fail:contract:blame`, `exn:fail:contract:blame-object`, `exn:fail:contract:blame?`, `exn:fail:contract:continuation`, `exn:fail:contract:continuation?`, `exn:fail:contract:divide-by-zero`, `exn:fail:contract:divide-by-zero?`, `exn:fail:contract:non-fixnum-result`, `exn:fail:contract:non-fixnum-result?`, `exn:fail:contract:variable`, `exn:fail:contract:variable-id`, `exn:fail:contract:variable?`, `exn:fail:contract?`, `exn:fail:filesystem`, `exn:fail:filesystem:errno`, `exn:fail:filesystem:errno-errno`, `exn:fail:filesystem:errno?`, `exn:fail:filesystem:exists`, `exn:fail:filesystem:exists?`, `exn:fail:filesystem:missing-module`, `exn:fail:filesystem:missing-module-path`, `exn:fail:filesystem:missing-module?`, `exn:fail:filesystem:version`, `exn:fail:filesystem:version?`, `exn:fail:filesystem?`, `exn:fail:network`, `exn:fail:network:errno`, `exn:fail:network:errno-errno`, `exn:fail:network:errno?`, `exn:fail:network?`, `exn:fail:object`, `exn:fail:object?`, `exn:fail:out-of-memory`, `exn:fail:out-of-memory?`, `exn:fail:read`, `exn:fail:read-srclocs`, `exn:fail:read:eof`, `exn:fail:read:eof?`, `exn:fail:read:non-char`, `exn:fail:read:non-char?`, `exn:fail:read?`, `exn:fail:syntax`, `exn:fail:syntax-exprs`, `exn:fail:syntax:missing-module`, `exn:fail:syntax:missing-module-path`, `exn:fail:syntax:missing-module?`, `exn:fail:syntax:unbound`, `exn:fail:syntax:unbound?`, `exn:fail:syntax?`, `exn:fail:unsupported`, `exn:fail:unsupported?`, `exn:fail:user`, `exn:fail:user?`, `exn:fail?`, `exn:misc:match?`, `exn:missing-module-accessor`, `exn:missing-module?`, `exn:srclocs-accessor`, `exn:srclocs?`, `exn?`, `exp`, `expand`, `expand-once`, `expand-syntax`, `expand-syntax-once`, `expand-syntax-to-top-form`, `expand-to-top-form`, `expand-user-path`, `explode-path`, `expt`, `externalizable<%>`, `failure-result/c`, `false?`, `field-names`, `fifth`, `file->bytes`, `file->bytes-lines`, `file->lines`, `file->list`, `file->string`, `file->value`, `file-exists?`, `file-name-from-path`, `file-or-directory-identity`, `file-or-directory-modify-seconds`, `file-or-directory-permissions`, `file-position`, `file-position*`, `file-size`, `file-stream-buffer-mode`, `file-stream-port?`, `file-truncate`, `filename-extension`, `filesystem-change-evt`, `filesystem-change-evt-cancel`, `filesystem-change-evt?`, `filesystem-root-list`, `filter`, `filter-map`, `filter-not`, `filter-read-input-port`, `find-executable-path`, `find-files`, `find-library-collection-links`, `find-library-collection-paths`, `find-relative-path`, `find-system-path`, `findf`, `first`, `first-or/c`, `fixnum?`, `flat-contract`, `flat-contract-predicate`, `flat-contract-property?`, `flat-contract?`, `flat-named-contract`, `flatten`, `floating-point-bytes->real`, `flonum?`, `floor`, `flush-output`, `fold-files`, `foldl`, `foldr`, `for-each`, `force`, `format`, `fourth`, `fprintf`, `free-identifier=?`, `free-label-identifier=?`, `free-template-identifier=?`, `free-transformer-identifier=?`, `fsemaphore-count`, `fsemaphore-post`, `fsemaphore-try-wait?`, `fsemaphore-wait`, `fsemaphore?`, `future`, `future?`, `futures-enabled?`, `gcd`, `generate-member-key`, `generate-temporaries`, `generic-set?`, `generic?`, `gensym`, `get-output-bytes`, `get-output-string`, `get-preference`, `get/build-late-neg-projection`, `get/build-val-first-projection`, `getenv`, `global-port-print-handler`, `group-by`, `group-execute-bit`, `group-read-bit`, `group-write-bit`, `guard-evt`, `handle-evt`, `handle-evt?`, `has-blame?`, `has-contract?`, `hash`, `hash->list`, `hash-clear`, `hash-clear!`, `hash-copy`, `hash-copy-clear`, `hash-count`, `hash-empty?`, `hash-eq?`, `hash-equal?`, `hash-eqv?`, `hash-for-each`, `hash-has-key?`, `hash-iterate-first`, `hash-iterate-key`, `hash-iterate-key+value`, `hash-iterate-next`, `hash-iterate-pair`, `hash-iterate-value`, `hash-keys`, `hash-map`, `hash-placeholder?`, `hash-ref`, `hash-ref!`, `hash-remove`, `hash-remove!`, `hash-set`, `hash-set!`, `hash-set*`, `hash-set*!`, `hash-update`, `hash-update!`, `hash-values`, `hash-weak?`, `hash/c`, `hash?`, `hasheq`, `hasheqv`, `identifier-binding`, `identifier-binding-symbol`, `identifier-label-binding`, `identifier-prune-lexical-context`, `identifier-prune-to-source-module`, `identifier-remove-from-definition-context`, `identifier-template-binding`, `identifier-transformer-binding`, `identifier?`, `identity`, `if/c`, `imag-part`, `immutable?`, `impersonate-box`, `impersonate-channel`, `impersonate-continuation-mark-key`, `impersonate-hash`, `impersonate-hash-set`, `impersonate-procedure`, `impersonate-procedure*`, `impersonate-prompt-tag`, `impersonate-struct`, `impersonate-vector`, `impersonator-contract?`, `impersonator-ephemeron`, `impersonator-of?`, `impersonator-prop:application-mark`, `impersonator-prop:blame`, `impersonator-prop:contracted`, `impersonator-property-accessor-procedure?`, `impersonator-property?`, `impersonator?`, `implementation?`, `implementation?/c`, `in-bytes`, `in-bytes-lines`, `in-combinations`, `in-cycle`, `in-dict`, `in-dict-keys`, `in-dict-pairs`, `in-dict-values`, `in-directory`, `in-hash`, `in-hash-keys`, `in-hash-pairs`, `in-hash-values`, `in-immutable-hash`, `in-immutable-hash-keys`, `in-immutable-hash-pairs`, `in-immutable-hash-values`, `in-immutable-set`, `in-indexed`, `in-input-port-bytes`, `in-input-port-chars`, `in-lines`, `in-list`, `in-mlist`, `in-mutable-hash`, `in-mutable-hash-keys`, `in-mutable-hash-pairs`, `in-mutable-hash-values`, `in-mutable-set`, `in-naturals`, `in-parallel`, `in-permutations`, `in-port`, `in-producer`, `in-range`, `in-sequences`, `in-set`, `in-slice`, `in-stream`, `in-string`, `in-syntax`, `in-value`, `in-values*-sequence`, `in-values-sequence`, `in-vector`, `in-weak-hash`, `in-weak-hash-keys`, `in-weak-hash-pairs`, `in-weak-hash-values`, `in-weak-set`, `inexact->exact`, `inexact-real?`, `inexact?`, `infinite?`, `input-port-append`, `input-port?`, `inspector?`, `instanceof/c`, `integer->char`, `integer->integer-bytes`, `integer-bytes->integer`, `integer-in`, `integer-length`, `integer-sqrt`, `integer-sqrt/remainder`, `integer?`, `interface->method-names`, `interface-extension?`, `interface?`, `internal-definition-context-binding-identifiers`, `internal-definition-context-introduce`, `internal-definition-context-seal`, `internal-definition-context?`, `is-a?`, `is-a?/c`, `keyword->string`, `keyword-apply`, `keywordbytes`, `list->mutable-set`, `list->mutable-seteq`, `list->mutable-seteqv`, `list->set`, `list->seteq`, `list->seteqv`, `list->string`, `list->vector`, `list->weak-set`, `list->weak-seteq`, `list->weak-seteqv`, `list-contract?`, `list-prefix?`, `list-ref`, `list-set`, `list-tail`, `list-update`, `list/c`, `list?`, `listen-port-number?`, `listof`, `load`, `load-extension`, `load-on-demand-enabled`, `load-relative`, `load-relative-extension`, `load/cd`, `load/use-compiled`, `local-expand`, `local-expand/capture-lifts`, `local-transformer-expand`, `local-transformer-expand/capture-lifts`, `locale-string-encoding`, `log`, `log-all-levels`, `log-level-evt`, `log-level?`, `log-max-level`, `log-message`, `log-receiver?`, `logger-name`, `logger?`, `magnitude`, `make-arity-at-least`, `make-base-empty-namespace`, `make-base-namespace`, `make-bytes`, `make-channel`, `make-chaperone-contract`, `make-continuation-mark-key`, `make-continuation-prompt-tag`, `make-contract`, `make-custodian`, `make-custodian-box`, `make-custom-hash`, `make-custom-hash-types`, `make-custom-set`, `make-custom-set-types`, `make-date`, `make-date*`, `make-derived-parameter`, `make-directory`, `make-directory*`, `make-do-sequence`, `make-empty-namespace`, `make-environment-variables`, `make-ephemeron`, `make-exn`, `make-exn:break`, `make-exn:break:hang-up`, `make-exn:break:terminate`, `make-exn:fail`, `make-exn:fail:contract`, `make-exn:fail:contract:arity`, `make-exn:fail:contract:blame`, `make-exn:fail:contract:continuation`, `make-exn:fail:contract:divide-by-zero`, `make-exn:fail:contract:non-fixnum-result`, `make-exn:fail:contract:variable`, `make-exn:fail:filesystem`, `make-exn:fail:filesystem:errno`, `make-exn:fail:filesystem:exists`, `make-exn:fail:filesystem:missing-module`, `make-exn:fail:filesystem:version`, `make-exn:fail:network`, `make-exn:fail:network:errno`, `make-exn:fail:object`, `make-exn:fail:out-of-memory`, `make-exn:fail:read`, `make-exn:fail:read:eof`, `make-exn:fail:read:non-char`, `make-exn:fail:syntax`, `make-exn:fail:syntax:missing-module`, `make-exn:fail:syntax:unbound`, `make-exn:fail:unsupported`, `make-exn:fail:user`, `make-file-or-directory-link`, `make-flat-contract`, `make-fsemaphore`, `make-generic`, `make-handle-get-preference-locked`, `make-hash`, `make-hash-placeholder`, `make-hasheq`, `make-hasheq-placeholder`, `make-hasheqv`, `make-hasheqv-placeholder`, `make-immutable-custom-hash`, `make-immutable-hash`, `make-immutable-hasheq`, `make-immutable-hasheqv`, `make-impersonator-property`, `make-input-port`, `make-input-port/read-to-peek`, `make-inspector`, `make-keyword-procedure`, `make-known-char-range-list`, `make-limited-input-port`, `make-list`, `make-lock-file-name`, `make-log-receiver`, `make-logger`, `make-mixin-contract`, `make-mutable-custom-set`, `make-none/c`, `make-object`, `make-output-port`, `make-parameter`, `make-parent-directory*`, `make-phantom-bytes`, `make-pipe`, `make-pipe-with-specials`, `make-placeholder`, `make-plumber`, `make-polar`, `make-prefab-struct`, `make-primitive-class`, `make-proj-contract`, `make-pseudo-random-generator`, `make-reader-graph`, `make-readtable`, `make-rectangular`, `make-rename-transformer`, `make-resolved-module-path`, `make-security-guard`, `make-semaphore`, `make-set!-transformer`, `make-shared-bytes`, `make-sibling-inspector`, `make-special-comment`, `make-srcloc`, `make-string`, `make-struct-field-accessor`, `make-struct-field-mutator`, `make-struct-type`, `make-struct-type-property`, `make-syntax-delta-introducer`, `make-syntax-introducer`, `make-temporary-file`, `make-tentative-pretty-print-output-port`, `make-thread-cell`, `make-thread-group`, `make-vector`, `make-weak-box`, `make-weak-custom-hash`, `make-weak-custom-set`, `make-weak-hash`, `make-weak-hasheq`, `make-weak-hasheqv`, `make-will-executor`, `map`, `match-equality-test`, `matches-arity-exactly?`, `max`, `mcar`, `mcdr`, `mcons`, `member`, `member-name-key-hash-code`, `member-name-key=?`, `member-name-key?`, `memf`, `memq`, `memv`, `merge-input`, `method-in-interface?`, `min`, `mixin-contract`, `module->exports`, `module->imports`, `module->language-info`, `module->namespace`, `module-compiled-cross-phase-persistent?`, `module-compiled-exports`, `module-compiled-imports`, `module-compiled-language-info`, `module-compiled-name`, `module-compiled-submodules`, `module-declared?`, `module-path-index-join`, `module-path-index-resolve`, `module-path-index-split`, `module-path-index-submodule`, `module-path-index?`, `module-path?`, `module-predefined?`, `module-provide-protected?`, `modulo`, `mpair?`, `mutable-set`, `mutable-seteq`, `mutable-seteqv`, `n->th`, `nack-guard-evt`, `namespace-anchor->empty-namespace`, `namespace-anchor->namespace`, `namespace-anchor?`, `namespace-attach-module`, `namespace-attach-module-declaration`, `namespace-base-phase`, `namespace-mapped-symbols`, `namespace-module-identifier`, `namespace-module-registry`, `namespace-require`, `namespace-require/constant`, `namespace-require/copy`, `namespace-require/expansion-time`, `namespace-set-variable-value!`, `namespace-symbol->identifier`, `namespace-syntax-introduce`, `namespace-undefine-variable!`, `namespace-unprotect-module`, `namespace-variable-value`, `namespace?`, `nan?`, `natural-number/c`, `negate`, `negative?`, `never-evt`, `new-∀/c`, `new-∃/c`, `newline`, `ninth`, `non-empty-listof`, `non-empty-string?`, `none/c`, `normal-case-path`, `normalize-arity`, `normalize-path`, `normalized-arity?`, `not`, `not/c`, `null`, `null?`, `number->string`, `number?`, `numerator`, `object%`, `object->vector`, `object-info`, `object-interface`, `object-method-arity-includes?`, `object-name`, `object-or-false=?`, `object=?`, `object?`, `odd?`, `one-of/c`, `open-input-bytes`, `open-input-file`, `open-input-output-file`, `open-input-string`, `open-output-bytes`, `open-output-file`, `open-output-nowhere`, `open-output-string`, `or/c`, `order-of-magnitude`, `ormap`, `other-execute-bit`, `other-read-bit`, `other-write-bit`, `output-port?`, `pair?`, `parameter-procedure=?`, `parameter/c`, `parameter?`, `parameterization?`, `parse-command-line`, `partition`, `path->bytes`, `path->complete-path`, `path->directory-path`, `path->string`, `path-add-suffix`, `path-convention-type`, `path-element->bytes`, `path-element->string`, `path-element?`, `path-for-some-system?`, `path-list-string->path-list`, `path-only`, `path-replace-suffix`, `path-string?`, `pathbytes`, `port->bytes-lines`, `port->lines`, `port->list`, `port->string`, `port-closed-evt`, `port-closed?`, `port-commit-peeked`, `port-count-lines!`, `port-count-lines-enabled`, `port-counts-lines?`, `port-display-handler`, `port-file-identity`, `port-file-unlock`, `port-next-location`, `port-number?`, `port-print-handler`, `port-progress-evt`, `port-provides-progress-evts?`, `port-read-handler`, `port-try-file-lock?`, `port-write-handler`, `port-writes-atomic?`, `port-writes-special?`, `port?`, `positive?`, `predicate/c`, `prefab-key->struct-type`, `prefab-key?`, `prefab-struct-key`, `preferences-lock-file-mode`, `pregexp`, `pregexp?`, `pretty-display`, `pretty-format`, `pretty-print`, `pretty-print-.-symbol-without-bars`, `pretty-print-abbreviate-read-macros`, `pretty-print-columns`, `pretty-print-current-style-table`, `pretty-print-depth`, `pretty-print-exact-as-decimal`, `pretty-print-extend-style-table`, `pretty-print-handler`, `pretty-print-newline`, `pretty-print-post-print-hook`, `pretty-print-pre-print-hook`, `pretty-print-print-hook`, `pretty-print-print-line`, `pretty-print-remap-stylable`, `pretty-print-show-inexactness`, `pretty-print-size-hook`, `pretty-print-style-table?`, `pretty-printing`, `pretty-write`, `primitive-closure?`, `primitive-result-arity`, `primitive?`, `print`, `print-as-expression`, `print-boolean-long-form`, `print-box`, `print-graph`, `print-hash-table`, `print-mpair-curly-braces`, `print-pair-curly-braces`, `print-reader-abbreviations`, `print-struct`, `print-syntax-width`, `print-unreadable`, `print-vector-length`, `printable/c`, `printable<%>`, `printf`, `println`, `procedure->method`, `procedure-arity`, `procedure-arity-includes/c`, `procedure-arity-includes?`, `procedure-arity?`, `procedure-closure-contents-eq?`, `procedure-extract-target`, `procedure-keywords`, `procedure-reduce-arity`, `procedure-reduce-keyword-arity`, `procedure-rename`, `procedure-result-arity`, `procedure-specialize`, `procedure-struct-type?`, `procedure?`, `process`, `process*`, `process*/ports`, `process/ports`, `processor-count`, `progress-evt?`, `promise-forced?`, `promise-running?`, `promise/c`, `promise/name?`, `promise?`, `prop:arity-string`, `prop:arrow-contract`, `prop:arrow-contract-get-info`, `prop:arrow-contract?`, `prop:blame`, `prop:chaperone-contract`, `prop:checked-procedure`, `prop:contract`, `prop:contracted`, `prop:custom-print-quotable`, `prop:custom-write`, `prop:dict`, `prop:dict/contract`, `prop:equal+hash`, `prop:evt`, `prop:exn:missing-module`, `prop:exn:srclocs`, `prop:expansion-contexts`, `prop:flat-contract`, `prop:impersonator-of`, `prop:input-port`, `prop:liberal-define-context`, `prop:object-name`, `prop:opt-chaperone-contract`, `prop:opt-chaperone-contract-get-test`, `prop:opt-chaperone-contract?`, `prop:orc-contract`, `prop:orc-contract-get-subcontracts`, `prop:orc-contract?`, `prop:output-port`, `prop:place-location`, `prop:procedure`, `prop:recursive-contract`, `prop:recursive-contract-unroll`, `prop:recursive-contract?`, `prop:rename-transformer`, `prop:sequence`, `prop:set!-transformer`, `prop:stream`, `proper-subset?`, `pseudo-random-generator->vector`, `pseudo-random-generator-vector?`, `pseudo-random-generator?`, `put-preferences`, `putenv`, `quotient`, `quotient/remainder`, `radians->degrees`, `raise`, `raise-argument-error`, `raise-arguments-error`, `raise-arity-error`, `raise-blame-error`, `raise-contract-error`, `raise-mismatch-error`, `raise-not-cons-blame-error`, `raise-range-error`, `raise-result-error`, `raise-syntax-error`, `raise-type-error`, `raise-user-error`, `random`, `random-seed`, `range`, `rational?`, `rationalize`, `read`, `read-accept-bar-quote`, `read-accept-box`, `read-accept-compiled`, `read-accept-dot`, `read-accept-graph`, `read-accept-infix-dot`, `read-accept-lang`, `read-accept-quasiquote`, `read-accept-reader`, `read-byte`, `read-byte-or-special`, `read-bytes`, `read-bytes!`, `read-bytes!-evt`, `read-bytes-avail!`, `read-bytes-avail!*`, `read-bytes-avail!-evt`, `read-bytes-avail!/enable-break`, `read-bytes-evt`, `read-bytes-line`, `read-bytes-line-evt`, `read-case-sensitive`, `read-cdot`, `read-char`, `read-char-or-special`, `read-curly-brace-as-paren`, `read-curly-brace-with-tag`, `read-decimal-as-inexact`, `read-eval-print-loop`, `read-language`, `read-line`, `read-line-evt`, `read-on-demand-source`, `read-square-bracket-as-paren`, `read-square-bracket-with-tag`, `read-string`, `read-string!`, `read-string!-evt`, `read-string-evt`, `read-syntax`, `read-syntax/recursive`, `read/recursive`, `readtable-mapping`, `readtable?`, `real->decimal-string`, `real->double-flonum`, `real->floating-point-bytes`, `real->single-flonum`, `real-in`, `real-part`, `real?`, `reencode-input-port`, `reencode-output-port`, `regexp`, `regexp-match`, `regexp-match*`, `regexp-match-evt`, `regexp-match-exact?`, `regexp-match-peek`, `regexp-match-peek-immediate`, `regexp-match-peek-positions`, `regexp-match-peek-positions*`, `regexp-match-peek-positions-immediate`, `regexp-match-peek-positions-immediate/end`, `regexp-match-peek-positions/end`, `regexp-match-positions`, `regexp-match-positions*`, `regexp-match-positions/end`, `regexp-match/end`, `regexp-match?`, `regexp-max-lookbehind`, `regexp-quote`, `regexp-replace`, `regexp-replace*`, `regexp-replace-quote`, `regexp-replaces`, `regexp-split`, `regexp-try-match`, `regexp?`, `relative-path?`, `relocate-input-port`, `relocate-output-port`, `remainder`, `remf`, `remf*`, `remove`, `remove*`, `remove-duplicates`, `remq`, `remq*`, `remv`, `remv*`, `rename-contract`, `rename-file-or-directory`, `rename-transformer-target`, `rename-transformer?`, `replace-evt`, `reroot-path`, `resolve-path`, `resolved-module-path-name`, `resolved-module-path?`, `rest`, `reverse`, `round`, `second`, `seconds->date`, `security-guard?`, `semaphore-peek-evt`, `semaphore-peek-evt?`, `semaphore-post`, `semaphore-try-wait?`, `semaphore-wait`, `semaphore-wait/enable-break`, `semaphore?`, `sequence->list`, `sequence->stream`, `sequence-add-between`, `sequence-andmap`, `sequence-append`, `sequence-count`, `sequence-filter`, `sequence-fold`, `sequence-for-each`, `sequence-generate`, `sequence-generate*`, `sequence-length`, `sequence-map`, `sequence-ormap`, `sequence-ref`, `sequence-tail`, `sequence/c`, `sequence?`, `set`, `set!-transformer-procedure`, `set!-transformer?`, `set->list`, `set->stream`, `set-add`, `set-add!`, `set-box!`, `set-clear`, `set-clear!`, `set-copy`, `set-copy-clear`, `set-count`, `set-empty?`, `set-eq?`, `set-equal?`, `set-eqv?`, `set-first`, `set-for-each`, `set-implements/c`, `set-implements?`, `set-intersect`, `set-intersect!`, `set-map`, `set-mcar!`, `set-mcdr!`, `set-member?`, `set-mutable?`, `set-phantom-bytes!`, `set-port-next-location!`, `set-remove`, `set-remove!`, `set-rest`, `set-some-basic-contracts!`, `set-subtract`, `set-subtract!`, `set-symmetric-difference`, `set-symmetric-difference!`, `set-union`, `set-union!`, `set-weak?`, `set/c`, `set=?`, `set?`, `seteq`, `seteqv`, `seventh`, `sgn`, `shared-bytes`, `shell-execute`, `shrink-path-wrt`, `shuffle`, `simple-form-path`, `simplify-path`, `sin`, `single-flonum?`, `sinh`, `sixth`, `skip-projection-wrapper?`, `sleep`, `some-system-path->string`, `sort`, `special-comment-value`, `special-comment?`, `special-filter-input-port`, `split-at`, `split-at-right`, `split-common-prefix`, `split-path`, `splitf-at`, `splitf-at-right`, `sqr`, `sqrt`, `srcloc`, `srcloc->string`, `srcloc-column`, `srcloc-line`, `srcloc-position`, `srcloc-source`, `srcloc-span`, `srcloc?`, `stop-after`, `stop-before`, `stream->list`, `stream-add-between`, `stream-andmap`, `stream-append`, `stream-count`, `stream-empty?`, `stream-filter`, `stream-first`, `stream-fold`, `stream-for-each`, `stream-length`, `stream-map`, `stream-ormap`, `stream-ref`, `stream-rest`, `stream-tail`, `stream/c`, `stream?`, `string`, `string->bytes/latin-1`, `string->bytes/locale`, `string->bytes/utf-8`, `string->immutable-string`, `string->keyword`, `string->list`, `string->number`, `string->path`, `string->path-element`, `string->some-system-path`, `string->symbol`, `string->uninterned-symbol`, `string->unreadable-symbol`, `string-append`, `string-append*`, `string-ci<=?`, `string-ci=?`, `string-ci>?`, `string-contains?`, `string-copy`, `string-copy!`, `string-downcase`, `string-environment-variable-name?`, `string-fill!`, `string-foldcase`, `string-join`, `string-len/c`, `string-length`, `string-locale-ci?`, `string-locale-downcase`, `string-locale-upcase`, `string-locale?`, `string-no-nuls?`, `string-normalize-nfc`, `string-normalize-nfd`, `string-normalize-nfkc`, `string-normalize-nfkd`, `string-normalize-spaces`, `string-port?`, `string-prefix?`, `string-ref`, `string-replace`, `string-set!`, `string-split`, `string-suffix?`, `string-titlecase`, `string-trim`, `string-upcase`, `string-utf-8-length`, `string<=?`, `string=?`, `string>?`, `string?`, `struct->vector`, `struct-accessor-procedure?`, `struct-constructor-procedure?`, `struct-info`, `struct-mutator-procedure?`, `struct-predicate-procedure?`, `struct-type-info`, `struct-type-make-constructor`, `struct-type-make-predicate`, `struct-type-property-accessor-procedure?`, `struct-type-property/c`, `struct-type-property?`, `struct-type?`, `struct:arity-at-least`, `struct:arrow-contract-info`, `struct:date`, `struct:date*`, `struct:exn`, `struct:exn:break`, `struct:exn:break:hang-up`, `struct:exn:break:terminate`, `struct:exn:fail`, `struct:exn:fail:contract`, `struct:exn:fail:contract:arity`, `struct:exn:fail:contract:blame`, `struct:exn:fail:contract:continuation`, `struct:exn:fail:contract:divide-by-zero`, `struct:exn:fail:contract:non-fixnum-result`, `struct:exn:fail:contract:variable`, `struct:exn:fail:filesystem`, `struct:exn:fail:filesystem:errno`, `struct:exn:fail:filesystem:exists`, `struct:exn:fail:filesystem:missing-module`, `struct:exn:fail:filesystem:version`, `struct:exn:fail:network`, `struct:exn:fail:network:errno`, `struct:exn:fail:object`, `struct:exn:fail:out-of-memory`, `struct:exn:fail:read`, `struct:exn:fail:read:eof`, `struct:exn:fail:read:non-char`, `struct:exn:fail:syntax`, `struct:exn:fail:syntax:missing-module`, `struct:exn:fail:syntax:unbound`, `struct:exn:fail:unsupported`, `struct:exn:fail:user`, `struct:srcloc`, `struct:wrapped-extra-arg-arrow`, `struct?`, `sub1`, `subbytes`, `subclass?`, `subclass?/c`, `subprocess`, `subprocess-group-enabled`, `subprocess-kill`, `subprocess-pid`, `subprocess-status`, `subprocess-wait`, `subprocess?`, `subset?`, `substring`, `suggest/c`, `symbol->string`, `symbol-interned?`, `symbol-unreadable?`, `symboldatum`, `syntax->list`, `syntax-arm`, `syntax-column`, `syntax-debug-info`, `syntax-disarm`, `syntax-e`, `syntax-line`, `syntax-local-bind-syntaxes`, `syntax-local-certifier`, `syntax-local-context`, `syntax-local-expand-expression`, `syntax-local-get-shadower`, `syntax-local-identifier-as-binding`, `syntax-local-introduce`, `syntax-local-lift-context`, `syntax-local-lift-expression`, `syntax-local-lift-module`, `syntax-local-lift-module-end-declaration`, `syntax-local-lift-provide`, `syntax-local-lift-require`, `syntax-local-lift-values-expression`, `syntax-local-make-definition-context`, `syntax-local-make-delta-introducer`, `syntax-local-module-defined-identifiers`, `syntax-local-module-exports`, `syntax-local-module-required-identifiers`, `syntax-local-name`, `syntax-local-phase-level`, `syntax-local-submodules`, `syntax-local-transforming-module-provides?`, `syntax-local-value`, `syntax-local-value/immediate`, `syntax-original?`, `syntax-position`, `syntax-property`, `syntax-property-preserved?`, `syntax-property-symbol-keys`, `syntax-protect`, `syntax-rearm`, `syntax-recertify`, `syntax-shift-phase-level`, `syntax-source`, `syntax-source-module`, `syntax-span`, `syntax-taint`, `syntax-tainted?`, `syntax-track-origin`, `syntax-transforming-module-expression?`, `syntax-transforming-with-lifts?`, `syntax-transforming?`, `syntax/c`, `syntax?`, `system`, `system*`, `system*/exit-code`, `system-big-endian?`, `system-idle-evt`, `system-language+country`, `system-library-subpath`, `system-path-convention-type`, `system-type`, `system/exit-code`, `tail-marks-match?`, `take`, `take-common-prefix`, `take-right`, `takef`, `takef-right`, `tan`, `tanh`, `tcp-abandon-port`, `tcp-accept`, `tcp-accept-evt`, `tcp-accept-ready?`, `tcp-accept/enable-break`, `tcp-addresses`, `tcp-close`, `tcp-connect`, `tcp-connect/enable-break`, `tcp-listen`, `tcp-listener?`, `tcp-port?`, `tentative-pretty-print-port-cancel`, `tentative-pretty-print-port-transfer`, `tenth`, `terminal-port?`, `the-unsupplied-arg`, `third`, `thread`, `thread-cell-ref`, `thread-cell-set!`, `thread-cell-values?`, `thread-cell?`, `thread-dead-evt`, `thread-dead?`, `thread-group?`, `thread-receive`, `thread-receive-evt`, `thread-resume`, `thread-resume-evt`, `thread-rewind-receive`, `thread-running?`, `thread-send`, `thread-suspend`, `thread-suspend-evt`, `thread-try-receive`, `thread-wait`, `thread/suspend-to-kill`, `thread?`, `time-apply`, `touch`, `transplant-input-port`, `transplant-output-port`, `true`, `truncate`, `udp-addresses`, `udp-bind!`, `udp-bound?`, `udp-close`, `udp-connect!`, `udp-connected?`, `udp-multicast-interface`, `udp-multicast-join-group!`, `udp-multicast-leave-group!`, `udp-multicast-loopback?`, `udp-multicast-set-interface!`, `udp-multicast-set-loopback!`, `udp-multicast-set-ttl!`, `udp-multicast-ttl`, `udp-open-socket`, `udp-receive!`, `udp-receive!*`, `udp-receive!-evt`, `udp-receive!/enable-break`, `udp-receive-ready-evt`, `udp-send`, `udp-send*`, `udp-send-evt`, `udp-send-ready-evt`, `udp-send-to`, `udp-send-to*`, `udp-send-to-evt`, `udp-send-to/enable-break`, `udp-send/enable-break`, `udp?`, `unbox`, `uncaught-exception-handler`, `unit?`, `unspecified-dom`, `unsupplied-arg?`, `use-collection-link-paths`, `use-compiled-file-paths`, `use-user-specific-search-paths`, `user-execute-bit`, `user-read-bit`, `user-write-bit`, `value-blame`, `value-contract`, `values`, `variable-reference->empty-namespace`, `variable-reference->module-base-phase`, `variable-reference->module-declaration-inspector`, `variable-reference->module-path-index`, `variable-reference->module-source`, `variable-reference->namespace`, `variable-reference->phase`, `variable-reference->resolved-module-path`, `variable-reference-constant?`, `variable-reference?`, `vector`, `vector->immutable-vector`, `vector->list`, `vector->pseudo-random-generator`, `vector->pseudo-random-generator!`, `vector->values`, `vector-append`, `vector-argmax`, `vector-argmin`, `vector-copy`, `vector-copy!`, `vector-count`, `vector-drop`, `vector-drop-right`, `vector-fill!`, `vector-filter`, `vector-filter-not`, `vector-immutable`, `vector-immutable/c`, `vector-immutableof`, `vector-length`, `vector-map`, `vector-map!`, `vector-member`, `vector-memq`, `vector-memv`, `vector-ref`, `vector-set!`, `vector-set*!`, `vector-set-performance-stats!`, `vector-split-at`, `vector-split-at-right`, `vector-take`, `vector-take-right`, `vector/c`, `vector?`, `vectorof`, `version`, `void`, `void?`, `weak-box-value`, `weak-box?`, `weak-set`, `weak-seteq`, `weak-seteqv`, `will-execute`, `will-executor?`, `will-register`, `will-try-execute`, `with-input-from-bytes`, `with-input-from-file`, `with-input-from-string`, `with-output-to-bytes`, `with-output-to-file`, `with-output-to-string`, `would-be-future`, `wrap-evt`, `wrapped-extra-arg-arrow`, `wrapped-extra-arg-arrow-extra-neg-party-argument`, `wrapped-extra-arg-arrow-real-func`, `wrapped-extra-arg-arrow?`, `writable<%>`, `write`, `write-byte`, `write-bytes`, `write-bytes-avail`, `write-bytes-avail*`, `write-bytes-avail-evt`, `write-bytes-avail/enable-break`, `write-char`, `write-special`, `write-special-avail*`, `write-special-evt`, `write-string`, `write-to-file`, `writeln`, `xor`, `zero?`, `~.a`, `~.s`, `~.v`, `~a`, `~e`, `~r`, `~s`, `~v`), NameBuiltin, Pop(1)}, - {"(?:\\|[^|]*\\||\\\\[\\w\\W]|[^|\\\\()[\\]{}\",\\'`;\\s]+)+", Name, Pop(1)}, - Include("datum*"), - }, - "unquoted-list": { - Include("list"), - {`(?!\Z)`, Text, Push("unquoted-datum")}, - }, - "quasiquoted-datum": { - Include("datum"), - {`,@?`, Operator, Push("#pop", "unquoted-datum")}, - {"unquote(-splicing)?(?=[()[\\]{}\",\\'`;\\s])", Keyword, Push("#pop", "unquoted-datum")}, - {`[([{]`, Punctuation, Push("#pop", "quasiquoted-list")}, - Include("datum*"), - }, - "quasiquoted-list": { - Include("list"), - {`(?!\Z)`, Text, Push("quasiquoted-datum")}, - }, - "quoted-datum": { - Include("datum"), - {`[([{]`, Punctuation, Push("#pop", "quoted-list")}, - Include("datum*"), - }, - "quoted-list": { - Include("list"), - {`(?!\Z)`, Text, Push("quoted-datum")}, - }, - "block-comment": { - {`#\|`, CommentMultiline, Push()}, - {`\|#`, CommentMultiline, Pop(1)}, - {`[^#|]+|.`, CommentMultiline, nil}, - }, - "string": { - {`"`, LiteralStringDouble, Pop(1)}, - {`(?s)\\([0-7]{1,3}|x[\da-fA-F]{1,2}|u[\da-fA-F]{1,4}|U[\da-fA-F]{1,8}|.)`, LiteralStringEscape, nil}, - {`[^\\"]+`, LiteralStringDouble, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/r/ragel.go b/vendor/github.com/alecthomas/chroma/lexers/r/ragel.go deleted file mode 100644 index 3da0ea7..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/r/ragel.go +++ /dev/null @@ -1,76 +0,0 @@ -package r - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Ragel lexer. -var Ragel = internal.Register(MustNewLexer( - &Config{ - Name: "Ragel", - Aliases: []string{"ragel"}, - Filenames: []string{}, - MimeTypes: []string{}, - }, - Rules{ - "whitespace": { - {`\s+`, TextWhitespace, nil}, - }, - "comments": { - {`\#.*$`, Comment, nil}, - }, - "keywords": { - {`(access|action|alphtype)\b`, Keyword, nil}, - {`(getkey|write|machine|include)\b`, Keyword, nil}, - {`(any|ascii|extend|alpha|digit|alnum|lower|upper)\b`, Keyword, nil}, - {`(xdigit|cntrl|graph|print|punct|space|zlen|empty)\b`, Keyword, nil}, - }, - "numbers": { - {`0x[0-9A-Fa-f]+`, LiteralNumberHex, nil}, - {`[+-]?[0-9]+`, LiteralNumberInteger, nil}, - }, - "literals": { - {`"(\\\\|\\"|[^"])*"`, LiteralString, nil}, - {`'(\\\\|\\'|[^'])*'`, LiteralString, nil}, - {`\[(\\\\|\\\]|[^\]])*\]`, LiteralString, nil}, - {`/(?!\*)(\\\\|\\/|[^/])*/`, LiteralStringRegex, nil}, - }, - "identifiers": { - {`[a-zA-Z_]\w*`, NameVariable, nil}, - }, - "operators": { - {`,`, Operator, nil}, - {`\||&|--?`, Operator, nil}, - {`\.|<:|:>>?`, Operator, nil}, - {`:`, Operator, nil}, - {`->`, Operator, nil}, - {`(>|\$|%|<|@|<>)(/|eof\b)`, Operator, nil}, - {`(>|\$|%|<|@|<>)(!|err\b)`, Operator, nil}, - {`(>|\$|%|<|@|<>)(\^|lerr\b)`, Operator, nil}, - {`(>|\$|%|<|@|<>)(~|to\b)`, Operator, nil}, - {`(>|\$|%|<|@|<>)(\*|from\b)`, Operator, nil}, - {`>|@|\$|%`, Operator, nil}, - {`\*|\?|\+|\{[0-9]*,[0-9]*\}`, Operator, nil}, - {`!|\^`, Operator, nil}, - {`\(|\)`, Operator, nil}, - }, - "root": { - Include("literals"), - Include("whitespace"), - Include("comments"), - Include("keywords"), - Include("numbers"), - Include("identifiers"), - Include("operators"), - {`\{`, Punctuation, Push("host")}, - {`=`, Operator, nil}, - {`;`, Punctuation, nil}, - }, - "host": { - {`([^{}\'"/#]+|[^\\]\\[{}]|"(\\\\|\\"|[^"])*"|'(\\\\|\\'|[^'])*'|//.*$\n?|/\*(.|\n)*?\*/|\#.*$\n?|/(?!\*)(\\\\|\\/|[^/])*/|/)+`, Other, nil}, - {`\{`, Punctuation, Push()}, - {`\}`, Punctuation, Pop(1)}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/r/regedit.go b/vendor/github.com/alecthomas/chroma/lexers/r/regedit.go deleted file mode 100644 index 7ee9cb5..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/r/regedit.go +++ /dev/null @@ -1,32 +0,0 @@ -package r - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Reg lexer. -var Reg = internal.Register(MustNewLexer( - &Config{ - Name: "reg", - Aliases: []string{"registry"}, - Filenames: []string{"*.reg"}, - MimeTypes: []string{"text/x-windows-registry"}, - }, - Rules{ - "root": { - {`Windows Registry Editor.*`, Text, nil}, - {`\s+`, Text, nil}, - {`[;#].*`, CommentSingle, nil}, - {`(\[)(-?)(HKEY_[A-Z_]+)(.*?\])$`, ByGroups(Keyword, Operator, NameBuiltin, Keyword), nil}, - {`("(?:\\"|\\\\|[^"])+")([ \t]*)(=)([ \t]*)`, ByGroups(NameAttribute, Text, Operator, Text), Push("value")}, - {`(.*?)([ \t]*)(=)([ \t]*)`, ByGroups(NameAttribute, Text, Operator, Text), Push("value")}, - }, - "value": { - {`-`, Operator, Pop(1)}, - {`(dword|hex(?:\([0-9a-fA-F]\))?)(:)([0-9a-fA-F,]+)`, ByGroups(NameVariable, Punctuation, LiteralNumber), Pop(1)}, - {`.+`, LiteralString, Pop(1)}, - Default(Pop(1)), - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/r/rexx.go b/vendor/github.com/alecthomas/chroma/lexers/r/rexx.go deleted file mode 100644 index 1f5550a..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/r/rexx.go +++ /dev/null @@ -1,59 +0,0 @@ -package r - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Rexx lexer. -var Rexx = internal.Register(MustNewLexer( - &Config{ - Name: "Rexx", - Aliases: []string{"rexx", "arexx"}, - Filenames: []string{"*.rexx", "*.rex", "*.rx", "*.arexx"}, - MimeTypes: []string{"text/x-rexx"}, - NotMultiline: true, - CaseInsensitive: true, - }, - Rules{ - "root": { - {`\s`, TextWhitespace, nil}, - {`/\*`, CommentMultiline, Push("comment")}, - {`"`, LiteralString, Push("string_double")}, - {`'`, LiteralString, Push("string_single")}, - {`[0-9]+(\.[0-9]+)?(e[+-]?[0-9])?`, LiteralNumber, nil}, - {`([a-z_]\w*)(\s*)(:)(\s*)(procedure)\b`, ByGroups(NameFunction, TextWhitespace, Operator, TextWhitespace, KeywordDeclaration), nil}, - {`([a-z_]\w*)(\s*)(:)`, ByGroups(NameLabel, TextWhitespace, Operator), nil}, - Include("function"), - Include("keyword"), - Include("operator"), - {`[a-z_]\w*`, Text, nil}, - }, - "function": { - {Words(``, `(\s*)(\()`, `abbrev`, `abs`, `address`, `arg`, `b2x`, `bitand`, `bitor`, `bitxor`, `c2d`, `c2x`, `center`, `charin`, `charout`, `chars`, `compare`, `condition`, `copies`, `d2c`, `d2x`, `datatype`, `date`, `delstr`, `delword`, `digits`, `errortext`, `form`, `format`, `fuzz`, `insert`, `lastpos`, `left`, `length`, `linein`, `lineout`, `lines`, `max`, `min`, `overlay`, `pos`, `queued`, `random`, `reverse`, `right`, `sign`, `sourceline`, `space`, `stream`, `strip`, `substr`, `subword`, `symbol`, `time`, `trace`, `translate`, `trunc`, `value`, `verify`, `word`, `wordindex`, `wordlength`, `wordpos`, `words`, `x2b`, `x2c`, `x2d`, `xrange`), ByGroups(NameBuiltin, TextWhitespace, Operator), nil}, - }, - "keyword": { - {`(address|arg|by|call|do|drop|else|end|exit|for|forever|if|interpret|iterate|leave|nop|numeric|off|on|options|parse|pull|push|queue|return|say|select|signal|to|then|trace|until|while)\b`, KeywordReserved, nil}, - }, - "operator": { - {`(-|//|/|\(|\)|\*\*|\*|\\<<|\\<|\\==|\\=|\\>>|\\>|\\|\|\||\||&&|&|%|\+|<<=|<<|<=|<>|<|==|=|><|>=|>>=|>>|>|¬<<|¬<|¬==|¬=|¬>>|¬>|¬|\.|,)`, Operator, nil}, - }, - "string_double": { - {`[^"\n]+`, LiteralString, nil}, - {`""`, LiteralString, nil}, - {`"`, LiteralString, Pop(1)}, - {`\n`, Text, Pop(1)}, - }, - "string_single": { - {`[^\'\n]`, LiteralString, nil}, - {`\'\'`, LiteralString, nil}, - {`\'`, LiteralString, Pop(1)}, - {`\n`, Text, Pop(1)}, - }, - "comment": { - {`[^*]+`, CommentMultiline, nil}, - {`\*/`, CommentMultiline, Pop(1)}, - {`\*`, CommentMultiline, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/r/rst.go b/vendor/github.com/alecthomas/chroma/lexers/r/rst.go deleted file mode 100644 index f09dad0..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/r/rst.go +++ /dev/null @@ -1,86 +0,0 @@ -package r - -import ( - "strings" - - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Restructuredtext lexer. -var Restructuredtext = internal.Register(MustNewLexer( - &Config{ - Name: "reStructuredText", - Aliases: []string{"rst", "rest", "restructuredtext"}, - Filenames: []string{"*.rst", "*.rest"}, - MimeTypes: []string{"text/x-rst", "text/prs.fallenstein.rst"}, - }, - Rules{ - "root": { - {"^(=+|-+|`+|:+|\\.+|\\'+|\"+|~+|\\^+|_+|\\*+|\\++|#+)([ \\t]*\\n)(.+)(\\n)(\\1)(\\n)", ByGroups(GenericHeading, Text, GenericHeading, Text, GenericHeading, Text), nil}, - {"^(\\S.*)(\\n)(={3,}|-{3,}|`{3,}|:{3,}|\\.{3,}|\\'{3,}|\"{3,}|~{3,}|\\^{3,}|_{3,}|\\*{3,}|\\+{3,}|#{3,})(\\n)", ByGroups(GenericHeading, Text, GenericHeading, Text), nil}, - {`^(\s*)([-*+])( .+\n(?:\1 .+\n)*)`, ByGroups(Text, LiteralNumber, UsingSelf("inline")), nil}, - {`^(\s*)([0-9#ivxlcmIVXLCM]+\.)( .+\n(?:\1 .+\n)*)`, ByGroups(Text, LiteralNumber, UsingSelf("inline")), nil}, - {`^(\s*)(\(?[0-9#ivxlcmIVXLCM]+\))( .+\n(?:\1 .+\n)*)`, ByGroups(Text, LiteralNumber, UsingSelf("inline")), nil}, - {`^(\s*)([A-Z]+\.)( .+\n(?:\1 .+\n)+)`, ByGroups(Text, LiteralNumber, UsingSelf("inline")), nil}, - {`^(\s*)(\(?[A-Za-z]+\))( .+\n(?:\1 .+\n)+)`, ByGroups(Text, LiteralNumber, UsingSelf("inline")), nil}, - {`^(\s*)(\|)( .+\n(?:\| .+\n)*)`, ByGroups(Text, Operator, UsingSelf("inline")), nil}, - {`^( *\.\.)(\s*)((?:source)?code(?:-block)?)(::)([ \t]*)([^\n]+)(\n[ \t]*\n)([ \t]+)(.*)(\n)((?:(?:\8.*|)\n)+)`, EmitterFunc(rstCodeBlock), nil}, - {`^( *\.\.)(\s*)([\w:-]+?)(::)(?:([ \t]*)(.*))`, ByGroups(Punctuation, Text, OperatorWord, Punctuation, Text, UsingSelf("inline")), nil}, - {`^( *\.\.)(\s*)(_(?:[^:\\]|\\.)+:)(.*?)$`, ByGroups(Punctuation, Text, NameTag, UsingSelf("inline")), nil}, - {`^( *\.\.)(\s*)(\[.+\])(.*?)$`, ByGroups(Punctuation, Text, NameTag, UsingSelf("inline")), nil}, - {`^( *\.\.)(\s*)(\|.+\|)(\s*)([\w:-]+?)(::)(?:([ \t]*)(.*))`, ByGroups(Punctuation, Text, NameTag, Text, OperatorWord, Punctuation, Text, UsingSelf("inline")), nil}, - {`^ *\.\..*(\n( +.*\n|\n)+)?`, CommentPreproc, nil}, - {`^( *)(:[a-zA-Z-]+:)(\s*)$`, ByGroups(Text, NameClass, Text), nil}, - {`^( *)(:.*?:)([ \t]+)(.*?)$`, ByGroups(Text, NameClass, Text, NameFunction), nil}, - {`^(\S.*(?)(`__?)", ByGroups(LiteralString, LiteralStringInterpol, LiteralString), nil}, - {"`.+?`__?", LiteralString, nil}, - {"(`.+?`)(:[a-zA-Z0-9:-]+?:)?", ByGroups(NameVariable, NameAttribute), nil}, - {"(:[a-zA-Z0-9:-]+?:)(`.+?`)", ByGroups(NameAttribute, NameVariable), nil}, - {`\*\*.+?\*\*`, GenericStrong, nil}, - {`\*.+?\*`, GenericEmph, nil}, - {`\[.*?\]_`, LiteralString, nil}, - {`<.+?>`, NameTag, nil}, - {"[^\\\\\\n\\[*`:]+", Text, nil}, - {`.`, Text, nil}, - }, - "literal": { - {"[^`]+", LiteralString, nil}, - {"``((?=$)|(?=[-/:.,; \\n\\x00\\\u2010\\\u2011\\\u2012\\\u2013\\\u2014\\\u00a0\\'\\\"\\)\\]\\}\\>\\\u2019\\\u201d\\\u00bb\\!\\?]))", LiteralString, Pop(1)}, - {"`", LiteralString, nil}, - }, - }, -)) - -func rstCodeBlock(groups []string, lexer Lexer) Iterator { - iterators := []Iterator{} - tokens := []Token{ - {Punctuation, groups[1]}, - {Text, groups[2]}, - {OperatorWord, groups[3]}, - {Punctuation, groups[4]}, - {Text, groups[5]}, - {Keyword, groups[6]}, - {Text, groups[7]}, - } - code := strings.Join(groups[8:], "") - lexer = internal.Get(groups[6]) - if lexer == nil { - tokens = append(tokens, Token{String, code}) - iterators = append(iterators, Literator(tokens...)) - } else { - sub, err := lexer.Tokenise(nil, code) - if err != nil { - panic(err) - } - iterators = append(iterators, Literator(tokens...), sub) - } - return Concaterator(iterators...) -} diff --git a/vendor/github.com/alecthomas/chroma/lexers/r/ruby.go b/vendor/github.com/alecthomas/chroma/lexers/r/ruby.go deleted file mode 100644 index 6af8db2..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/r/ruby.go +++ /dev/null @@ -1,250 +0,0 @@ -package r - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Ruby lexer. -var Ruby = internal.Register(MustNewLexer( - &Config{ - Name: "Ruby", - Aliases: []string{"rb", "ruby", "duby"}, - Filenames: []string{"*.rb", "*.rbw", "Rakefile", "*.rake", "*.gemspec", "*.rbx", "*.duby", "Gemfile"}, - MimeTypes: []string{"text/x-ruby", "application/x-ruby"}, - DotAll: true, - }, - Rules{ - "root": { - {`\A#!.+?$`, CommentHashbang, nil}, - {`#.*?$`, CommentSingle, nil}, - {`=begin\s.*?\n=end.*?$`, CommentMultiline, nil}, - {Words(``, `\b`, `BEGIN`, `END`, `alias`, `begin`, `break`, `case`, `defined?`, `do`, `else`, `elsif`, `end`, `ensure`, `for`, `if`, `in`, `next`, `redo`, `rescue`, `raise`, `retry`, `return`, `super`, `then`, `undef`, `unless`, `until`, `when`, `while`, `yield`), Keyword, nil}, - {`(module)(\s+)([a-zA-Z_]\w*(?:::[a-zA-Z_]\w*)*)`, ByGroups(Keyword, Text, NameNamespace), nil}, - {`(def)(\s+)`, ByGroups(Keyword, Text), Push("funcname")}, - {"def(?=[*%&^`~+-/\\[<>=])", Keyword, Push("funcname")}, - {`(class)(\s+)`, ByGroups(Keyword, Text), Push("classname")}, - {Words(``, `\b`, `initialize`, `new`, `loop`, `include`, `extend`, `raise`, `attr_reader`, `attr_writer`, `attr_accessor`, `attr`, `catch`, `throw`, `private`, `module_function`, `public`, `protected`, `true`, `false`, `nil`), KeywordPseudo, nil}, - {`(not|and|or)\b`, OperatorWord, nil}, - {Words(``, `\?`, `autoload`, `block_given`, `const_defined`, `eql`, `equal`, `frozen`, `include`, `instance_of`, `is_a`, `iterator`, `kind_of`, `method_defined`, `nil`, `private_method_defined`, `protected_method_defined`, `public_method_defined`, `respond_to`, `tainted`), NameBuiltin, nil}, - {`(chomp|chop|exit|gsub|sub)!`, NameBuiltin, nil}, - {Words(`(?~!:])|(?<=(?:\s|;)when\s)|(?<=(?:\s|;)or\s)|(?<=(?:\s|;)and\s)|(?<=\.index\s)|(?<=\.scan\s)|(?<=\.sub\s)|(?<=\.sub!\s)|(?<=\.gsub\s)|(?<=\.gsub!\s)|(?<=\.match\s)|(?<=(?:\s|;)if\s)|(?<=(?:\s|;)elsif\s)|(?<=^when\s)|(?<=^index\s)|(?<=^scan\s)|(?<=^sub\s)|(?<=^gsub\s)|(?<=^sub!\s)|(?<=^gsub!\s)|(?<=^match\s)|(?<=^if\s)|(?<=^elsif\s))(\s*)(/)`, ByGroups(Text, LiteralStringRegex), Push("multiline-regex")}, - {`(?<=\(|,|\[)/`, LiteralStringRegex, Push("multiline-regex")}, - {`(\s+)(/)(?![\s=])`, ByGroups(Text, LiteralStringRegex), Push("multiline-regex")}, - {`(0_?[0-7]+(?:_[0-7]+)*)(\s*)([/?])?`, ByGroups(LiteralNumberOct, Text, Operator), nil}, - {`(0x[0-9A-Fa-f]+(?:_[0-9A-Fa-f]+)*)(\s*)([/?])?`, ByGroups(LiteralNumberHex, Text, Operator), nil}, - {`(0b[01]+(?:_[01]+)*)(\s*)([/?])?`, ByGroups(LiteralNumberBin, Text, Operator), nil}, - {`([\d]+(?:_\d+)*)(\s*)([/?])?`, ByGroups(LiteralNumberInteger, Text, Operator), nil}, - {`@@[a-zA-Z_]\w*`, NameVariableClass, nil}, - {`@[a-zA-Z_]\w*`, NameVariableInstance, nil}, - {`\$\w+`, NameVariableGlobal, nil}, - {"\\$[!@&`\\'+~=/\\\\,;.<>_*$?:\"^-]", NameVariableGlobal, nil}, - {`\$-[0adFiIlpvw]`, NameVariableGlobal, nil}, - {`::`, Operator, nil}, - Include("strings"), - {`\?(\\[MC]-)*(\\([\\abefnrstv#"\']|x[a-fA-F0-9]{1,2}|[0-7]{1,3})|\S)(?!\w)`, LiteralStringChar, nil}, - {`[A-Z]\w+`, NameConstant, nil}, - {Words(`(\.|::)`, ``, `*`, `**`, `-`, `+`, `-@`, `+@`, `/`, `%`, `&`, `|`, `^`, "`", `~`, `[]`, `[]=`, `<<`, `>>`, `<`, `<>`, `<=>`, `>`, `>=`, `==`, `===`), ByGroups(Operator, NameOperator), nil}, - {"(\\.|::)([a-zA-Z_]\\w*[!?]?|[*%&^`~+\\-/\\[<>=])", ByGroups(Operator, Name), nil}, - {`[a-zA-Z_]\w*[!?]?`, Name, nil}, - {`(\[|\]|\*\*|<>?|>=|<=|<=>|=~|={3}|!~|&&?|\|\||\.{1,3})`, Operator, nil}, - {`[-+/*%=<>&!^|~]=?`, Operator, nil}, - {`[(){};,/?:\\]`, Punctuation, nil}, - {`\s+`, Text, nil}, - }, - "funcname": { - {`\(`, Punctuation, Push("defexpr")}, - {"(?:([a-zA-Z_]\\w*)(\\.))?([a-zA-Z_]\\w*[!?]?|\\*\\*?|[-+]@?|[/%&|^`~]|\\[\\]=?|<<|>>|<=?>|>=?|===?)", ByGroups(NameClass, Operator, NameFunction), Pop(1)}, - Default(Pop(1)), - }, - "classname": { - {`\(`, Punctuation, Push("defexpr")}, - {`<<`, Operator, Pop(1)}, - {`[A-Z_]\w*`, NameClass, Pop(1)}, - Default(Pop(1)), - }, - "defexpr": { - {`(\))(\.|::)?`, ByGroups(Punctuation, Operator), Pop(1)}, - {`\(`, Operator, Push()}, - Include("root"), - }, - "in-intp": { - {`\{`, LiteralStringInterpol, Push()}, - {`\}`, LiteralStringInterpol, Pop(1)}, - Include("root"), - }, - "string-intp": { - {`#\{`, LiteralStringInterpol, Push("in-intp")}, - {`#@@?[a-zA-Z_]\w*`, LiteralStringInterpol, nil}, - {`#\$[a-zA-Z_]\w*`, LiteralStringInterpol, nil}, - }, - "string-intp-escaped": { - Include("string-intp"), - {`\\([\\abefnrstv#"\']|x[a-fA-F0-9]{1,2}|[0-7]{1,3})`, LiteralStringEscape, nil}, - }, - "interpolated-regex": { - Include("string-intp"), - {`[\\#]`, LiteralStringRegex, nil}, - {`[^\\#]+`, LiteralStringRegex, nil}, - }, - "interpolated-string": { - Include("string-intp"), - {`[\\#]`, LiteralStringOther, nil}, - {`[^\\#]+`, LiteralStringOther, nil}, - }, - "multiline-regex": { - Include("string-intp"), - {`\\\\`, LiteralStringRegex, nil}, - {`\\/`, LiteralStringRegex, nil}, - {`[\\#]`, LiteralStringRegex, nil}, - {`[^\\/#]+`, LiteralStringRegex, nil}, - {`/[mixounse]*`, LiteralStringRegex, Pop(1)}, - }, - "end-part": { - {`.+`, CommentPreproc, Pop(1)}, - }, - "strings": { - {`\:@{0,2}[a-zA-Z_]\w*[!?]?`, LiteralStringSymbol, nil}, - {Words(`\:@{0,2}`, ``, `*`, `**`, `-`, `+`, `-@`, `+@`, `/`, `%`, `&`, `|`, `^`, "`", `~`, `[]`, `[]=`, `<<`, `>>`, `<`, `<>`, `<=>`, `>`, `>=`, `==`, `===`), LiteralStringSymbol, nil}, - {`:'(\\\\|\\'|[^'])*'`, LiteralStringSymbol, nil}, - {`'(\\\\|\\'|[^'])*'`, LiteralStringSingle, nil}, - {`:"`, LiteralStringSymbol, Push("simple-sym")}, - {`([a-zA-Z_]\w*)(:)(?!:)`, ByGroups(LiteralStringSymbol, Punctuation), nil}, - {`"`, LiteralStringDouble, Push("simple-string")}, - {"(?&!^|~,(])(\s*)(%([\t ])(?:(?:\\\3|(?!\3).)*)\3)`, ByGroups(Text, LiteralStringOther, None), nil}, - {`^(\s*)(%([\t ])(?:(?:\\\3|(?!\3).)*)\3)`, ByGroups(Text, LiteralStringOther, None), nil}, - {`(%([^a-zA-Z0-9\s]))((?:\\\2|(?!\2).)*)(\2)`, String, nil}, - }, - "simple-string": { - Include("string-intp-escaped"), - {`[^\\"#]+`, LiteralStringDouble, nil}, - {`[\\#]`, LiteralStringDouble, nil}, - {`"`, LiteralStringDouble, Pop(1)}, - }, - "simple-sym": { - Include("string-intp-escaped"), - {`[^\\"#]+`, LiteralStringSymbol, nil}, - {`[\\#]`, LiteralStringSymbol, nil}, - {`"`, LiteralStringSymbol, Pop(1)}, - }, - "simple-backtick": { - Include("string-intp-escaped"), - {"[^\\\\`#]+", LiteralStringBacktick, nil}, - {`[\\#]`, LiteralStringBacktick, nil}, - {"`", LiteralStringBacktick, Pop(1)}, - }, - "cb-intp-string": { - {`\\[\\{}]`, LiteralStringOther, nil}, - {`\{`, LiteralStringOther, Push()}, - {`\}`, LiteralStringOther, Pop(1)}, - Include("string-intp-escaped"), - {`[\\#{}]`, LiteralStringOther, nil}, - {`[^\\#{}]+`, LiteralStringOther, nil}, - }, - "cb-string": { - {`\\[\\{}]`, LiteralStringOther, nil}, - {`\{`, LiteralStringOther, Push()}, - {`\}`, LiteralStringOther, Pop(1)}, - {`[\\#{}]`, LiteralStringOther, nil}, - {`[^\\#{}]+`, LiteralStringOther, nil}, - }, - "cb-regex": { - {`\\[\\{}]`, LiteralStringRegex, nil}, - {`\{`, LiteralStringRegex, Push()}, - {`\}[mixounse]*`, LiteralStringRegex, Pop(1)}, - Include("string-intp"), - {`[\\#{}]`, LiteralStringRegex, nil}, - {`[^\\#{}]+`, LiteralStringRegex, nil}, - }, - "sb-intp-string": { - {`\\[\\\[\]]`, LiteralStringOther, nil}, - {`\[`, LiteralStringOther, Push()}, - {`\]`, LiteralStringOther, Pop(1)}, - Include("string-intp-escaped"), - {`[\\#\[\]]`, LiteralStringOther, nil}, - {`[^\\#\[\]]+`, LiteralStringOther, nil}, - }, - "sb-string": { - {`\\[\\\[\]]`, LiteralStringOther, nil}, - {`\[`, LiteralStringOther, Push()}, - {`\]`, LiteralStringOther, Pop(1)}, - {`[\\#\[\]]`, LiteralStringOther, nil}, - {`[^\\#\[\]]+`, LiteralStringOther, nil}, - }, - "sb-regex": { - {`\\[\\\[\]]`, LiteralStringRegex, nil}, - {`\[`, LiteralStringRegex, Push()}, - {`\][mixounse]*`, LiteralStringRegex, Pop(1)}, - Include("string-intp"), - {`[\\#\[\]]`, LiteralStringRegex, nil}, - {`[^\\#\[\]]+`, LiteralStringRegex, nil}, - }, - "pa-intp-string": { - {`\\[\\()]`, LiteralStringOther, nil}, - {`\(`, LiteralStringOther, Push()}, - {`\)`, LiteralStringOther, Pop(1)}, - Include("string-intp-escaped"), - {`[\\#()]`, LiteralStringOther, nil}, - {`[^\\#()]+`, LiteralStringOther, nil}, - }, - "pa-string": { - {`\\[\\()]`, LiteralStringOther, nil}, - {`\(`, LiteralStringOther, Push()}, - {`\)`, LiteralStringOther, Pop(1)}, - {`[\\#()]`, LiteralStringOther, nil}, - {`[^\\#()]+`, LiteralStringOther, nil}, - }, - "pa-regex": { - {`\\[\\()]`, LiteralStringRegex, nil}, - {`\(`, LiteralStringRegex, Push()}, - {`\)[mixounse]*`, LiteralStringRegex, Pop(1)}, - Include("string-intp"), - {`[\\#()]`, LiteralStringRegex, nil}, - {`[^\\#()]+`, LiteralStringRegex, nil}, - }, - "ab-intp-string": { - {`\\[\\<>]`, LiteralStringOther, nil}, - {`<`, LiteralStringOther, Push()}, - {`>`, LiteralStringOther, Pop(1)}, - Include("string-intp-escaped"), - {`[\\#<>]`, LiteralStringOther, nil}, - {`[^\\#<>]+`, LiteralStringOther, nil}, - }, - "ab-string": { - {`\\[\\<>]`, LiteralStringOther, nil}, - {`<`, LiteralStringOther, Push()}, - {`>`, LiteralStringOther, Pop(1)}, - {`[\\#<>]`, LiteralStringOther, nil}, - {`[^\\#<>]+`, LiteralStringOther, nil}, - }, - "ab-regex": { - {`\\[\\<>]`, LiteralStringRegex, nil}, - {`<`, LiteralStringRegex, Push()}, - {`>[mixounse]*`, LiteralStringRegex, Pop(1)}, - Include("string-intp"), - {`[\\#<>]`, LiteralStringRegex, nil}, - {`[^\\#<>]+`, LiteralStringRegex, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/r/rust.go b/vendor/github.com/alecthomas/chroma/lexers/r/rust.go deleted file mode 100644 index 191d1be..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/r/rust.go +++ /dev/null @@ -1,135 +0,0 @@ -package r - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Rust lexer. -var Rust = internal.Register(MustNewLexer( - &Config{ - Name: "Rust", - Aliases: []string{"rust"}, - Filenames: []string{"*.rs", "*.rs.in"}, - MimeTypes: []string{"text/rust"}, - EnsureNL: true, - }, - Rules{ - "root": { - {`#![^[\r\n].*$`, CommentPreproc, nil}, - Default(Push("base")), - }, - "base": { - {`\n`, TextWhitespace, nil}, - {`\s+`, TextWhitespace, nil}, - {`//!.*?\n`, LiteralStringDoc, nil}, - {`///(\n|[^/].*?\n)`, LiteralStringDoc, nil}, - {`//(.*?)\n`, CommentSingle, nil}, - {`/\*\*(\n|[^/*])`, LiteralStringDoc, Push("doccomment")}, - {`/\*!`, LiteralStringDoc, Push("doccomment")}, - {`/\*`, CommentMultiline, Push("comment")}, - {`r#*"(?:\\.|[^\\\r\n;])*"#*`, LiteralString, nil}, - {`"(?:\\.|[^\\\r\n"])*"`, LiteralString, nil}, - {`\$([a-zA-Z_]\w*|\(,?|\),?|,?)`, CommentPreproc, nil}, - {Words(``, `\b`, `as`, `box`, `const`, `crate`, `else`, `extern`, `for`, `if`, `impl`, `in`, `loop`, `match`, `move`, `mut`, `pub`, `ref`, `return`, `static`, `super`, `trait`, `unsafe`, `use`, `where`, `while`), Keyword, nil}, - {Words(``, `\b`, `abstract`, `alignof`, `become`, `do`, `final`, `macro`, `offsetof`, `override`, `priv`, `proc`, `pure`, `sizeof`, `typeof`, `unsized`, `virtual`, `yield`), KeywordReserved, nil}, - {`(true|false)\b`, KeywordConstant, nil}, - {`mod\b`, Keyword, Push("modname")}, - {`let\b`, KeywordDeclaration, nil}, - {`fn\b`, Keyword, Push("funcname")}, - {`(struct|enum|type|union)\b`, Keyword, Push("typename")}, - {`(default)(\s+)(type|fn)\b`, ByGroups(Keyword, Text, Keyword), nil}, - {Words(``, `\b`, `u8`, `u16`, `u32`, `u64`, `i8`, `i16`, `i32`, `i64`, `usize`, `isize`, `f32`, `f64`, `str`, `bool`), KeywordType, nil}, - {`self\b`, NameBuiltinPseudo, nil}, - {Words(``, `\b`, `Copy`, `Send`, `Sized`, `Sync`, `Drop`, `Fn`, `FnMut`, `FnOnce`, `Box`, `ToOwned`, `Clone`, `PartialEq`, `PartialOrd`, `Eq`, `Ord`, `AsRef`, `AsMut`, `Into`, `From`, `Default`, `Iterator`, `Extend`, `IntoIterator`, `DoubleEndedIterator`, `ExactSizeIterator`, `Option`, `Some`, `None`, `Result`, `Ok`, `Err`, `SliceConcatExt`, `String`, `ToString`, `Vec`), NameBuiltin, nil}, - {`::\b`, Text, nil}, - {`(?::|->)`, Text, Push("typename")}, - {`(break|continue)(\s*)(\'[A-Za-z_]\w*)?`, ByGroups(Keyword, TextWhitespace, NameLabel), nil}, - {`'(\\['"\\nrt]|\\x[0-7][0-9a-fA-F]|\\0|\\u\{[0-9a-fA-F]{1,6}\}|.)'`, LiteralStringChar, nil}, - {`b'(\\['"\\nrt]|\\x[0-9a-fA-F]{2}|\\0|\\u\{[0-9a-fA-F]{1,6}\}|.)'`, LiteralStringChar, nil}, - {`0b[01_]+`, LiteralNumberBin, Push("number_lit")}, - {`0o[0-7_]+`, LiteralNumberOct, Push("number_lit")}, - {`0[xX][0-9a-fA-F_]+`, LiteralNumberHex, Push("number_lit")}, - {`[0-9][0-9_]*(\.[0-9_]+[eE][+\-]?[0-9_]+|\.[0-9_]*(?!\.)|[eE][+\-]?[0-9_]+)`, LiteralNumberFloat, Push("number_lit")}, - {`[0-9][0-9_]*`, LiteralNumberInteger, Push("number_lit")}, - {`b"`, LiteralString, Push("bytestring")}, - {`b?r(#*)".*?"\1`, LiteralString, nil}, - {`'static`, NameBuiltin, nil}, - {`'[a-zA-Z_]\w*`, NameAttribute, nil}, - {`[{}()\[\],.;]`, Punctuation, nil}, - {`[+\-*/%&|<>^!~@=:?]`, Operator, nil}, - {`(r#)?[a-zA-Z_]\w*`, Name, nil}, - {`#!?\[`, CommentPreproc, Push("attribute[")}, - {`([A-Za-z_]\w*)(!)(\s*)([A-Za-z_]\w*)?(\s*)(\{)`, ByGroups(CommentPreproc, Punctuation, TextWhitespace, Name, TextWhitespace, Punctuation), Push("macro{")}, - {`([A-Za-z_]\w*)(!)(\s*)([A-Za-z_]\w*)?(\()`, ByGroups(CommentPreproc, Punctuation, TextWhitespace, Name, Punctuation), Push("macro(")}, - }, - "comment": { - {`[^*/]+`, CommentMultiline, nil}, - {`/\*`, CommentMultiline, Push()}, - {`\*/`, CommentMultiline, Pop(1)}, - {`[*/]`, CommentMultiline, nil}, - }, - "doccomment": { - {`[^*/]+`, LiteralStringDoc, nil}, - {`/\*`, LiteralStringDoc, Push()}, - {`\*/`, LiteralStringDoc, Pop(1)}, - {`[*/]`, LiteralStringDoc, nil}, - }, - "modname": { - {`\s+`, Text, nil}, - {`[a-zA-Z_]\w*`, NameNamespace, Pop(1)}, - Default(Pop(1)), - }, - "funcname": { - {`\s+`, Text, nil}, - {`[a-zA-Z_]\w*`, NameFunction, Pop(1)}, - Default(Pop(1)), - }, - "typename": { - {`\s+`, Text, nil}, - {`&`, KeywordPseudo, nil}, - {Words(``, `\b`, `Copy`, `Send`, `Sized`, `Sync`, `Drop`, `Fn`, `FnMut`, `FnOnce`, `Box`, `ToOwned`, `Clone`, `PartialEq`, `PartialOrd`, `Eq`, `Ord`, `AsRef`, `AsMut`, `Into`, `From`, `Default`, `Iterator`, `Extend`, `IntoIterator`, `DoubleEndedIterator`, `ExactSizeIterator`, `Option`, `Some`, `None`, `Result`, `Ok`, `Err`, `SliceConcatExt`, `String`, `ToString`, `Vec`), NameBuiltin, nil}, - {Words(``, `\b`, `u8`, `u16`, `u32`, `u64`, `i8`, `i16`, `i32`, `i64`, `usize`, `isize`, `f32`, `f64`, `str`, `bool`), KeywordType, nil}, - {`[a-zA-Z_]\w*`, NameClass, Pop(1)}, - Default(Pop(1)), - }, - "number_lit": { - {`[ui](8|16|32|64|size)`, Keyword, Pop(1)}, - {`f(32|64)`, Keyword, Pop(1)}, - Default(Pop(1)), - }, - "string": { - {`"`, LiteralString, Pop(1)}, - {`\\['"\\nrt]|\\x[0-7][0-9a-fA-F]|\\0|\\u\{[0-9a-fA-F]{1,6}\}`, LiteralStringEscape, nil}, - {`[^\\"]+`, LiteralString, nil}, - {`\\`, LiteralString, nil}, - }, - "bytestring": { - {`\\x[89a-fA-F][0-9a-fA-F]`, LiteralStringEscape, nil}, - Include("string"), - }, - "macro{": { - {`\{`, Operator, Push()}, - {`\}`, Operator, Pop(1)}, - }, - "macro(": { - {`\(`, Operator, Push()}, - {`\)`, Operator, Pop(1)}, - }, - "attribute_common": { - {`"`, LiteralString, Push("string")}, - {`\[`, CommentPreproc, Push("attribute[")}, - {`\(`, CommentPreproc, Push("attribute(")}, - }, - "attribute[": { - Include("attribute_common"), - {`\];?`, CommentPreproc, Pop(1)}, - {`[^"\]]+`, CommentPreproc, nil}, - }, - "attribute(": { - Include("attribute_common"), - {`\);?`, CommentPreproc, Pop(1)}, - {`[^")]+`, CommentPreproc, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/s/sas.go b/vendor/github.com/alecthomas/chroma/lexers/s/sas.go deleted file mode 100644 index 47a67ed..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/s/sas.go +++ /dev/null @@ -1,94 +0,0 @@ -package s - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Sas lexer. -var Sas = internal.Register(MustNewLexer( - &Config{ - Name: "SAS", - Aliases: []string{"sas"}, - Filenames: []string{"*.SAS", "*.sas"}, - MimeTypes: []string{"text/x-sas", "text/sas", "application/x-sas"}, - CaseInsensitive: true, - }, - Rules{ - "root": { - Include("comments"), - Include("proc-data"), - Include("cards-datalines"), - Include("logs"), - Include("general"), - {`.`, Text, nil}, - {`\\\n`, Text, nil}, - {`\n`, Text, nil}, - }, - "comments": { - {`^\s*\*.*?;`, Comment, nil}, - {`/\*.*?\*/`, Comment, nil}, - {`^\s*\*(.|\n)*?;`, CommentMultiline, nil}, - {`/[*](.|\n)*?[*]/`, CommentMultiline, nil}, - }, - "proc-data": { - {`(^|;)\s*(proc \w+|data|run|quit)[\s;]`, KeywordReserved, nil}, - }, - "cards-datalines": { - {`^\s*(datalines|cards)\s*;\s*$`, Keyword, Push("data")}, - }, - "data": { - {`(.|\n)*^\s*;\s*$`, Other, Pop(1)}, - }, - "logs": { - {`\n?^\s*%?put `, Keyword, Push("log-messages")}, - }, - "log-messages": { - {`NOTE(:|-).*`, Generic, Pop(1)}, - {`WARNING(:|-).*`, GenericEmph, Pop(1)}, - {`ERROR(:|-).*`, GenericError, Pop(1)}, - Include("general"), - }, - "general": { - Include("keywords"), - Include("vars-strings"), - Include("special"), - Include("numbers"), - }, - "keywords": { - {Words(`\b`, `\b`, `abort`, `array`, `attrib`, `by`, `call`, `cards`, `cards4`, `catname`, `continue`, `datalines`, `datalines4`, `delete`, `delim`, `delimiter`, `display`, `dm`, `drop`, `endsas`, `error`, `file`, `filename`, `footnote`, `format`, `goto`, `in`, `infile`, `informat`, `input`, `keep`, `label`, `leave`, `length`, `libname`, `link`, `list`, `lostcard`, `merge`, `missing`, `modify`, `options`, `output`, `out`, `page`, `put`, `redirect`, `remove`, `rename`, `replace`, `retain`, `return`, `select`, `set`, `skip`, `startsas`, `stop`, `title`, `update`, `waitsas`, `where`, `window`, `x`, `systask`), Keyword, nil}, - {Words(`\b`, `\b`, `add`, `and`, `alter`, `as`, `cascade`, `check`, `create`, `delete`, `describe`, `distinct`, `drop`, `foreign`, `from`, `group`, `having`, `index`, `insert`, `into`, `in`, `key`, `like`, `message`, `modify`, `msgtype`, `not`, `null`, `on`, `or`, `order`, `primary`, `references`, `reset`, `restrict`, `select`, `set`, `table`, `unique`, `update`, `validate`, `view`, `where`), Keyword, nil}, - {Words(`\b`, `\b`, `do`, `if`, `then`, `else`, `end`, `until`, `while`), Keyword, nil}, - {Words(`%`, `\b`, `bquote`, `nrbquote`, `cmpres`, `qcmpres`, `compstor`, `datatyp`, `display`, `do`, `else`, `end`, `eval`, `global`, `goto`, `if`, `index`, `input`, `keydef`, `label`, `left`, `length`, `let`, `local`, `lowcase`, `macro`, `mend`, `nrquote`, `nrstr`, `put`, `qleft`, `qlowcase`, `qscan`, `qsubstr`, `qsysfunc`, `qtrim`, `quote`, `qupcase`, `scan`, `str`, `substr`, `superq`, `syscall`, `sysevalf`, `sysexec`, `sysfunc`, `sysget`, `syslput`, `sysprod`, `sysrc`, `sysrput`, `then`, `to`, `trim`, `unquote`, `until`, `upcase`, `verify`, `while`, `window`), NameBuiltin, nil}, - {Words(`\b`, `\(`, `abs`, `addr`, `airy`, `arcos`, `arsin`, `atan`, `attrc`, `attrn`, `band`, `betainv`, `blshift`, `bnot`, `bor`, `brshift`, `bxor`, `byte`, `cdf`, `ceil`, `cexist`, `cinv`, `close`, `cnonct`, `collate`, `compbl`, `compound`, `compress`, `cos`, `cosh`, `css`, `curobs`, `cv`, `daccdb`, `daccdbsl`, `daccsl`, `daccsyd`, `dacctab`, `dairy`, `date`, `datejul`, `datepart`, `datetime`, `day`, `dclose`, `depdb`, `depdbsl`, `depsl`, `depsyd`, `deptab`, `dequote`, `dhms`, `dif`, `digamma`, `dim`, `dinfo`, `dnum`, `dopen`, `doptname`, `doptnum`, `dread`, `dropnote`, `dsname`, `erf`, `erfc`, `exist`, `exp`, `fappend`, `fclose`, `fcol`, `fdelete`, `fetch`, `fetchobs`, `fexist`, `fget`, `fileexist`, `filename`, `fileref`, `finfo`, `finv`, `fipname`, `fipnamel`, `fipstate`, `floor`, `fnonct`, `fnote`, `fopen`, `foptname`, `foptnum`, `fpoint`, `fpos`, `fput`, `fread`, `frewind`, `frlen`, `fsep`, `fuzz`, `fwrite`, `gaminv`, `gamma`, `getoption`, `getvarc`, `getvarn`, `hbound`, `hms`, `hosthelp`, `hour`, `ibessel`, `index`, `indexc`, `indexw`, `input`, `inputc`, `inputn`, `int`, `intck`, `intnx`, `intrr`, `irr`, `jbessel`, `juldate`, `kurtosis`, `lag`, `lbound`, `left`, `length`, `lgamma`, `libname`, `libref`, `log`, `log10`, `log2`, `logpdf`, `logpmf`, `logsdf`, `lowcase`, `max`, `mdy`, `mean`, `min`, `minute`, `mod`, `month`, `mopen`, `mort`, `n`, `netpv`, `nmiss`, `normal`, `note`, `npv`, `open`, `ordinal`, `pathname`, `pdf`, `peek`, `peekc`, `pmf`, `point`, `poisson`, `poke`, `probbeta`, `probbnml`, `probchi`, `probf`, `probgam`, `probhypr`, `probit`, `probnegb`, `probnorm`, `probt`, `put`, `putc`, `putn`, `qtr`, `quote`, `ranbin`, `rancau`, `ranexp`, `rangam`, `range`, `rank`, `rannor`, `ranpoi`, `rantbl`, `rantri`, `ranuni`, `repeat`, `resolve`, `reverse`, `rewind`, `right`, `round`, `saving`, `scan`, `sdf`, `second`, `sign`, `sin`, `sinh`, `skewness`, `soundex`, `spedis`, `sqrt`, `std`, `stderr`, `stfips`, `stname`, `stnamel`, `substr`, `sum`, `symget`, `sysget`, `sysmsg`, `sysprod`, `sysrc`, `system`, `tan`, `tanh`, `time`, `timepart`, `tinv`, `tnonct`, `today`, `translate`, `tranwrd`, `trigamma`, `trim`, `trimn`, `trunc`, `uniform`, `upcase`, `uss`, `var`, `varfmt`, `varinfmt`, `varlabel`, `varlen`, `varname`, `varnum`, `varray`, `varrayx`, `vartype`, `verify`, `vformat`, `vformatd`, `vformatdx`, `vformatn`, `vformatnx`, `vformatw`, `vformatwx`, `vformatx`, `vinarray`, `vinarrayx`, `vinformat`, `vinformatd`, `vinformatdx`, `vinformatn`, `vinformatnx`, `vinformatw`, `vinformatwx`, `vinformatx`, `vlabel`, `vlabelx`, `vlength`, `vlengthx`, `vname`, `vnamex`, `vtype`, `vtypex`, `weekday`, `year`, `yyq`, `zipfips`, `zipname`, `zipnamel`, `zipstate`), NameBuiltin, nil}, - }, - "vars-strings": { - {`&[a-z_]\w{0,31}\.?`, NameVariable, nil}, - {`%[a-z_]\w{0,31}`, NameFunction, nil}, - {`\'`, LiteralString, Push("string_squote")}, - {`"`, LiteralString, Push("string_dquote")}, - }, - "string_squote": { - {`'`, LiteralString, Pop(1)}, - {`\\\\|\\"|\\\n`, LiteralStringEscape, nil}, - {`[^$\'\\]+`, LiteralString, nil}, - {`[$\'\\]`, LiteralString, nil}, - }, - "string_dquote": { - {`"`, LiteralString, Pop(1)}, - {`\\\\|\\"|\\\n`, LiteralStringEscape, nil}, - {`&`, NameVariable, Push("validvar")}, - {`[^$&"\\]+`, LiteralString, nil}, - {`[$"\\]`, LiteralString, nil}, - }, - "validvar": { - {`[a-z_]\w{0,31}\.?`, NameVariable, Pop(1)}, - }, - "numbers": { - {`\b[+-]?([0-9]+(\.[0-9]+)?|\.[0-9]+|\.)(E[+-]?[0-9]+)?i?\b`, LiteralNumber, nil}, - }, - "special": { - {`(null|missing|_all_|_automatic_|_character_|_n_|_infile_|_name_|_null_|_numeric_|_user_|_webout_)`, KeywordConstant, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/s/sass.go b/vendor/github.com/alecthomas/chroma/lexers/s/sass.go deleted file mode 100644 index 6200f6a..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/s/sass.go +++ /dev/null @@ -1,144 +0,0 @@ -package s - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Sass lexer. -var Sass = internal.Register(MustNewLexer( - &Config{ - Name: "Sass", - Aliases: []string{"sass"}, - Filenames: []string{"*.sass"}, - MimeTypes: []string{"text/x-sass"}, - CaseInsensitive: true, - }, - Rules{ - // "root": { - // }, - "root": { - {`[ \t]*\n`, Text, nil}, - // { `[ \t]*`, ?? ??, nil }, - // { `//[^\n]*`, ?? .callback at 0x106936048> ??, Push("root") }, - // { `/\*[^\n]*`, ?? .callback at 0x1069360d0> ??, Push("root") }, - {`@import`, Keyword, Push("import")}, - {`@for`, Keyword, Push("for")}, - {`@(debug|warn|if|while)`, Keyword, Push("value")}, - {`(@mixin)( [\w-]+)`, ByGroups(Keyword, NameFunction), Push("value")}, - {`(@include)( [\w-]+)`, ByGroups(Keyword, NameDecorator), Push("value")}, - {`@extend`, Keyword, Push("selector")}, - {`@[\w-]+`, Keyword, Push("selector")}, - {`=[\w-]+`, NameFunction, Push("value")}, - {`\+[\w-]+`, NameDecorator, Push("value")}, - {`([!$][\w-]\w*)([ \t]*(?:(?:\|\|)?=|:))`, ByGroups(NameVariable, Operator), Push("value")}, - {`:`, NameAttribute, Push("old-style-attr")}, - {`(?=.+?[=:]([^a-z]|$))`, NameAttribute, Push("new-style-attr")}, - Default(Push("selector")), - }, - "single-comment": { - {`.+`, CommentSingle, nil}, - {`\n`, Text, Push("root")}, - }, - "multi-comment": { - {`.+`, CommentMultiline, nil}, - {`\n`, Text, Push("root")}, - }, - "import": { - {`[ \t]+`, Text, nil}, - {`\S+`, LiteralString, nil}, - {`\n`, Text, Push("root")}, - }, - "old-style-attr": { - {`[^\s:="\[]+`, NameAttribute, nil}, - {`#\{`, LiteralStringInterpol, Push("interpolation")}, - {`[ \t]*=`, Operator, Push("value")}, - Default(Push("value")), - }, - "new-style-attr": { - {`[^\s:="\[]+`, NameAttribute, nil}, - {`#\{`, LiteralStringInterpol, Push("interpolation")}, - {`[ \t]*[=:]`, Operator, Push("value")}, - }, - "inline-comment": { - {`(\\#|#(?=[^\n{])|\*(?=[^\n/])|[^\n#*])+`, CommentMultiline, nil}, - {`#\{`, LiteralStringInterpol, Push("interpolation")}, - {`\*/`, Comment, Pop(1)}, - }, - "value": { - {`[ \t]+`, Text, nil}, - {`[!$][\w-]+`, NameVariable, nil}, - {`url\(`, LiteralStringOther, Push("string-url")}, - {`[a-z_-][\w-]*(?=\()`, NameFunction, nil}, - {Words(``, `\b`, `align-content`, `align-items`, `align-self`, `alignment-baseline`, `all`, `animation`, `animation-delay`, `animation-direction`, `animation-duration`, `animation-fill-mode`, `animation-iteration-count`, `animation-name`, `animation-play-state`, `animation-timing-function`, `appearance`, `azimuth`, `backface-visibility`, `background`, `background-attachment`, `background-blend-mode`, `background-clip`, `background-color`, `background-image`, `background-origin`, `background-position`, `background-repeat`, `background-size`, `baseline-shift`, `bookmark-label`, `bookmark-level`, `bookmark-state`, `border`, `border-bottom`, `border-bottom-color`, `border-bottom-left-radius`, `border-bottom-right-radius`, `border-bottom-style`, `border-bottom-width`, `border-boundary`, `border-collapse`, `border-color`, `border-image`, `border-image-outset`, `border-image-repeat`, `border-image-slice`, `border-image-source`, `border-image-width`, `border-left`, `border-left-color`, `border-left-style`, `border-left-width`, `border-radius`, `border-right`, `border-right-color`, `border-right-style`, `border-right-width`, `border-spacing`, `border-style`, `border-top`, `border-top-color`, `border-top-left-radius`, `border-top-right-radius`, `border-top-style`, `border-top-width`, `border-width`, `bottom`, `box-decoration-break`, `box-shadow`, `box-sizing`, `box-snap`, `box-suppress`, `break-after`, `break-before`, `break-inside`, `caption-side`, `caret`, `caret-animation`, `caret-color`, `caret-shape`, `chains`, `clear`, `clip`, `clip-path`, `clip-rule`, `color`, `color-interpolation-filters`, `column-count`, `column-fill`, `column-gap`, `column-rule`, `column-rule-color`, `column-rule-style`, `column-rule-width`, `column-span`, `column-width`, `columns`, `content`, `counter-increment`, `counter-reset`, `counter-set`, `crop`, `cue`, `cue-after`, `cue-before`, `cursor`, `direction`, `display`, `dominant-baseline`, `elevation`, `empty-cells`, `filter`, `flex`, `flex-basis`, `flex-direction`, `flex-flow`, `flex-grow`, `flex-shrink`, `flex-wrap`, `float`, `float-defer`, `float-offset`, `float-reference`, `flood-color`, `flood-opacity`, `flow`, `flow-from`, `flow-into`, `font`, `font-family`, `font-feature-settings`, `font-kerning`, `font-language-override`, `font-size`, `font-size-adjust`, `font-stretch`, `font-style`, `font-synthesis`, `font-variant`, `font-variant-alternates`, `font-variant-caps`, `font-variant-east-asian`, `font-variant-ligatures`, `font-variant-numeric`, `font-variant-position`, `font-weight`, `footnote-display`, `footnote-policy`, `glyph-orientation-vertical`, `grid`, `grid-area`, `grid-auto-columns`, `grid-auto-flow`, `grid-auto-rows`, `grid-column`, `grid-column-end`, `grid-column-gap`, `grid-column-start`, `grid-gap`, `grid-row`, `grid-row-end`, `grid-row-gap`, `grid-row-start`, `grid-template`, `grid-template-areas`, `grid-template-columns`, `grid-template-rows`, `hanging-punctuation`, `height`, `hyphenate-character`, `hyphenate-limit-chars`, `hyphenate-limit-last`, `hyphenate-limit-lines`, `hyphenate-limit-zone`, `hyphens`, `image-orientation`, `image-resolution`, `initial-letter`, `initial-letter-align`, `initial-letter-wrap`, `isolation`, `justify-content`, `justify-items`, `justify-self`, `left`, `letter-spacing`, `lighting-color`, `line-break`, `line-grid`, `line-height`, `line-snap`, `list-style`, `list-style-image`, `list-style-position`, `list-style-type`, `margin`, `margin-bottom`, `margin-left`, `margin-right`, `margin-top`, `marker-side`, `marquee-direction`, `marquee-loop`, `marquee-speed`, `marquee-style`, `mask`, `mask-border`, `mask-border-mode`, `mask-border-outset`, `mask-border-repeat`, `mask-border-slice`, `mask-border-source`, `mask-border-width`, `mask-clip`, `mask-composite`, `mask-image`, `mask-mode`, `mask-origin`, `mask-position`, `mask-repeat`, `mask-size`, `mask-type`, `max-height`, `max-lines`, `max-width`, `min-height`, `min-width`, `mix-blend-mode`, `motion`, `motion-offset`, `motion-path`, `motion-rotation`, `move-to`, `nav-down`, `nav-left`, `nav-right`, `nav-up`, `object-fit`, `object-position`, `offset-after`, `offset-before`, `offset-end`, `offset-start`, `opacity`, `order`, `orphans`, `outline`, `outline-color`, `outline-offset`, `outline-style`, `outline-width`, `overflow`, `overflow-style`, `overflow-wrap`, `overflow-x`, `overflow-y`, `padding`, `padding-bottom`, `padding-left`, `padding-right`, `padding-top`, `page`, `page-break-after`, `page-break-before`, `page-break-inside`, `page-policy`, `pause`, `pause-after`, `pause-before`, `perspective`, `perspective-origin`, `pitch`, `pitch-range`, `play-during`, `polar-angle`, `polar-distance`, `position`, `presentation-level`, `quotes`, `region-fragment`, `resize`, `rest`, `rest-after`, `rest-before`, `richness`, `right`, `rotation`, `rotation-point`, `ruby-align`, `ruby-merge`, `ruby-position`, `running`, `scroll-snap-coordinate`, `scroll-snap-destination`, `scroll-snap-points-x`, `scroll-snap-points-y`, `scroll-snap-type`, `shape-image-threshold`, `shape-inside`, `shape-margin`, `shape-outside`, `size`, `speak`, `speak-as`, `speak-header`, `speak-numeral`, `speak-punctuation`, `speech-rate`, `stress`, `string-set`, `tab-size`, `table-layout`, `text-align`, `text-align-last`, `text-combine-upright`, `text-decoration`, `text-decoration-color`, `text-decoration-line`, `text-decoration-skip`, `text-decoration-style`, `text-emphasis`, `text-emphasis-color`, `text-emphasis-position`, `text-emphasis-style`, `text-indent`, `text-justify`, `text-orientation`, `text-overflow`, `text-shadow`, `text-space-collapse`, `text-space-trim`, `text-spacing`, `text-transform`, `text-underline-position`, `text-wrap`, `top`, `transform`, `transform-origin`, `transform-style`, `transition`, `transition-delay`, `transition-duration`, `transition-property`, `transition-timing-function`, `unicode-bidi`, `user-select`, `vertical-align`, `visibility`, `voice-balance`, `voice-duration`, `voice-family`, `voice-pitch`, `voice-range`, `voice-rate`, `voice-stress`, `voice-volume`, `volume`, `white-space`, `widows`, `width`, `will-change`, `word-break`, `word-spacing`, `word-wrap`, `wrap-after`, `wrap-before`, `wrap-flow`, `wrap-inside`, `wrap-through`, `writing-mode`, `z-index`, `above`, `absolute`, `always`, `armenian`, `aural`, `auto`, `avoid`, `baseline`, `behind`, `below`, `bidi-override`, `blink`, `block`, `bold`, `bolder`, `both`, `capitalize`, `center-left`, `center-right`, `center`, `circle`, `cjk-ideographic`, `close-quote`, `collapse`, `condensed`, `continuous`, `crop`, `crosshair`, `cross`, `cursive`, `dashed`, `decimal-leading-zero`, `decimal`, `default`, `digits`, `disc`, `dotted`, `double`, `e-resize`, `embed`, `extra-condensed`, `extra-expanded`, `expanded`, `fantasy`, `far-left`, `far-right`, `faster`, `fast`, `fixed`, `georgian`, `groove`, `hebrew`, `help`, `hidden`, `hide`, `higher`, `high`, `hiragana-iroha`, `hiragana`, `icon`, `inherit`, `inline-table`, `inline`, `inset`, `inside`, `invert`, `italic`, `justify`, `katakana-iroha`, `katakana`, `landscape`, `larger`, `large`, `left-side`, `leftwards`, `level`, `lighter`, `line-through`, `list-item`, `loud`, `lower-alpha`, `lower-greek`, `lower-roman`, `lowercase`, `ltr`, `lower`, `low`, `medium`, `message-box`, `middle`, `mix`, `monospace`, `n-resize`, `narrower`, `ne-resize`, `no-close-quote`, `no-open-quote`, `no-repeat`, `none`, `normal`, `nowrap`, `nw-resize`, `oblique`, `once`, `open-quote`, `outset`, `outside`, `overline`, `pointer`, `portrait`, `px`, `relative`, `repeat-x`, `repeat-y`, `repeat`, `rgb`, `ridge`, `right-side`, `rightwards`, `s-resize`, `sans-serif`, `scroll`, `se-resize`, `semi-condensed`, `semi-expanded`, `separate`, `serif`, `show`, `silent`, `slow`, `slower`, `small-caps`, `small-caption`, `smaller`, `soft`, `solid`, `spell-out`, `square`, `static`, `status-bar`, `super`, `sw-resize`, `table-caption`, `table-cell`, `table-column`, `table-column-group`, `table-footer-group`, `table-header-group`, `table-row`, `table-row-group`, `text`, `text-bottom`, `text-top`, `thick`, `thin`, `transparent`, `ultra-condensed`, `ultra-expanded`, `underline`, `upper-alpha`, `upper-latin`, `upper-roman`, `uppercase`, `url`, `visible`, `w-resize`, `wait`, `wider`, `x-fast`, `x-high`, `x-large`, `x-loud`, `x-low`, `x-small`, `x-soft`, `xx-large`, `xx-small`, `yes`), NameConstant, nil}, - {Words(``, `\b`, `aliceblue`, `antiquewhite`, `aqua`, `aquamarine`, `azure`, `beige`, `bisque`, `black`, `blanchedalmond`, `blue`, `blueviolet`, `brown`, `burlywood`, `cadetblue`, `chartreuse`, `chocolate`, `coral`, `cornflowerblue`, `cornsilk`, `crimson`, `cyan`, `darkblue`, `darkcyan`, `darkgoldenrod`, `darkgray`, `darkgreen`, `darkgrey`, `darkkhaki`, `darkmagenta`, `darkolivegreen`, `darkorange`, `darkorchid`, `darkred`, `darksalmon`, `darkseagreen`, `darkslateblue`, `darkslategray`, `darkslategrey`, `darkturquoise`, `darkviolet`, `deeppink`, `deepskyblue`, `dimgray`, `dimgrey`, `dodgerblue`, `firebrick`, `floralwhite`, `forestgreen`, `fuchsia`, `gainsboro`, `ghostwhite`, `gold`, `goldenrod`, `gray`, `green`, `greenyellow`, `grey`, `honeydew`, `hotpink`, `indianred`, `indigo`, `ivory`, `khaki`, `lavender`, `lavenderblush`, `lawngreen`, `lemonchiffon`, `lightblue`, `lightcoral`, `lightcyan`, `lightgoldenrodyellow`, `lightgray`, `lightgreen`, `lightgrey`, `lightpink`, `lightsalmon`, `lightseagreen`, `lightskyblue`, `lightslategray`, `lightslategrey`, `lightsteelblue`, `lightyellow`, `lime`, `limegreen`, `linen`, `magenta`, `maroon`, `mediumaquamarine`, `mediumblue`, `mediumorchid`, `mediumpurple`, `mediumseagreen`, `mediumslateblue`, `mediumspringgreen`, `mediumturquoise`, `mediumvioletred`, `midnightblue`, `mintcream`, `mistyrose`, `moccasin`, `navajowhite`, `navy`, `oldlace`, `olive`, `olivedrab`, `orange`, `orangered`, `orchid`, `palegoldenrod`, `palegreen`, `paleturquoise`, `palevioletred`, `papayawhip`, `peachpuff`, `peru`, `pink`, `plum`, `powderblue`, `purple`, `rebeccapurple`, `red`, `rosybrown`, `royalblue`, `saddlebrown`, `salmon`, `sandybrown`, `seagreen`, `seashell`, `sienna`, `silver`, `skyblue`, `slateblue`, `slategray`, `slategrey`, `snow`, `springgreen`, `steelblue`, `tan`, `teal`, `thistle`, `tomato`, `turquoise`, `violet`, `wheat`, `white`, `whitesmoke`, `yellow`, `yellowgreen`, `transparent`), NameEntity, nil}, - {Words(``, `\b`, `black`, `silver`, `gray`, `white`, `maroon`, `red`, `purple`, `fuchsia`, `green`, `lime`, `olive`, `yellow`, `navy`, `blue`, `teal`, `aqua`), NameBuiltin, nil}, - {`\!(important|default)`, NameException, nil}, - {`(true|false)`, NamePseudo, nil}, - {`(and|or|not)`, OperatorWord, nil}, - {`/\*`, CommentMultiline, Push("inline-comment")}, - {`//[^\n]*`, CommentSingle, nil}, - {`\#[a-z0-9]{1,6}`, LiteralNumberHex, nil}, - {`(-?\d+)(\%|[a-z]+)?`, ByGroups(LiteralNumberInteger, KeywordType), nil}, - {`(-?\d*\.\d+)(\%|[a-z]+)?`, ByGroups(LiteralNumberFloat, KeywordType), nil}, - {`#\{`, LiteralStringInterpol, Push("interpolation")}, - {`[~^*!&%<>|+=@:,./?-]+`, Operator, nil}, - {`[\[\]()]+`, Punctuation, nil}, - {`"`, LiteralStringDouble, Push("string-double")}, - {`'`, LiteralStringSingle, Push("string-single")}, - {`[a-z_-][\w-]*`, Name, nil}, - {`\n`, Text, Push("root")}, - }, - "interpolation": { - {`\}`, LiteralStringInterpol, Pop(1)}, - Include("value"), - }, - "selector": { - {`[ \t]+`, Text, nil}, - {`\:`, NameDecorator, Push("pseudo-class")}, - {`\.`, NameClass, Push("class")}, - {`\#`, NameNamespace, Push("id")}, - {`[\w-]+`, NameTag, nil}, - {`#\{`, LiteralStringInterpol, Push("interpolation")}, - {`&`, Keyword, nil}, - {`[~^*!&\[\]()<>|+=@:;,./?-]`, Operator, nil}, - {`"`, LiteralStringDouble, Push("string-double")}, - {`'`, LiteralStringSingle, Push("string-single")}, - {`\n`, Text, Push("root")}, - }, - "string-double": { - {`(\\.|#(?=[^\n{])|[^\n"#])+`, LiteralStringDouble, nil}, - {`#\{`, LiteralStringInterpol, Push("interpolation")}, - {`"`, LiteralStringDouble, Pop(1)}, - }, - "string-single": { - {`(\\.|#(?=[^\n{])|[^\n'#])+`, LiteralStringSingle, nil}, - {`#\{`, LiteralStringInterpol, Push("interpolation")}, - {`'`, LiteralStringSingle, Pop(1)}, - }, - "string-url": { - {`(\\#|#(?=[^\n{])|[^\n#)])+`, LiteralStringOther, nil}, - {`#\{`, LiteralStringInterpol, Push("interpolation")}, - {`\)`, LiteralStringOther, Pop(1)}, - }, - "pseudo-class": { - {`[\w-]+`, NameDecorator, nil}, - {`#\{`, LiteralStringInterpol, Push("interpolation")}, - Default(Pop(1)), - }, - "class": { - {`[\w-]+`, NameClass, nil}, - {`#\{`, LiteralStringInterpol, Push("interpolation")}, - Default(Pop(1)), - }, - "id": { - {`[\w-]+`, NameNamespace, nil}, - {`#\{`, LiteralStringInterpol, Push("interpolation")}, - Default(Pop(1)), - }, - "for": { - {`(from|to|through)`, OperatorWord, nil}, - Include("value"), - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/s/scala.go b/vendor/github.com/alecthomas/chroma/lexers/s/scala.go deleted file mode 100644 index 20932de..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/s/scala.go +++ /dev/null @@ -1,112 +0,0 @@ -package s - -import ( - "fmt" - - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -var ( - scalaOp = "[-~\\^\\*!%&\\\\<>\\|+=:/?@\xa6-\xa7\xa9\xac\xae\xb0-\xb1\xb6\xd7\xf7\u03f6\u0482\u0606-\u0608\u060e-\u060f\u06e9\u06fd-\u06fe\u07f6\u09fa\u0b70\u0bf3-\u0bf8\u0bfa\u0c7f\u0cf1-\u0cf2\u0d79\u0f01-\u0f03\u0f13-\u0f17\u0f1a-\u0f1f\u0f34\u0f36\u0f38\u0fbe-\u0fc5\u0fc7-\u0fcf\u109e-\u109f\u1360\u1390-\u1399\u1940\u19e0-\u19ff\u1b61-\u1b6a\u1b74-\u1b7c\u2044\u2052\u207a-\u207c\u208a-\u208c\u2100-\u2101\u2103-\u2106\u2108-\u2109\u2114\u2116-\u2118\u211e-\u2123\u2125\u2127\u2129\u212e\u213a-\u213b\u2140-\u2144\u214a-\u214d\u214f\u2190-\u2328\u232b-\u244a\u249c-\u24e9\u2500-\u2767\u2794-\u27c4\u27c7-\u27e5\u27f0-\u2982\u2999-\u29d7\u29dc-\u29fb\u29fe-\u2b54\u2ce5-\u2cea\u2e80-\u2ffb\u3004\u3012-\u3013\u3020\u3036-\u3037\u303e-\u303f\u3190-\u3191\u3196-\u319f\u31c0-\u31e3\u3200-\u321e\u322a-\u3250\u3260-\u327f\u328a-\u32b0\u32c0-\u33ff\u4dc0-\u4dff\ua490-\ua4c6\ua828-\ua82b\ufb29\ufdfd\ufe62\ufe64-\ufe66\uff0b\uff1c-\uff1e\uff5c\uff5e\uffe2\uffe4\uffe8-\uffee\ufffc-\ufffd]+" - scalaUpper = "[A-Z\\$_\xc0-\xd6\xd8-\xde\u0100\u0102\u0104\u0106\u0108\u010a\u010c\u010e\u0110\u0112\u0114\u0116\u0118\u011a\u011c\u011e\u0120\u0122\u0124\u0126\u0128\u012a\u012c\u012e\u0130\u0132\u0134\u0136\u0139\u013b\u013d\u013f\u0141\u0143\u0145\u0147\u014a\u014c\u014e\u0150\u0152\u0154\u0156\u0158\u015a\u015c\u015e\u0160\u0162\u0164\u0166\u0168\u016a\u016c\u016e\u0170\u0172\u0174\u0176\u0178-\u0179\u017b\u017d\u0181-\u0182\u0184\u0186-\u0187\u0189-\u018b\u018e-\u0191\u0193-\u0194\u0196-\u0198\u019c-\u019d\u019f-\u01a0\u01a2\u01a4\u01a6-\u01a7\u01a9\u01ac\u01ae-\u01af\u01b1-\u01b3\u01b5\u01b7-\u01b8\u01bc\u01c4\u01c7\u01ca\u01cd\u01cf\u01d1\u01d3\u01d5\u01d7\u01d9\u01db\u01de\u01e0\u01e2\u01e4\u01e6\u01e8\u01ea\u01ec\u01ee\u01f1\u01f4\u01f6-\u01f8\u01fa\u01fc\u01fe\u0200\u0202\u0204\u0206\u0208\u020a\u020c\u020e\u0210\u0212\u0214\u0216\u0218\u021a\u021c\u021e\u0220\u0222\u0224\u0226\u0228\u022a\u022c\u022e\u0230\u0232\u023a-\u023b\u023d-\u023e\u0241\u0243-\u0246\u0248\u024a\u024c\u024e\u0370\u0372\u0376\u0386\u0388-\u038f\u0391-\u03ab\u03cf\u03d2-\u03d4\u03d8\u03da\u03dc\u03de\u03e0\u03e2\u03e4\u03e6\u03e8\u03ea\u03ec\u03ee\u03f4\u03f7\u03f9-\u03fa\u03fd-\u042f\u0460\u0462\u0464\u0466\u0468\u046a\u046c\u046e\u0470\u0472\u0474\u0476\u0478\u047a\u047c\u047e\u0480\u048a\u048c\u048e\u0490\u0492\u0494\u0496\u0498\u049a\u049c\u049e\u04a0\u04a2\u04a4\u04a6\u04a8\u04aa\u04ac\u04ae\u04b0\u04b2\u04b4\u04b6\u04b8\u04ba\u04bc\u04be\u04c0-\u04c1\u04c3\u04c5\u04c7\u04c9\u04cb\u04cd\u04d0\u04d2\u04d4\u04d6\u04d8\u04da\u04dc\u04de\u04e0\u04e2\u04e4\u04e6\u04e8\u04ea\u04ec\u04ee\u04f0\u04f2\u04f4\u04f6\u04f8\u04fa\u04fc\u04fe\u0500\u0502\u0504\u0506\u0508\u050a\u050c\u050e\u0510\u0512\u0514\u0516\u0518\u051a\u051c\u051e\u0520\u0522\u0531-\u0556\u10a0-\u10c5\u1e00\u1e02\u1e04\u1e06\u1e08\u1e0a\u1e0c\u1e0e\u1e10\u1e12\u1e14\u1e16\u1e18\u1e1a\u1e1c\u1e1e\u1e20\u1e22\u1e24\u1e26\u1e28\u1e2a\u1e2c\u1e2e\u1e30\u1e32\u1e34\u1e36\u1e38\u1e3a\u1e3c\u1e3e\u1e40\u1e42\u1e44\u1e46\u1e48\u1e4a\u1e4c\u1e4e\u1e50\u1e52\u1e54\u1e56\u1e58\u1e5a\u1e5c\u1e5e\u1e60\u1e62\u1e64\u1e66\u1e68\u1e6a\u1e6c\u1e6e\u1e70\u1e72\u1e74\u1e76\u1e78\u1e7a\u1e7c\u1e7e\u1e80\u1e82\u1e84\u1e86\u1e88\u1e8a\u1e8c\u1e8e\u1e90\u1e92\u1e94\u1e9e\u1ea0\u1ea2\u1ea4\u1ea6\u1ea8\u1eaa\u1eac\u1eae\u1eb0\u1eb2\u1eb4\u1eb6\u1eb8\u1eba\u1ebc\u1ebe\u1ec0\u1ec2\u1ec4\u1ec6\u1ec8\u1eca\u1ecc\u1ece\u1ed0\u1ed2\u1ed4\u1ed6\u1ed8\u1eda\u1edc\u1ede\u1ee0\u1ee2\u1ee4\u1ee6\u1ee8\u1eea\u1eec\u1eee\u1ef0\u1ef2\u1ef4\u1ef6\u1ef8\u1efa\u1efc\u1efe\u1f08-\u1f0f\u1f18-\u1f1d\u1f28-\u1f2f\u1f38-\u1f3f\u1f48-\u1f4d\u1f59-\u1f5f\u1f68-\u1f6f\u1fb8-\u1fbb\u1fc8-\u1fcb\u1fd8-\u1fdb\u1fe8-\u1fec\u1ff8-\u1ffb\u2102\u2107\u210b-\u210d\u2110-\u2112\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u2130-\u2133\u213e-\u213f\u2145\u2183\u2c00-\u2c2e\u2c60\u2c62-\u2c64\u2c67\u2c69\u2c6b\u2c6d-\u2c6f\u2c72\u2c75\u2c80\u2c82\u2c84\u2c86\u2c88\u2c8a\u2c8c\u2c8e\u2c90\u2c92\u2c94\u2c96\u2c98\u2c9a\u2c9c\u2c9e\u2ca0\u2ca2\u2ca4\u2ca6\u2ca8\u2caa\u2cac\u2cae\u2cb0\u2cb2\u2cb4\u2cb6\u2cb8\u2cba\u2cbc\u2cbe\u2cc0\u2cc2\u2cc4\u2cc6\u2cc8\u2cca\u2ccc\u2cce\u2cd0\u2cd2\u2cd4\u2cd6\u2cd8\u2cda\u2cdc\u2cde\u2ce0\u2ce2\ua640\ua642\ua644\ua646\ua648\ua64a\ua64c\ua64e\ua650\ua652\ua654\ua656\ua658\ua65a\ua65c\ua65e\ua662\ua664\ua666\ua668\ua66a\ua66c\ua680\ua682\ua684\ua686\ua688\ua68a\ua68c\ua68e\ua690\ua692\ua694\ua696\ua722\ua724\ua726\ua728\ua72a\ua72c\ua72e\ua732\ua734\ua736\ua738\ua73a\ua73c\ua73e\ua740\ua742\ua744\ua746\ua748\ua74a\ua74c\ua74e\ua750\ua752\ua754\ua756\ua758\ua75a\ua75c\ua75e\ua760\ua762\ua764\ua766\ua768\ua76a\ua76c\ua76e\ua779\ua77b\ua77d-\ua77e\ua780\ua782\ua784\ua786\ua78b\uff21-\uff3a]" - scalaLetter = `[a-zA-Z\\$_ªµºÀ-ÖØ-öø-ʯͰ-ͳͶ-ͷͻ-ͽΆΈ-ϵϷ-ҁҊ-Ֆա-ևא-ײء-ؿف-يٮ-ٯٱ-ۓەۮ-ۯۺ-ۼۿܐܒ-ܯݍ-ޥޱߊ-ߪऄ-हऽॐक़-ॡॲ-ॿঅ-হঽৎড়-ৡৰ-ৱਅ-ਹਖ਼-ਫ਼ੲ-ੴઅ-હઽૐ-ૡଅ-ହଽଡ଼-ୡୱஃ-ஹௐఅ-ఽౘ-ౡಅ-ಹಽೞ-ೡഅ-ഽൠ-ൡൺ-ൿඅ-ෆก-ะา-ำเ-ๅກ-ະາ-ຳຽ-ໄໜ-ༀཀ-ཬྈ-ྋက-ဪဿၐ-ၕၚ-ၝၡၥ-ၦၮ-ၰၵ-ႁႎႠ-ჺᄀ-ፚᎀ-ᎏᎠ-ᙬᙯ-ᙶᚁ-ᚚᚠ-ᛪᛮ-ᜑᜠ-ᜱᝀ-ᝑᝠ-ᝰក-ឳៜᠠ-ᡂᡄ-ᢨᢪ-ᤜᥐ-ᦩᧁ-ᧇᨀ-ᨖᬅ-ᬳᭅ-ᭋᮃ-ᮠᮮ-ᮯᰀ-ᰣᱍ-ᱏᱚ-ᱷᴀ-ᴫᵢ-ᵷᵹ-ᶚḀ-ᾼιῂ-ῌῐ-Ίῠ-Ῥῲ-ῼⁱⁿℂℇℊ-ℓℕℙ-ℝℤΩℨK-ℭℯ-ℹℼ-ℿⅅ-ⅉⅎⅠ-ↈⰀ-ⱼⲀ-ⳤⴀ-ⵥⶀ-ⷞ〆-〇〡-〩〸-〺〼ぁ-ゖゟァ-ヺヿ-ㆎㆠ-ㆷㇰ-ㇿ㐀-䶵一-ꀔꀖ-ꒌꔀ-ꘋꘐ-ꘟꘪ-ꙮꚀ-ꚗꜢ-ꝯꝱ-ꞇꞋ-ꠁꠃ-ꠅꠇ-ꠊꠌ-ꠢꡀ-ꡳꢂ-ꢳꤊ-ꤥꤰ-ꥆꨀ-ꨨꩀ-ꩂꩄ-ꩋ가-힣豈-יִײַ-ﬨשׁ-ﴽﵐ-ﷻﹰ-ﻼA-Za-zヲ-ッア-ンᅠ-ᅵ]` - scalaIDRest = fmt.Sprintf(`%s(?:%s|[0-9])*(?:(?<=_)%s)?`, scalaLetter, scalaLetter, scalaOp) -) - -// Scala lexer. -var Scala = internal.Register(MustNewLexer( - &Config{ - Name: "Scala", - Aliases: []string{"scala"}, - Filenames: []string{"*.scala"}, - MimeTypes: []string{"text/x-scala"}, - DotAll: true, - }, - Rules{ - "root": { - {`(class|trait|object)(\s+)`, ByGroups(Keyword, Text), Push("class")}, - {`[^\S\n]+`, Text, nil}, - {`//.*?\n`, CommentSingle, nil}, - {`/\*`, CommentMultiline, Push("comment")}, - {`@` + scalaIDRest, NameDecorator, nil}, - {`(abstract|ca(?:se|tch)|d(?:ef|o)|e(?:lse|xtends)|f(?:inal(?:ly)?|or(?:Some)?)|i(?:f|mplicit)|lazy|match|new|override|pr(?:ivate|otected)|re(?:quires|turn)|s(?:ealed|uper)|t(?:h(?:is|row)|ry)|va[lr]|w(?:hile|ith)|yield)\b|(<[%:-]|=>|>:|[#=@_⇒←])(\b|(?=\s)|$)`, Keyword, nil}, - {`:(?!` + scalaOp + `%s)`, Keyword, Push("type")}, - {fmt.Sprintf("%s%s\\b", scalaUpper, scalaIDRest), NameClass, nil}, - {`(true|false|null)\b`, KeywordConstant, nil}, - {`(import|package)(\s+)`, ByGroups(Keyword, Text), Push("import")}, - {`(type)(\s+)`, ByGroups(Keyword, Text), Push("type")}, - {`""".*?"""(?!")`, LiteralString, nil}, - {`"(\\\\|\\"|[^"])*"`, LiteralString, nil}, - {`'\\.'|'[^\\]'|'\\u[0-9a-fA-F]{4}'`, LiteralStringChar, nil}, - {"'" + scalaIDRest, TextSymbol, nil}, - {`[fs]"""`, LiteralString, Push("interptriplestring")}, - {`[fs]"`, LiteralString, Push("interpstring")}, - {`raw"(\\\\|\\"|[^"])*"`, LiteralString, nil}, - {scalaIDRest, Name, nil}, - {"`[^`]+`", Name, nil}, - {`\[`, Operator, Push("typeparam")}, - {`[(){};,.#]`, Operator, nil}, - {scalaOp, Operator, nil}, - {`([0-9][0-9]*\.[0-9]*|\.[0-9]+)([eE][+-]?[0-9]+)?[fFdD]?`, LiteralNumberFloat, nil}, - {`0x[0-9a-fA-F]+`, LiteralNumberHex, nil}, - {`[0-9]+L?`, LiteralNumberInteger, nil}, - {`\n`, Text, nil}, - }, - "class": { - {fmt.Sprintf("(%s|%s|`[^`]+`)(\\s*)(\\[)", scalaIDRest, scalaOp), ByGroups(NameClass, Text, Operator), Push("typeparam")}, - {`\s+`, Text, nil}, - {`\{`, Operator, Pop(1)}, - {`\(`, Operator, Pop(1)}, - {`//.*?\n`, CommentSingle, Pop(1)}, - {fmt.Sprintf("%s|%s|`[^`]+`", scalaIDRest, scalaOp), NameClass, Pop(1)}, - }, - "type": { - {`\s+`, Text, nil}, - {`<[%:]|>:|[#_]|forSome|type`, Keyword, nil}, - {`([,);}]|=>|=|⇒)(\s*)`, ByGroups(Operator, Text), Pop(1)}, - {`[({]`, Operator, Push()}, - {fmt.Sprintf("((?:%s|%s|`[^`]+`)(?:\\.(?:%s|%s|`[^`]+`))*)(\\s*)(\\[)", scalaIDRest, scalaOp, scalaIDRest, scalaOp), ByGroups(KeywordType, Text, Operator), Push("#pop", "typeparam")}, - {fmt.Sprintf("((?:%s|%s|`[^`]+`)(?:\\.(?:%s|%s|`[^`]+`))*)(\\s*)$", scalaIDRest, scalaOp, scalaIDRest, scalaOp), ByGroups(KeywordType, Text), Pop(1)}, - {`//.*?\n`, CommentSingle, Pop(1)}, - {fmt.Sprintf("\\.|%s|%s|`[^`]+`", scalaIDRest, scalaOp), KeywordType, nil}, - }, - "typeparam": { - {`[\s,]+`, Text, nil}, - {`<[%:]|=>|>:|[#_⇒]|forSome|type`, Keyword, nil}, - {`([\])}])`, Operator, Pop(1)}, - {`[(\[{]`, Operator, Push()}, - {fmt.Sprintf("\\.|%s|%s|`[^`]+`", scalaIDRest, scalaOp), KeywordType, nil}, - }, - "comment": { - {`[^/*]+`, CommentMultiline, nil}, - {`/\*`, CommentMultiline, Push()}, - {`\*/`, CommentMultiline, Pop(1)}, - {`[*/]`, CommentMultiline, nil}, - }, - "import": { - {fmt.Sprintf("(%s|\\.)+", scalaIDRest), NameNamespace, Pop(1)}, - }, - "interpstringcommon": { - {`[^"$\\]+`, LiteralString, nil}, - {`\$\$`, LiteralString, nil}, - {`\$` + scalaLetter + `(?:` + scalaLetter + `|\d)*`, LiteralStringInterpol, nil}, - {`\$\{`, LiteralStringInterpol, Push("interpbrace")}, - {`\\.`, LiteralString, nil}, - }, - "interptriplestring": { - {`"""(?!")`, LiteralString, Pop(1)}, - {`"`, LiteralString, nil}, - Include("interpstringcommon"), - }, - "interpstring": { - {`"`, LiteralString, Pop(1)}, - Include("interpstringcommon"), - }, - "interpbrace": { - {`\}`, LiteralStringInterpol, Pop(1)}, - {`\{`, LiteralStringInterpol, Push()}, - Include("root"), - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/s/scheme.go b/vendor/github.com/alecthomas/chroma/lexers/s/scheme.go deleted file mode 100644 index b721d68..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/s/scheme.go +++ /dev/null @@ -1,53 +0,0 @@ -package s - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// nolint - -// Scheme lexer. -var SchemeLang = internal.Register(MustNewLexer( - &Config{ - Name: "Scheme", - Aliases: []string{"scheme", "scm"}, - Filenames: []string{"*.scm", "*.ss"}, - MimeTypes: []string{"text/x-scheme", "application/x-scheme"}, - }, - Rules{ - "root": { - {`;.*$`, CommentSingle, nil}, - {`#\|`, CommentMultiline, Push("multiline-comment")}, - {`#;\s*\(`, Comment, Push("commented-form")}, - {`#!r6rs`, Comment, nil}, - {`\s+`, Text, nil}, - {`-?\d+\.\d+`, LiteralNumberFloat, nil}, - {`-?\d+`, LiteralNumberInteger, nil}, - {`"(\\\\|\\"|[^"])*"`, LiteralString, nil}, - {`'[\w!$%&*+,/:<=>?@^~|-]+`, LiteralStringSymbol, nil}, - {`#\\([()/'\"._!§$%& ?=+-]|[a-zA-Z0-9]+)`, LiteralStringChar, nil}, - {`(#t|#f)`, NameConstant, nil}, - {"('|#|`|,@|,|\\.)", Operator, nil}, - {`(lambda |define |if |else |cond |and |or |case |let |let\* |letrec |begin |do |delay |set\! |\=\> |quote |quasiquote |unquote |unquote\-splicing |define\-syntax |let\-syntax |letrec\-syntax |syntax\-rules )`, Keyword, nil}, - {`(?<='\()[\w!$%&*+,/:<=>?@^~|-]+`, NameVariable, nil}, - {`(?<=#\()[\w!$%&*+,/:<=>?@^~|-]+`, NameVariable, nil}, - {`(?<=\()(\* |\+ |\- |\/ |\< |\<\= |\= |\> |\>\= |abs |acos |angle |append |apply |asin |assoc |assq |assv |atan |boolean\? |caaaar |caaadr |caaar |caadar |caaddr |caadr |caar |cadaar |cadadr |cadar |caddar |cadddr |caddr |cadr |call\-with\-current\-continuation |call\-with\-input\-file |call\-with\-output\-file |call\-with\-values |call\/cc |car |cdaaar |cdaadr |cdaar |cdadar |cdaddr |cdadr |cdar |cddaar |cddadr |cddar |cdddar |cddddr |cdddr |cddr |cdr |ceiling |char\-\>integer |char\-alphabetic\? |char\-ci\<\=\? |char\-ci\<\? |char\-ci\=\? |char\-ci\>\=\? |char\-ci\>\? |char\-downcase |char\-lower\-case\? |char\-numeric\? |char\-ready\? |char\-upcase |char\-upper\-case\? |char\-whitespace\? |char\<\=\? |char\<\? |char\=\? |char\>\=\? |char\>\? |char\? |close\-input\-port |close\-output\-port |complex\? |cons |cos |current\-input\-port |current\-output\-port |denominator |display |dynamic\-wind |eof\-object\? |eq\? |equal\? |eqv\? |eval |even\? |exact\-\>inexact |exact\? |exp |expt |floor |for\-each |force |gcd |imag\-part |inexact\-\>exact |inexact\? |input\-port\? |integer\-\>char |integer\? |interaction\-environment |lcm |length |list |list\-\>string |list\-\>vector |list\-ref |list\-tail |list\? |load |log |magnitude |make\-polar |make\-rectangular |make\-string |make\-vector |map |max |member |memq |memv |min |modulo |negative\? |newline |not |null\-environment |null\? |number\-\>string |number\? |numerator |odd\? |open\-input\-file |open\-output\-file |output\-port\? |pair\? |peek\-char |port\? |positive\? |procedure\? |quotient |rational\? |rationalize |read |read\-char |real\-part |real\? |remainder |reverse |round |scheme\-report\-environment |set\-car\! |set\-cdr\! |sin |sqrt |string |string\-\>list |string\-\>number |string\-\>symbol |string\-append |string\-ci\<\=\? |string\-ci\<\? |string\-ci\=\? |string\-ci\>\=\? |string\-ci\>\? |string\-copy |string\-fill\! |string\-length |string\-ref |string\-set\! |string\<\=\? |string\<\? |string\=\? |string\>\=\? |string\>\? |string\? |substring |symbol\-\>string |symbol\? |tan |transcript\-off |transcript\-on |truncate |values |vector |vector\-\>list |vector\-fill\! |vector\-length |vector\-ref |vector\-set\! |vector\? |with\-input\-from\-file |with\-output\-to\-file |write |write\-char |zero\? )`, NameBuiltin, nil}, - {`(?<=\()[\w!$%&*+,/:<=>?@^~|-]+`, NameFunction, nil}, - {`[\w!$%&*+,/:<=>?@^~|-]+`, NameVariable, nil}, - {`(\(|\))`, Punctuation, nil}, - {`(\[|\])`, Punctuation, nil}, - }, - "multiline-comment": { - {`#\|`, CommentMultiline, Push()}, - {`\|#`, CommentMultiline, Pop(1)}, - {`[^|#]+`, CommentMultiline, nil}, - {`[|#]`, CommentMultiline, nil}, - }, - "commented-form": { - {`\(`, Comment, Push()}, - {`\)`, Comment, Pop(1)}, - {`[^()]+`, Comment, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/s/scilab.go b/vendor/github.com/alecthomas/chroma/lexers/s/scilab.go deleted file mode 100644 index 87fa66c..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/s/scilab.go +++ /dev/null @@ -1,44 +0,0 @@ -package s - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Scilab lexer. -var Scilab = internal.Register(MustNewLexer( - &Config{ - Name: "Scilab", - Aliases: []string{"scilab"}, - Filenames: []string{"*.sci", "*.sce", "*.tst"}, - MimeTypes: []string{"text/scilab"}, - }, - Rules{ - "root": { - {`//.*?$`, CommentSingle, nil}, - {`^\s*function`, Keyword, Push("deffunc")}, - {Words(``, `\b`, `__FILE__`, `__LINE__`, `break`, `case`, `catch`, `classdef`, `continue`, `do`, `else`, `elseif`, `end`, `end_try_catch`, `end_unwind_protect`, `endclassdef`, `endevents`, `endfor`, `endfunction`, `endif`, `endmethods`, `endproperties`, `endswitch`, `endwhile`, `events`, `for`, `function`, `get`, `global`, `if`, `methods`, `otherwise`, `persistent`, `properties`, `return`, `set`, `static`, `switch`, `try`, `until`, `unwind_protect`, `unwind_protect_cleanup`, `while`), Keyword, nil}, - {Words(``, `\b`, `!!_invoke_`, `%H5Object_e`, `%H5Object_fieldnames`, `%H5Object_p`, `%XMLAttr_6`, `%XMLAttr_e`, `%XMLAttr_i_XMLElem`, `%XMLAttr_length`, `%XMLAttr_p`, `%XMLAttr_size`, `%XMLDoc_6`, `%XMLDoc_e`, `%XMLDoc_i_XMLList`, `%XMLDoc_p`, `%XMLElem_6`, `%XMLElem_e`, `%XMLElem_i_XMLDoc`, `%XMLElem_i_XMLElem`, `%XMLElem_i_XMLList`, `%XMLElem_p`, `%XMLList_6`, `%XMLList_e`, `%XMLList_i_XMLElem`, `%XMLList_i_XMLList`, `%XMLList_length`, `%XMLList_p`, `%XMLList_size`, `%XMLNs_6`, `%XMLNs_e`, `%XMLNs_i_XMLElem`, `%XMLNs_p`, `%XMLSet_6`, `%XMLSet_e`, `%XMLSet_length`, `%XMLSet_p`, `%XMLSet_size`, `%XMLValid_p`, `%_EClass_6`, `%_EClass_e`, `%_EClass_p`, `%_EObj_0`, `%_EObj_1__EObj`, `%_EObj_1_b`, `%_EObj_1_c`, `%_EObj_1_i`, `%_EObj_1_s`, `%_EObj_2__EObj`, `%_EObj_2_b`, `%_EObj_2_c`, `%_EObj_2_i`, `%_EObj_2_s`, `%_EObj_3__EObj`, `%_EObj_3_b`, `%_EObj_3_c`, `%_EObj_3_i`, `%_EObj_3_s`, `%_EObj_4__EObj`, `%_EObj_4_b`, `%_EObj_4_c`, `%_EObj_4_i`, `%_EObj_4_s`, `%_EObj_5`, `%_EObj_6`, `%_EObj_a__EObj`, `%_EObj_a_b`, `%_EObj_a_c`, `%_EObj_a_i`, `%_EObj_a_s`, `%_EObj_d__EObj`, `%_EObj_d_b`, `%_EObj_d_c`, `%_EObj_d_i`, `%_EObj_d_s`, `%_EObj_disp`, `%_EObj_e`, `%_EObj_g__EObj`, `%_EObj_g_b`, `%_EObj_g_c`, `%_EObj_g_i`, `%_EObj_g_s`, `%_EObj_h__EObj`, `%_EObj_h_b`, `%_EObj_h_c`, `%_EObj_h_i`, `%_EObj_h_s`, `%_EObj_i__EObj`, `%_EObj_j__EObj`, `%_EObj_j_b`, `%_EObj_j_c`, `%_EObj_j_i`, `%_EObj_j_s`, `%_EObj_k__EObj`, `%_EObj_k_b`, `%_EObj_k_c`, `%_EObj_k_i`, `%_EObj_k_s`, `%_EObj_l__EObj`, `%_EObj_l_b`, `%_EObj_l_c`, `%_EObj_l_i`, `%_EObj_l_s`, `%_EObj_m__EObj`, `%_EObj_m_b`, `%_EObj_m_c`, `%_EObj_m_i`, `%_EObj_m_s`, `%_EObj_n__EObj`, `%_EObj_n_b`, `%_EObj_n_c`, `%_EObj_n_i`, `%_EObj_n_s`, `%_EObj_o__EObj`, `%_EObj_o_b`, `%_EObj_o_c`, `%_EObj_o_i`, `%_EObj_o_s`, `%_EObj_p`, `%_EObj_p__EObj`, `%_EObj_p_b`, `%_EObj_p_c`, `%_EObj_p_i`, `%_EObj_p_s`, `%_EObj_q__EObj`, `%_EObj_q_b`, `%_EObj_q_c`, `%_EObj_q_i`, `%_EObj_q_s`, `%_EObj_r__EObj`, `%_EObj_r_b`, `%_EObj_r_c`, `%_EObj_r_i`, `%_EObj_r_s`, `%_EObj_s__EObj`, `%_EObj_s_b`, `%_EObj_s_c`, `%_EObj_s_i`, `%_EObj_s_s`, `%_EObj_t`, `%_EObj_x__EObj`, `%_EObj_x_b`, `%_EObj_x_c`, `%_EObj_x_i`, `%_EObj_x_s`, `%_EObj_y__EObj`, `%_EObj_y_b`, `%_EObj_y_c`, `%_EObj_y_i`, `%_EObj_y_s`, `%_EObj_z__EObj`, `%_EObj_z_b`, `%_EObj_z_c`, `%_EObj_z_i`, `%_EObj_z_s`, `%_eigs`, `%_load`, `%b_1__EObj`, `%b_2__EObj`, `%b_3__EObj`, `%b_4__EObj`, `%b_a__EObj`, `%b_d__EObj`, `%b_g__EObj`, `%b_h__EObj`, `%b_i_XMLList`, `%b_i__EObj`, `%b_j__EObj`, `%b_k__EObj`, `%b_l__EObj`, `%b_m__EObj`, `%b_n__EObj`, `%b_o__EObj`, `%b_p__EObj`, `%b_q__EObj`, `%b_r__EObj`, `%b_s__EObj`, `%b_x__EObj`, `%b_y__EObj`, `%b_z__EObj`, `%c_1__EObj`, `%c_2__EObj`, `%c_3__EObj`, `%c_4__EObj`, `%c_a__EObj`, `%c_d__EObj`, `%c_g__EObj`, `%c_h__EObj`, `%c_i_XMLAttr`, `%c_i_XMLDoc`, `%c_i_XMLElem`, `%c_i_XMLList`, `%c_i__EObj`, `%c_j__EObj`, `%c_k__EObj`, `%c_l__EObj`, `%c_m__EObj`, `%c_n__EObj`, `%c_o__EObj`, `%c_p__EObj`, `%c_q__EObj`, `%c_r__EObj`, `%c_s__EObj`, `%c_x__EObj`, `%c_y__EObj`, `%c_z__EObj`, `%ce_i_XMLList`, `%fptr_i_XMLList`, `%h_i_XMLList`, `%hm_i_XMLList`, `%i_1__EObj`, `%i_2__EObj`, `%i_3__EObj`, `%i_4__EObj`, `%i_a__EObj`, `%i_abs`, `%i_cumprod`, `%i_cumsum`, `%i_d__EObj`, `%i_diag`, `%i_g__EObj`, `%i_h__EObj`, `%i_i_XMLList`, `%i_i__EObj`, `%i_j__EObj`, `%i_k__EObj`, `%i_l__EObj`, `%i_m__EObj`, `%i_matrix`, `%i_max`, `%i_maxi`, `%i_min`, `%i_mini`, `%i_mput`, `%i_n__EObj`, `%i_o__EObj`, `%i_p`, `%i_p__EObj`, `%i_prod`, `%i_q__EObj`, `%i_r__EObj`, `%i_s__EObj`, `%i_sum`, `%i_tril`, `%i_triu`, `%i_x__EObj`, `%i_y__EObj`, `%i_z__EObj`, `%ip_i_XMLList`, `%l_i_XMLList`, `%l_i__EObj`, `%lss_i_XMLList`, `%mc_i_XMLList`, `%msp_full`, `%msp_i_XMLList`, `%msp_spget`, `%p_i_XMLList`, `%ptr_i_XMLList`, `%r_i_XMLList`, `%s_1__EObj`, `%s_2__EObj`, `%s_3__EObj`, `%s_4__EObj`, `%s_a__EObj`, `%s_d__EObj`, `%s_g__EObj`, `%s_h__EObj`, `%s_i_XMLList`, `%s_i__EObj`, `%s_j__EObj`, `%s_k__EObj`, `%s_l__EObj`, `%s_m__EObj`, `%s_n__EObj`, `%s_o__EObj`, `%s_p__EObj`, `%s_q__EObj`, `%s_r__EObj`, `%s_s__EObj`, `%s_x__EObj`, `%s_y__EObj`, `%s_z__EObj`, `%sp_i_XMLList`, `%spb_i_XMLList`, `%st_i_XMLList`, `Calendar`, `ClipBoard`, `Matplot`, `Matplot1`, `PlaySound`, `TCL_DeleteInterp`, `TCL_DoOneEvent`, `TCL_EvalFile`, `TCL_EvalStr`, `TCL_ExistArray`, `TCL_ExistInterp`, `TCL_ExistVar`, `TCL_GetVar`, `TCL_GetVersion`, `TCL_SetVar`, `TCL_UnsetVar`, `TCL_UpVar`, `_`, `_code2str`, `_d`, `_str2code`, `about`, `abs`, `acos`, `addModulePreferences`, `addcolor`, `addf`, `addhistory`, `addinter`, `addlocalizationdomain`, `amell`, `and`, `argn`, `arl2_ius`, `ascii`, `asin`, `atan`, `backslash`, `balanc`, `banner`, `base2dec`, `basename`, `bdiag`, `beep`, `besselh`, `besseli`, `besselj`, `besselk`, `bessely`, `beta`, `bezout`, `bfinit`, `blkfc1i`, `blkslvi`, `bool2s`, `browsehistory`, `browsevar`, `bsplin3val`, `buildDoc`, `buildouttb`, `bvode`, `c_link`, `call`, `callblk`, `captions`, `cd`, `cdfbet`, `cdfbin`, `cdfchi`, `cdfchn`, `cdff`, `cdffnc`, `cdfgam`, `cdfnbn`, `cdfnor`, `cdfpoi`, `cdft`, `ceil`, `champ`, `champ1`, `chdir`, `chol`, `clc`, `clean`, `clear`, `clearfun`, `clearglobal`, `closeEditor`, `closeEditvar`, `closeXcos`, `code2str`, `coeff`, `color`, `comp`, `completion`, `conj`, `contour2di`, `contr`, `conv2`, `convstr`, `copy`, `copyfile`, `corr`, `cos`, `coserror`, `createdir`, `cshep2d`, `csvDefault`, `csvIsnum`, `csvRead`, `csvStringToDouble`, `csvTextScan`, `csvWrite`, `ctree2`, `ctree3`, `ctree4`, `cumprod`, `cumsum`, `curblock`, `curblockc`, `daskr`, `dasrt`, `dassl`, `data2sig`, `datatipCreate`, `datatipManagerMode`, `datatipMove`, `datatipRemove`, `datatipSetDisplay`, `datatipSetInterp`, `datatipSetOrientation`, `datatipSetStyle`, `datatipToggle`, `dawson`, `dct`, `debug`, `dec2base`, `deff`, `definedfields`, `degree`, `delbpt`, `delete`, `deletefile`, `delip`, `delmenu`, `det`, `dgettext`, `dhinf`, `diag`, `diary`, `diffobjs`, `disp`, `dispbpt`, `displayhistory`, `disposefftwlibrary`, `dlgamma`, `dnaupd`, `dneupd`, `double`, `drawaxis`, `drawlater`, `drawnow`, `driver`, `dsaupd`, `dsearch`, `dseupd`, `dst`, `duplicate`, `editvar`, `emptystr`, `end_scicosim`, `ereduc`, `erf`, `erfc`, `erfcx`, `erfi`, `errcatch`, `errclear`, `error`, `eval_cshep2d`, `exec`, `execstr`, `exists`, `exit`, `exp`, `expm`, `exportUI`, `export_to_hdf5`, `eye`, `fadj2sp`, `fec`, `feval`, `fft`, `fftw`, `fftw_flags`, `fftw_forget_wisdom`, `fftwlibraryisloaded`, `figure`, `file`, `filebrowser`, `fileext`, `fileinfo`, `fileparts`, `filesep`, `find`, `findBD`, `findfiles`, `fire_closing_finished`, `floor`, `format`, `fort`, `fprintfMat`, `freq`, `frexp`, `fromc`, `fromjava`, `fscanfMat`, `fsolve`, `fstair`, `full`, `fullpath`, `funcprot`, `funptr`, `gamma`, `gammaln`, `geom3d`, `get`, `getURL`, `get_absolute_file_path`, `get_fftw_wisdom`, `getblocklabel`, `getcallbackobject`, `getdate`, `getdebuginfo`, `getdefaultlanguage`, `getdrives`, `getdynlibext`, `getenv`, `getfield`, `gethistory`, `gethistoryfile`, `getinstalledlookandfeels`, `getio`, `getlanguage`, `getlongpathname`, `getlookandfeel`, `getmd5`, `getmemory`, `getmodules`, `getos`, `getpid`, `getrelativefilename`, `getscicosvars`, `getscilabmode`, `getshortpathname`, `gettext`, `getvariablesonstack`, `getversion`, `glist`, `global`, `glue`, `grand`, `graphicfunction`, `grayplot`, `grep`, `gsort`, `gstacksize`, `h5attr`, `h5close`, `h5cp`, `h5dataset`, `h5dump`, `h5exists`, `h5flush`, `h5get`, `h5group`, `h5isArray`, `h5isAttr`, `h5isCompound`, `h5isFile`, `h5isGroup`, `h5isList`, `h5isRef`, `h5isSet`, `h5isSpace`, `h5isType`, `h5isVlen`, `h5label`, `h5ln`, `h5ls`, `h5mount`, `h5mv`, `h5open`, `h5read`, `h5readattr`, `h5rm`, `h5umount`, `h5write`, `h5writeattr`, `havewindow`, `helpbrowser`, `hess`, `hinf`, `historymanager`, `historysize`, `host`, `htmlDump`, `htmlRead`, `htmlReadStr`, `htmlWrite`, `iconvert`, `ieee`, `ilib_verbose`, `imag`, `impl`, `import_from_hdf5`, `imult`, `inpnvi`, `int`, `int16`, `int2d`, `int32`, `int3d`, `int8`, `interp`, `interp2d`, `interp3d`, `intg`, `intppty`, `inttype`, `inv`, `invoke_lu`, `is_handle_valid`, `is_hdf5_file`, `isalphanum`, `isascii`, `isdef`, `isdigit`, `isdir`, `isequal`, `isequalbitwise`, `iserror`, `isfile`, `isglobal`, `isletter`, `isnum`, `isreal`, `iswaitingforinput`, `jallowClassReloading`, `jarray`, `jautoTranspose`, `jautoUnwrap`, `javaclasspath`, `javalibrarypath`, `jcast`, `jcompile`, `jconvMatrixMethod`, `jcreatejar`, `jdeff`, `jdisableTrace`, `jenableTrace`, `jexists`, `jgetclassname`, `jgetfield`, `jgetfields`, `jgetinfo`, `jgetmethods`, `jimport`, `jinvoke`, `jinvoke_db`, `jnewInstance`, `jremove`, `jsetfield`, `junwrap`, `junwraprem`, `jwrap`, `jwrapinfloat`, `kron`, `lasterror`, `ldiv`, `ldivf`, `legendre`, `length`, `lib`, `librarieslist`, `libraryinfo`, `light`, `linear_interpn`, `lines`, `link`, `linmeq`, `list`, `listvar_in_hdf5`, `load`, `loadGui`, `loadScicos`, `loadXcos`, `loadfftwlibrary`, `loadhistory`, `log`, `log1p`, `lsq`, `lsq_splin`, `lsqrsolve`, `lsslist`, `lstcat`, `lstsize`, `ltitr`, `lu`, `ludel`, `lufact`, `luget`, `lusolve`, `macr2lst`, `macr2tree`, `matfile_close`, `matfile_listvar`, `matfile_open`, `matfile_varreadnext`, `matfile_varwrite`, `matrix`, `max`, `maxfiles`, `mclearerr`, `mclose`, `meof`, `merror`, `messagebox`, `mfprintf`, `mfscanf`, `mget`, `mgeti`, `mgetl`, `mgetstr`, `min`, `mlist`, `mode`, `model2blk`, `mopen`, `move`, `movefile`, `mprintf`, `mput`, `mputl`, `mputstr`, `mscanf`, `mseek`, `msprintf`, `msscanf`, `mtell`, `mtlb_mode`, `mtlb_sparse`, `mucomp`, `mulf`, `name2rgb`, `nearfloat`, `newaxes`, `newest`, `newfun`, `nnz`, `norm`, `notify`, `number_properties`, `ode`, `odedc`, `ones`, `openged`, `opentk`, `optim`, `or`, `ordmmd`, `parallel_concurrency`, `parallel_run`, `param3d`, `param3d1`, `part`, `pathconvert`, `pathsep`, `phase_simulation`, `plot2d`, `plot2d1`, `plot2d2`, `plot2d3`, `plot2d4`, `plot3d`, `plot3d1`, `plotbrowser`, `pointer_xproperty`, `poly`, `ppol`, `pppdiv`, `predef`, `preferences`, `print`, `printf`, `printfigure`, `printsetupbox`, `prod`, `progressionbar`, `prompt`, `pwd`, `qld`, `qp_solve`, `qr`, `raise_window`, `rand`, `rankqr`, `rat`, `rcond`, `rdivf`, `read`, `read4b`, `read_csv`, `readb`, `readgateway`, `readmps`, `real`, `realtime`, `realtimeinit`, `regexp`, `relocate_handle`, `remez`, `removeModulePreferences`, `removedir`, `removelinehistory`, `res_with_prec`, `resethistory`, `residu`, `resume`, `return`, `ricc`, `rlist`, `roots`, `rotate_axes`, `round`, `rpem`, `rtitr`, `rubberbox`, `save`, `saveGui`, `saveafterncommands`, `saveconsecutivecommands`, `savehistory`, `schur`, `sci_haltscicos`, `sci_tree2`, `sci_tree3`, `sci_tree4`, `sciargs`, `scicos_debug`, `scicos_debug_count`, `scicos_time`, `scicosim`, `scinotes`, `sctree`, `semidef`, `set`, `set_blockerror`, `set_fftw_wisdom`, `set_xproperty`, `setbpt`, `setdefaultlanguage`, `setenv`, `setfield`, `sethistoryfile`, `setlanguage`, `setlookandfeel`, `setmenu`, `sfact`, `sfinit`, `show_window`, `sident`, `sig2data`, `sign`, `simp`, `simp_mode`, `sin`, `size`, `slash`, `sleep`, `sorder`, `sparse`, `spchol`, `spcompack`, `spec`, `spget`, `splin`, `splin2d`, `splin3d`, `splitURL`, `spones`, `sprintf`, `sqrt`, `stacksize`, `str2code`, `strcat`, `strchr`, `strcmp`, `strcspn`, `strindex`, `string`, `stringbox`, `stripblanks`, `strncpy`, `strrchr`, `strrev`, `strsplit`, `strspn`, `strstr`, `strsubst`, `strtod`, `strtok`, `subf`, `sum`, `svd`, `swap_handles`, `symfcti`, `syredi`, `system_getproperty`, `system_setproperty`, `ta2lpd`, `tan`, `taucs_chdel`, `taucs_chfact`, `taucs_chget`, `taucs_chinfo`, `taucs_chsolve`, `tempname`, `testmatrix`, `timer`, `tlist`, `tohome`, `tokens`, `toolbar`, `toprint`, `tr_zer`, `tril`, `triu`, `type`, `typename`, `uiDisplayTree`, `uicontextmenu`, `uicontrol`, `uigetcolor`, `uigetdir`, `uigetfile`, `uigetfont`, `uimenu`, `uint16`, `uint32`, `uint8`, `uipopup`, `uiputfile`, `uiwait`, `ulink`, `umf_ludel`, `umf_lufact`, `umf_luget`, `umf_luinfo`, `umf_lusolve`, `umfpack`, `unglue`, `unix`, `unsetmenu`, `unzoom`, `updatebrowsevar`, `usecanvas`, `useeditor`, `user`, `var2vec`, `varn`, `vec2var`, `waitbar`, `warnBlockByUID`, `warning`, `what`, `where`, `whereis`, `who`, `winsid`, `with_module`, `writb`, `write`, `write4b`, `write_csv`, `x_choose`, `x_choose_modeless`, `x_dialog`, `x_mdialog`, `xarc`, `xarcs`, `xarrows`, `xchange`, `xchoicesi`, `xclick`, `xcos`, `xcosAddToolsMenu`, `xcosConfigureXmlFile`, `xcosDiagramToScilab`, `xcosPalCategoryAdd`, `xcosPalDelete`, `xcosPalDisable`, `xcosPalEnable`, `xcosPalGenerateIcon`, `xcosPalGet`, `xcosPalLoad`, `xcosPalMove`, `xcosSimulationStarted`, `xcosUpdateBlock`, `xdel`, `xend`, `xfarc`, `xfarcs`, `xfpoly`, `xfpolys`, `xfrect`, `xget`, `xgetmouse`, `xgraduate`, `xgrid`, `xinit`, `xlfont`, `xls_open`, `xls_read`, `xmlAddNs`, `xmlAppend`, `xmlAsNumber`, `xmlAsText`, `xmlDTD`, `xmlDelete`, `xmlDocument`, `xmlDump`, `xmlElement`, `xmlFormat`, `xmlGetNsByHref`, `xmlGetNsByPrefix`, `xmlGetOpenDocs`, `xmlIsValidObject`, `xmlName`, `xmlNs`, `xmlRead`, `xmlReadStr`, `xmlRelaxNG`, `xmlRemove`, `xmlSchema`, `xmlSetAttributes`, `xmlValidate`, `xmlWrite`, `xmlXPath`, `xname`, `xpause`, `xpoly`, `xpolys`, `xrect`, `xrects`, `xs2bmp`, `xs2emf`, `xs2eps`, `xs2gif`, `xs2jpg`, `xs2pdf`, `xs2png`, `xs2ppm`, `xs2ps`, `xs2svg`, `xsegs`, `xset`, `xstring`, `xstringb`, `xtitle`, `zeros`, `znaupd`, `zneupd`, `zoom_rect`, `abort`, `apropos`, `break`, `case`, `catch`, `continue`, `do`, `else`, `elseif`, `end`, `endfunction`, `for`, `function`, `help`, `if`, `pause`, `quit`, `select`, `then`, `try`, `while`, `!_deff_wrapper`, `%0_i_st`, `%3d_i_h`, `%Block_xcosUpdateBlock`, `%TNELDER_p`, `%TNELDER_string`, `%TNMPLOT_p`, `%TNMPLOT_string`, `%TOPTIM_p`, `%TOPTIM_string`, `%TSIMPLEX_p`, `%TSIMPLEX_string`, `%_EVoid_p`, `%_gsort`, `%_listvarinfile`, `%_rlist`, `%_save`, `%_sodload`, `%_strsplit`, `%_unwrap`, `%ar_p`, `%asn`, `%b_a_b`, `%b_a_s`, `%b_c_s`, `%b_c_spb`, `%b_cumprod`, `%b_cumsum`, `%b_d_s`, `%b_diag`, `%b_e`, `%b_f_s`, `%b_f_spb`, `%b_g_s`, `%b_g_spb`, `%b_grand`, `%b_h_s`, `%b_h_spb`, `%b_i_b`, `%b_i_ce`, `%b_i_h`, `%b_i_hm`, `%b_i_s`, `%b_i_sp`, `%b_i_spb`, `%b_i_st`, `%b_iconvert`, `%b_l_b`, `%b_l_s`, `%b_m_b`, `%b_m_s`, `%b_matrix`, `%b_n_hm`, `%b_o_hm`, `%b_p_s`, `%b_prod`, `%b_r_b`, `%b_r_s`, `%b_s_b`, `%b_s_s`, `%b_string`, `%b_sum`, `%b_tril`, `%b_triu`, `%b_x_b`, `%b_x_s`, `%bicg`, `%bicgstab`, `%c_a_c`, `%c_b_c`, `%c_b_s`, `%c_diag`, `%c_dsearch`, `%c_e`, `%c_eye`, `%c_f_s`, `%c_grand`, `%c_i_c`, `%c_i_ce`, `%c_i_h`, `%c_i_hm`, `%c_i_lss`, `%c_i_r`, `%c_i_s`, `%c_i_st`, `%c_matrix`, `%c_n_l`, `%c_n_st`, `%c_o_l`, `%c_o_st`, `%c_ones`, `%c_rand`, `%c_tril`, `%c_triu`, `%cblock_c_cblock`, `%cblock_c_s`, `%cblock_e`, `%cblock_f_cblock`, `%cblock_p`, `%cblock_size`, `%ce_6`, `%ce_c_ce`, `%ce_e`, `%ce_f_ce`, `%ce_i_ce`, `%ce_i_s`, `%ce_i_st`, `%ce_matrix`, `%ce_p`, `%ce_size`, `%ce_string`, `%ce_t`, `%cgs`, `%champdat_i_h`, `%choose`, `%diagram_xcos`, `%dir_p`, `%fptr_i_st`, `%grand_perm`, `%grayplot_i_h`, `%h_i_st`, `%hmS_k_hmS_generic`, `%hm_1_hm`, `%hm_1_s`, `%hm_2_hm`, `%hm_2_s`, `%hm_3_hm`, `%hm_3_s`, `%hm_4_hm`, `%hm_4_s`, `%hm_5`, `%hm_a_hm`, `%hm_a_r`, `%hm_a_s`, `%hm_abs`, `%hm_and`, `%hm_bool2s`, `%hm_c_hm`, `%hm_ceil`, `%hm_conj`, `%hm_cos`, `%hm_cumprod`, `%hm_cumsum`, `%hm_d_hm`, `%hm_d_s`, `%hm_degree`, `%hm_dsearch`, `%hm_e`, `%hm_exp`, `%hm_eye`, `%hm_f_hm`, `%hm_find`, `%hm_floor`, `%hm_g_hm`, `%hm_grand`, `%hm_gsort`, `%hm_h_hm`, `%hm_i_b`, `%hm_i_ce`, `%hm_i_h`, `%hm_i_hm`, `%hm_i_i`, `%hm_i_p`, `%hm_i_r`, `%hm_i_s`, `%hm_i_st`, `%hm_iconvert`, `%hm_imag`, `%hm_int`, `%hm_isnan`, `%hm_isreal`, `%hm_j_hm`, `%hm_j_s`, `%hm_k_hm`, `%hm_k_s`, `%hm_log`, `%hm_m_p`, `%hm_m_r`, `%hm_m_s`, `%hm_matrix`, `%hm_max`, `%hm_mean`, `%hm_median`, `%hm_min`, `%hm_n_b`, `%hm_n_c`, `%hm_n_hm`, `%hm_n_i`, `%hm_n_p`, `%hm_n_s`, `%hm_o_b`, `%hm_o_c`, `%hm_o_hm`, `%hm_o_i`, `%hm_o_p`, `%hm_o_s`, `%hm_ones`, `%hm_or`, `%hm_p`, `%hm_prod`, `%hm_q_hm`, `%hm_r_s`, `%hm_rand`, `%hm_real`, `%hm_round`, `%hm_s`, `%hm_s_hm`, `%hm_s_r`, `%hm_s_s`, `%hm_sign`, `%hm_sin`, `%hm_size`, `%hm_sqrt`, `%hm_stdev`, `%hm_string`, `%hm_sum`, `%hm_x_hm`, `%hm_x_p`, `%hm_x_s`, `%hm_zeros`, `%i_1_s`, `%i_2_s`, `%i_3_s`, `%i_4_s`, `%i_Matplot`, `%i_a_i`, `%i_a_s`, `%i_and`, `%i_ascii`, `%i_b_s`, `%i_bezout`, `%i_champ`, `%i_champ1`, `%i_contour`, `%i_contour2d`, `%i_d_i`, `%i_d_s`, `%i_dsearch`, `%i_e`, `%i_fft`, `%i_g_i`, `%i_gcd`, `%i_grand`, `%i_h_i`, `%i_i_ce`, `%i_i_h`, `%i_i_hm`, `%i_i_i`, `%i_i_s`, `%i_i_st`, `%i_j_i`, `%i_j_s`, `%i_l_s`, `%i_lcm`, `%i_length`, `%i_m_i`, `%i_m_s`, `%i_mfprintf`, `%i_mprintf`, `%i_msprintf`, `%i_n_s`, `%i_o_s`, `%i_or`, `%i_p_i`, `%i_p_s`, `%i_plot2d`, `%i_plot2d1`, `%i_plot2d2`, `%i_q_s`, `%i_r_i`, `%i_r_s`, `%i_round`, `%i_s_i`, `%i_s_s`, `%i_sign`, `%i_string`, `%i_x_i`, `%i_x_s`, `%ip_a_s`, `%ip_i_st`, `%ip_m_s`, `%ip_n_ip`, `%ip_o_ip`, `%ip_p`, `%ip_part`, `%ip_s_s`, `%ip_string`, `%k`, `%l_i_h`, `%l_i_s`, `%l_i_st`, `%l_isequal`, `%l_n_c`, `%l_n_l`, `%l_n_m`, `%l_n_p`, `%l_n_s`, `%l_n_st`, `%l_o_c`, `%l_o_l`, `%l_o_m`, `%l_o_p`, `%l_o_s`, `%l_o_st`, `%lss_a_lss`, `%lss_a_p`, `%lss_a_r`, `%lss_a_s`, `%lss_c_lss`, `%lss_c_p`, `%lss_c_r`, `%lss_c_s`, `%lss_e`, `%lss_eye`, `%lss_f_lss`, `%lss_f_p`, `%lss_f_r`, `%lss_f_s`, `%lss_i_ce`, `%lss_i_lss`, `%lss_i_p`, `%lss_i_r`, `%lss_i_s`, `%lss_i_st`, `%lss_inv`, `%lss_l_lss`, `%lss_l_p`, `%lss_l_r`, `%lss_l_s`, `%lss_m_lss`, `%lss_m_p`, `%lss_m_r`, `%lss_m_s`, `%lss_n_lss`, `%lss_n_p`, `%lss_n_r`, `%lss_n_s`, `%lss_norm`, `%lss_o_lss`, `%lss_o_p`, `%lss_o_r`, `%lss_o_s`, `%lss_ones`, `%lss_r_lss`, `%lss_r_p`, `%lss_r_r`, `%lss_r_s`, `%lss_rand`, `%lss_s`, `%lss_s_lss`, `%lss_s_p`, `%lss_s_r`, `%lss_s_s`, `%lss_size`, `%lss_t`, `%lss_v_lss`, `%lss_v_p`, `%lss_v_r`, `%lss_v_s`, `%lt_i_s`, `%m_n_l`, `%m_o_l`, `%mc_i_h`, `%mc_i_s`, `%mc_i_st`, `%mc_n_st`, `%mc_o_st`, `%mc_string`, `%mps_p`, `%mps_string`, `%msp_a_s`, `%msp_abs`, `%msp_e`, `%msp_find`, `%msp_i_s`, `%msp_i_st`, `%msp_length`, `%msp_m_s`, `%msp_maxi`, `%msp_n_msp`, `%msp_nnz`, `%msp_o_msp`, `%msp_p`, `%msp_sparse`, `%msp_spones`, `%msp_t`, `%p_a_lss`, `%p_a_r`, `%p_c_lss`, `%p_c_r`, `%p_cumprod`, `%p_cumsum`, `%p_d_p`, `%p_d_r`, `%p_d_s`, `%p_det`, `%p_e`, `%p_f_lss`, `%p_f_r`, `%p_grand`, `%p_i_ce`, `%p_i_h`, `%p_i_hm`, `%p_i_lss`, `%p_i_p`, `%p_i_r`, `%p_i_s`, `%p_i_st`, `%p_inv`, `%p_j_s`, `%p_k_p`, `%p_k_r`, `%p_k_s`, `%p_l_lss`, `%p_l_p`, `%p_l_r`, `%p_l_s`, `%p_m_hm`, `%p_m_lss`, `%p_m_r`, `%p_matrix`, `%p_n_l`, `%p_n_lss`, `%p_n_r`, `%p_o_l`, `%p_o_lss`, `%p_o_r`, `%p_o_sp`, `%p_p_s`, `%p_part`, `%p_prod`, `%p_q_p`, `%p_q_r`, `%p_q_s`, `%p_r_lss`, `%p_r_p`, `%p_r_r`, `%p_r_s`, `%p_s_lss`, `%p_s_r`, `%p_simp`, `%p_string`, `%p_sum`, `%p_v_lss`, `%p_v_p`, `%p_v_r`, `%p_v_s`, `%p_x_hm`, `%p_x_r`, `%p_y_p`, `%p_y_r`, `%p_y_s`, `%p_z_p`, `%p_z_r`, `%p_z_s`, `%pcg`, `%plist_p`, `%plist_string`, `%r_0`, `%r_a_hm`, `%r_a_lss`, `%r_a_p`, `%r_a_r`, `%r_a_s`, `%r_c_lss`, `%r_c_p`, `%r_c_r`, `%r_c_s`, `%r_clean`, `%r_cumprod`, `%r_cumsum`, `%r_d_p`, `%r_d_r`, `%r_d_s`, `%r_det`, `%r_diag`, `%r_e`, `%r_eye`, `%r_f_lss`, `%r_f_p`, `%r_f_r`, `%r_f_s`, `%r_i_ce`, `%r_i_hm`, `%r_i_lss`, `%r_i_p`, `%r_i_r`, `%r_i_s`, `%r_i_st`, `%r_inv`, `%r_j_s`, `%r_k_p`, `%r_k_r`, `%r_k_s`, `%r_l_lss`, `%r_l_p`, `%r_l_r`, `%r_l_s`, `%r_m_hm`, `%r_m_lss`, `%r_m_p`, `%r_m_r`, `%r_m_s`, `%r_matrix`, `%r_n_lss`, `%r_n_p`, `%r_n_r`, `%r_n_s`, `%r_norm`, `%r_o_lss`, `%r_o_p`, `%r_o_r`, `%r_o_s`, `%r_ones`, `%r_p`, `%r_p_s`, `%r_prod`, `%r_q_p`, `%r_q_r`, `%r_q_s`, `%r_r_lss`, `%r_r_p`, `%r_r_r`, `%r_r_s`, `%r_rand`, `%r_s`, `%r_s_hm`, `%r_s_lss`, `%r_s_p`, `%r_s_r`, `%r_s_s`, `%r_simp`, `%r_size`, `%r_string`, `%r_sum`, `%r_t`, `%r_tril`, `%r_triu`, `%r_v_lss`, `%r_v_p`, `%r_v_r`, `%r_v_s`, `%r_varn`, `%r_x_p`, `%r_x_r`, `%r_x_s`, `%r_y_p`, `%r_y_r`, `%r_y_s`, `%r_z_p`, `%r_z_r`, `%r_z_s`, `%s_1_hm`, `%s_1_i`, `%s_2_hm`, `%s_2_i`, `%s_3_hm`, `%s_3_i`, `%s_4_hm`, `%s_4_i`, `%s_5`, `%s_a_b`, `%s_a_hm`, `%s_a_i`, `%s_a_ip`, `%s_a_lss`, `%s_a_msp`, `%s_a_r`, `%s_a_sp`, `%s_and`, `%s_b_i`, `%s_b_s`, `%s_bezout`, `%s_c_b`, `%s_c_cblock`, `%s_c_lss`, `%s_c_r`, `%s_c_sp`, `%s_d_b`, `%s_d_i`, `%s_d_p`, `%s_d_r`, `%s_d_sp`, `%s_e`, `%s_f_b`, `%s_f_cblock`, `%s_f_lss`, `%s_f_r`, `%s_f_sp`, `%s_g_b`, `%s_g_s`, `%s_gcd`, `%s_grand`, `%s_h_b`, `%s_h_s`, `%s_i_b`, `%s_i_c`, `%s_i_ce`, `%s_i_h`, `%s_i_hm`, `%s_i_i`, `%s_i_lss`, `%s_i_p`, `%s_i_r`, `%s_i_s`, `%s_i_sp`, `%s_i_spb`, `%s_i_st`, `%s_j_i`, `%s_k_hm`, `%s_k_p`, `%s_k_r`, `%s_k_sp`, `%s_l_b`, `%s_l_hm`, `%s_l_i`, `%s_l_lss`, `%s_l_p`, `%s_l_r`, `%s_l_s`, `%s_l_sp`, `%s_lcm`, `%s_m_b`, `%s_m_hm`, `%s_m_i`, `%s_m_ip`, `%s_m_lss`, `%s_m_msp`, `%s_m_r`, `%s_matrix`, `%s_n_hm`, `%s_n_i`, `%s_n_l`, `%s_n_lss`, `%s_n_r`, `%s_n_st`, `%s_o_hm`, `%s_o_i`, `%s_o_l`, `%s_o_lss`, `%s_o_r`, `%s_o_st`, `%s_or`, `%s_p_b`, `%s_p_i`, `%s_pow`, `%s_q_hm`, `%s_q_i`, `%s_q_p`, `%s_q_r`, `%s_q_sp`, `%s_r_b`, `%s_r_i`, `%s_r_lss`, `%s_r_p`, `%s_r_r`, `%s_r_s`, `%s_r_sp`, `%s_s_b`, `%s_s_hm`, `%s_s_i`, `%s_s_ip`, `%s_s_lss`, `%s_s_r`, `%s_s_sp`, `%s_simp`, `%s_v_lss`, `%s_v_p`, `%s_v_r`, `%s_v_s`, `%s_x_b`, `%s_x_hm`, `%s_x_i`, `%s_x_r`, `%s_y_p`, `%s_y_r`, `%s_y_sp`, `%s_z_p`, `%s_z_r`, `%s_z_sp`, `%sn`, `%sp_a_s`, `%sp_a_sp`, `%sp_and`, `%sp_c_s`, `%sp_ceil`, `%sp_conj`, `%sp_cos`, `%sp_cumprod`, `%sp_cumsum`, `%sp_d_s`, `%sp_d_sp`, `%sp_det`, `%sp_diag`, `%sp_e`, `%sp_exp`, `%sp_f_s`, `%sp_floor`, `%sp_grand`, `%sp_gsort`, `%sp_i_ce`, `%sp_i_h`, `%sp_i_s`, `%sp_i_sp`, `%sp_i_st`, `%sp_int`, `%sp_inv`, `%sp_k_s`, `%sp_k_sp`, `%sp_l_s`, `%sp_l_sp`, `%sp_length`, `%sp_max`, `%sp_min`, `%sp_norm`, `%sp_or`, `%sp_p_s`, `%sp_prod`, `%sp_q_s`, `%sp_q_sp`, `%sp_r_s`, `%sp_r_sp`, `%sp_round`, `%sp_s_s`, `%sp_s_sp`, `%sp_sin`, `%sp_sqrt`, `%sp_string`, `%sp_sum`, `%sp_tril`, `%sp_triu`, `%sp_y_s`, `%sp_y_sp`, `%sp_z_s`, `%sp_z_sp`, `%spb_and`, `%spb_c_b`, `%spb_cumprod`, `%spb_cumsum`, `%spb_diag`, `%spb_e`, `%spb_f_b`, `%spb_g_b`, `%spb_g_spb`, `%spb_h_b`, `%spb_h_spb`, `%spb_i_b`, `%spb_i_ce`, `%spb_i_h`, `%spb_i_st`, `%spb_or`, `%spb_prod`, `%spb_sum`, `%spb_tril`, `%spb_triu`, `%st_6`, `%st_c_st`, `%st_e`, `%st_f_st`, `%st_i_b`, `%st_i_c`, `%st_i_fptr`, `%st_i_h`, `%st_i_i`, `%st_i_ip`, `%st_i_lss`, `%st_i_msp`, `%st_i_p`, `%st_i_r`, `%st_i_s`, `%st_i_sp`, `%st_i_spb`, `%st_i_st`, `%st_matrix`, `%st_n_c`, `%st_n_l`, `%st_n_mc`, `%st_n_p`, `%st_n_s`, `%st_o_c`, `%st_o_l`, `%st_o_mc`, `%st_o_p`, `%st_o_s`, `%st_o_tl`, `%st_p`, `%st_size`, `%st_string`, `%st_t`, `%ticks_i_h`, `%xls_e`, `%xls_p`, `%xlssheet_e`, `%xlssheet_p`, `%xlssheet_size`, `%xlssheet_string`, `DominationRank`, `G_make`, `IsAScalar`, `NDcost`, `OS_Version`, `PlotSparse`, `ReadHBSparse`, `TCL_CreateSlave`, `abcd`, `abinv`, `accept_func_default`, `accept_func_vfsa`, `acf`, `acosd`, `acosh`, `acoshm`, `acosm`, `acot`, `acotd`, `acoth`, `acsc`, `acscd`, `acsch`, `add_demo`, `add_help_chapter`, `add_module_help_chapter`, `add_param`, `add_profiling`, `adj2sp`, `aff2ab`, `ana_style`, `analpf`, `analyze`, `aplat`, `arhnk`, `arl2`, `arma2p`, `arma2ss`, `armac`, `armax`, `armax1`, `arobasestring2strings`, `arsimul`, `ascii2string`, `asciimat`, `asec`, `asecd`, `asech`, `asind`, `asinh`, `asinhm`, `asinm`, `assert_checkalmostequal`, `assert_checkequal`, `assert_checkerror`, `assert_checkfalse`, `assert_checkfilesequal`, `assert_checktrue`, `assert_comparecomplex`, `assert_computedigits`, `assert_cond2reltol`, `assert_cond2reqdigits`, `assert_generror`, `atand`, `atanh`, `atanhm`, `atanm`, `atomsAutoload`, `atomsAutoloadAdd`, `atomsAutoloadDel`, `atomsAutoloadList`, `atomsCategoryList`, `atomsCheckModule`, `atomsDepTreeShow`, `atomsGetConfig`, `atomsGetInstalled`, `atomsGetInstalledPath`, `atomsGetLoaded`, `atomsGetLoadedPath`, `atomsInstall`, `atomsIsInstalled`, `atomsIsLoaded`, `atomsList`, `atomsLoad`, `atomsQuit`, `atomsRemove`, `atomsRepositoryAdd`, `atomsRepositoryDel`, `atomsRepositoryList`, `atomsRestoreConfig`, `atomsSaveConfig`, `atomsSearch`, `atomsSetConfig`, `atomsShow`, `atomsSystemInit`, `atomsSystemUpdate`, `atomsTest`, `atomsUpdate`, `atomsVersion`, `augment`, `auread`, `auwrite`, `balreal`, `bench_run`, `bilin`, `bilt`, `bin2dec`, `binomial`, `bitand`, `bitcmp`, `bitget`, `bitor`, `bitset`, `bitxor`, `black`, `blanks`, `bloc2exp`, `bloc2ss`, `block_parameter_error`, `bode`, `bode_asymp`, `bstap`, `buttmag`, `bvodeS`, `bytecode`, `bytecodewalk`, `cainv`, `calendar`, `calerf`, `calfrq`, `canon`, `casc`, `cat`, `cat_code`, `cb_m2sci_gui`, `ccontrg`, `cell`, `cell2mat`, `cellstr`, `center`, `cepstrum`, `cfspec`, `char`, `chart`, `cheb1mag`, `cheb2mag`, `check_gateways`, `check_modules_xml`, `check_versions`, `chepol`, `chfact`, `chsolve`, `classmarkov`, `clean_help`, `clock`, `cls2dls`, `cmb_lin`, `cmndred`, `cmoment`, `coding_ga_binary`, `coding_ga_identity`, `coff`, `coffg`, `colcomp`, `colcompr`, `colinout`, `colregul`, `companion`, `complex`, `compute_initial_temp`, `cond`, `cond2sp`, `condestsp`, `configure_msifort`, `configure_msvc`, `conjgrad`, `cont_frm`, `cont_mat`, `contrss`, `conv`, `convert_to_float`, `convertindex`, `convol`, `convol2d`, `copfac`, `correl`, `cosd`, `cosh`, `coshm`, `cosm`, `cotd`, `cotg`, `coth`, `cothm`, `cov`, `covar`, `createXConfiguration`, `createfun`, `createstruct`, `cross`, `crossover_ga_binary`, `crossover_ga_default`, `csc`, `cscd`, `csch`, `csgn`, `csim`, `cspect`, `ctr_gram`, `czt`, `dae`, `daeoptions`, `damp`, `datafit`, `date`, `datenum`, `datevec`, `dbphi`, `dcf`, `ddp`, `dec2bin`, `dec2hex`, `dec2oct`, `del_help_chapter`, `del_module_help_chapter`, `demo_begin`, `demo_choose`, `demo_compiler`, `demo_end`, `demo_file_choice`, `demo_folder_choice`, `demo_function_choice`, `demo_gui`, `demo_run`, `demo_viewCode`, `denom`, `derivat`, `derivative`, `des2ss`, `des2tf`, `detectmsifort64tools`, `detectmsvc64tools`, `determ`, `detr`, `detrend`, `devtools_run_builder`, `dhnorm`, `diff`, `diophant`, `dir`, `dirname`, `dispfiles`, `dllinfo`, `dscr`, `dsimul`, `dt_ility`, `dtsi`, `edit`, `edit_error`, `editor`, `eigenmarkov`, `eigs`, `ell1mag`, `enlarge_shape`, `entropy`, `eomday`, `epred`, `eqfir`, `eqiir`, `equil`, `equil1`, `erfinv`, `etime`, `eval`, `evans`, `evstr`, `example_run`, `expression2code`, `extract_help_examples`, `factor`, `factorial`, `factors`, `faurre`, `ffilt`, `fft2`, `fftshift`, `fieldnames`, `filt_sinc`, `filter`, `findABCD`, `findAC`, `findBDK`, `findR`, `find_freq`, `find_links`, `find_scicos_version`, `findm`, `findmsifortcompiler`, `findmsvccompiler`, `findx0BD`, `firstnonsingleton`, `fix`, `fixedpointgcd`, `flipdim`, `flts`, `fminsearch`, `formatBlackTip`, `formatBodeMagTip`, `formatBodePhaseTip`, `formatGainplotTip`, `formatHallModuleTip`, `formatHallPhaseTip`, `formatNicholsGainTip`, `formatNicholsPhaseTip`, `formatNyquistTip`, `formatPhaseplotTip`, `formatSgridDampingTip`, `formatSgridFreqTip`, `formatZgridDampingTip`, `formatZgridFreqTip`, `format_txt`, `fourplan`, `frep2tf`, `freson`, `frfit`, `frmag`, `fseek_origin`, `fsfirlin`, `fspec`, `fspecg`, `fstabst`, `ftest`, `ftuneq`, `fullfile`, `fullrf`, `fullrfk`, `fun2string`, `g_margin`, `gainplot`, `gamitg`, `gcare`, `gcd`, `gencompilationflags_unix`, `generateBlockImage`, `generateBlockImages`, `generic_i_ce`, `generic_i_h`, `generic_i_hm`, `generic_i_s`, `generic_i_st`, `genlib`, `genmarkov`, `geomean`, `getDiagramVersion`, `getModelicaPath`, `getPreferencesValue`, `get_file_path`, `get_function_path`, `get_param`, `get_profile`, `get_scicos_version`, `getd`, `getscilabkeywords`, `getshell`, `gettklib`, `gfare`, `gfrancis`, `givens`, `glever`, `gmres`, `group`, `gschur`, `gspec`, `gtild`, `h2norm`, `h_cl`, `h_inf`, `h_inf_st`, `h_norm`, `hallchart`, `halt`, `hank`, `hankelsv`, `harmean`, `haveacompiler`, `head_comments`, `help_from_sci`, `help_skeleton`, `hermit`, `hex2dec`, `hilb`, `hilbert`, `histc`, `horner`, `householder`, `hrmt`, `htrianr`, `hypermat`, `idct`, `idst`, `ifft`, `ifftshift`, `iir`, `iirgroup`, `iirlp`, `iirmod`, `ilib_build`, `ilib_build_jar`, `ilib_compile`, `ilib_for_link`, `ilib_gen_Make`, `ilib_gen_Make_unix`, `ilib_gen_cleaner`, `ilib_gen_gateway`, `ilib_gen_loader`, `ilib_include_flag`, `ilib_mex_build`, `im_inv`, `importScicosDiagram`, `importScicosPal`, `importXcosDiagram`, `imrep2ss`, `ind2sub`, `inistate`, `init_ga_default`, `init_param`, `initial_scicos_tables`, `input`, `instruction2code`, `intc`, `intdec`, `integrate`, `interp1`, `interpln`, `intersect`, `intl`, `intsplin`, `inttrap`, `inv_coeff`, `invr`, `invrs`, `invsyslin`, `iqr`, `isLeapYear`, `is_absolute_path`, `is_param`, `iscell`, `iscellstr`, `iscolumn`, `isempty`, `isfield`, `isinf`, `ismatrix`, `isnan`, `isrow`, `isscalar`, `issparse`, `issquare`, `isstruct`, `isvector`, `jmat`, `justify`, `kalm`, `karmarkar`, `kernel`, `kpure`, `krac2`, `kroneck`, `lattn`, `lattp`, `launchtest`, `lcf`, `lcm`, `lcmdiag`, `leastsq`, `leqe`, `leqr`, `lev`, `levin`, `lex_sort`, `lft`, `lin`, `lin2mu`, `lincos`, `lindquist`, `linf`, `linfn`, `linsolve`, `linspace`, `list2vec`, `list_param`, `listfiles`, `listfunctions`, `listvarinfile`, `lmisolver`, `lmitool`, `loadXcosLibs`, `loadmatfile`, `loadwave`, `log10`, `log2`, `logm`, `logspace`, `lqe`, `lqg`, `lqg2stan`, `lqg_ltr`, `lqr`, `ls`, `lyap`, `m2sci_gui`, `m_circle`, `macglov`, `macrovar`, `mad`, `makecell`, `manedit`, `mapsound`, `markp2ss`, `matfile2sci`, `mdelete`, `mean`, `meanf`, `median`, `members`, `mese`, `meshgrid`, `mfft`, `mfile2sci`, `minreal`, `minss`, `mkdir`, `modulo`, `moment`, `mrfit`, `msd`, `mstr2sci`, `mtlb`, `mtlb_0`, `mtlb_a`, `mtlb_all`, `mtlb_any`, `mtlb_axes`, `mtlb_axis`, `mtlb_beta`, `mtlb_box`, `mtlb_choices`, `mtlb_close`, `mtlb_colordef`, `mtlb_cond`, `mtlb_cov`, `mtlb_cumprod`, `mtlb_cumsum`, `mtlb_dec2hex`, `mtlb_delete`, `mtlb_diag`, `mtlb_diff`, `mtlb_dir`, `mtlb_double`, `mtlb_e`, `mtlb_echo`, `mtlb_error`, `mtlb_eval`, `mtlb_exist`, `mtlb_eye`, `mtlb_false`, `mtlb_fft`, `mtlb_fftshift`, `mtlb_filter`, `mtlb_find`, `mtlb_findstr`, `mtlb_fliplr`, `mtlb_fopen`, `mtlb_format`, `mtlb_fprintf`, `mtlb_fread`, `mtlb_fscanf`, `mtlb_full`, `mtlb_fwrite`, `mtlb_get`, `mtlb_grid`, `mtlb_hold`, `mtlb_i`, `mtlb_ifft`, `mtlb_image`, `mtlb_imp`, `mtlb_int16`, `mtlb_int32`, `mtlb_int8`, `mtlb_is`, `mtlb_isa`, `mtlb_isfield`, `mtlb_isletter`, `mtlb_isspace`, `mtlb_l`, `mtlb_legendre`, `mtlb_linspace`, `mtlb_logic`, `mtlb_logical`, `mtlb_loglog`, `mtlb_lower`, `mtlb_max`, `mtlb_mean`, `mtlb_median`, `mtlb_mesh`, `mtlb_meshdom`, `mtlb_min`, `mtlb_more`, `mtlb_num2str`, `mtlb_ones`, `mtlb_pcolor`, `mtlb_plot`, `mtlb_prod`, `mtlb_qr`, `mtlb_qz`, `mtlb_rand`, `mtlb_randn`, `mtlb_rcond`, `mtlb_realmax`, `mtlb_realmin`, `mtlb_s`, `mtlb_semilogx`, `mtlb_semilogy`, `mtlb_setstr`, `mtlb_size`, `mtlb_sort`, `mtlb_sortrows`, `mtlb_sprintf`, `mtlb_sscanf`, `mtlb_std`, `mtlb_strcmp`, `mtlb_strcmpi`, `mtlb_strfind`, `mtlb_strrep`, `mtlb_subplot`, `mtlb_sum`, `mtlb_t`, `mtlb_toeplitz`, `mtlb_tril`, `mtlb_triu`, `mtlb_true`, `mtlb_type`, `mtlb_uint16`, `mtlb_uint32`, `mtlb_uint8`, `mtlb_upper`, `mtlb_var`, `mtlb_zeros`, `mu2lin`, `mutation_ga_binary`, `mutation_ga_default`, `mvcorrel`, `mvvacov`, `nancumsum`, `nand2mean`, `nanmax`, `nanmean`, `nanmeanf`, `nanmedian`, `nanmin`, `nanreglin`, `nanstdev`, `nansum`, `narsimul`, `ndgrid`, `ndims`, `nehari`, `neigh_func_csa`, `neigh_func_default`, `neigh_func_fsa`, `neigh_func_vfsa`, `neldermead_cget`, `neldermead_configure`, `neldermead_costf`, `neldermead_defaultoutput`, `neldermead_destroy`, `neldermead_function`, `neldermead_get`, `neldermead_log`, `neldermead_new`, `neldermead_restart`, `neldermead_search`, `neldermead_updatesimp`, `nextpow2`, `nfreq`, `nicholschart`, `nlev`, `nmplot_cget`, `nmplot_configure`, `nmplot_contour`, `nmplot_destroy`, `nmplot_function`, `nmplot_get`, `nmplot_historyplot`, `nmplot_log`, `nmplot_new`, `nmplot_outputcmd`, `nmplot_restart`, `nmplot_search`, `nmplot_simplexhistory`, `noisegen`, `nonreg_test_run`, `now`, `nthroot`, `null`, `num2cell`, `numderivative`, `numdiff`, `numer`, `nyquist`, `nyquistfrequencybounds`, `obs_gram`, `obscont`, `observer`, `obsv_mat`, `obsvss`, `oct2dec`, `odeoptions`, `optim_ga`, `optim_moga`, `optim_nsga`, `optim_nsga2`, `optim_sa`, `optimbase_cget`, `optimbase_checkbounds`, `optimbase_checkcostfun`, `optimbase_checkx0`, `optimbase_configure`, `optimbase_destroy`, `optimbase_function`, `optimbase_get`, `optimbase_hasbounds`, `optimbase_hasconstraints`, `optimbase_hasnlcons`, `optimbase_histget`, `optimbase_histset`, `optimbase_incriter`, `optimbase_isfeasible`, `optimbase_isinbounds`, `optimbase_isinnonlincons`, `optimbase_log`, `optimbase_logshutdown`, `optimbase_logstartup`, `optimbase_new`, `optimbase_outputcmd`, `optimbase_outstruct`, `optimbase_proj2bnds`, `optimbase_set`, `optimbase_stoplog`, `optimbase_terminate`, `optimget`, `optimplotfunccount`, `optimplotfval`, `optimplotx`, `optimset`, `optimsimplex_center`, `optimsimplex_check`, `optimsimplex_compsomefv`, `optimsimplex_computefv`, `optimsimplex_deltafv`, `optimsimplex_deltafvmax`, `optimsimplex_destroy`, `optimsimplex_dirmat`, `optimsimplex_fvmean`, `optimsimplex_fvstdev`, `optimsimplex_fvvariance`, `optimsimplex_getall`, `optimsimplex_getallfv`, `optimsimplex_getallx`, `optimsimplex_getfv`, `optimsimplex_getn`, `optimsimplex_getnbve`, `optimsimplex_getve`, `optimsimplex_getx`, `optimsimplex_gradientfv`, `optimsimplex_log`, `optimsimplex_new`, `optimsimplex_reflect`, `optimsimplex_setall`, `optimsimplex_setallfv`, `optimsimplex_setallx`, `optimsimplex_setfv`, `optimsimplex_setn`, `optimsimplex_setnbve`, `optimsimplex_setve`, `optimsimplex_setx`, `optimsimplex_shrink`, `optimsimplex_size`, `optimsimplex_sort`, `optimsimplex_xbar`, `orth`, `output_ga_default`, `output_moga_default`, `output_nsga2_default`, `output_nsga_default`, `p_margin`, `pack`, `pareto_filter`, `parrot`, `pbig`, `pca`, `pcg`, `pdiv`, `pen2ea`, `pencan`, `pencost`, `penlaur`, `perctl`, `perl`, `perms`, `permute`, `pertrans`, `pfactors`, `pfss`, `phasemag`, `phaseplot`, `phc`, `pinv`, `playsnd`, `plotprofile`, `plzr`, `pmodulo`, `pol2des`, `pol2str`, `polar`, `polfact`, `prbs_a`, `prettyprint`, `primes`, `princomp`, `profile`, `proj`, `projsl`, `projspec`, `psmall`, `pspect`, `qmr`, `qpsolve`, `quart`, `quaskro`, `rafiter`, `randpencil`, `range`, `rank`, `readxls`, `recompilefunction`, `recons`, `reglin`, `regress`, `remezb`, `remove_param`, `remove_profiling`, `repfreq`, `replace_Ix_by_Fx`, `repmat`, `reset_profiling`, `resize_matrix`, `returntoscilab`, `rhs2code`, `ric_desc`, `riccati`, `rmdir`, `routh_t`, `rowcomp`, `rowcompr`, `rowinout`, `rowregul`, `rowshuff`, `rref`, `sample`, `samplef`, `samwr`, `savematfile`, `savewave`, `scanf`, `sci2exp`, `sciGUI_init`, `sci_sparse`, `scicos_getvalue`, `scicos_simulate`, `scicos_workspace_init`, `scisptdemo`, `scitest`, `sdiff`, `sec`, `secd`, `sech`, `selection_ga_elitist`, `selection_ga_random`, `sensi`, `setPreferencesValue`, `set_param`, `setdiff`, `sgrid`, `show_margins`, `show_pca`, `showprofile`, `signm`, `sinc`, `sincd`, `sind`, `sinh`, `sinhm`, `sinm`, `sm2des`, `sm2ss`, `smga`, `smooth`, `solve`, `sound`, `soundsec`, `sp2adj`, `spaninter`, `spanplus`, `spantwo`, `specfact`, `speye`, `sprand`, `spzeros`, `sqroot`, `sqrtm`, `squarewave`, `squeeze`, `srfaur`, `srkf`, `ss2des`, `ss2ss`, `ss2tf`, `sskf`, `ssprint`, `ssrand`, `st_deviation`, `st_i_generic`, `st_ility`, `stabil`, `statgain`, `stdev`, `stdevf`, `steadycos`, `strange`, `strcmpi`, `struct`, `sub2ind`, `sva`, `svplot`, `sylm`, `sylv`, `sysconv`, `sysdiag`, `sysfact`, `syslin`, `syssize`, `system`, `systmat`, `tabul`, `tand`, `tanh`, `tanhm`, `tanm`, `tbx_build_blocks`, `tbx_build_cleaner`, `tbx_build_gateway`, `tbx_build_gateway_clean`, `tbx_build_gateway_loader`, `tbx_build_help`, `tbx_build_help_loader`, `tbx_build_loader`, `tbx_build_localization`, `tbx_build_macros`, `tbx_build_pal_loader`, `tbx_build_src`, `tbx_builder`, `tbx_builder_gateway`, `tbx_builder_gateway_lang`, `tbx_builder_help`, `tbx_builder_help_lang`, `tbx_builder_macros`, `tbx_builder_src`, `tbx_builder_src_lang`, `tbx_generate_pofile`, `temp_law_csa`, `temp_law_default`, `temp_law_fsa`, `temp_law_huang`, `temp_law_vfsa`, `test_clean`, `test_on_columns`, `test_run`, `test_run_level`, `testexamples`, `tf2des`, `tf2ss`, `thrownan`, `tic`, `time_id`, `toc`, `toeplitz`, `tokenpos`, `toolboxes`, `trace`, `trans`, `translatepaths`, `tree2code`, `trfmod`, `trianfml`, `trimmean`, `trisolve`, `trzeros`, `typeof`, `ui_observer`, `union`, `unique`, `unit_test_run`, `unix_g`, `unix_s`, `unix_w`, `unix_x`, `unobs`, `unpack`, `unwrap`, `variance`, `variancef`, `vec2list`, `vectorfind`, `ver`, `warnobsolete`, `wavread`, `wavwrite`, `wcenter`, `weekday`, `wfir`, `wfir_gui`, `whereami`, `who_user`, `whos`, `wiener`, `wigner`, `window`, `winlist`, `with_javasci`, `with_macros_source`, `with_modelica_compiler`, `with_tk`, `xcorr`, `xcosBlockEval`, `xcosBlockInterface`, `xcosCodeGeneration`, `xcosConfigureModelica`, `xcosPal`, `xcosPalAdd`, `xcosPalAddBlock`, `xcosPalExport`, `xcosPalGenerateAllIcons`, `xcosShowBlockWarning`, `xcosValidateBlockSet`, `xcosValidateCompareBlock`, `xcos_compile`, `xcos_debug_gui`, `xcos_run`, `xcos_simulate`, `xcov`, `xmltochm`, `xmltoformat`, `xmltohtml`, `xmltojar`, `xmltopdf`, `xmltops`, `xmltoweb`, `yulewalk`, `zeropen`, `zgrid`, `zpbutt`, `zpch1`, `zpch2`, `zpell`), NameBuiltin, nil}, - {Words(``, `\b`, `$`, `%F`, `%T`, `%e`, `%eps`, `%f`, `%fftw`, `%gui`, `%i`, `%inf`, `%io`, `%modalWarning`, `%nan`, `%pi`, `%s`, `%t`, `%tk`, `%toolboxes`, `%toolboxes_dir`, `%z`, `PWD`, `SCI`, `SCIHOME`, `TMPDIR`, `arnoldilib`, `assertlib`, `atomslib`, `cacsdlib`, `compatibility_functilib`, `corelib`, `data_structureslib`, `demo_toolslib`, `development_toolslib`, `differential_equationlib`, `dynamic_linklib`, `elementary_functionslib`, `enull`, `evoid`, `external_objectslib`, `fd`, `fileiolib`, `functionslib`, `genetic_algorithmslib`, `helptoolslib`, `home`, `integerlib`, `interpolationlib`, `iolib`, `jnull`, `jvoid`, `linear_algebralib`, `m2scilib`, `matiolib`, `modules_managerlib`, `neldermeadlib`, `optimbaselib`, `optimizationlib`, `optimsimplexlib`, `output_streamlib`, `overloadinglib`, `parameterslib`, `polynomialslib`, `preferenceslib`, `randliblib`, `scicos_autolib`, `scicos_utilslib`, `scinoteslib`, `signal_processinglib`, `simulated_annealinglib`, `soundlib`, `sparselib`, `special_functionslib`, `spreadsheetlib`, `statisticslib`, `stringlib`, `tclscilib`, `timelib`, `umfpacklib`, `xcoslib`), NameConstant, nil}, - {`-|==|~=|<|>|<=|>=|&&|&|~|\|\|?`, Operator, nil}, - {`\.\*|\*|\+|\.\^|\.\\|\.\/|\/|\\`, Operator, nil}, - {`[\[\](){}@.,=:;]`, Punctuation, nil}, - {`"[^"]*"`, LiteralString, nil}, - {`(?<=[\w)\].])\'+`, Operator, nil}, - {`(?|+=@:,./?-]+`, Operator, nil}, - {`[\[\]()]+`, Punctuation, nil}, - {`"`, LiteralStringDouble, Push("string-double")}, - {`'`, LiteralStringSingle, Push("string-single")}, - {`[a-z_-][\w-]*`, Name, nil}, - {`\n`, Text, nil}, - {`[;{}]`, Punctuation, Pop(1)}, - }, - "interpolation": { - {`\}`, LiteralStringInterpol, Pop(1)}, - Include("value"), - }, - "selector": { - {`[ \t]+`, Text, nil}, - {`\:`, NameDecorator, Push("pseudo-class")}, - {`\.`, NameClass, Push("class")}, - {`\#`, NameNamespace, Push("id")}, - {`[\w-]+`, NameTag, nil}, - {`#\{`, LiteralStringInterpol, Push("interpolation")}, - {`&`, Keyword, nil}, - {`[~^*!&\[\]()<>|+=@:,./?-]`, Operator, nil}, - {`"`, LiteralStringDouble, Push("string-double")}, - {`'`, LiteralStringSingle, Push("string-single")}, - {`\n`, Text, nil}, - {`[;{}]`, Punctuation, Pop(1)}, - }, - "string-double": { - {`(\\.|#(?=[^\n{])|[^\n"#])+`, LiteralStringDouble, nil}, - {`#\{`, LiteralStringInterpol, Push("interpolation")}, - {`"`, LiteralStringDouble, Pop(1)}, - }, - "string-single": { - {`(\\.|#(?=[^\n{])|[^\n'#])+`, LiteralStringSingle, nil}, - {`#\{`, LiteralStringInterpol, Push("interpolation")}, - {`'`, LiteralStringSingle, Pop(1)}, - }, - "string-url": { - {`(\\#|#(?=[^\n{])|[^\n#)])+`, LiteralStringOther, nil}, - {`#\{`, LiteralStringInterpol, Push("interpolation")}, - {`\)`, LiteralStringOther, Pop(1)}, - }, - "pseudo-class": { - {`[\w-]+`, NameDecorator, nil}, - {`#\{`, LiteralStringInterpol, Push("interpolation")}, - Default(Pop(1)), - }, - "class": { - {`[\w-]+`, NameClass, nil}, - {`#\{`, LiteralStringInterpol, Push("interpolation")}, - Default(Pop(1)), - }, - "id": { - {`[\w-]+`, NameNamespace, nil}, - {`#\{`, LiteralStringInterpol, Push("interpolation")}, - Default(Pop(1)), - }, - "for": { - {`(from|to|through)`, OperatorWord, nil}, - Include("value"), - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/s/smalltalk.go b/vendor/github.com/alecthomas/chroma/lexers/s/smalltalk.go deleted file mode 100644 index db64707..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/s/smalltalk.go +++ /dev/null @@ -1,99 +0,0 @@ -package s - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Smalltalk lexer. -var Smalltalk = internal.Register(MustNewLexer( - &Config{ - Name: "Smalltalk", - Aliases: []string{"smalltalk", "squeak", "st"}, - Filenames: []string{"*.st"}, - MimeTypes: []string{"text/x-smalltalk"}, - }, - Rules{ - "root": { - {`(<)(\w+:)(.*?)(>)`, ByGroups(Text, Keyword, Text, Text), nil}, - Include("squeak fileout"), - Include("whitespaces"), - Include("method definition"), - {`(\|)([\w\s]*)(\|)`, ByGroups(Operator, NameVariable, Operator), nil}, - Include("objects"), - {`\^|:=|_`, Operator, nil}, - {`[\]({}.;!]`, Text, nil}, - }, - "method definition": { - {`([a-zA-Z]+\w*:)(\s*)(\w+)`, ByGroups(NameFunction, Text, NameVariable), nil}, - {`^(\b[a-zA-Z]+\w*\b)(\s*)$`, ByGroups(NameFunction, Text), nil}, - {`^([-+*/\\~<>=|&!?,@%]+)(\s*)(\w+)(\s*)$`, ByGroups(NameFunction, Text, NameVariable, Text), nil}, - }, - "blockvariables": { - Include("whitespaces"), - {`(:)(\s*)(\w+)`, ByGroups(Operator, Text, NameVariable), nil}, - {`\|`, Operator, Pop(1)}, - Default(Pop(1)), - }, - "literals": { - {`'(''|[^'])*'`, LiteralString, Push("afterobject")}, - {`\$.`, LiteralStringChar, Push("afterobject")}, - {`#\(`, LiteralStringSymbol, Push("parenth")}, - {`\)`, Text, Push("afterobject")}, - {`(\d+r)?-?\d+(\.\d+)?(e-?\d+)?`, LiteralNumber, Push("afterobject")}, - }, - "_parenth_helper": { - Include("whitespaces"), - {`(\d+r)?-?\d+(\.\d+)?(e-?\d+)?`, LiteralNumber, nil}, - {`[-+*/\\~<>=|&#!?,@%\w:]+`, LiteralStringSymbol, nil}, - {`'(''|[^'])*'`, LiteralString, nil}, - {`\$.`, LiteralStringChar, nil}, - {`#*\(`, LiteralStringSymbol, Push("inner_parenth")}, - }, - "parenth": { - {`\)`, LiteralStringSymbol, Push("root", "afterobject")}, - Include("_parenth_helper"), - }, - "inner_parenth": { - {`\)`, LiteralStringSymbol, Pop(1)}, - Include("_parenth_helper"), - }, - "whitespaces": { - {`\s+`, Text, nil}, - {`"(""|[^"])*"`, Comment, nil}, - }, - "objects": { - {`\[`, Text, Push("blockvariables")}, - {`\]`, Text, Push("afterobject")}, - {`\b(self|super|true|false|nil|thisContext)\b`, NameBuiltinPseudo, Push("afterobject")}, - {`\b[A-Z]\w*(?!:)\b`, NameClass, Push("afterobject")}, - {`\b[a-z]\w*(?!:)\b`, NameVariable, Push("afterobject")}, - {`#("(""|[^"])*"|[-+*/\\~<>=|&!?,@%]+|[\w:]+)`, LiteralStringSymbol, Push("afterobject")}, - Include("literals"), - }, - "afterobject": { - {`! !$`, Keyword, Pop(1)}, - Include("whitespaces"), - {`\b(ifTrue:|ifFalse:|whileTrue:|whileFalse:|timesRepeat:)`, NameBuiltin, Pop(1)}, - {`\b(new\b(?!:))`, NameBuiltin, nil}, - {`:=|_`, Operator, Pop(1)}, - {`\b[a-zA-Z]+\w*:`, NameFunction, Pop(1)}, - {`\b[a-zA-Z]+\w*`, NameFunction, nil}, - {`\w+:?|[-+*/\\~<>=|&!?,@%]+`, NameFunction, Pop(1)}, - {`\.`, Punctuation, Pop(1)}, - {`;`, Punctuation, nil}, - {`[\])}]`, Text, nil}, - {`[\[({]`, Text, Pop(1)}, - }, - "squeak fileout": { - {`^"(""|[^"])*"!`, Keyword, nil}, - {`^'(''|[^'])*'!`, Keyword, nil}, - {`^(!)(\w+)( commentStamp: )(.*?)( prior: .*?!\n)(.*?)(!)`, ByGroups(Keyword, NameClass, Keyword, LiteralString, Keyword, Text, Keyword), nil}, - {`^(!)(\w+(?: class)?)( methodsFor: )('(?:''|[^'])*')(.*?!)`, ByGroups(Keyword, NameClass, Keyword, LiteralString, Keyword), nil}, - {`^(\w+)( subclass: )(#\w+)(\s+instanceVariableNames: )(.*?)(\s+classVariableNames: )(.*?)(\s+poolDictionaries: )(.*?)(\s+category: )(.*?)(!)`, ByGroups(NameClass, Keyword, LiteralStringSymbol, Keyword, LiteralString, Keyword, LiteralString, Keyword, LiteralString, Keyword, LiteralString, Keyword), nil}, - {`^(\w+(?: class)?)(\s+instanceVariableNames: )(.*?)(!)`, ByGroups(NameClass, Keyword, LiteralString, Keyword), nil}, - {`(!\n)(\].*)(! !)$`, ByGroups(Keyword, Text, Keyword), nil}, - {`! !$`, Keyword, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/s/smarty.go b/vendor/github.com/alecthomas/chroma/lexers/s/smarty.go deleted file mode 100644 index c364ffa..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/s/smarty.go +++ /dev/null @@ -1,40 +0,0 @@ -package s - -import ( - . "github.com/alecthomas/chroma" // nolint - . "github.com/alecthomas/chroma/lexers/circular" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Smarty lexer. -var Smarty = internal.Register(MustNewLexer( - &Config{ - Name: "Smarty", - Aliases: []string{"smarty"}, - Filenames: []string{"*.tpl"}, - MimeTypes: []string{"application/x-smarty"}, - DotAll: true, - }, - Rules{ - "root": { - {`[^{]+`, Other, nil}, - {`(\{)(\*.*?\*)(\})`, ByGroups(CommentPreproc, Comment, CommentPreproc), nil}, - {`(\{php\})(.*?)(\{/php\})`, ByGroups(CommentPreproc, Using(PHP), CommentPreproc), nil}, - {`(\{)(/?[a-zA-Z_]\w*)(\s*)`, ByGroups(CommentPreproc, NameFunction, Text), Push("smarty")}, - {`\{`, CommentPreproc, Push("smarty")}, - }, - "smarty": { - {`\s+`, Text, nil}, - {`\{`, CommentPreproc, Push()}, - {`\}`, CommentPreproc, Pop(1)}, - {`#[a-zA-Z_]\w*#`, NameVariable, nil}, - {`\$[a-zA-Z_]\w*(\.\w+)*`, NameVariable, nil}, - {`[~!%^&*()+=|\[\]:;,.<>/?@-]`, Operator, nil}, - {`(true|false|null)\b`, KeywordConstant, nil}, - {`[0-9](\.[0-9]*)?(eE[+-][0-9])?[flFLdD]?|0[xX][0-9a-fA-F]+[Ll]?`, LiteralNumber, nil}, - {`"(\\\\|\\"|[^"])*"`, LiteralStringDouble, nil}, - {`'(\\\\|\\'|[^'])*'`, LiteralStringSingle, nil}, - {`[a-zA-Z_]\w*`, NameAttribute, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/s/sml.go b/vendor/github.com/alecthomas/chroma/lexers/s/sml.go deleted file mode 100644 index f716d92..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/s/sml.go +++ /dev/null @@ -1,200 +0,0 @@ -package s - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Standard ML lexer. -var StandardML = internal.Register(MustNewLexer( - &Config{ - Name: "Standard ML", - Aliases: []string{"sml"}, - Filenames: []string{"*.sml", "*.sig", "*.fun"}, - MimeTypes: []string{"text/x-standardml", "application/x-standardml"}, - }, - Rules{ - "whitespace": { - {`\s+`, Text, nil}, - {`\(\*`, CommentMultiline, Push("comment")}, - }, - "delimiters": { - {`\(|\[|\{`, Punctuation, Push("main")}, - {`\)|\]|\}`, Punctuation, Pop(1)}, - {`\b(let|if|local)\b(?!\')`, KeywordReserved, Push("main", "main")}, - {`\b(struct|sig|while)\b(?!\')`, KeywordReserved, Push("main")}, - {`\b(do|else|end|in|then)\b(?!\')`, KeywordReserved, Pop(1)}, - }, - "core": { - {`(_|\}|\{|\)|;|,|\[|\(|\]|\.\.\.)`, Punctuation, nil}, - {`#"`, LiteralStringChar, Push("char")}, - {`"`, LiteralStringDouble, Push("string")}, - {`~?0x[0-9a-fA-F]+`, LiteralNumberHex, nil}, - {`0wx[0-9a-fA-F]+`, LiteralNumberHex, nil}, - {`0w\d+`, LiteralNumberInteger, nil}, - {`~?\d+\.\d+[eE]~?\d+`, LiteralNumberFloat, nil}, - {`~?\d+\.\d+`, LiteralNumberFloat, nil}, - {`~?\d+[eE]~?\d+`, LiteralNumberFloat, nil}, - {`~?\d+`, LiteralNumberInteger, nil}, - {`#\s*[1-9][0-9]*`, NameLabel, nil}, - {`#\s*([a-zA-Z][\w']*)`, NameLabel, nil}, - {"#\\s+([!%&$#+\\-/:<=>?@\\\\~`^|*]+)", NameLabel, nil}, - {`\b(datatype|abstype)\b(?!\')`, KeywordReserved, Push("dname")}, - {`(?=\b(exception)\b(?!\'))`, Text, Push("ename")}, - {`\b(functor|include|open|signature|structure)\b(?!\')`, KeywordReserved, Push("sname")}, - {`\b(type|eqtype)\b(?!\')`, KeywordReserved, Push("tname")}, - {`\'[\w\']*`, NameDecorator, nil}, - {`([a-zA-Z][\w']*)(\.)`, NameNamespace, Push("dotted")}, - {`\b(abstype|and|andalso|as|case|datatype|do|else|end|exception|fn|fun|handle|if|in|infix|infixr|let|local|nonfix|of|op|open|orelse|raise|rec|then|type|val|with|withtype|while|eqtype|functor|include|sharing|sig|signature|struct|structure|where)\b`, KeywordReserved, nil}, - {`([a-zA-Z][\w']*)`, Name, nil}, - {`\b(:|\|,=|=>|->|#|:>)\b`, KeywordReserved, nil}, - {"([!%&$#+\\-/:<=>?@\\\\~`^|*]+)", Name, nil}, - }, - "dotted": { - {`([a-zA-Z][\w']*)(\.)`, NameNamespace, nil}, - // ignoring reserved words - {`([a-zA-Z][\w']*)`, Name, Pop(1)}, - // ignoring reserved words - {"([!%&$#+\\-/:<=>?@\\\\~`^|*]+)", Name, Pop(1)}, - {`\s+`, Error, nil}, - {`\S+`, Error, nil}, - }, - "root": { - Default(Push("main")), - }, - "main": { - Include("whitespace"), - {`\b(val|and)\b(?!\')`, KeywordReserved, Push("vname")}, - {`\b(fun)\b(?!\')`, KeywordReserved, Push("#pop", "main-fun", "fname")}, - Include("delimiters"), - Include("core"), - {`\S+`, Error, nil}, - }, - "main-fun": { - Include("whitespace"), - {`\s`, Text, nil}, - {`\(\*`, CommentMultiline, Push("comment")}, - {`\b(fun|and)\b(?!\')`, KeywordReserved, Push("fname")}, - {`\b(val)\b(?!\')`, KeywordReserved, Push("#pop", "main", "vname")}, - {`\|`, Punctuation, Push("fname")}, - {`\b(case|handle)\b(?!\')`, KeywordReserved, Push("#pop", "main")}, - Include("delimiters"), - Include("core"), - {`\S+`, Error, nil}, - }, - "char": { - {`[^"\\]`, LiteralStringChar, nil}, - {`\\[\\"abtnvfr]`, LiteralStringEscape, nil}, - {`\\\^[\x40-\x5e]`, LiteralStringEscape, nil}, - {`\\[0-9]{3}`, LiteralStringEscape, nil}, - {`\\u[0-9a-fA-F]{4}`, LiteralStringEscape, nil}, - {`\\\s+\\`, LiteralStringInterpol, nil}, - {`"`, LiteralStringChar, Pop(1)}, - }, - "string": { - {`[^"\\]`, LiteralStringDouble, nil}, - {`\\[\\"abtnvfr]`, LiteralStringEscape, nil}, - {`\\\^[\x40-\x5e]`, LiteralStringEscape, nil}, - {`\\[0-9]{3}`, LiteralStringEscape, nil}, - {`\\u[0-9a-fA-F]{4}`, LiteralStringEscape, nil}, - {`\\\s+\\`, LiteralStringInterpol, nil}, - {`"`, LiteralStringDouble, Pop(1)}, - }, - "breakout": { - {`(?=\b(where|do|handle|if|sig|op|while|case|as|else|signature|andalso|struct|infixr|functor|in|structure|then|local|rec|end|fun|of|orelse|val|include|fn|with|exception|let|and|infix|sharing|datatype|type|abstype|withtype|eqtype|nonfix|raise|open)\b(?!\'))`, Text, Pop(1)}, - }, - "sname": { - Include("whitespace"), - Include("breakout"), - {`([a-zA-Z][\w']*)`, NameNamespace, nil}, - Default(Pop(1)), - }, - "fname": { - Include("whitespace"), - {`\'[\w\']*`, NameDecorator, nil}, - {`\(`, Punctuation, Push("tyvarseq")}, - {`([a-zA-Z][\w']*)`, NameFunction, Pop(1)}, - {"([!%&$#+\\-/:<=>?@\\\\~`^|*]+)", NameFunction, Pop(1)}, - Default(Pop(1)), - }, - "vname": { - Include("whitespace"), - {`\'[\w\']*`, NameDecorator, nil}, - {`\(`, Punctuation, Push("tyvarseq")}, - {"([a-zA-Z][\\w']*)(\\s*)(=(?![!%&$#+\\-/:<=>?@\\\\~`^|*]+))", ByGroups(NameVariable, Text, Punctuation), Pop(1)}, - {"([!%&$#+\\-/:<=>?@\\\\~`^|*]+)(\\s*)(=(?![!%&$#+\\-/:<=>?@\\\\~`^|*]+))", ByGroups(NameVariable, Text, Punctuation), Pop(1)}, - {`([a-zA-Z][\w']*)`, NameVariable, Pop(1)}, - {"([!%&$#+\\-/:<=>?@\\\\~`^|*]+)", NameVariable, Pop(1)}, - Default(Pop(1)), - }, - "tname": { - Include("whitespace"), - Include("breakout"), - {`\'[\w\']*`, NameDecorator, nil}, - {`\(`, Punctuation, Push("tyvarseq")}, - {"=(?![!%&$#+\\-/:<=>?@\\\\~`^|*]+)", Punctuation, Push("#pop", "typbind")}, - {`([a-zA-Z][\w']*)`, KeywordType, nil}, - {"([!%&$#+\\-/:<=>?@\\\\~`^|*]+)", KeywordType, nil}, - {`\S+`, Error, Pop(1)}, - }, - "typbind": { - Include("whitespace"), - {`\b(and)\b(?!\')`, KeywordReserved, Push("#pop", "tname")}, - Include("breakout"), - Include("core"), - {`\S+`, Error, Pop(1)}, - }, - "dname": { - Include("whitespace"), - Include("breakout"), - {`\'[\w\']*`, NameDecorator, nil}, - {`\(`, Punctuation, Push("tyvarseq")}, - {`(=)(\s*)(datatype)`, ByGroups(Punctuation, Text, KeywordReserved), Pop(1)}, - {"=(?![!%&$#+\\-/:<=>?@\\\\~`^|*]+)", Punctuation, Push("#pop", "datbind", "datcon")}, - {`([a-zA-Z][\w']*)`, KeywordType, nil}, - {"([!%&$#+\\-/:<=>?@\\\\~`^|*]+)", KeywordType, nil}, - {`\S+`, Error, Pop(1)}, - }, - "datbind": { - Include("whitespace"), - {`\b(and)\b(?!\')`, KeywordReserved, Push("#pop", "dname")}, - {`\b(withtype)\b(?!\')`, KeywordReserved, Push("#pop", "tname")}, - {`\b(of)\b(?!\')`, KeywordReserved, nil}, - {`(\|)(\s*)([a-zA-Z][\w']*)`, ByGroups(Punctuation, Text, NameClass), nil}, - {"(\\|)(\\s+)([!%&$#+\\-/:<=>?@\\\\~`^|*]+)", ByGroups(Punctuation, Text, NameClass), nil}, - Include("breakout"), - Include("core"), - {`\S+`, Error, nil}, - }, - "ename": { - Include("whitespace"), - {`(exception|and)\b(\s+)([a-zA-Z][\w']*)`, ByGroups(KeywordReserved, Text, NameClass), nil}, - {"(exception|and)\\b(\\s*)([!%&$#+\\-/:<=>?@\\\\~`^|*]+)", ByGroups(KeywordReserved, Text, NameClass), nil}, - {`\b(of)\b(?!\')`, KeywordReserved, nil}, - Include("breakout"), - Include("core"), - {`\S+`, Error, nil}, - }, - "datcon": { - Include("whitespace"), - {`([a-zA-Z][\w']*)`, NameClass, Pop(1)}, - {"([!%&$#+\\-/:<=>?@\\\\~`^|*]+)", NameClass, Pop(1)}, - {`\S+`, Error, Pop(1)}, - }, - "tyvarseq": { - {`\s`, Text, nil}, - {`\(\*`, CommentMultiline, Push("comment")}, - {`\'[\w\']*`, NameDecorator, nil}, - {`[a-zA-Z][\w']*`, Name, nil}, - {`,`, Punctuation, nil}, - {`\)`, Punctuation, Pop(1)}, - {"[!%&$#+\\-/:<=>?@\\\\~`^|*]+", Name, nil}, - }, - "comment": { - {`[^(*)]`, CommentMultiline, nil}, - {`\(\*`, CommentMultiline, Push()}, - {`\*\)`, CommentMultiline, Pop(1)}, - {`[(*)]`, CommentMultiline, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/s/snobol.go b/vendor/github.com/alecthomas/chroma/lexers/s/snobol.go deleted file mode 100644 index c999b50..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/s/snobol.go +++ /dev/null @@ -1,48 +0,0 @@ -package s - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Snobol lexer. -var Snobol = internal.Register(MustNewLexer( - &Config{ - Name: "Snobol", - Aliases: []string{"snobol"}, - Filenames: []string{"*.snobol"}, - MimeTypes: []string{"text/x-snobol"}, - }, - Rules{ - "root": { - {`\*.*\n`, Comment, nil}, - {`[+.] `, Punctuation, Push("statement")}, - {`-.*\n`, Comment, nil}, - {`END\s*\n`, NameLabel, Push("heredoc")}, - {`[A-Za-z$][\w$]*`, NameLabel, Push("statement")}, - {`\s+`, Text, Push("statement")}, - }, - "statement": { - {`\s*\n`, Text, Pop(1)}, - {`\s+`, Text, nil}, - {`(?<=[^\w.])(LT|LE|EQ|NE|GE|GT|INTEGER|IDENT|DIFFER|LGT|SIZE|REPLACE|TRIM|DUPL|REMDR|DATE|TIME|EVAL|APPLY|OPSYN|LOAD|UNLOAD|LEN|SPAN|BREAK|ANY|NOTANY|TAB|RTAB|REM|POS|RPOS|FAIL|FENCE|ABORT|ARB|ARBNO|BAL|SUCCEED|INPUT|OUTPUT|TERMINAL)(?=[^\w.])`, NameBuiltin, nil}, - {`[A-Za-z][\w.]*`, Name, nil}, - {`\*\*|[?$.!%*/#+\-@|&\\=]`, Operator, nil}, - {`"[^"]*"`, LiteralString, nil}, - {`'[^']*'`, LiteralString, nil}, - {`[0-9]+(?=[^.EeDd])`, LiteralNumberInteger, nil}, - {`[0-9]+(\.[0-9]*)?([EDed][-+]?[0-9]+)?`, LiteralNumberFloat, nil}, - {`:`, Punctuation, Push("goto")}, - {`[()<>,;]`, Punctuation, nil}, - }, - "goto": { - {`\s*\n`, Text, Pop(2)}, - {`\s+`, Text, nil}, - {`F|S`, Keyword, nil}, - {`(\()([A-Za-z][\w.]*)(\))`, ByGroups(Punctuation, NameLabel, Punctuation), nil}, - }, - "heredoc": { - {`.*\n`, LiteralStringHeredoc, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/s/solidity.go b/vendor/github.com/alecthomas/chroma/lexers/s/solidity.go deleted file mode 100644 index d7cf0f9..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/s/solidity.go +++ /dev/null @@ -1,110 +0,0 @@ -package s - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Solidity lexer. -var Solidity = internal.Register(MustNewLexer( - &Config{ - Name: "Solidity", - Aliases: []string{"sol", "solidity"}, - Filenames: []string{"*.sol"}, - MimeTypes: []string{}, - DotAll: true, - }, - Rules{ - "assembly": { - Include("comments"), - Include("numbers"), - Include("strings"), - Include("whitespace"), - {`\{`, Punctuation, Push()}, - {`\}`, Punctuation, Pop(1)}, - {`[(),]`, Punctuation, nil}, - {`:=|=:`, Operator, nil}, - {`(let)(\s*)(\w*\b)`, ByGroups(OperatorWord, Text, NameVariable), nil}, - {`(\w*\b)(\:[^=])`, ByGroups(NameLabel, Punctuation), nil}, - {`(stop|add|mul|sub|div|sdiv|mod|smod|addmod|mulmod|exp|signextend|lt|gt|slt|sgt|eq|iszero|and|or|xor|not|byte|keccak256|sha3|address|balance|origin|caller|callvalue|calldataload|calldatasize|calldatacopy|codesize|codecopy|gasprice|extcodesize|extcodecopy|blockhash|coinbase|timestamp|number|difficulty|gaslimit|pop|mload|mstore|mstore8|sload|sstore|for|switch|jump|jumpi|pc|msize|gas|jumpdest|push1|push2|push32|dup1|dup2|dup16|swap1|swap2|swap16|log0|log1|log4|create|call|callcode|return|delegatecall|suicide|returndatasize|returndatacopy|staticcall|revert|invalid)\b`, NameFunction, nil}, - {`[a-zA-Z_]\w*`, Name, nil}, - }, - "comments": { - {`//([\w\W]*?\n)`, CommentSingle, nil}, - {`/[*][\w\W]*?[*]/`, CommentMultiline, nil}, - {`/[*][\w\W]*`, CommentMultiline, nil}, - }, - "keywords-other": { - {Words(``, `\b`, `for`, `in`, `while`, `do`, `break`, `return`, `returns`, `continue`, `if`, `else`, `throw`, `new`, `delete`), Keyword, nil}, - {`assembly\b`, Keyword, Push("assembly")}, - {Words(``, `\b`, `contract`, `interface`, `enum`, `event`, `function`, `library`, `mapping`, `modifier`, `struct`, `var`), KeywordDeclaration, nil}, - {`(import|using)\b`, KeywordNamespace, nil}, - {`pragma (solidity|experimental)\b`, KeywordReserved, nil}, - {`(_|as|constant|default|from|is)\b`, KeywordReserved, nil}, - {`payable\b`, KeywordReserved, nil}, - {`(memory|storage)\b`, KeywordReserved, nil}, - {`(external|internal|private|public)\b`, KeywordReserved, nil}, - {`(anonymous|indexed)\b`, KeywordReserved, nil}, - {`(abstract|pure|static|view)\b`, KeywordReserved, nil}, - {`(true|false)\b`, KeywordConstant, nil}, - {`(wei|finney|szabo|ether)\b`, KeywordConstant, nil}, - {`(seconds|minutes|hours|days|weeks|years)\b`, KeywordConstant, nil}, - }, - "keywords-types": { - {Words(``, `\b`, `address`, `bool`, `byte`, `bytes`, `int`, `fixed`, `string`, `ufixed`, `uint`), KeywordType, nil}, - {Words(``, `\b`, `int8`, `int16`, `int24`, `int32`, `int40`, `int48`, `int56`, `int64`, `int72`, `int80`, `int88`, `int96`, `int104`, `int112`, `int120`, `int128`, `int136`, `int144`, `int152`, `int160`, `int168`, `int176`, `int184`, `int192`, `int200`, `int208`, `int216`, `int224`, `int232`, `int240`, `int248`, `int256`), KeywordType, nil}, - {Words(``, `\b`, `uint8`, `uint16`, `uint24`, `uint32`, `uint40`, `uint48`, `uint56`, `uint64`, `uint72`, `uint80`, `uint88`, `uint96`, `uint104`, `uint112`, `uint120`, `uint128`, `uint136`, `uint144`, `uint152`, `uint160`, `uint168`, `uint176`, `uint184`, `uint192`, `uint200`, `uint208`, `uint216`, `uint224`, `uint232`, `uint240`, `uint248`, `uint256`), KeywordType, nil}, - {Words(``, `\b`, `bytes1`, `bytes2`, `bytes3`, `bytes4`, `bytes5`, `bytes6`, `bytes7`, `bytes8`, `bytes9`, `bytes10`, `bytes11`, `bytes12`, `bytes13`, `bytes14`, `bytes15`, `bytes16`, `bytes17`, `bytes18`, `bytes19`, `bytes20`, `bytes21`, `bytes22`, `bytes23`, `bytes24`, `bytes25`, `bytes26`, `bytes27`, `bytes28`, `bytes29`, `bytes30`, `bytes31`, `bytes32`), KeywordType, nil}, - {Words(``, `\b`, `fixed8x0`, `fixed8x1`, `fixed8x2`, `fixed8x3`, `fixed8x4`, `fixed8x5`, `fixed8x6`, `fixed8x7`, `fixed8x8`, `fixed8x9`, `fixed8x10`, `fixed8x11`, `fixed8x12`, `fixed8x13`, `fixed8x14`, `fixed8x15`, `fixed8x16`, `fixed8x17`, `fixed8x18`, `fixed8x19`, `fixed8x20`, `fixed8x21`, `fixed8x22`, `fixed8x23`, `fixed8x24`, `fixed8x25`, `fixed8x26`, `fixed8x27`, `fixed8x28`, `fixed8x29`, `fixed8x30`, `fixed8x31`, `fixed8x32`, `fixed8x33`, `fixed8x34`, `fixed8x35`, `fixed8x36`, `fixed8x37`, `fixed8x38`, `fixed8x39`, `fixed8x40`, `fixed8x41`, `fixed8x42`, `fixed8x43`, `fixed8x44`, `fixed8x45`, `fixed8x46`, `fixed8x47`, `fixed8x48`, `fixed8x49`, `fixed8x50`, `fixed8x51`, `fixed8x52`, `fixed8x53`, `fixed8x54`, `fixed8x55`, `fixed8x56`, `fixed8x57`, `fixed8x58`, `fixed8x59`, `fixed8x60`, `fixed8x61`, `fixed8x62`, `fixed8x63`, `fixed8x64`, `fixed8x65`, `fixed8x66`, `fixed8x67`, `fixed8x68`, `fixed8x69`, `fixed8x70`, `fixed8x71`, `fixed8x72`, `fixed8x73`, `fixed8x74`, `fixed8x75`, `fixed8x76`, `fixed8x77`, `fixed8x78`, `fixed8x79`, `fixed8x80`, `fixed16x0`, `fixed16x1`, `fixed16x2`, `fixed16x3`, `fixed16x4`, `fixed16x5`, `fixed16x6`, `fixed16x7`, `fixed16x8`, `fixed16x9`, `fixed16x10`, `fixed16x11`, `fixed16x12`, `fixed16x13`, `fixed16x14`, `fixed16x15`, `fixed16x16`, `fixed16x17`, `fixed16x18`, `fixed16x19`, `fixed16x20`, `fixed16x21`, `fixed16x22`, `fixed16x23`, `fixed16x24`, `fixed16x25`, `fixed16x26`, `fixed16x27`, `fixed16x28`, `fixed16x29`, `fixed16x30`, `fixed16x31`, `fixed16x32`, `fixed16x33`, `fixed16x34`, `fixed16x35`, `fixed16x36`, `fixed16x37`, `fixed16x38`, `fixed16x39`, `fixed16x40`, `fixed16x41`, `fixed16x42`, `fixed16x43`, `fixed16x44`, `fixed16x45`, `fixed16x46`, `fixed16x47`, `fixed16x48`, `fixed16x49`, `fixed16x50`, `fixed16x51`, `fixed16x52`, `fixed16x53`, `fixed16x54`, `fixed16x55`, `fixed16x56`, `fixed16x57`, `fixed16x58`, `fixed16x59`, `fixed16x60`, `fixed16x61`, `fixed16x62`, `fixed16x63`, `fixed16x64`, `fixed16x65`, `fixed16x66`, `fixed16x67`, `fixed16x68`, `fixed16x69`, `fixed16x70`, `fixed16x71`, `fixed16x72`, `fixed16x73`, `fixed16x74`, `fixed16x75`, `fixed16x76`, `fixed16x77`, `fixed16x78`, `fixed16x79`, `fixed16x80`, `fixed24x0`, `fixed24x1`, `fixed24x2`, `fixed24x3`, `fixed24x4`, `fixed24x5`, `fixed24x6`, `fixed24x7`, `fixed24x8`, `fixed24x9`, `fixed24x10`, `fixed24x11`, `fixed24x12`, `fixed24x13`, `fixed24x14`, `fixed24x15`, `fixed24x16`, `fixed24x17`, `fixed24x18`, `fixed24x19`, `fixed24x20`, `fixed24x21`, `fixed24x22`, `fixed24x23`, `fixed24x24`, `fixed24x25`, `fixed24x26`, `fixed24x27`, `fixed24x28`, `fixed24x29`, `fixed24x30`, `fixed24x31`, `fixed24x32`, `fixed24x33`, `fixed24x34`, `fixed24x35`, `fixed24x36`, `fixed24x37`, `fixed24x38`, `fixed24x39`, `fixed24x40`, `fixed24x41`, `fixed24x42`, `fixed24x43`, `fixed24x44`, `fixed24x45`, `fixed24x46`, `fixed24x47`, `fixed24x48`, `fixed24x49`, `fixed24x50`, `fixed24x51`, `fixed24x52`, `fixed24x53`, `fixed24x54`, `fixed24x55`, `fixed24x56`, `fixed24x57`, `fixed24x58`, `fixed24x59`, `fixed24x60`, `fixed24x61`, `fixed24x62`, `fixed24x63`, `fixed24x64`, `fixed24x65`, `fixed24x66`, `fixed24x67`, `fixed24x68`, `fixed24x69`, `fixed24x70`, `fixed24x71`, `fixed24x72`, `fixed24x73`, `fixed24x74`, `fixed24x75`, `fixed24x76`, `fixed24x77`, `fixed24x78`, `fixed24x79`, `fixed24x80`, `fixed32x0`, `fixed32x1`, `fixed32x2`, `fixed32x3`, `fixed32x4`, `fixed32x5`, `fixed32x6`, `fixed32x7`, `fixed32x8`, `fixed32x9`, `fixed32x10`, `fixed32x11`, `fixed32x12`, `fixed32x13`, `fixed32x14`, `fixed32x15`, `fixed32x16`, `fixed32x17`, `fixed32x18`, `fixed32x19`, `fixed32x20`, `fixed32x21`, `fixed32x22`, `fixed32x23`, `fixed32x24`, `fixed32x25`, `fixed32x26`, `fixed32x27`, `fixed32x28`, `fixed32x29`, `fixed32x30`, `fixed32x31`, `fixed32x32`, `fixed32x33`, `fixed32x34`, `fixed32x35`, `fixed32x36`, `fixed32x37`, `fixed32x38`, `fixed32x39`, `fixed32x40`, `fixed32x41`, `fixed32x42`, `fixed32x43`, `fixed32x44`, `fixed32x45`, `fixed32x46`, `fixed32x47`, `fixed32x48`, `fixed32x49`, `fixed32x50`, `fixed32x51`, `fixed32x52`, `fixed32x53`, `fixed32x54`, `fixed32x55`, `fixed32x56`, `fixed32x57`, `fixed32x58`, `fixed32x59`, `fixed32x60`, `fixed32x61`, `fixed32x62`, `fixed32x63`, `fixed32x64`, `fixed32x65`, `fixed32x66`, `fixed32x67`, `fixed32x68`, `fixed32x69`, `fixed32x70`, `fixed32x71`, `fixed32x72`, `fixed32x73`, `fixed32x74`, `fixed32x75`, `fixed32x76`, `fixed32x77`, `fixed32x78`, `fixed32x79`, `fixed32x80`, `fixed40x0`, `fixed40x1`, `fixed40x2`, `fixed40x3`, `fixed40x4`, `fixed40x5`, `fixed40x6`, `fixed40x7`, `fixed40x8`, `fixed40x9`, `fixed40x10`, `fixed40x11`, `fixed40x12`, `fixed40x13`, `fixed40x14`, `fixed40x15`, `fixed40x16`, `fixed40x17`, `fixed40x18`, `fixed40x19`, `fixed40x20`, `fixed40x21`, `fixed40x22`, `fixed40x23`, `fixed40x24`, `fixed40x25`, `fixed40x26`, `fixed40x27`, `fixed40x28`, `fixed40x29`, `fixed40x30`, `fixed40x31`, `fixed40x32`, `fixed40x33`, `fixed40x34`, `fixed40x35`, `fixed40x36`, `fixed40x37`, `fixed40x38`, `fixed40x39`, `fixed40x40`, `fixed40x41`, `fixed40x42`, `fixed40x43`, `fixed40x44`, `fixed40x45`, `fixed40x46`, `fixed40x47`, `fixed40x48`, `fixed40x49`, `fixed40x50`, `fixed40x51`, `fixed40x52`, `fixed40x53`, `fixed40x54`, `fixed40x55`, `fixed40x56`, `fixed40x57`, `fixed40x58`, `fixed40x59`, `fixed40x60`, `fixed40x61`, `fixed40x62`, `fixed40x63`, `fixed40x64`, `fixed40x65`, `fixed40x66`, `fixed40x67`, `fixed40x68`, `fixed40x69`, `fixed40x70`, `fixed40x71`, `fixed40x72`, `fixed40x73`, `fixed40x74`, `fixed40x75`, `fixed40x76`, `fixed40x77`, `fixed40x78`, `fixed40x79`, `fixed40x80`, `fixed48x0`, `fixed48x1`, `fixed48x2`, `fixed48x3`, `fixed48x4`, `fixed48x5`, `fixed48x6`, `fixed48x7`, `fixed48x8`, `fixed48x9`, `fixed48x10`, `fixed48x11`, `fixed48x12`, `fixed48x13`, `fixed48x14`, `fixed48x15`, `fixed48x16`, `fixed48x17`, `fixed48x18`, `fixed48x19`, `fixed48x20`, `fixed48x21`, `fixed48x22`, `fixed48x23`, `fixed48x24`, `fixed48x25`, `fixed48x26`, `fixed48x27`, `fixed48x28`, `fixed48x29`, `fixed48x30`, `fixed48x31`, `fixed48x32`, `fixed48x33`, `fixed48x34`, `fixed48x35`, `fixed48x36`, `fixed48x37`, `fixed48x38`, `fixed48x39`, `fixed48x40`, `fixed48x41`, `fixed48x42`, `fixed48x43`, `fixed48x44`, `fixed48x45`, `fixed48x46`, `fixed48x47`, `fixed48x48`, `fixed48x49`, `fixed48x50`, `fixed48x51`, `fixed48x52`, `fixed48x53`, `fixed48x54`, `fixed48x55`, `fixed48x56`, `fixed48x57`, `fixed48x58`, `fixed48x59`, `fixed48x60`, `fixed48x61`, `fixed48x62`, `fixed48x63`, `fixed48x64`, `fixed48x65`, `fixed48x66`, `fixed48x67`, `fixed48x68`, `fixed48x69`, `fixed48x70`, `fixed48x71`, `fixed48x72`, `fixed48x73`, `fixed48x74`, `fixed48x75`, `fixed48x76`, `fixed48x77`, `fixed48x78`, `fixed48x79`, `fixed48x80`, `fixed56x0`, `fixed56x1`, `fixed56x2`, `fixed56x3`, `fixed56x4`, `fixed56x5`, `fixed56x6`, `fixed56x7`, `fixed56x8`, `fixed56x9`, `fixed56x10`, `fixed56x11`, `fixed56x12`, `fixed56x13`, `fixed56x14`, `fixed56x15`, `fixed56x16`, `fixed56x17`, `fixed56x18`, `fixed56x19`, `fixed56x20`, `fixed56x21`, `fixed56x22`, `fixed56x23`, `fixed56x24`, `fixed56x25`, `fixed56x26`, `fixed56x27`, `fixed56x28`, `fixed56x29`, `fixed56x30`, `fixed56x31`, `fixed56x32`, `fixed56x33`, `fixed56x34`, `fixed56x35`, `fixed56x36`, `fixed56x37`, `fixed56x38`, `fixed56x39`, `fixed56x40`, `fixed56x41`, `fixed56x42`, `fixed56x43`, `fixed56x44`, `fixed56x45`, `fixed56x46`, `fixed56x47`, `fixed56x48`, `fixed56x49`, `fixed56x50`, `fixed56x51`, `fixed56x52`, `fixed56x53`, `fixed56x54`, `fixed56x55`, `fixed56x56`, `fixed56x57`, `fixed56x58`, `fixed56x59`, `fixed56x60`, `fixed56x61`, `fixed56x62`, `fixed56x63`, `fixed56x64`, `fixed56x65`, `fixed56x66`, `fixed56x67`, `fixed56x68`, `fixed56x69`, `fixed56x70`, `fixed56x71`, `fixed56x72`, `fixed56x73`, `fixed56x74`, `fixed56x75`, `fixed56x76`, `fixed56x77`, `fixed56x78`, `fixed56x79`, `fixed56x80`, `fixed64x0`, `fixed64x1`, `fixed64x2`, `fixed64x3`, `fixed64x4`, `fixed64x5`, `fixed64x6`, `fixed64x7`, `fixed64x8`, `fixed64x9`, `fixed64x10`, `fixed64x11`, `fixed64x12`, `fixed64x13`, `fixed64x14`, `fixed64x15`, `fixed64x16`, `fixed64x17`, `fixed64x18`, `fixed64x19`, `fixed64x20`, `fixed64x21`, `fixed64x22`, `fixed64x23`, `fixed64x24`, `fixed64x25`, `fixed64x26`, `fixed64x27`, `fixed64x28`, `fixed64x29`, `fixed64x30`, `fixed64x31`, `fixed64x32`, `fixed64x33`, `fixed64x34`, `fixed64x35`, `fixed64x36`, `fixed64x37`, `fixed64x38`, `fixed64x39`, `fixed64x40`, `fixed64x41`, `fixed64x42`, `fixed64x43`, `fixed64x44`, `fixed64x45`, `fixed64x46`, `fixed64x47`, `fixed64x48`, `fixed64x49`, `fixed64x50`, `fixed64x51`, `fixed64x52`, `fixed64x53`, `fixed64x54`, `fixed64x55`, `fixed64x56`, `fixed64x57`, `fixed64x58`, `fixed64x59`, `fixed64x60`, `fixed64x61`, `fixed64x62`, `fixed64x63`, `fixed64x64`, `fixed64x65`, `fixed64x66`, `fixed64x67`, `fixed64x68`, `fixed64x69`, `fixed64x70`, `fixed64x71`, `fixed64x72`, `fixed64x73`, `fixed64x74`, `fixed64x75`, `fixed64x76`, `fixed64x77`, `fixed64x78`, `fixed64x79`, `fixed64x80`, `fixed72x0`, `fixed72x1`, `fixed72x2`, `fixed72x3`, `fixed72x4`, `fixed72x5`, `fixed72x6`, `fixed72x7`, `fixed72x8`, `fixed72x9`, `fixed72x10`, `fixed72x11`, `fixed72x12`, `fixed72x13`, `fixed72x14`, `fixed72x15`, `fixed72x16`, `fixed72x17`, `fixed72x18`, `fixed72x19`, `fixed72x20`, `fixed72x21`, `fixed72x22`, `fixed72x23`, `fixed72x24`, `fixed72x25`, `fixed72x26`, `fixed72x27`, `fixed72x28`, `fixed72x29`, `fixed72x30`, `fixed72x31`, `fixed72x32`, `fixed72x33`, `fixed72x34`, `fixed72x35`, `fixed72x36`, `fixed72x37`, `fixed72x38`, `fixed72x39`, `fixed72x40`, `fixed72x41`, `fixed72x42`, `fixed72x43`, `fixed72x44`, `fixed72x45`, `fixed72x46`, `fixed72x47`, `fixed72x48`, `fixed72x49`, `fixed72x50`, `fixed72x51`, `fixed72x52`, `fixed72x53`, `fixed72x54`, `fixed72x55`, `fixed72x56`, `fixed72x57`, `fixed72x58`, `fixed72x59`, `fixed72x60`, `fixed72x61`, `fixed72x62`, `fixed72x63`, `fixed72x64`, `fixed72x65`, `fixed72x66`, `fixed72x67`, `fixed72x68`, `fixed72x69`, `fixed72x70`, `fixed72x71`, `fixed72x72`, `fixed72x73`, `fixed72x74`, `fixed72x75`, `fixed72x76`, `fixed72x77`, `fixed72x78`, `fixed72x79`, `fixed72x80`, `fixed80x0`, `fixed80x1`, `fixed80x2`, `fixed80x3`, `fixed80x4`, `fixed80x5`, `fixed80x6`, `fixed80x7`, `fixed80x8`, `fixed80x9`, `fixed80x10`, `fixed80x11`, `fixed80x12`, `fixed80x13`, `fixed80x14`, `fixed80x15`, `fixed80x16`, `fixed80x17`, `fixed80x18`, `fixed80x19`, `fixed80x20`, `fixed80x21`, `fixed80x22`, `fixed80x23`, `fixed80x24`, `fixed80x25`, `fixed80x26`, `fixed80x27`, `fixed80x28`, `fixed80x29`, `fixed80x30`, `fixed80x31`, `fixed80x32`, `fixed80x33`, `fixed80x34`, `fixed80x35`, `fixed80x36`, `fixed80x37`, `fixed80x38`, `fixed80x39`, `fixed80x40`, `fixed80x41`, `fixed80x42`, `fixed80x43`, `fixed80x44`, `fixed80x45`, `fixed80x46`, `fixed80x47`, `fixed80x48`, `fixed80x49`, `fixed80x50`, `fixed80x51`, `fixed80x52`, `fixed80x53`, `fixed80x54`, `fixed80x55`, `fixed80x56`, `fixed80x57`, `fixed80x58`, `fixed80x59`, `fixed80x60`, `fixed80x61`, `fixed80x62`, `fixed80x63`, `fixed80x64`, `fixed80x65`, `fixed80x66`, `fixed80x67`, `fixed80x68`, `fixed80x69`, `fixed80x70`, `fixed80x71`, `fixed80x72`, `fixed80x73`, `fixed80x74`, `fixed80x75`, `fixed80x76`, `fixed80x77`, `fixed80x78`, `fixed80x79`, `fixed80x80`, `fixed88x0`, `fixed88x1`, `fixed88x2`, `fixed88x3`, `fixed88x4`, `fixed88x5`, `fixed88x6`, `fixed88x7`, `fixed88x8`, `fixed88x9`, `fixed88x10`, `fixed88x11`, `fixed88x12`, `fixed88x13`, `fixed88x14`, `fixed88x15`, `fixed88x16`, `fixed88x17`, `fixed88x18`, `fixed88x19`, `fixed88x20`, `fixed88x21`, `fixed88x22`, `fixed88x23`, `fixed88x24`, `fixed88x25`, `fixed88x26`, `fixed88x27`, `fixed88x28`, `fixed88x29`, `fixed88x30`, `fixed88x31`, `fixed88x32`, `fixed88x33`, `fixed88x34`, `fixed88x35`, `fixed88x36`, `fixed88x37`, `fixed88x38`, `fixed88x39`, `fixed88x40`, `fixed88x41`, `fixed88x42`, `fixed88x43`, `fixed88x44`, `fixed88x45`, `fixed88x46`, `fixed88x47`, `fixed88x48`, `fixed88x49`, `fixed88x50`, `fixed88x51`, `fixed88x52`, `fixed88x53`, `fixed88x54`, `fixed88x55`, `fixed88x56`, `fixed88x57`, `fixed88x58`, `fixed88x59`, `fixed88x60`, `fixed88x61`, `fixed88x62`, `fixed88x63`, `fixed88x64`, `fixed88x65`, `fixed88x66`, `fixed88x67`, `fixed88x68`, `fixed88x69`, `fixed88x70`, `fixed88x71`, `fixed88x72`, `fixed88x73`, `fixed88x74`, `fixed88x75`, `fixed88x76`, `fixed88x77`, `fixed88x78`, `fixed88x79`, `fixed88x80`, `fixed96x0`, `fixed96x1`, `fixed96x2`, `fixed96x3`, `fixed96x4`, `fixed96x5`, `fixed96x6`, `fixed96x7`, `fixed96x8`, `fixed96x9`, `fixed96x10`, `fixed96x11`, `fixed96x12`, `fixed96x13`, `fixed96x14`, `fixed96x15`, `fixed96x16`, `fixed96x17`, `fixed96x18`, `fixed96x19`, `fixed96x20`, `fixed96x21`, `fixed96x22`, `fixed96x23`, `fixed96x24`, `fixed96x25`, `fixed96x26`, `fixed96x27`, `fixed96x28`, `fixed96x29`, `fixed96x30`, `fixed96x31`, `fixed96x32`, `fixed96x33`, `fixed96x34`, `fixed96x35`, `fixed96x36`, `fixed96x37`, `fixed96x38`, `fixed96x39`, `fixed96x40`, `fixed96x41`, `fixed96x42`, `fixed96x43`, `fixed96x44`, `fixed96x45`, `fixed96x46`, `fixed96x47`, `fixed96x48`, `fixed96x49`, `fixed96x50`, `fixed96x51`, `fixed96x52`, `fixed96x53`, `fixed96x54`, `fixed96x55`, `fixed96x56`, `fixed96x57`, `fixed96x58`, `fixed96x59`, `fixed96x60`, `fixed96x61`, `fixed96x62`, `fixed96x63`, `fixed96x64`, `fixed96x65`, `fixed96x66`, `fixed96x67`, `fixed96x68`, `fixed96x69`, `fixed96x70`, `fixed96x71`, `fixed96x72`, `fixed96x73`, `fixed96x74`, `fixed96x75`, `fixed96x76`, `fixed96x77`, `fixed96x78`, `fixed96x79`, `fixed96x80`, `fixed104x0`, `fixed104x1`, `fixed104x2`, `fixed104x3`, `fixed104x4`, `fixed104x5`, `fixed104x6`, `fixed104x7`, `fixed104x8`, `fixed104x9`, `fixed104x10`, `fixed104x11`, `fixed104x12`, `fixed104x13`, `fixed104x14`, `fixed104x15`, `fixed104x16`, `fixed104x17`, `fixed104x18`, `fixed104x19`, `fixed104x20`, `fixed104x21`, `fixed104x22`, `fixed104x23`, `fixed104x24`, `fixed104x25`, `fixed104x26`, `fixed104x27`, `fixed104x28`, `fixed104x29`, `fixed104x30`, `fixed104x31`, `fixed104x32`, `fixed104x33`, `fixed104x34`, `fixed104x35`, `fixed104x36`, `fixed104x37`, `fixed104x38`, `fixed104x39`, `fixed104x40`, `fixed104x41`, `fixed104x42`, `fixed104x43`, `fixed104x44`, `fixed104x45`, `fixed104x46`, `fixed104x47`, `fixed104x48`, `fixed104x49`, `fixed104x50`, `fixed104x51`, `fixed104x52`, `fixed104x53`, `fixed104x54`, `fixed104x55`, `fixed104x56`, `fixed104x57`, `fixed104x58`, `fixed104x59`, `fixed104x60`, `fixed104x61`, `fixed104x62`, `fixed104x63`, `fixed104x64`, `fixed104x65`, `fixed104x66`, `fixed104x67`, `fixed104x68`, `fixed104x69`, `fixed104x70`, `fixed104x71`, `fixed104x72`, `fixed104x73`, `fixed104x74`, `fixed104x75`, `fixed104x76`, `fixed104x77`, `fixed104x78`, `fixed104x79`, `fixed104x80`, `fixed112x0`, `fixed112x1`, `fixed112x2`, `fixed112x3`, `fixed112x4`, `fixed112x5`, `fixed112x6`, `fixed112x7`, `fixed112x8`, `fixed112x9`, `fixed112x10`, `fixed112x11`, `fixed112x12`, `fixed112x13`, `fixed112x14`, `fixed112x15`, `fixed112x16`, `fixed112x17`, `fixed112x18`, `fixed112x19`, `fixed112x20`, `fixed112x21`, `fixed112x22`, `fixed112x23`, `fixed112x24`, `fixed112x25`, `fixed112x26`, `fixed112x27`, `fixed112x28`, `fixed112x29`, `fixed112x30`, `fixed112x31`, `fixed112x32`, `fixed112x33`, `fixed112x34`, `fixed112x35`, `fixed112x36`, `fixed112x37`, `fixed112x38`, `fixed112x39`, `fixed112x40`, `fixed112x41`, `fixed112x42`, `fixed112x43`, `fixed112x44`, `fixed112x45`, `fixed112x46`, `fixed112x47`, `fixed112x48`, `fixed112x49`, `fixed112x50`, `fixed112x51`, `fixed112x52`, `fixed112x53`, `fixed112x54`, `fixed112x55`, `fixed112x56`, `fixed112x57`, `fixed112x58`, `fixed112x59`, `fixed112x60`, `fixed112x61`, `fixed112x62`, `fixed112x63`, `fixed112x64`, `fixed112x65`, `fixed112x66`, `fixed112x67`, `fixed112x68`, `fixed112x69`, `fixed112x70`, `fixed112x71`, `fixed112x72`, `fixed112x73`, `fixed112x74`, `fixed112x75`, `fixed112x76`, `fixed112x77`, `fixed112x78`, `fixed112x79`, `fixed112x80`, `fixed120x0`, `fixed120x1`, `fixed120x2`, `fixed120x3`, `fixed120x4`, `fixed120x5`, `fixed120x6`, `fixed120x7`, `fixed120x8`, `fixed120x9`, `fixed120x10`, `fixed120x11`, `fixed120x12`, `fixed120x13`, `fixed120x14`, `fixed120x15`, `fixed120x16`, `fixed120x17`, `fixed120x18`, `fixed120x19`, `fixed120x20`, `fixed120x21`, `fixed120x22`, `fixed120x23`, `fixed120x24`, `fixed120x25`, `fixed120x26`, `fixed120x27`, `fixed120x28`, `fixed120x29`, `fixed120x30`, `fixed120x31`, `fixed120x32`, `fixed120x33`, `fixed120x34`, `fixed120x35`, `fixed120x36`, `fixed120x37`, `fixed120x38`, `fixed120x39`, `fixed120x40`, `fixed120x41`, `fixed120x42`, `fixed120x43`, `fixed120x44`, `fixed120x45`, `fixed120x46`, `fixed120x47`, `fixed120x48`, `fixed120x49`, `fixed120x50`, `fixed120x51`, `fixed120x52`, `fixed120x53`, `fixed120x54`, `fixed120x55`, `fixed120x56`, `fixed120x57`, `fixed120x58`, `fixed120x59`, `fixed120x60`, `fixed120x61`, `fixed120x62`, `fixed120x63`, `fixed120x64`, `fixed120x65`, `fixed120x66`, `fixed120x67`, `fixed120x68`, `fixed120x69`, `fixed120x70`, `fixed120x71`, `fixed120x72`, `fixed120x73`, `fixed120x74`, `fixed120x75`, `fixed120x76`, `fixed120x77`, `fixed120x78`, `fixed120x79`, `fixed120x80`, `fixed128x0`, `fixed128x1`, `fixed128x2`, `fixed128x3`, `fixed128x4`, `fixed128x5`, `fixed128x6`, `fixed128x7`, `fixed128x8`, `fixed128x9`, `fixed128x10`, `fixed128x11`, `fixed128x12`, `fixed128x13`, `fixed128x14`, `fixed128x15`, `fixed128x16`, `fixed128x17`, `fixed128x18`, `fixed128x19`, `fixed128x20`, `fixed128x21`, `fixed128x22`, `fixed128x23`, `fixed128x24`, `fixed128x25`, `fixed128x26`, `fixed128x27`, `fixed128x28`, `fixed128x29`, `fixed128x30`, `fixed128x31`, `fixed128x32`, `fixed128x33`, `fixed128x34`, `fixed128x35`, `fixed128x36`, `fixed128x37`, `fixed128x38`, `fixed128x39`, `fixed128x40`, `fixed128x41`, `fixed128x42`, `fixed128x43`, `fixed128x44`, `fixed128x45`, `fixed128x46`, `fixed128x47`, `fixed128x48`, `fixed128x49`, `fixed128x50`, `fixed128x51`, `fixed128x52`, `fixed128x53`, `fixed128x54`, `fixed128x55`, `fixed128x56`, `fixed128x57`, `fixed128x58`, `fixed128x59`, `fixed128x60`, `fixed128x61`, `fixed128x62`, `fixed128x63`, `fixed128x64`, `fixed128x65`, `fixed128x66`, `fixed128x67`, `fixed128x68`, `fixed128x69`, `fixed128x70`, `fixed128x71`, `fixed128x72`, `fixed128x73`, `fixed128x74`, `fixed128x75`, `fixed128x76`, `fixed128x77`, `fixed128x78`, `fixed128x79`, `fixed128x80`, `fixed136x0`, `fixed136x1`, `fixed136x2`, `fixed136x3`, `fixed136x4`, `fixed136x5`, `fixed136x6`, `fixed136x7`, `fixed136x8`, `fixed136x9`, `fixed136x10`, `fixed136x11`, `fixed136x12`, `fixed136x13`, `fixed136x14`, `fixed136x15`, `fixed136x16`, `fixed136x17`, `fixed136x18`, `fixed136x19`, `fixed136x20`, `fixed136x21`, `fixed136x22`, `fixed136x23`, `fixed136x24`, `fixed136x25`, `fixed136x26`, `fixed136x27`, `fixed136x28`, `fixed136x29`, `fixed136x30`, `fixed136x31`, `fixed136x32`, `fixed136x33`, `fixed136x34`, `fixed136x35`, `fixed136x36`, `fixed136x37`, `fixed136x38`, `fixed136x39`, `fixed136x40`, `fixed136x41`, `fixed136x42`, `fixed136x43`, `fixed136x44`, `fixed136x45`, `fixed136x46`, `fixed136x47`, `fixed136x48`, `fixed136x49`, `fixed136x50`, `fixed136x51`, `fixed136x52`, `fixed136x53`, `fixed136x54`, `fixed136x55`, `fixed136x56`, `fixed136x57`, `fixed136x58`, `fixed136x59`, `fixed136x60`, `fixed136x61`, `fixed136x62`, `fixed136x63`, `fixed136x64`, `fixed136x65`, `fixed136x66`, `fixed136x67`, `fixed136x68`, `fixed136x69`, `fixed136x70`, `fixed136x71`, `fixed136x72`, `fixed136x73`, `fixed136x74`, `fixed136x75`, `fixed136x76`, `fixed136x77`, `fixed136x78`, `fixed136x79`, `fixed136x80`, `fixed144x0`, `fixed144x1`, `fixed144x2`, `fixed144x3`, `fixed144x4`, `fixed144x5`, `fixed144x6`, `fixed144x7`, `fixed144x8`, `fixed144x9`, `fixed144x10`, `fixed144x11`, `fixed144x12`, `fixed144x13`, `fixed144x14`, `fixed144x15`, `fixed144x16`, `fixed144x17`, `fixed144x18`, `fixed144x19`, `fixed144x20`, `fixed144x21`, `fixed144x22`, `fixed144x23`, `fixed144x24`, `fixed144x25`, `fixed144x26`, `fixed144x27`, `fixed144x28`, `fixed144x29`, `fixed144x30`, `fixed144x31`, `fixed144x32`, `fixed144x33`, `fixed144x34`, `fixed144x35`, `fixed144x36`, `fixed144x37`, `fixed144x38`, `fixed144x39`, `fixed144x40`, `fixed144x41`, `fixed144x42`, `fixed144x43`, `fixed144x44`, `fixed144x45`, `fixed144x46`, `fixed144x47`, `fixed144x48`, `fixed144x49`, `fixed144x50`, `fixed144x51`, `fixed144x52`, `fixed144x53`, `fixed144x54`, `fixed144x55`, `fixed144x56`, `fixed144x57`, `fixed144x58`, `fixed144x59`, `fixed144x60`, `fixed144x61`, `fixed144x62`, `fixed144x63`, `fixed144x64`, `fixed144x65`, `fixed144x66`, `fixed144x67`, `fixed144x68`, `fixed144x69`, `fixed144x70`, `fixed144x71`, `fixed144x72`, `fixed144x73`, `fixed144x74`, `fixed144x75`, `fixed144x76`, `fixed144x77`, `fixed144x78`, `fixed144x79`, `fixed144x80`, `fixed152x0`, `fixed152x1`, `fixed152x2`, `fixed152x3`, `fixed152x4`, `fixed152x5`, `fixed152x6`, `fixed152x7`, `fixed152x8`, `fixed152x9`, `fixed152x10`, `fixed152x11`, `fixed152x12`, `fixed152x13`, `fixed152x14`, `fixed152x15`, `fixed152x16`, `fixed152x17`, `fixed152x18`, `fixed152x19`, `fixed152x20`, `fixed152x21`, `fixed152x22`, `fixed152x23`, `fixed152x24`, `fixed152x25`, `fixed152x26`, `fixed152x27`, `fixed152x28`, `fixed152x29`, `fixed152x30`, `fixed152x31`, `fixed152x32`, `fixed152x33`, `fixed152x34`, `fixed152x35`, `fixed152x36`, `fixed152x37`, `fixed152x38`, `fixed152x39`, `fixed152x40`, `fixed152x41`, `fixed152x42`, `fixed152x43`, `fixed152x44`, `fixed152x45`, `fixed152x46`, `fixed152x47`, `fixed152x48`, `fixed152x49`, `fixed152x50`, `fixed152x51`, `fixed152x52`, `fixed152x53`, `fixed152x54`, `fixed152x55`, `fixed152x56`, `fixed152x57`, `fixed152x58`, `fixed152x59`, `fixed152x60`, `fixed152x61`, `fixed152x62`, `fixed152x63`, `fixed152x64`, `fixed152x65`, `fixed152x66`, `fixed152x67`, `fixed152x68`, `fixed152x69`, `fixed152x70`, `fixed152x71`, `fixed152x72`, `fixed152x73`, `fixed152x74`, `fixed152x75`, `fixed152x76`, `fixed152x77`, `fixed152x78`, `fixed152x79`, `fixed152x80`, `fixed160x0`, `fixed160x1`, `fixed160x2`, `fixed160x3`, `fixed160x4`, `fixed160x5`, `fixed160x6`, `fixed160x7`, `fixed160x8`, `fixed160x9`, `fixed160x10`, `fixed160x11`, `fixed160x12`, `fixed160x13`, `fixed160x14`, `fixed160x15`, `fixed160x16`, `fixed160x17`, `fixed160x18`, `fixed160x19`, `fixed160x20`, `fixed160x21`, `fixed160x22`, `fixed160x23`, `fixed160x24`, `fixed160x25`, `fixed160x26`, `fixed160x27`, `fixed160x28`, `fixed160x29`, `fixed160x30`, `fixed160x31`, `fixed160x32`, `fixed160x33`, `fixed160x34`, `fixed160x35`, `fixed160x36`, `fixed160x37`, `fixed160x38`, `fixed160x39`, `fixed160x40`, `fixed160x41`, `fixed160x42`, `fixed160x43`, `fixed160x44`, `fixed160x45`, `fixed160x46`, `fixed160x47`, `fixed160x48`, `fixed160x49`, `fixed160x50`, `fixed160x51`, `fixed160x52`, `fixed160x53`, `fixed160x54`, `fixed160x55`, `fixed160x56`, `fixed160x57`, `fixed160x58`, `fixed160x59`, `fixed160x60`, `fixed160x61`, `fixed160x62`, `fixed160x63`, `fixed160x64`, `fixed160x65`, `fixed160x66`, `fixed160x67`, `fixed160x68`, `fixed160x69`, `fixed160x70`, `fixed160x71`, `fixed160x72`, `fixed160x73`, `fixed160x74`, `fixed160x75`, `fixed160x76`, `fixed160x77`, `fixed160x78`, `fixed160x79`, `fixed160x80`, `fixed168x0`, `fixed168x1`, `fixed168x2`, `fixed168x3`, `fixed168x4`, `fixed168x5`, `fixed168x6`, `fixed168x7`, `fixed168x8`, `fixed168x9`, `fixed168x10`, `fixed168x11`, `fixed168x12`, `fixed168x13`, `fixed168x14`, `fixed168x15`, `fixed168x16`, `fixed168x17`, `fixed168x18`, `fixed168x19`, `fixed168x20`, `fixed168x21`, `fixed168x22`, `fixed168x23`, `fixed168x24`, `fixed168x25`, `fixed168x26`, `fixed168x27`, `fixed168x28`, `fixed168x29`, `fixed168x30`, `fixed168x31`, `fixed168x32`, `fixed168x33`, `fixed168x34`, `fixed168x35`, `fixed168x36`, `fixed168x37`, `fixed168x38`, `fixed168x39`, `fixed168x40`, `fixed168x41`, `fixed168x42`, `fixed168x43`, `fixed168x44`, `fixed168x45`, `fixed168x46`, `fixed168x47`, `fixed168x48`, `fixed168x49`, `fixed168x50`, `fixed168x51`, `fixed168x52`, `fixed168x53`, `fixed168x54`, `fixed168x55`, `fixed168x56`, `fixed168x57`, `fixed168x58`, `fixed168x59`, `fixed168x60`, `fixed168x61`, `fixed168x62`, `fixed168x63`, `fixed168x64`, `fixed168x65`, `fixed168x66`, `fixed168x67`, `fixed168x68`, `fixed168x69`, `fixed168x70`, `fixed168x71`, `fixed168x72`, `fixed168x73`, `fixed168x74`, `fixed168x75`, `fixed168x76`, `fixed168x77`, `fixed168x78`, `fixed168x79`, `fixed168x80`, `fixed176x0`, `fixed176x1`, `fixed176x2`, `fixed176x3`, `fixed176x4`, `fixed176x5`, `fixed176x6`, `fixed176x7`, `fixed176x8`, `fixed176x9`, `fixed176x10`, `fixed176x11`, `fixed176x12`, `fixed176x13`, `fixed176x14`, `fixed176x15`, `fixed176x16`, `fixed176x17`, `fixed176x18`, `fixed176x19`, `fixed176x20`, `fixed176x21`, `fixed176x22`, `fixed176x23`, `fixed176x24`, `fixed176x25`, `fixed176x26`, `fixed176x27`, `fixed176x28`, `fixed176x29`, `fixed176x30`, `fixed176x31`, `fixed176x32`, `fixed176x33`, `fixed176x34`, `fixed176x35`, `fixed176x36`, `fixed176x37`, `fixed176x38`, `fixed176x39`, `fixed176x40`, `fixed176x41`, `fixed176x42`, `fixed176x43`, `fixed176x44`, `fixed176x45`, `fixed176x46`, `fixed176x47`, `fixed176x48`, `fixed176x49`, `fixed176x50`, `fixed176x51`, `fixed176x52`, `fixed176x53`, `fixed176x54`, `fixed176x55`, `fixed176x56`, `fixed176x57`, `fixed176x58`, `fixed176x59`, `fixed176x60`, `fixed176x61`, `fixed176x62`, `fixed176x63`, `fixed176x64`, `fixed176x65`, `fixed176x66`, `fixed176x67`, `fixed176x68`, `fixed176x69`, `fixed176x70`, `fixed176x71`, `fixed176x72`, `fixed176x73`, `fixed176x74`, `fixed176x75`, `fixed176x76`, `fixed176x77`, `fixed176x78`, `fixed176x79`, `fixed176x80`, `fixed184x0`, `fixed184x1`, `fixed184x2`, `fixed184x3`, `fixed184x4`, `fixed184x5`, `fixed184x6`, `fixed184x7`, `fixed184x8`, `fixed184x9`, `fixed184x10`, `fixed184x11`, `fixed184x12`, `fixed184x13`, `fixed184x14`, `fixed184x15`, `fixed184x16`, `fixed184x17`, `fixed184x18`, `fixed184x19`, `fixed184x20`, `fixed184x21`, `fixed184x22`, `fixed184x23`, `fixed184x24`, `fixed184x25`, `fixed184x26`, `fixed184x27`, `fixed184x28`, `fixed184x29`, `fixed184x30`, `fixed184x31`, `fixed184x32`, `fixed184x33`, `fixed184x34`, `fixed184x35`, `fixed184x36`, `fixed184x37`, `fixed184x38`, `fixed184x39`, `fixed184x40`, `fixed184x41`, `fixed184x42`, `fixed184x43`, `fixed184x44`, `fixed184x45`, `fixed184x46`, `fixed184x47`, `fixed184x48`, `fixed184x49`, `fixed184x50`, `fixed184x51`, `fixed184x52`, `fixed184x53`, `fixed184x54`, `fixed184x55`, `fixed184x56`, `fixed184x57`, `fixed184x58`, `fixed184x59`, `fixed184x60`, `fixed184x61`, `fixed184x62`, `fixed184x63`, `fixed184x64`, `fixed184x65`, `fixed184x66`, `fixed184x67`, `fixed184x68`, `fixed184x69`, `fixed184x70`, `fixed184x71`, `fixed184x72`, `fixed192x0`, `fixed192x1`, `fixed192x2`, `fixed192x3`, `fixed192x4`, `fixed192x5`, `fixed192x6`, `fixed192x7`, `fixed192x8`, `fixed192x9`, `fixed192x10`, `fixed192x11`, `fixed192x12`, `fixed192x13`, `fixed192x14`, `fixed192x15`, `fixed192x16`, `fixed192x17`, `fixed192x18`, `fixed192x19`, `fixed192x20`, `fixed192x21`, `fixed192x22`, `fixed192x23`, `fixed192x24`, `fixed192x25`, `fixed192x26`, `fixed192x27`, `fixed192x28`, `fixed192x29`, `fixed192x30`, `fixed192x31`, `fixed192x32`, `fixed192x33`, `fixed192x34`, `fixed192x35`, `fixed192x36`, `fixed192x37`, `fixed192x38`, `fixed192x39`, `fixed192x40`, `fixed192x41`, `fixed192x42`, `fixed192x43`, `fixed192x44`, `fixed192x45`, `fixed192x46`, `fixed192x47`, `fixed192x48`, `fixed192x49`, `fixed192x50`, `fixed192x51`, `fixed192x52`, `fixed192x53`, `fixed192x54`, `fixed192x55`, `fixed192x56`, `fixed192x57`, `fixed192x58`, `fixed192x59`, `fixed192x60`, `fixed192x61`, `fixed192x62`, `fixed192x63`, `fixed192x64`, `fixed200x0`, `fixed200x1`, `fixed200x2`, `fixed200x3`, `fixed200x4`, `fixed200x5`, `fixed200x6`, `fixed200x7`, `fixed200x8`, `fixed200x9`, `fixed200x10`, `fixed200x11`, `fixed200x12`, `fixed200x13`, `fixed200x14`, `fixed200x15`, `fixed200x16`, `fixed200x17`, `fixed200x18`, `fixed200x19`, `fixed200x20`, `fixed200x21`, `fixed200x22`, `fixed200x23`, `fixed200x24`, `fixed200x25`, `fixed200x26`, `fixed200x27`, `fixed200x28`, `fixed200x29`, `fixed200x30`, `fixed200x31`, `fixed200x32`, `fixed200x33`, `fixed200x34`, `fixed200x35`, `fixed200x36`, `fixed200x37`, `fixed200x38`, `fixed200x39`, `fixed200x40`, `fixed200x41`, `fixed200x42`, `fixed200x43`, `fixed200x44`, `fixed200x45`, `fixed200x46`, `fixed200x47`, `fixed200x48`, `fixed200x49`, `fixed200x50`, `fixed200x51`, `fixed200x52`, `fixed200x53`, `fixed200x54`, `fixed200x55`, `fixed200x56`, `fixed208x0`, `fixed208x1`, `fixed208x2`, `fixed208x3`, `fixed208x4`, `fixed208x5`, `fixed208x6`, `fixed208x7`, `fixed208x8`, `fixed208x9`, `fixed208x10`, `fixed208x11`, `fixed208x12`, `fixed208x13`, `fixed208x14`, `fixed208x15`, `fixed208x16`, `fixed208x17`, `fixed208x18`, `fixed208x19`, `fixed208x20`, `fixed208x21`, `fixed208x22`, `fixed208x23`, `fixed208x24`, `fixed208x25`, `fixed208x26`, `fixed208x27`, `fixed208x28`, `fixed208x29`, `fixed208x30`, `fixed208x31`, `fixed208x32`, `fixed208x33`, `fixed208x34`, `fixed208x35`, `fixed208x36`, `fixed208x37`, `fixed208x38`, `fixed208x39`, `fixed208x40`, `fixed208x41`, `fixed208x42`, `fixed208x43`, `fixed208x44`, `fixed208x45`, `fixed208x46`, `fixed208x47`, `fixed208x48`, `fixed216x0`, `fixed216x1`, `fixed216x2`, `fixed216x3`, `fixed216x4`, `fixed216x5`, `fixed216x6`, `fixed216x7`, `fixed216x8`, `fixed216x9`, `fixed216x10`, `fixed216x11`, `fixed216x12`, `fixed216x13`, `fixed216x14`, `fixed216x15`, `fixed216x16`, `fixed216x17`, `fixed216x18`, `fixed216x19`, `fixed216x20`, `fixed216x21`, `fixed216x22`, `fixed216x23`, `fixed216x24`, `fixed216x25`, `fixed216x26`, `fixed216x27`, `fixed216x28`, `fixed216x29`, `fixed216x30`, `fixed216x31`, `fixed216x32`, `fixed216x33`, `fixed216x34`, `fixed216x35`, `fixed216x36`, `fixed216x37`, `fixed216x38`, `fixed216x39`, `fixed216x40`, `fixed224x0`, `fixed224x1`, `fixed224x2`, `fixed224x3`, `fixed224x4`, `fixed224x5`, `fixed224x6`, `fixed224x7`, `fixed224x8`, `fixed224x9`, `fixed224x10`, `fixed224x11`, `fixed224x12`, `fixed224x13`, `fixed224x14`, `fixed224x15`, `fixed224x16`, `fixed224x17`, `fixed224x18`, `fixed224x19`, `fixed224x20`, `fixed224x21`, `fixed224x22`, `fixed224x23`, `fixed224x24`, `fixed224x25`, `fixed224x26`, `fixed224x27`, `fixed224x28`, `fixed224x29`, `fixed224x30`, `fixed224x31`, `fixed224x32`, `fixed232x0`, `fixed232x1`, `fixed232x2`, `fixed232x3`, `fixed232x4`, `fixed232x5`, `fixed232x6`, `fixed232x7`, `fixed232x8`, `fixed232x9`, `fixed232x10`, `fixed232x11`, `fixed232x12`, `fixed232x13`, `fixed232x14`, `fixed232x15`, `fixed232x16`, `fixed232x17`, `fixed232x18`, `fixed232x19`, `fixed232x20`, `fixed232x21`, `fixed232x22`, `fixed232x23`, `fixed232x24`, `fixed240x0`, `fixed240x1`, `fixed240x2`, `fixed240x3`, `fixed240x4`, `fixed240x5`, `fixed240x6`, `fixed240x7`, `fixed240x8`, `fixed240x9`, `fixed240x10`, `fixed240x11`, `fixed240x12`, `fixed240x13`, `fixed240x14`, `fixed240x15`, `fixed240x16`, `fixed248x0`, `fixed248x1`, `fixed248x2`, `fixed248x3`, `fixed248x4`, `fixed248x5`, `fixed248x6`, `fixed248x7`, `fixed248x8`, `fixed256x0`), KeywordType, nil}, - {Words(``, `\b`, `ufixed8x0`, `ufixed8x1`, `ufixed8x2`, `ufixed8x3`, `ufixed8x4`, `ufixed8x5`, `ufixed8x6`, `ufixed8x7`, `ufixed8x8`, `ufixed8x9`, `ufixed8x10`, `ufixed8x11`, `ufixed8x12`, `ufixed8x13`, `ufixed8x14`, `ufixed8x15`, `ufixed8x16`, `ufixed8x17`, `ufixed8x18`, `ufixed8x19`, `ufixed8x20`, `ufixed8x21`, `ufixed8x22`, `ufixed8x23`, `ufixed8x24`, `ufixed8x25`, `ufixed8x26`, `ufixed8x27`, `ufixed8x28`, `ufixed8x29`, `ufixed8x30`, `ufixed8x31`, `ufixed8x32`, `ufixed8x33`, `ufixed8x34`, `ufixed8x35`, `ufixed8x36`, `ufixed8x37`, `ufixed8x38`, `ufixed8x39`, `ufixed8x40`, `ufixed8x41`, `ufixed8x42`, `ufixed8x43`, `ufixed8x44`, `ufixed8x45`, `ufixed8x46`, `ufixed8x47`, `ufixed8x48`, `ufixed8x49`, `ufixed8x50`, `ufixed8x51`, `ufixed8x52`, `ufixed8x53`, `ufixed8x54`, `ufixed8x55`, `ufixed8x56`, `ufixed8x57`, `ufixed8x58`, `ufixed8x59`, `ufixed8x60`, `ufixed8x61`, `ufixed8x62`, `ufixed8x63`, `ufixed8x64`, `ufixed8x65`, `ufixed8x66`, `ufixed8x67`, `ufixed8x68`, `ufixed8x69`, `ufixed8x70`, `ufixed8x71`, `ufixed8x72`, `ufixed8x73`, `ufixed8x74`, `ufixed8x75`, `ufixed8x76`, `ufixed8x77`, `ufixed8x78`, `ufixed8x79`, `ufixed8x80`, `ufixed16x0`, `ufixed16x1`, `ufixed16x2`, `ufixed16x3`, `ufixed16x4`, `ufixed16x5`, `ufixed16x6`, `ufixed16x7`, `ufixed16x8`, `ufixed16x9`, `ufixed16x10`, `ufixed16x11`, `ufixed16x12`, `ufixed16x13`, `ufixed16x14`, `ufixed16x15`, `ufixed16x16`, `ufixed16x17`, `ufixed16x18`, `ufixed16x19`, `ufixed16x20`, `ufixed16x21`, `ufixed16x22`, `ufixed16x23`, `ufixed16x24`, `ufixed16x25`, `ufixed16x26`, `ufixed16x27`, `ufixed16x28`, `ufixed16x29`, `ufixed16x30`, `ufixed16x31`, `ufixed16x32`, `ufixed16x33`, `ufixed16x34`, `ufixed16x35`, `ufixed16x36`, `ufixed16x37`, `ufixed16x38`, `ufixed16x39`, `ufixed16x40`, `ufixed16x41`, `ufixed16x42`, `ufixed16x43`, `ufixed16x44`, `ufixed16x45`, `ufixed16x46`, `ufixed16x47`, `ufixed16x48`, `ufixed16x49`, `ufixed16x50`, `ufixed16x51`, `ufixed16x52`, `ufixed16x53`, `ufixed16x54`, `ufixed16x55`, `ufixed16x56`, `ufixed16x57`, `ufixed16x58`, `ufixed16x59`, `ufixed16x60`, `ufixed16x61`, `ufixed16x62`, `ufixed16x63`, `ufixed16x64`, `ufixed16x65`, `ufixed16x66`, `ufixed16x67`, `ufixed16x68`, `ufixed16x69`, `ufixed16x70`, `ufixed16x71`, `ufixed16x72`, `ufixed16x73`, `ufixed16x74`, `ufixed16x75`, `ufixed16x76`, `ufixed16x77`, `ufixed16x78`, `ufixed16x79`, `ufixed16x80`, `ufixed24x0`, `ufixed24x1`, `ufixed24x2`, `ufixed24x3`, `ufixed24x4`, `ufixed24x5`, `ufixed24x6`, `ufixed24x7`, `ufixed24x8`, `ufixed24x9`, `ufixed24x10`, `ufixed24x11`, `ufixed24x12`, `ufixed24x13`, `ufixed24x14`, `ufixed24x15`, `ufixed24x16`, `ufixed24x17`, `ufixed24x18`, `ufixed24x19`, `ufixed24x20`, `ufixed24x21`, `ufixed24x22`, `ufixed24x23`, `ufixed24x24`, `ufixed24x25`, `ufixed24x26`, `ufixed24x27`, `ufixed24x28`, `ufixed24x29`, `ufixed24x30`, `ufixed24x31`, `ufixed24x32`, `ufixed24x33`, `ufixed24x34`, `ufixed24x35`, `ufixed24x36`, `ufixed24x37`, `ufixed24x38`, `ufixed24x39`, `ufixed24x40`, `ufixed24x41`, `ufixed24x42`, `ufixed24x43`, `ufixed24x44`, `ufixed24x45`, `ufixed24x46`, `ufixed24x47`, `ufixed24x48`, `ufixed24x49`, `ufixed24x50`, `ufixed24x51`, `ufixed24x52`, `ufixed24x53`, `ufixed24x54`, `ufixed24x55`, `ufixed24x56`, `ufixed24x57`, `ufixed24x58`, `ufixed24x59`, `ufixed24x60`, `ufixed24x61`, `ufixed24x62`, `ufixed24x63`, `ufixed24x64`, `ufixed24x65`, `ufixed24x66`, `ufixed24x67`, `ufixed24x68`, `ufixed24x69`, `ufixed24x70`, `ufixed24x71`, `ufixed24x72`, `ufixed24x73`, `ufixed24x74`, `ufixed24x75`, `ufixed24x76`, `ufixed24x77`, `ufixed24x78`, `ufixed24x79`, `ufixed24x80`, `ufixed32x0`, `ufixed32x1`, `ufixed32x2`, `ufixed32x3`, `ufixed32x4`, `ufixed32x5`, `ufixed32x6`, `ufixed32x7`, `ufixed32x8`, `ufixed32x9`, `ufixed32x10`, `ufixed32x11`, `ufixed32x12`, `ufixed32x13`, `ufixed32x14`, `ufixed32x15`, `ufixed32x16`, `ufixed32x17`, `ufixed32x18`, `ufixed32x19`, `ufixed32x20`, `ufixed32x21`, `ufixed32x22`, `ufixed32x23`, `ufixed32x24`, `ufixed32x25`, `ufixed32x26`, `ufixed32x27`, `ufixed32x28`, `ufixed32x29`, `ufixed32x30`, `ufixed32x31`, `ufixed32x32`, `ufixed32x33`, `ufixed32x34`, `ufixed32x35`, `ufixed32x36`, `ufixed32x37`, `ufixed32x38`, `ufixed32x39`, `ufixed32x40`, `ufixed32x41`, `ufixed32x42`, `ufixed32x43`, `ufixed32x44`, `ufixed32x45`, `ufixed32x46`, `ufixed32x47`, `ufixed32x48`, `ufixed32x49`, `ufixed32x50`, `ufixed32x51`, `ufixed32x52`, `ufixed32x53`, `ufixed32x54`, `ufixed32x55`, `ufixed32x56`, `ufixed32x57`, `ufixed32x58`, `ufixed32x59`, `ufixed32x60`, `ufixed32x61`, `ufixed32x62`, `ufixed32x63`, `ufixed32x64`, `ufixed32x65`, `ufixed32x66`, `ufixed32x67`, `ufixed32x68`, `ufixed32x69`, `ufixed32x70`, `ufixed32x71`, `ufixed32x72`, `ufixed32x73`, `ufixed32x74`, `ufixed32x75`, `ufixed32x76`, `ufixed32x77`, `ufixed32x78`, `ufixed32x79`, `ufixed32x80`, `ufixed40x0`, `ufixed40x1`, `ufixed40x2`, `ufixed40x3`, `ufixed40x4`, `ufixed40x5`, `ufixed40x6`, `ufixed40x7`, `ufixed40x8`, `ufixed40x9`, `ufixed40x10`, `ufixed40x11`, `ufixed40x12`, `ufixed40x13`, `ufixed40x14`, `ufixed40x15`, `ufixed40x16`, `ufixed40x17`, `ufixed40x18`, `ufixed40x19`, `ufixed40x20`, `ufixed40x21`, `ufixed40x22`, `ufixed40x23`, `ufixed40x24`, `ufixed40x25`, `ufixed40x26`, `ufixed40x27`, `ufixed40x28`, `ufixed40x29`, `ufixed40x30`, `ufixed40x31`, `ufixed40x32`, `ufixed40x33`, `ufixed40x34`, `ufixed40x35`, `ufixed40x36`, `ufixed40x37`, `ufixed40x38`, `ufixed40x39`, `ufixed40x40`, `ufixed40x41`, `ufixed40x42`, `ufixed40x43`, `ufixed40x44`, `ufixed40x45`, `ufixed40x46`, `ufixed40x47`, `ufixed40x48`, `ufixed40x49`, `ufixed40x50`, `ufixed40x51`, `ufixed40x52`, `ufixed40x53`, `ufixed40x54`, `ufixed40x55`, `ufixed40x56`, `ufixed40x57`, `ufixed40x58`, `ufixed40x59`, `ufixed40x60`, `ufixed40x61`, `ufixed40x62`, `ufixed40x63`, `ufixed40x64`, `ufixed40x65`, `ufixed40x66`, `ufixed40x67`, `ufixed40x68`, `ufixed40x69`, `ufixed40x70`, `ufixed40x71`, `ufixed40x72`, `ufixed40x73`, `ufixed40x74`, `ufixed40x75`, `ufixed40x76`, `ufixed40x77`, `ufixed40x78`, `ufixed40x79`, `ufixed40x80`, `ufixed48x0`, `ufixed48x1`, `ufixed48x2`, `ufixed48x3`, `ufixed48x4`, `ufixed48x5`, `ufixed48x6`, `ufixed48x7`, `ufixed48x8`, `ufixed48x9`, `ufixed48x10`, `ufixed48x11`, `ufixed48x12`, `ufixed48x13`, `ufixed48x14`, `ufixed48x15`, `ufixed48x16`, `ufixed48x17`, `ufixed48x18`, `ufixed48x19`, `ufixed48x20`, `ufixed48x21`, `ufixed48x22`, `ufixed48x23`, `ufixed48x24`, `ufixed48x25`, `ufixed48x26`, `ufixed48x27`, `ufixed48x28`, `ufixed48x29`, `ufixed48x30`, `ufixed48x31`, `ufixed48x32`, `ufixed48x33`, `ufixed48x34`, `ufixed48x35`, `ufixed48x36`, `ufixed48x37`, `ufixed48x38`, `ufixed48x39`, `ufixed48x40`, `ufixed48x41`, `ufixed48x42`, `ufixed48x43`, `ufixed48x44`, `ufixed48x45`, `ufixed48x46`, `ufixed48x47`, `ufixed48x48`, `ufixed48x49`, `ufixed48x50`, `ufixed48x51`, `ufixed48x52`, `ufixed48x53`, `ufixed48x54`, `ufixed48x55`, `ufixed48x56`, `ufixed48x57`, `ufixed48x58`, `ufixed48x59`, `ufixed48x60`, `ufixed48x61`, `ufixed48x62`, `ufixed48x63`, `ufixed48x64`, `ufixed48x65`, `ufixed48x66`, `ufixed48x67`, `ufixed48x68`, `ufixed48x69`, `ufixed48x70`, `ufixed48x71`, `ufixed48x72`, `ufixed48x73`, `ufixed48x74`, `ufixed48x75`, `ufixed48x76`, `ufixed48x77`, `ufixed48x78`, `ufixed48x79`, `ufixed48x80`, `ufixed56x0`, `ufixed56x1`, `ufixed56x2`, `ufixed56x3`, `ufixed56x4`, `ufixed56x5`, `ufixed56x6`, `ufixed56x7`, `ufixed56x8`, `ufixed56x9`, `ufixed56x10`, `ufixed56x11`, `ufixed56x12`, `ufixed56x13`, `ufixed56x14`, `ufixed56x15`, `ufixed56x16`, `ufixed56x17`, `ufixed56x18`, `ufixed56x19`, `ufixed56x20`, `ufixed56x21`, `ufixed56x22`, `ufixed56x23`, `ufixed56x24`, `ufixed56x25`, `ufixed56x26`, `ufixed56x27`, `ufixed56x28`, `ufixed56x29`, `ufixed56x30`, `ufixed56x31`, `ufixed56x32`, `ufixed56x33`, `ufixed56x34`, `ufixed56x35`, `ufixed56x36`, `ufixed56x37`, `ufixed56x38`, `ufixed56x39`, `ufixed56x40`, `ufixed56x41`, `ufixed56x42`, `ufixed56x43`, `ufixed56x44`, `ufixed56x45`, `ufixed56x46`, `ufixed56x47`, `ufixed56x48`, `ufixed56x49`, `ufixed56x50`, `ufixed56x51`, `ufixed56x52`, `ufixed56x53`, `ufixed56x54`, `ufixed56x55`, `ufixed56x56`, `ufixed56x57`, `ufixed56x58`, `ufixed56x59`, `ufixed56x60`, `ufixed56x61`, `ufixed56x62`, `ufixed56x63`, `ufixed56x64`, `ufixed56x65`, `ufixed56x66`, `ufixed56x67`, `ufixed56x68`, `ufixed56x69`, `ufixed56x70`, `ufixed56x71`, `ufixed56x72`, `ufixed56x73`, `ufixed56x74`, `ufixed56x75`, `ufixed56x76`, `ufixed56x77`, `ufixed56x78`, `ufixed56x79`, `ufixed56x80`, `ufixed64x0`, `ufixed64x1`, `ufixed64x2`, `ufixed64x3`, `ufixed64x4`, `ufixed64x5`, `ufixed64x6`, `ufixed64x7`, `ufixed64x8`, `ufixed64x9`, `ufixed64x10`, `ufixed64x11`, `ufixed64x12`, `ufixed64x13`, `ufixed64x14`, `ufixed64x15`, `ufixed64x16`, `ufixed64x17`, `ufixed64x18`, `ufixed64x19`, `ufixed64x20`, `ufixed64x21`, `ufixed64x22`, `ufixed64x23`, `ufixed64x24`, `ufixed64x25`, `ufixed64x26`, `ufixed64x27`, `ufixed64x28`, `ufixed64x29`, `ufixed64x30`, `ufixed64x31`, `ufixed64x32`, `ufixed64x33`, `ufixed64x34`, `ufixed64x35`, `ufixed64x36`, `ufixed64x37`, `ufixed64x38`, `ufixed64x39`, `ufixed64x40`, `ufixed64x41`, `ufixed64x42`, `ufixed64x43`, `ufixed64x44`, `ufixed64x45`, `ufixed64x46`, `ufixed64x47`, `ufixed64x48`, `ufixed64x49`, `ufixed64x50`, `ufixed64x51`, `ufixed64x52`, `ufixed64x53`, `ufixed64x54`, `ufixed64x55`, `ufixed64x56`, `ufixed64x57`, `ufixed64x58`, `ufixed64x59`, `ufixed64x60`, `ufixed64x61`, `ufixed64x62`, `ufixed64x63`, `ufixed64x64`, `ufixed64x65`, `ufixed64x66`, `ufixed64x67`, `ufixed64x68`, `ufixed64x69`, `ufixed64x70`, `ufixed64x71`, `ufixed64x72`, `ufixed64x73`, `ufixed64x74`, `ufixed64x75`, `ufixed64x76`, `ufixed64x77`, `ufixed64x78`, `ufixed64x79`, `ufixed64x80`, `ufixed72x0`, `ufixed72x1`, `ufixed72x2`, `ufixed72x3`, `ufixed72x4`, `ufixed72x5`, `ufixed72x6`, `ufixed72x7`, `ufixed72x8`, `ufixed72x9`, `ufixed72x10`, `ufixed72x11`, `ufixed72x12`, `ufixed72x13`, `ufixed72x14`, `ufixed72x15`, `ufixed72x16`, `ufixed72x17`, `ufixed72x18`, `ufixed72x19`, `ufixed72x20`, `ufixed72x21`, `ufixed72x22`, `ufixed72x23`, `ufixed72x24`, `ufixed72x25`, `ufixed72x26`, `ufixed72x27`, `ufixed72x28`, `ufixed72x29`, `ufixed72x30`, `ufixed72x31`, `ufixed72x32`, `ufixed72x33`, `ufixed72x34`, `ufixed72x35`, `ufixed72x36`, `ufixed72x37`, `ufixed72x38`, `ufixed72x39`, `ufixed72x40`, `ufixed72x41`, `ufixed72x42`, `ufixed72x43`, `ufixed72x44`, `ufixed72x45`, `ufixed72x46`, `ufixed72x47`, `ufixed72x48`, `ufixed72x49`, `ufixed72x50`, `ufixed72x51`, `ufixed72x52`, `ufixed72x53`, `ufixed72x54`, `ufixed72x55`, `ufixed72x56`, `ufixed72x57`, `ufixed72x58`, `ufixed72x59`, `ufixed72x60`, `ufixed72x61`, `ufixed72x62`, `ufixed72x63`, `ufixed72x64`, `ufixed72x65`, `ufixed72x66`, `ufixed72x67`, `ufixed72x68`, `ufixed72x69`, `ufixed72x70`, `ufixed72x71`, `ufixed72x72`, `ufixed72x73`, `ufixed72x74`, `ufixed72x75`, `ufixed72x76`, `ufixed72x77`, `ufixed72x78`, `ufixed72x79`, `ufixed72x80`, `ufixed80x0`, `ufixed80x1`, `ufixed80x2`, `ufixed80x3`, `ufixed80x4`, `ufixed80x5`, `ufixed80x6`, `ufixed80x7`, `ufixed80x8`, `ufixed80x9`, `ufixed80x10`, `ufixed80x11`, `ufixed80x12`, `ufixed80x13`, `ufixed80x14`, `ufixed80x15`, `ufixed80x16`, `ufixed80x17`, `ufixed80x18`, `ufixed80x19`, `ufixed80x20`, `ufixed80x21`, `ufixed80x22`, `ufixed80x23`, `ufixed80x24`, `ufixed80x25`, `ufixed80x26`, `ufixed80x27`, `ufixed80x28`, `ufixed80x29`, `ufixed80x30`, `ufixed80x31`, `ufixed80x32`, `ufixed80x33`, `ufixed80x34`, `ufixed80x35`, `ufixed80x36`, `ufixed80x37`, `ufixed80x38`, `ufixed80x39`, `ufixed80x40`, `ufixed80x41`, `ufixed80x42`, `ufixed80x43`, `ufixed80x44`, `ufixed80x45`, `ufixed80x46`, `ufixed80x47`, `ufixed80x48`, `ufixed80x49`, `ufixed80x50`, `ufixed80x51`, `ufixed80x52`, `ufixed80x53`, `ufixed80x54`, `ufixed80x55`, `ufixed80x56`, `ufixed80x57`, `ufixed80x58`, `ufixed80x59`, `ufixed80x60`, `ufixed80x61`, `ufixed80x62`, `ufixed80x63`, `ufixed80x64`, `ufixed80x65`, `ufixed80x66`, `ufixed80x67`, `ufixed80x68`, `ufixed80x69`, `ufixed80x70`, `ufixed80x71`, `ufixed80x72`, `ufixed80x73`, `ufixed80x74`, `ufixed80x75`, `ufixed80x76`, `ufixed80x77`, `ufixed80x78`, `ufixed80x79`, `ufixed80x80`, `ufixed88x0`, `ufixed88x1`, `ufixed88x2`, `ufixed88x3`, `ufixed88x4`, `ufixed88x5`, `ufixed88x6`, `ufixed88x7`, `ufixed88x8`, `ufixed88x9`, `ufixed88x10`, `ufixed88x11`, `ufixed88x12`, `ufixed88x13`, `ufixed88x14`, `ufixed88x15`, `ufixed88x16`, `ufixed88x17`, `ufixed88x18`, `ufixed88x19`, `ufixed88x20`, `ufixed88x21`, `ufixed88x22`, `ufixed88x23`, `ufixed88x24`, `ufixed88x25`, `ufixed88x26`, `ufixed88x27`, `ufixed88x28`, `ufixed88x29`, `ufixed88x30`, `ufixed88x31`, `ufixed88x32`, `ufixed88x33`, `ufixed88x34`, `ufixed88x35`, `ufixed88x36`, `ufixed88x37`, `ufixed88x38`, `ufixed88x39`, `ufixed88x40`, `ufixed88x41`, `ufixed88x42`, `ufixed88x43`, `ufixed88x44`, `ufixed88x45`, `ufixed88x46`, `ufixed88x47`, `ufixed88x48`, `ufixed88x49`, `ufixed88x50`, `ufixed88x51`, `ufixed88x52`, `ufixed88x53`, `ufixed88x54`, `ufixed88x55`, `ufixed88x56`, `ufixed88x57`, `ufixed88x58`, `ufixed88x59`, `ufixed88x60`, `ufixed88x61`, `ufixed88x62`, `ufixed88x63`, `ufixed88x64`, `ufixed88x65`, `ufixed88x66`, `ufixed88x67`, `ufixed88x68`, `ufixed88x69`, `ufixed88x70`, `ufixed88x71`, `ufixed88x72`, `ufixed88x73`, `ufixed88x74`, `ufixed88x75`, `ufixed88x76`, `ufixed88x77`, `ufixed88x78`, `ufixed88x79`, `ufixed88x80`, `ufixed96x0`, `ufixed96x1`, `ufixed96x2`, `ufixed96x3`, `ufixed96x4`, `ufixed96x5`, `ufixed96x6`, `ufixed96x7`, `ufixed96x8`, `ufixed96x9`, `ufixed96x10`, `ufixed96x11`, `ufixed96x12`, `ufixed96x13`, `ufixed96x14`, `ufixed96x15`, `ufixed96x16`, `ufixed96x17`, `ufixed96x18`, `ufixed96x19`, `ufixed96x20`, `ufixed96x21`, `ufixed96x22`, `ufixed96x23`, `ufixed96x24`, `ufixed96x25`, `ufixed96x26`, `ufixed96x27`, `ufixed96x28`, `ufixed96x29`, `ufixed96x30`, `ufixed96x31`, `ufixed96x32`, `ufixed96x33`, `ufixed96x34`, `ufixed96x35`, `ufixed96x36`, `ufixed96x37`, `ufixed96x38`, `ufixed96x39`, `ufixed96x40`, `ufixed96x41`, `ufixed96x42`, `ufixed96x43`, `ufixed96x44`, `ufixed96x45`, `ufixed96x46`, `ufixed96x47`, `ufixed96x48`, `ufixed96x49`, `ufixed96x50`, `ufixed96x51`, `ufixed96x52`, `ufixed96x53`, `ufixed96x54`, `ufixed96x55`, `ufixed96x56`, `ufixed96x57`, `ufixed96x58`, `ufixed96x59`, `ufixed96x60`, `ufixed96x61`, `ufixed96x62`, `ufixed96x63`, `ufixed96x64`, `ufixed96x65`, `ufixed96x66`, `ufixed96x67`, `ufixed96x68`, `ufixed96x69`, `ufixed96x70`, `ufixed96x71`, `ufixed96x72`, `ufixed96x73`, `ufixed96x74`, `ufixed96x75`, `ufixed96x76`, `ufixed96x77`, `ufixed96x78`, `ufixed96x79`, `ufixed96x80`, `ufixed104x0`, `ufixed104x1`, `ufixed104x2`, `ufixed104x3`, `ufixed104x4`, `ufixed104x5`, `ufixed104x6`, `ufixed104x7`, `ufixed104x8`, `ufixed104x9`, `ufixed104x10`, `ufixed104x11`, `ufixed104x12`, `ufixed104x13`, `ufixed104x14`, `ufixed104x15`, `ufixed104x16`, `ufixed104x17`, `ufixed104x18`, `ufixed104x19`, `ufixed104x20`, `ufixed104x21`, `ufixed104x22`, `ufixed104x23`, `ufixed104x24`, `ufixed104x25`, `ufixed104x26`, `ufixed104x27`, `ufixed104x28`, `ufixed104x29`, `ufixed104x30`, `ufixed104x31`, `ufixed104x32`, `ufixed104x33`, `ufixed104x34`, `ufixed104x35`, `ufixed104x36`, `ufixed104x37`, `ufixed104x38`, `ufixed104x39`, `ufixed104x40`, `ufixed104x41`, `ufixed104x42`, `ufixed104x43`, `ufixed104x44`, `ufixed104x45`, `ufixed104x46`, `ufixed104x47`, `ufixed104x48`, `ufixed104x49`, `ufixed104x50`, `ufixed104x51`, `ufixed104x52`, `ufixed104x53`, `ufixed104x54`, `ufixed104x55`, `ufixed104x56`, `ufixed104x57`, `ufixed104x58`, `ufixed104x59`, `ufixed104x60`, `ufixed104x61`, `ufixed104x62`, `ufixed104x63`, `ufixed104x64`, `ufixed104x65`, `ufixed104x66`, `ufixed104x67`, `ufixed104x68`, `ufixed104x69`, `ufixed104x70`, `ufixed104x71`, `ufixed104x72`, `ufixed104x73`, `ufixed104x74`, `ufixed104x75`, `ufixed104x76`, `ufixed104x77`, `ufixed104x78`, `ufixed104x79`, `ufixed104x80`, `ufixed112x0`, `ufixed112x1`, `ufixed112x2`, `ufixed112x3`, `ufixed112x4`, `ufixed112x5`, `ufixed112x6`, `ufixed112x7`, `ufixed112x8`, `ufixed112x9`, `ufixed112x10`, `ufixed112x11`, `ufixed112x12`, `ufixed112x13`, `ufixed112x14`, `ufixed112x15`, `ufixed112x16`, `ufixed112x17`, `ufixed112x18`, `ufixed112x19`, `ufixed112x20`, `ufixed112x21`, `ufixed112x22`, `ufixed112x23`, `ufixed112x24`, `ufixed112x25`, `ufixed112x26`, `ufixed112x27`, `ufixed112x28`, `ufixed112x29`, `ufixed112x30`, `ufixed112x31`, `ufixed112x32`, `ufixed112x33`, `ufixed112x34`, `ufixed112x35`, `ufixed112x36`, `ufixed112x37`, `ufixed112x38`, `ufixed112x39`, `ufixed112x40`, `ufixed112x41`, `ufixed112x42`, `ufixed112x43`, `ufixed112x44`, `ufixed112x45`, `ufixed112x46`, `ufixed112x47`, `ufixed112x48`, `ufixed112x49`, `ufixed112x50`, `ufixed112x51`, `ufixed112x52`, `ufixed112x53`, `ufixed112x54`, `ufixed112x55`, `ufixed112x56`, `ufixed112x57`, `ufixed112x58`, `ufixed112x59`, `ufixed112x60`, `ufixed112x61`, `ufixed112x62`, `ufixed112x63`, `ufixed112x64`, `ufixed112x65`, `ufixed112x66`, `ufixed112x67`, `ufixed112x68`, `ufixed112x69`, `ufixed112x70`, `ufixed112x71`, `ufixed112x72`, `ufixed112x73`, `ufixed112x74`, `ufixed112x75`, `ufixed112x76`, `ufixed112x77`, `ufixed112x78`, `ufixed112x79`, `ufixed112x80`, `ufixed120x0`, `ufixed120x1`, `ufixed120x2`, `ufixed120x3`, `ufixed120x4`, `ufixed120x5`, `ufixed120x6`, `ufixed120x7`, `ufixed120x8`, `ufixed120x9`, `ufixed120x10`, `ufixed120x11`, `ufixed120x12`, `ufixed120x13`, `ufixed120x14`, `ufixed120x15`, `ufixed120x16`, `ufixed120x17`, `ufixed120x18`, `ufixed120x19`, `ufixed120x20`, `ufixed120x21`, `ufixed120x22`, `ufixed120x23`, `ufixed120x24`, `ufixed120x25`, `ufixed120x26`, `ufixed120x27`, `ufixed120x28`, `ufixed120x29`, `ufixed120x30`, `ufixed120x31`, `ufixed120x32`, `ufixed120x33`, `ufixed120x34`, `ufixed120x35`, `ufixed120x36`, `ufixed120x37`, `ufixed120x38`, `ufixed120x39`, `ufixed120x40`, `ufixed120x41`, `ufixed120x42`, `ufixed120x43`, `ufixed120x44`, `ufixed120x45`, `ufixed120x46`, `ufixed120x47`, `ufixed120x48`, `ufixed120x49`, `ufixed120x50`, `ufixed120x51`, `ufixed120x52`, `ufixed120x53`, `ufixed120x54`, `ufixed120x55`, `ufixed120x56`, `ufixed120x57`, `ufixed120x58`, `ufixed120x59`, `ufixed120x60`, `ufixed120x61`, `ufixed120x62`, `ufixed120x63`, `ufixed120x64`, `ufixed120x65`, `ufixed120x66`, `ufixed120x67`, `ufixed120x68`, `ufixed120x69`, `ufixed120x70`, `ufixed120x71`, `ufixed120x72`, `ufixed120x73`, `ufixed120x74`, `ufixed120x75`, `ufixed120x76`, `ufixed120x77`, `ufixed120x78`, `ufixed120x79`, `ufixed120x80`, `ufixed128x0`, `ufixed128x1`, `ufixed128x2`, `ufixed128x3`, `ufixed128x4`, `ufixed128x5`, `ufixed128x6`, `ufixed128x7`, `ufixed128x8`, `ufixed128x9`, `ufixed128x10`, `ufixed128x11`, `ufixed128x12`, `ufixed128x13`, `ufixed128x14`, `ufixed128x15`, `ufixed128x16`, `ufixed128x17`, `ufixed128x18`, `ufixed128x19`, `ufixed128x20`, `ufixed128x21`, `ufixed128x22`, `ufixed128x23`, `ufixed128x24`, `ufixed128x25`, `ufixed128x26`, `ufixed128x27`, `ufixed128x28`, `ufixed128x29`, `ufixed128x30`, `ufixed128x31`, `ufixed128x32`, `ufixed128x33`, `ufixed128x34`, `ufixed128x35`, `ufixed128x36`, `ufixed128x37`, `ufixed128x38`, `ufixed128x39`, `ufixed128x40`, `ufixed128x41`, `ufixed128x42`, `ufixed128x43`, `ufixed128x44`, `ufixed128x45`, `ufixed128x46`, `ufixed128x47`, `ufixed128x48`, `ufixed128x49`, `ufixed128x50`, `ufixed128x51`, `ufixed128x52`, `ufixed128x53`, `ufixed128x54`, `ufixed128x55`, `ufixed128x56`, `ufixed128x57`, `ufixed128x58`, `ufixed128x59`, `ufixed128x60`, `ufixed128x61`, `ufixed128x62`, `ufixed128x63`, `ufixed128x64`, `ufixed128x65`, `ufixed128x66`, `ufixed128x67`, `ufixed128x68`, `ufixed128x69`, `ufixed128x70`, `ufixed128x71`, `ufixed128x72`, `ufixed128x73`, `ufixed128x74`, `ufixed128x75`, `ufixed128x76`, `ufixed128x77`, `ufixed128x78`, `ufixed128x79`, `ufixed128x80`, `ufixed136x0`, `ufixed136x1`, `ufixed136x2`, `ufixed136x3`, `ufixed136x4`, `ufixed136x5`, `ufixed136x6`, `ufixed136x7`, `ufixed136x8`, `ufixed136x9`, `ufixed136x10`, `ufixed136x11`, `ufixed136x12`, `ufixed136x13`, `ufixed136x14`, `ufixed136x15`, `ufixed136x16`, `ufixed136x17`, `ufixed136x18`, `ufixed136x19`, `ufixed136x20`, `ufixed136x21`, `ufixed136x22`, `ufixed136x23`, `ufixed136x24`, `ufixed136x25`, `ufixed136x26`, `ufixed136x27`, `ufixed136x28`, `ufixed136x29`, `ufixed136x30`, `ufixed136x31`, `ufixed136x32`, `ufixed136x33`, `ufixed136x34`, `ufixed136x35`, `ufixed136x36`, `ufixed136x37`, `ufixed136x38`, `ufixed136x39`, `ufixed136x40`, `ufixed136x41`, `ufixed136x42`, `ufixed136x43`, `ufixed136x44`, `ufixed136x45`, `ufixed136x46`, `ufixed136x47`, `ufixed136x48`, `ufixed136x49`, `ufixed136x50`, `ufixed136x51`, `ufixed136x52`, `ufixed136x53`, `ufixed136x54`, `ufixed136x55`, `ufixed136x56`, `ufixed136x57`, `ufixed136x58`, `ufixed136x59`, `ufixed136x60`, `ufixed136x61`, `ufixed136x62`, `ufixed136x63`, `ufixed136x64`, `ufixed136x65`, `ufixed136x66`, `ufixed136x67`, `ufixed136x68`, `ufixed136x69`, `ufixed136x70`, `ufixed136x71`, `ufixed136x72`, `ufixed136x73`, `ufixed136x74`, `ufixed136x75`, `ufixed136x76`, `ufixed136x77`, `ufixed136x78`, `ufixed136x79`, `ufixed136x80`, `ufixed144x0`, `ufixed144x1`, `ufixed144x2`, `ufixed144x3`, `ufixed144x4`, `ufixed144x5`, `ufixed144x6`, `ufixed144x7`, `ufixed144x8`, `ufixed144x9`, `ufixed144x10`, `ufixed144x11`, `ufixed144x12`, `ufixed144x13`, `ufixed144x14`, `ufixed144x15`, `ufixed144x16`, `ufixed144x17`, `ufixed144x18`, `ufixed144x19`, `ufixed144x20`, `ufixed144x21`, `ufixed144x22`, `ufixed144x23`, `ufixed144x24`, `ufixed144x25`, `ufixed144x26`, `ufixed144x27`, `ufixed144x28`, `ufixed144x29`, `ufixed144x30`, `ufixed144x31`, `ufixed144x32`, `ufixed144x33`, `ufixed144x34`, `ufixed144x35`, `ufixed144x36`, `ufixed144x37`, `ufixed144x38`, `ufixed144x39`, `ufixed144x40`, `ufixed144x41`, `ufixed144x42`, `ufixed144x43`, `ufixed144x44`, `ufixed144x45`, `ufixed144x46`, `ufixed144x47`, `ufixed144x48`, `ufixed144x49`, `ufixed144x50`, `ufixed144x51`, `ufixed144x52`, `ufixed144x53`, `ufixed144x54`, `ufixed144x55`, `ufixed144x56`, `ufixed144x57`, `ufixed144x58`, `ufixed144x59`, `ufixed144x60`, `ufixed144x61`, `ufixed144x62`, `ufixed144x63`, `ufixed144x64`, `ufixed144x65`, `ufixed144x66`, `ufixed144x67`, `ufixed144x68`, `ufixed144x69`, `ufixed144x70`, `ufixed144x71`, `ufixed144x72`, `ufixed144x73`, `ufixed144x74`, `ufixed144x75`, `ufixed144x76`, `ufixed144x77`, `ufixed144x78`, `ufixed144x79`, `ufixed144x80`, `ufixed152x0`, `ufixed152x1`, `ufixed152x2`, `ufixed152x3`, `ufixed152x4`, `ufixed152x5`, `ufixed152x6`, `ufixed152x7`, `ufixed152x8`, `ufixed152x9`, `ufixed152x10`, `ufixed152x11`, `ufixed152x12`, `ufixed152x13`, `ufixed152x14`, `ufixed152x15`, `ufixed152x16`, `ufixed152x17`, `ufixed152x18`, `ufixed152x19`, `ufixed152x20`, `ufixed152x21`, `ufixed152x22`, `ufixed152x23`, `ufixed152x24`, `ufixed152x25`, `ufixed152x26`, `ufixed152x27`, `ufixed152x28`, `ufixed152x29`, `ufixed152x30`, `ufixed152x31`, `ufixed152x32`, `ufixed152x33`, `ufixed152x34`, `ufixed152x35`, `ufixed152x36`, `ufixed152x37`, `ufixed152x38`, `ufixed152x39`, `ufixed152x40`, `ufixed152x41`, `ufixed152x42`, `ufixed152x43`, `ufixed152x44`, `ufixed152x45`, `ufixed152x46`, `ufixed152x47`, `ufixed152x48`, `ufixed152x49`, `ufixed152x50`, `ufixed152x51`, `ufixed152x52`, `ufixed152x53`, `ufixed152x54`, `ufixed152x55`, `ufixed152x56`, `ufixed152x57`, `ufixed152x58`, `ufixed152x59`, `ufixed152x60`, `ufixed152x61`, `ufixed152x62`, `ufixed152x63`, `ufixed152x64`, `ufixed152x65`, `ufixed152x66`, `ufixed152x67`, `ufixed152x68`, `ufixed152x69`, `ufixed152x70`, `ufixed152x71`, `ufixed152x72`, `ufixed152x73`, `ufixed152x74`, `ufixed152x75`, `ufixed152x76`, `ufixed152x77`, `ufixed152x78`, `ufixed152x79`, `ufixed152x80`, `ufixed160x0`, `ufixed160x1`, `ufixed160x2`, `ufixed160x3`, `ufixed160x4`, `ufixed160x5`, `ufixed160x6`, `ufixed160x7`, `ufixed160x8`, `ufixed160x9`, `ufixed160x10`, `ufixed160x11`, `ufixed160x12`, `ufixed160x13`, `ufixed160x14`, `ufixed160x15`, `ufixed160x16`, `ufixed160x17`, `ufixed160x18`, `ufixed160x19`, `ufixed160x20`, `ufixed160x21`, `ufixed160x22`, `ufixed160x23`, `ufixed160x24`, `ufixed160x25`, `ufixed160x26`, `ufixed160x27`, `ufixed160x28`, `ufixed160x29`, `ufixed160x30`, `ufixed160x31`, `ufixed160x32`, `ufixed160x33`, `ufixed160x34`, `ufixed160x35`, `ufixed160x36`, `ufixed160x37`, `ufixed160x38`, `ufixed160x39`, `ufixed160x40`, `ufixed160x41`, `ufixed160x42`, `ufixed160x43`, `ufixed160x44`, `ufixed160x45`, `ufixed160x46`, `ufixed160x47`, `ufixed160x48`, `ufixed160x49`, `ufixed160x50`, `ufixed160x51`, `ufixed160x52`, `ufixed160x53`, `ufixed160x54`, `ufixed160x55`, `ufixed160x56`, `ufixed160x57`, `ufixed160x58`, `ufixed160x59`, `ufixed160x60`, `ufixed160x61`, `ufixed160x62`, `ufixed160x63`, `ufixed160x64`, `ufixed160x65`, `ufixed160x66`, `ufixed160x67`, `ufixed160x68`, `ufixed160x69`, `ufixed160x70`, `ufixed160x71`, `ufixed160x72`, `ufixed160x73`, `ufixed160x74`, `ufixed160x75`, `ufixed160x76`, `ufixed160x77`, `ufixed160x78`, `ufixed160x79`, `ufixed160x80`, `ufixed168x0`, `ufixed168x1`, `ufixed168x2`, `ufixed168x3`, `ufixed168x4`, `ufixed168x5`, `ufixed168x6`, `ufixed168x7`, `ufixed168x8`, `ufixed168x9`, `ufixed168x10`, `ufixed168x11`, `ufixed168x12`, `ufixed168x13`, `ufixed168x14`, `ufixed168x15`, `ufixed168x16`, `ufixed168x17`, `ufixed168x18`, `ufixed168x19`, `ufixed168x20`, `ufixed168x21`, `ufixed168x22`, `ufixed168x23`, `ufixed168x24`, `ufixed168x25`, `ufixed168x26`, `ufixed168x27`, `ufixed168x28`, `ufixed168x29`, `ufixed168x30`, `ufixed168x31`, `ufixed168x32`, `ufixed168x33`, `ufixed168x34`, `ufixed168x35`, `ufixed168x36`, `ufixed168x37`, `ufixed168x38`, `ufixed168x39`, `ufixed168x40`, `ufixed168x41`, `ufixed168x42`, `ufixed168x43`, `ufixed168x44`, `ufixed168x45`, `ufixed168x46`, `ufixed168x47`, `ufixed168x48`, `ufixed168x49`, `ufixed168x50`, `ufixed168x51`, `ufixed168x52`, `ufixed168x53`, `ufixed168x54`, `ufixed168x55`, `ufixed168x56`, `ufixed168x57`, `ufixed168x58`, `ufixed168x59`, `ufixed168x60`, `ufixed168x61`, `ufixed168x62`, `ufixed168x63`, `ufixed168x64`, `ufixed168x65`, `ufixed168x66`, `ufixed168x67`, `ufixed168x68`, `ufixed168x69`, `ufixed168x70`, `ufixed168x71`, `ufixed168x72`, `ufixed168x73`, `ufixed168x74`, `ufixed168x75`, `ufixed168x76`, `ufixed168x77`, `ufixed168x78`, `ufixed168x79`, `ufixed168x80`, `ufixed176x0`, `ufixed176x1`, `ufixed176x2`, `ufixed176x3`, `ufixed176x4`, `ufixed176x5`, `ufixed176x6`, `ufixed176x7`, `ufixed176x8`, `ufixed176x9`, `ufixed176x10`, `ufixed176x11`, `ufixed176x12`, `ufixed176x13`, `ufixed176x14`, `ufixed176x15`, `ufixed176x16`, `ufixed176x17`, `ufixed176x18`, `ufixed176x19`, `ufixed176x20`, `ufixed176x21`, `ufixed176x22`, `ufixed176x23`, `ufixed176x24`, `ufixed176x25`, `ufixed176x26`, `ufixed176x27`, `ufixed176x28`, `ufixed176x29`, `ufixed176x30`, `ufixed176x31`, `ufixed176x32`, `ufixed176x33`, `ufixed176x34`, `ufixed176x35`, `ufixed176x36`, `ufixed176x37`, `ufixed176x38`, `ufixed176x39`, `ufixed176x40`, `ufixed176x41`, `ufixed176x42`, `ufixed176x43`, `ufixed176x44`, `ufixed176x45`, `ufixed176x46`, `ufixed176x47`, `ufixed176x48`, `ufixed176x49`, `ufixed176x50`, `ufixed176x51`, `ufixed176x52`, `ufixed176x53`, `ufixed176x54`, `ufixed176x55`, `ufixed176x56`, `ufixed176x57`, `ufixed176x58`, `ufixed176x59`, `ufixed176x60`, `ufixed176x61`, `ufixed176x62`, `ufixed176x63`, `ufixed176x64`, `ufixed176x65`, `ufixed176x66`, `ufixed176x67`, `ufixed176x68`, `ufixed176x69`, `ufixed176x70`, `ufixed176x71`, `ufixed176x72`, `ufixed176x73`, `ufixed176x74`, `ufixed176x75`, `ufixed176x76`, `ufixed176x77`, `ufixed176x78`, `ufixed176x79`, `ufixed176x80`, `ufixed184x0`, `ufixed184x1`, `ufixed184x2`, `ufixed184x3`, `ufixed184x4`, `ufixed184x5`, `ufixed184x6`, `ufixed184x7`, `ufixed184x8`, `ufixed184x9`, `ufixed184x10`, `ufixed184x11`, `ufixed184x12`, `ufixed184x13`, `ufixed184x14`, `ufixed184x15`, `ufixed184x16`, `ufixed184x17`, `ufixed184x18`, `ufixed184x19`, `ufixed184x20`, `ufixed184x21`, `ufixed184x22`, `ufixed184x23`, `ufixed184x24`, `ufixed184x25`, `ufixed184x26`, `ufixed184x27`, `ufixed184x28`, `ufixed184x29`, `ufixed184x30`, `ufixed184x31`, `ufixed184x32`, `ufixed184x33`, `ufixed184x34`, `ufixed184x35`, `ufixed184x36`, `ufixed184x37`, `ufixed184x38`, `ufixed184x39`, `ufixed184x40`, `ufixed184x41`, `ufixed184x42`, `ufixed184x43`, `ufixed184x44`, `ufixed184x45`, `ufixed184x46`, `ufixed184x47`, `ufixed184x48`, `ufixed184x49`, `ufixed184x50`, `ufixed184x51`, `ufixed184x52`, `ufixed184x53`, `ufixed184x54`, `ufixed184x55`, `ufixed184x56`, `ufixed184x57`, `ufixed184x58`, `ufixed184x59`, `ufixed184x60`, `ufixed184x61`, `ufixed184x62`, `ufixed184x63`, `ufixed184x64`, `ufixed184x65`, `ufixed184x66`, `ufixed184x67`, `ufixed184x68`, `ufixed184x69`, `ufixed184x70`, `ufixed184x71`, `ufixed184x72`, `ufixed192x0`, `ufixed192x1`, `ufixed192x2`, `ufixed192x3`, `ufixed192x4`, `ufixed192x5`, `ufixed192x6`, `ufixed192x7`, `ufixed192x8`, `ufixed192x9`, `ufixed192x10`, `ufixed192x11`, `ufixed192x12`, `ufixed192x13`, `ufixed192x14`, `ufixed192x15`, `ufixed192x16`, `ufixed192x17`, `ufixed192x18`, `ufixed192x19`, `ufixed192x20`, `ufixed192x21`, `ufixed192x22`, `ufixed192x23`, `ufixed192x24`, `ufixed192x25`, `ufixed192x26`, `ufixed192x27`, `ufixed192x28`, `ufixed192x29`, `ufixed192x30`, `ufixed192x31`, `ufixed192x32`, `ufixed192x33`, `ufixed192x34`, `ufixed192x35`, `ufixed192x36`, `ufixed192x37`, `ufixed192x38`, `ufixed192x39`, `ufixed192x40`, `ufixed192x41`, `ufixed192x42`, `ufixed192x43`, `ufixed192x44`, `ufixed192x45`, `ufixed192x46`, `ufixed192x47`, `ufixed192x48`, `ufixed192x49`, `ufixed192x50`, `ufixed192x51`, `ufixed192x52`, `ufixed192x53`, `ufixed192x54`, `ufixed192x55`, `ufixed192x56`, `ufixed192x57`, `ufixed192x58`, `ufixed192x59`, `ufixed192x60`, `ufixed192x61`, `ufixed192x62`, `ufixed192x63`, `ufixed192x64`, `ufixed200x0`, `ufixed200x1`, `ufixed200x2`, `ufixed200x3`, `ufixed200x4`, `ufixed200x5`, `ufixed200x6`, `ufixed200x7`, `ufixed200x8`, `ufixed200x9`, `ufixed200x10`, `ufixed200x11`, `ufixed200x12`, `ufixed200x13`, `ufixed200x14`, `ufixed200x15`, `ufixed200x16`, `ufixed200x17`, `ufixed200x18`, `ufixed200x19`, `ufixed200x20`, `ufixed200x21`, `ufixed200x22`, `ufixed200x23`, `ufixed200x24`, `ufixed200x25`, `ufixed200x26`, `ufixed200x27`, `ufixed200x28`, `ufixed200x29`, `ufixed200x30`, `ufixed200x31`, `ufixed200x32`, `ufixed200x33`, `ufixed200x34`, `ufixed200x35`, `ufixed200x36`, `ufixed200x37`, `ufixed200x38`, `ufixed200x39`, `ufixed200x40`, `ufixed200x41`, `ufixed200x42`, `ufixed200x43`, `ufixed200x44`, `ufixed200x45`, `ufixed200x46`, `ufixed200x47`, `ufixed200x48`, `ufixed200x49`, `ufixed200x50`, `ufixed200x51`, `ufixed200x52`, `ufixed200x53`, `ufixed200x54`, `ufixed200x55`, `ufixed200x56`, `ufixed208x0`, `ufixed208x1`, `ufixed208x2`, `ufixed208x3`, `ufixed208x4`, `ufixed208x5`, `ufixed208x6`, `ufixed208x7`, `ufixed208x8`, `ufixed208x9`, `ufixed208x10`, `ufixed208x11`, `ufixed208x12`, `ufixed208x13`, `ufixed208x14`, `ufixed208x15`, `ufixed208x16`, `ufixed208x17`, `ufixed208x18`, `ufixed208x19`, `ufixed208x20`, `ufixed208x21`, `ufixed208x22`, `ufixed208x23`, `ufixed208x24`, `ufixed208x25`, `ufixed208x26`, `ufixed208x27`, `ufixed208x28`, `ufixed208x29`, `ufixed208x30`, `ufixed208x31`, `ufixed208x32`, `ufixed208x33`, `ufixed208x34`, `ufixed208x35`, `ufixed208x36`, `ufixed208x37`, `ufixed208x38`, `ufixed208x39`, `ufixed208x40`, `ufixed208x41`, `ufixed208x42`, `ufixed208x43`, `ufixed208x44`, `ufixed208x45`, `ufixed208x46`, `ufixed208x47`, `ufixed208x48`, `ufixed216x0`, `ufixed216x1`, `ufixed216x2`, `ufixed216x3`, `ufixed216x4`, `ufixed216x5`, `ufixed216x6`, `ufixed216x7`, `ufixed216x8`, `ufixed216x9`, `ufixed216x10`, `ufixed216x11`, `ufixed216x12`, `ufixed216x13`, `ufixed216x14`, `ufixed216x15`, `ufixed216x16`, `ufixed216x17`, `ufixed216x18`, `ufixed216x19`, `ufixed216x20`, `ufixed216x21`, `ufixed216x22`, `ufixed216x23`, `ufixed216x24`, `ufixed216x25`, `ufixed216x26`, `ufixed216x27`, `ufixed216x28`, `ufixed216x29`, `ufixed216x30`, `ufixed216x31`, `ufixed216x32`, `ufixed216x33`, `ufixed216x34`, `ufixed216x35`, `ufixed216x36`, `ufixed216x37`, `ufixed216x38`, `ufixed216x39`, `ufixed216x40`, `ufixed224x0`, `ufixed224x1`, `ufixed224x2`, `ufixed224x3`, `ufixed224x4`, `ufixed224x5`, `ufixed224x6`, `ufixed224x7`, `ufixed224x8`, `ufixed224x9`, `ufixed224x10`, `ufixed224x11`, `ufixed224x12`, `ufixed224x13`, `ufixed224x14`, `ufixed224x15`, `ufixed224x16`, `ufixed224x17`, `ufixed224x18`, `ufixed224x19`, `ufixed224x20`, `ufixed224x21`, `ufixed224x22`, `ufixed224x23`, `ufixed224x24`, `ufixed224x25`, `ufixed224x26`, `ufixed224x27`, `ufixed224x28`, `ufixed224x29`, `ufixed224x30`, `ufixed224x31`, `ufixed224x32`, `ufixed232x0`, `ufixed232x1`, `ufixed232x2`, `ufixed232x3`, `ufixed232x4`, `ufixed232x5`, `ufixed232x6`, `ufixed232x7`, `ufixed232x8`, `ufixed232x9`, `ufixed232x10`, `ufixed232x11`, `ufixed232x12`, `ufixed232x13`, `ufixed232x14`, `ufixed232x15`, `ufixed232x16`, `ufixed232x17`, `ufixed232x18`, `ufixed232x19`, `ufixed232x20`, `ufixed232x21`, `ufixed232x22`, `ufixed232x23`, `ufixed232x24`, `ufixed240x0`, `ufixed240x1`, `ufixed240x2`, `ufixed240x3`, `ufixed240x4`, `ufixed240x5`, `ufixed240x6`, `ufixed240x7`, `ufixed240x8`, `ufixed240x9`, `ufixed240x10`, `ufixed240x11`, `ufixed240x12`, `ufixed240x13`, `ufixed240x14`, `ufixed240x15`, `ufixed240x16`, `ufixed248x0`, `ufixed248x1`, `ufixed248x2`, `ufixed248x3`, `ufixed248x4`, `ufixed248x5`, `ufixed248x6`, `ufixed248x7`, `ufixed248x8`, `ufixed256x0`), KeywordType, nil}, - }, - "numbers": { - {`0[xX][0-9a-fA-F]+`, LiteralNumberHex, nil}, - {`[0-9]+`, LiteralNumberInteger, nil}, - }, - "string-parse-common": { - {`\\(u[0-9a-fA-F]{4}|x..|[^x])`, LiteralStringEscape, nil}, - {`[^\\"\'\n]+`, LiteralString, nil}, - {`\\\n`, LiteralString, nil}, - {`\\`, LiteralString, nil}, - }, - "string-parse-double": { - {`"`, LiteralString, Pop(1)}, - {`'`, LiteralString, nil}, - }, - "string-parse-single": { - {`'`, LiteralString, Pop(1)}, - {`"`, LiteralString, nil}, - }, - "strings": { - {`hex'[0-9a-fA-F]+'`, LiteralString, nil}, - {`hex"[0-9a-fA-F]+"`, LiteralString, nil}, - {`"`, LiteralString, Combined("string-parse-common", "string-parse-double")}, - {`'`, LiteralString, Combined("string-parse-common", "string-parse-single")}, - }, - "whitespace": { - {`\s+`, Text, nil}, - }, - "root": { - Include("comments"), - Include("keywords-types"), - Include("keywords-other"), - Include("numbers"), - Include("strings"), - Include("whitespace"), - {`\+\+|--|\*\*|\?|:|~|&&|\|\||=>|==?|!=?|(<<|>>>?|[-<>+*%&|^/])=?`, Operator, nil}, - {`[{(\[;,]`, Punctuation, nil}, - {`[})\].]`, Punctuation, nil}, - {`(block|msg|now|this|super|tx)\b`, NameBuiltin, nil}, - {`(sender|origin)\b`, NameBuiltin, nil}, - {`(gas|value)\b`, NameBuiltin, nil}, - {`(selfdestruct|suicide)\b`, NameBuiltin, nil}, - {`(balance|send|transfer)\b`, NameBuiltin, nil}, - {`(assert|revert|require)\b`, NameBuiltin, nil}, - {`(call|callcode|delegatecall)\b`, NameBuiltin, nil}, - {`selector\b`, NameBuiltin, nil}, - {`(addmod|ecrecover|keccak256|mulmod|ripemd160|sha256|sha3)\b`, NameFunction, nil}, - {`[a-zA-Z_]\w*`, Name, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/s/sparql.go b/vendor/github.com/alecthomas/chroma/lexers/s/sparql.go deleted file mode 100644 index 47a1716..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/s/sparql.go +++ /dev/null @@ -1,69 +0,0 @@ -package s - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Sparql lexer. -var Sparql = internal.Register(MustNewLexer( - &Config{ - Name: "SPARQL", - Aliases: []string{"sparql"}, - Filenames: []string{"*.rq", "*.sparql"}, - MimeTypes: []string{"application/sparql-query"}, - }, - Rules{ - "root": { - {`\s+`, Text, nil}, - {`((?i)select|construct|describe|ask|where|filter|group\s+by|minus|distinct|reduced|from\s+named|from|order\s+by|desc|asc|limit|offset|bindings|load|clear|drop|create|add|move|copy|insert\s+data|delete\s+data|delete\s+where|delete|insert|using\s+named|using|graph|default|named|all|optional|service|silent|bind|union|not\s+in|in|as|having|to|prefix|base)\b`, Keyword, nil}, - {`(a)\b`, Keyword, nil}, - {"(<(?:[^<>\"{}|^`\\\\\\x00-\\x20])*>)", NameLabel, nil}, - {`(_:[0-9a-zA-ZÀ-ÖØ-öø-˿Ͱ-ͽͿ-῿‌-‍⁰-↏Ⰰ-⿯、-퟿豈-﷏ﷰ-�_](?:[a-zA-ZÀ-ÖØ-öø-˿Ͱ-ͽͿ-῿‌-‍⁰-↏Ⰰ-⿯、-퟿豈-﷏ﷰ-�_\-0-9·̀-ͯ‿-⁀.]*[a-zA-ZÀ-ÖØ-öø-˿Ͱ-ͽͿ-῿‌-‍⁰-↏Ⰰ-⿯、-퟿豈-﷏ﷰ-�_\-0-9·̀-ͯ‿-⁀])?)`, NameLabel, nil}, - {`[?$][0-9a-zA-ZÀ-ÖØ-öø-˿Ͱ-ͽͿ-῿‌-‍⁰-↏Ⰰ-⿯、-퟿豈-﷏ﷰ-�_][a-zA-ZÀ-ÖØ-öø-˿Ͱ-ͽͿ-῿‌-‍⁰-↏Ⰰ-⿯、-퟿豈-﷏ﷰ-�_0-9·̀-ͯ‿-⁀]*`, NameVariable, nil}, - {`([a-zA-ZÀ-ÖØ-öø-˿Ͱ-ͽͿ-῿‌-‍⁰-↏Ⰰ-⿯、-퟿豈-﷏ﷰ-�](?:[a-zA-ZÀ-ÖØ-öø-˿Ͱ-ͽͿ-῿‌-‍⁰-↏Ⰰ-⿯、-퟿豈-﷏ﷰ-�_\-0-9·̀-ͯ‿-⁀.]*[a-zA-ZÀ-ÖØ-öø-˿Ͱ-ͽͿ-῿‌-‍⁰-↏Ⰰ-⿯、-퟿豈-﷏ﷰ-�_\-0-9·̀-ͯ‿-⁀])?)?(\:)((?:[a-zA-ZÀ-ÖØ-öø-˿Ͱ-ͽͿ-῿‌-‍⁰-↏Ⰰ-⿯、-퟿豈-﷏ﷰ-�_:0-9]|(?:%[0-9A-Fa-f][0-9A-Fa-f])|(?:\\[ _~.\-!$&"()*+,;=/?#@%]))(?:(?:[a-zA-ZÀ-ÖØ-öø-˿Ͱ-ͽͿ-῿‌-‍⁰-↏Ⰰ-⿯、-퟿豈-﷏ﷰ-�_\-0-9·̀-ͯ‿-⁀.:]|(?:%[0-9A-Fa-f][0-9A-Fa-f])|(?:\\[ _~.\-!$&"()*+,;=/?#@%]))*(?:[a-zA-ZÀ-ÖØ-öø-˿Ͱ-ͽͿ-῿‌-‍⁰-↏Ⰰ-⿯、-퟿豈-﷏ﷰ-�_\-0-9·̀-ͯ‿-⁀:]|(?:%[0-9A-Fa-f][0-9A-Fa-f])|(?:\\[ _~.\-!$&"()*+,;=/?#@%])))?)?`, ByGroups(NameNamespace, Punctuation, NameTag), nil}, - {`((?i)str|lang|langmatches|datatype|bound|iri|uri|bnode|rand|abs|ceil|floor|round|concat|strlen|ucase|lcase|encode_for_uri|contains|strstarts|strends|strbefore|strafter|year|month|day|hours|minutes|seconds|timezone|tz|now|md5|sha1|sha256|sha384|sha512|coalesce|if|strlang|strdt|sameterm|isiri|isuri|isblank|isliteral|isnumeric|regex|substr|replace|exists|not\s+exists|count|sum|min|max|avg|sample|group_concat|separator)\b`, NameFunction, nil}, - {`(true|false)`, KeywordConstant, nil}, - {`[+\-]?(\d+\.\d*[eE][+-]?\d+|\.?\d+[eE][+-]?\d+)`, LiteralNumberFloat, nil}, - {`[+\-]?(\d+\.\d*|\.\d+)`, LiteralNumberFloat, nil}, - {`[+\-]?\d+`, LiteralNumberInteger, nil}, - {`(\|\||&&|=|\*|\-|\+|/|!=|<=|>=|!|<|>)`, Operator, nil}, - {`[(){}.;,:^\[\]]`, Punctuation, nil}, - {`#[^\n]*`, Comment, nil}, - {`"""`, LiteralString, Push("triple-double-quoted-string")}, - {`"`, LiteralString, Push("single-double-quoted-string")}, - {`'''`, LiteralString, Push("triple-single-quoted-string")}, - {`'`, LiteralString, Push("single-single-quoted-string")}, - }, - "triple-double-quoted-string": { - {`"""`, LiteralString, Push("end-of-string")}, - {`[^\\]+`, LiteralString, nil}, - {`\\`, LiteralString, Push("string-escape")}, - }, - "single-double-quoted-string": { - {`"`, LiteralString, Push("end-of-string")}, - {`[^"\\\n]+`, LiteralString, nil}, - {`\\`, LiteralString, Push("string-escape")}, - }, - "triple-single-quoted-string": { - {`'''`, LiteralString, Push("end-of-string")}, - {`[^\\]+`, LiteralString, nil}, - {`\\`, LiteralStringEscape, Push("string-escape")}, - }, - "single-single-quoted-string": { - {`'`, LiteralString, Push("end-of-string")}, - {`[^'\\\n]+`, LiteralString, nil}, - {`\\`, LiteralString, Push("string-escape")}, - }, - "string-escape": { - {`u[0-9A-Fa-f]{4}`, LiteralStringEscape, Pop(1)}, - {`U[0-9A-Fa-f]{8}`, LiteralStringEscape, Pop(1)}, - {`.`, LiteralStringEscape, Pop(1)}, - }, - "end-of-string": { - {`(@)([a-zA-Z]+(?:-[a-zA-Z0-9]+)*)`, ByGroups(Operator, NameFunction), Pop(2)}, - {`\^\^`, Operator, Pop(2)}, - Default(Pop(2)), - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/s/sql.go b/vendor/github.com/alecthomas/chroma/lexers/s/sql.go deleted file mode 100644 index 6f4e3e0..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/s/sql.go +++ /dev/null @@ -1,49 +0,0 @@ -package s - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// SQL lexer. -var SQL = internal.Register(MustNewLexer( - &Config{ - Name: "SQL", - Aliases: []string{"sql"}, - Filenames: []string{"*.sql"}, - MimeTypes: []string{"text/x-sql"}, - NotMultiline: true, - CaseInsensitive: true, - }, - Rules{ - "root": { - {`\s+`, Text, nil}, - {`--.*\n?`, CommentSingle, nil}, - {`/\*`, CommentMultiline, Push("multiline-comments")}, - {`'`, LiteralStringSingle, Push("string")}, - {`"`, LiteralStringDouble, Push("double-string")}, - {Words(``, `\b`, `ABORT`, `ABS`, `ABSOLUTE`, `ACCESS`, `ADA`, `ADD`, `ADMIN`, `AFTER`, `AGGREGATE`, `ALIAS`, `ALL`, `ALLOCATE`, `ALTER`, `ANALYSE`, `ANALYZE`, `AND`, `ANY`, `ARE`, `AS`, `ASC`, `ASENSITIVE`, `ASSERTION`, `ASSIGNMENT`, `ASYMMETRIC`, `AT`, `ATOMIC`, `AUTHORIZATION`, `AVG`, `BACKWARD`, `BEFORE`, `BEGIN`, `BETWEEN`, `BITVAR`, `BIT_LENGTH`, `BOTH`, `BREADTH`, `BY`, `C`, `CACHE`, `CALL`, `CALLED`, `CARDINALITY`, `CASCADE`, `CASCADED`, `CASE`, `CAST`, `CATALOG`, `CATALOG_NAME`, `CHAIN`, `CHARACTERISTICS`, `CHARACTER_LENGTH`, `CHARACTER_SET_CATALOG`, `CHARACTER_SET_NAME`, `CHARACTER_SET_SCHEMA`, `CHAR_LENGTH`, `CHECK`, `CHECKED`, `CHECKPOINT`, `CLASS`, `CLASS_ORIGIN`, `CLOB`, `CLOSE`, `CLUSTER`, `COALSECE`, `COBOL`, `COLLATE`, `COLLATION`, `COLLATION_CATALOG`, `COLLATION_NAME`, `COLLATION_SCHEMA`, `COLUMN`, `COLUMN_NAME`, `COMMAND_FUNCTION`, `COMMAND_FUNCTION_CODE`, `COMMENT`, `COMMIT`, `COMMITTED`, `COMPLETION`, `CONDITION_NUMBER`, `CONNECT`, `CONNECTION`, `CONNECTION_NAME`, `CONSTRAINT`, `CONSTRAINTS`, `CONSTRAINT_CATALOG`, `CONSTRAINT_NAME`, `CONSTRAINT_SCHEMA`, `CONSTRUCTOR`, `CONTAINS`, `CONTINUE`, `CONVERSION`, `CONVERT`, `COPY`, `CORRESPONTING`, `COUNT`, `CREATE`, `CREATEDB`, `CREATEUSER`, `CROSS`, `CUBE`, `CURRENT`, `CURRENT_DATE`, `CURRENT_PATH`, `CURRENT_ROLE`, `CURRENT_TIME`, `CURRENT_TIMESTAMP`, `CURRENT_USER`, `CURSOR`, `CURSOR_NAME`, `CYCLE`, `DATA`, `DATABASE`, `DATETIME_INTERVAL_CODE`, `DATETIME_INTERVAL_PRECISION`, `DAY`, `DEALLOCATE`, `DECLARE`, `DEFAULT`, `DEFAULTS`, `DEFERRABLE`, `DEFERRED`, `DEFINED`, `DEFINER`, `DELETE`, `DELIMITER`, `DELIMITERS`, `DEREF`, `DESC`, `DESCRIBE`, `DESCRIPTOR`, `DESTROY`, `DESTRUCTOR`, `DETERMINISTIC`, `DIAGNOSTICS`, `DICTIONARY`, `DISCONNECT`, `DISPATCH`, `DISTINCT`, `DO`, `DOMAIN`, `DROP`, `DYNAMIC`, `DYNAMIC_FUNCTION`, `DYNAMIC_FUNCTION_CODE`, `EACH`, `ELSE`, `ELSIF`, `ENCODING`, `ENCRYPTED`, `END`, `END-EXEC`, `EQUALS`, `ESCAPE`, `EVERY`, `EXCEPTION`, `EXCEPT`, `EXCLUDING`, `EXCLUSIVE`, `EXEC`, `EXECUTE`, `EXISTING`, `EXISTS`, `EXPLAIN`, `EXTERNAL`, `EXTRACT`, `FALSE`, `FETCH`, `FINAL`, `FIRST`, `FOR`, `FORCE`, `FOREIGN`, `FORTRAN`, `FORWARD`, `FOUND`, `FREE`, `FREEZE`, `FROM`, `FULL`, `FUNCTION`, `G`, `GENERAL`, `GENERATED`, `GET`, `GLOBAL`, `GO`, `GOTO`, `GRANT`, `GRANTED`, `GROUP`, `GROUPING`, `HANDLER`, `HAVING`, `HIERARCHY`, `HOLD`, `HOST`, `IDENTITY`, `IF`, `IGNORE`, `ILIKE`, `IMMEDIATE`, `IMMUTABLE`, `IMPLEMENTATION`, `IMPLICIT`, `IN`, `INCLUDING`, `INCREMENT`, `INDEX`, `INDITCATOR`, `INFIX`, `INHERITS`, `INITIALIZE`, `INITIALLY`, `INNER`, `INOUT`, `INPUT`, `INSENSITIVE`, `INSERT`, `INSTANTIABLE`, `INSTEAD`, `INTERSECT`, `INTO`, `INVOKER`, `IS`, `ISNULL`, `ISOLATION`, `ITERATE`, `JOIN`, `KEY`, `KEY_MEMBER`, `KEY_TYPE`, `LANCOMPILER`, `LANGUAGE`, `LARGE`, `LAST`, `LATERAL`, `LEADING`, `LEFT`, `LENGTH`, `LESS`, `LEVEL`, `LIKE`, `LIMIT`, `LISTEN`, `LOAD`, `LOCAL`, `LOCALTIME`, `LOCALTIMESTAMP`, `LOCATION`, `LOCATOR`, `LOCK`, `LOWER`, `MAP`, `MATCH`, `MAX`, `MAXVALUE`, `MESSAGE_LENGTH`, `MESSAGE_OCTET_LENGTH`, `MESSAGE_TEXT`, `METHOD`, `MIN`, `MINUTE`, `MINVALUE`, `MOD`, `MODE`, `MODIFIES`, `MODIFY`, `MONTH`, `MORE`, `MOVE`, `MUMPS`, `NAMES`, `NATIONAL`, `NATURAL`, `NCHAR`, `NCLOB`, `NEW`, `NEXT`, `NO`, `NOCREATEDB`, `NOCREATEUSER`, `NONE`, `NOT`, `NOTHING`, `NOTIFY`, `NOTNULL`, `NULL`, `NULLABLE`, `NULLIF`, `OBJECT`, `OCTET_LENGTH`, `OF`, `OFF`, `OFFSET`, `OIDS`, `OLD`, `ON`, `ONLY`, `OPEN`, `OPERATION`, `OPERATOR`, `OPTION`, `OPTIONS`, `OR`, `ORDER`, `ORDINALITY`, `OUT`, `OUTER`, `OUTPUT`, `OVERLAPS`, `OVERLAY`, `OVERRIDING`, `OWNER`, `PAD`, `PARAMETER`, `PARAMETERS`, `PARAMETER_MODE`, `PARAMATER_NAME`, `PARAMATER_ORDINAL_POSITION`, `PARAMETER_SPECIFIC_CATALOG`, `PARAMETER_SPECIFIC_NAME`, `PARAMATER_SPECIFIC_SCHEMA`, `PARTIAL`, `PASCAL`, `PENDANT`, `PLACING`, `PLI`, `POSITION`, `POSTFIX`, `PRECISION`, `PREFIX`, `PREORDER`, `PREPARE`, `PRESERVE`, `PRIMARY`, `PRIOR`, `PRIVILEGES`, `PROCEDURAL`, `PROCEDURE`, `PUBLIC`, `READ`, `READS`, `RECHECK`, `RECURSIVE`, `REF`, `REFERENCES`, `REFERENCING`, `REINDEX`, `RELATIVE`, `RENAME`, `REPEATABLE`, `REPLACE`, `RESET`, `RESTART`, `RESTRICT`, `RESULT`, `RETURN`, `RETURNED_LENGTH`, `RETURNED_OCTET_LENGTH`, `RETURNED_SQLSTATE`, `RETURNS`, `REVOKE`, `RIGHT`, `ROLE`, `ROLLBACK`, `ROLLUP`, `ROUTINE`, `ROUTINE_CATALOG`, `ROUTINE_NAME`, `ROUTINE_SCHEMA`, `ROW`, `ROWS`, `ROW_COUNT`, `RULE`, `SAVE_POINT`, `SCALE`, `SCHEMA`, `SCHEMA_NAME`, `SCOPE`, `SCROLL`, `SEARCH`, `SECOND`, `SECURITY`, `SELECT`, `SELF`, `SENSITIVE`, `SERIALIZABLE`, `SERVER_NAME`, `SESSION`, `SESSION_USER`, `SET`, `SETOF`, `SETS`, `SHARE`, `SHOW`, `SIMILAR`, `SIMPLE`, `SIZE`, `SOME`, `SOURCE`, `SPACE`, `SPECIFIC`, `SPECIFICTYPE`, `SPECIFIC_NAME`, `SQL`, `SQLCODE`, `SQLERROR`, `SQLEXCEPTION`, `SQLSTATE`, `SQLWARNINIG`, `STABLE`, `START`, `STATE`, `STATEMENT`, `STATIC`, `STATISTICS`, `STDIN`, `STDOUT`, `STORAGE`, `STRICT`, `STRUCTURE`, `STYPE`, `SUBCLASS_ORIGIN`, `SUBLIST`, `SUBSTRING`, `SUM`, `SYMMETRIC`, `SYSID`, `SYSTEM`, `SYSTEM_USER`, `TABLE`, `TABLE_NAME`, ` TEMP`, `TEMPLATE`, `TEMPORARY`, `TERMINATE`, `THAN`, `THEN`, `TIMESTAMP`, `TIMEZONE_HOUR`, `TIMEZONE_MINUTE`, `TO`, `TOAST`, `TRAILING`, `TRANSACTION`, `TRANSACTIONS_COMMITTED`, `TRANSACTIONS_ROLLED_BACK`, `TRANSACTION_ACTIVE`, `TRANSFORM`, `TRANSFORMS`, `TRANSLATE`, `TRANSLATION`, `TREAT`, `TRIGGER`, `TRIGGER_CATALOG`, `TRIGGER_NAME`, `TRIGGER_SCHEMA`, `TRIM`, `TRUE`, `TRUNCATE`, `TRUSTED`, `TYPE`, `UNCOMMITTED`, `UNDER`, `UNENCRYPTED`, `UNION`, `UNIQUE`, `UNKNOWN`, `UNLISTEN`, `UNNAMED`, `UNNEST`, `UNTIL`, `UPDATE`, `UPPER`, `USAGE`, `USER`, `USER_DEFINED_TYPE_CATALOG`, `USER_DEFINED_TYPE_NAME`, `USER_DEFINED_TYPE_SCHEMA`, `USING`, `VACUUM`, `VALID`, `VALIDATOR`, `VALUES`, `VARIABLE`, `VERBOSE`, `VERSION`, `VIEW`, `VOLATILE`, `WHEN`, `WHENEVER`, `WHERE`, `WITH`, `WITHOUT`, `WORK`, `WRITE`, `YEAR`, `ZONE`), Keyword, nil}, - {Words(``, `\b`, `ARRAY`, `BIGINT`, `BINARY`, `BIT`, `BLOB`, `BOOLEAN`, `CHAR`, `CHARACTER`, `DATE`, `DEC`, `DECIMAL`, `FLOAT`, `INT`, `INTEGER`, `INTERVAL`, `NUMBER`, `NUMERIC`, `REAL`, `SERIAL`, `SMALLINT`, `VARCHAR`, `VARYING`, `INT8`, `SERIAL8`, `TEXT`), NameBuiltin, nil}, - {"[+*/<>=~!@#%^&|`?-]", Operator, nil}, - {`[0-9]+`, LiteralNumberInteger, nil}, - {`[a-z_][\w$]*`, Name, nil}, - {`[;:()\[\],.]`, Punctuation, nil}, - }, - "multiline-comments": { - {`/\*`, CommentMultiline, Push("multiline-comments")}, - {`\*/`, CommentMultiline, Pop(1)}, - {`[^/*]+`, CommentMultiline, nil}, - {`[/*]`, CommentMultiline, nil}, - }, - "string": { - {`[^']+`, LiteralStringSingle, nil}, - {`''`, LiteralStringSingle, nil}, - {`'`, LiteralStringSingle, Pop(1)}, - }, - "double-string": { - {`[^"]+`, LiteralStringDouble, nil}, - {`""`, LiteralStringDouble, nil}, - {`"`, LiteralStringDouble, Pop(1)}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/s/squid.go b/vendor/github.com/alecthomas/chroma/lexers/s/squid.go deleted file mode 100644 index 1f16190..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/s/squid.go +++ /dev/null @@ -1,38 +0,0 @@ -package s - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Squidconf lexer. -var Squidconf = internal.Register(MustNewLexer( - &Config{ - Name: "SquidConf", - Aliases: []string{"squidconf", "squid.conf", "squid"}, - Filenames: []string{"squid.conf"}, - MimeTypes: []string{"text/x-squidconf"}, - NotMultiline: true, - CaseInsensitive: true, - }, - Rules{ - "root": { - {`\s+`, TextWhitespace, nil}, - {`#`, Comment, Push("comment")}, - {Words(`\b`, `\b`, `access_log`, `acl`, `always_direct`, `announce_host`, `announce_period`, `announce_port`, `announce_to`, `anonymize_headers`, `append_domain`, `as_whois_server`, `auth_param_basic`, `authenticate_children`, `authenticate_program`, `authenticate_ttl`, `broken_posts`, `buffered_logs`, `cache_access_log`, `cache_announce`, `cache_dir`, `cache_dns_program`, `cache_effective_group`, `cache_effective_user`, `cache_host`, `cache_host_acl`, `cache_host_domain`, `cache_log`, `cache_mem`, `cache_mem_high`, `cache_mem_low`, `cache_mgr`, `cachemgr_passwd`, `cache_peer`, `cache_peer_access`, `cahce_replacement_policy`, `cache_stoplist`, `cache_stoplist_pattern`, `cache_store_log`, `cache_swap`, `cache_swap_high`, `cache_swap_log`, `cache_swap_low`, `client_db`, `client_lifetime`, `client_netmask`, `connect_timeout`, `coredump_dir`, `dead_peer_timeout`, `debug_options`, `delay_access`, `delay_class`, `delay_initial_bucket_level`, `delay_parameters`, `delay_pools`, `deny_info`, `dns_children`, `dns_defnames`, `dns_nameservers`, `dns_testnames`, `emulate_httpd_log`, `err_html_text`, `fake_user_agent`, `firewall_ip`, `forwarded_for`, `forward_snmpd_port`, `fqdncache_size`, `ftpget_options`, `ftpget_program`, `ftp_list_width`, `ftp_passive`, `ftp_user`, `half_closed_clients`, `header_access`, `header_replace`, `hierarchy_stoplist`, `high_response_time_warning`, `high_page_fault_warning`, `hosts_file`, `htcp_port`, `http_access`, `http_anonymizer`, `httpd_accel`, `httpd_accel_host`, `httpd_accel_port`, `httpd_accel_uses_host_header`, `httpd_accel_with_proxy`, `http_port`, `http_reply_access`, `icp_access`, `icp_hit_stale`, `icp_port`, `icp_query_timeout`, `ident_lookup`, `ident_lookup_access`, `ident_timeout`, `incoming_http_average`, `incoming_icp_average`, `inside_firewall`, `ipcache_high`, `ipcache_low`, `ipcache_size`, `local_domain`, `local_ip`, `logfile_rotate`, `log_fqdn`, `log_icp_queries`, `log_mime_hdrs`, `maximum_object_size`, `maximum_single_addr_tries`, `mcast_groups`, `mcast_icp_query_timeout`, `mcast_miss_addr`, `mcast_miss_encode_key`, `mcast_miss_port`, `memory_pools`, `memory_pools_limit`, `memory_replacement_policy`, `mime_table`, `min_http_poll_cnt`, `min_icp_poll_cnt`, `minimum_direct_hops`, `minimum_object_size`, `minimum_retry_timeout`, `miss_access`, `negative_dns_ttl`, `negative_ttl`, `neighbor_timeout`, `neighbor_type_domain`, `netdb_high`, `netdb_low`, `netdb_ping_period`, `netdb_ping_rate`, `never_direct`, `no_cache`, `passthrough_proxy`, `pconn_timeout`, `pid_filename`, `pinger_program`, `positive_dns_ttl`, `prefer_direct`, `proxy_auth`, `proxy_auth_realm`, `query_icmp`, `quick_abort`, `quick_abort_max`, `quick_abort_min`, `quick_abort_pct`, `range_offset_limit`, `read_timeout`, `redirect_children`, `redirect_program`, `redirect_rewrites_host_header`, `reference_age`, `refresh_pattern`, `reload_into_ims`, `request_body_max_size`, `request_size`, `request_timeout`, `shutdown_lifetime`, `single_parent_bypass`, `siteselect_timeout`, `snmp_access`, `snmp_incoming_address`, `snmp_port`, `source_ping`, `ssl_proxy`, `store_avg_object_size`, `store_objects_per_bucket`, `strip_query_terms`, `swap_level1_dirs`, `swap_level2_dirs`, `tcp_incoming_address`, `tcp_outgoing_address`, `tcp_recv_bufsize`, `test_reachability`, `udp_hit_obj`, `udp_hit_obj_size`, `udp_incoming_address`, `udp_outgoing_address`, `unique_hostname`, `unlinkd_program`, `uri_whitespace`, `useragent_log`, `visible_hostname`, `wais_relay`, `wais_relay_host`, `wais_relay_port`), Keyword, nil}, - {Words(`\b`, `\b`, `proxy-only`, `weight`, `ttl`, `no-query`, `default`, `round-robin`, `multicast-responder`, `on`, `off`, `all`, `deny`, `allow`, `via`, `parent`, `no-digest`, `heap`, `lru`, `realm`, `children`, `q1`, `q2`, `credentialsttl`, `none`, `disable`, `offline_toggle`, `diskd`), NameConstant, nil}, - {Words(`\b`, `\b`, `shutdown`, `info`, `parameter`, `server_list`, `client_list`, `squid.conf`), LiteralString, nil}, - {Words(`stats/`, `\b`, `objects`, `vm_objects`, `utilization`, `ipcache`, `fqdncache`, `dns`, `redirector`, `io`, `reply_headers`, `filedescriptors`, `netdb`), LiteralString, nil}, - {Words(`log/`, `=`, `status`, `enable`, `disable`, `clear`), LiteralString, nil}, - {Words(`\b`, `\b`, `url_regex`, `urlpath_regex`, `referer_regex`, `port`, `proto`, `req_mime_type`, `rep_mime_type`, `method`, `browser`, `user`, `src`, `dst`, `time`, `dstdomain`, `ident`, `snmp_community`), Keyword, nil}, - {`(?:(?:(?:[3-9]\d?|2(?:5[0-5]|[0-4]?\d)?|1\d{0,2}|0x0*[0-9a-f]{1,2}|0+[1-3]?[0-7]{0,2})(?:\.(?:[3-9]\d?|2(?:5[0-5]|[0-4]?\d)?|1\d{0,2}|0x0*[0-9a-f]{1,2}|0+[1-3]?[0-7]{0,2})){3})|(?!.*::.*::)(?:(?!:)|:(?=:))(?:[0-9a-f]{0,4}(?:(?<=::)|(?|[<&?](?=\\w)|(?<=\\w)[>!?]", Punctuation, nil}, - {`[/=\-+!*%<>&|^?~]+`, Operator, nil}, - {`[a-zA-Z_]\w*`, Name, nil}, - }, - "keywords": { - {Words(``, `\b`, `as`, `break`, `case`, `catch`, `continue`, `default`, `defer`, `do`, `else`, `fallthrough`, `for`, `guard`, `if`, `in`, `is`, `repeat`, `return`, `#selector`, `switch`, `throw`, `try`, `where`, `while`), Keyword, nil}, - {`@availability\([^)]+\)`, KeywordReserved, nil}, - {Words(``, `\b`, `associativity`, `convenience`, `dynamic`, `didSet`, `final`, `get`, `indirect`, `infix`, `inout`, `lazy`, `left`, `mutating`, `none`, `nonmutating`, `optional`, `override`, `postfix`, `precedence`, `prefix`, `Protocol`, `required`, `rethrows`, `right`, `set`, `throws`, `Type`, `unowned`, `weak`, `willSet`, `@availability`, `@autoclosure`, `@noreturn`, `@NSApplicationMain`, `@NSCopying`, `@NSManaged`, `@objc`, `@UIApplicationMain`, `@IBAction`, `@IBDesignable`, `@IBInspectable`, `@IBOutlet`), KeywordReserved, nil}, - {`(as|dynamicType|false|is|nil|self|Self|super|true|__COLUMN__|__FILE__|__FUNCTION__|__LINE__|_|#(?:file|line|column|function))\b`, KeywordConstant, nil}, - {`import\b`, KeywordDeclaration, Push("module")}, - {`(class|enum|extension|struct|protocol)(\s+)([a-zA-Z_]\w*)`, ByGroups(KeywordDeclaration, Text, NameClass), nil}, - {`(func)(\s+)([a-zA-Z_]\w*)`, ByGroups(KeywordDeclaration, Text, NameFunction), nil}, - {`(var|let)(\s+)([a-zA-Z_]\w*)`, ByGroups(KeywordDeclaration, Text, NameVariable), nil}, - {Words(``, `\b`, `class`, `deinit`, `enum`, `extension`, `func`, `import`, `init`, `internal`, `let`, `operator`, `private`, `protocol`, `public`, `static`, `struct`, `subscript`, `typealias`, `var`), KeywordDeclaration, nil}, - }, - "comment": { - {`:param: [a-zA-Z_]\w*|:returns?:|(FIXME|MARK|TODO):`, CommentSpecial, nil}, - }, - "comment-single": { - {`\n`, Text, Pop(1)}, - Include("comment"), - {`[^\n]`, CommentSingle, nil}, - }, - "comment-multi": { - Include("comment"), - {`[^*/]`, CommentMultiline, nil}, - {`/\*`, CommentMultiline, Push()}, - {`\*/`, CommentMultiline, Pop(1)}, - {`[*/]`, CommentMultiline, nil}, - }, - "module": { - {`\n`, Text, Pop(1)}, - {`[a-zA-Z_]\w*`, NameClass, nil}, - Include("root"), - }, - "preproc": { - {`\n`, Text, Pop(1)}, - Include("keywords"), - {`[A-Za-z]\w*`, CommentPreproc, nil}, - Include("root"), - }, - "string": { - {`\\\(`, LiteralStringInterpol, Push("string-intp")}, - {`"`, LiteralString, Pop(1)}, - {`\\['"\\nrt]|\\x[0-9a-fA-F]{2}|\\[0-7]{1,3}|\\u[0-9a-fA-F]{4}|\\U[0-9a-fA-F]{8}`, LiteralStringEscape, nil}, - {`[^\\"]+`, LiteralString, nil}, - {`\\`, LiteralString, nil}, - }, - "string-intp": { - {`\(`, LiteralStringInterpol, Push()}, - {`\)`, LiteralStringInterpol, Pop(1)}, - Include("root"), - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/s/systemd.go b/vendor/github.com/alecthomas/chroma/lexers/s/systemd.go deleted file mode 100644 index 6b0884e..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/s/systemd.go +++ /dev/null @@ -1,28 +0,0 @@ -package s - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -var SYSTEMD = internal.Register(MustNewLexer( - &Config{ - Name: "SYSTEMD", - Aliases: []string{"systemd"}, - Filenames: []string{"*.service"}, - MimeTypes: []string{"text/plain"}, - }, - Rules{ - "root": { - {`\s+`, Text, nil}, - {`[;#].*`, Comment, nil}, - {`\[.*?\]$`, Keyword, nil}, - {`(.*?)(=)(.*)(\\\n)`, ByGroups(NameAttribute, Operator, LiteralString, Text), Push("continuation")}, - {`(.*?)(=)(.*)`, ByGroups(NameAttribute, Operator, LiteralString), nil}, - }, - "continuation": { - {`(.*?)(\\\n)`, ByGroups(LiteralString, Text), nil}, - {`(.*)`, LiteralString, Pop(1)}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/s/systemverilog.go b/vendor/github.com/alecthomas/chroma/lexers/s/systemverilog.go deleted file mode 100644 index 85c459f..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/s/systemverilog.go +++ /dev/null @@ -1,73 +0,0 @@ -package s - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Systemverilog lexer. -var Systemverilog = internal.Register(MustNewLexer( - &Config{ - Name: "systemverilog", - Aliases: []string{"systemverilog", "sv"}, - Filenames: []string{"*.sv", "*.svh"}, - MimeTypes: []string{"text/x-systemverilog"}, - EnsureNL: true, - }, - Rules{ - "root": { - {"^\\s*`define", CommentPreproc, Push("macro")}, - {`^(\s*)(package)(\s+)`, ByGroups(Text, KeywordNamespace, Text), nil}, - {`^(\s*)(import)(\s+)("DPI(?:-C)?")(\s+)`, ByGroups(Text, KeywordNamespace, Text, LiteralString, Text), nil}, - {`^(\s*)(import)(\s+)`, ByGroups(Text, KeywordNamespace, Text), Push("import")}, - {`\n`, Text, nil}, - {`\s+`, Text, nil}, - {`\\\n`, Text, nil}, - {`/(\\\n)?/(\n|(.|\n)*?[^\\]\n)`, CommentSingle, nil}, - {`/(\\\n)?[*](.|\n)*?[*](\\\n)?/`, CommentMultiline, nil}, - {`[{}#@]`, Punctuation, nil}, - {`L?"`, LiteralString, Push("string")}, - {`L?'(\\.|\\[0-7]{1,3}|\\x[a-fA-F0-9]{1,2}|[^\\\'\n])'`, LiteralStringChar, nil}, - {`(\d+\.\d*|\.\d+|\d+)[eE][+-]?\d+[lL]?`, LiteralNumberFloat, nil}, - {`(\d+\.\d*|\.\d+|\d+[fF])[fF]?`, LiteralNumberFloat, nil}, - {`([0-9]+)|(\'h)[0-9a-fA-F]+`, LiteralNumberHex, nil}, - {`([0-9]+)|(\'b)[01]+`, LiteralNumberBin, nil}, - {`([0-9]+)|(\'d)[0-9]+`, LiteralNumberInteger, nil}, - {`([0-9]+)|(\'o)[0-7]+`, LiteralNumberOct, nil}, - {`\'[01xz]`, LiteralNumber, nil}, - {`\d+[Ll]?`, LiteralNumberInteger, nil}, - {`\*/`, Error, nil}, - {`[~!%^&*+=|?:<>/-]`, Operator, nil}, - {`[()\[\],.;\']`, Punctuation, nil}, - {"`[a-zA-Z_]\\w*", NameConstant, nil}, - {Words(``, `\b`, `accept_on`, `alias`, `always`, `always_comb`, `always_ff`, `always_latch`, `and`, `assert`, `assign`, `assume`, `automatic`, `before`, `begin`, `bind`, `bins`, `binsof`, `bit`, `break`, `buf`, `bufif0`, `bufif1`, `byte`, `case`, `casex`, `casez`, `cell`, `chandle`, `checker`, `class`, `clocking`, `cmos`, `config`, `const`, `constraint`, `context`, `continue`, `cover`, `covergroup`, `coverpoint`, `cross`, `deassign`, `default`, `defparam`, `design`, `disable`, `dist`, `do`, `edge`, `else`, `end`, `endcase`, `endchecker`, `endclass`, `endclocking`, `endconfig`, `endfunction`, `endgenerate`, `endgroup`, `endinterface`, `endmodule`, `endpackage`, `endprimitive`, `endprogram`, `endproperty`, `endsequence`, `endspecify`, `endtable`, `endtask`, `enum`, `event`, `eventually`, `expect`, `export`, `extends`, `extern`, `final`, `first_match`, `for`, `force`, `foreach`, `forever`, `fork`, `forkjoin`, `function`, `generate`, `genvar`, `global`, `highz0`, `highz1`, `if`, `iff`, `ifnone`, `ignore_bins`, `illegal_bins`, `implies`, `import`, `incdir`, `include`, `initial`, `inout`, `input`, `inside`, `instance`, `int`, `integer`, `interface`, `intersect`, `join`, `join_any`, `join_none`, `large`, `let`, `liblist`, `library`, `local`, `localparam`, `logic`, `longint`, `macromodule`, `matches`, `medium`, `modport`, `module`, `nand`, `negedge`, `new`, `nexttime`, `nmos`, `nor`, `noshowcancelled`, `not`, `notif0`, `notif1`, `null`, `or`, `output`, `package`, `packed`, `parameter`, `pmos`, `posedge`, `primitive`, `priority`, `program`, `property`, `protected`, `pull0`, `pull1`, `pulldown`, `pullup`, `pulsestyle_ondetect`, `pulsestyle_onevent`, `pure`, `rand`, `randc`, `randcase`, `randsequence`, `rcmos`, `real`, `realtime`, `ref`, `reg`, `reject_on`, `release`, `repeat`, `restrict`, `return`, `rnmos`, `rpmos`, `rtran`, `rtranif0`, `rtranif1`, `s_always`, `s_eventually`, `s_nexttime`, `s_until`, `s_until_with`, `scalared`, `sequence`, `shortint`, `shortreal`, `showcancelled`, `signed`, `small`, `solve`, `specify`, `specparam`, `static`, `string`, `strong`, `strong0`, `strong1`, `struct`, `super`, `supply0`, `supply1`, `sync_accept_on`, `sync_reject_on`, `table`, `tagged`, `task`, `this`, `throughout`, `time`, `timeprecision`, `timeunit`, `tran`, `tranif0`, `tranif1`, `tri`, `tri0`, `tri1`, `triand`, `trior`, `trireg`, `type`, `typedef`, `union`, `unique`, `unique0`, `unsigned`, `until`, `until_with`, `untyped`, `use`, `uwire`, `var`, `vectored`, `virtual`, `void`, `wait`, `wait_order`, `wand`, `weak`, `weak0`, `weak1`, `while`, `wildcard`, `wire`, `with`, `within`, `wor`, `xnor`, `xor`), Keyword, nil}, - {Words(``, `\b`, "`__FILE__", "`__LINE__", "`begin_keywords", "`celldefine", "`default_nettype", "`define", "`else", "`elsif", "`end_keywords", "`endcelldefine", "`endif", "`ifdef", "`ifndef", "`include", "`line", "`nounconnected_drive", "`pragma", "`resetall", "`timescale", "`unconnected_drive", "`undef", "`undefineall"), CommentPreproc, nil}, - {Words(``, `\b`, `$display`, `$displayb`, `$displayh`, `$displayo`, `$dumpall`, `$dumpfile`, `$dumpflush`, `$dumplimit`, `$dumpoff`, `$dumpon`, `$dumpports`, `$dumpportsall`, `$dumpportsflush`, `$dumpportslimit`, `$dumpportsoff`, `$dumpportson`, `$dumpvars`, `$fclose`, `$fdisplay`, `$fdisplayb`, `$fdisplayh`, `$fdisplayo`, `$feof`, `$ferror`, `$fflush`, `$fgetc`, `$fgets`, `$finish`, `$fmonitor`, `$fmonitorb`, `$fmonitorh`, `$fmonitoro`, `$fopen`, `$fread`, `$fscanf`, `$fseek`, `$fstrobe`, `$fstrobeb`, `$fstrobeh`, `$fstrobeo`, `$ftell`, `$fwrite`, `$fwriteb`, `$fwriteh`, `$fwriteo`, `$monitor`, `$monitorb`, `$monitorh`, `$monitoro`, `$monitoroff`, `$monitoron`, `$plusargs`, `$random`, `$readmemb`, `$readmemh`, `$rewind`, `$sformat`, `$sformatf`, `$sscanf`, `$strobe`, `$strobeb`, `$strobeh`, `$strobeo`, `$swrite`, `$swriteb`, `$swriteh`, `$swriteo`, `$test`, `$ungetc`, `$value$plusargs`, `$write`, `$writeb`, `$writeh`, `$writememb`, `$writememh`, `$writeo`), NameBuiltin, nil}, - {`(class)(\s+)`, ByGroups(Keyword, Text), Push("classname")}, - {Words(``, `\b`, `byte`, `shortint`, `int`, `longint`, `integer`, `time`, `bit`, `logic`, `reg`, `supply0`, `supply1`, `tri`, `triand`, `trior`, `tri0`, `tri1`, `trireg`, `uwire`, `wire`, `wand`, `woshortreal`, `real`, `realtime`), KeywordType, nil}, - {`[a-zA-Z_]\w*:(?!:)`, NameLabel, nil}, - {`\$?[a-zA-Z_]\w*`, Name, nil}, - }, - "classname": { - {`[a-zA-Z_]\w*`, NameClass, Pop(1)}, - }, - "string": { - {`"`, LiteralString, Pop(1)}, - {`\\([\\abfnrtv"\']|x[a-fA-F0-9]{2,4}|[0-7]{1,3})`, LiteralStringEscape, nil}, - {`[^\\"\n]+`, LiteralString, nil}, - {`\\\n`, LiteralString, nil}, - {`\\`, LiteralString, nil}, - }, - "macro": { - {`[^/\n]+`, CommentPreproc, nil}, - {`/[*](.|\n)*?[*]/`, CommentMultiline, nil}, - {`//.*?\n`, CommentSingle, Pop(1)}, - {`/`, CommentPreproc, nil}, - {`(?<=\\)\n`, CommentPreproc, nil}, - {`\n`, CommentPreproc, Pop(1)}, - }, - "import": { - {`[\w:]+\*?`, NameNamespace, Pop(1)}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/t/tablegen.go b/vendor/github.com/alecthomas/chroma/lexers/t/tablegen.go deleted file mode 100644 index 18c6978..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/t/tablegen.go +++ /dev/null @@ -1,42 +0,0 @@ -package t - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// TableGen lexer. -var Tablegen = internal.Register(MustNewLexer( - &Config{ - Name: "TableGen", - Aliases: []string{"tablegen"}, - Filenames: []string{"*.td"}, - MimeTypes: []string{"text/x-tablegen"}, - }, - Rules{ - "root": { - Include("macro"), - Include("whitespace"), - {`c?"[^"]*?"`, LiteralString, nil}, - Include("keyword"), - {`\$[_a-zA-Z][_\w]*`, NameVariable, nil}, - {`\d*[_a-zA-Z][_\w]*`, NameVariable, nil}, - {`\[\{[\w\W]*?\}\]`, LiteralString, nil}, - {`[+-]?\d+|0x[\da-fA-F]+|0b[01]+`, LiteralNumber, nil}, - {`[=<>{}\[\]()*.,!:;]`, Punctuation, nil}, - }, - "macro": { - {`(#include\s+)("[^"]*")`, ByGroups(CommentPreproc, LiteralString), nil}, - {`^\s*#(ifdef|ifndef)\s+[_\w][_\w\d]*`, CommentPreproc, nil}, - {`^\s*#define\s+[_\w][_\w\d]*`, CommentPreproc, nil}, - {`^\s*#endif`, CommentPreproc, nil}, - }, - "whitespace": { - {`(\n|\s)+`, Text, nil}, - {`//.*?\n`, Comment, nil}, - }, - "keyword": { - {Words(``, `\b`, `bit`, `bits`, `class`, `code`, `dag`, `def`, `defm`, `field`, `foreach`, `in`, `int`, `let`, `list`, `multiclass`, `string`), Keyword, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/t/tasm.go b/vendor/github.com/alecthomas/chroma/lexers/t/tasm.go deleted file mode 100644 index 960399c..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/t/tasm.go +++ /dev/null @@ -1,61 +0,0 @@ -package t - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Tasm lexer. -var Tasm = internal.Register(MustNewLexer( - &Config{ - Name: "TASM", - Aliases: []string{"tasm"}, - Filenames: []string{"*.asm", "*.ASM", "*.tasm"}, - MimeTypes: []string{"text/x-tasm"}, - CaseInsensitive: true, - }, - Rules{ - "root": { - {`^\s*%`, CommentPreproc, Push("preproc")}, - Include("whitespace"), - {`[@a-z$._?][\w$.?#@~]*:`, NameLabel, nil}, - {`BITS|USE16|USE32|SECTION|SEGMENT|ABSOLUTE|EXTERN|GLOBAL|ORG|ALIGN|STRUC|ENDSTRUC|ENDS|COMMON|CPU|GROUP|UPPERCASE|INCLUDE|EXPORT|LIBRARY|MODULE|PROC|ENDP|USES|ARG|DATASEG|UDATASEG|END|IDEAL|P386|MODEL|ASSUME|CODESEG|SIZE`, Keyword, Push("instruction-args")}, - {`([@a-z$._?][\w$.?#@~]*)(\s+)(db|dd|dw|T[A-Z][a-z]+)`, ByGroups(NameConstant, KeywordDeclaration, KeywordDeclaration), Push("instruction-args")}, - {`(?:res|d)[bwdqt]|times`, KeywordDeclaration, Push("instruction-args")}, - {`[@a-z$._?][\w$.?#@~]*`, NameFunction, Push("instruction-args")}, - {`[\r\n]+`, Text, nil}, - }, - "instruction-args": { - {"\"(\\\\\"|[^\"\\n])*\"|'(\\\\'|[^'\\n])*'|`(\\\\`|[^`\\n])*`", LiteralString, nil}, - {`(?:0x[0-9a-f]+|$0[0-9a-f]*|[0-9]+[0-9a-f]*h)`, LiteralNumberHex, nil}, - {`[0-7]+q`, LiteralNumberOct, nil}, - {`[01]+b`, LiteralNumberBin, nil}, - {`[0-9]+\.e?[0-9]+`, LiteralNumberFloat, nil}, - {`[0-9]+`, LiteralNumberInteger, nil}, - Include("punctuation"), - {`r[0-9][0-5]?[bwd]|[a-d][lh]|[er]?[a-d]x|[er]?[sb]p|[er]?[sd]i|[c-gs]s|st[0-7]|mm[0-7]|cr[0-4]|dr[0-367]|tr[3-7]`, NameBuiltin, nil}, - {`[@a-z$._?][\w$.?#@~]*`, NameVariable, nil}, - {`(\\\s*)(;.*)([\r\n])`, ByGroups(Text, CommentSingle, Text), nil}, - {`[\r\n]+`, Text, Pop(1)}, - Include("whitespace"), - }, - "preproc": { - {`[^;\n]+`, CommentPreproc, nil}, - {`;.*?\n`, CommentSingle, Pop(1)}, - {`\n`, CommentPreproc, Pop(1)}, - }, - "whitespace": { - {`[\n\r]`, Text, nil}, - {`\\[\n\r]`, Text, nil}, - {`[ \t]+`, Text, nil}, - {`;.*`, CommentSingle, nil}, - }, - "punctuation": { - {`[,():\[\]]+`, Punctuation, nil}, - {`[&|^<>+*=/%~-]+`, Operator, nil}, - {`[$]+`, KeywordConstant, nil}, - {`seg|wrt|strict`, OperatorWord, nil}, - {`byte|[dq]?word`, KeywordType, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/t/tcl.go b/vendor/github.com/alecthomas/chroma/lexers/t/tcl.go deleted file mode 100644 index 77951b4..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/t/tcl.go +++ /dev/null @@ -1,116 +0,0 @@ -package t - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Tcl lexer. -var Tcl = internal.Register(MustNewLexer( - &Config{ - Name: "Tcl", - Aliases: []string{"tcl"}, - Filenames: []string{"*.tcl", "*.rvt"}, - MimeTypes: []string{"text/x-tcl", "text/x-script.tcl", "application/x-tcl"}, - }, - Rules{ - "root": { - Include("command"), - Include("basic"), - Include("data"), - {`\}`, Keyword, nil}, - }, - "command": { - {Words(`\b`, `\b`, `after`, `apply`, `array`, `break`, `catch`, `continue`, `elseif`, `else`, `error`, `eval`, `expr`, `for`, `foreach`, `global`, `if`, `namespace`, `proc`, `rename`, `return`, `set`, `switch`, `then`, `trace`, `unset`, `update`, `uplevel`, `upvar`, `variable`, `vwait`, `while`), Keyword, Push("params")}, - {Words(`\b`, `\b`, `append`, `bgerror`, `binary`, `cd`, `chan`, `clock`, `close`, `concat`, `dde`, `dict`, `encoding`, `eof`, `exec`, `exit`, `fblocked`, `fconfigure`, `fcopy`, `file`, `fileevent`, `flush`, `format`, `gets`, `glob`, `history`, `http`, `incr`, `info`, `interp`, `join`, `lappend`, `lassign`, `lindex`, `linsert`, `list`, `llength`, `load`, `loadTk`, `lrange`, `lrepeat`, `lreplace`, `lreverse`, `lsearch`, `lset`, `lsort`, `mathfunc`, `mathop`, `memory`, `msgcat`, `open`, `package`, `pid`, `pkg::create`, `pkg_mkIndex`, `platform`, `platform::shell`, `puts`, `pwd`, `re_syntax`, `read`, `refchan`, `regexp`, `registry`, `regsub`, `scan`, `seek`, `socket`, `source`, `split`, `string`, `subst`, `tell`, `time`, `tm`, `unknown`, `unload`), NameBuiltin, Push("params")}, - {`([\w.-]+)`, NameVariable, Push("params")}, - {`#`, Comment, Push("comment")}, - }, - "command-in-brace": { - {Words(`\b`, `\b`, `after`, `apply`, `array`, `break`, `catch`, `continue`, `elseif`, `else`, `error`, `eval`, `expr`, `for`, `foreach`, `global`, `if`, `namespace`, `proc`, `rename`, `return`, `set`, `switch`, `then`, `trace`, `unset`, `update`, `uplevel`, `upvar`, `variable`, `vwait`, `while`), Keyword, Push("params-in-brace")}, - {Words(`\b`, `\b`, `append`, `bgerror`, `binary`, `cd`, `chan`, `clock`, `close`, `concat`, `dde`, `dict`, `encoding`, `eof`, `exec`, `exit`, `fblocked`, `fconfigure`, `fcopy`, `file`, `fileevent`, `flush`, `format`, `gets`, `glob`, `history`, `http`, `incr`, `info`, `interp`, `join`, `lappend`, `lassign`, `lindex`, `linsert`, `list`, `llength`, `load`, `loadTk`, `lrange`, `lrepeat`, `lreplace`, `lreverse`, `lsearch`, `lset`, `lsort`, `mathfunc`, `mathop`, `memory`, `msgcat`, `open`, `package`, `pid`, `pkg::create`, `pkg_mkIndex`, `platform`, `platform::shell`, `puts`, `pwd`, `re_syntax`, `read`, `refchan`, `regexp`, `registry`, `regsub`, `scan`, `seek`, `socket`, `source`, `split`, `string`, `subst`, `tell`, `time`, `tm`, `unknown`, `unload`), NameBuiltin, Push("params-in-brace")}, - {`([\w.-]+)`, NameVariable, Push("params-in-brace")}, - {`#`, Comment, Push("comment")}, - }, - "command-in-bracket": { - {Words(`\b`, `\b`, `after`, `apply`, `array`, `break`, `catch`, `continue`, `elseif`, `else`, `error`, `eval`, `expr`, `for`, `foreach`, `global`, `if`, `namespace`, `proc`, `rename`, `return`, `set`, `switch`, `then`, `trace`, `unset`, `update`, `uplevel`, `upvar`, `variable`, `vwait`, `while`), Keyword, Push("params-in-bracket")}, - {Words(`\b`, `\b`, `append`, `bgerror`, `binary`, `cd`, `chan`, `clock`, `close`, `concat`, `dde`, `dict`, `encoding`, `eof`, `exec`, `exit`, `fblocked`, `fconfigure`, `fcopy`, `file`, `fileevent`, `flush`, `format`, `gets`, `glob`, `history`, `http`, `incr`, `info`, `interp`, `join`, `lappend`, `lassign`, `lindex`, `linsert`, `list`, `llength`, `load`, `loadTk`, `lrange`, `lrepeat`, `lreplace`, `lreverse`, `lsearch`, `lset`, `lsort`, `mathfunc`, `mathop`, `memory`, `msgcat`, `open`, `package`, `pid`, `pkg::create`, `pkg_mkIndex`, `platform`, `platform::shell`, `puts`, `pwd`, `re_syntax`, `read`, `refchan`, `regexp`, `registry`, `regsub`, `scan`, `seek`, `socket`, `source`, `split`, `string`, `subst`, `tell`, `time`, `tm`, `unknown`, `unload`), NameBuiltin, Push("params-in-bracket")}, - {`([\w.-]+)`, NameVariable, Push("params-in-bracket")}, - {`#`, Comment, Push("comment")}, - }, - "command-in-paren": { - {Words(`\b`, `\b`, `after`, `apply`, `array`, `break`, `catch`, `continue`, `elseif`, `else`, `error`, `eval`, `expr`, `for`, `foreach`, `global`, `if`, `namespace`, `proc`, `rename`, `return`, `set`, `switch`, `then`, `trace`, `unset`, `update`, `uplevel`, `upvar`, `variable`, `vwait`, `while`), Keyword, Push("params-in-paren")}, - {Words(`\b`, `\b`, `append`, `bgerror`, `binary`, `cd`, `chan`, `clock`, `close`, `concat`, `dde`, `dict`, `encoding`, `eof`, `exec`, `exit`, `fblocked`, `fconfigure`, `fcopy`, `file`, `fileevent`, `flush`, `format`, `gets`, `glob`, `history`, `http`, `incr`, `info`, `interp`, `join`, `lappend`, `lassign`, `lindex`, `linsert`, `list`, `llength`, `load`, `loadTk`, `lrange`, `lrepeat`, `lreplace`, `lreverse`, `lsearch`, `lset`, `lsort`, `mathfunc`, `mathop`, `memory`, `msgcat`, `open`, `package`, `pid`, `pkg::create`, `pkg_mkIndex`, `platform`, `platform::shell`, `puts`, `pwd`, `re_syntax`, `read`, `refchan`, `regexp`, `registry`, `regsub`, `scan`, `seek`, `socket`, `source`, `split`, `string`, `subst`, `tell`, `time`, `tm`, `unknown`, `unload`), NameBuiltin, Push("params-in-paren")}, - {`([\w.-]+)`, NameVariable, Push("params-in-paren")}, - {`#`, Comment, Push("comment")}, - }, - "basic": { - {`\(`, Keyword, Push("paren")}, - {`\[`, Keyword, Push("bracket")}, - {`\{`, Keyword, Push("brace")}, - {`"`, LiteralStringDouble, Push("string")}, - {`(eq|ne|in|ni)\b`, OperatorWord, nil}, - {`!=|==|<<|>>|<=|>=|&&|\|\||\*\*|[-+~!*/%<>&^|?:]`, Operator, nil}, - }, - "data": { - {`\s+`, Text, nil}, - {`0x[a-fA-F0-9]+`, LiteralNumberHex, nil}, - {`0[0-7]+`, LiteralNumberOct, nil}, - {`\d+\.\d+`, LiteralNumberFloat, nil}, - {`\d+`, LiteralNumberInteger, nil}, - {`\$([\w.:-]+)`, NameVariable, nil}, - {`([\w.:-]+)`, Text, nil}, - }, - "params": { - {`;`, Keyword, Pop(1)}, - {`\n`, Text, Pop(1)}, - {`(else|elseif|then)\b`, Keyword, nil}, - Include("basic"), - Include("data"), - }, - "params-in-brace": { - {`\}`, Keyword, Push("#pop", "#pop")}, - Include("params"), - }, - "params-in-paren": { - {`\)`, Keyword, Push("#pop", "#pop")}, - Include("params"), - }, - "params-in-bracket": { - {`\]`, Keyword, Push("#pop", "#pop")}, - Include("params"), - }, - "string": { - {`\[`, LiteralStringDouble, Push("string-square")}, - {`(?s)(\\\\|\\[0-7]+|\\.|[^"\\])`, LiteralStringDouble, nil}, - {`"`, LiteralStringDouble, Pop(1)}, - }, - "string-square": { - {`\[`, LiteralStringDouble, Push("string-square")}, - {`(?s)(\\\\|\\[0-7]+|\\.|\\\n|[^\]\\])`, LiteralStringDouble, nil}, - {`\]`, LiteralStringDouble, Pop(1)}, - }, - "brace": { - {`\}`, Keyword, Pop(1)}, - Include("command-in-brace"), - Include("basic"), - Include("data"), - }, - "paren": { - {`\)`, Keyword, Pop(1)}, - Include("command-in-paren"), - Include("basic"), - Include("data"), - }, - "bracket": { - {`\]`, Keyword, Pop(1)}, - Include("command-in-bracket"), - Include("basic"), - Include("data"), - }, - "comment": { - {`.*[^\\]\n`, Comment, Pop(1)}, - {`.*\\\n`, Comment, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/t/tcsh.go b/vendor/github.com/alecthomas/chroma/lexers/t/tcsh.go deleted file mode 100644 index e36bdfd..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/t/tcsh.go +++ /dev/null @@ -1,59 +0,0 @@ -package t - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Tcsh lexer. -var Tcsh = internal.Register(MustNewLexer( - &Config{ - Name: "Tcsh", - Aliases: []string{"tcsh", "csh"}, - Filenames: []string{"*.tcsh", "*.csh"}, - MimeTypes: []string{"application/x-csh"}, - }, - Rules{ - "root": { - Include("basic"), - {`\$\(`, Keyword, Push("paren")}, - {`\$\{#?`, Keyword, Push("curly")}, - {"`", LiteralStringBacktick, Push("backticks")}, - Include("data"), - }, - "basic": { - {`\b(if|endif|else|while|then|foreach|case|default|continue|goto|breaksw|end|switch|endsw)\s*\b`, Keyword, nil}, - {`\b(alias|alloc|bg|bindkey|break|builtins|bye|caller|cd|chdir|complete|dirs|echo|echotc|eval|exec|exit|fg|filetest|getxvers|glob|getspath|hashstat|history|hup|inlib|jobs|kill|limit|log|login|logout|ls-F|migrate|newgrp|nice|nohup|notify|onintr|popd|printenv|pushd|rehash|repeat|rootnode|popd|pushd|set|shift|sched|setenv|setpath|settc|setty|setxvers|shift|source|stop|suspend|source|suspend|telltc|time|umask|unalias|uncomplete|unhash|universe|unlimit|unset|unsetenv|ver|wait|warp|watchlog|where|which)\s*\b`, NameBuiltin, nil}, - {`#.*`, Comment, nil}, - {`\\[\w\W]`, LiteralStringEscape, nil}, - {`(\b\w+)(\s*)(=)`, ByGroups(NameVariable, Text, Operator), nil}, - {`[\[\]{}()=]+`, Operator, nil}, - {`<<\s*(\'?)\\?(\w+)[\w\W]+?\2`, LiteralString, nil}, - {`;`, Punctuation, nil}, - }, - "data": { - {`(?s)"(\\\\|\\[0-7]+|\\.|[^"\\])*"`, LiteralStringDouble, nil}, - {`(?s)'(\\\\|\\[0-7]+|\\.|[^'\\])*'`, LiteralStringSingle, nil}, - {`\s+`, Text, nil}, - {"[^=\\s\\[\\]{}()$\"\\'`\\\\;#]+", Text, nil}, - {`\d+(?= |\Z)`, LiteralNumber, nil}, - {`\$#?(\w+|.)`, NameVariable, nil}, - }, - "curly": { - {`\}`, Keyword, Pop(1)}, - {`:-`, Keyword, nil}, - {`\w+`, NameVariable, nil}, - {"[^}:\"\\'`$]+", Punctuation, nil}, - {`:`, Punctuation, nil}, - Include("root"), - }, - "paren": { - {`\)`, Keyword, Pop(1)}, - Include("root"), - }, - "backticks": { - {"`", LiteralStringBacktick, Pop(1)}, - Include("root"), - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/t/termcap.go b/vendor/github.com/alecthomas/chroma/lexers/t/termcap.go deleted file mode 100644 index 21b7d15..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/t/termcap.go +++ /dev/null @@ -1,42 +0,0 @@ -package t - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Termcap lexer. -var Termcap = internal.Register(MustNewLexer( - &Config{ - Name: "Termcap", - Aliases: []string{"termcap"}, - Filenames: []string{"termcap", "termcap.src"}, - MimeTypes: []string{}, - }, - Rules{ - "root": { - {`^#.*$`, Comment, nil}, - {`^[^\s#:|]+`, NameTag, Push("names")}, - }, - "names": { - {`\n`, Text, Pop(1)}, - {`:`, Punctuation, Push("defs")}, - {`\|`, Punctuation, nil}, - {`[^:|]+`, NameAttribute, nil}, - }, - "defs": { - {`\\\n[ \t]*`, Text, nil}, - {`\n[ \t]*`, Text, Pop(2)}, - {`(#)([0-9]+)`, ByGroups(Operator, LiteralNumber), nil}, - {`=`, Operator, Push("data")}, - {`:`, Punctuation, nil}, - {`[^\s:=#]+`, NameClass, nil}, - }, - "data": { - {`\\072`, Literal, nil}, - {`:`, Punctuation, Pop(1)}, - {`[^:\\]+`, Literal, nil}, - {`.`, Literal, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/t/terminfo.go b/vendor/github.com/alecthomas/chroma/lexers/t/terminfo.go deleted file mode 100644 index 79749e1..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/t/terminfo.go +++ /dev/null @@ -1,42 +0,0 @@ -package t - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Terminfo lexer. -var Terminfo = internal.Register(MustNewLexer( - &Config{ - Name: "Terminfo", - Aliases: []string{"terminfo"}, - Filenames: []string{"terminfo", "terminfo.src"}, - MimeTypes: []string{}, - }, - Rules{ - "root": { - {`^#.*$`, Comment, nil}, - {`^[^\s#,|]+`, NameTag, Push("names")}, - }, - "names": { - {`\n`, Text, Pop(1)}, - {`(,)([ \t]*)`, ByGroups(Punctuation, Text), Push("defs")}, - {`\|`, Punctuation, nil}, - {`[^,|]+`, NameAttribute, nil}, - }, - "defs": { - {`\n[ \t]+`, Text, nil}, - {`\n`, Text, Pop(2)}, - {`(#)([0-9]+)`, ByGroups(Operator, LiteralNumber), nil}, - {`=`, Operator, Push("data")}, - {`(,)([ \t]*)`, ByGroups(Punctuation, Text), nil}, - {`[^\s,=#]+`, NameClass, nil}, - }, - "data": { - {`\\[,\\]`, Literal, nil}, - {`(,)([ \t]*)`, ByGroups(Punctuation, Text), Pop(1)}, - {`[^\\,]+`, Literal, nil}, - {`.`, Literal, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/t/terraform.go b/vendor/github.com/alecthomas/chroma/lexers/t/terraform.go deleted file mode 100644 index 093ee30..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/t/terraform.go +++ /dev/null @@ -1,60 +0,0 @@ -package t - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Terraform lexer. -var Terraform = internal.Register(MustNewLexer( - &Config{ - Name: "Terraform", - Aliases: []string{"terraform", "tf"}, - Filenames: []string{"*.tf"}, - MimeTypes: []string{"application/x-tf", "application/x-terraform"}, - }, - Rules{ - "root": { - {`[\[\](),.{}]`, Punctuation, nil}, - {`-?[0-9]+`, LiteralNumber, nil}, - {`=>`, Punctuation, nil}, - {Words(``, `\b`, `true`, `false`), KeywordConstant, nil}, - {`/(?s)\*(((?!\*/).)*)\*/`, CommentMultiline, nil}, - {`\s*(#|//).*\n`, CommentSingle, nil}, - {`([a-zA-Z]\w*)(\s*)(=(?!>))`, ByGroups(NameAttribute, Text, Text), nil}, - {Words(`^\s*`, `\b`, `variable`, `data`, `resource`, `provider`, `provisioner`, `module`, `output`), KeywordReserved, nil}, - {Words(``, `\b`, `for`, `in`), Keyword, nil}, - {Words(``, ``, `count`, `data`, `var`, `module`, `each`), NameBuiltin, nil}, - {Words(``, `\b`, `abs`, `ceil`, `floor`, `log`, `max`, `min`, `parseint`, `pow`, `signum`), NameBuiltin, nil}, - {Words(``, `\b`, `chomp`, `format`, `formatlist`, `indent`, `join`, `lower`, `regex`, `regexall`, `replace`, `split`, `strrev`, `substr`, `title`, `trim`, `trimprefix`, `trimsuffix`, `trimspace`, `upper`), NameBuiltin, nil}, - {Words(`[^.]`, `\b`, `chunklist`, `coalesce`, `coalescelist`, `compact`, `concat`, `contains`, `distinct`, `element`, `flatten`, `index`, `keys`, `length`, `list`, `lookup`, `map`, `matchkeys`, `merge`, `range`, `reverse`, `setintersection`, `setproduct`, `setsubtract`, `setunion`, `slice`, `sort`, `transpose`, `values`, `zipmap`), NameBuiltin, nil}, - {Words(`[^.]`, `\b`, `base64decode`, `base64encode`, `base64gzip`, `csvdecode`, `jsondecode`, `jsonencode`, `urlencode`, `yamldecode`, `yamlencode`), NameBuiltin, nil}, - {Words(``, `\b`, `abspath`, `dirname`, `pathexpand`, `basename`, `file`, `fileexists`, `fileset`, `filebase64`, `templatefile`), NameBuiltin, nil}, - {Words(``, `\b`, `formatdate`, `timeadd`, `timestamp`), NameBuiltin, nil}, - {Words(``, `\b`, `base64sha256`, `base64sha512`, `bcrypt`, `filebase64sha256`, `filebase64sha512`, `filemd5`, `filesha1`, `filesha256`, `filesha512`, `md5`, `rsadecrypt`, `sha1`, `sha256`, `sha512`, `uuid`, `uuidv5`), NameBuiltin, nil}, - {Words(``, `\b`, `cidrhost`, `cidrnetmask`, `cidrsubnet`), NameBuiltin, nil}, - {Words(``, `\b`, `can`, `tobool`, `tolist`, `tomap`, `tonumber`, `toset`, `tostring`, `try`), NameBuiltin, nil}, - {`=(?!>)|\+|-|\*|\/|:|!|%|>|<(?!<)|>=|<=|==|!=|&&|\||\?`, Operator, nil}, - {`\n|\s+|\\\n`, Text, nil}, - {`[a-zA-Z]\w*`, NameOther, nil}, - {`"`, LiteralStringDouble, Push("string")}, - {`(?s)(<<-?)(\w+)(\n\s*(?:(?!\2).)*\s*\n\s*)(\2)`, ByGroups(Operator, Operator, String, Operator), nil}, - }, - "declaration": { - {`(\s*)("(?:\\\\|\\"|[^"])*")(\s*)`, ByGroups(Text, NameVariable, Text), nil}, - {`\{`, Punctuation, Pop(1)}, - }, - "string": { - {`"`, LiteralStringDouble, Pop(1)}, - {`\\\\`, LiteralStringDouble, nil}, - {`\\\\"`, LiteralStringDouble, nil}, - {`\$\{`, LiteralStringInterpol, Push("interp-inside")}, - {`\$`, LiteralStringDouble, nil}, - {`[^"\\\\$]+`, LiteralStringDouble, nil}, - }, - "interp-inside": { - {`\}`, LiteralStringInterpol, Pop(1)}, - Include("root"), - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/t/tex.go b/vendor/github.com/alecthomas/chroma/lexers/t/tex.go deleted file mode 100644 index f1010c4..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/t/tex.go +++ /dev/null @@ -1,56 +0,0 @@ -package t - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Tex lexer. -var TeX = internal.Register(MustNewLexer( - &Config{ - Name: "TeX", - Aliases: []string{"tex", "latex"}, - Filenames: []string{"*.tex", "*.aux", "*.toc"}, - MimeTypes: []string{"text/x-tex", "text/x-latex"}, - }, - Rules{ - "general": { - {`%.*?\n`, Comment, nil}, - {`[{}]`, NameBuiltin, nil}, - {`[&_^]`, NameBuiltin, nil}, - }, - "root": { - {`\\\[`, LiteralStringBacktick, Push("displaymath")}, - {`\\\(`, LiteralString, Push("inlinemath")}, - {`\$\$`, LiteralStringBacktick, Push("displaymath")}, - {`\$`, LiteralString, Push("inlinemath")}, - {`\\([a-zA-Z]+|.)`, Keyword, Push("command")}, - {`\\$`, Keyword, nil}, - Include("general"), - {`[^\\$%&_^{}]+`, Text, nil}, - }, - "math": { - {`\\([a-zA-Z]+|.)`, NameVariable, nil}, - Include("general"), - {`[0-9]+`, LiteralNumber, nil}, - {`[-=!+*/()\[\]]`, Operator, nil}, - {`[^=!+*/()\[\]\\$%&_^{}0-9-]+`, NameBuiltin, nil}, - }, - "inlinemath": { - {`\\\)`, LiteralString, Pop(1)}, - {`\$`, LiteralString, Pop(1)}, - Include("math"), - }, - "displaymath": { - {`\\\]`, LiteralString, Pop(1)}, - {`\$\$`, LiteralString, Pop(1)}, - {`\$`, NameBuiltin, nil}, - Include("math"), - }, - "command": { - {`\[.*?\]`, NameAttribute, nil}, - {`\*`, Keyword, nil}, - Default(Pop(1)), - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/t/thrift.go b/vendor/github.com/alecthomas/chroma/lexers/t/thrift.go deleted file mode 100644 index 5cbd0af..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/t/thrift.go +++ /dev/null @@ -1,73 +0,0 @@ -package t - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Thrift lexer. -var Thrift = internal.Register(MustNewLexer( - &Config{ - Name: "Thrift", - Aliases: []string{"thrift"}, - Filenames: []string{"*.thrift"}, - MimeTypes: []string{"application/x-thrift"}, - }, - Rules{ - "root": { - Include("whitespace"), - Include("comments"), - {`"`, LiteralStringDouble, Combined("stringescape", "dqs")}, - {`\'`, LiteralStringSingle, Combined("stringescape", "sqs")}, - {`(namespace)(\s+)`, ByGroups(KeywordNamespace, TextWhitespace), Push("namespace")}, - {`(enum|union|struct|service|exception)(\s+)`, ByGroups(KeywordDeclaration, TextWhitespace), Push("class")}, - {`((?:(?:[^\W\d]|\$)[\w.\[\]$<>]*\s+)+?)((?:[^\W\d]|\$)[\w$]*)(\s*)(\()`, ByGroups(UsingSelf("root"), NameFunction, Text, Operator), nil}, - Include("keywords"), - Include("numbers"), - {`[&=]`, Operator, nil}, - {`[:;,{}()<>\[\]]`, Punctuation, nil}, - {`[a-zA-Z_](\.\w|\w)*`, Name, nil}, - }, - "whitespace": { - {`\n`, TextWhitespace, nil}, - {`\s+`, TextWhitespace, nil}, - }, - "comments": { - {`#.*$`, Comment, nil}, - {`//.*?\n`, Comment, nil}, - {`/\*[\w\W]*?\*/`, CommentMultiline, nil}, - }, - "stringescape": { - {`\\([\\nrt"\'])`, LiteralStringEscape, nil}, - }, - "dqs": { - {`"`, LiteralStringDouble, Pop(1)}, - {`[^\\"\n]+`, LiteralStringDouble, nil}, - }, - "sqs": { - {`'`, LiteralStringSingle, Pop(1)}, - {`[^\\\'\n]+`, LiteralStringSingle, nil}, - }, - "namespace": { - {`[a-z*](\.\w|\w)*`, NameNamespace, Pop(1)}, - Default(Pop(1)), - }, - "class": { - {`[a-zA-Z_]\w*`, NameClass, Pop(1)}, - Default(Pop(1)), - }, - "keywords": { - {`(async|oneway|extends|throws|required|optional)\b`, Keyword, nil}, - {`(true|false)\b`, KeywordConstant, nil}, - {`(const|typedef)\b`, KeywordDeclaration, nil}, - {Words(``, `\b`, `cpp_namespace`, `cpp_include`, `cpp_type`, `java_package`, `cocoa_prefix`, `csharp_namespace`, `delphi_namespace`, `php_namespace`, `py_module`, `perl_package`, `ruby_namespace`, `smalltalk_category`, `smalltalk_prefix`, `xsd_all`, `xsd_optional`, `xsd_nillable`, `xsd_namespace`, `xsd_attrs`, `include`), KeywordNamespace, nil}, - {Words(``, `\b`, `void`, `bool`, `byte`, `i16`, `i32`, `i64`, `double`, `string`, `binary`, `map`, `list`, `set`, `slist`, `senum`), KeywordType, nil}, - {Words(`\b`, `\b`, `BEGIN`, `END`, `__CLASS__`, `__DIR__`, `__FILE__`, `__FUNCTION__`, `__LINE__`, `__METHOD__`, `__NAMESPACE__`, `abstract`, `alias`, `and`, `args`, `as`, `assert`, `begin`, `break`, `case`, `catch`, `class`, `clone`, `continue`, `declare`, `def`, `default`, `del`, `delete`, `do`, `dynamic`, `elif`, `else`, `elseif`, `elsif`, `end`, `enddeclare`, `endfor`, `endforeach`, `endif`, `endswitch`, `endwhile`, `ensure`, `except`, `exec`, `finally`, `float`, `for`, `foreach`, `function`, `global`, `goto`, `if`, `implements`, `import`, `in`, `inline`, `instanceof`, `interface`, `is`, `lambda`, `module`, `native`, `new`, `next`, `nil`, `not`, `or`, `pass`, `public`, `print`, `private`, `protected`, `raise`, `redo`, `rescue`, `retry`, `register`, `return`, `self`, `sizeof`, `static`, `super`, `switch`, `synchronized`, `then`, `this`, `throw`, `transient`, `try`, `undef`, `unless`, `unsigned`, `until`, `use`, `var`, `virtual`, `volatile`, `when`, `while`, `with`, `xor`, `yield`), KeywordReserved, nil}, - }, - "numbers": { - {`[+-]?(\d+\.\d+([eE][+-]?\d+)?|\.?\d+[eE][+-]?\d+)`, LiteralNumberFloat, nil}, - {`[+-]?0x[0-9A-Fa-f]+`, LiteralNumberHex, nil}, - {`[+-]?[0-9]+`, LiteralNumberInteger, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/t/toml.go b/vendor/github.com/alecthomas/chroma/lexers/t/toml.go deleted file mode 100644 index 68bfc90..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/t/toml.go +++ /dev/null @@ -1,29 +0,0 @@ -package t - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -var TOML = internal.Register(MustNewLexer( - &Config{ - Name: "TOML", - Aliases: []string{"toml"}, - Filenames: []string{"*.toml"}, - MimeTypes: []string{"text/x-toml"}, - }, - Rules{ - "root": { - {`\s+`, Text, nil}, - {`#.*`, Comment, nil}, - {Words(``, `\b`, `true`, `false`), KeywordConstant, nil}, - {`\d\d\d\d-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d\+)?(Z|[+-]\d{2}:\d{2})`, LiteralDate, nil}, - {`[+-]?[0-9](_?\d)*\.\d+`, LiteralNumberFloat, nil}, - {`[+-]?[0-9](_?\d)*`, LiteralNumberInteger, nil}, - {`"(\\\\|\\"|[^"])*"`, StringDouble, nil}, - {`'(\\\\|\\'|[^'])*'`, StringSingle, nil}, - {`[.,=\[\]]`, Punctuation, nil}, - {`[^\W\d]\w*`, NameOther, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/t/tradingview.go b/vendor/github.com/alecthomas/chroma/lexers/t/tradingview.go deleted file mode 100644 index e3d8a7a..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/t/tradingview.go +++ /dev/null @@ -1,40 +0,0 @@ -package t - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// TradingView lexer -var TradingView = internal.Register(MustNewLexer( - &Config{ - Name: "TradingView", - Aliases: []string{"tradingview", "tv"}, - Filenames: []string{"*.tv"}, - MimeTypes: []string{"text/x-tradingview"}, - DotAll: true, - EnsureNL: true, - }, - Rules{ - "root": { - {`[^\S\n]+|\n|[()]`, Text, nil}, - {`(//.*?)(\n)`, ByGroups(CommentSingle, Text), nil}, - {`>=|<=|==|!=|>|<|\?|-|\+|\*|\/|%|\[|\]`, Operator, nil}, - {`[:,.]`, Punctuation, nil}, - {`=`, KeywordPseudo, nil}, - {`"(\\\\|\\"|[^"\n])*["\n]`, LiteralString, nil}, - {`'\\.'|'[^\\]'`, LiteralString, nil}, - {`[0-9](\.[0-9]*)?([eE][+-][0-9]+)?`, LiteralNumber, nil}, - {`#[a-fA-F0-9]{8}|#[a-fA-F0-9]{6}|#[a-fA-F0-9]{3}`, LiteralStringOther, nil}, - {`(abs|acos|alertcondition|alma|asin|atan|atr|avg|barcolor|barssince|bgcolor|cci|ceil|change|cog|color\.new|correlation|cos|crossover|crossunder|cum|dev|ema|exp|falling|fill|fixnan|floor|heikinashi|highest|highestbars|hline|iff|kagi|label\.(delete|get_text|get_x|get_y|new|set_color|set_size|set_style|set_text|set_textcolor|set_x|set_xloc|set_xy|set_y|set_yloc)|line\.(new|delete|get_x1|get_x2|get_y1|get_y2|set_color|set_width|set_style|set_extend|set_xy1|set_xy2|set_x1|set_x2|set_y1|set_y2|set_xloc)|linebreak|linreg|log|log10|lowest|lowestbars|macd|max|max_bars_back|min|mom|nz|percentile_(linear_interpolation|nearest_rank)|percentrank|pivothigh|pivotlow|plot|plotarrow|plotbar|plotcandle|plotchar|plotshape|pointfigure|pow|renko|rising|rma|roc|round|rsi|sar|security|sign|sin|sma|sqrt|stdev|stoch|study|sum|swma|tan|timestamp|tostring|tsi|valuewhen|variance|vwma|wma|strategy\.(cancel|cancel_all|close|close_all|entry|exit|order|risk\.(allow_entry_in|max_cons_loss_days|max_drawdown|max_intraday_filled_orders|max_intraday_loss|max_position_size)))\b`, NameFunction, nil}, - {`\b(bool|color|cross|dayofmonth|dayofweek|float|hour|input|int|label|line|minute|month|na|offset|second|strategy|string|tickerid|time|tr|vwap|weekofyear|year)(\()`, ByGroups(NameFunction, Text), nil}, // functions that can also be variable - {`(accdist|adjustment\.(dividends|none|splits)|aqua|area|areabr|bar_index|black|blue|bool|circles|close|columns|currency\.(AUD|CAD|CHF|EUR|GBP|HKD|JPY|NOK|NONE|NZD|RUB|SEK|SGD|TRY|USD|ZAR)|color\.(aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow)|dashed|dotted|dayofweek\.(monday|tuesday|wednesday|thursday|friday|saturday|sunday)|extend\.(both|left|right|none)|float|format\.(inherit|price|volume)|friday|fuchsia|gray|green|high|histogram|hl2|hlc3|hline\.style_(dotted|solid|dashed)|input\.(bool|float|integer|resolution|session|source|string|symbol)|integer|interval|isdaily|isdwm|isintraday|ismonthly|isweekly|label\.style_(arrowdown|arrowup|circle|cross|diamond|flag|labeldown|labelup|none|square|triangledown|triangleup|xcross)|lime|line\.style_(dashed|dotted|solid|arrow_both|arrow_left|arrow_right)|linebr|location\.(abovebar|absolute|belowbar|bottom|top)|low|maroon|monday|n|navy|ohlc4|olive|open|orange|period|plot\.style_(area|areabr|circles|columns|cross|histogram|line|linebr|stepline)|purple|red|resolution|saturday|scale\.(left|none|right)|session|session\.(extended|regular)|silver|size\.(auto|huge|large|normal|small|tiny)|solid|source|stepline|string|sunday|symbol|syminfo\.(mintick|pointvalue|prefix|root|session|ticker|tickerid|timezone)|teal|thursday|ticker|timeframe\.(isdaily|isdwm|isintraday|ismonthly|isweekly|multiplier|period)|timenow|tuesday|volume|wednesday|white|yellow|strategy\.(cash|closedtrades|commission\.(cash_per_contract|cash_per_order|percent)|direction\.(all|long|short)|equity|eventrades|fixed|grossloss|grossprofit|initial_capital|long|losstrades|max_contracts_held_(all|long|short)|max_drawdown|netprofit|oca\.(cancel|none|reduce)|openprofit|opentrades|percent_of_equity|position_avg_price|position_entry_name|position_size|short|wintrades)|shape\.(arrowdown|arrowup|circle|cross|diamond|flag|labeldown|labelup|square|triangledown|triangleup|xcross)|barstate\.is(first|history|last|new|realtime)|barmerge\.(gaps_on|gaps_off|lookahead_on|lookahead_off)|xloc\.bar_(index|time)|yloc\.(abovebar|belowbar|price))\b`, NameVariable, nil}, - {`(cross|dayofmonth|dayofweek|hour|minute|month|na|second|tickerid|time|tr|vwap|weekofyear|year)(\b[^\(])`, ByGroups(NameVariable, Text), nil}, // variables that can also be function - {`(int|float|bool|color|string|label|line)(\b[^\(=.])`, ByGroups(KeywordType, Text), nil}, // types that can also be a function - {`(var)\b`, KeywordType, nil}, - {`(true|false)\b`, KeywordConstant, nil}, - {`(and|or|not|if|else|for|to)\b`, OperatorWord, nil}, - {`@?[_a-zA-Z]\w*`, Text, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/t/transactsql.go b/vendor/github.com/alecthomas/chroma/lexers/t/transactsql.go deleted file mode 100644 index 769a2f9..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/t/transactsql.go +++ /dev/null @@ -1,60 +0,0 @@ -package t - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// TransactSQL lexer. -var TransactSQL = internal.Register(MustNewLexer( - &Config{ - Name: "Transact-SQL", - Aliases: []string{"tsql", "t-sql"}, - MimeTypes: []string{"text/x-tsql"}, - NotMultiline: true, - CaseInsensitive: true, - }, - Rules{ - "root": { - {`\s+`, TextWhitespace, nil}, - {`--(?m).*?$\n?`, CommentSingle, nil}, - {`/\*`, CommentMultiline, Push("multiline-comments")}, - {`'`, LiteralStringSingle, Push("string")}, - {`"`, LiteralStringName, Push("quoted-ident")}, - {Words(``, ``, `!<`, `!=`, `!>`, `<`, `<=`, `<>`, `=`, `>`, `>=`, `+`, `+=`, `-`, `-=`, `*`, `*=`, `/`, `/=`, `%`, `%=`, `&`, `&=`, `|`, `|=`, `^`, `^=`, `~`, `::`), Operator, nil}, - {Words(``, `\b`, `all`, `and`, `any`, `between`, `except`, `exists`, `in`, `intersect`, `like`, `not`, `or`, `some`, `union`), OperatorWord, nil}, - {Words(``, `\b`, `bigint`, `binary`, `bit`, `char`, `cursor`, `date`, `datetime`, `datetime2`, `datetimeoffset`, `decimal`, `float`, `hierarchyid`, `image`, `int`, `money`, `nchar`, `ntext`, `numeric`, `nvarchar`, `real`, `smalldatetime`, `smallint`, `smallmoney`, `sql_variant`, `table`, `text`, `time`, `timestamp`, `tinyint`, `uniqueidentifier`, `varbinary`, `varchar`, `xml`), NameClass, nil}, - {Words(``, `\b`, `$partition`, `abs`, `acos`, `app_name`, `applock_mode`, `applock_test`, `ascii`, `asin`, `assemblyproperty`, `atan`, `atn2`, `avg`, `binary_checksum`, `cast`, `ceiling`, `certencoded`, `certprivatekey`, `char`, `charindex`, `checksum`, `checksum_agg`, `choose`, `col_length`, `col_name`, `columnproperty`, `compress`, `concat`, `connectionproperty`, `context_info`, `convert`, `cos`, `cot`, `count`, `count_big`, `current_request_id`, `current_timestamp`, `current_transaction_id`, `current_user`, `cursor_status`, `database_principal_id`, `databasepropertyex`, `dateadd`, `datediff`, `datediff_big`, `datefromparts`, `datename`, `datepart`, `datetime2fromparts`, `datetimefromparts`, `datetimeoffsetfromparts`, `day`, `db_id`, `db_name`, `decompress`, `degrees`, `dense_rank`, `difference`, `eomonth`, `error_line`, `error_message`, `error_number`, `error_procedure`, `error_severity`, `error_state`, `exp`, `file_id`, `file_idex`, `file_name`, `filegroup_id`, `filegroup_name`, `filegroupproperty`, `fileproperty`, `floor`, `format`, `formatmessage`, `fulltextcatalogproperty`, `fulltextserviceproperty`, `get_filestream_transaction_context`, `getansinull`, `getdate`, `getutcdate`, `grouping`, `grouping_id`, `has_perms_by_name`, `host_id`, `host_name`, `iif`, `index_col`, `indexkey_property`, `indexproperty`, `is_member`, `is_rolemember`, `is_srvrolemember`, `isdate`, `isjson`, `isnull`, `isnumeric`, `json_modify`, `json_query`, `json_value`, `left`, `len`, `log`, `log10`, `lower`, `ltrim`, `max`, `min`, `min_active_rowversion`, `month`, `nchar`, `newid`, `newsequentialid`, `ntile`, `object_definition`, `object_id`, `object_name`, `object_schema_name`, `objectproperty`, `objectpropertyex`, `opendatasource`, `openjson`, `openquery`, `openrowset`, `openxml`, `original_db_name`, `original_login`, `parse`, `parsename`, `patindex`, `permissions`, `pi`, `power`, `pwdcompare`, `pwdencrypt`, `quotename`, `radians`, `rand`, `rank`, `replace`, `replicate`, `reverse`, `right`, `round`, `row_number`, `rowcount_big`, `rtrim`, `schema_id`, `schema_name`, `scope_identity`, `serverproperty`, `session_context`, `session_user`, `sign`, `sin`, `smalldatetimefromparts`, `soundex`, `sp_helplanguage`, `space`, `sqrt`, `square`, `stats_date`, `stdev`, `stdevp`, `str`, `string_escape`, `string_split`, `stuff`, `substring`, `sum`, `suser_id`, `suser_name`, `suser_sid`, `suser_sname`, `switchoffset`, `sysdatetime`, `sysdatetimeoffset`, `system_user`, `sysutcdatetime`, `tan`, `textptr`, `textvalid`, `timefromparts`, `todatetimeoffset`, `try_cast`, `try_convert`, `try_parse`, `type_id`, `type_name`, `typeproperty`, `unicode`, `upper`, `user_id`, `user_name`, `var`, `varp`, `xact_state`, `year`), NameFunction, nil}, - {`(goto)(\s+)(\w+\b)`, ByGroups(Keyword, TextWhitespace, NameLabel), nil}, - {Words(``, `\b`, `absolute`, `action`, `ada`, `add`, `admin`, `after`, `aggregate`, `alias`, `all`, `allocate`, `alter`, `and`, `any`, `are`, `array`, `as`, `asc`, `asensitive`, `assertion`, `asymmetric`, `at`, `atomic`, `authorization`, `avg`, `backup`, `before`, `begin`, `between`, `binary`, `bit`, `bit_length`, `blob`, `boolean`, `both`, `breadth`, `break`, `browse`, `bulk`, `by`, `call`, `called`, `cardinality`, `cascade`, `cascaded`, `case`, `cast`, `catalog`, `catch`, `char`, `char_length`, `character`, `character_length`, `check`, `checkpoint`, `class`, `clob`, `close`, `clustered`, `coalesce`, `collate`, `collation`, `collect`, `column`, `commit`, `completion`, `compute`, `condition`, `connect`, `connection`, `constraint`, `constraints`, `constructor`, `contains`, `containstable`, `continue`, `convert`, `corr`, `corresponding`, `count`, `covar_pop`, `covar_samp`, `create`, `cross`, `cube`, `cume_dist`, `current`, `current_catalog`, `current_date`, `current_default_transform_group`, `current_path`, `current_role`, `current_schema`, `current_time`, `current_timestamp`, `current_transform_group_for_type`, `current_user`, `cursor`, `cycle`, `data`, `database`, `date`, `day`, `dbcc`, `deallocate`, `dec`, `decimal`, `declare`, `default`, `deferrable`, `deferred`, `delete`, `deny`, `depth`, `deref`, `desc`, `describe`, `descriptor`, `destroy`, `destructor`, `deterministic`, `diagnostics`, `dictionary`, `disconnect`, `disk`, `distinct`, `distributed`, `domain`, `double`, `drop`, `dump`, `dynamic`, `each`, `element`, `else`, `end`, `end-exec`, `equals`, `errlvl`, `escape`, `every`, `except`, `exception`, `exec`, `execute`, `exists`, `exit`, `external`, `extract`, `false`, `fetch`, `file`, `fillfactor`, `filter`, `first`, `float`, `for`, `foreign`, `fortran`, `found`, `free`, `freetext`, `freetexttable`, `from`, `full`, `fulltexttable`, `function`, `fusion`, `general`, `get`, `global`, `go`, `goto`, `grant`, `group`, `grouping`, `having`, `hold`, `holdlock`, `host`, `hour`, `identity`, `identity_insert`, `identitycol`, `if`, `ignore`, `immediate`, `in`, `include`, `index`, `indicator`, `initialize`, `initially`, `inner`, `inout`, `input`, `insensitive`, `insert`, `int`, `integer`, `intersect`, `intersection`, `interval`, `into`, `is`, `isolation`, `iterate`, `join`, `key`, `kill`, `language`, `large`, `last`, `lateral`, `leading`, `left`, `less`, `level`, `like`, `like_regex`, `limit`, `lineno`, `ln`, `load`, `local`, `localtime`, `localtimestamp`, `locator`, `lower`, `map`, `match`, `max`, `member`, `merge`, `method`, `min`, `minute`, `mod`, `modifies`, `modify`, `module`, `month`, `multiset`, `names`, `national`, `natural`, `nchar`, `nclob`, `new`, `next`, `no`, `nocheck`, `nonclustered`, `none`, `normalize`, `not`, `null`, `nullif`, `numeric`, `object`, `occurrences_regex`, `octet_length`, `of`, `off`, `offsets`, `old`, `on`, `only`, `open`, `opendatasource`, `openquery`, `openrowset`, `openxml`, `operation`, `option`, `or`, `order`, `ordinality`, `out`, `outer`, `output`, `over`, `overlaps`, `overlay`, `pad`, `parameter`, `parameters`, `partial`, `partition`, `pascal`, `path`, `percent`, `percent_rank`, `percentile_cont`, `percentile_disc`, `pivot`, `plan`, `position`, `position_regex`, `postfix`, `precision`, `prefix`, `preorder`, `prepare`, `preserve`, `primary`, `print`, `prior`, `privileges`, `proc`, `procedure`, `public`, `raiserror`, `range`, `read`, `reads`, `readtext`, `real`, `reconfigure`, `recursive`, `ref`, `references`, `referencing`, `regr_avgx`, `regr_avgy`, `regr_count`, `regr_intercept`, `regr_r2`, `regr_slope`, `regr_sxx`, `regr_sxy`, `regr_syy`, `relative`, `release`, `replication`, `restore`, `restrict`, `result`, `return`, `returns`, `revert`, `revoke`, `right`, `role`, `rollback`, `rollup`, `routine`, `row`, `rowcount`, `rowguidcol`, `rows`, `rule`, `save`, `savepoint`, `schema`, `scope`, `scroll`, `search`, `second`, `section`, `securityaudit`, `select`, `semantickeyphrasetable`, `semanticsimilaritydetailstable`, `semanticsimilaritytable`, `sensitive`, `sequence`, `session`, `session_user`, `set`, `sets`, `setuser`, `shutdown`, `similar`, `size`, `smallint`, `some`, `space`, `specific`, `specifictype`, `sql`, `sqlca`, `sqlcode`, `sqlerror`, `sqlexception`, `sqlstate`, `sqlwarning`, `start`, `state`, `statement`, `static`, `statistics`, `stddev_pop`, `stddev_samp`, `structure`, `submultiset`, `substring`, `substring_regex`, `sum`, `symmetric`, `system`, `system_user`, `table`, `tablesample`, `temporary`, `terminate`, `textsize`, `than`, `then`, `throw`, `time`, `timestamp`, `timezone_hour`, `timezone_minute`, `to`, `top`, `trailing`, `tran`, `transaction`, `translate`, `translate_regex`, `translation`, `treat`, `trigger`, `trim`, `true`, `truncate`, `try`, `try_convert`, `tsequal`, `uescape`, `under`, `union`, `unique`, `unknown`, `unnest`, `unpivot`, `update`, `updatetext`, `upper`, `usage`, `use`, `user`, `using`, `value`, `values`, `var_pop`, `var_samp`, `varchar`, `variable`, `varying`, `view`, `waitfor`, `when`, `whenever`, `where`, `while`, `width_bucket`, `window`, `with`, `within`, `without`, `work`, `write`, `writetext`, `xmlagg`, `xmlattributes`, `xmlbinary`, `xmlcast`, `xmlcomment`, `xmlconcat`, `xmldocument`, `xmlelement`, `xmlexists`, `xmlforest`, `xmliterate`, `xmlnamespaces`, `xmlparse`, `xmlpi`, `xmlquery`, `xmlserialize`, `xmltable`, `xmltext`, `xmlvalidate`, `year`, `zone`), Keyword, nil}, - {`(\[)([^]]+)(\])`, ByGroups(Operator, Name, Operator), nil}, - {`0x[0-9a-f]+`, LiteralNumberHex, nil}, - {`[0-9]+\.[0-9]*(e[+-]?[0-9]+)?`, LiteralNumberFloat, nil}, - {`\.[0-9]+(e[+-]?[0-9]+)?`, LiteralNumberFloat, nil}, - {`[0-9]+e[+-]?[0-9]+`, LiteralNumberFloat, nil}, - {`[0-9]+`, LiteralNumberInteger, nil}, - {`[;(),.]`, Punctuation, nil}, - {`@@\w+`, NameBuiltin, nil}, - {`@\w+`, NameVariable, nil}, - {`(\w+)(:)`, ByGroups(NameLabel, Punctuation), nil}, - {`#?#?\w+`, Name, nil}, - {`\?`, NameVariableMagic, nil}, - }, - "multiline-comments": { - {`/\*`, CommentMultiline, Push("multiline-comments")}, - {`\*/`, CommentMultiline, Pop(1)}, - {`[^/*]+`, CommentMultiline, nil}, - {`[/*]`, CommentMultiline, nil}, - }, - "string": { - {`[^']+`, LiteralStringSingle, nil}, - {`''`, LiteralStringSingle, nil}, - {`'`, LiteralStringSingle, Pop(1)}, - }, - "quoted-ident": { - {`[^"]+`, LiteralStringName, nil}, - {`""`, LiteralStringName, nil}, - {`"`, LiteralStringName, Pop(1)}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/t/turing.go b/vendor/github.com/alecthomas/chroma/lexers/t/turing.go deleted file mode 100644 index ae5671b..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/t/turing.go +++ /dev/null @@ -1,43 +0,0 @@ -package t - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Turing lexer. -var Turing = internal.Register(MustNewLexer( - &Config{ - Name: "Turing", - Aliases: []string{"turing"}, - Filenames: []string{"*.turing", "*.tu"}, - MimeTypes: []string{"text/x-turing"}, - }, - Rules{ - "root": { - {`\n`, Text, nil}, - {`\s+`, Text, nil}, - {`\\\n`, Text, nil}, - {`%(.*?)\n`, CommentSingle, nil}, - {`/(\\\n)?[*](.|\n)*?[*](\\\n)?/`, CommentMultiline, nil}, - {`(var|fcn|function|proc|procedure|process|class|end|record|type|begin|case|loop|for|const|union|monitor|module|handler)\b`, KeywordDeclaration, nil}, - {`(all|asm|assert|bind|bits|body|break|by|cheat|checked|close|condition|decreasing|def|deferred|else|elsif|exit|export|external|flexible|fork|forward|free|get|if|implement|import|include|inherit|init|invariant|label|new|objectclass|of|opaque|open|packed|pause|pervasive|post|pre|priority|put|quit|read|register|result|seek|self|set|signal|skip|tag|tell|then|timeout|to|unchecked|unqualified|wait|when|write)\b`, Keyword, nil}, - {`(true|false)\b`, KeywordConstant, nil}, - {Words(``, `\b`, `addressint`, `array`, `boolean`, `char`, `int`, `int1`, `int2`, `int4`, `int8`, `nat`, `nat1`, `nat2`, `nat4`, `nat8`, `pointer`, `real`, `real4`, `real8`, `string`, `enum`), KeywordType, nil}, - {`\d+i`, LiteralNumber, nil}, - {`\d+\.\d*([Ee][-+]\d+)?i`, LiteralNumber, nil}, - {`\.\d+([Ee][-+]\d+)?i`, LiteralNumber, nil}, - {`\d+[Ee][-+]\d+i`, LiteralNumber, nil}, - {`\d+(\.\d+[eE][+\-]?\d+|\.\d*|[eE][+\-]?\d+)`, LiteralNumberFloat, nil}, - {`\.\d+([eE][+\-]?\d+)?`, LiteralNumberFloat, nil}, - {`0[0-7]+`, LiteralNumberOct, nil}, - {`0[xX][0-9a-fA-F]+`, LiteralNumberHex, nil}, - {`(0|[1-9][0-9]*)`, LiteralNumberInteger, nil}, - {`(div|mod|rem|\*\*|=|<|>|>=|<=|not=|not|and|or|xor|=>|in|shl|shr|->|~|~=|~in|&|:=|\.\.|[\^+\-*/&#])`, Operator, nil}, - {`'(\\['"\\abfnrtv]|\\x[0-9a-fA-F]{2}|\\[0-7]{1,3}|\\u[0-9a-fA-F]{4}|\\U[0-9a-fA-F]{8}|[^\\])'`, LiteralStringChar, nil}, - {`"(\\\\|\\"|[^"])*"`, LiteralString, nil}, - {`[()\[\]{}.,:]`, Punctuation, nil}, - {`[^\W\d]\w*`, NameOther, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/t/turtle.go b/vendor/github.com/alecthomas/chroma/lexers/t/turtle.go deleted file mode 100644 index 71d3c47..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/t/turtle.go +++ /dev/null @@ -1,67 +0,0 @@ -package t - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Turtle lexer. -var Turtle = internal.Register(MustNewLexer( - &Config{ - Name: "Turtle", - Aliases: []string{"turtle"}, - Filenames: []string{"*.ttl"}, - MimeTypes: []string{"text/turtle", "application/x-turtle"}, - NotMultiline: true, - CaseInsensitive: true, - }, - Rules{ - "root": { - {`\s+`, TextWhitespace, nil}, - {"(@base|BASE)(\\s+)(<[^<>\"{}|^`\\\\\\x00-\\x20]*>)(\\s*)(\\.?)", ByGroups(Keyword, TextWhitespace, NameVariable, TextWhitespace, Punctuation), nil}, - {"(@prefix|PREFIX)(\\s+)((?:[a-z][\\w-]*)?\\:)(\\s+)(<[^<>\"{}|^`\\\\\\x00-\\x20]*>)(\\s*)(\\.?)", ByGroups(Keyword, TextWhitespace, NameNamespace, TextWhitespace, NameVariable, TextWhitespace, Punctuation), nil}, - {`(?<=\s)a(?=\s)`, KeywordType, nil}, - {"(<[^<>\"{}|^`\\\\\\x00-\\x20]*>)", NameVariable, nil}, - {`((?:[a-z][\w-]*)?\:)([a-z][\w-]*)`, ByGroups(NameNamespace, NameTag), nil}, - {`#[^\n]+`, Comment, nil}, - {`\b(true|false)\b`, Literal, nil}, - {`[+\-]?\d*\.\d+`, LiteralNumberFloat, nil}, - {`[+\-]?\d*(:?\.\d+)?E[+\-]?\d+`, LiteralNumberFloat, nil}, - {`[+\-]?\d+`, LiteralNumberInteger, nil}, - {`[\[\](){}.;,:^]`, Punctuation, nil}, - {`"""`, LiteralString, Push("triple-double-quoted-string")}, - {`"`, LiteralString, Push("single-double-quoted-string")}, - {`'''`, LiteralString, Push("triple-single-quoted-string")}, - {`'`, LiteralString, Push("single-single-quoted-string")}, - }, - "triple-double-quoted-string": { - {`"""`, LiteralString, Push("end-of-string")}, - {`[^\\]+`, LiteralString, nil}, - {`\\`, LiteralString, Push("string-escape")}, - }, - "single-double-quoted-string": { - {`"`, LiteralString, Push("end-of-string")}, - {`[^"\\\n]+`, LiteralString, nil}, - {`\\`, LiteralString, Push("string-escape")}, - }, - "triple-single-quoted-string": { - {`'''`, LiteralString, Push("end-of-string")}, - {`[^\\]+`, LiteralString, nil}, - {`\\`, LiteralString, Push("string-escape")}, - }, - "single-single-quoted-string": { - {`'`, LiteralString, Push("end-of-string")}, - {`[^'\\\n]+`, LiteralString, nil}, - {`\\`, LiteralString, Push("string-escape")}, - }, - "string-escape": { - {`.`, LiteralString, Pop(1)}, - }, - "end-of-string": { - {`(@)([a-z]+(:?-[a-z0-9]+)*)`, ByGroups(Operator, GenericEmph, GenericEmph), Pop(2)}, - {"(\\^\\^)(<[^<>\"{}|^`\\\\\\x00-\\x20]*>)", ByGroups(Operator, GenericEmph), Pop(2)}, - {`(\^\^)((?:[a-z][\w-]*)?\:)([a-z][\w-]*)`, ByGroups(Operator, GenericEmph, GenericEmph), Pop(2)}, - Default(Pop(2)), - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/t/twig.go b/vendor/github.com/alecthomas/chroma/lexers/t/twig.go deleted file mode 100644 index 56aa9b9..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/t/twig.go +++ /dev/null @@ -1,54 +0,0 @@ -package t - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Twig lexer. -var Twig = internal.Register(MustNewLexer( - &Config{ - Name: "Twig", - Aliases: []string{"twig"}, - Filenames: []string{}, - MimeTypes: []string{"application/x-twig"}, - DotAll: true, - }, - Rules{ - "root": { - {`[^{]+`, Other, nil}, - {`\{\{`, CommentPreproc, Push("var")}, - {`\{\#.*?\#\}`, Comment, nil}, - {`(\{%)(-?\s*)(raw)(\s*-?)(%\})(.*?)(\{%)(-?\s*)(endraw)(\s*-?)(%\})`, ByGroups(CommentPreproc, Text, Keyword, Text, CommentPreproc, Other, CommentPreproc, Text, Keyword, Text, CommentPreproc), nil}, - {`(\{%)(-?\s*)(verbatim)(\s*-?)(%\})(.*?)(\{%)(-?\s*)(endverbatim)(\s*-?)(%\})`, ByGroups(CommentPreproc, Text, Keyword, Text, CommentPreproc, Other, CommentPreproc, Text, Keyword, Text, CommentPreproc), nil}, - {`(\{%)(-?\s*)(filter)(\s+)((?:[\\_a-z]|[^\x00-\x7f])(?:[\\\w-]|[^\x00-\x7f])*)`, ByGroups(CommentPreproc, Text, Keyword, Text, NameFunction), Push("tag")}, - {`(\{%)(-?\s*)([a-zA-Z_]\w*)`, ByGroups(CommentPreproc, Text, Keyword), Push("tag")}, - {`\{`, Other, nil}, - }, - "varnames": { - {`(\|)(\s*)((?:[\\_a-z]|[^\x00-\x7f])(?:[\\\w-]|[^\x00-\x7f])*)`, ByGroups(Operator, Text, NameFunction), nil}, - {`(is)(\s+)(not)?(\s*)((?:[\\_a-z]|[^\x00-\x7f])(?:[\\\w-]|[^\x00-\x7f])*)`, ByGroups(Keyword, Text, Keyword, Text, NameFunction), nil}, - {`(?i)(true|false|none|null)\b`, KeywordPseudo, nil}, - {`(in|not|and|b-and|or|b-or|b-xor|isif|elseif|else|importconstant|defined|divisibleby|empty|even|iterable|odd|sameasmatches|starts\s+with|ends\s+with)\b`, Keyword, nil}, - {`(loop|block|parent)\b`, NameBuiltin, nil}, - {`(?:[\\_a-z]|[^\x00-\x7f])(?:[\\\w-]|[^\x00-\x7f])*`, NameVariable, nil}, - {`\.(?:[\\_a-z]|[^\x00-\x7f])(?:[\\\w-]|[^\x00-\x7f])*`, NameVariable, nil}, - {`\.[0-9]+`, LiteralNumber, nil}, - {`:?"(\\\\|\\"|[^"])*"`, LiteralStringDouble, nil}, - {`:?'(\\\\|\\'|[^'])*'`, LiteralStringSingle, nil}, - {`([{}()\[\]+\-*/,:~%]|\.\.|\?|:|\*\*|\/\/|!=|[><=]=?)`, Operator, nil}, - {`[0-9](\.[0-9]*)?(eE[+-][0-9])?[flFLdD]?|0[xX][0-9a-fA-F]+[Ll]?`, LiteralNumber, nil}, - }, - "var": { - {`\s+`, Text, nil}, - {`(-?)(\}\})`, ByGroups(Text, CommentPreproc), Pop(1)}, - Include("varnames"), - }, - "tag": { - {`\s+`, Text, nil}, - {`(-?)(%\})`, ByGroups(Text, CommentPreproc), Pop(1)}, - Include("varnames"), - {`.`, Punctuation, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/t/typescript.go b/vendor/github.com/alecthomas/chroma/lexers/t/typescript.go deleted file mode 100644 index 57d08bf..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/t/typescript.go +++ /dev/null @@ -1,73 +0,0 @@ -package t - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// TypeScript lexer. -var TypeScript = internal.Register(MustNewLexer( - &Config{ - Name: "TypeScript", - Aliases: []string{"ts", "typescript"}, - Filenames: []string{"*.ts", "*.tsx"}, - MimeTypes: []string{"text/x-typescript"}, - DotAll: true, - EnsureNL: true, - }, - Rules{ - "commentsandwhitespace": { - {`\s+`, Text, nil}, - {``, Comment, Pop(1)}, - {`-`, Comment, nil}, - }, - "tag": { - {`\s+`, Text, nil}, - {`[\w.:-]+\s*=`, NameAttribute, Push("attr")}, - {`/?\s*>`, NameTag, Pop(1)}, - }, - "attr": { - {`\s+`, Text, nil}, - {`".*?"`, LiteralString, Pop(1)}, - {`'.*?'`, LiteralString, Pop(1)}, - {`[^\s>]+`, LiteralString, Pop(1)}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/x/xorg.go b/vendor/github.com/alecthomas/chroma/lexers/x/xorg.go deleted file mode 100644 index 6e6cbec..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/x/xorg.go +++ /dev/null @@ -1,25 +0,0 @@ -package x - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -// Xorg lexer. -var Xorg = internal.Register(MustNewLexer( - &Config{ - Name: "Xorg", - Aliases: []string{"xorg.conf"}, - Filenames: []string{"xorg.conf"}, - MimeTypes: []string{}, - }, - Rules{ - "root": { - {`\s+`, TextWhitespace, nil}, - {`#.*$`, Comment, nil}, - {`((|Sub)Section)(\s+)("\w+")`, ByGroups(KeywordNamespace, LiteralStringEscape, TextWhitespace, LiteralStringEscape), nil}, - {`(End(|Sub)Section)`, KeywordNamespace, nil}, - {`(\w+)(\s+)([^\n#]+)`, ByGroups(NameKeyword, TextWhitespace, LiteralString), nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/lexers/y/yaml.go b/vendor/github.com/alecthomas/chroma/lexers/y/yaml.go deleted file mode 100644 index 82fed0c..0000000 --- a/vendor/github.com/alecthomas/chroma/lexers/y/yaml.go +++ /dev/null @@ -1,50 +0,0 @@ -package y - -import ( - . "github.com/alecthomas/chroma" // nolint - "github.com/alecthomas/chroma/lexers/internal" -) - -var YAML = internal.Register(MustNewLexer( - &Config{ - Name: "YAML", - Aliases: []string{"yaml"}, - Filenames: []string{"*.yaml", "*.yml"}, - MimeTypes: []string{"text/x-yaml"}, - }, - Rules{ - "root": { - Include("whitespace"), - {`^---`, Text, nil}, - {`[\n?]?\s*- `, Text, nil}, - {`#.*$`, Comment, nil}, - {`!![^\s]+`, CommentPreproc, nil}, - {`&[^\s]+`, CommentPreproc, nil}, - {`\*[^\s]+`, CommentPreproc, nil}, - {`^%include\s+[^\n\r]+`, CommentPreproc, nil}, - {`([>|+-]\s+)(\s+)((?:(?:.*?$)(?:[\n\r]*?)?)*)`, ByGroups(StringDoc, StringDoc, StringDoc), nil}, - Include("key"), - Include("value"), - {`[?:,\[\]]`, Punctuation, nil}, - {`.`, Text, nil}, - }, - "value": { - {Words(``, `\b`, "true", "false", "null"), KeywordConstant, nil}, - {`"(?:\\.|[^"])*"`, StringDouble, nil}, - {`'(?:\\.|[^'])*'`, StringSingle, nil}, - {`\d\d\d\d-\d\d-\d\d([T ]\d\d:\d\d:\d\d(\.\d+)?(Z|\s+[-+]\d+)?)?`, LiteralDate, nil}, - {`\b[+\-]?(0x[\da-f]+|0o[0-7]+|(\d+\.?\d*|\.?\d+)(e[\+\-]?\d+)?|\.inf|\.nan)\b`, Number, nil}, - {`\b[\w]+\b`, Text, nil}, - }, - "key": { - {`"[^"\n].*": `, Keyword, nil}, - {`(-)( )([^"\n{]*)(:)( )`, ByGroups(Punctuation, Whitespace, Keyword, Punctuation, Whitespace), nil}, - {`([^"\n{]*)(:)( )`, ByGroups(Keyword, Punctuation, Whitespace), nil}, - {`([^"\n{]*)(:)(\n)`, ByGroups(Keyword, Punctuation, Whitespace), nil}, - }, - "whitespace": { - {`\s+`, Whitespace, nil}, - {`\n+`, Whitespace, nil}, - }, - }, -)) diff --git a/vendor/github.com/alecthomas/chroma/mutators.go b/vendor/github.com/alecthomas/chroma/mutators.go deleted file mode 100644 index bd6d720..0000000 --- a/vendor/github.com/alecthomas/chroma/mutators.go +++ /dev/null @@ -1,131 +0,0 @@ -package chroma - -import ( - "fmt" - "strings" -) - -// A Mutator modifies the behaviour of the lexer. -type Mutator interface { - // Mutate the lexer state machine as it is processing. - Mutate(state *LexerState) error -} - -// A LexerMutator is an additional interface that a Mutator can implement -// to modify the lexer when it is compiled. -type LexerMutator interface { - // Rules are the lexer rules, state is the state key for the rule the mutator is associated with. - MutateLexer(rules CompiledRules, state string, rule int) error -} - -// A MutatorFunc is a Mutator that mutates the lexer state machine as it is processing. -type MutatorFunc func(state *LexerState) error - -func (m MutatorFunc) Mutate(state *LexerState) error { return m(state) } // nolint - -// Mutators applies a set of Mutators in order. -func Mutators(modifiers ...Mutator) MutatorFunc { - return func(state *LexerState) error { - for _, modifier := range modifiers { - if err := modifier.Mutate(state); err != nil { - return err - } - } - return nil - } -} - -type includeMutator struct { - state string -} - -// Include the given state. -func Include(state string) Rule { - return Rule{Mutator: &includeMutator{state}} -} - -func (i *includeMutator) Mutate(s *LexerState) error { - return fmt.Errorf("should never reach here Include(%q)", i.state) -} - -func (i *includeMutator) MutateLexer(rules CompiledRules, state string, rule int) error { - includedRules, ok := rules[i.state] - if !ok { - return fmt.Errorf("invalid include state %q", i.state) - } - rules[state] = append(rules[state][:rule], append(includedRules, rules[state][rule+1:]...)...) - return nil -} - -type combinedMutator struct { - states []string -} - -// Combined creates a new anonymous state from the given states, and pushes that state. -func Combined(states ...string) Mutator { - return &combinedMutator{states} -} - -func (c *combinedMutator) Mutate(s *LexerState) error { - return fmt.Errorf("should never reach here Combined(%v)", c.states) -} - -func (c *combinedMutator) MutateLexer(rules CompiledRules, state string, rule int) error { - name := "__combined_" + strings.Join(c.states, "__") - if _, ok := rules[name]; !ok { - combined := []*CompiledRule{} - for _, state := range c.states { - rules, ok := rules[state] - if !ok { - return fmt.Errorf("invalid combine state %q", state) - } - combined = append(combined, rules...) - } - rules[name] = combined - } - rules[state][rule].Mutator = Push(name) - return nil -} - -// Push states onto the stack. -func Push(states ...string) MutatorFunc { - return func(s *LexerState) error { - if len(states) == 0 { - s.Stack = append(s.Stack, s.State) - } else { - for _, state := range states { - if state == "#pop" { - s.Stack = s.Stack[:len(s.Stack)-1] - } else { - s.Stack = append(s.Stack, state) - } - } - } - return nil - } -} - -// Pop state from the stack when rule matches. -func Pop(n int) MutatorFunc { - return func(state *LexerState) error { - if len(state.Stack) == 0 { - return fmt.Errorf("nothing to pop") - } - state.Stack = state.Stack[:len(state.Stack)-n] - return nil - } -} - -// Default returns a Rule that applies a set of Mutators. -func Default(mutators ...Mutator) Rule { - return Rule{Mutator: Mutators(mutators...)} -} - -// Stringify returns the raw string for a set of tokens. -func Stringify(tokens ...Token) string { - out := []string{} - for _, t := range tokens { - out = append(out, t.Value) - } - return strings.Join(out, "") -} diff --git a/vendor/github.com/alecthomas/chroma/pygments-lexers.txt b/vendor/github.com/alecthomas/chroma/pygments-lexers.txt deleted file mode 100644 index 9c9ced2..0000000 --- a/vendor/github.com/alecthomas/chroma/pygments-lexers.txt +++ /dev/null @@ -1,325 +0,0 @@ -Generated with: - - g 'class.*RegexLexer' | pawk --strict -F: '"pygments.lexers.%s.%s" % (f[0].split(".")[0], f[2].split()[1].split("(")[0])' > lexers.txt - -perl6: - Requires a bunch of helpers that I do not have the time to convert. - -kotlin: - invalid unicode escape sequences - FIXED: Have to disable wide Unicode characters in unistring.py - -pygments.lexers.ambient.AmbientTalkLexer -pygments.lexers.ampl.AmplLexer -pygments.lexers.actionscript.ActionScriptLexer -pygments.lexers.actionscript.ActionScript3Lexer -pygments.lexers.actionscript.MxmlLexer -pygments.lexers.algebra.GAPLexer -pygments.lexers.algebra.MathematicaLexer -pygments.lexers.algebra.MuPADLexer -pygments.lexers.algebra.BCLexer -pygments.lexers.apl.APLLexer -pygments.lexers.bibtex.BibTeXLexer -pygments.lexers.bibtex.BSTLexer -pygments.lexers.basic.BlitzMaxLexer -pygments.lexers.basic.BlitzBasicLexer -pygments.lexers.basic.MonkeyLexer -pygments.lexers.basic.CbmBasicV2Lexer -pygments.lexers.basic.QBasicLexer -pygments.lexers.automation.AutohotkeyLexer -pygments.lexers.automation.AutoItLexer -pygments.lexers.archetype.AtomsLexer -pygments.lexers.c_like.ClayLexer -pygments.lexers.c_like.ValaLexer -pygments.lexers.asm.GasLexer -pygments.lexers.asm.ObjdumpLexer -pygments.lexers.asm.HsailLexer -pygments.lexers.asm.LlvmLexer -pygments.lexers.asm.NasmLexer -pygments.lexers.asm.TasmLexer -pygments.lexers.asm.Ca65Lexer -pygments.lexers.business.CobolLexer -pygments.lexers.business.ABAPLexer -pygments.lexers.business.OpenEdgeLexer -pygments.lexers.business.GoodDataCLLexer -pygments.lexers.business.MaqlLexer -pygments.lexers.capnproto.CapnProtoLexer -pygments.lexers.chapel.ChapelLexer -pygments.lexers.clean.CleanLexer -pygments.lexers.c_cpp.CFamilyLexer -pygments.lexers.console.VCTreeStatusLexer -pygments.lexers.console.PyPyLogLexer -pygments.lexers.csound.CsoundLexer -pygments.lexers.csound.CsoundDocumentLexer -pygments.lexers.csound.CsoundDocumentLexer -pygments.lexers.crystal.CrystalLexer -pygments.lexers.dalvik.SmaliLexer -pygments.lexers.css.CssLexer -pygments.lexers.css.SassLexer -pygments.lexers.css.ScssLexer -pygments.lexers.configs.IniLexer -pygments.lexers.configs.RegeditLexer -pygments.lexers.configs.PropertiesLexer -pygments.lexers.configs.KconfigLexer -pygments.lexers.configs.Cfengine3Lexer -pygments.lexers.configs.ApacheConfLexer -pygments.lexers.configs.SquidConfLexer -pygments.lexers.configs.NginxConfLexer -pygments.lexers.configs.LighttpdConfLexer -pygments.lexers.configs.DockerLexer -pygments.lexers.configs.TerraformLexer -pygments.lexers.configs.TermcapLexer -pygments.lexers.configs.TerminfoLexer -pygments.lexers.configs.PkgConfigLexer -pygments.lexers.configs.PacmanConfLexer -pygments.lexers.data.YamlLexer -pygments.lexers.data.JsonLexer -pygments.lexers.diff.DiffLexer -pygments.lexers.diff.DarcsPatchLexer -pygments.lexers.diff.WDiffLexer -pygments.lexers.dotnet.CSharpLexer -pygments.lexers.dotnet.NemerleLexer -pygments.lexers.dotnet.BooLexer -pygments.lexers.dotnet.VbNetLexer -pygments.lexers.dotnet.GenericAspxLexer -pygments.lexers.dotnet.FSharpLexer -pygments.lexers.dylan.DylanLexer -pygments.lexers.dylan.DylanLidLexer -pygments.lexers.ecl.ECLLexer -pygments.lexers.eiffel.EiffelLexer -pygments.lexers.dsls.ProtoBufLexer -pygments.lexers.dsls.ThriftLexer -pygments.lexers.dsls.BroLexer -pygments.lexers.dsls.PuppetLexer -pygments.lexers.dsls.RslLexer -pygments.lexers.dsls.MscgenLexer -pygments.lexers.dsls.VGLLexer -pygments.lexers.dsls.AlloyLexer -pygments.lexers.dsls.PanLexer -pygments.lexers.dsls.CrmshLexer -pygments.lexers.dsls.FlatlineLexer -pygments.lexers.dsls.SnowballLexer -pygments.lexers.elm.ElmLexer -pygments.lexers.erlang.ErlangLexer -pygments.lexers.erlang.ElixirLexer -pygments.lexers.ezhil.EzhilLexer -pygments.lexers.esoteric.BrainfuckLexer -pygments.lexers.esoteric.BefungeLexer -pygments.lexers.esoteric.CAmkESLexer -pygments.lexers.esoteric.CapDLLexer -pygments.lexers.esoteric.RedcodeLexer -pygments.lexers.esoteric.AheuiLexer -pygments.lexers.factor.FactorLexer -pygments.lexers.fantom.FantomLexer -pygments.lexers.felix.FelixLexer -pygments.lexers.forth.ForthLexer -pygments.lexers.fortran.FortranLexer -pygments.lexers.fortran.FortranFixedLexer -pygments.lexers.go.GoLexer -pygments.lexers.foxpro.FoxProLexer -pygments.lexers.graph.CypherLexer -pygments.lexers.grammar_notation.BnfLexer -pygments.lexers.grammar_notation.AbnfLexer -pygments.lexers.grammar_notation.JsgfLexer -pygments.lexers.graphics.GLShaderLexer -pygments.lexers.graphics.PostScriptLexer -pygments.lexers.graphics.AsymptoteLexer -pygments.lexers.graphics.GnuplotLexer -pygments.lexers.graphics.PovrayLexer -pygments.lexers.hexdump.HexdumpLexer -pygments.lexers.haskell.HaskellLexer -pygments.lexers.haskell.IdrisLexer -pygments.lexers.haskell.AgdaLexer -pygments.lexers.haskell.CryptolLexer -pygments.lexers.haskell.KokaLexer -pygments.lexers.haxe.HaxeLexer -pygments.lexers.haxe.HxmlLexer -pygments.lexers.hdl.VerilogLexer -pygments.lexers.hdl.SystemVerilogLexer -pygments.lexers.hdl.VhdlLexer -pygments.lexers.idl.IDLLexer -pygments.lexers.inferno.LimboLexer -pygments.lexers.igor.IgorLexer -pygments.lexers.html.HtmlLexer -pygments.lexers.html.DtdLexer -pygments.lexers.html.XmlLexer -pygments.lexers.html.HamlLexer -pygments.lexers.html.ScamlLexer -pygments.lexers.html.PugLexer -pygments.lexers.installers.NSISLexer -pygments.lexers.installers.RPMSpecLexer -pygments.lexers.installers.SourcesListLexer -pygments.lexers.installers.DebianControlLexer -pygments.lexers.iolang.IoLexer -pygments.lexers.julia.JuliaLexer -pygments.lexers.int_fiction.Inform6Lexer -pygments.lexers.int_fiction.Inform7Lexer -pygments.lexers.int_fiction.Tads3Lexer -pygments.lexers.make.BaseMakefileLexer -pygments.lexers.make.CMakeLexer -pygments.lexers.javascript.JavascriptLexer -pygments.lexers.javascript.KalLexer -pygments.lexers.javascript.LiveScriptLexer -pygments.lexers.javascript.DartLexer -pygments.lexers.javascript.TypeScriptLexer -pygments.lexers.javascript.LassoLexer -pygments.lexers.javascript.ObjectiveJLexer -pygments.lexers.javascript.CoffeeScriptLexer -pygments.lexers.javascript.MaskLexer -pygments.lexers.javascript.EarlGreyLexer -pygments.lexers.javascript.JuttleLexer -pygments.lexers.jvm.JavaLexer -pygments.lexers.jvm.ScalaLexer -pygments.lexers.jvm.GosuLexer -pygments.lexers.jvm.GroovyLexer -pygments.lexers.jvm.IokeLexer -pygments.lexers.jvm.ClojureLexer -pygments.lexers.jvm.TeaLangLexer -pygments.lexers.jvm.CeylonLexer -pygments.lexers.jvm.KotlinLexer -pygments.lexers.jvm.XtendLexer -pygments.lexers.jvm.PigLexer -pygments.lexers.jvm.GoloLexer -pygments.lexers.jvm.JasminLexer -pygments.lexers.markup.BBCodeLexer -pygments.lexers.markup.MoinWikiLexer -pygments.lexers.markup.RstLexer -pygments.lexers.markup.TexLexer -pygments.lexers.markup.GroffLexer -pygments.lexers.markup.MozPreprocHashLexer -pygments.lexers.markup.MarkdownLexer -pygments.lexers.ml.SMLLexer -pygments.lexers.ml.OcamlLexer -pygments.lexers.ml.OpaLexer -pygments.lexers.modeling.ModelicaLexer -pygments.lexers.modeling.BugsLexer -pygments.lexers.modeling.JagsLexer -pygments.lexers.modeling.StanLexer -pygments.lexers.matlab.MatlabLexer -pygments.lexers.matlab.OctaveLexer -pygments.lexers.matlab.ScilabLexer -pygments.lexers.monte.MonteLexer -pygments.lexers.lisp.SchemeLexer -pygments.lexers.lisp.CommonLispLexer -pygments.lexers.lisp.HyLexer -pygments.lexers.lisp.RacketLexer -pygments.lexers.lisp.NewLispLexer -pygments.lexers.lisp.EmacsLispLexer -pygments.lexers.lisp.ShenLexer -pygments.lexers.lisp.XtlangLexer -pygments.lexers.modula2.Modula2Lexer -pygments.lexers.ncl.NCLLexer -pygments.lexers.nim.NimLexer -pygments.lexers.nit.NitLexer -pygments.lexers.nix.NixLexer -pygments.lexers.oberon.ComponentPascalLexer -pygments.lexers.ooc.OocLexer -pygments.lexers.objective.SwiftLexer -pygments.lexers.parasail.ParaSailLexer -pygments.lexers.pawn.SourcePawnLexer -pygments.lexers.pawn.PawnLexer -pygments.lexers.pascal.AdaLexer -pygments.lexers.parsers.RagelLexer -pygments.lexers.parsers.RagelEmbeddedLexer -pygments.lexers.parsers.AntlrLexer -pygments.lexers.parsers.TreetopBaseLexer -pygments.lexers.parsers.EbnfLexer -pygments.lexers.php.ZephirLexer -pygments.lexers.php.PhpLexer -pygments.lexers.perl.PerlLexer -pygments.lexers.perl.Perl6Lexer -pygments.lexers.praat.PraatLexer -pygments.lexers.prolog.PrologLexer -pygments.lexers.prolog.LogtalkLexer -pygments.lexers.qvt.QVToLexer -pygments.lexers.rdf.SparqlLexer -pygments.lexers.rdf.TurtleLexer -pygments.lexers.python.PythonLexer -pygments.lexers.python.Python3Lexer -pygments.lexers.python.PythonTracebackLexer -pygments.lexers.python.Python3TracebackLexer -pygments.lexers.python.CythonLexer -pygments.lexers.python.DgLexer -pygments.lexers.rebol.RebolLexer -pygments.lexers.rebol.RedLexer -pygments.lexers.resource.ResourceLexer -pygments.lexers.rnc.RNCCompactLexer -pygments.lexers.roboconf.RoboconfGraphLexer -pygments.lexers.roboconf.RoboconfInstancesLexer -pygments.lexers.rust.RustLexer -pygments.lexers.ruby.RubyLexer -pygments.lexers.ruby.FancyLexer -pygments.lexers.sas.SASLexer -pygments.lexers.smalltalk.SmalltalkLexer -pygments.lexers.smalltalk.NewspeakLexer -pygments.lexers.smv.NuSMVLexer -pygments.lexers.shell.BashLexer -pygments.lexers.shell.BatchLexer -pygments.lexers.shell.TcshLexer -pygments.lexers.shell.PowerShellLexer -pygments.lexers.shell.FishShellLexer -pygments.lexers.snobol.SnobolLexer -pygments.lexers.scripting.LuaLexer -pygments.lexers.scripting.ChaiscriptLexer -pygments.lexers.scripting.LSLLexer -pygments.lexers.scripting.AppleScriptLexer -pygments.lexers.scripting.RexxLexer -pygments.lexers.scripting.MOOCodeLexer -pygments.lexers.scripting.HybrisLexer -pygments.lexers.scripting.EasytrieveLexer -pygments.lexers.scripting.JclLexer -pygments.lexers.supercollider.SuperColliderLexer -pygments.lexers.stata.StataLexer -pygments.lexers.tcl.TclLexer -pygments.lexers.sql.PostgresLexer -pygments.lexers.sql.PlPgsqlLexer -pygments.lexers.sql.PsqlRegexLexer -pygments.lexers.sql.SqlLexer -pygments.lexers.sql.TransactSqlLexer -pygments.lexers.sql.MySqlLexer -pygments.lexers.sql.RqlLexer -pygments.lexers.testing.GherkinLexer -pygments.lexers.testing.TAPLexer -pygments.lexers.textedit.AwkLexer -pygments.lexers.textedit.VimLexer -pygments.lexers.textfmts.IrcLogsLexer -pygments.lexers.textfmts.GettextLexer -pygments.lexers.textfmts.HttpLexer -pygments.lexers.textfmts.TodotxtLexer -pygments.lexers.trafficscript.RtsLexer -pygments.lexers.theorem.CoqLexer -pygments.lexers.theorem.IsabelleLexer -pygments.lexers.theorem.LeanLexer -pygments.lexers.templates.SmartyLexer -pygments.lexers.templates.VelocityLexer -pygments.lexers.templates.DjangoLexer -pygments.lexers.templates.MyghtyLexer -pygments.lexers.templates.MasonLexer -pygments.lexers.templates.MakoLexer -pygments.lexers.templates.CheetahLexer -pygments.lexers.templates.GenshiTextLexer -pygments.lexers.templates.GenshiMarkupLexer -pygments.lexers.templates.JspRootLexer -pygments.lexers.templates.EvoqueLexer -pygments.lexers.templates.ColdfusionLexer -pygments.lexers.templates.ColdfusionMarkupLexer -pygments.lexers.templates.TeaTemplateRootLexer -pygments.lexers.templates.HandlebarsLexer -pygments.lexers.templates.LiquidLexer -pygments.lexers.templates.TwigLexer -pygments.lexers.templates.Angular2Lexer -pygments.lexers.urbi.UrbiscriptLexer -pygments.lexers.typoscript.TypoScriptCssDataLexer -pygments.lexers.typoscript.TypoScriptHtmlDataLexer -pygments.lexers.typoscript.TypoScriptLexer -pygments.lexers.varnish.VCLLexer -pygments.lexers.verification.BoogieLexer -pygments.lexers.verification.SilverLexer -pygments.lexers.x10.X10Lexer -pygments.lexers.whiley.WhileyLexer -pygments.lexers.xorg.XorgLexer -pygments.lexers.webmisc.DuelLexer -pygments.lexers.webmisc.XQueryLexer -pygments.lexers.webmisc.QmlLexer -pygments.lexers.webmisc.CirruLexer -pygments.lexers.webmisc.SlimLexer diff --git a/vendor/github.com/alecthomas/chroma/regexp.go b/vendor/github.com/alecthomas/chroma/regexp.go deleted file mode 100644 index 7c2fb0b..0000000 --- a/vendor/github.com/alecthomas/chroma/regexp.go +++ /dev/null @@ -1,439 +0,0 @@ -package chroma - -import ( - "fmt" - "os" - "regexp" - "strings" - "sync" - "unicode/utf8" - - "github.com/dlclark/regexp2" -) - -// A Rule is the fundamental matching unit of the Regex lexer state machine. -type Rule struct { - Pattern string - Type Emitter - Mutator Mutator -} - -// An Emitter takes group matches and returns tokens. -type Emitter interface { - // Emit tokens for the given regex groups. - Emit(groups []string, lexer Lexer) Iterator -} - -// EmitterFunc is a function that is an Emitter. -type EmitterFunc func(groups []string, lexer Lexer) Iterator - -// Emit tokens for groups. -func (e EmitterFunc) Emit(groups []string, lexer Lexer) Iterator { return e(groups, lexer) } - -// ByGroups emits a token for each matching group in the rule's regex. -func ByGroups(emitters ...Emitter) Emitter { - return EmitterFunc(func(groups []string, lexer Lexer) Iterator { - iterators := make([]Iterator, 0, len(groups)-1) - if len(emitters) != len(groups)-1 { - iterators = append(iterators, Error.Emit(groups, lexer)) - // panic(errors.Errorf("number of groups %q does not match number of emitters %v", groups, emitters)) - } else { - for i, group := range groups[1:] { - iterators = append(iterators, emitters[i].Emit([]string{group}, lexer)) - } - } - return Concaterator(iterators...) - }) -} - -// UsingByGroup emits tokens for the matched groups in the regex using a -// "sublexer". Used when lexing code blocks where the name of a sublexer is -// contained within the block, for example on a Markdown text block or SQL -// language block. -// -// The sublexer will be retrieved using sublexerGetFunc (typically -// internal.Get), using the captured value from the matched sublexerNameGroup. -// -// If sublexerGetFunc returns a non-nil lexer for the captured sublexerNameGroup, -// then tokens for the matched codeGroup will be emitted using the retrieved -// lexer. Otherwise, if the sublexer is nil, then tokens will be emitted from -// the passed emitter. -// -// Example: -// -// var Markdown = internal.Register(MustNewLexer( -// &Config{ -// Name: "markdown", -// Aliases: []string{"md", "mkd"}, -// Filenames: []string{"*.md", "*.mkd", "*.markdown"}, -// MimeTypes: []string{"text/x-markdown"}, -// }, -// Rules{ -// "root": { -// {"^(```)(\\w+)(\\n)([\\w\\W]*?)(^```$)", -// UsingByGroup( -// internal.Get, -// 2, 4, -// String, String, String, Text, String, -// ), -// nil, -// }, -// }, -// }, -// )) -// -// See the lexers/m/markdown.go for the complete example. -// -// Note: panic's if the number emitters does not equal the number of matched -// groups in the regex. -func UsingByGroup(sublexerGetFunc func(string) Lexer, sublexerNameGroup, codeGroup int, emitters ...Emitter) Emitter { - return EmitterFunc(func(groups []string, lexer Lexer) Iterator { - // bounds check - if len(emitters) != len(groups)-1 { - panic("UsingByGroup expects number of emitters to be the same as len(groups)-1") - } - - // grab sublexer - sublexer := sublexerGetFunc(groups[sublexerNameGroup]) - - // build iterators - iterators := make([]Iterator, len(groups)-1) - for i, group := range groups[1:] { - if i == codeGroup-1 && sublexer != nil { - var err error - iterators[i], err = sublexer.Tokenise(nil, groups[codeGroup]) - if err != nil { - panic(err) - } - } else { - iterators[i] = emitters[i].Emit([]string{group}, lexer) - } - } - - return Concaterator(iterators...) - }) -} - -// Using returns an Emitter that uses a given Lexer for parsing and emitting. -func Using(lexer Lexer) Emitter { - return EmitterFunc(func(groups []string, _ Lexer) Iterator { - it, err := lexer.Tokenise(&TokeniseOptions{State: "root", Nested: true}, groups[0]) - if err != nil { - panic(err) - } - return it - }) -} - -// UsingSelf is like Using, but uses the current Lexer. -func UsingSelf(state string) Emitter { - return EmitterFunc(func(groups []string, lexer Lexer) Iterator { - it, err := lexer.Tokenise(&TokeniseOptions{State: state, Nested: true}, groups[0]) - if err != nil { - panic(err) - } - return it - }) -} - -// Words creates a regex that matches any of the given literal words. -func Words(prefix, suffix string, words ...string) string { - for i, word := range words { - words[i] = regexp.QuoteMeta(word) - } - return prefix + `(` + strings.Join(words, `|`) + `)` + suffix -} - -// Tokenise text using lexer, returning tokens as a slice. -func Tokenise(lexer Lexer, options *TokeniseOptions, text string) ([]Token, error) { - var out []Token - it, err := lexer.Tokenise(options, text) - if err != nil { - return nil, err - } - for t := it(); t != EOF; t = it() { - out = append(out, t) - } - return out, nil -} - -// Rules maps from state to a sequence of Rules. -type Rules map[string][]Rule - -// Clone returns a clone of the Rules. -func (r Rules) Clone() Rules { - out := map[string][]Rule{} - for key, rules := range r { - out[key] = make([]Rule, len(rules)) - copy(out[key], rules) - } - return out -} - -// MustNewLexer creates a new Lexer or panics. -func MustNewLexer(config *Config, rules Rules) *RegexLexer { - lexer, err := NewLexer(config, rules) - if err != nil { - panic(err) - } - return lexer -} - -// NewLexer creates a new regex-based Lexer. -// -// "rules" is a state machine transitition map. Each key is a state. Values are sets of rules -// that match input, optionally modify lexer state, and output tokens. -func NewLexer(config *Config, rules Rules) (*RegexLexer, error) { - if config == nil { - config = &Config{} - } - if _, ok := rules["root"]; !ok { - return nil, fmt.Errorf("no \"root\" state") - } - compiledRules := map[string][]*CompiledRule{} - for state, rules := range rules { - compiledRules[state] = nil - for _, rule := range rules { - flags := "" - if !config.NotMultiline { - flags += "m" - } - if config.CaseInsensitive { - flags += "i" - } - if config.DotAll { - flags += "s" - } - compiledRules[state] = append(compiledRules[state], &CompiledRule{Rule: rule, flags: flags}) - } - } - return &RegexLexer{ - config: config, - rules: compiledRules, - }, nil -} - -// Trace enables debug tracing. -func (r *RegexLexer) Trace(trace bool) *RegexLexer { - r.trace = trace - return r -} - -// A CompiledRule is a Rule with a pre-compiled regex. -// -// Note that regular expressions are lazily compiled on first use of the lexer. -type CompiledRule struct { - Rule - Regexp *regexp2.Regexp - flags string -} - -// CompiledRules is a map of rule name to sequence of compiled rules in that rule. -type CompiledRules map[string][]*CompiledRule - -// LexerState contains the state for a single lex. -type LexerState struct { - Lexer *RegexLexer - Text []rune - Pos int - Rules CompiledRules - Stack []string - State string - Rule int - // Group matches. - Groups []string - // Custum context for mutators. - MutatorContext map[interface{}]interface{} - iteratorStack []Iterator - options *TokeniseOptions -} - -// Set mutator context. -func (l *LexerState) Set(key interface{}, value interface{}) { - l.MutatorContext[key] = value -} - -// Get mutator context. -func (l *LexerState) Get(key interface{}) interface{} { - return l.MutatorContext[key] -} - -// Iterator returns the next Token from the lexer. -func (l *LexerState) Iterator() Token { // nolint: gocognit - for l.Pos < len(l.Text) && len(l.Stack) > 0 { - // Exhaust the iterator stack, if any. - for len(l.iteratorStack) > 0 { - n := len(l.iteratorStack) - 1 - t := l.iteratorStack[n]() - if t == EOF { - l.iteratorStack = l.iteratorStack[:n] - continue - } - return t - } - - l.State = l.Stack[len(l.Stack)-1] - if l.Lexer.trace { - fmt.Fprintf(os.Stderr, "%s: pos=%d, text=%q\n", l.State, l.Pos, string(l.Text[l.Pos:])) - } - selectedRule, ok := l.Rules[l.State] - if !ok { - panic("unknown state " + l.State) - } - ruleIndex, rule, groups := matchRules(l.Text, l.Pos, selectedRule) - // No match. - if groups == nil { - // From Pygments :\ - // - // If the RegexLexer encounters a newline that is flagged as an error token, the stack is - // emptied and the lexer continues scanning in the 'root' state. This can help producing - // error-tolerant highlighting for erroneous input, e.g. when a single-line string is not - // closed. - if l.Text[l.Pos] == '\n' && l.State != l.options.State { - l.Stack = []string{l.options.State} - continue - } - l.Pos++ - return Token{Error, string(l.Text[l.Pos-1 : l.Pos])} - } - l.Rule = ruleIndex - l.Groups = groups - l.Pos += utf8.RuneCountInString(groups[0]) - if rule.Mutator != nil { - if err := rule.Mutator.Mutate(l); err != nil { - panic(err) - } - } - if rule.Type != nil { - l.iteratorStack = append(l.iteratorStack, rule.Type.Emit(l.Groups, l.Lexer)) - } - } - // Exhaust the IteratorStack, if any. - // Duplicate code, but eh. - for len(l.iteratorStack) > 0 { - n := len(l.iteratorStack) - 1 - t := l.iteratorStack[n]() - if t == EOF { - l.iteratorStack = l.iteratorStack[:n] - continue - } - return t - } - - // If we get to here and we still have text, return it as an error. - if l.Pos != len(l.Text) && len(l.Stack) == 0 { - value := string(l.Text[l.Pos:]) - l.Pos = len(l.Text) - return Token{Type: Error, Value: value} - } - return EOF -} - -// RegexLexer is the default lexer implementation used in Chroma. -type RegexLexer struct { - config *Config - analyser func(text string) float32 - trace bool - - mu sync.Mutex - compiled bool - rules map[string][]*CompiledRule -} - -// SetAnalyser sets the analyser function used to perform content inspection. -func (r *RegexLexer) SetAnalyser(analyser func(text string) float32) *RegexLexer { - r.analyser = analyser - return r -} - -func (r *RegexLexer) AnalyseText(text string) float32 { // nolint - if r.analyser != nil { - return r.analyser(text) - } - return 0.0 -} - -func (r *RegexLexer) Config() *Config { // nolint - return r.config -} - -// Regex compilation is deferred until the lexer is used. This is to avoid significant init() time costs. -func (r *RegexLexer) maybeCompile() (err error) { - r.mu.Lock() - defer r.mu.Unlock() - if r.compiled { - return nil - } - for state, rules := range r.rules { - for i, rule := range rules { - if rule.Regexp == nil { - pattern := "(?:" + rule.Pattern + ")" - if rule.flags != "" { - pattern = "(?" + rule.flags + ")" + pattern - } - pattern = `\G` + pattern - rule.Regexp, err = regexp2.Compile(pattern, 0) - if err != nil { - return fmt.Errorf("failed to compile rule %s.%d: %s", state, i, err) - } - } - } - } -restart: - seen := map[LexerMutator]bool{} - for state := range r.rules { - for i := 0; i < len(r.rules[state]); i++ { - rule := r.rules[state][i] - if compile, ok := rule.Mutator.(LexerMutator); ok { - if seen[compile] { - return fmt.Errorf("saw mutator %T twice; this should not happen", compile) - } - seen[compile] = true - if err := compile.MutateLexer(r.rules, state, i); err != nil { - return err - } - // Process the rules again in case the mutator added/removed rules. - // - // This sounds bad, but shouldn't be significant in practice. - goto restart - } - } - } - r.compiled = true - return nil -} - -func (r *RegexLexer) Tokenise(options *TokeniseOptions, text string) (Iterator, error) { // nolint - if err := r.maybeCompile(); err != nil { - return nil, err - } - if options == nil { - options = defaultOptions - } - if !options.Nested && r.config.EnsureNL && !strings.HasSuffix(text, "\n") { - text += "\n" - } - state := &LexerState{ - options: options, - Lexer: r, - Text: []rune(text), - Stack: []string{options.State}, - Rules: r.rules, - MutatorContext: map[interface{}]interface{}{}, - } - return state.Iterator, nil -} - -func matchRules(text []rune, pos int, rules []*CompiledRule) (int, *CompiledRule, []string) { - for i, rule := range rules { - match, err := rule.Regexp.FindRunesMatchStartingAt(text, pos) - if match != nil && err == nil && match.Index == pos { - groups := []string{} - for _, g := range match.Groups() { - groups = append(groups, g.String()) - } - return i, rule, groups - } - } - return 0, &CompiledRule{}, nil -} diff --git a/vendor/github.com/alecthomas/chroma/remap.go b/vendor/github.com/alecthomas/chroma/remap.go deleted file mode 100644 index cfb5c38..0000000 --- a/vendor/github.com/alecthomas/chroma/remap.go +++ /dev/null @@ -1,80 +0,0 @@ -package chroma - -type remappingLexer struct { - lexer Lexer - mapper func(Token) []Token -} - -// RemappingLexer remaps a token to a set of, potentially empty, tokens. -func RemappingLexer(lexer Lexer, mapper func(Token) []Token) Lexer { - return &remappingLexer{lexer, mapper} -} - -func (r *remappingLexer) Config() *Config { - return r.lexer.Config() -} - -func (r *remappingLexer) Tokenise(options *TokeniseOptions, text string) (Iterator, error) { - it, err := r.lexer.Tokenise(options, text) - if err != nil { - return nil, err - } - var buffer []Token - return func() Token { - for { - if len(buffer) > 0 { - t := buffer[0] - buffer = buffer[1:] - return t - } - t := it() - if t == EOF { - return t - } - buffer = r.mapper(t) - } - }, nil -} - -// TypeMapping defines type maps for the TypeRemappingLexer. -type TypeMapping []struct { - From, To TokenType - Words []string -} - -// TypeRemappingLexer remaps types of tokens coming from a parent Lexer. -// -// eg. Map "defvaralias" tokens of type NameVariable to NameFunction: -// -// mapping := TypeMapping{ -// {NameVariable, NameFunction, []string{"defvaralias"}, -// } -// lexer = TypeRemappingLexer(lexer, mapping) -func TypeRemappingLexer(lexer Lexer, mapping TypeMapping) Lexer { - // Lookup table for fast remapping. - lut := map[TokenType]map[string]TokenType{} - for _, rt := range mapping { - km, ok := lut[rt.From] - if !ok { - km = map[string]TokenType{} - lut[rt.From] = km - } - if len(rt.Words) == 0 { - km[""] = rt.To - } else { - for _, k := range rt.Words { - km[k] = rt.To - } - } - } - return RemappingLexer(lexer, func(t Token) []Token { - if k, ok := lut[t.Type]; ok { - if tt, ok := k[t.Value]; ok { - t.Type = tt - } else if tt, ok := k[""]; ok { - t.Type = tt - } - } - return []Token{t} - }) -} diff --git a/vendor/github.com/alecthomas/chroma/style.go b/vendor/github.com/alecthomas/chroma/style.go deleted file mode 100644 index dce9e0a..0000000 --- a/vendor/github.com/alecthomas/chroma/style.go +++ /dev/null @@ -1,342 +0,0 @@ -package chroma - -import ( - "fmt" - "strings" -) - -// Trilean value for StyleEntry value inheritance. -type Trilean uint8 - -// Trilean states. -const ( - Pass Trilean = iota - Yes - No -) - -func (t Trilean) String() string { - switch t { - case Yes: - return "Yes" - case No: - return "No" - default: - return "Pass" - } -} - -// Prefix returns s with "no" as a prefix if Trilean is no. -func (t Trilean) Prefix(s string) string { - if t == Yes { - return s - } else if t == No { - return "no" + s - } - return "" -} - -// A StyleEntry in the Style map. -type StyleEntry struct { - // Hex colours. - Colour Colour - Background Colour - Border Colour - - Bold Trilean - Italic Trilean - Underline Trilean - NoInherit bool -} - -func (s StyleEntry) String() string { - out := []string{} - if s.Bold != Pass { - out = append(out, s.Bold.Prefix("bold")) - } - if s.Italic != Pass { - out = append(out, s.Italic.Prefix("italic")) - } - if s.Underline != Pass { - out = append(out, s.Underline.Prefix("underline")) - } - if s.NoInherit { - out = append(out, "noinherit") - } - if s.Colour.IsSet() { - out = append(out, s.Colour.String()) - } - if s.Background.IsSet() { - out = append(out, "bg:"+s.Background.String()) - } - if s.Border.IsSet() { - out = append(out, "border:"+s.Border.String()) - } - return strings.Join(out, " ") -} - -// Sub subtracts e from s where elements match. -func (s StyleEntry) Sub(e StyleEntry) StyleEntry { - out := StyleEntry{} - if e.Colour != s.Colour { - out.Colour = s.Colour - } - if e.Background != s.Background { - out.Background = s.Background - } - if e.Bold != s.Bold { - out.Bold = s.Bold - } - if e.Italic != s.Italic { - out.Italic = s.Italic - } - if e.Underline != s.Underline { - out.Underline = s.Underline - } - if e.Border != s.Border { - out.Border = s.Border - } - return out -} - -// Inherit styles from ancestors. -// -// Ancestors should be provided from oldest to newest. -func (s StyleEntry) Inherit(ancestors ...StyleEntry) StyleEntry { - out := s - for i := len(ancestors) - 1; i >= 0; i-- { - if out.NoInherit { - return out - } - ancestor := ancestors[i] - if !out.Colour.IsSet() { - out.Colour = ancestor.Colour - } - if !out.Background.IsSet() { - out.Background = ancestor.Background - } - if !out.Border.IsSet() { - out.Border = ancestor.Border - } - if out.Bold == Pass { - out.Bold = ancestor.Bold - } - if out.Italic == Pass { - out.Italic = ancestor.Italic - } - if out.Underline == Pass { - out.Underline = ancestor.Underline - } - } - return out -} - -func (s StyleEntry) IsZero() bool { - return s.Colour == 0 && s.Background == 0 && s.Border == 0 && s.Bold == Pass && s.Italic == Pass && - s.Underline == Pass && !s.NoInherit -} - -// A StyleBuilder is a mutable structure for building styles. -// -// Once built, a Style is immutable. -type StyleBuilder struct { - entries map[TokenType]string - name string - parent *Style -} - -func NewStyleBuilder(name string) *StyleBuilder { - return &StyleBuilder{name: name, entries: map[TokenType]string{}} -} - -func (s *StyleBuilder) AddAll(entries StyleEntries) *StyleBuilder { - for ttype, entry := range entries { - s.entries[ttype] = entry - } - return s -} - -func (s *StyleBuilder) Get(ttype TokenType) StyleEntry { - // This is less than ideal, but it's the price for having to check errors on each Add(). - entry, _ := ParseStyleEntry(s.entries[ttype]) - return entry.Inherit(s.parent.Get(ttype)) -} - -// Add an entry to the Style map. -// -// See http://pygments.org/docs/styles/#style-rules for details. -func (s *StyleBuilder) Add(ttype TokenType, entry string) *StyleBuilder { // nolint: gocyclo - s.entries[ttype] = entry - return s -} - -func (s *StyleBuilder) AddEntry(ttype TokenType, entry StyleEntry) *StyleBuilder { - s.entries[ttype] = entry.String() - return s -} - -func (s *StyleBuilder) Build() (*Style, error) { - style := &Style{ - Name: s.name, - entries: map[TokenType]StyleEntry{}, - parent: s.parent, - } - for ttype, descriptor := range s.entries { - entry, err := ParseStyleEntry(descriptor) - if err != nil { - return nil, fmt.Errorf("invalid entry for %s: %s", ttype, err) - } - style.entries[ttype] = entry - } - return style, nil -} - -// StyleEntries mapping TokenType to colour definition. -type StyleEntries map[TokenType]string - -// NewStyle creates a new style definition. -func NewStyle(name string, entries StyleEntries) (*Style, error) { - return NewStyleBuilder(name).AddAll(entries).Build() -} - -// MustNewStyle creates a new style or panics. -func MustNewStyle(name string, entries StyleEntries) *Style { - style, err := NewStyle(name, entries) - if err != nil { - panic(err) - } - return style -} - -// A Style definition. -// -// See http://pygments.org/docs/styles/ for details. Semantics are intended to be identical. -type Style struct { - Name string - entries map[TokenType]StyleEntry - parent *Style -} - -// Types that are styled. -func (s *Style) Types() []TokenType { - dedupe := map[TokenType]bool{} - for tt := range s.entries { - dedupe[tt] = true - } - if s.parent != nil { - for _, tt := range s.parent.Types() { - dedupe[tt] = true - } - } - out := make([]TokenType, 0, len(dedupe)) - for tt := range dedupe { - out = append(out, tt) - } - return out -} - -// Builder creates a mutable builder from this Style. -// -// The builder can then be safely modified. This is a cheap operation. -func (s *Style) Builder() *StyleBuilder { - return &StyleBuilder{ - name: s.Name, - entries: map[TokenType]string{}, - parent: s, - } -} - -// Has checks if an exact style entry match exists for a token type. -// -// This is distinct from Get() which will merge parent tokens. -func (s *Style) Has(ttype TokenType) bool { - return !s.get(ttype).IsZero() || s.synthesisable(ttype) -} - -// Get a style entry. Will try sub-category or category if an exact match is not found, and -// finally return the Background. -func (s *Style) Get(ttype TokenType) StyleEntry { - return s.get(ttype).Inherit( - s.get(Background), - s.get(Text), - s.get(ttype.Category()), - s.get(ttype.SubCategory())) -} - -func (s *Style) get(ttype TokenType) StyleEntry { - out := s.entries[ttype] - if out.IsZero() && s.synthesisable(ttype) { - out = s.synthesise(ttype) - } - if out.IsZero() && s.parent != nil { - return s.parent.get(ttype) - } - return out -} - -func (s *Style) synthesise(ttype TokenType) StyleEntry { - bg := s.get(Background) - text := StyleEntry{Colour: bg.Colour} - text.Colour = text.Colour.BrightenOrDarken(0.5) - - switch ttype { - // If we don't have a line highlight colour, make one that is 10% brighter/darker than the background. - case LineHighlight: - return StyleEntry{Background: bg.Background.BrightenOrDarken(0.1)} - - // If we don't have line numbers, use the text colour but 20% brighter/darker - case LineNumbers, LineNumbersTable: - return text - } - return StyleEntry{} -} - -func (s *Style) synthesisable(ttype TokenType) bool { - return ttype == LineHighlight || ttype == LineNumbers || ttype == LineNumbersTable -} - -// ParseStyleEntry parses a Pygments style entry. -func ParseStyleEntry(entry string) (StyleEntry, error) { // nolint: gocyclo - out := StyleEntry{} - parts := strings.Fields(entry) - for _, part := range parts { - switch { - case part == "italic": - out.Italic = Yes - case part == "noitalic": - out.Italic = No - case part == "bold": - out.Bold = Yes - case part == "nobold": - out.Bold = No - case part == "underline": - out.Underline = Yes - case part == "nounderline": - out.Underline = No - case part == "inherit": - out.NoInherit = false - case part == "noinherit": - out.NoInherit = true - case part == "bg:": - out.Background = 0 - case strings.HasPrefix(part, "bg:#"): - out.Background = ParseColour(part[3:]) - if !out.Background.IsSet() { - return StyleEntry{}, fmt.Errorf("invalid background colour %q", part) - } - case strings.HasPrefix(part, "border:#"): - out.Border = ParseColour(part[7:]) - if !out.Border.IsSet() { - return StyleEntry{}, fmt.Errorf("invalid border colour %q", part) - } - case strings.HasPrefix(part, "#"): - out.Colour = ParseColour(part) - if !out.Colour.IsSet() { - return StyleEntry{}, fmt.Errorf("invalid colour %q", part) - } - default: - return StyleEntry{}, fmt.Errorf("unknown style element %q", part) - } - } - return out, nil -} diff --git a/vendor/github.com/alecthomas/chroma/styles/abap.go b/vendor/github.com/alecthomas/chroma/styles/abap.go deleted file mode 100644 index b6d07fb..0000000 --- a/vendor/github.com/alecthomas/chroma/styles/abap.go +++ /dev/null @@ -1,18 +0,0 @@ -package styles - -import ( - "github.com/alecthomas/chroma" -) - -// Abap style. -var Abap = Register(chroma.MustNewStyle("abap", chroma.StyleEntries{ - chroma.Comment: "italic #888", - chroma.CommentSpecial: "#888", - chroma.Keyword: "#00f", - chroma.OperatorWord: "#00f", - chroma.Name: "#000", - chroma.LiteralNumber: "#3af", - chroma.LiteralString: "#5a2", - chroma.Error: "#F00", - chroma.Background: " bg:#ffffff", -})) diff --git a/vendor/github.com/alecthomas/chroma/styles/algol.go b/vendor/github.com/alecthomas/chroma/styles/algol.go deleted file mode 100644 index 1e8a7b4..0000000 --- a/vendor/github.com/alecthomas/chroma/styles/algol.go +++ /dev/null @@ -1,25 +0,0 @@ -package styles - -import ( - "github.com/alecthomas/chroma" -) - -// Algol style. -var Algol = Register(chroma.MustNewStyle("algol", chroma.StyleEntries{ - chroma.Comment: "italic #888", - chroma.CommentPreproc: "bold noitalic #888", - chroma.CommentSpecial: "bold noitalic #888", - chroma.Keyword: "underline bold", - chroma.KeywordDeclaration: "italic", - chroma.NameBuiltin: "bold italic", - chroma.NameBuiltinPseudo: "bold italic", - chroma.NameNamespace: "bold italic #666", - chroma.NameClass: "bold italic #666", - chroma.NameFunction: "bold italic #666", - chroma.NameVariable: "bold italic #666", - chroma.NameConstant: "bold italic #666", - chroma.OperatorWord: "bold", - chroma.LiteralString: "italic #666", - chroma.Error: "border:#FF0000", - chroma.Background: " bg:#ffffff", -})) diff --git a/vendor/github.com/alecthomas/chroma/styles/algol_nu.go b/vendor/github.com/alecthomas/chroma/styles/algol_nu.go deleted file mode 100644 index f8c6f17..0000000 --- a/vendor/github.com/alecthomas/chroma/styles/algol_nu.go +++ /dev/null @@ -1,25 +0,0 @@ -package styles - -import ( - "github.com/alecthomas/chroma" -) - -// AlgolNu style. -var AlgolNu = Register(chroma.MustNewStyle("algol_nu", chroma.StyleEntries{ - chroma.Comment: "italic #888", - chroma.CommentPreproc: "bold noitalic #888", - chroma.CommentSpecial: "bold noitalic #888", - chroma.Keyword: "bold", - chroma.KeywordDeclaration: "italic", - chroma.NameBuiltin: "bold italic", - chroma.NameBuiltinPseudo: "bold italic", - chroma.NameNamespace: "bold italic #666", - chroma.NameClass: "bold italic #666", - chroma.NameFunction: "bold italic #666", - chroma.NameVariable: "bold italic #666", - chroma.NameConstant: "bold italic #666", - chroma.OperatorWord: "bold", - chroma.LiteralString: "italic #666", - chroma.Error: "border:#FF0000", - chroma.Background: " bg:#ffffff", -})) diff --git a/vendor/github.com/alecthomas/chroma/styles/api.go b/vendor/github.com/alecthomas/chroma/styles/api.go deleted file mode 100644 index f3ce673..0000000 --- a/vendor/github.com/alecthomas/chroma/styles/api.go +++ /dev/null @@ -1,37 +0,0 @@ -package styles - -import ( - "sort" - - "github.com/alecthomas/chroma" -) - -// Registry of Styles. -var Registry = map[string]*chroma.Style{} - -// Fallback style. Reassign to change the default fallback style. -var Fallback = SwapOff - -// Register a chroma.Style. -func Register(style *chroma.Style) *chroma.Style { - Registry[style.Name] = style - return style -} - -// Names of all available styles. -func Names() []string { - out := []string{} - for name := range Registry { - out = append(out, name) - } - sort.Strings(out) - return out -} - -// Get named style, or Fallback. -func Get(name string) *chroma.Style { - if style, ok := Registry[name]; ok { - return style - } - return Fallback -} diff --git a/vendor/github.com/alecthomas/chroma/styles/arduino.go b/vendor/github.com/alecthomas/chroma/styles/arduino.go deleted file mode 100644 index 9e48fb4..0000000 --- a/vendor/github.com/alecthomas/chroma/styles/arduino.go +++ /dev/null @@ -1,25 +0,0 @@ -package styles - -import ( - "github.com/alecthomas/chroma" -) - -// Arduino style. -var Arduino = Register(chroma.MustNewStyle("arduino", chroma.StyleEntries{ - chroma.Error: "#a61717", - chroma.Comment: "#95a5a6", - chroma.CommentPreproc: "#728E00", - chroma.Keyword: "#728E00", - chroma.KeywordConstant: "#00979D", - chroma.KeywordPseudo: "#00979D", - chroma.KeywordReserved: "#00979D", - chroma.KeywordType: "#00979D", - chroma.Operator: "#728E00", - chroma.Name: "#434f54", - chroma.NameBuiltin: "#728E00", - chroma.NameFunction: "#D35400", - chroma.NameOther: "#728E00", - chroma.LiteralNumber: "#8A7B52", - chroma.LiteralString: "#7F8C8D", - chroma.Background: " bg:#ffffff", -})) diff --git a/vendor/github.com/alecthomas/chroma/styles/autumn.go b/vendor/github.com/alecthomas/chroma/styles/autumn.go deleted file mode 100644 index 3966372..0000000 --- a/vendor/github.com/alecthomas/chroma/styles/autumn.go +++ /dev/null @@ -1,43 +0,0 @@ -package styles - -import ( - "github.com/alecthomas/chroma" -) - -// Autumn style. -var Autumn = Register(chroma.MustNewStyle("autumn", chroma.StyleEntries{ - chroma.TextWhitespace: "#bbbbbb", - chroma.Comment: "italic #aaaaaa", - chroma.CommentPreproc: "noitalic #4c8317", - chroma.CommentSpecial: "italic #0000aa", - chroma.Keyword: "#0000aa", - chroma.KeywordType: "#00aaaa", - chroma.OperatorWord: "#0000aa", - chroma.NameBuiltin: "#00aaaa", - chroma.NameFunction: "#00aa00", - chroma.NameClass: "underline #00aa00", - chroma.NameNamespace: "underline #00aaaa", - chroma.NameVariable: "#aa0000", - chroma.NameConstant: "#aa0000", - chroma.NameEntity: "bold #800", - chroma.NameAttribute: "#1e90ff", - chroma.NameTag: "bold #1e90ff", - chroma.NameDecorator: "#888888", - chroma.LiteralString: "#aa5500", - chroma.LiteralStringSymbol: "#0000aa", - chroma.LiteralStringRegex: "#009999", - chroma.LiteralNumber: "#009999", - chroma.GenericHeading: "bold #000080", - chroma.GenericSubheading: "bold #800080", - chroma.GenericDeleted: "#aa0000", - chroma.GenericInserted: "#00aa00", - chroma.GenericError: "#aa0000", - chroma.GenericEmph: "italic", - chroma.GenericStrong: "bold", - chroma.GenericPrompt: "#555555", - chroma.GenericOutput: "#888888", - chroma.GenericTraceback: "#aa0000", - chroma.GenericUnderline: "underline", - chroma.Error: "#F00 bg:#FAA", - chroma.Background: " bg:#ffffff", -})) diff --git a/vendor/github.com/alecthomas/chroma/styles/borland.go b/vendor/github.com/alecthomas/chroma/styles/borland.go deleted file mode 100644 index 9c0fff6..0000000 --- a/vendor/github.com/alecthomas/chroma/styles/borland.go +++ /dev/null @@ -1,33 +0,0 @@ -package styles - -import ( - "github.com/alecthomas/chroma" -) - -// Borland style. -var Borland = Register(chroma.MustNewStyle("borland", chroma.StyleEntries{ - chroma.TextWhitespace: "#bbbbbb", - chroma.Comment: "italic #008800", - chroma.CommentPreproc: "noitalic #008080", - chroma.CommentSpecial: "noitalic bold", - chroma.LiteralString: "#0000FF", - chroma.LiteralStringChar: "#800080", - chroma.LiteralNumber: "#0000FF", - chroma.Keyword: "bold #000080", - chroma.OperatorWord: "bold", - chroma.NameTag: "bold #000080", - chroma.NameAttribute: "#FF0000", - chroma.GenericHeading: "#999999", - chroma.GenericSubheading: "#aaaaaa", - chroma.GenericDeleted: "bg:#ffdddd #000000", - chroma.GenericInserted: "bg:#ddffdd #000000", - chroma.GenericError: "#aa0000", - chroma.GenericEmph: "italic", - chroma.GenericStrong: "bold", - chroma.GenericPrompt: "#555555", - chroma.GenericOutput: "#888888", - chroma.GenericTraceback: "#aa0000", - chroma.GenericUnderline: "underline", - chroma.Error: "bg:#e3d2d2 #a61717", - chroma.Background: " bg:#ffffff", -})) diff --git a/vendor/github.com/alecthomas/chroma/styles/bw.go b/vendor/github.com/alecthomas/chroma/styles/bw.go deleted file mode 100644 index 3e800d5..0000000 --- a/vendor/github.com/alecthomas/chroma/styles/bw.go +++ /dev/null @@ -1,30 +0,0 @@ -package styles - -import ( - "github.com/alecthomas/chroma" -) - -// BlackWhite style. -var BlackWhite = Register(chroma.MustNewStyle("bw", chroma.StyleEntries{ - chroma.Comment: "italic", - chroma.CommentPreproc: "noitalic", - chroma.Keyword: "bold", - chroma.KeywordPseudo: "nobold", - chroma.KeywordType: "nobold", - chroma.OperatorWord: "bold", - chroma.NameClass: "bold", - chroma.NameNamespace: "bold", - chroma.NameException: "bold", - chroma.NameEntity: "bold", - chroma.NameTag: "bold", - chroma.LiteralString: "italic", - chroma.LiteralStringInterpol: "bold", - chroma.LiteralStringEscape: "bold", - chroma.GenericHeading: "bold", - chroma.GenericSubheading: "bold", - chroma.GenericEmph: "italic", - chroma.GenericStrong: "bold", - chroma.GenericPrompt: "bold", - chroma.Error: "border:#FF0000", - chroma.Background: " bg:#ffffff", -})) diff --git a/vendor/github.com/alecthomas/chroma/styles/colorful.go b/vendor/github.com/alecthomas/chroma/styles/colorful.go deleted file mode 100644 index dc77c5b..0000000 --- a/vendor/github.com/alecthomas/chroma/styles/colorful.go +++ /dev/null @@ -1,59 +0,0 @@ -package styles - -import ( - "github.com/alecthomas/chroma" -) - -// Colorful style. -var Colorful = Register(chroma.MustNewStyle("colorful", chroma.StyleEntries{ - chroma.TextWhitespace: "#bbbbbb", - chroma.Comment: "#888", - chroma.CommentPreproc: "#579", - chroma.CommentSpecial: "bold #cc0000", - chroma.Keyword: "bold #080", - chroma.KeywordPseudo: "#038", - chroma.KeywordType: "#339", - chroma.Operator: "#333", - chroma.OperatorWord: "bold #000", - chroma.NameBuiltin: "#007020", - chroma.NameFunction: "bold #06B", - chroma.NameClass: "bold #B06", - chroma.NameNamespace: "bold #0e84b5", - chroma.NameException: "bold #F00", - chroma.NameVariable: "#963", - chroma.NameVariableInstance: "#33B", - chroma.NameVariableClass: "#369", - chroma.NameVariableGlobal: "bold #d70", - chroma.NameConstant: "bold #036", - chroma.NameLabel: "bold #970", - chroma.NameEntity: "bold #800", - chroma.NameAttribute: "#00C", - chroma.NameTag: "#070", - chroma.NameDecorator: "bold #555", - chroma.LiteralString: "bg:#fff0f0", - chroma.LiteralStringChar: "#04D bg:", - chroma.LiteralStringDoc: "#D42 bg:", - chroma.LiteralStringInterpol: "bg:#eee", - chroma.LiteralStringEscape: "bold #666", - chroma.LiteralStringRegex: "bg:#fff0ff #000", - chroma.LiteralStringSymbol: "#A60 bg:", - chroma.LiteralStringOther: "#D20", - chroma.LiteralNumber: "bold #60E", - chroma.LiteralNumberInteger: "bold #00D", - chroma.LiteralNumberFloat: "bold #60E", - chroma.LiteralNumberHex: "bold #058", - chroma.LiteralNumberOct: "bold #40E", - chroma.GenericHeading: "bold #000080", - chroma.GenericSubheading: "bold #800080", - chroma.GenericDeleted: "#A00000", - chroma.GenericInserted: "#00A000", - chroma.GenericError: "#FF0000", - chroma.GenericEmph: "italic", - chroma.GenericStrong: "bold", - chroma.GenericPrompt: "bold #c65d09", - chroma.GenericOutput: "#888", - chroma.GenericTraceback: "#04D", - chroma.GenericUnderline: "underline", - chroma.Error: "#F00 bg:#FAA", - chroma.Background: " bg:#ffffff", -})) diff --git a/vendor/github.com/alecthomas/chroma/styles/dracula.go b/vendor/github.com/alecthomas/chroma/styles/dracula.go deleted file mode 100644 index 46e9d5b..0000000 --- a/vendor/github.com/alecthomas/chroma/styles/dracula.go +++ /dev/null @@ -1,81 +0,0 @@ -package styles - -import ( - "github.com/alecthomas/chroma" -) - -// Dracula Style -var Dracula = Register(chroma.MustNewStyle("dracula", chroma.StyleEntries{ - chroma.Comment: "#6272a4", - chroma.CommentHashbang: "#6272a4", - chroma.CommentMultiline: "#6272a4", - chroma.CommentPreproc: "#ff79c6", - chroma.CommentSingle: "#6272a4", - chroma.CommentSpecial: "#6272a4", - chroma.Generic: "#f8f8f2", - chroma.GenericDeleted: "#8b080b", - chroma.GenericEmph: "#f8f8f2 underline", - chroma.GenericError: "#f8f8f2", - chroma.GenericHeading: "#f8f8f2 bold", - chroma.GenericInserted: "#f8f8f2 bold", - chroma.GenericOutput: "#44475a", - chroma.GenericPrompt: "#f8f8f2", - chroma.GenericStrong: "#f8f8f2", - chroma.GenericSubheading: "#f8f8f2 bold", - chroma.GenericTraceback: "#f8f8f2", - chroma.GenericUnderline: "underline", - chroma.Error: "#f8f8f2", - chroma.Keyword: "#ff79c6", - chroma.KeywordConstant: "#ff79c6", - chroma.KeywordDeclaration: "#8be9fd italic", - chroma.KeywordNamespace: "#ff79c6", - chroma.KeywordPseudo: "#ff79c6", - chroma.KeywordReserved: "#ff79c6", - chroma.KeywordType: "#8be9fd", - chroma.Literal: "#f8f8f2", - chroma.LiteralDate: "#f8f8f2", - chroma.Name: "#f8f8f2", - chroma.NameAttribute: "#50fa7b", - chroma.NameBuiltin: "#8be9fd italic", - chroma.NameBuiltinPseudo: "#f8f8f2", - chroma.NameClass: "#50fa7b", - chroma.NameConstant: "#f8f8f2", - chroma.NameDecorator: "#f8f8f2", - chroma.NameEntity: "#f8f8f2", - chroma.NameException: "#f8f8f2", - chroma.NameFunction: "#50fa7b", - chroma.NameLabel: "#8be9fd italic", - chroma.NameNamespace: "#f8f8f2", - chroma.NameOther: "#f8f8f2", - chroma.NameTag: "#ff79c6", - chroma.NameVariable: "#8be9fd italic", - chroma.NameVariableClass: "#8be9fd italic", - chroma.NameVariableGlobal: "#8be9fd italic", - chroma.NameVariableInstance: "#8be9fd italic", - chroma.LiteralNumber: "#bd93f9", - chroma.LiteralNumberBin: "#bd93f9", - chroma.LiteralNumberFloat: "#bd93f9", - chroma.LiteralNumberHex: "#bd93f9", - chroma.LiteralNumberInteger: "#bd93f9", - chroma.LiteralNumberIntegerLong: "#bd93f9", - chroma.LiteralNumberOct: "#bd93f9", - chroma.Operator: "#ff79c6", - chroma.OperatorWord: "#ff79c6", - chroma.Other: "#f8f8f2", - chroma.Punctuation: "#f8f8f2", - chroma.LiteralString: "#f1fa8c", - chroma.LiteralStringBacktick: "#f1fa8c", - chroma.LiteralStringChar: "#f1fa8c", - chroma.LiteralStringDoc: "#f1fa8c", - chroma.LiteralStringDouble: "#f1fa8c", - chroma.LiteralStringEscape: "#f1fa8c", - chroma.LiteralStringHeredoc: "#f1fa8c", - chroma.LiteralStringInterpol: "#f1fa8c", - chroma.LiteralStringOther: "#f1fa8c", - chroma.LiteralStringRegex: "#f1fa8c", - chroma.LiteralStringSingle: "#f1fa8c", - chroma.LiteralStringSymbol: "#f1fa8c", - chroma.Text: "#f8f8f2", - chroma.TextWhitespace: "#f8f8f2", - chroma.Background: " bg:#282a36", -})) diff --git a/vendor/github.com/alecthomas/chroma/styles/emacs.go b/vendor/github.com/alecthomas/chroma/styles/emacs.go deleted file mode 100644 index 4835abd..0000000 --- a/vendor/github.com/alecthomas/chroma/styles/emacs.go +++ /dev/null @@ -1,51 +0,0 @@ -package styles - -import ( - "github.com/alecthomas/chroma" -) - -// Emacs style. -var Emacs = Register(chroma.MustNewStyle("emacs", chroma.StyleEntries{ - chroma.TextWhitespace: "#bbbbbb", - chroma.Comment: "italic #008800", - chroma.CommentPreproc: "noitalic", - chroma.CommentSpecial: "noitalic bold", - chroma.Keyword: "bold #AA22FF", - chroma.KeywordPseudo: "nobold", - chroma.KeywordType: "bold #00BB00", - chroma.Operator: "#666666", - chroma.OperatorWord: "bold #AA22FF", - chroma.NameBuiltin: "#AA22FF", - chroma.NameFunction: "#00A000", - chroma.NameClass: "#0000FF", - chroma.NameNamespace: "bold #0000FF", - chroma.NameException: "bold #D2413A", - chroma.NameVariable: "#B8860B", - chroma.NameConstant: "#880000", - chroma.NameLabel: "#A0A000", - chroma.NameEntity: "bold #999999", - chroma.NameAttribute: "#BB4444", - chroma.NameTag: "bold #008000", - chroma.NameDecorator: "#AA22FF", - chroma.LiteralString: "#BB4444", - chroma.LiteralStringDoc: "italic", - chroma.LiteralStringInterpol: "bold #BB6688", - chroma.LiteralStringEscape: "bold #BB6622", - chroma.LiteralStringRegex: "#BB6688", - chroma.LiteralStringSymbol: "#B8860B", - chroma.LiteralStringOther: "#008000", - chroma.LiteralNumber: "#666666", - chroma.GenericHeading: "bold #000080", - chroma.GenericSubheading: "bold #800080", - chroma.GenericDeleted: "#A00000", - chroma.GenericInserted: "#00A000", - chroma.GenericError: "#FF0000", - chroma.GenericEmph: "italic", - chroma.GenericStrong: "bold", - chroma.GenericPrompt: "bold #000080", - chroma.GenericOutput: "#888", - chroma.GenericTraceback: "#04D", - chroma.GenericUnderline: "underline", - chroma.Error: "border:#FF0000", - chroma.Background: " bg:#f8f8f8", -})) diff --git a/vendor/github.com/alecthomas/chroma/styles/friendly.go b/vendor/github.com/alecthomas/chroma/styles/friendly.go deleted file mode 100644 index ad02341..0000000 --- a/vendor/github.com/alecthomas/chroma/styles/friendly.go +++ /dev/null @@ -1,51 +0,0 @@ -package styles - -import ( - "github.com/alecthomas/chroma" -) - -// Friendly style. -var Friendly = Register(chroma.MustNewStyle("friendly", chroma.StyleEntries{ - chroma.TextWhitespace: "#bbbbbb", - chroma.Comment: "italic #60a0b0", - chroma.CommentPreproc: "noitalic #007020", - chroma.CommentSpecial: "noitalic bg:#fff0f0", - chroma.Keyword: "bold #007020", - chroma.KeywordPseudo: "nobold", - chroma.KeywordType: "nobold #902000", - chroma.Operator: "#666666", - chroma.OperatorWord: "bold #007020", - chroma.NameBuiltin: "#007020", - chroma.NameFunction: "#06287e", - chroma.NameClass: "bold #0e84b5", - chroma.NameNamespace: "bold #0e84b5", - chroma.NameException: "#007020", - chroma.NameVariable: "#bb60d5", - chroma.NameConstant: "#60add5", - chroma.NameLabel: "bold #002070", - chroma.NameEntity: "bold #d55537", - chroma.NameAttribute: "#4070a0", - chroma.NameTag: "bold #062873", - chroma.NameDecorator: "bold #555555", - chroma.LiteralString: "#4070a0", - chroma.LiteralStringDoc: "italic", - chroma.LiteralStringInterpol: "italic #70a0d0", - chroma.LiteralStringEscape: "bold #4070a0", - chroma.LiteralStringRegex: "#235388", - chroma.LiteralStringSymbol: "#517918", - chroma.LiteralStringOther: "#c65d09", - chroma.LiteralNumber: "#40a070", - chroma.GenericHeading: "bold #000080", - chroma.GenericSubheading: "bold #800080", - chroma.GenericDeleted: "#A00000", - chroma.GenericInserted: "#00A000", - chroma.GenericError: "#FF0000", - chroma.GenericEmph: "italic", - chroma.GenericStrong: "bold", - chroma.GenericPrompt: "bold #c65d09", - chroma.GenericOutput: "#888", - chroma.GenericTraceback: "#04D", - chroma.GenericUnderline: "underline", - chroma.Error: "border:#FF0000", - chroma.Background: " bg:#f0f0f0", -})) diff --git a/vendor/github.com/alecthomas/chroma/styles/fruity.go b/vendor/github.com/alecthomas/chroma/styles/fruity.go deleted file mode 100644 index c2577fa..0000000 --- a/vendor/github.com/alecthomas/chroma/styles/fruity.go +++ /dev/null @@ -1,26 +0,0 @@ -package styles - -import ( - "github.com/alecthomas/chroma" -) - -// Fruity style. -var Fruity = Register(chroma.MustNewStyle("fruity", chroma.StyleEntries{ - chroma.TextWhitespace: "#888888", - chroma.Background: "#ffffff bg:#111111", - chroma.GenericOutput: "#444444 bg:#222222", - chroma.Keyword: "#fb660a bold", - chroma.KeywordPseudo: "nobold", - chroma.LiteralNumber: "#0086f7 bold", - chroma.NameTag: "#fb660a bold", - chroma.NameVariable: "#fb660a", - chroma.Comment: "#008800 bg:#0f140f italic", - chroma.NameAttribute: "#ff0086 bold", - chroma.LiteralString: "#0086d2", - chroma.NameFunction: "#ff0086 bold", - chroma.GenericHeading: "#ffffff bold", - chroma.KeywordType: "#cdcaa9 bold", - chroma.GenericSubheading: "#ffffff bold", - chroma.NameConstant: "#0086d2", - chroma.CommentPreproc: "#ff0007 bold", -})) diff --git a/vendor/github.com/alecthomas/chroma/styles/github.go b/vendor/github.com/alecthomas/chroma/styles/github.go deleted file mode 100644 index 7ef2481..0000000 --- a/vendor/github.com/alecthomas/chroma/styles/github.go +++ /dev/null @@ -1,51 +0,0 @@ -package styles - -import ( - "github.com/alecthomas/chroma" -) - -// GitHub style. -var GitHub = Register(chroma.MustNewStyle("github", chroma.StyleEntries{ - chroma.CommentMultiline: "italic #999988", - chroma.CommentPreproc: "bold #999999", - chroma.CommentSingle: "italic #999988", - chroma.CommentSpecial: "bold italic #999999", - chroma.Comment: "italic #999988", - chroma.Error: "bg:#e3d2d2 #a61717", - chroma.GenericDeleted: "bg:#ffdddd #000000", - chroma.GenericEmph: "italic #000000", - chroma.GenericError: "#aa0000", - chroma.GenericHeading: "#999999", - chroma.GenericInserted: "bg:#ddffdd #000000", - chroma.GenericOutput: "#888888", - chroma.GenericPrompt: "#555555", - chroma.GenericStrong: "bold", - chroma.GenericSubheading: "#aaaaaa", - chroma.GenericTraceback: "#aa0000", - chroma.GenericUnderline: "underline", - chroma.KeywordType: "bold #445588", - chroma.Keyword: "bold #000000", - chroma.LiteralNumber: "#009999", - chroma.LiteralStringRegex: "#009926", - chroma.LiteralStringSymbol: "#990073", - chroma.LiteralString: "#d14", - chroma.NameAttribute: "#008080", - chroma.NameBuiltinPseudo: "#999999", - chroma.NameBuiltin: "#0086B3", - chroma.NameClass: "bold #445588", - chroma.NameConstant: "#008080", - chroma.NameDecorator: "bold #3c5d5d", - chroma.NameEntity: "#800080", - chroma.NameException: "bold #990000", - chroma.NameFunction: "bold #990000", - chroma.NameLabel: "bold #990000", - chroma.NameNamespace: "#555555", - chroma.NameTag: "#000080", - chroma.NameVariableClass: "#008080", - chroma.NameVariableGlobal: "#008080", - chroma.NameVariableInstance: "#008080", - chroma.NameVariable: "#008080", - chroma.Operator: "bold #000000", - chroma.TextWhitespace: "#bbbbbb", - chroma.Background: " bg:#ffffff", -})) diff --git a/vendor/github.com/alecthomas/chroma/styles/igor.go b/vendor/github.com/alecthomas/chroma/styles/igor.go deleted file mode 100644 index 6a6d4cd..0000000 --- a/vendor/github.com/alecthomas/chroma/styles/igor.go +++ /dev/null @@ -1,16 +0,0 @@ -package styles - -import ( - "github.com/alecthomas/chroma" -) - -// Igor style. -var Igor = Register(chroma.MustNewStyle("igor", chroma.StyleEntries{ - chroma.Comment: "italic #FF0000", - chroma.Keyword: "#0000FF", - chroma.NameFunction: "#C34E00", - chroma.NameDecorator: "#CC00A3", - chroma.NameClass: "#007575", - chroma.LiteralString: "#009C00", - chroma.Background: " bg:#ffffff", -})) diff --git a/vendor/github.com/alecthomas/chroma/styles/lovelace.go b/vendor/github.com/alecthomas/chroma/styles/lovelace.go deleted file mode 100644 index 074cc08..0000000 --- a/vendor/github.com/alecthomas/chroma/styles/lovelace.go +++ /dev/null @@ -1,60 +0,0 @@ -package styles - -import ( - "github.com/alecthomas/chroma" -) - -// Lovelace style. -var Lovelace = Register(chroma.MustNewStyle("lovelace", chroma.StyleEntries{ - chroma.TextWhitespace: "#a89028", - chroma.Comment: "italic #888888", - chroma.CommentHashbang: "#287088", - chroma.CommentMultiline: "#888888", - chroma.CommentPreproc: "noitalic #289870", - chroma.Keyword: "#2838b0", - chroma.KeywordConstant: "italic #444444", - chroma.KeywordDeclaration: "italic", - chroma.KeywordType: "italic", - chroma.Operator: "#666666", - chroma.OperatorWord: "#a848a8", - chroma.Punctuation: "#888888", - chroma.NameAttribute: "#388038", - chroma.NameBuiltin: "#388038", - chroma.NameBuiltinPseudo: "italic", - chroma.NameClass: "#287088", - chroma.NameConstant: "#b85820", - chroma.NameDecorator: "#287088", - chroma.NameEntity: "#709030", - chroma.NameException: "#908828", - chroma.NameFunction: "#785840", - chroma.NameFunctionMagic: "#b85820", - chroma.NameLabel: "#289870", - chroma.NameNamespace: "#289870", - chroma.NameTag: "#2838b0", - chroma.NameVariable: "#b04040", - chroma.NameVariableGlobal: "#908828", - chroma.NameVariableMagic: "#b85820", - chroma.LiteralString: "#b83838", - chroma.LiteralStringAffix: "#444444", - chroma.LiteralStringChar: "#a848a8", - chroma.LiteralStringDelimiter: "#b85820", - chroma.LiteralStringDoc: "italic #b85820", - chroma.LiteralStringEscape: "#709030", - chroma.LiteralStringInterpol: "underline", - chroma.LiteralStringOther: "#a848a8", - chroma.LiteralStringRegex: "#a848a8", - chroma.LiteralNumber: "#444444", - chroma.GenericDeleted: "#c02828", - chroma.GenericEmph: "italic", - chroma.GenericError: "#c02828", - chroma.GenericHeading: "#666666", - chroma.GenericSubheading: "#444444", - chroma.GenericInserted: "#388038", - chroma.GenericOutput: "#666666", - chroma.GenericPrompt: "#444444", - chroma.GenericStrong: "bold", - chroma.GenericTraceback: "#2838b0", - chroma.GenericUnderline: "underline", - chroma.Error: "bg:#a848a8", - chroma.Background: " bg:#ffffff", -})) diff --git a/vendor/github.com/alecthomas/chroma/styles/manni.go b/vendor/github.com/alecthomas/chroma/styles/manni.go deleted file mode 100644 index 9942e7d..0000000 --- a/vendor/github.com/alecthomas/chroma/styles/manni.go +++ /dev/null @@ -1,51 +0,0 @@ -package styles - -import ( - "github.com/alecthomas/chroma" -) - -// Manni style. -var Manni = Register(chroma.MustNewStyle("manni", chroma.StyleEntries{ - chroma.TextWhitespace: "#bbbbbb", - chroma.Comment: "italic #0099FF", - chroma.CommentPreproc: "noitalic #009999", - chroma.CommentSpecial: "bold", - chroma.Keyword: "bold #006699", - chroma.KeywordPseudo: "nobold", - chroma.KeywordType: "#007788", - chroma.Operator: "#555555", - chroma.OperatorWord: "bold #000000", - chroma.NameBuiltin: "#336666", - chroma.NameFunction: "#CC00FF", - chroma.NameClass: "bold #00AA88", - chroma.NameNamespace: "bold #00CCFF", - chroma.NameException: "bold #CC0000", - chroma.NameVariable: "#003333", - chroma.NameConstant: "#336600", - chroma.NameLabel: "#9999FF", - chroma.NameEntity: "bold #999999", - chroma.NameAttribute: "#330099", - chroma.NameTag: "bold #330099", - chroma.NameDecorator: "#9999FF", - chroma.LiteralString: "#CC3300", - chroma.LiteralStringDoc: "italic", - chroma.LiteralStringInterpol: "#AA0000", - chroma.LiteralStringEscape: "bold #CC3300", - chroma.LiteralStringRegex: "#33AAAA", - chroma.LiteralStringSymbol: "#FFCC33", - chroma.LiteralStringOther: "#CC3300", - chroma.LiteralNumber: "#FF6600", - chroma.GenericHeading: "bold #003300", - chroma.GenericSubheading: "bold #003300", - chroma.GenericDeleted: "border:#CC0000 bg:#FFCCCC", - chroma.GenericInserted: "border:#00CC00 bg:#CCFFCC", - chroma.GenericError: "#FF0000", - chroma.GenericEmph: "italic", - chroma.GenericStrong: "bold", - chroma.GenericPrompt: "bold #000099", - chroma.GenericOutput: "#AAAAAA", - chroma.GenericTraceback: "#99CC66", - chroma.GenericUnderline: "underline", - chroma.Error: "bg:#FFAAAA #AA0000", - chroma.Background: " bg:#f0f3f3", -})) diff --git a/vendor/github.com/alecthomas/chroma/styles/monokai.go b/vendor/github.com/alecthomas/chroma/styles/monokai.go deleted file mode 100644 index 2586795..0000000 --- a/vendor/github.com/alecthomas/chroma/styles/monokai.go +++ /dev/null @@ -1,36 +0,0 @@ -package styles - -import ( - "github.com/alecthomas/chroma" -) - -// Monokai style. -var Monokai = Register(chroma.MustNewStyle("monokai", chroma.StyleEntries{ - chroma.Text: "#f8f8f2", - chroma.Error: "#960050 bg:#1e0010", - chroma.Comment: "#75715e", - chroma.Keyword: "#66d9ef", - chroma.KeywordNamespace: "#f92672", - chroma.Operator: "#f92672", - chroma.Punctuation: "#f8f8f2", - chroma.Name: "#f8f8f2", - chroma.NameAttribute: "#a6e22e", - chroma.NameClass: "#a6e22e", - chroma.NameConstant: "#66d9ef", - chroma.NameDecorator: "#a6e22e", - chroma.NameException: "#a6e22e", - chroma.NameFunction: "#a6e22e", - chroma.NameOther: "#a6e22e", - chroma.NameTag: "#f92672", - chroma.LiteralNumber: "#ae81ff", - chroma.Literal: "#ae81ff", - chroma.LiteralDate: "#e6db74", - chroma.LiteralString: "#e6db74", - chroma.LiteralStringEscape: "#ae81ff", - chroma.GenericDeleted: "#f92672", - chroma.GenericEmph: "italic", - chroma.GenericInserted: "#a6e22e", - chroma.GenericStrong: "bold", - chroma.GenericSubheading: "#75715e", - chroma.Background: "bg:#272822", -})) diff --git a/vendor/github.com/alecthomas/chroma/styles/monokailight.go b/vendor/github.com/alecthomas/chroma/styles/monokailight.go deleted file mode 100644 index 61818a6..0000000 --- a/vendor/github.com/alecthomas/chroma/styles/monokailight.go +++ /dev/null @@ -1,33 +0,0 @@ -package styles - -import ( - "github.com/alecthomas/chroma" -) - -// MonokaiLight style. -var MonokaiLight = Register(chroma.MustNewStyle("monokailight", chroma.StyleEntries{ - chroma.Text: "#272822", - chroma.Error: "#960050 bg:#1e0010", - chroma.Comment: "#75715e", - chroma.Keyword: "#00a8c8", - chroma.KeywordNamespace: "#f92672", - chroma.Operator: "#f92672", - chroma.Punctuation: "#111111", - chroma.Name: "#111111", - chroma.NameAttribute: "#75af00", - chroma.NameClass: "#75af00", - chroma.NameConstant: "#00a8c8", - chroma.NameDecorator: "#75af00", - chroma.NameException: "#75af00", - chroma.NameFunction: "#75af00", - chroma.NameOther: "#75af00", - chroma.NameTag: "#f92672", - chroma.LiteralNumber: "#ae81ff", - chroma.Literal: "#ae81ff", - chroma.LiteralDate: "#d88200", - chroma.LiteralString: "#d88200", - chroma.LiteralStringEscape: "#8045FF", - chroma.GenericEmph: "italic", - chroma.GenericStrong: "bold", - chroma.Background: " bg:#fafafa", -})) diff --git a/vendor/github.com/alecthomas/chroma/styles/murphy.go b/vendor/github.com/alecthomas/chroma/styles/murphy.go deleted file mode 100644 index 90e83c7..0000000 --- a/vendor/github.com/alecthomas/chroma/styles/murphy.go +++ /dev/null @@ -1,59 +0,0 @@ -package styles - -import ( - "github.com/alecthomas/chroma" -) - -// Murphy style. -var Murphy = Register(chroma.MustNewStyle("murphy", chroma.StyleEntries{ - chroma.TextWhitespace: "#bbbbbb", - chroma.Comment: "#666 italic", - chroma.CommentPreproc: "#579 noitalic", - chroma.CommentSpecial: "#c00 bold", - chroma.Keyword: "bold #289", - chroma.KeywordPseudo: "#08f", - chroma.KeywordType: "#66f", - chroma.Operator: "#333", - chroma.OperatorWord: "bold #000", - chroma.NameBuiltin: "#072", - chroma.NameFunction: "bold #5ed", - chroma.NameClass: "bold #e9e", - chroma.NameNamespace: "bold #0e84b5", - chroma.NameException: "bold #F00", - chroma.NameVariable: "#036", - chroma.NameVariableInstance: "#aaf", - chroma.NameVariableClass: "#ccf", - chroma.NameVariableGlobal: "#f84", - chroma.NameConstant: "bold #5ed", - chroma.NameLabel: "bold #970", - chroma.NameEntity: "#800", - chroma.NameAttribute: "#007", - chroma.NameTag: "#070", - chroma.NameDecorator: "bold #555", - chroma.LiteralString: "bg:#e0e0ff", - chroma.LiteralStringChar: "#88F bg:", - chroma.LiteralStringDoc: "#D42 bg:", - chroma.LiteralStringInterpol: "bg:#eee", - chroma.LiteralStringEscape: "bold #666", - chroma.LiteralStringRegex: "bg:#e0e0ff #000", - chroma.LiteralStringSymbol: "#fc8 bg:", - chroma.LiteralStringOther: "#f88", - chroma.LiteralNumber: "bold #60E", - chroma.LiteralNumberInteger: "bold #66f", - chroma.LiteralNumberFloat: "bold #60E", - chroma.LiteralNumberHex: "bold #058", - chroma.LiteralNumberOct: "bold #40E", - chroma.GenericHeading: "bold #000080", - chroma.GenericSubheading: "bold #800080", - chroma.GenericDeleted: "#A00000", - chroma.GenericInserted: "#00A000", - chroma.GenericError: "#FF0000", - chroma.GenericEmph: "italic", - chroma.GenericStrong: "bold", - chroma.GenericPrompt: "bold #c65d09", - chroma.GenericOutput: "#888", - chroma.GenericTraceback: "#04D", - chroma.GenericUnderline: "underline", - chroma.Error: "#F00 bg:#FAA", - chroma.Background: " bg:#ffffff", -})) diff --git a/vendor/github.com/alecthomas/chroma/styles/native.go b/vendor/github.com/alecthomas/chroma/styles/native.go deleted file mode 100644 index 9fae09a..0000000 --- a/vendor/github.com/alecthomas/chroma/styles/native.go +++ /dev/null @@ -1,42 +0,0 @@ -package styles - -import ( - "github.com/alecthomas/chroma" -) - -// Native style. -var Native = Register(chroma.MustNewStyle("native", chroma.StyleEntries{ - chroma.Background: "#d0d0d0 bg:#202020", - chroma.TextWhitespace: "#666666", - chroma.Comment: "italic #999999", - chroma.CommentPreproc: "noitalic bold #cd2828", - chroma.CommentSpecial: "noitalic bold #e50808 bg:#520000", - chroma.Keyword: "bold #6ab825", - chroma.KeywordPseudo: "nobold", - chroma.OperatorWord: "bold #6ab825", - chroma.LiteralString: "#ed9d13", - chroma.LiteralStringOther: "#ffa500", - chroma.LiteralNumber: "#3677a9", - chroma.NameBuiltin: "#24909d", - chroma.NameVariable: "#40ffff", - chroma.NameConstant: "#40ffff", - chroma.NameClass: "underline #447fcf", - chroma.NameFunction: "#447fcf", - chroma.NameNamespace: "underline #447fcf", - chroma.NameException: "#bbbbbb", - chroma.NameTag: "bold #6ab825", - chroma.NameAttribute: "#bbbbbb", - chroma.NameDecorator: "#ffa500", - chroma.GenericHeading: "bold #ffffff", - chroma.GenericSubheading: "underline #ffffff", - chroma.GenericDeleted: "#d22323", - chroma.GenericInserted: "#589819", - chroma.GenericError: "#d22323", - chroma.GenericEmph: "italic", - chroma.GenericStrong: "bold", - chroma.GenericPrompt: "#aaaaaa", - chroma.GenericOutput: "#cccccc", - chroma.GenericTraceback: "#d22323", - chroma.GenericUnderline: "underline", - chroma.Error: "bg:#e3d2d2 #a61717", -})) diff --git a/vendor/github.com/alecthomas/chroma/styles/paraiso-dark.go b/vendor/github.com/alecthomas/chroma/styles/paraiso-dark.go deleted file mode 100644 index c8cf473..0000000 --- a/vendor/github.com/alecthomas/chroma/styles/paraiso-dark.go +++ /dev/null @@ -1,44 +0,0 @@ -package styles - -import ( - "github.com/alecthomas/chroma" -) - -// ParaisoDark style. -var ParaisoDark = Register(chroma.MustNewStyle("paraiso-dark", chroma.StyleEntries{ - chroma.Text: "#e7e9db", - chroma.Error: "#ef6155", - chroma.Comment: "#776e71", - chroma.Keyword: "#815ba4", - chroma.KeywordNamespace: "#5bc4bf", - chroma.KeywordType: "#fec418", - chroma.Operator: "#5bc4bf", - chroma.Punctuation: "#e7e9db", - chroma.Name: "#e7e9db", - chroma.NameAttribute: "#06b6ef", - chroma.NameClass: "#fec418", - chroma.NameConstant: "#ef6155", - chroma.NameDecorator: "#5bc4bf", - chroma.NameException: "#ef6155", - chroma.NameFunction: "#06b6ef", - chroma.NameNamespace: "#fec418", - chroma.NameOther: "#06b6ef", - chroma.NameTag: "#5bc4bf", - chroma.NameVariable: "#ef6155", - chroma.LiteralNumber: "#f99b15", - chroma.Literal: "#f99b15", - chroma.LiteralDate: "#48b685", - chroma.LiteralString: "#48b685", - chroma.LiteralStringChar: "#e7e9db", - chroma.LiteralStringDoc: "#776e71", - chroma.LiteralStringEscape: "#f99b15", - chroma.LiteralStringInterpol: "#f99b15", - chroma.GenericDeleted: "#ef6155", - chroma.GenericEmph: "italic", - chroma.GenericHeading: "bold #e7e9db", - chroma.GenericInserted: "#48b685", - chroma.GenericPrompt: "bold #776e71", - chroma.GenericStrong: "bold", - chroma.GenericSubheading: "bold #5bc4bf", - chroma.Background: "bg:#2f1e2e", -})) diff --git a/vendor/github.com/alecthomas/chroma/styles/paraiso-light.go b/vendor/github.com/alecthomas/chroma/styles/paraiso-light.go deleted file mode 100644 index b514dfa..0000000 --- a/vendor/github.com/alecthomas/chroma/styles/paraiso-light.go +++ /dev/null @@ -1,44 +0,0 @@ -package styles - -import ( - "github.com/alecthomas/chroma" -) - -// ParaisoLight style. -var ParaisoLight = Register(chroma.MustNewStyle("paraiso-light", chroma.StyleEntries{ - chroma.Text: "#2f1e2e", - chroma.Error: "#ef6155", - chroma.Comment: "#8d8687", - chroma.Keyword: "#815ba4", - chroma.KeywordNamespace: "#5bc4bf", - chroma.KeywordType: "#fec418", - chroma.Operator: "#5bc4bf", - chroma.Punctuation: "#2f1e2e", - chroma.Name: "#2f1e2e", - chroma.NameAttribute: "#06b6ef", - chroma.NameClass: "#fec418", - chroma.NameConstant: "#ef6155", - chroma.NameDecorator: "#5bc4bf", - chroma.NameException: "#ef6155", - chroma.NameFunction: "#06b6ef", - chroma.NameNamespace: "#fec418", - chroma.NameOther: "#06b6ef", - chroma.NameTag: "#5bc4bf", - chroma.NameVariable: "#ef6155", - chroma.LiteralNumber: "#f99b15", - chroma.Literal: "#f99b15", - chroma.LiteralDate: "#48b685", - chroma.LiteralString: "#48b685", - chroma.LiteralStringChar: "#2f1e2e", - chroma.LiteralStringDoc: "#8d8687", - chroma.LiteralStringEscape: "#f99b15", - chroma.LiteralStringInterpol: "#f99b15", - chroma.GenericDeleted: "#ef6155", - chroma.GenericEmph: "italic", - chroma.GenericHeading: "bold #2f1e2e", - chroma.GenericInserted: "#48b685", - chroma.GenericPrompt: "bold #8d8687", - chroma.GenericStrong: "bold", - chroma.GenericSubheading: "bold #5bc4bf", - chroma.Background: "bg:#e7e9db", -})) diff --git a/vendor/github.com/alecthomas/chroma/styles/pastie.go b/vendor/github.com/alecthomas/chroma/styles/pastie.go deleted file mode 100644 index 9a68544..0000000 --- a/vendor/github.com/alecthomas/chroma/styles/pastie.go +++ /dev/null @@ -1,52 +0,0 @@ -package styles - -import ( - "github.com/alecthomas/chroma" -) - -// Pastie style. -var Pastie = Register(chroma.MustNewStyle("pastie", chroma.StyleEntries{ - chroma.TextWhitespace: "#bbbbbb", - chroma.Comment: "#888888", - chroma.CommentPreproc: "bold #cc0000", - chroma.CommentSpecial: "bg:#fff0f0 bold #cc0000", - chroma.LiteralString: "bg:#fff0f0 #dd2200", - chroma.LiteralStringRegex: "bg:#fff0ff #008800", - chroma.LiteralStringOther: "bg:#f0fff0 #22bb22", - chroma.LiteralStringSymbol: "#aa6600", - chroma.LiteralStringInterpol: "#3333bb", - chroma.LiteralStringEscape: "#0044dd", - chroma.OperatorWord: "#008800", - chroma.Keyword: "bold #008800", - chroma.KeywordPseudo: "nobold", - chroma.KeywordType: "#888888", - chroma.NameClass: "bold #bb0066", - chroma.NameException: "bold #bb0066", - chroma.NameFunction: "bold #0066bb", - chroma.NameProperty: "bold #336699", - chroma.NameNamespace: "bold #bb0066", - chroma.NameBuiltin: "#003388", - chroma.NameVariable: "#336699", - chroma.NameVariableClass: "#336699", - chroma.NameVariableInstance: "#3333bb", - chroma.NameVariableGlobal: "#dd7700", - chroma.NameConstant: "bold #003366", - chroma.NameTag: "bold #bb0066", - chroma.NameAttribute: "#336699", - chroma.NameDecorator: "#555555", - chroma.NameLabel: "italic #336699", - chroma.LiteralNumber: "bold #0000DD", - chroma.GenericHeading: "#333", - chroma.GenericSubheading: "#666", - chroma.GenericDeleted: "bg:#ffdddd #000000", - chroma.GenericInserted: "bg:#ddffdd #000000", - chroma.GenericError: "#aa0000", - chroma.GenericEmph: "italic", - chroma.GenericStrong: "bold", - chroma.GenericPrompt: "#555555", - chroma.GenericOutput: "#888888", - chroma.GenericTraceback: "#aa0000", - chroma.GenericUnderline: "underline", - chroma.Error: "bg:#e3d2d2 #a61717", - chroma.Background: " bg:#ffffff", -})) diff --git a/vendor/github.com/alecthomas/chroma/styles/perldoc.go b/vendor/github.com/alecthomas/chroma/styles/perldoc.go deleted file mode 100644 index e1372fd..0000000 --- a/vendor/github.com/alecthomas/chroma/styles/perldoc.go +++ /dev/null @@ -1,44 +0,0 @@ -package styles - -import ( - "github.com/alecthomas/chroma" -) - -// Perldoc style. -var Perldoc = Register(chroma.MustNewStyle("perldoc", chroma.StyleEntries{ - chroma.TextWhitespace: "#bbbbbb", - chroma.Comment: "#228B22", - chroma.CommentPreproc: "#1e889b", - chroma.CommentSpecial: "#8B008B bold", - chroma.LiteralString: "#CD5555", - chroma.LiteralStringHeredoc: "#1c7e71 italic", - chroma.LiteralStringRegex: "#1c7e71", - chroma.LiteralStringOther: "#cb6c20", - chroma.LiteralNumber: "#B452CD", - chroma.OperatorWord: "#8B008B", - chroma.Keyword: "#8B008B bold", - chroma.KeywordType: "#00688B", - chroma.NameClass: "#008b45 bold", - chroma.NameException: "#008b45 bold", - chroma.NameFunction: "#008b45", - chroma.NameNamespace: "#008b45 underline", - chroma.NameVariable: "#00688B", - chroma.NameConstant: "#00688B", - chroma.NameDecorator: "#707a7c", - chroma.NameTag: "#8B008B bold", - chroma.NameAttribute: "#658b00", - chroma.NameBuiltin: "#658b00", - chroma.GenericHeading: "bold #000080", - chroma.GenericSubheading: "bold #800080", - chroma.GenericDeleted: "#aa0000", - chroma.GenericInserted: "#00aa00", - chroma.GenericError: "#aa0000", - chroma.GenericEmph: "italic", - chroma.GenericStrong: "bold", - chroma.GenericPrompt: "#555555", - chroma.GenericOutput: "#888888", - chroma.GenericTraceback: "#aa0000", - chroma.GenericUnderline: "underline", - chroma.Error: "bg:#e3d2d2 #a61717", - chroma.Background: " bg:#eeeedd", -})) diff --git a/vendor/github.com/alecthomas/chroma/styles/pygments.go b/vendor/github.com/alecthomas/chroma/styles/pygments.go deleted file mode 100644 index 327033b..0000000 --- a/vendor/github.com/alecthomas/chroma/styles/pygments.go +++ /dev/null @@ -1,55 +0,0 @@ -package styles - -import ( - "github.com/alecthomas/chroma" -) - -// Pygments default theme. -var Pygments = Register(chroma.MustNewStyle("pygments", chroma.StyleEntries{ - chroma.Whitespace: "#bbbbbb", - chroma.Comment: "italic #408080", - chroma.CommentPreproc: "noitalic #BC7A00", - - chroma.Keyword: "bold #008000", - chroma.KeywordPseudo: "nobold", - chroma.KeywordType: "nobold #B00040", - - chroma.Operator: "#666666", - chroma.OperatorWord: "bold #AA22FF", - - chroma.NameBuiltin: "#008000", - chroma.NameFunction: "#0000FF", - chroma.NameClass: "bold #0000FF", - chroma.NameNamespace: "bold #0000FF", - chroma.NameException: "bold #D2413A", - chroma.NameVariable: "#19177C", - chroma.NameConstant: "#880000", - chroma.NameLabel: "#A0A000", - chroma.NameEntity: "bold #999999", - chroma.NameAttribute: "#7D9029", - chroma.NameTag: "bold #008000", - chroma.NameDecorator: "#AA22FF", - - chroma.String: "#BA2121", - chroma.StringDoc: "italic", - chroma.StringInterpol: "bold #BB6688", - chroma.StringEscape: "bold #BB6622", - chroma.StringRegex: "#BB6688", - chroma.StringSymbol: "#19177C", - chroma.StringOther: "#008000", - chroma.Number: "#666666", - - chroma.GenericHeading: "bold #000080", - chroma.GenericSubheading: "bold #800080", - chroma.GenericDeleted: "#A00000", - chroma.GenericInserted: "#00A000", - chroma.GenericError: "#FF0000", - chroma.GenericEmph: "italic", - chroma.GenericStrong: "bold", - chroma.GenericPrompt: "bold #000080", - chroma.GenericOutput: "#888", - chroma.GenericTraceback: "#04D", - chroma.GenericUnderline: "underline", - - chroma.Error: "border:#FF0000", -})) diff --git a/vendor/github.com/alecthomas/chroma/styles/rainbow_dash.go b/vendor/github.com/alecthomas/chroma/styles/rainbow_dash.go deleted file mode 100644 index 37d66ca..0000000 --- a/vendor/github.com/alecthomas/chroma/styles/rainbow_dash.go +++ /dev/null @@ -1,47 +0,0 @@ -package styles - -import ( - "github.com/alecthomas/chroma" -) - -// RainbowDash style. -var RainbowDash = Register(chroma.MustNewStyle("rainbow_dash", chroma.StyleEntries{ - chroma.Comment: "italic #0080ff", - chroma.CommentPreproc: "noitalic", - chroma.CommentSpecial: "bold", - chroma.Error: "bg:#cc0000 #ffffff", - chroma.GenericDeleted: "border:#c5060b bg:#ffcccc", - chroma.GenericEmph: "italic", - chroma.GenericError: "#ff0000", - chroma.GenericHeading: "bold #2c5dcd", - chroma.GenericInserted: "border:#00cc00 bg:#ccffcc", - chroma.GenericOutput: "#aaaaaa", - chroma.GenericPrompt: "bold #2c5dcd", - chroma.GenericStrong: "bold", - chroma.GenericSubheading: "bold #2c5dcd", - chroma.GenericTraceback: "#c5060b", - chroma.GenericUnderline: "underline", - chroma.Keyword: "bold #2c5dcd", - chroma.KeywordPseudo: "nobold", - chroma.KeywordType: "#5918bb", - chroma.NameAttribute: "italic #2c5dcd", - chroma.NameBuiltin: "bold #5918bb", - chroma.NameClass: "underline", - chroma.NameConstant: "#318495", - chroma.NameDecorator: "bold #ff8000", - chroma.NameEntity: "bold #5918bb", - chroma.NameException: "bold #5918bb", - chroma.NameFunction: "bold #ff8000", - chroma.NameTag: "bold #2c5dcd", - chroma.LiteralNumber: "bold #5918bb", - chroma.Operator: "#2c5dcd", - chroma.OperatorWord: "bold", - chroma.LiteralString: "#00cc66", - chroma.LiteralStringDoc: "italic", - chroma.LiteralStringEscape: "bold #c5060b", - chroma.LiteralStringOther: "#318495", - chroma.LiteralStringSymbol: "bold #c5060b", - chroma.Text: "#4d4d4d", - chroma.TextWhitespace: "#cbcbcb", - chroma.Background: " bg:#ffffff", -})) diff --git a/vendor/github.com/alecthomas/chroma/styles/rrt.go b/vendor/github.com/alecthomas/chroma/styles/rrt.go deleted file mode 100644 index 2ccf2ca..0000000 --- a/vendor/github.com/alecthomas/chroma/styles/rrt.go +++ /dev/null @@ -1,20 +0,0 @@ -package styles - -import ( - "github.com/alecthomas/chroma" -) - -// Rrt style. -var Rrt = Register(chroma.MustNewStyle("rrt", chroma.StyleEntries{ - chroma.CommentPreproc: "#e5e5e5", - chroma.Comment: "#00ff00", - chroma.KeywordType: "#ee82ee", - chroma.Keyword: "#ff0000", - chroma.LiteralNumber: "#ff6600", - chroma.LiteralStringSymbol: "#ff6600", - chroma.LiteralString: "#87ceeb", - chroma.NameFunction: "#ffff00", - chroma.NameConstant: "#7fffd4", - chroma.NameVariable: "#eedd82", - chroma.Background: "#f8f8f2 bg:#000000", -})) diff --git a/vendor/github.com/alecthomas/chroma/styles/solarized-dark.go b/vendor/github.com/alecthomas/chroma/styles/solarized-dark.go deleted file mode 100644 index 2724df2..0000000 --- a/vendor/github.com/alecthomas/chroma/styles/solarized-dark.go +++ /dev/null @@ -1,46 +0,0 @@ -package styles - -import ( - "github.com/alecthomas/chroma" -) - -// SolarizedDark style. -var SolarizedDark = Register(chroma.MustNewStyle("solarized-dark", chroma.StyleEntries{ - chroma.Keyword: "#719e07", - chroma.KeywordConstant: "#CB4B16", - chroma.KeywordDeclaration: "#268BD2", - chroma.KeywordReserved: "#268BD2", - chroma.KeywordType: "#DC322F", - chroma.NameAttribute: "#93A1A1", - chroma.NameBuiltin: "#B58900", - chroma.NameBuiltinPseudo: "#268BD2", - chroma.NameClass: "#268BD2", - chroma.NameConstant: "#CB4B16", - chroma.NameDecorator: "#268BD2", - chroma.NameEntity: "#CB4B16", - chroma.NameException: "#CB4B16", - chroma.NameFunction: "#268BD2", - chroma.NameTag: "#268BD2", - chroma.NameVariable: "#268BD2", - chroma.LiteralString: "#2AA198", - chroma.LiteralStringBacktick: "#586E75", - chroma.LiteralStringChar: "#2AA198", - chroma.LiteralStringDoc: "#93A1A1", - chroma.LiteralStringEscape: "#CB4B16", - chroma.LiteralStringHeredoc: "#93A1A1", - chroma.LiteralStringRegex: "#DC322F", - chroma.LiteralNumber: "#2AA198", - chroma.Operator: "#719e07", - chroma.Comment: "#586E75", - chroma.CommentPreproc: "#719e07", - chroma.CommentSpecial: "#719e07", - chroma.GenericDeleted: "#DC322F", - chroma.GenericEmph: "italic", - chroma.GenericError: "#DC322F bold", - chroma.GenericHeading: "#CB4B16", - chroma.GenericInserted: "#719e07", - chroma.GenericStrong: "bold", - chroma.GenericSubheading: "#268BD2", - chroma.Background: "#93A1A1 bg:#002B36", - chroma.Other: "#CB4B16", -})) diff --git a/vendor/github.com/alecthomas/chroma/styles/solarized-dark256.go b/vendor/github.com/alecthomas/chroma/styles/solarized-dark256.go deleted file mode 100644 index a24ddc1..0000000 --- a/vendor/github.com/alecthomas/chroma/styles/solarized-dark256.go +++ /dev/null @@ -1,48 +0,0 @@ -package styles - -import ( - "github.com/alecthomas/chroma" -) - -// SolarizedDark256 style. -var SolarizedDark256 = Register(chroma.MustNewStyle("solarized-dark256", chroma.StyleEntries{ - chroma.Keyword: "#5f8700", - chroma.KeywordConstant: "#d75f00", - chroma.KeywordDeclaration: "#0087ff", - chroma.KeywordNamespace: "#d75f00", - chroma.KeywordReserved: "#0087ff", - chroma.KeywordType: "#af0000", - chroma.NameAttribute: "#8a8a8a", - chroma.NameBuiltin: "#0087ff", - chroma.NameBuiltinPseudo: "#0087ff", - chroma.NameClass: "#0087ff", - chroma.NameConstant: "#d75f00", - chroma.NameDecorator: "#0087ff", - chroma.NameEntity: "#d75f00", - chroma.NameException: "#af8700", - chroma.NameFunction: "#0087ff", - chroma.NameTag: "#0087ff", - chroma.NameVariable: "#0087ff", - chroma.LiteralString: "#00afaf", - chroma.LiteralStringBacktick: "#4e4e4e", - chroma.LiteralStringChar: "#00afaf", - chroma.LiteralStringDoc: "#00afaf", - chroma.LiteralStringEscape: "#af0000", - chroma.LiteralStringHeredoc: "#00afaf", - chroma.LiteralStringRegex: "#af0000", - chroma.LiteralNumber: "#00afaf", - chroma.Operator: "#8a8a8a", - chroma.OperatorWord: "#5f8700", - chroma.Comment: "#4e4e4e", - chroma.CommentPreproc: "#5f8700", - chroma.CommentSpecial: "#5f8700", - chroma.GenericDeleted: "#af0000", - chroma.GenericEmph: "italic", - chroma.GenericError: "#af0000 bold", - chroma.GenericHeading: "#d75f00", - chroma.GenericInserted: "#5f8700", - chroma.GenericStrong: "bold", - chroma.GenericSubheading: "#0087ff", - chroma.Background: "#8a8a8a bg:#1c1c1c", - chroma.Other: "#d75f00", -})) diff --git a/vendor/github.com/alecthomas/chroma/styles/solarized-light.go b/vendor/github.com/alecthomas/chroma/styles/solarized-light.go deleted file mode 100644 index b6d5234..0000000 --- a/vendor/github.com/alecthomas/chroma/styles/solarized-light.go +++ /dev/null @@ -1,24 +0,0 @@ -package styles - -import ( - "github.com/alecthomas/chroma" -) - -// SolarizedLight style. -var SolarizedLight = Register(chroma.MustNewStyle("solarized-light", chroma.StyleEntries{ - chroma.Text: "bg: #eee8d5 #586e75", - chroma.Keyword: "#859900", - chroma.KeywordConstant: "bold", - chroma.KeywordNamespace: "#dc322f bold", - chroma.KeywordType: "bold", - chroma.Name: "#268bd2", - chroma.NameBuiltin: "#cb4b16", - chroma.NameClass: "#cb4b16", - chroma.NameTag: "bold", - chroma.Literal: "#2aa198", - chroma.LiteralNumber: "bold", - chroma.OperatorWord: "#859900", - chroma.Comment: "#93a1a1 italic", - chroma.Generic: "#d33682", - chroma.Background: " bg:#eee8d5", -})) diff --git a/vendor/github.com/alecthomas/chroma/styles/swapoff.go b/vendor/github.com/alecthomas/chroma/styles/swapoff.go deleted file mode 100644 index e4daae6..0000000 --- a/vendor/github.com/alecthomas/chroma/styles/swapoff.go +++ /dev/null @@ -1,25 +0,0 @@ -package styles - -import ( - "github.com/alecthomas/chroma" -) - -// SwapOff theme. -var SwapOff = Register(chroma.MustNewStyle("swapoff", chroma.StyleEntries{ - chroma.Background: "#lightgray bg:#black", - chroma.Number: "bold #ansiyellow", - chroma.Comment: "#ansiteal", - chroma.CommentPreproc: "bold #ansigreen", - chroma.String: "bold #ansiturquoise", - chroma.Keyword: "bold #ansiwhite", - chroma.NameKeyword: "bold #ansiwhite", - chroma.NameBuiltin: "bold #ansiwhite", - chroma.GenericHeading: "bold", - chroma.GenericSubheading: "bold", - chroma.GenericStrong: "bold", - chroma.GenericUnderline: "underline", - chroma.NameTag: "bold", - chroma.NameAttribute: "#ansiteal", - chroma.Error: "#ansired", - chroma.LiteralDate: "bold #ansiyellow", -})) diff --git a/vendor/github.com/alecthomas/chroma/styles/tango.go b/vendor/github.com/alecthomas/chroma/styles/tango.go deleted file mode 100644 index ae1afe0..0000000 --- a/vendor/github.com/alecthomas/chroma/styles/tango.go +++ /dev/null @@ -1,79 +0,0 @@ -package styles - -import ( - "github.com/alecthomas/chroma" -) - -// Tango style. -var Tango = Register(chroma.MustNewStyle("tango", chroma.StyleEntries{ - chroma.TextWhitespace: "underline #f8f8f8", - chroma.Error: "#a40000 border:#ef2929", - chroma.Other: "#000000", - chroma.Comment: "italic #8f5902", - chroma.CommentMultiline: "italic #8f5902", - chroma.CommentPreproc: "italic #8f5902", - chroma.CommentSingle: "italic #8f5902", - chroma.CommentSpecial: "italic #8f5902", - chroma.Keyword: "bold #204a87", - chroma.KeywordConstant: "bold #204a87", - chroma.KeywordDeclaration: "bold #204a87", - chroma.KeywordNamespace: "bold #204a87", - chroma.KeywordPseudo: "bold #204a87", - chroma.KeywordReserved: "bold #204a87", - chroma.KeywordType: "bold #204a87", - chroma.Operator: "bold #ce5c00", - chroma.OperatorWord: "bold #204a87", - chroma.Punctuation: "bold #000000", - chroma.Name: "#000000", - chroma.NameAttribute: "#c4a000", - chroma.NameBuiltin: "#204a87", - chroma.NameBuiltinPseudo: "#3465a4", - chroma.NameClass: "#000000", - chroma.NameConstant: "#000000", - chroma.NameDecorator: "bold #5c35cc", - chroma.NameEntity: "#ce5c00", - chroma.NameException: "bold #cc0000", - chroma.NameFunction: "#000000", - chroma.NameProperty: "#000000", - chroma.NameLabel: "#f57900", - chroma.NameNamespace: "#000000", - chroma.NameOther: "#000000", - chroma.NameTag: "bold #204a87", - chroma.NameVariable: "#000000", - chroma.NameVariableClass: "#000000", - chroma.NameVariableGlobal: "#000000", - chroma.NameVariableInstance: "#000000", - chroma.LiteralNumber: "bold #0000cf", - chroma.LiteralNumberFloat: "bold #0000cf", - chroma.LiteralNumberHex: "bold #0000cf", - chroma.LiteralNumberInteger: "bold #0000cf", - chroma.LiteralNumberIntegerLong: "bold #0000cf", - chroma.LiteralNumberOct: "bold #0000cf", - chroma.Literal: "#000000", - chroma.LiteralDate: "#000000", - chroma.LiteralString: "#4e9a06", - chroma.LiteralStringBacktick: "#4e9a06", - chroma.LiteralStringChar: "#4e9a06", - chroma.LiteralStringDoc: "italic #8f5902", - chroma.LiteralStringDouble: "#4e9a06", - chroma.LiteralStringEscape: "#4e9a06", - chroma.LiteralStringHeredoc: "#4e9a06", - chroma.LiteralStringInterpol: "#4e9a06", - chroma.LiteralStringOther: "#4e9a06", - chroma.LiteralStringRegex: "#4e9a06", - chroma.LiteralStringSingle: "#4e9a06", - chroma.LiteralStringSymbol: "#4e9a06", - chroma.Generic: "#000000", - chroma.GenericDeleted: "#a40000", - chroma.GenericEmph: "italic #000000", - chroma.GenericError: "#ef2929", - chroma.GenericHeading: "bold #000080", - chroma.GenericInserted: "#00A000", - chroma.GenericOutput: "italic #000000", - chroma.GenericPrompt: "#8f5902", - chroma.GenericStrong: "bold #000000", - chroma.GenericSubheading: "bold #800080", - chroma.GenericTraceback: "bold #a40000", - chroma.GenericUnderline: "underline", - chroma.Background: " bg:#f8f8f8", -})) diff --git a/vendor/github.com/alecthomas/chroma/styles/trac.go b/vendor/github.com/alecthomas/chroma/styles/trac.go deleted file mode 100644 index 3b09c44..0000000 --- a/vendor/github.com/alecthomas/chroma/styles/trac.go +++ /dev/null @@ -1,42 +0,0 @@ -package styles - -import ( - "github.com/alecthomas/chroma" -) - -// Trac style. -var Trac = Register(chroma.MustNewStyle("trac", chroma.StyleEntries{ - chroma.TextWhitespace: "#bbbbbb", - chroma.Comment: "italic #999988", - chroma.CommentPreproc: "bold noitalic #999999", - chroma.CommentSpecial: "bold #999999", - chroma.Operator: "bold", - chroma.LiteralString: "#bb8844", - chroma.LiteralStringRegex: "#808000", - chroma.LiteralNumber: "#009999", - chroma.Keyword: "bold", - chroma.KeywordType: "#445588", - chroma.NameBuiltin: "#999999", - chroma.NameFunction: "bold #990000", - chroma.NameClass: "bold #445588", - chroma.NameException: "bold #990000", - chroma.NameNamespace: "#555555", - chroma.NameVariable: "#008080", - chroma.NameConstant: "#008080", - chroma.NameTag: "#000080", - chroma.NameAttribute: "#008080", - chroma.NameEntity: "#800080", - chroma.GenericHeading: "#999999", - chroma.GenericSubheading: "#aaaaaa", - chroma.GenericDeleted: "bg:#ffdddd #000000", - chroma.GenericInserted: "bg:#ddffdd #000000", - chroma.GenericError: "#aa0000", - chroma.GenericEmph: "italic", - chroma.GenericStrong: "bold", - chroma.GenericPrompt: "#555555", - chroma.GenericOutput: "#888888", - chroma.GenericTraceback: "#aa0000", - chroma.GenericUnderline: "underline", - chroma.Error: "bg:#e3d2d2 #a61717", - chroma.Background: " bg:#ffffff", -})) diff --git a/vendor/github.com/alecthomas/chroma/styles/vim.go b/vendor/github.com/alecthomas/chroma/styles/vim.go deleted file mode 100644 index 6296042..0000000 --- a/vendor/github.com/alecthomas/chroma/styles/vim.go +++ /dev/null @@ -1,36 +0,0 @@ -package styles - -import ( - "github.com/alecthomas/chroma" -) - -// Vim style. -var Vim = Register(chroma.MustNewStyle("vim", chroma.StyleEntries{ - chroma.Background: "#cccccc bg:#000000", - chroma.Comment: "#000080", - chroma.CommentSpecial: "bold #cd0000", - chroma.Keyword: "#cdcd00", - chroma.KeywordDeclaration: "#00cd00", - chroma.KeywordNamespace: "#cd00cd", - chroma.KeywordType: "#00cd00", - chroma.Operator: "#3399cc", - chroma.OperatorWord: "#cdcd00", - chroma.NameClass: "#00cdcd", - chroma.NameBuiltin: "#cd00cd", - chroma.NameException: "bold #666699", - chroma.NameVariable: "#00cdcd", - chroma.LiteralString: "#cd0000", - chroma.LiteralNumber: "#cd00cd", - chroma.GenericHeading: "bold #000080", - chroma.GenericSubheading: "bold #800080", - chroma.GenericDeleted: "#cd0000", - chroma.GenericInserted: "#00cd00", - chroma.GenericError: "#FF0000", - chroma.GenericEmph: "italic", - chroma.GenericStrong: "bold", - chroma.GenericPrompt: "bold #000080", - chroma.GenericOutput: "#888", - chroma.GenericTraceback: "#04D", - chroma.GenericUnderline: "underline", - chroma.Error: "border:#FF0000", -})) diff --git a/vendor/github.com/alecthomas/chroma/styles/vs.go b/vendor/github.com/alecthomas/chroma/styles/vs.go deleted file mode 100644 index acbcb91..0000000 --- a/vendor/github.com/alecthomas/chroma/styles/vs.go +++ /dev/null @@ -1,23 +0,0 @@ -package styles - -import ( - "github.com/alecthomas/chroma" -) - -// VisualStudio style. -var VisualStudio = Register(chroma.MustNewStyle("vs", chroma.StyleEntries{ - chroma.Comment: "#008000", - chroma.CommentPreproc: "#0000ff", - chroma.Keyword: "#0000ff", - chroma.OperatorWord: "#0000ff", - chroma.KeywordType: "#2b91af", - chroma.NameClass: "#2b91af", - chroma.LiteralString: "#a31515", - chroma.GenericHeading: "bold", - chroma.GenericSubheading: "bold", - chroma.GenericEmph: "italic", - chroma.GenericStrong: "bold", - chroma.GenericPrompt: "bold", - chroma.Error: "border:#FF0000", - chroma.Background: " bg:#ffffff", -})) diff --git a/vendor/github.com/alecthomas/chroma/styles/xcode.go b/vendor/github.com/alecthomas/chroma/styles/xcode.go deleted file mode 100644 index 115cf71..0000000 --- a/vendor/github.com/alecthomas/chroma/styles/xcode.go +++ /dev/null @@ -1,29 +0,0 @@ -package styles - -import ( - "github.com/alecthomas/chroma" -) - -// Xcode style. -var Xcode = Register(chroma.MustNewStyle("xcode", chroma.StyleEntries{ - chroma.Comment: "#177500", - chroma.CommentPreproc: "#633820", - chroma.LiteralString: "#C41A16", - chroma.LiteralStringChar: "#2300CE", - chroma.Operator: "#000000", - chroma.Keyword: "#A90D91", - chroma.Name: "#000000", - chroma.NameAttribute: "#836C28", - chroma.NameClass: "#3F6E75", - chroma.NameFunction: "#000000", - chroma.NameBuiltin: "#A90D91", - chroma.NameBuiltinPseudo: "#5B269A", - chroma.NameVariable: "#000000", - chroma.NameTag: "#000000", - chroma.NameDecorator: "#000000", - chroma.NameLabel: "#000000", - chroma.Literal: "#1C01CE", - chroma.LiteralNumber: "#1C01CE", - chroma.Error: "#000000", - chroma.Background: " bg:#ffffff", -})) diff --git a/vendor/github.com/alecthomas/chroma/table.py b/vendor/github.com/alecthomas/chroma/table.py deleted file mode 100644 index 1caa7cc..0000000 --- a/vendor/github.com/alecthomas/chroma/table.py +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/env python3 -from collections import defaultdict -from subprocess import check_output - -lines = check_output(["go", "run", "./cmd/chroma/main.go", "--list"]).decode('utf-8').splitlines() -lines = [line.strip() for line in lines if line.startswith(" ") and not line.startswith(" ")] -lines = sorted(lines, key=lambda l: l.lower()) - -table = defaultdict(list) - -for line in lines: - table[line[0].upper()].append(line) - -for key, value in table.items(): - print("{} | {}".format(key, ', '.join(value))) diff --git a/vendor/github.com/alecthomas/chroma/tokentype_string.go b/vendor/github.com/alecthomas/chroma/tokentype_string.go deleted file mode 100644 index 6fe3867..0000000 --- a/vendor/github.com/alecthomas/chroma/tokentype_string.go +++ /dev/null @@ -1,213 +0,0 @@ -// Code generated by "stringer -type TokenType"; DO NOT EDIT. - -package chroma - -import "strconv" - -func _() { - // An "invalid array index" compiler error signifies that the constant values have changed. - // Re-run the stringer command to generate them again. - var x [1]struct{} - _ = x[Background - -1] - _ = x[LineNumbers - -2] - _ = x[LineNumbersTable - -3] - _ = x[LineHighlight - -4] - _ = x[LineTable - -5] - _ = x[LineTableTD - -6] - _ = x[Error - -7] - _ = x[Other - -8] - _ = x[None - -9] - _ = x[EOFType-0] - _ = x[Keyword-1000] - _ = x[KeywordConstant-1001] - _ = x[KeywordDeclaration-1002] - _ = x[KeywordNamespace-1003] - _ = x[KeywordPseudo-1004] - _ = x[KeywordReserved-1005] - _ = x[KeywordType-1006] - _ = x[Name-2000] - _ = x[NameAttribute-2001] - _ = x[NameBuiltin-2002] - _ = x[NameBuiltinPseudo-2003] - _ = x[NameClass-2004] - _ = x[NameConstant-2005] - _ = x[NameDecorator-2006] - _ = x[NameEntity-2007] - _ = x[NameException-2008] - _ = x[NameFunction-2009] - _ = x[NameFunctionMagic-2010] - _ = x[NameKeyword-2011] - _ = x[NameLabel-2012] - _ = x[NameNamespace-2013] - _ = x[NameOperator-2014] - _ = x[NameOther-2015] - _ = x[NamePseudo-2016] - _ = x[NameProperty-2017] - _ = x[NameTag-2018] - _ = x[NameVariable-2019] - _ = x[NameVariableAnonymous-2020] - _ = x[NameVariableClass-2021] - _ = x[NameVariableGlobal-2022] - _ = x[NameVariableInstance-2023] - _ = x[NameVariableMagic-2024] - _ = x[Literal-3000] - _ = x[LiteralDate-3001] - _ = x[LiteralOther-3002] - _ = x[LiteralString-3100] - _ = x[LiteralStringAffix-3101] - _ = x[LiteralStringAtom-3102] - _ = x[LiteralStringBacktick-3103] - _ = x[LiteralStringBoolean-3104] - _ = x[LiteralStringChar-3105] - _ = x[LiteralStringDelimiter-3106] - _ = x[LiteralStringDoc-3107] - _ = x[LiteralStringDouble-3108] - _ = x[LiteralStringEscape-3109] - _ = x[LiteralStringHeredoc-3110] - _ = x[LiteralStringInterpol-3111] - _ = x[LiteralStringName-3112] - _ = x[LiteralStringOther-3113] - _ = x[LiteralStringRegex-3114] - _ = x[LiteralStringSingle-3115] - _ = x[LiteralStringSymbol-3116] - _ = x[LiteralNumber-3200] - _ = x[LiteralNumberBin-3201] - _ = x[LiteralNumberFloat-3202] - _ = x[LiteralNumberHex-3203] - _ = x[LiteralNumberInteger-3204] - _ = x[LiteralNumberIntegerLong-3205] - _ = x[LiteralNumberOct-3206] - _ = x[Operator-4000] - _ = x[OperatorWord-4001] - _ = x[Punctuation-5000] - _ = x[Comment-6000] - _ = x[CommentHashbang-6001] - _ = x[CommentMultiline-6002] - _ = x[CommentSingle-6003] - _ = x[CommentSpecial-6004] - _ = x[CommentPreproc-6100] - _ = x[CommentPreprocFile-6101] - _ = x[Generic-7000] - _ = x[GenericDeleted-7001] - _ = x[GenericEmph-7002] - _ = x[GenericError-7003] - _ = x[GenericHeading-7004] - _ = x[GenericInserted-7005] - _ = x[GenericOutput-7006] - _ = x[GenericPrompt-7007] - _ = x[GenericStrong-7008] - _ = x[GenericSubheading-7009] - _ = x[GenericTraceback-7010] - _ = x[GenericUnderline-7011] - _ = x[Text-8000] - _ = x[TextWhitespace-8001] - _ = x[TextSymbol-8002] - _ = x[TextPunctuation-8003] -} - -const _TokenType_name = "NoneOtherErrorLineTableTDLineTableLineHighlightLineNumbersTableLineNumbersBackgroundEOFTypeKeywordKeywordConstantKeywordDeclarationKeywordNamespaceKeywordPseudoKeywordReservedKeywordTypeNameNameAttributeNameBuiltinNameBuiltinPseudoNameClassNameConstantNameDecoratorNameEntityNameExceptionNameFunctionNameFunctionMagicNameKeywordNameLabelNameNamespaceNameOperatorNameOtherNamePseudoNamePropertyNameTagNameVariableNameVariableAnonymousNameVariableClassNameVariableGlobalNameVariableInstanceNameVariableMagicLiteralLiteralDateLiteralOtherLiteralStringLiteralStringAffixLiteralStringAtomLiteralStringBacktickLiteralStringBooleanLiteralStringCharLiteralStringDelimiterLiteralStringDocLiteralStringDoubleLiteralStringEscapeLiteralStringHeredocLiteralStringInterpolLiteralStringNameLiteralStringOtherLiteralStringRegexLiteralStringSingleLiteralStringSymbolLiteralNumberLiteralNumberBinLiteralNumberFloatLiteralNumberHexLiteralNumberIntegerLiteralNumberIntegerLongLiteralNumberOctOperatorOperatorWordPunctuationCommentCommentHashbangCommentMultilineCommentSingleCommentSpecialCommentPreprocCommentPreprocFileGenericGenericDeletedGenericEmphGenericErrorGenericHeadingGenericInsertedGenericOutputGenericPromptGenericStrongGenericSubheadingGenericTracebackGenericUnderlineTextTextWhitespaceTextSymbolTextPunctuation" - -var _TokenType_map = map[TokenType]string{ - -9: _TokenType_name[0:4], - -8: _TokenType_name[4:9], - -7: _TokenType_name[9:14], - -6: _TokenType_name[14:25], - -5: _TokenType_name[25:34], - -4: _TokenType_name[34:47], - -3: _TokenType_name[47:63], - -2: _TokenType_name[63:74], - -1: _TokenType_name[74:84], - 0: _TokenType_name[84:91], - 1000: _TokenType_name[91:98], - 1001: _TokenType_name[98:113], - 1002: _TokenType_name[113:131], - 1003: _TokenType_name[131:147], - 1004: _TokenType_name[147:160], - 1005: _TokenType_name[160:175], - 1006: _TokenType_name[175:186], - 2000: _TokenType_name[186:190], - 2001: _TokenType_name[190:203], - 2002: _TokenType_name[203:214], - 2003: _TokenType_name[214:231], - 2004: _TokenType_name[231:240], - 2005: _TokenType_name[240:252], - 2006: _TokenType_name[252:265], - 2007: _TokenType_name[265:275], - 2008: _TokenType_name[275:288], - 2009: _TokenType_name[288:300], - 2010: _TokenType_name[300:317], - 2011: _TokenType_name[317:328], - 2012: _TokenType_name[328:337], - 2013: _TokenType_name[337:350], - 2014: _TokenType_name[350:362], - 2015: _TokenType_name[362:371], - 2016: _TokenType_name[371:381], - 2017: _TokenType_name[381:393], - 2018: _TokenType_name[393:400], - 2019: _TokenType_name[400:412], - 2020: _TokenType_name[412:433], - 2021: _TokenType_name[433:450], - 2022: _TokenType_name[450:468], - 2023: _TokenType_name[468:488], - 2024: _TokenType_name[488:505], - 3000: _TokenType_name[505:512], - 3001: _TokenType_name[512:523], - 3002: _TokenType_name[523:535], - 3100: _TokenType_name[535:548], - 3101: _TokenType_name[548:566], - 3102: _TokenType_name[566:583], - 3103: _TokenType_name[583:604], - 3104: _TokenType_name[604:624], - 3105: _TokenType_name[624:641], - 3106: _TokenType_name[641:663], - 3107: _TokenType_name[663:679], - 3108: _TokenType_name[679:698], - 3109: _TokenType_name[698:717], - 3110: _TokenType_name[717:737], - 3111: _TokenType_name[737:758], - 3112: _TokenType_name[758:775], - 3113: _TokenType_name[775:793], - 3114: _TokenType_name[793:811], - 3115: _TokenType_name[811:830], - 3116: _TokenType_name[830:849], - 3200: _TokenType_name[849:862], - 3201: _TokenType_name[862:878], - 3202: _TokenType_name[878:896], - 3203: _TokenType_name[896:912], - 3204: _TokenType_name[912:932], - 3205: _TokenType_name[932:956], - 3206: _TokenType_name[956:972], - 4000: _TokenType_name[972:980], - 4001: _TokenType_name[980:992], - 5000: _TokenType_name[992:1003], - 6000: _TokenType_name[1003:1010], - 6001: _TokenType_name[1010:1025], - 6002: _TokenType_name[1025:1041], - 6003: _TokenType_name[1041:1054], - 6004: _TokenType_name[1054:1068], - 6100: _TokenType_name[1068:1082], - 6101: _TokenType_name[1082:1100], - 7000: _TokenType_name[1100:1107], - 7001: _TokenType_name[1107:1121], - 7002: _TokenType_name[1121:1132], - 7003: _TokenType_name[1132:1144], - 7004: _TokenType_name[1144:1158], - 7005: _TokenType_name[1158:1173], - 7006: _TokenType_name[1173:1186], - 7007: _TokenType_name[1186:1199], - 7008: _TokenType_name[1199:1212], - 7009: _TokenType_name[1212:1229], - 7010: _TokenType_name[1229:1245], - 7011: _TokenType_name[1245:1261], - 8000: _TokenType_name[1261:1265], - 8001: _TokenType_name[1265:1279], - 8002: _TokenType_name[1279:1289], - 8003: _TokenType_name[1289:1304], -} - -func (i TokenType) String() string { - if str, ok := _TokenType_map[i]; ok { - return str - } - return "TokenType(" + strconv.FormatInt(int64(i), 10) + ")" -} diff --git a/vendor/github.com/alecthomas/chroma/types.go b/vendor/github.com/alecthomas/chroma/types.go deleted file mode 100644 index b102f30..0000000 --- a/vendor/github.com/alecthomas/chroma/types.go +++ /dev/null @@ -1,347 +0,0 @@ -package chroma - -import ( - "encoding/json" - "fmt" -) - -//go:generate stringer -type TokenType - -// TokenType is the type of token to highlight. -// -// It is also an Emitter, emitting a single token of itself -type TokenType int - -func (t TokenType) MarshalJSON() ([]byte, error) { return json.Marshal(t.String()) } -func (t *TokenType) UnmarshalJSON(data []byte) error { - key := "" - err := json.Unmarshal(data, &key) - if err != nil { - return err - } - for tt, text := range _TokenType_map { - if text == key { - *t = tt - return nil - } - } - return fmt.Errorf("unknown TokenType %q", data) -} - -// Set of TokenTypes. -// -// Categories of types are grouped in ranges of 1000, while sub-categories are in ranges of 100. For -// example, the literal category is in the range 3000-3999. The sub-category for literal strings is -// in the range 3100-3199. - -// Meta token types. -const ( - // Default background style. - Background TokenType = -1 - iota - // Line numbers in output. - LineNumbers - // Line numbers in output when in table. - LineNumbersTable - // Line higlight style. - LineHighlight - // Line numbers table wrapper style. - LineTable - // Line numbers table TD wrapper style. - LineTableTD - // Input that could not be tokenised. - Error - // Other is used by the Delegate lexer to indicate which tokens should be handled by the delegate. - Other - // No highlighting. - None - // Used as an EOF marker / nil token - EOFType TokenType = 0 -) - -// Keywords. -const ( - Keyword TokenType = 1000 + iota - KeywordConstant - KeywordDeclaration - KeywordNamespace - KeywordPseudo - KeywordReserved - KeywordType -) - -// Names. -const ( - Name TokenType = 2000 + iota - NameAttribute - NameBuiltin - NameBuiltinPseudo - NameClass - NameConstant - NameDecorator - NameEntity - NameException - NameFunction - NameFunctionMagic - NameKeyword - NameLabel - NameNamespace - NameOperator - NameOther - NamePseudo - NameProperty - NameTag - NameVariable - NameVariableAnonymous - NameVariableClass - NameVariableGlobal - NameVariableInstance - NameVariableMagic -) - -// Literals. -const ( - Literal TokenType = 3000 + iota - LiteralDate - LiteralOther -) - -// Strings. -const ( - LiteralString TokenType = 3100 + iota - LiteralStringAffix - LiteralStringAtom - LiteralStringBacktick - LiteralStringBoolean - LiteralStringChar - LiteralStringDelimiter - LiteralStringDoc - LiteralStringDouble - LiteralStringEscape - LiteralStringHeredoc - LiteralStringInterpol - LiteralStringName - LiteralStringOther - LiteralStringRegex - LiteralStringSingle - LiteralStringSymbol -) - -// Literals. -const ( - LiteralNumber TokenType = 3200 + iota - LiteralNumberBin - LiteralNumberFloat - LiteralNumberHex - LiteralNumberInteger - LiteralNumberIntegerLong - LiteralNumberOct -) - -// Operators. -const ( - Operator TokenType = 4000 + iota - OperatorWord -) - -// Punctuation. -const ( - Punctuation TokenType = 5000 + iota -) - -// Comments. -const ( - Comment TokenType = 6000 + iota - CommentHashbang - CommentMultiline - CommentSingle - CommentSpecial -) - -// Preprocessor "comments". -const ( - CommentPreproc TokenType = 6100 + iota - CommentPreprocFile -) - -// Generic tokens. -const ( - Generic TokenType = 7000 + iota - GenericDeleted - GenericEmph - GenericError - GenericHeading - GenericInserted - GenericOutput - GenericPrompt - GenericStrong - GenericSubheading - GenericTraceback - GenericUnderline -) - -// Text. -const ( - Text TokenType = 8000 + iota - TextWhitespace - TextSymbol - TextPunctuation -) - -// Aliases. -const ( - Whitespace = TextWhitespace - - Date = LiteralDate - - String = LiteralString - StringAffix = LiteralStringAffix - StringBacktick = LiteralStringBacktick - StringChar = LiteralStringChar - StringDelimiter = LiteralStringDelimiter - StringDoc = LiteralStringDoc - StringDouble = LiteralStringDouble - StringEscape = LiteralStringEscape - StringHeredoc = LiteralStringHeredoc - StringInterpol = LiteralStringInterpol - StringOther = LiteralStringOther - StringRegex = LiteralStringRegex - StringSingle = LiteralStringSingle - StringSymbol = LiteralStringSymbol - - Number = LiteralNumber - NumberBin = LiteralNumberBin - NumberFloat = LiteralNumberFloat - NumberHex = LiteralNumberHex - NumberInteger = LiteralNumberInteger - NumberIntegerLong = LiteralNumberIntegerLong - NumberOct = LiteralNumberOct -) - -var ( - StandardTypes = map[TokenType]string{ - Background: "chroma", - LineNumbers: "ln", - LineNumbersTable: "lnt", - LineHighlight: "hl", - LineTable: "lntable", - LineTableTD: "lntd", - Text: "", - Whitespace: "w", - Error: "err", - Other: "x", - // I have no idea what this is used for... - // Escape: "esc", - - Keyword: "k", - KeywordConstant: "kc", - KeywordDeclaration: "kd", - KeywordNamespace: "kn", - KeywordPseudo: "kp", - KeywordReserved: "kr", - KeywordType: "kt", - - Name: "n", - NameAttribute: "na", - NameBuiltin: "nb", - NameBuiltinPseudo: "bp", - NameClass: "nc", - NameConstant: "no", - NameDecorator: "nd", - NameEntity: "ni", - NameException: "ne", - NameFunction: "nf", - NameFunctionMagic: "fm", - NameProperty: "py", - NameLabel: "nl", - NameNamespace: "nn", - NameOther: "nx", - NameTag: "nt", - NameVariable: "nv", - NameVariableClass: "vc", - NameVariableGlobal: "vg", - NameVariableInstance: "vi", - NameVariableMagic: "vm", - - Literal: "l", - LiteralDate: "ld", - - String: "s", - StringAffix: "sa", - StringBacktick: "sb", - StringChar: "sc", - StringDelimiter: "dl", - StringDoc: "sd", - StringDouble: "s2", - StringEscape: "se", - StringHeredoc: "sh", - StringInterpol: "si", - StringOther: "sx", - StringRegex: "sr", - StringSingle: "s1", - StringSymbol: "ss", - - Number: "m", - NumberBin: "mb", - NumberFloat: "mf", - NumberHex: "mh", - NumberInteger: "mi", - NumberIntegerLong: "il", - NumberOct: "mo", - - Operator: "o", - OperatorWord: "ow", - - Punctuation: "p", - - Comment: "c", - CommentHashbang: "ch", - CommentMultiline: "cm", - CommentPreproc: "cp", - CommentPreprocFile: "cpf", - CommentSingle: "c1", - CommentSpecial: "cs", - - Generic: "g", - GenericDeleted: "gd", - GenericEmph: "ge", - GenericError: "gr", - GenericHeading: "gh", - GenericInserted: "gi", - GenericOutput: "go", - GenericPrompt: "gp", - GenericStrong: "gs", - GenericSubheading: "gu", - GenericTraceback: "gt", - GenericUnderline: "gl", - } -) - -func (t TokenType) Parent() TokenType { - if t%100 != 0 { - return t / 100 * 100 - } - if t%1000 != 0 { - return t / 1000 * 1000 - } - return 0 -} - -func (t TokenType) Category() TokenType { - return t / 1000 * 1000 -} - -func (t TokenType) SubCategory() TokenType { - return t / 100 * 100 -} - -func (t TokenType) InCategory(other TokenType) bool { - return t/1000 == other/1000 -} - -func (t TokenType) InSubCategory(other TokenType) bool { - return t/100 == other/100 -} - -func (t TokenType) Emit(groups []string, lexer Lexer) Iterator { - return Literator(Token{Type: t, Value: groups[0]}) -} diff --git a/vendor/github.com/danwakefield/fnmatch/.gitignore b/vendor/github.com/danwakefield/fnmatch/.gitignore deleted file mode 100644 index daf913b..0000000 --- a/vendor/github.com/danwakefield/fnmatch/.gitignore +++ /dev/null @@ -1,24 +0,0 @@ -# Compiled Object files, Static and Dynamic libs (Shared Objects) -*.o -*.a -*.so - -# Folders -_obj -_test - -# Architecture specific extensions/prefixes -*.[568vq] -[568vq].out - -*.cgo1.go -*.cgo2.c -_cgo_defun.c -_cgo_gotypes.go -_cgo_export.* - -_testmain.go - -*.exe -*.test -*.prof diff --git a/vendor/github.com/danwakefield/fnmatch/LICENSE b/vendor/github.com/danwakefield/fnmatch/LICENSE deleted file mode 100644 index 0dc9851..0000000 --- a/vendor/github.com/danwakefield/fnmatch/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ -Copyright (c) 2016, Daniel Wakefield -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/danwakefield/fnmatch/README.md b/vendor/github.com/danwakefield/fnmatch/README.md deleted file mode 100644 index b8d7156..0000000 --- a/vendor/github.com/danwakefield/fnmatch/README.md +++ /dev/null @@ -1,4 +0,0 @@ -# fnmatch -Updated clone of kballards golang fnmatch gist (https://gist.github.com/kballard/272720) - - diff --git a/vendor/github.com/danwakefield/fnmatch/fnmatch.go b/vendor/github.com/danwakefield/fnmatch/fnmatch.go deleted file mode 100644 index 07ac7b3..0000000 --- a/vendor/github.com/danwakefield/fnmatch/fnmatch.go +++ /dev/null @@ -1,219 +0,0 @@ -// Provide string-matching based on fnmatch.3 -package fnmatch - -// There are a few issues that I believe to be bugs, but this implementation is -// based as closely as possible on BSD fnmatch. These bugs are present in the -// source of BSD fnmatch, and so are replicated here. The issues are as follows: -// -// * FNM_PERIOD is no longer observed after the first * in a pattern -// This only applies to matches done with FNM_PATHNAME as well -// * FNM_PERIOD doesn't apply to ranges. According to the documentation, -// a period must be matched explicitly, but a range will match it too - -import ( - "unicode" - "unicode/utf8" -) - -const ( - FNM_NOESCAPE = (1 << iota) - FNM_PATHNAME - FNM_PERIOD - - FNM_LEADING_DIR - FNM_CASEFOLD - - FNM_IGNORECASE = FNM_CASEFOLD - FNM_FILE_NAME = FNM_PATHNAME -) - -func unpackRune(str *string) rune { - rune, size := utf8.DecodeRuneInString(*str) - *str = (*str)[size:] - return rune -} - -// Matches the pattern against the string, with the given flags, -// and returns true if the match is successful. -// This function should match fnmatch.3 as closely as possible. -func Match(pattern, s string, flags int) bool { - // The implementation for this function was patterned after the BSD fnmatch.c - // source found at http://src.gnu-darwin.org/src/contrib/csup/fnmatch.c.html - noescape := (flags&FNM_NOESCAPE != 0) - pathname := (flags&FNM_PATHNAME != 0) - period := (flags&FNM_PERIOD != 0) - leadingdir := (flags&FNM_LEADING_DIR != 0) - casefold := (flags&FNM_CASEFOLD != 0) - // the following is some bookkeeping that the original fnmatch.c implementation did not do - // We are forced to do this because we're not keeping indexes into C strings but rather - // processing utf8-encoded strings. Use a custom unpacker to maintain our state for us - sAtStart := true - sLastAtStart := true - sLastSlash := false - sLastUnpacked := rune(0) - unpackS := func() rune { - sLastSlash = (sLastUnpacked == '/') - sLastUnpacked = unpackRune(&s) - sLastAtStart = sAtStart - sAtStart = false - return sLastUnpacked - } - for len(pattern) > 0 { - c := unpackRune(&pattern) - switch c { - case '?': - if len(s) == 0 { - return false - } - sc := unpackS() - if pathname && sc == '/' { - return false - } - if period && sc == '.' && (sLastAtStart || (pathname && sLastSlash)) { - return false - } - case '*': - // collapse multiple *'s - // don't use unpackRune here, the only char we care to detect is ASCII - for len(pattern) > 0 && pattern[0] == '*' { - pattern = pattern[1:] - } - if period && s[0] == '.' && (sAtStart || (pathname && sLastUnpacked == '/')) { - return false - } - // optimize for patterns with * at end or before / - if len(pattern) == 0 { - if pathname { - return leadingdir || (strchr(s, '/') == -1) - } else { - return true - } - return !(pathname && strchr(s, '/') >= 0) - } else if pathname && pattern[0] == '/' { - offset := strchr(s, '/') - if offset == -1 { - return false - } else { - // we already know our pattern and string have a /, skip past it - s = s[offset:] // use unpackS here to maintain our bookkeeping state - unpackS() - pattern = pattern[1:] // we know / is one byte long - break - } - } - // general case, recurse - for test := s; len(test) > 0; unpackRune(&test) { - // I believe the (flags &^ FNM_PERIOD) is a bug when FNM_PATHNAME is specified - // but this follows exactly from how fnmatch.c implements it - if Match(pattern, test, (flags &^ FNM_PERIOD)) { - return true - } else if pathname && test[0] == '/' { - break - } - } - return false - case '[': - if len(s) == 0 { - return false - } - if pathname && s[0] == '/' { - return false - } - sc := unpackS() - if !rangematch(&pattern, sc, flags) { - return false - } - case '\\': - if !noescape { - if len(pattern) > 0 { - c = unpackRune(&pattern) - } - } - fallthrough - default: - if len(s) == 0 { - return false - } - sc := unpackS() - switch { - case sc == c: - case casefold && unicode.ToLower(sc) == unicode.ToLower(c): - default: - return false - } - } - } - return len(s) == 0 || (leadingdir && s[0] == '/') -} - -func rangematch(pattern *string, test rune, flags int) bool { - if len(*pattern) == 0 { - return false - } - casefold := (flags&FNM_CASEFOLD != 0) - noescape := (flags&FNM_NOESCAPE != 0) - if casefold { - test = unicode.ToLower(test) - } - var negate, matched bool - if (*pattern)[0] == '^' || (*pattern)[0] == '!' { - negate = true - (*pattern) = (*pattern)[1:] - } - for !matched && len(*pattern) > 1 && (*pattern)[0] != ']' { - c := unpackRune(pattern) - if !noescape && c == '\\' { - if len(*pattern) > 1 { - c = unpackRune(pattern) - } else { - return false - } - } - if casefold { - c = unicode.ToLower(c) - } - if (*pattern)[0] == '-' && len(*pattern) > 1 && (*pattern)[1] != ']' { - unpackRune(pattern) // skip the - - c2 := unpackRune(pattern) - if !noescape && c2 == '\\' { - if len(*pattern) > 0 { - c2 = unpackRune(pattern) - } else { - return false - } - } - if casefold { - c2 = unicode.ToLower(c2) - } - // this really should be more intelligent, but it looks like - // fnmatch.c does simple int comparisons, therefore we will as well - if c <= test && test <= c2 { - matched = true - } - } else if c == test { - matched = true - } - } - // skip past the rest of the pattern - ok := false - for !ok && len(*pattern) > 0 { - c := unpackRune(pattern) - if c == '\\' && len(*pattern) > 0 { - unpackRune(pattern) - } else if c == ']' { - ok = true - } - } - return ok && matched != negate -} - -// define strchr because strings.Index() seems a bit overkill -// returns the index of c in s, or -1 if there is no match -func strchr(s string, c rune) int { - for i, sc := range s { - if sc == c { - return i - } - } - return -1 -} diff --git a/vendor/github.com/dchest/captcha/.gitignore b/vendor/github.com/dchest/captcha/.gitignore deleted file mode 100644 index ea1cde5..0000000 --- a/vendor/github.com/dchest/captcha/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -# Generated test captchas -capgen/*.png -capgen/*.wav - -# Programs -capgen/capgen -cangensounds/cangensounds -capexample/capexample diff --git a/vendor/github.com/dchest/captcha/LICENSE b/vendor/github.com/dchest/captcha/LICENSE deleted file mode 100644 index 0ad73ae..0000000 --- a/vendor/github.com/dchest/captcha/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2011-2014 Dmitry Chestnykh - -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/dchest/captcha/README.md b/vendor/github.com/dchest/captcha/README.md deleted file mode 100644 index 02ac3a9..0000000 --- a/vendor/github.com/dchest/captcha/README.md +++ /dev/null @@ -1,275 +0,0 @@ -Package captcha -===================== - - import "github.com/dchest/captcha" - -Package captcha implements generation and verification of image and audio -CAPTCHAs. - -A captcha solution is the sequence of digits 0-9 with the defined length. -There are two captcha representations: image and audio. - -An image representation is a PNG-encoded image with the solution printed on -it in such a way that makes it hard for computers to solve it using OCR. - -An audio representation is a WAVE-encoded (8 kHz unsigned 8-bit) sound with the -spoken solution (currently in English, Russian, Chinese, and Japanese). To make -it hard for computers to solve audio captcha, the voice that pronounces numbers -has random speed and pitch, and there is a randomly generated background noise -mixed into the sound. - -This package doesn't require external files or libraries to generate captcha -representations; it is self-contained. - -To make captchas one-time, the package includes a memory storage that stores -captcha ids, their solutions, and expiration time. Used captchas are removed -from the store immediately after calling Verify or VerifyString, while -unused captchas (user loaded a page with captcha, but didn't submit the -form) are collected automatically after the predefined expiration time. -Developers can also provide custom store (for example, which saves captcha -ids and solutions in database) by implementing Store interface and -registering the object with SetCustomStore. - -Captchas are created by calling New, which returns the captcha id. Their -representations, though, are created on-the-fly by calling WriteImage or -WriteAudio functions. Created representations are not stored anywhere, but -subsequent calls to these functions with the same id will write the same -captcha solution. Reload function will create a new different solution for the -provided captcha, allowing users to "reload" captcha if they can't solve the -displayed one without reloading the whole page. Verify and VerifyString are -used to verify that the given solution is the right one for the given captcha -id. - -Server provides an http.Handler which can serve image and audio -representations of captchas automatically from the URL. It can also be used -to reload captchas. Refer to Server function documentation for details, or -take a look at the example in "capexample" subdirectory. - - -Examples --------- - -![Image](https://github.com/dchest/captcha/raw/master/capgen/example.png) - -[Audio](https://github.com/dchest/captcha/raw/master/capgen/example.wav) - - -Constants ---------- - -``` go -const ( - // Default number of digits in captcha solution. - DefaultLen = 6 - // The number of captchas created that triggers garbage collection used - // by default store. - CollectNum = 100 - // Expiration time of captchas used by default store. - Expiration = 10 * time.Minute -) -``` - -``` go -const ( - // Standard width and height of a captcha image. - StdWidth = 240 - StdHeight = 80 -) -``` - - -Variables ---------- - -``` go -var ( - ErrNotFound = errors.New("captcha: id not found") -) -``` - - - -Functions ---------- - -### func New - - func New() string - -New creates a new captcha with the standard length, saves it in the internal -storage and returns its id. - -### func NewLen - - func NewLen(length int) (id string) - -NewLen is just like New, but accepts length of a captcha solution as the -argument. - -### func RandomDigits - - func RandomDigits(length int) (b []byte) - -RandomDigits returns a byte slice of the given length containing -pseudorandom numbers in range 0-9. The slice can be used as a captcha -solution. - -### func Reload - - func Reload(id string) bool - -Reload generates and remembers new digits for the given captcha id. This -function returns false if there is no captcha with the given id. - -After calling this function, the image or audio presented to a user must be -refreshed to show the new captcha representation (WriteImage and WriteAudio -will write the new one). - -### func Server - - func Server(imgWidth, imgHeight int) http.Handler - -Server returns a handler that serves HTTP requests with image or -audio representations of captchas. Image dimensions are accepted as -arguments. The server decides which captcha to serve based on the last URL -path component: file name part must contain a captcha id, file extension — -its format (PNG or WAV). - -For example, for file name "LBm5vMjHDtdUfaWYXiQX.png" it serves an image captcha -with id "LBm5vMjHDtdUfaWYXiQX", and for "LBm5vMjHDtdUfaWYXiQX.wav" it serves the -same captcha in audio format. - -To serve a captcha as a downloadable file, the URL must be constructed in -such a way as if the file to serve is in the "download" subdirectory: -"/download/LBm5vMjHDtdUfaWYXiQX.wav". - -To reload captcha (get a different solution for the same captcha id), append -"?reload=x" to URL, where x may be anything (for example, current time or a -random number to make browsers refetch an image instead of loading it from -cache). - -By default, the Server serves audio in English language. To serve audio -captcha in one of the other supported languages, append "lang" value, for -example, "?lang=ru". - -### func SetCustomStore - - func SetCustomStore(s Store) - -SetCustomStore sets custom storage for captchas, replacing the default -memory store. This function must be called before generating any captchas. - -### func Verify - - func Verify(id string, digits []byte) bool - -Verify returns true if the given digits are the ones that were used to -create the given captcha id. - -The function deletes the captcha with the given id from the internal -storage, so that the same captcha can't be verified anymore. - -### func VerifyString - - func VerifyString(id string, digits string) bool - -VerifyString is like Verify, but accepts a string of digits. It removes -spaces and commas from the string, but any other characters, apart from -digits and listed above, will cause the function to return false. - -### func WriteAudio - - func WriteAudio(w io.Writer, id string, lang string) error - -WriteAudio writes WAV-encoded audio representation of the captcha with the -given id and the given language. If there are no sounds for the given -language, English is used. - -### func WriteImage - - func WriteImage(w io.Writer, id string, width, height int) error - -WriteImage writes PNG-encoded image representation of the captcha with the -given id. The image will have the given width and height. - - -Types ------ - -``` go -type Audio struct { - // contains unexported fields -} -``` - - -### func NewAudio - - func NewAudio(id string, digits []byte, lang string) *Audio - -NewAudio returns a new audio captcha with the given digits, where each digit -must be in range 0-9. Digits are pronounced in the given language. If there -are no sounds for the given language, English is used. - -Possible values for lang are "en", "ja", "ru", "zh". - -### func (*Audio) EncodedLen - - func (a *Audio) EncodedLen() int - -EncodedLen returns the length of WAV-encoded audio captcha. - -### func (*Audio) WriteTo - - func (a *Audio) WriteTo(w io.Writer) (n int64, err error) - -WriteTo writes captcha audio in WAVE format into the given io.Writer, and -returns the number of bytes written and an error if any. - -``` go -type Image struct { - *image.Paletted - // contains unexported fields -} -``` - - -### func NewImage - - func NewImage(id string, digits []byte, width, height int) *Image - -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 (*Image) WriteTo - - func (m *Image) WriteTo(w io.Writer) (int64, error) - -WriteTo writes captcha image in PNG format into the given writer. - -``` go -type Store interface { - // Set sets the digits for the captcha id. - Set(id string, digits []byte) - - // Get returns stored digits for the captcha id. Clear indicates - // whether the captcha must be deleted from the store. - Get(id string, clear bool) (digits []byte) -} -``` - -An object implementing Store interface can be registered with SetCustomStore -function to handle storage and retrieval of captcha ids and solutions for -them, replacing the default memory store. - -It is the responsibility of an object to delete expired and used captchas -when necessary (for example, the default memory store collects them in Set -method after the certain amount of captchas has been stored.) - -### func NewMemoryStore - - func NewMemoryStore(collectNum int, expiration time.Duration) Store - -NewMemoryStore returns a new standard memory store for captchas with the -given collection threshold and expiration time in seconds. The returned -store must be registered with SetCustomStore to replace the default one. diff --git a/vendor/github.com/dchest/captcha/audio.go b/vendor/github.com/dchest/captcha/audio.go deleted file mode 100644 index cbcaa30..0000000 --- a/vendor/github.com/dchest/captcha/audio.go +++ /dev/null @@ -1,232 +0,0 @@ -// Copyright 2011-2014 Dmitry Chestnykh. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package captcha - -import ( - "bytes" - "encoding/binary" - "io" - "math" -) - -const sampleRate = 8000 // Hz - -var endingBeepSound []byte - -func init() { - endingBeepSound = changeSpeed(beepSound, 1.4) -} - -type Audio struct { - body *bytes.Buffer - digitSounds [][]byte - rng siprng -} - -// NewAudio returns a new audio captcha with the given digits, where each digit -// must be in range 0-9. Digits are pronounced in the given language. If there -// are no sounds for the given language, English is used. -// -// Possible values for lang are "en", "ja", "ru", "zh". -func NewAudio(id string, digits []byte, lang string) *Audio { - a := new(Audio) - - // Initialize PRNG. - a.rng.Seed(deriveSeed(audioSeedPurpose, id, digits)) - - if sounds, ok := digitSounds[lang]; ok { - a.digitSounds = sounds - } else { - a.digitSounds = digitSounds["en"] - } - numsnd := make([][]byte, len(digits)) - nsdur := 0 - for i, n := range digits { - snd := a.randomizedDigitSound(n) - nsdur += len(snd) - numsnd[i] = snd - } - // Random intervals between digits (including beginning). - intervals := make([]int, len(digits)+1) - intdur := 0 - for i := range intervals { - dur := a.rng.Int(sampleRate, sampleRate*3) // 1 to 3 seconds - intdur += dur - intervals[i] = dur - } - // Generate background sound. - bg := a.makeBackgroundSound(a.longestDigitSndLen()*len(digits) + intdur) - // Create buffer and write audio to it. - sil := makeSilence(sampleRate / 5) - bufcap := 3*len(beepSound) + 2*len(sil) + len(bg) + len(endingBeepSound) - a.body = bytes.NewBuffer(make([]byte, 0, bufcap)) - // Write prelude, three beeps. - a.body.Write(beepSound) - a.body.Write(sil) - a.body.Write(beepSound) - a.body.Write(sil) - a.body.Write(beepSound) - // Write digits. - pos := intervals[0] - for i, v := range numsnd { - mixSound(bg[pos:], v) - pos += len(v) + intervals[i+1] - } - a.body.Write(bg) - // Write ending (one beep). - a.body.Write(endingBeepSound) - return a -} - -// WriteTo writes captcha audio in WAVE format into the given io.Writer, and -// returns the number of bytes written and an error if any. -func (a *Audio) WriteTo(w io.Writer) (n int64, err error) { - // Calculate padded length of PCM chunk data. - bodyLen := uint32(a.body.Len()) - paddedBodyLen := bodyLen - if bodyLen%2 != 0 { - paddedBodyLen++ - } - totalLen := uint32(len(waveHeader)) - 4 + paddedBodyLen - // Header. - header := make([]byte, len(waveHeader)+4) // includes 4 bytes for chunk size - copy(header, waveHeader) - // Put the length of whole RIFF chunk. - binary.LittleEndian.PutUint32(header[4:], totalLen) - // Put the length of WAVE chunk. - binary.LittleEndian.PutUint32(header[len(waveHeader):], bodyLen) - // Write header. - nn, err := w.Write(header) - n = int64(nn) - if err != nil { - return - } - // Write data. - n, err = a.body.WriteTo(w) - n += int64(nn) - if err != nil { - return - } - // Pad byte if chunk length is odd. - // (As header has even length, we can check if n is odd, not chunk). - if bodyLen != paddedBodyLen { - w.Write([]byte{0}) - n++ - } - return -} - -// EncodedLen returns the length of WAV-encoded audio captcha. -func (a *Audio) EncodedLen() int { - return len(waveHeader) + 4 + a.body.Len() -} - -func (a *Audio) makeBackgroundSound(length int) []byte { - b := a.makeWhiteNoise(length, 4) - for i := 0; i < length/(sampleRate/10); i++ { - snd := reversedSound(a.digitSounds[a.rng.Intn(10)]) - snd = changeSpeed(snd, a.rng.Float(0.8, 1.4)) - place := a.rng.Intn(len(b) - len(snd)) - setSoundLevel(snd, a.rng.Float(0.2, 0.5)) - mixSound(b[place:], snd) - } - return b -} - -func (a *Audio) randomizedDigitSound(n byte) []byte { - s := a.randomSpeed(a.digitSounds[n]) - setSoundLevel(s, a.rng.Float(0.75, 1.2)) - return s -} - -func (a *Audio) longestDigitSndLen() int { - n := 0 - for _, v := range a.digitSounds { - if n < len(v) { - n = len(v) - } - } - return n -} - -func (a *Audio) randomSpeed(b []byte) []byte { - pitch := a.rng.Float(0.9, 1.2) - return changeSpeed(b, pitch) -} - -func (a *Audio) makeWhiteNoise(length int, level uint8) []byte { - noise := a.rng.Bytes(length) - adj := 128 - level/2 - for i, v := range noise { - v %= level - v += adj - noise[i] = v - } - return noise -} - -// mixSound mixes src into dst. Dst must have length equal to or greater than -// src length. -func mixSound(dst, src []byte) { - for i, v := range src { - av := int(v) - bv := int(dst[i]) - if av < 128 && bv < 128 { - dst[i] = byte(av * bv / 128) - } else { - dst[i] = byte(2*(av+bv) - av*bv/128 - 256) - } - } -} - -func setSoundLevel(a []byte, level float64) { - for i, v := range a { - av := float64(v) - switch { - case av > 128: - if av = (av-128)*level + 128; av < 128 { - av = 128 - } - case av < 128: - if av = 128 - (128-av)*level; av > 128 { - av = 128 - } - default: - continue - } - a[i] = byte(av) - } -} - -// changeSpeed returns new PCM bytes from the bytes with the speed and pitch -// changed to the given value that must be in range [0, x]. -func changeSpeed(a []byte, speed float64) []byte { - b := make([]byte, int(math.Floor(float64(len(a))*speed))) - var p float64 - for _, v := range a { - for i := int(p); i < int(p+speed); i++ { - b[i] = v - } - p += speed - } - return b -} - -func makeSilence(length int) []byte { - b := make([]byte, length) - for i := range b { - b[i] = 128 - } - return b -} - -func reversedSound(a []byte) []byte { - n := len(a) - b := make([]byte, n) - for i, v := range a { - b[n-1-i] = v - } - return b -} diff --git a/vendor/github.com/dchest/captcha/captcha.go b/vendor/github.com/dchest/captcha/captcha.go deleted file mode 100644 index 33f6c0d..0000000 --- a/vendor/github.com/dchest/captcha/captcha.go +++ /dev/null @@ -1,165 +0,0 @@ -// Copyright 2011 Dmitry Chestnykh. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -// Package captcha implements generation and verification of image and audio -// CAPTCHAs. -// -// A captcha solution is the sequence of digits 0-9 with the defined length. -// There are two captcha representations: image and audio. -// -// An image representation is a PNG-encoded image with the solution printed on -// it in such a way that makes it hard for computers to solve it using OCR. -// -// An audio representation is a WAVE-encoded (8 kHz unsigned 8-bit) sound with -// the spoken solution (currently in English, Russian, Chinese, and Japanese). -// To make it hard for computers to solve audio captcha, the voice that -// pronounces numbers has random speed and pitch, and there is a randomly -// generated background noise mixed into the sound. -// -// This package doesn't require external files or libraries to generate captcha -// representations; it is self-contained. -// -// To make captchas one-time, the package includes a memory storage that stores -// captcha ids, their solutions, and expiration time. Used captchas are removed -// from the store immediately after calling Verify or VerifyString, while -// unused captchas (user loaded a page with captcha, but didn't submit the -// form) are collected automatically after the predefined expiration time. -// Developers can also provide custom store (for example, which saves captcha -// ids and solutions in database) by implementing Store interface and -// registering the object with SetCustomStore. -// -// Captchas are created by calling New, which returns the captcha id. Their -// representations, though, are created on-the-fly by calling WriteImage or -// WriteAudio functions. Created representations are not stored anywhere, but -// subsequent calls to these functions with the same id will write the same -// captcha solution. Reload function will create a new different solution for -// the provided captcha, allowing users to "reload" captcha if they can't solve -// the displayed one without reloading the whole page. Verify and VerifyString -// are used to verify that the given solution is the right one for the given -// captcha id. -// -// Server provides an http.Handler which can serve image and audio -// representations of captchas automatically from the URL. It can also be used -// to reload captchas. Refer to Server function documentation for details, or -// take a look at the example in "capexample" subdirectory. -package captcha - -import ( - "bytes" - "errors" - "io" - "time" -) - -const ( - // Default number of digits in captcha solution. - DefaultLen = 6 - // The number of captchas created that triggers garbage collection used - // by default store. - CollectNum = 100 - // Expiration time of captchas used by default store. - Expiration = 10 * time.Minute -) - -var ( - ErrNotFound = errors.New("captcha: id not found") - // globalStore is a shared storage for captchas, generated by New function. - globalStore = NewMemoryStore(CollectNum, Expiration) -) - -// SetCustomStore sets custom storage for captchas, replacing the default -// memory store. This function must be called before generating any captchas. -func SetCustomStore(s Store) { - globalStore = s -} - -// New creates a new captcha with the standard length, saves it in the internal -// storage and returns its id. -func New() string { - return NewLen(DefaultLen) -} - -// NewLen is just like New, but accepts length of a captcha solution as the -// argument. -func NewLen(length int) (id string) { - id = randomId() - globalStore.Set(id, RandomDigits(length)) - return -} - -// Reload generates and remembers new digits for the given captcha id. This -// function returns false if there is no captcha with the given id. -// -// After calling this function, the image or audio presented to a user must be -// refreshed to show the new captcha representation (WriteImage and WriteAudio -// will write the new one). -func Reload(id string) bool { - old := globalStore.Get(id, false) - if old == nil { - return false - } - globalStore.Set(id, RandomDigits(len(old))) - return true -} - -// WriteImage writes PNG-encoded image representation of the captcha with the -// given id. The image will have the given width and height. -func WriteImage(w io.Writer, id string, width, height int) error { - d := globalStore.Get(id, false) - if d == nil { - return ErrNotFound - } - _, err := NewImage(id, d, width, height).WriteTo(w) - return err -} - -// WriteAudio writes WAV-encoded audio representation of the captcha with the -// given id and the given language. If there are no sounds for the given -// language, English is used. -func WriteAudio(w io.Writer, id string, lang string) error { - d := globalStore.Get(id, false) - if d == nil { - return ErrNotFound - } - _, err := NewAudio(id, d, lang).WriteTo(w) - return err -} - -// Verify returns true if the given digits are the ones that were used to -// create the given captcha id. -// -// The function deletes the captcha with the given id from the internal -// storage, so that the same captcha can't be verified anymore. -func Verify(id string, digits []byte) bool { - if digits == nil || len(digits) == 0 { - return false - } - reald := globalStore.Get(id, true) - if reald == nil { - return false - } - return bytes.Equal(digits, reald) -} - -// VerifyString is like Verify, but accepts a string of digits. It removes -// spaces and commas from the string, but any other characters, apart from -// digits and listed above, will cause the function to return false. -func VerifyString(id string, digits string) bool { - if digits == "" { - return false - } - ns := make([]byte, len(digits)) - for i := range ns { - d := digits[i] - switch { - case '0' <= d && d <= '9': - ns[i] = d - '0' - case d == ' ' || d == ',': - // ignore - default: - return false - } - } - return Verify(id, ns) -} diff --git a/vendor/github.com/dchest/captcha/font.go b/vendor/github.com/dchest/captcha/font.go deleted file mode 100644 index fedc54d..0000000 --- a/vendor/github.com/dchest/captcha/font.go +++ /dev/null @@ -1,214 +0,0 @@ -// Copyright 2011 Dmitry Chestnykh. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package captcha - -const ( - fontWidth = 11 - fontHeight = 18 - blackChar = 1 -) - -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, - }, -} diff --git a/vendor/github.com/dchest/captcha/image.go b/vendor/github.com/dchest/captcha/image.go deleted file mode 100644 index 4cc1f3c..0000000 --- a/vendor/github.com/dchest/captcha/image.go +++ /dev/null @@ -1,271 +0,0 @@ -// Copyright 2011-2014 Dmitry Chestnykh. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package captcha - -import ( - "bytes" - "image" - "image/color" - "image/png" - "io" - "math" -) - -const ( - // 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 -) - -type Image struct { - *image.Paletted - numWidth int - numHeight int - dotSize int - rng siprng -} - -// 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(id string, digits []byte, width, height int) *Image { - m := new(Image) - - // Initialize PRNG. - m.rng.Seed(deriveSeed(imageSeedPurpose, id, digits)) - - m.Paletted = image.NewPaletted(image.Rect(0, 0, width, height), m.getRandomPalette()) - 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 := m.rng.Int(border, maxx-border) - y := m.rng.Int(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(m.rng.Float(5, 10), m.rng.Float(100, 200)) - // Fill image with random circles. - m.fillWithCircles(circleCount, m.dotSize) - return m -} - -func (m *Image) getRandomPalette() color.Palette { - p := make([]color.Color, circleCount+1) - // Transparent color. - p[0] = color.RGBA{0xFF, 0xFF, 0xFF, 0x00} - // Primary color. - prim := color.RGBA{ - uint8(m.rng.Intn(129)), - uint8(m.rng.Intn(129)), - uint8(m.rng.Intn(129)), - 0xFF, - } - p[1] = prim - // Circle colors. - for i := 2; i <= circleCount; i++ { - p[i] = m.randomBrightness(prim, 255) - } - return p -} - -// 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) - if m.dotSize < 1 { - m.dotSize = 1 - } - // 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(m.rng.Int(1, circleCount-1)) - r := m.rng.Int(1, maxradius) - m.drawCircle(m.rng.Int(r, maxx-r), m.rng.Int(r, maxy-r), r, colorIdx) - } -} - -func (m *Image) strikeThrough() { - maxx := m.Bounds().Max.X - maxy := m.Bounds().Max.Y - y := m.rng.Int(maxy/3, maxy-maxy/3) - amplitude := m.rng.Float(5, 20) - period := m.rng.Float(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 := m.rng.Int(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 := m.rng.Float(-maxSkew, maxSkew) - xs := float64(x) - r := m.dotSize / 2 - y += m.rng.Int(-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 (m *Image) 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 := m.rng.Intn(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/dchest/captcha/random.go b/vendor/github.com/dchest/captcha/random.go deleted file mode 100644 index 96703c2..0000000 --- a/vendor/github.com/dchest/captcha/random.go +++ /dev/null @@ -1,108 +0,0 @@ -// Copyright 2011-2014 Dmitry Chestnykh. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package captcha - -import ( - "crypto/hmac" - "crypto/rand" - "crypto/sha256" - "io" -) - -// idLen is a length of captcha id string. -// (20 bytes of 62-letter alphabet give ~119 bits.) -const idLen = 20 - -// idChars are characters allowed in captcha id. -var idChars = []byte("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789") - -// rngKey is a secret key used to deterministically derive seeds for -// PRNGs used in image and audio. Generated once during initialization. -var rngKey [32]byte - -func init() { - if _, err := io.ReadFull(rand.Reader, rngKey[:]); err != nil { - panic("captcha: error reading random source: " + err.Error()) - } -} - -// Purposes for seed derivation. The goal is to make deterministic PRNG produce -// different outputs for images and audio by using different derived seeds. -const ( - imageSeedPurpose = 0x01 - audioSeedPurpose = 0x02 -) - -// deriveSeed returns a 16-byte PRNG seed from rngKey, purpose, id and digits. -// Same purpose, id and digits will result in the same derived seed for this -// instance of running application. -// -// out = HMAC(rngKey, purpose || id || 0x00 || digits) (cut to 16 bytes) -// -func deriveSeed(purpose byte, id string, digits []byte) (out [16]byte) { - var buf [sha256.Size]byte - h := hmac.New(sha256.New, rngKey[:]) - h.Write([]byte{purpose}) - io.WriteString(h, id) - h.Write([]byte{0}) - h.Write(digits) - sum := h.Sum(buf[:0]) - copy(out[:], sum) - return -} - -// RandomDigits returns a byte slice of the given length containing -// pseudorandom numbers in range 0-9. The slice can be used as a captcha -// solution. -func RandomDigits(length int) []byte { - return randomBytesMod(length, 10) -} - -// randomBytes returns a byte slice of the given length read from CSPRNG. -func randomBytes(length int) (b []byte) { - b = make([]byte, length) - if _, err := io.ReadFull(rand.Reader, b); err != nil { - panic("captcha: error reading random source: " + err.Error()) - } - return -} - -// randomBytesMod returns a byte slice of the given length, where each byte is -// a random number modulo mod. -func randomBytesMod(length int, mod byte) (b []byte) { - if length == 0 { - return nil - } - if mod == 0 { - panic("captcha: bad mod argument for randomBytesMod") - } - maxrb := 255 - byte(256%int(mod)) - b = make([]byte, length) - i := 0 - for { - r := randomBytes(length + (length / 4)) - for _, c := range r { - if c > maxrb { - // Skip this number to avoid modulo bias. - continue - } - b[i] = c % mod - i++ - if i == length { - return - } - } - } - -} - -// randomId returns a new random id string. -func randomId() string { - b := randomBytesMod(idLen, byte(len(idChars))) - for i, c := range b { - b[i] = idChars[c] - } - return string(b) -} diff --git a/vendor/github.com/dchest/captcha/server.go b/vendor/github.com/dchest/captcha/server.go deleted file mode 100644 index cae2a14..0000000 --- a/vendor/github.com/dchest/captcha/server.go +++ /dev/null @@ -1,87 +0,0 @@ -// Copyright 2011 Dmitry Chestnykh. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package captcha - -import ( - "bytes" - "net/http" - "path" - "strings" - "time" -) - -type captchaHandler struct { - imgWidth int - imgHeight int -} - -// Server returns a handler that serves HTTP requests with image or -// audio representations of captchas. Image dimensions are accepted as -// arguments. The server decides which captcha to serve based on the last URL -// path component: file name part must contain a captcha id, file extension — -// its format (PNG or WAV). -// -// For example, for file name "LBm5vMjHDtdUfaWYXiQX.png" it serves an image captcha -// with id "LBm5vMjHDtdUfaWYXiQX", and for "LBm5vMjHDtdUfaWYXiQX.wav" it serves the -// same captcha in audio format. -// -// To serve a captcha as a downloadable file, the URL must be constructed in -// such a way as if the file to serve is in the "download" subdirectory: -// "/download/LBm5vMjHDtdUfaWYXiQX.wav". -// -// To reload captcha (get a different solution for the same captcha id), append -// "?reload=x" to URL, where x may be anything (for example, current time or a -// random number to make browsers refetch an image instead of loading it from -// cache). -// -// By default, the Server serves audio in English language. To serve audio -// captcha in one of the other supported languages, append "lang" value, for -// example, "?lang=ru". -func Server(imgWidth, imgHeight int) http.Handler { - return &captchaHandler{imgWidth, imgHeight} -} - -func (h *captchaHandler) serve(w http.ResponseWriter, r *http.Request, id, ext, lang string, download bool) error { - w.Header().Set("Cache-Control", "no-cache, no-store, must-revalidate") - w.Header().Set("Pragma", "no-cache") - w.Header().Set("Expires", "0") - - var content bytes.Buffer - switch ext { - case ".png": - w.Header().Set("Content-Type", "image/png") - WriteImage(&content, id, h.imgWidth, h.imgHeight) - case ".wav": - w.Header().Set("Content-Type", "audio/x-wav") - WriteAudio(&content, id, lang) - default: - return ErrNotFound - } - - if download { - w.Header().Set("Content-Type", "application/octet-stream") - } - http.ServeContent(w, r, id+ext, time.Time{}, bytes.NewReader(content.Bytes())) - return nil -} - -func (h *captchaHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { - dir, file := path.Split(r.URL.Path) - ext := path.Ext(file) - id := file[:len(file)-len(ext)] - if ext == "" || id == "" { - http.NotFound(w, r) - return - } - if r.FormValue("reload") != "" { - Reload(id) - } - lang := strings.ToLower(r.FormValue("lang")) - download := path.Base(dir) == "download" - if h.serve(w, r, id, ext, lang, download) == ErrNotFound { - http.NotFound(w, r) - } - // Ignore other errors. -} diff --git a/vendor/github.com/dchest/captcha/siprng.go b/vendor/github.com/dchest/captcha/siprng.go deleted file mode 100644 index d35bf1e..0000000 --- a/vendor/github.com/dchest/captcha/siprng.go +++ /dev/null @@ -1,278 +0,0 @@ -// Copyright 2014 Dmitry Chestnykh. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package captcha - -import "encoding/binary" - -// siprng is PRNG based on SipHash-2-4. -// (Note: it's not safe to use a single siprng from multiple goroutines.) -type siprng struct { - 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 -} - -// Seed sets a new secret seed for PRNG. -func (p *siprng) Seed(k [16]byte) { - 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. -func (p *siprng) Uint64() uint64 { - v := siphash(p.k0, p.k1, p.ctr) - p.ctr++ - return v -} - -func (p *siprng) Bytes(n int) []byte { - // Since we don't have a buffer for generated bytes in siprng state, - // we just generate enough 8-byte blocks and then cut the result to the - // required length. Doing it this way, we lose generated bytes, and we - // don't get the strictly sequential deterministic output from PRNG: - // calling Uint64() and then Bytes(3) produces different output than - // when calling them in the reverse order, but for our applications - // this is OK. - numBlocks := (n + 8 - 1) / 8 - b := make([]byte, numBlocks*8) - for i := 0; i < len(b); i += 8 { - binary.LittleEndian.PutUint64(b[i:], p.Uint64()) - } - return b[:n] -} - -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) } - -// Int returns a pseudorandom int in range [from, to]. -func (p *siprng) Int(from, to int) int { - return p.Intn(to+1-from) + from -} - -// Float returns a pseudorandom float64 in range [from, to]. -func (p *siprng) Float(from, to float64) float64 { - return (to-from)*p.Float64() + from -} diff --git a/vendor/github.com/dchest/captcha/sounds.go b/vendor/github.com/dchest/captcha/sounds.go deleted file mode 100644 index b5aab0c..0000000 --- a/vendor/github.com/dchest/captcha/sounds.go +++ /dev/null @@ -1,9726 +0,0 @@ -package captcha - -// This file has been generated from .wav files using generate.go. - -var waveHeader = []byte{ - 0x52, 0x49, 0x46, 0x46, 0x00, 0x00, 0x00, 0x00, 0x57, 0x41, 0x56, 0x45, - 0x66, 0x6d, 0x74, 0x20, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, - 0x40, 0x1f, 0x00, 0x00, 0x40, 0x1f, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, - 0x64, 0x61, 0x74, 0x61, -} - -// Byte slices contain raw 8 kHz unsigned 8-bit PCM data (without wav header). - -var digitSounds = map[string][][]byte{ - "en": [][]byte{ - { // 0 - 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, - 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, - 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x7f, - 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x7e, 0x7d, - 0x7e, 0x7c, 0x7e, 0x7e, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x82, 0x81, - 0x83, 0x82, 0x84, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8a, - 0x8c, 0x8a, 0x8b, 0x8b, 0x8a, 0x8a, 0x88, 0x88, 0x86, 0x84, 0x82, - 0x80, 0x7e, 0x7c, 0x7c, 0x7b, 0x7c, 0x79, 0x77, 0x78, 0x76, 0x75, - 0x73, 0x75, 0x75, 0x75, 0x73, 0x72, 0x71, 0x73, 0x76, 0x70, 0x76, - 0x71, 0x77, 0x75, 0x74, 0x78, 0x73, 0x79, 0x76, 0x76, 0x75, 0x75, - 0x75, 0x79, 0x7f, 0x80, 0x81, 0x83, 0x88, 0x8d, 0x90, 0x91, 0x91, - 0x94, 0x98, 0x97, 0x97, 0x95, 0x94, 0x93, 0x92, 0x8d, 0x8a, 0x86, - 0x84, 0x81, 0x81, 0x7f, 0x7f, 0x80, 0x7f, 0x81, 0x81, 0x85, 0x81, - 0x85, 0x85, 0x86, 0x88, 0x84, 0x83, 0x7d, 0x79, 0x77, 0x77, 0x77, - 0x75, 0x72, 0x75, 0x75, 0x75, 0x72, 0x73, 0x72, 0x76, 0x76, 0x74, - 0x74, 0x75, 0x77, 0x78, 0x79, 0x76, 0x79, 0x78, 0x7c, 0x7c, 0x7c, - 0x7d, 0x7e, 0x7e, 0x7f, 0x7b, 0x7e, 0x7c, 0x7e, 0x7f, 0x80, 0x80, - 0x7f, 0x85, 0x84, 0x89, 0x85, 0x89, 0x8c, 0x8e, 0x8e, 0x8d, 0x90, - 0x90, 0x91, 0x8c, 0x8d, 0x89, 0x8c, 0x8a, 0x88, 0x89, 0x84, 0x87, - 0x85, 0x86, 0x83, 0x84, 0x82, 0x7f, 0x85, 0x81, 0x81, 0x7e, 0x80, - 0x7d, 0x7e, 0x7e, 0x79, 0x7c, 0x7a, 0x7a, 0x79, 0x79, 0x77, 0x78, - 0x79, 0x77, 0x76, 0x79, 0x78, 0x79, 0x77, 0x79, 0x79, 0x79, 0x78, - 0x78, 0x7a, 0x78, 0x7b, 0x79, 0x7a, 0x79, 0x7b, 0x7b, 0x79, 0x7c, - 0x79, 0x7d, 0x7c, 0x7d, 0x7d, 0x7c, 0x7e, 0x7d, 0x7f, 0x7c, 0x7f, - 0x7c, 0x7f, 0x7f, 0x82, 0x81, 0x82, 0x84, 0x82, 0x89, 0x82, 0x8a, - 0x83, 0x8b, 0x88, 0x86, 0x8b, 0x85, 0x8d, 0x86, 0x89, 0x84, 0x89, - 0x88, 0x84, 0x84, 0x83, 0x85, 0x83, 0x82, 0x80, 0x84, 0x81, 0x83, - 0x7f, 0x80, 0x82, 0x7e, 0x81, 0x7c, 0x7f, 0x7d, 0x7c, 0x7c, 0x7b, - 0x7d, 0x7a, 0x7d, 0x79, 0x7c, 0x7b, 0x7a, 0x7d, 0x79, 0x7d, 0x7d, - 0x7b, 0x7d, 0x79, 0x7e, 0x7d, 0x79, 0x7d, 0x7a, 0x7d, 0x7f, 0x7b, - 0x7d, 0x7c, 0x7d, 0x7d, 0x7a, 0x7e, 0x7c, 0x7e, 0x7e, 0x7c, 0x7e, - 0x7f, 0x81, 0x7f, 0x7d, 0x81, 0x80, 0x82, 0x80, 0x81, 0x84, 0x85, - 0x87, 0x84, 0x85, 0x86, 0x8a, 0x85, 0x88, 0x85, 0x8b, 0x87, 0x88, - 0x87, 0x84, 0x89, 0x84, 0x86, 0x81, 0x84, 0x84, 0x82, 0x83, 0x81, - 0x81, 0x83, 0x81, 0x80, 0x7e, 0x82, 0x7c, 0x80, 0x7e, 0x7b, 0x82, - 0x78, 0x7f, 0x7c, 0x79, 0x7e, 0x77, 0x7c, 0x7e, 0x7a, 0x7b, 0x7a, - 0x7c, 0x7d, 0x77, 0x7b, 0x7a, 0x7e, 0x7e, 0x7a, 0x7e, 0x7a, 0x7d, - 0x7a, 0x7b, 0x7c, 0x7b, 0x7e, 0x7b, 0x7a, 0x7f, 0x7c, 0x7c, 0x7d, - 0x7b, 0x7f, 0x7e, 0x7f, 0x7c, 0x80, 0x80, 0x80, 0x80, 0x81, 0x82, - 0x82, 0x85, 0x82, 0x88, 0x83, 0x88, 0x84, 0x88, 0x89, 0x85, 0x88, - 0x85, 0x8a, 0x85, 0x86, 0x85, 0x86, 0x86, 0x83, 0x81, 0x84, 0x85, - 0x81, 0x7f, 0x80, 0x81, 0x81, 0x7e, 0x7c, 0x7e, 0x85, 0x7c, 0x7b, - 0x7d, 0x81, 0x7f, 0x77, 0x7d, 0x77, 0x85, 0x79, 0x78, 0x7e, 0x78, - 0x82, 0x72, 0x7e, 0x7c, 0x7b, 0x80, 0x76, 0x7f, 0x7e, 0x7a, 0x76, - 0x7d, 0x7c, 0x76, 0x7b, 0x75, 0x7b, 0x7a, 0x77, 0x77, 0x77, 0x7e, - 0x7c, 0x7a, 0x7a, 0x83, 0x87, 0x7d, 0x86, 0x84, 0x8c, 0x8a, 0x87, - 0x89, 0x8b, 0x90, 0x87, 0x88, 0x86, 0x8f, 0x89, 0x83, 0x89, 0x86, - 0x89, 0x89, 0x7c, 0x87, 0x88, 0x80, 0x81, 0x7f, 0x87, 0x82, 0x81, - 0x7d, 0x85, 0x84, 0x7a, 0x7e, 0x7f, 0x7b, 0x83, 0x78, 0x79, 0x82, - 0x78, 0x7c, 0x76, 0x7b, 0x78, 0x7b, 0x78, 0x72, 0x7e, 0x76, 0x6f, - 0x78, 0x74, 0x6a, 0x77, 0x6b, 0x6a, 0x6c, 0x6d, 0x64, 0x6a, 0x71, - 0x6b, 0x77, 0x79, 0x7d, 0x84, 0x8d, 0x88, 0x90, 0x9a, 0x96, 0x98, - 0x9c, 0x9d, 0x9a, 0x9a, 0x95, 0x94, 0x93, 0x8b, 0x87, 0x87, 0x83, - 0x82, 0x84, 0x7f, 0x82, 0x84, 0x84, 0x82, 0x89, 0x8b, 0x86, 0x8e, - 0x8b, 0x87, 0x86, 0x85, 0x80, 0x7b, 0x7e, 0x78, 0x76, 0x71, 0x6e, - 0x6d, 0x64, 0x69, 0x66, 0x66, 0x61, 0x62, 0x61, 0x59, 0x62, 0x54, - 0x5e, 0x62, 0x5d, 0x6f, 0x71, 0x7e, 0x82, 0x8d, 0x94, 0x9d, 0xa5, - 0xa1, 0xaf, 0xad, 0xad, 0xa8, 0xa8, 0xa3, 0x9b, 0x96, 0x89, 0x88, - 0x81, 0x78, 0x75, 0x75, 0x75, 0x74, 0x77, 0x7c, 0x83, 0x88, 0x90, - 0x95, 0x9a, 0xa0, 0x9d, 0x9f, 0x9c, 0x93, 0x8b, 0x83, 0x7c, 0x74, - 0x6c, 0x65, 0x60, 0x5d, 0x59, 0x57, 0x56, 0x56, 0x55, 0x55, 0x50, - 0x51, 0x4f, 0x51, 0x57, 0x5e, 0x7a, 0x81, 0x82, 0x93, 0xa3, 0xaa, - 0xa6, 0xae, 0xb7, 0xb5, 0xae, 0xa4, 0xa5, 0x9f, 0x8e, 0x84, 0x80, - 0x7d, 0x72, 0x6c, 0x70, 0x73, 0x72, 0x75, 0x7e, 0x88, 0x8f, 0x96, - 0x9e, 0xa8, 0xad, 0xa7, 0xa5, 0xa1, 0x97, 0x8c, 0x82, 0x7b, 0x72, - 0x6b, 0x65, 0x61, 0x5d, 0x58, 0x59, 0x59, 0x55, 0x54, 0x54, 0x4e, - 0x4b, 0x4a, 0x4b, 0x52, 0x5d, 0x77, 0x87, 0x84, 0x91, 0xaa, 0xb0, - 0xa6, 0xae, 0xb8, 0xb2, 0xaa, 0xa2, 0x9b, 0x96, 0x8b, 0x7d, 0x77, - 0x79, 0x70, 0x69, 0x70, 0x76, 0x76, 0x7b, 0x83, 0x8f, 0x97, 0x9d, - 0xa5, 0xa9, 0xaf, 0xa9, 0xa0, 0x9e, 0x94, 0x85, 0x7b, 0x76, 0x6e, - 0x66, 0x64, 0x61, 0x60, 0x5f, 0x5e, 0x5e, 0x5f, 0x5c, 0x58, 0x57, - 0x50, 0x4a, 0x47, 0x4e, 0x53, 0x64, 0x86, 0x7f, 0x81, 0xa4, 0xb1, - 0xa8, 0xa8, 0xb8, 0xb7, 0xaa, 0xa4, 0x9d, 0x97, 0x8c, 0x7e, 0x74, - 0x73, 0x73, 0x69, 0x69, 0x74, 0x7a, 0x7d, 0x84, 0x90, 0x9a, 0xa0, - 0xa6, 0xa8, 0xab, 0xab, 0x9e, 0x96, 0x90, 0x85, 0x78, 0x70, 0x6f, - 0x69, 0x65, 0x65, 0x67, 0x67, 0x66, 0x67, 0x66, 0x66, 0x61, 0x5b, - 0x56, 0x4d, 0x48, 0x47, 0x4e, 0x55, 0x6a, 0x86, 0x82, 0x8a, 0xa6, - 0xb4, 0xad, 0xa9, 0xb5, 0xb5, 0xa9, 0x9d, 0x93, 0x8b, 0x7f, 0x74, - 0x6a, 0x66, 0x6b, 0x6d, 0x6d, 0x74, 0x82, 0x8d, 0x91, 0x99, 0xa4, - 0xab, 0xab, 0xaa, 0xa7, 0xa0, 0x97, 0x89, 0x7c, 0x75, 0x6e, 0x65, - 0x62, 0x68, 0x69, 0x68, 0x6d, 0x72, 0x73, 0x71, 0x73, 0x71, 0x6e, - 0x68, 0x5f, 0x55, 0x4b, 0x47, 0x45, 0x4a, 0x52, 0x64, 0x80, 0x87, - 0x8a, 0xa0, 0xb3, 0xb4, 0xaa, 0xae, 0xb3, 0xa9, 0x9a, 0x8c, 0x83, - 0x79, 0x71, 0x6a, 0x63, 0x68, 0x72, 0x76, 0x7a, 0x86, 0x95, 0x9b, - 0x9d, 0xa2, 0xa6, 0xa5, 0xa0, 0x99, 0x8e, 0x86, 0x7e, 0x73, 0x6c, - 0x6a, 0x6d, 0x6d, 0x71, 0x78, 0x7d, 0x84, 0x84, 0x81, 0x7f, 0x7a, - 0x73, 0x68, 0x5e, 0x55, 0x4b, 0x46, 0x42, 0x40, 0x3f, 0x44, 0x4d, - 0x62, 0x84, 0x98, 0xa0, 0xa9, 0xbc, 0xc3, 0xb7, 0xab, 0xa3, 0x9b, - 0x8e, 0x7b, 0x6b, 0x5f, 0x5d, 0x62, 0x63, 0x66, 0x6e, 0x7f, 0x91, - 0x98, 0x99, 0xa0, 0xa8, 0xa8, 0xa2, 0x9a, 0x92, 0x8b, 0x84, 0x7a, - 0x72, 0x6e, 0x6c, 0x71, 0x74, 0x75, 0x7a, 0x82, 0x89, 0x8b, 0x8b, - 0x8b, 0x88, 0x83, 0x7b, 0x71, 0x6a, 0x63, 0x5c, 0x55, 0x51, 0x4f, - 0x4e, 0x4e, 0x4d, 0x4b, 0x4f, 0x5e, 0x75, 0x93, 0xa7, 0xa7, 0xa7, - 0xb1, 0xbb, 0xaf, 0x95, 0x87, 0x82, 0x7c, 0x73, 0x68, 0x62, 0x63, - 0x6d, 0x7c, 0x83, 0x86, 0x8c, 0x97, 0xa1, 0xa1, 0x9a, 0x94, 0x91, - 0x8e, 0x88, 0x7e, 0x76, 0x74, 0x75, 0x76, 0x76, 0x78, 0x7b, 0x82, - 0x87, 0x8a, 0x8c, 0x8d, 0x8e, 0x8d, 0x89, 0x80, 0x77, 0x71, 0x6b, - 0x65, 0x5e, 0x59, 0x58, 0x58, 0x57, 0x55, 0x55, 0x58, 0x57, 0x55, - 0x53, 0x56, 0x66, 0x7c, 0x99, 0xab, 0xa9, 0xa2, 0xa5, 0xac, 0xa7, - 0x94, 0x84, 0x7d, 0x79, 0x77, 0x75, 0x6e, 0x69, 0x6e, 0x7c, 0x8a, - 0x8e, 0x8e, 0x90, 0x98, 0x9f, 0x9d, 0x93, 0x89, 0x85, 0x86, 0x83, - 0x7d, 0x76, 0x74, 0x77, 0x7c, 0x7f, 0x7e, 0x7f, 0x84, 0x8c, 0x8f, - 0x8c, 0x88, 0x85, 0x84, 0x82, 0x7b, 0x72, 0x6b, 0x67, 0x67, 0x67, - 0x65, 0x62, 0x61, 0x61, 0x61, 0x62, 0x60, 0x60, 0x62, 0x61, 0x60, - 0x5d, 0x5b, 0x5e, 0x6a, 0x88, 0xa8, 0xb0, 0xa3, 0x97, 0x9d, 0xab, - 0xa8, 0x93, 0x81, 0x7a, 0x7b, 0x7b, 0x78, 0x75, 0x75, 0x76, 0x7e, - 0x8b, 0x95, 0x97, 0x93, 0x91, 0x95, 0x95, 0x8f, 0x85, 0x7e, 0x7b, - 0x78, 0x77, 0x78, 0x77, 0x76, 0x77, 0x7d, 0x85, 0x89, 0x89, 0x8c, - 0x92, 0x93, 0x8f, 0x88, 0x83, 0x7f, 0x79, 0x73, 0x6e, 0x6b, 0x69, - 0x67, 0x65, 0x65, 0x64, 0x64, 0x64, 0x61, 0x60, 0x60, 0x61, 0x62, - 0x62, 0x60, 0x5e, 0x5e, 0x64, 0x6c, 0x73, 0x77, 0x80, 0x96, 0xae, - 0xb2, 0xa3, 0x94, 0x93, 0x97, 0x91, 0x82, 0x79, 0x79, 0x7a, 0x7a, - 0x7b, 0x81, 0x89, 0x8d, 0x8e, 0x90, 0x93, 0x93, 0x8f, 0x88, 0x83, - 0x7d, 0x76, 0x70, 0x70, 0x74, 0x77, 0x77, 0x78, 0x7e, 0x88, 0x91, - 0x95, 0x94, 0x91, 0x8d, 0x8b, 0x88, 0x84, 0x7f, 0x79, 0x74, 0x71, - 0x71, 0x73, 0x75, 0x75, 0x76, 0x79, 0x7c, 0x7b, 0x77, 0x73, 0x70, - 0x6b, 0x65, 0x5f, 0x5b, 0x5a, 0x5d, 0x61, 0x64, 0x62, 0x5d, 0x59, - 0x56, 0x54, 0x52, 0x53, 0x5d, 0x76, 0x9c, 0xbb, 0xc1, 0xb4, 0xa6, - 0xa4, 0xa8, 0xa1, 0x91, 0x81, 0x77, 0x73, 0x72, 0x72, 0x74, 0x79, - 0x7f, 0x84, 0x8a, 0x93, 0x9b, 0x9c, 0x95, 0x8d, 0x89, 0x85, 0x7f, - 0x77, 0x70, 0x6c, 0x6b, 0x6c, 0x70, 0x75, 0x7a, 0x7f, 0x85, 0x8c, - 0x92, 0x95, 0x93, 0x8f, 0x8a, 0x86, 0x83, 0x80, 0x7c, 0x79, 0x78, - 0x79, 0x7b, 0x7c, 0x7a, 0x7a, 0x7c, 0x7e, 0x7d, 0x79, 0x76, 0x76, - 0x74, 0x72, 0x6e, 0x6c, 0x6d, 0x6d, 0x6b, 0x68, 0x66, 0x68, 0x6a, - 0x6a, 0x66, 0x65, 0x69, 0x6b, 0x67, 0x62, 0x61, 0x6a, 0x87, 0xaf, - 0xc2, 0xb7, 0xa0, 0x94, 0x9e, 0xa5, 0x98, 0x83, 0x74, 0x6e, 0x6e, - 0x73, 0x7d, 0x87, 0x85, 0x82, 0x89, 0x93, 0x95, 0x8e, 0x86, 0x87, - 0x8b, 0x86, 0x7d, 0x77, 0x72, 0x6d, 0x6a, 0x6c, 0x76, 0x7e, 0x7f, - 0x7f, 0x83, 0x8b, 0x90, 0x8f, 0x8b, 0x89, 0x88, 0x86, 0x85, 0x82, - 0x80, 0x7e, 0x7c, 0x7c, 0x7e, 0x81, 0x82, 0x81, 0x82, 0x84, 0x82, - 0x7d, 0x78, 0x75, 0x74, 0x74, 0x73, 0x74, 0x75, 0x74, 0x74, 0x73, - 0x73, 0x73, 0x71, 0x6f, 0x6e, 0x6b, 0x68, 0x66, 0x68, 0x6a, 0x68, - 0x68, 0x6a, 0x69, 0x67, 0x6a, 0x78, 0x9b, 0xc0, 0xc5, 0xb1, 0x9b, - 0x93, 0x92, 0x89, 0x7e, 0x76, 0x6f, 0x6a, 0x71, 0x7f, 0x8c, 0x8f, - 0x8b, 0x8e, 0x97, 0x98, 0x92, 0x8a, 0x81, 0x78, 0x73, 0x74, 0x75, - 0x73, 0x75, 0x7b, 0x81, 0x84, 0x85, 0x85, 0x84, 0x82, 0x7f, 0x7f, - 0x80, 0x81, 0x81, 0x7f, 0x7d, 0x7e, 0x83, 0x8c, 0x91, 0x8d, 0x89, - 0x86, 0x83, 0x81, 0x7f, 0x7e, 0x7c, 0x79, 0x79, 0x7b, 0x7c, 0x7c, - 0x7a, 0x7a, 0x79, 0x77, 0x75, 0x75, 0x75, 0x74, 0x75, 0x79, 0x7a, - 0x77, 0x74, 0x73, 0x72, 0x6e, 0x6c, 0x6c, 0x6b, 0x6b, 0x6c, 0x6d, - 0x6d, 0x6e, 0x71, 0x73, 0x76, 0x8a, 0xab, 0xbd, 0xb5, 0xa2, 0x95, - 0x8d, 0x84, 0x7c, 0x77, 0x6f, 0x6b, 0x74, 0x84, 0x8d, 0x8d, 0x8f, - 0x94, 0x94, 0x8f, 0x8d, 0x87, 0x7b, 0x73, 0x75, 0x79, 0x79, 0x78, - 0x7b, 0x7e, 0x81, 0x83, 0x84, 0x82, 0x80, 0x80, 0x81, 0x7f, 0x7c, - 0x7c, 0x7c, 0x7a, 0x7c, 0x81, 0x85, 0x88, 0x8f, 0x90, 0x8a, 0x88, - 0x86, 0x82, 0x7d, 0x7a, 0x7a, 0x79, 0x79, 0x7d, 0x7d, 0x7b, 0x7a, - 0x7b, 0x7c, 0x7b, 0x7c, 0x7d, 0x7c, 0x7a, 0x79, 0x77, 0x75, 0x72, - 0x71, 0x71, 0x70, 0x70, 0x71, 0x71, 0x6f, 0x6d, 0x6c, 0x6c, 0x6b, - 0x6d, 0x6e, 0x6f, 0x72, 0x73, 0x7b, 0x91, 0xb0, 0xbd, 0xb1, 0x9e, - 0x8b, 0x7f, 0x7d, 0x7f, 0x7a, 0x70, 0x74, 0x80, 0x8c, 0x95, 0x97, - 0x94, 0x8e, 0x89, 0x89, 0x84, 0x7e, 0x78, 0x73, 0x75, 0x7c, 0x84, - 0x86, 0x84, 0x86, 0x89, 0x87, 0x83, 0x7f, 0x7a, 0x73, 0x74, 0x77, - 0x79, 0x7b, 0x7c, 0x7e, 0x85, 0x8b, 0x8c, 0x88, 0x84, 0x80, 0x7e, - 0x7e, 0x81, 0x88, 0x89, 0x84, 0x86, 0x86, 0x84, 0x81, 0x7c, 0x77, - 0x74, 0x77, 0x7c, 0x7f, 0x80, 0x7e, 0x7c, 0x7b, 0x7c, 0x7b, 0x78, - 0x75, 0x70, 0x6f, 0x73, 0x75, 0x76, 0x75, 0x75, 0x74, 0x72, 0x73, - 0x6f, 0x6b, 0x6c, 0x6b, 0x6c, 0x6c, 0x6c, 0x6e, 0x6f, 0x7e, 0xa1, - 0xbc, 0xbe, 0xad, 0x95, 0x7e, 0x75, 0x7b, 0x7f, 0x79, 0x77, 0x7d, - 0x86, 0x93, 0x9c, 0x97, 0x8d, 0x87, 0x84, 0x7f, 0x7f, 0x7e, 0x78, - 0x76, 0x7b, 0x81, 0x86, 0x8a, 0x8b, 0x85, 0x7e, 0x7d, 0x7b, 0x79, - 0x78, 0x76, 0x73, 0x73, 0x7c, 0x86, 0x8a, 0x89, 0x87, 0x83, 0x81, - 0x80, 0x7d, 0x77, 0x78, 0x80, 0x86, 0x8b, 0x90, 0x8d, 0x84, 0x7f, - 0x80, 0x7f, 0x7f, 0x7f, 0x7b, 0x78, 0x7a, 0x7e, 0x7e, 0x7e, 0x7b, - 0x75, 0x75, 0x78, 0x7a, 0x7c, 0x7a, 0x77, 0x75, 0x76, 0x76, 0x75, - 0x75, 0x75, 0x75, 0x76, 0x75, 0x73, 0x72, 0x72, 0x72, 0x70, 0x6c, - 0x69, 0x6a, 0x6f, 0x7f, 0x9c, 0xb6, 0xb9, 0xac, 0x96, 0x83, 0x7a, - 0x7a, 0x7f, 0x7e, 0x7d, 0x7f, 0x85, 0x8f, 0x96, 0x94, 0x8e, 0x87, - 0x81, 0x7f, 0x80, 0x7f, 0x7b, 0x7a, 0x79, 0x7a, 0x80, 0x86, 0x88, - 0x89, 0x86, 0x80, 0x7b, 0x7a, 0x7a, 0x79, 0x79, 0x79, 0x7a, 0x80, - 0x86, 0x86, 0x82, 0x7f, 0x7d, 0x7e, 0x83, 0x8a, 0x8c, 0x8b, 0x8a, - 0x87, 0x81, 0x7d, 0x7b, 0x7b, 0x7c, 0x7e, 0x80, 0x7f, 0x80, 0x7e, - 0x7a, 0x77, 0x73, 0x72, 0x73, 0x75, 0x79, 0x7c, 0x7c, 0x79, 0x77, - 0x76, 0x76, 0x78, 0x79, 0x79, 0x77, 0x75, 0x75, 0x75, 0x76, 0x77, - 0x75, 0x74, 0x74, 0x75, 0x74, 0x73, 0x71, 0x6d, 0x6a, 0x6b, 0x7a, - 0x99, 0xb0, 0xb6, 0xb1, 0x9c, 0x85, 0x7b, 0x7e, 0x86, 0x89, 0x86, - 0x81, 0x7b, 0x7f, 0x8a, 0x92, 0x96, 0x8f, 0x84, 0x7d, 0x7d, 0x83, - 0x88, 0x88, 0x81, 0x79, 0x75, 0x79, 0x81, 0x87, 0x88, 0x82, 0x7c, - 0x78, 0x79, 0x7d, 0x80, 0x7f, 0x7c, 0x7a, 0x7a, 0x7c, 0x7f, 0x82, - 0x81, 0x80, 0x82, 0x84, 0x87, 0x89, 0x87, 0x82, 0x7d, 0x7b, 0x7b, - 0x7d, 0x80, 0x80, 0x7f, 0x7c, 0x79, 0x77, 0x77, 0x79, 0x79, 0x79, - 0x79, 0x79, 0x78, 0x79, 0x7a, 0x7a, 0x7a, 0x7a, 0x79, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x79, 0x7c, 0x7c, 0x7d, 0x7e, 0x7b, 0x79, 0x78, - 0x79, 0x79, 0x78, 0x77, 0x72, 0x6b, 0x66, 0x65, 0x76, 0x94, 0xa9, - 0xb6, 0xb3, 0x9e, 0x88, 0x7d, 0x7e, 0x85, 0x8b, 0x8e, 0x88, 0x81, - 0x7f, 0x81, 0x87, 0x8e, 0x92, 0x90, 0x87, 0x7f, 0x7c, 0x7f, 0x84, - 0x88, 0x86, 0x82, 0x7c, 0x78, 0x78, 0x7b, 0x7e, 0x80, 0x80, 0x7d, - 0x7a, 0x7a, 0x7b, 0x7e, 0x83, 0x84, 0x83, 0x80, 0x7d, 0x7e, 0x80, - 0x84, 0x86, 0x86, 0x83, 0x7e, 0x7c, 0x7c, 0x80, 0x84, 0x84, 0x80, - 0x7a, 0x74, 0x72, 0x75, 0x7a, 0x7d, 0x7e, 0x7b, 0x76, 0x73, 0x74, - 0x76, 0x79, 0x7c, 0x7c, 0x79, 0x76, 0x76, 0x78, 0x7b, 0x7d, 0x7f, - 0x7d, 0x7a, 0x79, 0x79, 0x79, 0x7b, 0x7c, 0x7b, 0x7a, 0x79, 0x78, - 0x77, 0x76, 0x74, 0x72, 0x6f, 0x6c, 0x6e, 0x7a, 0x8b, 0x9a, 0xa5, - 0xa7, 0x9f, 0x94, 0x8b, 0x87, 0x87, 0x8c, 0x8e, 0x8c, 0x86, 0x80, - 0x7c, 0x7e, 0x84, 0x8b, 0x8e, 0x8d, 0x89, 0x83, 0x81, 0x80, 0x81, - 0x83, 0x83, 0x81, 0x7d, 0x79, 0x76, 0x75, 0x78, 0x7b, 0x7e, 0x80, - 0x80, 0x7f, 0x7e, 0x7d, 0x7d, 0x7e, 0x7f, 0x7f, 0x7e, 0x7d, 0x7a, - 0x79, 0x7b, 0x7f, 0x84, 0x88, 0x8a, 0x89, 0x86, 0x83, 0x80, 0x7e, - 0x7e, 0x7f, 0x7d, 0x7c, 0x7a, 0x78, 0x77, 0x79, 0x7a, 0x7b, 0x7b, - 0x7b, 0x7b, 0x7c, 0x7d, 0x7e, 0x7d, 0x7b, 0x79, 0x78, 0x77, 0x77, - 0x79, 0x7a, 0x7b, 0x7b, 0x7b, 0x7b, 0x7c, 0x7c, 0x7c, 0x7b, 0x7b, - 0x7a, 0x79, 0x77, 0x76, 0x75, 0x75, 0x76, 0x77, 0x7e, 0x86, 0x8c, - 0x93, 0x95, 0x93, 0x91, 0x8e, 0x8c, 0x8c, 0x8e, 0x90, 0x8e, 0x8b, - 0x87, 0x82, 0x81, 0x81, 0x83, 0x86, 0x87, 0x87, 0x86, 0x85, 0x85, - 0x84, 0x84, 0x85, 0x84, 0x82, 0x7f, 0x7c, 0x79, 0x78, 0x78, 0x79, - 0x7b, 0x7d, 0x7e, 0x7e, 0x7d, 0x7d, 0x7e, 0x7f, 0x80, 0x7f, 0x7f, - 0x7d, 0x7b, 0x7b, 0x7c, 0x7c, 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x80, 0x81, 0x82, 0x82, 0x82, 0x81, 0x80, 0x7e, 0x7e, 0x7e, 0x7e, - 0x7e, 0x7d, 0x7d, 0x7c, 0x7b, 0x7b, 0x7b, 0x7c, 0x7c, 0x7c, 0x7c, - 0x7b, 0x7a, 0x7a, 0x7a, 0x7a, 0x7a, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, - 0x7c, 0x7c, 0x7d, 0x7d, 0x7e, 0x7e, 0x7e, 0x7d, 0x7d, 0x7d, 0x7e, - 0x80, 0x83, 0x85, 0x86, 0x86, 0x86, 0x86, 0x86, 0x88, 0x89, 0x8a, - 0x8b, 0x8b, 0x8b, 0x8a, 0x89, 0x88, 0x88, 0x88, 0x89, 0x88, 0x87, - 0x86, 0x85, 0x84, 0x83, 0x83, 0x82, 0x82, 0x81, 0x81, 0x80, 0x80, - 0x80, 0x80, 0x81, 0x81, 0x81, 0x81, 0x80, 0x7f, 0x7f, 0x7e, 0x7e, - 0x7e, 0x7e, 0x7d, 0x7d, 0x7c, 0x7b, 0x7a, 0x79, 0x79, 0x79, 0x79, - 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x7a, 0x7a, 0x7b, 0x7b, 0x7b, - 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7a, 0x7a, 0x7a, 0x79, - 0x79, 0x79, 0x7a, 0x79, 0x7a, 0x7a, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, - 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7c, 0x7c, 0x7d, - 0x7d, 0x7d, 0x7e, 0x7e, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7e, 0x7e, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7e, 0x7e, 0x7f, 0x80, 0x80, 0x81, 0x80, - 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x81, 0x81, 0x81, 0x80, 0x80, 0x80, - 0x80, 0x81, 0x82, 0x82, 0x82, 0x82, 0x81, 0x81, 0x82, 0x83, 0x83, - 0x83, 0x84, 0x84, 0x83, 0x84, 0x84, 0x84, 0x85, 0x85, 0x84, 0x84, - 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x83, 0x82, 0x81, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x7f, 0x7e, 0x7d, 0x7d, 0x7c, 0x7c, 0x7c, 0x7d, - 0x7d, 0x7c, 0x7b, 0x7b, 0x7a, 0x7b, 0x7c, 0x7d, 0x7d, 0x7e, 0x7e, - 0x7e, 0x7e, 0x7e, 0x7e, 0x7d, 0x7d, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, - 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7d, 0x7d, 0x7d, 0x7e, 0x7e, - 0x7e, 0x7e, 0x7e, 0x7e, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x81, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x81, 0x81, 0x81, - 0x81, 0x81, 0x81, 0x80, 0x80, 0x80, 0x80, 0x81, 0x81, 0x81, 0x81, - 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, - 0x81, 0x81, 0x81, 0x81, 0x81, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x7f, 0x7f, 0x7e, 0x7e, 0x7e, 0x7e, 0x7f, 0x7f, 0x80, 0x80, - 0x80, 0x80, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7e, 0x7e, 0x7d, 0x7e, 0x7e, - 0x7e, 0x7e, 0x7e, 0x7d, 0x7d, 0x7c, 0x7c, 0x7d, 0x7e, 0x7e, 0x7f, - 0x7f, 0x7e, 0x7e, 0x7e, 0x7e, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x7f, - 0x7e, 0x7f, 0x7f, 0x80, 0x80, 0x81, 0x80, 0x80, 0x7f, 0x7f, 0x7f, - 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7e, 0x7e, 0x7f, - 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x81, 0x81, 0x81, 0x81, 0x80, 0x7f, 0x7f, - 0x7f, 0x80, 0x80, 0x81, 0x81, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x81, 0x81, 0x81, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x80, 0x80, - 0x81, 0x81, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x80, - 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, - 0x7f, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, - 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, - }, - { // 1 - 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x7f, 0x80, - 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, - 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, - 0x80, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x84, - 0x8a, 0x8f, 0x93, 0x94, 0x95, 0x95, 0x94, 0x91, 0x8f, 0x8d, 0x8c, - 0x8b, 0x8a, 0x8a, 0x89, 0x87, 0x85, 0x83, 0x82, 0x80, 0x80, 0x81, - 0x82, 0x82, 0x81, 0x7f, 0x7e, 0x7d, 0x7c, 0x7a, 0x79, 0x79, 0x78, - 0x77, 0x77, 0x79, 0x7b, 0x7d, 0x7e, 0x7f, 0x7e, 0x7e, 0x7d, 0x7d, - 0x7c, 0x7c, 0x7c, 0x7b, 0x7b, 0x7a, 0x79, 0x79, 0x78, 0x77, 0x77, - 0x77, 0x78, 0x77, 0x76, 0x75, 0x75, 0x75, 0x76, 0x75, 0x75, 0x74, - 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x75, 0x77, 0x7a, 0x7e, 0x84, - 0x8a, 0x91, 0x98, 0x9c, 0x9e, 0x9f, 0x9d, 0x9a, 0x97, 0x94, 0x93, - 0x92, 0x91, 0x90, 0x8e, 0x8a, 0x85, 0x80, 0x7d, 0x7a, 0x7a, 0x7a, - 0x7c, 0x7f, 0x81, 0x83, 0x83, 0x83, 0x82, 0x81, 0x7f, 0x7d, 0x7c, - 0x7c, 0x7c, 0x7d, 0x7d, 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x7e, 0x7e, - 0x7d, 0x7c, 0x7b, 0x7a, 0x79, 0x77, 0x74, 0x72, 0x71, 0x70, 0x70, - 0x70, 0x71, 0x70, 0x6e, 0x6c, 0x6a, 0x6a, 0x6b, 0x6c, 0x6d, 0x6d, - 0x6a, 0x68, 0x6a, 0x6f, 0x78, 0x85, 0x92, 0x9f, 0xa7, 0xab, 0xac, - 0xaa, 0xa7, 0xa2, 0x9c, 0x98, 0x94, 0x92, 0x91, 0x8f, 0x8c, 0x87, - 0x81, 0x7b, 0x76, 0x74, 0x74, 0x77, 0x7a, 0x7e, 0x81, 0x84, 0x85, - 0x84, 0x84, 0x82, 0x81, 0x7f, 0x7f, 0x7e, 0x7e, 0x7e, 0x7e, 0x7f, - 0x7f, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7d, 0x7b, 0x7a, 0x79, 0x77, - 0x76, 0x75, 0x73, 0x72, 0x71, 0x6f, 0x6d, 0x6b, 0x69, 0x69, 0x6a, - 0x6a, 0x6a, 0x6b, 0x6b, 0x69, 0x67, 0x69, 0x6d, 0x75, 0x81, 0x8f, - 0x9c, 0xa6, 0xab, 0xad, 0xac, 0xa9, 0xa4, 0x9d, 0x97, 0x92, 0x8f, - 0x8d, 0x8c, 0x8a, 0x88, 0x85, 0x81, 0x7e, 0x7c, 0x7d, 0x7f, 0x81, - 0x83, 0x84, 0x84, 0x82, 0x80, 0x7e, 0x7d, 0x7e, 0x7f, 0x82, 0x85, - 0x87, 0x87, 0x86, 0x84, 0x81, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x7f, - 0x7d, 0x77, 0x71, 0x69, 0x62, 0x5b, 0x56, 0x53, 0x52, 0x52, 0x52, - 0x52, 0x52, 0x51, 0x4f, 0x50, 0x59, 0x66, 0x7b, 0x92, 0xa8, 0xb9, - 0xbe, 0xbb, 0xb1, 0x9f, 0x8c, 0x7a, 0x6e, 0x69, 0x6c, 0x77, 0x85, - 0x94, 0xa1, 0xa7, 0xa7, 0xa0, 0x97, 0x8b, 0x82, 0x7c, 0x78, 0x78, - 0x79, 0x7c, 0x80, 0x82, 0x84, 0x86, 0x87, 0x87, 0x87, 0x85, 0x84, - 0x82, 0x81, 0x80, 0x82, 0x83, 0x86, 0x87, 0x85, 0x82, 0x7c, 0x73, - 0x6a, 0x62, 0x5d, 0x5a, 0x59, 0x5b, 0x5c, 0x5d, 0x5c, 0x5c, 0x5b, - 0x57, 0x50, 0x4e, 0x54, 0x63, 0x7b, 0x95, 0xaf, 0xbe, 0xbe, 0xb9, - 0xa8, 0x92, 0x7d, 0x6c, 0x64, 0x66, 0x71, 0x81, 0x94, 0xa3, 0xac, - 0xab, 0xa3, 0x96, 0x87, 0x7a, 0x74, 0x72, 0x76, 0x7c, 0x81, 0x86, - 0x88, 0x86, 0x83, 0x80, 0x7f, 0x80, 0x82, 0x85, 0x89, 0x8b, 0x8b, - 0x8a, 0x88, 0x85, 0x82, 0x7f, 0x7c, 0x79, 0x76, 0x72, 0x6f, 0x6c, - 0x6a, 0x67, 0x63, 0x61, 0x5e, 0x5c, 0x5b, 0x5a, 0x57, 0x55, 0x52, - 0x51, 0x5b, 0x6a, 0x83, 0x9e, 0xb3, 0xbf, 0xbd, 0xae, 0x96, 0x7d, - 0x69, 0x5f, 0x63, 0x72, 0x87, 0x9c, 0xaa, 0xaf, 0xaa, 0x9c, 0x8d, - 0x7d, 0x74, 0x71, 0x76, 0x7f, 0x87, 0x8d, 0x8d, 0x8a, 0x83, 0x7a, - 0x75, 0x72, 0x75, 0x7c, 0x84, 0x8e, 0x93, 0x95, 0x93, 0x8e, 0x88, - 0x81, 0x7d, 0x7a, 0x79, 0x7a, 0x7a, 0x7a, 0x78, 0x76, 0x72, 0x6d, - 0x67, 0x62, 0x5e, 0x5c, 0x5b, 0x59, 0x58, 0x57, 0x55, 0x54, 0x56, - 0x61, 0x71, 0x89, 0xa3, 0xb4, 0xbc, 0xb5, 0xa3, 0x8b, 0x74, 0x66, - 0x64, 0x70, 0x83, 0x97, 0xa6, 0xab, 0xa7, 0x9a, 0x8b, 0x7e, 0x76, - 0x76, 0x7b, 0x83, 0x8a, 0x8c, 0x8a, 0x85, 0x7e, 0x79, 0x76, 0x78, - 0x7a, 0x7e, 0x82, 0x85, 0x89, 0x8a, 0x8a, 0x8a, 0x89, 0x88, 0x87, - 0x87, 0x87, 0x86, 0x85, 0x81, 0x7c, 0x77, 0x73, 0x71, 0x71, 0x72, - 0x73, 0x71, 0x6c, 0x66, 0x5d, 0x56, 0x51, 0x4d, 0x4b, 0x4c, 0x4f, - 0x5f, 0x75, 0x8c, 0xa9, 0xb7, 0xb9, 0xaf, 0x96, 0x7e, 0x68, 0x61, - 0x68, 0x7c, 0x95, 0xa7, 0xb1, 0xad, 0x9e, 0x8c, 0x7a, 0x70, 0x70, - 0x78, 0x85, 0x8f, 0x93, 0x8f, 0x85, 0x7b, 0x73, 0x73, 0x78, 0x80, - 0x86, 0x87, 0x83, 0x7d, 0x79, 0x7c, 0x83, 0x8e, 0x96, 0x9a, 0x97, - 0x8d, 0x82, 0x79, 0x74, 0x76, 0x7b, 0x81, 0x85, 0x85, 0x81, 0x79, - 0x71, 0x69, 0x64, 0x61, 0x61, 0x62, 0x62, 0x60, 0x5d, 0x58, 0x54, - 0x4f, 0x54, 0x66, 0x7b, 0x95, 0xac, 0xb8, 0xb5, 0xa3, 0x8b, 0x75, - 0x6a, 0x6e, 0x7d, 0x93, 0xa2, 0xa7, 0xa1, 0x93, 0x85, 0x7b, 0x7b, - 0x80, 0x87, 0x8e, 0x8e, 0x89, 0x82, 0x7a, 0x78, 0x7a, 0x80, 0x87, - 0x8b, 0x8a, 0x82, 0x77, 0x6d, 0x67, 0x68, 0x72, 0x84, 0x96, 0xa3, - 0xa7, 0x9e, 0x8f, 0x7e, 0x72, 0x71, 0x79, 0x85, 0x90, 0x94, 0x90, - 0x85, 0x77, 0x6b, 0x65, 0x65, 0x67, 0x6c, 0x6f, 0x6f, 0x6b, 0x65, - 0x5f, 0x5a, 0x58, 0x57, 0x57, 0x5c, 0x68, 0x78, 0x89, 0xa2, 0xb2, - 0xae, 0xa6, 0x94, 0x81, 0x78, 0x77, 0x7f, 0x8c, 0x95, 0x99, 0x97, - 0x90, 0x88, 0x85, 0x83, 0x83, 0x83, 0x81, 0x7f, 0x7e, 0x7e, 0x82, - 0x87, 0x8a, 0x89, 0x82, 0x78, 0x6f, 0x6a, 0x6d, 0x76, 0x81, 0x8a, - 0x8d, 0x8a, 0x83, 0x7c, 0x7d, 0x83, 0x8d, 0x96, 0x96, 0x90, 0x88, - 0x81, 0x7f, 0x81, 0x83, 0x83, 0x80, 0x7b, 0x76, 0x74, 0x75, 0x77, - 0x77, 0x75, 0x73, 0x6f, 0x6d, 0x6e, 0x6c, 0x6b, 0x68, 0x68, 0x67, - 0x65, 0x65, 0x60, 0x5e, 0x5e, 0x76, 0x9b, 0xaf, 0xbf, 0xb7, 0x9d, - 0x7f, 0x65, 0x62, 0x70, 0x8a, 0x9c, 0xa0, 0x9d, 0x8a, 0x7f, 0x7f, - 0x81, 0x8c, 0x91, 0x91, 0x8a, 0x7d, 0x73, 0x6f, 0x76, 0x80, 0x88, - 0x8e, 0x8c, 0x85, 0x7b, 0x72, 0x6e, 0x6e, 0x74, 0x7d, 0x85, 0x8b, - 0x89, 0x85, 0x81, 0x7d, 0x7e, 0x83, 0x8a, 0x8f, 0x92, 0x8c, 0x82, - 0x7b, 0x78, 0x7b, 0x81, 0x87, 0x87, 0x83, 0x7b, 0x75, 0x72, 0x73, - 0x76, 0x78, 0x78, 0x76, 0x75, 0x74, 0x72, 0x72, 0x72, 0x70, 0x6f, - 0x6f, 0x6d, 0x6d, 0x6b, 0x68, 0x62, 0x5c, 0x6c, 0x92, 0xb4, 0xc4, - 0xbf, 0xa3, 0x7c, 0x63, 0x62, 0x76, 0x90, 0x9f, 0x9c, 0x92, 0x85, - 0x7e, 0x84, 0x8d, 0x90, 0x8a, 0x7e, 0x72, 0x6e, 0x75, 0x81, 0x8e, - 0x93, 0x8e, 0x83, 0x7a, 0x77, 0x79, 0x7c, 0x7e, 0x7c, 0x79, 0x77, - 0x7a, 0x7e, 0x83, 0x86, 0x86, 0x83, 0x7e, 0x7a, 0x7a, 0x7d, 0x84, - 0x8c, 0x90, 0x91, 0x8d, 0x84, 0x7d, 0x79, 0x7a, 0x7e, 0x83, 0x86, - 0x85, 0x81, 0x7e, 0x7b, 0x79, 0x78, 0x78, 0x76, 0x74, 0x73, 0x72, - 0x71, 0x71, 0x72, 0x74, 0x75, 0x76, 0x74, 0x70, 0x6c, 0x68, 0x66, - 0x64, 0x64, 0x64, 0x6a, 0x84, 0xa7, 0xbf, 0xc1, 0xac, 0x89, 0x6d, - 0x64, 0x6e, 0x83, 0x91, 0x91, 0x88, 0x82, 0x83, 0x8a, 0x91, 0x92, - 0x8a, 0x7e, 0x77, 0x77, 0x7d, 0x84, 0x88, 0x88, 0x85, 0x82, 0x82, - 0x84, 0x82, 0x7c, 0x75, 0x70, 0x71, 0x79, 0x80, 0x85, 0x87, 0x87, - 0x85, 0x85, 0x84, 0x80, 0x7b, 0x78, 0x7b, 0x84, 0x8d, 0x92, 0x90, - 0x87, 0x80, 0x7d, 0x7e, 0x80, 0x81, 0x80, 0x7e, 0x7b, 0x7b, 0x7d, - 0x7d, 0x79, 0x75, 0x72, 0x71, 0x72, 0x73, 0x73, 0x72, 0x73, 0x73, - 0x74, 0x75, 0x73, 0x70, 0x6e, 0x6d, 0x6d, 0x6d, 0x6e, 0x6d, 0x6d, - 0x70, 0x70, 0x6d, 0x72, 0x88, 0xa5, 0xb6, 0xaf, 0x9a, 0x86, 0x7d, - 0x83, 0x8b, 0x8d, 0x87, 0x81, 0x83, 0x8c, 0x94, 0x92, 0x8a, 0x83, - 0x80, 0x81, 0x81, 0x7d, 0x77, 0x75, 0x7d, 0x86, 0x8a, 0x88, 0x84, - 0x81, 0x81, 0x80, 0x7d, 0x78, 0x74, 0x74, 0x78, 0x7c, 0x80, 0x84, - 0x85, 0x86, 0x88, 0x87, 0x84, 0x81, 0x83, 0x8a, 0x90, 0x8d, 0x84, - 0x7f, 0x7f, 0x80, 0x82, 0x82, 0x80, 0x7f, 0x7f, 0x7e, 0x7d, 0x79, - 0x76, 0x75, 0x76, 0x75, 0x74, 0x72, 0x70, 0x71, 0x72, 0x72, 0x72, - 0x72, 0x72, 0x72, 0x73, 0x74, 0x71, 0x6d, 0x6c, 0x6d, 0x72, 0x74, - 0x72, 0x6f, 0x6f, 0x74, 0x7b, 0x83, 0x8b, 0x8d, 0x91, 0x9b, 0xa0, - 0x9e, 0x99, 0x93, 0x90, 0x8d, 0x8a, 0x87, 0x86, 0x87, 0x89, 0x89, - 0x88, 0x84, 0x80, 0x80, 0x7f, 0x80, 0x82, 0x84, 0x83, 0x80, 0x7e, - 0x7e, 0x7f, 0x7d, 0x7a, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x7b, - 0x7d, 0x7e, 0x7f, 0x81, 0x81, 0x81, 0x85, 0x89, 0x8a, 0x87, 0x86, - 0x89, 0x8b, 0x8a, 0x87, 0x86, 0x85, 0x82, 0x81, 0x7f, 0x7f, 0x80, - 0x80, 0x7e, 0x7a, 0x77, 0x76, 0x73, 0x73, 0x74, 0x75, 0x75, 0x74, - 0x73, 0x73, 0x74, 0x74, 0x72, 0x71, 0x70, 0x6f, 0x6f, 0x6f, 0x6f, - 0x6f, 0x6f, 0x72, 0x72, 0x72, 0x70, 0x6f, 0x72, 0x74, 0x74, 0x75, - 0x75, 0x77, 0x80, 0x86, 0x83, 0x88, 0x93, 0x97, 0x96, 0x97, 0x99, - 0x9e, 0x9e, 0x9b, 0x9b, 0x9c, 0x9a, 0x99, 0x96, 0x90, 0x8b, 0x89, - 0x85, 0x82, 0x80, 0x7e, 0x7f, 0x7e, 0x7b, 0x79, 0x7a, 0x7a, 0x78, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x78, 0x79, 0x78, 0x78, - 0x7b, 0x7d, 0x80, 0x85, 0x88, 0x86, 0x89, 0x91, 0x90, 0x8b, 0x8a, - 0x8e, 0x8f, 0x8c, 0x87, 0x85, 0x86, 0x84, 0x7e, 0x7a, 0x75, 0x73, - 0x73, 0x70, 0x6c, 0x6b, 0x6b, 0x6b, 0x6b, 0x6b, 0x6c, 0x6c, 0x6c, - 0x6e, 0x6f, 0x70, 0x70, 0x71, 0x72, 0x72, 0x73, 0x75, 0x74, 0x72, - 0x73, 0x73, 0x73, 0x74, 0x74, 0x73, 0x74, 0x72, 0x72, 0x74, 0x77, - 0x80, 0x85, 0x82, 0x89, 0x98, 0x98, 0x94, 0x99, 0x9d, 0x9f, 0xa2, - 0x9f, 0x9d, 0xa0, 0x9e, 0x9a, 0x97, 0x91, 0x8d, 0x8d, 0x89, 0x84, - 0x83, 0x83, 0x80, 0x80, 0x7e, 0x7b, 0x7b, 0x7a, 0x77, 0x77, 0x77, - 0x75, 0x76, 0x75, 0x74, 0x75, 0x76, 0x75, 0x76, 0x78, 0x79, 0x7b, - 0x7c, 0x7d, 0x80, 0x84, 0x87, 0x89, 0x8a, 0x8d, 0x91, 0x91, 0x8e, - 0x8e, 0x8f, 0x8e, 0x8b, 0x88, 0x85, 0x83, 0x80, 0x7c, 0x78, 0x75, - 0x73, 0x71, 0x6e, 0x6c, 0x6d, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6f, - 0x6e, 0x6e, 0x6e, 0x6f, 0x6f, 0x70, 0x71, 0x73, 0x74, 0x75, 0x75, - 0x77, 0x79, 0x77, 0x76, 0x77, 0x79, 0x79, 0x77, 0x77, 0x79, 0x7b, - 0x81, 0x84, 0x85, 0x8b, 0x93, 0x94, 0x94, 0x97, 0x9a, 0x9e, 0x9f, - 0x9d, 0x9e, 0xa1, 0xa0, 0x9d, 0x9b, 0x97, 0x93, 0x92, 0x8d, 0x87, - 0x86, 0x85, 0x83, 0x81, 0x7f, 0x7d, 0x7d, 0x7b, 0x79, 0x79, 0x78, - 0x75, 0x75, 0x75, 0x73, 0x72, 0x73, 0x72, 0x73, 0x76, 0x77, 0x78, - 0x79, 0x7a, 0x7c, 0x7e, 0x81, 0x83, 0x85, 0x86, 0x8b, 0x8f, 0x8d, - 0x8c, 0x8e, 0x8f, 0x8d, 0x8a, 0x87, 0x86, 0x86, 0x83, 0x7f, 0x7c, - 0x79, 0x78, 0x76, 0x73, 0x71, 0x71, 0x70, 0x6f, 0x6e, 0x6e, 0x6e, - 0x6e, 0x6e, 0x6d, 0x6e, 0x6e, 0x6d, 0x6e, 0x70, 0x70, 0x70, 0x72, - 0x72, 0x74, 0x76, 0x77, 0x78, 0x7a, 0x7a, 0x7a, 0x7b, 0x7a, 0x7b, - 0x7c, 0x7a, 0x7a, 0x80, 0x81, 0x7d, 0x7d, 0x86, 0x8b, 0x86, 0x84, - 0x8c, 0x94, 0x92, 0x8f, 0x92, 0x97, 0x9a, 0x99, 0x97, 0x98, 0x9a, - 0x99, 0x96, 0x93, 0x91, 0x8f, 0x8d, 0x8b, 0x87, 0x85, 0x85, 0x83, - 0x7f, 0x7d, 0x7d, 0x7b, 0x79, 0x78, 0x77, 0x78, 0x77, 0x76, 0x75, - 0x76, 0x76, 0x76, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7b, 0x7c, - 0x7e, 0x80, 0x80, 0x81, 0x85, 0x86, 0x84, 0x85, 0x88, 0x88, 0x86, - 0x86, 0x86, 0x86, 0x86, 0x84, 0x82, 0x82, 0x82, 0x80, 0x7e, 0x7d, - 0x7c, 0x7c, 0x7b, 0x79, 0x78, 0x79, 0x78, 0x77, 0x77, 0x77, 0x76, - 0x77, 0x77, 0x76, 0x76, 0x76, 0x77, 0x77, 0x76, 0x77, 0x78, 0x78, - 0x78, 0x79, 0x79, 0x79, 0x7b, 0x7b, 0x7b, 0x7c, 0x7d, 0x7e, 0x7e, - 0x7f, 0x80, 0x82, 0x84, 0x83, 0x83, 0x85, 0x86, 0x86, 0x86, 0x86, - 0x86, 0x85, 0x85, 0x84, 0x83, 0x81, 0x80, 0x7e, 0x7d, 0x7c, 0x7b, - 0x7a, 0x79, 0x78, 0x78, 0x78, 0x77, 0x77, 0x77, 0x77, 0x77, 0x78, - 0x78, 0x78, 0x79, 0x7a, 0x7a, 0x7a, 0x7b, 0x7c, 0x7c, 0x7b, 0x7b, - 0x7d, 0x7d, 0x7d, 0x7c, 0x7e, 0x7f, 0x7e, 0x7d, 0x7f, 0x80, 0x80, - 0x81, 0x83, 0x84, 0x84, 0x85, 0x87, 0x88, 0x88, 0x8a, 0x8b, 0x8c, - 0x8c, 0x8d, 0x8e, 0x8e, 0x8e, 0x8d, 0x8c, 0x8c, 0x8b, 0x8a, 0x89, - 0x88, 0x87, 0x85, 0x84, 0x83, 0x82, 0x80, 0x7f, 0x7e, 0x7d, 0x7c, - 0x7c, 0x7b, 0x7a, 0x7a, 0x7a, 0x7a, 0x79, 0x79, 0x79, 0x79, 0x79, - 0x79, 0x79, 0x79, 0x7a, 0x7a, 0x7a, 0x7a, 0x7b, 0x7a, 0x7b, 0x7b, - 0x7a, 0x7a, 0x7b, 0x7b, 0x7a, 0x7a, 0x7b, 0x7b, 0x7b, 0x7a, 0x7b, - 0x7b, 0x7d, 0x7c, 0x7c, 0x7d, 0x7e, 0x7e, 0x7d, 0x7e, 0x7f, 0x7f, - 0x80, 0x80, 0x81, 0x81, 0x82, 0x82, 0x81, 0x81, 0x80, 0x80, 0x7e, - 0x7e, 0x7f, 0x7f, 0x80, 0x80, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, - 0x81, 0x81, 0x81, 0x81, 0x80, 0x81, 0x81, 0x81, 0x80, 0x80, 0x81, - 0x81, 0x82, 0x82, 0x83, 0x84, 0x84, 0x85, 0x85, 0x85, 0x85, 0x86, - 0x86, 0x86, 0x85, 0x86, 0x86, 0x85, 0x84, 0x83, 0x83, 0x83, 0x82, - 0x81, 0x81, 0x81, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7e, 0x7e, 0x7e, - 0x7e, 0x7d, 0x7d, 0x7e, 0x7e, 0x7d, 0x7d, 0x7e, 0x7e, 0x7e, 0x7e, - 0x7e, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x81, 0x81, 0x81, 0x82, 0x82, - 0x83, 0x84, 0x83, 0x84, 0x85, 0x85, 0x85, 0x86, 0x85, 0x85, 0x86, - 0x86, 0x85, 0x85, 0x85, 0x85, 0x84, 0x83, 0x83, 0x83, 0x83, 0x81, - 0x81, 0x80, 0x80, 0x7f, 0x7f, 0x7e, 0x7e, 0x7d, 0x7d, 0x7c, 0x7c, - 0x7c, 0x7b, 0x7b, 0x7a, 0x7a, 0x7b, 0x7b, 0x7b, 0x7a, 0x7a, 0x7b, - 0x7b, 0x7a, 0x7b, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7d, 0x7d, 0x7d, - 0x7d, 0x7e, 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, - 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, - 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, - 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, - 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x80, - 0x7f, 0x80, 0x7f, 0x80, 0x7f, - }, - { // 2 - 0x80, 0x7f, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, - 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, - 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, - 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, - 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x80, - 0x80, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, - 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x80, - 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x7f, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x7f, - 0x80, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x80, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x80, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, - 0x80, 0x80, 0x7f, 0x81, 0x80, 0x81, 0x80, 0x7f, 0x80, 0x7e, 0x7d, - 0x80, 0x7e, 0x7e, 0x80, 0x7e, 0x80, 0x7f, 0x80, 0x80, 0x83, 0x7f, - 0x82, 0x7e, 0x83, 0x7e, 0x80, 0x80, 0x7d, 0x83, 0x7b, 0x81, 0x7d, - 0x81, 0x7b, 0x83, 0x7d, 0x7f, 0x83, 0x7b, 0x83, 0x7e, 0x7f, 0x82, - 0x7e, 0x7d, 0x83, 0x7c, 0x83, 0x82, 0x7a, 0x84, 0x80, 0x80, 0x80, - 0x80, 0x7e, 0x7a, 0x84, 0x7a, 0x7f, 0x86, 0x78, 0x80, 0x81, 0x7f, - 0x81, 0x81, 0x84, 0x76, 0x89, 0x7d, 0x7d, 0x8f, 0x7c, 0x87, 0x7f, - 0x82, 0x7a, 0x79, 0x7c, 0x73, 0x7e, 0x7e, 0x7a, 0x81, 0x7f, 0x81, - 0x80, 0x87, 0x81, 0x7f, 0x84, 0x7e, 0x83, 0x7d, 0x84, 0x77, 0x87, - 0x79, 0x7d, 0x82, 0x7c, 0x80, 0x7c, 0x82, 0x7c, 0x82, 0x7e, 0x83, - 0x81, 0x7f, 0x7b, 0x85, 0x7a, 0x85, 0x80, 0x7b, 0x84, 0x7a, 0x81, - 0x7b, 0x83, 0x80, 0x82, 0x7a, 0x82, 0x84, 0x7b, 0x84, 0x7e, 0x82, - 0x84, 0x7d, 0x88, 0x7c, 0x85, 0x81, 0x7e, 0x7f, 0x7e, 0x83, 0x7a, - 0x7e, 0x7d, 0x7d, 0x7d, 0x81, 0x7d, 0x89, 0x7a, 0x82, 0x80, 0x85, - 0x7f, 0x7b, 0x8a, 0x74, 0x85, 0x78, 0x81, 0x7d, 0x81, 0x80, 0x7a, - 0x85, 0x7e, 0x81, 0x7e, 0x83, 0x7d, 0x83, 0x77, 0x81, 0x82, 0x79, - 0x82, 0x83, 0x85, 0x7e, 0x87, 0x7e, 0x82, 0x83, 0x79, 0x80, 0x85, - 0x78, 0x79, 0x8d, 0x7e, 0x7e, 0x87, 0x7e, 0x7a, 0x81, 0x76, 0x7e, - 0x8a, 0x7b, 0x7f, 0x83, 0x7f, 0x7e, 0x84, 0x7a, 0x7d, 0x83, 0x7f, - 0x7d, 0x7e, 0x85, 0x7d, 0x80, 0x7e, 0x7d, 0x80, 0x81, 0x7d, 0x7b, - 0x84, 0x83, 0x7f, 0x7e, 0x81, 0x7e, 0x80, 0x7e, 0x7c, 0x82, 0x7e, - 0x7c, 0x80, 0x84, 0x81, 0x7d, 0x83, 0x80, 0x7d, 0x85, 0x79, 0x7a, - 0x87, 0x7d, 0x79, 0x86, 0x80, 0x7b, 0x86, 0x7f, 0x7f, 0x86, 0x80, - 0x7b, 0x82, 0x7f, 0x79, 0x7c, 0x79, 0x7c, 0x7c, 0x7f, 0x7d, 0x7e, - 0x85, 0x7c, 0x7f, 0x83, 0x83, 0x81, 0x81, 0x82, 0x84, 0x87, 0x81, - 0x7c, 0x83, 0x83, 0x7c, 0x7d, 0x7f, 0x82, 0x7f, 0x7e, 0x7f, 0x80, - 0x80, 0x7f, 0x83, 0x82, 0x82, 0x84, 0x84, 0x83, 0x85, 0x84, 0x80, - 0x80, 0x7f, 0x7a, 0x7a, 0x79, 0x74, 0x77, 0x76, 0x72, 0x74, 0x78, - 0x76, 0x73, 0x7b, 0x7b, 0x76, 0x77, 0x75, 0x6f, 0x6a, 0x6b, 0x69, - 0x63, 0x63, 0x5f, 0x62, 0x60, 0x6e, 0x82, 0x7f, 0x89, 0x99, 0xa2, - 0xa4, 0xa8, 0xa9, 0xa6, 0xa7, 0xa2, 0x9a, 0x92, 0x90, 0x86, 0x7d, - 0x80, 0x7d, 0x7a, 0x7a, 0x7e, 0x85, 0x8e, 0x91, 0x91, 0x99, 0x9e, - 0x9b, 0x97, 0x9b, 0x98, 0x8d, 0x8c, 0x88, 0x7d, 0x7b, 0x7c, 0x78, - 0x75, 0x7a, 0x7a, 0x78, 0x78, 0x75, 0x73, 0x70, 0x6a, 0x64, 0x62, - 0x60, 0x5d, 0x5a, 0x58, 0x59, 0x58, 0x53, 0x55, 0x5d, 0x58, 0x59, - 0x59, 0x6a, 0x8a, 0x87, 0x8a, 0xa1, 0xb3, 0xb3, 0xb1, 0xb8, 0xb1, - 0xb3, 0xaa, 0x9b, 0x94, 0x90, 0x86, 0x76, 0x78, 0x7c, 0x79, 0x77, - 0x7e, 0x88, 0x8d, 0x94, 0x97, 0x9a, 0x9e, 0x9b, 0x95, 0x8e, 0x8c, - 0x8a, 0x83, 0x7f, 0x80, 0x80, 0x7e, 0x7d, 0x82, 0x85, 0x87, 0x86, - 0x84, 0x81, 0x7d, 0x78, 0x71, 0x6a, 0x63, 0x5d, 0x58, 0x55, 0x54, - 0x52, 0x54, 0x57, 0x58, 0x58, 0x59, 0x5e, 0x5c, 0x59, 0x55, 0x73, - 0x8e, 0x89, 0x96, 0xa8, 0xb8, 0xb8, 0xb9, 0xb6, 0xaf, 0xb2, 0xa3, - 0x92, 0x88, 0x86, 0x7b, 0x6d, 0x72, 0x72, 0x72, 0x77, 0x7b, 0x85, - 0x90, 0x9b, 0x9b, 0x9d, 0xa2, 0xa1, 0x98, 0x8f, 0x89, 0x82, 0x7d, - 0x78, 0x75, 0x7a, 0x7e, 0x7f, 0x81, 0x88, 0x8c, 0x8d, 0x8d, 0x89, - 0x84, 0x80, 0x79, 0x72, 0x6d, 0x66, 0x61, 0x5d, 0x5a, 0x58, 0x58, - 0x57, 0x57, 0x5c, 0x5e, 0x5c, 0x58, 0x5c, 0x5c, 0x57, 0x5b, 0x6d, - 0x88, 0x90, 0x99, 0xa9, 0xb5, 0xbb, 0xb8, 0xb4, 0xae, 0xaa, 0xa0, - 0x8e, 0x81, 0x7b, 0x75, 0x6f, 0x6d, 0x70, 0x75, 0x7b, 0x84, 0x8e, - 0x99, 0x9f, 0xa2, 0xa2, 0x9e, 0x97, 0x8e, 0x84, 0x79, 0x73, 0x6f, - 0x65, 0x64, 0x6d, 0x78, 0x81, 0x89, 0x93, 0x9b, 0xa0, 0x9e, 0x99, - 0x95, 0x90, 0x86, 0x7b, 0x71, 0x6d, 0x69, 0x66, 0x63, 0x5f, 0x60, - 0x61, 0x61, 0x61, 0x64, 0x66, 0x65, 0x66, 0x67, 0x65, 0x61, 0x5d, - 0x58, 0x57, 0x55, 0x5a, 0x73, 0x87, 0x92, 0x9e, 0xaa, 0xb6, 0xb7, - 0xb5, 0xad, 0xa4, 0xa4, 0x9a, 0x89, 0x7d, 0x78, 0x73, 0x6d, 0x6e, - 0x6f, 0x75, 0x81, 0x8b, 0x92, 0x98, 0xa1, 0xa4, 0xa0, 0x9d, 0x97, - 0x8d, 0x81, 0x77, 0x6d, 0x65, 0x62, 0x64, 0x68, 0x70, 0x7a, 0x86, - 0x8f, 0x97, 0x9f, 0xa1, 0x9f, 0x99, 0x8f, 0x84, 0x7e, 0x76, 0x6d, - 0x66, 0x66, 0x69, 0x68, 0x6b, 0x6e, 0x71, 0x73, 0x72, 0x71, 0x6c, - 0x6a, 0x66, 0x5e, 0x5b, 0x56, 0x51, 0x50, 0x4f, 0x4b, 0x49, 0x4c, - 0x59, 0x79, 0x95, 0x9d, 0xa3, 0xb1, 0xbd, 0xc0, 0xbc, 0xad, 0xa1, - 0x9c, 0x93, 0x82, 0x6e, 0x67, 0x6b, 0x6c, 0x6a, 0x6e, 0x77, 0x83, - 0x8f, 0x9b, 0x9e, 0x9d, 0xa2, 0xa1, 0x9a, 0x91, 0x87, 0x7b, 0x72, - 0x6c, 0x66, 0x61, 0x64, 0x6c, 0x73, 0x7a, 0x84, 0x8e, 0x97, 0x9c, - 0x9f, 0x9e, 0x9a, 0x91, 0x86, 0x7d, 0x77, 0x73, 0x6f, 0x6b, 0x6b, - 0x70, 0x75, 0x77, 0x75, 0x77, 0x7a, 0x7a, 0x78, 0x73, 0x70, 0x6a, - 0x65, 0x62, 0x5a, 0x53, 0x53, 0x57, 0x57, 0x52, 0x54, 0x59, 0x56, - 0x56, 0x58, 0x7a, 0xaa, 0xad, 0xa3, 0xa5, 0xb8, 0xc0, 0xb9, 0xb2, - 0x91, 0x80, 0x8f, 0x8e, 0x76, 0x5e, 0x63, 0x6c, 0x76, 0x82, 0x7c, - 0x7b, 0x89, 0xa3, 0xac, 0x9b, 0x95, 0x92, 0x92, 0x95, 0x8a, 0x74, - 0x64, 0x6d, 0x76, 0x6f, 0x6a, 0x68, 0x71, 0x7f, 0x89, 0x88, 0x82, - 0x8b, 0x96, 0x98, 0x94, 0x8b, 0x87, 0x84, 0x82, 0x7e, 0x76, 0x74, - 0x74, 0x77, 0x7a, 0x7a, 0x79, 0x7a, 0x7f, 0x83, 0x80, 0x7e, 0x7c, - 0x7a, 0x77, 0x74, 0x6e, 0x66, 0x65, 0x68, 0x66, 0x63, 0x63, 0x62, - 0x65, 0x6b, 0x6c, 0x68, 0x67, 0x6a, 0x6b, 0x67, 0x61, 0x60, 0x73, - 0x94, 0xa3, 0x9f, 0x9b, 0xa1, 0xab, 0xb6, 0xb6, 0xa2, 0x8e, 0x8d, - 0x90, 0x8a, 0x7d, 0x70, 0x68, 0x70, 0x81, 0x82, 0x79, 0x79, 0x85, - 0x95, 0x9e, 0xa0, 0x99, 0x90, 0x91, 0x95, 0x90, 0x83, 0x78, 0x70, - 0x69, 0x6d, 0x71, 0x6d, 0x69, 0x6f, 0x7a, 0x82, 0x87, 0x86, 0x82, - 0x86, 0x91, 0x95, 0x90, 0x85, 0x7e, 0x7d, 0x81, 0x82, 0x7d, 0x78, - 0x74, 0x77, 0x7c, 0x7f, 0x7d, 0x79, 0x7a, 0x7e, 0x7f, 0x7b, 0x77, - 0x73, 0x71, 0x73, 0x72, 0x6f, 0x6d, 0x6d, 0x6e, 0x6d, 0x6b, 0x6a, - 0x6b, 0x6b, 0x6c, 0x6d, 0x6c, 0x6a, 0x69, 0x69, 0x67, 0x66, 0x64, - 0x67, 0x79, 0x8f, 0x9f, 0xa6, 0xa7, 0xa6, 0xa9, 0xb4, 0xb8, 0xae, - 0x9e, 0x91, 0x89, 0x85, 0x85, 0x7d, 0x70, 0x6b, 0x6e, 0x76, 0x7d, - 0x83, 0x86, 0x88, 0x8f, 0x97, 0x9c, 0x9b, 0x96, 0x8e, 0x84, 0x7d, - 0x79, 0x72, 0x6c, 0x67, 0x64, 0x65, 0x6c, 0x76, 0x7b, 0x7f, 0x84, - 0x8a, 0x8f, 0x95, 0x97, 0x94, 0x92, 0x8e, 0x87, 0x83, 0x80, 0x7c, - 0x77, 0x72, 0x6e, 0x6c, 0x71, 0x79, 0x7d, 0x7d, 0x7c, 0x7b, 0x7d, - 0x81, 0x81, 0x7c, 0x75, 0x70, 0x6d, 0x6c, 0x6c, 0x6c, 0x69, 0x68, - 0x69, 0x6a, 0x6d, 0x6f, 0x72, 0x72, 0x71, 0x72, 0x74, 0x75, 0x73, - 0x71, 0x70, 0x6d, 0x6b, 0x6d, 0x7c, 0x92, 0x9f, 0xa7, 0xa8, 0xa5, - 0xa4, 0xa9, 0xb3, 0xb2, 0xa9, 0x9d, 0x8d, 0x81, 0x7d, 0x7e, 0x7c, - 0x79, 0x77, 0x73, 0x74, 0x7c, 0x86, 0x8f, 0x94, 0x97, 0x93, 0x8e, - 0x8c, 0x8b, 0x88, 0x82, 0x7b, 0x70, 0x68, 0x67, 0x67, 0x6b, 0x71, - 0x77, 0x7b, 0x80, 0x86, 0x8c, 0x91, 0x95, 0x94, 0x90, 0x8b, 0x86, - 0x81, 0x7d, 0x79, 0x74, 0x6f, 0x6d, 0x6e, 0x6f, 0x71, 0x75, 0x78, - 0x79, 0x7b, 0x7d, 0x7f, 0x7f, 0x7e, 0x7a, 0x75, 0x73, 0x71, 0x71, - 0x71, 0x6f, 0x6d, 0x6b, 0x6c, 0x6d, 0x6e, 0x70, 0x73, 0x76, 0x78, - 0x79, 0x79, 0x77, 0x75, 0x75, 0x74, 0x74, 0x73, 0x72, 0x72, 0x73, - 0x7d, 0x90, 0x9e, 0xa8, 0xac, 0xaa, 0xa6, 0xa5, 0xaa, 0xac, 0xab, - 0xa5, 0x99, 0x8a, 0x7d, 0x77, 0x75, 0x77, 0x7a, 0x79, 0x76, 0x74, - 0x77, 0x7e, 0x86, 0x8f, 0x93, 0x93, 0x8f, 0x89, 0x83, 0x7e, 0x7c, - 0x7a, 0x78, 0x74, 0x6f, 0x6c, 0x6d, 0x71, 0x78, 0x80, 0x87, 0x8a, - 0x8b, 0x8b, 0x89, 0x88, 0x87, 0x87, 0x85, 0x81, 0x7c, 0x75, 0x70, - 0x6f, 0x70, 0x72, 0x74, 0x77, 0x77, 0x77, 0x77, 0x79, 0x7b, 0x7c, - 0x7d, 0x7c, 0x7a, 0x76, 0x72, 0x70, 0x70, 0x71, 0x72, 0x72, 0x72, - 0x73, 0x74, 0x75, 0x78, 0x7c, 0x7e, 0x7f, 0x7e, 0x7d, 0x7c, 0x79, - 0x79, 0x78, 0x76, 0x75, 0x74, 0x74, 0x73, 0x72, 0x74, 0x7c, 0x89, - 0x97, 0xa3, 0xab, 0xac, 0xa8, 0xa3, 0xa0, 0x9e, 0x9f, 0x9e, 0x9b, - 0x93, 0x88, 0x7f, 0x79, 0x78, 0x7b, 0x7f, 0x83, 0x83, 0x81, 0x80, - 0x80, 0x81, 0x84, 0x85, 0x84, 0x81, 0x7b, 0x75, 0x71, 0x71, 0x73, - 0x77, 0x7a, 0x7b, 0x7b, 0x7b, 0x7c, 0x80, 0x82, 0x84, 0x84, 0x82, - 0x80, 0x7e, 0x7c, 0x7b, 0x7b, 0x7c, 0x7b, 0x7a, 0x79, 0x78, 0x78, - 0x78, 0x78, 0x78, 0x79, 0x79, 0x78, 0x77, 0x76, 0x75, 0x75, 0x76, - 0x76, 0x77, 0x77, 0x77, 0x76, 0x77, 0x77, 0x77, 0x77, 0x77, 0x76, - 0x74, 0x74, 0x75, 0x76, 0x78, 0x79, 0x7a, 0x7a, 0x7b, 0x7b, 0x7c, - 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7c, 0x79, 0x78, 0x7c, 0x85, - 0x8f, 0x99, 0xa0, 0xa4, 0xa2, 0x9f, 0x9c, 0x9b, 0x9b, 0x9d, 0x9e, - 0x9b, 0x96, 0x90, 0x89, 0x84, 0x83, 0x83, 0x85, 0x85, 0x85, 0x83, - 0x81, 0x7f, 0x7e, 0x7e, 0x7f, 0x7f, 0x7c, 0x79, 0x75, 0x72, 0x72, - 0x74, 0x76, 0x7a, 0x7c, 0x7c, 0x7b, 0x7a, 0x7a, 0x7a, 0x7c, 0x7e, - 0x7f, 0x7f, 0x7f, 0x7d, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7d, 0x7c, - 0x7a, 0x79, 0x78, 0x78, 0x79, 0x79, 0x79, 0x78, 0x78, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x78, 0x78, 0x78, 0x79, 0x79, 0x79, 0x78, - 0x78, 0x78, 0x78, 0x79, 0x79, 0x7a, 0x7a, 0x79, 0x79, 0x79, 0x7a, - 0x7a, 0x79, 0x79, 0x79, 0x79, 0x79, 0x7a, 0x7b, 0x7c, 0x7c, 0x7c, - 0x7c, 0x7e, 0x7f, 0x80, 0x81, 0x81, 0x81, 0x80, 0x80, 0x80, 0x81, - 0x82, 0x84, 0x85, 0x87, 0x89, 0x8a, 0x8b, 0x8d, 0x8e, 0x8e, 0x8e, - 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8d, 0x8c, 0x8b, 0x8a, 0x89, - 0x88, 0x87, 0x86, 0x86, 0x85, 0x84, 0x83, 0x82, 0x81, 0x80, 0x80, - 0x7f, 0x7e, 0x7e, 0x7e, 0x7d, 0x7c, 0x7b, 0x7a, 0x7a, 0x79, 0x79, - 0x78, 0x78, 0x77, 0x77, 0x77, 0x77, 0x78, 0x79, 0x7a, 0x7a, 0x7a, - 0x7a, 0x7a, 0x7a, 0x79, 0x79, 0x78, 0x78, 0x77, 0x77, 0x77, 0x78, - 0x78, 0x78, 0x78, 0x77, 0x77, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7b, - 0x7b, 0x7c, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7e, 0x7f, - 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x81, 0x81, 0x81, 0x81, 0x80, - 0x80, 0x81, 0x80, 0x7f, 0x80, 0x81, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x81, 0x81, 0x81, 0x82, 0x82, 0x83, 0x83, 0x84, 0x84, 0x84, - 0x84, 0x83, 0x83, 0x83, 0x84, 0x85, 0x85, 0x86, 0x86, 0x85, 0x84, - 0x84, 0x84, 0x83, 0x83, 0x83, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, - 0x80, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, - 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, - 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, - 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x80, - 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x7f, - 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, - }, - { // 3 - 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x80, - 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, - 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, - 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x80, - 0x80, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, - 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, - 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, - 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x7f, - 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, - 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x7f, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7f, - 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, - 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x80, - 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x80, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x7f, - 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x7f, 0x7e, 0x7f, 0x7f, 0x80, 0x81, 0x7f, 0x7f, 0x80, 0x7f, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7e, 0x7f, 0x80, - 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x7e, 0x7e, 0x7f, 0x80, 0x80, - 0x80, 0x81, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x81, 0x80, 0x7e, 0x80, - 0x7f, 0x80, 0x80, 0x7e, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, - 0x81, 0x80, 0x7d, 0x7e, 0x80, 0x7e, 0x80, 0x81, 0x7f, 0x80, 0x7f, - 0x7d, 0x81, 0x83, 0x7f, 0x7e, 0x80, 0x7f, 0x7e, 0x81, 0x7e, 0x7e, - 0x80, 0x7f, 0x81, 0x80, 0x7f, 0x7f, 0x7e, 0x82, 0x81, 0x7e, 0x80, - 0x7f, 0x7f, 0x80, 0x7f, 0x7e, 0x7f, 0x7f, 0x7f, 0x81, 0x80, 0x80, - 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x81, 0x7e, 0x7e, 0x80, - 0x80, 0x82, 0x81, 0x7e, 0x80, 0x81, 0x80, 0x80, 0x7e, 0x7d, 0x7f, - 0x7e, 0x7d, 0x7e, 0x80, 0x80, 0x80, 0x80, 0x80, 0x82, 0x7f, 0x80, - 0x80, 0x7e, 0x80, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, - 0x7f, 0x7f, 0x80, 0x7e, 0x80, 0x80, 0x7f, 0x7e, 0x7f, 0x81, 0x7f, - 0x81, 0x80, 0x80, 0x81, 0x7e, 0x80, 0x7d, 0x7e, 0x7f, 0x7b, 0x7f, - 0x7e, 0x7f, 0x80, 0x7f, 0x82, 0x7e, 0x7e, 0x82, 0x7f, 0x81, 0x83, - 0x81, 0x82, 0x84, 0x85, 0x80, 0x80, 0x7e, 0x7b, 0x7d, 0x7d, 0x7e, - 0x80, 0x83, 0x81, 0x7e, 0x81, 0x81, 0x7e, 0x7f, 0x81, 0x7e, 0x80, - 0x82, 0x7e, 0x7f, 0x80, 0x7c, 0x7d, 0x7e, 0x7f, 0x7d, 0x84, 0x89, - 0x7f, 0x7e, 0x82, 0x80, 0x81, 0x80, 0x84, 0x82, 0x7e, 0x7d, 0x75, - 0x78, 0x80, 0x7b, 0x7c, 0x82, 0x83, 0x7e, 0x7d, 0x83, 0x81, 0x83, - 0x86, 0x85, 0x84, 0x83, 0x85, 0x86, 0x84, 0x84, 0x88, 0x8b, 0x8a, - 0x89, 0x88, 0x84, 0x83, 0x84, 0x84, 0x80, 0x80, 0x82, 0x87, 0x86, - 0x82, 0x87, 0x84, 0x7e, 0x78, 0x74, 0x70, 0x69, 0x67, 0x6c, 0x70, - 0x70, 0x6f, 0x6e, 0x71, 0x73, 0x6e, 0x6f, 0x71, 0x6d, 0x6f, 0x71, - 0x6f, 0x6a, 0x6d, 0x77, 0x82, 0x8a, 0x90, 0x97, 0x98, 0x99, 0x9c, - 0x9c, 0x9a, 0x97, 0x97, 0x97, 0x94, 0x93, 0x92, 0x90, 0x91, 0x8f, - 0x90, 0x8f, 0x8b, 0x88, 0x85, 0x83, 0x80, 0x7e, 0x79, 0x76, 0x74, - 0x70, 0x6d, 0x6b, 0x69, 0x66, 0x63, 0x65, 0x66, 0x66, 0x62, 0x5e, - 0x5d, 0x5c, 0x59, 0x57, 0x5b, 0x66, 0x77, 0x89, 0x92, 0x92, 0x93, - 0x99, 0xa0, 0xa3, 0x9f, 0x99, 0x95, 0x93, 0x91, 0x8c, 0x85, 0x80, - 0x7f, 0x7f, 0x7f, 0x7f, 0x82, 0x86, 0x89, 0x8a, 0x8d, 0x91, 0x97, - 0x9b, 0x9b, 0x97, 0x90, 0x8a, 0x88, 0x87, 0x81, 0x7b, 0x77, 0x76, - 0x75, 0x74, 0x75, 0x74, 0x71, 0x6c, 0x69, 0x6a, 0x6c, 0x68, 0x62, - 0x5d, 0x5a, 0x5a, 0x58, 0x56, 0x5b, 0x69, 0x7b, 0x8b, 0x93, 0x92, - 0x91, 0x94, 0x9b, 0xa1, 0xa0, 0x9d, 0x99, 0x94, 0x8f, 0x88, 0x82, - 0x80, 0x80, 0x81, 0x7e, 0x7d, 0x7f, 0x84, 0x88, 0x8d, 0x90, 0x93, - 0x96, 0x97, 0x95, 0x91, 0x8e, 0x8b, 0x87, 0x82, 0x7d, 0x79, 0x75, - 0x73, 0x72, 0x6f, 0x6c, 0x6a, 0x69, 0x6a, 0x6b, 0x6b, 0x69, 0x66, - 0x63, 0x61, 0x5e, 0x59, 0x55, 0x56, 0x62, 0x76, 0x8b, 0x99, 0x9a, - 0x93, 0x8c, 0x8d, 0x98, 0xa5, 0xaa, 0xa6, 0x9a, 0x8d, 0x84, 0x80, - 0x80, 0x82, 0x84, 0x82, 0x7e, 0x7b, 0x7a, 0x7d, 0x82, 0x89, 0x91, - 0x97, 0x9b, 0x9b, 0x96, 0x91, 0x8d, 0x8b, 0x89, 0x85, 0x7e, 0x76, - 0x70, 0x70, 0x72, 0x72, 0x6f, 0x6c, 0x6a, 0x69, 0x68, 0x65, 0x61, - 0x5f, 0x5d, 0x5b, 0x59, 0x55, 0x53, 0x55, 0x60, 0x75, 0x8c, 0x9c, - 0x9f, 0x98, 0x8e, 0x8d, 0x98, 0xa5, 0xac, 0xa8, 0x9b, 0x8b, 0x7f, - 0x7c, 0x7f, 0x83, 0x84, 0x81, 0x7a, 0x74, 0x74, 0x7a, 0x85, 0x8f, - 0x96, 0x9a, 0x9c, 0x9b, 0x98, 0x95, 0x91, 0x8e, 0x8a, 0x84, 0x7c, - 0x75, 0x70, 0x70, 0x70, 0x6f, 0x6b, 0x67, 0x63, 0x62, 0x62, 0x60, - 0x5d, 0x5c, 0x5b, 0x59, 0x56, 0x51, 0x50, 0x56, 0x64, 0x7a, 0x90, - 0x9e, 0x9f, 0x98, 0x90, 0x90, 0x9a, 0xa6, 0xac, 0xa7, 0x98, 0x87, - 0x7b, 0x78, 0x7b, 0x80, 0x83, 0x7f, 0x79, 0x75, 0x76, 0x7f, 0x8a, - 0x94, 0x9b, 0x9e, 0x9e, 0x9d, 0x9d, 0x9b, 0x97, 0x91, 0x88, 0x7f, - 0x76, 0x70, 0x6c, 0x69, 0x66, 0x63, 0x61, 0x5f, 0x5d, 0x5b, 0x59, - 0x57, 0x56, 0x56, 0x56, 0x56, 0x54, 0x51, 0x50, 0x57, 0x69, 0x85, - 0x9e, 0xa9, 0xa3, 0x94, 0x8a, 0x8d, 0x9c, 0xaa, 0xad, 0xa2, 0x8d, - 0x7a, 0x71, 0x74, 0x7d, 0x83, 0x83, 0x7d, 0x77, 0x77, 0x7d, 0x89, - 0x96, 0xa1, 0xa8, 0xa8, 0xa4, 0x9e, 0x9a, 0x97, 0x94, 0x8e, 0x83, - 0x76, 0x6c, 0x66, 0x64, 0x64, 0x63, 0x5f, 0x59, 0x54, 0x52, 0x56, - 0x5b, 0x5a, 0x55, 0x52, 0x53, 0x56, 0x59, 0x54, 0x4e, 0x4e, 0x5b, - 0x76, 0x94, 0xa8, 0xa8, 0x9b, 0x8e, 0x8d, 0x98, 0xa6, 0xac, 0xa5, - 0x93, 0x80, 0x74, 0x73, 0x79, 0x7f, 0x80, 0x7d, 0x79, 0x78, 0x7d, - 0x87, 0x93, 0x9e, 0xa5, 0xa7, 0xa4, 0x9e, 0x98, 0x92, 0x8e, 0x89, - 0x81, 0x77, 0x6e, 0x67, 0x65, 0x64, 0x62, 0x5e, 0x5a, 0x58, 0x59, - 0x5c, 0x5e, 0x5f, 0x5e, 0x5c, 0x5a, 0x59, 0x58, 0x55, 0x4f, 0x4b, - 0x4f, 0x61, 0x7f, 0x9b, 0xa7, 0x9f, 0x91, 0x8c, 0x99, 0xad, 0xb3, - 0xa6, 0x8d, 0x7c, 0x7b, 0x85, 0x8a, 0x83, 0x75, 0x6a, 0x6c, 0x79, - 0x87, 0x8e, 0x8c, 0x89, 0x8d, 0x9b, 0xab, 0xb3, 0xae, 0x9e, 0x8f, - 0x86, 0x85, 0x83, 0x7d, 0x73, 0x69, 0x62, 0x5f, 0x60, 0x62, 0x64, - 0x62, 0x5d, 0x5b, 0x5b, 0x5a, 0x5c, 0x5f, 0x63, 0x63, 0x61, 0x5c, - 0x57, 0x54, 0x50, 0x4c, 0x4c, 0x57, 0x70, 0x8f, 0xa3, 0xa3, 0x96, - 0x8d, 0x93, 0xa6, 0xb3, 0xab, 0x95, 0x81, 0x7c, 0x83, 0x88, 0x83, - 0x77, 0x6d, 0x6e, 0x78, 0x84, 0x8a, 0x8b, 0x8b, 0x90, 0x9a, 0xa6, - 0xab, 0xa7, 0x9d, 0x94, 0x8e, 0x89, 0x82, 0x79, 0x72, 0x6f, 0x6c, - 0x68, 0x61, 0x5d, 0x5e, 0x61, 0x62, 0x5f, 0x5c, 0x5f, 0x66, 0x6a, - 0x64, 0x5c, 0x5a, 0x5f, 0x64, 0x62, 0x5b, 0x55, 0x53, 0x51, 0x50, - 0x55, 0x69, 0x87, 0x9c, 0x9a, 0x8a, 0x87, 0x9b, 0xb5, 0xb9, 0xa3, - 0x89, 0x81, 0x90, 0x9c, 0x92, 0x78, 0x66, 0x6c, 0x7e, 0x85, 0x7c, - 0x73, 0x7a, 0x8d, 0x9a, 0x9a, 0x96, 0x9a, 0xa4, 0xa7, 0x9d, 0x8f, - 0x88, 0x87, 0x85, 0x7d, 0x73, 0x6d, 0x6d, 0x6d, 0x6b, 0x68, 0x67, - 0x69, 0x6a, 0x68, 0x65, 0x62, 0x62, 0x63, 0x68, 0x6b, 0x67, 0x62, - 0x61, 0x61, 0x5d, 0x58, 0x57, 0x5d, 0x66, 0x68, 0x65, 0x69, 0x7c, - 0x97, 0xa3, 0x9c, 0x94, 0x98, 0xa3, 0xa5, 0x99, 0x8b, 0x85, 0x84, - 0x80, 0x7b, 0x79, 0x77, 0x74, 0x76, 0x7c, 0x84, 0x8b, 0x8c, 0x8d, - 0x91, 0x96, 0x99, 0x97, 0x93, 0x8e, 0x8c, 0x8c, 0x87, 0x7e, 0x78, - 0x7c, 0x83, 0x82, 0x7b, 0x77, 0x7d, 0x81, 0x7b, 0x72, 0x6e, 0x6d, - 0x66, 0x5c, 0x5c, 0x62, 0x6a, 0x71, 0x77, 0x77, 0x79, 0x80, 0x80, - 0x77, 0x6f, 0x6e, 0x6a, 0x60, 0x59, 0x59, 0x5a, 0x52, 0x47, 0x45, - 0x4b, 0x5e, 0x79, 0x89, 0x88, 0x8c, 0xa3, 0xb7, 0xb1, 0x9c, 0x9b, - 0xab, 0xa9, 0x8e, 0x7b, 0x83, 0x88, 0x79, 0x69, 0x6f, 0x7f, 0x80, - 0x79, 0x7d, 0x8d, 0x94, 0x90, 0x8e, 0x92, 0x94, 0x8f, 0x87, 0x84, - 0x86, 0x86, 0x7f, 0x78, 0x7a, 0x7f, 0x82, 0x83, 0x87, 0x8e, 0x90, - 0x8e, 0x8e, 0x8d, 0x87, 0x81, 0x7b, 0x73, 0x6c, 0x65, 0x5e, 0x5a, - 0x59, 0x59, 0x57, 0x5b, 0x65, 0x6e, 0x76, 0x7a, 0x79, 0x74, 0x6d, - 0x65, 0x5d, 0x59, 0x59, 0x58, 0x56, 0x57, 0x5b, 0x5a, 0x58, 0x5a, - 0x56, 0x54, 0x74, 0x95, 0x88, 0x7e, 0x9e, 0xbe, 0xa6, 0x8b, 0xa6, - 0xbc, 0xa0, 0x82, 0x93, 0xa1, 0x85, 0x6f, 0x7a, 0x85, 0x79, 0x72, - 0x7c, 0x85, 0x86, 0x84, 0x88, 0x8d, 0x91, 0x92, 0x8a, 0x87, 0x88, - 0x84, 0x79, 0x75, 0x7a, 0x77, 0x6f, 0x72, 0x7d, 0x82, 0x82, 0x8a, - 0x96, 0x9b, 0x98, 0x97, 0x9b, 0x97, 0x8c, 0x86, 0x83, 0x7d, 0x74, - 0x6f, 0x6e, 0x6b, 0x66, 0x63, 0x64, 0x62, 0x60, 0x61, 0x65, 0x63, - 0x61, 0x63, 0x66, 0x69, 0x68, 0x63, 0x63, 0x65, 0x62, 0x61, 0x65, - 0x66, 0x62, 0x62, 0x64, 0x66, 0x64, 0x60, 0x52, 0x67, 0x9a, 0x84, - 0x70, 0xa0, 0xba, 0x9d, 0x91, 0xb8, 0xb9, 0x96, 0x94, 0xa5, 0x9d, - 0x82, 0x80, 0x85, 0x7d, 0x74, 0x73, 0x7b, 0x78, 0x76, 0x7b, 0x80, - 0x84, 0x84, 0x8a, 0x8d, 0x8c, 0x8a, 0x87, 0x86, 0x7f, 0x79, 0x76, - 0x73, 0x71, 0x71, 0x74, 0x77, 0x7b, 0x7f, 0x83, 0x86, 0x88, 0x8b, - 0x8d, 0x8f, 0x90, 0x8e, 0x8d, 0x8d, 0x8a, 0x84, 0x82, 0x82, 0x7d, - 0x7a, 0x7d, 0x7c, 0x77, 0x78, 0x7a, 0x78, 0x76, 0x75, 0x74, 0x75, - 0x71, 0x6c, 0x6d, 0x6e, 0x6b, 0x68, 0x6b, 0x6c, 0x6a, 0x6d, 0x6d, - 0x69, 0x6c, 0x6f, 0x6a, 0x6b, 0x6f, 0x6c, 0x65, 0x66, 0x5f, 0x5f, - 0x83, 0x7c, 0x6f, 0x93, 0xa0, 0x94, 0x96, 0xac, 0xaa, 0x9d, 0xa0, - 0xa1, 0x9c, 0x8c, 0x84, 0x88, 0x7e, 0x71, 0x74, 0x79, 0x73, 0x70, - 0x7b, 0x81, 0x7e, 0x85, 0x8c, 0x8a, 0x8b, 0x8d, 0x8e, 0x89, 0x82, - 0x85, 0x82, 0x7a, 0x76, 0x77, 0x77, 0x73, 0x72, 0x76, 0x7b, 0x7a, - 0x7d, 0x87, 0x85, 0x85, 0x8b, 0x89, 0x87, 0x87, 0x87, 0x85, 0x85, - 0x85, 0x85, 0x87, 0x83, 0x81, 0x82, 0x7f, 0x7d, 0x7e, 0x7f, 0x7b, - 0x78, 0x79, 0x79, 0x75, 0x75, 0x75, 0x75, 0x75, 0x72, 0x72, 0x73, - 0x70, 0x6e, 0x6f, 0x6e, 0x6c, 0x6c, 0x6b, 0x6a, 0x6c, 0x6d, 0x6e, - 0x6c, 0x6b, 0x68, 0x66, 0x63, 0x5e, 0x7e, 0x7a, 0x6a, 0x8f, 0x9a, - 0x8c, 0x95, 0xa9, 0xa0, 0x9a, 0xa2, 0xa1, 0x9b, 0x92, 0x92, 0x91, - 0x85, 0x7c, 0x80, 0x7f, 0x73, 0x76, 0x7c, 0x7a, 0x79, 0x81, 0x85, - 0x81, 0x86, 0x8b, 0x8b, 0x89, 0x88, 0x89, 0x86, 0x7f, 0x80, 0x7f, - 0x77, 0x79, 0x79, 0x77, 0x77, 0x78, 0x7a, 0x7c, 0x7e, 0x80, 0x82, - 0x83, 0x85, 0x86, 0x87, 0x88, 0x87, 0x88, 0x87, 0x84, 0x84, 0x84, - 0x80, 0x7d, 0x7f, 0x7a, 0x76, 0x78, 0x76, 0x74, 0x74, 0x75, 0x75, - 0x74, 0x76, 0x75, 0x77, 0x77, 0x78, 0x7a, 0x77, 0x78, 0x7a, 0x77, - 0x76, 0x75, 0x74, 0x72, 0x71, 0x74, 0x72, 0x74, 0x73, 0x71, 0x71, - 0x6d, 0x6c, 0x68, 0x71, 0x7a, 0x71, 0x7d, 0x8a, 0x87, 0x89, 0x96, - 0x98, 0x95, 0x9b, 0x9f, 0x9c, 0x98, 0x99, 0x98, 0x90, 0x8c, 0x8d, - 0x88, 0x80, 0x81, 0x82, 0x7b, 0x7b, 0x7f, 0x7e, 0x7d, 0x7f, 0x83, - 0x81, 0x81, 0x84, 0x83, 0x83, 0x82, 0x82, 0x81, 0x7f, 0x7e, 0x7e, - 0x7c, 0x7a, 0x7c, 0x7b, 0x7a, 0x7c, 0x7d, 0x7d, 0x7e, 0x81, 0x82, - 0x82, 0x84, 0x85, 0x84, 0x84, 0x83, 0x82, 0x80, 0x7e, 0x7d, 0x7b, - 0x79, 0x79, 0x76, 0x75, 0x75, 0x74, 0x73, 0x73, 0x75, 0x74, 0x74, - 0x77, 0x77, 0x75, 0x77, 0x77, 0x76, 0x76, 0x76, 0x75, 0x74, 0x72, - 0x78, 0x77, 0x77, 0x7d, 0x7e, 0x7d, 0x79, 0x78, 0x75, 0x71, 0x6f, - 0x71, 0x7c, 0x75, 0x78, 0x87, 0x83, 0x84, 0x8d, 0x90, 0x8e, 0x93, - 0x96, 0x95, 0x95, 0x95, 0x95, 0x91, 0x90, 0x8f, 0x8b, 0x88, 0x87, - 0x86, 0x83, 0x82, 0x83, 0x82, 0x81, 0x82, 0x81, 0x80, 0x80, 0x81, - 0x80, 0x7f, 0x7f, 0x7f, 0x7c, 0x7c, 0x7c, 0x7a, 0x7a, 0x7a, 0x7a, - 0x7a, 0x7a, 0x7b, 0x7c, 0x7c, 0x7e, 0x7f, 0x7f, 0x7f, 0x80, 0x80, - 0x80, 0x80, 0x81, 0x80, 0x7f, 0x80, 0x7f, 0x7e, 0x7e, 0x7e, 0x7d, - 0x7d, 0x7c, 0x7c, 0x7c, 0x7b, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, - 0x7d, 0x7c, 0x7d, 0x7d, 0x7d, 0x7c, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, - 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7c, 0x7d, 0x7d, 0x7d, 0x7d, 0x7e, - 0x7e, 0x7d, 0x7e, 0x7e, 0x7d, 0x7e, 0x7d, 0x7d, 0x7d, 0x7c, 0x7c, - 0x7c, 0x7c, 0x7c, 0x7c, 0x7d, 0x7d, 0x7e, 0x7f, 0x80, 0x80, 0x80, - 0x82, 0x82, 0x82, 0x83, 0x84, 0x84, 0x84, 0x86, 0x85, 0x86, 0x87, - 0x87, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x87, 0x87, 0x86, - 0x84, 0x84, 0x82, 0x80, 0x7f, 0x7d, 0x7c, 0x7a, 0x79, 0x79, 0x78, - 0x77, 0x77, 0x76, 0x76, 0x76, 0x76, 0x76, 0x76, 0x77, 0x77, 0x78, - 0x78, 0x79, 0x7a, 0x79, 0x7b, 0x7b, 0x7a, 0x7c, 0x7b, 0x7b, 0x7d, - 0x7c, 0x7c, 0x7d, 0x7c, 0x7c, 0x7e, 0x7d, 0x7c, 0x7e, 0x7e, 0x7c, - 0x7d, 0x7d, 0x7c, 0x7c, 0x7d, 0x7d, 0x7c, 0x7d, 0x7d, 0x7c, 0x7d, - 0x7e, 0x7d, 0x7e, 0x7f, 0x7e, 0x7e, 0x7f, 0x7f, 0x7e, 0x7f, 0x7f, - 0x7f, 0x7f, 0x81, 0x82, 0x83, 0x85, 0x86, 0x86, 0x88, 0x89, 0x8a, - 0x8b, 0x8c, 0x8c, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8b, 0x8b, 0x8a, - 0x89, 0x88, 0x87, 0x86, 0x85, 0x85, 0x83, 0x82, 0x81, 0x80, 0x7e, - 0x7d, 0x7c, 0x7b, 0x79, 0x79, 0x78, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x78, 0x78, 0x78, 0x79, 0x79, 0x7a, 0x7a, 0x7a, - 0x7a, 0x7a, 0x7b, 0x7b, 0x7b, 0x7c, 0x7d, 0x7c, 0x7e, 0x7f, 0x7e, - 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x7e, 0x7e, 0x7e, 0x7d, 0x7c, 0x7c, - 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7c, 0x7c, 0x7d, 0x7d, 0x7e, 0x7f, - 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x7f, - 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x81, 0x81, 0x82, 0x82, - 0x83, 0x83, 0x83, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, - 0x84, 0x84, 0x84, 0x84, 0x83, 0x83, 0x83, 0x82, 0x82, 0x81, 0x81, - 0x81, 0x80, 0x80, 0x80, 0x7f, 0x7e, 0x7e, 0x7d, 0x7d, 0x7d, 0x7d, - 0x7d, 0x7d, 0x7d, 0x7c, 0x7c, 0x7c, 0x7d, 0x7d, 0x7d, 0x7d, 0x7e, - 0x7e, 0x7e, 0x7e, 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7e, - 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, - 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, - 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7f, 0x7f, 0x7e, 0x7f, 0x7f, 0x7f, - 0x80, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, - 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, - 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x80, - 0x7f, 0x80, 0x80, - }, - { // 4 - 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, - 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x7f, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, - 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x7f, - 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, - 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, - 0x7f, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x80, - 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, - 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x7f, - 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x81, 0x80, 0x7f, - 0x80, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x82, 0x80, 0x7f, - 0x7f, 0x7e, 0x7e, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7e, 0x80, 0x80, - 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x81, 0x80, 0x7f, 0x7f, 0x80, 0x80, - 0x80, 0x7e, 0x7e, 0x7e, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, - 0x7e, 0x7f, 0x80, 0x80, 0x80, 0x7f, 0x81, 0x80, 0x7f, 0x7f, 0x80, - 0x81, 0x80, 0x7f, 0x80, 0x81, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x80, - 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, - 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7e, 0x7f, 0x7f, 0x7f, - 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x7e, 0x7f, 0x80, 0x80, 0x80, 0x81, 0x82, 0x7f, 0x7e, - 0x80, 0x80, 0x80, 0x7f, 0x7d, 0x7f, 0x7f, 0x80, 0x81, 0x80, 0x80, - 0x7f, 0x80, 0x81, 0x7e, 0x80, 0x80, 0x7f, 0x7e, 0x7e, 0x7e, 0x81, - 0x7e, 0x80, 0x81, 0x7d, 0x80, 0x7f, 0x80, 0x81, 0x7e, 0x80, 0x81, - 0x81, 0x82, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x7e, 0x80, 0x80, 0x7f, - 0x80, 0x7f, 0x7e, 0x7e, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x81, 0x7d, 0x7c, 0x7e, 0x82, 0x82, 0x80, 0x7f, 0x7e, 0x80, - 0x80, 0x7f, 0x7f, 0x7f, 0x80, 0x82, 0x81, 0x7f, 0x7e, 0x80, 0x7f, - 0x80, 0x81, 0x7f, 0x7e, 0x7f, 0x81, 0x80, 0x7d, 0x7e, 0x80, 0x80, - 0x82, 0x80, 0x7c, 0x80, 0x81, 0x7f, 0x7f, 0x7f, 0x7e, 0x80, 0x80, - 0x80, 0x7e, 0x7e, 0x80, 0x7f, 0x80, 0x7e, 0x7e, 0x80, 0x82, 0x81, - 0x7f, 0x81, 0x82, 0x7f, 0x7f, 0x82, 0x7f, 0x7e, 0x7f, 0x7e, 0x7e, - 0x80, 0x83, 0x81, 0x80, 0x7f, 0x7d, 0x80, 0x81, 0x7f, 0x80, 0x80, - 0x7e, 0x7e, 0x7e, 0x80, 0x81, 0x7f, 0x7e, 0x7e, 0x7f, 0x83, 0x82, - 0x81, 0x80, 0x7f, 0x80, 0x7e, 0x7d, 0x80, 0x82, 0x81, 0x7d, 0x7e, - 0x7e, 0x7d, 0x7d, 0x80, 0x82, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7e, - 0x80, 0x83, 0x81, 0x80, 0x80, 0x80, 0x81, 0x7f, 0x80, 0x80, 0x7e, - 0x7e, 0x7f, 0x7f, 0x7e, 0x7e, 0x80, 0x83, 0x81, 0x7e, 0x80, 0x81, - 0x81, 0x80, 0x7f, 0x7e, 0x7e, 0x7f, 0x80, 0x7e, 0x7e, 0x82, 0x80, - 0x7d, 0x7f, 0x83, 0x81, 0x7f, 0x7c, 0x7e, 0x83, 0x80, 0x80, 0x80, - 0x81, 0x80, 0x7b, 0x7a, 0x7f, 0x82, 0x83, 0x82, 0x7d, 0x7e, 0x7f, - 0x7f, 0x80, 0x7e, 0x7f, 0x81, 0x81, 0x80, 0x7f, 0x7d, 0x7d, 0x7d, - 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x81, 0x80, 0x7f, 0x7f, 0x7e, 0x7d, - 0x7f, 0x7e, 0x7e, 0x7d, 0x7b, 0x7b, 0x7c, 0x80, 0x81, 0x81, 0x82, - 0x83, 0x86, 0x88, 0x8a, 0x8d, 0x8e, 0x8c, 0x8b, 0x8a, 0x87, 0x86, - 0x85, 0x85, 0x85, 0x85, 0x85, 0x82, 0x7f, 0x7d, 0x7d, 0x7d, 0x7f, - 0x83, 0x82, 0x7d, 0x79, 0x76, 0x72, 0x6f, 0x6c, 0x6a, 0x6b, 0x6c, - 0x6c, 0x6c, 0x6a, 0x65, 0x62, 0x63, 0x62, 0x60, 0x5e, 0x5e, 0x63, - 0x6b, 0x7a, 0x8e, 0xa1, 0xac, 0xad, 0xae, 0xa9, 0xa0, 0x97, 0x8d, - 0x87, 0x84, 0x82, 0x83, 0x83, 0x83, 0x81, 0x7f, 0x7d, 0x7b, 0x7d, - 0x80, 0x83, 0x89, 0x8c, 0x90, 0x92, 0x93, 0x91, 0x8c, 0x89, 0x86, - 0x84, 0x84, 0x84, 0x83, 0x80, 0x7e, 0x7a, 0x76, 0x74, 0x71, 0x70, - 0x6f, 0x6d, 0x6a, 0x66, 0x63, 0x5f, 0x5c, 0x5a, 0x58, 0x57, 0x55, - 0x55, 0x5e, 0x6c, 0x80, 0x98, 0xad, 0xb8, 0xb9, 0xb4, 0xa9, 0x99, - 0x8a, 0x7d, 0x75, 0x74, 0x75, 0x79, 0x7e, 0x80, 0x81, 0x80, 0x7f, - 0x80, 0x83, 0x88, 0x8f, 0x96, 0x9a, 0x9b, 0x97, 0x8f, 0x86, 0x7d, - 0x76, 0x74, 0x76, 0x7b, 0x80, 0x85, 0x87, 0x85, 0x83, 0x80, 0x7d, - 0x7c, 0x7b, 0x7a, 0x78, 0x74, 0x6f, 0x69, 0x64, 0x60, 0x5d, 0x5b, - 0x5c, 0x5d, 0x5f, 0x62, 0x67, 0x71, 0x7e, 0x8f, 0xa0, 0xae, 0xb8, - 0xb9, 0xb2, 0xa5, 0x95, 0x86, 0x79, 0x72, 0x6f, 0x71, 0x75, 0x7a, - 0x7d, 0x80, 0x81, 0x81, 0x83, 0x86, 0x8b, 0x91, 0x98, 0x9c, 0x9c, - 0x99, 0x91, 0x86, 0x7c, 0x73, 0x6f, 0x6f, 0x73, 0x78, 0x7e, 0x83, - 0x85, 0x85, 0x83, 0x80, 0x7e, 0x7d, 0x7e, 0x7d, 0x7c, 0x79, 0x74, - 0x6e, 0x67, 0x61, 0x5d, 0x5b, 0x5b, 0x5c, 0x5f, 0x62, 0x66, 0x6e, - 0x79, 0x87, 0x98, 0xa6, 0xb2, 0xb7, 0xb5, 0xad, 0xa0, 0x91, 0x81, - 0x76, 0x6e, 0x6a, 0x6c, 0x70, 0x74, 0x79, 0x7d, 0x81, 0x84, 0x88, - 0x8c, 0x90, 0x95, 0x98, 0x99, 0x98, 0x93, 0x8b, 0x81, 0x78, 0x71, - 0x6d, 0x70, 0x75, 0x7c, 0x84, 0x89, 0x8b, 0x8a, 0x88, 0x85, 0x81, - 0x7e, 0x7c, 0x7a, 0x79, 0x77, 0x75, 0x70, 0x6b, 0x66, 0x61, 0x5e, - 0x5d, 0x5c, 0x5e, 0x60, 0x63, 0x68, 0x71, 0x7d, 0x8c, 0x9a, 0xa8, - 0xb1, 0xb3, 0xb0, 0xa7, 0x9a, 0x8c, 0x7f, 0x75, 0x6f, 0x6e, 0x70, - 0x74, 0x79, 0x7e, 0x82, 0x86, 0x88, 0x8c, 0x8f, 0x92, 0x95, 0x95, - 0x93, 0x8e, 0x87, 0x7f, 0x77, 0x73, 0x71, 0x73, 0x79, 0x7f, 0x85, - 0x8a, 0x8c, 0x8b, 0x88, 0x84, 0x80, 0x7c, 0x79, 0x77, 0x75, 0x74, - 0x73, 0x71, 0x6e, 0x6b, 0x69, 0x67, 0x67, 0x67, 0x65, 0x65, 0x64, - 0x63, 0x63, 0x69, 0x72, 0x7e, 0x90, 0xa0, 0xae, 0xb9, 0xba, 0xb5, - 0xaa, 0x9b, 0x8b, 0x7d, 0x74, 0x6e, 0x6c, 0x6e, 0x70, 0x74, 0x78, - 0x7a, 0x7e, 0x82, 0x87, 0x8c, 0x92, 0x98, 0x9a, 0x9a, 0x96, 0x8d, - 0x84, 0x78, 0x6f, 0x69, 0x67, 0x6b, 0x74, 0x7f, 0x8a, 0x93, 0x98, - 0x96, 0x91, 0x8a, 0x82, 0x7c, 0x77, 0x74, 0x74, 0x74, 0x74, 0x74, - 0x73, 0x72, 0x70, 0x6e, 0x6c, 0x6b, 0x6a, 0x69, 0x68, 0x66, 0x65, - 0x64, 0x63, 0x67, 0x6e, 0x7b, 0x8b, 0x9b, 0xab, 0xb6, 0xba, 0xb7, - 0xad, 0x9f, 0x90, 0x82, 0x77, 0x70, 0x6d, 0x6d, 0x6f, 0x72, 0x76, - 0x79, 0x7d, 0x81, 0x86, 0x8b, 0x91, 0x96, 0x99, 0x9a, 0x95, 0x8e, - 0x84, 0x78, 0x6d, 0x65, 0x62, 0x63, 0x6a, 0x76, 0x82, 0x8e, 0x98, - 0x9d, 0x9e, 0x9a, 0x93, 0x8b, 0x82, 0x7a, 0x73, 0x6f, 0x6b, 0x6a, - 0x6a, 0x6b, 0x6e, 0x72, 0x77, 0x7c, 0x7f, 0x80, 0x7f, 0x7b, 0x75, - 0x6d, 0x65, 0x5e, 0x58, 0x57, 0x5a, 0x63, 0x72, 0x84, 0x99, 0xab, - 0xb8, 0xbd, 0xbb, 0xb3, 0xa6, 0x96, 0x87, 0x79, 0x70, 0x6a, 0x68, - 0x69, 0x6c, 0x71, 0x76, 0x7c, 0x82, 0x88, 0x8e, 0x93, 0x98, 0x9b, - 0x9a, 0x96, 0x8f, 0x84, 0x78, 0x6d, 0x64, 0x60, 0x60, 0x65, 0x6f, - 0x7b, 0x88, 0x93, 0x9b, 0x9f, 0x9f, 0x9a, 0x94, 0x8c, 0x84, 0x7c, - 0x75, 0x6f, 0x6b, 0x69, 0x68, 0x6a, 0x6d, 0x71, 0x77, 0x7d, 0x81, - 0x84, 0x82, 0x7e, 0x78, 0x70, 0x69, 0x63, 0x5e, 0x5d, 0x5d, 0x60, - 0x64, 0x6b, 0x76, 0x83, 0x92, 0xa1, 0xae, 0xb7, 0xb8, 0xb4, 0xac, - 0x9f, 0x91, 0x82, 0x77, 0x70, 0x6b, 0x6c, 0x6e, 0x71, 0x76, 0x79, - 0x7e, 0x82, 0x87, 0x8c, 0x90, 0x93, 0x93, 0x91, 0x8d, 0x86, 0x7e, - 0x76, 0x70, 0x6c, 0x6b, 0x6e, 0x73, 0x79, 0x82, 0x8a, 0x90, 0x95, - 0x96, 0x94, 0x8f, 0x89, 0x82, 0x7c, 0x78, 0x75, 0x74, 0x75, 0x76, - 0x77, 0x78, 0x79, 0x79, 0x79, 0x7a, 0x7a, 0x79, 0x78, 0x76, 0x74, - 0x71, 0x6e, 0x6c, 0x6a, 0x68, 0x67, 0x67, 0x67, 0x67, 0x68, 0x68, - 0x70, 0x7d, 0x8a, 0x9d, 0xad, 0xb6, 0xba, 0xb4, 0xa7, 0x96, 0x84, - 0x76, 0x6b, 0x69, 0x6c, 0x70, 0x78, 0x7d, 0x7e, 0x7f, 0x80, 0x81, - 0x84, 0x8a, 0x90, 0x94, 0x97, 0x97, 0x8f, 0x87, 0x7c, 0x70, 0x68, - 0x63, 0x64, 0x69, 0x73, 0x7d, 0x84, 0x8a, 0x8d, 0x8b, 0x8b, 0x8a, - 0x88, 0x89, 0x88, 0x87, 0x86, 0x84, 0x80, 0x7d, 0x7c, 0x7e, 0x7f, - 0x83, 0x86, 0x86, 0x85, 0x82, 0x7e, 0x79, 0x75, 0x73, 0x72, 0x73, - 0x74, 0x75, 0x75, 0x75, 0x74, 0x72, 0x71, 0x70, 0x6e, 0x6d, 0x6c, - 0x6b, 0x6a, 0x6a, 0x69, 0x67, 0x66, 0x65, 0x6a, 0x7a, 0x8a, 0x9c, - 0xb0, 0xb8, 0xb7, 0xaf, 0xa0, 0x8c, 0x7a, 0x70, 0x6b, 0x6c, 0x74, - 0x7b, 0x7e, 0x81, 0x80, 0x7c, 0x7c, 0x81, 0x89, 0x92, 0x9c, 0xa0, - 0x9b, 0x92, 0x85, 0x75, 0x6a, 0x64, 0x63, 0x69, 0x72, 0x7c, 0x83, - 0x87, 0x89, 0x88, 0x86, 0x86, 0x87, 0x88, 0x8a, 0x89, 0x87, 0x81, - 0x7a, 0x74, 0x71, 0x72, 0x77, 0x7e, 0x87, 0x8f, 0x95, 0x97, 0x95, - 0x91, 0x8a, 0x81, 0x7a, 0x73, 0x6f, 0x6e, 0x6f, 0x73, 0x76, 0x7a, - 0x7c, 0x7d, 0x7e, 0x7c, 0x78, 0x76, 0x72, 0x70, 0x6f, 0x6e, 0x6d, - 0x6b, 0x69, 0x68, 0x67, 0x67, 0x66, 0x64, 0x65, 0x68, 0x76, 0x8a, - 0x9e, 0xaf, 0xba, 0xb9, 0xad, 0x9a, 0x86, 0x77, 0x6d, 0x6e, 0x76, - 0x7e, 0x84, 0x86, 0x83, 0x7f, 0x7c, 0x7e, 0x86, 0x90, 0x99, 0x9f, - 0x9b, 0x8e, 0x80, 0x72, 0x69, 0x66, 0x6b, 0x75, 0x7c, 0x80, 0x82, - 0x80, 0x7d, 0x7d, 0x80, 0x84, 0x88, 0x8a, 0x88, 0x84, 0x7f, 0x7b, - 0x78, 0x78, 0x7b, 0x7e, 0x80, 0x85, 0x87, 0x89, 0x8b, 0x8c, 0x8a, - 0x89, 0x86, 0x83, 0x7e, 0x7c, 0x7c, 0x7c, 0x7c, 0x7d, 0x7d, 0x7d, - 0x7b, 0x7b, 0x7b, 0x79, 0x77, 0x75, 0x73, 0x71, 0x6f, 0x70, 0x70, - 0x71, 0x72, 0x72, 0x72, 0x72, 0x71, 0x70, 0x6e, 0x6c, 0x6c, 0x70, - 0x73, 0x75, 0x7c, 0x91, 0xa7, 0xb2, 0xb1, 0xa8, 0x9a, 0x88, 0x79, - 0x78, 0x7e, 0x82, 0x82, 0x81, 0x80, 0x7e, 0x7f, 0x87, 0x91, 0x96, - 0x95, 0x8f, 0x89, 0x82, 0x7a, 0x78, 0x7a, 0x7b, 0x7b, 0x7a, 0x7b, - 0x7d, 0x7c, 0x7d, 0x80, 0x82, 0x83, 0x82, 0x81, 0x81, 0x81, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7d, 0x7c, 0x7d, 0x7d, 0x7e, 0x80, 0x85, 0x8a, - 0x8d, 0x8e, 0x8d, 0x8a, 0x85, 0x7f, 0x7c, 0x7b, 0x7b, 0x7c, 0x7c, - 0x7e, 0x7e, 0x7d, 0x7c, 0x7c, 0x7d, 0x7c, 0x7a, 0x78, 0x75, 0x72, - 0x70, 0x70, 0x71, 0x72, 0x72, 0x72, 0x73, 0x74, 0x74, 0x75, 0x74, - 0x71, 0x6f, 0x6d, 0x6b, 0x6a, 0x6a, 0x6d, 0x71, 0x78, 0x8f, 0xad, - 0xba, 0xb2, 0x9f, 0x92, 0x89, 0x80, 0x7e, 0x85, 0x89, 0x87, 0x7e, - 0x79, 0x7f, 0x88, 0x8c, 0x8d, 0x8d, 0x8d, 0x8a, 0x84, 0x81, 0x81, - 0x7f, 0x79, 0x75, 0x78, 0x7e, 0x81, 0x7f, 0x7f, 0x80, 0x80, 0x7f, - 0x7e, 0x82, 0x85, 0x82, 0x7e, 0x7c, 0x7d, 0x7f, 0x7f, 0x7e, 0x7f, - 0x7f, 0x7f, 0x7e, 0x7f, 0x83, 0x89, 0x8d, 0x8e, 0x8c, 0x89, 0x84, - 0x7f, 0x7c, 0x7b, 0x7d, 0x7e, 0x7f, 0x7e, 0x7d, 0x7b, 0x7b, 0x7c, - 0x7c, 0x7b, 0x7a, 0x79, 0x79, 0x79, 0x76, 0x73, 0x72, 0x73, 0x75, - 0x76, 0x76, 0x77, 0x77, 0x75, 0x72, 0x71, 0x71, 0x72, 0x71, 0x70, - 0x70, 0x71, 0x70, 0x6d, 0x6f, 0x80, 0x9e, 0xb5, 0xb4, 0xa0, 0x8d, - 0x8a, 0x8d, 0x8c, 0x87, 0x83, 0x81, 0x80, 0x7e, 0x7e, 0x86, 0x8e, - 0x8e, 0x88, 0x84, 0x88, 0x8e, 0x8c, 0x83, 0x7c, 0x7a, 0x7d, 0x7e, - 0x7c, 0x7d, 0x7e, 0x7e, 0x7e, 0x7d, 0x7f, 0x81, 0x80, 0x7c, 0x7a, - 0x7c, 0x82, 0x85, 0x81, 0x7c, 0x7a, 0x7c, 0x7f, 0x80, 0x7f, 0x81, - 0x84, 0x84, 0x82, 0x83, 0x87, 0x8a, 0x86, 0x7f, 0x7b, 0x7e, 0x80, - 0x7e, 0x79, 0x79, 0x7d, 0x81, 0x81, 0x7d, 0x78, 0x75, 0x74, 0x75, - 0x78, 0x7a, 0x7a, 0x77, 0x76, 0x77, 0x78, 0x78, 0x76, 0x76, 0x76, - 0x77, 0x78, 0x79, 0x79, 0x78, 0x78, 0x78, 0x77, 0x76, 0x74, 0x74, - 0x73, 0x71, 0x72, 0x7e, 0x93, 0xa4, 0xa5, 0x97, 0x89, 0x88, 0x91, - 0x95, 0x8e, 0x83, 0x7e, 0x82, 0x87, 0x88, 0x86, 0x86, 0x86, 0x86, - 0x85, 0x87, 0x8a, 0x8c, 0x87, 0x7f, 0x7b, 0x7d, 0x81, 0x82, 0x80, - 0x7d, 0x7b, 0x7c, 0x7e, 0x81, 0x82, 0x81, 0x7e, 0x7d, 0x7d, 0x7f, - 0x82, 0x84, 0x85, 0x83, 0x80, 0x7d, 0x7e, 0x81, 0x82, 0x80, 0x7d, - 0x7d, 0x81, 0x83, 0x81, 0x7d, 0x7c, 0x7c, 0x7c, 0x7a, 0x79, 0x79, - 0x7b, 0x7a, 0x79, 0x78, 0x79, 0x79, 0x78, 0x79, 0x7b, 0x7b, 0x79, - 0x77, 0x77, 0x79, 0x7a, 0x7a, 0x7a, 0x7b, 0x7d, 0x7c, 0x7b, 0x79, - 0x7a, 0x7b, 0x7b, 0x7b, 0x7a, 0x7a, 0x7a, 0x7a, 0x7b, 0x7b, 0x7b, - 0x79, 0x78, 0x7a, 0x80, 0x89, 0x8e, 0x8d, 0x87, 0x83, 0x85, 0x8a, - 0x8c, 0x8a, 0x88, 0x88, 0x8a, 0x8a, 0x8a, 0x89, 0x89, 0x89, 0x89, - 0x89, 0x8a, 0x8c, 0x8b, 0x89, 0x86, 0x84, 0x83, 0x84, 0x85, 0x86, - 0x86, 0x84, 0x82, 0x81, 0x82, 0x83, 0x82, 0x80, 0x7f, 0x7f, 0x7f, - 0x7f, 0x80, 0x7f, 0x7e, 0x7c, 0x7c, 0x7d, 0x7f, 0x7f, 0x7f, 0x7e, - 0x7d, 0x7d, 0x7d, 0x7c, 0x7b, 0x7a, 0x79, 0x7a, 0x7b, 0x7b, 0x7a, - 0x79, 0x77, 0x78, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x78, 0x79, - 0x7a, 0x7a, 0x79, 0x78, 0x7a, 0x7d, 0x7d, 0x7a, 0x79, 0x7a, 0x7b, - 0x7c, 0x7b, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x7f, 0x7d, 0x7d, - 0x80, 0x83, 0x82, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x7f, - 0x7f, 0x80, 0x81, 0x81, 0x80, 0x81, 0x83, 0x85, 0x84, 0x84, 0x85, - 0x86, 0x85, 0x85, 0x85, 0x87, 0x88, 0x88, 0x88, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x88, 0x89, 0x89, 0x88, 0x87, 0x88, 0x89, 0x88, - 0x86, 0x86, 0x87, 0x88, 0x86, 0x84, 0x83, 0x83, 0x82, 0x81, 0x81, - 0x81, 0x81, 0x80, 0x7e, 0x7e, 0x7d, 0x7b, 0x7a, 0x7a, 0x7a, 0x7a, - 0x79, 0x79, 0x7a, 0x7a, 0x79, 0x78, 0x77, 0x79, 0x7a, 0x7a, 0x7a, - 0x79, 0x79, 0x79, 0x79, 0x7a, 0x7b, 0x7c, 0x7c, 0x7b, 0x7a, 0x7a, - 0x7c, 0x7d, 0x7b, 0x7a, 0x7b, 0x7e, 0x7f, 0x7d, 0x7b, 0x7c, 0x7d, - 0x7d, 0x7c, 0x7c, 0x7e, 0x7e, 0x7c, 0x7b, 0x7d, 0x7f, 0x7e, 0x7c, - 0x7c, 0x7d, 0x7d, 0x7c, 0x7c, 0x7d, 0x7e, 0x7e, 0x7d, 0x7d, 0x7d, - 0x7e, 0x7e, 0x7e, 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x82, 0x83, 0x82, 0x81, 0x81, - 0x82, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x84, 0x84, 0x84, - 0x85, 0x85, 0x85, 0x85, 0x85, 0x84, 0x84, 0x84, 0x85, 0x84, 0x85, - 0x85, 0x85, 0x84, 0x83, 0x83, 0x83, 0x82, 0x80, 0x81, 0x82, 0x82, - 0x81, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7e, 0x7e, 0x7d, 0x7d, 0x7d, - 0x7d, 0x7d, 0x7d, 0x7d, 0x7c, 0x7c, 0x7b, 0x7c, 0x7c, 0x7c, 0x7c, - 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, - 0x7c, 0x7d, 0x7d, 0x7c, 0x7c, 0x7c, 0x7c, 0x7d, 0x7d, 0x7c, 0x7c, - 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7e, 0x7e, 0x7d, 0x7d, 0x7e, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x81, 0x80, 0x80, 0x80, - 0x82, 0x82, 0x81, 0x81, 0x81, 0x82, 0x82, 0x82, 0x82, 0x82, 0x81, - 0x82, 0x83, 0x83, 0x83, 0x82, 0x82, 0x82, 0x82, 0x83, 0x83, 0x83, - 0x82, 0x82, 0x82, 0x82, 0x82, 0x81, 0x81, 0x81, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x7f, 0x7e, 0x7f, 0x7e, 0x7e, 0x7e, 0x7d, 0x7d, - 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7c, 0x7d, 0x7d, 0x7d, 0x7d, 0x7e, - 0x7d, 0x7d, 0x7d, 0x7e, 0x7e, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7e, - 0x7e, 0x7e, 0x7f, 0x7f, 0x7e, 0x7e, 0x7f, 0x7f, 0x7f, 0x7e, 0x7f, - 0x7f, 0x7f, 0x7e, 0x7e, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, - 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, - 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, - 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, - 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, - }, - { // 5 - 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, - 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, - 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, - 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x7f, - 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, - 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x7f, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, - 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, - 0x80, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, - 0x7e, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x7f, - 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x81, 0x80, - 0x80, 0x7f, 0x81, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7e, - 0x80, 0x7f, 0x7e, 0x7f, 0x7f, 0x7e, 0x7f, 0x7f, 0x7f, 0x80, 0x80, - 0x82, 0x82, 0x80, 0x7f, 0x7f, 0x80, 0x81, 0x80, 0x7f, 0x7f, 0x7f, - 0x80, 0x80, 0x80, 0x80, 0x81, 0x80, 0x7f, 0x7e, 0x7f, 0x80, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x81, 0x80, - 0x7f, 0x7e, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, - 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x80, 0x81, 0x80, 0x7f, - 0x7f, 0x7e, 0x7e, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x81, 0x80, 0x81, - 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x7d, 0x7f, 0x7f, 0x7e, 0x80, - 0x80, 0x7e, 0x7f, 0x81, 0x81, 0x80, 0x81, 0x80, 0x7e, 0x7e, 0x7f, - 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x81, 0x7f, 0x80, 0x81, 0x7f, 0x7e, - 0x7f, 0x7f, 0x80, 0x84, 0x83, 0x7f, 0x7e, 0x80, 0x80, 0x80, 0x7f, - 0x81, 0x80, 0x7c, 0x7e, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x82, 0x81, - 0x80, 0x81, 0x7e, 0x7e, 0x7f, 0x80, 0x81, 0x81, 0x7f, 0x7e, 0x7e, - 0x7f, 0x80, 0x7f, 0x7f, 0x7d, 0x7e, 0x81, 0x80, 0x7d, 0x80, 0x80, - 0x81, 0x7f, 0x7d, 0x80, 0x80, 0x81, 0x7f, 0x7e, 0x80, 0x7f, 0x80, - 0x7f, 0x7e, 0x82, 0x81, 0x7f, 0x7f, 0x7e, 0x7e, 0x7e, 0x81, 0x7f, - 0x7f, 0x81, 0x80, 0x7e, 0x7f, 0x80, 0x7f, 0x80, 0x7e, 0x81, 0x81, - 0x7d, 0x81, 0x83, 0x80, 0x80, 0x7f, 0x7e, 0x80, 0x80, 0x7f, 0x7e, - 0x7e, 0x81, 0x83, 0x80, 0x7f, 0x7e, 0x80, 0x80, 0x7e, 0x80, 0x7f, - 0x82, 0x80, 0x7d, 0x81, 0x7f, 0x7d, 0x7d, 0x86, 0x80, 0x78, 0x7e, - 0x82, 0x82, 0x7f, 0x7b, 0x80, 0x84, 0x7f, 0x7d, 0x7c, 0x80, 0x80, - 0x81, 0x80, 0x7c, 0x82, 0x81, 0x80, 0x7e, 0x7d, 0x82, 0x80, 0x7d, - 0x81, 0x81, 0x81, 0x7f, 0x7c, 0x84, 0x81, 0x7b, 0x7d, 0x84, 0x85, - 0x7b, 0x7d, 0x83, 0x81, 0x7d, 0x7e, 0x80, 0x7f, 0x81, 0x80, 0x7e, - 0x7f, 0x81, 0x80, 0x7e, 0x81, 0x7e, 0x81, 0x82, 0x7e, 0x7f, 0x7e, - 0x7f, 0x7f, 0x79, 0x7a, 0x7f, 0x81, 0x81, 0x7f, 0x81, 0x80, 0x7a, - 0x7e, 0x81, 0x80, 0x80, 0x80, 0x82, 0x80, 0x80, 0x7e, 0x7d, 0x80, - 0x80, 0x7e, 0x81, 0x80, 0x7f, 0x81, 0x7f, 0x82, 0x80, 0x81, 0x81, - 0x83, 0x86, 0x80, 0x7f, 0x7f, 0x7e, 0x7f, 0x82, 0x83, 0x81, 0x80, - 0x84, 0x84, 0x83, 0x83, 0x84, 0x83, 0x7d, 0x7e, 0x7b, 0x79, 0x7c, - 0x7a, 0x74, 0x7b, 0x7f, 0x7c, 0x7b, 0x7c, 0x7e, 0x7a, 0x7a, 0x7a, - 0x7a, 0x78, 0x75, 0x77, 0x81, 0x86, 0x85, 0x85, 0x82, 0x7b, 0x73, - 0x71, 0x73, 0x77, 0x7a, 0x83, 0x86, 0x82, 0x84, 0x88, 0x88, 0x87, - 0x8b, 0x8b, 0x88, 0x8c, 0x90, 0x90, 0x92, 0x97, 0x95, 0x8f, 0x90, - 0x91, 0x8e, 0x8d, 0x8c, 0x85, 0x7d, 0x7a, 0x79, 0x7b, 0x7d, 0x7d, - 0x7a, 0x78, 0x72, 0x69, 0x65, 0x66, 0x68, 0x6c, 0x72, 0x6b, 0x61, - 0x5a, 0x55, 0x4e, 0x4e, 0x76, 0xae, 0xc7, 0xc3, 0xb4, 0x89, 0x59, - 0x4d, 0x58, 0x6d, 0x86, 0xa2, 0xa7, 0x95, 0x89, 0x86, 0x82, 0x81, - 0x87, 0x84, 0x7b, 0x7b, 0x82, 0x83, 0x88, 0x90, 0x90, 0x8a, 0x85, - 0x85, 0x84, 0x86, 0x8c, 0x8e, 0x88, 0x80, 0x7c, 0x79, 0x7c, 0x81, - 0x85, 0x85, 0x81, 0x78, 0x6d, 0x67, 0x68, 0x6e, 0x73, 0x73, 0x6f, - 0x67, 0x5e, 0x5a, 0x53, 0x58, 0x83, 0xb2, 0xc4, 0xbe, 0xa5, 0x74, - 0x4c, 0x4a, 0x5f, 0x7a, 0x97, 0xac, 0xa3, 0x8d, 0x82, 0x7c, 0x7a, - 0x84, 0x8d, 0x84, 0x7c, 0x7e, 0x80, 0x86, 0x94, 0x95, 0x8a, 0x83, - 0x80, 0x7e, 0x84, 0x8d, 0x8f, 0x8b, 0x85, 0x7b, 0x76, 0x7a, 0x81, - 0x87, 0x86, 0x81, 0x7c, 0x77, 0x70, 0x69, 0x6a, 0x6f, 0x72, 0x73, - 0x6d, 0x69, 0x62, 0x5f, 0x5d, 0x5b, 0x80, 0xb1, 0xc6, 0xc0, 0xa2, - 0x6f, 0x45, 0x45, 0x5f, 0x7f, 0x9f, 0xb0, 0x9f, 0x87, 0x7b, 0x78, - 0x7d, 0x8b, 0x92, 0x87, 0x7b, 0x7a, 0x7f, 0x88, 0x94, 0x95, 0x88, - 0x7c, 0x78, 0x7d, 0x89, 0x92, 0x91, 0x8e, 0x86, 0x7c, 0x75, 0x77, - 0x7c, 0x80, 0x86, 0x86, 0x81, 0x7e, 0x77, 0x6b, 0x66, 0x6d, 0x75, - 0x77, 0x77, 0x70, 0x68, 0x60, 0x5e, 0x56, 0x5b, 0x8b, 0xb7, 0xc4, - 0xb9, 0x98, 0x65, 0x46, 0x4f, 0x69, 0x89, 0xa5, 0xaa, 0x96, 0x84, - 0x7c, 0x79, 0x82, 0x8d, 0x8b, 0x80, 0x7a, 0x7b, 0x80, 0x8d, 0x9a, - 0x97, 0x88, 0x7a, 0x73, 0x78, 0x89, 0x94, 0x92, 0x8d, 0x84, 0x77, - 0x70, 0x78, 0x80, 0x83, 0x89, 0x8a, 0x82, 0x7b, 0x75, 0x6a, 0x64, - 0x6c, 0x70, 0x70, 0x73, 0x70, 0x6a, 0x66, 0x66, 0x5d, 0x69, 0x98, - 0xb8, 0xbb, 0xaa, 0x85, 0x57, 0x48, 0x5c, 0x7a, 0x99, 0xaa, 0xa2, - 0x89, 0x78, 0x74, 0x7c, 0x8a, 0x90, 0x8a, 0x81, 0x7c, 0x7d, 0x85, - 0x8e, 0x8e, 0x87, 0x7f, 0x7c, 0x80, 0x8b, 0x92, 0x91, 0x8a, 0x80, - 0x78, 0x77, 0x7d, 0x84, 0x87, 0x85, 0x81, 0x7b, 0x77, 0x72, 0x6d, - 0x6e, 0x72, 0x74, 0x71, 0x6c, 0x67, 0x64, 0x61, 0x65, 0x66, 0x61, - 0x82, 0xaf, 0xbd, 0xb3, 0x98, 0x69, 0x49, 0x54, 0x70, 0x8b, 0xa2, - 0xa8, 0x93, 0x81, 0x7c, 0x7a, 0x82, 0x8c, 0x8a, 0x7e, 0x78, 0x7c, - 0x85, 0x91, 0x9b, 0x93, 0x7e, 0x74, 0x76, 0x7a, 0x89, 0x97, 0x98, - 0x90, 0x85, 0x78, 0x72, 0x78, 0x80, 0x88, 0x8d, 0x88, 0x7f, 0x78, - 0x72, 0x6b, 0x67, 0x6c, 0x72, 0x72, 0x71, 0x6c, 0x65, 0x62, 0x62, - 0x60, 0x60, 0x62, 0x7b, 0xa7, 0xbc, 0xb4, 0x98, 0x70, 0x54, 0x59, - 0x71, 0x8c, 0x9f, 0xa2, 0x95, 0x84, 0x7c, 0x7b, 0x7f, 0x87, 0x88, - 0x7f, 0x7d, 0x81, 0x86, 0x8b, 0x8e, 0x89, 0x81, 0x7f, 0x82, 0x85, - 0x8a, 0x8e, 0x8a, 0x83, 0x80, 0x7f, 0x7f, 0x81, 0x87, 0x88, 0x87, - 0x86, 0x7f, 0x73, 0x6b, 0x6b, 0x6d, 0x72, 0x76, 0x73, 0x6c, 0x6a, - 0x6a, 0x68, 0x67, 0x66, 0x63, 0x61, 0x52, 0x5b, 0x92, 0xba, 0xc4, - 0xb3, 0x87, 0x52, 0x45, 0x5f, 0x80, 0x9f, 0xaf, 0xa1, 0x86, 0x7b, - 0x7c, 0x83, 0x8c, 0x8b, 0x84, 0x7b, 0x78, 0x81, 0x8b, 0x8e, 0x8c, - 0x86, 0x7e, 0x7e, 0x83, 0x86, 0x8a, 0x8a, 0x88, 0x85, 0x84, 0x81, - 0x7c, 0x7b, 0x7f, 0x84, 0x88, 0x89, 0x87, 0x81, 0x79, 0x72, 0x6c, - 0x6c, 0x70, 0x70, 0x6e, 0x6d, 0x6e, 0x6c, 0x67, 0x68, 0x65, 0x62, - 0x60, 0x59, 0x68, 0x88, 0xa9, 0xb6, 0xa7, 0x86, 0x61, 0x56, 0x65, - 0x81, 0x99, 0xa5, 0x99, 0x88, 0x7e, 0x7c, 0x84, 0x8c, 0x8b, 0x86, - 0x82, 0x80, 0x86, 0x89, 0x89, 0x86, 0x82, 0x82, 0x81, 0x80, 0x82, - 0x7f, 0x7b, 0x79, 0x7c, 0x84, 0x90, 0x95, 0x8f, 0x85, 0x7a, 0x76, - 0x7d, 0x86, 0x88, 0x84, 0x7f, 0x77, 0x72, 0x77, 0x7c, 0x7b, 0x7b, - 0x77, 0x6d, 0x65, 0x63, 0x64, 0x61, 0x61, 0x63, 0x65, 0x62, 0x60, - 0x5f, 0x5d, 0x85, 0xb5, 0xc1, 0xb4, 0x8f, 0x5a, 0x44, 0x5a, 0x7c, - 0x9f, 0xaf, 0xa0, 0x84, 0x76, 0x7b, 0x87, 0x91, 0x8f, 0x81, 0x75, - 0x79, 0x84, 0x8e, 0x92, 0x8d, 0x7f, 0x74, 0x73, 0x7a, 0x85, 0x88, - 0x84, 0x7d, 0x79, 0x7a, 0x7f, 0x87, 0x92, 0x98, 0x95, 0x86, 0x77, - 0x71, 0x76, 0x80, 0x89, 0x8c, 0x88, 0x7f, 0x77, 0x73, 0x72, 0x75, - 0x79, 0x76, 0x6f, 0x6a, 0x6c, 0x6e, 0x70, 0x70, 0x69, 0x69, 0x69, - 0x66, 0x63, 0x61, 0x57, 0x5a, 0x8f, 0xc3, 0xce, 0xb6, 0x89, 0x58, - 0x45, 0x61, 0x87, 0xa2, 0xac, 0xa0, 0x87, 0x7a, 0x7e, 0x83, 0x89, - 0x8a, 0x83, 0x7c, 0x7e, 0x85, 0x89, 0x88, 0x82, 0x79, 0x78, 0x80, - 0x88, 0x8a, 0x83, 0x78, 0x6f, 0x70, 0x79, 0x81, 0x85, 0x86, 0x85, - 0x83, 0x81, 0x7d, 0x7a, 0x7c, 0x82, 0x8a, 0x90, 0x94, 0x91, 0x85, - 0x79, 0x72, 0x73, 0x7e, 0x89, 0x8c, 0x85, 0x7b, 0x75, 0x72, 0x74, - 0x77, 0x77, 0x75, 0x71, 0x6e, 0x6f, 0x71, 0x74, 0x75, 0x74, 0x71, - 0x71, 0x72, 0x71, 0x6d, 0x66, 0x60, 0x5f, 0x79, 0xa9, 0xc5, 0xba, - 0x96, 0x6c, 0x52, 0x59, 0x78, 0x96, 0xa4, 0xa5, 0x96, 0x85, 0x7f, - 0x7e, 0x7c, 0x7a, 0x7c, 0x7e, 0x83, 0x8c, 0x8e, 0x89, 0x82, 0x7c, - 0x7c, 0x7e, 0x80, 0x80, 0x7e, 0x7c, 0x7c, 0x7d, 0x7e, 0x7d, 0x7c, - 0x81, 0x85, 0x85, 0x83, 0x80, 0x7d, 0x7c, 0x7d, 0x7e, 0x7e, 0x82, - 0x86, 0x8c, 0x96, 0x96, 0x87, 0x77, 0x71, 0x73, 0x7a, 0x83, 0x88, - 0x88, 0x83, 0x7b, 0x73, 0x71, 0x75, 0x7a, 0x7d, 0x7b, 0x75, 0x72, - 0x74, 0x77, 0x78, 0x74, 0x71, 0x6f, 0x71, 0x74, 0x73, 0x6f, 0x6f, - 0x73, 0x74, 0x71, 0x6c, 0x65, 0x6a, 0x86, 0xaa, 0xbd, 0xb0, 0x8e, - 0x6b, 0x5e, 0x68, 0x7d, 0x90, 0x9a, 0x9b, 0x96, 0x91, 0x89, 0x7e, - 0x74, 0x70, 0x75, 0x82, 0x8f, 0x92, 0x8e, 0x88, 0x7f, 0x7a, 0x7b, - 0x7e, 0x7f, 0x80, 0x81, 0x7f, 0x7b, 0x7a, 0x7a, 0x7c, 0x80, 0x81, - 0x81, 0x84, 0x86, 0x83, 0x7f, 0x7c, 0x7c, 0x7e, 0x82, 0x84, 0x83, - 0x8a, 0x94, 0x93, 0x85, 0x76, 0x71, 0x75, 0x80, 0x8a, 0x8b, 0x85, - 0x80, 0x7b, 0x76, 0x74, 0x77, 0x7a, 0x7c, 0x7d, 0x79, 0x75, 0x72, - 0x73, 0x75, 0x76, 0x75, 0x75, 0x74, 0x73, 0x74, 0x74, 0x71, 0x70, - 0x72, 0x73, 0x73, 0x71, 0x70, 0x70, 0x6f, 0x77, 0x8a, 0x9c, 0xa7, - 0xa8, 0x98, 0x80, 0x70, 0x6c, 0x73, 0x82, 0x94, 0x9e, 0x9e, 0x96, - 0x89, 0x7e, 0x79, 0x78, 0x78, 0x7d, 0x84, 0x8a, 0x8f, 0x90, 0x8c, - 0x84, 0x7c, 0x74, 0x72, 0x76, 0x7c, 0x83, 0x87, 0x85, 0x80, 0x7c, - 0x7c, 0x7e, 0x7f, 0x7f, 0x7e, 0x7e, 0x7f, 0x7f, 0x80, 0x80, 0x82, - 0x86, 0x89, 0x8a, 0x8a, 0x89, 0x85, 0x7f, 0x7b, 0x7b, 0x7c, 0x7e, - 0x80, 0x83, 0x84, 0x82, 0x7e, 0x78, 0x75, 0x74, 0x72, 0x73, 0x75, - 0x79, 0x7e, 0x7f, 0x7b, 0x75, 0x70, 0x6f, 0x70, 0x72, 0x74, 0x74, - 0x75, 0x76, 0x76, 0x73, 0x71, 0x74, 0x75, 0x73, 0x6e, 0x6d, 0x6c, - 0x72, 0x85, 0x9b, 0xac, 0xaa, 0x9e, 0x8e, 0x80, 0x77, 0x73, 0x78, - 0x83, 0x94, 0x9d, 0x9b, 0x93, 0x8d, 0x86, 0x7e, 0x76, 0x72, 0x77, - 0x81, 0x8a, 0x8d, 0x8d, 0x8c, 0x87, 0x80, 0x79, 0x76, 0x76, 0x79, - 0x7d, 0x7f, 0x80, 0x82, 0x82, 0x7f, 0x7c, 0x7d, 0x80, 0x7f, 0x7c, - 0x80, 0x82, 0x84, 0x87, 0x88, 0x83, 0x82, 0x85, 0x87, 0x83, 0x80, - 0x7e, 0x7e, 0x7e, 0x81, 0x81, 0x7e, 0x7e, 0x7e, 0x7c, 0x7a, 0x79, - 0x78, 0x76, 0x78, 0x77, 0x76, 0x77, 0x78, 0x78, 0x77, 0x76, 0x75, - 0x73, 0x72, 0x71, 0x6f, 0x6f, 0x70, 0x6f, 0x71, 0x75, 0x76, 0x72, - 0x6f, 0x71, 0x72, 0x70, 0x6e, 0x6f, 0x7a, 0x8d, 0xa1, 0xae, 0xa9, - 0x9c, 0x93, 0x8a, 0x7c, 0x71, 0x75, 0x81, 0x8c, 0x92, 0x96, 0x99, - 0x98, 0x90, 0x84, 0x7b, 0x76, 0x76, 0x78, 0x7d, 0x84, 0x89, 0x8b, - 0x8a, 0x87, 0x83, 0x7f, 0x7b, 0x76, 0x75, 0x76, 0x77, 0x79, 0x7e, - 0x83, 0x86, 0x85, 0x85, 0x84, 0x81, 0x7d, 0x7a, 0x7b, 0x7d, 0x7f, - 0x83, 0x85, 0x88, 0x8b, 0x87, 0x83, 0x84, 0x84, 0x81, 0x7e, 0x7c, - 0x7c, 0x7e, 0x7e, 0x7b, 0x7c, 0x7c, 0x79, 0x76, 0x75, 0x76, 0x78, - 0x77, 0x74, 0x76, 0x78, 0x75, 0x72, 0x72, 0x74, 0x70, 0x6e, 0x71, - 0x72, 0x74, 0x74, 0x72, 0x71, 0x74, 0x75, 0x72, 0x75, 0x78, 0x74, - 0x78, 0x7f, 0x81, 0x85, 0x8b, 0x98, 0xa6, 0xa8, 0x9b, 0x93, 0x91, - 0x8b, 0x82, 0x7d, 0x80, 0x88, 0x8c, 0x8e, 0x8e, 0x8f, 0x90, 0x8e, - 0x89, 0x83, 0x81, 0x7f, 0x7c, 0x7b, 0x7c, 0x7d, 0x7e, 0x81, 0x82, - 0x80, 0x7f, 0x7e, 0x7e, 0x7b, 0x7b, 0x7b, 0x7b, 0x7d, 0x7e, 0x80, - 0x7e, 0x7e, 0x7f, 0x7f, 0x80, 0x7d, 0x7e, 0x81, 0x85, 0x8d, 0x87, - 0x83, 0x88, 0x8b, 0x82, 0x78, 0x7d, 0x7e, 0x80, 0x7f, 0x7a, 0x7b, - 0x7e, 0x81, 0x79, 0x77, 0x79, 0x77, 0x75, 0x75, 0x77, 0x77, 0x7a, - 0x78, 0x73, 0x73, 0x74, 0x73, 0x70, 0x70, 0x70, 0x72, 0x75, 0x75, - 0x73, 0x72, 0x75, 0x73, 0x6e, 0x6d, 0x70, 0x74, 0x75, 0x75, 0x76, - 0x77, 0x7e, 0x8a, 0x9c, 0xa4, 0x9b, 0x99, 0xa0, 0xa5, 0x9b, 0x8e, - 0x8b, 0x8d, 0x90, 0x8b, 0x84, 0x81, 0x86, 0x8e, 0x8a, 0x83, 0x82, - 0x87, 0x8b, 0x88, 0x85, 0x83, 0x86, 0x87, 0x84, 0x80, 0x7c, 0x7f, - 0x7f, 0x7b, 0x78, 0x78, 0x7b, 0x7c, 0x7d, 0x7e, 0x7e, 0x80, 0x82, - 0x83, 0x82, 0x81, 0x82, 0x82, 0x83, 0x83, 0x82, 0x80, 0x7f, 0x7f, - 0x7f, 0x7e, 0x7f, 0x81, 0x82, 0x82, 0x82, 0x80, 0x7f, 0x7d, 0x7c, - 0x7b, 0x79, 0x78, 0x78, 0x78, 0x78, 0x77, 0x78, 0x79, 0x78, 0x79, - 0x7b, 0x7c, 0x7b, 0x7b, 0x7d, 0x7d, 0x7c, 0x7c, 0x7c, 0x7b, 0x7b, - 0x7c, 0x7c, 0x7b, 0x7c, 0x7c, 0x7c, 0x7a, 0x7a, 0x7b, 0x7d, 0x7d, - 0x7b, 0x7c, 0x7d, 0x7f, 0x7f, 0x80, 0x81, 0x81, 0x81, 0x82, 0x83, - 0x82, 0x82, 0x82, 0x83, 0x84, 0x86, 0x88, 0x89, 0x89, 0x89, 0x89, - 0x89, 0x88, 0x87, 0x86, 0x85, 0x85, 0x84, 0x83, 0x82, 0x80, 0x80, - 0x7f, 0x7e, 0x7c, 0x7c, 0x7d, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7d, - 0x7d, 0x7e, 0x7e, 0x7e, 0x7e, 0x80, 0x80, 0x7e, 0x7e, 0x80, 0x80, - 0x7f, 0x7e, 0x7e, 0x7f, 0x7f, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7d, - 0x7e, 0x7d, 0x7c, 0x7c, 0x7c, 0x7b, 0x7b, 0x7c, 0x7c, 0x7b, 0x7a, - 0x7a, 0x7b, 0x7c, 0x7b, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7b, 0x7b, - 0x7c, 0x7c, 0x7c, 0x7d, 0x7c, 0x7c, 0x7c, 0x7d, 0x7d, 0x7d, 0x7d, - 0x7d, 0x7d, 0x7d, 0x7c, 0x7d, 0x7d, 0x7d, 0x7e, 0x7f, 0x7f, 0x7f, - 0x80, 0x80, 0x81, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x89, 0x88, - 0x88, 0x88, 0x88, 0x88, 0x87, 0x88, 0x88, 0x87, 0x86, 0x85, 0x85, - 0x84, 0x84, 0x84, 0x84, 0x84, 0x82, 0x82, 0x82, 0x82, 0x80, 0x81, - 0x80, 0x7e, 0x7f, 0x7e, 0x7e, 0x7d, 0x7d, 0x7d, 0x7d, 0x7f, 0x7d, - 0x7c, 0x7d, 0x7b, 0x7c, 0x7c, 0x7a, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, - 0x7c, 0x7b, 0x7b, 0x7d, 0x7c, 0x79, 0x7d, 0x7d, 0x7a, 0x7a, 0x7a, - 0x7c, 0x7c, 0x7c, 0x7c, 0x7e, 0x81, 0x7e, 0x7d, 0x7d, 0x7f, 0x80, - 0x7e, 0x7e, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x81, 0x81, - 0x81, 0x82, 0x81, 0x82, 0x81, 0x80, 0x82, 0x82, 0x82, 0x81, 0x81, - 0x82, 0x82, 0x81, 0x81, 0x81, 0x83, 0x82, 0x80, 0x82, 0x82, 0x82, - 0x81, 0x81, 0x81, 0x82, 0x83, 0x82, 0x81, 0x82, 0x80, 0x82, 0x83, - 0x80, 0x80, 0x82, 0x81, 0x80, 0x81, 0x81, 0x82, 0x81, 0x80, 0x82, - 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7d, 0x80, 0x7e, 0x7b, - 0x7d, 0x7f, 0x7e, 0x7e, 0x7c, 0x7d, 0x80, 0x7e, 0x7e, 0x7f, 0x7f, - 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x7d, 0x7e, 0x7e, 0x7f, - 0x7f, 0x7e, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x7f, - 0x80, 0x7f, 0x7f, 0x7f, 0x7e, 0x7e, 0x7f, 0x7f, 0x7e, 0x7f, 0x80, - 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x81, 0x7f, 0x80, 0x81, 0x81, - 0x82, 0x7f, 0x7f, 0x81, 0x81, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x7f, - 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x81, 0x80, 0x80, 0x81, 0x81, - 0x7f, 0x7e, 0x81, 0x80, 0x7e, 0x7e, 0x7f, 0x7f, 0x80, 0x7e, 0x7e, - 0x80, 0x82, 0x80, 0x7f, 0x7f, 0x81, 0x80, 0x7f, 0x81, 0x7e, 0x7e, - 0x81, 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x82, 0x7f, 0x7e, 0x82, 0x7f, - 0x7e, 0x7f, 0x7e, 0x81, 0x80, 0x7e, 0x7f, 0x7e, 0x7f, 0x7f, 0x7e, - 0x80, 0x82, 0x7f, 0x7e, 0x80, 0x7f, 0x81, 0x7f, 0x7d, 0x80, 0x83, - 0x83, 0x7c, 0x81, 0x82, 0x7e, 0x82, 0x7d, 0x7f, 0x80, 0x80, 0x80, - 0x7f, 0x82, 0x7f, 0x81, 0x7e, 0x80, 0x81, 0x7c, 0x80, 0x81, 0x7f, - 0x80, 0x81, 0x7f, 0x7f, 0x80, 0x80, 0x7e, 0x7f, 0x7f, 0x7f, 0x81, - 0x81, 0x7e, 0x7c, 0x81, 0x7f, 0x7f, 0x7f, 0x7e, 0x80, 0x81, 0x7f, - 0x7d, 0x80, 0x80, 0x7f, 0x81, 0x80, 0x80, 0x7f, 0x7e, 0x80, 0x81, - 0x7e, 0x7f, 0x80, 0x7e, 0x7f, 0x7f, 0x7d, 0x7e, 0x7e, 0x7d, 0x80, - 0x80, 0x81, 0x82, 0x80, 0x7f, 0x81, 0x81, 0x7e, 0x81, 0x81, 0x7e, - 0x81, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x81, 0x80, - 0x7f, 0x81, 0x81, 0x7e, 0x7f, 0x81, 0x7f, 0x7f, 0x7e, 0x80, 0x80, - 0x7f, 0x7f, 0x80, 0x81, 0x80, 0x81, 0x7f, 0x7e, 0x7f, 0x80, 0x7f, - 0x7d, 0x7e, 0x80, 0x80, 0x7e, 0x81, 0x7f, 0x7f, 0x81, 0x7f, 0x81, - 0x81, 0x80, 0x80, 0x81, 0x80, 0x7e, 0x7f, 0x7f, 0x7e, 0x80, 0x80, - 0x7d, 0x80, 0x81, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x81, - 0x7f, 0x7e, 0x7f, 0x7e, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, - 0x80, 0x80, 0x81, 0x81, 0x80, 0x80, 0x7f, 0x7f, 0x7d, 0x7e, 0x81, - 0x7f, 0x7e, 0x7f, 0x81, 0x80, 0x7f, 0x7f, 0x7f, 0x81, 0x82, 0x80, - 0x80, 0x80, 0x81, 0x80, 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7e, - 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7e, 0x7f, 0x80, 0x81, 0x7f, 0x81, - 0x81, 0x7f, 0x80, 0x7e, 0x7e, 0x7f, 0x7f, 0x80, 0x81, 0x80, 0x80, - 0x81, 0x80, 0x7e, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7e, 0x7f, 0x81, - 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7e, 0x80, 0x7f, 0x81, 0x80, 0x7f, 0x81, 0x81, - 0x7f, 0x7f, 0x7f, 0x7f, 0x81, 0x7f, 0x7f, 0x80, 0x81, 0x80, 0x7e, - 0x7e, 0x80, 0x81, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7f, - 0x80, 0x81, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, - 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, - 0x80, 0x7f, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, - 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x7f, - 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x7f, - 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, - 0x80, - }, - { // 6 - 0x80, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, - 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, - 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, - 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x80, - 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, - 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, - 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x7f, - 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, - 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, - 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, - 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x80, - 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x7e, 0x80, - 0x7f, 0x80, 0x81, 0x7e, 0x80, 0x7f, 0x81, 0x7e, 0x80, 0x7f, 0x7f, - 0x81, 0x7e, 0x7f, 0x7f, 0x81, 0x7e, 0x80, 0x7f, 0x81, 0x7e, 0x80, - 0x80, 0x7e, 0x82, 0x7e, 0x81, 0x7f, 0x81, 0x7f, 0x81, 0x7e, 0x80, - 0x7f, 0x7f, 0x80, 0x7e, 0x83, 0x7f, 0x83, 0x7c, 0x81, 0x7e, 0x81, - 0x7e, 0x80, 0x80, 0x7e, 0x81, 0x7c, 0x84, 0x7b, 0x83, 0x7c, 0x82, - 0x80, 0x80, 0x80, 0x7e, 0x81, 0x7d, 0x81, 0x7f, 0x80, 0x7f, 0x80, - 0x7f, 0x81, 0x7e, 0x81, 0x7d, 0x81, 0x7d, 0x81, 0x7d, 0x82, 0x7e, - 0x80, 0x81, 0x7f, 0x80, 0x7f, 0x81, 0x7d, 0x81, 0x7d, 0x82, 0x7f, - 0x81, 0x7e, 0x81, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7e, 0x7f, 0x7f, - 0x80, 0x7f, 0x7e, 0x81, 0x7f, 0x80, 0x7f, 0x81, 0x81, 0x80, 0x80, - 0x80, 0x7f, 0x7f, 0x7e, 0x7e, 0x80, 0x7f, 0x7f, 0x80, 0x7e, 0x81, - 0x80, 0x7f, 0x82, 0x7e, 0x83, 0x7e, 0x80, 0x7e, 0x82, 0x80, 0x7f, - 0x7e, 0x7f, 0x81, 0x7e, 0x81, 0x7d, 0x82, 0x7c, 0x82, 0x7d, 0x80, - 0x83, 0x7c, 0x82, 0x7d, 0x84, 0x80, 0x7f, 0x81, 0x7e, 0x81, 0x7d, - 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x7d, 0x80, 0x7e, - 0x85, 0x7e, 0x81, 0x7f, 0x7d, 0x83, 0x7b, 0x83, 0x7d, 0x80, 0x7f, - 0x7e, 0x81, 0x7e, 0x83, 0x7d, 0x82, 0x7f, 0x7f, 0x80, 0x7f, 0x80, - 0x7e, 0x81, 0x7c, 0x83, 0x7e, 0x80, 0x81, 0x7f, 0x81, 0x7e, 0x82, - 0x7c, 0x82, 0x7f, 0x7d, 0x83, 0x7d, 0x82, 0x7e, 0x7f, 0x7f, 0x80, - 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7e, 0x81, 0x7f, 0x82, 0x7e, 0x80, - 0x81, 0x7e, 0x82, 0x7e, 0x7f, 0x81, 0x7e, 0x7f, 0x7f, 0x80, 0x82, - 0x7e, 0x7f, 0x7f, 0x7f, 0x81, 0x7e, 0x81, 0x80, 0x80, 0x80, 0x7e, - 0x7f, 0x81, 0x81, 0x7f, 0x80, 0x7f, 0x81, 0x7e, 0x81, 0x7f, 0x80, - 0x81, 0x7e, 0x81, 0x7d, 0x81, 0x7e, 0x80, 0x81, 0x7d, 0x84, 0x7e, - 0x80, 0x7f, 0x7e, 0x82, 0x7e, 0x81, 0x7f, 0x7e, 0x81, 0x81, 0x7c, - 0x80, 0x81, 0x7f, 0x82, 0x7d, 0x81, 0x7f, 0x81, 0x7f, 0x7e, 0x81, - 0x7f, 0x80, 0x7d, 0x81, 0x7f, 0x7f, 0x7f, 0x7e, 0x80, 0x80, 0x81, - 0x80, 0x7f, 0x80, 0x81, 0x7d, 0x7f, 0x80, 0x7e, 0x81, 0x7e, 0x80, - 0x80, 0x81, 0x7f, 0x7f, 0x80, 0x7e, 0x80, 0x7f, 0x81, 0x7f, 0x81, - 0x7e, 0x80, 0x7e, 0x7d, 0x82, 0x7d, 0x82, 0x7f, 0x7d, 0x83, 0x7f, - 0x7d, 0x82, 0x7e, 0x81, 0x81, 0x7b, 0x82, 0x80, 0x7e, 0x81, 0x7c, - 0x82, 0x82, 0x7c, 0x80, 0x7f, 0x81, 0x80, 0x7f, 0x7f, 0x7f, 0x81, - 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x7e, 0x7e, 0x82, 0x80, 0x80, - 0x7e, 0x80, 0x80, 0x7d, 0x82, 0x7e, 0x81, 0x82, 0x7c, 0x81, 0x7e, - 0x80, 0x81, 0x7d, 0x83, 0x80, 0x7f, 0x7f, 0x81, 0x7e, 0x81, 0x7f, - 0x7f, 0x82, 0x7d, 0x80, 0x7f, 0x7d, 0x82, 0x7e, 0x7f, 0x81, 0x7e, - 0x83, 0x7c, 0x80, 0x80, 0x81, 0x80, 0x7e, 0x80, 0x7e, 0x82, 0x7d, - 0x81, 0x7f, 0x81, 0x80, 0x7b, 0x81, 0x7e, 0x83, 0x7d, 0x7e, 0x80, - 0x7f, 0x81, 0x7c, 0x7d, 0x82, 0x7f, 0x80, 0x7f, 0x80, 0x81, 0x80, - 0x82, 0x7c, 0x82, 0x80, 0x7c, 0x82, 0x7d, 0x7f, 0x7e, 0x82, 0x80, - 0x7b, 0x84, 0x82, 0x82, 0x84, 0x7d, 0x7e, 0x85, 0x7f, 0x7f, 0x7c, - 0x80, 0x82, 0x7a, 0x84, 0x7a, 0x82, 0x84, 0x7c, 0x82, 0x7c, 0x85, - 0x7f, 0x83, 0x80, 0x7f, 0x85, 0x81, 0x82, 0x7c, 0x82, 0x80, 0x80, - 0x80, 0x7c, 0x84, 0x7f, 0x80, 0x81, 0x7d, 0x81, 0x80, 0x7e, 0x7f, - 0x7e, 0x7e, 0x7c, 0x7b, 0x7a, 0x76, 0x79, 0x75, 0x74, 0x75, 0x6f, - 0x70, 0x6e, 0x6a, 0x68, 0x68, 0x70, 0x79, 0x81, 0x82, 0x8d, 0x95, - 0x99, 0xa0, 0x9e, 0x9d, 0xa1, 0xa0, 0x99, 0x92, 0x8a, 0x84, 0x80, - 0x75, 0x6e, 0x6f, 0x71, 0x72, 0x74, 0x7a, 0x86, 0x92, 0x9c, 0xa1, - 0xa9, 0xaf, 0xac, 0xa5, 0x9c, 0x96, 0x89, 0x7d, 0x70, 0x65, 0x62, - 0x5b, 0x55, 0x52, 0x55, 0x58, 0x5a, 0x5b, 0x5c, 0x60, 0x5d, 0x59, - 0x54, 0x52, 0x4d, 0x4d, 0x51, 0x56, 0x7c, 0x92, 0x8c, 0x98, 0xae, - 0xb5, 0xb3, 0xb2, 0xaa, 0xaa, 0xab, 0x97, 0x85, 0x81, 0x77, 0x6e, - 0x6b, 0x66, 0x69, 0x75, 0x7d, 0x80, 0x8d, 0x99, 0x9d, 0xa2, 0xa3, - 0x9f, 0x9b, 0x94, 0x89, 0x82, 0x7a, 0x71, 0x6e, 0x6f, 0x70, 0x76, - 0x7e, 0x84, 0x8b, 0x8e, 0x8d, 0x8b, 0x87, 0x7f, 0x79, 0x71, 0x68, - 0x62, 0x5e, 0x5b, 0x57, 0x57, 0x57, 0x55, 0x53, 0x4f, 0x57, 0x89, - 0xa0, 0x8a, 0x93, 0xb1, 0xb7, 0xaf, 0xa3, 0x95, 0x9e, 0x9f, 0x81, - 0x6e, 0x75, 0x75, 0x70, 0x6d, 0x66, 0x74, 0x89, 0x87, 0x82, 0x96, - 0xa4, 0x9f, 0x9b, 0x96, 0x94, 0x94, 0x88, 0x75, 0x71, 0x74, 0x6e, - 0x6b, 0x6c, 0x71, 0x7b, 0x82, 0x84, 0x8b, 0x91, 0x91, 0x8f, 0x86, - 0x80, 0x7b, 0x73, 0x71, 0x6f, 0x6b, 0x73, 0x77, 0x71, 0x75, 0x71, - 0x6e, 0x6d, 0x61, 0x55, 0x54, 0x4b, 0x41, 0x76, 0x9c, 0x85, 0x8f, - 0xb2, 0xbc, 0xb9, 0xb2, 0x9f, 0xa0, 0xa4, 0x84, 0x68, 0x6b, 0x69, - 0x5f, 0x60, 0x63, 0x71, 0x8c, 0x96, 0x8d, 0x9a, 0xad, 0xa5, 0x9a, - 0x91, 0x8a, 0x84, 0x77, 0x64, 0x60, 0x6b, 0x6b, 0x66, 0x71, 0x80, - 0x88, 0x92, 0x96, 0x97, 0x9d, 0x99, 0x8a, 0x7f, 0x7d, 0x7b, 0x73, - 0x71, 0x72, 0x73, 0x78, 0x7d, 0x7b, 0x7e, 0x87, 0x86, 0x80, 0x7c, - 0x75, 0x71, 0x70, 0x65, 0x5e, 0x61, 0x62, 0x5c, 0x5a, 0x58, 0x5e, - 0x92, 0xab, 0x91, 0x92, 0xb2, 0xb6, 0xa1, 0x98, 0x87, 0x86, 0x8d, - 0x6f, 0x5c, 0x74, 0x80, 0x76, 0x7a, 0x88, 0x93, 0x9d, 0x97, 0x8b, - 0x96, 0x9a, 0x87, 0x79, 0x7b, 0x7c, 0x76, 0x6d, 0x6b, 0x78, 0x81, - 0x7a, 0x78, 0x80, 0x85, 0x86, 0x81, 0x7e, 0x84, 0x8b, 0x86, 0x83, - 0x88, 0x88, 0x84, 0x82, 0x81, 0x80, 0x82, 0x81, 0x7b, 0x7c, 0x7f, - 0x7c, 0x79, 0x78, 0x78, 0x78, 0x77, 0x75, 0x75, 0x78, 0x75, 0x6f, - 0x71, 0x71, 0x6b, 0x6b, 0x6b, 0x68, 0x67, 0x67, 0x6b, 0x92, 0xb0, - 0x9d, 0x94, 0xae, 0xb2, 0x97, 0x8b, 0x7d, 0x78, 0x83, 0x73, 0x61, - 0x73, 0x85, 0x81, 0x7e, 0x89, 0x93, 0x9c, 0x98, 0x86, 0x86, 0x8f, - 0x84, 0x72, 0x75, 0x7d, 0x78, 0x76, 0x76, 0x7d, 0x86, 0x83, 0x7b, - 0x81, 0x8a, 0x85, 0x7e, 0x7d, 0x7d, 0x7d, 0x7c, 0x7a, 0x7f, 0x83, - 0x81, 0x81, 0x88, 0x8a, 0x85, 0x83, 0x84, 0x85, 0x83, 0x7f, 0x7d, - 0x7d, 0x7c, 0x7a, 0x7a, 0x7a, 0x79, 0x78, 0x79, 0x79, 0x78, 0x78, - 0x78, 0x76, 0x75, 0x75, 0x76, 0x75, 0x76, 0x76, 0x70, 0x71, 0x75, - 0x6e, 0x6b, 0x6c, 0x6d, 0x64, 0x77, 0xab, 0xa7, 0x8b, 0x97, 0xba, - 0xa7, 0x84, 0x89, 0x90, 0x88, 0x7a, 0x7c, 0x78, 0x7f, 0x88, 0x81, - 0x7e, 0x8c, 0x95, 0x8b, 0x83, 0x86, 0x8f, 0x88, 0x7e, 0x7c, 0x83, - 0x82, 0x78, 0x75, 0x7a, 0x82, 0x7c, 0x74, 0x77, 0x7f, 0x7f, 0x7b, - 0x7f, 0x84, 0x84, 0x7f, 0x7d, 0x80, 0x81, 0x81, 0x81, 0x82, 0x84, - 0x87, 0x86, 0x84, 0x83, 0x83, 0x81, 0x7d, 0x7e, 0x7f, 0x7e, 0x7c, - 0x7b, 0x7a, 0x7b, 0x7b, 0x7a, 0x79, 0x79, 0x79, 0x78, 0x78, 0x78, - 0x77, 0x78, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x78, 0x78, 0x77, - 0x75, 0x77, 0x76, 0x73, 0x6f, 0x75, 0x81, 0x7d, 0x77, 0x87, 0x9b, - 0x93, 0x88, 0x92, 0x9e, 0x93, 0x85, 0x8c, 0x92, 0x87, 0x7e, 0x82, - 0x85, 0x81, 0x7e, 0x81, 0x83, 0x85, 0x87, 0x86, 0x85, 0x86, 0x89, - 0x83, 0x7f, 0x81, 0x83, 0x7c, 0x78, 0x7b, 0x7c, 0x78, 0x76, 0x7a, - 0x7d, 0x7e, 0x7e, 0x7f, 0x82, 0x83, 0x81, 0x7e, 0x7e, 0x7e, 0x7d, - 0x7b, 0x7c, 0x7e, 0x7c, 0x7b, 0x7c, 0x7e, 0x7e, 0x7e, 0x7f, 0x80, - 0x7f, 0x7f, 0x7e, 0x7d, 0x7d, 0x7d, 0x7c, 0x7c, 0x7c, 0x7d, 0x7d, - 0x7d, 0x7e, 0x7e, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, - 0x7e, 0x7e, 0x7f, 0x7f, 0x7f, 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, - 0x81, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x81, 0x81, 0x81, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x81, 0x81, 0x81, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7e, 0x7e, 0x7e, - 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, - 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, - 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, - 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, - 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x80, - 0x80, 0x7f, 0x7e, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x81, 0x81, 0x80, - 0x7f, 0x80, 0x80, 0x81, 0x82, 0x82, 0x81, 0x7f, 0x7e, 0x7e, 0x7e, - 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x82, 0x7f, 0x83, 0x85, 0x82, 0x7c, - 0x7a, 0x7d, 0x80, 0x7e, 0x7c, 0x7c, 0x7e, 0x7f, 0x7f, 0x7f, 0x7e, - 0x7e, 0x7f, 0x7f, 0x80, 0x80, 0x7e, 0x81, 0x81, 0x80, 0x7d, 0x7e, - 0x81, 0x82, 0x7f, 0x7b, 0x7e, 0x80, 0x82, 0x7f, 0x7d, 0x7f, 0x82, - 0x84, 0x81, 0x81, 0x7d, 0x82, 0x83, 0x7f, 0x81, 0x80, 0x84, 0x83, - 0x82, 0x83, 0x81, 0x81, 0x80, 0x7e, 0x7d, 0x7e, 0x80, 0x81, 0x7e, - 0x7b, 0x7d, 0x83, 0x80, 0x7f, 0x7d, 0x81, 0x83, 0x80, 0x80, 0x7e, - 0x7d, 0x82, 0x81, 0x7d, 0x7c, 0x80, 0x83, 0x7f, 0x7f, 0x7a, 0x81, - 0x81, 0x82, 0x7f, 0x7c, 0x80, 0x81, 0x85, 0x7b, 0x7d, 0x81, 0x82, - 0x80, 0x7c, 0x7e, 0x80, 0x86, 0x80, 0x7d, 0x7c, 0x82, 0x88, 0x7c, - 0x7c, 0x7d, 0x82, 0x83, 0x7e, 0x7c, 0x7e, 0x80, 0x83, 0x80, 0x7a, - 0x7f, 0x81, 0x85, 0x7f, 0x7b, 0x7e, 0x7f, 0x82, 0x81, 0x7b, 0x7e, - 0x82, 0x81, 0x81, 0x79, 0x81, 0x81, 0x83, 0x7f, 0x7d, 0x80, 0x80, - 0x84, 0x78, 0x7f, 0x7e, 0x83, 0x7e, 0x7c, 0x7f, 0x81, 0x85, 0x7c, - 0x7c, 0x7e, 0x85, 0x81, 0x7f, 0x7a, 0x85, 0x82, 0x80, 0x7f, 0x77, - 0x81, 0x81, 0x81, 0x7d, 0x7c, 0x81, 0x83, 0x81, 0x7a, 0x81, 0x82, - 0x83, 0x7d, 0x7c, 0x82, 0x80, 0x81, 0x7a, 0x80, 0x80, 0x80, 0x7e, - 0x7c, 0x82, 0x7f, 0x82, 0x7c, 0x7f, 0x81, 0x81, 0x80, 0x7b, 0x81, - 0x81, 0x81, 0x7d, 0x80, 0x7e, 0x82, 0x80, 0x7c, 0x80, 0x7d, 0x84, - 0x7f, 0x7f, 0x7f, 0x80, 0x81, 0x7f, 0x80, 0x7d, 0x82, 0x7e, 0x82, - 0x7d, 0x7e, 0x82, 0x7f, 0x80, 0x7d, 0x7f, 0x80, 0x80, 0x80, 0x7f, - 0x7f, 0x83, 0x80, 0x80, 0x7e, 0x7f, 0x82, 0x7e, 0x80, 0x7f, 0x80, - 0x81, 0x7e, 0x7e, 0x7f, 0x7f, 0x81, 0x81, 0x80, 0x80, 0x7e, 0x83, - 0x7f, 0x7e, 0x7e, 0x7e, 0x84, 0x7b, 0x7f, 0x80, 0x7e, 0x83, 0x7e, - 0x80, 0x7e, 0x83, 0x81, 0x7e, 0x7f, 0x7e, 0x84, 0x7e, 0x7d, 0x80, - 0x7f, 0x81, 0x7e, 0x7e, 0x7f, 0x82, 0x81, 0x7f, 0x7f, 0x7f, 0x82, - 0x7e, 0x80, 0x7e, 0x80, 0x81, 0x7e, 0x7f, 0x80, 0x7e, 0x80, 0x81, - 0x7d, 0x81, 0x7e, 0x83, 0x7f, 0x7f, 0x81, 0x7c, 0x82, 0x7e, 0x81, - 0x7d, 0x81, 0x81, 0x80, 0x7f, 0x7d, 0x82, 0x7e, 0x81, 0x7e, 0x7f, - 0x82, 0x7e, 0x81, 0x7d, 0x80, 0x81, 0x7e, 0x82, 0x7f, 0x7f, 0x7f, - 0x81, 0x80, 0x7e, 0x81, 0x7f, 0x7e, 0x80, 0x82, 0x7e, 0x7d, 0x80, - 0x82, 0x7d, 0x7c, 0x82, 0x7f, 0x81, 0x7e, 0x80, 0x81, 0x7c, 0x80, - 0x7f, 0x80, 0x80, 0x7d, 0x83, 0x7f, 0x80, 0x7f, 0x7d, 0x82, 0x7d, - 0x81, 0x80, 0x7f, 0x7f, 0x80, 0x81, 0x7e, 0x80, 0x80, 0x7e, 0x80, - 0x81, 0x80, 0x7d, 0x7f, 0x82, 0x7e, 0x7d, 0x81, 0x80, 0x81, 0x7e, - 0x80, 0x81, 0x7e, 0x81, 0x7f, 0x7f, 0x82, 0x7f, 0x80, 0x7f, 0x80, - 0x80, 0x80, 0x7e, 0x7e, 0x82, 0x7e, 0x80, 0x7e, 0x80, 0x81, 0x7f, - 0x80, 0x7d, 0x80, 0x81, 0x7f, 0x7f, 0x7f, 0x81, 0x81, 0x7e, 0x80, - 0x7d, 0x82, 0x7f, 0x7f, 0x7f, 0x7e, 0x81, 0x7f, 0x7f, 0x7f, 0x80, - 0x7f, 0x80, 0x7f, 0x81, 0x7f, 0x7e, 0x80, 0x7f, 0x80, 0x7f, 0x80, - 0x7f, 0x7d, 0x80, 0x7f, 0x80, 0x7f, 0x81, 0x7f, 0x7f, 0x7e, 0x81, - 0x7d, 0x82, 0x7e, 0x7e, 0x81, 0x7e, 0x83, 0x7c, 0x81, 0x7f, 0x80, - 0x80, 0x7e, 0x81, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x80, - 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, - 0x80, 0x7f, 0x80, 0x80, 0x7e, 0x80, 0x80, 0x80, 0x80, 0x7e, 0x80, - 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, - 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x81, 0x7f, 0x7f, 0x81, 0x7e, 0x82, - 0x7d, 0x80, 0x80, 0x7f, 0x81, 0x7e, 0x80, 0x7f, 0x80, 0x80, 0x7e, - 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x81, 0x7f, 0x80, - 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x81, 0x7e, 0x81, 0x7e, - 0x80, 0x7f, 0x7f, 0x81, 0x7e, 0x81, 0x7f, 0x81, 0x7f, 0x80, 0x7f, - 0x81, 0x7f, 0x7f, 0x80, 0x7e, 0x81, 0x7f, 0x80, 0x7e, 0x80, 0x7f, - 0x7f, 0x7f, 0x80, 0x81, 0x7e, 0x80, 0x7f, 0x80, 0x80, 0x7e, 0x81, - 0x7f, 0x80, 0x80, 0x7e, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, - 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x81, 0x7f, 0x80, 0x7f, 0x7f, 0x80, - 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x80, - 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x80, - 0x7f, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x7f, - 0x7f, 0x80, 0x80, 0x7e, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x80, - 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, - 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, - 0x7e, 0x80, 0x80, 0x7f, 0x7f, 0x7e, 0x80, 0x7f, 0x7f, 0x80, 0x7e, - 0x80, 0x81, 0x80, 0x81, 0x81, 0x82, 0x81, 0x80, 0x80, 0x81, 0x81, - 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x80, 0x80, 0x80, 0x7f, - 0x7e, 0x7e, 0x7f, 0x7e, 0x7e, 0x7e, 0x7e, 0x7d, 0x7d, 0x7d, 0x7d, - 0x7d, 0x7e, 0x7d, 0x7e, 0x7e, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, - 0x80, 0x7f, 0x80, 0x80, 0x81, 0x81, 0x81, 0x82, 0x81, 0x81, 0x81, - 0x80, 0x81, 0x81, 0x81, 0x80, 0x80, 0x81, 0x80, 0x80, 0x7f, 0x7f, - 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x80, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, - 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x7f, - 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, - 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x80, - 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x80, - 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, - 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, - 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, - }, - { // 7 - 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x80, - 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, - 0x80, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, - 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, - 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, - 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, - 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x7f, - 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, - 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, - 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, - 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x80, - 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x7e, 0x80, - 0x7f, 0x80, 0x81, 0x7e, 0x80, 0x7f, 0x81, 0x7e, 0x80, 0x7f, 0x7f, - 0x81, 0x7e, 0x7f, 0x7f, 0x81, 0x7e, 0x80, 0x7f, 0x81, 0x7e, 0x80, - 0x80, 0x7e, 0x82, 0x7e, 0x81, 0x7f, 0x81, 0x7f, 0x81, 0x7e, 0x80, - 0x7f, 0x7f, 0x80, 0x7e, 0x83, 0x7f, 0x83, 0x7c, 0x81, 0x7e, 0x81, - 0x7e, 0x80, 0x80, 0x7e, 0x81, 0x7c, 0x84, 0x7b, 0x83, 0x7c, 0x82, - 0x80, 0x80, 0x80, 0x7e, 0x81, 0x7d, 0x81, 0x7f, 0x80, 0x7f, 0x80, - 0x7f, 0x81, 0x7e, 0x81, 0x7d, 0x81, 0x7d, 0x81, 0x7d, 0x82, 0x7e, - 0x80, 0x81, 0x7f, 0x80, 0x7f, 0x81, 0x7d, 0x81, 0x7d, 0x82, 0x7f, - 0x81, 0x7e, 0x81, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7e, 0x7f, 0x7f, - 0x80, 0x7f, 0x7e, 0x81, 0x7f, 0x80, 0x7f, 0x81, 0x81, 0x80, 0x80, - 0x80, 0x7f, 0x7f, 0x7e, 0x7e, 0x80, 0x7f, 0x7f, 0x80, 0x7e, 0x81, - 0x80, 0x7f, 0x82, 0x7e, 0x83, 0x7e, 0x80, 0x7e, 0x82, 0x80, 0x7f, - 0x7e, 0x7f, 0x81, 0x7e, 0x81, 0x7d, 0x82, 0x7c, 0x82, 0x7d, 0x80, - 0x83, 0x7c, 0x82, 0x7d, 0x84, 0x80, 0x7f, 0x81, 0x7e, 0x81, 0x7d, - 0x7f, 0x80, 0x7f, 0x80, 0x81, 0x7f, 0x80, 0x7f, 0x7d, 0x80, 0x7e, - 0x85, 0x7d, 0x81, 0x7f, 0x7e, 0x83, 0x7b, 0x83, 0x7d, 0x81, 0x7e, - 0x7e, 0x80, 0x7e, 0x83, 0x7d, 0x83, 0x7e, 0x80, 0x7f, 0x7f, 0x81, - 0x7d, 0x82, 0x7b, 0x83, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x81, - 0x7c, 0x82, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x7e, 0x80, - 0x80, 0x81, 0x7e, 0x7f, 0x81, 0x80, 0x7e, 0x81, 0x80, 0x7f, 0x81, - 0x7c, 0x81, 0x7f, 0x81, 0x81, 0x7f, 0x80, 0x7e, 0x81, 0x7d, 0x7e, - 0x81, 0x7f, 0x81, 0x81, 0x7c, 0x81, 0x7f, 0x7e, 0x82, 0x7e, 0x81, - 0x81, 0x7e, 0x81, 0x7e, 0x81, 0x80, 0x7e, 0x7f, 0x7f, 0x7f, 0x7d, - 0x82, 0x7f, 0x80, 0x81, 0x80, 0x7f, 0x7e, 0x7f, 0x80, 0x7f, 0x80, - 0x81, 0x7f, 0x7f, 0x80, 0x7e, 0x7e, 0x81, 0x7e, 0x81, 0x81, 0x7f, - 0x7f, 0x7d, 0x82, 0x7e, 0x7f, 0x81, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, - 0x80, 0x80, 0x7e, 0x80, 0x81, 0x7d, 0x80, 0x80, 0x7e, 0x80, 0x80, - 0x80, 0x80, 0x7f, 0x82, 0x7e, 0x7f, 0x81, 0x7d, 0x82, 0x80, 0x7f, - 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x7e, 0x7f, - 0x80, 0x7f, 0x80, 0x82, 0x7f, 0x7f, 0x81, 0x7f, 0x7f, 0x7e, 0x80, - 0x7f, 0x7f, 0x81, 0x7e, 0x81, 0x80, 0x7e, 0x80, 0x7f, 0x7f, 0x80, - 0x81, 0x7d, 0x7f, 0x82, 0x81, 0x80, 0x7d, 0x7f, 0x82, 0x7f, 0x7f, - 0x80, 0x7e, 0x82, 0x7e, 0x7e, 0x80, 0x80, 0x7f, 0x81, 0x7e, 0x7d, - 0x82, 0x7b, 0x83, 0x7e, 0x7f, 0x83, 0x7f, 0x82, 0x7d, 0x80, 0x80, - 0x7f, 0x7f, 0x7d, 0x82, 0x7e, 0x80, 0x81, 0x7e, 0x81, 0x7e, 0x7f, - 0x81, 0x7e, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7e, 0x80, 0x81, - 0x81, 0x7e, 0x7e, 0x81, 0x7e, 0x7f, 0x81, 0x7e, 0x80, 0x81, 0x7e, - 0x7f, 0x80, 0x81, 0x7c, 0x82, 0x7e, 0x7f, 0x7f, 0x7e, 0x80, 0x7f, - 0x84, 0x7e, 0x82, 0x80, 0x7d, 0x83, 0x7e, 0x7e, 0x7f, 0x80, 0x81, - 0x7d, 0x83, 0x81, 0x7e, 0x81, 0x7d, 0x7e, 0x82, 0x7d, 0x7d, 0x80, - 0x7e, 0x7e, 0x82, 0x7f, 0x7e, 0x80, 0x80, 0x80, 0x7f, 0x7d, 0x80, - 0x80, 0x81, 0x7f, 0x7e, 0x83, 0x81, 0x80, 0x81, 0x7f, 0x81, 0x7f, - 0x7f, 0x7f, 0x7d, 0x7f, 0x7e, 0x7c, 0x7c, 0x7e, 0x7e, 0x81, 0x7f, - 0x80, 0x81, 0x80, 0x7f, 0x83, 0x82, 0x7f, 0x81, 0x80, 0x80, 0x7f, - 0x7f, 0x82, 0x82, 0x84, 0x85, 0x85, 0x86, 0x85, 0x86, 0x85, 0x85, - 0x85, 0x82, 0x83, 0x82, 0x7f, 0x7e, 0x80, 0x7f, 0x7e, 0x7e, 0x7b, - 0x79, 0x7b, 0x79, 0x76, 0x72, 0x6f, 0x6c, 0x69, 0x67, 0x60, 0x5e, - 0x5f, 0x5c, 0x58, 0x57, 0x56, 0x57, 0x7a, 0xa0, 0xa2, 0xa0, 0xac, - 0xb6, 0xb7, 0xb1, 0xa0, 0x93, 0x97, 0x95, 0x82, 0x72, 0x68, 0x64, - 0x69, 0x6e, 0x68, 0x6b, 0x7c, 0x89, 0x90, 0x96, 0x93, 0x95, 0xa1, - 0x9f, 0x91, 0x89, 0x84, 0x80, 0x7b, 0x73, 0x71, 0x76, 0x7a, 0x7a, - 0x7c, 0x81, 0x83, 0x83, 0x83, 0x83, 0x84, 0x84, 0x7e, 0x77, 0x74, - 0x6f, 0x6c, 0x66, 0x60, 0x59, 0x57, 0x53, 0x4b, 0x4c, 0x4a, 0x4e, - 0x54, 0x73, 0xa7, 0xb1, 0xaa, 0xb7, 0xc1, 0xbc, 0xb7, 0x9f, 0x83, - 0x7b, 0x80, 0x6c, 0x56, 0x58, 0x60, 0x70, 0x83, 0x87, 0x88, 0xa0, - 0xb3, 0xad, 0xa3, 0x98, 0x88, 0x83, 0x7c, 0x68, 0x5c, 0x60, 0x68, - 0x6e, 0x75, 0x79, 0x83, 0x98, 0xa3, 0x9f, 0x96, 0x91, 0x8b, 0x85, - 0x7c, 0x74, 0x76, 0x7c, 0x7d, 0x7e, 0x81, 0x7d, 0x7a, 0x7b, 0x78, - 0x74, 0x70, 0x6c, 0x67, 0x63, 0x5f, 0x59, 0x55, 0x51, 0x58, 0x5e, - 0x70, 0xa2, 0xbd, 0xb4, 0xaa, 0xb3, 0xb1, 0xa3, 0x8f, 0x6e, 0x63, - 0x6c, 0x69, 0x5f, 0x66, 0x75, 0x8b, 0xa2, 0xa5, 0x9c, 0xa1, 0xa7, - 0x9d, 0x8a, 0x78, 0x6b, 0x6d, 0x70, 0x6c, 0x6a, 0x74, 0x82, 0x8a, - 0x8b, 0x85, 0x85, 0x8c, 0x8f, 0x87, 0x80, 0x81, 0x84, 0x85, 0x83, - 0x82, 0x83, 0x85, 0x82, 0x7e, 0x7b, 0x79, 0x78, 0x78, 0x77, 0x76, - 0x74, 0x71, 0x6c, 0x67, 0x61, 0x5b, 0x59, 0x56, 0x54, 0x5b, 0x6a, - 0x7f, 0x9c, 0xb8, 0xbe, 0xb3, 0xa4, 0x9c, 0x8c, 0x78, 0x67, 0x5b, - 0x5c, 0x6c, 0x7f, 0x88, 0x8f, 0x9b, 0xa8, 0xab, 0xa3, 0x93, 0x83, - 0x78, 0x73, 0x6c, 0x64, 0x66, 0x72, 0x84, 0x8f, 0x93, 0x91, 0x90, - 0x91, 0x8c, 0x81, 0x74, 0x70, 0x73, 0x78, 0x79, 0x7c, 0x85, 0x8d, - 0x8f, 0x8d, 0x8c, 0x8a, 0x86, 0x80, 0x7a, 0x77, 0x76, 0x76, 0x76, - 0x77, 0x77, 0x76, 0x73, 0x70, 0x6b, 0x65, 0x5e, 0x5a, 0x59, 0x57, - 0x5a, 0x66, 0x74, 0x85, 0xa7, 0xc1, 0xbc, 0xa8, 0x99, 0x8e, 0x7f, - 0x72, 0x64, 0x5c, 0x68, 0x80, 0x90, 0x95, 0x99, 0x9f, 0xa1, 0x9c, - 0x8c, 0x79, 0x6c, 0x6b, 0x70, 0x74, 0x7a, 0x83, 0x8e, 0x99, 0x9a, - 0x91, 0x83, 0x7b, 0x75, 0x6e, 0x6a, 0x69, 0x6e, 0x7c, 0x8e, 0x98, - 0x98, 0x96, 0x93, 0x8a, 0x81, 0x7b, 0x78, 0x7a, 0x7f, 0x81, 0x80, - 0x7d, 0x7b, 0x78, 0x77, 0x75, 0x73, 0x71, 0x71, 0x70, 0x6d, 0x68, - 0x65, 0x66, 0x68, 0x68, 0x66, 0x64, 0x6a, 0x76, 0x84, 0x9e, 0xba, - 0xbf, 0xab, 0x95, 0x84, 0x75, 0x6c, 0x69, 0x6d, 0x76, 0x87, 0x97, - 0x9e, 0x9f, 0x9c, 0x95, 0x8d, 0x84, 0x78, 0x6c, 0x6b, 0x72, 0x7a, - 0x80, 0x87, 0x8d, 0x91, 0x92, 0x8d, 0x83, 0x78, 0x70, 0x6d, 0x6e, - 0x73, 0x7b, 0x84, 0x8d, 0x94, 0x94, 0x8f, 0x88, 0x83, 0x81, 0x82, - 0x84, 0x84, 0x85, 0x83, 0x7f, 0x7a, 0x76, 0x74, 0x75, 0x77, 0x77, - 0x76, 0x74, 0x73, 0x72, 0x70, 0x6e, 0x6e, 0x6d, 0x69, 0x65, 0x65, - 0x68, 0x69, 0x67, 0x6e, 0x82, 0x93, 0xa2, 0xac, 0xab, 0xa1, 0x95, - 0x88, 0x7a, 0x71, 0x71, 0x78, 0x80, 0x85, 0x8a, 0x91, 0x96, 0x98, - 0x95, 0x8d, 0x85, 0x7f, 0x7a, 0x75, 0x74, 0x78, 0x81, 0x88, 0x8b, - 0x89, 0x88, 0x86, 0x7f, 0x74, 0x6d, 0x6c, 0x71, 0x7a, 0x81, 0x85, - 0x86, 0x8c, 0x94, 0x94, 0x8d, 0x86, 0x82, 0x80, 0x80, 0x80, 0x7e, - 0x7c, 0x7d, 0x7f, 0x7e, 0x7d, 0x7b, 0x7a, 0x78, 0x76, 0x73, 0x71, - 0x6e, 0x6c, 0x6d, 0x6f, 0x6f, 0x6f, 0x71, 0x72, 0x71, 0x70, 0x6e, - 0x69, 0x67, 0x70, 0x7f, 0x96, 0xac, 0xb2, 0xa8, 0x9c, 0x93, 0x89, - 0x81, 0x79, 0x73, 0x75, 0x80, 0x8d, 0x95, 0x96, 0x94, 0x91, 0x8d, - 0x87, 0x7e, 0x74, 0x6f, 0x73, 0x7a, 0x80, 0x85, 0x88, 0x87, 0x86, - 0x84, 0x81, 0x7c, 0x77, 0x75, 0x74, 0x75, 0x79, 0x7e, 0x82, 0x88, - 0x91, 0x96, 0x92, 0x8b, 0x85, 0x81, 0x7e, 0x7d, 0x7f, 0x81, 0x83, - 0x85, 0x85, 0x80, 0x7c, 0x7b, 0x7b, 0x78, 0x76, 0x74, 0x72, 0x72, - 0x74, 0x75, 0x74, 0x74, 0x75, 0x72, 0x6d, 0x6d, 0x6f, 0x6d, 0x6b, - 0x70, 0x75, 0x76, 0x78, 0x78, 0x73, 0x6d, 0x6d, 0x70, 0x7b, 0x8d, - 0x94, 0x91, 0x8e, 0x8d, 0x83, 0x7a, 0x79, 0x70, 0x6a, 0x7e, 0x9c, - 0xa8, 0xa4, 0xa2, 0x9e, 0x94, 0x8f, 0x8c, 0x7f, 0x6f, 0x70, 0x7a, - 0x7f, 0x83, 0x8a, 0x8e, 0x8c, 0x90, 0x94, 0x8f, 0x83, 0x7e, 0x7d, - 0x77, 0x74, 0x77, 0x7a, 0x7a, 0x7e, 0x84, 0x84, 0x82, 0x83, 0x85, - 0x83, 0x80, 0x7f, 0x7b, 0x77, 0x77, 0x7c, 0x82, 0x86, 0x8a, 0x8c, - 0x8b, 0x89, 0x89, 0x89, 0x86, 0x81, 0x7c, 0x79, 0x79, 0x7a, 0x7b, - 0x7b, 0x7c, 0x7b, 0x7a, 0x79, 0x78, 0x76, 0x75, 0x73, 0x72, 0x72, - 0x72, 0x73, 0x74, 0x75, 0x75, 0x76, 0x78, 0x7a, 0x7b, 0x7b, 0x7d, - 0x7d, 0x7c, 0x7b, 0x7d, 0x7d, 0x7c, 0x7b, 0x7b, 0x7c, 0x7b, 0x7a, - 0x79, 0x77, 0x75, 0x7a, 0x86, 0x8d, 0x8e, 0x8e, 0x91, 0x91, 0x8e, - 0x8d, 0x8b, 0x88, 0x85, 0x87, 0x89, 0x88, 0x87, 0x87, 0x86, 0x84, - 0x84, 0x84, 0x82, 0x80, 0x80, 0x80, 0x80, 0x81, 0x81, 0x7f, 0x7d, - 0x7d, 0x7d, 0x7d, 0x7e, 0x7e, 0x7e, 0x7d, 0x7c, 0x7c, 0x7c, 0x7d, - 0x7c, 0x7c, 0x7d, 0x7e, 0x80, 0x82, 0x84, 0x83, 0x80, 0x7e, 0x7c, - 0x7d, 0x7e, 0x81, 0x83, 0x85, 0x86, 0x86, 0x85, 0x83, 0x81, 0x7f, - 0x7e, 0x7c, 0x7b, 0x7a, 0x7a, 0x7a, 0x7b, 0x7b, 0x7a, 0x7a, 0x7b, - 0x7b, 0x7b, 0x7b, 0x7b, 0x7a, 0x7a, 0x7a, 0x7c, 0x7d, 0x7e, 0x7e, - 0x7d, 0x7c, 0x7d, 0x7f, 0x80, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, - 0x82, 0x82, 0x82, 0x82, 0x84, 0x85, 0x86, 0x86, 0x85, 0x84, 0x85, - 0x85, 0x85, 0x83, 0x83, 0x83, 0x83, 0x84, 0x84, 0x83, 0x81, 0x80, - 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, - 0x7e, 0x7e, 0x7e, 0x7d, 0x7c, 0x7d, 0x7e, 0x7d, 0x7d, 0x7d, 0x7d, - 0x7e, 0x7f, 0x80, 0x81, 0x81, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7e, - 0x7e, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7e, 0x7e, 0x7d, - 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7d, 0x7e, 0x7e, 0x7f, 0x7e, 0x7e, - 0x7f, 0x80, 0x7f, 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7e, 0x7e, - 0x7e, 0x7e, 0x7d, 0x7d, 0x7e, 0x7d, 0x7c, 0x7c, 0x7d, 0x7d, 0x7c, - 0x7c, 0x7c, 0x7b, 0x7c, 0x7d, 0x7f, 0x80, 0x82, 0x84, 0x87, 0x89, - 0x88, 0x87, 0x88, 0x8a, 0x8b, 0x8a, 0x88, 0x85, 0x85, 0x86, 0x85, - 0x84, 0x82, 0x81, 0x81, 0x81, 0x80, 0x7e, 0x7d, 0x7e, 0x7f, 0x80, - 0x82, 0x81, 0x7e, 0x7e, 0x7e, 0x7e, 0x7d, 0x7d, 0x7c, 0x7c, 0x7d, - 0x7b, 0x7c, 0x7e, 0x80, 0x80, 0x7f, 0x80, 0x82, 0x83, 0x84, 0x83, - 0x80, 0x7e, 0x80, 0x7f, 0x7b, 0x79, 0x78, 0x78, 0x79, 0x79, 0x79, - 0x77, 0x74, 0x77, 0x78, 0x77, 0x77, 0x77, 0x76, 0x73, 0x73, 0x72, - 0x6f, 0x6f, 0x6e, 0x6e, 0x6f, 0x70, 0x70, 0x72, 0x70, 0x6d, 0x6a, - 0x69, 0x67, 0x6d, 0x7e, 0x80, 0x83, 0x9a, 0xab, 0xaa, 0xa3, 0xa2, - 0x9a, 0x95, 0x94, 0x8c, 0x7e, 0x78, 0x7c, 0x7c, 0x7f, 0x84, 0x86, - 0x86, 0x8c, 0x93, 0x8f, 0x89, 0x86, 0x84, 0x80, 0x7f, 0x7b, 0x72, - 0x73, 0x77, 0x79, 0x79, 0x7b, 0x7c, 0x7e, 0x84, 0x85, 0x82, 0x80, - 0x82, 0x82, 0x80, 0x7e, 0x7b, 0x7f, 0x85, 0x84, 0x81, 0x84, 0x8a, - 0x8b, 0x8a, 0x88, 0x85, 0x87, 0x89, 0x86, 0x81, 0x7e, 0x7e, 0x7d, - 0x7c, 0x78, 0x75, 0x76, 0x76, 0x70, 0x6c, 0x6e, 0x71, 0x74, 0x73, - 0x71, 0x71, 0x74, 0x74, 0x73, 0x72, 0x72, 0x71, 0x6e, 0x6b, 0x69, - 0x6b, 0x6b, 0x68, 0x67, 0x69, 0x6a, 0x67, 0x64, 0x62, 0x61, 0x72, - 0x96, 0xab, 0xac, 0xaa, 0xaf, 0xaf, 0xaa, 0x9e, 0x8d, 0x85, 0x86, - 0x88, 0x82, 0x7f, 0x82, 0x88, 0x90, 0x91, 0x8f, 0x8c, 0x8d, 0x8c, - 0x87, 0x81, 0x7d, 0x7c, 0x7b, 0x7b, 0x76, 0x75, 0x77, 0x78, 0x77, - 0x76, 0x76, 0x79, 0x7d, 0x7e, 0x80, 0x82, 0x85, 0x87, 0x86, 0x84, - 0x81, 0x81, 0x84, 0x86, 0x82, 0x80, 0x83, 0x85, 0x85, 0x82, 0x82, - 0x85, 0x88, 0x88, 0x84, 0x81, 0x81, 0x7e, 0x7a, 0x77, 0x73, 0x72, - 0x74, 0x73, 0x6f, 0x6d, 0x6e, 0x70, 0x72, 0x73, 0x72, 0x74, 0x76, - 0x75, 0x73, 0x72, 0x73, 0x72, 0x72, 0x70, 0x6f, 0x70, 0x71, 0x6f, - 0x6e, 0x70, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x75, 0x78, 0x79, 0x80, - 0x8a, 0x94, 0xa3, 0xab, 0xa9, 0xa4, 0xa3, 0x9f, 0x98, 0x93, 0x8e, - 0x8d, 0x8e, 0x8d, 0x89, 0x89, 0x8a, 0x8a, 0x89, 0x87, 0x85, 0x82, - 0x82, 0x80, 0x7e, 0x7e, 0x7e, 0x7e, 0x7d, 0x7b, 0x79, 0x78, 0x78, - 0x78, 0x76, 0x76, 0x79, 0x7a, 0x7c, 0x7f, 0x82, 0x87, 0x8b, 0x8d, - 0x8d, 0x8d, 0x8e, 0x8e, 0x89, 0x85, 0x83, 0x81, 0x81, 0x80, 0x7c, - 0x7b, 0x7b, 0x7c, 0x7b, 0x7a, 0x78, 0x76, 0x75, 0x73, 0x70, 0x6e, - 0x6e, 0x6d, 0x6c, 0x6d, 0x6f, 0x71, 0x72, 0x73, 0x75, 0x76, 0x75, - 0x75, 0x78, 0x79, 0x77, 0x77, 0x77, 0x78, 0x78, 0x7a, 0x79, 0x77, - 0x79, 0x7a, 0x7b, 0x7b, 0x7c, 0x7d, 0x7e, 0x7e, 0x7a, 0x78, 0x78, - 0x7d, 0x85, 0x8c, 0x92, 0x95, 0x9b, 0xa4, 0xa4, 0xa0, 0x9f, 0xa0, - 0x9e, 0x9b, 0x97, 0x92, 0x90, 0x8f, 0x8c, 0x87, 0x85, 0x84, 0x82, - 0x81, 0x7f, 0x7e, 0x7f, 0x80, 0x7e, 0x7b, 0x7a, 0x79, 0x76, 0x75, - 0x74, 0x73, 0x73, 0x75, 0x77, 0x77, 0x79, 0x7c, 0x81, 0x84, 0x85, - 0x86, 0x89, 0x8b, 0x8c, 0x8b, 0x8a, 0x8b, 0x8b, 0x88, 0x83, 0x81, - 0x80, 0x7d, 0x7a, 0x77, 0x75, 0x76, 0x75, 0x73, 0x72, 0x72, 0x72, - 0x70, 0x6f, 0x6e, 0x6d, 0x6d, 0x6d, 0x6d, 0x6e, 0x70, 0x71, 0x72, - 0x75, 0x76, 0x77, 0x79, 0x79, 0x7a, 0x7b, 0x7c, 0x7c, 0x7d, 0x7f, - 0x7e, 0x7d, 0x7d, 0x7e, 0x7d, 0x7d, 0x7d, 0x7c, 0x7c, 0x7e, 0x7e, - 0x7b, 0x7b, 0x7e, 0x7f, 0x7f, 0x80, 0x84, 0x89, 0x90, 0x94, 0x94, - 0x99, 0x9f, 0xa1, 0x9f, 0x9f, 0xa0, 0xa1, 0xa1, 0x9d, 0x99, 0x98, - 0x94, 0x90, 0x8c, 0x88, 0x84, 0x82, 0x7f, 0x7b, 0x7a, 0x7a, 0x79, - 0x76, 0x75, 0x73, 0x71, 0x71, 0x71, 0x70, 0x71, 0x74, 0x76, 0x77, - 0x79, 0x7c, 0x7f, 0x81, 0x83, 0x85, 0x87, 0x8a, 0x89, 0x89, 0x89, - 0x8a, 0x88, 0x85, 0x82, 0x81, 0x7e, 0x7c, 0x79, 0x76, 0x74, 0x73, - 0x70, 0x6e, 0x6d, 0x6c, 0x6c, 0x6b, 0x6b, 0x6b, 0x6c, 0x6e, 0x6e, - 0x6f, 0x70, 0x73, 0x73, 0x74, 0x76, 0x78, 0x7a, 0x7b, 0x7c, 0x7d, - 0x7f, 0x80, 0x7f, 0x80, 0x81, 0x81, 0x7f, 0x81, 0x81, 0x7f, 0x7e, - 0x7f, 0x7e, 0x7d, 0x7d, 0x7c, 0x7c, 0x7b, 0x7a, 0x7a, 0x79, 0x78, - 0x79, 0x7c, 0x81, 0x85, 0x88, 0x8b, 0x92, 0x97, 0x98, 0x9a, 0x9d, - 0xa0, 0xa1, 0xa0, 0x9f, 0x9e, 0x9d, 0x9b, 0x99, 0x94, 0x90, 0x8e, - 0x8a, 0x86, 0x83, 0x80, 0x7e, 0x7c, 0x7b, 0x78, 0x76, 0x75, 0x73, - 0x72, 0x70, 0x6f, 0x6f, 0x6f, 0x6f, 0x71, 0x72, 0x73, 0x76, 0x79, - 0x7b, 0x7d, 0x7f, 0x83, 0x85, 0x86, 0x86, 0x87, 0x87, 0x86, 0x84, - 0x83, 0x82, 0x81, 0x7f, 0x7d, 0x7b, 0x79, 0x78, 0x75, 0x74, 0x73, - 0x73, 0x71, 0x71, 0x72, 0x71, 0x71, 0x72, 0x72, 0x73, 0x73, 0x74, - 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7c, 0x7c, 0x7d, - 0x7e, 0x7f, 0x7e, 0x7e, 0x7e, 0x7f, 0x7f, 0x7e, 0x7d, 0x7d, 0x7e, - 0x7e, 0x7c, 0x7d, 0x7d, 0x7d, 0x7d, 0x7c, 0x7c, 0x81, 0x86, 0x85, - 0x87, 0x8d, 0x91, 0x93, 0x94, 0x96, 0x9a, 0x9d, 0x9d, 0x9c, 0x9c, - 0x9c, 0x9b, 0x99, 0x96, 0x92, 0x90, 0x8e, 0x8a, 0x86, 0x84, 0x82, - 0x80, 0x7e, 0x7c, 0x7a, 0x79, 0x77, 0x75, 0x75, 0x75, 0x74, 0x73, - 0x73, 0x73, 0x74, 0x75, 0x75, 0x77, 0x79, 0x7b, 0x7d, 0x7e, 0x81, - 0x83, 0x83, 0x85, 0x86, 0x86, 0x86, 0x87, 0x86, 0x84, 0x83, 0x82, - 0x81, 0x7f, 0x7d, 0x7c, 0x7a, 0x79, 0x77, 0x76, 0x76, 0x76, 0x75, - 0x75, 0x75, 0x75, 0x75, 0x75, 0x76, 0x76, 0x77, 0x77, 0x78, 0x78, - 0x7a, 0x7b, 0x7a, 0x7a, 0x7b, 0x7c, 0x7c, 0x7c, 0x7c, 0x7d, 0x7d, - 0x7e, 0x7e, 0x7e, 0x7e, 0x7f, 0x7f, 0x7f, 0x7e, 0x7f, 0x80, 0x80, - 0x7f, 0x80, 0x80, 0x80, 0x81, 0x83, 0x84, 0x84, 0x86, 0x88, 0x89, - 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8d, 0x8e, 0x8e, 0x8e, 0x8d, 0x8d, - 0x8c, 0x8b, 0x8a, 0x89, 0x87, 0x86, 0x85, 0x84, 0x82, 0x81, 0x7f, - 0x7e, 0x7e, 0x7d, 0x7c, 0x7b, 0x7a, 0x79, 0x79, 0x79, 0x78, 0x77, - 0x78, 0x78, 0x78, 0x77, 0x78, 0x78, 0x79, 0x79, 0x79, 0x79, 0x7a, - 0x7a, 0x7a, 0x7a, 0x7a, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, - 0x7a, 0x7a, 0x7a, 0x7a, 0x7a, 0x7a, 0x7a, 0x7b, 0x7b, 0x7b, 0x7b, - 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7d, 0x7d, 0x7e, - 0x7e, 0x7e, 0x7f, 0x7f, 0x80, 0x80, 0x81, 0x81, 0x82, 0x82, 0x82, - 0x82, 0x82, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x84, 0x84, 0x84, - 0x84, 0x85, 0x85, 0x86, 0x86, 0x87, 0x87, 0x88, 0x88, 0x89, 0x89, - 0x89, 0x88, 0x88, 0x87, 0x87, 0x87, 0x86, 0x85, 0x84, 0x83, 0x83, - 0x82, 0x81, 0x80, 0x80, 0x7f, 0x7e, 0x7d, 0x7d, 0x7d, 0x7c, 0x7b, - 0x7b, 0x7a, 0x7a, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, - 0x79, 0x7a, 0x7a, 0x7a, 0x7a, 0x7a, 0x7b, 0x7b, 0x7b, 0x7b, 0x7c, - 0x7c, 0x7c, 0x7d, 0x7d, 0x7d, 0x7e, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, - 0x7d, 0x7d, 0x7e, 0x7e, 0x7e, 0x7e, 0x7f, 0x7e, 0x7e, 0x7e, 0x7e, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x81, 0x81, 0x80, 0x81, 0x81, 0x81, 0x81, 0x81, 0x82, 0x82, 0x81, - 0x81, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x81, 0x82, - 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x81, 0x81, 0x82, 0x81, - 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7d, 0x7d, - 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7e, - 0x7e, 0x7e, 0x7e, 0x7e, 0x7f, 0x7e, 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7e, 0x7e, 0x7d, 0x7d, 0x7d, - 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7e, 0x7e, - 0x7e, 0x7e, 0x7e, 0x7f, 0x7e, 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x80, - 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, - 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, - 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x80, - 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, - 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, - 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, - }, - { // 8 - 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, - 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, - 0x80, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, - 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, - 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, - 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x81, - 0x81, 0x89, 0x91, 0x84, 0x81, 0x88, 0x79, 0x6b, 0x71, 0x74, 0x77, - 0x81, 0x84, 0x87, 0x87, 0x7b, 0x6f, 0x6e, 0x6a, 0x64, 0x65, 0x63, - 0x62, 0x67, 0x73, 0x71, 0x69, 0x84, 0x88, 0x70, 0x76, 0x81, 0x71, - 0x63, 0x6f, 0x6b, 0x69, 0x80, 0x91, 0x95, 0xa0, 0xa8, 0xa3, 0xa1, - 0x9c, 0x90, 0x86, 0x82, 0x79, 0x78, 0x7f, 0x81, 0x89, 0x92, 0x9c, - 0xa4, 0xa5, 0x9e, 0x96, 0x8e, 0x83, 0x79, 0x72, 0x6d, 0x6a, 0x6f, - 0x6e, 0x71, 0x7b, 0x7a, 0x7e, 0x7e, 0x7b, 0x79, 0x6e, 0x67, 0x62, - 0x66, 0x5e, 0x56, 0x51, 0x4f, 0x95, 0xa8, 0x7f, 0x9b, 0xc6, 0xa6, - 0x81, 0x93, 0x89, 0x6f, 0x69, 0x68, 0x72, 0x71, 0x6e, 0x84, 0x92, - 0x8c, 0x97, 0xa1, 0x9c, 0x91, 0x8a, 0x88, 0x80, 0x73, 0x6d, 0x74, - 0x74, 0x72, 0x7c, 0x90, 0x9a, 0x95, 0x99, 0x9b, 0x8c, 0x7f, 0x7c, - 0x74, 0x6f, 0x6c, 0x73, 0x7e, 0x7c, 0x7d, 0x83, 0x7f, 0x7b, 0x77, - 0x73, 0x70, 0x66, 0x62, 0x5f, 0x5a, 0x51, 0x74, 0xa6, 0x91, 0x90, - 0xba, 0xb9, 0x94, 0x8f, 0x99, 0x7f, 0x65, 0x65, 0x6e, 0x6c, 0x65, - 0x74, 0x91, 0x90, 0x8e, 0xa0, 0xa5, 0x93, 0x8b, 0x8b, 0x7d, 0x72, - 0x6f, 0x6f, 0x73, 0x76, 0x81, 0x90, 0x93, 0x95, 0x9d, 0x96, 0x8d, - 0x8b, 0x82, 0x76, 0x73, 0x72, 0x6e, 0x71, 0x6f, 0x6c, 0x6e, 0x6a, - 0x6a, 0x6c, 0x6a, 0x67, 0x65, 0x64, 0x5f, 0x5b, 0x58, 0x71, 0x9a, - 0x8d, 0x90, 0xb7, 0xb1, 0x95, 0x95, 0x9a, 0x82, 0x6e, 0x6a, 0x6b, - 0x68, 0x64, 0x72, 0x86, 0x8f, 0x91, 0x9e, 0xa7, 0x9b, 0x94, 0x92, - 0x84, 0x77, 0x74, 0x6e, 0x6c, 0x74, 0x7c, 0x85, 0x8c, 0x93, 0x9a, - 0x99, 0x93, 0x8d, 0x87, 0x80, 0x7b, 0x77, 0x71, 0x6f, 0x6f, 0x6a, - 0x69, 0x66, 0x63, 0x67, 0x64, 0x61, 0x62, 0x5f, 0x60, 0x5e, 0x5a, - 0x59, 0x74, 0x9f, 0x92, 0x98, 0xc1, 0xaf, 0x8e, 0x95, 0x90, 0x73, - 0x6a, 0x69, 0x6b, 0x6c, 0x69, 0x77, 0x8b, 0x8e, 0x92, 0xa7, 0xa8, - 0x97, 0x97, 0x95, 0x83, 0x7a, 0x77, 0x71, 0x70, 0x76, 0x7d, 0x87, - 0x89, 0x8b, 0x94, 0x92, 0x8e, 0x8d, 0x88, 0x81, 0x80, 0x7c, 0x6f, - 0x71, 0x73, 0x68, 0x65, 0x68, 0x63, 0x65, 0x65, 0x5f, 0x5f, 0x62, - 0x60, 0x5e, 0x5b, 0x57, 0x56, 0x82, 0xa3, 0x86, 0xa0, 0xc7, 0xa6, - 0x8d, 0x9d, 0x92, 0x72, 0x6c, 0x6f, 0x6d, 0x65, 0x6a, 0x7c, 0x85, - 0x83, 0x95, 0xa6, 0x9f, 0x9c, 0x9c, 0x94, 0x84, 0x7b, 0x78, 0x6f, - 0x6f, 0x76, 0x7c, 0x83, 0x89, 0x90, 0x98, 0x94, 0x91, 0x93, 0x87, - 0x7e, 0x81, 0x7c, 0x71, 0x73, 0x73, 0x6b, 0x69, 0x68, 0x65, 0x61, - 0x5d, 0x5e, 0x60, 0x5d, 0x5a, 0x5e, 0x5d, 0x57, 0x50, 0x68, 0x9d, - 0x92, 0x8a, 0xbe, 0xbe, 0x95, 0x9c, 0xa4, 0x84, 0x71, 0x71, 0x71, - 0x66, 0x5d, 0x6e, 0x80, 0x7e, 0x88, 0xa4, 0xa5, 0x99, 0x9c, 0xa3, - 0x93, 0x81, 0x84, 0x7a, 0x6c, 0x6d, 0x70, 0x75, 0x79, 0x80, 0x8d, - 0x96, 0x94, 0x98, 0x9a, 0x90, 0x86, 0x7e, 0x7c, 0x78, 0x71, 0x6d, - 0x6f, 0x6c, 0x68, 0x67, 0x65, 0x63, 0x61, 0x63, 0x60, 0x5c, 0x5d, - 0x61, 0x66, 0x61, 0x61, 0x69, 0x8a, 0xa0, 0x8d, 0xa3, 0xba, 0x9f, - 0x8e, 0x98, 0x90, 0x74, 0x72, 0x77, 0x6e, 0x67, 0x74, 0x7e, 0x83, - 0x8b, 0x9a, 0xa1, 0x9d, 0x9d, 0x97, 0x8e, 0x84, 0x7a, 0x75, 0x6d, - 0x69, 0x6e, 0x72, 0x7a, 0x89, 0x8e, 0x8f, 0x9c, 0x9e, 0x95, 0x95, - 0x92, 0x85, 0x7a, 0x78, 0x74, 0x6c, 0x6a, 0x68, 0x61, 0x61, 0x68, - 0x67, 0x63, 0x68, 0x6b, 0x66, 0x60, 0x64, 0x68, 0x64, 0x5b, 0x5b, - 0x5b, 0x70, 0x8d, 0x81, 0x90, 0xaf, 0xa8, 0x9c, 0xa9, 0xab, 0x93, - 0x89, 0x88, 0x7f, 0x70, 0x6b, 0x6f, 0x70, 0x6e, 0x7b, 0x89, 0x8c, - 0x92, 0x9b, 0xa1, 0x9b, 0x97, 0x97, 0x8b, 0x7f, 0x7b, 0x76, 0x6c, - 0x6a, 0x6d, 0x70, 0x75, 0x7d, 0x87, 0x8d, 0x94, 0x9d, 0x9e, 0x98, - 0x8f, 0x89, 0x81, 0x75, 0x72, 0x72, 0x6c, 0x68, 0x69, 0x6c, 0x6d, - 0x6d, 0x72, 0x73, 0x6c, 0x68, 0x66, 0x65, 0x62, 0x60, 0x61, 0x5d, - 0x56, 0x57, 0x60, 0x70, 0x76, 0x86, 0x9d, 0x9f, 0xa5, 0xb2, 0xb2, - 0xa7, 0xa5, 0x9d, 0x8e, 0x82, 0x76, 0x70, 0x69, 0x66, 0x6a, 0x73, - 0x78, 0x80, 0x8e, 0x93, 0x99, 0xa0, 0xa2, 0xa0, 0x9a, 0x95, 0x8b, - 0x7e, 0x74, 0x6d, 0x65, 0x61, 0x61, 0x63, 0x6d, 0x76, 0x7f, 0x8c, - 0x96, 0xa0, 0xa4, 0xa7, 0xa6, 0x9f, 0x98, 0x8c, 0x82, 0x7a, 0x6f, - 0x6a, 0x65, 0x62, 0x60, 0x61, 0x63, 0x63, 0x68, 0x6b, 0x6c, 0x6e, - 0x6b, 0x6c, 0x68, 0x63, 0x65, 0x66, 0x68, 0x63, 0x5f, 0x5e, 0x5f, - 0x64, 0x71, 0x82, 0x85, 0x94, 0xa6, 0xa9, 0xab, 0xb2, 0xb4, 0xaa, - 0xa5, 0x9f, 0x91, 0x85, 0x7d, 0x75, 0x6c, 0x6b, 0x6b, 0x6c, 0x70, - 0x78, 0x81, 0x87, 0x8e, 0x93, 0x95, 0x96, 0x94, 0x91, 0x8b, 0x84, - 0x7e, 0x77, 0x71, 0x6f, 0x6d, 0x6e, 0x73, 0x79, 0x80, 0x86, 0x8f, - 0x97, 0x97, 0x9c, 0x9d, 0x98, 0x93, 0x8f, 0x89, 0x7e, 0x78, 0x73, - 0x6a, 0x63, 0x62, 0x5d, 0x5a, 0x5b, 0x5b, 0x5d, 0x5f, 0x5f, 0x62, - 0x64, 0x62, 0x5f, 0x60, 0x60, 0x60, 0x63, 0x64, 0x61, 0x60, 0x66, - 0x66, 0x6e, 0x80, 0x81, 0x8a, 0x9b, 0x9f, 0xa2, 0xab, 0xb4, 0xad, - 0xad, 0xae, 0xa2, 0x9a, 0x93, 0x89, 0x7d, 0x77, 0x73, 0x6d, 0x6b, - 0x6d, 0x72, 0x73, 0x7a, 0x80, 0x84, 0x8b, 0x8e, 0x92, 0x92, 0x91, - 0x8f, 0x8c, 0x86, 0x81, 0x7f, 0x7a, 0x79, 0x7b, 0x77, 0x7b, 0x80, - 0x7f, 0x84, 0x89, 0x88, 0x89, 0x8c, 0x89, 0x87, 0x86, 0x82, 0x7d, - 0x79, 0x75, 0x70, 0x6a, 0x67, 0x61, 0x5d, 0x5b, 0x57, 0x56, 0x57, - 0x5a, 0x63, 0x68, 0x67, 0x66, 0x60, 0x5c, 0x5a, 0x56, 0x56, 0x55, - 0x51, 0x54, 0x57, 0x5a, 0x65, 0x75, 0x79, 0x84, 0x9a, 0x9c, 0xa1, - 0xb2, 0xb5, 0xb3, 0xb8, 0xba, 0xb0, 0xa9, 0xa7, 0x99, 0x8e, 0x88, - 0x7e, 0x75, 0x70, 0x6f, 0x69, 0x69, 0x6d, 0x6d, 0x71, 0x76, 0x7b, - 0x7f, 0x83, 0x88, 0x89, 0x8b, 0x8c, 0x8d, 0x8b, 0x8b, 0x8b, 0x86, - 0x89, 0x88, 0x82, 0x85, 0x85, 0x81, 0x82, 0x82, 0x7f, 0x7e, 0x7e, - 0x7b, 0x78, 0x77, 0x73, 0x71, 0x6e, 0x6b, 0x6a, 0x69, 0x6a, 0x6d, - 0x6f, 0x6f, 0x73, 0x74, 0x74, 0x76, 0x75, 0x73, 0x71, 0x6e, 0x6c, - 0x69, 0x67, 0x65, 0x63, 0x5f, 0x5e, 0x5e, 0x5b, 0x59, 0x5b, 0x65, - 0x65, 0x66, 0x7a, 0x7f, 0x7e, 0x90, 0x99, 0x98, 0xa3, 0xad, 0xab, - 0xac, 0xb2, 0xac, 0xa7, 0xa5, 0x9e, 0x95, 0x8e, 0x89, 0x80, 0x7a, - 0x78, 0x72, 0x6f, 0x70, 0x70, 0x70, 0x73, 0x77, 0x79, 0x7b, 0x7f, - 0x82, 0x83, 0x85, 0x87, 0x88, 0x8a, 0x8b, 0x8a, 0x8c, 0x8b, 0x89, - 0x8a, 0x89, 0x86, 0x85, 0x84, 0x80, 0x7e, 0x7d, 0x79, 0x77, 0x75, - 0x73, 0x72, 0x71, 0x72, 0x71, 0x71, 0x76, 0x78, 0x7a, 0x7f, 0x82, - 0x83, 0x86, 0x88, 0x87, 0x86, 0x86, 0x83, 0x81, 0x80, 0x7d, 0x7a, - 0x79, 0x76, 0x74, 0x72, 0x71, 0x6f, 0x6d, 0x6d, 0x6b, 0x68, 0x6a, - 0x68, 0x66, 0x67, 0x66, 0x64, 0x68, 0x71, 0x6c, 0x71, 0x7f, 0x7a, - 0x80, 0x8d, 0x8a, 0x90, 0x97, 0x99, 0x9b, 0x9d, 0x9f, 0x9c, 0x9b, - 0x9a, 0x98, 0x92, 0x8e, 0x8d, 0x86, 0x83, 0x83, 0x7c, 0x7c, 0x7c, - 0x78, 0x78, 0x7a, 0x7a, 0x79, 0x7b, 0x7c, 0x7c, 0x7c, 0x7e, 0x7f, - 0x7e, 0x80, 0x81, 0x81, 0x83, 0x84, 0x84, 0x85, 0x84, 0x86, 0x84, - 0x84, 0x85, 0x82, 0x82, 0x81, 0x7e, 0x7e, 0x7c, 0x7b, 0x79, 0x76, - 0x77, 0x76, 0x74, 0x76, 0x74, 0x73, 0x75, 0x74, 0x74, 0x76, 0x76, - 0x77, 0x78, 0x7a, 0x7c, 0x7d, 0x7e, 0x80, 0x81, 0x82, 0x83, 0x84, - 0x84, 0x85, 0x86, 0x85, 0x85, 0x85, 0x85, 0x84, 0x83, 0x82, 0x81, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x81, 0x81, 0x81, 0x82, 0x82, 0x81, - 0x82, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, - 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x7f, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7e, 0x81, 0x7c, 0x8b, - 0x86, 0x7a, 0x85, 0x7f, 0x88, 0x7c, 0x77, 0x87, 0x83, 0x89, 0x8a, - 0x84, 0x82, 0x79, 0x81, 0x8b, 0x86, 0x82, 0x7e, 0x7e, 0x7c, 0x75, - 0x79, 0x7c, 0x7e, 0x7b, 0x78, 0x7e, 0x7d, 0x80, 0x7e, 0x7d, 0x7f, - 0x7e, 0x7d, 0x7d, 0x82, 0x81, 0x80, 0x7c, 0x81, 0x81, 0x7e, 0x7c, - 0x80, 0x85, 0x7f, 0x80, 0x82, 0x85, 0x81, 0x7d, 0x83, 0x83, 0x83, - 0x7e, 0x7f, 0x82, 0x81, 0x7e, 0x7d, 0x82, 0x80, 0x7d, 0x7d, 0x81, - 0x81, 0x7f, 0x7d, 0x81, 0x84, 0x7f, 0x7f, 0x83, 0x82, 0x80, 0x7f, - 0x7f, 0x81, 0x7f, 0x7d, 0x82, 0x82, 0x7b, 0x7d, 0x80, 0x7d, 0x7d, - 0x7f, 0x82, 0x81, 0x80, 0x7e, 0x80, 0x7f, 0x7c, 0x7e, 0x80, 0x82, - 0x82, 0x81, 0x81, 0x80, 0x7f, 0x7d, 0x7e, 0x80, 0x80, 0x7f, 0x7f, - 0x80, 0x7f, 0x7f, 0x7e, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x81, - 0x80, 0x7f, 0x80, 0x80, 0x7e, 0x7f, 0x80, 0x80, 0x80, 0x81, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x7f, - 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x81, 0x81, - 0x80, 0x80, 0x81, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, - 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x81, 0x80, 0x80, 0x80, 0x81, - 0x81, 0x80, 0x80, 0x80, 0x7f, 0x7e, 0x7e, 0x7e, 0x7e, 0x7f, 0x80, - 0x80, 0x81, 0x81, 0x81, 0x81, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7e, 0x7f, 0x7e, 0x7e, 0x7f, - 0x80, 0x7f, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, - 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x80, - 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x7f, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, - 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x80, - 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, - 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, - 0x80, 0x80, 0x7f, - }, - { // 9 - 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, - 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, - 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7e, 0x7c, 0x7a, - 0x79, 0x7a, 0x7b, 0x7e, 0x80, 0x83, 0x86, 0x8a, 0x8e, 0x91, 0x95, - 0x98, 0x9a, 0x9c, 0x9e, 0x9f, 0x9f, 0x9e, 0x9c, 0x9b, 0x99, 0x96, - 0x93, 0x91, 0x8e, 0x8a, 0x88, 0x86, 0x83, 0x82, 0x80, 0x7f, 0x7e, - 0x7e, 0x7d, 0x7d, 0x7d, 0x7e, 0x7e, 0x7f, 0x81, 0x81, 0x81, 0x82, - 0x81, 0x81, 0x80, 0x7f, 0x7d, 0x7b, 0x79, 0x76, 0x74, 0x71, 0x6e, - 0x6b, 0x69, 0x67, 0x65, 0x64, 0x63, 0x62, 0x62, 0x62, 0x62, 0x62, - 0x64, 0x64, 0x64, 0x66, 0x67, 0x67, 0x68, 0x6a, 0x6e, 0x71, 0x75, - 0x7a, 0x7f, 0x84, 0x8a, 0x8f, 0x94, 0x99, 0x9e, 0xa1, 0xa4, 0xa6, - 0xa6, 0xa7, 0xa7, 0xa6, 0xa4, 0xa2, 0x9e, 0x99, 0x96, 0x91, 0x8d, - 0x89, 0x85, 0x81, 0x7e, 0x7d, 0x7b, 0x78, 0x78, 0x78, 0x78, 0x78, - 0x79, 0x7a, 0x7b, 0x7e, 0x80, 0x82, 0x85, 0x86, 0x87, 0x89, 0x88, - 0x87, 0x86, 0x84, 0x80, 0x7d, 0x7a, 0x76, 0x73, 0x6f, 0x6b, 0x69, - 0x66, 0x62, 0x5f, 0x5d, 0x5b, 0x59, 0x58, 0x58, 0x58, 0x59, 0x5b, - 0x5d, 0x5e, 0x5f, 0x62, 0x64, 0x66, 0x6b, 0x73, 0x79, 0x80, 0x8c, - 0x95, 0x97, 0x9e, 0xa8, 0xab, 0xab, 0xaf, 0xaf, 0xac, 0xad, 0xac, - 0xa6, 0xa4, 0xa3, 0x9c, 0x97, 0x95, 0x90, 0x88, 0x86, 0x83, 0x7d, - 0x7b, 0x7a, 0x77, 0x75, 0x76, 0x75, 0x74, 0x77, 0x77, 0x78, 0x7b, - 0x7d, 0x7d, 0x80, 0x83, 0x84, 0x85, 0x88, 0x88, 0x87, 0x88, 0x87, - 0x85, 0x84, 0x81, 0x7d, 0x7a, 0x76, 0x72, 0x6f, 0x6b, 0x66, 0x63, - 0x61, 0x5e, 0x5c, 0x5c, 0x5b, 0x5b, 0x5c, 0x5e, 0x5e, 0x61, 0x63, - 0x65, 0x67, 0x6c, 0x75, 0x79, 0x7d, 0x87, 0x8f, 0x93, 0x9a, 0xa4, - 0xa8, 0xad, 0xb2, 0xb3, 0xb3, 0xb4, 0xb3, 0xaf, 0xac, 0xa9, 0xa3, - 0x9d, 0x98, 0x91, 0x8b, 0x87, 0x83, 0x7d, 0x78, 0x75, 0x71, 0x70, - 0x6f, 0x6d, 0x6d, 0x70, 0x74, 0x76, 0x79, 0x7c, 0x7d, 0x80, 0x83, - 0x85, 0x85, 0x87, 0x8c, 0x8f, 0x91, 0x8c, 0x84, 0x7d, 0x77, 0x74, - 0x6b, 0x63, 0x60, 0x5b, 0x55, 0x4f, 0x4d, 0x4c, 0x4d, 0x4b, 0x4b, - 0x4b, 0x49, 0x48, 0x47, 0x53, 0x73, 0x8f, 0x97, 0x99, 0x9f, 0xa8, - 0xaa, 0xa1, 0x93, 0x8e, 0x95, 0x9c, 0x99, 0x8f, 0x8b, 0x93, 0x9c, - 0x98, 0x8b, 0x86, 0x8a, 0x8d, 0x8a, 0x84, 0x82, 0x86, 0x88, 0x85, - 0x7d, 0x78, 0x7d, 0x82, 0x80, 0x7c, 0x82, 0x8b, 0x8a, 0x88, 0x88, - 0x88, 0x8a, 0x8a, 0x86, 0x86, 0x88, 0x86, 0x82, 0x7a, 0x75, 0x72, - 0x6b, 0x63, 0x61, 0x5f, 0x5f, 0x5f, 0x5c, 0x58, 0x55, 0x50, 0x52, - 0x55, 0x4f, 0x51, 0x55, 0x4f, 0x44, 0x5c, 0x9c, 0xbb, 0xb0, 0x99, - 0x8d, 0x96, 0x9a, 0x88, 0x73, 0x7c, 0x95, 0x9e, 0x97, 0x90, 0x8f, - 0x98, 0x9e, 0x95, 0x89, 0x85, 0x87, 0x87, 0x84, 0x81, 0x83, 0x86, - 0x87, 0x84, 0x7f, 0x7d, 0x7f, 0x80, 0x7f, 0x81, 0x85, 0x86, 0x87, - 0x89, 0x8b, 0x8c, 0x8c, 0x88, 0x85, 0x83, 0x84, 0x82, 0x7c, 0x76, - 0x75, 0x73, 0x6d, 0x65, 0x63, 0x65, 0x63, 0x5d, 0x5b, 0x5a, 0x57, - 0x57, 0x56, 0x53, 0x54, 0x4f, 0x4d, 0x48, 0x57, 0x98, 0xc3, 0xb7, - 0x94, 0x81, 0x85, 0x8c, 0x81, 0x6c, 0x74, 0x95, 0xa4, 0x9e, 0x90, - 0x86, 0x8c, 0x94, 0x8a, 0x7d, 0x7b, 0x80, 0x89, 0x8d, 0x88, 0x83, - 0x84, 0x89, 0x87, 0x80, 0x79, 0x79, 0x80, 0x83, 0x81, 0x84, 0x85, - 0x86, 0x89, 0x8b, 0x89, 0x85, 0x83, 0x82, 0x80, 0x7d, 0x7c, 0x7c, - 0x7a, 0x78, 0x75, 0x71, 0x6f, 0x6e, 0x6c, 0x67, 0x63, 0x61, 0x5f, - 0x5e, 0x5e, 0x5c, 0x5a, 0x5c, 0x5d, 0x6a, 0x88, 0xa7, 0xb4, 0xa5, - 0x8c, 0x77, 0x70, 0x75, 0x7e, 0x88, 0x91, 0x95, 0x94, 0x8e, 0x8c, - 0x8a, 0x84, 0x81, 0x84, 0x88, 0x89, 0x86, 0x86, 0x88, 0x8a, 0x8b, - 0x86, 0x80, 0x7d, 0x7d, 0x80, 0x83, 0x80, 0x80, 0x84, 0x82, 0x7f, - 0x82, 0x87, 0x8a, 0x89, 0x84, 0x7e, 0x7a, 0x78, 0x79, 0x7b, 0x7c, - 0x77, 0x73, 0x74, 0x72, 0x6e, 0x68, 0x64, 0x66, 0x67, 0x66, 0x65, - 0x65, 0x62, 0x5d, 0x60, 0x7d, 0xab, 0xbe, 0xaa, 0x86, 0x68, 0x5f, - 0x6f, 0x86, 0x90, 0x8d, 0x89, 0x8c, 0x95, 0x98, 0x8f, 0x82, 0x7c, - 0x7e, 0x84, 0x86, 0x86, 0x87, 0x87, 0x85, 0x84, 0x84, 0x84, 0x82, - 0x82, 0x84, 0x83, 0x82, 0x85, 0x84, 0x83, 0x86, 0x86, 0x85, 0x86, - 0x86, 0x7f, 0x79, 0x76, 0x77, 0x7e, 0x81, 0x7a, 0x6e, 0x66, 0x69, - 0x72, 0x74, 0x6c, 0x63, 0x61, 0x60, 0x5e, 0x5f, 0x5c, 0x5f, 0x7e, - 0xaa, 0xbe, 0xae, 0x8a, 0x66, 0x5a, 0x6a, 0x81, 0x8f, 0x93, 0x8d, - 0x87, 0x89, 0x8e, 0x90, 0x8c, 0x84, 0x7c, 0x7e, 0x86, 0x89, 0x88, - 0x86, 0x85, 0x87, 0x88, 0x85, 0x80, 0x7f, 0x80, 0x83, 0x86, 0x85, - 0x85, 0x87, 0x88, 0x87, 0x85, 0x84, 0x82, 0x7e, 0x79, 0x78, 0x7a, - 0x7a, 0x78, 0x75, 0x73, 0x6f, 0x6d, 0x6b, 0x68, 0x66, 0x64, 0x62, - 0x5f, 0x5a, 0x58, 0x65, 0x88, 0xaf, 0xbe, 0xaa, 0x81, 0x5e, 0x56, - 0x6a, 0x88, 0x99, 0x95, 0x88, 0x81, 0x85, 0x8e, 0x92, 0x8c, 0x82, - 0x7e, 0x80, 0x82, 0x82, 0x82, 0x84, 0x87, 0x8a, 0x8b, 0x8a, 0x8a, - 0x87, 0x81, 0x7b, 0x79, 0x7c, 0x82, 0x8a, 0x8e, 0x8e, 0x8b, 0x85, - 0x7d, 0x77, 0x75, 0x77, 0x7b, 0x7c, 0x78, 0x73, 0x6f, 0x6c, 0x6c, - 0x6e, 0x6c, 0x67, 0x66, 0x62, 0x5a, 0x54, 0x59, 0x77, 0xa8, 0xc4, - 0xb8, 0x94, 0x68, 0x50, 0x59, 0x79, 0x97, 0xa0, 0x92, 0x80, 0x7a, - 0x84, 0x93, 0x96, 0x8c, 0x7f, 0x7b, 0x7c, 0x80, 0x83, 0x85, 0x87, - 0x8a, 0x8c, 0x8c, 0x8b, 0x88, 0x81, 0x7a, 0x78, 0x7b, 0x80, 0x89, - 0x8f, 0x8f, 0x8a, 0x85, 0x81, 0x7e, 0x79, 0x78, 0x79, 0x78, 0x76, - 0x75, 0x73, 0x71, 0x6e, 0x68, 0x65, 0x64, 0x61, 0x61, 0x5e, 0x56, - 0x50, 0x5c, 0x89, 0xb9, 0xc7, 0xb1, 0x81, 0x57, 0x4f, 0x68, 0x8c, - 0xa2, 0x9a, 0x83, 0x79, 0x7e, 0x8b, 0x94, 0x93, 0x89, 0x81, 0x7d, - 0x7d, 0x80, 0x82, 0x82, 0x85, 0x89, 0x8c, 0x8d, 0x8c, 0x86, 0x7f, - 0x7c, 0x7c, 0x7d, 0x7f, 0x86, 0x8b, 0x8d, 0x8c, 0x86, 0x7f, 0x7a, - 0x78, 0x78, 0x7b, 0x7c, 0x79, 0x74, 0x71, 0x6f, 0x6d, 0x6b, 0x68, - 0x66, 0x64, 0x64, 0x64, 0x5d, 0x54, 0x53, 0x68, 0x9a, 0xc0, 0xc0, - 0xa0, 0x6e, 0x4f, 0x56, 0x76, 0x98, 0xa6, 0x96, 0x7f, 0x79, 0x80, - 0x8c, 0x93, 0x8f, 0x87, 0x82, 0x7e, 0x7d, 0x80, 0x82, 0x84, 0x87, - 0x88, 0x89, 0x89, 0x87, 0x81, 0x7b, 0x7b, 0x7f, 0x86, 0x8b, 0x8c, - 0x89, 0x84, 0x80, 0x7d, 0x7b, 0x7a, 0x7c, 0x7d, 0x7c, 0x78, 0x74, - 0x71, 0x6f, 0x70, 0x70, 0x6e, 0x6a, 0x68, 0x6b, 0x6e, 0x6a, 0x64, - 0x5e, 0x57, 0x5b, 0x78, 0xa2, 0xb9, 0xb0, 0x8f, 0x69, 0x5a, 0x64, - 0x7e, 0x96, 0x9d, 0x90, 0x7f, 0x7e, 0x88, 0x90, 0x90, 0x8a, 0x84, - 0x81, 0x82, 0x84, 0x83, 0x81, 0x83, 0x87, 0x8a, 0x89, 0x85, 0x7f, - 0x7b, 0x7c, 0x7d, 0x81, 0x88, 0x8b, 0x8c, 0x8c, 0x87, 0x83, 0x81, - 0x7f, 0x7c, 0x79, 0x77, 0x7a, 0x7e, 0x7b, 0x76, 0x75, 0x75, 0x73, - 0x70, 0x6a, 0x62, 0x62, 0x67, 0x6b, 0x69, 0x61, 0x5d, 0x5e, 0x60, - 0x66, 0x6f, 0x82, 0xa1, 0xae, 0xa2, 0x87, 0x6b, 0x63, 0x72, 0x8a, - 0x9a, 0x9b, 0x8e, 0x85, 0x85, 0x89, 0x8b, 0x88, 0x81, 0x7e, 0x7e, - 0x83, 0x88, 0x87, 0x84, 0x84, 0x86, 0x88, 0x86, 0x80, 0x7a, 0x76, - 0x75, 0x79, 0x81, 0x8b, 0x92, 0x95, 0x91, 0x89, 0x82, 0x7f, 0x80, - 0x84, 0x86, 0x83, 0x7f, 0x7c, 0x79, 0x77, 0x78, 0x78, 0x75, 0x72, - 0x6e, 0x6b, 0x69, 0x6a, 0x69, 0x66, 0x65, 0x64, 0x67, 0x69, 0x66, - 0x63, 0x5f, 0x5d, 0x5c, 0x5e, 0x83, 0xaf, 0xb7, 0xa9, 0x89, 0x67, - 0x62, 0x75, 0x8d, 0xa1, 0x9d, 0x8a, 0x82, 0x84, 0x87, 0x8d, 0x8c, - 0x88, 0x88, 0x86, 0x82, 0x81, 0x7f, 0x80, 0x83, 0x82, 0x80, 0x81, - 0x80, 0x81, 0x81, 0x80, 0x7c, 0x79, 0x7c, 0x85, 0x8d, 0x90, 0x8e, - 0x89, 0x82, 0x7e, 0x7f, 0x82, 0x85, 0x87, 0x85, 0x80, 0x80, 0x7f, - 0x7b, 0x76, 0x74, 0x76, 0x78, 0x78, 0x73, 0x6d, 0x69, 0x68, 0x6a, - 0x6c, 0x6d, 0x69, 0x64, 0x65, 0x67, 0x6d, 0x69, 0x65, 0x61, 0x5d, - 0x5e, 0x63, 0x92, 0xbf, 0xbf, 0xaf, 0x89, 0x63, 0x5d, 0x74, 0x90, - 0xa5, 0x9f, 0x8b, 0x83, 0x83, 0x8b, 0x92, 0x8e, 0x84, 0x80, 0x7e, - 0x84, 0x8b, 0x86, 0x7f, 0x7e, 0x81, 0x85, 0x89, 0x83, 0x7a, 0x74, - 0x6f, 0x71, 0x77, 0x7c, 0x82, 0x88, 0x88, 0x87, 0x87, 0x88, 0x8b, - 0x8b, 0x86, 0x81, 0x7e, 0x7f, 0x83, 0x87, 0x88, 0x84, 0x7c, 0x79, - 0x79, 0x7a, 0x7b, 0x79, 0x76, 0x74, 0x72, 0x71, 0x70, 0x70, 0x6e, - 0x6d, 0x6e, 0x6f, 0x6e, 0x6b, 0x67, 0x66, 0x6a, 0x6e, 0x6f, 0x6d, - 0x69, 0x63, 0x5f, 0x64, 0x66, 0x7a, 0xa9, 0xbe, 0xb6, 0x9e, 0x78, - 0x64, 0x71, 0x88, 0x9a, 0x9f, 0x8e, 0x84, 0x89, 0x8c, 0x8f, 0x8c, - 0x82, 0x80, 0x82, 0x83, 0x82, 0x81, 0x7a, 0x7c, 0x85, 0x89, 0x8d, - 0x8a, 0x7e, 0x78, 0x76, 0x76, 0x79, 0x7a, 0x7d, 0x7f, 0x7f, 0x7f, - 0x81, 0x86, 0x87, 0x85, 0x82, 0x7f, 0x7e, 0x82, 0x88, 0x87, 0x85, - 0x86, 0x88, 0x86, 0x83, 0x7f, 0x7d, 0x81, 0x80, 0x7d, 0x7c, 0x7b, - 0x7b, 0x7b, 0x7a, 0x78, 0x75, 0x73, 0x71, 0x71, 0x75, 0x78, 0x77, - 0x75, 0x72, 0x71, 0x72, 0x72, 0x70, 0x6d, 0x6b, 0x6b, 0x6c, 0x6f, - 0x70, 0x6f, 0x6d, 0x69, 0x69, 0x68, 0x6b, 0x6a, 0x76, 0xa7, 0xbc, - 0xad, 0x93, 0x77, 0x70, 0x7e, 0x8c, 0x91, 0x91, 0x8a, 0x89, 0x90, - 0x90, 0x88, 0x83, 0x81, 0x85, 0x8c, 0x89, 0x7f, 0x78, 0x79, 0x82, - 0x8a, 0x88, 0x84, 0x83, 0x82, 0x81, 0x7d, 0x76, 0x70, 0x70, 0x76, - 0x7d, 0x84, 0x86, 0x88, 0x88, 0x85, 0x7e, 0x78, 0x79, 0x80, 0x87, - 0x88, 0x86, 0x84, 0x86, 0x87, 0x87, 0x85, 0x83, 0x80, 0x80, 0x83, - 0x80, 0x7d, 0x7d, 0x7e, 0x7c, 0x78, 0x76, 0x78, 0x79, 0x78, 0x76, - 0x75, 0x74, 0x74, 0x75, 0x74, 0x72, 0x74, 0x74, 0x71, 0x71, 0x72, - 0x72, 0x72, 0x72, 0x6e, 0x70, 0x73, 0x72, 0x70, 0x6e, 0x6e, 0x73, - 0x72, 0x6d, 0x6e, 0x81, 0xaa, 0xb5, 0x9e, 0x8b, 0x86, 0x8b, 0x90, - 0x85, 0x7c, 0x87, 0x92, 0x98, 0x94, 0x86, 0x82, 0x8a, 0x8a, 0x83, - 0x7e, 0x7b, 0x7f, 0x84, 0x84, 0x81, 0x81, 0x84, 0x86, 0x81, 0x7b, - 0x7e, 0x80, 0x7e, 0x7a, 0x77, 0x78, 0x7a, 0x7e, 0x81, 0x83, 0x86, - 0x87, 0x86, 0x82, 0x85, 0x88, 0x88, 0x88, 0x86, 0x83, 0x83, 0x82, - 0x82, 0x84, 0x81, 0x80, 0x81, 0x7b, 0x78, 0x78, 0x77, 0x78, 0x79, - 0x77, 0x76, 0x77, 0x73, 0x72, 0x72, 0x71, 0x75, 0x77, 0x73, 0x72, - 0x73, 0x74, 0x73, 0x71, 0x73, 0x73, 0x71, 0x74, 0x77, 0x75, 0x75, - 0x75, 0x74, 0x75, 0x76, 0x74, 0x75, 0x77, 0x77, 0x77, 0x77, 0x7b, - 0x8f, 0xa1, 0x9f, 0x98, 0x97, 0x96, 0x93, 0x8b, 0x84, 0x88, 0x91, - 0x92, 0x8c, 0x8a, 0x8a, 0x8d, 0x8b, 0x84, 0x82, 0x84, 0x82, 0x7d, - 0x7d, 0x7f, 0x82, 0x85, 0x81, 0x7f, 0x80, 0x81, 0x80, 0x7e, 0x7b, - 0x7b, 0x7a, 0x74, 0x74, 0x7a, 0x80, 0x81, 0x81, 0x87, 0x89, 0x8a, - 0x87, 0x86, 0x86, 0x85, 0x82, 0x7e, 0x80, 0x81, 0x7f, 0x82, 0x84, - 0x81, 0x7d, 0x7b, 0x79, 0x79, 0x7a, 0x79, 0x78, 0x78, 0x79, 0x79, - 0x77, 0x75, 0x75, 0x75, 0x74, 0x72, 0x72, 0x75, 0x74, 0x70, 0x70, - 0x74, 0x75, 0x73, 0x72, 0x73, 0x74, 0x74, 0x75, 0x73, 0x73, 0x74, - 0x74, 0x73, 0x74, 0x75, 0x76, 0x74, 0x6f, 0x74, 0x75, 0x7d, 0x8b, - 0x84, 0x82, 0x8c, 0x94, 0x96, 0x8d, 0x91, 0x9a, 0x98, 0x90, 0x8d, - 0x90, 0x91, 0x8e, 0x89, 0x8b, 0x8e, 0x89, 0x86, 0x88, 0x88, 0x85, - 0x81, 0x81, 0x84, 0x83, 0x7f, 0x7d, 0x81, 0x84, 0x7f, 0x7c, 0x80, - 0x81, 0x7c, 0x79, 0x7b, 0x7a, 0x78, 0x7a, 0x7c, 0x7c, 0x7d, 0x81, - 0x85, 0x83, 0x84, 0x87, 0x85, 0x83, 0x84, 0x86, 0x87, 0x84, 0x84, - 0x89, 0x85, 0x7f, 0x81, 0x81, 0x7f, 0x7c, 0x7b, 0x7e, 0x7f, 0x79, - 0x78, 0x7c, 0x7b, 0x77, 0x76, 0x78, 0x76, 0x72, 0x73, 0x73, 0x71, - 0x71, 0x72, 0x72, 0x71, 0x74, 0x72, 0x6f, 0x73, 0x75, 0x72, 0x74, - 0x76, 0x74, 0x73, 0x73, 0x73, 0x72, 0x74, 0x76, 0x74, 0x73, 0x71, - 0x70, 0x70, 0x6f, 0x72, 0x82, 0x84, 0x7b, 0x80, 0x85, 0x80, 0x8e, - 0x99, 0x8e, 0x96, 0xa5, 0x9d, 0x96, 0x96, 0x96, 0x96, 0x94, 0x90, - 0x91, 0x91, 0x8a, 0x86, 0x89, 0x88, 0x81, 0x7e, 0x80, 0x82, 0x82, - 0x7f, 0x82, 0x87, 0x84, 0x7e, 0x7f, 0x7f, 0x7c, 0x7a, 0x78, 0x79, - 0x7a, 0x78, 0x77, 0x7a, 0x7c, 0x7b, 0x7d, 0x82, 0x85, 0x84, 0x86, - 0x89, 0x8a, 0x88, 0x87, 0x87, 0x86, 0x84, 0x81, 0x80, 0x80, 0x7f, - 0x7e, 0x7e, 0x7d, 0x7b, 0x79, 0x78, 0x77, 0x76, 0x75, 0x74, 0x75, - 0x73, 0x72, 0x73, 0x73, 0x71, 0x70, 0x72, 0x73, 0x73, 0x73, 0x73, - 0x75, 0x74, 0x74, 0x76, 0x74, 0x74, 0x74, 0x75, 0x76, 0x76, 0x78, - 0x78, 0x77, 0x79, 0x79, 0x78, 0x78, 0x79, 0x78, 0x78, 0x77, 0x77, - 0x75, 0x7a, 0x81, 0x7f, 0x7d, 0x81, 0x84, 0x80, 0x7e, 0x7d, 0x83, - 0x8b, 0x89, 0x8a, 0x91, 0x95, 0x94, 0x97, 0x99, 0x9b, 0x9e, 0x9e, - 0x9c, 0x9b, 0x9b, 0x98, 0x94, 0x92, 0x8f, 0x8b, 0x88, 0x84, 0x81, - 0x80, 0x7f, 0x7e, 0x7c, 0x7c, 0x7c, 0x7c, 0x7a, 0x78, 0x79, 0x7a, - 0x79, 0x78, 0x79, 0x7b, 0x7c, 0x7b, 0x7c, 0x7d, 0x7e, 0x80, 0x82, - 0x83, 0x84, 0x85, 0x86, 0x86, 0x86, 0x86, 0x84, 0x84, 0x83, 0x80, - 0x7f, 0x7e, 0x7d, 0x7b, 0x7a, 0x79, 0x78, 0x77, 0x76, 0x75, 0x75, - 0x74, 0x73, 0x73, 0x73, 0x72, 0x72, 0x72, 0x72, 0x72, 0x73, 0x72, - 0x71, 0x73, 0x74, 0x72, 0x72, 0x73, 0x75, 0x76, 0x76, 0x77, 0x79, - 0x7a, 0x7a, 0x7a, 0x7d, 0x7c, 0x7b, 0x7d, 0x7e, 0x7d, 0x7d, 0x7d, - 0x7c, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7e, 0x7e, 0x7d, 0x7b, 0x7a, - 0x79, 0x79, 0x7f, 0x82, 0x80, 0x84, 0x8d, 0x8e, 0x8d, 0x92, 0x96, - 0x99, 0x9c, 0x9e, 0x9c, 0x9c, 0x9f, 0x9e, 0x9b, 0x98, 0x95, 0x95, - 0x91, 0x8c, 0x89, 0x8a, 0x89, 0x84, 0x81, 0x81, 0x7f, 0x7d, 0x7c, - 0x7a, 0x7a, 0x7a, 0x78, 0x77, 0x78, 0x77, 0x77, 0x79, 0x79, 0x79, - 0x7b, 0x7d, 0x7d, 0x7e, 0x80, 0x7f, 0x7f, 0x80, 0x81, 0x80, 0x7f, - 0x80, 0x81, 0x80, 0x7f, 0x7f, 0x7f, 0x7e, 0x7d, 0x7c, 0x7c, 0x7b, - 0x7a, 0x7a, 0x79, 0x78, 0x77, 0x76, 0x75, 0x74, 0x74, 0x73, 0x73, - 0x72, 0x71, 0x72, 0x72, 0x70, 0x71, 0x72, 0x73, 0x72, 0x73, 0x74, - 0x74, 0x75, 0x75, 0x76, 0x77, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7f, - 0x80, 0x7f, 0x81, 0x82, 0x82, 0x81, 0x82, 0x81, 0x80, 0x81, 0x81, - 0x81, 0x82, 0x81, 0x80, 0x80, 0x7f, 0x7d, 0x7e, 0x80, 0x81, 0x82, - 0x84, 0x86, 0x89, 0x8b, 0x8b, 0x8d, 0x90, 0x91, 0x93, 0x93, 0x93, - 0x94, 0x94, 0x92, 0x90, 0x8f, 0x8e, 0x8d, 0x8c, 0x8a, 0x89, 0x89, - 0x88, 0x86, 0x85, 0x85, 0x84, 0x83, 0x82, 0x81, 0x81, 0x80, 0x7f, - 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7d, 0x7e, - 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, - 0x7e, 0x7e, 0x7e, 0x7e, 0x7d, 0x7d, 0x7d, 0x7d, 0x7c, 0x7b, 0x7b, - 0x7a, 0x7a, 0x79, 0x78, 0x77, 0x77, 0x75, 0x75, 0x74, 0x73, 0x73, - 0x73, 0x73, 0x73, 0x73, 0x73, 0x74, 0x75, 0x75, 0x76, 0x77, 0x78, - 0x79, 0x7a, 0x7a, 0x7b, 0x7d, 0x7e, 0x7e, 0x7e, 0x7f, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x81, 0x81, 0x82, 0x83, 0x85, - 0x86, 0x87, 0x87, 0x89, 0x8a, 0x8b, 0x8b, 0x8d, 0x8d, 0x8d, 0x8e, - 0x8d, 0x8d, 0x8c, 0x8c, 0x8b, 0x8a, 0x89, 0x88, 0x87, 0x86, 0x85, - 0x85, 0x83, 0x82, 0x81, 0x80, 0x80, 0x7f, 0x7f, 0x7e, 0x7e, 0x7e, - 0x7e, 0x7d, 0x7d, 0x7d, 0x7d, 0x7e, 0x7e, 0x7d, 0x7d, 0x7e, 0x7d, - 0x7d, 0x7d, 0x7c, 0x7c, 0x7c, 0x7c, 0x7b, 0x7b, 0x7b, 0x7a, 0x7a, - 0x79, 0x78, 0x78, 0x78, 0x77, 0x77, 0x76, 0x76, 0x76, 0x76, 0x76, - 0x76, 0x77, 0x77, 0x78, 0x78, 0x79, 0x7a, 0x7b, 0x7b, 0x7c, 0x7d, - 0x7d, 0x7d, 0x7e, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, - 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, - 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, - 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, - 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, - }, - }, - "ru": [][]byte{ - { // 0 - 0x7f, 0x7f, 0x7e, 0x7f, 0x7f, 0x7e, 0x7f, 0x7e, 0x7f, 0x7f, 0x7e, - 0x7f, 0x7e, 0x7f, 0x7d, 0x7e, 0x7d, 0x7e, 0x7e, 0x7e, 0x7d, 0x7e, - 0x7e, 0x7d, 0x7f, 0x7e, 0x7f, 0x7e, 0x80, 0x80, 0x80, 0x81, 0x80, - 0x82, 0x81, 0x82, 0x82, 0x83, 0x82, 0x83, 0x83, 0x82, 0x83, 0x81, - 0x82, 0x81, 0x80, 0x80, 0x7f, 0x7f, 0x7e, 0x7e, 0x7d, 0x7e, 0x7c, - 0x7d, 0x7d, 0x7e, 0x7d, 0x7e, 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7e, 0x7f, 0x7e, 0x7e, 0x7d, - 0x7c, 0x7b, 0x7b, 0x7a, 0x7a, 0x79, 0x7b, 0x7b, 0x7d, 0x7e, 0x7f, - 0x81, 0x82, 0x84, 0x85, 0x85, 0x87, 0x87, 0x86, 0x87, 0x86, 0x84, - 0x84, 0x83, 0x81, 0x81, 0x7f, 0x7f, 0x7e, 0x7e, 0x7d, 0x7d, 0x7c, - 0x7d, 0x7d, 0x7c, 0x7d, 0x7d, 0x7e, 0x7d, 0x7f, 0x7e, 0x7f, 0x7f, - 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x7f, - 0x7e, 0x7f, 0x7d, 0x7d, 0x7b, 0x7b, 0x7a, 0x78, 0x79, 0x79, 0x79, - 0x7a, 0x7b, 0x7d, 0x7f, 0x81, 0x84, 0x85, 0x86, 0x87, 0x87, 0x89, - 0x89, 0x88, 0x88, 0x85, 0x85, 0x83, 0x82, 0x81, 0x80, 0x7f, 0x7e, - 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7c, 0x7d, 0x7d, 0x7e, 0x7d, - 0x7f, 0x7e, 0x7f, 0x7e, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x80, - 0x7f, 0x80, 0x7e, 0x7f, 0x7e, 0x7f, 0x7e, 0x7e, 0x7c, 0x7c, 0x7b, - 0x7a, 0x79, 0x78, 0x79, 0x79, 0x79, 0x7b, 0x7b, 0x7e, 0x7f, 0x83, - 0x84, 0x86, 0x86, 0x88, 0x88, 0x89, 0x89, 0x88, 0x87, 0x86, 0x84, - 0x82, 0x82, 0x80, 0x7f, 0x7d, 0x7d, 0x7d, 0x7c, 0x7c, 0x7d, 0x7c, - 0x7d, 0x7d, 0x7d, 0x7e, 0x7e, 0x7e, 0x7f, 0x7e, 0x7f, 0x7f, 0x80, - 0x81, 0x80, 0x81, 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x7e, 0x7f, 0x7e, - 0x7e, 0x7e, 0x7e, 0x7d, 0x7b, 0x7a, 0x78, 0x79, 0x77, 0x78, 0x78, - 0x7a, 0x79, 0x7c, 0x7d, 0x81, 0x82, 0x8a, 0x8a, 0x8c, 0x8c, 0x8e, - 0x8d, 0x8b, 0x8a, 0x86, 0x85, 0x81, 0x81, 0x7f, 0x7d, 0x7b, 0x79, - 0x79, 0x78, 0x7a, 0x79, 0x7b, 0x7a, 0x7c, 0x7c, 0x7e, 0x7e, 0x7f, - 0x80, 0x7f, 0x81, 0x81, 0x82, 0x82, 0x82, 0x81, 0x81, 0x80, 0x80, - 0x7f, 0x7f, 0x7e, 0x7e, 0x7c, 0x7d, 0x7c, 0x7d, 0x7c, 0x7d, 0x7a, - 0x78, 0x76, 0x77, 0x76, 0x74, 0x76, 0x77, 0x77, 0x78, 0x7d, 0x81, - 0x84, 0x87, 0x89, 0x8b, 0x8a, 0x8d, 0x8f, 0x8f, 0x8d, 0x8b, 0x88, - 0x86, 0x82, 0x81, 0x80, 0x7d, 0x7b, 0x79, 0x7a, 0x78, 0x78, 0x7a, - 0x79, 0x7a, 0x79, 0x7c, 0x7c, 0x7d, 0x7f, 0x7f, 0x80, 0x80, 0x82, - 0x81, 0x83, 0x83, 0x82, 0x82, 0x80, 0x81, 0x80, 0x7f, 0x7f, 0x7d, - 0x7d, 0x7c, 0x7d, 0x7d, 0x7c, 0x7d, 0x7b, 0x78, 0x75, 0x77, 0x75, - 0x74, 0x74, 0x77, 0x77, 0x76, 0x7a, 0x7e, 0x82, 0x84, 0x89, 0x8a, - 0x8b, 0x8c, 0x8f, 0x8f, 0x8f, 0x8d, 0x8a, 0x88, 0x84, 0x83, 0x80, - 0x7f, 0x7c, 0x79, 0x79, 0x77, 0x78, 0x79, 0x79, 0x79, 0x78, 0x7a, - 0x7b, 0x7d, 0x7d, 0x80, 0x81, 0x80, 0x82, 0x82, 0x83, 0x84, 0x84, - 0x83, 0x83, 0x82, 0x82, 0x81, 0x80, 0x7f, 0x7e, 0x7d, 0x7c, 0x7c, - 0x7d, 0x7c, 0x7c, 0x7a, 0x76, 0x75, 0x76, 0x75, 0x72, 0x75, 0x76, - 0x76, 0x76, 0x7c, 0x80, 0x83, 0x85, 0x8a, 0x8a, 0x8c, 0x8e, 0x90, - 0x90, 0x8e, 0x8d, 0x89, 0x87, 0x83, 0x82, 0x80, 0x7e, 0x7b, 0x7a, - 0x78, 0x78, 0x78, 0x78, 0x7a, 0x78, 0x7a, 0x7a, 0x7b, 0x7d, 0x7e, - 0x81, 0x80, 0x81, 0x81, 0x83, 0x83, 0x85, 0x84, 0x84, 0x82, 0x82, - 0x82, 0x80, 0x80, 0x7f, 0x7f, 0x7d, 0x7c, 0x7d, 0x7c, 0x7d, 0x7a, - 0x76, 0x73, 0x75, 0x74, 0x71, 0x74, 0x76, 0x74, 0x75, 0x7a, 0x7f, - 0x81, 0x86, 0x89, 0x8b, 0x8c, 0x8e, 0x91, 0x90, 0x90, 0x8e, 0x8c, - 0x89, 0x84, 0x84, 0x81, 0x7f, 0x7d, 0x7a, 0x79, 0x76, 0x77, 0x78, - 0x79, 0x78, 0x79, 0x7a, 0x7a, 0x7c, 0x7d, 0x80, 0x80, 0x80, 0x82, - 0x82, 0x84, 0x84, 0x85, 0x83, 0x83, 0x82, 0x83, 0x82, 0x80, 0x80, - 0x7e, 0x7d, 0x7d, 0x7c, 0x7c, 0x7a, 0x76, 0x72, 0x74, 0x72, 0x6f, - 0x72, 0x74, 0x73, 0x72, 0x79, 0x7e, 0x80, 0x85, 0x89, 0x8c, 0x8b, - 0x8e, 0x92, 0x91, 0x92, 0x91, 0x8e, 0x8a, 0x87, 0x84, 0x84, 0x81, - 0x7c, 0x7c, 0x79, 0x75, 0x76, 0x78, 0x77, 0x77, 0x77, 0x79, 0x78, - 0x7a, 0x7c, 0x7f, 0x7e, 0x80, 0x81, 0x83, 0x83, 0x86, 0x85, 0x86, - 0x84, 0x85, 0x83, 0x83, 0x81, 0x82, 0x81, 0x7e, 0x7e, 0x7c, 0x7b, - 0x76, 0x73, 0x74, 0x72, 0x6d, 0x6e, 0x72, 0x70, 0x70, 0x74, 0x7b, - 0x7e, 0x83, 0x89, 0x8b, 0x8c, 0x8e, 0x93, 0x92, 0x93, 0x93, 0x92, - 0x8d, 0x89, 0x86, 0x85, 0x80, 0x7e, 0x7d, 0x79, 0x76, 0x75, 0x76, - 0x77, 0x74, 0x77, 0x78, 0x76, 0x78, 0x7a, 0x7e, 0x7e, 0x7f, 0x83, - 0x82, 0x83, 0x84, 0x87, 0x86, 0x86, 0x85, 0x85, 0x83, 0x83, 0x82, - 0x82, 0x7f, 0x7e, 0x7b, 0x75, 0x72, 0x72, 0x70, 0x6a, 0x6d, 0x6e, - 0x6c, 0x6d, 0x74, 0x78, 0x7c, 0x82, 0x87, 0x8b, 0x8b, 0x91, 0x94, - 0x94, 0x94, 0x95, 0x92, 0x8f, 0x8a, 0x89, 0x86, 0x83, 0x7f, 0x7d, - 0x7a, 0x75, 0x74, 0x75, 0x75, 0x73, 0x76, 0x77, 0x74, 0x76, 0x79, - 0x7d, 0x7d, 0x81, 0x83, 0x83, 0x85, 0x87, 0x88, 0x88, 0x87, 0x88, - 0x86, 0x86, 0x85, 0x82, 0x7f, 0x7a, 0x75, 0x6d, 0x6c, 0x6e, 0x6d, - 0x6c, 0x6e, 0x70, 0x69, 0x69, 0x71, 0x7a, 0x80, 0x8c, 0x92, 0x8e, - 0x8e, 0x92, 0x99, 0x9a, 0x9c, 0x9a, 0x90, 0x85, 0x7e, 0x7e, 0x7c, - 0x7a, 0x78, 0x71, 0x6a, 0x6a, 0x72, 0x79, 0x7d, 0x7f, 0x7e, 0x7d, - 0x80, 0x88, 0x8e, 0x8c, 0x8b, 0x88, 0x85, 0x84, 0x88, 0x86, 0x80, - 0x7c, 0x7b, 0x7d, 0x7e, 0x80, 0x7d, 0x7a, 0x75, 0x5c, 0x42, 0x4b, - 0x5b, 0x66, 0x78, 0x81, 0x85, 0x84, 0x92, 0xac, 0xb0, 0xa5, 0x9f, - 0x8b, 0x77, 0x78, 0x7e, 0x7e, 0x75, 0x71, 0x78, 0x79, 0x7f, 0x8f, - 0x8e, 0x86, 0x81, 0x80, 0x7e, 0x7b, 0x7f, 0x7d, 0x78, 0x79, 0x81, - 0x86, 0x88, 0x88, 0x86, 0x7f, 0x7f, 0x80, 0x81, 0x7e, 0x7e, 0x7d, - 0x7f, 0x81, 0x83, 0x86, 0x84, 0x85, 0x88, 0x86, 0x84, 0x7e, 0x76, - 0x57, 0x34, 0x3c, 0x4f, 0x5c, 0x78, 0x88, 0x88, 0x8a, 0x96, 0xaf, - 0xb4, 0xac, 0xa1, 0x86, 0x6e, 0x6e, 0x78, 0x7a, 0x7c, 0x7a, 0x7b, - 0x7d, 0x82, 0x91, 0x8f, 0x86, 0x7e, 0x74, 0x6f, 0x6f, 0x79, 0x7e, - 0x7d, 0x83, 0x88, 0x8a, 0x8e, 0x8d, 0x89, 0x7f, 0x7b, 0x7c, 0x7e, - 0x7f, 0x82, 0x81, 0x81, 0x81, 0x85, 0x89, 0x8a, 0x8b, 0x85, 0x7e, - 0x77, 0x70, 0x3b, 0x50, 0x66, 0x8f, 0x97, 0x97, 0x8f, 0x8b, 0xad, - 0xa9, 0x9d, 0x96, 0x71, 0x5c, 0x5c, 0x6b, 0x88, 0x89, 0x8b, 0x93, - 0x85, 0x87, 0x92, 0x91, 0x89, 0x75, 0x68, 0x63, 0x62, 0x6e, 0x86, - 0x88, 0x84, 0x86, 0x86, 0x8c, 0x8b, 0x8d, 0x87, 0x79, 0x77, 0x7d, - 0x81, 0x85, 0x85, 0x89, 0x87, 0x88, 0x8c, 0x8e, 0x89, 0x84, 0x7f, - 0x7c, 0x77, 0x58, 0x2b, 0x3a, 0x57, 0x6a, 0x8f, 0x95, 0x98, 0x92, - 0x8a, 0xab, 0xaf, 0x95, 0x89, 0x69, 0x5d, 0x61, 0x71, 0x8e, 0x8a, - 0x82, 0x8d, 0x8d, 0x92, 0x97, 0x91, 0x80, 0x6a, 0x5f, 0x6b, 0x71, - 0x73, 0x82, 0x84, 0x87, 0x87, 0x8b, 0x92, 0x84, 0x78, 0x79, 0x76, - 0x7e, 0x7f, 0x81, 0x80, 0x7b, 0x87, 0x90, 0x8f, 0x91, 0x8c, 0x85, - 0x82, 0x82, 0x85, 0x82, 0x7b, 0x79, 0x6a, 0x38, 0x34, 0x64, 0x74, - 0x82, 0x8a, 0x83, 0x92, 0x89, 0xa0, 0xbb, 0x92, 0x7a, 0x6d, 0x69, - 0x7a, 0x77, 0x80, 0x84, 0x70, 0x81, 0x9c, 0xa2, 0x9a, 0x83, 0x77, - 0x78, 0x6e, 0x76, 0x7e, 0x6b, 0x69, 0x76, 0x8c, 0x99, 0x8f, 0x8a, - 0x7f, 0x6f, 0x7d, 0x7e, 0x76, 0x71, 0x71, 0x84, 0x88, 0x8a, 0x8c, - 0x81, 0x7c, 0x86, 0x8d, 0x92, 0x88, 0x81, 0x7f, 0x80, 0x89, 0x8c, - 0x85, 0x7f, 0x76, 0x5d, 0x30, 0x47, 0x71, 0x6d, 0x75, 0x72, 0x82, - 0x9d, 0x98, 0xb3, 0xab, 0x7d, 0x7b, 0x7c, 0x84, 0x7f, 0x62, 0x6d, - 0x77, 0x7a, 0x9b, 0x9e, 0x92, 0x85, 0x80, 0x94, 0x90, 0x77, 0x6d, - 0x65, 0x65, 0x77, 0x82, 0x83, 0x7c, 0x79, 0x8d, 0x98, 0x8a, 0x7b, - 0x70, 0x71, 0x78, 0x79, 0x79, 0x71, 0x76, 0x8a, 0x8f, 0x8d, 0x8a, - 0x8a, 0x8f, 0x8f, 0x8d, 0x8d, 0x82, 0x81, 0x7f, 0x7e, 0x7d, 0x7c, - 0x7d, 0x7f, 0x78, 0x76, 0x56, 0x2d, 0x63, 0x7d, 0x66, 0x6e, 0x69, - 0x88, 0xa5, 0x99, 0xb5, 0x9c, 0x7e, 0x9f, 0x98, 0x8a, 0x72, 0x59, - 0x74, 0x74, 0x72, 0x83, 0x76, 0x79, 0x93, 0x9e, 0x9e, 0x85, 0x7d, - 0x88, 0x83, 0x74, 0x73, 0x69, 0x61, 0x72, 0x7c, 0x7f, 0x7d, 0x7d, - 0x91, 0x94, 0x8a, 0x88, 0x81, 0x7e, 0x81, 0x78, 0x72, 0x70, 0x75, - 0x7e, 0x79, 0x7b, 0x85, 0x8b, 0x8c, 0x8d, 0x89, 0x89, 0x8a, 0x8b, - 0x85, 0x83, 0x81, 0x80, 0x7d, 0x7d, 0x7f, 0x7a, 0x7a, 0x62, 0x41, - 0x6d, 0x80, 0x4d, 0x63, 0x79, 0x70, 0x8a, 0x9e, 0x8f, 0x8a, 0x9b, - 0xa9, 0xa2, 0x8c, 0x86, 0x88, 0x81, 0x7a, 0x7e, 0x6c, 0x62, 0x78, - 0x80, 0x71, 0x7a, 0x86, 0x86, 0x88, 0x8e, 0x89, 0x88, 0x8e, 0x8d, - 0x81, 0x79, 0x79, 0x81, 0x7a, 0x74, 0x74, 0x71, 0x73, 0x7a, 0x76, - 0x70, 0x77, 0x81, 0x81, 0x84, 0x83, 0x85, 0x8d, 0x8d, 0x89, 0x89, - 0x87, 0x87, 0x83, 0x7c, 0x7c, 0x82, 0x83, 0x82, 0x82, 0x82, 0x86, - 0x89, 0x84, 0x86, 0x85, 0x84, 0x7d, 0x7b, 0x76, 0x50, 0x5f, 0x7d, - 0x56, 0x55, 0x6f, 0x66, 0x6e, 0x89, 0x88, 0x76, 0x9e, 0xb0, 0x8f, - 0x9d, 0xa5, 0x94, 0x99, 0x97, 0x86, 0x76, 0x82, 0x83, 0x69, 0x6b, - 0x72, 0x6e, 0x73, 0x77, 0x70, 0x6f, 0x81, 0x8f, 0x7f, 0x85, 0x91, - 0x8c, 0x91, 0x8f, 0x81, 0x7f, 0x86, 0x7f, 0x71, 0x75, 0x77, 0x70, - 0x74, 0x72, 0x6a, 0x73, 0x7f, 0x7b, 0x7a, 0x87, 0x8a, 0x85, 0x8d, - 0x8e, 0x8d, 0x95, 0x8e, 0x83, 0x86, 0x86, 0x7f, 0x7d, 0x7c, 0x76, - 0x7b, 0x7c, 0x78, 0x7f, 0x84, 0x81, 0x83, 0x83, 0x82, 0x81, 0x7e, - 0x62, 0x6b, 0x7e, 0x61, 0x5e, 0x69, 0x63, 0x70, 0x7d, 0x79, 0x75, - 0x91, 0x9d, 0x89, 0x9b, 0xa1, 0x98, 0xa2, 0x98, 0x8a, 0x8b, 0x91, - 0x88, 0x74, 0x75, 0x75, 0x6b, 0x73, 0x6b, 0x67, 0x75, 0x78, 0x76, - 0x77, 0x81, 0x87, 0x87, 0x8e, 0x86, 0x87, 0x91, 0x8a, 0x80, 0x83, - 0x83, 0x82, 0x7b, 0x7a, 0x76, 0x77, 0x75, 0x72, 0x71, 0x74, 0x76, - 0x77, 0x78, 0x80, 0x83, 0x87, 0x89, 0x8b, 0x8d, 0x8f, 0x8b, 0x8a, - 0x89, 0x85, 0x7e, 0x7e, 0x7d, 0x7d, 0x7b, 0x7a, 0x7f, 0x7f, 0x7d, - 0x80, 0x82, 0x81, 0x82, 0x7d, 0x7d, 0x7c, 0x69, 0x71, 0x7b, 0x63, - 0x69, 0x6b, 0x68, 0x73, 0x75, 0x79, 0x75, 0x8d, 0x93, 0x84, 0x98, - 0x9b, 0x94, 0xa1, 0x94, 0x91, 0x97, 0x8f, 0x88, 0x7f, 0x85, 0x7b, - 0x73, 0x76, 0x6a, 0x6d, 0x74, 0x69, 0x6d, 0x74, 0x7b, 0x7c, 0x7e, - 0x84, 0x84, 0x89, 0x8a, 0x80, 0x88, 0x86, 0x84, 0x82, 0x82, 0x83, - 0x82, 0x7e, 0x7c, 0x7b, 0x7a, 0x75, 0x73, 0x75, 0x76, 0x78, 0x76, - 0x79, 0x82, 0x83, 0x84, 0x89, 0x8d, 0x8e, 0x8c, 0x8b, 0x88, 0x87, - 0x85, 0x80, 0x80, 0x7f, 0x7c, 0x7a, 0x7a, 0x79, 0x7c, 0x7e, 0x7c, - 0x7e, 0x7f, 0x81, 0x7c, 0x82, 0x73, 0x6c, 0x80, 0x70, 0x6c, 0x71, - 0x6e, 0x77, 0x71, 0x78, 0x72, 0x7f, 0x89, 0x7b, 0x8b, 0x91, 0x90, - 0x96, 0x95, 0x94, 0x97, 0x94, 0x8e, 0x87, 0x89, 0x81, 0x7b, 0x79, - 0x72, 0x73, 0x72, 0x6d, 0x71, 0x75, 0x77, 0x75, 0x7b, 0x7d, 0x7f, - 0x82, 0x83, 0x82, 0x86, 0x84, 0x83, 0x82, 0x83, 0x83, 0x82, 0x81, - 0x7e, 0x7f, 0x7a, 0x75, 0x7a, 0x78, 0x77, 0x76, 0x79, 0x7c, 0x7e, - 0x7e, 0x84, 0x88, 0x88, 0x88, 0x89, 0x89, 0x87, 0x86, 0x82, 0x81, - 0x80, 0x7e, 0x7b, 0x7d, 0x7b, 0x7b, 0x7b, 0x7c, 0x7b, 0x7d, 0x7d, - 0x7d, 0x80, 0x7f, 0x81, 0x82, 0x88, 0x73, 0x79, 0x83, 0x6f, 0x73, - 0x6a, 0x70, 0x72, 0x6c, 0x74, 0x6d, 0x84, 0x7e, 0x7e, 0x8d, 0x8e, - 0x94, 0x90, 0x93, 0x91, 0x92, 0x8f, 0x87, 0x8a, 0x88, 0x85, 0x82, - 0x81, 0x80, 0x7c, 0x79, 0x75, 0x77, 0x76, 0x71, 0x72, 0x74, 0x77, - 0x79, 0x7b, 0x7e, 0x81, 0x83, 0x80, 0x84, 0x84, 0x82, 0x82, 0x80, - 0x81, 0x7d, 0x7f, 0x7c, 0x7b, 0x7c, 0x7c, 0x7b, 0x7c, 0x7c, 0x7b, - 0x7d, 0x7e, 0x80, 0x82, 0x82, 0x84, 0x85, 0x85, 0x86, 0x83, 0x84, - 0x82, 0x84, 0x80, 0x80, 0x7e, 0x7f, 0x7e, 0x7d, 0x7c, 0x7c, 0x7c, - 0x7d, 0x7b, 0x7d, 0x7d, 0x7e, 0x81, 0x7e, 0x7f, 0x7e, 0x7e, 0x7e, - 0x71, 0x7d, 0x78, 0x74, 0x76, 0x73, 0x7d, 0x74, 0x7b, 0x78, 0x7e, - 0x85, 0x7e, 0x84, 0x86, 0x8c, 0x88, 0x8c, 0x8f, 0x8e, 0x8f, 0x89, - 0x8a, 0x87, 0x85, 0x81, 0x7e, 0x7e, 0x7b, 0x78, 0x77, 0x78, 0x79, - 0x77, 0x78, 0x79, 0x7d, 0x7a, 0x7d, 0x7d, 0x7f, 0x7f, 0x7f, 0x81, - 0x83, 0x83, 0x84, 0x84, 0x84, 0x84, 0x81, 0x7d, 0x7d, 0x7c, 0x7d, - 0x79, 0x7a, 0x7a, 0x7a, 0x7a, 0x7b, 0x7e, 0x7d, 0x80, 0x80, 0x81, - 0x81, 0x84, 0x84, 0x82, 0x84, 0x81, 0x82, 0x83, 0x82, 0x83, 0x81, - 0x81, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x7b, 0x7e, 0x7d, 0x7e, 0x7d, - 0x7c, 0x7e, 0x7a, 0x7d, 0x7d, 0x7e, 0x7f, 0x7e, 0x80, 0x81, 0x82, - 0x83, 0x7f, 0x80, 0x80, 0x7d, 0x7e, 0x79, 0x7c, 0x79, 0x7a, 0x79, - 0x7c, 0x7e, 0x80, 0x82, 0x83, 0x84, 0x85, 0x85, 0x86, 0x85, 0x85, - 0x82, 0x83, 0x83, 0x82, 0x81, 0x80, 0x7f, 0x7f, 0x7e, 0x7e, 0x7f, - 0x80, 0x7d, 0x7e, 0x7d, 0x81, 0x80, 0x80, 0x80, 0x7e, 0x80, 0x7d, - 0x7e, 0x7d, 0x7d, 0x7d, 0x7b, 0x7b, 0x7d, 0x7e, 0x7e, 0x7f, 0x7e, - 0x7f, 0x7f, 0x81, 0x83, 0x81, 0x82, 0x81, 0x80, 0x7f, 0x7f, 0x7f, - 0x7d, 0x7e, 0x7e, 0x7e, 0x7f, 0x80, 0x7e, 0x80, 0x80, 0x81, 0x80, - 0x81, 0x82, 0x7e, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7e, 0x7f, - 0x7f, 0x7d, 0x7d, 0x7f, 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x7e, 0x80, - 0x7f, 0x80, 0x7f, 0x7e, 0x7d, 0x7d, 0x7e, 0x7e, 0x7f, 0x7f, 0x7f, - 0x7e, 0x80, 0x80, 0x82, 0x82, 0x82, 0x81, 0x81, 0x81, 0x80, 0x80, - 0x80, 0x7f, 0x7e, 0x7e, 0x7c, 0x7f, 0x7f, 0x81, 0x81, 0x80, 0x7f, - 0x82, 0x82, 0x80, 0x7d, 0x7e, 0x7f, 0x7e, 0x7e, 0x7f, 0x7e, 0x7f, - 0x7e, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7e, - 0x7f, 0x7d, 0x80, 0x7d, 0x7f, 0x7e, 0x7f, 0x80, 0x7e, 0x80, 0x82, - 0x81, 0x80, 0x80, 0x7e, 0x80, 0x7f, 0x80, 0x81, 0x7f, 0x7e, 0x7f, - 0x7f, 0x81, 0x7f, 0x7f, 0x7c, 0x7e, 0x7d, 0x7b, 0x7e, 0x7c, 0x7e, - 0x7e, 0x7f, 0x81, 0x81, 0x81, 0x80, 0x80, 0x80, 0x7d, 0x7e, 0x7d, - 0x7e, 0x7f, 0x7e, 0x80, 0x81, 0x81, 0x81, 0x83, 0x80, 0x81, 0x80, - 0x7f, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7f, 0x7e, 0x7e, 0x7f, 0x7e, - 0x7f, 0x7e, 0x7f, 0x7e, 0x7f, 0x7e, 0x80, 0x7f, 0x7f, 0x81, 0x7f, - 0x81, 0x80, 0x81, 0x80, 0x81, 0x80, 0x7f, 0x7f, 0x7f, 0x7e, 0x7f, - 0x7d, 0x7f, 0x80, 0x80, 0x7e, 0x80, 0x7f, 0x7f, 0x7f, 0x80, 0x80, - 0x7f, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x80, 0x7f, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x7e, 0x7f, 0x7e, 0x7f, 0x7e, 0x80, 0x80, - 0x80, 0x7f, 0x7e, 0x7f, 0x7e, 0x7e, 0x7e, 0x7e, 0x7f, 0x7d, 0x7e, - 0x7e, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x81, 0x7f, 0x80, 0x80, 0x80, - 0x7f, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, - 0x7f, 0x7f, 0x7e, 0x7f, 0x7e, 0x7f, 0x7e, 0x7f, 0x7f, 0x7f, 0x80, - 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, - 0x7e, 0x7e, 0x7f, 0x7e, 0x7f, 0x7f, - }, - { // 1 - 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7e, 0x7e, 0x7d, 0x7d, - 0x7d, 0x7d, 0x7f, 0x80, 0x80, 0x81, 0x81, 0x82, 0x82, 0x82, 0x80, - 0x80, 0x81, 0x81, 0x81, 0x80, 0x80, 0x80, 0x81, 0x81, 0x80, 0x80, - 0x80, 0x81, 0x81, 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x80, 0x81, 0x81, 0x80, 0x7f, 0x7e, - 0x7f, 0x80, 0x81, 0x82, 0x82, 0x81, 0x80, 0x7f, 0x7e, 0x79, 0x50, - 0x36, 0x71, 0x90, 0x8d, 0xa6, 0x8b, 0x7b, 0x99, 0x8f, 0x7c, 0x6b, - 0x65, 0x78, 0x88, 0x9b, 0x97, 0x85, 0x8c, 0x8f, 0x86, 0x7f, 0x6f, - 0x66, 0x74, 0x84, 0x8a, 0x8b, 0x86, 0x83, 0x83, 0x81, 0x7e, 0x72, - 0x6f, 0x79, 0x7d, 0x84, 0x87, 0x7f, 0x80, 0x81, 0x7e, 0x7b, 0x77, - 0x7b, 0x81, 0x85, 0x85, 0x7e, 0x7c, 0x7d, 0x7f, 0x83, 0x84, 0x86, - 0x87, 0x85, 0x82, 0x7c, 0x7a, 0x7c, 0x7e, 0x83, 0x87, 0x88, 0x87, - 0x82, 0x7e, 0x7d, 0x7d, 0x7f, 0x80, 0x7f, 0x7f, 0x75, 0x4d, 0x41, - 0x7c, 0x8a, 0x85, 0xa3, 0x81, 0x7e, 0xa2, 0x89, 0x78, 0x6f, 0x6a, - 0x7a, 0x87, 0x95, 0x8b, 0x83, 0x94, 0x90, 0x86, 0x81, 0x6d, 0x69, - 0x7c, 0x81, 0x82, 0x88, 0x84, 0x88, 0x89, 0x84, 0x7e, 0x73, 0x74, - 0x78, 0x78, 0x81, 0x81, 0x81, 0x85, 0x80, 0x7e, 0x7d, 0x7c, 0x7d, - 0x80, 0x81, 0x80, 0x81, 0x80, 0x7e, 0x80, 0x82, 0x84, 0x87, 0x85, - 0x84, 0x81, 0x7e, 0x7c, 0x7d, 0x80, 0x84, 0x86, 0x85, 0x84, 0x83, - 0x81, 0x80, 0x81, 0x7f, 0x7c, 0x5e, 0x2b, 0x56, 0x93, 0x7b, 0x9f, - 0x9c, 0x6f, 0xa5, 0xa1, 0x78, 0x72, 0x61, 0x6e, 0x7f, 0x90, 0x90, - 0x7e, 0x94, 0x9e, 0x8d, 0x89, 0x76, 0x61, 0x74, 0x7f, 0x77, 0x82, - 0x83, 0x89, 0x93, 0x8a, 0x85, 0x76, 0x73, 0x77, 0x71, 0x79, 0x7d, - 0x7d, 0x87, 0x88, 0x82, 0x7f, 0x7f, 0x79, 0x78, 0x7e, 0x7f, 0x83, - 0x85, 0x80, 0x7f, 0x81, 0x82, 0x84, 0x87, 0x87, 0x86, 0x85, 0x7f, - 0x7b, 0x7c, 0x7d, 0x82, 0x85, 0x86, 0x88, 0x86, 0x84, 0x81, 0x7d, - 0x7b, 0x6c, 0x30, 0x3d, 0x8c, 0x78, 0x8d, 0xaa, 0x74, 0x9f, 0xb2, - 0x81, 0x73, 0x63, 0x6d, 0x76, 0x81, 0x8b, 0x7a, 0x92, 0xab, 0x95, - 0x8b, 0x82, 0x67, 0x72, 0x7b, 0x6a, 0x75, 0x7e, 0x8b, 0x96, 0x8d, - 0x8d, 0x80, 0x7f, 0x7e, 0x6a, 0x6c, 0x72, 0x77, 0x84, 0x84, 0x82, - 0x87, 0x88, 0x80, 0x7e, 0x7d, 0x7a, 0x7f, 0x7f, 0x7d, 0x80, 0x81, - 0x83, 0x86, 0x87, 0x85, 0x86, 0x87, 0x81, 0x80, 0x7d, 0x7b, 0x7f, - 0x81, 0x84, 0x88, 0x88, 0x86, 0x85, 0x7f, 0x79, 0x4c, 0x23, 0x6e, - 0x81, 0x67, 0x9d, 0x86, 0x8d, 0xc3, 0x9c, 0x7e, 0x6f, 0x75, 0x7a, - 0x69, 0x76, 0x70, 0x7d, 0xab, 0xa0, 0x8b, 0x97, 0x88, 0x82, 0x80, - 0x63, 0x62, 0x6d, 0x7d, 0x85, 0x7c, 0x8f, 0x96, 0x95, 0x93, 0x76, - 0x6f, 0x73, 0x71, 0x6f, 0x67, 0x71, 0x85, 0x8c, 0x8d, 0x8a, 0x8a, - 0x8a, 0x84, 0x78, 0x71, 0x78, 0x7e, 0x7e, 0x81, 0x87, 0x8b, 0x8e, - 0x89, 0x82, 0x83, 0x83, 0x7e, 0x7b, 0x7e, 0x80, 0x84, 0x87, 0x84, - 0x86, 0x87, 0x7b, 0x3a, 0x34, 0x88, 0x60, 0x61, 0x91, 0x6f, 0xaa, - 0xc0, 0x92, 0x8a, 0x88, 0x98, 0x75, 0x5f, 0x6c, 0x60, 0x82, 0x95, - 0x76, 0x90, 0xa9, 0x9b, 0x99, 0x81, 0x78, 0x7c, 0x72, 0x6d, 0x59, - 0x6e, 0x88, 0x85, 0x90, 0x89, 0x8d, 0x99, 0x89, 0x7a, 0x69, 0x69, - 0x70, 0x6b, 0x6e, 0x7b, 0x8d, 0x91, 0x8d, 0x8b, 0x89, 0x89, 0x7f, - 0x76, 0x79, 0x80, 0x82, 0x7f, 0x83, 0x87, 0x88, 0x85, 0x82, 0x84, - 0x87, 0x85, 0x80, 0x84, 0x83, 0x83, 0x80, 0x81, 0x56, 0x28, 0x7b, - 0x6d, 0x3e, 0x83, 0x6b, 0x8b, 0xbc, 0x94, 0x98, 0xa6, 0xb3, 0x8f, - 0x6d, 0x7e, 0x66, 0x6c, 0x74, 0x52, 0x79, 0x9b, 0x89, 0x93, 0x93, - 0x9d, 0xa4, 0x8d, 0x7d, 0x70, 0x7b, 0x73, 0x5e, 0x6b, 0x6d, 0x7d, - 0x84, 0x74, 0x7f, 0x92, 0x8e, 0x83, 0x83, 0x84, 0x88, 0x84, 0x77, - 0x7d, 0x84, 0x7c, 0x76, 0x7c, 0x82, 0x82, 0x81, 0x82, 0x8b, 0x90, - 0x88, 0x83, 0x87, 0x87, 0x80, 0x7c, 0x7c, 0x81, 0x7f, 0x7b, 0x7d, - 0x8a, 0x71, 0x3d, 0x76, 0x76, 0x44, 0x78, 0x58, 0x6a, 0xa4, 0x77, - 0x88, 0xa5, 0xb0, 0xa8, 0x96, 0x9f, 0x8c, 0x96, 0x82, 0x56, 0x7a, - 0x75, 0x63, 0x73, 0x67, 0x7e, 0x92, 0x85, 0x85, 0x94, 0x9d, 0x8c, - 0x8c, 0x85, 0x7c, 0x87, 0x73, 0x69, 0x75, 0x6e, 0x69, 0x71, 0x73, - 0x7d, 0x87, 0x82, 0x89, 0x96, 0x90, 0x8d, 0x8f, 0x8b, 0x8a, 0x83, - 0x79, 0x7c, 0x7e, 0x75, 0x72, 0x78, 0x7e, 0x81, 0x7f, 0x82, 0x8b, - 0x8c, 0x8a, 0x84, 0x89, 0x80, 0x5d, 0x74, 0x75, 0x56, 0x6d, 0x5f, - 0x5e, 0x7b, 0x6e, 0x6f, 0x83, 0x8f, 0x8e, 0x93, 0x9a, 0x95, 0xa6, - 0x9e, 0x8e, 0x9a, 0x90, 0x8a, 0x86, 0x7c, 0x7c, 0x7e, 0x79, 0x72, - 0x79, 0x79, 0x74, 0x79, 0x77, 0x78, 0x7c, 0x77, 0x78, 0x80, 0x7f, - 0x7f, 0x82, 0x83, 0x86, 0x88, 0x85, 0x87, 0x8a, 0x87, 0x82, 0x81, - 0x80, 0x80, 0x7f, 0x79, 0x7a, 0x7e, 0x7b, 0x7b, 0x7b, 0x7b, 0x7e, - 0x7f, 0x7e, 0x7d, 0x7f, 0x81, 0x80, 0x80, 0x7e, 0x7f, 0x82, 0x7e, - 0x7d, 0x7d, 0x7c, 0x7d, 0x7a, 0x7a, 0x7c, 0x7c, 0x7c, 0x7b, 0x7c, - 0x7f, 0x81, 0x80, 0x7e, 0x82, 0x85, 0x83, 0x86, 0x85, 0x85, 0x89, - 0x88, 0x86, 0x87, 0x88, 0x88, 0x87, 0x86, 0x85, 0x85, 0x84, 0x81, - 0x7f, 0x7d, 0x7c, 0x7b, 0x79, 0x79, 0x7b, 0x7c, 0x7d, 0x7b, 0x7c, - 0x7e, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7e, 0x7e, 0x7f, - 0x80, 0x81, 0x7f, 0x80, 0x82, 0x82, 0x81, 0x7e, 0x7d, 0x7d, 0x7a, - 0x77, 0x76, 0x78, 0x79, 0x78, 0x7b, 0x7e, 0x80, 0x83, 0x81, 0x82, - 0x84, 0x83, 0x83, 0x83, 0x84, 0x86, 0x87, 0x87, 0x89, 0x8a, 0x88, - 0x88, 0x88, 0x86, 0x86, 0x83, 0x80, 0x80, 0x7f, 0x7e, 0x7d, 0x7c, - 0x7c, 0x7c, 0x7c, 0x7a, 0x7b, 0x7b, 0x7a, 0x7b, 0x7b, 0x7c, 0x7d, - 0x7d, 0x7e, 0x7f, 0x80, 0x80, 0x81, 0x82, 0x83, 0x84, 0x84, 0x83, - 0x83, 0x80, 0x7e, 0x7d, 0x7a, 0x78, 0x77, 0x77, 0x79, 0x79, 0x7b, - 0x7d, 0x7f, 0x81, 0x80, 0x81, 0x82, 0x81, 0x81, 0x80, 0x81, 0x82, - 0x82, 0x84, 0x87, 0x88, 0x8a, 0x89, 0x87, 0x87, 0x86, 0x84, 0x83, - 0x81, 0x7f, 0x80, 0x7f, 0x7c, 0x7d, 0x7c, 0x7c, 0x7c, 0x7a, 0x7b, - 0x7c, 0x7b, 0x7c, 0x7c, 0x7e, 0x7f, 0x7f, 0x80, 0x80, 0x81, 0x80, - 0x7f, 0x7f, 0x7e, 0x7e, 0x7f, 0x7e, 0x80, 0x82, 0x81, 0x81, 0x7f, - 0x7d, 0x7e, 0x7b, 0x7a, 0x7b, 0x7b, 0x7b, 0x7b, 0x7c, 0x7d, 0x7e, - 0x7f, 0x7e, 0x7f, 0x81, 0x83, 0x85, 0x85, 0x86, 0x87, 0x89, 0x87, - 0x86, 0x85, 0x84, 0x83, 0x82, 0x80, 0x7f, 0x81, 0x81, 0x81, 0x80, - 0x7f, 0x80, 0x80, 0x7e, 0x7d, 0x7c, 0x7b, 0x7a, 0x79, 0x79, 0x79, - 0x7c, 0x7c, 0x7c, 0x7e, 0x7f, 0x81, 0x81, 0x80, 0x81, 0x83, 0x82, - 0x81, 0x81, 0x81, 0x81, 0x82, 0x7f, 0x7e, 0x7e, 0x7c, 0x79, 0x78, - 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7f, 0x81, 0x80, 0x80, 0x82, 0x83, - 0x83, 0x82, 0x81, 0x83, 0x85, 0x85, 0x85, 0x85, 0x84, 0x86, 0x85, - 0x83, 0x83, 0x83, 0x82, 0x81, 0x7f, 0x7f, 0x7e, 0x7c, 0x7d, 0x7c, - 0x7b, 0x7c, 0x7b, 0x7b, 0x7c, 0x7d, 0x7d, 0x7e, 0x7f, 0x80, 0x81, - 0x81, 0x80, 0x7f, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7f, 0x80, - 0x81, 0x82, 0x81, 0x80, 0x7f, 0x7e, 0x7c, 0x7c, 0x7a, 0x7a, 0x7b, - 0x7c, 0x7c, 0x7c, 0x7c, 0x7e, 0x7f, 0x80, 0x7f, 0x80, 0x82, 0x84, - 0x85, 0x85, 0x85, 0x86, 0x86, 0x85, 0x84, 0x82, 0x82, 0x82, 0x7f, - 0x80, 0x80, 0x80, 0x81, 0x80, 0x80, 0x80, 0x7f, 0x7e, 0x7d, 0x7d, - 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7e, 0x7e, 0x7e, 0x7f, 0x7e, 0x7f, - 0x7f, 0x7f, 0x80, 0x80, 0x81, 0x80, 0x80, 0x81, 0x81, 0x80, 0x7e, - 0x7e, 0x7e, 0x7d, 0x7d, 0x7d, 0x7e, 0x7f, 0x7f, 0x7f, 0x7e, 0x7e, - 0x7f, 0x7e, 0x7d, 0x7c, 0x7d, 0x7e, 0x7e, 0x7e, 0x7e, 0x80, 0x81, - 0x80, 0x81, 0x82, 0x83, 0x84, 0x83, 0x83, 0x84, 0x85, 0x84, 0x83, - 0x83, 0x83, 0x82, 0x81, 0x7f, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, - 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7d, 0x7c, 0x7d, 0x7c, 0x7c, 0x7e, - 0x7e, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x81, 0x81, - 0x81, 0x82, 0x82, 0x80, 0x7f, 0x7f, 0x7f, 0x7d, 0x7d, 0x7c, 0x7c, - 0x7c, 0x7a, 0x7b, 0x7c, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x82, 0x81, - 0x82, 0x83, 0x83, 0x83, 0x82, 0x82, 0x81, 0x81, 0x81, 0x82, 0x82, - 0x82, 0x82, 0x82, 0x82, 0x81, 0x82, 0x82, 0x7f, 0x80, 0x80, 0x7f, - 0x7f, 0x7c, 0x7c, 0x7d, 0x7e, 0x7d, 0x7e, 0x7f, 0x7f, 0x7f, 0x7e, - 0x80, 0x7d, 0x7e, 0x7f, 0x7d, 0x80, 0x80, 0x80, 0x81, 0x81, 0x80, - 0x80, 0x80, 0x7f, 0x7f, 0x7d, 0x7d, 0x7f, 0x7d, 0x7c, 0x7e, 0x7c, - 0x7e, 0x7d, 0x7b, 0x7e, 0x7e, 0x7d, 0x7e, 0x7e, 0x80, 0x81, 0x80, - 0x80, 0x82, 0x82, 0x82, 0x82, 0x82, 0x83, 0x83, 0x81, 0x81, 0x81, - 0x82, 0x82, 0x82, 0x82, 0x80, 0x81, 0x80, 0x80, 0x7f, 0x80, 0x80, - 0x7f, 0x80, 0x7f, 0x7e, 0x7e, 0x7e, 0x7e, 0x7d, 0x7d, 0x7e, 0x7d, - 0x80, 0x7e, 0x7e, 0x81, 0x7d, 0x7f, 0x80, 0x7d, 0x7f, 0x7f, 0x7d, - 0x80, 0x7f, 0x80, 0x82, 0x7e, 0x7f, 0x83, 0x7e, 0x7e, 0x80, 0x79, - 0x7e, 0x7b, 0x76, 0x7d, 0x79, 0x7b, 0x7f, 0x7c, 0x83, 0x82, 0x80, - 0x85, 0x83, 0x84, 0x83, 0x81, 0x83, 0x83, 0x82, 0x81, 0x83, 0x82, - 0x82, 0x83, 0x7f, 0x84, 0x81, 0x7f, 0x82, 0x7f, 0x81, 0x7e, 0x7e, - 0x7f, 0x80, 0x7c, 0x7f, 0x7e, 0x7d, 0x80, 0x7d, 0x81, 0x80, 0x7e, - 0x80, 0x81, 0x7c, 0x83, 0x7b, 0x7e, 0x80, 0x7c, 0x7f, 0x7d, 0x81, - 0x7e, 0x85, 0x80, 0x7b, 0x83, 0x80, 0x76, 0x7f, 0x78, 0x77, 0x80, - 0x70, 0x7d, 0x7f, 0x78, 0x84, 0x7d, 0x7f, 0x89, 0x7f, 0x81, 0x85, - 0x82, 0x85, 0x81, 0x82, 0x86, 0x86, 0x83, 0x82, 0x87, 0x83, 0x82, - 0x80, 0x7f, 0x82, 0x80, 0x7b, 0x7e, 0x81, 0x7d, 0x7c, 0x7c, 0x7f, - 0x7c, 0x7c, 0x7f, 0x7f, 0x81, 0x82, 0x7f, 0x83, 0x83, 0x7e, 0x83, - 0x7f, 0x81, 0x7f, 0x7f, 0x81, 0x81, 0x7f, 0x81, 0x84, 0x80, 0x86, - 0x73, 0x7c, 0x84, 0x6f, 0x7b, 0x77, 0x70, 0x82, 0x72, 0x70, 0x86, - 0x75, 0x7f, 0x7e, 0x77, 0x89, 0x81, 0x7e, 0x87, 0x87, 0x8b, 0x89, - 0x86, 0x8d, 0x8b, 0x88, 0x84, 0x85, 0x85, 0x82, 0x7f, 0x7a, 0x83, - 0x7d, 0x7b, 0x7e, 0x7a, 0x7d, 0x79, 0x77, 0x7b, 0x7b, 0x79, 0x7c, - 0x7f, 0x81, 0x81, 0x82, 0x83, 0x87, 0x86, 0x81, 0x87, 0x85, 0x81, - 0x84, 0x82, 0x7f, 0x85, 0x7f, 0x7e, 0x81, 0x71, 0x7e, 0x7b, 0x6c, - 0x7d, 0x70, 0x73, 0x7d, 0x68, 0x78, 0x7b, 0x70, 0x81, 0x75, 0x7d, - 0x8a, 0x7d, 0x89, 0x8b, 0x8c, 0x93, 0x8d, 0x8f, 0x92, 0x8f, 0x8a, - 0x86, 0x87, 0x83, 0x80, 0x7c, 0x7b, 0x7e, 0x78, 0x77, 0x78, 0x78, - 0x78, 0x76, 0x76, 0x7a, 0x79, 0x7b, 0x7f, 0x7f, 0x85, 0x82, 0x84, - 0x88, 0x84, 0x87, 0x88, 0x89, 0x87, 0x8a, 0x85, 0x86, 0x87, 0x7e, - 0x85, 0x73, 0x76, 0x81, 0x67, 0x70, 0x72, 0x62, 0x76, 0x68, 0x63, - 0x7e, 0x6b, 0x76, 0x7e, 0x76, 0x8d, 0x85, 0x85, 0x93, 0x90, 0x96, - 0x93, 0x92, 0x98, 0x94, 0x92, 0x8d, 0x8d, 0x8d, 0x82, 0x83, 0x7c, - 0x7b, 0x7a, 0x6e, 0x72, 0x72, 0x6d, 0x6e, 0x6d, 0x71, 0x75, 0x75, - 0x7a, 0x83, 0x84, 0x8b, 0x8e, 0x8e, 0x94, 0x8d, 0x8c, 0x8e, 0x8b, - 0x87, 0x85, 0x83, 0x80, 0x81, 0x70, 0x71, 0x7f, 0x66, 0x6c, 0x71, - 0x5e, 0x75, 0x67, 0x5e, 0x7e, 0x6c, 0x74, 0x80, 0x76, 0x90, 0x8a, - 0x85, 0x97, 0x95, 0x99, 0x98, 0x94, 0x9c, 0x99, 0x95, 0x8e, 0x91, - 0x92, 0x83, 0x82, 0x7b, 0x7a, 0x76, 0x67, 0x6e, 0x6e, 0x6a, 0x6a, - 0x6b, 0x73, 0x76, 0x76, 0x7b, 0x89, 0x89, 0x8b, 0x90, 0x93, 0x96, - 0x8f, 0x90, 0x8f, 0x8d, 0x87, 0x84, 0x83, 0x81, 0x76, 0x6b, 0x7e, - 0x6c, 0x63, 0x71, 0x5c, 0x6d, 0x6c, 0x56, 0x71, 0x70, 0x6d, 0x7c, - 0x76, 0x87, 0x92, 0x87, 0x95, 0x9a, 0x9f, 0x9e, 0x9a, 0xa2, 0x9e, - 0x9d, 0x94, 0x8f, 0x96, 0x87, 0x7e, 0x7d, 0x7a, 0x74, 0x69, 0x69, - 0x6b, 0x6b, 0x66, 0x69, 0x72, 0x74, 0x76, 0x7b, 0x87, 0x8a, 0x8c, - 0x90, 0x95, 0x97, 0x93, 0x92, 0x92, 0x91, 0x8a, 0x86, 0x84, 0x83, - 0x75, 0x68, 0x7c, 0x69, 0x5e, 0x6f, 0x56, 0x67, 0x6a, 0x53, 0x6f, - 0x71, 0x6b, 0x7c, 0x7a, 0x8a, 0x95, 0x8f, 0x99, 0xa1, 0xa8, 0xa2, - 0x9e, 0xa8, 0x9e, 0x9d, 0x96, 0x8a, 0x92, 0x83, 0x74, 0x79, 0x70, - 0x67, 0x66, 0x61, 0x63, 0x68, 0x64, 0x6b, 0x78, 0x78, 0x7e, 0x8a, - 0x90, 0x95, 0x98, 0x98, 0x9d, 0x9c, 0x95, 0x95, 0x94, 0x8b, 0x85, - 0x82, 0x7b, 0x7b, 0x66, 0x5f, 0x72, 0x55, 0x54, 0x64, 0x50, 0x63, - 0x61, 0x59, 0x75, 0x75, 0x7a, 0x85, 0x8f, 0x9e, 0x9b, 0xa2, 0xa9, - 0xa9, 0xb3, 0xa2, 0xa1, 0xab, 0x96, 0x91, 0x8a, 0x7f, 0x81, 0x70, - 0x65, 0x67, 0x67, 0x5b, 0x58, 0x64, 0x65, 0x67, 0x6e, 0x78, 0x84, - 0x88, 0x8b, 0x95, 0x9f, 0x9c, 0x9e, 0xa2, 0xa0, 0x9b, 0x92, 0x90, - 0x8c, 0x85, 0x7d, 0x7b, 0x78, 0x73, 0x70, 0x55, 0x60, 0x6f, 0x48, - 0x53, 0x63, 0x51, 0x62, 0x61, 0x62, 0x7c, 0x81, 0x83, 0x8b, 0xa2, - 0xa9, 0x9c, 0xae, 0xb1, 0xab, 0xb2, 0x9f, 0x9e, 0xa3, 0x8d, 0x83, - 0x7e, 0x7b, 0x72, 0x64, 0x65, 0x62, 0x63, 0x5d, 0x5a, 0x69, 0x6e, - 0x6c, 0x74, 0x83, 0x88, 0x8a, 0x91, 0x98, 0x9f, 0x9d, 0x9b, 0x9e, - 0x9e, 0x94, 0x8e, 0x8f, 0x89, 0x81, 0x7e, 0x7c, 0x79, 0x75, 0x74, - 0x6b, 0x56, 0x67, 0x68, 0x44, 0x5a, 0x62, 0x51, 0x5f, 0x63, 0x6c, - 0x7a, 0x84, 0x8b, 0x91, 0xab, 0xab, 0x9e, 0xb4, 0xb4, 0xa9, 0xad, - 0xa1, 0x9c, 0x95, 0x88, 0x7f, 0x76, 0x7a, 0x6e, 0x61, 0x6a, 0x65, - 0x60, 0x64, 0x63, 0x67, 0x70, 0x71, 0x72, 0x80, 0x88, 0x87, 0x8e, - 0x98, 0x9a, 0x99, 0x9d, 0x9c, 0x9b, 0x99, 0x90, 0x8d, 0x8b, 0x84, - 0x7d, 0x7f, 0x7c, 0x77, 0x75, 0x75, 0x6f, 0x58, 0x60, 0x68, 0x4c, - 0x52, 0x5f, 0x56, 0x5b, 0x63, 0x6e, 0x76, 0x84, 0x93, 0x91, 0xa5, - 0xb2, 0xa5, 0xad, 0xb4, 0xaf, 0xaa, 0xa0, 0x9c, 0x91, 0x88, 0x83, - 0x74, 0x75, 0x72, 0x65, 0x65, 0x66, 0x67, 0x62, 0x63, 0x6a, 0x6a, - 0x6d, 0x71, 0x77, 0x80, 0x86, 0x89, 0x8f, 0x97, 0x99, 0x9a, 0x9b, - 0x9d, 0x9a, 0x96, 0x93, 0x8d, 0x89, 0x83, 0x7e, 0x7c, 0x7a, 0x76, - 0x73, 0x73, 0x73, 0x72, 0x61, 0x58, 0x65, 0x5d, 0x50, 0x59, 0x5f, - 0x61, 0x61, 0x6b, 0x79, 0x7f, 0x8e, 0x97, 0x9d, 0xaa, 0xac, 0xab, - 0xab, 0xad, 0xaf, 0xa0, 0x97, 0x93, 0x89, 0x82, 0x78, 0x72, 0x71, - 0x6b, 0x67, 0x63, 0x64, 0x6a, 0x69, 0x68, 0x6a, 0x6f, 0x72, 0x74, - 0x7a, 0x82, 0x87, 0x8b, 0x8e, 0x92, 0x97, 0x97, 0x97, 0x95, 0x94, - 0x92, 0x8c, 0x88, 0x85, 0x82, 0x7c, 0x77, 0x76, 0x74, 0x73, 0x73, - 0x73, 0x74, 0x75, 0x74, 0x6b, 0x66, 0x6b, 0x6b, 0x65, 0x62, 0x67, - 0x6d, 0x6b, 0x71, 0x7c, 0x81, 0x89, 0x94, 0x99, 0x99, 0x9c, 0xa1, - 0x9d, 0x9a, 0x9c, 0x96, 0x8e, 0x8a, 0x87, 0x82, 0x7d, 0x7d, 0x79, - 0x74, 0x74, 0x73, 0x72, 0x74, 0x75, 0x75, 0x76, 0x76, 0x77, 0x78, - 0x78, 0x79, 0x7b, 0x7e, 0x7f, 0x81, 0x84, 0x86, 0x88, 0x89, 0x89, - 0x88, 0x87, 0x88, 0x85, 0x83, 0x82, 0x81, 0x7f, 0x7f, 0x7e, 0x7f, - 0x80, 0x82, 0x82, 0x82, 0x83, 0x82, 0x81, 0x7a, 0x6f, 0x6c, 0x6f, - 0x68, 0x60, 0x65, 0x68, 0x64, 0x69, 0x72, 0x74, 0x77, 0x83, 0x8a, - 0x88, 0x8e, 0x95, 0x96, 0x99, 0x9c, 0x9b, 0x96, 0x95, 0x94, 0x90, - 0x8d, 0x8a, 0x86, 0x85, 0x81, 0x7d, 0x7c, 0x79, 0x73, 0x71, 0x71, - 0x6d, 0x6a, 0x6c, 0x6d, 0x6c, 0x6f, 0x72, 0x74, 0x77, 0x7c, 0x80, - 0x82, 0x85, 0x88, 0x8b, 0x8d, 0x8e, 0x8f, 0x8f, 0x8e, 0x8e, 0x8d, - 0x8b, 0x89, 0x87, 0x85, 0x82, 0x80, 0x7f, 0x7c, 0x7a, 0x79, 0x78, - 0x78, 0x75, 0x6f, 0x69, 0x6c, 0x6d, 0x64, 0x65, 0x6b, 0x68, 0x69, - 0x73, 0x78, 0x79, 0x82, 0x8a, 0x88, 0x8d, 0x94, 0x95, 0x96, 0x99, - 0x99, 0x98, 0x96, 0x93, 0x90, 0x8f, 0x8b, 0x86, 0x85, 0x81, 0x7c, - 0x7b, 0x7a, 0x76, 0x73, 0x74, 0x72, 0x6f, 0x71, 0x71, 0x70, 0x70, - 0x73, 0x73, 0x74, 0x78, 0x7b, 0x7d, 0x7f, 0x82, 0x84, 0x86, 0x88, - 0x89, 0x8a, 0x8a, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8a, 0x88, 0x87, - 0x87, 0x85, 0x83, 0x82, 0x81, 0x80, 0x7e, 0x7b, 0x78, 0x76, 0x70, - 0x66, 0x67, 0x68, 0x5f, 0x60, 0x66, 0x64, 0x65, 0x6f, 0x76, 0x78, - 0x82, 0x8b, 0x8c, 0x91, 0x98, 0x9a, 0x9c, 0x9d, 0x9c, 0x9c, 0x9a, - 0x95, 0x92, 0x90, 0x8a, 0x86, 0x84, 0x7f, 0x79, 0x76, 0x74, 0x70, - 0x6d, 0x6c, 0x6b, 0x6b, 0x6c, 0x6c, 0x6e, 0x70, 0x74, 0x77, 0x7a, - 0x7e, 0x83, 0x86, 0x87, 0x89, 0x8c, 0x8d, 0x8d, 0x8d, 0x8d, 0x8b, - 0x8a, 0x89, 0x86, 0x85, 0x83, 0x80, 0x7f, 0x7d, 0x7b, 0x7b, 0x7b, - 0x79, 0x7a, 0x7b, 0x7a, 0x7c, 0x7d, 0x7d, 0x7d, 0x7e, 0x7e, 0x7e, - 0x7c, 0x75, 0x75, 0x79, 0x72, 0x6f, 0x73, 0x73, 0x70, 0x75, 0x7a, - 0x7a, 0x7e, 0x84, 0x85, 0x87, 0x8b, 0x8d, 0x8f, 0x90, 0x8f, 0x90, - 0x90, 0x8c, 0x8b, 0x8c, 0x89, 0x85, 0x86, 0x84, 0x80, 0x7e, 0x7e, - 0x7c, 0x79, 0x78, 0x77, 0x75, 0x74, 0x75, 0x76, 0x74, 0x74, 0x78, - 0x78, 0x78, 0x7b, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x83, 0x84, 0x84, - 0x85, 0x85, 0x85, 0x87, 0x86, 0x86, 0x86, 0x86, 0x84, 0x84, 0x83, - 0x82, 0x81, 0x80, 0x7e, 0x7f, 0x7e, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, - 0x7e, 0x7e, 0x7c, 0x7b, 0x7b, 0x77, 0x70, 0x71, 0x73, 0x6f, 0x6d, - 0x72, 0x73, 0x74, 0x79, 0x7e, 0x81, 0x86, 0x8a, 0x8b, 0x8e, 0x8f, - 0x91, 0x92, 0x91, 0x8f, 0x8f, 0x8d, 0x89, 0x88, 0x87, 0x82, 0x80, - 0x7f, 0x7d, 0x7b, 0x79, 0x78, 0x77, 0x76, 0x75, 0x75, 0x76, 0x76, - 0x77, 0x78, 0x79, 0x7c, 0x7d, 0x7e, 0x81, 0x82, 0x83, 0x84, 0x85, - 0x84, 0x84, 0x84, 0x82, 0x81, 0x81, 0x80, 0x80, 0x7f, 0x7e, 0x7e, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x81, 0x80, 0x80, - 0x81, 0x81, 0x81, 0x81, 0x81, 0x82, 0x82, 0x82, 0x82, 0x82, 0x81, - 0x80, 0x7e, 0x7c, 0x77, 0x74, 0x74, 0x71, 0x6f, 0x70, 0x70, 0x71, - 0x74, 0x78, 0x7c, 0x7f, 0x84, 0x87, 0x8a, 0x8c, 0x8e, 0x90, 0x90, - 0x90, 0x8f, 0x8e, 0x8c, 0x8a, 0x89, 0x87, 0x84, 0x82, 0x7f, 0x7e, - 0x7b, 0x79, 0x78, 0x76, 0x74, 0x73, 0x73, 0x73, 0x75, 0x76, 0x76, - 0x79, 0x7c, 0x7c, 0x7f, 0x81, 0x83, 0x85, 0x85, 0x85, 0x87, 0x86, - 0x86, 0x86, 0x84, 0x83, 0x83, 0x81, 0x80, 0x7f, 0x7e, 0x7d, 0x7c, - 0x7d, 0x7d, 0x7c, 0x7d, 0x7e, 0x7f, 0x7f, 0x80, 0x81, 0x81, 0x82, - 0x83, 0x84, 0x84, 0x83, 0x82, 0x82, 0x81, 0x7e, 0x7c, 0x77, 0x73, - 0x74, 0x71, 0x6e, 0x6f, 0x70, 0x71, 0x75, 0x79, 0x7c, 0x80, 0x85, - 0x88, 0x8b, 0x8c, 0x8e, 0x90, 0x8f, 0x8f, 0x8e, 0x8c, 0x8a, 0x88, - 0x87, 0x84, 0x82, 0x80, 0x7e, 0x7d, 0x7a, 0x79, 0x79, 0x77, 0x76, - 0x76, 0x76, 0x76, 0x78, 0x79, 0x79, 0x7b, 0x7e, 0x7f, 0x80, 0x81, - 0x82, 0x84, 0x84, 0x84, 0x85, 0x84, 0x84, 0x84, 0x81, 0x81, 0x81, - 0x80, 0x7f, 0x7f, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, - 0x7f, 0x7f, 0x7f, 0x81, 0x82, 0x82, 0x82, 0x83, 0x84, 0x84, 0x83, - 0x83, 0x83, 0x82, 0x80, 0x7d, 0x7b, 0x79, 0x75, 0x73, 0x72, 0x70, - 0x6f, 0x6f, 0x71, 0x72, 0x75, 0x79, 0x7c, 0x81, 0x84, 0x87, 0x8a, - 0x8d, 0x8f, 0x91, 0x91, 0x91, 0x91, 0x90, 0x8e, 0x8c, 0x8a, 0x87, - 0x85, 0x82, 0x7f, 0x7c, 0x7a, 0x78, 0x77, 0x75, 0x75, 0x74, 0x74, - 0x74, 0x76, 0x77, 0x78, 0x7a, 0x7b, 0x7d, 0x80, 0x81, 0x83, 0x85, - 0x86, 0x86, 0x86, 0x86, 0x85, 0x85, 0x84, 0x83, 0x82, 0x81, 0x80, - 0x7f, 0x7e, 0x7d, 0x7e, 0x7d, 0x7e, 0x7e, 0x7e, 0x80, 0x80, 0x80, - 0x81, 0x81, 0x82, 0x82, 0x82, 0x81, 0x81, 0x81, 0x80, 0x7f, 0x7d, - 0x7b, 0x7b, 0x79, 0x75, 0x74, 0x74, 0x72, 0x71, 0x72, 0x74, 0x75, - 0x79, 0x7d, 0x80, 0x84, 0x87, 0x8b, 0x8e, 0x8f, 0x91, 0x92, 0x91, - 0x90, 0x8f, 0x8d, 0x8b, 0x88, 0x86, 0x82, 0x80, 0x7e, 0x7b, 0x7a, - 0x78, 0x77, 0x76, 0x75, 0x75, 0x76, 0x76, 0x77, 0x78, 0x79, 0x7a, - 0x7c, 0x7e, 0x7f, 0x81, 0x83, 0x84, 0x85, 0x86, 0x87, 0x86, 0x86, - 0x85, 0x84, 0x82, 0x81, 0x80, 0x7f, 0x7e, 0x7e, 0x7d, 0x7d, 0x7d, - 0x7d, 0x7d, 0x7e, 0x7e, 0x7e, 0x80, 0x80, 0x81, 0x82, 0x82, 0x82, - 0x83, 0x83, 0x82, 0x83, 0x82, 0x81, 0x81, 0x80, 0x80, 0x7e, 0x7c, - 0x7b, 0x78, 0x73, 0x72, 0x73, 0x70, 0x6e, 0x70, 0x72, 0x73, 0x77, - 0x7c, 0x7f, 0x83, 0x88, 0x8c, 0x8f, 0x90, 0x92, 0x94, 0x93, 0x92, - 0x91, 0x8f, 0x8d, 0x8a, 0x88, 0x85, 0x82, 0x7f, 0x7e, 0x7c, 0x79, - 0x78, 0x77, 0x75, 0x74, 0x74, 0x74, 0x74, 0x75, 0x76, 0x77, 0x78, - 0x7a, 0x7d, 0x7e, 0x80, 0x82, 0x84, 0x85, 0x85, 0x86, 0x86, 0x86, - 0x85, 0x85, 0x84, 0x83, 0x83, 0x82, 0x81, 0x81, 0x80, 0x80, 0x7f, - 0x7f, 0x7e, 0x7e, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7e, 0x7e, 0x7e, - 0x7e, 0x7e, 0x7f, 0x7e, 0x7e, 0x7f, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, - 0x7d, 0x7d, 0x7e, 0x7e, 0x7c, 0x7a, 0x7a, 0x7b, 0x79, 0x79, 0x7a, - 0x7a, 0x7a, 0x7c, 0x7e, 0x7f, 0x81, 0x83, 0x86, 0x88, 0x89, 0x8b, - 0x8c, 0x8c, 0x8c, 0x8b, 0x8b, 0x89, 0x87, 0x86, 0x84, 0x82, 0x80, - 0x7f, 0x7d, 0x7b, 0x7a, 0x79, 0x78, 0x77, 0x77, 0x77, 0x78, 0x79, - 0x79, 0x7b, 0x7c, 0x7e, 0x80, 0x81, 0x82, 0x83, 0x84, 0x84, 0x84, - 0x84, 0x84, 0x83, 0x82, 0x81, 0x81, 0x7f, 0x7f, 0x7e, 0x7d, 0x7c, - 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7d, 0x7d, 0x7e, 0x7e, 0x7f, - 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x81, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7e, 0x7e, 0x7e, 0x7e, 0x7d, - 0x7d, 0x7d, 0x7d, 0x7d, 0x7e, 0x7e, 0x7f, 0x7f, 0x80, 0x81, 0x81, - 0x82, 0x83, 0x83, 0x84, 0x84, 0x84, 0x84, 0x84, 0x83, 0x83, 0x83, - 0x82, 0x81, 0x80, 0x80, 0x7f, 0x7e, 0x7e, 0x7d, 0x7d, 0x7d, 0x7d, - 0x7d, 0x7d, 0x7d, 0x7e, 0x7e, 0x7e, 0x7f, 0x7f, 0x80, 0x80, 0x80, - 0x80, 0x81, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7f, 0x7f, - 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, - }, - { // 2 - 0x80, 0x7f, 0x80, 0x7f, 0x7e, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, - 0x80, 0x7f, 0x7f, 0x7d, 0x7c, 0x80, 0x81, 0x7e, 0x7c, 0x7c, 0x7f, - 0x83, 0x85, 0x86, 0x88, 0x88, 0x85, 0x81, 0x7e, 0x7d, 0x7d, 0x7c, - 0x7a, 0x7a, 0x7b, 0x7c, 0x7e, 0x7f, 0x80, 0x81, 0x81, 0x81, 0x80, - 0x82, 0x81, 0x80, 0x7f, 0x7e, 0x7e, 0x7e, 0x7f, 0x7e, 0x7e, 0x7f, - 0x7f, 0x80, 0x80, 0x80, 0x80, 0x81, 0x82, 0x81, 0x80, 0x80, 0x80, - 0x7f, 0x7e, 0x7e, 0x7e, 0x7e, 0x7d, 0x7e, 0x7e, 0x7f, 0x80, 0x80, - 0x80, 0x81, 0x81, 0x82, 0x81, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x7e, - 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x81, 0x82, 0x82, 0x80, 0x7f, 0x81, - 0x82, 0x81, 0x7f, 0x7e, 0x7f, 0x81, 0x80, 0x7f, 0x7e, 0x7f, 0x80, - 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x80, - 0x80, 0x81, 0x82, 0x81, 0x81, 0x80, 0x80, 0x7f, 0x7e, 0x7c, 0x7b, - 0x7b, 0x79, 0x78, 0x6d, 0x69, 0x76, 0x76, 0x75, 0x7b, 0x7d, 0x85, - 0x8c, 0x94, 0x92, 0x8d, 0x95, 0x95, 0x8d, 0x89, 0x81, 0x7a, 0x78, - 0x76, 0x75, 0x6f, 0x71, 0x75, 0x78, 0x80, 0x82, 0x85, 0x89, 0x8e, - 0x8e, 0x8a, 0x89, 0x84, 0x81, 0x7e, 0x7a, 0x77, 0x77, 0x7a, 0x7a, - 0x7d, 0x80, 0x82, 0x86, 0x88, 0x8a, 0x87, 0x86, 0x87, 0x84, 0x82, - 0x80, 0x7e, 0x7e, 0x7f, 0x7e, 0x57, 0x2e, 0x5c, 0x6e, 0x54, 0x65, - 0x64, 0x6e, 0x8c, 0xac, 0xb6, 0x94, 0xa1, 0xbf, 0xac, 0x9d, 0x94, - 0x75, 0x65, 0x71, 0x74, 0x60, 0x4d, 0x66, 0x78, 0x7a, 0x95, 0x94, - 0x8a, 0x97, 0xa8, 0xa5, 0x8c, 0x84, 0x7c, 0x6c, 0x6b, 0x65, 0x57, - 0x55, 0x67, 0x75, 0x7b, 0x88, 0x90, 0x93, 0x9e, 0xa3, 0x98, 0x8d, - 0x89, 0x81, 0x79, 0x77, 0x6f, 0x68, 0x6e, 0x78, 0x79, 0x7e, 0x86, - 0x8a, 0x8e, 0x96, 0x95, 0x8f, 0x8d, 0x8b, 0x6a, 0x32, 0x44, 0x5e, - 0x45, 0x56, 0x5e, 0x5a, 0x76, 0x9a, 0xc0, 0xaf, 0xa5, 0xbf, 0xb4, - 0xa8, 0xa9, 0x8b, 0x64, 0x5b, 0x64, 0x66, 0x53, 0x55, 0x68, 0x65, - 0x85, 0xa5, 0x9b, 0x9a, 0x9c, 0xa7, 0xa4, 0x94, 0x8d, 0x6c, 0x59, - 0x61, 0x5c, 0x56, 0x55, 0x61, 0x6c, 0x82, 0x9f, 0x9d, 0x99, 0xa0, - 0xa0, 0x9b, 0x95, 0x8b, 0x73, 0x6c, 0x71, 0x6d, 0x6c, 0x6d, 0x6f, - 0x74, 0x82, 0x92, 0x91, 0x93, 0x97, 0x93, 0x93, 0x90, 0x84, 0x53, - 0x2b, 0x4d, 0x52, 0x49, 0x63, 0x5b, 0x5e, 0x7b, 0xa5, 0xc4, 0xb0, - 0xb0, 0xba, 0xa4, 0xa4, 0xa9, 0x87, 0x62, 0x56, 0x5a, 0x5f, 0x59, - 0x67, 0x6c, 0x61, 0x86, 0xa2, 0xa3, 0xa6, 0x9f, 0x9d, 0x93, 0x8f, - 0x94, 0x71, 0x58, 0x56, 0x4e, 0x55, 0x63, 0x70, 0x6e, 0x7a, 0x97, - 0x9c, 0xa4, 0xa8, 0x99, 0x8c, 0x8a, 0x8a, 0x7c, 0x72, 0x6e, 0x62, - 0x67, 0x75, 0x7b, 0x7c, 0x82, 0x8a, 0x8c, 0x97, 0x9f, 0x95, 0x8f, - 0x86, 0x7b, 0x54, 0x35, 0x4e, 0x47, 0x45, 0x65, 0x62, 0x67, 0x7c, - 0x9c, 0xb9, 0xb3, 0xbc, 0xbc, 0x9e, 0x98, 0x9d, 0x87, 0x6e, 0x62, - 0x58, 0x53, 0x54, 0x6b, 0x79, 0x6f, 0x87, 0x97, 0x95, 0xa5, 0xa8, - 0xa2, 0x91, 0x85, 0x85, 0x71, 0x63, 0x64, 0x54, 0x4b, 0x58, 0x68, - 0x73, 0x84, 0x97, 0x95, 0x96, 0xa4, 0x9e, 0x94, 0x90, 0x85, 0x75, - 0x72, 0x76, 0x6e, 0x6d, 0x75, 0x73, 0x77, 0x85, 0x8c, 0x8d, 0x91, - 0x96, 0x8f, 0x8d, 0x8b, 0x80, 0x62, 0x3b, 0x42, 0x48, 0x42, 0x64, - 0x6c, 0x66, 0x77, 0x89, 0xa7, 0xb4, 0xbf, 0xc7, 0xa9, 0x95, 0x95, - 0x86, 0x78, 0x74, 0x66, 0x54, 0x4f, 0x5b, 0x6f, 0x77, 0x8a, 0x9a, - 0x8d, 0x94, 0xa0, 0x9d, 0x9e, 0x96, 0x8a, 0x74, 0x60, 0x62, 0x5b, - 0x59, 0x61, 0x60, 0x66, 0x75, 0x8a, 0x97, 0x9c, 0xa3, 0x99, 0x8f, - 0x90, 0x89, 0x83, 0x7f, 0x77, 0x6e, 0x6b, 0x73, 0x77, 0x7d, 0x86, - 0x85, 0x87, 0x8c, 0x91, 0x93, 0x93, 0x8d, 0x80, 0x67, 0x42, 0x40, - 0x48, 0x43, 0x60, 0x6d, 0x68, 0x77, 0x83, 0x9d, 0xb0, 0xbc, 0xc8, - 0xb1, 0x9a, 0x95, 0x84, 0x78, 0x79, 0x6f, 0x5e, 0x56, 0x58, 0x64, - 0x70, 0x86, 0x9b, 0x94, 0x96, 0x9d, 0x92, 0x96, 0x98, 0x8f, 0x80, - 0x6b, 0x62, 0x57, 0x53, 0x62, 0x65, 0x6b, 0x79, 0x80, 0x8a, 0x97, - 0xa3, 0xa3, 0x99, 0x94, 0x86, 0x7d, 0x80, 0x7b, 0x78, 0x76, 0x72, - 0x71, 0x78, 0x82, 0x87, 0x8b, 0x8f, 0x8d, 0x8d, 0x8f, 0x8b, 0x84, - 0x71, 0x4d, 0x41, 0x42, 0x3d, 0x58, 0x6f, 0x73, 0x80, 0x86, 0x92, - 0xa3, 0xb1, 0xc5, 0xbe, 0xa8, 0x9b, 0x81, 0x6e, 0x70, 0x70, 0x69, - 0x67, 0x62, 0x60, 0x66, 0x78, 0x91, 0x9a, 0xa0, 0xa4, 0x93, 0x8c, - 0x8e, 0x86, 0x83, 0x7d, 0x71, 0x61, 0x54, 0x58, 0x5c, 0x69, 0x80, - 0x89, 0x8f, 0x96, 0x94, 0x96, 0x97, 0x97, 0x8f, 0x85, 0x7f, 0x74, - 0x72, 0x77, 0x77, 0x7c, 0x80, 0x7f, 0x81, 0x85, 0x8b, 0x8f, 0x92, - 0x93, 0x8a, 0x7b, 0x5f, 0x44, 0x44, 0x41, 0x4a, 0x69, 0x70, 0x78, - 0x86, 0x8a, 0x98, 0xa6, 0xb6, 0xbe, 0xb2, 0xa6, 0x92, 0x75, 0x6a, - 0x6c, 0x67, 0x69, 0x6f, 0x67, 0x67, 0x70, 0x7f, 0x8f, 0x9b, 0xa7, - 0xa2, 0x93, 0x90, 0x85, 0x7a, 0x7c, 0x77, 0x6d, 0x66, 0x5f, 0x59, - 0x5d, 0x6c, 0x7d, 0x8b, 0x9b, 0x9c, 0x97, 0x95, 0x8f, 0x8a, 0x8a, - 0x86, 0x7f, 0x79, 0x76, 0x73, 0x75, 0x7f, 0x83, 0x86, 0x8b, 0x8a, - 0x8a, 0x8e, 0x8f, 0x8c, 0x82, 0x68, 0x4c, 0x43, 0x3c, 0x41, 0x60, - 0x71, 0x7c, 0x8d, 0x8f, 0x94, 0x9d, 0xab, 0xb6, 0xb2, 0xae, 0x9f, - 0x80, 0x6e, 0x66, 0x5e, 0x63, 0x71, 0x72, 0x72, 0x78, 0x7a, 0x83, - 0x90, 0x9f, 0xa4, 0x9e, 0x9b, 0x8c, 0x79, 0x76, 0x6e, 0x67, 0x6a, - 0x67, 0x61, 0x63, 0x6a, 0x72, 0x81, 0x95, 0x9e, 0x9f, 0x9e, 0x93, - 0x88, 0x85, 0x81, 0x7e, 0x80, 0x7f, 0x7b, 0x79, 0x7b, 0x7c, 0x81, - 0x8a, 0x8e, 0x91, 0x93, 0x8d, 0x84, 0x71, 0x53, 0x49, 0x44, 0x3f, - 0x57, 0x6b, 0x74, 0x89, 0x90, 0x92, 0x9c, 0xa4, 0xae, 0xb0, 0xab, - 0xa3, 0x8c, 0x76, 0x6b, 0x60, 0x5e, 0x6a, 0x6f, 0x72, 0x7d, 0x7f, - 0x83, 0x8d, 0x95, 0x9c, 0x9e, 0x9d, 0x96, 0x84, 0x78, 0x6f, 0x62, - 0x62, 0x64, 0x63, 0x68, 0x6f, 0x78, 0x83, 0x90, 0x9b, 0x9f, 0x9e, - 0x97, 0x8b, 0x84, 0x7d, 0x78, 0x7c, 0x7e, 0x7d, 0x7f, 0x7d, 0x7c, - 0x80, 0x86, 0x8d, 0x92, 0x93, 0x8d, 0x7a, 0x5b, 0x4c, 0x43, 0x3c, - 0x54, 0x6b, 0x74, 0x8c, 0x95, 0x92, 0x9a, 0x9f, 0xa5, 0xaa, 0xac, - 0xa6, 0x91, 0x7c, 0x6c, 0x5b, 0x56, 0x62, 0x6a, 0x72, 0x83, 0x86, - 0x85, 0x8e, 0x91, 0x94, 0x9b, 0x9d, 0x9a, 0x8e, 0x82, 0x72, 0x5f, - 0x59, 0x5a, 0x5c, 0x68, 0x75, 0x7f, 0x8a, 0x93, 0x99, 0x9c, 0x9d, - 0x9a, 0x91, 0x89, 0x80, 0x78, 0x76, 0x76, 0x77, 0x7a, 0x7c, 0x7d, - 0x81, 0x85, 0x8b, 0x8d, 0x8c, 0x7d, 0x63, 0x58, 0x4c, 0x43, 0x58, - 0x69, 0x75, 0x8d, 0x96, 0x94, 0x99, 0x9d, 0xa0, 0xa4, 0xa8, 0xa3, - 0x93, 0x82, 0x70, 0x5d, 0x55, 0x5d, 0x62, 0x6c, 0x7e, 0x84, 0x89, - 0x92, 0x92, 0x93, 0x98, 0x9b, 0x98, 0x91, 0x86, 0x75, 0x64, 0x5b, - 0x57, 0x59, 0x67, 0x77, 0x84, 0x90, 0x97, 0x98, 0x9a, 0x98, 0x94, - 0x90, 0x8c, 0x85, 0x7f, 0x7a, 0x75, 0x71, 0x73, 0x74, 0x78, 0x81, - 0x88, 0x8a, 0x83, 0x6d, 0x5e, 0x55, 0x4b, 0x5b, 0x6e, 0x77, 0x8e, - 0x96, 0x90, 0x94, 0x95, 0x95, 0x9c, 0xa1, 0xa0, 0x97, 0x88, 0x79, - 0x69, 0x5e, 0x62, 0x65, 0x6b, 0x7c, 0x82, 0x83, 0x8b, 0x8a, 0x89, - 0x8f, 0x92, 0x93, 0x91, 0x8a, 0x7e, 0x6e, 0x64, 0x5f, 0x5f, 0x6b, - 0x79, 0x84, 0x91, 0x93, 0x91, 0x92, 0x8f, 0x8e, 0x8e, 0x8c, 0x89, - 0x85, 0x80, 0x7b, 0x77, 0x76, 0x75, 0x79, 0x7e, 0x7f, 0x77, 0x61, - 0x58, 0x52, 0x49, 0x60, 0x77, 0x81, 0x9c, 0xa4, 0x99, 0x9a, 0x97, - 0x91, 0x94, 0x99, 0x95, 0x8a, 0x7d, 0x6e, 0x60, 0x5b, 0x67, 0x70, - 0x7a, 0x8e, 0x91, 0x8e, 0x93, 0x8b, 0x85, 0x89, 0x88, 0x86, 0x81, - 0x7a, 0x6d, 0x61, 0x60, 0x61, 0x6a, 0x7e, 0x8c, 0x96, 0x9e, 0x9a, - 0x92, 0x8e, 0x88, 0x86, 0x85, 0x84, 0x82, 0x7d, 0x7a, 0x77, 0x76, - 0x7b, 0x80, 0x84, 0x85, 0x7a, 0x5e, 0x52, 0x4c, 0x42, 0x5e, 0x79, - 0x83, 0x9d, 0xa5, 0x99, 0x9a, 0x99, 0x97, 0x98, 0x9a, 0x94, 0x82, - 0x6f, 0x62, 0x55, 0x55, 0x6b, 0x7a, 0x84, 0x98, 0x96, 0x8e, 0x90, - 0x8b, 0x88, 0x8c, 0x8c, 0x86, 0x7a, 0x6e, 0x60, 0x57, 0x5e, 0x69, - 0x76, 0x8a, 0x93, 0x94, 0x96, 0x90, 0x8b, 0x8c, 0x8b, 0x8a, 0x86, - 0x84, 0x7f, 0x79, 0x7a, 0x7b, 0x7b, 0x82, 0x84, 0x82, 0x7b, 0x5d, - 0x49, 0x4a, 0x41, 0x59, 0x81, 0x89, 0x9d, 0xa9, 0x9a, 0x98, 0x9b, - 0x99, 0x9b, 0x97, 0x8b, 0x76, 0x5e, 0x55, 0x55, 0x5c, 0x78, 0x8f, - 0x93, 0x9e, 0x9b, 0x8c, 0x8e, 0x8c, 0x86, 0x86, 0x7e, 0x71, 0x63, - 0x5b, 0x5a, 0x5d, 0x71, 0x85, 0x8e, 0x9c, 0x9e, 0x97, 0x94, 0x8e, - 0x88, 0x84, 0x7d, 0x78, 0x73, 0x75, 0x7b, 0x7c, 0x83, 0x87, 0x86, - 0x8c, 0x8c, 0x87, 0x7b, 0x56, 0x45, 0x44, 0x38, 0x5a, 0x82, 0x87, - 0xa0, 0xa9, 0x99, 0x9d, 0xa2, 0x9f, 0x9c, 0x91, 0x7e, 0x63, 0x50, - 0x54, 0x5f, 0x6e, 0x90, 0x9c, 0x94, 0x9b, 0x93, 0x88, 0x91, 0x8e, - 0x82, 0x76, 0x68, 0x5b, 0x58, 0x66, 0x74, 0x7e, 0x8e, 0x8d, 0x87, - 0x8a, 0x88, 0x87, 0x8b, 0x88, 0x81, 0x7c, 0x7c, 0x7d, 0x83, 0x90, - 0x92, 0x8d, 0x8a, 0x82, 0x7c, 0x80, 0x7e, 0x79, 0x5f, 0x37, 0x37, - 0x3d, 0x4b, 0x8c, 0xa9, 0xa8, 0xb7, 0xa4, 0x90, 0x99, 0x9a, 0x93, - 0x81, 0x68, 0x4f, 0x3d, 0x4c, 0x73, 0x8e, 0xa8, 0xbb, 0xa5, 0x95, - 0x97, 0x8a, 0x89, 0x89, 0x70, 0x55, 0x44, 0x4a, 0x5e, 0x7e, 0xa0, - 0xa1, 0x96, 0x8d, 0x7c, 0x7d, 0x89, 0x87, 0x80, 0x75, 0x6b, 0x6a, - 0x78, 0x8b, 0x92, 0x92, 0x8e, 0x84, 0x86, 0x8d, 0x8e, 0x8f, 0x87, - 0x78, 0x6b, 0x61, 0x47, 0x3c, 0x57, 0x5e, 0x73, 0x9f, 0x9c, 0x9a, - 0xa3, 0x97, 0x92, 0x90, 0x89, 0x74, 0x5f, 0x5e, 0x60, 0x69, 0x88, - 0x9e, 0x9b, 0xa1, 0x9f, 0x89, 0x87, 0x86, 0x75, 0x6c, 0x64, 0x5e, - 0x60, 0x77, 0x92, 0x99, 0x9f, 0x97, 0x7e, 0x77, 0x75, 0x70, 0x72, - 0x74, 0x71, 0x72, 0x80, 0x8c, 0x90, 0x94, 0x8c, 0x80, 0x7f, 0x83, - 0x8a, 0x90, 0x8a, 0x7d, 0x75, 0x75, 0x7b, 0x80, 0x82, 0x65, 0x36, - 0x41, 0x59, 0x6b, 0xa8, 0xb7, 0x97, 0x94, 0x8d, 0x87, 0x92, 0x92, - 0x7b, 0x55, 0x4c, 0x5d, 0x70, 0x95, 0xb2, 0xa0, 0x8f, 0x92, 0x85, - 0x84, 0x8d, 0x79, 0x62, 0x5c, 0x63, 0x71, 0x8a, 0x9f, 0x97, 0x8c, - 0x88, 0x79, 0x73, 0x76, 0x6f, 0x68, 0x70, 0x7e, 0x88, 0x93, 0x97, - 0x88, 0x7e, 0x7d, 0x79, 0x7b, 0x81, 0x7f, 0x7f, 0x88, 0x8d, 0x89, - 0x87, 0x86, 0x82, 0x83, 0x80, 0x77, 0x58, 0x32, 0x42, 0x65, 0x79, - 0xab, 0xb2, 0x90, 0x92, 0x90, 0x88, 0x8a, 0x7c, 0x64, 0x52, 0x61, - 0x83, 0x96, 0xa5, 0xa7, 0x8b, 0x80, 0x89, 0x7f, 0x76, 0x71, 0x60, - 0x60, 0x77, 0x91, 0x9d, 0x98, 0x94, 0x84, 0x79, 0x81, 0x77, 0x65, - 0x61, 0x63, 0x71, 0x89, 0x9b, 0x96, 0x8a, 0x87, 0x7f, 0x7f, 0x84, - 0x7a, 0x72, 0x77, 0x7e, 0x86, 0x8c, 0x8a, 0x83, 0x85, 0x8b, 0x8b, - 0x87, 0x80, 0x73, 0x6b, 0x6e, 0x60, 0x43, 0x57, 0x77, 0x7f, 0xa6, - 0xac, 0x88, 0x87, 0x84, 0x79, 0x79, 0x74, 0x6b, 0x66, 0x7d, 0x9c, - 0xa1, 0xa1, 0x9b, 0x7f, 0x75, 0x7e, 0x73, 0x6c, 0x70, 0x70, 0x7b, - 0x90, 0x9a, 0x94, 0x83, 0x7a, 0x77, 0x75, 0x78, 0x78, 0x71, 0x77, - 0x83, 0x87, 0x8a, 0x86, 0x79, 0x74, 0x7a, 0x80, 0x80, 0x82, 0x80, - 0x7f, 0x87, 0x8a, 0x86, 0x82, 0x7c, 0x7c, 0x80, 0x85, 0x85, 0x81, - 0x7f, 0x7f, 0x82, 0x88, 0x87, 0x80, 0x79, 0x6b, 0x4c, 0x41, 0x65, - 0x7b, 0x8d, 0xa8, 0x92, 0x83, 0x8f, 0x87, 0x81, 0x7a, 0x6f, 0x6d, - 0x7b, 0x94, 0x9b, 0x91, 0x8c, 0x80, 0x76, 0x7e, 0x7a, 0x6e, 0x73, - 0x7c, 0x87, 0x96, 0x96, 0x89, 0x7b, 0x74, 0x76, 0x76, 0x75, 0x74, - 0x76, 0x7e, 0x8a, 0x8c, 0x84, 0x7d, 0x78, 0x7b, 0x83, 0x86, 0x82, - 0x7f, 0x7f, 0x7d, 0x7d, 0x7c, 0x78, 0x7a, 0x81, 0x88, 0x8c, 0x8a, - 0x84, 0x7c, 0x79, 0x7c, 0x7e, 0x83, 0x87, 0x88, 0x8a, 0x88, 0x82, - 0x7b, 0x72, 0x6e, 0x66, 0x4e, 0x4c, 0x74, 0x8b, 0x9b, 0xaa, 0x8c, - 0x78, 0x7f, 0x77, 0x75, 0x74, 0x70, 0x79, 0x8c, 0xa0, 0x9e, 0x8d, - 0x82, 0x77, 0x75, 0x7d, 0x79, 0x73, 0x7c, 0x88, 0x92, 0x98, 0x8a, - 0x77, 0x6d, 0x6f, 0x7a, 0x7d, 0x7e, 0x81, 0x81, 0x88, 0x8a, 0x7d, - 0x77, 0x74, 0x74, 0x7f, 0x83, 0x82, 0x80, 0x7b, 0x79, 0x76, 0x77, - 0x7c, 0x80, 0x89, 0x8c, 0x8b, 0x8a, 0x81, 0x7c, 0x7b, 0x7c, 0x81, - 0x83, 0x84, 0x84, 0x83, 0x82, 0x80, 0x7f, 0x80, 0x81, 0x84, 0x84, - 0x81, 0x7a, 0x70, 0x68, 0x63, 0x5e, 0x5a, 0x68, 0x83, 0x8f, 0x98, - 0x99, 0x87, 0x82, 0x82, 0x79, 0x76, 0x77, 0x7f, 0x8a, 0x94, 0x98, - 0x8c, 0x81, 0x7d, 0x79, 0x79, 0x7c, 0x7a, 0x7d, 0x88, 0x8d, 0x8b, - 0x84, 0x77, 0x6f, 0x70, 0x77, 0x7e, 0x80, 0x83, 0x85, 0x85, 0x86, - 0x81, 0x7a, 0x78, 0x75, 0x78, 0x82, 0x86, 0x84, 0x83, 0x7d, 0x79, - 0x7a, 0x7a, 0x7b, 0x81, 0x88, 0x89, 0x85, 0x7f, 0x77, 0x75, 0x79, - 0x7d, 0x83, 0x87, 0x87, 0x85, 0x80, 0x7d, 0x7b, 0x7d, 0x80, 0x81, - 0x83, 0x85, 0x84, 0x85, 0x84, 0x81, 0x7f, 0x7d, 0x78, 0x71, 0x6a, - 0x64, 0x5f, 0x61, 0x7b, 0x8d, 0x8e, 0x93, 0x88, 0x7a, 0x80, 0x7d, - 0x76, 0x78, 0x7e, 0x88, 0x91, 0x97, 0x91, 0x82, 0x7d, 0x7d, 0x7b, - 0x7f, 0x80, 0x80, 0x87, 0x8d, 0x89, 0x83, 0x7b, 0x74, 0x75, 0x79, - 0x7d, 0x7f, 0x7f, 0x82, 0x81, 0x7f, 0x7b, 0x74, 0x73, 0x79, 0x80, - 0x86, 0x87, 0x82, 0x7d, 0x7b, 0x78, 0x7a, 0x7d, 0x7d, 0x7e, 0x82, - 0x82, 0x81, 0x82, 0x82, 0x7f, 0x7f, 0x81, 0x84, 0x87, 0x87, 0x84, - 0x7f, 0x7b, 0x79, 0x7c, 0x7e, 0x80, 0x82, 0x81, 0x80, 0x80, 0x7f, - 0x7f, 0x80, 0x81, 0x81, 0x83, 0x84, 0x82, 0x7e, 0x7b, 0x7a, 0x7a, - 0x77, 0x6d, 0x68, 0x68, 0x64, 0x71, 0x89, 0x8d, 0x8e, 0x8e, 0x81, - 0x7d, 0x80, 0x7b, 0x79, 0x7f, 0x88, 0x8e, 0x91, 0x8f, 0x84, 0x7f, - 0x7f, 0x7c, 0x7e, 0x7e, 0x7e, 0x82, 0x85, 0x85, 0x82, 0x7d, 0x7b, - 0x7c, 0x7e, 0x81, 0x82, 0x80, 0x7e, 0x7e, 0x7e, 0x7b, 0x78, 0x79, - 0x7b, 0x81, 0x85, 0x83, 0x7e, 0x7b, 0x78, 0x76, 0x7b, 0x7d, 0x7d, - 0x80, 0x7f, 0x80, 0x84, 0x83, 0x84, 0x83, 0x83, 0x83, 0x80, 0x80, - 0x7e, 0x7f, 0x82, 0x81, 0x80, 0x81, 0x7f, 0x80, 0x81, 0x80, 0x7f, - 0x7f, 0x7f, 0x80, 0x7f, 0x7e, 0x7c, 0x7b, 0x7c, 0x7d, 0x7f, 0x80, - 0x82, 0x81, 0x7f, 0x82, 0x81, 0x7f, 0x7f, 0x7e, 0x77, 0x71, 0x69, - 0x55, 0x5b, 0x7e, 0x8b, 0x91, 0x95, 0x84, 0x81, 0x84, 0x7d, 0x7a, - 0x7f, 0x89, 0x8d, 0x90, 0x8e, 0x83, 0x80, 0x82, 0x7e, 0x81, 0x85, - 0x84, 0x88, 0x87, 0x82, 0x7d, 0x78, 0x76, 0x77, 0x7a, 0x7f, 0x80, - 0x81, 0x7f, 0x7d, 0x7d, 0x7a, 0x76, 0x79, 0x84, 0x8b, 0x88, 0x80, - 0x78, 0x76, 0x78, 0x7a, 0x7b, 0x7e, 0x86, 0x89, 0x87, 0x81, 0x7c, - 0x7a, 0x7b, 0x7d, 0x81, 0x83, 0x84, 0x81, 0x7d, 0x7c, 0x7b, 0x7d, - 0x7f, 0x81, 0x82, 0x82, 0x80, 0x7d, 0x7b, 0x7d, 0x81, 0x83, 0x83, - 0x81, 0x7e, 0x7d, 0x7e, 0x7d, 0x7d, 0x7e, 0x7e, 0x81, 0x81, 0x7f, - 0x7d, 0x7c, 0x7d, 0x7f, 0x7e, 0x7e, 0x81, 0x82, 0x82, 0x80, 0x74, - 0x68, 0x6a, 0x75, 0x7d, 0x84, 0x88, 0x8a, 0x8a, 0x83, 0x7b, 0x7b, - 0x81, 0x89, 0x8c, 0x8a, 0x88, 0x87, 0x80, 0x7a, 0x79, 0x7c, 0x82, - 0x88, 0x87, 0x83, 0x82, 0x7f, 0x7b, 0x7b, 0x7d, 0x7f, 0x83, 0x82, - 0x7e, 0x7b, 0x7a, 0x79, 0x7a, 0x7a, 0x7d, 0x84, 0x88, 0x85, 0x82, - 0x80, 0x7c, 0x7a, 0x79, 0x79, 0x7d, 0x7f, 0x7e, 0x7c, 0x7d, 0x7e, - 0x80, 0x82, 0x83, 0x83, 0x84, 0x82, 0x7f, 0x7d, 0x7d, 0x7d, 0x7e, - 0x7f, 0x7f, 0x80, 0x7f, 0x7e, 0x7d, 0x7d, 0x7e, 0x80, 0x82, 0x82, - 0x81, 0x7f, 0x7e, 0x7c, 0x7c, 0x7e, 0x80, 0x80, 0x7f, 0x7e, 0x7e, - 0x7f, 0x7f, 0x7e, 0x7f, 0x80, 0x80, 0x7e, 0x7e, 0x7f, 0x7e, 0x7f, - 0x7f, 0x80, 0x80, 0x80, 0x7f, 0x7e, 0x7f, 0x80, 0x7f, 0x7e, 0x7f, - }, - { // 3 - 0x7f, 0x80, 0x81, 0x7e, 0x7a, 0x7c, 0x84, 0x85, 0x7d, 0x7c, 0x81, - 0x82, 0x80, 0x7f, 0x81, 0x81, 0x80, 0x80, 0x7e, 0x80, 0x80, 0x80, - 0x7d, 0x7c, 0x80, 0x81, 0x80, 0x7f, 0x7d, 0x82, 0x7c, 0x7d, 0x80, - 0x7b, 0x7e, 0x81, 0x84, 0x83, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, - 0x81, 0x82, 0x80, 0x7e, 0x7e, 0x7f, 0x7f, 0x7f, 0x7e, 0x7d, 0x80, - 0x7f, 0x7e, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x81, 0x80, - 0x80, 0x7f, 0x7f, 0x80, 0x79, 0x7a, 0x7f, 0x7e, 0x82, 0x82, 0x80, - 0x83, 0x84, 0x83, 0x85, 0x86, 0x82, 0x7f, 0x80, 0x7f, 0x7b, 0x7c, - 0x7d, 0x7d, 0x7c, 0x7c, 0x7d, 0x80, 0x81, 0x7e, 0x7f, 0x82, 0x82, - 0x80, 0x7f, 0x7f, 0x7f, 0x81, 0x7f, 0x7e, 0x7f, 0x80, 0x80, 0x7f, - 0x7f, 0x80, 0x81, 0x81, 0x80, 0x80, 0x82, 0x82, 0x80, 0x7f, 0x80, - 0x80, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x81, 0x80, - 0x80, 0x80, 0x80, 0x81, 0x82, 0x81, 0x80, 0x82, 0x82, 0x80, 0x7f, - 0x7e, 0x7e, 0x7d, 0x7b, 0x79, 0x73, 0x73, 0x78, 0x74, 0x73, 0x78, - 0x7a, 0x7f, 0x83, 0x87, 0x88, 0x8c, 0x92, 0x8f, 0x8d, 0x8f, 0x8c, - 0x87, 0x82, 0x7e, 0x7a, 0x77, 0x73, 0x72, 0x72, 0x76, 0x7b, 0x7e, - 0x82, 0x87, 0x8b, 0x8d, 0x8f, 0x8e, 0x8c, 0x8b, 0x88, 0x83, 0x80, - 0x7f, 0x7d, 0x7b, 0x7b, 0x7b, 0x7f, 0x82, 0x80, 0x83, 0x87, 0x8a, - 0x83, 0x82, 0x63, 0x45, 0x76, 0x68, 0x3c, 0x56, 0x5f, 0x6c, 0x74, - 0x80, 0x8a, 0x91, 0xc1, 0xb6, 0x95, 0xb7, 0xbc, 0xa0, 0x92, 0x85, - 0x80, 0x72, 0x70, 0x61, 0x49, 0x6f, 0x74, 0x5e, 0x71, 0x84, 0x90, - 0x8f, 0x99, 0x9b, 0x92, 0xa3, 0x8f, 0x75, 0x7f, 0x7a, 0x64, 0x5c, - 0x65, 0x62, 0x6a, 0x78, 0x79, 0x8a, 0x9c, 0x9c, 0x97, 0xa3, 0xa4, - 0x96, 0x92, 0x8b, 0x84, 0x7e, 0x77, 0x6f, 0x73, 0x7c, 0x7b, 0x78, - 0x79, 0x7e, 0x4c, 0x40, 0x84, 0x58, 0x38, 0x66, 0x68, 0x75, 0x7c, - 0x8c, 0x93, 0xa1, 0xcc, 0xa5, 0x95, 0xc2, 0xaa, 0x88, 0x86, 0x7f, - 0x77, 0x64, 0x65, 0x5b, 0x5a, 0x81, 0x6f, 0x6a, 0x90, 0x96, 0x96, - 0x93, 0xa1, 0x9e, 0x8f, 0x94, 0x77, 0x6e, 0x76, 0x63, 0x50, 0x58, - 0x6a, 0x65, 0x70, 0x83, 0x8f, 0x9e, 0xa1, 0x9f, 0xa1, 0xa8, 0x99, - 0x89, 0x8b, 0x83, 0x78, 0x70, 0x71, 0x70, 0x77, 0x7d, 0x7b, 0x87, - 0x89, 0x81, 0x48, 0x51, 0x93, 0x4a, 0x35, 0x69, 0x66, 0x70, 0x6c, - 0x83, 0x96, 0xa4, 0xbd, 0x97, 0xa7, 0xcf, 0x9e, 0x87, 0x91, 0x87, - 0x7a, 0x5f, 0x62, 0x61, 0x62, 0x76, 0x5e, 0x73, 0x98, 0x8a, 0x8d, - 0x97, 0xaa, 0x9f, 0x8b, 0x94, 0x82, 0x7b, 0x6f, 0x59, 0x5e, 0x62, - 0x59, 0x5a, 0x77, 0x83, 0x86, 0x97, 0x9e, 0xa5, 0xa3, 0x9f, 0x96, - 0x95, 0x8f, 0x7c, 0x79, 0x77, 0x71, 0x6e, 0x72, 0x7a, 0x7f, 0x86, - 0x87, 0x8b, 0x54, 0x4b, 0x98, 0x57, 0x30, 0x6a, 0x69, 0x69, 0x62, - 0x80, 0x98, 0x94, 0xb3, 0x9e, 0xa5, 0xcc, 0xa0, 0x8d, 0x99, 0x8e, - 0x7f, 0x60, 0x68, 0x6b, 0x59, 0x6b, 0x61, 0x70, 0x8c, 0x7d, 0x8a, - 0x97, 0xa6, 0x9d, 0x8b, 0x9f, 0x8c, 0x78, 0x76, 0x6a, 0x64, 0x5f, - 0x5e, 0x61, 0x75, 0x7e, 0x7f, 0x91, 0x9b, 0x9c, 0x9b, 0x9f, 0x9a, - 0x92, 0x8f, 0x83, 0x7e, 0x79, 0x74, 0x74, 0x76, 0x7b, 0x7d, 0x80, - 0x84, 0x4e, 0x48, 0x98, 0x58, 0x2f, 0x73, 0x71, 0x69, 0x61, 0x87, - 0x9e, 0x8b, 0xac, 0x9f, 0xa5, 0xc2, 0x98, 0x8e, 0x9d, 0x8e, 0x7b, - 0x64, 0x71, 0x72, 0x56, 0x68, 0x69, 0x73, 0x82, 0x75, 0x8c, 0x95, - 0x9b, 0x95, 0x8d, 0xa0, 0x8a, 0x7a, 0x79, 0x75, 0x69, 0x5d, 0x69, - 0x6b, 0x72, 0x77, 0x82, 0x90, 0x90, 0x95, 0x97, 0x9f, 0x97, 0x8e, - 0x90, 0x88, 0x80, 0x77, 0x79, 0x79, 0x74, 0x7a, 0x7b, 0x81, 0x54, - 0x40, 0x93, 0x64, 0x29, 0x74, 0x78, 0x66, 0x5f, 0x81, 0xa3, 0x83, - 0x9f, 0xa5, 0xa1, 0xbe, 0x98, 0x92, 0xa5, 0x92, 0x80, 0x6b, 0x78, - 0x7a, 0x53, 0x65, 0x6e, 0x6b, 0x75, 0x6c, 0x84, 0x8b, 0x8b, 0x91, - 0x8e, 0x9c, 0x8b, 0x83, 0x89, 0x81, 0x71, 0x6e, 0x7b, 0x6e, 0x6e, - 0x79, 0x7f, 0x82, 0x82, 0x8e, 0x8e, 0x91, 0x8e, 0x8d, 0x90, 0x87, - 0x83, 0x80, 0x81, 0x7a, 0x7d, 0x7c, 0x7e, 0x69, 0x3b, 0x85, 0x77, - 0x27, 0x6b, 0x76, 0x68, 0x5f, 0x71, 0xa0, 0x7f, 0x91, 0xa4, 0x9b, - 0xb8, 0x9e, 0x94, 0xae, 0x9a, 0x8a, 0x7b, 0x7f, 0x87, 0x59, 0x65, - 0x75, 0x63, 0x6a, 0x60, 0x7a, 0x7d, 0x74, 0x87, 0x85, 0x92, 0x88, - 0x8a, 0x93, 0x89, 0x86, 0x80, 0x8a, 0x7d, 0x7a, 0x80, 0x7d, 0x80, - 0x7a, 0x84, 0x84, 0x84, 0x84, 0x83, 0x8a, 0x83, 0x82, 0x84, 0x84, - 0x82, 0x7d, 0x85, 0x66, 0x4e, 0x88, 0x75, 0x37, 0x6c, 0x7d, 0x63, - 0x5a, 0x75, 0x94, 0x71, 0x84, 0x99, 0x8e, 0xa2, 0x99, 0x95, 0x9f, - 0xa0, 0x9a, 0x85, 0x8b, 0x95, 0x7a, 0x73, 0x7e, 0x76, 0x72, 0x6b, - 0x70, 0x76, 0x73, 0x78, 0x75, 0x7c, 0x82, 0x7e, 0x81, 0x84, 0x86, - 0x83, 0x81, 0x81, 0x82, 0x82, 0x7f, 0x81, 0x82, 0x82, 0x82, 0x81, - 0x83, 0x83, 0x81, 0x80, 0x80, 0x7f, 0x7e, 0x7b, 0x7b, 0x7d, 0x7c, - 0x7c, 0x7e, 0x7d, 0x7a, 0x7e, 0x82, 0x7e, 0x7d, 0x80, 0x7f, 0x7e, - 0x7c, 0x7c, 0x7b, 0x7a, 0x7c, 0x7b, 0x7c, 0x7c, 0x7d, 0x80, 0x80, - 0x82, 0x83, 0x83, 0x84, 0x85, 0x84, 0x83, 0x84, 0x86, 0x84, 0x83, - 0x84, 0x86, 0x85, 0x84, 0x84, 0x82, 0x82, 0x81, 0x7d, 0x7c, 0x7c, - 0x7b, 0x79, 0x78, 0x7a, 0x7a, 0x7a, 0x7d, 0x7e, 0x7f, 0x82, 0x84, - 0x83, 0x84, 0x85, 0x83, 0x82, 0x82, 0x80, 0x7e, 0x7e, 0x80, 0x79, - 0x7a, 0x81, 0x79, 0x78, 0x7c, 0x7d, 0x7e, 0x7a, 0x7e, 0x7e, 0x7b, - 0x7f, 0x7e, 0x7c, 0x7d, 0x7e, 0x82, 0x80, 0x80, 0x86, 0x82, 0x84, - 0x86, 0x85, 0x86, 0x83, 0x86, 0x84, 0x7f, 0x82, 0x81, 0x80, 0x7f, - 0x7f, 0x80, 0x7f, 0x81, 0x80, 0x7e, 0x7f, 0x7f, 0x7e, 0x7d, 0x7d, - 0x7c, 0x7b, 0x7c, 0x7d, 0x7c, 0x7d, 0x80, 0x7e, 0x81, 0x82, 0x83, - 0x82, 0x82, 0x84, 0x82, 0x82, 0x83, 0x7d, 0x78, 0x80, 0x7f, 0x76, - 0x77, 0x7a, 0x7d, 0x77, 0x76, 0x7d, 0x7c, 0x7e, 0x7e, 0x7e, 0x81, - 0x81, 0x84, 0x82, 0x81, 0x88, 0x86, 0x81, 0x84, 0x86, 0x85, 0x82, - 0x83, 0x86, 0x80, 0x7f, 0x81, 0x7f, 0x7c, 0x7c, 0x80, 0x7c, 0x7b, - 0x7e, 0x7e, 0x7e, 0x7e, 0x80, 0x80, 0x80, 0x81, 0x7f, 0x7f, 0x80, - 0x80, 0x7d, 0x80, 0x82, 0x7e, 0x7f, 0x81, 0x80, 0x80, 0x82, 0x82, - 0x80, 0x81, 0x82, 0x81, 0x75, 0x7c, 0x86, 0x74, 0x72, 0x7c, 0x7d, - 0x76, 0x6f, 0x7f, 0x7e, 0x75, 0x7f, 0x81, 0x81, 0x82, 0x85, 0x87, - 0x83, 0x8a, 0x8c, 0x80, 0x86, 0x8a, 0x82, 0x7f, 0x7f, 0x87, 0x7f, - 0x79, 0x82, 0x7e, 0x7e, 0x7a, 0x7c, 0x7e, 0x79, 0x7b, 0x7b, 0x7e, - 0x7d, 0x7e, 0x7d, 0x7d, 0x85, 0x7c, 0x81, 0x87, 0x84, 0x83, 0x84, - 0x88, 0x7f, 0x80, 0x82, 0x7f, 0x81, 0x7f, 0x83, 0x81, 0x82, 0x84, - 0x81, 0x6d, 0x7d, 0x8f, 0x5d, 0x6c, 0x88, 0x6e, 0x66, 0x6e, 0x86, - 0x72, 0x6c, 0x8c, 0x80, 0x81, 0x8a, 0x88, 0x90, 0x8f, 0x8b, 0x8d, - 0x8f, 0x91, 0x83, 0x85, 0x93, 0x7e, 0x7c, 0x84, 0x7f, 0x78, 0x71, - 0x7d, 0x75, 0x6d, 0x73, 0x76, 0x75, 0x6e, 0x7b, 0x7f, 0x7b, 0x7f, - 0x87, 0x8e, 0x85, 0x8c, 0x93, 0x8e, 0x8a, 0x8b, 0x8f, 0x82, 0x80, - 0x85, 0x7e, 0x7b, 0x7b, 0x7f, 0x7b, 0x7d, 0x6e, 0x67, 0x8d, 0x64, - 0x55, 0x8a, 0x69, 0x5e, 0x72, 0x76, 0x79, 0x6d, 0x85, 0x87, 0x86, - 0x92, 0x88, 0x9d, 0x9c, 0x87, 0x9c, 0x9c, 0x8b, 0x8b, 0x8c, 0x8f, - 0x7e, 0x7b, 0x85, 0x77, 0x75, 0x6f, 0x76, 0x77, 0x66, 0x71, 0x74, - 0x71, 0x6d, 0x77, 0x7e, 0x74, 0x80, 0x87, 0x89, 0x88, 0x8e, 0x98, - 0x8f, 0x92, 0x95, 0x93, 0x8a, 0x86, 0x8a, 0x80, 0x7b, 0x7b, 0x7c, - 0x76, 0x78, 0x6c, 0x61, 0x89, 0x5f, 0x53, 0x8d, 0x5b, 0x63, 0x77, - 0x67, 0x7c, 0x6d, 0x7d, 0x89, 0x83, 0x8d, 0x8c, 0x9f, 0x96, 0x8f, - 0xa7, 0x99, 0x92, 0x99, 0x8e, 0x92, 0x84, 0x7c, 0x88, 0x76, 0x71, - 0x70, 0x73, 0x6f, 0x62, 0x75, 0x6e, 0x69, 0x75, 0x75, 0x79, 0x78, - 0x81, 0x85, 0x85, 0x89, 0x8e, 0x94, 0x8c, 0x93, 0x95, 0x8e, 0x90, - 0x8d, 0x8c, 0x83, 0x83, 0x81, 0x7a, 0x7c, 0x77, 0x77, 0x62, 0x68, - 0x7f, 0x50, 0x67, 0x79, 0x56, 0x76, 0x67, 0x70, 0x83, 0x6a, 0x89, - 0x89, 0x84, 0x90, 0x8f, 0x9b, 0x90, 0x94, 0xa0, 0x94, 0x95, 0x93, - 0x92, 0x92, 0x83, 0x88, 0x86, 0x78, 0x78, 0x73, 0x75, 0x6b, 0x68, - 0x6e, 0x6c, 0x6b, 0x6a, 0x78, 0x74, 0x76, 0x84, 0x82, 0x88, 0x8a, - 0x92, 0x8f, 0x8d, 0x96, 0x91, 0x8e, 0x8c, 0x8f, 0x89, 0x83, 0x86, - 0x82, 0x7e, 0x7d, 0x7e, 0x7a, 0x71, 0x64, 0x7a, 0x6b, 0x53, 0x7a, - 0x61, 0x63, 0x71, 0x60, 0x83, 0x6c, 0x75, 0x90, 0x7d, 0x8d, 0x8f, - 0x95, 0x9a, 0x8f, 0x9d, 0x9c, 0x92, 0x95, 0x93, 0x93, 0x8b, 0x83, - 0x8b, 0x7f, 0x78, 0x78, 0x76, 0x74, 0x68, 0x6f, 0x6f, 0x68, 0x6b, - 0x6e, 0x73, 0x70, 0x78, 0x82, 0x81, 0x84, 0x8d, 0x91, 0x8e, 0x91, - 0x95, 0x91, 0x8f, 0x8f, 0x8e, 0x88, 0x86, 0x86, 0x80, 0x7e, 0x80, - 0x7d, 0x7b, 0x7b, 0x73, 0x67, 0x7e, 0x6a, 0x59, 0x7f, 0x5e, 0x69, - 0x70, 0x60, 0x85, 0x66, 0x79, 0x8f, 0x76, 0x92, 0x8a, 0x94, 0x9a, - 0x8b, 0x9f, 0x99, 0x91, 0x98, 0x8f, 0x91, 0x8b, 0x84, 0x8a, 0x7e, - 0x7b, 0x7c, 0x76, 0x75, 0x6e, 0x73, 0x71, 0x6b, 0x71, 0x70, 0x74, - 0x71, 0x76, 0x7e, 0x79, 0x80, 0x86, 0x88, 0x88, 0x8d, 0x91, 0x8c, - 0x8e, 0x91, 0x8e, 0x8a, 0x8b, 0x8b, 0x84, 0x82, 0x83, 0x7f, 0x7b, - 0x7d, 0x7e, 0x7a, 0x78, 0x74, 0x6f, 0x7b, 0x69, 0x67, 0x7a, 0x60, - 0x70, 0x6e, 0x69, 0x7f, 0x68, 0x82, 0x84, 0x79, 0x91, 0x86, 0x94, - 0x92, 0x8e, 0x9e, 0x92, 0x93, 0x96, 0x8f, 0x92, 0x8a, 0x86, 0x8a, - 0x7c, 0x7d, 0x7c, 0x75, 0x75, 0x70, 0x74, 0x70, 0x6f, 0x75, 0x74, - 0x75, 0x77, 0x79, 0x7b, 0x7e, 0x7d, 0x82, 0x85, 0x82, 0x89, 0x87, - 0x8a, 0x8a, 0x89, 0x8b, 0x87, 0x8a, 0x87, 0x86, 0x85, 0x84, 0x83, - 0x7f, 0x82, 0x80, 0x7d, 0x81, 0x7e, 0x7d, 0x7a, 0x70, 0x7c, 0x73, - 0x65, 0x7b, 0x67, 0x6d, 0x71, 0x66, 0x7f, 0x69, 0x7a, 0x85, 0x77, - 0x8c, 0x83, 0x8e, 0x92, 0x89, 0x98, 0x93, 0x90, 0x94, 0x8e, 0x91, - 0x8b, 0x85, 0x8d, 0x81, 0x7e, 0x80, 0x7a, 0x7c, 0x73, 0x77, 0x78, - 0x70, 0x75, 0x75, 0x76, 0x76, 0x77, 0x7c, 0x7b, 0x7b, 0x7d, 0x81, - 0x7e, 0x80, 0x85, 0x80, 0x82, 0x84, 0x84, 0x84, 0x84, 0x88, 0x86, - 0x84, 0x88, 0x88, 0x85, 0x86, 0x88, 0x85, 0x83, 0x84, 0x84, 0x82, - 0x83, 0x80, 0x7f, 0x7b, 0x71, 0x7f, 0x6b, 0x69, 0x78, 0x5f, 0x71, - 0x66, 0x68, 0x78, 0x61, 0x7d, 0x78, 0x78, 0x89, 0x81, 0x93, 0x8d, - 0x8e, 0x9d, 0x95, 0x98, 0x99, 0x95, 0x99, 0x8f, 0x8e, 0x90, 0x82, - 0x83, 0x7f, 0x7a, 0x77, 0x70, 0x75, 0x70, 0x6b, 0x70, 0x71, 0x6f, - 0x70, 0x75, 0x78, 0x77, 0x7b, 0x80, 0x80, 0x7f, 0x83, 0x87, 0x82, - 0x86, 0x87, 0x86, 0x87, 0x85, 0x89, 0x85, 0x85, 0x89, 0x84, 0x87, - 0x86, 0x87, 0x84, 0x83, 0x87, 0x82, 0x81, 0x82, 0x82, 0x7e, 0x7e, - 0x7f, 0x79, 0x7d, 0x6b, 0x75, 0x79, 0x5a, 0x78, 0x65, 0x66, 0x75, - 0x5c, 0x83, 0x6b, 0x75, 0x8d, 0x77, 0x92, 0x88, 0x92, 0x9b, 0x8c, - 0x9e, 0x9a, 0x92, 0x98, 0x91, 0x92, 0x8d, 0x84, 0x8b, 0x7f, 0x7b, - 0x7b, 0x75, 0x77, 0x6d, 0x70, 0x72, 0x6c, 0x70, 0x71, 0x74, 0x74, - 0x77, 0x7f, 0x7f, 0x81, 0x87, 0x88, 0x89, 0x89, 0x8a, 0x8a, 0x83, - 0x87, 0x84, 0x7e, 0x81, 0x7d, 0x7e, 0x7a, 0x7b, 0x7e, 0x79, 0x7d, - 0x7e, 0x7f, 0x81, 0x82, 0x85, 0x85, 0x86, 0x88, 0x87, 0x86, 0x88, - 0x87, 0x85, 0x85, 0x86, 0x80, 0x82, 0x7c, 0x6b, 0x84, 0x68, 0x64, - 0x7b, 0x58, 0x75, 0x5f, 0x68, 0x7d, 0x5c, 0x85, 0x78, 0x80, 0x8d, - 0x82, 0x9c, 0x8f, 0x94, 0x9f, 0x95, 0x99, 0x98, 0x94, 0x96, 0x8c, - 0x8d, 0x8a, 0x80, 0x81, 0x7a, 0x79, 0x72, 0x70, 0x72, 0x6c, 0x6d, - 0x6e, 0x70, 0x70, 0x73, 0x78, 0x7a, 0x7d, 0x81, 0x84, 0x86, 0x87, - 0x89, 0x8b, 0x88, 0x8a, 0x86, 0x82, 0x84, 0x7d, 0x7e, 0x7c, 0x7b, - 0x7c, 0x7a, 0x7e, 0x7d, 0x7f, 0x81, 0x81, 0x84, 0x84, 0x86, 0x85, - 0x87, 0x86, 0x85, 0x85, 0x83, 0x84, 0x81, 0x82, 0x81, 0x81, 0x7f, - 0x7f, 0x7f, 0x7e, 0x7b, 0x69, 0x81, 0x71, 0x61, 0x7d, 0x61, 0x75, - 0x67, 0x6d, 0x81, 0x64, 0x86, 0x7d, 0x83, 0x8c, 0x87, 0x9b, 0x8d, - 0x95, 0x9b, 0x94, 0x95, 0x93, 0x94, 0x8e, 0x88, 0x89, 0x83, 0x7e, - 0x7a, 0x7a, 0x76, 0x72, 0x73, 0x72, 0x72, 0x72, 0x75, 0x77, 0x77, - 0x7b, 0x7f, 0x7e, 0x81, 0x85, 0x84, 0x85, 0x84, 0x86, 0x85, 0x80, - 0x83, 0x82, 0x7d, 0x7d, 0x7f, 0x7b, 0x7b, 0x7c, 0x7c, 0x7c, 0x7d, - 0x80, 0x7f, 0x80, 0x84, 0x84, 0x84, 0x86, 0x88, 0x86, 0x86, 0x87, - 0x86, 0x83, 0x83, 0x83, 0x7f, 0x7f, 0x7e, 0x7c, 0x7a, 0x7a, 0x7c, - 0x7a, 0x7b, 0x7d, 0x7d, 0x7c, 0x80, 0x7c, 0x77, 0x80, 0x76, 0x76, - 0x77, 0x75, 0x79, 0x72, 0x7b, 0x7a, 0x7a, 0x82, 0x82, 0x87, 0x87, - 0x8c, 0x8f, 0x8c, 0x8f, 0x90, 0x8d, 0x8b, 0x8a, 0x88, 0x83, 0x81, - 0x81, 0x7d, 0x7c, 0x7c, 0x7b, 0x7b, 0x7b, 0x7e, 0x7c, 0x7c, 0x7e, - 0x7e, 0x7e, 0x7e, 0x7f, 0x7f, 0x7e, 0x7f, 0x81, 0x7f, 0x80, 0x80, - 0x80, 0x7f, 0x80, 0x7f, 0x7d, 0x7f, 0x7d, 0x7d, 0x7d, 0x7d, 0x7f, - 0x7c, 0x7f, 0x81, 0x7f, 0x81, 0x81, 0x83, 0x81, 0x81, 0x84, 0x82, - 0x81, 0x82, 0x82, 0x80, 0x7f, 0x81, 0x80, 0x7e, 0x81, 0x81, 0x7f, - 0x81, 0x81, 0x80, 0x7f, 0x80, 0x7f, 0x7d, 0x7e, 0x7e, 0x7e, 0x7c, - 0x7d, 0x7e, 0x7d, 0x7e, 0x7d, 0x7e, 0x80, 0x7e, 0x7f, 0x7e, 0x7f, - 0x7e, 0x7d, 0x7f, 0x7d, 0x7e, 0x7f, 0x7f, 0x81, 0x81, 0x82, 0x84, - 0x84, 0x85, 0x85, 0x85, 0x85, 0x83, 0x84, 0x82, 0x80, 0x82, 0x80, - 0x80, 0x80, 0x7f, 0x80, 0x80, 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x7e, - 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x81, 0x80, 0x81, 0x81, 0x81, 0x81, - 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7e, 0x7e, 0x7d, 0x7d, 0x7d, 0x7d, - 0x7d, 0x7d, 0x7e, 0x7e, 0x7e, 0x7f, 0x7f, 0x80, 0x7e, 0x7f, 0x81, - 0x7f, 0x80, 0x80, 0x80, 0x82, 0x80, 0x81, 0x83, 0x80, 0x81, 0x81, - 0x7f, 0x80, 0x7f, 0x7e, 0x7e, 0x7e, 0x7e, 0x7d, 0x7e, 0x7f, 0x7e, - 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x81, 0x7f, 0x81, 0x81, 0x7f, 0x82, - 0x80, 0x81, 0x81, 0x80, 0x82, 0x80, 0x80, 0x81, 0x7f, 0x80, 0x80, - 0x7e, 0x7e, 0x7e, 0x7e, 0x7d, 0x7e, 0x7f, 0x7f, 0x80, 0x80, 0x81, - 0x80, 0x81, 0x81, 0x7f, 0x81, 0x7f, 0x7f, 0x80, 0x7e, 0x7e, 0x7f, - 0x7f, 0x7e, 0x7e, 0x7f, 0x7f, 0x7e, 0x7f, 0x81, 0x7f, 0x80, 0x81, - 0x80, 0x82, 0x80, 0x81, 0x81, 0x81, 0x81, 0x80, 0x81, 0x80, 0x81, - 0x7f, 0x7f, 0x80, 0x7e, 0x7f, 0x7d, 0x7d, 0x7f, 0x7c, 0x7e, 0x7f, - 0x7e, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x82, 0x80, 0x80, 0x82, 0x80, - 0x80, 0x80, 0x81, 0x80, 0x80, 0x80, 0x81, 0x80, 0x7e, 0x81, 0x7f, - 0x7e, 0x7f, 0x7d, 0x7f, 0x7e, 0x7d, 0x80, 0x7c, 0x7e, 0x80, 0x7e, - 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x81, 0x7f, - 0x81, 0x82, 0x81, 0x81, 0x82, 0x81, 0x82, 0x82, 0x81, 0x81, 0x80, - 0x7f, 0x7e, 0x7d, 0x7d, 0x7d, 0x7c, 0x7c, 0x7d, 0x7e, 0x7e, 0x7f, - 0x81, 0x80, 0x81, 0x83, 0x82, 0x80, 0x81, 0x81, 0x80, 0x7f, 0x7f, - 0x7f, 0x7e, 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x81, 0x80, 0x7f, 0x80, - 0x7f, 0x7e, 0x7f, 0x7e, 0x7e, 0x7f, 0x7f, 0x80, 0x80, 0x81, 0x81, - 0x81, 0x82, 0x82, 0x81, 0x81, 0x80, 0x80, 0x7f, 0x7e, 0x7e, 0x7d, - 0x7c, 0x7d, 0x7c, 0x7d, 0x7d, 0x7e, 0x7f, 0x7f, 0x80, 0x80, 0x80, - 0x82, 0x81, 0x81, 0x81, 0x82, 0x81, 0x81, 0x82, 0x80, 0x82, 0x81, - 0x81, 0x82, 0x80, 0x82, 0x81, 0x7f, 0x80, 0x7e, 0x7d, 0x7d, 0x7b, - 0x7b, 0x7c, 0x7b, 0x7c, 0x7d, 0x7d, 0x7f, 0x7f, 0x80, 0x80, 0x80, - 0x81, 0x80, 0x81, 0x81, 0x7f, 0x81, 0x80, 0x80, 0x82, 0x80, 0x82, - 0x81, 0x7f, 0x81, 0x7f, 0x80, 0x7f, 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x81, 0x7f, 0x80, 0x81, 0x7f, 0x81, 0x80, 0x7f, 0x80, 0x80, - 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x81, 0x80, 0x80, - 0x80, 0x7f, 0x80, 0x7f, 0x7e, 0x7f, 0x7f, 0x7e, 0x7f, 0x7e, 0x7f, - 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x7f, - 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x7f, - 0x7f, 0x7f, - }, - { // 4 - 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, - 0x7e, 0x7f, 0x80, 0x7d, 0x7f, 0x80, 0x7e, 0x7f, 0x7e, 0x81, 0x7f, - 0x81, 0x80, 0x7f, 0x7f, 0x7f, 0x80, 0x7e, 0x80, 0x7e, 0x7f, 0x7f, - 0x7e, 0x7f, 0x80, 0x7e, 0x7f, 0x7f, 0x7f, 0x7e, 0x80, 0x81, 0x7d, - 0x80, 0x7f, 0x79, 0x81, 0x7c, 0x7c, 0x84, 0x80, 0x81, 0x81, 0x80, - 0x85, 0x7a, 0x82, 0x80, 0x7d, 0x81, 0x7a, 0x80, 0x7d, 0x7e, 0x7e, - 0x80, 0x7e, 0x7f, 0x7f, 0x7c, 0x86, 0x7d, 0x7e, 0x85, 0x7b, 0x81, - 0x83, 0x76, 0x88, 0x78, 0x82, 0x83, 0x76, 0x88, 0x7a, 0x7f, 0x83, - 0x7a, 0x84, 0x7a, 0x80, 0x85, 0x73, 0x8b, 0x79, 0x7e, 0x85, 0x75, - 0x8b, 0x75, 0x83, 0x84, 0x75, 0x8a, 0x78, 0x80, 0x86, 0x75, 0x83, - 0x7d, 0x7d, 0x84, 0x7b, 0x85, 0x7f, 0x7d, 0x7e, 0x7f, 0x84, 0x77, - 0x88, 0x7d, 0x79, 0x8b, 0x71, 0x87, 0x84, 0x6e, 0x8f, 0x77, 0x7a, - 0x89, 0x78, 0x84, 0x7d, 0x7e, 0x82, 0x80, 0x79, 0x7f, 0x89, 0x75, - 0x85, 0x81, 0x74, 0x8f, 0x71, 0x7e, 0x8e, 0x6f, 0x84, 0x86, 0x76, - 0x82, 0x80, 0x80, 0x7d, 0x77, 0x8c, 0x7c, 0x7c, 0x80, 0x80, 0x7d, - 0x7d, 0x84, 0x77, 0x89, 0x7e, 0x76, 0x8d, 0x76, 0x7a, 0x8d, 0x70, - 0x85, 0x8a, 0x6d, 0x8b, 0x81, 0x6f, 0x8c, 0x7f, 0x73, 0x8e, 0x7e, - 0x74, 0x8c, 0x79, 0x7a, 0x8c, 0x71, 0x85, 0x85, 0x74, 0x84, 0x83, - 0x79, 0x7d, 0x8a, 0x74, 0x84, 0x7e, 0x7d, 0x86, 0x77, 0x8a, 0x77, - 0x7e, 0x85, 0x78, 0x81, 0x81, 0x7e, 0x84, 0x7a, 0x7d, 0x83, 0x7b, - 0x83, 0x77, 0x8d, 0x76, 0x80, 0x8a, 0x6d, 0x91, 0x78, 0x76, 0x8b, - 0x7c, 0x78, 0x87, 0x7b, 0x80, 0x7f, 0x7c, 0x83, 0x75, 0x8a, 0x7c, - 0x7b, 0x87, 0x79, 0x7f, 0x81, 0x7d, 0x7f, 0x83, 0x7a, 0x84, 0x7e, - 0x7d, 0x84, 0x77, 0x84, 0x7d, 0x81, 0x81, 0x7b, 0x8b, 0x72, 0x78, - 0x94, 0x6f, 0x7b, 0x98, 0x6d, 0x7b, 0x94, 0x65, 0x87, 0x8e, 0x6c, - 0x8c, 0x7b, 0x80, 0x82, 0x74, 0x8d, 0x79, 0x78, 0x8c, 0x79, 0x7e, - 0x7e, 0x86, 0x7d, 0x77, 0x8d, 0x76, 0x77, 0x91, 0x77, 0x75, 0x93, - 0x76, 0x78, 0x8c, 0x74, 0x83, 0x7b, 0x7e, 0x87, 0x77, 0x86, 0x7c, - 0x78, 0x8c, 0x7c, 0x76, 0x8d, 0x74, 0x7f, 0x8f, 0x6d, 0x8a, 0x7f, - 0x74, 0x8f, 0x71, 0x84, 0x86, 0x78, 0x87, 0x75, 0x88, 0x7d, 0x75, - 0x86, 0x7e, 0x7e, 0x82, 0x7a, 0x85, 0x83, 0x72, 0x89, 0x80, 0x73, - 0x8b, 0x7d, 0x7a, 0x8c, 0x76, 0x81, 0x7f, 0x7e, 0x83, 0x7a, 0x80, - 0x82, 0x7e, 0x7d, 0x83, 0x7e, 0x7c, 0x84, 0x7c, 0x7e, 0x84, 0x7a, - 0x80, 0x83, 0x7e, 0x80, 0x7f, 0x7a, 0x84, 0x7f, 0x77, 0x88, 0x7b, - 0x7d, 0x82, 0x7d, 0x7f, 0x7f, 0x80, 0x79, 0x87, 0x81, 0x71, 0x8d, - 0x80, 0x75, 0x89, 0x7e, 0x79, 0x8a, 0x7a, 0x7b, 0x8a, 0x73, 0x7f, - 0x87, 0x76, 0x81, 0x86, 0x7b, 0x7d, 0x89, 0x78, 0x7c, 0x8a, 0x79, - 0x7e, 0x88, 0x79, 0x7b, 0x88, 0x73, 0x82, 0x8a, 0x72, 0x88, 0x82, - 0x74, 0x83, 0x80, 0x7e, 0x84, 0x7e, 0x7e, 0x82, 0x7c, 0x82, 0x7b, - 0x7f, 0x88, 0x74, 0x87, 0x86, 0x6f, 0x8e, 0x7f, 0x74, 0x8a, 0x7a, - 0x7b, 0x87, 0x7c, 0x7b, 0x85, 0x7f, 0x7e, 0x82, 0x7f, 0x81, 0x7e, - 0x80, 0x83, 0x7e, 0x7e, 0x7e, 0x7f, 0x7a, 0x82, 0x7f, 0x7a, 0x88, - 0x7d, 0x81, 0x83, 0x7e, 0x83, 0x7a, 0x82, 0x7b, 0x7e, 0x80, 0x7b, - 0x83, 0x81, 0x80, 0x7f, 0x86, 0x78, 0x84, 0x84, 0x75, 0x88, 0x7f, - 0x7b, 0x84, 0x7c, 0x7f, 0x81, 0x7c, 0x7c, 0x85, 0x79, 0x80, 0x84, - 0x7a, 0x83, 0x83, 0x7d, 0x81, 0x7f, 0x83, 0x76, 0x87, 0x81, 0x73, - 0x89, 0x7f, 0x78, 0x86, 0x81, 0x78, 0x88, 0x81, 0x75, 0x8d, 0x7d, - 0x7a, 0x86, 0x7a, 0x81, 0x7d, 0x7d, 0x7e, 0x7f, 0x7d, 0x7c, 0x7f, - 0x7b, 0x81, 0x7a, 0x7c, 0x81, 0x7d, 0x7b, 0x82, 0x81, 0x7c, 0x86, - 0x85, 0x7e, 0x8a, 0x85, 0x82, 0x89, 0x85, 0x83, 0x8b, 0x83, 0x83, - 0x86, 0x80, 0x81, 0x80, 0x7b, 0x81, 0x82, 0x78, 0x85, 0x7e, 0x79, - 0x81, 0x7a, 0x7c, 0x81, 0x80, 0x7d, 0x83, 0x7e, 0x80, 0x84, 0x7b, - 0x88, 0x81, 0x84, 0x61, 0x68, 0x91, 0x52, 0x64, 0x75, 0x61, 0x77, - 0x66, 0x74, 0x81, 0x89, 0x87, 0x87, 0xa5, 0x99, 0x9b, 0x9e, 0x9e, - 0xa0, 0x97, 0x8f, 0x8a, 0x8d, 0x80, 0x72, 0x77, 0x76, 0x6a, 0x68, - 0x6c, 0x6d, 0x70, 0x70, 0x78, 0x80, 0x81, 0x81, 0x8b, 0x8d, 0x8a, - 0x8c, 0x8e, 0x8c, 0x88, 0x85, 0x84, 0x85, 0x7d, 0x7a, 0x7e, 0x7b, - 0x79, 0x79, 0x7c, 0x7e, 0x7c, 0x81, 0x7f, 0x84, 0x88, 0x84, 0x83, - 0x53, 0x6b, 0x95, 0x3e, 0x53, 0x79, 0x57, 0x69, 0x61, 0x6f, 0x7f, - 0x8c, 0x8a, 0x83, 0xb1, 0xaa, 0x96, 0xa5, 0xac, 0xa3, 0x9c, 0x93, - 0x8a, 0x91, 0x82, 0x72, 0x72, 0x78, 0x6b, 0x63, 0x69, 0x6c, 0x6e, - 0x65, 0x72, 0x79, 0x79, 0x7d, 0x84, 0x8c, 0x89, 0x8d, 0x8e, 0x90, - 0x90, 0x8a, 0x8b, 0x8b, 0x85, 0x7f, 0x80, 0x83, 0x77, 0x7b, 0x7c, - 0x7a, 0x79, 0x7d, 0x7d, 0x7e, 0x85, 0x7d, 0x86, 0x84, 0x86, 0x62, - 0x4d, 0x98, 0x58, 0x37, 0x7b, 0x5b, 0x60, 0x64, 0x6c, 0x77, 0x86, - 0x98, 0x7d, 0xa0, 0xbb, 0x9c, 0x9d, 0xb1, 0xa9, 0x9c, 0x9b, 0x8a, - 0x8d, 0x89, 0x7a, 0x6b, 0x71, 0x78, 0x5f, 0x63, 0x6c, 0x70, 0x67, - 0x66, 0x7a, 0x79, 0x7b, 0x7b, 0x89, 0x8f, 0x89, 0x8d, 0x8f, 0x98, - 0x8c, 0x89, 0x8e, 0x8a, 0x83, 0x7c, 0x82, 0x7f, 0x79, 0x77, 0x7a, - 0x7c, 0x78, 0x7b, 0x7e, 0x81, 0x82, 0x7d, 0x85, 0x85, 0x87, 0x7e, - 0x41, 0x70, 0x95, 0x33, 0x50, 0x73, 0x5e, 0x61, 0x5e, 0x78, 0x77, - 0x98, 0x90, 0x7d, 0xb4, 0xb8, 0x98, 0x9e, 0xb5, 0xa7, 0x9b, 0x92, - 0x8c, 0x89, 0x86, 0x75, 0x63, 0x77, 0x74, 0x5b, 0x61, 0x6f, 0x75, - 0x68, 0x69, 0x75, 0x84, 0x7e, 0x78, 0x88, 0x94, 0x8d, 0x86, 0x90, - 0x95, 0x8d, 0x87, 0x84, 0x88, 0x85, 0x7b, 0x78, 0x80, 0x7d, 0x75, - 0x78, 0x79, 0x7b, 0x7b, 0x79, 0x7e, 0x80, 0x81, 0x7d, 0x85, 0x87, - 0x8b, 0x7d, 0x42, 0x79, 0x8c, 0x3c, 0x57, 0x6b, 0x68, 0x5e, 0x63, - 0x76, 0x72, 0x9a, 0x8c, 0x81, 0xa8, 0xb3, 0x9e, 0x96, 0xae, 0xa8, - 0x99, 0x94, 0x8c, 0x87, 0x89, 0x7b, 0x6a, 0x72, 0x76, 0x6b, 0x63, - 0x6f, 0x75, 0x6e, 0x71, 0x72, 0x7c, 0x81, 0x7e, 0x7d, 0x88, 0x91, - 0x86, 0x84, 0x8a, 0x8c, 0x87, 0x81, 0x82, 0x84, 0x81, 0x79, 0x78, - 0x7a, 0x7e, 0x78, 0x76, 0x7c, 0x7e, 0x7b, 0x7b, 0x7c, 0x83, 0x81, - 0x7d, 0x80, 0x84, 0x87, 0x83, 0x8c, 0x69, 0x5c, 0x8f, 0x6f, 0x54, - 0x67, 0x6e, 0x6b, 0x60, 0x73, 0x6a, 0x79, 0x8e, 0x80, 0x85, 0x98, - 0xa6, 0x96, 0x97, 0xa6, 0x9f, 0x9b, 0x98, 0x8e, 0x87, 0x8c, 0x85, - 0x72, 0x75, 0x7c, 0x70, 0x6a, 0x72, 0x73, 0x70, 0x72, 0x74, 0x74, - 0x7e, 0x7e, 0x79, 0x7d, 0x87, 0x84, 0x7f, 0x81, 0x85, 0x83, 0x83, - 0x81, 0x7f, 0x84, 0x81, 0x7d, 0x7c, 0x81, 0x7f, 0x7a, 0x7c, 0x7d, - 0x7d, 0x7d, 0x7c, 0x7d, 0x7f, 0x7e, 0x7e, 0x7d, 0x81, 0x80, 0x7f, - 0x80, 0x82, 0x82, 0x80, 0x76, 0x77, 0x7c, 0x77, 0x75, 0x72, 0x75, - 0x75, 0x75, 0x79, 0x77, 0x7c, 0x82, 0x84, 0x86, 0x89, 0x8d, 0x8c, - 0x8d, 0x8b, 0x8b, 0x89, 0x8a, 0x86, 0x84, 0x83, 0x82, 0x82, 0x7e, - 0x7f, 0x7c, 0x7d, 0x7e, 0x7c, 0x7a, 0x7c, 0x7c, 0x7b, 0x7b, 0x7c, - 0x7c, 0x7d, 0x7e, 0x7d, 0x7e, 0x7f, 0x81, 0x80, 0x80, 0x80, 0x82, - 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x7d, 0x7e, 0x7e, 0x7e, 0x7c, - 0x7e, 0x7e, 0x7e, 0x7d, 0x7d, 0x7c, 0x7e, 0x7d, 0x7d, 0x7d, 0x7e, - 0x7f, 0x7e, 0x7f, 0x7f, 0x81, 0x80, 0x81, 0x81, 0x81, 0x82, 0x81, - 0x80, 0x7f, 0x80, 0x7f, 0x7e, 0x7f, 0x7d, 0x7f, 0x7e, 0x7d, 0x7e, - 0x7d, 0x7f, 0x7e, 0x7f, 0x80, 0x81, 0x80, 0x81, 0x81, 0x83, 0x82, - 0x83, 0x82, 0x84, 0x82, 0x82, 0x82, 0x81, 0x82, 0x81, 0x81, 0x7f, - 0x81, 0x7f, 0x7e, 0x80, 0x7e, 0x7e, 0x7c, 0x7d, 0x7d, 0x7c, 0x7d, - 0x7b, 0x7c, 0x7d, 0x7d, 0x7c, 0x7e, 0x7d, 0x80, 0x7d, 0x80, 0x7f, - 0x80, 0x80, 0x80, 0x7f, 0x81, 0x7f, 0x80, 0x7f, 0x80, 0x7e, 0x7f, - 0x7e, 0x7d, 0x7e, 0x7d, 0x7e, 0x7d, 0x7e, 0x7f, 0x7f, 0x7e, 0x7f, - 0x7e, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x81, 0x81, 0x7f, 0x81, 0x81, - 0x82, 0x81, 0x80, 0x81, 0x80, 0x81, 0x7f, 0x80, 0x7f, 0x80, 0x7f, - 0x7f, 0x7f, 0x7f, 0x80, 0x7e, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, - 0x7e, 0x7f, 0x7e, 0x7d, 0x7f, 0x7d, 0x7f, 0x7e, 0x7f, 0x7f, 0x80, - 0x7f, 0x81, 0x80, 0x80, 0x81, 0x7f, 0x80, 0x7f, 0x7e, 0x7f, 0x7d, - 0x7e, 0x7d, 0x7d, 0x7d, 0x7f, 0x7d, 0x7d, 0x7f, 0x7e, 0x80, 0x80, - 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, - 0x80, 0x7f, 0x81, 0x7f, 0x81, 0x80, 0x81, 0x80, 0x7f, 0x80, 0x7f, - 0x80, 0x7f, 0x7d, 0x7f, 0x7d, 0x7e, 0x7d, 0x7f, 0x7e, 0x7f, 0x7f, - 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x81, 0x7f, - 0x80, 0x7f, 0x81, 0x81, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7d, 0x7d, - 0x7d, 0x7c, 0x7d, 0x7c, 0x7d, 0x7e, 0x7d, 0x7f, 0x7e, 0x80, 0x80, - 0x81, 0x82, 0x81, 0x81, 0x80, 0x81, 0x80, 0x80, 0x7f, 0x80, 0x80, - 0x7d, 0x7e, 0x7f, 0x7f, 0x7d, 0x7f, 0x7e, 0x7f, 0x7e, 0x7f, 0x7e, - 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x80, 0x7e, 0x80, 0x7e, 0x7f, 0x7f, - 0x7e, 0x7f, 0x7f, 0x7f, 0x80, 0x7e, 0x80, 0x7f, 0x80, 0x7f, 0x80, - 0x7f, 0x80, 0x7e, 0x80, 0x7e, 0x80, 0x7e, 0x7f, 0x7e, 0x7e, 0x7e, - 0x7f, 0x7d, 0x7e, 0x7e, 0x7f, 0x7e, 0x7f, 0x7f, 0x7e, 0x7f, 0x7f, - 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x81, - 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x7e, 0x7f, - 0x7e, 0x7f, 0x7e, 0x7f, 0x7e, 0x7f, 0x7e, 0x7f, 0x7e, 0x7f, 0x80, - 0x7e, 0x80, 0x7e, 0x7e, 0x81, 0x7e, 0x7f, 0x80, 0x80, 0x80, 0x80, - 0x7f, 0x80, 0x81, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x80, 0x7e, - 0x7f, 0x7e, 0x7f, 0x7d, 0x7f, 0x7e, 0x7d, 0x7c, 0x77, 0x82, 0x82, - 0x7e, 0x80, 0x7e, 0x7e, 0x7f, 0x7e, 0x7f, 0x7f, 0x83, 0x7f, 0x7c, - 0x86, 0x75, 0x7c, 0x85, 0x81, 0x85, 0x84, 0x82, 0x7b, 0x7e, 0x81, - 0x80, 0x7f, 0x7b, 0x7d, 0x7e, 0x7d, 0x7f, 0x7f, 0x7e, 0x7f, 0x7e, - 0x7f, 0x81, 0x80, 0x7f, 0x80, 0x7e, 0x80, 0x7f, 0x81, 0x7e, 0x7e, - 0x7f, 0x7e, 0x7e, 0x80, 0x7c, 0x7d, 0x7e, 0x7e, 0x7e, 0x7f, 0x7f, - 0x79, 0x7c, 0x82, 0x82, 0x82, 0x84, 0x81, 0x80, 0x81, 0x78, 0x7f, - 0x7e, 0x7f, 0x7c, 0x79, 0x7e, 0x7d, 0x7f, 0x75, 0x7f, 0x85, 0x82, - 0x85, 0x86, 0x85, 0x83, 0x7f, 0x7c, 0x82, 0x83, 0x81, 0x80, 0x7e, - 0x80, 0x7d, 0x7b, 0x7c, 0x7c, 0x7d, 0x7c, 0x78, 0x7b, 0x7c, 0x7e, - 0x7e, 0x7d, 0x80, 0x81, 0x81, 0x80, 0x83, 0x84, 0x82, 0x81, 0x7f, - 0x80, 0x7f, 0x7f, 0x7f, 0x7c, 0x7f, 0x7d, 0x7f, 0x7d, 0x7e, 0x7f, - 0x7f, 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x7d, 0x7e, - 0x7f, 0x7c, 0x7e, 0x7f, 0x80, 0x80, 0x7d, 0x81, 0x7f, 0x7d, 0x81, - 0x7e, 0x80, 0x81, 0x7f, 0x80, 0x81, 0x82, 0x7e, 0x81, 0x83, 0x80, - 0x81, 0x81, 0x80, 0x80, 0x81, 0x80, 0x7f, 0x7f, 0x7f, 0x7d, 0x7c, - 0x81, 0x7c, 0x7d, 0x7f, 0x7a, 0x80, 0x81, 0x7c, 0x7e, 0x83, 0x80, - 0x7d, 0x7f, 0x83, 0x81, 0x81, 0x7f, 0x7f, 0x7f, 0x81, 0x7a, 0x7e, - 0x81, 0x7d, 0x7d, 0x7c, 0x7e, 0x7f, 0x7d, 0x7d, 0x81, 0x7d, 0x7f, - 0x7d, 0x7b, 0x7c, 0x7a, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7f, 0x7e, - 0x82, 0x84, 0x85, 0x87, 0x89, 0x8a, 0x8b, 0x8d, 0x88, 0x8a, 0x8a, - 0x85, 0x84, 0x83, 0x83, 0x7f, 0x80, 0x7e, 0x81, 0x7e, 0x7b, 0x7d, - 0x7e, 0x7d, 0x7d, 0x7d, 0x7f, 0x7d, 0x7f, 0x80, 0x7f, 0x80, 0x6d, - 0x58, 0x70, 0x77, 0x59, 0x5e, 0x65, 0x6f, 0x71, 0x75, 0x7e, 0x7b, - 0x93, 0xa3, 0x94, 0x92, 0xa3, 0xab, 0x9e, 0x94, 0x98, 0x92, 0x8e, - 0x89, 0x79, 0x72, 0x76, 0x6d, 0x64, 0x69, 0x6b, 0x6e, 0x72, 0x7c, - 0x7e, 0x82, 0x8f, 0x8d, 0x90, 0x92, 0x96, 0x93, 0x8e, 0x90, 0x89, - 0x87, 0x82, 0x7d, 0x7a, 0x7a, 0x7d, 0x78, 0x7e, 0x7d, 0x7c, 0x6c, - 0x40, 0x65, 0x7c, 0x45, 0x4b, 0x58, 0x67, 0x6c, 0x64, 0x82, 0x7a, - 0x8f, 0xb6, 0x9d, 0x96, 0xb3, 0xbf, 0xac, 0x96, 0x9d, 0xa2, 0x89, - 0x84, 0x7f, 0x63, 0x72, 0x77, 0x61, 0x58, 0x60, 0x74, 0x60, 0x62, - 0x7d, 0x76, 0x82, 0x89, 0x8f, 0x8e, 0x96, 0xa3, 0x8d, 0x93, 0x9d, - 0x94, 0x8a, 0x8b, 0x91, 0x7f, 0x7e, 0x87, 0x7d, 0x7e, 0x82, 0x81, - 0x7d, 0x6c, 0x44, 0x5c, 0x7d, 0x3e, 0x3f, 0x55, 0x5e, 0x69, 0x52, - 0x7a, 0x7e, 0x89, 0xb5, 0x98, 0x9c, 0xbd, 0xc5, 0xb3, 0x98, 0xab, - 0xb1, 0x8e, 0x80, 0x81, 0x6d, 0x71, 0x6e, 0x54, 0x59, 0x5e, 0x73, - 0x64, 0x57, 0x77, 0x77, 0x7e, 0x81, 0x83, 0x94, 0x91, 0x9c, 0x8d, - 0x8f, 0xa0, 0x94, 0x8c, 0x8a, 0x93, 0x90, 0x80, 0x84, 0x83, 0x86, - 0x85, 0x80, 0x84, 0x7e, 0x81, 0x58, 0x40, 0x78, 0x64, 0x31, 0x48, - 0x57, 0x66, 0x57, 0x5d, 0x81, 0x7d, 0x9c, 0xab, 0x90, 0xad, 0xc8, - 0xbb, 0xa6, 0x9e, 0xb9, 0xa8, 0x7f, 0x84, 0x7e, 0x6f, 0x73, 0x5d, - 0x56, 0x5e, 0x65, 0x6b, 0x53, 0x6a, 0x87, 0x75, 0x78, 0x81, 0x90, - 0x92, 0x87, 0x92, 0x8c, 0x96, 0x95, 0x83, 0x89, 0x90, 0x8f, 0x7f, - 0x81, 0x91, 0x84, 0x80, 0x84, 0x88, 0x89, 0x85, 0x89, 0x80, 0x71, - 0x56, 0x60, 0x73, 0x42, 0x41, 0x58, 0x57, 0x5a, 0x54, 0x6f, 0x7e, - 0x83, 0x9e, 0x99, 0x9f, 0xbd, 0xbb, 0xab, 0xa7, 0xb4, 0xb0, 0x91, - 0x85, 0x8d, 0x7b, 0x71, 0x6a, 0x59, 0x62, 0x61, 0x61, 0x5c, 0x60, - 0x7b, 0x76, 0x6f, 0x81, 0x8a, 0x89, 0x86, 0x8f, 0x8e, 0x8c, 0x93, - 0x89, 0x86, 0x8b, 0x8b, 0x82, 0x7f, 0x8b, 0x87, 0x84, 0x83, 0x87, - 0x8b, 0x87, 0x88, 0x89, 0x88, 0x84, 0x76, 0x5a, 0x57, 0x74, 0x54, - 0x35, 0x53, 0x5c, 0x5b, 0x51, 0x62, 0x80, 0x8e, 0x93, 0xab, 0xaa, - 0x9c, 0xb3, 0xb5, 0xa2, 0x9e, 0x9d, 0x95, 0x8a, 0x7a, 0x79, 0x70, - 0x6d, 0x67, 0x59, 0x69, 0x6b, 0x60, 0x68, 0x72, 0x7e, 0x7d, 0x7f, - 0x8a, 0x8d, 0x93, 0x8c, 0x8c, 0x95, 0x89, 0x83, 0x82, 0x82, 0x78, - 0x74, 0x78, 0x73, 0x76, 0x75, 0x79, 0x80, 0x83, 0x84, 0x89, 0x90, - 0x91, 0x90, 0x95, 0x93, 0x93, 0x91, 0x8d, 0x82, 0x70, 0x61, 0x6b, - 0x64, 0x3c, 0x51, 0x5a, 0x49, 0x54, 0x57, 0x69, 0x77, 0x7e, 0x8a, - 0x93, 0xad, 0xae, 0xa2, 0xb7, 0xba, 0xaa, 0xa7, 0xa0, 0x9a, 0x92, - 0x7f, 0x79, 0x72, 0x6e, 0x66, 0x58, 0x65, 0x67, 0x5f, 0x66, 0x6d, - 0x79, 0x79, 0x7c, 0x85, 0x89, 0x8e, 0x8c, 0x85, 0x93, 0x8d, 0x7f, - 0x83, 0x87, 0x7c, 0x75, 0x7d, 0x7b, 0x79, 0x7d, 0x7e, 0x82, 0x87, - 0x86, 0x8a, 0x91, 0x90, 0x8a, 0x91, 0x90, 0x8a, 0x89, 0x87, 0x87, - 0x7d, 0x73, 0x60, 0x5a, 0x71, 0x4e, 0x3d, 0x60, 0x56, 0x51, 0x5b, - 0x66, 0x79, 0x7c, 0x8a, 0x91, 0xa0, 0xb5, 0xa8, 0xa5, 0xbf, 0xb5, - 0xa5, 0xa3, 0x9e, 0x9a, 0x87, 0x7d, 0x77, 0x6c, 0x6f, 0x5c, 0x58, - 0x68, 0x63, 0x5d, 0x64, 0x6e, 0x76, 0x73, 0x7c, 0x85, 0x89, 0x8e, - 0x8b, 0x90, 0x95, 0x8c, 0x8c, 0x8a, 0x89, 0x82, 0x7f, 0x7f, 0x7d, - 0x7e, 0x79, 0x7d, 0x7e, 0x7f, 0x7c, 0x80, 0x84, 0x7f, 0x81, 0x7f, - 0x7f, 0x80, 0x80, 0x7d, 0x7f, 0x81, 0x7f, 0x7e, 0x7f, 0x7d, 0x77, - 0x73, 0x7d, 0x72, 0x6c, 0x73, 0x70, 0x70, 0x71, 0x74, 0x78, 0x79, - 0x81, 0x82, 0x82, 0x8d, 0x8e, 0x8b, 0x92, 0x92, 0x91, 0x8f, 0x8f, - 0x8f, 0x89, 0x8a, 0x87, 0x7f, 0x82, 0x7f, 0x7b, 0x79, 0x7b, 0x79, - 0x75, 0x77, 0x79, 0x78, 0x77, 0x7b, 0x79, 0x7b, 0x7d, 0x7b, 0x7d, - 0x7e, 0x81, 0x7d, 0x7d, 0x82, 0x7d, 0x7e, 0x80, 0x81, 0x80, 0x80, - 0x81, 0x7f, 0x82, 0x81, 0x81, 0x82, 0x84, 0x81, 0x81, 0x82, 0x82, - 0x80, 0x83, 0x81, 0x81, 0x80, 0x82, 0x81, 0x81, 0x81, 0x80, 0x7f, - 0x80, 0x7d, 0x7d, 0x7d, 0x78, 0x77, 0x7b, 0x76, 0x6f, 0x76, 0x72, - 0x72, 0x74, 0x75, 0x76, 0x79, 0x7e, 0x7f, 0x7f, 0x89, 0x89, 0x88, - 0x8f, 0x91, 0x8e, 0x90, 0x8e, 0x8e, 0x89, 0x8a, 0x87, 0x80, 0x83, - 0x7f, 0x7a, 0x7b, 0x7c, 0x77, 0x77, 0x78, 0x7a, 0x77, 0x79, 0x7a, - 0x78, 0x7b, 0x7a, 0x7a, 0x7e, 0x7d, 0x7d, 0x7d, 0x81, 0x81, 0x7d, - 0x82, 0x85, 0x7d, 0x82, 0x81, 0x80, 0x7e, 0x81, 0x80, 0x7d, 0x82, - 0x7e, 0x80, 0x82, 0x7f, 0x80, 0x81, 0x83, 0x7f, 0x83, 0x83, 0x83, - 0x81, 0x84, 0x82, 0x83, 0x82, 0x80, 0x82, 0x82, 0x80, 0x80, 0x80, - 0x7d, 0x7b, 0x73, 0x70, 0x7a, 0x6c, 0x67, 0x74, 0x6c, 0x6e, 0x71, - 0x74, 0x79, 0x7d, 0x81, 0x84, 0x8c, 0x91, 0x8d, 0x92, 0x9b, 0x92, - 0x92, 0x94, 0x8f, 0x8d, 0x87, 0x82, 0x81, 0x7c, 0x78, 0x73, 0x75, - 0x75, 0x6e, 0x72, 0x74, 0x75, 0x76, 0x77, 0x7b, 0x80, 0x7e, 0x81, - 0x82, 0x86, 0x84, 0x83, 0x85, 0x85, 0x82, 0x80, 0x81, 0x7d, 0x7c, - 0x7a, 0x78, 0x78, 0x77, 0x78, 0x79, 0x7b, 0x7c, 0x81, 0x84, 0x84, - 0x87, 0x8a, 0x8b, 0x8b, 0x8a, 0x8b, 0x8a, 0x86, 0x85, 0x82, 0x83, - 0x80, 0x7f, 0x80, 0x7d, 0x7d, 0x7f, 0x78, 0x7a, 0x6c, 0x5b, 0x81, - 0x64, 0x4a, 0x7c, 0x61, 0x60, 0x71, 0x6c, 0x82, 0x80, 0x85, 0x90, - 0x99, 0xa4, 0x92, 0x9f, 0xae, 0x95, 0x98, 0x9c, 0x8c, 0x90, 0x7e, - 0x7a, 0x81, 0x6f, 0x6d, 0x6a, 0x70, 0x69, 0x64, 0x73, 0x71, 0x71, - 0x79, 0x78, 0x85, 0x85, 0x80, 0x8e, 0x8e, 0x8b, 0x89, 0x8c, 0x8f, - 0x84, 0x84, 0x81, 0x7c, 0x7b, 0x72, 0x70, 0x73, 0x6b, 0x6d, 0x6f, - 0x73, 0x75, 0x7a, 0x80, 0x85, 0x8a, 0x8d, 0x92, 0x93, 0x92, 0x93, - 0x93, 0x8e, 0x89, 0x88, 0x84, 0x7e, 0x7a, 0x79, 0x78, 0x75, 0x76, - 0x78, 0x7e, 0x7a, 0x7c, 0x7c, 0x83, 0x68, 0x5c, 0x95, 0x55, 0x4e, - 0x8b, 0x57, 0x69, 0x73, 0x6a, 0x8d, 0x7f, 0x84, 0x97, 0x9f, 0x9e, - 0x90, 0xa7, 0xab, 0x89, 0x9c, 0x95, 0x86, 0x8d, 0x6f, 0x7e, 0x7c, - 0x64, 0x6d, 0x6f, 0x6f, 0x69, 0x6d, 0x7d, 0x75, 0x79, 0x80, 0x83, - 0x8e, 0x83, 0x86, 0x99, 0x8a, 0x86, 0x8c, 0x8b, 0x86, 0x7a, 0x7f, - 0x7b, 0x74, 0x71, 0x69, 0x73, 0x70, 0x62, 0x71, 0x7b, 0x6e, 0x76, - 0x85, 0x84, 0x82, 0x8b, 0x91, 0x92, 0x8d, 0x91, 0x97, 0x90, 0x85, - 0x8c, 0x8d, 0x80, 0x7d, 0x82, 0x7e, 0x78, 0x77, 0x7c, 0x7a, 0x77, - 0x79, 0x81, 0x7f, 0x79, 0x80, 0x7e, 0x7c, 0x6a, 0x61, 0x7f, 0x60, - 0x4e, 0x75, 0x62, 0x65, 0x6e, 0x6e, 0x89, 0x82, 0x86, 0x9b, 0xa1, - 0xa2, 0x9b, 0xaa, 0xac, 0x95, 0x9b, 0x99, 0x8c, 0x87, 0x75, 0x7b, - 0x75, 0x63, 0x68, 0x69, 0x6a, 0x63, 0x69, 0x77, 0x75, 0x77, 0x82, - 0x87, 0x8e, 0x87, 0x8f, 0x98, 0x8c, 0x8b, 0x8c, 0x8c, 0x84, 0x79, - 0x7d, 0x78, 0x72, 0x6e, 0x6f, 0x6f, 0x6c, 0x6f, 0x70, 0x77, 0x78, - 0x79, 0x82, 0x84, 0x85, 0x86, 0x90, 0x8b, 0x88, 0x8e, 0x8c, 0x89, - 0x85, 0x87, 0x86, 0x80, 0x81, 0x80, 0x82, 0x7c, 0x7f, 0x83, 0x7f, - 0x7e, 0x80, 0x83, 0x82, 0x7f, 0x85, 0x83, 0x81, 0x7c, 0x7c, 0x71, - 0x56, 0x7c, 0x63, 0x42, 0x75, 0x5d, 0x5c, 0x6f, 0x6b, 0x83, 0x82, - 0x8b, 0x9a, 0xa3, 0xa7, 0x9e, 0xae, 0xb0, 0x97, 0xa0, 0x9a, 0x8a, - 0x88, 0x73, 0x79, 0x73, 0x62, 0x65, 0x68, 0x6a, 0x61, 0x6b, 0x78, - 0x73, 0x79, 0x83, 0x86, 0x8f, 0x87, 0x8d, 0x95, 0x8c, 0x88, 0x89, - 0x88, 0x80, 0x79, 0x7d, 0x75, 0x73, 0x6f, 0x71, 0x74, 0x71, 0x6c, - 0x7a, 0x7c, 0x74, 0x7e, 0x86, 0x86, 0x85, 0x88, 0x90, 0x89, 0x88, - 0x89, 0x8b, 0x85, 0x7f, 0x86, 0x82, 0x7e, 0x7e, 0x81, 0x80, 0x7c, - 0x81, 0x83, 0x81, 0x7f, 0x83, 0x83, 0x7e, 0x81, 0x81, 0x81, 0x7d, - 0x80, 0x7e, 0x80, 0x75, 0x72, 0x6b, 0x63, 0x73, 0x55, 0x5f, 0x73, - 0x5f, 0x70, 0x75, 0x80, 0x87, 0x89, 0x9a, 0x9e, 0xa2, 0xa1, 0xa0, - 0xa7, 0x9a, 0x91, 0x93, 0x85, 0x80, 0x75, 0x70, 0x73, 0x65, 0x66, - 0x6d, 0x6e, 0x6e, 0x72, 0x80, 0x7f, 0x82, 0x89, 0x8f, 0x90, 0x8b, - 0x8e, 0x8f, 0x88, 0x83, 0x81, 0x81, 0x7a, 0x73, 0x76, 0x75, 0x72, - 0x70, 0x74, 0x76, 0x73, 0x75, 0x7c, 0x7d, 0x79, 0x7e, 0x85, 0x81, - 0x81, 0x86, 0x89, 0x85, 0x87, 0x89, 0x89, 0x85, 0x86, 0x87, 0x85, - 0x81, 0x81, 0x82, 0x7c, 0x7c, 0x7e, 0x7e, 0x7b, 0x7b, 0x7e, 0x7c, - 0x7c, 0x7e, 0x80, 0x80, 0x7f, 0x82, 0x82, 0x81, 0x80, 0x82, 0x82, - 0x78, 0x65, 0x78, 0x6f, 0x58, 0x6b, 0x6f, 0x68, 0x6e, 0x7a, 0x81, - 0x84, 0x8c, 0x92, 0x9e, 0x9a, 0x97, 0x9f, 0x98, 0x90, 0x8d, 0x8c, - 0x81, 0x7b, 0x78, 0x76, 0x74, 0x70, 0x72, 0x79, 0x77, 0x78, 0x7f, - 0x83, 0x80, 0x84, 0x88, 0x87, 0x85, 0x83, 0x84, 0x82, 0x7e, 0x7b, - 0x7f, 0x7b, 0x76, 0x7b, 0x79, 0x77, 0x77, 0x78, 0x78, 0x76, 0x78, - 0x7c, 0x7b, 0x7a, 0x7f, 0x82, 0x82, 0x84, 0x88, 0x8a, 0x88, 0x8a, - 0x8b, 0x8a, 0x86, 0x84, 0x85, 0x80, 0x7d, 0x7c, 0x7d, 0x79, 0x79, - 0x7a, 0x7d, 0x7b, 0x7d, 0x80, 0x80, 0x81, 0x81, 0x83, 0x84, 0x80, - 0x83, 0x80, 0x7f, 0x7e, 0x7d, 0x7d, 0x7a, 0x7f, 0x71, 0x66, 0x7f, - 0x68, 0x62, 0x73, 0x71, 0x6f, 0x75, 0x80, 0x7f, 0x8a, 0x89, 0x8f, - 0x99, 0x90, 0x92, 0x96, 0x91, 0x89, 0x8d, 0x88, 0x82, 0x82, 0x7d, - 0x7e, 0x7d, 0x78, 0x7c, 0x7c, 0x78, 0x78, 0x7e, 0x7a, 0x79, 0x7c, - 0x7d, 0x7e, 0x7c, 0x7e, 0x80, 0x80, 0x80, 0x81, 0x83, 0x7f, 0x80, - 0x81, 0x7d, 0x7c, 0x7b, 0x7c, 0x79, 0x7a, 0x7a, 0x7d, 0x7c, 0x7e, - 0x80, 0x82, 0x82, 0x84, 0x84, 0x85, 0x84, 0x83, 0x84, 0x82, 0x81, - 0x7f, 0x7f, 0x7c, 0x7d, 0x7d, 0x7d, 0x7c, 0x7e, 0x7e, 0x7f, 0x80, - 0x7e, 0x80, 0x81, 0x80, 0x7f, 0x80, 0x7e, 0x7f, 0x7e, 0x7c, 0x7d, - 0x7d, 0x7b, 0x7c, 0x7c, 0x7c, 0x7c, 0x7f, 0x7e, 0x7f, 0x80, 0x81, - 0x81, 0x7e, 0x7e, 0x80, 0x7e, 0x7d, 0x7f, 0x80, 0x7d, 0x80, 0x80, - 0x7f, 0x7f, 0x80, 0x7f, 0x81, 0x7f, 0x81, 0x81, 0x82, 0x82, 0x84, - 0x83, 0x83, 0x83, 0x83, 0x83, 0x82, 0x81, 0x81, 0x80, 0x7f, 0x7d, - 0x80, 0x7e, 0x7d, 0x7c, 0x7f, 0x7d, 0x7d, 0x7f, 0x7e, 0x7f, 0x7f, - 0x7e, 0x7e, 0x7d, 0x7e, 0x7e, 0x7d, 0x7e, 0x7e, 0x7f, 0x7d, 0x7e, - 0x7f, 0x80, 0x7e, 0x80, 0x7f, 0x80, 0x81, 0x80, 0x81, 0x81, 0x81, - 0x80, 0x81, 0x81, 0x7f, 0x81, 0x7f, 0x7f, 0x80, 0x7e, 0x7f, 0x7e, - 0x7d, 0x7d, 0x7e, 0x7b, 0x7b, 0x7d, 0x7b, 0x7a, 0x7c, 0x7b, 0x7c, - 0x7c, 0x7e, 0x7d, 0x80, 0x7f, 0x81, 0x81, 0x82, 0x81, 0x83, 0x82, - 0x80, 0x82, 0x81, 0x81, 0x80, 0x81, 0x81, 0x82, 0x80, 0x81, 0x82, - 0x80, 0x81, 0x80, 0x82, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, - 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x81, 0x80, 0x81, 0x80, 0x81, 0x7f, - 0x7f, 0x7f, 0x7e, 0x7e, 0x7d, 0x7e, 0x7e, 0x7c, 0x7e, 0x7e, 0x7d, - 0x7e, 0x7c, 0x7e, 0x7f, 0x7e, 0x7d, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, - 0x80, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x80, - 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7e, 0x7e, 0x7d, - 0x7e, 0x7c, 0x7c, 0x7c, 0x7d, 0x7c, 0x7d, 0x7d, 0x7f, 0x7e, 0x80, - 0x81, 0x82, 0x81, 0x83, 0x83, 0x83, 0x83, 0x83, 0x82, 0x83, 0x81, - 0x82, 0x80, 0x80, 0x7e, 0x7f, 0x7e, 0x7c, 0x7e, 0x7d, 0x7e, 0x7d, - 0x7e, 0x7f, 0x7f, 0x80, 0x81, 0x80, 0x81, 0x81, 0x82, 0x81, 0x81, - 0x80, - }, - { // 5 - 0x7f, 0x7f, 0x7f, 0x7c, 0x7a, 0x7c, 0x7d, 0x7a, 0x7b, 0x81, 0x83, - 0x82, 0x85, 0x87, 0x87, 0x88, 0x87, 0x84, 0x83, 0x84, 0x81, 0x7c, - 0x7c, 0x7f, 0x7d, 0x7a, 0x7c, 0x7f, 0x7e, 0x7e, 0x81, 0x82, 0x82, - 0x83, 0x82, 0x82, 0x83, 0x81, 0x7e, 0x7e, 0x7f, 0x7c, 0x7b, 0x7c, - 0x7c, 0x7b, 0x7c, 0x7d, 0x7d, 0x7e, 0x7f, 0x7f, 0x7f, 0x80, 0x80, - 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x81, 0x82, 0x81, 0x82, 0x81, 0x82, 0x82, 0x82, 0x82, - 0x81, 0x82, 0x81, 0x83, 0x83, 0x83, 0x83, 0x83, 0x85, 0x84, 0x84, - 0x85, 0x85, 0x83, 0x78, 0x5c, 0x68, 0x7a, 0x57, 0x5d, 0x6f, 0x69, - 0x7e, 0x81, 0x7e, 0x96, 0xa6, 0x9f, 0x99, 0xa1, 0xa2, 0x94, 0x89, - 0x7e, 0x74, 0x79, 0x6c, 0x5b, 0x69, 0x70, 0x6f, 0x73, 0x7e, 0x8b, - 0x92, 0x90, 0x91, 0x9a, 0x95, 0x89, 0x84, 0x82, 0x7b, 0x74, 0x6e, - 0x71, 0x7a, 0x77, 0x7d, 0x8a, 0x8d, 0x91, 0x98, 0x99, 0x98, 0x92, - 0x54, 0x4f, 0x83, 0x49, 0x34, 0x5b, 0x52, 0x70, 0x82, 0x74, 0x95, - 0xbe, 0xb8, 0xa4, 0xa3, 0xaf, 0xa2, 0x7b, 0x6d, 0x62, 0x64, 0x67, - 0x46, 0x56, 0x7c, 0x81, 0x89, 0x8d, 0xa2, 0xb5, 0xa7, 0x94, 0x89, - 0x8f, 0x7f, 0x5b, 0x56, 0x60, 0x62, 0x59, 0x66, 0x80, 0x90, 0x95, - 0x96, 0xa5, 0xaa, 0x9c, 0x8a, 0x87, 0x87, 0x78, 0x6d, 0x6d, 0x76, - 0x7a, 0x7e, 0x85, 0x8b, 0x81, 0x50, 0x6a, 0x8b, 0x53, 0x5d, 0x72, - 0x6d, 0x8b, 0x8b, 0x7f, 0x99, 0xb0, 0x9f, 0x88, 0x87, 0x92, 0x81, - 0x66, 0x68, 0x67, 0x77, 0x7d, 0x68, 0x80, 0x9d, 0x98, 0x94, 0x8e, - 0x95, 0x96, 0x7e, 0x70, 0x6c, 0x72, 0x69, 0x59, 0x68, 0x7e, 0x81, - 0x7f, 0x8a, 0x98, 0x97, 0x8f, 0x87, 0x8b, 0x89, 0x7a, 0x74, 0x7b, - 0x81, 0x7e, 0x7f, 0x87, 0x8e, 0x91, 0x91, 0x92, 0x8f, 0x7f, 0x40, - 0x38, 0x78, 0x52, 0x3b, 0x72, 0x7c, 0x96, 0xb3, 0x98, 0x9d, 0xc4, - 0xa8, 0x75, 0x70, 0x6e, 0x67, 0x59, 0x4f, 0x65, 0x86, 0x9a, 0x90, - 0x94, 0xb5, 0xaf, 0x94, 0x82, 0x71, 0x73, 0x68, 0x50, 0x58, 0x71, - 0x7e, 0x82, 0x8c, 0x99, 0xa1, 0x97, 0x83, 0x7d, 0x7d, 0x6b, 0x61, - 0x6c, 0x7c, 0x84, 0x85, 0x8e, 0x97, 0x97, 0x8b, 0x81, 0x85, 0x85, - 0x7b, 0x79, 0x83, 0x89, 0x83, 0x81, 0x70, 0x41, 0x5c, 0x86, 0x53, - 0x5d, 0x89, 0x86, 0x9a, 0xa3, 0x8d, 0x92, 0xa8, 0x8a, 0x65, 0x70, - 0x72, 0x6d, 0x6f, 0x6f, 0x80, 0x96, 0x9d, 0x90, 0x8c, 0x9a, 0x8e, - 0x78, 0x6f, 0x69, 0x72, 0x75, 0x6f, 0x7b, 0x8b, 0x93, 0x8e, 0x85, - 0x86, 0x83, 0x6f, 0x65, 0x6d, 0x74, 0x77, 0x7e, 0x8b, 0x97, 0x9a, - 0x8e, 0x85, 0x89, 0x7f, 0x72, 0x72, 0x7a, 0x82, 0x84, 0x86, 0x8d, - 0x95, 0x92, 0x8d, 0x84, 0x7e, 0x56, 0x22, 0x5c, 0x79, 0x53, 0x78, - 0x96, 0x9f, 0xb9, 0xac, 0x85, 0x86, 0x96, 0x6b, 0x4b, 0x5f, 0x6c, - 0x7d, 0x88, 0x89, 0x9e, 0xb0, 0xa7, 0x86, 0x73, 0x7c, 0x6f, 0x5e, - 0x5d, 0x67, 0x84, 0x92, 0x90, 0x96, 0x9c, 0x99, 0x84, 0x69, 0x64, - 0x6c, 0x66, 0x62, 0x75, 0x8d, 0x96, 0x96, 0x93, 0x93, 0x91, 0x7c, - 0x6d, 0x74, 0x79, 0x76, 0x79, 0x84, 0x91, 0x8f, 0x8b, 0x87, 0x89, - 0x8f, 0x84, 0x7f, 0x7a, 0x75, 0x4d, 0x2b, 0x6f, 0x8a, 0x67, 0x87, - 0x9c, 0x9f, 0xb0, 0x99, 0x70, 0x78, 0x8b, 0x66, 0x54, 0x6d, 0x80, - 0x90, 0x8f, 0x8d, 0x99, 0xa2, 0x97, 0x73, 0x68, 0x79, 0x73, 0x6b, - 0x6e, 0x78, 0x93, 0x97, 0x8d, 0x8b, 0x8c, 0x89, 0x76, 0x64, 0x67, - 0x74, 0x7a, 0x7a, 0x81, 0x90, 0x94, 0x8c, 0x7f, 0x7d, 0x7f, 0x75, - 0x72, 0x7a, 0x86, 0x89, 0x86, 0x89, 0x8d, 0x89, 0x81, 0x7c, 0x81, - 0x86, 0x81, 0x82, 0x89, 0x8c, 0x84, 0x7c, 0x54, 0x2b, 0x70, 0x85, - 0x53, 0x7b, 0x9f, 0x9f, 0xaf, 0xa0, 0x7a, 0x87, 0x92, 0x63, 0x50, - 0x67, 0x7c, 0x83, 0x82, 0x90, 0x9e, 0xa8, 0x9f, 0x78, 0x75, 0x81, - 0x6e, 0x65, 0x67, 0x79, 0x8f, 0x8e, 0x8c, 0x8e, 0x93, 0x8b, 0x74, - 0x67, 0x6b, 0x6f, 0x6f, 0x78, 0x87, 0x90, 0x96, 0x90, 0x86, 0x83, - 0x7a, 0x70, 0x6e, 0x77, 0x7f, 0x81, 0x87, 0x8d, 0x90, 0x8c, 0x84, - 0x81, 0x80, 0x7e, 0x7c, 0x7c, 0x7f, 0x86, 0x89, 0x89, 0x89, 0x86, - 0x75, 0x38, 0x3f, 0x8a, 0x6a, 0x5b, 0x92, 0x9b, 0xa6, 0xb1, 0x88, - 0x7d, 0x96, 0x79, 0x55, 0x56, 0x72, 0x82, 0x7a, 0x8a, 0x99, 0xa6, - 0xad, 0x86, 0x77, 0x84, 0x75, 0x65, 0x5d, 0x6b, 0x85, 0x87, 0x88, - 0x93, 0x9d, 0x9c, 0x85, 0x72, 0x74, 0x71, 0x67, 0x63, 0x68, 0x80, - 0x91, 0x8c, 0x8b, 0x96, 0x91, 0x7d, 0x72, 0x71, 0x74, 0x73, 0x74, - 0x7e, 0x8f, 0x8f, 0x88, 0x8c, 0x8f, 0x86, 0x7c, 0x7b, 0x7d, 0x7f, - 0x7b, 0x7d, 0x86, 0x8c, 0x8c, 0x8c, 0x8b, 0x86, 0x6f, 0x32, 0x44, - 0x81, 0x55, 0x56, 0x90, 0x96, 0xac, 0xad, 0x8c, 0x99, 0xa0, 0x7a, - 0x58, 0x5c, 0x77, 0x6c, 0x6a, 0x83, 0x93, 0xae, 0xa3, 0x8a, 0x98, - 0x95, 0x79, 0x66, 0x60, 0x6f, 0x72, 0x6c, 0x78, 0x8c, 0x9c, 0x91, - 0x85, 0x8d, 0x88, 0x79, 0x68, 0x63, 0x72, 0x6c, 0x6f, 0x87, 0x8c, - 0x91, 0x93, 0x8d, 0x89, 0x84, 0x75, 0x70, 0x75, 0x73, 0x76, 0x81, - 0x87, 0x8a, 0x8e, 0x8d, 0x8b, 0x86, 0x7d, 0x79, 0x7a, 0x78, 0x77, - 0x7c, 0x80, 0x84, 0x86, 0x88, 0x8b, 0x8c, 0x89, 0x80, 0x75, 0x4b, - 0x48, 0x7d, 0x5c, 0x53, 0x8a, 0x8b, 0x99, 0xa3, 0x92, 0xa4, 0xa5, - 0x88, 0x70, 0x72, 0x7c, 0x63, 0x5f, 0x73, 0x7c, 0x8e, 0x8a, 0x88, - 0xa2, 0x9d, 0x8c, 0x86, 0x81, 0x7e, 0x6d, 0x63, 0x6a, 0x74, 0x78, - 0x74, 0x84, 0x94, 0x90, 0x8e, 0x8d, 0x8c, 0x87, 0x76, 0x6f, 0x74, - 0x6f, 0x64, 0x74, 0x7e, 0x7d, 0x86, 0x89, 0x8c, 0x8f, 0x88, 0x82, - 0x81, 0x7b, 0x76, 0x79, 0x79, 0x7b, 0x80, 0x84, 0x86, 0x85, 0x87, - 0x89, 0x86, 0x80, 0x7f, 0x80, 0x7f, 0x7c, 0x7c, 0x7f, 0x80, 0x7f, - 0x83, 0x85, 0x87, 0x83, 0x7f, 0x6e, 0x51, 0x75, 0x73, 0x4d, 0x74, - 0x7b, 0x80, 0x94, 0x85, 0x9b, 0xa8, 0x96, 0x91, 0x8d, 0x8e, 0x7c, - 0x6d, 0x70, 0x6d, 0x73, 0x6d, 0x72, 0x89, 0x86, 0x8a, 0x95, 0x96, - 0x98, 0x8c, 0x84, 0x83, 0x7b, 0x6f, 0x66, 0x6e, 0x71, 0x6d, 0x74, - 0x7d, 0x89, 0x8c, 0x89, 0x90, 0x93, 0x8d, 0x84, 0x80, 0x7a, 0x75, - 0x73, 0x6d, 0x72, 0x76, 0x77, 0x7b, 0x80, 0x83, 0x87, 0x88, 0x88, - 0x8a, 0x8a, 0x88, 0x84, 0x80, 0x7f, 0x7c, 0x76, 0x76, 0x78, 0x7a, - 0x7e, 0x80, 0x87, 0x8b, 0x8b, 0x8a, 0x8a, 0x88, 0x83, 0x7e, 0x7c, - 0x7a, 0x78, 0x79, 0x77, 0x77, 0x60, 0x70, 0x83, 0x5b, 0x73, 0x7e, - 0x6f, 0x8a, 0x7a, 0x86, 0x9f, 0x8e, 0x91, 0x96, 0x97, 0x8d, 0x83, - 0x83, 0x7c, 0x7e, 0x70, 0x6f, 0x7f, 0x74, 0x78, 0x7d, 0x80, 0x88, - 0x80, 0x83, 0x8a, 0x8a, 0x86, 0x83, 0x8a, 0x85, 0x81, 0x7d, 0x79, - 0x7a, 0x71, 0x6f, 0x74, 0x74, 0x77, 0x79, 0x81, 0x88, 0x87, 0x88, - 0x8d, 0x8a, 0x86, 0x81, 0x7e, 0x7d, 0x76, 0x75, 0x79, 0x7a, 0x7a, - 0x7e, 0x81, 0x83, 0x84, 0x85, 0x85, 0x83, 0x83, 0x84, 0x82, 0x81, - 0x83, 0x83, 0x82, 0x80, 0x7f, 0x82, 0x7f, 0x7b, 0x7c, 0x7d, 0x7c, - 0x7a, 0x7e, 0x82, 0x83, 0x83, 0x86, 0x86, 0x85, 0x7d, 0x73, 0x7d, - 0x74, 0x69, 0x72, 0x6d, 0x71, 0x76, 0x75, 0x80, 0x85, 0x84, 0x8b, - 0x8f, 0x8d, 0x8e, 0x8b, 0x8a, 0x8c, 0x86, 0x85, 0x88, 0x84, 0x83, - 0x84, 0x82, 0x81, 0x7e, 0x7b, 0x7a, 0x79, 0x77, 0x78, 0x79, 0x7a, - 0x7c, 0x7c, 0x7f, 0x80, 0x80, 0x80, 0x81, 0x80, 0x81, 0x81, 0x81, - 0x82, 0x82, 0x82, 0x81, 0x82, 0x80, 0x7e, 0x7e, 0x7c, 0x7b, 0x7c, - 0x7c, 0x7e, 0x80, 0x82, 0x82, 0x82, 0x82, 0x80, 0x80, 0x7e, 0x7d, - 0x7e, 0x7e, 0x7f, 0x82, 0x83, 0x83, 0x84, 0x83, 0x82, 0x82, 0x80, - 0x7e, 0x7f, 0x7e, 0x7c, 0x7c, 0x7d, 0x7f, 0x7f, 0x7e, 0x7f, 0x7f, - 0x7e, 0x7e, 0x7d, 0x7f, 0x80, 0x80, 0x80, 0x81, 0x82, 0x81, 0x7f, - 0x7f, 0x7e, 0x7e, 0x7e, 0x7d, 0x7e, 0x80, 0x7f, 0x81, 0x7f, 0x7f, - 0x84, 0x81, 0x7e, 0x7e, 0x80, 0x81, 0x81, 0x80, 0x80, 0x83, 0x82, - 0x81, 0x82, 0x82, 0x82, 0x81, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x80, - 0x80, 0x80, 0x81, 0x82, 0x81, 0x80, 0x7f, 0x7e, 0x7d, 0x7b, 0x7a, - 0x7b, 0x7c, 0x7c, 0x7d, 0x7f, 0x81, 0x81, 0x82, 0x81, 0x81, 0x81, - 0x7f, 0x7d, 0x7f, 0x7e, 0x7e, 0x7f, 0x80, 0x82, 0x82, 0x82, 0x82, - 0x82, 0x82, 0x80, 0x80, 0x81, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7e, - 0x7e, 0x7c, 0x7d, 0x7e, 0x7d, 0x7f, 0x7f, 0x80, 0x82, 0x82, 0x82, - 0x81, 0x7f, 0x80, 0x7e, 0x7d, 0x7d, 0x7e, 0x80, 0x80, 0x80, 0x82, - 0x83, 0x82, 0x81, 0x80, 0x80, 0x81, 0x7f, 0x7d, 0x7f, 0x80, 0x7f, - 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x81, 0x82, 0x82, 0x82, 0x81, 0x81, 0x80, 0x7e, 0x7d, 0x7d, 0x7d, - 0x7d, 0x7e, 0x7f, 0x81, 0x84, 0x84, 0x84, 0x83, 0x83, 0x80, 0x7d, - 0x7b, 0x7b, 0x7a, 0x7a, 0x7c, 0x7f, 0x81, 0x82, 0x82, 0x83, 0x83, - 0x82, 0x80, 0x7f, 0x7d, 0x7d, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x81, - 0x81, 0x81, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x81, 0x81, 0x81, - 0x81, 0x80, 0x7e, 0x7d, 0x7d, 0x7d, 0x7d, 0x7e, 0x7f, 0x80, 0x81, - 0x82, 0x82, 0x81, 0x80, 0x7f, 0x7d, 0x7d, 0x7d, 0x7e, 0x7e, 0x80, - 0x82, 0x82, 0x82, 0x82, 0x81, 0x80, 0x7f, 0x7e, 0x7e, 0x7e, 0x7f, - 0x7f, 0x80, 0x81, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7e, 0x7e, 0x7e, - 0x7f, 0x7f, 0x80, 0x80, 0x81, 0x81, 0x80, 0x80, 0x7f, 0x7e, 0x7e, - 0x7e, 0x7e, 0x7f, 0x7e, 0x7f, 0x80, 0x80, 0x80, 0x81, 0x81, 0x81, - 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7e, 0x7f, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x82, 0x81, 0x80, 0x80, 0x80, 0x80, - 0x7f, 0x7e, 0x7f, 0x80, 0x7f, 0x7e, 0x7e, 0x80, 0x80, 0x7f, 0x7f, - 0x80, 0x80, 0x80, 0x7e, 0x7f, 0x80, 0x80, 0x7e, 0x7f, 0x80, 0x81, - 0x80, 0x80, 0x80, 0x81, 0x80, 0x7e, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, - 0x80, 0x81, 0x81, 0x80, 0x80, 0x81, 0x80, 0x7e, 0x7d, 0x7d, 0x7d, - 0x7d, 0x7d, 0x7e, 0x80, 0x81, 0x81, 0x81, 0x82, 0x82, 0x80, 0x7f, - 0x7f, 0x7e, 0x7e, 0x7e, 0x7f, 0x7f, 0x7f, 0x80, 0x81, 0x81, 0x81, - 0x80, 0x7f, 0x80, 0x7f, 0x7e, 0x7e, 0x7f, 0x80, 0x81, 0x80, 0x80, - 0x81, 0x81, 0x7f, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7f, 0x80, 0x81, - 0x81, 0x82, 0x82, 0x82, 0x80, 0x7f, 0x7f, 0x7f, 0x7e, 0x7e, 0x7e, - 0x7e, 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, - 0x80, 0x81, 0x81, 0x80, 0x80, 0x81, 0x80, 0x80, 0x80, 0x7f, 0x7f, - 0x7f, 0x7e, 0x7e, 0x7e, 0x7f, 0x7f, 0x80, 0x81, 0x81, 0x81, 0x81, - 0x81, 0x80, 0x7f, 0x7e, 0x7e, 0x7d, 0x7d, 0x7d, 0x7d, 0x7f, 0x81, - 0x81, 0x82, 0x83, 0x84, 0x83, 0x81, 0x80, 0x7f, 0x7e, 0x7c, 0x7c, - 0x7d, 0x7e, 0x7f, 0x7f, 0x81, 0x82, 0x82, 0x81, 0x80, 0x80, 0x7f, - 0x7e, 0x7d, 0x7e, 0x7f, 0x7f, 0x7f, 0x80, 0x81, 0x81, 0x80, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x81, 0x80, - 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x7f, - 0x80, 0x7f, 0x7e, 0x7e, 0x7f, 0x7f, 0x80, 0x80, 0x81, 0x81, 0x81, - 0x80, 0x80, 0x7f, 0x7e, 0x7e, 0x7e, 0x7f, 0x7f, 0x7f, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, - 0x7f, 0x80, 0x81, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x80, - 0x80, 0x7f, 0x7e, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x7f, - 0x7f, 0x80, 0x7f, 0x7f, 0x7e, 0x7f, 0x80, 0x80, 0x80, 0x81, 0x82, - 0x81, 0x80, 0x80, 0x80, 0x7f, 0x7e, 0x7d, 0x7e, 0x7e, 0x7e, 0x7e, - 0x80, 0x81, 0x82, 0x81, 0x80, 0x81, 0x81, 0x7f, 0x7e, 0x7e, 0x7f, - 0x7e, 0x7f, 0x80, 0x81, 0x81, 0x80, 0x80, 0x80, 0x81, 0x7d, 0x7c, - 0x7f, 0x80, 0x81, 0x80, 0x81, 0x80, 0x80, 0x81, 0x81, 0x7f, 0x7f, - 0x7f, 0x7e, 0x7e, 0x7e, 0x7f, 0x7f, 0x80, 0x81, 0x81, 0x80, 0x80, - 0x80, 0x7f, 0x7f, 0x7e, 0x7f, 0x7e, 0x7f, 0x7f, 0x7f, 0x80, 0x81, - 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, - 0x80, 0x80, 0x81, 0x81, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x7f, - 0x7e, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, - 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, - 0x80, 0x81, 0x81, 0x81, 0x81, 0x80, 0x80, 0x7f, 0x7e, 0x7d, 0x7d, - 0x7e, 0x7f, 0x80, 0x80, 0x81, 0x81, 0x82, 0x81, 0x81, 0x80, 0x7f, - 0x7e, 0x7e, 0x7e, 0x7d, 0x7f, 0x7f, 0x80, 0x81, 0x80, 0x82, 0x81, - 0x80, 0x80, 0x7f, 0x7f, 0x7e, 0x7e, 0x7e, 0x80, 0x7f, 0x80, 0x81, - 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x81, 0x80, 0x7f, - 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7e, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x81, 0x7f, 0x7e, 0x80, 0x7e, 0x7f, 0x80, 0x7e, 0x80, 0x7f, 0x80, - 0x80, 0x80, 0x7f, 0x80, 0x7e, 0x7f, 0x7f, 0x7e, 0x80, 0x80, 0x7f, - 0x81, 0x7f, 0x81, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7e, - 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x81, 0x80, 0x80, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7e, 0x7e, 0x7e, 0x81, 0x80, 0x80, 0x80, 0x80, 0x81, 0x7f, - 0x7e, 0x7f, 0x7f, 0x7e, 0x7f, 0x7f, 0x80, 0x81, 0x7f, 0x80, 0x80, - 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7e, 0x80, 0x81, 0x7e, 0x82, - 0x7e, 0x7e, 0x82, 0x7c, 0x80, 0x82, 0x7f, 0x80, 0x80, 0x7d, 0x7f, - 0x80, 0x7e, 0x80, 0x80, 0x80, 0x81, 0x7f, 0x80, 0x81, 0x7e, 0x7f, - 0x7f, 0x7d, 0x80, 0x7e, 0x7f, 0x80, 0x7f, 0x81, 0x7f, 0x7f, 0x82, - 0x80, 0x7f, 0x82, 0x7e, 0x7f, 0x7f, 0x7e, 0x80, 0x7f, 0x7f, 0x80, - 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x81, 0x7f, 0x80, 0x80, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7e, 0x80, 0x81, 0x7f, 0x80, - 0x80, 0x80, 0x81, 0x7e, 0x80, 0x7f, 0x7f, 0x7f, 0x7e, 0x80, 0x7f, - 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x81, 0x7e, - 0x81, 0x7f, 0x7e, 0x81, 0x7f, 0x7e, 0x81, 0x7e, 0x7f, 0x81, 0x7d, - 0x80, 0x82, 0x7e, 0x81, 0x81, 0x7c, 0x83, 0x7f, 0x7e, 0x7f, 0x7e, - 0x80, 0x7e, 0x7f, 0x81, 0x80, 0x81, 0x81, 0x7f, 0x81, 0x7f, 0x7f, - 0x7e, 0x80, 0x7d, 0x81, 0x7f, 0x7f, 0x83, 0x7d, 0x80, 0x81, 0x7e, - 0x7f, 0x80, 0x7c, 0x81, 0x7f, 0x7f, 0x81, 0x7f, 0x81, 0x7f, 0x80, - 0x7f, 0x7f, 0x80, 0x7f, 0x7e, 0x7f, 0x80, 0x81, 0x80, 0x7f, 0x81, - 0x82, 0x7d, 0x80, 0x80, 0x7d, 0x82, 0x7e, 0x7e, 0x81, 0x7f, 0x80, - 0x80, 0x7f, 0x81, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7e, 0x81, - 0x7f, 0x7f, 0x81, 0x7e, 0x82, 0x80, 0x80, 0x81, 0x7f, 0x7f, 0x7f, - 0x80, 0x7e, 0x7f, 0x80, 0x7e, 0x81, 0x7f, 0x7f, 0x80, 0x80, 0x80, - 0x7f, 0x81, 0x7f, 0x80, 0x7f, 0x7e, 0x81, 0x7e, 0x80, 0x7f, 0x7f, - 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, - 0x7f, 0x80, 0x7f, 0x81, 0x7f, 0x80, 0x81, 0x7f, 0x80, 0x7f, 0x7e, - 0x7f, 0x80, 0x7d, 0x81, 0x7f, 0x7f, 0x82, 0x7f, 0x80, 0x82, 0x7e, - 0x7f, 0x80, 0x7d, 0x80, 0x7f, 0x7e, 0x81, 0x81, 0x7f, 0x82, 0x7f, - 0x80, 0x81, 0x7d, 0x80, 0x7d, 0x80, 0x80, 0x7e, 0x81, 0x81, 0x7f, - 0x80, 0x80, 0x7f, 0x81, 0x7d, 0x7e, 0x82, 0x7e, 0x7f, 0x81, 0x7f, - 0x82, 0x81, 0x7d, 0x82, 0x7f, 0x7f, 0x80, 0x7d, 0x80, 0x82, 0x7e, - 0x81, 0x80, 0x7f, 0x81, 0x7e, 0x80, 0x7f, 0x7e, 0x81, 0x7e, 0x7f, - 0x81, 0x7e, 0x80, 0x81, 0x7d, 0x80, 0x7f, 0x7e, 0x80, 0x80, 0x80, - 0x7f, 0x81, 0x80, 0x80, 0x81, 0x7f, 0x80, 0x81, 0x7f, 0x7f, 0x80, - 0x7d, 0x80, 0x7e, 0x7e, 0x81, 0x7e, 0x81, 0x7f, 0x80, 0x81, 0x80, - 0x80, 0x80, 0x7f, 0x7e, 0x81, 0x7e, 0x80, 0x7f, 0x81, 0x80, 0x7f, - 0x82, 0x7d, 0x80, 0x80, 0x7d, 0x7f, 0x80, 0x7d, 0x81, 0x81, 0x7e, - 0x82, 0x80, 0x80, 0x81, 0x7e, 0x80, 0x80, 0x7e, 0x80, 0x7e, 0x80, - 0x80, 0x7e, 0x80, 0x81, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x7f, 0x7f, - 0x7f, 0x80, 0x80, 0x7e, 0x81, 0x7f, 0x7f, 0x81, 0x7e, 0x7f, 0x7f, - 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x81, 0x7e, 0x80, 0x81, 0x7f, 0x80, - 0x80, 0x80, 0x7f, 0x81, 0x7d, 0x7f, 0x80, 0x7e, 0x80, 0x7f, 0x81, - 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x7e, 0x80, 0x80, 0x7f, - 0x80, 0x81, 0x80, 0x80, 0x80, 0x7f, 0x7e, 0x80, 0x7e, 0x7f, 0x80, - 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x81, 0x7f, 0x80, 0x80, 0x7f, 0x81, - 0x7f, 0x7f, 0x80, 0x80, 0x7e, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x80, - 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x80, - }, - { // 6 - 0x80, 0x80, 0x80, 0x7f, 0x7e, 0x80, 0x81, 0x80, 0x7f, 0x7e, 0x7f, - 0x81, 0x80, 0x7f, 0x7e, 0x7f, 0x81, 0x80, 0x7f, 0x7e, 0x7f, 0x81, - 0x81, 0x7f, 0x7e, 0x7f, 0x81, 0x81, 0x7f, 0x7e, 0x7e, 0x81, 0x81, - 0x80, 0x7e, 0x7d, 0x80, 0x82, 0x81, 0x7d, 0x7d, 0x80, 0x83, 0x80, - 0x7d, 0x7d, 0x81, 0x82, 0x7f, 0x7d, 0x7f, 0x82, 0x81, 0x7e, 0x7e, - 0x80, 0x82, 0x80, 0x7d, 0x7e, 0x82, 0x82, 0x7f, 0x7c, 0x7f, 0x82, - 0x81, 0x7e, 0x7d, 0x80, 0x82, 0x80, 0x7e, 0x7e, 0x80, 0x81, 0x80, - 0x7f, 0x7f, 0x7f, 0x80, 0x81, 0x7f, 0x7e, 0x80, 0x81, 0x80, 0x7e, - 0x7e, 0x80, 0x81, 0x80, 0x7e, 0x7e, 0x81, 0x81, 0x7f, 0x7d, 0x7e, - 0x81, 0x82, 0x80, 0x7c, 0x7d, 0x82, 0x83, 0x7e, 0x7c, 0x7f, 0x83, - 0x81, 0x7d, 0x7e, 0x80, 0x81, 0x80, 0x7f, 0x7f, 0x80, 0x81, 0x80, - 0x7f, 0x7e, 0x80, 0x82, 0x7f, 0x7d, 0x7f, 0x81, 0x80, 0x80, 0x7e, - 0x7e, 0x80, 0x82, 0x7f, 0x7e, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x80, - 0x7e, 0x7f, 0x82, 0x81, 0x7c, 0x7e, 0x82, 0x80, 0x7d, 0x80, 0x81, - 0x7d, 0x7f, 0x83, 0x80, 0x7d, 0x7d, 0x82, 0x84, 0x7e, 0x7b, 0x80, - 0x82, 0x80, 0x7e, 0x80, 0x7f, 0x7e, 0x80, 0x83, 0x81, 0x7a, 0x7d, - 0x85, 0x82, 0x7c, 0x7c, 0x81, 0x82, 0x7e, 0x80, 0x80, 0x7d, 0x7e, - 0x83, 0x83, 0x7a, 0x7b, 0x84, 0x85, 0x7c, 0x7b, 0x81, 0x82, 0x80, - 0x7e, 0x7f, 0x80, 0x7e, 0x82, 0x83, 0x7b, 0x7c, 0x84, 0x82, 0x7d, - 0x7e, 0x7e, 0x83, 0x81, 0x7e, 0x7d, 0x7f, 0x84, 0x82, 0x7c, 0x79, - 0x82, 0x86, 0x7f, 0x7a, 0x7c, 0x85, 0x85, 0x7c, 0x7c, 0x7e, 0x81, - 0x84, 0x81, 0x7b, 0x79, 0x84, 0x86, 0x7d, 0x7b, 0x7d, 0x81, 0x84, - 0x81, 0x79, 0x7b, 0x87, 0x84, 0x78, 0x7e, 0x83, 0x81, 0x7f, 0x80, - 0x7d, 0x7d, 0x87, 0x84, 0x77, 0x78, 0x88, 0x87, 0x7a, 0x78, 0x82, - 0x87, 0x7f, 0x7c, 0x7d, 0x83, 0x82, 0x7e, 0x7e, 0x7f, 0x80, 0x82, - 0x7f, 0x7b, 0x7f, 0x86, 0x80, 0x76, 0x7f, 0x89, 0x83, 0x77, 0x79, - 0x85, 0x85, 0x7e, 0x7c, 0x80, 0x80, 0x80, 0x82, 0x80, 0x7a, 0x80, - 0x84, 0x7e, 0x7b, 0x80, 0x89, 0x7a, 0x75, 0x88, 0x86, 0x7b, 0x7c, - 0x7e, 0x84, 0x82, 0x7e, 0x80, 0x7c, 0x7e, 0x85, 0x83, 0x7a, 0x7d, - 0x81, 0x83, 0x81, 0x7c, 0x7e, 0x7f, 0x80, 0x83, 0x7f, 0x7b, 0x82, - 0x81, 0x7e, 0x7d, 0x82, 0x83, 0x7c, 0x7e, 0x7e, 0x81, 0x85, 0x7f, - 0x78, 0x7e, 0x84, 0x84, 0x7f, 0x79, 0x7c, 0x87, 0x84, 0x7c, 0x7d, - 0x7c, 0x81, 0x86, 0x81, 0x79, 0x7c, 0x84, 0x83, 0x81, 0x7a, 0x7c, - 0x84, 0x83, 0x7c, 0x80, 0x7d, 0x7d, 0x85, 0x84, 0x7e, 0x76, 0x7e, - 0x86, 0x87, 0x7d, 0x75, 0x81, 0x85, 0x83, 0x7f, 0x7d, 0x7b, 0x80, - 0x84, 0x7f, 0x80, 0x7f, 0x7d, 0x80, 0x83, 0x7e, 0x80, 0x81, 0x7c, - 0x7b, 0x86, 0x85, 0x7a, 0x7d, 0x7b, 0x81, 0x8a, 0x7d, 0x76, 0x7f, - 0x87, 0x84, 0x7a, 0x7a, 0x82, 0x88, 0x7e, 0x73, 0x85, 0x88, 0x7d, - 0x7a, 0x7c, 0x85, 0x82, 0x7e, 0x7c, 0x7e, 0x83, 0x7f, 0x83, 0x7b, - 0x7a, 0x86, 0x81, 0x7d, 0x79, 0x83, 0x86, 0x7b, 0x7c, 0x81, 0x80, - 0x7c, 0x84, 0x83, 0x7f, 0x78, 0x79, 0x8d, 0x86, 0x77, 0x78, 0x7f, - 0x8b, 0x80, 0x78, 0x7f, 0x7e, 0x84, 0x87, 0x7c, 0x71, 0x84, 0x8b, - 0x80, 0x79, 0x76, 0x87, 0x86, 0x7e, 0x7b, 0x7e, 0x83, 0x7f, 0x82, - 0x80, 0x77, 0x82, 0x87, 0x7e, 0x7d, 0x7b, 0x84, 0x80, 0x7e, 0x84, - 0x76, 0x82, 0x88, 0x79, 0x80, 0x80, 0x7e, 0x83, 0x7c, 0x7f, 0x86, - 0x7f, 0x76, 0x7f, 0x86, 0x82, 0x85, 0x79, 0x77, 0x83, 0x85, 0x84, - 0x7e, 0x79, 0x7c, 0x81, 0x87, 0x82, 0x77, 0x83, 0x7f, 0x79, 0x86, - 0x85, 0x7a, 0x7a, 0x83, 0x83, 0x7e, 0x80, 0x7f, 0x7b, 0x83, 0x83, - 0x7b, 0x7c, 0x80, 0x86, 0x85, 0x78, 0x78, 0x80, 0x87, 0x81, 0x7f, - 0x85, 0x76, 0x78, 0x89, 0x85, 0x80, 0x7d, 0x74, 0x84, 0x8e, 0x79, - 0x7a, 0x80, 0x7f, 0x7d, 0x8c, 0x7f, 0x71, 0x87, 0x7a, 0x80, 0x8a, - 0x7e, 0x7b, 0x77, 0x85, 0x83, 0x7f, 0x7d, 0x7a, 0x8a, 0x81, 0x73, - 0x82, 0x85, 0x80, 0x7d, 0x7e, 0x81, 0x80, 0x81, 0x7d, 0x83, 0x80, - 0x79, 0x86, 0x7e, 0x7a, 0x89, 0x7e, 0x7a, 0x81, 0x7f, 0x7f, 0x81, - 0x86, 0x79, 0x78, 0x86, 0x84, 0x81, 0x7d, 0x75, 0x84, 0x8e, 0x75, - 0x79, 0x82, 0x86, 0x81, 0x79, 0x81, 0x7a, 0x85, 0x85, 0x7b, 0x7d, - 0x7d, 0x86, 0x7f, 0x7c, 0x83, 0x78, 0x7f, 0x8f, 0x7b, 0x6f, 0x84, - 0x8d, 0x7b, 0x79, 0x88, 0x7a, 0x79, 0x84, 0x8c, 0x7a, 0x73, 0x87, - 0x7b, 0x83, 0x8a, 0x7b, 0x75, 0x7c, 0x8c, 0x80, 0x7a, 0x86, 0x7d, - 0x75, 0x84, 0x8d, 0x7c, 0x75, 0x80, 0x85, 0x81, 0x80, 0x81, 0x7b, - 0x7a, 0x87, 0x83, 0x78, 0x81, 0x86, 0x76, 0x80, 0x8a, 0x75, 0x82, - 0x80, 0x7a, 0x8a, 0x80, 0x79, 0x7b, 0x84, 0x83, 0x7b, 0x87, 0x7e, - 0x72, 0x87, 0x86, 0x7f, 0x7b, 0x7e, 0x80, 0x82, 0x84, 0x7a, 0x7e, - 0x85, 0x7f, 0x7b, 0x87, 0x7a, 0x7b, 0x86, 0x7f, 0x83, 0x82, 0x78, - 0x79, 0x89, 0x83, 0x7b, 0x7d, 0x83, 0x83, 0x74, 0x81, 0x8a, 0x7f, - 0x78, 0x7c, 0x85, 0x84, 0x7a, 0x7e, 0x84, 0x7c, 0x82, 0x7a, 0x7c, - 0x8a, 0x86, 0x74, 0x75, 0x8e, 0x83, 0x79, 0x7b, 0x83, 0x84, 0x7e, - 0x7e, 0x7f, 0x78, 0x87, 0x89, 0x74, 0x82, 0x7b, 0x7f, 0x95, 0x77, - 0x69, 0x8d, 0x85, 0x7e, 0x81, 0x72, 0x8a, 0x82, 0x7c, 0x82, 0x76, - 0x85, 0x84, 0x84, 0x74, 0x7f, 0x83, 0x84, 0x82, 0x72, 0x8b, 0x71, - 0x8d, 0x91, 0x61, 0x7f, 0x8e, 0x83, 0x7f, 0x77, 0x7a, 0x87, 0x81, - 0x83, 0x84, 0x6f, 0x79, 0x95, 0x88, 0x67, 0x7b, 0x96, 0x7c, 0x75, - 0x85, 0x7d, 0x81, 0x88, 0x77, 0x7c, 0x89, 0x77, 0x83, 0x8d, 0x6e, - 0x7c, 0x89, 0x7f, 0x84, 0x7d, 0x7e, 0x7b, 0x7b, 0x8a, 0x8a, 0x80, - 0x61, 0x80, 0x9c, 0x7b, 0x7d, 0x78, 0x7f, 0x7f, 0x7c, 0x95, 0x84, - 0x61, 0x75, 0x99, 0x8d, 0x71, 0x73, 0x8a, 0x79, 0x79, 0x9f, 0x7e, - 0x5a, 0x85, 0x9d, 0x7b, 0x72, 0x82, 0x84, 0x7d, 0x77, 0x8a, 0x8f, - 0x69, 0x76, 0x94, 0x79, 0x76, 0x94, 0x82, 0x65, 0x7f, 0x96, 0x82, - 0x74, 0x7a, 0x81, 0x7f, 0x8d, 0x87, 0x6a, 0x74, 0x90, 0x94, 0x76, - 0x6e, 0x7b, 0x8a, 0x90, 0x7c, 0x6b, 0x7d, 0x92, 0x87, 0x6d, 0x7d, - 0x8f, 0x7a, 0x7b, 0x83, 0x7d, 0x7c, 0x8a, 0x7c, 0x78, 0x84, 0x7e, - 0x80, 0x85, 0x7d, 0x74, 0x84, 0x94, 0x78, 0x65, 0x84, 0x98, 0x85, - 0x67, 0x7a, 0x8f, 0x7f, 0x81, 0x83, 0x74, 0x75, 0x91, 0x8d, 0x72, - 0x80, 0x7b, 0x78, 0x91, 0x83, 0x76, 0x7f, 0x79, 0x85, 0x87, 0x80, - 0x76, 0x73, 0x8a, 0x88, 0x86, 0x76, 0x75, 0x82, 0x83, 0x88, 0x81, - 0x78, 0x7a, 0x84, 0x83, 0x7d, 0x7d, 0x82, 0x85, 0x7d, 0x76, 0x82, - 0x85, 0x81, 0x80, 0x7a, 0x81, 0x7f, 0x82, 0x85, 0x7d, 0x78, 0x83, - 0x85, 0x7a, 0x7f, 0x83, 0x7e, 0x81, 0x83, 0x7b, 0x7e, 0x86, 0x84, - 0x75, 0x7b, 0x88, 0x82, 0x7b, 0x78, 0x85, 0x85, 0x7d, 0x7d, 0x7f, - 0x83, 0x7f, 0x7d, 0x7d, 0x84, 0x7c, 0x82, 0x84, 0x77, 0x7f, 0x81, - 0x86, 0x7b, 0x7b, 0x85, 0x7d, 0x82, 0x83, 0x7b, 0x7d, 0x7f, 0x89, - 0x7e, 0x7a, 0x83, 0x7f, 0x7d, 0x80, 0x84, 0x7c, 0x7d, 0x83, 0x80, - 0x7a, 0x80, 0x82, 0x81, 0x89, 0x77, 0x73, 0x89, 0x88, 0x7c, 0x7c, - 0x7d, 0x7e, 0x83, 0x82, 0x81, 0x7a, 0x7d, 0x8a, 0x81, 0x73, 0x81, - 0x8b, 0x7d, 0x79, 0x7f, 0x84, 0x7d, 0x7e, 0x86, 0x79, 0x7a, 0x87, - 0x86, 0x7b, 0x79, 0x84, 0x81, 0x7c, 0x87, 0x81, 0x73, 0x81, 0x89, - 0x7a, 0x7c, 0x87, 0x7c, 0x7a, 0x85, 0x82, 0x79, 0x82, 0x86, 0x77, - 0x7f, 0x87, 0x7c, 0x7e, 0x7f, 0x80, 0x7f, 0x7d, 0x85, 0x80, 0x7b, - 0x7d, 0x7f, 0x85, 0x80, 0x7e, 0x81, 0x7d, 0x82, 0x7f, 0x80, 0x81, - 0x79, 0x81, 0x85, 0x81, 0x7c, 0x7a, 0x86, 0x84, 0x77, 0x82, 0x82, - 0x79, 0x84, 0x84, 0x7d, 0x7c, 0x85, 0x81, 0x75, 0x83, 0x8a, 0x7c, - 0x7a, 0x82, 0x7e, 0x7e, 0x84, 0x7f, 0x7b, 0x81, 0x84, 0x7c, 0x7b, - 0x83, 0x84, 0x7e, 0x7a, 0x80, 0x83, 0x82, 0x7d, 0x7d, 0x81, 0x82, - 0x80, 0x7c, 0x81, 0x83, 0x80, 0x81, 0x82, 0x7d, 0x81, 0x89, 0x80, - 0x7b, 0x83, 0x85, 0x7c, 0x7d, 0x81, 0x7f, 0x7f, 0x7d, 0x7c, 0x7d, - 0x7d, 0x7c, 0x72, 0x6d, 0x76, 0x7a, 0x75, 0x73, 0x7a, 0x85, 0x86, - 0x84, 0x89, 0x8e, 0x8f, 0x8c, 0x88, 0x85, 0x84, 0x82, 0x7f, 0x7b, - 0x79, 0x7d, 0x81, 0x7e, 0x7f, 0x86, 0x89, 0x88, 0x86, 0x88, 0x8d, - 0x8b, 0x85, 0x80, 0x80, 0x85, 0x80, 0x7b, 0x7d, 0x81, 0x84, 0x82, - 0x73, 0x42, 0x46, 0x89, 0x71, 0x39, 0x52, 0x82, 0x92, 0x77, 0x75, - 0xa1, 0xad, 0xa1, 0xa1, 0x9a, 0x91, 0x97, 0x96, 0x7a, 0x64, 0x71, - 0x82, 0x72, 0x59, 0x6a, 0x8c, 0x89, 0x7c, 0x82, 0x93, 0x99, 0x8c, - 0x85, 0x82, 0x7b, 0x7b, 0x75, 0x68, 0x6a, 0x7a, 0x7f, 0x77, 0x7d, - 0x92, 0x98, 0x8d, 0x8f, 0x99, 0x96, 0x8c, 0x87, 0x88, 0x86, 0x83, - 0x82, 0x7a, 0x61, 0x32, 0x48, 0x81, 0x4d, 0x2e, 0x61, 0x89, 0x91, - 0x76, 0x8e, 0xbe, 0xb2, 0xac, 0xa9, 0x96, 0x98, 0x92, 0x7c, 0x5e, - 0x57, 0x73, 0x6f, 0x53, 0x5e, 0x82, 0x96, 0x88, 0x89, 0xa1, 0xa8, - 0x9f, 0x91, 0x8a, 0x86, 0x7a, 0x6a, 0x56, 0x53, 0x63, 0x65, 0x63, - 0x75, 0x92, 0x9b, 0x95, 0x9c, 0xa9, 0xa4, 0x95, 0x8d, 0x8c, 0x87, - 0x7d, 0x76, 0x73, 0x77, 0x7c, 0x76, 0x6f, 0x44, 0x43, 0x8b, 0x69, - 0x39, 0x64, 0x8b, 0x96, 0x76, 0x80, 0xb6, 0xaa, 0x9d, 0x9e, 0x8b, - 0x95, 0x92, 0x74, 0x65, 0x62, 0x7e, 0x78, 0x55, 0x70, 0x8e, 0x92, - 0x88, 0x84, 0x9e, 0xa2, 0x8f, 0x86, 0x81, 0x85, 0x7c, 0x68, 0x61, - 0x64, 0x6e, 0x65, 0x5f, 0x77, 0x8b, 0x8c, 0x8b, 0x9b, 0xa5, 0x9d, - 0x91, 0x8f, 0x91, 0x8a, 0x7e, 0x78, 0x7c, 0x82, 0x7d, 0x79, 0x80, - 0x84, 0x7d, 0x48, 0x47, 0x89, 0x60, 0x3b, 0x61, 0x7e, 0x8c, 0x74, - 0x82, 0xb1, 0xa9, 0xa1, 0xa1, 0x8f, 0x9c, 0x97, 0x6e, 0x66, 0x6d, - 0x7b, 0x69, 0x53, 0x78, 0x8c, 0x85, 0x83, 0x8b, 0xa5, 0xa1, 0x8b, - 0x8a, 0x8c, 0x8c, 0x79, 0x61, 0x68, 0x73, 0x68, 0x5a, 0x63, 0x79, - 0x82, 0x7d, 0x84, 0x9b, 0xa1, 0x95, 0x90, 0x98, 0x95, 0x85, 0x80, - 0x82, 0x81, 0x7b, 0x7b, 0x83, 0x85, 0x85, 0x84, 0x83, 0x75, 0x44, - 0x62, 0x7e, 0x42, 0x4d, 0x6d, 0x73, 0x7f, 0x79, 0x8f, 0xb0, 0xa4, - 0x9e, 0xa2, 0x9c, 0xa0, 0x84, 0x74, 0x77, 0x70, 0x71, 0x5c, 0x64, - 0x80, 0x78, 0x7c, 0x88, 0x94, 0x9f, 0x92, 0x8e, 0x97, 0x92, 0x83, - 0x73, 0x71, 0x76, 0x67, 0x61, 0x64, 0x6a, 0x79, 0x73, 0x74, 0x8e, - 0x98, 0x8e, 0x91, 0x9d, 0x98, 0x8e, 0x87, 0x86, 0x84, 0x80, 0x79, - 0x7c, 0x81, 0x80, 0x83, 0x84, 0x8b, 0x85, 0x87, 0x61, 0x4a, 0x88, - 0x5e, 0x37, 0x70, 0x67, 0x6a, 0x80, 0x75, 0x95, 0xaa, 0x9c, 0x9f, - 0xa2, 0xb1, 0x96, 0x7e, 0x90, 0x78, 0x75, 0x6a, 0x58, 0x74, 0x6f, - 0x66, 0x79, 0x83, 0x8e, 0x8d, 0x8e, 0x9c, 0x97, 0x93, 0x86, 0x81, - 0x87, 0x71, 0x6c, 0x6d, 0x6c, 0x6b, 0x68, 0x72, 0x77, 0x7e, 0x83, - 0x8c, 0x93, 0x91, 0x94, 0x95, 0x90, 0x88, 0x88, 0x85, 0x7f, 0x7a, - 0x7b, 0x7e, 0x7d, 0x80, 0x85, 0x89, 0x8d, 0x88, 0x8e, 0x62, 0x58, - 0x95, 0x49, 0x46, 0x79, 0x4b, 0x72, 0x71, 0x61, 0xa0, 0x95, 0x92, - 0xa3, 0xa9, 0xb4, 0x93, 0x9d, 0x96, 0x84, 0x88, 0x63, 0x72, 0x75, - 0x58, 0x6a, 0x6c, 0x74, 0x7a, 0x79, 0x8e, 0x90, 0x98, 0x91, 0x95, - 0x9f, 0x87, 0x85, 0x7c, 0x7a, 0x74, 0x63, 0x6a, 0x6c, 0x67, 0x6e, - 0x7d, 0x81, 0x86, 0x8e, 0x97, 0x96, 0x91, 0x93, 0x93, 0x89, 0x81, - 0x82, 0x7e, 0x77, 0x75, 0x7b, 0x7b, 0x7f, 0x80, 0x89, 0x8a, 0x96, - 0x83, 0x48, 0x92, 0x73, 0x3a, 0x78, 0x59, 0x65, 0x69, 0x61, 0x84, - 0x8c, 0x7f, 0x95, 0xae, 0x96, 0xa0, 0xa1, 0x9e, 0x99, 0x86, 0x88, - 0x86, 0x77, 0x6d, 0x73, 0x71, 0x6f, 0x6f, 0x78, 0x77, 0x76, 0x82, - 0x86, 0x85, 0x86, 0x8d, 0x8d, 0x89, 0x84, 0x86, 0x84, 0x7d, 0x7a, - 0x7b, 0x79, 0x77, 0x7a, 0x7c, 0x7e, 0x7e, 0x84, 0x85, 0x84, 0x85, - 0x87, 0x86, 0x82, 0x82, 0x82, 0x7f, 0x7e, 0x7e, 0x7c, 0x7d, 0x7d, - 0x80, 0x81, 0x80, 0x88, 0x88, 0x8d, 0x7f, 0x74, 0x83, 0x6d, 0x66, - 0x6e, 0x67, 0x67, 0x65, 0x6a, 0x74, 0x73, 0x7c, 0x8a, 0x8a, 0x90, - 0x97, 0x9b, 0x9a, 0x95, 0x98, 0x95, 0x8a, 0x88, 0x84, 0x7f, 0x7a, - 0x75, 0x78, 0x78, 0x74, 0x78, 0x7e, 0x7f, 0x81, 0x86, 0x86, 0x86, - 0x85, 0x85, 0x82, 0x7e, 0x7e, 0x7a, 0x76, 0x76, 0x76, 0x76, 0x77, - 0x79, 0x7e, 0x7f, 0x81, 0x85, 0x86, 0x87, 0x88, 0x88, 0x88, 0x83, - 0x83, 0x82, 0x7d, 0x7b, 0x7c, 0x7b, 0x7a, 0x7a, 0x7d, 0x7e, 0x7e, - 0x82, 0x7e, 0x82, 0x82, 0x7f, 0x82, 0x7a, 0x7e, 0x7a, 0x73, 0x77, - 0x77, 0x74, 0x74, 0x77, 0x7a, 0x7b, 0x7b, 0x81, 0x83, 0x84, 0x89, - 0x8b, 0x8a, 0x8c, 0x8c, 0x8c, 0x89, 0x86, 0x87, 0x84, 0x81, 0x7f, - 0x7d, 0x7d, 0x7d, 0x7b, 0x7a, 0x7d, 0x7f, 0x7f, 0x7e, 0x80, 0x82, - 0x81, 0x80, 0x81, 0x82, 0x7f, 0x80, 0x7e, 0x7c, 0x81, 0x7d, 0x7c, - 0x80, 0x7d, 0x7e, 0x81, 0x7c, 0x80, 0x83, 0x7f, 0x7f, 0x7f, 0x7f, - 0x80, 0x7d, 0x7c, 0x7c, 0x7c, 0x7d, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, - 0x7f, 0x7f, 0x82, 0x81, 0x7f, 0x81, 0x7f, 0x7e, 0x81, 0x7f, 0x7f, - 0x80, 0x7f, 0x82, 0x80, 0x7d, 0x81, 0x80, 0x7e, 0x7d, 0x7d, 0x80, - 0x7e, 0x7d, 0x80, 0x7e, 0x80, 0x81, 0x7f, 0x80, 0x81, 0x82, 0x83, - 0x80, 0x82, 0x83, 0x81, 0x83, 0x81, 0x82, 0x82, 0x81, 0x80, 0x80, - 0x7f, 0x80, 0x80, 0x80, 0x7e, 0x7e, 0x82, 0x7e, 0x7b, 0x7f, 0x7e, - 0x7d, 0x7e, 0x7c, 0x80, 0x80, 0x7f, 0x81, 0x80, 0x83, 0x82, 0x80, - 0x81, 0x81, 0x7f, 0x80, 0x7f, 0x7c, 0x81, 0x7b, 0x7b, 0x7f, 0x7a, - 0x7f, 0x7c, 0x7c, 0x83, 0x7b, 0x81, 0x83, 0x7d, 0x82, 0x81, 0x7e, - 0x81, 0x7c, 0x81, 0x7d, 0x7b, 0x82, 0x7b, 0x80, 0x7f, 0x81, 0x83, - 0x81, 0x84, 0x82, 0x81, 0x82, 0x7f, 0x7f, 0x81, 0x7a, 0x7c, 0x7e, - 0x7a, 0x7e, 0x7d, 0x80, 0x81, 0x7e, 0x85, 0x83, 0x80, 0x84, 0x82, - 0x81, 0x83, 0x7b, 0x81, 0x7c, 0x7a, 0x80, 0x7a, 0x80, 0x7f, 0x7c, - 0x85, 0x80, 0x81, 0x86, 0x7d, 0x84, 0x82, 0x7a, 0x82, 0x79, 0x7c, - 0x80, 0x77, 0x81, 0x7d, 0x7e, 0x84, 0x7f, 0x84, 0x83, 0x80, 0x86, - 0x7c, 0x80, 0x82, 0x78, 0x82, 0x7a, 0x7b, 0x80, 0x7b, 0x7e, 0x82, - 0x7d, 0x84, 0x81, 0x80, 0x87, 0x7e, 0x83, 0x84, 0x7c, 0x81, 0x81, - 0x7c, 0x80, 0x7d, 0x7b, 0x7f, 0x7d, 0x7c, 0x7e, 0x80, 0x80, 0x80, - 0x81, 0x81, 0x7f, 0x82, 0x81, 0x7f, 0x80, 0x81, 0x80, 0x7e, 0x7f, - 0x80, 0x7f, 0x7f, 0x7f, 0x7e, 0x81, 0x7e, 0x80, 0x7e, 0x7e, 0x81, - 0x7d, 0x80, 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7e, 0x80, 0x81, - 0x7f, 0x81, 0x80, 0x7e, 0x83, 0x7f, 0x7d, 0x81, 0x7e, 0x7d, 0x7f, - 0x7e, 0x81, 0x7f, 0x82, 0x80, 0x80, 0x84, 0x7c, 0x82, 0x82, 0x7c, - 0x81, 0x7e, 0x7e, 0x7f, 0x7d, 0x7e, 0x7f, 0x7e, 0x81, 0x7e, 0x80, - 0x82, 0x80, 0x80, 0x82, 0x7f, 0x80, 0x82, 0x7f, 0x7f, 0x81, 0x7f, - 0x80, 0x7f, 0x7f, 0x80, 0x7e, 0x81, 0x7f, 0x7d, 0x81, 0x7e, 0x7e, - 0x81, 0x7d, 0x81, 0x7f, 0x7f, 0x7f, 0x81, 0x7e, 0x81, 0x7f, 0x7f, - 0x81, 0x7a, 0x83, 0x7f, 0x7d, 0x81, 0x81, 0x80, 0x80, 0x82, 0x80, - 0x82, 0x7e, 0x81, 0x7f, 0x7e, 0x7f, 0x7c, 0x7f, 0x7d, 0x7e, 0x7e, - 0x7f, 0x80, 0x80, 0x83, 0x83, 0x81, 0x84, 0x83, 0x80, 0x7f, 0x7f, - 0x7e, 0x7d, 0x7d, 0x7b, 0x7e, 0x7c, 0x7f, 0x7f, 0x7f, 0x83, 0x82, - 0x81, 0x84, 0x81, 0x81, 0x81, 0x7f, 0x81, 0x7f, 0x7e, 0x80, 0x7d, - 0x7f, 0x81, 0x7e, 0x7f, 0x81, 0x7f, 0x7e, 0x7e, 0x7d, 0x7e, 0x7e, - 0x7d, 0x7e, 0x7f, 0x80, 0x82, 0x81, 0x81, 0x83, 0x82, 0x84, 0x80, - 0x80, 0x82, 0x7d, 0x7e, 0x7d, 0x7d, 0x7c, 0x7e, 0x7f, 0x7f, 0x7f, - 0x81, 0x80, 0x83, 0x82, 0x80, 0x80, 0x80, 0x80, 0x7e, 0x7f, 0x7f, - 0x80, 0x7d, 0x7e, 0x7f, 0x7e, 0x81, 0x7e, 0x7f, 0x81, 0x80, 0x7f, - 0x81, 0x80, 0x80, 0x81, 0x7e, 0x81, 0x7f, 0x80, 0x81, 0x7f, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7e, 0x7f, 0x7e, 0x7f, 0x7d, 0x7f, - 0x7f, 0x7e, 0x80, 0x7f, 0x80, 0x81, 0x80, 0x7f, 0x82, 0x81, 0x80, - 0x80, 0x80, 0x81, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x7e, 0x7f, 0x7e, - 0x80, 0x7f, 0x80, 0x80, 0x80, 0x81, 0x7f, 0x80, 0x80, 0x7e, 0x7d, - 0x7e, 0x7e, 0x7e, 0x7f, 0x7e, 0x81, 0x81, 0x81, 0x82, 0x80, 0x81, - 0x81, 0x7e, 0x7f, 0x7f, 0x7d, 0x7f, 0x7e, 0x7f, 0x81, 0x7f, 0x82, - 0x82, 0x82, 0x82, 0x81, 0x80, 0x81, 0x7f, 0x7e, 0x7d, 0x7c, 0x7d, - 0x7c, 0x7c, 0x7e, 0x7f, 0x7e, 0x81, 0x82, 0x82, 0x82, 0x82, 0x81, - 0x81, 0x80, 0x7f, 0x7f, 0x7e, 0x7e, 0x7e, 0x7e, 0x7f, 0x80, 0x81, - 0x80, 0x81, 0x82, 0x80, 0x81, 0x80, 0x7e, 0x7f, 0x7f, 0x7e, 0x7c, - 0x7d, 0x7f, 0x7e, 0x7f, 0x7f, 0x81, 0x81, 0x81, 0x82, 0x82, 0x82, - 0x81, 0x80, 0x80, 0x7f, 0x7e, 0x7e, 0x7d, 0x7e, 0x7e, 0x7e, 0x7f, - 0x7f, 0x80, 0x81, 0x81, 0x82, 0x81, 0x81, 0x81, 0x80, 0x7f, 0x7f, - 0x7e, 0x7e, 0x7e, 0x7d, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x81, 0x81, - 0x81, 0x81, 0x80, 0x80, 0x7f, 0x7f, 0x7e, 0x7e, 0x7e, 0x7f, 0x7e, - 0x7f, 0x7f, 0x81, 0x81, 0x80, 0x80, 0x81, 0x81, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7e, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x81, 0x81, - 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x80, - 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x81, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x81, 0x80, 0x7f, 0x7f, - 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, - 0x80, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x7e, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x81, 0x81, - 0x81, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7e, 0x7f, 0x7e, 0x7e, 0x7e, - 0x7f, 0x80, 0x80, 0x80, 0x81, 0x81, 0x81, 0x81, 0x80, 0x80, 0x7f, - 0x7f, 0x7f, 0x7e, 0x7e, 0x7e, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, - 0x81, 0x81, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7e, 0x7f, 0x7f, 0x7f, - 0x7e, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7e, 0x7e, 0x7f, 0x7f, 0x7f, - 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x80, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x7f, - 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x80, - 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x80, - 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x80, - 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, - 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, - 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, - 0x7e, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, - 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x80, - 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, - 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x7f, - 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x7f, - 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x81, 0x7f, 0x80, 0x80, - 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, - 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x81, 0x7d, 0x81, 0x80, - 0x7f, 0x80, 0x7f, 0x7e, 0x81, 0x7e, 0x7f, 0x81, 0x7e, 0x81, 0x80, - 0x7e, 0x81, 0x7f, 0x7e, 0x82, 0x7e, 0x80, 0x81, 0x7d, 0x81, 0x80, - 0x7d, 0x81, 0x7f, 0x7e, 0x83, 0x7d, 0x80, 0x81, 0x7c, 0x81, 0x81, - 0x7d, 0x81, 0x80, 0x7d, 0x82, 0x7e, 0x7f, 0x82, 0x7e, 0x81, 0x81, - 0x7e, 0x81, 0x80, 0x7e, 0x82, 0x7e, 0x7f, 0x80, 0x7e, 0x7f, 0x80, - 0x7e, 0x80, 0x80, 0x7e, 0x81, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x81, - 0x7e, 0x80, 0x80, 0x7f, 0x81, 0x7e, 0x7f, 0x80, 0x7f, 0x80, 0x7f, - 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7e, 0x82, 0x7e, - 0x80, 0x81, 0x7d, 0x81, 0x80, 0x7f, 0x81, 0x7f, 0x7e, 0x82, 0x7e, - 0x80, 0x80, 0x7e, 0x80, 0x7f, 0x7e, 0x81, 0x7f, 0x7f, 0x81, 0x7e, - 0x81, 0x7f, 0x7f, 0x80, 0x80, 0x7e, 0x81, 0x7e, 0x80, 0x81, 0x7e, - 0x81, 0x7f, 0x7f, 0x80, 0x80, 0x7e, 0x82, 0x7d, 0x80, 0x80, 0x7f, - 0x80, 0x80, 0x7f, 0x7f, 0x82, 0x7c, 0x82, 0x7d, 0x80, 0x80, 0x7e, - 0x80, 0x7f, 0x80, 0x7f, 0x81, 0x7e, 0x82, 0x7e, 0x81, 0x7f, 0x7f, - 0x7f, 0x81, 0x7f, 0x7f, 0x81, 0x7d, 0x82, 0x7e, 0x80, 0x7f, 0x80, - 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7e, 0x80, 0x7f, 0x80, 0x7f, 0x81, - 0x7f, 0x7f, 0x81, 0x7e, 0x81, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x81, - 0x7f, 0x80, 0x80, 0x7e, 0x80, 0x80, 0x7e, 0x7f, 0x80, 0x7e, 0x81, - 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x7e, 0x81, - 0x7f, 0x7f, 0x80, 0x7e, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, - 0x7f, 0x80, 0x7e, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7e, 0x80, 0x7f, - 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x81, 0x80, - 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7e, 0x80, 0x80, 0x7e, 0x80, 0x7f, - 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x7e, 0x80, 0x7f, - 0x7f, 0x81, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x7e, 0x80, 0x7f, - 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x80, - 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, - 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7f, - 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, - 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x80, - 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, - 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x80, - 0x7e, 0x80, 0x80, 0x7e, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x80, - 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x80, - 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x7f, - 0x80, 0x7f, 0x80, - }, - { // 7 - 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7e, 0x80, 0x7f, 0x7f, - 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x7f, - 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, - 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7e, 0x80, 0x7f, 0x7f, - 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, - 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x80, - 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, - 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, - 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, - 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x80, - 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x80, - 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, - 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x81, 0x7e, 0x81, 0x7f, 0x7f, - 0x80, 0x7e, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7f, - 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x7f, - 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7e, 0x80, - 0x7f, 0x7f, 0x81, 0x7e, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x80, - 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, - 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, - 0x80, 0x7f, 0x7f, 0x81, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, - 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, - 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x80, - 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x80, - 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x7e, 0x81, 0x7f, 0x7f, - 0x81, 0x7e, 0x80, 0x80, 0x7e, 0x81, 0x7f, 0x7f, 0x82, 0x7d, 0x80, - 0x81, 0x7d, 0x82, 0x7e, 0x7f, 0x81, 0x7e, 0x80, 0x7f, 0x7f, 0x80, - 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7e, 0x80, - 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, - 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x80, - 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, - 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x80, - 0x7f, 0x80, 0x80, 0x7e, 0x81, 0x7e, 0x80, 0x80, 0x7e, 0x81, 0x7e, - 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x7e, - 0x81, 0x7f, 0x7f, 0x81, 0x7e, 0x81, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, - 0x80, 0x7f, 0x7f, 0x81, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x80, - 0x7e, 0x81, 0x7f, 0x7f, 0x81, 0x7f, 0x7f, 0x80, 0x7e, 0x80, 0x80, - 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7e, 0x81, 0x7f, 0x7f, 0x81, 0x7f, - 0x7f, 0x81, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, - 0x81, 0x7e, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, - 0x80, 0x7e, 0x81, 0x7f, 0x7f, 0x81, 0x7e, 0x80, 0x80, 0x7e, 0x81, - 0x80, 0x7e, 0x82, 0x7e, 0x80, 0x80, 0x7e, 0x81, 0x7f, 0x7f, 0x81, - 0x7e, 0x80, 0x81, 0x7e, 0x81, 0x7f, 0x7e, 0x81, 0x7e, 0x81, 0x7f, - 0x7e, 0x81, 0x7e, 0x7f, 0x81, 0x7e, 0x80, 0x80, 0x7e, 0x81, 0x7f, - 0x7f, 0x81, 0x7e, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7f, - 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x80, - 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, - 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x81, 0x7e, 0x80, 0x7f, - 0x7f, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x7e, 0x80, 0x80, 0x7e, - 0x81, 0x7e, 0x81, 0x7f, 0x7f, 0x81, 0x7f, 0x80, 0x80, 0x7f, 0x80, - 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, - 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x80, - 0x7f, 0x7f, 0x80, 0x7e, 0x80, 0x80, 0x7e, 0x81, 0x7f, 0x80, 0x80, - 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x81, - 0x7e, 0x80, 0x80, 0x7e, 0x81, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, - 0x80, 0x7e, 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x7e, 0x81, 0x7f, 0x7f, - 0x81, 0x7e, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x81, 0x7e, 0x80, - 0x80, 0x7f, 0x81, 0x7f, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, - 0x7f, 0x7f, 0x81, 0x7e, 0x81, 0x7f, 0x7f, 0x81, 0x7f, 0x7f, 0x80, - 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, - 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, - 0x7f, 0x80, 0x80, 0x7e, 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x81, - 0x7f, 0x7f, 0x81, 0x7e, 0x81, 0x7f, 0x7e, 0x82, 0x7e, 0x80, 0x80, - 0x7e, 0x81, 0x7e, 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x7e, 0x81, 0x7f, - 0x7f, 0x81, 0x7e, 0x81, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, - 0x7f, 0x80, 0x7e, 0x81, 0x7e, 0x80, 0x81, 0x7d, 0x82, 0x7f, 0x7f, - 0x81, 0x7e, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7e, 0x81, 0x7e, - 0x80, 0x7f, 0x80, 0x7f, 0x81, 0x7e, 0x80, 0x80, 0x7f, 0x80, 0x7f, - 0x80, 0x7f, 0x81, 0x7f, 0x80, 0x80, 0x80, 0x7e, 0x80, 0x80, 0x7e, - 0x81, 0x7f, 0x7d, 0x83, 0x7e, 0x7f, 0x82, 0x7c, 0x81, 0x7f, 0x7f, - 0x81, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x82, 0x7c, 0x81, 0x80, 0x7e, - 0x82, 0x7e, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, - 0x81, 0x7e, 0x80, 0x81, 0x7e, 0x81, 0x80, 0x7e, 0x81, 0x7d, 0x80, - 0x81, 0x7d, 0x82, 0x7e, 0x7f, 0x82, 0x7d, 0x80, 0x80, 0x7e, 0x81, - 0x7f, 0x7e, 0x83, 0x7c, 0x80, 0x81, 0x7e, 0x81, 0x7f, 0x80, 0x7f, - 0x7f, 0x81, 0x7f, 0x7f, 0x81, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7f, - 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x80, - 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x81, 0x7d, 0x81, 0x80, 0x7f, - 0x80, 0x7e, 0x81, 0x7f, 0x7f, 0x80, 0x7e, 0x80, 0x80, 0x7e, 0x82, - 0x7e, 0x7e, 0x82, 0x7e, 0x80, 0x80, 0x7e, 0x80, 0x7f, 0x7f, 0x81, - 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x7e, 0x80, 0x80, 0x7f, 0x81, - 0x7e, 0x81, 0x7e, 0x7f, 0x82, 0x7e, 0x7f, 0x81, 0x7e, 0x7f, 0x81, - 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, - 0x7f, 0x81, 0x7e, 0x7f, 0x81, 0x7e, 0x80, 0x7f, 0x80, 0x80, 0x7e, - 0x81, 0x7f, 0x7e, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x81, 0x7f, - 0x80, 0x7f, 0x7f, 0x81, 0x7d, 0x81, 0x80, 0x7e, 0x80, 0x7f, 0x7f, - 0x80, 0x7e, 0x81, 0x7e, 0x7f, 0x82, 0x7d, 0x81, 0x80, 0x7d, 0x82, - 0x7e, 0x7f, 0x82, 0x7c, 0x81, 0x80, 0x7d, 0x83, 0x7d, 0x80, 0x82, - 0x7d, 0x82, 0x7f, 0x7e, 0x82, 0x7e, 0x7f, 0x80, 0x7e, 0x80, 0x7f, - 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x7e, 0x81, 0x7e, - 0x7f, 0x81, 0x7e, 0x81, 0x7f, 0x7e, 0x81, 0x7f, 0x7f, 0x81, 0x7e, - 0x80, 0x80, 0x7e, 0x80, 0x80, 0x7e, 0x81, 0x7f, 0x7f, 0x81, 0x7e, - 0x80, 0x7f, 0x7f, 0x80, 0x7e, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, - 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x81, 0x7f, 0x80, 0x80, 0x7e, 0x81, - 0x80, 0x7e, 0x81, 0x7e, 0x7f, 0x80, 0x7e, 0x80, 0x7f, 0x7f, 0x81, - 0x7e, 0x80, 0x81, 0x7e, 0x80, 0x80, 0x7e, 0x80, 0x80, 0x7f, 0x81, - 0x7e, 0x81, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x80, - 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x7e, 0x81, 0x7e, - 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x81, 0x7e, - 0x7f, 0x81, 0x7e, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, - 0x7f, 0x80, 0x7e, 0x80, 0x80, 0x7f, 0x81, 0x7f, 0x80, 0x81, 0x7e, - 0x80, 0x80, 0x7e, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7e, - 0x80, 0x80, 0x7d, 0x82, 0x7f, 0x7e, 0x82, 0x7f, 0x7f, 0x81, 0x7e, - 0x80, 0x80, 0x7d, 0x82, 0x7e, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, - 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x81, 0x7e, 0x80, 0x80, 0x7d, 0x81, - 0x80, 0x7e, 0x82, 0x7e, 0x80, 0x80, 0x7e, 0x81, 0x80, 0x7d, 0x81, - 0x7f, 0x7e, 0x81, 0x7e, 0x80, 0x80, 0x7e, 0x80, 0x80, 0x7e, 0x80, - 0x81, 0x7e, 0x81, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, - 0x80, 0x7e, 0x80, 0x7f, 0x7f, 0x81, 0x7e, 0x80, 0x80, 0x7e, 0x81, - 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x7f, - 0x7f, 0x81, 0x7e, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7e, 0x80, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7e, 0x7f, 0x7f, 0x7e, 0x7f, 0x7e, 0x7e, - 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x81, 0x81, 0x82, 0x81, 0x82, 0x84, - 0x82, 0x83, 0x83, 0x81, 0x83, 0x81, 0x81, 0x83, 0x7f, 0x81, 0x81, - 0x7d, 0x81, 0x7f, 0x7d, 0x82, 0x7d, 0x82, 0x79, 0x72, 0x87, 0x70, - 0x74, 0x7e, 0x6d, 0x80, 0x72, 0x74, 0x87, 0x77, 0x81, 0x84, 0x84, - 0x8b, 0x86, 0x89, 0x8d, 0x8c, 0x83, 0x8a, 0x87, 0x82, 0x84, 0x7a, - 0x83, 0x7f, 0x75, 0x7f, 0x7a, 0x7b, 0x7c, 0x7a, 0x80, 0x7f, 0x7c, - 0x7f, 0x83, 0x7f, 0x81, 0x81, 0x81, 0x83, 0x7a, 0x7f, 0x81, 0x7a, - 0x7c, 0x7d, 0x7d, 0x7d, 0x7b, 0x81, 0x83, 0x7f, 0x84, 0x87, 0x86, - 0x86, 0x86, 0x8a, 0x87, 0x84, 0x89, 0x84, 0x85, 0x82, 0x87, 0x76, - 0x65, 0x8f, 0x61, 0x66, 0x7d, 0x58, 0x82, 0x64, 0x69, 0x8e, 0x6f, - 0x84, 0x8a, 0x8b, 0x95, 0x8f, 0x90, 0x99, 0x96, 0x83, 0x92, 0x88, - 0x7d, 0x82, 0x70, 0x7f, 0x75, 0x69, 0x79, 0x73, 0x74, 0x78, 0x7b, - 0x81, 0x85, 0x7f, 0x89, 0x90, 0x80, 0x8b, 0x89, 0x80, 0x84, 0x78, - 0x7b, 0x7c, 0x70, 0x79, 0x7c, 0x77, 0x80, 0x81, 0x86, 0x8a, 0x86, - 0x8f, 0x90, 0x87, 0x90, 0x88, 0x8b, 0x86, 0x8a, 0x80, 0x47, 0x96, - 0x62, 0x3d, 0x8a, 0x43, 0x7a, 0x6b, 0x58, 0xa0, 0x7b, 0x85, 0x9e, - 0xa0, 0x9b, 0x9d, 0x95, 0x96, 0x99, 0x70, 0x83, 0x82, 0x64, 0x72, - 0x68, 0x74, 0x75, 0x6a, 0x81, 0x89, 0x7f, 0x87, 0x94, 0x8c, 0x8e, - 0x85, 0x86, 0x8b, 0x75, 0x72, 0x7d, 0x76, 0x6b, 0x75, 0x7c, 0x79, - 0x77, 0x82, 0x8c, 0x82, 0x84, 0x8f, 0x8c, 0x83, 0x84, 0x89, 0x84, - 0x7c, 0x81, 0x86, 0x82, 0x7e, 0x8d, 0x88, 0x92, 0x62, 0x67, 0xa6, - 0x3c, 0x67, 0x7f, 0x52, 0x81, 0x57, 0x7f, 0x94, 0x76, 0x89, 0xa1, - 0x9b, 0x8b, 0x99, 0x8f, 0x92, 0x82, 0x74, 0x8b, 0x77, 0x6a, 0x7a, - 0x7b, 0x7a, 0x77, 0x7e, 0x89, 0x82, 0x7d, 0x89, 0x8a, 0x7d, 0x7f, - 0x81, 0x80, 0x7b, 0x73, 0x81, 0x84, 0x72, 0x80, 0x87, 0x7e, 0x81, - 0x81, 0x82, 0x7f, 0x77, 0x7f, 0x80, 0x78, 0x7e, 0x85, 0x83, 0x82, - 0x88, 0x89, 0x89, 0x84, 0x88, 0x89, 0x82, 0x88, 0x84, 0x93, 0x4d, - 0x70, 0x9a, 0x2c, 0x7e, 0x73, 0x5d, 0x88, 0x62, 0x8f, 0x90, 0x82, - 0x8d, 0xa1, 0x8d, 0x85, 0x94, 0x80, 0x87, 0x7b, 0x77, 0x85, 0x76, - 0x76, 0x84, 0x81, 0x7e, 0x82, 0x84, 0x83, 0x7c, 0x7c, 0x85, 0x7b, - 0x79, 0x80, 0x7e, 0x7e, 0x7d, 0x80, 0x87, 0x80, 0x7f, 0x87, 0x82, - 0x7d, 0x80, 0x7d, 0x79, 0x7a, 0x75, 0x7b, 0x7d, 0x7a, 0x83, 0x86, - 0x84, 0x88, 0x8a, 0x87, 0x87, 0x85, 0x85, 0x81, 0x83, 0x7f, 0x87, - 0x80, 0x8b, 0x7b, 0x4b, 0x9e, 0x61, 0x4b, 0x91, 0x5e, 0x77, 0x76, - 0x79, 0x8c, 0x88, 0x81, 0x95, 0x95, 0x7f, 0x93, 0x86, 0x83, 0x84, - 0x7d, 0x80, 0x81, 0x79, 0x7f, 0x84, 0x7c, 0x82, 0x81, 0x80, 0x7f, - 0x7c, 0x7f, 0x7f, 0x7a, 0x7e, 0x81, 0x7e, 0x7a, 0x83, 0x85, 0x7c, - 0x85, 0x83, 0x81, 0x80, 0x7d, 0x7e, 0x7a, 0x78, 0x7a, 0x7c, 0x7a, - 0x80, 0x82, 0x84, 0x86, 0x87, 0x88, 0x86, 0x86, 0x85, 0x84, 0x81, - 0x82, 0x82, 0x7f, 0x87, 0x81, 0x91, 0x63, 0x65, 0x9a, 0x49, 0x6a, - 0x81, 0x63, 0x77, 0x74, 0x7f, 0x87, 0x86, 0x80, 0x9b, 0x8a, 0x84, - 0x92, 0x86, 0x86, 0x84, 0x83, 0x81, 0x84, 0x7b, 0x81, 0x83, 0x7b, - 0x7f, 0x80, 0x7c, 0x7a, 0x7c, 0x7c, 0x7d, 0x78, 0x83, 0x7f, 0x7e, - 0x88, 0x83, 0x84, 0x86, 0x83, 0x80, 0x81, 0x7b, 0x7b, 0x7b, 0x75, - 0x78, 0x7a, 0x7a, 0x7e, 0x82, 0x83, 0x87, 0x86, 0x85, 0x88, 0x84, - 0x84, 0x85, 0x81, 0x82, 0x81, 0x82, 0x80, 0x87, 0x82, 0x91, 0x6f, - 0x5a, 0x99, 0x4e, 0x5c, 0x8b, 0x5a, 0x76, 0x7a, 0x7c, 0x84, 0x8c, - 0x83, 0x95, 0x94, 0x81, 0x94, 0x8a, 0x82, 0x85, 0x85, 0x7f, 0x81, - 0x7e, 0x7d, 0x83, 0x7b, 0x7c, 0x81, 0x7c, 0x77, 0x7e, 0x7c, 0x7d, - 0x7c, 0x7c, 0x84, 0x7e, 0x81, 0x88, 0x82, 0x84, 0x84, 0x80, 0x80, - 0x7e, 0x7b, 0x7d, 0x7a, 0x78, 0x7c, 0x7c, 0x7d, 0x80, 0x83, 0x84, - 0x84, 0x84, 0x86, 0x85, 0x82, 0x85, 0x83, 0x81, 0x82, 0x83, 0x83, - 0x82, 0x87, 0x84, 0x8c, 0x62, 0x66, 0x8f, 0x4c, 0x64, 0x82, 0x66, - 0x71, 0x79, 0x84, 0x82, 0x8c, 0x85, 0x93, 0x95, 0x80, 0x8f, 0x8f, - 0x83, 0x83, 0x8a, 0x81, 0x80, 0x83, 0x7c, 0x82, 0x7d, 0x77, 0x7e, - 0x7c, 0x73, 0x7a, 0x7f, 0x7b, 0x7e, 0x82, 0x82, 0x83, 0x7f, 0x86, - 0x87, 0x7f, 0x83, 0x83, 0x80, 0x7c, 0x7e, 0x7e, 0x7b, 0x79, 0x79, - 0x7e, 0x7c, 0x7c, 0x82, 0x84, 0x81, 0x83, 0x86, 0x85, 0x83, 0x82, - 0x85, 0x83, 0x82, 0x83, 0x84, 0x83, 0x82, 0x88, 0x85, 0x87, 0x68, - 0x66, 0x8a, 0x5b, 0x5d, 0x7c, 0x6e, 0x70, 0x6f, 0x85, 0x83, 0x84, - 0x87, 0x89, 0x9a, 0x87, 0x85, 0x93, 0x8f, 0x85, 0x85, 0x8b, 0x82, - 0x80, 0x80, 0x7c, 0x7f, 0x7a, 0x76, 0x7a, 0x7a, 0x78, 0x7a, 0x80, - 0x7f, 0x80, 0x81, 0x80, 0x87, 0x84, 0x80, 0x84, 0x84, 0x80, 0x7f, - 0x80, 0x7f, 0x7e, 0x7c, 0x7b, 0x7c, 0x7a, 0x79, 0x7c, 0x7e, 0x7f, - 0x7e, 0x82, 0x84, 0x83, 0x85, 0x85, 0x87, 0x86, 0x84, 0x86, 0x85, - 0x85, 0x83, 0x84, 0x84, 0x83, 0x81, 0x82, 0x75, 0x61, 0x75, 0x76, - 0x62, 0x68, 0x6f, 0x7c, 0x73, 0x71, 0x84, 0x86, 0x8a, 0x86, 0x8c, - 0x91, 0x8d, 0x8f, 0x8a, 0x8a, 0x8c, 0x8a, 0x84, 0x7e, 0x84, 0x85, - 0x7c, 0x7b, 0x7c, 0x7c, 0x7b, 0x78, 0x79, 0x7c, 0x7c, 0x7c, 0x7c, - 0x7d, 0x80, 0x81, 0x81, 0x7f, 0x80, 0x82, 0x82, 0x82, 0x80, 0x81, - 0x81, 0x80, 0x7e, 0x7e, 0x7c, 0x7c, 0x7e, 0x7d, 0x7f, 0x7e, 0x80, - 0x84, 0x81, 0x83, 0x83, 0x82, 0x82, 0x80, 0x7f, 0x80, 0x80, 0x80, - 0x80, 0x7f, 0x81, 0x83, 0x81, 0x83, 0x83, 0x81, 0x7c, 0x79, 0x7d, - 0x7c, 0x72, 0x72, 0x7a, 0x73, 0x71, 0x79, 0x78, 0x78, 0x7d, 0x84, - 0x82, 0x81, 0x89, 0x8c, 0x89, 0x8a, 0x8f, 0x8b, 0x87, 0x8b, 0x88, - 0x85, 0x85, 0x85, 0x82, 0x7f, 0x7f, 0x7e, 0x7e, 0x7b, 0x7a, 0x7a, - 0x7a, 0x79, 0x78, 0x7a, 0x7a, 0x79, 0x7c, 0x7d, 0x7b, 0x7d, 0x81, - 0x80, 0x80, 0x81, 0x83, 0x83, 0x83, 0x84, 0x83, 0x83, 0x83, 0x83, - 0x81, 0x81, 0x81, 0x81, 0x81, 0x80, 0x80, 0x81, 0x7f, 0x80, 0x81, - 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x81, 0x83, 0x82, 0x83, 0x7e, - 0x78, 0x7e, 0x7d, 0x75, 0x71, 0x78, 0x77, 0x70, 0x76, 0x7a, 0x79, - 0x7b, 0x83, 0x84, 0x80, 0x87, 0x8c, 0x89, 0x88, 0x8c, 0x8d, 0x88, - 0x89, 0x89, 0x86, 0x85, 0x84, 0x82, 0x82, 0x80, 0x7e, 0x7f, 0x7d, - 0x7b, 0x7a, 0x7b, 0x79, 0x78, 0x79, 0x7a, 0x7a, 0x7b, 0x7d, 0x7e, - 0x7e, 0x80, 0x81, 0x81, 0x81, 0x80, 0x81, 0x81, 0x80, 0x7f, 0x80, - 0x82, 0x80, 0x80, 0x81, 0x81, 0x80, 0x82, 0x81, 0x80, 0x81, 0x82, - 0x82, 0x80, 0x81, 0x82, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x81, 0x82, 0x82, 0x83, 0x83, 0x82, 0x82, 0x80, 0x79, 0x79, 0x7d, - 0x76, 0x6e, 0x74, 0x77, 0x70, 0x73, 0x79, 0x79, 0x7a, 0x81, 0x86, - 0x82, 0x85, 0x8d, 0x8c, 0x8a, 0x8c, 0x8e, 0x8b, 0x89, 0x8a, 0x88, - 0x86, 0x85, 0x84, 0x82, 0x80, 0x7d, 0x7d, 0x7b, 0x79, 0x78, 0x77, - 0x78, 0x76, 0x76, 0x79, 0x79, 0x7a, 0x7d, 0x7f, 0x7f, 0x81, 0x83, - 0x83, 0x84, 0x84, 0x84, 0x83, 0x82, 0x83, 0x81, 0x7f, 0x80, 0x7f, - 0x7e, 0x7e, 0x7e, 0x7d, 0x7d, 0x7d, 0x7e, 0x7d, 0x7e, 0x7f, 0x7f, - 0x80, 0x81, 0x83, 0x83, 0x83, 0x84, 0x85, 0x84, 0x84, 0x83, 0x83, - 0x82, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7d, - 0x79, 0x7a, 0x7d, 0x78, 0x71, 0x75, 0x79, 0x73, 0x74, 0x7a, 0x7a, - 0x7b, 0x81, 0x84, 0x82, 0x86, 0x8c, 0x8c, 0x8a, 0x8b, 0x8d, 0x8a, - 0x89, 0x88, 0x86, 0x84, 0x84, 0x83, 0x80, 0x80, 0x7e, 0x7e, 0x7d, - 0x7b, 0x7a, 0x7a, 0x7a, 0x78, 0x79, 0x7a, 0x79, 0x79, 0x7c, 0x7d, - 0x7d, 0x7f, 0x81, 0x82, 0x82, 0x83, 0x84, 0x84, 0x83, 0x83, 0x82, - 0x81, 0x81, 0x80, 0x7e, 0x7e, 0x7d, 0x7d, 0x7c, 0x7c, 0x7c, 0x7d, - 0x7e, 0x7f, 0x80, 0x80, 0x82, 0x84, 0x83, 0x83, 0x85, 0x84, 0x84, - 0x83, 0x83, 0x83, 0x81, 0x81, 0x81, 0x80, 0x7f, 0x7f, 0x7e, 0x7d, - 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7c, 0x79, 0x78, - 0x7b, 0x79, 0x75, 0x77, 0x7a, 0x78, 0x79, 0x7d, 0x7e, 0x7f, 0x83, - 0x86, 0x85, 0x87, 0x8b, 0x8b, 0x8a, 0x8b, 0x8b, 0x89, 0x88, 0x87, - 0x86, 0x83, 0x82, 0x81, 0x7e, 0x7c, 0x7c, 0x7b, 0x7a, 0x79, 0x78, - 0x79, 0x79, 0x78, 0x7a, 0x7b, 0x7b, 0x7c, 0x7e, 0x7f, 0x80, 0x82, - 0x82, 0x83, 0x83, 0x82, 0x82, 0x82, 0x81, 0x80, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7e, 0x7e, 0x7f, 0x7e, 0x7f, 0x7f, 0x7e, 0x80, 0x80, 0x80, - 0x80, 0x81, 0x81, 0x81, 0x81, 0x81, 0x82, 0x81, 0x82, 0x81, 0x82, - 0x81, 0x80, 0x80, 0x7f, 0x7f, 0x7e, 0x7e, 0x7e, 0x7d, 0x7d, 0x7d, - 0x7d, 0x7d, 0x7e, 0x7e, 0x7e, 0x7f, 0x7f, 0x80, 0x81, 0x81, 0x81, - 0x82, 0x82, 0x81, 0x7e, 0x7e, 0x7e, 0x7c, 0x7a, 0x7b, 0x7c, 0x7b, - 0x7b, 0x7d, 0x7e, 0x7e, 0x81, 0x82, 0x81, 0x82, 0x84, 0x84, 0x83, - 0x84, 0x84, 0x83, 0x83, 0x83, 0x82, 0x82, 0x81, 0x81, 0x80, 0x7f, - 0x7f, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, - 0x7e, 0x7e, 0x7f, 0x7f, 0x7f, - }, - { // 8 - 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7e, - 0x7e, 0x7d, 0x7d, 0x7d, 0x7d, 0x7e, 0x7e, 0x7f, 0x7f, 0x7f, 0x80, - 0x80, 0x80, 0x81, 0x81, 0x82, 0x82, 0x82, 0x82, 0x82, 0x81, 0x81, - 0x81, 0x81, 0x81, 0x81, 0x81, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x81, 0x81, - 0x81, 0x80, 0x80, 0x7f, 0x7d, 0x7c, 0x79, 0x78, 0x78, 0x78, 0x7a, - 0x7d, 0x7f, 0x81, 0x83, 0x83, 0x84, 0x84, 0x85, 0x85, 0x86, 0x85, - 0x84, 0x83, 0x81, 0x80, 0x7f, 0x7f, 0x7e, 0x7e, 0x7e, 0x7c, 0x7c, - 0x7b, 0x7c, 0x7d, 0x80, 0x82, 0x83, 0x84, 0x84, 0x82, 0x81, 0x81, - 0x80, 0x81, 0x82, 0x82, 0x83, 0x83, 0x84, 0x84, 0x83, 0x85, 0x87, - 0x88, 0x8a, 0x84, 0x73, 0x6c, 0x61, 0x53, 0x5d, 0x66, 0x6e, 0x81, - 0x8b, 0x8e, 0x8e, 0x8d, 0x8f, 0x8e, 0x93, 0x9a, 0x96, 0x8f, 0x8a, - 0x7b, 0x6e, 0x6d, 0x6a, 0x6e, 0x79, 0x82, 0x87, 0x88, 0x89, 0x86, - 0x80, 0x85, 0x88, 0x87, 0x8a, 0x89, 0x7f, 0x78, 0x72, 0x6c, 0x6b, - 0x70, 0x76, 0x7a, 0x7f, 0x83, 0x83, 0x86, 0x8a, 0x8c, 0x8f, 0x8f, - 0x8b, 0x86, 0x81, 0x7f, 0x7e, 0x81, 0x85, 0x86, 0x8a, 0x8c, 0x8b, - 0x8a, 0x8a, 0x78, 0x5f, 0x59, 0x48, 0x42, 0x5a, 0x68, 0x78, 0x8e, - 0x96, 0x98, 0x97, 0x9c, 0x9f, 0x9d, 0xa2, 0x9f, 0x8a, 0x7b, 0x6f, - 0x5a, 0x58, 0x63, 0x6b, 0x7a, 0x87, 0x90, 0x90, 0x8d, 0x93, 0x90, - 0x8f, 0x97, 0x91, 0x85, 0x7e, 0x6e, 0x5f, 0x5a, 0x5c, 0x62, 0x6c, - 0x7d, 0x88, 0x8f, 0x99, 0x9a, 0x98, 0x99, 0x93, 0x8b, 0x84, 0x7f, - 0x79, 0x77, 0x7b, 0x7e, 0x82, 0x89, 0x8d, 0x8d, 0x91, 0x7b, 0x59, - 0x56, 0x43, 0x3f, 0x60, 0x6f, 0x7e, 0x8f, 0x92, 0x94, 0x93, 0x9f, - 0xab, 0xa5, 0xa5, 0x9c, 0x7a, 0x66, 0x5f, 0x54, 0x5f, 0x71, 0x7d, - 0x84, 0x84, 0x8c, 0x8a, 0x8c, 0xa0, 0xa0, 0x99, 0x96, 0x82, 0x6c, - 0x62, 0x5f, 0x60, 0x64, 0x6e, 0x72, 0x72, 0x7f, 0x8a, 0x95, 0xa3, - 0xa6, 0x9e, 0x90, 0x84, 0x7a, 0x74, 0x7c, 0x80, 0x81, 0x82, 0x80, - 0x7e, 0x86, 0x8f, 0x99, 0x96, 0x66, 0x4f, 0x44, 0x2b, 0x4d, 0x73, - 0x7f, 0x8f, 0x8e, 0x8f, 0x8e, 0x99, 0xba, 0xba, 0xaa, 0xa0, 0x77, - 0x53, 0x55, 0x5b, 0x6b, 0x78, 0x7e, 0x7e, 0x6e, 0x7d, 0x96, 0x9d, - 0xb2, 0xb2, 0x96, 0x7a, 0x63, 0x60, 0x62, 0x6f, 0x7c, 0x6e, 0x65, - 0x66, 0x6f, 0x87, 0xa0, 0xb0, 0xa5, 0x92, 0x86, 0x79, 0x7f, 0x8a, - 0x8b, 0x82, 0x75, 0x6e, 0x6e, 0x7f, 0x94, 0x9d, 0x9d, 0x9f, 0x71, - 0x35, 0x42, 0x45, 0x49, 0x74, 0x7b, 0x72, 0x68, 0x7d, 0xa5, 0xaf, - 0xca, 0xd1, 0x9d, 0x7b, 0x76, 0x6d, 0x6f, 0x72, 0x73, 0x5d, 0x47, - 0x68, 0x80, 0x91, 0xae, 0xab, 0x95, 0x85, 0x8d, 0x92, 0x89, 0x8b, - 0x76, 0x58, 0x54, 0x5f, 0x6b, 0x75, 0x84, 0x84, 0x80, 0x91, 0x9f, - 0xa0, 0x9c, 0x93, 0x81, 0x74, 0x7b, 0x7f, 0x7a, 0x79, 0x76, 0x74, - 0x7c, 0x8c, 0x95, 0x92, 0x9c, 0x7a, 0x3b, 0x42, 0x51, 0x5a, 0x6d, - 0x72, 0x70, 0x68, 0x8b, 0xb1, 0xb0, 0xb3, 0xa7, 0x91, 0x87, 0x8b, - 0x8e, 0x75, 0x5e, 0x5a, 0x5c, 0x6c, 0x82, 0x8a, 0x83, 0x86, 0x95, - 0x9e, 0xa1, 0x9a, 0x86, 0x74, 0x74, 0x7a, 0x77, 0x6c, 0x61, 0x5f, - 0x6d, 0x83, 0x91, 0x90, 0x8b, 0x8d, 0x92, 0x98, 0x95, 0x87, 0x77, - 0x73, 0x7a, 0x7f, 0x7d, 0x78, 0x74, 0x7b, 0x8a, 0x99, 0x96, 0x72, - 0x4c, 0x4f, 0x62, 0x6c, 0x6b, 0x62, 0x5f, 0x70, 0x94, 0xa4, 0x9a, - 0x91, 0x94, 0x9c, 0x9f, 0x9a, 0x88, 0x73, 0x74, 0x7c, 0x79, 0x73, - 0x70, 0x73, 0x7d, 0x8d, 0x91, 0x88, 0x86, 0x8a, 0x8a, 0x87, 0x82, - 0x7a, 0x74, 0x78, 0x7a, 0x75, 0x73, 0x78, 0x7d, 0x81, 0x86, 0x88, - 0x89, 0x8d, 0x8f, 0x8a, 0x84, 0x83, 0x80, 0x7c, 0x7b, 0x79, 0x7a, - 0x7e, 0x87, 0x84, 0x75, 0x6b, 0x64, 0x67, 0x67, 0x65, 0x64, 0x68, - 0x75, 0x7e, 0x85, 0x89, 0x90, 0x98, 0x9a, 0x96, 0x91, 0x90, 0x8d, - 0x88, 0x84, 0x7e, 0x7b, 0x7c, 0x7c, 0x7b, 0x7d, 0x82, 0x85, 0x85, - 0x84, 0x84, 0x84, 0x84, 0x85, 0x80, 0x7c, 0x7a, 0x79, 0x77, 0x77, - 0x7b, 0x7b, 0x7d, 0x7e, 0x80, 0x85, 0x89, 0x8a, 0x88, 0x85, 0x83, - 0x81, 0x80, 0x7e, 0x7c, 0x7b, 0x79, 0x7b, 0x7a, 0x76, 0x77, 0x73, - 0x71, 0x6f, 0x6f, 0x70, 0x70, 0x75, 0x78, 0x7b, 0x80, 0x84, 0x87, - 0x8a, 0x8f, 0x90, 0x8f, 0x8e, 0x8c, 0x88, 0x86, 0x85, 0x84, 0x81, - 0x7f, 0x7f, 0x7f, 0x80, 0x81, 0x81, 0x82, 0x84, 0x85, 0x84, 0x82, - 0x81, 0x7f, 0x7d, 0x7d, 0x7c, 0x7b, 0x7a, 0x7a, 0x7b, 0x7d, 0x80, - 0x82, 0x81, 0x81, 0x81, 0x81, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7d, - 0x80, 0x7e, 0x7e, 0x80, 0x7e, 0x7f, 0x7f, 0x7f, 0x81, 0x81, 0x83, - 0x80, 0x7f, 0x7f, 0x7d, 0x80, 0x7f, 0x7d, 0x80, 0x7e, 0x7e, 0x81, - 0x7f, 0x81, 0x7f, 0x7f, 0x7e, 0x7e, 0x7d, 0x7e, 0x7f, 0x7f, 0x7f, - 0x7e, 0x80, 0x7d, 0x84, 0x82, 0x82, 0x82, 0x7f, 0x81, 0x80, 0x80, - 0x7f, 0x81, 0x7b, 0x7f, 0x7f, 0x80, 0x81, 0x7f, 0x80, 0x7e, 0x7f, - 0x81, 0x7f, 0x82, 0x7f, 0x7e, 0x80, 0x7c, 0x81, 0x7f, 0x7f, 0x7f, - 0x80, 0x7e, 0x7f, 0x82, 0x7f, 0x84, 0x80, 0x81, 0x81, 0x7e, 0x81, - 0x81, 0x7f, 0x80, 0x80, 0x7e, 0x82, 0x7d, 0x80, 0x7e, 0x7c, 0x81, - 0x7c, 0x7f, 0x80, 0x7e, 0x7e, 0x81, 0x7e, 0x81, 0x82, 0x81, 0x80, - 0x82, 0x80, 0x82, 0x81, 0x80, 0x80, 0x7d, 0x81, 0x7d, 0x81, 0x7f, - 0x82, 0x7e, 0x7e, 0x7f, 0x7e, 0x7e, 0x7e, 0x7f, 0x7e, 0x7e, 0x7d, - 0x7f, 0x80, 0x80, 0x7f, 0x84, 0x7e, 0x82, 0x82, 0x7f, 0x80, 0x82, - 0x7d, 0x82, 0x7f, 0x7d, 0x83, 0x7d, 0x81, 0x82, 0x7f, 0x82, 0x81, - 0x7f, 0x80, 0x7f, 0x7d, 0x7f, 0x7c, 0x7e, 0x7c, 0x7d, 0x7f, 0x7e, - 0x83, 0x81, 0x83, 0x81, 0x81, 0x81, 0x81, 0x81, 0x80, 0x81, 0x7c, - 0x80, 0x7c, 0x7f, 0x83, 0x7e, 0x82, 0x82, 0x7e, 0x80, 0x80, 0x7d, - 0x81, 0x7c, 0x7c, 0x80, 0x79, 0x7f, 0x7e, 0x7e, 0x82, 0x7f, 0x82, - 0x81, 0x80, 0x82, 0x81, 0x7f, 0x82, 0x7e, 0x7f, 0x7f, 0x7e, 0x80, - 0x80, 0x7f, 0x80, 0x82, 0x80, 0x81, 0x7f, 0x80, 0x7f, 0x7e, 0x80, - 0x7c, 0x7e, 0x7d, 0x7c, 0x80, 0x80, 0x7e, 0x82, 0x82, 0x80, 0x84, - 0x80, 0x82, 0x81, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x81, - 0x7e, 0x83, 0x7e, 0x7f, 0x80, 0x7b, 0x80, 0x7d, 0x7e, 0x7f, 0x7f, - 0x7c, 0x81, 0x7e, 0x81, 0x83, 0x7f, 0x82, 0x7f, 0x80, 0x7f, 0x7f, - 0x7f, 0x81, 0x7e, 0x80, 0x7e, 0x7c, 0x83, 0x7f, 0x83, 0x80, 0x83, - 0x7d, 0x80, 0x82, 0x7c, 0x82, 0x7d, 0x7c, 0x7d, 0x7d, 0x7c, 0x81, - 0x80, 0x7f, 0x84, 0x7e, 0x82, 0x80, 0x80, 0x81, 0x80, 0x81, 0x7d, - 0x82, 0x7e, 0x7e, 0x83, 0x80, 0x81, 0x80, 0x80, 0x80, 0x7e, 0x81, - 0x7d, 0x7f, 0x7d, 0x7e, 0x7e, 0x7d, 0x7f, 0x83, 0x7f, 0x81, 0x83, - 0x7c, 0x83, 0x7e, 0x7d, 0x82, 0x7e, 0x80, 0x7f, 0x7d, 0x80, 0x7e, - 0x7f, 0x82, 0x80, 0x80, 0x84, 0x7d, 0x83, 0x80, 0x7f, 0x81, 0x7c, - 0x7e, 0x7d, 0x7d, 0x7f, 0x7f, 0x80, 0x81, 0x7e, 0x82, 0x80, 0x80, - 0x82, 0x80, 0x7e, 0x80, 0x81, 0x7d, 0x81, 0x81, 0x7e, 0x82, 0x7f, - 0x83, 0x80, 0x81, 0x7f, 0x7f, 0x7d, 0x7d, 0x7e, 0x7d, 0x7e, 0x7e, - 0x81, 0x80, 0x82, 0x80, 0x84, 0x80, 0x81, 0x80, 0x7f, 0x7f, 0x7e, - 0x7f, 0x7e, 0x7e, 0x7e, 0x80, 0x7f, 0x80, 0x82, 0x81, 0x83, 0x81, - 0x81, 0x81, 0x7f, 0x7f, 0x7e, 0x7f, 0x7e, 0x7e, 0x7d, 0x80, 0x7e, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x7c, - 0x82, 0x7e, 0x80, 0x82, 0x80, 0x81, 0x82, 0x7e, 0x80, 0x7f, 0x7d, - 0x81, 0x7d, 0x7f, 0x80, 0x7b, 0x7e, 0x84, 0x7c, 0x82, 0x82, 0x7d, - 0x84, 0x7f, 0x80, 0x80, 0x7b, 0x80, 0x7f, 0x7f, 0x82, 0x7f, 0x7f, - 0x81, 0x7d, 0x82, 0x81, 0x7f, 0x81, 0x80, 0x7f, 0x80, 0x7e, 0x7e, - 0x7e, 0x7e, 0x80, 0x80, 0x80, 0x7d, 0x80, 0x82, 0x80, 0x7f, 0x7f, - 0x7d, 0x7f, 0x80, 0x80, 0x81, 0x80, 0x7f, 0x81, 0x7e, 0x82, 0x82, - 0x7d, 0x83, 0x7c, 0x81, 0x7d, 0x7f, 0x7f, 0x7d, 0x7f, 0x7e, 0x81, - 0x7f, 0x81, 0x80, 0x82, 0x80, 0x83, 0x7f, 0x7f, 0x80, 0x7d, 0x80, - 0x7f, 0x7d, 0x7e, 0x7f, 0x7e, 0x82, 0x81, 0x80, 0x82, 0x7e, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7e, 0x80, 0x7d, 0x82, 0x7e, 0x82, - 0x80, 0x7e, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7e, 0x7f, - 0x82, 0x80, 0x81, 0x82, 0x7d, 0x82, 0x7b, 0x82, 0x7e, 0x7f, 0x80, - 0x7e, 0x7f, 0x7f, 0x7f, 0x80, 0x83, 0x7c, 0x81, 0x80, 0x7d, 0x83, - 0x7e, 0x83, 0x80, 0x7e, 0x81, 0x7f, 0x7f, 0x7f, 0x81, 0x7c, 0x83, - 0x7d, 0x81, 0x80, 0x7f, 0x80, 0x81, 0x7e, 0x7f, 0x80, 0x7c, 0x82, - 0x7d, 0x81, 0x7f, 0x7f, 0x7f, 0x81, 0x7f, 0x80, 0x7f, 0x7d, 0x81, - 0x7c, 0x80, 0x81, 0x7d, 0x82, 0x81, 0x7f, 0x84, 0x7d, 0x81, 0x80, - 0x7d, 0x81, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7e, 0x81, 0x7f, - 0x7e, 0x82, 0x7e, 0x7f, 0x81, 0x7a, 0x82, 0x81, 0x7d, 0x83, 0x7e, - 0x7f, 0x80, 0x7f, 0x7e, 0x81, 0x7d, 0x81, 0x81, 0x7f, 0x80, 0x80, - 0x82, 0x7d, 0x82, 0x7e, 0x7e, 0x81, 0x7f, 0x80, 0x82, 0x7e, 0x7d, - 0x81, 0x7c, 0x81, 0x7f, 0x7d, 0x81, 0x7c, 0x80, 0x80, 0x80, 0x81, - 0x81, 0x7d, 0x81, 0x81, 0x7c, 0x84, 0x80, 0x7e, 0x81, 0x7f, 0x7c, - 0x83, 0x7d, 0x81, 0x80, 0x7d, 0x80, 0x7e, 0x7e, 0x7f, 0x81, 0x7d, - 0x80, 0x7f, 0x80, 0x81, 0x7f, 0x82, 0x80, 0x81, 0x80, 0x7d, 0x82, - 0x7e, 0x7f, 0x83, 0x7e, 0x82, 0x81, 0x7f, 0x82, 0x7f, 0x7d, 0x7f, - 0x7d, 0x7c, 0x81, 0x7c, 0x7e, 0x80, 0x7d, 0x7f, 0x80, 0x7f, 0x81, - 0x80, 0x7f, 0x82, 0x7f, 0x80, 0x82, 0x7f, 0x7f, 0x81, 0x7c, 0x7f, - 0x80, 0x7e, 0x81, 0x80, 0x7d, 0x80, 0x80, 0x7c, 0x83, 0x7e, 0x81, - 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x7e, 0x80, 0x7e, 0x81, 0x7e, 0x81, - 0x7d, 0x81, 0x80, 0x7e, 0x81, 0x7e, 0x7d, 0x7f, 0x7f, 0x7f, 0x80, - 0x7f, 0x80, 0x80, 0x82, 0x80, 0x81, 0x80, 0x7f, 0x7d, 0x7f, 0x7f, - 0x7e, 0x81, 0x7d, 0x81, 0x7d, 0x7e, 0x80, 0x7f, 0x81, 0x7f, 0x80, - 0x80, 0x80, 0x7f, 0x81, 0x7d, 0x80, 0x7f, 0x7e, 0x81, 0x7e, 0x80, - 0x81, 0x80, 0x80, 0x82, 0x7e, 0x80, 0x7f, 0x7e, 0x80, 0x7e, 0x7d, - 0x7f, 0x7d, 0x7e, 0x81, 0x7f, 0x81, 0x81, 0x7f, 0x80, 0x80, 0x7f, - 0x81, 0x7e, 0x80, 0x80, 0x7d, 0x81, 0x7f, 0x7e, 0x81, 0x7e, 0x7e, - 0x82, 0x7e, 0x81, 0x80, 0x7e, 0x81, 0x7e, 0x7f, 0x80, 0x7e, 0x80, - 0x7f, 0x7e, 0x81, 0x7e, 0x80, 0x80, 0x80, 0x81, 0x81, 0x7e, 0x81, - 0x7f, 0x7e, 0x82, 0x7e, 0x80, 0x81, 0x7f, 0x81, 0x80, 0x7e, 0x80, - 0x7e, 0x7b, 0x7b, 0x7a, 0x77, 0x79, 0x79, 0x79, 0x7c, 0x7c, 0x7d, - 0x80, 0x81, 0x83, 0x86, 0x86, 0x88, 0x88, 0x87, 0x87, 0x86, 0x86, - 0x84, 0x83, 0x81, 0x80, 0x7e, 0x7e, 0x7c, 0x7c, 0x7b, 0x7a, 0x7a, - 0x7b, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x82, 0x82, 0x83, 0x84, - 0x84, 0x84, 0x84, 0x85, 0x82, 0x83, 0x81, 0x81, 0x81, 0x80, 0x7f, - 0x80, 0x7e, 0x81, 0x7f, 0x83, 0x77, 0x6d, 0x88, 0x69, 0x6a, 0x7a, - 0x65, 0x77, 0x6e, 0x6d, 0x80, 0x7a, 0x7c, 0x88, 0x8c, 0x8d, 0x90, - 0x91, 0x93, 0x98, 0x8e, 0x8e, 0x93, 0x86, 0x85, 0x83, 0x7e, 0x7e, - 0x77, 0x76, 0x79, 0x76, 0x74, 0x77, 0x78, 0x79, 0x7a, 0x7a, 0x7f, - 0x80, 0x7e, 0x82, 0x84, 0x82, 0x84, 0x83, 0x83, 0x85, 0x80, 0x7d, - 0x80, 0x7e, 0x76, 0x7b, 0x7b, 0x79, 0x7a, 0x7b, 0x7f, 0x7f, 0x80, - 0x85, 0x87, 0x85, 0x88, 0x89, 0x89, 0x87, 0x86, 0x87, 0x85, 0x82, - 0x82, 0x84, 0x7f, 0x80, 0x80, 0x81, 0x83, 0x7d, 0x7f, 0x63, 0x7c, - 0x78, 0x49, 0x7f, 0x64, 0x5a, 0x7a, 0x5d, 0x7c, 0x7f, 0x75, 0x8b, - 0x92, 0x95, 0x8f, 0x9e, 0x9a, 0x94, 0x9e, 0x8b, 0x96, 0x94, 0x7a, - 0x8a, 0x83, 0x76, 0x7b, 0x75, 0x78, 0x74, 0x73, 0x72, 0x77, 0x7a, - 0x71, 0x7f, 0x7f, 0x7b, 0x83, 0x7f, 0x86, 0x86, 0x81, 0x88, 0x86, - 0x83, 0x7f, 0x80, 0x82, 0x79, 0x7a, 0x7d, 0x78, 0x77, 0x79, 0x7c, - 0x7b, 0x7c, 0x7f, 0x83, 0x84, 0x83, 0x89, 0x8a, 0x88, 0x89, 0x8a, - 0x89, 0x87, 0x86, 0x86, 0x83, 0x80, 0x7f, 0x80, 0x7f, 0x7c, 0x81, - 0x7f, 0x81, 0x6b, 0x66, 0x8d, 0x51, 0x57, 0x8a, 0x4d, 0x68, 0x74, - 0x65, 0x84, 0x77, 0x88, 0x8d, 0x9a, 0xa1, 0x85, 0xaa, 0xa4, 0x8a, - 0xa2, 0x95, 0x8c, 0x8b, 0x7e, 0x81, 0x7f, 0x77, 0x74, 0x73, 0x7a, - 0x6e, 0x6c, 0x7d, 0x75, 0x75, 0x7b, 0x7a, 0x82, 0x7d, 0x7f, 0x86, - 0x84, 0x87, 0x83, 0x86, 0x8a, 0x83, 0x83, 0x83, 0x83, 0x7c, 0x76, - 0x7d, 0x79, 0x72, 0x76, 0x77, 0x77, 0x76, 0x7b, 0x81, 0x80, 0x84, - 0x86, 0x89, 0x8c, 0x89, 0x8b, 0x8c, 0x8b, 0x88, 0x86, 0x86, 0x83, - 0x80, 0x80, 0x7e, 0x7d, 0x7c, 0x7c, 0x7d, 0x7f, 0x80, 0x7e, 0x80, - 0x74, 0x69, 0x79, 0x72, 0x65, 0x67, 0x6b, 0x76, 0x6a, 0x6a, 0x82, - 0x83, 0x81, 0x89, 0x92, 0x94, 0x8f, 0x96, 0x9a, 0x92, 0x92, 0x94, - 0x8e, 0x86, 0x86, 0x86, 0x81, 0x7d, 0x7d, 0x7c, 0x79, 0x78, 0x79, - 0x7a, 0x78, 0x76, 0x78, 0x7b, 0x79, 0x79, 0x7c, 0x7e, 0x7c, 0x7d, - 0x81, 0x82, 0x80, 0x83, 0x84, 0x82, 0x82, 0x83, 0x82, 0x7f, 0x7e, - 0x80, 0x7d, 0x79, 0x7a, 0x7c, 0x7a, 0x7b, 0x7e, 0x7e, 0x7e, 0x81, - 0x82, 0x83, 0x84, 0x86, 0x87, 0x86, 0x86, 0x87, 0x87, 0x86, 0x85, - 0x84, 0x83, 0x81, 0x81, 0x7f, 0x7f, 0x7e, 0x7e, 0x7f, 0x7f, 0x80, - 0x7f, 0x80, 0x7e, 0x71, 0x71, 0x79, 0x71, 0x64, 0x69, 0x74, 0x6d, - 0x68, 0x77, 0x7c, 0x79, 0x83, 0x8e, 0x8b, 0x88, 0x94, 0x9a, 0x94, - 0x92, 0x96, 0x94, 0x8d, 0x8c, 0x8c, 0x88, 0x83, 0x82, 0x81, 0x7e, - 0x7a, 0x79, 0x7a, 0x78, 0x72, 0x74, 0x77, 0x74, 0x72, 0x77, 0x79, - 0x76, 0x79, 0x7e, 0x7e, 0x7e, 0x81, 0x85, 0x83, 0x83, 0x85, 0x86, - 0x84, 0x84, 0x84, 0x81, 0x80, 0x7f, 0x7e, 0x7d, 0x7c, 0x7c, 0x7c, - 0x7c, 0x7c, 0x7e, 0x80, 0x80, 0x82, 0x84, 0x84, 0x85, 0x86, 0x86, - 0x86, 0x85, 0x86, 0x85, 0x82, 0x81, 0x81, 0x80, 0x7f, 0x7f, 0x7f, - 0x7e, 0x7f, 0x7f, 0x7f, 0x7e, 0x7e, 0x7e, 0x75, 0x6c, 0x74, 0x76, - 0x68, 0x64, 0x71, 0x73, 0x6a, 0x73, 0x7f, 0x7d, 0x82, 0x8c, 0x90, - 0x8b, 0x90, 0x9a, 0x97, 0x92, 0x94, 0x96, 0x91, 0x8e, 0x8c, 0x89, - 0x86, 0x82, 0x7f, 0x7d, 0x78, 0x74, 0x75, 0x74, 0x70, 0x6f, 0x73, - 0x74, 0x72, 0x75, 0x7a, 0x7a, 0x7b, 0x80, 0x83, 0x82, 0x85, 0x88, - 0x87, 0x86, 0x87, 0x86, 0x85, 0x83, 0x81, 0x7f, 0x7d, 0x7d, 0x7c, - 0x7a, 0x7a, 0x7a, 0x7a, 0x7a, 0x7b, 0x7d, 0x7f, 0x80, 0x82, 0x83, - 0x85, 0x86, 0x87, 0x87, 0x88, 0x87, 0x86, 0x86, 0x84, 0x83, 0x83, - 0x81, 0x7f, 0x7e, 0x7d, 0x7c, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7d, - 0x7d, 0x7e, 0x7e, 0x7f, 0x7b, 0x72, 0x75, 0x7b, 0x73, 0x6b, 0x72, - 0x7a, 0x73, 0x74, 0x7f, 0x82, 0x81, 0x89, 0x8e, 0x89, 0x8b, 0x93, - 0x93, 0x8f, 0x8e, 0x90, 0x8d, 0x89, 0x89, 0x86, 0x84, 0x81, 0x7e, - 0x7c, 0x7a, 0x77, 0x77, 0x78, 0x76, 0x73, 0x76, 0x78, 0x77, 0x78, - 0x7b, 0x7d, 0x7d, 0x7f, 0x81, 0x81, 0x81, 0x83, 0x83, 0x82, 0x81, - 0x80, 0x80, 0x81, 0x7f, 0x7e, 0x7f, 0x80, 0x7d, 0x7d, 0x7f, 0x7e, - 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x83, 0x82, 0x82, 0x84, 0x84, 0x83, - 0x83, 0x83, 0x83, 0x82, 0x81, 0x81, 0x7f, 0x7e, 0x7e, 0x7e, 0x7d, - 0x7c, 0x7c, 0x7e, 0x7d, 0x7d, 0x7e, 0x7f, 0x80, 0x80, 0x81, 0x81, - 0x82, 0x81, 0x80, 0x80, 0x7d, 0x77, 0x75, 0x78, 0x76, 0x70, 0x72, - 0x78, 0x76, 0x76, 0x7d, 0x81, 0x81, 0x85, 0x8a, 0x89, 0x8a, 0x8e, - 0x90, 0x8d, 0x8c, 0x8d, 0x8c, 0x89, 0x87, 0x86, 0x84, 0x83, 0x80, - 0x7f, 0x7d, 0x7a, 0x79, 0x78, 0x77, 0x75, 0x75, 0x76, 0x76, 0x77, - 0x79, 0x7b, 0x7c, 0x7e, 0x80, 0x81, 0x82, 0x84, 0x84, 0x82, 0x82, - 0x82, 0x81, 0x7e, 0x7d, 0x7f, 0x7e, 0x7d, 0x7e, 0x80, 0x7f, 0x7f, - 0x81, 0x81, 0x80, 0x81, 0x83, 0x82, 0x82, 0x83, 0x83, 0x83, 0x83, - 0x84, 0x83, 0x82, 0x82, 0x81, 0x80, 0x7f, 0x7f, 0x7e, 0x7c, 0x7b, - 0x7b, 0x7b, 0x7a, 0x7b, 0x7c, 0x7c, 0x7d, 0x7e, 0x7e, 0x7f, 0x7f, - 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7e, 0x7e, 0x7e, - 0x7e, 0x7d, 0x7e, 0x7e, 0x7f, 0x7f, 0x7f, 0x80, 0x81, 0x82, 0x82, - 0x83, 0x83, 0x83, 0x84, 0x84, 0x83, 0x84, 0x83, 0x81, 0x81, 0x80, - 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7e, 0x7e, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7c, 0x7d, 0x7e, - 0x7e, 0x7f, 0x80, 0x80, 0x81, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, - 0x82, 0x81, 0x81, 0x81, 0x81, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7f, - 0x7e, 0x7e, 0x7d, 0x7e, 0x7d, 0x79, 0x78, 0x7a, 0x78, 0x76, 0x76, - 0x79, 0x79, 0x79, 0x7d, 0x7f, 0x81, 0x83, 0x87, 0x88, 0x88, 0x8b, - 0x8c, 0x8b, 0x8b, 0x8b, 0x8a, 0x88, 0x86, 0x85, 0x83, 0x81, 0x7f, - 0x7e, 0x7c, 0x7a, 0x7a, 0x79, 0x79, 0x78, 0x78, 0x7a, 0x7a, 0x7a, - 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x80, 0x81, 0x82, 0x82, 0x82, 0x82, - 0x82, 0x82, 0x81, 0x81, 0x80, 0x7f, 0x7f, 0x7d, 0x7c, 0x7d, 0x7c, - 0x7c, 0x7c, 0x7c, 0x7d, 0x7e, 0x7e, 0x7f, 0x80, 0x81, 0x81, 0x82, - 0x83, 0x83, 0x83, 0x83, 0x84, 0x83, 0x83, 0x82, 0x81, 0x80, 0x7f, - 0x7e, 0x7e, 0x7d, 0x7d, 0x7c, 0x7c, 0x7c, 0x7c, 0x7d, 0x7d, 0x7d, - 0x7e, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x81, 0x81, 0x81, - 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x80, 0x80, 0x80, 0x80, 0x7f, - 0x7f, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7f, 0x80, 0x80, - 0x81, 0x81, 0x82, 0x82, 0x82, 0x82, 0x81, 0x81, 0x81, 0x80, 0x7f, - 0x7f, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7f, 0x7f, - 0x7f, 0x80, 0x80, 0x80, 0x80, 0x81, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, - }, - { // 9 - 0x7f, 0x7e, 0x81, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, - 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, - 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x80, - 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, - 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, - 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, - 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x80, - 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, - 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, - 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x80, - 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, - 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, - 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x80, - 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, - 0x80, 0x7f, 0x80, 0x7f, 0x81, 0x7f, 0x80, 0x80, 0x80, 0x7f, 0x80, - 0x7f, 0x7f, 0x81, 0x7f, 0x81, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x80, - 0x7f, 0x7f, 0x80, 0x7e, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, - 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7e, 0x80, 0x7f, 0x7f, 0x80, - 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x7f, 0x80, - 0x7f, 0x80, 0x80, 0x7e, 0x81, 0x7d, 0x7f, 0x7f, 0x7e, 0x7e, 0x7f, - 0x7d, 0x7f, 0x7f, 0x7d, 0x80, 0x7e, 0x7f, 0x80, 0x7f, 0x81, 0x80, - 0x81, 0x81, 0x81, 0x81, 0x81, 0x82, 0x81, 0x82, 0x81, 0x81, 0x81, - 0x81, 0x81, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x7e, 0x7f, 0x7e, 0x7e, - 0x7e, 0x7e, 0x7f, 0x7d, 0x7e, 0x7d, 0x7e, 0x7e, 0x80, 0x7e, 0x7f, - 0x7e, 0x7e, 0x7e, 0x83, 0x84, 0x82, 0x81, 0x82, 0x80, 0x7e, 0x84, - 0x7e, 0x81, 0x81, 0x7d, 0x7f, 0x7f, 0x7d, 0x81, 0x7f, 0x7e, 0x82, - 0x7c, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x81, 0x7d, 0x7f, 0x7c, 0x7f, - 0x7c, 0x7c, 0x7e, 0x7c, 0x7d, 0x7d, 0x7c, 0x7f, 0x7f, 0x7d, 0x81, - 0x80, 0x81, 0x82, 0x80, 0x84, 0x82, 0x82, 0x85, 0x81, 0x84, 0x83, - 0x81, 0x82, 0x82, 0x81, 0x81, 0x82, 0x80, 0x80, 0x7f, 0x7d, 0x80, - 0x7e, 0x7c, 0x7f, 0x7b, 0x7d, 0x7b, 0x7c, 0x7d, 0x7c, 0x7d, 0x7f, - 0x7e, 0x7f, 0x80, 0x7f, 0x83, 0x80, 0x83, 0x83, 0x80, 0x83, 0x81, - 0x81, 0x84, 0x81, 0x7f, 0x83, 0x7e, 0x7f, 0x81, 0x7e, 0x80, 0x7e, - 0x7e, 0x80, 0x7d, 0x7f, 0x7f, 0x80, 0x82, 0x7f, 0x82, 0x76, 0x7c, - 0x85, 0x6f, 0x7e, 0x7b, 0x72, 0x82, 0x6e, 0x7a, 0x84, 0x74, 0x83, - 0x7f, 0x83, 0x88, 0x82, 0x88, 0x8a, 0x8a, 0x84, 0x8a, 0x87, 0x84, - 0x87, 0x7e, 0x87, 0x82, 0x7a, 0x84, 0x7c, 0x7d, 0x7f, 0x77, 0x80, - 0x7c, 0x79, 0x7d, 0x7e, 0x7c, 0x7a, 0x7b, 0x7e, 0x7a, 0x7b, 0x7f, - 0x7e, 0x7e, 0x7f, 0x82, 0x83, 0x81, 0x84, 0x86, 0x84, 0x84, 0x84, - 0x86, 0x82, 0x80, 0x83, 0x81, 0x7e, 0x7f, 0x7e, 0x7f, 0x7d, 0x7b, - 0x80, 0x7f, 0x7d, 0x80, 0x80, 0x84, 0x80, 0x87, 0x77, 0x72, 0x90, - 0x67, 0x74, 0x81, 0x62, 0x85, 0x6b, 0x6c, 0x8d, 0x6e, 0x80, 0x88, - 0x81, 0x91, 0x88, 0x8b, 0x95, 0x90, 0x86, 0x91, 0x8c, 0x83, 0x8a, - 0x7a, 0x85, 0x80, 0x70, 0x84, 0x76, 0x77, 0x7d, 0x72, 0x81, 0x7c, - 0x75, 0x82, 0x80, 0x7a, 0x83, 0x7e, 0x81, 0x81, 0x79, 0x84, 0x7d, - 0x7b, 0x82, 0x7e, 0x81, 0x80, 0x7f, 0x87, 0x81, 0x81, 0x8a, 0x82, - 0x85, 0x84, 0x83, 0x85, 0x7f, 0x81, 0x82, 0x7d, 0x7e, 0x7e, 0x7c, - 0x80, 0x7b, 0x81, 0x81, 0x82, 0x82, 0x89, 0x7b, 0x60, 0x9b, 0x65, - 0x5e, 0x8f, 0x4f, 0x86, 0x6c, 0x59, 0x9d, 0x68, 0x7c, 0x94, 0x81, - 0x9b, 0x8e, 0x8f, 0xa1, 0x97, 0x86, 0x99, 0x92, 0x7e, 0x8c, 0x73, - 0x83, 0x7c, 0x60, 0x82, 0x6f, 0x6c, 0x78, 0x70, 0x7f, 0x7c, 0x75, - 0x89, 0x89, 0x7a, 0x8c, 0x88, 0x85, 0x87, 0x7c, 0x89, 0x7c, 0x75, - 0x80, 0x79, 0x78, 0x7b, 0x7c, 0x83, 0x7d, 0x81, 0x8d, 0x84, 0x87, - 0x8b, 0x88, 0x88, 0x82, 0x84, 0x84, 0x7a, 0x7b, 0x7f, 0x77, 0x7a, - 0x7a, 0x7d, 0x86, 0x7b, 0x8e, 0x56, 0x80, 0x9e, 0x30, 0x96, 0x70, - 0x58, 0x98, 0x44, 0x93, 0x8e, 0x60, 0x9d, 0x8f, 0x90, 0x97, 0x90, - 0x9a, 0x9e, 0x84, 0x86, 0x9e, 0x74, 0x7b, 0x7f, 0x6e, 0x83, 0x5f, - 0x74, 0x82, 0x66, 0x78, 0x80, 0x81, 0x7f, 0x82, 0x89, 0x8f, 0x81, - 0x85, 0x8f, 0x81, 0x7f, 0x7e, 0x80, 0x77, 0x6f, 0x79, 0x7a, 0x72, - 0x78, 0x82, 0x82, 0x81, 0x86, 0x8f, 0x8a, 0x85, 0x8e, 0x8c, 0x83, - 0x82, 0x82, 0x81, 0x78, 0x79, 0x7f, 0x77, 0x79, 0x76, 0x89, 0x7e, - 0x90, 0x6c, 0x53, 0xbf, 0x42, 0x5e, 0xa0, 0x3f, 0x98, 0x5b, 0x68, - 0xb0, 0x62, 0x86, 0xa2, 0x92, 0x94, 0x92, 0x97, 0x9c, 0x8e, 0x75, - 0x95, 0x86, 0x62, 0x7f, 0x6e, 0x79, 0x6e, 0x65, 0x8b, 0x78, 0x73, - 0x86, 0x91, 0x82, 0x86, 0x8c, 0x8d, 0x8a, 0x77, 0x88, 0x82, 0x72, - 0x75, 0x77, 0x76, 0x70, 0x70, 0x7e, 0x7e, 0x76, 0x88, 0x8d, 0x88, - 0x88, 0x8e, 0x90, 0x85, 0x82, 0x89, 0x82, 0x79, 0x7c, 0x7d, 0x7b, - 0x74, 0x7d, 0x80, 0x7b, 0x7d, 0x85, 0x8c, 0x89, 0x93, 0x4b, 0x89, - 0x9f, 0x1d, 0x93, 0x71, 0x4f, 0x93, 0x49, 0x92, 0x98, 0x67, 0x9d, - 0xa5, 0x96, 0x91, 0x9c, 0x99, 0x91, 0x83, 0x72, 0x91, 0x6f, 0x5c, - 0x7d, 0x6c, 0x74, 0x6a, 0x7a, 0x8d, 0x7c, 0x81, 0x94, 0x98, 0x81, - 0x8c, 0x8e, 0x88, 0x7c, 0x73, 0x80, 0x73, 0x69, 0x6e, 0x79, 0x71, - 0x70, 0x80, 0x86, 0x83, 0x85, 0x93, 0x92, 0x88, 0x89, 0x8f, 0x85, - 0x79, 0x7f, 0x7f, 0x76, 0x74, 0x7a, 0x7f, 0x79, 0x7b, 0x88, 0x83, - 0x84, 0x84, 0x8e, 0x8b, 0x90, 0x78, 0x48, 0xa4, 0x60, 0x31, 0x98, - 0x50, 0x6e, 0x79, 0x62, 0xa5, 0x8b, 0x83, 0xa6, 0xad, 0x95, 0x91, - 0x9f, 0x8c, 0x84, 0x75, 0x6e, 0x82, 0x5f, 0x60, 0x79, 0x73, 0x73, - 0x79, 0x8d, 0x8e, 0x89, 0x8b, 0x9b, 0x92, 0x81, 0x88, 0x84, 0x7b, - 0x6e, 0x70, 0x73, 0x6c, 0x64, 0x75, 0x7e, 0x74, 0x82, 0x8d, 0x8e, - 0x8c, 0x8e, 0x93, 0x8e, 0x80, 0x83, 0x85, 0x75, 0x75, 0x7a, 0x79, - 0x76, 0x79, 0x81, 0x83, 0x7f, 0x86, 0x8b, 0x86, 0x85, 0x85, 0x8e, - 0x83, 0x84, 0x5b, 0x66, 0x91, 0x3a, 0x62, 0x7f, 0x5a, 0x7c, 0x74, - 0x89, 0x9c, 0x8f, 0x96, 0xaa, 0xa1, 0x8e, 0x94, 0x90, 0x7e, 0x77, - 0x6f, 0x6f, 0x71, 0x62, 0x6e, 0x7c, 0x79, 0x7b, 0x8b, 0x92, 0x8e, - 0x90, 0x8e, 0x96, 0x87, 0x7d, 0x82, 0x79, 0x70, 0x6d, 0x70, 0x6f, - 0x6c, 0x72, 0x7f, 0x7e, 0x80, 0x8d, 0x8f, 0x8d, 0x8d, 0x8d, 0x8b, - 0x82, 0x7d, 0x80, 0x79, 0x74, 0x78, 0x7a, 0x79, 0x7b, 0x81, 0x85, - 0x83, 0x86, 0x8b, 0x85, 0x86, 0x82, 0x86, 0x84, 0x83, 0x7a, 0x46, - 0x83, 0x79, 0x3a, 0x7c, 0x75, 0x6b, 0x7b, 0x81, 0x90, 0x9b, 0x93, - 0x92, 0xab, 0x97, 0x87, 0x91, 0x89, 0x77, 0x77, 0x70, 0x71, 0x73, - 0x68, 0x74, 0x81, 0x7b, 0x80, 0x90, 0x8c, 0x8b, 0x90, 0x8e, 0x8a, - 0x83, 0x7f, 0x7d, 0x78, 0x70, 0x71, 0x70, 0x70, 0x72, 0x76, 0x7f, - 0x82, 0x85, 0x8b, 0x8e, 0x8c, 0x8b, 0x89, 0x87, 0x82, 0x7d, 0x7c, - 0x7a, 0x78, 0x78, 0x7b, 0x7b, 0x7d, 0x81, 0x82, 0x84, 0x86, 0x85, - 0x85, 0x86, 0x83, 0x89, 0x81, 0x88, 0x68, 0x56, 0x90, 0x5f, 0x4d, - 0x7d, 0x74, 0x6b, 0x79, 0x8b, 0x89, 0x99, 0x92, 0x95, 0xa7, 0x95, - 0x89, 0x91, 0x8c, 0x78, 0x7a, 0x76, 0x71, 0x72, 0x6e, 0x70, 0x7c, - 0x7c, 0x7a, 0x89, 0x8a, 0x88, 0x8e, 0x8e, 0x89, 0x89, 0x84, 0x7f, - 0x7e, 0x75, 0x72, 0x75, 0x72, 0x6f, 0x77, 0x7c, 0x7b, 0x83, 0x87, - 0x88, 0x8a, 0x89, 0x88, 0x87, 0x84, 0x7f, 0x7f, 0x7e, 0x7a, 0x7b, - 0x7c, 0x7b, 0x7e, 0x7e, 0x7d, 0x82, 0x82, 0x80, 0x83, 0x83, 0x82, - 0x88, 0x84, 0x89, 0x74, 0x5f, 0x8b, 0x75, 0x56, 0x73, 0x7e, 0x6e, - 0x6e, 0x86, 0x82, 0x8a, 0x91, 0x8b, 0x97, 0x9a, 0x8f, 0x89, 0x92, - 0x8a, 0x7f, 0x7d, 0x7d, 0x79, 0x74, 0x74, 0x75, 0x78, 0x78, 0x7a, - 0x7e, 0x82, 0x84, 0x86, 0x88, 0x87, 0x87, 0x85, 0x83, 0x80, 0x7d, - 0x7b, 0x79, 0x78, 0x78, 0x79, 0x7b, 0x7e, 0x7e, 0x80, 0x81, 0x83, - 0x83, 0x82, 0x83, 0x82, 0x81, 0x82, 0x81, 0x80, 0x7e, 0x7e, 0x7f, - 0x7d, 0x7d, 0x7f, 0x7e, 0x7e, 0x80, 0x81, 0x82, 0x84, 0x85, 0x84, - 0x8a, 0x71, 0x6d, 0x8b, 0x76, 0x65, 0x73, 0x7f, 0x75, 0x6e, 0x7f, - 0x81, 0x83, 0x88, 0x89, 0x8a, 0x93, 0x91, 0x84, 0x8a, 0x8f, 0x84, - 0x7c, 0x81, 0x80, 0x7a, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7c, 0x7e, - 0x84, 0x81, 0x7e, 0x82, 0x84, 0x7f, 0x7d, 0x80, 0x7d, 0x7b, 0x7d, - 0x7c, 0x7b, 0x7e, 0x7e, 0x7d, 0x81, 0x81, 0x81, 0x81, 0x83, 0x83, - 0x80, 0x82, 0x81, 0x80, 0x80, 0x7e, 0x7e, 0x7e, 0x7d, 0x7e, 0x7f, - 0x7f, 0x7f, 0x81, 0x81, 0x81, 0x83, 0x81, 0x82, 0x84, 0x81, 0x84, - 0x72, 0x72, 0x88, 0x74, 0x6b, 0x79, 0x7f, 0x76, 0x75, 0x81, 0x7f, - 0x83, 0x86, 0x86, 0x87, 0x8c, 0x8d, 0x85, 0x85, 0x8a, 0x85, 0x7d, - 0x81, 0x82, 0x7e, 0x7e, 0x7f, 0x7e, 0x80, 0x81, 0x7e, 0x7f, 0x82, - 0x7f, 0x7d, 0x7d, 0x7f, 0x7c, 0x79, 0x7d, 0x7d, 0x7b, 0x7d, 0x7e, - 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x82, 0x83, 0x83, 0x81, 0x81, 0x80, - 0x80, 0x7f, 0x7e, 0x7f, 0x7e, 0x7e, 0x7e, 0x80, 0x80, 0x80, 0x81, - 0x81, 0x81, 0x82, 0x80, 0x82, 0x80, 0x7e, 0x80, 0x80, 0x80, 0x81, - 0x82, 0x72, 0x76, 0x88, 0x76, 0x70, 0x7b, 0x81, 0x78, 0x73, 0x81, - 0x7e, 0x7e, 0x84, 0x83, 0x84, 0x8b, 0x8a, 0x83, 0x87, 0x8b, 0x86, - 0x80, 0x83, 0x84, 0x81, 0x7e, 0x80, 0x81, 0x7e, 0x7e, 0x7c, 0x7d, - 0x80, 0x7d, 0x7a, 0x7e, 0x7e, 0x7c, 0x7c, 0x7e, 0x7e, 0x7c, 0x7e, - 0x80, 0x80, 0x7f, 0x81, 0x80, 0x80, 0x7f, 0x80, 0x81, 0x7f, 0x7f, - 0x80, 0x80, 0x81, 0x7f, 0x81, 0x81, 0x81, 0x82, 0x81, 0x82, 0x81, - 0x80, 0x81, 0x80, 0x7e, 0x7f, 0x7e, 0x7e, 0x7e, 0x7e, 0x80, 0x81, - 0x80, 0x83, 0x83, 0x85, 0x7a, 0x70, 0x8a, 0x7c, 0x68, 0x79, 0x7e, - 0x75, 0x6d, 0x7f, 0x7f, 0x7a, 0x85, 0x84, 0x88, 0x8f, 0x8c, 0x87, - 0x8d, 0x8e, 0x85, 0x82, 0x85, 0x82, 0x7a, 0x7c, 0x7e, 0x7a, 0x79, - 0x7c, 0x7b, 0x7c, 0x7f, 0x7e, 0x7f, 0x80, 0x81, 0x7f, 0x80, 0x81, - 0x7f, 0x7e, 0x80, 0x7d, 0x7d, 0x7e, 0x7b, 0x7f, 0x7d, 0x7d, 0x7f, - 0x7e, 0x7f, 0x80, 0x81, 0x81, 0x82, 0x83, 0x81, 0x82, 0x82, 0x81, - 0x80, 0x81, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x81, - 0x80, 0x81, 0x81, 0x81, 0x81, 0x7f, 0x84, 0x81, 0x82, 0x72, 0x70, - 0x8e, 0x6c, 0x67, 0x83, 0x75, 0x70, 0x74, 0x80, 0x7b, 0x81, 0x85, - 0x82, 0x93, 0x8d, 0x86, 0x92, 0x92, 0x86, 0x89, 0x89, 0x83, 0x80, - 0x7d, 0x7b, 0x7d, 0x79, 0x74, 0x7c, 0x7b, 0x77, 0x7d, 0x80, 0x7d, - 0x7f, 0x83, 0x81, 0x84, 0x82, 0x7f, 0x84, 0x82, 0x7d, 0x80, 0x81, - 0x7b, 0x7b, 0x80, 0x7b, 0x79, 0x7d, 0x7c, 0x7c, 0x7b, 0x7f, 0x82, - 0x80, 0x80, 0x85, 0x86, 0x83, 0x86, 0x86, 0x86, 0x84, 0x83, 0x84, - 0x81, 0x7f, 0x7f, 0x7f, 0x7d, 0x7c, 0x7d, 0x7f, 0x7e, 0x7f, 0x81, - 0x87, 0x81, 0x86, 0x77, 0x6d, 0x91, 0x63, 0x6a, 0x82, 0x63, 0x77, - 0x6f, 0x74, 0x81, 0x7d, 0x7f, 0x8e, 0x92, 0x88, 0x97, 0x94, 0x92, - 0x93, 0x8a, 0x8c, 0x8a, 0x7d, 0x7e, 0x7e, 0x76, 0x74, 0x74, 0x75, - 0x74, 0x74, 0x78, 0x7e, 0x7b, 0x7f, 0x84, 0x84, 0x86, 0x85, 0x88, - 0x88, 0x84, 0x82, 0x85, 0x80, 0x7e, 0x7c, 0x79, 0x7c, 0x77, 0x77, - 0x7a, 0x78, 0x78, 0x7b, 0x7d, 0x7e, 0x80, 0x83, 0x86, 0x84, 0x86, - 0x8a, 0x88, 0x85, 0x86, 0x87, 0x84, 0x82, 0x83, 0x82, 0x7f, 0x7e, - 0x7f, 0x7e, 0x7e, 0x7d, 0x7f, 0x7f, 0x80, 0x82, 0x81, 0x83, 0x69, - 0x81, 0x7f, 0x5f, 0x7e, 0x6b, 0x72, 0x74, 0x6a, 0x81, 0x7c, 0x7a, - 0x89, 0x8c, 0x8a, 0x92, 0x8e, 0x96, 0x93, 0x89, 0x91, 0x8b, 0x84, - 0x84, 0x7e, 0x7f, 0x7a, 0x74, 0x7a, 0x77, 0x73, 0x78, 0x79, 0x7a, - 0x7a, 0x7c, 0x81, 0x80, 0x80, 0x85, 0x85, 0x85, 0x85, 0x84, 0x87, - 0x83, 0x82, 0x84, 0x81, 0x7e, 0x7b, 0x7c, 0x7b, 0x76, 0x78, 0x79, - 0x78, 0x77, 0x7b, 0x7e, 0x7d, 0x80, 0x85, 0x85, 0x85, 0x87, 0x89, - 0x88, 0x87, 0x88, 0x87, 0x83, 0x83, 0x82, 0x80, 0x7e, 0x7e, 0x7e, - 0x7c, 0x7c, 0x7c, 0x7d, 0x7d, 0x80, 0x7e, 0x83, 0x76, 0x75, 0x85, - 0x6e, 0x77, 0x78, 0x72, 0x79, 0x70, 0x79, 0x7f, 0x78, 0x81, 0x85, - 0x84, 0x8b, 0x87, 0x8e, 0x8e, 0x88, 0x8e, 0x8c, 0x88, 0x88, 0x84, - 0x84, 0x82, 0x7d, 0x7f, 0x7d, 0x7a, 0x7a, 0x79, 0x7a, 0x79, 0x7a, - 0x7c, 0x7c, 0x7c, 0x7e, 0x7f, 0x80, 0x80, 0x81, 0x83, 0x82, 0x82, - 0x83, 0x83, 0x81, 0x80, 0x81, 0x7f, 0x7d, 0x7d, 0x7d, 0x7c, 0x7b, - 0x7c, 0x7c, 0x7d, 0x7d, 0x7e, 0x80, 0x80, 0x81, 0x83, 0x82, 0x82, - 0x83, 0x84, 0x83, 0x82, 0x82, 0x82, 0x80, 0x80, 0x81, 0x80, 0x7f, - 0x7f, 0x7e, 0x7f, 0x7e, 0x7d, 0x7e, 0x7e, 0x7d, 0x7e, 0x7e, 0x7e, - 0x7e, 0x80, 0x7c, 0x7c, 0x80, 0x7b, 0x7c, 0x7d, 0x7c, 0x7d, 0x7c, - 0x7c, 0x7f, 0x7c, 0x7f, 0x81, 0x80, 0x83, 0x82, 0x83, 0x85, 0x83, - 0x85, 0x85, 0x83, 0x85, 0x83, 0x83, 0x84, 0x82, 0x83, 0x82, 0x81, - 0x80, 0x80, 0x7f, 0x7e, 0x7d, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, - 0x7d, 0x7e, 0x7e, 0x7f, 0x80, 0x80, 0x80, 0x81, 0x81, 0x80, 0x80, - 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, - 0x80, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x80, 0x80, - 0x7f, 0x7f, 0x7e, 0x7e, 0x7d, 0x7d, 0x7e, 0x7e, 0x7e, 0x7e, 0x7f, - 0x7f, 0x7f, 0x80, 0x81, 0x80, 0x81, 0x81, 0x81, 0x81, 0x80, 0x81, - 0x80, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x7f, 0x7f, 0x80, 0x7f, 0x7e, 0x7f, 0x7e, 0x7e, 0x7e, 0x7e, 0x7f, - 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x81, 0x80, 0x81, 0x81, 0x80, 0x80, - 0x80, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7f, 0x7f, 0x7f, 0x80, - 0x80, 0x81, 0x81, 0x81, 0x81, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x7f, - 0x7e, 0x7f, 0x7e, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, - 0x7f, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, - 0x80, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x81, 0x80, 0x80, 0x7f, - 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, - 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x80, - 0x80, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7e, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x81, - 0x80, 0x81, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7e, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x81, 0x80, 0x80, - 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x7f, 0x7f, 0x81, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x7e, 0x81, - 0x80, 0x7e, 0x81, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, - 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, - 0x80, 0x7e, 0x7f, 0x80, 0x7e, 0x7f, 0x80, 0x80, 0x7f, 0x81, 0x80, - 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7e, - 0x7f, 0x81, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, - 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x7f, - 0x80, 0x7e, 0x80, 0x7e, 0x80, 0x7e, 0x7f, 0x81, 0x7e, 0x80, 0x80, - 0x7f, 0x80, 0x80, 0x7f, 0x82, 0x7f, 0x7f, 0x82, 0x7f, 0x7f, 0x81, - 0x7f, 0x7e, 0x80, 0x7e, 0x80, 0x80, 0x7d, 0x81, 0x7f, 0x7f, 0x81, - 0x7f, 0x80, 0x81, 0x7e, 0x81, 0x80, 0x7e, 0x81, 0x7f, 0x7f, 0x81, - 0x7e, 0x80, 0x81, 0x7d, 0x82, 0x7f, 0x7f, 0x82, 0x7e, 0x81, 0x80, - 0x7d, 0x81, 0x7f, 0x7e, 0x81, 0x7e, 0x80, 0x7e, 0x7f, 0x80, 0x7e, - 0x80, 0x80, 0x7f, 0x81, 0x80, 0x7e, 0x82, 0x7f, 0x7e, 0x81, 0x7e, - 0x7e, 0x80, 0x7d, 0x80, 0x80, 0x7c, 0x83, 0x7e, 0x7f, 0x82, 0x7e, - 0x82, 0x80, 0x7f, 0x82, 0x7f, 0x7f, 0x81, 0x7e, 0x80, 0x80, 0x7d, - 0x82, 0x7d, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x81, 0x7f, 0x7f, 0x7f, - 0x80, 0x7f, 0x80, 0x7e, 0x80, 0x7f, 0x7e, 0x82, 0x7e, 0x7f, 0x82, - 0x7e, 0x81, 0x80, 0x7e, 0x81, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, - 0x7f, 0x7f, 0x80, 0x7e, 0x7f, 0x81, 0x7e, 0x81, 0x80, 0x7f, 0x81, - 0x7f, 0x80, 0x80, 0x80, 0x80, 0x7e, 0x81, 0x7f, 0x7f, 0x80, 0x7f, - 0x80, 0x7e, 0x80, 0x7f, 0x7f, 0x81, 0x7e, 0x80, 0x81, 0x7d, 0x82, - 0x80, 0x7e, 0x82, 0x7d, 0x81, 0x80, 0x7d, 0x83, 0x7e, 0x7e, 0x82, - 0x7d, 0x81, 0x7f, 0x7f, 0x82, 0x7e, 0x81, 0x80, 0x7f, 0x81, 0x80, - 0x7f, 0x82, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7e, 0x80, 0x7f, - 0x7e, 0x81, 0x7f, 0x7e, 0x81, 0x7f, 0x7f, 0x81, 0x7e, 0x80, 0x81, - 0x7e, 0x81, 0x7f, 0x80, 0x80, 0x7e, 0x82, 0x7e, 0x7f, 0x81, 0x7c, - 0x81, 0x7f, 0x7d, 0x82, 0x7d, 0x7f, 0x82, 0x7c, 0x82, 0x81, 0x7d, - 0x83, 0x80, 0x7d, 0x82, 0x7f, 0x7e, 0x82, 0x7d, 0x7f, 0x82, 0x7c, - 0x81, 0x81, 0x7d, 0x81, 0x7e, 0x7f, 0x81, 0x7d, 0x81, 0x81, 0x7e, - 0x7f, 0x81, 0x81, 0x7e, 0x81, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x80, - 0x7e, 0x7f, 0x80, 0x7e, 0x80, 0x7e, 0x81, 0x80, 0x7e, 0x81, 0x80, - 0x80, 0x80, 0x80, 0x81, 0x80, 0x7e, 0x80, 0x80, 0x7e, 0x7f, 0x7e, - 0x80, 0x80, 0x7d, 0x81, 0x81, 0x7d, 0x81, 0x81, 0x7f, 0x81, 0x7f, - 0x80, 0x80, 0x7e, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x7f, 0x80, 0x80, 0x7e, 0x82, 0x7f, 0x7e, 0x82, 0x7e, 0x7e, 0x81, - 0x7e, 0x80, 0x80, 0x7c, 0x82, 0x7f, 0x7c, 0x82, 0x7f, 0x7f, 0x80, - 0x7f, 0x81, 0x80, 0x7e, 0x81, 0x81, 0x7e, 0x80, 0x80, 0x7f, 0x7f, - 0x7f, 0x7f, 0x81, 0x7f, 0x7f, 0x82, 0x7f, 0x7f, 0x80, 0x80, 0x80, - 0x80, 0x7e, 0x81, 0x7f, 0x7e, 0x80, 0x7f, 0x80, 0x7f, 0x7e, 0x81, - 0x7f, 0x7d, 0x82, 0x7f, 0x7f, 0x81, 0x7d, 0x82, 0x7f, 0x7e, 0x81, - 0x80, 0x7e, 0x7f, 0x80, 0x7f, 0x7f, 0x7e, 0x80, 0x80, 0x7f, 0x7f, - 0x80, 0x80, 0x7f, 0x80, 0x81, 0x81, 0x7e, 0x80, 0x7f, 0x7f, 0x80, - 0x7e, 0x7f, 0x80, 0x7e, 0x80, 0x81, 0x7f, 0x81, 0x80, 0x7f, 0x80, - 0x7f, 0x7e, 0x80, 0x7f, 0x7f, 0x80, 0x7e, 0x80, 0x80, 0x7f, 0x80, - 0x80, 0x80, 0x81, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x80, - 0x7f, 0x7e, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, - 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - }, - }, - "zh": [][]byte{ - { // 0 - 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, - 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, - 0x80, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, - 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, - 0x80, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, - 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x80, - 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, - 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, - 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x80, - 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x80, - 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x81, - 0x7f, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x81, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7e, - 0x7e, 0x7e, 0x7e, 0x7d, 0x7e, 0x7d, 0x7e, 0x7e, 0x7e, 0x7f, 0x80, - 0x80, 0x80, 0x82, 0x81, 0x82, 0x82, 0x83, 0x83, 0x83, 0x83, 0x83, - 0x83, 0x83, 0x83, 0x81, 0x81, 0x7f, 0x80, 0x7e, 0x7d, 0x7d, 0x7a, - 0x7a, 0x78, 0x78, 0x77, 0x76, 0x76, 0x77, 0x78, 0x78, 0x7a, 0x7b, - 0x7f, 0x82, 0x83, 0x88, 0x8a, 0x8c, 0x90, 0x8f, 0x94, 0x92, 0x93, - 0x93, 0x90, 0x90, 0x8b, 0x88, 0x84, 0x81, 0x7d, 0x77, 0x73, 0x6e, - 0x69, 0x65, 0x65, 0x61, 0x64, 0x61, 0x66, 0x65, 0x6a, 0x69, 0x71, - 0x73, 0x7b, 0x87, 0x86, 0x97, 0x92, 0xa5, 0x9f, 0xa5, 0xab, 0xa3, - 0xab, 0x9f, 0xa0, 0x98, 0x90, 0x8b, 0x83, 0x7d, 0x76, 0x70, 0x6d, - 0x68, 0x64, 0x62, 0x60, 0x5f, 0x60, 0x5e, 0x5e, 0x60, 0x60, 0x64, - 0x64, 0x70, 0x76, 0x7c, 0x87, 0x8b, 0x99, 0x9a, 0xa5, 0xa9, 0xaa, - 0xae, 0xaa, 0xaa, 0xa2, 0x9e, 0x97, 0x8f, 0x89, 0x81, 0x7d, 0x77, - 0x74, 0x6f, 0x6d, 0x69, 0x66, 0x65, 0x62, 0x61, 0x60, 0x5f, 0x5d, - 0x60, 0x60, 0x64, 0x67, 0x71, 0x74, 0x7f, 0x85, 0x8e, 0x98, 0x9a, - 0xa7, 0xa6, 0xac, 0xab, 0xaa, 0xa9, 0xa3, 0x9f, 0x99, 0x93, 0x8b, - 0x84, 0x7d, 0x77, 0x71, 0x6c, 0x6a, 0x63, 0x63, 0x60, 0x5f, 0x60, - 0x5e, 0x61, 0x60, 0x63, 0x65, 0x69, 0x6e, 0x72, 0x77, 0x7e, 0x83, - 0x8c, 0x91, 0x98, 0x9c, 0xa2, 0xa4, 0xa7, 0xa5, 0xa5, 0xa2, 0xa2, - 0x9d, 0x95, 0x96, 0x88, 0x85, 0x7f, 0x7a, 0x73, 0x73, 0x6d, 0x6a, - 0x66, 0x61, 0x62, 0x5f, 0x61, 0x5f, 0x5f, 0x5f, 0x5e, 0x5c, 0x63, - 0x6b, 0x70, 0x78, 0x83, 0x8a, 0x95, 0x9b, 0xa6, 0xaa, 0xad, 0xb2, - 0xad, 0xad, 0xa6, 0xa0, 0x9b, 0x91, 0x8e, 0x83, 0x7e, 0x79, 0x73, - 0x72, 0x6c, 0x6f, 0x6a, 0x6b, 0x6b, 0x67, 0x63, 0x62, 0x5f, 0x5e, - 0x59, 0x5b, 0x58, 0x54, 0x5b, 0x62, 0x71, 0x79, 0x8d, 0x99, 0xa1, - 0xad, 0xb5, 0xb6, 0xbc, 0xb8, 0xb3, 0xaf, 0xa7, 0x9e, 0x95, 0x8f, - 0x84, 0x7e, 0x77, 0x73, 0x6f, 0x6d, 0x6d, 0x6c, 0x6e, 0x6e, 0x6e, - 0x6e, 0x69, 0x66, 0x63, 0x5d, 0x5e, 0x57, 0x57, 0x51, 0x53, 0x57, - 0x5d, 0x73, 0x76, 0x8e, 0x99, 0xa4, 0xaf, 0xb6, 0xbc, 0xba, 0xbe, - 0xb5, 0xaf, 0xab, 0x9c, 0x95, 0x8f, 0x82, 0x7f, 0x76, 0x72, 0x70, - 0x6b, 0x6e, 0x6c, 0x6e, 0x6f, 0x6f, 0x73, 0x6e, 0x6e, 0x69, 0x66, - 0x62, 0x5d, 0x5e, 0x55, 0x5a, 0x51, 0x5a, 0x5c, 0x67, 0x77, 0x7f, - 0x97, 0x9a, 0xab, 0xb1, 0xb8, 0xbb, 0xba, 0xbb, 0xb4, 0xad, 0xa7, - 0x9c, 0x94, 0x8c, 0x83, 0x7d, 0x77, 0x72, 0x6f, 0x6c, 0x6d, 0x6b, - 0x6d, 0x6f, 0x6e, 0x70, 0x6e, 0x6f, 0x6b, 0x6b, 0x65, 0x65, 0x5f, - 0x5d, 0x5c, 0x56, 0x59, 0x5a, 0x5d, 0x6c, 0x74, 0x81, 0x94, 0x98, - 0xaa, 0xad, 0xb7, 0xbb, 0xbb, 0xbd, 0xb5, 0xb2, 0xa8, 0xa2, 0x98, - 0x8f, 0x88, 0x7b, 0x7a, 0x72, 0x6d, 0x6d, 0x69, 0x6b, 0x6a, 0x6d, - 0x6e, 0x6f, 0x71, 0x70, 0x70, 0x6d, 0x6b, 0x68, 0x66, 0x62, 0x61, - 0x5e, 0x5d, 0x5e, 0x5d, 0x63, 0x69, 0x75, 0x7b, 0x8e, 0x93, 0x9e, - 0xaa, 0xac, 0xb7, 0xb6, 0xb9, 0xb7, 0xb1, 0xad, 0xa4, 0x9b, 0x94, - 0x87, 0x82, 0x79, 0x73, 0x70, 0x6b, 0x6d, 0x69, 0x6b, 0x6f, 0x6d, - 0x73, 0x71, 0x72, 0x72, 0x70, 0x6e, 0x6c, 0x68, 0x64, 0x63, 0x5f, - 0x60, 0x5d, 0x5f, 0x62, 0x64, 0x6e, 0x78, 0x7f, 0x90, 0x95, 0x9f, - 0xa9, 0xac, 0xb3, 0xb6, 0xb6, 0xb5, 0xb1, 0xaa, 0xa5, 0x99, 0x92, - 0x89, 0x80, 0x7a, 0x73, 0x6f, 0x6c, 0x6b, 0x6b, 0x6c, 0x6e, 0x6e, - 0x72, 0x73, 0x71, 0x75, 0x70, 0x70, 0x6d, 0x69, 0x69, 0x64, 0x65, - 0x62, 0x64, 0x64, 0x65, 0x69, 0x6c, 0x72, 0x7d, 0x80, 0x8f, 0x95, - 0x9a, 0xa7, 0xa5, 0xaf, 0xb0, 0xb0, 0xb0, 0xab, 0xa6, 0xa2, 0x97, - 0x92, 0x88, 0x7f, 0x7a, 0x73, 0x70, 0x6e, 0x6c, 0x6e, 0x6d, 0x6f, - 0x72, 0x71, 0x76, 0x73, 0x76, 0x74, 0x72, 0x72, 0x6d, 0x6c, 0x69, - 0x66, 0x67, 0x66, 0x69, 0x6a, 0x6b, 0x6e, 0x73, 0x74, 0x7e, 0x84, - 0x87, 0x96, 0x94, 0x9e, 0xa2, 0xa3, 0xab, 0xa8, 0xab, 0xa8, 0xa4, - 0x9f, 0x99, 0x91, 0x8b, 0x83, 0x7b, 0x76, 0x72, 0x6f, 0x6e, 0x6e, - 0x6f, 0x6f, 0x71, 0x73, 0x75, 0x76, 0x76, 0x77, 0x75, 0x74, 0x73, - 0x70, 0x70, 0x6d, 0x6c, 0x6b, 0x6b, 0x6e, 0x6e, 0x70, 0x72, 0x75, - 0x77, 0x7c, 0x82, 0x86, 0x8d, 0x93, 0x94, 0x9e, 0x9d, 0xa2, 0xa6, - 0xa1, 0xa7, 0x9e, 0x9e, 0x99, 0x90, 0x8d, 0x84, 0x7e, 0x79, 0x76, - 0x71, 0x72, 0x6f, 0x71, 0x72, 0x72, 0x76, 0x75, 0x78, 0x76, 0x77, - 0x77, 0x76, 0x76, 0x74, 0x73, 0x72, 0x71, 0x71, 0x70, 0x72, 0x72, - 0x74, 0x76, 0x77, 0x79, 0x79, 0x7d, 0x7b, 0x81, 0x82, 0x88, 0x8c, - 0x8f, 0x95, 0x96, 0x9b, 0x9d, 0x9e, 0x9f, 0x9d, 0x9b, 0x97, 0x93, - 0x8d, 0x87, 0x82, 0x7d, 0x79, 0x76, 0x74, 0x73, 0x73, 0x73, 0x74, - 0x75, 0x77, 0x77, 0x78, 0x78, 0x77, 0x77, 0x75, 0x74, 0x74, 0x73, - 0x73, 0x73, 0x73, 0x74, 0x73, 0x76, 0x75, 0x78, 0x78, 0x7a, 0x78, - 0x7e, 0x79, 0x81, 0x82, 0x84, 0x8f, 0x89, 0x98, 0x93, 0x9a, 0x9d, - 0x9b, 0xa1, 0x9a, 0x9c, 0x97, 0x90, 0x8f, 0x86, 0x82, 0x7f, 0x78, - 0x78, 0x74, 0x73, 0x75, 0x73, 0x76, 0x76, 0x77, 0x79, 0x77, 0x7a, - 0x77, 0x78, 0x77, 0x75, 0x77, 0x74, 0x75, 0x75, 0x75, 0x77, 0x75, - 0x77, 0x78, 0x79, 0x7a, 0x7a, 0x7b, 0x78, 0x7d, 0x76, 0x81, 0x7d, - 0x84, 0x8a, 0x87, 0x96, 0x8e, 0x9b, 0x99, 0x9b, 0x9f, 0x9a, 0x9b, - 0x96, 0x91, 0x8d, 0x87, 0x82, 0x7f, 0x79, 0x79, 0x75, 0x74, 0x75, - 0x75, 0x75, 0x79, 0x75, 0x7a, 0x78, 0x78, 0x7a, 0x77, 0x7a, 0x78, - 0x78, 0x78, 0x76, 0x77, 0x76, 0x75, 0x76, 0x75, 0x77, 0x76, 0x78, - 0x78, 0x78, 0x78, 0x7b, 0x78, 0x81, 0x7e, 0x84, 0x8b, 0x88, 0x95, - 0x92, 0x99, 0x9b, 0x9a, 0x9e, 0x9b, 0x98, 0x97, 0x8f, 0x8e, 0x88, - 0x83, 0x82, 0x7b, 0x7b, 0x78, 0x77, 0x77, 0x76, 0x77, 0x76, 0x78, - 0x76, 0x78, 0x78, 0x77, 0x79, 0x76, 0x79, 0x77, 0x78, 0x78, 0x77, - 0x78, 0x77, 0x78, 0x78, 0x78, 0x79, 0x79, 0x79, 0x79, 0x7c, 0x7a, - 0x81, 0x80, 0x86, 0x8b, 0x8a, 0x94, 0x93, 0x97, 0x9a, 0x99, 0x9b, - 0x99, 0x95, 0x94, 0x8e, 0x8b, 0x87, 0x82, 0x81, 0x7c, 0x7b, 0x7a, - 0x77, 0x77, 0x75, 0x74, 0x74, 0x73, 0x75, 0x73, 0x77, 0x76, 0x75, - 0x7a, 0x76, 0x7b, 0x7b, 0x7b, 0x7f, 0x7a, 0x7f, 0x7b, 0x7c, 0x7d, - 0x7b, 0x7d, 0x7c, 0x7d, 0x7f, 0x84, 0x83, 0x8c, 0x8b, 0x90, 0x94, - 0x92, 0x99, 0x94, 0x97, 0x95, 0x91, 0x92, 0x8a, 0x8a, 0x85, 0x81, - 0x80, 0x7b, 0x7a, 0x77, 0x76, 0x76, 0x75, 0x75, 0x76, 0x73, 0x76, - 0x74, 0x75, 0x78, 0x76, 0x79, 0x79, 0x79, 0x7c, 0x7b, 0x7c, 0x7e, - 0x7d, 0x7f, 0x7d, 0x7f, 0x7f, 0x7f, 0x82, 0x82, 0x86, 0x87, 0x8c, - 0x8c, 0x90, 0x92, 0x91, 0x97, 0x91, 0x95, 0x91, 0x8e, 0x8d, 0x88, - 0x87, 0x82, 0x81, 0x7d, 0x7b, 0x7a, 0x77, 0x77, 0x75, 0x76, 0x75, - 0x76, 0x76, 0x76, 0x77, 0x77, 0x77, 0x78, 0x7a, 0x78, 0x7c, 0x79, - 0x7b, 0x7b, 0x7a, 0x7d, 0x7a, 0x7f, 0x7d, 0x7e, 0x80, 0x7e, 0x82, - 0x85, 0x85, 0x8d, 0x8c, 0x8f, 0x95, 0x90, 0x97, 0x94, 0x93, 0x93, - 0x8f, 0x8d, 0x8a, 0x87, 0x84, 0x80, 0x7d, 0x7a, 0x79, 0x76, 0x76, - 0x75, 0x74, 0x74, 0x72, 0x74, 0x73, 0x75, 0x76, 0x75, 0x78, 0x77, - 0x7a, 0x79, 0x7a, 0x7a, 0x7a, 0x7b, 0x7d, 0x7e, 0x7f, 0x80, 0x7b, - 0x7f, 0x7b, 0x80, 0x83, 0x84, 0x8c, 0x8b, 0x8f, 0x93, 0x94, 0x98, - 0x97, 0x96, 0x96, 0x93, 0x8f, 0x8e, 0x88, 0x85, 0x80, 0x7d, 0x7b, - 0x78, 0x76, 0x75, 0x74, 0x74, 0x74, 0x73, 0x75, 0x72, 0x74, 0x73, - 0x73, 0x75, 0x74, 0x75, 0x75, 0x77, 0x75, 0x78, 0x78, 0x78, 0x7a, - 0x78, 0x7a, 0x7a, 0x7d, 0x7c, 0x84, 0x85, 0x8b, 0x94, 0x93, 0x9c, - 0x9b, 0x9d, 0x9e, 0x9c, 0x9b, 0x98, 0x95, 0x8f, 0x8d, 0x88, 0x83, - 0x81, 0x7d, 0x7a, 0x79, 0x76, 0x74, 0x74, 0x71, 0x71, 0x6f, 0x6f, - 0x6e, 0x6c, 0x6d, 0x6c, 0x6d, 0x6e, 0x6f, 0x71, 0x72, 0x74, 0x74, - 0x76, 0x76, 0x79, 0x7a, 0x7a, 0x7d, 0x7c, 0x84, 0x88, 0x91, 0x97, - 0x9b, 0xa0, 0xa0, 0xa3, 0xa3, 0xa3, 0xa1, 0x9c, 0x99, 0x93, 0x8f, - 0x8a, 0x86, 0x82, 0x7e, 0x7d, 0x7a, 0x79, 0x76, 0x74, 0x73, 0x6f, - 0x6f, 0x6c, 0x6b, 0x6b, 0x6a, 0x6b, 0x6a, 0x6b, 0x6b, 0x6e, 0x6f, - 0x72, 0x74, 0x75, 0x77, 0x77, 0x78, 0x78, 0x79, 0x79, 0x7c, 0x82, - 0x87, 0x8f, 0x96, 0x9a, 0xa0, 0xa1, 0xa4, 0xa4, 0xa5, 0xa2, 0xa0, - 0x9b, 0x96, 0x91, 0x8c, 0x88, 0x83, 0x80, 0x7c, 0x7b, 0x79, 0x78, - 0x76, 0x73, 0x71, 0x6f, 0x6e, 0x6c, 0x6b, 0x6b, 0x6a, 0x6a, 0x6a, - 0x6a, 0x6c, 0x6e, 0x70, 0x73, 0x74, 0x76, 0x76, 0x79, 0x79, 0x7a, - 0x7a, 0x79, 0x7b, 0x7f, 0x86, 0x8d, 0x95, 0x98, 0x9d, 0x9f, 0xa2, - 0xa3, 0xa5, 0xa2, 0xa0, 0x9d, 0x98, 0x94, 0x8f, 0x8a, 0x86, 0x82, - 0x7e, 0x7c, 0x7a, 0x78, 0x76, 0x75, 0x72, 0x71, 0x6e, 0x6c, 0x6c, - 0x6a, 0x6b, 0x6a, 0x6a, 0x6b, 0x6b, 0x6d, 0x6f, 0x71, 0x73, 0x74, - 0x76, 0x78, 0x79, 0x7a, 0x7a, 0x7a, 0x7b, 0x7c, 0x80, 0x85, 0x8b, - 0x91, 0x96, 0x9a, 0x9d, 0x9f, 0xa1, 0xa1, 0xa0, 0x9e, 0x9b, 0x97, - 0x94, 0x90, 0x8b, 0x87, 0x83, 0x80, 0x7e, 0x7b, 0x7a, 0x79, 0x77, - 0x75, 0x73, 0x70, 0x6e, 0x6c, 0x6b, 0x6a, 0x6a, 0x6a, 0x6a, 0x6b, - 0x6b, 0x6d, 0x6f, 0x71, 0x73, 0x75, 0x77, 0x78, 0x79, 0x7a, 0x7b, - 0x7b, 0x7c, 0x7d, 0x7f, 0x83, 0x88, 0x8e, 0x93, 0x96, 0x99, 0x9c, - 0x9e, 0xa0, 0xa0, 0x9f, 0x9d, 0x9a, 0x97, 0x94, 0x8f, 0x8b, 0x87, - 0x84, 0x80, 0x7e, 0x7c, 0x7a, 0x78, 0x76, 0x74, 0x72, 0x70, 0x6e, - 0x6c, 0x6b, 0x6b, 0x6b, 0x6a, 0x6a, 0x6b, 0x6b, 0x6d, 0x6f, 0x70, - 0x72, 0x74, 0x75, 0x77, 0x78, 0x79, 0x7a, 0x7a, 0x7b, 0x7b, 0x7c, - 0x7f, 0x84, 0x89, 0x8f, 0x92, 0x96, 0x98, 0x9c, 0x9e, 0xa0, 0xa0, - 0x9f, 0x9d, 0x9a, 0x97, 0x93, 0x90, 0x8b, 0x88, 0x83, 0x81, 0x7e, - 0x7c, 0x7a, 0x78, 0x76, 0x74, 0x73, 0x70, 0x6e, 0x6c, 0x6b, 0x6a, - 0x6a, 0x69, 0x69, 0x69, 0x6a, 0x6b, 0x6d, 0x6e, 0x71, 0x73, 0x74, - 0x76, 0x77, 0x79, 0x7a, 0x7b, 0x7b, 0x7b, 0x7c, 0x80, 0x85, 0x8a, - 0x90, 0x93, 0x96, 0x9a, 0x9d, 0xa0, 0xa2, 0xa2, 0x9f, 0x9e, 0x9b, - 0x98, 0x94, 0x90, 0x8b, 0x87, 0x83, 0x80, 0x7e, 0x7b, 0x79, 0x76, - 0x75, 0x73, 0x71, 0x6e, 0x6d, 0x6a, 0x6a, 0x6a, 0x69, 0x68, 0x68, - 0x69, 0x6a, 0x6c, 0x6d, 0x6e, 0x70, 0x73, 0x75, 0x77, 0x77, 0x79, - 0x7a, 0x7c, 0x7c, 0x7d, 0x7d, 0x80, 0x85, 0x8b, 0x91, 0x94, 0x97, - 0x9a, 0x9e, 0xa1, 0xa2, 0xa2, 0xa0, 0x9d, 0x9b, 0x98, 0x94, 0x8f, - 0x8b, 0x87, 0x83, 0x80, 0x7d, 0x7a, 0x78, 0x76, 0x75, 0x72, 0x70, - 0x6d, 0x6b, 0x6a, 0x69, 0x69, 0x67, 0x67, 0x67, 0x68, 0x69, 0x6b, - 0x6c, 0x6e, 0x71, 0x73, 0x75, 0x77, 0x79, 0x7b, 0x7b, 0x7c, 0x7c, - 0x7d, 0x81, 0x86, 0x8c, 0x91, 0x95, 0x98, 0x9c, 0x9f, 0xa2, 0xa3, - 0xa2, 0xa0, 0x9e, 0x9b, 0x98, 0x94, 0x90, 0x8a, 0x87, 0x83, 0x80, - 0x7d, 0x7a, 0x78, 0x75, 0x74, 0x72, 0x6f, 0x6d, 0x6c, 0x6b, 0x69, - 0x68, 0x67, 0x66, 0x66, 0x68, 0x69, 0x6a, 0x6c, 0x6f, 0x71, 0x74, - 0x75, 0x77, 0x79, 0x7b, 0x7b, 0x7b, 0x7c, 0x7e, 0x84, 0x88, 0x90, - 0x93, 0x97, 0x9a, 0x9e, 0xa1, 0xa3, 0xa4, 0xa1, 0xa0, 0x9c, 0x9a, - 0x95, 0x92, 0x8d, 0x89, 0x84, 0x82, 0x7e, 0x7b, 0x79, 0x77, 0x74, - 0x72, 0x70, 0x6e, 0x6c, 0x6b, 0x69, 0x67, 0x66, 0x65, 0x65, 0x67, - 0x68, 0x69, 0x6b, 0x6e, 0x70, 0x73, 0x75, 0x77, 0x79, 0x7a, 0x7b, - 0x7c, 0x7c, 0x7e, 0x84, 0x88, 0x90, 0x93, 0x98, 0x9a, 0x9f, 0xa1, - 0xa3, 0xa5, 0xa2, 0xa1, 0x9d, 0x9a, 0x96, 0x92, 0x8d, 0x89, 0x84, - 0x81, 0x7e, 0x7c, 0x79, 0x76, 0x74, 0x71, 0x6f, 0x6d, 0x6c, 0x69, - 0x68, 0x66, 0x65, 0x65, 0x65, 0x65, 0x67, 0x69, 0x6b, 0x6e, 0x71, - 0x73, 0x76, 0x77, 0x79, 0x7a, 0x7b, 0x7d, 0x7f, 0x84, 0x88, 0x90, - 0x94, 0x99, 0x9b, 0x9f, 0xa2, 0xa4, 0xa5, 0xa3, 0xa1, 0x9e, 0x9c, - 0x96, 0x93, 0x8d, 0x8a, 0x85, 0x82, 0x7e, 0x7c, 0x79, 0x76, 0x74, - 0x72, 0x70, 0x6d, 0x6b, 0x67, 0x67, 0x64, 0x65, 0x63, 0x64, 0x63, - 0x65, 0x68, 0x6b, 0x6d, 0x70, 0x73, 0x75, 0x77, 0x79, 0x79, 0x7c, - 0x7e, 0x82, 0x88, 0x8d, 0x93, 0x97, 0x9c, 0x9e, 0xa3, 0xa4, 0xa6, - 0xa4, 0xa3, 0x9f, 0x9d, 0x98, 0x94, 0x8f, 0x8a, 0x86, 0x82, 0x80, - 0x7c, 0x7b, 0x78, 0x77, 0x74, 0x72, 0x6f, 0x6c, 0x69, 0x67, 0x65, - 0x64, 0x63, 0x63, 0x63, 0x64, 0x66, 0x69, 0x6d, 0x70, 0x72, 0x74, - 0x76, 0x78, 0x7a, 0x7d, 0x7f, 0x84, 0x89, 0x90, 0x95, 0x99, 0x9e, - 0xa0, 0xa4, 0xa4, 0xa6, 0xa3, 0xa2, 0x9e, 0x9a, 0x96, 0x92, 0x8e, - 0x88, 0x86, 0x81, 0x7f, 0x7b, 0x7a, 0x77, 0x76, 0x73, 0x71, 0x6d, - 0x6b, 0x68, 0x67, 0x65, 0x64, 0x64, 0x63, 0x64, 0x66, 0x69, 0x6b, - 0x6f, 0x70, 0x73, 0x74, 0x77, 0x78, 0x7b, 0x7d, 0x83, 0x87, 0x8e, - 0x93, 0x98, 0x9c, 0x9f, 0xa2, 0xa4, 0xa5, 0xa3, 0xa2, 0x9e, 0x9c, - 0x96, 0x93, 0x8e, 0x8a, 0x86, 0x83, 0x80, 0x7d, 0x7b, 0x78, 0x77, - 0x74, 0x71, 0x6e, 0x6c, 0x6a, 0x68, 0x66, 0x66, 0x64, 0x64, 0x65, - 0x67, 0x68, 0x6b, 0x6e, 0x70, 0x72, 0x74, 0x75, 0x78, 0x7a, 0x7e, - 0x84, 0x8a, 0x8f, 0x93, 0x98, 0x9b, 0xa0, 0xa2, 0xa4, 0xa3, 0xa2, - 0xa0, 0x9d, 0x99, 0x95, 0x91, 0x8c, 0x89, 0x85, 0x82, 0x7f, 0x7d, - 0x7a, 0x78, 0x76, 0x73, 0x70, 0x6e, 0x6c, 0x6a, 0x69, 0x67, 0x67, - 0x67, 0x67, 0x68, 0x6a, 0x6c, 0x6e, 0x70, 0x72, 0x73, 0x75, 0x77, - 0x7a, 0x7c, 0x80, 0x86, 0x8c, 0x8f, 0x95, 0x98, 0x9b, 0x9f, 0xa0, - 0xa1, 0xa0, 0x9f, 0x9c, 0x9a, 0x96, 0x93, 0x8f, 0x8b, 0x87, 0x83, - 0x80, 0x7e, 0x7b, 0x78, 0x75, 0x73, 0x71, 0x6e, 0x6c, 0x6b, 0x6a, - 0x69, 0x6a, 0x69, 0x6a, 0x6a, 0x6d, 0x6e, 0x70, 0x72, 0x73, 0x75, - 0x77, 0x79, 0x7b, 0x7e, 0x82, 0x88, 0x8d, 0x91, 0x95, 0x98, 0x9a, - 0x9d, 0x9e, 0x9d, 0x9b, 0x9a, 0x97, 0x94, 0x91, 0x8e, 0x8a, 0x87, - 0x84, 0x81, 0x7f, 0x7d, 0x7a, 0x78, 0x76, 0x74, 0x72, 0x70, 0x6f, - 0x6d, 0x6d, 0x6d, 0x6d, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x73, 0x74, - 0x75, 0x77, 0x78, 0x7b, 0x7c, 0x81, 0x84, 0x89, 0x8d, 0x91, 0x94, - 0x96, 0x98, 0x99, 0x9a, 0x99, 0x98, 0x95, 0x93, 0x90, 0x8d, 0x8a, - 0x88, 0x85, 0x82, 0x80, 0x7e, 0x7c, 0x7a, 0x78, 0x76, 0x74, 0x72, - 0x70, 0x6f, 0x6f, 0x6e, 0x6f, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, - 0x75, 0x76, 0x78, 0x78, 0x79, 0x7a, 0x7c, 0x80, 0x83, 0x87, 0x8b, - 0x8e, 0x91, 0x94, 0x96, 0x97, 0x97, 0x96, 0x95, 0x93, 0x91, 0x8e, - 0x8b, 0x88, 0x86, 0x83, 0x82, 0x80, 0x7e, 0x7d, 0x7b, 0x79, 0x77, - 0x75, 0x74, 0x73, 0x71, 0x71, 0x71, 0x71, 0x72, 0x74, 0x75, 0x78, - 0x7a, 0x7c, 0x7e, 0x7f, 0x81, 0x82, 0x83, 0x83, 0x82, 0x81, 0x80, - 0x7e, 0x7e, 0x7c, 0x7c, 0x7a, 0x7a, 0x7b, 0x7d, 0x80, 0x83, 0x86, - 0x87, 0x8a, 0x8c, 0x8e, 0x8f, 0x90, 0x8f, 0x8e, 0x8d, 0x8b, 0x89, - 0x86, 0x85, 0x82, 0x80, 0x7e, 0x7e, 0x7c, 0x7b, 0x79, 0x79, 0x76, - 0x76, 0x74, 0x73, 0x72, 0x72, 0x72, 0x73, 0x74, 0x75, 0x77, 0x79, - 0x7c, 0x7e, 0x81, 0x82, 0x85, 0x86, 0x88, 0x89, 0x8a, 0x89, 0x89, - 0x89, 0x87, 0x86, 0x84, 0x83, 0x81, 0x80, 0x7e, 0x7e, 0x7c, 0x7c, - 0x7b, 0x7a, 0x7a, 0x7a, 0x7a, 0x7a, 0x7b, 0x7b, 0x7c, 0x7c, 0x7d, - 0x7e, 0x7f, 0x7f, 0x81, 0x82, 0x84, 0x85, 0x86, 0x88, 0x89, 0x8b, - 0x8b, 0x8c, 0x8b, 0x8b, 0x89, 0x88, 0x86, 0x84, 0x82, 0x7f, 0x7d, - 0x7b, 0x7a, 0x78, 0x77, 0x76, 0x76, 0x75, 0x75, 0x75, 0x75, 0x75, - 0x75, 0x76, 0x76, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7c, 0x7d, 0x7f, - 0x82, 0x84, 0x86, 0x89, 0x8b, 0x8c, 0x8d, 0x8e, 0x8e, 0x8e, 0x8d, - 0x8b, 0x8a, 0x88, 0x86, 0x83, 0x81, 0x7f, 0x7e, 0x7c, 0x7b, 0x7a, - 0x79, 0x78, 0x78, 0x77, 0x77, 0x77, 0x76, 0x76, 0x77, 0x77, 0x78, - 0x79, 0x7a, 0x7b, 0x7d, 0x7e, 0x80, 0x81, 0x83, 0x85, 0x87, 0x89, - 0x8a, 0x8a, 0x8b, 0x8b, 0x8a, 0x89, 0x88, 0x86, 0x84, 0x82, 0x81, - 0x7f, 0x7e, 0x7c, 0x7b, 0x7a, 0x7a, 0x79, 0x79, 0x79, 0x79, 0x79, - 0x79, 0x79, 0x79, 0x7a, 0x7a, 0x7b, 0x7b, 0x7c, 0x7d, 0x7e, 0x80, - 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x86, 0x85, 0x84, 0x83, 0x82, 0x80, 0x7f, 0x7e, 0x7e, 0x7d, 0x7c, - 0x7c, 0x7c, 0x7c, 0x7b, 0x7b, 0x7b, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, - 0x7d, 0x7d, 0x7e, 0x7e, 0x7f, 0x7f, 0x80, 0x81, 0x81, 0x82, 0x82, - 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x82, 0x82, 0x81, 0x81, 0x80, - 0x80, 0x7f, 0x7f, 0x7f, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, - 0x7e, 0x7e, 0x7e, 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, - 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x80, - 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, - 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, - 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, - 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, - 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x80, - 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x80, - 0x7f, - }, - { // 1 - 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x80, - 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x81, 0x80, 0x81, 0x81, 0x81, - 0x81, 0x81, 0x81, 0x82, 0x81, 0x81, 0x81, 0x81, 0x81, 0x80, 0x7f, - 0x7f, 0x7f, 0x7e, 0x7e, 0x7d, 0x7d, 0x7c, 0x7c, 0x7c, 0x7b, 0x7d, - 0x7b, 0x7e, 0x7c, 0x7e, 0x7f, 0x7e, 0x82, 0x82, 0x83, 0x85, 0x86, - 0x87, 0x89, 0x88, 0x8a, 0x89, 0x89, 0x87, 0x88, 0x84, 0x84, 0x7f, - 0x7e, 0x7a, 0x77, 0x74, 0x71, 0x6e, 0x6c, 0x6a, 0x6a, 0x6b, 0x6b, - 0x71, 0x70, 0x78, 0x79, 0x80, 0x84, 0x8a, 0x8e, 0x94, 0x97, 0x9c, - 0x9e, 0x9e, 0xa2, 0x9d, 0x9e, 0x9a, 0x95, 0x92, 0x8c, 0x85, 0x80, - 0x77, 0x73, 0x6a, 0x66, 0x60, 0x5c, 0x58, 0x58, 0x55, 0x59, 0x5b, - 0x5d, 0x67, 0x69, 0x72, 0x79, 0x80, 0x88, 0x91, 0x95, 0x9d, 0xa1, - 0xa5, 0xa8, 0xa9, 0xa8, 0xa9, 0xa3, 0xa2, 0x9b, 0x96, 0x90, 0x89, - 0x82, 0x7a, 0x72, 0x6a, 0x65, 0x5d, 0x5a, 0x53, 0x55, 0x4f, 0x56, - 0x55, 0x5c, 0x62, 0x67, 0x6f, 0x77, 0x7f, 0x88, 0x90, 0x96, 0xa0, - 0xa1, 0xaa, 0xa8, 0xad, 0xab, 0xaa, 0xa6, 0xa2, 0x9c, 0x97, 0x8e, - 0x89, 0x80, 0x78, 0x70, 0x67, 0x61, 0x5a, 0x56, 0x52, 0x52, 0x4f, - 0x55, 0x53, 0x5d, 0x61, 0x68, 0x71, 0x78, 0x80, 0x8b, 0x90, 0x9b, - 0xa0, 0xa5, 0xab, 0xab, 0xae, 0xac, 0xab, 0xa6, 0xa3, 0x9a, 0x97, - 0x8d, 0x87, 0x7d, 0x76, 0x6c, 0x65, 0x5d, 0x58, 0x53, 0x50, 0x50, - 0x4e, 0x56, 0x53, 0x5f, 0x61, 0x6a, 0x73, 0x7a, 0x83, 0x8d, 0x93, - 0x9e, 0xa2, 0xa8, 0xad, 0xae, 0xb0, 0xae, 0xad, 0xa7, 0xa4, 0x9b, - 0x96, 0x8d, 0x86, 0x7b, 0x74, 0x68, 0x63, 0x5a, 0x56, 0x4f, 0x50, - 0x4b, 0x4e, 0x53, 0x52, 0x5f, 0x60, 0x6b, 0x74, 0x7c, 0x86, 0x91, - 0x96, 0xa2, 0xa5, 0xae, 0xaf, 0xb3, 0xb2, 0xb3, 0xad, 0xaa, 0xa2, - 0x9d, 0x94, 0x8c, 0x82, 0x79, 0x70, 0x64, 0x5f, 0x55, 0x53, 0x4c, - 0x4e, 0x49, 0x52, 0x4d, 0x5d, 0x59, 0x6a, 0x6d, 0x75, 0x85, 0x85, - 0x95, 0x9b, 0x9f, 0xaa, 0xab, 0xac, 0xb5, 0xa8, 0xb3, 0xa4, 0xa6, - 0x9e, 0x96, 0x92, 0x88, 0x7f, 0x7b, 0x6c, 0x68, 0x61, 0x57, 0x59, - 0x4f, 0x53, 0x50, 0x52, 0x55, 0x5a, 0x60, 0x66, 0x6f, 0x76, 0x80, - 0x88, 0x92, 0x99, 0xa2, 0xa6, 0xac, 0xb0, 0xaf, 0xb3, 0xad, 0xaa, - 0xa6, 0x9d, 0x98, 0x8f, 0x86, 0x7e, 0x74, 0x6b, 0x62, 0x5c, 0x56, - 0x50, 0x50, 0x4d, 0x4d, 0x54, 0x52, 0x5e, 0x61, 0x68, 0x75, 0x79, - 0x84, 0x8f, 0x94, 0x9e, 0xa4, 0xa8, 0xaf, 0xb0, 0xb1, 0xb2, 0xad, - 0xaa, 0xa4, 0x9b, 0x98, 0x8b, 0x86, 0x7a, 0x72, 0x68, 0x61, 0x58, - 0x55, 0x4d, 0x4f, 0x4a, 0x4e, 0x52, 0x53, 0x5e, 0x61, 0x6c, 0x74, - 0x7e, 0x86, 0x93, 0x96, 0xa4, 0xa4, 0xae, 0xaf, 0xb1, 0xb5, 0xae, - 0xb1, 0xa7, 0xa2, 0x9d, 0x91, 0x8c, 0x81, 0x76, 0x71, 0x61, 0x5f, - 0x55, 0x51, 0x4e, 0x4c, 0x49, 0x51, 0x4e, 0x59, 0x5f, 0x63, 0x70, - 0x76, 0x81, 0x8b, 0x93, 0x9b, 0xa4, 0xa7, 0xaf, 0xaf, 0xb4, 0xb0, - 0xb2, 0xab, 0xa8, 0xa0, 0x9a, 0x90, 0x88, 0x7e, 0x75, 0x6b, 0x62, - 0x5b, 0x54, 0x4f, 0x4d, 0x4c, 0x49, 0x52, 0x4e, 0x5c, 0x5e, 0x68, - 0x71, 0x7a, 0x83, 0x8f, 0x96, 0x9f, 0xa7, 0xa9, 0xb3, 0xaf, 0xb7, - 0xb2, 0xb0, 0xae, 0xa4, 0xa0, 0x97, 0x8d, 0x87, 0x79, 0x74, 0x67, - 0x60, 0x58, 0x51, 0x4d, 0x4c, 0x49, 0x4e, 0x4e, 0x53, 0x5d, 0x5e, - 0x6d, 0x71, 0x7d, 0x86, 0x90, 0x98, 0xa2, 0xa6, 0xae, 0xb0, 0xb2, - 0xb5, 0xb1, 0xb0, 0xab, 0xa4, 0x9f, 0x95, 0x8d, 0x85, 0x78, 0x73, - 0x64, 0x5f, 0x55, 0x50, 0x4b, 0x4a, 0x47, 0x4d, 0x4e, 0x52, 0x5e, - 0x5f, 0x6e, 0x74, 0x7f, 0x8a, 0x93, 0x9b, 0xa6, 0xa8, 0xb1, 0xb2, - 0xb4, 0xb7, 0xb1, 0xb2, 0xa8, 0xa3, 0x9c, 0x92, 0x8b, 0x81, 0x77, - 0x6f, 0x62, 0x5d, 0x53, 0x4e, 0x4a, 0x49, 0x48, 0x4d, 0x4c, 0x57, - 0x5b, 0x63, 0x70, 0x75, 0x84, 0x8b, 0x96, 0xa0, 0xa8, 0xac, 0xb5, - 0xb3, 0xb9, 0xb6, 0xb3, 0xb1, 0xa8, 0xa2, 0x9a, 0x8f, 0x8a, 0x7d, - 0x75, 0x6b, 0x60, 0x5a, 0x51, 0x4d, 0x48, 0x49, 0x46, 0x4e, 0x4b, - 0x59, 0x5a, 0x66, 0x6f, 0x77, 0x84, 0x8c, 0x97, 0xa1, 0xa8, 0xad, - 0xb6, 0xb4, 0xbb, 0xb5, 0xb5, 0xaf, 0xa7, 0xa2, 0x99, 0x90, 0x89, - 0x7b, 0x75, 0x68, 0x60, 0x57, 0x50, 0x4b, 0x49, 0x47, 0x48, 0x4c, - 0x4e, 0x59, 0x5b, 0x68, 0x6e, 0x7a, 0x84, 0x8f, 0x98, 0xa3, 0xa9, - 0xb0, 0xb4, 0xb7, 0xb8, 0xb6, 0xb3, 0xae, 0xa7, 0xa0, 0x97, 0x8e, - 0x86, 0x7a, 0x72, 0x65, 0x5f, 0x54, 0x50, 0x48, 0x4a, 0x44, 0x4b, - 0x4a, 0x51, 0x5a, 0x5d, 0x6c, 0x70, 0x7f, 0x88, 0x93, 0x9c, 0xa7, - 0xab, 0xb3, 0xb6, 0xb7, 0xb8, 0xb5, 0xb1, 0xac, 0xa3, 0x9e, 0x92, - 0x8c, 0x81, 0x78, 0x6e, 0x63, 0x5b, 0x53, 0x4d, 0x49, 0x48, 0x45, - 0x4c, 0x4a, 0x56, 0x58, 0x63, 0x6c, 0x75, 0x82, 0x8c, 0x96, 0xa1, - 0xa8, 0xaf, 0xb5, 0xb6, 0xba, 0xb7, 0xb5, 0xb0, 0xaa, 0xa2, 0x9b, - 0x91, 0x8a, 0x7d, 0x77, 0x69, 0x62, 0x57, 0x52, 0x4b, 0x49, 0x46, - 0x48, 0x4b, 0x4c, 0x59, 0x59, 0x69, 0x6e, 0x7a, 0x85, 0x8f, 0x99, - 0xa4, 0xaa, 0xb2, 0xb6, 0xb7, 0xba, 0xb5, 0xb4, 0xae, 0xa7, 0xa0, - 0x97, 0x8f, 0x85, 0x7b, 0x73, 0x66, 0x60, 0x55, 0x50, 0x4a, 0x48, - 0x46, 0x49, 0x4a, 0x50, 0x58, 0x5d, 0x6a, 0x71, 0x7d, 0x88, 0x92, - 0x9c, 0xa6, 0xac, 0xb3, 0xb6, 0xb8, 0xb9, 0xb5, 0xb2, 0xac, 0xa5, - 0x9e, 0x93, 0x8d, 0x81, 0x79, 0x6e, 0x63, 0x5d, 0x52, 0x4f, 0x48, - 0x48, 0x45, 0x4b, 0x4a, 0x53, 0x59, 0x60, 0x6d, 0x73, 0x80, 0x8a, - 0x94, 0x9e, 0xa8, 0xac, 0xb5, 0xb5, 0xb9, 0xb8, 0xb5, 0xb1, 0xab, - 0xa3, 0x9d, 0x92, 0x8b, 0x7f, 0x76, 0x6c, 0x62, 0x5a, 0x52, 0x4d, - 0x48, 0x48, 0x45, 0x4d, 0x49, 0x58, 0x58, 0x65, 0x6d, 0x76, 0x83, - 0x8b, 0x97, 0xa0, 0xa9, 0xae, 0xb6, 0xb5, 0xb9, 0xb6, 0xb4, 0xae, - 0xa8, 0xa1, 0x99, 0x8f, 0x88, 0x7c, 0x76, 0x68, 0x62, 0x58, 0x52, - 0x4d, 0x49, 0x47, 0x47, 0x4c, 0x4d, 0x59, 0x5a, 0x69, 0x6d, 0x7a, - 0x84, 0x8e, 0x99, 0xa2, 0xa9, 0xb1, 0xb4, 0xb7, 0xb7, 0xb5, 0xb3, - 0xac, 0xa7, 0x9f, 0x97, 0x8e, 0x85, 0x7b, 0x73, 0x68, 0x61, 0x57, - 0x54, 0x4b, 0x4c, 0x46, 0x4b, 0x4c, 0x50, 0x59, 0x5e, 0x68, 0x71, - 0x7a, 0x86, 0x90, 0x99, 0xa5, 0xa9, 0xb2, 0xb4, 0xb8, 0xb7, 0xb6, - 0xb1, 0xad, 0xa5, 0x9e, 0x96, 0x8d, 0x84, 0x7b, 0x71, 0x67, 0x5f, - 0x55, 0x52, 0x4a, 0x4b, 0x45, 0x4c, 0x4a, 0x53, 0x58, 0x5f, 0x69, - 0x72, 0x7c, 0x87, 0x92, 0x9b, 0xa6, 0xab, 0xb4, 0xb4, 0xb8, 0xb6, - 0xb5, 0xaf, 0xab, 0xa2, 0x9c, 0x92, 0x8b, 0x80, 0x78, 0x6c, 0x64, - 0x5b, 0x55, 0x4e, 0x4c, 0x49, 0x4a, 0x4d, 0x4e, 0x59, 0x5b, 0x68, - 0x6f, 0x79, 0x84, 0x8f, 0x97, 0xa4, 0xa8, 0xb1, 0xb3, 0xb7, 0xb6, - 0xb5, 0xb0, 0xab, 0xa4, 0x9d, 0x95, 0x8c, 0x84, 0x7a, 0x71, 0x67, - 0x5f, 0x56, 0x52, 0x4b, 0x4d, 0x47, 0x50, 0x4c, 0x57, 0x5a, 0x63, - 0x6d, 0x75, 0x81, 0x8b, 0x94, 0x9e, 0xa6, 0xab, 0xb2, 0xb3, 0xb6, - 0xb3, 0xb2, 0xab, 0xa7, 0x9f, 0x98, 0x90, 0x89, 0x7e, 0x78, 0x6b, - 0x65, 0x59, 0x55, 0x4d, 0x4e, 0x48, 0x4d, 0x4d, 0x52, 0x5a, 0x5e, - 0x6b, 0x70, 0x7e, 0x85, 0x92, 0x98, 0xa4, 0xa7, 0xb1, 0xb0, 0xb6, - 0xb2, 0xb3, 0xad, 0xa8, 0xa1, 0x9a, 0x93, 0x8b, 0x82, 0x79, 0x70, - 0x67, 0x5e, 0x57, 0x51, 0x4d, 0x4c, 0x4a, 0x50, 0x4f, 0x59, 0x5b, - 0x67, 0x6e, 0x79, 0x82, 0x8e, 0x94, 0xa0, 0xa4, 0xac, 0xaf, 0xb2, - 0xb3, 0xb2, 0xaf, 0xaa, 0xa3, 0x9d, 0x95, 0x8d, 0x86, 0x7b, 0x75, - 0x69, 0x63, 0x5a, 0x55, 0x4f, 0x50, 0x49, 0x51, 0x4d, 0x57, 0x5b, - 0x62, 0x6d, 0x73, 0x80, 0x88, 0x92, 0x9b, 0xa3, 0xa8, 0xaf, 0xb0, - 0xb5, 0xb0, 0xb2, 0xa9, 0xa7, 0x9e, 0x98, 0x90, 0x89, 0x7f, 0x78, - 0x6d, 0x67, 0x5d, 0x58, 0x52, 0x4e, 0x4e, 0x4a, 0x51, 0x4e, 0x5a, - 0x5b, 0x67, 0x6d, 0x78, 0x81, 0x8c, 0x93, 0x9e, 0xa3, 0xaa, 0xaf, - 0xb1, 0xb4, 0xb1, 0xb0, 0xaa, 0xa6, 0x9d, 0x98, 0x8f, 0x89, 0x7e, - 0x77, 0x6c, 0x66, 0x5c, 0x58, 0x50, 0x4f, 0x4c, 0x4d, 0x50, 0x52, - 0x5b, 0x5e, 0x6a, 0x6f, 0x7a, 0x84, 0x8d, 0x95, 0x9e, 0xa3, 0xab, - 0xac, 0xb1, 0xb0, 0xb0, 0xac, 0xa8, 0xa2, 0x9c, 0x95, 0x8e, 0x86, - 0x7d, 0x76, 0x6c, 0x65, 0x5b, 0x59, 0x50, 0x51, 0x4b, 0x50, 0x4f, - 0x55, 0x5b, 0x60, 0x6b, 0x71, 0x7c, 0x85, 0x8f, 0x96, 0xa0, 0xa4, - 0xac, 0xac, 0xb1, 0xaf, 0xb0, 0xaa, 0xa7, 0xa1, 0x99, 0x94, 0x8b, - 0x85, 0x7c, 0x74, 0x6c, 0x64, 0x5d, 0x59, 0x51, 0x53, 0x4b, 0x53, - 0x50, 0x57, 0x5e, 0x61, 0x6d, 0x71, 0x7e, 0x85, 0x8f, 0x97, 0xa0, - 0xa4, 0xac, 0xab, 0xb0, 0xae, 0xae, 0xab, 0xa5, 0xa1, 0x98, 0x93, - 0x8b, 0x84, 0x7c, 0x73, 0x6c, 0x64, 0x5c, 0x59, 0x51, 0x53, 0x4d, - 0x53, 0x52, 0x57, 0x5f, 0x62, 0x6e, 0x73, 0x7d, 0x86, 0x8f, 0x97, - 0x9f, 0xa3, 0xaa, 0xaa, 0xaf, 0xab, 0xad, 0xa7, 0xa3, 0x9e, 0x96, - 0x92, 0x89, 0x83, 0x7c, 0x73, 0x6c, 0x64, 0x5e, 0x59, 0x53, 0x55, - 0x4e, 0x56, 0x53, 0x5b, 0x60, 0x64, 0x6f, 0x75, 0x7e, 0x88, 0x8f, - 0x98, 0xa0, 0xa3, 0xab, 0xa9, 0xae, 0xaa, 0xab, 0xa5, 0xa3, 0x9b, - 0x96, 0x8f, 0x88, 0x82, 0x7a, 0x72, 0x6c, 0x64, 0x5e, 0x59, 0x54, - 0x55, 0x4f, 0x57, 0x53, 0x5d, 0x60, 0x67, 0x70, 0x76, 0x80, 0x89, - 0x90, 0x9a, 0x9f, 0xa4, 0xaa, 0xa9, 0xae, 0xa8, 0xaa, 0xa4, 0xa2, - 0x9b, 0x95, 0x90, 0x88, 0x83, 0x7b, 0x74, 0x6d, 0x66, 0x5f, 0x5c, - 0x54, 0x57, 0x50, 0x56, 0x56, 0x5a, 0x62, 0x64, 0x70, 0x74, 0x7e, - 0x87, 0x8e, 0x96, 0x9e, 0xa1, 0xa8, 0xa8, 0xab, 0xaa, 0xa8, 0xa4, - 0xa1, 0x9b, 0x95, 0x90, 0x88, 0x83, 0x7b, 0x75, 0x6e, 0x69, 0x60, - 0x5f, 0x57, 0x58, 0x54, 0x56, 0x59, 0x5a, 0x62, 0x64, 0x6e, 0x73, - 0x7c, 0x84, 0x8c, 0x93, 0x9b, 0x9e, 0xa5, 0xa6, 0xa7, 0xa9, 0xa5, - 0xa5, 0x9e, 0x9b, 0x95, 0x8f, 0x89, 0x83, 0x7b, 0x77, 0x6e, 0x6a, - 0x63, 0x5f, 0x5c, 0x59, 0x59, 0x58, 0x5c, 0x5c, 0x65, 0x64, 0x71, - 0x73, 0x7c, 0x84, 0x8a, 0x91, 0x99, 0x9c, 0xa3, 0xa4, 0xa5, 0xa9, - 0xa2, 0xa5, 0x9d, 0x9b, 0x94, 0x90, 0x88, 0x84, 0x7a, 0x78, 0x6e, - 0x6b, 0x63, 0x61, 0x5c, 0x5b, 0x5a, 0x59, 0x5e, 0x5d, 0x66, 0x67, - 0x71, 0x74, 0x7e, 0x83, 0x8c, 0x90, 0x9a, 0x9b, 0xa3, 0xa3, 0xa5, - 0xa6, 0xa1, 0xa2, 0x9b, 0x99, 0x92, 0x8d, 0x87, 0x81, 0x7a, 0x75, - 0x6c, 0x6b, 0x62, 0x62, 0x5d, 0x5d, 0x5c, 0x5c, 0x61, 0x60, 0x6a, - 0x69, 0x75, 0x77, 0x80, 0x86, 0x8d, 0x93, 0x9a, 0x9d, 0xa1, 0xa3, - 0xa2, 0xa4, 0xa0, 0x9f, 0x9a, 0x95, 0x90, 0x8a, 0x83, 0x7f, 0x76, - 0x74, 0x6a, 0x69, 0x62, 0x61, 0x5e, 0x5e, 0x5c, 0x60, 0x62, 0x66, - 0x6c, 0x6f, 0x78, 0x7b, 0x84, 0x89, 0x90, 0x95, 0x9c, 0x9c, 0xa3, - 0x9f, 0xa4, 0xa0, 0x9e, 0x9b, 0x95, 0x91, 0x8b, 0x85, 0x80, 0x79, - 0x73, 0x6e, 0x68, 0x65, 0x61, 0x61, 0x5d, 0x60, 0x5f, 0x64, 0x65, - 0x6c, 0x6f, 0x76, 0x7c, 0x82, 0x89, 0x8e, 0x94, 0x99, 0x9c, 0xa0, - 0xa0, 0xa0, 0xa2, 0x9c, 0x9d, 0x95, 0x93, 0x8d, 0x86, 0x82, 0x7b, - 0x75, 0x71, 0x6a, 0x68, 0x63, 0x61, 0x5f, 0x5f, 0x60, 0x62, 0x65, - 0x69, 0x6e, 0x73, 0x7a, 0x7e, 0x85, 0x8a, 0x90, 0x95, 0x99, 0x9c, - 0x9f, 0x9f, 0xa2, 0x9d, 0x9e, 0x99, 0x95, 0x90, 0x8a, 0x85, 0x7f, - 0x79, 0x75, 0x6d, 0x6b, 0x65, 0x63, 0x62, 0x5f, 0x61, 0x60, 0x65, - 0x66, 0x6d, 0x6f, 0x77, 0x7a, 0x81, 0x86, 0x8c, 0x91, 0x96, 0x99, - 0x9c, 0x9d, 0x9f, 0x9e, 0x9d, 0x9b, 0x95, 0x94, 0x8c, 0x89, 0x81, - 0x7d, 0x77, 0x73, 0x6d, 0x6b, 0x65, 0x65, 0x61, 0x63, 0x61, 0x64, - 0x66, 0x69, 0x6f, 0x71, 0x79, 0x7b, 0x84, 0x86, 0x8e, 0x91, 0x95, - 0x99, 0x9b, 0x9d, 0x9e, 0x9c, 0x9c, 0x97, 0x95, 0x8f, 0x8b, 0x86, - 0x80, 0x7c, 0x76, 0x71, 0x6d, 0x69, 0x66, 0x65, 0x62, 0x64, 0x63, - 0x67, 0x68, 0x6d, 0x70, 0x76, 0x7b, 0x7f, 0x85, 0x88, 0x8e, 0x91, - 0x95, 0x97, 0x99, 0x9a, 0x9a, 0x9a, 0x97, 0x95, 0x91, 0x8d, 0x89, - 0x84, 0x80, 0x7a, 0x76, 0x70, 0x6d, 0x6a, 0x67, 0x66, 0x65, 0x65, - 0x67, 0x69, 0x6b, 0x71, 0x74, 0x79, 0x7d, 0x82, 0x86, 0x8b, 0x8f, - 0x92, 0x95, 0x98, 0x99, 0x99, 0x9a, 0x97, 0x96, 0x92, 0x8f, 0x8a, - 0x86, 0x81, 0x7c, 0x77, 0x73, 0x6e, 0x6b, 0x69, 0x67, 0x66, 0x66, - 0x67, 0x69, 0x6c, 0x70, 0x73, 0x78, 0x7c, 0x81, 0x84, 0x8a, 0x8e, - 0x91, 0x95, 0x96, 0x98, 0x98, 0x99, 0x95, 0x95, 0x90, 0x8e, 0x87, - 0x84, 0x7e, 0x79, 0x74, 0x70, 0x6d, 0x69, 0x69, 0x67, 0x68, 0x68, - 0x6b, 0x6c, 0x71, 0x73, 0x79, 0x7b, 0x81, 0x83, 0x89, 0x8b, 0x8f, - 0x92, 0x94, 0x96, 0x96, 0x97, 0x95, 0x95, 0x91, 0x8f, 0x8a, 0x86, - 0x82, 0x7d, 0x77, 0x75, 0x70, 0x6d, 0x6b, 0x69, 0x69, 0x69, 0x6a, - 0x6c, 0x6e, 0x70, 0x73, 0x77, 0x7a, 0x7f, 0x82, 0x86, 0x8a, 0x8b, - 0x8f, 0x90, 0x93, 0x93, 0x94, 0x93, 0x93, 0x91, 0x8e, 0x8c, 0x87, - 0x84, 0x80, 0x7c, 0x79, 0x75, 0x72, 0x71, 0x6e, 0x6d, 0x6d, 0x6d, - 0x6e, 0x70, 0x72, 0x74, 0x77, 0x7a, 0x7d, 0x81, 0x83, 0x87, 0x89, - 0x8b, 0x8d, 0x8f, 0x90, 0x8f, 0x90, 0x8f, 0x8e, 0x8c, 0x8a, 0x87, - 0x85, 0x81, 0x7e, 0x7c, 0x78, 0x77, 0x74, 0x73, 0x71, 0x71, 0x70, - 0x71, 0x72, 0x74, 0x75, 0x78, 0x79, 0x7d, 0x7e, 0x81, 0x84, 0x85, - 0x88, 0x88, 0x8a, 0x8a, 0x8b, 0x8b, 0x8b, 0x8a, 0x8a, 0x88, 0x86, - 0x85, 0x82, 0x80, 0x7e, 0x7c, 0x7a, 0x79, 0x76, 0x77, 0x75, 0x75, - 0x75, 0x76, 0x76, 0x78, 0x79, 0x7b, 0x7c, 0x7e, 0x80, 0x81, 0x83, - 0x84, 0x86, 0x86, 0x87, 0x87, 0x88, 0x87, 0x87, 0x86, 0x86, 0x84, - 0x84, 0x82, 0x81, 0x7f, 0x7e, 0x7d, 0x7b, 0x7b, 0x79, 0x79, 0x78, - 0x78, 0x78, 0x7a, 0x79, 0x7c, 0x7b, 0x7e, 0x7e, 0x7f, 0x81, 0x82, - 0x83, 0x83, 0x84, 0x83, 0x85, 0x84, 0x85, 0x84, 0x84, 0x83, 0x83, - 0x81, 0x81, 0x80, 0x7f, 0x7f, 0x7d, 0x7d, 0x7c, 0x7c, 0x7b, 0x7c, - 0x7b, 0x7c, 0x7c, 0x7d, 0x7d, 0x7f, 0x7f, 0x80, 0x80, 0x81, 0x81, - 0x82, 0x82, 0x81, 0x82, 0x81, 0x82, 0x81, 0x81, 0x81, 0x81, 0x80, - 0x80, 0x7f, 0x7f, 0x7f, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, - 0x7e, 0x7e, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x81, 0x81, 0x81, - 0x81, 0x81, 0x81, 0x81, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, - 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, - 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, - 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, - 0x80, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x80, - 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, - 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, - 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, - 0x80, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, - 0x7f, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x7f, 0x80, - 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x7f, - 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x80, 0x80, - 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x7f, - 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, - 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, - 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, - 0x7f, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x7f, - 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, - }, - { // 2 - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7e, 0x7f, 0x7f, 0x7f, 0x7e, 0x7f, 0x80, 0x7f, 0x7f, - 0x7f, 0x7e, 0x7f, 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7e, - 0x7f, 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7e, 0x80, 0x7f, - 0x7f, 0x7f, 0x7f, 0x80, 0x7e, 0x7f, 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7e, 0x7f, 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7e, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7e, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x7e, 0x7f, - 0x7f, 0x80, 0x7f, 0x80, 0x7e, 0x80, 0x7e, 0x81, 0x7f, 0x89, 0x87, - 0x7d, 0x78, 0x76, 0x7c, 0x87, 0x88, 0x82, 0x7a, 0x72, 0x73, 0x79, - 0x80, 0x81, 0x7d, 0x74, 0x73, 0x77, 0x81, 0x7c, 0x7f, 0x75, 0x90, - 0x9f, 0x92, 0x81, 0x6b, 0x6a, 0x83, 0x97, 0x94, 0x8c, 0x7c, 0x78, - 0x80, 0x88, 0x81, 0x82, 0x7c, 0x81, 0x84, 0x7e, 0x77, 0x76, 0x7b, - 0x81, 0x81, 0x73, 0x6b, 0x65, 0x6b, 0x70, 0x7d, 0x84, 0x8f, 0xa8, - 0x91, 0x73, 0x65, 0x66, 0x7f, 0x95, 0x97, 0x93, 0x89, 0x7d, 0x7a, - 0x79, 0x7e, 0x83, 0x84, 0x85, 0x84, 0x7d, 0x7a, 0x73, 0x77, 0x7e, - 0x83, 0x82, 0x80, 0x73, 0x6b, 0x69, 0x69, 0x6e, 0x7b, 0x82, 0x88, - 0xa4, 0x9b, 0x83, 0x70, 0x66, 0x76, 0x8f, 0x9b, 0x9f, 0x94, 0x83, - 0x7a, 0x76, 0x7d, 0x83, 0x85, 0x87, 0x80, 0x79, 0x73, 0x6f, 0x74, - 0x7c, 0x7d, 0x75, 0x68, 0x62, 0x60, 0x77, 0x86, 0x90, 0xad, 0x99, - 0x80, 0x6b, 0x63, 0x7e, 0x9a, 0xa0, 0xa3, 0x92, 0x83, 0x7c, 0x77, - 0x7f, 0x83, 0x89, 0x86, 0x7b, 0x71, 0x6f, 0x6d, 0x76, 0x7a, 0x76, - 0x6d, 0x64, 0x55, 0x6c, 0x82, 0x93, 0xba, 0xa5, 0x7e, 0x64, 0x5d, - 0x78, 0x9e, 0xa8, 0xa4, 0x93, 0x83, 0x79, 0x75, 0x7c, 0x84, 0x89, - 0x89, 0x7b, 0x6e, 0x64, 0x6e, 0x79, 0x75, 0x6f, 0x68, 0x56, 0x5e, - 0x7a, 0x7f, 0xb2, 0xb8, 0x8e, 0x6c, 0x57, 0x6a, 0x95, 0xae, 0xaa, - 0xa0, 0x8a, 0x7c, 0x77, 0x7c, 0x83, 0x89, 0x8d, 0x81, 0x6f, 0x63, - 0x63, 0x6e, 0x71, 0x6f, 0x6a, 0x56, 0x60, 0x7d, 0x77, 0xa3, 0xb3, - 0x92, 0x7a, 0x5e, 0x66, 0x8c, 0xab, 0xaa, 0x9f, 0x8a, 0x7d, 0x77, - 0x7c, 0x7f, 0x87, 0x8b, 0x7d, 0x6c, 0x60, 0x65, 0x6d, 0x73, 0x6d, - 0x5e, 0x56, 0x78, 0x76, 0x8f, 0xb8, 0x9c, 0x88, 0x6a, 0x61, 0x81, - 0xa4, 0xa9, 0x9f, 0x94, 0x85, 0x7f, 0x7e, 0x7c, 0x81, 0x8b, 0x86, - 0x72, 0x64, 0x65, 0x6d, 0x6d, 0x68, 0x61, 0x5a, 0x77, 0x7f, 0x77, - 0xac, 0xaa, 0x89, 0x74, 0x59, 0x77, 0xa2, 0xac, 0xa0, 0x97, 0x87, - 0x85, 0x7c, 0x74, 0x83, 0x90, 0x87, 0x73, 0x60, 0x62, 0x6a, 0x64, - 0x69, 0x65, 0x5f, 0x7d, 0x74, 0x75, 0xb1, 0xa4, 0x8b, 0x75, 0x64, - 0x7a, 0xa3, 0xa7, 0x9c, 0x99, 0x87, 0x85, 0x7c, 0x79, 0x84, 0x8f, - 0x81, 0x71, 0x63, 0x65, 0x6d, 0x62, 0x64, 0x60, 0x6b, 0x81, 0x6b, - 0x7b, 0xb3, 0xa0, 0x89, 0x72, 0x67, 0x8a, 0xa5, 0x9e, 0x97, 0x98, - 0x8d, 0x87, 0x79, 0x77, 0x84, 0x8e, 0x7d, 0x6a, 0x60, 0x66, 0x6b, - 0x63, 0x64, 0x61, 0x6d, 0x7c, 0x6b, 0x81, 0xaf, 0x9f, 0x86, 0x71, - 0x6f, 0x8b, 0xa6, 0x9b, 0x98, 0x9e, 0x8a, 0x81, 0x76, 0x7c, 0x90, - 0x86, 0x73, 0x6c, 0x68, 0x68, 0x5f, 0x63, 0x6a, 0x6b, 0x77, 0x6a, - 0x66, 0x99, 0xab, 0x9c, 0x7c, 0x67, 0x7e, 0x9d, 0xa1, 0x97, 0x9b, - 0x94, 0x88, 0x7e, 0x73, 0x88, 0x90, 0x7e, 0x71, 0x68, 0x6b, 0x63, - 0x5d, 0x61, 0x6a, 0x76, 0x79, 0x59, 0x72, 0xad, 0xa5, 0x87, 0x6d, - 0x71, 0x95, 0xa9, 0x94, 0x97, 0x9e, 0x8d, 0x86, 0x75, 0x80, 0x99, - 0x89, 0x71, 0x67, 0x6e, 0x70, 0x62, 0x61, 0x66, 0x67, 0x78, 0x6d, - 0x5a, 0x8f, 0xa8, 0x8f, 0x80, 0x72, 0x7f, 0x98, 0x9a, 0x94, 0xa2, - 0x99, 0x84, 0x81, 0x78, 0x8d, 0x8f, 0x82, 0x73, 0x6c, 0x6b, 0x67, - 0x60, 0x6b, 0x6d, 0x68, 0x73, 0x5f, 0x6d, 0x9a, 0xa4, 0x82, 0x7b, - 0x77, 0x87, 0x98, 0x92, 0x98, 0xa5, 0x96, 0x7c, 0x80, 0x79, 0x91, - 0x8b, 0x7b, 0x75, 0x73, 0x6c, 0x65, 0x67, 0x69, 0x6b, 0x64, 0x7b, - 0x6b, 0x60, 0x96, 0xa5, 0x86, 0x7d, 0x76, 0x85, 0x9a, 0x94, 0x93, - 0xa4, 0x96, 0x7c, 0x81, 0x81, 0x8c, 0x88, 0x7a, 0x74, 0x74, 0x6b, - 0x67, 0x6d, 0x69, 0x61, 0x6b, 0x7a, 0x64, 0x67, 0x98, 0xa1, 0x85, - 0x7d, 0x7a, 0x8d, 0x9e, 0x91, 0x90, 0xa3, 0x96, 0x7e, 0x80, 0x81, - 0x8d, 0x89, 0x77, 0x76, 0x77, 0x6a, 0x61, 0x63, 0x6f, 0x74, 0x61, - 0x6e, 0x6e, 0x61, 0x84, 0x9d, 0x9a, 0x87, 0x77, 0x80, 0x8a, 0x92, - 0x9c, 0xa3, 0x9b, 0x82, 0x7a, 0x81, 0x8b, 0x8b, 0x82, 0x77, 0x76, - 0x6e, 0x62, 0x69, 0x72, 0x69, 0x62, 0x6c, 0x71, 0x69, 0x7d, 0x92, - 0x8e, 0x8f, 0x7d, 0x7e, 0x90, 0x93, 0x95, 0x97, 0x9b, 0x90, 0x7f, - 0x7f, 0x84, 0x89, 0x88, 0x7c, 0x78, 0x74, 0x6c, 0x67, 0x67, 0x6c, - 0x63, 0x65, 0x76, 0x6b, 0x60, 0x8b, 0x9e, 0x88, 0x86, 0x84, 0x88, - 0x89, 0x93, 0x98, 0x98, 0x98, 0x8e, 0x87, 0x85, 0x81, 0x82, 0x86, - 0x82, 0x7b, 0x71, 0x69, 0x69, 0x67, 0x67, 0x66, 0x6e, 0x7c, 0x63, - 0x56, 0x8e, 0x9f, 0x8a, 0x85, 0x7c, 0x88, 0x91, 0x8e, 0x8b, 0x9c, - 0x9e, 0x8d, 0x83, 0x82, 0x83, 0x84, 0x7f, 0x81, 0x7e, 0x73, 0x6c, - 0x68, 0x6d, 0x6c, 0x65, 0x62, 0x6f, 0x77, 0x64, 0x72, 0x9b, 0x8d, - 0x82, 0x8c, 0x87, 0x83, 0x90, 0x95, 0x92, 0x97, 0x95, 0x8d, 0x84, - 0x82, 0x87, 0x82, 0x7f, 0x7e, 0x77, 0x75, 0x70, 0x69, 0x67, 0x6d, - 0x65, 0x5e, 0x74, 0x78, 0x6a, 0x85, 0x95, 0x84, 0x82, 0x85, 0x86, - 0x92, 0x97, 0x90, 0x92, 0x95, 0x91, 0x8a, 0x87, 0x86, 0x82, 0x7f, - 0x80, 0x83, 0x7a, 0x73, 0x6d, 0x68, 0x6a, 0x68, 0x64, 0x63, 0x6f, - 0x76, 0x67, 0x7a, 0x97, 0x85, 0x7c, 0x8b, 0x8f, 0x89, 0x8f, 0x95, - 0x93, 0x95, 0x91, 0x8c, 0x8c, 0x8a, 0x83, 0x7f, 0x80, 0x80, 0x7b, - 0x7b, 0x7a, 0x6b, 0x63, 0x6a, 0x68, 0x5f, 0x62, 0x75, 0x78, 0x6b, - 0x7b, 0x91, 0x89, 0x84, 0x8b, 0x89, 0x8b, 0x95, 0x97, 0x90, 0x93, - 0x91, 0x8f, 0x8c, 0x89, 0x85, 0x80, 0x7d, 0x7b, 0x7d, 0x7d, 0x7a, - 0x6d, 0x60, 0x63, 0x69, 0x66, 0x63, 0x6b, 0x79, 0x74, 0x6d, 0x85, - 0x93, 0x89, 0x8a, 0x8c, 0x8b, 0x8c, 0x95, 0x93, 0x8f, 0x94, 0x91, - 0x8e, 0x89, 0x88, 0x84, 0x7d, 0x7d, 0x7c, 0x7e, 0x79, 0x75, 0x72, - 0x69, 0x64, 0x65, 0x69, 0x69, 0x6a, 0x70, 0x76, 0x74, 0x84, 0x95, - 0x84, 0x81, 0x92, 0x91, 0x86, 0x8c, 0x99, 0x95, 0x91, 0x91, 0x8b, - 0x89, 0x8b, 0x8a, 0x83, 0x7c, 0x7a, 0x79, 0x7a, 0x7a, 0x77, 0x71, - 0x6d, 0x69, 0x60, 0x60, 0x6e, 0x73, 0x6c, 0x6d, 0x74, 0x7b, 0x8b, - 0x90, 0x85, 0x88, 0x93, 0x90, 0x88, 0x8e, 0x98, 0x95, 0x92, 0x8f, - 0x89, 0x89, 0x8b, 0x87, 0x7f, 0x7d, 0x7c, 0x7b, 0x78, 0x79, 0x77, - 0x72, 0x70, 0x6d, 0x67, 0x64, 0x6f, 0x70, 0x6b, 0x70, 0x71, 0x79, - 0x78, 0x86, 0x9c, 0x94, 0x89, 0x8a, 0x8f, 0x8b, 0x8d, 0x95, 0x95, - 0x92, 0x8f, 0x89, 0x83, 0x86, 0x86, 0x83, 0x7e, 0x7a, 0x79, 0x78, - 0x78, 0x74, 0x79, 0x7c, 0x70, 0x64, 0x65, 0x6d, 0x6e, 0x6c, 0x75, - 0x7b, 0x6c, 0x6d, 0x7a, 0x8c, 0x9c, 0x8f, 0x8b, 0x92, 0x93, 0x88, - 0x86, 0x96, 0x99, 0x90, 0x8e, 0x8d, 0x88, 0x80, 0x80, 0x82, 0x82, - 0x7d, 0x78, 0x79, 0x7e, 0x78, 0x72, 0x78, 0x79, 0x71, 0x6c, 0x6f, - 0x71, 0x70, 0x6b, 0x6c, 0x75, 0x79, 0x72, 0x6e, 0x78, 0x84, 0x93, - 0x95, 0x89, 0x8e, 0x98, 0x91, 0x86, 0x8f, 0x98, 0x90, 0x8b, 0x8d, - 0x8a, 0x84, 0x83, 0x82, 0x80, 0x80, 0x80, 0x7a, 0x78, 0x7b, 0x79, - 0x72, 0x74, 0x79, 0x75, 0x70, 0x73, 0x74, 0x6f, 0x6f, 0x73, 0x6f, - 0x70, 0x74, 0x79, 0x74, 0x73, 0x80, 0x8a, 0x97, 0x97, 0x8c, 0x8a, - 0x91, 0x91, 0x89, 0x8c, 0x92, 0x92, 0x8e, 0x8a, 0x87, 0x81, 0x80, - 0x80, 0x81, 0x7f, 0x7c, 0x80, 0x7c, 0x78, 0x77, 0x7a, 0x76, 0x71, - 0x79, 0x78, 0x74, 0x74, 0x77, 0x75, 0x73, 0x71, 0x71, 0x78, 0x77, - 0x76, 0x7a, 0x7d, 0x73, 0x71, 0x86, 0x9a, 0x94, 0x8e, 0x99, 0x94, - 0x88, 0x85, 0x90, 0x90, 0x88, 0x8f, 0x90, 0x8c, 0x84, 0x83, 0x82, - 0x7f, 0x7f, 0x7b, 0x79, 0x7b, 0x7e, 0x7b, 0x7a, 0x7b, 0x76, 0x74, - 0x75, 0x78, 0x76, 0x75, 0x76, 0x79, 0x7a, 0x75, 0x6e, 0x70, 0x77, - 0x78, 0x72, 0x77, 0x82, 0x7e, 0x76, 0x7a, 0x7c, 0x7b, 0x91, 0x9e, - 0x90, 0x8f, 0x98, 0x8e, 0x7f, 0x89, 0x91, 0x8b, 0x8b, 0x8e, 0x8c, - 0x84, 0x84, 0x85, 0x7f, 0x7c, 0x7e, 0x7e, 0x7c, 0x7c, 0x7c, 0x7a, - 0x77, 0x75, 0x78, 0x7c, 0x77, 0x76, 0x79, 0x78, 0x75, 0x78, 0x7e, - 0x7a, 0x76, 0x76, 0x7a, 0x78, 0x72, 0x75, 0x7e, 0x7e, 0x79, 0x7c, - 0x7e, 0x7b, 0x76, 0x77, 0x80, 0x92, 0x9a, 0x92, 0x92, 0x94, 0x8f, - 0x88, 0x89, 0x8c, 0x8a, 0x8e, 0x8e, 0x89, 0x85, 0x84, 0x81, 0x7d, - 0x7d, 0x7e, 0x7d, 0x7c, 0x7b, 0x7a, 0x79, 0x78, 0x77, 0x78, 0x7a, - 0x7a, 0x7e, 0x79, 0x76, 0x7a, 0x78, 0x72, 0x74, 0x82, 0x7d, 0x72, - 0x76, 0x7d, 0x77, 0x6e, 0x78, 0x7f, 0x7b, 0x78, 0x7d, 0x7f, 0x79, - 0x77, 0x7a, 0x80, 0x8b, 0x97, 0x98, 0x94, 0x94, 0x91, 0x8b, 0x87, - 0x8a, 0x8c, 0x8a, 0x8c, 0x8c, 0x8a, 0x84, 0x81, 0x81, 0x7f, 0x7c, - 0x7c, 0x7c, 0x7a, 0x7b, 0x7b, 0x7b, 0x7a, 0x76, 0x79, 0x7a, 0x7c, - 0x7a, 0x79, 0x79, 0x77, 0x76, 0x76, 0x78, 0x7a, 0x7a, 0x77, 0x76, - 0x76, 0x73, 0x75, 0x7a, 0x79, 0x75, 0x7c, 0x7e, 0x78, 0x76, 0x79, - 0x7b, 0x81, 0x8e, 0x96, 0x99, 0x96, 0x93, 0x90, 0x8b, 0x87, 0x88, - 0x8f, 0x8e, 0x8c, 0x8a, 0x89, 0x86, 0x80, 0x7f, 0x80, 0x7e, 0x7c, - 0x7a, 0x7b, 0x79, 0x79, 0x79, 0x76, 0x77, 0x78, 0x78, 0x79, 0x7a, - 0x7b, 0x7a, 0x7c, 0x7d, 0x7e, 0x7f, 0x85, 0x83, 0x7b, 0x7e, 0x80, - 0x7a, 0x76, 0x7e, 0x80, 0x79, 0x78, 0x7b, 0x78, 0x73, 0x75, 0x77, - 0x77, 0x77, 0x78, 0x7a, 0x7b, 0x79, 0x79, 0x82, 0x8e, 0x92, 0x91, - 0x95, 0x98, 0x90, 0x89, 0x8b, 0x8b, 0x87, 0x87, 0x8a, 0x88, 0x85, - 0x83, 0x81, 0x80, 0x7e, 0x7b, 0x7a, 0x7b, 0x79, 0x77, 0x78, 0x77, - 0x78, 0x76, 0x77, 0x77, 0x77, 0x79, 0x79, 0x7a, 0x7b, 0x7d, 0x7d, - 0x7c, 0x7e, 0x7f, 0x7e, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x82, 0x81, - 0x82, 0x81, 0x82, 0x80, 0x84, 0x88, 0x82, 0x82, 0x85, 0x83, 0x7c, - 0x7e, 0x82, 0x7d, 0x7e, 0x7f, 0x80, 0x7c, 0x7c, 0x7e, 0x7c, 0x7c, - 0x7c, 0x7e, 0x7d, 0x7d, 0x7d, 0x7d, 0x7e, 0x7d, 0x7d, 0x7f, 0x80, - 0x7c, 0x7b, 0x7e, 0x7c, 0x7a, 0x7b, 0x7f, 0x7f, 0x7f, 0x81, 0x80, - 0x83, 0x85, 0x84, 0x83, 0x85, 0x87, 0x83, 0x86, 0x88, 0x85, 0x83, - 0x84, 0x85, 0x80, 0x80, 0x80, 0x80, 0x7c, 0x7c, 0x7f, 0x7c, 0x7a, - 0x7b, 0x7c, 0x7a, 0x78, 0x7a, 0x7a, 0x78, 0x78, 0x7a, 0x7a, 0x78, - 0x7a, 0x7b, 0x7c, 0x7a, 0x7c, 0x7e, 0x7d, 0x7d, 0x7e, 0x80, 0x7f, - 0x7e, 0x81, 0x81, 0x7f, 0x80, 0x83, 0x81, 0x80, 0x82, 0x83, 0x81, - 0x81, 0x83, 0x82, 0x80, 0x82, 0x82, 0x81, 0x81, 0x82, 0x81, 0x80, - 0x81, 0x81, 0x7f, 0x80, 0x81, 0x80, 0x7e, 0x7f, 0x7f, 0x7f, 0x7d, - 0x7e, 0x7e, 0x7d, 0x7e, 0x7e, 0x7e, 0x7d, 0x7e, 0x7d, 0x7d, 0x7e, - 0x7d, 0x7e, 0x7d, 0x7f, 0x7e, 0x7d, 0x7e, 0x7f, 0x7f, 0x7e, 0x7f, - 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x7f, - 0x81, 0x80, 0x7e, 0x80, 0x81, 0x7e, 0x7e, 0x80, 0x7e, 0x7d, 0x7e, - 0x7f, 0x7e, 0x7d, 0x7e, 0x7d, 0x7d, 0x7e, 0x7d, 0x7c, 0x7d, 0x7e, - 0x7d, 0x7e, 0x7f, 0x7e, 0x7f, 0x80, 0x80, 0x7f, 0x81, 0x81, 0x80, - 0x81, 0x82, 0x81, 0x80, 0x81, 0x82, 0x81, 0x81, 0x82, 0x81, 0x80, - 0x81, 0x80, 0x80, 0x81, 0x7f, 0x7e, 0x7f, 0x7f, 0x7d, 0x7d, 0x7e, - 0x7d, 0x7c, 0x7d, 0x7e, 0x7d, 0x7c, 0x7d, 0x7d, 0x7e, 0x7d, 0x7c, - 0x7d, 0x7e, 0x7d, 0x7d, 0x7e, 0x7d, 0x7e, 0x7f, 0x7e, 0x7f, 0x7f, - 0x7f, 0x80, 0x81, 0x80, 0x81, 0x80, 0x81, 0x80, 0x80, 0x80, 0x81, - 0x80, 0x81, 0x80, 0x81, 0x80, 0x81, 0x80, 0x80, 0x7f, 0x80, 0x7f, - 0x7f, 0x7f, 0x7e, 0x7e, 0x7f, 0x7e, 0x7f, 0x7e, 0x7f, 0x7e, 0x7e, - 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7f, 0x7e, 0x7e, 0x7f, - 0x7e, 0x7f, 0x7e, 0x7f, 0x7f, 0x7e, 0x7f, 0x80, 0x7f, 0x80, 0x7f, - 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, - 0x7f, 0x80, 0x7f, 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x7e, 0x7f, 0x7e, - 0x7f, 0x7e, 0x7f, 0x7e, 0x7f, 0x7e, 0x7f, 0x7e, 0x7f, 0x7e, 0x7f, - 0x7e, 0x7f, 0x7e, 0x7f, 0x7e, 0x7f, 0x7f, 0x7e, 0x80, 0x7f, 0x7f, - 0x7e, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x7f, - 0x7e, 0x7f, 0x7f, 0x7e, 0x7f, 0x7f, 0x7e, 0x7e, 0x7f, 0x7e, 0x7f, - 0x7f, 0x7e, 0x7f, 0x7f, 0x7e, 0x7f, 0x7f, 0x7e, 0x7e, 0x7f, 0x7e, - 0x7f, 0x7f, 0x7e, 0x7f, 0x7e, 0x7f, 0x7e, 0x7f, 0x7e, 0x7f, 0x7f, - 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x7e, 0x7f, 0x80, 0x7e, 0x7f, - 0x7f, 0x7f, 0x7e, 0x7f, 0x7f, 0x7e, 0x80, 0x7f, 0x7f, 0x7f, 0x7e, - 0x7f, 0x7f, 0x7f, 0x7e, 0x7f, 0x7f, 0x7e, 0x7f, 0x7e, 0x7f, 0x7e, - 0x7f, 0x7f, 0x7f, 0x7e, 0x7f, 0x7f, 0x7e, 0x7f, 0x7f, 0x7e, 0x7f, - 0x7e, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x7e, 0x7f, 0x7f, 0x7e, 0x7f, - 0x7e, 0x7f, 0x7e, 0x7f, 0x7e, 0x7f, 0x7f, 0x7e, 0x7f, 0x80, 0x7f, - 0x7f, 0x80, 0x7f, 0x7e, 0x7f, 0x7e, 0x7f, 0x7e, 0x7f, 0x7e, 0x7f, - 0x7f, 0x7f, 0x7e, 0x7f, 0x7f, 0x7e, 0x7f, 0x7e, 0x7f, 0x7e, 0x7f, - 0x7e, 0x7f, 0x7f, 0x7e, 0x7f, 0x7f, 0x7f, 0x7e, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7e, 0x7f, 0x7e, 0x7f, 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7e, 0x7f, 0x7f, 0x7e, 0x7f, 0x7f, 0x7e, 0x7f, 0x7f, 0x7e, 0x7f, - 0x7e, 0x7f, 0x7e, 0x7f, 0x7f, 0x7e, 0x7f, 0x7e, 0x7f, 0x7e, 0x7f, - 0x7e, 0x7f, 0x7f, 0x7e, 0x7f, 0x7f, 0x7e, 0x7f, 0x7f, 0x80, 0x7f, - 0x7f, 0x80, 0x7f, 0x7e, 0x7f, 0x7f, 0x7e, 0x7f, 0x7f, 0x7f, 0x7e, - 0x7e, 0x7f, 0x7f, 0x7e, 0x7f, 0x7f, 0x7f, 0x7e, 0x7f, 0x7f, 0x7e, - 0x7f, 0x7e, 0x7f, 0x7e, 0x7f, 0x7e, 0x7f, 0x7e, 0x7f, 0x7e, 0x7f, - 0x7e, 0x7f, 0x7e, 0x7f, 0x7e, 0x7f, 0x7f, 0x7f, 0x7e, 0x7f, 0x7f, - 0x7e, 0x7f, 0x7f, 0x7f, 0x7e, 0x7f, 0x80, 0x7f, 0x7e, 0x7f, 0x7e, - 0x7f, 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7e, 0x7f, 0x7e, 0x7f, 0x7e, 0x7f, 0x7e, 0x7f, 0x7e, 0x7f, 0x7e, - 0x7f, 0x7e, 0x7f, 0x7e, 0x7f, 0x7f, 0x7f, 0x7e, 0x7f, 0x7e, 0x7f, - 0x7e, 0x7f, 0x7e, 0x7f, 0x7e, 0x7f, 0x7e, 0x7f, 0x7e, 0x7f, 0x7e, - 0x7f, 0x7e, 0x7f, 0x7f, 0x7e, 0x7f, 0x7e, 0x7f, 0x7f, 0x7e, 0x7f, - 0x7e, 0x7f, 0x7e, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x7e, 0x7f, 0x80, - 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7e, 0x7f, 0x7e, - 0x7f, 0x7f, 0x7e, 0x7f, 0x7e, 0x7f, 0x7f, 0x7e, 0x7f, 0x7f, 0x80, - 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7e, 0x7f, 0x80, - 0x80, 0x7f, 0x80, 0x7f, - }, - { // 3 - 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x80, - 0x80, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, - 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x80, - 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, - 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, - 0x80, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x7f, - 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x80, - 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x7f, - 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, - 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, - 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x7f, - 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x80, 0x80, - 0x80, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x80, - 0x81, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x81, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x7f, - 0x81, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x7f, - 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x7e, 0x7e, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x81, 0x80, 0x7f, 0x7f, 0x80, - 0x80, 0x7f, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x7f, - 0x80, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x81, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, - 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x81, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x7f, 0x80, 0x81, 0x7f, 0x7f, 0x80, 0x81, 0x80, - 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, - 0x81, 0x81, 0x80, 0x7f, 0x7f, 0x81, 0x80, 0x81, 0x80, 0x80, 0x7f, - 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x80, - 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x81, 0x81, 0x80, 0x7f, 0x7f, 0x7f, - 0x7f, 0x80, 0x7f, 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x7e, 0x80, 0x7f, - 0x80, 0x7e, 0x7e, 0x80, 0x7f, 0x7f, 0x7f, 0x81, 0x80, 0x7e, 0x7e, - 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x7e, 0x7e, 0x7f, 0x7f, 0x80, - 0x7f, 0x80, 0x7f, 0x80, 0x82, 0x82, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7e, 0x7f, 0x7f, 0x7f, 0x80, 0x7e, 0x80, 0x7f, - 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x7e, 0x80, 0x7f, 0x80, 0x80, - 0x7f, 0x81, 0x80, 0x80, 0x7e, 0x7e, 0x80, 0x80, 0x7e, 0x7f, 0x7f, - 0x7f, 0x7d, 0x7d, 0x80, 0x80, 0x7e, 0x7e, 0x80, 0x80, 0x81, 0x80, - 0x81, 0x81, 0x81, 0x81, 0x81, 0x80, 0x81, 0x80, 0x7f, 0x7f, 0x7e, - 0x80, 0x80, 0x82, 0x81, 0x80, 0x80, 0x80, 0x81, 0x7f, 0x80, 0x80, - 0x7f, 0x7e, 0x7e, 0x80, 0x80, 0x80, 0x7f, 0x81, 0x7f, 0x80, 0x7f, - 0x81, 0x80, 0x7e, 0x7d, 0x7f, 0x80, 0x81, 0x82, 0x81, 0x80, 0x80, - 0x82, 0x83, 0x81, 0x80, 0x82, 0x80, 0x81, 0x7f, 0x80, 0x80, 0x7f, - 0x7f, 0x80, 0x80, 0x7e, 0x7c, 0x7d, 0x7d, 0x7b, 0x7c, 0x7e, 0x7c, - 0x7c, 0x7c, 0x7d, 0x7c, 0x7c, 0x7f, 0x7e, 0x7c, 0x7c, 0x7f, 0x7e, - 0x7f, 0x7e, 0x80, 0x7f, 0x80, 0x81, 0x81, 0x80, 0x80, 0x81, 0x80, - 0x80, 0x81, 0x83, 0x83, 0x83, 0x82, 0x81, 0x81, 0x82, 0x83, 0x83, - 0x81, 0x81, 0x80, 0x80, 0x80, 0x81, 0x82, 0x81, 0x81, 0x81, 0x80, - 0x80, 0x81, 0x82, 0x82, 0x82, 0x80, 0x80, 0x81, 0x81, 0x80, 0x80, - 0x82, 0x80, 0x7e, 0x7f, 0x82, 0x80, 0x81, 0x82, 0x82, 0x81, 0x80, - 0x82, 0x82, 0x81, 0x81, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, - 0x80, 0x7f, 0x80, 0x81, 0x81, 0x80, 0x7f, 0x80, 0x82, 0x7f, 0x7f, - 0x82, 0x82, 0x7f, 0x7e, 0x81, 0x82, 0x7f, 0x7f, 0x81, 0x81, 0x7f, - 0x7e, 0x7f, 0x81, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x81, 0x81, - 0x81, 0x81, 0x7f, 0x7e, 0x81, 0x80, 0x7e, 0x7e, 0x80, 0x80, 0x7e, - 0x7f, 0x81, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x82, 0x81, 0x7e, 0x7e, - 0x80, 0x7f, 0x7f, 0x81, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x81, 0x82, - 0x81, 0x80, 0x80, 0x7f, 0x7f, 0x81, 0x81, 0x80, 0x7f, 0x7f, 0x7e, - 0x7f, 0x7e, 0x7f, 0x80, 0x80, 0x7e, 0x7d, 0x80, 0x81, 0x7f, 0x80, - 0x81, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x81, 0x7f, 0x7f, 0x7f, - 0x7e, 0x7f, 0x80, 0x7f, 0x7e, 0x7e, 0x7e, 0x7e, 0x7d, 0x7e, 0x7f, - 0x80, 0x7f, 0x7e, 0x7e, 0x7e, 0x7d, 0x80, 0x80, 0x7e, 0x7f, 0x7f, - 0x7d, 0x7d, 0x7e, 0x7f, 0x7e, 0x7f, 0x80, 0x7d, 0x7d, 0x7e, 0x7f, - 0x7e, 0x7e, 0x80, 0x7e, 0x7d, 0x7e, 0x7f, 0x80, 0x80, 0x7e, 0x7e, - 0x80, 0x80, 0x7d, 0x7e, 0x80, 0x7f, 0x7d, 0x7e, 0x80, 0x7f, 0x7e, - 0x80, 0x7e, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x7e, 0x7f, 0x7f, 0x81, - 0x80, 0x7e, 0x7e, 0x7f, 0x7e, 0x7d, 0x7f, 0x7f, 0x80, 0x7f, 0x80, - 0x7d, 0x7d, 0x7f, 0x80, 0x7f, 0x7e, 0x7e, 0x7e, 0x7d, 0x7f, 0x7f, - 0x7d, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x7e, - 0x80, 0x81, 0x7f, 0x7d, 0x7f, 0x7f, 0x7e, 0x80, 0x7f, 0x7f, 0x80, - 0x7e, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x82, 0x81, 0x7f, 0x7f, 0x80, - 0x80, 0x80, 0x80, 0x82, 0x81, 0x80, 0x7e, 0x81, 0x80, 0x7f, 0x81, - 0x7f, 0x7d, 0x7f, 0x7f, 0x7f, 0x82, 0x7f, 0x7f, 0x80, 0x80, 0x7f, - 0x7f, 0x7e, 0x80, 0x7e, 0x7f, 0x7d, 0x7d, 0x80, 0x7f, 0x7f, 0x80, - 0x80, 0x7e, 0x80, 0x7f, 0x7f, 0x7e, 0x80, 0x7f, 0x81, 0x7e, 0x7e, - 0x7f, 0x7e, 0x7e, 0x7e, 0x7f, 0x80, 0x7e, 0x7e, 0x7e, 0x7d, 0x7f, - 0x7f, 0x80, 0x7e, 0x7d, 0x7e, 0x7e, 0x7e, 0x7e, 0x7d, 0x7e, 0x7f, - 0x80, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x81, 0x7f, 0x7f, - 0x80, 0x80, 0x80, 0x81, 0x82, 0x80, 0x7e, 0x80, 0x83, 0x80, 0x81, - 0x80, 0x80, 0x80, 0x7f, 0x80, 0x81, 0x81, 0x81, 0x82, 0x80, 0x83, - 0x7f, 0x82, 0x82, 0x82, 0x81, 0x80, 0x7f, 0x80, 0x80, 0x7e, 0x80, - 0x80, 0x7e, 0x7f, 0x7e, 0x7f, 0x82, 0x80, 0x80, 0x82, 0x82, 0x81, - 0x80, 0x80, 0x80, 0x7e, 0x7e, 0x7f, 0x80, 0x7f, 0x80, 0x81, 0x80, - 0x80, 0x80, 0x80, 0x7f, 0x80, 0x81, 0x7c, 0x7d, 0x7f, 0x7c, 0x7e, - 0x7f, 0x7f, 0x7f, 0x7e, 0x7e, 0x7f, 0x80, 0x80, 0x7e, 0x80, 0x80, - 0x7f, 0x80, 0x81, 0x80, 0x80, 0x7f, 0x7f, 0x81, 0x80, 0x81, 0x7f, - 0x80, 0x7f, 0x81, 0x81, 0x81, 0x80, 0x82, 0x7f, 0x7f, 0x82, 0x82, - 0x80, 0x7f, 0x82, 0x7f, 0x7e, 0x80, 0x80, 0x80, 0x81, 0x7e, 0x81, - 0x7f, 0x7f, 0x81, 0x80, 0x7f, 0x7d, 0x80, 0x7e, 0x7f, 0x80, 0x81, - 0x7f, 0x80, 0x81, 0x7e, 0x80, 0x7e, 0x81, 0x80, 0x81, 0x81, 0x82, - 0x81, 0x7e, 0x80, 0x7e, 0x7e, 0x7e, 0x81, 0x80, 0x81, 0x80, 0x80, - 0x81, 0x7e, 0x80, 0x81, 0x80, 0x80, 0x7f, 0x7f, 0x7e, 0x80, 0x7f, - 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7e, 0x7f, 0x7d, 0x7f, 0x81, - 0x80, 0x80, 0x81, 0x82, 0x81, 0x81, 0x7f, 0x7e, 0x80, 0x80, 0x7e, - 0x80, 0x80, 0x7f, 0x7f, 0x7d, 0x7f, 0x7f, 0x7d, 0x7c, 0x80, 0x7f, - 0x7d, 0x7c, 0x7e, 0x7e, 0x7d, 0x80, 0x7d, 0x81, 0x7f, 0x80, 0x7f, - 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x82, 0x81, 0x7e, 0x7d, 0x82, 0x80, - 0x7f, 0x81, 0x82, 0x80, 0x7f, 0x7f, 0x81, 0x80, 0x81, 0x80, 0x82, - 0x82, 0x7e, 0x7f, 0x7f, 0x80, 0x80, 0x83, 0x81, 0x7f, 0x82, 0x81, - 0x80, 0x7f, 0x81, 0x7e, 0x7e, 0x7f, 0x81, 0x81, 0x7f, 0x7e, 0x7e, - 0x81, 0x7d, 0x80, 0x80, 0x7d, 0x7e, 0x7e, 0x7d, 0x7c, 0x7e, 0x80, - 0x7d, 0x80, 0x80, 0x80, 0x7e, 0x7a, 0x80, 0x81, 0x7c, 0x7d, 0x7f, - 0x83, 0x7f, 0x80, 0x83, 0x7f, 0x81, 0x80, 0x81, 0x80, 0x81, 0x80, - 0x82, 0x83, 0x7f, 0x80, 0x7f, 0x7f, 0x7e, 0x82, 0x83, 0x82, 0x80, - 0x80, 0x81, 0x7d, 0x7c, 0x7f, 0x82, 0x7e, 0x83, 0x7f, 0x80, 0x80, - 0x80, 0x83, 0x83, 0x84, 0x7a, 0x7f, 0x7d, 0x7f, 0x7e, 0x7d, 0x84, - 0x7c, 0x7b, 0x79, 0x7e, 0x81, 0x7c, 0x80, 0x7f, 0x81, 0x81, 0x7d, - 0x7f, 0x7d, 0x7f, 0x7c, 0x7a, 0x7e, 0x7d, 0x7b, 0x7d, 0x7e, 0x80, - 0x7e, 0x7d, 0x7e, 0x7f, 0x81, 0x7f, 0x7f, 0x81, 0x81, 0x83, 0x83, - 0x81, 0x87, 0x84, 0x84, 0x80, 0x83, 0x83, 0x7e, 0x83, 0x86, 0x86, - 0x84, 0x87, 0x89, 0x87, 0x86, 0x82, 0x7c, 0x80, 0x7f, 0x7b, 0x7e, - 0x83, 0x80, 0x7f, 0x7d, 0x7f, 0x82, 0x80, 0x7b, 0x79, 0x7d, 0x7c, - 0x76, 0x78, 0x7d, 0x7e, 0x7c, 0x79, 0x7e, 0x7b, 0x7c, 0x7c, 0x7f, - 0x7f, 0x7a, 0x7b, 0x7e, 0x7d, 0x7a, 0x7f, 0x7b, 0x7c, 0x7b, 0x7c, - 0x7c, 0x79, 0x7b, 0x7d, 0x79, 0x78, 0x7a, 0x7c, 0x7b, 0x7d, 0x80, - 0x82, 0x86, 0x84, 0x89, 0x8c, 0x92, 0x93, 0x95, 0x97, 0x98, 0x97, - 0x92, 0x92, 0x8f, 0x85, 0x7b, 0x70, 0x62, 0x60, 0x64, 0x65, 0x5d, - 0x5d, 0x5d, 0x5e, 0x60, 0x73, 0x92, 0xa5, 0xab, 0xaa, 0xad, 0xae, - 0xa4, 0x96, 0x93, 0x9a, 0x9a, 0x92, 0x8c, 0x85, 0x7d, 0x6c, 0x60, - 0x56, 0x4d, 0x45, 0x4b, 0x4a, 0x4c, 0x4f, 0x62, 0x9a, 0xa9, 0xa5, - 0xa2, 0x9c, 0x98, 0x80, 0x78, 0x84, 0x92, 0x98, 0x98, 0x9c, 0x9d, - 0x8f, 0x79, 0x79, 0x6f, 0x5a, 0x56, 0x51, 0x4a, 0x4e, 0x56, 0x70, - 0x7b, 0x83, 0xb0, 0xae, 0xa4, 0x94, 0x85, 0x8c, 0x82, 0x82, 0x91, - 0xa2, 0xa9, 0xa6, 0x9e, 0x98, 0x8a, 0x79, 0x72, 0x72, 0x71, 0x65, - 0x59, 0x53, 0x4a, 0x4e, 0x5c, 0x77, 0x75, 0x86, 0xb4, 0xa5, 0x99, - 0x84, 0x7e, 0x83, 0x7c, 0x88, 0x98, 0xad, 0xab, 0x9b, 0x95, 0x85, - 0x78, 0x6e, 0x6f, 0x78, 0x6e, 0x5e, 0x54, 0x50, 0x45, 0x4c, 0x62, - 0x86, 0x71, 0x9c, 0xbc, 0xa0, 0x92, 0x74, 0x88, 0x7d, 0x83, 0x93, - 0xa8, 0xb9, 0xa5, 0x96, 0x8d, 0x7c, 0x73, 0x73, 0x7b, 0x7b, 0x68, - 0x60, 0x5a, 0x49, 0x45, 0x54, 0x7f, 0x82, 0x75, 0xbd, 0xb3, 0x96, - 0x7b, 0x71, 0x84, 0x7d, 0x89, 0xa5, 0xb9, 0xad, 0x97, 0x88, 0x7c, - 0x75, 0x71, 0x78, 0x8a, 0x74, 0x66, 0x59, 0x56, 0x49, 0x47, 0x58, - 0x8a, 0x7c, 0x8c, 0xc7, 0xa4, 0x8f, 0x6d, 0x74, 0x7c, 0x7c, 0x91, - 0xab, 0xb4, 0xa6, 0x8e, 0x7a, 0x75, 0x75, 0x73, 0x82, 0x82, 0x73, - 0x62, 0x51, 0x50, 0x49, 0x4b, 0x64, 0x90, 0x81, 0xb4, 0xb8, 0x93, - 0x81, 0x62, 0x74, 0x79, 0x8c, 0xa3, 0xb6, 0xb0, 0x9a, 0x83, 0x74, - 0x70, 0x76, 0x7b, 0x8d, 0x7e, 0x6d, 0x60, 0x56, 0x4d, 0x50, 0x52, - 0x6e, 0x96, 0x8b, 0xc0, 0xaf, 0x89, 0x70, 0x66, 0x76, 0x80, 0x94, - 0xa8, 0xb8, 0xa3, 0x8d, 0x75, 0x71, 0x75, 0x7d, 0x83, 0x8f, 0x7c, - 0x6a, 0x58, 0x58, 0x5c, 0x59, 0x4a, 0x74, 0x8f, 0x91, 0xc7, 0xa2, - 0x8c, 0x6c, 0x60, 0x76, 0x82, 0x9c, 0xb3, 0xb6, 0x9e, 0x82, 0x70, - 0x72, 0x79, 0x81, 0x8f, 0x8c, 0x75, 0x64, 0x5b, 0x5c, 0x56, 0x50, - 0x57, 0x91, 0x8e, 0xac, 0xbf, 0x8d, 0x79, 0x56, 0x66, 0x7d, 0x94, - 0xae, 0xba, 0xaa, 0x8d, 0x73, 0x6d, 0x74, 0x83, 0x8b, 0x90, 0x7f, - 0x6a, 0x5d, 0x5b, 0x5d, 0x60, 0x4e, 0x5f, 0x95, 0x8f, 0xc0, 0xad, - 0x87, 0x6d, 0x57, 0x70, 0x83, 0x9d, 0xb8, 0xb6, 0xa4, 0x83, 0x6d, - 0x6f, 0x76, 0x86, 0x89, 0x8b, 0x73, 0x67, 0x5d, 0x5c, 0x5a, 0x66, - 0x4d, 0x73, 0x91, 0xa6, 0xc8, 0x91, 0x7f, 0x67, 0x61, 0x75, 0x8d, - 0xac, 0xb5, 0xa5, 0x96, 0x76, 0x6c, 0x71, 0x82, 0x87, 0x8e, 0x84, - 0x71, 0x65, 0x5f, 0x5c, 0x5c, 0x5a, 0x50, 0x8b, 0x93, 0xc0, 0xb1, - 0x7f, 0x72, 0x5b, 0x6a, 0x7c, 0x9e, 0xb8, 0xb4, 0x9b, 0x87, 0x6e, - 0x72, 0x75, 0x87, 0x90, 0x8f, 0x79, 0x6d, 0x61, 0x60, 0x5e, 0x67, - 0x4f, 0x5e, 0x95, 0x97, 0xc5, 0x97, 0x78, 0x6e, 0x5b, 0x71, 0x88, - 0xa4, 0xb8, 0xa1, 0x96, 0x7d, 0x6e, 0x74, 0x7a, 0x8d, 0x8b, 0x8a, - 0x76, 0x6a, 0x5f, 0x5a, 0x63, 0x60, 0x4a, 0x88, 0x97, 0xaf, 0xb0, - 0x80, 0x77, 0x5e, 0x63, 0x83, 0x9c, 0xb3, 0xa9, 0x99, 0x84, 0x6b, - 0x75, 0x78, 0x8f, 0x8a, 0x84, 0x78, 0x69, 0x5e, 0x5e, 0x5f, 0x67, - 0x4c, 0x79, 0x97, 0xac, 0xbb, 0x80, 0x77, 0x64, 0x64, 0x7b, 0x97, - 0xb5, 0xa9, 0x97, 0x84, 0x70, 0x72, 0x73, 0x8e, 0x8c, 0x86, 0x74, - 0x69, 0x65, 0x5e, 0x5d, 0x63, 0x51, 0x7d, 0x96, 0xad, 0xb4, 0x7f, - 0x79, 0x61, 0x6b, 0x7e, 0x99, 0xb3, 0xaa, 0x96, 0x83, 0x70, 0x74, - 0x77, 0x89, 0x8c, 0x81, 0x76, 0x69, 0x60, 0x5e, 0x65, 0x64, 0x53, - 0x7c, 0x93, 0xa9, 0xb2, 0x81, 0x7b, 0x63, 0x69, 0x84, 0x99, 0xb3, - 0xa8, 0x99, 0x83, 0x71, 0x73, 0x7a, 0x8b, 0x8a, 0x84, 0x75, 0x66, - 0x5f, 0x5a, 0x64, 0x5e, 0x51, 0x85, 0x94, 0xab, 0xad, 0x80, 0x7b, - 0x63, 0x6e, 0x8b, 0x9c, 0xb1, 0xa2, 0x95, 0x83, 0x75, 0x78, 0x82, - 0x8a, 0x86, 0x7d, 0x71, 0x65, 0x61, 0x5d, 0x61, 0x61, 0x58, 0x8f, - 0x8d, 0xa9, 0x9e, 0x76, 0x75, 0x61, 0x83, 0x92, 0xa2, 0xaa, 0x9b, - 0x91, 0x7c, 0x7c, 0x85, 0x8b, 0x8b, 0x84, 0x7c, 0x70, 0x67, 0x64, - 0x62, 0x64, 0x52, 0x5d, 0x8d, 0x8f, 0xa8, 0x89, 0x76, 0x70, 0x67, - 0x86, 0x92, 0xa3, 0xa2, 0x9d, 0x8e, 0x80, 0x80, 0x85, 0x8e, 0x89, - 0x87, 0x80, 0x75, 0x68, 0x5f, 0x5b, 0x67, 0x51, 0x6a, 0x8e, 0x88, - 0xa5, 0x80, 0x75, 0x67, 0x69, 0x8f, 0x95, 0xa4, 0x9f, 0x9a, 0x8c, - 0x80, 0x80, 0x89, 0x8d, 0x8c, 0x88, 0x83, 0x72, 0x66, 0x5e, 0x5d, - 0x62, 0x51, 0x80, 0x8b, 0x8d, 0x9c, 0x7b, 0x73, 0x61, 0x71, 0x90, - 0x95, 0xa4, 0x9d, 0x99, 0x89, 0x7e, 0x82, 0x89, 0x8d, 0x89, 0x8a, - 0x80, 0x70, 0x66, 0x62, 0x60, 0x61, 0x56, 0x87, 0x83, 0x95, 0x9b, - 0x78, 0x70, 0x5e, 0x7f, 0x8e, 0x98, 0xa0, 0x9d, 0x97, 0x84, 0x81, - 0x83, 0x8a, 0x90, 0x8c, 0x8b, 0x7b, 0x6e, 0x68, 0x5d, 0x5f, 0x58, - 0x5e, 0x89, 0x7c, 0x9a, 0x93, 0x78, 0x6f, 0x63, 0x82, 0x8c, 0x98, - 0x9f, 0xa0, 0x95, 0x85, 0x81, 0x86, 0x89, 0x89, 0x8e, 0x8b, 0x7c, - 0x6a, 0x66, 0x5f, 0x5f, 0x53, 0x64, 0x93, 0x7c, 0x9b, 0x8a, 0x7c, - 0x6b, 0x5e, 0x8a, 0x8a, 0x9c, 0x9e, 0xa0, 0x96, 0x81, 0x7f, 0x84, - 0x8b, 0x89, 0x8a, 0x8c, 0x7c, 0x68, 0x62, 0x5b, 0x63, 0x50, 0x72, - 0x8a, 0x84, 0xa0, 0x82, 0x7c, 0x69, 0x6e, 0x8a, 0x8e, 0x9d, 0xa1, - 0x9f, 0x91, 0x81, 0x82, 0x84, 0x88, 0x8c, 0x8e, 0x86, 0x77, 0x69, - 0x60, 0x59, 0x60, 0x59, 0x79, 0x82, 0x81, 0xa0, 0x7f, 0x79, 0x64, - 0x78, 0x8a, 0x89, 0x9d, 0xa1, 0x9f, 0x90, 0x85, 0x84, 0x84, 0x86, - 0x8c, 0x8d, 0x87, 0x75, 0x6b, 0x62, 0x5a, 0x59, 0x55, 0x7d, 0x7e, - 0x82, 0x9a, 0x81, 0x79, 0x64, 0x77, 0x86, 0x89, 0x9d, 0xa4, 0xa2, - 0x91, 0x83, 0x83, 0x84, 0x87, 0x8d, 0x91, 0x88, 0x77, 0x6b, 0x5e, - 0x58, 0x55, 0x5a, 0x7e, 0x76, 0x8a, 0x9b, 0x80, 0x77, 0x66, 0x7d, - 0x80, 0x8c, 0x9d, 0xa8, 0xa1, 0x91, 0x87, 0x85, 0x84, 0x84, 0x8f, - 0x8f, 0x83, 0x74, 0x6c, 0x60, 0x57, 0x51, 0x63, 0x81, 0x71, 0x8d, - 0x96, 0x80, 0x78, 0x69, 0x81, 0x7f, 0x8f, 0x9f, 0xa5, 0x9e, 0x8d, - 0x89, 0x88, 0x83, 0x85, 0x93, 0x8e, 0x80, 0x72, 0x6b, 0x5f, 0x58, - 0x53, 0x69, 0x7b, 0x70, 0x8a, 0x90, 0x82, 0x76, 0x6d, 0x82, 0x80, - 0x89, 0x9c, 0xa6, 0x9e, 0x91, 0x8b, 0x8a, 0x82, 0x86, 0x8f, 0x8e, - 0x83, 0x72, 0x6c, 0x5e, 0x55, 0x52, 0x6e, 0x74, 0x70, 0x8e, 0x8c, - 0x7f, 0x72, 0x73, 0x7e, 0x7e, 0x8a, 0xa2, 0xa7, 0x9c, 0x96, 0x8e, - 0x8a, 0x80, 0x86, 0x91, 0x8a, 0x80, 0x74, 0x6b, 0x5e, 0x53, 0x57, - 0x72, 0x6f, 0x70, 0x8d, 0x8b, 0x80, 0x72, 0x7b, 0x83, 0x7f, 0x8e, - 0x9f, 0xa4, 0x9b, 0x94, 0x8f, 0x8b, 0x82, 0x87, 0x8f, 0x88, 0x7d, - 0x73, 0x6a, 0x5d, 0x53, 0x5d, 0x71, 0x69, 0x72, 0x8d, 0x86, 0x7e, - 0x76, 0x7e, 0x83, 0x7e, 0x8c, 0x9f, 0xa2, 0x9b, 0x97, 0x95, 0x8e, - 0x82, 0x89, 0x8b, 0x83, 0x7b, 0x76, 0x6a, 0x5c, 0x54, 0x62, 0x6c, - 0x60, 0x77, 0x8a, 0x83, 0x7b, 0x79, 0x84, 0x82, 0x80, 0x91, 0x9f, - 0x9e, 0x98, 0x99, 0x99, 0x8c, 0x85, 0x8c, 0x8a, 0x81, 0x78, 0x73, - 0x69, 0x5a, 0x57, 0x65, 0x69, 0x66, 0x7a, 0x83, 0x81, 0x7a, 0x7c, - 0x83, 0x81, 0x85, 0x91, 0x9d, 0x9b, 0x97, 0x99, 0x97, 0x8d, 0x8a, - 0x8d, 0x89, 0x80, 0x76, 0x71, 0x68, 0x5d, 0x5f, 0x67, 0x68, 0x66, - 0x74, 0x7b, 0x7a, 0x79, 0x7e, 0x86, 0x83, 0x87, 0x91, 0x98, 0x98, - 0x97, 0x99, 0x98, 0x90, 0x8e, 0x8d, 0x8a, 0x83, 0x7b, 0x75, 0x6d, - 0x65, 0x65, 0x67, 0x65, 0x66, 0x6f, 0x72, 0x72, 0x74, 0x7c, 0x81, - 0x83, 0x88, 0x8f, 0x93, 0x93, 0x95, 0x97, 0x99, 0x94, 0x93, 0x92, - 0x8e, 0x89, 0x82, 0x7e, 0x77, 0x70, 0x6c, 0x6b, 0x65, 0x63, 0x66, - 0x67, 0x68, 0x6b, 0x71, 0x77, 0x7c, 0x81, 0x88, 0x8e, 0x92, 0x95, - 0x99, 0x9c, 0x9b, 0x9d, 0x9a, 0x99, 0x94, 0x8e, 0x87, 0x81, 0x78, - 0x71, 0x6b, 0x63, 0x60, 0x5d, 0x5d, 0x5f, 0x62, 0x67, 0x6c, 0x74, - 0x7b, 0x83, 0x8a, 0x91, 0x97, 0x9c, 0x9f, 0xa2, 0xa2, 0xa0, 0x9e, - 0x9a, 0x93, 0x8c, 0x86, 0x7c, 0x73, 0x6d, 0x66, 0x5f, 0x5b, 0x5c, - 0x5c, 0x5e, 0x61, 0x68, 0x6e, 0x75, 0x7e, 0x85, 0x8e, 0x95, 0x99, - 0x9e, 0xa2, 0xa2, 0xa1, 0xa1, 0x9e, 0x98, 0x92, 0x8a, 0x82, 0x78, - 0x70, 0x69, 0x62, 0x5c, 0x5b, 0x5c, 0x5c, 0x5f, 0x64, 0x6b, 0x72, - 0x7a, 0x82, 0x8a, 0x91, 0x96, 0x9b, 0xa0, 0xa2, 0xa2, 0xa1, 0xa0, - 0x9b, 0x95, 0x8f, 0x86, 0x7d, 0x73, 0x6c, 0x64, 0x5e, 0x5b, 0x5c, - 0x5b, 0x5d, 0x62, 0x68, 0x6f, 0x76, 0x7e, 0x86, 0x8e, 0x93, 0x98, - 0x9d, 0xa1, 0xa2, 0xa2, 0xa1, 0x9d, 0x97, 0x91, 0x89, 0x81, 0x77, - 0x6f, 0x68, 0x62, 0x5d, 0x5d, 0x5d, 0x5d, 0x61, 0x66, 0x6c, 0x73, - 0x7b, 0x83, 0x8a, 0x91, 0x96, 0x9b, 0x9f, 0xa1, 0xa1, 0xa1, 0x9e, - 0x99, 0x94, 0x8c, 0x84, 0x7b, 0x73, 0x6c, 0x64, 0x5f, 0x5d, 0x5d, - 0x5d, 0x60, 0x65, 0x6b, 0x71, 0x78, 0x80, 0x88, 0x8e, 0x93, 0x98, - 0x9d, 0x9f, 0xa0, 0xa1, 0x9f, 0x9b, 0x96, 0x90, 0x88, 0x7f, 0x76, - 0x70, 0x69, 0x62, 0x5f, 0x5e, 0x5d, 0x5e, 0x62, 0x67, 0x6d, 0x73, - 0x7b, 0x83, 0x89, 0x8f, 0x95, 0x9a, 0x9d, 0x9f, 0x9f, 0xa0, 0x9d, - 0x98, 0x93, 0x8d, 0x84, 0x7b, 0x74, 0x6e, 0x67, 0x61, 0x60, 0x5f, - 0x5e, 0x61, 0x65, 0x6b, 0x70, 0x77, 0x7f, 0x86, 0x8c, 0x91, 0x97, - 0x9b, 0x9d, 0x9e, 0x9f, 0x9e, 0x9b, 0x95, 0x90, 0x89, 0x80, 0x77, - 0x72, 0x6b, 0x64, 0x61, 0x60, 0x5f, 0x60, 0x64, 0x69, 0x6f, 0x74, - 0x7b, 0x82, 0x89, 0x8f, 0x93, 0x98, 0x9b, 0x9d, 0x9d, 0x9d, 0x9b, - 0x96, 0x91, 0x8b, 0x83, 0x7a, 0x74, 0x6e, 0x67, 0x63, 0x61, 0x61, - 0x60, 0x63, 0x68, 0x6d, 0x72, 0x79, 0x80, 0x86, 0x8c, 0x91, 0x96, - 0x9a, 0x9b, 0x9c, 0x9d, 0x9b, 0x97, 0x93, 0x8d, 0x85, 0x7d, 0x76, - 0x70, 0x6a, 0x65, 0x63, 0x62, 0x62, 0x64, 0x68, 0x6c, 0x71, 0x78, - 0x7e, 0x85, 0x8a, 0x8f, 0x94, 0x98, 0x9a, 0x9b, 0x9c, 0x9b, 0x97, - 0x93, 0x8d, 0x87, 0x7f, 0x77, 0x72, 0x6c, 0x66, 0x64, 0x64, 0x63, - 0x64, 0x68, 0x6d, 0x71, 0x77, 0x7e, 0x84, 0x89, 0x8e, 0x93, 0x96, - 0x99, 0x9a, 0x9b, 0x9a, 0x97, 0x93, 0x8e, 0x88, 0x80, 0x79, 0x73, - 0x6d, 0x68, 0x65, 0x65, 0x63, 0x64, 0x68, 0x6d, 0x71, 0x76, 0x7d, - 0x83, 0x88, 0x8c, 0x92, 0x95, 0x97, 0x99, 0x9a, 0x9a, 0x96, 0x93, - 0x8e, 0x87, 0x80, 0x79, 0x74, 0x6e, 0x69, 0x66, 0x66, 0x64, 0x65, - 0x69, 0x6d, 0x72, 0x77, 0x7d, 0x83, 0x88, 0x8d, 0x92, 0x95, 0x97, - 0x98, 0x99, 0x98, 0x95, 0x92, 0x8c, 0x86, 0x7e, 0x78, 0x73, 0x6d, - 0x69, 0x67, 0x66, 0x65, 0x67, 0x6b, 0x6f, 0x73, 0x79, 0x7f, 0x84, - 0x89, 0x8d, 0x92, 0x95, 0x96, 0x98, 0x98, 0x97, 0x94, 0x90, 0x8b, - 0x85, 0x7e, 0x78, 0x73, 0x6e, 0x69, 0x67, 0x67, 0x66, 0x67, 0x6b, - 0x6f, 0x73, 0x78, 0x7e, 0x84, 0x88, 0x8c, 0x90, 0x94, 0x96, 0x97, - 0x98, 0x97, 0x94, 0x90, 0x8b, 0x86, 0x7f, 0x79, 0x75, 0x70, 0x6b, - 0x68, 0x68, 0x67, 0x68, 0x6c, 0x70, 0x73, 0x78, 0x7d, 0x82, 0x87, - 0x8b, 0x90, 0x92, 0x94, 0x96, 0x96, 0x96, 0x93, 0x90, 0x8b, 0x86, - 0x7f, 0x79, 0x75, 0x70, 0x6c, 0x6a, 0x69, 0x69, 0x6a, 0x6d, 0x71, - 0x74, 0x79, 0x7e, 0x82, 0x87, 0x8b, 0x8f, 0x91, 0x93, 0x95, 0x95, - 0x94, 0x92, 0x8f, 0x8a, 0x85, 0x7e, 0x79, 0x75, 0x70, 0x6d, 0x6a, - 0x6a, 0x69, 0x6a, 0x6e, 0x71, 0x75, 0x79, 0x7f, 0x83, 0x87, 0x8b, - 0x8f, 0x91, 0x93, 0x94, 0x95, 0x94, 0x91, 0x8d, 0x89, 0x84, 0x7d, - 0x79, 0x74, 0x70, 0x6d, 0x6b, 0x6b, 0x6a, 0x6c, 0x6f, 0x73, 0x76, - 0x7b, 0x80, 0x84, 0x88, 0x8b, 0x8f, 0x91, 0x92, 0x93, 0x94, 0x93, - 0x90, 0x8c, 0x88, 0x82, 0x7d, 0x79, 0x74, 0x70, 0x6d, 0x6b, 0x6b, - 0x6b, 0x6d, 0x70, 0x73, 0x77, 0x7b, 0x80, 0x84, 0x88, 0x8c, 0x8f, - 0x90, 0x92, 0x93, 0x93, 0x91, 0x8f, 0x8b, 0x87, 0x81, 0x7c, 0x78, - 0x74, 0x70, 0x6e, 0x6d, 0x6c, 0x6c, 0x6e, 0x71, 0x74, 0x78, 0x7c, - 0x81, 0x85, 0x88, 0x8c, 0x8f, 0x91, 0x91, 0x92, 0x92, 0x90, 0x8d, - 0x89, 0x85, 0x7f, 0x7b, 0x77, 0x73, 0x70, 0x6e, 0x6d, 0x6d, 0x6e, - 0x70, 0x73, 0x76, 0x79, 0x7e, 0x82, 0x85, 0x89, 0x8c, 0x8e, 0x90, - 0x91, 0x91, 0x91, 0x8e, 0x8c, 0x88, 0x83, 0x7e, 0x7b, 0x77, 0x74, - 0x70, 0x6f, 0x6e, 0x6e, 0x6f, 0x72, 0x75, 0x77, 0x7b, 0x7f, 0x83, - 0x86, 0x8a, 0x8c, 0x8e, 0x8f, 0x90, 0x91, 0x8f, 0x8d, 0x89, 0x86, - 0x81, 0x7d, 0x79, 0x76, 0x72, 0x70, 0x6f, 0x6f, 0x70, 0x71, 0x74, - 0x76, 0x79, 0x7d, 0x81, 0x85, 0x88, 0x8a, 0x8d, 0x8e, 0x8f, 0x90, - 0x8f, 0x8e, 0x8a, 0x87, 0x83, 0x7e, 0x7b, 0x77, 0x74, 0x72, 0x70, - 0x70, 0x70, 0x71, 0x73, 0x75, 0x78, 0x7c, 0x7f, 0x83, 0x86, 0x89, - 0x8b, 0x8d, 0x8e, 0x8f, 0x8f, 0x8d, 0x8b, 0x88, 0x84, 0x80, 0x7d, - 0x79, 0x76, 0x73, 0x71, 0x71, 0x70, 0x71, 0x73, 0x75, 0x77, 0x7b, - 0x7e, 0x82, 0x85, 0x88, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x8e, 0x8c, - 0x89, 0x86, 0x82, 0x7e, 0x7b, 0x78, 0x75, 0x72, 0x71, 0x71, 0x71, - 0x72, 0x74, 0x76, 0x78, 0x7c, 0x7f, 0x82, 0x85, 0x88, 0x8b, 0x8c, - 0x8d, 0x8e, 0x8e, 0x8d, 0x8a, 0x87, 0x84, 0x80, 0x7d, 0x7a, 0x77, - 0x74, 0x72, 0x71, 0x71, 0x72, 0x74, 0x76, 0x77, 0x7a, 0x7d, 0x81, - 0x84, 0x87, 0x89, 0x8b, 0x8c, 0x8d, 0x8d, 0x8c, 0x8b, 0x88, 0x85, - 0x82, 0x7f, 0x7c, 0x79, 0x76, 0x74, 0x73, 0x72, 0x72, 0x74, 0x75, - 0x76, 0x79, 0x7c, 0x7f, 0x82, 0x85, 0x87, 0x89, 0x8a, 0x8c, 0x8c, - 0x8c, 0x8b, 0x89, 0x87, 0x84, 0x81, 0x7e, 0x7b, 0x79, 0x76, 0x74, - 0x73, 0x73, 0x74, 0x75, 0x76, 0x78, 0x7a, 0x7d, 0x80, 0x83, 0x86, - 0x87, 0x89, 0x8a, 0x8b, 0x8c, 0x8b, 0x8a, 0x88, 0x85, 0x83, 0x80, - 0x7e, 0x7b, 0x78, 0x76, 0x75, 0x74, 0x74, 0x75, 0x77, 0x78, 0x7a, - 0x7c, 0x7f, 0x81, 0x83, 0x85, 0x87, 0x88, 0x89, 0x89, 0x88, 0x87, - 0x86, 0x84, 0x82, 0x80, 0x7e, 0x7c, 0x7a, 0x78, 0x77, 0x77, 0x77, - 0x78, 0x79, 0x7a, 0x7c, 0x7e, 0x80, 0x82, 0x84, 0x85, 0x86, 0x87, - 0x88, 0x88, 0x88, 0x87, 0x85, 0x84, 0x82, 0x81, 0x7e, 0x7c, 0x7a, - 0x78, 0x77, 0x77, 0x77, 0x77, 0x78, 0x79, 0x7a, 0x7c, 0x7e, 0x80, - 0x82, 0x84, 0x85, 0x86, 0x87, 0x87, 0x87, 0x86, 0x86, 0x85, 0x83, - 0x82, 0x80, 0x7e, 0x7c, 0x7a, 0x79, 0x79, 0x78, 0x78, 0x78, 0x79, - 0x7a, 0x7c, 0x7d, 0x7f, 0x80, 0x82, 0x83, 0x84, 0x85, 0x86, 0x86, - 0x86, 0x85, 0x85, 0x84, 0x83, 0x82, 0x80, 0x7e, 0x7d, 0x7c, 0x7b, - 0x7a, 0x7a, 0x7a, 0x7a, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x80, 0x81, - 0x82, 0x83, 0x84, 0x84, 0x85, 0x85, 0x84, 0x84, 0x83, 0x82, 0x81, - 0x80, 0x7f, 0x7e, 0x7d, 0x7c, 0x7c, 0x7b, 0x7b, 0x7b, 0x7b, 0x7c, - 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x82, 0x83, 0x83, 0x83, - 0x83, 0x83, 0x82, 0x82, 0x81, 0x81, 0x80, 0x7f, 0x7f, 0x7e, 0x7d, - 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7e, 0x7e, 0x7f, 0x7f, 0x80, - 0x80, 0x81, 0x81, 0x82, 0x82, 0x82, 0x82, 0x82, 0x81, 0x81, 0x81, - 0x80, 0x80, 0x7f, 0x7f, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, - 0x7e, 0x7e, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x81, 0x81, - 0x81, 0x81, 0x81, 0x81, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, - 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x7f, - 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x7f, 0x80, - 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, - 0x7f, 0x80, - }, - { // 4 - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, - 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, - 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, - 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, - 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, - 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, - 0x80, 0x7f, 0x7f, 0x7f, 0x7e, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, - 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x80, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7e, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x80, - 0x7f, 0x81, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7e, 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7e, 0x7e, 0x7e, 0x7f, 0x7f, 0x7f, 0x7e, 0x7f, 0x7e, 0x7e, - 0x7f, 0x7f, 0x80, 0x7f, 0x7e, 0x7f, 0x7f, 0x7f, 0x81, 0x80, 0x80, - 0x7f, 0x80, 0x80, 0x80, 0x80, 0x81, 0x80, 0x80, 0x7f, 0x81, 0x80, - 0x80, 0x81, 0x80, 0x80, 0x80, 0x80, 0x81, 0x81, 0x81, 0x82, 0x81, - 0x81, 0x81, 0x81, 0x80, 0x81, 0x81, 0x82, 0x81, 0x82, 0x82, 0x81, - 0x80, 0x81, 0x82, 0x82, 0x81, 0x82, 0x81, 0x81, 0x80, 0x80, 0x82, - 0x82, 0x80, 0x81, 0x80, 0x81, 0x81, 0x81, 0x82, 0x81, 0x80, 0x80, - 0x80, 0x81, 0x81, 0x81, 0x81, 0x81, 0x80, 0x7f, 0x80, 0x81, 0x80, - 0x80, 0x81, 0x82, 0x83, 0x82, 0x81, 0x82, 0x81, 0x80, 0x80, 0x7f, - 0x7f, 0x7f, 0x7e, 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7e, 0x7e, - 0x7e, 0x7f, 0x7f, 0x7d, 0x7d, 0x7e, 0x7d, 0x7e, 0x7e, 0x7e, 0x7f, - 0x7e, 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x81, - 0x81, 0x80, 0x80, 0x7f, 0x7e, 0x7e, 0x7f, 0x7d, 0x7e, 0x7f, 0x80, - 0x80, 0x80, 0x81, 0x81, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x80, - 0x7f, 0x7f, 0x7e, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x7e, 0x7d, 0x7f, - 0x7e, 0x7e, 0x7d, 0x7c, 0x7c, 0x7c, 0x7c, 0x7e, 0x7f, 0x7d, 0x7e, - 0x7e, 0x7d, 0x7d, 0x7d, 0x7e, 0x7f, 0x7d, 0x7d, 0x7d, 0x7d, 0x7c, - 0x7d, 0x7c, 0x7c, 0x7d, 0x7d, 0x7d, 0x7e, 0x7e, 0x7f, 0x7f, 0x7e, - 0x7f, 0x7d, 0x7d, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7e, 0x7c, 0x7e, - 0x80, 0x80, 0x7e, 0x7d, 0x7e, 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x80, - 0x7f, 0x7d, 0x81, 0x80, 0x7f, 0x7f, 0x7f, 0x80, 0x7e, 0x7e, 0x7e, - 0x7f, 0x7f, 0x80, 0x80, 0x7d, 0x7d, 0x80, 0x7f, 0x7f, 0x7d, 0x7e, - 0x7e, 0x7d, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x7d, 0x7e, 0x7f, 0x81, - 0x7f, 0x7d, 0x7e, 0x7e, 0x7e, 0x7f, 0x7f, 0x7f, 0x80, 0x7e, 0x7e, - 0x7e, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7d, 0x7d, 0x7f, 0x7f, 0x7e, - 0x80, 0x81, 0x7f, 0x81, 0x7e, 0x80, 0x7f, 0x81, 0x81, 0x7f, 0x7f, - 0x7e, 0x81, 0x7f, 0x81, 0x81, 0x80, 0x80, 0x81, 0x84, 0x80, 0x7f, - 0x80, 0x7e, 0x7e, 0x80, 0x82, 0x80, 0x7f, 0x81, 0x81, 0x7f, 0x7e, - 0x80, 0x7f, 0x81, 0x81, 0x7e, 0x7f, 0x80, 0x81, 0x81, 0x80, 0x7e, - 0x81, 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x7e, 0x80, 0x7e, 0x7f, 0x7f, - 0x80, 0x7e, 0x7d, 0x80, 0x7f, 0x80, 0x81, 0x80, 0x80, 0x7e, 0x7f, - 0x7e, 0x81, 0x80, 0x7d, 0x7f, 0x80, 0x80, 0x7c, 0x7d, 0x7b, 0x7b, - 0x7d, 0x7c, 0x7f, 0x7f, 0x7e, 0x7e, 0x7e, 0x7d, 0x7f, 0x81, 0x7f, - 0x7e, 0x7c, 0x7e, 0x7d, 0x7d, 0x80, 0x81, 0x7e, 0x7f, 0x80, 0x80, - 0x83, 0x85, 0x81, 0x83, 0x84, 0x83, 0x7f, 0x80, 0x80, 0x81, 0x84, - 0x7f, 0x7f, 0x7f, 0x82, 0x7f, 0x7f, 0x7f, 0x7c, 0x81, 0x80, 0x7e, - 0x7d, 0x7f, 0x7f, 0x81, 0x82, 0x81, 0x80, 0x7e, 0x7c, 0x7d, 0x80, - 0x81, 0x80, 0x7f, 0x82, 0x7e, 0x80, 0x80, 0x80, 0x81, 0x82, 0x7f, - 0x7d, 0x7e, 0x7e, 0x80, 0x80, 0x7b, 0x7b, 0x7f, 0x81, 0x82, 0x7f, - 0x7e, 0x7e, 0x80, 0x80, 0x80, 0x80, 0x82, 0x7e, 0x7a, 0x80, 0x82, - 0x81, 0x81, 0x83, 0x83, 0x80, 0x7f, 0x7f, 0x7f, 0x81, 0x83, 0x85, - 0x86, 0x81, 0x7b, 0x7c, 0x7e, 0x80, 0x82, 0x83, 0x80, 0x81, 0x80, - 0x7f, 0x83, 0x81, 0x7e, 0x7d, 0x7d, 0x7d, 0x7d, 0x7a, 0x7d, 0x80, - 0x7e, 0x7c, 0x7e, 0x82, 0x7e, 0x7c, 0x80, 0x7f, 0x7c, 0x7d, 0x7e, - 0x7e, 0x7c, 0x7a, 0x7d, 0x80, 0x7e, 0x7f, 0x80, 0x7f, 0x7f, 0x82, - 0x83, 0x82, 0x7f, 0x80, 0x81, 0x83, 0x80, 0x81, 0x82, 0x81, 0x81, - 0x7f, 0x80, 0x7c, 0x81, 0x81, 0x80, 0x81, 0x81, 0x7f, 0x7f, 0x82, - 0x7f, 0x82, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x81, 0x80, 0x7d, - 0x7f, 0x7e, 0x7c, 0x7c, 0x7d, 0x80, 0x7e, 0x7d, 0x7e, 0x7e, 0x7e, - 0x7d, 0x81, 0x82, 0x7d, 0x79, 0x7c, 0x7f, 0x7b, 0x7d, 0x7d, 0x7f, - 0x7d, 0x7e, 0x7e, 0x7d, 0x7f, 0x7f, 0x81, 0x80, 0x7e, 0x7d, 0x82, - 0x82, 0x7e, 0x7e, 0x83, 0x7e, 0x7d, 0x81, 0x7f, 0x7e, 0x7e, 0x80, - 0x7d, 0x7d, 0x7d, 0x7e, 0x7e, 0x80, 0x81, 0x81, 0x82, 0x7b, 0x79, - 0x81, 0x81, 0x80, 0x7f, 0x82, 0x7f, 0x7c, 0x7e, 0x81, 0x7e, 0x7e, - 0x80, 0x7f, 0x7e, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7e, - 0x7d, 0x7d, 0x7f, 0x80, 0x82, 0x82, 0x7c, 0x77, 0x7d, 0x7f, 0x7d, - 0x7f, 0x7e, 0x7d, 0x7e, 0x7f, 0x7f, 0x7d, 0x7c, 0x80, 0x7f, 0x7c, - 0x7b, 0x7c, 0x7e, 0x7d, 0x7d, 0x81, 0x80, 0x7d, 0x7d, 0x7f, 0x81, - 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x82, 0x81, 0x7e, 0x81, 0x83, 0x80, - 0x80, 0x7e, 0x81, 0x80, 0x7f, 0x80, 0x7f, 0x7b, 0x7c, 0x81, 0x82, - 0x7f, 0x7e, 0x7e, 0x7f, 0x7c, 0x7c, 0x7e, 0x7e, 0x81, 0x7d, 0x7e, - 0x7e, 0x81, 0x82, 0x7f, 0x7c, 0x80, 0x82, 0x80, 0x7f, 0x80, 0x80, - 0x83, 0x83, 0x81, 0x7f, 0x7e, 0x83, 0x82, 0x7f, 0x7f, 0x80, 0x7f, - 0x80, 0x83, 0x84, 0x82, 0x82, 0x81, 0x81, 0x80, 0x81, 0x81, 0x7f, - 0x7d, 0x7d, 0x82, 0x82, 0x7c, 0x7e, 0x7e, 0x7c, 0x7e, 0x7f, 0x7d, - 0x7c, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7e, 0x7b, 0x7d, 0x7f, 0x7e, - 0x80, 0x80, 0x80, 0x7d, 0x7d, 0x81, 0x80, 0x7f, 0x80, 0x82, 0x82, - 0x7f, 0x80, 0x83, 0x83, 0x80, 0x81, 0x82, 0x7e, 0x7f, 0x7e, 0x7d, - 0x7d, 0x7c, 0x7e, 0x7f, 0x7c, 0x7e, 0x80, 0x81, 0x81, 0x83, 0x84, - 0x83, 0x83, 0x82, 0x82, 0x80, 0x81, 0x82, 0x82, 0x80, 0x7b, 0x79, - 0x7a, 0x7b, 0x7d, 0x7e, 0x7e, 0x7c, 0x7b, 0x7f, 0x82, 0x7f, 0x7f, - 0x84, 0x87, 0x86, 0x87, 0x84, 0x84, 0x84, 0x80, 0x7d, 0x7a, 0x77, - 0x75, 0x74, 0x6f, 0x6c, 0x6e, 0x74, 0x76, 0x7c, 0x85, 0x8b, 0x8f, - 0x97, 0x9d, 0xa1, 0xa3, 0xa0, 0x9a, 0x8d, 0x80, 0x75, 0x6c, 0x68, - 0x61, 0x56, 0x53, 0x5c, 0x63, 0x68, 0x6f, 0x7b, 0x88, 0x91, 0x96, - 0xa3, 0xb3, 0xb6, 0xb5, 0xb1, 0xa9, 0x96, 0x7e, 0x6c, 0x5f, 0x58, - 0x54, 0x51, 0x51, 0x50, 0x54, 0x5f, 0x6a, 0x74, 0x7e, 0x89, 0x92, - 0x99, 0x9d, 0xa3, 0xaa, 0xa9, 0xa6, 0xa1, 0x9b, 0x98, 0x93, 0x90, - 0x8c, 0x88, 0x82, 0x78, 0x6c, 0x5f, 0x58, 0x52, 0x4c, 0x4e, 0x52, - 0x57, 0x5d, 0x67, 0x75, 0x81, 0x8b, 0x94, 0x9b, 0xa3, 0xa7, 0xaa, - 0xad, 0xac, 0xa6, 0xa3, 0x9d, 0x98, 0x93, 0x8c, 0x87, 0x7f, 0x75, - 0x6a, 0x5e, 0x53, 0x4b, 0x45, 0x4b, 0x50, 0x59, 0x5d, 0x69, 0x77, - 0x82, 0x8f, 0x96, 0xa0, 0xa5, 0xa9, 0xac, 0xac, 0xab, 0xa6, 0xa0, - 0x9b, 0x95, 0x90, 0x89, 0x81, 0x78, 0x6c, 0x61, 0x55, 0x4f, 0x45, - 0x41, 0x47, 0x50, 0x5e, 0x63, 0x71, 0x7e, 0x8d, 0x95, 0x9e, 0xa8, - 0xad, 0xaf, 0xad, 0xaf, 0xab, 0xa5, 0x9e, 0x9a, 0x92, 0x89, 0x7f, - 0x77, 0x69, 0x60, 0x56, 0x4e, 0x44, 0x3a, 0x45, 0x4d, 0x5d, 0x60, - 0x71, 0x82, 0x8f, 0x98, 0x9e, 0xa9, 0xad, 0xae, 0xaf, 0xaf, 0xab, - 0xa6, 0x9f, 0x9b, 0x91, 0x88, 0x7c, 0x76, 0x66, 0x5d, 0x53, 0x4d, - 0x41, 0x39, 0x42, 0x4e, 0x5e, 0x61, 0x73, 0x85, 0x95, 0x9a, 0xa0, - 0xad, 0xb2, 0xb2, 0xaf, 0xb1, 0xad, 0xa4, 0x9e, 0x96, 0x8c, 0x7f, - 0x78, 0x6d, 0x5f, 0x53, 0x4c, 0x45, 0x38, 0x3c, 0x4a, 0x5f, 0x61, - 0x6c, 0x80, 0x93, 0x9b, 0x9d, 0xab, 0xb3, 0xb4, 0xb0, 0xb1, 0xb0, - 0xa7, 0x9e, 0x97, 0x8b, 0x7f, 0x77, 0x6e, 0x62, 0x55, 0x50, 0x4b, - 0x3b, 0x3a, 0x49, 0x5c, 0x63, 0x69, 0x80, 0x92, 0x9b, 0x9c, 0xa8, - 0xb3, 0xb7, 0xb2, 0xb1, 0xaf, 0xa8, 0xa1, 0x93, 0x87, 0x7d, 0x75, - 0x6b, 0x5f, 0x55, 0x52, 0x47, 0x38, 0x3c, 0x50, 0x60, 0x63, 0x6c, - 0x83, 0x96, 0x9a, 0x9d, 0xa9, 0xb4, 0xb6, 0xb1, 0xae, 0xad, 0xa8, - 0x9d, 0x8d, 0x81, 0x7c, 0x73, 0x64, 0x59, 0x56, 0x53, 0x44, 0x36, - 0x43, 0x5a, 0x63, 0x64, 0x73, 0x8e, 0x9c, 0x9b, 0x9e, 0xb0, 0xb9, - 0xb4, 0xad, 0xad, 0xae, 0xa2, 0x92, 0x85, 0x7e, 0x75, 0x67, 0x5d, - 0x5c, 0x59, 0x4b, 0x39, 0x3c, 0x55, 0x5f, 0x61, 0x6b, 0x86, 0x97, - 0x96, 0x9a, 0xab, 0xb9, 0xb5, 0xac, 0xaf, 0xaf, 0xa5, 0x96, 0x8c, - 0x88, 0x7b, 0x6c, 0x64, 0x62, 0x5e, 0x53, 0x47, 0x3c, 0x48, 0x57, - 0x5e, 0x65, 0x74, 0x8a, 0x93, 0x97, 0x9e, 0xae, 0xb6, 0xb2, 0xb0, - 0xb0, 0xac, 0x9d, 0x94, 0x8b, 0x82, 0x75, 0x6b, 0x68, 0x65, 0x5c, - 0x55, 0x4c, 0x3f, 0x4a, 0x58, 0x62, 0x65, 0x72, 0x86, 0x91, 0x95, - 0x9b, 0xac, 0xb2, 0xb0, 0xad, 0xaf, 0xa9, 0x9b, 0x92, 0x8b, 0x80, - 0x73, 0x6e, 0x6b, 0x68, 0x5e, 0x59, 0x4f, 0x43, 0x4d, 0x5b, 0x62, - 0x64, 0x72, 0x85, 0x90, 0x92, 0x9c, 0xad, 0xb3, 0xb1, 0xad, 0xb0, - 0xaa, 0x9e, 0x93, 0x8c, 0x83, 0x74, 0x72, 0x6e, 0x6b, 0x64, 0x5f, - 0x54, 0x42, 0x48, 0x58, 0x5f, 0x5d, 0x68, 0x7f, 0x8b, 0x8e, 0x97, - 0xa9, 0xb4, 0xb1, 0xae, 0xaf, 0xae, 0xa2, 0x98, 0x90, 0x86, 0x7c, - 0x74, 0x74, 0x6f, 0x6c, 0x6a, 0x63, 0x4f, 0x3d, 0x4a, 0x59, 0x58, - 0x56, 0x68, 0x80, 0x86, 0x8b, 0x97, 0xb1, 0xb7, 0xb2, 0xb2, 0xb2, - 0xae, 0xa1, 0x98, 0x8d, 0x83, 0x7c, 0x78, 0x74, 0x6f, 0x70, 0x6f, - 0x62, 0x4d, 0x42, 0x50, 0x56, 0x51, 0x53, 0x66, 0x7e, 0x82, 0x88, - 0x9d, 0xb3, 0xb9, 0xb6, 0xb7, 0xb8, 0xb2, 0xa4, 0x98, 0x8f, 0x86, - 0x7f, 0x77, 0x72, 0x73, 0x75, 0x72, 0x6a, 0x5e, 0x54, 0x47, 0x49, - 0x50, 0x53, 0x59, 0x62, 0x77, 0x82, 0x8f, 0x9c, 0xaf, 0xba, 0xba, - 0xb8, 0xb6, 0xb0, 0xa4, 0x97, 0x8c, 0x83, 0x7e, 0x79, 0x73, 0x76, - 0x77, 0x75, 0x70, 0x6a, 0x5d, 0x4f, 0x46, 0x50, 0x56, 0x58, 0x59, - 0x6b, 0x83, 0x8a, 0x95, 0xa6, 0xbb, 0xbd, 0xb8, 0xb4, 0xb4, 0xac, - 0x98, 0x8b, 0x86, 0x83, 0x77, 0x71, 0x76, 0x7b, 0x75, 0x71, 0x70, - 0x71, 0x64, 0x51, 0x4a, 0x52, 0x58, 0x57, 0x5c, 0x6d, 0x84, 0x8a, - 0x95, 0xa3, 0xb8, 0xba, 0xb3, 0xb5, 0xb4, 0xa8, 0x92, 0x8b, 0x87, - 0x81, 0x75, 0x75, 0x79, 0x7a, 0x77, 0x77, 0x7b, 0x78, 0x6c, 0x60, - 0x57, 0x50, 0x4e, 0x57, 0x5a, 0x63, 0x6a, 0x7c, 0x8c, 0x99, 0xa9, - 0xb4, 0xbd, 0xba, 0xb8, 0xb1, 0xaa, 0x99, 0x8d, 0x83, 0x81, 0x7e, - 0x77, 0x76, 0x79, 0x81, 0x7e, 0x7e, 0x7e, 0x7d, 0x72, 0x61, 0x54, - 0x4b, 0x4b, 0x50, 0x50, 0x5a, 0x66, 0x79, 0x89, 0x96, 0xa7, 0xb4, - 0xbd, 0xbc, 0xb9, 0xb2, 0xa8, 0x9c, 0x92, 0x86, 0x81, 0x7d, 0x7d, - 0x7a, 0x7d, 0x83, 0x84, 0x84, 0x81, 0x82, 0x7c, 0x6f, 0x62, 0x54, - 0x4b, 0x40, 0x40, 0x4d, 0x56, 0x62, 0x6f, 0x86, 0x97, 0xa5, 0xb0, - 0xbb, 0xc1, 0xbd, 0xb6, 0xac, 0xa3, 0x96, 0x89, 0x81, 0x7c, 0x7e, - 0x7d, 0x7f, 0x82, 0x89, 0x8a, 0x87, 0x86, 0x82, 0x7c, 0x6b, 0x60, - 0x51, 0x4a, 0x3b, 0x37, 0x3a, 0x4e, 0x5a, 0x65, 0x78, 0x8e, 0xa7, - 0xac, 0xb8, 0xc0, 0xc9, 0xc0, 0xb3, 0xab, 0xa3, 0x97, 0x87, 0x81, - 0x7e, 0x7c, 0x77, 0x7b, 0x86, 0x8b, 0x8a, 0x88, 0x8a, 0x86, 0x7a, - 0x70, 0x6a, 0x64, 0x57, 0x4c, 0x48, 0x47, 0x42, 0x40, 0x49, 0x63, - 0x71, 0x80, 0x8c, 0xa4, 0xb6, 0xb8, 0xc1, 0xc6, 0xcf, 0xbf, 0xb1, - 0xa8, 0xa0, 0x90, 0x79, 0x71, 0x6a, 0x63, 0x59, 0x5b, 0x64, 0x69, - 0x6d, 0x74, 0x83, 0x8b, 0x8e, 0x8f, 0x93, 0x96, 0x91, 0x8e, 0x89, - 0x88, 0x80, 0x79, 0x76, 0x72, 0x6d, 0x66, 0x67, 0x64, 0x5f, 0x57, - 0x58, 0x54, 0x50, 0x4f, 0x5f, 0x72, 0x77, 0x80, 0x8f, 0xa6, 0xaa, - 0xaf, 0xb9, 0xc3, 0xc0, 0xb2, 0xac, 0xa7, 0x9c, 0x86, 0x7a, 0x75, - 0x6f, 0x65, 0x5f, 0x65, 0x6a, 0x6d, 0x6e, 0x79, 0x82, 0x85, 0x87, - 0x8a, 0x90, 0x8c, 0x86, 0x80, 0x7f, 0x7a, 0x73, 0x72, 0x75, 0x77, - 0x71, 0x73, 0x78, 0x7e, 0x7a, 0x79, 0x7d, 0x7c, 0x74, 0x69, 0x68, - 0x61, 0x56, 0x4f, 0x58, 0x68, 0x6e, 0x70, 0x7e, 0x94, 0xa1, 0xa5, - 0xae, 0xbd, 0xc2, 0xba, 0xb2, 0xae, 0xa6, 0x94, 0x84, 0x7c, 0x74, - 0x69, 0x5e, 0x60, 0x65, 0x68, 0x6a, 0x72, 0x7d, 0x81, 0x82, 0x86, - 0x8c, 0x8e, 0x87, 0x84, 0x83, 0x7f, 0x76, 0x6e, 0x6d, 0x6e, 0x6d, - 0x68, 0x6c, 0x74, 0x7f, 0x81, 0x84, 0x8c, 0x94, 0x95, 0x8e, 0x90, - 0x8f, 0x89, 0x79, 0x71, 0x6b, 0x63, 0x58, 0x4f, 0x4f, 0x4c, 0x52, - 0x5a, 0x6d, 0x7b, 0x89, 0x99, 0xa7, 0xb7, 0xba, 0xc0, 0xbf, 0xbe, - 0xb5, 0xa6, 0x9b, 0x8c, 0x7f, 0x6e, 0x66, 0x61, 0x5e, 0x5d, 0x5f, - 0x69, 0x6f, 0x78, 0x7e, 0x88, 0x8e, 0x8f, 0x8f, 0x8d, 0x8c, 0x84, - 0x7f, 0x78, 0x73, 0x6e, 0x67, 0x67, 0x67, 0x6b, 0x6c, 0x71, 0x79, - 0x7f, 0x84, 0x88, 0x8d, 0x90, 0x91, 0x8e, 0x8d, 0x89, 0x89, 0x86, - 0x81, 0x7f, 0x7b, 0x7d, 0x79, 0x7a, 0x79, 0x7a, 0x79, 0x76, 0x74, - 0x71, 0x71, 0x6c, 0x68, 0x62, 0x68, 0x71, 0x77, 0x7e, 0x85, 0x95, - 0x9d, 0xa1, 0xa6, 0xac, 0xb0, 0xa8, 0xa1, 0x99, 0x94, 0x88, 0x7c, - 0x73, 0x6e, 0x6b, 0x65, 0x66, 0x6a, 0x70, 0x73, 0x77, 0x80, 0x86, - 0x88, 0x87, 0x89, 0x89, 0x84, 0x7f, 0x7b, 0x79, 0x72, 0x6e, 0x6c, - 0x6e, 0x6f, 0x6f, 0x72, 0x77, 0x7d, 0x7f, 0x83, 0x88, 0x8b, 0x8b, - 0x8a, 0x8b, 0x8a, 0x86, 0x81, 0x7f, 0x7c, 0x7a, 0x77, 0x76, 0x78, - 0x78, 0x7b, 0x7c, 0x80, 0x83, 0x85, 0x87, 0x8a, 0x8c, 0x8b, 0x89, - 0x88, 0x87, 0x84, 0x81, 0x7e, 0x7e, 0x7c, 0x7b, 0x7b, 0x7c, 0x7c, - 0x7d, 0x7d, 0x80, 0x81, 0x82, 0x82, 0x82, 0x84, 0x82, 0x81, 0x7f, - 0x7f, 0x7e, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7d, 0x7d, 0x7f, 0x80, - 0x89, 0x8f, 0x8d, 0x88, 0x85, 0x85, 0x7b, 0x73, 0x6d, 0x6d, 0x65, - 0x5d, 0x5c, 0x66, 0x6f, 0x71, 0x7b, 0x86, 0x96, 0x99, 0x9d, 0xa2, - 0xa6, 0xa4, 0x98, 0x93, 0x8e, 0x86, 0x78, 0x70, 0x6f, 0x6e, 0x6c, - 0x6a, 0x71, 0x79, 0x7d, 0x80, 0x86, 0x8e, 0x8e, 0x8c, 0x8a, 0x8a, - 0x86, 0x7e, 0x79, 0x76, 0x74, 0x6f, 0x6d, 0x6f, 0x73, 0x75, 0x76, - 0x7c, 0x82, 0x86, 0x87, 0x89, 0x8c, 0x8c, 0x89, 0x86, 0x85, 0x82, - 0x7e, 0x79, 0x78, 0x78, 0x77, 0x76, 0x77, 0x7b, 0x7e, 0x7f, 0x82, - 0x85, 0x88, 0x87, 0x87, 0x87, 0x87, 0x84, 0x81, 0x7f, 0x7e, 0x7d, - 0x7a, 0x7a, 0x7b, 0x7c, 0x7c, 0x7d, 0x80, 0x82, 0x83, 0x83, 0x84, - 0x84, 0x83, 0x82, 0x80, 0x80, 0x7e, 0x7d, 0x7c, 0x7c, 0x7c, 0x7b, - 0x7c, 0x7d, 0x7f, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x82, 0x82, 0x82, - 0x81, 0x80, 0x7e, 0x7e, 0x7e, 0x7d, 0x7c, 0x7d, 0x7d, 0x7e, 0x7e, - 0x7f, 0x80, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x80, 0x80, 0x80, - 0x7f, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7f, 0x7f, 0x80, 0x80, 0x80, - 0x81, 0x81, 0x81, 0x81, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, - 0x7e, 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, - }, - { // 5 - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7e, 0x7e, - 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, - 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7e, 0x7e, 0x7e, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7c, - 0x7c, 0x7c, 0x7d, 0x7d, 0x7d, 0x7d, 0x7e, 0x7e, 0x7f, 0x7f, 0x80, - 0x80, 0x80, 0x81, 0x81, 0x81, 0x82, 0x82, 0x83, 0x83, 0x83, 0x83, - 0x83, 0x83, 0x83, 0x83, 0x82, 0x81, 0x80, 0x7f, 0x7e, 0x7c, 0x7b, - 0x7a, 0x78, 0x78, 0x77, 0x77, 0x77, 0x77, 0x77, 0x78, 0x78, 0x79, - 0x7b, 0x7c, 0x7d, 0x7f, 0x80, 0x81, 0x83, 0x83, 0x84, 0x85, 0x85, - 0x86, 0x86, 0x87, 0x88, 0x88, 0x89, 0x8a, 0x8a, 0x8a, 0x8a, 0x89, - 0x87, 0x84, 0x81, 0x7d, 0x79, 0x75, 0x71, 0x6f, 0x6f, 0x6f, 0x6f, - 0x6f, 0x70, 0x70, 0x71, 0x73, 0x75, 0x77, 0x79, 0x7b, 0x7d, 0x7f, - 0x81, 0x83, 0x84, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8c, 0x8d, 0x8f, - 0x90, 0x90, 0x91, 0x90, 0x8f, 0x8e, 0x8c, 0x89, 0x86, 0x83, 0x7f, - 0x7c, 0x78, 0x75, 0x72, 0x6f, 0x6e, 0x6d, 0x6e, 0x6e, 0x6f, 0x6f, - 0x6f, 0x6f, 0x6f, 0x6f, 0x70, 0x72, 0x74, 0x76, 0x79, 0x7b, 0x7e, - 0x81, 0x83, 0x86, 0x88, 0x8a, 0x8d, 0x8f, 0x91, 0x93, 0x94, 0x95, - 0x95, 0x94, 0x93, 0x91, 0x8f, 0x8c, 0x88, 0x85, 0x81, 0x7e, 0x7b, - 0x78, 0x75, 0x73, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x71, - 0x70, 0x6f, 0x6f, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x75, 0x77, 0x7a, - 0x7c, 0x7f, 0x82, 0x84, 0x87, 0x8a, 0x8d, 0x90, 0x92, 0x95, 0x96, - 0x97, 0x97, 0x97, 0x95, 0x93, 0x90, 0x8c, 0x89, 0x85, 0x80, 0x7d, - 0x79, 0x76, 0x74, 0x73, 0x72, 0x73, 0x73, 0x73, 0x72, 0x71, 0x70, - 0x6f, 0x6e, 0x6e, 0x6e, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x74, 0x76, - 0x79, 0x7c, 0x7e, 0x81, 0x85, 0x88, 0x8b, 0x8f, 0x92, 0x95, 0x98, - 0x99, 0x9a, 0x9a, 0x99, 0x97, 0x94, 0x90, 0x8c, 0x87, 0x83, 0x7e, - 0x7a, 0x77, 0x75, 0x74, 0x73, 0x74, 0x74, 0x74, 0x73, 0x71, 0x70, - 0x6f, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6f, 0x70, 0x71, 0x73, - 0x75, 0x78, 0x7a, 0x7d, 0x80, 0x84, 0x87, 0x8b, 0x8e, 0x92, 0x96, - 0x99, 0x9b, 0x9c, 0x9d, 0x9c, 0x9a, 0x97, 0x93, 0x8e, 0x89, 0x84, - 0x7f, 0x7a, 0x77, 0x75, 0x75, 0x75, 0x75, 0x75, 0x74, 0x72, 0x70, - 0x6f, 0x6e, 0x6e, 0x6e, 0x6e, 0x6d, 0x6d, 0x6d, 0x6d, 0x6e, 0x70, - 0x71, 0x73, 0x75, 0x78, 0x7b, 0x7e, 0x81, 0x84, 0x88, 0x8c, 0x90, - 0x94, 0x98, 0x9b, 0x9d, 0x9f, 0x9f, 0x9d, 0x9b, 0x97, 0x93, 0x8d, - 0x87, 0x81, 0x7c, 0x78, 0x76, 0x76, 0x76, 0x76, 0x75, 0x74, 0x72, - 0x70, 0x6f, 0x6f, 0x6f, 0x6e, 0x6e, 0x6d, 0x6c, 0x6c, 0x6c, 0x6c, - 0x6d, 0x6e, 0x70, 0x73, 0x75, 0x78, 0x7b, 0x7e, 0x81, 0x84, 0x88, - 0x8c, 0x90, 0x95, 0x99, 0x9c, 0x9f, 0xa0, 0xa1, 0x9f, 0x9d, 0x98, - 0x93, 0x8c, 0x86, 0x80, 0x7b, 0x78, 0x78, 0x77, 0x77, 0x76, 0x74, - 0x73, 0x71, 0x70, 0x70, 0x70, 0x6f, 0x6e, 0x6d, 0x6c, 0x6b, 0x6b, - 0x6b, 0x6b, 0x6c, 0x6d, 0x6f, 0x71, 0x74, 0x77, 0x7a, 0x7d, 0x80, - 0x84, 0x87, 0x8b, 0x8f, 0x94, 0x98, 0x9d, 0xa0, 0xa2, 0xa4, 0xa3, - 0xa0, 0x9c, 0x96, 0x8f, 0x88, 0x81, 0x7d, 0x7a, 0x79, 0x78, 0x78, - 0x76, 0x74, 0x72, 0x71, 0x70, 0x70, 0x6f, 0x6e, 0x6d, 0x6c, 0x6b, - 0x6a, 0x69, 0x69, 0x69, 0x69, 0x6b, 0x6d, 0x6f, 0x72, 0x76, 0x79, - 0x7c, 0x7f, 0x82, 0x85, 0x89, 0x8d, 0x92, 0x97, 0x9c, 0xa1, 0xa5, - 0xa7, 0xa7, 0xa5, 0xa0, 0x9a, 0x93, 0x8c, 0x84, 0x7f, 0x7b, 0x7a, - 0x7a, 0x78, 0x76, 0x73, 0x71, 0x70, 0x70, 0x70, 0x70, 0x6f, 0x6e, - 0x6c, 0x6b, 0x69, 0x68, 0x67, 0x67, 0x67, 0x68, 0x6a, 0x6d, 0x70, - 0x74, 0x78, 0x7a, 0x7e, 0x80, 0x83, 0x87, 0x8c, 0x90, 0x96, 0x9d, - 0xa3, 0xa7, 0xaa, 0xaa, 0xa8, 0xa3, 0x9d, 0x95, 0x8d, 0x85, 0x7e, - 0x7b, 0x7a, 0x79, 0x78, 0x76, 0x73, 0x71, 0x70, 0x71, 0x71, 0x71, - 0x71, 0x70, 0x6e, 0x6c, 0x6a, 0x67, 0x66, 0x66, 0x66, 0x67, 0x69, - 0x6b, 0x6f, 0x72, 0x75, 0x78, 0x7b, 0x7e, 0x81, 0x84, 0x89, 0x8f, - 0x95, 0x9c, 0xa3, 0xa9, 0xac, 0xad, 0xac, 0xa7, 0xa0, 0x98, 0x8f, - 0x86, 0x7f, 0x7b, 0x79, 0x78, 0x77, 0x75, 0x72, 0x70, 0x70, 0x70, - 0x72, 0x73, 0x74, 0x73, 0x71, 0x6e, 0x6a, 0x67, 0x65, 0x64, 0x65, - 0x66, 0x68, 0x6b, 0x6e, 0x71, 0x75, 0x78, 0x7a, 0x7d, 0x7f, 0x82, - 0x86, 0x8c, 0x93, 0x9b, 0xa2, 0xa9, 0xad, 0xaf, 0xae, 0xa9, 0xa2, - 0x9a, 0x91, 0x88, 0x80, 0x7b, 0x78, 0x77, 0x76, 0x74, 0x72, 0x70, - 0x6f, 0x71, 0x73, 0x76, 0x78, 0x77, 0x75, 0x70, 0x6c, 0x68, 0x65, - 0x64, 0x64, 0x64, 0x66, 0x68, 0x6b, 0x6e, 0x72, 0x75, 0x78, 0x7a, - 0x7d, 0x80, 0x85, 0x8a, 0x92, 0x9a, 0xa3, 0xaa, 0xaf, 0xb1, 0xb0, - 0xac, 0xa5, 0x9c, 0x92, 0x89, 0x81, 0x7b, 0x77, 0x75, 0x74, 0x73, - 0x71, 0x70, 0x6f, 0x71, 0x74, 0x78, 0x7a, 0x7b, 0x78, 0x73, 0x6d, - 0x68, 0x65, 0x64, 0x63, 0x64, 0x65, 0x68, 0x6b, 0x6e, 0x71, 0x73, - 0x76, 0x79, 0x7b, 0x7f, 0x83, 0x89, 0x90, 0x99, 0xa2, 0xaa, 0xb0, - 0xb3, 0xb2, 0xae, 0xa7, 0x9f, 0x95, 0x8c, 0x83, 0x7b, 0x76, 0x72, - 0x70, 0x6f, 0x6e, 0x6e, 0x6f, 0x72, 0x76, 0x7a, 0x7d, 0x7f, 0x7d, - 0x78, 0x71, 0x6b, 0x66, 0x64, 0x63, 0x63, 0x64, 0x66, 0x69, 0x6c, - 0x6f, 0x72, 0x75, 0x78, 0x7b, 0x7e, 0x82, 0x87, 0x8e, 0x97, 0xa0, - 0xa8, 0xae, 0xb2, 0xb2, 0xaf, 0xa9, 0xa2, 0x98, 0x8f, 0x85, 0x7d, - 0x76, 0x71, 0x6e, 0x6c, 0x6b, 0x6b, 0x6e, 0x71, 0x76, 0x7b, 0x80, - 0x82, 0x81, 0x7d, 0x76, 0x6d, 0x67, 0x63, 0x62, 0x63, 0x64, 0x65, - 0x67, 0x69, 0x6d, 0x70, 0x74, 0x78, 0x7c, 0x7f, 0x83, 0x88, 0x8e, - 0x95, 0x9d, 0xa5, 0xac, 0xb0, 0xb1, 0xb0, 0xab, 0xa3, 0x9a, 0x91, - 0x87, 0x7e, 0x76, 0x71, 0x6c, 0x6a, 0x69, 0x6a, 0x6d, 0x71, 0x77, - 0x7c, 0x81, 0x84, 0x84, 0x80, 0x79, 0x70, 0x68, 0x63, 0x61, 0x62, - 0x64, 0x66, 0x68, 0x6a, 0x6d, 0x70, 0x74, 0x78, 0x7c, 0x80, 0x84, - 0x88, 0x8e, 0x94, 0x9b, 0xa3, 0xa9, 0xae, 0xb0, 0xaf, 0xab, 0xa4, - 0x9c, 0x92, 0x88, 0x7f, 0x76, 0x70, 0x6b, 0x68, 0x68, 0x69, 0x6c, - 0x71, 0x77, 0x7e, 0x84, 0x87, 0x87, 0x83, 0x7c, 0x71, 0x68, 0x61, - 0x5f, 0x60, 0x63, 0x65, 0x66, 0x68, 0x6b, 0x6f, 0x73, 0x78, 0x7d, - 0x82, 0x86, 0x8b, 0x8f, 0x95, 0x9b, 0xa1, 0xa7, 0xac, 0xaf, 0xaf, - 0xac, 0xa6, 0x9e, 0x95, 0x8a, 0x80, 0x77, 0x70, 0x6b, 0x67, 0x66, - 0x67, 0x6b, 0x70, 0x76, 0x7d, 0x83, 0x88, 0x89, 0x86, 0x7f, 0x76, - 0x6b, 0x63, 0x5d, 0x5d, 0x60, 0x63, 0x66, 0x69, 0x6b, 0x6e, 0x72, - 0x77, 0x7c, 0x81, 0x86, 0x8a, 0x8e, 0x93, 0x98, 0x9e, 0xa3, 0xa8, - 0xac, 0xad, 0xac, 0xa8, 0xa2, 0x99, 0x90, 0x85, 0x7c, 0x73, 0x6d, - 0x69, 0x67, 0x67, 0x6a, 0x6e, 0x74, 0x7a, 0x81, 0x87, 0x8a, 0x89, - 0x85, 0x7c, 0x72, 0x67, 0x5f, 0x5a, 0x5b, 0x5e, 0x63, 0x68, 0x6c, - 0x70, 0x73, 0x77, 0x7a, 0x7e, 0x82, 0x86, 0x8b, 0x8f, 0x94, 0x9a, - 0x9f, 0xa4, 0xa7, 0xaa, 0xab, 0xa9, 0xa5, 0x9f, 0x97, 0x8e, 0x84, - 0x7b, 0x73, 0x6d, 0x69, 0x67, 0x68, 0x6b, 0x6f, 0x75, 0x7c, 0x82, - 0x87, 0x89, 0x88, 0x83, 0x7b, 0x71, 0x67, 0x60, 0x5c, 0x5c, 0x5f, - 0x63, 0x68, 0x6c, 0x70, 0x73, 0x77, 0x7c, 0x81, 0x86, 0x8a, 0x8d, - 0x91, 0x94, 0x98, 0x9c, 0xa0, 0xa3, 0xa6, 0xa7, 0xa6, 0xa2, 0x9d, - 0x95, 0x8c, 0x84, 0x7c, 0x74, 0x6e, 0x6b, 0x6a, 0x6b, 0x6e, 0x72, - 0x77, 0x7d, 0x83, 0x87, 0x88, 0x85, 0x7f, 0x77, 0x6e, 0x66, 0x60, - 0x5e, 0x60, 0x64, 0x68, 0x6c, 0x70, 0x72, 0x75, 0x78, 0x7c, 0x80, - 0x85, 0x89, 0x8d, 0x90, 0x93, 0x98, 0x9c, 0x9f, 0xa3, 0xa5, 0xa6, - 0xa5, 0xa1, 0x9b, 0x94, 0x8c, 0x83, 0x7a, 0x73, 0x6e, 0x6b, 0x6a, - 0x6c, 0x6f, 0x73, 0x78, 0x7d, 0x82, 0x85, 0x86, 0x84, 0x7e, 0x77, - 0x6f, 0x68, 0x63, 0x61, 0x62, 0x65, 0x69, 0x6c, 0x70, 0x73, 0x76, - 0x7a, 0x7e, 0x83, 0x86, 0x8a, 0x8d, 0x90, 0x94, 0x97, 0x9b, 0x9e, - 0xa1, 0xa3, 0xa3, 0xa1, 0x9d, 0x98, 0x91, 0x89, 0x81, 0x7a, 0x74, - 0x6f, 0x6d, 0x6c, 0x6d, 0x70, 0x74, 0x78, 0x7d, 0x81, 0x83, 0x84, - 0x82, 0x7f, 0x79, 0x72, 0x6b, 0x66, 0x63, 0x63, 0x66, 0x6a, 0x6e, - 0x72, 0x76, 0x79, 0x7c, 0x7e, 0x81, 0x84, 0x88, 0x8b, 0x8f, 0x92, - 0x96, 0x99, 0x9d, 0xa0, 0xa2, 0xa2, 0xa0, 0x9c, 0x97, 0x90, 0x89, - 0x82, 0x7b, 0x75, 0x71, 0x6f, 0x6e, 0x6f, 0x71, 0x74, 0x78, 0x7b, - 0x7f, 0x82, 0x83, 0x83, 0x80, 0x7c, 0x75, 0x6f, 0x69, 0x65, 0x64, - 0x65, 0x68, 0x6d, 0x71, 0x75, 0x79, 0x7c, 0x7e, 0x80, 0x83, 0x86, - 0x8a, 0x8e, 0x92, 0x96, 0x9a, 0x9d, 0xa0, 0xa1, 0xa0, 0x9e, 0x99, - 0x94, 0x8e, 0x87, 0x81, 0x7b, 0x76, 0x73, 0x71, 0x70, 0x71, 0x72, - 0x74, 0x77, 0x7a, 0x7d, 0x7f, 0x81, 0x82, 0x81, 0x7e, 0x79, 0x74, - 0x6e, 0x6a, 0x67, 0x67, 0x69, 0x6d, 0x71, 0x75, 0x78, 0x7b, 0x7d, - 0x7f, 0x81, 0x84, 0x88, 0x8c, 0x90, 0x95, 0x9a, 0x9d, 0xa0, 0xa0, - 0x9f, 0x9c, 0x98, 0x92, 0x8c, 0x86, 0x80, 0x7b, 0x77, 0x74, 0x73, - 0x72, 0x73, 0x74, 0x76, 0x78, 0x7a, 0x7c, 0x7e, 0x80, 0x80, 0x80, - 0x7e, 0x7b, 0x76, 0x72, 0x6d, 0x6a, 0x6a, 0x6b, 0x6e, 0x71, 0x75, - 0x78, 0x7b, 0x7d, 0x7f, 0x81, 0x84, 0x87, 0x8b, 0x8f, 0x94, 0x98, - 0x9c, 0x9e, 0x9f, 0x9e, 0x9a, 0x96, 0x90, 0x8a, 0x84, 0x7e, 0x7a, - 0x76, 0x75, 0x74, 0x74, 0x75, 0x76, 0x77, 0x79, 0x7a, 0x7c, 0x7d, - 0x7e, 0x7f, 0x7e, 0x7d, 0x7b, 0x77, 0x74, 0x70, 0x6e, 0x6d, 0x6e, - 0x70, 0x73, 0x76, 0x79, 0x7b, 0x7d, 0x7f, 0x80, 0x82, 0x85, 0x89, - 0x8e, 0x94, 0x98, 0x9d, 0x9f, 0x9f, 0x9d, 0x98, 0x93, 0x8c, 0x86, - 0x80, 0x7b, 0x78, 0x76, 0x75, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, - 0x7b, 0x7c, 0x7c, 0x7c, 0x7c, 0x7b, 0x7a, 0x78, 0x76, 0x73, 0x71, - 0x70, 0x70, 0x71, 0x73, 0x76, 0x79, 0x7c, 0x7e, 0x80, 0x82, 0x84, - 0x86, 0x89, 0x8c, 0x90, 0x94, 0x98, 0x9a, 0x9b, 0x9a, 0x97, 0x93, - 0x8d, 0x87, 0x82, 0x7d, 0x79, 0x77, 0x76, 0x76, 0x77, 0x78, 0x7a, - 0x7b, 0x7c, 0x7c, 0x7c, 0x7c, 0x7b, 0x7a, 0x79, 0x77, 0x76, 0x74, - 0x73, 0x72, 0x72, 0x72, 0x74, 0x76, 0x78, 0x7b, 0x7d, 0x7f, 0x81, - 0x83, 0x85, 0x88, 0x8b, 0x8f, 0x92, 0x95, 0x97, 0x98, 0x98, 0x95, - 0x92, 0x8d, 0x88, 0x83, 0x7f, 0x7b, 0x79, 0x78, 0x77, 0x78, 0x79, - 0x7a, 0x7b, 0x7c, 0x7c, 0x7c, 0x7c, 0x7b, 0x7a, 0x78, 0x76, 0x75, - 0x73, 0x72, 0x72, 0x72, 0x73, 0x75, 0x77, 0x79, 0x7b, 0x7d, 0x7f, - 0x81, 0x84, 0x87, 0x8a, 0x8d, 0x90, 0x94, 0x96, 0x97, 0x97, 0x96, - 0x93, 0x90, 0x8b, 0x87, 0x82, 0x7f, 0x7c, 0x7a, 0x79, 0x79, 0x79, - 0x7a, 0x7b, 0x7c, 0x7c, 0x7c, 0x7c, 0x7b, 0x7a, 0x78, 0x77, 0x75, - 0x73, 0x72, 0x72, 0x72, 0x73, 0x74, 0x75, 0x77, 0x79, 0x7b, 0x7d, - 0x80, 0x83, 0x86, 0x8a, 0x8d, 0x91, 0x94, 0x97, 0x98, 0x98, 0x97, - 0x94, 0x91, 0x8c, 0x88, 0x84, 0x80, 0x7d, 0x7b, 0x7a, 0x79, 0x7a, - 0x7a, 0x7b, 0x7b, 0x7c, 0x7c, 0x7c, 0x7b, 0x7a, 0x78, 0x77, 0x75, - 0x73, 0x72, 0x71, 0x71, 0x72, 0x72, 0x74, 0x75, 0x77, 0x79, 0x7c, - 0x7f, 0x82, 0x86, 0x8a, 0x8f, 0x93, 0x96, 0x99, 0x9a, 0x9a, 0x99, - 0x96, 0x93, 0x8e, 0x89, 0x84, 0x81, 0x7d, 0x7b, 0x7a, 0x79, 0x79, - 0x7a, 0x7b, 0x7b, 0x7c, 0x7c, 0x7c, 0x7b, 0x7a, 0x78, 0x76, 0x74, - 0x72, 0x70, 0x70, 0x70, 0x70, 0x71, 0x72, 0x74, 0x75, 0x78, 0x7a, - 0x7d, 0x81, 0x85, 0x8b, 0x90, 0x95, 0x9a, 0x9d, 0x9f, 0x9f, 0x9d, - 0x99, 0x95, 0x8f, 0x89, 0x84, 0x7f, 0x7c, 0x79, 0x78, 0x78, 0x79, - 0x7a, 0x7b, 0x7c, 0x7c, 0x7d, 0x7c, 0x7b, 0x79, 0x77, 0x74, 0x72, - 0x6f, 0x6e, 0x6d, 0x6d, 0x6e, 0x6f, 0x71, 0x72, 0x74, 0x76, 0x78, - 0x7a, 0x7e, 0x82, 0x88, 0x8e, 0x95, 0x9b, 0xa0, 0xa3, 0xa3, 0xa2, - 0x9e, 0x9a, 0x94, 0x8d, 0x87, 0x81, 0x7c, 0x79, 0x77, 0x77, 0x78, - 0x79, 0x7a, 0x7c, 0x7d, 0x7e, 0x7d, 0x7c, 0x7b, 0x78, 0x75, 0x72, - 0x6f, 0x6c, 0x6b, 0x6b, 0x6c, 0x6d, 0x6f, 0x71, 0x73, 0x74, 0x75, - 0x77, 0x7a, 0x7f, 0x85, 0x8c, 0x94, 0x9c, 0xa2, 0xa7, 0xa9, 0xa7, - 0xa3, 0x9d, 0x97, 0x8f, 0x87, 0x81, 0x7c, 0x78, 0x76, 0x76, 0x77, - 0x78, 0x7a, 0x7c, 0x7e, 0x7f, 0x7f, 0x7e, 0x7c, 0x79, 0x75, 0x70, - 0x6c, 0x69, 0x67, 0x67, 0x68, 0x6b, 0x6e, 0x70, 0x71, 0x73, 0x74, - 0x76, 0x7a, 0x80, 0x88, 0x90, 0x9a, 0xa2, 0xa9, 0xad, 0xad, 0xaa, - 0xa4, 0x9c, 0x94, 0x8b, 0x83, 0x7c, 0x78, 0x75, 0x74, 0x75, 0x77, - 0x79, 0x7c, 0x7f, 0x80, 0x81, 0x80, 0x7e, 0x7a, 0x75, 0x6f, 0x6a, - 0x66, 0x63, 0x63, 0x65, 0x69, 0x6d, 0x71, 0x73, 0x74, 0x75, 0x76, - 0x78, 0x7d, 0x84, 0x8e, 0x99, 0xa3, 0xab, 0xb1, 0xb3, 0xb0, 0xaa, - 0xa1, 0x97, 0x8d, 0x84, 0x7c, 0x77, 0x74, 0x73, 0x74, 0x76, 0x79, - 0x7d, 0x80, 0x82, 0x83, 0x82, 0x7f, 0x7b, 0x75, 0x6e, 0x67, 0x62, - 0x5f, 0x5f, 0x62, 0x68, 0x6d, 0x71, 0x73, 0x74, 0x73, 0x74, 0x77, - 0x7c, 0x84, 0x8f, 0x9b, 0xa6, 0xaf, 0xb5, 0xb6, 0xb2, 0xab, 0xa1, - 0x96, 0x8b, 0x81, 0x7a, 0x75, 0x72, 0x72, 0x74, 0x77, 0x7b, 0x7f, - 0x83, 0x85, 0x86, 0x85, 0x81, 0x7b, 0x72, 0x68, 0x5f, 0x59, 0x56, - 0x58, 0x5e, 0x66, 0x6e, 0x72, 0x74, 0x73, 0x73, 0x74, 0x78, 0x80, - 0x8b, 0x98, 0xa5, 0xb1, 0xb8, 0xbc, 0xba, 0xb3, 0xa8, 0x9b, 0x8f, - 0x83, 0x7a, 0x74, 0x71, 0x70, 0x71, 0x74, 0x78, 0x7c, 0x81, 0x85, - 0x89, 0x8b, 0x88, 0x83, 0x79, 0x6d, 0x60, 0x56, 0x50, 0x4f, 0x55, - 0x5e, 0x69, 0x71, 0x74, 0x76, 0x75, 0x75, 0x76, 0x7c, 0x85, 0x93, - 0xa2, 0xb0, 0xba, 0xc0, 0xc0, 0xb9, 0xaf, 0xa1, 0x94, 0x86, 0x7c, - 0x75, 0x72, 0x70, 0x70, 0x72, 0x76, 0x7b, 0x80, 0x86, 0x8a, 0x8d, - 0x8b, 0x86, 0x7c, 0x6e, 0x60, 0x53, 0x4b, 0x4a, 0x50, 0x5b, 0x66, - 0x6f, 0x73, 0x76, 0x75, 0x75, 0x77, 0x7d, 0x86, 0x94, 0xa4, 0xb2, - 0xbd, 0xc2, 0xc2, 0xba, 0xaf, 0xa1, 0x93, 0x85, 0x7b, 0x74, 0x70, - 0x6f, 0x6f, 0x72, 0x75, 0x7a, 0x80, 0x87, 0x8c, 0x8f, 0x8e, 0x86, - 0x7a, 0x6a, 0x5b, 0x4d, 0x46, 0x46, 0x4f, 0x5b, 0x67, 0x70, 0x75, - 0x77, 0x76, 0x77, 0x7a, 0x82, 0x8d, 0x9c, 0xab, 0xb9, 0xc1, 0xc4, - 0xc1, 0xb7, 0xab, 0x9a, 0x8c, 0x7e, 0x76, 0x70, 0x6e, 0x6e, 0x6f, - 0x72, 0x76, 0x7c, 0x82, 0x8a, 0x8f, 0x91, 0x8e, 0x85, 0x75, 0x63, - 0x52, 0x47, 0x44, 0x4a, 0x54, 0x5e, 0x67, 0x6d, 0x72, 0x73, 0x75, - 0x79, 0x81, 0x8b, 0x9a, 0xa9, 0xb7, 0xc1, 0xc5, 0xc3, 0xba, 0xad, - 0x9d, 0x8e, 0x80, 0x76, 0x70, 0x6d, 0x6d, 0x6e, 0x70, 0x74, 0x79, - 0x82, 0x8b, 0x93, 0x97, 0x95, 0x8b, 0x7b, 0x67, 0x54, 0x47, 0x41, - 0x45, 0x4e, 0x59, 0x63, 0x6a, 0x6d, 0x6f, 0x72, 0x77, 0x80, 0x8d, - 0x9c, 0xac, 0xbb, 0xc4, 0xc7, 0xc3, 0xb8, 0xaa, 0x99, 0x89, 0x7d, - 0x74, 0x70, 0x6d, 0x6d, 0x6f, 0x72, 0x77, 0x7e, 0x87, 0x8f, 0x95, - 0x96, 0x91, 0x84, 0x72, 0x5e, 0x4c, 0x43, 0x43, 0x4a, 0x52, 0x5c, - 0x63, 0x69, 0x6c, 0x71, 0x77, 0x82, 0x90, 0x9f, 0xaf, 0xbb, 0xc4, - 0xc6, 0xc1, 0xb5, 0xa7, 0x96, 0x87, 0x7b, 0x74, 0x6f, 0x6e, 0x6e, - 0x70, 0x74, 0x79, 0x80, 0x88, 0x90, 0x94, 0x93, 0x8c, 0x7e, 0x6b, - 0x59, 0x4b, 0x43, 0x43, 0x49, 0x51, 0x5a, 0x61, 0x68, 0x70, 0x7a, - 0x86, 0x95, 0xa4, 0xb3, 0xbf, 0xc6, 0xc7, 0xc1, 0xb5, 0xa5, 0x93, - 0x83, 0x77, 0x6f, 0x6b, 0x6b, 0x6d, 0x70, 0x75, 0x7b, 0x82, 0x88, - 0x8e, 0x91, 0x90, 0x89, 0x7c, 0x6c, 0x5b, 0x4e, 0x46, 0x45, 0x4a, - 0x51, 0x59, 0x62, 0x6b, 0x76, 0x84, 0x93, 0xa2, 0xb0, 0xba, 0xc1, - 0xc2, 0xbd, 0xb3, 0xa5, 0x96, 0x87, 0x7a, 0x71, 0x6c, 0x6b, 0x6d, - 0x71, 0x75, 0x7b, 0x82, 0x87, 0x8c, 0x8d, 0x8b, 0x82, 0x77, 0x68, - 0x5a, 0x4f, 0x4a, 0x4a, 0x4d, 0x54, 0x5c, 0x67, 0x74, 0x83, 0x92, - 0xa2, 0xb0, 0xbb, 0xc0, 0xc0, 0xba, 0xb0, 0xa2, 0x93, 0x85, 0x79, - 0x70, 0x6b, 0x69, 0x6a, 0x6e, 0x73, 0x7a, 0x80, 0x86, 0x8a, 0x8b, - 0x89, 0x83, 0x78, 0x6b, 0x5e, 0x52, 0x4d, 0x4b, 0x4f, 0x56, 0x61, - 0x6d, 0x7d, 0x8e, 0x9f, 0xaf, 0xb9, 0xbf, 0xbe, 0xb9, 0xae, 0xa2, - 0x93, 0x86, 0x7a, 0x71, 0x6a, 0x67, 0x67, 0x69, 0x6e, 0x75, 0x7e, - 0x85, 0x8b, 0x8d, 0x8b, 0x84, 0x7a, 0x6d, 0x60, 0x54, 0x4d, 0x4a, - 0x4d, 0x57, 0x64, 0x76, 0x88, 0x9a, 0xa9, 0xb6, 0xbc, 0xbd, 0xb9, - 0xb0, 0xa4, 0x96, 0x89, 0x7d, 0x73, 0x6b, 0x66, 0x64, 0x65, 0x69, - 0x70, 0x79, 0x82, 0x8a, 0x8f, 0x8e, 0x89, 0x81, 0x75, 0x68, 0x5b, - 0x51, 0x4c, 0x4b, 0x51, 0x5c, 0x6e, 0x80, 0x93, 0xa5, 0xb2, 0xbb, - 0xbd, 0xbb, 0xb2, 0xa8, 0x9a, 0x8d, 0x7f, 0x72, 0x69, 0x61, 0x5e, - 0x5e, 0x64, 0x6b, 0x76, 0x82, 0x8c, 0x93, 0x95, 0x94, 0x8c, 0x83, - 0x76, 0x6a, 0x5f, 0x56, 0x50, 0x4d, 0x4e, 0x54, 0x5f, 0x6f, 0x81, - 0x96, 0xa9, 0xb9, 0xc2, 0xc5, 0xc0, 0xb6, 0xa7, 0x96, 0x87, 0x79, - 0x6e, 0x65, 0x60, 0x5d, 0x5c, 0x5f, 0x65, 0x6e, 0x7b, 0x8a, 0x98, - 0xa2, 0xa8, 0xa6, 0x9d, 0x8f, 0x7d, 0x6c, 0x5d, 0x53, 0x4d, 0x4c, - 0x4c, 0x4e, 0x50, 0x54, 0x5c, 0x69, 0x7d, 0x93, 0xab, 0xbe, 0xcc, - 0xcf, 0xca, 0xbb, 0xa8, 0x93, 0x7f, 0x71, 0x67, 0x62, 0x60, 0x60, - 0x61, 0x63, 0x67, 0x6d, 0x76, 0x82, 0x8f, 0x9a, 0xa2, 0xa4, 0xa0, - 0x96, 0x88, 0x79, 0x6c, 0x63, 0x5f, 0x5f, 0x63, 0x69, 0x70, 0x78, - 0x80, 0x87, 0x8e, 0x92, 0x95, 0x93, 0x90, 0x87, 0x7e, 0x72, 0x67, - 0x5b, 0x53, 0x4f, 0x52, 0x5d, 0x6c, 0x80, 0x92, 0xa4, 0xaf, 0xb6, - 0xb6, 0xb1, 0xaa, 0xa0, 0x97, 0x8c, 0x83, 0x78, 0x6f, 0x65, 0x5e, - 0x5a, 0x59, 0x5e, 0x66, 0x73, 0x7f, 0x8c, 0x95, 0x9b, 0x9b, 0x98, - 0x91, 0x89, 0x81, 0x79, 0x73, 0x6e, 0x6c, 0x69, 0x68, 0x68, 0x69, - 0x6c, 0x71, 0x78, 0x80, 0x89, 0x90, 0x95, 0x96, 0x95, 0x91, 0x8b, - 0x85, 0x7f, 0x7b, 0x77, 0x75, 0x73, 0x73, 0x73, 0x73, 0x75, 0x77, - 0x7b, 0x80, 0x85, 0x8a, 0x8e, 0x90, 0x90, 0x8d, 0x89, 0x84, 0x7f, - 0x7b, 0x78, 0x76, 0x75, 0x75, 0x76, 0x77, 0x78, 0x7a, 0x7d, 0x7f, - 0x82, 0x85, 0x88, 0x89, 0x89, 0x88, 0x85, 0x81, 0x7d, 0x7a, 0x78, - 0x77, 0x77, 0x78, 0x79, 0x7a, 0x7c, 0x7d, 0x7e, 0x80, 0x82, 0x83, - 0x85, 0x85, 0x85, 0x85, 0x83, 0x81, 0x7e, 0x7c, 0x7a, 0x79, 0x79, - 0x7a, 0x7b, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x81, 0x82, 0x83, 0x83, - 0x83, 0x82, 0x84, 0x84, 0x87, 0x86, 0x84, 0x7e, 0x77, 0x6f, 0x68, - 0x65, 0x65, 0x6b, 0x73, 0x7e, 0x87, 0x8f, 0x92, 0x94, 0x92, 0x90, - 0x8e, 0x8b, 0x8a, 0x88, 0x85, 0x80, 0x7b, 0x73, 0x6e, 0x6a, 0x6a, - 0x6e, 0x74, 0x7c, 0x84, 0x8a, 0x8d, 0x8e, 0x8b, 0x88, 0x85, 0x82, - 0x80, 0x7d, 0x7c, 0x7a, 0x78, 0x75, 0x73, 0x72, 0x73, 0x76, 0x7a, - 0x80, 0x85, 0x89, 0x8a, 0x8a, 0x88, 0x85, 0x82, 0x7f, 0x7e, 0x7d, - 0x7d, 0x7c, 0x7c, 0x7b, 0x7a, 0x79, 0x79, 0x7a, 0x7d, 0x80, 0x83, - 0x85, 0x86, 0x86, 0x85, 0x83, 0x80, 0x7f, 0x7d, 0x7c, 0x7c, 0x7c, - 0x7d, 0x7c, 0x7c, 0x7c, 0x7c, 0x7d, 0x7e, 0x80, 0x82, 0x83, 0x84, - 0x84, 0x83, 0x81, 0x7f, 0x7d, 0x7c, 0x7c, 0x7c, 0x7d, 0x7d, 0x7d, - 0x7d, 0x7d, 0x7d, 0x7d, 0x7e, 0x80, 0x81, 0x82, 0x82, 0x82, 0x81, - 0x80, 0x7e, 0x7d, 0x7c, 0x7c, 0x7d, 0x7d, 0x7e, 0x7e, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x81, 0x81, 0x81, 0x80, 0x80, 0x7f, - 0x7e, 0x7d, 0x7d, 0x7d, 0x7e, 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7e, 0x7e, 0x7e, - 0x7e, 0x7e, 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7e, 0x7e, 0x7e, 0x7e, - 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7e, 0x7e, 0x7e, 0x7e, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x80, - 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, - 0x80, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, - 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x7f, - 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, - 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x7f, 0x80, - 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, - 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, - 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x80, - 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, - 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, - 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, - 0x80, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, - 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, - 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, - 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x80, - 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x80, - 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x80, - 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, - 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, - 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, - 0x80, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x7f, - 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, - }, - { // 6 - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, - 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, - 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7e, 0x7f, 0x7e, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x7f, 0x7f, 0x7e, 0x7f, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, - 0x7e, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x81, 0x81, 0x82, 0x81, 0x82, - 0x81, 0x81, 0x80, 0x7f, 0x7f, 0x7e, 0x7e, 0x7c, 0x7d, 0x7c, 0x7c, - 0x7c, 0x7c, 0x7e, 0x7d, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x84, - 0x85, 0x84, 0x85, 0x82, 0x82, 0x7f, 0x7e, 0x7c, 0x7a, 0x79, 0x77, - 0x77, 0x75, 0x77, 0x76, 0x7a, 0x7a, 0x7f, 0x81, 0x84, 0x87, 0x89, - 0x8b, 0x8c, 0x8c, 0x8c, 0x8b, 0x88, 0x86, 0x81, 0x7e, 0x79, 0x76, - 0x71, 0x71, 0x6b, 0x6d, 0x6d, 0x6e, 0x74, 0x74, 0x7f, 0x80, 0x87, - 0x8c, 0x90, 0x95, 0x96, 0x97, 0x96, 0x95, 0x8f, 0x8a, 0x81, 0x7d, - 0x76, 0x70, 0x6b, 0x65, 0x64, 0x63, 0x64, 0x69, 0x6d, 0x73, 0x7d, - 0x83, 0x8c, 0x91, 0x98, 0x9c, 0x9e, 0x9e, 0x9d, 0x97, 0x90, 0x87, - 0x80, 0x79, 0x71, 0x6a, 0x62, 0x61, 0x5a, 0x61, 0x60, 0x6b, 0x6e, - 0x78, 0x82, 0x88, 0x92, 0x96, 0x9f, 0x9f, 0xa2, 0x9e, 0x9e, 0x96, - 0x8f, 0x84, 0x7e, 0x73, 0x6d, 0x65, 0x61, 0x5d, 0x5b, 0x61, 0x62, - 0x6d, 0x6e, 0x7e, 0x83, 0x8c, 0x92, 0x99, 0x9f, 0x9f, 0xa0, 0x9e, - 0x9c, 0x92, 0x8c, 0x81, 0x7b, 0x70, 0x6c, 0x64, 0x62, 0x5b, 0x60, - 0x62, 0x68, 0x6d, 0x73, 0x82, 0x83, 0x8f, 0x90, 0x9b, 0x9d, 0x9e, - 0x9e, 0x9c, 0x98, 0x91, 0x88, 0x81, 0x78, 0x70, 0x6a, 0x65, 0x62, - 0x5e, 0x65, 0x62, 0x6d, 0x6d, 0x79, 0x82, 0x84, 0x90, 0x90, 0x9b, - 0x9b, 0x9c, 0x9d, 0x9a, 0x96, 0x8f, 0x84, 0x7f, 0x74, 0x71, 0x6b, - 0x66, 0x63, 0x62, 0x64, 0x67, 0x6d, 0x6e, 0x7e, 0x7e, 0x88, 0x8d, - 0x94, 0x9b, 0x99, 0x9d, 0x9c, 0x99, 0x93, 0x8a, 0x82, 0x7f, 0x75, - 0x73, 0x6a, 0x66, 0x61, 0x66, 0x66, 0x68, 0x6d, 0x70, 0x7c, 0x7b, - 0x87, 0x8b, 0x94, 0x97, 0x97, 0x9c, 0x9e, 0x9a, 0x96, 0x8e, 0x89, - 0x82, 0x78, 0x74, 0x69, 0x65, 0x5f, 0x62, 0x61, 0x66, 0x67, 0x70, - 0x78, 0x7b, 0x87, 0x8c, 0x95, 0x98, 0x9a, 0x9f, 0x9f, 0x9d, 0x98, - 0x90, 0x8a, 0x80, 0x7a, 0x71, 0x69, 0x62, 0x60, 0x60, 0x60, 0x66, - 0x67, 0x71, 0x79, 0x7e, 0x88, 0x8e, 0x96, 0x98, 0x9d, 0xa0, 0x9e, - 0x9d, 0x95, 0x8f, 0x88, 0x80, 0x75, 0x70, 0x66, 0x62, 0x5f, 0x60, - 0x63, 0x65, 0x6b, 0x72, 0x7b, 0x80, 0x8a, 0x8d, 0x98, 0x99, 0x9c, - 0x9e, 0x9c, 0x9a, 0x93, 0x8e, 0x87, 0x7e, 0x76, 0x6f, 0x65, 0x62, - 0x60, 0x61, 0x64, 0x67, 0x6c, 0x75, 0x79, 0x80, 0x8b, 0x8f, 0x98, - 0x98, 0x9d, 0x9f, 0x9b, 0x9b, 0x93, 0x8d, 0x85, 0x7d, 0x75, 0x6e, - 0x65, 0x64, 0x60, 0x5f, 0x63, 0x68, 0x6e, 0x77, 0x7c, 0x83, 0x8b, - 0x8e, 0x97, 0x98, 0x9b, 0x9d, 0x9b, 0x9a, 0x92, 0x8c, 0x88, 0x7d, - 0x75, 0x6e, 0x66, 0x64, 0x61, 0x60, 0x63, 0x66, 0x6b, 0x75, 0x78, - 0x81, 0x8a, 0x8f, 0x97, 0x97, 0x9d, 0x9f, 0x9d, 0x9a, 0x93, 0x8d, - 0x87, 0x7c, 0x76, 0x6e, 0x66, 0x65, 0x5f, 0x61, 0x61, 0x67, 0x6c, - 0x74, 0x79, 0x83, 0x89, 0x8e, 0x96, 0x96, 0x9e, 0x9c, 0x9d, 0x99, - 0x94, 0x8d, 0x86, 0x7e, 0x76, 0x6d, 0x67, 0x64, 0x60, 0x62, 0x62, - 0x69, 0x6c, 0x75, 0x79, 0x80, 0x87, 0x8c, 0x94, 0x94, 0x9a, 0x9d, - 0x9a, 0x9a, 0x97, 0x90, 0x8a, 0x81, 0x7b, 0x74, 0x69, 0x69, 0x63, - 0x5e, 0x5d, 0x61, 0x63, 0x6c, 0x79, 0x81, 0x8e, 0x94, 0x9f, 0xa1, - 0xa4, 0xa8, 0xa1, 0x9c, 0x8e, 0x84, 0x7a, 0x70, 0x66, 0x62, 0x5d, - 0x4d, 0x57, 0x5f, 0x5b, 0x67, 0x82, 0x88, 0x8e, 0x9e, 0xa8, 0xa1, - 0xa1, 0xa7, 0xa2, 0x92, 0x93, 0x8d, 0x7c, 0x79, 0x76, 0x6f, 0x64, - 0x5e, 0x58, 0x4d, 0x5c, 0x61, 0x61, 0x80, 0x86, 0x93, 0x9b, 0xa6, - 0xa4, 0xa0, 0xa3, 0xa2, 0x96, 0x92, 0x8f, 0x82, 0x7a, 0x77, 0x70, - 0x68, 0x5f, 0x58, 0x4f, 0x51, 0x68, 0x59, 0x7f, 0x84, 0x91, 0x9d, - 0xa1, 0xa9, 0x9d, 0xa1, 0x9b, 0x95, 0x8a, 0x8b, 0x83, 0x7b, 0x77, - 0x74, 0x69, 0x65, 0x59, 0x51, 0x51, 0x67, 0x59, 0x78, 0x89, 0x88, - 0x9f, 0x9f, 0xa8, 0x9b, 0xa3, 0x9b, 0x97, 0x91, 0x8c, 0x87, 0x7c, - 0x79, 0x73, 0x69, 0x67, 0x5b, 0x53, 0x4d, 0x63, 0x58, 0x6e, 0x8c, - 0x82, 0xa1, 0x9f, 0xa7, 0x9e, 0x9f, 0x9a, 0x94, 0x94, 0x88, 0x8a, - 0x7f, 0x7b, 0x75, 0x6b, 0x6b, 0x5b, 0x58, 0x4a, 0x62, 0x5b, 0x65, - 0x8d, 0x81, 0x9c, 0x9e, 0xa5, 0x9f, 0x9f, 0x9c, 0x94, 0x94, 0x8d, - 0x87, 0x83, 0x7b, 0x7a, 0x6e, 0x6e, 0x66, 0x59, 0x52, 0x54, 0x66, - 0x51, 0x82, 0x83, 0x89, 0xa4, 0xa0, 0xa5, 0x9f, 0xa5, 0x94, 0x94, - 0x93, 0x86, 0x86, 0x7e, 0x79, 0x75, 0x6c, 0x6c, 0x5c, 0x59, 0x4c, - 0x63, 0x5a, 0x65, 0x8d, 0x7c, 0x9a, 0xa0, 0x9f, 0x9f, 0xa2, 0x9d, - 0x90, 0x97, 0x8d, 0x84, 0x86, 0x79, 0x77, 0x6f, 0x6d, 0x65, 0x58, - 0x55, 0x4e, 0x68, 0x54, 0x7b, 0x8b, 0x82, 0xa3, 0x9d, 0xa2, 0x9d, - 0xa1, 0x98, 0x92, 0x92, 0x8b, 0x84, 0x84, 0x79, 0x7c, 0x6e, 0x6d, - 0x66, 0x56, 0x55, 0x4f, 0x67, 0x52, 0x7c, 0x83, 0x81, 0xa2, 0x9a, - 0xa3, 0xa0, 0xa2, 0x99, 0x99, 0x93, 0x8d, 0x88, 0x83, 0x7a, 0x7a, - 0x6e, 0x6a, 0x64, 0x56, 0x53, 0x54, 0x63, 0x56, 0x7d, 0x84, 0x84, - 0xa0, 0x9e, 0xa4, 0x9f, 0xa2, 0x9a, 0x96, 0x93, 0x8b, 0x89, 0x83, - 0x7b, 0x79, 0x6f, 0x68, 0x64, 0x59, 0x50, 0x52, 0x62, 0x59, 0x76, - 0x89, 0x86, 0x9e, 0x9e, 0xa2, 0xa2, 0xa0, 0x9a, 0x97, 0x92, 0x8e, - 0x8a, 0x83, 0x7f, 0x76, 0x76, 0x6d, 0x66, 0x5c, 0x5a, 0x4d, 0x5d, - 0x5e, 0x62, 0x89, 0x81, 0x95, 0x9f, 0x9f, 0xa0, 0xa1, 0x9b, 0x97, - 0x96, 0x8f, 0x8c, 0x84, 0x84, 0x78, 0x76, 0x74, 0x6b, 0x63, 0x5a, - 0x54, 0x4d, 0x66, 0x57, 0x74, 0x8a, 0x85, 0xa1, 0x9d, 0xa5, 0x9e, - 0xa1, 0x98, 0x98, 0x93, 0x8d, 0x88, 0x81, 0x81, 0x75, 0x76, 0x6e, - 0x6d, 0x5d, 0x5a, 0x4f, 0x50, 0x66, 0x55, 0x81, 0x86, 0x8b, 0xa3, - 0x9d, 0xa4, 0x9e, 0x9f, 0x9a, 0x98, 0x91, 0x8e, 0x86, 0x83, 0x7d, - 0x78, 0x77, 0x6e, 0x6c, 0x63, 0x5a, 0x53, 0x4d, 0x66, 0x5a, 0x79, - 0x8b, 0x85, 0xa0, 0x9d, 0x9f, 0x9e, 0xa0, 0x97, 0x98, 0x91, 0x90, - 0x88, 0x82, 0x83, 0x77, 0x78, 0x70, 0x6e, 0x65, 0x5c, 0x55, 0x49, - 0x64, 0x59, 0x6f, 0x8b, 0x84, 0x9e, 0x9b, 0xa3, 0xa0, 0x9e, 0x99, - 0x99, 0x95, 0x8b, 0x8f, 0x82, 0x81, 0x7b, 0x77, 0x73, 0x6e, 0x6e, - 0x60, 0x5e, 0x51, 0x4f, 0x67, 0x56, 0x7a, 0x8a, 0x89, 0xa2, 0xa1, - 0xa3, 0x9c, 0xa0, 0x96, 0x96, 0x91, 0x8e, 0x8a, 0x83, 0x82, 0x79, - 0x78, 0x6e, 0x6e, 0x68, 0x5f, 0x5d, 0x4c, 0x60, 0x5e, 0x61, 0x88, - 0x80, 0x96, 0x9f, 0xa0, 0xa1, 0x9f, 0x9e, 0x92, 0x96, 0x8c, 0x8b, - 0x85, 0x84, 0x81, 0x7a, 0x7a, 0x71, 0x6f, 0x67, 0x5f, 0x58, 0x4d, - 0x60, 0x5e, 0x5e, 0x89, 0x85, 0x93, 0xa4, 0xa0, 0xa2, 0x9f, 0x9e, - 0x94, 0x96, 0x8f, 0x89, 0x86, 0x80, 0x7f, 0x7b, 0x77, 0x75, 0x72, - 0x6c, 0x5f, 0x5e, 0x4c, 0x5b, 0x64, 0x57, 0x82, 0x86, 0x8c, 0xa0, - 0xa3, 0xa0, 0xa0, 0xa3, 0x91, 0x97, 0x90, 0x89, 0x8a, 0x81, 0x81, - 0x7d, 0x79, 0x72, 0x72, 0x6e, 0x64, 0x5c, 0x53, 0x51, 0x63, 0x58, - 0x73, 0x8c, 0x87, 0x9f, 0x9e, 0xa5, 0x9c, 0xa0, 0x97, 0x93, 0x95, - 0x8b, 0x8e, 0x84, 0x86, 0x7e, 0x7d, 0x75, 0x73, 0x72, 0x68, 0x64, - 0x59, 0x4e, 0x54, 0x62, 0x5b, 0x80, 0x8d, 0x8d, 0xa5, 0xa0, 0xa5, - 0x9e, 0x9e, 0x96, 0x92, 0x91, 0x89, 0x8a, 0x7f, 0x83, 0x7b, 0x78, - 0x76, 0x76, 0x72, 0x6a, 0x64, 0x58, 0x4b, 0x59, 0x60, 0x5e, 0x87, - 0x8a, 0x96, 0xa5, 0xa5, 0xa1, 0x9a, 0x9d, 0x91, 0x93, 0x8d, 0x88, - 0x85, 0x7e, 0x82, 0x78, 0x7d, 0x75, 0x78, 0x74, 0x6d, 0x66, 0x58, - 0x4d, 0x57, 0x63, 0x5c, 0x82, 0x8d, 0x92, 0xa6, 0xa7, 0xa3, 0x9c, - 0x9a, 0x92, 0x8d, 0x8a, 0x83, 0x8a, 0x7e, 0x82, 0x80, 0x7d, 0x7a, - 0x78, 0x79, 0x6f, 0x6b, 0x5c, 0x52, 0x4b, 0x68, 0x58, 0x70, 0x93, - 0x8b, 0xa2, 0xa2, 0xa6, 0x9a, 0x96, 0x96, 0x88, 0x8e, 0x86, 0x85, - 0x83, 0x81, 0x85, 0x7d, 0x80, 0x79, 0x7d, 0x72, 0x72, 0x64, 0x5b, - 0x4a, 0x51, 0x64, 0x54, 0x85, 0x92, 0x9c, 0xa7, 0xa8, 0xa8, 0x98, - 0x95, 0x8a, 0x88, 0x85, 0x83, 0x85, 0x81, 0x84, 0x80, 0x81, 0x7e, - 0x7c, 0x81, 0x74, 0x73, 0x60, 0x58, 0x45, 0x51, 0x64, 0x5c, 0x89, - 0x92, 0x9b, 0xa4, 0xa7, 0xa8, 0x94, 0x93, 0x86, 0x88, 0x81, 0x84, - 0x87, 0x84, 0x88, 0x82, 0x83, 0x7d, 0x7e, 0x80, 0x77, 0x72, 0x68, - 0x59, 0x4c, 0x45, 0x5c, 0x5b, 0x7c, 0x97, 0x9f, 0xaa, 0xa5, 0xa8, - 0x95, 0x90, 0x87, 0x7f, 0x83, 0x80, 0x81, 0x82, 0x88, 0x8a, 0x8a, - 0x89, 0x83, 0x81, 0x79, 0x76, 0x6b, 0x5c, 0x54, 0x42, 0x4b, 0x66, - 0x66, 0x8c, 0x9e, 0xa7, 0xa9, 0xa2, 0xa4, 0x8c, 0x8a, 0x7c, 0x7f, - 0x7a, 0x7f, 0x85, 0x85, 0x8b, 0x8b, 0x92, 0x8c, 0x85, 0x84, 0x78, - 0x72, 0x6b, 0x65, 0x56, 0x4d, 0x46, 0x58, 0x71, 0x78, 0x9d, 0xa4, - 0xab, 0xa6, 0x9d, 0x8f, 0x82, 0x82, 0x7b, 0x7d, 0x84, 0x83, 0x89, - 0x8e, 0x90, 0x95, 0x89, 0x85, 0x7d, 0x79, 0x71, 0x69, 0x64, 0x62, - 0x59, 0x50, 0x45, 0x61, 0x76, 0x81, 0x9f, 0xa5, 0xad, 0x99, 0x98, - 0x8e, 0x80, 0x7e, 0x7b, 0x81, 0x85, 0x8f, 0x8f, 0x96, 0x93, 0x90, - 0x8d, 0x83, 0x7c, 0x78, 0x71, 0x67, 0x66, 0x66, 0x5f, 0x59, 0x53, - 0x52, 0x6d, 0x7b, 0x92, 0x9c, 0xa4, 0xa5, 0x90, 0x91, 0x80, 0x80, - 0x7d, 0x80, 0x89, 0x8e, 0x94, 0x93, 0x98, 0x8e, 0x8c, 0x81, 0x78, - 0x74, 0x6e, 0x70, 0x6c, 0x6d, 0x6b, 0x6b, 0x62, 0x61, 0x50, 0x60, - 0x72, 0x80, 0x99, 0x9a, 0xa9, 0x9b, 0x95, 0x88, 0x84, 0x85, 0x7f, - 0x88, 0x8a, 0x93, 0x92, 0x94, 0x92, 0x89, 0x87, 0x79, 0x75, 0x70, - 0x6e, 0x70, 0x72, 0x71, 0x6e, 0x68, 0x61, 0x59, 0x4e, 0x62, 0x73, - 0x8e, 0x9a, 0xa3, 0xa8, 0x9b, 0x91, 0x84, 0x83, 0x80, 0x83, 0x88, - 0x89, 0x94, 0x93, 0x94, 0x90, 0x88, 0x82, 0x79, 0x76, 0x6f, 0x71, - 0x70, 0x75, 0x77, 0x71, 0x6d, 0x63, 0x60, 0x4f, 0x51, 0x62, 0x7d, - 0x9c, 0xa1, 0xa9, 0xa2, 0x9c, 0x89, 0x80, 0x7e, 0x80, 0x87, 0x87, - 0x91, 0x96, 0x97, 0x92, 0x8e, 0x86, 0x7e, 0x74, 0x73, 0x70, 0x71, - 0x74, 0x76, 0x7a, 0x75, 0x6b, 0x63, 0x5c, 0x50, 0x4f, 0x63, 0x87, - 0xa3, 0xa8, 0xa6, 0xa0, 0x96, 0x86, 0x76, 0x77, 0x80, 0x8d, 0x93, - 0x91, 0x97, 0x97, 0x92, 0x86, 0x7c, 0x77, 0x74, 0x73, 0x73, 0x73, - 0x78, 0x7d, 0x7a, 0x76, 0x69, 0x65, 0x5d, 0x55, 0x51, 0x60, 0x86, - 0xa3, 0xac, 0xa2, 0x9a, 0x92, 0x82, 0x74, 0x71, 0x85, 0x96, 0x9c, - 0x97, 0x8f, 0x96, 0x90, 0x86, 0x75, 0x73, 0x77, 0x7a, 0x7d, 0x75, - 0x7a, 0x7a, 0x7d, 0x70, 0x61, 0x5f, 0x59, 0x52, 0x4e, 0x68, 0x97, - 0xb6, 0xb5, 0x9c, 0x8d, 0x84, 0x7c, 0x6d, 0x6e, 0x8b, 0xa3, 0xa9, - 0x95, 0x8a, 0x89, 0x8a, 0x80, 0x71, 0x71, 0x7b, 0x80, 0x7c, 0x76, - 0x77, 0x7d, 0x7c, 0x72, 0x62, 0x60, 0x5a, 0x54, 0x4c, 0x65, 0x9b, - 0xbd, 0xb9, 0x96, 0x86, 0x80, 0x7c, 0x70, 0x6f, 0x87, 0xa6, 0xaf, - 0x9b, 0x86, 0x80, 0x87, 0x82, 0x76, 0x74, 0x7d, 0x87, 0x80, 0x75, - 0x71, 0x77, 0x7f, 0x77, 0x66, 0x5d, 0x5d, 0x5c, 0x54, 0x55, 0x7d, - 0xab, 0xc4, 0xac, 0x8a, 0x7b, 0x7a, 0x7a, 0x73, 0x7a, 0x91, 0xa9, - 0xa5, 0x92, 0x7e, 0x7d, 0x81, 0x7c, 0x74, 0x76, 0x80, 0x83, 0x7b, - 0x74, 0x77, 0x7f, 0x7d, 0x72, 0x60, 0x5a, 0x5c, 0x5c, 0x56, 0x60, - 0x8c, 0xb9, 0xc4, 0xa4, 0x82, 0x71, 0x78, 0x7d, 0x7d, 0x86, 0x95, - 0xa8, 0xa1, 0x8e, 0x7e, 0x76, 0x79, 0x74, 0x7a, 0x83, 0x8b, 0x85, - 0x76, 0x71, 0x78, 0x80, 0x7a, 0x71, 0x66, 0x63, 0x5f, 0x5a, 0x59, - 0x60, 0x85, 0xae, 0xc1, 0xab, 0x86, 0x70, 0x6f, 0x7a, 0x82, 0x8c, - 0x90, 0x99, 0x98, 0x94, 0x85, 0x7d, 0x76, 0x79, 0x7c, 0x85, 0x8a, - 0x88, 0x7f, 0x74, 0x75, 0x76, 0x79, 0x71, 0x6f, 0x66, 0x67, 0x62, - 0x62, 0x5e, 0x61, 0x81, 0xa7, 0xbd, 0xab, 0x87, 0x71, 0x6f, 0x7a, - 0x87, 0x8e, 0x93, 0x96, 0x96, 0x90, 0x89, 0x7f, 0x7e, 0x7c, 0x82, - 0x87, 0x87, 0x87, 0x7f, 0x7d, 0x77, 0x77, 0x73, 0x72, 0x6c, 0x6a, - 0x66, 0x6a, 0x65, 0x62, 0x57, 0x70, 0x9a, 0xbd, 0xbc, 0x93, 0x76, - 0x62, 0x77, 0x81, 0x95, 0x8d, 0x94, 0x91, 0x95, 0x8d, 0x82, 0x7c, - 0x7d, 0x88, 0x85, 0x85, 0x7b, 0x83, 0x80, 0x81, 0x78, 0x73, 0x6e, - 0x70, 0x71, 0x70, 0x69, 0x68, 0x62, 0x61, 0x55, 0x74, 0x97, 0xc1, - 0xbe, 0x98, 0x77, 0x61, 0x74, 0x80, 0x92, 0x8d, 0x94, 0x8f, 0x98, - 0x90, 0x88, 0x7b, 0x77, 0x7b, 0x88, 0x8b, 0x88, 0x7c, 0x75, 0x7a, - 0x7f, 0x83, 0x78, 0x71, 0x6e, 0x79, 0x75, 0x70, 0x65, 0x60, 0x5d, - 0x58, 0x6f, 0x9c, 0xc2, 0xc4, 0x9d, 0x76, 0x60, 0x6b, 0x7d, 0x92, - 0x90, 0x8f, 0x8e, 0x91, 0x93, 0x88, 0x7d, 0x75, 0x7a, 0x80, 0x88, - 0x81, 0x7d, 0x77, 0x7e, 0x87, 0x88, 0x7e, 0x72, 0x6b, 0x6e, 0x75, - 0x7c, 0x7a, 0x6f, 0x64, 0x5e, 0x60, 0x62, 0x82, 0xa2, 0xc3, 0xb9, - 0x98, 0x73, 0x5e, 0x68, 0x7c, 0x91, 0x91, 0x93, 0x8e, 0x95, 0x90, - 0x8b, 0x7b, 0x75, 0x73, 0x7f, 0x84, 0x85, 0x82, 0x7b, 0x7e, 0x7a, - 0x82, 0x7f, 0x7f, 0x77, 0x76, 0x6f, 0x76, 0x74, 0x76, 0x6c, 0x68, - 0x62, 0x61, 0x60, 0x75, 0x9d, 0xbd, 0xc3, 0xa1, 0x7a, 0x59, 0x5f, - 0x74, 0x96, 0x9b, 0x9e, 0x93, 0x92, 0x8e, 0x88, 0x7c, 0x6f, 0x69, - 0x72, 0x83, 0x8d, 0x90, 0x86, 0x81, 0x7b, 0x7f, 0x7b, 0x7a, 0x71, - 0x78, 0x82, 0x90, 0x8f, 0x81, 0x70, 0x6b, 0x72, 0x80, 0x85, 0x7c, - 0x73, 0x6c, 0x72, 0x72, 0x6f, 0x67, 0x63, 0x61, 0x63, 0x76, 0x96, - 0xb6, 0xbe, 0xa8, 0x85, 0x65, 0x60, 0x71, 0x8a, 0x9b, 0x9a, 0x99, - 0x92, 0x90, 0x87, 0x7d, 0x71, 0x6b, 0x71, 0x7f, 0x8c, 0x91, 0x8a, - 0x80, 0x77, 0x76, 0x78, 0x76, 0x77, 0x77, 0x7d, 0x83, 0x8d, 0x90, - 0x8c, 0x7d, 0x74, 0x70, 0x75, 0x7b, 0x80, 0x7e, 0x78, 0x74, 0x73, - 0x70, 0x6a, 0x68, 0x67, 0x69, 0x65, 0x6e, 0x7d, 0xa1, 0xb8, 0xbe, - 0x9f, 0x77, 0x5b, 0x5d, 0x78, 0x94, 0xa5, 0xa0, 0x97, 0x8c, 0x8c, - 0x86, 0x80, 0x70, 0x6d, 0x6f, 0x81, 0x90, 0x94, 0x8d, 0x7e, 0x77, - 0x75, 0x7c, 0x79, 0x78, 0x72, 0x76, 0x7e, 0x8b, 0x90, 0x8c, 0x7f, - 0x77, 0x74, 0x77, 0x79, 0x79, 0x77, 0x76, 0x79, 0x7a, 0x78, 0x6d, - 0x67, 0x62, 0x69, 0x6a, 0x68, 0x64, 0x77, 0x9c, 0xbe, 0xc6, 0xa7, - 0x7e, 0x5b, 0x5d, 0x75, 0x96, 0xa6, 0xa3, 0x95, 0x8a, 0x86, 0x87, - 0x84, 0x7b, 0x71, 0x6e, 0x77, 0x85, 0x92, 0x93, 0x8d, 0x7d, 0x74, - 0x6f, 0x74, 0x78, 0x7d, 0x7a, 0x79, 0x76, 0x77, 0x76, 0x72, 0x6d, - 0x68, 0x6b, 0x69, 0x69, 0x63, 0x79, 0x98, 0xbf, 0xc6, 0xb1, 0x84, - 0x60, 0x5a, 0x6f, 0x92, 0xa5, 0xa8, 0x99, 0x8b, 0x83, 0x85, 0x85, - 0x80, 0x75, 0x71, 0x75, 0x83, 0x8f, 0x93, 0x8a, 0x7d, 0x72, 0x6e, - 0x73, 0x7a, 0x7e, 0x7b, 0x76, 0x72, 0x72, 0x71, 0x73, 0x70, 0x71, - 0x6d, 0x6b, 0x63, 0x67, 0x80, 0xa4, 0xc4, 0xc1, 0xa6, 0x78, 0x5e, - 0x5e, 0x7a, 0x99, 0xa7, 0xa2, 0x91, 0x86, 0x82, 0x86, 0x85, 0x80, - 0x75, 0x72, 0x77, 0x85, 0x8f, 0x91, 0x86, 0x79, 0x70, 0x6f, 0x77, - 0x7e, 0x81, 0x7b, 0x76, 0x71, 0x71, 0x71, 0x74, 0x72, 0x73, 0x6e, - 0x69, 0x63, 0x6f, 0x8d, 0xb1, 0xc3, 0xb5, 0x95, 0x6d, 0x60, 0x66, - 0x86, 0x9c, 0xa7, 0x9b, 0x8d, 0x82, 0x81, 0x84, 0x83, 0x7e, 0x76, - 0x76, 0x7c, 0x89, 0x8d, 0x8a, 0x7c, 0x74, 0x6f, 0x75, 0x7a, 0x80, - 0x7c, 0x77, 0x71, 0x71, 0x70, 0x72, 0x72, 0x73, 0x72, 0x6d, 0x67, - 0x67, 0x7e, 0x9e, 0xc0, 0xc0, 0xac, 0x82, 0x68, 0x62, 0x77, 0x91, - 0xa2, 0xa0, 0x92, 0x86, 0x80, 0x85, 0x85, 0x83, 0x7a, 0x77, 0x77, - 0x82, 0x88, 0x8c, 0x85, 0x7c, 0x73, 0x72, 0x74, 0x79, 0x7b, 0x7b, - 0x78, 0x76, 0x74, 0x74, 0x74, 0x73, 0x72, 0x71, 0x72, 0x6d, 0x6c, - 0x71, 0x87, 0xa2, 0xba, 0xba, 0xa7, 0x86, 0x6f, 0x6b, 0x7a, 0x8f, - 0x9d, 0x9d, 0x92, 0x88, 0x82, 0x84, 0x84, 0x83, 0x7e, 0x7d, 0x7f, - 0x83, 0x84, 0x7f, 0x78, 0x71, 0x72, 0x77, 0x7f, 0x7f, 0x7b, 0x72, - 0x6d, 0x6d, 0x71, 0x75, 0x76, 0x77, 0x72, 0x6d, 0x68, 0x71, 0x88, - 0xa8, 0xbd, 0xb9, 0xa1, 0x80, 0x6d, 0x6c, 0x80, 0x94, 0xa0, 0x9a, - 0x8f, 0x84, 0x81, 0x84, 0x85, 0x84, 0x7f, 0x7e, 0x7f, 0x83, 0x82, - 0x7e, 0x76, 0x72, 0x73, 0x7a, 0x80, 0x81, 0x7b, 0x73, 0x6c, 0x6d, - 0x72, 0x77, 0x78, 0x76, 0x73, 0x6f, 0x6e, 0x70, 0x7f, 0x97, 0xb0, - 0xb8, 0xae, 0x94, 0x7c, 0x6f, 0x75, 0x86, 0x96, 0x9d, 0x98, 0x8d, - 0x83, 0x80, 0x81, 0x83, 0x81, 0x7f, 0x7d, 0x7f, 0x81, 0x81, 0x7d, - 0x77, 0x73, 0x74, 0x7a, 0x80, 0x80, 0x7a, 0x71, 0x6b, 0x6c, 0x72, - 0x79, 0x7c, 0x7a, 0x76, 0x6e, 0x6a, 0x6d, 0x7e, 0x97, 0xae, 0xb7, - 0xad, 0x96, 0x7d, 0x71, 0x76, 0x87, 0x97, 0x9d, 0x97, 0x8c, 0x82, - 0x7e, 0x80, 0x82, 0x82, 0x7d, 0x7a, 0x7c, 0x82, 0x87, 0x87, 0x80, - 0x76, 0x6f, 0x6f, 0x77, 0x7f, 0x83, 0x80, 0x76, 0x6d, 0x6a, 0x6e, - 0x75, 0x7b, 0x7b, 0x79, 0x73, 0x6f, 0x6d, 0x72, 0x80, 0x94, 0xa9, - 0xb1, 0xac, 0x99, 0x85, 0x77, 0x78, 0x83, 0x91, 0x98, 0x97, 0x8e, - 0x85, 0x80, 0x7f, 0x81, 0x81, 0x7f, 0x7b, 0x7b, 0x7d, 0x82, 0x84, - 0x84, 0x7e, 0x77, 0x71, 0x72, 0x77, 0x7d, 0x7f, 0x7d, 0x76, 0x70, - 0x6f, 0x70, 0x75, 0x77, 0x79, 0x77, 0x76, 0x72, 0x71, 0x72, 0x7d, - 0x8d, 0xa0, 0xac, 0xac, 0x9f, 0x8d, 0x7e, 0x78, 0x7e, 0x88, 0x93, - 0x95, 0x92, 0x88, 0x82, 0x7f, 0x80, 0x81, 0x81, 0x7e, 0x7b, 0x7a, - 0x7a, 0x7f, 0x83, 0x86, 0x83, 0x7d, 0x75, 0x72, 0x71, 0x77, 0x7c, - 0x7f, 0x7d, 0x79, 0x74, 0x71, 0x72, 0x76, 0x79, 0x79, 0x77, 0x75, - 0x74, 0x75, 0x78, 0x7b, 0x84, 0x8e, 0x9c, 0xa3, 0xa4, 0x99, 0x8c, - 0x7f, 0x7b, 0x7e, 0x88, 0x90, 0x92, 0x8f, 0x87, 0x82, 0x7d, 0x7e, - 0x7e, 0x81, 0x7f, 0x7e, 0x7a, 0x7a, 0x7b, 0x7f, 0x82, 0x83, 0x81, - 0x7c, 0x78, 0x74, 0x76, 0x78, 0x7d, 0x7f, 0x7f, 0x7d, 0x7a, 0x78, - 0x79, 0x7a, 0x7c, 0x7c, 0x7a, 0x77, 0x76, 0x77, 0x7a, 0x7d, 0x7e, - 0x7f, 0x7f, 0x7e, 0x7f, 0x83, 0x8b, 0x93, 0x9b, 0x9b, 0x97, 0x8d, - 0x84, 0x7f, 0x7f, 0x83, 0x88, 0x8a, 0x88, 0x85, 0x80, 0x7e, 0x7d, - 0x7e, 0x7d, 0x7d, 0x7c, 0x7b, 0x7b, 0x7b, 0x7c, 0x7c, 0x7c, 0x7c, - 0x7c, 0x7b, 0x7b, 0x7b, 0x7b, 0x7a, 0x7a, 0x7a, 0x7b, 0x7c, 0x7c, - 0x7d, 0x7d, 0x7d, 0x7d, 0x7e, 0x7e, 0x7f, 0x7f, 0x80, 0x81, 0x83, - 0x83, 0x83, 0x84, 0x85, 0x88, 0x8c, 0x8f, 0x90, 0x8e, 0x89, 0x85, - 0x82, 0x80, 0x81, 0x83, 0x84, 0x83, 0x82, 0x7f, 0x7e, 0x7c, 0x7b, - 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x79, 0x78, 0x76, 0x75, 0x75, 0x76, - 0x78, 0x79, 0x7a, 0x79, 0x78, 0x79, 0x7e, 0x86, 0x90, 0x97, 0x99, - 0x93, 0x8a, 0x82, 0x7f, 0x81, 0x87, 0x8c, 0x8e, 0x8b, 0x85, 0x81, - 0x7f, 0x80, 0x82, 0x84, 0x81, 0x7e, 0x7a, 0x78, 0x79, 0x7c, 0x7f, - 0x80, 0x7e, 0x7a, 0x77, 0x76, 0x77, 0x7a, 0x7d, 0x7e, 0x7d, 0x7b, - 0x7a, 0x7a, 0x7c, 0x7e, 0x7f, 0x80, 0x7f, 0x7e, 0x7d, 0x7d, 0x7e, - 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x81, 0x80, - 0x81, 0x80, 0x80, 0x80, 0x81, 0x81, 0x81, 0x81, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x81, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7e, 0x7e, 0x7e, 0x7e, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7e, 0x7e, 0x7e, 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x81, 0x81, 0x81, - 0x81, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x7e, 0x7e, - 0x7e, 0x7e, 0x7e, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7e, 0x7e, 0x7e, - 0x7d, 0x7d, 0x7d, 0x7e, 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x80, 0x80, 0x81, 0x81, 0x81, 0x80, 0x80, 0x80, 0x81, 0x82, 0x82, - 0x82, 0x82, 0x82, 0x82, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, - 0x81, 0x80, 0x7f, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7d, 0x7c, - 0x7c, 0x7c, 0x7c, 0x7d, 0x7d, 0x7d, 0x7c, 0x7c, 0x7b, 0x7b, 0x7c, - 0x7e, 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x7e, 0x7f, 0x80, 0x81, 0x81, - 0x81, 0x81, 0x81, 0x80, 0x81, 0x81, 0x82, 0x82, 0x83, 0x82, 0x81, - 0x81, 0x80, 0x80, 0x80, 0x81, 0x81, 0x81, 0x81, 0x80, 0x80, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7e, 0x7e, 0x7d, 0x7d, 0x7d, 0x7d, 0x7c, - 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7e, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x83, 0x83, - 0x82, 0x82, 0x82, 0x82, 0x83, 0x83, 0x83, 0x83, 0x82, 0x81, 0x81, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7e, 0x7e, 0x7d, 0x7d, 0x7e, - 0x7e, 0x7d, 0x7d, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7d, 0x7d, 0x7d, - 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x81, 0x81, 0x81, 0x81, 0x81, - 0x80, 0x80, 0x80, 0x81, 0x81, 0x81, 0x81, 0x80, 0x80, 0x7f, 0x7f, - 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x7f, 0x7e, 0x7e, 0x7e, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7e, 0x7e, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - }, - { // 7 - 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, - 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, - 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x80, - 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, - 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x80, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7e, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x80, - 0x81, 0x7f, 0x7e, 0x7f, 0x7f, 0x7f, 0x7e, 0x80, 0x7e, 0x82, 0x7d, - 0x85, 0x80, 0x7e, 0x82, 0x7f, 0x82, 0x80, 0x81, 0x82, 0x82, 0x7e, - 0x81, 0x7e, 0x80, 0x80, 0x7e, 0x7c, 0x7f, 0x7f, 0x7d, 0x82, 0x7d, - 0x81, 0x7e, 0x80, 0x7e, 0x7e, 0x7e, 0x7d, 0x81, 0x7d, 0x84, 0x7d, - 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x81, 0x7d, 0x82, 0x7d, 0x81, 0x7e, - 0x7f, 0x80, 0x7f, 0x80, 0x82, 0x81, 0x82, 0x81, 0x84, 0x7e, 0x7f, - 0x82, 0x7f, 0x80, 0x7f, 0x81, 0x7c, 0x81, 0x7d, 0x81, 0x7f, 0x7e, - 0x83, 0x81, 0x7e, 0x81, 0x7b, 0x80, 0x7f, 0x81, 0x83, 0x80, 0x7f, - 0x7c, 0x83, 0x7b, 0x82, 0x7d, 0x80, 0x7c, 0x81, 0x7f, 0x7f, 0x7e, - 0x7f, 0x7f, 0x80, 0x82, 0x7d, 0x7f, 0x7f, 0x7d, 0x7c, 0x81, 0x7a, - 0x81, 0x7e, 0x81, 0x7e, 0x80, 0x80, 0x80, 0x81, 0x81, 0x80, 0x80, - 0x7b, 0x82, 0x7f, 0x7f, 0x83, 0x7e, 0x7f, 0x7f, 0x81, 0x7f, 0x80, - 0x84, 0x80, 0x79, 0x82, 0x7c, 0x7d, 0x80, 0x83, 0x7a, 0x7e, 0x7f, - 0x7d, 0x81, 0x80, 0x7e, 0x7f, 0x7e, 0x7e, 0x82, 0x81, 0x81, 0x7f, - 0x81, 0x81, 0x80, 0x80, 0x84, 0x7c, 0x84, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x83, 0x83, 0x80, 0x81, 0x81, 0x7e, 0x80, 0x80, 0x79, 0x80, - 0x7c, 0x7f, 0x81, 0x81, 0x7b, 0x7d, 0x7f, 0x7d, 0x80, 0x82, 0x80, - 0x7d, 0x7d, 0x7d, 0x7d, 0x7b, 0x82, 0x7f, 0x7b, 0x83, 0x7a, 0x7f, - 0x7f, 0x81, 0x7c, 0x83, 0x80, 0x80, 0x81, 0x85, 0x7f, 0x7d, 0x84, - 0x7f, 0x7f, 0x80, 0x86, 0x79, 0x85, 0x7d, 0x83, 0x7e, 0x82, 0x80, - 0x86, 0x81, 0x83, 0x81, 0x80, 0x7e, 0x82, 0x82, 0x7c, 0x84, 0x7e, - 0x83, 0x7f, 0x87, 0x7d, 0x83, 0x82, 0x83, 0x7f, 0x86, 0x7e, 0x82, - 0x7f, 0x84, 0x7e, 0x82, 0x80, 0x83, 0x84, 0x80, 0x84, 0x7e, 0x82, - 0x7e, 0x85, 0x7c, 0x85, 0x7b, 0x7f, 0x80, 0x80, 0x7d, 0x84, 0x7e, - 0x80, 0x7f, 0x80, 0x7e, 0x7c, 0x82, 0x7a, 0x82, 0x7a, 0x80, 0x7b, - 0x7d, 0x7d, 0x7a, 0x84, 0x79, 0x7f, 0x7f, 0x7c, 0x7b, 0x82, 0x82, - 0x7e, 0x85, 0x7d, 0x7f, 0x7f, 0x86, 0x7d, 0x86, 0x83, 0x7d, 0x7f, - 0x85, 0x7a, 0x82, 0x83, 0x78, 0x83, 0x7f, 0x7c, 0x7f, 0x80, 0x77, - 0x81, 0x7e, 0x7c, 0x7c, 0x7f, 0x75, 0x7f, 0x78, 0x7b, 0x7c, 0x79, - 0x7b, 0x77, 0x81, 0x79, 0x81, 0x82, 0x7c, 0x7e, 0x81, 0x79, 0x86, - 0x79, 0x82, 0x7b, 0x7b, 0x7c, 0x79, 0x84, 0x77, 0x85, 0x7e, 0x7e, - 0x83, 0x80, 0x81, 0x83, 0x80, 0x83, 0x80, 0x7f, 0x81, 0x7b, 0x82, - 0x7d, 0x81, 0x80, 0x7e, 0x82, 0x7a, 0x82, 0x7f, 0x80, 0x82, 0x7d, - 0x82, 0x7a, 0x7e, 0x82, 0x79, 0x85, 0x7b, 0x7b, 0x81, 0x76, 0x86, - 0x7a, 0x82, 0x7e, 0x7e, 0x7f, 0x7e, 0x84, 0x7e, 0x87, 0x7d, 0x85, - 0x7e, 0x81, 0x84, 0x7c, 0x82, 0x7f, 0x7b, 0x80, 0x7d, 0x7e, 0x7c, - 0x81, 0x7f, 0x7f, 0x84, 0x7b, 0x85, 0x78, 0x87, 0x7e, 0x82, 0x83, - 0x7b, 0x82, 0x79, 0x82, 0x7f, 0x80, 0x7f, 0x82, 0x7a, 0x83, 0x81, - 0x81, 0x86, 0x7e, 0x84, 0x7c, 0x82, 0x7e, 0x81, 0x7e, 0x7e, 0x81, - 0x79, 0x84, 0x7b, 0x7f, 0x7c, 0x80, 0x7f, 0x7f, 0x84, 0x79, 0x85, - 0x79, 0x80, 0x85, 0x79, 0x83, 0x7e, 0x78, 0x80, 0x82, 0x7d, 0x7e, - 0x84, 0x79, 0x7c, 0x83, 0x7c, 0x7c, 0x7e, 0x80, 0x75, 0x87, 0x7d, - 0x81, 0x7e, 0x84, 0x7b, 0x81, 0x84, 0x7a, 0x86, 0x79, 0x87, 0x7a, - 0x87, 0x7f, 0x80, 0x7e, 0x84, 0x7d, 0x83, 0x82, 0x7b, 0x84, 0x7a, - 0x83, 0x80, 0x80, 0x7d, 0x7f, 0x7a, 0x7e, 0x7d, 0x80, 0x7f, 0x82, - 0x80, 0x7f, 0x81, 0x7f, 0x7b, 0x81, 0x7d, 0x7f, 0x82, 0x7e, 0x81, - 0x7f, 0x82, 0x82, 0x81, 0x7f, 0x80, 0x78, 0x7c, 0x7d, 0x77, 0x81, - 0x7c, 0x7e, 0x7f, 0x81, 0x7f, 0x80, 0x85, 0x7e, 0x8a, 0x80, 0x87, - 0x83, 0x7a, 0x85, 0x7a, 0x80, 0x83, 0x7b, 0x7f, 0x7c, 0x80, 0x80, - 0x85, 0x84, 0x84, 0x84, 0x7f, 0x81, 0x7c, 0x7c, 0x7b, 0x80, 0x7c, - 0x7f, 0x88, 0x70, 0x88, 0x7b, 0x7b, 0x8a, 0x80, 0x81, 0x7e, 0x86, - 0x71, 0x8b, 0x7f, 0x7b, 0x85, 0x7d, 0x72, 0x86, 0x74, 0x7d, 0x7e, - 0x82, 0x7b, 0x83, 0x83, 0x73, 0x89, 0x75, 0x89, 0x7c, 0x8c, 0x80, - 0x80, 0x83, 0x81, 0x7f, 0x86, 0x81, 0x7d, 0x7b, 0x80, 0x7a, 0x7d, - 0x86, 0x80, 0x7e, 0x8a, 0x7e, 0x7d, 0x83, 0x7a, 0x80, 0x7c, 0x8b, - 0x76, 0x85, 0x7f, 0x7b, 0x7f, 0x87, 0x7e, 0x82, 0x82, 0x7b, 0x7e, - 0x81, 0x7c, 0x85, 0x7b, 0x7f, 0x81, 0x77, 0x7e, 0x81, 0x77, 0x80, - 0x85, 0x7b, 0x84, 0x7e, 0x7f, 0x77, 0x84, 0x7c, 0x7d, 0x83, 0x7e, - 0x7d, 0x83, 0x86, 0x84, 0x83, 0x8e, 0x78, 0x86, 0x82, 0x7a, 0x7e, - 0x82, 0x74, 0x83, 0x7c, 0x79, 0x85, 0x75, 0x87, 0x79, 0x88, 0x81, - 0x81, 0x83, 0x80, 0x7d, 0x88, 0x7c, 0x86, 0x7f, 0x7f, 0x83, 0x7d, - 0x88, 0x7a, 0x85, 0x7b, 0x80, 0x7c, 0x7f, 0x7c, 0x7d, 0x7e, 0x7b, - 0x84, 0x7a, 0x82, 0x7f, 0x77, 0x80, 0x7e, 0x73, 0x84, 0x78, 0x7a, - 0x87, 0x7e, 0x87, 0x82, 0x88, 0x7e, 0x87, 0x83, 0x7f, 0x87, 0x7b, - 0x86, 0x7b, 0x82, 0x85, 0x7a, 0x85, 0x80, 0x79, 0x82, 0x7e, 0x76, - 0x86, 0x78, 0x81, 0x81, 0x80, 0x80, 0x81, 0x81, 0x7c, 0x88, 0x7a, - 0x87, 0x7b, 0x82, 0x7d, 0x81, 0x81, 0x7f, 0x80, 0x7c, 0x80, 0x78, - 0x81, 0x79, 0x7f, 0x7b, 0x84, 0x76, 0x87, 0x7d, 0x7b, 0x85, 0x7d, - 0x82, 0x7f, 0x88, 0x75, 0x87, 0x80, 0x7a, 0x87, 0x81, 0x7c, 0x85, - 0x7f, 0x7e, 0x84, 0x7e, 0x85, 0x7f, 0x83, 0x82, 0x81, 0x7e, 0x84, - 0x7c, 0x7e, 0x83, 0x79, 0x81, 0x79, 0x83, 0x79, 0x84, 0x7e, 0x85, - 0x79, 0x8b, 0x78, 0x7f, 0x87, 0x71, 0x8b, 0x73, 0x84, 0x7a, 0x80, - 0x7b, 0x85, 0x77, 0x82, 0x81, 0x76, 0x81, 0x80, 0x76, 0x85, 0x81, - 0x7a, 0x8d, 0x7d, 0x88, 0x86, 0x81, 0x87, 0x82, 0x7d, 0x83, 0x80, - 0x76, 0x88, 0x7d, 0x75, 0x90, 0x76, 0x7f, 0x86, 0x7e, 0x75, 0x8d, - 0x71, 0x82, 0x7f, 0x7c, 0x7e, 0x84, 0x7c, 0x83, 0x84, 0x79, 0x8a, - 0x75, 0x85, 0x79, 0x84, 0x75, 0x8b, 0x73, 0x8a, 0x79, 0x88, 0x7b, - 0x84, 0x80, 0x78, 0x87, 0x6f, 0x8a, 0x6e, 0x88, 0x76, 0x84, 0x7a, - 0x89, 0x7a, 0x88, 0x80, 0x81, 0x84, 0x81, 0x83, 0x81, 0x85, 0x7d, - 0x8c, 0x77, 0x8e, 0x77, 0x8b, 0x76, 0x8d, 0x71, 0x88, 0x79, 0x7c, - 0x7e, 0x7c, 0x7d, 0x77, 0x88, 0x6f, 0x8b, 0x75, 0x86, 0x79, 0x8a, - 0x75, 0x8d, 0x77, 0x88, 0x7a, 0x84, 0x7a, 0x82, 0x7a, 0x80, 0x7e, - 0x7a, 0x89, 0x73, 0x8c, 0x79, 0x85, 0x7d, 0x88, 0x76, 0x8a, 0x78, - 0x84, 0x77, 0x8c, 0x6f, 0x8f, 0x77, 0x82, 0x82, 0x80, 0x82, 0x7e, - 0x88, 0x77, 0x8e, 0x76, 0x8b, 0x7a, 0x88, 0x78, 0x88, 0x77, 0x84, - 0x7b, 0x7f, 0x7b, 0x82, 0x78, 0x82, 0x7e, 0x7e, 0x82, 0x7f, 0x80, - 0x81, 0x7e, 0x80, 0x7e, 0x7e, 0x81, 0x78, 0x85, 0x76, 0x86, 0x76, - 0x85, 0x78, 0x83, 0x7b, 0x80, 0x7e, 0x81, 0x7e, 0x82, 0x82, 0x7e, - 0x89, 0x7d, 0x84, 0x86, 0x7d, 0x86, 0x82, 0x81, 0x81, 0x82, 0x82, - 0x7e, 0x83, 0x80, 0x7c, 0x83, 0x7e, 0x7d, 0x82, 0x7d, 0x7d, 0x81, - 0x7d, 0x7b, 0x81, 0x78, 0x81, 0x76, 0x83, 0x73, 0x86, 0x75, 0x82, - 0x7d, 0x7e, 0x80, 0x7f, 0x7f, 0x81, 0x80, 0x7e, 0x84, 0x7b, 0x85, - 0x7c, 0x84, 0x7b, 0x87, 0x7b, 0x89, 0x7f, 0x89, 0x80, 0x8c, 0x81, - 0x85, 0x88, 0x7d, 0x86, 0x7e, 0x7c, 0x7c, 0x7a, 0x74, 0x79, 0x72, - 0x73, 0x71, 0x71, 0x6f, 0x75, 0x71, 0x79, 0x79, 0x7c, 0x84, 0x83, - 0x8d, 0x91, 0x95, 0x9c, 0x9f, 0xa0, 0xa3, 0xa2, 0x9c, 0x9c, 0x92, - 0x8b, 0x83, 0x77, 0x6f, 0x66, 0x5b, 0x5a, 0x50, 0x4d, 0x4f, 0x4b, - 0x50, 0x58, 0x59, 0x68, 0x72, 0x79, 0x8b, 0x92, 0x9b, 0xa9, 0xac, - 0xb5, 0xb8, 0xba, 0xbb, 0xb7, 0xb3, 0xad, 0xa3, 0x9a, 0x91, 0x81, - 0x7a, 0x6c, 0x62, 0x58, 0x55, 0x45, 0x4c, 0x3f, 0x41, 0x45, 0x41, - 0x4e, 0x52, 0x5f, 0x6c, 0x78, 0x88, 0x92, 0x9f, 0xaa, 0xb3, 0xb6, - 0xc1, 0xbc, 0xbe, 0xbb, 0xb2, 0xb0, 0xa2, 0x9d, 0x8e, 0x87, 0x79, - 0x73, 0x65, 0x63, 0x54, 0x55, 0x49, 0x47, 0x40, 0x43, 0x3d, 0x47, - 0x4f, 0x4f, 0x6a, 0x68, 0x82, 0x89, 0x9c, 0xa4, 0xb5, 0xb6, 0xc3, - 0xc4, 0xc4, 0xc3, 0xbe, 0xb6, 0xad, 0xa5, 0x96, 0x8e, 0x7f, 0x77, - 0x69, 0x63, 0x57, 0x53, 0x47, 0x44, 0x3c, 0x3b, 0x39, 0x3e, 0x47, - 0x4c, 0x5f, 0x67, 0x79, 0x86, 0x96, 0xa3, 0xb0, 0xb9, 0xc2, 0xc5, - 0xc7, 0xc6, 0xc1, 0xbb, 0xb0, 0xa9, 0x9a, 0x90, 0x83, 0x78, 0x6b, - 0x64, 0x5a, 0x54, 0x4a, 0x44, 0x3d, 0x3a, 0x38, 0x3e, 0x44, 0x4c, - 0x5b, 0x66, 0x73, 0x84, 0x91, 0xa0, 0xae, 0xb6, 0xc2, 0xc4, 0xca, - 0xc5, 0xc6, 0xba, 0xb5, 0xa7, 0x9e, 0x90, 0x85, 0x7a, 0x6e, 0x67, - 0x5c, 0x56, 0x4c, 0x46, 0x3c, 0x3e, 0x34, 0x40, 0x42, 0x48, 0x59, - 0x61, 0x6f, 0x83, 0x8c, 0x9f, 0xae, 0xb6, 0xc3, 0xc7, 0xcb, 0xc9, - 0xc8, 0xbc, 0xb6, 0xa9, 0x9e, 0x90, 0x86, 0x77, 0x6e, 0x63, 0x5c, - 0x51, 0x4c, 0x42, 0x3c, 0x3b, 0x34, 0x40, 0x41, 0x4b, 0x5a, 0x65, - 0x71, 0x87, 0x8e, 0xa4, 0xaf, 0xba, 0xc4, 0xc8, 0xcc, 0xc9, 0xc7, - 0xbc, 0xb5, 0xa7, 0x9d, 0x8d, 0x83, 0x75, 0x6c, 0x61, 0x5b, 0x50, - 0x4b, 0x42, 0x3c, 0x39, 0x35, 0x41, 0x3e, 0x4e, 0x58, 0x64, 0x73, - 0x85, 0x8f, 0xa4, 0xaf, 0xbb, 0xc6, 0xc8, 0xcf, 0xc9, 0xc8, 0xbc, - 0xb5, 0xa6, 0x9b, 0x8d, 0x82, 0x74, 0x6b, 0x5f, 0x59, 0x4f, 0x48, - 0x41, 0x3b, 0x36, 0x36, 0x41, 0x3e, 0x53, 0x58, 0x67, 0x77, 0x86, - 0x92, 0xa6, 0xb0, 0xbd, 0xc6, 0xc9, 0xce, 0xca, 0xc7, 0xbd, 0xb4, - 0xa7, 0x9b, 0x8c, 0x84, 0x73, 0x6d, 0x5f, 0x5a, 0x4e, 0x4b, 0x3d, - 0x3d, 0x32, 0x38, 0x40, 0x3b, 0x55, 0x56, 0x67, 0x77, 0x85, 0x91, - 0xaa, 0xaf, 0xc0, 0xc8, 0xca, 0xcf, 0xcc, 0xc6, 0xbe, 0xb3, 0xa5, - 0x99, 0x8c, 0x7f, 0x73, 0x69, 0x5d, 0x58, 0x4c, 0x47, 0x3d, 0x3b, - 0x2f, 0x41, 0x3a, 0x46, 0x58, 0x59, 0x6f, 0x7b, 0x87, 0x9a, 0xab, - 0xb2, 0xc4, 0xc4, 0xcc, 0xcb, 0xc9, 0xc3, 0xbb, 0xae, 0xa3, 0x94, - 0x8a, 0x7a, 0x72, 0x64, 0x5c, 0x54, 0x49, 0x43, 0x3b, 0x36, 0x32, - 0x42, 0x37, 0x50, 0x55, 0x5f, 0x73, 0x7e, 0x8a, 0xa1, 0xab, 0xb6, - 0xc4, 0xc4, 0xcc, 0xc9, 0xc8, 0xc0, 0xb8, 0xa9, 0xa0, 0x90, 0x86, - 0x77, 0x70, 0x60, 0x5c, 0x4f, 0x48, 0x3f, 0x3b, 0x33, 0x39, 0x41, - 0x3c, 0x56, 0x55, 0x67, 0x76, 0x83, 0x90, 0xa8, 0xac, 0xbd, 0xc5, - 0xc7, 0xce, 0xc9, 0xc7, 0xbd, 0xb4, 0xa5, 0x9b, 0x8c, 0x80, 0x74, - 0x6a, 0x5e, 0x58, 0x4c, 0x45, 0x3f, 0x38, 0x36, 0x40, 0x3c, 0x4a, - 0x56, 0x5b, 0x71, 0x7b, 0x8a, 0x9c, 0xa9, 0xb3, 0xc3, 0xc3, 0xcc, - 0xcb, 0xc7, 0xc3, 0xb8, 0xad, 0xa0, 0x94, 0x86, 0x7a, 0x70, 0x63, - 0x5b, 0x51, 0x48, 0x40, 0x3c, 0x33, 0x3b, 0x3d, 0x40, 0x52, 0x54, - 0x67, 0x74, 0x82, 0x91, 0xa3, 0xab, 0xbb, 0xc2, 0xc6, 0xcc, 0xc8, - 0xc6, 0xbd, 0xb4, 0xa8, 0x9b, 0x8e, 0x82, 0x75, 0x6c, 0x61, 0x57, - 0x4f, 0x45, 0x3e, 0x39, 0x34, 0x3e, 0x3b, 0x48, 0x52, 0x59, 0x6d, - 0x79, 0x87, 0x9b, 0xa7, 0xb3, 0xc0, 0xc3, 0xcb, 0xcb, 0xc8, 0xc4, - 0xba, 0xae, 0xa4, 0x95, 0x8b, 0x7c, 0x72, 0x67, 0x5e, 0x54, 0x4c, - 0x43, 0x3c, 0x38, 0x3a, 0x3f, 0x40, 0x50, 0x54, 0x62, 0x72, 0x7f, - 0x90, 0xa1, 0xab, 0xba, 0xc1, 0xc5, 0xcb, 0xc8, 0xc6, 0xbe, 0xb3, - 0xa8, 0x9c, 0x8e, 0x83, 0x75, 0x6b, 0x60, 0x57, 0x4d, 0x45, 0x3d, - 0x38, 0x38, 0x3d, 0x3f, 0x49, 0x54, 0x5c, 0x6e, 0x7a, 0x8b, 0x9c, - 0xa9, 0xb5, 0xc0, 0xc4, 0xc9, 0xca, 0xc5, 0xc2, 0xb5, 0xac, 0x9f, - 0x93, 0x86, 0x7a, 0x6f, 0x65, 0x5a, 0x53, 0x49, 0x40, 0x3d, 0x36, - 0x3f, 0x3d, 0x46, 0x51, 0x57, 0x67, 0x75, 0x83, 0x96, 0xa3, 0xb0, - 0xbc, 0xc2, 0xc7, 0xca, 0xc7, 0xc3, 0xbc, 0xaf, 0xa5, 0x97, 0x8a, - 0x7f, 0x72, 0x68, 0x5f, 0x53, 0x4c, 0x43, 0x3c, 0x38, 0x3b, 0x3e, - 0x42, 0x4f, 0x55, 0x62, 0x71, 0x7d, 0x8f, 0x9d, 0xab, 0xb6, 0xc1, - 0xc3, 0xc9, 0xc7, 0xc4, 0xbf, 0xb1, 0xa9, 0x9c, 0x8e, 0x83, 0x78, - 0x6b, 0x64, 0x58, 0x51, 0x47, 0x40, 0x3a, 0x39, 0x3e, 0x3f, 0x49, - 0x53, 0x5a, 0x6d, 0x78, 0x88, 0x99, 0xa6, 0xb2, 0xbe, 0xc2, 0xc8, - 0xc9, 0xc3, 0xc4, 0xb2, 0xae, 0x9e, 0x91, 0x86, 0x79, 0x6d, 0x67, - 0x58, 0x51, 0x4a, 0x3d, 0x3d, 0x38, 0x3c, 0x40, 0x48, 0x51, 0x5e, - 0x68, 0x7a, 0x87, 0x96, 0xa5, 0xb2, 0xbb, 0xc4, 0xc6, 0xc8, 0xc6, - 0xc0, 0xb7, 0xab, 0xa0, 0x92, 0x87, 0x79, 0x6f, 0x65, 0x5b, 0x51, - 0x4a, 0x40, 0x3c, 0x3a, 0x3d, 0x41, 0x49, 0x53, 0x5c, 0x6d, 0x78, - 0x88, 0x98, 0xa3, 0xb2, 0xbc, 0xc1, 0xc8, 0xc6, 0xc4, 0xc1, 0xb3, - 0xae, 0x9e, 0x93, 0x88, 0x79, 0x6e, 0x66, 0x58, 0x52, 0x49, 0x3f, - 0x3d, 0x38, 0x3d, 0x41, 0x49, 0x53, 0x5d, 0x6c, 0x7a, 0x88, 0x98, - 0xa6, 0xb2, 0xbc, 0xc4, 0xc4, 0xca, 0xc2, 0xc1, 0xb6, 0xab, 0xa0, - 0x91, 0x86, 0x79, 0x6d, 0x63, 0x5a, 0x4e, 0x49, 0x3d, 0x3b, 0x3a, - 0x3d, 0x42, 0x4d, 0x54, 0x61, 0x70, 0x7b, 0x8e, 0x9b, 0xa9, 0xb7, - 0xbe, 0xc6, 0xc8, 0xc7, 0xc6, 0xbc, 0xb5, 0xa9, 0x9b, 0x8f, 0x82, - 0x74, 0x6b, 0x60, 0x56, 0x4d, 0x43, 0x3d, 0x39, 0x3a, 0x40, 0x43, - 0x4f, 0x57, 0x63, 0x73, 0x80, 0x90, 0x9f, 0xac, 0xb8, 0xc1, 0xc6, - 0xc7, 0xc6, 0xc2, 0xb8, 0xb0, 0xa1, 0x95, 0x89, 0x7b, 0x71, 0x66, - 0x5c, 0x53, 0x49, 0x41, 0x3b, 0x3a, 0x3d, 0x40, 0x49, 0x53, 0x5d, - 0x6c, 0x7a, 0x88, 0x98, 0xa5, 0xb4, 0xbc, 0xc3, 0xc8, 0xc6, 0xc5, - 0xbe, 0xb2, 0xa9, 0x99, 0x8d, 0x82, 0x75, 0x6c, 0x61, 0x56, 0x4e, - 0x44, 0x3d, 0x3b, 0x3b, 0x40, 0x45, 0x4f, 0x57, 0x66, 0x74, 0x82, - 0x93, 0xa0, 0xae, 0xb9, 0xc0, 0xc7, 0xc7, 0xc5, 0xc2, 0xb5, 0xae, - 0x9e, 0x91, 0x87, 0x78, 0x6f, 0x67, 0x58, 0x53, 0x48, 0x40, 0x3e, - 0x3b, 0x40, 0x44, 0x4c, 0x56, 0x60, 0x6f, 0x7d, 0x8d, 0x9b, 0xa9, - 0xb4, 0xbc, 0xc4, 0xc4, 0xc6, 0xc2, 0xb8, 0xb0, 0xa2, 0x94, 0x8a, - 0x7b, 0x73, 0x66, 0x5d, 0x53, 0x4a, 0x43, 0x3d, 0x3d, 0x41, 0x44, - 0x4e, 0x57, 0x60, 0x71, 0x7d, 0x8d, 0x9c, 0xa9, 0xb4, 0xbd, 0xc1, - 0xc7, 0xc1, 0xc1, 0xb7, 0xab, 0xa3, 0x91, 0x88, 0x7c, 0x6f, 0x68, - 0x5d, 0x53, 0x4e, 0x43, 0x40, 0x3f, 0x41, 0x47, 0x4f, 0x58, 0x63, - 0x70, 0x7e, 0x8d, 0x9b, 0xa8, 0xb4, 0xbb, 0xc2, 0xc4, 0xc2, 0xbf, - 0xb8, 0xab, 0xa3, 0x92, 0x88, 0x7d, 0x71, 0x6a, 0x5f, 0x56, 0x4e, - 0x47, 0x3f, 0x40, 0x3f, 0x46, 0x4b, 0x56, 0x5e, 0x6c, 0x7a, 0x89, - 0x98, 0xa4, 0xb2, 0xb7, 0xc0, 0xc2, 0xc2, 0xbe, 0xbb, 0xae, 0xa7, - 0x98, 0x8c, 0x83, 0x76, 0x6e, 0x65, 0x5b, 0x53, 0x4c, 0x41, 0x43, - 0x3f, 0x45, 0x4a, 0x50, 0x5c, 0x64, 0x75, 0x80, 0x92, 0x9c, 0xab, - 0xb2, 0xba, 0xc0, 0xbf, 0xc0, 0xbc, 0xb2, 0xa9, 0x9f, 0x90, 0x89, - 0x7a, 0x72, 0x68, 0x5f, 0x56, 0x50, 0x46, 0x43, 0x44, 0x41, 0x4d, - 0x4c, 0x5a, 0x61, 0x6f, 0x7c, 0x8b, 0x98, 0xa4, 0xb0, 0xb5, 0xbf, - 0xbe, 0xbf, 0xbb, 0xb5, 0xaa, 0xa2, 0x93, 0x8a, 0x7d, 0x73, 0x6b, - 0x61, 0x5a, 0x53, 0x4c, 0x44, 0x48, 0x41, 0x4d, 0x4e, 0x57, 0x61, - 0x6a, 0x7a, 0x85, 0x95, 0x9e, 0xad, 0xaf, 0xbc, 0xba, 0xbe, 0xb9, - 0xb4, 0xad, 0xa1, 0x98, 0x8a, 0x82, 0x74, 0x6f, 0x62, 0x5f, 0x53, - 0x51, 0x45, 0x4a, 0x43, 0x4b, 0x51, 0x53, 0x64, 0x65, 0x7b, 0x80, - 0x93, 0x9a, 0xaa, 0xad, 0xb8, 0xb9, 0xb9, 0xbb, 0xb1, 0xaf, 0xa0, - 0x9a, 0x8b, 0x84, 0x76, 0x72, 0x64, 0x62, 0x57, 0x53, 0x4b, 0x49, - 0x4a, 0x48, 0x56, 0x52, 0x65, 0x66, 0x77, 0x80, 0x8e, 0x98, 0xa5, - 0xac, 0xb4, 0xb9, 0xb7, 0xbc, 0xb1, 0xb1, 0xa2, 0x9e, 0x8d, 0x87, - 0x79, 0x73, 0x68, 0x63, 0x58, 0x56, 0x4d, 0x4a, 0x4e, 0x47, 0x58, - 0x52, 0x63, 0x66, 0x74, 0x7c, 0x8d, 0x91, 0xa3, 0xa7, 0xaf, 0xb6, - 0xb3, 0xb8, 0xaf, 0xaf, 0xa1, 0x9d, 0x8c, 0x89, 0x78, 0x76, 0x69, - 0x65, 0x5a, 0x58, 0x4f, 0x4e, 0x4f, 0x4a, 0x58, 0x54, 0x64, 0x68, - 0x75, 0x7d, 0x8d, 0x91, 0xa3, 0xa4, 0xaf, 0xb2, 0xb2, 0xb7, 0xad, - 0xae, 0xa0, 0x9b, 0x8d, 0x87, 0x79, 0x76, 0x68, 0x66, 0x5a, 0x58, - 0x51, 0x4f, 0x52, 0x4d, 0x5b, 0x57, 0x65, 0x6b, 0x74, 0x7f, 0x8c, - 0x91, 0xa1, 0xa3, 0xad, 0xb0, 0xb1, 0xb1, 0xad, 0xaa, 0x9f, 0x9b, - 0x8c, 0x87, 0x7a, 0x74, 0x6a, 0x66, 0x5a, 0x5b, 0x51, 0x53, 0x53, - 0x50, 0x5c, 0x5a, 0x66, 0x6e, 0x75, 0x81, 0x8c, 0x92, 0xa1, 0xa3, - 0xab, 0xad, 0xb0, 0xab, 0xac, 0xa4, 0x9b, 0x98, 0x88, 0x85, 0x78, - 0x72, 0x6a, 0x64, 0x5c, 0x5c, 0x53, 0x57, 0x55, 0x55, 0x60, 0x5d, - 0x6a, 0x71, 0x77, 0x84, 0x8d, 0x92, 0xa0, 0xa2, 0xa7, 0xad, 0xa9, - 0xaa, 0xa8, 0x9e, 0x9c, 0x91, 0x88, 0x84, 0x76, 0x73, 0x6b, 0x62, - 0x61, 0x5a, 0x56, 0x5b, 0x54, 0x5c, 0x61, 0x60, 0x70, 0x72, 0x7b, - 0x87, 0x8c, 0x95, 0x9f, 0x9f, 0xa7, 0xa9, 0xa5, 0xa9, 0xa0, 0x9c, - 0x97, 0x8c, 0x86, 0x80, 0x75, 0x73, 0x68, 0x65, 0x61, 0x5b, 0x5a, - 0x5b, 0x5a, 0x5f, 0x65, 0x66, 0x74, 0x74, 0x80, 0x87, 0x8e, 0x96, - 0x9d, 0x9e, 0xa6, 0xa3, 0xa4, 0xa4, 0x9c, 0x9b, 0x92, 0x8b, 0x85, - 0x7e, 0x75, 0x74, 0x68, 0x68, 0x60, 0x60, 0x5d, 0x5f, 0x5d, 0x64, - 0x66, 0x6b, 0x74, 0x77, 0x81, 0x86, 0x8f, 0x93, 0x9b, 0x9b, 0xa3, - 0x9f, 0xa3, 0x9f, 0x9b, 0x98, 0x90, 0x8a, 0x84, 0x7d, 0x77, 0x72, - 0x6b, 0x69, 0x62, 0x62, 0x5f, 0x61, 0x61, 0x65, 0x69, 0x6d, 0x74, - 0x7a, 0x7f, 0x88, 0x8c, 0x92, 0x98, 0x9a, 0x9e, 0x9e, 0x9f, 0x9c, - 0x9a, 0x94, 0x90, 0x89, 0x84, 0x7d, 0x78, 0x72, 0x6e, 0x69, 0x66, - 0x65, 0x62, 0x64, 0x65, 0x67, 0x6c, 0x6f, 0x74, 0x7c, 0x7e, 0x88, - 0x8b, 0x90, 0x95, 0x98, 0x9a, 0x9d, 0x9b, 0x9a, 0x98, 0x92, 0x8f, - 0x89, 0x84, 0x7e, 0x78, 0x73, 0x70, 0x69, 0x69, 0x65, 0x65, 0x66, - 0x67, 0x69, 0x6d, 0x71, 0x76, 0x7c, 0x80, 0x86, 0x8b, 0x8f, 0x93, - 0x96, 0x97, 0x9a, 0x98, 0x97, 0x95, 0x91, 0x8d, 0x89, 0x83, 0x7f, - 0x79, 0x75, 0x71, 0x6d, 0x6b, 0x69, 0x68, 0x69, 0x69, 0x6b, 0x70, - 0x71, 0x77, 0x7b, 0x80, 0x85, 0x8a, 0x8e, 0x92, 0x94, 0x96, 0x97, - 0x96, 0x95, 0x92, 0x8f, 0x8a, 0x86, 0x81, 0x7d, 0x78, 0x74, 0x70, - 0x6e, 0x6c, 0x6b, 0x6b, 0x6b, 0x6d, 0x70, 0x72, 0x77, 0x7a, 0x7f, - 0x84, 0x88, 0x8c, 0x8f, 0x92, 0x94, 0x94, 0x94, 0x93, 0x91, 0x8e, - 0x8b, 0x86, 0x82, 0x7e, 0x7a, 0x77, 0x73, 0x71, 0x6f, 0x6f, 0x6d, - 0x6e, 0x6f, 0x71, 0x73, 0x76, 0x78, 0x7c, 0x7f, 0x82, 0x86, 0x88, - 0x8b, 0x8d, 0x8f, 0x8f, 0x90, 0x8f, 0x8e, 0x8c, 0x89, 0x87, 0x83, - 0x80, 0x7d, 0x7a, 0x77, 0x76, 0x73, 0x73, 0x72, 0x72, 0x73, 0x74, - 0x75, 0x78, 0x7a, 0x7c, 0x7f, 0x81, 0x84, 0x85, 0x88, 0x89, 0x8b, - 0x8c, 0x8c, 0x8c, 0x8a, 0x89, 0x87, 0x85, 0x82, 0x80, 0x7e, 0x7c, - 0x7a, 0x78, 0x77, 0x76, 0x76, 0x76, 0x76, 0x77, 0x79, 0x7a, 0x7c, - 0x7d, 0x7f, 0x81, 0x82, 0x83, 0x85, 0x85, 0x86, 0x86, 0x86, 0x86, - 0x86, 0x85, 0x84, 0x83, 0x81, 0x81, 0x7f, 0x7e, 0x7d, 0x7c, 0x7c, - 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7c, 0x7d, 0x7d, 0x7e, 0x7f, 0x7f, - 0x81, 0x81, 0x82, 0x82, 0x83, 0x83, 0x83, 0x83, 0x83, 0x82, 0x82, - 0x81, 0x81, 0x80, 0x7f, 0x7f, 0x7f, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, - 0x7e, 0x7e, 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x80, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, - 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x80, - 0x80, 0x7f, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7f, - 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, - 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x80, - }, - { // 8 - 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, - 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, - 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x7f, - 0x80, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, - 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x80, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7e, 0x7e, 0x7f, 0x80, 0x80, 0x7f, - 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x7e, - 0x80, 0x80, 0x7f, 0x81, 0x80, 0x80, 0x81, 0x81, 0x80, 0x81, 0x81, - 0x81, 0x81, 0x82, 0x83, 0x91, 0x9c, 0x7a, 0x74, 0x82, 0x82, 0x97, - 0x94, 0x83, 0x74, 0x6d, 0x72, 0x7c, 0x80, 0x7a, 0x71, 0x6d, 0x6a, - 0x69, 0x72, 0x79, 0x7f, 0x82, 0x82, 0x7e, 0x7f, 0x82, 0x83, 0x82, - 0x84, 0x81, 0x83, 0x86, 0x86, 0x89, 0x89, 0x8a, 0x8a, 0x88, 0x85, - 0x80, 0x7b, 0x78, 0x71, 0x71, 0x6e, 0x6f, 0x70, 0x70, 0x71, 0x75, - 0x78, 0x78, 0x7d, 0x8a, 0xa1, 0xa7, 0xa7, 0x9a, 0x92, 0x8e, 0x91, - 0x95, 0x97, 0x94, 0x8b, 0x80, 0x71, 0x6a, 0x60, 0x5d, 0x59, 0x58, - 0x54, 0x56, 0x58, 0x6c, 0x83, 0xa0, 0xb8, 0xa7, 0x8f, 0x72, 0x6b, - 0x78, 0x88, 0x9b, 0xad, 0xa9, 0x98, 0x85, 0x79, 0x76, 0x78, 0x7e, - 0x81, 0x81, 0x77, 0x6e, 0x66, 0x62, 0x64, 0x60, 0x5c, 0x5a, 0x6e, - 0x7e, 0xa0, 0xb2, 0xa1, 0x91, 0x6f, 0x69, 0x78, 0x89, 0xa2, 0xaa, - 0xa9, 0x9d, 0x8c, 0x7c, 0x70, 0x77, 0x84, 0x90, 0x89, 0x7e, 0x6e, - 0x66, 0x5c, 0x5f, 0x62, 0x65, 0x5a, 0x66, 0x79, 0x90, 0xbf, 0xa9, - 0x95, 0x72, 0x5e, 0x73, 0x85, 0x9c, 0xb1, 0xa8, 0xa3, 0x8a, 0x7a, - 0x73, 0x71, 0x84, 0x8a, 0x8e, 0x7f, 0x72, 0x69, 0x61, 0x62, 0x66, - 0x60, 0x62, 0x4e, 0x66, 0x7e, 0x9f, 0xc8, 0xa3, 0x89, 0x68, 0x5c, - 0x77, 0x89, 0xa5, 0xb6, 0xa8, 0x9b, 0x7d, 0x74, 0x77, 0x7a, 0x8b, - 0x8c, 0x88, 0x77, 0x6f, 0x68, 0x69, 0x6e, 0x69, 0x62, 0x5b, 0x4b, - 0x67, 0x7f, 0xa0, 0xc7, 0xa2, 0x86, 0x60, 0x56, 0x7a, 0x90, 0xac, - 0xb5, 0xa4, 0x93, 0x76, 0x74, 0x7b, 0x80, 0x8e, 0x8d, 0x87, 0x75, - 0x6a, 0x6c, 0x70, 0x71, 0x6c, 0x5d, 0x5a, 0x4c, 0x63, 0x85, 0xa0, - 0xc6, 0xa9, 0x81, 0x5f, 0x57, 0x79, 0x98, 0xaf, 0xb4, 0x9f, 0x88, - 0x6f, 0x72, 0x80, 0x89, 0x92, 0x8a, 0x80, 0x6c, 0x69, 0x6b, 0x74, - 0x79, 0x72, 0x5e, 0x52, 0x44, 0x60, 0x88, 0xa0, 0xc9, 0xab, 0x84, - 0x5c, 0x51, 0x79, 0x9b, 0xb4, 0xb7, 0xa0, 0x86, 0x6f, 0x70, 0x82, - 0x8b, 0x92, 0x87, 0x7e, 0x6b, 0x68, 0x72, 0x79, 0x7d, 0x71, 0x5c, - 0x53, 0x4b, 0x5b, 0x8a, 0x9a, 0xc5, 0xb3, 0x80, 0x62, 0x4c, 0x74, - 0x9b, 0xb2, 0xb4, 0x9d, 0x85, 0x71, 0x71, 0x89, 0x90, 0x95, 0x88, - 0x78, 0x6d, 0x6a, 0x76, 0x7c, 0x7e, 0x72, 0x5e, 0x52, 0x52, 0x55, - 0x7f, 0x92, 0xb9, 0xc1, 0x89, 0x67, 0x4a, 0x6b, 0x9b, 0xb1, 0xb6, - 0x9f, 0x86, 0x76, 0x73, 0x88, 0x8f, 0x95, 0x88, 0x74, 0x6c, 0x68, - 0x79, 0x7d, 0x7e, 0x6f, 0x5c, 0x54, 0x4f, 0x52, 0x78, 0x91, 0xaf, - 0xc6, 0x92, 0x6c, 0x4f, 0x60, 0x94, 0xaf, 0xb9, 0xa2, 0x86, 0x75, - 0x73, 0x89, 0x95, 0x94, 0x89, 0x75, 0x6e, 0x6a, 0x7a, 0x82, 0x81, - 0x71, 0x5a, 0x51, 0x53, 0x56, 0x6c, 0x8a, 0x9e, 0xc6, 0xa1, 0x71, - 0x54, 0x54, 0x8d, 0xad, 0xb8, 0xa6, 0x88, 0x79, 0x73, 0x84, 0x96, - 0x94, 0x8d, 0x73, 0x6d, 0x6a, 0x77, 0x80, 0x80, 0x79, 0x63, 0x50, - 0x4b, 0x52, 0x65, 0x8d, 0x96, 0xbe, 0xae, 0x77, 0x5a, 0x4c, 0x81, - 0xac, 0xba, 0xad, 0x8a, 0x79, 0x73, 0x83, 0x9b, 0x94, 0x8d, 0x77, - 0x6e, 0x6e, 0x75, 0x84, 0x80, 0x78, 0x60, 0x56, 0x57, 0x5b, 0x57, - 0x7a, 0x8e, 0xb1, 0xc0, 0x83, 0x66, 0x4d, 0x71, 0xa0, 0xaf, 0xb1, - 0x95, 0x7c, 0x74, 0x7a, 0x93, 0x97, 0x8f, 0x7e, 0x6d, 0x71, 0x71, - 0x84, 0x7f, 0x78, 0x66, 0x59, 0x53, 0x59, 0x59, 0x76, 0x8c, 0xa1, - 0xc5, 0x91, 0x6e, 0x53, 0x65, 0x9b, 0xaf, 0xb2, 0x9c, 0x81, 0x7a, - 0x7a, 0x90, 0x99, 0x8f, 0x82, 0x6e, 0x71, 0x71, 0x82, 0x83, 0x79, - 0x6a, 0x58, 0x57, 0x5d, 0x59, 0x68, 0x84, 0x95, 0xbf, 0xa4, 0x75, - 0x5a, 0x5a, 0x8d, 0xaa, 0xb1, 0xa2, 0x88, 0x7b, 0x79, 0x89, 0x9b, - 0x94, 0x87, 0x73, 0x72, 0x72, 0x7c, 0x86, 0x7b, 0x6f, 0x5a, 0x5b, - 0x5d, 0x5b, 0x60, 0x7d, 0x8d, 0xba, 0xb0, 0x7e, 0x63, 0x52, 0x83, - 0xa3, 0xb5, 0xa8, 0x8d, 0x7c, 0x76, 0x85, 0x9a, 0x97, 0x8c, 0x75, - 0x6f, 0x71, 0x76, 0x88, 0x7e, 0x73, 0x5d, 0x5a, 0x58, 0x5c, 0x58, - 0x74, 0x89, 0xaa, 0xbb, 0x87, 0x6a, 0x50, 0x75, 0x9d, 0xb0, 0xab, - 0x90, 0x81, 0x77, 0x81, 0x9a, 0x99, 0x8d, 0x76, 0x6f, 0x76, 0x79, - 0x84, 0x7c, 0x70, 0x5c, 0x5a, 0x5d, 0x5f, 0x5d, 0x7a, 0x86, 0xb4, - 0xb5, 0x80, 0x63, 0x4e, 0x80, 0xa3, 0xb3, 0xa7, 0x8d, 0x7f, 0x78, - 0x87, 0x9b, 0x9a, 0x8b, 0x72, 0x70, 0x73, 0x7f, 0x82, 0x79, 0x6c, - 0x5e, 0x5c, 0x5b, 0x5a, 0x5b, 0x82, 0x91, 0xbb, 0xa6, 0x72, 0x5e, - 0x59, 0x8a, 0xa8, 0xb1, 0xa1, 0x87, 0x7a, 0x7a, 0x8e, 0x9d, 0x94, - 0x84, 0x6f, 0x73, 0x77, 0x86, 0x7f, 0x77, 0x64, 0x5a, 0x5d, 0x63, - 0x5d, 0x61, 0x7f, 0x99, 0xc1, 0x99, 0x72, 0x56, 0x69, 0x96, 0xa9, - 0xad, 0x97, 0x85, 0x7a, 0x81, 0x92, 0x9e, 0x92, 0x7b, 0x6c, 0x74, - 0x7d, 0x89, 0x83, 0x75, 0x5f, 0x5a, 0x5a, 0x65, 0x5b, 0x6c, 0x88, - 0xa1, 0xbf, 0x88, 0x69, 0x53, 0x74, 0x9d, 0xac, 0xa8, 0x8e, 0x81, - 0x7a, 0x83, 0x97, 0x9c, 0x8d, 0x76, 0x6c, 0x75, 0x7f, 0x88, 0x7b, - 0x70, 0x5f, 0x5e, 0x5d, 0x62, 0x59, 0x72, 0x88, 0xae, 0xb9, 0x85, - 0x64, 0x53, 0x7f, 0xa1, 0xb1, 0xa5, 0x8d, 0x7f, 0x78, 0x86, 0x99, - 0x9a, 0x89, 0x70, 0x6d, 0x77, 0x85, 0x85, 0x78, 0x6c, 0x5f, 0x5f, - 0x5c, 0x5d, 0x5b, 0x7f, 0x91, 0xb4, 0xa6, 0x76, 0x61, 0x5b, 0x8c, - 0xa3, 0xae, 0x9b, 0x86, 0x7d, 0x7b, 0x8d, 0x9c, 0x98, 0x81, 0x6c, - 0x6f, 0x7a, 0x87, 0x82, 0x76, 0x63, 0x5b, 0x5d, 0x64, 0x5d, 0x62, - 0x80, 0x92, 0xbe, 0x98, 0x77, 0x5a, 0x67, 0x96, 0xa7, 0xae, 0x96, - 0x86, 0x7c, 0x7e, 0x90, 0x9d, 0x93, 0x7e, 0x6e, 0x74, 0x7c, 0x87, - 0x7e, 0x77, 0x67, 0x5e, 0x58, 0x5f, 0x59, 0x6a, 0x89, 0x9f, 0xbb, - 0x8d, 0x6c, 0x55, 0x71, 0x9e, 0xaf, 0xaa, 0x8f, 0x80, 0x7a, 0x85, - 0x95, 0x9b, 0x8f, 0x77, 0x6d, 0x73, 0x7e, 0x85, 0x7c, 0x73, 0x62, - 0x60, 0x5c, 0x62, 0x58, 0x6b, 0x83, 0x9e, 0xb9, 0x8c, 0x6c, 0x56, - 0x75, 0x9d, 0xad, 0xa6, 0x8d, 0x82, 0x7c, 0x84, 0x95, 0x9a, 0x8e, - 0x79, 0x6f, 0x74, 0x7f, 0x86, 0x7b, 0x6e, 0x62, 0x61, 0x60, 0x65, - 0x55, 0x6a, 0x85, 0xa0, 0xb9, 0x89, 0x6c, 0x5a, 0x77, 0x9f, 0xab, - 0xa6, 0x8e, 0x83, 0x7b, 0x87, 0x95, 0x9c, 0x8d, 0x77, 0x71, 0x76, - 0x81, 0x84, 0x7b, 0x6f, 0x61, 0x63, 0x60, 0x65, 0x57, 0x65, 0x81, - 0x9e, 0xbb, 0x8e, 0x6f, 0x57, 0x73, 0x9b, 0xac, 0xab, 0x8e, 0x84, - 0x7a, 0x86, 0x94, 0x9b, 0x8e, 0x78, 0x70, 0x76, 0x83, 0x86, 0x7b, - 0x6c, 0x60, 0x63, 0x61, 0x65, 0x58, 0x64, 0x82, 0x9c, 0xba, 0x8d, - 0x70, 0x5b, 0x74, 0x9b, 0xa7, 0xa8, 0x8f, 0x87, 0x7c, 0x85, 0x94, - 0x9a, 0x8f, 0x77, 0x70, 0x75, 0x80, 0x85, 0x78, 0x6e, 0x64, 0x65, - 0x61, 0x63, 0x56, 0x63, 0x80, 0x98, 0xb6, 0x91, 0x75, 0x5b, 0x71, - 0x96, 0xa9, 0xab, 0x92, 0x86, 0x7b, 0x85, 0x93, 0x9c, 0x90, 0x79, - 0x70, 0x76, 0x7f, 0x83, 0x79, 0x70, 0x65, 0x62, 0x5f, 0x62, 0x5c, - 0x62, 0x7c, 0x92, 0xb4, 0x95, 0x76, 0x5d, 0x6f, 0x96, 0xa8, 0xab, - 0x92, 0x88, 0x7d, 0x86, 0x92, 0x9b, 0x91, 0x7b, 0x70, 0x74, 0x7f, - 0x84, 0x7b, 0x6f, 0x64, 0x64, 0x60, 0x64, 0x5b, 0x65, 0x7f, 0x91, - 0xb2, 0x92, 0x78, 0x60, 0x71, 0x97, 0xa8, 0xaa, 0x91, 0x86, 0x7d, - 0x89, 0x94, 0x9a, 0x8c, 0x79, 0x72, 0x76, 0x7f, 0x80, 0x78, 0x6d, - 0x63, 0x65, 0x61, 0x64, 0x59, 0x67, 0x7f, 0x97, 0xaf, 0x8e, 0x77, - 0x61, 0x79, 0x98, 0xa9, 0xa7, 0x90, 0x87, 0x80, 0x8b, 0x95, 0x97, - 0x8a, 0x78, 0x74, 0x79, 0x81, 0x7f, 0x75, 0x6b, 0x62, 0x64, 0x60, - 0x65, 0x59, 0x6f, 0x80, 0x9d, 0xab, 0x85, 0x72, 0x5f, 0x83, 0x9b, - 0xa9, 0x9e, 0x8c, 0x85, 0x81, 0x8e, 0x95, 0x97, 0x85, 0x75, 0x73, - 0x7b, 0x82, 0x7d, 0x72, 0x69, 0x64, 0x64, 0x63, 0x62, 0x5d, 0x76, - 0x7f, 0xa2, 0x9e, 0x85, 0x70, 0x66, 0x89, 0x9c, 0xa9, 0x98, 0x8b, - 0x82, 0x85, 0x8f, 0x97, 0x95, 0x82, 0x74, 0x75, 0x7b, 0x82, 0x79, - 0x6f, 0x66, 0x66, 0x61, 0x64, 0x5b, 0x67, 0x7c, 0x88, 0xa5, 0x8e, - 0x81, 0x68, 0x76, 0x91, 0xa2, 0xa5, 0x92, 0x8a, 0x83, 0x8b, 0x93, - 0x99, 0x8e, 0x7c, 0x75, 0x79, 0x81, 0x80, 0x75, 0x6c, 0x66, 0x66, - 0x62, 0x62, 0x5b, 0x72, 0x7d, 0x98, 0x9f, 0x84, 0x75, 0x67, 0x85, - 0x98, 0xa4, 0x9a, 0x8d, 0x88, 0x86, 0x90, 0x96, 0x94, 0x85, 0x77, - 0x76, 0x7a, 0x81, 0x7b, 0x76, 0x68, 0x63, 0x5f, 0x63, 0x61, 0x6a, - 0x79, 0x87, 0xa0, 0x8d, 0x7d, 0x69, 0x78, 0x91, 0xa0, 0x9d, 0x8e, - 0x89, 0x87, 0x8e, 0x95, 0x95, 0x8b, 0x7c, 0x76, 0x79, 0x7f, 0x7e, - 0x75, 0x6b, 0x67, 0x61, 0x61, 0x60, 0x65, 0x7a, 0x7f, 0x9c, 0x8f, - 0x85, 0x70, 0x73, 0x8c, 0x9a, 0xa2, 0x91, 0x8a, 0x84, 0x8c, 0x93, - 0x96, 0x8e, 0x7f, 0x77, 0x77, 0x7d, 0x7e, 0x79, 0x6f, 0x69, 0x63, - 0x60, 0x63, 0x64, 0x79, 0x7c, 0x96, 0x92, 0x84, 0x74, 0x70, 0x8a, - 0x99, 0xa4, 0x94, 0x8d, 0x85, 0x8b, 0x93, 0x93, 0x8f, 0x80, 0x79, - 0x78, 0x7c, 0x7c, 0x79, 0x6e, 0x65, 0x62, 0x64, 0x69, 0x67, 0x75, - 0x7b, 0x94, 0x93, 0x84, 0x74, 0x74, 0x8a, 0x97, 0x9e, 0x92, 0x8d, - 0x88, 0x8a, 0x90, 0x92, 0x8c, 0x81, 0x79, 0x79, 0x7d, 0x7a, 0x77, - 0x6f, 0x67, 0x61, 0x63, 0x64, 0x6d, 0x76, 0x7d, 0x93, 0x8d, 0x84, - 0x71, 0x77, 0x8b, 0x99, 0x9d, 0x93, 0x8c, 0x89, 0x8b, 0x90, 0x94, - 0x8a, 0x81, 0x7a, 0x7a, 0x7d, 0x7a, 0x76, 0x6e, 0x67, 0x60, 0x64, - 0x64, 0x6f, 0x79, 0x82, 0x93, 0x86, 0x80, 0x72, 0x7f, 0x8e, 0x9a, - 0x98, 0x90, 0x8c, 0x89, 0x90, 0x90, 0x93, 0x87, 0x80, 0x7a, 0x7c, - 0x7f, 0x7a, 0x74, 0x6c, 0x69, 0x64, 0x65, 0x66, 0x71, 0x7b, 0x85, - 0x8f, 0x85, 0x7c, 0x76, 0x80, 0x91, 0x9a, 0x98, 0x8f, 0x8a, 0x8a, - 0x91, 0x91, 0x8d, 0x83, 0x7f, 0x7c, 0x7d, 0x7d, 0x78, 0x71, 0x69, - 0x69, 0x66, 0x69, 0x68, 0x77, 0x7d, 0x89, 0x89, 0x80, 0x79, 0x78, - 0x89, 0x91, 0x97, 0x90, 0x8f, 0x8b, 0x8e, 0x8f, 0x8f, 0x8a, 0x84, - 0x82, 0x7f, 0x80, 0x78, 0x75, 0x6e, 0x6e, 0x69, 0x69, 0x66, 0x6a, - 0x77, 0x7e, 0x88, 0x80, 0x7d, 0x78, 0x7e, 0x8a, 0x91, 0x95, 0x8f, - 0x8c, 0x8c, 0x93, 0x93, 0x8f, 0x86, 0x86, 0x84, 0x82, 0x7e, 0x77, - 0x75, 0x71, 0x70, 0x69, 0x66, 0x65, 0x6f, 0x79, 0x80, 0x83, 0x7c, - 0x79, 0x77, 0x83, 0x8b, 0x8f, 0x90, 0x8d, 0x8d, 0x8e, 0x93, 0x90, - 0x8b, 0x88, 0x88, 0x85, 0x81, 0x7b, 0x77, 0x74, 0x71, 0x6d, 0x69, - 0x69, 0x6a, 0x74, 0x79, 0x80, 0x7f, 0x7c, 0x79, 0x7b, 0x87, 0x8d, - 0x91, 0x8d, 0x8d, 0x8c, 0x92, 0x94, 0x8f, 0x8b, 0x87, 0x89, 0x85, - 0x80, 0x78, 0x76, 0x75, 0x72, 0x6a, 0x69, 0x6c, 0x70, 0x75, 0x76, - 0x7d, 0x7c, 0x7b, 0x78, 0x7e, 0x88, 0x8f, 0x90, 0x8c, 0x8c, 0x8f, - 0x94, 0x91, 0x8c, 0x89, 0x89, 0x87, 0x82, 0x7d, 0x78, 0x75, 0x72, - 0x6e, 0x6b, 0x6e, 0x6f, 0x73, 0x75, 0x78, 0x7d, 0x7b, 0x7c, 0x7b, - 0x83, 0x8a, 0x90, 0x8e, 0x8c, 0x8f, 0x92, 0x91, 0x8a, 0x8a, 0x8a, - 0x8a, 0x82, 0x7c, 0x79, 0x77, 0x74, 0x6e, 0x6b, 0x6f, 0x73, 0x72, - 0x72, 0x72, 0x7a, 0x7d, 0x7e, 0x7b, 0x7f, 0x86, 0x8c, 0x8f, 0x8d, - 0x8e, 0x91, 0x93, 0x8c, 0x8a, 0x8a, 0x8b, 0x86, 0x80, 0x7b, 0x7a, - 0x77, 0x73, 0x6d, 0x6e, 0x72, 0x72, 0x72, 0x73, 0x77, 0x7b, 0x7d, - 0x7b, 0x7d, 0x83, 0x8b, 0x8b, 0x8c, 0x8e, 0x90, 0x8e, 0x8b, 0x8c, - 0x8d, 0x8b, 0x84, 0x81, 0x7d, 0x7c, 0x76, 0x74, 0x70, 0x72, 0x73, - 0x72, 0x6f, 0x70, 0x75, 0x7d, 0x81, 0x7d, 0x7b, 0x7f, 0x88, 0x8c, - 0x8f, 0x8c, 0x8c, 0x8c, 0x8e, 0x8c, 0x8a, 0x86, 0x85, 0x83, 0x80, - 0x7b, 0x76, 0x75, 0x74, 0x74, 0x72, 0x72, 0x70, 0x73, 0x76, 0x7c, - 0x7f, 0x7e, 0x7d, 0x81, 0x87, 0x8b, 0x8c, 0x8b, 0x8a, 0x8b, 0x8c, - 0x8a, 0x88, 0x85, 0x83, 0x80, 0x7d, 0x7c, 0x79, 0x76, 0x73, 0x72, - 0x72, 0x72, 0x75, 0x79, 0x7e, 0x7e, 0x7c, 0x7c, 0x82, 0x87, 0x8a, - 0x88, 0x88, 0x8b, 0x8c, 0x8b, 0x88, 0x87, 0x87, 0x85, 0x81, 0x7e, - 0x7d, 0x7b, 0x78, 0x75, 0x74, 0x74, 0x74, 0x74, 0x77, 0x7b, 0x7c, - 0x7c, 0x7c, 0x80, 0x83, 0x85, 0x87, 0x89, 0x89, 0x8a, 0x89, 0x88, - 0x88, 0x88, 0x84, 0x81, 0x7f, 0x7f, 0x7e, 0x7b, 0x78, 0x76, 0x76, - 0x77, 0x77, 0x77, 0x79, 0x7a, 0x7b, 0x7d, 0x80, 0x80, 0x82, 0x84, - 0x87, 0x87, 0x88, 0x87, 0x87, 0x88, 0x87, 0x85, 0x82, 0x81, 0x80, - 0x80, 0x7e, 0x7b, 0x79, 0x79, 0x79, 0x78, 0x78, 0x79, 0x7b, 0x7c, - 0x7c, 0x7c, 0x7e, 0x81, 0x83, 0x83, 0x84, 0x85, 0x86, 0x86, 0x86, - 0x85, 0x85, 0x84, 0x82, 0x80, 0x80, 0x80, 0x7f, 0x7c, 0x7a, 0x7a, - 0x7b, 0x7b, 0x7a, 0x7a, 0x7b, 0x7d, 0x7d, 0x7d, 0x7f, 0x81, 0x82, - 0x82, 0x83, 0x84, 0x85, 0x85, 0x84, 0x83, 0x84, 0x84, 0x82, 0x80, - 0x7f, 0x80, 0x80, 0x7e, 0x7c, 0x7b, 0x7c, 0x7c, 0x7c, 0x7b, 0x7c, - 0x7d, 0x7d, 0x7d, 0x7e, 0x80, 0x81, 0x81, 0x81, 0x82, 0x83, 0x84, - 0x83, 0x82, 0x82, 0x82, 0x82, 0x81, 0x80, 0x80, 0x7f, 0x7e, 0x7d, - 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7e, 0x7e, 0x7e, 0x7f, - 0x80, 0x80, 0x81, 0x81, 0x81, 0x82, 0x82, 0x82, 0x81, 0x81, 0x81, - 0x81, 0x81, 0x80, 0x80, 0x7f, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, - 0x7e, 0x7e, 0x7e, 0x7e, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x81, 0x81, - 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x80, 0x80, 0x80, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7e, 0x7e, 0x7e, 0x7f, 0x7e, 0x7e, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - }, - { // 9 - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, - 0x7e, 0x7e, 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, - 0x81, 0x81, 0x81, 0x81, 0x82, 0x82, 0x82, 0x82, 0x82, 0x81, 0x81, - 0x81, 0x80, 0x7f, 0x7f, 0x7e, 0x7d, 0x7d, 0x7c, 0x7c, 0x7b, 0x7b, - 0x7b, 0x7b, 0x7c, 0x7c, 0x7d, 0x7d, 0x7e, 0x7f, 0x7f, 0x80, 0x81, - 0x82, 0x82, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x82, 0x82, 0x81, - 0x80, 0x7f, 0x7e, 0x7e, 0x7d, 0x7d, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, - 0x7c, 0x7d, 0x7e, 0x7e, 0x7f, 0x80, 0x80, 0x81, 0x81, 0x82, 0x82, - 0x82, 0x82, 0x82, 0x82, 0x82, 0x81, 0x81, 0x80, 0x80, 0x7f, 0x7f, - 0x7e, 0x7e, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7e, 0x7e, - 0x7e, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7e, 0x7e, 0x7e, - 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7e, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, - 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x81, 0x7f, 0x80, 0x7f, - 0x80, 0x80, 0x80, 0x81, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x81, - 0x7f, 0x7f, 0x7f, 0x7e, 0x7f, 0x7e, 0x80, 0x7f, 0x7f, 0x7f, 0x7d, - 0x7f, 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x7d, 0x7e, 0x7e, 0x7f, 0x80, - 0x7f, 0x81, 0x7d, 0x7f, 0x7e, 0x7f, 0x81, 0x80, 0x81, 0x80, 0x80, - 0x7f, 0x80, 0x82, 0x81, 0x82, 0x82, 0x80, 0x81, 0x7f, 0x81, 0x7f, - 0x82, 0x7f, 0x80, 0x7f, 0x7c, 0x7e, 0x7e, 0x7e, 0x7d, 0x7e, 0x7c, - 0x7c, 0x7c, 0x7d, 0x7b, 0x80, 0x7c, 0x7e, 0x7d, 0x7e, 0x7c, 0x7f, - 0x7f, 0x7f, 0x81, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x82, 0x80, 0x80, - 0x80, 0x81, 0x7e, 0x81, 0x80, 0x7f, 0x80, 0x80, 0x7e, 0x7f, 0x80, - 0x7e, 0x80, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x81, 0x80, 0x81, - 0x80, 0x81, 0x80, 0x81, 0x80, 0x80, 0x81, 0x80, 0x7f, 0x82, 0x7e, - 0x80, 0x80, 0x7e, 0x80, 0x7e, 0x80, 0x7d, 0x80, 0x7d, 0x80, 0x7e, - 0x80, 0x7d, 0x81, 0x7e, 0x7d, 0x81, 0x7c, 0x80, 0x7f, 0x7e, 0x80, - 0x7d, 0x81, 0x7e, 0x7d, 0x82, 0x7b, 0x81, 0x7f, 0x7f, 0x7d, 0x83, - 0x7e, 0x7d, 0x85, 0x7b, 0x82, 0x81, 0x7f, 0x7f, 0x81, 0x82, 0x7a, - 0x87, 0x7c, 0x82, 0x80, 0x82, 0x7d, 0x80, 0x85, 0x76, 0x8a, 0x79, - 0x83, 0x7d, 0x81, 0x80, 0x7a, 0x87, 0x78, 0x80, 0x83, 0x7a, 0x7f, - 0x82, 0x7b, 0x7d, 0x83, 0x7c, 0x7b, 0x86, 0x78, 0x7f, 0x81, 0x7d, - 0x7b, 0x83, 0x7c, 0x7c, 0x83, 0x7d, 0x7c, 0x83, 0x7e, 0x7c, 0x84, - 0x7b, 0x82, 0x7e, 0x83, 0x7c, 0x84, 0x7e, 0x82, 0x7e, 0x82, 0x82, - 0x7b, 0x87, 0x7c, 0x80, 0x82, 0x7f, 0x7e, 0x84, 0x7e, 0x7f, 0x80, - 0x83, 0x79, 0x84, 0x80, 0x79, 0x86, 0x7c, 0x7d, 0x83, 0x7d, 0x7d, - 0x80, 0x80, 0x79, 0x84, 0x7b, 0x7e, 0x80, 0x7c, 0x7f, 0x7e, 0x80, - 0x7b, 0x82, 0x7b, 0x81, 0x7d, 0x81, 0x7c, 0x81, 0x7c, 0x7f, 0x81, - 0x7c, 0x80, 0x82, 0x7b, 0x83, 0x7e, 0x7e, 0x82, 0x7c, 0x83, 0x7c, - 0x85, 0x7a, 0x85, 0x7e, 0x81, 0x81, 0x81, 0x82, 0x7d, 0x86, 0x7a, - 0x85, 0x7f, 0x80, 0x84, 0x7b, 0x83, 0x7e, 0x7e, 0x81, 0x7b, 0x82, - 0x7c, 0x7f, 0x7f, 0x7b, 0x81, 0x79, 0x84, 0x78, 0x84, 0x7a, 0x7e, - 0x80, 0x7a, 0x84, 0x7a, 0x84, 0x7d, 0x7c, 0x81, 0x7c, 0x7c, 0x82, - 0x7b, 0x82, 0x7b, 0x84, 0x78, 0x86, 0x79, 0x82, 0x81, 0x7f, 0x80, - 0x7f, 0x86, 0x75, 0x8c, 0x7b, 0x81, 0x84, 0x7d, 0x81, 0x81, 0x7b, - 0x83, 0x7d, 0x82, 0x7d, 0x83, 0x82, 0x7c, 0x84, 0x7e, 0x80, 0x82, - 0x7b, 0x89, 0x78, 0x83, 0x7f, 0x7e, 0x80, 0x7b, 0x87, 0x75, 0x88, - 0x75, 0x82, 0x7d, 0x7c, 0x80, 0x82, 0x7e, 0x7f, 0x84, 0x7b, 0x81, - 0x7f, 0x80, 0x7f, 0x81, 0x80, 0x7b, 0x86, 0x76, 0x85, 0x7b, 0x7f, - 0x83, 0x77, 0x84, 0x7a, 0x80, 0x7a, 0x88, 0x78, 0x88, 0x7c, 0x86, - 0x7c, 0x84, 0x80, 0x83, 0x82, 0x7f, 0x88, 0x7a, 0x8a, 0x7c, 0x85, - 0x80, 0x84, 0x78, 0x88, 0x7a, 0x7e, 0x84, 0x7b, 0x81, 0x7c, 0x80, - 0x7c, 0x7c, 0x80, 0x7b, 0x80, 0x7a, 0x7f, 0x7c, 0x7c, 0x84, 0x7b, - 0x85, 0x7f, 0x81, 0x7c, 0x85, 0x7a, 0x86, 0x7f, 0x82, 0x82, 0x7f, - 0x81, 0x7f, 0x80, 0x7e, 0x84, 0x7b, 0x81, 0x7f, 0x7a, 0x80, 0x80, - 0x7a, 0x88, 0x7a, 0x7f, 0x81, 0x7a, 0x7c, 0x82, 0x78, 0x80, 0x7f, - 0x7a, 0x7f, 0x7a, 0x7c, 0x81, 0x75, 0x80, 0x82, 0x73, 0x82, 0x7d, - 0x7a, 0x7d, 0x84, 0x77, 0x84, 0x7a, 0x7e, 0x81, 0x7a, 0x7c, 0x84, - 0x7a, 0x80, 0x86, 0x7a, 0x84, 0x82, 0x7b, 0x84, 0x82, 0x78, 0x8a, - 0x78, 0x7e, 0x85, 0x76, 0x82, 0x80, 0x7c, 0x7f, 0x85, 0x76, 0x82, - 0x83, 0x73, 0x8d, 0x7a, 0x7d, 0x89, 0x76, 0x81, 0x7d, 0x7e, 0x7c, - 0x7d, 0x83, 0x76, 0x85, 0x75, 0x89, 0x77, 0x81, 0x88, 0x76, 0x87, - 0x7d, 0x80, 0x7f, 0x85, 0x7a, 0x84, 0x84, 0x72, 0x89, 0x7f, 0x6f, - 0x8e, 0x73, 0x7a, 0x82, 0x79, 0x78, 0x87, 0x76, 0x80, 0x86, 0x77, - 0x85, 0x82, 0x7c, 0x86, 0x81, 0x7b, 0x8c, 0x74, 0x89, 0x7b, 0x81, - 0x81, 0x7d, 0x81, 0x7c, 0x84, 0x75, 0x8b, 0x7b, 0x7c, 0x8b, 0x7c, - 0x7e, 0x87, 0x80, 0x7c, 0x8b, 0x78, 0x84, 0x80, 0x78, 0x84, 0x73, - 0x83, 0x73, 0x80, 0x76, 0x7b, 0x78, 0x79, 0x80, 0x75, 0x87, 0x78, - 0x83, 0x7c, 0x85, 0x77, 0x87, 0x7a, 0x80, 0x81, 0x7e, 0x7f, 0x7f, - 0x82, 0x7b, 0x8b, 0x76, 0x8e, 0x7c, 0x83, 0x84, 0x82, 0x7e, 0x85, - 0x7e, 0x7c, 0x85, 0x77, 0x83, 0x7d, 0x80, 0x7a, 0x87, 0x77, 0x86, - 0x7f, 0x7c, 0x89, 0x73, 0x8c, 0x74, 0x84, 0x7e, 0x7a, 0x85, 0x76, - 0x88, 0x76, 0x88, 0x7b, 0x81, 0x86, 0x79, 0x89, 0x7d, 0x82, 0x80, - 0x84, 0x7a, 0x81, 0x81, 0x74, 0x84, 0x77, 0x79, 0x7c, 0x77, 0x77, - 0x78, 0x77, 0x76, 0x77, 0x77, 0x78, 0x76, 0x79, 0x7c, 0x77, 0x82, - 0x82, 0x80, 0x8e, 0x88, 0x91, 0x91, 0x97, 0x98, 0x98, 0xa0, 0x98, - 0x9b, 0x9a, 0x93, 0x8f, 0x8b, 0x80, 0x7c, 0x72, 0x6e, 0x62, 0x5f, - 0x5b, 0x50, 0x57, 0x4c, 0x54, 0x51, 0x56, 0x58, 0x60, 0x66, 0x6e, - 0x7c, 0x7d, 0x94, 0x91, 0xa3, 0xa8, 0xae, 0xb9, 0xb6, 0xbe, 0xb8, - 0xb7, 0xb1, 0xab, 0x9e, 0x98, 0x90, 0x80, 0x80, 0x71, 0x70, 0x69, - 0x66, 0x64, 0x5c, 0x5f, 0x57, 0x56, 0x4f, 0x54, 0x47, 0x4e, 0x4d, - 0x49, 0x55, 0x58, 0x62, 0x6d, 0x84, 0x87, 0xa2, 0xaa, 0xb4, 0xc3, - 0xc3, 0xc9, 0xc4, 0xc3, 0xb4, 0xb0, 0x9e, 0x97, 0x88, 0x7c, 0x7a, - 0x6d, 0x6d, 0x6e, 0x6b, 0x6c, 0x74, 0x6c, 0x72, 0x6d, 0x68, 0x66, - 0x5d, 0x59, 0x55, 0x4e, 0x48, 0x4f, 0x47, 0x52, 0x63, 0x60, 0x82, - 0x86, 0x98, 0xaf, 0xaf, 0xc5, 0xc4, 0xc8, 0xc8, 0xbf, 0xb4, 0xa9, - 0x99, 0x89, 0x82, 0x70, 0x6f, 0x67, 0x66, 0x65, 0x6f, 0x70, 0x72, - 0x86, 0x71, 0x87, 0x7b, 0x73, 0x77, 0x65, 0x61, 0x5a, 0x50, 0x46, - 0x4b, 0x44, 0x4a, 0x61, 0x61, 0x77, 0x94, 0x8d, 0xb4, 0xb7, 0xbd, - 0xce, 0xc5, 0xc4, 0xbf, 0xb3, 0xa1, 0x9e, 0x83, 0x80, 0x76, 0x66, - 0x6a, 0x62, 0x64, 0x6e, 0x71, 0x7e, 0x83, 0x86, 0x89, 0x82, 0x80, - 0x76, 0x6e, 0x66, 0x5e, 0x51, 0x50, 0x47, 0x3d, 0x49, 0x48, 0x4e, - 0x6d, 0x73, 0x84, 0xa4, 0xa4, 0xb9, 0xc4, 0xc4, 0xc8, 0xc7, 0xbb, - 0xb6, 0xa6, 0x97, 0x8b, 0x7a, 0x72, 0x6c, 0x66, 0x66, 0x69, 0x69, - 0x75, 0x7a, 0x81, 0x8c, 0x8b, 0x8c, 0x90, 0x81, 0x7f, 0x74, 0x67, - 0x63, 0x57, 0x52, 0x4c, 0x49, 0x43, 0x47, 0x4e, 0x52, 0x61, 0x7f, - 0x78, 0x9f, 0xae, 0xa6, 0xc9, 0xbc, 0xbf, 0xc3, 0xb8, 0xad, 0xa8, - 0x97, 0x89, 0x82, 0x73, 0x71, 0x6b, 0x69, 0x71, 0x71, 0x77, 0x80, - 0x82, 0x89, 0x8f, 0x8e, 0x8d, 0x8b, 0x7d, 0x76, 0x6f, 0x5e, 0x5d, - 0x55, 0x53, 0x51, 0x4b, 0x52, 0x4d, 0x4e, 0x63, 0x56, 0x75, 0x89, - 0x75, 0xb1, 0xa1, 0xad, 0xc7, 0xb5, 0xc1, 0xbc, 0xb5, 0xa5, 0xa5, - 0x90, 0x82, 0x82, 0x6f, 0x72, 0x70, 0x70, 0x75, 0x78, 0x7f, 0x85, - 0x87, 0x8c, 0x8f, 0x8b, 0x88, 0x87, 0x79, 0x75, 0x6e, 0x63, 0x62, - 0x5e, 0x5b, 0x5e, 0x5d, 0x59, 0x5e, 0x58, 0x54, 0x5c, 0x59, 0x64, - 0x89, 0x74, 0x9b, 0xb0, 0x99, 0xc4, 0xb8, 0xb7, 0xc0, 0xae, 0xa5, - 0x9f, 0x93, 0x81, 0x7e, 0x77, 0x6c, 0x72, 0x71, 0x76, 0x7c, 0x81, - 0x88, 0x8b, 0x8d, 0x8a, 0x85, 0x83, 0x79, 0x76, 0x74, 0x71, 0x6b, - 0x69, 0x6c, 0x67, 0x6c, 0x65, 0x68, 0x66, 0x63, 0x5e, 0x57, 0x5a, - 0x5c, 0x4f, 0x7d, 0x7a, 0x81, 0xb7, 0x9e, 0xb8, 0xc3, 0xbc, 0xbe, - 0xb5, 0xab, 0x97, 0x91, 0x7d, 0x70, 0x76, 0x6a, 0x6e, 0x77, 0x7a, - 0x84, 0x86, 0x8e, 0x90, 0x8d, 0x8e, 0x83, 0x79, 0x74, 0x6e, 0x69, - 0x6f, 0x6c, 0x71, 0x77, 0x71, 0x79, 0x74, 0x71, 0x71, 0x65, 0x66, - 0x54, 0x5a, 0x4a, 0x50, 0x59, 0x5d, 0x92, 0x7a, 0xb0, 0xbb, 0xad, - 0xca, 0xb7, 0xbb, 0xae, 0x9f, 0x93, 0x7e, 0x7e, 0x6e, 0x6f, 0x78, - 0x78, 0x85, 0x89, 0x91, 0x93, 0x91, 0x92, 0x8a, 0x82, 0x79, 0x71, - 0x69, 0x64, 0x6c, 0x6b, 0x78, 0x7a, 0x80, 0x7f, 0x7f, 0x7d, 0x73, - 0x6e, 0x62, 0x5a, 0x5b, 0x50, 0x51, 0x49, 0x50, 0x64, 0x6f, 0x9c, - 0x97, 0xbc, 0xc3, 0xb6, 0xc2, 0xab, 0xa6, 0x99, 0x8a, 0x83, 0x74, - 0x7c, 0x79, 0x7a, 0x89, 0x87, 0x92, 0x93, 0x93, 0x8d, 0x85, 0x80, - 0x78, 0x71, 0x71, 0x69, 0x6c, 0x6f, 0x75, 0x7b, 0x80, 0x89, 0x82, - 0x80, 0x7d, 0x73, 0x6c, 0x6b, 0x64, 0x60, 0x57, 0x64, 0x5b, 0x61, - 0x5f, 0x5b, 0x6a, 0x7b, 0x9e, 0x96, 0xb3, 0xb3, 0xae, 0xaf, 0xa0, - 0x9d, 0x8e, 0x8c, 0x88, 0x82, 0x8a, 0x87, 0x8c, 0x8d, 0x8c, 0x8e, - 0x86, 0x8b, 0x80, 0x7c, 0x7c, 0x74, 0x74, 0x73, 0x78, 0x79, 0x76, - 0x7c, 0x7e, 0x80, 0x7e, 0x77, 0x78, 0x73, 0x6e, 0x69, 0x68, 0x6b, - 0x6a, 0x6e, 0x67, 0x66, 0x66, 0x65, 0x5a, 0x53, 0x65, 0x8b, 0x96, - 0x9a, 0xb7, 0xb5, 0xaf, 0xa4, 0xa3, 0x98, 0x89, 0x89, 0x88, 0x85, - 0x84, 0x8b, 0x91, 0x8f, 0x90, 0x8b, 0x86, 0x85, 0x7b, 0x79, 0x76, - 0x78, 0x77, 0x79, 0x78, 0x7c, 0x7e, 0x7d, 0x7a, 0x7b, 0x75, 0x76, - 0x70, 0x6f, 0x72, 0x70, 0x71, 0x71, 0x73, 0x6f, 0x6f, 0x68, 0x63, - 0x62, 0x61, 0x5f, 0x5d, 0x57, 0x92, 0xa1, 0xa6, 0xb8, 0xb9, 0xbc, - 0x97, 0x97, 0x90, 0x88, 0x81, 0x82, 0x91, 0x89, 0x92, 0x93, 0x94, - 0x96, 0x85, 0x86, 0x7a, 0x74, 0x73, 0x71, 0x74, 0x77, 0x7e, 0x7d, - 0x80, 0x7d, 0x7c, 0x78, 0x70, 0x7a, 0x79, 0x7a, 0x76, 0x75, 0x78, - 0x73, 0x73, 0x70, 0x70, 0x6b, 0x65, 0x5f, 0x5f, 0x61, 0x5a, 0x55, - 0x5e, 0x8a, 0xae, 0xa8, 0xaf, 0xb3, 0xb2, 0x98, 0x82, 0x86, 0x82, - 0x89, 0x85, 0x92, 0x9a, 0x98, 0x98, 0x91, 0x90, 0x84, 0x79, 0x73, - 0x73, 0x78, 0x79, 0x7d, 0x81, 0x83, 0x80, 0x7b, 0x77, 0x72, 0x73, - 0x73, 0x7b, 0x79, 0x7d, 0x83, 0x81, 0x84, 0x7a, 0x7c, 0x75, 0x71, - 0x70, 0x6d, 0x70, 0x6f, 0x6a, 0x69, 0x6b, 0x6e, 0x6f, 0x6c, 0x66, - 0x6e, 0x81, 0x91, 0xa5, 0xa8, 0xab, 0xa5, 0x9b, 0x91, 0x88, 0x8a, - 0x8a, 0x8e, 0x8f, 0x92, 0x94, 0x8f, 0x8a, 0x84, 0x82, 0x7b, 0x74, - 0x77, 0x7b, 0x7f, 0x7e, 0x7f, 0x7e, 0x7c, 0x78, 0x77, 0x74, 0x76, - 0x77, 0x81, 0x87, 0x88, 0x82, 0x77, 0x75, 0x6f, 0x70, 0x6c, 0x6f, - 0x71, 0x6f, 0x66, 0x62, 0x66, 0x6a, 0x64, 0x5a, 0x60, 0x74, 0xa3, - 0xb4, 0xb1, 0xa4, 0x9f, 0x9d, 0x85, 0x79, 0x7b, 0x90, 0x9a, 0x99, - 0x93, 0x96, 0x98, 0x90, 0x83, 0x77, 0x77, 0x79, 0x79, 0x79, 0x7c, - 0x82, 0x82, 0x7c, 0x79, 0x76, 0x75, 0x74, 0x76, 0x76, 0x7a, 0x7c, - 0x7f, 0x82, 0x7f, 0x84, 0x7f, 0x82, 0x81, 0x7e, 0x7b, 0x71, 0x75, - 0x74, 0x7a, 0x78, 0x74, 0x77, 0x71, 0x6e, 0x65, 0x66, 0x6b, 0x6e, - 0x6f, 0x6e, 0x7c, 0x90, 0xa8, 0xb1, 0xaa, 0x9d, 0x8f, 0x89, 0x83, - 0x82, 0x88, 0x92, 0x99, 0x99, 0x92, 0x8c, 0x85, 0x80, 0x7d, 0x7b, - 0x7c, 0x7b, 0x7e, 0x7f, 0x7f, 0x7c, 0x7a, 0x79, 0x79, 0x77, 0x74, - 0x76, 0x78, 0x7c, 0x7b, 0x7c, 0x81, 0x86, 0x88, 0x82, 0x7c, 0x75, - 0x73, 0x70, 0x72, 0x77, 0x79, 0x79, 0x71, 0x6e, 0x68, 0x69, 0x6b, - 0x69, 0x64, 0x60, 0x75, 0x9a, 0xb8, 0xba, 0xa5, 0x8f, 0x86, 0x83, - 0x7f, 0x7d, 0x85, 0x95, 0xa1, 0x9f, 0x93, 0x88, 0x84, 0x83, 0x7d, - 0x77, 0x76, 0x7d, 0x83, 0x83, 0x7f, 0x7c, 0x7b, 0x7c, 0x7a, 0x76, - 0x73, 0x74, 0x7b, 0x7d, 0x7c, 0x77, 0x77, 0x79, 0x7a, 0x7a, 0x79, - 0x7b, 0x7d, 0x83, 0x87, 0x8c, 0x8a, 0x84, 0x7c, 0x74, 0x73, 0x74, - 0x7b, 0x7e, 0x7f, 0x7c, 0x76, 0x6f, 0x69, 0x6a, 0x6f, 0x72, 0x72, - 0x6e, 0x75, 0x87, 0xa5, 0xb4, 0xac, 0x95, 0x7e, 0x7c, 0x7d, 0x84, - 0x83, 0x8a, 0x94, 0x9b, 0x99, 0x8b, 0x7f, 0x76, 0x79, 0x7b, 0x7c, - 0x7c, 0x7c, 0x80, 0x82, 0x81, 0x7c, 0x78, 0x77, 0x78, 0x79, 0x78, - 0x77, 0x78, 0x79, 0x7d, 0x7d, 0x7b, 0x7a, 0x7d, 0x80, 0x80, 0x7c, - 0x7c, 0x7e, 0x81, 0x82, 0x83, 0x8b, 0x8e, 0x8c, 0x7a, 0x6f, 0x6c, - 0x7a, 0x86, 0x89, 0x84, 0x7c, 0x7b, 0x77, 0x75, 0x6d, 0x6c, 0x6e, - 0x76, 0x78, 0x72, 0x69, 0x6f, 0x8d, 0xae, 0xbc, 0xa6, 0x85, 0x6f, - 0x73, 0x82, 0x89, 0x8a, 0x86, 0x8d, 0x94, 0x95, 0x8a, 0x7a, 0x75, - 0x76, 0x7e, 0x7f, 0x7c, 0x7a, 0x7a, 0x7f, 0x82, 0x81, 0x7c, 0x76, - 0x76, 0x79, 0x7c, 0x7a, 0x78, 0x78, 0x7b, 0x7f, 0x80, 0x7f, 0x7b, - 0x7a, 0x7c, 0x7e, 0x7f, 0x7f, 0x80, 0x81, 0x82, 0x82, 0x80, 0x7f, - 0x7f, 0x81, 0x81, 0x80, 0x7f, 0x80, 0x83, 0x83, 0x83, 0x82, 0x81, - 0x82, 0x82, 0x83, 0x81, 0x81, 0x80, 0x85, 0x8a, 0x8a, 0x89, 0x82, - 0x7e, 0x76, 0x76, 0x75, 0x7a, 0x7e, 0x7f, 0x7e, 0x79, 0x75, 0x70, - 0x6f, 0x6e, 0x6f, 0x71, 0x75, 0x76, 0x75, 0x71, 0x78, 0x87, 0x9d, - 0xa7, 0xa1, 0x8f, 0x7a, 0x74, 0x79, 0x85, 0x8c, 0x8c, 0x8a, 0x8a, - 0x8d, 0x8b, 0x85, 0x7a, 0x74, 0x74, 0x7a, 0x81, 0x83, 0x83, 0x80, - 0x7f, 0x7f, 0x7e, 0x7b, 0x76, 0x71, 0x74, 0x79, 0x7f, 0x81, 0x7f, - 0x7d, 0x7a, 0x7a, 0x7c, 0x7c, 0x7d, 0x7b, 0x7d, 0x7f, 0x82, 0x83, - 0x81, 0x7f, 0x7d, 0x7e, 0x80, 0x82, 0x81, 0x7f, 0x7e, 0x80, 0x82, - 0x84, 0x82, 0x81, 0x7f, 0x7f, 0x7f, 0x82, 0x80, 0x81, 0x7e, 0x81, - 0x80, 0x81, 0x7e, 0x83, 0x80, 0x83, 0x7f, 0x87, 0x93, 0x94, 0x92, - 0x76, 0x6e, 0x64, 0x77, 0x7f, 0x89, 0x82, 0x78, 0x6e, 0x66, 0x6d, - 0x6c, 0x73, 0x71, 0x70, 0x6e, 0x69, 0x76, 0x8c, 0xa8, 0xb7, 0xa8, - 0x8f, 0x6f, 0x69, 0x6e, 0x86, 0x93, 0x99, 0x91, 0x88, 0x88, 0x87, - 0x89, 0x7e, 0x76, 0x6d, 0x70, 0x79, 0x85, 0x8b, 0x87, 0x80, 0x79, - 0x79, 0x7a, 0x7a, 0x75, 0x72, 0x73, 0x7a, 0x82, 0x86, 0x84, 0x7d, - 0x77, 0x76, 0x78, 0x7c, 0x7e, 0x7d, 0x7d, 0x7d, 0x80, 0x83, 0x84, - 0x81, 0x7e, 0x7b, 0x7c, 0x7f, 0x81, 0x81, 0x80, 0x7e, 0x7e, 0x7f, - 0x81, 0x82, 0x81, 0x81, 0x80, 0x81, 0x80, 0x82, 0x82, 0x82, 0x82, - 0x80, 0x81, 0x81, 0x82, 0x82, 0x81, 0x7f, 0x7e, 0x7f, 0x80, 0x82, - 0x82, 0x80, 0x7f, 0x7e, 0x7f, 0x80, 0x81, 0x80, 0x7e, 0x7e, 0x7f, - 0x84, 0x86, 0x89, 0x86, 0x81, 0x7b, 0x78, 0x7b, 0x7d, 0x82, 0x81, - 0x80, 0x7b, 0x79, 0x76, 0x75, 0x76, 0x75, 0x76, 0x75, 0x76, 0x75, - 0x77, 0x76, 0x76, 0x74, 0x74, 0x79, 0x84, 0x95, 0xa2, 0xa8, 0x9c, - 0x8c, 0x78, 0x72, 0x75, 0x82, 0x8e, 0x92, 0x8f, 0x88, 0x85, 0x83, - 0x83, 0x80, 0x7c, 0x76, 0x73, 0x74, 0x7a, 0x81, 0x86, 0x84, 0x80, - 0x79, 0x75, 0x74, 0x76, 0x79, 0x7b, 0x7c, 0x7c, 0x7e, 0x7f, 0x81, - 0x7f, 0x7e, 0x7d, 0x7d, 0x7d, 0x7f, 0x80, 0x82, 0x81, 0x81, 0x7f, - 0x80, 0x81, 0x81, 0x82, 0x81, 0x86, 0x87, 0x8b, 0x84, 0x7f, 0x77, - 0x76, 0x78, 0x7d, 0x84, 0x84, 0x82, 0x7a, 0x77, 0x74, 0x77, 0x79, - 0x79, 0x78, 0x76, 0x76, 0x76, 0x79, 0x78, 0x76, 0x72, 0x72, 0x7d, - 0x8f, 0xa4, 0xab, 0xa6, 0x91, 0x7c, 0x6f, 0x70, 0x7c, 0x89, 0x92, - 0x8f, 0x88, 0x7f, 0x7d, 0x7f, 0x83, 0x81, 0x7c, 0x75, 0x72, 0x74, - 0x7b, 0x83, 0x87, 0x86, 0x80, 0x79, 0x75, 0x75, 0x78, 0x7d, 0x7f, - 0x80, 0x7e, 0x7e, 0x7f, 0x80, 0x82, 0x81, 0x80, 0x7c, 0x7f, 0x82, - 0x88, 0x89, 0x86, 0x80, 0x79, 0x78, 0x79, 0x80, 0x83, 0x85, 0x80, - 0x7b, 0x76, 0x76, 0x77, 0x79, 0x7a, 0x78, 0x76, 0x73, 0x73, 0x76, - 0x77, 0x78, 0x74, 0x76, 0x80, 0x93, 0xa7, 0xaf, 0xaa, 0x94, 0x7e, - 0x6d, 0x6e, 0x78, 0x88, 0x93, 0x93, 0x8c, 0x82, 0x7e, 0x7d, 0x80, - 0x81, 0x7e, 0x79, 0x72, 0x72, 0x75, 0x7e, 0x85, 0x88, 0x84, 0x7d, - 0x77, 0x75, 0x76, 0x7a, 0x7d, 0x80, 0x80, 0x7f, 0x7e, 0x7d, 0x80, - 0x81, 0x88, 0x89, 0x8c, 0x85, 0x7f, 0x76, 0x72, 0x76, 0x7b, 0x85, - 0x86, 0x87, 0x7c, 0x77, 0x71, 0x71, 0x73, 0x73, 0x76, 0x73, 0x76, - 0x72, 0x72, 0x6f, 0x75, 0x84, 0x98, 0xad, 0xb2, 0xac, 0x94, 0x7f, - 0x6d, 0x6d, 0x7a, 0x88, 0x94, 0x94, 0x8f, 0x84, 0x80, 0x7e, 0x81, - 0x82, 0x7f, 0x79, 0x72, 0x70, 0x74, 0x7d, 0x85, 0x89, 0x86, 0x80, - 0x77, 0x73, 0x74, 0x78, 0x7e, 0x81, 0x84, 0x84, 0x86, 0x85, 0x84, - 0x80, 0x7c, 0x78, 0x77, 0x7a, 0x7d, 0x81, 0x82, 0x81, 0x7d, 0x7a, - 0x77, 0x75, 0x74, 0x72, 0x71, 0x72, 0x72, 0x76, 0x75, 0x74, 0x70, - 0x77, 0x85, 0x9d, 0xb0, 0xb7, 0xaf, 0x96, 0x7f, 0x6c, 0x6d, 0x75, - 0x86, 0x91, 0x96, 0x92, 0x89, 0x84, 0x80, 0x80, 0x7f, 0x7d, 0x78, - 0x74, 0x70, 0x73, 0x78, 0x80, 0x86, 0x87, 0x85, 0x7f, 0x7b, 0x78, - 0x7b, 0x7d, 0x81, 0x82, 0x80, 0x7d, 0x7a, 0x7b, 0x7c, 0x7f, 0x7f, - 0x7e, 0x7b, 0x78, 0x74, 0x72, 0x72, 0x71, 0x73, 0x74, 0x76, 0x76, - 0x73, 0x70, 0x6f, 0x7a, 0x8d, 0xa8, 0xb9, 0xbe, 0xae, 0x94, 0x7a, - 0x69, 0x6b, 0x76, 0x88, 0x93, 0x96, 0x8f, 0x87, 0x7f, 0x7c, 0x7d, - 0x7e, 0x7e, 0x7b, 0x76, 0x72, 0x73, 0x78, 0x80, 0x89, 0x8f, 0x8f, - 0x88, 0x7d, 0x72, 0x6c, 0x6d, 0x74, 0x7e, 0x84, 0x86, 0x80, 0x79, - 0x72, 0x6e, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x6d, 0x6c, 0x6c, 0x78, - 0x8c, 0xa9, 0xbe, 0xc6, 0xb9, 0x9d, 0x81, 0x6b, 0x69, 0x71, 0x83, - 0x90, 0x98, 0x95, 0x8f, 0x87, 0x82, 0x7f, 0x7e, 0x7c, 0x79, 0x75, - 0x73, 0x77, 0x7e, 0x88, 0x8c, 0x8c, 0x84, 0x79, 0x6f, 0x6b, 0x6d, - 0x72, 0x78, 0x79, 0x77, 0x71, 0x6d, 0x6a, 0x6c, 0x6e, 0x6f, 0x6b, - 0x67, 0x6b, 0x7d, 0x9c, 0xbb, 0xcd, 0xc8, 0xb1, 0x8f, 0x74, 0x68, - 0x6d, 0x7b, 0x89, 0x93, 0x93, 0x8f, 0x8b, 0x89, 0x88, 0x87, 0x83, - 0x7d, 0x77, 0x72, 0x73, 0x79, 0x82, 0x88, 0x89, 0x84, 0x7c, 0x75, - 0x70, 0x71, 0x72, 0x74, 0x73, 0x71, 0x6d, 0x6a, 0x6a, 0x6b, 0x6c, - 0x69, 0x66, 0x69, 0x77, 0x91, 0xaf, 0xc6, 0xca, 0xb9, 0x9c, 0x7e, - 0x6e, 0x6d, 0x79, 0x85, 0x8e, 0x90, 0x8d, 0x8a, 0x8a, 0x8d, 0x8e, - 0x8a, 0x82, 0x79, 0x71, 0x6f, 0x70, 0x7a, 0x82, 0x8c, 0x8c, 0x89, - 0x7d, 0x72, 0x6c, 0x68, 0x6d, 0x6e, 0x74, 0x71, 0x70, 0x69, 0x67, - 0x65, 0x64, 0x63, 0x66, 0x73, 0x8a, 0xa9, 0xc0, 0xca, 0xbe, 0xa7, - 0x89, 0x76, 0x6e, 0x75, 0x7f, 0x8a, 0x8d, 0x8c, 0x89, 0x89, 0x8e, - 0x91, 0x91, 0x8a, 0x7f, 0x73, 0x6d, 0x6d, 0x77, 0x80, 0x8a, 0x89, - 0x87, 0x7b, 0x74, 0x6e, 0x6f, 0x70, 0x71, 0x71, 0x6c, 0x6a, 0x64, - 0x65, 0x61, 0x63, 0x60, 0x69, 0x78, 0x96, 0xb3, 0xc9, 0xcc, 0xba, - 0x9f, 0x80, 0x72, 0x70, 0x7c, 0x86, 0x8d, 0x8b, 0x86, 0x83, 0x85, - 0x8d, 0x93, 0x96, 0x8d, 0x82, 0x72, 0x6c, 0x6a, 0x75, 0x80, 0x8a, - 0x8c, 0x86, 0x7d, 0x71, 0x6f, 0x6c, 0x73, 0x72, 0x74, 0x6d, 0x68, - 0x63, 0x61, 0x61, 0x61, 0x62, 0x66, 0x78, 0x92, 0xb1, 0xc7, 0xcd, - 0xbe, 0xa4, 0x86, 0x74, 0x70, 0x79, 0x85, 0x8d, 0x8c, 0x87, 0x81, - 0x81, 0x87, 0x90, 0x95, 0x92, 0x87, 0x79, 0x6e, 0x6d, 0x74, 0x7f, - 0x88, 0x88, 0x82, 0x77, 0x6f, 0x6d, 0x72, 0x78, 0x7b, 0x78, 0x6f, - 0x65, 0x5f, 0x5d, 0x5f, 0x61, 0x61, 0x65, 0x71, 0x8b, 0xa8, 0xc3, - 0xce, 0xc5, 0xad, 0x8e, 0x79, 0x70, 0x77, 0x82, 0x8d, 0x8f, 0x8a, - 0x82, 0x7e, 0x82, 0x8a, 0x92, 0x93, 0x8c, 0x80, 0x74, 0x6f, 0x73, - 0x7d, 0x87, 0x8b, 0x85, 0x79, 0x6d, 0x67, 0x6a, 0x73, 0x7a, 0x7b, - 0x73, 0x69, 0x5f, 0x5b, 0x5b, 0x5e, 0x61, 0x65, 0x72, 0x85, 0xa4, - 0xbb, 0xcc, 0xc7, 0xb6, 0x9b, 0x84, 0x78, 0x77, 0x80, 0x88, 0x8e, - 0x8c, 0x87, 0x81, 0x82, 0x85, 0x8b, 0x8c, 0x8a, 0x83, 0x7a, 0x73, - 0x70, 0x77, 0x82, 0x8e, 0x91, 0x87, 0x76, 0x63, 0x5e, 0x61, 0x71, - 0x7a, 0x7f, 0x76, 0x69, 0x5d, 0x56, 0x5a, 0x5d, 0x66, 0x6b, 0x79, - 0x87, 0xa0, 0xb5, 0xc4, 0xc4, 0xb7, 0xa2, 0x8a, 0x7e, 0x79, 0x81, - 0x87, 0x8e, 0x8d, 0x8a, 0x85, 0x82, 0x84, 0x86, 0x88, 0x86, 0x82, - 0x7b, 0x76, 0x73, 0x78, 0x81, 0x8c, 0x90, 0x87, 0x78, 0x65, 0x5e, - 0x5d, 0x6a, 0x73, 0x79, 0x73, 0x69, 0x5e, 0x58, 0x5b, 0x60, 0x6a, - 0x70, 0x7c, 0x88, 0x9d, 0xae, 0xbc, 0xbe, 0xb5, 0xa4, 0x91, 0x86, - 0x81, 0x85, 0x89, 0x8e, 0x8d, 0x8a, 0x87, 0x85, 0x84, 0x85, 0x85, - 0x83, 0x80, 0x7a, 0x78, 0x75, 0x79, 0x80, 0x88, 0x8c, 0x86, 0x7b, - 0x6c, 0x64, 0x61, 0x67, 0x6e, 0x73, 0x6e, 0x66, 0x5d, 0x5a, 0x5d, - 0x64, 0x6d, 0x74, 0x79, 0x83, 0x91, 0xa4, 0xb3, 0xbb, 0xb8, 0xab, - 0x9a, 0x8b, 0x85, 0x85, 0x8a, 0x8c, 0x8e, 0x8a, 0x88, 0x85, 0x85, - 0x85, 0x85, 0x84, 0x80, 0x7d, 0x78, 0x77, 0x75, 0x7c, 0x81, 0x88, - 0x87, 0x82, 0x76, 0x6a, 0x64, 0x63, 0x69, 0x6b, 0x6e, 0x66, 0x61, - 0x5b, 0x5d, 0x62, 0x6c, 0x75, 0x7b, 0x83, 0x8c, 0x9a, 0xa8, 0xb2, - 0xb4, 0xad, 0xa0, 0x92, 0x8a, 0x87, 0x89, 0x8d, 0x8d, 0x8c, 0x88, - 0x85, 0x84, 0x85, 0x86, 0x85, 0x82, 0x7e, 0x79, 0x77, 0x76, 0x79, - 0x7d, 0x81, 0x83, 0x83, 0x7e, 0x77, 0x6f, 0x6a, 0x68, 0x6a, 0x6b, - 0x6a, 0x65, 0x60, 0x5d, 0x60, 0x65, 0x6d, 0x74, 0x7b, 0x7e, 0x86, - 0x90, 0x9d, 0xaa, 0xaf, 0xae, 0xa2, 0x98, 0x8c, 0x89, 0x89, 0x8d, - 0x8e, 0x8d, 0x88, 0x84, 0x83, 0x84, 0x86, 0x87, 0x86, 0x80, 0x7d, - 0x78, 0x78, 0x78, 0x7b, 0x7c, 0x7d, 0x7c, 0x7b, 0x7a, 0x78, 0x76, - 0x73, 0x71, 0x6d, 0x6c, 0x6a, 0x69, 0x68, 0x66, 0x66, 0x67, 0x6a, - 0x6e, 0x73, 0x7a, 0x81, 0x8a, 0x93, 0x9e, 0xa5, 0xa7, 0xa4, 0x9d, - 0x96, 0x8e, 0x8c, 0x8a, 0x8c, 0x8a, 0x88, 0x85, 0x83, 0x82, 0x83, - 0x85, 0x85, 0x85, 0x82, 0x7f, 0x7b, 0x7a, 0x78, 0x78, 0x78, 0x77, - 0x77, 0x77, 0x77, 0x78, 0x77, 0x77, 0x76, 0x75, 0x74, 0x73, 0x72, - 0x72, 0x72, 0x71, 0x72, 0x72, 0x73, 0x74, 0x76, 0x78, 0x7b, 0x7d, - 0x80, 0x82, 0x88, 0x8f, 0x97, 0x9e, 0xa0, 0x9f, 0x99, 0x93, 0x8d, - 0x8b, 0x8a, 0x8a, 0x89, 0x86, 0x82, 0x7e, 0x7d, 0x7e, 0x80, 0x81, - 0x81, 0x7f, 0x7c, 0x79, 0x78, 0x77, 0x77, 0x77, 0x76, 0x75, 0x74, - 0x74, 0x75, 0x76, 0x76, 0x76, 0x75, 0x74, 0x74, 0x74, 0x74, 0x75, - 0x76, 0x77, 0x78, 0x7b, 0x7e, 0x80, 0x82, 0x84, 0x86, 0x8b, 0x90, - 0x95, 0x97, 0x97, 0x93, 0x8e, 0x8a, 0x88, 0x87, 0x87, 0x88, 0x86, - 0x84, 0x80, 0x7e, 0x7c, 0x7d, 0x7d, 0x7e, 0x7e, 0x7d, 0x7b, 0x79, - 0x79, 0x78, 0x79, 0x78, 0x78, 0x77, 0x76, 0x76, 0x76, 0x77, 0x78, - 0x79, 0x79, 0x79, 0x78, 0x78, 0x79, 0x7a, 0x7b, 0x7d, 0x7f, 0x80, - 0x81, 0x82, 0x82, 0x83, 0x85, 0x87, 0x89, 0x8c, 0x8d, 0x8d, 0x8d, - 0x8c, 0x8a, 0x89, 0x88, 0x86, 0x85, 0x84, 0x83, 0x81, 0x80, 0x7f, - 0x7e, 0x7c, 0x7b, 0x7b, 0x7a, 0x79, 0x78, 0x76, 0x75, 0x73, 0x71, - 0x70, 0x6f, 0x70, 0x72, 0x74, 0x76, 0x78, 0x7a, 0x7c, 0x7f, 0x81, - 0x84, 0x88, 0x8c, 0x8f, 0x91, 0x91, 0x8f, 0x8c, 0x89, 0x87, 0x85, - 0x85, 0x84, 0x83, 0x81, 0x7f, 0x7d, 0x7c, 0x7d, 0x7d, 0x7e, 0x7e, - 0x7e, 0x7d, 0x7c, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, - 0x7b, 0x7c, 0x7d, 0x7d, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7f, 0x7f, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x81, 0x81, 0x81, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x81, 0x81, 0x81, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7e, 0x7f, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, - 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x81, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, - }, - }, - "ja": [][]byte{ - { // 0 - 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x83, - 0x81, 0x7e, 0x7e, 0x7e, 0x7e, 0x7f, 0x80, 0x7f, 0x7e, 0x7d, 0x7d, - 0x7e, 0x7d, 0x7e, 0x80, 0x7e, 0x7e, 0x80, 0x81, 0x81, 0x81, 0x81, - 0x81, 0x81, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x7f, - 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, - 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x80, - 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x7f, - 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, - 0x7f, 0x7f, 0x7e, 0x7e, 0x7f, 0x7f, 0x80, 0x7e, 0x7f, 0x80, 0x7f, - 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x7f, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x7f, - 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x7e, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x81, 0x80, 0x7f, - 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, - 0x80, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x7f, - 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x7f, - 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x7e, 0x7f, 0x7f, 0x7f, 0x80, - 0x80, 0x81, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, - 0x7e, 0x80, 0x7f, 0x7e, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, - 0x7f, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x81, 0x81, 0x80, - 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x7e, 0x80, 0x80, 0x7e, - 0x7f, 0x80, 0x7f, 0x7d, 0x80, 0x80, 0x7e, 0x7f, 0x80, 0x7f, 0x7e, - 0x7f, 0x80, 0x7f, 0x80, 0x83, 0x80, 0x81, 0x80, 0x81, 0x7f, 0x7e, - 0x81, 0x80, 0x7e, 0x7f, 0x81, 0x7c, 0x7c, 0x80, 0x7c, 0x7b, 0x7c, - 0x7e, 0x7e, 0x7b, 0x7e, 0x80, 0x7f, 0x7f, 0x83, 0x84, 0x82, 0x85, - 0x88, 0x86, 0x86, 0x88, 0x87, 0x84, 0x86, 0x85, 0x7e, 0x7f, 0x7b, - 0x77, 0x76, 0x74, 0x72, 0x6e, 0x6c, 0x6d, 0x6d, 0x6f, 0x73, 0x7e, - 0x84, 0x8a, 0x94, 0x98, 0x9b, 0x9c, 0x9d, 0x9a, 0x98, 0x96, 0x91, - 0x88, 0x80, 0x79, 0x71, 0x69, 0x68, 0x64, 0x60, 0x5d, 0x63, 0x76, - 0x76, 0x77, 0x88, 0x8c, 0x89, 0x8d, 0x95, 0x93, 0x91, 0x98, 0x94, - 0x8d, 0x8c, 0x8b, 0x85, 0x7e, 0x80, 0x7b, 0x76, 0x74, 0x70, 0x68, - 0x61, 0x61, 0x65, 0x72, 0x78, 0x7c, 0x87, 0x8b, 0x8a, 0x8d, 0x90, - 0x92, 0x92, 0x94, 0x91, 0x8e, 0x8b, 0x87, 0x84, 0x7e, 0x7e, 0x79, - 0x75, 0x72, 0x6d, 0x65, 0x5e, 0x58, 0x63, 0x7b, 0x75, 0x80, 0x93, - 0x90, 0x8b, 0x90, 0x96, 0x90, 0x93, 0x98, 0x91, 0x8c, 0x8b, 0x89, - 0x80, 0x7e, 0x7f, 0x75, 0x73, 0x70, 0x69, 0x5c, 0x59, 0x56, 0x6b, - 0x7c, 0x77, 0x8d, 0x95, 0x90, 0x8f, 0x92, 0x92, 0x8f, 0x97, 0x95, - 0x8f, 0x8f, 0x8b, 0x88, 0x7f, 0x81, 0x7b, 0x74, 0x72, 0x6a, 0x60, - 0x59, 0x55, 0x56, 0x78, 0x7c, 0x7e, 0x97, 0x97, 0x91, 0x90, 0x93, - 0x8f, 0x8f, 0x96, 0x92, 0x8f, 0x8f, 0x8d, 0x86, 0x80, 0x81, 0x75, - 0x72, 0x6d, 0x64, 0x58, 0x53, 0x4f, 0x69, 0x82, 0x7a, 0x93, 0x9d, - 0x94, 0x91, 0x92, 0x8e, 0x8c, 0x94, 0x92, 0x90, 0x90, 0x8e, 0x8b, - 0x82, 0x83, 0x79, 0x71, 0x6d, 0x63, 0x59, 0x51, 0x49, 0x5d, 0x86, - 0x78, 0x8f, 0xa3, 0x94, 0x92, 0x90, 0x8c, 0x87, 0x91, 0x8f, 0x8d, - 0x92, 0x8e, 0x8d, 0x86, 0x84, 0x7b, 0x71, 0x70, 0x66, 0x5c, 0x55, - 0x4f, 0x5b, 0x86, 0x7c, 0x89, 0xa5, 0x95, 0x90, 0x8f, 0x8b, 0x81, - 0x8f, 0x91, 0x8b, 0x94, 0x91, 0x90, 0x88, 0x85, 0x7a, 0x71, 0x6f, - 0x64, 0x5d, 0x54, 0x4d, 0x58, 0x84, 0x81, 0x8a, 0xa8, 0x97, 0x8f, - 0x8d, 0x88, 0x7e, 0x8d, 0x91, 0x8c, 0x98, 0x94, 0x92, 0x8b, 0x85, - 0x79, 0x6e, 0x6c, 0x63, 0x59, 0x52, 0x4a, 0x5b, 0x8a, 0x80, 0x91, - 0xab, 0x96, 0x8f, 0x8a, 0x84, 0x7a, 0x90, 0x90, 0x8f, 0x9d, 0x96, - 0x94, 0x8b, 0x84, 0x73, 0x6d, 0x69, 0x5d, 0x56, 0x50, 0x47, 0x67, - 0x90, 0x80, 0x9d, 0xa9, 0x91, 0x8b, 0x86, 0x7c, 0x7c, 0x93, 0x8e, - 0x98, 0xa0, 0x99, 0x93, 0x8a, 0x7f, 0x6c, 0x69, 0x63, 0x5b, 0x55, - 0x4d, 0x4b, 0x7a, 0x8f, 0x86, 0xa8, 0xa2, 0x8d, 0x86, 0x82, 0x77, - 0x83, 0x96, 0x91, 0xa1, 0xa0, 0x99, 0x91, 0x87, 0x75, 0x67, 0x66, - 0x5f, 0x57, 0x51, 0x47, 0x5a, 0x8e, 0x89, 0x97, 0xac, 0x96, 0x88, - 0x80, 0x79, 0x76, 0x8f, 0x95, 0x9d, 0xa7, 0x9f, 0x97, 0x8a, 0x7e, - 0x6a, 0x66, 0x61, 0x5a, 0x53, 0x4c, 0x4a, 0x75, 0x92, 0x8b, 0xa7, - 0xa4, 0x8d, 0x80, 0x7c, 0x74, 0x81, 0x96, 0x9a, 0xa6, 0xa7, 0x9e, - 0x8f, 0x83, 0x70, 0x62, 0x62, 0x5d, 0x55, 0x52, 0x48, 0x62, 0x8f, - 0x8d, 0x9b, 0xaa, 0x93, 0x80, 0x7b, 0x75, 0x79, 0x8f, 0x9a, 0xa7, - 0xab, 0xa3, 0x95, 0x86, 0x75, 0x64, 0x60, 0x5c, 0x58, 0x52, 0x49, - 0x58, 0x88, 0x8f, 0x96, 0xa9, 0x9a, 0x82, 0x79, 0x75, 0x74, 0x8d, - 0x9c, 0xa7, 0xae, 0xa8, 0x99, 0x88, 0x77, 0x62, 0x5d, 0x5e, 0x58, - 0x53, 0x4c, 0x55, 0x82, 0x92, 0x92, 0xa7, 0x9c, 0x82, 0x78, 0x73, - 0x75, 0x8a, 0x9c, 0xa6, 0xaf, 0xa9, 0x9a, 0x88, 0x77, 0x64, 0x5c, - 0x5e, 0x5b, 0x55, 0x4f, 0x54, 0x80, 0x93, 0x90, 0xa5, 0x9c, 0x82, - 0x75, 0x74, 0x76, 0x88, 0x9e, 0xaa, 0xaf, 0xab, 0x99, 0x85, 0x76, - 0x62, 0x5c, 0x5e, 0x5c, 0x54, 0x51, 0x57, 0x84, 0x93, 0x90, 0xa5, - 0x96, 0x80, 0x72, 0x73, 0x76, 0x8b, 0xa0, 0xae, 0xb1, 0xaa, 0x9a, - 0x83, 0x72, 0x5e, 0x5c, 0x5d, 0x5a, 0x55, 0x4e, 0x60, 0x89, 0x92, - 0x95, 0xa2, 0x93, 0x79, 0x6f, 0x70, 0x7b, 0x90, 0xa4, 0xb3, 0xb0, - 0xa9, 0x93, 0x7f, 0x6a, 0x5d, 0x5c, 0x5e, 0x5a, 0x54, 0x52, 0x68, - 0x91, 0x8f, 0x98, 0xa1, 0x88, 0x73, 0x70, 0x72, 0x7f, 0x98, 0xaa, - 0xb4, 0xaf, 0xa4, 0x8c, 0x79, 0x66, 0x5b, 0x5d, 0x5e, 0x57, 0x53, - 0x56, 0x7b, 0x97, 0x8d, 0xa0, 0x98, 0x7e, 0x6f, 0x6e, 0x74, 0x89, - 0xa2, 0xb2, 0xb5, 0xad, 0x9c, 0x81, 0x6f, 0x5e, 0x5c, 0x5f, 0x5e, - 0x56, 0x53, 0x61, 0x8c, 0x92, 0x92, 0x9f, 0x8b, 0x75, 0x6b, 0x71, - 0x7b, 0x96, 0xac, 0xb6, 0xb1, 0xa6, 0x8f, 0x78, 0x67, 0x5d, 0x5c, - 0x60, 0x5b, 0x54, 0x57, 0x77, 0x96, 0x8e, 0x9b, 0x96, 0x7e, 0x6d, - 0x6e, 0x75, 0x89, 0xa1, 0xb2, 0xb7, 0xa9, 0x9a, 0x82, 0x70, 0x60, - 0x5c, 0x61, 0x5f, 0x57, 0x54, 0x66, 0x8d, 0x91, 0x92, 0x9b, 0x88, - 0x72, 0x6d, 0x71, 0x7e, 0x98, 0xac, 0xb6, 0xb0, 0xa2, 0x8c, 0x77, - 0x65, 0x5c, 0x5d, 0x61, 0x5a, 0x56, 0x5b, 0x81, 0x95, 0x8f, 0x99, - 0x91, 0x79, 0x69, 0x70, 0x79, 0x8e, 0xa6, 0xb6, 0xb3, 0xa7, 0x94, - 0x7b, 0x6a, 0x5e, 0x5b, 0x61, 0x5d, 0x57, 0x58, 0x73, 0x93, 0x90, - 0x96, 0x94, 0x7f, 0x6c, 0x6d, 0x75, 0x88, 0xa0, 0xb3, 0xb5, 0xaa, - 0x99, 0x82, 0x6e, 0x62, 0x5c, 0x61, 0x61, 0x57, 0x58, 0x68, 0x8d, - 0x91, 0x94, 0x96, 0x86, 0x72, 0x6d, 0x70, 0x82, 0x99, 0xab, 0xb6, - 0xad, 0x9f, 0x89, 0x74, 0x64, 0x5d, 0x5f, 0x62, 0x5d, 0x58, 0x5d, - 0x88, 0x91, 0x90, 0x97, 0x8c, 0x77, 0x6a, 0x71, 0x7b, 0x92, 0xa5, - 0xb7, 0xae, 0xa3, 0x8f, 0x7a, 0x68, 0x60, 0x5d, 0x63, 0x60, 0x5a, - 0x5d, 0x77, 0x94, 0x8e, 0x95, 0x8f, 0x7f, 0x6e, 0x6e, 0x77, 0x8d, - 0x9f, 0xb1, 0xb3, 0xa6, 0x97, 0x7f, 0x6d, 0x61, 0x5f, 0x61, 0x63, - 0x5d, 0x59, 0x6a, 0x8e, 0x8e, 0x93, 0x91, 0x85, 0x73, 0x6b, 0x75, - 0x85, 0x9a, 0xaa, 0xb6, 0xa8, 0x9b, 0x87, 0x74, 0x65, 0x61, 0x62, - 0x63, 0x5e, 0x5a, 0x62, 0x84, 0x8f, 0x90, 0x94, 0x88, 0x7a, 0x6d, - 0x73, 0x7f, 0x92, 0xa3, 0xb2, 0xaa, 0x9e, 0x8e, 0x7a, 0x6c, 0x62, - 0x62, 0x64, 0x60, 0x5b, 0x5c, 0x76, 0x8e, 0x8e, 0x91, 0x8f, 0x81, - 0x72, 0x73, 0x7b, 0x8c, 0x9a, 0xac, 0xac, 0xa1, 0x94, 0x83, 0x73, - 0x67, 0x63, 0x65, 0x63, 0x5b, 0x5b, 0x68, 0x86, 0x8b, 0x8e, 0x91, - 0x89, 0x7a, 0x75, 0x7a, 0x85, 0x92, 0xa0, 0xa9, 0xa1, 0x99, 0x8b, - 0x7c, 0x6e, 0x66, 0x63, 0x62, 0x59, 0x54, 0x57, 0x76, 0x8b, 0x8a, - 0x94, 0x92, 0x87, 0x78, 0x7b, 0x84, 0x8f, 0x9b, 0xac, 0xaa, 0x9f, - 0x97, 0x87, 0x76, 0x68, 0x65, 0x64, 0x5f, 0x57, 0x57, 0x64, 0x7a, - 0x82, 0x86, 0x8b, 0x89, 0x82, 0x7e, 0x83, 0x8d, 0x94, 0x9b, 0xa2, - 0x9a, 0x91, 0x89, 0x81, 0x78, 0x71, 0x72, 0x73, 0x70, 0x6c, 0x6e, - 0x71, 0x77, 0x7b, 0x7c, 0x7f, 0x82, 0x82, 0x80, 0x83, 0x88, 0x89, - 0x8a, 0x8b, 0x8c, 0x88, 0x87, 0x87, 0x84, 0x84, 0x82, 0x81, 0x7f, - 0x7c, 0x79, 0x7b, 0x7b, 0x76, 0x77, 0x77, 0x7a, 0x79, 0x79, 0x7d, - 0x7e, 0x7e, 0x80, 0x82, 0x82, 0x84, 0x86, 0x86, 0x87, 0x88, 0x88, - 0x85, 0x84, 0x80, 0x7d, 0x7b, 0x79, 0x78, 0x77, 0x79, 0x78, 0x77, - 0x79, 0x79, 0x7a, 0x7d, 0x7e, 0x81, 0x82, 0x83, 0x85, 0x85, 0x87, - 0x87, 0x88, 0x87, 0x86, 0x85, 0x82, 0x80, 0x7e, 0x7c, 0x7b, 0x7a, - 0x79, 0x7a, 0x78, 0x79, 0x78, 0x78, 0x7a, 0x7d, 0x7f, 0x82, 0x84, - 0x84, 0x85, 0x84, 0x85, 0x86, 0x86, 0x86, 0x85, 0x83, 0x83, 0x80, - 0x7e, 0x7b, 0x7d, 0x7a, 0x80, 0x7a, 0x72, 0x7d, 0x76, 0x79, 0x7d, - 0x7f, 0x82, 0x80, 0x83, 0x89, 0x82, 0x89, 0x91, 0x86, 0x88, 0x86, - 0x83, 0x7e, 0x7c, 0x7e, 0x79, 0x77, 0x79, 0x77, 0x71, 0x72, 0x77, - 0x74, 0x75, 0x78, 0x7d, 0x84, 0x85, 0x8d, 0x8f, 0x8f, 0x8c, 0x8a, - 0x8b, 0x87, 0x89, 0x88, 0x84, 0x7e, 0x7b, 0x73, 0x70, 0x6d, 0x6d, - 0x6b, 0x68, 0x6b, 0x75, 0x7c, 0x7f, 0x84, 0x8c, 0x91, 0x8d, 0x90, - 0x93, 0x96, 0x91, 0x91, 0x92, 0x8e, 0x85, 0x7f, 0x79, 0x74, 0x6d, - 0x67, 0x62, 0x5d, 0x5a, 0x70, 0x81, 0x80, 0x88, 0x8b, 0x95, 0x87, - 0x83, 0x90, 0x95, 0x95, 0x96, 0x9c, 0x99, 0x8a, 0x81, 0x7b, 0x73, - 0x6a, 0x67, 0x66, 0x5d, 0x55, 0x57, 0x77, 0x88, 0x87, 0x8d, 0x8f, - 0x90, 0x81, 0x7c, 0x8d, 0x98, 0x99, 0x9e, 0xa3, 0x9d, 0x8d, 0x7e, - 0x78, 0x6e, 0x67, 0x66, 0x65, 0x59, 0x52, 0x55, 0x71, 0x8f, 0x8b, - 0x8e, 0x8e, 0x8e, 0x83, 0x75, 0x87, 0x9a, 0x9f, 0xa0, 0xa6, 0xa4, - 0x94, 0x7f, 0x74, 0x6d, 0x67, 0x62, 0x66, 0x5e, 0x55, 0x50, 0x68, - 0x8d, 0x93, 0x8e, 0x89, 0x8c, 0x83, 0x75, 0x7a, 0x96, 0xa5, 0xa7, - 0xa6, 0xa5, 0x9c, 0x84, 0x71, 0x6b, 0x69, 0x65, 0x65, 0x63, 0x5a, - 0x54, 0x5b, 0x7c, 0x95, 0x92, 0x8b, 0x84, 0x85, 0x7b, 0x74, 0x87, - 0xa1, 0xab, 0xa7, 0xa1, 0xa0, 0x91, 0x7a, 0x6b, 0x68, 0x6c, 0x69, - 0x68, 0x64, 0x5b, 0x58, 0x63, 0x83, 0x96, 0x91, 0x87, 0x80, 0x81, - 0x7a, 0x78, 0x8b, 0xa4, 0xae, 0xaa, 0xa1, 0x97, 0x8b, 0x74, 0x65, - 0x66, 0x6c, 0x6f, 0x6b, 0x62, 0x5a, 0x57, 0x66, 0x86, 0x95, 0x91, - 0x85, 0x7f, 0x80, 0x7b, 0x7b, 0x8e, 0xa7, 0xb1, 0xaa, 0x9e, 0x94, - 0x87, 0x73, 0x64, 0x66, 0x6e, 0x74, 0x6e, 0x65, 0x5b, 0x58, 0x62, - 0x7e, 0x94, 0x93, 0x88, 0x7c, 0x7e, 0x7e, 0x7e, 0x8b, 0xa2, 0xb1, - 0xac, 0x9c, 0x91, 0x87, 0x79, 0x69, 0x64, 0x6c, 0x74, 0x75, 0x6a, - 0x5e, 0x58, 0x5a, 0x70, 0x8c, 0x97, 0x90, 0x81, 0x7c, 0x7f, 0x81, - 0x85, 0x97, 0xaa, 0xaf, 0xa4, 0x93, 0x88, 0x7e, 0x71, 0x67, 0x6a, - 0x73, 0x77, 0x72, 0x66, 0x5a, 0x57, 0x5e, 0x7b, 0x93, 0x96, 0x8b, - 0x7d, 0x7e, 0x82, 0x82, 0x89, 0x9b, 0xac, 0xaf, 0x9f, 0x8c, 0x81, - 0x7a, 0x70, 0x69, 0x6c, 0x76, 0x7a, 0x72, 0x61, 0x57, 0x57, 0x63, - 0x80, 0x92, 0x96, 0x8b, 0x7f, 0x7f, 0x80, 0x83, 0x8b, 0x9d, 0xaa, - 0xab, 0x9c, 0x8c, 0x82, 0x79, 0x71, 0x6a, 0x6f, 0x77, 0x7a, 0x73, - 0x66, 0x5b, 0x56, 0x5d, 0x74, 0x8e, 0x9c, 0x95, 0x83, 0x7c, 0x7e, - 0x83, 0x88, 0x95, 0xa5, 0xaf, 0xa6, 0x91, 0x80, 0x78, 0x74, 0x6f, - 0x6e, 0x73, 0x7a, 0x7a, 0x70, 0x60, 0x56, 0x55, 0x64, 0x82, 0x97, - 0x9c, 0x8e, 0x80, 0x7c, 0x7f, 0x83, 0x8c, 0x9c, 0xa9, 0xaa, 0x9d, - 0x89, 0x7c, 0x75, 0x72, 0x70, 0x73, 0x79, 0x7c, 0x79, 0x6d, 0x5f, - 0x57, 0x59, 0x68, 0x84, 0x98, 0x9b, 0x8d, 0x7d, 0x7a, 0x7e, 0x85, - 0x90, 0x9c, 0xa6, 0xa5, 0x99, 0x88, 0x7b, 0x75, 0x74, 0x75, 0x76, - 0x79, 0x7a, 0x78, 0x6e, 0x62, 0x59, 0x57, 0x63, 0x7e, 0x97, 0x9f, - 0x91, 0x7e, 0x78, 0x7d, 0x87, 0x8f, 0x96, 0x9f, 0xa3, 0x9c, 0x8d, - 0x7e, 0x78, 0x77, 0x78, 0x77, 0x79, 0x79, 0x79, 0x74, 0x69, 0x61, - 0x5c, 0x5d, 0x6b, 0x85, 0x99, 0x9c, 0x8c, 0x7d, 0x78, 0x7f, 0x88, - 0x8f, 0x98, 0x9e, 0xa0, 0x98, 0x8a, 0x7c, 0x75, 0x76, 0x79, 0x7a, - 0x7d, 0x7a, 0x77, 0x6f, 0x68, 0x61, 0x5d, 0x5f, 0x6b, 0x85, 0x99, - 0x9e, 0x8e, 0x7d, 0x76, 0x7d, 0x88, 0x90, 0x97, 0x9c, 0x9d, 0x97, - 0x8d, 0x7f, 0x77, 0x74, 0x77, 0x7a, 0x7e, 0x7c, 0x78, 0x70, 0x69, - 0x64, 0x5f, 0x5c, 0x60, 0x7a, 0x95, 0xa4, 0x99, 0x82, 0x74, 0x75, - 0x82, 0x8f, 0x98, 0x9c, 0x9f, 0x9b, 0x92, 0x84, 0x78, 0x73, 0x76, - 0x7a, 0x80, 0x7e, 0x79, 0x71, 0x6a, 0x67, 0x65, 0x62, 0x5e, 0x6a, - 0x84, 0x9d, 0xa2, 0x90, 0x7b, 0x71, 0x79, 0x88, 0x93, 0x9b, 0x9c, - 0x9b, 0x94, 0x8b, 0x81, 0x78, 0x76, 0x77, 0x7e, 0x81, 0x7e, 0x76, - 0x6f, 0x6b, 0x6a, 0x67, 0x61, 0x5c, 0x6b, 0x88, 0xa1, 0xa4, 0x8f, - 0x78, 0x6e, 0x76, 0x88, 0x97, 0x9d, 0x9c, 0x97, 0x92, 0x8b, 0x83, - 0x79, 0x74, 0x75, 0x7d, 0x82, 0x81, 0x77, 0x6f, 0x6b, 0x6b, 0x69, - 0x63, 0x5b, 0x63, 0x80, 0x9e, 0xa9, 0x98, 0x7d, 0x6a, 0x6e, 0x81, - 0x95, 0xa0, 0x9e, 0x97, 0x90, 0x8b, 0x87, 0x7e, 0x77, 0x73, 0x79, - 0x82, 0x86, 0x80, 0x74, 0x6d, 0x6b, 0x6d, 0x69, 0x61, 0x5b, 0x6a, - 0x88, 0xa4, 0xa9, 0x93, 0x76, 0x64, 0x6c, 0x84, 0x9b, 0xa4, 0x9e, - 0x92, 0x8a, 0x87, 0x87, 0x80, 0x7a, 0x76, 0x7b, 0x82, 0x87, 0x80, - 0x74, 0x6d, 0x6c, 0x70, 0x6d, 0x64, 0x58, 0x62, 0x80, 0xa1, 0xae, - 0x9a, 0x7a, 0x61, 0x65, 0x7e, 0x98, 0xa6, 0xa1, 0x93, 0x88, 0x85, - 0x87, 0x85, 0x7e, 0x77, 0x79, 0x81, 0x88, 0x85, 0x78, 0x6e, 0x6a, - 0x71, 0x73, 0x6f, 0x60, 0x59, 0x6b, 0x89, 0xa6, 0xa7, 0x90, 0x70, - 0x5f, 0x6a, 0x86, 0x9f, 0xa7, 0x9d, 0x8c, 0x83, 0x84, 0x87, 0x86, - 0x7e, 0x79, 0x7a, 0x83, 0x89, 0x85, 0x79, 0x6e, 0x6c, 0x72, 0x75, - 0x6f, 0x61, 0x58, 0x67, 0x85, 0xa3, 0xa8, 0x93, 0x73, 0x5f, 0x67, - 0x82, 0x9e, 0xa8, 0x9e, 0x8c, 0x81, 0x82, 0x88, 0x8a, 0x83, 0x7b, - 0x79, 0x80, 0x88, 0x88, 0x7e, 0x72, 0x6e, 0x72, 0x7a, 0x77, 0x69, - 0x58, 0x57, 0x6f, 0x92, 0xaa, 0xa4, 0x88, 0x69, 0x5f, 0x6f, 0x8d, - 0xa2, 0xa3, 0x95, 0x86, 0x81, 0x87, 0x8c, 0x8a, 0x80, 0x77, 0x78, - 0x82, 0x8b, 0x8a, 0x7f, 0x72, 0x6f, 0x74, 0x7a, 0x76, 0x67, 0x55, - 0x53, 0x6a, 0x8e, 0xaa, 0xa8, 0x8f, 0x6f, 0x5f, 0x6a, 0x85, 0x9d, - 0xa3, 0x99, 0x89, 0x82, 0x86, 0x8c, 0x8c, 0x82, 0x78, 0x75, 0x7d, - 0x89, 0x8d, 0x87, 0x7b, 0x72, 0x72, 0x78, 0x79, 0x71, 0x60, 0x51, - 0x56, 0x71, 0x94, 0xaa, 0xa4, 0x8b, 0x6d, 0x61, 0x6b, 0x84, 0x9b, - 0xa2, 0x99, 0x89, 0x81, 0x83, 0x8b, 0x8c, 0x85, 0x7a, 0x75, 0x7b, - 0x86, 0x8f, 0x8e, 0x84, 0x77, 0x71, 0x73, 0x77, 0x75, 0x69, 0x58, - 0x51, 0x61, 0x81, 0xa1, 0xac, 0x9d, 0x7e, 0x64, 0x5f, 0x71, 0x8e, - 0xa2, 0xa3, 0x94, 0x82, 0x7c, 0x82, 0x8b, 0x8c, 0x83, 0x77, 0x72, - 0x7b, 0x89, 0x93, 0x91, 0x85, 0x77, 0x70, 0x73, 0x78, 0x76, 0x6a, - 0x5a, 0x52, 0x60, 0x7f, 0x9f, 0xac, 0x9f, 0x81, 0x65, 0x5f, 0x6e, - 0x8a, 0x9f, 0xa2, 0x95, 0x84, 0x7c, 0x80, 0x88, 0x8b, 0x84, 0x79, - 0x72, 0x77, 0x84, 0x91, 0x94, 0x8c, 0x7f, 0x75, 0x74, 0x76, 0x79, - 0x73, 0x67, 0x5a, 0x58, 0x69, 0x85, 0x9e, 0xa5, 0x98, 0x7e, 0x68, - 0x64, 0x71, 0x88, 0x9a, 0x9d, 0x94, 0x86, 0x7f, 0x80, 0x85, 0x86, - 0x81, 0x79, 0x76, 0x7a, 0x84, 0x8d, 0x91, 0x8c, 0x82, 0x7a, 0x77, - 0x78, 0x79, 0x77, 0x71, 0x69, 0x63, 0x64, 0x71, 0x84, 0x96, 0x9c, - 0x94, 0x81, 0x70, 0x69, 0x70, 0x82, 0x92, 0x99, 0x95, 0x8b, 0x83, - 0x81, 0x82, 0x83, 0x80, 0x7b, 0x78, 0x7c, 0x84, 0x8d, 0x8f, 0x89, - 0x7f, 0x77, 0x73, 0x74, 0x76, 0x74, 0x6d, 0x61, 0x61, 0x70, 0x89, - 0x9f, 0xa3, 0x96, 0x7c, 0x66, 0x61, 0x70, 0x89, 0x9c, 0x9f, 0x91, - 0x7e, 0x75, 0x7a, 0x88, 0x90, 0x8d, 0x80, 0x75, 0x72, 0x7b, 0x8b, - 0x95, 0x95, 0x8b, 0x7d, 0x74, 0x73, 0x77, 0x7a, 0x78, 0x72, 0x6e, - 0x6e, 0x73, 0x7a, 0x80, 0x82, 0x82, 0x82, 0x81, 0x82, 0x82, 0x80, - 0x7f, 0x7f, 0x82, 0x86, 0x8b, 0x8e, 0x8c, 0x88, 0x83, 0x7f, 0x7d, - 0x7d, 0x7f, 0x82, 0x83, 0x84, 0x83, 0x80, 0x7c, 0x77, 0x73, 0x6e, - 0x6a, 0x62, 0x66, 0x72, 0x86, 0x9a, 0x9f, 0x98, 0x82, 0x70, 0x68, - 0x70, 0x82, 0x92, 0x96, 0x8e, 0x81, 0x79, 0x7a, 0x81, 0x87, 0x88, - 0x80, 0x77, 0x73, 0x77, 0x83, 0x8e, 0x94, 0x90, 0x87, 0x7e, 0x7a, - 0x7c, 0x80, 0x83, 0x80, 0x7c, 0x78, 0x79, 0x7d, 0x82, 0x83, 0x80, - 0x7a, 0x74, 0x72, 0x75, 0x7b, 0x80, 0x82, 0x82, 0x80, 0x80, 0x81, - 0x82, 0x84, 0x83, 0x81, 0x7e, 0x7d, 0x7e, 0x81, 0x82, 0x83, 0x81, - 0x7f, 0x7d, 0x7b, 0x7c, 0x7c, 0x7d, 0x7e, 0x7e, 0x7f, 0x7f, 0x80, - 0x81, 0x82, 0x83, 0x83, 0x82, 0x81, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, - 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7e, 0x7d, 0x7d, 0x7d, - 0x7e, 0x7f, 0x80, 0x81, 0x81, 0x82, 0x81, 0x81, 0x81, 0x81, 0x81, - 0x81, 0x81, 0x81, 0x81, 0x81, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7e, - 0x7e, 0x7d, 0x7c, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x81, 0x81, 0x82, 0x82, 0x83, 0x83, 0x83, 0x82, 0x81, - 0x81, 0x80, 0x7f, 0x7f, 0x7f, 0x7e, 0x7e, 0x7e, 0x7d, 0x7d, 0x7d, - 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7e, 0x7e, 0x7f, 0x80, 0x80, 0x80, - 0x81, 0x82, 0x83, 0x83, 0x83, 0x82, 0x81, 0x80, 0x7f, 0x80, 0x80, - 0x80, 0x7f, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7d, 0x7d, - 0x7d, 0x7f, 0x80, 0x81, 0x80, 0x80, 0x7f, 0x80, 0x81, 0x82, 0x83, - 0x82, 0x80, 0x7f, 0x7f, 0x80, 0x81, 0x81, 0x80, 0x7f, 0x7e, 0x7e, - 0x7e, 0x7f, 0x7f, 0x7f, 0x7e, 0x7d, 0x7d, 0x7e, 0x7f, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x81, 0x81, 0x81, 0x80, 0x7f, 0x7f, 0x7f, - 0x80, 0x80, 0x80, 0x7f, 0x7e, 0x7e, 0x7e, 0x7f, 0x7f, 0x80, 0x80, - 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x81, 0x81, 0x81, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x80, - }, - { // 1 - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, - 0x7f, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x81, 0x7f, 0x81, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7e, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x80, - 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, - 0x80, 0x7f, 0x81, 0x80, 0x7f, 0x83, 0x7e, 0x83, 0x7f, 0x81, 0x81, - 0x80, 0x81, 0x7f, 0x7f, 0x7f, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, - 0x7f, 0x7e, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x81, - 0x80, 0x81, 0x81, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x7f, - 0x80, 0x80, 0x80, 0x80, 0x81, 0x7f, 0x84, 0x83, 0x84, 0x87, 0x84, - 0x89, 0x86, 0x8a, 0x8a, 0x89, 0x8a, 0x86, 0x85, 0x83, 0x7e, 0x7d, - 0x77, 0x76, 0x71, 0x6e, 0x6d, 0x67, 0x68, 0x64, 0x65, 0x63, 0x6b, - 0x6b, 0x73, 0x78, 0x79, 0x84, 0x80, 0x8e, 0x8d, 0x96, 0x97, 0x9a, - 0x9c, 0x99, 0x99, 0x95, 0x93, 0x8e, 0x8c, 0x87, 0x87, 0x82, 0x83, - 0x7f, 0x81, 0x7e, 0x7f, 0x7d, 0x7d, 0x7a, 0x7a, 0x77, 0x73, 0x71, - 0x6a, 0x6a, 0x63, 0x67, 0x64, 0x67, 0x6b, 0x6c, 0x72, 0x77, 0x7e, - 0x86, 0x8b, 0x93, 0x97, 0x9c, 0x9c, 0x9d, 0x9d, 0x99, 0x98, 0x91, - 0x90, 0x89, 0x87, 0x83, 0x80, 0x7e, 0x7d, 0x7c, 0x7c, 0x7b, 0x7b, - 0x7a, 0x78, 0x78, 0x72, 0x71, 0x6e, 0x6b, 0x66, 0x65, 0x62, 0x65, - 0x64, 0x6a, 0x6c, 0x70, 0x77, 0x7a, 0x84, 0x88, 0x91, 0x97, 0x9b, - 0x9f, 0x9e, 0x9f, 0x9d, 0x99, 0x97, 0x90, 0x8e, 0x89, 0x85, 0x82, - 0x7f, 0x7d, 0x7b, 0x7b, 0x7a, 0x79, 0x77, 0x77, 0x75, 0x74, 0x73, - 0x71, 0x70, 0x6a, 0x68, 0x68, 0x64, 0x66, 0x6a, 0x6a, 0x73, 0x72, - 0x79, 0x7d, 0x7e, 0x8a, 0x8a, 0x93, 0x97, 0x99, 0x9c, 0x9c, 0x99, - 0x9a, 0x93, 0x94, 0x8f, 0x8b, 0x8b, 0x85, 0x84, 0x82, 0x7f, 0x7d, - 0x7c, 0x79, 0x79, 0x78, 0x78, 0x73, 0x75, 0x70, 0x71, 0x6e, 0x6e, - 0x6c, 0x6d, 0x6a, 0x6d, 0x70, 0x70, 0x78, 0x75, 0x7e, 0x7d, 0x82, - 0x88, 0x89, 0x8f, 0x93, 0x94, 0x97, 0x95, 0x95, 0x95, 0x90, 0x92, - 0x8e, 0x8d, 0x8b, 0x86, 0x87, 0x82, 0x82, 0x7f, 0x7e, 0x7c, 0x7b, - 0x79, 0x78, 0x74, 0x76, 0x74, 0x74, 0x72, 0x70, 0x73, 0x6c, 0x73, - 0x6f, 0x74, 0x77, 0x77, 0x79, 0x7d, 0x7b, 0x83, 0x81, 0x86, 0x8b, - 0x89, 0x90, 0x8e, 0x92, 0x8f, 0x91, 0x8f, 0x90, 0x8e, 0x8e, 0x8a, - 0x8a, 0x86, 0x85, 0x85, 0x7f, 0x80, 0x7c, 0x7b, 0x7c, 0x76, 0x79, - 0x76, 0x73, 0x76, 0x72, 0x74, 0x72, 0x73, 0x72, 0x75, 0x73, 0x77, - 0x79, 0x78, 0x7d, 0x7c, 0x7e, 0x82, 0x81, 0x84, 0x88, 0x86, 0x8a, - 0x89, 0x8b, 0x8c, 0x8b, 0x8d, 0x8b, 0x8b, 0x89, 0x89, 0x86, 0x84, - 0x81, 0x80, 0x7e, 0x7c, 0x7b, 0x79, 0x77, 0x75, 0x77, 0x74, 0x77, - 0x76, 0x77, 0x77, 0x77, 0x78, 0x7b, 0x7b, 0x7b, 0x7d, 0x7d, 0x7f, - 0x7f, 0x82, 0x82, 0x83, 0x83, 0x84, 0x84, 0x83, 0x85, 0x86, 0x84, - 0x85, 0x85, 0x84, 0x84, 0x82, 0x82, 0x82, 0x80, 0x80, 0x7e, 0x7e, - 0x7e, 0x7c, 0x7d, 0x7a, 0x7a, 0x7a, 0x7a, 0x7a, 0x7a, 0x79, 0x7b, - 0x7b, 0x7b, 0x7c, 0x7d, 0x7f, 0x7f, 0x80, 0x80, 0x81, 0x81, 0x82, - 0x82, 0x81, 0x82, 0x82, 0x81, 0x81, 0x81, 0x80, 0x80, 0x7f, 0x7e, - 0x7f, 0x7d, 0x7e, 0x7e, 0x7d, 0x7e, 0x7e, 0x7f, 0x7e, 0x7e, 0x7e, - 0x7f, 0x7e, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x81, 0x81, - 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x80, - 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7e, 0x7f, 0x7f, 0x7e, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7e, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, - 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x81, 0x81, 0x81, 0x81, - 0x81, 0x81, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, - 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x7f, - 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x7f, - 0x80, 0x7f, 0x81, 0x82, 0x81, 0x81, 0x7f, 0x81, 0x7f, 0x80, 0x80, - 0x7f, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7f, 0x7e, 0x7f, 0x7f, 0x7f, - 0x80, 0x83, 0x82, 0x7f, 0x81, 0x81, 0x81, 0x80, 0x81, 0x81, 0x7f, - 0x7e, 0x7e, 0x7d, 0x7e, 0x7e, 0x7e, 0x7d, 0x7e, 0x7d, 0x7d, 0x7f, - 0x7e, 0x7f, 0x7e, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x81, 0x80, 0x82, - 0x85, 0x7f, 0x80, 0x82, 0x80, 0x7f, 0x7d, 0x7f, 0x7d, 0x7c, 0x7d, - 0x7e, 0x7d, 0x7b, 0x7d, 0x7e, 0x7e, 0x80, 0x80, 0x81, 0x81, 0x81, - 0x82, 0x82, 0x81, 0x81, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7e, 0x7e, - 0x7e, 0x7f, 0x7e, 0x7f, 0x7f, 0x81, 0x7f, 0x7e, 0x80, 0x80, 0x80, - 0x80, 0x81, 0x7f, 0x80, 0x81, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x7f, - 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, - 0x7e, 0x7e, 0x7d, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, - 0x7e, 0x80, 0x7e, 0x7f, 0x80, 0x7e, 0x81, 0x7e, 0x80, 0x80, 0x7f, - 0x81, 0x7f, 0x81, 0x81, 0x81, 0x81, 0x7f, 0x7e, 0x80, 0x81, 0x80, - 0x81, 0x81, 0x80, 0x7f, 0x80, 0x7e, 0x7f, 0x7f, 0x7d, 0x82, 0x7e, - 0x7e, 0x7f, 0x7b, 0x81, 0x80, 0x7d, 0x82, 0x80, 0x7d, 0x7f, 0x80, - 0x80, 0x7e, 0x80, 0x7c, 0x81, 0x81, 0x7c, 0x81, 0x7e, 0x7d, 0x80, - 0x7e, 0x7f, 0x7f, 0x7f, 0x7e, 0x7d, 0x83, 0x7e, 0x81, 0x82, 0x7c, - 0x80, 0x7f, 0x7f, 0x81, 0x81, 0x7f, 0x81, 0x7e, 0x7e, 0x80, 0x7f, - 0x80, 0x81, 0x7f, 0x80, 0x83, 0x80, 0x80, 0x7f, 0x7c, 0x81, 0x7f, - 0x7d, 0x7f, 0x7f, 0x80, 0x81, 0x82, 0x7f, 0x80, 0x7e, 0x7f, 0x80, - 0x7e, 0x83, 0x7d, 0x80, 0x80, 0x7d, 0x7f, 0x80, 0x83, 0x7c, 0x7f, - 0x80, 0x7c, 0x7f, 0x7f, 0x81, 0x7e, 0x7f, 0x7f, 0x7f, 0x81, 0x7e, - 0x80, 0x7e, 0x80, 0x7e, 0x7b, 0x7f, 0x80, 0x82, 0x7d, 0x7f, 0x7f, - 0x7d, 0x81, 0x80, 0x7f, 0x7d, 0x81, 0x7f, 0x82, 0x7f, 0x7e, 0x81, - 0x7e, 0x82, 0x7d, 0x7f, 0x80, 0x7f, 0x83, 0x80, 0x80, 0x81, 0x81, - 0x7f, 0x82, 0x7d, 0x81, 0x80, 0x7f, 0x81, 0x80, 0x81, 0x7b, 0x82, - 0x80, 0x83, 0x81, 0x83, 0x7f, 0x80, 0x7e, 0x7f, 0x84, 0x7d, 0x7f, - 0x7d, 0x84, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7c, 0x83, 0x80, 0x80, - 0x7e, 0x7c, 0x7f, 0x82, 0x81, 0x7e, 0x81, 0x82, 0x7e, 0x80, 0x82, - 0x7d, 0x7e, 0x80, 0x84, 0x87, 0x82, 0x81, 0x82, 0x7f, 0x83, 0x81, - 0x82, 0x81, 0x7e, 0x82, 0x80, 0x83, 0x7c, 0x7e, 0x82, 0x81, 0x82, - 0x7f, 0x85, 0x80, 0x81, 0x7f, 0x7e, 0x81, 0x7d, 0x83, 0x7e, 0x7c, - 0x7d, 0x7a, 0x84, 0x81, 0x81, 0x83, 0x7e, 0x81, 0x7d, 0x82, 0x7d, - 0x82, 0x83, 0x7f, 0x88, 0x7b, 0x84, 0x7e, 0x7d, 0x85, 0x7a, 0x81, - 0x7c, 0x7d, 0x7f, 0x7c, 0x80, 0x7f, 0x7f, 0x7d, 0x7b, 0x7e, 0x79, - 0x80, 0x81, 0x7c, 0x85, 0x7d, 0x80, 0x84, 0x80, 0x86, 0x83, 0x88, - 0x83, 0x81, 0x87, 0x84, 0x86, 0x80, 0x83, 0x88, 0x7f, 0x83, 0x80, - 0x78, 0x7d, 0x75, 0x79, 0x77, 0x75, 0x78, 0x73, 0x78, 0x75, 0x79, - 0x78, 0x7e, 0x82, 0x7f, 0x8c, 0x85, 0x8a, 0x8f, 0x89, 0x8d, 0x90, - 0x88, 0x8e, 0x90, 0x82, 0x8c, 0x7f, 0x7e, 0x7e, 0x79, 0x77, 0x70, - 0x73, 0x6d, 0x72, 0x65, 0x6d, 0x6d, 0x6c, 0x73, 0x73, 0x7a, 0x73, - 0x7e, 0x7a, 0x82, 0x87, 0x86, 0x8f, 0x8e, 0x95, 0x94, 0x95, 0x94, - 0x94, 0x8d, 0x8d, 0x8c, 0x86, 0x88, 0x83, 0x81, 0x7b, 0x7a, 0x71, - 0x72, 0x6f, 0x69, 0x6f, 0x6a, 0x64, 0x6a, 0x68, 0x6a, 0x72, 0x6e, - 0x75, 0x77, 0x7a, 0x80, 0x8b, 0x8c, 0x94, 0x97, 0x92, 0x9d, 0x92, - 0x94, 0x94, 0x91, 0x8c, 0x8e, 0x88, 0x88, 0x88, 0x81, 0x84, 0x77, - 0x80, 0x76, 0x76, 0x71, 0x6e, 0x6a, 0x5e, 0x63, 0x63, 0x63, 0x63, - 0x6c, 0x67, 0x70, 0x77, 0x7d, 0x8a, 0x8f, 0x99, 0x99, 0x9f, 0x9c, - 0x9d, 0x98, 0x96, 0x96, 0x8d, 0x91, 0x8b, 0x8b, 0x86, 0x86, 0x80, - 0x80, 0x80, 0x79, 0x7e, 0x75, 0x71, 0x6b, 0x68, 0x5f, 0x5d, 0x66, - 0x5d, 0x65, 0x66, 0x69, 0x73, 0x78, 0x85, 0x8e, 0x95, 0x9b, 0xa2, - 0x9f, 0xa1, 0x9d, 0x9d, 0x98, 0x92, 0x90, 0x8b, 0x8a, 0x84, 0x86, - 0x84, 0x7f, 0x81, 0x7c, 0x7c, 0x80, 0x74, 0x75, 0x6d, 0x66, 0x5f, - 0x5f, 0x61, 0x5a, 0x65, 0x61, 0x68, 0x71, 0x78, 0x88, 0x90, 0x9a, - 0xa0, 0xa4, 0xa4, 0xa3, 0x9f, 0x99, 0x94, 0x90, 0x8c, 0x89, 0x85, - 0x82, 0x83, 0x81, 0x82, 0x80, 0x81, 0x7e, 0x7d, 0x79, 0x74, 0x69, - 0x64, 0x5e, 0x58, 0x62, 0x55, 0x62, 0x60, 0x68, 0x72, 0x78, 0x8c, - 0x91, 0x9e, 0xa0, 0xa9, 0xa5, 0xa5, 0xa0, 0x99, 0x93, 0x8a, 0x89, - 0x83, 0x84, 0x7e, 0x83, 0x7f, 0x7f, 0x82, 0x7c, 0x81, 0x7c, 0x7a, - 0x75, 0x6d, 0x65, 0x58, 0x5e, 0x58, 0x55, 0x60, 0x5b, 0x66, 0x6e, - 0x78, 0x8a, 0x93, 0x9e, 0xa8, 0xa9, 0xa7, 0xa8, 0xa0, 0x9a, 0x93, - 0x88, 0x84, 0x82, 0x7f, 0x80, 0x7e, 0x7e, 0x7f, 0x82, 0x80, 0x81, - 0x7d, 0x7c, 0x72, 0x6a, 0x68, 0x55, 0x61, 0x52, 0x56, 0x5d, 0x57, - 0x6b, 0x6a, 0x7f, 0x8c, 0x98, 0xa0, 0xab, 0xad, 0xa9, 0xaa, 0x9c, - 0x99, 0x8c, 0x87, 0x81, 0x7d, 0x7a, 0x7c, 0x7b, 0x7b, 0x7f, 0x7e, - 0x81, 0x80, 0x7f, 0x7b, 0x73, 0x6d, 0x60, 0x5d, 0x61, 0x51, 0x5e, - 0x5b, 0x5b, 0x6d, 0x70, 0x85, 0x90, 0x9b, 0xa5, 0xad, 0xab, 0xae, - 0xa7, 0x9b, 0x98, 0x8a, 0x84, 0x80, 0x7a, 0x7a, 0x78, 0x7a, 0x7d, - 0x7e, 0x82, 0x81, 0x83, 0x80, 0x7e, 0x6f, 0x6c, 0x62, 0x61, 0x5e, - 0x55, 0x60, 0x55, 0x66, 0x6a, 0x79, 0x89, 0x91, 0xa0, 0xa6, 0xad, - 0xa9, 0xad, 0x9e, 0x9d, 0x90, 0x88, 0x83, 0x7b, 0x7a, 0x78, 0x79, - 0x7a, 0x80, 0x7f, 0x86, 0x84, 0x84, 0x83, 0x79, 0x72, 0x6c, 0x66, - 0x62, 0x5e, 0x5c, 0x5e, 0x5d, 0x69, 0x6f, 0x81, 0x8c, 0x97, 0xa5, - 0xa9, 0xaf, 0xaa, 0xa8, 0xa0, 0x97, 0x8c, 0x86, 0x7d, 0x77, 0x78, - 0x72, 0x79, 0x78, 0x7d, 0x81, 0x82, 0x86, 0x83, 0x81, 0x7a, 0x6e, - 0x6b, 0x6a, 0x5b, 0x60, 0x5b, 0x59, 0x63, 0x65, 0x75, 0x82, 0x8e, - 0x9b, 0xa6, 0xa9, 0xae, 0xaa, 0xa4, 0x9e, 0x92, 0x8a, 0x82, 0x79, - 0x75, 0x74, 0x71, 0x76, 0x78, 0x7c, 0x81, 0x83, 0x84, 0x83, 0x7f, - 0x78, 0x6c, 0x72, 0x64, 0x61, 0x66, 0x57, 0x63, 0x61, 0x6d, 0x7d, - 0x85, 0x91, 0x9f, 0xa1, 0xa8, 0xaa, 0xa2, 0xa3, 0x95, 0x8d, 0x86, - 0x7e, 0x77, 0x75, 0x70, 0x73, 0x74, 0x79, 0x7d, 0x81, 0x83, 0x85, - 0x7f, 0x7f, 0x70, 0x6f, 0x75, 0x59, 0x70, 0x5b, 0x60, 0x68, 0x61, - 0x7b, 0x7d, 0x8b, 0x97, 0x9e, 0x9e, 0xab, 0x9f, 0xa1, 0x9b, 0x8b, - 0x8b, 0x7e, 0x7c, 0x75, 0x74, 0x71, 0x75, 0x76, 0x7b, 0x81, 0x82, - 0x87, 0x86, 0x82, 0x7f, 0x76, 0x6d, 0x76, 0x5e, 0x6c, 0x62, 0x5e, - 0x6d, 0x65, 0x7c, 0x7f, 0x8c, 0x96, 0x9d, 0x9e, 0xa5, 0x9f, 0x9b, - 0x99, 0x89, 0x89, 0x7c, 0x79, 0x75, 0x72, 0x73, 0x76, 0x78, 0x7d, - 0x84, 0x84, 0x8c, 0x88, 0x8a, 0x84, 0x7d, 0x76, 0x70, 0x6b, 0x64, - 0x67, 0x62, 0x66, 0x6b, 0x73, 0x7c, 0x87, 0x8f, 0x97, 0x9d, 0x9e, - 0xa1, 0x9b, 0x98, 0x90, 0x88, 0x81, 0x78, 0x74, 0x6f, 0x70, 0x6f, - 0x75, 0x7a, 0x7f, 0x87, 0x89, 0x91, 0x91, 0x91, 0x90, 0x89, 0x82, - 0x79, 0x6f, 0x67, 0x62, 0x5e, 0x5f, 0x60, 0x66, 0x6c, 0x75, 0x7e, - 0x89, 0x91, 0x98, 0x9d, 0x9f, 0x9f, 0x9b, 0x97, 0x90, 0x88, 0x81, - 0x7a, 0x74, 0x72, 0x72, 0x72, 0x77, 0x7b, 0x80, 0x86, 0x8a, 0x8c, - 0x8e, 0x8c, 0x8b, 0x85, 0x7f, 0x78, 0x71, 0x6b, 0x66, 0x64, 0x63, - 0x66, 0x6a, 0x70, 0x78, 0x80, 0x88, 0x8f, 0x95, 0x98, 0x99, 0x98, - 0x95, 0x90, 0x8a, 0x84, 0x7d, 0x78, 0x73, 0x70, 0x6f, 0x70, 0x72, - 0x75, 0x7a, 0x7e, 0x82, 0x86, 0x88, 0x8a, 0x8a, 0x89, 0x87, 0x84, - 0x81, 0x7d, 0x7a, 0x78, 0x76, 0x76, 0x76, 0x77, 0x78, 0x7b, 0x7e, - 0x80, 0x83, 0x85, 0x87, 0x88, 0x88, 0x88, 0x87, 0x85, 0x83, 0x81, - 0x7e, 0x7c, 0x7a, 0x78, 0x77, 0x75, 0x73, 0x74, 0x73, 0x75, 0x75, - 0x77, 0x78, 0x7b, 0x7c, 0x7f, 0x81, 0x82, 0x86, 0x86, 0x88, 0x88, - 0x88, 0x88, 0x86, 0x84, 0x82, 0x81, 0x7f, 0x7e, 0x7c, 0x7c, 0x7c, - 0x7c, 0x7e, 0x7f, 0x80, 0x81, 0x83, 0x84, 0x84, 0x85, 0x84, 0x84, - 0x83, 0x82, 0x80, 0x7f, 0x7d, 0x7d, 0x7c, 0x7c, 0x7c, 0x7c, 0x7d, - 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, - 0x81, 0x81, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x81, - 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x81, 0x81, 0x81, 0x81, 0x81, - 0x81, 0x81, 0x81, 0x81, 0x81, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7e, - }, - { // 2 - 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x81, - 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x80, 0x80, - 0x7f, 0x7f, 0x7e, 0x7e, 0x7e, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, - 0x7d, 0x7d, 0x7e, 0x7e, 0x7f, 0x80, 0x80, 0x81, 0x82, 0x82, 0x83, - 0x83, 0x84, 0x84, 0x84, 0x84, 0x83, 0x83, 0x81, 0x80, 0x7f, 0x7e, - 0x7d, 0x7b, 0x7a, 0x79, 0x78, 0x77, 0x77, 0x77, 0x78, 0x78, 0x79, - 0x7b, 0x7c, 0x7f, 0x81, 0x83, 0x85, 0x88, 0x8a, 0x8c, 0x8d, 0x8e, - 0x8f, 0x8e, 0x8d, 0x8b, 0x88, 0x85, 0x82, 0x7c, 0x78, 0x75, 0x71, - 0x6d, 0x6b, 0x69, 0x68, 0x66, 0x66, 0x68, 0x6c, 0x72, 0x78, 0x7f, - 0x85, 0x8b, 0x90, 0x96, 0x9a, 0x9c, 0x9d, 0x9d, 0x9b, 0x9a, 0x98, - 0x92, 0x8c, 0x84, 0x7c, 0x74, 0x6b, 0x63, 0x5d, 0x5a, 0x59, 0x5b, - 0x5e, 0x60, 0x63, 0x68, 0x6e, 0x76, 0x80, 0x8a, 0x93, 0x9a, 0x9f, - 0xa2, 0xa5, 0xa7, 0xa8, 0xa7, 0xa3, 0x9d, 0x96, 0x8e, 0x85, 0x7d, - 0x74, 0x6b, 0x62, 0x5b, 0x56, 0x56, 0x57, 0x58, 0x59, 0x5b, 0x60, - 0x68, 0x74, 0x80, 0x8c, 0x95, 0x9c, 0xa2, 0xa5, 0xa9, 0xab, 0xac, - 0xaa, 0xa5, 0x9e, 0x96, 0x8d, 0x84, 0x7b, 0x71, 0x68, 0x5f, 0x57, - 0x53, 0x54, 0x54, 0x55, 0x56, 0x59, 0x5f, 0x69, 0x75, 0x82, 0x8f, - 0x97, 0x9f, 0xa5, 0xa8, 0xac, 0xae, 0xae, 0xab, 0xa6, 0x9e, 0x96, - 0x8c, 0x82, 0x78, 0x6e, 0x64, 0x5a, 0x53, 0x51, 0x52, 0x52, 0x53, - 0x54, 0x59, 0x60, 0x6c, 0x78, 0x86, 0x93, 0x9b, 0xa4, 0xa8, 0xac, - 0xaf, 0xb0, 0xaf, 0xad, 0xa6, 0x9e, 0x95, 0x8b, 0x7f, 0x75, 0x69, - 0x5e, 0x53, 0x4f, 0x4f, 0x4f, 0x53, 0x50, 0x56, 0x5a, 0x65, 0x72, - 0x81, 0x90, 0x9a, 0xa2, 0xa9, 0xac, 0xae, 0xb1, 0xad, 0xac, 0xa5, - 0x9e, 0x95, 0x8b, 0x80, 0x76, 0x6a, 0x60, 0x53, 0x4f, 0x51, 0x4f, - 0x56, 0x53, 0x58, 0x5c, 0x64, 0x73, 0x7f, 0x90, 0x9b, 0xa1, 0xa8, - 0xab, 0xad, 0xb1, 0xac, 0xaa, 0xa4, 0x9d, 0x95, 0x8a, 0x80, 0x76, - 0x69, 0x60, 0x53, 0x50, 0x53, 0x53, 0x5b, 0x58, 0x5d, 0x61, 0x69, - 0x77, 0x82, 0x91, 0x9c, 0xa1, 0xa7, 0xa8, 0xaa, 0xab, 0xa7, 0xa4, - 0x9d, 0x97, 0x8f, 0x86, 0x7c, 0x72, 0x66, 0x5e, 0x51, 0x52, 0x53, - 0x55, 0x5c, 0x58, 0x60, 0x62, 0x6d, 0x7b, 0x87, 0x97, 0x9f, 0xa4, - 0xaa, 0xa9, 0xad, 0xaa, 0xa7, 0xa3, 0x9c, 0x95, 0x8c, 0x81, 0x78, - 0x6c, 0x62, 0x57, 0x4e, 0x55, 0x51, 0x5c, 0x59, 0x5d, 0x63, 0x68, - 0x78, 0x82, 0x92, 0xa0, 0xa3, 0xab, 0xac, 0xac, 0xaf, 0xa9, 0xa6, - 0x9e, 0x97, 0x8e, 0x83, 0x7a, 0x6f, 0x63, 0x59, 0x4b, 0x51, 0x4f, - 0x57, 0x5a, 0x5a, 0x64, 0x63, 0x74, 0x80, 0x8f, 0x9f, 0xa4, 0xab, - 0xae, 0xad, 0xaf, 0xac, 0xa9, 0xa0, 0x98, 0x8f, 0x85, 0x7c, 0x70, - 0x62, 0x59, 0x49, 0x4e, 0x4d, 0x55, 0x5b, 0x59, 0x64, 0x63, 0x73, - 0x80, 0x8f, 0xa1, 0xa5, 0xab, 0xaf, 0xaf, 0xb1, 0xac, 0xa9, 0xa0, - 0x97, 0x90, 0x83, 0x7c, 0x6d, 0x62, 0x55, 0x47, 0x4d, 0x49, 0x57, - 0x59, 0x5a, 0x63, 0x62, 0x77, 0x80, 0x93, 0xa4, 0xa7, 0xb0, 0xaf, - 0xaf, 0xb2, 0xac, 0xaa, 0x9e, 0x98, 0x8d, 0x80, 0x79, 0x67, 0x60, - 0x4e, 0x48, 0x4e, 0x4b, 0x5c, 0x58, 0x61, 0x65, 0x68, 0x7c, 0x83, - 0x9a, 0xa4, 0xa8, 0xb0, 0xac, 0xaf, 0xad, 0xa8, 0xa6, 0x99, 0x94, - 0x85, 0x7d, 0x72, 0x62, 0x5c, 0x47, 0x4d, 0x4a, 0x52, 0x5b, 0x58, - 0x67, 0x62, 0x73, 0x7f, 0x8d, 0xa5, 0xa5, 0xb0, 0xae, 0xac, 0xb1, - 0xa9, 0xaa, 0x9f, 0x96, 0x8e, 0x7d, 0x7a, 0x66, 0x60, 0x4e, 0x47, - 0x4d, 0x49, 0x5d, 0x56, 0x62, 0x64, 0x6a, 0x7f, 0x85, 0x9e, 0xa7, - 0xab, 0xb2, 0xac, 0xaf, 0xae, 0xa8, 0xa6, 0x96, 0x92, 0x81, 0x79, - 0x6d, 0x5f, 0x53, 0x44, 0x4c, 0x45, 0x59, 0x56, 0x5e, 0x66, 0x65, - 0x7c, 0x81, 0x9b, 0xa6, 0xac, 0xb2, 0xae, 0xb1, 0xaf, 0xa9, 0xa8, - 0x98, 0x94, 0x83, 0x7a, 0x6e, 0x60, 0x56, 0x42, 0x4f, 0x43, 0x58, - 0x55, 0x5d, 0x68, 0x64, 0x7d, 0x80, 0x9b, 0xa8, 0xad, 0xb5, 0xb0, - 0xb1, 0xb0, 0xab, 0xa9, 0x9a, 0x97, 0x84, 0x7b, 0x6f, 0x5f, 0x56, - 0x42, 0x4e, 0x43, 0x57, 0x56, 0x5c, 0x68, 0x64, 0x7d, 0x80, 0x9a, - 0xa8, 0xad, 0xb5, 0xb0, 0xb1, 0xb0, 0xa9, 0xa8, 0x98, 0x95, 0x82, - 0x7a, 0x6c, 0x5d, 0x51, 0x41, 0x4e, 0x41, 0x5b, 0x53, 0x60, 0x66, - 0x66, 0x7f, 0x81, 0x9f, 0xa8, 0xb0, 0xb6, 0xaf, 0xb3, 0xae, 0xaa, - 0xa6, 0x96, 0x94, 0x7d, 0x7a, 0x65, 0x5d, 0x49, 0x48, 0x4a, 0x49, - 0x5f, 0x53, 0x6b, 0x62, 0x75, 0x7e, 0x8c, 0xa4, 0xa8, 0xb3, 0xb0, - 0xaf, 0xae, 0xa7, 0xa7, 0x9b, 0x95, 0x89, 0x7b, 0x72, 0x60, 0x57, - 0x43, 0x50, 0x44, 0x59, 0x58, 0x5e, 0x6a, 0x65, 0x7f, 0x7e, 0x99, - 0xa6, 0xaa, 0xb4, 0xac, 0xaf, 0xa9, 0xa6, 0xa3, 0x94, 0x93, 0x7e, - 0x7a, 0x65, 0x5e, 0x47, 0x4c, 0x4a, 0x4d, 0x5e, 0x54, 0x6c, 0x62, - 0x78, 0x7e, 0x8f, 0xa5, 0xa8, 0xb4, 0xaf, 0xaf, 0xac, 0xa6, 0xa6, - 0x97, 0x96, 0x82, 0x7c, 0x6b, 0x60, 0x4d, 0x47, 0x4e, 0x47, 0x60, - 0x53, 0x6a, 0x64, 0x71, 0x80, 0x85, 0xa3, 0xa4, 0xb2, 0xb1, 0xad, - 0xae, 0xa4, 0xa8, 0x97, 0x94, 0x87, 0x7b, 0x72, 0x5f, 0x53, 0x43, - 0x50, 0x45, 0x5d, 0x55, 0x62, 0x69, 0x6b, 0x82, 0x83, 0x9d, 0xa5, - 0xae, 0xb4, 0xac, 0xaf, 0xa6, 0xa6, 0x9e, 0x93, 0x8d, 0x7d, 0x76, - 0x61, 0x56, 0x45, 0x50, 0x47, 0x58, 0x59, 0x5f, 0x6c, 0x67, 0x80, - 0x80, 0x9b, 0xa4, 0xac, 0xb3, 0xaa, 0xb1, 0xa5, 0xa7, 0x9b, 0x95, - 0x8d, 0x7d, 0x76, 0x63, 0x5a, 0x44, 0x51, 0x48, 0x5a, 0x5b, 0x5f, - 0x6c, 0x69, 0x80, 0x81, 0x9a, 0xa5, 0xac, 0xb3, 0xab, 0xb0, 0xa7, - 0xa6, 0x9e, 0x94, 0x8d, 0x7f, 0x77, 0x64, 0x58, 0x45, 0x4e, 0x46, - 0x58, 0x5a, 0x5f, 0x6a, 0x67, 0x81, 0x80, 0x9c, 0xa6, 0xac, 0xb4, - 0xab, 0xb1, 0xa6, 0xa8, 0x9e, 0x93, 0x8d, 0x7e, 0x79, 0x62, 0x58, - 0x44, 0x4d, 0x46, 0x57, 0x59, 0x5e, 0x6d, 0x69, 0x80, 0x82, 0x98, - 0xa5, 0xac, 0xb1, 0xab, 0xb0, 0xa7, 0xa6, 0x9c, 0x94, 0x8e, 0x7e, - 0x78, 0x65, 0x58, 0x44, 0x50, 0x46, 0x58, 0x5a, 0x5f, 0x6c, 0x67, - 0x80, 0x81, 0x9a, 0xa3, 0xaa, 0xb3, 0xab, 0xaf, 0xa6, 0xa5, 0x9c, - 0x94, 0x8c, 0x7f, 0x77, 0x64, 0x56, 0x45, 0x52, 0x4a, 0x5b, 0x58, - 0x63, 0x69, 0x6b, 0x81, 0x80, 0x9d, 0xa2, 0xac, 0xae, 0xa9, 0xaa, - 0xa2, 0xa3, 0x99, 0x95, 0x8b, 0x7f, 0x76, 0x62, 0x57, 0x47, 0x53, - 0x4b, 0x5e, 0x5a, 0x65, 0x6c, 0x6c, 0x83, 0x7f, 0x9f, 0xa1, 0xac, - 0xae, 0xa7, 0xac, 0x9e, 0xa5, 0x96, 0x96, 0x89, 0x7e, 0x75, 0x63, - 0x59, 0x49, 0x56, 0x4d, 0x64, 0x5c, 0x69, 0x6a, 0x71, 0x82, 0x84, - 0x9f, 0xa1, 0xad, 0xa7, 0xa7, 0xa4, 0xa0, 0x9f, 0x94, 0x93, 0x85, - 0x80, 0x72, 0x66, 0x52, 0x50, 0x55, 0x50, 0x67, 0x5a, 0x6f, 0x67, - 0x76, 0x80, 0x85, 0xa2, 0x9d, 0xae, 0xa4, 0xa7, 0xa0, 0x9c, 0x9f, - 0x90, 0x94, 0x83, 0x81, 0x71, 0x67, 0x59, 0x56, 0x5e, 0x58, 0x6c, - 0x61, 0x72, 0x6a, 0x78, 0x80, 0x85, 0x9a, 0x97, 0xa3, 0x9b, 0x9e, - 0x99, 0x95, 0x98, 0x8c, 0x90, 0x82, 0x80, 0x74, 0x6a, 0x5d, 0x5e, - 0x5e, 0x61, 0x6e, 0x64, 0x75, 0x6a, 0x7e, 0x7c, 0x89, 0x95, 0x97, - 0x9f, 0x97, 0x9c, 0x95, 0x97, 0x91, 0x8e, 0x8c, 0x81, 0x84, 0x73, - 0x71, 0x5d, 0x61, 0x60, 0x63, 0x74, 0x64, 0x7d, 0x69, 0x7d, 0x7a, - 0x87, 0x96, 0x91, 0xa0, 0x93, 0x9a, 0x91, 0x93, 0x94, 0x87, 0x91, - 0x7f, 0x88, 0x76, 0x76, 0x65, 0x5e, 0x6c, 0x5a, 0x7e, 0x5d, 0x81, - 0x6a, 0x77, 0x7f, 0x7b, 0x98, 0x8b, 0x9f, 0x92, 0x97, 0x94, 0x8d, - 0x96, 0x86, 0x8d, 0x85, 0x7f, 0x85, 0x6d, 0x7f, 0x50, 0x78, 0x58, - 0x73, 0x75, 0x66, 0x8a, 0x5d, 0x91, 0x6c, 0x92, 0x8b, 0x91, 0x99, - 0x8d, 0x96, 0x8d, 0x93, 0x8c, 0x89, 0x87, 0x83, 0x82, 0x83, 0x75, - 0x7f, 0x5a, 0x7a, 0x5a, 0x77, 0x75, 0x6d, 0x88, 0x63, 0x8c, 0x6e, - 0x8a, 0x8b, 0x89, 0x97, 0x85, 0x95, 0x86, 0x90, 0x8b, 0x85, 0x8b, - 0x7d, 0x87, 0x7d, 0x81, 0x7c, 0x72, 0x6d, 0x6e, 0x6b, 0x77, 0x76, - 0x78, 0x7a, 0x6e, 0x7f, 0x72, 0x8d, 0x89, 0x94, 0x92, 0x8a, 0x91, - 0x8d, 0x96, 0x90, 0x8d, 0x8b, 0x81, 0x87, 0x82, 0x84, 0x84, 0x77, - 0x78, 0x63, 0x72, 0x67, 0x76, 0x74, 0x70, 0x76, 0x6b, 0x7c, 0x77, - 0x85, 0x88, 0x89, 0x8d, 0x87, 0x91, 0x8c, 0x92, 0x8e, 0x88, 0x89, - 0x80, 0x89, 0x80, 0x88, 0x80, 0x7d, 0x7d, 0x75, 0x7c, 0x72, 0x79, - 0x71, 0x71, 0x75, 0x70, 0x7b, 0x73, 0x7d, 0x7b, 0x7d, 0x85, 0x84, - 0x90, 0x8c, 0x90, 0x8d, 0x8a, 0x8b, 0x87, 0x88, 0x84, 0x80, 0x7b, - 0x78, 0x76, 0x72, 0x71, 0x6f, 0x73, 0x74, 0x77, 0x7b, 0x7d, 0x81, - 0x82, 0x85, 0x86, 0x89, 0x88, 0x8a, 0x86, 0x87, 0x83, 0x81, 0x82, - 0x7e, 0x81, 0x7e, 0x83, 0x82, 0x85, 0x87, 0x86, 0x88, 0x86, 0x86, - 0x84, 0x83, 0x81, 0x7e, 0x7d, 0x79, 0x78, 0x76, 0x75, 0x76, 0x75, - 0x78, 0x78, 0x7b, 0x7b, 0x7c, 0x7d, 0x7c, 0x7b, 0x7a, 0x79, 0x78, - 0x79, 0x79, 0x7a, 0x7b, 0x7c, 0x7f, 0x7f, 0x81, 0x82, 0x84, 0x85, - 0x87, 0x89, 0x8b, 0x8d, 0x8c, 0x8e, 0x8a, 0x8c, 0x89, 0x8a, 0x85, - 0x83, 0x7a, 0x77, 0x6b, 0x6b, 0x6a, 0x68, 0x72, 0x69, 0x77, 0x6f, - 0x7c, 0x7f, 0x85, 0x91, 0x8e, 0x96, 0x8f, 0x91, 0x8c, 0x89, 0x89, - 0x82, 0x82, 0x7c, 0x7c, 0x7d, 0x7a, 0x80, 0x7d, 0x84, 0x84, 0x86, - 0x8b, 0x88, 0x8c, 0x87, 0x88, 0x83, 0x80, 0x7e, 0x78, 0x77, 0x73, - 0x73, 0x73, 0x73, 0x76, 0x76, 0x7a, 0x7b, 0x7d, 0x80, 0x81, 0x83, - 0x82, 0x83, 0x82, 0x83, 0x82, 0x82, 0x80, 0x80, 0x7e, 0x80, 0x81, - 0x81, 0x86, 0x83, 0x87, 0x83, 0x86, 0x84, 0x82, 0x83, 0x7e, 0x7d, - 0x77, 0x77, 0x74, 0x74, 0x74, 0x74, 0x76, 0x77, 0x7a, 0x7d, 0x7f, - 0x82, 0x82, 0x85, 0x84, 0x84, 0x84, 0x82, 0x82, 0x80, 0x7f, 0x7d, - 0x7d, 0x7d, 0x7d, 0x7f, 0x7f, 0x81, 0x83, 0x84, 0x86, 0x86, 0x86, - 0x86, 0x85, 0x84, 0x82, 0x81, 0x7f, 0x7d, 0x7b, 0x7b, 0x7a, 0x7a, - 0x7a, 0x7a, 0x7b, 0x7c, 0x7d, 0x7f, 0x80, 0x81, 0x82, 0x82, 0x82, - 0x83, 0x82, 0x82, 0x82, 0x81, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x81, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x7f, 0x7f, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, - 0x7e, 0x7e, 0x7f, 0x7f, 0x80, 0x80, 0x81, 0x81, 0x82, 0x82, 0x82, - 0x82, 0x81, 0x81, 0x81, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7e, 0x7e, - 0x7e, 0x7e, 0x7e, 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x80, 0x80, 0x80, 0x80, 0x81, 0x81, 0x81, 0x81, 0x81, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, - }, - { // 3 - 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x80, - 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x80, - 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, - 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x7f, - 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x80, - 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x7f, - 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, - 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x7f, - 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, - 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, - 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, - 0x80, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x7f, - 0x80, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x80, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, - 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x80, - 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, - 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x7f, - 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x7f, - 0x80, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x80, - 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x80, - 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x80, - 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x7f, - 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x80, - 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x80, - 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x80, - 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x80, - 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, - 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, - 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x80, - 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x80, - 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, - 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x7f, - 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, - 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, - 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x80, - 0x7f, 0x7f, 0x80, 0x7e, 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x7e, 0x80, 0x80, 0x81, - 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x81, 0x7f, 0x80, 0x82, 0x7f, 0x7f, - 0x7e, 0x81, 0x7f, 0x7e, 0x80, 0x80, 0x7e, 0x7e, 0x7f, 0x7e, 0x7e, - 0x7e, 0x81, 0x7d, 0x7d, 0x7f, 0x7e, 0x7e, 0x7f, 0x80, 0x80, 0x80, - 0x80, 0x82, 0x81, 0x80, 0x83, 0x82, 0x82, 0x84, 0x83, 0x81, 0x81, - 0x80, 0x82, 0x83, 0x81, 0x80, 0x82, 0x7e, 0x7c, 0x7e, 0x7e, 0x7d, - 0x7e, 0x7d, 0x7a, 0x7a, 0x7b, 0x7d, 0x7b, 0x7e, 0x80, 0x7d, 0x7d, - 0x81, 0x80, 0x82, 0x83, 0x82, 0x84, 0x84, 0x83, 0x84, 0x84, 0x84, - 0x86, 0x82, 0x82, 0x83, 0x82, 0x81, 0x81, 0x80, 0x7e, 0x7e, 0x7c, - 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x79, 0x79, 0x7b, 0x7a, 0x7b, 0x7d, - 0x7f, 0x80, 0x80, 0x80, 0x81, 0x83, 0x82, 0x84, 0x85, 0x86, 0x85, - 0x85, 0x87, 0x84, 0x83, 0x84, 0x82, 0x81, 0x80, 0x7f, 0x7d, 0x7c, - 0x7d, 0x7a, 0x7a, 0x7b, 0x7a, 0x7a, 0x79, 0x77, 0x7a, 0x7a, 0x7c, - 0x7d, 0x7e, 0x8f, 0x82, 0x7c, 0x81, 0x7b, 0x7f, 0x82, 0x86, 0x86, - 0x81, 0x86, 0x86, 0x81, 0x85, 0x89, 0x83, 0x82, 0x80, 0x80, 0x81, - 0x7d, 0x7c, 0x7e, 0x7b, 0x74, 0x78, 0x76, 0x75, 0x73, 0x79, 0x79, - 0x76, 0x7c, 0x81, 0x80, 0x7f, 0x80, 0x84, 0x82, 0x81, 0x86, 0x88, - 0x84, 0x84, 0x88, 0x86, 0x83, 0x84, 0x87, 0x83, 0x82, 0x80, 0x85, - 0x80, 0x78, 0x80, 0x7d, 0x77, 0x7c, 0x7d, 0x7b, 0x7a, 0x79, 0x77, - 0x75, 0x79, 0x7b, 0x7b, 0x7f, 0x7c, 0x7c, 0x80, 0x7d, 0x82, 0x82, - 0x84, 0x89, 0x87, 0x8b, 0x85, 0x84, 0x8e, 0x87, 0x88, 0x8a, 0x86, - 0x88, 0x82, 0x83, 0x7f, 0x7d, 0x7e, 0x7a, 0x7d, 0x79, 0x77, 0x76, - 0x76, 0x73, 0x73, 0x77, 0x79, 0x7b, 0x7c, 0x80, 0x7e, 0x7e, 0x80, - 0x84, 0x83, 0x83, 0x87, 0x84, 0x85, 0x88, 0x87, 0x87, 0x89, 0x87, - 0x85, 0x83, 0x85, 0x80, 0x7c, 0x83, 0x7c, 0x7a, 0x7d, 0x7d, 0x7a, - 0x7a, 0x7d, 0x76, 0x76, 0x7c, 0x80, 0x7d, 0x7c, 0x7c, 0x7b, 0x7c, - 0x7a, 0x82, 0x86, 0x81, 0x7d, 0x86, 0x82, 0x78, 0x7e, 0x85, 0x85, - 0x86, 0x86, 0x83, 0x82, 0x80, 0x87, 0x89, 0x7f, 0x81, 0x7e, 0x7b, - 0x79, 0x7b, 0x85, 0x85, 0x80, 0x7e, 0x79, 0x75, 0x76, 0x7a, 0x82, - 0x82, 0x82, 0x82, 0x81, 0x7b, 0x7a, 0x82, 0x83, 0x81, 0x83, 0x86, - 0x83, 0x83, 0x7e, 0x7f, 0x7d, 0x7d, 0x83, 0x83, 0x85, 0x84, 0x83, - 0x7e, 0x78, 0x7a, 0x7e, 0x81, 0x83, 0x84, 0x80, 0x7d, 0x7c, 0x7d, - 0x7b, 0x7b, 0x84, 0x81, 0x7d, 0x7c, 0x7d, 0x7b, 0x7f, 0x85, 0x85, - 0x81, 0x7f, 0x81, 0x7d, 0x7a, 0x7b, 0x81, 0x87, 0x82, 0x83, 0x84, - 0x7f, 0x7b, 0x7c, 0x80, 0x82, 0x84, 0x82, 0x81, 0x7d, 0x80, 0x7c, - 0x7b, 0x81, 0x84, 0x83, 0x7e, 0x7f, 0x7d, 0x7e, 0x7e, 0x84, 0x84, - 0x84, 0x81, 0x7d, 0x7e, 0x7e, 0x80, 0x80, 0x7c, 0x77, 0x7d, 0x7f, - 0x7b, 0x7c, 0x7a, 0x7c, 0x7c, 0x7a, 0x7d, 0x78, 0x7e, 0x7f, 0x7d, - 0x82, 0x82, 0x85, 0x8d, 0x8c, 0x86, 0x87, 0x86, 0x86, 0x82, 0x8f, - 0x95, 0x8a, 0x82, 0x7c, 0x75, 0x70, 0x73, 0x7b, 0x7d, 0x6e, 0x64, - 0x5f, 0x64, 0x6a, 0x6e, 0x6d, 0x73, 0x87, 0x8c, 0x85, 0x86, 0x98, - 0xa6, 0x9c, 0x9a, 0x9d, 0x9c, 0x99, 0x99, 0xa0, 0x9c, 0x97, 0x87, - 0x78, 0x66, 0x63, 0x67, 0x6e, 0x69, 0x64, 0x60, 0x4b, 0x4a, 0x5a, - 0x6a, 0x60, 0x6f, 0x82, 0x81, 0x85, 0x94, 0xa7, 0x9e, 0x96, 0x9c, - 0xa9, 0xaa, 0xac, 0xb3, 0xa3, 0x90, 0x81, 0x83, 0x80, 0x78, 0x7d, - 0x7a, 0x6b, 0x51, 0x51, 0x56, 0x52, 0x67, 0x80, 0x7f, 0x67, 0x64, - 0x6d, 0x75, 0x7c, 0x95, 0xae, 0xa3, 0x92, 0x8b, 0x9a, 0x9d, 0x9e, - 0xa3, 0x9f, 0x8a, 0x7e, 0x7e, 0x81, 0x81, 0x7f, 0x85, 0x71, 0x53, - 0x46, 0x4c, 0x50, 0x60, 0x81, 0x93, 0x81, 0x64, 0x5e, 0x66, 0x76, - 0x8c, 0xa8, 0xb3, 0xa6, 0x93, 0x94, 0x97, 0x99, 0x9b, 0x9d, 0x96, - 0x8a, 0x85, 0x83, 0x80, 0x7d, 0x7b, 0x77, 0x63, 0x49, 0x49, 0x43, - 0x5d, 0x7e, 0x8e, 0x8a, 0x69, 0x5f, 0x5f, 0x6e, 0x81, 0x9e, 0xb1, - 0xa8, 0x9b, 0x93, 0x98, 0x9a, 0x98, 0x97, 0x96, 0x8c, 0x85, 0x87, - 0x87, 0x83, 0x79, 0x78, 0x69, 0x4b, 0x47, 0x4e, 0x4e, 0x6f, 0x93, - 0x90, 0x73, 0x57, 0x5e, 0x67, 0x74, 0x94, 0xb4, 0xb8, 0x99, 0x90, - 0x9a, 0xa1, 0x96, 0x94, 0x9c, 0x96, 0x88, 0x86, 0x8e, 0x82, 0x79, - 0x72, 0x6c, 0x50, 0x41, 0x41, 0x47, 0x7a, 0x93, 0x98, 0x78, 0x50, - 0x4e, 0x5b, 0x7f, 0x98, 0xb4, 0xc1, 0xa9, 0x90, 0x8a, 0x96, 0x99, - 0x9a, 0x9c, 0x9b, 0x90, 0x87, 0x84, 0x7d, 0x7c, 0x72, 0x6b, 0x53, - 0x40, 0x3f, 0x4b, 0x7a, 0x9b, 0x97, 0x6d, 0x50, 0x54, 0x63, 0x78, - 0x97, 0xb8, 0xc0, 0xa2, 0x8b, 0x8f, 0x97, 0x98, 0x95, 0x9c, 0x9a, - 0x8f, 0x86, 0x84, 0x7e, 0x78, 0x6e, 0x6c, 0x52, 0x40, 0x3e, 0x5b, - 0x87, 0x94, 0x92, 0x69, 0x50, 0x4d, 0x67, 0x8a, 0xa4, 0xbd, 0xb7, - 0x9b, 0x84, 0x88, 0x98, 0x9d, 0x9d, 0x9a, 0x95, 0x88, 0x82, 0x7f, - 0x7e, 0x78, 0x6f, 0x68, 0x4b, 0x40, 0x3f, 0x6f, 0x97, 0x9b, 0x81, - 0x58, 0x54, 0x56, 0x6f, 0x90, 0xb1, 0xbd, 0xb2, 0x94, 0x7e, 0x86, - 0x98, 0xa1, 0x9c, 0x98, 0x95, 0x89, 0x80, 0x78, 0x7b, 0x78, 0x72, - 0x62, 0x45, 0x3e, 0x45, 0x78, 0x9c, 0x9a, 0x77, 0x56, 0x4d, 0x59, - 0x7c, 0x9b, 0xb0, 0xb4, 0xae, 0x93, 0x82, 0x86, 0x98, 0xa2, 0x9d, - 0x97, 0x8f, 0x87, 0x80, 0x78, 0x7a, 0x77, 0x6b, 0x58, 0x4a, 0x3b, - 0x4d, 0x8c, 0xa8, 0x94, 0x5b, 0x4a, 0x57, 0x6c, 0x83, 0xa0, 0xb9, - 0xb6, 0x9d, 0x8b, 0x8a, 0x8f, 0x97, 0x9c, 0x9d, 0x94, 0x8b, 0x84, - 0x80, 0x79, 0x79, 0x6e, 0x63, 0x4d, 0x3c, 0x3b, 0x6e, 0xab, 0xab, - 0x78, 0x45, 0x4b, 0x60, 0x78, 0x8d, 0xb2, 0xc6, 0xaf, 0x8b, 0x7c, - 0x88, 0x96, 0x9b, 0x9e, 0x99, 0x90, 0x85, 0x7d, 0x79, 0x78, 0x76, - 0x6d, 0x58, 0x42, 0x39, 0x5c, 0x98, 0xac, 0x89, 0x55, 0x4c, 0x5e, - 0x75, 0x85, 0x9f, 0xb6, 0xb6, 0x97, 0x82, 0x85, 0x92, 0x9b, 0x9b, - 0x98, 0x90, 0x8a, 0x83, 0x7e, 0x79, 0x7b, 0x75, 0x64, 0x4d, 0x3b, - 0x40, 0x78, 0xac, 0xa6, 0x70, 0x4b, 0x51, 0x64, 0x76, 0x8f, 0xb2, - 0xc0, 0xab, 0x8c, 0x7f, 0x89, 0x94, 0x97, 0x99, 0x98, 0x8f, 0x85, - 0x7d, 0x7b, 0x77, 0x71, 0x67, 0x56, 0x44, 0x3a, 0x69, 0xa9, 0xb4, - 0x75, 0x45, 0x50, 0x6e, 0x7c, 0x82, 0xa5, 0xc0, 0xb3, 0x8a, 0x7b, - 0x86, 0x97, 0x98, 0x99, 0x98, 0x8f, 0x84, 0x7e, 0x7b, 0x7b, 0x76, - 0x6d, 0x56, 0x42, 0x40, 0x5e, 0xa5, 0xb3, 0x82, 0x44, 0x47, 0x6c, - 0x7e, 0x82, 0x9b, 0xb7, 0xaf, 0x98, 0x83, 0x83, 0x8d, 0x97, 0x9b, - 0x96, 0x8f, 0x8a, 0x87, 0x7c, 0x75, 0x73, 0x70, 0x61, 0x48, 0x42, - 0x56, 0x96, 0xae, 0x8f, 0x58, 0x47, 0x61, 0x73, 0x85, 0x95, 0xb4, - 0xb7, 0x9e, 0x7d, 0x7d, 0x92, 0x9b, 0x97, 0x91, 0x92, 0x8b, 0x81, - 0x78, 0x7a, 0x79, 0x6c, 0x5a, 0x4d, 0x42, 0x55, 0x91, 0xb1, 0x90, - 0x59, 0x4a, 0x61, 0x74, 0x7f, 0x9a, 0xb5, 0xb7, 0x9c, 0x80, 0x81, - 0x8f, 0x98, 0x95, 0x93, 0x93, 0x8c, 0x82, 0x7a, 0x7b, 0x77, 0x6a, - 0x56, 0x46, 0x3c, 0x58, 0x9d, 0xb7, 0x8d, 0x4c, 0x41, 0x60, 0x7c, - 0x88, 0x9a, 0xb8, 0xba, 0x9b, 0x76, 0x7b, 0x94, 0xa2, 0x97, 0x90, - 0x90, 0x8f, 0x80, 0x72, 0x74, 0x77, 0x6b, 0x53, 0x43, 0x40, 0x6e, - 0xa1, 0xab, 0x7b, 0x4b, 0x4a, 0x69, 0x80, 0x8c, 0xa5, 0xb4, 0xaf, - 0x93, 0x83, 0x83, 0x92, 0x99, 0x98, 0x92, 0x8d, 0x8a, 0x82, 0x79, - 0x75, 0x72, 0x65, 0x54, 0x3f, 0x49, 0x77, 0xa9, 0xa1, 0x6f, 0x4a, - 0x55, 0x6e, 0x7c, 0x8a, 0xa7, 0xbe, 0xb1, 0x8b, 0x75, 0x86, 0x98, - 0x9d, 0x92, 0x92, 0x92, 0x89, 0x77, 0x70, 0x76, 0x74, 0x61, 0x50, - 0x43, 0x52, 0x84, 0xa7, 0x95, 0x63, 0x51, 0x5f, 0x75, 0x7f, 0x91, - 0xaa, 0xba, 0xaa, 0x8a, 0x7b, 0x87, 0x99, 0x99, 0x91, 0x8d, 0x8e, - 0x88, 0x7a, 0x72, 0x72, 0x6b, 0x5b, 0x45, 0x45, 0x6f, 0xa0, 0xa4, - 0x75, 0x52, 0x56, 0x6a, 0x78, 0x85, 0xa2, 0xb6, 0xad, 0x92, 0x81, - 0x86, 0x93, 0x97, 0x95, 0x91, 0x8f, 0x8d, 0x82, 0x78, 0x76, 0x6f, - 0x64, 0x56, 0x46, 0x4f, 0x81, 0xa5, 0x96, 0x65, 0x4f, 0x61, 0x73, - 0x7a, 0x88, 0xaf, 0xbe, 0xa7, 0x83, 0x7b, 0x8d, 0x9c, 0x97, 0x90, - 0x93, 0x93, 0x86, 0x71, 0x71, 0x73, 0x6f, 0x5e, 0x4a, 0x47, 0x66, - 0x97, 0x9e, 0x78, 0x58, 0x5d, 0x70, 0x76, 0x82, 0x9a, 0xb6, 0xb3, - 0x94, 0x7e, 0x84, 0x98, 0x9a, 0x90, 0x8c, 0x91, 0x8d, 0x7c, 0x70, - 0x74, 0x73, 0x68, 0x52, 0x43, 0x54, 0x86, 0xa4, 0x8a, 0x63, 0x59, - 0x69, 0x73, 0x7a, 0x8c, 0xac, 0xb8, 0xa5, 0x87, 0x7f, 0x8e, 0x9a, - 0x94, 0x8c, 0x8d, 0x90, 0x87, 0x74, 0x72, 0x6e, 0x69, 0x5b, 0x4b, - 0x4e, 0x78, 0x9d, 0x93, 0x6a, 0x57, 0x65, 0x75, 0x7a, 0x86, 0xa5, - 0xb5, 0xa9, 0x89, 0x7e, 0x8a, 0x9a, 0x96, 0x8f, 0x8b, 0x90, 0x87, - 0x77, 0x71, 0x71, 0x70, 0x64, 0x50, 0x47, 0x6c, 0x94, 0x98, 0x74, - 0x5e, 0x67, 0x74, 0x75, 0x80, 0x9c, 0xb1, 0xab, 0x91, 0x82, 0x89, - 0x96, 0x94, 0x91, 0x8d, 0x90, 0x89, 0x7a, 0x72, 0x72, 0x6e, 0x64, - 0x52, 0x4d, 0x6d, 0x93, 0x94, 0x73, 0x5e, 0x66, 0x76, 0x7b, 0x81, - 0x97, 0xb0, 0xab, 0x93, 0x82, 0x89, 0x95, 0x96, 0x8e, 0x8a, 0x8e, - 0x8a, 0x7b, 0x71, 0x6f, 0x6c, 0x66, 0x56, 0x51, 0x6c, 0x8f, 0x92, - 0x75, 0x60, 0x65, 0x74, 0x7b, 0x87, 0x9e, 0xad, 0xaa, 0x96, 0x86, - 0x8a, 0x95, 0x9a, 0x95, 0x8d, 0x8b, 0x86, 0x7c, 0x73, 0x6a, 0x65, - 0x63, 0x54, 0x4b, 0x6a, 0x91, 0x93, 0x71, 0x59, 0x62, 0x75, 0x7d, - 0x85, 0x9c, 0xb1, 0xac, 0x93, 0x84, 0x8b, 0x97, 0x97, 0x91, 0x8c, - 0x91, 0x8a, 0x7d, 0x6f, 0x66, 0x64, 0x60, 0x53, 0x55, 0x74, 0x8e, - 0x89, 0x6b, 0x5e, 0x67, 0x75, 0x7c, 0x89, 0x9e, 0xaf, 0xa6, 0x91, - 0x88, 0x8f, 0x96, 0x93, 0x8e, 0x8d, 0x91, 0x87, 0x7b, 0x6f, 0x68, - 0x61, 0x60, 0x55, 0x5d, 0x78, 0x88, 0x82, 0x6a, 0x63, 0x69, 0x76, - 0x80, 0x8e, 0xa1, 0xa9, 0x9f, 0x90, 0x89, 0x8e, 0x93, 0x94, 0x90, - 0x8e, 0x8b, 0x82, 0x77, 0x6d, 0x68, 0x63, 0x60, 0x56, 0x64, 0x81, - 0x8a, 0x78, 0x64, 0x66, 0x72, 0x7b, 0x82, 0x93, 0xa3, 0xa7, 0x98, - 0x8b, 0x8a, 0x92, 0x95, 0x92, 0x8d, 0x8c, 0x89, 0x80, 0x75, 0x69, - 0x63, 0x64, 0x5e, 0x5f, 0x71, 0x83, 0x83, 0x6f, 0x63, 0x6a, 0x77, - 0x80, 0x8a, 0x97, 0xa3, 0x9f, 0x90, 0x89, 0x8f, 0x97, 0x95, 0x8e, - 0x8d, 0x8d, 0x87, 0x7c, 0x72, 0x6d, 0x68, 0x65, 0x5c, 0x62, 0x78, - 0x85, 0x7c, 0x6b, 0x66, 0x6e, 0x78, 0x80, 0x8e, 0x9e, 0xa7, 0xa0, - 0x94, 0x8e, 0x91, 0x97, 0x99, 0x93, 0x8e, 0x8a, 0x83, 0x78, 0x6b, - 0x62, 0x62, 0x60, 0x5f, 0x6b, 0x79, 0x7e, 0x71, 0x67, 0x68, 0x72, - 0x7e, 0x8a, 0x96, 0x9f, 0x9f, 0x97, 0x91, 0x92, 0x96, 0x97, 0x95, - 0x90, 0x8e, 0x87, 0x7e, 0x74, 0x6d, 0x67, 0x61, 0x5b, 0x63, 0x74, - 0x7d, 0x77, 0x6b, 0x67, 0x6b, 0x74, 0x7f, 0x8e, 0x9a, 0x9f, 0x9b, - 0x94, 0x90, 0x90, 0x94, 0x96, 0x93, 0x8f, 0x8a, 0x82, 0x79, 0x6f, - 0x66, 0x63, 0x61, 0x64, 0x71, 0x7a, 0x79, 0x6f, 0x68, 0x6a, 0x71, - 0x7c, 0x8a, 0x95, 0x9b, 0x98, 0x90, 0x8f, 0x93, 0x96, 0x95, 0x92, - 0x90, 0x8d, 0x86, 0x7d, 0x75, 0x6f, 0x68, 0x62, 0x61, 0x6b, 0x78, - 0x79, 0x71, 0x6a, 0x6b, 0x6f, 0x77, 0x81, 0x8e, 0x98, 0x99, 0x95, - 0x91, 0x91, 0x92, 0x93, 0x93, 0x92, 0x90, 0x8a, 0x80, 0x77, 0x6f, - 0x69, 0x65, 0x64, 0x6b, 0x75, 0x78, 0x72, 0x6b, 0x69, 0x6d, 0x74, - 0x7e, 0x89, 0x93, 0x96, 0x92, 0x8e, 0x90, 0x93, 0x95, 0x93, 0x91, - 0x90, 0x8c, 0x84, 0x7b, 0x75, 0x70, 0x6a, 0x65, 0x67, 0x71, 0x78, - 0x75, 0x6e, 0x6a, 0x6b, 0x70, 0x78, 0x83, 0x8d, 0x94, 0x93, 0x91, - 0x8f, 0x91, 0x93, 0x94, 0x92, 0x91, 0x8f, 0x89, 0x80, 0x77, 0x70, - 0x6a, 0x66, 0x68, 0x70, 0x76, 0x75, 0x6e, 0x69, 0x68, 0x6c, 0x76, - 0x82, 0x8c, 0x93, 0x93, 0x90, 0x90, 0x93, 0x96, 0x96, 0x95, 0x93, - 0x91, 0x8b, 0x82, 0x7a, 0x73, 0x6d, 0x67, 0x65, 0x6d, 0x75, 0x77, - 0x71, 0x6b, 0x68, 0x6a, 0x73, 0x7d, 0x88, 0x90, 0x92, 0x91, 0x90, - 0x91, 0x93, 0x94, 0x94, 0x94, 0x92, 0x8e, 0x85, 0x7c, 0x75, 0x70, - 0x6a, 0x67, 0x6b, 0x73, 0x76, 0x74, 0x6e, 0x6a, 0x6a, 0x6f, 0x79, - 0x84, 0x8d, 0x90, 0x90, 0x8e, 0x90, 0x93, 0x96, 0x95, 0x93, 0x91, - 0x8e, 0x88, 0x80, 0x7a, 0x73, 0x6d, 0x68, 0x69, 0x71, 0x76, 0x75, - 0x70, 0x6c, 0x6a, 0x6e, 0x76, 0x80, 0x89, 0x8f, 0x8f, 0x8e, 0x8e, - 0x91, 0x93, 0x94, 0x94, 0x92, 0x8f, 0x8a, 0x82, 0x7b, 0x75, 0x71, - 0x6c, 0x6b, 0x6f, 0x75, 0x76, 0x73, 0x6e, 0x6c, 0x6d, 0x73, 0x7c, - 0x85, 0x8c, 0x8e, 0x8e, 0x8d, 0x8e, 0x90, 0x93, 0x93, 0x92, 0x8f, - 0x8c, 0x85, 0x7e, 0x78, 0x74, 0x70, 0x6c, 0x6e, 0x74, 0x78, 0x76, - 0x72, 0x6e, 0x6d, 0x71, 0x78, 0x81, 0x88, 0x8d, 0x8d, 0x8c, 0x8d, - 0x8f, 0x90, 0x91, 0x90, 0x8e, 0x8c, 0x88, 0x81, 0x7a, 0x74, 0x70, - 0x6d, 0x6e, 0x74, 0x79, 0x78, 0x74, 0x70, 0x6e, 0x70, 0x77, 0x7f, - 0x87, 0x8c, 0x8c, 0x8b, 0x8b, 0x8b, 0x8d, 0x90, 0x90, 0x8f, 0x8c, - 0x88, 0x82, 0x7c, 0x77, 0x73, 0x71, 0x70, 0x73, 0x77, 0x7a, 0x77, - 0x73, 0x71, 0x71, 0x74, 0x7b, 0x83, 0x89, 0x8c, 0x8b, 0x8a, 0x8b, - 0x8b, 0x8c, 0x8d, 0x8e, 0x8c, 0x8a, 0x84, 0x7d, 0x77, 0x73, 0x71, - 0x71, 0x74, 0x79, 0x7c, 0x79, 0x75, 0x72, 0x72, 0x75, 0x7b, 0x83, - 0x88, 0x8b, 0x8a, 0x89, 0x89, 0x8b, 0x8c, 0x8b, 0x8b, 0x8b, 0x8a, - 0x87, 0x83, 0x7c, 0x76, 0x72, 0x70, 0x72, 0x79, 0x7e, 0x7e, 0x79, - 0x75, 0x72, 0x74, 0x78, 0x7e, 0x84, 0x88, 0x89, 0x89, 0x89, 0x89, - 0x89, 0x88, 0x88, 0x88, 0x89, 0x88, 0x84, 0x7f, 0x7a, 0x74, 0x70, - 0x71, 0x77, 0x7e, 0x80, 0x7d, 0x78, 0x75, 0x74, 0x77, 0x7d, 0x83, - 0x87, 0x88, 0x88, 0x88, 0x88, 0x87, 0x86, 0x86, 0x86, 0x86, 0x86, - 0x84, 0x80, 0x7d, 0x78, 0x73, 0x71, 0x74, 0x7b, 0x80, 0x80, 0x7d, - 0x79, 0x76, 0x77, 0x7b, 0x81, 0x86, 0x88, 0x88, 0x88, 0x87, 0x87, - 0x86, 0x85, 0x84, 0x84, 0x84, 0x84, 0x81, 0x7d, 0x79, 0x75, 0x72, - 0x74, 0x79, 0x7e, 0x80, 0x7e, 0x7b, 0x79, 0x78, 0x7b, 0x7f, 0x84, - 0x87, 0x88, 0x88, 0x87, 0x87, 0x86, 0x85, 0x85, 0x85, 0x84, 0x83, - 0x7f, 0x7a, 0x75, 0x73, 0x72, 0x76, 0x7c, 0x7f, 0x7f, 0x7b, 0x79, - 0x78, 0x7a, 0x7e, 0x83, 0x87, 0x89, 0x88, 0x87, 0x86, 0x86, 0x85, - 0x84, 0x83, 0x82, 0x82, 0x81, 0x7f, 0x7e, 0x7e, 0x7d, 0x7d, 0x7d, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7e, 0x7e, 0x7f, 0x7f, 0x80, 0x80, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7e, 0x7d, 0x7c, 0x7b, 0x79, 0x78, - 0x77, 0x76, 0x76, 0x77, 0x79, 0x7c, 0x7e, 0x7f, 0x80, 0x80, 0x81, - 0x83, 0x86, 0x89, 0x8b, 0x8c, 0x8b, 0x8a, 0x89, 0x87, 0x86, 0x84, - 0x82, 0x7f, 0x7d, 0x7a, 0x77, 0x76, 0x76, 0x78, 0x7c, 0x7e, 0x7d, - 0x7b, 0x7a, 0x7a, 0x7c, 0x7f, 0x82, 0x85, 0x86, 0x86, 0x84, 0x83, - 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x81, 0x80, 0x7e, - 0x7c, 0x7c, 0x7e, 0x80, 0x80, 0x7f, 0x7e, 0x7d, 0x7c, 0x7c, 0x7d, - 0x7e, 0x7f, 0x7f, 0x80, 0x80, 0x81, 0x81, 0x80, 0x7f, 0x7e, 0x7d, - 0x7c, 0x7b, 0x7a, 0x7a, 0x7a, 0x7a, 0x7b, 0x7c, 0x7e, 0x80, 0x81, - 0x82, 0x83, 0x84, 0x86, 0x88, 0x89, 0x89, 0x89, 0x88, 0x86, 0x85, - 0x83, 0x81, 0x7e, 0x7c, 0x7a, 0x79, 0x78, 0x78, 0x78, 0x79, 0x7b, - 0x7d, 0x7d, 0x7d, 0x7d, 0x7e, 0x7f, 0x81, 0x83, 0x84, 0x85, 0x85, - 0x83, 0x82, 0x81, 0x81, 0x81, 0x82, 0x82, 0x81, 0x7f, 0x7e, 0x7c, - 0x7c, 0x7e, 0x7f, 0x80, 0x80, 0x7f, 0x7e, 0x7e, 0x7e, 0x7f, 0x80, - 0x80, 0x81, 0x81, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7e, 0x7d, 0x7d, - 0x7c, 0x7b, 0x7b, 0x7b, 0x7b, 0x7c, 0x7c, 0x7d, 0x7e, 0x80, 0x81, - 0x82, 0x83, 0x84, 0x84, 0x84, 0x85, 0x85, 0x84, 0x84, 0x83, 0x81, - 0x80, 0x7f, 0x7d, 0x7c, 0x7c, 0x7b, 0x7b, 0x7b, 0x7b, 0x7c, 0x7c, - 0x7e, 0x7f, 0x80, 0x80, 0x81, 0x82, 0x82, 0x83, 0x83, 0x83, 0x82, - 0x82, 0x81, 0x80, 0x7f, 0x7e, 0x7e, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, - 0x7d, 0x7e, 0x7e, 0x7f, 0x80, 0x81, 0x81, 0x82, 0x82, 0x83, 0x83, - 0x82, 0x82, 0x81, 0x80, 0x80, 0x7f, 0x7e, 0x7d, 0x7d, 0x7d, 0x7d, - 0x7d, 0x7d, 0x7d, 0x7e, 0x7e, 0x7f, 0x80, 0x81, 0x81, 0x82, 0x82, - 0x82, 0x82, 0x82, 0x82, 0x81, 0x81, 0x80, 0x80, 0x7f, 0x7f, 0x7e, - 0x7e, 0x7e, 0x7e, 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x81, - 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x80, 0x80, 0x80, 0x7f, 0x7f, - 0x7f, 0x7e, 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, - 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x80, 0x80, 0x80, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - }, - { // 4 - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, - 0x80, 0x81, 0x81, 0x81, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x81, - 0x81, 0x80, 0x7f, 0x7e, 0x7e, 0x7c, 0x7b, 0x79, 0x78, 0x77, 0x75, - 0x75, 0x75, 0x77, 0x79, 0x7a, 0x7d, 0x80, 0x83, 0x86, 0x89, 0x8c, - 0x8e, 0x8f, 0x91, 0x91, 0x91, 0x8f, 0x8c, 0x89, 0x86, 0x81, 0x7e, - 0x79, 0x75, 0x70, 0x6d, 0x69, 0x68, 0x68, 0x68, 0x6c, 0x6c, 0x71, - 0x75, 0x79, 0x7f, 0x85, 0x8b, 0x8f, 0x92, 0x94, 0x94, 0x94, 0x94, - 0x93, 0x92, 0x8f, 0x8e, 0x8b, 0x8a, 0x87, 0x85, 0x82, 0x7f, 0x7c, - 0x77, 0x75, 0x6e, 0x6f, 0x69, 0x68, 0x67, 0x64, 0x68, 0x68, 0x6d, - 0x73, 0x79, 0x7f, 0x86, 0x87, 0x8e, 0x8d, 0x91, 0x93, 0x93, 0x93, - 0x93, 0x91, 0x91, 0x8e, 0x8e, 0x8c, 0x89, 0x88, 0x82, 0x80, 0x79, - 0x75, 0x6d, 0x6e, 0x64, 0x66, 0x61, 0x5f, 0x63, 0x62, 0x6b, 0x71, - 0x78, 0x80, 0x87, 0x8a, 0x92, 0x91, 0x97, 0x97, 0x97, 0x99, 0x96, - 0x95, 0x94, 0x90, 0x90, 0x8b, 0x88, 0x85, 0x80, 0x7c, 0x76, 0x6f, - 0x6e, 0x67, 0x63, 0x66, 0x5b, 0x65, 0x61, 0x67, 0x70, 0x74, 0x7f, - 0x87, 0x89, 0x91, 0x93, 0x93, 0x9b, 0x96, 0x9a, 0x98, 0x94, 0x95, - 0x90, 0x8e, 0x8c, 0x88, 0x86, 0x81, 0x7c, 0x79, 0x71, 0x6d, 0x6d, - 0x61, 0x67, 0x5e, 0x5f, 0x65, 0x60, 0x6e, 0x71, 0x7a, 0x84, 0x89, - 0x8d, 0x95, 0x94, 0x99, 0x9b, 0x98, 0x9c, 0x95, 0x96, 0x93, 0x8e, - 0x8e, 0x88, 0x86, 0x82, 0x7d, 0x78, 0x74, 0x6b, 0x6f, 0x66, 0x66, - 0x69, 0x5f, 0x6b, 0x64, 0x6d, 0x75, 0x77, 0x84, 0x88, 0x8b, 0x91, - 0x93, 0x93, 0x9a, 0x94, 0x98, 0x95, 0x90, 0x94, 0x8b, 0x8c, 0x89, - 0x82, 0x82, 0x7d, 0x77, 0x75, 0x6b, 0x70, 0x68, 0x64, 0x6a, 0x5f, - 0x69, 0x67, 0x6a, 0x78, 0x77, 0x83, 0x8b, 0x8a, 0x93, 0x94, 0x94, - 0x9a, 0x96, 0x98, 0x97, 0x90, 0x93, 0x8c, 0x89, 0x88, 0x80, 0x81, - 0x7a, 0x75, 0x72, 0x67, 0x6e, 0x65, 0x65, 0x69, 0x5d, 0x6b, 0x65, - 0x6c, 0x7a, 0x78, 0x89, 0x8d, 0x8e, 0x98, 0x95, 0x99, 0x9c, 0x98, - 0x99, 0x95, 0x91, 0x91, 0x8a, 0x87, 0x86, 0x7d, 0x7e, 0x74, 0x71, - 0x6a, 0x67, 0x6d, 0x5d, 0x6c, 0x62, 0x60, 0x70, 0x62, 0x79, 0x7d, - 0x7d, 0x94, 0x8c, 0x96, 0x9c, 0x95, 0xa0, 0x99, 0x98, 0x98, 0x92, - 0x8e, 0x8d, 0x85, 0x83, 0x7f, 0x78, 0x75, 0x6f, 0x65, 0x65, 0x6b, - 0x5b, 0x6c, 0x63, 0x5f, 0x73, 0x64, 0x76, 0x86, 0x7c, 0x97, 0x94, - 0x92, 0xa3, 0x96, 0x9e, 0x9e, 0x95, 0x96, 0x93, 0x8a, 0x8b, 0x84, - 0x7f, 0x7d, 0x77, 0x6d, 0x6e, 0x60, 0x64, 0x6d, 0x56, 0x71, 0x63, - 0x5f, 0x79, 0x65, 0x7d, 0x8c, 0x80, 0x9d, 0x97, 0x97, 0xa3, 0x9c, - 0x9a, 0x9d, 0x95, 0x8e, 0x92, 0x86, 0x83, 0x85, 0x76, 0x78, 0x73, - 0x65, 0x69, 0x5b, 0x6d, 0x61, 0x63, 0x77, 0x5d, 0x77, 0x77, 0x6f, - 0x92, 0x85, 0x91, 0xa0, 0x93, 0xa0, 0x9b, 0x99, 0x95, 0x94, 0x8f, - 0x87, 0x8d, 0x7d, 0x7f, 0x7e, 0x70, 0x74, 0x69, 0x61, 0x5e, 0x6c, - 0x64, 0x60, 0x7d, 0x61, 0x72, 0x84, 0x6e, 0x90, 0x91, 0x8e, 0xa3, - 0x9b, 0x9b, 0x9c, 0x9d, 0x90, 0x90, 0x91, 0x7d, 0x89, 0x7f, 0x76, - 0x7c, 0x70, 0x6c, 0x66, 0x5d, 0x5d, 0x6f, 0x61, 0x68, 0x7d, 0x66, - 0x7c, 0x85, 0x7c, 0x97, 0x94, 0x99, 0x9f, 0x9d, 0xa0, 0x95, 0x9e, - 0x8d, 0x88, 0x8c, 0x7c, 0x81, 0x7a, 0x76, 0x74, 0x6c, 0x6a, 0x5e, - 0x54, 0x6a, 0x6d, 0x5d, 0x7b, 0x79, 0x6c, 0x87, 0x87, 0x89, 0x99, - 0x9c, 0x9f, 0x9d, 0xa0, 0x99, 0x95, 0x93, 0x89, 0x85, 0x7f, 0x7f, - 0x76, 0x75, 0x72, 0x6b, 0x65, 0x5e, 0x51, 0x60, 0x73, 0x61, 0x75, - 0x85, 0x75, 0x81, 0x8d, 0x93, 0x95, 0x99, 0xa7, 0x9a, 0x9a, 0x9f, - 0x95, 0x90, 0x88, 0x87, 0x7b, 0x78, 0x7b, 0x70, 0x6e, 0x6e, 0x61, - 0x57, 0x4b, 0x63, 0x73, 0x62, 0x7a, 0x88, 0x7e, 0x81, 0x8f, 0x9d, - 0x99, 0x99, 0xae, 0xa1, 0x96, 0x9d, 0x9b, 0x8c, 0x80, 0x88, 0x7d, - 0x70, 0x76, 0x73, 0x68, 0x63, 0x61, 0x58, 0x4e, 0x73, 0x79, 0x6c, - 0x83, 0x8a, 0x89, 0x82, 0x8f, 0xa4, 0x92, 0x96, 0xa7, 0x9c, 0x90, - 0x8f, 0x9e, 0x88, 0x75, 0x82, 0x82, 0x6f, 0x65, 0x73, 0x73, 0x57, - 0x4e, 0x50, 0x60, 0x76, 0x70, 0x83, 0x8b, 0x87, 0x8c, 0x8a, 0x97, - 0x99, 0x97, 0xa0, 0x99, 0x97, 0x94, 0x97, 0x94, 0x7f, 0x7f, 0x7c, - 0x76, 0x6f, 0x6a, 0x6d, 0x63, 0x56, 0x4f, 0x4f, 0x72, 0x7c, 0x7d, - 0x8b, 0x8b, 0x91, 0x88, 0x8e, 0x9a, 0x92, 0x98, 0xa0, 0xa0, 0x97, - 0x92, 0x9c, 0x8b, 0x78, 0x74, 0x76, 0x73, 0x65, 0x65, 0x62, 0x53, - 0x46, 0x4b, 0x73, 0x84, 0x84, 0x90, 0x8f, 0x90, 0x87, 0x8b, 0x97, - 0x93, 0x9e, 0xa1, 0xa1, 0x9a, 0x94, 0x9a, 0x8c, 0x7a, 0x6f, 0x6f, - 0x6f, 0x61, 0x60, 0x5b, 0x51, 0x46, 0x4e, 0x7b, 0x8b, 0x8e, 0x92, - 0x8e, 0x90, 0x84, 0x89, 0x90, 0x93, 0xa4, 0xa6, 0xa4, 0x9a, 0x9b, - 0x9b, 0x83, 0x72, 0x67, 0x6c, 0x6a, 0x5e, 0x5c, 0x52, 0x4a, 0x46, - 0x62, 0x8a, 0x95, 0x9a, 0x8e, 0x89, 0x87, 0x82, 0x88, 0x8b, 0x9d, - 0xac, 0xab, 0xa4, 0x9c, 0x9d, 0x8f, 0x77, 0x68, 0x63, 0x6a, 0x67, - 0x61, 0x5a, 0x52, 0x4f, 0x55, 0x78, 0x93, 0x9b, 0x93, 0x83, 0x84, - 0x81, 0x81, 0x86, 0x91, 0xa5, 0xac, 0xab, 0xa1, 0x9a, 0x92, 0x7f, - 0x6d, 0x60, 0x64, 0x6b, 0x69, 0x62, 0x55, 0x4e, 0x4e, 0x6e, 0x92, - 0x9d, 0x98, 0x84, 0x80, 0x7e, 0x7e, 0x82, 0x90, 0xa8, 0xb4, 0xb1, - 0xa3, 0x98, 0x92, 0x82, 0x6f, 0x5d, 0x5e, 0x68, 0x6d, 0x68, 0x58, - 0x4d, 0x4a, 0x69, 0x90, 0x9f, 0x9a, 0x82, 0x7c, 0x7c, 0x7e, 0x84, - 0x8d, 0xa5, 0xb5, 0xb9, 0xab, 0x99, 0x8f, 0x80, 0x71, 0x5e, 0x5b, - 0x66, 0x6f, 0x6e, 0x5c, 0x4c, 0x44, 0x63, 0x92, 0xa5, 0x9e, 0x7f, - 0x73, 0x77, 0x7f, 0x88, 0x8f, 0xa4, 0xb5, 0xbd, 0xaf, 0x9a, 0x8a, - 0x7b, 0x6f, 0x5f, 0x5c, 0x65, 0x71, 0x73, 0x64, 0x4f, 0x41, 0x57, - 0x88, 0xa6, 0xa4, 0x83, 0x6c, 0x6e, 0x7f, 0x8f, 0x95, 0xa2, 0xb3, - 0xbe, 0xb7, 0x9e, 0x82, 0x6f, 0x67, 0x66, 0x66, 0x6a, 0x6c, 0x6a, - 0x5e, 0x4e, 0x45, 0x60, 0x8e, 0xab, 0xa4, 0x7f, 0x68, 0x68, 0x7f, - 0x95, 0xa3, 0xad, 0xb3, 0xb8, 0xae, 0x99, 0x7d, 0x67, 0x5f, 0x63, - 0x6d, 0x71, 0x6e, 0x61, 0x54, 0x48, 0x4f, 0x75, 0x99, 0xa9, 0x96, - 0x77, 0x66, 0x6d, 0x84, 0x98, 0xa6, 0xab, 0xae, 0xad, 0xa4, 0x8f, - 0x77, 0x64, 0x5f, 0x69, 0x76, 0x7a, 0x72, 0x60, 0x50, 0x4d, 0x64, - 0x8a, 0xa1, 0x9d, 0x82, 0x6d, 0x69, 0x79, 0x8e, 0x9f, 0xa8, 0xac, - 0xab, 0xa4, 0x97, 0x83, 0x70, 0x63, 0x63, 0x6e, 0x78, 0x79, 0x6c, - 0x59, 0x4b, 0x52, 0x75, 0x98, 0xa7, 0x94, 0x76, 0x65, 0x6c, 0x83, - 0x9a, 0xa6, 0xa9, 0xac, 0xaa, 0xa4, 0x90, 0x76, 0x61, 0x5c, 0x68, - 0x7a, 0x81, 0x74, 0x5c, 0x47, 0x48, 0x6b, 0x95, 0xaa, 0x9b, 0x7a, - 0x63, 0x66, 0x7e, 0x98, 0xa9, 0xad, 0xad, 0xa9, 0xa2, 0x92, 0x7c, - 0x67, 0x5e, 0x66, 0x75, 0x7e, 0x76, 0x60, 0x49, 0x46, 0x65, 0x90, - 0xab, 0xa1, 0x7e, 0x63, 0x60, 0x79, 0x98, 0xac, 0xaf, 0xa9, 0xa4, - 0xa0, 0x97, 0x82, 0x6a, 0x5b, 0x5f, 0x72, 0x81, 0x7d, 0x64, 0x46, - 0x3e, 0x60, 0x94, 0xb4, 0xa7, 0x7d, 0x5a, 0x58, 0x78, 0xa0, 0xb5, - 0xb3, 0xa7, 0x9e, 0x9e, 0x98, 0x86, 0x6c, 0x5a, 0x5e, 0x72, 0x83, - 0x7d, 0x62, 0x42, 0x3d, 0x62, 0x98, 0xb8, 0xa6, 0x7a, 0x55, 0x56, - 0x79, 0xa4, 0xb9, 0xb5, 0xa4, 0x99, 0x9a, 0x98, 0x89, 0x6d, 0x59, - 0x5c, 0x70, 0x85, 0x82, 0x68, 0x47, 0x40, 0x61, 0x95, 0xb5, 0xa8, - 0x7c, 0x56, 0x53, 0x76, 0xa2, 0xba, 0xb7, 0xa2, 0x91, 0x8e, 0x8f, - 0x88, 0x75, 0x63, 0x61, 0x6f, 0x7f, 0x7e, 0x67, 0x49, 0x45, 0x67, - 0x99, 0xb5, 0xa4, 0x78, 0x53, 0x54, 0x78, 0xa7, 0xbf, 0xb8, 0x9f, - 0x8c, 0x88, 0x8c, 0x88, 0x78, 0x65, 0x61, 0x6f, 0x80, 0x81, 0x6a, - 0x4a, 0x42, 0x62, 0x94, 0xb4, 0xa9, 0x7e, 0x55, 0x4e, 0x70, 0xa2, - 0xc0, 0xbe, 0xa4, 0x8b, 0x84, 0x88, 0x88, 0x7a, 0x68, 0x62, 0x6d, - 0x7f, 0x81, 0x6d, 0x4e, 0x44, 0x62, 0x92, 0xb3, 0xa8, 0x7d, 0x55, - 0x4e, 0x71, 0xa4, 0xc4, 0xc1, 0xa4, 0x87, 0x7c, 0x81, 0x87, 0x7f, - 0x70, 0x66, 0x6b, 0x78, 0x7b, 0x6b, 0x52, 0x4c, 0x64, 0x8f, 0xac, - 0xa5, 0x81, 0x5b, 0x52, 0x6f, 0x9e, 0xbf, 0xc1, 0xa8, 0x8b, 0x7d, - 0x7e, 0x82, 0x7d, 0x72, 0x6b, 0x6e, 0x78, 0x78, 0x6a, 0x54, 0x50, - 0x68, 0x8f, 0xa9, 0xa1, 0x80, 0x5d, 0x55, 0x70, 0x9d, 0xbe, 0xc2, - 0xaa, 0x8b, 0x79, 0x77, 0x7e, 0x7e, 0x79, 0x72, 0x70, 0x72, 0x70, - 0x65, 0x57, 0x5a, 0x71, 0x91, 0xa2, 0x97, 0x7a, 0x5f, 0x5c, 0x77, - 0xa1, 0xbf, 0xc0, 0xa9, 0x8c, 0x7b, 0x79, 0x7e, 0x7d, 0x77, 0x71, - 0x71, 0x74, 0x70, 0x61, 0x51, 0x54, 0x6f, 0x92, 0xa5, 0x9c, 0x7c, - 0x5d, 0x57, 0x72, 0x9e, 0xbf, 0xc3, 0xad, 0x8e, 0x7a, 0x76, 0x7a, - 0x7d, 0x7b, 0x76, 0x74, 0x73, 0x6d, 0x60, 0x53, 0x58, 0x71, 0x90, - 0xa1, 0x98, 0x7c, 0x60, 0x5c, 0x74, 0x9b, 0xba, 0xc1, 0xae, 0x91, - 0x7c, 0x75, 0x79, 0x7d, 0x7e, 0x7b, 0x78, 0x74, 0x6b, 0x5f, 0x55, - 0x5a, 0x71, 0x8e, 0x9d, 0x96, 0x7d, 0x64, 0x5e, 0x73, 0x96, 0xb4, - 0xbd, 0xad, 0x93, 0x7e, 0x76, 0x79, 0x7d, 0x7e, 0x7c, 0x79, 0x75, - 0x6d, 0x61, 0x56, 0x59, 0x6d, 0x89, 0x9c, 0x98, 0x83, 0x69, 0x5e, - 0x6c, 0x8d, 0xad, 0xbb, 0xb1, 0x99, 0x83, 0x77, 0x77, 0x7b, 0x7f, - 0x7f, 0x7d, 0x78, 0x70, 0x64, 0x58, 0x58, 0x68, 0x82, 0x96, 0x98, - 0x87, 0x70, 0x61, 0x69, 0x83, 0xa2, 0xb5, 0xb3, 0xa0, 0x8a, 0x7b, - 0x76, 0x79, 0x7c, 0x80, 0x80, 0x7c, 0x74, 0x67, 0x5b, 0x57, 0x64, - 0x7c, 0x91, 0x97, 0x8b, 0x75, 0x65, 0x67, 0x7c, 0x99, 0xae, 0xb2, - 0xa4, 0x8f, 0x7e, 0x78, 0x7a, 0x7f, 0x82, 0x83, 0x7e, 0x76, 0x68, - 0x5a, 0x4f, 0x54, 0x6a, 0x86, 0x98, 0x95, 0x82, 0x6b, 0x60, 0x6a, - 0x87, 0xa7, 0xba, 0xb8, 0xa5, 0x8e, 0x7c, 0x75, 0x76, 0x7d, 0x83, - 0x85, 0x81, 0x73, 0x61, 0x51, 0x4d, 0x5e, 0x7b, 0x94, 0x9a, 0x8b, - 0x73, 0x62, 0x63, 0x79, 0x98, 0xb1, 0xb8, 0xab, 0x95, 0x82, 0x79, - 0x7a, 0x7f, 0x84, 0x86, 0x82, 0x7a, 0x6c, 0x5e, 0x53, 0x55, 0x67, - 0x80, 0x92, 0x93, 0x85, 0x72, 0x65, 0x69, 0x7d, 0x98, 0xae, 0xb3, - 0xaa, 0x97, 0x85, 0x7a, 0x76, 0x7a, 0x81, 0x87, 0x86, 0x7d, 0x6c, - 0x5a, 0x4f, 0x54, 0x6b, 0x86, 0x95, 0x92, 0x81, 0x6c, 0x63, 0x6b, - 0x83, 0x9e, 0xb0, 0xb0, 0xa3, 0x8e, 0x7e, 0x79, 0x7b, 0x82, 0x88, - 0x8a, 0x85, 0x7a, 0x6b, 0x5e, 0x56, 0x5a, 0x6a, 0x7f, 0x8d, 0x8e, - 0x82, 0x73, 0x69, 0x6c, 0x7d, 0x93, 0xa5, 0xac, 0xa5, 0x97, 0x88, - 0x7d, 0x7a, 0x7d, 0x84, 0x89, 0x89, 0x80, 0x70, 0x5f, 0x54, 0x56, - 0x67, 0x7e, 0x8e, 0x8f, 0x83, 0x72, 0x67, 0x6a, 0x7a, 0x91, 0xa4, - 0xaa, 0xa3, 0x94, 0x86, 0x7e, 0x7c, 0x81, 0x88, 0x8c, 0x8a, 0x82, - 0x75, 0x66, 0x5a, 0x54, 0x5d, 0x71, 0x86, 0x90, 0x89, 0x79, 0x68, - 0x62, 0x6d, 0x84, 0x9d, 0xae, 0xaf, 0xa4, 0x94, 0x86, 0x7f, 0x7f, - 0x84, 0x8b, 0x8f, 0x8a, 0x7d, 0x6a, 0x58, 0x4d, 0x52, 0x66, 0x7e, - 0x8e, 0x8d, 0x7f, 0x6d, 0x63, 0x67, 0x7a, 0x93, 0xa7, 0xae, 0xa7, - 0x98, 0x89, 0x81, 0x81, 0x86, 0x8c, 0x91, 0x90, 0x86, 0x76, 0x66, - 0x59, 0x54, 0x5a, 0x6b, 0x7e, 0x89, 0x85, 0x78, 0x6b, 0x65, 0x6c, - 0x7e, 0x93, 0xa2, 0xa6, 0xa0, 0x96, 0x8c, 0x88, 0x87, 0x89, 0x8d, - 0x8e, 0x8c, 0x84, 0x77, 0x68, 0x5c, 0x56, 0x5b, 0x6b, 0x7c, 0x85, - 0x82, 0x78, 0x6c, 0x68, 0x6f, 0x7e, 0x90, 0x9d, 0xa0, 0x9c, 0x94, - 0x8e, 0x8b, 0x8b, 0x8d, 0x8f, 0x90, 0x8d, 0x86, 0x7c, 0x71, 0x67, - 0x60, 0x5d, 0x64, 0x71, 0x7b, 0x7e, 0x79, 0x71, 0x6b, 0x6c, 0x75, - 0x83, 0x91, 0x9a, 0x9c, 0x99, 0x94, 0x90, 0x8d, 0x8c, 0x8d, 0x8f, - 0x8f, 0x8c, 0x84, 0x78, 0x6d, 0x64, 0x5f, 0x60, 0x69, 0x75, 0x7b, - 0x7b, 0x75, 0x6f, 0x6c, 0x70, 0x7a, 0x87, 0x92, 0x97, 0x98, 0x95, - 0x92, 0x8f, 0x8f, 0x90, 0x91, 0x92, 0x91, 0x8c, 0x83, 0x79, 0x71, - 0x69, 0x63, 0x5f, 0x61, 0x6a, 0x72, 0x73, 0x6f, 0x6b, 0x67, 0x6a, - 0x73, 0x80, 0x8d, 0x96, 0x9b, 0x9d, 0x9c, 0x9a, 0x99, 0x98, 0x97, - 0x97, 0x96, 0x93, 0x8c, 0x83, 0x79, 0x70, 0x67, 0x5f, 0x59, 0x5d, - 0x66, 0x6f, 0x71, 0x6e, 0x69, 0x66, 0x69, 0x72, 0x7f, 0x8c, 0x95, - 0x9a, 0x9c, 0x9c, 0x9b, 0x9a, 0x99, 0x99, 0x99, 0x99, 0x96, 0x8f, - 0x85, 0x7c, 0x73, 0x6c, 0x64, 0x5c, 0x5b, 0x63, 0x6a, 0x6e, 0x6c, - 0x69, 0x66, 0x68, 0x6f, 0x7b, 0x86, 0x8f, 0x94, 0x97, 0x9a, 0x9a, - 0x9a, 0x9a, 0x9b, 0x9a, 0x9a, 0x98, 0x94, 0x8d, 0x86, 0x7e, 0x78, - 0x6f, 0x66, 0x5e, 0x5a, 0x60, 0x67, 0x6b, 0x68, 0x65, 0x64, 0x65, - 0x6c, 0x76, 0x82, 0x8b, 0x91, 0x95, 0x99, 0x9b, 0x9c, 0x9d, 0x9d, - 0x9c, 0x9c, 0x9b, 0x98, 0x93, 0x8b, 0x83, 0x7b, 0x74, 0x6c, 0x65, - 0x5e, 0x5e, 0x63, 0x66, 0x65, 0x62, 0x61, 0x62, 0x67, 0x70, 0x7b, - 0x85, 0x8c, 0x90, 0x93, 0x97, 0x9a, 0x9d, 0x9e, 0x9f, 0x9f, 0x9f, - 0x9d, 0x99, 0x93, 0x8c, 0x86, 0x81, 0x7c, 0x74, 0x6b, 0x62, 0x5b, - 0x5b, 0x5f, 0x61, 0x60, 0x5f, 0x5f, 0x62, 0x69, 0x72, 0x7c, 0x85, - 0x8c, 0x90, 0x96, 0x9b, 0x9f, 0xa0, 0xa1, 0xa0, 0xa0, 0x9f, 0x9e, - 0x99, 0x94, 0x8d, 0x85, 0x80, 0x7a, 0x74, 0x6c, 0x65, 0x5d, 0x5b, - 0x5d, 0x60, 0x60, 0x60, 0x61, 0x64, 0x6b, 0x73, 0x7c, 0x83, 0x8a, - 0x8e, 0x93, 0x98, 0x9d, 0x9f, 0x9f, 0x9e, 0x9d, 0x9d, 0x9c, 0x99, - 0x95, 0x90, 0x8a, 0x85, 0x80, 0x7a, 0x74, 0x6b, 0x63, 0x5b, 0x59, - 0x5b, 0x5d, 0x5e, 0x5e, 0x60, 0x63, 0x69, 0x71, 0x7a, 0x82, 0x8a, - 0x8f, 0x95, 0x9b, 0x9f, 0xa1, 0xa0, 0x9f, 0x9e, 0x9d, 0x9d, 0x9b, - 0x98, 0x92, 0x8c, 0x85, 0x7f, 0x7a, 0x75, 0x6f, 0x67, 0x5e, 0x58, - 0x58, 0x5a, 0x5d, 0x5e, 0x60, 0x63, 0x68, 0x6e, 0x77, 0x80, 0x88, - 0x8e, 0x93, 0x98, 0x9c, 0x9f, 0xa0, 0x9f, 0x9d, 0x9c, 0x9c, 0x9b, - 0x99, 0x96, 0x90, 0x8a, 0x84, 0x7f, 0x7b, 0x76, 0x70, 0x67, 0x5e, - 0x57, 0x56, 0x59, 0x5d, 0x5f, 0x60, 0x62, 0x67, 0x6d, 0x76, 0x7e, - 0x86, 0x8d, 0x92, 0x97, 0x9b, 0x9d, 0x9f, 0x9e, 0x9d, 0x9c, 0x9c, - 0x9b, 0x99, 0x96, 0x92, 0x8d, 0x88, 0x83, 0x7e, 0x7a, 0x75, 0x6d, - 0x64, 0x5d, 0x58, 0x58, 0x5b, 0x5e, 0x60, 0x61, 0x64, 0x69, 0x70, - 0x79, 0x81, 0x88, 0x8e, 0x92, 0x96, 0x9a, 0x9c, 0x9c, 0x9c, 0x9b, - 0x9a, 0x99, 0x98, 0x96, 0x94, 0x91, 0x8d, 0x89, 0x85, 0x80, 0x7b, - 0x77, 0x71, 0x69, 0x61, 0x5b, 0x58, 0x5a, 0x5d, 0x5f, 0x61, 0x64, - 0x68, 0x6d, 0x75, 0x7d, 0x84, 0x8b, 0x90, 0x94, 0x97, 0x99, 0x9b, - 0x9b, 0x9b, 0x9a, 0x99, 0x98, 0x97, 0x94, 0x93, 0x90, 0x8c, 0x89, - 0x85, 0x80, 0x7b, 0x76, 0x70, 0x69, 0x61, 0x5c, 0x59, 0x5b, 0x5e, - 0x61, 0x62, 0x65, 0x6a, 0x6f, 0x76, 0x7d, 0x85, 0x8a, 0x8f, 0x92, - 0x96, 0x97, 0x99, 0x99, 0x99, 0x98, 0x97, 0x97, 0x95, 0x93, 0x91, - 0x8f, 0x8d, 0x8a, 0x87, 0x83, 0x7f, 0x7a, 0x74, 0x6e, 0x67, 0x61, - 0x5c, 0x5c, 0x5e, 0x61, 0x63, 0x66, 0x69, 0x6d, 0x72, 0x79, 0x80, - 0x86, 0x8b, 0x8e, 0x91, 0x93, 0x96, 0x97, 0x97, 0x97, 0x96, 0x95, - 0x94, 0x92, 0x91, 0x8f, 0x8d, 0x8b, 0x88, 0x85, 0x81, 0x7e, 0x7a, - 0x76, 0x71, 0x6d, 0x69, 0x65, 0x62, 0x60, 0x62, 0x66, 0x69, 0x6d, - 0x70, 0x74, 0x77, 0x7c, 0x81, 0x86, 0x8b, 0x8e, 0x90, 0x92, 0x94, - 0x95, 0x95, 0x95, 0x94, 0x93, 0x92, 0x90, 0x8e, 0x8c, 0x89, 0x86, - 0x82, 0x7f, 0x7b, 0x77, 0x73, 0x6e, 0x69, 0x61, 0x5f, 0x62, 0x66, - 0x69, 0x69, 0x6c, 0x6d, 0x72, 0x77, 0x7e, 0x84, 0x89, 0x8b, 0x8d, - 0x90, 0x91, 0x93, 0x93, 0x93, 0x93, 0x94, 0x93, 0x91, 0x8f, 0x8e, - 0x8c, 0x8b, 0x8b, 0x89, 0x87, 0x84, 0x81, 0x7d, 0x7a, 0x77, 0x73, - 0x70, 0x6e, 0x6b, 0x69, 0x68, 0x68, 0x69, 0x6b, 0x6e, 0x70, 0x74, - 0x77, 0x7a, 0x7d, 0x80, 0x83, 0x86, 0x88, 0x8b, 0x8d, 0x8f, 0x90, - 0x90, 0x91, 0x91, 0x90, 0x8f, 0x8d, 0x8b, 0x88, 0x86, 0x82, 0x7f, - 0x7c, 0x7a, 0x77, 0x74, 0x71, 0x6e, 0x6c, 0x6a, 0x69, 0x69, 0x6b, - 0x6f, 0x72, 0x75, 0x77, 0x7a, 0x7d, 0x81, 0x85, 0x89, 0x8c, 0x8e, - 0x90, 0x91, 0x92, 0x92, 0x93, 0x93, 0x92, 0x90, 0x8f, 0x8e, 0x8c, - 0x8a, 0x88, 0x87, 0x84, 0x82, 0x7f, 0x7d, 0x7a, 0x77, 0x74, 0x72, - 0x70, 0x6d, 0x6c, 0x6b, 0x6b, 0x6b, 0x6c, 0x6d, 0x70, 0x74, 0x78, - 0x7b, 0x7e, 0x81, 0x83, 0x87, 0x89, 0x8c, 0x8e, 0x90, 0x90, 0x90, - 0x90, 0x8f, 0x8f, 0x8d, 0x8c, 0x8a, 0x89, 0x87, 0x84, 0x82, 0x80, - 0x7e, 0x7c, 0x7a, 0x78, 0x76, 0x74, 0x73, 0x71, 0x70, 0x6f, 0x6f, - 0x6f, 0x6f, 0x71, 0x73, 0x75, 0x79, 0x7b, 0x7e, 0x80, 0x83, 0x85, - 0x88, 0x8a, 0x8c, 0x8d, 0x8e, 0x8e, 0x8e, 0x8d, 0x8c, 0x8b, 0x89, - 0x88, 0x86, 0x84, 0x83, 0x81, 0x7f, 0x7e, 0x7c, 0x7a, 0x79, 0x78, - 0x77, 0x75, 0x74, 0x74, 0x73, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, - 0x7a, 0x7c, 0x7f, 0x81, 0x83, 0x85, 0x87, 0x88, 0x89, 0x8a, 0x8b, - 0x8b, 0x8b, 0x8b, 0x8a, 0x89, 0x88, 0x86, 0x84, 0x83, 0x81, 0x7f, - 0x7d, 0x7b, 0x79, 0x78, 0x76, 0x75, 0x74, 0x73, 0x73, 0x72, 0x73, - 0x73, 0x75, 0x76, 0x78, 0x7a, 0x7c, 0x7e, 0x80, 0x82, 0x84, 0x86, - 0x87, 0x88, 0x89, 0x89, 0x8a, 0x8a, 0x89, 0x89, 0x88, 0x87, 0x87, - 0x86, 0x85, 0x83, 0x82, 0x81, 0x80, 0x7f, 0x7e, 0x7d, 0x7c, 0x7b, - 0x7a, 0x79, 0x79, 0x79, 0x78, 0x78, 0x79, 0x79, 0x7a, 0x7b, 0x7c, - 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x82, 0x83, 0x83, 0x84, 0x84, - 0x83, 0x83, 0x83, 0x83, 0x82, 0x82, 0x81, 0x81, 0x80, 0x80, 0x7f, - 0x7e, 0x7e, 0x7e, 0x7d, 0x7d, 0x7d, 0x7c, 0x7c, 0x7c, 0x7c, 0x7d, - 0x7d, 0x7d, 0x7e, 0x7e, 0x7f, 0x7f, 0x80, 0x80, 0x81, 0x81, 0x81, - 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x81, 0x81, 0x81, - 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, - 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, - 0x81, 0x81, 0x81, 0x81, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7e, 0x7e, 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, - }, - { // 5 - 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x81, 0x83, 0x82, 0x80, 0x7d, 0x7b, 0x7b, 0x7d, 0x80, 0x83, 0x83, - 0x81, 0x7e, 0x7b, 0x7b, 0x7d, 0x80, 0x83, 0x83, 0x82, 0x7f, 0x7d, - 0x7d, 0x7e, 0x80, 0x82, 0x83, 0x81, 0x7f, 0x7d, 0x7c, 0x7d, 0x7f, - 0x81, 0x82, 0x81, 0x7f, 0x7d, 0x7d, 0x7e, 0x80, 0x82, 0x82, 0x81, - 0x7f, 0x7e, 0x7d, 0x7e, 0x80, 0x81, 0x82, 0x81, 0x80, 0x7e, 0x7d, - 0x7e, 0x7f, 0x80, 0x81, 0x80, 0x7f, 0x7e, 0x7e, 0x7f, 0x7f, 0x80, - 0x81, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, - 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x80, 0x82, 0x85, 0x86, 0x83, 0x7d, - 0x77, 0x77, 0x7c, 0x83, 0x88, 0x87, 0x82, 0x7b, 0x77, 0x78, 0x7d, - 0x85, 0x89, 0x88, 0x82, 0x7b, 0x78, 0x78, 0x7d, 0x82, 0x85, 0x85, - 0x81, 0x7d, 0x7a, 0x7a, 0x7d, 0x81, 0x83, 0x83, 0x80, 0x7d, 0x7c, - 0x7d, 0x7f, 0x81, 0x81, 0x7f, 0x7c, 0x7a, 0x7b, 0x7e, 0x81, 0x83, - 0x82, 0x80, 0x7e, 0x7d, 0x7e, 0x81, 0x83, 0x83, 0x81, 0x7f, 0x7e, - 0x7f, 0x84, 0x88, 0x88, 0x84, 0x7d, 0x77, 0x74, 0x76, 0x7b, 0x82, - 0x86, 0x84, 0x80, 0x7b, 0x7b, 0x7e, 0x83, 0x87, 0x87, 0x83, 0x7d, - 0x78, 0x79, 0x7c, 0x81, 0x83, 0x83, 0x80, 0x7d, 0x7d, 0x7f, 0x82, - 0x83, 0x81, 0x80, 0x7f, 0x80, 0x82, 0x83, 0x82, 0x7e, 0x7a, 0x78, - 0x79, 0x7c, 0x7f, 0x80, 0x7e, 0x7c, 0x7b, 0x7d, 0x81, 0x84, 0x86, - 0x84, 0x80, 0x7f, 0x7f, 0x82, 0x85, 0x86, 0x85, 0x82, 0x7f, 0x7e, - 0x7e, 0x80, 0x80, 0x7f, 0x7d, 0x7b, 0x7a, 0x7a, 0x7b, 0x7b, 0x7b, - 0x79, 0x78, 0x79, 0x7b, 0x7e, 0x80, 0x81, 0x82, 0x83, 0x86, 0x89, - 0x8c, 0x8d, 0x8d, 0x8b, 0x89, 0x87, 0x87, 0x87, 0x86, 0x84, 0x7f, - 0x7a, 0x76, 0x73, 0x72, 0x73, 0x74, 0x73, 0x71, 0x6e, 0x6b, 0x69, - 0x6b, 0x70, 0x76, 0x80, 0x8a, 0x93, 0x9b, 0x9e, 0x9e, 0x9b, 0x98, - 0x95, 0x93, 0x93, 0x92, 0x90, 0x8a, 0x83, 0x7d, 0x76, 0x70, 0x6c, - 0x6a, 0x6a, 0x6b, 0x6a, 0x68, 0x62, 0x5b, 0x58, 0x58, 0x67, 0x7f, - 0x98, 0xaa, 0xac, 0xa2, 0x91, 0x86, 0x87, 0x92, 0xa2, 0xa7, 0xa1, - 0x90, 0x80, 0x7a, 0x7e, 0x89, 0x8f, 0x88, 0x78, 0x64, 0x5a, 0x5a, - 0x64, 0x6e, 0x6f, 0x66, 0x57, 0x4d, 0x4b, 0x64, 0x88, 0xaa, 0xbc, - 0xb2, 0x9b, 0x80, 0x74, 0x7d, 0x93, 0xa9, 0xae, 0xa5, 0x90, 0x7f, - 0x7d, 0x84, 0x91, 0x92, 0x87, 0x73, 0x5f, 0x5a, 0x5e, 0x6b, 0x73, - 0x71, 0x67, 0x57, 0x4f, 0x4d, 0x63, 0x82, 0xa1, 0xb3, 0xab, 0x98, - 0x7f, 0x72, 0x77, 0x8a, 0xa5, 0xb1, 0xae, 0x9c, 0x88, 0x7f, 0x7f, - 0x8a, 0x8c, 0x86, 0x76, 0x64, 0x5b, 0x5d, 0x68, 0x71, 0x72, 0x6b, - 0x5b, 0x51, 0x4a, 0x5b, 0x7b, 0x9b, 0xb3, 0xaf, 0x9c, 0x81, 0x6f, - 0x71, 0x87, 0xa6, 0xb7, 0xb7, 0xa3, 0x8a, 0x7d, 0x7c, 0x88, 0x8f, - 0x8c, 0x7b, 0x66, 0x5b, 0x5b, 0x67, 0x72, 0x76, 0x6f, 0x5d, 0x50, - 0x45, 0x4f, 0x70, 0x92, 0xb2, 0xb3, 0xa3, 0x87, 0x70, 0x6f, 0x7f, - 0xa1, 0xb7, 0xbb, 0xab, 0x90, 0x7f, 0x7b, 0x86, 0x8f, 0x8c, 0x7d, - 0x67, 0x5c, 0x5b, 0x66, 0x72, 0x73, 0x6c, 0x59, 0x4b, 0x42, 0x4d, - 0x70, 0x95, 0xb5, 0xb7, 0xa5, 0x87, 0x6f, 0x6c, 0x7d, 0x9d, 0xb6, - 0xbd, 0xaf, 0x96, 0x84, 0x7f, 0x86, 0x8b, 0x87, 0x7b, 0x68, 0x5f, - 0x60, 0x68, 0x72, 0x72, 0x6b, 0x5b, 0x4d, 0x45, 0x4c, 0x6c, 0x8f, - 0xaf, 0xb7, 0xa8, 0x8e, 0x73, 0x6b, 0x76, 0x96, 0xb2, 0xbf, 0xb7, - 0x9e, 0x88, 0x7e, 0x81, 0x87, 0x86, 0x7e, 0x6f, 0x65, 0x63, 0x68, - 0x71, 0x71, 0x6e, 0x5f, 0x52, 0x4a, 0x50, 0x6f, 0x92, 0xb0, 0xb4, - 0xa4, 0x87, 0x6d, 0x68, 0x77, 0x99, 0xb3, 0xbd, 0xb1, 0x99, 0x85, - 0x7e, 0x81, 0x88, 0x85, 0x7a, 0x6c, 0x64, 0x66, 0x6d, 0x75, 0x73, - 0x69, 0x59, 0x4c, 0x45, 0x57, 0x79, 0x9e, 0xb6, 0xb0, 0x9b, 0x7b, - 0x67, 0x68, 0x80, 0xa2, 0xb8, 0xbc, 0xaa, 0x92, 0x81, 0x7e, 0x83, - 0x87, 0x82, 0x75, 0x68, 0x65, 0x69, 0x72, 0x75, 0x6f, 0x61, 0x51, - 0x46, 0x4a, 0x69, 0x8f, 0xb1, 0xb8, 0xa6, 0x86, 0x68, 0x60, 0x70, - 0x94, 0xb2, 0xc0, 0xb7, 0x9d, 0x86, 0x7b, 0x7f, 0x86, 0x85, 0x7b, - 0x6e, 0x67, 0x67, 0x6f, 0x76, 0x74, 0x6a, 0x58, 0x4a, 0x43, 0x59, - 0x7d, 0xa4, 0xbb, 0xb2, 0x97, 0x72, 0x60, 0x63, 0x80, 0xa5, 0xbd, - 0xc1, 0xab, 0x90, 0x7c, 0x79, 0x80, 0x84, 0x81, 0x75, 0x6c, 0x68, - 0x6b, 0x72, 0x72, 0x6c, 0x5c, 0x4d, 0x43, 0x52, 0x76, 0xa0, 0xbb, - 0xb7, 0x9c, 0x75, 0x5c, 0x5d, 0x78, 0xa1, 0xbe, 0xc4, 0xb2, 0x93, - 0x7d, 0x76, 0x7d, 0x84, 0x83, 0x78, 0x6d, 0x69, 0x6b, 0x72, 0x73, - 0x6e, 0x5e, 0x4e, 0x42, 0x4f, 0x73, 0x9d, 0xbb, 0xb8, 0x9f, 0x77, - 0x5b, 0x59, 0x73, 0x9b, 0xbb, 0xc5, 0xb4, 0x96, 0x7e, 0x74, 0x7a, - 0x81, 0x84, 0x7c, 0x71, 0x6c, 0x6b, 0x71, 0x73, 0x6f, 0x62, 0x53, - 0x47, 0x52, 0x73, 0x9b, 0xb8, 0xb7, 0x9e, 0x77, 0x5a, 0x57, 0x71, - 0x99, 0xbb, 0xc5, 0xb5, 0x95, 0x7c, 0x72, 0x78, 0x81, 0x84, 0x7e, - 0x74, 0x6d, 0x6c, 0x71, 0x73, 0x70, 0x63, 0x56, 0x48, 0x54, 0x74, - 0x9b, 0xb7, 0xb5, 0x9d, 0x75, 0x5b, 0x58, 0x73, 0x9a, 0xbb, 0xc4, - 0xb3, 0x94, 0x7a, 0x71, 0x78, 0x82, 0x86, 0x80, 0x75, 0x6d, 0x6b, - 0x6f, 0x72, 0x6f, 0x63, 0x55, 0x4a, 0x5a, 0x7b, 0xa4, 0xbb, 0xb4, - 0x93, 0x6a, 0x52, 0x55, 0x78, 0xa3, 0xc3, 0xc5, 0xae, 0x8c, 0x73, - 0x6d, 0x76, 0x82, 0x86, 0x80, 0x76, 0x6f, 0x6e, 0x6f, 0x71, 0x6c, - 0x61, 0x53, 0x4c, 0x60, 0x82, 0xaa, 0xba, 0xaf, 0x8c, 0x64, 0x50, - 0x5a, 0x80, 0xa9, 0xc5, 0xc2, 0xa7, 0x85, 0x6f, 0x6e, 0x7a, 0x86, - 0x88, 0x80, 0x75, 0x6e, 0x6e, 0x70, 0x72, 0x6c, 0x62, 0x52, 0x4f, - 0x64, 0x87, 0xad, 0xba, 0xac, 0x86, 0x60, 0x4d, 0x5b, 0x83, 0xad, - 0xc7, 0xc1, 0xa4, 0x80, 0x6c, 0x6b, 0x79, 0x86, 0x89, 0x82, 0x76, - 0x6e, 0x6c, 0x6f, 0x70, 0x6b, 0x61, 0x52, 0x55, 0x6d, 0x93, 0xb3, - 0xb8, 0xa3, 0x7a, 0x58, 0x4d, 0x64, 0x8e, 0xb5, 0xc6, 0xba, 0x9a, - 0x7b, 0x6c, 0x6f, 0x7c, 0x85, 0x86, 0x7f, 0x77, 0x72, 0x70, 0x70, - 0x6e, 0x67, 0x5c, 0x51, 0x5c, 0x76, 0x9c, 0xb5, 0xb4, 0x99, 0x71, - 0x52, 0x4d, 0x6b, 0x96, 0xbc, 0xc6, 0xb4, 0x92, 0x74, 0x68, 0x6e, - 0x7e, 0x88, 0x89, 0x81, 0x76, 0x71, 0x6d, 0x6e, 0x6b, 0x65, 0x5a, - 0x55, 0x65, 0x84, 0xa9, 0xb8, 0xad, 0x88, 0x61, 0x49, 0x52, 0x78, - 0xa5, 0xc5, 0xc2, 0xa8, 0x84, 0x6b, 0x66, 0x72, 0x82, 0x8a, 0x89, - 0x80, 0x77, 0x72, 0x6e, 0x6d, 0x68, 0x62, 0x56, 0x5b, 0x72, 0x94, - 0xb1, 0xb5, 0xa1, 0x78, 0x56, 0x49, 0x5e, 0x88, 0xb2, 0xc5, 0xba, - 0x9a, 0x78, 0x68, 0x6b, 0x79, 0x87, 0x8b, 0x88, 0x7f, 0x77, 0x71, - 0x6e, 0x6c, 0x66, 0x5f, 0x58, 0x67, 0x81, 0xa4, 0xb5, 0xae, 0x8f, - 0x66, 0x4d, 0x4b, 0x6d, 0x98, 0xbc, 0xc3, 0xae, 0x8a, 0x6d, 0x65, - 0x6e, 0x7e, 0x88, 0x89, 0x84, 0x7d, 0x77, 0x73, 0x70, 0x68, 0x61, - 0x56, 0x5b, 0x73, 0x95, 0xb4, 0xb5, 0xa0, 0x76, 0x54, 0x44, 0x5a, - 0x82, 0xae, 0xc5, 0xbc, 0x9e, 0x79, 0x65, 0x64, 0x75, 0x84, 0x8c, - 0x8a, 0x84, 0x7d, 0x76, 0x72, 0x69, 0x63, 0x58, 0x57, 0x6c, 0x8c, - 0xb0, 0xbc, 0xae, 0x84, 0x59, 0x41, 0x4a, 0x72, 0x9e, 0xc0, 0xc2, - 0xad, 0x88, 0x6c, 0x61, 0x69, 0x77, 0x85, 0x8b, 0x8b, 0x8a, 0x84, - 0x7a, 0x6d, 0x5f, 0x55, 0x50, 0x62, 0x82, 0xa7, 0xbd, 0xb5, 0x97, - 0x69, 0x4a, 0x43, 0x5f, 0x86, 0xac, 0xbc, 0xb2, 0x9a, 0x7e, 0x6f, - 0x6b, 0x70, 0x76, 0x7c, 0x80, 0x87, 0x8c, 0x8d, 0x87, 0x7a, 0x6b, - 0x5d, 0x4e, 0x58, 0x71, 0x96, 0xb3, 0xb8, 0xa5, 0x7d, 0x5a, 0x46, - 0x56, 0x75, 0x9c, 0xb2, 0xb2, 0x9c, 0x83, 0x73, 0x6e, 0x75, 0x79, - 0x7d, 0x7b, 0x7e, 0x80, 0x85, 0x85, 0x80, 0x78, 0x6f, 0x6c, 0x6c, - 0x75, 0x7f, 0x89, 0x8e, 0x8b, 0x86, 0x7e, 0x7a, 0x75, 0x79, 0x80, - 0x8a, 0x92, 0x95, 0x90, 0x87, 0x7d, 0x76, 0x77, 0x7a, 0x80, 0x82, - 0x81, 0x7b, 0x73, 0x6c, 0x68, 0x67, 0x72, 0x81, 0x95, 0xa1, 0x9f, - 0x8f, 0x75, 0x61, 0x59, 0x68, 0x7f, 0x98, 0xa3, 0x9e, 0x8c, 0x7c, - 0x76, 0x7a, 0x83, 0x87, 0x84, 0x7b, 0x76, 0x77, 0x82, 0x8e, 0x93, - 0x8c, 0x7c, 0x6c, 0x64, 0x68, 0x74, 0x82, 0x87, 0x86, 0x7f, 0x7a, - 0x7c, 0x82, 0x89, 0x8c, 0x88, 0x80, 0x7b, 0x7a, 0x7f, 0x88, 0x8c, - 0x8c, 0x83, 0x7a, 0x71, 0x6d, 0x6b, 0x6b, 0x68, 0x63, 0x6e, 0x81, - 0x9f, 0xb1, 0xb0, 0x96, 0x6f, 0x4f, 0x44, 0x5a, 0x7e, 0xa6, 0xb6, - 0xaf, 0x93, 0x78, 0x6a, 0x6c, 0x76, 0x7d, 0x7d, 0x76, 0x72, 0x77, - 0x89, 0x9a, 0xa5, 0x9e, 0x89, 0x70, 0x5f, 0x5f, 0x6c, 0x82, 0x92, - 0x96, 0x90, 0x85, 0x7b, 0x79, 0x7a, 0x7c, 0x7a, 0x76, 0x71, 0x70, - 0x78, 0x84, 0x90, 0x94, 0x8f, 0x83, 0x75, 0x6e, 0x6f, 0x78, 0x83, - 0x8b, 0x8d, 0x8a, 0x84, 0x80, 0x7e, 0x7e, 0x7e, 0x7b, 0x77, 0x75, - 0x76, 0x7c, 0x83, 0x89, 0x8a, 0x85, 0x7e, 0x78, 0x75, 0x77, 0x7c, - 0x81, 0x83, 0x83, 0x82, 0x81, 0x81, 0x81, 0x82, 0x80, 0x7e, 0x7c, - 0x7b, 0x7d, 0x80, 0x83, 0x85, 0x84, 0x82, 0x7f, 0x7d, 0x7d, 0x7e, - 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x80, 0x82, 0x82, 0x82, 0x80, 0x7e, - 0x7d, 0x7d, 0x7e, 0x80, 0x82, 0x82, 0x81, 0x80, 0x7f, 0x7f, 0x7f, - 0x80, 0x81, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x81, 0x82, 0x81, 0x80, - 0x7f, 0x7e, 0x7e, 0x7e, 0x7f, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, - }, - { // 6 - 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x7f, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x81, 0x87, - 0x89, 0x86, 0x86, 0x81, 0x7c, 0x7a, 0x77, 0x7a, 0x7d, 0x79, 0x79, - 0x78, 0x76, 0x77, 0x77, 0x7a, 0x7d, 0x7c, 0x7f, 0x83, 0x82, 0x84, - 0x84, 0x84, 0x84, 0x82, 0x7f, 0x7f, 0x7e, 0x7e, 0x80, 0x7e, 0x81, - 0x82, 0x82, 0x82, 0x7f, 0x81, 0x81, 0x7e, 0x7d, 0x7c, 0x81, 0x7e, - 0x7a, 0x7c, 0x79, 0x7d, 0x7c, 0x79, 0x7c, 0x7a, 0x7c, 0x7f, 0x7e, - 0x80, 0x83, 0x83, 0x85, 0x83, 0x84, 0x87, 0x86, 0x89, 0x86, 0x88, - 0x89, 0x86, 0x88, 0x86, 0x87, 0x84, 0x81, 0x7f, 0x7a, 0x77, 0x73, - 0x73, 0x71, 0x6e, 0x6b, 0x69, 0x69, 0x68, 0x6b, 0x70, 0x76, 0x7c, - 0x83, 0x8c, 0x94, 0x99, 0x9d, 0xa0, 0xa1, 0x9f, 0x9e, 0x9c, 0x9a, - 0x97, 0x92, 0x8c, 0x87, 0x80, 0x79, 0x6e, 0x6b, 0x69, 0x66, 0x63, - 0x5c, 0x5a, 0x56, 0x51, 0x51, 0x52, 0x5f, 0x84, 0x8d, 0x96, 0x92, - 0x93, 0xa1, 0x9d, 0x9f, 0x9b, 0x9b, 0xa1, 0x9f, 0x97, 0x95, 0x8f, - 0x95, 0x8b, 0x87, 0x84, 0x86, 0x8b, 0x85, 0x7f, 0x75, 0x73, 0x72, - 0x6e, 0x63, 0x5e, 0x55, 0x52, 0x44, 0x42, 0x3b, 0x5d, 0x86, 0x91, - 0x98, 0x86, 0x90, 0x9e, 0x9f, 0xa1, 0x98, 0x99, 0xa3, 0x9d, 0x9e, - 0x94, 0x95, 0x98, 0x90, 0x8d, 0x84, 0x8a, 0x8d, 0x8a, 0x80, 0x73, - 0x6e, 0x71, 0x6a, 0x64, 0x53, 0x50, 0x48, 0x40, 0x3d, 0x3b, 0x6a, - 0x8c, 0x9d, 0x9b, 0x89, 0x94, 0x9e, 0xa4, 0xa7, 0x98, 0x9a, 0x9a, - 0x9d, 0x9a, 0x92, 0x97, 0x91, 0x91, 0x89, 0x85, 0x8a, 0x8b, 0x8d, - 0x82, 0x78, 0x73, 0x6d, 0x6b, 0x60, 0x56, 0x4d, 0x45, 0x41, 0x3d, - 0x3d, 0x5f, 0x86, 0x9f, 0xa3, 0x91, 0x90, 0x96, 0xa0, 0xa6, 0x9c, - 0x95, 0x92, 0x98, 0x9b, 0x99, 0x98, 0x90, 0x91, 0x8b, 0x89, 0x8a, - 0x88, 0x8b, 0x84, 0x7e, 0x77, 0x70, 0x6c, 0x62, 0x5d, 0x52, 0x4a, - 0x43, 0x3d, 0x3c, 0x49, 0x76, 0x93, 0xa4, 0x9f, 0x8f, 0x95, 0x98, - 0xa2, 0xa3, 0x98, 0x96, 0x8f, 0x92, 0x9b, 0xa1, 0xa1, 0x94, 0x87, - 0x82, 0x87, 0x8e, 0x8e, 0x88, 0x7f, 0x78, 0x75, 0x6e, 0x65, 0x5a, - 0x54, 0x4f, 0x48, 0x42, 0x3d, 0x3d, 0x5f, 0x8a, 0xa4, 0xaa, 0x94, - 0x8c, 0x8f, 0x9b, 0xa9, 0xa0, 0x97, 0x8b, 0x8f, 0x9a, 0xa1, 0xa3, - 0x93, 0x8b, 0x84, 0x8b, 0x91, 0x8f, 0x8b, 0x7f, 0x7b, 0x79, 0x74, - 0x6e, 0x60, 0x5b, 0x55, 0x4e, 0x47, 0x3f, 0x3c, 0x41, 0x6b, 0x90, - 0xa8, 0xa8, 0x90, 0x8b, 0x8b, 0x9b, 0xa7, 0xa2, 0x9b, 0x8e, 0x93, - 0x98, 0x9f, 0x9e, 0x91, 0x8c, 0x86, 0x8f, 0x91, 0x8c, 0x83, 0x77, - 0x79, 0x78, 0x77, 0x6f, 0x61, 0x5a, 0x51, 0x4e, 0x48, 0x41, 0x39, - 0x47, 0x74, 0x99, 0xb1, 0xa4, 0x8e, 0x85, 0x88, 0xa0, 0xaa, 0xa8, - 0x98, 0x8a, 0x8e, 0x9a, 0xa9, 0xa3, 0x92, 0x81, 0x80, 0x8e, 0x96, - 0x93, 0x81, 0x71, 0x70, 0x74, 0x7a, 0x72, 0x63, 0x51, 0x48, 0x48, - 0x48, 0x47, 0x40, 0x51, 0x75, 0x9c, 0xb4, 0xa8, 0x91, 0x7e, 0x84, - 0x9d, 0xaf, 0xaf, 0x9a, 0x89, 0x8a, 0x9c, 0xab, 0xa5, 0x8d, 0x75, - 0x76, 0x88, 0x9a, 0x9a, 0x83, 0x6a, 0x60, 0x6a, 0x7a, 0x7a, 0x68, - 0x4e, 0x3f, 0x42, 0x4d, 0x52, 0x51, 0x5f, 0x78, 0x9c, 0xaf, 0xa8, - 0x94, 0x7d, 0x81, 0x98, 0xb0, 0xb7, 0xa4, 0x91, 0x86, 0x91, 0xa1, - 0xa1, 0x93, 0x7d, 0x78, 0x83, 0x94, 0x96, 0x84, 0x6c, 0x5d, 0x64, - 0x71, 0x78, 0x6d, 0x52, 0x3f, 0x39, 0x46, 0x54, 0x63, 0x76, 0x84, - 0x96, 0x9c, 0x9d, 0x95, 0x8c, 0x8f, 0x9a, 0xac, 0xb2, 0xac, 0x9e, - 0x8f, 0x8c, 0x8d, 0x91, 0x8f, 0x8a, 0x86, 0x83, 0x83, 0x7e, 0x77, - 0x6c, 0x68, 0x67, 0x68, 0x68, 0x60, 0x52, 0x46, 0x44, 0x4a, 0x5a, - 0x73, 0x88, 0x98, 0x9c, 0x96, 0x8e, 0x8a, 0x92, 0xa0, 0xad, 0xb1, - 0xa9, 0x9b, 0x8d, 0x88, 0x8a, 0x8e, 0x8d, 0x89, 0x84, 0x81, 0x80, - 0x7d, 0x77, 0x6f, 0x69, 0x66, 0x67, 0x67, 0x60, 0x52, 0x45, 0x40, - 0x45, 0x54, 0x6c, 0x84, 0x95, 0x9b, 0x97, 0x92, 0x8f, 0x96, 0xa2, - 0xb1, 0xb7, 0xb1, 0xa4, 0x94, 0x8c, 0x89, 0x8c, 0x8d, 0x8b, 0x87, - 0x82, 0x7e, 0x7a, 0x75, 0x6f, 0x6b, 0x6a, 0x6c, 0x6c, 0x66, 0x5b, - 0x50, 0x4b, 0x50, 0x5a, 0x66, 0x75, 0x7f, 0x89, 0x8f, 0x93, 0x95, - 0x96, 0x9a, 0x9e, 0xa4, 0xa8, 0xa7, 0x9f, 0x94, 0x8c, 0x87, 0x88, - 0x88, 0x89, 0x87, 0x82, 0x7d, 0x77, 0x73, 0x71, 0x72, 0x72, 0x73, - 0x71, 0x6c, 0x66, 0x60, 0x5e, 0x60, 0x65, 0x6b, 0x70, 0x76, 0x7b, - 0x81, 0x87, 0x8c, 0x90, 0x92, 0x94, 0x96, 0x98, 0x99, 0x99, 0x97, - 0x93, 0x8d, 0x87, 0x84, 0x84, 0x86, 0x87, 0x86, 0x7f, 0x76, 0x71, - 0x71, 0x76, 0x7c, 0x7f, 0x7b, 0x72, 0x6a, 0x67, 0x6b, 0x72, 0x77, - 0x77, 0x74, 0x71, 0x71, 0x76, 0x7e, 0x85, 0x89, 0x89, 0x87, 0x86, - 0x87, 0x8a, 0x8e, 0x91, 0x91, 0x8e, 0x8a, 0x87, 0x86, 0x88, 0x89, - 0x88, 0x83, 0x7e, 0x7a, 0x79, 0x7c, 0x7f, 0x81, 0x7f, 0x7a, 0x76, - 0x74, 0x76, 0x79, 0x7c, 0x7d, 0x7b, 0x77, 0x75, 0x76, 0x78, 0x7b, - 0x7e, 0x7f, 0x7e, 0x7c, 0x7c, 0x7e, 0x81, 0x85, 0x87, 0x87, 0x86, - 0x86, 0x86, 0x88, 0x8a, 0x8a, 0x89, 0x87, 0x85, 0x83, 0x82, 0x81, - 0x80, 0x7f, 0x7f, 0x7d, 0x7c, 0x7b, 0x7a, 0x7b, 0x7b, 0x7b, 0x7b, - 0x7b, 0x7b, 0x7b, 0x7b, 0x7c, 0x7c, 0x7d, 0x7d, 0x7e, 0x7e, 0x7e, - 0x7f, 0x80, 0x81, 0x82, 0x83, 0x83, 0x83, 0x83, 0x84, 0x84, 0x84, - 0x84, 0x83, 0x82, 0x81, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7e, 0x7e, - 0x7d, 0x7d, 0x7e, 0x7e, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7e, 0x7e, - 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x81, 0x81, 0x81, 0x82, 0x82, - 0x82, 0x82, 0x82, 0x82, 0x81, 0x81, 0x81, 0x81, 0x80, 0x80, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7e, 0x7e, 0x7e, 0x7d, 0x7d, 0x7e, 0x7e, - 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x81, 0x81, 0x81, 0x81, 0x81, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, - 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, - 0x80, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x80, - 0x80, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, - 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x80, - 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, - 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x80, - 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x7f, - 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x7f, 0x80, - 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, - 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, - 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, - 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7f, - 0x80, 0x80, 0x89, 0x8f, 0x7e, 0x6a, 0x6a, 0x81, 0x94, 0x8f, 0x7b, - 0x6c, 0x6e, 0x7f, 0x8e, 0x8a, 0x7b, 0x73, 0x79, 0x84, 0x8b, 0x88, - 0x7e, 0x79, 0x7c, 0x84, 0x86, 0x81, 0x79, 0x77, 0x7c, 0x82, 0x84, - 0x7f, 0x7a, 0x7b, 0x80, 0x82, 0x80, 0x79, 0x89, 0x9d, 0x89, 0x70, - 0x70, 0x82, 0x8d, 0x88, 0x7c, 0x74, 0x74, 0x7c, 0x82, 0x7d, 0x76, - 0x77, 0x7c, 0x7f, 0x81, 0x80, 0x7b, 0x7f, 0x9d, 0xa8, 0x83, 0x5a, - 0x5d, 0x82, 0x9c, 0x92, 0x78, 0x5f, 0x5f, 0x79, 0x90, 0x8b, 0x76, - 0x7e, 0x8b, 0x86, 0x8a, 0x9c, 0x96, 0x76, 0x65, 0x76, 0x8d, 0x8f, - 0x7a, 0x68, 0x65, 0x80, 0x97, 0x7e, 0x65, 0x6c, 0x87, 0x93, 0x88, - 0x7d, 0x7d, 0x88, 0x8f, 0x8e, 0x89, 0x77, 0x6a, 0x6a, 0x82, 0xa1, - 0x96, 0x71, 0x59, 0x69, 0x87, 0x94, 0x89, 0x76, 0x6d, 0x74, 0x84, - 0x86, 0x81, 0x7f, 0x7f, 0x7e, 0x7d, 0x83, 0x86, 0x83, 0x7c, 0x7a, - 0x7d, 0x87, 0x93, 0x8a, 0x77, 0x75, 0x85, 0x8e, 0x85, 0x7b, 0x7e, - 0x80, 0x88, 0x8c, 0x85, 0x77, 0x6d, 0x73, 0x7c, 0x83, 0x83, 0x7e, - 0x79, 0x7a, 0x7f, 0x80, 0x7e, 0x7e, 0x7d, 0x7b, 0x7c, 0x7f, 0x85, - 0x86, 0x82, 0x7f, 0x80, 0x84, 0x84, 0x80, 0x7e, 0x81, 0x86, 0x85, - 0x84, 0x83, 0x83, 0x7e, 0x77, 0x79, 0x80, 0x84, 0x80, 0x7a, 0x7a, - 0x7d, 0x80, 0x83, 0x80, 0x7e, 0x7f, 0x83, 0x83, 0x7e, 0x7c, 0x7e, - 0x7e, 0x7e, 0x7f, 0x84, 0x96, 0x9e, 0x88, 0x6b, 0x65, 0x7f, 0x92, - 0x94, 0x88, 0x77, 0x6e, 0x6d, 0x76, 0x7c, 0x7c, 0x7a, 0x7c, 0x7d, - 0x7d, 0x84, 0x87, 0x84, 0x7e, 0x7e, 0x85, 0x84, 0x80, 0x7b, 0x79, - 0x7d, 0x81, 0x81, 0x7c, 0x7c, 0x7f, 0x81, 0x80, 0x7f, 0x80, 0x81, - 0x82, 0x82, 0x82, 0x81, 0x7f, 0x7f, 0x7e, 0x7d, 0x7f, 0x81, 0x81, - 0x7f, 0x7f, 0x80, 0x82, 0x80, 0x81, 0x80, 0x7f, 0x80, 0x7f, 0x7e, - 0x7f, 0x81, 0x7f, 0x7d, 0x7d, 0x81, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, - 0x81, 0x80, 0x7f, 0x7f, 0x84, 0x83, 0x7c, 0x7e, 0x82, 0x81, 0x7d, - 0x7c, 0x82, 0x83, 0x81, 0x7e, 0x7e, 0x81, 0x81, 0x80, 0x7c, 0x7d, - 0x81, 0x81, 0x7e, 0x7e, 0x7e, 0x7f, 0x80, 0x80, 0x80, 0x7f, 0x81, - 0x81, 0x7f, 0x7d, 0x7f, 0x81, 0x7e, 0x7c, 0x7e, 0x80, 0x82, 0x7e, - 0x7a, 0x7b, 0x7f, 0x83, 0x7f, 0x79, 0x7a, 0x7f, 0x81, 0x7e, 0x7c, - 0x80, 0x81, 0x7d, 0x7c, 0x80, 0x83, 0x80, 0x7d, 0x7f, 0x82, 0x83, - 0x81, 0x81, 0x82, 0x83, 0x80, 0x7e, 0x7d, 0x80, 0x85, 0x81, 0x7e, - 0x7d, 0x7f, 0x7f, 0x7d, 0x7f, 0x80, 0x80, 0x7e, 0x7c, 0x7f, 0x82, - 0x81, 0x81, 0x7f, 0x80, 0x83, 0x81, 0x7f, 0x7f, 0x81, 0x81, 0x81, - 0x80, 0x7e, 0x7f, 0x80, 0x80, 0x7e, 0x7e, 0x7f, 0x7f, 0x7e, 0x7e, - 0x7f, 0x80, 0x7e, 0x7d, 0x80, 0x81, 0x80, 0x7f, 0x80, 0x82, 0x81, - 0x80, 0x82, 0x83, 0x82, 0x80, 0x80, 0x81, 0x81, 0x7f, 0x7e, 0x7e, - 0x7f, 0x7e, 0x7d, 0x7c, 0x7c, 0x7e, 0x7f, 0x7d, 0x7e, 0x7e, 0x7f, - 0x80, 0x81, 0x82, 0x82, 0x83, 0x84, 0x83, 0x84, 0x83, 0x83, 0x83, - 0x83, 0x82, 0x80, 0x80, 0x81, 0x7e, 0x7d, 0x7c, 0x7b, 0x79, 0x78, - 0x79, 0x7a, 0x79, 0x79, 0x7a, 0x7b, 0x7e, 0x80, 0x82, 0x82, 0x82, - 0x83, 0x87, 0x87, 0x87, 0x88, 0x88, 0x88, 0x87, 0x86, 0x85, 0x83, - 0x81, 0x80, 0x7d, 0x80, 0x81, 0x78, 0x6f, 0x6f, 0x75, 0x76, 0x72, - 0x71, 0x76, 0x7b, 0x7a, 0x7a, 0x7f, 0x85, 0x8b, 0x8e, 0x8e, 0x90, - 0x94, 0x96, 0x93, 0x8f, 0x8f, 0x8f, 0x88, 0x80, 0x79, 0x75, 0x73, - 0x6e, 0x68, 0x64, 0x63, 0x60, 0x5d, 0x5d, 0x62, 0x6d, 0x77, 0x7d, - 0x82, 0x89, 0x93, 0x9a, 0x9f, 0xa5, 0xab, 0xb0, 0xac, 0xa5, 0x9f, - 0x97, 0x8d, 0x81, 0x7a, 0x72, 0x6c, 0x66, 0x5f, 0x5a, 0x55, 0x51, - 0x4e, 0x50, 0x61, 0x71, 0x79, 0x7c, 0x82, 0x90, 0x97, 0x9d, 0xa2, - 0xaa, 0xb2, 0xb2, 0xac, 0xa4, 0x9d, 0x95, 0x88, 0x7b, 0x72, 0x70, - 0x6b, 0x62, 0x5a, 0x57, 0x58, 0x55, 0x4e, 0x4b, 0x5c, 0x72, 0x7b, - 0x79, 0x7c, 0x8b, 0x97, 0x9c, 0x9f, 0xa5, 0xb2, 0xb4, 0xaf, 0xa7, - 0xa3, 0xa0, 0x92, 0x80, 0x72, 0x70, 0x71, 0x69, 0x5f, 0x5b, 0x5c, - 0x5a, 0x53, 0x4b, 0x51, 0x69, 0x78, 0x79, 0x77, 0x7f, 0x90, 0x97, - 0x9c, 0xa1, 0xad, 0xb6, 0xb3, 0xac, 0xa7, 0xa5, 0x9c, 0x8a, 0x79, - 0x71, 0x71, 0x6c, 0x62, 0x5b, 0x5b, 0x5c, 0x56, 0x4c, 0x47, 0x59, - 0x72, 0x79, 0x75, 0x76, 0x87, 0x95, 0x99, 0x9c, 0xa5, 0xb4, 0xb7, - 0xb0, 0xa9, 0xa7, 0xa3, 0x95, 0x82, 0x73, 0x71, 0x70, 0x69, 0x5f, - 0x5c, 0x5f, 0x5e, 0x56, 0x4b, 0x4f, 0x68, 0x78, 0x79, 0x74, 0x7b, - 0x8e, 0x96, 0x98, 0x9d, 0xa9, 0xb4, 0xb1, 0xa8, 0xa4, 0xa3, 0x9c, - 0x8a, 0x79, 0x71, 0x72, 0x6f, 0x65, 0x5b, 0x5c, 0x60, 0x5a, 0x4e, - 0x46, 0x5a, 0x74, 0x7a, 0x76, 0x75, 0x88, 0x96, 0x99, 0x9b, 0xa3, - 0xb4, 0xb6, 0xaf, 0xa4, 0xa2, 0xa1, 0x93, 0x80, 0x71, 0x71, 0x70, - 0x68, 0x5c, 0x58, 0x5e, 0x5c, 0x52, 0x44, 0x4e, 0x6e, 0x7b, 0x78, - 0x72, 0x81, 0x95, 0x99, 0x9b, 0xa0, 0xb0, 0xb9, 0xb1, 0xa6, 0x9f, - 0xa0, 0x98, 0x84, 0x73, 0x70, 0x73, 0x6e, 0x63, 0x5b, 0x5e, 0x61, - 0x5a, 0x4e, 0x49, 0x61, 0x78, 0x7b, 0x74, 0x76, 0x8b, 0x98, 0x99, - 0x9b, 0xa5, 0xb5, 0xb6, 0xac, 0xa2, 0xa0, 0x9f, 0x91, 0x7e, 0x71, - 0x71, 0x71, 0x69, 0x5d, 0x5b, 0x5f, 0x5c, 0x51, 0x45, 0x55, 0x74, - 0x7c, 0x78, 0x73, 0x84, 0x96, 0x99, 0x9b, 0xa1, 0xb2, 0xb8, 0xb1, - 0xa5, 0x9d, 0x9d, 0x93, 0x81, 0x72, 0x70, 0x74, 0x6e, 0x64, 0x5c, - 0x5f, 0x61, 0x5a, 0x4c, 0x4d, 0x6a, 0x7b, 0x7a, 0x72, 0x79, 0x8f, - 0x98, 0x99, 0x9b, 0xa9, 0xb6, 0xb5, 0xa9, 0x9f, 0x9f, 0x9a, 0x89, - 0x77, 0x6f, 0x74, 0x72, 0x69, 0x5f, 0x5d, 0x60, 0x5b, 0x4e, 0x45, - 0x5d, 0x78, 0x7d, 0x76, 0x73, 0x87, 0x96, 0x98, 0x9a, 0xa3, 0xb4, - 0xb7, 0xae, 0xa2, 0x9e, 0x9c, 0x8f, 0x7c, 0x6e, 0x6f, 0x72, 0x6d, - 0x66, 0x65, 0x6a, 0x68, 0x5a, 0x4b, 0x4d, 0x6a, 0x7c, 0x78, 0x72, - 0x77, 0x8a, 0x91, 0x92, 0x98, 0xa5, 0xb3, 0xb1, 0xa8, 0xa0, 0xa0, - 0x9a, 0x89, 0x79, 0x72, 0x75, 0x73, 0x6a, 0x65, 0x66, 0x69, 0x60, - 0x4f, 0x45, 0x5b, 0x78, 0x7c, 0x75, 0x73, 0x84, 0x91, 0x92, 0x93, - 0x9e, 0xae, 0xb1, 0xa9, 0xa0, 0x9d, 0x9d, 0x90, 0x7c, 0x71, 0x73, - 0x77, 0x71, 0x69, 0x69, 0x70, 0x6f, 0x64, 0x4f, 0x4b, 0x66, 0x7a, - 0x7a, 0x70, 0x74, 0x88, 0x8f, 0x8e, 0x90, 0x9f, 0xae, 0xad, 0xa2, - 0x9b, 0x9e, 0x9c, 0x8c, 0x78, 0x71, 0x75, 0x76, 0x6c, 0x67, 0x6b, - 0x75, 0x73, 0x68, 0x55, 0x4b, 0x6a, 0x7b, 0x7d, 0x75, 0x74, 0x8b, - 0x8d, 0x8d, 0x8d, 0x9b, 0xac, 0xa6, 0xa0, 0x96, 0x9b, 0x99, 0x8b, - 0x7a, 0x70, 0x77, 0x75, 0x71, 0x6a, 0x6d, 0x73, 0x70, 0x69, 0x58, - 0x55, 0x6b, 0x7a, 0x7d, 0x78, 0x7b, 0x8a, 0x8e, 0x8e, 0x8f, 0x98, - 0xa3, 0xa0, 0x99, 0x92, 0x95, 0x93, 0x88, 0x7b, 0x74, 0x77, 0x77, - 0x72, 0x6e, 0x70, 0x75, 0x73, 0x6a, 0x5e, 0x56, 0x67, 0x74, 0x78, - 0x79, 0x7b, 0x8a, 0x8d, 0x8f, 0x90, 0x97, 0xa1, 0x9d, 0x98, 0x91, - 0x92, 0x90, 0x87, 0x7d, 0x76, 0x79, 0x79, 0x76, 0x73, 0x75, 0x7b, - 0x7a, 0x77, 0x6f, 0x69, 0x66, 0x68, 0x6f, 0x74, 0x7a, 0x7e, 0x84, - 0x89, 0x8b, 0x8f, 0x93, 0x96, 0x94, 0x92, 0x90, 0x8e, 0x8c, 0x87, - 0x82, 0x7d, 0x7b, 0x7a, 0x79, 0x79, 0x78, 0x77, 0x75, 0x70, 0x6a, - 0x5d, 0x5c, 0x6f, 0x7a, 0x80, 0x7b, 0x80, 0x8b, 0x8d, 0x90, 0x8e, - 0x94, 0x97, 0x92, 0x8a, 0x82, 0x83, 0x80, 0x7d, 0x79, 0x7a, 0x7f, - 0x81, 0x83, 0x82, 0x85, 0x88, 0x8a, 0x86, 0x80, 0x7d, 0x7a, 0x78, - 0x73, 0x70, 0x70, 0x72, 0x74, 0x75, 0x79, 0x7f, 0x86, 0x89, 0x8a, - 0x8a, 0x8b, 0x8b, 0x88, 0x85, 0x83, 0x81, 0x7e, 0x79, 0x74, 0x70, - 0x6e, 0x6c, 0x68, 0x67, 0x6a, 0x71, 0x77, 0x7b, 0x83, 0x8b, 0x90, - 0x91, 0x91, 0x92, 0x92, 0x91, 0x8d, 0x89, 0x86, 0x82, 0x7f, 0x7b, - 0x7b, 0x7e, 0x81, 0x84, 0x85, 0x89, 0x8b, 0x8b, 0x89, 0x86, 0x83, - 0x80, 0x7c, 0x77, 0x73, 0x71, 0x70, 0x70, 0x71, 0x74, 0x78, 0x7b, - 0x7c, 0x7e, 0x81, 0x84, 0x87, 0x87, 0x87, 0x85, 0x85, 0x85, 0x84, - 0x83, 0x82, 0x81, 0x7f, 0x7c, 0x79, 0x77, 0x75, 0x73, 0x71, 0x71, - 0x70, 0x73, 0x79, 0x7e, 0x83, 0x86, 0x89, 0x8b, 0x8c, 0x8d, 0x8c, - 0x8b, 0x89, 0x87, 0x83, 0x80, 0x7f, 0x7e, 0x7d, 0x7d, 0x7d, 0x7f, - 0x81, 0x83, 0x83, 0x84, 0x85, 0x86, 0x85, 0x84, 0x83, 0x82, 0x81, - 0x7f, 0x7e, 0x7d, 0x7d, 0x7d, 0x7d, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, - 0x7b, 0x7c, 0x7c, 0x7c, 0x7c, 0x7d, 0x7f, 0x80, 0x80, 0x81, 0x81, - 0x82, 0x82, 0x82, 0x81, 0x81, 0x81, 0x81, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7e, 0x7e, 0x7e, 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x85, - 0x85, 0x84, 0x81, 0x7f, 0x81, 0x7f, 0x7e, 0x7c, 0x7c, 0x7d, 0x7c, - 0x7b, 0x7b, 0x7d, 0x7e, 0x7e, 0x7e, 0x7e, 0x81, 0x81, 0x81, 0x82, - 0x82, 0x84, 0x83, 0x83, 0x82, 0x82, 0x82, 0x81, 0x80, 0x7f, 0x7f, - 0x7f, 0x7e, 0x7d, 0x7c, 0x7d, 0x7e, 0x7e, 0x7d, 0x7e, 0x7f, 0x7f, - 0x7f, 0x7f, 0x80, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x80, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7e, 0x7e, 0x7e, 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, - 0x80, 0x80, 0x80, 0x80, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, - 0x80, 0x80, 0x7f, 0x7f, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7f, - 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - }, - { // 7 - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7e, 0x7e, 0x7e, 0x7e, - 0x7e, 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, - 0x81, 0x81, 0x81, 0x81, 0x81, 0x82, 0x82, 0x81, 0x81, 0x81, 0x80, - 0x80, 0x7f, 0x7f, 0x7e, 0x7d, 0x7d, 0x7c, 0x7c, 0x7c, 0x7b, 0x7b, - 0x7c, 0x7c, 0x7c, 0x7d, 0x7e, 0x7f, 0x7f, 0x80, 0x82, 0x83, 0x83, - 0x84, 0x85, 0x86, 0x86, 0x86, 0x87, 0x86, 0x85, 0x84, 0x83, 0x82, - 0x80, 0x7e, 0x7c, 0x79, 0x77, 0x75, 0x73, 0x72, 0x71, 0x71, 0x71, - 0x73, 0x75, 0x77, 0x7b, 0x7f, 0x83, 0x86, 0x8a, 0x8d, 0x90, 0x92, - 0x94, 0x95, 0x95, 0x93, 0x90, 0x8d, 0x8a, 0x86, 0x81, 0x7d, 0x78, - 0x73, 0x6d, 0x69, 0x67, 0x65, 0x66, 0x67, 0x68, 0x6b, 0x6e, 0x71, - 0x75, 0x7d, 0x83, 0x88, 0x8d, 0x91, 0x95, 0x97, 0x98, 0x9a, 0x9c, - 0x9c, 0x9b, 0x99, 0x96, 0x92, 0x8d, 0x88, 0x84, 0x7e, 0x78, 0x71, - 0x6c, 0x66, 0x61, 0x5f, 0x62, 0x60, 0x5a, 0x62, 0x69, 0x68, 0x69, - 0x75, 0x82, 0x8a, 0x8b, 0x90, 0x98, 0x9d, 0x9f, 0xa1, 0xa3, 0xa2, - 0xa1, 0x9e, 0x99, 0x94, 0x8f, 0x8a, 0x81, 0x79, 0x71, 0x6b, 0x64, - 0x5f, 0x5f, 0x5d, 0x5e, 0x5e, 0x5f, 0x62, 0x65, 0x6c, 0x77, 0x7c, - 0x82, 0x8f, 0x8e, 0x92, 0x9a, 0x9b, 0x9e, 0xa1, 0xa2, 0xa1, 0x9d, - 0x9c, 0x99, 0x94, 0x8d, 0x88, 0x82, 0x79, 0x73, 0x6b, 0x66, 0x60, - 0x5f, 0x5c, 0x5a, 0x5a, 0x5c, 0x60, 0x63, 0x6b, 0x74, 0x7d, 0x82, - 0x88, 0x8f, 0x95, 0x9a, 0x9c, 0xa0, 0xa2, 0xa3, 0xa1, 0x9e, 0x9e, - 0x99, 0x93, 0x8b, 0x87, 0x80, 0x78, 0x6f, 0x68, 0x63, 0x5e, 0x5f, - 0x5b, 0x59, 0x5a, 0x5e, 0x61, 0x64, 0x6e, 0x77, 0x81, 0x85, 0x8a, - 0x92, 0x98, 0x9c, 0x9e, 0xa2, 0xa4, 0xa3, 0xa0, 0x9e, 0x9d, 0x98, - 0x92, 0x8a, 0x85, 0x7e, 0x75, 0x6d, 0x65, 0x61, 0x5e, 0x5e, 0x59, - 0x57, 0x59, 0x5d, 0x60, 0x64, 0x6f, 0x7a, 0x82, 0x85, 0x8c, 0x94, - 0x9b, 0x9d, 0x9e, 0xa4, 0xa6, 0xa4, 0x9f, 0x9e, 0x9d, 0x98, 0x90, - 0x88, 0x84, 0x7d, 0x73, 0x69, 0x63, 0x60, 0x5e, 0x5b, 0x57, 0x56, - 0x5a, 0x5e, 0x5f, 0x66, 0x73, 0x7e, 0x84, 0x88, 0x90, 0x98, 0x9f, - 0x9f, 0xa1, 0xa6, 0xa9, 0xa4, 0x9f, 0x9e, 0x9c, 0x95, 0x8a, 0x84, - 0x7e, 0x76, 0x69, 0x58, 0x50, 0x5a, 0x65, 0x61, 0x5f, 0x68, 0x70, - 0x64, 0x5b, 0x69, 0x7f, 0x84, 0x84, 0x98, 0xab, 0xad, 0xa2, 0xa0, - 0xa4, 0x98, 0x8d, 0x91, 0x9c, 0x95, 0x85, 0x81, 0x7e, 0x6d, 0x56, - 0x50, 0x4d, 0x54, 0x75, 0x88, 0x83, 0x78, 0x76, 0x73, 0x63, 0x66, - 0x7e, 0x92, 0x91, 0x9a, 0xa6, 0xa2, 0x92, 0x8b, 0x8a, 0x82, 0x80, - 0x8d, 0x99, 0x95, 0x8b, 0x84, 0x7a, 0x68, 0x5d, 0x58, 0x50, 0x4e, - 0x7b, 0xa1, 0x8f, 0x7d, 0x7c, 0x73, 0x52, 0x52, 0x7d, 0x99, 0x9c, - 0xa6, 0xb5, 0xa6, 0x88, 0x7f, 0x7f, 0x7c, 0x7b, 0x93, 0xa4, 0x99, - 0x87, 0x7f, 0x74, 0x60, 0x58, 0x55, 0x4f, 0x4e, 0x89, 0xad, 0x92, - 0x7a, 0x73, 0x6a, 0x49, 0x56, 0x85, 0xa5, 0xa5, 0xab, 0xb4, 0x9c, - 0x7a, 0x7a, 0x80, 0x7d, 0x84, 0x9d, 0xa7, 0x93, 0x81, 0x79, 0x6d, - 0x5b, 0x58, 0x54, 0x4c, 0x5d, 0xa0, 0xb3, 0x89, 0x72, 0x6d, 0x5c, - 0x42, 0x64, 0x99, 0xaf, 0xac, 0xb1, 0xad, 0x88, 0x72, 0x74, 0x7f, - 0x82, 0x8f, 0xa5, 0xa3, 0x8a, 0x74, 0x6f, 0x62, 0x59, 0x55, 0x56, - 0x4f, 0x7b, 0xb7, 0xa3, 0x7a, 0x6c, 0x69, 0x4c, 0x4f, 0x86, 0xb1, - 0xb1, 0xa9, 0xab, 0x93, 0x73, 0x70, 0x82, 0x88, 0x8a, 0x9a, 0xa0, - 0x90, 0x76, 0x6e, 0x6b, 0x61, 0x56, 0x50, 0x4e, 0x6d, 0xb1, 0xad, - 0x84, 0x6d, 0x68, 0x54, 0x49, 0x7b, 0xac, 0xb7, 0xaa, 0xaa, 0x9b, - 0x77, 0x6b, 0x7b, 0x8a, 0x8a, 0x96, 0xa1, 0x95, 0x79, 0x6a, 0x69, - 0x64, 0x57, 0x51, 0x4f, 0x71, 0xaf, 0xaf, 0x85, 0x6c, 0x68, 0x56, - 0x51, 0x7b, 0xac, 0xb4, 0xa8, 0xa6, 0x98, 0x77, 0x69, 0x7c, 0x8b, - 0x8c, 0x92, 0x9b, 0x90, 0x78, 0x68, 0x6d, 0x66, 0x53, 0x4c, 0x53, - 0x7c, 0xb3, 0xab, 0x81, 0x6c, 0x63, 0x52, 0x54, 0x8a, 0xb5, 0xb7, - 0xa9, 0xa4, 0x90, 0x72, 0x69, 0x7f, 0x90, 0x8e, 0x95, 0x99, 0x89, - 0x6e, 0x63, 0x6b, 0x60, 0x4f, 0x4a, 0x60, 0xa2, 0xb7, 0x94, 0x72, - 0x6b, 0x5c, 0x4d, 0x6f, 0xa8, 0xbc, 0xac, 0xa8, 0x9b, 0x7b, 0x64, - 0x78, 0x90, 0x8f, 0x8f, 0x9a, 0x90, 0x70, 0x5e, 0x6a, 0x6a, 0x51, - 0x49, 0x54, 0x94, 0xb8, 0x9b, 0x78, 0x6c, 0x63, 0x51, 0x66, 0x9e, - 0xbc, 0xad, 0xa3, 0x9f, 0x83, 0x6a, 0x75, 0x8d, 0x8d, 0x88, 0x94, - 0x91, 0x78, 0x5e, 0x65, 0x6a, 0x55, 0x43, 0x51, 0x9a, 0xba, 0x9a, - 0x74, 0x6f, 0x64, 0x4f, 0x6b, 0xa4, 0xc0, 0xab, 0xa1, 0x9d, 0x81, - 0x67, 0x77, 0x92, 0x91, 0x88, 0x91, 0x8e, 0x72, 0x59, 0x63, 0x6a, - 0x53, 0x40, 0x5e, 0xa8, 0xb4, 0x8c, 0x70, 0x6f, 0x5e, 0x53, 0x7b, - 0xb2, 0xbc, 0xa8, 0xa3, 0x96, 0x76, 0x69, 0x85, 0x96, 0x88, 0x82, - 0x8e, 0x87, 0x69, 0x60, 0x68, 0x63, 0x51, 0x4f, 0x88, 0xb0, 0x9c, - 0x79, 0x6f, 0x6c, 0x5b, 0x6b, 0x9c, 0xba, 0xac, 0x9e, 0x98, 0x84, - 0x67, 0x72, 0x8f, 0x90, 0x85, 0x87, 0x8e, 0x74, 0x59, 0x5c, 0x63, - 0x54, 0x49, 0x7d, 0xb6, 0xa3, 0x79, 0x6f, 0x6f, 0x5a, 0x62, 0x9a, - 0xc1, 0xb2, 0x9d, 0x9f, 0x89, 0x69, 0x6c, 0x8d, 0x92, 0x81, 0x85, - 0x8f, 0x79, 0x5c, 0x57, 0x5b, 0x4b, 0x4f, 0x91, 0xb8, 0x9b, 0x74, - 0x70, 0x6a, 0x57, 0x6d, 0xab, 0xc5, 0xb0, 0xa0, 0x96, 0x7e, 0x64, - 0x72, 0x8f, 0x92, 0x85, 0x89, 0x89, 0x6c, 0x56, 0x58, 0x57, 0x46, - 0x5f, 0xa2, 0xb6, 0x90, 0x70, 0x6f, 0x64, 0x57, 0x7c, 0xb3, 0xc5, - 0xaf, 0xa1, 0x96, 0x75, 0x60, 0x77, 0x8f, 0x8d, 0x87, 0x8b, 0x82, - 0x5f, 0x4c, 0x4f, 0x51, 0x58, 0x8a, 0xae, 0xa0, 0x7a, 0x6b, 0x6a, - 0x60, 0x70, 0xa4, 0xc6, 0xba, 0xa6, 0x95, 0x81, 0x64, 0x6b, 0x85, - 0x90, 0x88, 0x87, 0x82, 0x67, 0x4b, 0x4a, 0x4e, 0x5a, 0x8b, 0xa9, - 0xa0, 0x7a, 0x6e, 0x6a, 0x63, 0x71, 0xa2, 0xc3, 0xbe, 0xa7, 0x96, - 0x82, 0x69, 0x6b, 0x80, 0x8d, 0x89, 0x8b, 0x82, 0x6b, 0x4c, 0x43, - 0x41, 0x55, 0x87, 0xac, 0xa4, 0x85, 0x70, 0x63, 0x5e, 0x6f, 0xa0, - 0xbf, 0xc5, 0xb5, 0x9e, 0x81, 0x69, 0x69, 0x7a, 0x86, 0x8a, 0x8f, - 0x82, 0x67, 0x49, 0x3f, 0x40, 0x61, 0x95, 0xa8, 0x96, 0x7f, 0x73, - 0x65, 0x61, 0x7e, 0xac, 0xc2, 0xbc, 0xae, 0x9a, 0x7b, 0x67, 0x6a, - 0x7d, 0x86, 0x8a, 0x89, 0x7a, 0x59, 0x41, 0x3d, 0x54, 0x80, 0x9b, - 0x9d, 0x87, 0x79, 0x6c, 0x67, 0x74, 0x96, 0xb4, 0xbe, 0xb5, 0xa3, - 0x8b, 0x74, 0x6c, 0x72, 0x7d, 0x86, 0x8a, 0x82, 0x6f, 0x50, 0x40, - 0x41, 0x66, 0x8e, 0x9e, 0x93, 0x83, 0x75, 0x66, 0x67, 0x82, 0xa5, - 0xba, 0xbe, 0xb2, 0x9c, 0x7e, 0x6c, 0x6a, 0x72, 0x7c, 0x88, 0x88, - 0x78, 0x5a, 0x44, 0x3f, 0x61, 0x86, 0x94, 0x90, 0x84, 0x7b, 0x6c, - 0x6d, 0x85, 0xa7, 0xb4, 0xb6, 0xaf, 0x9e, 0x82, 0x70, 0x6f, 0x75, - 0x7a, 0x82, 0x84, 0x74, 0x59, 0x48, 0x48, 0x65, 0x85, 0x90, 0x8a, - 0x80, 0x7c, 0x72, 0x73, 0x89, 0xa4, 0xac, 0xaf, 0xab, 0xa0, 0x8b, - 0x77, 0x72, 0x73, 0x76, 0x7b, 0x81, 0x79, 0x60, 0x4c, 0x4c, 0x66, - 0x81, 0x8a, 0x87, 0x80, 0x7c, 0x74, 0x77, 0x8c, 0xa6, 0xb2, 0xb3, - 0xb0, 0xa3, 0x8b, 0x79, 0x72, 0x72, 0x74, 0x78, 0x7a, 0x6e, 0x57, - 0x45, 0x4a, 0x69, 0x82, 0x86, 0x81, 0x80, 0x7d, 0x76, 0x7e, 0x94, - 0xa8, 0xae, 0xac, 0xa8, 0x9d, 0x8b, 0x7b, 0x75, 0x76, 0x76, 0x78, - 0x79, 0x70, 0x5e, 0x51, 0x58, 0x6e, 0x7c, 0x7e, 0x7a, 0x7c, 0x7d, - 0x7b, 0x81, 0x90, 0x9e, 0x9f, 0x9b, 0x96, 0x92, 0x8b, 0x87, 0x87, - 0x8a, 0x89, 0x84, 0x7d, 0x75, 0x6d, 0x66, 0x67, 0x6c, 0x6d, 0x69, - 0x66, 0x69, 0x6f, 0x75, 0x7a, 0x82, 0x8d, 0x93, 0x93, 0x94, 0x97, - 0x9a, 0x98, 0x95, 0x94, 0x93, 0x8c, 0x82, 0x79, 0x73, 0x6c, 0x66, - 0x66, 0x68, 0x67, 0x64, 0x65, 0x6b, 0x71, 0x76, 0x7d, 0x88, 0x91, - 0x95, 0x96, 0x99, 0x9c, 0x9c, 0x99, 0x97, 0x95, 0x90, 0x85, 0x7d, - 0x75, 0x6e, 0x67, 0x65, 0x67, 0x66, 0x62, 0x63, 0x6a, 0x6f, 0x73, - 0x7a, 0x87, 0x90, 0x93, 0x95, 0x99, 0x9d, 0x9c, 0x9a, 0x98, 0x97, - 0x90, 0x87, 0x7f, 0x77, 0x6e, 0x66, 0x64, 0x66, 0x65, 0x63, 0x64, - 0x6a, 0x6e, 0x72, 0x7a, 0x86, 0x90, 0x93, 0x95, 0x99, 0x9d, 0x9b, - 0x99, 0x99, 0x98, 0x91, 0x87, 0x7f, 0x78, 0x6d, 0x62, 0x5f, 0x60, - 0x5d, 0x58, 0x59, 0x61, 0x68, 0x6b, 0x77, 0x89, 0x96, 0x9b, 0x9d, - 0xa5, 0xaa, 0xa7, 0xa3, 0xa4, 0xa2, 0x99, 0x8b, 0x80, 0x76, 0x69, - 0x5b, 0x58, 0x5b, 0x5a, 0x56, 0x57, 0x61, 0x67, 0x6b, 0x75, 0x87, - 0x95, 0x9a, 0x9d, 0xa4, 0xaa, 0xa8, 0xa4, 0xa4, 0xa3, 0x9a, 0x8d, - 0x82, 0x78, 0x6a, 0x5d, 0x58, 0x5a, 0x59, 0x56, 0x58, 0x60, 0x66, - 0x6a, 0x74, 0x85, 0x94, 0x9a, 0x9d, 0xa3, 0xa8, 0xa7, 0xa4, 0xa4, - 0xa3, 0x9b, 0x8d, 0x82, 0x78, 0x6b, 0x5e, 0x58, 0x5b, 0x5b, 0x56, - 0x57, 0x5f, 0x66, 0x69, 0x72, 0x82, 0x91, 0x98, 0x9c, 0xa2, 0xa8, - 0xa7, 0xa3, 0xa3, 0xa2, 0x9b, 0x90, 0x85, 0x7b, 0x6d, 0x5f, 0x59, - 0x5b, 0x5b, 0x57, 0x58, 0x60, 0x66, 0x69, 0x71, 0x82, 0x92, 0x97, - 0x9b, 0xa1, 0xa8, 0xa6, 0xa3, 0xa3, 0xa4, 0x9c, 0x90, 0x86, 0x7d, - 0x70, 0x62, 0x5a, 0x5b, 0x5b, 0x58, 0x57, 0x5d, 0x64, 0x68, 0x6e, - 0x7c, 0x8b, 0x95, 0x9a, 0x9f, 0xa5, 0xa7, 0xa5, 0xa3, 0xa3, 0x9f, - 0x95, 0x8b, 0x81, 0x75, 0x67, 0x5c, 0x5a, 0x5b, 0x59, 0x58, 0x5b, - 0x64, 0x68, 0x6b, 0x77, 0x89, 0x94, 0x98, 0x9d, 0xa4, 0xa7, 0xa4, - 0xa3, 0xa3, 0xa1, 0x97, 0x8c, 0x83, 0x79, 0x6b, 0x60, 0x5a, 0x5b, - 0x59, 0x58, 0x5a, 0x61, 0x66, 0x69, 0x72, 0x81, 0x8f, 0x96, 0x9a, - 0xa1, 0xa7, 0xa5, 0xa3, 0xa3, 0xa3, 0x9c, 0x90, 0x87, 0x7e, 0x71, - 0x64, 0x5b, 0x5b, 0x5b, 0x58, 0x58, 0x5e, 0x66, 0x69, 0x6e, 0x7b, - 0x8b, 0x94, 0x98, 0x9d, 0xa5, 0xa7, 0xa3, 0xa2, 0xa3, 0xa0, 0x95, - 0x8c, 0x85, 0x7b, 0x6d, 0x62, 0x5c, 0x5c, 0x5b, 0x59, 0x5a, 0x61, - 0x66, 0x69, 0x6f, 0x7d, 0x8b, 0x93, 0x98, 0x9e, 0xa4, 0xa5, 0xa3, - 0xa2, 0xa3, 0x9e, 0x94, 0x8b, 0x82, 0x77, 0x6a, 0x5f, 0x5b, 0x5c, - 0x5a, 0x5a, 0x5c, 0x63, 0x67, 0x6a, 0x74, 0x82, 0x8e, 0x95, 0x99, - 0xa0, 0xa5, 0xa4, 0xa2, 0xa2, 0xa2, 0x9b, 0x91, 0x88, 0x81, 0x76, - 0x6a, 0x60, 0x5b, 0x5c, 0x5b, 0x5a, 0x5c, 0x64, 0x69, 0x6b, 0x72, - 0x81, 0x8e, 0x94, 0x98, 0x9f, 0xa5, 0xa3, 0xa1, 0xa2, 0xa2, 0x9c, - 0x91, 0x89, 0x81, 0x75, 0x69, 0x60, 0x5b, 0x5c, 0x5b, 0x5a, 0x5c, - 0x64, 0x69, 0x6b, 0x73, 0x80, 0x8d, 0x93, 0x97, 0x9e, 0xa4, 0xa3, - 0xa1, 0xa1, 0xa2, 0x9d, 0x92, 0x8b, 0x84, 0x7a, 0x6e, 0x65, 0x5e, - 0x5c, 0x5d, 0x5c, 0x5d, 0x60, 0x67, 0x6a, 0x6e, 0x78, 0x85, 0x90, - 0x96, 0x9a, 0xa0, 0xa4, 0xa3, 0xa1, 0xa1, 0xa1, 0x99, 0x8f, 0x86, - 0x7e, 0x74, 0x6a, 0x61, 0x5f, 0x60, 0x61, 0x61, 0x63, 0x69, 0x6d, - 0x70, 0x76, 0x80, 0x8a, 0x90, 0x93, 0x98, 0x9d, 0x9e, 0x9c, 0x9c, - 0x9b, 0x97, 0x90, 0x89, 0x83, 0x7c, 0x74, 0x6c, 0x64, 0x62, 0x63, - 0x63, 0x63, 0x65, 0x6a, 0x6e, 0x70, 0x76, 0x81, 0x8b, 0x91, 0x94, - 0x98, 0x9d, 0x9d, 0x9b, 0x9a, 0x9a, 0x97, 0x8e, 0x87, 0x81, 0x7a, - 0x72, 0x69, 0x63, 0x64, 0x64, 0x63, 0x62, 0x65, 0x6c, 0x6f, 0x72, - 0x78, 0x83, 0x8c, 0x90, 0x93, 0x99, 0x9d, 0x9d, 0x9b, 0x9b, 0x9a, - 0x96, 0x8e, 0x89, 0x83, 0x7c, 0x73, 0x6c, 0x65, 0x63, 0x65, 0x64, - 0x63, 0x64, 0x6a, 0x6d, 0x70, 0x75, 0x80, 0x8b, 0x90, 0x92, 0x96, - 0x9c, 0x9e, 0x9c, 0x9a, 0x9a, 0x98, 0x90, 0x88, 0x82, 0x7d, 0x76, - 0x6d, 0x65, 0x62, 0x64, 0x66, 0x64, 0x63, 0x68, 0x6d, 0x6f, 0x72, - 0x7c, 0x88, 0x8f, 0x94, 0x9c, 0x9f, 0xa1, 0x9b, 0x95, 0x94, 0x96, - 0x92, 0x8c, 0x85, 0x7e, 0x71, 0x60, 0x56, 0x4e, 0x5d, 0x71, 0x7d, - 0x76, 0x79, 0x7a, 0x74, 0x6d, 0x75, 0x8d, 0x9f, 0xa3, 0xa4, 0xa7, - 0xa0, 0x8e, 0x81, 0x84, 0x82, 0x80, 0x7e, 0x84, 0x78, 0x67, 0x59, - 0x58, 0x50, 0x63, 0x80, 0x8c, 0x86, 0x7b, 0x7e, 0x77, 0x72, 0x7c, - 0x96, 0xa2, 0xa5, 0xa3, 0xa4, 0x92, 0x80, 0x7a, 0x81, 0x7f, 0x80, - 0x85, 0x86, 0x78, 0x63, 0x5b, 0x59, 0x4e, 0x54, 0x7f, 0x96, 0x8e, - 0x7c, 0x82, 0x7a, 0x6a, 0x75, 0x99, 0xaa, 0xa7, 0xa4, 0xa7, 0x94, - 0x7b, 0x79, 0x87, 0x86, 0x7d, 0x84, 0x89, 0x79, 0x62, 0x60, 0x5f, - 0x55, 0x46, 0x6f, 0x97, 0x94, 0x80, 0x7e, 0x7e, 0x66, 0x68, 0x8b, - 0xaa, 0xa7, 0xa8, 0xa8, 0x9a, 0x7d, 0x7a, 0x87, 0x8a, 0x82, 0x89, - 0x8d, 0x7e, 0x6d, 0x6a, 0x68, 0x59, 0x53, 0x4d, 0x6f, 0x91, 0x96, - 0x8a, 0x7c, 0x72, 0x65, 0x6b, 0x89, 0xa5, 0xac, 0xac, 0xa2, 0x93, - 0x7e, 0x7b, 0x86, 0x8c, 0x8b, 0x8c, 0x8c, 0x7c, 0x6e, 0x6d, 0x6c, - 0x5f, 0x5c, 0x51, 0x55, 0x81, 0x9c, 0x8f, 0x78, 0x75, 0x70, 0x63, - 0x72, 0x99, 0xab, 0xa7, 0xa2, 0x9c, 0x89, 0x7a, 0x84, 0x91, 0x8d, - 0x8a, 0x8d, 0x88, 0x74, 0x6f, 0x76, 0x71, 0x61, 0x5b, 0x50, 0x54, - 0x81, 0x9b, 0x94, 0x78, 0x71, 0x6c, 0x62, 0x70, 0x94, 0xab, 0xab, - 0xa3, 0x99, 0x8b, 0x7c, 0x7f, 0x8a, 0x92, 0x90, 0x91, 0x8b, 0x7d, - 0x6f, 0x72, 0x71, 0x68, 0x5c, 0x56, 0x4b, 0x61, 0x92, 0x9b, 0x86, - 0x71, 0x6e, 0x62, 0x60, 0x7b, 0xa3, 0xad, 0xa8, 0xa2, 0x97, 0x83, - 0x79, 0x87, 0x98, 0x95, 0x8f, 0x94, 0x8a, 0x7a, 0x6f, 0x79, 0x78, - 0x6d, 0x5c, 0x56, 0x4c, 0x4e, 0x84, 0xa7, 0x96, 0x6b, 0x65, 0x66, - 0x5c, 0x6a, 0x99, 0xb7, 0xb0, 0xa0, 0x9a, 0x8c, 0x79, 0x7f, 0x92, - 0x9b, 0x93, 0x94, 0x95, 0x86, 0x72, 0x71, 0x7a, 0x77, 0x67, 0x5e, - 0x5b, 0x4b, 0x53, 0x89, 0xa1, 0x84, 0x68, 0x69, 0x67, 0x5a, 0x6e, - 0x9d, 0xb3, 0xa6, 0x9d, 0x9c, 0x8c, 0x79, 0x82, 0x97, 0x9b, 0x97, - 0x98, 0x97, 0x83, 0x71, 0x74, 0x7e, 0x7e, 0x70, 0x64, 0x57, 0x4c, - 0x47, 0x6d, 0x99, 0x97, 0x77, 0x60, 0x5f, 0x5a, 0x64, 0x89, 0xaf, - 0xb3, 0xa4, 0x9b, 0x92, 0x80, 0x7c, 0x8e, 0xa0, 0x9e, 0x97, 0x97, - 0x90, 0x7d, 0x74, 0x7e, 0x85, 0x7f, 0x73, 0x67, 0x5a, 0x4d, 0x48, - 0x5b, 0x87, 0x99, 0x82, 0x65, 0x5a, 0x5d, 0x60, 0x76, 0x99, 0xb1, - 0xae, 0x9f, 0x95, 0x8b, 0x80, 0x84, 0x95, 0xa2, 0xa2, 0x9b, 0x94, - 0x86, 0x7c, 0x79, 0x82, 0x83, 0x7e, 0x74, 0x66, 0x58, 0x4d, 0x4f, - 0x53, 0x79, 0x96, 0x8a, 0x6d, 0x59, 0x5b, 0x60, 0x71, 0x91, 0xb2, - 0xb5, 0xa5, 0x92, 0x8b, 0x83, 0x80, 0x8e, 0xa3, 0xa9, 0x9b, 0x8f, - 0x8b, 0x85, 0x7d, 0x7d, 0x84, 0x83, 0x75, 0x6d, 0x66, 0x5a, 0x4c, - 0x50, 0x5b, 0x78, 0x90, 0x82, 0x68, 0x58, 0x5e, 0x67, 0x78, 0x95, - 0xb3, 0xb1, 0x9e, 0x8f, 0x8a, 0x86, 0x85, 0x92, 0x9d, 0xa0, 0x9a, - 0x92, 0x8a, 0x85, 0x81, 0x82, 0x83, 0x81, 0x77, 0x71, 0x6d, 0x63, - 0x56, 0x50, 0x56, 0x5f, 0x7c, 0x8a, 0x7c, 0x63, 0x5c, 0x65, 0x71, - 0x84, 0x9f, 0xb0, 0xa8, 0x98, 0x8d, 0x88, 0x85, 0x8c, 0x97, 0x9b, - 0x97, 0x93, 0x93, 0x8b, 0x82, 0x82, 0x86, 0x84, 0x7d, 0x77, 0x74, - 0x74, 0x6b, 0x62, 0x59, 0x59, 0x55, 0x5f, 0x7e, 0x88, 0x7a, 0x65, - 0x67, 0x6f, 0x77, 0x86, 0x9f, 0xac, 0xa2, 0x92, 0x8a, 0x8a, 0x88, - 0x8b, 0x93, 0x98, 0x97, 0x92, 0x90, 0x8b, 0x85, 0x83, 0x83, 0x84, - 0x7f, 0x78, 0x72, 0x72, 0x6e, 0x62, 0x57, 0x52, 0x55, 0x66, 0x80, - 0x8a, 0x7b, 0x67, 0x64, 0x6b, 0x7a, 0x8d, 0xa0, 0xaa, 0xa0, 0x90, - 0x86, 0x85, 0x87, 0x8e, 0x96, 0x99, 0x93, 0x8d, 0x8b, 0x88, 0x87, - 0x85, 0x88, 0x89, 0x84, 0x78, 0x72, 0x72, 0x71, 0x70, 0x69, 0x61, - 0x56, 0x4f, 0x5b, 0x7c, 0x8c, 0x81, 0x6e, 0x68, 0x71, 0x78, 0x84, - 0x96, 0xa4, 0xa1, 0x94, 0x89, 0x88, 0x8a, 0x8b, 0x90, 0x95, 0x95, - 0x8f, 0x8a, 0x89, 0x87, 0x87, 0x88, 0x89, 0x85, 0x7b, 0x73, 0x71, - 0x73, 0x73, 0x71, 0x65, 0x5b, 0x4e, 0x50, 0x6e, 0x8b, 0x8d, 0x77, - 0x68, 0x6b, 0x72, 0x7b, 0x8d, 0x9e, 0xa4, 0x9b, 0x8f, 0x8a, 0x89, - 0x88, 0x89, 0x91, 0x97, 0x95, 0x8e, 0x86, 0x85, 0x88, 0x87, 0x86, - 0x86, 0x82, 0x7a, 0x73, 0x71, 0x74, 0x74, 0x71, 0x6c, 0x67, 0x58, - 0x47, 0x55, 0x84, 0x9c, 0x89, 0x6c, 0x6a, 0x74, 0x74, 0x7e, 0x95, - 0xa9, 0xa5, 0x93, 0x89, 0x89, 0x89, 0x86, 0x8a, 0x94, 0x98, 0x91, - 0x88, 0x82, 0x82, 0x84, 0x85, 0x86, 0x84, 0x7d, 0x76, 0x73, 0x71, - 0x73, 0x74, 0x75, 0x70, 0x6b, 0x5e, 0x56, 0x49, 0x6e, 0xa5, 0xa1, - 0x7f, 0x5e, 0x6e, 0x7c, 0x7d, 0x89, 0xa2, 0xb0, 0x9f, 0x86, 0x80, - 0x86, 0x88, 0x88, 0x8c, 0x98, 0x95, 0x87, 0x7e, 0x7e, 0x83, 0x81, - 0x7f, 0x82, 0x80, 0x76, 0x6d, 0x6f, 0x75, 0x76, 0x70, 0x6f, 0x6f, - 0x6b, 0x62, 0x63, 0x70, 0x85, 0x90, 0x86, 0x7a, 0x78, 0x7e, 0x83, - 0x89, 0x98, 0xa5, 0xa2, 0x94, 0x89, 0x8a, 0x8c, 0x8a, 0x8d, 0x94, - 0x94, 0x8a, 0x81, 0x82, 0x81, 0x7f, 0x7a, 0x78, 0x75, 0x72, 0x6f, - 0x6d, 0x6b, 0x68, 0x62, 0x5a, 0x53, 0x58, 0x8b, 0xa4, 0x8b, 0x66, - 0x5d, 0x77, 0x83, 0x8b, 0x9b, 0xab, 0xa6, 0x90, 0x81, 0x84, 0x8c, - 0x8f, 0x8f, 0x92, 0x92, 0x8d, 0x84, 0x80, 0x81, 0x85, 0x86, 0x82, - 0x7e, 0x79, 0x75, 0x75, 0x76, 0x77, 0x76, 0x75, 0x74, 0x6e, 0x6f, - 0x6d, 0x6f, 0x78, 0x7d, 0x7f, 0x7e, 0x7f, 0x80, 0x80, 0x82, 0x86, - 0x8a, 0x8b, 0x8a, 0x88, 0x88, 0x88, 0x88, 0x88, 0x89, 0x88, 0x84, - 0x80, 0x7e, 0x80, 0x80, 0x7d, 0x79, 0x77, 0x74, 0x74, 0x74, 0x74, - 0x71, 0x70, 0x71, 0x74, 0x75, 0x76, 0x78, 0x7a, 0x7f, 0x82, 0x86, - 0x89, 0x89, 0x88, 0x89, 0x8d, 0x8f, 0x91, 0x91, 0x90, 0x8f, 0x8b, - 0x88, 0x87, 0x86, 0x86, 0x84, 0x81, 0x7f, 0x7d, 0x78, 0x74, 0x74, - 0x75, 0x75, 0x70, 0x6d, 0x6b, 0x6a, 0x6b, 0x6e, 0x6f, 0x7f, 0x90, - 0x8a, 0x7a, 0x6e, 0x79, 0x85, 0x8c, 0x92, 0x97, 0x98, 0x8e, 0x84, - 0x81, 0x85, 0x8a, 0x8b, 0x8b, 0x8c, 0x8a, 0x85, 0x7e, 0x7e, 0x82, - 0x84, 0x82, 0x80, 0x7e, 0x7c, 0x78, 0x75, 0x78, 0x7b, 0x7b, 0x78, - 0x76, 0x75, 0x74, 0x75, 0x77, 0x7b, 0x7e, 0x7e, 0x7f, 0x80, 0x80, - 0x80, 0x82, 0x84, 0x84, 0x84, 0x85, 0x86, 0x85, 0x83, 0x82, 0x82, - 0x82, 0x81, 0x81, 0x80, 0x7e, 0x7d, 0x7b, 0x7a, 0x7a, 0x7a, 0x7b, - 0x7b, 0x7a, 0x79, 0x78, 0x7a, 0x7d, 0x7e, 0x7e, 0x7d, 0x81, 0x82, - 0x81, 0x82, 0x83, 0x85, 0x84, 0x84, 0x85, 0x86, 0x86, 0x85, 0x84, - 0x84, 0x84, 0x84, 0x81, 0x80, 0x81, 0x80, 0x7e, 0x7d, 0x7d, 0x7d, - 0x7c, 0x7b, 0x7a, 0x7a, 0x7a, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7d, - 0x7e, 0x7e, 0x7e, 0x7f, 0x81, 0x82, 0x82, 0x83, 0x84, 0x83, 0x83, - 0x83, 0x84, 0x85, 0x84, 0x83, 0x83, 0x82, 0x81, 0x80, 0x80, 0x80, - 0x7f, 0x7e, 0x7d, 0x7d, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7d, 0x7c, - 0x7c, 0x7d, 0x7e, 0x7e, 0x7d, 0x7e, 0x80, 0x81, 0x80, 0x81, 0x82, - 0x83, 0x82, 0x81, 0x82, 0x83, 0x83, 0x82, 0x81, 0x81, 0x81, 0x80, - 0x7f, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7d, 0x7d, 0x7c, 0x7c, 0x7d, - 0x7d, 0x7d, 0x7d, 0x7e, 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x81, - 0x81, 0x82, 0x82, 0x81, 0x81, 0x82, 0x82, 0x82, 0x82, 0x82, 0x81, - 0x81, 0x81, 0x80, 0x7f, 0x7e, 0x7e, 0x7f, 0x7f, 0x7e, 0x7d, 0x7d, - 0x7d, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7f, 0x7f, 0x7f, - 0x7f, 0x80, 0x81, 0x81, 0x81, 0x80, 0x80, 0x81, 0x82, 0x81, 0x81, - 0x81, 0x81, 0x81, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, - 0x7f, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, - }, - { // 8 - 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x7f, 0x7e, 0x7e, 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x80, 0x80, 0x7f, 0x7e, 0x7f, 0x81, 0x81, 0x80, 0x7f, 0x7f, - 0x7e, 0x7f, 0x80, 0x81, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7e, 0x7f, 0x80, 0x81, 0x7f, 0x7e, 0x7f, 0x80, - 0x7f, 0x7e, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x81, 0x80, 0x7e, 0x7e, - 0x7f, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x7e, - 0x7e, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x7e, 0x7e, 0x80, 0x81, - 0x80, 0x7e, 0x7f, 0x81, 0x80, 0x7e, 0x7f, 0x80, 0x80, 0x7f, 0x7f, - 0x80, 0x81, 0x80, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x7f, 0x7f, 0x80, 0x81, 0x80, 0x80, 0x7e, 0x7f, 0x81, 0x7f, - 0x7f, 0x7f, 0x80, 0x7f, 0x7e, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x80, - 0x7f, 0x7f, 0x81, 0x80, 0x7d, 0x7f, 0x82, 0x81, 0x7d, 0x7e, 0x82, - 0x81, 0x7f, 0x7f, 0x80, 0x7f, 0x7e, 0x7f, 0x80, 0x80, 0x7f, 0x81, - 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7d, 0x7f, 0x80, 0x81, 0x82, 0x82, - 0x7f, 0x7d, 0x7d, 0x7f, 0x80, 0x7f, 0x80, 0x81, 0x82, 0x7f, 0x7d, - 0x7f, 0x81, 0x80, 0x7e, 0x7f, 0x81, 0x7d, 0x7d, 0x80, 0x84, 0x80, - 0x7b, 0x7c, 0x7f, 0x83, 0x80, 0x7e, 0x7f, 0x81, 0x81, 0x7e, 0x82, - 0x83, 0x81, 0x7c, 0x79, 0x81, 0x83, 0x86, 0x81, 0x7d, 0x7c, 0x7b, - 0x83, 0x81, 0x80, 0x7e, 0x7e, 0x81, 0x7e, 0x7f, 0x84, 0x86, 0x7e, - 0x76, 0x79, 0x82, 0x8d, 0x84, 0x7b, 0x7d, 0x80, 0x85, 0x7c, 0x7c, - 0x85, 0x80, 0x75, 0x77, 0x82, 0x8d, 0x88, 0x7a, 0x74, 0x7b, 0x83, - 0x78, 0x7f, 0x87, 0x82, 0x7d, 0x7a, 0x84, 0x81, 0x7d, 0x82, 0x81, - 0x7e, 0x78, 0x7d, 0x87, 0x89, 0x80, 0x7b, 0x80, 0x84, 0x7c, 0x77, - 0x82, 0x87, 0x86, 0x7e, 0x7d, 0x81, 0x80, 0x7f, 0x7f, 0x82, 0x80, - 0x81, 0x7e, 0x7f, 0x7e, 0x78, 0x7d, 0x85, 0x8d, 0x80, 0x75, 0x79, - 0x80, 0x7e, 0x80, 0x8e, 0x8e, 0x7c, 0x6f, 0x75, 0x80, 0x8c, 0x8f, - 0x84, 0x7a, 0x6f, 0x73, 0x7c, 0x86, 0x85, 0x80, 0x83, 0x7d, 0x74, - 0x71, 0x86, 0x8b, 0x81, 0x7c, 0x7e, 0x7e, 0x7d, 0x81, 0x82, 0x89, - 0x87, 0x82, 0x7a, 0x76, 0x81, 0x86, 0x8a, 0x83, 0x7b, 0x87, 0x82, - 0x7c, 0x78, 0x80, 0x87, 0x82, 0x7d, 0x76, 0x82, 0x84, 0x7b, 0x73, - 0x78, 0x82, 0x78, 0x7b, 0x88, 0x7e, 0x73, 0x7b, 0x85, 0x85, 0x78, - 0x74, 0x87, 0x8b, 0x7f, 0x81, 0x8b, 0x8d, 0x7e, 0x79, 0x88, 0x8d, - 0x85, 0x7d, 0x7a, 0x83, 0x84, 0x7d, 0x84, 0x88, 0x81, 0x68, 0x67, - 0x71, 0x75, 0x85, 0x86, 0x88, 0x78, 0x67, 0x6f, 0x72, 0x7d, 0x7f, - 0x80, 0x8d, 0x84, 0x80, 0x81, 0x87, 0x8f, 0x88, 0x8d, 0x8e, 0x89, - 0x86, 0x86, 0x8b, 0x88, 0x86, 0x84, 0x84, 0x7c, 0x73, 0x76, 0x76, - 0x77, 0x72, 0x71, 0x71, 0x6d, 0x6d, 0x6e, 0x6d, 0x72, 0x7b, 0x7b, - 0x78, 0x72, 0x7a, 0x8a, 0x91, 0x99, 0x9d, 0x9a, 0x91, 0x87, 0x86, - 0x91, 0x9a, 0x9b, 0x9a, 0x90, 0x82, 0x75, 0x6e, 0x73, 0x78, 0x78, - 0x79, 0x78, 0x72, 0x64, 0x5b, 0x61, 0x63, 0x67, 0x61, 0x64, 0x7e, - 0x85, 0x7c, 0x79, 0x82, 0x8a, 0x86, 0x8c, 0x9e, 0xa4, 0x9e, 0x99, - 0x9d, 0x9d, 0x95, 0x96, 0x95, 0x90, 0x87, 0x7f, 0x7c, 0x77, 0x76, - 0x7a, 0x7d, 0x79, 0x73, 0x69, 0x5b, 0x51, 0x4a, 0x54, 0x5b, 0x55, - 0x7c, 0x9f, 0x8f, 0x7a, 0x67, 0x71, 0x77, 0x7e, 0xa3, 0xb8, 0xbd, - 0xac, 0x9d, 0x96, 0x89, 0x8c, 0x92, 0x9b, 0x97, 0x8e, 0x88, 0x79, - 0x73, 0x75, 0x7e, 0x81, 0x78, 0x6f, 0x64, 0x54, 0x4a, 0x49, 0x54, - 0x54, 0x59, 0x86, 0x9e, 0x8e, 0x73, 0x6b, 0x72, 0x6e, 0x83, 0xab, - 0xc0, 0xc0, 0xac, 0xa1, 0x91, 0x81, 0x86, 0x94, 0x9f, 0x98, 0x90, - 0x8c, 0x7c, 0x71, 0x74, 0x81, 0x83, 0x76, 0x6e, 0x63, 0x55, 0x40, - 0x3f, 0x53, 0x53, 0x58, 0x86, 0xa3, 0x8d, 0x74, 0x6f, 0x71, 0x6f, - 0x80, 0xac, 0xc4, 0xbe, 0xb1, 0xa8, 0x9a, 0x83, 0x7e, 0x8f, 0x98, - 0x96, 0x96, 0x94, 0x85, 0x74, 0x72, 0x7a, 0x7d, 0x76, 0x70, 0x6d, - 0x5f, 0x48, 0x3f, 0x4b, 0x4f, 0x4a, 0x6f, 0x94, 0x95, 0x81, 0x74, - 0x7c, 0x77, 0x79, 0x94, 0xb1, 0xba, 0xb3, 0xb0, 0xa9, 0x94, 0x85, - 0x88, 0x8f, 0x8c, 0x8d, 0x92, 0x8e, 0x7d, 0x75, 0x78, 0x7a, 0x79, - 0x73, 0x71, 0x66, 0x55, 0x47, 0x46, 0x4e, 0x48, 0x55, 0x7e, 0x8f, - 0x8a, 0x7d, 0x81, 0x82, 0x78, 0x85, 0x9e, 0xac, 0xaa, 0xa7, 0xad, - 0xa5, 0x95, 0x8a, 0x8d, 0x8d, 0x86, 0x86, 0x8a, 0x87, 0x7b, 0x79, - 0x7d, 0x7e, 0x75, 0x71, 0x73, 0x6a, 0x5d, 0x58, 0x5e, 0x5e, 0x5a, - 0x61, 0x71, 0x79, 0x76, 0x76, 0x79, 0x7d, 0x80, 0x85, 0x8e, 0x95, - 0x98, 0x96, 0x97, 0x96, 0x93, 0x90, 0x8f, 0x8e, 0x8a, 0x88, 0x86, - 0x86, 0x86, 0x86, 0x88, 0x89, 0x87, 0x84, 0x83, 0x81, 0x7e, 0x7c, - 0x7a, 0x79, 0x78, 0x77, 0x77, 0x76, 0x75, 0x75, 0x75, 0x76, 0x76, - 0x76, 0x77, 0x77, 0x78, 0x7a, 0x7d, 0x7e, 0x7f, 0x82, 0x83, 0x84, - 0x85, 0x86, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x86, 0x86, 0x85, - 0x84, 0x82, 0x80, 0x7f, 0x7d, 0x7b, 0x7a, 0x7a, 0x7a, 0x79, 0x7a, - 0x7a, 0x7a, 0x7a, 0x7a, 0x7b, 0x7c, 0x7c, 0x7d, 0x7e, 0x7e, 0x7f, - 0x7f, 0x80, 0x81, 0x82, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, - 0x83, 0x83, 0x83, 0x82, 0x82, 0x81, 0x81, 0x80, 0x7f, 0x7e, 0x7e, - 0x7e, 0x7d, 0x7d, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7d, - 0x7d, 0x7e, 0x7e, 0x7f, 0x7f, 0x80, 0x81, 0x82, 0x82, 0x83, 0x83, - 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x82, 0x82, 0x81, 0x80, 0x80, - 0x80, 0x80, 0x7f, 0x7e, 0x7e, 0x7e, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, - 0x7d, 0x7d, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7f, 0x7f, 0x7f, 0x80, - 0x80, 0x80, 0x80, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7e, 0x7e, 0x7e, 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, - 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x7e, 0x80, 0x80, 0x80, - 0x7f, 0x7f, 0x80, 0x7f, 0x7e, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x80, - 0x7f, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, - 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, - 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, - 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, - 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x82, 0x84, 0x87, 0x7f, 0x75, - 0x87, 0x89, 0x7c, 0x7e, 0x7e, 0x7c, 0x7d, 0x7e, 0x7f, 0x7d, 0x7d, - 0x7e, 0x7c, 0x7c, 0x81, 0x82, 0x7f, 0x80, 0x81, 0x82, 0x82, 0x81, - 0x80, 0x7e, 0x7f, 0x81, 0x7e, 0x7d, 0x7d, 0x7e, 0x7e, 0x7d, 0x81, - 0x7f, 0x7e, 0x81, 0x7f, 0x80, 0x80, 0x81, 0x81, 0x7f, 0x82, 0x80, - 0x7e, 0x7f, 0x83, 0x7f, 0x81, 0x7f, 0x7f, 0x7e, 0x7f, 0x81, 0x80, - 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7d, 0x83, 0x80, 0x82, 0x80, 0x81, - 0x80, 0x7f, 0x7f, 0x80, 0x82, 0x7f, 0x81, 0x7e, 0x80, 0x7e, 0x80, - 0x7e, 0x80, 0x80, 0x81, 0x7e, 0x81, 0x80, 0x80, 0x81, 0x7d, 0x7f, - 0x7f, 0x80, 0x80, 0x82, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x81, 0x81, - 0x7f, 0x7d, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x81, 0x80, - 0x81, 0x7f, 0x81, 0x7f, 0x7f, 0x80, 0x7e, 0x7f, 0x7e, 0x7e, 0x81, - 0x7d, 0x80, 0x7f, 0x7f, 0x81, 0x7e, 0x81, 0x7f, 0x7d, 0x81, 0x7e, - 0x81, 0x81, 0x7e, 0x81, 0x7e, 0x81, 0x7f, 0x83, 0x7f, 0x81, 0x80, - 0x7f, 0x81, 0x7e, 0x80, 0x80, 0x80, 0x82, 0x7d, 0x7e, 0x80, 0x7d, - 0x81, 0x7f, 0x81, 0x80, 0x7f, 0x7f, 0x7f, 0x7e, 0x81, 0x80, 0x80, - 0x7f, 0x7f, 0x81, 0x7e, 0x7f, 0x80, 0x80, 0x81, 0x80, 0x7d, 0x80, - 0x7e, 0x80, 0x7f, 0x80, 0x82, 0x80, 0x81, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7e, 0x80, 0x7f, 0x7f, 0x80, 0x7d, 0x82, 0x7f, 0x7f, 0x82, 0x7d, - 0x7e, 0x81, 0x81, 0x80, 0x7f, 0x7e, 0x81, 0x7e, 0x80, 0x80, 0x7f, - 0x82, 0x7f, 0x7f, 0x80, 0x81, 0x80, 0x7f, 0x81, 0x7b, 0x80, 0x82, - 0x85, 0x8d, 0x82, 0x7a, 0x78, 0x7c, 0x7d, 0x84, 0x80, 0x7e, 0x7e, - 0x79, 0x7a, 0x7d, 0x7f, 0x7f, 0x7e, 0x83, 0x80, 0x80, 0x84, 0x82, - 0x80, 0x7f, 0x85, 0x7e, 0x80, 0x7d, 0x7c, 0x7d, 0x7e, 0x80, 0x7c, - 0x80, 0x82, 0x80, 0x7f, 0x80, 0x7e, 0x7d, 0x84, 0x80, 0x80, 0x84, - 0x7f, 0x7f, 0x7e, 0x83, 0x81, 0x81, 0x81, 0x7f, 0x7f, 0x7c, 0x81, - 0x80, 0x7e, 0x83, 0x7f, 0x7f, 0x81, 0x7e, 0x82, 0x7f, 0x80, 0x7f, - 0x81, 0x81, 0x7f, 0x80, 0x80, 0x80, 0x7f, 0x7e, 0x7d, 0x81, 0x7d, - 0x80, 0x80, 0x7b, 0x7e, 0x83, 0x80, 0x7d, 0x80, 0x80, 0x7e, 0x7e, - 0x80, 0x81, 0x81, 0x80, 0x80, 0x7e, 0x80, 0x7f, 0x81, 0x7e, 0x7d, - 0x82, 0x82, 0x7e, 0x81, 0x81, 0x7d, 0x81, 0x83, 0x7d, 0x81, 0x82, - 0x7b, 0x7e, 0x82, 0x81, 0x80, 0x80, 0x81, 0x7e, 0x7f, 0x83, 0x7b, - 0x82, 0x7e, 0x7e, 0x81, 0x7e, 0x81, 0x7f, 0x81, 0x7d, 0x7d, 0x7f, - 0x7e, 0x80, 0x7f, 0x82, 0x7c, 0x7f, 0x83, 0x7d, 0x7f, 0x7c, 0x7f, - 0x7d, 0x81, 0x7e, 0x80, 0x80, 0x7f, 0x7d, 0x81, 0x7f, 0x81, 0x81, - 0x7d, 0x86, 0x7a, 0x7f, 0x82, 0x83, 0x81, 0x7f, 0x7d, 0x7e, 0x7d, - 0x83, 0x80, 0x7f, 0x80, 0x7d, 0x82, 0x7f, 0x82, 0x7c, 0x82, 0x82, - 0x81, 0x83, 0x82, 0x7e, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x82, 0x7e, - 0x82, 0x7e, 0x83, 0x80, 0x7f, 0x84, 0x7e, 0x83, 0x83, 0x7d, 0x83, - 0x81, 0x82, 0x7d, 0x81, 0x84, 0x80, 0x82, 0x7a, 0x85, 0x7a, 0x81, - 0x81, 0x7c, 0x82, 0x7b, 0x83, 0x7f, 0x84, 0x81, 0x7e, 0x7d, 0x81, - 0x7f, 0x80, 0x83, 0x78, 0x82, 0x84, 0x7e, 0x82, 0x7f, 0x7c, 0x7f, - 0x83, 0x7b, 0x81, 0x87, 0x7a, 0x80, 0x7e, 0x80, 0x7e, 0x80, 0x81, - 0x7f, 0x7f, 0x83, 0x80, 0x7e, 0x84, 0x79, 0x80, 0x82, 0x7d, 0x85, - 0x85, 0x7d, 0x7e, 0x82, 0x80, 0x7c, 0x83, 0x7c, 0x7a, 0x82, 0x7e, - 0x7e, 0x7f, 0x82, 0x7d, 0x7b, 0x83, 0x7c, 0x81, 0x7b, 0x80, 0x84, - 0x7f, 0x83, 0x7e, 0x83, 0x7c, 0x7f, 0x82, 0x7e, 0x80, 0x81, 0x7a, - 0x83, 0x7e, 0x7f, 0x81, 0x7e, 0x81, 0x7a, 0x81, 0x7b, 0x7c, 0x81, - 0x81, 0x82, 0x7d, 0x80, 0x7f, 0x7f, 0x85, 0x7e, 0x82, 0x7f, 0x81, - 0x7f, 0x82, 0x80, 0x81, 0x80, 0x7e, 0x80, 0x7d, 0x80, 0x7b, 0x84, - 0x7c, 0x80, 0x7f, 0x7e, 0x7e, 0x7d, 0x7e, 0x80, 0x7e, 0x7f, 0x7f, - 0x7f, 0x85, 0x81, 0x82, 0x7d, 0x85, 0x7a, 0x85, 0x83, 0x7e, 0x82, - 0x7c, 0x81, 0x7b, 0x83, 0x7e, 0x7d, 0x83, 0x79, 0x7f, 0x83, 0x7d, - 0x7f, 0x82, 0x7d, 0x80, 0x84, 0x79, 0x82, 0x7e, 0x7d, 0x83, 0x80, - 0x80, 0x7f, 0x82, 0x80, 0x80, 0x80, 0x82, 0x7e, 0x7b, 0x84, 0x81, - 0x7c, 0x80, 0x7f, 0x7c, 0x7e, 0x81, 0x7a, 0x82, 0x7d, 0x7c, 0x84, - 0x7d, 0x7f, 0x84, 0x81, 0x82, 0x87, 0x7f, 0x7e, 0x87, 0x7f, 0x7c, - 0x8b, 0x7e, 0x7f, 0x84, 0x7a, 0x81, 0x7e, 0x7d, 0x80, 0x80, 0x78, - 0x7c, 0x82, 0x75, 0x82, 0x7b, 0x7b, 0x81, 0x7f, 0x81, 0x7f, 0x87, - 0x7c, 0x88, 0x82, 0x82, 0x8a, 0x81, 0x86, 0x83, 0x81, 0x7e, 0x86, - 0x7b, 0x7c, 0x81, 0x76, 0x7b, 0x7a, 0x76, 0x77, 0x78, 0x74, 0x76, - 0x7b, 0x79, 0x7d, 0x7d, 0x84, 0x82, 0x82, 0x8c, 0x87, 0x8a, 0x92, - 0x8d, 0x87, 0x90, 0x89, 0x83, 0x8e, 0x81, 0x7b, 0x86, 0x74, 0x78, - 0x77, 0x6c, 0x6c, 0x69, 0x6e, 0x61, 0x72, 0x6c, 0x6b, 0x7b, 0x74, - 0x83, 0x8a, 0x91, 0x97, 0xa0, 0x9f, 0x9f, 0xa6, 0x99, 0x9a, 0x9d, - 0x8b, 0x88, 0x84, 0x72, 0x71, 0x6b, 0x60, 0x60, 0x58, 0x55, 0x54, - 0x5b, 0x68, 0x68, 0x79, 0x7d, 0x82, 0x88, 0x92, 0x9c, 0xa0, 0xaa, - 0xa8, 0xac, 0xa6, 0xa3, 0x9d, 0x95, 0x89, 0x89, 0x79, 0x74, 0x74, - 0x64, 0x62, 0x5f, 0x5b, 0x52, 0x5e, 0x54, 0x69, 0x6d, 0x68, 0x80, - 0x78, 0x7f, 0x8b, 0x91, 0x97, 0xa1, 0xa7, 0xac, 0xa6, 0xa8, 0x9e, - 0x95, 0x8e, 0x84, 0x7f, 0x75, 0x73, 0x69, 0x67, 0x60, 0x5e, 0x59, - 0x5b, 0x55, 0x5b, 0x75, 0x62, 0x75, 0x7e, 0x74, 0x89, 0x87, 0x93, - 0x9e, 0xa8, 0xa3, 0xb3, 0xae, 0xa0, 0xa7, 0x92, 0x8b, 0x87, 0x7b, - 0x74, 0x77, 0x65, 0x67, 0x61, 0x58, 0x5b, 0x59, 0x50, 0x64, 0x6c, - 0x60, 0x80, 0x75, 0x76, 0x8b, 0x87, 0x97, 0xa4, 0xa5, 0xab, 0xb5, - 0xac, 0xa5, 0xaa, 0x90, 0x88, 0x84, 0x72, 0x73, 0x72, 0x65, 0x68, - 0x61, 0x5a, 0x59, 0x58, 0x55, 0x68, 0x6e, 0x64, 0x81, 0x70, 0x77, - 0x89, 0x85, 0x96, 0xa2, 0xa6, 0xa9, 0xb5, 0xad, 0xaa, 0xa7, 0x94, - 0x8a, 0x85, 0x73, 0x73, 0x72, 0x65, 0x68, 0x5f, 0x5c, 0x58, 0x51, - 0x57, 0x70, 0x68, 0x6d, 0x84, 0x6e, 0x7e, 0x87, 0x87, 0x98, 0xa1, - 0xa3, 0xaf, 0xb5, 0xa9, 0xaf, 0xa3, 0x91, 0x8f, 0x7f, 0x72, 0x74, - 0x6a, 0x67, 0x6a, 0x5e, 0x5e, 0x58, 0x4e, 0x65, 0x6e, 0x64, 0x7f, - 0x78, 0x74, 0x8a, 0x83, 0x8f, 0x9e, 0x9e, 0xa4, 0xaf, 0xa7, 0xa9, - 0xa6, 0x95, 0x92, 0x85, 0x78, 0x76, 0x6e, 0x67, 0x6b, 0x64, 0x61, - 0x62, 0x50, 0x57, 0x72, 0x62, 0x71, 0x82, 0x6e, 0x80, 0x84, 0x82, - 0x98, 0x9b, 0x9d, 0xac, 0xa7, 0xa7, 0xac, 0x9e, 0x97, 0x8f, 0x7e, - 0x79, 0x75, 0x69, 0x6b, 0x66, 0x63, 0x63, 0x5e, 0x4d, 0x62, 0x75, - 0x5c, 0x84, 0x7a, 0x70, 0x8c, 0x7c, 0x8c, 0x99, 0x97, 0xa1, 0xad, - 0xa0, 0xa7, 0xa8, 0x94, 0x96, 0x8a, 0x79, 0x7e, 0x6f, 0x69, 0x6f, - 0x60, 0x64, 0x64, 0x5d, 0x4a, 0x79, 0x67, 0x5f, 0x95, 0x63, 0x82, - 0x89, 0x77, 0x9a, 0x98, 0x97, 0xaa, 0xa9, 0x9d, 0xb1, 0x9c, 0x94, - 0x95, 0x7e, 0x7a, 0x7c, 0x64, 0x6f, 0x66, 0x5e, 0x66, 0x5f, 0x52, - 0x55, 0x84, 0x4f, 0x81, 0x85, 0x5f, 0x9a, 0x77, 0x87, 0xa0, 0x91, - 0xa1, 0xad, 0x9d, 0xa7, 0xaa, 0x93, 0x99, 0x8b, 0x79, 0x7f, 0x73, - 0x66, 0x75, 0x61, 0x64, 0x6c, 0x5b, 0x5c, 0x5b, 0x80, 0x59, 0x83, - 0x7f, 0x68, 0x97, 0x71, 0x90, 0x96, 0x91, 0xa2, 0xa4, 0x9c, 0xa5, - 0xa2, 0x92, 0x96, 0x85, 0x7c, 0x7c, 0x6f, 0x6a, 0x70, 0x5f, 0x65, - 0x65, 0x58, 0x58, 0x5e, 0x74, 0x5d, 0x82, 0x78, 0x72, 0x90, 0x78, - 0x96, 0x95, 0x9a, 0xa5, 0xa4, 0xa1, 0xa7, 0x9e, 0x96, 0x92, 0x80, - 0x81, 0x75, 0x6f, 0x6d, 0x6b, 0x69, 0x66, 0x6a, 0x5f, 0x68, 0x61, - 0x6f, 0x71, 0x6f, 0x7e, 0x75, 0x82, 0x81, 0x89, 0x90, 0x99, 0x99, - 0xa0, 0x9e, 0x9d, 0x9d, 0x94, 0x92, 0x86, 0x82, 0x78, 0x75, 0x70, - 0x70, 0x6d, 0x6d, 0x6d, 0x6b, 0x6e, 0x6d, 0x6f, 0x72, 0x73, 0x75, - 0x78, 0x7c, 0x7d, 0x83, 0x86, 0x8b, 0x91, 0x92, 0x98, 0x95, 0x98, - 0x95, 0x91, 0x90, 0x88, 0x83, 0x80, 0x79, 0x78, 0x78, 0x73, 0x73, - 0x73, 0x6c, 0x71, 0x6f, 0x6c, 0x73, 0x70, 0x73, 0x77, 0x79, 0x7b, - 0x83, 0x84, 0x89, 0x90, 0x8f, 0x94, 0x95, 0x90, 0x94, 0x90, 0x88, - 0x8b, 0x80, 0x81, 0x7e, 0x79, 0x7a, 0x78, 0x77, 0x77, 0x77, 0x76, - 0x79, 0x78, 0x77, 0x7a, 0x78, 0x78, 0x7a, 0x78, 0x7d, 0x7f, 0x83, - 0x88, 0x8d, 0x8c, 0x93, 0x91, 0x91, 0x91, 0x8c, 0x8a, 0x84, 0x7e, - 0x74, 0x70, 0x60, 0x5d, 0x4f, 0x66, 0x53, 0x60, 0x73, 0x5d, 0x85, - 0x7b, 0x8f, 0xa1, 0x9f, 0xaf, 0xb3, 0xac, 0xac, 0xa7, 0x94, 0x91, - 0x80, 0x72, 0x6f, 0x60, 0x5f, 0x5f, 0x5f, 0x65, 0x71, 0x76, 0x81, - 0x8e, 0x8e, 0x9b, 0x99, 0x9b, 0x99, 0x94, 0x8d, 0x89, 0x7f, 0x78, - 0x75, 0x6b, 0x6d, 0x69, 0x69, 0x6c, 0x6e, 0x72, 0x7b, 0x7b, 0x85, - 0x87, 0x88, 0x8f, 0x8b, 0x8f, 0x8c, 0x89, 0x86, 0x84, 0x7e, 0x7d, - 0x7a, 0x76, 0x77, 0x75, 0x76, 0x77, 0x77, 0x7a, 0x7c, 0x7d, 0x7f, - 0x81, 0x81, 0x83, 0x83, 0x83, 0x83, 0x82, 0x82, 0x81, 0x81, 0x7f, - 0x7f, 0x7e, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7e, 0x7e, 0x80, 0x80, - 0x80, 0x81, 0x81, 0x81, 0x82, 0x82, 0x81, 0x81, 0x81, 0x81, 0x81, - 0x81, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7e, 0x7f, 0x7e, - 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x81, 0x81, 0x81, 0x82, - 0x82, 0x82, 0x82, 0x82, 0x81, 0x81, 0x81, 0x80, 0x80, 0x7f, 0x7f, - 0x7f, 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, - 0x80, 0x81, 0x81, 0x81, 0x81, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7e, - 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7f, 0x7f, 0x80, - 0x80, 0x80, 0x80, 0x81, 0x81, 0x81, 0x81, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x80, 0x80, - }, - { // 9 - 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, - 0x7f, 0x80, 0x7e, 0x81, 0x7e, 0x81, 0x7e, 0x81, 0x7e, 0x82, 0x7d, - 0x87, 0x7f, 0x7e, 0x82, 0x79, 0x83, 0x7a, 0x83, 0x7d, 0x83, 0x74, - 0x91, 0x7d, 0x7f, 0x84, 0x76, 0x87, 0x77, 0x87, 0x7f, 0x83, 0x7c, - 0x81, 0x7d, 0x7f, 0x7d, 0x7f, 0x7c, 0x7c, 0x80, 0x7e, 0x81, 0x7f, - 0x81, 0x80, 0x82, 0x7f, 0x82, 0x7c, 0x81, 0x7e, 0x80, 0x7d, 0x80, - 0x7e, 0x7f, 0x7f, 0x7f, 0x81, 0x7d, 0x82, 0x7d, 0x82, 0x7f, 0x81, - 0x7f, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x7e, 0x7f, 0x7d, 0x81, - 0x7d, 0x81, 0x80, 0x7f, 0x80, 0x7e, 0x82, 0x82, 0x85, 0x81, 0x81, - 0x81, 0x81, 0x80, 0x7d, 0x81, 0x80, 0x7c, 0x7f, 0x7e, 0x7e, 0x81, - 0x7e, 0x81, 0x7e, 0x80, 0x80, 0x7f, 0x81, 0x7f, 0x82, 0x80, 0x80, - 0x80, 0x7e, 0x7f, 0x7e, 0x7d, 0x7f, 0x7d, 0x7f, 0x7e, 0x7f, 0x80, - 0x80, 0x80, 0x7f, 0x81, 0x7f, 0x80, 0x80, 0x7f, 0x7e, 0x7f, 0x7f, - 0x7e, 0x7f, 0x7f, 0x7e, 0x7e, 0x7f, 0x7f, 0x80, 0x7e, 0x80, 0x80, - 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7e, 0x80, 0x7e, 0x80, 0x7f, - 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x81, 0x7e, 0x81, 0x7f, 0x80, 0x7e, - 0x81, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, - 0x80, 0x7f, 0x81, 0x7e, 0x81, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x81, - 0x7f, 0x82, 0x7e, 0x80, 0x7f, 0x80, 0x7f, 0x81, 0x7e, 0x80, 0x7f, - 0x7e, 0x82, 0x7c, 0x83, 0x7c, 0x82, 0x7e, 0x81, 0x80, 0x7f, 0x7f, - 0x80, 0x80, 0x7e, 0x80, 0x7f, 0x81, 0x7c, 0x83, 0x7c, 0x84, 0x7d, - 0x82, 0x7f, 0x7f, 0x82, 0x7f, 0x7f, 0x7e, 0x81, 0x80, 0x81, 0x7c, - 0x84, 0x7b, 0x83, 0x7d, 0x83, 0x7e, 0x81, 0x80, 0x82, 0x81, 0x7e, - 0x84, 0x7c, 0x83, 0x7d, 0x82, 0x7f, 0x83, 0x7a, 0x83, 0x7c, 0x83, - 0x80, 0x80, 0x82, 0x80, 0x81, 0x7c, 0x85, 0x7b, 0x83, 0x7e, 0x7e, - 0x7f, 0x7f, 0x7f, 0x80, 0x7e, 0x82, 0x81, 0x80, 0x7e, 0x83, 0x7c, - 0x82, 0x81, 0x7d, 0x82, 0x7e, 0x81, 0x7f, 0x81, 0x7c, 0x85, 0x79, - 0x84, 0x7b, 0x81, 0x7e, 0x7e, 0x83, 0x7b, 0x82, 0x7b, 0x82, 0x7c, - 0x82, 0x7d, 0x84, 0x7e, 0x81, 0x80, 0x7e, 0x80, 0x7c, 0x83, 0x7c, - 0x85, 0x7b, 0x83, 0x7f, 0x7e, 0x83, 0x7d, 0x82, 0x7e, 0x80, 0x7f, - 0x7f, 0x7f, 0x7e, 0x7f, 0x7e, 0x7e, 0x82, 0x7e, 0x7e, 0x81, 0x7f, - 0x7f, 0x81, 0x7d, 0x81, 0x7c, 0x7e, 0x81, 0x7c, 0x82, 0x7f, 0x82, - 0x7b, 0x80, 0x7f, 0x7d, 0x83, 0x7b, 0x83, 0x7e, 0x80, 0x81, 0x7c, - 0x81, 0x7f, 0x7c, 0x7e, 0x7b, 0x80, 0x7d, 0x80, 0x83, 0x7d, 0x84, - 0x7d, 0x81, 0x81, 0x7e, 0x83, 0x7f, 0x83, 0x7e, 0x7e, 0x81, 0x7a, - 0x82, 0x7d, 0x7f, 0x7f, 0x7e, 0x7c, 0x82, 0x7f, 0x7d, 0x86, 0x7b, - 0x85, 0x7b, 0x82, 0x81, 0x7f, 0x82, 0x7e, 0x7d, 0x80, 0x7b, 0x80, - 0x81, 0x7d, 0x83, 0x7f, 0x81, 0x7f, 0x81, 0x80, 0x83, 0x7e, 0x81, - 0x81, 0x7f, 0x7f, 0x7e, 0x7e, 0x82, 0x7c, 0x7f, 0x7d, 0x7e, 0x7f, - 0x80, 0x7d, 0x80, 0x82, 0x7d, 0x86, 0x7c, 0x81, 0x81, 0x7e, 0x7f, - 0x7f, 0x80, 0x81, 0x7d, 0x81, 0x7c, 0x81, 0x7f, 0x7f, 0x84, 0x7d, - 0x83, 0x82, 0x7d, 0x86, 0x7e, 0x7e, 0x84, 0x78, 0x86, 0x7b, 0x80, - 0x82, 0x7f, 0x7e, 0x82, 0x80, 0x7d, 0x83, 0x7c, 0x83, 0x7f, 0x81, - 0x81, 0x7f, 0x81, 0x7f, 0x7e, 0x81, 0x7b, 0x82, 0x7f, 0x7c, 0x83, - 0x7e, 0x7f, 0x85, 0x79, 0x82, 0x7e, 0x7b, 0x84, 0x7a, 0x84, 0x80, - 0x7e, 0x81, 0x7e, 0x80, 0x80, 0x7e, 0x81, 0x83, 0x80, 0x81, 0x81, - 0x7f, 0x80, 0x81, 0x7f, 0x7b, 0x81, 0x7e, 0x7c, 0x80, 0x7d, 0x7d, - 0x7f, 0x7f, 0x7f, 0x83, 0x7d, 0x81, 0x80, 0x7e, 0x82, 0x81, 0x7c, - 0x85, 0x7d, 0x7f, 0x84, 0x78, 0x85, 0x79, 0x7e, 0x83, 0x7e, 0x7e, - 0x81, 0x80, 0x7f, 0x84, 0x7f, 0x82, 0x7f, 0x7f, 0x81, 0x7a, 0x82, - 0x7e, 0x80, 0x81, 0x7a, 0x87, 0x7b, 0x80, 0x85, 0x79, 0x83, 0x7f, - 0x7b, 0x84, 0x7b, 0x7f, 0x82, 0x7b, 0x83, 0x7d, 0x7d, 0x83, 0x7e, - 0x80, 0x83, 0x79, 0x82, 0x82, 0x7b, 0x87, 0x7e, 0x80, 0x82, 0x7a, - 0x82, 0x7e, 0x7b, 0x83, 0x7a, 0x80, 0x81, 0x7c, 0x84, 0x7f, 0x7f, - 0x82, 0x81, 0x7f, 0x81, 0x7e, 0x81, 0x80, 0x7f, 0x7f, 0x81, 0x7e, - 0x7e, 0x82, 0x7d, 0x7f, 0x80, 0x7e, 0x7f, 0x81, 0x7d, 0x81, 0x80, - 0x7f, 0x83, 0x7e, 0x82, 0x81, 0x7e, 0x83, 0x7d, 0x83, 0x7f, 0x7f, - 0x83, 0x7c, 0x83, 0x7f, 0x81, 0x82, 0x7c, 0x83, 0x7f, 0x7c, 0x83, - 0x7d, 0x80, 0x80, 0x7e, 0x80, 0x7e, 0x7d, 0x81, 0x7c, 0x81, 0x80, - 0x7d, 0x83, 0x7c, 0x83, 0x80, 0x7d, 0x83, 0x7f, 0x7f, 0x83, 0x7f, - 0x81, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x7e, - 0x7e, 0x7f, 0x80, 0x7e, 0x7e, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, - 0x80, 0x82, 0x81, 0x81, 0x82, 0x81, 0x83, 0x81, 0x82, 0x81, 0x7e, - 0x80, 0x7c, 0x7c, 0x7e, 0x7a, 0x7c, 0x7c, 0x79, 0x7d, 0x7c, 0x7b, - 0x80, 0x7f, 0x80, 0x86, 0x83, 0x85, 0x89, 0x86, 0x87, 0x88, 0x85, - 0x86, 0x84, 0x81, 0x80, 0x7d, 0x79, 0x78, 0x74, 0x72, 0x71, 0x6f, - 0x6e, 0x71, 0x71, 0x74, 0x7d, 0x80, 0x88, 0x91, 0x90, 0x96, 0x99, - 0x96, 0x99, 0x98, 0x95, 0x95, 0x8d, 0x82, 0x7d, 0x6f, 0x68, 0x62, - 0x5d, 0x55, 0x54, 0x5f, 0x56, 0x67, 0x77, 0x71, 0x8d, 0x91, 0x98, - 0xac, 0xa9, 0xb1, 0xb4, 0xac, 0xa5, 0xa0, 0x94, 0x8a, 0x84, 0x71, - 0x68, 0x5e, 0x4d, 0x4a, 0x43, 0x53, 0x58, 0x59, 0x74, 0x70, 0x7d, - 0x91, 0x8d, 0xa5, 0xaa, 0xae, 0xb7, 0xb0, 0xaa, 0x9f, 0x97, 0x8a, - 0x83, 0x7a, 0x6b, 0x66, 0x55, 0x4a, 0x43, 0x42, 0x58, 0x54, 0x63, - 0x79, 0x71, 0x87, 0x91, 0x92, 0xa9, 0xb0, 0xb1, 0xb9, 0xb4, 0xa6, - 0xa1, 0x95, 0x85, 0x83, 0x77, 0x68, 0x62, 0x52, 0x45, 0x3e, 0x49, - 0x59, 0x56, 0x6d, 0x79, 0x76, 0x8b, 0x94, 0x96, 0xab, 0xb4, 0xb0, - 0xb9, 0xaf, 0xa3, 0x9e, 0x90, 0x84, 0x80, 0x75, 0x67, 0x5f, 0x4e, - 0x42, 0x3e, 0x51, 0x59, 0x5a, 0x79, 0x78, 0x7b, 0x93, 0x93, 0x9d, - 0xb2, 0xb3, 0xb3, 0xb8, 0xab, 0x9f, 0x99, 0x8a, 0x80, 0x7b, 0x6f, - 0x62, 0x58, 0x49, 0x3a, 0x44, 0x5a, 0x53, 0x69, 0x80, 0x75, 0x88, - 0x96, 0x96, 0xa5, 0xb6, 0xb3, 0xb5, 0xb5, 0xa4, 0x9c, 0x92, 0x85, - 0x7c, 0x76, 0x69, 0x5c, 0x53, 0x42, 0x3a, 0x51, 0x5c, 0x58, 0x77, - 0x7f, 0x78, 0x8f, 0x97, 0x98, 0xac, 0xb7, 0xb2, 0xb4, 0xaf, 0x9f, - 0x96, 0x8d, 0x80, 0x79, 0x72, 0x64, 0x56, 0x4c, 0x3b, 0x40, 0x5c, - 0x58, 0x63, 0x83, 0x7b, 0x81, 0x95, 0x99, 0x9f, 0xb2, 0xb7, 0xb1, - 0xb3, 0xa9, 0x99, 0x91, 0x88, 0x7b, 0x74, 0x6d, 0x5e, 0x51, 0x43, - 0x39, 0x4c, 0x5e, 0x5b, 0x75, 0x82, 0x7d, 0x8b, 0x98, 0x9d, 0xa5, - 0xb9, 0xb5, 0xb0, 0xaf, 0x9f, 0x94, 0x8b, 0x83, 0x77, 0x6f, 0x67, - 0x57, 0x4a, 0x3e, 0x3f, 0x59, 0x5f, 0x64, 0x81, 0x80, 0x80, 0x92, - 0x9b, 0x9e, 0xae, 0xb8, 0xb1, 0xaf, 0xa8, 0x9b, 0x8e, 0x88, 0x7f, - 0x71, 0x6d, 0x61, 0x50, 0x43, 0x3a, 0x4a, 0x5d, 0x5d, 0x73, 0x82, - 0x7e, 0x89, 0x96, 0x9e, 0xa3, 0xb8, 0xb8, 0xb0, 0xaf, 0xa3, 0x96, - 0x89, 0x85, 0x78, 0x6f, 0x6a, 0x5a, 0x4a, 0x3e, 0x3b, 0x55, 0x5f, - 0x61, 0x7f, 0x82, 0x80, 0x8e, 0x9a, 0x9d, 0xa9, 0xbb, 0xb3, 0xaf, - 0xaa, 0x9f, 0x90, 0x86, 0x83, 0x73, 0x6d, 0x65, 0x53, 0x45, 0x3b, - 0x44, 0x5d, 0x5f, 0x6c, 0x83, 0x82, 0x86, 0x91, 0x9f, 0x9e, 0xaf, - 0xbc, 0xaf, 0xad, 0xa5, 0x9b, 0x89, 0x84, 0x7f, 0x6f, 0x6b, 0x61, - 0x4f, 0x41, 0x3b, 0x4e, 0x60, 0x60, 0x76, 0x85, 0x82, 0x89, 0x96, - 0x9e, 0xa2, 0xb4, 0xb7, 0xae, 0xaa, 0xa2, 0x95, 0x86, 0x84, 0x79, - 0x6e, 0x68, 0x5c, 0x4c, 0x3e, 0x3f, 0x55, 0x61, 0x63, 0x7e, 0x86, - 0x83, 0x8d, 0x9a, 0x9f, 0xa4, 0xb7, 0xb3, 0xab, 0xa7, 0xa0, 0x90, - 0x82, 0x82, 0x74, 0x6c, 0x66, 0x59, 0x48, 0x3d, 0x44, 0x5d, 0x62, - 0x6a, 0x85, 0x84, 0x85, 0x8f, 0x9c, 0x9e, 0xa8, 0xb9, 0xaf, 0xaa, - 0xa5, 0x9c, 0x8b, 0x82, 0x80, 0x71, 0x6a, 0x65, 0x55, 0x45, 0x3c, - 0x4b, 0x61, 0x61, 0x72, 0x87, 0x83, 0x86, 0x92, 0x9f, 0x9c, 0xac, - 0xb9, 0xac, 0xa8, 0xa2, 0x9a, 0x86, 0x82, 0x7e, 0x6e, 0x69, 0x63, - 0x53, 0x41, 0x3d, 0x4d, 0x61, 0x63, 0x75, 0x88, 0x83, 0x86, 0x94, - 0x9e, 0x9e, 0xae, 0xba, 0xac, 0xa7, 0xa4, 0x99, 0x84, 0x82, 0x7f, - 0x6e, 0x68, 0x64, 0x51, 0x3f, 0x3f, 0x4f, 0x63, 0x64, 0x78, 0x88, - 0x83, 0x89, 0x94, 0x9e, 0x9f, 0xaf, 0xb8, 0xab, 0xa7, 0xa1, 0x97, - 0x85, 0x81, 0x7e, 0x6f, 0x68, 0x63, 0x52, 0x42, 0x40, 0x50, 0x64, - 0x66, 0x76, 0x89, 0x85, 0x87, 0x93, 0x9d, 0x9d, 0xaa, 0xb8, 0xaa, - 0xa4, 0xa2, 0x98, 0x85, 0x81, 0x7f, 0x70, 0x67, 0x64, 0x57, 0x45, - 0x42, 0x4c, 0x63, 0x67, 0x71, 0x89, 0x86, 0x85, 0x91, 0x9c, 0x9f, - 0xa5, 0xb5, 0xae, 0xa3, 0xa1, 0x9b, 0x89, 0x81, 0x7f, 0x73, 0x68, - 0x65, 0x5b, 0x49, 0x43, 0x49, 0x63, 0x69, 0x6c, 0x88, 0x89, 0x86, - 0x8f, 0x9c, 0x9e, 0xa0, 0xb5, 0xae, 0xa3, 0xa2, 0x9e, 0x8b, 0x7f, - 0x82, 0x75, 0x6a, 0x67, 0x5f, 0x4e, 0x45, 0x48, 0x5b, 0x6a, 0x6c, - 0x7f, 0x8a, 0x86, 0x8b, 0x96, 0x9e, 0x9d, 0xad, 0xb1, 0xa5, 0xa2, - 0x9e, 0x94, 0x81, 0x81, 0x7b, 0x6e, 0x69, 0x64, 0x57, 0x48, 0x46, - 0x52, 0x67, 0x6b, 0x75, 0x87, 0x87, 0x87, 0x90, 0x9a, 0x9c, 0xa3, - 0xaf, 0xaa, 0xa2, 0x9e, 0x9a, 0x88, 0x81, 0x7f, 0x74, 0x6c, 0x65, - 0x5f, 0x4d, 0x46, 0x47, 0x58, 0x6b, 0x6c, 0x7d, 0x8a, 0x8a, 0x8a, - 0x96, 0xa0, 0x9f, 0xab, 0xb3, 0xaa, 0xa2, 0x9e, 0x98, 0x84, 0x7f, - 0x7c, 0x71, 0x68, 0x61, 0x5a, 0x4a, 0x46, 0x49, 0x5e, 0x6c, 0x6f, - 0x82, 0x89, 0x89, 0x8b, 0x96, 0x9f, 0xa1, 0xac, 0xaf, 0xaa, 0xa1, - 0x9d, 0x93, 0x83, 0x7e, 0x77, 0x71, 0x67, 0x60, 0x57, 0x4a, 0x48, - 0x4c, 0x64, 0x6e, 0x71, 0x85, 0x8a, 0x89, 0x8c, 0x98, 0xa0, 0xa0, - 0xae, 0xaf, 0xa6, 0x9f, 0x99, 0x91, 0x80, 0x7e, 0x78, 0x6f, 0x66, - 0x60, 0x5c, 0x4e, 0x4b, 0x50, 0x63, 0x6f, 0x72, 0x82, 0x88, 0x89, - 0x8a, 0x94, 0x9b, 0x9e, 0xaa, 0xac, 0xa8, 0x9f, 0x98, 0x90, 0x85, - 0x7e, 0x78, 0x74, 0x6b, 0x64, 0x60, 0x55, 0x51, 0x50, 0x5c, 0x6f, - 0x72, 0x7a, 0x85, 0x89, 0x88, 0x8b, 0x99, 0x9b, 0xa3, 0xac, 0xa9, - 0xa2, 0x9a, 0x96, 0x8a, 0x7f, 0x7c, 0x76, 0x70, 0x67, 0x63, 0x5b, - 0x52, 0x52, 0x54, 0x69, 0x73, 0x75, 0x82, 0x87, 0x89, 0x88, 0x93, - 0x9d, 0xa0, 0xa7, 0xaa, 0xa7, 0x9b, 0x95, 0x8f, 0x85, 0x7d, 0x78, - 0x75, 0x6d, 0x65, 0x63, 0x5b, 0x55, 0x55, 0x5e, 0x6f, 0x71, 0x79, - 0x82, 0x84, 0x87, 0x88, 0x94, 0x99, 0x9f, 0xa8, 0xa6, 0xa4, 0x9a, - 0x96, 0x8d, 0x82, 0x7e, 0x78, 0x73, 0x6a, 0x65, 0x60, 0x55, 0x51, - 0x4d, 0x56, 0x6b, 0x70, 0x77, 0x80, 0x88, 0x89, 0x89, 0x9a, 0xa1, - 0xa6, 0xae, 0xb0, 0xab, 0x9c, 0x98, 0x8e, 0x82, 0x7b, 0x78, 0x74, - 0x6b, 0x65, 0x61, 0x5b, 0x54, 0x54, 0x54, 0x65, 0x70, 0x71, 0x79, - 0x80, 0x88, 0x86, 0x8f, 0x9e, 0xa2, 0xa9, 0xae, 0xad, 0xa2, 0x98, - 0x95, 0x89, 0x7f, 0x79, 0x78, 0x70, 0x68, 0x64, 0x62, 0x59, 0x55, - 0x56, 0x5c, 0x6c, 0x6e, 0x75, 0x7d, 0x83, 0x88, 0x8b, 0x97, 0x9f, - 0xa3, 0xac, 0xab, 0xa7, 0x9c, 0x96, 0x8d, 0x81, 0x7b, 0x7a, 0x78, - 0x71, 0x6d, 0x68, 0x66, 0x5e, 0x5c, 0x5b, 0x59, 0x6a, 0x6e, 0x70, - 0x78, 0x7f, 0x88, 0x85, 0x92, 0x9e, 0xa0, 0xa7, 0xa9, 0xa9, 0x9d, - 0x95, 0x90, 0x87, 0x7f, 0x7a, 0x7b, 0x74, 0x6e, 0x6a, 0x69, 0x64, - 0x5c, 0x5d, 0x59, 0x65, 0x6e, 0x6d, 0x76, 0x7e, 0x86, 0x86, 0x8d, - 0x9c, 0x9e, 0xa2, 0xa7, 0xa7, 0x9f, 0x95, 0x91, 0x87, 0x7e, 0x7b, - 0x7c, 0x7a, 0x75, 0x73, 0x72, 0x6e, 0x69, 0x64, 0x62, 0x5c, 0x62, - 0x6c, 0x6c, 0x72, 0x78, 0x83, 0x85, 0x89, 0x96, 0x9b, 0x9f, 0xa4, - 0xa6, 0xa1, 0x98, 0x92, 0x8c, 0x84, 0x7f, 0x7f, 0x7d, 0x79, 0x75, - 0x74, 0x70, 0x6b, 0x66, 0x61, 0x5a, 0x5a, 0x67, 0x6a, 0x6c, 0x75, - 0x80, 0x86, 0x86, 0x91, 0x9c, 0x9f, 0xa4, 0xa5, 0xa6, 0x9d, 0x93, - 0x8d, 0x86, 0x82, 0x7e, 0x7f, 0x7e, 0x7a, 0x77, 0x75, 0x72, 0x6e, - 0x68, 0x63, 0x5c, 0x59, 0x63, 0x68, 0x6b, 0x73, 0x7d, 0x85, 0x84, - 0x8e, 0x98, 0x9e, 0xa1, 0xa4, 0xa7, 0x9d, 0x94, 0x8e, 0x89, 0x83, - 0x7e, 0x82, 0x83, 0x7f, 0x7b, 0x7b, 0x79, 0x73, 0x6f, 0x69, 0x65, - 0x5b, 0x57, 0x64, 0x65, 0x69, 0x71, 0x7c, 0x83, 0x81, 0x8d, 0x98, - 0x9d, 0x9f, 0xa3, 0xa5, 0x9b, 0x94, 0x8f, 0x8b, 0x84, 0x81, 0x85, - 0x83, 0x81, 0x7e, 0x7f, 0x7d, 0x79, 0x77, 0x70, 0x69, 0x5f, 0x57, - 0x5b, 0x62, 0x64, 0x69, 0x72, 0x7b, 0x7d, 0x82, 0x8e, 0x97, 0x9c, - 0xa0, 0xa4, 0xa1, 0x98, 0x94, 0x90, 0x8b, 0x86, 0x86, 0x87, 0x84, - 0x82, 0x80, 0x80, 0x7d, 0x7b, 0x78, 0x72, 0x69, 0x60, 0x57, 0x56, - 0x5d, 0x62, 0x66, 0x6d, 0x77, 0x7e, 0x81, 0x8b, 0x96, 0x9c, 0xa0, - 0xa1, 0xa3, 0x9c, 0x93, 0x91, 0x8c, 0x87, 0x83, 0x84, 0x85, 0x83, - 0x82, 0x84, 0x85, 0x82, 0x7e, 0x7c, 0x77, 0x6d, 0x60, 0x59, 0x55, - 0x59, 0x5f, 0x63, 0x6c, 0x73, 0x7a, 0x7f, 0x87, 0x92, 0x98, 0x9f, - 0xa0, 0xa0, 0x9d, 0x96, 0x92, 0x8d, 0x89, 0x85, 0x83, 0x84, 0x83, - 0x83, 0x84, 0x86, 0x85, 0x83, 0x80, 0x7d, 0x78, 0x6f, 0x62, 0x59, - 0x54, 0x58, 0x5c, 0x61, 0x6a, 0x71, 0x78, 0x7e, 0x87, 0x91, 0x97, - 0x9e, 0xa0, 0x9f, 0x9d, 0x97, 0x92, 0x8c, 0x88, 0x84, 0x82, 0x83, - 0x82, 0x83, 0x85, 0x87, 0x87, 0x86, 0x84, 0x81, 0x7d, 0x77, 0x6f, - 0x64, 0x5a, 0x53, 0x57, 0x5f, 0x61, 0x69, 0x71, 0x7a, 0x7f, 0x84, - 0x91, 0x97, 0x9b, 0x9d, 0x9f, 0x9e, 0x96, 0x92, 0x8d, 0x89, 0x84, - 0x82, 0x84, 0x83, 0x83, 0x84, 0x87, 0x88, 0x86, 0x85, 0x83, 0x7f, - 0x7b, 0x76, 0x70, 0x67, 0x5e, 0x54, 0x54, 0x5f, 0x64, 0x68, 0x70, - 0x7b, 0x81, 0x82, 0x8c, 0x96, 0x9a, 0x9a, 0x9c, 0x9e, 0x97, 0x91, - 0x8d, 0x8b, 0x86, 0x82, 0x84, 0x85, 0x85, 0x83, 0x86, 0x88, 0x87, - 0x85, 0x83, 0x82, 0x7c, 0x76, 0x71, 0x6c, 0x63, 0x5b, 0x50, 0x5a, - 0x67, 0x65, 0x6e, 0x76, 0x83, 0x84, 0x84, 0x95, 0x98, 0x9a, 0x99, - 0x9b, 0x9c, 0x90, 0x8e, 0x8a, 0x89, 0x84, 0x81, 0x87, 0x85, 0x85, - 0x84, 0x88, 0x8a, 0x86, 0x84, 0x81, 0x80, 0x79, 0x73, 0x71, 0x6a, - 0x64, 0x5c, 0x5b, 0x5c, 0x62, 0x6b, 0x71, 0x7a, 0x7f, 0x86, 0x8a, - 0x8e, 0x94, 0x95, 0x98, 0x96, 0x95, 0x93, 0x8d, 0x8c, 0x88, 0x87, - 0x86, 0x86, 0x87, 0x86, 0x87, 0x87, 0x87, 0x86, 0x82, 0x80, 0x7c, - 0x79, 0x72, 0x6d, 0x67, 0x60, 0x59, 0x55, 0x63, 0x69, 0x6b, 0x74, - 0x7b, 0x86, 0x83, 0x8b, 0x95, 0x96, 0x98, 0x95, 0x98, 0x93, 0x8c, - 0x8b, 0x88, 0x86, 0x81, 0x84, 0x86, 0x85, 0x85, 0x86, 0x8a, 0x89, - 0x88, 0x87, 0x85, 0x81, 0x7a, 0x78, 0x75, 0x71, 0x6d, 0x6b, 0x6c, - 0x6a, 0x6b, 0x6e, 0x72, 0x75, 0x78, 0x7d, 0x7f, 0x81, 0x83, 0x86, - 0x89, 0x89, 0x8a, 0x8c, 0x8d, 0x8c, 0x8b, 0x8c, 0x8b, 0x89, 0x88, - 0x87, 0x85, 0x82, 0x80, 0x7e, 0x7b, 0x79, 0x76, 0x75, 0x73, 0x70, - 0x6d, 0x6b, 0x68, 0x66, 0x67, 0x6f, 0x76, 0x79, 0x7f, 0x84, 0x89, - 0x8b, 0x8d, 0x93, 0x94, 0x94, 0x92, 0x91, 0x8e, 0x88, 0x86, 0x84, - 0x84, 0x82, 0x82, 0x85, 0x85, 0x86, 0x86, 0x88, 0x88, 0x86, 0x84, - 0x82, 0x7f, 0x7b, 0x77, 0x75, 0x72, 0x70, 0x6e, 0x6f, 0x6f, 0x70, - 0x71, 0x73, 0x75, 0x77, 0x79, 0x7c, 0x7e, 0x80, 0x82, 0x85, 0x87, - 0x89, 0x8b, 0x8d, 0x8e, 0x8e, 0x8e, 0x8e, 0x8c, 0x8b, 0x88, 0x86, - 0x84, 0x81, 0x7e, 0x7c, 0x7a, 0x77, 0x76, 0x74, 0x72, 0x70, 0x6d, - 0x6b, 0x69, 0x64, 0x67, 0x72, 0x76, 0x79, 0x7d, 0x85, 0x89, 0x87, - 0x8d, 0x93, 0x93, 0x91, 0x8f, 0x91, 0x8b, 0x86, 0x84, 0x83, 0x81, - 0x7e, 0x80, 0x82, 0x83, 0x83, 0x85, 0x88, 0x88, 0x87, 0x86, 0x84, - 0x82, 0x7e, 0x7c, 0x7a, 0x78, 0x75, 0x74, 0x76, 0x76, 0x76, 0x78, - 0x7a, 0x7c, 0x7c, 0x7e, 0x7f, 0x7f, 0x7f, 0x80, 0x81, 0x81, 0x81, - 0x82, 0x83, 0x83, 0x83, 0x84, 0x84, 0x83, 0x83, 0x82, 0x82, 0x81, - 0x80, 0x7f, 0x7e, 0x7d, 0x7c, 0x7b, 0x7c, 0x7b, 0x7b, 0x7b, 0x7b, - 0x7c, 0x7c, 0x7c, 0x7d, 0x7e, 0x7e, 0x7f, 0x80, 0x80, 0x80, 0x81, - 0x81, 0x81, 0x81, 0x82, 0x82, 0x82, 0x82, 0x83, 0x83, 0x82, 0x82, - 0x82, 0x81, 0x81, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x7e, 0x7e, 0x7e, - 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7f, 0x7e, 0x7f, - 0x7f, 0x80, 0x80, 0x80, 0x81, 0x81, 0x81, 0x81, 0x81, 0x82, 0x81, - 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x80, 0x80, 0x80, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, - 0x7e, 0x7e, 0x7e, 0x7f, 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, - }, - }, -} - -var beepSound = []byte{ - 0x80, 0x80, 0x81, 0x81, 0x7f, 0x7e, 0x7e, 0x80, 0x7e, 0x79, 0x76, - 0x78, 0x81, 0x8c, 0x8f, 0x88, 0x7d, 0x78, 0x7b, 0x80, 0x7d, 0x73, - 0x6c, 0x73, 0x88, 0x9b, 0x9d, 0x8c, 0x76, 0x6d, 0x74, 0x7e, 0x7c, - 0x70, 0x68, 0x75, 0x8f, 0xa4, 0xa2, 0x89, 0x6f, 0x66, 0x70, 0x7d, - 0x7e, 0x74, 0x6e, 0x7b, 0x93, 0xa5, 0x9f, 0x84, 0x6a, 0x62, 0x6e, - 0x7e, 0x81, 0x79, 0x73, 0x7e, 0x95, 0xa4, 0x9a, 0x7e, 0x64, 0x5f, - 0x6e, 0x81, 0x86, 0x7e, 0x78, 0x82, 0x96, 0xa1, 0x95, 0x78, 0x5f, - 0x5d, 0x70, 0x84, 0x8a, 0x83, 0x7c, 0x84, 0x94, 0x9d, 0x8f, 0x72, - 0x5c, 0x5c, 0x72, 0x89, 0x90, 0x87, 0x7f, 0x84, 0x92, 0x98, 0x89, - 0x6d, 0x59, 0x5e, 0x77, 0x8f, 0x95, 0x8a, 0x80, 0x82, 0x8e, 0x93, - 0x84, 0x6a, 0x58, 0x61, 0x7c, 0x94, 0x9a, 0x8d, 0x80, 0x80, 0x8a, - 0x8d, 0x7f, 0x67, 0x5a, 0x65, 0x82, 0x9a, 0x9d, 0x8e, 0x7d, 0x7c, - 0x84, 0x88, 0x7b, 0x66, 0x5c, 0x6a, 0x88, 0x9f, 0x9f, 0x8d, 0x7b, - 0x77, 0x7f, 0x84, 0x79, 0x67, 0x60, 0x70, 0x8e, 0xa3, 0xa0, 0x8a, - 0x76, 0x72, 0x7b, 0x81, 0x78, 0x69, 0x65, 0x76, 0x93, 0xa5, 0x9f, - 0x86, 0x70, 0x6c, 0x77, 0x7f, 0x79, 0x6c, 0x6a, 0x7c, 0x97, 0xa7, - 0x9d, 0x81, 0x6b, 0x68, 0x74, 0x7f, 0x7c, 0x71, 0x70, 0x81, 0x9a, - 0xa6, 0x99, 0x7c, 0x65, 0x64, 0x73, 0x81, 0x80, 0x76, 0x75, 0x84, - 0x9b, 0xa4, 0x94, 0x76, 0x60, 0x61, 0x74, 0x84, 0x84, 0x7b, 0x79, - 0x87, 0x9a, 0xa0, 0x8e, 0x70, 0x5c, 0x61, 0x76, 0x88, 0x89, 0x80, - 0x7d, 0x88, 0x98, 0x9c, 0x88, 0x6a, 0x59, 0x61, 0x79, 0x8d, 0x8e, - 0x84, 0x7e, 0x88, 0x95, 0x96, 0x82, 0x66, 0x58, 0x63, 0x7e, 0x93, - 0x93, 0x87, 0x7f, 0x86, 0x91, 0x91, 0x7d, 0x63, 0x58, 0x67, 0x84, - 0x98, 0x97, 0x89, 0x7e, 0x82, 0x8c, 0x8b, 0x78, 0x61, 0x5a, 0x6c, - 0x8a, 0x9e, 0x9a, 0x88, 0x7c, 0x7e, 0x87, 0x86, 0x76, 0x61, 0x5d, - 0x71, 0x8f, 0xa2, 0x9c, 0x87, 0x78, 0x79, 0x82, 0x82, 0x74, 0x63, - 0x62, 0x77, 0x95, 0xa5, 0x9b, 0x84, 0x73, 0x73, 0x7d, 0x80, 0x74, - 0x66, 0x67, 0x7d, 0x9a, 0xa7, 0x9a, 0x80, 0x6d, 0x6e, 0x7b, 0x7f, - 0x76, 0x6a, 0x6c, 0x83, 0x9d, 0xa7, 0x96, 0x7a, 0x68, 0x6b, 0x78, - 0x80, 0x79, 0x6f, 0x72, 0x88, 0x9f, 0xa5, 0x92, 0x74, 0x62, 0x67, - 0x78, 0x82, 0x7d, 0x74, 0x77, 0x8a, 0x9f, 0xa2, 0x8c, 0x6e, 0x5e, - 0x66, 0x79, 0x86, 0x82, 0x79, 0x7c, 0x8d, 0x9e, 0x9e, 0x86, 0x68, - 0x5b, 0x66, 0x7c, 0x8a, 0x87, 0x7e, 0x7e, 0x8d, 0x9c, 0x98, 0x80, - 0x63, 0x59, 0x67, 0x80, 0x8f, 0x8c, 0x81, 0x80, 0x8c, 0x98, 0x93, - 0x7b, 0x60, 0x58, 0x6a, 0x85, 0x94, 0x91, 0x84, 0x80, 0x89, 0x93, - 0x8d, 0x76, 0x5d, 0x5a, 0x6e, 0x8b, 0x9a, 0x94, 0x84, 0x7e, 0x85, - 0x8e, 0x88, 0x72, 0x5d, 0x5c, 0x73, 0x91, 0x9f, 0x96, 0x84, 0x7b, - 0x80, 0x88, 0x83, 0x70, 0x5e, 0x61, 0x79, 0x97, 0xa2, 0x97, 0x81, - 0x77, 0x7b, 0x84, 0x80, 0x6f, 0x60, 0x66, 0x80, 0x9c, 0xa4, 0x95, - 0x7d, 0x71, 0x76, 0x80, 0x7e, 0x70, 0x64, 0x6b, 0x86, 0xa0, 0xa5, - 0x93, 0x79, 0x6c, 0x72, 0x7d, 0x7e, 0x72, 0x68, 0x71, 0x8a, 0xa2, - 0xa4, 0x8f, 0x73, 0x67, 0x6e, 0x7c, 0x7f, 0x76, 0x6e, 0x77, 0x8e, - 0xa3, 0xa2, 0x89, 0x6d, 0x62, 0x6c, 0x7c, 0x82, 0x7b, 0x73, 0x7b, - 0x91, 0xa3, 0x9e, 0x84, 0x67, 0x5e, 0x6b, 0x7e, 0x86, 0x80, 0x78, - 0x7f, 0x92, 0xa0, 0x99, 0x7d, 0x62, 0x5c, 0x6b, 0x81, 0x8b, 0x84, - 0x7c, 0x81, 0x92, 0x9d, 0x93, 0x78, 0x5e, 0x5a, 0x6e, 0x86, 0x90, - 0x89, 0x80, 0x82, 0x90, 0x98, 0x8e, 0x72, 0x5b, 0x5b, 0x72, 0x8c, - 0x95, 0x8d, 0x81, 0x81, 0x8d, 0x93, 0x88, 0x6e, 0x5a, 0x5d, 0x76, - 0x91, 0x9a, 0x8f, 0x81, 0x7e, 0x88, 0x8e, 0x83, 0x6b, 0x5a, 0x61, - 0x7c, 0x97, 0x9e, 0x91, 0x80, 0x7b, 0x83, 0x89, 0x7e, 0x6a, 0x5c, - 0x66, 0x82, 0x9b, 0x9f, 0x8f, 0x7d, 0x78, 0x7e, 0x83, 0x7d, 0x70, - 0x6a, 0x72, 0x85, 0x93, 0x93, 0x88, 0x7c, 0x79, 0x7d, 0x80, 0x7d, - 0x78, 0x77, 0x7b, 0x83, 0x87, 0x86, 0x81, 0x7e, 0x7d, 0x7e, 0x7f, - 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, - 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, - 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, - 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x80, - 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7f, - 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7f, - 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, - 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x80, - 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, - 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, - 0x7f, 0x80, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, - 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7f, - 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, - 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, - 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, - 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, - 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, - 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, - 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, - 0x7f, 0x80, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, - 0x80, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, - 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, - 0x7f, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x80, - 0x7f, 0x80, 0x7f, 0x7f, 0x80, -} diff --git a/vendor/github.com/dchest/captcha/store.go b/vendor/github.com/dchest/captcha/store.go deleted file mode 100644 index 5dd1521..0000000 --- a/vendor/github.com/dchest/captcha/store.go +++ /dev/null @@ -1,117 +0,0 @@ -// Copyright 2011 Dmitry Chestnykh. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package captcha - -import ( - "container/list" - "sync" - "time" -) - -// An object implementing Store interface can be registered with SetCustomStore -// function to handle storage and retrieval of captcha ids and solutions for -// them, replacing the default memory store. -// -// It is the responsibility of an object to delete expired and used captchas -// when necessary (for example, the default memory store collects them in Set -// method after the certain amount of captchas has been stored.) -type Store interface { - // Set sets the digits for the captcha id. - Set(id string, digits []byte) - - // Get returns stored digits for the captcha id. Clear indicates - // whether the captcha must be deleted from the store. - Get(id string, clear bool) (digits []byte) -} - -// expValue stores timestamp and id of captchas. It is used in the list inside -// memoryStore for indexing generated captchas by timestamp to enable garbage -// collection of expired captchas. -type idByTimeValue struct { - timestamp time.Time - id string -} - -// memoryStore is an internal store for captcha ids and their values. -type memoryStore struct { - sync.RWMutex - digitsById map[string][]byte - idByTime *list.List - // Number of items stored since last collection. - numStored int - // Number of saved items that triggers collection. - collectNum int - // Expiration time of captchas. - expiration time.Duration -} - -// NewMemoryStore returns a new standard memory store for captchas with the -// given collection threshold and expiration time (duration). The returned -// store must be registered with SetCustomStore to replace the default one. -func NewMemoryStore(collectNum int, expiration time.Duration) Store { - s := new(memoryStore) - s.digitsById = make(map[string][]byte) - s.idByTime = list.New() - s.collectNum = collectNum - s.expiration = expiration - return s -} - -func (s *memoryStore) Set(id string, digits []byte) { - s.Lock() - s.digitsById[id] = digits - s.idByTime.PushBack(idByTimeValue{time.Now(), id}) - s.numStored++ - if s.numStored <= s.collectNum { - s.Unlock() - return - } - s.Unlock() - go s.collect() -} - -func (s *memoryStore) Get(id string, clear bool) (digits []byte) { - if !clear { - // When we don't need to clear captcha, acquire read lock. - s.RLock() - defer s.RUnlock() - } else { - s.Lock() - defer s.Unlock() - } - digits, ok := s.digitsById[id] - if !ok { - return - } - if clear { - delete(s.digitsById, id) - // XXX(dchest) Index (s.idByTime) will be cleaned when - // collecting expired captchas. Can't clean it here, because - // we don't store reference to expValue in the map. - // Maybe store it? - } - return -} - -func (s *memoryStore) collect() { - now := time.Now() - s.Lock() - defer s.Unlock() - s.numStored = 0 - for e := s.idByTime.Front(); e != nil; { - ev, ok := e.Value.(idByTimeValue) - if !ok { - return - } - if ev.timestamp.Add(s.expiration).Before(now) { - delete(s.digitsById, ev.id) - next := e.Next() - s.idByTime.Remove(e) - e = next - } else { - return - } - } -} diff --git a/vendor/github.com/dgrijalva/jwt-go/.gitignore b/vendor/github.com/dgrijalva/jwt-go/.gitignore deleted file mode 100644 index 80bed65..0000000 --- a/vendor/github.com/dgrijalva/jwt-go/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -.DS_Store -bin - - diff --git a/vendor/github.com/dgrijalva/jwt-go/.travis.yml b/vendor/github.com/dgrijalva/jwt-go/.travis.yml deleted file mode 100644 index 1027f56..0000000 --- a/vendor/github.com/dgrijalva/jwt-go/.travis.yml +++ /dev/null @@ -1,13 +0,0 @@ -language: go - -script: - - go vet ./... - - go test -v ./... - -go: - - 1.3 - - 1.4 - - 1.5 - - 1.6 - - 1.7 - - tip diff --git a/vendor/github.com/dgrijalva/jwt-go/LICENSE b/vendor/github.com/dgrijalva/jwt-go/LICENSE deleted file mode 100644 index df83a9c..0000000 --- a/vendor/github.com/dgrijalva/jwt-go/LICENSE +++ /dev/null @@ -1,8 +0,0 @@ -Copyright (c) 2012 Dave Grijalva - -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/dgrijalva/jwt-go/MIGRATION_GUIDE.md b/vendor/github.com/dgrijalva/jwt-go/MIGRATION_GUIDE.md deleted file mode 100644 index 7fc1f79..0000000 --- a/vendor/github.com/dgrijalva/jwt-go/MIGRATION_GUIDE.md +++ /dev/null @@ -1,97 +0,0 @@ -## Migration Guide from v2 -> v3 - -Version 3 adds several new, frequently requested features. To do so, it introduces a few breaking changes. We've worked to keep these as minimal as possible. This guide explains the breaking changes and how you can quickly update your code. - -### `Token.Claims` is now an interface type - -The most requested feature from the 2.0 verison of this library was the ability to provide a custom type to the JSON parser for claims. This was implemented by introducing a new interface, `Claims`, to replace `map[string]interface{}`. We also included two concrete implementations of `Claims`: `MapClaims` and `StandardClaims`. - -`MapClaims` is an alias for `map[string]interface{}` with built in validation behavior. It is the default claims type when using `Parse`. The usage is unchanged except you must type cast the claims property. - -The old example for parsing a token looked like this.. - -```go - if token, err := jwt.Parse(tokenString, keyLookupFunc); err == nil { - fmt.Printf("Token for user %v expires %v", token.Claims["user"], token.Claims["exp"]) - } -``` - -is now directly mapped to... - -```go - if token, err := jwt.Parse(tokenString, keyLookupFunc); err == nil { - claims := token.Claims.(jwt.MapClaims) - fmt.Printf("Token for user %v expires %v", claims["user"], claims["exp"]) - } -``` - -`StandardClaims` is designed to be embedded in your custom type. You can supply a custom claims type with the new `ParseWithClaims` function. Here's an example of using a custom claims type. - -```go - type MyCustomClaims struct { - User string - *StandardClaims - } - - if token, err := jwt.ParseWithClaims(tokenString, &MyCustomClaims{}, keyLookupFunc); err == nil { - claims := token.Claims.(*MyCustomClaims) - fmt.Printf("Token for user %v expires %v", claims.User, claims.StandardClaims.ExpiresAt) - } -``` - -### `ParseFromRequest` has been moved - -To keep this library focused on the tokens without becoming overburdened with complex request processing logic, `ParseFromRequest` and its new companion `ParseFromRequestWithClaims` have been moved to a subpackage, `request`. The method signatues have also been augmented to receive a new argument: `Extractor`. - -`Extractors` do the work of picking the token string out of a request. The interface is simple and composable. - -This simple parsing example: - -```go - if token, err := jwt.ParseFromRequest(tokenString, req, keyLookupFunc); err == nil { - fmt.Printf("Token for user %v expires %v", token.Claims["user"], token.Claims["exp"]) - } -``` - -is directly mapped to: - -```go - if token, err := request.ParseFromRequest(req, request.OAuth2Extractor, keyLookupFunc); err == nil { - claims := token.Claims.(jwt.MapClaims) - fmt.Printf("Token for user %v expires %v", claims["user"], claims["exp"]) - } -``` - -There are several concrete `Extractor` types provided for your convenience: - -* `HeaderExtractor` will search a list of headers until one contains content. -* `ArgumentExtractor` will search a list of keys in request query and form arguments until one contains content. -* `MultiExtractor` will try a list of `Extractors` in order until one returns content. -* `AuthorizationHeaderExtractor` will look in the `Authorization` header for a `Bearer` token. -* `OAuth2Extractor` searches the places an OAuth2 token would be specified (per the spec): `Authorization` header and `access_token` argument -* `PostExtractionFilter` wraps an `Extractor`, allowing you to process the content before it's parsed. A simple example is stripping the `Bearer ` text from a header - - -### RSA signing methods no longer accept `[]byte` keys - -Due to a [critical vulnerability](https://auth0.com/blog/2015/03/31/critical-vulnerabilities-in-json-web-token-libraries/), we've decided the convenience of accepting `[]byte` instead of `rsa.PublicKey` or `rsa.PrivateKey` isn't worth the risk of misuse. - -To replace this behavior, we've added two helper methods: `ParseRSAPrivateKeyFromPEM(key []byte) (*rsa.PrivateKey, error)` and `ParseRSAPublicKeyFromPEM(key []byte) (*rsa.PublicKey, error)`. These are just simple helpers for unpacking PEM encoded PKCS1 and PKCS8 keys. If your keys are encoded any other way, all you need to do is convert them to the `crypto/rsa` package's types. - -```go - func keyLookupFunc(*Token) (interface{}, error) { - // Don't forget to validate the alg is what you expect: - if _, ok := token.Method.(*jwt.SigningMethodRSA); !ok { - return nil, fmt.Errorf("Unexpected signing method: %v", token.Header["alg"]) - } - - // Look up key - key, err := lookupPublicKey(token.Header["kid"]) - if err != nil { - return nil, err - } - - // Unpack key from PEM encoded PKCS8 - return jwt.ParseRSAPublicKeyFromPEM(key) - } -``` diff --git a/vendor/github.com/dgrijalva/jwt-go/README.md b/vendor/github.com/dgrijalva/jwt-go/README.md deleted file mode 100644 index d358d88..0000000 --- a/vendor/github.com/dgrijalva/jwt-go/README.md +++ /dev/null @@ -1,100 +0,0 @@ -# jwt-go - -[![Build Status](https://travis-ci.org/dgrijalva/jwt-go.svg?branch=master)](https://travis-ci.org/dgrijalva/jwt-go) -[![GoDoc](https://godoc.org/github.com/dgrijalva/jwt-go?status.svg)](https://godoc.org/github.com/dgrijalva/jwt-go) - -A [go](http://www.golang.org) (or 'golang' for search engine friendliness) implementation of [JSON Web Tokens](http://self-issued.info/docs/draft-ietf-oauth-json-web-token.html) - -**NEW VERSION COMING:** There have been a lot of improvements suggested since the version 3.0.0 released in 2016. I'm working now on cutting two different releases: 3.2.0 will contain any non-breaking changes or enhancements. 4.0.0 will follow shortly which will include breaking changes. See the 4.0.0 milestone to get an idea of what's coming. If you have other ideas, or would like to participate in 4.0.0, now's the time. If you depend on this library and don't want to be interrupted, I recommend you use your dependency mangement tool to pin to version 3. - -**SECURITY NOTICE:** Some older versions of Go have a security issue in the cryotp/elliptic. Recommendation is to upgrade to at least 1.8.3. See issue #216 for more detail. - -**SECURITY NOTICE:** It's important that you [validate the `alg` presented is what you expect](https://auth0.com/blog/2015/03/31/critical-vulnerabilities-in-json-web-token-libraries/). This library attempts to make it easy to do the right thing by requiring key types match the expected alg, but you should take the extra step to verify it in your usage. See the examples provided. - -## What the heck is a JWT? - -JWT.io has [a great introduction](https://jwt.io/introduction) to JSON Web Tokens. - -In short, it's a signed JSON object that does something useful (for example, authentication). It's commonly used for `Bearer` tokens in Oauth 2. A token is made of three parts, separated by `.`'s. The first two parts are JSON objects, that have been [base64url](http://tools.ietf.org/html/rfc4648) encoded. The last part is the signature, encoded the same way. - -The first part is called the header. It contains the necessary information for verifying the last part, the signature. For example, which encryption method was used for signing and what key was used. - -The part in the middle is the interesting bit. It's called the Claims and contains the actual stuff you care about. Refer to [the RFC](http://self-issued.info/docs/draft-jones-json-web-token.html) for information about reserved keys and the proper way to add your own. - -## What's in the box? - -This library supports the parsing and verification as well as the generation and signing of JWTs. Current supported signing algorithms are HMAC SHA, RSA, RSA-PSS, and ECDSA, though hooks are present for adding your own. - -## Examples - -See [the project documentation](https://godoc.org/github.com/dgrijalva/jwt-go) for examples of usage: - -* [Simple example of parsing and validating a token](https://godoc.org/github.com/dgrijalva/jwt-go#example-Parse--Hmac) -* [Simple example of building and signing a token](https://godoc.org/github.com/dgrijalva/jwt-go#example-New--Hmac) -* [Directory of Examples](https://godoc.org/github.com/dgrijalva/jwt-go#pkg-examples) - -## Extensions - -This library publishes all the necessary components for adding your own signing methods. Simply implement the `SigningMethod` interface and register a factory method using `RegisterSigningMethod`. - -Here's an example of an extension that integrates with the Google App Engine signing tools: https://github.com/someone1/gcp-jwt-go - -## Compliance - -This library was last reviewed to comply with [RTF 7519](http://www.rfc-editor.org/info/rfc7519) dated May 2015 with a few notable differences: - -* In order to protect against accidental use of [Unsecured JWTs](http://self-issued.info/docs/draft-ietf-oauth-json-web-token.html#UnsecuredJWT), tokens using `alg=none` will only be accepted if the constant `jwt.UnsafeAllowNoneSignatureType` is provided as the key. - -## Project Status & Versioning - -This library is considered production ready. Feedback and feature requests are appreciated. The API should be considered stable. There should be very few backwards-incompatible changes outside of major version updates (and only with good reason). - -This project uses [Semantic Versioning 2.0.0](http://semver.org). Accepted pull requests will land on `master`. Periodically, versions will be tagged from `master`. You can find all the releases on [the project releases page](https://github.com/dgrijalva/jwt-go/releases). - -While we try to make it obvious when we make breaking changes, there isn't a great mechanism for pushing announcements out to users. You may want to use this alternative package include: `gopkg.in/dgrijalva/jwt-go.v3`. It will do the right thing WRT semantic versioning. - -**BREAKING CHANGES:*** -* Version 3.0.0 includes _a lot_ of changes from the 2.x line, including a few that break the API. We've tried to break as few things as possible, so there should just be a few type signature changes. A full list of breaking changes is available in `VERSION_HISTORY.md`. See `MIGRATION_GUIDE.md` for more information on updating your code. - -## Usage Tips - -### Signing vs Encryption - -A token is simply a JSON object that is signed by its author. this tells you exactly two things about the data: - -* The author of the token was in the possession of the signing secret -* The data has not been modified since it was signed - -It's important to know that JWT does not provide encryption, which means anyone who has access to the token can read its contents. If you need to protect (encrypt) the data, there is a companion spec, `JWE`, that provides this functionality. JWE is currently outside the scope of this library. - -### Choosing a Signing Method - -There are several signing methods available, and you should probably take the time to learn about the various options before choosing one. The principal design decision is most likely going to be symmetric vs asymmetric. - -Symmetric signing methods, such as HSA, use only a single secret. This is probably the simplest signing method to use since any `[]byte` can be used as a valid secret. They are also slightly computationally faster to use, though this rarely is enough to matter. Symmetric signing methods work the best when both producers and consumers of tokens are trusted, or even the same system. Since the same secret is used to both sign and validate tokens, you can't easily distribute the key for validation. - -Asymmetric signing methods, such as RSA, use different keys for signing and verifying tokens. This makes it possible to produce tokens with a private key, and allow any consumer to access the public key for verification. - -### Signing Methods and Key Types - -Each signing method expects a different object type for its signing keys. See the package documentation for details. Here are the most common ones: - -* The [HMAC signing method](https://godoc.org/github.com/dgrijalva/jwt-go#SigningMethodHMAC) (`HS256`,`HS384`,`HS512`) expect `[]byte` values for signing and validation -* The [RSA signing method](https://godoc.org/github.com/dgrijalva/jwt-go#SigningMethodRSA) (`RS256`,`RS384`,`RS512`) expect `*rsa.PrivateKey` for signing and `*rsa.PublicKey` for validation -* The [ECDSA signing method](https://godoc.org/github.com/dgrijalva/jwt-go#SigningMethodECDSA) (`ES256`,`ES384`,`ES512`) expect `*ecdsa.PrivateKey` for signing and `*ecdsa.PublicKey` for validation - -### JWT and OAuth - -It's worth mentioning that OAuth and JWT are not the same thing. A JWT token is simply a signed JSON object. It can be used anywhere such a thing is useful. There is some confusion, though, as JWT is the most common type of bearer token used in OAuth2 authentication. - -Without going too far down the rabbit hole, here's a description of the interaction of these technologies: - -* OAuth is a protocol for allowing an identity provider to be separate from the service a user is logging in to. For example, whenever you use Facebook to log into a different service (Yelp, Spotify, etc), you are using OAuth. -* OAuth defines several options for passing around authentication data. One popular method is called a "bearer token". A bearer token is simply a string that _should_ only be held by an authenticated user. Thus, simply presenting this token proves your identity. You can probably derive from here why a JWT might make a good bearer token. -* Because bearer tokens are used for authentication, it's important they're kept secret. This is why transactions that use bearer tokens typically happen over SSL. - -## More - -Documentation can be found [on godoc.org](http://godoc.org/github.com/dgrijalva/jwt-go). - -The command line utility included in this project (cmd/jwt) provides a straightforward example of token creation and parsing as well as a useful tool for debugging your own integration. You'll also find several implementation examples in the documentation. diff --git a/vendor/github.com/dgrijalva/jwt-go/VERSION_HISTORY.md b/vendor/github.com/dgrijalva/jwt-go/VERSION_HISTORY.md deleted file mode 100644 index 6370298..0000000 --- a/vendor/github.com/dgrijalva/jwt-go/VERSION_HISTORY.md +++ /dev/null @@ -1,118 +0,0 @@ -## `jwt-go` Version History - -#### 3.2.0 - -* Added method `ParseUnverified` to allow users to split up the tasks of parsing and validation -* HMAC signing method returns `ErrInvalidKeyType` instead of `ErrInvalidKey` where appropriate -* Added options to `request.ParseFromRequest`, which allows for an arbitrary list of modifiers to parsing behavior. Initial set include `WithClaims` and `WithParser`. Existing usage of this function will continue to work as before. -* Deprecated `ParseFromRequestWithClaims` to simplify API in the future. - -#### 3.1.0 - -* Improvements to `jwt` command line tool -* Added `SkipClaimsValidation` option to `Parser` -* Documentation updates - -#### 3.0.0 - -* **Compatibility Breaking Changes**: See MIGRATION_GUIDE.md for tips on updating your code - * Dropped support for `[]byte` keys when using RSA signing methods. This convenience feature could contribute to security vulnerabilities involving mismatched key types with signing methods. - * `ParseFromRequest` has been moved to `request` subpackage and usage has changed - * The `Claims` property on `Token` is now type `Claims` instead of `map[string]interface{}`. The default value is type `MapClaims`, which is an alias to `map[string]interface{}`. This makes it possible to use a custom type when decoding claims. -* Other Additions and Changes - * Added `Claims` interface type to allow users to decode the claims into a custom type - * Added `ParseWithClaims`, which takes a third argument of type `Claims`. Use this function instead of `Parse` if you have a custom type you'd like to decode into. - * Dramatically improved the functionality and flexibility of `ParseFromRequest`, which is now in the `request` subpackage - * Added `ParseFromRequestWithClaims` which is the `FromRequest` equivalent of `ParseWithClaims` - * Added new interface type `Extractor`, which is used for extracting JWT strings from http requests. Used with `ParseFromRequest` and `ParseFromRequestWithClaims`. - * Added several new, more specific, validation errors to error type bitmask - * Moved examples from README to executable example files - * Signing method registry is now thread safe - * Added new property to `ValidationError`, which contains the raw error returned by calls made by parse/verify (such as those returned by keyfunc or json parser) - -#### 2.7.0 - -This will likely be the last backwards compatible release before 3.0.0, excluding essential bug fixes. - -* Added new option `-show` to the `jwt` command that will just output the decoded token without verifying -* Error text for expired tokens includes how long it's been expired -* Fixed incorrect error returned from `ParseRSAPublicKeyFromPEM` -* Documentation updates - -#### 2.6.0 - -* Exposed inner error within ValidationError -* Fixed validation errors when using UseJSONNumber flag -* Added several unit tests - -#### 2.5.0 - -* Added support for signing method none. You shouldn't use this. The API tries to make this clear. -* Updated/fixed some documentation -* Added more helpful error message when trying to parse tokens that begin with `BEARER ` - -#### 2.4.0 - -* Added new type, Parser, to allow for configuration of various parsing parameters - * You can now specify a list of valid signing methods. Anything outside this set will be rejected. - * You can now opt to use the `json.Number` type instead of `float64` when parsing token JSON -* Added support for [Travis CI](https://travis-ci.org/dgrijalva/jwt-go) -* Fixed some bugs with ECDSA parsing - -#### 2.3.0 - -* Added support for ECDSA signing methods -* Added support for RSA PSS signing methods (requires go v1.4) - -#### 2.2.0 - -* Gracefully handle a `nil` `Keyfunc` being passed to `Parse`. Result will now be the parsed token and an error, instead of a panic. - -#### 2.1.0 - -Backwards compatible API change that was missed in 2.0.0. - -* The `SignedString` method on `Token` now takes `interface{}` instead of `[]byte` - -#### 2.0.0 - -There were two major reasons for breaking backwards compatibility with this update. The first was a refactor required to expand the width of the RSA and HMAC-SHA signing implementations. There will likely be no required code changes to support this change. - -The second update, while unfortunately requiring a small change in integration, is required to open up this library to other signing methods. Not all keys used for all signing methods have a single standard on-disk representation. Requiring `[]byte` as the type for all keys proved too limiting. Additionally, this implementation allows for pre-parsed tokens to be reused, which might matter in an application that parses a high volume of tokens with a small set of keys. Backwards compatibilty has been maintained for passing `[]byte` to the RSA signing methods, but they will also accept `*rsa.PublicKey` and `*rsa.PrivateKey`. - -It is likely the only integration change required here will be to change `func(t *jwt.Token) ([]byte, error)` to `func(t *jwt.Token) (interface{}, error)` when calling `Parse`. - -* **Compatibility Breaking Changes** - * `SigningMethodHS256` is now `*SigningMethodHMAC` instead of `type struct` - * `SigningMethodRS256` is now `*SigningMethodRSA` instead of `type struct` - * `KeyFunc` now returns `interface{}` instead of `[]byte` - * `SigningMethod.Sign` now takes `interface{}` instead of `[]byte` for the key - * `SigningMethod.Verify` now takes `interface{}` instead of `[]byte` for the key -* Renamed type `SigningMethodHS256` to `SigningMethodHMAC`. Specific sizes are now just instances of this type. - * Added public package global `SigningMethodHS256` - * Added public package global `SigningMethodHS384` - * Added public package global `SigningMethodHS512` -* Renamed type `SigningMethodRS256` to `SigningMethodRSA`. Specific sizes are now just instances of this type. - * Added public package global `SigningMethodRS256` - * Added public package global `SigningMethodRS384` - * Added public package global `SigningMethodRS512` -* Moved sample private key for HMAC tests from an inline value to a file on disk. Value is unchanged. -* Refactored the RSA implementation to be easier to read -* Exposed helper methods `ParseRSAPrivateKeyFromPEM` and `ParseRSAPublicKeyFromPEM` - -#### 1.0.2 - -* Fixed bug in parsing public keys from certificates -* Added more tests around the parsing of keys for RS256 -* Code refactoring in RS256 implementation. No functional changes - -#### 1.0.1 - -* Fixed panic if RS256 signing method was passed an invalid key - -#### 1.0.0 - -* First versioned release -* API stabilized -* Supports creating, signing, parsing, and validating JWT tokens -* Supports RS256 and HS256 signing methods \ No newline at end of file diff --git a/vendor/github.com/dgrijalva/jwt-go/claims.go b/vendor/github.com/dgrijalva/jwt-go/claims.go deleted file mode 100644 index f0228f0..0000000 --- a/vendor/github.com/dgrijalva/jwt-go/claims.go +++ /dev/null @@ -1,134 +0,0 @@ -package jwt - -import ( - "crypto/subtle" - "fmt" - "time" -) - -// For a type to be a Claims object, it must just have a Valid method that determines -// if the token is invalid for any supported reason -type Claims interface { - Valid() error -} - -// Structured version of Claims Section, as referenced at -// https://tools.ietf.org/html/rfc7519#section-4.1 -// See examples for how to use this with your own claim types -type StandardClaims struct { - Audience string `json:"aud,omitempty"` - ExpiresAt int64 `json:"exp,omitempty"` - Id string `json:"jti,omitempty"` - IssuedAt int64 `json:"iat,omitempty"` - Issuer string `json:"iss,omitempty"` - NotBefore int64 `json:"nbf,omitempty"` - Subject string `json:"sub,omitempty"` -} - -// Validates time based claims "exp, iat, nbf". -// There is no accounting for clock skew. -// As well, if any of the above claims are not in the token, it will still -// be considered a valid claim. -func (c StandardClaims) Valid() error { - vErr := new(ValidationError) - now := TimeFunc().Unix() - - // The claims below are optional, by default, so if they are set to the - // default value in Go, let's not fail the verification for them. - if c.VerifyExpiresAt(now, false) == false { - delta := time.Unix(now, 0).Sub(time.Unix(c.ExpiresAt, 0)) - vErr.Inner = fmt.Errorf("token is expired by %v", delta) - vErr.Errors |= ValidationErrorExpired - } - - if c.VerifyIssuedAt(now, false) == false { - vErr.Inner = fmt.Errorf("Token used before issued") - vErr.Errors |= ValidationErrorIssuedAt - } - - if c.VerifyNotBefore(now, false) == false { - vErr.Inner = fmt.Errorf("token is not valid yet") - vErr.Errors |= ValidationErrorNotValidYet - } - - if vErr.valid() { - return nil - } - - return vErr -} - -// Compares the aud claim against cmp. -// If required is false, this method will return true if the value matches or is unset -func (c *StandardClaims) VerifyAudience(cmp string, req bool) bool { - return verifyAud(c.Audience, cmp, req) -} - -// Compares the exp claim against cmp. -// If required is false, this method will return true if the value matches or is unset -func (c *StandardClaims) VerifyExpiresAt(cmp int64, req bool) bool { - return verifyExp(c.ExpiresAt, cmp, req) -} - -// Compares the iat claim against cmp. -// If required is false, this method will return true if the value matches or is unset -func (c *StandardClaims) VerifyIssuedAt(cmp int64, req bool) bool { - return verifyIat(c.IssuedAt, cmp, req) -} - -// Compares the iss claim against cmp. -// If required is false, this method will return true if the value matches or is unset -func (c *StandardClaims) VerifyIssuer(cmp string, req bool) bool { - return verifyIss(c.Issuer, cmp, req) -} - -// Compares the nbf claim against cmp. -// If required is false, this method will return true if the value matches or is unset -func (c *StandardClaims) VerifyNotBefore(cmp int64, req bool) bool { - return verifyNbf(c.NotBefore, cmp, req) -} - -// ----- helpers - -func verifyAud(aud string, cmp string, required bool) bool { - if aud == "" { - return !required - } - if subtle.ConstantTimeCompare([]byte(aud), []byte(cmp)) != 0 { - return true - } else { - return false - } -} - -func verifyExp(exp int64, now int64, required bool) bool { - if exp == 0 { - return !required - } - return now <= exp -} - -func verifyIat(iat int64, now int64, required bool) bool { - if iat == 0 { - return !required - } - return now >= iat -} - -func verifyIss(iss string, cmp string, required bool) bool { - if iss == "" { - return !required - } - if subtle.ConstantTimeCompare([]byte(iss), []byte(cmp)) != 0 { - return true - } else { - return false - } -} - -func verifyNbf(nbf int64, now int64, required bool) bool { - if nbf == 0 { - return !required - } - return now >= nbf -} diff --git a/vendor/github.com/dgrijalva/jwt-go/doc.go b/vendor/github.com/dgrijalva/jwt-go/doc.go deleted file mode 100644 index a86dc1a..0000000 --- a/vendor/github.com/dgrijalva/jwt-go/doc.go +++ /dev/null @@ -1,4 +0,0 @@ -// Package jwt is a Go implementation of JSON Web Tokens: http://self-issued.info/docs/draft-jones-json-web-token.html -// -// See README.md for more info. -package jwt diff --git a/vendor/github.com/dgrijalva/jwt-go/ecdsa.go b/vendor/github.com/dgrijalva/jwt-go/ecdsa.go deleted file mode 100644 index f977381..0000000 --- a/vendor/github.com/dgrijalva/jwt-go/ecdsa.go +++ /dev/null @@ -1,148 +0,0 @@ -package jwt - -import ( - "crypto" - "crypto/ecdsa" - "crypto/rand" - "errors" - "math/big" -) - -var ( - // Sadly this is missing from crypto/ecdsa compared to crypto/rsa - ErrECDSAVerification = errors.New("crypto/ecdsa: verification error") -) - -// Implements the ECDSA family of signing methods signing methods -// Expects *ecdsa.PrivateKey for signing and *ecdsa.PublicKey for verification -type SigningMethodECDSA struct { - Name string - Hash crypto.Hash - KeySize int - CurveBits int -} - -// Specific instances for EC256 and company -var ( - SigningMethodES256 *SigningMethodECDSA - SigningMethodES384 *SigningMethodECDSA - SigningMethodES512 *SigningMethodECDSA -) - -func init() { - // ES256 - SigningMethodES256 = &SigningMethodECDSA{"ES256", crypto.SHA256, 32, 256} - RegisterSigningMethod(SigningMethodES256.Alg(), func() SigningMethod { - return SigningMethodES256 - }) - - // ES384 - SigningMethodES384 = &SigningMethodECDSA{"ES384", crypto.SHA384, 48, 384} - RegisterSigningMethod(SigningMethodES384.Alg(), func() SigningMethod { - return SigningMethodES384 - }) - - // ES512 - SigningMethodES512 = &SigningMethodECDSA{"ES512", crypto.SHA512, 66, 521} - RegisterSigningMethod(SigningMethodES512.Alg(), func() SigningMethod { - return SigningMethodES512 - }) -} - -func (m *SigningMethodECDSA) Alg() string { - return m.Name -} - -// Implements the Verify method from SigningMethod -// For this verify method, key must be an ecdsa.PublicKey struct -func (m *SigningMethodECDSA) Verify(signingString, signature string, key interface{}) error { - var err error - - // Decode the signature - var sig []byte - if sig, err = DecodeSegment(signature); err != nil { - return err - } - - // Get the key - var ecdsaKey *ecdsa.PublicKey - switch k := key.(type) { - case *ecdsa.PublicKey: - ecdsaKey = k - default: - return ErrInvalidKeyType - } - - if len(sig) != 2*m.KeySize { - return ErrECDSAVerification - } - - r := big.NewInt(0).SetBytes(sig[:m.KeySize]) - s := big.NewInt(0).SetBytes(sig[m.KeySize:]) - - // Create hasher - if !m.Hash.Available() { - return ErrHashUnavailable - } - hasher := m.Hash.New() - hasher.Write([]byte(signingString)) - - // Verify the signature - if verifystatus := ecdsa.Verify(ecdsaKey, hasher.Sum(nil), r, s); verifystatus == true { - return nil - } else { - return ErrECDSAVerification - } -} - -// Implements the Sign method from SigningMethod -// For this signing method, key must be an ecdsa.PrivateKey struct -func (m *SigningMethodECDSA) Sign(signingString string, key interface{}) (string, error) { - // Get the key - var ecdsaKey *ecdsa.PrivateKey - switch k := key.(type) { - case *ecdsa.PrivateKey: - ecdsaKey = k - default: - return "", ErrInvalidKeyType - } - - // Create the hasher - if !m.Hash.Available() { - return "", ErrHashUnavailable - } - - hasher := m.Hash.New() - hasher.Write([]byte(signingString)) - - // Sign the string and return r, s - if r, s, err := ecdsa.Sign(rand.Reader, ecdsaKey, hasher.Sum(nil)); err == nil { - curveBits := ecdsaKey.Curve.Params().BitSize - - if m.CurveBits != curveBits { - return "", ErrInvalidKey - } - - keyBytes := curveBits / 8 - if curveBits%8 > 0 { - keyBytes += 1 - } - - // We serialize the outpus (r and s) into big-endian byte arrays and pad - // them with zeros on the left to make sure the sizes work out. Both arrays - // must be keyBytes long, and the output must be 2*keyBytes long. - rBytes := r.Bytes() - rBytesPadded := make([]byte, keyBytes) - copy(rBytesPadded[keyBytes-len(rBytes):], rBytes) - - sBytes := s.Bytes() - sBytesPadded := make([]byte, keyBytes) - copy(sBytesPadded[keyBytes-len(sBytes):], sBytes) - - out := append(rBytesPadded, sBytesPadded...) - - return EncodeSegment(out), nil - } else { - return "", err - } -} diff --git a/vendor/github.com/dgrijalva/jwt-go/ecdsa_utils.go b/vendor/github.com/dgrijalva/jwt-go/ecdsa_utils.go deleted file mode 100644 index d19624b..0000000 --- a/vendor/github.com/dgrijalva/jwt-go/ecdsa_utils.go +++ /dev/null @@ -1,67 +0,0 @@ -package jwt - -import ( - "crypto/ecdsa" - "crypto/x509" - "encoding/pem" - "errors" -) - -var ( - ErrNotECPublicKey = errors.New("Key is not a valid ECDSA public key") - ErrNotECPrivateKey = errors.New("Key is not a valid ECDSA private key") -) - -// Parse PEM encoded Elliptic Curve Private Key Structure -func ParseECPrivateKeyFromPEM(key []byte) (*ecdsa.PrivateKey, error) { - var err error - - // Parse PEM block - var block *pem.Block - if block, _ = pem.Decode(key); block == nil { - return nil, ErrKeyMustBePEMEncoded - } - - // Parse the key - var parsedKey interface{} - if parsedKey, err = x509.ParseECPrivateKey(block.Bytes); err != nil { - return nil, err - } - - var pkey *ecdsa.PrivateKey - var ok bool - if pkey, ok = parsedKey.(*ecdsa.PrivateKey); !ok { - return nil, ErrNotECPrivateKey - } - - return pkey, nil -} - -// Parse PEM encoded PKCS1 or PKCS8 public key -func ParseECPublicKeyFromPEM(key []byte) (*ecdsa.PublicKey, error) { - var err error - - // Parse PEM block - var block *pem.Block - if block, _ = pem.Decode(key); block == nil { - return nil, ErrKeyMustBePEMEncoded - } - - // Parse the key - var parsedKey interface{} - if parsedKey, err = x509.ParsePKIXPublicKey(block.Bytes); err != nil { - if cert, err := x509.ParseCertificate(block.Bytes); err == nil { - parsedKey = cert.PublicKey - } else { - return nil, err - } - } - - var pkey *ecdsa.PublicKey - var ok bool - if pkey, ok = parsedKey.(*ecdsa.PublicKey); !ok { - return nil, ErrNotECPublicKey - } - - return pkey, nil -} diff --git a/vendor/github.com/dgrijalva/jwt-go/errors.go b/vendor/github.com/dgrijalva/jwt-go/errors.go deleted file mode 100644 index 1c93024..0000000 --- a/vendor/github.com/dgrijalva/jwt-go/errors.go +++ /dev/null @@ -1,59 +0,0 @@ -package jwt - -import ( - "errors" -) - -// Error constants -var ( - ErrInvalidKey = errors.New("key is invalid") - ErrInvalidKeyType = errors.New("key is of invalid type") - ErrHashUnavailable = errors.New("the requested hash function is unavailable") -) - -// The errors that might occur when parsing and validating a token -const ( - ValidationErrorMalformed uint32 = 1 << iota // Token is malformed - ValidationErrorUnverifiable // Token could not be verified because of signing problems - ValidationErrorSignatureInvalid // Signature validation failed - - // Standard Claim validation errors - ValidationErrorAudience // AUD validation failed - ValidationErrorExpired // EXP validation failed - ValidationErrorIssuedAt // IAT validation failed - ValidationErrorIssuer // ISS validation failed - ValidationErrorNotValidYet // NBF validation failed - ValidationErrorId // JTI validation failed - ValidationErrorClaimsInvalid // Generic claims validation error -) - -// Helper for constructing a ValidationError with a string error message -func NewValidationError(errorText string, errorFlags uint32) *ValidationError { - return &ValidationError{ - text: errorText, - Errors: errorFlags, - } -} - -// The error from Parse if token is not valid -type ValidationError struct { - Inner error // stores the error returned by external dependencies, i.e.: KeyFunc - Errors uint32 // bitfield. see ValidationError... constants - text string // errors that do not have a valid error just have text -} - -// Validation error is an error type -func (e ValidationError) Error() string { - if e.Inner != nil { - return e.Inner.Error() - } else if e.text != "" { - return e.text - } else { - return "token is invalid" - } -} - -// No errors -func (e *ValidationError) valid() bool { - return e.Errors == 0 -} diff --git a/vendor/github.com/dgrijalva/jwt-go/hmac.go b/vendor/github.com/dgrijalva/jwt-go/hmac.go deleted file mode 100644 index addbe5d..0000000 --- a/vendor/github.com/dgrijalva/jwt-go/hmac.go +++ /dev/null @@ -1,95 +0,0 @@ -package jwt - -import ( - "crypto" - "crypto/hmac" - "errors" -) - -// Implements the HMAC-SHA family of signing methods signing methods -// Expects key type of []byte for both signing and validation -type SigningMethodHMAC struct { - Name string - Hash crypto.Hash -} - -// Specific instances for HS256 and company -var ( - SigningMethodHS256 *SigningMethodHMAC - SigningMethodHS384 *SigningMethodHMAC - SigningMethodHS512 *SigningMethodHMAC - ErrSignatureInvalid = errors.New("signature is invalid") -) - -func init() { - // HS256 - SigningMethodHS256 = &SigningMethodHMAC{"HS256", crypto.SHA256} - RegisterSigningMethod(SigningMethodHS256.Alg(), func() SigningMethod { - return SigningMethodHS256 - }) - - // HS384 - SigningMethodHS384 = &SigningMethodHMAC{"HS384", crypto.SHA384} - RegisterSigningMethod(SigningMethodHS384.Alg(), func() SigningMethod { - return SigningMethodHS384 - }) - - // HS512 - SigningMethodHS512 = &SigningMethodHMAC{"HS512", crypto.SHA512} - RegisterSigningMethod(SigningMethodHS512.Alg(), func() SigningMethod { - return SigningMethodHS512 - }) -} - -func (m *SigningMethodHMAC) Alg() string { - return m.Name -} - -// Verify the signature of HSXXX tokens. Returns nil if the signature is valid. -func (m *SigningMethodHMAC) Verify(signingString, signature string, key interface{}) error { - // Verify the key is the right type - keyBytes, ok := key.([]byte) - if !ok { - return ErrInvalidKeyType - } - - // Decode signature, for comparison - sig, err := DecodeSegment(signature) - if err != nil { - return err - } - - // Can we use the specified hashing method? - if !m.Hash.Available() { - return ErrHashUnavailable - } - - // This signing method is symmetric, so we validate the signature - // by reproducing the signature from the signing string and key, then - // comparing that against the provided signature. - hasher := hmac.New(m.Hash.New, keyBytes) - hasher.Write([]byte(signingString)) - if !hmac.Equal(sig, hasher.Sum(nil)) { - return ErrSignatureInvalid - } - - // No validation errors. Signature is good. - return nil -} - -// Implements the Sign method from SigningMethod for this signing method. -// Key must be []byte -func (m *SigningMethodHMAC) Sign(signingString string, key interface{}) (string, error) { - if keyBytes, ok := key.([]byte); ok { - if !m.Hash.Available() { - return "", ErrHashUnavailable - } - - hasher := hmac.New(m.Hash.New, keyBytes) - hasher.Write([]byte(signingString)) - - return EncodeSegment(hasher.Sum(nil)), nil - } - - return "", ErrInvalidKeyType -} diff --git a/vendor/github.com/dgrijalva/jwt-go/map_claims.go b/vendor/github.com/dgrijalva/jwt-go/map_claims.go deleted file mode 100644 index 291213c..0000000 --- a/vendor/github.com/dgrijalva/jwt-go/map_claims.go +++ /dev/null @@ -1,94 +0,0 @@ -package jwt - -import ( - "encoding/json" - "errors" - // "fmt" -) - -// Claims type that uses the map[string]interface{} for JSON decoding -// This is the default claims type if you don't supply one -type MapClaims map[string]interface{} - -// Compares the aud claim against cmp. -// If required is false, this method will return true if the value matches or is unset -func (m MapClaims) VerifyAudience(cmp string, req bool) bool { - aud, _ := m["aud"].(string) - return verifyAud(aud, cmp, req) -} - -// Compares the exp claim against cmp. -// If required is false, this method will return true if the value matches or is unset -func (m MapClaims) VerifyExpiresAt(cmp int64, req bool) bool { - switch exp := m["exp"].(type) { - case float64: - return verifyExp(int64(exp), cmp, req) - case json.Number: - v, _ := exp.Int64() - return verifyExp(v, cmp, req) - } - return req == false -} - -// Compares the iat claim against cmp. -// If required is false, this method will return true if the value matches or is unset -func (m MapClaims) VerifyIssuedAt(cmp int64, req bool) bool { - switch iat := m["iat"].(type) { - case float64: - return verifyIat(int64(iat), cmp, req) - case json.Number: - v, _ := iat.Int64() - return verifyIat(v, cmp, req) - } - return req == false -} - -// Compares the iss claim against cmp. -// If required is false, this method will return true if the value matches or is unset -func (m MapClaims) VerifyIssuer(cmp string, req bool) bool { - iss, _ := m["iss"].(string) - return verifyIss(iss, cmp, req) -} - -// Compares the nbf claim against cmp. -// If required is false, this method will return true if the value matches or is unset -func (m MapClaims) VerifyNotBefore(cmp int64, req bool) bool { - switch nbf := m["nbf"].(type) { - case float64: - return verifyNbf(int64(nbf), cmp, req) - case json.Number: - v, _ := nbf.Int64() - return verifyNbf(v, cmp, req) - } - return req == false -} - -// Validates time based claims "exp, iat, nbf". -// There is no accounting for clock skew. -// As well, if any of the above claims are not in the token, it will still -// be considered a valid claim. -func (m MapClaims) Valid() error { - vErr := new(ValidationError) - now := TimeFunc().Unix() - - if m.VerifyExpiresAt(now, false) == false { - vErr.Inner = errors.New("Token is expired") - vErr.Errors |= ValidationErrorExpired - } - - if m.VerifyIssuedAt(now, false) == false { - vErr.Inner = errors.New("Token used before issued") - vErr.Errors |= ValidationErrorIssuedAt - } - - if m.VerifyNotBefore(now, false) == false { - vErr.Inner = errors.New("Token is not valid yet") - vErr.Errors |= ValidationErrorNotValidYet - } - - if vErr.valid() { - return nil - } - - return vErr -} diff --git a/vendor/github.com/dgrijalva/jwt-go/none.go b/vendor/github.com/dgrijalva/jwt-go/none.go deleted file mode 100644 index f04d189..0000000 --- a/vendor/github.com/dgrijalva/jwt-go/none.go +++ /dev/null @@ -1,52 +0,0 @@ -package jwt - -// Implements the none signing method. This is required by the spec -// but you probably should never use it. -var SigningMethodNone *signingMethodNone - -const UnsafeAllowNoneSignatureType unsafeNoneMagicConstant = "none signing method allowed" - -var NoneSignatureTypeDisallowedError error - -type signingMethodNone struct{} -type unsafeNoneMagicConstant string - -func init() { - SigningMethodNone = &signingMethodNone{} - NoneSignatureTypeDisallowedError = NewValidationError("'none' signature type is not allowed", ValidationErrorSignatureInvalid) - - RegisterSigningMethod(SigningMethodNone.Alg(), func() SigningMethod { - return SigningMethodNone - }) -} - -func (m *signingMethodNone) Alg() string { - return "none" -} - -// Only allow 'none' alg type if UnsafeAllowNoneSignatureType is specified as the key -func (m *signingMethodNone) Verify(signingString, signature string, key interface{}) (err error) { - // Key must be UnsafeAllowNoneSignatureType to prevent accidentally - // accepting 'none' signing method - if _, ok := key.(unsafeNoneMagicConstant); !ok { - return NoneSignatureTypeDisallowedError - } - // If signing method is none, signature must be an empty string - if signature != "" { - return NewValidationError( - "'none' signing method with non-empty signature", - ValidationErrorSignatureInvalid, - ) - } - - // Accept 'none' signing method. - return nil -} - -// Only allow 'none' signing if UnsafeAllowNoneSignatureType is specified as the key -func (m *signingMethodNone) Sign(signingString string, key interface{}) (string, error) { - if _, ok := key.(unsafeNoneMagicConstant); ok { - return "", nil - } - return "", NoneSignatureTypeDisallowedError -} diff --git a/vendor/github.com/dgrijalva/jwt-go/parser.go b/vendor/github.com/dgrijalva/jwt-go/parser.go deleted file mode 100644 index d6901d9..0000000 --- a/vendor/github.com/dgrijalva/jwt-go/parser.go +++ /dev/null @@ -1,148 +0,0 @@ -package jwt - -import ( - "bytes" - "encoding/json" - "fmt" - "strings" -) - -type Parser struct { - ValidMethods []string // If populated, only these methods will be considered valid - UseJSONNumber bool // Use JSON Number format in JSON decoder - SkipClaimsValidation bool // Skip claims validation during token parsing -} - -// Parse, validate, and return a token. -// keyFunc will receive the parsed token and should return the key for validating. -// If everything is kosher, err will be nil -func (p *Parser) Parse(tokenString string, keyFunc Keyfunc) (*Token, error) { - return p.ParseWithClaims(tokenString, MapClaims{}, keyFunc) -} - -func (p *Parser) ParseWithClaims(tokenString string, claims Claims, keyFunc Keyfunc) (*Token, error) { - token, parts, err := p.ParseUnverified(tokenString, claims) - if err != nil { - return token, err - } - - // Verify signing method is in the required set - if p.ValidMethods != nil { - var signingMethodValid = false - var alg = token.Method.Alg() - for _, m := range p.ValidMethods { - if m == alg { - signingMethodValid = true - break - } - } - if !signingMethodValid { - // signing method is not in the listed set - return token, NewValidationError(fmt.Sprintf("signing method %v is invalid", alg), ValidationErrorSignatureInvalid) - } - } - - // Lookup key - var key interface{} - if keyFunc == nil { - // keyFunc was not provided. short circuiting validation - return token, NewValidationError("no Keyfunc was provided.", ValidationErrorUnverifiable) - } - if key, err = keyFunc(token); err != nil { - // keyFunc returned an error - if ve, ok := err.(*ValidationError); ok { - return token, ve - } - return token, &ValidationError{Inner: err, Errors: ValidationErrorUnverifiable} - } - - vErr := &ValidationError{} - - // Validate Claims - if !p.SkipClaimsValidation { - if err := token.Claims.Valid(); err != nil { - - // If the Claims Valid returned an error, check if it is a validation error, - // If it was another error type, create a ValidationError with a generic ClaimsInvalid flag set - if e, ok := err.(*ValidationError); !ok { - vErr = &ValidationError{Inner: err, Errors: ValidationErrorClaimsInvalid} - } else { - vErr = e - } - } - } - - // Perform validation - token.Signature = parts[2] - if err = token.Method.Verify(strings.Join(parts[0:2], "."), token.Signature, key); err != nil { - vErr.Inner = err - vErr.Errors |= ValidationErrorSignatureInvalid - } - - if vErr.valid() { - token.Valid = true - return token, nil - } - - return token, vErr -} - -// WARNING: Don't use this method unless you know what you're doing -// -// This method parses the token but doesn't validate the signature. It's only -// ever useful in cases where you know the signature is valid (because it has -// been checked previously in the stack) and you want to extract values from -// it. -func (p *Parser) ParseUnverified(tokenString string, claims Claims) (token *Token, parts []string, err error) { - parts = strings.Split(tokenString, ".") - if len(parts) != 3 { - return nil, parts, NewValidationError("token contains an invalid number of segments", ValidationErrorMalformed) - } - - token = &Token{Raw: tokenString} - - // parse Header - var headerBytes []byte - if headerBytes, err = DecodeSegment(parts[0]); err != nil { - if strings.HasPrefix(strings.ToLower(tokenString), "bearer ") { - return token, parts, NewValidationError("tokenstring should not contain 'bearer '", ValidationErrorMalformed) - } - return token, parts, &ValidationError{Inner: err, Errors: ValidationErrorMalformed} - } - if err = json.Unmarshal(headerBytes, &token.Header); err != nil { - return token, parts, &ValidationError{Inner: err, Errors: ValidationErrorMalformed} - } - - // parse Claims - var claimBytes []byte - token.Claims = claims - - if claimBytes, err = DecodeSegment(parts[1]); err != nil { - return token, parts, &ValidationError{Inner: err, Errors: ValidationErrorMalformed} - } - dec := json.NewDecoder(bytes.NewBuffer(claimBytes)) - if p.UseJSONNumber { - dec.UseNumber() - } - // JSON Decode. Special case for map type to avoid weird pointer behavior - if c, ok := token.Claims.(MapClaims); ok { - err = dec.Decode(&c) - } else { - err = dec.Decode(&claims) - } - // Handle decode error - if err != nil { - return token, parts, &ValidationError{Inner: err, Errors: ValidationErrorMalformed} - } - - // Lookup signature method - if method, ok := token.Header["alg"].(string); ok { - if token.Method = GetSigningMethod(method); token.Method == nil { - return token, parts, NewValidationError("signing method (alg) is unavailable.", ValidationErrorUnverifiable) - } - } else { - return token, parts, NewValidationError("signing method (alg) is unspecified.", ValidationErrorUnverifiable) - } - - return token, parts, nil -} diff --git a/vendor/github.com/dgrijalva/jwt-go/rsa.go b/vendor/github.com/dgrijalva/jwt-go/rsa.go deleted file mode 100644 index e4caf1c..0000000 --- a/vendor/github.com/dgrijalva/jwt-go/rsa.go +++ /dev/null @@ -1,101 +0,0 @@ -package jwt - -import ( - "crypto" - "crypto/rand" - "crypto/rsa" -) - -// Implements the RSA family of signing methods signing methods -// Expects *rsa.PrivateKey for signing and *rsa.PublicKey for validation -type SigningMethodRSA struct { - Name string - Hash crypto.Hash -} - -// Specific instances for RS256 and company -var ( - SigningMethodRS256 *SigningMethodRSA - SigningMethodRS384 *SigningMethodRSA - SigningMethodRS512 *SigningMethodRSA -) - -func init() { - // RS256 - SigningMethodRS256 = &SigningMethodRSA{"RS256", crypto.SHA256} - RegisterSigningMethod(SigningMethodRS256.Alg(), func() SigningMethod { - return SigningMethodRS256 - }) - - // RS384 - SigningMethodRS384 = &SigningMethodRSA{"RS384", crypto.SHA384} - RegisterSigningMethod(SigningMethodRS384.Alg(), func() SigningMethod { - return SigningMethodRS384 - }) - - // RS512 - SigningMethodRS512 = &SigningMethodRSA{"RS512", crypto.SHA512} - RegisterSigningMethod(SigningMethodRS512.Alg(), func() SigningMethod { - return SigningMethodRS512 - }) -} - -func (m *SigningMethodRSA) Alg() string { - return m.Name -} - -// Implements the Verify method from SigningMethod -// For this signing method, must be an *rsa.PublicKey structure. -func (m *SigningMethodRSA) Verify(signingString, signature string, key interface{}) error { - var err error - - // Decode the signature - var sig []byte - if sig, err = DecodeSegment(signature); err != nil { - return err - } - - var rsaKey *rsa.PublicKey - var ok bool - - if rsaKey, ok = key.(*rsa.PublicKey); !ok { - return ErrInvalidKeyType - } - - // Create hasher - if !m.Hash.Available() { - return ErrHashUnavailable - } - hasher := m.Hash.New() - hasher.Write([]byte(signingString)) - - // Verify the signature - return rsa.VerifyPKCS1v15(rsaKey, m.Hash, hasher.Sum(nil), sig) -} - -// Implements the Sign method from SigningMethod -// For this signing method, must be an *rsa.PrivateKey structure. -func (m *SigningMethodRSA) Sign(signingString string, key interface{}) (string, error) { - var rsaKey *rsa.PrivateKey - var ok bool - - // Validate type of key - if rsaKey, ok = key.(*rsa.PrivateKey); !ok { - return "", ErrInvalidKey - } - - // Create the hasher - if !m.Hash.Available() { - return "", ErrHashUnavailable - } - - hasher := m.Hash.New() - hasher.Write([]byte(signingString)) - - // Sign the string and return the encoded bytes - if sigBytes, err := rsa.SignPKCS1v15(rand.Reader, rsaKey, m.Hash, hasher.Sum(nil)); err == nil { - return EncodeSegment(sigBytes), nil - } else { - return "", err - } -} diff --git a/vendor/github.com/dgrijalva/jwt-go/rsa_pss.go b/vendor/github.com/dgrijalva/jwt-go/rsa_pss.go deleted file mode 100644 index 10ee9db..0000000 --- a/vendor/github.com/dgrijalva/jwt-go/rsa_pss.go +++ /dev/null @@ -1,126 +0,0 @@ -// +build go1.4 - -package jwt - -import ( - "crypto" - "crypto/rand" - "crypto/rsa" -) - -// Implements the RSAPSS family of signing methods signing methods -type SigningMethodRSAPSS struct { - *SigningMethodRSA - Options *rsa.PSSOptions -} - -// Specific instances for RS/PS and company -var ( - SigningMethodPS256 *SigningMethodRSAPSS - SigningMethodPS384 *SigningMethodRSAPSS - SigningMethodPS512 *SigningMethodRSAPSS -) - -func init() { - // PS256 - SigningMethodPS256 = &SigningMethodRSAPSS{ - &SigningMethodRSA{ - Name: "PS256", - Hash: crypto.SHA256, - }, - &rsa.PSSOptions{ - SaltLength: rsa.PSSSaltLengthAuto, - Hash: crypto.SHA256, - }, - } - RegisterSigningMethod(SigningMethodPS256.Alg(), func() SigningMethod { - return SigningMethodPS256 - }) - - // PS384 - SigningMethodPS384 = &SigningMethodRSAPSS{ - &SigningMethodRSA{ - Name: "PS384", - Hash: crypto.SHA384, - }, - &rsa.PSSOptions{ - SaltLength: rsa.PSSSaltLengthAuto, - Hash: crypto.SHA384, - }, - } - RegisterSigningMethod(SigningMethodPS384.Alg(), func() SigningMethod { - return SigningMethodPS384 - }) - - // PS512 - SigningMethodPS512 = &SigningMethodRSAPSS{ - &SigningMethodRSA{ - Name: "PS512", - Hash: crypto.SHA512, - }, - &rsa.PSSOptions{ - SaltLength: rsa.PSSSaltLengthAuto, - Hash: crypto.SHA512, - }, - } - RegisterSigningMethod(SigningMethodPS512.Alg(), func() SigningMethod { - return SigningMethodPS512 - }) -} - -// Implements the Verify method from SigningMethod -// For this verify method, key must be an rsa.PublicKey struct -func (m *SigningMethodRSAPSS) Verify(signingString, signature string, key interface{}) error { - var err error - - // Decode the signature - var sig []byte - if sig, err = DecodeSegment(signature); err != nil { - return err - } - - var rsaKey *rsa.PublicKey - switch k := key.(type) { - case *rsa.PublicKey: - rsaKey = k - default: - return ErrInvalidKey - } - - // Create hasher - if !m.Hash.Available() { - return ErrHashUnavailable - } - hasher := m.Hash.New() - hasher.Write([]byte(signingString)) - - return rsa.VerifyPSS(rsaKey, m.Hash, hasher.Sum(nil), sig, m.Options) -} - -// Implements the Sign method from SigningMethod -// For this signing method, key must be an rsa.PrivateKey struct -func (m *SigningMethodRSAPSS) Sign(signingString string, key interface{}) (string, error) { - var rsaKey *rsa.PrivateKey - - switch k := key.(type) { - case *rsa.PrivateKey: - rsaKey = k - default: - return "", ErrInvalidKeyType - } - - // Create the hasher - if !m.Hash.Available() { - return "", ErrHashUnavailable - } - - hasher := m.Hash.New() - hasher.Write([]byte(signingString)) - - // Sign the string and return the encoded bytes - if sigBytes, err := rsa.SignPSS(rand.Reader, rsaKey, m.Hash, hasher.Sum(nil), m.Options); err == nil { - return EncodeSegment(sigBytes), nil - } else { - return "", err - } -} diff --git a/vendor/github.com/dgrijalva/jwt-go/rsa_utils.go b/vendor/github.com/dgrijalva/jwt-go/rsa_utils.go deleted file mode 100644 index a5ababf..0000000 --- a/vendor/github.com/dgrijalva/jwt-go/rsa_utils.go +++ /dev/null @@ -1,101 +0,0 @@ -package jwt - -import ( - "crypto/rsa" - "crypto/x509" - "encoding/pem" - "errors" -) - -var ( - ErrKeyMustBePEMEncoded = errors.New("Invalid Key: Key must be PEM encoded PKCS1 or PKCS8 private key") - ErrNotRSAPrivateKey = errors.New("Key is not a valid RSA private key") - ErrNotRSAPublicKey = errors.New("Key is not a valid RSA public key") -) - -// Parse PEM encoded PKCS1 or PKCS8 private key -func ParseRSAPrivateKeyFromPEM(key []byte) (*rsa.PrivateKey, error) { - var err error - - // Parse PEM block - var block *pem.Block - if block, _ = pem.Decode(key); block == nil { - return nil, ErrKeyMustBePEMEncoded - } - - var parsedKey interface{} - if parsedKey, err = x509.ParsePKCS1PrivateKey(block.Bytes); err != nil { - if parsedKey, err = x509.ParsePKCS8PrivateKey(block.Bytes); err != nil { - return nil, err - } - } - - var pkey *rsa.PrivateKey - var ok bool - if pkey, ok = parsedKey.(*rsa.PrivateKey); !ok { - return nil, ErrNotRSAPrivateKey - } - - return pkey, nil -} - -// Parse PEM encoded PKCS1 or PKCS8 private key protected with password -func ParseRSAPrivateKeyFromPEMWithPassword(key []byte, password string) (*rsa.PrivateKey, error) { - var err error - - // Parse PEM block - var block *pem.Block - if block, _ = pem.Decode(key); block == nil { - return nil, ErrKeyMustBePEMEncoded - } - - var parsedKey interface{} - - var blockDecrypted []byte - if blockDecrypted, err = x509.DecryptPEMBlock(block, []byte(password)); err != nil { - return nil, err - } - - if parsedKey, err = x509.ParsePKCS1PrivateKey(blockDecrypted); err != nil { - if parsedKey, err = x509.ParsePKCS8PrivateKey(blockDecrypted); err != nil { - return nil, err - } - } - - var pkey *rsa.PrivateKey - var ok bool - if pkey, ok = parsedKey.(*rsa.PrivateKey); !ok { - return nil, ErrNotRSAPrivateKey - } - - return pkey, nil -} - -// Parse PEM encoded PKCS1 or PKCS8 public key -func ParseRSAPublicKeyFromPEM(key []byte) (*rsa.PublicKey, error) { - var err error - - // Parse PEM block - var block *pem.Block - if block, _ = pem.Decode(key); block == nil { - return nil, ErrKeyMustBePEMEncoded - } - - // Parse the key - var parsedKey interface{} - if parsedKey, err = x509.ParsePKIXPublicKey(block.Bytes); err != nil { - if cert, err := x509.ParseCertificate(block.Bytes); err == nil { - parsedKey = cert.PublicKey - } else { - return nil, err - } - } - - var pkey *rsa.PublicKey - var ok bool - if pkey, ok = parsedKey.(*rsa.PublicKey); !ok { - return nil, ErrNotRSAPublicKey - } - - return pkey, nil -} diff --git a/vendor/github.com/dgrijalva/jwt-go/signing_method.go b/vendor/github.com/dgrijalva/jwt-go/signing_method.go deleted file mode 100644 index ed1f212..0000000 --- a/vendor/github.com/dgrijalva/jwt-go/signing_method.go +++ /dev/null @@ -1,35 +0,0 @@ -package jwt - -import ( - "sync" -) - -var signingMethods = map[string]func() SigningMethod{} -var signingMethodLock = new(sync.RWMutex) - -// Implement SigningMethod to add new methods for signing or verifying tokens. -type SigningMethod interface { - Verify(signingString, signature string, key interface{}) error // Returns nil if signature is valid - Sign(signingString string, key interface{}) (string, error) // Returns encoded signature or error - Alg() string // returns the alg identifier for this method (example: 'HS256') -} - -// Register the "alg" name and a factory function for signing method. -// This is typically done during init() in the method's implementation -func RegisterSigningMethod(alg string, f func() SigningMethod) { - signingMethodLock.Lock() - defer signingMethodLock.Unlock() - - signingMethods[alg] = f -} - -// Get a signing method from an "alg" string -func GetSigningMethod(alg string) (method SigningMethod) { - signingMethodLock.RLock() - defer signingMethodLock.RUnlock() - - if methodF, ok := signingMethods[alg]; ok { - method = methodF() - } - return -} diff --git a/vendor/github.com/dgrijalva/jwt-go/token.go b/vendor/github.com/dgrijalva/jwt-go/token.go deleted file mode 100644 index d637e08..0000000 --- a/vendor/github.com/dgrijalva/jwt-go/token.go +++ /dev/null @@ -1,108 +0,0 @@ -package jwt - -import ( - "encoding/base64" - "encoding/json" - "strings" - "time" -) - -// TimeFunc provides the current time when parsing token to validate "exp" claim (expiration time). -// You can override it to use another time value. This is useful for testing or if your -// server uses a different time zone than your tokens. -var TimeFunc = time.Now - -// Parse methods use this callback function to supply -// the key for verification. The function receives the parsed, -// but unverified Token. This allows you to use properties in the -// Header of the token (such as `kid`) to identify which key to use. -type Keyfunc func(*Token) (interface{}, error) - -// A JWT Token. Different fields will be used depending on whether you're -// creating or parsing/verifying a token. -type Token struct { - Raw string // The raw token. Populated when you Parse a token - Method SigningMethod // The signing method used or to be used - Header map[string]interface{} // The first segment of the token - Claims Claims // The second segment of the token - Signature string // The third segment of the token. Populated when you Parse a token - Valid bool // Is the token valid? Populated when you Parse/Verify a token -} - -// Create a new Token. Takes a signing method -func New(method SigningMethod) *Token { - return NewWithClaims(method, MapClaims{}) -} - -func NewWithClaims(method SigningMethod, claims Claims) *Token { - return &Token{ - Header: map[string]interface{}{ - "typ": "JWT", - "alg": method.Alg(), - }, - Claims: claims, - Method: method, - } -} - -// Get the complete, signed token -func (t *Token) SignedString(key interface{}) (string, error) { - var sig, sstr string - var err error - if sstr, err = t.SigningString(); err != nil { - return "", err - } - if sig, err = t.Method.Sign(sstr, key); err != nil { - return "", err - } - return strings.Join([]string{sstr, sig}, "."), nil -} - -// Generate the signing string. This is the -// most expensive part of the whole deal. Unless you -// need this for something special, just go straight for -// the SignedString. -func (t *Token) SigningString() (string, error) { - var err error - parts := make([]string, 2) - for i, _ := range parts { - var jsonValue []byte - if i == 0 { - if jsonValue, err = json.Marshal(t.Header); err != nil { - return "", err - } - } else { - if jsonValue, err = json.Marshal(t.Claims); err != nil { - return "", err - } - } - - parts[i] = EncodeSegment(jsonValue) - } - return strings.Join(parts, "."), nil -} - -// Parse, validate, and return a token. -// keyFunc will receive the parsed token and should return the key for validating. -// If everything is kosher, err will be nil -func Parse(tokenString string, keyFunc Keyfunc) (*Token, error) { - return new(Parser).Parse(tokenString, keyFunc) -} - -func ParseWithClaims(tokenString string, claims Claims, keyFunc Keyfunc) (*Token, error) { - return new(Parser).ParseWithClaims(tokenString, claims, keyFunc) -} - -// Encode JWT specific base64url encoding with padding stripped -func EncodeSegment(seg []byte) string { - return strings.TrimRight(base64.URLEncoding.EncodeToString(seg), "=") -} - -// Decode JWT specific base64url encoding with padding stripped -func DecodeSegment(seg string) ([]byte, error) { - if l := len(seg) % 4; l > 0 { - seg += strings.Repeat("=", 4-l) - } - - return base64.URLEncoding.DecodeString(seg) -} diff --git a/vendor/github.com/dlclark/regexp2/.gitignore b/vendor/github.com/dlclark/regexp2/.gitignore deleted file mode 100644 index fb844c3..0000000 --- a/vendor/github.com/dlclark/regexp2/.gitignore +++ /dev/null @@ -1,27 +0,0 @@ -# Compiled Object files, Static and Dynamic libs (Shared Objects) -*.o -*.a -*.so - -# Folders -_obj -_test - -# Architecture specific extensions/prefixes -*.[568vq] -[568vq].out - -*.cgo1.go -*.cgo2.c -_cgo_defun.c -_cgo_gotypes.go -_cgo_export.* - -_testmain.go - -*.exe -*.test -*.prof -*.out - -.DS_Store diff --git a/vendor/github.com/dlclark/regexp2/.travis.yml b/vendor/github.com/dlclark/regexp2/.travis.yml deleted file mode 100644 index a24aede..0000000 --- a/vendor/github.com/dlclark/regexp2/.travis.yml +++ /dev/null @@ -1,5 +0,0 @@ -language: go - -go: - - 1.5 - - tip \ No newline at end of file diff --git a/vendor/github.com/dlclark/regexp2/ATTRIB b/vendor/github.com/dlclark/regexp2/ATTRIB deleted file mode 100644 index cdf4560..0000000 --- a/vendor/github.com/dlclark/regexp2/ATTRIB +++ /dev/null @@ -1,133 +0,0 @@ -============ -These pieces of code were ported from dotnet/corefx: - -syntax/charclass.go (from RegexCharClass.cs): ported to use the built-in Go unicode classes. Canonicalize is - a direct port, but most of the other code required large changes because the C# implementation - used a string to represent the CharSet data structure and I cleaned that up in my implementation. - -syntax/code.go (from RegexCode.cs): ported literally with various cleanups and layout to make it more Go-ish. - -syntax/escape.go (from RegexParser.cs): ported Escape method and added some optimizations. Unescape is inspired by - the C# implementation but couldn't be directly ported because of the lack of do-while syntax in Go. - -syntax/parser.go (from RegexpParser.cs and RegexOptions.cs): ported parser struct and associated methods as - literally as possible. Several language differences required changes. E.g. lack pre/post-fix increments as - expressions, lack of do-while loops, lack of overloads, etc. - -syntax/prefix.go (from RegexFCD.cs and RegexBoyerMoore.cs): ported as literally as possible and added support - for unicode chars that are longer than the 16-bit char in C# for the 32-bit rune in Go. - -syntax/replacerdata.go (from RegexReplacement.cs): conceptually ported and re-organized to handle differences - in charclass implementation, and fix odd code layout between RegexParser.cs, Regex.cs, and RegexReplacement.cs. - -syntax/tree.go (from RegexTree.cs and RegexNode.cs): ported literally as possible. - -syntax/writer.go (from RegexWriter.cs): ported literally with minor changes to make it more Go-ish. - -match.go (from RegexMatch.cs): ported, simplified, and changed to handle Go's lack of inheritence. - -regexp.go (from Regex.cs and RegexOptions.cs): conceptually serves the same "starting point", but is simplified - and changed to handle differences in C# strings and Go strings/runes. - -replace.go (from RegexReplacement.cs): ported closely and then cleaned up to combine the MatchEvaluator and - simple string replace implementations. - -runner.go (from RegexRunner.cs): ported literally as possible. - -regexp_test.go (from CaptureTests.cs and GroupNamesAndNumbers.cs): conceptually ported, but the code was - manually structured like Go tests. - -replace_test.go (from RegexReplaceStringTest0.cs): conceptually ported - -rtl_test.go (from RightToLeft.cs): conceptually ported ---- -dotnet/corefx was released under this license: - -The MIT License (MIT) - -Copyright (c) Microsoft Corporation - -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. - -============ -These pieces of code are copied from the Go framework: - -- The overall directory structure of regexp2 was inspired by the Go runtime regexp package. -- The optimization in the escape method of syntax/escape.go is from the Go runtime QuoteMeta() func in regexp/regexp.go -- The method signatures in regexp.go are designed to match the Go framework regexp methods closely -- func regexp2.MustCompile and func quote are almost identifical to the regexp package versions -- BenchmarkMatch* and TestProgramTooLong* funcs in regexp_performance_test.go were copied from the framework - regexp/exec_test.go ---- -The Go framework was released under this license: - -Copyright (c) 2012 The Go Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -============ -Some test data were gathered from the Mono project. - -regexp_mono_test.go: ported from https://github.com/mono/mono/blob/master/mcs/class/System/Test/System.Text.RegularExpressions/PerlTrials.cs ---- -Mono tests released under this 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/dlclark/regexp2/LICENSE b/vendor/github.com/dlclark/regexp2/LICENSE deleted file mode 100644 index fe83dfd..0000000 --- a/vendor/github.com/dlclark/regexp2/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Doug Clark - -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/dlclark/regexp2/README.md b/vendor/github.com/dlclark/regexp2/README.md deleted file mode 100644 index ec7b5ab..0000000 --- a/vendor/github.com/dlclark/regexp2/README.md +++ /dev/null @@ -1,82 +0,0 @@ -# regexp2 - full featured regular expressions for Go -Regexp2 is a feature-rich RegExp engine for Go. It doesn't have constant time guarantees like the built-in `regexp` package, but it allows backtracking and is compatible with Perl5 and .NET. You'll likely be better off with the RE2 engine from the `regexp` package and should only use this if you need to write very complex patterns or require compatibility with .NET. - -## Basis of the engine -The engine is ported from the .NET framework's System.Text.RegularExpressions.Regex engine. That engine was open sourced in 2015 under the MIT license. There are some fundamental differences between .NET strings and Go strings that required a bit of borrowing from the Go framework regex engine as well. I cleaned up a couple of the dirtier bits during the port (regexcharclass.cs was terrible), but the parse tree, code emmitted, and therefore patterns matched should be identical. - -## Installing -This is a go-gettable library, so install is easy: - - go get github.com/dlclark/regexp2/... - -## Usage -Usage is similar to the Go `regexp` package. Just like in `regexp`, you start by converting a regex into a state machine via the `Compile` or `MustCompile` methods. They ultimately do the same thing, but `MustCompile` will panic if the regex is invalid. You can then use the provided `Regexp` struct to find matches repeatedly. A `Regexp` struct is safe to use across goroutines. - -```go -re := regexp2.MustCompile(`Your pattern`, 0) -if isMatch, _ := re.MatchString(`Something to match`); isMatch { - //do something -} -``` - -The only error that the `*Match*` methods *should* return is a Timeout if you set the `re.MatchTimeout` field. Any other error is a bug in the `regexp2` package. If you need more details about capture groups in a match then use the `FindStringMatch` method, like so: - -```go -if m, _ := re.FindStringMatch(`Something to match`); m != nil { - // the whole match is always group 0 - fmt.Printf("Group 0: %v\n", m.String()) - - // you can get all the groups too - gps := m.Groups() - - // a group can be captured multiple times, so each cap is separately addressable - fmt.Printf("Group 1, first capture", gps[1].Captures[0].String()) - fmt.Printf("Group 1, second capture", gps[1].Captures[1].String()) -} -``` - -Group 0 is embedded in the Match. Group 0 is an automatically-assigned group that encompasses the whole pattern. This means that `m.String()` is the same as `m.Group.String()` and `m.Groups()[0].String()` - -The __last__ capture is embedded in each group, so `g.String()` will return the same thing as `g.Capture.String()` and `g.Captures[len(g.Captures)-1].String()`. - -## Compare `regexp` and `regexp2` -| Category | regexp | regexp2 | -| --- | --- | --- | -| Catastrophic backtracking possible | no, constant execution time guarantees | yes, if your pattern is at risk you can use the `re.MatchTimeout` field | -| Python-style capture groups `(Pre)` | yes | no | -| .NET-style capture groups `(re)` or `('name're)` | no | yes | -| comments `(?#comment)` | no | yes | -| branch numbering reset `(?\|a\|b)` | no | no | -| possessive match `(?>re)` | no | yes | -| positive lookahead `(?=re)` | no | yes | -| negative lookahead `(?!re)` | no | yes | -| positive lookbehind `(?<=re)` | no | yes | -| negative lookbehind `(?re)`) - -```go -re := regexp2.MustCompile(`Your RE2-compatible pattern`, regexp2.RE2) -if isMatch, _ := re.MatchString(`Something to match`); isMatch { - //do something -} -``` - -This feature is a work in progress and I'm open to ideas for more things to put here (maybe more relaxed character escaping rules?). - - -## Library features that I'm still working on -- Regex split - -## Potential bugs -I've run a battery of tests against regexp2 from various sources and found the debug output matches the .NET engine, but .NET and Go handle strings very differently. I've attempted to handle these differences, but most of my testing deals with basic ASCII with a little bit of multi-byte Unicode. There's a chance that there are bugs in the string handling related to character sets with supplementary Unicode chars. Right-to-Left support is coded, but not well tested either. - -## Find a bug? -I'm open to new issues and pull requests with tests if you find something odd! diff --git a/vendor/github.com/dlclark/regexp2/match.go b/vendor/github.com/dlclark/regexp2/match.go deleted file mode 100644 index 1871cff..0000000 --- a/vendor/github.com/dlclark/regexp2/match.go +++ /dev/null @@ -1,347 +0,0 @@ -package regexp2 - -import ( - "bytes" - "fmt" -) - -// Match is a single regex result match that contains groups and repeated captures -// -Groups -// -Capture -type Match struct { - Group //embeded group 0 - - regex *Regexp - otherGroups []Group - - // input to the match - textpos int - textstart int - - capcount int - caps []int - sparseCaps map[int]int - - // output from the match - matches [][]int - matchcount []int - - // whether we've done any balancing with this match. If we - // have done balancing, we'll need to do extra work in Tidy(). - balancing bool -} - -// Group is an explicit or implit (group 0) matched group within the pattern -type Group struct { - Capture // the last capture of this group is embeded for ease of use - - Name string // group name - Captures []Capture // captures of this group -} - -// Capture is a single capture of text within the larger original string -type Capture struct { - // the original string - text []rune - // the position in the original string where the first character of - // captured substring was found. - Index int - // the length of the captured substring. - Length int -} - -// String returns the captured text as a String -func (c *Capture) String() string { - return string(c.text[c.Index : c.Index+c.Length]) -} - -// Runes returns the captured text as a rune slice -func (c *Capture) Runes() []rune { - return c.text[c.Index : c.Index+c.Length] -} - -func newMatch(regex *Regexp, capcount int, text []rune, startpos int) *Match { - m := Match{ - regex: regex, - matchcount: make([]int, capcount), - matches: make([][]int, capcount), - textstart: startpos, - balancing: false, - } - m.Name = "0" - m.text = text - m.matches[0] = make([]int, 2) - return &m -} - -func newMatchSparse(regex *Regexp, caps map[int]int, capcount int, text []rune, startpos int) *Match { - m := newMatch(regex, capcount, text, startpos) - m.sparseCaps = caps - return m -} - -func (m *Match) reset(text []rune, textstart int) { - m.text = text - m.textstart = textstart - for i := 0; i < len(m.matchcount); i++ { - m.matchcount[i] = 0 - } - m.balancing = false -} - -func (m *Match) tidy(textpos int) { - - interval := m.matches[0] - m.Index = interval[0] - m.Length = interval[1] - m.textpos = textpos - m.capcount = m.matchcount[0] - //copy our root capture to the list - m.Group.Captures = []Capture{m.Group.Capture} - - if m.balancing { - // The idea here is that we want to compact all of our unbalanced captures. To do that we - // use j basically as a count of how many unbalanced captures we have at any given time - // (really j is an index, but j/2 is the count). First we skip past all of the real captures - // until we find a balance captures. Then we check each subsequent entry. If it's a balance - // capture (it's negative), we decrement j. If it's a real capture, we increment j and copy - // it down to the last free position. - for cap := 0; cap < len(m.matchcount); cap++ { - limit := m.matchcount[cap] * 2 - matcharray := m.matches[cap] - - var i, j int - - for i = 0; i < limit; i++ { - if matcharray[i] < 0 { - break - } - } - - for j = i; i < limit; i++ { - if matcharray[i] < 0 { - // skip negative values - j-- - } else { - // but if we find something positive (an actual capture), copy it back to the last - // unbalanced position. - if i != j { - matcharray[j] = matcharray[i] - } - j++ - } - } - - m.matchcount[cap] = j / 2 - } - - m.balancing = false - } -} - -// isMatched tells if a group was matched by capnum -func (m *Match) isMatched(cap int) bool { - return cap < len(m.matchcount) && m.matchcount[cap] > 0 && m.matches[cap][m.matchcount[cap]*2-1] != (-3+1) -} - -// matchIndex returns the index of the last specified matched group by capnum -func (m *Match) matchIndex(cap int) int { - i := m.matches[cap][m.matchcount[cap]*2-2] - if i >= 0 { - return i - } - - return m.matches[cap][-3-i] -} - -// matchLength returns the length of the last specified matched group by capnum -func (m *Match) matchLength(cap int) int { - i := m.matches[cap][m.matchcount[cap]*2-1] - if i >= 0 { - return i - } - - return m.matches[cap][-3-i] -} - -// Nonpublic builder: add a capture to the group specified by "c" -func (m *Match) addMatch(c, start, l int) { - - if m.matches[c] == nil { - m.matches[c] = make([]int, 2) - } - - capcount := m.matchcount[c] - - if capcount*2+2 > len(m.matches[c]) { - oldmatches := m.matches[c] - newmatches := make([]int, capcount*8) - copy(newmatches, oldmatches[:capcount*2]) - m.matches[c] = newmatches - } - - m.matches[c][capcount*2] = start - m.matches[c][capcount*2+1] = l - m.matchcount[c] = capcount + 1 - //log.Printf("addMatch: c=%v, i=%v, l=%v ... matches: %v", c, start, l, m.matches) -} - -// Nonpublic builder: Add a capture to balance the specified group. This is used by the -// balanced match construct. (?...) -// -// If there were no such thing as backtracking, this would be as simple as calling RemoveMatch(c). -// However, since we have backtracking, we need to keep track of everything. -func (m *Match) balanceMatch(c int) { - m.balancing = true - - // we'll look at the last capture first - capcount := m.matchcount[c] - target := capcount*2 - 2 - - // first see if it is negative, and therefore is a reference to the next available - // capture group for balancing. If it is, we'll reset target to point to that capture. - if m.matches[c][target] < 0 { - target = -3 - m.matches[c][target] - } - - // move back to the previous capture - target -= 2 - - // if the previous capture is a reference, just copy that reference to the end. Otherwise, point to it. - if target >= 0 && m.matches[c][target] < 0 { - m.addMatch(c, m.matches[c][target], m.matches[c][target+1]) - } else { - m.addMatch(c, -3-target, -4-target /* == -3 - (target + 1) */) - } -} - -// Nonpublic builder: removes a group match by capnum -func (m *Match) removeMatch(c int) { - m.matchcount[c]-- -} - -// GroupCount returns the number of groups this match has matched -func (m *Match) GroupCount() int { - return len(m.matchcount) -} - -// GroupByName returns a group based on the name of the group, or nil if the group name does not exist -func (m *Match) GroupByName(name string) *Group { - num := m.regex.GroupNumberFromName(name) - if num < 0 { - return nil - } - return m.GroupByNumber(num) -} - -// GroupByNumber returns a group based on the number of the group, or nil if the group number does not exist -func (m *Match) GroupByNumber(num int) *Group { - // check our sparse map - if m.sparseCaps != nil { - if newNum, ok := m.sparseCaps[num]; ok { - num = newNum - } - } - if num >= len(m.matchcount) || num < 0 { - return nil - } - - if num == 0 { - return &m.Group - } - - m.populateOtherGroups() - - return &m.otherGroups[num-1] -} - -// Groups returns all the capture groups, starting with group 0 (the full match) -func (m *Match) Groups() []Group { - m.populateOtherGroups() - g := make([]Group, len(m.otherGroups)+1) - g[0] = m.Group - copy(g[1:], m.otherGroups) - return g -} - -func (m *Match) populateOtherGroups() { - // Construct all the Group objects first time called - if m.otherGroups == nil { - m.otherGroups = make([]Group, len(m.matchcount)-1) - for i := 0; i < len(m.otherGroups); i++ { - m.otherGroups[i] = newGroup(m.regex.GroupNameFromNumber(i+1), m.text, m.matches[i+1], m.matchcount[i+1]) - } - } -} - -func (m *Match) groupValueAppendToBuf(groupnum int, buf *bytes.Buffer) { - c := m.matchcount[groupnum] - if c == 0 { - return - } - - matches := m.matches[groupnum] - - index := matches[(c-1)*2] - last := index + matches[(c*2)-1] - - for ; index < last; index++ { - buf.WriteRune(m.text[index]) - } -} - -func newGroup(name string, text []rune, caps []int, capcount int) Group { - g := Group{} - g.text = text - if capcount > 0 { - g.Index = caps[(capcount-1)*2] - g.Length = caps[(capcount*2)-1] - } - g.Name = name - g.Captures = make([]Capture, capcount) - for i := 0; i < capcount; i++ { - g.Captures[i] = Capture{ - text: text, - Index: caps[i*2], - Length: caps[i*2+1], - } - } - //log.Printf("newGroup! capcount %v, %+v", capcount, g) - - return g -} - -func (m *Match) dump() string { - buf := &bytes.Buffer{} - buf.WriteRune('\n') - if len(m.sparseCaps) > 0 { - for k, v := range m.sparseCaps { - fmt.Fprintf(buf, "Slot %v -> %v\n", k, v) - } - } - - for i, g := range m.Groups() { - fmt.Fprintf(buf, "Group %v (%v), %v caps:\n", i, g.Name, len(g.Captures)) - - for _, c := range g.Captures { - fmt.Fprintf(buf, " (%v, %v) %v\n", c.Index, c.Length, c.String()) - } - } - /* - for i := 0; i < len(m.matchcount); i++ { - fmt.Fprintf(buf, "\nGroup %v (%v):\n", i, m.regex.GroupNameFromNumber(i)) - - for j := 0; j < m.matchcount[i]; j++ { - text := "" - - if m.matches[i][j*2] >= 0 { - start := m.matches[i][j*2] - text = m.text[start : start+m.matches[i][j*2+1]] - } - - fmt.Fprintf(buf, " (%v, %v) %v\n", m.matches[i][j*2], m.matches[i][j*2+1], text) - } - } - */ - return buf.String() -} diff --git a/vendor/github.com/dlclark/regexp2/regexp.go b/vendor/github.com/dlclark/regexp2/regexp.go deleted file mode 100644 index 709e034..0000000 --- a/vendor/github.com/dlclark/regexp2/regexp.go +++ /dev/null @@ -1,358 +0,0 @@ -/* -Package regexp2 is a regexp package that has an interface similar to Go's framework regexp engine but uses a -more feature full regex engine behind the scenes. - -It doesn't have constant time guarantees, but it allows backtracking and is compatible with Perl5 and .NET. -You'll likely be better off with the RE2 engine from the regexp package and should only use this if you -need to write very complex patterns or require compatibility with .NET. -*/ -package regexp2 - -import ( - "errors" - "math" - "strconv" - "sync" - "time" - - "github.com/dlclark/regexp2/syntax" -) - -// Default timeout used when running regexp matches -- "forever" -var DefaultMatchTimeout = time.Duration(math.MaxInt64) - -// Regexp is the representation of a compiled regular expression. -// A Regexp is safe for concurrent use by multiple goroutines. -type Regexp struct { - //timeout when trying to find matches - MatchTimeout time.Duration - - // read-only after Compile - pattern string // as passed to Compile - options RegexOptions // options - - caps map[int]int // capnum->index - capnames map[string]int //capture group name -> index - capslist []string //sorted list of capture group names - capsize int // size of the capture array - - code *syntax.Code // compiled program - - // cache of machines for running regexp - muRun sync.Mutex - runner []*runner -} - -// Compile parses a regular expression and returns, if successful, -// a Regexp object that can be used to match against text. -func Compile(expr string, opt RegexOptions) (*Regexp, error) { - // parse it - tree, err := syntax.Parse(expr, syntax.RegexOptions(opt)) - if err != nil { - return nil, err - } - - // translate it to code - code, err := syntax.Write(tree) - if err != nil { - return nil, err - } - - // return it - return &Regexp{ - pattern: expr, - options: opt, - caps: code.Caps, - capnames: tree.Capnames, - capslist: tree.Caplist, - capsize: code.Capsize, - code: code, - MatchTimeout: DefaultMatchTimeout, - }, nil -} - -// MustCompile is like Compile but panics if the expression cannot be parsed. -// It simplifies safe initialization of global variables holding compiled regular -// expressions. -func MustCompile(str string, opt RegexOptions) *Regexp { - regexp, error := Compile(str, opt) - if error != nil { - panic(`regexp2: Compile(` + quote(str) + `): ` + error.Error()) - } - return regexp -} - -// Escape adds backslashes to any special characters in the input string -func Escape(input string) string { - return syntax.Escape(input) -} - -// Unescape removes any backslashes from previously-escaped special characters in the input string -func Unescape(input string) (string, error) { - return syntax.Unescape(input) -} - -// String returns the source text used to compile the regular expression. -func (re *Regexp) String() string { - return re.pattern -} - -func quote(s string) string { - if strconv.CanBackquote(s) { - return "`" + s + "`" - } - return strconv.Quote(s) -} - -// RegexOptions impact the runtime and parsing behavior -// for each specific regex. They are setable in code as well -// as in the regex pattern itself. -type RegexOptions int32 - -const ( - None RegexOptions = 0x0 - IgnoreCase = 0x0001 // "i" - Multiline = 0x0002 // "m" - ExplicitCapture = 0x0004 // "n" - Compiled = 0x0008 // "c" - Singleline = 0x0010 // "s" - IgnorePatternWhitespace = 0x0020 // "x" - RightToLeft = 0x0040 // "r" - Debug = 0x0080 // "d" - ECMAScript = 0x0100 // "e" - RE2 = 0x0200 // RE2 (regexp package) compatibility mode -) - -func (re *Regexp) RightToLeft() bool { - return re.options&RightToLeft != 0 -} - -func (re *Regexp) Debug() bool { - return re.options&Debug != 0 -} - -// Replace searches the input string and replaces each match found with the replacement text. -// Count will limit the number of matches attempted and startAt will allow -// us to skip past possible matches at the start of the input (left or right depending on RightToLeft option). -// Set startAt and count to -1 to go through the whole string -func (re *Regexp) Replace(input, replacement string, startAt, count int) (string, error) { - data, err := syntax.NewReplacerData(replacement, re.caps, re.capsize, re.capnames, syntax.RegexOptions(re.options)) - if err != nil { - return "", err - } - //TODO: cache ReplacerData - - return replace(re, data, nil, input, startAt, count) -} - -// ReplaceFunc searches the input string and replaces each match found using the string from the evaluator -// Count will limit the number of matches attempted and startAt will allow -// us to skip past possible matches at the start of the input (left or right depending on RightToLeft option). -// Set startAt and count to -1 to go through the whole string. -func (re *Regexp) ReplaceFunc(input string, evaluator MatchEvaluator, startAt, count int) (string, error) { - return replace(re, nil, evaluator, input, startAt, count) -} - -// FindStringMatch searches the input string for a Regexp match -func (re *Regexp) FindStringMatch(s string) (*Match, error) { - // convert string to runes - return re.run(false, -1, getRunes(s)) -} - -// FindRunesMatch searches the input rune slice for a Regexp match -func (re *Regexp) FindRunesMatch(r []rune) (*Match, error) { - return re.run(false, -1, r) -} - -// FindStringMatchStartingAt searches the input string for a Regexp match starting at the startAt index -func (re *Regexp) FindStringMatchStartingAt(s string, startAt int) (*Match, error) { - if startAt > len(s) { - return nil, errors.New("startAt must be less than the length of the input string") - } - r, startAt := re.getRunesAndStart(s, startAt) - if startAt == -1 { - // we didn't find our start index in the string -- that's a problem - return nil, errors.New("startAt must align to the start of a valid rune in the input string") - } - - return re.run(false, startAt, r) -} - -// FindRunesMatchStartingAt searches the input rune slice for a Regexp match starting at the startAt index -func (re *Regexp) FindRunesMatchStartingAt(r []rune, startAt int) (*Match, error) { - return re.run(false, startAt, r) -} - -// FindNextMatch returns the next match in the same input string as the match parameter. -// Will return nil if there is no next match or if given a nil match. -func (re *Regexp) FindNextMatch(m *Match) (*Match, error) { - if m == nil { - return nil, nil - } - - // If previous match was empty, advance by one before matching to prevent - // infinite loop - startAt := m.textpos - if m.Length == 0 { - if m.textpos == len(m.text) { - return nil, nil - } - - if re.RightToLeft() { - startAt-- - } else { - startAt++ - } - } - return re.run(false, startAt, m.text) -} - -// MatchString return true if the string matches the regex -// error will be set if a timeout occurs -func (re *Regexp) MatchString(s string) (bool, error) { - m, err := re.run(true, -1, getRunes(s)) - if err != nil { - return false, err - } - return m != nil, nil -} - -func (re *Regexp) getRunesAndStart(s string, startAt int) ([]rune, int) { - if startAt < 0 { - if re.RightToLeft() { - r := getRunes(s) - return r, len(r) - } - return getRunes(s), 0 - } - ret := make([]rune, len(s)) - i := 0 - runeIdx := -1 - for strIdx, r := range s { - if strIdx == startAt { - runeIdx = i - } - ret[i] = r - i++ - } - return ret[:i], runeIdx -} - -func getRunes(s string) []rune { - ret := make([]rune, len(s)) - i := 0 - for _, r := range s { - ret[i] = r - i++ - } - return ret[:i] -} - -// MatchRunes return true if the runes matches the regex -// error will be set if a timeout occurs -func (re *Regexp) MatchRunes(r []rune) (bool, error) { - m, err := re.run(true, -1, r) - if err != nil { - return false, err - } - return m != nil, nil -} - -// GetGroupNames Returns the set of strings used to name capturing groups in the expression. -func (re *Regexp) GetGroupNames() []string { - var result []string - - if re.capslist == nil { - result = make([]string, re.capsize) - - for i := 0; i < len(result); i++ { - result[i] = strconv.Itoa(i) - } - } else { - result = make([]string, len(re.capslist)) - copy(result, re.capslist) - } - - return result -} - -// GetGroupNumbers returns the integer group numbers corresponding to a group name. -func (re *Regexp) GetGroupNumbers() []int { - var result []int - - if re.caps == nil { - result = make([]int, re.capsize) - - for i := 0; i < len(result); i++ { - result[i] = i - } - } else { - result = make([]int, len(re.caps)) - - for k, v := range re.caps { - result[v] = k - } - } - - return result -} - -// GroupNameFromNumber retrieves a group name that corresponds to a group number. -// It will return "" for and unknown group number. Unnamed groups automatically -// receive a name that is the decimal string equivalent of its number. -func (re *Regexp) GroupNameFromNumber(i int) string { - if re.capslist == nil { - if i >= 0 && i < re.capsize { - return strconv.Itoa(i) - } - - return "" - } - - if re.caps != nil { - var ok bool - if i, ok = re.caps[i]; !ok { - return "" - } - } - - if i >= 0 && i < len(re.capslist) { - return re.capslist[i] - } - - return "" -} - -// GroupNumberFromName returns a group number that corresponds to a group name. -// Returns -1 if the name is not a recognized group name. Numbered groups -// automatically get a group name that is the decimal string equivalent of its number. -func (re *Regexp) GroupNumberFromName(name string) int { - // look up name if we have a hashtable of names - if re.capnames != nil { - if k, ok := re.capnames[name]; ok { - return k - } - - return -1 - } - - // convert to an int if it looks like a number - result := 0 - for i := 0; i < len(name); i++ { - ch := name[i] - - if ch > '9' || ch < '0' { - return -1 - } - - result *= 10 - result += int(ch - '0') - } - - // return int if it's in range - if result >= 0 && result < re.capsize { - return result - } - - return -1 -} diff --git a/vendor/github.com/dlclark/regexp2/replace.go b/vendor/github.com/dlclark/regexp2/replace.go deleted file mode 100644 index 0376bd9..0000000 --- a/vendor/github.com/dlclark/regexp2/replace.go +++ /dev/null @@ -1,177 +0,0 @@ -package regexp2 - -import ( - "bytes" - "errors" - - "github.com/dlclark/regexp2/syntax" -) - -const ( - replaceSpecials = 4 - replaceLeftPortion = -1 - replaceRightPortion = -2 - replaceLastGroup = -3 - replaceWholeString = -4 -) - -// MatchEvaluator is a function that takes a match and returns a replacement string to be used -type MatchEvaluator func(Match) string - -// Three very similar algorithms appear below: replace (pattern), -// replace (evaluator), and split. - -// Replace Replaces all occurrences of the regex in the string with the -// replacement pattern. -// -// Note that the special case of no matches is handled on its own: -// with no matches, the input string is returned unchanged. -// The right-to-left case is split out because StringBuilder -// doesn't handle right-to-left string building directly very well. -func replace(regex *Regexp, data *syntax.ReplacerData, evaluator MatchEvaluator, input string, startAt, count int) (string, error) { - if count < -1 { - return "", errors.New("Count too small") - } - if count == 0 { - return "", nil - } - - m, err := regex.FindStringMatchStartingAt(input, startAt) - - if err != nil { - return "", err - } - if m == nil { - return input, nil - } - - buf := &bytes.Buffer{} - text := m.text - - if !regex.RightToLeft() { - prevat := 0 - for m != nil { - if m.Index != prevat { - buf.WriteString(string(text[prevat:m.Index])) - } - prevat = m.Index + m.Length - if evaluator == nil { - replacementImpl(data, buf, m) - } else { - buf.WriteString(evaluator(*m)) - } - - count-- - if count == 0 { - break - } - m, err = regex.FindNextMatch(m) - if err != nil { - return "", nil - } - } - - if prevat < len(text) { - buf.WriteString(string(text[prevat:])) - } - } else { - prevat := len(text) - var al []string - - for m != nil { - if m.Index+m.Length != prevat { - al = append(al, string(text[m.Index+m.Length:prevat])) - } - prevat = m.Index - if evaluator == nil { - replacementImplRTL(data, &al, m) - } else { - al = append(al, evaluator(*m)) - } - - count-- - if count == 0 { - break - } - m, err = regex.FindNextMatch(m) - if err != nil { - return "", nil - } - } - - if prevat > 0 { - buf.WriteString(string(text[:prevat])) - } - - for i := len(al) - 1; i >= 0; i-- { - buf.WriteString(al[i]) - } - } - - return buf.String(), nil -} - -// Given a Match, emits into the StringBuilder the evaluated -// substitution pattern. -func replacementImpl(data *syntax.ReplacerData, buf *bytes.Buffer, m *Match) { - for _, r := range data.Rules { - - if r >= 0 { // string lookup - buf.WriteString(data.Strings[r]) - } else if r < -replaceSpecials { // group lookup - m.groupValueAppendToBuf(-replaceSpecials-1-r, buf) - } else { - switch -replaceSpecials - 1 - r { // special insertion patterns - case replaceLeftPortion: - for i := 0; i < m.Index; i++ { - buf.WriteRune(m.text[i]) - } - case replaceRightPortion: - for i := m.Index + m.Length; i < len(m.text); i++ { - buf.WriteRune(m.text[i]) - } - case replaceLastGroup: - m.groupValueAppendToBuf(m.GroupCount()-1, buf) - case replaceWholeString: - for i := 0; i < len(m.text); i++ { - buf.WriteRune(m.text[i]) - } - } - } - } -} - -func replacementImplRTL(data *syntax.ReplacerData, al *[]string, m *Match) { - l := *al - buf := &bytes.Buffer{} - - for _, r := range data.Rules { - buf.Reset() - if r >= 0 { // string lookup - l = append(l, data.Strings[r]) - } else if r < -replaceSpecials { // group lookup - m.groupValueAppendToBuf(-replaceSpecials-1-r, buf) - l = append(l, buf.String()) - } else { - switch -replaceSpecials - 1 - r { // special insertion patterns - case replaceLeftPortion: - for i := 0; i < m.Index; i++ { - buf.WriteRune(m.text[i]) - } - case replaceRightPortion: - for i := m.Index + m.Length; i < len(m.text); i++ { - buf.WriteRune(m.text[i]) - } - case replaceLastGroup: - m.groupValueAppendToBuf(m.GroupCount()-1, buf) - case replaceWholeString: - for i := 0; i < len(m.text); i++ { - buf.WriteRune(m.text[i]) - } - } - l = append(l, buf.String()) - } - } - - *al = l -} diff --git a/vendor/github.com/dlclark/regexp2/runner.go b/vendor/github.com/dlclark/regexp2/runner.go deleted file mode 100644 index 2d84a93..0000000 --- a/vendor/github.com/dlclark/regexp2/runner.go +++ /dev/null @@ -1,1621 +0,0 @@ -package regexp2 - -import ( - "bytes" - "errors" - "fmt" - "math" - "strconv" - "strings" - "time" - "unicode" - - "github.com/dlclark/regexp2/syntax" -) - -type runner struct { - re *Regexp - code *syntax.Code - - runtextstart int // starting point for search - - runtext []rune // text to search - runtextpos int // current position in text - runtextend int - - // The backtracking stack. Opcodes use this to store data regarding - // what they have matched and where to backtrack to. Each "frame" on - // the stack takes the form of [CodePosition Data1 Data2...], where - // CodePosition is the position of the current opcode and - // the data values are all optional. The CodePosition can be negative, and - // these values (also called "back2") are used by the BranchMark family of opcodes - // to indicate whether they are backtracking after a successful or failed - // match. - // When we backtrack, we pop the CodePosition off the stack, set the current - // instruction pointer to that code position, and mark the opcode - // with a backtracking flag ("Back"). Each opcode then knows how to - // handle its own data. - runtrack []int - runtrackpos int - - // This stack is used to track text positions across different opcodes. - // For example, in /(a*b)+/, the parentheses result in a SetMark/CaptureMark - // pair. SetMark records the text position before we match a*b. Then - // CaptureMark uses that position to figure out where the capture starts. - // Opcodes which push onto this stack are always paired with other opcodes - // which will pop the value from it later. A successful match should mean - // that this stack is empty. - runstack []int - runstackpos int - - // The crawl stack is used to keep track of captures. Every time a group - // has a capture, we push its group number onto the runcrawl stack. In - // the case of a balanced match, we push BOTH groups onto the stack. - runcrawl []int - runcrawlpos int - - runtrackcount int // count of states that may do backtracking - - runmatch *Match // result object - - ignoreTimeout bool - timeout time.Duration // timeout in milliseconds (needed for actual) - timeoutChecksToSkip int - timeoutAt time.Time - - operator syntax.InstOp - codepos int - rightToLeft bool - caseInsensitive bool -} - -// run searches for matches and can continue from the previous match -// -// quick is usually false, but can be true to not return matches, just put it in caches -// textstart is -1 to start at the "beginning" (depending on Right-To-Left), otherwise an index in input -// input is the string to search for our regex pattern -func (re *Regexp) run(quick bool, textstart int, input []rune) (*Match, error) { - - // get a cached runner - runner := re.getRunner() - defer re.putRunner(runner) - - if textstart < 0 { - if re.RightToLeft() { - textstart = len(input) - } else { - textstart = 0 - } - } - - return runner.scan(input, textstart, quick, re.MatchTimeout) -} - -// Scans the string to find the first match. Uses the Match object -// both to feed text in and as a place to store matches that come out. -// -// All the action is in the Go() method. Our -// responsibility is to load up the class members before -// calling Go. -// -// The optimizer can compute a set of candidate starting characters, -// and we could use a separate method Skip() that will quickly scan past -// any characters that we know can't match. -func (r *runner) scan(rt []rune, textstart int, quick bool, timeout time.Duration) (*Match, error) { - r.timeout = timeout - r.ignoreTimeout = (time.Duration(math.MaxInt64) == timeout) - r.runtextstart = textstart - r.runtext = rt - r.runtextend = len(rt) - - stoppos := r.runtextend - bump := 1 - - if r.re.RightToLeft() { - bump = -1 - stoppos = 0 - } - - r.runtextpos = textstart - initted := false - - r.startTimeoutWatch() - for { - if r.re.Debug() { - //fmt.Printf("\nSearch content: %v\n", string(r.runtext)) - fmt.Printf("\nSearch range: from 0 to %v\n", r.runtextend) - fmt.Printf("Firstchar search starting at %v stopping at %v\n", r.runtextpos, stoppos) - } - - if r.findFirstChar() { - if err := r.checkTimeout(); err != nil { - return nil, err - } - - if !initted { - r.initMatch() - initted = true - } - - if r.re.Debug() { - fmt.Printf("Executing engine starting at %v\n\n", r.runtextpos) - } - - if err := r.execute(); err != nil { - return nil, err - } - - if r.runmatch.matchcount[0] > 0 { - // We'll return a match even if it touches a previous empty match - return r.tidyMatch(quick), nil - } - - // reset state for another go - r.runtrackpos = len(r.runtrack) - r.runstackpos = len(r.runstack) - r.runcrawlpos = len(r.runcrawl) - } - - // failure! - - if r.runtextpos == stoppos { - r.tidyMatch(true) - return nil, nil - } - - // Recognize leading []* and various anchors, and bump on failure accordingly - - // r.bump by one and start again - - r.runtextpos += bump - } - // We never get here -} - -func (r *runner) execute() error { - - r.goTo(0) - - for { - - if r.re.Debug() { - r.dumpState() - } - - if err := r.checkTimeout(); err != nil { - return err - } - - switch r.operator { - case syntax.Stop: - return nil - - case syntax.Nothing: - break - - case syntax.Goto: - r.goTo(r.operand(0)) - continue - - case syntax.Testref: - if !r.runmatch.isMatched(r.operand(0)) { - break - } - r.advance(1) - continue - - case syntax.Lazybranch: - r.trackPush1(r.textPos()) - r.advance(1) - continue - - case syntax.Lazybranch | syntax.Back: - r.trackPop() - r.textto(r.trackPeek()) - r.goTo(r.operand(0)) - continue - - case syntax.Setmark: - r.stackPush(r.textPos()) - r.trackPush() - r.advance(0) - continue - - case syntax.Nullmark: - r.stackPush(-1) - r.trackPush() - r.advance(0) - continue - - case syntax.Setmark | syntax.Back, syntax.Nullmark | syntax.Back: - r.stackPop() - break - - case syntax.Getmark: - r.stackPop() - r.trackPush1(r.stackPeek()) - r.textto(r.stackPeek()) - r.advance(0) - continue - - case syntax.Getmark | syntax.Back: - r.trackPop() - r.stackPush(r.trackPeek()) - break - - case syntax.Capturemark: - if r.operand(1) != -1 && !r.runmatch.isMatched(r.operand(1)) { - break - } - r.stackPop() - if r.operand(1) != -1 { - r.transferCapture(r.operand(0), r.operand(1), r.stackPeek(), r.textPos()) - } else { - r.capture(r.operand(0), r.stackPeek(), r.textPos()) - } - r.trackPush1(r.stackPeek()) - - r.advance(2) - - continue - - case syntax.Capturemark | syntax.Back: - r.trackPop() - r.stackPush(r.trackPeek()) - r.uncapture() - if r.operand(0) != -1 && r.operand(1) != -1 { - r.uncapture() - } - - break - - case syntax.Branchmark: - r.stackPop() - - matched := r.textPos() - r.stackPeek() - - if matched != 0 { // Nonempty match -> loop now - r.trackPush2(r.stackPeek(), r.textPos()) // Save old mark, textpos - r.stackPush(r.textPos()) // Make new mark - r.goTo(r.operand(0)) // Loop - } else { // Empty match -> straight now - r.trackPushNeg1(r.stackPeek()) // Save old mark - r.advance(1) // Straight - } - continue - - case syntax.Branchmark | syntax.Back: - r.trackPopN(2) - r.stackPop() - r.textto(r.trackPeekN(1)) // Recall position - r.trackPushNeg1(r.trackPeek()) // Save old mark - r.advance(1) // Straight - continue - - case syntax.Branchmark | syntax.Back2: - r.trackPop() - r.stackPush(r.trackPeek()) // Recall old mark - break // Backtrack - - case syntax.Lazybranchmark: - { - // We hit this the first time through a lazy loop and after each - // successful match of the inner expression. It simply continues - // on and doesn't loop. - r.stackPop() - - oldMarkPos := r.stackPeek() - - if r.textPos() != oldMarkPos { // Nonempty match -> try to loop again by going to 'back' state - if oldMarkPos != -1 { - r.trackPush2(oldMarkPos, r.textPos()) // Save old mark, textpos - } else { - r.trackPush2(r.textPos(), r.textPos()) - } - } else { - // The inner expression found an empty match, so we'll go directly to 'back2' if we - // backtrack. In this case, we need to push something on the stack, since back2 pops. - // However, in the case of ()+? or similar, this empty match may be legitimate, so push the text - // position associated with that empty match. - r.stackPush(oldMarkPos) - - r.trackPushNeg1(r.stackPeek()) // Save old mark - } - r.advance(1) - continue - } - - case syntax.Lazybranchmark | syntax.Back: - - // After the first time, Lazybranchmark | syntax.Back occurs - // with each iteration of the loop, and therefore with every attempted - // match of the inner expression. We'll try to match the inner expression, - // then go back to Lazybranchmark if successful. If the inner expression - // fails, we go to Lazybranchmark | syntax.Back2 - - r.trackPopN(2) - pos := r.trackPeekN(1) - r.trackPushNeg1(r.trackPeek()) // Save old mark - r.stackPush(pos) // Make new mark - r.textto(pos) // Recall position - r.goTo(r.operand(0)) // Loop - continue - - case syntax.Lazybranchmark | syntax.Back2: - // The lazy loop has failed. We'll do a true backtrack and - // start over before the lazy loop. - r.stackPop() - r.trackPop() - r.stackPush(r.trackPeek()) // Recall old mark - break - - case syntax.Setcount: - r.stackPush2(r.textPos(), r.operand(0)) - r.trackPush() - r.advance(1) - continue - - case syntax.Nullcount: - r.stackPush2(-1, r.operand(0)) - r.trackPush() - r.advance(1) - continue - - case syntax.Setcount | syntax.Back: - r.stackPopN(2) - break - - case syntax.Nullcount | syntax.Back: - r.stackPopN(2) - break - - case syntax.Branchcount: - // r.stackPush: - // 0: Mark - // 1: Count - - r.stackPopN(2) - mark := r.stackPeek() - count := r.stackPeekN(1) - matched := r.textPos() - mark - - if count >= r.operand(1) || (matched == 0 && count >= 0) { // Max loops or empty match -> straight now - r.trackPushNeg2(mark, count) // Save old mark, count - r.advance(2) // Straight - } else { // Nonempty match -> count+loop now - r.trackPush1(mark) // remember mark - r.stackPush2(r.textPos(), count+1) // Make new mark, incr count - r.goTo(r.operand(0)) // Loop - } - continue - - case syntax.Branchcount | syntax.Back: - // r.trackPush: - // 0: Previous mark - // r.stackPush: - // 0: Mark (= current pos, discarded) - // 1: Count - r.trackPop() - r.stackPopN(2) - if r.stackPeekN(1) > 0 { // Positive -> can go straight - r.textto(r.stackPeek()) // Zap to mark - r.trackPushNeg2(r.trackPeek(), r.stackPeekN(1)-1) // Save old mark, old count - r.advance(2) // Straight - continue - } - r.stackPush2(r.trackPeek(), r.stackPeekN(1)-1) // recall old mark, old count - break - - case syntax.Branchcount | syntax.Back2: - // r.trackPush: - // 0: Previous mark - // 1: Previous count - r.trackPopN(2) - r.stackPush2(r.trackPeek(), r.trackPeekN(1)) // Recall old mark, old count - break // Backtrack - - case syntax.Lazybranchcount: - // r.stackPush: - // 0: Mark - // 1: Count - - r.stackPopN(2) - mark := r.stackPeek() - count := r.stackPeekN(1) - - if count < 0 { // Negative count -> loop now - r.trackPushNeg1(mark) // Save old mark - r.stackPush2(r.textPos(), count+1) // Make new mark, incr count - r.goTo(r.operand(0)) // Loop - } else { // Nonneg count -> straight now - r.trackPush3(mark, count, r.textPos()) // Save mark, count, position - r.advance(2) // Straight - } - continue - - case syntax.Lazybranchcount | syntax.Back: - // r.trackPush: - // 0: Mark - // 1: Count - // 2: r.textPos - - r.trackPopN(3) - mark := r.trackPeek() - textpos := r.trackPeekN(2) - - if r.trackPeekN(1) < r.operand(1) && textpos != mark { // Under limit and not empty match -> loop - r.textto(textpos) // Recall position - r.stackPush2(textpos, r.trackPeekN(1)+1) // Make new mark, incr count - r.trackPushNeg1(mark) // Save old mark - r.goTo(r.operand(0)) // Loop - continue - } else { // Max loops or empty match -> backtrack - r.stackPush2(r.trackPeek(), r.trackPeekN(1)) // Recall old mark, count - break // backtrack - } - - case syntax.Lazybranchcount | syntax.Back2: - // r.trackPush: - // 0: Previous mark - // r.stackPush: - // 0: Mark (== current pos, discarded) - // 1: Count - r.trackPop() - r.stackPopN(2) - r.stackPush2(r.trackPeek(), r.stackPeekN(1)-1) // Recall old mark, count - break // Backtrack - - case syntax.Setjump: - r.stackPush2(r.trackpos(), r.crawlpos()) - r.trackPush() - r.advance(0) - continue - - case syntax.Setjump | syntax.Back: - r.stackPopN(2) - break - - case syntax.Backjump: - // r.stackPush: - // 0: Saved trackpos - // 1: r.crawlpos - r.stackPopN(2) - r.trackto(r.stackPeek()) - - for r.crawlpos() != r.stackPeekN(1) { - r.uncapture() - } - - break - - case syntax.Forejump: - // r.stackPush: - // 0: Saved trackpos - // 1: r.crawlpos - r.stackPopN(2) - r.trackto(r.stackPeek()) - r.trackPush1(r.stackPeekN(1)) - r.advance(0) - continue - - case syntax.Forejump | syntax.Back: - // r.trackPush: - // 0: r.crawlpos - r.trackPop() - - for r.crawlpos() != r.trackPeek() { - r.uncapture() - } - - break - - case syntax.Bol: - if r.leftchars() > 0 && r.charAt(r.textPos()-1) != '\n' { - break - } - r.advance(0) - continue - - case syntax.Eol: - if r.rightchars() > 0 && r.charAt(r.textPos()) != '\n' { - break - } - r.advance(0) - continue - - case syntax.Boundary: - if !r.isBoundary(r.textPos(), 0, r.runtextend) { - break - } - r.advance(0) - continue - - case syntax.Nonboundary: - if r.isBoundary(r.textPos(), 0, r.runtextend) { - break - } - r.advance(0) - continue - - case syntax.ECMABoundary: - if !r.isECMABoundary(r.textPos(), 0, r.runtextend) { - break - } - r.advance(0) - continue - - case syntax.NonECMABoundary: - if r.isECMABoundary(r.textPos(), 0, r.runtextend) { - break - } - r.advance(0) - continue - - case syntax.Beginning: - if r.leftchars() > 0 { - break - } - r.advance(0) - continue - - case syntax.Start: - if r.textPos() != r.textstart() { - break - } - r.advance(0) - continue - - case syntax.EndZ: - if r.rightchars() > 1 || r.rightchars() == 1 && r.charAt(r.textPos()) != '\n' { - break - } - r.advance(0) - continue - - case syntax.End: - if r.rightchars() > 0 { - break - } - r.advance(0) - continue - - case syntax.One: - if r.forwardchars() < 1 || r.forwardcharnext() != rune(r.operand(0)) { - break - } - - r.advance(1) - continue - - case syntax.Notone: - if r.forwardchars() < 1 || r.forwardcharnext() == rune(r.operand(0)) { - break - } - - r.advance(1) - continue - - case syntax.Set: - - if r.forwardchars() < 1 || !r.code.Sets[r.operand(0)].CharIn(r.forwardcharnext()) { - break - } - - r.advance(1) - continue - - case syntax.Multi: - if !r.runematch(r.code.Strings[r.operand(0)]) { - break - } - - r.advance(1) - continue - - case syntax.Ref: - - capnum := r.operand(0) - - if r.runmatch.isMatched(capnum) { - if !r.refmatch(r.runmatch.matchIndex(capnum), r.runmatch.matchLength(capnum)) { - break - } - } else { - if (r.re.options & ECMAScript) == 0 { - break - } - } - - r.advance(1) - continue - - case syntax.Onerep: - - c := r.operand(1) - - if r.forwardchars() < c { - break - } - - ch := rune(r.operand(0)) - - for c > 0 { - if r.forwardcharnext() != ch { - goto BreakBackward - } - c-- - } - - r.advance(2) - continue - - case syntax.Notonerep: - - c := r.operand(1) - - if r.forwardchars() < c { - break - } - ch := rune(r.operand(0)) - - for c > 0 { - if r.forwardcharnext() == ch { - goto BreakBackward - } - c-- - } - - r.advance(2) - continue - - case syntax.Setrep: - - c := r.operand(1) - - if r.forwardchars() < c { - break - } - - set := r.code.Sets[r.operand(0)] - - for c > 0 { - if !set.CharIn(r.forwardcharnext()) { - goto BreakBackward - } - c-- - } - - r.advance(2) - continue - - case syntax.Oneloop: - - c := r.operand(1) - - if c > r.forwardchars() { - c = r.forwardchars() - } - - ch := rune(r.operand(0)) - i := c - - for ; i > 0; i-- { - if r.forwardcharnext() != ch { - r.backwardnext() - break - } - } - - if c > i { - r.trackPush2(c-i-1, r.textPos()-r.bump()) - } - - r.advance(2) - continue - - case syntax.Notoneloop: - - c := r.operand(1) - - if c > r.forwardchars() { - c = r.forwardchars() - } - - ch := rune(r.operand(0)) - i := c - - for ; i > 0; i-- { - if r.forwardcharnext() == ch { - r.backwardnext() - break - } - } - - if c > i { - r.trackPush2(c-i-1, r.textPos()-r.bump()) - } - - r.advance(2) - continue - - case syntax.Setloop: - - c := r.operand(1) - - if c > r.forwardchars() { - c = r.forwardchars() - } - - set := r.code.Sets[r.operand(0)] - i := c - - for ; i > 0; i-- { - if !set.CharIn(r.forwardcharnext()) { - r.backwardnext() - break - } - } - - if c > i { - r.trackPush2(c-i-1, r.textPos()-r.bump()) - } - - r.advance(2) - continue - - case syntax.Oneloop | syntax.Back, syntax.Notoneloop | syntax.Back: - - r.trackPopN(2) - i := r.trackPeek() - pos := r.trackPeekN(1) - - r.textto(pos) - - if i > 0 { - r.trackPush2(i-1, pos-r.bump()) - } - - r.advance(2) - continue - - case syntax.Setloop | syntax.Back: - - r.trackPopN(2) - i := r.trackPeek() - pos := r.trackPeekN(1) - - r.textto(pos) - - if i > 0 { - r.trackPush2(i-1, pos-r.bump()) - } - - r.advance(2) - continue - - case syntax.Onelazy, syntax.Notonelazy: - - c := r.operand(1) - - if c > r.forwardchars() { - c = r.forwardchars() - } - - if c > 0 { - r.trackPush2(c-1, r.textPos()) - } - - r.advance(2) - continue - - case syntax.Setlazy: - - c := r.operand(1) - - if c > r.forwardchars() { - c = r.forwardchars() - } - - if c > 0 { - r.trackPush2(c-1, r.textPos()) - } - - r.advance(2) - continue - - case syntax.Onelazy | syntax.Back: - - r.trackPopN(2) - pos := r.trackPeekN(1) - r.textto(pos) - - if r.forwardcharnext() != rune(r.operand(0)) { - break - } - - i := r.trackPeek() - - if i > 0 { - r.trackPush2(i-1, pos+r.bump()) - } - - r.advance(2) - continue - - case syntax.Notonelazy | syntax.Back: - - r.trackPopN(2) - pos := r.trackPeekN(1) - r.textto(pos) - - if r.forwardcharnext() == rune(r.operand(0)) { - break - } - - i := r.trackPeek() - - if i > 0 { - r.trackPush2(i-1, pos+r.bump()) - } - - r.advance(2) - continue - - case syntax.Setlazy | syntax.Back: - - r.trackPopN(2) - pos := r.trackPeekN(1) - r.textto(pos) - - if !r.code.Sets[r.operand(0)].CharIn(r.forwardcharnext()) { - break - } - - i := r.trackPeek() - - if i > 0 { - r.trackPush2(i-1, pos+r.bump()) - } - - r.advance(2) - continue - - default: - return errors.New("unknown state in regex runner") - } - - BreakBackward: - ; - - // "break Backward" comes here: - r.backtrack() - } -} - -// increase the size of stack and track storage -func (r *runner) ensureStorage() { - if r.runstackpos < r.runtrackcount*4 { - doubleIntSlice(&r.runstack, &r.runstackpos) - } - if r.runtrackpos < r.runtrackcount*4 { - doubleIntSlice(&r.runtrack, &r.runtrackpos) - } -} - -func doubleIntSlice(s *[]int, pos *int) { - oldLen := len(*s) - newS := make([]int, oldLen*2) - - copy(newS[oldLen:], *s) - *pos += oldLen - *s = newS -} - -// Save a number on the longjump unrolling stack -func (r *runner) crawl(i int) { - if r.runcrawlpos == 0 { - doubleIntSlice(&r.runcrawl, &r.runcrawlpos) - } - r.runcrawlpos-- - r.runcrawl[r.runcrawlpos] = i -} - -// Remove a number from the longjump unrolling stack -func (r *runner) popcrawl() int { - val := r.runcrawl[r.runcrawlpos] - r.runcrawlpos++ - return val -} - -// Get the height of the stack -func (r *runner) crawlpos() int { - return len(r.runcrawl) - r.runcrawlpos -} - -func (r *runner) advance(i int) { - r.codepos += (i + 1) - r.setOperator(r.code.Codes[r.codepos]) -} - -func (r *runner) goTo(newpos int) { - // when branching backward, ensure storage - if newpos < r.codepos { - r.ensureStorage() - } - - r.setOperator(r.code.Codes[newpos]) - r.codepos = newpos -} - -func (r *runner) textto(newpos int) { - r.runtextpos = newpos -} - -func (r *runner) trackto(newpos int) { - r.runtrackpos = len(r.runtrack) - newpos -} - -func (r *runner) textstart() int { - return r.runtextstart -} - -func (r *runner) textPos() int { - return r.runtextpos -} - -// push onto the backtracking stack -func (r *runner) trackpos() int { - return len(r.runtrack) - r.runtrackpos -} - -func (r *runner) trackPush() { - r.runtrackpos-- - r.runtrack[r.runtrackpos] = r.codepos -} - -func (r *runner) trackPush1(I1 int) { - r.runtrackpos-- - r.runtrack[r.runtrackpos] = I1 - r.runtrackpos-- - r.runtrack[r.runtrackpos] = r.codepos -} - -func (r *runner) trackPush2(I1, I2 int) { - r.runtrackpos-- - r.runtrack[r.runtrackpos] = I1 - r.runtrackpos-- - r.runtrack[r.runtrackpos] = I2 - r.runtrackpos-- - r.runtrack[r.runtrackpos] = r.codepos -} - -func (r *runner) trackPush3(I1, I2, I3 int) { - r.runtrackpos-- - r.runtrack[r.runtrackpos] = I1 - r.runtrackpos-- - r.runtrack[r.runtrackpos] = I2 - r.runtrackpos-- - r.runtrack[r.runtrackpos] = I3 - r.runtrackpos-- - r.runtrack[r.runtrackpos] = r.codepos -} - -func (r *runner) trackPushNeg1(I1 int) { - r.runtrackpos-- - r.runtrack[r.runtrackpos] = I1 - r.runtrackpos-- - r.runtrack[r.runtrackpos] = -r.codepos -} - -func (r *runner) trackPushNeg2(I1, I2 int) { - r.runtrackpos-- - r.runtrack[r.runtrackpos] = I1 - r.runtrackpos-- - r.runtrack[r.runtrackpos] = I2 - r.runtrackpos-- - r.runtrack[r.runtrackpos] = -r.codepos -} - -func (r *runner) backtrack() { - newpos := r.runtrack[r.runtrackpos] - r.runtrackpos++ - - if r.re.Debug() { - if newpos < 0 { - fmt.Printf(" Backtracking (back2) to code position %v\n", -newpos) - } else { - fmt.Printf(" Backtracking to code position %v\n", newpos) - } - } - - if newpos < 0 { - newpos = -newpos - r.setOperator(r.code.Codes[newpos] | syntax.Back2) - } else { - r.setOperator(r.code.Codes[newpos] | syntax.Back) - } - - // When branching backward, ensure storage - if newpos < r.codepos { - r.ensureStorage() - } - - r.codepos = newpos -} - -func (r *runner) setOperator(op int) { - r.caseInsensitive = (0 != (op & syntax.Ci)) - r.rightToLeft = (0 != (op & syntax.Rtl)) - r.operator = syntax.InstOp(op & ^(syntax.Rtl | syntax.Ci)) -} - -func (r *runner) trackPop() { - r.runtrackpos++ -} - -// pop framesize items from the backtracking stack -func (r *runner) trackPopN(framesize int) { - r.runtrackpos += framesize -} - -// Technically we are actually peeking at items already popped. So if you want to -// get and pop the top item from the stack, you do -// r.trackPop(); -// r.trackPeek(); -func (r *runner) trackPeek() int { - return r.runtrack[r.runtrackpos-1] -} - -// get the ith element down on the backtracking stack -func (r *runner) trackPeekN(i int) int { - return r.runtrack[r.runtrackpos-i-1] -} - -// Push onto the grouping stack -func (r *runner) stackPush(I1 int) { - r.runstackpos-- - r.runstack[r.runstackpos] = I1 -} - -func (r *runner) stackPush2(I1, I2 int) { - r.runstackpos-- - r.runstack[r.runstackpos] = I1 - r.runstackpos-- - r.runstack[r.runstackpos] = I2 -} - -func (r *runner) stackPop() { - r.runstackpos++ -} - -// pop framesize items from the grouping stack -func (r *runner) stackPopN(framesize int) { - r.runstackpos += framesize -} - -// Technically we are actually peeking at items already popped. So if you want to -// get and pop the top item from the stack, you do -// r.stackPop(); -// r.stackPeek(); -func (r *runner) stackPeek() int { - return r.runstack[r.runstackpos-1] -} - -// get the ith element down on the grouping stack -func (r *runner) stackPeekN(i int) int { - return r.runstack[r.runstackpos-i-1] -} - -func (r *runner) operand(i int) int { - return r.code.Codes[r.codepos+i+1] -} - -func (r *runner) leftchars() int { - return r.runtextpos -} - -func (r *runner) rightchars() int { - return r.runtextend - r.runtextpos -} - -func (r *runner) bump() int { - if r.rightToLeft { - return -1 - } - return 1 -} - -func (r *runner) forwardchars() int { - if r.rightToLeft { - return r.runtextpos - } - return r.runtextend - r.runtextpos -} - -func (r *runner) forwardcharnext() rune { - var ch rune - if r.rightToLeft { - r.runtextpos-- - ch = r.runtext[r.runtextpos] - } else { - ch = r.runtext[r.runtextpos] - r.runtextpos++ - } - - if r.caseInsensitive { - return unicode.ToLower(ch) - } - return ch -} - -func (r *runner) runematch(str []rune) bool { - var pos int - - c := len(str) - if !r.rightToLeft { - if r.runtextend-r.runtextpos < c { - return false - } - - pos = r.runtextpos + c - } else { - if r.runtextpos-0 < c { - return false - } - - pos = r.runtextpos - } - - if !r.caseInsensitive { - for c != 0 { - c-- - pos-- - if str[c] != r.runtext[pos] { - return false - } - } - } else { - for c != 0 { - c-- - pos-- - if str[c] != unicode.ToLower(r.runtext[pos]) { - return false - } - } - } - - if !r.rightToLeft { - pos += len(str) - } - - r.runtextpos = pos - - return true -} - -func (r *runner) refmatch(index, len int) bool { - var c, pos, cmpos int - - if !r.rightToLeft { - if r.runtextend-r.runtextpos < len { - return false - } - - pos = r.runtextpos + len - } else { - if r.runtextpos-0 < len { - return false - } - - pos = r.runtextpos - } - cmpos = index + len - - c = len - - if !r.caseInsensitive { - for c != 0 { - c-- - cmpos-- - pos-- - if r.runtext[cmpos] != r.runtext[pos] { - return false - } - - } - } else { - for c != 0 { - c-- - cmpos-- - pos-- - - if unicode.ToLower(r.runtext[cmpos]) != unicode.ToLower(r.runtext[pos]) { - return false - } - } - } - - if !r.rightToLeft { - pos += len - } - - r.runtextpos = pos - - return true -} - -func (r *runner) backwardnext() { - if r.rightToLeft { - r.runtextpos++ - } else { - r.runtextpos-- - } -} - -func (r *runner) charAt(j int) rune { - return r.runtext[j] -} - -func (r *runner) findFirstChar() bool { - - if 0 != (r.code.Anchors & (syntax.AnchorBeginning | syntax.AnchorStart | syntax.AnchorEndZ | syntax.AnchorEnd)) { - if !r.code.RightToLeft { - if (0 != (r.code.Anchors&syntax.AnchorBeginning) && r.runtextpos > 0) || - (0 != (r.code.Anchors&syntax.AnchorStart) && r.runtextpos > r.runtextstart) { - r.runtextpos = r.runtextend - return false - } - if 0 != (r.code.Anchors&syntax.AnchorEndZ) && r.runtextpos < r.runtextend-1 { - r.runtextpos = r.runtextend - 1 - } else if 0 != (r.code.Anchors&syntax.AnchorEnd) && r.runtextpos < r.runtextend { - r.runtextpos = r.runtextend - } - } else { - if (0 != (r.code.Anchors&syntax.AnchorEnd) && r.runtextpos < r.runtextend) || - (0 != (r.code.Anchors&syntax.AnchorEndZ) && (r.runtextpos < r.runtextend-1 || - (r.runtextpos == r.runtextend-1 && r.charAt(r.runtextpos) != '\n'))) || - (0 != (r.code.Anchors&syntax.AnchorStart) && r.runtextpos < r.runtextstart) { - r.runtextpos = 0 - return false - } - if 0 != (r.code.Anchors&syntax.AnchorBeginning) && r.runtextpos > 0 { - r.runtextpos = 0 - } - } - - if r.code.BmPrefix != nil { - return r.code.BmPrefix.IsMatch(r.runtext, r.runtextpos, 0, r.runtextend) - } - - return true // found a valid start or end anchor - } else if r.code.BmPrefix != nil { - r.runtextpos = r.code.BmPrefix.Scan(r.runtext, r.runtextpos, 0, r.runtextend) - - if r.runtextpos == -1 { - if r.code.RightToLeft { - r.runtextpos = 0 - } else { - r.runtextpos = r.runtextend - } - return false - } - - return true - } else if r.code.FcPrefix == nil { - return true - } - - r.rightToLeft = r.code.RightToLeft - r.caseInsensitive = r.code.FcPrefix.CaseInsensitive - - set := r.code.FcPrefix.PrefixSet - if set.IsSingleton() { - ch := set.SingletonChar() - for i := r.forwardchars(); i > 0; i-- { - if ch == r.forwardcharnext() { - r.backwardnext() - return true - } - } - } else { - for i := r.forwardchars(); i > 0; i-- { - n := r.forwardcharnext() - //fmt.Printf("%v in %v: %v\n", string(n), set.String(), set.CharIn(n)) - if set.CharIn(n) { - r.backwardnext() - return true - } - } - } - - return false -} - -func (r *runner) initMatch() { - // Use a hashtable'ed Match object if the capture numbers are sparse - - if r.runmatch == nil { - if r.re.caps != nil { - r.runmatch = newMatchSparse(r.re, r.re.caps, r.re.capsize, r.runtext, r.runtextstart) - } else { - r.runmatch = newMatch(r.re, r.re.capsize, r.runtext, r.runtextstart) - } - } else { - r.runmatch.reset(r.runtext, r.runtextstart) - } - - // note we test runcrawl, because it is the last one to be allocated - // If there is an alloc failure in the middle of the three allocations, - // we may still return to reuse this instance, and we want to behave - // as if the allocations didn't occur. (we used to test _trackcount != 0) - - if r.runcrawl != nil { - r.runtrackpos = len(r.runtrack) - r.runstackpos = len(r.runstack) - r.runcrawlpos = len(r.runcrawl) - return - } - - r.initTrackCount() - - tracksize := r.runtrackcount * 8 - stacksize := r.runtrackcount * 8 - - if tracksize < 32 { - tracksize = 32 - } - if stacksize < 16 { - stacksize = 16 - } - - r.runtrack = make([]int, tracksize) - r.runtrackpos = tracksize - - r.runstack = make([]int, stacksize) - r.runstackpos = stacksize - - r.runcrawl = make([]int, 32) - r.runcrawlpos = 32 -} - -func (r *runner) tidyMatch(quick bool) *Match { - if !quick { - match := r.runmatch - - r.runmatch = nil - - match.tidy(r.runtextpos) - return match - } else { - // send back our match -- it's not leaving the package, so it's safe to not clean it up - // this reduces allocs for frequent calls to the "IsMatch" bool-only functions - return r.runmatch - } -} - -// capture captures a subexpression. Note that the -// capnum used here has already been mapped to a non-sparse -// index (by the code generator RegexWriter). -func (r *runner) capture(capnum, start, end int) { - if end < start { - T := end - end = start - start = T - } - - r.crawl(capnum) - r.runmatch.addMatch(capnum, start, end-start) -} - -// transferCapture captures a subexpression. Note that the -// capnum used here has already been mapped to a non-sparse -// index (by the code generator RegexWriter). -func (r *runner) transferCapture(capnum, uncapnum, start, end int) { - var start2, end2 int - - // these are the two intervals that are cancelling each other - - if end < start { - T := end - end = start - start = T - } - - start2 = r.runmatch.matchIndex(uncapnum) - end2 = start2 + r.runmatch.matchLength(uncapnum) - - // The new capture gets the innermost defined interval - - if start >= end2 { - end = start - start = end2 - } else if end <= start2 { - start = start2 - } else { - if end > end2 { - end = end2 - } - if start2 > start { - start = start2 - } - } - - r.crawl(uncapnum) - r.runmatch.balanceMatch(uncapnum) - - if capnum != -1 { - r.crawl(capnum) - r.runmatch.addMatch(capnum, start, end-start) - } -} - -// revert the last capture -func (r *runner) uncapture() { - capnum := r.popcrawl() - r.runmatch.removeMatch(capnum) -} - -//debug - -func (r *runner) dumpState() { - back := "" - if r.operator&syntax.Back != 0 { - back = " Back" - } - if r.operator&syntax.Back2 != 0 { - back += " Back2" - } - fmt.Printf("Text: %v\nTrack: %v\nStack: %v\n %s%s\n\n", - r.textposDescription(), - r.stackDescription(r.runtrack, r.runtrackpos), - r.stackDescription(r.runstack, r.runstackpos), - r.code.OpcodeDescription(r.codepos), - back) -} - -func (r *runner) stackDescription(a []int, index int) string { - buf := &bytes.Buffer{} - - fmt.Fprintf(buf, "%v/%v", len(a)-index, len(a)) - if buf.Len() < 8 { - buf.WriteString(strings.Repeat(" ", 8-buf.Len())) - } - - buf.WriteRune('(') - for i := index; i < len(a); i++ { - if i > index { - buf.WriteRune(' ') - } - - buf.WriteString(strconv.Itoa(a[i])) - } - - buf.WriteRune(')') - - return buf.String() -} - -func (r *runner) textposDescription() string { - buf := &bytes.Buffer{} - - buf.WriteString(strconv.Itoa(r.runtextpos)) - - if buf.Len() < 8 { - buf.WriteString(strings.Repeat(" ", 8-buf.Len())) - } - - if r.runtextpos > 0 { - buf.WriteString(syntax.CharDescription(r.runtext[r.runtextpos-1])) - } else { - buf.WriteRune('^') - } - - buf.WriteRune('>') - - for i := r.runtextpos; i < r.runtextend; i++ { - buf.WriteString(syntax.CharDescription(r.runtext[i])) - } - if buf.Len() >= 64 { - buf.Truncate(61) - buf.WriteString("...") - } else { - buf.WriteRune('$') - } - - return buf.String() -} - -// decide whether the pos -// at the specified index is a boundary or not. It's just not worth -// emitting inline code for this logic. -func (r *runner) isBoundary(index, startpos, endpos int) bool { - return (index > startpos && syntax.IsWordChar(r.runtext[index-1])) != - (index < endpos && syntax.IsWordChar(r.runtext[index])) -} - -func (r *runner) isECMABoundary(index, startpos, endpos int) bool { - return (index > startpos && syntax.IsECMAWordChar(r.runtext[index-1])) != - (index < endpos && syntax.IsECMAWordChar(r.runtext[index])) -} - -// this seems like a comment to justify randomly picking 1000 :-P -// We have determined this value in a series of experiments where x86 retail -// builds (ono-lab-optimized) were run on different pattern/input pairs. Larger values -// of TimeoutCheckFrequency did not tend to increase performance; smaller values -// of TimeoutCheckFrequency tended to slow down the execution. -const timeoutCheckFrequency int = 1000 - -func (r *runner) startTimeoutWatch() { - if r.ignoreTimeout { - return - } - - r.timeoutChecksToSkip = timeoutCheckFrequency - r.timeoutAt = time.Now().Add(r.timeout) -} - -func (r *runner) checkTimeout() error { - if r.ignoreTimeout { - return nil - } - r.timeoutChecksToSkip-- - if r.timeoutChecksToSkip != 0 { - return nil - } - - r.timeoutChecksToSkip = timeoutCheckFrequency - return r.doCheckTimeout() -} - -func (r *runner) doCheckTimeout() error { - current := time.Now() - - if current.Before(r.timeoutAt) { - return nil - } - - if r.re.Debug() { - //Debug.WriteLine("") - //Debug.WriteLine("RegEx match timeout occurred!") - //Debug.WriteLine("Specified timeout: " + TimeSpan.FromMilliseconds(_timeout).ToString()) - //Debug.WriteLine("Timeout check frequency: " + TimeoutCheckFrequency) - //Debug.WriteLine("Search pattern: " + _runregex._pattern) - //Debug.WriteLine("Input: " + r.runtext) - //Debug.WriteLine("About to throw RegexMatchTimeoutException.") - } - - return fmt.Errorf("match timeout after %v on input `%v`", r.timeout, string(r.runtext)) -} - -func (r *runner) initTrackCount() { - r.runtrackcount = r.code.TrackCount -} - -// getRunner returns a run to use for matching re. -// It uses the re's runner cache if possible, to avoid -// unnecessary allocation. -func (re *Regexp) getRunner() *runner { - re.muRun.Lock() - if n := len(re.runner); n > 0 { - z := re.runner[n-1] - re.runner = re.runner[:n-1] - re.muRun.Unlock() - return z - } - re.muRun.Unlock() - z := &runner{ - re: re, - code: re.code, - } - return z -} - -// putRunner returns a runner to the re's cache. -// There is no attempt to limit the size of the cache, so it will -// grow to the maximum number of simultaneous matches -// run using re. (The cache empties when re gets garbage collected.) -func (re *Regexp) putRunner(r *runner) { - re.muRun.Lock() - re.runner = append(re.runner, r) - re.muRun.Unlock() -} diff --git a/vendor/github.com/dlclark/regexp2/syntax/charclass.go b/vendor/github.com/dlclark/regexp2/syntax/charclass.go deleted file mode 100644 index 53974d1..0000000 --- a/vendor/github.com/dlclark/regexp2/syntax/charclass.go +++ /dev/null @@ -1,854 +0,0 @@ -package syntax - -import ( - "bytes" - "encoding/binary" - "fmt" - "sort" - "unicode" - "unicode/utf8" -) - -// CharSet combines start-end rune ranges and unicode categories representing a set of characters -type CharSet struct { - ranges []singleRange - categories []category - sub *CharSet //optional subtractor - negate bool - anything bool -} - -type category struct { - negate bool - cat string -} - -type singleRange struct { - first rune - last rune -} - -const ( - spaceCategoryText = " " - wordCategoryText = "W" -) - -var ( - ecmaSpace = []rune{0x0009, 0x000e, 0x0020, 0x0021, 0x00a0, 0x00a1, 0x1680, 0x1681, 0x2000, 0x200b, 0x2028, 0x202a, 0x202f, 0x2030, 0x205f, 0x2060, 0x3000, 0x3001, 0xfeff, 0xff00} - ecmaWord = []rune{0x0030, 0x003a, 0x0041, 0x005b, 0x005f, 0x0060, 0x0061, 0x007b} - ecmaDigit = []rune{0x0030, 0x003a} -) - -var ( - AnyClass = getCharSetFromOldString([]rune{0}, false) - ECMAAnyClass = getCharSetFromOldString([]rune{0, 0x000a, 0x000b, 0x000d, 0x000e}, false) - NoneClass = getCharSetFromOldString(nil, false) - ECMAWordClass = getCharSetFromOldString(ecmaWord, false) - NotECMAWordClass = getCharSetFromOldString(ecmaWord, true) - ECMASpaceClass = getCharSetFromOldString(ecmaSpace, false) - NotECMASpaceClass = getCharSetFromOldString(ecmaSpace, true) - ECMADigitClass = getCharSetFromOldString(ecmaDigit, false) - NotECMADigitClass = getCharSetFromOldString(ecmaDigit, true) - - WordClass = getCharSetFromCategoryString(false, false, wordCategoryText) - NotWordClass = getCharSetFromCategoryString(true, false, wordCategoryText) - SpaceClass = getCharSetFromCategoryString(false, false, spaceCategoryText) - NotSpaceClass = getCharSetFromCategoryString(true, false, spaceCategoryText) - DigitClass = getCharSetFromCategoryString(false, false, "Nd") - NotDigitClass = getCharSetFromCategoryString(false, true, "Nd") -) - -var unicodeCategories = func() map[string]*unicode.RangeTable { - retVal := make(map[string]*unicode.RangeTable) - for k, v := range unicode.Scripts { - retVal[k] = v - } - for k, v := range unicode.Categories { - retVal[k] = v - } - for k, v := range unicode.Properties { - retVal[k] = v - } - return retVal -}() - -func getCharSetFromCategoryString(negateSet bool, negateCat bool, cats ...string) func() *CharSet { - if negateCat && negateSet { - panic("BUG! You should only negate the set OR the category in a constant setup, but not both") - } - - c := CharSet{negate: negateSet} - - c.categories = make([]category, len(cats)) - for i, cat := range cats { - c.categories[i] = category{cat: cat, negate: negateCat} - } - return func() *CharSet { - //make a copy each time - local := c - //return that address - return &local - } -} - -func getCharSetFromOldString(setText []rune, negate bool) func() *CharSet { - c := CharSet{} - if len(setText) > 0 { - fillFirst := false - l := len(setText) - if negate { - if setText[0] == 0 { - setText = setText[1:] - } else { - l++ - fillFirst = true - } - } - - if l%2 == 0 { - c.ranges = make([]singleRange, l/2) - } else { - c.ranges = make([]singleRange, l/2+1) - } - - first := true - if fillFirst { - c.ranges[0] = singleRange{first: 0} - first = false - } - - i := 0 - for _, r := range setText { - if first { - // lower bound in a new range - c.ranges[i] = singleRange{first: r} - first = false - } else { - c.ranges[i].last = r - 1 - i++ - first = true - } - } - if !first { - c.ranges[i].last = utf8.MaxRune - } - } - - return func() *CharSet { - local := c - return &local - } -} - -// Copy makes a deep copy to prevent accidental mutation of a set -func (c CharSet) Copy() CharSet { - ret := CharSet{ - anything: c.anything, - negate: c.negate, - } - - ret.ranges = append(ret.ranges, c.ranges...) - ret.categories = append(ret.categories, c.categories...) - - if c.sub != nil { - sub := c.sub.Copy() - ret.sub = &sub - } - - return ret -} - -// gets a human-readable description for a set string -func (c CharSet) String() string { - buf := &bytes.Buffer{} - buf.WriteRune('[') - - if c.IsNegated() { - buf.WriteRune('^') - } - - for _, r := range c.ranges { - - buf.WriteString(CharDescription(r.first)) - if r.first != r.last { - if r.last-r.first != 1 { - //groups that are 1 char apart skip the dash - buf.WriteRune('-') - } - buf.WriteString(CharDescription(r.last)) - } - } - - for _, c := range c.categories { - buf.WriteString(c.String()) - } - - if c.sub != nil { - buf.WriteRune('-') - buf.WriteString(c.sub.String()) - } - - buf.WriteRune(']') - - return buf.String() -} - -// mapHashFill converts a charset into a buffer for use in maps -func (c CharSet) mapHashFill(buf *bytes.Buffer) { - if c.negate { - buf.WriteByte(0) - } else { - buf.WriteByte(1) - } - - binary.Write(buf, binary.LittleEndian, len(c.ranges)) - binary.Write(buf, binary.LittleEndian, len(c.categories)) - for _, r := range c.ranges { - buf.WriteRune(r.first) - buf.WriteRune(r.last) - } - for _, ct := range c.categories { - buf.WriteString(ct.cat) - if ct.negate { - buf.WriteByte(1) - } else { - buf.WriteByte(0) - } - } - - if c.sub != nil { - c.sub.mapHashFill(buf) - } -} - -// CharIn returns true if the rune is in our character set (either ranges or categories). -// It handles negations and subtracted sub-charsets. -func (c CharSet) CharIn(ch rune) bool { - val := false - // in s && !s.subtracted - - //check ranges - for _, r := range c.ranges { - if ch < r.first { - continue - } - if ch <= r.last { - val = true - break - } - } - - //check categories if we haven't already found a range - if !val && len(c.categories) > 0 { - for _, ct := range c.categories { - // special categories...then unicode - if ct.cat == spaceCategoryText { - if unicode.IsSpace(ch) { - // we found a space so we're done - // negate means this is a "bad" thing - val = !ct.negate - break - } else if ct.negate { - val = true - break - } - } else if ct.cat == wordCategoryText { - if IsWordChar(ch) { - val = !ct.negate - break - } else if ct.negate { - val = true - break - } - } else if unicode.Is(unicodeCategories[ct.cat], ch) { - // if we're in this unicode category then we're done - // if negate=true on this category then we "failed" our test - // otherwise we're good that we found it - val = !ct.negate - break - } else if ct.negate { - val = true - break - } - } - } - - // negate the whole char set - if c.negate { - val = !val - } - - // get subtracted recurse - if val && c.sub != nil { - val = !c.sub.CharIn(ch) - } - - //log.Printf("Char '%v' in %v == %v", string(ch), c.String(), val) - return val -} - -func (c category) String() string { - switch c.cat { - case spaceCategoryText: - if c.negate { - return "\\S" - } - return "\\s" - case wordCategoryText: - if c.negate { - return "\\W" - } - return "\\w" - } - if _, ok := unicodeCategories[c.cat]; ok { - - if c.negate { - return "\\P{" + c.cat + "}" - } - return "\\p{" + c.cat + "}" - } - return "Unknown category: " + c.cat -} - -// CharDescription Produces a human-readable description for a single character. -func CharDescription(ch rune) string { - /*if ch == '\\' { - return "\\\\" - } - - if ch > ' ' && ch <= '~' { - return string(ch) - } else if ch == '\n' { - return "\\n" - } else if ch == ' ' { - return "\\ " - }*/ - - b := &bytes.Buffer{} - escape(b, ch, false) //fmt.Sprintf("%U", ch) - return b.String() -} - -// According to UTS#18 Unicode Regular Expressions (http://www.unicode.org/reports/tr18/) -// RL 1.4 Simple Word Boundaries The class of includes all Alphabetic -// values from the Unicode character database, from UnicodeData.txt [UData], plus the U+200C -// ZERO WIDTH NON-JOINER and U+200D ZERO WIDTH JOINER. -func IsWordChar(r rune) bool { - //"L", "Mn", "Nd", "Pc" - return unicode.In(r, - unicode.Categories["L"], unicode.Categories["Mn"], - unicode.Categories["Nd"], unicode.Categories["Pc"]) || r == '\u200D' || r == '\u200C' - //return 'A' <= r && r <= 'Z' || 'a' <= r && r <= 'z' || '0' <= r && r <= '9' || r == '_' -} - -func IsECMAWordChar(r rune) bool { - return unicode.In(r, - unicode.Categories["L"], unicode.Categories["Mn"], - unicode.Categories["Nd"], unicode.Categories["Pc"]) - - //return 'A' <= r && r <= 'Z' || 'a' <= r && r <= 'z' || '0' <= r && r <= '9' || r == '_' -} - -// SingletonChar will return the char from the first range without validation. -// It assumes you have checked for IsSingleton or IsSingletonInverse and will panic given bad input -func (c CharSet) SingletonChar() rune { - return c.ranges[0].first -} - -func (c CharSet) IsSingleton() bool { - return !c.negate && //negated is multiple chars - len(c.categories) == 0 && len(c.ranges) == 1 && // multiple ranges and unicode classes represent multiple chars - c.sub == nil && // subtraction means we've got multiple chars - c.ranges[0].first == c.ranges[0].last // first and last equal means we're just 1 char -} - -func (c CharSet) IsSingletonInverse() bool { - return c.negate && //same as above, but requires negated - len(c.categories) == 0 && len(c.ranges) == 1 && // multiple ranges and unicode classes represent multiple chars - c.sub == nil && // subtraction means we've got multiple chars - c.ranges[0].first == c.ranges[0].last // first and last equal means we're just 1 char -} - -func (c CharSet) IsMergeable() bool { - return !c.IsNegated() && !c.HasSubtraction() -} - -func (c CharSet) IsNegated() bool { - return c.negate -} - -func (c CharSet) HasSubtraction() bool { - return c.sub != nil -} - -func (c CharSet) IsEmpty() bool { - return len(c.ranges) == 0 && len(c.categories) == 0 && c.sub == nil -} - -func (c *CharSet) addDigit(ecma, negate bool, pattern string) { - if ecma { - if negate { - c.addRanges(NotECMADigitClass().ranges) - } else { - c.addRanges(ECMADigitClass().ranges) - } - } else { - c.addCategories(category{cat: "Nd", negate: negate}) - } -} - -func (c *CharSet) addChar(ch rune) { - c.addRange(ch, ch) -} - -func (c *CharSet) addSpace(ecma, negate bool) { - if ecma { - if negate { - c.addRanges(NotECMASpaceClass().ranges) - } else { - c.addRanges(ECMASpaceClass().ranges) - } - } else { - c.addCategories(category{cat: spaceCategoryText, negate: negate}) - } -} - -func (c *CharSet) addWord(ecma, negate bool) { - if ecma { - if negate { - c.addRanges(NotECMAWordClass().ranges) - } else { - c.addRanges(ECMAWordClass().ranges) - } - } else { - c.addCategories(category{cat: wordCategoryText, negate: negate}) - } -} - -// Add set ranges and categories into ours -- no deduping or anything -func (c *CharSet) addSet(set CharSet) { - if c.anything { - return - } - if set.anything { - c.makeAnything() - return - } - // just append here to prevent double-canon - c.ranges = append(c.ranges, set.ranges...) - c.addCategories(set.categories...) - c.canonicalize() -} - -func (c *CharSet) makeAnything() { - c.anything = true - c.categories = []category{} - c.ranges = AnyClass().ranges -} - -func (c *CharSet) addCategories(cats ...category) { - // don't add dupes and remove positive+negative - if c.anything { - // if we've had a previous positive+negative group then - // just return, we're as broad as we can get - return - } - - for _, ct := range cats { - found := false - for _, ct2 := range c.categories { - if ct.cat == ct2.cat { - if ct.negate != ct2.negate { - // oposite negations...this mean we just - // take us as anything and move on - c.makeAnything() - return - } - found = true - break - } - } - - if !found { - c.categories = append(c.categories, ct) - } - } -} - -// Merges new ranges to our own -func (c *CharSet) addRanges(ranges []singleRange) { - if c.anything { - return - } - c.ranges = append(c.ranges, ranges...) - c.canonicalize() -} - -// Merges everything but the new ranges into our own -func (c *CharSet) addNegativeRanges(ranges []singleRange) { - if c.anything { - return - } - - var hi rune - - // convert incoming ranges into opposites, assume they are in order - for _, r := range ranges { - if hi < r.first { - c.ranges = append(c.ranges, singleRange{hi, r.first - 1}) - } - hi = r.last + 1 - } - - if hi < utf8.MaxRune { - c.ranges = append(c.ranges, singleRange{hi, utf8.MaxRune}) - } - - c.canonicalize() -} - -func isValidUnicodeCat(catName string) bool { - _, ok := unicodeCategories[catName] - return ok -} - -func (c *CharSet) addCategory(categoryName string, negate, caseInsensitive bool, pattern string) { - if !isValidUnicodeCat(categoryName) { - // unknown unicode category, script, or property "blah" - panic(fmt.Errorf("Unknown unicode category, script, or property '%v'", categoryName)) - - } - - if caseInsensitive && (categoryName == "Ll" || categoryName == "Lu" || categoryName == "Lt") { - // when RegexOptions.IgnoreCase is specified then {Ll} {Lu} and {Lt} cases should all match - c.addCategories( - category{cat: "Ll", negate: negate}, - category{cat: "Lu", negate: negate}, - category{cat: "Lt", negate: negate}) - } - c.addCategories(category{cat: categoryName, negate: negate}) -} - -func (c *CharSet) addSubtraction(sub *CharSet) { - c.sub = sub -} - -func (c *CharSet) addRange(chMin, chMax rune) { - c.ranges = append(c.ranges, singleRange{first: chMin, last: chMax}) - c.canonicalize() -} - -func (c *CharSet) addNamedASCII(name string, negate bool) bool { - var rs []singleRange - - switch name { - case "alnum": - rs = []singleRange{singleRange{'0', '9'}, singleRange{'A', 'Z'}, singleRange{'a', 'z'}} - case "alpha": - rs = []singleRange{singleRange{'A', 'Z'}, singleRange{'a', 'z'}} - case "ascii": - rs = []singleRange{singleRange{0, 0x7f}} - case "blank": - rs = []singleRange{singleRange{'\t', '\t'}, singleRange{' ', ' '}} - case "cntrl": - rs = []singleRange{singleRange{0, 0x1f}, singleRange{0x7f, 0x7f}} - case "digit": - c.addDigit(false, negate, "") - case "graph": - rs = []singleRange{singleRange{'!', '~'}} - case "lower": - rs = []singleRange{singleRange{'a', 'z'}} - case "print": - rs = []singleRange{singleRange{' ', '~'}} - case "punct": //[!-/:-@[-`{-~] - rs = []singleRange{singleRange{'!', '/'}, singleRange{':', '@'}, singleRange{'[', '`'}, singleRange{'{', '~'}} - case "space": - c.addSpace(true, negate) - case "upper": - rs = []singleRange{singleRange{'A', 'Z'}} - case "word": - c.addWord(true, negate) - case "xdigit": - rs = []singleRange{singleRange{'0', '9'}, singleRange{'A', 'F'}, singleRange{'a', 'f'}} - default: - return false - } - - if len(rs) > 0 { - if negate { - c.addNegativeRanges(rs) - } else { - c.addRanges(rs) - } - } - - return true -} - -type singleRangeSorter []singleRange - -func (p singleRangeSorter) Len() int { return len(p) } -func (p singleRangeSorter) Less(i, j int) bool { return p[i].first < p[j].first } -func (p singleRangeSorter) Swap(i, j int) { p[i], p[j] = p[j], p[i] } - -// Logic to reduce a character class to a unique, sorted form. -func (c *CharSet) canonicalize() { - var i, j int - var last rune - - // - // Find and eliminate overlapping or abutting ranges - // - - if len(c.ranges) > 1 { - sort.Sort(singleRangeSorter(c.ranges)) - - done := false - - for i, j = 1, 0; ; i++ { - for last = c.ranges[j].last; ; i++ { - if i == len(c.ranges) || last == utf8.MaxRune { - done = true - break - } - - CurrentRange := c.ranges[i] - if CurrentRange.first > last+1 { - break - } - - if last < CurrentRange.last { - last = CurrentRange.last - } - } - - c.ranges[j] = singleRange{first: c.ranges[j].first, last: last} - - j++ - - if done { - break - } - - if j < i { - c.ranges[j] = c.ranges[i] - } - } - - c.ranges = append(c.ranges[:j], c.ranges[len(c.ranges):]...) - } -} - -// Adds to the class any lowercase versions of characters already -// in the class. Used for case-insensitivity. -func (c *CharSet) addLowercase() { - if c.anything { - return - } - toAdd := []singleRange{} - for i := 0; i < len(c.ranges); i++ { - r := c.ranges[i] - if r.first == r.last { - lower := unicode.ToLower(r.first) - c.ranges[i] = singleRange{first: lower, last: lower} - } else { - toAdd = append(toAdd, r) - } - } - - for _, r := range toAdd { - c.addLowercaseRange(r.first, r.last) - } - c.canonicalize() -} - -/************************************************************************** - Let U be the set of Unicode character values and let L be the lowercase - function, mapping from U to U. To perform case insensitive matching of - character sets, we need to be able to map an interval I in U, say - - I = [chMin, chMax] = { ch : chMin <= ch <= chMax } - - to a set A such that A contains L(I) and A is contained in the union of - I and L(I). - - The table below partitions U into intervals on which L is non-decreasing. - Thus, for any interval J = [a, b] contained in one of these intervals, - L(J) is contained in [L(a), L(b)]. - - It is also true that for any such J, [L(a), L(b)] is contained in the - union of J and L(J). This does not follow from L being non-decreasing on - these intervals. It follows from the nature of the L on each interval. - On each interval, L has one of the following forms: - - (1) L(ch) = constant (LowercaseSet) - (2) L(ch) = ch + offset (LowercaseAdd) - (3) L(ch) = ch | 1 (LowercaseBor) - (4) L(ch) = ch + (ch & 1) (LowercaseBad) - - It is easy to verify that for any of these forms [L(a), L(b)] is - contained in the union of [a, b] and L([a, b]). -***************************************************************************/ - -const ( - LowercaseSet = 0 // Set to arg. - LowercaseAdd = 1 // Add arg. - LowercaseBor = 2 // Bitwise or with 1. - LowercaseBad = 3 // Bitwise and with 1 and add original. -) - -type lcMap struct { - chMin, chMax rune - op, data int32 -} - -var lcTable = []lcMap{ - lcMap{'\u0041', '\u005A', LowercaseAdd, 32}, - lcMap{'\u00C0', '\u00DE', LowercaseAdd, 32}, - lcMap{'\u0100', '\u012E', LowercaseBor, 0}, - lcMap{'\u0130', '\u0130', LowercaseSet, 0x0069}, - lcMap{'\u0132', '\u0136', LowercaseBor, 0}, - lcMap{'\u0139', '\u0147', LowercaseBad, 0}, - lcMap{'\u014A', '\u0176', LowercaseBor, 0}, - lcMap{'\u0178', '\u0178', LowercaseSet, 0x00FF}, - lcMap{'\u0179', '\u017D', LowercaseBad, 0}, - lcMap{'\u0181', '\u0181', LowercaseSet, 0x0253}, - lcMap{'\u0182', '\u0184', LowercaseBor, 0}, - lcMap{'\u0186', '\u0186', LowercaseSet, 0x0254}, - lcMap{'\u0187', '\u0187', LowercaseSet, 0x0188}, - lcMap{'\u0189', '\u018A', LowercaseAdd, 205}, - lcMap{'\u018B', '\u018B', LowercaseSet, 0x018C}, - lcMap{'\u018E', '\u018E', LowercaseSet, 0x01DD}, - lcMap{'\u018F', '\u018F', LowercaseSet, 0x0259}, - lcMap{'\u0190', '\u0190', LowercaseSet, 0x025B}, - lcMap{'\u0191', '\u0191', LowercaseSet, 0x0192}, - lcMap{'\u0193', '\u0193', LowercaseSet, 0x0260}, - lcMap{'\u0194', '\u0194', LowercaseSet, 0x0263}, - lcMap{'\u0196', '\u0196', LowercaseSet, 0x0269}, - lcMap{'\u0197', '\u0197', LowercaseSet, 0x0268}, - lcMap{'\u0198', '\u0198', LowercaseSet, 0x0199}, - lcMap{'\u019C', '\u019C', LowercaseSet, 0x026F}, - lcMap{'\u019D', '\u019D', LowercaseSet, 0x0272}, - lcMap{'\u019F', '\u019F', LowercaseSet, 0x0275}, - lcMap{'\u01A0', '\u01A4', LowercaseBor, 0}, - lcMap{'\u01A7', '\u01A7', LowercaseSet, 0x01A8}, - lcMap{'\u01A9', '\u01A9', LowercaseSet, 0x0283}, - lcMap{'\u01AC', '\u01AC', LowercaseSet, 0x01AD}, - lcMap{'\u01AE', '\u01AE', LowercaseSet, 0x0288}, - lcMap{'\u01AF', '\u01AF', LowercaseSet, 0x01B0}, - lcMap{'\u01B1', '\u01B2', LowercaseAdd, 217}, - lcMap{'\u01B3', '\u01B5', LowercaseBad, 0}, - lcMap{'\u01B7', '\u01B7', LowercaseSet, 0x0292}, - lcMap{'\u01B8', '\u01B8', LowercaseSet, 0x01B9}, - lcMap{'\u01BC', '\u01BC', LowercaseSet, 0x01BD}, - lcMap{'\u01C4', '\u01C5', LowercaseSet, 0x01C6}, - lcMap{'\u01C7', '\u01C8', LowercaseSet, 0x01C9}, - lcMap{'\u01CA', '\u01CB', LowercaseSet, 0x01CC}, - lcMap{'\u01CD', '\u01DB', LowercaseBad, 0}, - lcMap{'\u01DE', '\u01EE', LowercaseBor, 0}, - lcMap{'\u01F1', '\u01F2', LowercaseSet, 0x01F3}, - lcMap{'\u01F4', '\u01F4', LowercaseSet, 0x01F5}, - lcMap{'\u01FA', '\u0216', LowercaseBor, 0}, - lcMap{'\u0386', '\u0386', LowercaseSet, 0x03AC}, - lcMap{'\u0388', '\u038A', LowercaseAdd, 37}, - lcMap{'\u038C', '\u038C', LowercaseSet, 0x03CC}, - lcMap{'\u038E', '\u038F', LowercaseAdd, 63}, - lcMap{'\u0391', '\u03AB', LowercaseAdd, 32}, - lcMap{'\u03E2', '\u03EE', LowercaseBor, 0}, - lcMap{'\u0401', '\u040F', LowercaseAdd, 80}, - lcMap{'\u0410', '\u042F', LowercaseAdd, 32}, - lcMap{'\u0460', '\u0480', LowercaseBor, 0}, - lcMap{'\u0490', '\u04BE', LowercaseBor, 0}, - lcMap{'\u04C1', '\u04C3', LowercaseBad, 0}, - lcMap{'\u04C7', '\u04C7', LowercaseSet, 0x04C8}, - lcMap{'\u04CB', '\u04CB', LowercaseSet, 0x04CC}, - lcMap{'\u04D0', '\u04EA', LowercaseBor, 0}, - lcMap{'\u04EE', '\u04F4', LowercaseBor, 0}, - lcMap{'\u04F8', '\u04F8', LowercaseSet, 0x04F9}, - lcMap{'\u0531', '\u0556', LowercaseAdd, 48}, - lcMap{'\u10A0', '\u10C5', LowercaseAdd, 48}, - lcMap{'\u1E00', '\u1EF8', LowercaseBor, 0}, - lcMap{'\u1F08', '\u1F0F', LowercaseAdd, -8}, - lcMap{'\u1F18', '\u1F1F', LowercaseAdd, -8}, - lcMap{'\u1F28', '\u1F2F', LowercaseAdd, -8}, - lcMap{'\u1F38', '\u1F3F', LowercaseAdd, -8}, - lcMap{'\u1F48', '\u1F4D', LowercaseAdd, -8}, - lcMap{'\u1F59', '\u1F59', LowercaseSet, 0x1F51}, - lcMap{'\u1F5B', '\u1F5B', LowercaseSet, 0x1F53}, - lcMap{'\u1F5D', '\u1F5D', LowercaseSet, 0x1F55}, - lcMap{'\u1F5F', '\u1F5F', LowercaseSet, 0x1F57}, - lcMap{'\u1F68', '\u1F6F', LowercaseAdd, -8}, - lcMap{'\u1F88', '\u1F8F', LowercaseAdd, -8}, - lcMap{'\u1F98', '\u1F9F', LowercaseAdd, -8}, - lcMap{'\u1FA8', '\u1FAF', LowercaseAdd, -8}, - lcMap{'\u1FB8', '\u1FB9', LowercaseAdd, -8}, - lcMap{'\u1FBA', '\u1FBB', LowercaseAdd, -74}, - lcMap{'\u1FBC', '\u1FBC', LowercaseSet, 0x1FB3}, - lcMap{'\u1FC8', '\u1FCB', LowercaseAdd, -86}, - lcMap{'\u1FCC', '\u1FCC', LowercaseSet, 0x1FC3}, - lcMap{'\u1FD8', '\u1FD9', LowercaseAdd, -8}, - lcMap{'\u1FDA', '\u1FDB', LowercaseAdd, -100}, - lcMap{'\u1FE8', '\u1FE9', LowercaseAdd, -8}, - lcMap{'\u1FEA', '\u1FEB', LowercaseAdd, -112}, - lcMap{'\u1FEC', '\u1FEC', LowercaseSet, 0x1FE5}, - lcMap{'\u1FF8', '\u1FF9', LowercaseAdd, -128}, - lcMap{'\u1FFA', '\u1FFB', LowercaseAdd, -126}, - lcMap{'\u1FFC', '\u1FFC', LowercaseSet, 0x1FF3}, - lcMap{'\u2160', '\u216F', LowercaseAdd, 16}, - lcMap{'\u24B6', '\u24D0', LowercaseAdd, 26}, - lcMap{'\uFF21', '\uFF3A', LowercaseAdd, 32}, -} - -func (c *CharSet) addLowercaseRange(chMin, chMax rune) { - var i, iMax, iMid int - var chMinT, chMaxT rune - var lc lcMap - - for i, iMax = 0, len(lcTable); i < iMax; { - iMid = (i + iMax) / 2 - if lcTable[iMid].chMax < chMin { - i = iMid + 1 - } else { - iMax = iMid - } - } - - for ; i < len(lcTable); i++ { - lc = lcTable[i] - if lc.chMin > chMax { - return - } - chMinT = lc.chMin - if chMinT < chMin { - chMinT = chMin - } - - chMaxT = lc.chMax - if chMaxT > chMax { - chMaxT = chMax - } - - switch lc.op { - case LowercaseSet: - chMinT = rune(lc.data) - chMaxT = rune(lc.data) - break - case LowercaseAdd: - chMinT += lc.data - chMaxT += lc.data - break - case LowercaseBor: - chMinT |= 1 - chMaxT |= 1 - break - case LowercaseBad: - chMinT += (chMinT & 1) - chMaxT += (chMaxT & 1) - break - } - - if chMinT < chMin || chMaxT > chMax { - c.addRange(chMinT, chMaxT) - } - } -} diff --git a/vendor/github.com/dlclark/regexp2/syntax/code.go b/vendor/github.com/dlclark/regexp2/syntax/code.go deleted file mode 100644 index 686e822..0000000 --- a/vendor/github.com/dlclark/regexp2/syntax/code.go +++ /dev/null @@ -1,274 +0,0 @@ -package syntax - -import ( - "bytes" - "fmt" - "math" -) - -// similar to prog.go in the go regex package...also with comment 'may not belong in this package' - -// File provides operator constants for use by the Builder and the Machine. - -// Implementation notes: -// -// Regexps are built into RegexCodes, which contain an operation array, -// a string table, and some constants. -// -// Each operation is one of the codes below, followed by the integer -// operands specified for each op. -// -// Strings and sets are indices into a string table. - -type InstOp int - -const ( - // lef/back operands description - - Onerep InstOp = 0 // lef,back char,min,max a {n} - Notonerep = 1 // lef,back char,min,max .{n} - Setrep = 2 // lef,back set,min,max [\d]{n} - - Oneloop = 3 // lef,back char,min,max a {,n} - Notoneloop = 4 // lef,back char,min,max .{,n} - Setloop = 5 // lef,back set,min,max [\d]{,n} - - Onelazy = 6 // lef,back char,min,max a {,n}? - Notonelazy = 7 // lef,back char,min,max .{,n}? - Setlazy = 8 // lef,back set,min,max [\d]{,n}? - - One = 9 // lef char a - Notone = 10 // lef char [^a] - Set = 11 // lef set [a-z\s] \w \s \d - - Multi = 12 // lef string abcd - Ref = 13 // lef group \# - - Bol = 14 // ^ - Eol = 15 // $ - Boundary = 16 // \b - Nonboundary = 17 // \B - Beginning = 18 // \A - Start = 19 // \G - EndZ = 20 // \Z - End = 21 // \Z - - Nothing = 22 // Reject! - - // Primitive control structures - - Lazybranch = 23 // back jump straight first - Branchmark = 24 // back jump branch first for loop - Lazybranchmark = 25 // back jump straight first for loop - Nullcount = 26 // back val set counter, null mark - Setcount = 27 // back val set counter, make mark - Branchcount = 28 // back jump,limit branch++ if zero<=c impl group slots - Capsize int // number of impl group slots - FcPrefix *Prefix // the set of candidate first characters (may be null) - BmPrefix *BmPrefix // the fixed prefix string as a Boyer-Moore machine (may be null) - Anchors AnchorLoc // the set of zero-length start anchors (RegexFCD.Bol, etc) - RightToLeft bool // true if right to left -} - -func opcodeBacktracks(op InstOp) bool { - op &= Mask - - switch op { - case Oneloop, Notoneloop, Setloop, Onelazy, Notonelazy, Setlazy, Lazybranch, Branchmark, Lazybranchmark, - Nullcount, Setcount, Branchcount, Lazybranchcount, Setmark, Capturemark, Getmark, Setjump, Backjump, - Forejump, Goto: - return true - - default: - return false - } -} - -func opcodeSize(op InstOp) int { - op &= Mask - - switch op { - case Nothing, Bol, Eol, Boundary, Nonboundary, ECMABoundary, NonECMABoundary, Beginning, Start, EndZ, - End, Nullmark, Setmark, Getmark, Setjump, Backjump, Forejump, Stop: - return 1 - - case One, Notone, Multi, Ref, Testref, Goto, Nullcount, Setcount, Lazybranch, Branchmark, Lazybranchmark, - Prune, Set: - return 2 - - case Capturemark, Branchcount, Lazybranchcount, Onerep, Notonerep, Oneloop, Notoneloop, Onelazy, Notonelazy, - Setlazy, Setrep, Setloop: - return 3 - - default: - panic(fmt.Errorf("Unexpected op code: %v", op)) - } -} - -var codeStr = []string{ - "Onerep", "Notonerep", "Setrep", - "Oneloop", "Notoneloop", "Setloop", - "Onelazy", "Notonelazy", "Setlazy", - "One", "Notone", "Set", - "Multi", "Ref", - "Bol", "Eol", "Boundary", "Nonboundary", "Beginning", "Start", "EndZ", "End", - "Nothing", - "Lazybranch", "Branchmark", "Lazybranchmark", - "Nullcount", "Setcount", "Branchcount", "Lazybranchcount", - "Nullmark", "Setmark", "Capturemark", "Getmark", - "Setjump", "Backjump", "Forejump", "Testref", "Goto", - "Prune", "Stop", - "ECMABoundary", "NonECMABoundary", -} - -func operatorDescription(op InstOp) string { - desc := codeStr[op&Mask] - if (op & Ci) != 0 { - desc += "-Ci" - } - if (op & Rtl) != 0 { - desc += "-Rtl" - } - if (op & Back) != 0 { - desc += "-Back" - } - if (op & Back2) != 0 { - desc += "-Back2" - } - - return desc -} - -// OpcodeDescription is a humman readable string of the specific offset -func (c *Code) OpcodeDescription(offset int) string { - buf := &bytes.Buffer{} - - op := InstOp(c.Codes[offset]) - fmt.Fprintf(buf, "%06d ", offset) - - if opcodeBacktracks(op & Mask) { - buf.WriteString("*") - } else { - buf.WriteString(" ") - } - buf.WriteString(operatorDescription(op)) - buf.WriteString("(") - op &= Mask - - switch op { - case One, Notone, Onerep, Notonerep, Oneloop, Notoneloop, Onelazy, Notonelazy: - buf.WriteString("Ch = ") - buf.WriteString(CharDescription(rune(c.Codes[offset+1]))) - - case Set, Setrep, Setloop, Setlazy: - buf.WriteString("Set = ") - buf.WriteString(c.Sets[c.Codes[offset+1]].String()) - - case Multi: - fmt.Fprintf(buf, "String = %s", string(c.Strings[c.Codes[offset+1]])) - - case Ref, Testref: - fmt.Fprintf(buf, "Index = %d", c.Codes[offset+1]) - - case Capturemark: - fmt.Fprintf(buf, "Index = %d", c.Codes[offset+1]) - if c.Codes[offset+2] != -1 { - fmt.Fprintf(buf, ", Unindex = %d", c.Codes[offset+2]) - } - - case Nullcount, Setcount: - fmt.Fprintf(buf, "Value = %d", c.Codes[offset+1]) - - case Goto, Lazybranch, Branchmark, Lazybranchmark, Branchcount, Lazybranchcount: - fmt.Fprintf(buf, "Addr = %d", c.Codes[offset+1]) - } - - switch op { - case Onerep, Notonerep, Oneloop, Notoneloop, Onelazy, Notonelazy, Setrep, Setloop, Setlazy: - buf.WriteString(", Rep = ") - if c.Codes[offset+2] == math.MaxInt32 { - buf.WriteString("inf") - } else { - fmt.Fprintf(buf, "%d", c.Codes[offset+2]) - } - - case Branchcount, Lazybranchcount: - buf.WriteString(", Limit = ") - if c.Codes[offset+2] == math.MaxInt32 { - buf.WriteString("inf") - } else { - fmt.Fprintf(buf, "%d", c.Codes[offset+2]) - } - - } - - buf.WriteString(")") - - return buf.String() -} - -func (c *Code) Dump() string { - buf := &bytes.Buffer{} - - if c.RightToLeft { - fmt.Fprintln(buf, "Direction: right-to-left") - } else { - fmt.Fprintln(buf, "Direction: left-to-right") - } - if c.FcPrefix == nil { - fmt.Fprintln(buf, "Firstchars: n/a") - } else { - fmt.Fprintf(buf, "Firstchars: %v\n", c.FcPrefix.PrefixSet.String()) - } - - if c.BmPrefix == nil { - fmt.Fprintln(buf, "Prefix: n/a") - } else { - fmt.Fprintf(buf, "Prefix: %v\n", Escape(c.BmPrefix.String())) - } - - fmt.Fprintf(buf, "Anchors: %v\n", c.Anchors) - fmt.Fprintln(buf) - - if c.BmPrefix != nil { - fmt.Fprintln(buf, "BoyerMoore:") - fmt.Fprintln(buf, c.BmPrefix.Dump(" ")) - } - for i := 0; i < len(c.Codes); i += opcodeSize(InstOp(c.Codes[i])) { - fmt.Fprintln(buf, c.OpcodeDescription(i)) - } - - return buf.String() -} diff --git a/vendor/github.com/dlclark/regexp2/syntax/escape.go b/vendor/github.com/dlclark/regexp2/syntax/escape.go deleted file mode 100644 index 609df10..0000000 --- a/vendor/github.com/dlclark/regexp2/syntax/escape.go +++ /dev/null @@ -1,94 +0,0 @@ -package syntax - -import ( - "bytes" - "strconv" - "strings" - "unicode" -) - -func Escape(input string) string { - b := &bytes.Buffer{} - for _, r := range input { - escape(b, r, false) - } - return b.String() -} - -const meta = `\.+*?()|[]{}^$# ` - -func escape(b *bytes.Buffer, r rune, force bool) { - if unicode.IsPrint(r) { - if strings.IndexRune(meta, r) >= 0 || force { - b.WriteRune('\\') - } - b.WriteRune(r) - return - } - - switch r { - case '\a': - b.WriteString(`\a`) - case '\f': - b.WriteString(`\f`) - case '\n': - b.WriteString(`\n`) - case '\r': - b.WriteString(`\r`) - case '\t': - b.WriteString(`\t`) - case '\v': - b.WriteString(`\v`) - default: - if r < 0x100 { - b.WriteString(`\x`) - s := strconv.FormatInt(int64(r), 16) - if len(s) == 1 { - b.WriteRune('0') - } - b.WriteString(s) - break - } - b.WriteString(`\u`) - b.WriteString(strconv.FormatInt(int64(r), 16)) - } -} - -func Unescape(input string) (string, error) { - idx := strings.IndexRune(input, '\\') - // no slashes means no unescape needed - if idx == -1 { - return input, nil - } - - buf := bytes.NewBufferString(input[:idx]) - // get the runes for the rest of the string -- we're going full parser scan on this - - p := parser{} - p.setPattern(input[idx+1:]) - for { - if p.rightMost() { - return "", p.getErr(ErrIllegalEndEscape) - } - r, err := p.scanCharEscape() - if err != nil { - return "", err - } - buf.WriteRune(r) - // are we done? - if p.rightMost() { - return buf.String(), nil - } - - r = p.moveRightGetChar() - for r != '\\' { - buf.WriteRune(r) - if p.rightMost() { - // we're done, no more slashes - return buf.String(), nil - } - // keep scanning until we get another slash - r = p.moveRightGetChar() - } - } -} diff --git a/vendor/github.com/dlclark/regexp2/syntax/fuzz.go b/vendor/github.com/dlclark/regexp2/syntax/fuzz.go deleted file mode 100644 index ee86386..0000000 --- a/vendor/github.com/dlclark/regexp2/syntax/fuzz.go +++ /dev/null @@ -1,20 +0,0 @@ -// +build gofuzz - -package syntax - -// Fuzz is the input point for go-fuzz -func Fuzz(data []byte) int { - sdata := string(data) - tree, err := Parse(sdata, RegexOptions(0)) - if err != nil { - return 0 - } - - // translate it to code - _, err = Write(tree) - if err != nil { - panic(err) - } - - return 1 -} diff --git a/vendor/github.com/dlclark/regexp2/syntax/parser.go b/vendor/github.com/dlclark/regexp2/syntax/parser.go deleted file mode 100644 index f13f779..0000000 --- a/vendor/github.com/dlclark/regexp2/syntax/parser.go +++ /dev/null @@ -1,2202 +0,0 @@ -package syntax - -import ( - "fmt" - "math" - "os" - "sort" - "strconv" - "unicode" -) - -type RegexOptions int32 - -const ( - IgnoreCase RegexOptions = 0x0001 // "i" - Multiline = 0x0002 // "m" - ExplicitCapture = 0x0004 // "n" - Compiled = 0x0008 // "c" - Singleline = 0x0010 // "s" - IgnorePatternWhitespace = 0x0020 // "x" - RightToLeft = 0x0040 // "r" - Debug = 0x0080 // "d" - ECMAScript = 0x0100 // "e" - RE2 = 0x0200 // RE2 compat mode -) - -func optionFromCode(ch rune) RegexOptions { - // case-insensitive - switch ch { - case 'i', 'I': - return IgnoreCase - case 'r', 'R': - return RightToLeft - case 'm', 'M': - return Multiline - case 'n', 'N': - return ExplicitCapture - case 's', 'S': - return Singleline - case 'x', 'X': - return IgnorePatternWhitespace - case 'd', 'D': - return Debug - case 'e', 'E': - return ECMAScript - default: - return 0 - } -} - -// An Error describes a failure to parse a regular expression -// and gives the offending expression. -type Error struct { - Code ErrorCode - Expr string - Args []interface{} -} - -func (e *Error) Error() string { - if len(e.Args) == 0 { - return "error parsing regexp: " + e.Code.String() + " in `" + e.Expr + "`" - } - return "error parsing regexp: " + fmt.Sprintf(e.Code.String(), e.Args...) + " in `" + e.Expr + "`" -} - -// An ErrorCode describes a failure to parse a regular expression. -type ErrorCode string - -const ( - // internal issue - ErrInternalError ErrorCode = "regexp/syntax: internal error" - // Parser errors - ErrUnterminatedComment = "unterminated comment" - ErrInvalidCharRange = "invalid character class range" - ErrInvalidRepeatSize = "invalid repeat count" - ErrInvalidUTF8 = "invalid UTF-8" - ErrCaptureGroupOutOfRange = "capture group number out of range" - ErrUnexpectedParen = "unexpected )" - ErrMissingParen = "missing closing )" - ErrMissingBrace = "missing closing }" - ErrInvalidRepeatOp = "invalid nested repetition operator" - ErrMissingRepeatArgument = "missing argument to repetition operator" - ErrConditionalExpression = "illegal conditional (?(...)) expression" - ErrTooManyAlternates = "too many | in (?()|)" - ErrUnrecognizedGrouping = "unrecognized grouping construct: (%v" - ErrInvalidGroupName = "invalid group name: group names must begin with a word character and have a matching terminator" - ErrCapNumNotZero = "capture number cannot be zero" - ErrUndefinedBackRef = "reference to undefined group number %v" - ErrUndefinedNameRef = "reference to undefined group name %v" - ErrAlternationCantCapture = "alternation conditions do not capture and cannot be named" - ErrAlternationCantHaveComment = "alternation conditions cannot be comments" - ErrMalformedReference = "(?(%v) ) malformed" - ErrUndefinedReference = "(?(%v) ) reference to undefined group" - ErrIllegalEndEscape = "illegal \\ at end of pattern" - ErrMalformedSlashP = "malformed \\p{X} character escape" - ErrIncompleteSlashP = "incomplete \\p{X} character escape" - ErrUnknownSlashP = "unknown unicode category, script, or property '%v'" - ErrUnrecognizedEscape = "unrecognized escape sequence \\%v" - ErrMissingControl = "missing control character" - ErrUnrecognizedControl = "unrecognized control character" - ErrTooFewHex = "insufficient hexadecimal digits" - ErrInvalidHex = "hex values may not be larger than 0x10FFFF" - ErrMalformedNameRef = "malformed \\k<...> named back reference" - ErrBadClassInCharRange = "cannot include class \\%v in character range" - ErrUnterminatedBracket = "unterminated [] set" - ErrSubtractionMustBeLast = "a subtraction must be the last element in a character class" - ErrReversedCharRange = "[x-y] range in reverse order" -) - -func (e ErrorCode) String() string { - return string(e) -} - -type parser struct { - stack *regexNode - group *regexNode - alternation *regexNode - concatenation *regexNode - unit *regexNode - - patternRaw string - pattern []rune - - currentPos int - specialCase *unicode.SpecialCase - - autocap int - capcount int - captop int - capsize int - - caps map[int]int - capnames map[string]int - - capnumlist []int - capnamelist []string - - options RegexOptions - optionsStack []RegexOptions - ignoreNextParen bool -} - -const ( - maxValueDiv10 int = math.MaxInt32 / 10 - maxValueMod10 = math.MaxInt32 % 10 -) - -// Parse converts a regex string into a parse tree -func Parse(re string, op RegexOptions) (*RegexTree, error) { - p := parser{ - options: op, - caps: make(map[int]int), - } - p.setPattern(re) - - if err := p.countCaptures(); err != nil { - return nil, err - } - - p.reset(op) - root, err := p.scanRegex() - - if err != nil { - return nil, err - } - tree := &RegexTree{ - root: root, - caps: p.caps, - capnumlist: p.capnumlist, - captop: p.captop, - Capnames: p.capnames, - Caplist: p.capnamelist, - options: op, - } - - if tree.options&Debug > 0 { - os.Stdout.WriteString(tree.Dump()) - } - - return tree, nil -} - -func (p *parser) setPattern(pattern string) { - p.patternRaw = pattern - p.pattern = make([]rune, 0, len(pattern)) - - //populate our rune array to handle utf8 encoding - for _, r := range pattern { - p.pattern = append(p.pattern, r) - } -} -func (p *parser) getErr(code ErrorCode, args ...interface{}) error { - return &Error{Code: code, Expr: p.patternRaw, Args: args} -} - -func (p *parser) noteCaptureSlot(i, pos int) { - if _, ok := p.caps[i]; !ok { - // the rhs of the hashtable isn't used in the parser - p.caps[i] = pos - p.capcount++ - - if p.captop <= i { - if i == math.MaxInt32 { - p.captop = i - } else { - p.captop = i + 1 - } - } - } -} - -func (p *parser) noteCaptureName(name string, pos int) { - if p.capnames == nil { - p.capnames = make(map[string]int) - } - - if _, ok := p.capnames[name]; !ok { - p.capnames[name] = pos - p.capnamelist = append(p.capnamelist, name) - } -} - -func (p *parser) assignNameSlots() { - if p.capnames != nil { - for _, name := range p.capnamelist { - for p.isCaptureSlot(p.autocap) { - p.autocap++ - } - pos := p.capnames[name] - p.capnames[name] = p.autocap - p.noteCaptureSlot(p.autocap, pos) - - p.autocap++ - } - } - - // if the caps array has at least one gap, construct the list of used slots - if p.capcount < p.captop { - p.capnumlist = make([]int, p.capcount) - i := 0 - - for k := range p.caps { - p.capnumlist[i] = k - i++ - } - - sort.Ints(p.capnumlist) - } - - // merge capsnumlist into capnamelist - if p.capnames != nil || p.capnumlist != nil { - var oldcapnamelist []string - var next int - var k int - - if p.capnames == nil { - oldcapnamelist = nil - p.capnames = make(map[string]int) - p.capnamelist = []string{} - next = -1 - } else { - oldcapnamelist = p.capnamelist - p.capnamelist = []string{} - next = p.capnames[oldcapnamelist[0]] - } - - for i := 0; i < p.capcount; i++ { - j := i - if p.capnumlist != nil { - j = p.capnumlist[i] - } - - if next == j { - p.capnamelist = append(p.capnamelist, oldcapnamelist[k]) - k++ - - if k == len(oldcapnamelist) { - next = -1 - } else { - next = p.capnames[oldcapnamelist[k]] - } - - } else { - //feature: culture? - str := strconv.Itoa(j) - p.capnamelist = append(p.capnamelist, str) - p.capnames[str] = j - } - } - } -} - -func (p *parser) consumeAutocap() int { - r := p.autocap - p.autocap++ - return r -} - -// CountCaptures is a prescanner for deducing the slots used for -// captures by doing a partial tokenization of the pattern. -func (p *parser) countCaptures() error { - var ch rune - - p.noteCaptureSlot(0, 0) - - p.autocap = 1 - - for p.charsRight() > 0 { - pos := p.textpos() - ch = p.moveRightGetChar() - switch ch { - case '\\': - if p.charsRight() > 0 { - p.scanBackslash(true) - } - - case '#': - if p.useOptionX() { - p.moveLeft() - p.scanBlank() - } - - case '[': - p.scanCharSet(false, true) - - case ')': - if !p.emptyOptionsStack() { - p.popOptions() - } - - case '(': - if p.charsRight() >= 2 && p.rightChar(1) == '#' && p.rightChar(0) == '?' { - p.moveLeft() - p.scanBlank() - } else { - p.pushOptions() - if p.charsRight() > 0 && p.rightChar(0) == '?' { - // we have (?... - p.moveRight(1) - - if p.charsRight() > 1 && (p.rightChar(0) == '<' || p.rightChar(0) == '\'') { - // named group: (?<... or (?'... - - p.moveRight(1) - ch = p.rightChar(0) - - if ch != '0' && IsWordChar(ch) { - if ch >= '1' && ch <= '9' { - dec, err := p.scanDecimal() - if err != nil { - return err - } - p.noteCaptureSlot(dec, pos) - } else { - p.noteCaptureName(p.scanCapname(), pos) - } - } - } else if p.useRE2() && p.charsRight() > 2 && (p.rightChar(0) == 'P' && p.rightChar(1) == '<') { - // RE2-compat (?P<) - p.moveRight(2) - ch = p.rightChar(0) - if IsWordChar(ch) { - p.noteCaptureName(p.scanCapname(), pos) - } - - } else { - // (?... - - // get the options if it's an option construct (?cimsx-cimsx...) - p.scanOptions() - - if p.charsRight() > 0 { - if p.rightChar(0) == ')' { - // (?cimsx-cimsx) - p.moveRight(1) - p.popKeepOptions() - } else if p.rightChar(0) == '(' { - // alternation construct: (?(foo)yes|no) - // ignore the next paren so we don't capture the condition - p.ignoreNextParen = true - - // break from here so we don't reset ignoreNextParen - continue - } - } - } - } else { - if !p.useOptionN() && !p.ignoreNextParen { - p.noteCaptureSlot(p.consumeAutocap(), pos) - } - } - } - - p.ignoreNextParen = false - - } - } - - p.assignNameSlots() - return nil -} - -func (p *parser) reset(topopts RegexOptions) { - p.currentPos = 0 - p.autocap = 1 - p.ignoreNextParen = false - - if len(p.optionsStack) > 0 { - p.optionsStack = p.optionsStack[:0] - } - - p.options = topopts - p.stack = nil -} - -func (p *parser) scanRegex() (*regexNode, error) { - ch := '@' // nonspecial ch, means at beginning - isQuant := false - - p.startGroup(newRegexNodeMN(ntCapture, p.options, 0, -1)) - - for p.charsRight() > 0 { - wasPrevQuantifier := isQuant - isQuant = false - - if err := p.scanBlank(); err != nil { - return nil, err - } - - startpos := p.textpos() - - // move past all of the normal characters. We'll stop when we hit some kind of control character, - // or if IgnorePatternWhiteSpace is on, we'll stop when we see some whitespace. - if p.useOptionX() { - for p.charsRight() > 0 { - ch = p.rightChar(0) - //UGLY: clean up, this is ugly - if !(!isStopperX(ch) || (ch == '{' && !p.isTrueQuantifier())) { - break - } - p.moveRight(1) - } - } else { - for p.charsRight() > 0 { - ch = p.rightChar(0) - if !(!isSpecial(ch) || ch == '{' && !p.isTrueQuantifier()) { - break - } - p.moveRight(1) - } - } - - endpos := p.textpos() - - p.scanBlank() - - if p.charsRight() == 0 { - ch = '!' // nonspecial, means at end - } else if ch = p.rightChar(0); isSpecial(ch) { - isQuant = isQuantifier(ch) - p.moveRight(1) - } else { - ch = ' ' // nonspecial, means at ordinary char - } - - if startpos < endpos { - cchUnquantified := endpos - startpos - if isQuant { - cchUnquantified-- - } - wasPrevQuantifier = false - - if cchUnquantified > 0 { - p.addToConcatenate(startpos, cchUnquantified, false) - } - - if isQuant { - p.addUnitOne(p.charAt(endpos - 1)) - } - } - - switch ch { - case '!': - goto BreakOuterScan - - case ' ': - goto ContinueOuterScan - - case '[': - cc, err := p.scanCharSet(p.useOptionI(), false) - if err != nil { - return nil, err - } - p.addUnitSet(cc) - - case '(': - p.pushOptions() - - if grouper, err := p.scanGroupOpen(); err != nil { - return nil, err - } else if grouper == nil { - p.popKeepOptions() - } else { - p.pushGroup() - p.startGroup(grouper) - } - - continue - - case '|': - p.addAlternate() - goto ContinueOuterScan - - case ')': - if p.emptyStack() { - return nil, p.getErr(ErrUnexpectedParen) - } - - if err := p.addGroup(); err != nil { - return nil, err - } - if err := p.popGroup(); err != nil { - return nil, err - } - p.popOptions() - - if p.unit == nil { - goto ContinueOuterScan - } - - case '\\': - n, err := p.scanBackslash(false) - if err != nil { - return nil, err - } - p.addUnitNode(n) - - case '^': - if p.useOptionM() { - p.addUnitType(ntBol) - } else { - p.addUnitType(ntBeginning) - } - - case '$': - if p.useOptionM() { - p.addUnitType(ntEol) - } else { - p.addUnitType(ntEndZ) - } - - case '.': - if p.useOptionE() { - p.addUnitSet(ECMAAnyClass()) - } else if p.useOptionS() { - p.addUnitSet(AnyClass()) - } else { - p.addUnitNotone('\n') - } - - case '{', '*', '+', '?': - if p.unit == nil { - if wasPrevQuantifier { - return nil, p.getErr(ErrInvalidRepeatOp) - } else { - return nil, p.getErr(ErrMissingRepeatArgument) - } - } - p.moveLeft() - - default: - return nil, p.getErr(ErrInternalError) - } - - if err := p.scanBlank(); err != nil { - return nil, err - } - - if p.charsRight() > 0 { - isQuant = p.isTrueQuantifier() - } - if p.charsRight() == 0 || !isQuant { - //maintain odd C# assignment order -- not sure if required, could clean up? - p.addConcatenate() - goto ContinueOuterScan - } - - ch = p.moveRightGetChar() - - // Handle quantifiers - for p.unit != nil { - var min, max int - var lazy bool - - switch ch { - case '*': - min = 0 - max = math.MaxInt32 - - case '?': - min = 0 - max = 1 - - case '+': - min = 1 - max = math.MaxInt32 - - case '{': - { - var err error - startpos = p.textpos() - if min, err = p.scanDecimal(); err != nil { - return nil, err - } - max = min - if startpos < p.textpos() { - if p.charsRight() > 0 && p.rightChar(0) == ',' { - p.moveRight(1) - if p.charsRight() == 0 || p.rightChar(0) == '}' { - max = math.MaxInt32 - } else { - if max, err = p.scanDecimal(); err != nil { - return nil, err - } - } - } - } - - if startpos == p.textpos() || p.charsRight() == 0 || p.moveRightGetChar() != '}' { - p.addConcatenate() - p.textto(startpos - 1) - goto ContinueOuterScan - } - } - - default: - return nil, p.getErr(ErrInternalError) - } - - if err := p.scanBlank(); err != nil { - return nil, err - } - - if p.charsRight() == 0 || p.rightChar(0) != '?' { - lazy = false - } else { - p.moveRight(1) - lazy = true - } - - if min > max { - return nil, p.getErr(ErrInvalidRepeatSize) - } - - p.addConcatenate3(lazy, min, max) - } - - ContinueOuterScan: - } - -BreakOuterScan: - ; - - if !p.emptyStack() { - return nil, p.getErr(ErrMissingParen) - } - - if err := p.addGroup(); err != nil { - return nil, err - } - - return p.unit, nil - -} - -/* - * Simple parsing for replacement patterns - */ -func (p *parser) scanReplacement() (*regexNode, error) { - var c, startpos int - - p.concatenation = newRegexNode(ntConcatenate, p.options) - - for { - c = p.charsRight() - if c == 0 { - break - } - - startpos = p.textpos() - - for c > 0 && p.rightChar(0) != '$' { - p.moveRight(1) - c-- - } - - p.addToConcatenate(startpos, p.textpos()-startpos, true) - - if c > 0 { - if p.moveRightGetChar() == '$' { - n, err := p.scanDollar() - if err != nil { - return nil, err - } - p.addUnitNode(n) - } - p.addConcatenate() - } - } - - return p.concatenation, nil -} - -/* - * Scans $ patterns recognized within replacement patterns - */ -func (p *parser) scanDollar() (*regexNode, error) { - if p.charsRight() == 0 { - return newRegexNodeCh(ntOne, p.options, '$'), nil - } - - ch := p.rightChar(0) - angled := false - backpos := p.textpos() - lastEndPos := backpos - - // Note angle - - if ch == '{' && p.charsRight() > 1 { - angled = true - p.moveRight(1) - ch = p.rightChar(0) - } - - // Try to parse backreference: \1 or \{1} or \{cap} - - if ch >= '0' && ch <= '9' { - if !angled && p.useOptionE() { - capnum := -1 - newcapnum := int(ch - '0') - p.moveRight(1) - if p.isCaptureSlot(newcapnum) { - capnum = newcapnum - lastEndPos = p.textpos() - } - - for p.charsRight() > 0 { - ch = p.rightChar(0) - if ch < '0' || ch > '9' { - break - } - digit := int(ch - '0') - if newcapnum > maxValueDiv10 || (newcapnum == maxValueDiv10 && digit > maxValueMod10) { - return nil, p.getErr(ErrCaptureGroupOutOfRange) - } - - newcapnum = newcapnum*10 + digit - - p.moveRight(1) - if p.isCaptureSlot(newcapnum) { - capnum = newcapnum - lastEndPos = p.textpos() - } - } - p.textto(lastEndPos) - if capnum >= 0 { - return newRegexNodeM(ntRef, p.options, capnum), nil - } - } else { - capnum, err := p.scanDecimal() - if err != nil { - return nil, err - } - if !angled || p.charsRight() > 0 && p.moveRightGetChar() == '}' { - if p.isCaptureSlot(capnum) { - return newRegexNodeM(ntRef, p.options, capnum), nil - } - } - } - } else if angled && IsWordChar(ch) { - capname := p.scanCapname() - - if p.charsRight() > 0 && p.moveRightGetChar() == '}' { - if p.isCaptureName(capname) { - return newRegexNodeM(ntRef, p.options, p.captureSlotFromName(capname)), nil - } - } - } else if !angled { - capnum := 1 - - switch ch { - case '$': - p.moveRight(1) - return newRegexNodeCh(ntOne, p.options, '$'), nil - case '&': - capnum = 0 - case '`': - capnum = replaceLeftPortion - case '\'': - capnum = replaceRightPortion - case '+': - capnum = replaceLastGroup - case '_': - capnum = replaceWholeString - } - - if capnum != 1 { - p.moveRight(1) - return newRegexNodeM(ntRef, p.options, capnum), nil - } - } - - // unrecognized $: literalize - - p.textto(backpos) - return newRegexNodeCh(ntOne, p.options, '$'), nil -} - -// scanGroupOpen scans chars following a '(' (not counting the '('), and returns -// a RegexNode for the type of group scanned, or nil if the group -// simply changed options (?cimsx-cimsx) or was a comment (#...). -func (p *parser) scanGroupOpen() (*regexNode, error) { - var ch rune - var nt nodeType - var err error - close := '>' - start := p.textpos() - - // just return a RegexNode if we have: - // 1. "(" followed by nothing - // 2. "(x" where x != ? - // 3. "(?)" - if p.charsRight() == 0 || p.rightChar(0) != '?' || (p.rightChar(0) == '?' && (p.charsRight() > 1 && p.rightChar(1) == ')')) { - if p.useOptionN() || p.ignoreNextParen { - p.ignoreNextParen = false - return newRegexNode(ntGroup, p.options), nil - } - return newRegexNodeMN(ntCapture, p.options, p.consumeAutocap(), -1), nil - } - - p.moveRight(1) - - for { - if p.charsRight() == 0 { - break - } - - switch ch = p.moveRightGetChar(); ch { - case ':': - nt = ntGroup - - case '=': - p.options &= ^RightToLeft - nt = ntRequire - - case '!': - p.options &= ^RightToLeft - nt = ntPrevent - - case '>': - nt = ntGreedy - - case '\'': - close = '\'' - fallthrough - - case '<': - if p.charsRight() == 0 { - goto BreakRecognize - } - - switch ch = p.moveRightGetChar(); ch { - case '=': - if close == '\'' { - goto BreakRecognize - } - - p.options |= RightToLeft - nt = ntRequire - - case '!': - if close == '\'' { - goto BreakRecognize - } - - p.options |= RightToLeft - nt = ntPrevent - - default: - p.moveLeft() - capnum := -1 - uncapnum := -1 - proceed := false - - // grab part before - - - if ch >= '0' && ch <= '9' { - if capnum, err = p.scanDecimal(); err != nil { - return nil, err - } - - if !p.isCaptureSlot(capnum) { - capnum = -1 - } - - // check if we have bogus characters after the number - if p.charsRight() > 0 && !(p.rightChar(0) == close || p.rightChar(0) == '-') { - return nil, p.getErr(ErrInvalidGroupName) - } - if capnum == 0 { - return nil, p.getErr(ErrCapNumNotZero) - } - } else if IsWordChar(ch) { - capname := p.scanCapname() - - if p.isCaptureName(capname) { - capnum = p.captureSlotFromName(capname) - } - - // check if we have bogus character after the name - if p.charsRight() > 0 && !(p.rightChar(0) == close || p.rightChar(0) == '-') { - return nil, p.getErr(ErrInvalidGroupName) - } - } else if ch == '-' { - proceed = true - } else { - // bad group name - starts with something other than a word character and isn't a number - return nil, p.getErr(ErrInvalidGroupName) - } - - // grab part after - if any - - if (capnum != -1 || proceed == true) && p.charsRight() > 0 && p.rightChar(0) == '-' { - p.moveRight(1) - - //no more chars left, no closing char, etc - if p.charsRight() == 0 { - return nil, p.getErr(ErrInvalidGroupName) - } - - ch = p.rightChar(0) - if ch >= '0' && ch <= '9' { - if uncapnum, err = p.scanDecimal(); err != nil { - return nil, err - } - - if !p.isCaptureSlot(uncapnum) { - return nil, p.getErr(ErrUndefinedBackRef, uncapnum) - } - - // check if we have bogus characters after the number - if p.charsRight() > 0 && p.rightChar(0) != close { - return nil, p.getErr(ErrInvalidGroupName) - } - } else if IsWordChar(ch) { - uncapname := p.scanCapname() - - if !p.isCaptureName(uncapname) { - return nil, p.getErr(ErrUndefinedNameRef, uncapname) - } - uncapnum = p.captureSlotFromName(uncapname) - - // check if we have bogus character after the name - if p.charsRight() > 0 && p.rightChar(0) != close { - return nil, p.getErr(ErrInvalidGroupName) - } - } else { - // bad group name - starts with something other than a word character and isn't a number - return nil, p.getErr(ErrInvalidGroupName) - } - } - - // actually make the node - - if (capnum != -1 || uncapnum != -1) && p.charsRight() > 0 && p.moveRightGetChar() == close { - return newRegexNodeMN(ntCapture, p.options, capnum, uncapnum), nil - } - goto BreakRecognize - } - - case '(': - // alternation construct (?(...) | ) - - parenPos := p.textpos() - if p.charsRight() > 0 { - ch = p.rightChar(0) - - // check if the alternation condition is a backref - if ch >= '0' && ch <= '9' { - var capnum int - if capnum, err = p.scanDecimal(); err != nil { - return nil, err - } - if p.charsRight() > 0 && p.moveRightGetChar() == ')' { - if p.isCaptureSlot(capnum) { - return newRegexNodeM(ntTestref, p.options, capnum), nil - } - return nil, p.getErr(ErrUndefinedReference, capnum) - } - - return nil, p.getErr(ErrMalformedReference, capnum) - - } else if IsWordChar(ch) { - capname := p.scanCapname() - - if p.isCaptureName(capname) && p.charsRight() > 0 && p.moveRightGetChar() == ')' { - return newRegexNodeM(ntTestref, p.options, p.captureSlotFromName(capname)), nil - } - } - } - // not a backref - nt = ntTestgroup - p.textto(parenPos - 1) // jump to the start of the parentheses - p.ignoreNextParen = true // but make sure we don't try to capture the insides - - charsRight := p.charsRight() - if charsRight >= 3 && p.rightChar(1) == '?' { - rightchar2 := p.rightChar(2) - // disallow comments in the condition - if rightchar2 == '#' { - return nil, p.getErr(ErrAlternationCantHaveComment) - } - - // disallow named capture group (?<..>..) in the condition - if rightchar2 == '\'' { - return nil, p.getErr(ErrAlternationCantCapture) - } - - if charsRight >= 4 && (rightchar2 == '<' && p.rightChar(3) != '!' && p.rightChar(3) != '=') { - return nil, p.getErr(ErrAlternationCantCapture) - } - } - - case 'P': - if p.useRE2() { - // support for P syntax - if p.charsRight() < 3 { - goto BreakRecognize - } - - ch = p.moveRightGetChar() - if ch != '<' { - goto BreakRecognize - } - - ch = p.moveRightGetChar() - p.moveLeft() - - if IsWordChar(ch) { - capnum := -1 - capname := p.scanCapname() - - if p.isCaptureName(capname) { - capnum = p.captureSlotFromName(capname) - } - - // check if we have bogus character after the name - if p.charsRight() > 0 && p.rightChar(0) != '>' { - return nil, p.getErr(ErrInvalidGroupName) - } - - // actually make the node - - if capnum != -1 && p.charsRight() > 0 && p.moveRightGetChar() == '>' { - return newRegexNodeMN(ntCapture, p.options, capnum, -1), nil - } - goto BreakRecognize - - } else { - // bad group name - starts with something other than a word character and isn't a number - return nil, p.getErr(ErrInvalidGroupName) - } - } - // if we're not using RE2 compat mode then - // we just behave like normal - fallthrough - - default: - p.moveLeft() - - nt = ntGroup - // disallow options in the children of a testgroup node - if p.group.t != ntTestgroup { - p.scanOptions() - } - if p.charsRight() == 0 { - goto BreakRecognize - } - - if ch = p.moveRightGetChar(); ch == ')' { - return nil, nil - } - - if ch != ':' { - goto BreakRecognize - } - - } - - return newRegexNode(nt, p.options), nil - } - -BreakRecognize: - - // break Recognize comes here - - return nil, p.getErr(ErrUnrecognizedGrouping, string(p.pattern[start:p.textpos()])) -} - -// scans backslash specials and basics -func (p *parser) scanBackslash(scanOnly bool) (*regexNode, error) { - - if p.charsRight() == 0 { - return nil, p.getErr(ErrIllegalEndEscape) - } - - switch ch := p.rightChar(0); ch { - case 'b', 'B', 'A', 'G', 'Z', 'z': - p.moveRight(1) - return newRegexNode(p.typeFromCode(ch), p.options), nil - - case 'w': - p.moveRight(1) - if p.useOptionE() { - return newRegexNodeSet(ntSet, p.options, ECMAWordClass()), nil - } - return newRegexNodeSet(ntSet, p.options, WordClass()), nil - - case 'W': - p.moveRight(1) - if p.useOptionE() { - return newRegexNodeSet(ntSet, p.options, NotECMAWordClass()), nil - } - return newRegexNodeSet(ntSet, p.options, NotWordClass()), nil - - case 's': - p.moveRight(1) - if p.useOptionE() { - return newRegexNodeSet(ntSet, p.options, ECMASpaceClass()), nil - } - return newRegexNodeSet(ntSet, p.options, SpaceClass()), nil - - case 'S': - p.moveRight(1) - if p.useOptionE() { - return newRegexNodeSet(ntSet, p.options, NotECMASpaceClass()), nil - } - return newRegexNodeSet(ntSet, p.options, NotSpaceClass()), nil - - case 'd': - p.moveRight(1) - if p.useOptionE() { - return newRegexNodeSet(ntSet, p.options, ECMADigitClass()), nil - } - return newRegexNodeSet(ntSet, p.options, DigitClass()), nil - - case 'D': - p.moveRight(1) - if p.useOptionE() { - return newRegexNodeSet(ntSet, p.options, NotECMADigitClass()), nil - } - return newRegexNodeSet(ntSet, p.options, NotDigitClass()), nil - - case 'p', 'P': - p.moveRight(1) - prop, err := p.parseProperty() - if err != nil { - return nil, err - } - cc := &CharSet{} - cc.addCategory(prop, (ch != 'p'), p.useOptionI(), p.patternRaw) - if p.useOptionI() { - cc.addLowercase() - } - - return newRegexNodeSet(ntSet, p.options, cc), nil - - default: - return p.scanBasicBackslash(scanOnly) - } -} - -// Scans \-style backreferences and character escapes -func (p *parser) scanBasicBackslash(scanOnly bool) (*regexNode, error) { - if p.charsRight() == 0 { - return nil, p.getErr(ErrIllegalEndEscape) - } - angled := false - close := '\x00' - - backpos := p.textpos() - ch := p.rightChar(0) - - // allow \k instead of \, which is now deprecated - - if ch == 'k' { - if p.charsRight() >= 2 { - p.moveRight(1) - ch = p.moveRightGetChar() - - if ch == '<' || ch == '\'' { - angled = true - if ch == '\'' { - close = '\'' - } else { - close = '>' - } - } - } - - if !angled || p.charsRight() <= 0 { - return nil, p.getErr(ErrMalformedNameRef) - } - - ch = p.rightChar(0) - - } else if (ch == '<' || ch == '\'') && p.charsRight() > 1 { // Note angle without \g - angled = true - if ch == '\'' { - close = '\'' - } else { - close = '>' - } - - p.moveRight(1) - ch = p.rightChar(0) - } - - // Try to parse backreference: \<1> or \ - - if angled && ch >= '0' && ch <= '9' { - capnum, err := p.scanDecimal() - if err != nil { - return nil, err - } - - if p.charsRight() > 0 && p.moveRightGetChar() == close { - if p.isCaptureSlot(capnum) { - return newRegexNodeM(ntRef, p.options, capnum), nil - } - return nil, p.getErr(ErrUndefinedBackRef, capnum) - } - } else if !angled && ch >= '1' && ch <= '9' { // Try to parse backreference or octal: \1 - capnum, err := p.scanDecimal() - if err != nil { - return nil, err - } - - if scanOnly { - return nil, nil - } - - if p.useOptionE() || p.isCaptureSlot(capnum) { - return newRegexNodeM(ntRef, p.options, capnum), nil - } - if capnum <= 9 { - return nil, p.getErr(ErrUndefinedBackRef, capnum) - } - - } else if angled && IsWordChar(ch) { - capname := p.scanCapname() - - if p.charsRight() > 0 && p.moveRightGetChar() == close { - if p.isCaptureName(capname) { - return newRegexNodeM(ntRef, p.options, p.captureSlotFromName(capname)), nil - } - return nil, p.getErr(ErrUndefinedNameRef, capname) - } - } - - // Not backreference: must be char code - - p.textto(backpos) - ch, err := p.scanCharEscape() - if err != nil { - return nil, err - } - - if p.useOptionI() { - ch = unicode.ToLower(ch) - } - - return newRegexNodeCh(ntOne, p.options, ch), nil -} - -// Scans X for \p{X} or \P{X} -func (p *parser) parseProperty() (string, error) { - if p.charsRight() < 3 { - return "", p.getErr(ErrIncompleteSlashP) - } - ch := p.moveRightGetChar() - if ch != '{' { - return "", p.getErr(ErrMalformedSlashP) - } - - startpos := p.textpos() - for p.charsRight() > 0 { - ch = p.moveRightGetChar() - if !(IsWordChar(ch) || ch == '-') { - p.moveLeft() - break - } - } - capname := string(p.pattern[startpos:p.textpos()]) - - if p.charsRight() == 0 || p.moveRightGetChar() != '}' { - return "", p.getErr(ErrIncompleteSlashP) - } - - if !isValidUnicodeCat(capname) { - return "", p.getErr(ErrUnknownSlashP, capname) - } - - return capname, nil -} - -// Returns ReNode type for zero-length assertions with a \ code. -func (p *parser) typeFromCode(ch rune) nodeType { - switch ch { - case 'b': - if p.useOptionE() { - return ntECMABoundary - } - return ntBoundary - case 'B': - if p.useOptionE() { - return ntNonECMABoundary - } - return ntNonboundary - case 'A': - return ntBeginning - case 'G': - return ntStart - case 'Z': - return ntEndZ - case 'z': - return ntEnd - default: - return ntNothing - } -} - -// Scans whitespace or x-mode comments. -func (p *parser) scanBlank() error { - if p.useOptionX() { - for { - for p.charsRight() > 0 && isSpace(p.rightChar(0)) { - p.moveRight(1) - } - - if p.charsRight() == 0 { - break - } - - if p.rightChar(0) == '#' { - for p.charsRight() > 0 && p.rightChar(0) != '\n' { - p.moveRight(1) - } - } else if p.charsRight() >= 3 && p.rightChar(2) == '#' && - p.rightChar(1) == '?' && p.rightChar(0) == '(' { - for p.charsRight() > 0 && p.rightChar(0) != ')' { - p.moveRight(1) - } - if p.charsRight() == 0 { - return p.getErr(ErrUnterminatedComment) - } - p.moveRight(1) - } else { - break - } - } - } else { - for { - if p.charsRight() < 3 || p.rightChar(2) != '#' || - p.rightChar(1) != '?' || p.rightChar(0) != '(' { - return nil - } - - for p.charsRight() > 0 && p.rightChar(0) != ')' { - p.moveRight(1) - } - if p.charsRight() == 0 { - return p.getErr(ErrUnterminatedComment) - } - p.moveRight(1) - } - } - return nil -} - -func (p *parser) scanCapname() string { - startpos := p.textpos() - - for p.charsRight() > 0 { - if !IsWordChar(p.moveRightGetChar()) { - p.moveLeft() - break - } - } - - return string(p.pattern[startpos:p.textpos()]) -} - -//Scans contents of [] (not including []'s), and converts to a set. -func (p *parser) scanCharSet(caseInsensitive, scanOnly bool) (*CharSet, error) { - ch := '\x00' - chPrev := '\x00' - inRange := false - firstChar := true - closed := false - - var cc *CharSet - if !scanOnly { - cc = &CharSet{} - } - - if p.charsRight() > 0 && p.rightChar(0) == '^' { - p.moveRight(1) - if !scanOnly { - cc.negate = true - } - } - - for ; p.charsRight() > 0; firstChar = false { - fTranslatedChar := false - ch = p.moveRightGetChar() - if ch == ']' { - if !firstChar { - closed = true - break - } else if p.useOptionE() { - if !scanOnly { - cc.addRanges(NoneClass().ranges) - } - closed = true - break - } - - } else if ch == '\\' && p.charsRight() > 0 { - switch ch = p.moveRightGetChar(); ch { - case 'D', 'd': - if !scanOnly { - if inRange { - return nil, p.getErr(ErrBadClassInCharRange, ch) - } - cc.addDigit(p.useOptionE(), ch == 'D', p.patternRaw) - } - continue - - case 'S', 's': - if !scanOnly { - if inRange { - return nil, p.getErr(ErrBadClassInCharRange, ch) - } - cc.addSpace(p.useOptionE(), ch == 'S') - } - continue - - case 'W', 'w': - if !scanOnly { - if inRange { - return nil, p.getErr(ErrBadClassInCharRange, ch) - } - - cc.addWord(p.useOptionE(), ch == 'W') - } - continue - - case 'p', 'P': - if !scanOnly { - if inRange { - return nil, p.getErr(ErrBadClassInCharRange, ch) - } - prop, err := p.parseProperty() - if err != nil { - return nil, err - } - cc.addCategory(prop, (ch != 'p'), caseInsensitive, p.patternRaw) - } else { - p.parseProperty() - } - - continue - - case '-': - if !scanOnly { - cc.addRange(ch, ch) - } - continue - - default: - p.moveLeft() - var err error - ch, err = p.scanCharEscape() // non-literal character - if err != nil { - return nil, err - } - fTranslatedChar = true - break // this break will only break out of the switch - } - } else if ch == '[' { - // This is code for Posix style properties - [:Ll:] or [:IsTibetan:]. - // It currently doesn't do anything other than skip the whole thing! - if p.charsRight() > 0 && p.rightChar(0) == ':' && !inRange { - savePos := p.textpos() - - p.moveRight(1) - negate := false - if p.charsRight() > 1 && p.rightChar(0) == '^' { - negate = true - p.moveRight(1) - } - - nm := p.scanCapname() // snag the name - if !scanOnly && p.useRE2() { - // look up the name since these are valid for RE2 - // add the group based on the name - if ok := cc.addNamedASCII(nm, negate); !ok { - return nil, p.getErr(ErrInvalidCharRange) - } - } - if p.charsRight() < 2 || p.moveRightGetChar() != ':' || p.moveRightGetChar() != ']' { - p.textto(savePos) - } else if p.useRE2() { - // move on - continue - } - } - } - - if inRange { - inRange = false - if !scanOnly { - if ch == '[' && !fTranslatedChar && !firstChar { - // We thought we were in a range, but we're actually starting a subtraction. - // In that case, we'll add chPrev to our char class, skip the opening [, and - // scan the new character class recursively. - cc.addChar(chPrev) - sub, err := p.scanCharSet(caseInsensitive, false) - if err != nil { - return nil, err - } - cc.addSubtraction(sub) - - if p.charsRight() > 0 && p.rightChar(0) != ']' { - return nil, p.getErr(ErrSubtractionMustBeLast) - } - } else { - // a regular range, like a-z - if chPrev > ch { - return nil, p.getErr(ErrReversedCharRange) - } - cc.addRange(chPrev, ch) - } - } - } else if p.charsRight() >= 2 && p.rightChar(0) == '-' && p.rightChar(1) != ']' { - // this could be the start of a range - chPrev = ch - inRange = true - p.moveRight(1) - } else if p.charsRight() >= 1 && ch == '-' && !fTranslatedChar && p.rightChar(0) == '[' && !firstChar { - // we aren't in a range, and now there is a subtraction. Usually this happens - // only when a subtraction follows a range, like [a-z-[b]] - if !scanOnly { - p.moveRight(1) - sub, err := p.scanCharSet(caseInsensitive, false) - if err != nil { - return nil, err - } - cc.addSubtraction(sub) - - if p.charsRight() > 0 && p.rightChar(0) != ']' { - return nil, p.getErr(ErrSubtractionMustBeLast) - } - } else { - p.moveRight(1) - p.scanCharSet(caseInsensitive, true) - } - } else { - if !scanOnly { - cc.addRange(ch, ch) - } - } - } - - if !closed { - return nil, p.getErr(ErrUnterminatedBracket) - } - - if !scanOnly && caseInsensitive { - cc.addLowercase() - } - - return cc, nil -} - -// Scans any number of decimal digits (pegs value at 2^31-1 if too large) -func (p *parser) scanDecimal() (int, error) { - i := 0 - var d int - - for p.charsRight() > 0 { - d = int(p.rightChar(0) - '0') - if d < 0 || d > 9 { - break - } - p.moveRight(1) - - if i > maxValueDiv10 || (i == maxValueDiv10 && d > maxValueMod10) { - return 0, p.getErr(ErrCaptureGroupOutOfRange) - } - - i *= 10 - i += d - } - - return int(i), nil -} - -// Returns true for options allowed only at the top level -func isOnlyTopOption(option RegexOptions) bool { - return option == RightToLeft || option == ECMAScript || option == RE2 -} - -// Scans cimsx-cimsx option string, stops at the first unrecognized char. -func (p *parser) scanOptions() { - - for off := false; p.charsRight() > 0; p.moveRight(1) { - ch := p.rightChar(0) - - if ch == '-' { - off = true - } else if ch == '+' { - off = false - } else { - option := optionFromCode(ch) - if option == 0 || isOnlyTopOption(option) { - return - } - - if off { - p.options &= ^option - } else { - p.options |= option - } - } - } -} - -// Scans \ code for escape codes that map to single unicode chars. -func (p *parser) scanCharEscape() (rune, error) { - - ch := p.moveRightGetChar() - - if ch >= '0' && ch <= '7' { - p.moveLeft() - return p.scanOctal(), nil - } - - switch ch { - case 'x': - // support for \x{HEX} syntax from Perl and PCRE - if p.charsRight() > 0 && p.rightChar(0) == '{' { - p.moveRight(1) - return p.scanHexUntilBrace() - } - return p.scanHex(2) - case 'u': - return p.scanHex(4) - case 'a': - return '\u0007', nil - case 'b': - return '\b', nil - case 'e': - return '\u001B', nil - case 'f': - return '\f', nil - case 'n': - return '\n', nil - case 'r': - return '\r', nil - case 't': - return '\t', nil - case 'v': - return '\u000B', nil - case 'c': - return p.scanControl() - default: - if !p.useOptionE() && IsWordChar(ch) { - return 0, p.getErr(ErrUnrecognizedEscape, string(ch)) - } - return ch, nil - } -} - -// Grabs and converts an ascii control character -func (p *parser) scanControl() (rune, error) { - if p.charsRight() <= 0 { - return 0, p.getErr(ErrMissingControl) - } - - ch := p.moveRightGetChar() - - // \ca interpreted as \cA - - if ch >= 'a' && ch <= 'z' { - ch = (ch - ('a' - 'A')) - } - ch = (ch - '@') - if ch >= 0 && ch < ' ' { - return ch, nil - } - - return 0, p.getErr(ErrUnrecognizedControl) - -} - -// Scan hex digits until we hit a closing brace. -// Non-hex digits, hex value too large for UTF-8, or running out of chars are errors -func (p *parser) scanHexUntilBrace() (rune, error) { - // PCRE spec reads like unlimited hex digits are allowed, but unicode has a limit - // so we can enforce that - i := 0 - hasContent := false - - for p.charsRight() > 0 { - ch := p.moveRightGetChar() - if ch == '}' { - // hit our close brace, we're done here - // prevent \x{} - if !hasContent { - return 0, p.getErr(ErrTooFewHex) - } - return rune(i), nil - } - hasContent = true - // no brace needs to be hex digit - d := hexDigit(ch) - if d < 0 { - return 0, p.getErr(ErrMissingBrace) - } - - i *= 0x10 - i += d - - if i > unicode.MaxRune { - return 0, p.getErr(ErrInvalidHex) - } - } - - // we only make it here if we run out of digits without finding the brace - return 0, p.getErr(ErrMissingBrace) -} - -// Scans exactly c hex digits (c=2 for \xFF, c=4 for \uFFFF) -func (p *parser) scanHex(c int) (rune, error) { - - i := 0 - - if p.charsRight() >= c { - for c > 0 { - d := hexDigit(p.moveRightGetChar()) - if d < 0 { - break - } - i *= 0x10 - i += d - c-- - } - } - - if c > 0 { - return 0, p.getErr(ErrTooFewHex) - } - - return rune(i), nil -} - -// Returns n <= 0xF for a hex digit. -func hexDigit(ch rune) int { - - if d := uint(ch - '0'); d <= 9 { - return int(d) - } - - if d := uint(ch - 'a'); d <= 5 { - return int(d + 0xa) - } - - if d := uint(ch - 'A'); d <= 5 { - return int(d + 0xa) - } - - return -1 -} - -// Scans up to three octal digits (stops before exceeding 0377). -func (p *parser) scanOctal() rune { - // Consume octal chars only up to 3 digits and value 0377 - - c := 3 - - if c > p.charsRight() { - c = p.charsRight() - } - - //we know the first char is good because the caller had to check - i := 0 - d := int(p.rightChar(0) - '0') - for c > 0 && d <= 7 { - i *= 8 - i += d - if p.useOptionE() && i >= 0x20 { - break - } - c-- - - p.moveRight(1) - if !p.rightMost() { - d = int(p.rightChar(0) - '0') - } - } - - // Octal codes only go up to 255. Any larger and the behavior that Perl follows - // is simply to truncate the high bits. - i &= 0xFF - - return rune(i) -} - -// Returns the current parsing position. -func (p *parser) textpos() int { - return p.currentPos -} - -// Zaps to a specific parsing position. -func (p *parser) textto(pos int) { - p.currentPos = pos -} - -// Returns the char at the right of the current parsing position and advances to the right. -func (p *parser) moveRightGetChar() rune { - ch := p.pattern[p.currentPos] - p.currentPos++ - return ch -} - -// Moves the current position to the right. -func (p *parser) moveRight(i int) { - // default would be 1 - p.currentPos += i -} - -// Moves the current parsing position one to the left. -func (p *parser) moveLeft() { - p.currentPos-- -} - -// Returns the char left of the current parsing position. -func (p *parser) charAt(i int) rune { - return p.pattern[i] -} - -// Returns the char i chars right of the current parsing position. -func (p *parser) rightChar(i int) rune { - // default would be 0 - return p.pattern[p.currentPos+i] -} - -// Number of characters to the right of the current parsing position. -func (p *parser) charsRight() int { - return len(p.pattern) - p.currentPos -} - -func (p *parser) rightMost() bool { - return p.currentPos == len(p.pattern) -} - -// Looks up the slot number for a given name -func (p *parser) captureSlotFromName(capname string) int { - return p.capnames[capname] -} - -// True if the capture slot was noted -func (p *parser) isCaptureSlot(i int) bool { - if p.caps != nil { - _, ok := p.caps[i] - return ok - } - - return (i >= 0 && i < p.capsize) -} - -// Looks up the slot number for a given name -func (p *parser) isCaptureName(capname string) bool { - if p.capnames == nil { - return false - } - - _, ok := p.capnames[capname] - return ok -} - -// option shortcuts - -// True if N option disabling '(' autocapture is on. -func (p *parser) useOptionN() bool { - return (p.options & ExplicitCapture) != 0 -} - -// True if I option enabling case-insensitivity is on. -func (p *parser) useOptionI() bool { - return (p.options & IgnoreCase) != 0 -} - -// True if M option altering meaning of $ and ^ is on. -func (p *parser) useOptionM() bool { - return (p.options & Multiline) != 0 -} - -// True if S option altering meaning of . is on. -func (p *parser) useOptionS() bool { - return (p.options & Singleline) != 0 -} - -// True if X option enabling whitespace/comment mode is on. -func (p *parser) useOptionX() bool { - return (p.options & IgnorePatternWhitespace) != 0 -} - -// True if E option enabling ECMAScript behavior on. -func (p *parser) useOptionE() bool { - return (p.options & ECMAScript) != 0 -} - -// true to use RE2 compatibility parsing behavior. -func (p *parser) useRE2() bool { - return (p.options & RE2) != 0 -} - -// True if options stack is empty. -func (p *parser) emptyOptionsStack() bool { - return len(p.optionsStack) == 0 -} - -// Finish the current quantifiable (when a quantifier is not found or is not possible) -func (p *parser) addConcatenate() { - // The first (| inside a Testgroup group goes directly to the group - p.concatenation.addChild(p.unit) - p.unit = nil -} - -// Finish the current quantifiable (when a quantifier is found) -func (p *parser) addConcatenate3(lazy bool, min, max int) { - p.concatenation.addChild(p.unit.makeQuantifier(lazy, min, max)) - p.unit = nil -} - -// Sets the current unit to a single char node -func (p *parser) addUnitOne(ch rune) { - if p.useOptionI() { - ch = unicode.ToLower(ch) - } - - p.unit = newRegexNodeCh(ntOne, p.options, ch) -} - -// Sets the current unit to a single inverse-char node -func (p *parser) addUnitNotone(ch rune) { - if p.useOptionI() { - ch = unicode.ToLower(ch) - } - - p.unit = newRegexNodeCh(ntNotone, p.options, ch) -} - -// Sets the current unit to a single set node -func (p *parser) addUnitSet(set *CharSet) { - p.unit = newRegexNodeSet(ntSet, p.options, set) -} - -// Sets the current unit to a subtree -func (p *parser) addUnitNode(node *regexNode) { - p.unit = node -} - -// Sets the current unit to an assertion of the specified type -func (p *parser) addUnitType(t nodeType) { - p.unit = newRegexNode(t, p.options) -} - -// Finish the current group (in response to a ')' or end) -func (p *parser) addGroup() error { - if p.group.t == ntTestgroup || p.group.t == ntTestref { - p.group.addChild(p.concatenation.reverseLeft()) - if (p.group.t == ntTestref && len(p.group.children) > 2) || len(p.group.children) > 3 { - return p.getErr(ErrTooManyAlternates) - } - } else { - p.alternation.addChild(p.concatenation.reverseLeft()) - p.group.addChild(p.alternation) - } - - p.unit = p.group - return nil -} - -// Pops the option stack, but keeps the current options unchanged. -func (p *parser) popKeepOptions() { - lastIdx := len(p.optionsStack) - 1 - p.optionsStack = p.optionsStack[:lastIdx] -} - -// Recalls options from the stack. -func (p *parser) popOptions() { - lastIdx := len(p.optionsStack) - 1 - // get the last item on the stack and then remove it by reslicing - p.options = p.optionsStack[lastIdx] - p.optionsStack = p.optionsStack[:lastIdx] -} - -// Saves options on a stack. -func (p *parser) pushOptions() { - p.optionsStack = append(p.optionsStack, p.options) -} - -// Add a string to the last concatenate. -func (p *parser) addToConcatenate(pos, cch int, isReplacement bool) { - var node *regexNode - - if cch == 0 { - return - } - - if cch > 1 { - str := p.pattern[pos : pos+cch] - - if p.useOptionI() && !isReplacement { - // We do the ToLower character by character for consistency. With surrogate chars, doing - // a ToLower on the entire string could actually change the surrogate pair. This is more correct - // linguistically, but since Regex doesn't support surrogates, it's more important to be - // consistent. - for i := 0; i < len(str); i++ { - str[i] = unicode.ToLower(str[i]) - } - } - - node = newRegexNodeStr(ntMulti, p.options, str) - } else { - ch := p.charAt(pos) - - if p.useOptionI() && !isReplacement { - ch = unicode.ToLower(ch) - } - - node = newRegexNodeCh(ntOne, p.options, ch) - } - - p.concatenation.addChild(node) -} - -// Push the parser state (in response to an open paren) -func (p *parser) pushGroup() { - p.group.next = p.stack - p.alternation.next = p.group - p.concatenation.next = p.alternation - p.stack = p.concatenation -} - -// Remember the pushed state (in response to a ')') -func (p *parser) popGroup() error { - p.concatenation = p.stack - p.alternation = p.concatenation.next - p.group = p.alternation.next - p.stack = p.group.next - - // The first () inside a Testgroup group goes directly to the group - if p.group.t == ntTestgroup && len(p.group.children) == 0 { - if p.unit == nil { - return p.getErr(ErrConditionalExpression) - } - - p.group.addChild(p.unit) - p.unit = nil - } - return nil -} - -// True if the group stack is empty. -func (p *parser) emptyStack() bool { - return p.stack == nil -} - -// Start a new round for the parser state (in response to an open paren or string start) -func (p *parser) startGroup(openGroup *regexNode) { - p.group = openGroup - p.alternation = newRegexNode(ntAlternate, p.options) - p.concatenation = newRegexNode(ntConcatenate, p.options) -} - -// Finish the current concatenation (in response to a |) -func (p *parser) addAlternate() { - // The | parts inside a Testgroup group go directly to the group - - if p.group.t == ntTestgroup || p.group.t == ntTestref { - p.group.addChild(p.concatenation.reverseLeft()) - } else { - p.alternation.addChild(p.concatenation.reverseLeft()) - } - - p.concatenation = newRegexNode(ntConcatenate, p.options) -} - -// For categorizing ascii characters. - -const ( - Q byte = 5 // quantifier - S = 4 // ordinary stopper - Z = 3 // ScanBlank stopper - X = 2 // whitespace - E = 1 // should be escaped -) - -var _category = []byte{ - //01 2 3 4 5 6 7 8 9 A B C D E F 0 1 2 3 4 5 6 7 8 9 A B C D E F - 0, 0, 0, 0, 0, 0, 0, 0, 0, X, X, X, X, X, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - // ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? - X, 0, 0, Z, S, 0, 0, 0, S, S, Q, Q, 0, 0, S, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, Q, - //@A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, S, S, 0, S, 0, - //'a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, Q, S, 0, 0, 0, -} - -func isSpace(ch rune) bool { - return (ch <= ' ' && _category[ch] == X) -} - -// Returns true for those characters that terminate a string of ordinary chars. -func isSpecial(ch rune) bool { - return (ch <= '|' && _category[ch] >= S) -} - -// Returns true for those characters that terminate a string of ordinary chars. -func isStopperX(ch rune) bool { - return (ch <= '|' && _category[ch] >= X) -} - -// Returns true for those characters that begin a quantifier. -func isQuantifier(ch rune) bool { - return (ch <= '{' && _category[ch] >= Q) -} - -func (p *parser) isTrueQuantifier() bool { - nChars := p.charsRight() - if nChars == 0 { - return false - } - - startpos := p.textpos() - ch := p.charAt(startpos) - if ch != '{' { - return ch <= '{' && _category[ch] >= Q - } - - //UGLY: this is ugly -- the original code was ugly too - pos := startpos - for { - nChars-- - if nChars <= 0 { - break - } - pos++ - ch = p.charAt(pos) - if ch < '0' || ch > '9' { - break - } - } - - if nChars == 0 || pos-startpos == 1 { - return false - } - if ch == '}' { - return true - } - if ch != ',' { - return false - } - for { - nChars-- - if nChars <= 0 { - break - } - pos++ - ch = p.charAt(pos) - if ch < '0' || ch > '9' { - break - } - } - - return nChars > 0 && ch == '}' -} diff --git a/vendor/github.com/dlclark/regexp2/syntax/prefix.go b/vendor/github.com/dlclark/regexp2/syntax/prefix.go deleted file mode 100644 index 011ef0b..0000000 --- a/vendor/github.com/dlclark/regexp2/syntax/prefix.go +++ /dev/null @@ -1,896 +0,0 @@ -package syntax - -import ( - "bytes" - "fmt" - "strconv" - "unicode" - "unicode/utf8" -) - -type Prefix struct { - PrefixStr []rune - PrefixSet CharSet - CaseInsensitive bool -} - -// It takes a RegexTree and computes the set of chars that can start it. -func getFirstCharsPrefix(tree *RegexTree) *Prefix { - s := regexFcd{ - fcStack: make([]regexFc, 32), - intStack: make([]int, 32), - } - fc := s.regexFCFromRegexTree(tree) - - if fc == nil || fc.nullable || fc.cc.IsEmpty() { - return nil - } - fcSet := fc.getFirstChars() - return &Prefix{PrefixSet: fcSet, CaseInsensitive: fc.caseInsensitive} -} - -type regexFcd struct { - intStack []int - intDepth int - fcStack []regexFc - fcDepth int - skipAllChildren bool // don't process any more children at the current level - skipchild bool // don't process the current child. - failed bool -} - -/* - * The main FC computation. It does a shortcutted depth-first walk - * through the tree and calls CalculateFC to emits code before - * and after each child of an interior node, and at each leaf. - */ -func (s *regexFcd) regexFCFromRegexTree(tree *RegexTree) *regexFc { - curNode := tree.root - curChild := 0 - - for { - if len(curNode.children) == 0 { - // This is a leaf node - s.calculateFC(curNode.t, curNode, 0) - } else if curChild < len(curNode.children) && !s.skipAllChildren { - // This is an interior node, and we have more children to analyze - s.calculateFC(curNode.t|beforeChild, curNode, curChild) - - if !s.skipchild { - curNode = curNode.children[curChild] - // this stack is how we get a depth first walk of the tree. - s.pushInt(curChild) - curChild = 0 - } else { - curChild++ - s.skipchild = false - } - continue - } - - // This is an interior node where we've finished analyzing all the children, or - // the end of a leaf node. - s.skipAllChildren = false - - if s.intIsEmpty() { - break - } - - curChild = s.popInt() - curNode = curNode.next - - s.calculateFC(curNode.t|afterChild, curNode, curChild) - if s.failed { - return nil - } - - curChild++ - } - - if s.fcIsEmpty() { - return nil - } - - return s.popFC() -} - -// To avoid recursion, we use a simple integer stack. -// This is the push. -func (s *regexFcd) pushInt(I int) { - if s.intDepth >= len(s.intStack) { - expanded := make([]int, s.intDepth*2) - copy(expanded, s.intStack) - s.intStack = expanded - } - - s.intStack[s.intDepth] = I - s.intDepth++ -} - -// True if the stack is empty. -func (s *regexFcd) intIsEmpty() bool { - return s.intDepth == 0 -} - -// This is the pop. -func (s *regexFcd) popInt() int { - s.intDepth-- - return s.intStack[s.intDepth] -} - -// We also use a stack of RegexFC objects. -// This is the push. -func (s *regexFcd) pushFC(fc regexFc) { - if s.fcDepth >= len(s.fcStack) { - expanded := make([]regexFc, s.fcDepth*2) - copy(expanded, s.fcStack) - s.fcStack = expanded - } - - s.fcStack[s.fcDepth] = fc - s.fcDepth++ -} - -// True if the stack is empty. -func (s *regexFcd) fcIsEmpty() bool { - return s.fcDepth == 0 -} - -// This is the pop. -func (s *regexFcd) popFC() *regexFc { - s.fcDepth-- - return &s.fcStack[s.fcDepth] -} - -// This is the top. -func (s *regexFcd) topFC() *regexFc { - return &s.fcStack[s.fcDepth-1] -} - -// Called in Beforechild to prevent further processing of the current child -func (s *regexFcd) skipChild() { - s.skipchild = true -} - -// FC computation and shortcut cases for each node type -func (s *regexFcd) calculateFC(nt nodeType, node *regexNode, CurIndex int) { - //fmt.Printf("NodeType: %v, CurIndex: %v, Desc: %v\n", nt, CurIndex, node.description()) - ci := false - rtl := false - - if nt <= ntRef { - if (node.options & IgnoreCase) != 0 { - ci = true - } - if (node.options & RightToLeft) != 0 { - rtl = true - } - } - - switch nt { - case ntConcatenate | beforeChild, ntAlternate | beforeChild, ntTestref | beforeChild, ntLoop | beforeChild, ntLazyloop | beforeChild: - break - - case ntTestgroup | beforeChild: - if CurIndex == 0 { - s.skipChild() - } - break - - case ntEmpty: - s.pushFC(regexFc{nullable: true}) - break - - case ntConcatenate | afterChild: - if CurIndex != 0 { - child := s.popFC() - cumul := s.topFC() - - s.failed = !cumul.addFC(*child, true) - } - - fc := s.topFC() - if !fc.nullable { - s.skipAllChildren = true - } - break - - case ntTestgroup | afterChild: - if CurIndex > 1 { - child := s.popFC() - cumul := s.topFC() - - s.failed = !cumul.addFC(*child, false) - } - break - - case ntAlternate | afterChild, ntTestref | afterChild: - if CurIndex != 0 { - child := s.popFC() - cumul := s.topFC() - - s.failed = !cumul.addFC(*child, false) - } - break - - case ntLoop | afterChild, ntLazyloop | afterChild: - if node.m == 0 { - fc := s.topFC() - fc.nullable = true - } - break - - case ntGroup | beforeChild, ntGroup | afterChild, ntCapture | beforeChild, ntCapture | afterChild, ntGreedy | beforeChild, ntGreedy | afterChild: - break - - case ntRequire | beforeChild, ntPrevent | beforeChild: - s.skipChild() - s.pushFC(regexFc{nullable: true}) - break - - case ntRequire | afterChild, ntPrevent | afterChild: - break - - case ntOne, ntNotone: - s.pushFC(newRegexFc(node.ch, nt == ntNotone, false, ci)) - break - - case ntOneloop, ntOnelazy: - s.pushFC(newRegexFc(node.ch, false, node.m == 0, ci)) - break - - case ntNotoneloop, ntNotonelazy: - s.pushFC(newRegexFc(node.ch, true, node.m == 0, ci)) - break - - case ntMulti: - if len(node.str) == 0 { - s.pushFC(regexFc{nullable: true}) - } else if !rtl { - s.pushFC(newRegexFc(node.str[0], false, false, ci)) - } else { - s.pushFC(newRegexFc(node.str[len(node.str)-1], false, false, ci)) - } - break - - case ntSet: - s.pushFC(regexFc{cc: node.set.Copy(), nullable: false, caseInsensitive: ci}) - break - - case ntSetloop, ntSetlazy: - s.pushFC(regexFc{cc: node.set.Copy(), nullable: node.m == 0, caseInsensitive: ci}) - break - - case ntRef: - s.pushFC(regexFc{cc: *AnyClass(), nullable: true, caseInsensitive: false}) - break - - case ntNothing, ntBol, ntEol, ntBoundary, ntNonboundary, ntECMABoundary, ntNonECMABoundary, ntBeginning, ntStart, ntEndZ, ntEnd: - s.pushFC(regexFc{nullable: true}) - break - - default: - panic(fmt.Sprintf("unexpected op code: %v", nt)) - } -} - -type regexFc struct { - cc CharSet - nullable bool - caseInsensitive bool -} - -func newRegexFc(ch rune, not, nullable, caseInsensitive bool) regexFc { - r := regexFc{ - caseInsensitive: caseInsensitive, - nullable: nullable, - } - if not { - if ch > 0 { - r.cc.addRange('\x00', ch-1) - } - if ch < 0xFFFF { - r.cc.addRange(ch+1, utf8.MaxRune) - } - } else { - r.cc.addRange(ch, ch) - } - return r -} - -func (r *regexFc) getFirstChars() CharSet { - if r.caseInsensitive { - r.cc.addLowercase() - } - - return r.cc -} - -func (r *regexFc) addFC(fc regexFc, concatenate bool) bool { - if !r.cc.IsMergeable() || !fc.cc.IsMergeable() { - return false - } - - if concatenate { - if !r.nullable { - return true - } - - if !fc.nullable { - r.nullable = false - } - } else { - if fc.nullable { - r.nullable = true - } - } - - r.caseInsensitive = r.caseInsensitive || fc.caseInsensitive - r.cc.addSet(fc.cc) - - return true -} - -// This is a related computation: it takes a RegexTree and computes the -// leading substring if it sees one. It's quite trivial and gives up easily. -func getPrefix(tree *RegexTree) *Prefix { - var concatNode *regexNode - nextChild := 0 - - curNode := tree.root - - for { - switch curNode.t { - case ntConcatenate: - if len(curNode.children) > 0 { - concatNode = curNode - nextChild = 0 - } - - case ntGreedy, ntCapture: - curNode = curNode.children[0] - concatNode = nil - continue - - case ntOneloop, ntOnelazy: - if curNode.m > 0 { - return &Prefix{ - PrefixStr: repeat(curNode.ch, curNode.m), - CaseInsensitive: (curNode.options & IgnoreCase) != 0, - } - } - return nil - - case ntOne: - return &Prefix{ - PrefixStr: []rune{curNode.ch}, - CaseInsensitive: (curNode.options & IgnoreCase) != 0, - } - - case ntMulti: - return &Prefix{ - PrefixStr: curNode.str, - CaseInsensitive: (curNode.options & IgnoreCase) != 0, - } - - case ntBol, ntEol, ntBoundary, ntECMABoundary, ntBeginning, ntStart, - ntEndZ, ntEnd, ntEmpty, ntRequire, ntPrevent: - - default: - return nil - } - - if concatNode == nil || nextChild >= len(concatNode.children) { - return nil - } - - curNode = concatNode.children[nextChild] - nextChild++ - } -} - -// repeat the rune r, c times... up to the max of MaxPrefixSize -func repeat(r rune, c int) []rune { - if c > MaxPrefixSize { - c = MaxPrefixSize - } - - ret := make([]rune, c) - - // binary growth using copy for speed - ret[0] = r - bp := 1 - for bp < len(ret) { - copy(ret[bp:], ret[:bp]) - bp *= 2 - } - - return ret -} - -// BmPrefix precomputes the Boyer-Moore -// tables for fast string scanning. These tables allow -// you to scan for the first occurrence of a string within -// a large body of text without examining every character. -// The performance of the heuristic depends on the actual -// string and the text being searched, but usually, the longer -// the string that is being searched for, the fewer characters -// need to be examined. -type BmPrefix struct { - positive []int - negativeASCII []int - negativeUnicode [][]int - pattern []rune - lowASCII rune - highASCII rune - rightToLeft bool - caseInsensitive bool -} - -func newBmPrefix(pattern []rune, caseInsensitive, rightToLeft bool) *BmPrefix { - - b := &BmPrefix{ - rightToLeft: rightToLeft, - caseInsensitive: caseInsensitive, - pattern: pattern, - } - - if caseInsensitive { - for i := 0; i < len(b.pattern); i++ { - // We do the ToLower character by character for consistency. With surrogate chars, doing - // a ToLower on the entire string could actually change the surrogate pair. This is more correct - // linguistically, but since Regex doesn't support surrogates, it's more important to be - // consistent. - - b.pattern[i] = unicode.ToLower(b.pattern[i]) - } - } - - var beforefirst, last, bump int - var scan, match int - - if !rightToLeft { - beforefirst = -1 - last = len(b.pattern) - 1 - bump = 1 - } else { - beforefirst = len(b.pattern) - last = 0 - bump = -1 - } - - // PART I - the good-suffix shift table - // - // compute the positive requirement: - // if char "i" is the first one from the right that doesn't match, - // then we know the matcher can advance by _positive[i]. - // - // This algorithm is a simplified variant of the standard - // Boyer-Moore good suffix calculation. - - b.positive = make([]int, len(b.pattern)) - - examine := last - ch := b.pattern[examine] - b.positive[examine] = bump - examine -= bump - -Outerloop: - for { - // find an internal char (examine) that matches the tail - - for { - if examine == beforefirst { - break Outerloop - } - if b.pattern[examine] == ch { - break - } - examine -= bump - } - - match = last - scan = examine - - // find the length of the match - for { - if scan == beforefirst || b.pattern[match] != b.pattern[scan] { - // at the end of the match, note the difference in _positive - // this is not the length of the match, but the distance from the internal match - // to the tail suffix. - if b.positive[match] == 0 { - b.positive[match] = match - scan - } - - // System.Diagnostics.Debug.WriteLine("Set positive[" + match + "] to " + (match - scan)); - - break - } - - scan -= bump - match -= bump - } - - examine -= bump - } - - match = last - bump - - // scan for the chars for which there are no shifts that yield a different candidate - - // The inside of the if statement used to say - // "_positive[match] = last - beforefirst;" - // This is slightly less aggressive in how much we skip, but at worst it - // should mean a little more work rather than skipping a potential match. - for match != beforefirst { - if b.positive[match] == 0 { - b.positive[match] = bump - } - - match -= bump - } - - // PART II - the bad-character shift table - // - // compute the negative requirement: - // if char "ch" is the reject character when testing position "i", - // we can slide up by _negative[ch]; - // (_negative[ch] = str.Length - 1 - str.LastIndexOf(ch)) - // - // the lookup table is divided into ASCII and Unicode portions; - // only those parts of the Unicode 16-bit code set that actually - // appear in the string are in the table. (Maximum size with - // Unicode is 65K; ASCII only case is 512 bytes.) - - b.negativeASCII = make([]int, 128) - - for i := 0; i < len(b.negativeASCII); i++ { - b.negativeASCII[i] = last - beforefirst - } - - b.lowASCII = 127 - b.highASCII = 0 - - for examine = last; examine != beforefirst; examine -= bump { - ch = b.pattern[examine] - - switch { - case ch < 128: - if b.lowASCII > ch { - b.lowASCII = ch - } - - if b.highASCII < ch { - b.highASCII = ch - } - - if b.negativeASCII[ch] == last-beforefirst { - b.negativeASCII[ch] = last - examine - } - case ch <= 0xffff: - i, j := ch>>8, ch&0xFF - - if b.negativeUnicode == nil { - b.negativeUnicode = make([][]int, 256) - } - - if b.negativeUnicode[i] == nil { - newarray := make([]int, 256) - - for k := 0; k < len(newarray); k++ { - newarray[k] = last - beforefirst - } - - if i == 0 { - copy(newarray, b.negativeASCII) - //TODO: this line needed? - b.negativeASCII = newarray - } - - b.negativeUnicode[i] = newarray - } - - if b.negativeUnicode[i][j] == last-beforefirst { - b.negativeUnicode[i][j] = last - examine - } - default: - // we can't do the filter because this algo doesn't support - // unicode chars >0xffff - return nil - } - } - - return b -} - -func (b *BmPrefix) String() string { - return string(b.pattern) -} - -// Dump returns the contents of the filter as a human readable string -func (b *BmPrefix) Dump(indent string) string { - buf := &bytes.Buffer{} - - fmt.Fprintf(buf, "%sBM Pattern: %s\n%sPositive: ", indent, string(b.pattern), indent) - for i := 0; i < len(b.positive); i++ { - buf.WriteString(strconv.Itoa(b.positive[i])) - buf.WriteRune(' ') - } - buf.WriteRune('\n') - - if b.negativeASCII != nil { - buf.WriteString(indent) - buf.WriteString("Negative table\n") - for i := 0; i < len(b.negativeASCII); i++ { - if b.negativeASCII[i] != len(b.pattern) { - fmt.Fprintf(buf, "%s %s %s\n", indent, Escape(string(rune(i))), strconv.Itoa(b.negativeASCII[i])) - } - } - } - - return buf.String() -} - -// Scan uses the Boyer-Moore algorithm to find the first occurrence -// of the specified string within text, beginning at index, and -// constrained within beglimit and endlimit. -// -// The direction and case-sensitivity of the match is determined -// by the arguments to the RegexBoyerMoore constructor. -func (b *BmPrefix) Scan(text []rune, index, beglimit, endlimit int) int { - var ( - defadv, test, test2 int - match, startmatch, endmatch int - bump, advance int - chTest rune - unicodeLookup []int - ) - - if !b.rightToLeft { - defadv = len(b.pattern) - startmatch = len(b.pattern) - 1 - endmatch = 0 - test = index + defadv - 1 - bump = 1 - } else { - defadv = -len(b.pattern) - startmatch = 0 - endmatch = -defadv - 1 - test = index + defadv - bump = -1 - } - - chMatch := b.pattern[startmatch] - - for { - if test >= endlimit || test < beglimit { - return -1 - } - - chTest = text[test] - - if b.caseInsensitive { - chTest = unicode.ToLower(chTest) - } - - if chTest != chMatch { - if chTest < 128 { - advance = b.negativeASCII[chTest] - } else if chTest < 0xffff && len(b.negativeUnicode) > 0 { - unicodeLookup = b.negativeUnicode[chTest>>8] - if len(unicodeLookup) > 0 { - advance = unicodeLookup[chTest&0xFF] - } else { - advance = defadv - } - } else { - advance = defadv - } - - test += advance - } else { // if (chTest == chMatch) - test2 = test - match = startmatch - - for { - if match == endmatch { - if b.rightToLeft { - return test2 + 1 - } else { - return test2 - } - } - - match -= bump - test2 -= bump - - chTest = text[test2] - - if b.caseInsensitive { - chTest = unicode.ToLower(chTest) - } - - if chTest != b.pattern[match] { - advance = b.positive[match] - if (chTest & 0xFF80) == 0 { - test2 = (match - startmatch) + b.negativeASCII[chTest] - } else if chTest < 0xffff && len(b.negativeUnicode) > 0 { - unicodeLookup = b.negativeUnicode[chTest>>8] - if len(unicodeLookup) > 0 { - test2 = (match - startmatch) + unicodeLookup[chTest&0xFF] - } else { - test += advance - break - } - } else { - test += advance - break - } - - if b.rightToLeft { - if test2 < advance { - advance = test2 - } - } else if test2 > advance { - advance = test2 - } - - test += advance - break - } - } - } - } -} - -// When a regex is anchored, we can do a quick IsMatch test instead of a Scan -func (b *BmPrefix) IsMatch(text []rune, index, beglimit, endlimit int) bool { - if !b.rightToLeft { - if index < beglimit || endlimit-index < len(b.pattern) { - return false - } - - return b.matchPattern(text, index) - } else { - if index > endlimit || index-beglimit < len(b.pattern) { - return false - } - - return b.matchPattern(text, index-len(b.pattern)) - } -} - -func (b *BmPrefix) matchPattern(text []rune, index int) bool { - if len(text)-index < len(b.pattern) { - return false - } - - if b.caseInsensitive { - for i := 0; i < len(b.pattern); i++ { - //Debug.Assert(textinfo.ToLower(_pattern[i]) == _pattern[i], "pattern should be converted to lower case in constructor!"); - if unicode.ToLower(text[index+i]) != b.pattern[i] { - return false - } - } - return true - } else { - for i := 0; i < len(b.pattern); i++ { - if text[index+i] != b.pattern[i] { - return false - } - } - return true - } -} - -type AnchorLoc int16 - -// where the regex can be pegged -const ( - AnchorBeginning AnchorLoc = 0x0001 - AnchorBol = 0x0002 - AnchorStart = 0x0004 - AnchorEol = 0x0008 - AnchorEndZ = 0x0010 - AnchorEnd = 0x0020 - AnchorBoundary = 0x0040 - AnchorECMABoundary = 0x0080 -) - -func getAnchors(tree *RegexTree) AnchorLoc { - - var concatNode *regexNode - nextChild, result := 0, AnchorLoc(0) - - curNode := tree.root - - for { - switch curNode.t { - case ntConcatenate: - if len(curNode.children) > 0 { - concatNode = curNode - nextChild = 0 - } - - case ntGreedy, ntCapture: - curNode = curNode.children[0] - concatNode = nil - continue - - case ntBol, ntEol, ntBoundary, ntECMABoundary, ntBeginning, - ntStart, ntEndZ, ntEnd: - return result | anchorFromType(curNode.t) - - case ntEmpty, ntRequire, ntPrevent: - - default: - return result - } - - if concatNode == nil || nextChild >= len(concatNode.children) { - return result - } - - curNode = concatNode.children[nextChild] - nextChild++ - } -} - -func anchorFromType(t nodeType) AnchorLoc { - switch t { - case ntBol: - return AnchorBol - case ntEol: - return AnchorEol - case ntBoundary: - return AnchorBoundary - case ntECMABoundary: - return AnchorECMABoundary - case ntBeginning: - return AnchorBeginning - case ntStart: - return AnchorStart - case ntEndZ: - return AnchorEndZ - case ntEnd: - return AnchorEnd - default: - return 0 - } -} - -// anchorDescription returns a human-readable description of the anchors -func (anchors AnchorLoc) String() string { - buf := &bytes.Buffer{} - - if 0 != (anchors & AnchorBeginning) { - buf.WriteString(", Beginning") - } - if 0 != (anchors & AnchorStart) { - buf.WriteString(", Start") - } - if 0 != (anchors & AnchorBol) { - buf.WriteString(", Bol") - } - if 0 != (anchors & AnchorBoundary) { - buf.WriteString(", Boundary") - } - if 0 != (anchors & AnchorECMABoundary) { - buf.WriteString(", ECMABoundary") - } - if 0 != (anchors & AnchorEol) { - buf.WriteString(", Eol") - } - if 0 != (anchors & AnchorEnd) { - buf.WriteString(", End") - } - if 0 != (anchors & AnchorEndZ) { - buf.WriteString(", EndZ") - } - - // trim off comma - if buf.Len() >= 2 { - return buf.String()[2:] - } - return "None" -} diff --git a/vendor/github.com/dlclark/regexp2/syntax/replacerdata.go b/vendor/github.com/dlclark/regexp2/syntax/replacerdata.go deleted file mode 100644 index bcf4d3f..0000000 --- a/vendor/github.com/dlclark/regexp2/syntax/replacerdata.go +++ /dev/null @@ -1,87 +0,0 @@ -package syntax - -import ( - "bytes" - "errors" -) - -type ReplacerData struct { - Rep string - Strings []string - Rules []int -} - -const ( - replaceSpecials = 4 - replaceLeftPortion = -1 - replaceRightPortion = -2 - replaceLastGroup = -3 - replaceWholeString = -4 -) - -//ErrReplacementError is a general error during parsing the replacement text -var ErrReplacementError = errors.New("Replacement pattern error.") - -// NewReplacerData will populate a reusable replacer data struct based on the given replacement string -// and the capture group data from a regexp -func NewReplacerData(rep string, caps map[int]int, capsize int, capnames map[string]int, op RegexOptions) (*ReplacerData, error) { - p := parser{ - options: op, - caps: caps, - capsize: capsize, - capnames: capnames, - } - p.setPattern(rep) - concat, err := p.scanReplacement() - if err != nil { - return nil, err - } - - if concat.t != ntConcatenate { - panic(ErrReplacementError) - } - - sb := &bytes.Buffer{} - var ( - strings []string - rules []int - ) - - for _, child := range concat.children { - switch child.t { - case ntMulti: - child.writeStrToBuf(sb) - - case ntOne: - sb.WriteRune(child.ch) - - case ntRef: - if sb.Len() > 0 { - rules = append(rules, len(strings)) - strings = append(strings, sb.String()) - sb.Reset() - } - slot := child.m - - if len(caps) > 0 && slot >= 0 { - slot = caps[slot] - } - - rules = append(rules, -replaceSpecials-1-slot) - - default: - panic(ErrReplacementError) - } - } - - if sb.Len() > 0 { - rules = append(rules, len(strings)) - strings = append(strings, sb.String()) - } - - return &ReplacerData{ - Rep: rep, - Strings: strings, - Rules: rules, - }, nil -} diff --git a/vendor/github.com/dlclark/regexp2/syntax/tree.go b/vendor/github.com/dlclark/regexp2/syntax/tree.go deleted file mode 100644 index ea28829..0000000 --- a/vendor/github.com/dlclark/regexp2/syntax/tree.go +++ /dev/null @@ -1,654 +0,0 @@ -package syntax - -import ( - "bytes" - "fmt" - "math" - "strconv" -) - -type RegexTree struct { - root *regexNode - caps map[int]int - capnumlist []int - captop int - Capnames map[string]int - Caplist []string - options RegexOptions -} - -// It is built into a parsed tree for a regular expression. - -// Implementation notes: -// -// Since the node tree is a temporary data structure only used -// during compilation of the regexp to integer codes, it's -// designed for clarity and convenience rather than -// space efficiency. -// -// RegexNodes are built into a tree, linked by the n.children list. -// Each node also has a n.parent and n.ichild member indicating -// its parent and which child # it is in its parent's list. -// -// RegexNodes come in as many types as there are constructs in -// a regular expression, for example, "concatenate", "alternate", -// "one", "rept", "group". There are also node types for basic -// peephole optimizations, e.g., "onerep", "notsetrep", etc. -// -// Because perl 5 allows "lookback" groups that scan backwards, -// each node also gets a "direction". Normally the value of -// boolean n.backward = false. -// -// During parsing, top-level nodes are also stacked onto a parse -// stack (a stack of trees). For this purpose we have a n.next -// pointer. [Note that to save a few bytes, we could overload the -// n.parent pointer instead.] -// -// On the parse stack, each tree has a "role" - basically, the -// nonterminal in the grammar that the parser has currently -// assigned to the tree. That code is stored in n.role. -// -// Finally, some of the different kinds of nodes have data. -// Two integers (for the looping constructs) are stored in -// n.operands, an an object (either a string or a set) -// is stored in n.data -type regexNode struct { - t nodeType - children []*regexNode - str []rune - set *CharSet - ch rune - m int - n int - options RegexOptions - next *regexNode -} - -type nodeType int32 - -const ( - // The following are leaves, and correspond to primitive operations - - ntOnerep nodeType = 0 // lef,back char,min,max a {n} - ntNotonerep = 1 // lef,back char,min,max .{n} - ntSetrep = 2 // lef,back set,min,max [\d]{n} - ntOneloop = 3 // lef,back char,min,max a {,n} - ntNotoneloop = 4 // lef,back char,min,max .{,n} - ntSetloop = 5 // lef,back set,min,max [\d]{,n} - ntOnelazy = 6 // lef,back char,min,max a {,n}? - ntNotonelazy = 7 // lef,back char,min,max .{,n}? - ntSetlazy = 8 // lef,back set,min,max [\d]{,n}? - ntOne = 9 // lef char a - ntNotone = 10 // lef char [^a] - ntSet = 11 // lef set [a-z\s] \w \s \d - ntMulti = 12 // lef string abcd - ntRef = 13 // lef group \# - ntBol = 14 // ^ - ntEol = 15 // $ - ntBoundary = 16 // \b - ntNonboundary = 17 // \B - ntBeginning = 18 // \A - ntStart = 19 // \G - ntEndZ = 20 // \Z - ntEnd = 21 // \Z - - // Interior nodes do not correspond to primitive operations, but - // control structures compositing other operations - - // Concat and alternate take n children, and can run forward or backwards - - ntNothing = 22 // [] - ntEmpty = 23 // () - ntAlternate = 24 // a|b - ntConcatenate = 25 // ab - ntLoop = 26 // m,x * + ? {,} - ntLazyloop = 27 // m,x *? +? ?? {,}? - ntCapture = 28 // n () - ntGroup = 29 // (?:) - ntRequire = 30 // (?=) (?<=) - ntPrevent = 31 // (?!) (?) (?<) - ntTestref = 33 // (?(n) | ) - ntTestgroup = 34 // (?(...) | ) - - ntECMABoundary = 41 // \b - ntNonECMABoundary = 42 // \B -) - -func newRegexNode(t nodeType, opt RegexOptions) *regexNode { - return ®exNode{ - t: t, - options: opt, - } -} - -func newRegexNodeCh(t nodeType, opt RegexOptions, ch rune) *regexNode { - return ®exNode{ - t: t, - options: opt, - ch: ch, - } -} - -func newRegexNodeStr(t nodeType, opt RegexOptions, str []rune) *regexNode { - return ®exNode{ - t: t, - options: opt, - str: str, - } -} - -func newRegexNodeSet(t nodeType, opt RegexOptions, set *CharSet) *regexNode { - return ®exNode{ - t: t, - options: opt, - set: set, - } -} - -func newRegexNodeM(t nodeType, opt RegexOptions, m int) *regexNode { - return ®exNode{ - t: t, - options: opt, - m: m, - } -} -func newRegexNodeMN(t nodeType, opt RegexOptions, m, n int) *regexNode { - return ®exNode{ - t: t, - options: opt, - m: m, - n: n, - } -} - -func (n *regexNode) writeStrToBuf(buf *bytes.Buffer) { - for i := 0; i < len(n.str); i++ { - buf.WriteRune(n.str[i]) - } -} - -func (n *regexNode) addChild(child *regexNode) { - reduced := child.reduce() - n.children = append(n.children, reduced) - reduced.next = n -} - -func (n *regexNode) insertChildren(afterIndex int, nodes []*regexNode) { - newChildren := make([]*regexNode, 0, len(n.children)+len(nodes)) - n.children = append(append(append(newChildren, n.children[:afterIndex]...), nodes...), n.children[afterIndex:]...) -} - -// removes children including the start but not the end index -func (n *regexNode) removeChildren(startIndex, endIndex int) { - n.children = append(n.children[:startIndex], n.children[endIndex:]...) -} - -// Pass type as OneLazy or OneLoop -func (n *regexNode) makeRep(t nodeType, min, max int) { - n.t += (t - ntOne) - n.m = min - n.n = max -} - -func (n *regexNode) reduce() *regexNode { - switch n.t { - case ntAlternate: - return n.reduceAlternation() - - case ntConcatenate: - return n.reduceConcatenation() - - case ntLoop, ntLazyloop: - return n.reduceRep() - - case ntGroup: - return n.reduceGroup() - - case ntSet, ntSetloop: - return n.reduceSet() - - default: - return n - } -} - -// Basic optimization. Single-letter alternations can be replaced -// by faster set specifications, and nested alternations with no -// intervening operators can be flattened: -// -// a|b|c|def|g|h -> [a-c]|def|[gh] -// apple|(?:orange|pear)|grape -> apple|orange|pear|grape -func (n *regexNode) reduceAlternation() *regexNode { - if len(n.children) == 0 { - return newRegexNode(ntNothing, n.options) - } - - wasLastSet := false - lastNodeCannotMerge := false - var optionsLast RegexOptions - var i, j int - - for i, j = 0, 0; i < len(n.children); i, j = i+1, j+1 { - at := n.children[i] - - if j < i { - n.children[j] = at - } - - for { - if at.t == ntAlternate { - for k := 0; k < len(at.children); k++ { - at.children[k].next = n - } - n.insertChildren(i+1, at.children) - - j-- - } else if at.t == ntSet || at.t == ntOne { - // Cannot merge sets if L or I options differ, or if either are negated. - optionsAt := at.options & (RightToLeft | IgnoreCase) - - if at.t == ntSet { - if !wasLastSet || optionsLast != optionsAt || lastNodeCannotMerge || !at.set.IsMergeable() { - wasLastSet = true - lastNodeCannotMerge = !at.set.IsMergeable() - optionsLast = optionsAt - break - } - } else if !wasLastSet || optionsLast != optionsAt || lastNodeCannotMerge { - wasLastSet = true - lastNodeCannotMerge = false - optionsLast = optionsAt - break - } - - // The last node was a Set or a One, we're a Set or One and our options are the same. - // Merge the two nodes. - j-- - prev := n.children[j] - - var prevCharClass *CharSet - if prev.t == ntOne { - prevCharClass = &CharSet{} - prevCharClass.addChar(prev.ch) - } else { - prevCharClass = prev.set - } - - if at.t == ntOne { - prevCharClass.addChar(at.ch) - } else { - prevCharClass.addSet(*at.set) - } - - prev.t = ntSet - prev.set = prevCharClass - } else if at.t == ntNothing { - j-- - } else { - wasLastSet = false - lastNodeCannotMerge = false - } - break - } - } - - if j < i { - n.removeChildren(j, i) - } - - return n.stripEnation(ntNothing) -} - -// Basic optimization. Adjacent strings can be concatenated. -// -// (?:abc)(?:def) -> abcdef -func (n *regexNode) reduceConcatenation() *regexNode { - // Eliminate empties and concat adjacent strings/chars - - var optionsLast RegexOptions - var optionsAt RegexOptions - var i, j int - - if len(n.children) == 0 { - return newRegexNode(ntEmpty, n.options) - } - - wasLastString := false - - for i, j = 0, 0; i < len(n.children); i, j = i+1, j+1 { - var at, prev *regexNode - - at = n.children[i] - - if j < i { - n.children[j] = at - } - - if at.t == ntConcatenate && - ((at.options & RightToLeft) == (n.options & RightToLeft)) { - for k := 0; k < len(at.children); k++ { - at.children[k].next = n - } - - //insert at.children at i+1 index in n.children - n.insertChildren(i+1, at.children) - - j-- - } else if at.t == ntMulti || at.t == ntOne { - // Cannot merge strings if L or I options differ - optionsAt = at.options & (RightToLeft | IgnoreCase) - - if !wasLastString || optionsLast != optionsAt { - wasLastString = true - optionsLast = optionsAt - continue - } - - j-- - prev = n.children[j] - - if prev.t == ntOne { - prev.t = ntMulti - prev.str = []rune{prev.ch} - } - - if (optionsAt & RightToLeft) == 0 { - if at.t == ntOne { - prev.str = append(prev.str, at.ch) - } else { - prev.str = append(prev.str, at.str...) - } - } else { - if at.t == ntOne { - // insert at the front by expanding our slice, copying the data over, and then setting the value - prev.str = append(prev.str, 0) - copy(prev.str[1:], prev.str) - prev.str[0] = at.ch - } else { - //insert at the front...this one we'll make a new slice and copy both into it - merge := make([]rune, len(prev.str)+len(at.str)) - copy(merge, at.str) - copy(merge[len(at.str):], prev.str) - prev.str = merge - } - } - } else if at.t == ntEmpty { - j-- - } else { - wasLastString = false - } - } - - if j < i { - // remove indices j through i from the children - n.removeChildren(j, i) - } - - return n.stripEnation(ntEmpty) -} - -// Nested repeaters just get multiplied with each other if they're not -// too lumpy -func (n *regexNode) reduceRep() *regexNode { - - u := n - t := n.t - min := n.m - max := n.n - - for { - if len(u.children) == 0 { - break - } - - child := u.children[0] - - // multiply reps of the same type only - if child.t != t { - childType := child.t - - if !(childType >= ntOneloop && childType <= ntSetloop && t == ntLoop || - childType >= ntOnelazy && childType <= ntSetlazy && t == ntLazyloop) { - break - } - } - - // child can be too lumpy to blur, e.g., (a {100,105}) {3} or (a {2,})? - // [but things like (a {2,})+ are not too lumpy...] - if u.m == 0 && child.m > 1 || child.n < child.m*2 { - break - } - - u = child - if u.m > 0 { - if (math.MaxInt32-1)/u.m < min { - u.m = math.MaxInt32 - } else { - u.m = u.m * min - } - } - if u.n > 0 { - if (math.MaxInt32-1)/u.n < max { - u.n = math.MaxInt32 - } else { - u.n = u.n * max - } - } - } - - if math.MaxInt32 == min { - return newRegexNode(ntNothing, n.options) - } - return u - -} - -// Simple optimization. If a concatenation or alternation has only -// one child strip out the intermediate node. If it has zero children, -// turn it into an empty. -func (n *regexNode) stripEnation(emptyType nodeType) *regexNode { - switch len(n.children) { - case 0: - return newRegexNode(emptyType, n.options) - case 1: - return n.children[0] - default: - return n - } -} - -func (n *regexNode) reduceGroup() *regexNode { - u := n - - for u.t == ntGroup { - u = u.children[0] - } - - return u -} - -// Simple optimization. If a set is a singleton, an inverse singleton, -// or empty, it's transformed accordingly. -func (n *regexNode) reduceSet() *regexNode { - // Extract empty-set, one and not-one case as special - - if n.set == nil { - n.t = ntNothing - } else if n.set.IsSingleton() { - n.ch = n.set.SingletonChar() - n.set = nil - n.t += (ntOne - ntSet) - } else if n.set.IsSingletonInverse() { - n.ch = n.set.SingletonChar() - n.set = nil - n.t += (ntNotone - ntSet) - } - - return n -} - -func (n *regexNode) reverseLeft() *regexNode { - if n.options&RightToLeft != 0 && n.t == ntConcatenate && len(n.children) > 0 { - //reverse children order - for left, right := 0, len(n.children)-1; left < right; left, right = left+1, right-1 { - n.children[left], n.children[right] = n.children[right], n.children[left] - } - } - - return n -} - -func (n *regexNode) makeQuantifier(lazy bool, min, max int) *regexNode { - if min == 0 && max == 0 { - return newRegexNode(ntEmpty, n.options) - } - - if min == 1 && max == 1 { - return n - } - - switch n.t { - case ntOne, ntNotone, ntSet: - if lazy { - n.makeRep(Onelazy, min, max) - } else { - n.makeRep(Oneloop, min, max) - } - return n - - default: - var t nodeType - if lazy { - t = ntLazyloop - } else { - t = ntLoop - } - result := newRegexNodeMN(t, n.options, min, max) - result.addChild(n) - return result - } -} - -// debug functions - -var typeStr = []string{ - "Onerep", "Notonerep", "Setrep", - "Oneloop", "Notoneloop", "Setloop", - "Onelazy", "Notonelazy", "Setlazy", - "One", "Notone", "Set", - "Multi", "Ref", - "Bol", "Eol", "Boundary", "Nonboundary", - "Beginning", "Start", "EndZ", "End", - "Nothing", "Empty", - "Alternate", "Concatenate", - "Loop", "Lazyloop", - "Capture", "Group", "Require", "Prevent", "Greedy", - "Testref", "Testgroup", - "Unknown", "Unknown", "Unknown", - "Unknown", "Unknown", "Unknown", - "ECMABoundary", "NonECMABoundary", -} - -func (n *regexNode) description() string { - buf := &bytes.Buffer{} - - buf.WriteString(typeStr[n.t]) - - if (n.options & ExplicitCapture) != 0 { - buf.WriteString("-C") - } - if (n.options & IgnoreCase) != 0 { - buf.WriteString("-I") - } - if (n.options & RightToLeft) != 0 { - buf.WriteString("-L") - } - if (n.options & Multiline) != 0 { - buf.WriteString("-M") - } - if (n.options & Singleline) != 0 { - buf.WriteString("-S") - } - if (n.options & IgnorePatternWhitespace) != 0 { - buf.WriteString("-X") - } - if (n.options & ECMAScript) != 0 { - buf.WriteString("-E") - } - - switch n.t { - case ntOneloop, ntNotoneloop, ntOnelazy, ntNotonelazy, ntOne, ntNotone: - buf.WriteString("(Ch = " + CharDescription(n.ch) + ")") - break - case ntCapture: - buf.WriteString("(index = " + strconv.Itoa(n.m) + ", unindex = " + strconv.Itoa(n.n) + ")") - break - case ntRef, ntTestref: - buf.WriteString("(index = " + strconv.Itoa(n.m) + ")") - break - case ntMulti: - fmt.Fprintf(buf, "(String = %s)", string(n.str)) - break - case ntSet, ntSetloop, ntSetlazy: - buf.WriteString("(Set = " + n.set.String() + ")") - break - } - - switch n.t { - case ntOneloop, ntNotoneloop, ntOnelazy, ntNotonelazy, ntSetloop, ntSetlazy, ntLoop, ntLazyloop: - buf.WriteString("(Min = ") - buf.WriteString(strconv.Itoa(n.m)) - buf.WriteString(", Max = ") - if n.n == math.MaxInt32 { - buf.WriteString("inf") - } else { - buf.WriteString(strconv.Itoa(n.n)) - } - buf.WriteString(")") - - break - } - - return buf.String() -} - -var padSpace = []byte(" ") - -func (t *RegexTree) Dump() string { - return t.root.dump() -} - -func (n *regexNode) dump() string { - var stack []int - CurNode := n - CurChild := 0 - - buf := bytes.NewBufferString(CurNode.description()) - buf.WriteRune('\n') - - for { - if CurNode.children != nil && CurChild < len(CurNode.children) { - stack = append(stack, CurChild+1) - CurNode = CurNode.children[CurChild] - CurChild = 0 - - Depth := len(stack) - if Depth > 32 { - Depth = 32 - } - buf.Write(padSpace[:Depth]) - buf.WriteString(CurNode.description()) - buf.WriteRune('\n') - } else { - if len(stack) == 0 { - break - } - - CurChild = stack[len(stack)-1] - stack = stack[:len(stack)-1] - CurNode = CurNode.next - } - } - return buf.String() -} diff --git a/vendor/github.com/dlclark/regexp2/syntax/writer.go b/vendor/github.com/dlclark/regexp2/syntax/writer.go deleted file mode 100644 index a5aa11c..0000000 --- a/vendor/github.com/dlclark/regexp2/syntax/writer.go +++ /dev/null @@ -1,500 +0,0 @@ -package syntax - -import ( - "bytes" - "fmt" - "math" - "os" -) - -func Write(tree *RegexTree) (*Code, error) { - w := writer{ - intStack: make([]int, 0, 32), - emitted: make([]int, 2), - stringhash: make(map[string]int), - sethash: make(map[string]int), - } - - code, err := w.codeFromTree(tree) - - if tree.options&Debug > 0 && code != nil { - os.Stdout.WriteString(code.Dump()) - os.Stdout.WriteString("\n") - } - - return code, err -} - -type writer struct { - emitted []int - - intStack []int - curpos int - stringhash map[string]int - stringtable [][]rune - sethash map[string]int - settable []*CharSet - counting bool - count int - trackcount int - caps map[int]int -} - -const ( - beforeChild nodeType = 64 - afterChild = 128 - //MaxPrefixSize is the largest number of runes we'll use for a BoyerMoyer prefix - MaxPrefixSize = 50 -) - -// The top level RegexCode generator. It does a depth-first walk -// through the tree and calls EmitFragment to emits code before -// and after each child of an interior node, and at each leaf. -// -// It runs two passes, first to count the size of the generated -// code, and second to generate the code. -// -// We should time it against the alternative, which is -// to just generate the code and grow the array as we go. -func (w *writer) codeFromTree(tree *RegexTree) (*Code, error) { - var ( - curNode *regexNode - curChild int - capsize int - ) - // construct sparse capnum mapping if some numbers are unused - - if tree.capnumlist == nil || tree.captop == len(tree.capnumlist) { - capsize = tree.captop - w.caps = nil - } else { - capsize = len(tree.capnumlist) - w.caps = tree.caps - for i := 0; i < len(tree.capnumlist); i++ { - w.caps[tree.capnumlist[i]] = i - } - } - - w.counting = true - - for { - if !w.counting { - w.emitted = make([]int, w.count) - } - - curNode = tree.root - curChild = 0 - - w.emit1(Lazybranch, 0) - - for { - if len(curNode.children) == 0 { - w.emitFragment(curNode.t, curNode, 0) - } else if curChild < len(curNode.children) { - w.emitFragment(curNode.t|beforeChild, curNode, curChild) - - curNode = curNode.children[curChild] - - w.pushInt(curChild) - curChild = 0 - continue - } - - if w.emptyStack() { - break - } - - curChild = w.popInt() - curNode = curNode.next - - w.emitFragment(curNode.t|afterChild, curNode, curChild) - curChild++ - } - - w.patchJump(0, w.curPos()) - w.emit(Stop) - - if !w.counting { - break - } - - w.counting = false - } - - fcPrefix := getFirstCharsPrefix(tree) - prefix := getPrefix(tree) - rtl := (tree.options & RightToLeft) != 0 - - var bmPrefix *BmPrefix - //TODO: benchmark string prefixes - if prefix != nil && len(prefix.PrefixStr) > 0 && MaxPrefixSize > 0 { - if len(prefix.PrefixStr) > MaxPrefixSize { - // limit prefix changes to 10k - prefix.PrefixStr = prefix.PrefixStr[:MaxPrefixSize] - } - bmPrefix = newBmPrefix(prefix.PrefixStr, prefix.CaseInsensitive, rtl) - } else { - bmPrefix = nil - } - - return &Code{ - Codes: w.emitted, - Strings: w.stringtable, - Sets: w.settable, - TrackCount: w.trackcount, - Caps: w.caps, - Capsize: capsize, - FcPrefix: fcPrefix, - BmPrefix: bmPrefix, - Anchors: getAnchors(tree), - RightToLeft: rtl, - }, nil -} - -// The main RegexCode generator. It does a depth-first walk -// through the tree and calls EmitFragment to emits code before -// and after each child of an interior node, and at each leaf. -func (w *writer) emitFragment(nodetype nodeType, node *regexNode, curIndex int) error { - bits := InstOp(0) - - if nodetype <= ntRef { - if (node.options & RightToLeft) != 0 { - bits |= Rtl - } - if (node.options & IgnoreCase) != 0 { - bits |= Ci - } - } - ntBits := nodeType(bits) - - switch nodetype { - case ntConcatenate | beforeChild, ntConcatenate | afterChild, ntEmpty: - break - - case ntAlternate | beforeChild: - if curIndex < len(node.children)-1 { - w.pushInt(w.curPos()) - w.emit1(Lazybranch, 0) - } - - case ntAlternate | afterChild: - if curIndex < len(node.children)-1 { - lbPos := w.popInt() - w.pushInt(w.curPos()) - w.emit1(Goto, 0) - w.patchJump(lbPos, w.curPos()) - } else { - for i := 0; i < curIndex; i++ { - w.patchJump(w.popInt(), w.curPos()) - } - } - break - - case ntTestref | beforeChild: - if curIndex == 0 { - w.emit(Setjump) - w.pushInt(w.curPos()) - w.emit1(Lazybranch, 0) - w.emit1(Testref, w.mapCapnum(node.m)) - w.emit(Forejump) - } - - case ntTestref | afterChild: - if curIndex == 0 { - branchpos := w.popInt() - w.pushInt(w.curPos()) - w.emit1(Goto, 0) - w.patchJump(branchpos, w.curPos()) - w.emit(Forejump) - if len(node.children) <= 1 { - w.patchJump(w.popInt(), w.curPos()) - } - } else if curIndex == 1 { - w.patchJump(w.popInt(), w.curPos()) - } - - case ntTestgroup | beforeChild: - if curIndex == 0 { - w.emit(Setjump) - w.emit(Setmark) - w.pushInt(w.curPos()) - w.emit1(Lazybranch, 0) - } - - case ntTestgroup | afterChild: - if curIndex == 0 { - w.emit(Getmark) - w.emit(Forejump) - } else if curIndex == 1 { - Branchpos := w.popInt() - w.pushInt(w.curPos()) - w.emit1(Goto, 0) - w.patchJump(Branchpos, w.curPos()) - w.emit(Getmark) - w.emit(Forejump) - if len(node.children) <= 2 { - w.patchJump(w.popInt(), w.curPos()) - } - } else if curIndex == 2 { - w.patchJump(w.popInt(), w.curPos()) - } - - case ntLoop | beforeChild, ntLazyloop | beforeChild: - - if node.n < math.MaxInt32 || node.m > 1 { - if node.m == 0 { - w.emit1(Nullcount, 0) - } else { - w.emit1(Setcount, 1-node.m) - } - } else if node.m == 0 { - w.emit(Nullmark) - } else { - w.emit(Setmark) - } - - if node.m == 0 { - w.pushInt(w.curPos()) - w.emit1(Goto, 0) - } - w.pushInt(w.curPos()) - - case ntLoop | afterChild, ntLazyloop | afterChild: - - startJumpPos := w.curPos() - lazy := (nodetype - (ntLoop | afterChild)) - - if node.n < math.MaxInt32 || node.m > 1 { - if node.n == math.MaxInt32 { - w.emit2(InstOp(Branchcount+lazy), w.popInt(), math.MaxInt32) - } else { - w.emit2(InstOp(Branchcount+lazy), w.popInt(), node.n-node.m) - } - } else { - w.emit1(InstOp(Branchmark+lazy), w.popInt()) - } - - if node.m == 0 { - w.patchJump(w.popInt(), startJumpPos) - } - - case ntGroup | beforeChild, ntGroup | afterChild: - - case ntCapture | beforeChild: - w.emit(Setmark) - - case ntCapture | afterChild: - w.emit2(Capturemark, w.mapCapnum(node.m), w.mapCapnum(node.n)) - - case ntRequire | beforeChild: - // NOTE: the following line causes lookahead/lookbehind to be - // NON-BACKTRACKING. It can be commented out with (*) - w.emit(Setjump) - - w.emit(Setmark) - - case ntRequire | afterChild: - w.emit(Getmark) - - // NOTE: the following line causes lookahead/lookbehind to be - // NON-BACKTRACKING. It can be commented out with (*) - w.emit(Forejump) - - case ntPrevent | beforeChild: - w.emit(Setjump) - w.pushInt(w.curPos()) - w.emit1(Lazybranch, 0) - - case ntPrevent | afterChild: - w.emit(Backjump) - w.patchJump(w.popInt(), w.curPos()) - w.emit(Forejump) - - case ntGreedy | beforeChild: - w.emit(Setjump) - - case ntGreedy | afterChild: - w.emit(Forejump) - - case ntOne, ntNotone: - w.emit1(InstOp(node.t|ntBits), int(node.ch)) - - case ntNotoneloop, ntNotonelazy, ntOneloop, ntOnelazy: - if node.m > 0 { - if node.t == ntOneloop || node.t == ntOnelazy { - w.emit2(Onerep|bits, int(node.ch), node.m) - } else { - w.emit2(Notonerep|bits, int(node.ch), node.m) - } - } - if node.n > node.m { - if node.n == math.MaxInt32 { - w.emit2(InstOp(node.t|ntBits), int(node.ch), math.MaxInt32) - } else { - w.emit2(InstOp(node.t|ntBits), int(node.ch), node.n-node.m) - } - } - - case ntSetloop, ntSetlazy: - if node.m > 0 { - w.emit2(Setrep|bits, w.setCode(node.set), node.m) - } - if node.n > node.m { - if node.n == math.MaxInt32 { - w.emit2(InstOp(node.t|ntBits), w.setCode(node.set), math.MaxInt32) - } else { - w.emit2(InstOp(node.t|ntBits), w.setCode(node.set), node.n-node.m) - } - } - - case ntMulti: - w.emit1(InstOp(node.t|ntBits), w.stringCode(node.str)) - - case ntSet: - w.emit1(InstOp(node.t|ntBits), w.setCode(node.set)) - - case ntRef: - w.emit1(InstOp(node.t|ntBits), w.mapCapnum(node.m)) - - case ntNothing, ntBol, ntEol, ntBoundary, ntNonboundary, ntECMABoundary, ntNonECMABoundary, ntBeginning, ntStart, ntEndZ, ntEnd: - w.emit(InstOp(node.t)) - - default: - return fmt.Errorf("unexpected opcode in regular expression generation: %v", nodetype) - } - - return nil -} - -// To avoid recursion, we use a simple integer stack. -// This is the push. -func (w *writer) pushInt(i int) { - w.intStack = append(w.intStack, i) -} - -// Returns true if the stack is empty. -func (w *writer) emptyStack() bool { - return len(w.intStack) == 0 -} - -// This is the pop. -func (w *writer) popInt() int { - //get our item - idx := len(w.intStack) - 1 - i := w.intStack[idx] - //trim our slice - w.intStack = w.intStack[:idx] - return i -} - -// Returns the current position in the emitted code. -func (w *writer) curPos() int { - return w.curpos -} - -// Fixes up a jump instruction at the specified offset -// so that it jumps to the specified jumpDest. -func (w *writer) patchJump(offset, jumpDest int) { - w.emitted[offset+1] = jumpDest -} - -// Returns an index in the set table for a charset -// uses a map to eliminate duplicates. -func (w *writer) setCode(set *CharSet) int { - if w.counting { - return 0 - } - - buf := &bytes.Buffer{} - - set.mapHashFill(buf) - hash := buf.String() - i, ok := w.sethash[hash] - if !ok { - i = len(w.sethash) - w.sethash[hash] = i - w.settable = append(w.settable, set) - } - return i -} - -// Returns an index in the string table for a string. -// uses a map to eliminate duplicates. -func (w *writer) stringCode(str []rune) int { - if w.counting { - return 0 - } - - hash := string(str) - i, ok := w.stringhash[hash] - if !ok { - i = len(w.stringhash) - w.stringhash[hash] = i - w.stringtable = append(w.stringtable, str) - } - - return i -} - -// When generating code on a regex that uses a sparse set -// of capture slots, we hash them to a dense set of indices -// for an array of capture slots. Instead of doing the hash -// at match time, it's done at compile time, here. -func (w *writer) mapCapnum(capnum int) int { - if capnum == -1 { - return -1 - } - - if w.caps != nil { - return w.caps[capnum] - } - - return capnum -} - -// Emits a zero-argument operation. Note that the emit -// functions all run in two modes: they can emit code, or -// they can just count the size of the code. -func (w *writer) emit(op InstOp) { - if w.counting { - w.count++ - if opcodeBacktracks(op) { - w.trackcount++ - } - return - } - w.emitted[w.curpos] = int(op) - w.curpos++ -} - -// Emits a one-argument operation. -func (w *writer) emit1(op InstOp, opd1 int) { - if w.counting { - w.count += 2 - if opcodeBacktracks(op) { - w.trackcount++ - } - return - } - w.emitted[w.curpos] = int(op) - w.curpos++ - w.emitted[w.curpos] = opd1 - w.curpos++ -} - -// Emits a two-argument operation. -func (w *writer) emit2(op InstOp, opd1, opd2 int) { - if w.counting { - w.count += 3 - if opcodeBacktracks(op) { - w.trackcount++ - } - return - } - w.emitted[w.curpos] = int(op) - w.curpos++ - w.emitted[w.curpos] = opd1 - w.curpos++ - w.emitted[w.curpos] = opd2 - w.curpos++ -} diff --git a/vendor/github.com/dlclark/regexp2/testoutput1 b/vendor/github.com/dlclark/regexp2/testoutput1 deleted file mode 100644 index fbf63fd..0000000 --- a/vendor/github.com/dlclark/regexp2/testoutput1 +++ /dev/null @@ -1,7061 +0,0 @@ -# This set of tests is for features that are compatible with all versions of -# Perl >= 5.10, in non-UTF mode. It should run clean for the 8-bit, 16-bit, and -# 32-bit PCRE libraries, and also using the perltest.pl script. - -#forbid_utf -#newline_default lf any anycrlf -#perltest - -/the quick brown fox/ - the quick brown fox - 0: the quick brown fox - What do you know about the quick brown fox? - 0: the quick brown fox -\= Expect no match - The quick brown FOX -No match - What do you know about THE QUICK BROWN FOX? -No match - -/The quick brown fox/i - the quick brown fox - 0: the quick brown fox - The quick brown FOX - 0: The quick brown FOX - What do you know about the quick brown fox? - 0: the quick brown fox - What do you know about THE QUICK BROWN FOX? - 0: THE QUICK BROWN FOX - -/abcd\t\n\r\f\a\e\071\x3b\$\\\?caxyz/ - abcd\t\n\r\f\a\e9;\$\\?caxyz - 0: abcd\x09\x0a\x0d\x0c\x07\x1b9;$\?caxyz - -/a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz/ - abxyzpqrrrabbxyyyypqAzz - 0: abxyzpqrrrabbxyyyypqAzz - abxyzpqrrrabbxyyyypqAzz - 0: abxyzpqrrrabbxyyyypqAzz - aabxyzpqrrrabbxyyyypqAzz - 0: aabxyzpqrrrabbxyyyypqAzz - aaabxyzpqrrrabbxyyyypqAzz - 0: aaabxyzpqrrrabbxyyyypqAzz - aaaabxyzpqrrrabbxyyyypqAzz - 0: aaaabxyzpqrrrabbxyyyypqAzz - abcxyzpqrrrabbxyyyypqAzz - 0: abcxyzpqrrrabbxyyyypqAzz - aabcxyzpqrrrabbxyyyypqAzz - 0: aabcxyzpqrrrabbxyyyypqAzz - aaabcxyzpqrrrabbxyyyypAzz - 0: aaabcxyzpqrrrabbxyyyypAzz - aaabcxyzpqrrrabbxyyyypqAzz - 0: aaabcxyzpqrrrabbxyyyypqAzz - aaabcxyzpqrrrabbxyyyypqqAzz - 0: aaabcxyzpqrrrabbxyyyypqqAzz - aaabcxyzpqrrrabbxyyyypqqqAzz - 0: aaabcxyzpqrrrabbxyyyypqqqAzz - aaabcxyzpqrrrabbxyyyypqqqqAzz - 0: aaabcxyzpqrrrabbxyyyypqqqqAzz - aaabcxyzpqrrrabbxyyyypqqqqqAzz - 0: aaabcxyzpqrrrabbxyyyypqqqqqAzz - aaabcxyzpqrrrabbxyyyypqqqqqqAzz - 0: aaabcxyzpqrrrabbxyyyypqqqqqqAzz - aaaabcxyzpqrrrabbxyyyypqAzz - 0: aaaabcxyzpqrrrabbxyyyypqAzz - abxyzzpqrrrabbxyyyypqAzz - 0: abxyzzpqrrrabbxyyyypqAzz - aabxyzzzpqrrrabbxyyyypqAzz - 0: aabxyzzzpqrrrabbxyyyypqAzz - aaabxyzzzzpqrrrabbxyyyypqAzz - 0: aaabxyzzzzpqrrrabbxyyyypqAzz - aaaabxyzzzzpqrrrabbxyyyypqAzz - 0: aaaabxyzzzzpqrrrabbxyyyypqAzz - abcxyzzpqrrrabbxyyyypqAzz - 0: abcxyzzpqrrrabbxyyyypqAzz - aabcxyzzzpqrrrabbxyyyypqAzz - 0: aabcxyzzzpqrrrabbxyyyypqAzz - aaabcxyzzzzpqrrrabbxyyyypqAzz - 0: aaabcxyzzzzpqrrrabbxyyyypqAzz - aaaabcxyzzzzpqrrrabbxyyyypqAzz - 0: aaaabcxyzzzzpqrrrabbxyyyypqAzz - aaaabcxyzzzzpqrrrabbbxyyyypqAzz - 0: aaaabcxyzzzzpqrrrabbbxyyyypqAzz - aaaabcxyzzzzpqrrrabbbxyyyyypqAzz - 0: aaaabcxyzzzzpqrrrabbbxyyyyypqAzz - aaabcxyzpqrrrabbxyyyypABzz - 0: aaabcxyzpqrrrabbxyyyypABzz - aaabcxyzpqrrrabbxyyyypABBzz - 0: aaabcxyzpqrrrabbxyyyypABBzz - >>>aaabxyzpqrrrabbxyyyypqAzz - 0: aaabxyzpqrrrabbxyyyypqAzz - >aaaabxyzpqrrrabbxyyyypqAzz - 0: aaaabxyzpqrrrabbxyyyypqAzz - >>>>abcxyzpqrrrabbxyyyypqAzz - 0: abcxyzpqrrrabbxyyyypqAzz -\= Expect no match - abxyzpqrrabbxyyyypqAzz -No match - abxyzpqrrrrabbxyyyypqAzz -No match - abxyzpqrrrabxyyyypqAzz -No match - aaaabcxyzzzzpqrrrabbbxyyyyyypqAzz -No match - aaaabcxyzzzzpqrrrabbbxyyypqAzz -No match - aaabcxyzpqrrrabbxyyyypqqqqqqqAzz -No match - -/^(abc){1,2}zz/ - abczz - 0: abczz - 1: abc - abcabczz - 0: abcabczz - 1: abc -\= Expect no match - zz -No match - abcabcabczz -No match - >>abczz -No match - -/^(b+?|a){1,2}?c/ - bc - 0: bc - 1: b - bbc - 0: bbc - 1: b - bbbc - 0: bbbc - 1: bb - bac - 0: bac - 1: a - bbac - 0: bbac - 1: a - aac - 0: aac - 1: a - abbbbbbbbbbbc - 0: abbbbbbbbbbbc - 1: bbbbbbbbbbb - bbbbbbbbbbbac - 0: bbbbbbbbbbbac - 1: a -\= Expect no match - aaac -No match - abbbbbbbbbbbac -No match - -/^(b+|a){1,2}c/ - bc - 0: bc - 1: b - bbc - 0: bbc - 1: bb - bbbc - 0: bbbc - 1: bbb - bac - 0: bac - 1: a - bbac - 0: bbac - 1: a - aac - 0: aac - 1: a - abbbbbbbbbbbc - 0: abbbbbbbbbbbc - 1: bbbbbbbbbbb - bbbbbbbbbbbac - 0: bbbbbbbbbbbac - 1: a -\= Expect no match - aaac -No match - abbbbbbbbbbbac -No match - -/^(b+|a){1,2}?bc/ - bbc - 0: bbc - 1: b - -/^(b*|ba){1,2}?bc/ - babc - 0: babc - 1: ba - bbabc - 0: bbabc - 1: ba - bababc - 0: bababc - 1: ba -\= Expect no match - bababbc -No match - babababc -No match - -/^(ba|b*){1,2}?bc/ - babc - 0: babc - 1: ba - bbabc - 0: bbabc - 1: ba - bababc - 0: bababc - 1: ba -\= Expect no match - bababbc -No match - babababc -No match - -#/^\ca\cA\c[;\c:/ -# \x01\x01\e;z -# 0: \x01\x01\x1b;z - -/^[ab\]cde]/ - athing - 0: a - bthing - 0: b - ]thing - 0: ] - cthing - 0: c - dthing - 0: d - ething - 0: e -\= Expect no match - fthing -No match - [thing -No match - \\thing -No match - -/^[]cde]/ - ]thing - 0: ] - cthing - 0: c - dthing - 0: d - ething - 0: e -\= Expect no match - athing -No match - fthing -No match - -/^[^ab\]cde]/ - fthing - 0: f - [thing - 0: [ - \\thing - 0: \ -\= Expect no match - athing -No match - bthing -No match - ]thing -No match - cthing -No match - dthing -No match - ething -No match - -/^[^]cde]/ - athing - 0: a - fthing - 0: f -\= Expect no match - ]thing -No match - cthing -No match - dthing -No match - ething -No match - -# DLC - I don't get this one -#/^\/ -#  -# 0: \x81 - -#updated to handle 16-bits utf8 -/^ÿ/ - ÿ - 0: \xc3\xbf - -/^[0-9]+$/ - 0 - 0: 0 - 1 - 0: 1 - 2 - 0: 2 - 3 - 0: 3 - 4 - 0: 4 - 5 - 0: 5 - 6 - 0: 6 - 7 - 0: 7 - 8 - 0: 8 - 9 - 0: 9 - 10 - 0: 10 - 100 - 0: 100 -\= Expect no match - abc -No match - -/^.*nter/ - enter - 0: enter - inter - 0: inter - uponter - 0: uponter - -/^xxx[0-9]+$/ - xxx0 - 0: xxx0 - xxx1234 - 0: xxx1234 -\= Expect no match - xxx -No match - -/^.+[0-9][0-9][0-9]$/ - x123 - 0: x123 - x1234 - 0: x1234 - xx123 - 0: xx123 - 123456 - 0: 123456 -\= Expect no match - 123 -No match - -/^.+?[0-9][0-9][0-9]$/ - x123 - 0: x123 - x1234 - 0: x1234 - xx123 - 0: xx123 - 123456 - 0: 123456 -\= Expect no match - 123 -No match - -/^([^!]+)!(.+)=apquxz\.ixr\.zzz\.ac\.uk$/ - abc!pqr=apquxz.ixr.zzz.ac.uk - 0: abc!pqr=apquxz.ixr.zzz.ac.uk - 1: abc - 2: pqr -\= Expect no match - !pqr=apquxz.ixr.zzz.ac.uk -No match - abc!=apquxz.ixr.zzz.ac.uk -No match - abc!pqr=apquxz:ixr.zzz.ac.uk -No match - abc!pqr=apquxz.ixr.zzz.ac.ukk -No match - -/:/ - Well, we need a colon: somewhere - 0: : -\= Expect no match - Fail without a colon -No match - -/([\da-f:]+)$/i - 0abc - 0: 0abc - 1: 0abc - abc - 0: abc - 1: abc - fed - 0: fed - 1: fed - E - 0: E - 1: E - :: - 0: :: - 1: :: - 5f03:12C0::932e - 0: 5f03:12C0::932e - 1: 5f03:12C0::932e - fed def - 0: def - 1: def - Any old stuff - 0: ff - 1: ff -\= Expect no match - 0zzz -No match - gzzz -No match - fed\x20 -No match - Any old rubbish -No match - -/^.*\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/ - .1.2.3 - 0: .1.2.3 - 1: 1 - 2: 2 - 3: 3 - A.12.123.0 - 0: A.12.123.0 - 1: 12 - 2: 123 - 3: 0 -\= Expect no match - .1.2.3333 -No match - 1.2.3 -No match - 1234.2.3 -No match - -/^(\d+)\s+IN\s+SOA\s+(\S+)\s+(\S+)\s*\(\s*$/ - 1 IN SOA non-sp1 non-sp2( - 0: 1 IN SOA non-sp1 non-sp2( - 1: 1 - 2: non-sp1 - 3: non-sp2 - 1 IN SOA non-sp1 non-sp2 ( - 0: 1 IN SOA non-sp1 non-sp2 ( - 1: 1 - 2: non-sp1 - 3: non-sp2 -\= Expect no match - 1IN SOA non-sp1 non-sp2( -No match - -/^[a-zA-Z\d][a-zA-Z\d\-]*(\.[a-zA-Z\d][a-zA-z\d\-]*)*\.$/ - a. - 0: a. - Z. - 0: Z. - 2. - 0: 2. - ab-c.pq-r. - 0: ab-c.pq-r. - 1: .pq-r - sxk.zzz.ac.uk. - 0: sxk.zzz.ac.uk. - 1: .uk - x-.y-. - 0: x-.y-. - 1: .y- -\= Expect no match - -abc.peq. -No match - -/^\*\.[a-z]([a-z\-\d]*[a-z\d]+)?(\.[a-z]([a-z\-\d]*[a-z\d]+)?)*$/ - *.a - 0: *.a - *.b0-a - 0: *.b0-a - 1: 0-a - *.c3-b.c - 0: *.c3-b.c - 1: 3-b - 2: .c - *.c-a.b-c - 0: *.c-a.b-c - 1: -a - 2: .b-c - 3: -c -\= Expect no match - *.0 -No match - *.a- -No match - *.a-b.c- -No match - *.c-a.0-c -No match - -/^(?=ab(de))(abd)(e)/ - abde - 0: abde - 1: de - 2: abd - 3: e - -/^(?!(ab)de|x)(abd)(f)/ - abdf - 0: abdf - 1: - 2: abd - 3: f - -/^(?=(ab(cd)))(ab)/ - abcd - 0: ab - 1: abcd - 2: cd - 3: ab - -/^[\da-f](\.[\da-f])*$/i - a.b.c.d - 0: a.b.c.d - 1: .d - A.B.C.D - 0: A.B.C.D - 1: .D - a.b.c.1.2.3.C - 0: a.b.c.1.2.3.C - 1: .C - -/^\".*\"\s*(;.*)?$/ - \"1234\" - 0: "1234" - \"abcd\" ; - 0: "abcd" ; - 1: ; - \"\" ; rhubarb - 0: "" ; rhubarb - 1: ; rhubarb -\= Expect no match - \"1234\" : things -No match - -/^$/ - \ - 0: -\= Expect no match - A non-empty line -No match - -/ ^ a (?# begins with a) b\sc (?# then b c) $ (?# then end)/x - ab c - 0: ab c -\= Expect no match - abc -No match - ab cde -No match - -/(?x) ^ a (?# begins with a) b\sc (?# then b c) $ (?# then end)/ - ab c - 0: ab c -\= Expect no match - abc -No match - ab cde -No match - -/^ a\ b[c ]d $/x - a bcd - 0: a bcd - a b d - 0: a b d -\= Expect no match - abcd -No match - ab d -No match - -/^(a(b(c)))(d(e(f)))(h(i(j)))(k(l(m)))$/ - abcdefhijklm - 0: abcdefhijklm - 1: abc - 2: bc - 3: c - 4: def - 5: ef - 6: f - 7: hij - 8: ij - 9: j -10: klm -11: lm -12: m - -/^(?:a(b(c)))(?:d(e(f)))(?:h(i(j)))(?:k(l(m)))$/ - abcdefhijklm - 0: abcdefhijklm - 1: bc - 2: c - 3: ef - 4: f - 5: ij - 6: j - 7: lm - 8: m - -#/^[\w][\W][\s][\S][\d][\D][\b][\n][\c]][\022]/ -# a+ Z0+\x08\n\x1d\x12 -# 0: a+ Z0+\x08\x0a\x1d\x12 - -/^[.^$|()*+?{,}]+/ - .^\$(*+)|{?,?} - 0: .^$(*+)|{?,?} - -/^a*\w/ - z - 0: z - az - 0: az - aaaz - 0: aaaz - a - 0: a - aa - 0: aa - aaaa - 0: aaaa - a+ - 0: a - aa+ - 0: aa - -/^a*?\w/ - z - 0: z - az - 0: a - aaaz - 0: a - a - 0: a - aa - 0: a - aaaa - 0: a - a+ - 0: a - aa+ - 0: a - -/^a+\w/ - az - 0: az - aaaz - 0: aaaz - aa - 0: aa - aaaa - 0: aaaa - aa+ - 0: aa - -/^a+?\w/ - az - 0: az - aaaz - 0: aa - aa - 0: aa - aaaa - 0: aa - aa+ - 0: aa - -/^\d{8}\w{2,}/ - 1234567890 - 0: 1234567890 - 12345678ab - 0: 12345678ab - 12345678__ - 0: 12345678__ -\= Expect no match - 1234567 -No match - -/^[aeiou\d]{4,5}$/ - uoie - 0: uoie - 1234 - 0: 1234 - 12345 - 0: 12345 - aaaaa - 0: aaaaa -\= Expect no match - 123456 -No match - -/^[aeiou\d]{4,5}?/ - uoie - 0: uoie - 1234 - 0: 1234 - 12345 - 0: 1234 - aaaaa - 0: aaaa - 123456 - 0: 1234 - -/\A(abc|def)=(\1){2,3}\Z/ - abc=abcabc - 0: abc=abcabc - 1: abc - 2: abc - def=defdefdef - 0: def=defdefdef - 1: def - 2: def -\= Expect no match - abc=defdef -No match - -/^(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\11*(\3\4)\1(?#)2$/ - abcdefghijkcda2 - 0: abcdefghijkcda2 - 1: a - 2: b - 3: c - 4: d - 5: e - 6: f - 7: g - 8: h - 9: i -10: j -11: k -12: cd - abcdefghijkkkkcda2 - 0: abcdefghijkkkkcda2 - 1: a - 2: b - 3: c - 4: d - 5: e - 6: f - 7: g - 8: h - 9: i -10: j -11: k -12: cd - -/(cat(a(ract|tonic)|erpillar)) \1()2(3)/ - cataract cataract23 - 0: cataract cataract23 - 1: cataract - 2: aract - 3: ract - 4: - 5: 3 - catatonic catatonic23 - 0: catatonic catatonic23 - 1: catatonic - 2: atonic - 3: tonic - 4: - 5: 3 - caterpillar caterpillar23 - 0: caterpillar caterpillar23 - 1: caterpillar - 2: erpillar - 3: - 4: - 5: 3 - - -/^From +([^ ]+) +[a-zA-Z][a-zA-Z][a-zA-Z] +[a-zA-Z][a-zA-Z][a-zA-Z] +[0-9]?[0-9] +[0-9][0-9]:[0-9][0-9]/ - From abcd Mon Sep 01 12:33:02 1997 - 0: From abcd Mon Sep 01 12:33 - 1: abcd - -/^From\s+\S+\s+([a-zA-Z]{3}\s+){2}\d{1,2}\s+\d\d:\d\d/ - From abcd Mon Sep 01 12:33:02 1997 - 0: From abcd Mon Sep 01 12:33 - 1: Sep - From abcd Mon Sep 1 12:33:02 1997 - 0: From abcd Mon Sep 1 12:33 - 1: Sep -\= Expect no match - From abcd Sep 01 12:33:02 1997 -No match - -/^12.34/s - 12\n34 - 0: 12\x0a34 - 12\r34 - 0: 12\x0d34 - -/\w+(?=\t)/ - the quick brown\t fox - 0: brown - -/foo(?!bar)(.*)/ - foobar is foolish see? - 0: foolish see? - 1: lish see? - -/(?:(?!foo)...|^.{0,2})bar(.*)/ - foobar crowbar etc - 0: rowbar etc - 1: etc - barrel - 0: barrel - 1: rel - 2barrel - 0: 2barrel - 1: rel - A barrel - 0: A barrel - 1: rel - -/^(\D*)(?=\d)(?!123)/ - abc456 - 0: abc - 1: abc -\= Expect no match - abc123 -No match - -/^1234(?# test newlines - inside)/ - 1234 - 0: 1234 - -/^1234 #comment in extended re - /x - 1234 - 0: 1234 - -/#rhubarb - abcd/x - abcd - 0: abcd - -/^abcd#rhubarb/x - abcd - 0: abcd - -/^(a)\1{2,3}(.)/ - aaab - 0: aaab - 1: a - 2: b - aaaab - 0: aaaab - 1: a - 2: b - aaaaab - 0: aaaaa - 1: a - 2: a - aaaaaab - 0: aaaaa - 1: a - 2: a - -/(?!^)abc/ - the abc - 0: abc -\= Expect no match - abc -No match - -/(?=^)abc/ - abc - 0: abc -\= Expect no match - the abc -No match - -/^[ab]{1,3}(ab*|b)/ - aabbbbb - 0: aabb - 1: b - -/^[ab]{1,3}?(ab*|b)/ - aabbbbb - 0: aabbbbb - 1: abbbbb - -/^[ab]{1,3}?(ab*?|b)/ - aabbbbb - 0: aa - 1: a - -/^[ab]{1,3}(ab*?|b)/ - aabbbbb - 0: aabb - 1: b - -/ (?: [\040\t] | \( -(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* -\) )* # optional leading comment -(?: (?: -[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... -(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom -| -" (?: # opening quote... -[^\\\x80-\xff\n\015"] # Anything except backslash and quote -| # or -\\ [^\x80-\xff] # Escaped something (something != CR) -)* " # closing quote -) # initial word -(?: (?: [\040\t] | \( -(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* -\) )* \. (?: [\040\t] | \( -(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* -\) )* (?: -[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... -(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom -| -" (?: # opening quote... -[^\\\x80-\xff\n\015"] # Anything except backslash and quote -| # or -\\ [^\x80-\xff] # Escaped something (something != CR) -)* " # closing quote -) )* # further okay, if led by a period -(?: [\040\t] | \( -(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* -\) )* @ (?: [\040\t] | \( -(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* -\) )* (?: -[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... -(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom -| \[ # [ -(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff -\] # ] -) # initial subdomain -(?: # -(?: [\040\t] | \( -(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* -\) )* \. # if led by a period... -(?: [\040\t] | \( -(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* -\) )* (?: -[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... -(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom -| \[ # [ -(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff -\] # ] -) # ...further okay -)* -# address -| # or -(?: -[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... -(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom -| -" (?: # opening quote... -[^\\\x80-\xff\n\015"] # Anything except backslash and quote -| # or -\\ [^\x80-\xff] # Escaped something (something != CR) -)* " # closing quote -) # one word, optionally followed by.... -(?: -[^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] | # atom and space parts, or... -\( -(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* -\) | # comments, or... - -" (?: # opening quote... -[^\\\x80-\xff\n\015"] # Anything except backslash and quote -| # or -\\ [^\x80-\xff] # Escaped something (something != CR) -)* " # closing quote -# quoted strings -)* -< (?: [\040\t] | \( -(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* -\) )* # leading < -(?: @ (?: [\040\t] | \( -(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* -\) )* (?: -[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... -(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom -| \[ # [ -(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff -\] # ] -) # initial subdomain -(?: # -(?: [\040\t] | \( -(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* -\) )* \. # if led by a period... -(?: [\040\t] | \( -(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* -\) )* (?: -[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... -(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom -| \[ # [ -(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff -\] # ] -) # ...further okay -)* - -(?: (?: [\040\t] | \( -(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* -\) )* , (?: [\040\t] | \( -(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* -\) )* @ (?: [\040\t] | \( -(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* -\) )* (?: -[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... -(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom -| \[ # [ -(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff -\] # ] -) # initial subdomain -(?: # -(?: [\040\t] | \( -(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* -\) )* \. # if led by a period... -(?: [\040\t] | \( -(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* -\) )* (?: -[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... -(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom -| \[ # [ -(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff -\] # ] -) # ...further okay -)* -)* # further okay, if led by comma -: # closing colon -(?: [\040\t] | \( -(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* -\) )* )? # optional route -(?: -[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... -(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom -| -" (?: # opening quote... -[^\\\x80-\xff\n\015"] # Anything except backslash and quote -| # or -\\ [^\x80-\xff] # Escaped something (something != CR) -)* " # closing quote -) # initial word -(?: (?: [\040\t] | \( -(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* -\) )* \. (?: [\040\t] | \( -(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* -\) )* (?: -[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... -(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom -| -" (?: # opening quote... -[^\\\x80-\xff\n\015"] # Anything except backslash and quote -| # or -\\ [^\x80-\xff] # Escaped something (something != CR) -)* " # closing quote -) )* # further okay, if led by a period -(?: [\040\t] | \( -(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* -\) )* @ (?: [\040\t] | \( -(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* -\) )* (?: -[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... -(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom -| \[ # [ -(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff -\] # ] -) # initial subdomain -(?: # -(?: [\040\t] | \( -(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* -\) )* \. # if led by a period... -(?: [\040\t] | \( -(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* -\) )* (?: -[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... -(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom -| \[ # [ -(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff -\] # ] -) # ...further okay -)* -# address spec -(?: [\040\t] | \( -(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* -\) )* > # trailing > -# name and address -) (?: [\040\t] | \( -(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* -\) )* # optional trailing comment -/x - Alan Other - 0: Alan Other - - 0: user@dom.ain - user\@dom.ain - 0: user@dom.ain - \"A. Other\" (a comment) - 0: "A. Other" (a comment) - A. Other (a comment) - 0: Other (a comment) - \"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"\@x400-re.lay - 0: "/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/"@x400-re.lay - A missing angle @,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... -(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom -# Atom -| # or -" # " -[^\\\x80-\xff\n\015"] * # normal -(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )* -" # " -# Quoted string -) -[\040\t]* # Nab whitespace. -(?: -\( # ( -[^\\\x80-\xff\n\015()] * # normal* -(?: # ( -(?: \\ [^\x80-\xff] | -\( # ( -[^\\\x80-\xff\n\015()] * # normal* -(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* -\) # ) -) # special -[^\\\x80-\xff\n\015()] * # normal* -)* # )* -\) # ) -[\040\t]* )* # If comment found, allow more spaces. -(?: -\. -[\040\t]* # Nab whitespace. -(?: -\( # ( -[^\\\x80-\xff\n\015()] * # normal* -(?: # ( -(?: \\ [^\x80-\xff] | -\( # ( -[^\\\x80-\xff\n\015()] * # normal* -(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* -\) # ) -) # special -[^\\\x80-\xff\n\015()] * # normal* -)* # )* -\) # ) -[\040\t]* )* # If comment found, allow more spaces. -(?: -[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... -(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom -# Atom -| # or -" # " -[^\\\x80-\xff\n\015"] * # normal -(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )* -" # " -# Quoted string -) -[\040\t]* # Nab whitespace. -(?: -\( # ( -[^\\\x80-\xff\n\015()] * # normal* -(?: # ( -(?: \\ [^\x80-\xff] | -\( # ( -[^\\\x80-\xff\n\015()] * # normal* -(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* -\) # ) -) # special -[^\\\x80-\xff\n\015()] * # normal* -)* # )* -\) # ) -[\040\t]* )* # If comment found, allow more spaces. -# additional words -)* -@ -[\040\t]* # Nab whitespace. -(?: -\( # ( -[^\\\x80-\xff\n\015()] * # normal* -(?: # ( -(?: \\ [^\x80-\xff] | -\( # ( -[^\\\x80-\xff\n\015()] * # normal* -(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* -\) # ) -) # special -[^\\\x80-\xff\n\015()] * # normal* -)* # )* -\) # ) -[\040\t]* )* # If comment found, allow more spaces. -(?: -[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... -(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom -| -\[ # [ -(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff -\] # ] -) -[\040\t]* # Nab whitespace. -(?: -\( # ( -[^\\\x80-\xff\n\015()] * # normal* -(?: # ( -(?: \\ [^\x80-\xff] | -\( # ( -[^\\\x80-\xff\n\015()] * # normal* -(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* -\) # ) -) # special -[^\\\x80-\xff\n\015()] * # normal* -)* # )* -\) # ) -[\040\t]* )* # If comment found, allow more spaces. -# optional trailing comments -(?: -\. -[\040\t]* # Nab whitespace. -(?: -\( # ( -[^\\\x80-\xff\n\015()] * # normal* -(?: # ( -(?: \\ [^\x80-\xff] | -\( # ( -[^\\\x80-\xff\n\015()] * # normal* -(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* -\) # ) -) # special -[^\\\x80-\xff\n\015()] * # normal* -)* # )* -\) # ) -[\040\t]* )* # If comment found, allow more spaces. -(?: -[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... -(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom -| -\[ # [ -(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff -\] # ] -) -[\040\t]* # Nab whitespace. -(?: -\( # ( -[^\\\x80-\xff\n\015()] * # normal* -(?: # ( -(?: \\ [^\x80-\xff] | -\( # ( -[^\\\x80-\xff\n\015()] * # normal* -(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* -\) # ) -) # special -[^\\\x80-\xff\n\015()] * # normal* -)* # )* -\) # ) -[\040\t]* )* # If comment found, allow more spaces. -# optional trailing comments -)* -# address -| # or -(?: -[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... -(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom -# Atom -| # or -" # " -[^\\\x80-\xff\n\015"] * # normal -(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )* -" # " -# Quoted string -) -# leading word -[^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] * # "normal" atoms and or spaces -(?: -(?: -\( # ( -[^\\\x80-\xff\n\015()] * # normal* -(?: # ( -(?: \\ [^\x80-\xff] | -\( # ( -[^\\\x80-\xff\n\015()] * # normal* -(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* -\) # ) -) # special -[^\\\x80-\xff\n\015()] * # normal* -)* # )* -\) # ) -| -" # " -[^\\\x80-\xff\n\015"] * # normal -(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )* -" # " -) # "special" comment or quoted string -[^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] * # more "normal" -)* -< -[\040\t]* # Nab whitespace. -(?: -\( # ( -[^\\\x80-\xff\n\015()] * # normal* -(?: # ( -(?: \\ [^\x80-\xff] | -\( # ( -[^\\\x80-\xff\n\015()] * # normal* -(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* -\) # ) -) # special -[^\\\x80-\xff\n\015()] * # normal* -)* # )* -\) # ) -[\040\t]* )* # If comment found, allow more spaces. -# < -(?: -@ -[\040\t]* # Nab whitespace. -(?: -\( # ( -[^\\\x80-\xff\n\015()] * # normal* -(?: # ( -(?: \\ [^\x80-\xff] | -\( # ( -[^\\\x80-\xff\n\015()] * # normal* -(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* -\) # ) -) # special -[^\\\x80-\xff\n\015()] * # normal* -)* # )* -\) # ) -[\040\t]* )* # If comment found, allow more spaces. -(?: -[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... -(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom -| -\[ # [ -(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff -\] # ] -) -[\040\t]* # Nab whitespace. -(?: -\( # ( -[^\\\x80-\xff\n\015()] * # normal* -(?: # ( -(?: \\ [^\x80-\xff] | -\( # ( -[^\\\x80-\xff\n\015()] * # normal* -(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* -\) # ) -) # special -[^\\\x80-\xff\n\015()] * # normal* -)* # )* -\) # ) -[\040\t]* )* # If comment found, allow more spaces. -# optional trailing comments -(?: -\. -[\040\t]* # Nab whitespace. -(?: -\( # ( -[^\\\x80-\xff\n\015()] * # normal* -(?: # ( -(?: \\ [^\x80-\xff] | -\( # ( -[^\\\x80-\xff\n\015()] * # normal* -(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* -\) # ) -) # special -[^\\\x80-\xff\n\015()] * # normal* -)* # )* -\) # ) -[\040\t]* )* # If comment found, allow more spaces. -(?: -[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... -(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom -| -\[ # [ -(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff -\] # ] -) -[\040\t]* # Nab whitespace. -(?: -\( # ( -[^\\\x80-\xff\n\015()] * # normal* -(?: # ( -(?: \\ [^\x80-\xff] | -\( # ( -[^\\\x80-\xff\n\015()] * # normal* -(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* -\) # ) -) # special -[^\\\x80-\xff\n\015()] * # normal* -)* # )* -\) # ) -[\040\t]* )* # If comment found, allow more spaces. -# optional trailing comments -)* -(?: , -[\040\t]* # Nab whitespace. -(?: -\( # ( -[^\\\x80-\xff\n\015()] * # normal* -(?: # ( -(?: \\ [^\x80-\xff] | -\( # ( -[^\\\x80-\xff\n\015()] * # normal* -(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* -\) # ) -) # special -[^\\\x80-\xff\n\015()] * # normal* -)* # )* -\) # ) -[\040\t]* )* # If comment found, allow more spaces. -@ -[\040\t]* # Nab whitespace. -(?: -\( # ( -[^\\\x80-\xff\n\015()] * # normal* -(?: # ( -(?: \\ [^\x80-\xff] | -\( # ( -[^\\\x80-\xff\n\015()] * # normal* -(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* -\) # ) -) # special -[^\\\x80-\xff\n\015()] * # normal* -)* # )* -\) # ) -[\040\t]* )* # If comment found, allow more spaces. -(?: -[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... -(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom -| -\[ # [ -(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff -\] # ] -) -[\040\t]* # Nab whitespace. -(?: -\( # ( -[^\\\x80-\xff\n\015()] * # normal* -(?: # ( -(?: \\ [^\x80-\xff] | -\( # ( -[^\\\x80-\xff\n\015()] * # normal* -(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* -\) # ) -) # special -[^\\\x80-\xff\n\015()] * # normal* -)* # )* -\) # ) -[\040\t]* )* # If comment found, allow more spaces. -# optional trailing comments -(?: -\. -[\040\t]* # Nab whitespace. -(?: -\( # ( -[^\\\x80-\xff\n\015()] * # normal* -(?: # ( -(?: \\ [^\x80-\xff] | -\( # ( -[^\\\x80-\xff\n\015()] * # normal* -(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* -\) # ) -) # special -[^\\\x80-\xff\n\015()] * # normal* -)* # )* -\) # ) -[\040\t]* )* # If comment found, allow more spaces. -(?: -[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... -(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom -| -\[ # [ -(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff -\] # ] -) -[\040\t]* # Nab whitespace. -(?: -\( # ( -[^\\\x80-\xff\n\015()] * # normal* -(?: # ( -(?: \\ [^\x80-\xff] | -\( # ( -[^\\\x80-\xff\n\015()] * # normal* -(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* -\) # ) -) # special -[^\\\x80-\xff\n\015()] * # normal* -)* # )* -\) # ) -[\040\t]* )* # If comment found, allow more spaces. -# optional trailing comments -)* -)* # additional domains -: -[\040\t]* # Nab whitespace. -(?: -\( # ( -[^\\\x80-\xff\n\015()] * # normal* -(?: # ( -(?: \\ [^\x80-\xff] | -\( # ( -[^\\\x80-\xff\n\015()] * # normal* -(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* -\) # ) -) # special -[^\\\x80-\xff\n\015()] * # normal* -)* # )* -\) # ) -[\040\t]* )* # If comment found, allow more spaces. -# optional trailing comments -)? # optional route -(?: -[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... -(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom -# Atom -| # or -" # " -[^\\\x80-\xff\n\015"] * # normal -(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )* -" # " -# Quoted string -) -[\040\t]* # Nab whitespace. -(?: -\( # ( -[^\\\x80-\xff\n\015()] * # normal* -(?: # ( -(?: \\ [^\x80-\xff] | -\( # ( -[^\\\x80-\xff\n\015()] * # normal* -(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* -\) # ) -) # special -[^\\\x80-\xff\n\015()] * # normal* -)* # )* -\) # ) -[\040\t]* )* # If comment found, allow more spaces. -(?: -\. -[\040\t]* # Nab whitespace. -(?: -\( # ( -[^\\\x80-\xff\n\015()] * # normal* -(?: # ( -(?: \\ [^\x80-\xff] | -\( # ( -[^\\\x80-\xff\n\015()] * # normal* -(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* -\) # ) -) # special -[^\\\x80-\xff\n\015()] * # normal* -)* # )* -\) # ) -[\040\t]* )* # If comment found, allow more spaces. -(?: -[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... -(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom -# Atom -| # or -" # " -[^\\\x80-\xff\n\015"] * # normal -(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )* -" # " -# Quoted string -) -[\040\t]* # Nab whitespace. -(?: -\( # ( -[^\\\x80-\xff\n\015()] * # normal* -(?: # ( -(?: \\ [^\x80-\xff] | -\( # ( -[^\\\x80-\xff\n\015()] * # normal* -(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* -\) # ) -) # special -[^\\\x80-\xff\n\015()] * # normal* -)* # )* -\) # ) -[\040\t]* )* # If comment found, allow more spaces. -# additional words -)* -@ -[\040\t]* # Nab whitespace. -(?: -\( # ( -[^\\\x80-\xff\n\015()] * # normal* -(?: # ( -(?: \\ [^\x80-\xff] | -\( # ( -[^\\\x80-\xff\n\015()] * # normal* -(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* -\) # ) -) # special -[^\\\x80-\xff\n\015()] * # normal* -)* # )* -\) # ) -[\040\t]* )* # If comment found, allow more spaces. -(?: -[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... -(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom -| -\[ # [ -(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff -\] # ] -) -[\040\t]* # Nab whitespace. -(?: -\( # ( -[^\\\x80-\xff\n\015()] * # normal* -(?: # ( -(?: \\ [^\x80-\xff] | -\( # ( -[^\\\x80-\xff\n\015()] * # normal* -(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* -\) # ) -) # special -[^\\\x80-\xff\n\015()] * # normal* -)* # )* -\) # ) -[\040\t]* )* # If comment found, allow more spaces. -# optional trailing comments -(?: -\. -[\040\t]* # Nab whitespace. -(?: -\( # ( -[^\\\x80-\xff\n\015()] * # normal* -(?: # ( -(?: \\ [^\x80-\xff] | -\( # ( -[^\\\x80-\xff\n\015()] * # normal* -(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* -\) # ) -) # special -[^\\\x80-\xff\n\015()] * # normal* -)* # )* -\) # ) -[\040\t]* )* # If comment found, allow more spaces. -(?: -[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... -(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom -| -\[ # [ -(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff -\] # ] -) -[\040\t]* # Nab whitespace. -(?: -\( # ( -[^\\\x80-\xff\n\015()] * # normal* -(?: # ( -(?: \\ [^\x80-\xff] | -\( # ( -[^\\\x80-\xff\n\015()] * # normal* -(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* -\) # ) -) # special -[^\\\x80-\xff\n\015()] * # normal* -)* # )* -\) # ) -[\040\t]* )* # If comment found, allow more spaces. -# optional trailing comments -)* -# address spec -> # > -# name and address -) -/x - Alan Other - 0: Alan Other - - 0: user@dom.ain - user\@dom.ain - 0: user@dom.ain - \"A. Other\" (a comment) - 0: "A. Other" - A. Other (a comment) - 0: Other - \"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"\@x400-re.lay - 0: "/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/"@x400-re.lay - A missing angle ?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f - -/P[^*]TAIRE[^*]{1,6}?LL/ - xxxxxxxxxxxPSTAIREISLLxxxxxxxxx - 0: PSTAIREISLL - -/P[^*]TAIRE[^*]{1,}?LL/ - xxxxxxxxxxxPSTAIREISLLxxxxxxxxx - 0: PSTAIREISLL - -/(\.\d\d[1-9]?)\d+/ - 1.230003938 - 0: .230003938 - 1: .23 - 1.875000282 - 0: .875000282 - 1: .875 - 1.235 - 0: .235 - 1: .23 - -/(\.\d\d((?=0)|\d(?=\d)))/ - 1.230003938 - 0: .23 - 1: .23 - 2: - 1.875000282 - 0: .875 - 1: .875 - 2: 5 -\= Expect no match - 1.235 -No match - -/\b(foo)\s+(\w+)/i - Food is on the foo table - 0: foo table - 1: foo - 2: table - -/foo(.*)bar/ - The food is under the bar in the barn. - 0: food is under the bar in the bar - 1: d is under the bar in the - -/foo(.*?)bar/ - The food is under the bar in the barn. - 0: food is under the bar - 1: d is under the - -/(.*)(\d*)/ - I have 2 numbers: 53147 - 0: I have 2 numbers: 53147 - 1: I have 2 numbers: 53147 - 2: - -/(.*)(\d+)/ - I have 2 numbers: 53147 - 0: I have 2 numbers: 53147 - 1: I have 2 numbers: 5314 - 2: 7 - -/(.*?)(\d*)/ - I have 2 numbers: 53147 - 0: - 1: - 2: - -/(.*?)(\d+)/ - I have 2 numbers: 53147 - 0: I have 2 - 1: I have - 2: 2 - -/(.*)(\d+)$/ - I have 2 numbers: 53147 - 0: I have 2 numbers: 53147 - 1: I have 2 numbers: 5314 - 2: 7 - -/(.*?)(\d+)$/ - I have 2 numbers: 53147 - 0: I have 2 numbers: 53147 - 1: I have 2 numbers: - 2: 53147 - -/(.*)\b(\d+)$/ - I have 2 numbers: 53147 - 0: I have 2 numbers: 53147 - 1: I have 2 numbers: - 2: 53147 - -/(.*\D)(\d+)$/ - I have 2 numbers: 53147 - 0: I have 2 numbers: 53147 - 1: I have 2 numbers: - 2: 53147 - -/^\D*(?!123)/ - ABC123 - 0: AB - -/^(\D*)(?=\d)(?!123)/ - ABC445 - 0: ABC - 1: ABC -\= Expect no match - ABC123 -No match - -/^[W-]46]/ - W46]789 - 0: W46] - -46]789 - 0: -46] -\= Expect no match - Wall -No match - Zebra -No match - 42 -No match - [abcd] -No match - ]abcd[ -No match - -/^[W-\]46]/ - W46]789 - 0: W - Wall - 0: W - Zebra - 0: Z - Xylophone - 0: X - 42 - 0: 4 - [abcd] - 0: [ - ]abcd[ - 0: ] - \\backslash - 0: \ -\= Expect no match - -46]789 -No match - well -No match - -/\d\d\/\d\d\/\d\d\d\d/ - 01/01/2000 - 0: 01/01/2000 - -/word (?:[a-zA-Z0-9]+ ){0,10}otherword/ - word cat dog elephant mussel cow horse canary baboon snake shark otherword - 0: word cat dog elephant mussel cow horse canary baboon snake shark otherword -\= Expect no match - word cat dog elephant mussel cow horse canary baboon snake shark -No match - -/word (?:[a-zA-Z0-9]+ ){0,300}otherword/ -\= Expect no match - word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope -No match - -/^(a){0,0}/ - bcd - 0: - abc - 0: - aab - 0: - -/^(a){0,1}/ - bcd - 0: - abc - 0: a - 1: a - aab - 0: a - 1: a - -/^(a){0,2}/ - bcd - 0: - abc - 0: a - 1: a - aab - 0: aa - 1: a - -/^(a){0,3}/ - bcd - 0: - abc - 0: a - 1: a - aab - 0: aa - 1: a - aaa - 0: aaa - 1: a - -/^(a){0,}/ - bcd - 0: - abc - 0: a - 1: a - aab - 0: aa - 1: a - aaa - 0: aaa - 1: a - aaaaaaaa - 0: aaaaaaaa - 1: a - -/^(a){1,1}/ - abc - 0: a - 1: a - aab - 0: a - 1: a -\= Expect no match - bcd -No match - -/^(a){1,2}/ - abc - 0: a - 1: a - aab - 0: aa - 1: a -\= Expect no match - bcd -No match - -/^(a){1,3}/ - abc - 0: a - 1: a - aab - 0: aa - 1: a - aaa - 0: aaa - 1: a -\= Expect no match - bcd -No match - -/^(a){1,}/ - abc - 0: a - 1: a - aab - 0: aa - 1: a - aaa - 0: aaa - 1: a - aaaaaaaa - 0: aaaaaaaa - 1: a -\= Expect no match - bcd -No match - -/.*\.gif/ - borfle\nbib.gif\nno - 0: bib.gif - -/.{0,}\.gif/ - borfle\nbib.gif\nno - 0: bib.gif - -/.*\.gif/m - borfle\nbib.gif\nno - 0: bib.gif - -/.*\.gif/s - borfle\nbib.gif\nno - 0: borfle\x0abib.gif - -/.*\.gif/ms - borfle\nbib.gif\nno - 0: borfle\x0abib.gif - -/.*$/ - borfle\nbib.gif\nno - 0: no - -/.*$/m - borfle\nbib.gif\nno - 0: borfle - -/.*$/s - borfle\nbib.gif\nno - 0: borfle\x0abib.gif\x0ano - -/.*$/ms - borfle\nbib.gif\nno - 0: borfle\x0abib.gif\x0ano - -/.*$/ - borfle\nbib.gif\nno\n - 0: no - -/.*$/m - borfle\nbib.gif\nno\n - 0: borfle - -/.*$/s - borfle\nbib.gif\nno\n - 0: borfle\x0abib.gif\x0ano\x0a - -/.*$/ms - borfle\nbib.gif\nno\n - 0: borfle\x0abib.gif\x0ano\x0a - -/(.*X|^B)/ - abcde\n1234Xyz - 0: 1234X - 1: 1234X - BarFoo - 0: B - 1: B -\= Expect no match - abcde\nBar -No match - -/(.*X|^B)/m - abcde\n1234Xyz - 0: 1234X - 1: 1234X - BarFoo - 0: B - 1: B - abcde\nBar - 0: B - 1: B - -/(.*X|^B)/s - abcde\n1234Xyz - 0: abcde\x0a1234X - 1: abcde\x0a1234X - BarFoo - 0: B - 1: B -\= Expect no match - abcde\nBar -No match - -/(.*X|^B)/ms - abcde\n1234Xyz - 0: abcde\x0a1234X - 1: abcde\x0a1234X - BarFoo - 0: B - 1: B - abcde\nBar - 0: B - 1: B - -/(?s)(.*X|^B)/ - abcde\n1234Xyz - 0: abcde\x0a1234X - 1: abcde\x0a1234X - BarFoo - 0: B - 1: B -\= Expect no match - abcde\nBar -No match - -/(?s:.*X|^B)/ - abcde\n1234Xyz - 0: abcde\x0a1234X - BarFoo - 0: B -\= Expect no match - abcde\nBar -No match - -/^.*B/ -\= Expect no match - abc\nB -No match - -/(?s)^.*B/ - abc\nB - 0: abc\x0aB - -/(?m)^.*B/ - abc\nB - 0: B - -/(?ms)^.*B/ - abc\nB - 0: abc\x0aB - -/(?ms)^B/ - abc\nB - 0: B - -/(?s)B$/ - B\n - 0: B - -/^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]/ - 123456654321 - 0: 123456654321 - -/^\d\d\d\d\d\d\d\d\d\d\d\d/ - 123456654321 - 0: 123456654321 - -/^[\d][\d][\d][\d][\d][\d][\d][\d][\d][\d][\d][\d]/ - 123456654321 - 0: 123456654321 - -/^[abc]{12}/ - abcabcabcabc - 0: abcabcabcabc - -/^[a-c]{12}/ - abcabcabcabc - 0: abcabcabcabc - -/^(a|b|c){12}/ - abcabcabcabc - 0: abcabcabcabc - 1: c - -/^[abcdefghijklmnopqrstuvwxy0123456789]/ - n - 0: n -\= Expect no match - z -No match - -/abcde{0,0}/ - abcd - 0: abcd -\= Expect no match - abce -No match - -/ab[cd]{0,0}e/ - abe - 0: abe -\= Expect no match - abcde -No match - -/ab(c){0,0}d/ - abd - 0: abd -\= Expect no match - abcd -No match - -/a(b*)/ - a - 0: a - 1: - ab - 0: ab - 1: b - abbbb - 0: abbbb - 1: bbbb -\= Expect no match - bbbbb -No match - -/ab\d{0}e/ - abe - 0: abe -\= Expect no match - ab1e -No match - -/"([^\\"]+|\\.)*"/ - the \"quick\" brown fox - 0: "quick" - 1: quick - \"the \\\"quick\\\" brown fox\" - 0: "the \"quick\" brown fox" - 1: brown fox - -/]{0,})>]{0,})>([\d]{0,}\.)(.*)((
([\w\W\s\d][^<>]{0,})|[\s]{0,}))<\/a><\/TD>]{0,})>([\w\W\s\d][^<>]{0,})<\/TD>]{0,})>([\w\W\s\d][^<>]{0,})<\/TD><\/TR>/is - 43.Word Processor
(N-1286)
Lega lstaff.comCA - Statewide - 0: 43.Word Processor
(N-1286)
Lega lstaff.comCA - Statewide - 1: BGCOLOR='#DBE9E9' - 2: align=left valign=top - 3: 43. - 4: Word Processor
(N-1286) - 5: - 6: - 7: - 8: align=left valign=top - 9: Lega lstaff.com -10: align=left valign=top -11: CA - Statewide - -/a[^a]b/ - acb - 0: acb - a\nb - 0: a\x0ab - -/a.b/ - acb - 0: acb -\= Expect no match - a\nb -No match - -/a[^a]b/s - acb - 0: acb - a\nb - 0: a\x0ab - -/a.b/s - acb - 0: acb - a\nb - 0: a\x0ab - -/^(b+?|a){1,2}?c/ - bac - 0: bac - 1: a - bbac - 0: bbac - 1: a - bbbac - 0: bbbac - 1: a - bbbbac - 0: bbbbac - 1: a - bbbbbac - 0: bbbbbac - 1: a - -/^(b+|a){1,2}?c/ - bac - 0: bac - 1: a - bbac - 0: bbac - 1: a - bbbac - 0: bbbac - 1: a - bbbbac - 0: bbbbac - 1: a - bbbbbac - 0: bbbbbac - 1: a - -/(?!\A)x/m - a\bx\n - 0: x - a\nx\n - 0: x -\= Expect no match - x\nb\n -No match - -/(A|B)*?CD/ - CD - 0: CD - -/(A|B)*CD/ - CD - 0: CD - -/(AB)*?\1/ - ABABAB - 0: ABAB - 1: AB - -/(AB)*\1/ - ABABAB - 0: ABABAB - 1: AB - -/(?.*/)foo" - /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/and/foo - 0: /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/and/foo -\= Expect no match - /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/it/you/see/ -No match - -/(?>(\.\d\d[1-9]?))\d+/ - 1.230003938 - 0: .230003938 - 1: .23 - 1.875000282 - 0: .875000282 - 1: .875 -\= Expect no match - 1.235 -No match - -/^((?>\w+)|(?>\s+))*$/ - now is the time for all good men to come to the aid of the party - 0: now is the time for all good men to come to the aid of the party - 1: party -\= Expect no match - this is not a line with only words and spaces! -No match - -/(\d+)(\w)/ - 12345a - 0: 12345a - 1: 12345 - 2: a - 12345+ - 0: 12345 - 1: 1234 - 2: 5 - -/((?>\d+))(\w)/ - 12345a - 0: 12345a - 1: 12345 - 2: a -\= Expect no match - 12345+ -No match - -/(?>a+)b/ - aaab - 0: aaab - -/((?>a+)b)/ - aaab - 0: aaab - 1: aaab - -/(?>(a+))b/ - aaab - 0: aaab - 1: aaa - -/(?>b)+/ - aaabbbccc - 0: bbb - -/(?>a+|b+|c+)*c/ - aaabbbbccccd - 0: aaabbbbc - -/((?>[^()]+)|\([^()]*\))+/ - ((abc(ade)ufh()()x - 0: abc(ade)ufh()()x - 1: x - -/\(((?>[^()]+)|\([^()]+\))+\)/ - (abc) - 0: (abc) - 1: abc - (abc(def)xyz) - 0: (abc(def)xyz) - 1: xyz -\= Expect no match - ((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -No match - -/a(?-i)b/i - ab - 0: ab - Ab - 0: Ab -\= Expect no match - aB -No match - AB -No match - -/(a (?x)b c)d e/ - a bcd e - 0: a bcd e - 1: a bc -\= Expect no match - a b cd e -No match - abcd e -No match - a bcde -No match - -/(a b(?x)c d (?-x)e f)/ - a bcde f - 0: a bcde f - 1: a bcde f -\= Expect no match - abcdef -No match - -/(a(?i)b)c/ - abc - 0: abc - 1: ab - aBc - 0: aBc - 1: aB -\= Expect no match - abC -No match - aBC -No match - Abc -No match - ABc -No match - ABC -No match - AbC -No match - -/a(?i:b)c/ - abc - 0: abc - aBc - 0: aBc -\= Expect no match - ABC -No match - abC -No match - aBC -No match - -/a(?i:b)*c/ - aBc - 0: aBc - aBBc - 0: aBBc -\= Expect no match - aBC -No match - aBBC -No match - -/a(?=b(?i)c)\w\wd/ - abcd - 0: abcd - abCd - 0: abCd -\= Expect no match - aBCd -No match - abcD -No match - -/(?s-i:more.*than).*million/i - more than million - 0: more than million - more than MILLION - 0: more than MILLION - more \n than Million - 0: more \x0a than Million -\= Expect no match - MORE THAN MILLION -No match - more \n than \n million -No match - -/(?:(?s-i)more.*than).*million/i - more than million - 0: more than million - more than MILLION - 0: more than MILLION - more \n than Million - 0: more \x0a than Million -\= Expect no match - MORE THAN MILLION -No match - more \n than \n million -No match - -/(?>a(?i)b+)+c/ - abc - 0: abc - aBbc - 0: aBbc - aBBc - 0: aBBc -\= Expect no match - Abc -No match - abAb -No match - abbC -No match - -/(?=a(?i)b)\w\wc/ - abc - 0: abc - aBc - 0: aBc -\= Expect no match - Ab -No match - abC -No match - aBC -No match - -/(?<=a(?i)b)(\w\w)c/ - abxxc - 0: xxc - 1: xx - aBxxc - 0: xxc - 1: xx -\= Expect no match - Abxxc -No match - ABxxc -No match - abxxC -No match - -/(?:(a)|b)(?(1)A|B)/ - aA - 0: aA - 1: a - bB - 0: bB -\= Expect no match - aB -No match - bA -No match - -/^(a)?(?(1)a|b)+$/ - aa - 0: aa - 1: a - b - 0: b - bb - 0: bb -\= Expect no match - ab -No match - -# Perl gets this next one wrong if the pattern ends with $; in that case it -# fails to match "12". - -/^(?(?=abc)\w{3}:|\d\d)/ - abc: - 0: abc: - 12 - 0: 12 - 123 - 0: 12 -\= Expect no match - xyz -No match - -/^(?(?!abc)\d\d|\w{3}:)$/ - abc: - 0: abc: - 12 - 0: 12 -\= Expect no match - 123 -No match - xyz -No match - -/(?(?<=foo)bar|cat)/ - foobar - 0: bar - cat - 0: cat - fcat - 0: cat - focat - 0: cat -\= Expect no match - foocat -No match - -/(?(?a*)*/ - a - 0: a - aa - 0: aa - aaaa - 0: aaaa - -/(abc|)+/ - abc - 0: abc - 1: - abcabc - 0: abcabc - 1: - abcabcabc - 0: abcabcabc - 1: - xyz - 0: - 1: - -/([a]*)*/ - a - 0: a - 1: - aaaaa - 0: aaaaa - 1: - -/([ab]*)*/ - a - 0: a - 1: - b - 0: b - 1: - ababab - 0: ababab - 1: - aaaabcde - 0: aaaab - 1: - bbbb - 0: bbbb - 1: - -/([^a]*)*/ - b - 0: b - 1: - bbbb - 0: bbbb - 1: - aaa - 0: - 1: - -/([^ab]*)*/ - cccc - 0: cccc - 1: - abab - 0: - 1: - -/([a]*?)*/ - a - 0: - 1: - aaaa - 0: - 1: - -/([ab]*?)*/ - a - 0: - 1: - b - 0: - 1: - abab - 0: - 1: - baba - 0: - 1: - -/([^a]*?)*/ - b - 0: - 1: - bbbb - 0: - 1: - aaa - 0: - 1: - -/([^ab]*?)*/ - c - 0: - 1: - cccc - 0: - 1: - baba - 0: - 1: - -/(?>a*)*/ - a - 0: a - aaabcde - 0: aaa - -/((?>a*))*/ - aaaaa - 0: aaaaa - 1: - aabbaa - 0: aa - 1: - -/((?>a*?))*/ - aaaaa - 0: - 1: - aabbaa - 0: - 1: - -/(?(?=[^a-z]+[a-z]) \d{2}-[a-z]{3}-\d{2} | \d{2}-\d{2}-\d{2} ) /x - 12-sep-98 - 0: 12-sep-98 - 12-09-98 - 0: 12-09-98 -\= Expect no match - sep-12-98 -No match - -/(?<=(foo))bar\1/ - foobarfoo - 0: barfoo - 1: foo - foobarfootling - 0: barfoo - 1: foo -\= Expect no match - foobar -No match - barfoo -No match - -/(?i:saturday|sunday)/ - saturday - 0: saturday - sunday - 0: sunday - Saturday - 0: Saturday - Sunday - 0: Sunday - SATURDAY - 0: SATURDAY - SUNDAY - 0: SUNDAY - SunDay - 0: SunDay - -/(a(?i)bc|BB)x/ - abcx - 0: abcx - 1: abc - aBCx - 0: aBCx - 1: aBC - bbx - 0: bbx - 1: bb - BBx - 0: BBx - 1: BB -\= Expect no match - abcX -No match - aBCX -No match - bbX -No match - BBX -No match - -/^([ab](?i)[cd]|[ef])/ - ac - 0: ac - 1: ac - aC - 0: aC - 1: aC - bD - 0: bD - 1: bD - elephant - 0: e - 1: e - Europe - 0: E - 1: E - frog - 0: f - 1: f - France - 0: F - 1: F -\= Expect no match - Africa -No match - -/^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)/ - ab - 0: ab - 1: ab - aBd - 0: aBd - 1: aBd - xy - 0: xy - 1: xy - xY - 0: xY - 1: xY - zebra - 0: z - 1: z - Zambesi - 0: Z - 1: Z -\= Expect no match - aCD -No match - XY -No match - -/(?<=foo\n)^bar/m - foo\nbar - 0: bar -\= Expect no match - bar -No match - baz\nbar -No match - -/(?<=(?]&/ - <&OUT - 0: <& - -/^(a\1?){4}$/ - aaaaaaaaaa - 0: aaaaaaaaaa - 1: aaaa -\= Expect no match - AB -No match - aaaaaaaaa -No match - aaaaaaaaaaa -No match - -/^(a(?(1)\1)){4}$/ - aaaaaaaaaa - 0: aaaaaaaaaa - 1: aaaa -\= Expect no match - aaaaaaaaa -No match - aaaaaaaaaaa -No match - -/(?:(f)(o)(o)|(b)(a)(r))*/ - foobar - 0: foobar - 1: f - 2: o - 3: o - 4: b - 5: a - 6: r - -/(?<=a)b/ - ab - 0: b -\= Expect no match - cb -No match - b -No match - -/(? - 2: abcd - xy:z:::abcd - 0: xy:z:::abcd - 1: xy:z::: - 2: abcd - -/^[^bcd]*(c+)/ - aexycd - 0: aexyc - 1: c - -/(a*)b+/ - caab - 0: aab - 1: aa - -/([\w:]+::)?(\w+)$/ - abcd - 0: abcd - 1: - 2: abcd - xy:z:::abcd - 0: xy:z:::abcd - 1: xy:z::: - 2: abcd -\= Expect no match - abcd: -No match - abcd: -No match - -/^[^bcd]*(c+)/ - aexycd - 0: aexyc - 1: c - -/(>a+)ab/ - -/(?>a+)b/ - aaab - 0: aaab - -/([[:]+)/ - a:[b]: - 0: :[ - 1: :[ - -/([[=]+)/ - a=[b]= - 0: =[ - 1: =[ - -/([[.]+)/ - a.[b]. - 0: .[ - 1: .[ - -/((?>a+)b)/ - aaab - 0: aaab - 1: aaab - -/(?>(a+))b/ - aaab - 0: aaab - 1: aaa - -/((?>[^()]+)|\([^()]*\))+/ - ((abc(ade)ufh()()x - 0: abc(ade)ufh()()x - 1: x - -/a\Z/ -\= Expect no match - aaab -No match - a\nb\n -No match - -/b\Z/ - a\nb\n - 0: b - -/b\z/ - -/b\Z/ - a\nb - 0: b - -/b\z/ - a\nb - 0: b - -/^(?>(?(1)\.|())[^\W_](?>[a-z0-9-]*[^\W_])?)+$/ - a - 0: a - 1: - abc - 0: abc - 1: - a-b - 0: a-b - 1: - 0-9 - 0: 0-9 - 1: - a.b - 0: a.b - 1: - 5.6.7 - 0: 5.6.7 - 1: - the.quick.brown.fox - 0: the.quick.brown.fox - 1: - a100.b200.300c - 0: a100.b200.300c - 1: - 12-ab.1245 - 0: 12-ab.1245 - 1: -\= Expect no match - \ -No match - .a -No match - -a -No match - a- -No match - a. -No match - a_b -No match - a.- -No match - a.. -No match - ab..bc -No match - the.quick.brown.fox- -No match - the.quick.brown.fox. -No match - the.quick.brown.fox_ -No match - the.quick.brown.fox+ -No match - -/(?>.*)(?<=(abcd|wxyz))/ - alphabetabcd - 0: alphabetabcd - 1: abcd - endingwxyz - 0: endingwxyz - 1: wxyz -\= Expect no match - a rather long string that doesn't end with one of them -No match - -/word (?>(?:(?!otherword)[a-zA-Z0-9]+ ){0,30})otherword/ - word cat dog elephant mussel cow horse canary baboon snake shark otherword - 0: word cat dog elephant mussel cow horse canary baboon snake shark otherword -\= Expect no match - word cat dog elephant mussel cow horse canary baboon snake shark -No match - -/word (?>[a-zA-Z0-9]+ ){0,30}otherword/ -\= Expect no match - word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope -No match - -/(?<=\d{3}(?!999))foo/ - 999foo - 0: foo - 123999foo - 0: foo -\= Expect no match - 123abcfoo -No match - -/(?<=(?!...999)\d{3})foo/ - 999foo - 0: foo - 123999foo - 0: foo -\= Expect no match - 123abcfoo -No match - -/(?<=\d{3}(?!999)...)foo/ - 123abcfoo - 0: foo - 123456foo - 0: foo -\= Expect no match - 123999foo -No match - -/(?<=\d{3}...)(? - 2: - 3: abcd -
- 2: - 3: abcd - \s*)=(?>\s*) # find - 2: - 3: abcd - Z)+|A)*/ - ZABCDEFG - 0: ZA - 1: A - -/((?>)+|A)*/ - ZABCDEFG - 0: - 1: - -/^[\d-a]/ - abcde - 0: a - -things - 0: - - 0digit - 0: 0 -\= Expect no match - bcdef -No match - -/[\s]+/ - > \x09\x0a\x0c\x0d\x0b< - 0: \x09\x0a\x0c\x0d\x0b - -/\s+/ - > \x09\x0a\x0c\x0d\x0b< - 0: \x09\x0a\x0c\x0d\x0b - -/a b/x - ab - 0: ab - -/(?!\A)x/m - a\nxb\n - 0: x - -/(?!^)x/m -\= Expect no match - a\nxb\n -No match - -#/abc\Qabc\Eabc/ -# abcabcabc -# 0: abcabcabc - -#/abc\Q(*+|\Eabc/ -# abc(*+|abc -# 0: abc(*+|abc - -#/ abc\Q abc\Eabc/x -# abc abcabc -# 0: abc abcabc -#\= Expect no match -# abcabcabc -#No match - -#/abc#comment -# \Q#not comment -# literal\E/x -# abc#not comment\n literal -# 0: abc#not comment\x0a literal - -#/abc#comment -# \Q#not comment -# literal/x -# abc#not comment\n literal -# 0: abc#not comment\x0a literal - -#/abc#comment -# \Q#not comment -# literal\E #more comment -# /x -# abc#not comment\n literal -# 0: abc#not comment\x0a literal - -#/abc#comment -# \Q#not comment -# literal\E #more comment/x -# abc#not comment\n literal -# 0: abc#not comment\x0a literal - -#/\Qabc\$xyz\E/ -# abc\\\$xyz -# 0: abc\$xyz - -#/\Qabc\E\$\Qxyz\E/ -# abc\$xyz -# 0: abc$xyz - -/\Gabc/ - abc - 0: abc -\= Expect no match - xyzabc -No match - -/a(?x: b c )d/ - XabcdY - 0: abcd -\= Expect no match - Xa b c d Y -No match - -/((?x)x y z | a b c)/ - XabcY - 0: abc - 1: abc - AxyzB - 0: xyz - 1: xyz - -/(?i)AB(?-i)C/ - XabCY - 0: abC -\= Expect no match - XabcY -No match - -/((?i)AB(?-i)C|D)E/ - abCE - 0: abCE - 1: abC - DE - 0: DE - 1: D -\= Expect no match - abcE -No match - abCe -No match - dE -No match - De -No match - -/(.*)\d+\1/ - abc123abc - 0: abc123abc - 1: abc - abc123bc - 0: bc123bc - 1: bc - -/(.*)\d+\1/s - abc123abc - 0: abc123abc - 1: abc - abc123bc - 0: bc123bc - 1: bc - -/((.*))\d+\1/ - abc123abc - 0: abc123abc - 1: abc - 2: abc - abc123bc - 0: bc123bc - 1: bc - 2: bc - -# This tests for an IPv6 address in the form where it can have up to -# eight components, one and only one of which is empty. This must be -# an internal component. - -/^(?!:) # colon disallowed at start - (?: # start of item - (?: [0-9a-f]{1,4} | # 1-4 hex digits or - (?(1)0 | () ) ) # if null previously matched, fail; else null - : # followed by colon - ){1,7} # end item; 1-7 of them required - [0-9a-f]{1,4} $ # final hex number at end of string - (?(1)|.) # check that there was an empty component - /ix - a123::a123 - 0: a123::a123 - 1: - a123:b342::abcd - 0: a123:b342::abcd - 1: - a123:b342::324e:abcd - 0: a123:b342::324e:abcd - 1: - a123:ddde:b342::324e:abcd - 0: a123:ddde:b342::324e:abcd - 1: - a123:ddde:b342::324e:dcba:abcd - 0: a123:ddde:b342::324e:dcba:abcd - 1: - a123:ddde:9999:b342::324e:dcba:abcd - 0: a123:ddde:9999:b342::324e:dcba:abcd - 1: -\= Expect no match - 1:2:3:4:5:6:7:8 -No match - a123:bce:ddde:9999:b342::324e:dcba:abcd -No match - a123::9999:b342::324e:dcba:abcd -No match - abcde:2:3:4:5:6:7:8 -No match - ::1 -No match - abcd:fee0:123:: -No match - :1 -No match - 1: -No match - -#/[z\Qa-d]\E]/ -# z -# 0: z -# a -# 0: a -# - -# 0: - -# d -# 0: d -# ] -# 0: ] -#\= Expect no match -# b -#No match - -#TODO: PCRE has an optimization to make this workable, .NET does not -#/(a+)*b/ -#\= Expect no match -# aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -#No match - -# All these had to be updated because we understand unicode -# and this looks like it's expecting single byte matches - -# .NET generates \xe4...not sure what's up, might just be different code pages -/(?i)reg(?:ul(?:[aä]|ae)r|ex)/ - REGular - 0: REGular - regulaer - 0: regulaer - Regex - 0: Regex - regulär - 0: regul\xc3\xa4r - -#/Åæåä[à-ÿÀ-ß]+/ -# Åæåäà -# 0: \xc5\xe6\xe5\xe4\xe0 -# Åæåäÿ -# 0: \xc5\xe6\xe5\xe4\xff -# ÅæåäÀ -# 0: \xc5\xe6\xe5\xe4\xc0 -# Åæåäß -# 0: \xc5\xe6\xe5\xe4\xdf - -/(?<=Z)X./ - \x84XAZXB - 0: XB - -/ab cd (?x) de fg/ - ab cd defg - 0: ab cd defg - -/ab cd(?x) de fg/ - ab cddefg - 0: ab cddefg -\= Expect no match - abcddefg -No match - -/(? - 2: - D - 0: D - 1: - 2: - -# this is really long with debug -- removing for now -#/(a|)*\d/ -# aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4 -# 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4 -# 1: -#\= Expect no match -# aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -#No match - -/(?>a|)*\d/ - aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4 - 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4 -\= Expect no match - aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -No match - -/(?:a|)*\d/ - aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4 - 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4 -\= Expect no match - aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -No match - -/^(?s)(?>.*)(? - 2: a - -/(?>(a))b|(a)c/ - ac - 0: ac - 1: - 2: a - -/(?=(a))ab|(a)c/ - ac - 0: ac - 1: - 2: a - -/((?>(a))b|(a)c)/ - ac - 0: ac - 1: ac - 2: - 3: a - -/(?=(?>(a))b|(a)c)(..)/ - ac - 0: ac - 1: - 2: a - 3: ac - -/(?>(?>(a))b|(a)c)/ - ac - 0: ac - 1: - 2: a - -/((?>(a+)b)+(aabab))/ - aaaabaaabaabab - 0: aaaabaaabaabab - 1: aaaabaaabaabab - 2: aaa - 3: aabab - -/(?>a+|ab)+?c/ -\= Expect no match - aabc -No match - -/(?>a+|ab)+c/ -\= Expect no match - aabc -No match - -/(?:a+|ab)+c/ - aabc - 0: aabc - -/^(?:a|ab)+c/ - aaaabc - 0: aaaabc - -/(?=abc){0}xyz/ - xyz - 0: xyz - -/(?=abc){1}xyz/ -\= Expect no match - xyz -No match - -/(?=(a))?./ - ab - 0: a - 1: a - bc - 0: b - -/(?=(a))??./ - ab - 0: a - bc - 0: b - -/^(?!a){0}\w+/ - aaaaa - 0: aaaaa - -/(?<=(abc))?xyz/ - abcxyz - 0: xyz - 1: abc - pqrxyz - 0: xyz - -/^[g]+/ - ggg<<>> - 0: ggg<<>> -\= Expect no match - \\ga -No match - -/^[ga]+/ - gggagagaxyz - 0: gggagaga - -/[:a]xxx[b:]/ - :xxx: - 0: :xxx: - -/(?<=a{2})b/i - xaabc - 0: b -\= Expect no match - xabc -No match - -/(? -# 4: -# 5: c -# 6: d -# 7: Y - -#/^X(?7)(a)(?|(b|(?|(r)|(t))(s))|(q))(c)(d)(Y)/ -# XYabcdY -# 0: XYabcdY -# 1: a -# 2: b -# 3: -# 4: -# 5: c -# 6: d -# 7: Y - -/(?'abc'\w+):\k{2}/ - a:aaxyz - 0: a:aa - 1: a - ab:ababxyz - 0: ab:abab - 1: ab -\= Expect no match - a:axyz -No match - ab:abxyz -No match - -/^(?a)? (?(ab)b|c) (?(ab)d|e)/x - abd - 0: abd - 1: a - ce - 0: ce - -# .NET has more consistent grouping numbers with these dupe groups for the two options -/(?:a(? (?')|(?")) |b(? (?')|(?")) ) (?(quote)[a-z]+|[0-9]+)/x,dupnames - a\"aaaaa - 0: a"aaaaa - 1: " - 2: - 3: " - b\"aaaaa - 0: b"aaaaa - 1: " - 2: - 3: " -\= Expect no match - b\"11111 -No match - -#/(?P(?P0)(?P>L1)|(?P>L2))/ -# 0 -# 0: 0 -# 1: 0 -# 00 -# 0: 00 -# 1: 00 -# 2: 0 -# 0000 -# 0: 0000 -# 1: 0000 -# 2: 0 - -#/(?P(?P0)|(?P>L2)(?P>L1))/ -# 0 -# 0: 0 -# 1: 0 -# 2: 0 -# 00 -# 0: 0 -# 1: 0 -# 2: 0 -# 0000 -# 0: 0 -# 1: 0 -# 2: 0 - -# Check the use of names for failure - -# Check opening parens in comment when seeking forward reference. - -#/(?P(?P=abn)xxx|)+/ -# xxx -# 0: -# 1: - -#Posses -/^(a)?(\w)/ - aaaaX - 0: aa - 1: a - 2: a - YZ - 0: Y - 1: - 2: Y - -#Posses -/^(?:a)?(\w)/ - aaaaX - 0: aa - 1: a - YZ - 0: Y - 1: Y - -/\A.*?(a|bc)/ - ba - 0: ba - 1: a - -/\A.*?(?:a|bc|d)/ - ba - 0: ba - -# -------------------------- - -/(another)?(\1?)test/ - hello world test - 0: test - 1: - 2: - -/(another)?(\1+)test/ -\= Expect no match - hello world test -No match - -/((?:a?)*)*c/ - aac - 0: aac - 1: - -/((?>a?)*)*c/ - aac - 0: aac - 1: - -/(?>.*?a)(?<=ba)/ - aba - 0: ba - -/(?:.*?a)(?<=ba)/ - aba - 0: aba - -/(?>.*?a)b/s - aab - 0: ab - -/(?>.*?a)b/ - aab - 0: ab - -/(?>^a)b/s -\= Expect no match - aab -No match - -/(?>.*?)(?<=(abcd)|(wxyz))/ - alphabetabcd - 0: - 1: abcd - endingwxyz - 0: - 1: - 2: wxyz - -/(?>.*)(?<=(abcd)|(wxyz))/ - alphabetabcd - 0: alphabetabcd - 1: abcd - endingwxyz - 0: endingwxyz - 1: - 2: wxyz - -"(?>.*)foo" -\= Expect no match - abcdfooxyz -No match - -"(?>.*?)foo" - abcdfooxyz - 0: foo - -# Tests that try to figure out how Perl works. My hypothesis is that the first -# verb that is backtracked onto is the one that acts. This seems to be the case -# almost all the time, but there is one exception that is perhaps a bug. - -/a(?=bc).|abd/ - abd - 0: abd - abc - 0: ab - -/a(?>bc)d|abd/ - abceabd - 0: abd - -# These tests were formerly in test 2, but changes in PCRE and Perl have -# made them compatible. - -/^(a)?(?(1)a|b)+$/ -\= Expect no match - a -No match - -# ---- - -/^\d*\w{4}/ - 1234 - 0: 1234 -\= Expect no match - 123 -No match - -/^[^b]*\w{4}/ - aaaa - 0: aaaa -\= Expect no match - aaa -No match - -/^[^b]*\w{4}/i - aaaa - 0: aaaa -\= Expect no match - aaa -No match - -/^a*\w{4}/ - aaaa - 0: aaaa -\= Expect no match - aaa -No match - -/^a*\w{4}/i - aaaa - 0: aaaa -\= Expect no match - aaa -No match - -/(?:(?foo)|(?bar))\k/dupnames - foofoo - 0: foofoo - 1: foo - barbar - 0: barbar - 1: bar - -# A notable difference between PCRE and .NET. According to -# the PCRE docs: -# If you make a subroutine call to a non-unique named -# subpattern, the one that corresponds to the first -# occurrence of the name is used. In the absence of -# duplicate numbers (see the previous section) this is -# the one with the lowest number. -# .NET takes the most recently captured number according to MSDN: -# A backreference refers to the most recent definition of -# a group (the definition most immediately to the left, -# when matching left to right). When a group makes multiple -# captures, a backreference refers to the most recent capture. - -#/(?A)(?:(?foo)|(?bar))\k/dupnames -# AfooA -# 0: AfooA -# 1: A -# 2: foo -# AbarA -# 0: AbarA -# 1: A -# 2: -# 3: bar -#\= Expect no match -# Afoofoo -#No match -# Abarbar -#No match - -/^(\d+)\s+IN\s+SOA\s+(\S+)\s+(\S+)\s*\(\s*$/ - 1 IN SOA non-sp1 non-sp2( - 0: 1 IN SOA non-sp1 non-sp2( - 1: 1 - 2: non-sp1 - 3: non-sp2 - -# TODO: .NET's group number ordering here in the second example is a bit odd -/^ (?:(?A)|(?'B'B)(?A)) (?(A)x) (?(B)y)$/x,dupnames - Ax - 0: Ax - 1: A - BAxy - 0: BAxy - 1: A - 2: B - -/ ^ a + b $ /x - aaaab - 0: aaaab - -/ ^ a + #comment - b $ /x - aaaab - 0: aaaab - -/ ^ a + #comment - #comment - b $ /x - aaaab - 0: aaaab - -/ ^ (?> a + ) b $ /x - aaaab - 0: aaaab - -/ ^ ( a + ) + \w $ /x - aaaab - 0: aaaab - 1: aaaa - -/(?:x|(?:(xx|yy)+|x|x|x|x|x)|a|a|a)bc/ -\= Expect no match - acb -No match - -#Posses -#/\A(?:[^\"]+|\"(?:[^\"]*|\"\")*\")+/ -# NON QUOTED \"QUOT\"\"ED\" AFTER \"NOT MATCHED -# 0: NON QUOTED "QUOT""ED" AFTER - -#Posses -#/\A(?:[^\"]+|\"(?:[^\"]+|\"\")*\")+/ -# NON QUOTED \"QUOT\"\"ED\" AFTER \"NOT MATCHED -# 0: NON QUOTED "QUOT""ED" AFTER - -#Posses -#/\A(?:[^\"]+|\"(?:[^\"]+|\"\")+\")+/ -# NON QUOTED \"QUOT\"\"ED\" AFTER \"NOT MATCHED -# 0: NON QUOTED "QUOT""ED" AFTER - -#Posses -#/\A([^\"1]+|[\"2]([^\"3]*|[\"4][\"5])*[\"6])+/ -# NON QUOTED \"QUOT\"\"ED\" AFTER \"NOT MATCHED -# 0: NON QUOTED "QUOT""ED" AFTER -# 1: AFTER -# 2: - -/^\w+(?>\s*)(?<=\w)/ - test test - 0: tes - -#/(?Pa)?(?Pb)?(?()c|d)*l/ -# acl -# 0: acl -# 1: a -# bdl -# 0: bdl -# 1: -# 2: b -# adl -# 0: dl -# bcl -# 0: l - -/\sabc/ - \x0babc - 0: \x0babc - -#/[\Qa]\E]+/ -# aa]] -# 0: aa]] - -#/[\Q]a\E]+/ -# aa]] -# 0: aa]] - -/A((((((((a))))))))\8B/ - AaaB - 0: AaaB - 1: a - 2: a - 3: a - 4: a - 5: a - 6: a - 7: a - 8: a - -/A(((((((((a)))))))))\9B/ - AaaB - 0: AaaB - 1: a - 2: a - 3: a - 4: a - 5: a - 6: a - 7: a - 8: a - 9: a - -/(|ab)*?d/ - abd - 0: abd - 1: ab - xyd - 0: d - -/(\2|a)(\1)/ - aaa - 0: aa - 1: a - 2: a - -/(\2)(\1)/ - -"Z*(|d*){216}" - -/((((((((((((x))))))))))))\12/ - xx - 0: xx - 1: x - 2: x - 3: x - 4: x - 5: x - 6: x - 7: x - 8: x - 9: x -10: x -11: x -12: x - -#"(?|(\k'Pm')|(?'Pm'))" -# abcd -# 0: -# 1: - -#/(?|(aaa)|(b))\g{1}/ -# aaaaaa -# 0: aaaaaa -# 1: aaa -# bb -# 0: bb -# 1: b - -#/(?|(aaa)|(b))(?1)/ -# aaaaaa -# 0: aaaaaa -# 1: aaa -# baaa -# 0: baaa -# 1: b -#\= Expect no match -# bb -#No match - -#/(?|(aaa)|(b))/ -# xaaa -# 0: aaa -# 1: aaa -# xbc -# 0: b -# 1: b - -#/(?|(?'a'aaa)|(?'a'b))\k'a'/ -# aaaaaa -# 0: aaaaaa -# 1: aaa -# bb -# 0: bb -# 1: b - -#/(?|(?'a'aaa)|(?'a'b))(?'a'cccc)\k'a'/dupnames -# aaaccccaaa -# 0: aaaccccaaa -# 1: aaa -# 2: cccc -# bccccb -# 0: bccccb -# 1: b -# 2: cccc - -# End of testinput1 diff --git a/vendor/github.com/go-sql-driver/mysql/.gitignore b/vendor/github.com/go-sql-driver/mysql/.gitignore deleted file mode 100644 index 2de28da..0000000 --- a/vendor/github.com/go-sql-driver/mysql/.gitignore +++ /dev/null @@ -1,9 +0,0 @@ -.DS_Store -.DS_Store? -._* -.Spotlight-V100 -.Trashes -Icon? -ehthumbs.db -Thumbs.db -.idea diff --git a/vendor/github.com/go-sql-driver/mysql/.travis.yml b/vendor/github.com/go-sql-driver/mysql/.travis.yml deleted file mode 100644 index cc1268c..0000000 --- a/vendor/github.com/go-sql-driver/mysql/.travis.yml +++ /dev/null @@ -1,107 +0,0 @@ -sudo: false -language: go -go: - - 1.7.x - - 1.8.x - - 1.9.x - - 1.10.x - - master - -before_install: - - go get golang.org/x/tools/cmd/cover - - go get github.com/mattn/goveralls - -before_script: - - echo -e "[server]\ninnodb_log_file_size=256MB\ninnodb_buffer_pool_size=512MB\nmax_allowed_packet=16MB" | sudo tee -a /etc/mysql/my.cnf - - sudo service mysql restart - - .travis/wait_mysql.sh - - mysql -e 'create database gotest;' - -matrix: - include: - - env: DB=MYSQL8 - sudo: required - dist: trusty - go: 1.10.x - services: - - docker - before_install: - - go get golang.org/x/tools/cmd/cover - - go get github.com/mattn/goveralls - - docker pull mysql:8.0 - - docker run -d -p 127.0.0.1:3307:3306 --name mysqld -e MYSQL_DATABASE=gotest -e MYSQL_USER=gotest -e MYSQL_PASSWORD=secret -e MYSQL_ROOT_PASSWORD=verysecret - mysql:8.0 --innodb_log_file_size=256MB --innodb_buffer_pool_size=512MB --max_allowed_packet=16MB --local-infile=1 - - cp .travis/docker.cnf ~/.my.cnf - - .travis/wait_mysql.sh - before_script: - - export MYSQL_TEST_USER=gotest - - export MYSQL_TEST_PASS=secret - - export MYSQL_TEST_ADDR=127.0.0.1:3307 - - export MYSQL_TEST_CONCURRENT=1 - - - env: DB=MYSQL57 - sudo: required - dist: trusty - go: 1.10.x - services: - - docker - before_install: - - go get golang.org/x/tools/cmd/cover - - go get github.com/mattn/goveralls - - docker pull mysql:5.7 - - docker run -d -p 127.0.0.1:3307:3306 --name mysqld -e MYSQL_DATABASE=gotest -e MYSQL_USER=gotest -e MYSQL_PASSWORD=secret -e MYSQL_ROOT_PASSWORD=verysecret - mysql:5.7 --innodb_log_file_size=256MB --innodb_buffer_pool_size=512MB --max_allowed_packet=16MB --local-infile=1 - - cp .travis/docker.cnf ~/.my.cnf - - .travis/wait_mysql.sh - before_script: - - export MYSQL_TEST_USER=gotest - - export MYSQL_TEST_PASS=secret - - export MYSQL_TEST_ADDR=127.0.0.1:3307 - - export MYSQL_TEST_CONCURRENT=1 - - - env: DB=MARIA55 - sudo: required - dist: trusty - go: 1.10.x - services: - - docker - before_install: - - go get golang.org/x/tools/cmd/cover - - go get github.com/mattn/goveralls - - docker pull mariadb:5.5 - - docker run -d -p 127.0.0.1:3307:3306 --name mysqld -e MYSQL_DATABASE=gotest -e MYSQL_USER=gotest -e MYSQL_PASSWORD=secret -e MYSQL_ROOT_PASSWORD=verysecret - mariadb:5.5 --innodb_log_file_size=256MB --innodb_buffer_pool_size=512MB --max_allowed_packet=16MB --local-infile=1 - - cp .travis/docker.cnf ~/.my.cnf - - .travis/wait_mysql.sh - before_script: - - export MYSQL_TEST_USER=gotest - - export MYSQL_TEST_PASS=secret - - export MYSQL_TEST_ADDR=127.0.0.1:3307 - - export MYSQL_TEST_CONCURRENT=1 - - - env: DB=MARIA10_1 - sudo: required - dist: trusty - go: 1.10.x - services: - - docker - before_install: - - go get golang.org/x/tools/cmd/cover - - go get github.com/mattn/goveralls - - docker pull mariadb:10.1 - - docker run -d -p 127.0.0.1:3307:3306 --name mysqld -e MYSQL_DATABASE=gotest -e MYSQL_USER=gotest -e MYSQL_PASSWORD=secret -e MYSQL_ROOT_PASSWORD=verysecret - mariadb:10.1 --innodb_log_file_size=256MB --innodb_buffer_pool_size=512MB --max_allowed_packet=16MB --local-infile=1 - - cp .travis/docker.cnf ~/.my.cnf - - .travis/wait_mysql.sh - before_script: - - export MYSQL_TEST_USER=gotest - - export MYSQL_TEST_PASS=secret - - export MYSQL_TEST_ADDR=127.0.0.1:3307 - - export MYSQL_TEST_CONCURRENT=1 - -script: - - go test -v -covermode=count -coverprofile=coverage.out - - go vet ./... - - .travis/gofmt.sh -after_script: - - $HOME/gopath/bin/goveralls -coverprofile=coverage.out -service=travis-ci 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 73ff68f..0000000 --- a/vendor/github.com/go-sql-driver/mysql/AUTHORS +++ /dev/null @@ -1,89 +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 -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 -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. 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 ce1b533..0000000 --- a/vendor/github.com/go-sql-driver/mysql/CHANGELOG.md +++ /dev/null @@ -1,178 +0,0 @@ -## Version 1.4.1 (2018-11-14) - -Bugfixes: - - - Fix TIME format for binary columns (#818) - - Fix handling of empty auth plugin names (#835) - - Fix caching_sha2_password with empty password (#826) - - Fix canceled context broke mysqlConn (#862) - - Fix OldAuthSwitchRequest support (#870) - - Fix Auth Response packet for cleartext password (#887) - -## 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 8fe16bc..0000000 --- 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 14e2f77..0000000 --- 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 2e9b07e..0000000 --- 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.7 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, -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). Use a custom value registered 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 be41f2e..0000000 --- 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 14f678a..0000000 --- a/vendor/github.com/go-sql-driver/mysql/auth.go +++ /dev/null @@ -1,420 +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 := mc.buf.takeSmallBuffer(4 + 1) - data[4] = cachingSha2PasswordRequestPublicKey - mc.writePacket(data) - - // parse public key - data, err := mc.readPacket() - if 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 eb4748b..0000000 --- a/vendor/github.com/go-sql-driver/mysql/buffer.go +++ /dev/null @@ -1,147 +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 - nc net.Conn - idx int - length int - timeout time.Duration -} - -func newBuffer(nc net.Conn) buffer { - var b [defaultBufSize]byte - return buffer{ - buf: b[:], - 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 -} - -// 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 { - if b.length > 0 { - return nil - } - - // test (cheap) general case first - if length <= defaultBufSize || length <= cap(b.buf) { - return b.buf[:length] - } - - if length < maxPacketSize { - b.buf = make([]byte, length) - return b.buf - } - return make([]byte, length) -} - -// shortcut which can be used if the requested buffer is guaranteed to be -// smaller than defaultBufSize -// Only one buffer (total) can be used at a time. -func (b *buffer) takeSmallBuffer(length int) []byte { - if b.length > 0 { - return nil - } - return b.buf[:length] -} - -// takeCompleteBuffer returns the complete existing buffer. -// This can be used if the necessary buffer size is unknown. -// Only one buffer (total) can be used at a time. -func (b *buffer) takeCompleteBuffer() []byte { - if b.length > 0 { - return nil - } - return b.buf -} 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 136c9e4..0000000 --- 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 e570614..0000000 --- a/vendor/github.com/go-sql-driver/mysql/connection.go +++ /dev/null @@ -1,461 +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" - "net" - "strconv" - "strings" - "time" -) - -// a copy of context.Context for Go 1.7 and earlier -type mysqlContext interface { - Done() <-chan struct{} - Err() error - - // defined in context.Context, but not used in this driver: - // Deadline() (deadline time.Time, ok bool) - // Value(key interface{}) interface{} -} - -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<- mysqlContext - 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 := mc.buf.takeCompleteBuffer() - if buf == nil { - // can not take the buffer. Something must be wrong with the connection - errLog.Print(ErrBusyBuffer) - 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: - } -} diff --git a/vendor/github.com/go-sql-driver/mysql/connection_go18.go b/vendor/github.com/go-sql-driver/mysql/connection_go18.go deleted file mode 100644 index ce52c7d..0000000 --- a/vendor/github.com/go-sql-driver/mysql/connection_go18.go +++ /dev/null @@ -1,207 +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/. - -// +build go1.8 - -package mysql - -import ( - "context" - "database/sql" - "database/sql/driver" -) - -// 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 - } - - 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 mysqlContext, 1) - mc.watcher = watcher - finished := make(chan struct{}) - mc.finished = finished - go func() { - for { - var ctx mysqlContext - 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 b1e6b85..0000000 --- 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 e9ede2c..0000000 --- a/vendor/github.com/go-sql-driver/mysql/driver.go +++ /dev/null @@ -1,172 +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" -) - -// watcher interface is used for context support (From Go 1.8) -type watcher interface { - startWatcher() -} - -// 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 formated -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 { - 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) - if s, ok := interface{}(mc).(watcher); ok { - s.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 be014ba..0000000 --- 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" { - 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 760782f..0000000 --- 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 e1e2ece..0000000 --- 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 273cb0b..0000000 --- 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 9ed6408..0000000 --- a/vendor/github.com/go-sql-driver/mysql/packets.go +++ /dev/null @@ -1,1286 +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 { - 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 := mc.buf.takeSmallBuffer(pktLen + 4) - if data == nil { - // cannot take the buffer. Something must be wrong with the connection - errLog.Print(ErrBusyBuffer) - 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 := mc.buf.takeSmallBuffer(pktLen) - if data == nil { - // cannot take the buffer. Something must be wrong with the connection - errLog.Print(ErrBusyBuffer) - 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 := mc.buf.takeSmallBuffer(4 + 1) - if data == nil { - // cannot take the buffer. Something must be wrong with the connection - errLog.Print(ErrBusyBuffer) - 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 := mc.buf.takeBuffer(pktLen + 4) - if data == nil { - // cannot take the buffer. Something must be wrong with the connection - errLog.Print(ErrBusyBuffer) - 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 := mc.buf.takeSmallBuffer(4 + 1 + 4) - if data == nil { - // cannot take the buffer. Something must be wrong with the connection - errLog.Print(ErrBusyBuffer) - 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 threshould 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 - - if len(args) == 0 { - data = mc.buf.takeBuffer(minPktLen) - } else { - data = mc.buf.takeCompleteBuffer() - } - if data == nil { - // cannot take the buffer. Something must be wrong with the connection - errLog.Print(ErrBusyBuffer) - 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 >= len(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] - pos += maskLen - } else { - nullMask = data[pos : pos+maskLen] - for i := 0; i < maskLen; i++ { - 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...) - mc.buf.buf = data - } - - 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 c6438d0..0000000 --- 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 d3b1e28..0000000 --- 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 ce7fe4c..0000000 --- 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 417d727..0000000 --- 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 ca5d47d..0000000 --- a/vendor/github.com/go-sql-driver/mysql/utils.go +++ /dev/null @@ -1,726 +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/driver" - "encoding/binary" - "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 = cloneTLSConfig(v) - } - 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 -} diff --git a/vendor/github.com/go-sql-driver/mysql/utils_go17.go b/vendor/github.com/go-sql-driver/mysql/utils_go17.go deleted file mode 100644 index f595634..0000000 --- a/vendor/github.com/go-sql-driver/mysql/utils_go17.go +++ /dev/null @@ -1,40 +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/. - -// +build go1.7 -// +build !go1.8 - -package mysql - -import "crypto/tls" - -func cloneTLSConfig(c *tls.Config) *tls.Config { - return &tls.Config{ - Rand: c.Rand, - Time: c.Time, - Certificates: c.Certificates, - NameToCertificate: c.NameToCertificate, - GetCertificate: c.GetCertificate, - RootCAs: c.RootCAs, - NextProtos: c.NextProtos, - ServerName: c.ServerName, - ClientAuth: c.ClientAuth, - ClientCAs: c.ClientCAs, - InsecureSkipVerify: c.InsecureSkipVerify, - CipherSuites: c.CipherSuites, - PreferServerCipherSuites: c.PreferServerCipherSuites, - SessionTicketsDisabled: c.SessionTicketsDisabled, - SessionTicketKey: c.SessionTicketKey, - ClientSessionCache: c.ClientSessionCache, - MinVersion: c.MinVersion, - MaxVersion: c.MaxVersion, - CurvePreferences: c.CurvePreferences, - DynamicRecordSizingDisabled: c.DynamicRecordSizingDisabled, - Renegotiation: c.Renegotiation, - } -} diff --git a/vendor/github.com/go-sql-driver/mysql/utils_go18.go b/vendor/github.com/go-sql-driver/mysql/utils_go18.go deleted file mode 100644 index c35c2a6..0000000 --- a/vendor/github.com/go-sql-driver/mysql/utils_go18.go +++ /dev/null @@ -1,50 +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/. - -// +build go1.8 - -package mysql - -import ( - "crypto/tls" - "database/sql" - "database/sql/driver" - "errors" - "fmt" -) - -func cloneTLSConfig(c *tls.Config) *tls.Config { - return c.Clone() -} - -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/jmoiron/sqlx/.gitignore b/vendor/github.com/jmoiron/sqlx/.gitignore deleted file mode 100644 index 529841c..0000000 --- a/vendor/github.com/jmoiron/sqlx/.gitignore +++ /dev/null @@ -1,24 +0,0 @@ -# Compiled Object files, Static and Dynamic libs (Shared Objects) -*.o -*.a -*.so - -# Folders -_obj -_test - -# Architecture specific extensions/prefixes -*.[568vq] -[568vq].out - -*.cgo1.go -*.cgo2.c -_cgo_defun.c -_cgo_gotypes.go -_cgo_export.* - -_testmain.go - -*.exe -tags -environ diff --git a/vendor/github.com/jmoiron/sqlx/.travis.yml b/vendor/github.com/jmoiron/sqlx/.travis.yml deleted file mode 100644 index 6bc68d6..0000000 --- a/vendor/github.com/jmoiron/sqlx/.travis.yml +++ /dev/null @@ -1,27 +0,0 @@ -# vim: ft=yaml sw=2 ts=2 - -language: go - -# enable database services -services: - - mysql - - postgresql - -# create test database -before_install: - - mysql -e 'CREATE DATABASE IF NOT EXISTS sqlxtest;' - - psql -c 'create database sqlxtest;' -U postgres - - go get github.com/mattn/goveralls - - export SQLX_MYSQL_DSN="travis:@/sqlxtest?parseTime=true" - - export SQLX_POSTGRES_DSN="postgres://postgres:@localhost/sqlxtest?sslmode=disable" - - export SQLX_SQLITE_DSN="$HOME/sqlxtest.db" - -# go versions to test -go: - - "1.8" - - "1.9" - - "1.10.x" - -# run tests w/ coverage -script: - - travis_retry $GOPATH/bin/goveralls -service=travis-ci diff --git a/vendor/github.com/jmoiron/sqlx/LICENSE b/vendor/github.com/jmoiron/sqlx/LICENSE deleted file mode 100644 index 0d31edf..0000000 --- a/vendor/github.com/jmoiron/sqlx/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ - Copyright (c) 2013, Jason Moiron - - 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/jmoiron/sqlx/README.md b/vendor/github.com/jmoiron/sqlx/README.md deleted file mode 100644 index 8390343..0000000 --- a/vendor/github.com/jmoiron/sqlx/README.md +++ /dev/null @@ -1,187 +0,0 @@ -# sqlx - -[![Build Status](https://travis-ci.org/jmoiron/sqlx.svg?branch=master)](https://travis-ci.org/jmoiron/sqlx) [![Coverage Status](https://coveralls.io/repos/github/jmoiron/sqlx/badge.svg?branch=master)](https://coveralls.io/github/jmoiron/sqlx?branch=master) [![Godoc](http://img.shields.io/badge/godoc-reference-blue.svg?style=flat)](https://godoc.org/github.com/jmoiron/sqlx) [![license](http://img.shields.io/badge/license-MIT-red.svg?style=flat)](https://raw.githubusercontent.com/jmoiron/sqlx/master/LICENSE) - -sqlx is a library which provides a set of extensions on go's standard -`database/sql` library. The sqlx versions of `sql.DB`, `sql.TX`, `sql.Stmt`, -et al. all leave the underlying interfaces untouched, so that their interfaces -are a superset on the standard ones. This makes it relatively painless to -integrate existing codebases using database/sql with sqlx. - -Major additional concepts are: - -* Marshal rows into structs (with embedded struct support), maps, and slices -* Named parameter support including prepared statements -* `Get` and `Select` to go quickly from query to struct/slice - -In addition to the [godoc API documentation](http://godoc.org/github.com/jmoiron/sqlx), -there is also some [standard documentation](http://jmoiron.github.io/sqlx/) that -explains how to use `database/sql` along with sqlx. - -## Recent Changes - -* The [introduction](https://github.com/jmoiron/sqlx/pull/387) of `sql.ColumnType` sets the required minimum Go version to 1.8. - -* sqlx/types.JsonText has been renamed to JSONText to follow Go naming conventions. - -This breaks backwards compatibility, but it's in a way that is trivially fixable -(`s/JsonText/JSONText/g`). The `types` package is both experimental and not in -active development currently. - -* Using Go 1.6 and below with `types.JSONText` and `types.GzippedText` can be _potentially unsafe_, **especially** when used with common auto-scan sqlx idioms like `Select` and `Get`. See [golang bug #13905](https://github.com/golang/go/issues/13905). - -### Backwards Compatibility - -There is no Go1-like promise of absolute stability, but I take the issue seriously -and will maintain the library in a compatible state unless vital bugs prevent me -from doing so. Since [#59](https://github.com/jmoiron/sqlx/issues/59) and -[#60](https://github.com/jmoiron/sqlx/issues/60) necessitated breaking behavior, -a wider API cleanup was done at the time of fixing. It's possible this will happen -in future; if it does, a git tag will be provided for users requiring the old -behavior to continue to use it until such a time as they can migrate. - -## install - - go get github.com/jmoiron/sqlx - -## issues - -Row headers can be ambiguous (`SELECT 1 AS a, 2 AS a`), and the result of -`Columns()` does not fully qualify column names in queries like: - -```sql -SELECT a.id, a.name, b.id, b.name FROM foos AS a JOIN foos AS b ON a.parent = b.id; -``` - -making a struct or map destination ambiguous. Use `AS` in your queries -to give columns distinct names, `rows.Scan` to scan them manually, or -`SliceScan` to get a slice of results. - -## usage - -Below is an example which shows some common use cases for sqlx. Check -[sqlx_test.go](https://github.com/jmoiron/sqlx/blob/master/sqlx_test.go) for more -usage. - - -```go -package main - -import ( - "database/sql" - "fmt" - "log" - - _ "github.com/lib/pq" - "github.com/jmoiron/sqlx" -) - -var schema = ` -CREATE TABLE person ( - first_name text, - last_name text, - email text -); - -CREATE TABLE place ( - country text, - city text NULL, - telcode integer -)` - -type Person struct { - FirstName string `db:"first_name"` - LastName string `db:"last_name"` - Email string -} - -type Place struct { - Country string - City sql.NullString - TelCode int -} - -func main() { - // this Pings the database trying to connect, panics on error - // use sqlx.Open() for sql.Open() semantics - db, err := sqlx.Connect("postgres", "user=foo dbname=bar sslmode=disable") - if err != nil { - log.Fatalln(err) - } - - // exec the schema or fail; multi-statement Exec behavior varies between - // database drivers; pq will exec them all, sqlite3 won't, ymmv - db.MustExec(schema) - - tx := db.MustBegin() - tx.MustExec("INSERT INTO person (first_name, last_name, email) VALUES ($1, $2, $3)", "Jason", "Moiron", "jmoiron@jmoiron.net") - tx.MustExec("INSERT INTO person (first_name, last_name, email) VALUES ($1, $2, $3)", "John", "Doe", "johndoeDNE@gmail.net") - tx.MustExec("INSERT INTO place (country, city, telcode) VALUES ($1, $2, $3)", "United States", "New York", "1") - tx.MustExec("INSERT INTO place (country, telcode) VALUES ($1, $2)", "Hong Kong", "852") - tx.MustExec("INSERT INTO place (country, telcode) VALUES ($1, $2)", "Singapore", "65") - // Named queries can use structs, so if you have an existing struct (i.e. person := &Person{}) that you have populated, you can pass it in as &person - tx.NamedExec("INSERT INTO person (first_name, last_name, email) VALUES (:first_name, :last_name, :email)", &Person{"Jane", "Citizen", "jane.citzen@example.com"}) - tx.Commit() - - // Query the database, storing results in a []Person (wrapped in []interface{}) - people := []Person{} - db.Select(&people, "SELECT * FROM person ORDER BY first_name ASC") - jason, john := people[0], people[1] - - fmt.Printf("%#v\n%#v", jason, john) - // Person{FirstName:"Jason", LastName:"Moiron", Email:"jmoiron@jmoiron.net"} - // Person{FirstName:"John", LastName:"Doe", Email:"johndoeDNE@gmail.net"} - - // You can also get a single result, a la QueryRow - jason = Person{} - err = db.Get(&jason, "SELECT * FROM person WHERE first_name=$1", "Jason") - fmt.Printf("%#v\n", jason) - // Person{FirstName:"Jason", LastName:"Moiron", Email:"jmoiron@jmoiron.net"} - - // if you have null fields and use SELECT *, you must use sql.Null* in your struct - places := []Place{} - err = db.Select(&places, "SELECT * FROM place ORDER BY telcode ASC") - if err != nil { - fmt.Println(err) - return - } - usa, singsing, honkers := places[0], places[1], places[2] - - fmt.Printf("%#v\n%#v\n%#v\n", usa, singsing, honkers) - // Place{Country:"United States", City:sql.NullString{String:"New York", Valid:true}, TelCode:1} - // Place{Country:"Singapore", City:sql.NullString{String:"", Valid:false}, TelCode:65} - // Place{Country:"Hong Kong", City:sql.NullString{String:"", Valid:false}, TelCode:852} - - // Loop through rows using only one struct - place := Place{} - rows, err := db.Queryx("SELECT * FROM place") - for rows.Next() { - err := rows.StructScan(&place) - if err != nil { - log.Fatalln(err) - } - fmt.Printf("%#v\n", place) - } - // Place{Country:"United States", City:sql.NullString{String:"New York", Valid:true}, TelCode:1} - // Place{Country:"Hong Kong", City:sql.NullString{String:"", Valid:false}, TelCode:852} - // Place{Country:"Singapore", City:sql.NullString{String:"", Valid:false}, TelCode:65} - - // Named queries, using `:name` as the bindvar. Automatic bindvar support - // which takes into account the dbtype based on the driverName on sqlx.Open/Connect - _, err = db.NamedExec(`INSERT INTO person (first_name,last_name,email) VALUES (:first,:last,:email)`, - map[string]interface{}{ - "first": "Bin", - "last": "Smuth", - "email": "bensmith@allblacks.nz", - }) - - // Selects Mr. Smith from the database - rows, err = db.NamedQuery(`SELECT * FROM person WHERE first_name=:fn`, map[string]interface{}{"fn": "Bin"}) - - // Named queries can also use structs. Their bind names follow the same rules - // as the name -> db mapping, so struct fields are lowercased and the `db` tag - // is taken into consideration. - rows, err = db.NamedQuery(`SELECT * FROM person WHERE first_name=:first_name`, jason) -} -``` - diff --git a/vendor/github.com/jmoiron/sqlx/bind.go b/vendor/github.com/jmoiron/sqlx/bind.go deleted file mode 100644 index 0a48252..0000000 --- a/vendor/github.com/jmoiron/sqlx/bind.go +++ /dev/null @@ -1,217 +0,0 @@ -package sqlx - -import ( - "bytes" - "database/sql/driver" - "errors" - "reflect" - "strconv" - "strings" - - "github.com/jmoiron/sqlx/reflectx" -) - -// Bindvar types supported by Rebind, BindMap and BindStruct. -const ( - UNKNOWN = iota - QUESTION - DOLLAR - NAMED - AT -) - -// BindType returns the bindtype for a given database given a drivername. -func BindType(driverName string) int { - switch driverName { - case "postgres", "pgx", "pq-timeouts", "cloudsqlpostgres": - return DOLLAR - case "mysql": - return QUESTION - case "sqlite3": - return QUESTION - case "oci8", "ora", "goracle": - return NAMED - case "sqlserver": - return AT - } - return UNKNOWN -} - -// FIXME: this should be able to be tolerant of escaped ?'s in queries without -// losing much speed, and should be to avoid confusion. - -// Rebind a query from the default bindtype (QUESTION) to the target bindtype. -func Rebind(bindType int, query string) string { - switch bindType { - case QUESTION, UNKNOWN: - return query - } - - // Add space enough for 10 params before we have to allocate - rqb := make([]byte, 0, len(query)+10) - - var i, j int - - for i = strings.Index(query, "?"); i != -1; i = strings.Index(query, "?") { - rqb = append(rqb, query[:i]...) - - switch bindType { - case DOLLAR: - rqb = append(rqb, '$') - case NAMED: - rqb = append(rqb, ':', 'a', 'r', 'g') - case AT: - rqb = append(rqb, '@', 'p') - } - - j++ - rqb = strconv.AppendInt(rqb, int64(j), 10) - - query = query[i+1:] - } - - return string(append(rqb, query...)) -} - -// Experimental implementation of Rebind which uses a bytes.Buffer. The code is -// much simpler and should be more resistant to odd unicode, but it is twice as -// slow. Kept here for benchmarking purposes and to possibly replace Rebind if -// problems arise with its somewhat naive handling of unicode. -func rebindBuff(bindType int, query string) string { - if bindType != DOLLAR { - return query - } - - b := make([]byte, 0, len(query)) - rqb := bytes.NewBuffer(b) - j := 1 - for _, r := range query { - if r == '?' { - rqb.WriteRune('$') - rqb.WriteString(strconv.Itoa(j)) - j++ - } else { - rqb.WriteRune(r) - } - } - - return rqb.String() -} - -// In expands slice values in args, returning the modified query string -// and a new arg list that can be executed by a database. The `query` should -// use the `?` bindVar. The return value uses the `?` bindVar. -func In(query string, args ...interface{}) (string, []interface{}, error) { - // argMeta stores reflect.Value and length for slices and - // the value itself for non-slice arguments - type argMeta struct { - v reflect.Value - i interface{} - length int - } - - var flatArgsCount int - var anySlices bool - - meta := make([]argMeta, len(args)) - - for i, arg := range args { - if a, ok := arg.(driver.Valuer); ok { - arg, _ = a.Value() - } - v := reflect.ValueOf(arg) - t := reflectx.Deref(v.Type()) - - // []byte is a driver.Value type so it should not be expanded - if t.Kind() == reflect.Slice && t != reflect.TypeOf([]byte{}) { - meta[i].length = v.Len() - meta[i].v = v - - anySlices = true - flatArgsCount += meta[i].length - - if meta[i].length == 0 { - return "", nil, errors.New("empty slice passed to 'in' query") - } - } else { - meta[i].i = arg - flatArgsCount++ - } - } - - // don't do any parsing if there aren't any slices; note that this means - // some errors that we might have caught below will not be returned. - if !anySlices { - return query, args, nil - } - - newArgs := make([]interface{}, 0, flatArgsCount) - buf := make([]byte, 0, len(query)+len(", ?")*flatArgsCount) - - var arg, offset int - - for i := strings.IndexByte(query[offset:], '?'); i != -1; i = strings.IndexByte(query[offset:], '?') { - if arg >= len(meta) { - // if an argument wasn't passed, lets return an error; this is - // not actually how database/sql Exec/Query works, but since we are - // creating an argument list programmatically, we want to be able - // to catch these programmer errors earlier. - return "", nil, errors.New("number of bindVars exceeds arguments") - } - - argMeta := meta[arg] - arg++ - - // not a slice, continue. - // our questionmark will either be written before the next expansion - // of a slice or after the loop when writing the rest of the query - if argMeta.length == 0 { - offset = offset + i + 1 - newArgs = append(newArgs, argMeta.i) - continue - } - - // write everything up to and including our ? character - buf = append(buf, query[:offset+i+1]...) - - for si := 1; si < argMeta.length; si++ { - buf = append(buf, ", ?"...) - } - - newArgs = appendReflectSlice(newArgs, argMeta.v, argMeta.length) - - // slice the query and reset the offset. this avoids some bookkeeping for - // the write after the loop - query = query[offset+i+1:] - offset = 0 - } - - buf = append(buf, query...) - - if arg < len(meta) { - return "", nil, errors.New("number of bindVars less than number arguments") - } - - return string(buf), newArgs, nil -} - -func appendReflectSlice(args []interface{}, v reflect.Value, vlen int) []interface{} { - switch val := v.Interface().(type) { - case []interface{}: - args = append(args, val...) - case []int: - for i := range val { - args = append(args, val[i]) - } - case []string: - for i := range val { - args = append(args, val[i]) - } - default: - for si := 0; si < vlen; si++ { - args = append(args, v.Index(si).Interface()) - } - } - - return args -} diff --git a/vendor/github.com/jmoiron/sqlx/doc.go b/vendor/github.com/jmoiron/sqlx/doc.go deleted file mode 100644 index e2b4e60..0000000 --- a/vendor/github.com/jmoiron/sqlx/doc.go +++ /dev/null @@ -1,12 +0,0 @@ -// Package sqlx provides general purpose extensions to database/sql. -// -// It is intended to seamlessly wrap database/sql and provide convenience -// methods which are useful in the development of database driven applications. -// None of the underlying database/sql methods are changed. Instead all extended -// behavior is implemented through new methods defined on wrapper types. -// -// Additions include scanning into structs, named query support, rebinding -// queries for different drivers, convenient shorthands for common error handling -// and more. -// -package sqlx diff --git a/vendor/github.com/jmoiron/sqlx/go.mod b/vendor/github.com/jmoiron/sqlx/go.mod deleted file mode 100644 index 66c6756..0000000 --- a/vendor/github.com/jmoiron/sqlx/go.mod +++ /dev/null @@ -1,7 +0,0 @@ -module github.com/jmoiron/sqlx - -require ( - github.com/go-sql-driver/mysql v1.4.0 - github.com/lib/pq v1.0.0 - github.com/mattn/go-sqlite3 v1.9.0 -) diff --git a/vendor/github.com/jmoiron/sqlx/go.sum b/vendor/github.com/jmoiron/sqlx/go.sum deleted file mode 100644 index a3239ad..0000000 --- a/vendor/github.com/jmoiron/sqlx/go.sum +++ /dev/null @@ -1,6 +0,0 @@ -github.com/go-sql-driver/mysql v1.4.0 h1:7LxgVwFb2hIQtMm87NdgAVfXjnt4OePseqT1tKx+opk= -github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= -github.com/lib/pq v1.0.0 h1:X5PMW56eZitiTeO7tKzZxFCSpbFZJtkMMooicw2us9A= -github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/mattn/go-sqlite3 v1.9.0 h1:pDRiWfl+++eC2FEFRy6jXmQlvp4Yh3z1MJKg4UeYM/4= -github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= diff --git a/vendor/github.com/jmoiron/sqlx/named.go b/vendor/github.com/jmoiron/sqlx/named.go deleted file mode 100644 index fa82b56..0000000 --- a/vendor/github.com/jmoiron/sqlx/named.go +++ /dev/null @@ -1,356 +0,0 @@ -package sqlx - -// Named Query Support -// -// * BindMap - bind query bindvars to map/struct args -// * NamedExec, NamedQuery - named query w/ struct or map -// * NamedStmt - a pre-compiled named query which is a prepared statement -// -// Internal Interfaces: -// -// * compileNamedQuery - rebind a named query, returning a query and list of names -// * bindArgs, bindMapArgs, bindAnyArgs - given a list of names, return an arglist -// -import ( - "database/sql" - "errors" - "fmt" - "reflect" - "strconv" - "unicode" - - "github.com/jmoiron/sqlx/reflectx" -) - -// NamedStmt is a prepared statement that executes named queries. Prepare it -// how you would execute a NamedQuery, but pass in a struct or map when executing. -type NamedStmt struct { - Params []string - QueryString string - Stmt *Stmt -} - -// Close closes the named statement. -func (n *NamedStmt) Close() error { - return n.Stmt.Close() -} - -// Exec executes a named statement using the struct passed. -// Any named placeholder parameters are replaced with fields from arg. -func (n *NamedStmt) Exec(arg interface{}) (sql.Result, error) { - args, err := bindAnyArgs(n.Params, arg, n.Stmt.Mapper) - if err != nil { - return *new(sql.Result), err - } - return n.Stmt.Exec(args...) -} - -// Query executes a named statement using the struct argument, returning rows. -// Any named placeholder parameters are replaced with fields from arg. -func (n *NamedStmt) Query(arg interface{}) (*sql.Rows, error) { - args, err := bindAnyArgs(n.Params, arg, n.Stmt.Mapper) - if err != nil { - return nil, err - } - return n.Stmt.Query(args...) -} - -// QueryRow executes a named statement against the database. Because sqlx cannot -// create a *sql.Row with an error condition pre-set for binding errors, sqlx -// returns a *sqlx.Row instead. -// Any named placeholder parameters are replaced with fields from arg. -func (n *NamedStmt) QueryRow(arg interface{}) *Row { - args, err := bindAnyArgs(n.Params, arg, n.Stmt.Mapper) - if err != nil { - return &Row{err: err} - } - return n.Stmt.QueryRowx(args...) -} - -// MustExec execs a NamedStmt, panicing on error -// Any named placeholder parameters are replaced with fields from arg. -func (n *NamedStmt) MustExec(arg interface{}) sql.Result { - res, err := n.Exec(arg) - if err != nil { - panic(err) - } - return res -} - -// Queryx using this NamedStmt -// Any named placeholder parameters are replaced with fields from arg. -func (n *NamedStmt) Queryx(arg interface{}) (*Rows, error) { - r, err := n.Query(arg) - if err != nil { - return nil, err - } - return &Rows{Rows: r, Mapper: n.Stmt.Mapper, unsafe: isUnsafe(n)}, err -} - -// QueryRowx this NamedStmt. Because of limitations with QueryRow, this is -// an alias for QueryRow. -// Any named placeholder parameters are replaced with fields from arg. -func (n *NamedStmt) QueryRowx(arg interface{}) *Row { - return n.QueryRow(arg) -} - -// Select using this NamedStmt -// Any named placeholder parameters are replaced with fields from arg. -func (n *NamedStmt) Select(dest interface{}, arg interface{}) error { - rows, err := n.Queryx(arg) - if err != nil { - return err - } - // if something happens here, we want to make sure the rows are Closed - defer rows.Close() - return scanAll(rows, dest, false) -} - -// Get using this NamedStmt -// Any named placeholder parameters are replaced with fields from arg. -func (n *NamedStmt) Get(dest interface{}, arg interface{}) error { - r := n.QueryRowx(arg) - return r.scanAny(dest, false) -} - -// Unsafe creates an unsafe version of the NamedStmt -func (n *NamedStmt) Unsafe() *NamedStmt { - r := &NamedStmt{Params: n.Params, Stmt: n.Stmt, QueryString: n.QueryString} - r.Stmt.unsafe = true - return r -} - -// A union interface of preparer and binder, required to be able to prepare -// named statements (as the bindtype must be determined). -type namedPreparer interface { - Preparer - binder -} - -func prepareNamed(p namedPreparer, query string) (*NamedStmt, error) { - bindType := BindType(p.DriverName()) - q, args, err := compileNamedQuery([]byte(query), bindType) - if err != nil { - return nil, err - } - stmt, err := Preparex(p, q) - if err != nil { - return nil, err - } - return &NamedStmt{ - QueryString: q, - Params: args, - Stmt: stmt, - }, nil -} - -func bindAnyArgs(names []string, arg interface{}, m *reflectx.Mapper) ([]interface{}, error) { - if maparg, ok := arg.(map[string]interface{}); ok { - return bindMapArgs(names, maparg) - } - return bindArgs(names, arg, m) -} - -// private interface to generate a list of interfaces from a given struct -// type, given a list of names to pull out of the struct. Used by public -// BindStruct interface. -func bindArgs(names []string, arg interface{}, m *reflectx.Mapper) ([]interface{}, error) { - arglist := make([]interface{}, 0, len(names)) - - // grab the indirected value of arg - v := reflect.ValueOf(arg) - for v = reflect.ValueOf(arg); v.Kind() == reflect.Ptr; { - v = v.Elem() - } - - err := m.TraversalsByNameFunc(v.Type(), names, func(i int, t []int) error { - if len(t) == 0 { - return fmt.Errorf("could not find name %s in %#v", names[i], arg) - } - - val := reflectx.FieldByIndexesReadOnly(v, t) - arglist = append(arglist, val.Interface()) - - return nil - }) - - return arglist, err -} - -// like bindArgs, but for maps. -func bindMapArgs(names []string, arg map[string]interface{}) ([]interface{}, error) { - arglist := make([]interface{}, 0, len(names)) - - for _, name := range names { - val, ok := arg[name] - if !ok { - return arglist, fmt.Errorf("could not find name %s in %#v", name, arg) - } - arglist = append(arglist, val) - } - return arglist, nil -} - -// bindStruct binds a named parameter query with fields from a struct argument. -// The rules for binding field names to parameter names follow the same -// conventions as for StructScan, including obeying the `db` struct tags. -func bindStruct(bindType int, query string, arg interface{}, m *reflectx.Mapper) (string, []interface{}, error) { - bound, names, err := compileNamedQuery([]byte(query), bindType) - if err != nil { - return "", []interface{}{}, err - } - - arglist, err := bindArgs(names, arg, m) - if err != nil { - return "", []interface{}{}, err - } - - return bound, arglist, nil -} - -// bindMap binds a named parameter query with a map of arguments. -func bindMap(bindType int, query string, args map[string]interface{}) (string, []interface{}, error) { - bound, names, err := compileNamedQuery([]byte(query), bindType) - if err != nil { - return "", []interface{}{}, err - } - - arglist, err := bindMapArgs(names, args) - return bound, arglist, err -} - -// -- Compilation of Named Queries - -// Allow digits and letters in bind params; additionally runes are -// checked against underscores, meaning that bind params can have be -// alphanumeric with underscores. Mind the difference between unicode -// digits and numbers, where '5' is a digit but '五' is not. -var allowedBindRunes = []*unicode.RangeTable{unicode.Letter, unicode.Digit} - -// FIXME: this function isn't safe for unicode named params, as a failing test -// can testify. This is not a regression but a failure of the original code -// as well. It should be modified to range over runes in a string rather than -// bytes, even though this is less convenient and slower. Hopefully the -// addition of the prepared NamedStmt (which will only do this once) will make -// up for the slightly slower ad-hoc NamedExec/NamedQuery. - -// compile a NamedQuery into an unbound query (using the '?' bindvar) and -// a list of names. -func compileNamedQuery(qs []byte, bindType int) (query string, names []string, err error) { - names = make([]string, 0, 10) - rebound := make([]byte, 0, len(qs)) - - inName := false - last := len(qs) - 1 - currentVar := 1 - name := make([]byte, 0, 10) - - for i, b := range qs { - // a ':' while we're in a name is an error - if b == ':' { - // if this is the second ':' in a '::' escape sequence, append a ':' - if inName && i > 0 && qs[i-1] == ':' { - rebound = append(rebound, ':') - inName = false - continue - } else if inName { - err = errors.New("unexpected `:` while reading named param at " + strconv.Itoa(i)) - return query, names, err - } - inName = true - name = []byte{} - } else if inName && i > 0 && b == '=' { - rebound = append(rebound, ':', '=') - inName = false - continue - // if we're in a name, and this is an allowed character, continue - } else if inName && (unicode.IsOneOf(allowedBindRunes, rune(b)) || b == '_' || b == '.') && i != last { - // append the byte to the name if we are in a name and not on the last byte - name = append(name, b) - // if we're in a name and it's not an allowed character, the name is done - } else if inName { - inName = false - // if this is the final byte of the string and it is part of the name, then - // make sure to add it to the name - if i == last && unicode.IsOneOf(allowedBindRunes, rune(b)) { - name = append(name, b) - } - // add the string representation to the names list - names = append(names, string(name)) - // add a proper bindvar for the bindType - switch bindType { - // oracle only supports named type bind vars even for positional - case NAMED: - rebound = append(rebound, ':') - rebound = append(rebound, name...) - case QUESTION, UNKNOWN: - rebound = append(rebound, '?') - case DOLLAR: - rebound = append(rebound, '$') - for _, b := range strconv.Itoa(currentVar) { - rebound = append(rebound, byte(b)) - } - currentVar++ - case AT: - rebound = append(rebound, '@', 'p') - for _, b := range strconv.Itoa(currentVar) { - rebound = append(rebound, byte(b)) - } - currentVar++ - } - // add this byte to string unless it was not part of the name - if i != last { - rebound = append(rebound, b) - } else if !unicode.IsOneOf(allowedBindRunes, rune(b)) { - rebound = append(rebound, b) - } - } else { - // this is a normal byte and should just go onto the rebound query - rebound = append(rebound, b) - } - } - - return string(rebound), names, err -} - -// BindNamed binds a struct or a map to a query with named parameters. -// DEPRECATED: use sqlx.Named` instead of this, it may be removed in future. -func BindNamed(bindType int, query string, arg interface{}) (string, []interface{}, error) { - return bindNamedMapper(bindType, query, arg, mapper()) -} - -// Named takes a query using named parameters and an argument and -// returns a new query with a list of args that can be executed by -// a database. The return value uses the `?` bindvar. -func Named(query string, arg interface{}) (string, []interface{}, error) { - return bindNamedMapper(QUESTION, query, arg, mapper()) -} - -func bindNamedMapper(bindType int, query string, arg interface{}, m *reflectx.Mapper) (string, []interface{}, error) { - if maparg, ok := arg.(map[string]interface{}); ok { - return bindMap(bindType, query, maparg) - } - return bindStruct(bindType, query, arg, m) -} - -// NamedQuery binds a named query and then runs Query on the result using the -// provided Ext (sqlx.Tx, sqlx.Db). It works with both structs and with -// map[string]interface{} types. -func NamedQuery(e Ext, query string, arg interface{}) (*Rows, error) { - q, args, err := bindNamedMapper(BindType(e.DriverName()), query, arg, mapperFor(e)) - if err != nil { - return nil, err - } - return e.Queryx(q, args...) -} - -// NamedExec uses BindStruct to get a query executable by the driver and -// then runs Exec on the result. Returns an error from the binding -// or the query excution itself. -func NamedExec(e Ext, query string, arg interface{}) (sql.Result, error) { - q, args, err := bindNamedMapper(BindType(e.DriverName()), query, arg, mapperFor(e)) - if err != nil { - return nil, err - } - return e.Exec(q, args...) -} diff --git a/vendor/github.com/jmoiron/sqlx/named_context.go b/vendor/github.com/jmoiron/sqlx/named_context.go deleted file mode 100644 index 9405007..0000000 --- a/vendor/github.com/jmoiron/sqlx/named_context.go +++ /dev/null @@ -1,132 +0,0 @@ -// +build go1.8 - -package sqlx - -import ( - "context" - "database/sql" -) - -// A union interface of contextPreparer and binder, required to be able to -// prepare named statements with context (as the bindtype must be determined). -type namedPreparerContext interface { - PreparerContext - binder -} - -func prepareNamedContext(ctx context.Context, p namedPreparerContext, query string) (*NamedStmt, error) { - bindType := BindType(p.DriverName()) - q, args, err := compileNamedQuery([]byte(query), bindType) - if err != nil { - return nil, err - } - stmt, err := PreparexContext(ctx, p, q) - if err != nil { - return nil, err - } - return &NamedStmt{ - QueryString: q, - Params: args, - Stmt: stmt, - }, nil -} - -// ExecContext executes a named statement using the struct passed. -// Any named placeholder parameters are replaced with fields from arg. -func (n *NamedStmt) ExecContext(ctx context.Context, arg interface{}) (sql.Result, error) { - args, err := bindAnyArgs(n.Params, arg, n.Stmt.Mapper) - if err != nil { - return *new(sql.Result), err - } - return n.Stmt.ExecContext(ctx, args...) -} - -// QueryContext executes a named statement using the struct argument, returning rows. -// Any named placeholder parameters are replaced with fields from arg. -func (n *NamedStmt) QueryContext(ctx context.Context, arg interface{}) (*sql.Rows, error) { - args, err := bindAnyArgs(n.Params, arg, n.Stmt.Mapper) - if err != nil { - return nil, err - } - return n.Stmt.QueryContext(ctx, args...) -} - -// QueryRowContext executes a named statement against the database. Because sqlx cannot -// create a *sql.Row with an error condition pre-set for binding errors, sqlx -// returns a *sqlx.Row instead. -// Any named placeholder parameters are replaced with fields from arg. -func (n *NamedStmt) QueryRowContext(ctx context.Context, arg interface{}) *Row { - args, err := bindAnyArgs(n.Params, arg, n.Stmt.Mapper) - if err != nil { - return &Row{err: err} - } - return n.Stmt.QueryRowxContext(ctx, args...) -} - -// MustExecContext execs a NamedStmt, panicing on error -// Any named placeholder parameters are replaced with fields from arg. -func (n *NamedStmt) MustExecContext(ctx context.Context, arg interface{}) sql.Result { - res, err := n.ExecContext(ctx, arg) - if err != nil { - panic(err) - } - return res -} - -// QueryxContext using this NamedStmt -// Any named placeholder parameters are replaced with fields from arg. -func (n *NamedStmt) QueryxContext(ctx context.Context, arg interface{}) (*Rows, error) { - r, err := n.QueryContext(ctx, arg) - if err != nil { - return nil, err - } - return &Rows{Rows: r, Mapper: n.Stmt.Mapper, unsafe: isUnsafe(n)}, err -} - -// QueryRowxContext this NamedStmt. Because of limitations with QueryRow, this is -// an alias for QueryRow. -// Any named placeholder parameters are replaced with fields from arg. -func (n *NamedStmt) QueryRowxContext(ctx context.Context, arg interface{}) *Row { - return n.QueryRowContext(ctx, arg) -} - -// SelectContext using this NamedStmt -// Any named placeholder parameters are replaced with fields from arg. -func (n *NamedStmt) SelectContext(ctx context.Context, dest interface{}, arg interface{}) error { - rows, err := n.QueryxContext(ctx, arg) - if err != nil { - return err - } - // if something happens here, we want to make sure the rows are Closed - defer rows.Close() - return scanAll(rows, dest, false) -} - -// GetContext using this NamedStmt -// Any named placeholder parameters are replaced with fields from arg. -func (n *NamedStmt) GetContext(ctx context.Context, dest interface{}, arg interface{}) error { - r := n.QueryRowxContext(ctx, arg) - return r.scanAny(dest, false) -} - -// NamedQueryContext binds a named query and then runs Query on the result using the -// provided Ext (sqlx.Tx, sqlx.Db). It works with both structs and with -// map[string]interface{} types. -func NamedQueryContext(ctx context.Context, e ExtContext, query string, arg interface{}) (*Rows, error) { - q, args, err := bindNamedMapper(BindType(e.DriverName()), query, arg, mapperFor(e)) - if err != nil { - return nil, err - } - return e.QueryxContext(ctx, q, args...) -} - -// NamedExecContext uses BindStruct to get a query executable by the driver and -// then runs Exec on the result. Returns an error from the binding -// or the query excution itself. -func NamedExecContext(ctx context.Context, e ExtContext, query string, arg interface{}) (sql.Result, error) { - q, args, err := bindNamedMapper(BindType(e.DriverName()), query, arg, mapperFor(e)) - if err != nil { - return nil, err - } - return e.ExecContext(ctx, q, args...) -} diff --git a/vendor/github.com/jmoiron/sqlx/reflectx/README.md b/vendor/github.com/jmoiron/sqlx/reflectx/README.md deleted file mode 100644 index f01d3d1..0000000 --- a/vendor/github.com/jmoiron/sqlx/reflectx/README.md +++ /dev/null @@ -1,17 +0,0 @@ -# reflectx - -The sqlx package has special reflect needs. In particular, it needs to: - -* be able to map a name to a field -* understand embedded structs -* understand mapping names to fields by a particular tag -* user specified name -> field mapping functions - -These behaviors mimic the behaviors by the standard library marshallers and also the -behavior of standard Go accessors. - -The first two are amply taken care of by `Reflect.Value.FieldByName`, and the third is -addressed by `Reflect.Value.FieldByNameFunc`, but these don't quite understand struct -tags in the ways that are vital to most marshallers, and they are slow. - -This reflectx package extends reflect to achieve these goals. diff --git a/vendor/github.com/jmoiron/sqlx/reflectx/reflect.go b/vendor/github.com/jmoiron/sqlx/reflectx/reflect.go deleted file mode 100644 index 73c21eb..0000000 --- a/vendor/github.com/jmoiron/sqlx/reflectx/reflect.go +++ /dev/null @@ -1,441 +0,0 @@ -// Package reflectx implements extensions to the standard reflect lib suitable -// for implementing marshalling and unmarshalling packages. The main Mapper type -// allows for Go-compatible named attribute access, including accessing embedded -// struct attributes and the ability to use functions and struct tags to -// customize field names. -// -package reflectx - -import ( - "reflect" - "runtime" - "strings" - "sync" -) - -// A FieldInfo is metadata for a struct field. -type FieldInfo struct { - Index []int - Path string - Field reflect.StructField - Zero reflect.Value - Name string - Options map[string]string - Embedded bool - Children []*FieldInfo - Parent *FieldInfo -} - -// A StructMap is an index of field metadata for a struct. -type StructMap struct { - Tree *FieldInfo - Index []*FieldInfo - Paths map[string]*FieldInfo - Names map[string]*FieldInfo -} - -// GetByPath returns a *FieldInfo for a given string path. -func (f StructMap) GetByPath(path string) *FieldInfo { - return f.Paths[path] -} - -// GetByTraversal returns a *FieldInfo for a given integer path. It is -// analogous to reflect.FieldByIndex, but using the cached traversal -// rather than re-executing the reflect machinery each time. -func (f StructMap) GetByTraversal(index []int) *FieldInfo { - if len(index) == 0 { - return nil - } - - tree := f.Tree - for _, i := range index { - if i >= len(tree.Children) || tree.Children[i] == nil { - return nil - } - tree = tree.Children[i] - } - return tree -} - -// Mapper is a general purpose mapper of names to struct fields. A Mapper -// behaves like most marshallers in the standard library, obeying a field tag -// for name mapping but also providing a basic transform function. -type Mapper struct { - cache map[reflect.Type]*StructMap - tagName string - tagMapFunc func(string) string - mapFunc func(string) string - mutex sync.Mutex -} - -// NewMapper returns a new mapper using the tagName as its struct field tag. -// If tagName is the empty string, it is ignored. -func NewMapper(tagName string) *Mapper { - return &Mapper{ - cache: make(map[reflect.Type]*StructMap), - tagName: tagName, - } -} - -// NewMapperTagFunc returns a new mapper which contains a mapper for field names -// AND a mapper for tag values. This is useful for tags like json which can -// have values like "name,omitempty". -func NewMapperTagFunc(tagName string, mapFunc, tagMapFunc func(string) string) *Mapper { - return &Mapper{ - cache: make(map[reflect.Type]*StructMap), - tagName: tagName, - mapFunc: mapFunc, - tagMapFunc: tagMapFunc, - } -} - -// NewMapperFunc returns a new mapper which optionally obeys a field tag and -// a struct field name mapper func given by f. Tags will take precedence, but -// for any other field, the mapped name will be f(field.Name) -func NewMapperFunc(tagName string, f func(string) string) *Mapper { - return &Mapper{ - cache: make(map[reflect.Type]*StructMap), - tagName: tagName, - mapFunc: f, - } -} - -// TypeMap returns a mapping of field strings to int slices representing -// the traversal down the struct to reach the field. -func (m *Mapper) TypeMap(t reflect.Type) *StructMap { - m.mutex.Lock() - mapping, ok := m.cache[t] - if !ok { - mapping = getMapping(t, m.tagName, m.mapFunc, m.tagMapFunc) - m.cache[t] = mapping - } - m.mutex.Unlock() - return mapping -} - -// FieldMap returns the mapper's mapping of field names to reflect values. Panics -// if v's Kind is not Struct, or v is not Indirectable to a struct kind. -func (m *Mapper) FieldMap(v reflect.Value) map[string]reflect.Value { - v = reflect.Indirect(v) - mustBe(v, reflect.Struct) - - r := map[string]reflect.Value{} - tm := m.TypeMap(v.Type()) - for tagName, fi := range tm.Names { - r[tagName] = FieldByIndexes(v, fi.Index) - } - return r -} - -// FieldByName returns a field by its mapped name as a reflect.Value. -// Panics if v's Kind is not Struct or v is not Indirectable to a struct Kind. -// Returns zero Value if the name is not found. -func (m *Mapper) FieldByName(v reflect.Value, name string) reflect.Value { - v = reflect.Indirect(v) - mustBe(v, reflect.Struct) - - tm := m.TypeMap(v.Type()) - fi, ok := tm.Names[name] - if !ok { - return v - } - return FieldByIndexes(v, fi.Index) -} - -// FieldsByName returns a slice of values corresponding to the slice of names -// for the value. Panics if v's Kind is not Struct or v is not Indirectable -// to a struct Kind. Returns zero Value for each name not found. -func (m *Mapper) FieldsByName(v reflect.Value, names []string) []reflect.Value { - v = reflect.Indirect(v) - mustBe(v, reflect.Struct) - - tm := m.TypeMap(v.Type()) - vals := make([]reflect.Value, 0, len(names)) - for _, name := range names { - fi, ok := tm.Names[name] - if !ok { - vals = append(vals, *new(reflect.Value)) - } else { - vals = append(vals, FieldByIndexes(v, fi.Index)) - } - } - return vals -} - -// TraversalsByName returns a slice of int slices which represent the struct -// traversals for each mapped name. Panics if t is not a struct or Indirectable -// to a struct. Returns empty int slice for each name not found. -func (m *Mapper) TraversalsByName(t reflect.Type, names []string) [][]int { - r := make([][]int, 0, len(names)) - m.TraversalsByNameFunc(t, names, func(_ int, i []int) error { - if i == nil { - r = append(r, []int{}) - } else { - r = append(r, i) - } - - return nil - }) - return r -} - -// TraversalsByNameFunc traverses the mapped names and calls fn with the index of -// each name and the struct traversal represented by that name. Panics if t is not -// a struct or Indirectable to a struct. Returns the first error returned by fn or nil. -func (m *Mapper) TraversalsByNameFunc(t reflect.Type, names []string, fn func(int, []int) error) error { - t = Deref(t) - mustBe(t, reflect.Struct) - tm := m.TypeMap(t) - for i, name := range names { - fi, ok := tm.Names[name] - if !ok { - if err := fn(i, nil); err != nil { - return err - } - } else { - if err := fn(i, fi.Index); err != nil { - return err - } - } - } - return nil -} - -// FieldByIndexes returns a value for the field given by the struct traversal -// for the given value. -func FieldByIndexes(v reflect.Value, indexes []int) reflect.Value { - for _, i := range indexes { - v = reflect.Indirect(v).Field(i) - // if this is a pointer and it's nil, allocate a new value and set it - if v.Kind() == reflect.Ptr && v.IsNil() { - alloc := reflect.New(Deref(v.Type())) - v.Set(alloc) - } - if v.Kind() == reflect.Map && v.IsNil() { - v.Set(reflect.MakeMap(v.Type())) - } - } - return v -} - -// FieldByIndexesReadOnly returns a value for a particular struct traversal, -// but is not concerned with allocating nil pointers because the value is -// going to be used for reading and not setting. -func FieldByIndexesReadOnly(v reflect.Value, indexes []int) reflect.Value { - for _, i := range indexes { - v = reflect.Indirect(v).Field(i) - } - return v -} - -// Deref is Indirect for reflect.Types -func Deref(t reflect.Type) reflect.Type { - if t.Kind() == reflect.Ptr { - t = t.Elem() - } - return t -} - -// -- helpers & utilities -- - -type kinder interface { - Kind() reflect.Kind -} - -// mustBe checks a value against a kind, panicing with a reflect.ValueError -// if the kind isn't that which is required. -func mustBe(v kinder, expected reflect.Kind) { - if k := v.Kind(); k != expected { - panic(&reflect.ValueError{Method: methodName(), Kind: k}) - } -} - -// methodName returns the caller of the function calling methodName -func methodName() string { - pc, _, _, _ := runtime.Caller(2) - f := runtime.FuncForPC(pc) - if f == nil { - return "unknown method" - } - return f.Name() -} - -type typeQueue struct { - t reflect.Type - fi *FieldInfo - pp string // Parent path -} - -// A copying append that creates a new slice each time. -func apnd(is []int, i int) []int { - x := make([]int, len(is)+1) - for p, n := range is { - x[p] = n - } - x[len(x)-1] = i - return x -} - -type mapf func(string) string - -// parseName parses the tag and the target name for the given field using -// the tagName (eg 'json' for `json:"foo"` tags), mapFunc for mapping the -// field's name to a target name, and tagMapFunc for mapping the tag to -// a target name. -func parseName(field reflect.StructField, tagName string, mapFunc, tagMapFunc mapf) (tag, fieldName string) { - // first, set the fieldName to the field's name - fieldName = field.Name - // if a mapFunc is set, use that to override the fieldName - if mapFunc != nil { - fieldName = mapFunc(fieldName) - } - - // if there's no tag to look for, return the field name - if tagName == "" { - return "", fieldName - } - - // if this tag is not set using the normal convention in the tag, - // then return the fieldname.. this check is done because according - // to the reflect documentation: - // If the tag does not have the conventional format, - // the value returned by Get is unspecified. - // which doesn't sound great. - if !strings.Contains(string(field.Tag), tagName+":") { - return "", fieldName - } - - // at this point we're fairly sure that we have a tag, so lets pull it out - tag = field.Tag.Get(tagName) - - // if we have a mapper function, call it on the whole tag - // XXX: this is a change from the old version, which pulled out the name - // before the tagMapFunc could be run, but I think this is the right way - if tagMapFunc != nil { - tag = tagMapFunc(tag) - } - - // finally, split the options from the name - parts := strings.Split(tag, ",") - fieldName = parts[0] - - return tag, fieldName -} - -// parseOptions parses options out of a tag string, skipping the name -func parseOptions(tag string) map[string]string { - parts := strings.Split(tag, ",") - options := make(map[string]string, len(parts)) - if len(parts) > 1 { - for _, opt := range parts[1:] { - // short circuit potentially expensive split op - if strings.Contains(opt, "=") { - kv := strings.Split(opt, "=") - options[kv[0]] = kv[1] - continue - } - options[opt] = "" - } - } - return options -} - -// getMapping returns a mapping for the t type, using the tagName, mapFunc and -// tagMapFunc to determine the canonical names of fields. -func getMapping(t reflect.Type, tagName string, mapFunc, tagMapFunc mapf) *StructMap { - m := []*FieldInfo{} - - root := &FieldInfo{} - queue := []typeQueue{} - queue = append(queue, typeQueue{Deref(t), root, ""}) - -QueueLoop: - for len(queue) != 0 { - // pop the first item off of the queue - tq := queue[0] - queue = queue[1:] - - // ignore recursive field - for p := tq.fi.Parent; p != nil; p = p.Parent { - if tq.fi.Field.Type == p.Field.Type { - continue QueueLoop - } - } - - nChildren := 0 - if tq.t.Kind() == reflect.Struct { - nChildren = tq.t.NumField() - } - tq.fi.Children = make([]*FieldInfo, nChildren) - - // iterate through all of its fields - for fieldPos := 0; fieldPos < nChildren; fieldPos++ { - - f := tq.t.Field(fieldPos) - - // parse the tag and the target name using the mapping options for this field - tag, name := parseName(f, tagName, mapFunc, tagMapFunc) - - // if the name is "-", disabled via a tag, skip it - if name == "-" { - continue - } - - fi := FieldInfo{ - Field: f, - Name: name, - Zero: reflect.New(f.Type).Elem(), - Options: parseOptions(tag), - } - - // if the path is empty this path is just the name - if tq.pp == "" { - fi.Path = fi.Name - } else { - fi.Path = tq.pp + "." + fi.Name - } - - // skip unexported fields - if len(f.PkgPath) != 0 && !f.Anonymous { - continue - } - - // bfs search of anonymous embedded structs - if f.Anonymous { - pp := tq.pp - if tag != "" { - pp = fi.Path - } - - fi.Embedded = true - fi.Index = apnd(tq.fi.Index, fieldPos) - nChildren := 0 - ft := Deref(f.Type) - if ft.Kind() == reflect.Struct { - nChildren = ft.NumField() - } - fi.Children = make([]*FieldInfo, nChildren) - queue = append(queue, typeQueue{Deref(f.Type), &fi, pp}) - } else if fi.Zero.Kind() == reflect.Struct || (fi.Zero.Kind() == reflect.Ptr && fi.Zero.Type().Elem().Kind() == reflect.Struct) { - fi.Index = apnd(tq.fi.Index, fieldPos) - fi.Children = make([]*FieldInfo, Deref(f.Type).NumField()) - queue = append(queue, typeQueue{Deref(f.Type), &fi, fi.Path}) - } - - fi.Index = apnd(tq.fi.Index, fieldPos) - fi.Parent = tq.fi - tq.fi.Children[fieldPos] = &fi - m = append(m, &fi) - } - } - - flds := &StructMap{Index: m, Tree: root, Paths: map[string]*FieldInfo{}, Names: map[string]*FieldInfo{}} - for _, fi := range flds.Index { - flds.Paths[fi.Path] = fi - if fi.Name != "" && !fi.Embedded { - flds.Names[fi.Path] = fi - } - } - - return flds -} diff --git a/vendor/github.com/jmoiron/sqlx/sqlx.go b/vendor/github.com/jmoiron/sqlx/sqlx.go deleted file mode 100644 index 3f000f4..0000000 --- a/vendor/github.com/jmoiron/sqlx/sqlx.go +++ /dev/null @@ -1,1045 +0,0 @@ -package sqlx - -import ( - "database/sql" - "database/sql/driver" - "errors" - "fmt" - - "io/ioutil" - "path/filepath" - "reflect" - "strings" - "sync" - - "github.com/jmoiron/sqlx/reflectx" -) - -// Although the NameMapper is convenient, in practice it should not -// be relied on except for application code. If you are writing a library -// that uses sqlx, you should be aware that the name mappings you expect -// can be overridden by your user's application. - -// NameMapper is used to map column names to struct field names. By default, -// it uses strings.ToLower to lowercase struct field names. It can be set -// to whatever you want, but it is encouraged to be set before sqlx is used -// as name-to-field mappings are cached after first use on a type. -var NameMapper = strings.ToLower -var origMapper = reflect.ValueOf(NameMapper) - -// Rather than creating on init, this is created when necessary so that -// importers have time to customize the NameMapper. -var mpr *reflectx.Mapper - -// mprMu protects mpr. -var mprMu sync.Mutex - -// mapper returns a valid mapper using the configured NameMapper func. -func mapper() *reflectx.Mapper { - mprMu.Lock() - defer mprMu.Unlock() - - if mpr == nil { - mpr = reflectx.NewMapperFunc("db", NameMapper) - } else if origMapper != reflect.ValueOf(NameMapper) { - // if NameMapper has changed, create a new mapper - mpr = reflectx.NewMapperFunc("db", NameMapper) - origMapper = reflect.ValueOf(NameMapper) - } - return mpr -} - -// isScannable takes the reflect.Type and the actual dest value and returns -// whether or not it's Scannable. Something is scannable if: -// * it is not a struct -// * it implements sql.Scanner -// * it has no exported fields -func isScannable(t reflect.Type) bool { - if reflect.PtrTo(t).Implements(_scannerInterface) { - return true - } - if t.Kind() != reflect.Struct { - return true - } - - // it's not important that we use the right mapper for this particular object, - // we're only concerned on how many exported fields this struct has - m := mapper() - if len(m.TypeMap(t).Index) == 0 { - return true - } - return false -} - -// ColScanner is an interface used by MapScan and SliceScan -type ColScanner interface { - Columns() ([]string, error) - Scan(dest ...interface{}) error - Err() error -} - -// Queryer is an interface used by Get and Select -type Queryer interface { - Query(query string, args ...interface{}) (*sql.Rows, error) - Queryx(query string, args ...interface{}) (*Rows, error) - QueryRowx(query string, args ...interface{}) *Row -} - -// Execer is an interface used by MustExec and LoadFile -type Execer interface { - Exec(query string, args ...interface{}) (sql.Result, error) -} - -// Binder is an interface for something which can bind queries (Tx, DB) -type binder interface { - DriverName() string - Rebind(string) string - BindNamed(string, interface{}) (string, []interface{}, error) -} - -// Ext is a union interface which can bind, query, and exec, used by -// NamedQuery and NamedExec. -type Ext interface { - binder - Queryer - Execer -} - -// Preparer is an interface used by Preparex. -type Preparer interface { - Prepare(query string) (*sql.Stmt, error) -} - -// determine if any of our extensions are unsafe -func isUnsafe(i interface{}) bool { - switch v := i.(type) { - case Row: - return v.unsafe - case *Row: - return v.unsafe - case Rows: - return v.unsafe - case *Rows: - return v.unsafe - case NamedStmt: - return v.Stmt.unsafe - case *NamedStmt: - return v.Stmt.unsafe - case Stmt: - return v.unsafe - case *Stmt: - return v.unsafe - case qStmt: - return v.unsafe - case *qStmt: - return v.unsafe - case DB: - return v.unsafe - case *DB: - return v.unsafe - case Tx: - return v.unsafe - case *Tx: - return v.unsafe - case sql.Rows, *sql.Rows: - return false - default: - return false - } -} - -func mapperFor(i interface{}) *reflectx.Mapper { - switch i.(type) { - case DB: - return i.(DB).Mapper - case *DB: - return i.(*DB).Mapper - case Tx: - return i.(Tx).Mapper - case *Tx: - return i.(*Tx).Mapper - default: - return mapper() - } -} - -var _scannerInterface = reflect.TypeOf((*sql.Scanner)(nil)).Elem() -var _valuerInterface = reflect.TypeOf((*driver.Valuer)(nil)).Elem() - -// Row is a reimplementation of sql.Row in order to gain access to the underlying -// sql.Rows.Columns() data, necessary for StructScan. -type Row struct { - err error - unsafe bool - rows *sql.Rows - Mapper *reflectx.Mapper -} - -// Scan is a fixed implementation of sql.Row.Scan, which does not discard the -// underlying error from the internal rows object if it exists. -func (r *Row) Scan(dest ...interface{}) error { - if r.err != nil { - return r.err - } - - // TODO(bradfitz): for now we need to defensively clone all - // []byte that the driver returned (not permitting - // *RawBytes in Rows.Scan), since we're about to close - // the Rows in our defer, when we return from this function. - // the contract with the driver.Next(...) interface is that it - // can return slices into read-only temporary memory that's - // only valid until the next Scan/Close. But the TODO is that - // for a lot of drivers, this copy will be unnecessary. We - // should provide an optional interface for drivers to - // implement to say, "don't worry, the []bytes that I return - // from Next will not be modified again." (for instance, if - // they were obtained from the network anyway) But for now we - // don't care. - defer r.rows.Close() - for _, dp := range dest { - if _, ok := dp.(*sql.RawBytes); ok { - return errors.New("sql: RawBytes isn't allowed on Row.Scan") - } - } - - if !r.rows.Next() { - if err := r.rows.Err(); err != nil { - return err - } - return sql.ErrNoRows - } - err := r.rows.Scan(dest...) - if err != nil { - return err - } - // Make sure the query can be processed to completion with no errors. - if err := r.rows.Close(); err != nil { - return err - } - return nil -} - -// Columns returns the underlying sql.Rows.Columns(), or the deferred error usually -// returned by Row.Scan() -func (r *Row) Columns() ([]string, error) { - if r.err != nil { - return []string{}, r.err - } - return r.rows.Columns() -} - -// ColumnTypes returns the underlying sql.Rows.ColumnTypes(), or the deferred error -func (r *Row) ColumnTypes() ([]*sql.ColumnType, error) { - if r.err != nil { - return []*sql.ColumnType{}, r.err - } - return r.rows.ColumnTypes() -} - -// Err returns the error encountered while scanning. -func (r *Row) Err() error { - return r.err -} - -// DB is a wrapper around sql.DB which keeps track of the driverName upon Open, -// used mostly to automatically bind named queries using the right bindvars. -type DB struct { - *sql.DB - driverName string - unsafe bool - Mapper *reflectx.Mapper -} - -// NewDb returns a new sqlx DB wrapper for a pre-existing *sql.DB. The -// driverName of the original database is required for named query support. -func NewDb(db *sql.DB, driverName string) *DB { - return &DB{DB: db, driverName: driverName, Mapper: mapper()} -} - -// DriverName returns the driverName passed to the Open function for this DB. -func (db *DB) DriverName() string { - return db.driverName -} - -// Open is the same as sql.Open, but returns an *sqlx.DB instead. -func Open(driverName, dataSourceName string) (*DB, error) { - db, err := sql.Open(driverName, dataSourceName) - if err != nil { - return nil, err - } - return &DB{DB: db, driverName: driverName, Mapper: mapper()}, err -} - -// MustOpen is the same as sql.Open, but returns an *sqlx.DB instead and panics on error. -func MustOpen(driverName, dataSourceName string) *DB { - db, err := Open(driverName, dataSourceName) - if err != nil { - panic(err) - } - return db -} - -// MapperFunc sets a new mapper for this db using the default sqlx struct tag -// and the provided mapper function. -func (db *DB) MapperFunc(mf func(string) string) { - db.Mapper = reflectx.NewMapperFunc("db", mf) -} - -// Rebind transforms a query from QUESTION to the DB driver's bindvar type. -func (db *DB) Rebind(query string) string { - return Rebind(BindType(db.driverName), query) -} - -// Unsafe returns a version of DB which will silently succeed to scan when -// columns in the SQL result have no fields in the destination struct. -// sqlx.Stmt and sqlx.Tx which are created from this DB will inherit its -// safety behavior. -func (db *DB) Unsafe() *DB { - return &DB{DB: db.DB, driverName: db.driverName, unsafe: true, Mapper: db.Mapper} -} - -// BindNamed binds a query using the DB driver's bindvar type. -func (db *DB) BindNamed(query string, arg interface{}) (string, []interface{}, error) { - return bindNamedMapper(BindType(db.driverName), query, arg, db.Mapper) -} - -// NamedQuery using this DB. -// Any named placeholder parameters are replaced with fields from arg. -func (db *DB) NamedQuery(query string, arg interface{}) (*Rows, error) { - return NamedQuery(db, query, arg) -} - -// NamedExec using this DB. -// Any named placeholder parameters are replaced with fields from arg. -func (db *DB) NamedExec(query string, arg interface{}) (sql.Result, error) { - return NamedExec(db, query, arg) -} - -// Select using this DB. -// Any placeholder parameters are replaced with supplied args. -func (db *DB) Select(dest interface{}, query string, args ...interface{}) error { - return Select(db, dest, query, args...) -} - -// Get using this DB. -// Any placeholder parameters are replaced with supplied args. -// An error is returned if the result set is empty. -func (db *DB) Get(dest interface{}, query string, args ...interface{}) error { - return Get(db, dest, query, args...) -} - -// MustBegin starts a transaction, and panics on error. Returns an *sqlx.Tx instead -// of an *sql.Tx. -func (db *DB) MustBegin() *Tx { - tx, err := db.Beginx() - if err != nil { - panic(err) - } - return tx -} - -// Beginx begins a transaction and returns an *sqlx.Tx instead of an *sql.Tx. -func (db *DB) Beginx() (*Tx, error) { - tx, err := db.DB.Begin() - if err != nil { - return nil, err - } - return &Tx{Tx: tx, driverName: db.driverName, unsafe: db.unsafe, Mapper: db.Mapper}, err -} - -// Queryx queries the database and returns an *sqlx.Rows. -// Any placeholder parameters are replaced with supplied args. -func (db *DB) Queryx(query string, args ...interface{}) (*Rows, error) { - r, err := db.DB.Query(query, args...) - if err != nil { - return nil, err - } - return &Rows{Rows: r, unsafe: db.unsafe, Mapper: db.Mapper}, err -} - -// QueryRowx queries the database and returns an *sqlx.Row. -// Any placeholder parameters are replaced with supplied args. -func (db *DB) QueryRowx(query string, args ...interface{}) *Row { - rows, err := db.DB.Query(query, args...) - return &Row{rows: rows, err: err, unsafe: db.unsafe, Mapper: db.Mapper} -} - -// MustExec (panic) runs MustExec using this database. -// Any placeholder parameters are replaced with supplied args. -func (db *DB) MustExec(query string, args ...interface{}) sql.Result { - return MustExec(db, query, args...) -} - -// Preparex returns an sqlx.Stmt instead of a sql.Stmt -func (db *DB) Preparex(query string) (*Stmt, error) { - return Preparex(db, query) -} - -// PrepareNamed returns an sqlx.NamedStmt -func (db *DB) PrepareNamed(query string) (*NamedStmt, error) { - return prepareNamed(db, query) -} - -// Tx is an sqlx wrapper around sql.Tx with extra functionality -type Tx struct { - *sql.Tx - driverName string - unsafe bool - Mapper *reflectx.Mapper -} - -// DriverName returns the driverName used by the DB which began this transaction. -func (tx *Tx) DriverName() string { - return tx.driverName -} - -// Rebind a query within a transaction's bindvar type. -func (tx *Tx) Rebind(query string) string { - return Rebind(BindType(tx.driverName), query) -} - -// Unsafe returns a version of Tx which will silently succeed to scan when -// columns in the SQL result have no fields in the destination struct. -func (tx *Tx) Unsafe() *Tx { - return &Tx{Tx: tx.Tx, driverName: tx.driverName, unsafe: true, Mapper: tx.Mapper} -} - -// BindNamed binds a query within a transaction's bindvar type. -func (tx *Tx) BindNamed(query string, arg interface{}) (string, []interface{}, error) { - return bindNamedMapper(BindType(tx.driverName), query, arg, tx.Mapper) -} - -// NamedQuery within a transaction. -// Any named placeholder parameters are replaced with fields from arg. -func (tx *Tx) NamedQuery(query string, arg interface{}) (*Rows, error) { - return NamedQuery(tx, query, arg) -} - -// NamedExec a named query within a transaction. -// Any named placeholder parameters are replaced with fields from arg. -func (tx *Tx) NamedExec(query string, arg interface{}) (sql.Result, error) { - return NamedExec(tx, query, arg) -} - -// Select within a transaction. -// Any placeholder parameters are replaced with supplied args. -func (tx *Tx) Select(dest interface{}, query string, args ...interface{}) error { - return Select(tx, dest, query, args...) -} - -// Queryx within a transaction. -// Any placeholder parameters are replaced with supplied args. -func (tx *Tx) Queryx(query string, args ...interface{}) (*Rows, error) { - r, err := tx.Tx.Query(query, args...) - if err != nil { - return nil, err - } - return &Rows{Rows: r, unsafe: tx.unsafe, Mapper: tx.Mapper}, err -} - -// QueryRowx within a transaction. -// Any placeholder parameters are replaced with supplied args. -func (tx *Tx) QueryRowx(query string, args ...interface{}) *Row { - rows, err := tx.Tx.Query(query, args...) - return &Row{rows: rows, err: err, unsafe: tx.unsafe, Mapper: tx.Mapper} -} - -// Get within a transaction. -// Any placeholder parameters are replaced with supplied args. -// An error is returned if the result set is empty. -func (tx *Tx) Get(dest interface{}, query string, args ...interface{}) error { - return Get(tx, dest, query, args...) -} - -// MustExec runs MustExec within a transaction. -// Any placeholder parameters are replaced with supplied args. -func (tx *Tx) MustExec(query string, args ...interface{}) sql.Result { - return MustExec(tx, query, args...) -} - -// Preparex a statement within a transaction. -func (tx *Tx) Preparex(query string) (*Stmt, error) { - return Preparex(tx, query) -} - -// Stmtx returns a version of the prepared statement which runs within a transaction. Provided -// stmt can be either *sql.Stmt or *sqlx.Stmt. -func (tx *Tx) Stmtx(stmt interface{}) *Stmt { - var s *sql.Stmt - switch v := stmt.(type) { - case Stmt: - s = v.Stmt - case *Stmt: - s = v.Stmt - case *sql.Stmt: - s = v - default: - panic(fmt.Sprintf("non-statement type %v passed to Stmtx", reflect.ValueOf(stmt).Type())) - } - return &Stmt{Stmt: tx.Stmt(s), Mapper: tx.Mapper} -} - -// NamedStmt returns a version of the prepared statement which runs within a transaction. -func (tx *Tx) NamedStmt(stmt *NamedStmt) *NamedStmt { - return &NamedStmt{ - QueryString: stmt.QueryString, - Params: stmt.Params, - Stmt: tx.Stmtx(stmt.Stmt), - } -} - -// PrepareNamed returns an sqlx.NamedStmt -func (tx *Tx) PrepareNamed(query string) (*NamedStmt, error) { - return prepareNamed(tx, query) -} - -// Stmt is an sqlx wrapper around sql.Stmt with extra functionality -type Stmt struct { - *sql.Stmt - unsafe bool - Mapper *reflectx.Mapper -} - -// Unsafe returns a version of Stmt which will silently succeed to scan when -// columns in the SQL result have no fields in the destination struct. -func (s *Stmt) Unsafe() *Stmt { - return &Stmt{Stmt: s.Stmt, unsafe: true, Mapper: s.Mapper} -} - -// Select using the prepared statement. -// Any placeholder parameters are replaced with supplied args. -func (s *Stmt) Select(dest interface{}, args ...interface{}) error { - return Select(&qStmt{s}, dest, "", args...) -} - -// Get using the prepared statement. -// Any placeholder parameters are replaced with supplied args. -// An error is returned if the result set is empty. -func (s *Stmt) Get(dest interface{}, args ...interface{}) error { - return Get(&qStmt{s}, dest, "", args...) -} - -// MustExec (panic) using this statement. Note that the query portion of the error -// output will be blank, as Stmt does not expose its query. -// Any placeholder parameters are replaced with supplied args. -func (s *Stmt) MustExec(args ...interface{}) sql.Result { - return MustExec(&qStmt{s}, "", args...) -} - -// QueryRowx using this statement. -// Any placeholder parameters are replaced with supplied args. -func (s *Stmt) QueryRowx(args ...interface{}) *Row { - qs := &qStmt{s} - return qs.QueryRowx("", args...) -} - -// Queryx using this statement. -// Any placeholder parameters are replaced with supplied args. -func (s *Stmt) Queryx(args ...interface{}) (*Rows, error) { - qs := &qStmt{s} - return qs.Queryx("", args...) -} - -// qStmt is an unexposed wrapper which lets you use a Stmt as a Queryer & Execer by -// implementing those interfaces and ignoring the `query` argument. -type qStmt struct{ *Stmt } - -func (q *qStmt) Query(query string, args ...interface{}) (*sql.Rows, error) { - return q.Stmt.Query(args...) -} - -func (q *qStmt) Queryx(query string, args ...interface{}) (*Rows, error) { - r, err := q.Stmt.Query(args...) - if err != nil { - return nil, err - } - return &Rows{Rows: r, unsafe: q.Stmt.unsafe, Mapper: q.Stmt.Mapper}, err -} - -func (q *qStmt) QueryRowx(query string, args ...interface{}) *Row { - rows, err := q.Stmt.Query(args...) - return &Row{rows: rows, err: err, unsafe: q.Stmt.unsafe, Mapper: q.Stmt.Mapper} -} - -func (q *qStmt) Exec(query string, args ...interface{}) (sql.Result, error) { - return q.Stmt.Exec(args...) -} - -// Rows is a wrapper around sql.Rows which caches costly reflect operations -// during a looped StructScan -type Rows struct { - *sql.Rows - unsafe bool - Mapper *reflectx.Mapper - // these fields cache memory use for a rows during iteration w/ structScan - started bool - fields [][]int - values []interface{} -} - -// SliceScan using this Rows. -func (r *Rows) SliceScan() ([]interface{}, error) { - return SliceScan(r) -} - -// MapScan using this Rows. -func (r *Rows) MapScan(dest map[string]interface{}) error { - return MapScan(r, dest) -} - -// StructScan is like sql.Rows.Scan, but scans a single Row into a single Struct. -// Use this and iterate over Rows manually when the memory load of Select() might be -// prohibitive. *Rows.StructScan caches the reflect work of matching up column -// positions to fields to avoid that overhead per scan, which means it is not safe -// to run StructScan on the same Rows instance with different struct types. -func (r *Rows) StructScan(dest interface{}) error { - v := reflect.ValueOf(dest) - - if v.Kind() != reflect.Ptr { - return errors.New("must pass a pointer, not a value, to StructScan destination") - } - - v = v.Elem() - - if !r.started { - columns, err := r.Columns() - if err != nil { - return err - } - m := r.Mapper - - r.fields = m.TraversalsByName(v.Type(), columns) - // if we are not unsafe and are missing fields, return an error - if f, err := missingFields(r.fields); err != nil && !r.unsafe { - return fmt.Errorf("missing destination name %s in %T", columns[f], dest) - } - r.values = make([]interface{}, len(columns)) - r.started = true - } - - err := fieldsByTraversal(v, r.fields, r.values, true) - if err != nil { - return err - } - // scan into the struct field pointers and append to our results - err = r.Scan(r.values...) - if err != nil { - return err - } - return r.Err() -} - -// Connect to a database and verify with a ping. -func Connect(driverName, dataSourceName string) (*DB, error) { - db, err := Open(driverName, dataSourceName) - if err != nil { - return nil, err - } - err = db.Ping() - if err != nil { - db.Close() - return nil, err - } - return db, nil -} - -// MustConnect connects to a database and panics on error. -func MustConnect(driverName, dataSourceName string) *DB { - db, err := Connect(driverName, dataSourceName) - if err != nil { - panic(err) - } - return db -} - -// Preparex prepares a statement. -func Preparex(p Preparer, query string) (*Stmt, error) { - s, err := p.Prepare(query) - if err != nil { - return nil, err - } - return &Stmt{Stmt: s, unsafe: isUnsafe(p), Mapper: mapperFor(p)}, err -} - -// Select executes a query using the provided Queryer, and StructScans each row -// into dest, which must be a slice. If the slice elements are scannable, then -// the result set must have only one column. Otherwise, StructScan is used. -// The *sql.Rows are closed automatically. -// Any placeholder parameters are replaced with supplied args. -func Select(q Queryer, dest interface{}, query string, args ...interface{}) error { - rows, err := q.Queryx(query, args...) - if err != nil { - return err - } - // if something happens here, we want to make sure the rows are Closed - defer rows.Close() - return scanAll(rows, dest, false) -} - -// Get does a QueryRow using the provided Queryer, and scans the resulting row -// to dest. If dest is scannable, the result must only have one column. Otherwise, -// StructScan is used. Get will return sql.ErrNoRows like row.Scan would. -// Any placeholder parameters are replaced with supplied args. -// An error is returned if the result set is empty. -func Get(q Queryer, dest interface{}, query string, args ...interface{}) error { - r := q.QueryRowx(query, args...) - return r.scanAny(dest, false) -} - -// LoadFile exec's every statement in a file (as a single call to Exec). -// LoadFile may return a nil *sql.Result if errors are encountered locating or -// reading the file at path. LoadFile reads the entire file into memory, so it -// is not suitable for loading large data dumps, but can be useful for initializing -// schemas or loading indexes. -// -// FIXME: this does not really work with multi-statement files for mattn/go-sqlite3 -// or the go-mysql-driver/mysql drivers; pq seems to be an exception here. Detecting -// this by requiring something with DriverName() and then attempting to split the -// queries will be difficult to get right, and its current driver-specific behavior -// is deemed at least not complex in its incorrectness. -func LoadFile(e Execer, path string) (*sql.Result, error) { - realpath, err := filepath.Abs(path) - if err != nil { - return nil, err - } - contents, err := ioutil.ReadFile(realpath) - if err != nil { - return nil, err - } - res, err := e.Exec(string(contents)) - return &res, err -} - -// MustExec execs the query using e and panics if there was an error. -// Any placeholder parameters are replaced with supplied args. -func MustExec(e Execer, query string, args ...interface{}) sql.Result { - res, err := e.Exec(query, args...) - if err != nil { - panic(err) - } - return res -} - -// SliceScan using this Rows. -func (r *Row) SliceScan() ([]interface{}, error) { - return SliceScan(r) -} - -// MapScan using this Rows. -func (r *Row) MapScan(dest map[string]interface{}) error { - return MapScan(r, dest) -} - -func (r *Row) scanAny(dest interface{}, structOnly bool) error { - if r.err != nil { - return r.err - } - if r.rows == nil { - r.err = sql.ErrNoRows - return r.err - } - defer r.rows.Close() - - v := reflect.ValueOf(dest) - if v.Kind() != reflect.Ptr { - return errors.New("must pass a pointer, not a value, to StructScan destination") - } - if v.IsNil() { - return errors.New("nil pointer passed to StructScan destination") - } - - base := reflectx.Deref(v.Type()) - scannable := isScannable(base) - - if structOnly && scannable { - return structOnlyError(base) - } - - columns, err := r.Columns() - if err != nil { - return err - } - - if scannable && len(columns) > 1 { - return fmt.Errorf("scannable dest type %s with >1 columns (%d) in result", base.Kind(), len(columns)) - } - - if scannable { - return r.Scan(dest) - } - - m := r.Mapper - - fields := m.TraversalsByName(v.Type(), columns) - // if we are not unsafe and are missing fields, return an error - if f, err := missingFields(fields); err != nil && !r.unsafe { - return fmt.Errorf("missing destination name %s in %T", columns[f], dest) - } - values := make([]interface{}, len(columns)) - - err = fieldsByTraversal(v, fields, values, true) - if err != nil { - return err - } - // scan into the struct field pointers and append to our results - return r.Scan(values...) -} - -// StructScan a single Row into dest. -func (r *Row) StructScan(dest interface{}) error { - return r.scanAny(dest, true) -} - -// SliceScan a row, returning a []interface{} with values similar to MapScan. -// This function is primarily intended for use where the number of columns -// is not known. Because you can pass an []interface{} directly to Scan, -// it's recommended that you do that as it will not have to allocate new -// slices per row. -func SliceScan(r ColScanner) ([]interface{}, error) { - // ignore r.started, since we needn't use reflect for anything. - columns, err := r.Columns() - if err != nil { - return []interface{}{}, err - } - - values := make([]interface{}, len(columns)) - for i := range values { - values[i] = new(interface{}) - } - - err = r.Scan(values...) - - if err != nil { - return values, err - } - - for i := range columns { - values[i] = *(values[i].(*interface{})) - } - - return values, r.Err() -} - -// MapScan scans a single Row into the dest map[string]interface{}. -// Use this to get results for SQL that might not be under your control -// (for instance, if you're building an interface for an SQL server that -// executes SQL from input). Please do not use this as a primary interface! -// This will modify the map sent to it in place, so reuse the same map with -// care. Columns which occur more than once in the result will overwrite -// each other! -func MapScan(r ColScanner, dest map[string]interface{}) error { - // ignore r.started, since we needn't use reflect for anything. - columns, err := r.Columns() - if err != nil { - return err - } - - values := make([]interface{}, len(columns)) - for i := range values { - values[i] = new(interface{}) - } - - err = r.Scan(values...) - if err != nil { - return err - } - - for i, column := range columns { - dest[column] = *(values[i].(*interface{})) - } - - return r.Err() -} - -type rowsi interface { - Close() error - Columns() ([]string, error) - Err() error - Next() bool - Scan(...interface{}) error -} - -// structOnlyError returns an error appropriate for type when a non-scannable -// struct is expected but something else is given -func structOnlyError(t reflect.Type) error { - isStruct := t.Kind() == reflect.Struct - isScanner := reflect.PtrTo(t).Implements(_scannerInterface) - if !isStruct { - return fmt.Errorf("expected %s but got %s", reflect.Struct, t.Kind()) - } - if isScanner { - return fmt.Errorf("structscan expects a struct dest but the provided struct type %s implements scanner", t.Name()) - } - return fmt.Errorf("expected a struct, but struct %s has no exported fields", t.Name()) -} - -// scanAll scans all rows into a destination, which must be a slice of any -// type. If the destination slice type is a Struct, then StructScan will be -// used on each row. If the destination is some other kind of base type, then -// each row must only have one column which can scan into that type. This -// allows you to do something like: -// -// rows, _ := db.Query("select id from people;") -// var ids []int -// scanAll(rows, &ids, false) -// -// and ids will be a list of the id results. I realize that this is a desirable -// interface to expose to users, but for now it will only be exposed via changes -// to `Get` and `Select`. The reason that this has been implemented like this is -// this is the only way to not duplicate reflect work in the new API while -// maintaining backwards compatibility. -func scanAll(rows rowsi, dest interface{}, structOnly bool) error { - var v, vp reflect.Value - - value := reflect.ValueOf(dest) - - // json.Unmarshal returns errors for these - if value.Kind() != reflect.Ptr { - return errors.New("must pass a pointer, not a value, to StructScan destination") - } - if value.IsNil() { - return errors.New("nil pointer passed to StructScan destination") - } - direct := reflect.Indirect(value) - - slice, err := baseType(value.Type(), reflect.Slice) - if err != nil { - return err - } - - isPtr := slice.Elem().Kind() == reflect.Ptr - base := reflectx.Deref(slice.Elem()) - scannable := isScannable(base) - - if structOnly && scannable { - return structOnlyError(base) - } - - columns, err := rows.Columns() - if err != nil { - return err - } - - // if it's a base type make sure it only has 1 column; if not return an error - if scannable && len(columns) > 1 { - return fmt.Errorf("non-struct dest type %s with >1 columns (%d)", base.Kind(), len(columns)) - } - - if !scannable { - var values []interface{} - var m *reflectx.Mapper - - switch rows.(type) { - case *Rows: - m = rows.(*Rows).Mapper - default: - m = mapper() - } - - fields := m.TraversalsByName(base, columns) - // if we are not unsafe and are missing fields, return an error - if f, err := missingFields(fields); err != nil && !isUnsafe(rows) { - return fmt.Errorf("missing destination name %s in %T", columns[f], dest) - } - values = make([]interface{}, len(columns)) - - for rows.Next() { - // create a new struct type (which returns PtrTo) and indirect it - vp = reflect.New(base) - v = reflect.Indirect(vp) - - err = fieldsByTraversal(v, fields, values, true) - if err != nil { - return err - } - - // scan into the struct field pointers and append to our results - err = rows.Scan(values...) - if err != nil { - return err - } - - if isPtr { - direct.Set(reflect.Append(direct, vp)) - } else { - direct.Set(reflect.Append(direct, v)) - } - } - } else { - for rows.Next() { - vp = reflect.New(base) - err = rows.Scan(vp.Interface()) - if err != nil { - return err - } - // append - if isPtr { - direct.Set(reflect.Append(direct, vp)) - } else { - direct.Set(reflect.Append(direct, reflect.Indirect(vp))) - } - } - } - - return rows.Err() -} - -// FIXME: StructScan was the very first bit of API in sqlx, and now unfortunately -// it doesn't really feel like it's named properly. There is an incongruency -// between this and the way that StructScan (which might better be ScanStruct -// anyway) works on a rows object. - -// StructScan all rows from an sql.Rows or an sqlx.Rows into the dest slice. -// StructScan will scan in the entire rows result, so if you do not want to -// allocate structs for the entire result, use Queryx and see sqlx.Rows.StructScan. -// If rows is sqlx.Rows, it will use its mapper, otherwise it will use the default. -func StructScan(rows rowsi, dest interface{}) error { - return scanAll(rows, dest, true) - -} - -// reflect helpers - -func baseType(t reflect.Type, expected reflect.Kind) (reflect.Type, error) { - t = reflectx.Deref(t) - if t.Kind() != expected { - return nil, fmt.Errorf("expected %s but got %s", expected, t.Kind()) - } - return t, nil -} - -// fieldsByName fills a values interface with fields from the passed value based -// on the traversals in int. If ptrs is true, return addresses instead of values. -// We write this instead of using FieldsByName to save allocations and map lookups -// when iterating over many rows. Empty traversals will get an interface pointer. -// Because of the necessity of requesting ptrs or values, it's considered a bit too -// specialized for inclusion in reflectx itself. -func fieldsByTraversal(v reflect.Value, traversals [][]int, values []interface{}, ptrs bool) error { - v = reflect.Indirect(v) - if v.Kind() != reflect.Struct { - return errors.New("argument not a struct") - } - - for i, traversal := range traversals { - if len(traversal) == 0 { - values[i] = new(interface{}) - continue - } - f := reflectx.FieldByIndexes(v, traversal) - if ptrs { - values[i] = f.Addr().Interface() - } else { - values[i] = f.Interface() - } - } - return nil -} - -func missingFields(transversals [][]int) (field int, err error) { - for i, t := range transversals { - if len(t) == 0 { - return i, errors.New("missing field") - } - } - return 0, nil -} diff --git a/vendor/github.com/jmoiron/sqlx/sqlx_context.go b/vendor/github.com/jmoiron/sqlx/sqlx_context.go deleted file mode 100644 index 0603311..0000000 --- a/vendor/github.com/jmoiron/sqlx/sqlx_context.go +++ /dev/null @@ -1,346 +0,0 @@ -// +build go1.8 - -package sqlx - -import ( - "context" - "database/sql" - "fmt" - "io/ioutil" - "path/filepath" - "reflect" -) - -// ConnectContext to a database and verify with a ping. -func ConnectContext(ctx context.Context, driverName, dataSourceName string) (*DB, error) { - db, err := Open(driverName, dataSourceName) - if err != nil { - return db, err - } - err = db.PingContext(ctx) - return db, err -} - -// QueryerContext is an interface used by GetContext and SelectContext -type QueryerContext interface { - QueryContext(ctx context.Context, query string, args ...interface{}) (*sql.Rows, error) - QueryxContext(ctx context.Context, query string, args ...interface{}) (*Rows, error) - QueryRowxContext(ctx context.Context, query string, args ...interface{}) *Row -} - -// PreparerContext is an interface used by PreparexContext. -type PreparerContext interface { - PrepareContext(ctx context.Context, query string) (*sql.Stmt, error) -} - -// ExecerContext is an interface used by MustExecContext and LoadFileContext -type ExecerContext interface { - ExecContext(ctx context.Context, query string, args ...interface{}) (sql.Result, error) -} - -// ExtContext is a union interface which can bind, query, and exec, with Context -// used by NamedQueryContext and NamedExecContext. -type ExtContext interface { - binder - QueryerContext - ExecerContext -} - -// SelectContext executes a query using the provided Queryer, and StructScans -// each row into dest, which must be a slice. If the slice elements are -// scannable, then the result set must have only one column. Otherwise, -// StructScan is used. The *sql.Rows are closed automatically. -// Any placeholder parameters are replaced with supplied args. -func SelectContext(ctx context.Context, q QueryerContext, dest interface{}, query string, args ...interface{}) error { - rows, err := q.QueryxContext(ctx, query, args...) - if err != nil { - return err - } - // if something happens here, we want to make sure the rows are Closed - defer rows.Close() - return scanAll(rows, dest, false) -} - -// PreparexContext prepares a statement. -// -// The provided context is used for the preparation of the statement, not for -// the execution of the statement. -func PreparexContext(ctx context.Context, p PreparerContext, query string) (*Stmt, error) { - s, err := p.PrepareContext(ctx, query) - if err != nil { - return nil, err - } - return &Stmt{Stmt: s, unsafe: isUnsafe(p), Mapper: mapperFor(p)}, err -} - -// GetContext does a QueryRow using the provided Queryer, and scans the -// resulting row to dest. If dest is scannable, the result must only have one -// column. Otherwise, StructScan is used. Get will return sql.ErrNoRows like -// row.Scan would. Any placeholder parameters are replaced with supplied args. -// An error is returned if the result set is empty. -func GetContext(ctx context.Context, q QueryerContext, dest interface{}, query string, args ...interface{}) error { - r := q.QueryRowxContext(ctx, query, args...) - return r.scanAny(dest, false) -} - -// LoadFileContext exec's every statement in a file (as a single call to Exec). -// LoadFileContext may return a nil *sql.Result if errors are encountered -// locating or reading the file at path. LoadFile reads the entire file into -// memory, so it is not suitable for loading large data dumps, but can be useful -// for initializing schemas or loading indexes. -// -// FIXME: this does not really work with multi-statement files for mattn/go-sqlite3 -// or the go-mysql-driver/mysql drivers; pq seems to be an exception here. Detecting -// this by requiring something with DriverName() and then attempting to split the -// queries will be difficult to get right, and its current driver-specific behavior -// is deemed at least not complex in its incorrectness. -func LoadFileContext(ctx context.Context, e ExecerContext, path string) (*sql.Result, error) { - realpath, err := filepath.Abs(path) - if err != nil { - return nil, err - } - contents, err := ioutil.ReadFile(realpath) - if err != nil { - return nil, err - } - res, err := e.ExecContext(ctx, string(contents)) - return &res, err -} - -// MustExecContext execs the query using e and panics if there was an error. -// Any placeholder parameters are replaced with supplied args. -func MustExecContext(ctx context.Context, e ExecerContext, query string, args ...interface{}) sql.Result { - res, err := e.ExecContext(ctx, query, args...) - if err != nil { - panic(err) - } - return res -} - -// PrepareNamedContext returns an sqlx.NamedStmt -func (db *DB) PrepareNamedContext(ctx context.Context, query string) (*NamedStmt, error) { - return prepareNamedContext(ctx, db, query) -} - -// NamedQueryContext using this DB. -// Any named placeholder parameters are replaced with fields from arg. -func (db *DB) NamedQueryContext(ctx context.Context, query string, arg interface{}) (*Rows, error) { - return NamedQueryContext(ctx, db, query, arg) -} - -// NamedExecContext using this DB. -// Any named placeholder parameters are replaced with fields from arg. -func (db *DB) NamedExecContext(ctx context.Context, query string, arg interface{}) (sql.Result, error) { - return NamedExecContext(ctx, db, query, arg) -} - -// SelectContext using this DB. -// Any placeholder parameters are replaced with supplied args. -func (db *DB) SelectContext(ctx context.Context, dest interface{}, query string, args ...interface{}) error { - return SelectContext(ctx, db, dest, query, args...) -} - -// GetContext using this DB. -// Any placeholder parameters are replaced with supplied args. -// An error is returned if the result set is empty. -func (db *DB) GetContext(ctx context.Context, dest interface{}, query string, args ...interface{}) error { - return GetContext(ctx, db, dest, query, args...) -} - -// PreparexContext returns an sqlx.Stmt instead of a sql.Stmt. -// -// The provided context is used for the preparation of the statement, not for -// the execution of the statement. -func (db *DB) PreparexContext(ctx context.Context, query string) (*Stmt, error) { - return PreparexContext(ctx, db, query) -} - -// QueryxContext queries the database and returns an *sqlx.Rows. -// Any placeholder parameters are replaced with supplied args. -func (db *DB) QueryxContext(ctx context.Context, query string, args ...interface{}) (*Rows, error) { - r, err := db.DB.QueryContext(ctx, query, args...) - if err != nil { - return nil, err - } - return &Rows{Rows: r, unsafe: db.unsafe, Mapper: db.Mapper}, err -} - -// QueryRowxContext queries the database and returns an *sqlx.Row. -// Any placeholder parameters are replaced with supplied args. -func (db *DB) QueryRowxContext(ctx context.Context, query string, args ...interface{}) *Row { - rows, err := db.DB.QueryContext(ctx, query, args...) - return &Row{rows: rows, err: err, unsafe: db.unsafe, Mapper: db.Mapper} -} - -// MustBeginTx starts a transaction, and panics on error. Returns an *sqlx.Tx instead -// of an *sql.Tx. -// -// The provided context is used until the transaction is committed or rolled -// back. If the context is canceled, the sql package will roll back the -// transaction. Tx.Commit will return an error if the context provided to -// MustBeginContext is canceled. -func (db *DB) MustBeginTx(ctx context.Context, opts *sql.TxOptions) *Tx { - tx, err := db.BeginTxx(ctx, opts) - if err != nil { - panic(err) - } - return tx -} - -// MustExecContext (panic) runs MustExec using this database. -// Any placeholder parameters are replaced with supplied args. -func (db *DB) MustExecContext(ctx context.Context, query string, args ...interface{}) sql.Result { - return MustExecContext(ctx, db, query, args...) -} - -// BeginTxx begins a transaction and returns an *sqlx.Tx instead of an -// *sql.Tx. -// -// The provided context is used until the transaction is committed or rolled -// back. If the context is canceled, the sql package will roll back the -// transaction. Tx.Commit will return an error if the context provided to -// BeginxContext is canceled. -func (db *DB) BeginTxx(ctx context.Context, opts *sql.TxOptions) (*Tx, error) { - tx, err := db.DB.BeginTx(ctx, opts) - if err != nil { - return nil, err - } - return &Tx{Tx: tx, driverName: db.driverName, unsafe: db.unsafe, Mapper: db.Mapper}, err -} - -// StmtxContext returns a version of the prepared statement which runs within a -// transaction. Provided stmt can be either *sql.Stmt or *sqlx.Stmt. -func (tx *Tx) StmtxContext(ctx context.Context, stmt interface{}) *Stmt { - var s *sql.Stmt - switch v := stmt.(type) { - case Stmt: - s = v.Stmt - case *Stmt: - s = v.Stmt - case *sql.Stmt: - s = v - default: - panic(fmt.Sprintf("non-statement type %v passed to Stmtx", reflect.ValueOf(stmt).Type())) - } - return &Stmt{Stmt: tx.StmtContext(ctx, s), Mapper: tx.Mapper} -} - -// NamedStmtContext returns a version of the prepared statement which runs -// within a transaction. -func (tx *Tx) NamedStmtContext(ctx context.Context, stmt *NamedStmt) *NamedStmt { - return &NamedStmt{ - QueryString: stmt.QueryString, - Params: stmt.Params, - Stmt: tx.StmtxContext(ctx, stmt.Stmt), - } -} - -// PreparexContext returns an sqlx.Stmt instead of a sql.Stmt. -// -// The provided context is used for the preparation of the statement, not for -// the execution of the statement. -func (tx *Tx) PreparexContext(ctx context.Context, query string) (*Stmt, error) { - return PreparexContext(ctx, tx, query) -} - -// PrepareNamedContext returns an sqlx.NamedStmt -func (tx *Tx) PrepareNamedContext(ctx context.Context, query string) (*NamedStmt, error) { - return prepareNamedContext(ctx, tx, query) -} - -// MustExecContext runs MustExecContext within a transaction. -// Any placeholder parameters are replaced with supplied args. -func (tx *Tx) MustExecContext(ctx context.Context, query string, args ...interface{}) sql.Result { - return MustExecContext(ctx, tx, query, args...) -} - -// QueryxContext within a transaction and context. -// Any placeholder parameters are replaced with supplied args. -func (tx *Tx) QueryxContext(ctx context.Context, query string, args ...interface{}) (*Rows, error) { - r, err := tx.Tx.QueryContext(ctx, query, args...) - if err != nil { - return nil, err - } - return &Rows{Rows: r, unsafe: tx.unsafe, Mapper: tx.Mapper}, err -} - -// SelectContext within a transaction and context. -// Any placeholder parameters are replaced with supplied args. -func (tx *Tx) SelectContext(ctx context.Context, dest interface{}, query string, args ...interface{}) error { - return SelectContext(ctx, tx, dest, query, args...) -} - -// GetContext within a transaction and context. -// Any placeholder parameters are replaced with supplied args. -// An error is returned if the result set is empty. -func (tx *Tx) GetContext(ctx context.Context, dest interface{}, query string, args ...interface{}) error { - return GetContext(ctx, tx, dest, query, args...) -} - -// QueryRowxContext within a transaction and context. -// Any placeholder parameters are replaced with supplied args. -func (tx *Tx) QueryRowxContext(ctx context.Context, query string, args ...interface{}) *Row { - rows, err := tx.Tx.QueryContext(ctx, query, args...) - return &Row{rows: rows, err: err, unsafe: tx.unsafe, Mapper: tx.Mapper} -} - -// NamedExecContext using this Tx. -// Any named placeholder parameters are replaced with fields from arg. -func (tx *Tx) NamedExecContext(ctx context.Context, query string, arg interface{}) (sql.Result, error) { - return NamedExecContext(ctx, tx, query, arg) -} - -// SelectContext using the prepared statement. -// Any placeholder parameters are replaced with supplied args. -func (s *Stmt) SelectContext(ctx context.Context, dest interface{}, args ...interface{}) error { - return SelectContext(ctx, &qStmt{s}, dest, "", args...) -} - -// GetContext using the prepared statement. -// Any placeholder parameters are replaced with supplied args. -// An error is returned if the result set is empty. -func (s *Stmt) GetContext(ctx context.Context, dest interface{}, args ...interface{}) error { - return GetContext(ctx, &qStmt{s}, dest, "", args...) -} - -// MustExecContext (panic) using this statement. Note that the query portion of -// the error output will be blank, as Stmt does not expose its query. -// Any placeholder parameters are replaced with supplied args. -func (s *Stmt) MustExecContext(ctx context.Context, args ...interface{}) sql.Result { - return MustExecContext(ctx, &qStmt{s}, "", args...) -} - -// QueryRowxContext using this statement. -// Any placeholder parameters are replaced with supplied args. -func (s *Stmt) QueryRowxContext(ctx context.Context, args ...interface{}) *Row { - qs := &qStmt{s} - return qs.QueryRowxContext(ctx, "", args...) -} - -// QueryxContext using this statement. -// Any placeholder parameters are replaced with supplied args. -func (s *Stmt) QueryxContext(ctx context.Context, args ...interface{}) (*Rows, error) { - qs := &qStmt{s} - return qs.QueryxContext(ctx, "", args...) -} - -func (q *qStmt) QueryContext(ctx context.Context, query string, args ...interface{}) (*sql.Rows, error) { - return q.Stmt.QueryContext(ctx, args...) -} - -func (q *qStmt) QueryxContext(ctx context.Context, query string, args ...interface{}) (*Rows, error) { - r, err := q.Stmt.QueryContext(ctx, args...) - if err != nil { - return nil, err - } - return &Rows{Rows: r, unsafe: q.Stmt.unsafe, Mapper: q.Stmt.Mapper}, err -} - -func (q *qStmt) QueryRowxContext(ctx context.Context, query string, args ...interface{}) *Row { - rows, err := q.Stmt.QueryContext(ctx, args...) - return &Row{rows: rows, err: err, unsafe: q.Stmt.unsafe, Mapper: q.Stmt.Mapper} -} - -func (q *qStmt) ExecContext(ctx context.Context, query string, args ...interface{}) (sql.Result, error) { - return q.Stmt.ExecContext(ctx, args...) -} diff --git a/vendor/github.com/labstack/echo/.editorconfig b/vendor/github.com/labstack/echo/.editorconfig deleted file mode 100644 index 17ae50d..0000000 --- a/vendor/github.com/labstack/echo/.editorconfig +++ /dev/null @@ -1,25 +0,0 @@ -# EditorConfig coding styles definitions. For more information about the -# properties used in this file, please see the EditorConfig documentation: -# http://editorconfig.org/ - -# indicate this is the root of the project -root = true - -[*] -charset = utf-8 - -end_of_line = LF -insert_final_newline = true -trim_trailing_whitespace = true - -indent_style = space -indent_size = 2 - -[Makefile] -indent_style = tab - -[*.md] -trim_trailing_whitespace = false - -[*.go] -indent_style = tab diff --git a/vendor/github.com/labstack/echo/.gitattributes b/vendor/github.com/labstack/echo/.gitattributes deleted file mode 100644 index 49b63e5..0000000 --- a/vendor/github.com/labstack/echo/.gitattributes +++ /dev/null @@ -1,20 +0,0 @@ -# Automatically normalize line endings for all text-based files -# http://git-scm.com/docs/gitattributes#_end_of_line_conversion -* text=auto - -# For the following file types, normalize line endings to LF on checking and -# prevent conversion to CRLF when they are checked out (this is required in -# order to prevent newline related issues) -.* text eol=lf -*.go text eol=lf -*.yml text eol=lf -*.html text eol=lf -*.css text eol=lf -*.js text eol=lf -*.json text eol=lf -LICENSE text eol=lf - -# Exclude `website` and `cookbook` from GitHub's language statistics -# https://github.com/github/linguist#using-gitattributes -cookbook/* linguist-documentation -website/* linguist-documentation diff --git a/vendor/github.com/labstack/echo/.gitignore b/vendor/github.com/labstack/echo/.gitignore deleted file mode 100644 index dd74acc..0000000 --- a/vendor/github.com/labstack/echo/.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -.DS_Store -coverage.txt -_test -vendor -.idea -*.iml -*.out diff --git a/vendor/github.com/labstack/echo/.travis.yml b/vendor/github.com/labstack/echo/.travis.yml deleted file mode 100644 index 30346d7..0000000 --- a/vendor/github.com/labstack/echo/.travis.yml +++ /dev/null @@ -1,16 +0,0 @@ -language: go -go: - - 1.11.x - - tip -env: - - GO111MODULE=on -install: - - go get -v golang.org/x/lint/golint -script: - - golint -set_exit_status ./... - - go test -race -coverprofile=coverage.txt -covermode=atomic ./... -after_success: - - bash <(curl -s https://codecov.io/bash) -matrix: - allow_failures: - - go: tip diff --git a/vendor/github.com/labstack/echo/LICENSE b/vendor/github.com/labstack/echo/LICENSE deleted file mode 100644 index b5b006b..0000000 --- a/vendor/github.com/labstack/echo/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2017 LabStack - -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/labstack/echo/Makefile b/vendor/github.com/labstack/echo/Makefile deleted file mode 100644 index dfcb6c0..0000000 --- a/vendor/github.com/labstack/echo/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -tag: - @git tag `grep -P '^\tversion = ' echo.go|cut -f2 -d'"'` - @git tag|grep -v ^v diff --git a/vendor/github.com/labstack/echo/README.md b/vendor/github.com/labstack/echo/README.md deleted file mode 100644 index 49e4d3b..0000000 --- a/vendor/github.com/labstack/echo/README.md +++ /dev/null @@ -1,99 +0,0 @@ - - -[![Sourcegraph](https://sourcegraph.com/github.com/labstack/echo/-/badge.svg?style=flat-square)](https://sourcegraph.com/github.com/labstack/echo?badge) -[![GoDoc](http://img.shields.io/badge/go-documentation-blue.svg?style=flat-square)](http://godoc.org/github.com/labstack/echo) -[![Go Report Card](https://goreportcard.com/badge/github.com/labstack/echo?style=flat-square)](https://goreportcard.com/report/github.com/labstack/echo) -[![Build Status](http://img.shields.io/travis/labstack/echo.svg?style=flat-square)](https://travis-ci.org/labstack/echo) -[![Codecov](https://img.shields.io/codecov/c/github/labstack/echo.svg?style=flat-square)](https://codecov.io/gh/labstack/echo) -[![Join the chat at https://gitter.im/labstack/echo](https://img.shields.io/badge/gitter-join%20chat-brightgreen.svg?style=flat-square)](https://gitter.im/labstack/echo) -[![Forum](https://img.shields.io/badge/community-forum-00afd1.svg?style=flat-square)](https://forum.labstack.com) -[![Twitter](https://img.shields.io/badge/twitter-@labstack-55acee.svg?style=flat-square)](https://twitter.com/labstack) -[![License](http://img.shields.io/badge/license-mit-blue.svg?style=flat-square)](https://raw.githubusercontent.com/labstack/echo/master/LICENSE) - -## Feature Overview - -- Optimized HTTP router which smartly prioritize routes -- Build robust and scalable RESTful APIs -- Group APIs -- Extensible middleware framework -- Define middleware at root, group or route level -- Data binding for JSON, XML and form payload -- Handy functions to send variety of HTTP responses -- Centralized HTTP error handling -- Template rendering with any template engine -- Define your format for the logger -- Highly customizable -- Automatic TLS via Let’s Encrypt -- HTTP/2 support - -## Benchmarks - -Date: 2018/03/15
-Source: https://github.com/vishr/web-framework-benchmark
-Lower is better! - - - -## [Guide](https://echo.labstack.com/guide) - -### Example - -```go -package main - -import ( - "net/http" - - "github.com/labstack/echo" - "github.com/labstack/echo/middleware" -) - -func main() { - // Echo instance - e := echo.New() - - // Middleware - e.Use(middleware.Logger()) - e.Use(middleware.Recover()) - - // Routes - e.GET("/", hello) - - // Start server - e.Logger.Fatal(e.Start(":1323")) -} - -// Handler -func hello(c echo.Context) error { - return c.String(http.StatusOK, "Hello, World!") -} -``` - -## Help - -- [Forum](https://forum.labstack.com) -- [Chat](https://gitter.im/labstack/echo) - -## Contribute - -**Use issues for everything** - -- For a small change, just send a PR. -- For bigger changes open an issue for discussion before sending a PR. -- PR should have: - - Test case - - Documentation - - Example (If it makes sense) -- You can also contribute by: - - Reporting issues - - Suggesting new features or enhancements - - Improve/fix documentation - -## Credits -- [Vishal Rana](https://github.com/vishr) - Author -- [Nitin Rana](https://github.com/nr17) - Consultant -- [Contributors](https://github.com/labstack/echo/graphs/contributors) - -## License - -[MIT](https://github.com/labstack/echo/blob/master/LICENSE) diff --git a/vendor/github.com/labstack/echo/bind.go b/vendor/github.com/labstack/echo/bind.go deleted file mode 100644 index 4998e25..0000000 --- a/vendor/github.com/labstack/echo/bind.go +++ /dev/null @@ -1,277 +0,0 @@ -package echo - -import ( - "encoding/json" - "encoding/xml" - "errors" - "fmt" - "net/http" - "reflect" - "strconv" - "strings" -) - -type ( - // Binder is the interface that wraps the Bind method. - Binder interface { - Bind(i interface{}, c Context) error - } - - // DefaultBinder is the default implementation of the Binder interface. - DefaultBinder struct{} - - // BindUnmarshaler is the interface used to wrap the UnmarshalParam method. - BindUnmarshaler interface { - // UnmarshalParam decodes and assigns a value from an form or query param. - UnmarshalParam(param string) error - } -) - -// Bind implements the `Binder#Bind` function. -func (b *DefaultBinder) Bind(i interface{}, c Context) (err error) { - req := c.Request() - if req.ContentLength == 0 { - if req.Method == http.MethodGet || req.Method == http.MethodDelete { - if err = b.bindData(i, c.QueryParams(), "query"); err != nil { - return NewHTTPError(http.StatusBadRequest, err.Error()).SetInternal(err) - } - return - } - return NewHTTPError(http.StatusBadRequest, "Request body can't be empty") - } - ctype := req.Header.Get(HeaderContentType) - switch { - case strings.HasPrefix(ctype, MIMEApplicationJSON): - if err = json.NewDecoder(req.Body).Decode(i); err != nil { - if ute, ok := err.(*json.UnmarshalTypeError); ok { - return NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Unmarshal type error: expected=%v, got=%v, field=%v, offset=%v", ute.Type, ute.Value, ute.Field, ute.Offset)).SetInternal(err) - } else if se, ok := err.(*json.SyntaxError); ok { - return NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Syntax error: offset=%v, error=%v", se.Offset, se.Error())).SetInternal(err) - } else { - return NewHTTPError(http.StatusBadRequest, err.Error()).SetInternal(err) - } - return NewHTTPError(http.StatusBadRequest, err.Error()) - } - case strings.HasPrefix(ctype, MIMEApplicationXML), strings.HasPrefix(ctype, MIMETextXML): - if err = xml.NewDecoder(req.Body).Decode(i); err != nil { - if ute, ok := err.(*xml.UnsupportedTypeError); ok { - return NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Unsupported type error: type=%v, error=%v", ute.Type, ute.Error())).SetInternal(err) - } else if se, ok := err.(*xml.SyntaxError); ok { - return NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Syntax error: line=%v, error=%v", se.Line, se.Error())).SetInternal(err) - } else { - return NewHTTPError(http.StatusBadRequest, err.Error()).SetInternal(err) - } - return NewHTTPError(http.StatusBadRequest, err.Error()) - } - case strings.HasPrefix(ctype, MIMEApplicationForm), strings.HasPrefix(ctype, MIMEMultipartForm): - params, err := c.FormParams() - if err != nil { - return NewHTTPError(http.StatusBadRequest, err.Error()).SetInternal(err) - } - if err = b.bindData(i, params, "form"); err != nil { - return NewHTTPError(http.StatusBadRequest, err.Error()).SetInternal(err) - } - default: - return ErrUnsupportedMediaType - } - return -} - -func (b *DefaultBinder) bindData(ptr interface{}, data map[string][]string, tag string) error { - typ := reflect.TypeOf(ptr).Elem() - val := reflect.ValueOf(ptr).Elem() - - if typ.Kind() != reflect.Struct { - return errors.New("binding element must be a struct") - } - - for i := 0; i < typ.NumField(); i++ { - typeField := typ.Field(i) - structField := val.Field(i) - if !structField.CanSet() { - continue - } - structFieldKind := structField.Kind() - inputFieldName := typeField.Tag.Get(tag) - - if inputFieldName == "" { - inputFieldName = typeField.Name - // If tag is nil, we inspect if the field is a struct. - if _, ok := bindUnmarshaler(structField); !ok && structFieldKind == reflect.Struct { - if err := b.bindData(structField.Addr().Interface(), data, tag); err != nil { - return err - } - continue - } - } - - inputValue, exists := data[inputFieldName] - if !exists { - // Go json.Unmarshal supports case insensitive binding. However the - // url params are bound case sensitive which is inconsistent. To - // fix this we must check all of the map values in a - // case-insensitive search. - inputFieldName = strings.ToLower(inputFieldName) - for k, v := range data { - if strings.ToLower(k) == inputFieldName { - inputValue = v - exists = true - break - } - } - } - - if !exists { - continue - } - - // Call this first, in case we're dealing with an alias to an array type - if ok, err := unmarshalField(typeField.Type.Kind(), inputValue[0], structField); ok { - if err != nil { - return err - } - continue - } - - numElems := len(inputValue) - if structFieldKind == reflect.Slice && numElems > 0 { - sliceOf := structField.Type().Elem().Kind() - slice := reflect.MakeSlice(structField.Type(), numElems, numElems) - for j := 0; j < numElems; j++ { - if err := setWithProperType(sliceOf, inputValue[j], slice.Index(j)); err != nil { - return err - } - } - val.Field(i).Set(slice) - } else if err := setWithProperType(typeField.Type.Kind(), inputValue[0], structField); err != nil { - return err - - } - } - return nil -} - -func setWithProperType(valueKind reflect.Kind, val string, structField reflect.Value) error { - // But also call it here, in case we're dealing with an array of BindUnmarshalers - if ok, err := unmarshalField(valueKind, val, structField); ok { - return err - } - - switch valueKind { - case reflect.Ptr: - return setWithProperType(structField.Elem().Kind(), val, structField.Elem()) - case reflect.Int: - return setIntField(val, 0, structField) - case reflect.Int8: - return setIntField(val, 8, structField) - case reflect.Int16: - return setIntField(val, 16, structField) - case reflect.Int32: - return setIntField(val, 32, structField) - case reflect.Int64: - return setIntField(val, 64, structField) - case reflect.Uint: - return setUintField(val, 0, structField) - case reflect.Uint8: - return setUintField(val, 8, structField) - case reflect.Uint16: - return setUintField(val, 16, structField) - case reflect.Uint32: - return setUintField(val, 32, structField) - case reflect.Uint64: - return setUintField(val, 64, structField) - case reflect.Bool: - return setBoolField(val, structField) - case reflect.Float32: - return setFloatField(val, 32, structField) - case reflect.Float64: - return setFloatField(val, 64, structField) - case reflect.String: - structField.SetString(val) - default: - return errors.New("unknown type") - } - return nil -} - -func unmarshalField(valueKind reflect.Kind, val string, field reflect.Value) (bool, error) { - switch valueKind { - case reflect.Ptr: - return unmarshalFieldPtr(val, field) - default: - return unmarshalFieldNonPtr(val, field) - } -} - -// bindUnmarshaler attempts to unmarshal a reflect.Value into a BindUnmarshaler -func bindUnmarshaler(field reflect.Value) (BindUnmarshaler, bool) { - ptr := reflect.New(field.Type()) - if ptr.CanInterface() { - iface := ptr.Interface() - if unmarshaler, ok := iface.(BindUnmarshaler); ok { - return unmarshaler, ok - } - } - return nil, false -} - -func unmarshalFieldNonPtr(value string, field reflect.Value) (bool, error) { - if unmarshaler, ok := bindUnmarshaler(field); ok { - err := unmarshaler.UnmarshalParam(value) - field.Set(reflect.ValueOf(unmarshaler).Elem()) - return true, err - } - return false, nil -} - -func unmarshalFieldPtr(value string, field reflect.Value) (bool, error) { - if field.IsNil() { - // Initialize the pointer to a nil value - field.Set(reflect.New(field.Type().Elem())) - } - return unmarshalFieldNonPtr(value, field.Elem()) -} - -func setIntField(value string, bitSize int, field reflect.Value) error { - if value == "" { - value = "0" - } - intVal, err := strconv.ParseInt(value, 10, bitSize) - if err == nil { - field.SetInt(intVal) - } - return err -} - -func setUintField(value string, bitSize int, field reflect.Value) error { - if value == "" { - value = "0" - } - uintVal, err := strconv.ParseUint(value, 10, bitSize) - if err == nil { - field.SetUint(uintVal) - } - return err -} - -func setBoolField(value string, field reflect.Value) error { - if value == "" { - value = "false" - } - boolVal, err := strconv.ParseBool(value) - if err == nil { - field.SetBool(boolVal) - } - return err -} - -func setFloatField(value string, bitSize int, field reflect.Value) error { - if value == "" { - value = "0.0" - } - floatVal, err := strconv.ParseFloat(value, bitSize) - if err == nil { - field.SetFloat(floatVal) - } - return err -} diff --git a/vendor/github.com/labstack/echo/context.go b/vendor/github.com/labstack/echo/context.go deleted file mode 100644 index d472270..0000000 --- a/vendor/github.com/labstack/echo/context.go +++ /dev/null @@ -1,600 +0,0 @@ -package echo - -import ( - "bytes" - "encoding/json" - "encoding/xml" - "fmt" - "io" - "mime/multipart" - "net" - "net/http" - "net/url" - "os" - "path/filepath" - "strings" -) - -type ( - // Context represents the context of the current HTTP request. It holds request and - // response objects, path, path parameters, data and registered handler. - Context interface { - // Request returns `*http.Request`. - Request() *http.Request - - // SetRequest sets `*http.Request`. - SetRequest(r *http.Request) - - // Response returns `*Response`. - Response() *Response - - // IsTLS returns true if HTTP connection is TLS otherwise false. - IsTLS() bool - - // IsWebSocket returns true if HTTP connection is WebSocket otherwise false. - IsWebSocket() bool - - // Scheme returns the HTTP protocol scheme, `http` or `https`. - Scheme() string - - // RealIP returns the client's network address based on `X-Forwarded-For` - // or `X-Real-IP` request header. - RealIP() string - - // Path returns the registered path for the handler. - Path() string - - // SetPath sets the registered path for the handler. - SetPath(p string) - - // Param returns path parameter by name. - Param(name string) string - - // ParamNames returns path parameter names. - ParamNames() []string - - // SetParamNames sets path parameter names. - SetParamNames(names ...string) - - // ParamValues returns path parameter values. - ParamValues() []string - - // SetParamValues sets path parameter values. - SetParamValues(values ...string) - - // QueryParam returns the query param for the provided name. - QueryParam(name string) string - - // QueryParams returns the query parameters as `url.Values`. - QueryParams() url.Values - - // QueryString returns the URL query string. - QueryString() string - - // FormValue returns the form field value for the provided name. - FormValue(name string) string - - // FormParams returns the form parameters as `url.Values`. - FormParams() (url.Values, error) - - // FormFile returns the multipart form file for the provided name. - FormFile(name string) (*multipart.FileHeader, error) - - // MultipartForm returns the multipart form. - MultipartForm() (*multipart.Form, error) - - // Cookie returns the named cookie provided in the request. - Cookie(name string) (*http.Cookie, error) - - // SetCookie adds a `Set-Cookie` header in HTTP response. - SetCookie(cookie *http.Cookie) - - // Cookies returns the HTTP cookies sent with the request. - Cookies() []*http.Cookie - - // Get retrieves data from the context. - Get(key string) interface{} - - // Set saves data in the context. - Set(key string, val interface{}) - - // Bind binds the request body into provided type `i`. The default binder - // does it based on Content-Type header. - Bind(i interface{}) error - - // Validate validates provided `i`. It is usually called after `Context#Bind()`. - // Validator must be registered using `Echo#Validator`. - Validate(i interface{}) error - - // Render renders a template with data and sends a text/html response with status - // code. Renderer must be registered using `Echo.Renderer`. - Render(code int, name string, data interface{}) error - - // HTML sends an HTTP response with status code. - HTML(code int, html string) error - - // HTMLBlob sends an HTTP blob response with status code. - HTMLBlob(code int, b []byte) error - - // String sends a string response with status code. - String(code int, s string) error - - // JSON sends a JSON response with status code. - JSON(code int, i interface{}) error - - // JSONPretty sends a pretty-print JSON with status code. - JSONPretty(code int, i interface{}, indent string) error - - // JSONBlob sends a JSON blob response with status code. - JSONBlob(code int, b []byte) error - - // JSONP sends a JSONP response with status code. It uses `callback` to construct - // the JSONP payload. - JSONP(code int, callback string, i interface{}) error - - // JSONPBlob sends a JSONP blob response with status code. It uses `callback` - // to construct the JSONP payload. - JSONPBlob(code int, callback string, b []byte) error - - // XML sends an XML response with status code. - XML(code int, i interface{}) error - - // XMLPretty sends a pretty-print XML with status code. - XMLPretty(code int, i interface{}, indent string) error - - // XMLBlob sends an XML blob response with status code. - XMLBlob(code int, b []byte) error - - // Blob sends a blob response with status code and content type. - Blob(code int, contentType string, b []byte) error - - // Stream sends a streaming response with status code and content type. - Stream(code int, contentType string, r io.Reader) error - - // File sends a response with the content of the file. - File(file string) error - - // Attachment sends a response as attachment, prompting client to save the - // file. - Attachment(file string, name string) error - - // Inline sends a response as inline, opening the file in the browser. - Inline(file string, name string) error - - // NoContent sends a response with no body and a status code. - NoContent(code int) error - - // Redirect redirects the request to a provided URL with status code. - Redirect(code int, url string) error - - // Error invokes the registered HTTP error handler. Generally used by middleware. - Error(err error) - - // Handler returns the matched handler by router. - Handler() HandlerFunc - - // SetHandler sets the matched handler by router. - SetHandler(h HandlerFunc) - - // Logger returns the `Logger` instance. - Logger() Logger - - // Echo returns the `Echo` instance. - Echo() *Echo - - // Reset resets the context after request completes. It must be called along - // with `Echo#AcquireContext()` and `Echo#ReleaseContext()`. - // See `Echo#ServeHTTP()` - Reset(r *http.Request, w http.ResponseWriter) - } - - context struct { - request *http.Request - response *Response - path string - pnames []string - pvalues []string - query url.Values - handler HandlerFunc - store Map - echo *Echo - } -) - -const ( - defaultMemory = 32 << 20 // 32 MB - indexPage = "index.html" - defaultIndent = " " -) - -func (c *context) writeContentType(value string) { - header := c.Response().Header() - if header.Get(HeaderContentType) == "" { - header.Set(HeaderContentType, value) - } -} - -func (c *context) Request() *http.Request { - return c.request -} - -func (c *context) SetRequest(r *http.Request) { - c.request = r -} - -func (c *context) Response() *Response { - return c.response -} - -func (c *context) IsTLS() bool { - return c.request.TLS != nil -} - -func (c *context) IsWebSocket() bool { - upgrade := c.request.Header.Get(HeaderUpgrade) - return upgrade == "websocket" || upgrade == "Websocket" -} - -func (c *context) Scheme() string { - // Can't use `r.Request.URL.Scheme` - // See: https://groups.google.com/forum/#!topic/golang-nuts/pMUkBlQBDF0 - if c.IsTLS() { - return "https" - } - if scheme := c.request.Header.Get(HeaderXForwardedProto); scheme != "" { - return scheme - } - if scheme := c.request.Header.Get(HeaderXForwardedProtocol); scheme != "" { - return scheme - } - if ssl := c.request.Header.Get(HeaderXForwardedSsl); ssl == "on" { - return "https" - } - if scheme := c.request.Header.Get(HeaderXUrlScheme); scheme != "" { - return scheme - } - return "http" -} - -func (c *context) RealIP() string { - if ip := c.request.Header.Get(HeaderXForwardedFor); ip != "" { - return strings.Split(ip, ", ")[0] - } - if ip := c.request.Header.Get(HeaderXRealIP); ip != "" { - return ip - } - ra, _, _ := net.SplitHostPort(c.request.RemoteAddr) - return ra -} - -func (c *context) Path() string { - return c.path -} - -func (c *context) SetPath(p string) { - c.path = p -} - -func (c *context) Param(name string) string { - for i, n := range c.pnames { - if i < len(c.pvalues) { - if n == name { - return c.pvalues[i] - } - } - } - return "" -} - -func (c *context) ParamNames() []string { - return c.pnames -} - -func (c *context) SetParamNames(names ...string) { - c.pnames = names -} - -func (c *context) ParamValues() []string { - return c.pvalues[:len(c.pnames)] -} - -func (c *context) SetParamValues(values ...string) { - c.pvalues = values -} - -func (c *context) QueryParam(name string) string { - if c.query == nil { - c.query = c.request.URL.Query() - } - return c.query.Get(name) -} - -func (c *context) QueryParams() url.Values { - if c.query == nil { - c.query = c.request.URL.Query() - } - return c.query -} - -func (c *context) QueryString() string { - return c.request.URL.RawQuery -} - -func (c *context) FormValue(name string) string { - return c.request.FormValue(name) -} - -func (c *context) FormParams() (url.Values, error) { - if strings.HasPrefix(c.request.Header.Get(HeaderContentType), MIMEMultipartForm) { - if err := c.request.ParseMultipartForm(defaultMemory); err != nil { - return nil, err - } - } else { - if err := c.request.ParseForm(); err != nil { - return nil, err - } - } - return c.request.Form, nil -} - -func (c *context) FormFile(name string) (*multipart.FileHeader, error) { - _, fh, err := c.request.FormFile(name) - return fh, err -} - -func (c *context) MultipartForm() (*multipart.Form, error) { - err := c.request.ParseMultipartForm(defaultMemory) - return c.request.MultipartForm, err -} - -func (c *context) Cookie(name string) (*http.Cookie, error) { - return c.request.Cookie(name) -} - -func (c *context) SetCookie(cookie *http.Cookie) { - http.SetCookie(c.Response(), cookie) -} - -func (c *context) Cookies() []*http.Cookie { - return c.request.Cookies() -} - -func (c *context) Get(key string) interface{} { - return c.store[key] -} - -func (c *context) Set(key string, val interface{}) { - if c.store == nil { - c.store = make(Map) - } - c.store[key] = val -} - -func (c *context) Bind(i interface{}) error { - return c.echo.Binder.Bind(i, c) -} - -func (c *context) Validate(i interface{}) error { - if c.echo.Validator == nil { - return ErrValidatorNotRegistered - } - return c.echo.Validator.Validate(i) -} - -func (c *context) Render(code int, name string, data interface{}) (err error) { - if c.echo.Renderer == nil { - return ErrRendererNotRegistered - } - buf := new(bytes.Buffer) - if err = c.echo.Renderer.Render(buf, name, data, c); err != nil { - return - } - return c.HTMLBlob(code, buf.Bytes()) -} - -func (c *context) HTML(code int, html string) (err error) { - return c.HTMLBlob(code, []byte(html)) -} - -func (c *context) HTMLBlob(code int, b []byte) (err error) { - return c.Blob(code, MIMETextHTMLCharsetUTF8, b) -} - -func (c *context) String(code int, s string) (err error) { - return c.Blob(code, MIMETextPlainCharsetUTF8, []byte(s)) -} - -func (c *context) jsonPBlob(code int, callback string, i interface{}) (err error) { - enc := json.NewEncoder(c.response) - _, pretty := c.QueryParams()["pretty"] - if c.echo.Debug || pretty { - enc.SetIndent("", " ") - } - c.writeContentType(MIMEApplicationJavaScriptCharsetUTF8) - c.response.WriteHeader(code) - if _, err = c.response.Write([]byte(callback + "(")); err != nil { - return - } - if err = enc.Encode(i); err != nil { - return - } - if _, err = c.response.Write([]byte(");")); err != nil { - return - } - return -} - -func (c *context) json(code int, i interface{}, indent string) error { - enc := json.NewEncoder(c.response) - if indent != "" { - enc.SetIndent("", indent) - } - c.writeContentType(MIMEApplicationJSONCharsetUTF8) - c.response.WriteHeader(code) - return enc.Encode(i) -} - -func (c *context) JSON(code int, i interface{}) (err error) { - indent := "" - if _, pretty := c.QueryParams()["pretty"]; c.echo.Debug || pretty { - indent = defaultIndent - } - return c.json(code, i, indent) -} - -func (c *context) JSONPretty(code int, i interface{}, indent string) (err error) { - return c.json(code, i, indent) -} - -func (c *context) JSONBlob(code int, b []byte) (err error) { - return c.Blob(code, MIMEApplicationJSONCharsetUTF8, b) -} - -func (c *context) JSONP(code int, callback string, i interface{}) (err error) { - return c.jsonPBlob(code, callback, i) -} - -func (c *context) JSONPBlob(code int, callback string, b []byte) (err error) { - c.writeContentType(MIMEApplicationJavaScriptCharsetUTF8) - c.response.WriteHeader(code) - if _, err = c.response.Write([]byte(callback + "(")); err != nil { - return - } - if _, err = c.response.Write(b); err != nil { - return - } - _, err = c.response.Write([]byte(");")) - return -} - -func (c *context) xml(code int, i interface{}, indent string) (err error) { - c.writeContentType(MIMEApplicationXMLCharsetUTF8) - c.response.WriteHeader(code) - enc := xml.NewEncoder(c.response) - if indent != "" { - enc.Indent("", indent) - } - if _, err = c.response.Write([]byte(xml.Header)); err != nil { - return - } - return enc.Encode(i) -} - -func (c *context) XML(code int, i interface{}) (err error) { - indent := "" - if _, pretty := c.QueryParams()["pretty"]; c.echo.Debug || pretty { - indent = defaultIndent - } - return c.xml(code, i, indent) -} - -func (c *context) XMLPretty(code int, i interface{}, indent string) (err error) { - return c.xml(code, i, indent) -} - -func (c *context) XMLBlob(code int, b []byte) (err error) { - c.writeContentType(MIMEApplicationXMLCharsetUTF8) - c.response.WriteHeader(code) - if _, err = c.response.Write([]byte(xml.Header)); err != nil { - return - } - _, err = c.response.Write(b) - return -} - -func (c *context) Blob(code int, contentType string, b []byte) (err error) { - c.writeContentType(contentType) - c.response.WriteHeader(code) - _, err = c.response.Write(b) - return -} - -func (c *context) Stream(code int, contentType string, r io.Reader) (err error) { - c.writeContentType(contentType) - c.response.WriteHeader(code) - _, err = io.Copy(c.response, r) - return -} - -func (c *context) File(file string) (err error) { - f, err := os.Open(file) - if err != nil { - return NotFoundHandler(c) - } - defer f.Close() - - fi, _ := f.Stat() - if fi.IsDir() { - file = filepath.Join(file, indexPage) - f, err = os.Open(file) - if err != nil { - return NotFoundHandler(c) - } - defer f.Close() - if fi, err = f.Stat(); err != nil { - return - } - } - http.ServeContent(c.Response(), c.Request(), fi.Name(), fi.ModTime(), f) - return -} - -func (c *context) Attachment(file, name string) error { - return c.contentDisposition(file, name, "attachment") -} - -func (c *context) Inline(file, name string) error { - return c.contentDisposition(file, name, "inline") -} - -func (c *context) contentDisposition(file, name, dispositionType string) error { - c.response.Header().Set(HeaderContentDisposition, fmt.Sprintf("%s; filename=%q", dispositionType, name)) - return c.File(file) -} - -func (c *context) NoContent(code int) error { - c.response.WriteHeader(code) - return nil -} - -func (c *context) Redirect(code int, url string) error { - if code < 300 || code > 308 { - return ErrInvalidRedirectCode - } - c.response.Header().Set(HeaderLocation, url) - c.response.WriteHeader(code) - return nil -} - -func (c *context) Error(err error) { - c.echo.HTTPErrorHandler(err, c) -} - -func (c *context) Echo() *Echo { - return c.echo -} - -func (c *context) Handler() HandlerFunc { - return c.handler -} - -func (c *context) SetHandler(h HandlerFunc) { - c.handler = h -} - -func (c *context) Logger() Logger { - return c.echo.Logger -} - -func (c *context) Reset(r *http.Request, w http.ResponseWriter) { - c.request = r - c.response.reset(w) - c.query = nil - c.handler = NotFoundHandler - c.store = nil - c.path = "" - c.pnames = nil - // NOTE: Don't reset because it has to have length c.echo.maxParam at all times - // c.pvalues = nil -} - diff --git a/vendor/github.com/labstack/echo/echo.go b/vendor/github.com/labstack/echo/echo.go deleted file mode 100644 index 9828651..0000000 --- a/vendor/github.com/labstack/echo/echo.go +++ /dev/null @@ -1,782 +0,0 @@ -/* -Package echo implements high performance, minimalist Go web framework. - -Example: - - package main - - import ( - "net/http" - - "github.com/labstack/echo" - "github.com/labstack/echo/middleware" - ) - - // Handler - func hello(c echo.Context) error { - return c.String(http.StatusOK, "Hello, World!") - } - - func main() { - // Echo instance - e := echo.New() - - // Middleware - e.Use(middleware.Logger()) - e.Use(middleware.Recover()) - - // Routes - e.GET("/", hello) - - // Start server - e.Logger.Fatal(e.Start(":1323")) - } - -Learn more at https://echo.labstack.com -*/ -package echo - -import ( - "bytes" - stdContext "context" - "crypto/tls" - "errors" - "fmt" - "io" - stdLog "log" - "net" - "net/http" - "net/url" - "path" - "path/filepath" - "reflect" - "runtime" - "sync" - "time" - - "github.com/labstack/gommon/color" - "github.com/labstack/gommon/log" - "golang.org/x/crypto/acme/autocert" -) - -type ( - // Echo is the top-level framework instance. - Echo struct { - StdLogger *stdLog.Logger - colorer *color.Color - premiddleware []MiddlewareFunc - middleware []MiddlewareFunc - maxParam *int - router *Router - notFoundHandler HandlerFunc - pool sync.Pool - Server *http.Server - TLSServer *http.Server - Listener net.Listener - TLSListener net.Listener - AutoTLSManager autocert.Manager - DisableHTTP2 bool - Debug bool - HideBanner bool - HidePort bool - HTTPErrorHandler HTTPErrorHandler - Binder Binder - Validator Validator - Renderer Renderer - Logger Logger - } - - // Route contains a handler and information for matching against requests. - Route struct { - Method string `json:"method"` - Path string `json:"path"` - Name string `json:"name"` - } - - // HTTPError represents an error that occurred while handling a request. - HTTPError struct { - Code int - Message interface{} - Internal error // Stores the error returned by an external dependency - } - - // MiddlewareFunc defines a function to process middleware. - MiddlewareFunc func(HandlerFunc) HandlerFunc - - // HandlerFunc defines a function to serve HTTP requests. - HandlerFunc func(Context) error - - // HTTPErrorHandler is a centralized HTTP error handler. - HTTPErrorHandler func(error, Context) - - // Validator is the interface that wraps the Validate function. - Validator interface { - Validate(i interface{}) error - } - - // Renderer is the interface that wraps the Render function. - Renderer interface { - Render(io.Writer, string, interface{}, Context) error - } - - // Map defines a generic map of type `map[string]interface{}`. - Map map[string]interface{} - - // i is the interface for Echo and Group. - i interface { - GET(string, HandlerFunc, ...MiddlewareFunc) *Route - } -) - -// HTTP methods -// NOTE: Deprecated, please use the stdlib constants directly instead. -const ( - CONNECT = http.MethodConnect - DELETE = http.MethodDelete - GET = http.MethodGet - HEAD = http.MethodHead - OPTIONS = http.MethodOptions - PATCH = http.MethodPatch - POST = http.MethodPost - // PROPFIND = "PROPFIND" - PUT = http.MethodPut - TRACE = http.MethodTrace -) - -// MIME types -const ( - MIMEApplicationJSON = "application/json" - MIMEApplicationJSONCharsetUTF8 = MIMEApplicationJSON + "; " + charsetUTF8 - MIMEApplicationJavaScript = "application/javascript" - MIMEApplicationJavaScriptCharsetUTF8 = MIMEApplicationJavaScript + "; " + charsetUTF8 - MIMEApplicationXML = "application/xml" - MIMEApplicationXMLCharsetUTF8 = MIMEApplicationXML + "; " + charsetUTF8 - MIMETextXML = "text/xml" - MIMETextXMLCharsetUTF8 = MIMETextXML + "; " + charsetUTF8 - MIMEApplicationForm = "application/x-www-form-urlencoded" - MIMEApplicationProtobuf = "application/protobuf" - MIMEApplicationMsgpack = "application/msgpack" - MIMETextHTML = "text/html" - MIMETextHTMLCharsetUTF8 = MIMETextHTML + "; " + charsetUTF8 - MIMETextPlain = "text/plain" - MIMETextPlainCharsetUTF8 = MIMETextPlain + "; " + charsetUTF8 - MIMEMultipartForm = "multipart/form-data" - MIMEOctetStream = "application/octet-stream" -) - -const ( - charsetUTF8 = "charset=UTF-8" - // PROPFIND Method can be used on collection and property resources. - PROPFIND = "PROPFIND" -) - -// Headers -const ( - HeaderAccept = "Accept" - HeaderAcceptEncoding = "Accept-Encoding" - HeaderAllow = "Allow" - HeaderAuthorization = "Authorization" - HeaderContentDisposition = "Content-Disposition" - HeaderContentEncoding = "Content-Encoding" - HeaderContentLength = "Content-Length" - HeaderContentType = "Content-Type" - HeaderCookie = "Cookie" - HeaderSetCookie = "Set-Cookie" - HeaderIfModifiedSince = "If-Modified-Since" - HeaderLastModified = "Last-Modified" - HeaderLocation = "Location" - HeaderUpgrade = "Upgrade" - HeaderVary = "Vary" - HeaderWWWAuthenticate = "WWW-Authenticate" - HeaderXForwardedFor = "X-Forwarded-For" - HeaderXForwardedProto = "X-Forwarded-Proto" - HeaderXForwardedProtocol = "X-Forwarded-Protocol" - HeaderXForwardedSsl = "X-Forwarded-Ssl" - HeaderXUrlScheme = "X-Url-Scheme" - HeaderXHTTPMethodOverride = "X-HTTP-Method-Override" - HeaderXRealIP = "X-Real-IP" - HeaderXRequestID = "X-Request-ID" - HeaderXRequestedWith = "X-Requested-With" - HeaderServer = "Server" - HeaderOrigin = "Origin" - - // Access control - HeaderAccessControlRequestMethod = "Access-Control-Request-Method" - HeaderAccessControlRequestHeaders = "Access-Control-Request-Headers" - HeaderAccessControlAllowOrigin = "Access-Control-Allow-Origin" - HeaderAccessControlAllowMethods = "Access-Control-Allow-Methods" - HeaderAccessControlAllowHeaders = "Access-Control-Allow-Headers" - HeaderAccessControlAllowCredentials = "Access-Control-Allow-Credentials" - HeaderAccessControlExposeHeaders = "Access-Control-Expose-Headers" - HeaderAccessControlMaxAge = "Access-Control-Max-Age" - - // Security - HeaderStrictTransportSecurity = "Strict-Transport-Security" - HeaderXContentTypeOptions = "X-Content-Type-Options" - HeaderXXSSProtection = "X-XSS-Protection" - HeaderXFrameOptions = "X-Frame-Options" - HeaderContentSecurityPolicy = "Content-Security-Policy" - HeaderXCSRFToken = "X-CSRF-Token" -) - -const ( - // Version of Echo - Version = "3.3.10-dev" - website = "https://echo.labstack.com" - // http://patorjk.com/software/taag/#p=display&f=Small%20Slant&t=Echo - banner = ` - ____ __ - / __/___/ / ___ - / _// __/ _ \/ _ \ -/___/\__/_//_/\___/ %s -High performance, minimalist Go web framework -%s -____________________________________O/_______ - O\ -` -) - -var ( - methods = [...]string{ - http.MethodConnect, - http.MethodDelete, - http.MethodGet, - http.MethodHead, - http.MethodOptions, - http.MethodPatch, - http.MethodPost, - PROPFIND, - http.MethodPut, - http.MethodTrace, - } -) - -// Errors -var ( - ErrUnsupportedMediaType = NewHTTPError(http.StatusUnsupportedMediaType) - ErrNotFound = NewHTTPError(http.StatusNotFound) - ErrUnauthorized = NewHTTPError(http.StatusUnauthorized) - ErrForbidden = NewHTTPError(http.StatusForbidden) - ErrMethodNotAllowed = NewHTTPError(http.StatusMethodNotAllowed) - ErrStatusRequestEntityTooLarge = NewHTTPError(http.StatusRequestEntityTooLarge) - ErrTooManyRequests = NewHTTPError(http.StatusTooManyRequests) - ErrBadRequest = NewHTTPError(http.StatusBadRequest) - ErrBadGateway = NewHTTPError(http.StatusBadGateway) - ErrInternalServerError = NewHTTPError(http.StatusInternalServerError) - ErrRequestTimeout = NewHTTPError(http.StatusRequestTimeout) - ErrServiceUnavailable = NewHTTPError(http.StatusServiceUnavailable) - ErrValidatorNotRegistered = errors.New("validator not registered") - ErrRendererNotRegistered = errors.New("renderer not registered") - ErrInvalidRedirectCode = errors.New("invalid redirect status code") - ErrCookieNotFound = errors.New("cookie not found") -) - -// Error handlers -var ( - NotFoundHandler = func(c Context) error { - return ErrNotFound - } - - MethodNotAllowedHandler = func(c Context) error { - return ErrMethodNotAllowed - } -) - -// New creates an instance of Echo. -func New() (e *Echo) { - e = &Echo{ - Server: new(http.Server), - TLSServer: new(http.Server), - AutoTLSManager: autocert.Manager{ - Prompt: autocert.AcceptTOS, - }, - Logger: log.New("echo"), - colorer: color.New(), - maxParam: new(int), - } - e.Server.Handler = e - e.TLSServer.Handler = e - e.HTTPErrorHandler = e.DefaultHTTPErrorHandler - e.Binder = &DefaultBinder{} - e.Logger.SetLevel(log.ERROR) - e.StdLogger = stdLog.New(e.Logger.Output(), e.Logger.Prefix()+": ", 0) - e.pool.New = func() interface{} { - return e.NewContext(nil, nil) - } - e.router = NewRouter(e) - return -} - -// NewContext returns a Context instance. -func (e *Echo) NewContext(r *http.Request, w http.ResponseWriter) Context { - return &context{ - request: r, - response: NewResponse(w, e), - store: make(Map), - echo: e, - pvalues: make([]string, *e.maxParam), - handler: NotFoundHandler, - } -} - -// Router returns router. -func (e *Echo) Router() *Router { - return e.router -} - -// DefaultHTTPErrorHandler is the default HTTP error handler. It sends a JSON response -// with status code. -func (e *Echo) DefaultHTTPErrorHandler(err error, c Context) { - var ( - code = http.StatusInternalServerError - msg interface{} - ) - - if he, ok := err.(*HTTPError); ok { - code = he.Code - msg = he.Message - if he.Internal != nil { - err = fmt.Errorf("%v, %v", err, he.Internal) - } - } else if e.Debug { - msg = err.Error() - } else { - msg = http.StatusText(code) - } - if _, ok := msg.(string); ok { - msg = Map{"message": msg} - } - - // Send response - if !c.Response().Committed { - if c.Request().Method == http.MethodHead { // Issue #608 - err = c.NoContent(code) - } else { - err = c.JSON(code, msg) - } - if err != nil { - e.Logger.Error(err) - } - } -} - -// Pre adds middleware to the chain which is run before router. -func (e *Echo) Pre(middleware ...MiddlewareFunc) { - e.premiddleware = append(e.premiddleware, middleware...) -} - -// Use adds middleware to the chain which is run after router. -func (e *Echo) Use(middleware ...MiddlewareFunc) { - e.middleware = append(e.middleware, middleware...) -} - -// CONNECT registers a new CONNECT route for a path with matching handler in the -// router with optional route-level middleware. -func (e *Echo) CONNECT(path string, h HandlerFunc, m ...MiddlewareFunc) *Route { - return e.Add(http.MethodConnect, path, h, m...) -} - -// DELETE registers a new DELETE route for a path with matching handler in the router -// with optional route-level middleware. -func (e *Echo) DELETE(path string, h HandlerFunc, m ...MiddlewareFunc) *Route { - return e.Add(http.MethodDelete, path, h, m...) -} - -// GET registers a new GET route for a path with matching handler in the router -// with optional route-level middleware. -func (e *Echo) GET(path string, h HandlerFunc, m ...MiddlewareFunc) *Route { - return e.Add(http.MethodGet, path, h, m...) -} - -// HEAD registers a new HEAD route for a path with matching handler in the -// router with optional route-level middleware. -func (e *Echo) HEAD(path string, h HandlerFunc, m ...MiddlewareFunc) *Route { - return e.Add(http.MethodHead, path, h, m...) -} - -// OPTIONS registers a new OPTIONS route for a path with matching handler in the -// router with optional route-level middleware. -func (e *Echo) OPTIONS(path string, h HandlerFunc, m ...MiddlewareFunc) *Route { - return e.Add(http.MethodOptions, path, h, m...) -} - -// PATCH registers a new PATCH route for a path with matching handler in the -// router with optional route-level middleware. -func (e *Echo) PATCH(path string, h HandlerFunc, m ...MiddlewareFunc) *Route { - return e.Add(http.MethodPatch, path, h, m...) -} - -// POST registers a new POST route for a path with matching handler in the -// router with optional route-level middleware. -func (e *Echo) POST(path string, h HandlerFunc, m ...MiddlewareFunc) *Route { - return e.Add(http.MethodPost, path, h, m...) -} - -// PUT registers a new PUT route for a path with matching handler in the -// router with optional route-level middleware. -func (e *Echo) PUT(path string, h HandlerFunc, m ...MiddlewareFunc) *Route { - return e.Add(http.MethodPut, path, h, m...) -} - -// TRACE registers a new TRACE route for a path with matching handler in the -// router with optional route-level middleware. -func (e *Echo) TRACE(path string, h HandlerFunc, m ...MiddlewareFunc) *Route { - return e.Add(http.MethodTrace, path, h, m...) -} - -// Any registers a new route for all HTTP methods and path with matching handler -// in the router with optional route-level middleware. -func (e *Echo) Any(path string, handler HandlerFunc, middleware ...MiddlewareFunc) []*Route { - routes := make([]*Route, len(methods)) - for i, m := range methods { - routes[i] = e.Add(m, path, handler, middleware...) - } - return routes -} - -// Match registers a new route for multiple HTTP methods and path with matching -// handler in the router with optional route-level middleware. -func (e *Echo) Match(methods []string, path string, handler HandlerFunc, middleware ...MiddlewareFunc) []*Route { - routes := make([]*Route, len(methods)) - for i, m := range methods { - routes[i] = e.Add(m, path, handler, middleware...) - } - return routes -} - -// Static registers a new route with path prefix to serve static files from the -// provided root directory. -func (e *Echo) Static(prefix, root string) *Route { - if root == "" { - root = "." // For security we want to restrict to CWD. - } - return static(e, prefix, root) -} - -func static(i i, prefix, root string) *Route { - h := func(c Context) error { - p, err := url.PathUnescape(c.Param("*")) - if err != nil { - return err - } - name := filepath.Join(root, path.Clean("/"+p)) // "/"+ for security - return c.File(name) - } - i.GET(prefix, h) - if prefix == "/" { - return i.GET(prefix+"*", h) - } - - return i.GET(prefix+"/*", h) -} - -// File registers a new route with path to serve a static file with optional route-level middleware. -func (e *Echo) File(path, file string, m ...MiddlewareFunc) *Route { - return e.GET(path, func(c Context) error { - return c.File(file) - }, m...) -} - -// Add registers a new route for an HTTP method and path with matching handler -// in the router with optional route-level middleware. -func (e *Echo) Add(method, path string, handler HandlerFunc, middleware ...MiddlewareFunc) *Route { - name := handlerName(handler) - e.router.Add(method, path, func(c Context) error { - h := handler - // Chain middleware - for i := len(middleware) - 1; i >= 0; i-- { - h = middleware[i](h) - } - return h(c) - }) - r := &Route{ - Method: method, - Path: path, - Name: name, - } - e.router.routes[method+path] = r - return r -} - -// Group creates a new router group with prefix and optional group-level middleware. -func (e *Echo) Group(prefix string, m ...MiddlewareFunc) (g *Group) { - g = &Group{prefix: prefix, echo: e} - g.Use(m...) - return -} - -// URI generates a URI from handler. -func (e *Echo) URI(handler HandlerFunc, params ...interface{}) string { - name := handlerName(handler) - return e.Reverse(name, params...) -} - -// URL is an alias for `URI` function. -func (e *Echo) URL(h HandlerFunc, params ...interface{}) string { - return e.URI(h, params...) -} - -// Reverse generates an URL from route name and provided parameters. -func (e *Echo) Reverse(name string, params ...interface{}) string { - uri := new(bytes.Buffer) - ln := len(params) - n := 0 - for _, r := range e.router.routes { - if r.Name == name { - for i, l := 0, len(r.Path); i < l; i++ { - if r.Path[i] == ':' && n < ln { - for ; i < l && r.Path[i] != '/'; i++ { - } - uri.WriteString(fmt.Sprintf("%v", params[n])) - n++ - } - if i < l { - uri.WriteByte(r.Path[i]) - } - } - break - } - } - return uri.String() -} - -// Routes returns the registered routes. -func (e *Echo) Routes() []*Route { - routes := make([]*Route, 0, len(e.router.routes)) - for _, v := range e.router.routes { - routes = append(routes, v) - } - return routes -} - -// AcquireContext returns an empty `Context` instance from the pool. -// You must return the context by calling `ReleaseContext()`. -func (e *Echo) AcquireContext() Context { - return e.pool.Get().(Context) -} - -// ReleaseContext returns the `Context` instance back to the pool. -// You must call it after `AcquireContext()`. -func (e *Echo) ReleaseContext(c Context) { - e.pool.Put(c) -} - -// ServeHTTP implements `http.Handler` interface, which serves HTTP requests. -func (e *Echo) ServeHTTP(w http.ResponseWriter, r *http.Request) { - // Acquire context - c := e.pool.Get().(*context) - c.Reset(r, w) - - h := NotFoundHandler - - if e.premiddleware == nil { - e.router.Find(r.Method, getPath(r), c) - h = c.Handler() - for i := len(e.middleware) - 1; i >= 0; i-- { - h = e.middleware[i](h) - } - } else { - h = func(c Context) error { - e.router.Find(r.Method, getPath(r), c) - h := c.Handler() - for i := len(e.middleware) - 1; i >= 0; i-- { - h = e.middleware[i](h) - } - return h(c) - } - for i := len(e.premiddleware) - 1; i >= 0; i-- { - h = e.premiddleware[i](h) - } - } - - // Execute chain - if err := h(c); err != nil { - e.HTTPErrorHandler(err, c) - } - - // Release context - e.pool.Put(c) -} - -// Start starts an HTTP server. -func (e *Echo) Start(address string) error { - e.Server.Addr = address - return e.StartServer(e.Server) -} - -// StartTLS starts an HTTPS server. -func (e *Echo) StartTLS(address string, certFile, keyFile string) (err error) { - if certFile == "" || keyFile == "" { - return errors.New("invalid tls configuration") - } - s := e.TLSServer - s.TLSConfig = new(tls.Config) - s.TLSConfig.Certificates = make([]tls.Certificate, 1) - s.TLSConfig.Certificates[0], err = tls.LoadX509KeyPair(certFile, keyFile) - if err != nil { - return - } - return e.startTLS(address) -} - -// StartAutoTLS starts an HTTPS server using certificates automatically installed from https://letsencrypt.org. -func (e *Echo) StartAutoTLS(address string) error { - s := e.TLSServer - s.TLSConfig = new(tls.Config) - s.TLSConfig.GetCertificate = e.AutoTLSManager.GetCertificate - return e.startTLS(address) -} - -func (e *Echo) startTLS(address string) error { - s := e.TLSServer - s.Addr = address - if !e.DisableHTTP2 { - s.TLSConfig.NextProtos = append(s.TLSConfig.NextProtos, "h2") - } - return e.StartServer(e.TLSServer) -} - -// StartServer starts a custom http server. -func (e *Echo) StartServer(s *http.Server) (err error) { - // Setup - e.colorer.SetOutput(e.Logger.Output()) - s.ErrorLog = e.StdLogger - s.Handler = e - if e.Debug { - e.Logger.SetLevel(log.DEBUG) - } - - if !e.HideBanner { - e.colorer.Printf(banner, e.colorer.Red("v"+Version), e.colorer.Blue(website)) - } - - if s.TLSConfig == nil { - if e.Listener == nil { - e.Listener, err = newListener(s.Addr) - if err != nil { - return err - } - } - if !e.HidePort { - e.colorer.Printf("⇨ http server started on %s\n", e.colorer.Green(e.Listener.Addr())) - } - return s.Serve(e.Listener) - } - if e.TLSListener == nil { - l, err := newListener(s.Addr) - if err != nil { - return err - } - e.TLSListener = tls.NewListener(l, s.TLSConfig) - } - if !e.HidePort { - e.colorer.Printf("⇨ https server started on %s\n", e.colorer.Green(e.TLSListener.Addr())) - } - return s.Serve(e.TLSListener) -} - -// Close immediately stops the server. -// It internally calls `http.Server#Close()`. -func (e *Echo) Close() error { - if err := e.TLSServer.Close(); err != nil { - return err - } - return e.Server.Close() -} - -// Shutdown stops the server gracefully. -// It internally calls `http.Server#Shutdown()`. -func (e *Echo) Shutdown(ctx stdContext.Context) error { - if err := e.TLSServer.Shutdown(ctx); err != nil { - return err - } - return e.Server.Shutdown(ctx) -} - -// NewHTTPError creates a new HTTPError instance. -func NewHTTPError(code int, message ...interface{}) *HTTPError { - he := &HTTPError{Code: code, Message: http.StatusText(code)} - if len(message) > 0 { - he.Message = message[0] - } - return he -} - -// Error makes it compatible with `error` interface. -func (he *HTTPError) Error() string { - return fmt.Sprintf("code=%d, message=%v", he.Code, he.Message) -} - -// SetInternal sets error to HTTPError.Internal -func (he *HTTPError) SetInternal(err error) *HTTPError { - he.Internal = err - return he -} - -// WrapHandler wraps `http.Handler` into `echo.HandlerFunc`. -func WrapHandler(h http.Handler) HandlerFunc { - return func(c Context) error { - h.ServeHTTP(c.Response(), c.Request()) - return nil - } -} - -// WrapMiddleware wraps `func(http.Handler) http.Handler` into `echo.MiddlewareFunc` -func WrapMiddleware(m func(http.Handler) http.Handler) MiddlewareFunc { - return func(next HandlerFunc) HandlerFunc { - return func(c Context) (err error) { - m(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - c.SetRequest(r) - err = next(c) - })).ServeHTTP(c.Response(), c.Request()) - return - } - } -} - -func getPath(r *http.Request) string { - path := r.URL.RawPath - if path == "" { - path = r.URL.Path - } - return path -} - -func handlerName(h HandlerFunc) string { - t := reflect.ValueOf(h).Type() - if t.Kind() == reflect.Func { - return runtime.FuncForPC(reflect.ValueOf(h).Pointer()).Name() - } - return t.String() -} - -// // PathUnescape is wraps `url.PathUnescape` -// func PathUnescape(s string) (string, error) { -// return url.PathUnescape(s) -// } - -// tcpKeepAliveListener sets TCP keep-alive timeouts on accepted -// connections. It's used by ListenAndServe and ListenAndServeTLS so -// dead TCP connections (e.g. closing laptop mid-download) eventually -// go away. -type tcpKeepAliveListener struct { - *net.TCPListener -} - -func (ln tcpKeepAliveListener) Accept() (c net.Conn, err error) { - tc, err := ln.AcceptTCP() - if err != nil { - return - } - tc.SetKeepAlive(true) - tc.SetKeepAlivePeriod(3 * time.Minute) - return tc, nil -} - -func newListener(address string) (*tcpKeepAliveListener, error) { - l, err := net.Listen("tcp", address) - if err != nil { - return nil, err - } - return &tcpKeepAliveListener{l.(*net.TCPListener)}, nil -} diff --git a/vendor/github.com/labstack/echo/group.go b/vendor/github.com/labstack/echo/group.go deleted file mode 100644 index 3e3732b..0000000 --- a/vendor/github.com/labstack/echo/group.go +++ /dev/null @@ -1,121 +0,0 @@ -package echo - -import ( - "net/http" - "path" -) - -type ( - // Group is a set of sub-routes for a specified route. It can be used for inner - // routes that share a common middleware or functionality that should be separate - // from the parent echo instance while still inheriting from it. - Group struct { - prefix string - middleware []MiddlewareFunc - echo *Echo - } -) - -// Use implements `Echo#Use()` for sub-routes within the Group. -func (g *Group) Use(middleware ...MiddlewareFunc) { - g.middleware = append(g.middleware, middleware...) - // Allow all requests to reach the group as they might get dropped if router - // doesn't find a match, making none of the group middleware process. - for _, p := range []string{"", "/*"} { - g.echo.Any(path.Clean(g.prefix+p), func(c Context) error { - return NotFoundHandler(c) - }, g.middleware...) - } -} - -// CONNECT implements `Echo#CONNECT()` for sub-routes within the Group. -func (g *Group) CONNECT(path string, h HandlerFunc, m ...MiddlewareFunc) *Route { - return g.Add(http.MethodConnect, path, h, m...) -} - -// DELETE implements `Echo#DELETE()` for sub-routes within the Group. -func (g *Group) DELETE(path string, h HandlerFunc, m ...MiddlewareFunc) *Route { - return g.Add(http.MethodDelete, path, h, m...) -} - -// GET implements `Echo#GET()` for sub-routes within the Group. -func (g *Group) GET(path string, h HandlerFunc, m ...MiddlewareFunc) *Route { - return g.Add(http.MethodGet, path, h, m...) -} - -// HEAD implements `Echo#HEAD()` for sub-routes within the Group. -func (g *Group) HEAD(path string, h HandlerFunc, m ...MiddlewareFunc) *Route { - return g.Add(http.MethodHead, path, h, m...) -} - -// OPTIONS implements `Echo#OPTIONS()` for sub-routes within the Group. -func (g *Group) OPTIONS(path string, h HandlerFunc, m ...MiddlewareFunc) *Route { - return g.Add(http.MethodOptions, path, h, m...) -} - -// PATCH implements `Echo#PATCH()` for sub-routes within the Group. -func (g *Group) PATCH(path string, h HandlerFunc, m ...MiddlewareFunc) *Route { - return g.Add(http.MethodPatch, path, h, m...) -} - -// POST implements `Echo#POST()` for sub-routes within the Group. -func (g *Group) POST(path string, h HandlerFunc, m ...MiddlewareFunc) *Route { - return g.Add(http.MethodPost, path, h, m...) -} - -// PUT implements `Echo#PUT()` for sub-routes within the Group. -func (g *Group) PUT(path string, h HandlerFunc, m ...MiddlewareFunc) *Route { - return g.Add(http.MethodPut, path, h, m...) -} - -// TRACE implements `Echo#TRACE()` for sub-routes within the Group. -func (g *Group) TRACE(path string, h HandlerFunc, m ...MiddlewareFunc) *Route { - return g.Add(http.MethodTrace, path, h, m...) -} - -// Any implements `Echo#Any()` for sub-routes within the Group. -func (g *Group) Any(path string, handler HandlerFunc, middleware ...MiddlewareFunc) []*Route { - routes := make([]*Route, len(methods)) - for i, m := range methods { - routes[i] = g.Add(m, path, handler, middleware...) - } - return routes -} - -// Match implements `Echo#Match()` for sub-routes within the Group. -func (g *Group) Match(methods []string, path string, handler HandlerFunc, middleware ...MiddlewareFunc) []*Route { - routes := make([]*Route, len(methods)) - for i, m := range methods { - routes[i] = g.Add(m, path, handler, middleware...) - } - return routes -} - -// Group creates a new sub-group with prefix and optional sub-group-level middleware. -func (g *Group) Group(prefix string, middleware ...MiddlewareFunc) *Group { - m := make([]MiddlewareFunc, 0, len(g.middleware)+len(middleware)) - m = append(m, g.middleware...) - m = append(m, middleware...) - return g.echo.Group(g.prefix+prefix, m...) -} - -// Static implements `Echo#Static()` for sub-routes within the Group. -func (g *Group) Static(prefix, root string) { - static(g, prefix, root) -} - -// File implements `Echo#File()` for sub-routes within the Group. -func (g *Group) File(path, file string) { - g.echo.File(g.prefix+path, file) -} - -// Add implements `Echo#Add()` for sub-routes within the Group. -func (g *Group) Add(method, path string, handler HandlerFunc, middleware ...MiddlewareFunc) *Route { - // Combine into a new slice to avoid accidentally passing the same slice for - // multiple routes, which would lead to later add() calls overwriting the - // middleware from earlier calls. - m := make([]MiddlewareFunc, 0, len(g.middleware)+len(middleware)) - m = append(m, g.middleware...) - m = append(m, middleware...) - return g.echo.Add(method, g.prefix+path, handler, m...) -} diff --git a/vendor/github.com/labstack/echo/log.go b/vendor/github.com/labstack/echo/log.go deleted file mode 100644 index 3f8de59..0000000 --- a/vendor/github.com/labstack/echo/log.go +++ /dev/null @@ -1,41 +0,0 @@ -package echo - -import ( - "io" - - "github.com/labstack/gommon/log" -) - -type ( - // Logger defines the logging interface. - Logger interface { - Output() io.Writer - SetOutput(w io.Writer) - Prefix() string - SetPrefix(p string) - Level() log.Lvl - SetLevel(v log.Lvl) - SetHeader(h string) - Print(i ...interface{}) - Printf(format string, args ...interface{}) - Printj(j log.JSON) - Debug(i ...interface{}) - Debugf(format string, args ...interface{}) - Debugj(j log.JSON) - Info(i ...interface{}) - Infof(format string, args ...interface{}) - Infoj(j log.JSON) - Warn(i ...interface{}) - Warnf(format string, args ...interface{}) - Warnj(j log.JSON) - Error(i ...interface{}) - Errorf(format string, args ...interface{}) - Errorj(j log.JSON) - Fatal(i ...interface{}) - Fatalj(j log.JSON) - Fatalf(format string, args ...interface{}) - Panic(i ...interface{}) - Panicj(j log.JSON) - Panicf(format string, args ...interface{}) - } -) diff --git a/vendor/github.com/labstack/echo/middleware/basic_auth.go b/vendor/github.com/labstack/echo/middleware/basic_auth.go deleted file mode 100644 index e6c9632..0000000 --- a/vendor/github.com/labstack/echo/middleware/basic_auth.go +++ /dev/null @@ -1,106 +0,0 @@ -package middleware - -import ( - "encoding/base64" - "strconv" - "strings" - - "github.com/labstack/echo" -) - -type ( - // BasicAuthConfig defines the config for BasicAuth middleware. - BasicAuthConfig struct { - // Skipper defines a function to skip middleware. - Skipper Skipper - - // Validator is a function to validate BasicAuth credentials. - // Required. - Validator BasicAuthValidator - - // Realm is a string to define realm attribute of BasicAuth. - // Default value "Restricted". - Realm string - } - - // BasicAuthValidator defines a function to validate BasicAuth credentials. - BasicAuthValidator func(string, string, echo.Context) (bool, error) -) - -const ( - basic = "basic" - defaultRealm = "Restricted" -) - -var ( - // DefaultBasicAuthConfig is the default BasicAuth middleware config. - DefaultBasicAuthConfig = BasicAuthConfig{ - Skipper: DefaultSkipper, - Realm: defaultRealm, - } -) - -// BasicAuth returns an BasicAuth middleware. -// -// For valid credentials it calls the next handler. -// For missing or invalid credentials, it sends "401 - Unauthorized" response. -func BasicAuth(fn BasicAuthValidator) echo.MiddlewareFunc { - c := DefaultBasicAuthConfig - c.Validator = fn - return BasicAuthWithConfig(c) -} - -// BasicAuthWithConfig returns an BasicAuth middleware with config. -// See `BasicAuth()`. -func BasicAuthWithConfig(config BasicAuthConfig) echo.MiddlewareFunc { - // Defaults - if config.Validator == nil { - panic("echo: basic-auth middleware requires a validator function") - } - if config.Skipper == nil { - config.Skipper = DefaultBasicAuthConfig.Skipper - } - if config.Realm == "" { - config.Realm = defaultRealm - } - - return func(next echo.HandlerFunc) echo.HandlerFunc { - return func(c echo.Context) error { - if config.Skipper(c) { - return next(c) - } - - auth := c.Request().Header.Get(echo.HeaderAuthorization) - l := len(basic) - - if len(auth) > l+1 && strings.ToLower(auth[:l]) == basic { - b, err := base64.StdEncoding.DecodeString(auth[l+1:]) - if err != nil { - return err - } - cred := string(b) - for i := 0; i < len(cred); i++ { - if cred[i] == ':' { - // Verify credentials - valid, err := config.Validator(cred[:i], cred[i+1:], c) - if err != nil { - return err - } else if valid { - return next(c) - } - break - } - } - } - - realm := defaultRealm - if config.Realm != defaultRealm { - realm = strconv.Quote(config.Realm) - } - - // Need to return `401` for browsers to pop-up login box. - c.Response().Header().Set(echo.HeaderWWWAuthenticate, basic+" realm="+realm) - return echo.ErrUnauthorized - } - } -} diff --git a/vendor/github.com/labstack/echo/middleware/body_dump.go b/vendor/github.com/labstack/echo/middleware/body_dump.go deleted file mode 100644 index e64e5e1..0000000 --- a/vendor/github.com/labstack/echo/middleware/body_dump.go +++ /dev/null @@ -1,111 +0,0 @@ -package middleware - -import ( - "bufio" - "bytes" - "io" - "io/ioutil" - "net" - "net/http" - - "github.com/labstack/echo" -) - -type ( - // BodyDumpConfig defines the config for BodyDump middleware. - BodyDumpConfig struct { - // Skipper defines a function to skip middleware. - Skipper Skipper - - // Handler receives request and response payload. - // Required. - Handler BodyDumpHandler - } - - // BodyDumpHandler receives the request and response payload. - BodyDumpHandler func(echo.Context, []byte, []byte) - - bodyDumpResponseWriter struct { - io.Writer - http.ResponseWriter - } -) - -var ( - // DefaultBodyDumpConfig is the default BodyDump middleware config. - DefaultBodyDumpConfig = BodyDumpConfig{ - Skipper: DefaultSkipper, - } -) - -// BodyDump returns a BodyDump middleware. -// -// BodyLimit middleware captures the request and response payload and calls the -// registered handler. -func BodyDump(handler BodyDumpHandler) echo.MiddlewareFunc { - c := DefaultBodyDumpConfig - c.Handler = handler - return BodyDumpWithConfig(c) -} - -// BodyDumpWithConfig returns a BodyDump middleware with config. -// See: `BodyDump()`. -func BodyDumpWithConfig(config BodyDumpConfig) echo.MiddlewareFunc { - // Defaults - if config.Handler == nil { - panic("echo: body-dump middleware requires a handler function") - } - if config.Skipper == nil { - config.Skipper = DefaultBodyDumpConfig.Skipper - } - - return func(next echo.HandlerFunc) echo.HandlerFunc { - return func(c echo.Context) (err error) { - if config.Skipper(c) { - return next(c) - } - - // Request - reqBody := []byte{} - if c.Request().Body != nil { // Read - reqBody, _ = ioutil.ReadAll(c.Request().Body) - } - c.Request().Body = ioutil.NopCloser(bytes.NewBuffer(reqBody)) // Reset - - // Response - resBody := new(bytes.Buffer) - mw := io.MultiWriter(c.Response().Writer, resBody) - writer := &bodyDumpResponseWriter{Writer: mw, ResponseWriter: c.Response().Writer} - c.Response().Writer = writer - - if err = next(c); err != nil { - c.Error(err) - } - - // Callback - config.Handler(c, reqBody, resBody.Bytes()) - - return - } - } -} - -func (w *bodyDumpResponseWriter) WriteHeader(code int) { - w.ResponseWriter.WriteHeader(code) -} - -func (w *bodyDumpResponseWriter) Write(b []byte) (int, error) { - return w.Writer.Write(b) -} - -func (w *bodyDumpResponseWriter) Flush() { - w.ResponseWriter.(http.Flusher).Flush() -} - -func (w *bodyDumpResponseWriter) Hijack() (net.Conn, *bufio.ReadWriter, error) { - return w.ResponseWriter.(http.Hijacker).Hijack() -} - -func (w *bodyDumpResponseWriter) CloseNotify() <-chan bool { - return w.ResponseWriter.(http.CloseNotifier).CloseNotify() -} diff --git a/vendor/github.com/labstack/echo/middleware/body_limit.go b/vendor/github.com/labstack/echo/middleware/body_limit.go deleted file mode 100644 index c83f57e..0000000 --- a/vendor/github.com/labstack/echo/middleware/body_limit.go +++ /dev/null @@ -1,117 +0,0 @@ -package middleware - -import ( - "fmt" - "io" - "sync" - - "github.com/labstack/echo" - "github.com/labstack/gommon/bytes" -) - -type ( - // BodyLimitConfig defines the config for BodyLimit middleware. - BodyLimitConfig struct { - // Skipper defines a function to skip middleware. - Skipper Skipper - - // Maximum allowed size for a request body, it can be specified - // as `4x` or `4xB`, where x is one of the multiple from K, M, G, T or P. - Limit string `yaml:"limit"` - limit int64 - } - - limitedReader struct { - BodyLimitConfig - reader io.ReadCloser - read int64 - context echo.Context - } -) - -var ( - // DefaultBodyLimitConfig is the default BodyLimit middleware config. - DefaultBodyLimitConfig = BodyLimitConfig{ - Skipper: DefaultSkipper, - } -) - -// BodyLimit returns a BodyLimit middleware. -// -// BodyLimit middleware sets the maximum allowed size for a request body, if the -// size exceeds the configured limit, it sends "413 - Request Entity Too Large" -// response. The BodyLimit is determined based on both `Content-Length` request -// header and actual content read, which makes it super secure. -// Limit can be specified as `4x` or `4xB`, where x is one of the multiple from K, M, -// G, T or P. -func BodyLimit(limit string) echo.MiddlewareFunc { - c := DefaultBodyLimitConfig - c.Limit = limit - return BodyLimitWithConfig(c) -} - -// BodyLimitWithConfig returns a BodyLimit middleware with config. -// See: `BodyLimit()`. -func BodyLimitWithConfig(config BodyLimitConfig) echo.MiddlewareFunc { - // Defaults - if config.Skipper == nil { - config.Skipper = DefaultBodyLimitConfig.Skipper - } - - limit, err := bytes.Parse(config.Limit) - if err != nil { - panic(fmt.Errorf("echo: invalid body-limit=%s", config.Limit)) - } - config.limit = limit - pool := limitedReaderPool(config) - - return func(next echo.HandlerFunc) echo.HandlerFunc { - return func(c echo.Context) error { - if config.Skipper(c) { - return next(c) - } - - req := c.Request() - - // Based on content length - if req.ContentLength > config.limit { - return echo.ErrStatusRequestEntityTooLarge - } - - // Based on content read - r := pool.Get().(*limitedReader) - r.Reset(req.Body, c) - defer pool.Put(r) - req.Body = r - - return next(c) - } - } -} - -func (r *limitedReader) Read(b []byte) (n int, err error) { - n, err = r.reader.Read(b) - r.read += int64(n) - if r.read > r.limit { - return n, echo.ErrStatusRequestEntityTooLarge - } - return -} - -func (r *limitedReader) Close() error { - return r.reader.Close() -} - -func (r *limitedReader) Reset(reader io.ReadCloser, context echo.Context) { - r.reader = reader - r.context = context - r.read = 0 -} - -func limitedReaderPool(c BodyLimitConfig) sync.Pool { - return sync.Pool{ - New: func() interface{} { - return &limitedReader{BodyLimitConfig: c} - }, - } -} diff --git a/vendor/github.com/labstack/echo/middleware/compress.go b/vendor/github.com/labstack/echo/middleware/compress.go deleted file mode 100644 index b876009..0000000 --- a/vendor/github.com/labstack/echo/middleware/compress.go +++ /dev/null @@ -1,122 +0,0 @@ -package middleware - -import ( - "bufio" - "compress/gzip" - "io" - "io/ioutil" - "net" - "net/http" - "strings" - - "github.com/labstack/echo" -) - -type ( - // GzipConfig defines the config for Gzip middleware. - GzipConfig struct { - // Skipper defines a function to skip middleware. - Skipper Skipper - - // Gzip compression level. - // Optional. Default value -1. - Level int `yaml:"level"` - } - - gzipResponseWriter struct { - io.Writer - http.ResponseWriter - } -) - -const ( - gzipScheme = "gzip" -) - -var ( - // DefaultGzipConfig is the default Gzip middleware config. - DefaultGzipConfig = GzipConfig{ - Skipper: DefaultSkipper, - Level: -1, - } -) - -// Gzip returns a middleware which compresses HTTP response using gzip compression -// scheme. -func Gzip() echo.MiddlewareFunc { - return GzipWithConfig(DefaultGzipConfig) -} - -// GzipWithConfig return Gzip middleware with config. -// See: `Gzip()`. -func GzipWithConfig(config GzipConfig) echo.MiddlewareFunc { - // Defaults - if config.Skipper == nil { - config.Skipper = DefaultGzipConfig.Skipper - } - if config.Level == 0 { - config.Level = DefaultGzipConfig.Level - } - - return func(next echo.HandlerFunc) echo.HandlerFunc { - return func(c echo.Context) error { - if config.Skipper(c) { - return next(c) - } - - res := c.Response() - res.Header().Add(echo.HeaderVary, echo.HeaderAcceptEncoding) - if strings.Contains(c.Request().Header.Get(echo.HeaderAcceptEncoding), gzipScheme) { - res.Header().Set(echo.HeaderContentEncoding, gzipScheme) // Issue #806 - rw := res.Writer - w, err := gzip.NewWriterLevel(rw, config.Level) - if err != nil { - return err - } - defer func() { - if res.Size == 0 { - if res.Header().Get(echo.HeaderContentEncoding) == gzipScheme { - res.Header().Del(echo.HeaderContentEncoding) - } - // We have to reset response to it's pristine state when - // nothing is written to body or error is returned. - // See issue #424, #407. - res.Writer = rw - w.Reset(ioutil.Discard) - } - w.Close() - }() - grw := &gzipResponseWriter{Writer: w, ResponseWriter: rw} - res.Writer = grw - } - return next(c) - } - } -} - -func (w *gzipResponseWriter) WriteHeader(code int) { - if code == http.StatusNoContent { // Issue #489 - w.ResponseWriter.Header().Del(echo.HeaderContentEncoding) - } - w.Header().Del(echo.HeaderContentLength) // Issue #444 - w.ResponseWriter.WriteHeader(code) -} - -func (w *gzipResponseWriter) Write(b []byte) (int, error) { - if w.Header().Get(echo.HeaderContentType) == "" { - w.Header().Set(echo.HeaderContentType, http.DetectContentType(b)) - } - return w.Writer.Write(b) -} - -func (w *gzipResponseWriter) Flush() { - w.Writer.(*gzip.Writer).Flush() -} - -func (w *gzipResponseWriter) Hijack() (net.Conn, *bufio.ReadWriter, error) { - return w.ResponseWriter.(http.Hijacker).Hijack() -} - -func (w *gzipResponseWriter) CloseNotify() <-chan bool { - return w.ResponseWriter.(http.CloseNotifier).CloseNotify() -} diff --git a/vendor/github.com/labstack/echo/middleware/cors.go b/vendor/github.com/labstack/echo/middleware/cors.go deleted file mode 100644 index d8b633f..0000000 --- a/vendor/github.com/labstack/echo/middleware/cors.go +++ /dev/null @@ -1,143 +0,0 @@ -package middleware - -import ( - "net/http" - "strconv" - "strings" - - "github.com/labstack/echo" -) - -type ( - // CORSConfig defines the config for CORS middleware. - CORSConfig struct { - // Skipper defines a function to skip middleware. - Skipper Skipper - - // AllowOrigin defines a list of origins that may access the resource. - // Optional. Default value []string{"*"}. - AllowOrigins []string `yaml:"allow_origins"` - - // AllowMethods defines a list methods allowed when accessing the resource. - // This is used in response to a preflight request. - // Optional. Default value DefaultCORSConfig.AllowMethods. - AllowMethods []string `yaml:"allow_methods"` - - // AllowHeaders defines a list of request headers that can be used when - // making the actual request. This is in response to a preflight request. - // Optional. Default value []string{}. - AllowHeaders []string `yaml:"allow_headers"` - - // AllowCredentials indicates whether or not the response to the request - // can be exposed when the credentials flag is true. When used as part of - // a response to a preflight request, this indicates whether or not the - // actual request can be made using credentials. - // Optional. Default value false. - AllowCredentials bool `yaml:"allow_credentials"` - - // ExposeHeaders defines a whitelist headers that clients are allowed to - // access. - // Optional. Default value []string{}. - ExposeHeaders []string `yaml:"expose_headers"` - - // MaxAge indicates how long (in seconds) the results of a preflight request - // can be cached. - // Optional. Default value 0. - MaxAge int `yaml:"max_age"` - } -) - -var ( - // DefaultCORSConfig is the default CORS middleware config. - DefaultCORSConfig = CORSConfig{ - Skipper: DefaultSkipper, - AllowOrigins: []string{"*"}, - AllowMethods: []string{http.MethodGet, http.MethodHead, http.MethodPut, http.MethodPatch, http.MethodPost, http.MethodDelete}, - } -) - -// CORS returns a Cross-Origin Resource Sharing (CORS) middleware. -// See: https://developer.mozilla.org/en/docs/Web/HTTP/Access_control_CORS -func CORS() echo.MiddlewareFunc { - return CORSWithConfig(DefaultCORSConfig) -} - -// CORSWithConfig returns a CORS middleware with config. -// See: `CORS()`. -func CORSWithConfig(config CORSConfig) echo.MiddlewareFunc { - // Defaults - if config.Skipper == nil { - config.Skipper = DefaultCORSConfig.Skipper - } - if len(config.AllowOrigins) == 0 { - config.AllowOrigins = DefaultCORSConfig.AllowOrigins - } - if len(config.AllowMethods) == 0 { - config.AllowMethods = DefaultCORSConfig.AllowMethods - } - - allowMethods := strings.Join(config.AllowMethods, ",") - allowHeaders := strings.Join(config.AllowHeaders, ",") - exposeHeaders := strings.Join(config.ExposeHeaders, ",") - maxAge := strconv.Itoa(config.MaxAge) - - return func(next echo.HandlerFunc) echo.HandlerFunc { - return func(c echo.Context) error { - if config.Skipper(c) { - return next(c) - } - - req := c.Request() - res := c.Response() - origin := req.Header.Get(echo.HeaderOrigin) - allowOrigin := "" - - // Check allowed origins - for _, o := range config.AllowOrigins { - if o == "*" && config.AllowCredentials { - allowOrigin = origin - break - } - if o == "*" || o == origin { - allowOrigin = o - break - } - } - - // Simple request - if req.Method != http.MethodOptions { - res.Header().Add(echo.HeaderVary, echo.HeaderOrigin) - res.Header().Set(echo.HeaderAccessControlAllowOrigin, allowOrigin) - if config.AllowCredentials { - res.Header().Set(echo.HeaderAccessControlAllowCredentials, "true") - } - if exposeHeaders != "" { - res.Header().Set(echo.HeaderAccessControlExposeHeaders, exposeHeaders) - } - return next(c) - } - - // Preflight request - res.Header().Add(echo.HeaderVary, echo.HeaderOrigin) - res.Header().Add(echo.HeaderVary, echo.HeaderAccessControlRequestMethod) - res.Header().Add(echo.HeaderVary, echo.HeaderAccessControlRequestHeaders) - res.Header().Set(echo.HeaderAccessControlAllowOrigin, allowOrigin) - res.Header().Set(echo.HeaderAccessControlAllowMethods, allowMethods) - if config.AllowCredentials { - res.Header().Set(echo.HeaderAccessControlAllowCredentials, "true") - } - if allowHeaders != "" { - res.Header().Set(echo.HeaderAccessControlAllowHeaders, allowHeaders) - } else { - h := req.Header.Get(echo.HeaderAccessControlRequestHeaders) - if h != "" { - res.Header().Set(echo.HeaderAccessControlAllowHeaders, h) - } - } - if config.MaxAge > 0 { - res.Header().Set(echo.HeaderAccessControlMaxAge, maxAge) - } - return c.NoContent(http.StatusNoContent) - } - } -} diff --git a/vendor/github.com/labstack/echo/middleware/csrf.go b/vendor/github.com/labstack/echo/middleware/csrf.go deleted file mode 100644 index 477872e..0000000 --- a/vendor/github.com/labstack/echo/middleware/csrf.go +++ /dev/null @@ -1,210 +0,0 @@ -package middleware - -import ( - "crypto/subtle" - "errors" - "net/http" - "strings" - "time" - - "github.com/labstack/echo" - "github.com/labstack/gommon/random" -) - -type ( - // CSRFConfig defines the config for CSRF middleware. - CSRFConfig struct { - // Skipper defines a function to skip middleware. - Skipper Skipper - - // TokenLength is the length of the generated token. - TokenLength uint8 `yaml:"token_length"` - // Optional. Default value 32. - - // TokenLookup is a string in the form of ":" that is used - // to extract token from the request. - // Optional. Default value "header:X-CSRF-Token". - // Possible values: - // - "header:" - // - "form:" - // - "query:" - TokenLookup string `yaml:"token_lookup"` - - // Context key to store generated CSRF token into context. - // Optional. Default value "csrf". - ContextKey string `yaml:"context_key"` - - // Name of the CSRF cookie. This cookie will store CSRF token. - // Optional. Default value "csrf". - CookieName string `yaml:"cookie_name"` - - // Domain of the CSRF cookie. - // Optional. Default value none. - CookieDomain string `yaml:"cookie_domain"` - - // Path of the CSRF cookie. - // Optional. Default value none. - CookiePath string `yaml:"cookie_path"` - - // Max age (in seconds) of the CSRF cookie. - // Optional. Default value 86400 (24hr). - CookieMaxAge int `yaml:"cookie_max_age"` - - // Indicates if CSRF cookie is secure. - // Optional. Default value false. - CookieSecure bool `yaml:"cookie_secure"` - - // Indicates if CSRF cookie is HTTP only. - // Optional. Default value false. - CookieHTTPOnly bool `yaml:"cookie_http_only"` - } - - // csrfTokenExtractor defines a function that takes `echo.Context` and returns - // either a token or an error. - csrfTokenExtractor func(echo.Context) (string, error) -) - -var ( - // DefaultCSRFConfig is the default CSRF middleware config. - DefaultCSRFConfig = CSRFConfig{ - Skipper: DefaultSkipper, - TokenLength: 32, - TokenLookup: "header:" + echo.HeaderXCSRFToken, - ContextKey: "csrf", - CookieName: "_csrf", - CookieMaxAge: 86400, - } -) - -// CSRF returns a Cross-Site Request Forgery (CSRF) middleware. -// See: https://en.wikipedia.org/wiki/Cross-site_request_forgery -func CSRF() echo.MiddlewareFunc { - c := DefaultCSRFConfig - return CSRFWithConfig(c) -} - -// CSRFWithConfig returns a CSRF middleware with config. -// See `CSRF()`. -func CSRFWithConfig(config CSRFConfig) echo.MiddlewareFunc { - // Defaults - if config.Skipper == nil { - config.Skipper = DefaultCSRFConfig.Skipper - } - if config.TokenLength == 0 { - config.TokenLength = DefaultCSRFConfig.TokenLength - } - if config.TokenLookup == "" { - config.TokenLookup = DefaultCSRFConfig.TokenLookup - } - if config.ContextKey == "" { - config.ContextKey = DefaultCSRFConfig.ContextKey - } - if config.CookieName == "" { - config.CookieName = DefaultCSRFConfig.CookieName - } - if config.CookieMaxAge == 0 { - config.CookieMaxAge = DefaultCSRFConfig.CookieMaxAge - } - - // Initialize - parts := strings.Split(config.TokenLookup, ":") - extractor := csrfTokenFromHeader(parts[1]) - switch parts[0] { - case "form": - extractor = csrfTokenFromForm(parts[1]) - case "query": - extractor = csrfTokenFromQuery(parts[1]) - } - - return func(next echo.HandlerFunc) echo.HandlerFunc { - return func(c echo.Context) error { - if config.Skipper(c) { - return next(c) - } - - req := c.Request() - k, err := c.Cookie(config.CookieName) - token := "" - - // Generate token - if err != nil { - token = random.String(config.TokenLength) - } else { - // Reuse token - token = k.Value - } - - switch req.Method { - case http.MethodGet, http.MethodHead, http.MethodOptions, http.MethodTrace: - default: - // Validate token only for requests which are not defined as 'safe' by RFC7231 - clientToken, err := extractor(c) - if err != nil { - return echo.NewHTTPError(http.StatusBadRequest, err.Error()) - } - if !validateCSRFToken(token, clientToken) { - return echo.NewHTTPError(http.StatusForbidden, "invalid csrf token") - } - } - - // Set CSRF cookie - cookie := new(http.Cookie) - cookie.Name = config.CookieName - cookie.Value = token - if config.CookiePath != "" { - cookie.Path = config.CookiePath - } - if config.CookieDomain != "" { - cookie.Domain = config.CookieDomain - } - cookie.Expires = time.Now().Add(time.Duration(config.CookieMaxAge) * time.Second) - cookie.Secure = config.CookieSecure - cookie.HttpOnly = config.CookieHTTPOnly - c.SetCookie(cookie) - - // Store token in the context - c.Set(config.ContextKey, token) - - // Protect clients from caching the response - c.Response().Header().Add(echo.HeaderVary, echo.HeaderCookie) - - return next(c) - } - } -} - -// csrfTokenFromForm returns a `csrfTokenExtractor` that extracts token from the -// provided request header. -func csrfTokenFromHeader(header string) csrfTokenExtractor { - return func(c echo.Context) (string, error) { - return c.Request().Header.Get(header), nil - } -} - -// csrfTokenFromForm returns a `csrfTokenExtractor` that extracts token from the -// provided form parameter. -func csrfTokenFromForm(param string) csrfTokenExtractor { - return func(c echo.Context) (string, error) { - token := c.FormValue(param) - if token == "" { - return "", errors.New("missing csrf token in the form parameter") - } - return token, nil - } -} - -// csrfTokenFromQuery returns a `csrfTokenExtractor` that extracts token from the -// provided query parameter. -func csrfTokenFromQuery(param string) csrfTokenExtractor { - return func(c echo.Context) (string, error) { - token := c.QueryParam(param) - if token == "" { - return "", errors.New("missing csrf token in the query string") - } - return token, nil - } -} - -func validateCSRFToken(token, clientToken string) bool { - return subtle.ConstantTimeCompare([]byte(token), []byte(clientToken)) == 1 -} diff --git a/vendor/github.com/labstack/echo/middleware/jwt.go b/vendor/github.com/labstack/echo/middleware/jwt.go deleted file mode 100644 index 051c589..0000000 --- a/vendor/github.com/labstack/echo/middleware/jwt.go +++ /dev/null @@ -1,227 +0,0 @@ -package middleware - -import ( - "fmt" - "net/http" - "reflect" - "strings" - - "github.com/dgrijalva/jwt-go" - "github.com/labstack/echo" -) - -type ( - // JWTConfig defines the config for JWT middleware. - JWTConfig struct { - // Skipper defines a function to skip middleware. - Skipper Skipper - - // BeforeFunc defines a function which is executed just before the middleware. - BeforeFunc BeforeFunc - - // SuccessHandler defines a function which is executed for a valid token. - SuccessHandler JWTSuccessHandler - - // ErrorHandler defines a function which is executed for an invalid token. - // It may be used to define a custom JWT error. - ErrorHandler JWTErrorHandler - - // Signing key to validate token. - // Required. - SigningKey interface{} - - // Signing method, used to check token signing method. - // Optional. Default value HS256. - SigningMethod string - - // Context key to store user information from the token into context. - // Optional. Default value "user". - ContextKey string - - // Claims are extendable claims data defining token content. - // Optional. Default value jwt.MapClaims - Claims jwt.Claims - - // TokenLookup is a string in the form of ":" that is used - // to extract token from the request. - // Optional. Default value "header:Authorization". - // Possible values: - // - "header:" - // - "query:" - // - "cookie:" - TokenLookup string - - // AuthScheme to be used in the Authorization header. - // Optional. Default value "Bearer". - AuthScheme string - - keyFunc jwt.Keyfunc - } - - // JWTSuccessHandler defines a function which is executed for a valid token. - JWTSuccessHandler func(echo.Context) - - // JWTErrorHandler defines a function which is executed for an invalid token. - JWTErrorHandler func(error) error - - jwtExtractor func(echo.Context) (string, error) -) - -// Algorithms -const ( - AlgorithmHS256 = "HS256" -) - -// Errors -var ( - ErrJWTMissing = echo.NewHTTPError(http.StatusBadRequest, "missing or malformed jwt") -) - -var ( - // DefaultJWTConfig is the default JWT auth middleware config. - DefaultJWTConfig = JWTConfig{ - Skipper: DefaultSkipper, - SigningMethod: AlgorithmHS256, - ContextKey: "user", - TokenLookup: "header:" + echo.HeaderAuthorization, - AuthScheme: "Bearer", - Claims: jwt.MapClaims{}, - } -) - -// JWT returns a JSON Web Token (JWT) auth middleware. -// -// For valid token, it sets the user in context and calls next handler. -// For invalid token, it returns "401 - Unauthorized" error. -// For missing token, it returns "400 - Bad Request" error. -// -// See: https://jwt.io/introduction -// See `JWTConfig.TokenLookup` -func JWT(key interface{}) echo.MiddlewareFunc { - c := DefaultJWTConfig - c.SigningKey = key - return JWTWithConfig(c) -} - -// JWTWithConfig returns a JWT auth middleware with config. -// See: `JWT()`. -func JWTWithConfig(config JWTConfig) echo.MiddlewareFunc { - // Defaults - if config.Skipper == nil { - config.Skipper = DefaultJWTConfig.Skipper - } - if config.SigningKey == nil { - panic("echo: jwt middleware requires signing key") - } - if config.SigningMethod == "" { - config.SigningMethod = DefaultJWTConfig.SigningMethod - } - if config.ContextKey == "" { - config.ContextKey = DefaultJWTConfig.ContextKey - } - if config.Claims == nil { - config.Claims = DefaultJWTConfig.Claims - } - if config.TokenLookup == "" { - config.TokenLookup = DefaultJWTConfig.TokenLookup - } - if config.AuthScheme == "" { - config.AuthScheme = DefaultJWTConfig.AuthScheme - } - config.keyFunc = func(t *jwt.Token) (interface{}, error) { - // Check the signing method - if t.Method.Alg() != config.SigningMethod { - return nil, fmt.Errorf("unexpected jwt signing method=%v", t.Header["alg"]) - } - return config.SigningKey, nil - } - - // Initialize - parts := strings.Split(config.TokenLookup, ":") - extractor := jwtFromHeader(parts[1], config.AuthScheme) - switch parts[0] { - case "query": - extractor = jwtFromQuery(parts[1]) - case "cookie": - extractor = jwtFromCookie(parts[1]) - } - - return func(next echo.HandlerFunc) echo.HandlerFunc { - return func(c echo.Context) error { - if config.Skipper(c) { - return next(c) - } - - if config.BeforeFunc != nil { - config.BeforeFunc(c) - } - - auth, err := extractor(c) - if err != nil { - if config.ErrorHandler != nil { - return config.ErrorHandler(err) - } - return err - } - token := new(jwt.Token) - // Issue #647, #656 - if _, ok := config.Claims.(jwt.MapClaims); ok { - token, err = jwt.Parse(auth, config.keyFunc) - } else { - t := reflect.ValueOf(config.Claims).Type().Elem() - claims := reflect.New(t).Interface().(jwt.Claims) - token, err = jwt.ParseWithClaims(auth, claims, config.keyFunc) - } - if err == nil && token.Valid { - // Store user information from token into context. - c.Set(config.ContextKey, token) - if config.SuccessHandler != nil { - config.SuccessHandler(c) - } - return next(c) - } - if config.ErrorHandler != nil { - return config.ErrorHandler(err) - } - return &echo.HTTPError{ - Code: http.StatusUnauthorized, - Message: "invalid or expired jwt", - Internal: err, - } - } - } -} - -// jwtFromHeader returns a `jwtExtractor` that extracts token from the request header. -func jwtFromHeader(header string, authScheme string) jwtExtractor { - return func(c echo.Context) (string, error) { - auth := c.Request().Header.Get(header) - l := len(authScheme) - if len(auth) > l+1 && auth[:l] == authScheme { - return auth[l+1:], nil - } - return "", ErrJWTMissing - } -} - -// jwtFromQuery returns a `jwtExtractor` that extracts token from the query string. -func jwtFromQuery(param string) jwtExtractor { - return func(c echo.Context) (string, error) { - token := c.QueryParam(param) - if token == "" { - return "", ErrJWTMissing - } - return token, nil - } -} - -// jwtFromCookie returns a `jwtExtractor` that extracts token from the named cookie. -func jwtFromCookie(name string) jwtExtractor { - return func(c echo.Context) (string, error) { - cookie, err := c.Cookie(name) - if err != nil { - return "", ErrJWTMissing - } - return cookie.Value, nil - } -} diff --git a/vendor/github.com/labstack/echo/middleware/key_auth.go b/vendor/github.com/labstack/echo/middleware/key_auth.go deleted file mode 100644 index c12f4ca..0000000 --- a/vendor/github.com/labstack/echo/middleware/key_auth.go +++ /dev/null @@ -1,150 +0,0 @@ -package middleware - -import ( - "errors" - "net/http" - "strings" - - "github.com/labstack/echo" -) - -type ( - // KeyAuthConfig defines the config for KeyAuth middleware. - KeyAuthConfig struct { - // Skipper defines a function to skip middleware. - Skipper Skipper - - // KeyLookup is a string in the form of ":" that is used - // to extract key from the request. - // Optional. Default value "header:Authorization". - // Possible values: - // - "header:" - // - "query:" - // - "form:" - KeyLookup string `yaml:"key_lookup"` - - // AuthScheme to be used in the Authorization header. - // Optional. Default value "Bearer". - AuthScheme string - - // Validator is a function to validate key. - // Required. - Validator KeyAuthValidator - } - - // KeyAuthValidator defines a function to validate KeyAuth credentials. - KeyAuthValidator func(string, echo.Context) (bool, error) - - keyExtractor func(echo.Context) (string, error) -) - -var ( - // DefaultKeyAuthConfig is the default KeyAuth middleware config. - DefaultKeyAuthConfig = KeyAuthConfig{ - Skipper: DefaultSkipper, - KeyLookup: "header:" + echo.HeaderAuthorization, - AuthScheme: "Bearer", - } -) - -// KeyAuth returns an KeyAuth middleware. -// -// For valid key it calls the next handler. -// For invalid key, it sends "401 - Unauthorized" response. -// For missing key, it sends "400 - Bad Request" response. -func KeyAuth(fn KeyAuthValidator) echo.MiddlewareFunc { - c := DefaultKeyAuthConfig - c.Validator = fn - return KeyAuthWithConfig(c) -} - -// KeyAuthWithConfig returns an KeyAuth middleware with config. -// See `KeyAuth()`. -func KeyAuthWithConfig(config KeyAuthConfig) echo.MiddlewareFunc { - // Defaults - if config.Skipper == nil { - config.Skipper = DefaultKeyAuthConfig.Skipper - } - // Defaults - if config.AuthScheme == "" { - config.AuthScheme = DefaultKeyAuthConfig.AuthScheme - } - if config.KeyLookup == "" { - config.KeyLookup = DefaultKeyAuthConfig.KeyLookup - } - if config.Validator == nil { - panic("echo: key-auth middleware requires a validator function") - } - - // Initialize - parts := strings.Split(config.KeyLookup, ":") - extractor := keyFromHeader(parts[1], config.AuthScheme) - switch parts[0] { - case "query": - extractor = keyFromQuery(parts[1]) - case "form": - extractor = keyFromForm(parts[1]) - } - - return func(next echo.HandlerFunc) echo.HandlerFunc { - return func(c echo.Context) error { - if config.Skipper(c) { - return next(c) - } - - // Extract and verify key - key, err := extractor(c) - if err != nil { - return echo.NewHTTPError(http.StatusBadRequest, err.Error()) - } - valid, err := config.Validator(key, c) - if err != nil { - return err - } else if valid { - return next(c) - } - - return echo.ErrUnauthorized - } - } -} - -// keyFromHeader returns a `keyExtractor` that extracts key from the request header. -func keyFromHeader(header string, authScheme string) keyExtractor { - return func(c echo.Context) (string, error) { - auth := c.Request().Header.Get(header) - if auth == "" { - return "", errors.New("missing key in request header") - } - if header == echo.HeaderAuthorization { - l := len(authScheme) - if len(auth) > l+1 && auth[:l] == authScheme { - return auth[l+1:], nil - } - return "", errors.New("invalid key in the request header") - } - return auth, nil - } -} - -// keyFromQuery returns a `keyExtractor` that extracts key from the query string. -func keyFromQuery(param string) keyExtractor { - return func(c echo.Context) (string, error) { - key := c.QueryParam(param) - if key == "" { - return "", errors.New("missing key in the query string") - } - return key, nil - } -} - -// keyFromForm returns a `keyExtractor` that extracts key from the form. -func keyFromForm(param string) keyExtractor { - return func(c echo.Context) (string, error) { - key := c.FormValue(param) - if key == "" { - return "", errors.New("missing key in the form") - } - return key, nil - } -} diff --git a/vendor/github.com/labstack/echo/middleware/logger.go b/vendor/github.com/labstack/echo/middleware/logger.go deleted file mode 100644 index dab3ef7..0000000 --- a/vendor/github.com/labstack/echo/middleware/logger.go +++ /dev/null @@ -1,217 +0,0 @@ -package middleware - -import ( - "bytes" - "io" - "os" - "strconv" - "strings" - "sync" - "time" - - "github.com/labstack/echo" - "github.com/labstack/gommon/color" - "github.com/valyala/fasttemplate" -) - -type ( - // LoggerConfig defines the config for Logger middleware. - LoggerConfig struct { - // Skipper defines a function to skip middleware. - Skipper Skipper - - // Tags to constructed the logger format. - // - // - time_unix - // - time_unix_nano - // - time_rfc3339 - // - time_rfc3339_nano - // - time_custom - // - id (Request ID) - // - remote_ip - // - uri - // - host - // - method - // - path - // - protocol - // - referer - // - user_agent - // - status - // - error - // - latency (In nanoseconds) - // - latency_human (Human readable) - // - bytes_in (Bytes received) - // - bytes_out (Bytes sent) - // - header: - // - query: - // - form: - // - // Example "${remote_ip} ${status}" - // - // Optional. Default value DefaultLoggerConfig.Format. - Format string `yaml:"format"` - - // Optional. Default value DefaultLoggerConfig.CustomTimeFormat. - CustomTimeFormat string `yaml:"custom_time_format"` - - // Output is a writer where logs in JSON format are written. - // Optional. Default value os.Stdout. - Output io.Writer - - template *fasttemplate.Template - colorer *color.Color - pool *sync.Pool - } -) - -var ( - // DefaultLoggerConfig is the default Logger middleware config. - DefaultLoggerConfig = LoggerConfig{ - Skipper: DefaultSkipper, - Format: `{"time":"${time_rfc3339_nano}","id":"${id}","remote_ip":"${remote_ip}",` + - `"host":"${host}","method":"${method}","uri":"${uri}","user_agent":"${user_agent}",` + - `"status":${status},"error":"${error}","latency":${latency},"latency_human":"${latency_human}"` + - `,"bytes_in":${bytes_in},"bytes_out":${bytes_out}}` + "\n", - CustomTimeFormat: "2006-01-02 15:04:05.00000", - Output: os.Stdout, - colorer: color.New(), - } -) - -// Logger returns a middleware that logs HTTP requests. -func Logger() echo.MiddlewareFunc { - return LoggerWithConfig(DefaultLoggerConfig) -} - -// LoggerWithConfig returns a Logger middleware with config. -// See: `Logger()`. -func LoggerWithConfig(config LoggerConfig) echo.MiddlewareFunc { - // Defaults - if config.Skipper == nil { - config.Skipper = DefaultLoggerConfig.Skipper - } - if config.Format == "" { - config.Format = DefaultLoggerConfig.Format - } - if config.Output == nil { - config.Output = DefaultLoggerConfig.Output - } - - config.template = fasttemplate.New(config.Format, "${", "}") - config.colorer = color.New() - config.colorer.SetOutput(config.Output) - config.pool = &sync.Pool{ - New: func() interface{} { - return bytes.NewBuffer(make([]byte, 256)) - }, - } - - return func(next echo.HandlerFunc) echo.HandlerFunc { - return func(c echo.Context) (err error) { - if config.Skipper(c) { - return next(c) - } - - req := c.Request() - res := c.Response() - start := time.Now() - if err = next(c); err != nil { - c.Error(err) - } - stop := time.Now() - buf := config.pool.Get().(*bytes.Buffer) - buf.Reset() - defer config.pool.Put(buf) - - if _, err = config.template.ExecuteFunc(buf, func(w io.Writer, tag string) (int, error) { - switch tag { - case "time_unix": - return buf.WriteString(strconv.FormatInt(time.Now().Unix(), 10)) - case "time_unix_nano": - return buf.WriteString(strconv.FormatInt(time.Now().UnixNano(), 10)) - case "time_rfc3339": - return buf.WriteString(time.Now().Format(time.RFC3339)) - case "time_rfc3339_nano": - return buf.WriteString(time.Now().Format(time.RFC3339Nano)) - case "time_custom": - return buf.WriteString(time.Now().Format(config.CustomTimeFormat)) - case "id": - id := req.Header.Get(echo.HeaderXRequestID) - if id == "" { - id = res.Header().Get(echo.HeaderXRequestID) - } - return buf.WriteString(id) - case "remote_ip": - return buf.WriteString(c.RealIP()) - case "host": - return buf.WriteString(req.Host) - case "uri": - return buf.WriteString(req.RequestURI) - case "method": - return buf.WriteString(req.Method) - case "path": - p := req.URL.Path - if p == "" { - p = "/" - } - return buf.WriteString(p) - case "protocol": - return buf.WriteString(req.Proto) - case "referer": - return buf.WriteString(req.Referer()) - case "user_agent": - return buf.WriteString(req.UserAgent()) - case "status": - n := res.Status - s := config.colorer.Green(n) - switch { - case n >= 500: - s = config.colorer.Red(n) - case n >= 400: - s = config.colorer.Yellow(n) - case n >= 300: - s = config.colorer.Cyan(n) - } - return buf.WriteString(s) - case "error": - if err != nil { - return buf.WriteString(err.Error()) - } - case "latency": - l := stop.Sub(start) - return buf.WriteString(strconv.FormatInt(int64(l), 10)) - case "latency_human": - return buf.WriteString(stop.Sub(start).String()) - case "bytes_in": - cl := req.Header.Get(echo.HeaderContentLength) - if cl == "" { - cl = "0" - } - return buf.WriteString(cl) - case "bytes_out": - return buf.WriteString(strconv.FormatInt(res.Size, 10)) - default: - switch { - case strings.HasPrefix(tag, "header:"): - return buf.Write([]byte(c.Request().Header.Get(tag[7:]))) - case strings.HasPrefix(tag, "query:"): - return buf.Write([]byte(c.QueryParam(tag[6:]))) - case strings.HasPrefix(tag, "form:"): - return buf.Write([]byte(c.FormValue(tag[5:]))) - case strings.HasPrefix(tag, "cookie:"): - cookie, err := c.Cookie(tag[7:]) - if err == nil { - return buf.Write([]byte(cookie.Value)) - } - } - } - return 0, nil - }); err != nil { - return - } - - _, err = config.Output.Write(buf.Bytes()) - return - } - } -} diff --git a/vendor/github.com/labstack/echo/middleware/method_override.go b/vendor/github.com/labstack/echo/middleware/method_override.go deleted file mode 100644 index 0a6103b..0000000 --- a/vendor/github.com/labstack/echo/middleware/method_override.go +++ /dev/null @@ -1,92 +0,0 @@ -package middleware - -import ( - "net/http" - - "github.com/labstack/echo" -) - -type ( - // MethodOverrideConfig defines the config for MethodOverride middleware. - MethodOverrideConfig struct { - // Skipper defines a function to skip middleware. - Skipper Skipper - - // Getter is a function that gets overridden method from the request. - // Optional. Default values MethodFromHeader(echo.HeaderXHTTPMethodOverride). - Getter MethodOverrideGetter - } - - // MethodOverrideGetter is a function that gets overridden method from the request - MethodOverrideGetter func(echo.Context) string -) - -var ( - // DefaultMethodOverrideConfig is the default MethodOverride middleware config. - DefaultMethodOverrideConfig = MethodOverrideConfig{ - Skipper: DefaultSkipper, - Getter: MethodFromHeader(echo.HeaderXHTTPMethodOverride), - } -) - -// MethodOverride returns a MethodOverride middleware. -// MethodOverride middleware checks for the overridden method from the request and -// uses it instead of the original method. -// -// For security reasons, only `POST` method can be overridden. -func MethodOverride() echo.MiddlewareFunc { - return MethodOverrideWithConfig(DefaultMethodOverrideConfig) -} - -// MethodOverrideWithConfig returns a MethodOverride middleware with config. -// See: `MethodOverride()`. -func MethodOverrideWithConfig(config MethodOverrideConfig) echo.MiddlewareFunc { - // Defaults - if config.Skipper == nil { - config.Skipper = DefaultMethodOverrideConfig.Skipper - } - if config.Getter == nil { - config.Getter = DefaultMethodOverrideConfig.Getter - } - - return func(next echo.HandlerFunc) echo.HandlerFunc { - return func(c echo.Context) error { - if config.Skipper(c) { - return next(c) - } - - req := c.Request() - if req.Method == http.MethodPost { - m := config.Getter(c) - if m != "" { - req.Method = m - } - } - return next(c) - } - } -} - -// MethodFromHeader is a `MethodOverrideGetter` that gets overridden method from -// the request header. -func MethodFromHeader(header string) MethodOverrideGetter { - return func(c echo.Context) string { - return c.Request().Header.Get(header) - } -} - -// MethodFromForm is a `MethodOverrideGetter` that gets overridden method from the -// form parameter. -func MethodFromForm(param string) MethodOverrideGetter { - return func(c echo.Context) string { - return c.FormValue(param) - } -} - -// MethodFromQuery is a `MethodOverrideGetter` that gets overridden method from -// the query parameter. -func MethodFromQuery(param string) MethodOverrideGetter { - return func(c echo.Context) string { - return c.QueryParam(param) - } -} diff --git a/vendor/github.com/labstack/echo/middleware/middleware.go b/vendor/github.com/labstack/echo/middleware/middleware.go deleted file mode 100644 index febbdae..0000000 --- a/vendor/github.com/labstack/echo/middleware/middleware.go +++ /dev/null @@ -1,38 +0,0 @@ -package middleware - -import ( - "regexp" - "strconv" - "strings" - - "github.com/labstack/echo" -) - -type ( - // Skipper defines a function to skip middleware. Returning true skips processing - // the middleware. - Skipper func(echo.Context) bool - - // BeforeFunc defines a function which is executed just before the middleware. - BeforeFunc func(echo.Context) -) - -func captureTokens(pattern *regexp.Regexp, input string) *strings.Replacer { - groups := pattern.FindAllStringSubmatch(input, -1) - if groups == nil { - return nil - } - values := groups[0][1:] - replace := make([]string, 2*len(values)) - for i, v := range values { - j := 2 * i - replace[j] = "$" + strconv.Itoa(i+1) - replace[j+1] = v - } - return strings.NewReplacer(replace...) -} - -// DefaultSkipper returns false which processes the middleware. -func DefaultSkipper(echo.Context) bool { - return false -} diff --git a/vendor/github.com/labstack/echo/middleware/proxy.go b/vendor/github.com/labstack/echo/middleware/proxy.go deleted file mode 100644 index 1789c75..0000000 --- a/vendor/github.com/labstack/echo/middleware/proxy.go +++ /dev/null @@ -1,258 +0,0 @@ -package middleware - -import ( - "fmt" - "io" - "math/rand" - "net" - "net/http" - "net/url" - "regexp" - "strings" - "sync" - "sync/atomic" - "time" - - "github.com/labstack/echo" -) - -// TODO: Handle TLS proxy - -type ( - // ProxyConfig defines the config for Proxy middleware. - ProxyConfig struct { - // Skipper defines a function to skip middleware. - Skipper Skipper - - // Balancer defines a load balancing technique. - // Required. - Balancer ProxyBalancer - - // Rewrite defines URL path rewrite rules. The values captured in asterisk can be - // retrieved by index e.g. $1, $2 and so on. - // Examples: - // "/old": "/new", - // "/api/*": "/$1", - // "/js/*": "/public/javascripts/$1", - // "/users/*/orders/*": "/user/$1/order/$2", - Rewrite map[string]string - - // Context key to store selected ProxyTarget into context. - // Optional. Default value "target". - ContextKey string - - // To customize the transport to remote. - // Examples: If custom TLS certificates are required. - Transport http.RoundTripper - - rewriteRegex map[*regexp.Regexp]string - } - - // ProxyTarget defines the upstream target. - ProxyTarget struct { - Name string - URL *url.URL - Meta echo.Map - } - - // ProxyBalancer defines an interface to implement a load balancing technique. - ProxyBalancer interface { - AddTarget(*ProxyTarget) bool - RemoveTarget(string) bool - Next(echo.Context) *ProxyTarget - } - - commonBalancer struct { - targets []*ProxyTarget - mutex sync.RWMutex - } - - // RandomBalancer implements a random load balancing technique. - randomBalancer struct { - *commonBalancer - random *rand.Rand - } - - // RoundRobinBalancer implements a round-robin load balancing technique. - roundRobinBalancer struct { - *commonBalancer - i uint32 - } -) - -var ( - // DefaultProxyConfig is the default Proxy middleware config. - DefaultProxyConfig = ProxyConfig{ - Skipper: DefaultSkipper, - ContextKey: "target", - } -) - -func proxyRaw(t *ProxyTarget, c echo.Context) http.Handler { - return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - in, _, err := c.Response().Hijack() - if err != nil { - c.Error(fmt.Errorf("proxy raw, hijack error=%v, url=%s", t.URL, err)) - return - } - defer in.Close() - - out, err := net.Dial("tcp", t.URL.Host) - if err != nil { - he := echo.NewHTTPError(http.StatusBadGateway, fmt.Sprintf("proxy raw, dial error=%v, url=%s", t.URL, err)) - c.Error(he) - return - } - defer out.Close() - - // Write header - err = r.Write(out) - if err != nil { - he := echo.NewHTTPError(http.StatusBadGateway, fmt.Sprintf("proxy raw, request header copy error=%v, url=%s", t.URL, err)) - c.Error(he) - return - } - - errCh := make(chan error, 2) - cp := func(dst io.Writer, src io.Reader) { - _, err = io.Copy(dst, src) - errCh <- err - } - - go cp(out, in) - go cp(in, out) - err = <-errCh - if err != nil && err != io.EOF { - c.Logger().Errorf("proxy raw, copy body error=%v, url=%s", t.URL, err) - } - }) -} - -// NewRandomBalancer returns a random proxy balancer. -func NewRandomBalancer(targets []*ProxyTarget) ProxyBalancer { - b := &randomBalancer{commonBalancer: new(commonBalancer)} - b.targets = targets - return b -} - -// NewRoundRobinBalancer returns a round-robin proxy balancer. -func NewRoundRobinBalancer(targets []*ProxyTarget) ProxyBalancer { - b := &roundRobinBalancer{commonBalancer: new(commonBalancer)} - b.targets = targets - return b -} - -// AddTarget adds an upstream target to the list. -func (b *commonBalancer) AddTarget(target *ProxyTarget) bool { - for _, t := range b.targets { - if t.Name == target.Name { - return false - } - } - b.mutex.Lock() - defer b.mutex.Unlock() - b.targets = append(b.targets, target) - return true -} - -// RemoveTarget removes an upstream target from the list. -func (b *commonBalancer) RemoveTarget(name string) bool { - b.mutex.Lock() - defer b.mutex.Unlock() - for i, t := range b.targets { - if t.Name == name { - b.targets = append(b.targets[:i], b.targets[i+1:]...) - return true - } - } - return false -} - -// Next randomly returns an upstream target. -func (b *randomBalancer) Next(c echo.Context) *ProxyTarget { - if b.random == nil { - b.random = rand.New(rand.NewSource(int64(time.Now().Nanosecond()))) - } - b.mutex.RLock() - defer b.mutex.RUnlock() - return b.targets[b.random.Intn(len(b.targets))] -} - -// Next returns an upstream target using round-robin technique. -func (b *roundRobinBalancer) Next(c echo.Context) *ProxyTarget { - b.i = b.i % uint32(len(b.targets)) - t := b.targets[b.i] - atomic.AddUint32(&b.i, 1) - return t -} - -// Proxy returns a Proxy middleware. -// -// Proxy middleware forwards the request to upstream server using a configured load balancing technique. -func Proxy(balancer ProxyBalancer) echo.MiddlewareFunc { - c := DefaultProxyConfig - c.Balancer = balancer - return ProxyWithConfig(c) -} - -// ProxyWithConfig returns a Proxy middleware with config. -// See: `Proxy()` -func ProxyWithConfig(config ProxyConfig) echo.MiddlewareFunc { - // Defaults - if config.Skipper == nil { - config.Skipper = DefaultLoggerConfig.Skipper - } - if config.Balancer == nil { - panic("echo: proxy middleware requires balancer") - } - config.rewriteRegex = map[*regexp.Regexp]string{} - - // Initialize - for k, v := range config.Rewrite { - k = strings.Replace(k, "*", "(\\S*)", -1) - config.rewriteRegex[regexp.MustCompile(k)] = v - } - - return func(next echo.HandlerFunc) echo.HandlerFunc { - return func(c echo.Context) (err error) { - if config.Skipper(c) { - return next(c) - } - - req := c.Request() - res := c.Response() - tgt := config.Balancer.Next(c) - c.Set(config.ContextKey, tgt) - - // Rewrite - for k, v := range config.rewriteRegex { - replacer := captureTokens(k, req.URL.Path) - if replacer != nil { - req.URL.Path = replacer.Replace(v) - } - } - - // Fix header - if req.Header.Get(echo.HeaderXRealIP) == "" { - req.Header.Set(echo.HeaderXRealIP, c.RealIP()) - } - if req.Header.Get(echo.HeaderXForwardedProto) == "" { - req.Header.Set(echo.HeaderXForwardedProto, c.Scheme()) - } - if c.IsWebSocket() && req.Header.Get(echo.HeaderXForwardedFor) == "" { // For HTTP, it is automatically set by Go HTTP reverse proxy. - req.Header.Set(echo.HeaderXForwardedFor, c.RealIP()) - } - - // Proxy - switch { - case c.IsWebSocket(): - proxyRaw(tgt, c).ServeHTTP(res, req) - case req.Header.Get(echo.HeaderAccept) == "text/event-stream": - default: - proxyHTTP(tgt, c, config).ServeHTTP(res, req) - } - - return - } - } -} diff --git a/vendor/github.com/labstack/echo/middleware/proxy_1_11.go b/vendor/github.com/labstack/echo/middleware/proxy_1_11.go deleted file mode 100644 index 193015a..0000000 --- a/vendor/github.com/labstack/echo/middleware/proxy_1_11.go +++ /dev/null @@ -1,25 +0,0 @@ -// +build go1.11 - -package middleware - -import ( - "fmt" - "net/http" - "net/http/httputil" - - "github.com/labstack/echo" -) - -func proxyHTTP(tgt *ProxyTarget, c echo.Context, config ProxyConfig) http.Handler { - proxy := httputil.NewSingleHostReverseProxy(tgt.URL) - proxy.ErrorHandler = func(resp http.ResponseWriter, req *http.Request, err error) { - desc := tgt.URL.String() - if tgt.Name != "" { - desc = fmt.Sprintf("%s(%s)", tgt.Name, tgt.URL.String()) - } - c.Logger().Errorf("remote %s unreachable, could not forward: %v", desc, err) - c.Error(echo.NewHTTPError(http.StatusServiceUnavailable)) - } - proxy.Transport = config.Transport - return proxy -} diff --git a/vendor/github.com/labstack/echo/middleware/proxy_1_11_n.go b/vendor/github.com/labstack/echo/middleware/proxy_1_11_n.go deleted file mode 100644 index d4620e2..0000000 --- a/vendor/github.com/labstack/echo/middleware/proxy_1_11_n.go +++ /dev/null @@ -1,13 +0,0 @@ -// +build !go1.11 - -package middleware - -import ( - "github.com/labstack/echo" - "net/http" - "net/http/httputil" -) - -func proxyHTTP(t *ProxyTarget, c echo.Context, config ProxyConfig) http.Handler { - return httputil.NewSingleHostReverseProxy(t.URL) -} diff --git a/vendor/github.com/labstack/echo/middleware/recover.go b/vendor/github.com/labstack/echo/middleware/recover.go deleted file mode 100644 index 2a42c5b..0000000 --- a/vendor/github.com/labstack/echo/middleware/recover.go +++ /dev/null @@ -1,81 +0,0 @@ -package middleware - -import ( - "fmt" - "runtime" - - "github.com/labstack/echo" -) - -type ( - // RecoverConfig defines the config for Recover middleware. - RecoverConfig struct { - // Skipper defines a function to skip middleware. - Skipper Skipper - - // Size of the stack to be printed. - // Optional. Default value 4KB. - StackSize int `yaml:"stack_size"` - - // DisableStackAll disables formatting stack traces of all other goroutines - // into buffer after the trace for the current goroutine. - // Optional. Default value false. - DisableStackAll bool `yaml:"disable_stack_all"` - - // DisablePrintStack disables printing stack trace. - // Optional. Default value as false. - DisablePrintStack bool `yaml:"disable_print_stack"` - } -) - -var ( - // DefaultRecoverConfig is the default Recover middleware config. - DefaultRecoverConfig = RecoverConfig{ - Skipper: DefaultSkipper, - StackSize: 4 << 10, // 4 KB - DisableStackAll: false, - DisablePrintStack: false, - } -) - -// Recover returns a middleware which recovers from panics anywhere in the chain -// and handles the control to the centralized HTTPErrorHandler. -func Recover() echo.MiddlewareFunc { - return RecoverWithConfig(DefaultRecoverConfig) -} - -// RecoverWithConfig returns a Recover middleware with config. -// See: `Recover()`. -func RecoverWithConfig(config RecoverConfig) echo.MiddlewareFunc { - // Defaults - if config.Skipper == nil { - config.Skipper = DefaultRecoverConfig.Skipper - } - if config.StackSize == 0 { - config.StackSize = DefaultRecoverConfig.StackSize - } - - return func(next echo.HandlerFunc) echo.HandlerFunc { - return func(c echo.Context) error { - if config.Skipper(c) { - return next(c) - } - - defer func() { - if r := recover(); r != nil { - err, ok := r.(error) - if !ok { - err = fmt.Errorf("%v", r) - } - stack := make([]byte, config.StackSize) - length := runtime.Stack(stack, !config.DisableStackAll) - if !config.DisablePrintStack { - c.Logger().Printf("[PANIC RECOVER] %v %s\n", err, stack[:length]) - } - c.Error(err) - } - }() - return next(c) - } - } -} diff --git a/vendor/github.com/labstack/echo/middleware/redirect.go b/vendor/github.com/labstack/echo/middleware/redirect.go deleted file mode 100644 index 422263d..0000000 --- a/vendor/github.com/labstack/echo/middleware/redirect.go +++ /dev/null @@ -1,153 +0,0 @@ -package middleware - -import ( - "net/http" - - "github.com/labstack/echo" -) - -// RedirectConfig defines the config for Redirect middleware. -type RedirectConfig struct { - // Skipper defines a function to skip middleware. - Skipper - - // Status code to be used when redirecting the request. - // Optional. Default value http.StatusMovedPermanently. - Code int `yaml:"code"` -} - -// redirectLogic represents a function that given a scheme, host and uri -// can both: 1) determine if redirect is needed (will set ok accordingly) and -// 2) return the appropriate redirect url. -type redirectLogic func(scheme, host, uri string) (ok bool, url string) - -const www = "www" - -// DefaultRedirectConfig is the default Redirect middleware config. -var DefaultRedirectConfig = RedirectConfig{ - Skipper: DefaultSkipper, - Code: http.StatusMovedPermanently, -} - -// HTTPSRedirect redirects http requests to https. -// For example, http://labstack.com will be redirect to https://labstack.com. -// -// Usage `Echo#Pre(HTTPSRedirect())` -func HTTPSRedirect() echo.MiddlewareFunc { - return HTTPSRedirectWithConfig(DefaultRedirectConfig) -} - -// HTTPSRedirectWithConfig returns an HTTPSRedirect middleware with config. -// See `HTTPSRedirect()`. -func HTTPSRedirectWithConfig(config RedirectConfig) echo.MiddlewareFunc { - return redirect(config, func(scheme, host, uri string) (ok bool, url string) { - if ok = scheme != "https"; ok { - url = "https://" + host + uri - } - return - }) -} - -// HTTPSWWWRedirect redirects http requests to https www. -// For example, http://labstack.com will be redirect to https://www.labstack.com. -// -// Usage `Echo#Pre(HTTPSWWWRedirect())` -func HTTPSWWWRedirect() echo.MiddlewareFunc { - return HTTPSWWWRedirectWithConfig(DefaultRedirectConfig) -} - -// HTTPSWWWRedirectWithConfig returns an HTTPSRedirect middleware with config. -// See `HTTPSWWWRedirect()`. -func HTTPSWWWRedirectWithConfig(config RedirectConfig) echo.MiddlewareFunc { - return redirect(config, func(scheme, host, uri string) (ok bool, url string) { - if ok = scheme != "https" && host[:3] != www; ok { - url = "https://www." + host + uri - } - return - }) -} - -// HTTPSNonWWWRedirect redirects http requests to https non www. -// For example, http://www.labstack.com will be redirect to https://labstack.com. -// -// Usage `Echo#Pre(HTTPSNonWWWRedirect())` -func HTTPSNonWWWRedirect() echo.MiddlewareFunc { - return HTTPSNonWWWRedirectWithConfig(DefaultRedirectConfig) -} - -// HTTPSNonWWWRedirectWithConfig returns an HTTPSRedirect middleware with config. -// See `HTTPSNonWWWRedirect()`. -func HTTPSNonWWWRedirectWithConfig(config RedirectConfig) echo.MiddlewareFunc { - return redirect(config, func(scheme, host, uri string) (ok bool, url string) { - if ok = scheme != "https"; ok { - if host[:3] == www { - host = host[4:] - } - url = "https://" + host + uri - } - return - }) -} - -// WWWRedirect redirects non www requests to www. -// For example, http://labstack.com will be redirect to http://www.labstack.com. -// -// Usage `Echo#Pre(WWWRedirect())` -func WWWRedirect() echo.MiddlewareFunc { - return WWWRedirectWithConfig(DefaultRedirectConfig) -} - -// WWWRedirectWithConfig returns an HTTPSRedirect middleware with config. -// See `WWWRedirect()`. -func WWWRedirectWithConfig(config RedirectConfig) echo.MiddlewareFunc { - return redirect(config, func(scheme, host, uri string) (ok bool, url string) { - if ok = host[:3] != www; ok { - url = scheme + "://www." + host + uri - } - return - }) -} - -// NonWWWRedirect redirects www requests to non www. -// For example, http://www.labstack.com will be redirect to http://labstack.com. -// -// Usage `Echo#Pre(NonWWWRedirect())` -func NonWWWRedirect() echo.MiddlewareFunc { - return NonWWWRedirectWithConfig(DefaultRedirectConfig) -} - -// NonWWWRedirectWithConfig returns an HTTPSRedirect middleware with config. -// See `NonWWWRedirect()`. -func NonWWWRedirectWithConfig(config RedirectConfig) echo.MiddlewareFunc { - return redirect(config, func(scheme, host, uri string) (ok bool, url string) { - if ok = host[:3] == www; ok { - url = scheme + "://" + host[4:] + uri - } - return - }) -} - -func redirect(config RedirectConfig, cb redirectLogic) echo.MiddlewareFunc { - if config.Skipper == nil { - config.Skipper = DefaultTrailingSlashConfig.Skipper - } - if config.Code == 0 { - config.Code = DefaultRedirectConfig.Code - } - - return func(next echo.HandlerFunc) echo.HandlerFunc { - return func(c echo.Context) error { - if config.Skipper(c) { - return next(c) - } - - req, scheme := c.Request(), c.Scheme() - host := req.Host - if ok, url := cb(scheme, host, req.RequestURI); ok { - return c.Redirect(config.Code, url) - } - - return next(c) - } - } -} diff --git a/vendor/github.com/labstack/echo/middleware/request_id.go b/vendor/github.com/labstack/echo/middleware/request_id.go deleted file mode 100644 index f376c29..0000000 --- a/vendor/github.com/labstack/echo/middleware/request_id.go +++ /dev/null @@ -1,64 +0,0 @@ -package middleware - -import ( - "github.com/labstack/echo" - "github.com/labstack/gommon/random" -) - -type ( - // RequestIDConfig defines the config for RequestID middleware. - RequestIDConfig struct { - // Skipper defines a function to skip middleware. - Skipper Skipper - - // Generator defines a function to generate an ID. - // Optional. Default value random.String(32). - Generator func() string - } -) - -var ( - // DefaultRequestIDConfig is the default RequestID middleware config. - DefaultRequestIDConfig = RequestIDConfig{ - Skipper: DefaultSkipper, - Generator: generator, - } -) - -// RequestID returns a X-Request-ID middleware. -func RequestID() echo.MiddlewareFunc { - return RequestIDWithConfig(DefaultRequestIDConfig) -} - -// RequestIDWithConfig returns a X-Request-ID middleware with config. -func RequestIDWithConfig(config RequestIDConfig) echo.MiddlewareFunc { - // Defaults - if config.Skipper == nil { - config.Skipper = DefaultRequestIDConfig.Skipper - } - if config.Generator == nil { - config.Generator = generator - } - - return func(next echo.HandlerFunc) echo.HandlerFunc { - return func(c echo.Context) error { - if config.Skipper(c) { - return next(c) - } - - req := c.Request() - res := c.Response() - rid := req.Header.Get(echo.HeaderXRequestID) - if rid == "" { - rid = config.Generator() - } - res.Header().Set(echo.HeaderXRequestID, rid) - - return next(c) - } - } -} - -func generator() string { - return random.String(32) -} diff --git a/vendor/github.com/labstack/echo/middleware/rewrite.go b/vendor/github.com/labstack/echo/middleware/rewrite.go deleted file mode 100644 index 1b32212..0000000 --- a/vendor/github.com/labstack/echo/middleware/rewrite.go +++ /dev/null @@ -1,84 +0,0 @@ -package middleware - -import ( - "regexp" - "strings" - - "github.com/labstack/echo" -) - -type ( - // RewriteConfig defines the config for Rewrite middleware. - RewriteConfig struct { - // Skipper defines a function to skip middleware. - Skipper Skipper - - // Rules defines the URL path rewrite rules. The values captured in asterisk can be - // retrieved by index e.g. $1, $2 and so on. - // Example: - // "/old": "/new", - // "/api/*": "/$1", - // "/js/*": "/public/javascripts/$1", - // "/users/*/orders/*": "/user/$1/order/$2", - // Required. - Rules map[string]string `yaml:"rules"` - - rulesRegex map[*regexp.Regexp]string - } -) - -var ( - // DefaultRewriteConfig is the default Rewrite middleware config. - DefaultRewriteConfig = RewriteConfig{ - Skipper: DefaultSkipper, - } -) - -// Rewrite returns a Rewrite middleware. -// -// Rewrite middleware rewrites the URL path based on the provided rules. -func Rewrite(rules map[string]string) echo.MiddlewareFunc { - c := DefaultRewriteConfig - c.Rules = rules - return RewriteWithConfig(c) -} - -// RewriteWithConfig returns a Rewrite middleware with config. -// See: `Rewrite()`. -func RewriteWithConfig(config RewriteConfig) echo.MiddlewareFunc { - // Defaults - if config.Rules == nil { - panic("echo: rewrite middleware requires url path rewrite rules") - } - if config.Skipper == nil { - config.Skipper = DefaultBodyDumpConfig.Skipper - } - config.rulesRegex = map[*regexp.Regexp]string{} - - // Initialize - for k, v := range config.Rules { - k = strings.Replace(k, "*", "(.*)", -1) - k = k + "$" - config.rulesRegex[regexp.MustCompile(k)] = v - } - - return func(next echo.HandlerFunc) echo.HandlerFunc { - return func(c echo.Context) (err error) { - if config.Skipper(c) { - return next(c) - } - - req := c.Request() - - // Rewrite - for k, v := range config.rulesRegex { - replacer := captureTokens(k, req.URL.Path) - if replacer != nil { - req.URL.Path = replacer.Replace(v) - break - } - } - return next(c) - } - } -} diff --git a/vendor/github.com/labstack/echo/middleware/secure.go b/vendor/github.com/labstack/echo/middleware/secure.go deleted file mode 100644 index 188c0c4..0000000 --- a/vendor/github.com/labstack/echo/middleware/secure.go +++ /dev/null @@ -1,116 +0,0 @@ -package middleware - -import ( - "fmt" - - "github.com/labstack/echo" -) - -type ( - // SecureConfig defines the config for Secure middleware. - SecureConfig struct { - // Skipper defines a function to skip middleware. - Skipper Skipper - - // XSSProtection provides protection against cross-site scripting attack (XSS) - // by setting the `X-XSS-Protection` header. - // Optional. Default value "1; mode=block". - XSSProtection string `yaml:"xss_protection"` - - // ContentTypeNosniff provides protection against overriding Content-Type - // header by setting the `X-Content-Type-Options` header. - // Optional. Default value "nosniff". - ContentTypeNosniff string `yaml:"content_type_nosniff"` - - // XFrameOptions can be used to indicate whether or not a browser should - // be allowed to render a page in a ,