From eddd9c34a1d983ad19984c23eed5a6e32d2c00b7 Mon Sep 17 00:00:00 2001 From: Patricio Palladino Date: Mon, 8 Jun 2020 17:23:32 -0300 Subject: [PATCH 001/219] Improve README.md --- README.md | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index f47ba0b..52e2535 100644 --- a/README.md +++ b/README.md @@ -5,8 +5,6 @@ [![license][5]][6] [![Types][7]][8] -⚠️ **WARNING: This project is under active development. Don't use it until a stable version is released.** ⚠️ - This npm package contains all the cryptographic primitives normally used when developing Javascript/TypeScript applications and tools for Ethereum. @@ -504,10 +502,30 @@ console.log(generateMnemonic(wordlist)); This package works with all the major Javascript bundlers. It is tested with `webpack`, `Rollup`, `Parcel`, and `Browserify`. -For using it with `Rollup` you need to use these plugins: -* [`rollup-plugin-node-builtins`](https://www.npmjs.com/package/rollup-plugin-node-builtins) with the `browser` option set to `true`, and `preferBuiltins` to `false`. -* [`rollup-plugin-node-globals`](https://www.npmjs.com/package/rollup-plugin-node-globals) -* [`rollup-plugin-json`](https://www.npmjs.com/package/rollup-plugin-json). +### Rollup setup + +Using this library with Rollup requires the following plugins: + +[`@rollup/plugin-commonjs`](https://www.npmjs.com/package/@rollup/plugin-commonjs) +[`@rollup/plugin-json`](https://www.npmjs.com/package/@rollup/plugin-json) +[`@rollup/plugin-node-resolve`](https://www.npmjs.com/package/@rollup/plugin-node-resolve) +[`rollup-plugin-node-builtins`](https://www.npmjs.com/package/rollup-plugin-node-builtins) +[`rollup-plugin-node-globals`](https://www.npmjs.com/package/rollup-plugin-node-globals) + +These can be used by setting your plugins like this: + +```js + plugins: [ + commonjs(), + json(), + nodeGlobals(), + nodeBuiltins(), + resolve({ + browser: true, + preferBuiltins: false, + }), + ] +``` ## Missing cryptographic primitives From a57a802364e62f32e0edc97d0a4b4889169dd644 Mon Sep 17 00:00:00 2001 From: Patricio Palladino Date: Mon, 8 Jun 2020 20:25:58 -0300 Subject: [PATCH 002/219] Minor wording change --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 52e2535..6a5ba8d 100644 --- a/README.md +++ b/README.md @@ -512,7 +512,7 @@ Using this library with Rollup requires the following plugins: [`rollup-plugin-node-builtins`](https://www.npmjs.com/package/rollup-plugin-node-builtins) [`rollup-plugin-node-globals`](https://www.npmjs.com/package/rollup-plugin-node-globals) -These can be used by setting your plugins like this: +These can be used by setting your `plugins` array like this: ```js plugins: [ From 8c347b8260ddc59d2f432dd62b6a65ff9735f375 Mon Sep 17 00:00:00 2001 From: Patricio Palladino Date: Mon, 8 Jun 2020 20:30:11 -0300 Subject: [PATCH 003/219] Bump version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index ae66dc3..177efd6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ethereum-cryptography", - "version": "0.1.2", + "version": "0.1.3", "description": "All the cryptographic primitives used in Ethereum", "contributors": [ { From 451dc49c1c4d414f122401460a633bafe9fd3ed9 Mon Sep 17 00:00:00 2001 From: Patricio Palladino Date: Mon, 8 Jun 2020 20:30:43 -0300 Subject: [PATCH 004/219] Fix markdown error in the readme --- README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 6a5ba8d..292e5fd 100644 --- a/README.md +++ b/README.md @@ -506,11 +506,11 @@ tested with `webpack`, `Rollup`, `Parcel`, and `Browserify`. Using this library with Rollup requires the following plugins: -[`@rollup/plugin-commonjs`](https://www.npmjs.com/package/@rollup/plugin-commonjs) -[`@rollup/plugin-json`](https://www.npmjs.com/package/@rollup/plugin-json) -[`@rollup/plugin-node-resolve`](https://www.npmjs.com/package/@rollup/plugin-node-resolve) -[`rollup-plugin-node-builtins`](https://www.npmjs.com/package/rollup-plugin-node-builtins) -[`rollup-plugin-node-globals`](https://www.npmjs.com/package/rollup-plugin-node-globals) +* [`@rollup/plugin-commonjs`](https://www.npmjs.com/package/@rollup/plugin-commonjs) +* [`@rollup/plugin-json`](https://www.npmjs.com/package/@rollup/plugin-json) +* [`@rollup/plugin-node-resolve`](https://www.npmjs.com/package/@rollup/plugin-node-resolve) +* [`rollup-plugin-node-builtins`](https://www.npmjs.com/package/rollup-plugin-node-builtins) +* [`rollup-plugin-node-globals`](https://www.npmjs.com/package/rollup-plugin-node-globals) These can be used by setting your `plugins` array like this: From 1943d7bba5fce80d29a5f9211ed40c9b97512750 Mon Sep 17 00:00:00 2001 From: Paul Miller Date: Thu, 14 Oct 2021 02:29:45 +0300 Subject: [PATCH 005/219] Rewrite the package. Use 3 deps instead of 39 --- .gitmodules | 6 - .travis.yml | 3 +- LICENSE | 39 +- bip39-lib | 1 - bip39-without-wordlists-config/README.md | 16 - .../empty-module.js | 0 .../rollup.config.js | 23 - hdkey | 1 - hdkey-without-crypto-config/README.md | 26 - hdkey-without-crypto-config/crypto-shim.js | 1 - hdkey-without-crypto-config/rollup.config.js | 25 - hdkey-without-crypto-config/secp256k1-shim.js | 1 - package.json | 75 +- scripts/build-bip39-without-wordlists.sh | 7 - scripts/build-browser-tests.sh | 17 +- scripts/build-hdkey-without-crypto.sh | 8 - scripts/check-browser-field.js | 4 +- scripts/validate-wordlists.js | 55 + src/aes.ts | 137 +- src/bip39/index.ts | 97 +- src/bip39/wordlists/czech.ts | 4098 ++++++++--------- src/bip39/wordlists/english.ts | 4098 ++++++++--------- src/bip39/wordlists/french.ts | 4098 ++++++++--------- src/bip39/wordlists/italian.ts | 4098 ++++++++--------- src/bip39/wordlists/japanese.ts | 4098 ++++++++--------- src/bip39/wordlists/korean.ts | 4098 ++++++++--------- src/bip39/wordlists/simplified-chinese.ts | 4098 ++++++++--------- src/bip39/wordlists/spanish.ts | 4098 ++++++++--------- src/bip39/wordlists/traditional-chinese.ts | 4098 ++++++++--------- src/blake2b.ts | 11 +- src/hash-utils.ts | 11 - src/hdkey.ts | 245 +- src/keccak.ts | 24 +- src/pbkdf2.ts | 55 +- src/pure/hdkey.ts | 36 - src/pure/ripemd160.ts | 5 - src/pure/sha256.ts | 5 - src/pure/shims/hdkey-crypto.ts | 42 - src/pure/shims/hdkey-secp256k1v3.ts | 1 - src/pure/vendor/.gitignore | 0 src/random.ts | 25 +- src/ripemd160.ts | 9 +- src/scrypt.ts | 27 +- src/secp256k1.ts | 378 +- src/sha256.ts | 7 +- src/shims/hdkey-crypto.ts | 1 - src/shims/hdkey-secp256k1v3.ts | 49 - src/utils.ts | 95 + src/vendor/.gitignore | 0 test/karma.browserify.conf.js | 2 +- test/karma.parcel.conf.js | 4 +- test/karma.rollup.conf.js | 2 +- test/karma.webpack.conf.js | 2 +- test/mocha.opts | 2 +- test/node/aes.ts | 4 - test/node/bip39.ts | 15 - test/node/blake2b.ts | 4 - test/node/hdkey.ts | 4 - test/node/keccak.ts | 16 - test/node/pbkdf2.ts | 4 - test/node/random.ts | 4 - test/node/ripemd160.ts | 4 - test/node/scrypt.ts | 4 - test/node/secp256k1.ts | 18 - test/node/sha256.ts | 4 - test/pure/aes.ts | 4 - test/pure/bip39.ts | 15 - test/pure/blake2b.ts | 4 - test/pure/hdkey.ts | 4 - test/pure/keccak.ts | 16 - test/pure/pbkdf2.ts | 4 - test/pure/random.ts | 4 - test/pure/ripemd160.ts | 4 - test/pure/scrypt.ts | 4 - test/pure/secp256k1.ts | 18 - test/pure/sha256.ts | 4 - test/rollup.config.js | 12 +- test/test-vectors/aes.ts | 112 +- test/test-vectors/assert.ts | 84 + test/test-vectors/bip39.ts | 548 ++- test/test-vectors/blake2b.ts | 38 +- test/test-vectors/hdkey.ts | 441 +- test/test-vectors/keccak.ts | 60 +- test/test-vectors/pbkdf2.ts | 95 +- test/test-vectors/random.ts | 41 +- test/test-vectors/ripemd160.ts | 28 +- test/test-vectors/scrypt.ts | 93 +- test/test-vectors/secp256k1.ts | 314 +- test/test-vectors/secp256k1_lib_vectors.ts | 3323 +++++++++++++ test/test-vectors/sha256.ts | 34 +- tsconfig.json | 15 +- tsconfig.prod.json | 8 +- tslint.json | 12 +- 93 files changed, 24266 insertions(+), 19616 deletions(-) delete mode 100644 .gitmodules delete mode 160000 bip39-lib delete mode 100644 bip39-without-wordlists-config/README.md delete mode 100644 bip39-without-wordlists-config/empty-module.js delete mode 100644 bip39-without-wordlists-config/rollup.config.js delete mode 160000 hdkey delete mode 100644 hdkey-without-crypto-config/README.md delete mode 100644 hdkey-without-crypto-config/crypto-shim.js delete mode 100644 hdkey-without-crypto-config/rollup.config.js delete mode 100644 hdkey-without-crypto-config/secp256k1-shim.js delete mode 100644 scripts/build-bip39-without-wordlists.sh delete mode 100644 scripts/build-hdkey-without-crypto.sh create mode 100644 scripts/validate-wordlists.js delete mode 100644 src/hash-utils.ts delete mode 100644 src/pure/hdkey.ts delete mode 100644 src/pure/ripemd160.ts delete mode 100644 src/pure/sha256.ts delete mode 100644 src/pure/shims/hdkey-crypto.ts delete mode 100644 src/pure/shims/hdkey-secp256k1v3.ts delete mode 100644 src/pure/vendor/.gitignore delete mode 100644 src/shims/hdkey-crypto.ts delete mode 100644 src/shims/hdkey-secp256k1v3.ts create mode 100644 src/utils.ts delete mode 100644 src/vendor/.gitignore delete mode 100644 test/node/aes.ts delete mode 100644 test/node/bip39.ts delete mode 100644 test/node/blake2b.ts delete mode 100644 test/node/hdkey.ts delete mode 100644 test/node/keccak.ts delete mode 100644 test/node/pbkdf2.ts delete mode 100644 test/node/random.ts delete mode 100644 test/node/ripemd160.ts delete mode 100644 test/node/scrypt.ts delete mode 100644 test/node/secp256k1.ts delete mode 100644 test/node/sha256.ts delete mode 100644 test/pure/aes.ts delete mode 100644 test/pure/bip39.ts delete mode 100644 test/pure/blake2b.ts delete mode 100644 test/pure/hdkey.ts delete mode 100644 test/pure/keccak.ts delete mode 100644 test/pure/pbkdf2.ts delete mode 100644 test/pure/random.ts delete mode 100644 test/pure/ripemd160.ts delete mode 100644 test/pure/scrypt.ts delete mode 100644 test/pure/secp256k1.ts delete mode 100644 test/pure/sha256.ts create mode 100644 test/test-vectors/assert.ts create mode 100644 test/test-vectors/secp256k1_lib_vectors.ts diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index cd031e4..0000000 --- a/.gitmodules +++ /dev/null @@ -1,6 +0,0 @@ -[submodule "bip39-lib"] - path = bip39-lib - url = https://github.com/bitcoinjs/bip39.git -[submodule "hdkey"] - path = hdkey - url = https://github.com/cryptocoinjs/hdkey.git diff --git a/.travis.yml b/.travis.yml index e019adf..2d807c6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,10 +1,9 @@ language: node_js node_js: - - 10 - 12 - - 13 - 14 + - 16 install: - npm i diff --git a/LICENSE b/LICENSE index ae198a7..29f02ab 100644 --- a/LICENSE +++ b/LICENSE @@ -1,26 +1,21 @@ -bip39-without-wordlist.js is based on bip39, which is released under the -ISC license by the Wei Lu and Daniel Cousens. Its license complete license can be found here: https://github.com/bitcoinjs/bip39/blob/0a0e74eac9f4b753939dd6368984900fdba1975b/LICENSE +The MIT License (MIT) -hdkey-without-crypto.js is based on hdkey, which is released under the -MIT license by the cryptocoinjs. Its license complete license can be found here: https://github.com/cryptocoinjs/hdkey/blob/87d5495ac8e4dfe9917ddcebf6788ce69c0695ff/LICENSE +Copyright (c) 2021 Patricio Palladino, Paul Miller, ethereum-cryptography contributors -The rest of the project is 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: -Copyright 2019 The ethereum-cryptography contributors +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. -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. +THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. \ No newline at end of file diff --git a/bip39-lib b/bip39-lib deleted file mode 160000 index cfea218..0000000 --- a/bip39-lib +++ /dev/null @@ -1 +0,0 @@ -Subproject commit cfea218ee2e6c3157baabb1e2ec684d36cce89c5 diff --git a/bip39-without-wordlists-config/README.md b/bip39-without-wordlists-config/README.md deleted file mode 100644 index 8b9df00..0000000 --- a/bip39-without-wordlists-config/README.md +++ /dev/null @@ -1,16 +0,0 @@ -# hdkey-without-crypto - -This folder contains the necessary config to bundle `bip39` with Rollup, but -without including its wordlits. - -## Why do we do this? - -Including its wordlists would make this module huge. - -## How does this work? - -We have a git submodule with the latests release of `bip39`, and bundle it -with Rollup. - -We replace the imports of `./_wordlists` with an empty module. - diff --git a/bip39-without-wordlists-config/empty-module.js b/bip39-without-wordlists-config/empty-module.js deleted file mode 100644 index e69de29..0000000 diff --git a/bip39-without-wordlists-config/rollup.config.js b/bip39-without-wordlists-config/rollup.config.js deleted file mode 100644 index 3a273fc..0000000 --- a/bip39-without-wordlists-config/rollup.config.js +++ /dev/null @@ -1,23 +0,0 @@ -import commonjs from "rollup-plugin-commonjs"; -import alias from "rollup-plugin-alias"; - -export default { - input: __dirname + "/../bip39-lib/src/index.js", - output: { - file: - __dirname + - "/../bip39-without-wordlists-build/bip39-without-wordlists.js", - format: "cjs", - sourcemap: false, - exports: "named" - }, - external: ["create-hash", "randombytes", "pbkdf2"], - plugins: [ - alias({ - entries: [ - { find: "./_wordlists", replacement: __dirname + "/empty-module.js" } - ] - }), - commonjs() - ] -}; diff --git a/hdkey b/hdkey deleted file mode 160000 index 42637e3..0000000 --- a/hdkey +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 42637e381bdef0c8f785b14f5b66a80dad969514 diff --git a/hdkey-without-crypto-config/README.md b/hdkey-without-crypto-config/README.md deleted file mode 100644 index 317d359..0000000 --- a/hdkey-without-crypto-config/README.md +++ /dev/null @@ -1,26 +0,0 @@ -# hdkey-without-crypto - -This folder contains the necessary config to bundle `hdkey` with Rollup, but -without including the `crypto` built-in module nor `crypto-browserify`, and -using our local version of `secp256k1` instead of the native version. - -## Why do we do this? - -`crypto-browserify` is a very large bundle that doesn't work well with some -bundlers (e.g. Rollup). - -Also, `hdkey` depends on `secp256k1`, so installing it will compile a native -dependency. - -## How does this work? - -We have a git submodule with the latests release of `hdkey`, and bundle it -with Rollup. - -We replace the imports of `crypto` for `./shims/crypto`. We do this in two -steps. First we alias `crypto` to `/crypto-shim.js`, which just -imports `./shims/crypt`. This is done in this way because aliases are always -resolved after Rollup's commonjs plugin's ignore logic. - -We also replace the imports of `secp256k1` for `./secp256k1` using the same -technique. diff --git a/hdkey-without-crypto-config/crypto-shim.js b/hdkey-without-crypto-config/crypto-shim.js deleted file mode 100644 index a4d3c64..0000000 --- a/hdkey-without-crypto-config/crypto-shim.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("../shims/hdkey-crypto"); diff --git a/hdkey-without-crypto-config/rollup.config.js b/hdkey-without-crypto-config/rollup.config.js deleted file mode 100644 index eed91ad..0000000 --- a/hdkey-without-crypto-config/rollup.config.js +++ /dev/null @@ -1,25 +0,0 @@ -import commonjs from "rollup-plugin-commonjs"; -import alias from "rollup-plugin-alias"; - -export default { - input: __dirname + "/../hdkey/lib/hdkey.js", - output: { - file: - __dirname + - "/../hdkey-without-crypto-build/hdkey-without-crypto.js", - format: "cjs", - sourcemap: false - }, - external: ['assert', 'safe-buffer', 'bs58check'], - plugins: [ - alias({ - entries: [ - { find: "crypto", replacement: __dirname + "/crypto-shim.js" }, - { find: "secp256k1", replacement: __dirname + "/secp256k1-shim.js" } - ] - }), - commonjs({ - ignore: ["../shims/hdkey-crypto", "../shims/hdkey-secp256k1v3"] - }) - ] -}; diff --git a/hdkey-without-crypto-config/secp256k1-shim.js b/hdkey-without-crypto-config/secp256k1-shim.js deleted file mode 100644 index e657fde..0000000 --- a/hdkey-without-crypto-config/secp256k1-shim.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("../shims/hdkey-secp256k1v3"); diff --git a/package.json b/package.json index 177efd6..3fa06b2 100644 --- a/package.json +++ b/package.json @@ -1,11 +1,15 @@ { "name": "ethereum-cryptography", - "version": "0.1.3", + "version": "1.0.0", "description": "All the cryptographic primitives used in Ethereum", "contributors": [ { "name": "Patricio Palladino", "email": "patricio@nomiclabs.io" + }, + { + "name": "Paul Miller", + "url": "https://paulmillr.com" } ], "repository": "github:ethereum/js-ethereum-cryptography", @@ -33,34 +37,22 @@ "hdkeys" ], "main": "./index.js", - "types": "./index.d.ts", "files": [ "src", - "vendor", - "shims", "bip39", "*.js", "*.js.map", "*.d.ts", - "*.d.ts.map", - "pure/**/*.js", - "pure/**/*.js.map", - "pure/**/*.d.ts", - "pure/**/*.d.ts.map" + "*.d.ts.map" ], - "browser": { - "./hdkey.js": "./pure/hdkey.js", - "./ripemd160.js": "./pure/ripemd160.js", - "./sha256.js": "./pure/sha256.js" - }, "sideEffects": false, "scripts": { "prepare": "npm run build", - "build": "npm-run-all build:tsc hdkey-without-crypto:build hdkey-without-crypto:copy bip39-without-wordlists:build bip39-without-wordlists:copy", + "build": "npm-run-all build:tsc", "build:tsc": "tsc --project tsconfig.prod.json", - "test": "npm-run-all hdkey-without-crypto:build bip39-without-wordlists:build test:node", + "test": "npm-run-all test:node", "test:node": "mocha", - "clean": "rimraf vendor test-builds pure shims hdkey-without-crypto-build bip39-without-wordlists-build bip39 '*.js' '*.js.map' '*.d.ts' '*.d.ts.map' 'src/**/*.js'", + "clean": "rimraf test-builds bip39 '*.js' '*.js.map' '*.d.ts' '*.d.ts.map' 'src/**/*.js'", "lint": "tslint --project tsconfig.json", "lint:fix": "tslint --fix --project tsconfig.json", "browser-tests": "npm-run-all browser-tests:build browser-tests:test", @@ -69,59 +61,42 @@ "browser-tests:test-parcel": "karma start --single-run --browsers ChromeHeadless test/karma.parcel.conf.js", "browser-tests:test-browserify": "karma start --single-run --browsers ChromeHeadless test/karma.browserify.conf.js", "browser-tests:test-webpack": "karma start --single-run --browsers ChromeHeadless test/karma.webpack.conf.js", - "browser-tests:test-rollup": "karma start --single-run --browsers ChromeHeadless test/karma.rollup.conf.js", - "hdkey-without-crypto:build": "bash -x scripts/build-hdkey-without-crypto.sh", - "hdkey-without-crypto:copy": "mkdir -p vendor pure/vendor && cp src/vendor/hdkey-without-crypto.js ./vendor && cp src/pure/vendor/hdkey-without-crypto.js ./pure/vendor", - "bip39-without-wordlists:build": "bash -x scripts/build-bip39-without-wordlists.sh", - "bip39-without-wordlists:copy": "mkdir -p vendor && cp src/vendor/bip39-without-wordlists.js ./vendor" + "browser-tests:test-rollup": "karma start --single-run --browsers ChromeHeadless test/karma.rollup.conf.js" }, "devDependencies": { - "@types/chai": "^4.2.1", + "@rollup/plugin-commonjs": "^20.0.0", + "@rollup/plugin-node-resolve": "^13.0.4", "@types/mocha": "^5.2.7", - "@types/node": "^8.10.52", + "@types/node": "^16.9.2", "browserify": "^16.5.0", - "chai": "^4.2.0", "karma": "^4.3.0", - "karma-chai": "^0.1.0", "karma-chrome-launcher": "^3.1.0", "karma-mocha": "^1.3.0", "karma-mocha-reporter": "^2.2.5", "mocha": "^6.2.0", "npm-run-all": "^4.1.5", - "parcel-bundler": "^1.12.3", + "parcel": "^2.0.0-rc.0", "prettier": "1.18.2", "rimraf": "^3.0.0", - "rollup": "^1.20.3", - "rollup-plugin-alias": "^2.0.0", + "rollup": "^2.53.0", "rollup-plugin-commonjs": "^10.1.0", - "rollup-plugin-json": "^4.0.0", - "rollup-plugin-node-builtins": "^2.1.2", - "rollup-plugin-node-globals": "^1.4.0", "rollup-plugin-node-resolve": "^5.2.0", - "rollup-plugin-replace": "^2.2.0", "ts-node": "^8.3.0", "tslint": "^5.19.0", "tslint-config-prettier": "^1.18.0", "tslint-plugin-prettier": "^2.0.1", - "typescript": "~3.6.2", + "typescript": "^4.3.5", "webpack": "^4.39.3", "webpack-cli": "^3.3.8" }, "dependencies": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" + "noble-hashes": "^0.1.1", + "micro-base": "^0.1.1", + "noble-secp256k1": "^1.2.10" + }, + "targets": { + "parcel_tests": { + "context": "browser" + } } -} +} \ No newline at end of file diff --git a/scripts/build-bip39-without-wordlists.sh b/scripts/build-bip39-without-wordlists.sh deleted file mode 100644 index 3316f3f..0000000 --- a/scripts/build-bip39-without-wordlists.sh +++ /dev/null @@ -1,7 +0,0 @@ -set -e - -echo "Bundling bip39 with Rollup" -npx rollup -c bip39-without-wordlists-config/rollup.config.js - -echo "Copying output" -cp bip39-without-wordlists-build/bip39-without-wordlists.js ./src/vendor diff --git a/scripts/build-browser-tests.sh b/scripts/build-browser-tests.sh index a5b4492..315bebd 100644 --- a/scripts/build-browser-tests.sh +++ b/scripts/build-browser-tests.sh @@ -3,25 +3,14 @@ set -e echo "Building tests with TypeScript" npx tsc --project tsconfig.json -echo "Building hdkey-without-crypto" -npm run hdkey-without-crypto:build -mkdir -p test-builds/tsc/src/vendor test-builds/tsc/src/pure/vendor -cp src/vendor/hdkey-without-crypto.js test-builds/tsc/src/vendor -cp src/pure/vendor/hdkey-without-crypto.js test-builds/tsc/src/pure/vendor - -echo "Building bip39-without-wordlists" -npm run bip39-without-wordlists:build -mkdir -p test-builds/tsc/src/vendor -cp src/vendor/bip39-without-wordlists.js test-builds/tsc/src/vendor - echo "Building tests with Parcel" -npx parcel build --no-cache --no-minify test-builds/tsc/src/pure/*.js test-builds/tsc/test/pure/*.js -d test-builds/parcel +npx parcel build --no-cache --no-optimize test-builds/tsc/test/test-vectors/*.js --dist-dir test-builds/parcel --target parcel_tests echo "Building tests with Browserify" -npx browserify test-builds/tsc/src/pure/*.js test-builds/tsc/test/pure/*.js > test-builds/browserify-build.js +npx browserify test-builds/tsc/test/test-vectors/*.js > test-builds/browserify-build.js echo "Building tests with webpack" -npx webpack --mode development test-builds/tsc/src/pure/*.js test-builds/tsc/test/pure/*.js --output test-builds/webpack-build.js +npx webpack --mode development test-builds/tsc/test/test-vectors/*.js --output test-builds/webpack-build.js echo "Building tests with Rollup" rollup -c test/rollup.config.js diff --git a/scripts/build-hdkey-without-crypto.sh b/scripts/build-hdkey-without-crypto.sh deleted file mode 100644 index 2083478..0000000 --- a/scripts/build-hdkey-without-crypto.sh +++ /dev/null @@ -1,8 +0,0 @@ -set -e - -echo "Bundling hdkey with Rollup" -npx rollup -c hdkey-without-crypto-config/rollup.config.js - -echo "Copying output" -cp hdkey-without-crypto-build/hdkey-without-crypto.js ./src/vendor -cp hdkey-without-crypto-build/hdkey-without-crypto.js ./src/pure/vendor diff --git a/scripts/check-browser-field.js b/scripts/check-browser-field.js index 73b5775..608b5aa 100644 --- a/scripts/check-browser-field.js +++ b/scripts/check-browser-field.js @@ -3,12 +3,12 @@ const fs = require("fs"); const pkg = JSON.parse(fs.readFileSync(__dirname + "/../package.json", "utf8")); const files = fs - .readdirSync(__dirname + "/../pure") + .readdirSync(__dirname + "/../test-vectors") .filter(f => f.endsWith(".js")); for (const file of files) { const mapping = pkg.browser["./" + file]; - const expected = "./pure/" + file; + const expected = "./test-vectors/" + file; if (mapping !== expected) { console.error( diff --git a/scripts/validate-wordlists.js b/scripts/validate-wordlists.js new file mode 100644 index 0000000..07848e3 --- /dev/null +++ b/scripts/validate-wordlists.js @@ -0,0 +1,55 @@ +const fs = require("fs"); +const https = require("https"); +const assert = require("assert"); + +const WORDLIST_NAMES = { + czech: "czech", + english: "english", + french: "french", + italian: "italian", + japanese: "japanese", + korean: "korean", + "simplified-chinese": "chinese_simplified", + spanish: "spanish", + "traditional-chinese": "chinese_traditional" +}; + +const download = name => + new Promise((resolve, reject) => { + { + name = WORDLIST_NAMES[name]; + const url = `https://raw.githubusercontent.com/bitcoin/bips/master/bip-0039/${name}.txt`; + const req = https.get(url, { encoding: "utf8" }, res => { + const chunks = []; + res.on("data", chunk => chunks.push(chunk)); + res.on("end", () => { + resolve( + Buffer.concat(chunks) + .toString("utf8") + .trim() + .split("\n") + ); + }); + }); + req.on("error", reject); + req.end(); + } + }); + +const files = fs + .readdirSync(__dirname + "/../bip39/wordlists") + .filter(f => f.endsWith(".js")); + +(async () => { + try { + for (const file of files) { + const actual = require(`../bip39/wordlists/${file}`).wordlist; + let expected = await download(file.slice(0, -3)); + assert.deepStrictEqual(actual, expected); + console.log(`CHECKED: ${file}`); + } + } catch (e) { + console.log("ERROR", e); + process.exit(1); + } +})(); diff --git a/src/aes.ts b/src/aes.ts index dda99dd..2ef4689 100644 --- a/src/aes.ts +++ b/src/aes.ts @@ -1,52 +1,119 @@ -const browserifyAes = require("browserify-aes"); +import { concatBytes, equalsBytes, crypto } from "./utils"; -const SUPPORTED_MODES = ["aes-128-ctr", "aes-128-cbc", "aes-256-cbc"]; - -function ensureAesMode(mode: string) { +function validateOpt(key: Uint8Array, iv: Uint8Array, mode: string) { if (!mode.startsWith("aes-")) { throw new Error(`AES submodule doesn't support mode ${mode}`); } + if (iv.length !== 16) { + throw new Error("AES: wrong IV length"); + } + if ( + (mode.startsWith("aes-128") && key.length != 16) || + (mode.startsWith("aes-256") && key.length !== 32) + ) { + throw new Error("AES: wrong key length"); + } } -function warnIfUnsuportedMode(mode: string) { - if (!SUPPORTED_MODES.includes(mode)) { - // tslint:disable-next-line no-console - console.warn("Using an unsupported AES mode. Consider using aes-128-ctr."); +async function getBrowserKey( + mode: string, + key: Uint8Array, + iv: Uint8Array +): Promise<[CryptoKey, AesCbcParams | AesCtrParams]> { + if (!crypto.web) { + throw new Error("Browser crypto not available."); + } + let keyMode: string | undefined; + if (["aes-128-cbc", "aes-256-cbc"].includes(mode)) { + keyMode = "cbc"; } + if (["aes-128-ctr", "aes-256-ctr"].includes(mode)) { + keyMode = "ctr"; + } + if (!keyMode) { + throw new Error("AES: unsupported mode"); + } + const wKey = await crypto.web.subtle.importKey( + "raw", + key, + { name: `AES-${keyMode.toUpperCase()}`, length: key.length * 8 }, + true, + ["encrypt", "decrypt"] + ); + return [wKey, { name: `aes-${keyMode}`, iv, counter: iv, length: 64 }]; } -export function encrypt( - msg: Buffer, - key: Buffer, - iv: Buffer, +export async function encrypt( + msg: Uint8Array, + key: Uint8Array, + iv: Uint8Array, mode = "aes-128-ctr", pkcs7PaddingEnabled = true -): Buffer { - ensureAesMode(mode); - - const cipher = browserifyAes.createCipheriv(mode, key, iv); - cipher.setAutoPadding(pkcs7PaddingEnabled); - - const encrypted = cipher.update(msg); - const final = cipher.final(); +): Promise { + validateOpt(key, iv, mode); + if (crypto.web) { + const [wKey, wOpt] = await getBrowserKey(mode, key, iv); + const cipher = await crypto.web.subtle.encrypt(wOpt, wKey, msg); + // Remove PKCS7 padding on cbc mode by stripping end of message + let res = new Uint8Array(cipher); + if (!pkcs7PaddingEnabled && wOpt.name === "aes-cbc" && !(msg.length % 16)) { + res = res.slice(0, -16); + } + return res; + } else if (crypto.node) { + const cipher = crypto.node.createCipheriv(mode, key, iv); + cipher.setAutoPadding(pkcs7PaddingEnabled); + return concatBytes(cipher.update(msg), cipher.final()); + } else { + throw new Error("The environment doesn't have AES module"); + } +} - return Buffer.concat([encrypted, final]); +async function getPadding( + cypherText: Uint8Array, + key: Uint8Array, + iv: Uint8Array, + mode: string +) { + const lastBlock = cypherText.slice(-16); + for (let i = 0; i < 16; i++) { + // Undo xor of iv and fill with lastBlock ^ padding (16) + lastBlock[i] ^= iv[i] ^ 16; + } + const res = await encrypt(lastBlock, key, iv, mode); + return res.slice(0, 16); } -export function decrypt( - cypherText: Buffer, - key: Buffer, - iv: Buffer, +export async function decrypt( + cypherText: Uint8Array, + key: Uint8Array, + iv: Uint8Array, mode = "aes-128-ctr", pkcs7PaddingEnabled = true -): Buffer { - ensureAesMode(mode); - - const decipher = browserifyAes.createDecipheriv(mode, key, iv); - decipher.setAutoPadding(pkcs7PaddingEnabled); - - const encrypted = decipher.update(cypherText); - const final = decipher.final(); - - return Buffer.concat([encrypted, final]); +): Promise { + validateOpt(key, iv, mode); + if (crypto.web) { + const [wKey, wOpt] = await getBrowserKey(mode, key, iv); + // Add empty padding so Chrome will correctly decrypt message + if (!pkcs7PaddingEnabled && wOpt.name === "aes-cbc") { + const padding = await getPadding(cypherText, key, iv, mode); + cypherText = concatBytes(cypherText, padding); + } + const msg = await crypto.web.subtle.decrypt(wOpt, wKey, cypherText); + const msgBytes = new Uint8Array(msg); + // Safari always ignores padding (if no padding -> broken message) + if (wOpt.name === "aes-cbc") { + const encrypted = await encrypt(msgBytes, key, iv, mode); + if (!equalsBytes(encrypted, cypherText)) { + throw new Error("AES: wrong padding"); + } + } + return msgBytes; + } else if (crypto.node) { + const decipher = crypto.node.createDecipheriv(mode, key, iv); + decipher.setAutoPadding(pkcs7PaddingEnabled); + return concatBytes(decipher.update(cypherText), decipher.final()); + } else { + throw new Error("The environment doesn't have AES module"); + } } diff --git a/src/bip39/index.ts b/src/bip39/index.ts index 0592c1a..424830d 100644 --- a/src/bip39/index.ts +++ b/src/bip39/index.ts @@ -1,40 +1,103 @@ -const bip39 = require("../vendor/bip39-without-wordlists"); +import * as baseUtils from "micro-base/lib/utils"; +import { pbkdf2, pbkdf2Async } from "noble-hashes/lib/pbkdf2"; +import { sha256 } from "noble-hashes/lib/sha256"; +import { sha512 } from "noble-hashes/lib/sha512"; +import { assertNumber } from "noble-hashes/lib/utils"; +import { getRandomBytesSync } from "../random"; +import { assertBytes } from "../utils"; + +const isJapanese = (wordlist: string[]) => + wordlist[0] === "\u3042\u3044\u3053\u304f\u3057\u3093"; // Japanese wordlist + +function assertMnemonic(mnemonic: string) { + if (typeof mnemonic !== "string") { + throw new TypeError(`Invalid mnemonic type: ${typeof mnemonic}`); + } +} export function generateMnemonic( wordlist: string[], strength: number = 128 ): string { - return bip39.generateMnemonic(strength, undefined, wordlist); + assertNumber(strength); + if (strength % 32 !== 0) { + throw new TypeError("Invalid entropy"); + } + return entropyToMnemonic(getRandomBytesSync(strength / 8), wordlist); +} + +const checksum = (entropy: Uint8Array) => { + // Checksum is ent.length/4 bits long + const bitsLeft = 8 - entropy.length / 4; + // Zero rightmost "bitsLeft" bits in byte + // For example: bitsLeft=4 val=10111101 -> 10110000 + return new Uint8Array([(sha256(entropy)[0] >> bitsLeft) << bitsLeft]); +}; + +export function getCoder(wordlist: string[]) { + if ( + !Array.isArray(wordlist) || + wordlist.length !== 2 ** 11 || + typeof wordlist[0] !== "string" + ) { + throw new Error("Worlist: expected array of 2048 strings"); + } + return baseUtils.chain( + baseUtils.checksum(1, checksum), + baseUtils.radix2(11, true), + baseUtils.alphabet(wordlist) + ); } export function mnemonicToEntropy( mnemonic: string, wordlist: string[] -): Buffer { - return bip39.mnemonicToEntropy(mnemonic, wordlist); +): Uint8Array { + assertMnemonic(mnemonic); + const words = mnemonic.normalize("NFKD").split(" "); + if (![12, 15, 18, 21, 24].includes(words.length)) { + throw new Error("Invalid mnemonic"); + } + const entropy = getCoder(wordlist).decode(words); + assertBytes(entropy, 16, 20, 24, 28, 32); + return entropy; } -export function entropyToMnemonic(entropy: Buffer, wordlist: string[]): string { - return bip39.entropyToMnemonic(entropy, wordlist); +export function entropyToMnemonic( + entropy: Uint8Array, + wordlist: string[] +): string { + assertBytes(entropy, 16, 20, 24, 28, 32); + const words = getCoder(wordlist).encode(entropy); + return words.join(isJapanese(wordlist) ? "\u3000" : " "); } export function validateMnemonic( mnemonic: string, wordlist: string[] ): boolean { - return bip39.validateMnemonic(mnemonic, wordlist); + try { + mnemonicToEntropy(mnemonic, wordlist); + } catch (e) { + return false; + } + return true; } -export async function mnemonicToSeed( - mnemonic: string, - passphrase: string = "" -): Promise { - return bip39.mnemonicToSeed(mnemonic, passphrase); +const salt = (passphrase = "") => `mnemonic${passphrase}`.normalize("NFKD"); + +export function mnemonicToSeed(mnemonic: string, passphrase = "") { + assertMnemonic(mnemonic); + return pbkdf2Async(sha512, mnemonic.normalize("NFKD"), salt(passphrase), { + c: 2048, + dkLen: 64 + }); } -export function mnemonicToSeedSync( - mnemonic: string, - passphrase: string = "" -): Buffer { - return bip39.mnemonicToSeedSync(mnemonic, passphrase); +export function mnemonicToSeedSync(mnemonic: string, passphrase = "") { + assertMnemonic(mnemonic); + return pbkdf2(sha512, mnemonic.normalize("NFKD"), salt(passphrase), { + c: 2048, + dkLen: 64 + }); } diff --git a/src/bip39/wordlists/czech.ts b/src/bip39/wordlists/czech.ts index f072707..dd73a37 100644 --- a/src/bip39/wordlists/czech.ts +++ b/src/bip39/wordlists/czech.ts @@ -1,2050 +1,2048 @@ -export const wordlist: string[] = [ - "abdikace", - "abeceda", - "adresa", - "agrese", - "akce", - "aktovka", - "alej", - "alkohol", - "amputace", - "ananas", - "andulka", - "anekdota", - "anketa", - "antika", - "anulovat", - "archa", - "arogance", - "asfalt", - "asistent", - "aspirace", - "astma", - "astronom", - "atlas", - "atletika", - "atol", - "autobus", - "azyl", - "babka", - "bachor", - "bacil", - "baculka", - "badatel", - "bageta", - "bagr", - "bahno", - "bakterie", - "balada", - "baletka", - "balkon", - "balonek", - "balvan", - "balza", - "bambus", - "bankomat", - "barbar", - "baret", - "barman", - "baroko", - "barva", - "baterka", - "batoh", - "bavlna", - "bazalka", - "bazilika", - "bazuka", - "bedna", - "beran", - "beseda", - "bestie", - "beton", - "bezinka", - "bezmoc", - "beztak", - "bicykl", - "bidlo", - "biftek", - "bikiny", - "bilance", - "biograf", - "biolog", - "bitva", - "bizon", - "blahobyt", - "blatouch", - "blecha", - "bledule", - "blesk", - "blikat", - "blizna", - "blokovat", - "bloudit", - "blud", - "bobek", - "bobr", - "bodlina", - "bodnout", - "bohatost", - "bojkot", - "bojovat", - "bokorys", - "bolest", - "borec", - "borovice", - "bota", - "boubel", - "bouchat", - "bouda", - "boule", - "bourat", - "boxer", - "bradavka", - "brambora", - "branka", - "bratr", - "brepta", - "briketa", - "brko", - "brloh", - "bronz", - "broskev", - "brunetka", - "brusinka", - "brzda", - "brzy", - "bublina", - "bubnovat", - "buchta", - "buditel", - "budka", - "budova", - "bufet", - "bujarost", - "bukvice", - "buldok", - "bulva", - "bunda", - "bunkr", - "burza", - "butik", - "buvol", - "buzola", - "bydlet", - "bylina", - "bytovka", - "bzukot", - "capart", - "carevna", - "cedr", - "cedule", - "cejch", - "cejn", - "cela", - "celer", - "celkem", - "celnice", - "cenina", - "cennost", - "cenovka", - "centrum", - "cenzor", - "cestopis", - "cetka", - "chalupa", - "chapadlo", - "charita", - "chata", - "chechtat", - "chemie", - "chichot", - "chirurg", - "chlad", - "chleba", - "chlubit", - "chmel", - "chmura", - "chobot", - "chochol", - "chodba", - "cholera", - "chomout", - "chopit", - "choroba", - "chov", - "chrapot", - "chrlit", - "chrt", - "chrup", - "chtivost", - "chudina", - "chutnat", - "chvat", - "chvilka", - "chvost", - "chyba", - "chystat", - "chytit", - "cibule", - "cigareta", - "cihelna", - "cihla", - "cinkot", - "cirkus", - "cisterna", - "citace", - "citrus", - "cizinec", - "cizost", - "clona", - "cokoliv", - "couvat", - "ctitel", - "ctnost", - "cudnost", - "cuketa", - "cukr", - "cupot", - "cvaknout", - "cval", - "cvik", - "cvrkot", - "cyklista", - "daleko", - "dareba", - "datel", - "datum", - "dcera", - "debata", - "dechovka", - "decibel", - "deficit", - "deflace", - "dekl", - "dekret", - "demokrat", - "deprese", - "derby", - "deska", - "detektiv", - "dikobraz", - "diktovat", - "dioda", - "diplom", - "disk", - "displej", - "divadlo", - "divoch", - "dlaha", - "dlouho", - "dluhopis", - "dnes", - "dobro", - "dobytek", - "docent", - "dochutit", - "dodnes", - "dohled", - "dohoda", - "dohra", - "dojem", - "dojnice", - "doklad", - "dokola", - "doktor", - "dokument", - "dolar", - "doleva", - "dolina", - "doma", - "dominant", - "domluvit", - "domov", - "donutit", - "dopad", - "dopis", - "doplnit", - "doposud", - "doprovod", - "dopustit", - "dorazit", - "dorost", - "dort", - "dosah", - "doslov", - "dostatek", - "dosud", - "dosyta", - "dotaz", - "dotek", - "dotknout", - "doufat", - "doutnat", - "dovozce", - "dozadu", - "doznat", - "dozorce", - "drahota", - "drak", - "dramatik", - "dravec", - "draze", - "drdol", - "drobnost", - "drogerie", - "drozd", - "drsnost", - "drtit", - "drzost", - "duben", - "duchovno", - "dudek", - "duha", - "duhovka", - "dusit", - "dusno", - "dutost", - "dvojice", - "dvorec", - "dynamit", - "ekolog", - "ekonomie", - "elektron", - "elipsa", - "email", - "emise", - "emoce", - "empatie", - "epizoda", - "epocha", - "epopej", - "epos", - "esej", - "esence", - "eskorta", - "eskymo", - "etiketa", - "euforie", - "evoluce", - "exekuce", - "exkurze", - "expedice", - "exploze", - "export", - "extrakt", - "facka", - "fajfka", - "fakulta", - "fanatik", - "fantazie", - "farmacie", - "favorit", - "fazole", - "federace", - "fejeton", - "fenka", - "fialka", - "figurant", - "filozof", - "filtr", - "finance", - "finta", - "fixace", - "fjord", - "flanel", - "flirt", - "flotila", - "fond", - "fosfor", - "fotbal", - "fotka", - "foton", - "frakce", - "freska", - "fronta", - "fukar", - "funkce", - "fyzika", - "galeje", - "garant", - "genetika", - "geolog", - "gilotina", - "glazura", - "glejt", - "golem", - "golfista", - "gotika", - "graf", - "gramofon", - "granule", - "grep", - "gril", - "grog", - "groteska", - "guma", - "hadice", - "hadr", - "hala", - "halenka", - "hanba", - "hanopis", - "harfa", - "harpuna", - "havran", - "hebkost", - "hejkal", - "hejno", - "hejtman", - "hektar", - "helma", - "hematom", - "herec", - "herna", - "heslo", - "hezky", - "historik", - "hladovka", - "hlasivky", - "hlava", - "hledat", - "hlen", - "hlodavec", - "hloh", - "hloupost", - "hltat", - "hlubina", - "hluchota", - "hmat", - "hmota", - "hmyz", - "hnis", - "hnojivo", - "hnout", - "hoblina", - "hoboj", - "hoch", - "hodiny", - "hodlat", - "hodnota", - "hodovat", - "hojnost", - "hokej", - "holinka", - "holka", - "holub", - "homole", - "honitba", - "honorace", - "horal", - "horda", - "horizont", - "horko", - "horlivec", - "hormon", - "hornina", - "horoskop", - "horstvo", - "hospoda", - "hostina", - "hotovost", - "houba", - "houf", - "houpat", - "houska", - "hovor", - "hradba", - "hranice", - "hravost", - "hrazda", - "hrbolek", - "hrdina", - "hrdlo", - "hrdost", - "hrnek", - "hrobka", - "hromada", - "hrot", - "hrouda", - "hrozen", - "hrstka", - "hrubost", - "hryzat", - "hubenost", - "hubnout", - "hudba", - "hukot", - "humr", - "husita", - "hustota", - "hvozd", - "hybnost", - "hydrant", - "hygiena", - "hymna", - "hysterik", - "idylka", - "ihned", - "ikona", - "iluze", - "imunita", - "infekce", - "inflace", - "inkaso", - "inovace", - "inspekce", - "internet", - "invalida", - "investor", - "inzerce", - "ironie", - "jablko", - "jachta", - "jahoda", - "jakmile", - "jakost", - "jalovec", - "jantar", - "jarmark", - "jaro", - "jasan", - "jasno", - "jatka", - "javor", - "jazyk", - "jedinec", - "jedle", - "jednatel", - "jehlan", - "jekot", - "jelen", - "jelito", - "jemnost", - "jenom", - "jepice", - "jeseter", - "jevit", - "jezdec", - "jezero", - "jinak", - "jindy", - "jinoch", - "jiskra", - "jistota", - "jitrnice", - "jizva", - "jmenovat", - "jogurt", - "jurta", - "kabaret", - "kabel", - "kabinet", - "kachna", - "kadet", - "kadidlo", - "kahan", - "kajak", - "kajuta", - "kakao", - "kaktus", - "kalamita", - "kalhoty", - "kalibr", - "kalnost", - "kamera", - "kamkoliv", - "kamna", - "kanibal", - "kanoe", - "kantor", - "kapalina", - "kapela", - "kapitola", - "kapka", - "kaple", - "kapota", - "kapr", - "kapusta", - "kapybara", - "karamel", - "karotka", - "karton", - "kasa", - "katalog", - "katedra", - "kauce", - "kauza", - "kavalec", - "kazajka", - "kazeta", - "kazivost", - "kdekoliv", - "kdesi", - "kedluben", - "kemp", - "keramika", - "kino", - "klacek", - "kladivo", - "klam", - "klapot", - "klasika", - "klaun", - "klec", - "klenba", - "klepat", - "klesnout", - "klid", - "klima", - "klisna", - "klobouk", - "klokan", - "klopa", - "kloub", - "klubovna", - "klusat", - "kluzkost", - "kmen", - "kmitat", - "kmotr", - "kniha", - "knot", - "koalice", - "koberec", - "kobka", - "kobliha", - "kobyla", - "kocour", - "kohout", - "kojenec", - "kokos", - "koktejl", - "kolaps", - "koleda", - "kolize", - "kolo", - "komando", - "kometa", - "komik", - "komnata", - "komora", - "kompas", - "komunita", - "konat", - "koncept", - "kondice", - "konec", - "konfese", - "kongres", - "konina", - "konkurs", - "kontakt", - "konzerva", - "kopanec", - "kopie", - "kopnout", - "koprovka", - "korbel", - "korektor", - "kormidlo", - "koroptev", - "korpus", - "koruna", - "koryto", - "korzet", - "kosatec", - "kostka", - "kotel", - "kotleta", - "kotoul", - "koukat", - "koupelna", - "kousek", - "kouzlo", - "kovboj", - "koza", - "kozoroh", - "krabice", - "krach", - "krajina", - "kralovat", - "krasopis", - "kravata", - "kredit", - "krejcar", - "kresba", - "kreveta", - "kriket", - "kritik", - "krize", - "krkavec", - "krmelec", - "krmivo", - "krocan", - "krok", - "kronika", - "kropit", - "kroupa", - "krovka", - "krtek", - "kruhadlo", - "krupice", - "krutost", - "krvinka", - "krychle", - "krypta", - "krystal", - "kryt", - "kudlanka", - "kufr", - "kujnost", - "kukla", - "kulajda", - "kulich", - "kulka", - "kulomet", - "kultura", - "kuna", - "kupodivu", - "kurt", - "kurzor", - "kutil", - "kvalita", - "kvasinka", - "kvestor", - "kynolog", - "kyselina", - "kytara", - "kytice", - "kytka", - "kytovec", - "kyvadlo", - "labrador", - "lachtan", - "ladnost", - "laik", - "lakomec", - "lamela", - "lampa", - "lanovka", - "lasice", - "laso", - "lastura", - "latinka", - "lavina", - "lebka", - "leckdy", - "leden", - "lednice", - "ledovka", - "ledvina", - "legenda", - "legie", - "legrace", - "lehce", - "lehkost", - "lehnout", - "lektvar", - "lenochod", - "lentilka", - "lepenka", - "lepidlo", - "letadlo", - "letec", - "letmo", - "letokruh", - "levhart", - "levitace", - "levobok", - "libra", - "lichotka", - "lidojed", - "lidskost", - "lihovina", - "lijavec", - "lilek", - "limetka", - "linie", - "linka", - "linoleum", - "listopad", - "litina", - "litovat", - "lobista", - "lodivod", - "logika", - "logoped", - "lokalita", - "loket", - "lomcovat", - "lopata", - "lopuch", - "lord", - "losos", - "lotr", - "loudal", - "louh", - "louka", - "louskat", - "lovec", - "lstivost", - "lucerna", - "lucifer", - "lump", - "lusk", - "lustrace", - "lvice", - "lyra", - "lyrika", - "lysina", - "madam", - "madlo", - "magistr", - "mahagon", - "majetek", - "majitel", - "majorita", - "makak", - "makovice", - "makrela", - "malba", - "malina", - "malovat", - "malvice", - "maminka", - "mandle", - "manko", - "marnost", - "masakr", - "maskot", - "masopust", - "matice", - "matrika", - "maturita", - "mazanec", - "mazivo", - "mazlit", - "mazurka", - "mdloba", - "mechanik", - "meditace", - "medovina", - "melasa", - "meloun", - "mentolka", - "metla", - "metoda", - "metr", - "mezera", - "migrace", - "mihnout", - "mihule", - "mikina", - "mikrofon", - "milenec", - "milimetr", - "milost", - "mimika", - "mincovna", - "minibar", - "minomet", - "minulost", - "miska", - "mistr", - "mixovat", - "mladost", - "mlha", - "mlhovina", - "mlok", - "mlsat", - "mluvit", - "mnich", - "mnohem", - "mobil", - "mocnost", - "modelka", - "modlitba", - "mohyla", - "mokro", - "molekula", - "momentka", - "monarcha", - "monokl", - "monstrum", - "montovat", - "monzun", - "mosaz", - "moskyt", - "most", - "motivace", - "motorka", - "motyka", - "moucha", - "moudrost", - "mozaika", - "mozek", - "mozol", - "mramor", - "mravenec", - "mrkev", - "mrtvola", - "mrzet", - "mrzutost", - "mstitel", - "mudrc", - "muflon", - "mulat", - "mumie", - "munice", - "muset", - "mutace", - "muzeum", - "muzikant", - "myslivec", - "mzda", - "nabourat", - "nachytat", - "nadace", - "nadbytek", - "nadhoz", - "nadobro", - "nadpis", - "nahlas", - "nahnat", - "nahodile", - "nahradit", - "naivita", - "najednou", - "najisto", - "najmout", - "naklonit", - "nakonec", - "nakrmit", - "nalevo", - "namazat", - "namluvit", - "nanometr", - "naoko", - "naopak", - "naostro", - "napadat", - "napevno", - "naplnit", - "napnout", - "naposled", - "naprosto", - "narodit", - "naruby", - "narychlo", - "nasadit", - "nasekat", - "naslepo", - "nastat", - "natolik", - "navenek", - "navrch", - "navzdory", - "nazvat", - "nebe", - "nechat", - "necky", - "nedaleko", - "nedbat", - "neduh", - "negace", - "nehet", - "nehoda", - "nejen", - "nejprve", - "neklid", - "nelibost", - "nemilost", - "nemoc", - "neochota", - "neonka", - "nepokoj", - "nerost", - "nerv", - "nesmysl", - "nesoulad", - "netvor", - "neuron", - "nevina", - "nezvykle", - "nicota", - "nijak", - "nikam", - "nikdy", - "nikl", - "nikterak", - "nitro", - "nocleh", - "nohavice", - "nominace", - "nora", - "norek", - "nositel", - "nosnost", - "nouze", - "noviny", - "novota", - "nozdra", - "nuda", - "nudle", - "nuget", - "nutit", - "nutnost", - "nutrie", - "nymfa", - "obal", - "obarvit", - "obava", - "obdiv", - "obec", - "obehnat", - "obejmout", - "obezita", - "obhajoba", - "obilnice", - "objasnit", - "objekt", - "obklopit", - "oblast", - "oblek", - "obliba", - "obloha", - "obluda", - "obnos", - "obohatit", - "obojek", - "obout", - "obrazec", - "obrna", - "obruba", - "obrys", - "obsah", - "obsluha", - "obstarat", - "obuv", - "obvaz", - "obvinit", - "obvod", - "obvykle", - "obyvatel", - "obzor", - "ocas", - "ocel", - "ocenit", - "ochladit", - "ochota", - "ochrana", - "ocitnout", - "odboj", - "odbyt", - "odchod", - "odcizit", - "odebrat", - "odeslat", - "odevzdat", - "odezva", - "odhadce", - "odhodit", - "odjet", - "odjinud", - "odkaz", - "odkoupit", - "odliv", - "odluka", - "odmlka", - "odolnost", - "odpad", - "odpis", - "odplout", - "odpor", - "odpustit", - "odpykat", - "odrazka", - "odsoudit", - "odstup", - "odsun", - "odtok", - "odtud", - "odvaha", - "odveta", - "odvolat", - "odvracet", - "odznak", - "ofina", - "ofsajd", - "ohlas", - "ohnisko", - "ohrada", - "ohrozit", - "ohryzek", - "okap", - "okenice", - "oklika", - "okno", - "okouzlit", - "okovy", - "okrasa", - "okres", - "okrsek", - "okruh", - "okupant", - "okurka", - "okusit", - "olejnina", - "olizovat", - "omak", - "omeleta", - "omezit", - "omladina", - "omlouvat", - "omluva", - "omyl", - "onehdy", - "opakovat", - "opasek", - "operace", - "opice", - "opilost", - "opisovat", - "opora", - "opozice", - "opravdu", - "oproti", - "orbital", - "orchestr", - "orgie", - "orlice", - "orloj", - "ortel", - "osada", - "oschnout", - "osika", - "osivo", - "oslava", - "oslepit", - "oslnit", - "oslovit", - "osnova", - "osoba", - "osolit", - "ospalec", - "osten", - "ostraha", - "ostuda", - "ostych", - "osvojit", - "oteplit", - "otisk", - "otop", - "otrhat", - "otrlost", - "otrok", - "otruby", - "otvor", - "ovanout", - "ovar", - "oves", - "ovlivnit", - "ovoce", - "oxid", - "ozdoba", - "pachatel", - "pacient", - "padouch", - "pahorek", - "pakt", - "palanda", - "palec", - "palivo", - "paluba", - "pamflet", - "pamlsek", - "panenka", - "panika", - "panna", - "panovat", - "panstvo", - "pantofle", - "paprika", - "parketa", - "parodie", - "parta", - "paruka", - "paryba", - "paseka", - "pasivita", - "pastelka", - "patent", - "patrona", - "pavouk", - "pazneht", - "pazourek", - "pecka", - "pedagog", - "pejsek", - "peklo", - "peloton", - "penalta", - "pendrek", - "penze", - "periskop", - "pero", - "pestrost", - "petarda", - "petice", - "petrolej", - "pevnina", - "pexeso", - "pianista", - "piha", - "pijavice", - "pikle", - "piknik", - "pilina", - "pilnost", - "pilulka", - "pinzeta", - "pipeta", - "pisatel", - "pistole", - "pitevna", - "pivnice", - "pivovar", - "placenta", - "plakat", - "plamen", - "planeta", - "plastika", - "platit", - "plavidlo", - "plaz", - "plech", - "plemeno", - "plenta", - "ples", - "pletivo", - "plevel", - "plivat", - "plnit", - "plno", - "plocha", - "plodina", - "plomba", - "plout", - "pluk", - "plyn", - "pobavit", - "pobyt", - "pochod", - "pocit", - "poctivec", - "podat", - "podcenit", - "podepsat", - "podhled", - "podivit", - "podklad", - "podmanit", - "podnik", - "podoba", - "podpora", - "podraz", - "podstata", - "podvod", - "podzim", - "poezie", - "pohanka", - "pohnutka", - "pohovor", - "pohroma", - "pohyb", - "pointa", - "pojistka", - "pojmout", - "pokazit", - "pokles", - "pokoj", - "pokrok", - "pokuta", - "pokyn", - "poledne", - "polibek", - "polknout", - "poloha", - "polynom", - "pomalu", - "pominout", - "pomlka", - "pomoc", - "pomsta", - "pomyslet", - "ponechat", - "ponorka", - "ponurost", - "popadat", - "popel", - "popisek", - "poplach", - "poprosit", - "popsat", - "popud", - "poradce", - "porce", - "porod", - "porucha", - "poryv", - "posadit", - "posed", - "posila", - "poskok", - "poslanec", - "posoudit", - "pospolu", - "postava", - "posudek", - "posyp", - "potah", - "potkan", - "potlesk", - "potomek", - "potrava", - "potupa", - "potvora", - "poukaz", - "pouto", - "pouzdro", - "povaha", - "povidla", - "povlak", - "povoz", - "povrch", - "povstat", - "povyk", - "povzdech", - "pozdrav", - "pozemek", - "poznatek", - "pozor", - "pozvat", - "pracovat", - "prahory", - "praktika", - "prales", - "praotec", - "praporek", - "prase", - "pravda", - "princip", - "prkno", - "probudit", - "procento", - "prodej", - "profese", - "prohra", - "projekt", - "prolomit", - "promile", - "pronikat", - "propad", - "prorok", - "prosba", - "proton", - "proutek", - "provaz", - "prskavka", - "prsten", - "prudkost", - "prut", - "prvek", - "prvohory", - "psanec", - "psovod", - "pstruh", - "ptactvo", - "puberta", - "puch", - "pudl", - "pukavec", - "puklina", - "pukrle", - "pult", - "pumpa", - "punc", - "pupen", - "pusa", - "pusinka", - "pustina", - "putovat", - "putyka", - "pyramida", - "pysk", - "pytel", - "racek", - "rachot", - "radiace", - "radnice", - "radon", - "raft", - "ragby", - "raketa", - "rakovina", - "rameno", - "rampouch", - "rande", - "rarach", - "rarita", - "rasovna", - "rastr", - "ratolest", - "razance", - "razidlo", - "reagovat", - "reakce", - "recept", - "redaktor", - "referent", - "reflex", - "rejnok", - "reklama", - "rekord", - "rekrut", - "rektor", - "reputace", - "revize", - "revma", - "revolver", - "rezerva", - "riskovat", - "riziko", - "robotika", - "rodokmen", - "rohovka", - "rokle", - "rokoko", - "romaneto", - "ropovod", - "ropucha", - "rorejs", - "rosol", - "rostlina", - "rotmistr", - "rotoped", - "rotunda", - "roubenka", - "roucho", - "roup", - "roura", - "rovina", - "rovnice", - "rozbor", - "rozchod", - "rozdat", - "rozeznat", - "rozhodce", - "rozinka", - "rozjezd", - "rozkaz", - "rozloha", - "rozmar", - "rozpad", - "rozruch", - "rozsah", - "roztok", - "rozum", - "rozvod", - "rubrika", - "ruchadlo", - "rukavice", - "rukopis", - "ryba", - "rybolov", - "rychlost", - "rydlo", - "rypadlo", - "rytina", - "ryzost", - "sadista", - "sahat", - "sako", - "samec", - "samizdat", - "samota", - "sanitka", - "sardinka", - "sasanka", - "satelit", - "sazba", - "sazenice", - "sbor", - "schovat", - "sebranka", - "secese", - "sedadlo", - "sediment", - "sedlo", - "sehnat", - "sejmout", - "sekera", - "sekta", - "sekunda", - "sekvoje", - "semeno", - "seno", - "servis", - "sesadit", - "seshora", - "seskok", - "seslat", - "sestra", - "sesuv", - "sesypat", - "setba", - "setina", - "setkat", - "setnout", - "setrvat", - "sever", - "seznam", - "shoda", - "shrnout", - "sifon", - "silnice", - "sirka", - "sirotek", - "sirup", - "situace", - "skafandr", - "skalisko", - "skanzen", - "skaut", - "skeptik", - "skica", - "skladba", - "sklenice", - "sklo", - "skluz", - "skoba", - "skokan", - "skoro", - "skripta", - "skrz", - "skupina", - "skvost", - "skvrna", - "slabika", - "sladidlo", - "slanina", - "slast", - "slavnost", - "sledovat", - "slepec", - "sleva", - "slezina", - "slib", - "slina", - "sliznice", - "slon", - "sloupek", - "slovo", - "sluch", - "sluha", - "slunce", - "slupka", - "slza", - "smaragd", - "smetana", - "smilstvo", - "smlouva", - "smog", - "smrad", - "smrk", - "smrtka", - "smutek", - "smysl", - "snad", - "snaha", - "snob", - "sobota", - "socha", - "sodovka", - "sokol", - "sopka", - "sotva", - "souboj", - "soucit", - "soudce", - "souhlas", - "soulad", - "soumrak", - "souprava", - "soused", - "soutok", - "souviset", - "spalovna", - "spasitel", - "spis", - "splav", - "spodek", - "spojenec", - "spolu", - "sponzor", - "spornost", - "spousta", - "sprcha", - "spustit", - "sranda", - "sraz", - "srdce", - "srna", - "srnec", - "srovnat", - "srpen", - "srst", - "srub", - "stanice", - "starosta", - "statika", - "stavba", - "stehno", - "stezka", - "stodola", - "stolek", - "stopa", - "storno", - "stoupat", - "strach", - "stres", - "strhnout", - "strom", - "struna", - "studna", - "stupnice", - "stvol", - "styk", - "subjekt", - "subtropy", - "suchar", - "sudost", - "sukno", - "sundat", - "sunout", - "surikata", - "surovina", - "svah", - "svalstvo", - "svetr", - "svatba", - "svazek", - "svisle", - "svitek", - "svoboda", - "svodidlo", - "svorka", - "svrab", - "sykavka", - "sykot", - "synek", - "synovec", - "sypat", - "sypkost", - "syrovost", - "sysel", - "sytost", - "tabletka", - "tabule", - "tahoun", - "tajemno", - "tajfun", - "tajga", - "tajit", - "tajnost", - "taktika", - "tamhle", - "tampon", - "tancovat", - "tanec", - "tanker", - "tapeta", - "tavenina", - "tazatel", - "technika", - "tehdy", - "tekutina", - "telefon", - "temnota", - "tendence", - "tenista", - "tenor", - "teplota", - "tepna", - "teprve", - "terapie", - "termoska", - "textil", - "ticho", - "tiskopis", - "titulek", - "tkadlec", - "tkanina", - "tlapka", - "tleskat", - "tlukot", - "tlupa", - "tmel", - "toaleta", - "topinka", - "topol", - "torzo", - "touha", - "toulec", - "tradice", - "traktor", - "tramp", - "trasa", - "traverza", - "trefit", - "trest", - "trezor", - "trhavina", - "trhlina", - "trochu", - "trojice", - "troska", - "trouba", - "trpce", - "trpitel", - "trpkost", - "trubec", - "truchlit", - "truhlice", - "trus", - "trvat", - "tudy", - "tuhnout", - "tuhost", - "tundra", - "turista", - "turnaj", - "tuzemsko", - "tvaroh", - "tvorba", - "tvrdost", - "tvrz", - "tygr", - "tykev", - "ubohost", - "uboze", - "ubrat", - "ubrousek", - "ubrus", - "ubytovna", - "ucho", - "uctivost", - "udivit", - "uhradit", - "ujednat", - "ujistit", - "ujmout", - "ukazatel", - "uklidnit", - "uklonit", - "ukotvit", - "ukrojit", - "ulice", - "ulita", - "ulovit", - "umyvadlo", - "unavit", - "uniforma", - "uniknout", - "upadnout", - "uplatnit", - "uplynout", - "upoutat", - "upravit", - "uran", - "urazit", - "usednout", - "usilovat", - "usmrtit", - "usnadnit", - "usnout", - "usoudit", - "ustlat", - "ustrnout", - "utahovat", - "utkat", - "utlumit", - "utonout", - "utopenec", - "utrousit", - "uvalit", - "uvolnit", - "uvozovka", - "uzdravit", - "uzel", - "uzenina", - "uzlina", - "uznat", - "vagon", - "valcha", - "valoun", - "vana", - "vandal", - "vanilka", - "varan", - "varhany", - "varovat", - "vcelku", - "vchod", - "vdova", - "vedro", - "vegetace", - "vejce", - "velbloud", - "veletrh", - "velitel", - "velmoc", - "velryba", - "venkov", - "veranda", - "verze", - "veselka", - "veskrze", - "vesnice", - "vespodu", - "vesta", - "veterina", - "veverka", - "vibrace", - "vichr", - "videohra", - "vidina", - "vidle", - "vila", - "vinice", - "viset", - "vitalita", - "vize", - "vizitka", - "vjezd", - "vklad", - "vkus", - "vlajka", - "vlak", - "vlasec", - "vlevo", - "vlhkost", - "vliv", - "vlnovka", - "vloupat", - "vnucovat", - "vnuk", - "voda", - "vodivost", - "vodoznak", - "vodstvo", - "vojensky", - "vojna", - "vojsko", - "volant", - "volba", - "volit", - "volno", - "voskovka", - "vozidlo", - "vozovna", - "vpravo", - "vrabec", - "vracet", - "vrah", - "vrata", - "vrba", - "vrcholek", - "vrhat", - "vrstva", - "vrtule", - "vsadit", - "vstoupit", - "vstup", - "vtip", - "vybavit", - "vybrat", - "vychovat", - "vydat", - "vydra", - "vyfotit", - "vyhledat", - "vyhnout", - "vyhodit", - "vyhradit", - "vyhubit", - "vyjasnit", - "vyjet", - "vyjmout", - "vyklopit", - "vykonat", - "vylekat", - "vymazat", - "vymezit", - "vymizet", - "vymyslet", - "vynechat", - "vynikat", - "vynutit", - "vypadat", - "vyplatit", - "vypravit", - "vypustit", - "vyrazit", - "vyrovnat", - "vyrvat", - "vyslovit", - "vysoko", - "vystavit", - "vysunout", - "vysypat", - "vytasit", - "vytesat", - "vytratit", - "vyvinout", - "vyvolat", - "vyvrhel", - "vyzdobit", - "vyznat", - "vzadu", - "vzbudit", - "vzchopit", - "vzdor", - "vzduch", - "vzdychat", - "vzestup", - "vzhledem", - "vzkaz", - "vzlykat", - "vznik", - "vzorek", - "vzpoura", - "vztah", - "vztek", - "xylofon", - "zabrat", - "zabydlet", - "zachovat", - "zadarmo", - "zadusit", - "zafoukat", - "zahltit", - "zahodit", - "zahrada", - "zahynout", - "zajatec", - "zajet", - "zajistit", - "zaklepat", - "zakoupit", - "zalepit", - "zamezit", - "zamotat", - "zamyslet", - "zanechat", - "zanikat", - "zaplatit", - "zapojit", - "zapsat", - "zarazit", - "zastavit", - "zasunout", - "zatajit", - "zatemnit", - "zatknout", - "zaujmout", - "zavalit", - "zavelet", - "zavinit", - "zavolat", - "zavrtat", - "zazvonit", - "zbavit", - "zbrusu", - "zbudovat", - "zbytek", - "zdaleka", - "zdarma", - "zdatnost", - "zdivo", - "zdobit", - "zdroj", - "zdvih", - "zdymadlo", - "zelenina", - "zeman", - "zemina", - "zeptat", - "zezadu", - "zezdola", - "zhatit", - "zhltnout", - "zhluboka", - "zhotovit", - "zhruba", - "zima", - "zimnice", - "zjemnit", - "zklamat", - "zkoumat", - "zkratka", - "zkumavka", - "zlato", - "zlehka", - "zloba", - "zlom", - "zlost", - "zlozvyk", - "zmapovat", - "zmar", - "zmatek", - "zmije", - "zmizet", - "zmocnit", - "zmodrat", - "zmrzlina", - "zmutovat", - "znak", - "znalost", - "znamenat", - "znovu", - "zobrazit", - "zotavit", - "zoubek", - "zoufale", - "zplodit", - "zpomalit", - "zprava", - "zprostit", - "zprudka", - "zprvu", - "zrada", - "zranit", - "zrcadlo", - "zrnitost", - "zrno", - "zrovna", - "zrychlit", - "zrzavost", - "zticha", - "ztratit", - "zubovina", - "zubr", - "zvednout", - "zvenku", - "zvesela", - "zvon", - "zvrat", - "zvukovod", - "zvyk" -]; +export const wordlist: string[] = `abdikace +abeceda +adresa +agrese +akce +aktovka +alej +alkohol +amputace +ananas +andulka +anekdota +anketa +antika +anulovat +archa +arogance +asfalt +asistent +aspirace +astma +astronom +atlas +atletika +atol +autobus +azyl +babka +bachor +bacil +baculka +badatel +bageta +bagr +bahno +bakterie +balada +baletka +balkon +balonek +balvan +balza +bambus +bankomat +barbar +baret +barman +baroko +barva +baterka +batoh +bavlna +bazalka +bazilika +bazuka +bedna +beran +beseda +bestie +beton +bezinka +bezmoc +beztak +bicykl +bidlo +biftek +bikiny +bilance +biograf +biolog +bitva +bizon +blahobyt +blatouch +blecha +bledule +blesk +blikat +blizna +blokovat +bloudit +blud +bobek +bobr +bodlina +bodnout +bohatost +bojkot +bojovat +bokorys +bolest +borec +borovice +bota +boubel +bouchat +bouda +boule +bourat +boxer +bradavka +brambora +branka +bratr +brepta +briketa +brko +brloh +bronz +broskev +brunetka +brusinka +brzda +brzy +bublina +bubnovat +buchta +buditel +budka +budova +bufet +bujarost +bukvice +buldok +bulva +bunda +bunkr +burza +butik +buvol +buzola +bydlet +bylina +bytovka +bzukot +capart +carevna +cedr +cedule +cejch +cejn +cela +celer +celkem +celnice +cenina +cennost +cenovka +centrum +cenzor +cestopis +cetka +chalupa +chapadlo +charita +chata +chechtat +chemie +chichot +chirurg +chlad +chleba +chlubit +chmel +chmura +chobot +chochol +chodba +cholera +chomout +chopit +choroba +chov +chrapot +chrlit +chrt +chrup +chtivost +chudina +chutnat +chvat +chvilka +chvost +chyba +chystat +chytit +cibule +cigareta +cihelna +cihla +cinkot +cirkus +cisterna +citace +citrus +cizinec +cizost +clona +cokoliv +couvat +ctitel +ctnost +cudnost +cuketa +cukr +cupot +cvaknout +cval +cvik +cvrkot +cyklista +daleko +dareba +datel +datum +dcera +debata +dechovka +decibel +deficit +deflace +dekl +dekret +demokrat +deprese +derby +deska +detektiv +dikobraz +diktovat +dioda +diplom +disk +displej +divadlo +divoch +dlaha +dlouho +dluhopis +dnes +dobro +dobytek +docent +dochutit +dodnes +dohled +dohoda +dohra +dojem +dojnice +doklad +dokola +doktor +dokument +dolar +doleva +dolina +doma +dominant +domluvit +domov +donutit +dopad +dopis +doplnit +doposud +doprovod +dopustit +dorazit +dorost +dort +dosah +doslov +dostatek +dosud +dosyta +dotaz +dotek +dotknout +doufat +doutnat +dovozce +dozadu +doznat +dozorce +drahota +drak +dramatik +dravec +draze +drdol +drobnost +drogerie +drozd +drsnost +drtit +drzost +duben +duchovno +dudek +duha +duhovka +dusit +dusno +dutost +dvojice +dvorec +dynamit +ekolog +ekonomie +elektron +elipsa +email +emise +emoce +empatie +epizoda +epocha +epopej +epos +esej +esence +eskorta +eskymo +etiketa +euforie +evoluce +exekuce +exkurze +expedice +exploze +export +extrakt +facka +fajfka +fakulta +fanatik +fantazie +farmacie +favorit +fazole +federace +fejeton +fenka +fialka +figurant +filozof +filtr +finance +finta +fixace +fjord +flanel +flirt +flotila +fond +fosfor +fotbal +fotka +foton +frakce +freska +fronta +fukar +funkce +fyzika +galeje +garant +genetika +geolog +gilotina +glazura +glejt +golem +golfista +gotika +graf +gramofon +granule +grep +gril +grog +groteska +guma +hadice +hadr +hala +halenka +hanba +hanopis +harfa +harpuna +havran +hebkost +hejkal +hejno +hejtman +hektar +helma +hematom +herec +herna +heslo +hezky +historik +hladovka +hlasivky +hlava +hledat +hlen +hlodavec +hloh +hloupost +hltat +hlubina +hluchota +hmat +hmota +hmyz +hnis +hnojivo +hnout +hoblina +hoboj +hoch +hodiny +hodlat +hodnota +hodovat +hojnost +hokej +holinka +holka +holub +homole +honitba +honorace +horal +horda +horizont +horko +horlivec +hormon +hornina +horoskop +horstvo +hospoda +hostina +hotovost +houba +houf +houpat +houska +hovor +hradba +hranice +hravost +hrazda +hrbolek +hrdina +hrdlo +hrdost +hrnek +hrobka +hromada +hrot +hrouda +hrozen +hrstka +hrubost +hryzat +hubenost +hubnout +hudba +hukot +humr +husita +hustota +hvozd +hybnost +hydrant +hygiena +hymna +hysterik +idylka +ihned +ikona +iluze +imunita +infekce +inflace +inkaso +inovace +inspekce +internet +invalida +investor +inzerce +ironie +jablko +jachta +jahoda +jakmile +jakost +jalovec +jantar +jarmark +jaro +jasan +jasno +jatka +javor +jazyk +jedinec +jedle +jednatel +jehlan +jekot +jelen +jelito +jemnost +jenom +jepice +jeseter +jevit +jezdec +jezero +jinak +jindy +jinoch +jiskra +jistota +jitrnice +jizva +jmenovat +jogurt +jurta +kabaret +kabel +kabinet +kachna +kadet +kadidlo +kahan +kajak +kajuta +kakao +kaktus +kalamita +kalhoty +kalibr +kalnost +kamera +kamkoliv +kamna +kanibal +kanoe +kantor +kapalina +kapela +kapitola +kapka +kaple +kapota +kapr +kapusta +kapybara +karamel +karotka +karton +kasa +katalog +katedra +kauce +kauza +kavalec +kazajka +kazeta +kazivost +kdekoliv +kdesi +kedluben +kemp +keramika +kino +klacek +kladivo +klam +klapot +klasika +klaun +klec +klenba +klepat +klesnout +klid +klima +klisna +klobouk +klokan +klopa +kloub +klubovna +klusat +kluzkost +kmen +kmitat +kmotr +kniha +knot +koalice +koberec +kobka +kobliha +kobyla +kocour +kohout +kojenec +kokos +koktejl +kolaps +koleda +kolize +kolo +komando +kometa +komik +komnata +komora +kompas +komunita +konat +koncept +kondice +konec +konfese +kongres +konina +konkurs +kontakt +konzerva +kopanec +kopie +kopnout +koprovka +korbel +korektor +kormidlo +koroptev +korpus +koruna +koryto +korzet +kosatec +kostka +kotel +kotleta +kotoul +koukat +koupelna +kousek +kouzlo +kovboj +koza +kozoroh +krabice +krach +krajina +kralovat +krasopis +kravata +kredit +krejcar +kresba +kreveta +kriket +kritik +krize +krkavec +krmelec +krmivo +krocan +krok +kronika +kropit +kroupa +krovka +krtek +kruhadlo +krupice +krutost +krvinka +krychle +krypta +krystal +kryt +kudlanka +kufr +kujnost +kukla +kulajda +kulich +kulka +kulomet +kultura +kuna +kupodivu +kurt +kurzor +kutil +kvalita +kvasinka +kvestor +kynolog +kyselina +kytara +kytice +kytka +kytovec +kyvadlo +labrador +lachtan +ladnost +laik +lakomec +lamela +lampa +lanovka +lasice +laso +lastura +latinka +lavina +lebka +leckdy +leden +lednice +ledovka +ledvina +legenda +legie +legrace +lehce +lehkost +lehnout +lektvar +lenochod +lentilka +lepenka +lepidlo +letadlo +letec +letmo +letokruh +levhart +levitace +levobok +libra +lichotka +lidojed +lidskost +lihovina +lijavec +lilek +limetka +linie +linka +linoleum +listopad +litina +litovat +lobista +lodivod +logika +logoped +lokalita +loket +lomcovat +lopata +lopuch +lord +losos +lotr +loudal +louh +louka +louskat +lovec +lstivost +lucerna +lucifer +lump +lusk +lustrace +lvice +lyra +lyrika +lysina +madam +madlo +magistr +mahagon +majetek +majitel +majorita +makak +makovice +makrela +malba +malina +malovat +malvice +maminka +mandle +manko +marnost +masakr +maskot +masopust +matice +matrika +maturita +mazanec +mazivo +mazlit +mazurka +mdloba +mechanik +meditace +medovina +melasa +meloun +mentolka +metla +metoda +metr +mezera +migrace +mihnout +mihule +mikina +mikrofon +milenec +milimetr +milost +mimika +mincovna +minibar +minomet +minulost +miska +mistr +mixovat +mladost +mlha +mlhovina +mlok +mlsat +mluvit +mnich +mnohem +mobil +mocnost +modelka +modlitba +mohyla +mokro +molekula +momentka +monarcha +monokl +monstrum +montovat +monzun +mosaz +moskyt +most +motivace +motorka +motyka +moucha +moudrost +mozaika +mozek +mozol +mramor +mravenec +mrkev +mrtvola +mrzet +mrzutost +mstitel +mudrc +muflon +mulat +mumie +munice +muset +mutace +muzeum +muzikant +myslivec +mzda +nabourat +nachytat +nadace +nadbytek +nadhoz +nadobro +nadpis +nahlas +nahnat +nahodile +nahradit +naivita +najednou +najisto +najmout +naklonit +nakonec +nakrmit +nalevo +namazat +namluvit +nanometr +naoko +naopak +naostro +napadat +napevno +naplnit +napnout +naposled +naprosto +narodit +naruby +narychlo +nasadit +nasekat +naslepo +nastat +natolik +navenek +navrch +navzdory +nazvat +nebe +nechat +necky +nedaleko +nedbat +neduh +negace +nehet +nehoda +nejen +nejprve +neklid +nelibost +nemilost +nemoc +neochota +neonka +nepokoj +nerost +nerv +nesmysl +nesoulad +netvor +neuron +nevina +nezvykle +nicota +nijak +nikam +nikdy +nikl +nikterak +nitro +nocleh +nohavice +nominace +nora +norek +nositel +nosnost +nouze +noviny +novota +nozdra +nuda +nudle +nuget +nutit +nutnost +nutrie +nymfa +obal +obarvit +obava +obdiv +obec +obehnat +obejmout +obezita +obhajoba +obilnice +objasnit +objekt +obklopit +oblast +oblek +obliba +obloha +obluda +obnos +obohatit +obojek +obout +obrazec +obrna +obruba +obrys +obsah +obsluha +obstarat +obuv +obvaz +obvinit +obvod +obvykle +obyvatel +obzor +ocas +ocel +ocenit +ochladit +ochota +ochrana +ocitnout +odboj +odbyt +odchod +odcizit +odebrat +odeslat +odevzdat +odezva +odhadce +odhodit +odjet +odjinud +odkaz +odkoupit +odliv +odluka +odmlka +odolnost +odpad +odpis +odplout +odpor +odpustit +odpykat +odrazka +odsoudit +odstup +odsun +odtok +odtud +odvaha +odveta +odvolat +odvracet +odznak +ofina +ofsajd +ohlas +ohnisko +ohrada +ohrozit +ohryzek +okap +okenice +oklika +okno +okouzlit +okovy +okrasa +okres +okrsek +okruh +okupant +okurka +okusit +olejnina +olizovat +omak +omeleta +omezit +omladina +omlouvat +omluva +omyl +onehdy +opakovat +opasek +operace +opice +opilost +opisovat +opora +opozice +opravdu +oproti +orbital +orchestr +orgie +orlice +orloj +ortel +osada +oschnout +osika +osivo +oslava +oslepit +oslnit +oslovit +osnova +osoba +osolit +ospalec +osten +ostraha +ostuda +ostych +osvojit +oteplit +otisk +otop +otrhat +otrlost +otrok +otruby +otvor +ovanout +ovar +oves +ovlivnit +ovoce +oxid +ozdoba +pachatel +pacient +padouch +pahorek +pakt +palanda +palec +palivo +paluba +pamflet +pamlsek +panenka +panika +panna +panovat +panstvo +pantofle +paprika +parketa +parodie +parta +paruka +paryba +paseka +pasivita +pastelka +patent +patrona +pavouk +pazneht +pazourek +pecka +pedagog +pejsek +peklo +peloton +penalta +pendrek +penze +periskop +pero +pestrost +petarda +petice +petrolej +pevnina +pexeso +pianista +piha +pijavice +pikle +piknik +pilina +pilnost +pilulka +pinzeta +pipeta +pisatel +pistole +pitevna +pivnice +pivovar +placenta +plakat +plamen +planeta +plastika +platit +plavidlo +plaz +plech +plemeno +plenta +ples +pletivo +plevel +plivat +plnit +plno +plocha +plodina +plomba +plout +pluk +plyn +pobavit +pobyt +pochod +pocit +poctivec +podat +podcenit +podepsat +podhled +podivit +podklad +podmanit +podnik +podoba +podpora +podraz +podstata +podvod +podzim +poezie +pohanka +pohnutka +pohovor +pohroma +pohyb +pointa +pojistka +pojmout +pokazit +pokles +pokoj +pokrok +pokuta +pokyn +poledne +polibek +polknout +poloha +polynom +pomalu +pominout +pomlka +pomoc +pomsta +pomyslet +ponechat +ponorka +ponurost +popadat +popel +popisek +poplach +poprosit +popsat +popud +poradce +porce +porod +porucha +poryv +posadit +posed +posila +poskok +poslanec +posoudit +pospolu +postava +posudek +posyp +potah +potkan +potlesk +potomek +potrava +potupa +potvora +poukaz +pouto +pouzdro +povaha +povidla +povlak +povoz +povrch +povstat +povyk +povzdech +pozdrav +pozemek +poznatek +pozor +pozvat +pracovat +prahory +praktika +prales +praotec +praporek +prase +pravda +princip +prkno +probudit +procento +prodej +profese +prohra +projekt +prolomit +promile +pronikat +propad +prorok +prosba +proton +proutek +provaz +prskavka +prsten +prudkost +prut +prvek +prvohory +psanec +psovod +pstruh +ptactvo +puberta +puch +pudl +pukavec +puklina +pukrle +pult +pumpa +punc +pupen +pusa +pusinka +pustina +putovat +putyka +pyramida +pysk +pytel +racek +rachot +radiace +radnice +radon +raft +ragby +raketa +rakovina +rameno +rampouch +rande +rarach +rarita +rasovna +rastr +ratolest +razance +razidlo +reagovat +reakce +recept +redaktor +referent +reflex +rejnok +reklama +rekord +rekrut +rektor +reputace +revize +revma +revolver +rezerva +riskovat +riziko +robotika +rodokmen +rohovka +rokle +rokoko +romaneto +ropovod +ropucha +rorejs +rosol +rostlina +rotmistr +rotoped +rotunda +roubenka +roucho +roup +roura +rovina +rovnice +rozbor +rozchod +rozdat +rozeznat +rozhodce +rozinka +rozjezd +rozkaz +rozloha +rozmar +rozpad +rozruch +rozsah +roztok +rozum +rozvod +rubrika +ruchadlo +rukavice +rukopis +ryba +rybolov +rychlost +rydlo +rypadlo +rytina +ryzost +sadista +sahat +sako +samec +samizdat +samota +sanitka +sardinka +sasanka +satelit +sazba +sazenice +sbor +schovat +sebranka +secese +sedadlo +sediment +sedlo +sehnat +sejmout +sekera +sekta +sekunda +sekvoje +semeno +seno +servis +sesadit +seshora +seskok +seslat +sestra +sesuv +sesypat +setba +setina +setkat +setnout +setrvat +sever +seznam +shoda +shrnout +sifon +silnice +sirka +sirotek +sirup +situace +skafandr +skalisko +skanzen +skaut +skeptik +skica +skladba +sklenice +sklo +skluz +skoba +skokan +skoro +skripta +skrz +skupina +skvost +skvrna +slabika +sladidlo +slanina +slast +slavnost +sledovat +slepec +sleva +slezina +slib +slina +sliznice +slon +sloupek +slovo +sluch +sluha +slunce +slupka +slza +smaragd +smetana +smilstvo +smlouva +smog +smrad +smrk +smrtka +smutek +smysl +snad +snaha +snob +sobota +socha +sodovka +sokol +sopka +sotva +souboj +soucit +soudce +souhlas +soulad +soumrak +souprava +soused +soutok +souviset +spalovna +spasitel +spis +splav +spodek +spojenec +spolu +sponzor +spornost +spousta +sprcha +spustit +sranda +sraz +srdce +srna +srnec +srovnat +srpen +srst +srub +stanice +starosta +statika +stavba +stehno +stezka +stodola +stolek +stopa +storno +stoupat +strach +stres +strhnout +strom +struna +studna +stupnice +stvol +styk +subjekt +subtropy +suchar +sudost +sukno +sundat +sunout +surikata +surovina +svah +svalstvo +svetr +svatba +svazek +svisle +svitek +svoboda +svodidlo +svorka +svrab +sykavka +sykot +synek +synovec +sypat +sypkost +syrovost +sysel +sytost +tabletka +tabule +tahoun +tajemno +tajfun +tajga +tajit +tajnost +taktika +tamhle +tampon +tancovat +tanec +tanker +tapeta +tavenina +tazatel +technika +tehdy +tekutina +telefon +temnota +tendence +tenista +tenor +teplota +tepna +teprve +terapie +termoska +textil +ticho +tiskopis +titulek +tkadlec +tkanina +tlapka +tleskat +tlukot +tlupa +tmel +toaleta +topinka +topol +torzo +touha +toulec +tradice +traktor +tramp +trasa +traverza +trefit +trest +trezor +trhavina +trhlina +trochu +trojice +troska +trouba +trpce +trpitel +trpkost +trubec +truchlit +truhlice +trus +trvat +tudy +tuhnout +tuhost +tundra +turista +turnaj +tuzemsko +tvaroh +tvorba +tvrdost +tvrz +tygr +tykev +ubohost +uboze +ubrat +ubrousek +ubrus +ubytovna +ucho +uctivost +udivit +uhradit +ujednat +ujistit +ujmout +ukazatel +uklidnit +uklonit +ukotvit +ukrojit +ulice +ulita +ulovit +umyvadlo +unavit +uniforma +uniknout +upadnout +uplatnit +uplynout +upoutat +upravit +uran +urazit +usednout +usilovat +usmrtit +usnadnit +usnout +usoudit +ustlat +ustrnout +utahovat +utkat +utlumit +utonout +utopenec +utrousit +uvalit +uvolnit +uvozovka +uzdravit +uzel +uzenina +uzlina +uznat +vagon +valcha +valoun +vana +vandal +vanilka +varan +varhany +varovat +vcelku +vchod +vdova +vedro +vegetace +vejce +velbloud +veletrh +velitel +velmoc +velryba +venkov +veranda +verze +veselka +veskrze +vesnice +vespodu +vesta +veterina +veverka +vibrace +vichr +videohra +vidina +vidle +vila +vinice +viset +vitalita +vize +vizitka +vjezd +vklad +vkus +vlajka +vlak +vlasec +vlevo +vlhkost +vliv +vlnovka +vloupat +vnucovat +vnuk +voda +vodivost +vodoznak +vodstvo +vojensky +vojna +vojsko +volant +volba +volit +volno +voskovka +vozidlo +vozovna +vpravo +vrabec +vracet +vrah +vrata +vrba +vrcholek +vrhat +vrstva +vrtule +vsadit +vstoupit +vstup +vtip +vybavit +vybrat +vychovat +vydat +vydra +vyfotit +vyhledat +vyhnout +vyhodit +vyhradit +vyhubit +vyjasnit +vyjet +vyjmout +vyklopit +vykonat +vylekat +vymazat +vymezit +vymizet +vymyslet +vynechat +vynikat +vynutit +vypadat +vyplatit +vypravit +vypustit +vyrazit +vyrovnat +vyrvat +vyslovit +vysoko +vystavit +vysunout +vysypat +vytasit +vytesat +vytratit +vyvinout +vyvolat +vyvrhel +vyzdobit +vyznat +vzadu +vzbudit +vzchopit +vzdor +vzduch +vzdychat +vzestup +vzhledem +vzkaz +vzlykat +vznik +vzorek +vzpoura +vztah +vztek +xylofon +zabrat +zabydlet +zachovat +zadarmo +zadusit +zafoukat +zahltit +zahodit +zahrada +zahynout +zajatec +zajet +zajistit +zaklepat +zakoupit +zalepit +zamezit +zamotat +zamyslet +zanechat +zanikat +zaplatit +zapojit +zapsat +zarazit +zastavit +zasunout +zatajit +zatemnit +zatknout +zaujmout +zavalit +zavelet +zavinit +zavolat +zavrtat +zazvonit +zbavit +zbrusu +zbudovat +zbytek +zdaleka +zdarma +zdatnost +zdivo +zdobit +zdroj +zdvih +zdymadlo +zelenina +zeman +zemina +zeptat +zezadu +zezdola +zhatit +zhltnout +zhluboka +zhotovit +zhruba +zima +zimnice +zjemnit +zklamat +zkoumat +zkratka +zkumavka +zlato +zlehka +zloba +zlom +zlost +zlozvyk +zmapovat +zmar +zmatek +zmije +zmizet +zmocnit +zmodrat +zmrzlina +zmutovat +znak +znalost +znamenat +znovu +zobrazit +zotavit +zoubek +zoufale +zplodit +zpomalit +zprava +zprostit +zprudka +zprvu +zrada +zranit +zrcadlo +zrnitost +zrno +zrovna +zrychlit +zrzavost +zticha +ztratit +zubovina +zubr +zvednout +zvenku +zvesela +zvon +zvrat +zvukovod +zvyk`.split("\n"); diff --git a/src/bip39/wordlists/english.ts b/src/bip39/wordlists/english.ts index a80487d..948f833 100644 --- a/src/bip39/wordlists/english.ts +++ b/src/bip39/wordlists/english.ts @@ -1,2050 +1,2048 @@ -export const wordlist: string[] = [ - "abandon", - "ability", - "able", - "about", - "above", - "absent", - "absorb", - "abstract", - "absurd", - "abuse", - "access", - "accident", - "account", - "accuse", - "achieve", - "acid", - "acoustic", - "acquire", - "across", - "act", - "action", - "actor", - "actress", - "actual", - "adapt", - "add", - "addict", - "address", - "adjust", - "admit", - "adult", - "advance", - "advice", - "aerobic", - "affair", - "afford", - "afraid", - "again", - "age", - "agent", - "agree", - "ahead", - "aim", - "air", - "airport", - "aisle", - "alarm", - "album", - "alcohol", - "alert", - "alien", - "all", - "alley", - "allow", - "almost", - "alone", - "alpha", - "already", - "also", - "alter", - "always", - "amateur", - "amazing", - "among", - "amount", - "amused", - "analyst", - "anchor", - "ancient", - "anger", - "angle", - "angry", - "animal", - "ankle", - "announce", - "annual", - "another", - "answer", - "antenna", - "antique", - "anxiety", - "any", - "apart", - "apology", - "appear", - "apple", - "approve", - "april", - "arch", - "arctic", - "area", - "arena", - "argue", - "arm", - "armed", - "armor", - "army", - "around", - "arrange", - "arrest", - "arrive", - "arrow", - "art", - "artefact", - "artist", - "artwork", - "ask", - "aspect", - "assault", - "asset", - "assist", - "assume", - "asthma", - "athlete", - "atom", - "attack", - "attend", - "attitude", - "attract", - "auction", - "audit", - "august", - "aunt", - "author", - "auto", - "autumn", - "average", - "avocado", - "avoid", - "awake", - "aware", - "away", - "awesome", - "awful", - "awkward", - "axis", - "baby", - "bachelor", - "bacon", - "badge", - "bag", - "balance", - "balcony", - "ball", - "bamboo", - "banana", - "banner", - "bar", - "barely", - "bargain", - "barrel", - "base", - "basic", - "basket", - "battle", - "beach", - "bean", - "beauty", - "because", - "become", - "beef", - "before", - "begin", - "behave", - "behind", - "believe", - "below", - "belt", - "bench", - "benefit", - "best", - "betray", - "better", - "between", - "beyond", - "bicycle", - "bid", - "bike", - "bind", - "biology", - "bird", - "birth", - "bitter", - "black", - "blade", - "blame", - "blanket", - "blast", - "bleak", - "bless", - "blind", - "blood", - "blossom", - "blouse", - "blue", - "blur", - "blush", - "board", - "boat", - "body", - "boil", - "bomb", - "bone", - "bonus", - "book", - "boost", - "border", - "boring", - "borrow", - "boss", - "bottom", - "bounce", - "box", - "boy", - "bracket", - "brain", - "brand", - "brass", - "brave", - "bread", - "breeze", - "brick", - "bridge", - "brief", - "bright", - "bring", - "brisk", - "broccoli", - "broken", - "bronze", - "broom", - "brother", - "brown", - "brush", - "bubble", - "buddy", - "budget", - "buffalo", - "build", - "bulb", - "bulk", - "bullet", - "bundle", - "bunker", - "burden", - "burger", - "burst", - "bus", - "business", - "busy", - "butter", - "buyer", - "buzz", - "cabbage", - "cabin", - "cable", - "cactus", - "cage", - "cake", - "call", - "calm", - "camera", - "camp", - "can", - "canal", - "cancel", - "candy", - "cannon", - "canoe", - "canvas", - "canyon", - "capable", - "capital", - "captain", - "car", - "carbon", - "card", - "cargo", - "carpet", - "carry", - "cart", - "case", - "cash", - "casino", - "castle", - "casual", - "cat", - "catalog", - "catch", - "category", - "cattle", - "caught", - "cause", - "caution", - "cave", - "ceiling", - "celery", - "cement", - "census", - "century", - "cereal", - "certain", - "chair", - "chalk", - "champion", - "change", - "chaos", - "chapter", - "charge", - "chase", - "chat", - "cheap", - "check", - "cheese", - "chef", - "cherry", - "chest", - "chicken", - "chief", - "child", - "chimney", - "choice", - "choose", - "chronic", - "chuckle", - "chunk", - "churn", - "cigar", - "cinnamon", - "circle", - "citizen", - "city", - "civil", - "claim", - "clap", - "clarify", - "claw", - "clay", - "clean", - "clerk", - "clever", - "click", - "client", - "cliff", - "climb", - "clinic", - "clip", - "clock", - "clog", - "close", - "cloth", - "cloud", - "clown", - "club", - "clump", - "cluster", - "clutch", - "coach", - "coast", - "coconut", - "code", - "coffee", - "coil", - "coin", - "collect", - "color", - "column", - "combine", - "come", - "comfort", - "comic", - "common", - "company", - "concert", - "conduct", - "confirm", - "congress", - "connect", - "consider", - "control", - "convince", - "cook", - "cool", - "copper", - "copy", - "coral", - "core", - "corn", - "correct", - "cost", - "cotton", - "couch", - "country", - "couple", - "course", - "cousin", - "cover", - "coyote", - "crack", - "cradle", - "craft", - "cram", - "crane", - "crash", - "crater", - "crawl", - "crazy", - "cream", - "credit", - "creek", - "crew", - "cricket", - "crime", - "crisp", - "critic", - "crop", - "cross", - "crouch", - "crowd", - "crucial", - "cruel", - "cruise", - "crumble", - "crunch", - "crush", - "cry", - "crystal", - "cube", - "culture", - "cup", - "cupboard", - "curious", - "current", - "curtain", - "curve", - "cushion", - "custom", - "cute", - "cycle", - "dad", - "damage", - "damp", - "dance", - "danger", - "daring", - "dash", - "daughter", - "dawn", - "day", - "deal", - "debate", - "debris", - "decade", - "december", - "decide", - "decline", - "decorate", - "decrease", - "deer", - "defense", - "define", - "defy", - "degree", - "delay", - "deliver", - "demand", - "demise", - "denial", - "dentist", - "deny", - "depart", - "depend", - "deposit", - "depth", - "deputy", - "derive", - "describe", - "desert", - "design", - "desk", - "despair", - "destroy", - "detail", - "detect", - "develop", - "device", - "devote", - "diagram", - "dial", - "diamond", - "diary", - "dice", - "diesel", - "diet", - "differ", - "digital", - "dignity", - "dilemma", - "dinner", - "dinosaur", - "direct", - "dirt", - "disagree", - "discover", - "disease", - "dish", - "dismiss", - "disorder", - "display", - "distance", - "divert", - "divide", - "divorce", - "dizzy", - "doctor", - "document", - "dog", - "doll", - "dolphin", - "domain", - "donate", - "donkey", - "donor", - "door", - "dose", - "double", - "dove", - "draft", - "dragon", - "drama", - "drastic", - "draw", - "dream", - "dress", - "drift", - "drill", - "drink", - "drip", - "drive", - "drop", - "drum", - "dry", - "duck", - "dumb", - "dune", - "during", - "dust", - "dutch", - "duty", - "dwarf", - "dynamic", - "eager", - "eagle", - "early", - "earn", - "earth", - "easily", - "east", - "easy", - "echo", - "ecology", - "economy", - "edge", - "edit", - "educate", - "effort", - "egg", - "eight", - "either", - "elbow", - "elder", - "electric", - "elegant", - "element", - "elephant", - "elevator", - "elite", - "else", - "embark", - "embody", - "embrace", - "emerge", - "emotion", - "employ", - "empower", - "empty", - "enable", - "enact", - "end", - "endless", - "endorse", - "enemy", - "energy", - "enforce", - "engage", - "engine", - "enhance", - "enjoy", - "enlist", - "enough", - "enrich", - "enroll", - "ensure", - "enter", - "entire", - "entry", - "envelope", - "episode", - "equal", - "equip", - "era", - "erase", - "erode", - "erosion", - "error", - "erupt", - "escape", - "essay", - "essence", - "estate", - "eternal", - "ethics", - "evidence", - "evil", - "evoke", - "evolve", - "exact", - "example", - "excess", - "exchange", - "excite", - "exclude", - "excuse", - "execute", - "exercise", - "exhaust", - "exhibit", - "exile", - "exist", - "exit", - "exotic", - "expand", - "expect", - "expire", - "explain", - "expose", - "express", - "extend", - "extra", - "eye", - "eyebrow", - "fabric", - "face", - "faculty", - "fade", - "faint", - "faith", - "fall", - "false", - "fame", - "family", - "famous", - "fan", - "fancy", - "fantasy", - "farm", - "fashion", - "fat", - "fatal", - "father", - "fatigue", - "fault", - "favorite", - "feature", - "february", - "federal", - "fee", - "feed", - "feel", - "female", - "fence", - "festival", - "fetch", - "fever", - "few", - "fiber", - "fiction", - "field", - "figure", - "file", - "film", - "filter", - "final", - "find", - "fine", - "finger", - "finish", - "fire", - "firm", - "first", - "fiscal", - "fish", - "fit", - "fitness", - "fix", - "flag", - "flame", - "flash", - "flat", - "flavor", - "flee", - "flight", - "flip", - "float", - "flock", - "floor", - "flower", - "fluid", - "flush", - "fly", - "foam", - "focus", - "fog", - "foil", - "fold", - "follow", - "food", - "foot", - "force", - "forest", - "forget", - "fork", - "fortune", - "forum", - "forward", - "fossil", - "foster", - "found", - "fox", - "fragile", - "frame", - "frequent", - "fresh", - "friend", - "fringe", - "frog", - "front", - "frost", - "frown", - "frozen", - "fruit", - "fuel", - "fun", - "funny", - "furnace", - "fury", - "future", - "gadget", - "gain", - "galaxy", - "gallery", - "game", - "gap", - "garage", - "garbage", - "garden", - "garlic", - "garment", - "gas", - "gasp", - "gate", - "gather", - "gauge", - "gaze", - "general", - "genius", - "genre", - "gentle", - "genuine", - "gesture", - "ghost", - "giant", - "gift", - "giggle", - "ginger", - "giraffe", - "girl", - "give", - "glad", - "glance", - "glare", - "glass", - "glide", - "glimpse", - "globe", - "gloom", - "glory", - "glove", - "glow", - "glue", - "goat", - "goddess", - "gold", - "good", - "goose", - "gorilla", - "gospel", - "gossip", - "govern", - "gown", - "grab", - "grace", - "grain", - "grant", - "grape", - "grass", - "gravity", - "great", - "green", - "grid", - "grief", - "grit", - "grocery", - "group", - "grow", - "grunt", - "guard", - "guess", - "guide", - "guilt", - "guitar", - "gun", - "gym", - "habit", - "hair", - "half", - "hammer", - "hamster", - "hand", - "happy", - "harbor", - "hard", - "harsh", - "harvest", - "hat", - "have", - "hawk", - "hazard", - "head", - "health", - "heart", - "heavy", - "hedgehog", - "height", - "hello", - "helmet", - "help", - "hen", - "hero", - "hidden", - "high", - "hill", - "hint", - "hip", - "hire", - "history", - "hobby", - "hockey", - "hold", - "hole", - "holiday", - "hollow", - "home", - "honey", - "hood", - "hope", - "horn", - "horror", - "horse", - "hospital", - "host", - "hotel", - "hour", - "hover", - "hub", - "huge", - "human", - "humble", - "humor", - "hundred", - "hungry", - "hunt", - "hurdle", - "hurry", - "hurt", - "husband", - "hybrid", - "ice", - "icon", - "idea", - "identify", - "idle", - "ignore", - "ill", - "illegal", - "illness", - "image", - "imitate", - "immense", - "immune", - "impact", - "impose", - "improve", - "impulse", - "inch", - "include", - "income", - "increase", - "index", - "indicate", - "indoor", - "industry", - "infant", - "inflict", - "inform", - "inhale", - "inherit", - "initial", - "inject", - "injury", - "inmate", - "inner", - "innocent", - "input", - "inquiry", - "insane", - "insect", - "inside", - "inspire", - "install", - "intact", - "interest", - "into", - "invest", - "invite", - "involve", - "iron", - "island", - "isolate", - "issue", - "item", - "ivory", - "jacket", - "jaguar", - "jar", - "jazz", - "jealous", - "jeans", - "jelly", - "jewel", - "job", - "join", - "joke", - "journey", - "joy", - "judge", - "juice", - "jump", - "jungle", - "junior", - "junk", - "just", - "kangaroo", - "keen", - "keep", - "ketchup", - "key", - "kick", - "kid", - "kidney", - "kind", - "kingdom", - "kiss", - "kit", - "kitchen", - "kite", - "kitten", - "kiwi", - "knee", - "knife", - "knock", - "know", - "lab", - "label", - "labor", - "ladder", - "lady", - "lake", - "lamp", - "language", - "laptop", - "large", - "later", - "latin", - "laugh", - "laundry", - "lava", - "law", - "lawn", - "lawsuit", - "layer", - "lazy", - "leader", - "leaf", - "learn", - "leave", - "lecture", - "left", - "leg", - "legal", - "legend", - "leisure", - "lemon", - "lend", - "length", - "lens", - "leopard", - "lesson", - "letter", - "level", - "liar", - "liberty", - "library", - "license", - "life", - "lift", - "light", - "like", - "limb", - "limit", - "link", - "lion", - "liquid", - "list", - "little", - "live", - "lizard", - "load", - "loan", - "lobster", - "local", - "lock", - "logic", - "lonely", - "long", - "loop", - "lottery", - "loud", - "lounge", - "love", - "loyal", - "lucky", - "luggage", - "lumber", - "lunar", - "lunch", - "luxury", - "lyrics", - "machine", - "mad", - "magic", - "magnet", - "maid", - "mail", - "main", - "major", - "make", - "mammal", - "man", - "manage", - "mandate", - "mango", - "mansion", - "manual", - "maple", - "marble", - "march", - "margin", - "marine", - "market", - "marriage", - "mask", - "mass", - "master", - "match", - "material", - "math", - "matrix", - "matter", - "maximum", - "maze", - "meadow", - "mean", - "measure", - "meat", - "mechanic", - "medal", - "media", - "melody", - "melt", - "member", - "memory", - "mention", - "menu", - "mercy", - "merge", - "merit", - "merry", - "mesh", - "message", - "metal", - "method", - "middle", - "midnight", - "milk", - "million", - "mimic", - "mind", - "minimum", - "minor", - "minute", - "miracle", - "mirror", - "misery", - "miss", - "mistake", - "mix", - "mixed", - "mixture", - "mobile", - "model", - "modify", - "mom", - "moment", - "monitor", - "monkey", - "monster", - "month", - "moon", - "moral", - "more", - "morning", - "mosquito", - "mother", - "motion", - "motor", - "mountain", - "mouse", - "move", - "movie", - "much", - "muffin", - "mule", - "multiply", - "muscle", - "museum", - "mushroom", - "music", - "must", - "mutual", - "myself", - "mystery", - "myth", - "naive", - "name", - "napkin", - "narrow", - "nasty", - "nation", - "nature", - "near", - "neck", - "need", - "negative", - "neglect", - "neither", - "nephew", - "nerve", - "nest", - "net", - "network", - "neutral", - "never", - "news", - "next", - "nice", - "night", - "noble", - "noise", - "nominee", - "noodle", - "normal", - "north", - "nose", - "notable", - "note", - "nothing", - "notice", - "novel", - "now", - "nuclear", - "number", - "nurse", - "nut", - "oak", - "obey", - "object", - "oblige", - "obscure", - "observe", - "obtain", - "obvious", - "occur", - "ocean", - "october", - "odor", - "off", - "offer", - "office", - "often", - "oil", - "okay", - "old", - "olive", - "olympic", - "omit", - "once", - "one", - "onion", - "online", - "only", - "open", - "opera", - "opinion", - "oppose", - "option", - "orange", - "orbit", - "orchard", - "order", - "ordinary", - "organ", - "orient", - "original", - "orphan", - "ostrich", - "other", - "outdoor", - "outer", - "output", - "outside", - "oval", - "oven", - "over", - "own", - "owner", - "oxygen", - "oyster", - "ozone", - "pact", - "paddle", - "page", - "pair", - "palace", - "palm", - "panda", - "panel", - "panic", - "panther", - "paper", - "parade", - "parent", - "park", - "parrot", - "party", - "pass", - "patch", - "path", - "patient", - "patrol", - "pattern", - "pause", - "pave", - "payment", - "peace", - "peanut", - "pear", - "peasant", - "pelican", - "pen", - "penalty", - "pencil", - "people", - "pepper", - "perfect", - "permit", - "person", - "pet", - "phone", - "photo", - "phrase", - "physical", - "piano", - "picnic", - "picture", - "piece", - "pig", - "pigeon", - "pill", - "pilot", - "pink", - "pioneer", - "pipe", - "pistol", - "pitch", - "pizza", - "place", - "planet", - "plastic", - "plate", - "play", - "please", - "pledge", - "pluck", - "plug", - "plunge", - "poem", - "poet", - "point", - "polar", - "pole", - "police", - "pond", - "pony", - "pool", - "popular", - "portion", - "position", - "possible", - "post", - "potato", - "pottery", - "poverty", - "powder", - "power", - "practice", - "praise", - "predict", - "prefer", - "prepare", - "present", - "pretty", - "prevent", - "price", - "pride", - "primary", - "print", - "priority", - "prison", - "private", - "prize", - "problem", - "process", - "produce", - "profit", - "program", - "project", - "promote", - "proof", - "property", - "prosper", - "protect", - "proud", - "provide", - "public", - "pudding", - "pull", - "pulp", - "pulse", - "pumpkin", - "punch", - "pupil", - "puppy", - "purchase", - "purity", - "purpose", - "purse", - "push", - "put", - "puzzle", - "pyramid", - "quality", - "quantum", - "quarter", - "question", - "quick", - "quit", - "quiz", - "quote", - "rabbit", - "raccoon", - "race", - "rack", - "radar", - "radio", - "rail", - "rain", - "raise", - "rally", - "ramp", - "ranch", - "random", - "range", - "rapid", - "rare", - "rate", - "rather", - "raven", - "raw", - "razor", - "ready", - "real", - "reason", - "rebel", - "rebuild", - "recall", - "receive", - "recipe", - "record", - "recycle", - "reduce", - "reflect", - "reform", - "refuse", - "region", - "regret", - "regular", - "reject", - "relax", - "release", - "relief", - "rely", - "remain", - "remember", - "remind", - "remove", - "render", - "renew", - "rent", - "reopen", - "repair", - "repeat", - "replace", - "report", - "require", - "rescue", - "resemble", - "resist", - "resource", - "response", - "result", - "retire", - "retreat", - "return", - "reunion", - "reveal", - "review", - "reward", - "rhythm", - "rib", - "ribbon", - "rice", - "rich", - "ride", - "ridge", - "rifle", - "right", - "rigid", - "ring", - "riot", - "ripple", - "risk", - "ritual", - "rival", - "river", - "road", - "roast", - "robot", - "robust", - "rocket", - "romance", - "roof", - "rookie", - "room", - "rose", - "rotate", - "rough", - "round", - "route", - "royal", - "rubber", - "rude", - "rug", - "rule", - "run", - "runway", - "rural", - "sad", - "saddle", - "sadness", - "safe", - "sail", - "salad", - "salmon", - "salon", - "salt", - "salute", - "same", - "sample", - "sand", - "satisfy", - "satoshi", - "sauce", - "sausage", - "save", - "say", - "scale", - "scan", - "scare", - "scatter", - "scene", - "scheme", - "school", - "science", - "scissors", - "scorpion", - "scout", - "scrap", - "screen", - "script", - "scrub", - "sea", - "search", - "season", - "seat", - "second", - "secret", - "section", - "security", - "seed", - "seek", - "segment", - "select", - "sell", - "seminar", - "senior", - "sense", - "sentence", - "series", - "service", - "session", - "settle", - "setup", - "seven", - "shadow", - "shaft", - "shallow", - "share", - "shed", - "shell", - "sheriff", - "shield", - "shift", - "shine", - "ship", - "shiver", - "shock", - "shoe", - "shoot", - "shop", - "short", - "shoulder", - "shove", - "shrimp", - "shrug", - "shuffle", - "shy", - "sibling", - "sick", - "side", - "siege", - "sight", - "sign", - "silent", - "silk", - "silly", - "silver", - "similar", - "simple", - "since", - "sing", - "siren", - "sister", - "situate", - "six", - "size", - "skate", - "sketch", - "ski", - "skill", - "skin", - "skirt", - "skull", - "slab", - "slam", - "sleep", - "slender", - "slice", - "slide", - "slight", - "slim", - "slogan", - "slot", - "slow", - "slush", - "small", - "smart", - "smile", - "smoke", - "smooth", - "snack", - "snake", - "snap", - "sniff", - "snow", - "soap", - "soccer", - "social", - "sock", - "soda", - "soft", - "solar", - "soldier", - "solid", - "solution", - "solve", - "someone", - "song", - "soon", - "sorry", - "sort", - "soul", - "sound", - "soup", - "source", - "south", - "space", - "spare", - "spatial", - "spawn", - "speak", - "special", - "speed", - "spell", - "spend", - "sphere", - "spice", - "spider", - "spike", - "spin", - "spirit", - "split", - "spoil", - "sponsor", - "spoon", - "sport", - "spot", - "spray", - "spread", - "spring", - "spy", - "square", - "squeeze", - "squirrel", - "stable", - "stadium", - "staff", - "stage", - "stairs", - "stamp", - "stand", - "start", - "state", - "stay", - "steak", - "steel", - "stem", - "step", - "stereo", - "stick", - "still", - "sting", - "stock", - "stomach", - "stone", - "stool", - "story", - "stove", - "strategy", - "street", - "strike", - "strong", - "struggle", - "student", - "stuff", - "stumble", - "style", - "subject", - "submit", - "subway", - "success", - "such", - "sudden", - "suffer", - "sugar", - "suggest", - "suit", - "summer", - "sun", - "sunny", - "sunset", - "super", - "supply", - "supreme", - "sure", - "surface", - "surge", - "surprise", - "surround", - "survey", - "suspect", - "sustain", - "swallow", - "swamp", - "swap", - "swarm", - "swear", - "sweet", - "swift", - "swim", - "swing", - "switch", - "sword", - "symbol", - "symptom", - "syrup", - "system", - "table", - "tackle", - "tag", - "tail", - "talent", - "talk", - "tank", - "tape", - "target", - "task", - "taste", - "tattoo", - "taxi", - "teach", - "team", - "tell", - "ten", - "tenant", - "tennis", - "tent", - "term", - "test", - "text", - "thank", - "that", - "theme", - "then", - "theory", - "there", - "they", - "thing", - "this", - "thought", - "three", - "thrive", - "throw", - "thumb", - "thunder", - "ticket", - "tide", - "tiger", - "tilt", - "timber", - "time", - "tiny", - "tip", - "tired", - "tissue", - "title", - "toast", - "tobacco", - "today", - "toddler", - "toe", - "together", - "toilet", - "token", - "tomato", - "tomorrow", - "tone", - "tongue", - "tonight", - "tool", - "tooth", - "top", - "topic", - "topple", - "torch", - "tornado", - "tortoise", - "toss", - "total", - "tourist", - "toward", - "tower", - "town", - "toy", - "track", - "trade", - "traffic", - "tragic", - "train", - "transfer", - "trap", - "trash", - "travel", - "tray", - "treat", - "tree", - "trend", - "trial", - "tribe", - "trick", - "trigger", - "trim", - "trip", - "trophy", - "trouble", - "truck", - "true", - "truly", - "trumpet", - "trust", - "truth", - "try", - "tube", - "tuition", - "tumble", - "tuna", - "tunnel", - "turkey", - "turn", - "turtle", - "twelve", - "twenty", - "twice", - "twin", - "twist", - "two", - "type", - "typical", - "ugly", - "umbrella", - "unable", - "unaware", - "uncle", - "uncover", - "under", - "undo", - "unfair", - "unfold", - "unhappy", - "uniform", - "unique", - "unit", - "universe", - "unknown", - "unlock", - "until", - "unusual", - "unveil", - "update", - "upgrade", - "uphold", - "upon", - "upper", - "upset", - "urban", - "urge", - "usage", - "use", - "used", - "useful", - "useless", - "usual", - "utility", - "vacant", - "vacuum", - "vague", - "valid", - "valley", - "valve", - "van", - "vanish", - "vapor", - "various", - "vast", - "vault", - "vehicle", - "velvet", - "vendor", - "venture", - "venue", - "verb", - "verify", - "version", - "very", - "vessel", - "veteran", - "viable", - "vibrant", - "vicious", - "victory", - "video", - "view", - "village", - "vintage", - "violin", - "virtual", - "virus", - "visa", - "visit", - "visual", - "vital", - "vivid", - "vocal", - "voice", - "void", - "volcano", - "volume", - "vote", - "voyage", - "wage", - "wagon", - "wait", - "walk", - "wall", - "walnut", - "want", - "warfare", - "warm", - "warrior", - "wash", - "wasp", - "waste", - "water", - "wave", - "way", - "wealth", - "weapon", - "wear", - "weasel", - "weather", - "web", - "wedding", - "weekend", - "weird", - "welcome", - "west", - "wet", - "whale", - "what", - "wheat", - "wheel", - "when", - "where", - "whip", - "whisper", - "wide", - "width", - "wife", - "wild", - "will", - "win", - "window", - "wine", - "wing", - "wink", - "winner", - "winter", - "wire", - "wisdom", - "wise", - "wish", - "witness", - "wolf", - "woman", - "wonder", - "wood", - "wool", - "word", - "work", - "world", - "worry", - "worth", - "wrap", - "wreck", - "wrestle", - "wrist", - "write", - "wrong", - "yard", - "year", - "yellow", - "you", - "young", - "youth", - "zebra", - "zero", - "zone", - "zoo" -]; +export const wordlist: string[] = `abandon +ability +able +about +above +absent +absorb +abstract +absurd +abuse +access +accident +account +accuse +achieve +acid +acoustic +acquire +across +act +action +actor +actress +actual +adapt +add +addict +address +adjust +admit +adult +advance +advice +aerobic +affair +afford +afraid +again +age +agent +agree +ahead +aim +air +airport +aisle +alarm +album +alcohol +alert +alien +all +alley +allow +almost +alone +alpha +already +also +alter +always +amateur +amazing +among +amount +amused +analyst +anchor +ancient +anger +angle +angry +animal +ankle +announce +annual +another +answer +antenna +antique +anxiety +any +apart +apology +appear +apple +approve +april +arch +arctic +area +arena +argue +arm +armed +armor +army +around +arrange +arrest +arrive +arrow +art +artefact +artist +artwork +ask +aspect +assault +asset +assist +assume +asthma +athlete +atom +attack +attend +attitude +attract +auction +audit +august +aunt +author +auto +autumn +average +avocado +avoid +awake +aware +away +awesome +awful +awkward +axis +baby +bachelor +bacon +badge +bag +balance +balcony +ball +bamboo +banana +banner +bar +barely +bargain +barrel +base +basic +basket +battle +beach +bean +beauty +because +become +beef +before +begin +behave +behind +believe +below +belt +bench +benefit +best +betray +better +between +beyond +bicycle +bid +bike +bind +biology +bird +birth +bitter +black +blade +blame +blanket +blast +bleak +bless +blind +blood +blossom +blouse +blue +blur +blush +board +boat +body +boil +bomb +bone +bonus +book +boost +border +boring +borrow +boss +bottom +bounce +box +boy +bracket +brain +brand +brass +brave +bread +breeze +brick +bridge +brief +bright +bring +brisk +broccoli +broken +bronze +broom +brother +brown +brush +bubble +buddy +budget +buffalo +build +bulb +bulk +bullet +bundle +bunker +burden +burger +burst +bus +business +busy +butter +buyer +buzz +cabbage +cabin +cable +cactus +cage +cake +call +calm +camera +camp +can +canal +cancel +candy +cannon +canoe +canvas +canyon +capable +capital +captain +car +carbon +card +cargo +carpet +carry +cart +case +cash +casino +castle +casual +cat +catalog +catch +category +cattle +caught +cause +caution +cave +ceiling +celery +cement +census +century +cereal +certain +chair +chalk +champion +change +chaos +chapter +charge +chase +chat +cheap +check +cheese +chef +cherry +chest +chicken +chief +child +chimney +choice +choose +chronic +chuckle +chunk +churn +cigar +cinnamon +circle +citizen +city +civil +claim +clap +clarify +claw +clay +clean +clerk +clever +click +client +cliff +climb +clinic +clip +clock +clog +close +cloth +cloud +clown +club +clump +cluster +clutch +coach +coast +coconut +code +coffee +coil +coin +collect +color +column +combine +come +comfort +comic +common +company +concert +conduct +confirm +congress +connect +consider +control +convince +cook +cool +copper +copy +coral +core +corn +correct +cost +cotton +couch +country +couple +course +cousin +cover +coyote +crack +cradle +craft +cram +crane +crash +crater +crawl +crazy +cream +credit +creek +crew +cricket +crime +crisp +critic +crop +cross +crouch +crowd +crucial +cruel +cruise +crumble +crunch +crush +cry +crystal +cube +culture +cup +cupboard +curious +current +curtain +curve +cushion +custom +cute +cycle +dad +damage +damp +dance +danger +daring +dash +daughter +dawn +day +deal +debate +debris +decade +december +decide +decline +decorate +decrease +deer +defense +define +defy +degree +delay +deliver +demand +demise +denial +dentist +deny +depart +depend +deposit +depth +deputy +derive +describe +desert +design +desk +despair +destroy +detail +detect +develop +device +devote +diagram +dial +diamond +diary +dice +diesel +diet +differ +digital +dignity +dilemma +dinner +dinosaur +direct +dirt +disagree +discover +disease +dish +dismiss +disorder +display +distance +divert +divide +divorce +dizzy +doctor +document +dog +doll +dolphin +domain +donate +donkey +donor +door +dose +double +dove +draft +dragon +drama +drastic +draw +dream +dress +drift +drill +drink +drip +drive +drop +drum +dry +duck +dumb +dune +during +dust +dutch +duty +dwarf +dynamic +eager +eagle +early +earn +earth +easily +east +easy +echo +ecology +economy +edge +edit +educate +effort +egg +eight +either +elbow +elder +electric +elegant +element +elephant +elevator +elite +else +embark +embody +embrace +emerge +emotion +employ +empower +empty +enable +enact +end +endless +endorse +enemy +energy +enforce +engage +engine +enhance +enjoy +enlist +enough +enrich +enroll +ensure +enter +entire +entry +envelope +episode +equal +equip +era +erase +erode +erosion +error +erupt +escape +essay +essence +estate +eternal +ethics +evidence +evil +evoke +evolve +exact +example +excess +exchange +excite +exclude +excuse +execute +exercise +exhaust +exhibit +exile +exist +exit +exotic +expand +expect +expire +explain +expose +express +extend +extra +eye +eyebrow +fabric +face +faculty +fade +faint +faith +fall +false +fame +family +famous +fan +fancy +fantasy +farm +fashion +fat +fatal +father +fatigue +fault +favorite +feature +february +federal +fee +feed +feel +female +fence +festival +fetch +fever +few +fiber +fiction +field +figure +file +film +filter +final +find +fine +finger +finish +fire +firm +first +fiscal +fish +fit +fitness +fix +flag +flame +flash +flat +flavor +flee +flight +flip +float +flock +floor +flower +fluid +flush +fly +foam +focus +fog +foil +fold +follow +food +foot +force +forest +forget +fork +fortune +forum +forward +fossil +foster +found +fox +fragile +frame +frequent +fresh +friend +fringe +frog +front +frost +frown +frozen +fruit +fuel +fun +funny +furnace +fury +future +gadget +gain +galaxy +gallery +game +gap +garage +garbage +garden +garlic +garment +gas +gasp +gate +gather +gauge +gaze +general +genius +genre +gentle +genuine +gesture +ghost +giant +gift +giggle +ginger +giraffe +girl +give +glad +glance +glare +glass +glide +glimpse +globe +gloom +glory +glove +glow +glue +goat +goddess +gold +good +goose +gorilla +gospel +gossip +govern +gown +grab +grace +grain +grant +grape +grass +gravity +great +green +grid +grief +grit +grocery +group +grow +grunt +guard +guess +guide +guilt +guitar +gun +gym +habit +hair +half +hammer +hamster +hand +happy +harbor +hard +harsh +harvest +hat +have +hawk +hazard +head +health +heart +heavy +hedgehog +height +hello +helmet +help +hen +hero +hidden +high +hill +hint +hip +hire +history +hobby +hockey +hold +hole +holiday +hollow +home +honey +hood +hope +horn +horror +horse +hospital +host +hotel +hour +hover +hub +huge +human +humble +humor +hundred +hungry +hunt +hurdle +hurry +hurt +husband +hybrid +ice +icon +idea +identify +idle +ignore +ill +illegal +illness +image +imitate +immense +immune +impact +impose +improve +impulse +inch +include +income +increase +index +indicate +indoor +industry +infant +inflict +inform +inhale +inherit +initial +inject +injury +inmate +inner +innocent +input +inquiry +insane +insect +inside +inspire +install +intact +interest +into +invest +invite +involve +iron +island +isolate +issue +item +ivory +jacket +jaguar +jar +jazz +jealous +jeans +jelly +jewel +job +join +joke +journey +joy +judge +juice +jump +jungle +junior +junk +just +kangaroo +keen +keep +ketchup +key +kick +kid +kidney +kind +kingdom +kiss +kit +kitchen +kite +kitten +kiwi +knee +knife +knock +know +lab +label +labor +ladder +lady +lake +lamp +language +laptop +large +later +latin +laugh +laundry +lava +law +lawn +lawsuit +layer +lazy +leader +leaf +learn +leave +lecture +left +leg +legal +legend +leisure +lemon +lend +length +lens +leopard +lesson +letter +level +liar +liberty +library +license +life +lift +light +like +limb +limit +link +lion +liquid +list +little +live +lizard +load +loan +lobster +local +lock +logic +lonely +long +loop +lottery +loud +lounge +love +loyal +lucky +luggage +lumber +lunar +lunch +luxury +lyrics +machine +mad +magic +magnet +maid +mail +main +major +make +mammal +man +manage +mandate +mango +mansion +manual +maple +marble +march +margin +marine +market +marriage +mask +mass +master +match +material +math +matrix +matter +maximum +maze +meadow +mean +measure +meat +mechanic +medal +media +melody +melt +member +memory +mention +menu +mercy +merge +merit +merry +mesh +message +metal +method +middle +midnight +milk +million +mimic +mind +minimum +minor +minute +miracle +mirror +misery +miss +mistake +mix +mixed +mixture +mobile +model +modify +mom +moment +monitor +monkey +monster +month +moon +moral +more +morning +mosquito +mother +motion +motor +mountain +mouse +move +movie +much +muffin +mule +multiply +muscle +museum +mushroom +music +must +mutual +myself +mystery +myth +naive +name +napkin +narrow +nasty +nation +nature +near +neck +need +negative +neglect +neither +nephew +nerve +nest +net +network +neutral +never +news +next +nice +night +noble +noise +nominee +noodle +normal +north +nose +notable +note +nothing +notice +novel +now +nuclear +number +nurse +nut +oak +obey +object +oblige +obscure +observe +obtain +obvious +occur +ocean +october +odor +off +offer +office +often +oil +okay +old +olive +olympic +omit +once +one +onion +online +only +open +opera +opinion +oppose +option +orange +orbit +orchard +order +ordinary +organ +orient +original +orphan +ostrich +other +outdoor +outer +output +outside +oval +oven +over +own +owner +oxygen +oyster +ozone +pact +paddle +page +pair +palace +palm +panda +panel +panic +panther +paper +parade +parent +park +parrot +party +pass +patch +path +patient +patrol +pattern +pause +pave +payment +peace +peanut +pear +peasant +pelican +pen +penalty +pencil +people +pepper +perfect +permit +person +pet +phone +photo +phrase +physical +piano +picnic +picture +piece +pig +pigeon +pill +pilot +pink +pioneer +pipe +pistol +pitch +pizza +place +planet +plastic +plate +play +please +pledge +pluck +plug +plunge +poem +poet +point +polar +pole +police +pond +pony +pool +popular +portion +position +possible +post +potato +pottery +poverty +powder +power +practice +praise +predict +prefer +prepare +present +pretty +prevent +price +pride +primary +print +priority +prison +private +prize +problem +process +produce +profit +program +project +promote +proof +property +prosper +protect +proud +provide +public +pudding +pull +pulp +pulse +pumpkin +punch +pupil +puppy +purchase +purity +purpose +purse +push +put +puzzle +pyramid +quality +quantum +quarter +question +quick +quit +quiz +quote +rabbit +raccoon +race +rack +radar +radio +rail +rain +raise +rally +ramp +ranch +random +range +rapid +rare +rate +rather +raven +raw +razor +ready +real +reason +rebel +rebuild +recall +receive +recipe +record +recycle +reduce +reflect +reform +refuse +region +regret +regular +reject +relax +release +relief +rely +remain +remember +remind +remove +render +renew +rent +reopen +repair +repeat +replace +report +require +rescue +resemble +resist +resource +response +result +retire +retreat +return +reunion +reveal +review +reward +rhythm +rib +ribbon +rice +rich +ride +ridge +rifle +right +rigid +ring +riot +ripple +risk +ritual +rival +river +road +roast +robot +robust +rocket +romance +roof +rookie +room +rose +rotate +rough +round +route +royal +rubber +rude +rug +rule +run +runway +rural +sad +saddle +sadness +safe +sail +salad +salmon +salon +salt +salute +same +sample +sand +satisfy +satoshi +sauce +sausage +save +say +scale +scan +scare +scatter +scene +scheme +school +science +scissors +scorpion +scout +scrap +screen +script +scrub +sea +search +season +seat +second +secret +section +security +seed +seek +segment +select +sell +seminar +senior +sense +sentence +series +service +session +settle +setup +seven +shadow +shaft +shallow +share +shed +shell +sheriff +shield +shift +shine +ship +shiver +shock +shoe +shoot +shop +short +shoulder +shove +shrimp +shrug +shuffle +shy +sibling +sick +side +siege +sight +sign +silent +silk +silly +silver +similar +simple +since +sing +siren +sister +situate +six +size +skate +sketch +ski +skill +skin +skirt +skull +slab +slam +sleep +slender +slice +slide +slight +slim +slogan +slot +slow +slush +small +smart +smile +smoke +smooth +snack +snake +snap +sniff +snow +soap +soccer +social +sock +soda +soft +solar +soldier +solid +solution +solve +someone +song +soon +sorry +sort +soul +sound +soup +source +south +space +spare +spatial +spawn +speak +special +speed +spell +spend +sphere +spice +spider +spike +spin +spirit +split +spoil +sponsor +spoon +sport +spot +spray +spread +spring +spy +square +squeeze +squirrel +stable +stadium +staff +stage +stairs +stamp +stand +start +state +stay +steak +steel +stem +step +stereo +stick +still +sting +stock +stomach +stone +stool +story +stove +strategy +street +strike +strong +struggle +student +stuff +stumble +style +subject +submit +subway +success +such +sudden +suffer +sugar +suggest +suit +summer +sun +sunny +sunset +super +supply +supreme +sure +surface +surge +surprise +surround +survey +suspect +sustain +swallow +swamp +swap +swarm +swear +sweet +swift +swim +swing +switch +sword +symbol +symptom +syrup +system +table +tackle +tag +tail +talent +talk +tank +tape +target +task +taste +tattoo +taxi +teach +team +tell +ten +tenant +tennis +tent +term +test +text +thank +that +theme +then +theory +there +they +thing +this +thought +three +thrive +throw +thumb +thunder +ticket +tide +tiger +tilt +timber +time +tiny +tip +tired +tissue +title +toast +tobacco +today +toddler +toe +together +toilet +token +tomato +tomorrow +tone +tongue +tonight +tool +tooth +top +topic +topple +torch +tornado +tortoise +toss +total +tourist +toward +tower +town +toy +track +trade +traffic +tragic +train +transfer +trap +trash +travel +tray +treat +tree +trend +trial +tribe +trick +trigger +trim +trip +trophy +trouble +truck +true +truly +trumpet +trust +truth +try +tube +tuition +tumble +tuna +tunnel +turkey +turn +turtle +twelve +twenty +twice +twin +twist +two +type +typical +ugly +umbrella +unable +unaware +uncle +uncover +under +undo +unfair +unfold +unhappy +uniform +unique +unit +universe +unknown +unlock +until +unusual +unveil +update +upgrade +uphold +upon +upper +upset +urban +urge +usage +use +used +useful +useless +usual +utility +vacant +vacuum +vague +valid +valley +valve +van +vanish +vapor +various +vast +vault +vehicle +velvet +vendor +venture +venue +verb +verify +version +very +vessel +veteran +viable +vibrant +vicious +victory +video +view +village +vintage +violin +virtual +virus +visa +visit +visual +vital +vivid +vocal +voice +void +volcano +volume +vote +voyage +wage +wagon +wait +walk +wall +walnut +want +warfare +warm +warrior +wash +wasp +waste +water +wave +way +wealth +weapon +wear +weasel +weather +web +wedding +weekend +weird +welcome +west +wet +whale +what +wheat +wheel +when +where +whip +whisper +wide +width +wife +wild +will +win +window +wine +wing +wink +winner +winter +wire +wisdom +wise +wish +witness +wolf +woman +wonder +wood +wool +word +work +world +worry +worth +wrap +wreck +wrestle +wrist +write +wrong +yard +year +yellow +you +young +youth +zebra +zero +zone +zoo`.split("\n"); diff --git a/src/bip39/wordlists/french.ts b/src/bip39/wordlists/french.ts index 5ac0f18..3dd4800 100644 --- a/src/bip39/wordlists/french.ts +++ b/src/bip39/wordlists/french.ts @@ -1,2050 +1,2048 @@ -export const wordlist: string[] = [ - "abaisser", - "abandon", - "abdiquer", - "abeille", - "abolir", - "aborder", - "aboutir", - "aboyer", - "abrasif", - "abreuver", - "abriter", - "abroger", - "abrupt", - "absence", - "absolu", - "absurde", - "abusif", - "abyssal", - "académie", - "acajou", - "acarien", - "accabler", - "accepter", - "acclamer", - "accolade", - "accroche", - "accuser", - "acerbe", - "achat", - "acheter", - "aciduler", - "acier", - "acompte", - "acquérir", - "acronyme", - "acteur", - "actif", - "actuel", - "adepte", - "adéquat", - "adhésif", - "adjectif", - "adjuger", - "admettre", - "admirer", - "adopter", - "adorer", - "adoucir", - "adresse", - "adroit", - "adulte", - "adverbe", - "aérer", - "aéronef", - "affaire", - "affecter", - "affiche", - "affreux", - "affubler", - "agacer", - "agencer", - "agile", - "agiter", - "agrafer", - "agréable", - "agrume", - "aider", - "aiguille", - "ailier", - "aimable", - "aisance", - "ajouter", - "ajuster", - "alarmer", - "alchimie", - "alerte", - "algèbre", - "algue", - "aliéner", - "aliment", - "alléger", - "alliage", - "allouer", - "allumer", - "alourdir", - "alpaga", - "altesse", - "alvéole", - "amateur", - "ambigu", - "ambre", - "aménager", - "amertume", - "amidon", - "amiral", - "amorcer", - "amour", - "amovible", - "amphibie", - "ampleur", - "amusant", - "analyse", - "anaphore", - "anarchie", - "anatomie", - "ancien", - "anéantir", - "angle", - "angoisse", - "anguleux", - "animal", - "annexer", - "annonce", - "annuel", - "anodin", - "anomalie", - "anonyme", - "anormal", - "antenne", - "antidote", - "anxieux", - "apaiser", - "apéritif", - "aplanir", - "apologie", - "appareil", - "appeler", - "apporter", - "appuyer", - "aquarium", - "aqueduc", - "arbitre", - "arbuste", - "ardeur", - "ardoise", - "argent", - "arlequin", - "armature", - "armement", - "armoire", - "armure", - "arpenter", - "arracher", - "arriver", - "arroser", - "arsenic", - "artériel", - "article", - "aspect", - "asphalte", - "aspirer", - "assaut", - "asservir", - "assiette", - "associer", - "assurer", - "asticot", - "astre", - "astuce", - "atelier", - "atome", - "atrium", - "atroce", - "attaque", - "attentif", - "attirer", - "attraper", - "aubaine", - "auberge", - "audace", - "audible", - "augurer", - "aurore", - "automne", - "autruche", - "avaler", - "avancer", - "avarice", - "avenir", - "averse", - "aveugle", - "aviateur", - "avide", - "avion", - "aviser", - "avoine", - "avouer", - "avril", - "axial", - "axiome", - "badge", - "bafouer", - "bagage", - "baguette", - "baignade", - "balancer", - "balcon", - "baleine", - "balisage", - "bambin", - "bancaire", - "bandage", - "banlieue", - "bannière", - "banquier", - "barbier", - "baril", - "baron", - "barque", - "barrage", - "bassin", - "bastion", - "bataille", - "bateau", - "batterie", - "baudrier", - "bavarder", - "belette", - "bélier", - "belote", - "bénéfice", - "berceau", - "berger", - "berline", - "bermuda", - "besace", - "besogne", - "bétail", - "beurre", - "biberon", - "bicycle", - "bidule", - "bijou", - "bilan", - "bilingue", - "billard", - "binaire", - "biologie", - "biopsie", - "biotype", - "biscuit", - "bison", - "bistouri", - "bitume", - "bizarre", - "blafard", - "blague", - "blanchir", - "blessant", - "blinder", - "blond", - "bloquer", - "blouson", - "bobard", - "bobine", - "boire", - "boiser", - "bolide", - "bonbon", - "bondir", - "bonheur", - "bonifier", - "bonus", - "bordure", - "borne", - "botte", - "boucle", - "boueux", - "bougie", - "boulon", - "bouquin", - "bourse", - "boussole", - "boutique", - "boxeur", - "branche", - "brasier", - "brave", - "brebis", - "brèche", - "breuvage", - "bricoler", - "brigade", - "brillant", - "brioche", - "brique", - "brochure", - "broder", - "bronzer", - "brousse", - "broyeur", - "brume", - "brusque", - "brutal", - "bruyant", - "buffle", - "buisson", - "bulletin", - "bureau", - "burin", - "bustier", - "butiner", - "butoir", - "buvable", - "buvette", - "cabanon", - "cabine", - "cachette", - "cadeau", - "cadre", - "caféine", - "caillou", - "caisson", - "calculer", - "calepin", - "calibre", - "calmer", - "calomnie", - "calvaire", - "camarade", - "caméra", - "camion", - "campagne", - "canal", - "caneton", - "canon", - "cantine", - "canular", - "capable", - "caporal", - "caprice", - "capsule", - "capter", - "capuche", - "carabine", - "carbone", - "caresser", - "caribou", - "carnage", - "carotte", - "carreau", - "carton", - "cascade", - "casier", - "casque", - "cassure", - "causer", - "caution", - "cavalier", - "caverne", - "caviar", - "cédille", - "ceinture", - "céleste", - "cellule", - "cendrier", - "censurer", - "central", - "cercle", - "cérébral", - "cerise", - "cerner", - "cerveau", - "cesser", - "chagrin", - "chaise", - "chaleur", - "chambre", - "chance", - "chapitre", - "charbon", - "chasseur", - "chaton", - "chausson", - "chavirer", - "chemise", - "chenille", - "chéquier", - "chercher", - "cheval", - "chien", - "chiffre", - "chignon", - "chimère", - "chiot", - "chlorure", - "chocolat", - "choisir", - "chose", - "chouette", - "chrome", - "chute", - "cigare", - "cigogne", - "cimenter", - "cinéma", - "cintrer", - "circuler", - "cirer", - "cirque", - "citerne", - "citoyen", - "citron", - "civil", - "clairon", - "clameur", - "claquer", - "classe", - "clavier", - "client", - "cligner", - "climat", - "clivage", - "cloche", - "clonage", - "cloporte", - "cobalt", - "cobra", - "cocasse", - "cocotier", - "coder", - "codifier", - "coffre", - "cogner", - "cohésion", - "coiffer", - "coincer", - "colère", - "colibri", - "colline", - "colmater", - "colonel", - "combat", - "comédie", - "commande", - "compact", - "concert", - "conduire", - "confier", - "congeler", - "connoter", - "consonne", - "contact", - "convexe", - "copain", - "copie", - "corail", - "corbeau", - "cordage", - "corniche", - "corpus", - "correct", - "cortège", - "cosmique", - "costume", - "coton", - "coude", - "coupure", - "courage", - "couteau", - "couvrir", - "coyote", - "crabe", - "crainte", - "cravate", - "crayon", - "créature", - "créditer", - "crémeux", - "creuser", - "crevette", - "cribler", - "crier", - "cristal", - "critère", - "croire", - "croquer", - "crotale", - "crucial", - "cruel", - "crypter", - "cubique", - "cueillir", - "cuillère", - "cuisine", - "cuivre", - "culminer", - "cultiver", - "cumuler", - "cupide", - "curatif", - "curseur", - "cyanure", - "cycle", - "cylindre", - "cynique", - "daigner", - "damier", - "danger", - "danseur", - "dauphin", - "débattre", - "débiter", - "déborder", - "débrider", - "débutant", - "décaler", - "décembre", - "déchirer", - "décider", - "déclarer", - "décorer", - "décrire", - "décupler", - "dédale", - "déductif", - "déesse", - "défensif", - "défiler", - "défrayer", - "dégager", - "dégivrer", - "déglutir", - "dégrafer", - "déjeuner", - "délice", - "déloger", - "demander", - "demeurer", - "démolir", - "dénicher", - "dénouer", - "dentelle", - "dénuder", - "départ", - "dépenser", - "déphaser", - "déplacer", - "déposer", - "déranger", - "dérober", - "désastre", - "descente", - "désert", - "désigner", - "désobéir", - "dessiner", - "destrier", - "détacher", - "détester", - "détourer", - "détresse", - "devancer", - "devenir", - "deviner", - "devoir", - "diable", - "dialogue", - "diamant", - "dicter", - "différer", - "digérer", - "digital", - "digne", - "diluer", - "dimanche", - "diminuer", - "dioxyde", - "directif", - "diriger", - "discuter", - "disposer", - "dissiper", - "distance", - "divertir", - "diviser", - "docile", - "docteur", - "dogme", - "doigt", - "domaine", - "domicile", - "dompter", - "donateur", - "donjon", - "donner", - "dopamine", - "dortoir", - "dorure", - "dosage", - "doseur", - "dossier", - "dotation", - "douanier", - "double", - "douceur", - "douter", - "doyen", - "dragon", - "draper", - "dresser", - "dribbler", - "droiture", - "duperie", - "duplexe", - "durable", - "durcir", - "dynastie", - "éblouir", - "écarter", - "écharpe", - "échelle", - "éclairer", - "éclipse", - "éclore", - "écluse", - "école", - "économie", - "écorce", - "écouter", - "écraser", - "écrémer", - "écrivain", - "écrou", - "écume", - "écureuil", - "édifier", - "éduquer", - "effacer", - "effectif", - "effigie", - "effort", - "effrayer", - "effusion", - "égaliser", - "égarer", - "éjecter", - "élaborer", - "élargir", - "électron", - "élégant", - "éléphant", - "élève", - "éligible", - "élitisme", - "éloge", - "élucider", - "éluder", - "emballer", - "embellir", - "embryon", - "émeraude", - "émission", - "emmener", - "émotion", - "émouvoir", - "empereur", - "employer", - "emporter", - "emprise", - "émulsion", - "encadrer", - "enchère", - "enclave", - "encoche", - "endiguer", - "endosser", - "endroit", - "enduire", - "énergie", - "enfance", - "enfermer", - "enfouir", - "engager", - "engin", - "englober", - "énigme", - "enjamber", - "enjeu", - "enlever", - "ennemi", - "ennuyeux", - "enrichir", - "enrobage", - "enseigne", - "entasser", - "entendre", - "entier", - "entourer", - "entraver", - "énumérer", - "envahir", - "enviable", - "envoyer", - "enzyme", - "éolien", - "épaissir", - "épargne", - "épatant", - "épaule", - "épicerie", - "épidémie", - "épier", - "épilogue", - "épine", - "épisode", - "épitaphe", - "époque", - "épreuve", - "éprouver", - "épuisant", - "équerre", - "équipe", - "ériger", - "érosion", - "erreur", - "éruption", - "escalier", - "espadon", - "espèce", - "espiègle", - "espoir", - "esprit", - "esquiver", - "essayer", - "essence", - "essieu", - "essorer", - "estime", - "estomac", - "estrade", - "étagère", - "étaler", - "étanche", - "étatique", - "éteindre", - "étendoir", - "éternel", - "éthanol", - "éthique", - "ethnie", - "étirer", - "étoffer", - "étoile", - "étonnant", - "étourdir", - "étrange", - "étroit", - "étude", - "euphorie", - "évaluer", - "évasion", - "éventail", - "évidence", - "éviter", - "évolutif", - "évoquer", - "exact", - "exagérer", - "exaucer", - "exceller", - "excitant", - "exclusif", - "excuse", - "exécuter", - "exemple", - "exercer", - "exhaler", - "exhorter", - "exigence", - "exiler", - "exister", - "exotique", - "expédier", - "explorer", - "exposer", - "exprimer", - "exquis", - "extensif", - "extraire", - "exulter", - "fable", - "fabuleux", - "facette", - "facile", - "facture", - "faiblir", - "falaise", - "fameux", - "famille", - "farceur", - "farfelu", - "farine", - "farouche", - "fasciner", - "fatal", - "fatigue", - "faucon", - "fautif", - "faveur", - "favori", - "fébrile", - "féconder", - "fédérer", - "félin", - "femme", - "fémur", - "fendoir", - "féodal", - "fermer", - "féroce", - "ferveur", - "festival", - "feuille", - "feutre", - "février", - "fiasco", - "ficeler", - "fictif", - "fidèle", - "figure", - "filature", - "filetage", - "filière", - "filleul", - "filmer", - "filou", - "filtrer", - "financer", - "finir", - "fiole", - "firme", - "fissure", - "fixer", - "flairer", - "flamme", - "flasque", - "flatteur", - "fléau", - "flèche", - "fleur", - "flexion", - "flocon", - "flore", - "fluctuer", - "fluide", - "fluvial", - "folie", - "fonderie", - "fongible", - "fontaine", - "forcer", - "forgeron", - "formuler", - "fortune", - "fossile", - "foudre", - "fougère", - "fouiller", - "foulure", - "fourmi", - "fragile", - "fraise", - "franchir", - "frapper", - "frayeur", - "frégate", - "freiner", - "frelon", - "frémir", - "frénésie", - "frère", - "friable", - "friction", - "frisson", - "frivole", - "froid", - "fromage", - "frontal", - "frotter", - "fruit", - "fugitif", - "fuite", - "fureur", - "furieux", - "furtif", - "fusion", - "futur", - "gagner", - "galaxie", - "galerie", - "gambader", - "garantir", - "gardien", - "garnir", - "garrigue", - "gazelle", - "gazon", - "géant", - "gélatine", - "gélule", - "gendarme", - "général", - "génie", - "genou", - "gentil", - "géologie", - "géomètre", - "géranium", - "germe", - "gestuel", - "geyser", - "gibier", - "gicler", - "girafe", - "givre", - "glace", - "glaive", - "glisser", - "globe", - "gloire", - "glorieux", - "golfeur", - "gomme", - "gonfler", - "gorge", - "gorille", - "goudron", - "gouffre", - "goulot", - "goupille", - "gourmand", - "goutte", - "graduel", - "graffiti", - "graine", - "grand", - "grappin", - "gratuit", - "gravir", - "grenat", - "griffure", - "griller", - "grimper", - "grogner", - "gronder", - "grotte", - "groupe", - "gruger", - "grutier", - "gruyère", - "guépard", - "guerrier", - "guide", - "guimauve", - "guitare", - "gustatif", - "gymnaste", - "gyrostat", - "habitude", - "hachoir", - "halte", - "hameau", - "hangar", - "hanneton", - "haricot", - "harmonie", - "harpon", - "hasard", - "hélium", - "hématome", - "herbe", - "hérisson", - "hermine", - "héron", - "hésiter", - "heureux", - "hiberner", - "hibou", - "hilarant", - "histoire", - "hiver", - "homard", - "hommage", - "homogène", - "honneur", - "honorer", - "honteux", - "horde", - "horizon", - "horloge", - "hormone", - "horrible", - "houleux", - "housse", - "hublot", - "huileux", - "humain", - "humble", - "humide", - "humour", - "hurler", - "hydromel", - "hygiène", - "hymne", - "hypnose", - "idylle", - "ignorer", - "iguane", - "illicite", - "illusion", - "image", - "imbiber", - "imiter", - "immense", - "immobile", - "immuable", - "impact", - "impérial", - "implorer", - "imposer", - "imprimer", - "imputer", - "incarner", - "incendie", - "incident", - "incliner", - "incolore", - "indexer", - "indice", - "inductif", - "inédit", - "ineptie", - "inexact", - "infini", - "infliger", - "informer", - "infusion", - "ingérer", - "inhaler", - "inhiber", - "injecter", - "injure", - "innocent", - "inoculer", - "inonder", - "inscrire", - "insecte", - "insigne", - "insolite", - "inspirer", - "instinct", - "insulter", - "intact", - "intense", - "intime", - "intrigue", - "intuitif", - "inutile", - "invasion", - "inventer", - "inviter", - "invoquer", - "ironique", - "irradier", - "irréel", - "irriter", - "isoler", - "ivoire", - "ivresse", - "jaguar", - "jaillir", - "jambe", - "janvier", - "jardin", - "jauger", - "jaune", - "javelot", - "jetable", - "jeton", - "jeudi", - "jeunesse", - "joindre", - "joncher", - "jongler", - "joueur", - "jouissif", - "journal", - "jovial", - "joyau", - "joyeux", - "jubiler", - "jugement", - "junior", - "jupon", - "juriste", - "justice", - "juteux", - "juvénile", - "kayak", - "kimono", - "kiosque", - "label", - "labial", - "labourer", - "lacérer", - "lactose", - "lagune", - "laine", - "laisser", - "laitier", - "lambeau", - "lamelle", - "lampe", - "lanceur", - "langage", - "lanterne", - "lapin", - "largeur", - "larme", - "laurier", - "lavabo", - "lavoir", - "lecture", - "légal", - "léger", - "légume", - "lessive", - "lettre", - "levier", - "lexique", - "lézard", - "liasse", - "libérer", - "libre", - "licence", - "licorne", - "liège", - "lièvre", - "ligature", - "ligoter", - "ligue", - "limer", - "limite", - "limonade", - "limpide", - "linéaire", - "lingot", - "lionceau", - "liquide", - "lisière", - "lister", - "lithium", - "litige", - "littoral", - "livreur", - "logique", - "lointain", - "loisir", - "lombric", - "loterie", - "louer", - "lourd", - "loutre", - "louve", - "loyal", - "lubie", - "lucide", - "lucratif", - "lueur", - "lugubre", - "luisant", - "lumière", - "lunaire", - "lundi", - "luron", - "lutter", - "luxueux", - "machine", - "magasin", - "magenta", - "magique", - "maigre", - "maillon", - "maintien", - "mairie", - "maison", - "majorer", - "malaxer", - "maléfice", - "malheur", - "malice", - "mallette", - "mammouth", - "mandater", - "maniable", - "manquant", - "manteau", - "manuel", - "marathon", - "marbre", - "marchand", - "mardi", - "maritime", - "marqueur", - "marron", - "marteler", - "mascotte", - "massif", - "matériel", - "matière", - "matraque", - "maudire", - "maussade", - "mauve", - "maximal", - "méchant", - "méconnu", - "médaille", - "médecin", - "méditer", - "méduse", - "meilleur", - "mélange", - "mélodie", - "membre", - "mémoire", - "menacer", - "mener", - "menhir", - "mensonge", - "mentor", - "mercredi", - "mérite", - "merle", - "messager", - "mesure", - "métal", - "météore", - "méthode", - "métier", - "meuble", - "miauler", - "microbe", - "miette", - "mignon", - "migrer", - "milieu", - "million", - "mimique", - "mince", - "minéral", - "minimal", - "minorer", - "minute", - "miracle", - "miroiter", - "missile", - "mixte", - "mobile", - "moderne", - "moelleux", - "mondial", - "moniteur", - "monnaie", - "monotone", - "monstre", - "montagne", - "monument", - "moqueur", - "morceau", - "morsure", - "mortier", - "moteur", - "motif", - "mouche", - "moufle", - "moulin", - "mousson", - "mouton", - "mouvant", - "multiple", - "munition", - "muraille", - "murène", - "murmure", - "muscle", - "muséum", - "musicien", - "mutation", - "muter", - "mutuel", - "myriade", - "myrtille", - "mystère", - "mythique", - "nageur", - "nappe", - "narquois", - "narrer", - "natation", - "nation", - "nature", - "naufrage", - "nautique", - "navire", - "nébuleux", - "nectar", - "néfaste", - "négation", - "négliger", - "négocier", - "neige", - "nerveux", - "nettoyer", - "neurone", - "neutron", - "neveu", - "niche", - "nickel", - "nitrate", - "niveau", - "noble", - "nocif", - "nocturne", - "noirceur", - "noisette", - "nomade", - "nombreux", - "nommer", - "normatif", - "notable", - "notifier", - "notoire", - "nourrir", - "nouveau", - "novateur", - "novembre", - "novice", - "nuage", - "nuancer", - "nuire", - "nuisible", - "numéro", - "nuptial", - "nuque", - "nutritif", - "obéir", - "objectif", - "obliger", - "obscur", - "observer", - "obstacle", - "obtenir", - "obturer", - "occasion", - "occuper", - "océan", - "octobre", - "octroyer", - "octupler", - "oculaire", - "odeur", - "odorant", - "offenser", - "officier", - "offrir", - "ogive", - "oiseau", - "oisillon", - "olfactif", - "olivier", - "ombrage", - "omettre", - "onctueux", - "onduler", - "onéreux", - "onirique", - "opale", - "opaque", - "opérer", - "opinion", - "opportun", - "opprimer", - "opter", - "optique", - "orageux", - "orange", - "orbite", - "ordonner", - "oreille", - "organe", - "orgueil", - "orifice", - "ornement", - "orque", - "ortie", - "osciller", - "osmose", - "ossature", - "otarie", - "ouragan", - "ourson", - "outil", - "outrager", - "ouvrage", - "ovation", - "oxyde", - "oxygène", - "ozone", - "paisible", - "palace", - "palmarès", - "palourde", - "palper", - "panache", - "panda", - "pangolin", - "paniquer", - "panneau", - "panorama", - "pantalon", - "papaye", - "papier", - "papoter", - "papyrus", - "paradoxe", - "parcelle", - "paresse", - "parfumer", - "parler", - "parole", - "parrain", - "parsemer", - "partager", - "parure", - "parvenir", - "passion", - "pastèque", - "paternel", - "patience", - "patron", - "pavillon", - "pavoiser", - "payer", - "paysage", - "peigne", - "peintre", - "pelage", - "pélican", - "pelle", - "pelouse", - "peluche", - "pendule", - "pénétrer", - "pénible", - "pensif", - "pénurie", - "pépite", - "péplum", - "perdrix", - "perforer", - "période", - "permuter", - "perplexe", - "persil", - "perte", - "peser", - "pétale", - "petit", - "pétrir", - "peuple", - "pharaon", - "phobie", - "phoque", - "photon", - "phrase", - "physique", - "piano", - "pictural", - "pièce", - "pierre", - "pieuvre", - "pilote", - "pinceau", - "pipette", - "piquer", - "pirogue", - "piscine", - "piston", - "pivoter", - "pixel", - "pizza", - "placard", - "plafond", - "plaisir", - "planer", - "plaque", - "plastron", - "plateau", - "pleurer", - "plexus", - "pliage", - "plomb", - "plonger", - "pluie", - "plumage", - "pochette", - "poésie", - "poète", - "pointe", - "poirier", - "poisson", - "poivre", - "polaire", - "policier", - "pollen", - "polygone", - "pommade", - "pompier", - "ponctuel", - "pondérer", - "poney", - "portique", - "position", - "posséder", - "posture", - "potager", - "poteau", - "potion", - "pouce", - "poulain", - "poumon", - "pourpre", - "poussin", - "pouvoir", - "prairie", - "pratique", - "précieux", - "prédire", - "préfixe", - "prélude", - "prénom", - "présence", - "prétexte", - "prévoir", - "primitif", - "prince", - "prison", - "priver", - "problème", - "procéder", - "prodige", - "profond", - "progrès", - "proie", - "projeter", - "prologue", - "promener", - "propre", - "prospère", - "protéger", - "prouesse", - "proverbe", - "prudence", - "pruneau", - "psychose", - "public", - "puceron", - "puiser", - "pulpe", - "pulsar", - "punaise", - "punitif", - "pupitre", - "purifier", - "puzzle", - "pyramide", - "quasar", - "querelle", - "question", - "quiétude", - "quitter", - "quotient", - "racine", - "raconter", - "radieux", - "ragondin", - "raideur", - "raisin", - "ralentir", - "rallonge", - "ramasser", - "rapide", - "rasage", - "ratisser", - "ravager", - "ravin", - "rayonner", - "réactif", - "réagir", - "réaliser", - "réanimer", - "recevoir", - "réciter", - "réclamer", - "récolter", - "recruter", - "reculer", - "recycler", - "rédiger", - "redouter", - "refaire", - "réflexe", - "réformer", - "refrain", - "refuge", - "régalien", - "région", - "réglage", - "régulier", - "réitérer", - "rejeter", - "rejouer", - "relatif", - "relever", - "relief", - "remarque", - "remède", - "remise", - "remonter", - "remplir", - "remuer", - "renard", - "renfort", - "renifler", - "renoncer", - "rentrer", - "renvoi", - "replier", - "reporter", - "reprise", - "reptile", - "requin", - "réserve", - "résineux", - "résoudre", - "respect", - "rester", - "résultat", - "rétablir", - "retenir", - "réticule", - "retomber", - "retracer", - "réunion", - "réussir", - "revanche", - "revivre", - "révolte", - "révulsif", - "richesse", - "rideau", - "rieur", - "rigide", - "rigoler", - "rincer", - "riposter", - "risible", - "risque", - "rituel", - "rival", - "rivière", - "rocheux", - "romance", - "rompre", - "ronce", - "rondin", - "roseau", - "rosier", - "rotatif", - "rotor", - "rotule", - "rouge", - "rouille", - "rouleau", - "routine", - "royaume", - "ruban", - "rubis", - "ruche", - "ruelle", - "rugueux", - "ruiner", - "ruisseau", - "ruser", - "rustique", - "rythme", - "sabler", - "saboter", - "sabre", - "sacoche", - "safari", - "sagesse", - "saisir", - "salade", - "salive", - "salon", - "saluer", - "samedi", - "sanction", - "sanglier", - "sarcasme", - "sardine", - "saturer", - "saugrenu", - "saumon", - "sauter", - "sauvage", - "savant", - "savonner", - "scalpel", - "scandale", - "scélérat", - "scénario", - "sceptre", - "schéma", - "science", - "scinder", - "score", - "scrutin", - "sculpter", - "séance", - "sécable", - "sécher", - "secouer", - "sécréter", - "sédatif", - "séduire", - "seigneur", - "séjour", - "sélectif", - "semaine", - "sembler", - "semence", - "séminal", - "sénateur", - "sensible", - "sentence", - "séparer", - "séquence", - "serein", - "sergent", - "sérieux", - "serrure", - "sérum", - "service", - "sésame", - "sévir", - "sevrage", - "sextuple", - "sidéral", - "siècle", - "siéger", - "siffler", - "sigle", - "signal", - "silence", - "silicium", - "simple", - "sincère", - "sinistre", - "siphon", - "sirop", - "sismique", - "situer", - "skier", - "social", - "socle", - "sodium", - "soigneux", - "soldat", - "soleil", - "solitude", - "soluble", - "sombre", - "sommeil", - "somnoler", - "sonde", - "songeur", - "sonnette", - "sonore", - "sorcier", - "sortir", - "sosie", - "sottise", - "soucieux", - "soudure", - "souffle", - "soulever", - "soupape", - "source", - "soutirer", - "souvenir", - "spacieux", - "spatial", - "spécial", - "sphère", - "spiral", - "stable", - "station", - "sternum", - "stimulus", - "stipuler", - "strict", - "studieux", - "stupeur", - "styliste", - "sublime", - "substrat", - "subtil", - "subvenir", - "succès", - "sucre", - "suffixe", - "suggérer", - "suiveur", - "sulfate", - "superbe", - "supplier", - "surface", - "suricate", - "surmener", - "surprise", - "sursaut", - "survie", - "suspect", - "syllabe", - "symbole", - "symétrie", - "synapse", - "syntaxe", - "système", - "tabac", - "tablier", - "tactile", - "tailler", - "talent", - "talisman", - "talonner", - "tambour", - "tamiser", - "tangible", - "tapis", - "taquiner", - "tarder", - "tarif", - "tartine", - "tasse", - "tatami", - "tatouage", - "taupe", - "taureau", - "taxer", - "témoin", - "temporel", - "tenaille", - "tendre", - "teneur", - "tenir", - "tension", - "terminer", - "terne", - "terrible", - "tétine", - "texte", - "thème", - "théorie", - "thérapie", - "thorax", - "tibia", - "tiède", - "timide", - "tirelire", - "tiroir", - "tissu", - "titane", - "titre", - "tituber", - "toboggan", - "tolérant", - "tomate", - "tonique", - "tonneau", - "toponyme", - "torche", - "tordre", - "tornade", - "torpille", - "torrent", - "torse", - "tortue", - "totem", - "toucher", - "tournage", - "tousser", - "toxine", - "traction", - "trafic", - "tragique", - "trahir", - "train", - "trancher", - "travail", - "trèfle", - "tremper", - "trésor", - "treuil", - "triage", - "tribunal", - "tricoter", - "trilogie", - "triomphe", - "tripler", - "triturer", - "trivial", - "trombone", - "tronc", - "tropical", - "troupeau", - "tuile", - "tulipe", - "tumulte", - "tunnel", - "turbine", - "tuteur", - "tutoyer", - "tuyau", - "tympan", - "typhon", - "typique", - "tyran", - "ubuesque", - "ultime", - "ultrason", - "unanime", - "unifier", - "union", - "unique", - "unitaire", - "univers", - "uranium", - "urbain", - "urticant", - "usage", - "usine", - "usuel", - "usure", - "utile", - "utopie", - "vacarme", - "vaccin", - "vagabond", - "vague", - "vaillant", - "vaincre", - "vaisseau", - "valable", - "valise", - "vallon", - "valve", - "vampire", - "vanille", - "vapeur", - "varier", - "vaseux", - "vassal", - "vaste", - "vecteur", - "vedette", - "végétal", - "véhicule", - "veinard", - "véloce", - "vendredi", - "vénérer", - "venger", - "venimeux", - "ventouse", - "verdure", - "vérin", - "vernir", - "verrou", - "verser", - "vertu", - "veston", - "vétéran", - "vétuste", - "vexant", - "vexer", - "viaduc", - "viande", - "victoire", - "vidange", - "vidéo", - "vignette", - "vigueur", - "vilain", - "village", - "vinaigre", - "violon", - "vipère", - "virement", - "virtuose", - "virus", - "visage", - "viseur", - "vision", - "visqueux", - "visuel", - "vital", - "vitesse", - "viticole", - "vitrine", - "vivace", - "vivipare", - "vocation", - "voguer", - "voile", - "voisin", - "voiture", - "volaille", - "volcan", - "voltiger", - "volume", - "vorace", - "vortex", - "voter", - "vouloir", - "voyage", - "voyelle", - "wagon", - "xénon", - "yacht", - "zèbre", - "zénith", - "zeste", - "zoologie" -]; +export const wordlist: string[] = `abaisser +abandon +abdiquer +abeille +abolir +aborder +aboutir +aboyer +abrasif +abreuver +abriter +abroger +abrupt +absence +absolu +absurde +abusif +abyssal +académie +acajou +acarien +accabler +accepter +acclamer +accolade +accroche +accuser +acerbe +achat +acheter +aciduler +acier +acompte +acquérir +acronyme +acteur +actif +actuel +adepte +adéquat +adhésif +adjectif +adjuger +admettre +admirer +adopter +adorer +adoucir +adresse +adroit +adulte +adverbe +aérer +aéronef +affaire +affecter +affiche +affreux +affubler +agacer +agencer +agile +agiter +agrafer +agréable +agrume +aider +aiguille +ailier +aimable +aisance +ajouter +ajuster +alarmer +alchimie +alerte +algèbre +algue +aliéner +aliment +alléger +alliage +allouer +allumer +alourdir +alpaga +altesse +alvéole +amateur +ambigu +ambre +aménager +amertume +amidon +amiral +amorcer +amour +amovible +amphibie +ampleur +amusant +analyse +anaphore +anarchie +anatomie +ancien +anéantir +angle +angoisse +anguleux +animal +annexer +annonce +annuel +anodin +anomalie +anonyme +anormal +antenne +antidote +anxieux +apaiser +apéritif +aplanir +apologie +appareil +appeler +apporter +appuyer +aquarium +aqueduc +arbitre +arbuste +ardeur +ardoise +argent +arlequin +armature +armement +armoire +armure +arpenter +arracher +arriver +arroser +arsenic +artériel +article +aspect +asphalte +aspirer +assaut +asservir +assiette +associer +assurer +asticot +astre +astuce +atelier +atome +atrium +atroce +attaque +attentif +attirer +attraper +aubaine +auberge +audace +audible +augurer +aurore +automne +autruche +avaler +avancer +avarice +avenir +averse +aveugle +aviateur +avide +avion +aviser +avoine +avouer +avril +axial +axiome +badge +bafouer +bagage +baguette +baignade +balancer +balcon +baleine +balisage +bambin +bancaire +bandage +banlieue +bannière +banquier +barbier +baril +baron +barque +barrage +bassin +bastion +bataille +bateau +batterie +baudrier +bavarder +belette +bélier +belote +bénéfice +berceau +berger +berline +bermuda +besace +besogne +bétail +beurre +biberon +bicycle +bidule +bijou +bilan +bilingue +billard +binaire +biologie +biopsie +biotype +biscuit +bison +bistouri +bitume +bizarre +blafard +blague +blanchir +blessant +blinder +blond +bloquer +blouson +bobard +bobine +boire +boiser +bolide +bonbon +bondir +bonheur +bonifier +bonus +bordure +borne +botte +boucle +boueux +bougie +boulon +bouquin +bourse +boussole +boutique +boxeur +branche +brasier +brave +brebis +brèche +breuvage +bricoler +brigade +brillant +brioche +brique +brochure +broder +bronzer +brousse +broyeur +brume +brusque +brutal +bruyant +buffle +buisson +bulletin +bureau +burin +bustier +butiner +butoir +buvable +buvette +cabanon +cabine +cachette +cadeau +cadre +caféine +caillou +caisson +calculer +calepin +calibre +calmer +calomnie +calvaire +camarade +caméra +camion +campagne +canal +caneton +canon +cantine +canular +capable +caporal +caprice +capsule +capter +capuche +carabine +carbone +caresser +caribou +carnage +carotte +carreau +carton +cascade +casier +casque +cassure +causer +caution +cavalier +caverne +caviar +cédille +ceinture +céleste +cellule +cendrier +censurer +central +cercle +cérébral +cerise +cerner +cerveau +cesser +chagrin +chaise +chaleur +chambre +chance +chapitre +charbon +chasseur +chaton +chausson +chavirer +chemise +chenille +chéquier +chercher +cheval +chien +chiffre +chignon +chimère +chiot +chlorure +chocolat +choisir +chose +chouette +chrome +chute +cigare +cigogne +cimenter +cinéma +cintrer +circuler +cirer +cirque +citerne +citoyen +citron +civil +clairon +clameur +claquer +classe +clavier +client +cligner +climat +clivage +cloche +clonage +cloporte +cobalt +cobra +cocasse +cocotier +coder +codifier +coffre +cogner +cohésion +coiffer +coincer +colère +colibri +colline +colmater +colonel +combat +comédie +commande +compact +concert +conduire +confier +congeler +connoter +consonne +contact +convexe +copain +copie +corail +corbeau +cordage +corniche +corpus +correct +cortège +cosmique +costume +coton +coude +coupure +courage +couteau +couvrir +coyote +crabe +crainte +cravate +crayon +créature +créditer +crémeux +creuser +crevette +cribler +crier +cristal +critère +croire +croquer +crotale +crucial +cruel +crypter +cubique +cueillir +cuillère +cuisine +cuivre +culminer +cultiver +cumuler +cupide +curatif +curseur +cyanure +cycle +cylindre +cynique +daigner +damier +danger +danseur +dauphin +débattre +débiter +déborder +débrider +débutant +décaler +décembre +déchirer +décider +déclarer +décorer +décrire +décupler +dédale +déductif +déesse +défensif +défiler +défrayer +dégager +dégivrer +déglutir +dégrafer +déjeuner +délice +déloger +demander +demeurer +démolir +dénicher +dénouer +dentelle +dénuder +départ +dépenser +déphaser +déplacer +déposer +déranger +dérober +désastre +descente +désert +désigner +désobéir +dessiner +destrier +détacher +détester +détourer +détresse +devancer +devenir +deviner +devoir +diable +dialogue +diamant +dicter +différer +digérer +digital +digne +diluer +dimanche +diminuer +dioxyde +directif +diriger +discuter +disposer +dissiper +distance +divertir +diviser +docile +docteur +dogme +doigt +domaine +domicile +dompter +donateur +donjon +donner +dopamine +dortoir +dorure +dosage +doseur +dossier +dotation +douanier +double +douceur +douter +doyen +dragon +draper +dresser +dribbler +droiture +duperie +duplexe +durable +durcir +dynastie +éblouir +écarter +écharpe +échelle +éclairer +éclipse +éclore +écluse +école +économie +écorce +écouter +écraser +écrémer +écrivain +écrou +écume +écureuil +édifier +éduquer +effacer +effectif +effigie +effort +effrayer +effusion +égaliser +égarer +éjecter +élaborer +élargir +électron +élégant +éléphant +élève +éligible +élitisme +éloge +élucider +éluder +emballer +embellir +embryon +émeraude +émission +emmener +émotion +émouvoir +empereur +employer +emporter +emprise +émulsion +encadrer +enchère +enclave +encoche +endiguer +endosser +endroit +enduire +énergie +enfance +enfermer +enfouir +engager +engin +englober +énigme +enjamber +enjeu +enlever +ennemi +ennuyeux +enrichir +enrobage +enseigne +entasser +entendre +entier +entourer +entraver +énumérer +envahir +enviable +envoyer +enzyme +éolien +épaissir +épargne +épatant +épaule +épicerie +épidémie +épier +épilogue +épine +épisode +épitaphe +époque +épreuve +éprouver +épuisant +équerre +équipe +ériger +érosion +erreur +éruption +escalier +espadon +espèce +espiègle +espoir +esprit +esquiver +essayer +essence +essieu +essorer +estime +estomac +estrade +étagère +étaler +étanche +étatique +éteindre +étendoir +éternel +éthanol +éthique +ethnie +étirer +étoffer +étoile +étonnant +étourdir +étrange +étroit +étude +euphorie +évaluer +évasion +éventail +évidence +éviter +évolutif +évoquer +exact +exagérer +exaucer +exceller +excitant +exclusif +excuse +exécuter +exemple +exercer +exhaler +exhorter +exigence +exiler +exister +exotique +expédier +explorer +exposer +exprimer +exquis +extensif +extraire +exulter +fable +fabuleux +facette +facile +facture +faiblir +falaise +fameux +famille +farceur +farfelu +farine +farouche +fasciner +fatal +fatigue +faucon +fautif +faveur +favori +fébrile +féconder +fédérer +félin +femme +fémur +fendoir +féodal +fermer +féroce +ferveur +festival +feuille +feutre +février +fiasco +ficeler +fictif +fidèle +figure +filature +filetage +filière +filleul +filmer +filou +filtrer +financer +finir +fiole +firme +fissure +fixer +flairer +flamme +flasque +flatteur +fléau +flèche +fleur +flexion +flocon +flore +fluctuer +fluide +fluvial +folie +fonderie +fongible +fontaine +forcer +forgeron +formuler +fortune +fossile +foudre +fougère +fouiller +foulure +fourmi +fragile +fraise +franchir +frapper +frayeur +frégate +freiner +frelon +frémir +frénésie +frère +friable +friction +frisson +frivole +froid +fromage +frontal +frotter +fruit +fugitif +fuite +fureur +furieux +furtif +fusion +futur +gagner +galaxie +galerie +gambader +garantir +gardien +garnir +garrigue +gazelle +gazon +géant +gélatine +gélule +gendarme +général +génie +genou +gentil +géologie +géomètre +géranium +germe +gestuel +geyser +gibier +gicler +girafe +givre +glace +glaive +glisser +globe +gloire +glorieux +golfeur +gomme +gonfler +gorge +gorille +goudron +gouffre +goulot +goupille +gourmand +goutte +graduel +graffiti +graine +grand +grappin +gratuit +gravir +grenat +griffure +griller +grimper +grogner +gronder +grotte +groupe +gruger +grutier +gruyère +guépard +guerrier +guide +guimauve +guitare +gustatif +gymnaste +gyrostat +habitude +hachoir +halte +hameau +hangar +hanneton +haricot +harmonie +harpon +hasard +hélium +hématome +herbe +hérisson +hermine +héron +hésiter +heureux +hiberner +hibou +hilarant +histoire +hiver +homard +hommage +homogène +honneur +honorer +honteux +horde +horizon +horloge +hormone +horrible +houleux +housse +hublot +huileux +humain +humble +humide +humour +hurler +hydromel +hygiène +hymne +hypnose +idylle +ignorer +iguane +illicite +illusion +image +imbiber +imiter +immense +immobile +immuable +impact +impérial +implorer +imposer +imprimer +imputer +incarner +incendie +incident +incliner +incolore +indexer +indice +inductif +inédit +ineptie +inexact +infini +infliger +informer +infusion +ingérer +inhaler +inhiber +injecter +injure +innocent +inoculer +inonder +inscrire +insecte +insigne +insolite +inspirer +instinct +insulter +intact +intense +intime +intrigue +intuitif +inutile +invasion +inventer +inviter +invoquer +ironique +irradier +irréel +irriter +isoler +ivoire +ivresse +jaguar +jaillir +jambe +janvier +jardin +jauger +jaune +javelot +jetable +jeton +jeudi +jeunesse +joindre +joncher +jongler +joueur +jouissif +journal +jovial +joyau +joyeux +jubiler +jugement +junior +jupon +juriste +justice +juteux +juvénile +kayak +kimono +kiosque +label +labial +labourer +lacérer +lactose +lagune +laine +laisser +laitier +lambeau +lamelle +lampe +lanceur +langage +lanterne +lapin +largeur +larme +laurier +lavabo +lavoir +lecture +légal +léger +légume +lessive +lettre +levier +lexique +lézard +liasse +libérer +libre +licence +licorne +liège +lièvre +ligature +ligoter +ligue +limer +limite +limonade +limpide +linéaire +lingot +lionceau +liquide +lisière +lister +lithium +litige +littoral +livreur +logique +lointain +loisir +lombric +loterie +louer +lourd +loutre +louve +loyal +lubie +lucide +lucratif +lueur +lugubre +luisant +lumière +lunaire +lundi +luron +lutter +luxueux +machine +magasin +magenta +magique +maigre +maillon +maintien +mairie +maison +majorer +malaxer +maléfice +malheur +malice +mallette +mammouth +mandater +maniable +manquant +manteau +manuel +marathon +marbre +marchand +mardi +maritime +marqueur +marron +marteler +mascotte +massif +matériel +matière +matraque +maudire +maussade +mauve +maximal +méchant +méconnu +médaille +médecin +méditer +méduse +meilleur +mélange +mélodie +membre +mémoire +menacer +mener +menhir +mensonge +mentor +mercredi +mérite +merle +messager +mesure +métal +météore +méthode +métier +meuble +miauler +microbe +miette +mignon +migrer +milieu +million +mimique +mince +minéral +minimal +minorer +minute +miracle +miroiter +missile +mixte +mobile +moderne +moelleux +mondial +moniteur +monnaie +monotone +monstre +montagne +monument +moqueur +morceau +morsure +mortier +moteur +motif +mouche +moufle +moulin +mousson +mouton +mouvant +multiple +munition +muraille +murène +murmure +muscle +muséum +musicien +mutation +muter +mutuel +myriade +myrtille +mystère +mythique +nageur +nappe +narquois +narrer +natation +nation +nature +naufrage +nautique +navire +nébuleux +nectar +néfaste +négation +négliger +négocier +neige +nerveux +nettoyer +neurone +neutron +neveu +niche +nickel +nitrate +niveau +noble +nocif +nocturne +noirceur +noisette +nomade +nombreux +nommer +normatif +notable +notifier +notoire +nourrir +nouveau +novateur +novembre +novice +nuage +nuancer +nuire +nuisible +numéro +nuptial +nuque +nutritif +obéir +objectif +obliger +obscur +observer +obstacle +obtenir +obturer +occasion +occuper +océan +octobre +octroyer +octupler +oculaire +odeur +odorant +offenser +officier +offrir +ogive +oiseau +oisillon +olfactif +olivier +ombrage +omettre +onctueux +onduler +onéreux +onirique +opale +opaque +opérer +opinion +opportun +opprimer +opter +optique +orageux +orange +orbite +ordonner +oreille +organe +orgueil +orifice +ornement +orque +ortie +osciller +osmose +ossature +otarie +ouragan +ourson +outil +outrager +ouvrage +ovation +oxyde +oxygène +ozone +paisible +palace +palmarès +palourde +palper +panache +panda +pangolin +paniquer +panneau +panorama +pantalon +papaye +papier +papoter +papyrus +paradoxe +parcelle +paresse +parfumer +parler +parole +parrain +parsemer +partager +parure +parvenir +passion +pastèque +paternel +patience +patron +pavillon +pavoiser +payer +paysage +peigne +peintre +pelage +pélican +pelle +pelouse +peluche +pendule +pénétrer +pénible +pensif +pénurie +pépite +péplum +perdrix +perforer +période +permuter +perplexe +persil +perte +peser +pétale +petit +pétrir +peuple +pharaon +phobie +phoque +photon +phrase +physique +piano +pictural +pièce +pierre +pieuvre +pilote +pinceau +pipette +piquer +pirogue +piscine +piston +pivoter +pixel +pizza +placard +plafond +plaisir +planer +plaque +plastron +plateau +pleurer +plexus +pliage +plomb +plonger +pluie +plumage +pochette +poésie +poète +pointe +poirier +poisson +poivre +polaire +policier +pollen +polygone +pommade +pompier +ponctuel +pondérer +poney +portique +position +posséder +posture +potager +poteau +potion +pouce +poulain +poumon +pourpre +poussin +pouvoir +prairie +pratique +précieux +prédire +préfixe +prélude +prénom +présence +prétexte +prévoir +primitif +prince +prison +priver +problème +procéder +prodige +profond +progrès +proie +projeter +prologue +promener +propre +prospère +protéger +prouesse +proverbe +prudence +pruneau +psychose +public +puceron +puiser +pulpe +pulsar +punaise +punitif +pupitre +purifier +puzzle +pyramide +quasar +querelle +question +quiétude +quitter +quotient +racine +raconter +radieux +ragondin +raideur +raisin +ralentir +rallonge +ramasser +rapide +rasage +ratisser +ravager +ravin +rayonner +réactif +réagir +réaliser +réanimer +recevoir +réciter +réclamer +récolter +recruter +reculer +recycler +rédiger +redouter +refaire +réflexe +réformer +refrain +refuge +régalien +région +réglage +régulier +réitérer +rejeter +rejouer +relatif +relever +relief +remarque +remède +remise +remonter +remplir +remuer +renard +renfort +renifler +renoncer +rentrer +renvoi +replier +reporter +reprise +reptile +requin +réserve +résineux +résoudre +respect +rester +résultat +rétablir +retenir +réticule +retomber +retracer +réunion +réussir +revanche +revivre +révolte +révulsif +richesse +rideau +rieur +rigide +rigoler +rincer +riposter +risible +risque +rituel +rival +rivière +rocheux +romance +rompre +ronce +rondin +roseau +rosier +rotatif +rotor +rotule +rouge +rouille +rouleau +routine +royaume +ruban +rubis +ruche +ruelle +rugueux +ruiner +ruisseau +ruser +rustique +rythme +sabler +saboter +sabre +sacoche +safari +sagesse +saisir +salade +salive +salon +saluer +samedi +sanction +sanglier +sarcasme +sardine +saturer +saugrenu +saumon +sauter +sauvage +savant +savonner +scalpel +scandale +scélérat +scénario +sceptre +schéma +science +scinder +score +scrutin +sculpter +séance +sécable +sécher +secouer +sécréter +sédatif +séduire +seigneur +séjour +sélectif +semaine +sembler +semence +séminal +sénateur +sensible +sentence +séparer +séquence +serein +sergent +sérieux +serrure +sérum +service +sésame +sévir +sevrage +sextuple +sidéral +siècle +siéger +siffler +sigle +signal +silence +silicium +simple +sincère +sinistre +siphon +sirop +sismique +situer +skier +social +socle +sodium +soigneux +soldat +soleil +solitude +soluble +sombre +sommeil +somnoler +sonde +songeur +sonnette +sonore +sorcier +sortir +sosie +sottise +soucieux +soudure +souffle +soulever +soupape +source +soutirer +souvenir +spacieux +spatial +spécial +sphère +spiral +stable +station +sternum +stimulus +stipuler +strict +studieux +stupeur +styliste +sublime +substrat +subtil +subvenir +succès +sucre +suffixe +suggérer +suiveur +sulfate +superbe +supplier +surface +suricate +surmener +surprise +sursaut +survie +suspect +syllabe +symbole +symétrie +synapse +syntaxe +système +tabac +tablier +tactile +tailler +talent +talisman +talonner +tambour +tamiser +tangible +tapis +taquiner +tarder +tarif +tartine +tasse +tatami +tatouage +taupe +taureau +taxer +témoin +temporel +tenaille +tendre +teneur +tenir +tension +terminer +terne +terrible +tétine +texte +thème +théorie +thérapie +thorax +tibia +tiède +timide +tirelire +tiroir +tissu +titane +titre +tituber +toboggan +tolérant +tomate +tonique +tonneau +toponyme +torche +tordre +tornade +torpille +torrent +torse +tortue +totem +toucher +tournage +tousser +toxine +traction +trafic +tragique +trahir +train +trancher +travail +trèfle +tremper +trésor +treuil +triage +tribunal +tricoter +trilogie +triomphe +tripler +triturer +trivial +trombone +tronc +tropical +troupeau +tuile +tulipe +tumulte +tunnel +turbine +tuteur +tutoyer +tuyau +tympan +typhon +typique +tyran +ubuesque +ultime +ultrason +unanime +unifier +union +unique +unitaire +univers +uranium +urbain +urticant +usage +usine +usuel +usure +utile +utopie +vacarme +vaccin +vagabond +vague +vaillant +vaincre +vaisseau +valable +valise +vallon +valve +vampire +vanille +vapeur +varier +vaseux +vassal +vaste +vecteur +vedette +végétal +véhicule +veinard +véloce +vendredi +vénérer +venger +venimeux +ventouse +verdure +vérin +vernir +verrou +verser +vertu +veston +vétéran +vétuste +vexant +vexer +viaduc +viande +victoire +vidange +vidéo +vignette +vigueur +vilain +village +vinaigre +violon +vipère +virement +virtuose +virus +visage +viseur +vision +visqueux +visuel +vital +vitesse +viticole +vitrine +vivace +vivipare +vocation +voguer +voile +voisin +voiture +volaille +volcan +voltiger +volume +vorace +vortex +voter +vouloir +voyage +voyelle +wagon +xénon +yacht +zèbre +zénith +zeste +zoologie`.split("\n"); diff --git a/src/bip39/wordlists/italian.ts b/src/bip39/wordlists/italian.ts index 147f5c0..fef0eea 100644 --- a/src/bip39/wordlists/italian.ts +++ b/src/bip39/wordlists/italian.ts @@ -1,2050 +1,2048 @@ -export const wordlist: string[] = [ - "abaco", - "abbaglio", - "abbinato", - "abete", - "abisso", - "abolire", - "abrasivo", - "abrogato", - "accadere", - "accenno", - "accusato", - "acetone", - "achille", - "acido", - "acqua", - "acre", - "acrilico", - "acrobata", - "acuto", - "adagio", - "addebito", - "addome", - "adeguato", - "aderire", - "adipe", - "adottare", - "adulare", - "affabile", - "affetto", - "affisso", - "affranto", - "aforisma", - "afoso", - "africano", - "agave", - "agente", - "agevole", - "aggancio", - "agire", - "agitare", - "agonismo", - "agricolo", - "agrumeto", - "aguzzo", - "alabarda", - "alato", - "albatro", - "alberato", - "albo", - "albume", - "alce", - "alcolico", - "alettone", - "alfa", - "algebra", - "aliante", - "alibi", - "alimento", - "allagato", - "allegro", - "allievo", - "allodola", - "allusivo", - "almeno", - "alogeno", - "alpaca", - "alpestre", - "altalena", - "alterno", - "alticcio", - "altrove", - "alunno", - "alveolo", - "alzare", - "amalgama", - "amanita", - "amarena", - "ambito", - "ambrato", - "ameba", - "america", - "ametista", - "amico", - "ammasso", - "ammenda", - "ammirare", - "ammonito", - "amore", - "ampio", - "ampliare", - "amuleto", - "anacardo", - "anagrafe", - "analista", - "anarchia", - "anatra", - "anca", - "ancella", - "ancora", - "andare", - "andrea", - "anello", - "angelo", - "angolare", - "angusto", - "anima", - "annegare", - "annidato", - "anno", - "annuncio", - "anonimo", - "anticipo", - "anzi", - "apatico", - "apertura", - "apode", - "apparire", - "appetito", - "appoggio", - "approdo", - "appunto", - "aprile", - "arabica", - "arachide", - "aragosta", - "araldica", - "arancio", - "aratura", - "arazzo", - "arbitro", - "archivio", - "ardito", - "arenile", - "argento", - "argine", - "arguto", - "aria", - "armonia", - "arnese", - "arredato", - "arringa", - "arrosto", - "arsenico", - "arso", - "artefice", - "arzillo", - "asciutto", - "ascolto", - "asepsi", - "asettico", - "asfalto", - "asino", - "asola", - "aspirato", - "aspro", - "assaggio", - "asse", - "assoluto", - "assurdo", - "asta", - "astenuto", - "astice", - "astratto", - "atavico", - "ateismo", - "atomico", - "atono", - "attesa", - "attivare", - "attorno", - "attrito", - "attuale", - "ausilio", - "austria", - "autista", - "autonomo", - "autunno", - "avanzato", - "avere", - "avvenire", - "avviso", - "avvolgere", - "azione", - "azoto", - "azzimo", - "azzurro", - "babele", - "baccano", - "bacino", - "baco", - "badessa", - "badilata", - "bagnato", - "baita", - "balcone", - "baldo", - "balena", - "ballata", - "balzano", - "bambino", - "bandire", - "baraonda", - "barbaro", - "barca", - "baritono", - "barlume", - "barocco", - "basilico", - "basso", - "batosta", - "battuto", - "baule", - "bava", - "bavosa", - "becco", - "beffa", - "belgio", - "belva", - "benda", - "benevole", - "benigno", - "benzina", - "bere", - "berlina", - "beta", - "bibita", - "bici", - "bidone", - "bifido", - "biga", - "bilancia", - "bimbo", - "binocolo", - "biologo", - "bipede", - "bipolare", - "birbante", - "birra", - "biscotto", - "bisesto", - "bisnonno", - "bisonte", - "bisturi", - "bizzarro", - "blando", - "blatta", - "bollito", - "bonifico", - "bordo", - "bosco", - "botanico", - "bottino", - "bozzolo", - "braccio", - "bradipo", - "brama", - "branca", - "bravura", - "bretella", - "brevetto", - "brezza", - "briglia", - "brillante", - "brindare", - "broccolo", - "brodo", - "bronzina", - "brullo", - "bruno", - "bubbone", - "buca", - "budino", - "buffone", - "buio", - "bulbo", - "buono", - "burlone", - "burrasca", - "bussola", - "busta", - "cadetto", - "caduco", - "calamaro", - "calcolo", - "calesse", - "calibro", - "calmo", - "caloria", - "cambusa", - "camerata", - "camicia", - "cammino", - "camola", - "campale", - "canapa", - "candela", - "cane", - "canino", - "canotto", - "cantina", - "capace", - "capello", - "capitolo", - "capogiro", - "cappero", - "capra", - "capsula", - "carapace", - "carcassa", - "cardo", - "carisma", - "carovana", - "carretto", - "cartolina", - "casaccio", - "cascata", - "caserma", - "caso", - "cassone", - "castello", - "casuale", - "catasta", - "catena", - "catrame", - "cauto", - "cavillo", - "cedibile", - "cedrata", - "cefalo", - "celebre", - "cellulare", - "cena", - "cenone", - "centesimo", - "ceramica", - "cercare", - "certo", - "cerume", - "cervello", - "cesoia", - "cespo", - "ceto", - "chela", - "chiaro", - "chicca", - "chiedere", - "chimera", - "china", - "chirurgo", - "chitarra", - "ciao", - "ciclismo", - "cifrare", - "cigno", - "cilindro", - "ciottolo", - "circa", - "cirrosi", - "citrico", - "cittadino", - "ciuffo", - "civetta", - "civile", - "classico", - "clinica", - "cloro", - "cocco", - "codardo", - "codice", - "coerente", - "cognome", - "collare", - "colmato", - "colore", - "colposo", - "coltivato", - "colza", - "coma", - "cometa", - "commando", - "comodo", - "computer", - "comune", - "conciso", - "condurre", - "conferma", - "congelare", - "coniuge", - "connesso", - "conoscere", - "consumo", - "continuo", - "convegno", - "coperto", - "copione", - "coppia", - "copricapo", - "corazza", - "cordata", - "coricato", - "cornice", - "corolla", - "corpo", - "corredo", - "corsia", - "cortese", - "cosmico", - "costante", - "cottura", - "covato", - "cratere", - "cravatta", - "creato", - "credere", - "cremoso", - "crescita", - "creta", - "criceto", - "crinale", - "crisi", - "critico", - "croce", - "cronaca", - "crostata", - "cruciale", - "crusca", - "cucire", - "cuculo", - "cugino", - "cullato", - "cupola", - "curatore", - "cursore", - "curvo", - "cuscino", - "custode", - "dado", - "daino", - "dalmata", - "damerino", - "daniela", - "dannoso", - "danzare", - "datato", - "davanti", - "davvero", - "debutto", - "decennio", - "deciso", - "declino", - "decollo", - "decreto", - "dedicato", - "definito", - "deforme", - "degno", - "delegare", - "delfino", - "delirio", - "delta", - "demenza", - "denotato", - "dentro", - "deposito", - "derapata", - "derivare", - "deroga", - "descritto", - "deserto", - "desiderio", - "desumere", - "detersivo", - "devoto", - "diametro", - "dicembre", - "diedro", - "difeso", - "diffuso", - "digerire", - "digitale", - "diluvio", - "dinamico", - "dinnanzi", - "dipinto", - "diploma", - "dipolo", - "diradare", - "dire", - "dirotto", - "dirupo", - "disagio", - "discreto", - "disfare", - "disgelo", - "disposto", - "distanza", - "disumano", - "dito", - "divano", - "divelto", - "dividere", - "divorato", - "doblone", - "docente", - "doganale", - "dogma", - "dolce", - "domato", - "domenica", - "dominare", - "dondolo", - "dono", - "dormire", - "dote", - "dottore", - "dovuto", - "dozzina", - "drago", - "druido", - "dubbio", - "dubitare", - "ducale", - "duna", - "duomo", - "duplice", - "duraturo", - "ebano", - "eccesso", - "ecco", - "eclissi", - "economia", - "edera", - "edicola", - "edile", - "editoria", - "educare", - "egemonia", - "egli", - "egoismo", - "egregio", - "elaborato", - "elargire", - "elegante", - "elencato", - "eletto", - "elevare", - "elfico", - "elica", - "elmo", - "elsa", - "eluso", - "emanato", - "emblema", - "emesso", - "emiro", - "emotivo", - "emozione", - "empirico", - "emulo", - "endemico", - "enduro", - "energia", - "enfasi", - "enoteca", - "entrare", - "enzima", - "epatite", - "epilogo", - "episodio", - "epocale", - "eppure", - "equatore", - "erario", - "erba", - "erboso", - "erede", - "eremita", - "erigere", - "ermetico", - "eroe", - "erosivo", - "errante", - "esagono", - "esame", - "esanime", - "esaudire", - "esca", - "esempio", - "esercito", - "esibito", - "esigente", - "esistere", - "esito", - "esofago", - "esortato", - "esoso", - "espanso", - "espresso", - "essenza", - "esso", - "esteso", - "estimare", - "estonia", - "estroso", - "esultare", - "etilico", - "etnico", - "etrusco", - "etto", - "euclideo", - "europa", - "evaso", - "evidenza", - "evitato", - "evoluto", - "evviva", - "fabbrica", - "faccenda", - "fachiro", - "falco", - "famiglia", - "fanale", - "fanfara", - "fango", - "fantasma", - "fare", - "farfalla", - "farinoso", - "farmaco", - "fascia", - "fastoso", - "fasullo", - "faticare", - "fato", - "favoloso", - "febbre", - "fecola", - "fede", - "fegato", - "felpa", - "feltro", - "femmina", - "fendere", - "fenomeno", - "fermento", - "ferro", - "fertile", - "fessura", - "festivo", - "fetta", - "feudo", - "fiaba", - "fiducia", - "fifa", - "figurato", - "filo", - "finanza", - "finestra", - "finire", - "fiore", - "fiscale", - "fisico", - "fiume", - "flacone", - "flamenco", - "flebo", - "flemma", - "florido", - "fluente", - "fluoro", - "fobico", - "focaccia", - "focoso", - "foderato", - "foglio", - "folata", - "folclore", - "folgore", - "fondente", - "fonetico", - "fonia", - "fontana", - "forbito", - "forchetta", - "foresta", - "formica", - "fornaio", - "foro", - "fortezza", - "forzare", - "fosfato", - "fosso", - "fracasso", - "frana", - "frassino", - "fratello", - "freccetta", - "frenata", - "fresco", - "frigo", - "frollino", - "fronde", - "frugale", - "frutta", - "fucilata", - "fucsia", - "fuggente", - "fulmine", - "fulvo", - "fumante", - "fumetto", - "fumoso", - "fune", - "funzione", - "fuoco", - "furbo", - "furgone", - "furore", - "fuso", - "futile", - "gabbiano", - "gaffe", - "galateo", - "gallina", - "galoppo", - "gambero", - "gamma", - "garanzia", - "garbo", - "garofano", - "garzone", - "gasdotto", - "gasolio", - "gastrico", - "gatto", - "gaudio", - "gazebo", - "gazzella", - "geco", - "gelatina", - "gelso", - "gemello", - "gemmato", - "gene", - "genitore", - "gennaio", - "genotipo", - "gergo", - "ghepardo", - "ghiaccio", - "ghisa", - "giallo", - "gilda", - "ginepro", - "giocare", - "gioiello", - "giorno", - "giove", - "girato", - "girone", - "gittata", - "giudizio", - "giurato", - "giusto", - "globulo", - "glutine", - "gnomo", - "gobba", - "golf", - "gomito", - "gommone", - "gonfio", - "gonna", - "governo", - "gracile", - "grado", - "grafico", - "grammo", - "grande", - "grattare", - "gravoso", - "grazia", - "greca", - "gregge", - "grifone", - "grigio", - "grinza", - "grotta", - "gruppo", - "guadagno", - "guaio", - "guanto", - "guardare", - "gufo", - "guidare", - "ibernato", - "icona", - "identico", - "idillio", - "idolo", - "idra", - "idrico", - "idrogeno", - "igiene", - "ignaro", - "ignorato", - "ilare", - "illeso", - "illogico", - "illudere", - "imballo", - "imbevuto", - "imbocco", - "imbuto", - "immane", - "immerso", - "immolato", - "impacco", - "impeto", - "impiego", - "importo", - "impronta", - "inalare", - "inarcare", - "inattivo", - "incanto", - "incendio", - "inchino", - "incisivo", - "incluso", - "incontro", - "incrocio", - "incubo", - "indagine", - "india", - "indole", - "inedito", - "infatti", - "infilare", - "inflitto", - "ingaggio", - "ingegno", - "inglese", - "ingordo", - "ingrosso", - "innesco", - "inodore", - "inoltrare", - "inondato", - "insano", - "insetto", - "insieme", - "insonnia", - "insulina", - "intasato", - "intero", - "intonaco", - "intuito", - "inumidire", - "invalido", - "invece", - "invito", - "iperbole", - "ipnotico", - "ipotesi", - "ippica", - "iride", - "irlanda", - "ironico", - "irrigato", - "irrorare", - "isolato", - "isotopo", - "isterico", - "istituto", - "istrice", - "italia", - "iterare", - "labbro", - "labirinto", - "lacca", - "lacerato", - "lacrima", - "lacuna", - "laddove", - "lago", - "lampo", - "lancetta", - "lanterna", - "lardoso", - "larga", - "laringe", - "lastra", - "latenza", - "latino", - "lattuga", - "lavagna", - "lavoro", - "legale", - "leggero", - "lembo", - "lentezza", - "lenza", - "leone", - "lepre", - "lesivo", - "lessato", - "lesto", - "letterale", - "leva", - "levigato", - "libero", - "lido", - "lievito", - "lilla", - "limatura", - "limitare", - "limpido", - "lineare", - "lingua", - "liquido", - "lira", - "lirica", - "lisca", - "lite", - "litigio", - "livrea", - "locanda", - "lode", - "logica", - "lombare", - "londra", - "longevo", - "loquace", - "lorenzo", - "loto", - "lotteria", - "luce", - "lucidato", - "lumaca", - "luminoso", - "lungo", - "lupo", - "luppolo", - "lusinga", - "lusso", - "lutto", - "macabro", - "macchina", - "macero", - "macinato", - "madama", - "magico", - "maglia", - "magnete", - "magro", - "maiolica", - "malafede", - "malgrado", - "malinteso", - "malsano", - "malto", - "malumore", - "mana", - "mancia", - "mandorla", - "mangiare", - "manifesto", - "mannaro", - "manovra", - "mansarda", - "mantide", - "manubrio", - "mappa", - "maratona", - "marcire", - "maretta", - "marmo", - "marsupio", - "maschera", - "massaia", - "mastino", - "materasso", - "matricola", - "mattone", - "maturo", - "mazurca", - "meandro", - "meccanico", - "mecenate", - "medesimo", - "meditare", - "mega", - "melassa", - "melis", - "melodia", - "meninge", - "meno", - "mensola", - "mercurio", - "merenda", - "merlo", - "meschino", - "mese", - "messere", - "mestolo", - "metallo", - "metodo", - "mettere", - "miagolare", - "mica", - "micelio", - "michele", - "microbo", - "midollo", - "miele", - "migliore", - "milano", - "milite", - "mimosa", - "minerale", - "mini", - "minore", - "mirino", - "mirtillo", - "miscela", - "missiva", - "misto", - "misurare", - "mitezza", - "mitigare", - "mitra", - "mittente", - "mnemonico", - "modello", - "modifica", - "modulo", - "mogano", - "mogio", - "mole", - "molosso", - "monastero", - "monco", - "mondina", - "monetario", - "monile", - "monotono", - "monsone", - "montato", - "monviso", - "mora", - "mordere", - "morsicato", - "mostro", - "motivato", - "motosega", - "motto", - "movenza", - "movimento", - "mozzo", - "mucca", - "mucosa", - "muffa", - "mughetto", - "mugnaio", - "mulatto", - "mulinello", - "multiplo", - "mummia", - "munto", - "muovere", - "murale", - "musa", - "muscolo", - "musica", - "mutevole", - "muto", - "nababbo", - "nafta", - "nanometro", - "narciso", - "narice", - "narrato", - "nascere", - "nastrare", - "naturale", - "nautica", - "naviglio", - "nebulosa", - "necrosi", - "negativo", - "negozio", - "nemmeno", - "neofita", - "neretto", - "nervo", - "nessuno", - "nettuno", - "neutrale", - "neve", - "nevrotico", - "nicchia", - "ninfa", - "nitido", - "nobile", - "nocivo", - "nodo", - "nome", - "nomina", - "nordico", - "normale", - "norvegese", - "nostrano", - "notare", - "notizia", - "notturno", - "novella", - "nucleo", - "nulla", - "numero", - "nuovo", - "nutrire", - "nuvola", - "nuziale", - "oasi", - "obbedire", - "obbligo", - "obelisco", - "oblio", - "obolo", - "obsoleto", - "occasione", - "occhio", - "occidente", - "occorrere", - "occultare", - "ocra", - "oculato", - "odierno", - "odorare", - "offerta", - "offrire", - "offuscato", - "oggetto", - "oggi", - "ognuno", - "olandese", - "olfatto", - "oliato", - "oliva", - "ologramma", - "oltre", - "omaggio", - "ombelico", - "ombra", - "omega", - "omissione", - "ondoso", - "onere", - "onice", - "onnivoro", - "onorevole", - "onta", - "operato", - "opinione", - "opposto", - "oracolo", - "orafo", - "ordine", - "orecchino", - "orefice", - "orfano", - "organico", - "origine", - "orizzonte", - "orma", - "ormeggio", - "ornativo", - "orologio", - "orrendo", - "orribile", - "ortensia", - "ortica", - "orzata", - "orzo", - "osare", - "oscurare", - "osmosi", - "ospedale", - "ospite", - "ossa", - "ossidare", - "ostacolo", - "oste", - "otite", - "otre", - "ottagono", - "ottimo", - "ottobre", - "ovale", - "ovest", - "ovino", - "oviparo", - "ovocito", - "ovunque", - "ovviare", - "ozio", - "pacchetto", - "pace", - "pacifico", - "padella", - "padrone", - "paese", - "paga", - "pagina", - "palazzina", - "palesare", - "pallido", - "palo", - "palude", - "pandoro", - "pannello", - "paolo", - "paonazzo", - "paprica", - "parabola", - "parcella", - "parere", - "pargolo", - "pari", - "parlato", - "parola", - "partire", - "parvenza", - "parziale", - "passivo", - "pasticca", - "patacca", - "patologia", - "pattume", - "pavone", - "peccato", - "pedalare", - "pedonale", - "peggio", - "peloso", - "penare", - "pendice", - "penisola", - "pennuto", - "penombra", - "pensare", - "pentola", - "pepe", - "pepita", - "perbene", - "percorso", - "perdonato", - "perforare", - "pergamena", - "periodo", - "permesso", - "perno", - "perplesso", - "persuaso", - "pertugio", - "pervaso", - "pesatore", - "pesista", - "peso", - "pestifero", - "petalo", - "pettine", - "petulante", - "pezzo", - "piacere", - "pianta", - "piattino", - "piccino", - "picozza", - "piega", - "pietra", - "piffero", - "pigiama", - "pigolio", - "pigro", - "pila", - "pilifero", - "pillola", - "pilota", - "pimpante", - "pineta", - "pinna", - "pinolo", - "pioggia", - "piombo", - "piramide", - "piretico", - "pirite", - "pirolisi", - "pitone", - "pizzico", - "placebo", - "planare", - "plasma", - "platano", - "plenario", - "pochezza", - "poderoso", - "podismo", - "poesia", - "poggiare", - "polenta", - "poligono", - "pollice", - "polmonite", - "polpetta", - "polso", - "poltrona", - "polvere", - "pomice", - "pomodoro", - "ponte", - "popoloso", - "porfido", - "poroso", - "porpora", - "porre", - "portata", - "posa", - "positivo", - "possesso", - "postulato", - "potassio", - "potere", - "pranzo", - "prassi", - "pratica", - "precluso", - "predica", - "prefisso", - "pregiato", - "prelievo", - "premere", - "prenotare", - "preparato", - "presenza", - "pretesto", - "prevalso", - "prima", - "principe", - "privato", - "problema", - "procura", - "produrre", - "profumo", - "progetto", - "prolunga", - "promessa", - "pronome", - "proposta", - "proroga", - "proteso", - "prova", - "prudente", - "prugna", - "prurito", - "psiche", - "pubblico", - "pudica", - "pugilato", - "pugno", - "pulce", - "pulito", - "pulsante", - "puntare", - "pupazzo", - "pupilla", - "puro", - "quadro", - "qualcosa", - "quasi", - "querela", - "quota", - "raccolto", - "raddoppio", - "radicale", - "radunato", - "raffica", - "ragazzo", - "ragione", - "ragno", - "ramarro", - "ramingo", - "ramo", - "randagio", - "rantolare", - "rapato", - "rapina", - "rappreso", - "rasatura", - "raschiato", - "rasente", - "rassegna", - "rastrello", - "rata", - "ravveduto", - "reale", - "recepire", - "recinto", - "recluta", - "recondito", - "recupero", - "reddito", - "redimere", - "regalato", - "registro", - "regola", - "regresso", - "relazione", - "remare", - "remoto", - "renna", - "replica", - "reprimere", - "reputare", - "resa", - "residente", - "responso", - "restauro", - "rete", - "retina", - "retorica", - "rettifica", - "revocato", - "riassunto", - "ribadire", - "ribelle", - "ribrezzo", - "ricarica", - "ricco", - "ricevere", - "riciclato", - "ricordo", - "ricreduto", - "ridicolo", - "ridurre", - "rifasare", - "riflesso", - "riforma", - "rifugio", - "rigare", - "rigettato", - "righello", - "rilassato", - "rilevato", - "rimanere", - "rimbalzo", - "rimedio", - "rimorchio", - "rinascita", - "rincaro", - "rinforzo", - "rinnovo", - "rinomato", - "rinsavito", - "rintocco", - "rinuncia", - "rinvenire", - "riparato", - "ripetuto", - "ripieno", - "riportare", - "ripresa", - "ripulire", - "risata", - "rischio", - "riserva", - "risibile", - "riso", - "rispetto", - "ristoro", - "risultato", - "risvolto", - "ritardo", - "ritegno", - "ritmico", - "ritrovo", - "riunione", - "riva", - "riverso", - "rivincita", - "rivolto", - "rizoma", - "roba", - "robotico", - "robusto", - "roccia", - "roco", - "rodaggio", - "rodere", - "roditore", - "rogito", - "rollio", - "romantico", - "rompere", - "ronzio", - "rosolare", - "rospo", - "rotante", - "rotondo", - "rotula", - "rovescio", - "rubizzo", - "rubrica", - "ruga", - "rullino", - "rumine", - "rumoroso", - "ruolo", - "rupe", - "russare", - "rustico", - "sabato", - "sabbiare", - "sabotato", - "sagoma", - "salasso", - "saldatura", - "salgemma", - "salivare", - "salmone", - "salone", - "saltare", - "saluto", - "salvo", - "sapere", - "sapido", - "saporito", - "saraceno", - "sarcasmo", - "sarto", - "sassoso", - "satellite", - "satira", - "satollo", - "saturno", - "savana", - "savio", - "saziato", - "sbadiglio", - "sbalzo", - "sbancato", - "sbarra", - "sbattere", - "sbavare", - "sbendare", - "sbirciare", - "sbloccato", - "sbocciato", - "sbrinare", - "sbruffone", - "sbuffare", - "scabroso", - "scadenza", - "scala", - "scambiare", - "scandalo", - "scapola", - "scarso", - "scatenare", - "scavato", - "scelto", - "scenico", - "scettro", - "scheda", - "schiena", - "sciarpa", - "scienza", - "scindere", - "scippo", - "sciroppo", - "scivolo", - "sclerare", - "scodella", - "scolpito", - "scomparto", - "sconforto", - "scoprire", - "scorta", - "scossone", - "scozzese", - "scriba", - "scrollare", - "scrutinio", - "scuderia", - "scultore", - "scuola", - "scuro", - "scusare", - "sdebitare", - "sdoganare", - "seccatura", - "secondo", - "sedano", - "seggiola", - "segnalato", - "segregato", - "seguito", - "selciato", - "selettivo", - "sella", - "selvaggio", - "semaforo", - "sembrare", - "seme", - "seminato", - "sempre", - "senso", - "sentire", - "sepolto", - "sequenza", - "serata", - "serbato", - "sereno", - "serio", - "serpente", - "serraglio", - "servire", - "sestina", - "setola", - "settimana", - "sfacelo", - "sfaldare", - "sfamato", - "sfarzoso", - "sfaticato", - "sfera", - "sfida", - "sfilato", - "sfinge", - "sfocato", - "sfoderare", - "sfogo", - "sfoltire", - "sforzato", - "sfratto", - "sfruttato", - "sfuggito", - "sfumare", - "sfuso", - "sgabello", - "sgarbato", - "sgonfiare", - "sgorbio", - "sgrassato", - "sguardo", - "sibilo", - "siccome", - "sierra", - "sigla", - "signore", - "silenzio", - "sillaba", - "simbolo", - "simpatico", - "simulato", - "sinfonia", - "singolo", - "sinistro", - "sino", - "sintesi", - "sinusoide", - "sipario", - "sisma", - "sistole", - "situato", - "slitta", - "slogatura", - "sloveno", - "smarrito", - "smemorato", - "smentito", - "smeraldo", - "smilzo", - "smontare", - "smottato", - "smussato", - "snellire", - "snervato", - "snodo", - "sobbalzo", - "sobrio", - "soccorso", - "sociale", - "sodale", - "soffitto", - "sogno", - "soldato", - "solenne", - "solido", - "sollazzo", - "solo", - "solubile", - "solvente", - "somatico", - "somma", - "sonda", - "sonetto", - "sonnifero", - "sopire", - "soppeso", - "sopra", - "sorgere", - "sorpasso", - "sorriso", - "sorso", - "sorteggio", - "sorvolato", - "sospiro", - "sosta", - "sottile", - "spada", - "spalla", - "spargere", - "spatola", - "spavento", - "spazzola", - "specie", - "spedire", - "spegnere", - "spelatura", - "speranza", - "spessore", - "spettrale", - "spezzato", - "spia", - "spigoloso", - "spillato", - "spinoso", - "spirale", - "splendido", - "sportivo", - "sposo", - "spranga", - "sprecare", - "spronato", - "spruzzo", - "spuntino", - "squillo", - "sradicare", - "srotolato", - "stabile", - "stacco", - "staffa", - "stagnare", - "stampato", - "stantio", - "starnuto", - "stasera", - "statuto", - "stelo", - "steppa", - "sterzo", - "stiletto", - "stima", - "stirpe", - "stivale", - "stizzoso", - "stonato", - "storico", - "strappo", - "stregato", - "stridulo", - "strozzare", - "strutto", - "stuccare", - "stufo", - "stupendo", - "subentro", - "succoso", - "sudore", - "suggerito", - "sugo", - "sultano", - "suonare", - "superbo", - "supporto", - "surgelato", - "surrogato", - "sussurro", - "sutura", - "svagare", - "svedese", - "sveglio", - "svelare", - "svenuto", - "svezia", - "sviluppo", - "svista", - "svizzera", - "svolta", - "svuotare", - "tabacco", - "tabulato", - "tacciare", - "taciturno", - "tale", - "talismano", - "tampone", - "tannino", - "tara", - "tardivo", - "targato", - "tariffa", - "tarpare", - "tartaruga", - "tasto", - "tattico", - "taverna", - "tavolata", - "tazza", - "teca", - "tecnico", - "telefono", - "temerario", - "tempo", - "temuto", - "tendone", - "tenero", - "tensione", - "tentacolo", - "teorema", - "terme", - "terrazzo", - "terzetto", - "tesi", - "tesserato", - "testato", - "tetro", - "tettoia", - "tifare", - "tigella", - "timbro", - "tinto", - "tipico", - "tipografo", - "tiraggio", - "tiro", - "titanio", - "titolo", - "titubante", - "tizio", - "tizzone", - "toccare", - "tollerare", - "tolto", - "tombola", - "tomo", - "tonfo", - "tonsilla", - "topazio", - "topologia", - "toppa", - "torba", - "tornare", - "torrone", - "tortora", - "toscano", - "tossire", - "tostatura", - "totano", - "trabocco", - "trachea", - "trafila", - "tragedia", - "tralcio", - "tramonto", - "transito", - "trapano", - "trarre", - "trasloco", - "trattato", - "trave", - "treccia", - "tremolio", - "trespolo", - "tributo", - "tricheco", - "trifoglio", - "trillo", - "trincea", - "trio", - "tristezza", - "triturato", - "trivella", - "tromba", - "trono", - "troppo", - "trottola", - "trovare", - "truccato", - "tubatura", - "tuffato", - "tulipano", - "tumulto", - "tunisia", - "turbare", - "turchino", - "tuta", - "tutela", - "ubicato", - "uccello", - "uccisore", - "udire", - "uditivo", - "uffa", - "ufficio", - "uguale", - "ulisse", - "ultimato", - "umano", - "umile", - "umorismo", - "uncinetto", - "ungere", - "ungherese", - "unicorno", - "unificato", - "unisono", - "unitario", - "unte", - "uovo", - "upupa", - "uragano", - "urgenza", - "urlo", - "usanza", - "usato", - "uscito", - "usignolo", - "usuraio", - "utensile", - "utilizzo", - "utopia", - "vacante", - "vaccinato", - "vagabondo", - "vagliato", - "valanga", - "valgo", - "valico", - "valletta", - "valoroso", - "valutare", - "valvola", - "vampata", - "vangare", - "vanitoso", - "vano", - "vantaggio", - "vanvera", - "vapore", - "varano", - "varcato", - "variante", - "vasca", - "vedetta", - "vedova", - "veduto", - "vegetale", - "veicolo", - "velcro", - "velina", - "velluto", - "veloce", - "venato", - "vendemmia", - "vento", - "verace", - "verbale", - "vergogna", - "verifica", - "vero", - "verruca", - "verticale", - "vescica", - "vessillo", - "vestale", - "veterano", - "vetrina", - "vetusto", - "viandante", - "vibrante", - "vicenda", - "vichingo", - "vicinanza", - "vidimare", - "vigilia", - "vigneto", - "vigore", - "vile", - "villano", - "vimini", - "vincitore", - "viola", - "vipera", - "virgola", - "virologo", - "virulento", - "viscoso", - "visione", - "vispo", - "vissuto", - "visura", - "vita", - "vitello", - "vittima", - "vivanda", - "vivido", - "viziare", - "voce", - "voga", - "volatile", - "volere", - "volpe", - "voragine", - "vulcano", - "zampogna", - "zanna", - "zappato", - "zattera", - "zavorra", - "zefiro", - "zelante", - "zelo", - "zenzero", - "zerbino", - "zibetto", - "zinco", - "zircone", - "zitto", - "zolla", - "zotico", - "zucchero", - "zufolo", - "zulu", - "zuppa" -]; +export const wordlist: string[] = `abaco +abbaglio +abbinato +abete +abisso +abolire +abrasivo +abrogato +accadere +accenno +accusato +acetone +achille +acido +acqua +acre +acrilico +acrobata +acuto +adagio +addebito +addome +adeguato +aderire +adipe +adottare +adulare +affabile +affetto +affisso +affranto +aforisma +afoso +africano +agave +agente +agevole +aggancio +agire +agitare +agonismo +agricolo +agrumeto +aguzzo +alabarda +alato +albatro +alberato +albo +albume +alce +alcolico +alettone +alfa +algebra +aliante +alibi +alimento +allagato +allegro +allievo +allodola +allusivo +almeno +alogeno +alpaca +alpestre +altalena +alterno +alticcio +altrove +alunno +alveolo +alzare +amalgama +amanita +amarena +ambito +ambrato +ameba +america +ametista +amico +ammasso +ammenda +ammirare +ammonito +amore +ampio +ampliare +amuleto +anacardo +anagrafe +analista +anarchia +anatra +anca +ancella +ancora +andare +andrea +anello +angelo +angolare +angusto +anima +annegare +annidato +anno +annuncio +anonimo +anticipo +anzi +apatico +apertura +apode +apparire +appetito +appoggio +approdo +appunto +aprile +arabica +arachide +aragosta +araldica +arancio +aratura +arazzo +arbitro +archivio +ardito +arenile +argento +argine +arguto +aria +armonia +arnese +arredato +arringa +arrosto +arsenico +arso +artefice +arzillo +asciutto +ascolto +asepsi +asettico +asfalto +asino +asola +aspirato +aspro +assaggio +asse +assoluto +assurdo +asta +astenuto +astice +astratto +atavico +ateismo +atomico +atono +attesa +attivare +attorno +attrito +attuale +ausilio +austria +autista +autonomo +autunno +avanzato +avere +avvenire +avviso +avvolgere +azione +azoto +azzimo +azzurro +babele +baccano +bacino +baco +badessa +badilata +bagnato +baita +balcone +baldo +balena +ballata +balzano +bambino +bandire +baraonda +barbaro +barca +baritono +barlume +barocco +basilico +basso +batosta +battuto +baule +bava +bavosa +becco +beffa +belgio +belva +benda +benevole +benigno +benzina +bere +berlina +beta +bibita +bici +bidone +bifido +biga +bilancia +bimbo +binocolo +biologo +bipede +bipolare +birbante +birra +biscotto +bisesto +bisnonno +bisonte +bisturi +bizzarro +blando +blatta +bollito +bonifico +bordo +bosco +botanico +bottino +bozzolo +braccio +bradipo +brama +branca +bravura +bretella +brevetto +brezza +briglia +brillante +brindare +broccolo +brodo +bronzina +brullo +bruno +bubbone +buca +budino +buffone +buio +bulbo +buono +burlone +burrasca +bussola +busta +cadetto +caduco +calamaro +calcolo +calesse +calibro +calmo +caloria +cambusa +camerata +camicia +cammino +camola +campale +canapa +candela +cane +canino +canotto +cantina +capace +capello +capitolo +capogiro +cappero +capra +capsula +carapace +carcassa +cardo +carisma +carovana +carretto +cartolina +casaccio +cascata +caserma +caso +cassone +castello +casuale +catasta +catena +catrame +cauto +cavillo +cedibile +cedrata +cefalo +celebre +cellulare +cena +cenone +centesimo +ceramica +cercare +certo +cerume +cervello +cesoia +cespo +ceto +chela +chiaro +chicca +chiedere +chimera +china +chirurgo +chitarra +ciao +ciclismo +cifrare +cigno +cilindro +ciottolo +circa +cirrosi +citrico +cittadino +ciuffo +civetta +civile +classico +clinica +cloro +cocco +codardo +codice +coerente +cognome +collare +colmato +colore +colposo +coltivato +colza +coma +cometa +commando +comodo +computer +comune +conciso +condurre +conferma +congelare +coniuge +connesso +conoscere +consumo +continuo +convegno +coperto +copione +coppia +copricapo +corazza +cordata +coricato +cornice +corolla +corpo +corredo +corsia +cortese +cosmico +costante +cottura +covato +cratere +cravatta +creato +credere +cremoso +crescita +creta +criceto +crinale +crisi +critico +croce +cronaca +crostata +cruciale +crusca +cucire +cuculo +cugino +cullato +cupola +curatore +cursore +curvo +cuscino +custode +dado +daino +dalmata +damerino +daniela +dannoso +danzare +datato +davanti +davvero +debutto +decennio +deciso +declino +decollo +decreto +dedicato +definito +deforme +degno +delegare +delfino +delirio +delta +demenza +denotato +dentro +deposito +derapata +derivare +deroga +descritto +deserto +desiderio +desumere +detersivo +devoto +diametro +dicembre +diedro +difeso +diffuso +digerire +digitale +diluvio +dinamico +dinnanzi +dipinto +diploma +dipolo +diradare +dire +dirotto +dirupo +disagio +discreto +disfare +disgelo +disposto +distanza +disumano +dito +divano +divelto +dividere +divorato +doblone +docente +doganale +dogma +dolce +domato +domenica +dominare +dondolo +dono +dormire +dote +dottore +dovuto +dozzina +drago +druido +dubbio +dubitare +ducale +duna +duomo +duplice +duraturo +ebano +eccesso +ecco +eclissi +economia +edera +edicola +edile +editoria +educare +egemonia +egli +egoismo +egregio +elaborato +elargire +elegante +elencato +eletto +elevare +elfico +elica +elmo +elsa +eluso +emanato +emblema +emesso +emiro +emotivo +emozione +empirico +emulo +endemico +enduro +energia +enfasi +enoteca +entrare +enzima +epatite +epilogo +episodio +epocale +eppure +equatore +erario +erba +erboso +erede +eremita +erigere +ermetico +eroe +erosivo +errante +esagono +esame +esanime +esaudire +esca +esempio +esercito +esibito +esigente +esistere +esito +esofago +esortato +esoso +espanso +espresso +essenza +esso +esteso +estimare +estonia +estroso +esultare +etilico +etnico +etrusco +etto +euclideo +europa +evaso +evidenza +evitato +evoluto +evviva +fabbrica +faccenda +fachiro +falco +famiglia +fanale +fanfara +fango +fantasma +fare +farfalla +farinoso +farmaco +fascia +fastoso +fasullo +faticare +fato +favoloso +febbre +fecola +fede +fegato +felpa +feltro +femmina +fendere +fenomeno +fermento +ferro +fertile +fessura +festivo +fetta +feudo +fiaba +fiducia +fifa +figurato +filo +finanza +finestra +finire +fiore +fiscale +fisico +fiume +flacone +flamenco +flebo +flemma +florido +fluente +fluoro +fobico +focaccia +focoso +foderato +foglio +folata +folclore +folgore +fondente +fonetico +fonia +fontana +forbito +forchetta +foresta +formica +fornaio +foro +fortezza +forzare +fosfato +fosso +fracasso +frana +frassino +fratello +freccetta +frenata +fresco +frigo +frollino +fronde +frugale +frutta +fucilata +fucsia +fuggente +fulmine +fulvo +fumante +fumetto +fumoso +fune +funzione +fuoco +furbo +furgone +furore +fuso +futile +gabbiano +gaffe +galateo +gallina +galoppo +gambero +gamma +garanzia +garbo +garofano +garzone +gasdotto +gasolio +gastrico +gatto +gaudio +gazebo +gazzella +geco +gelatina +gelso +gemello +gemmato +gene +genitore +gennaio +genotipo +gergo +ghepardo +ghiaccio +ghisa +giallo +gilda +ginepro +giocare +gioiello +giorno +giove +girato +girone +gittata +giudizio +giurato +giusto +globulo +glutine +gnomo +gobba +golf +gomito +gommone +gonfio +gonna +governo +gracile +grado +grafico +grammo +grande +grattare +gravoso +grazia +greca +gregge +grifone +grigio +grinza +grotta +gruppo +guadagno +guaio +guanto +guardare +gufo +guidare +ibernato +icona +identico +idillio +idolo +idra +idrico +idrogeno +igiene +ignaro +ignorato +ilare +illeso +illogico +illudere +imballo +imbevuto +imbocco +imbuto +immane +immerso +immolato +impacco +impeto +impiego +importo +impronta +inalare +inarcare +inattivo +incanto +incendio +inchino +incisivo +incluso +incontro +incrocio +incubo +indagine +india +indole +inedito +infatti +infilare +inflitto +ingaggio +ingegno +inglese +ingordo +ingrosso +innesco +inodore +inoltrare +inondato +insano +insetto +insieme +insonnia +insulina +intasato +intero +intonaco +intuito +inumidire +invalido +invece +invito +iperbole +ipnotico +ipotesi +ippica +iride +irlanda +ironico +irrigato +irrorare +isolato +isotopo +isterico +istituto +istrice +italia +iterare +labbro +labirinto +lacca +lacerato +lacrima +lacuna +laddove +lago +lampo +lancetta +lanterna +lardoso +larga +laringe +lastra +latenza +latino +lattuga +lavagna +lavoro +legale +leggero +lembo +lentezza +lenza +leone +lepre +lesivo +lessato +lesto +letterale +leva +levigato +libero +lido +lievito +lilla +limatura +limitare +limpido +lineare +lingua +liquido +lira +lirica +lisca +lite +litigio +livrea +locanda +lode +logica +lombare +londra +longevo +loquace +lorenzo +loto +lotteria +luce +lucidato +lumaca +luminoso +lungo +lupo +luppolo +lusinga +lusso +lutto +macabro +macchina +macero +macinato +madama +magico +maglia +magnete +magro +maiolica +malafede +malgrado +malinteso +malsano +malto +malumore +mana +mancia +mandorla +mangiare +manifesto +mannaro +manovra +mansarda +mantide +manubrio +mappa +maratona +marcire +maretta +marmo +marsupio +maschera +massaia +mastino +materasso +matricola +mattone +maturo +mazurca +meandro +meccanico +mecenate +medesimo +meditare +mega +melassa +melis +melodia +meninge +meno +mensola +mercurio +merenda +merlo +meschino +mese +messere +mestolo +metallo +metodo +mettere +miagolare +mica +micelio +michele +microbo +midollo +miele +migliore +milano +milite +mimosa +minerale +mini +minore +mirino +mirtillo +miscela +missiva +misto +misurare +mitezza +mitigare +mitra +mittente +mnemonico +modello +modifica +modulo +mogano +mogio +mole +molosso +monastero +monco +mondina +monetario +monile +monotono +monsone +montato +monviso +mora +mordere +morsicato +mostro +motivato +motosega +motto +movenza +movimento +mozzo +mucca +mucosa +muffa +mughetto +mugnaio +mulatto +mulinello +multiplo +mummia +munto +muovere +murale +musa +muscolo +musica +mutevole +muto +nababbo +nafta +nanometro +narciso +narice +narrato +nascere +nastrare +naturale +nautica +naviglio +nebulosa +necrosi +negativo +negozio +nemmeno +neofita +neretto +nervo +nessuno +nettuno +neutrale +neve +nevrotico +nicchia +ninfa +nitido +nobile +nocivo +nodo +nome +nomina +nordico +normale +norvegese +nostrano +notare +notizia +notturno +novella +nucleo +nulla +numero +nuovo +nutrire +nuvola +nuziale +oasi +obbedire +obbligo +obelisco +oblio +obolo +obsoleto +occasione +occhio +occidente +occorrere +occultare +ocra +oculato +odierno +odorare +offerta +offrire +offuscato +oggetto +oggi +ognuno +olandese +olfatto +oliato +oliva +ologramma +oltre +omaggio +ombelico +ombra +omega +omissione +ondoso +onere +onice +onnivoro +onorevole +onta +operato +opinione +opposto +oracolo +orafo +ordine +orecchino +orefice +orfano +organico +origine +orizzonte +orma +ormeggio +ornativo +orologio +orrendo +orribile +ortensia +ortica +orzata +orzo +osare +oscurare +osmosi +ospedale +ospite +ossa +ossidare +ostacolo +oste +otite +otre +ottagono +ottimo +ottobre +ovale +ovest +ovino +oviparo +ovocito +ovunque +ovviare +ozio +pacchetto +pace +pacifico +padella +padrone +paese +paga +pagina +palazzina +palesare +pallido +palo +palude +pandoro +pannello +paolo +paonazzo +paprica +parabola +parcella +parere +pargolo +pari +parlato +parola +partire +parvenza +parziale +passivo +pasticca +patacca +patologia +pattume +pavone +peccato +pedalare +pedonale +peggio +peloso +penare +pendice +penisola +pennuto +penombra +pensare +pentola +pepe +pepita +perbene +percorso +perdonato +perforare +pergamena +periodo +permesso +perno +perplesso +persuaso +pertugio +pervaso +pesatore +pesista +peso +pestifero +petalo +pettine +petulante +pezzo +piacere +pianta +piattino +piccino +picozza +piega +pietra +piffero +pigiama +pigolio +pigro +pila +pilifero +pillola +pilota +pimpante +pineta +pinna +pinolo +pioggia +piombo +piramide +piretico +pirite +pirolisi +pitone +pizzico +placebo +planare +plasma +platano +plenario +pochezza +poderoso +podismo +poesia +poggiare +polenta +poligono +pollice +polmonite +polpetta +polso +poltrona +polvere +pomice +pomodoro +ponte +popoloso +porfido +poroso +porpora +porre +portata +posa +positivo +possesso +postulato +potassio +potere +pranzo +prassi +pratica +precluso +predica +prefisso +pregiato +prelievo +premere +prenotare +preparato +presenza +pretesto +prevalso +prima +principe +privato +problema +procura +produrre +profumo +progetto +prolunga +promessa +pronome +proposta +proroga +proteso +prova +prudente +prugna +prurito +psiche +pubblico +pudica +pugilato +pugno +pulce +pulito +pulsante +puntare +pupazzo +pupilla +puro +quadro +qualcosa +quasi +querela +quota +raccolto +raddoppio +radicale +radunato +raffica +ragazzo +ragione +ragno +ramarro +ramingo +ramo +randagio +rantolare +rapato +rapina +rappreso +rasatura +raschiato +rasente +rassegna +rastrello +rata +ravveduto +reale +recepire +recinto +recluta +recondito +recupero +reddito +redimere +regalato +registro +regola +regresso +relazione +remare +remoto +renna +replica +reprimere +reputare +resa +residente +responso +restauro +rete +retina +retorica +rettifica +revocato +riassunto +ribadire +ribelle +ribrezzo +ricarica +ricco +ricevere +riciclato +ricordo +ricreduto +ridicolo +ridurre +rifasare +riflesso +riforma +rifugio +rigare +rigettato +righello +rilassato +rilevato +rimanere +rimbalzo +rimedio +rimorchio +rinascita +rincaro +rinforzo +rinnovo +rinomato +rinsavito +rintocco +rinuncia +rinvenire +riparato +ripetuto +ripieno +riportare +ripresa +ripulire +risata +rischio +riserva +risibile +riso +rispetto +ristoro +risultato +risvolto +ritardo +ritegno +ritmico +ritrovo +riunione +riva +riverso +rivincita +rivolto +rizoma +roba +robotico +robusto +roccia +roco +rodaggio +rodere +roditore +rogito +rollio +romantico +rompere +ronzio +rosolare +rospo +rotante +rotondo +rotula +rovescio +rubizzo +rubrica +ruga +rullino +rumine +rumoroso +ruolo +rupe +russare +rustico +sabato +sabbiare +sabotato +sagoma +salasso +saldatura +salgemma +salivare +salmone +salone +saltare +saluto +salvo +sapere +sapido +saporito +saraceno +sarcasmo +sarto +sassoso +satellite +satira +satollo +saturno +savana +savio +saziato +sbadiglio +sbalzo +sbancato +sbarra +sbattere +sbavare +sbendare +sbirciare +sbloccato +sbocciato +sbrinare +sbruffone +sbuffare +scabroso +scadenza +scala +scambiare +scandalo +scapola +scarso +scatenare +scavato +scelto +scenico +scettro +scheda +schiena +sciarpa +scienza +scindere +scippo +sciroppo +scivolo +sclerare +scodella +scolpito +scomparto +sconforto +scoprire +scorta +scossone +scozzese +scriba +scrollare +scrutinio +scuderia +scultore +scuola +scuro +scusare +sdebitare +sdoganare +seccatura +secondo +sedano +seggiola +segnalato +segregato +seguito +selciato +selettivo +sella +selvaggio +semaforo +sembrare +seme +seminato +sempre +senso +sentire +sepolto +sequenza +serata +serbato +sereno +serio +serpente +serraglio +servire +sestina +setola +settimana +sfacelo +sfaldare +sfamato +sfarzoso +sfaticato +sfera +sfida +sfilato +sfinge +sfocato +sfoderare +sfogo +sfoltire +sforzato +sfratto +sfruttato +sfuggito +sfumare +sfuso +sgabello +sgarbato +sgonfiare +sgorbio +sgrassato +sguardo +sibilo +siccome +sierra +sigla +signore +silenzio +sillaba +simbolo +simpatico +simulato +sinfonia +singolo +sinistro +sino +sintesi +sinusoide +sipario +sisma +sistole +situato +slitta +slogatura +sloveno +smarrito +smemorato +smentito +smeraldo +smilzo +smontare +smottato +smussato +snellire +snervato +snodo +sobbalzo +sobrio +soccorso +sociale +sodale +soffitto +sogno +soldato +solenne +solido +sollazzo +solo +solubile +solvente +somatico +somma +sonda +sonetto +sonnifero +sopire +soppeso +sopra +sorgere +sorpasso +sorriso +sorso +sorteggio +sorvolato +sospiro +sosta +sottile +spada +spalla +spargere +spatola +spavento +spazzola +specie +spedire +spegnere +spelatura +speranza +spessore +spettrale +spezzato +spia +spigoloso +spillato +spinoso +spirale +splendido +sportivo +sposo +spranga +sprecare +spronato +spruzzo +spuntino +squillo +sradicare +srotolato +stabile +stacco +staffa +stagnare +stampato +stantio +starnuto +stasera +statuto +stelo +steppa +sterzo +stiletto +stima +stirpe +stivale +stizzoso +stonato +storico +strappo +stregato +stridulo +strozzare +strutto +stuccare +stufo +stupendo +subentro +succoso +sudore +suggerito +sugo +sultano +suonare +superbo +supporto +surgelato +surrogato +sussurro +sutura +svagare +svedese +sveglio +svelare +svenuto +svezia +sviluppo +svista +svizzera +svolta +svuotare +tabacco +tabulato +tacciare +taciturno +tale +talismano +tampone +tannino +tara +tardivo +targato +tariffa +tarpare +tartaruga +tasto +tattico +taverna +tavolata +tazza +teca +tecnico +telefono +temerario +tempo +temuto +tendone +tenero +tensione +tentacolo +teorema +terme +terrazzo +terzetto +tesi +tesserato +testato +tetro +tettoia +tifare +tigella +timbro +tinto +tipico +tipografo +tiraggio +tiro +titanio +titolo +titubante +tizio +tizzone +toccare +tollerare +tolto +tombola +tomo +tonfo +tonsilla +topazio +topologia +toppa +torba +tornare +torrone +tortora +toscano +tossire +tostatura +totano +trabocco +trachea +trafila +tragedia +tralcio +tramonto +transito +trapano +trarre +trasloco +trattato +trave +treccia +tremolio +trespolo +tributo +tricheco +trifoglio +trillo +trincea +trio +tristezza +triturato +trivella +tromba +trono +troppo +trottola +trovare +truccato +tubatura +tuffato +tulipano +tumulto +tunisia +turbare +turchino +tuta +tutela +ubicato +uccello +uccisore +udire +uditivo +uffa +ufficio +uguale +ulisse +ultimato +umano +umile +umorismo +uncinetto +ungere +ungherese +unicorno +unificato +unisono +unitario +unte +uovo +upupa +uragano +urgenza +urlo +usanza +usato +uscito +usignolo +usuraio +utensile +utilizzo +utopia +vacante +vaccinato +vagabondo +vagliato +valanga +valgo +valico +valletta +valoroso +valutare +valvola +vampata +vangare +vanitoso +vano +vantaggio +vanvera +vapore +varano +varcato +variante +vasca +vedetta +vedova +veduto +vegetale +veicolo +velcro +velina +velluto +veloce +venato +vendemmia +vento +verace +verbale +vergogna +verifica +vero +verruca +verticale +vescica +vessillo +vestale +veterano +vetrina +vetusto +viandante +vibrante +vicenda +vichingo +vicinanza +vidimare +vigilia +vigneto +vigore +vile +villano +vimini +vincitore +viola +vipera +virgola +virologo +virulento +viscoso +visione +vispo +vissuto +visura +vita +vitello +vittima +vivanda +vivido +viziare +voce +voga +volatile +volere +volpe +voragine +vulcano +zampogna +zanna +zappato +zattera +zavorra +zefiro +zelante +zelo +zenzero +zerbino +zibetto +zinco +zircone +zitto +zolla +zotico +zucchero +zufolo +zulu +zuppa`.split("\n"); diff --git a/src/bip39/wordlists/japanese.ts b/src/bip39/wordlists/japanese.ts index 193cd5b..2f10627 100644 --- a/src/bip39/wordlists/japanese.ts +++ b/src/bip39/wordlists/japanese.ts @@ -1,2050 +1,2048 @@ -export const wordlist: string[] = [ - "あいこくしん", - "あいさつ", - "あいだ", - "あおぞら", - "あかちゃん", - "あきる", - "あけがた", - "あける", - "あこがれる", - "あさい", - "あさひ", - "あしあと", - "あじわう", - "あずかる", - "あずき", - "あそぶ", - "あたえる", - "あたためる", - "あたりまえ", - "あたる", - "あつい", - "あつかう", - "あっしゅく", - "あつまり", - "あつめる", - "あてな", - "あてはまる", - "あひる", - "あぶら", - "あぶる", - "あふれる", - "あまい", - "あまど", - "あまやかす", - "あまり", - "あみもの", - "あめりか", - "あやまる", - "あゆむ", - "あらいぐま", - "あらし", - "あらすじ", - "あらためる", - "あらゆる", - "あらわす", - "ありがとう", - "あわせる", - "あわてる", - "あんい", - "あんがい", - "あんこ", - "あんぜん", - "あんてい", - "あんない", - "あんまり", - "いいだす", - "いおん", - "いがい", - "いがく", - "いきおい", - "いきなり", - "いきもの", - "いきる", - "いくじ", - "いくぶん", - "いけばな", - "いけん", - "いこう", - "いこく", - "いこつ", - "いさましい", - "いさん", - "いしき", - "いじゅう", - "いじょう", - "いじわる", - "いずみ", - "いずれ", - "いせい", - "いせえび", - "いせかい", - "いせき", - "いぜん", - "いそうろう", - "いそがしい", - "いだい", - "いだく", - "いたずら", - "いたみ", - "いたりあ", - "いちおう", - "いちじ", - "いちど", - "いちば", - "いちぶ", - "いちりゅう", - "いつか", - "いっしゅん", - "いっせい", - "いっそう", - "いったん", - "いっち", - "いってい", - "いっぽう", - "いてざ", - "いてん", - "いどう", - "いとこ", - "いない", - "いなか", - "いねむり", - "いのち", - "いのる", - "いはつ", - "いばる", - "いはん", - "いびき", - "いひん", - "いふく", - "いへん", - "いほう", - "いみん", - "いもうと", - "いもたれ", - "いもり", - "いやがる", - "いやす", - "いよかん", - "いよく", - "いらい", - "いらすと", - "いりぐち", - "いりょう", - "いれい", - "いれもの", - "いれる", - "いろえんぴつ", - "いわい", - "いわう", - "いわかん", - "いわば", - "いわゆる", - "いんげんまめ", - "いんさつ", - "いんしょう", - "いんよう", - "うえき", - "うえる", - "うおざ", - "うがい", - "うかぶ", - "うかべる", - "うきわ", - "うくらいな", - "うくれれ", - "うけたまわる", - "うけつけ", - "うけとる", - "うけもつ", - "うける", - "うごかす", - "うごく", - "うこん", - "うさぎ", - "うしなう", - "うしろがみ", - "うすい", - "うすぎ", - "うすぐらい", - "うすめる", - "うせつ", - "うちあわせ", - "うちがわ", - "うちき", - "うちゅう", - "うっかり", - "うつくしい", - "うったえる", - "うつる", - "うどん", - "うなぎ", - "うなじ", - "うなずく", - "うなる", - "うねる", - "うのう", - "うぶげ", - "うぶごえ", - "うまれる", - "うめる", - "うもう", - "うやまう", - "うよく", - "うらがえす", - "うらぐち", - "うらない", - "うりあげ", - "うりきれ", - "うるさい", - "うれしい", - "うれゆき", - "うれる", - "うろこ", - "うわき", - "うわさ", - "うんこう", - "うんちん", - "うんてん", - "うんどう", - "えいえん", - "えいが", - "えいきょう", - "えいご", - "えいせい", - "えいぶん", - "えいよう", - "えいわ", - "えおり", - "えがお", - "えがく", - "えきたい", - "えくせる", - "えしゃく", - "えすて", - "えつらん", - "えのぐ", - "えほうまき", - "えほん", - "えまき", - "えもじ", - "えもの", - "えらい", - "えらぶ", - "えりあ", - "えんえん", - "えんかい", - "えんぎ", - "えんげき", - "えんしゅう", - "えんぜつ", - "えんそく", - "えんちょう", - "えんとつ", - "おいかける", - "おいこす", - "おいしい", - "おいつく", - "おうえん", - "おうさま", - "おうじ", - "おうせつ", - "おうたい", - "おうふく", - "おうべい", - "おうよう", - "おえる", - "おおい", - "おおう", - "おおどおり", - "おおや", - "おおよそ", - "おかえり", - "おかず", - "おがむ", - "おかわり", - "おぎなう", - "おきる", - "おくさま", - "おくじょう", - "おくりがな", - "おくる", - "おくれる", - "おこす", - "おこなう", - "おこる", - "おさえる", - "おさない", - "おさめる", - "おしいれ", - "おしえる", - "おじぎ", - "おじさん", - "おしゃれ", - "おそらく", - "おそわる", - "おたがい", - "おたく", - "おだやか", - "おちつく", - "おっと", - "おつり", - "おでかけ", - "おとしもの", - "おとなしい", - "おどり", - "おどろかす", - "おばさん", - "おまいり", - "おめでとう", - "おもいで", - "おもう", - "おもたい", - "おもちゃ", - "おやつ", - "おやゆび", - "およぼす", - "おらんだ", - "おろす", - "おんがく", - "おんけい", - "おんしゃ", - "おんせん", - "おんだん", - "おんちゅう", - "おんどけい", - "かあつ", - "かいが", - "がいき", - "がいけん", - "がいこう", - "かいさつ", - "かいしゃ", - "かいすいよく", - "かいぜん", - "かいぞうど", - "かいつう", - "かいてん", - "かいとう", - "かいふく", - "がいへき", - "かいほう", - "かいよう", - "がいらい", - "かいわ", - "かえる", - "かおり", - "かかえる", - "かがく", - "かがし", - "かがみ", - "かくご", - "かくとく", - "かざる", - "がぞう", - "かたい", - "かたち", - "がちょう", - "がっきゅう", - "がっこう", - "がっさん", - "がっしょう", - "かなざわし", - "かのう", - "がはく", - "かぶか", - "かほう", - "かほご", - "かまう", - "かまぼこ", - "かめれおん", - "かゆい", - "かようび", - "からい", - "かるい", - "かろう", - "かわく", - "かわら", - "がんか", - "かんけい", - "かんこう", - "かんしゃ", - "かんそう", - "かんたん", - "かんち", - "がんばる", - "きあい", - "きあつ", - "きいろ", - "ぎいん", - "きうい", - "きうん", - "きえる", - "きおう", - "きおく", - "きおち", - "きおん", - "きかい", - "きかく", - "きかんしゃ", - "ききて", - "きくばり", - "きくらげ", - "きけんせい", - "きこう", - "きこえる", - "きこく", - "きさい", - "きさく", - "きさま", - "きさらぎ", - "ぎじかがく", - "ぎしき", - "ぎじたいけん", - "ぎじにってい", - "ぎじゅつしゃ", - "きすう", - "きせい", - "きせき", - "きせつ", - "きそう", - "きぞく", - "きぞん", - "きたえる", - "きちょう", - "きつえん", - "ぎっちり", - "きつつき", - "きつね", - "きてい", - "きどう", - "きどく", - "きない", - "きなが", - "きなこ", - "きぬごし", - "きねん", - "きのう", - "きのした", - "きはく", - "きびしい", - "きひん", - "きふく", - "きぶん", - "きぼう", - "きほん", - "きまる", - "きみつ", - "きむずかしい", - "きめる", - "きもだめし", - "きもち", - "きもの", - "きゃく", - "きやく", - "ぎゅうにく", - "きよう", - "きょうりゅう", - "きらい", - "きらく", - "きりん", - "きれい", - "きれつ", - "きろく", - "ぎろん", - "きわめる", - "ぎんいろ", - "きんかくじ", - "きんじょ", - "きんようび", - "ぐあい", - "くいず", - "くうかん", - "くうき", - "くうぐん", - "くうこう", - "ぐうせい", - "くうそう", - "ぐうたら", - "くうふく", - "くうぼ", - "くかん", - "くきょう", - "くげん", - "ぐこう", - "くさい", - "くさき", - "くさばな", - "くさる", - "くしゃみ", - "くしょう", - "くすのき", - "くすりゆび", - "くせげ", - "くせん", - "ぐたいてき", - "くださる", - "くたびれる", - "くちこみ", - "くちさき", - "くつした", - "ぐっすり", - "くつろぐ", - "くとうてん", - "くどく", - "くなん", - "くねくね", - "くのう", - "くふう", - "くみあわせ", - "くみたてる", - "くめる", - "くやくしょ", - "くらす", - "くらべる", - "くるま", - "くれる", - "くろう", - "くわしい", - "ぐんかん", - "ぐんしょく", - "ぐんたい", - "ぐんて", - "けあな", - "けいかく", - "けいけん", - "けいこ", - "けいさつ", - "げいじゅつ", - "けいたい", - "げいのうじん", - "けいれき", - "けいろ", - "けおとす", - "けおりもの", - "げきか", - "げきげん", - "げきだん", - "げきちん", - "げきとつ", - "げきは", - "げきやく", - "げこう", - "げこくじょう", - "げざい", - "けさき", - "げざん", - "けしき", - "けしごむ", - "けしょう", - "げすと", - "けたば", - "けちゃっぷ", - "けちらす", - "けつあつ", - "けつい", - "けつえき", - "けっこん", - "けつじょ", - "けっせき", - "けってい", - "けつまつ", - "げつようび", - "げつれい", - "けつろん", - "げどく", - "けとばす", - "けとる", - "けなげ", - "けなす", - "けなみ", - "けぬき", - "げねつ", - "けねん", - "けはい", - "げひん", - "けぶかい", - "げぼく", - "けまり", - "けみかる", - "けむし", - "けむり", - "けもの", - "けらい", - "けろけろ", - "けわしい", - "けんい", - "けんえつ", - "けんお", - "けんか", - "げんき", - "けんげん", - "けんこう", - "けんさく", - "けんしゅう", - "けんすう", - "げんそう", - "けんちく", - "けんてい", - "けんとう", - "けんない", - "けんにん", - "げんぶつ", - "けんま", - "けんみん", - "けんめい", - "けんらん", - "けんり", - "こあくま", - "こいぬ", - "こいびと", - "ごうい", - "こうえん", - "こうおん", - "こうかん", - "ごうきゅう", - "ごうけい", - "こうこう", - "こうさい", - "こうじ", - "こうすい", - "ごうせい", - "こうそく", - "こうたい", - "こうちゃ", - "こうつう", - "こうてい", - "こうどう", - "こうない", - "こうはい", - "ごうほう", - "ごうまん", - "こうもく", - "こうりつ", - "こえる", - "こおり", - "ごかい", - "ごがつ", - "ごかん", - "こくご", - "こくさい", - "こくとう", - "こくない", - "こくはく", - "こぐま", - "こけい", - "こける", - "ここのか", - "こころ", - "こさめ", - "こしつ", - "こすう", - "こせい", - "こせき", - "こぜん", - "こそだて", - "こたい", - "こたえる", - "こたつ", - "こちょう", - "こっか", - "こつこつ", - "こつばん", - "こつぶ", - "こてい", - "こてん", - "ことがら", - "ことし", - "ことば", - "ことり", - "こなごな", - "こねこね", - "このまま", - "このみ", - "このよ", - "ごはん", - "こひつじ", - "こふう", - "こふん", - "こぼれる", - "ごまあぶら", - "こまかい", - "ごますり", - "こまつな", - "こまる", - "こむぎこ", - "こもじ", - "こもち", - "こもの", - "こもん", - "こやく", - "こやま", - "こゆう", - "こゆび", - "こよい", - "こよう", - "こりる", - "これくしょん", - "ころっけ", - "こわもて", - "こわれる", - "こんいん", - "こんかい", - "こんき", - "こんしゅう", - "こんすい", - "こんだて", - "こんとん", - "こんなん", - "こんびに", - "こんぽん", - "こんまけ", - "こんや", - "こんれい", - "こんわく", - "ざいえき", - "さいかい", - "さいきん", - "ざいげん", - "ざいこ", - "さいしょ", - "さいせい", - "ざいたく", - "ざいちゅう", - "さいてき", - "ざいりょう", - "さうな", - "さかいし", - "さがす", - "さかな", - "さかみち", - "さがる", - "さぎょう", - "さくし", - "さくひん", - "さくら", - "さこく", - "さこつ", - "さずかる", - "ざせき", - "さたん", - "さつえい", - "ざつおん", - "ざっか", - "ざつがく", - "さっきょく", - "ざっし", - "さつじん", - "ざっそう", - "さつたば", - "さつまいも", - "さてい", - "さといも", - "さとう", - "さとおや", - "さとし", - "さとる", - "さのう", - "さばく", - "さびしい", - "さべつ", - "さほう", - "さほど", - "さます", - "さみしい", - "さみだれ", - "さむけ", - "さめる", - "さやえんどう", - "さゆう", - "さよう", - "さよく", - "さらだ", - "ざるそば", - "さわやか", - "さわる", - "さんいん", - "さんか", - "さんきゃく", - "さんこう", - "さんさい", - "ざんしょ", - "さんすう", - "さんせい", - "さんそ", - "さんち", - "さんま", - "さんみ", - "さんらん", - "しあい", - "しあげ", - "しあさって", - "しあわせ", - "しいく", - "しいん", - "しうち", - "しえい", - "しおけ", - "しかい", - "しかく", - "じかん", - "しごと", - "しすう", - "じだい", - "したうけ", - "したぎ", - "したて", - "したみ", - "しちょう", - "しちりん", - "しっかり", - "しつじ", - "しつもん", - "してい", - "してき", - "してつ", - "じてん", - "じどう", - "しなぎれ", - "しなもの", - "しなん", - "しねま", - "しねん", - "しのぐ", - "しのぶ", - "しはい", - "しばかり", - "しはつ", - "しはらい", - "しはん", - "しひょう", - "しふく", - "じぶん", - "しへい", - "しほう", - "しほん", - "しまう", - "しまる", - "しみん", - "しむける", - "じむしょ", - "しめい", - "しめる", - "しもん", - "しゃいん", - "しゃうん", - "しゃおん", - "じゃがいも", - "しやくしょ", - "しゃくほう", - "しゃけん", - "しゃこ", - "しゃざい", - "しゃしん", - "しゃせん", - "しゃそう", - "しゃたい", - "しゃちょう", - "しゃっきん", - "じゃま", - "しゃりん", - "しゃれい", - "じゆう", - "じゅうしょ", - "しゅくはく", - "じゅしん", - "しゅっせき", - "しゅみ", - "しゅらば", - "じゅんばん", - "しょうかい", - "しょくたく", - "しょっけん", - "しょどう", - "しょもつ", - "しらせる", - "しらべる", - "しんか", - "しんこう", - "じんじゃ", - "しんせいじ", - "しんちく", - "しんりん", - "すあげ", - "すあし", - "すあな", - "ずあん", - "すいえい", - "すいか", - "すいとう", - "ずいぶん", - "すいようび", - "すうがく", - "すうじつ", - "すうせん", - "すおどり", - "すきま", - "すくう", - "すくない", - "すける", - "すごい", - "すこし", - "ずさん", - "すずしい", - "すすむ", - "すすめる", - "すっかり", - "ずっしり", - "ずっと", - "すてき", - "すてる", - "すねる", - "すのこ", - "すはだ", - "すばらしい", - "ずひょう", - "ずぶぬれ", - "すぶり", - "すふれ", - "すべて", - "すべる", - "ずほう", - "すぼん", - "すまい", - "すめし", - "すもう", - "すやき", - "すらすら", - "するめ", - "すれちがう", - "すろっと", - "すわる", - "すんぜん", - "すんぽう", - "せあぶら", - "せいかつ", - "せいげん", - "せいじ", - "せいよう", - "せおう", - "せかいかん", - "せきにん", - "せきむ", - "せきゆ", - "せきらんうん", - "せけん", - "せこう", - "せすじ", - "せたい", - "せたけ", - "せっかく", - "せっきゃく", - "ぜっく", - "せっけん", - "せっこつ", - "せっさたくま", - "せつぞく", - "せつだん", - "せつでん", - "せっぱん", - "せつび", - "せつぶん", - "せつめい", - "せつりつ", - "せなか", - "せのび", - "せはば", - "せびろ", - "せぼね", - "せまい", - "せまる", - "せめる", - "せもたれ", - "せりふ", - "ぜんあく", - "せんい", - "せんえい", - "せんか", - "せんきょ", - "せんく", - "せんげん", - "ぜんご", - "せんさい", - "せんしゅ", - "せんすい", - "せんせい", - "せんぞ", - "せんたく", - "せんちょう", - "せんてい", - "せんとう", - "せんぬき", - "せんねん", - "せんぱい", - "ぜんぶ", - "ぜんぽう", - "せんむ", - "せんめんじょ", - "せんもん", - "せんやく", - "せんゆう", - "せんよう", - "ぜんら", - "ぜんりゃく", - "せんれい", - "せんろ", - "そあく", - "そいとげる", - "そいね", - "そうがんきょう", - "そうき", - "そうご", - "そうしん", - "そうだん", - "そうなん", - "そうび", - "そうめん", - "そうり", - "そえもの", - "そえん", - "そがい", - "そげき", - "そこう", - "そこそこ", - "そざい", - "そしな", - "そせい", - "そせん", - "そそぐ", - "そだてる", - "そつう", - "そつえん", - "そっかん", - "そつぎょう", - "そっけつ", - "そっこう", - "そっせん", - "そっと", - "そとがわ", - "そとづら", - "そなえる", - "そなた", - "そふぼ", - "そぼく", - "そぼろ", - "そまつ", - "そまる", - "そむく", - "そむりえ", - "そめる", - "そもそも", - "そよかぜ", - "そらまめ", - "そろう", - "そんかい", - "そんけい", - "そんざい", - "そんしつ", - "そんぞく", - "そんちょう", - "ぞんび", - "ぞんぶん", - "そんみん", - "たあい", - "たいいん", - "たいうん", - "たいえき", - "たいおう", - "だいがく", - "たいき", - "たいぐう", - "たいけん", - "たいこ", - "たいざい", - "だいじょうぶ", - "だいすき", - "たいせつ", - "たいそう", - "だいたい", - "たいちょう", - "たいてい", - "だいどころ", - "たいない", - "たいねつ", - "たいのう", - "たいはん", - "だいひょう", - "たいふう", - "たいへん", - "たいほ", - "たいまつばな", - "たいみんぐ", - "たいむ", - "たいめん", - "たいやき", - "たいよう", - "たいら", - "たいりょく", - "たいる", - "たいわん", - "たうえ", - "たえる", - "たおす", - "たおる", - "たおれる", - "たかい", - "たかね", - "たきび", - "たくさん", - "たこく", - "たこやき", - "たさい", - "たしざん", - "だじゃれ", - "たすける", - "たずさわる", - "たそがれ", - "たたかう", - "たたく", - "ただしい", - "たたみ", - "たちばな", - "だっかい", - "だっきゃく", - "だっこ", - "だっしゅつ", - "だったい", - "たてる", - "たとえる", - "たなばた", - "たにん", - "たぬき", - "たのしみ", - "たはつ", - "たぶん", - "たべる", - "たぼう", - "たまご", - "たまる", - "だむる", - "ためいき", - "ためす", - "ためる", - "たもつ", - "たやすい", - "たよる", - "たらす", - "たりきほんがん", - "たりょう", - "たりる", - "たると", - "たれる", - "たれんと", - "たろっと", - "たわむれる", - "だんあつ", - "たんい", - "たんおん", - "たんか", - "たんき", - "たんけん", - "たんご", - "たんさん", - "たんじょうび", - "だんせい", - "たんそく", - "たんたい", - "だんち", - "たんてい", - "たんとう", - "だんな", - "たんにん", - "だんねつ", - "たんのう", - "たんぴん", - "だんぼう", - "たんまつ", - "たんめい", - "だんれつ", - "だんろ", - "だんわ", - "ちあい", - "ちあん", - "ちいき", - "ちいさい", - "ちえん", - "ちかい", - "ちから", - "ちきゅう", - "ちきん", - "ちけいず", - "ちけん", - "ちこく", - "ちさい", - "ちしき", - "ちしりょう", - "ちせい", - "ちそう", - "ちたい", - "ちたん", - "ちちおや", - "ちつじょ", - "ちてき", - "ちてん", - "ちぬき", - "ちぬり", - "ちのう", - "ちひょう", - "ちへいせん", - "ちほう", - "ちまた", - "ちみつ", - "ちみどろ", - "ちめいど", - "ちゃんこなべ", - "ちゅうい", - "ちゆりょく", - "ちょうし", - "ちょさくけん", - "ちらし", - "ちらみ", - "ちりがみ", - "ちりょう", - "ちるど", - "ちわわ", - "ちんたい", - "ちんもく", - "ついか", - "ついたち", - "つうか", - "つうじょう", - "つうはん", - "つうわ", - "つかう", - "つかれる", - "つくね", - "つくる", - "つけね", - "つける", - "つごう", - "つたえる", - "つづく", - "つつじ", - "つつむ", - "つとめる", - "つながる", - "つなみ", - "つねづね", - "つのる", - "つぶす", - "つまらない", - "つまる", - "つみき", - "つめたい", - "つもり", - "つもる", - "つよい", - "つるぼ", - "つるみく", - "つわもの", - "つわり", - "てあし", - "てあて", - "てあみ", - "ていおん", - "ていか", - "ていき", - "ていけい", - "ていこく", - "ていさつ", - "ていし", - "ていせい", - "ていたい", - "ていど", - "ていねい", - "ていひょう", - "ていへん", - "ていぼう", - "てうち", - "ておくれ", - "てきとう", - "てくび", - "でこぼこ", - "てさぎょう", - "てさげ", - "てすり", - "てそう", - "てちがい", - "てちょう", - "てつがく", - "てつづき", - "でっぱ", - "てつぼう", - "てつや", - "でぬかえ", - "てぬき", - "てぬぐい", - "てのひら", - "てはい", - "てぶくろ", - "てふだ", - "てほどき", - "てほん", - "てまえ", - "てまきずし", - "てみじか", - "てみやげ", - "てらす", - "てれび", - "てわけ", - "てわたし", - "でんあつ", - "てんいん", - "てんかい", - "てんき", - "てんぐ", - "てんけん", - "てんごく", - "てんさい", - "てんし", - "てんすう", - "でんち", - "てんてき", - "てんとう", - "てんない", - "てんぷら", - "てんぼうだい", - "てんめつ", - "てんらんかい", - "でんりょく", - "でんわ", - "どあい", - "といれ", - "どうかん", - "とうきゅう", - "どうぐ", - "とうし", - "とうむぎ", - "とおい", - "とおか", - "とおく", - "とおす", - "とおる", - "とかい", - "とかす", - "ときおり", - "ときどき", - "とくい", - "とくしゅう", - "とくてん", - "とくに", - "とくべつ", - "とけい", - "とける", - "とこや", - "とさか", - "としょかん", - "とそう", - "とたん", - "とちゅう", - "とっきゅう", - "とっくん", - "とつぜん", - "とつにゅう", - "とどける", - "ととのえる", - "とない", - "となえる", - "となり", - "とのさま", - "とばす", - "どぶがわ", - "とほう", - "とまる", - "とめる", - "ともだち", - "ともる", - "どようび", - "とらえる", - "とんかつ", - "どんぶり", - "ないかく", - "ないこう", - "ないしょ", - "ないす", - "ないせん", - "ないそう", - "なおす", - "ながい", - "なくす", - "なげる", - "なこうど", - "なさけ", - "なたでここ", - "なっとう", - "なつやすみ", - "ななおし", - "なにごと", - "なにもの", - "なにわ", - "なのか", - "なふだ", - "なまいき", - "なまえ", - "なまみ", - "なみだ", - "なめらか", - "なめる", - "なやむ", - "ならう", - "ならび", - "ならぶ", - "なれる", - "なわとび", - "なわばり", - "にあう", - "にいがた", - "にうけ", - "におい", - "にかい", - "にがて", - "にきび", - "にくしみ", - "にくまん", - "にげる", - "にさんかたんそ", - "にしき", - "にせもの", - "にちじょう", - "にちようび", - "にっか", - "にっき", - "にっけい", - "にっこう", - "にっさん", - "にっしょく", - "にっすう", - "にっせき", - "にってい", - "になう", - "にほん", - "にまめ", - "にもつ", - "にやり", - "にゅういん", - "にりんしゃ", - "にわとり", - "にんい", - "にんか", - "にんき", - "にんげん", - "にんしき", - "にんずう", - "にんそう", - "にんたい", - "にんち", - "にんてい", - "にんにく", - "にんぷ", - "にんまり", - "にんむ", - "にんめい", - "にんよう", - "ぬいくぎ", - "ぬかす", - "ぬぐいとる", - "ぬぐう", - "ぬくもり", - "ぬすむ", - "ぬまえび", - "ぬめり", - "ぬらす", - "ぬんちゃく", - "ねあげ", - "ねいき", - "ねいる", - "ねいろ", - "ねぐせ", - "ねくたい", - "ねくら", - "ねこぜ", - "ねこむ", - "ねさげ", - "ねすごす", - "ねそべる", - "ねだん", - "ねつい", - "ねっしん", - "ねつぞう", - "ねったいぎょ", - "ねぶそく", - "ねふだ", - "ねぼう", - "ねほりはほり", - "ねまき", - "ねまわし", - "ねみみ", - "ねむい", - "ねむたい", - "ねもと", - "ねらう", - "ねわざ", - "ねんいり", - "ねんおし", - "ねんかん", - "ねんきん", - "ねんぐ", - "ねんざ", - "ねんし", - "ねんちゃく", - "ねんど", - "ねんぴ", - "ねんぶつ", - "ねんまつ", - "ねんりょう", - "ねんれい", - "のいず", - "のおづま", - "のがす", - "のきなみ", - "のこぎり", - "のこす", - "のこる", - "のせる", - "のぞく", - "のぞむ", - "のたまう", - "のちほど", - "のっく", - "のばす", - "のはら", - "のべる", - "のぼる", - "のみもの", - "のやま", - "のらいぬ", - "のらねこ", - "のりもの", - "のりゆき", - "のれん", - "のんき", - "ばあい", - "はあく", - "ばあさん", - "ばいか", - "ばいく", - "はいけん", - "はいご", - "はいしん", - "はいすい", - "はいせん", - "はいそう", - "はいち", - "ばいばい", - "はいれつ", - "はえる", - "はおる", - "はかい", - "ばかり", - "はかる", - "はくしゅ", - "はけん", - "はこぶ", - "はさみ", - "はさん", - "はしご", - "ばしょ", - "はしる", - "はせる", - "ぱそこん", - "はそん", - "はたん", - "はちみつ", - "はつおん", - "はっかく", - "はづき", - "はっきり", - "はっくつ", - "はっけん", - "はっこう", - "はっさん", - "はっしん", - "はったつ", - "はっちゅう", - "はってん", - "はっぴょう", - "はっぽう", - "はなす", - "はなび", - "はにかむ", - "はぶらし", - "はみがき", - "はむかう", - "はめつ", - "はやい", - "はやし", - "はらう", - "はろうぃん", - "はわい", - "はんい", - "はんえい", - "はんおん", - "はんかく", - "はんきょう", - "ばんぐみ", - "はんこ", - "はんしゃ", - "はんすう", - "はんだん", - "ぱんち", - "ぱんつ", - "はんてい", - "はんとし", - "はんのう", - "はんぱ", - "はんぶん", - "はんぺん", - "はんぼうき", - "はんめい", - "はんらん", - "はんろん", - "ひいき", - "ひうん", - "ひえる", - "ひかく", - "ひかり", - "ひかる", - "ひかん", - "ひくい", - "ひけつ", - "ひこうき", - "ひこく", - "ひさい", - "ひさしぶり", - "ひさん", - "びじゅつかん", - "ひしょ", - "ひそか", - "ひそむ", - "ひたむき", - "ひだり", - "ひたる", - "ひつぎ", - "ひっこし", - "ひっし", - "ひつじゅひん", - "ひっす", - "ひつぜん", - "ぴったり", - "ぴっちり", - "ひつよう", - "ひてい", - "ひとごみ", - "ひなまつり", - "ひなん", - "ひねる", - "ひはん", - "ひびく", - "ひひょう", - "ひほう", - "ひまわり", - "ひまん", - "ひみつ", - "ひめい", - "ひめじし", - "ひやけ", - "ひやす", - "ひよう", - "びょうき", - "ひらがな", - "ひらく", - "ひりつ", - "ひりょう", - "ひるま", - "ひるやすみ", - "ひれい", - "ひろい", - "ひろう", - "ひろき", - "ひろゆき", - "ひんかく", - "ひんけつ", - "ひんこん", - "ひんしゅ", - "ひんそう", - "ぴんち", - "ひんぱん", - "びんぼう", - "ふあん", - "ふいうち", - "ふうけい", - "ふうせん", - "ぷうたろう", - "ふうとう", - "ふうふ", - "ふえる", - "ふおん", - "ふかい", - "ふきん", - "ふくざつ", - "ふくぶくろ", - "ふこう", - "ふさい", - "ふしぎ", - "ふじみ", - "ふすま", - "ふせい", - "ふせぐ", - "ふそく", - "ぶたにく", - "ふたん", - "ふちょう", - "ふつう", - "ふつか", - "ふっかつ", - "ふっき", - "ふっこく", - "ぶどう", - "ふとる", - "ふとん", - "ふのう", - "ふはい", - "ふひょう", - "ふへん", - "ふまん", - "ふみん", - "ふめつ", - "ふめん", - "ふよう", - "ふりこ", - "ふりる", - "ふるい", - "ふんいき", - "ぶんがく", - "ぶんぐ", - "ふんしつ", - "ぶんせき", - "ふんそう", - "ぶんぽう", - "へいあん", - "へいおん", - "へいがい", - "へいき", - "へいげん", - "へいこう", - "へいさ", - "へいしゃ", - "へいせつ", - "へいそ", - "へいたく", - "へいてん", - "へいねつ", - "へいわ", - "へきが", - "へこむ", - "べにいろ", - "べにしょうが", - "へらす", - "へんかん", - "べんきょう", - "べんごし", - "へんさい", - "へんたい", - "べんり", - "ほあん", - "ほいく", - "ぼうぎょ", - "ほうこく", - "ほうそう", - "ほうほう", - "ほうもん", - "ほうりつ", - "ほえる", - "ほおん", - "ほかん", - "ほきょう", - "ぼきん", - "ほくろ", - "ほけつ", - "ほけん", - "ほこう", - "ほこる", - "ほしい", - "ほしつ", - "ほしゅ", - "ほしょう", - "ほせい", - "ほそい", - "ほそく", - "ほたて", - "ほたる", - "ぽちぶくろ", - "ほっきょく", - "ほっさ", - "ほったん", - "ほとんど", - "ほめる", - "ほんい", - "ほんき", - "ほんけ", - "ほんしつ", - "ほんやく", - "まいにち", - "まかい", - "まかせる", - "まがる", - "まける", - "まこと", - "まさつ", - "まじめ", - "ますく", - "まぜる", - "まつり", - "まとめ", - "まなぶ", - "まぬけ", - "まねく", - "まほう", - "まもる", - "まゆげ", - "まよう", - "まろやか", - "まわす", - "まわり", - "まわる", - "まんが", - "まんきつ", - "まんぞく", - "まんなか", - "みいら", - "みうち", - "みえる", - "みがく", - "みかた", - "みかん", - "みけん", - "みこん", - "みじかい", - "みすい", - "みすえる", - "みせる", - "みっか", - "みつかる", - "みつける", - "みてい", - "みとめる", - "みなと", - "みなみかさい", - "みねらる", - "みのう", - "みのがす", - "みほん", - "みもと", - "みやげ", - "みらい", - "みりょく", - "みわく", - "みんか", - "みんぞく", - "むいか", - "むえき", - "むえん", - "むかい", - "むかう", - "むかえ", - "むかし", - "むぎちゃ", - "むける", - "むげん", - "むさぼる", - "むしあつい", - "むしば", - "むじゅん", - "むしろ", - "むすう", - "むすこ", - "むすぶ", - "むすめ", - "むせる", - "むせん", - "むちゅう", - "むなしい", - "むのう", - "むやみ", - "むよう", - "むらさき", - "むりょう", - "むろん", - "めいあん", - "めいうん", - "めいえん", - "めいかく", - "めいきょく", - "めいさい", - "めいし", - "めいそう", - "めいぶつ", - "めいれい", - "めいわく", - "めぐまれる", - "めざす", - "めした", - "めずらしい", - "めだつ", - "めまい", - "めやす", - "めんきょ", - "めんせき", - "めんどう", - "もうしあげる", - "もうどうけん", - "もえる", - "もくし", - "もくてき", - "もくようび", - "もちろん", - "もどる", - "もらう", - "もんく", - "もんだい", - "やおや", - "やける", - "やさい", - "やさしい", - "やすい", - "やすたろう", - "やすみ", - "やせる", - "やそう", - "やたい", - "やちん", - "やっと", - "やっぱり", - "やぶる", - "やめる", - "ややこしい", - "やよい", - "やわらかい", - "ゆうき", - "ゆうびんきょく", - "ゆうべ", - "ゆうめい", - "ゆけつ", - "ゆしゅつ", - "ゆせん", - "ゆそう", - "ゆたか", - "ゆちゃく", - "ゆでる", - "ゆにゅう", - "ゆびわ", - "ゆらい", - "ゆれる", - "ようい", - "ようか", - "ようきゅう", - "ようじ", - "ようす", - "ようちえん", - "よかぜ", - "よかん", - "よきん", - "よくせい", - "よくぼう", - "よけい", - "よごれる", - "よさん", - "よしゅう", - "よそう", - "よそく", - "よっか", - "よてい", - "よどがわく", - "よねつ", - "よやく", - "よゆう", - "よろこぶ", - "よろしい", - "らいう", - "らくがき", - "らくご", - "らくさつ", - "らくだ", - "らしんばん", - "らせん", - "らぞく", - "らたい", - "らっか", - "られつ", - "りえき", - "りかい", - "りきさく", - "りきせつ", - "りくぐん", - "りくつ", - "りけん", - "りこう", - "りせい", - "りそう", - "りそく", - "りてん", - "りねん", - "りゆう", - "りゅうがく", - "りよう", - "りょうり", - "りょかん", - "りょくちゃ", - "りょこう", - "りりく", - "りれき", - "りろん", - "りんご", - "るいけい", - "るいさい", - "るいじ", - "るいせき", - "るすばん", - "るりがわら", - "れいかん", - "れいぎ", - "れいせい", - "れいぞうこ", - "れいとう", - "れいぼう", - "れきし", - "れきだい", - "れんあい", - "れんけい", - "れんこん", - "れんさい", - "れんしゅう", - "れんぞく", - "れんらく", - "ろうか", - "ろうご", - "ろうじん", - "ろうそく", - "ろくが", - "ろこつ", - "ろじうら", - "ろしゅつ", - "ろせん", - "ろてん", - "ろめん", - "ろれつ", - "ろんぎ", - "ろんぱ", - "ろんぶん", - "ろんり", - "わかす", - "わかめ", - "わかやま", - "わかれる", - "わしつ", - "わじまし", - "わすれもの", - "わらう", - "われる" -]; +export const wordlist: string[] = `あいこくしん +あいさつ +あいだ +あおぞら +あかちゃん +あきる +あけがた +あける +あこがれる +あさい +あさひ +あしあと +あじわう +あずかる +あずき +あそぶ +あたえる +あたためる +あたりまえ +あたる +あつい +あつかう +あっしゅく +あつまり +あつめる +あてな +あてはまる +あひる +あぶら +あぶる +あふれる +あまい +あまど +あまやかす +あまり +あみもの +あめりか +あやまる +あゆむ +あらいぐま +あらし +あらすじ +あらためる +あらゆる +あらわす +ありがとう +あわせる +あわてる +あんい +あんがい +あんこ +あんぜん +あんてい +あんない +あんまり +いいだす +いおん +いがい +いがく +いきおい +いきなり +いきもの +いきる +いくじ +いくぶん +いけばな +いけん +いこう +いこく +いこつ +いさましい +いさん +いしき +いじゅう +いじょう +いじわる +いずみ +いずれ +いせい +いせえび +いせかい +いせき +いぜん +いそうろう +いそがしい +いだい +いだく +いたずら +いたみ +いたりあ +いちおう +いちじ +いちど +いちば +いちぶ +いちりゅう +いつか +いっしゅん +いっせい +いっそう +いったん +いっち +いってい +いっぽう +いてざ +いてん +いどう +いとこ +いない +いなか +いねむり +いのち +いのる +いはつ +いばる +いはん +いびき +いひん +いふく +いへん +いほう +いみん +いもうと +いもたれ +いもり +いやがる +いやす +いよかん +いよく +いらい +いらすと +いりぐち +いりょう +いれい +いれもの +いれる +いろえんぴつ +いわい +いわう +いわかん +いわば +いわゆる +いんげんまめ +いんさつ +いんしょう +いんよう +うえき +うえる +うおざ +うがい +うかぶ +うかべる +うきわ +うくらいな +うくれれ +うけたまわる +うけつけ +うけとる +うけもつ +うける +うごかす +うごく +うこん +うさぎ +うしなう +うしろがみ +うすい +うすぎ +うすぐらい +うすめる +うせつ +うちあわせ +うちがわ +うちき +うちゅう +うっかり +うつくしい +うったえる +うつる +うどん +うなぎ +うなじ +うなずく +うなる +うねる +うのう +うぶげ +うぶごえ +うまれる +うめる +うもう +うやまう +うよく +うらがえす +うらぐち +うらない +うりあげ +うりきれ +うるさい +うれしい +うれゆき +うれる +うろこ +うわき +うわさ +うんこう +うんちん +うんてん +うんどう +えいえん +えいが +えいきょう +えいご +えいせい +えいぶん +えいよう +えいわ +えおり +えがお +えがく +えきたい +えくせる +えしゃく +えすて +えつらん +えのぐ +えほうまき +えほん +えまき +えもじ +えもの +えらい +えらぶ +えりあ +えんえん +えんかい +えんぎ +えんげき +えんしゅう +えんぜつ +えんそく +えんちょう +えんとつ +おいかける +おいこす +おいしい +おいつく +おうえん +おうさま +おうじ +おうせつ +おうたい +おうふく +おうべい +おうよう +おえる +おおい +おおう +おおどおり +おおや +おおよそ +おかえり +おかず +おがむ +おかわり +おぎなう +おきる +おくさま +おくじょう +おくりがな +おくる +おくれる +おこす +おこなう +おこる +おさえる +おさない +おさめる +おしいれ +おしえる +おじぎ +おじさん +おしゃれ +おそらく +おそわる +おたがい +おたく +おだやか +おちつく +おっと +おつり +おでかけ +おとしもの +おとなしい +おどり +おどろかす +おばさん +おまいり +おめでとう +おもいで +おもう +おもたい +おもちゃ +おやつ +おやゆび +およぼす +おらんだ +おろす +おんがく +おんけい +おんしゃ +おんせん +おんだん +おんちゅう +おんどけい +かあつ +かいが +がいき +がいけん +がいこう +かいさつ +かいしゃ +かいすいよく +かいぜん +かいぞうど +かいつう +かいてん +かいとう +かいふく +がいへき +かいほう +かいよう +がいらい +かいわ +かえる +かおり +かかえる +かがく +かがし +かがみ +かくご +かくとく +かざる +がぞう +かたい +かたち +がちょう +がっきゅう +がっこう +がっさん +がっしょう +かなざわし +かのう +がはく +かぶか +かほう +かほご +かまう +かまぼこ +かめれおん +かゆい +かようび +からい +かるい +かろう +かわく +かわら +がんか +かんけい +かんこう +かんしゃ +かんそう +かんたん +かんち +がんばる +きあい +きあつ +きいろ +ぎいん +きうい +きうん +きえる +きおう +きおく +きおち +きおん +きかい +きかく +きかんしゃ +ききて +きくばり +きくらげ +きけんせい +きこう +きこえる +きこく +きさい +きさく +きさま +きさらぎ +ぎじかがく +ぎしき +ぎじたいけん +ぎじにってい +ぎじゅつしゃ +きすう +きせい +きせき +きせつ +きそう +きぞく +きぞん +きたえる +きちょう +きつえん +ぎっちり +きつつき +きつね +きてい +きどう +きどく +きない +きなが +きなこ +きぬごし +きねん +きのう +きのした +きはく +きびしい +きひん +きふく +きぶん +きぼう +きほん +きまる +きみつ +きむずかしい +きめる +きもだめし +きもち +きもの +きゃく +きやく +ぎゅうにく +きよう +きょうりゅう +きらい +きらく +きりん +きれい +きれつ +きろく +ぎろん +きわめる +ぎんいろ +きんかくじ +きんじょ +きんようび +ぐあい +くいず +くうかん +くうき +くうぐん +くうこう +ぐうせい +くうそう +ぐうたら +くうふく +くうぼ +くかん +くきょう +くげん +ぐこう +くさい +くさき +くさばな +くさる +くしゃみ +くしょう +くすのき +くすりゆび +くせげ +くせん +ぐたいてき +くださる +くたびれる +くちこみ +くちさき +くつした +ぐっすり +くつろぐ +くとうてん +くどく +くなん +くねくね +くのう +くふう +くみあわせ +くみたてる +くめる +くやくしょ +くらす +くらべる +くるま +くれる +くろう +くわしい +ぐんかん +ぐんしょく +ぐんたい +ぐんて +けあな +けいかく +けいけん +けいこ +けいさつ +げいじゅつ +けいたい +げいのうじん +けいれき +けいろ +けおとす +けおりもの +げきか +げきげん +げきだん +げきちん +げきとつ +げきは +げきやく +げこう +げこくじょう +げざい +けさき +げざん +けしき +けしごむ +けしょう +げすと +けたば +けちゃっぷ +けちらす +けつあつ +けつい +けつえき +けっこん +けつじょ +けっせき +けってい +けつまつ +げつようび +げつれい +けつろん +げどく +けとばす +けとる +けなげ +けなす +けなみ +けぬき +げねつ +けねん +けはい +げひん +けぶかい +げぼく +けまり +けみかる +けむし +けむり +けもの +けらい +けろけろ +けわしい +けんい +けんえつ +けんお +けんか +げんき +けんげん +けんこう +けんさく +けんしゅう +けんすう +げんそう +けんちく +けんてい +けんとう +けんない +けんにん +げんぶつ +けんま +けんみん +けんめい +けんらん +けんり +こあくま +こいぬ +こいびと +ごうい +こうえん +こうおん +こうかん +ごうきゅう +ごうけい +こうこう +こうさい +こうじ +こうすい +ごうせい +こうそく +こうたい +こうちゃ +こうつう +こうてい +こうどう +こうない +こうはい +ごうほう +ごうまん +こうもく +こうりつ +こえる +こおり +ごかい +ごがつ +ごかん +こくご +こくさい +こくとう +こくない +こくはく +こぐま +こけい +こける +ここのか +こころ +こさめ +こしつ +こすう +こせい +こせき +こぜん +こそだて +こたい +こたえる +こたつ +こちょう +こっか +こつこつ +こつばん +こつぶ +こてい +こてん +ことがら +ことし +ことば +ことり +こなごな +こねこね +このまま +このみ +このよ +ごはん +こひつじ +こふう +こふん +こぼれる +ごまあぶら +こまかい +ごますり +こまつな +こまる +こむぎこ +こもじ +こもち +こもの +こもん +こやく +こやま +こゆう +こゆび +こよい +こよう +こりる +これくしょん +ころっけ +こわもて +こわれる +こんいん +こんかい +こんき +こんしゅう +こんすい +こんだて +こんとん +こんなん +こんびに +こんぽん +こんまけ +こんや +こんれい +こんわく +ざいえき +さいかい +さいきん +ざいげん +ざいこ +さいしょ +さいせい +ざいたく +ざいちゅう +さいてき +ざいりょう +さうな +さかいし +さがす +さかな +さかみち +さがる +さぎょう +さくし +さくひん +さくら +さこく +さこつ +さずかる +ざせき +さたん +さつえい +ざつおん +ざっか +ざつがく +さっきょく +ざっし +さつじん +ざっそう +さつたば +さつまいも +さてい +さといも +さとう +さとおや +さとし +さとる +さのう +さばく +さびしい +さべつ +さほう +さほど +さます +さみしい +さみだれ +さむけ +さめる +さやえんどう +さゆう +さよう +さよく +さらだ +ざるそば +さわやか +さわる +さんいん +さんか +さんきゃく +さんこう +さんさい +ざんしょ +さんすう +さんせい +さんそ +さんち +さんま +さんみ +さんらん +しあい +しあげ +しあさって +しあわせ +しいく +しいん +しうち +しえい +しおけ +しかい +しかく +じかん +しごと +しすう +じだい +したうけ +したぎ +したて +したみ +しちょう +しちりん +しっかり +しつじ +しつもん +してい +してき +してつ +じてん +じどう +しなぎれ +しなもの +しなん +しねま +しねん +しのぐ +しのぶ +しはい +しばかり +しはつ +しはらい +しはん +しひょう +しふく +じぶん +しへい +しほう +しほん +しまう +しまる +しみん +しむける +じむしょ +しめい +しめる +しもん +しゃいん +しゃうん +しゃおん +じゃがいも +しやくしょ +しゃくほう +しゃけん +しゃこ +しゃざい +しゃしん +しゃせん +しゃそう +しゃたい +しゃちょう +しゃっきん +じゃま +しゃりん +しゃれい +じゆう +じゅうしょ +しゅくはく +じゅしん +しゅっせき +しゅみ +しゅらば +じゅんばん +しょうかい +しょくたく +しょっけん +しょどう +しょもつ +しらせる +しらべる +しんか +しんこう +じんじゃ +しんせいじ +しんちく +しんりん +すあげ +すあし +すあな +ずあん +すいえい +すいか +すいとう +ずいぶん +すいようび +すうがく +すうじつ +すうせん +すおどり +すきま +すくう +すくない +すける +すごい +すこし +ずさん +すずしい +すすむ +すすめる +すっかり +ずっしり +ずっと +すてき +すてる +すねる +すのこ +すはだ +すばらしい +ずひょう +ずぶぬれ +すぶり +すふれ +すべて +すべる +ずほう +すぼん +すまい +すめし +すもう +すやき +すらすら +するめ +すれちがう +すろっと +すわる +すんぜん +すんぽう +せあぶら +せいかつ +せいげん +せいじ +せいよう +せおう +せかいかん +せきにん +せきむ +せきゆ +せきらんうん +せけん +せこう +せすじ +せたい +せたけ +せっかく +せっきゃく +ぜっく +せっけん +せっこつ +せっさたくま +せつぞく +せつだん +せつでん +せっぱん +せつび +せつぶん +せつめい +せつりつ +せなか +せのび +せはば +せびろ +せぼね +せまい +せまる +せめる +せもたれ +せりふ +ぜんあく +せんい +せんえい +せんか +せんきょ +せんく +せんげん +ぜんご +せんさい +せんしゅ +せんすい +せんせい +せんぞ +せんたく +せんちょう +せんてい +せんとう +せんぬき +せんねん +せんぱい +ぜんぶ +ぜんぽう +せんむ +せんめんじょ +せんもん +せんやく +せんゆう +せんよう +ぜんら +ぜんりゃく +せんれい +せんろ +そあく +そいとげる +そいね +そうがんきょう +そうき +そうご +そうしん +そうだん +そうなん +そうび +そうめん +そうり +そえもの +そえん +そがい +そげき +そこう +そこそこ +そざい +そしな +そせい +そせん +そそぐ +そだてる +そつう +そつえん +そっかん +そつぎょう +そっけつ +そっこう +そっせん +そっと +そとがわ +そとづら +そなえる +そなた +そふぼ +そぼく +そぼろ +そまつ +そまる +そむく +そむりえ +そめる +そもそも +そよかぜ +そらまめ +そろう +そんかい +そんけい +そんざい +そんしつ +そんぞく +そんちょう +ぞんび +ぞんぶん +そんみん +たあい +たいいん +たいうん +たいえき +たいおう +だいがく +たいき +たいぐう +たいけん +たいこ +たいざい +だいじょうぶ +だいすき +たいせつ +たいそう +だいたい +たいちょう +たいてい +だいどころ +たいない +たいねつ +たいのう +たいはん +だいひょう +たいふう +たいへん +たいほ +たいまつばな +たいみんぐ +たいむ +たいめん +たいやき +たいよう +たいら +たいりょく +たいる +たいわん +たうえ +たえる +たおす +たおる +たおれる +たかい +たかね +たきび +たくさん +たこく +たこやき +たさい +たしざん +だじゃれ +たすける +たずさわる +たそがれ +たたかう +たたく +ただしい +たたみ +たちばな +だっかい +だっきゃく +だっこ +だっしゅつ +だったい +たてる +たとえる +たなばた +たにん +たぬき +たのしみ +たはつ +たぶん +たべる +たぼう +たまご +たまる +だむる +ためいき +ためす +ためる +たもつ +たやすい +たよる +たらす +たりきほんがん +たりょう +たりる +たると +たれる +たれんと +たろっと +たわむれる +だんあつ +たんい +たんおん +たんか +たんき +たんけん +たんご +たんさん +たんじょうび +だんせい +たんそく +たんたい +だんち +たんてい +たんとう +だんな +たんにん +だんねつ +たんのう +たんぴん +だんぼう +たんまつ +たんめい +だんれつ +だんろ +だんわ +ちあい +ちあん +ちいき +ちいさい +ちえん +ちかい +ちから +ちきゅう +ちきん +ちけいず +ちけん +ちこく +ちさい +ちしき +ちしりょう +ちせい +ちそう +ちたい +ちたん +ちちおや +ちつじょ +ちてき +ちてん +ちぬき +ちぬり +ちのう +ちひょう +ちへいせん +ちほう +ちまた +ちみつ +ちみどろ +ちめいど +ちゃんこなべ +ちゅうい +ちゆりょく +ちょうし +ちょさくけん +ちらし +ちらみ +ちりがみ +ちりょう +ちるど +ちわわ +ちんたい +ちんもく +ついか +ついたち +つうか +つうじょう +つうはん +つうわ +つかう +つかれる +つくね +つくる +つけね +つける +つごう +つたえる +つづく +つつじ +つつむ +つとめる +つながる +つなみ +つねづね +つのる +つぶす +つまらない +つまる +つみき +つめたい +つもり +つもる +つよい +つるぼ +つるみく +つわもの +つわり +てあし +てあて +てあみ +ていおん +ていか +ていき +ていけい +ていこく +ていさつ +ていし +ていせい +ていたい +ていど +ていねい +ていひょう +ていへん +ていぼう +てうち +ておくれ +てきとう +てくび +でこぼこ +てさぎょう +てさげ +てすり +てそう +てちがい +てちょう +てつがく +てつづき +でっぱ +てつぼう +てつや +でぬかえ +てぬき +てぬぐい +てのひら +てはい +てぶくろ +てふだ +てほどき +てほん +てまえ +てまきずし +てみじか +てみやげ +てらす +てれび +てわけ +てわたし +でんあつ +てんいん +てんかい +てんき +てんぐ +てんけん +てんごく +てんさい +てんし +てんすう +でんち +てんてき +てんとう +てんない +てんぷら +てんぼうだい +てんめつ +てんらんかい +でんりょく +でんわ +どあい +といれ +どうかん +とうきゅう +どうぐ +とうし +とうむぎ +とおい +とおか +とおく +とおす +とおる +とかい +とかす +ときおり +ときどき +とくい +とくしゅう +とくてん +とくに +とくべつ +とけい +とける +とこや +とさか +としょかん +とそう +とたん +とちゅう +とっきゅう +とっくん +とつぜん +とつにゅう +とどける +ととのえる +とない +となえる +となり +とのさま +とばす +どぶがわ +とほう +とまる +とめる +ともだち +ともる +どようび +とらえる +とんかつ +どんぶり +ないかく +ないこう +ないしょ +ないす +ないせん +ないそう +なおす +ながい +なくす +なげる +なこうど +なさけ +なたでここ +なっとう +なつやすみ +ななおし +なにごと +なにもの +なにわ +なのか +なふだ +なまいき +なまえ +なまみ +なみだ +なめらか +なめる +なやむ +ならう +ならび +ならぶ +なれる +なわとび +なわばり +にあう +にいがた +にうけ +におい +にかい +にがて +にきび +にくしみ +にくまん +にげる +にさんかたんそ +にしき +にせもの +にちじょう +にちようび +にっか +にっき +にっけい +にっこう +にっさん +にっしょく +にっすう +にっせき +にってい +になう +にほん +にまめ +にもつ +にやり +にゅういん +にりんしゃ +にわとり +にんい +にんか +にんき +にんげん +にんしき +にんずう +にんそう +にんたい +にんち +にんてい +にんにく +にんぷ +にんまり +にんむ +にんめい +にんよう +ぬいくぎ +ぬかす +ぬぐいとる +ぬぐう +ぬくもり +ぬすむ +ぬまえび +ぬめり +ぬらす +ぬんちゃく +ねあげ +ねいき +ねいる +ねいろ +ねぐせ +ねくたい +ねくら +ねこぜ +ねこむ +ねさげ +ねすごす +ねそべる +ねだん +ねつい +ねっしん +ねつぞう +ねったいぎょ +ねぶそく +ねふだ +ねぼう +ねほりはほり +ねまき +ねまわし +ねみみ +ねむい +ねむたい +ねもと +ねらう +ねわざ +ねんいり +ねんおし +ねんかん +ねんきん +ねんぐ +ねんざ +ねんし +ねんちゃく +ねんど +ねんぴ +ねんぶつ +ねんまつ +ねんりょう +ねんれい +のいず +のおづま +のがす +のきなみ +のこぎり +のこす +のこる +のせる +のぞく +のぞむ +のたまう +のちほど +のっく +のばす +のはら +のべる +のぼる +のみもの +のやま +のらいぬ +のらねこ +のりもの +のりゆき +のれん +のんき +ばあい +はあく +ばあさん +ばいか +ばいく +はいけん +はいご +はいしん +はいすい +はいせん +はいそう +はいち +ばいばい +はいれつ +はえる +はおる +はかい +ばかり +はかる +はくしゅ +はけん +はこぶ +はさみ +はさん +はしご +ばしょ +はしる +はせる +ぱそこん +はそん +はたん +はちみつ +はつおん +はっかく +はづき +はっきり +はっくつ +はっけん +はっこう +はっさん +はっしん +はったつ +はっちゅう +はってん +はっぴょう +はっぽう +はなす +はなび +はにかむ +はぶらし +はみがき +はむかう +はめつ +はやい +はやし +はらう +はろうぃん +はわい +はんい +はんえい +はんおん +はんかく +はんきょう +ばんぐみ +はんこ +はんしゃ +はんすう +はんだん +ぱんち +ぱんつ +はんてい +はんとし +はんのう +はんぱ +はんぶん +はんぺん +はんぼうき +はんめい +はんらん +はんろん +ひいき +ひうん +ひえる +ひかく +ひかり +ひかる +ひかん +ひくい +ひけつ +ひこうき +ひこく +ひさい +ひさしぶり +ひさん +びじゅつかん +ひしょ +ひそか +ひそむ +ひたむき +ひだり +ひたる +ひつぎ +ひっこし +ひっし +ひつじゅひん +ひっす +ひつぜん +ぴったり +ぴっちり +ひつよう +ひてい +ひとごみ +ひなまつり +ひなん +ひねる +ひはん +ひびく +ひひょう +ひほう +ひまわり +ひまん +ひみつ +ひめい +ひめじし +ひやけ +ひやす +ひよう +びょうき +ひらがな +ひらく +ひりつ +ひりょう +ひるま +ひるやすみ +ひれい +ひろい +ひろう +ひろき +ひろゆき +ひんかく +ひんけつ +ひんこん +ひんしゅ +ひんそう +ぴんち +ひんぱん +びんぼう +ふあん +ふいうち +ふうけい +ふうせん +ぷうたろう +ふうとう +ふうふ +ふえる +ふおん +ふかい +ふきん +ふくざつ +ふくぶくろ +ふこう +ふさい +ふしぎ +ふじみ +ふすま +ふせい +ふせぐ +ふそく +ぶたにく +ふたん +ふちょう +ふつう +ふつか +ふっかつ +ふっき +ふっこく +ぶどう +ふとる +ふとん +ふのう +ふはい +ふひょう +ふへん +ふまん +ふみん +ふめつ +ふめん +ふよう +ふりこ +ふりる +ふるい +ふんいき +ぶんがく +ぶんぐ +ふんしつ +ぶんせき +ふんそう +ぶんぽう +へいあん +へいおん +へいがい +へいき +へいげん +へいこう +へいさ +へいしゃ +へいせつ +へいそ +へいたく +へいてん +へいねつ +へいわ +へきが +へこむ +べにいろ +べにしょうが +へらす +へんかん +べんきょう +べんごし +へんさい +へんたい +べんり +ほあん +ほいく +ぼうぎょ +ほうこく +ほうそう +ほうほう +ほうもん +ほうりつ +ほえる +ほおん +ほかん +ほきょう +ぼきん +ほくろ +ほけつ +ほけん +ほこう +ほこる +ほしい +ほしつ +ほしゅ +ほしょう +ほせい +ほそい +ほそく +ほたて +ほたる +ぽちぶくろ +ほっきょく +ほっさ +ほったん +ほとんど +ほめる +ほんい +ほんき +ほんけ +ほんしつ +ほんやく +まいにち +まかい +まかせる +まがる +まける +まこと +まさつ +まじめ +ますく +まぜる +まつり +まとめ +まなぶ +まぬけ +まねく +まほう +まもる +まゆげ +まよう +まろやか +まわす +まわり +まわる +まんが +まんきつ +まんぞく +まんなか +みいら +みうち +みえる +みがく +みかた +みかん +みけん +みこん +みじかい +みすい +みすえる +みせる +みっか +みつかる +みつける +みてい +みとめる +みなと +みなみかさい +みねらる +みのう +みのがす +みほん +みもと +みやげ +みらい +みりょく +みわく +みんか +みんぞく +むいか +むえき +むえん +むかい +むかう +むかえ +むかし +むぎちゃ +むける +むげん +むさぼる +むしあつい +むしば +むじゅん +むしろ +むすう +むすこ +むすぶ +むすめ +むせる +むせん +むちゅう +むなしい +むのう +むやみ +むよう +むらさき +むりょう +むろん +めいあん +めいうん +めいえん +めいかく +めいきょく +めいさい +めいし +めいそう +めいぶつ +めいれい +めいわく +めぐまれる +めざす +めした +めずらしい +めだつ +めまい +めやす +めんきょ +めんせき +めんどう +もうしあげる +もうどうけん +もえる +もくし +もくてき +もくようび +もちろん +もどる +もらう +もんく +もんだい +やおや +やける +やさい +やさしい +やすい +やすたろう +やすみ +やせる +やそう +やたい +やちん +やっと +やっぱり +やぶる +やめる +ややこしい +やよい +やわらかい +ゆうき +ゆうびんきょく +ゆうべ +ゆうめい +ゆけつ +ゆしゅつ +ゆせん +ゆそう +ゆたか +ゆちゃく +ゆでる +ゆにゅう +ゆびわ +ゆらい +ゆれる +ようい +ようか +ようきゅう +ようじ +ようす +ようちえん +よかぜ +よかん +よきん +よくせい +よくぼう +よけい +よごれる +よさん +よしゅう +よそう +よそく +よっか +よてい +よどがわく +よねつ +よやく +よゆう +よろこぶ +よろしい +らいう +らくがき +らくご +らくさつ +らくだ +らしんばん +らせん +らぞく +らたい +らっか +られつ +りえき +りかい +りきさく +りきせつ +りくぐん +りくつ +りけん +りこう +りせい +りそう +りそく +りてん +りねん +りゆう +りゅうがく +りよう +りょうり +りょかん +りょくちゃ +りょこう +りりく +りれき +りろん +りんご +るいけい +るいさい +るいじ +るいせき +るすばん +るりがわら +れいかん +れいぎ +れいせい +れいぞうこ +れいとう +れいぼう +れきし +れきだい +れんあい +れんけい +れんこん +れんさい +れんしゅう +れんぞく +れんらく +ろうか +ろうご +ろうじん +ろうそく +ろくが +ろこつ +ろじうら +ろしゅつ +ろせん +ろてん +ろめん +ろれつ +ろんぎ +ろんぱ +ろんぶん +ろんり +わかす +わかめ +わかやま +わかれる +わしつ +わじまし +わすれもの +わらう +われる`.split("\n"); diff --git a/src/bip39/wordlists/korean.ts b/src/bip39/wordlists/korean.ts index e2a5c7d..eb8a367 100644 --- a/src/bip39/wordlists/korean.ts +++ b/src/bip39/wordlists/korean.ts @@ -1,2050 +1,2048 @@ -export const wordlist: string[] = [ - "가격", - "가끔", - "가난", - "가능", - "가득", - "가르침", - "가뭄", - "가방", - "가상", - "가슴", - "가운데", - "가을", - "가이드", - "가입", - "가장", - "가정", - "가족", - "가죽", - "각오", - "각자", - "간격", - "간부", - "간섭", - "간장", - "간접", - "간판", - "갈등", - "갈비", - "갈색", - "갈증", - "감각", - "감기", - "감소", - "감수성", - "감자", - "감정", - "갑자기", - "강남", - "강당", - "강도", - "강력히", - "강변", - "강북", - "강사", - "강수량", - "강아지", - "강원도", - "강의", - "강제", - "강조", - "같이", - "개구리", - "개나리", - "개방", - "개별", - "개선", - "개성", - "개인", - "객관적", - "거실", - "거액", - "거울", - "거짓", - "거품", - "걱정", - "건강", - "건물", - "건설", - "건조", - "건축", - "걸음", - "검사", - "검토", - "게시판", - "게임", - "겨울", - "견해", - "결과", - "결국", - "결론", - "결석", - "결승", - "결심", - "결정", - "결혼", - "경계", - "경고", - "경기", - "경력", - "경복궁", - "경비", - "경상도", - "경영", - "경우", - "경쟁", - "경제", - "경주", - "경찰", - "경치", - "경향", - "경험", - "계곡", - "계단", - "계란", - "계산", - "계속", - "계약", - "계절", - "계층", - "계획", - "고객", - "고구려", - "고궁", - "고급", - "고등학생", - "고무신", - "고민", - "고양이", - "고장", - "고전", - "고집", - "고춧가루", - "고통", - "고향", - "곡식", - "골목", - "골짜기", - "골프", - "공간", - "공개", - "공격", - "공군", - "공급", - "공기", - "공동", - "공무원", - "공부", - "공사", - "공식", - "공업", - "공연", - "공원", - "공장", - "공짜", - "공책", - "공통", - "공포", - "공항", - "공휴일", - "과목", - "과일", - "과장", - "과정", - "과학", - "관객", - "관계", - "관광", - "관념", - "관람", - "관련", - "관리", - "관습", - "관심", - "관점", - "관찰", - "광경", - "광고", - "광장", - "광주", - "괴로움", - "굉장히", - "교과서", - "교문", - "교복", - "교실", - "교양", - "교육", - "교장", - "교직", - "교통", - "교환", - "교훈", - "구경", - "구름", - "구멍", - "구별", - "구분", - "구석", - "구성", - "구속", - "구역", - "구입", - "구청", - "구체적", - "국가", - "국기", - "국내", - "국립", - "국물", - "국민", - "국수", - "국어", - "국왕", - "국적", - "국제", - "국회", - "군대", - "군사", - "군인", - "궁극적", - "권리", - "권위", - "권투", - "귀국", - "귀신", - "규정", - "규칙", - "균형", - "그날", - "그냥", - "그늘", - "그러나", - "그룹", - "그릇", - "그림", - "그제서야", - "그토록", - "극복", - "극히", - "근거", - "근교", - "근래", - "근로", - "근무", - "근본", - "근원", - "근육", - "근처", - "글씨", - "글자", - "금강산", - "금고", - "금년", - "금메달", - "금액", - "금연", - "금요일", - "금지", - "긍정적", - "기간", - "기관", - "기념", - "기능", - "기독교", - "기둥", - "기록", - "기름", - "기법", - "기본", - "기분", - "기쁨", - "기숙사", - "기술", - "기억", - "기업", - "기온", - "기운", - "기원", - "기적", - "기준", - "기침", - "기혼", - "기획", - "긴급", - "긴장", - "길이", - "김밥", - "김치", - "김포공항", - "깍두기", - "깜빡", - "깨달음", - "깨소금", - "껍질", - "꼭대기", - "꽃잎", - "나들이", - "나란히", - "나머지", - "나물", - "나침반", - "나흘", - "낙엽", - "난방", - "날개", - "날씨", - "날짜", - "남녀", - "남대문", - "남매", - "남산", - "남자", - "남편", - "남학생", - "낭비", - "낱말", - "내년", - "내용", - "내일", - "냄비", - "냄새", - "냇물", - "냉동", - "냉면", - "냉방", - "냉장고", - "넥타이", - "넷째", - "노동", - "노란색", - "노력", - "노인", - "녹음", - "녹차", - "녹화", - "논리", - "논문", - "논쟁", - "놀이", - "농구", - "농담", - "농민", - "농부", - "농업", - "농장", - "농촌", - "높이", - "눈동자", - "눈물", - "눈썹", - "뉴욕", - "느낌", - "늑대", - "능동적", - "능력", - "다방", - "다양성", - "다음", - "다이어트", - "다행", - "단계", - "단골", - "단독", - "단맛", - "단순", - "단어", - "단위", - "단점", - "단체", - "단추", - "단편", - "단풍", - "달걀", - "달러", - "달력", - "달리", - "닭고기", - "담당", - "담배", - "담요", - "담임", - "답변", - "답장", - "당근", - "당분간", - "당연히", - "당장", - "대규모", - "대낮", - "대단히", - "대답", - "대도시", - "대략", - "대량", - "대륙", - "대문", - "대부분", - "대신", - "대응", - "대장", - "대전", - "대접", - "대중", - "대책", - "대출", - "대충", - "대통령", - "대학", - "대한민국", - "대합실", - "대형", - "덩어리", - "데이트", - "도대체", - "도덕", - "도둑", - "도망", - "도서관", - "도심", - "도움", - "도입", - "도자기", - "도저히", - "도전", - "도중", - "도착", - "독감", - "독립", - "독서", - "독일", - "독창적", - "동화책", - "뒷모습", - "뒷산", - "딸아이", - "마누라", - "마늘", - "마당", - "마라톤", - "마련", - "마무리", - "마사지", - "마약", - "마요네즈", - "마을", - "마음", - "마이크", - "마중", - "마지막", - "마찬가지", - "마찰", - "마흔", - "막걸리", - "막내", - "막상", - "만남", - "만두", - "만세", - "만약", - "만일", - "만점", - "만족", - "만화", - "많이", - "말기", - "말씀", - "말투", - "맘대로", - "망원경", - "매년", - "매달", - "매력", - "매번", - "매스컴", - "매일", - "매장", - "맥주", - "먹이", - "먼저", - "먼지", - "멀리", - "메일", - "며느리", - "며칠", - "면담", - "멸치", - "명단", - "명령", - "명예", - "명의", - "명절", - "명칭", - "명함", - "모금", - "모니터", - "모델", - "모든", - "모범", - "모습", - "모양", - "모임", - "모조리", - "모집", - "모퉁이", - "목걸이", - "목록", - "목사", - "목소리", - "목숨", - "목적", - "목표", - "몰래", - "몸매", - "몸무게", - "몸살", - "몸속", - "몸짓", - "몸통", - "몹시", - "무관심", - "무궁화", - "무더위", - "무덤", - "무릎", - "무슨", - "무엇", - "무역", - "무용", - "무조건", - "무지개", - "무척", - "문구", - "문득", - "문법", - "문서", - "문제", - "문학", - "문화", - "물가", - "물건", - "물결", - "물고기", - "물론", - "물리학", - "물음", - "물질", - "물체", - "미국", - "미디어", - "미사일", - "미술", - "미역", - "미용실", - "미움", - "미인", - "미팅", - "미혼", - "민간", - "민족", - "민주", - "믿음", - "밀가루", - "밀리미터", - "밑바닥", - "바가지", - "바구니", - "바나나", - "바늘", - "바닥", - "바닷가", - "바람", - "바이러스", - "바탕", - "박물관", - "박사", - "박수", - "반대", - "반드시", - "반말", - "반발", - "반성", - "반응", - "반장", - "반죽", - "반지", - "반찬", - "받침", - "발가락", - "발걸음", - "발견", - "발달", - "발레", - "발목", - "발바닥", - "발생", - "발음", - "발자국", - "발전", - "발톱", - "발표", - "밤하늘", - "밥그릇", - "밥맛", - "밥상", - "밥솥", - "방금", - "방면", - "방문", - "방바닥", - "방법", - "방송", - "방식", - "방안", - "방울", - "방지", - "방학", - "방해", - "방향", - "배경", - "배꼽", - "배달", - "배드민턴", - "백두산", - "백색", - "백성", - "백인", - "백제", - "백화점", - "버릇", - "버섯", - "버튼", - "번개", - "번역", - "번지", - "번호", - "벌금", - "벌레", - "벌써", - "범위", - "범인", - "범죄", - "법률", - "법원", - "법적", - "법칙", - "베이징", - "벨트", - "변경", - "변동", - "변명", - "변신", - "변호사", - "변화", - "별도", - "별명", - "별일", - "병실", - "병아리", - "병원", - "보관", - "보너스", - "보라색", - "보람", - "보름", - "보상", - "보안", - "보자기", - "보장", - "보전", - "보존", - "보통", - "보편적", - "보험", - "복도", - "복사", - "복숭아", - "복습", - "볶음", - "본격적", - "본래", - "본부", - "본사", - "본성", - "본인", - "본질", - "볼펜", - "봉사", - "봉지", - "봉투", - "부근", - "부끄러움", - "부담", - "부동산", - "부문", - "부분", - "부산", - "부상", - "부엌", - "부인", - "부작용", - "부장", - "부정", - "부족", - "부지런히", - "부친", - "부탁", - "부품", - "부회장", - "북부", - "북한", - "분노", - "분량", - "분리", - "분명", - "분석", - "분야", - "분위기", - "분필", - "분홍색", - "불고기", - "불과", - "불교", - "불꽃", - "불만", - "불법", - "불빛", - "불안", - "불이익", - "불행", - "브랜드", - "비극", - "비난", - "비닐", - "비둘기", - "비디오", - "비로소", - "비만", - "비명", - "비밀", - "비바람", - "비빔밥", - "비상", - "비용", - "비율", - "비중", - "비타민", - "비판", - "빌딩", - "빗물", - "빗방울", - "빗줄기", - "빛깔", - "빨간색", - "빨래", - "빨리", - "사건", - "사계절", - "사나이", - "사냥", - "사람", - "사랑", - "사립", - "사모님", - "사물", - "사방", - "사상", - "사생활", - "사설", - "사슴", - "사실", - "사업", - "사용", - "사월", - "사장", - "사전", - "사진", - "사촌", - "사춘기", - "사탕", - "사투리", - "사흘", - "산길", - "산부인과", - "산업", - "산책", - "살림", - "살인", - "살짝", - "삼계탕", - "삼국", - "삼십", - "삼월", - "삼촌", - "상관", - "상금", - "상대", - "상류", - "상반기", - "상상", - "상식", - "상업", - "상인", - "상자", - "상점", - "상처", - "상추", - "상태", - "상표", - "상품", - "상황", - "새벽", - "색깔", - "색연필", - "생각", - "생명", - "생물", - "생방송", - "생산", - "생선", - "생신", - "생일", - "생활", - "서랍", - "서른", - "서명", - "서민", - "서비스", - "서양", - "서울", - "서적", - "서점", - "서쪽", - "서클", - "석사", - "석유", - "선거", - "선물", - "선배", - "선생", - "선수", - "선원", - "선장", - "선전", - "선택", - "선풍기", - "설거지", - "설날", - "설렁탕", - "설명", - "설문", - "설사", - "설악산", - "설치", - "설탕", - "섭씨", - "성공", - "성당", - "성명", - "성별", - "성인", - "성장", - "성적", - "성질", - "성함", - "세금", - "세미나", - "세상", - "세월", - "세종대왕", - "세탁", - "센터", - "센티미터", - "셋째", - "소규모", - "소극적", - "소금", - "소나기", - "소년", - "소득", - "소망", - "소문", - "소설", - "소속", - "소아과", - "소용", - "소원", - "소음", - "소중히", - "소지품", - "소질", - "소풍", - "소형", - "속담", - "속도", - "속옷", - "손가락", - "손길", - "손녀", - "손님", - "손등", - "손목", - "손뼉", - "손실", - "손질", - "손톱", - "손해", - "솔직히", - "솜씨", - "송아지", - "송이", - "송편", - "쇠고기", - "쇼핑", - "수건", - "수년", - "수단", - "수돗물", - "수동적", - "수면", - "수명", - "수박", - "수상", - "수석", - "수술", - "수시로", - "수업", - "수염", - "수영", - "수입", - "수준", - "수집", - "수출", - "수컷", - "수필", - "수학", - "수험생", - "수화기", - "숙녀", - "숙소", - "숙제", - "순간", - "순서", - "순수", - "순식간", - "순위", - "숟가락", - "술병", - "술집", - "숫자", - "스님", - "스물", - "스스로", - "스승", - "스웨터", - "스위치", - "스케이트", - "스튜디오", - "스트레스", - "스포츠", - "슬쩍", - "슬픔", - "습관", - "습기", - "승객", - "승리", - "승부", - "승용차", - "승진", - "시각", - "시간", - "시골", - "시금치", - "시나리오", - "시댁", - "시리즈", - "시멘트", - "시민", - "시부모", - "시선", - "시설", - "시스템", - "시아버지", - "시어머니", - "시월", - "시인", - "시일", - "시작", - "시장", - "시절", - "시점", - "시중", - "시즌", - "시집", - "시청", - "시합", - "시험", - "식구", - "식기", - "식당", - "식량", - "식료품", - "식물", - "식빵", - "식사", - "식생활", - "식초", - "식탁", - "식품", - "신고", - "신규", - "신념", - "신문", - "신발", - "신비", - "신사", - "신세", - "신용", - "신제품", - "신청", - "신체", - "신화", - "실감", - "실내", - "실력", - "실례", - "실망", - "실수", - "실습", - "실시", - "실장", - "실정", - "실질적", - "실천", - "실체", - "실컷", - "실태", - "실패", - "실험", - "실현", - "심리", - "심부름", - "심사", - "심장", - "심정", - "심판", - "쌍둥이", - "씨름", - "씨앗", - "아가씨", - "아나운서", - "아드님", - "아들", - "아쉬움", - "아스팔트", - "아시아", - "아울러", - "아저씨", - "아줌마", - "아직", - "아침", - "아파트", - "아프리카", - "아픔", - "아홉", - "아흔", - "악기", - "악몽", - "악수", - "안개", - "안경", - "안과", - "안내", - "안녕", - "안동", - "안방", - "안부", - "안주", - "알루미늄", - "알코올", - "암시", - "암컷", - "압력", - "앞날", - "앞문", - "애인", - "애정", - "액수", - "앨범", - "야간", - "야단", - "야옹", - "약간", - "약국", - "약속", - "약수", - "약점", - "약품", - "약혼녀", - "양념", - "양력", - "양말", - "양배추", - "양주", - "양파", - "어둠", - "어려움", - "어른", - "어젯밤", - "어쨌든", - "어쩌다가", - "어쩐지", - "언니", - "언덕", - "언론", - "언어", - "얼굴", - "얼른", - "얼음", - "얼핏", - "엄마", - "업무", - "업종", - "업체", - "엉덩이", - "엉망", - "엉터리", - "엊그제", - "에너지", - "에어컨", - "엔진", - "여건", - "여고생", - "여관", - "여군", - "여권", - "여대생", - "여덟", - "여동생", - "여든", - "여론", - "여름", - "여섯", - "여성", - "여왕", - "여인", - "여전히", - "여직원", - "여학생", - "여행", - "역사", - "역시", - "역할", - "연결", - "연구", - "연극", - "연기", - "연락", - "연설", - "연세", - "연속", - "연습", - "연애", - "연예인", - "연인", - "연장", - "연주", - "연출", - "연필", - "연합", - "연휴", - "열기", - "열매", - "열쇠", - "열심히", - "열정", - "열차", - "열흘", - "염려", - "엽서", - "영국", - "영남", - "영상", - "영양", - "영역", - "영웅", - "영원히", - "영하", - "영향", - "영혼", - "영화", - "옆구리", - "옆방", - "옆집", - "예감", - "예금", - "예방", - "예산", - "예상", - "예선", - "예술", - "예습", - "예식장", - "예약", - "예전", - "예절", - "예정", - "예컨대", - "옛날", - "오늘", - "오락", - "오랫동안", - "오렌지", - "오로지", - "오른발", - "오븐", - "오십", - "오염", - "오월", - "오전", - "오직", - "오징어", - "오페라", - "오피스텔", - "오히려", - "옥상", - "옥수수", - "온갖", - "온라인", - "온몸", - "온종일", - "온통", - "올가을", - "올림픽", - "올해", - "옷차림", - "와이셔츠", - "와인", - "완성", - "완전", - "왕비", - "왕자", - "왜냐하면", - "왠지", - "외갓집", - "외국", - "외로움", - "외삼촌", - "외출", - "외침", - "외할머니", - "왼발", - "왼손", - "왼쪽", - "요금", - "요일", - "요즘", - "요청", - "용기", - "용서", - "용어", - "우산", - "우선", - "우승", - "우연히", - "우정", - "우체국", - "우편", - "운동", - "운명", - "운반", - "운전", - "운행", - "울산", - "울음", - "움직임", - "웃어른", - "웃음", - "워낙", - "원고", - "원래", - "원서", - "원숭이", - "원인", - "원장", - "원피스", - "월급", - "월드컵", - "월세", - "월요일", - "웨이터", - "위반", - "위법", - "위성", - "위원", - "위험", - "위협", - "윗사람", - "유난히", - "유럽", - "유명", - "유물", - "유산", - "유적", - "유치원", - "유학", - "유행", - "유형", - "육군", - "육상", - "육십", - "육체", - "은행", - "음력", - "음료", - "음반", - "음성", - "음식", - "음악", - "음주", - "의견", - "의논", - "의문", - "의복", - "의식", - "의심", - "의외로", - "의욕", - "의원", - "의학", - "이것", - "이곳", - "이념", - "이놈", - "이달", - "이대로", - "이동", - "이렇게", - "이력서", - "이론적", - "이름", - "이민", - "이발소", - "이별", - "이불", - "이빨", - "이상", - "이성", - "이슬", - "이야기", - "이용", - "이웃", - "이월", - "이윽고", - "이익", - "이전", - "이중", - "이튿날", - "이틀", - "이혼", - "인간", - "인격", - "인공", - "인구", - "인근", - "인기", - "인도", - "인류", - "인물", - "인생", - "인쇄", - "인연", - "인원", - "인재", - "인종", - "인천", - "인체", - "인터넷", - "인하", - "인형", - "일곱", - "일기", - "일단", - "일대", - "일등", - "일반", - "일본", - "일부", - "일상", - "일생", - "일손", - "일요일", - "일월", - "일정", - "일종", - "일주일", - "일찍", - "일체", - "일치", - "일행", - "일회용", - "임금", - "임무", - "입대", - "입력", - "입맛", - "입사", - "입술", - "입시", - "입원", - "입장", - "입학", - "자가용", - "자격", - "자극", - "자동", - "자랑", - "자부심", - "자식", - "자신", - "자연", - "자원", - "자율", - "자전거", - "자정", - "자존심", - "자판", - "작가", - "작년", - "작성", - "작업", - "작용", - "작은딸", - "작품", - "잔디", - "잔뜩", - "잔치", - "잘못", - "잠깐", - "잠수함", - "잠시", - "잠옷", - "잠자리", - "잡지", - "장관", - "장군", - "장기간", - "장래", - "장례", - "장르", - "장마", - "장면", - "장모", - "장미", - "장비", - "장사", - "장소", - "장식", - "장애인", - "장인", - "장점", - "장차", - "장학금", - "재능", - "재빨리", - "재산", - "재생", - "재작년", - "재정", - "재채기", - "재판", - "재학", - "재활용", - "저것", - "저고리", - "저곳", - "저녁", - "저런", - "저렇게", - "저번", - "저울", - "저절로", - "저축", - "적극", - "적당히", - "적성", - "적용", - "적응", - "전개", - "전공", - "전기", - "전달", - "전라도", - "전망", - "전문", - "전반", - "전부", - "전세", - "전시", - "전용", - "전자", - "전쟁", - "전주", - "전철", - "전체", - "전통", - "전혀", - "전후", - "절대", - "절망", - "절반", - "절약", - "절차", - "점검", - "점수", - "점심", - "점원", - "점점", - "점차", - "접근", - "접시", - "접촉", - "젓가락", - "정거장", - "정도", - "정류장", - "정리", - "정말", - "정면", - "정문", - "정반대", - "정보", - "정부", - "정비", - "정상", - "정성", - "정오", - "정원", - "정장", - "정지", - "정치", - "정확히", - "제공", - "제과점", - "제대로", - "제목", - "제발", - "제법", - "제삿날", - "제안", - "제일", - "제작", - "제주도", - "제출", - "제품", - "제한", - "조각", - "조건", - "조금", - "조깅", - "조명", - "조미료", - "조상", - "조선", - "조용히", - "조절", - "조정", - "조직", - "존댓말", - "존재", - "졸업", - "졸음", - "종교", - "종로", - "종류", - "종소리", - "종업원", - "종종", - "종합", - "좌석", - "죄인", - "주관적", - "주름", - "주말", - "주머니", - "주먹", - "주문", - "주민", - "주방", - "주변", - "주식", - "주인", - "주일", - "주장", - "주전자", - "주택", - "준비", - "줄거리", - "줄기", - "줄무늬", - "중간", - "중계방송", - "중국", - "중년", - "중단", - "중독", - "중반", - "중부", - "중세", - "중소기업", - "중순", - "중앙", - "중요", - "중학교", - "즉석", - "즉시", - "즐거움", - "증가", - "증거", - "증권", - "증상", - "증세", - "지각", - "지갑", - "지경", - "지극히", - "지금", - "지급", - "지능", - "지름길", - "지리산", - "지방", - "지붕", - "지식", - "지역", - "지우개", - "지원", - "지적", - "지점", - "지진", - "지출", - "직선", - "직업", - "직원", - "직장", - "진급", - "진동", - "진로", - "진료", - "진리", - "진짜", - "진찰", - "진출", - "진통", - "진행", - "질문", - "질병", - "질서", - "짐작", - "집단", - "집안", - "집중", - "짜증", - "찌꺼기", - "차남", - "차라리", - "차량", - "차림", - "차별", - "차선", - "차츰", - "착각", - "찬물", - "찬성", - "참가", - "참기름", - "참새", - "참석", - "참여", - "참외", - "참조", - "찻잔", - "창가", - "창고", - "창구", - "창문", - "창밖", - "창작", - "창조", - "채널", - "채점", - "책가방", - "책방", - "책상", - "책임", - "챔피언", - "처벌", - "처음", - "천국", - "천둥", - "천장", - "천재", - "천천히", - "철도", - "철저히", - "철학", - "첫날", - "첫째", - "청년", - "청바지", - "청소", - "청춘", - "체계", - "체력", - "체온", - "체육", - "체중", - "체험", - "초등학생", - "초반", - "초밥", - "초상화", - "초순", - "초여름", - "초원", - "초저녁", - "초점", - "초청", - "초콜릿", - "촛불", - "총각", - "총리", - "총장", - "촬영", - "최근", - "최상", - "최선", - "최신", - "최악", - "최종", - "추석", - "추억", - "추진", - "추천", - "추측", - "축구", - "축소", - "축제", - "축하", - "출근", - "출발", - "출산", - "출신", - "출연", - "출입", - "출장", - "출판", - "충격", - "충고", - "충돌", - "충분히", - "충청도", - "취업", - "취직", - "취향", - "치약", - "친구", - "친척", - "칠십", - "칠월", - "칠판", - "침대", - "침묵", - "침실", - "칫솔", - "칭찬", - "카메라", - "카운터", - "칼국수", - "캐릭터", - "캠퍼스", - "캠페인", - "커튼", - "컨디션", - "컬러", - "컴퓨터", - "코끼리", - "코미디", - "콘서트", - "콜라", - "콤플렉스", - "콩나물", - "쾌감", - "쿠데타", - "크림", - "큰길", - "큰딸", - "큰소리", - "큰아들", - "큰어머니", - "큰일", - "큰절", - "클래식", - "클럽", - "킬로", - "타입", - "타자기", - "탁구", - "탁자", - "탄생", - "태권도", - "태양", - "태풍", - "택시", - "탤런트", - "터널", - "터미널", - "테니스", - "테스트", - "테이블", - "텔레비전", - "토론", - "토마토", - "토요일", - "통계", - "통과", - "통로", - "통신", - "통역", - "통일", - "통장", - "통제", - "통증", - "통합", - "통화", - "퇴근", - "퇴원", - "퇴직금", - "튀김", - "트럭", - "특급", - "특별", - "특성", - "특수", - "특징", - "특히", - "튼튼히", - "티셔츠", - "파란색", - "파일", - "파출소", - "판결", - "판단", - "판매", - "판사", - "팔십", - "팔월", - "팝송", - "패션", - "팩스", - "팩시밀리", - "팬티", - "퍼센트", - "페인트", - "편견", - "편의", - "편지", - "편히", - "평가", - "평균", - "평생", - "평소", - "평양", - "평일", - "평화", - "포스터", - "포인트", - "포장", - "포함", - "표면", - "표정", - "표준", - "표현", - "품목", - "품질", - "풍경", - "풍속", - "풍습", - "프랑스", - "프린터", - "플라스틱", - "피곤", - "피망", - "피아노", - "필름", - "필수", - "필요", - "필자", - "필통", - "핑계", - "하느님", - "하늘", - "하드웨어", - "하룻밤", - "하반기", - "하숙집", - "하순", - "하여튼", - "하지만", - "하천", - "하품", - "하필", - "학과", - "학교", - "학급", - "학기", - "학년", - "학력", - "학번", - "학부모", - "학비", - "학생", - "학술", - "학습", - "학용품", - "학원", - "학위", - "학자", - "학점", - "한계", - "한글", - "한꺼번에", - "한낮", - "한눈", - "한동안", - "한때", - "한라산", - "한마디", - "한문", - "한번", - "한복", - "한식", - "한여름", - "한쪽", - "할머니", - "할아버지", - "할인", - "함께", - "함부로", - "합격", - "합리적", - "항공", - "항구", - "항상", - "항의", - "해결", - "해군", - "해답", - "해당", - "해물", - "해석", - "해설", - "해수욕장", - "해안", - "핵심", - "핸드백", - "햄버거", - "햇볕", - "햇살", - "행동", - "행복", - "행사", - "행운", - "행위", - "향기", - "향상", - "향수", - "허락", - "허용", - "헬기", - "현관", - "현금", - "현대", - "현상", - "현실", - "현장", - "현재", - "현지", - "혈액", - "협력", - "형부", - "형사", - "형수", - "형식", - "형제", - "형태", - "형편", - "혜택", - "호기심", - "호남", - "호랑이", - "호박", - "호텔", - "호흡", - "혹시", - "홀로", - "홈페이지", - "홍보", - "홍수", - "홍차", - "화면", - "화분", - "화살", - "화요일", - "화장", - "화학", - "확보", - "확인", - "확장", - "확정", - "환갑", - "환경", - "환영", - "환율", - "환자", - "활기", - "활동", - "활발히", - "활용", - "활짝", - "회견", - "회관", - "회복", - "회색", - "회원", - "회장", - "회전", - "횟수", - "횡단보도", - "효율적", - "후반", - "후춧가루", - "훈련", - "훨씬", - "휴식", - "휴일", - "흉내", - "흐름", - "흑백", - "흑인", - "흔적", - "흔히", - "흥미", - "흥분", - "희곡", - "희망", - "희생", - "흰색", - "힘껏" -]; +export const wordlist: string[] = `가격 +가끔 +가난 +가능 +가득 +가르침 +가뭄 +가방 +가상 +가슴 +가운데 +가을 +가이드 +가입 +가장 +가정 +가족 +가죽 +각오 +각자 +간격 +간부 +간섭 +간장 +간접 +간판 +갈등 +갈비 +갈색 +갈증 +감각 +감기 +감소 +감수성 +감자 +감정 +갑자기 +강남 +강당 +강도 +강력히 +강변 +강북 +강사 +강수량 +강아지 +강원도 +강의 +강제 +강조 +같이 +개구리 +개나리 +개방 +개별 +개선 +개성 +개인 +객관적 +거실 +거액 +거울 +거짓 +거품 +걱정 +건강 +건물 +건설 +건조 +건축 +걸음 +검사 +검토 +게시판 +게임 +겨울 +견해 +결과 +결국 +결론 +결석 +결승 +결심 +결정 +결혼 +경계 +경고 +경기 +경력 +경복궁 +경비 +경상도 +경영 +경우 +경쟁 +경제 +경주 +경찰 +경치 +경향 +경험 +계곡 +계단 +계란 +계산 +계속 +계약 +계절 +계층 +계획 +고객 +고구려 +고궁 +고급 +고등학생 +고무신 +고민 +고양이 +고장 +고전 +고집 +고춧가루 +고통 +고향 +곡식 +골목 +골짜기 +골프 +공간 +공개 +공격 +공군 +공급 +공기 +공동 +공무원 +공부 +공사 +공식 +공업 +공연 +공원 +공장 +공짜 +공책 +공통 +공포 +공항 +공휴일 +과목 +과일 +과장 +과정 +과학 +관객 +관계 +관광 +관념 +관람 +관련 +관리 +관습 +관심 +관점 +관찰 +광경 +광고 +광장 +광주 +괴로움 +굉장히 +교과서 +교문 +교복 +교실 +교양 +교육 +교장 +교직 +교통 +교환 +교훈 +구경 +구름 +구멍 +구별 +구분 +구석 +구성 +구속 +구역 +구입 +구청 +구체적 +국가 +국기 +국내 +국립 +국물 +국민 +국수 +국어 +국왕 +국적 +국제 +국회 +군대 +군사 +군인 +궁극적 +권리 +권위 +권투 +귀국 +귀신 +규정 +규칙 +균형 +그날 +그냥 +그늘 +그러나 +그룹 +그릇 +그림 +그제서야 +그토록 +극복 +극히 +근거 +근교 +근래 +근로 +근무 +근본 +근원 +근육 +근처 +글씨 +글자 +금강산 +금고 +금년 +금메달 +금액 +금연 +금요일 +금지 +긍정적 +기간 +기관 +기념 +기능 +기독교 +기둥 +기록 +기름 +기법 +기본 +기분 +기쁨 +기숙사 +기술 +기억 +기업 +기온 +기운 +기원 +기적 +기준 +기침 +기혼 +기획 +긴급 +긴장 +길이 +김밥 +김치 +김포공항 +깍두기 +깜빡 +깨달음 +깨소금 +껍질 +꼭대기 +꽃잎 +나들이 +나란히 +나머지 +나물 +나침반 +나흘 +낙엽 +난방 +날개 +날씨 +날짜 +남녀 +남대문 +남매 +남산 +남자 +남편 +남학생 +낭비 +낱말 +내년 +내용 +내일 +냄비 +냄새 +냇물 +냉동 +냉면 +냉방 +냉장고 +넥타이 +넷째 +노동 +노란색 +노력 +노인 +녹음 +녹차 +녹화 +논리 +논문 +논쟁 +놀이 +농구 +농담 +농민 +농부 +농업 +농장 +농촌 +높이 +눈동자 +눈물 +눈썹 +뉴욕 +느낌 +늑대 +능동적 +능력 +다방 +다양성 +다음 +다이어트 +다행 +단계 +단골 +단독 +단맛 +단순 +단어 +단위 +단점 +단체 +단추 +단편 +단풍 +달걀 +달러 +달력 +달리 +닭고기 +담당 +담배 +담요 +담임 +답변 +답장 +당근 +당분간 +당연히 +당장 +대규모 +대낮 +대단히 +대답 +대도시 +대략 +대량 +대륙 +대문 +대부분 +대신 +대응 +대장 +대전 +대접 +대중 +대책 +대출 +대충 +대통령 +대학 +대한민국 +대합실 +대형 +덩어리 +데이트 +도대체 +도덕 +도둑 +도망 +도서관 +도심 +도움 +도입 +도자기 +도저히 +도전 +도중 +도착 +독감 +독립 +독서 +독일 +독창적 +동화책 +뒷모습 +뒷산 +딸아이 +마누라 +마늘 +마당 +마라톤 +마련 +마무리 +마사지 +마약 +마요네즈 +마을 +마음 +마이크 +마중 +마지막 +마찬가지 +마찰 +마흔 +막걸리 +막내 +막상 +만남 +만두 +만세 +만약 +만일 +만점 +만족 +만화 +많이 +말기 +말씀 +말투 +맘대로 +망원경 +매년 +매달 +매력 +매번 +매스컴 +매일 +매장 +맥주 +먹이 +먼저 +먼지 +멀리 +메일 +며느리 +며칠 +면담 +멸치 +명단 +명령 +명예 +명의 +명절 +명칭 +명함 +모금 +모니터 +모델 +모든 +모범 +모습 +모양 +모임 +모조리 +모집 +모퉁이 +목걸이 +목록 +목사 +목소리 +목숨 +목적 +목표 +몰래 +몸매 +몸무게 +몸살 +몸속 +몸짓 +몸통 +몹시 +무관심 +무궁화 +무더위 +무덤 +무릎 +무슨 +무엇 +무역 +무용 +무조건 +무지개 +무척 +문구 +문득 +문법 +문서 +문제 +문학 +문화 +물가 +물건 +물결 +물고기 +물론 +물리학 +물음 +물질 +물체 +미국 +미디어 +미사일 +미술 +미역 +미용실 +미움 +미인 +미팅 +미혼 +민간 +민족 +민주 +믿음 +밀가루 +밀리미터 +밑바닥 +바가지 +바구니 +바나나 +바늘 +바닥 +바닷가 +바람 +바이러스 +바탕 +박물관 +박사 +박수 +반대 +반드시 +반말 +반발 +반성 +반응 +반장 +반죽 +반지 +반찬 +받침 +발가락 +발걸음 +발견 +발달 +발레 +발목 +발바닥 +발생 +발음 +발자국 +발전 +발톱 +발표 +밤하늘 +밥그릇 +밥맛 +밥상 +밥솥 +방금 +방면 +방문 +방바닥 +방법 +방송 +방식 +방안 +방울 +방지 +방학 +방해 +방향 +배경 +배꼽 +배달 +배드민턴 +백두산 +백색 +백성 +백인 +백제 +백화점 +버릇 +버섯 +버튼 +번개 +번역 +번지 +번호 +벌금 +벌레 +벌써 +범위 +범인 +범죄 +법률 +법원 +법적 +법칙 +베이징 +벨트 +변경 +변동 +변명 +변신 +변호사 +변화 +별도 +별명 +별일 +병실 +병아리 +병원 +보관 +보너스 +보라색 +보람 +보름 +보상 +보안 +보자기 +보장 +보전 +보존 +보통 +보편적 +보험 +복도 +복사 +복숭아 +복습 +볶음 +본격적 +본래 +본부 +본사 +본성 +본인 +본질 +볼펜 +봉사 +봉지 +봉투 +부근 +부끄러움 +부담 +부동산 +부문 +부분 +부산 +부상 +부엌 +부인 +부작용 +부장 +부정 +부족 +부지런히 +부친 +부탁 +부품 +부회장 +북부 +북한 +분노 +분량 +분리 +분명 +분석 +분야 +분위기 +분필 +분홍색 +불고기 +불과 +불교 +불꽃 +불만 +불법 +불빛 +불안 +불이익 +불행 +브랜드 +비극 +비난 +비닐 +비둘기 +비디오 +비로소 +비만 +비명 +비밀 +비바람 +비빔밥 +비상 +비용 +비율 +비중 +비타민 +비판 +빌딩 +빗물 +빗방울 +빗줄기 +빛깔 +빨간색 +빨래 +빨리 +사건 +사계절 +사나이 +사냥 +사람 +사랑 +사립 +사모님 +사물 +사방 +사상 +사생활 +사설 +사슴 +사실 +사업 +사용 +사월 +사장 +사전 +사진 +사촌 +사춘기 +사탕 +사투리 +사흘 +산길 +산부인과 +산업 +산책 +살림 +살인 +살짝 +삼계탕 +삼국 +삼십 +삼월 +삼촌 +상관 +상금 +상대 +상류 +상반기 +상상 +상식 +상업 +상인 +상자 +상점 +상처 +상추 +상태 +상표 +상품 +상황 +새벽 +색깔 +색연필 +생각 +생명 +생물 +생방송 +생산 +생선 +생신 +생일 +생활 +서랍 +서른 +서명 +서민 +서비스 +서양 +서울 +서적 +서점 +서쪽 +서클 +석사 +석유 +선거 +선물 +선배 +선생 +선수 +선원 +선장 +선전 +선택 +선풍기 +설거지 +설날 +설렁탕 +설명 +설문 +설사 +설악산 +설치 +설탕 +섭씨 +성공 +성당 +성명 +성별 +성인 +성장 +성적 +성질 +성함 +세금 +세미나 +세상 +세월 +세종대왕 +세탁 +센터 +센티미터 +셋째 +소규모 +소극적 +소금 +소나기 +소년 +소득 +소망 +소문 +소설 +소속 +소아과 +소용 +소원 +소음 +소중히 +소지품 +소질 +소풍 +소형 +속담 +속도 +속옷 +손가락 +손길 +손녀 +손님 +손등 +손목 +손뼉 +손실 +손질 +손톱 +손해 +솔직히 +솜씨 +송아지 +송이 +송편 +쇠고기 +쇼핑 +수건 +수년 +수단 +수돗물 +수동적 +수면 +수명 +수박 +수상 +수석 +수술 +수시로 +수업 +수염 +수영 +수입 +수준 +수집 +수출 +수컷 +수필 +수학 +수험생 +수화기 +숙녀 +숙소 +숙제 +순간 +순서 +순수 +순식간 +순위 +숟가락 +술병 +술집 +숫자 +스님 +스물 +스스로 +스승 +스웨터 +스위치 +스케이트 +스튜디오 +스트레스 +스포츠 +슬쩍 +슬픔 +습관 +습기 +승객 +승리 +승부 +승용차 +승진 +시각 +시간 +시골 +시금치 +시나리오 +시댁 +시리즈 +시멘트 +시민 +시부모 +시선 +시설 +시스템 +시아버지 +시어머니 +시월 +시인 +시일 +시작 +시장 +시절 +시점 +시중 +시즌 +시집 +시청 +시합 +시험 +식구 +식기 +식당 +식량 +식료품 +식물 +식빵 +식사 +식생활 +식초 +식탁 +식품 +신고 +신규 +신념 +신문 +신발 +신비 +신사 +신세 +신용 +신제품 +신청 +신체 +신화 +실감 +실내 +실력 +실례 +실망 +실수 +실습 +실시 +실장 +실정 +실질적 +실천 +실체 +실컷 +실태 +실패 +실험 +실현 +심리 +심부름 +심사 +심장 +심정 +심판 +쌍둥이 +씨름 +씨앗 +아가씨 +아나운서 +아드님 +아들 +아쉬움 +아스팔트 +아시아 +아울러 +아저씨 +아줌마 +아직 +아침 +아파트 +아프리카 +아픔 +아홉 +아흔 +악기 +악몽 +악수 +안개 +안경 +안과 +안내 +안녕 +안동 +안방 +안부 +안주 +알루미늄 +알코올 +암시 +암컷 +압력 +앞날 +앞문 +애인 +애정 +액수 +앨범 +야간 +야단 +야옹 +약간 +약국 +약속 +약수 +약점 +약품 +약혼녀 +양념 +양력 +양말 +양배추 +양주 +양파 +어둠 +어려움 +어른 +어젯밤 +어쨌든 +어쩌다가 +어쩐지 +언니 +언덕 +언론 +언어 +얼굴 +얼른 +얼음 +얼핏 +엄마 +업무 +업종 +업체 +엉덩이 +엉망 +엉터리 +엊그제 +에너지 +에어컨 +엔진 +여건 +여고생 +여관 +여군 +여권 +여대생 +여덟 +여동생 +여든 +여론 +여름 +여섯 +여성 +여왕 +여인 +여전히 +여직원 +여학생 +여행 +역사 +역시 +역할 +연결 +연구 +연극 +연기 +연락 +연설 +연세 +연속 +연습 +연애 +연예인 +연인 +연장 +연주 +연출 +연필 +연합 +연휴 +열기 +열매 +열쇠 +열심히 +열정 +열차 +열흘 +염려 +엽서 +영국 +영남 +영상 +영양 +영역 +영웅 +영원히 +영하 +영향 +영혼 +영화 +옆구리 +옆방 +옆집 +예감 +예금 +예방 +예산 +예상 +예선 +예술 +예습 +예식장 +예약 +예전 +예절 +예정 +예컨대 +옛날 +오늘 +오락 +오랫동안 +오렌지 +오로지 +오른발 +오븐 +오십 +오염 +오월 +오전 +오직 +오징어 +오페라 +오피스텔 +오히려 +옥상 +옥수수 +온갖 +온라인 +온몸 +온종일 +온통 +올가을 +올림픽 +올해 +옷차림 +와이셔츠 +와인 +완성 +완전 +왕비 +왕자 +왜냐하면 +왠지 +외갓집 +외국 +외로움 +외삼촌 +외출 +외침 +외할머니 +왼발 +왼손 +왼쪽 +요금 +요일 +요즘 +요청 +용기 +용서 +용어 +우산 +우선 +우승 +우연히 +우정 +우체국 +우편 +운동 +운명 +운반 +운전 +운행 +울산 +울음 +움직임 +웃어른 +웃음 +워낙 +원고 +원래 +원서 +원숭이 +원인 +원장 +원피스 +월급 +월드컵 +월세 +월요일 +웨이터 +위반 +위법 +위성 +위원 +위험 +위협 +윗사람 +유난히 +유럽 +유명 +유물 +유산 +유적 +유치원 +유학 +유행 +유형 +육군 +육상 +육십 +육체 +은행 +음력 +음료 +음반 +음성 +음식 +음악 +음주 +의견 +의논 +의문 +의복 +의식 +의심 +의외로 +의욕 +의원 +의학 +이것 +이곳 +이념 +이놈 +이달 +이대로 +이동 +이렇게 +이력서 +이론적 +이름 +이민 +이발소 +이별 +이불 +이빨 +이상 +이성 +이슬 +이야기 +이용 +이웃 +이월 +이윽고 +이익 +이전 +이중 +이튿날 +이틀 +이혼 +인간 +인격 +인공 +인구 +인근 +인기 +인도 +인류 +인물 +인생 +인쇄 +인연 +인원 +인재 +인종 +인천 +인체 +인터넷 +인하 +인형 +일곱 +일기 +일단 +일대 +일등 +일반 +일본 +일부 +일상 +일생 +일손 +일요일 +일월 +일정 +일종 +일주일 +일찍 +일체 +일치 +일행 +일회용 +임금 +임무 +입대 +입력 +입맛 +입사 +입술 +입시 +입원 +입장 +입학 +자가용 +자격 +자극 +자동 +자랑 +자부심 +자식 +자신 +자연 +자원 +자율 +자전거 +자정 +자존심 +자판 +작가 +작년 +작성 +작업 +작용 +작은딸 +작품 +잔디 +잔뜩 +잔치 +잘못 +잠깐 +잠수함 +잠시 +잠옷 +잠자리 +잡지 +장관 +장군 +장기간 +장래 +장례 +장르 +장마 +장면 +장모 +장미 +장비 +장사 +장소 +장식 +장애인 +장인 +장점 +장차 +장학금 +재능 +재빨리 +재산 +재생 +재작년 +재정 +재채기 +재판 +재학 +재활용 +저것 +저고리 +저곳 +저녁 +저런 +저렇게 +저번 +저울 +저절로 +저축 +적극 +적당히 +적성 +적용 +적응 +전개 +전공 +전기 +전달 +전라도 +전망 +전문 +전반 +전부 +전세 +전시 +전용 +전자 +전쟁 +전주 +전철 +전체 +전통 +전혀 +전후 +절대 +절망 +절반 +절약 +절차 +점검 +점수 +점심 +점원 +점점 +점차 +접근 +접시 +접촉 +젓가락 +정거장 +정도 +정류장 +정리 +정말 +정면 +정문 +정반대 +정보 +정부 +정비 +정상 +정성 +정오 +정원 +정장 +정지 +정치 +정확히 +제공 +제과점 +제대로 +제목 +제발 +제법 +제삿날 +제안 +제일 +제작 +제주도 +제출 +제품 +제한 +조각 +조건 +조금 +조깅 +조명 +조미료 +조상 +조선 +조용히 +조절 +조정 +조직 +존댓말 +존재 +졸업 +졸음 +종교 +종로 +종류 +종소리 +종업원 +종종 +종합 +좌석 +죄인 +주관적 +주름 +주말 +주머니 +주먹 +주문 +주민 +주방 +주변 +주식 +주인 +주일 +주장 +주전자 +주택 +준비 +줄거리 +줄기 +줄무늬 +중간 +중계방송 +중국 +중년 +중단 +중독 +중반 +중부 +중세 +중소기업 +중순 +중앙 +중요 +중학교 +즉석 +즉시 +즐거움 +증가 +증거 +증권 +증상 +증세 +지각 +지갑 +지경 +지극히 +지금 +지급 +지능 +지름길 +지리산 +지방 +지붕 +지식 +지역 +지우개 +지원 +지적 +지점 +지진 +지출 +직선 +직업 +직원 +직장 +진급 +진동 +진로 +진료 +진리 +진짜 +진찰 +진출 +진통 +진행 +질문 +질병 +질서 +짐작 +집단 +집안 +집중 +짜증 +찌꺼기 +차남 +차라리 +차량 +차림 +차별 +차선 +차츰 +착각 +찬물 +찬성 +참가 +참기름 +참새 +참석 +참여 +참외 +참조 +찻잔 +창가 +창고 +창구 +창문 +창밖 +창작 +창조 +채널 +채점 +책가방 +책방 +책상 +책임 +챔피언 +처벌 +처음 +천국 +천둥 +천장 +천재 +천천히 +철도 +철저히 +철학 +첫날 +첫째 +청년 +청바지 +청소 +청춘 +체계 +체력 +체온 +체육 +체중 +체험 +초등학생 +초반 +초밥 +초상화 +초순 +초여름 +초원 +초저녁 +초점 +초청 +초콜릿 +촛불 +총각 +총리 +총장 +촬영 +최근 +최상 +최선 +최신 +최악 +최종 +추석 +추억 +추진 +추천 +추측 +축구 +축소 +축제 +축하 +출근 +출발 +출산 +출신 +출연 +출입 +출장 +출판 +충격 +충고 +충돌 +충분히 +충청도 +취업 +취직 +취향 +치약 +친구 +친척 +칠십 +칠월 +칠판 +침대 +침묵 +침실 +칫솔 +칭찬 +카메라 +카운터 +칼국수 +캐릭터 +캠퍼스 +캠페인 +커튼 +컨디션 +컬러 +컴퓨터 +코끼리 +코미디 +콘서트 +콜라 +콤플렉스 +콩나물 +쾌감 +쿠데타 +크림 +큰길 +큰딸 +큰소리 +큰아들 +큰어머니 +큰일 +큰절 +클래식 +클럽 +킬로 +타입 +타자기 +탁구 +탁자 +탄생 +태권도 +태양 +태풍 +택시 +탤런트 +터널 +터미널 +테니스 +테스트 +테이블 +텔레비전 +토론 +토마토 +토요일 +통계 +통과 +통로 +통신 +통역 +통일 +통장 +통제 +통증 +통합 +통화 +퇴근 +퇴원 +퇴직금 +튀김 +트럭 +특급 +특별 +특성 +특수 +특징 +특히 +튼튼히 +티셔츠 +파란색 +파일 +파출소 +판결 +판단 +판매 +판사 +팔십 +팔월 +팝송 +패션 +팩스 +팩시밀리 +팬티 +퍼센트 +페인트 +편견 +편의 +편지 +편히 +평가 +평균 +평생 +평소 +평양 +평일 +평화 +포스터 +포인트 +포장 +포함 +표면 +표정 +표준 +표현 +품목 +품질 +풍경 +풍속 +풍습 +프랑스 +프린터 +플라스틱 +피곤 +피망 +피아노 +필름 +필수 +필요 +필자 +필통 +핑계 +하느님 +하늘 +하드웨어 +하룻밤 +하반기 +하숙집 +하순 +하여튼 +하지만 +하천 +하품 +하필 +학과 +학교 +학급 +학기 +학년 +학력 +학번 +학부모 +학비 +학생 +학술 +학습 +학용품 +학원 +학위 +학자 +학점 +한계 +한글 +한꺼번에 +한낮 +한눈 +한동안 +한때 +한라산 +한마디 +한문 +한번 +한복 +한식 +한여름 +한쪽 +할머니 +할아버지 +할인 +함께 +함부로 +합격 +합리적 +항공 +항구 +항상 +항의 +해결 +해군 +해답 +해당 +해물 +해석 +해설 +해수욕장 +해안 +핵심 +핸드백 +햄버거 +햇볕 +햇살 +행동 +행복 +행사 +행운 +행위 +향기 +향상 +향수 +허락 +허용 +헬기 +현관 +현금 +현대 +현상 +현실 +현장 +현재 +현지 +혈액 +협력 +형부 +형사 +형수 +형식 +형제 +형태 +형편 +혜택 +호기심 +호남 +호랑이 +호박 +호텔 +호흡 +혹시 +홀로 +홈페이지 +홍보 +홍수 +홍차 +화면 +화분 +화살 +화요일 +화장 +화학 +확보 +확인 +확장 +확정 +환갑 +환경 +환영 +환율 +환자 +활기 +활동 +활발히 +활용 +활짝 +회견 +회관 +회복 +회색 +회원 +회장 +회전 +횟수 +횡단보도 +효율적 +후반 +후춧가루 +훈련 +훨씬 +휴식 +휴일 +흉내 +흐름 +흑백 +흑인 +흔적 +흔히 +흥미 +흥분 +희곡 +희망 +희생 +흰색 +힘껏`.split("\n"); diff --git a/src/bip39/wordlists/simplified-chinese.ts b/src/bip39/wordlists/simplified-chinese.ts index 46b3a39..974f1a5 100644 --- a/src/bip39/wordlists/simplified-chinese.ts +++ b/src/bip39/wordlists/simplified-chinese.ts @@ -1,2050 +1,2048 @@ -export const wordlist: string[] = [ - "的", - "一", - "是", - "在", - "不", - "了", - "有", - "和", - "人", - "这", - "中", - "大", - "为", - "上", - "个", - "国", - "我", - "以", - "要", - "他", - "时", - "来", - "用", - "们", - "生", - "到", - "作", - "地", - "于", - "出", - "就", - "分", - "对", - "成", - "会", - "可", - "主", - "发", - "年", - "动", - "同", - "工", - "也", - "能", - "下", - "过", - "子", - "说", - "产", - "种", - "面", - "而", - "方", - "后", - "多", - "定", - "行", - "学", - "法", - "所", - "民", - "得", - "经", - "十", - "三", - "之", - "进", - "着", - "等", - "部", - "度", - "家", - "电", - "力", - "里", - "如", - "水", - "化", - "高", - "自", - "二", - "理", - "起", - "小", - "物", - "现", - "实", - "加", - "量", - "都", - "两", - "体", - "制", - "机", - "当", - "使", - "点", - "从", - "业", - "本", - "去", - "把", - "性", - "好", - "应", - "开", - "它", - "合", - "还", - "因", - "由", - "其", - "些", - "然", - "前", - "外", - "天", - "政", - "四", - "日", - "那", - "社", - "义", - "事", - "平", - "形", - "相", - "全", - "表", - "间", - "样", - "与", - "关", - "各", - "重", - "新", - "线", - "内", - "数", - "正", - "心", - "反", - "你", - "明", - "看", - "原", - "又", - "么", - "利", - "比", - "或", - "但", - "质", - "气", - "第", - "向", - "道", - "命", - "此", - "变", - "条", - "只", - "没", - "结", - "解", - "问", - "意", - "建", - "月", - "公", - "无", - "系", - "军", - "很", - "情", - "者", - "最", - "立", - "代", - "想", - "已", - "通", - "并", - "提", - "直", - "题", - "党", - "程", - "展", - "五", - "果", - "料", - "象", - "员", - "革", - "位", - "入", - "常", - "文", - "总", - "次", - "品", - "式", - "活", - "设", - "及", - "管", - "特", - "件", - "长", - "求", - "老", - "头", - "基", - "资", - "边", - "流", - "路", - "级", - "少", - "图", - "山", - "统", - "接", - "知", - "较", - "将", - "组", - "见", - "计", - "别", - "她", - "手", - "角", - "期", - "根", - "论", - "运", - "农", - "指", - "几", - "九", - "区", - "强", - "放", - "决", - "西", - "被", - "干", - "做", - "必", - "战", - "先", - "回", - "则", - "任", - "取", - "据", - "处", - "队", - "南", - "给", - "色", - "光", - "门", - "即", - "保", - "治", - "北", - "造", - "百", - "规", - "热", - "领", - "七", - "海", - "口", - "东", - "导", - "器", - "压", - "志", - "世", - "金", - "增", - "争", - "济", - "阶", - "油", - "思", - "术", - "极", - "交", - "受", - "联", - "什", - "认", - "六", - "共", - "权", - "收", - "证", - "改", - "清", - "美", - "再", - "采", - "转", - "更", - "单", - "风", - "切", - "打", - "白", - "教", - "速", - "花", - "带", - "安", - "场", - "身", - "车", - "例", - "真", - "务", - "具", - "万", - "每", - "目", - "至", - "达", - "走", - "积", - "示", - "议", - "声", - "报", - "斗", - "完", - "类", - "八", - "离", - "华", - "名", - "确", - "才", - "科", - "张", - "信", - "马", - "节", - "话", - "米", - "整", - "空", - "元", - "况", - "今", - "集", - "温", - "传", - "土", - "许", - "步", - "群", - "广", - "石", - "记", - "需", - "段", - "研", - "界", - "拉", - "林", - "律", - "叫", - "且", - "究", - "观", - "越", - "织", - "装", - "影", - "算", - "低", - "持", - "音", - "众", - "书", - "布", - "复", - "容", - "儿", - "须", - "际", - "商", - "非", - "验", - "连", - "断", - "深", - "难", - "近", - "矿", - "千", - "周", - "委", - "素", - "技", - "备", - "半", - "办", - "青", - "省", - "列", - "习", - "响", - "约", - "支", - "般", - "史", - "感", - "劳", - "便", - "团", - "往", - "酸", - "历", - "市", - "克", - "何", - "除", - "消", - "构", - "府", - "称", - "太", - "准", - "精", - "值", - "号", - "率", - "族", - "维", - "划", - "选", - "标", - "写", - "存", - "候", - "毛", - "亲", - "快", - "效", - "斯", - "院", - "查", - "江", - "型", - "眼", - "王", - "按", - "格", - "养", - "易", - "置", - "派", - "层", - "片", - "始", - "却", - "专", - "状", - "育", - "厂", - "京", - "识", - "适", - "属", - "圆", - "包", - "火", - "住", - "调", - "满", - "县", - "局", - "照", - "参", - "红", - "细", - "引", - "听", - "该", - "铁", - "价", - "严", - "首", - "底", - "液", - "官", - "德", - "随", - "病", - "苏", - "失", - "尔", - "死", - "讲", - "配", - "女", - "黄", - "推", - "显", - "谈", - "罪", - "神", - "艺", - "呢", - "席", - "含", - "企", - "望", - "密", - "批", - "营", - "项", - "防", - "举", - "球", - "英", - "氧", - "势", - "告", - "李", - "台", - "落", - "木", - "帮", - "轮", - "破", - "亚", - "师", - "围", - "注", - "远", - "字", - "材", - "排", - "供", - "河", - "态", - "封", - "另", - "施", - "减", - "树", - "溶", - "怎", - "止", - "案", - "言", - "士", - "均", - "武", - "固", - "叶", - "鱼", - "波", - "视", - "仅", - "费", - "紧", - "爱", - "左", - "章", - "早", - "朝", - "害", - "续", - "轻", - "服", - "试", - "食", - "充", - "兵", - "源", - "判", - "护", - "司", - "足", - "某", - "练", - "差", - "致", - "板", - "田", - "降", - "黑", - "犯", - "负", - "击", - "范", - "继", - "兴", - "似", - "余", - "坚", - "曲", - "输", - "修", - "故", - "城", - "夫", - "够", - "送", - "笔", - "船", - "占", - "右", - "财", - "吃", - "富", - "春", - "职", - "觉", - "汉", - "画", - "功", - "巴", - "跟", - "虽", - "杂", - "飞", - "检", - "吸", - "助", - "升", - "阳", - "互", - "初", - "创", - "抗", - "考", - "投", - "坏", - "策", - "古", - "径", - "换", - "未", - "跑", - "留", - "钢", - "曾", - "端", - "责", - "站", - "简", - "述", - "钱", - "副", - "尽", - "帝", - "射", - "草", - "冲", - "承", - "独", - "令", - "限", - "阿", - "宣", - "环", - "双", - "请", - "超", - "微", - "让", - "控", - "州", - "良", - "轴", - "找", - "否", - "纪", - "益", - "依", - "优", - "顶", - "础", - "载", - "倒", - "房", - "突", - "坐", - "粉", - "敌", - "略", - "客", - "袁", - "冷", - "胜", - "绝", - "析", - "块", - "剂", - "测", - "丝", - "协", - "诉", - "念", - "陈", - "仍", - "罗", - "盐", - "友", - "洋", - "错", - "苦", - "夜", - "刑", - "移", - "频", - "逐", - "靠", - "混", - "母", - "短", - "皮", - "终", - "聚", - "汽", - "村", - "云", - "哪", - "既", - "距", - "卫", - "停", - "烈", - "央", - "察", - "烧", - "迅", - "境", - "若", - "印", - "洲", - "刻", - "括", - "激", - "孔", - "搞", - "甚", - "室", - "待", - "核", - "校", - "散", - "侵", - "吧", - "甲", - "游", - "久", - "菜", - "味", - "旧", - "模", - "湖", - "货", - "损", - "预", - "阻", - "毫", - "普", - "稳", - "乙", - "妈", - "植", - "息", - "扩", - "银", - "语", - "挥", - "酒", - "守", - "拿", - "序", - "纸", - "医", - "缺", - "雨", - "吗", - "针", - "刘", - "啊", - "急", - "唱", - "误", - "训", - "愿", - "审", - "附", - "获", - "茶", - "鲜", - "粮", - "斤", - "孩", - "脱", - "硫", - "肥", - "善", - "龙", - "演", - "父", - "渐", - "血", - "欢", - "械", - "掌", - "歌", - "沙", - "刚", - "攻", - "谓", - "盾", - "讨", - "晚", - "粒", - "乱", - "燃", - "矛", - "乎", - "杀", - "药", - "宁", - "鲁", - "贵", - "钟", - "煤", - "读", - "班", - "伯", - "香", - "介", - "迫", - "句", - "丰", - "培", - "握", - "兰", - "担", - "弦", - "蛋", - "沉", - "假", - "穿", - "执", - "答", - "乐", - "谁", - "顺", - "烟", - "缩", - "征", - "脸", - "喜", - "松", - "脚", - "困", - "异", - "免", - "背", - "星", - "福", - "买", - "染", - "井", - "概", - "慢", - "怕", - "磁", - "倍", - "祖", - "皇", - "促", - "静", - "补", - "评", - "翻", - "肉", - "践", - "尼", - "衣", - "宽", - "扬", - "棉", - "希", - "伤", - "操", - "垂", - "秋", - "宜", - "氢", - "套", - "督", - "振", - "架", - "亮", - "末", - "宪", - "庆", - "编", - "牛", - "触", - "映", - "雷", - "销", - "诗", - "座", - "居", - "抓", - "裂", - "胞", - "呼", - "娘", - "景", - "威", - "绿", - "晶", - "厚", - "盟", - "衡", - "鸡", - "孙", - "延", - "危", - "胶", - "屋", - "乡", - "临", - "陆", - "顾", - "掉", - "呀", - "灯", - "岁", - "措", - "束", - "耐", - "剧", - "玉", - "赵", - "跳", - "哥", - "季", - "课", - "凯", - "胡", - "额", - "款", - "绍", - "卷", - "齐", - "伟", - "蒸", - "殖", - "永", - "宗", - "苗", - "川", - "炉", - "岩", - "弱", - "零", - "杨", - "奏", - "沿", - "露", - "杆", - "探", - "滑", - "镇", - "饭", - "浓", - "航", - "怀", - "赶", - "库", - "夺", - "伊", - "灵", - "税", - "途", - "灭", - "赛", - "归", - "召", - "鼓", - "播", - "盘", - "裁", - "险", - "康", - "唯", - "录", - "菌", - "纯", - "借", - "糖", - "盖", - "横", - "符", - "私", - "努", - "堂", - "域", - "枪", - "润", - "幅", - "哈", - "竟", - "熟", - "虫", - "泽", - "脑", - "壤", - "碳", - "欧", - "遍", - "侧", - "寨", - "敢", - "彻", - "虑", - "斜", - "薄", - "庭", - "纳", - "弹", - "饲", - "伸", - "折", - "麦", - "湿", - "暗", - "荷", - "瓦", - "塞", - "床", - "筑", - "恶", - "户", - "访", - "塔", - "奇", - "透", - "梁", - "刀", - "旋", - "迹", - "卡", - "氯", - "遇", - "份", - "毒", - "泥", - "退", - "洗", - "摆", - "灰", - "彩", - "卖", - "耗", - "夏", - "择", - "忙", - "铜", - "献", - "硬", - "予", - "繁", - "圈", - "雪", - "函", - "亦", - "抽", - "篇", - "阵", - "阴", - "丁", - "尺", - "追", - "堆", - "雄", - "迎", - "泛", - "爸", - "楼", - "避", - "谋", - "吨", - "野", - "猪", - "旗", - "累", - "偏", - "典", - "馆", - "索", - "秦", - "脂", - "潮", - "爷", - "豆", - "忽", - "托", - "惊", - "塑", - "遗", - "愈", - "朱", - "替", - "纤", - "粗", - "倾", - "尚", - "痛", - "楚", - "谢", - "奋", - "购", - "磨", - "君", - "池", - "旁", - "碎", - "骨", - "监", - "捕", - "弟", - "暴", - "割", - "贯", - "殊", - "释", - "词", - "亡", - "壁", - "顿", - "宝", - "午", - "尘", - "闻", - "揭", - "炮", - "残", - "冬", - "桥", - "妇", - "警", - "综", - "招", - "吴", - "付", - "浮", - "遭", - "徐", - "您", - "摇", - "谷", - "赞", - "箱", - "隔", - "订", - "男", - "吹", - "园", - "纷", - "唐", - "败", - "宋", - "玻", - "巨", - "耕", - "坦", - "荣", - "闭", - "湾", - "键", - "凡", - "驻", - "锅", - "救", - "恩", - "剥", - "凝", - "碱", - "齿", - "截", - "炼", - "麻", - "纺", - "禁", - "废", - "盛", - "版", - "缓", - "净", - "睛", - "昌", - "婚", - "涉", - "筒", - "嘴", - "插", - "岸", - "朗", - "庄", - "街", - "藏", - "姑", - "贸", - "腐", - "奴", - "啦", - "惯", - "乘", - "伙", - "恢", - "匀", - "纱", - "扎", - "辩", - "耳", - "彪", - "臣", - "亿", - "璃", - "抵", - "脉", - "秀", - "萨", - "俄", - "网", - "舞", - "店", - "喷", - "纵", - "寸", - "汗", - "挂", - "洪", - "贺", - "闪", - "柬", - "爆", - "烯", - "津", - "稻", - "墙", - "软", - "勇", - "像", - "滚", - "厘", - "蒙", - "芳", - "肯", - "坡", - "柱", - "荡", - "腿", - "仪", - "旅", - "尾", - "轧", - "冰", - "贡", - "登", - "黎", - "削", - "钻", - "勒", - "逃", - "障", - "氨", - "郭", - "峰", - "币", - "港", - "伏", - "轨", - "亩", - "毕", - "擦", - "莫", - "刺", - "浪", - "秘", - "援", - "株", - "健", - "售", - "股", - "岛", - "甘", - "泡", - "睡", - "童", - "铸", - "汤", - "阀", - "休", - "汇", - "舍", - "牧", - "绕", - "炸", - "哲", - "磷", - "绩", - "朋", - "淡", - "尖", - "启", - "陷", - "柴", - "呈", - "徒", - "颜", - "泪", - "稍", - "忘", - "泵", - "蓝", - "拖", - "洞", - "授", - "镜", - "辛", - "壮", - "锋", - "贫", - "虚", - "弯", - "摩", - "泰", - "幼", - "廷", - "尊", - "窗", - "纲", - "弄", - "隶", - "疑", - "氏", - "宫", - "姐", - "震", - "瑞", - "怪", - "尤", - "琴", - "循", - "描", - "膜", - "违", - "夹", - "腰", - "缘", - "珠", - "穷", - "森", - "枝", - "竹", - "沟", - "催", - "绳", - "忆", - "邦", - "剩", - "幸", - "浆", - "栏", - "拥", - "牙", - "贮", - "礼", - "滤", - "钠", - "纹", - "罢", - "拍", - "咱", - "喊", - "袖", - "埃", - "勤", - "罚", - "焦", - "潜", - "伍", - "墨", - "欲", - "缝", - "姓", - "刊", - "饱", - "仿", - "奖", - "铝", - "鬼", - "丽", - "跨", - "默", - "挖", - "链", - "扫", - "喝", - "袋", - "炭", - "污", - "幕", - "诸", - "弧", - "励", - "梅", - "奶", - "洁", - "灾", - "舟", - "鉴", - "苯", - "讼", - "抱", - "毁", - "懂", - "寒", - "智", - "埔", - "寄", - "届", - "跃", - "渡", - "挑", - "丹", - "艰", - "贝", - "碰", - "拔", - "爹", - "戴", - "码", - "梦", - "芽", - "熔", - "赤", - "渔", - "哭", - "敬", - "颗", - "奔", - "铅", - "仲", - "虎", - "稀", - "妹", - "乏", - "珍", - "申", - "桌", - "遵", - "允", - "隆", - "螺", - "仓", - "魏", - "锐", - "晓", - "氮", - "兼", - "隐", - "碍", - "赫", - "拨", - "忠", - "肃", - "缸", - "牵", - "抢", - "博", - "巧", - "壳", - "兄", - "杜", - "讯", - "诚", - "碧", - "祥", - "柯", - "页", - "巡", - "矩", - "悲", - "灌", - "龄", - "伦", - "票", - "寻", - "桂", - "铺", - "圣", - "恐", - "恰", - "郑", - "趣", - "抬", - "荒", - "腾", - "贴", - "柔", - "滴", - "猛", - "阔", - "辆", - "妻", - "填", - "撤", - "储", - "签", - "闹", - "扰", - "紫", - "砂", - "递", - "戏", - "吊", - "陶", - "伐", - "喂", - "疗", - "瓶", - "婆", - "抚", - "臂", - "摸", - "忍", - "虾", - "蜡", - "邻", - "胸", - "巩", - "挤", - "偶", - "弃", - "槽", - "劲", - "乳", - "邓", - "吉", - "仁", - "烂", - "砖", - "租", - "乌", - "舰", - "伴", - "瓜", - "浅", - "丙", - "暂", - "燥", - "橡", - "柳", - "迷", - "暖", - "牌", - "秧", - "胆", - "详", - "簧", - "踏", - "瓷", - "谱", - "呆", - "宾", - "糊", - "洛", - "辉", - "愤", - "竞", - "隙", - "怒", - "粘", - "乃", - "绪", - "肩", - "籍", - "敏", - "涂", - "熙", - "皆", - "侦", - "悬", - "掘", - "享", - "纠", - "醒", - "狂", - "锁", - "淀", - "恨", - "牲", - "霸", - "爬", - "赏", - "逆", - "玩", - "陵", - "祝", - "秒", - "浙", - "貌", - "役", - "彼", - "悉", - "鸭", - "趋", - "凤", - "晨", - "畜", - "辈", - "秩", - "卵", - "署", - "梯", - "炎", - "滩", - "棋", - "驱", - "筛", - "峡", - "冒", - "啥", - "寿", - "译", - "浸", - "泉", - "帽", - "迟", - "硅", - "疆", - "贷", - "漏", - "稿", - "冠", - "嫩", - "胁", - "芯", - "牢", - "叛", - "蚀", - "奥", - "鸣", - "岭", - "羊", - "凭", - "串", - "塘", - "绘", - "酵", - "融", - "盆", - "锡", - "庙", - "筹", - "冻", - "辅", - "摄", - "袭", - "筋", - "拒", - "僚", - "旱", - "钾", - "鸟", - "漆", - "沈", - "眉", - "疏", - "添", - "棒", - "穗", - "硝", - "韩", - "逼", - "扭", - "侨", - "凉", - "挺", - "碗", - "栽", - "炒", - "杯", - "患", - "馏", - "劝", - "豪", - "辽", - "勃", - "鸿", - "旦", - "吏", - "拜", - "狗", - "埋", - "辊", - "掩", - "饮", - "搬", - "骂", - "辞", - "勾", - "扣", - "估", - "蒋", - "绒", - "雾", - "丈", - "朵", - "姆", - "拟", - "宇", - "辑", - "陕", - "雕", - "偿", - "蓄", - "崇", - "剪", - "倡", - "厅", - "咬", - "驶", - "薯", - "刷", - "斥", - "番", - "赋", - "奉", - "佛", - "浇", - "漫", - "曼", - "扇", - "钙", - "桃", - "扶", - "仔", - "返", - "俗", - "亏", - "腔", - "鞋", - "棱", - "覆", - "框", - "悄", - "叔", - "撞", - "骗", - "勘", - "旺", - "沸", - "孤", - "吐", - "孟", - "渠", - "屈", - "疾", - "妙", - "惜", - "仰", - "狠", - "胀", - "谐", - "抛", - "霉", - "桑", - "岗", - "嘛", - "衰", - "盗", - "渗", - "脏", - "赖", - "涌", - "甜", - "曹", - "阅", - "肌", - "哩", - "厉", - "烃", - "纬", - "毅", - "昨", - "伪", - "症", - "煮", - "叹", - "钉", - "搭", - "茎", - "笼", - "酷", - "偷", - "弓", - "锥", - "恒", - "杰", - "坑", - "鼻", - "翼", - "纶", - "叙", - "狱", - "逮", - "罐", - "络", - "棚", - "抑", - "膨", - "蔬", - "寺", - "骤", - "穆", - "冶", - "枯", - "册", - "尸", - "凸", - "绅", - "坯", - "牺", - "焰", - "轰", - "欣", - "晋", - "瘦", - "御", - "锭", - "锦", - "丧", - "旬", - "锻", - "垄", - "搜", - "扑", - "邀", - "亭", - "酯", - "迈", - "舒", - "脆", - "酶", - "闲", - "忧", - "酚", - "顽", - "羽", - "涨", - "卸", - "仗", - "陪", - "辟", - "惩", - "杭", - "姚", - "肚", - "捉", - "飘", - "漂", - "昆", - "欺", - "吾", - "郎", - "烷", - "汁", - "呵", - "饰", - "萧", - "雅", - "邮", - "迁", - "燕", - "撒", - "姻", - "赴", - "宴", - "烦", - "债", - "帐", - "斑", - "铃", - "旨", - "醇", - "董", - "饼", - "雏", - "姿", - "拌", - "傅", - "腹", - "妥", - "揉", - "贤", - "拆", - "歪", - "葡", - "胺", - "丢", - "浩", - "徽", - "昂", - "垫", - "挡", - "览", - "贪", - "慰", - "缴", - "汪", - "慌", - "冯", - "诺", - "姜", - "谊", - "凶", - "劣", - "诬", - "耀", - "昏", - "躺", - "盈", - "骑", - "乔", - "溪", - "丛", - "卢", - "抹", - "闷", - "咨", - "刮", - "驾", - "缆", - "悟", - "摘", - "铒", - "掷", - "颇", - "幻", - "柄", - "惠", - "惨", - "佳", - "仇", - "腊", - "窝", - "涤", - "剑", - "瞧", - "堡", - "泼", - "葱", - "罩", - "霍", - "捞", - "胎", - "苍", - "滨", - "俩", - "捅", - "湘", - "砍", - "霞", - "邵", - "萄", - "疯", - "淮", - "遂", - "熊", - "粪", - "烘", - "宿", - "档", - "戈", - "驳", - "嫂", - "裕", - "徙", - "箭", - "捐", - "肠", - "撑", - "晒", - "辨", - "殿", - "莲", - "摊", - "搅", - "酱", - "屏", - "疫", - "哀", - "蔡", - "堵", - "沫", - "皱", - "畅", - "叠", - "阁", - "莱", - "敲", - "辖", - "钩", - "痕", - "坝", - "巷", - "饿", - "祸", - "丘", - "玄", - "溜", - "曰", - "逻", - "彭", - "尝", - "卿", - "妨", - "艇", - "吞", - "韦", - "怨", - "矮", - "歇" -]; +export const wordlist: string[] = `的 +一 +是 +在 +不 +了 +有 +和 +人 +这 +中 +大 +为 +上 +个 +国 +我 +以 +要 +他 +时 +来 +用 +们 +生 +到 +作 +地 +于 +出 +就 +分 +对 +成 +会 +可 +主 +发 +年 +动 +同 +工 +也 +能 +下 +过 +子 +说 +产 +种 +面 +而 +方 +后 +多 +定 +行 +学 +法 +所 +民 +得 +经 +十 +三 +之 +进 +着 +等 +部 +度 +家 +电 +力 +里 +如 +水 +化 +高 +自 +二 +理 +起 +小 +物 +现 +实 +加 +量 +都 +两 +体 +制 +机 +当 +使 +点 +从 +业 +本 +去 +把 +性 +好 +应 +开 +它 +合 +还 +因 +由 +其 +些 +然 +前 +外 +天 +政 +四 +日 +那 +社 +义 +事 +平 +形 +相 +全 +表 +间 +样 +与 +关 +各 +重 +新 +线 +内 +数 +正 +心 +反 +你 +明 +看 +原 +又 +么 +利 +比 +或 +但 +质 +气 +第 +向 +道 +命 +此 +变 +条 +只 +没 +结 +解 +问 +意 +建 +月 +公 +无 +系 +军 +很 +情 +者 +最 +立 +代 +想 +已 +通 +并 +提 +直 +题 +党 +程 +展 +五 +果 +料 +象 +员 +革 +位 +入 +常 +文 +总 +次 +品 +式 +活 +设 +及 +管 +特 +件 +长 +求 +老 +头 +基 +资 +边 +流 +路 +级 +少 +图 +山 +统 +接 +知 +较 +将 +组 +见 +计 +别 +她 +手 +角 +期 +根 +论 +运 +农 +指 +几 +九 +区 +强 +放 +决 +西 +被 +干 +做 +必 +战 +先 +回 +则 +任 +取 +据 +处 +队 +南 +给 +色 +光 +门 +即 +保 +治 +北 +造 +百 +规 +热 +领 +七 +海 +口 +东 +导 +器 +压 +志 +世 +金 +增 +争 +济 +阶 +油 +思 +术 +极 +交 +受 +联 +什 +认 +六 +共 +权 +收 +证 +改 +清 +美 +再 +采 +转 +更 +单 +风 +切 +打 +白 +教 +速 +花 +带 +安 +场 +身 +车 +例 +真 +务 +具 +万 +每 +目 +至 +达 +走 +积 +示 +议 +声 +报 +斗 +完 +类 +八 +离 +华 +名 +确 +才 +科 +张 +信 +马 +节 +话 +米 +整 +空 +元 +况 +今 +集 +温 +传 +土 +许 +步 +群 +广 +石 +记 +需 +段 +研 +界 +拉 +林 +律 +叫 +且 +究 +观 +越 +织 +装 +影 +算 +低 +持 +音 +众 +书 +布 +复 +容 +儿 +须 +际 +商 +非 +验 +连 +断 +深 +难 +近 +矿 +千 +周 +委 +素 +技 +备 +半 +办 +青 +省 +列 +习 +响 +约 +支 +般 +史 +感 +劳 +便 +团 +往 +酸 +历 +市 +克 +何 +除 +消 +构 +府 +称 +太 +准 +精 +值 +号 +率 +族 +维 +划 +选 +标 +写 +存 +候 +毛 +亲 +快 +效 +斯 +院 +查 +江 +型 +眼 +王 +按 +格 +养 +易 +置 +派 +层 +片 +始 +却 +专 +状 +育 +厂 +京 +识 +适 +属 +圆 +包 +火 +住 +调 +满 +县 +局 +照 +参 +红 +细 +引 +听 +该 +铁 +价 +严 +首 +底 +液 +官 +德 +随 +病 +苏 +失 +尔 +死 +讲 +配 +女 +黄 +推 +显 +谈 +罪 +神 +艺 +呢 +席 +含 +企 +望 +密 +批 +营 +项 +防 +举 +球 +英 +氧 +势 +告 +李 +台 +落 +木 +帮 +轮 +破 +亚 +师 +围 +注 +远 +字 +材 +排 +供 +河 +态 +封 +另 +施 +减 +树 +溶 +怎 +止 +案 +言 +士 +均 +武 +固 +叶 +鱼 +波 +视 +仅 +费 +紧 +爱 +左 +章 +早 +朝 +害 +续 +轻 +服 +试 +食 +充 +兵 +源 +判 +护 +司 +足 +某 +练 +差 +致 +板 +田 +降 +黑 +犯 +负 +击 +范 +继 +兴 +似 +余 +坚 +曲 +输 +修 +故 +城 +夫 +够 +送 +笔 +船 +占 +右 +财 +吃 +富 +春 +职 +觉 +汉 +画 +功 +巴 +跟 +虽 +杂 +飞 +检 +吸 +助 +升 +阳 +互 +初 +创 +抗 +考 +投 +坏 +策 +古 +径 +换 +未 +跑 +留 +钢 +曾 +端 +责 +站 +简 +述 +钱 +副 +尽 +帝 +射 +草 +冲 +承 +独 +令 +限 +阿 +宣 +环 +双 +请 +超 +微 +让 +控 +州 +良 +轴 +找 +否 +纪 +益 +依 +优 +顶 +础 +载 +倒 +房 +突 +坐 +粉 +敌 +略 +客 +袁 +冷 +胜 +绝 +析 +块 +剂 +测 +丝 +协 +诉 +念 +陈 +仍 +罗 +盐 +友 +洋 +错 +苦 +夜 +刑 +移 +频 +逐 +靠 +混 +母 +短 +皮 +终 +聚 +汽 +村 +云 +哪 +既 +距 +卫 +停 +烈 +央 +察 +烧 +迅 +境 +若 +印 +洲 +刻 +括 +激 +孔 +搞 +甚 +室 +待 +核 +校 +散 +侵 +吧 +甲 +游 +久 +菜 +味 +旧 +模 +湖 +货 +损 +预 +阻 +毫 +普 +稳 +乙 +妈 +植 +息 +扩 +银 +语 +挥 +酒 +守 +拿 +序 +纸 +医 +缺 +雨 +吗 +针 +刘 +啊 +急 +唱 +误 +训 +愿 +审 +附 +获 +茶 +鲜 +粮 +斤 +孩 +脱 +硫 +肥 +善 +龙 +演 +父 +渐 +血 +欢 +械 +掌 +歌 +沙 +刚 +攻 +谓 +盾 +讨 +晚 +粒 +乱 +燃 +矛 +乎 +杀 +药 +宁 +鲁 +贵 +钟 +煤 +读 +班 +伯 +香 +介 +迫 +句 +丰 +培 +握 +兰 +担 +弦 +蛋 +沉 +假 +穿 +执 +答 +乐 +谁 +顺 +烟 +缩 +征 +脸 +喜 +松 +脚 +困 +异 +免 +背 +星 +福 +买 +染 +井 +概 +慢 +怕 +磁 +倍 +祖 +皇 +促 +静 +补 +评 +翻 +肉 +践 +尼 +衣 +宽 +扬 +棉 +希 +伤 +操 +垂 +秋 +宜 +氢 +套 +督 +振 +架 +亮 +末 +宪 +庆 +编 +牛 +触 +映 +雷 +销 +诗 +座 +居 +抓 +裂 +胞 +呼 +娘 +景 +威 +绿 +晶 +厚 +盟 +衡 +鸡 +孙 +延 +危 +胶 +屋 +乡 +临 +陆 +顾 +掉 +呀 +灯 +岁 +措 +束 +耐 +剧 +玉 +赵 +跳 +哥 +季 +课 +凯 +胡 +额 +款 +绍 +卷 +齐 +伟 +蒸 +殖 +永 +宗 +苗 +川 +炉 +岩 +弱 +零 +杨 +奏 +沿 +露 +杆 +探 +滑 +镇 +饭 +浓 +航 +怀 +赶 +库 +夺 +伊 +灵 +税 +途 +灭 +赛 +归 +召 +鼓 +播 +盘 +裁 +险 +康 +唯 +录 +菌 +纯 +借 +糖 +盖 +横 +符 +私 +努 +堂 +域 +枪 +润 +幅 +哈 +竟 +熟 +虫 +泽 +脑 +壤 +碳 +欧 +遍 +侧 +寨 +敢 +彻 +虑 +斜 +薄 +庭 +纳 +弹 +饲 +伸 +折 +麦 +湿 +暗 +荷 +瓦 +塞 +床 +筑 +恶 +户 +访 +塔 +奇 +透 +梁 +刀 +旋 +迹 +卡 +氯 +遇 +份 +毒 +泥 +退 +洗 +摆 +灰 +彩 +卖 +耗 +夏 +择 +忙 +铜 +献 +硬 +予 +繁 +圈 +雪 +函 +亦 +抽 +篇 +阵 +阴 +丁 +尺 +追 +堆 +雄 +迎 +泛 +爸 +楼 +避 +谋 +吨 +野 +猪 +旗 +累 +偏 +典 +馆 +索 +秦 +脂 +潮 +爷 +豆 +忽 +托 +惊 +塑 +遗 +愈 +朱 +替 +纤 +粗 +倾 +尚 +痛 +楚 +谢 +奋 +购 +磨 +君 +池 +旁 +碎 +骨 +监 +捕 +弟 +暴 +割 +贯 +殊 +释 +词 +亡 +壁 +顿 +宝 +午 +尘 +闻 +揭 +炮 +残 +冬 +桥 +妇 +警 +综 +招 +吴 +付 +浮 +遭 +徐 +您 +摇 +谷 +赞 +箱 +隔 +订 +男 +吹 +园 +纷 +唐 +败 +宋 +玻 +巨 +耕 +坦 +荣 +闭 +湾 +键 +凡 +驻 +锅 +救 +恩 +剥 +凝 +碱 +齿 +截 +炼 +麻 +纺 +禁 +废 +盛 +版 +缓 +净 +睛 +昌 +婚 +涉 +筒 +嘴 +插 +岸 +朗 +庄 +街 +藏 +姑 +贸 +腐 +奴 +啦 +惯 +乘 +伙 +恢 +匀 +纱 +扎 +辩 +耳 +彪 +臣 +亿 +璃 +抵 +脉 +秀 +萨 +俄 +网 +舞 +店 +喷 +纵 +寸 +汗 +挂 +洪 +贺 +闪 +柬 +爆 +烯 +津 +稻 +墙 +软 +勇 +像 +滚 +厘 +蒙 +芳 +肯 +坡 +柱 +荡 +腿 +仪 +旅 +尾 +轧 +冰 +贡 +登 +黎 +削 +钻 +勒 +逃 +障 +氨 +郭 +峰 +币 +港 +伏 +轨 +亩 +毕 +擦 +莫 +刺 +浪 +秘 +援 +株 +健 +售 +股 +岛 +甘 +泡 +睡 +童 +铸 +汤 +阀 +休 +汇 +舍 +牧 +绕 +炸 +哲 +磷 +绩 +朋 +淡 +尖 +启 +陷 +柴 +呈 +徒 +颜 +泪 +稍 +忘 +泵 +蓝 +拖 +洞 +授 +镜 +辛 +壮 +锋 +贫 +虚 +弯 +摩 +泰 +幼 +廷 +尊 +窗 +纲 +弄 +隶 +疑 +氏 +宫 +姐 +震 +瑞 +怪 +尤 +琴 +循 +描 +膜 +违 +夹 +腰 +缘 +珠 +穷 +森 +枝 +竹 +沟 +催 +绳 +忆 +邦 +剩 +幸 +浆 +栏 +拥 +牙 +贮 +礼 +滤 +钠 +纹 +罢 +拍 +咱 +喊 +袖 +埃 +勤 +罚 +焦 +潜 +伍 +墨 +欲 +缝 +姓 +刊 +饱 +仿 +奖 +铝 +鬼 +丽 +跨 +默 +挖 +链 +扫 +喝 +袋 +炭 +污 +幕 +诸 +弧 +励 +梅 +奶 +洁 +灾 +舟 +鉴 +苯 +讼 +抱 +毁 +懂 +寒 +智 +埔 +寄 +届 +跃 +渡 +挑 +丹 +艰 +贝 +碰 +拔 +爹 +戴 +码 +梦 +芽 +熔 +赤 +渔 +哭 +敬 +颗 +奔 +铅 +仲 +虎 +稀 +妹 +乏 +珍 +申 +桌 +遵 +允 +隆 +螺 +仓 +魏 +锐 +晓 +氮 +兼 +隐 +碍 +赫 +拨 +忠 +肃 +缸 +牵 +抢 +博 +巧 +壳 +兄 +杜 +讯 +诚 +碧 +祥 +柯 +页 +巡 +矩 +悲 +灌 +龄 +伦 +票 +寻 +桂 +铺 +圣 +恐 +恰 +郑 +趣 +抬 +荒 +腾 +贴 +柔 +滴 +猛 +阔 +辆 +妻 +填 +撤 +储 +签 +闹 +扰 +紫 +砂 +递 +戏 +吊 +陶 +伐 +喂 +疗 +瓶 +婆 +抚 +臂 +摸 +忍 +虾 +蜡 +邻 +胸 +巩 +挤 +偶 +弃 +槽 +劲 +乳 +邓 +吉 +仁 +烂 +砖 +租 +乌 +舰 +伴 +瓜 +浅 +丙 +暂 +燥 +橡 +柳 +迷 +暖 +牌 +秧 +胆 +详 +簧 +踏 +瓷 +谱 +呆 +宾 +糊 +洛 +辉 +愤 +竞 +隙 +怒 +粘 +乃 +绪 +肩 +籍 +敏 +涂 +熙 +皆 +侦 +悬 +掘 +享 +纠 +醒 +狂 +锁 +淀 +恨 +牲 +霸 +爬 +赏 +逆 +玩 +陵 +祝 +秒 +浙 +貌 +役 +彼 +悉 +鸭 +趋 +凤 +晨 +畜 +辈 +秩 +卵 +署 +梯 +炎 +滩 +棋 +驱 +筛 +峡 +冒 +啥 +寿 +译 +浸 +泉 +帽 +迟 +硅 +疆 +贷 +漏 +稿 +冠 +嫩 +胁 +芯 +牢 +叛 +蚀 +奥 +鸣 +岭 +羊 +凭 +串 +塘 +绘 +酵 +融 +盆 +锡 +庙 +筹 +冻 +辅 +摄 +袭 +筋 +拒 +僚 +旱 +钾 +鸟 +漆 +沈 +眉 +疏 +添 +棒 +穗 +硝 +韩 +逼 +扭 +侨 +凉 +挺 +碗 +栽 +炒 +杯 +患 +馏 +劝 +豪 +辽 +勃 +鸿 +旦 +吏 +拜 +狗 +埋 +辊 +掩 +饮 +搬 +骂 +辞 +勾 +扣 +估 +蒋 +绒 +雾 +丈 +朵 +姆 +拟 +宇 +辑 +陕 +雕 +偿 +蓄 +崇 +剪 +倡 +厅 +咬 +驶 +薯 +刷 +斥 +番 +赋 +奉 +佛 +浇 +漫 +曼 +扇 +钙 +桃 +扶 +仔 +返 +俗 +亏 +腔 +鞋 +棱 +覆 +框 +悄 +叔 +撞 +骗 +勘 +旺 +沸 +孤 +吐 +孟 +渠 +屈 +疾 +妙 +惜 +仰 +狠 +胀 +谐 +抛 +霉 +桑 +岗 +嘛 +衰 +盗 +渗 +脏 +赖 +涌 +甜 +曹 +阅 +肌 +哩 +厉 +烃 +纬 +毅 +昨 +伪 +症 +煮 +叹 +钉 +搭 +茎 +笼 +酷 +偷 +弓 +锥 +恒 +杰 +坑 +鼻 +翼 +纶 +叙 +狱 +逮 +罐 +络 +棚 +抑 +膨 +蔬 +寺 +骤 +穆 +冶 +枯 +册 +尸 +凸 +绅 +坯 +牺 +焰 +轰 +欣 +晋 +瘦 +御 +锭 +锦 +丧 +旬 +锻 +垄 +搜 +扑 +邀 +亭 +酯 +迈 +舒 +脆 +酶 +闲 +忧 +酚 +顽 +羽 +涨 +卸 +仗 +陪 +辟 +惩 +杭 +姚 +肚 +捉 +飘 +漂 +昆 +欺 +吾 +郎 +烷 +汁 +呵 +饰 +萧 +雅 +邮 +迁 +燕 +撒 +姻 +赴 +宴 +烦 +债 +帐 +斑 +铃 +旨 +醇 +董 +饼 +雏 +姿 +拌 +傅 +腹 +妥 +揉 +贤 +拆 +歪 +葡 +胺 +丢 +浩 +徽 +昂 +垫 +挡 +览 +贪 +慰 +缴 +汪 +慌 +冯 +诺 +姜 +谊 +凶 +劣 +诬 +耀 +昏 +躺 +盈 +骑 +乔 +溪 +丛 +卢 +抹 +闷 +咨 +刮 +驾 +缆 +悟 +摘 +铒 +掷 +颇 +幻 +柄 +惠 +惨 +佳 +仇 +腊 +窝 +涤 +剑 +瞧 +堡 +泼 +葱 +罩 +霍 +捞 +胎 +苍 +滨 +俩 +捅 +湘 +砍 +霞 +邵 +萄 +疯 +淮 +遂 +熊 +粪 +烘 +宿 +档 +戈 +驳 +嫂 +裕 +徙 +箭 +捐 +肠 +撑 +晒 +辨 +殿 +莲 +摊 +搅 +酱 +屏 +疫 +哀 +蔡 +堵 +沫 +皱 +畅 +叠 +阁 +莱 +敲 +辖 +钩 +痕 +坝 +巷 +饿 +祸 +丘 +玄 +溜 +曰 +逻 +彭 +尝 +卿 +妨 +艇 +吞 +韦 +怨 +矮 +歇`.split("\n"); diff --git a/src/bip39/wordlists/spanish.ts b/src/bip39/wordlists/spanish.ts index fa5cc88..5dbf632 100644 --- a/src/bip39/wordlists/spanish.ts +++ b/src/bip39/wordlists/spanish.ts @@ -1,2050 +1,2048 @@ -export const wordlist: string[] = [ - "ábaco", - "abdomen", - "abeja", - "abierto", - "abogado", - "abono", - "aborto", - "abrazo", - "abrir", - "abuelo", - "abuso", - "acabar", - "academia", - "acceso", - "acción", - "aceite", - "acelga", - "acento", - "aceptar", - "ácido", - "aclarar", - "acné", - "acoger", - "acoso", - "activo", - "acto", - "actriz", - "actuar", - "acudir", - "acuerdo", - "acusar", - "adicto", - "admitir", - "adoptar", - "adorno", - "aduana", - "adulto", - "aéreo", - "afectar", - "afición", - "afinar", - "afirmar", - "ágil", - "agitar", - "agonía", - "agosto", - "agotar", - "agregar", - "agrio", - "agua", - "agudo", - "águila", - "aguja", - "ahogo", - "ahorro", - "aire", - "aislar", - "ajedrez", - "ajeno", - "ajuste", - "alacrán", - "alambre", - "alarma", - "alba", - "álbum", - "alcalde", - "aldea", - "alegre", - "alejar", - "alerta", - "aleta", - "alfiler", - "alga", - "algodón", - "aliado", - "aliento", - "alivio", - "alma", - "almeja", - "almíbar", - "altar", - "alteza", - "altivo", - "alto", - "altura", - "alumno", - "alzar", - "amable", - "amante", - "amapola", - "amargo", - "amasar", - "ámbar", - "ámbito", - "ameno", - "amigo", - "amistad", - "amor", - "amparo", - "amplio", - "ancho", - "anciano", - "ancla", - "andar", - "andén", - "anemia", - "ángulo", - "anillo", - "ánimo", - "anís", - "anotar", - "antena", - "antiguo", - "antojo", - "anual", - "anular", - "anuncio", - "añadir", - "añejo", - "año", - "apagar", - "aparato", - "apetito", - "apio", - "aplicar", - "apodo", - "aporte", - "apoyo", - "aprender", - "aprobar", - "apuesta", - "apuro", - "arado", - "araña", - "arar", - "árbitro", - "árbol", - "arbusto", - "archivo", - "arco", - "arder", - "ardilla", - "arduo", - "área", - "árido", - "aries", - "armonía", - "arnés", - "aroma", - "arpa", - "arpón", - "arreglo", - "arroz", - "arruga", - "arte", - "artista", - "asa", - "asado", - "asalto", - "ascenso", - "asegurar", - "aseo", - "asesor", - "asiento", - "asilo", - "asistir", - "asno", - "asombro", - "áspero", - "astilla", - "astro", - "astuto", - "asumir", - "asunto", - "atajo", - "ataque", - "atar", - "atento", - "ateo", - "ático", - "atleta", - "átomo", - "atraer", - "atroz", - "atún", - "audaz", - "audio", - "auge", - "aula", - "aumento", - "ausente", - "autor", - "aval", - "avance", - "avaro", - "ave", - "avellana", - "avena", - "avestruz", - "avión", - "aviso", - "ayer", - "ayuda", - "ayuno", - "azafrán", - "azar", - "azote", - "azúcar", - "azufre", - "azul", - "baba", - "babor", - "bache", - "bahía", - "baile", - "bajar", - "balanza", - "balcón", - "balde", - "bambú", - "banco", - "banda", - "baño", - "barba", - "barco", - "barniz", - "barro", - "báscula", - "bastón", - "basura", - "batalla", - "batería", - "batir", - "batuta", - "baúl", - "bazar", - "bebé", - "bebida", - "bello", - "besar", - "beso", - "bestia", - "bicho", - "bien", - "bingo", - "blanco", - "bloque", - "blusa", - "boa", - "bobina", - "bobo", - "boca", - "bocina", - "boda", - "bodega", - "boina", - "bola", - "bolero", - "bolsa", - "bomba", - "bondad", - "bonito", - "bono", - "bonsái", - "borde", - "borrar", - "bosque", - "bote", - "botín", - "bóveda", - "bozal", - "bravo", - "brazo", - "brecha", - "breve", - "brillo", - "brinco", - "brisa", - "broca", - "broma", - "bronce", - "brote", - "bruja", - "brusco", - "bruto", - "buceo", - "bucle", - "bueno", - "buey", - "bufanda", - "bufón", - "búho", - "buitre", - "bulto", - "burbuja", - "burla", - "burro", - "buscar", - "butaca", - "buzón", - "caballo", - "cabeza", - "cabina", - "cabra", - "cacao", - "cadáver", - "cadena", - "caer", - "café", - "caída", - "caimán", - "caja", - "cajón", - "cal", - "calamar", - "calcio", - "caldo", - "calidad", - "calle", - "calma", - "calor", - "calvo", - "cama", - "cambio", - "camello", - "camino", - "campo", - "cáncer", - "candil", - "canela", - "canguro", - "canica", - "canto", - "caña", - "cañón", - "caoba", - "caos", - "capaz", - "capitán", - "capote", - "captar", - "capucha", - "cara", - "carbón", - "cárcel", - "careta", - "carga", - "cariño", - "carne", - "carpeta", - "carro", - "carta", - "casa", - "casco", - "casero", - "caspa", - "castor", - "catorce", - "catre", - "caudal", - "causa", - "cazo", - "cebolla", - "ceder", - "cedro", - "celda", - "célebre", - "celoso", - "célula", - "cemento", - "ceniza", - "centro", - "cerca", - "cerdo", - "cereza", - "cero", - "cerrar", - "certeza", - "césped", - "cetro", - "chacal", - "chaleco", - "champú", - "chancla", - "chapa", - "charla", - "chico", - "chiste", - "chivo", - "choque", - "choza", - "chuleta", - "chupar", - "ciclón", - "ciego", - "cielo", - "cien", - "cierto", - "cifra", - "cigarro", - "cima", - "cinco", - "cine", - "cinta", - "ciprés", - "circo", - "ciruela", - "cisne", - "cita", - "ciudad", - "clamor", - "clan", - "claro", - "clase", - "clave", - "cliente", - "clima", - "clínica", - "cobre", - "cocción", - "cochino", - "cocina", - "coco", - "código", - "codo", - "cofre", - "coger", - "cohete", - "cojín", - "cojo", - "cola", - "colcha", - "colegio", - "colgar", - "colina", - "collar", - "colmo", - "columna", - "combate", - "comer", - "comida", - "cómodo", - "compra", - "conde", - "conejo", - "conga", - "conocer", - "consejo", - "contar", - "copa", - "copia", - "corazón", - "corbata", - "corcho", - "cordón", - "corona", - "correr", - "coser", - "cosmos", - "costa", - "cráneo", - "cráter", - "crear", - "crecer", - "creído", - "crema", - "cría", - "crimen", - "cripta", - "crisis", - "cromo", - "crónica", - "croqueta", - "crudo", - "cruz", - "cuadro", - "cuarto", - "cuatro", - "cubo", - "cubrir", - "cuchara", - "cuello", - "cuento", - "cuerda", - "cuesta", - "cueva", - "cuidar", - "culebra", - "culpa", - "culto", - "cumbre", - "cumplir", - "cuna", - "cuneta", - "cuota", - "cupón", - "cúpula", - "curar", - "curioso", - "curso", - "curva", - "cutis", - "dama", - "danza", - "dar", - "dardo", - "dátil", - "deber", - "débil", - "década", - "decir", - "dedo", - "defensa", - "definir", - "dejar", - "delfín", - "delgado", - "delito", - "demora", - "denso", - "dental", - "deporte", - "derecho", - "derrota", - "desayuno", - "deseo", - "desfile", - "desnudo", - "destino", - "desvío", - "detalle", - "detener", - "deuda", - "día", - "diablo", - "diadema", - "diamante", - "diana", - "diario", - "dibujo", - "dictar", - "diente", - "dieta", - "diez", - "difícil", - "digno", - "dilema", - "diluir", - "dinero", - "directo", - "dirigir", - "disco", - "diseño", - "disfraz", - "diva", - "divino", - "doble", - "doce", - "dolor", - "domingo", - "don", - "donar", - "dorado", - "dormir", - "dorso", - "dos", - "dosis", - "dragón", - "droga", - "ducha", - "duda", - "duelo", - "dueño", - "dulce", - "dúo", - "duque", - "durar", - "dureza", - "duro", - "ébano", - "ebrio", - "echar", - "eco", - "ecuador", - "edad", - "edición", - "edificio", - "editor", - "educar", - "efecto", - "eficaz", - "eje", - "ejemplo", - "elefante", - "elegir", - "elemento", - "elevar", - "elipse", - "élite", - "elixir", - "elogio", - "eludir", - "embudo", - "emitir", - "emoción", - "empate", - "empeño", - "empleo", - "empresa", - "enano", - "encargo", - "enchufe", - "encía", - "enemigo", - "enero", - "enfado", - "enfermo", - "engaño", - "enigma", - "enlace", - "enorme", - "enredo", - "ensayo", - "enseñar", - "entero", - "entrar", - "envase", - "envío", - "época", - "equipo", - "erizo", - "escala", - "escena", - "escolar", - "escribir", - "escudo", - "esencia", - "esfera", - "esfuerzo", - "espada", - "espejo", - "espía", - "esposa", - "espuma", - "esquí", - "estar", - "este", - "estilo", - "estufa", - "etapa", - "eterno", - "ética", - "etnia", - "evadir", - "evaluar", - "evento", - "evitar", - "exacto", - "examen", - "exceso", - "excusa", - "exento", - "exigir", - "exilio", - "existir", - "éxito", - "experto", - "explicar", - "exponer", - "extremo", - "fábrica", - "fábula", - "fachada", - "fácil", - "factor", - "faena", - "faja", - "falda", - "fallo", - "falso", - "faltar", - "fama", - "familia", - "famoso", - "faraón", - "farmacia", - "farol", - "farsa", - "fase", - "fatiga", - "fauna", - "favor", - "fax", - "febrero", - "fecha", - "feliz", - "feo", - "feria", - "feroz", - "fértil", - "fervor", - "festín", - "fiable", - "fianza", - "fiar", - "fibra", - "ficción", - "ficha", - "fideo", - "fiebre", - "fiel", - "fiera", - "fiesta", - "figura", - "fijar", - "fijo", - "fila", - "filete", - "filial", - "filtro", - "fin", - "finca", - "fingir", - "finito", - "firma", - "flaco", - "flauta", - "flecha", - "flor", - "flota", - "fluir", - "flujo", - "flúor", - "fobia", - "foca", - "fogata", - "fogón", - "folio", - "folleto", - "fondo", - "forma", - "forro", - "fortuna", - "forzar", - "fosa", - "foto", - "fracaso", - "frágil", - "franja", - "frase", - "fraude", - "freír", - "freno", - "fresa", - "frío", - "frito", - "fruta", - "fuego", - "fuente", - "fuerza", - "fuga", - "fumar", - "función", - "funda", - "furgón", - "furia", - "fusil", - "fútbol", - "futuro", - "gacela", - "gafas", - "gaita", - "gajo", - "gala", - "galería", - "gallo", - "gamba", - "ganar", - "gancho", - "ganga", - "ganso", - "garaje", - "garza", - "gasolina", - "gastar", - "gato", - "gavilán", - "gemelo", - "gemir", - "gen", - "género", - "genio", - "gente", - "geranio", - "gerente", - "germen", - "gesto", - "gigante", - "gimnasio", - "girar", - "giro", - "glaciar", - "globo", - "gloria", - "gol", - "golfo", - "goloso", - "golpe", - "goma", - "gordo", - "gorila", - "gorra", - "gota", - "goteo", - "gozar", - "grada", - "gráfico", - "grano", - "grasa", - "gratis", - "grave", - "grieta", - "grillo", - "gripe", - "gris", - "grito", - "grosor", - "grúa", - "grueso", - "grumo", - "grupo", - "guante", - "guapo", - "guardia", - "guerra", - "guía", - "guiño", - "guion", - "guiso", - "guitarra", - "gusano", - "gustar", - "haber", - "hábil", - "hablar", - "hacer", - "hacha", - "hada", - "hallar", - "hamaca", - "harina", - "haz", - "hazaña", - "hebilla", - "hebra", - "hecho", - "helado", - "helio", - "hembra", - "herir", - "hermano", - "héroe", - "hervir", - "hielo", - "hierro", - "hígado", - "higiene", - "hijo", - "himno", - "historia", - "hocico", - "hogar", - "hoguera", - "hoja", - "hombre", - "hongo", - "honor", - "honra", - "hora", - "hormiga", - "horno", - "hostil", - "hoyo", - "hueco", - "huelga", - "huerta", - "hueso", - "huevo", - "huida", - "huir", - "humano", - "húmedo", - "humilde", - "humo", - "hundir", - "huracán", - "hurto", - "icono", - "ideal", - "idioma", - "ídolo", - "iglesia", - "iglú", - "igual", - "ilegal", - "ilusión", - "imagen", - "imán", - "imitar", - "impar", - "imperio", - "imponer", - "impulso", - "incapaz", - "índice", - "inerte", - "infiel", - "informe", - "ingenio", - "inicio", - "inmenso", - "inmune", - "innato", - "insecto", - "instante", - "interés", - "íntimo", - "intuir", - "inútil", - "invierno", - "ira", - "iris", - "ironía", - "isla", - "islote", - "jabalí", - "jabón", - "jamón", - "jarabe", - "jardín", - "jarra", - "jaula", - "jazmín", - "jefe", - "jeringa", - "jinete", - "jornada", - "joroba", - "joven", - "joya", - "juerga", - "jueves", - "juez", - "jugador", - "jugo", - "juguete", - "juicio", - "junco", - "jungla", - "junio", - "juntar", - "júpiter", - "jurar", - "justo", - "juvenil", - "juzgar", - "kilo", - "koala", - "labio", - "lacio", - "lacra", - "lado", - "ladrón", - "lagarto", - "lágrima", - "laguna", - "laico", - "lamer", - "lámina", - "lámpara", - "lana", - "lancha", - "langosta", - "lanza", - "lápiz", - "largo", - "larva", - "lástima", - "lata", - "látex", - "latir", - "laurel", - "lavar", - "lazo", - "leal", - "lección", - "leche", - "lector", - "leer", - "legión", - "legumbre", - "lejano", - "lengua", - "lento", - "leña", - "león", - "leopardo", - "lesión", - "letal", - "letra", - "leve", - "leyenda", - "libertad", - "libro", - "licor", - "líder", - "lidiar", - "lienzo", - "liga", - "ligero", - "lima", - "límite", - "limón", - "limpio", - "lince", - "lindo", - "línea", - "lingote", - "lino", - "linterna", - "líquido", - "liso", - "lista", - "litera", - "litio", - "litro", - "llaga", - "llama", - "llanto", - "llave", - "llegar", - "llenar", - "llevar", - "llorar", - "llover", - "lluvia", - "lobo", - "loción", - "loco", - "locura", - "lógica", - "logro", - "lombriz", - "lomo", - "lonja", - "lote", - "lucha", - "lucir", - "lugar", - "lujo", - "luna", - "lunes", - "lupa", - "lustro", - "luto", - "luz", - "maceta", - "macho", - "madera", - "madre", - "maduro", - "maestro", - "mafia", - "magia", - "mago", - "maíz", - "maldad", - "maleta", - "malla", - "malo", - "mamá", - "mambo", - "mamut", - "manco", - "mando", - "manejar", - "manga", - "maniquí", - "manjar", - "mano", - "manso", - "manta", - "mañana", - "mapa", - "máquina", - "mar", - "marco", - "marea", - "marfil", - "margen", - "marido", - "mármol", - "marrón", - "martes", - "marzo", - "masa", - "máscara", - "masivo", - "matar", - "materia", - "matiz", - "matriz", - "máximo", - "mayor", - "mazorca", - "mecha", - "medalla", - "medio", - "médula", - "mejilla", - "mejor", - "melena", - "melón", - "memoria", - "menor", - "mensaje", - "mente", - "menú", - "mercado", - "merengue", - "mérito", - "mes", - "mesón", - "meta", - "meter", - "método", - "metro", - "mezcla", - "miedo", - "miel", - "miembro", - "miga", - "mil", - "milagro", - "militar", - "millón", - "mimo", - "mina", - "minero", - "mínimo", - "minuto", - "miope", - "mirar", - "misa", - "miseria", - "misil", - "mismo", - "mitad", - "mito", - "mochila", - "moción", - "moda", - "modelo", - "moho", - "mojar", - "molde", - "moler", - "molino", - "momento", - "momia", - "monarca", - "moneda", - "monja", - "monto", - "moño", - "morada", - "morder", - "moreno", - "morir", - "morro", - "morsa", - "mortal", - "mosca", - "mostrar", - "motivo", - "mover", - "móvil", - "mozo", - "mucho", - "mudar", - "mueble", - "muela", - "muerte", - "muestra", - "mugre", - "mujer", - "mula", - "muleta", - "multa", - "mundo", - "muñeca", - "mural", - "muro", - "músculo", - "museo", - "musgo", - "música", - "muslo", - "nácar", - "nación", - "nadar", - "naipe", - "naranja", - "nariz", - "narrar", - "nasal", - "natal", - "nativo", - "natural", - "náusea", - "naval", - "nave", - "navidad", - "necio", - "néctar", - "negar", - "negocio", - "negro", - "neón", - "nervio", - "neto", - "neutro", - "nevar", - "nevera", - "nicho", - "nido", - "niebla", - "nieto", - "niñez", - "niño", - "nítido", - "nivel", - "nobleza", - "noche", - "nómina", - "noria", - "norma", - "norte", - "nota", - "noticia", - "novato", - "novela", - "novio", - "nube", - "nuca", - "núcleo", - "nudillo", - "nudo", - "nuera", - "nueve", - "nuez", - "nulo", - "número", - "nutria", - "oasis", - "obeso", - "obispo", - "objeto", - "obra", - "obrero", - "observar", - "obtener", - "obvio", - "oca", - "ocaso", - "océano", - "ochenta", - "ocho", - "ocio", - "ocre", - "octavo", - "octubre", - "oculto", - "ocupar", - "ocurrir", - "odiar", - "odio", - "odisea", - "oeste", - "ofensa", - "oferta", - "oficio", - "ofrecer", - "ogro", - "oído", - "oír", - "ojo", - "ola", - "oleada", - "olfato", - "olivo", - "olla", - "olmo", - "olor", - "olvido", - "ombligo", - "onda", - "onza", - "opaco", - "opción", - "ópera", - "opinar", - "oponer", - "optar", - "óptica", - "opuesto", - "oración", - "orador", - "oral", - "órbita", - "orca", - "orden", - "oreja", - "órgano", - "orgía", - "orgullo", - "oriente", - "origen", - "orilla", - "oro", - "orquesta", - "oruga", - "osadía", - "oscuro", - "osezno", - "oso", - "ostra", - "otoño", - "otro", - "oveja", - "óvulo", - "óxido", - "oxígeno", - "oyente", - "ozono", - "pacto", - "padre", - "paella", - "página", - "pago", - "país", - "pájaro", - "palabra", - "palco", - "paleta", - "pálido", - "palma", - "paloma", - "palpar", - "pan", - "panal", - "pánico", - "pantera", - "pañuelo", - "papá", - "papel", - "papilla", - "paquete", - "parar", - "parcela", - "pared", - "parir", - "paro", - "párpado", - "parque", - "párrafo", - "parte", - "pasar", - "paseo", - "pasión", - "paso", - "pasta", - "pata", - "patio", - "patria", - "pausa", - "pauta", - "pavo", - "payaso", - "peatón", - "pecado", - "pecera", - "pecho", - "pedal", - "pedir", - "pegar", - "peine", - "pelar", - "peldaño", - "pelea", - "peligro", - "pellejo", - "pelo", - "peluca", - "pena", - "pensar", - "peñón", - "peón", - "peor", - "pepino", - "pequeño", - "pera", - "percha", - "perder", - "pereza", - "perfil", - "perico", - "perla", - "permiso", - "perro", - "persona", - "pesa", - "pesca", - "pésimo", - "pestaña", - "pétalo", - "petróleo", - "pez", - "pezuña", - "picar", - "pichón", - "pie", - "piedra", - "pierna", - "pieza", - "pijama", - "pilar", - "piloto", - "pimienta", - "pino", - "pintor", - "pinza", - "piña", - "piojo", - "pipa", - "pirata", - "pisar", - "piscina", - "piso", - "pista", - "pitón", - "pizca", - "placa", - "plan", - "plata", - "playa", - "plaza", - "pleito", - "pleno", - "plomo", - "pluma", - "plural", - "pobre", - "poco", - "poder", - "podio", - "poema", - "poesía", - "poeta", - "polen", - "policía", - "pollo", - "polvo", - "pomada", - "pomelo", - "pomo", - "pompa", - "poner", - "porción", - "portal", - "posada", - "poseer", - "posible", - "poste", - "potencia", - "potro", - "pozo", - "prado", - "precoz", - "pregunta", - "premio", - "prensa", - "preso", - "previo", - "primo", - "príncipe", - "prisión", - "privar", - "proa", - "probar", - "proceso", - "producto", - "proeza", - "profesor", - "programa", - "prole", - "promesa", - "pronto", - "propio", - "próximo", - "prueba", - "público", - "puchero", - "pudor", - "pueblo", - "puerta", - "puesto", - "pulga", - "pulir", - "pulmón", - "pulpo", - "pulso", - "puma", - "punto", - "puñal", - "puño", - "pupa", - "pupila", - "puré", - "quedar", - "queja", - "quemar", - "querer", - "queso", - "quieto", - "química", - "quince", - "quitar", - "rábano", - "rabia", - "rabo", - "ración", - "radical", - "raíz", - "rama", - "rampa", - "rancho", - "rango", - "rapaz", - "rápido", - "rapto", - "rasgo", - "raspa", - "rato", - "rayo", - "raza", - "razón", - "reacción", - "realidad", - "rebaño", - "rebote", - "recaer", - "receta", - "rechazo", - "recoger", - "recreo", - "recto", - "recurso", - "red", - "redondo", - "reducir", - "reflejo", - "reforma", - "refrán", - "refugio", - "regalo", - "regir", - "regla", - "regreso", - "rehén", - "reino", - "reír", - "reja", - "relato", - "relevo", - "relieve", - "relleno", - "reloj", - "remar", - "remedio", - "remo", - "rencor", - "rendir", - "renta", - "reparto", - "repetir", - "reposo", - "reptil", - "res", - "rescate", - "resina", - "respeto", - "resto", - "resumen", - "retiro", - "retorno", - "retrato", - "reunir", - "revés", - "revista", - "rey", - "rezar", - "rico", - "riego", - "rienda", - "riesgo", - "rifa", - "rígido", - "rigor", - "rincón", - "riñón", - "río", - "riqueza", - "risa", - "ritmo", - "rito", - "rizo", - "roble", - "roce", - "rociar", - "rodar", - "rodeo", - "rodilla", - "roer", - "rojizo", - "rojo", - "romero", - "romper", - "ron", - "ronco", - "ronda", - "ropa", - "ropero", - "rosa", - "rosca", - "rostro", - "rotar", - "rubí", - "rubor", - "rudo", - "rueda", - "rugir", - "ruido", - "ruina", - "ruleta", - "rulo", - "rumbo", - "rumor", - "ruptura", - "ruta", - "rutina", - "sábado", - "saber", - "sabio", - "sable", - "sacar", - "sagaz", - "sagrado", - "sala", - "saldo", - "salero", - "salir", - "salmón", - "salón", - "salsa", - "salto", - "salud", - "salvar", - "samba", - "sanción", - "sandía", - "sanear", - "sangre", - "sanidad", - "sano", - "santo", - "sapo", - "saque", - "sardina", - "sartén", - "sastre", - "satán", - "sauna", - "saxofón", - "sección", - "seco", - "secreto", - "secta", - "sed", - "seguir", - "seis", - "sello", - "selva", - "semana", - "semilla", - "senda", - "sensor", - "señal", - "señor", - "separar", - "sepia", - "sequía", - "ser", - "serie", - "sermón", - "servir", - "sesenta", - "sesión", - "seta", - "setenta", - "severo", - "sexo", - "sexto", - "sidra", - "siesta", - "siete", - "siglo", - "signo", - "sílaba", - "silbar", - "silencio", - "silla", - "símbolo", - "simio", - "sirena", - "sistema", - "sitio", - "situar", - "sobre", - "socio", - "sodio", - "sol", - "solapa", - "soldado", - "soledad", - "sólido", - "soltar", - "solución", - "sombra", - "sondeo", - "sonido", - "sonoro", - "sonrisa", - "sopa", - "soplar", - "soporte", - "sordo", - "sorpresa", - "sorteo", - "sostén", - "sótano", - "suave", - "subir", - "suceso", - "sudor", - "suegra", - "suelo", - "sueño", - "suerte", - "sufrir", - "sujeto", - "sultán", - "sumar", - "superar", - "suplir", - "suponer", - "supremo", - "sur", - "surco", - "sureño", - "surgir", - "susto", - "sutil", - "tabaco", - "tabique", - "tabla", - "tabú", - "taco", - "tacto", - "tajo", - "talar", - "talco", - "talento", - "talla", - "talón", - "tamaño", - "tambor", - "tango", - "tanque", - "tapa", - "tapete", - "tapia", - "tapón", - "taquilla", - "tarde", - "tarea", - "tarifa", - "tarjeta", - "tarot", - "tarro", - "tarta", - "tatuaje", - "tauro", - "taza", - "tazón", - "teatro", - "techo", - "tecla", - "técnica", - "tejado", - "tejer", - "tejido", - "tela", - "teléfono", - "tema", - "temor", - "templo", - "tenaz", - "tender", - "tener", - "tenis", - "tenso", - "teoría", - "terapia", - "terco", - "término", - "ternura", - "terror", - "tesis", - "tesoro", - "testigo", - "tetera", - "texto", - "tez", - "tibio", - "tiburón", - "tiempo", - "tienda", - "tierra", - "tieso", - "tigre", - "tijera", - "tilde", - "timbre", - "tímido", - "timo", - "tinta", - "tío", - "típico", - "tipo", - "tira", - "tirón", - "titán", - "títere", - "título", - "tiza", - "toalla", - "tobillo", - "tocar", - "tocino", - "todo", - "toga", - "toldo", - "tomar", - "tono", - "tonto", - "topar", - "tope", - "toque", - "tórax", - "torero", - "tormenta", - "torneo", - "toro", - "torpedo", - "torre", - "torso", - "tortuga", - "tos", - "tosco", - "toser", - "tóxico", - "trabajo", - "tractor", - "traer", - "tráfico", - "trago", - "traje", - "tramo", - "trance", - "trato", - "trauma", - "trazar", - "trébol", - "tregua", - "treinta", - "tren", - "trepar", - "tres", - "tribu", - "trigo", - "tripa", - "triste", - "triunfo", - "trofeo", - "trompa", - "tronco", - "tropa", - "trote", - "trozo", - "truco", - "trueno", - "trufa", - "tubería", - "tubo", - "tuerto", - "tumba", - "tumor", - "túnel", - "túnica", - "turbina", - "turismo", - "turno", - "tutor", - "ubicar", - "úlcera", - "umbral", - "unidad", - "unir", - "universo", - "uno", - "untar", - "uña", - "urbano", - "urbe", - "urgente", - "urna", - "usar", - "usuario", - "útil", - "utopía", - "uva", - "vaca", - "vacío", - "vacuna", - "vagar", - "vago", - "vaina", - "vajilla", - "vale", - "válido", - "valle", - "valor", - "válvula", - "vampiro", - "vara", - "variar", - "varón", - "vaso", - "vecino", - "vector", - "vehículo", - "veinte", - "vejez", - "vela", - "velero", - "veloz", - "vena", - "vencer", - "venda", - "veneno", - "vengar", - "venir", - "venta", - "venus", - "ver", - "verano", - "verbo", - "verde", - "vereda", - "verja", - "verso", - "verter", - "vía", - "viaje", - "vibrar", - "vicio", - "víctima", - "vida", - "vídeo", - "vidrio", - "viejo", - "viernes", - "vigor", - "vil", - "villa", - "vinagre", - "vino", - "viñedo", - "violín", - "viral", - "virgo", - "virtud", - "visor", - "víspera", - "vista", - "vitamina", - "viudo", - "vivaz", - "vivero", - "vivir", - "vivo", - "volcán", - "volumen", - "volver", - "voraz", - "votar", - "voto", - "voz", - "vuelo", - "vulgar", - "yacer", - "yate", - "yegua", - "yema", - "yerno", - "yeso", - "yodo", - "yoga", - "yogur", - "zafiro", - "zanja", - "zapato", - "zarza", - "zona", - "zorro", - "zumo", - "zurdo" -]; +export const wordlist: string[] = `ábaco +abdomen +abeja +abierto +abogado +abono +aborto +abrazo +abrir +abuelo +abuso +acabar +academia +acceso +acción +aceite +acelga +acento +aceptar +ácido +aclarar +acné +acoger +acoso +activo +acto +actriz +actuar +acudir +acuerdo +acusar +adicto +admitir +adoptar +adorno +aduana +adulto +aéreo +afectar +afición +afinar +afirmar +ágil +agitar +agonía +agosto +agotar +agregar +agrio +agua +agudo +águila +aguja +ahogo +ahorro +aire +aislar +ajedrez +ajeno +ajuste +alacrán +alambre +alarma +alba +álbum +alcalde +aldea +alegre +alejar +alerta +aleta +alfiler +alga +algodón +aliado +aliento +alivio +alma +almeja +almíbar +altar +alteza +altivo +alto +altura +alumno +alzar +amable +amante +amapola +amargo +amasar +ámbar +ámbito +ameno +amigo +amistad +amor +amparo +amplio +ancho +anciano +ancla +andar +andén +anemia +ángulo +anillo +ánimo +anís +anotar +antena +antiguo +antojo +anual +anular +anuncio +añadir +añejo +año +apagar +aparato +apetito +apio +aplicar +apodo +aporte +apoyo +aprender +aprobar +apuesta +apuro +arado +araña +arar +árbitro +árbol +arbusto +archivo +arco +arder +ardilla +arduo +área +árido +aries +armonía +arnés +aroma +arpa +arpón +arreglo +arroz +arruga +arte +artista +asa +asado +asalto +ascenso +asegurar +aseo +asesor +asiento +asilo +asistir +asno +asombro +áspero +astilla +astro +astuto +asumir +asunto +atajo +ataque +atar +atento +ateo +ático +atleta +átomo +atraer +atroz +atún +audaz +audio +auge +aula +aumento +ausente +autor +aval +avance +avaro +ave +avellana +avena +avestruz +avión +aviso +ayer +ayuda +ayuno +azafrán +azar +azote +azúcar +azufre +azul +baba +babor +bache +bahía +baile +bajar +balanza +balcón +balde +bambú +banco +banda +baño +barba +barco +barniz +barro +báscula +bastón +basura +batalla +batería +batir +batuta +baúl +bazar +bebé +bebida +bello +besar +beso +bestia +bicho +bien +bingo +blanco +bloque +blusa +boa +bobina +bobo +boca +bocina +boda +bodega +boina +bola +bolero +bolsa +bomba +bondad +bonito +bono +bonsái +borde +borrar +bosque +bote +botín +bóveda +bozal +bravo +brazo +brecha +breve +brillo +brinco +brisa +broca +broma +bronce +brote +bruja +brusco +bruto +buceo +bucle +bueno +buey +bufanda +bufón +búho +buitre +bulto +burbuja +burla +burro +buscar +butaca +buzón +caballo +cabeza +cabina +cabra +cacao +cadáver +cadena +caer +café +caída +caimán +caja +cajón +cal +calamar +calcio +caldo +calidad +calle +calma +calor +calvo +cama +cambio +camello +camino +campo +cáncer +candil +canela +canguro +canica +canto +caña +cañón +caoba +caos +capaz +capitán +capote +captar +capucha +cara +carbón +cárcel +careta +carga +cariño +carne +carpeta +carro +carta +casa +casco +casero +caspa +castor +catorce +catre +caudal +causa +cazo +cebolla +ceder +cedro +celda +célebre +celoso +célula +cemento +ceniza +centro +cerca +cerdo +cereza +cero +cerrar +certeza +césped +cetro +chacal +chaleco +champú +chancla +chapa +charla +chico +chiste +chivo +choque +choza +chuleta +chupar +ciclón +ciego +cielo +cien +cierto +cifra +cigarro +cima +cinco +cine +cinta +ciprés +circo +ciruela +cisne +cita +ciudad +clamor +clan +claro +clase +clave +cliente +clima +clínica +cobre +cocción +cochino +cocina +coco +código +codo +cofre +coger +cohete +cojín +cojo +cola +colcha +colegio +colgar +colina +collar +colmo +columna +combate +comer +comida +cómodo +compra +conde +conejo +conga +conocer +consejo +contar +copa +copia +corazón +corbata +corcho +cordón +corona +correr +coser +cosmos +costa +cráneo +cráter +crear +crecer +creído +crema +cría +crimen +cripta +crisis +cromo +crónica +croqueta +crudo +cruz +cuadro +cuarto +cuatro +cubo +cubrir +cuchara +cuello +cuento +cuerda +cuesta +cueva +cuidar +culebra +culpa +culto +cumbre +cumplir +cuna +cuneta +cuota +cupón +cúpula +curar +curioso +curso +curva +cutis +dama +danza +dar +dardo +dátil +deber +débil +década +decir +dedo +defensa +definir +dejar +delfín +delgado +delito +demora +denso +dental +deporte +derecho +derrota +desayuno +deseo +desfile +desnudo +destino +desvío +detalle +detener +deuda +día +diablo +diadema +diamante +diana +diario +dibujo +dictar +diente +dieta +diez +difícil +digno +dilema +diluir +dinero +directo +dirigir +disco +diseño +disfraz +diva +divino +doble +doce +dolor +domingo +don +donar +dorado +dormir +dorso +dos +dosis +dragón +droga +ducha +duda +duelo +dueño +dulce +dúo +duque +durar +dureza +duro +ébano +ebrio +echar +eco +ecuador +edad +edición +edificio +editor +educar +efecto +eficaz +eje +ejemplo +elefante +elegir +elemento +elevar +elipse +élite +elixir +elogio +eludir +embudo +emitir +emoción +empate +empeño +empleo +empresa +enano +encargo +enchufe +encía +enemigo +enero +enfado +enfermo +engaño +enigma +enlace +enorme +enredo +ensayo +enseñar +entero +entrar +envase +envío +época +equipo +erizo +escala +escena +escolar +escribir +escudo +esencia +esfera +esfuerzo +espada +espejo +espía +esposa +espuma +esquí +estar +este +estilo +estufa +etapa +eterno +ética +etnia +evadir +evaluar +evento +evitar +exacto +examen +exceso +excusa +exento +exigir +exilio +existir +éxito +experto +explicar +exponer +extremo +fábrica +fábula +fachada +fácil +factor +faena +faja +falda +fallo +falso +faltar +fama +familia +famoso +faraón +farmacia +farol +farsa +fase +fatiga +fauna +favor +fax +febrero +fecha +feliz +feo +feria +feroz +fértil +fervor +festín +fiable +fianza +fiar +fibra +ficción +ficha +fideo +fiebre +fiel +fiera +fiesta +figura +fijar +fijo +fila +filete +filial +filtro +fin +finca +fingir +finito +firma +flaco +flauta +flecha +flor +flota +fluir +flujo +flúor +fobia +foca +fogata +fogón +folio +folleto +fondo +forma +forro +fortuna +forzar +fosa +foto +fracaso +frágil +franja +frase +fraude +freír +freno +fresa +frío +frito +fruta +fuego +fuente +fuerza +fuga +fumar +función +funda +furgón +furia +fusil +fútbol +futuro +gacela +gafas +gaita +gajo +gala +galería +gallo +gamba +ganar +gancho +ganga +ganso +garaje +garza +gasolina +gastar +gato +gavilán +gemelo +gemir +gen +género +genio +gente +geranio +gerente +germen +gesto +gigante +gimnasio +girar +giro +glaciar +globo +gloria +gol +golfo +goloso +golpe +goma +gordo +gorila +gorra +gota +goteo +gozar +grada +gráfico +grano +grasa +gratis +grave +grieta +grillo +gripe +gris +grito +grosor +grúa +grueso +grumo +grupo +guante +guapo +guardia +guerra +guía +guiño +guion +guiso +guitarra +gusano +gustar +haber +hábil +hablar +hacer +hacha +hada +hallar +hamaca +harina +haz +hazaña +hebilla +hebra +hecho +helado +helio +hembra +herir +hermano +héroe +hervir +hielo +hierro +hígado +higiene +hijo +himno +historia +hocico +hogar +hoguera +hoja +hombre +hongo +honor +honra +hora +hormiga +horno +hostil +hoyo +hueco +huelga +huerta +hueso +huevo +huida +huir +humano +húmedo +humilde +humo +hundir +huracán +hurto +icono +ideal +idioma +ídolo +iglesia +iglú +igual +ilegal +ilusión +imagen +imán +imitar +impar +imperio +imponer +impulso +incapaz +índice +inerte +infiel +informe +ingenio +inicio +inmenso +inmune +innato +insecto +instante +interés +íntimo +intuir +inútil +invierno +ira +iris +ironía +isla +islote +jabalí +jabón +jamón +jarabe +jardín +jarra +jaula +jazmín +jefe +jeringa +jinete +jornada +joroba +joven +joya +juerga +jueves +juez +jugador +jugo +juguete +juicio +junco +jungla +junio +juntar +júpiter +jurar +justo +juvenil +juzgar +kilo +koala +labio +lacio +lacra +lado +ladrón +lagarto +lágrima +laguna +laico +lamer +lámina +lámpara +lana +lancha +langosta +lanza +lápiz +largo +larva +lástima +lata +látex +latir +laurel +lavar +lazo +leal +lección +leche +lector +leer +legión +legumbre +lejano +lengua +lento +leña +león +leopardo +lesión +letal +letra +leve +leyenda +libertad +libro +licor +líder +lidiar +lienzo +liga +ligero +lima +límite +limón +limpio +lince +lindo +línea +lingote +lino +linterna +líquido +liso +lista +litera +litio +litro +llaga +llama +llanto +llave +llegar +llenar +llevar +llorar +llover +lluvia +lobo +loción +loco +locura +lógica +logro +lombriz +lomo +lonja +lote +lucha +lucir +lugar +lujo +luna +lunes +lupa +lustro +luto +luz +maceta +macho +madera +madre +maduro +maestro +mafia +magia +mago +maíz +maldad +maleta +malla +malo +mamá +mambo +mamut +manco +mando +manejar +manga +maniquí +manjar +mano +manso +manta +mañana +mapa +máquina +mar +marco +marea +marfil +margen +marido +mármol +marrón +martes +marzo +masa +máscara +masivo +matar +materia +matiz +matriz +máximo +mayor +mazorca +mecha +medalla +medio +médula +mejilla +mejor +melena +melón +memoria +menor +mensaje +mente +menú +mercado +merengue +mérito +mes +mesón +meta +meter +método +metro +mezcla +miedo +miel +miembro +miga +mil +milagro +militar +millón +mimo +mina +minero +mínimo +minuto +miope +mirar +misa +miseria +misil +mismo +mitad +mito +mochila +moción +moda +modelo +moho +mojar +molde +moler +molino +momento +momia +monarca +moneda +monja +monto +moño +morada +morder +moreno +morir +morro +morsa +mortal +mosca +mostrar +motivo +mover +móvil +mozo +mucho +mudar +mueble +muela +muerte +muestra +mugre +mujer +mula +muleta +multa +mundo +muñeca +mural +muro +músculo +museo +musgo +música +muslo +nácar +nación +nadar +naipe +naranja +nariz +narrar +nasal +natal +nativo +natural +náusea +naval +nave +navidad +necio +néctar +negar +negocio +negro +neón +nervio +neto +neutro +nevar +nevera +nicho +nido +niebla +nieto +niñez +niño +nítido +nivel +nobleza +noche +nómina +noria +norma +norte +nota +noticia +novato +novela +novio +nube +nuca +núcleo +nudillo +nudo +nuera +nueve +nuez +nulo +número +nutria +oasis +obeso +obispo +objeto +obra +obrero +observar +obtener +obvio +oca +ocaso +océano +ochenta +ocho +ocio +ocre +octavo +octubre +oculto +ocupar +ocurrir +odiar +odio +odisea +oeste +ofensa +oferta +oficio +ofrecer +ogro +oído +oír +ojo +ola +oleada +olfato +olivo +olla +olmo +olor +olvido +ombligo +onda +onza +opaco +opción +ópera +opinar +oponer +optar +óptica +opuesto +oración +orador +oral +órbita +orca +orden +oreja +órgano +orgía +orgullo +oriente +origen +orilla +oro +orquesta +oruga +osadía +oscuro +osezno +oso +ostra +otoño +otro +oveja +óvulo +óxido +oxígeno +oyente +ozono +pacto +padre +paella +página +pago +país +pájaro +palabra +palco +paleta +pálido +palma +paloma +palpar +pan +panal +pánico +pantera +pañuelo +papá +papel +papilla +paquete +parar +parcela +pared +parir +paro +párpado +parque +párrafo +parte +pasar +paseo +pasión +paso +pasta +pata +patio +patria +pausa +pauta +pavo +payaso +peatón +pecado +pecera +pecho +pedal +pedir +pegar +peine +pelar +peldaño +pelea +peligro +pellejo +pelo +peluca +pena +pensar +peñón +peón +peor +pepino +pequeño +pera +percha +perder +pereza +perfil +perico +perla +permiso +perro +persona +pesa +pesca +pésimo +pestaña +pétalo +petróleo +pez +pezuña +picar +pichón +pie +piedra +pierna +pieza +pijama +pilar +piloto +pimienta +pino +pintor +pinza +piña +piojo +pipa +pirata +pisar +piscina +piso +pista +pitón +pizca +placa +plan +plata +playa +plaza +pleito +pleno +plomo +pluma +plural +pobre +poco +poder +podio +poema +poesía +poeta +polen +policía +pollo +polvo +pomada +pomelo +pomo +pompa +poner +porción +portal +posada +poseer +posible +poste +potencia +potro +pozo +prado +precoz +pregunta +premio +prensa +preso +previo +primo +príncipe +prisión +privar +proa +probar +proceso +producto +proeza +profesor +programa +prole +promesa +pronto +propio +próximo +prueba +público +puchero +pudor +pueblo +puerta +puesto +pulga +pulir +pulmón +pulpo +pulso +puma +punto +puñal +puño +pupa +pupila +puré +quedar +queja +quemar +querer +queso +quieto +química +quince +quitar +rábano +rabia +rabo +ración +radical +raíz +rama +rampa +rancho +rango +rapaz +rápido +rapto +rasgo +raspa +rato +rayo +raza +razón +reacción +realidad +rebaño +rebote +recaer +receta +rechazo +recoger +recreo +recto +recurso +red +redondo +reducir +reflejo +reforma +refrán +refugio +regalo +regir +regla +regreso +rehén +reino +reír +reja +relato +relevo +relieve +relleno +reloj +remar +remedio +remo +rencor +rendir +renta +reparto +repetir +reposo +reptil +res +rescate +resina +respeto +resto +resumen +retiro +retorno +retrato +reunir +revés +revista +rey +rezar +rico +riego +rienda +riesgo +rifa +rígido +rigor +rincón +riñón +río +riqueza +risa +ritmo +rito +rizo +roble +roce +rociar +rodar +rodeo +rodilla +roer +rojizo +rojo +romero +romper +ron +ronco +ronda +ropa +ropero +rosa +rosca +rostro +rotar +rubí +rubor +rudo +rueda +rugir +ruido +ruina +ruleta +rulo +rumbo +rumor +ruptura +ruta +rutina +sábado +saber +sabio +sable +sacar +sagaz +sagrado +sala +saldo +salero +salir +salmón +salón +salsa +salto +salud +salvar +samba +sanción +sandía +sanear +sangre +sanidad +sano +santo +sapo +saque +sardina +sartén +sastre +satán +sauna +saxofón +sección +seco +secreto +secta +sed +seguir +seis +sello +selva +semana +semilla +senda +sensor +señal +señor +separar +sepia +sequía +ser +serie +sermón +servir +sesenta +sesión +seta +setenta +severo +sexo +sexto +sidra +siesta +siete +siglo +signo +sílaba +silbar +silencio +silla +símbolo +simio +sirena +sistema +sitio +situar +sobre +socio +sodio +sol +solapa +soldado +soledad +sólido +soltar +solución +sombra +sondeo +sonido +sonoro +sonrisa +sopa +soplar +soporte +sordo +sorpresa +sorteo +sostén +sótano +suave +subir +suceso +sudor +suegra +suelo +sueño +suerte +sufrir +sujeto +sultán +sumar +superar +suplir +suponer +supremo +sur +surco +sureño +surgir +susto +sutil +tabaco +tabique +tabla +tabú +taco +tacto +tajo +talar +talco +talento +talla +talón +tamaño +tambor +tango +tanque +tapa +tapete +tapia +tapón +taquilla +tarde +tarea +tarifa +tarjeta +tarot +tarro +tarta +tatuaje +tauro +taza +tazón +teatro +techo +tecla +técnica +tejado +tejer +tejido +tela +teléfono +tema +temor +templo +tenaz +tender +tener +tenis +tenso +teoría +terapia +terco +término +ternura +terror +tesis +tesoro +testigo +tetera +texto +tez +tibio +tiburón +tiempo +tienda +tierra +tieso +tigre +tijera +tilde +timbre +tímido +timo +tinta +tío +típico +tipo +tira +tirón +titán +títere +título +tiza +toalla +tobillo +tocar +tocino +todo +toga +toldo +tomar +tono +tonto +topar +tope +toque +tórax +torero +tormenta +torneo +toro +torpedo +torre +torso +tortuga +tos +tosco +toser +tóxico +trabajo +tractor +traer +tráfico +trago +traje +tramo +trance +trato +trauma +trazar +trébol +tregua +treinta +tren +trepar +tres +tribu +trigo +tripa +triste +triunfo +trofeo +trompa +tronco +tropa +trote +trozo +truco +trueno +trufa +tubería +tubo +tuerto +tumba +tumor +túnel +túnica +turbina +turismo +turno +tutor +ubicar +úlcera +umbral +unidad +unir +universo +uno +untar +uña +urbano +urbe +urgente +urna +usar +usuario +útil +utopía +uva +vaca +vacío +vacuna +vagar +vago +vaina +vajilla +vale +válido +valle +valor +válvula +vampiro +vara +variar +varón +vaso +vecino +vector +vehículo +veinte +vejez +vela +velero +veloz +vena +vencer +venda +veneno +vengar +venir +venta +venus +ver +verano +verbo +verde +vereda +verja +verso +verter +vía +viaje +vibrar +vicio +víctima +vida +vídeo +vidrio +viejo +viernes +vigor +vil +villa +vinagre +vino +viñedo +violín +viral +virgo +virtud +visor +víspera +vista +vitamina +viudo +vivaz +vivero +vivir +vivo +volcán +volumen +volver +voraz +votar +voto +voz +vuelo +vulgar +yacer +yate +yegua +yema +yerno +yeso +yodo +yoga +yogur +zafiro +zanja +zapato +zarza +zona +zorro +zumo +zurdo`.split("\n"); diff --git a/src/bip39/wordlists/traditional-chinese.ts b/src/bip39/wordlists/traditional-chinese.ts index 51ae8ea..0d3548b 100644 --- a/src/bip39/wordlists/traditional-chinese.ts +++ b/src/bip39/wordlists/traditional-chinese.ts @@ -1,2050 +1,2048 @@ -export const wordlist: string[] = [ - "的", - "一", - "是", - "在", - "不", - "了", - "有", - "和", - "人", - "這", - "中", - "大", - "為", - "上", - "個", - "國", - "我", - "以", - "要", - "他", - "時", - "來", - "用", - "們", - "生", - "到", - "作", - "地", - "於", - "出", - "就", - "分", - "對", - "成", - "會", - "可", - "主", - "發", - "年", - "動", - "同", - "工", - "也", - "能", - "下", - "過", - "子", - "說", - "產", - "種", - "面", - "而", - "方", - "後", - "多", - "定", - "行", - "學", - "法", - "所", - "民", - "得", - "經", - "十", - "三", - "之", - "進", - "著", - "等", - "部", - "度", - "家", - "電", - "力", - "裡", - "如", - "水", - "化", - "高", - "自", - "二", - "理", - "起", - "小", - "物", - "現", - "實", - "加", - "量", - "都", - "兩", - "體", - "制", - "機", - "當", - "使", - "點", - "從", - "業", - "本", - "去", - "把", - "性", - "好", - "應", - "開", - "它", - "合", - "還", - "因", - "由", - "其", - "些", - "然", - "前", - "外", - "天", - "政", - "四", - "日", - "那", - "社", - "義", - "事", - "平", - "形", - "相", - "全", - "表", - "間", - "樣", - "與", - "關", - "各", - "重", - "新", - "線", - "內", - "數", - "正", - "心", - "反", - "你", - "明", - "看", - "原", - "又", - "麼", - "利", - "比", - "或", - "但", - "質", - "氣", - "第", - "向", - "道", - "命", - "此", - "變", - "條", - "只", - "沒", - "結", - "解", - "問", - "意", - "建", - "月", - "公", - "無", - "系", - "軍", - "很", - "情", - "者", - "最", - "立", - "代", - "想", - "已", - "通", - "並", - "提", - "直", - "題", - "黨", - "程", - "展", - "五", - "果", - "料", - "象", - "員", - "革", - "位", - "入", - "常", - "文", - "總", - "次", - "品", - "式", - "活", - "設", - "及", - "管", - "特", - "件", - "長", - "求", - "老", - "頭", - "基", - "資", - "邊", - "流", - "路", - "級", - "少", - "圖", - "山", - "統", - "接", - "知", - "較", - "將", - "組", - "見", - "計", - "別", - "她", - "手", - "角", - "期", - "根", - "論", - "運", - "農", - "指", - "幾", - "九", - "區", - "強", - "放", - "決", - "西", - "被", - "幹", - "做", - "必", - "戰", - "先", - "回", - "則", - "任", - "取", - "據", - "處", - "隊", - "南", - "給", - "色", - "光", - "門", - "即", - "保", - "治", - "北", - "造", - "百", - "規", - "熱", - "領", - "七", - "海", - "口", - "東", - "導", - "器", - "壓", - "志", - "世", - "金", - "增", - "爭", - "濟", - "階", - "油", - "思", - "術", - "極", - "交", - "受", - "聯", - "什", - "認", - "六", - "共", - "權", - "收", - "證", - "改", - "清", - "美", - "再", - "採", - "轉", - "更", - "單", - "風", - "切", - "打", - "白", - "教", - "速", - "花", - "帶", - "安", - "場", - "身", - "車", - "例", - "真", - "務", - "具", - "萬", - "每", - "目", - "至", - "達", - "走", - "積", - "示", - "議", - "聲", - "報", - "鬥", - "完", - "類", - "八", - "離", - "華", - "名", - "確", - "才", - "科", - "張", - "信", - "馬", - "節", - "話", - "米", - "整", - "空", - "元", - "況", - "今", - "集", - "溫", - "傳", - "土", - "許", - "步", - "群", - "廣", - "石", - "記", - "需", - "段", - "研", - "界", - "拉", - "林", - "律", - "叫", - "且", - "究", - "觀", - "越", - "織", - "裝", - "影", - "算", - "低", - "持", - "音", - "眾", - "書", - "布", - "复", - "容", - "兒", - "須", - "際", - "商", - "非", - "驗", - "連", - "斷", - "深", - "難", - "近", - "礦", - "千", - "週", - "委", - "素", - "技", - "備", - "半", - "辦", - "青", - "省", - "列", - "習", - "響", - "約", - "支", - "般", - "史", - "感", - "勞", - "便", - "團", - "往", - "酸", - "歷", - "市", - "克", - "何", - "除", - "消", - "構", - "府", - "稱", - "太", - "準", - "精", - "值", - "號", - "率", - "族", - "維", - "劃", - "選", - "標", - "寫", - "存", - "候", - "毛", - "親", - "快", - "效", - "斯", - "院", - "查", - "江", - "型", - "眼", - "王", - "按", - "格", - "養", - "易", - "置", - "派", - "層", - "片", - "始", - "卻", - "專", - "狀", - "育", - "廠", - "京", - "識", - "適", - "屬", - "圓", - "包", - "火", - "住", - "調", - "滿", - "縣", - "局", - "照", - "參", - "紅", - "細", - "引", - "聽", - "該", - "鐵", - "價", - "嚴", - "首", - "底", - "液", - "官", - "德", - "隨", - "病", - "蘇", - "失", - "爾", - "死", - "講", - "配", - "女", - "黃", - "推", - "顯", - "談", - "罪", - "神", - "藝", - "呢", - "席", - "含", - "企", - "望", - "密", - "批", - "營", - "項", - "防", - "舉", - "球", - "英", - "氧", - "勢", - "告", - "李", - "台", - "落", - "木", - "幫", - "輪", - "破", - "亞", - "師", - "圍", - "注", - "遠", - "字", - "材", - "排", - "供", - "河", - "態", - "封", - "另", - "施", - "減", - "樹", - "溶", - "怎", - "止", - "案", - "言", - "士", - "均", - "武", - "固", - "葉", - "魚", - "波", - "視", - "僅", - "費", - "緊", - "愛", - "左", - "章", - "早", - "朝", - "害", - "續", - "輕", - "服", - "試", - "食", - "充", - "兵", - "源", - "判", - "護", - "司", - "足", - "某", - "練", - "差", - "致", - "板", - "田", - "降", - "黑", - "犯", - "負", - "擊", - "范", - "繼", - "興", - "似", - "餘", - "堅", - "曲", - "輸", - "修", - "故", - "城", - "夫", - "夠", - "送", - "筆", - "船", - "佔", - "右", - "財", - "吃", - "富", - "春", - "職", - "覺", - "漢", - "畫", - "功", - "巴", - "跟", - "雖", - "雜", - "飛", - "檢", - "吸", - "助", - "昇", - "陽", - "互", - "初", - "創", - "抗", - "考", - "投", - "壞", - "策", - "古", - "徑", - "換", - "未", - "跑", - "留", - "鋼", - "曾", - "端", - "責", - "站", - "簡", - "述", - "錢", - "副", - "盡", - "帝", - "射", - "草", - "衝", - "承", - "獨", - "令", - "限", - "阿", - "宣", - "環", - "雙", - "請", - "超", - "微", - "讓", - "控", - "州", - "良", - "軸", - "找", - "否", - "紀", - "益", - "依", - "優", - "頂", - "礎", - "載", - "倒", - "房", - "突", - "坐", - "粉", - "敵", - "略", - "客", - "袁", - "冷", - "勝", - "絕", - "析", - "塊", - "劑", - "測", - "絲", - "協", - "訴", - "念", - "陳", - "仍", - "羅", - "鹽", - "友", - "洋", - "錯", - "苦", - "夜", - "刑", - "移", - "頻", - "逐", - "靠", - "混", - "母", - "短", - "皮", - "終", - "聚", - "汽", - "村", - "雲", - "哪", - "既", - "距", - "衛", - "停", - "烈", - "央", - "察", - "燒", - "迅", - "境", - "若", - "印", - "洲", - "刻", - "括", - "激", - "孔", - "搞", - "甚", - "室", - "待", - "核", - "校", - "散", - "侵", - "吧", - "甲", - "遊", - "久", - "菜", - "味", - "舊", - "模", - "湖", - "貨", - "損", - "預", - "阻", - "毫", - "普", - "穩", - "乙", - "媽", - "植", - "息", - "擴", - "銀", - "語", - "揮", - "酒", - "守", - "拿", - "序", - "紙", - "醫", - "缺", - "雨", - "嗎", - "針", - "劉", - "啊", - "急", - "唱", - "誤", - "訓", - "願", - "審", - "附", - "獲", - "茶", - "鮮", - "糧", - "斤", - "孩", - "脫", - "硫", - "肥", - "善", - "龍", - "演", - "父", - "漸", - "血", - "歡", - "械", - "掌", - "歌", - "沙", - "剛", - "攻", - "謂", - "盾", - "討", - "晚", - "粒", - "亂", - "燃", - "矛", - "乎", - "殺", - "藥", - "寧", - "魯", - "貴", - "鐘", - "煤", - "讀", - "班", - "伯", - "香", - "介", - "迫", - "句", - "豐", - "培", - "握", - "蘭", - "擔", - "弦", - "蛋", - "沉", - "假", - "穿", - "執", - "答", - "樂", - "誰", - "順", - "煙", - "縮", - "徵", - "臉", - "喜", - "松", - "腳", - "困", - "異", - "免", - "背", - "星", - "福", - "買", - "染", - "井", - "概", - "慢", - "怕", - "磁", - "倍", - "祖", - "皇", - "促", - "靜", - "補", - "評", - "翻", - "肉", - "踐", - "尼", - "衣", - "寬", - "揚", - "棉", - "希", - "傷", - "操", - "垂", - "秋", - "宜", - "氫", - "套", - "督", - "振", - "架", - "亮", - "末", - "憲", - "慶", - "編", - "牛", - "觸", - "映", - "雷", - "銷", - "詩", - "座", - "居", - "抓", - "裂", - "胞", - "呼", - "娘", - "景", - "威", - "綠", - "晶", - "厚", - "盟", - "衡", - "雞", - "孫", - "延", - "危", - "膠", - "屋", - "鄉", - "臨", - "陸", - "顧", - "掉", - "呀", - "燈", - "歲", - "措", - "束", - "耐", - "劇", - "玉", - "趙", - "跳", - "哥", - "季", - "課", - "凱", - "胡", - "額", - "款", - "紹", - "卷", - "齊", - "偉", - "蒸", - "殖", - "永", - "宗", - "苗", - "川", - "爐", - "岩", - "弱", - "零", - "楊", - "奏", - "沿", - "露", - "桿", - "探", - "滑", - "鎮", - "飯", - "濃", - "航", - "懷", - "趕", - "庫", - "奪", - "伊", - "靈", - "稅", - "途", - "滅", - "賽", - "歸", - "召", - "鼓", - "播", - "盤", - "裁", - "險", - "康", - "唯", - "錄", - "菌", - "純", - "借", - "糖", - "蓋", - "橫", - "符", - "私", - "努", - "堂", - "域", - "槍", - "潤", - "幅", - "哈", - "竟", - "熟", - "蟲", - "澤", - "腦", - "壤", - "碳", - "歐", - "遍", - "側", - "寨", - "敢", - "徹", - "慮", - "斜", - "薄", - "庭", - "納", - "彈", - "飼", - "伸", - "折", - "麥", - "濕", - "暗", - "荷", - "瓦", - "塞", - "床", - "築", - "惡", - "戶", - "訪", - "塔", - "奇", - "透", - "梁", - "刀", - "旋", - "跡", - "卡", - "氯", - "遇", - "份", - "毒", - "泥", - "退", - "洗", - "擺", - "灰", - "彩", - "賣", - "耗", - "夏", - "擇", - "忙", - "銅", - "獻", - "硬", - "予", - "繁", - "圈", - "雪", - "函", - "亦", - "抽", - "篇", - "陣", - "陰", - "丁", - "尺", - "追", - "堆", - "雄", - "迎", - "泛", - "爸", - "樓", - "避", - "謀", - "噸", - "野", - "豬", - "旗", - "累", - "偏", - "典", - "館", - "索", - "秦", - "脂", - "潮", - "爺", - "豆", - "忽", - "托", - "驚", - "塑", - "遺", - "愈", - "朱", - "替", - "纖", - "粗", - "傾", - "尚", - "痛", - "楚", - "謝", - "奮", - "購", - "磨", - "君", - "池", - "旁", - "碎", - "骨", - "監", - "捕", - "弟", - "暴", - "割", - "貫", - "殊", - "釋", - "詞", - "亡", - "壁", - "頓", - "寶", - "午", - "塵", - "聞", - "揭", - "炮", - "殘", - "冬", - "橋", - "婦", - "警", - "綜", - "招", - "吳", - "付", - "浮", - "遭", - "徐", - "您", - "搖", - "谷", - "贊", - "箱", - "隔", - "訂", - "男", - "吹", - "園", - "紛", - "唐", - "敗", - "宋", - "玻", - "巨", - "耕", - "坦", - "榮", - "閉", - "灣", - "鍵", - "凡", - "駐", - "鍋", - "救", - "恩", - "剝", - "凝", - "鹼", - "齒", - "截", - "煉", - "麻", - "紡", - "禁", - "廢", - "盛", - "版", - "緩", - "淨", - "睛", - "昌", - "婚", - "涉", - "筒", - "嘴", - "插", - "岸", - "朗", - "莊", - "街", - "藏", - "姑", - "貿", - "腐", - "奴", - "啦", - "慣", - "乘", - "夥", - "恢", - "勻", - "紗", - "扎", - "辯", - "耳", - "彪", - "臣", - "億", - "璃", - "抵", - "脈", - "秀", - "薩", - "俄", - "網", - "舞", - "店", - "噴", - "縱", - "寸", - "汗", - "掛", - "洪", - "賀", - "閃", - "柬", - "爆", - "烯", - "津", - "稻", - "牆", - "軟", - "勇", - "像", - "滾", - "厘", - "蒙", - "芳", - "肯", - "坡", - "柱", - "盪", - "腿", - "儀", - "旅", - "尾", - "軋", - "冰", - "貢", - "登", - "黎", - "削", - "鑽", - "勒", - "逃", - "障", - "氨", - "郭", - "峰", - "幣", - "港", - "伏", - "軌", - "畝", - "畢", - "擦", - "莫", - "刺", - "浪", - "秘", - "援", - "株", - "健", - "售", - "股", - "島", - "甘", - "泡", - "睡", - "童", - "鑄", - "湯", - "閥", - "休", - "匯", - "舍", - "牧", - "繞", - "炸", - "哲", - "磷", - "績", - "朋", - "淡", - "尖", - "啟", - "陷", - "柴", - "呈", - "徒", - "顏", - "淚", - "稍", - "忘", - "泵", - "藍", - "拖", - "洞", - "授", - "鏡", - "辛", - "壯", - "鋒", - "貧", - "虛", - "彎", - "摩", - "泰", - "幼", - "廷", - "尊", - "窗", - "綱", - "弄", - "隸", - "疑", - "氏", - "宮", - "姐", - "震", - "瑞", - "怪", - "尤", - "琴", - "循", - "描", - "膜", - "違", - "夾", - "腰", - "緣", - "珠", - "窮", - "森", - "枝", - "竹", - "溝", - "催", - "繩", - "憶", - "邦", - "剩", - "幸", - "漿", - "欄", - "擁", - "牙", - "貯", - "禮", - "濾", - "鈉", - "紋", - "罷", - "拍", - "咱", - "喊", - "袖", - "埃", - "勤", - "罰", - "焦", - "潛", - "伍", - "墨", - "欲", - "縫", - "姓", - "刊", - "飽", - "仿", - "獎", - "鋁", - "鬼", - "麗", - "跨", - "默", - "挖", - "鏈", - "掃", - "喝", - "袋", - "炭", - "污", - "幕", - "諸", - "弧", - "勵", - "梅", - "奶", - "潔", - "災", - "舟", - "鑑", - "苯", - "訟", - "抱", - "毀", - "懂", - "寒", - "智", - "埔", - "寄", - "屆", - "躍", - "渡", - "挑", - "丹", - "艱", - "貝", - "碰", - "拔", - "爹", - "戴", - "碼", - "夢", - "芽", - "熔", - "赤", - "漁", - "哭", - "敬", - "顆", - "奔", - "鉛", - "仲", - "虎", - "稀", - "妹", - "乏", - "珍", - "申", - "桌", - "遵", - "允", - "隆", - "螺", - "倉", - "魏", - "銳", - "曉", - "氮", - "兼", - "隱", - "礙", - "赫", - "撥", - "忠", - "肅", - "缸", - "牽", - "搶", - "博", - "巧", - "殼", - "兄", - "杜", - "訊", - "誠", - "碧", - "祥", - "柯", - "頁", - "巡", - "矩", - "悲", - "灌", - "齡", - "倫", - "票", - "尋", - "桂", - "鋪", - "聖", - "恐", - "恰", - "鄭", - "趣", - "抬", - "荒", - "騰", - "貼", - "柔", - "滴", - "猛", - "闊", - "輛", - "妻", - "填", - "撤", - "儲", - "簽", - "鬧", - "擾", - "紫", - "砂", - "遞", - "戲", - "吊", - "陶", - "伐", - "餵", - "療", - "瓶", - "婆", - "撫", - "臂", - "摸", - "忍", - "蝦", - "蠟", - "鄰", - "胸", - "鞏", - "擠", - "偶", - "棄", - "槽", - "勁", - "乳", - "鄧", - "吉", - "仁", - "爛", - "磚", - "租", - "烏", - "艦", - "伴", - "瓜", - "淺", - "丙", - "暫", - "燥", - "橡", - "柳", - "迷", - "暖", - "牌", - "秧", - "膽", - "詳", - "簧", - "踏", - "瓷", - "譜", - "呆", - "賓", - "糊", - "洛", - "輝", - "憤", - "競", - "隙", - "怒", - "粘", - "乃", - "緒", - "肩", - "籍", - "敏", - "塗", - "熙", - "皆", - "偵", - "懸", - "掘", - "享", - "糾", - "醒", - "狂", - "鎖", - "淀", - "恨", - "牲", - "霸", - "爬", - "賞", - "逆", - "玩", - "陵", - "祝", - "秒", - "浙", - "貌", - "役", - "彼", - "悉", - "鴨", - "趨", - "鳳", - "晨", - "畜", - "輩", - "秩", - "卵", - "署", - "梯", - "炎", - "灘", - "棋", - "驅", - "篩", - "峽", - "冒", - "啥", - "壽", - "譯", - "浸", - "泉", - "帽", - "遲", - "矽", - "疆", - "貸", - "漏", - "稿", - "冠", - "嫩", - "脅", - "芯", - "牢", - "叛", - "蝕", - "奧", - "鳴", - "嶺", - "羊", - "憑", - "串", - "塘", - "繪", - "酵", - "融", - "盆", - "錫", - "廟", - "籌", - "凍", - "輔", - "攝", - "襲", - "筋", - "拒", - "僚", - "旱", - "鉀", - "鳥", - "漆", - "沈", - "眉", - "疏", - "添", - "棒", - "穗", - "硝", - "韓", - "逼", - "扭", - "僑", - "涼", - "挺", - "碗", - "栽", - "炒", - "杯", - "患", - "餾", - "勸", - "豪", - "遼", - "勃", - "鴻", - "旦", - "吏", - "拜", - "狗", - "埋", - "輥", - "掩", - "飲", - "搬", - "罵", - "辭", - "勾", - "扣", - "估", - "蔣", - "絨", - "霧", - "丈", - "朵", - "姆", - "擬", - "宇", - "輯", - "陝", - "雕", - "償", - "蓄", - "崇", - "剪", - "倡", - "廳", - "咬", - "駛", - "薯", - "刷", - "斥", - "番", - "賦", - "奉", - "佛", - "澆", - "漫", - "曼", - "扇", - "鈣", - "桃", - "扶", - "仔", - "返", - "俗", - "虧", - "腔", - "鞋", - "棱", - "覆", - "框", - "悄", - "叔", - "撞", - "騙", - "勘", - "旺", - "沸", - "孤", - "吐", - "孟", - "渠", - "屈", - "疾", - "妙", - "惜", - "仰", - "狠", - "脹", - "諧", - "拋", - "黴", - "桑", - "崗", - "嘛", - "衰", - "盜", - "滲", - "臟", - "賴", - "湧", - "甜", - "曹", - "閱", - "肌", - "哩", - "厲", - "烴", - "緯", - "毅", - "昨", - "偽", - "症", - "煮", - "嘆", - "釘", - "搭", - "莖", - "籠", - "酷", - "偷", - "弓", - "錐", - "恆", - "傑", - "坑", - "鼻", - "翼", - "綸", - "敘", - "獄", - "逮", - "罐", - "絡", - "棚", - "抑", - "膨", - "蔬", - "寺", - "驟", - "穆", - "冶", - "枯", - "冊", - "屍", - "凸", - "紳", - "坯", - "犧", - "焰", - "轟", - "欣", - "晉", - "瘦", - "禦", - "錠", - "錦", - "喪", - "旬", - "鍛", - "壟", - "搜", - "撲", - "邀", - "亭", - "酯", - "邁", - "舒", - "脆", - "酶", - "閒", - "憂", - "酚", - "頑", - "羽", - "漲", - "卸", - "仗", - "陪", - "闢", - "懲", - "杭", - "姚", - "肚", - "捉", - "飄", - "漂", - "昆", - "欺", - "吾", - "郎", - "烷", - "汁", - "呵", - "飾", - "蕭", - "雅", - "郵", - "遷", - "燕", - "撒", - "姻", - "赴", - "宴", - "煩", - "債", - "帳", - "斑", - "鈴", - "旨", - "醇", - "董", - "餅", - "雛", - "姿", - "拌", - "傅", - "腹", - "妥", - "揉", - "賢", - "拆", - "歪", - "葡", - "胺", - "丟", - "浩", - "徽", - "昂", - "墊", - "擋", - "覽", - "貪", - "慰", - "繳", - "汪", - "慌", - "馮", - "諾", - "姜", - "誼", - "兇", - "劣", - "誣", - "耀", - "昏", - "躺", - "盈", - "騎", - "喬", - "溪", - "叢", - "盧", - "抹", - "悶", - "諮", - "刮", - "駕", - "纜", - "悟", - "摘", - "鉺", - "擲", - "頗", - "幻", - "柄", - "惠", - "慘", - "佳", - "仇", - "臘", - "窩", - "滌", - "劍", - "瞧", - "堡", - "潑", - "蔥", - "罩", - "霍", - "撈", - "胎", - "蒼", - "濱", - "倆", - "捅", - "湘", - "砍", - "霞", - "邵", - "萄", - "瘋", - "淮", - "遂", - "熊", - "糞", - "烘", - "宿", - "檔", - "戈", - "駁", - "嫂", - "裕", - "徙", - "箭", - "捐", - "腸", - "撐", - "曬", - "辨", - "殿", - "蓮", - "攤", - "攪", - "醬", - "屏", - "疫", - "哀", - "蔡", - "堵", - "沫", - "皺", - "暢", - "疊", - "閣", - "萊", - "敲", - "轄", - "鉤", - "痕", - "壩", - "巷", - "餓", - "禍", - "丘", - "玄", - "溜", - "曰", - "邏", - "彭", - "嘗", - "卿", - "妨", - "艇", - "吞", - "韋", - "怨", - "矮", - "歇" -]; +export const wordlist: string[] = `的 +一 +是 +在 +不 +了 +有 +和 +人 +這 +中 +大 +為 +上 +個 +國 +我 +以 +要 +他 +時 +來 +用 +們 +生 +到 +作 +地 +於 +出 +就 +分 +對 +成 +會 +可 +主 +發 +年 +動 +同 +工 +也 +能 +下 +過 +子 +說 +產 +種 +面 +而 +方 +後 +多 +定 +行 +學 +法 +所 +民 +得 +經 +十 +三 +之 +進 +著 +等 +部 +度 +家 +電 +力 +裡 +如 +水 +化 +高 +自 +二 +理 +起 +小 +物 +現 +實 +加 +量 +都 +兩 +體 +制 +機 +當 +使 +點 +從 +業 +本 +去 +把 +性 +好 +應 +開 +它 +合 +還 +因 +由 +其 +些 +然 +前 +外 +天 +政 +四 +日 +那 +社 +義 +事 +平 +形 +相 +全 +表 +間 +樣 +與 +關 +各 +重 +新 +線 +內 +數 +正 +心 +反 +你 +明 +看 +原 +又 +麼 +利 +比 +或 +但 +質 +氣 +第 +向 +道 +命 +此 +變 +條 +只 +沒 +結 +解 +問 +意 +建 +月 +公 +無 +系 +軍 +很 +情 +者 +最 +立 +代 +想 +已 +通 +並 +提 +直 +題 +黨 +程 +展 +五 +果 +料 +象 +員 +革 +位 +入 +常 +文 +總 +次 +品 +式 +活 +設 +及 +管 +特 +件 +長 +求 +老 +頭 +基 +資 +邊 +流 +路 +級 +少 +圖 +山 +統 +接 +知 +較 +將 +組 +見 +計 +別 +她 +手 +角 +期 +根 +論 +運 +農 +指 +幾 +九 +區 +強 +放 +決 +西 +被 +幹 +做 +必 +戰 +先 +回 +則 +任 +取 +據 +處 +隊 +南 +給 +色 +光 +門 +即 +保 +治 +北 +造 +百 +規 +熱 +領 +七 +海 +口 +東 +導 +器 +壓 +志 +世 +金 +增 +爭 +濟 +階 +油 +思 +術 +極 +交 +受 +聯 +什 +認 +六 +共 +權 +收 +證 +改 +清 +美 +再 +採 +轉 +更 +單 +風 +切 +打 +白 +教 +速 +花 +帶 +安 +場 +身 +車 +例 +真 +務 +具 +萬 +每 +目 +至 +達 +走 +積 +示 +議 +聲 +報 +鬥 +完 +類 +八 +離 +華 +名 +確 +才 +科 +張 +信 +馬 +節 +話 +米 +整 +空 +元 +況 +今 +集 +溫 +傳 +土 +許 +步 +群 +廣 +石 +記 +需 +段 +研 +界 +拉 +林 +律 +叫 +且 +究 +觀 +越 +織 +裝 +影 +算 +低 +持 +音 +眾 +書 +布 +复 +容 +兒 +須 +際 +商 +非 +驗 +連 +斷 +深 +難 +近 +礦 +千 +週 +委 +素 +技 +備 +半 +辦 +青 +省 +列 +習 +響 +約 +支 +般 +史 +感 +勞 +便 +團 +往 +酸 +歷 +市 +克 +何 +除 +消 +構 +府 +稱 +太 +準 +精 +值 +號 +率 +族 +維 +劃 +選 +標 +寫 +存 +候 +毛 +親 +快 +效 +斯 +院 +查 +江 +型 +眼 +王 +按 +格 +養 +易 +置 +派 +層 +片 +始 +卻 +專 +狀 +育 +廠 +京 +識 +適 +屬 +圓 +包 +火 +住 +調 +滿 +縣 +局 +照 +參 +紅 +細 +引 +聽 +該 +鐵 +價 +嚴 +首 +底 +液 +官 +德 +隨 +病 +蘇 +失 +爾 +死 +講 +配 +女 +黃 +推 +顯 +談 +罪 +神 +藝 +呢 +席 +含 +企 +望 +密 +批 +營 +項 +防 +舉 +球 +英 +氧 +勢 +告 +李 +台 +落 +木 +幫 +輪 +破 +亞 +師 +圍 +注 +遠 +字 +材 +排 +供 +河 +態 +封 +另 +施 +減 +樹 +溶 +怎 +止 +案 +言 +士 +均 +武 +固 +葉 +魚 +波 +視 +僅 +費 +緊 +愛 +左 +章 +早 +朝 +害 +續 +輕 +服 +試 +食 +充 +兵 +源 +判 +護 +司 +足 +某 +練 +差 +致 +板 +田 +降 +黑 +犯 +負 +擊 +范 +繼 +興 +似 +餘 +堅 +曲 +輸 +修 +故 +城 +夫 +夠 +送 +筆 +船 +佔 +右 +財 +吃 +富 +春 +職 +覺 +漢 +畫 +功 +巴 +跟 +雖 +雜 +飛 +檢 +吸 +助 +昇 +陽 +互 +初 +創 +抗 +考 +投 +壞 +策 +古 +徑 +換 +未 +跑 +留 +鋼 +曾 +端 +責 +站 +簡 +述 +錢 +副 +盡 +帝 +射 +草 +衝 +承 +獨 +令 +限 +阿 +宣 +環 +雙 +請 +超 +微 +讓 +控 +州 +良 +軸 +找 +否 +紀 +益 +依 +優 +頂 +礎 +載 +倒 +房 +突 +坐 +粉 +敵 +略 +客 +袁 +冷 +勝 +絕 +析 +塊 +劑 +測 +絲 +協 +訴 +念 +陳 +仍 +羅 +鹽 +友 +洋 +錯 +苦 +夜 +刑 +移 +頻 +逐 +靠 +混 +母 +短 +皮 +終 +聚 +汽 +村 +雲 +哪 +既 +距 +衛 +停 +烈 +央 +察 +燒 +迅 +境 +若 +印 +洲 +刻 +括 +激 +孔 +搞 +甚 +室 +待 +核 +校 +散 +侵 +吧 +甲 +遊 +久 +菜 +味 +舊 +模 +湖 +貨 +損 +預 +阻 +毫 +普 +穩 +乙 +媽 +植 +息 +擴 +銀 +語 +揮 +酒 +守 +拿 +序 +紙 +醫 +缺 +雨 +嗎 +針 +劉 +啊 +急 +唱 +誤 +訓 +願 +審 +附 +獲 +茶 +鮮 +糧 +斤 +孩 +脫 +硫 +肥 +善 +龍 +演 +父 +漸 +血 +歡 +械 +掌 +歌 +沙 +剛 +攻 +謂 +盾 +討 +晚 +粒 +亂 +燃 +矛 +乎 +殺 +藥 +寧 +魯 +貴 +鐘 +煤 +讀 +班 +伯 +香 +介 +迫 +句 +豐 +培 +握 +蘭 +擔 +弦 +蛋 +沉 +假 +穿 +執 +答 +樂 +誰 +順 +煙 +縮 +徵 +臉 +喜 +松 +腳 +困 +異 +免 +背 +星 +福 +買 +染 +井 +概 +慢 +怕 +磁 +倍 +祖 +皇 +促 +靜 +補 +評 +翻 +肉 +踐 +尼 +衣 +寬 +揚 +棉 +希 +傷 +操 +垂 +秋 +宜 +氫 +套 +督 +振 +架 +亮 +末 +憲 +慶 +編 +牛 +觸 +映 +雷 +銷 +詩 +座 +居 +抓 +裂 +胞 +呼 +娘 +景 +威 +綠 +晶 +厚 +盟 +衡 +雞 +孫 +延 +危 +膠 +屋 +鄉 +臨 +陸 +顧 +掉 +呀 +燈 +歲 +措 +束 +耐 +劇 +玉 +趙 +跳 +哥 +季 +課 +凱 +胡 +額 +款 +紹 +卷 +齊 +偉 +蒸 +殖 +永 +宗 +苗 +川 +爐 +岩 +弱 +零 +楊 +奏 +沿 +露 +桿 +探 +滑 +鎮 +飯 +濃 +航 +懷 +趕 +庫 +奪 +伊 +靈 +稅 +途 +滅 +賽 +歸 +召 +鼓 +播 +盤 +裁 +險 +康 +唯 +錄 +菌 +純 +借 +糖 +蓋 +橫 +符 +私 +努 +堂 +域 +槍 +潤 +幅 +哈 +竟 +熟 +蟲 +澤 +腦 +壤 +碳 +歐 +遍 +側 +寨 +敢 +徹 +慮 +斜 +薄 +庭 +納 +彈 +飼 +伸 +折 +麥 +濕 +暗 +荷 +瓦 +塞 +床 +築 +惡 +戶 +訪 +塔 +奇 +透 +梁 +刀 +旋 +跡 +卡 +氯 +遇 +份 +毒 +泥 +退 +洗 +擺 +灰 +彩 +賣 +耗 +夏 +擇 +忙 +銅 +獻 +硬 +予 +繁 +圈 +雪 +函 +亦 +抽 +篇 +陣 +陰 +丁 +尺 +追 +堆 +雄 +迎 +泛 +爸 +樓 +避 +謀 +噸 +野 +豬 +旗 +累 +偏 +典 +館 +索 +秦 +脂 +潮 +爺 +豆 +忽 +托 +驚 +塑 +遺 +愈 +朱 +替 +纖 +粗 +傾 +尚 +痛 +楚 +謝 +奮 +購 +磨 +君 +池 +旁 +碎 +骨 +監 +捕 +弟 +暴 +割 +貫 +殊 +釋 +詞 +亡 +壁 +頓 +寶 +午 +塵 +聞 +揭 +炮 +殘 +冬 +橋 +婦 +警 +綜 +招 +吳 +付 +浮 +遭 +徐 +您 +搖 +谷 +贊 +箱 +隔 +訂 +男 +吹 +園 +紛 +唐 +敗 +宋 +玻 +巨 +耕 +坦 +榮 +閉 +灣 +鍵 +凡 +駐 +鍋 +救 +恩 +剝 +凝 +鹼 +齒 +截 +煉 +麻 +紡 +禁 +廢 +盛 +版 +緩 +淨 +睛 +昌 +婚 +涉 +筒 +嘴 +插 +岸 +朗 +莊 +街 +藏 +姑 +貿 +腐 +奴 +啦 +慣 +乘 +夥 +恢 +勻 +紗 +扎 +辯 +耳 +彪 +臣 +億 +璃 +抵 +脈 +秀 +薩 +俄 +網 +舞 +店 +噴 +縱 +寸 +汗 +掛 +洪 +賀 +閃 +柬 +爆 +烯 +津 +稻 +牆 +軟 +勇 +像 +滾 +厘 +蒙 +芳 +肯 +坡 +柱 +盪 +腿 +儀 +旅 +尾 +軋 +冰 +貢 +登 +黎 +削 +鑽 +勒 +逃 +障 +氨 +郭 +峰 +幣 +港 +伏 +軌 +畝 +畢 +擦 +莫 +刺 +浪 +秘 +援 +株 +健 +售 +股 +島 +甘 +泡 +睡 +童 +鑄 +湯 +閥 +休 +匯 +舍 +牧 +繞 +炸 +哲 +磷 +績 +朋 +淡 +尖 +啟 +陷 +柴 +呈 +徒 +顏 +淚 +稍 +忘 +泵 +藍 +拖 +洞 +授 +鏡 +辛 +壯 +鋒 +貧 +虛 +彎 +摩 +泰 +幼 +廷 +尊 +窗 +綱 +弄 +隸 +疑 +氏 +宮 +姐 +震 +瑞 +怪 +尤 +琴 +循 +描 +膜 +違 +夾 +腰 +緣 +珠 +窮 +森 +枝 +竹 +溝 +催 +繩 +憶 +邦 +剩 +幸 +漿 +欄 +擁 +牙 +貯 +禮 +濾 +鈉 +紋 +罷 +拍 +咱 +喊 +袖 +埃 +勤 +罰 +焦 +潛 +伍 +墨 +欲 +縫 +姓 +刊 +飽 +仿 +獎 +鋁 +鬼 +麗 +跨 +默 +挖 +鏈 +掃 +喝 +袋 +炭 +污 +幕 +諸 +弧 +勵 +梅 +奶 +潔 +災 +舟 +鑑 +苯 +訟 +抱 +毀 +懂 +寒 +智 +埔 +寄 +屆 +躍 +渡 +挑 +丹 +艱 +貝 +碰 +拔 +爹 +戴 +碼 +夢 +芽 +熔 +赤 +漁 +哭 +敬 +顆 +奔 +鉛 +仲 +虎 +稀 +妹 +乏 +珍 +申 +桌 +遵 +允 +隆 +螺 +倉 +魏 +銳 +曉 +氮 +兼 +隱 +礙 +赫 +撥 +忠 +肅 +缸 +牽 +搶 +博 +巧 +殼 +兄 +杜 +訊 +誠 +碧 +祥 +柯 +頁 +巡 +矩 +悲 +灌 +齡 +倫 +票 +尋 +桂 +鋪 +聖 +恐 +恰 +鄭 +趣 +抬 +荒 +騰 +貼 +柔 +滴 +猛 +闊 +輛 +妻 +填 +撤 +儲 +簽 +鬧 +擾 +紫 +砂 +遞 +戲 +吊 +陶 +伐 +餵 +療 +瓶 +婆 +撫 +臂 +摸 +忍 +蝦 +蠟 +鄰 +胸 +鞏 +擠 +偶 +棄 +槽 +勁 +乳 +鄧 +吉 +仁 +爛 +磚 +租 +烏 +艦 +伴 +瓜 +淺 +丙 +暫 +燥 +橡 +柳 +迷 +暖 +牌 +秧 +膽 +詳 +簧 +踏 +瓷 +譜 +呆 +賓 +糊 +洛 +輝 +憤 +競 +隙 +怒 +粘 +乃 +緒 +肩 +籍 +敏 +塗 +熙 +皆 +偵 +懸 +掘 +享 +糾 +醒 +狂 +鎖 +淀 +恨 +牲 +霸 +爬 +賞 +逆 +玩 +陵 +祝 +秒 +浙 +貌 +役 +彼 +悉 +鴨 +趨 +鳳 +晨 +畜 +輩 +秩 +卵 +署 +梯 +炎 +灘 +棋 +驅 +篩 +峽 +冒 +啥 +壽 +譯 +浸 +泉 +帽 +遲 +矽 +疆 +貸 +漏 +稿 +冠 +嫩 +脅 +芯 +牢 +叛 +蝕 +奧 +鳴 +嶺 +羊 +憑 +串 +塘 +繪 +酵 +融 +盆 +錫 +廟 +籌 +凍 +輔 +攝 +襲 +筋 +拒 +僚 +旱 +鉀 +鳥 +漆 +沈 +眉 +疏 +添 +棒 +穗 +硝 +韓 +逼 +扭 +僑 +涼 +挺 +碗 +栽 +炒 +杯 +患 +餾 +勸 +豪 +遼 +勃 +鴻 +旦 +吏 +拜 +狗 +埋 +輥 +掩 +飲 +搬 +罵 +辭 +勾 +扣 +估 +蔣 +絨 +霧 +丈 +朵 +姆 +擬 +宇 +輯 +陝 +雕 +償 +蓄 +崇 +剪 +倡 +廳 +咬 +駛 +薯 +刷 +斥 +番 +賦 +奉 +佛 +澆 +漫 +曼 +扇 +鈣 +桃 +扶 +仔 +返 +俗 +虧 +腔 +鞋 +棱 +覆 +框 +悄 +叔 +撞 +騙 +勘 +旺 +沸 +孤 +吐 +孟 +渠 +屈 +疾 +妙 +惜 +仰 +狠 +脹 +諧 +拋 +黴 +桑 +崗 +嘛 +衰 +盜 +滲 +臟 +賴 +湧 +甜 +曹 +閱 +肌 +哩 +厲 +烴 +緯 +毅 +昨 +偽 +症 +煮 +嘆 +釘 +搭 +莖 +籠 +酷 +偷 +弓 +錐 +恆 +傑 +坑 +鼻 +翼 +綸 +敘 +獄 +逮 +罐 +絡 +棚 +抑 +膨 +蔬 +寺 +驟 +穆 +冶 +枯 +冊 +屍 +凸 +紳 +坯 +犧 +焰 +轟 +欣 +晉 +瘦 +禦 +錠 +錦 +喪 +旬 +鍛 +壟 +搜 +撲 +邀 +亭 +酯 +邁 +舒 +脆 +酶 +閒 +憂 +酚 +頑 +羽 +漲 +卸 +仗 +陪 +闢 +懲 +杭 +姚 +肚 +捉 +飄 +漂 +昆 +欺 +吾 +郎 +烷 +汁 +呵 +飾 +蕭 +雅 +郵 +遷 +燕 +撒 +姻 +赴 +宴 +煩 +債 +帳 +斑 +鈴 +旨 +醇 +董 +餅 +雛 +姿 +拌 +傅 +腹 +妥 +揉 +賢 +拆 +歪 +葡 +胺 +丟 +浩 +徽 +昂 +墊 +擋 +覽 +貪 +慰 +繳 +汪 +慌 +馮 +諾 +姜 +誼 +兇 +劣 +誣 +耀 +昏 +躺 +盈 +騎 +喬 +溪 +叢 +盧 +抹 +悶 +諮 +刮 +駕 +纜 +悟 +摘 +鉺 +擲 +頗 +幻 +柄 +惠 +慘 +佳 +仇 +臘 +窩 +滌 +劍 +瞧 +堡 +潑 +蔥 +罩 +霍 +撈 +胎 +蒼 +濱 +倆 +捅 +湘 +砍 +霞 +邵 +萄 +瘋 +淮 +遂 +熊 +糞 +烘 +宿 +檔 +戈 +駁 +嫂 +裕 +徙 +箭 +捐 +腸 +撐 +曬 +辨 +殿 +蓮 +攤 +攪 +醬 +屏 +疫 +哀 +蔡 +堵 +沫 +皺 +暢 +疊 +閣 +萊 +敲 +轄 +鉤 +痕 +壩 +巷 +餓 +禍 +丘 +玄 +溜 +曰 +邏 +彭 +嘗 +卿 +妨 +艇 +吞 +韋 +怨 +矮 +歇`.split("\n"); diff --git a/src/blake2b.ts b/src/blake2b.ts index 1c93eeb..4428d2e 100644 --- a/src/blake2b.ts +++ b/src/blake2b.ts @@ -1,9 +1,10 @@ -const blake2bJs = require("blakejs"); +import { blake2b as _blake2b } from "noble-hashes/lib/blake2b"; +import { assertBytes } from "./utils"; -export function blake2b(input: Buffer, outputLength = 64): Buffer { +export const blake2b = (msg: Uint8Array, outputLength = 64): Uint8Array => { + assertBytes(msg); if (outputLength <= 0 || outputLength > 64) { throw Error("Invalid outputLength"); } - - return Buffer.from(blake2bJs.blake2b(input, undefined, outputLength)); -} + return _blake2b(msg, { dkLen: outputLength }); +}; diff --git a/src/hash-utils.ts b/src/hash-utils.ts deleted file mode 100644 index 066e19f..0000000 --- a/src/hash-utils.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { Hash } from "crypto"; - -export function createHashFunction( - hashConstructor: () => Hash -): (msg: Buffer) => Buffer { - return msg => { - const hash = hashConstructor(); - hash.update(msg); - return Buffer.from(hash.digest()); - }; -} diff --git a/src/hdkey.ts b/src/hdkey.ts index bd26c62..65cc58d 100644 --- a/src/hdkey.ts +++ b/src/hdkey.ts @@ -1,5 +1,244 @@ -import * as hdkeyPure from "./pure/hdkey"; +import { base58check as _base58check } from "micro-base/lib/base58"; +import { hmac } from "noble-hashes/lib/hmac"; +import { ripemd160 } from "noble-hashes/lib/ripemd160"; +import { sha256 } from "noble-hashes/lib/sha256"; +import { sha512 } from "noble-hashes/lib/sha512"; +import * as random from "./random"; +import * as secp256k1 from "./secp256k1"; +import { assertBytes, concatBytes, createView, utf8ToBytes } from "./utils"; +const base58 = _base58check(sha256); -const hdkey: typeof hdkeyPure.HDKey = require("./vendor/hdkey-without-crypto"); +const MASTER_SECRET = utf8ToBytes("Bitcoin seed"); +// Bitcoin hardcoded by default +const BITCOIN_VERSIONS: Versions = { private: 0x0488ade4, public: 0x0488b21e }; -export const HDKey = hdkey; +export interface Versions { + private: number; + public: number; +} + +const hash160 = (data: Uint8Array) => ripemd160(sha256(data)); +const fromU32 = (data: Uint8Array) => createView(data).getUint32(0, false); +const toU32 = (n: number) => { + const buf = new Uint8Array(4); + createView(buf).setUint32(0, n, false); + return buf; +}; + +export class HDKey { + public static HARDENED_OFFSET: number = 0x80000000; + public static fromMasterSeed(seed: Uint8Array, versions?: Versions): HDKey { + const I = hmac(sha512, MASTER_SECRET, seed); + const hdkey = new HDKey(versions); + hdkey.chainCode = I.slice(32); + hdkey.privateKey = I.slice(0, 32); + return hdkey; + } + public static fromExtendedKey(base58key: string, versions?: Versions): HDKey { + // => version(4) || depth(1) || fingerprint(4) || index(4) || chain(32) || key(33) + const hdkey = new HDKey(versions); + const keyBuffer: Uint8Array = base58.decode(base58key); + const keyView = createView(keyBuffer); + const version = keyView.getUint32(0, false); + hdkey.depth = keyBuffer[4]; + hdkey.parentFingerprint = keyView.getUint32(5, false); + hdkey.index = keyView.getUint32(9, false); + hdkey.chainCode = keyBuffer.slice(13, 45); + const key = keyBuffer.slice(45); + const isPriv = key[0] === 0; + if (version !== hdkey.versions[isPriv ? "private" : "public"]) { + throw new Error("Version mismatch"); + } + if (isPriv) { + hdkey.privateKey = key.slice(1); + } else { + hdkey.publicKey = key; + } + return hdkey; + } + + public static fromJSON(json: { xpriv: string }): HDKey { + return HDKey.fromExtendedKey(json.xpriv); + } + + public versions: Versions; + public depth: number = 0; + public index: number = 0; + public chainCode: Uint8Array | null = null; + public parentFingerprint: number = 0; + private privKey?: Uint8Array; + private pubKey?: Uint8Array; + private pubHash: Uint8Array | undefined; + + constructor(versions?: Versions) { + this.versions = versions || BITCOIN_VERSIONS; + } + get fingerprint(): number { + if (!this.pubHash) { + throw new Error("No publicKey set!"); + } + return fromU32(this.pubHash); + } + get identifier(): Uint8Array | undefined { + return this.pubHash; + } + get pubKeyHash(): Uint8Array | undefined { + return this.pubHash; + } + get privateKey(): Uint8Array | null { + return this.privKey || null; + } + set privateKey(value: Uint8Array | null) { + if (!value || !secp256k1.privateKeyVerify(value)) { + throw new Error("Invalid private key"); + } + this.privKey = value; + this.pubKey = secp256k1.publicKeyCreate(value, true); + this.pubHash = hash160(this.pubKey); + } + get publicKey(): Uint8Array | null { + return this.pubKey || null; + } + set publicKey(value: Uint8Array | null) { + if (!value || !secp256k1.publicKeyVerify(value)) { + throw new Error("Invalid public key"); + } + this.pubKey = secp256k1.publicKeyConvert(value, true); // force compressed point + this.pubHash = hash160(this.pubKey); + this.privKey = undefined; + } + + get privateExtendedKey(): string { + if (!this.privKey) { + throw new Error("No private key"); + } + return base58.encode( + this.serialize( + this.versions.private, + concatBytes(new Uint8Array([0]), this.privKey) + ) + ); + } + get publicExtendedKey(): string { + if (!this.pubKey) { + throw new Error("No public key"); + } + return base58.encode(this.serialize(this.versions.public, this.pubKey)); + } + + public derive(path: string): HDKey { + if (!/^[mM]'?/.test(path)) { + throw new Error('Path must start with "m" or "M"'); + } + if (/^[mM]'?$/.test(path)) { + return this; + } + const parts = path.replace(/^[mM]'?\//, "").split("/"); + // tslint:disable-next-line + let child: HDKey = this; + for (const c of parts) { + const m = /^(\d+)('?)$/.exec(c); + if (!m || m.length !== 3) { + throw new Error(`Invalid child index: ${c}`); + } + let idx = +m[1]; + if (!Number.isSafeInteger(idx) || idx >= HDKey.HARDENED_OFFSET) { + throw new Error("Invalid index"); + } + // hardened key + if (m[2] === "'") { + idx += HDKey.HARDENED_OFFSET; + } + child = child.deriveChild(idx); + } + return child; + } + public deriveChild(index: number): HDKey { + if (!Number.isSafeInteger(index) || index < 0 || index >= 2 ** 33) { + throw new Error( + `Child index should be positive 32-bit integer, not ${index}` + ); + } + if (!this.pubKey || !this.chainCode) { + throw new Error("No publicKey or chainCode set"); + } + let data = new Uint8Array(4); + createView(data).setUint32(0, index, false); + if (index >= HDKey.HARDENED_OFFSET) { + // Hardened + if (!this.privKey) { + throw new Error("Could not derive hardened child key"); + } + // Hardened child: 0x00 || ser256(kpar) || ser32(index) + data = concatBytes(new Uint8Array([0]), this.privKey, data); + } else { + // Normal child: serP(point(kpar)) || ser32(index) + data = concatBytes(this.pubKey, data); + } + const I = hmac(sha512, this.chainCode, data); + const child = new HDKey(this.versions); + try { + // Private parent key -> private child key + if (this.privateKey) { + child.privateKey = secp256k1.privateKeyTweakAdd( + this.privateKey.slice(), + I.slice(0, 32) + ); + } else { + child.publicKey = secp256k1.publicKeyTweakAdd( + this.pubKey.slice(), + I.slice(0, 32), + true + ); + } + } catch (err) { + return this.deriveChild(index + 1); + } + child.chainCode = I.slice(32); + child.depth = this.depth + 1; + child.parentFingerprint = this.fingerprint; + child.index = index; + return child; + } + public sign(hash: Uint8Array): Uint8Array { + if (!this.privateKey) { + throw new Error("No privateKey set!"); + } + return secp256k1.ecdsaSign(hash, this.privateKey).signature; + } + public verify(hash: Uint8Array, signature: Uint8Array): boolean { + if (!this.publicKey) { + throw new Error("No publicKey set!"); + } + return secp256k1.ecdsaVerify(signature, hash, this.publicKey!); + } + public wipePrivateData(): this { + if (this.privKey) { + this.privKey.set(random.getRandomBytesSync(this.privKey.length)); + } + this.privKey = undefined; + return this; + } + public toJSON(): { xpriv: string; xpub: string } { + return { + xpriv: this.privateExtendedKey, + xpub: this.publicExtendedKey + }; + } + + private serialize(version: number, key: Uint8Array) { + if (!this.chainCode) { + throw new Error("No chainCode set"); + } + assertBytes(key, 33); + // version(4) || depth(1) || fingerprint(4) || index(4) || chain(32) || key(33) + return concatBytes( + toU32(version), + new Uint8Array([this.depth]), + toU32(this.parentFingerprint), + toU32(this.index), + this.chainCode, + key + ); + } +} diff --git a/src/keccak.ts b/src/keccak.ts index 369065f..7f82fb0 100644 --- a/src/keccak.ts +++ b/src/keccak.ts @@ -1,19 +1,7 @@ -import { createHashFunction } from "./hash-utils"; +import * as sha3 from "noble-hashes/lib/sha3"; +import { wrapHash } from "./utils"; -const createKeccakHash = require("keccak"); - -export const keccak224 = createHashFunction(() => - createKeccakHash("keccak224") -); - -export const keccak256 = createHashFunction(() => - createKeccakHash("keccak256") -); - -export const keccak384 = createHashFunction(() => - createKeccakHash("keccak384") -); - -export const keccak512 = createHashFunction(() => - createKeccakHash("keccak512") -); +export const keccak224 = wrapHash(sha3.keccak_224); +export const keccak256 = wrapHash(sha3.keccak_256); +export const keccak384 = wrapHash(sha3.keccak_384); +export const keccak512 = wrapHash(sha3.keccak_512); diff --git a/src/pbkdf2.ts b/src/pbkdf2.ts index c61992f..abde3f1 100644 --- a/src/pbkdf2.ts +++ b/src/pbkdf2.ts @@ -1,37 +1,42 @@ -import * as pbkdf2Js from "pbkdf2"; +import { + pbkdf2 as _pbkdf2, + pbkdf2Async as _pbkdf2Async +} from "noble-hashes/lib/pbkdf2"; +import { sha256 } from "noble-hashes/lib/sha256"; +import { assertBytes } from "./utils"; -export function pbkdf2( - password: Buffer, - salt: Buffer, +export async function pbkdf2( + password: Uint8Array, + salt: Uint8Array, iterations: number, keylen: number, digest: string -): Promise { - return new Promise((resolve, reject) => { - pbkdf2Js.pbkdf2( - password, - salt, - iterations, - keylen, - digest, - (err, result) => { - if (err) { - reject(err); - return; - } - - resolve(result); - } - ); +): Promise { + if (digest !== "sha256") { + throw new Error("Only sha256 is supported"); + } + assertBytes(password); + assertBytes(salt); + return _pbkdf2Async(sha256, password, salt, { + c: iterations, + dkLen: keylen }); } export function pbkdf2Sync( - password: Buffer, - salt: Buffer, + password: Uint8Array, + salt: Uint8Array, iterations: number, keylen: number, digest: string -): Buffer { - return pbkdf2Js.pbkdf2Sync(password, salt, iterations, keylen, digest); +): Uint8Array { + if (digest !== "sha256") { + throw new Error("Only sha256 is supported"); + } + assertBytes(password); + assertBytes(salt); + return _pbkdf2(sha256, password, salt, { + c: iterations, + dkLen: keylen + }); } diff --git a/src/pure/hdkey.ts b/src/pure/hdkey.ts deleted file mode 100644 index be997e9..0000000 --- a/src/pure/hdkey.ts +++ /dev/null @@ -1,36 +0,0 @@ -export interface Versions { - private: number; - public: number; -} - -export declare class HDKeyT { - public static HARDENED_OFFSET: number; - public static fromMasterSeed(seed: Buffer, versions?: Versions): HDKeyT; - public static fromExtendedKey(base58key: string, versions?: Versions): HDKeyT; - public static fromJSON(json: { xpriv: string }): HDKeyT; - - public versions: Versions; - public depth: number; - public index: number; - public chainCode: Buffer | null; - public privateKey: Buffer | null; - public publicKey: Buffer | null; - public fingerprint: number; - public parentFingerprint: number; - public pubKeyHash: Buffer | undefined; - public identifier: Buffer | undefined; - public privateExtendedKey: string; - public publicExtendedKey: string; - - private constructor(versios: Versions); - public derive(path: string): HDKeyT; - public deriveChild(index: number): HDKeyT; - public sign(hash: Buffer): Buffer; - public verify(hash: Buffer, signature: Buffer): boolean; - public wipePrivateData(): this; - public toJSON(): { xpriv: string; xpub: string }; -} - -const hdkey: typeof HDKeyT = require("./vendor/hdkey-without-crypto"); - -export const HDKey = hdkey; diff --git a/src/pure/ripemd160.ts b/src/pure/ripemd160.ts deleted file mode 100644 index 4243f04..0000000 --- a/src/pure/ripemd160.ts +++ /dev/null @@ -1,5 +0,0 @@ -const { ripemd160: Ripemd160 } = require("hash.js/lib/hash/ripemd"); - -import { createHashFunction } from "../hash-utils"; - -export const ripemd160 = createHashFunction(() => new Ripemd160()); diff --git a/src/pure/sha256.ts b/src/pure/sha256.ts deleted file mode 100644 index 669cca9..0000000 --- a/src/pure/sha256.ts +++ /dev/null @@ -1,5 +0,0 @@ -const Sha256Hash = require("hash.js/lib/hash/sha/256"); - -import { createHashFunction } from "../hash-utils"; - -export const sha256 = createHashFunction(() => new Sha256Hash()); diff --git a/src/pure/shims/hdkey-crypto.ts b/src/pure/shims/hdkey-crypto.ts deleted file mode 100644 index 077dfdb..0000000 --- a/src/pure/shims/hdkey-crypto.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { ripemd160 } from "../ripemd160"; -import { sha256 } from "../sha256"; - -export const createHmac = require("create-hmac"); -export const randomBytes = require("randombytes"); - -class Hash { - private buffers: Buffer[] = []; - - constructor(private readonly hashFunction: (msg: Buffer) => Buffer) {} - - public update(buffer: Buffer): this { - if (!Buffer.isBuffer(buffer)) { - throw new Error("hdkey-crypto shim is outdated"); - } - - this.buffers.push(buffer); - - return this; - } - - public digest(param: any): Buffer { - if (param) { - throw new Error("hdkey-crypto shim is outdated"); - } - - return this.hashFunction(Buffer.concat(this.buffers)); - } -} - -// We don't use create-hash here, as it doesn't work well with Rollup -export const createHash = (name: string) => { - if (name === "ripemd160") { - return new Hash(ripemd160); - } - - if (name === "sha256") { - return new Hash(sha256); - } - - throw new Error("hdkey-crypto shim is outdated"); -}; diff --git a/src/pure/shims/hdkey-secp256k1v3.ts b/src/pure/shims/hdkey-secp256k1v3.ts deleted file mode 100644 index 23e8dab..0000000 --- a/src/pure/shims/hdkey-secp256k1v3.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "../../shims/hdkey-secp256k1v3"; diff --git a/src/pure/vendor/.gitignore b/src/pure/vendor/.gitignore deleted file mode 100644 index e69de29..0000000 diff --git a/src/random.ts b/src/random.ts index f0d50b7..7947c37 100644 --- a/src/random.ts +++ b/src/random.ts @@ -1,18 +1,15 @@ -const randombytes = require("randombytes"); +import { crypto } from "./utils"; -export function getRandomBytes(bytes: number): Promise { - return new Promise((resolve, reject) => { - randombytes(bytes, function(err: any, resp: Buffer) { - if (err) { - reject(err); - return; - } - - resolve(resp); - }); - }); +export function getRandomBytesSync(bytes: number): Uint8Array { + if (crypto.web) { + return crypto.web.getRandomValues(new Uint8Array(bytes)); + } else if (crypto.node) { + return new Uint8Array(crypto.node.randomBytes(bytes).buffer); + } else { + throw new Error("The environment doesn't have randomBytes function"); + } } -export function getRandomBytesSync(bytes: number): Buffer { - return randombytes(bytes); +export async function getRandomBytes(bytes: number): Promise { + return getRandomBytesSync(bytes); } diff --git a/src/ripemd160.ts b/src/ripemd160.ts index 18add62..aa444ea 100644 --- a/src/ripemd160.ts +++ b/src/ripemd160.ts @@ -1,7 +1,4 @@ -import crypto from "crypto"; +import { ripemd160 as _ripemd160 } from "noble-hashes/lib/ripemd160"; +import { wrapHash } from "./utils"; -import { createHashFunction } from "./hash-utils"; - -export const ripemd160 = createHashFunction(() => - crypto.createHash("ripemd160") -); +export const ripemd160 = wrapHash(_ripemd160); diff --git a/src/scrypt.ts b/src/scrypt.ts index af86de0..a21beda 100644 --- a/src/scrypt.ts +++ b/src/scrypt.ts @@ -1,24 +1,31 @@ -import "scrypt-js/thirdparty/setImmediate"; -const scryptJs = require("scrypt-js"); +import { + scrypt as _scrypt, + scryptAsync as _scryptAsync +} from "noble-hashes/lib/scrypt"; +import { assertBytes } from "./utils"; export async function scrypt( - password: Buffer, - salt: Buffer, + password: Uint8Array, + salt: Uint8Array, n: number, p: number, r: number, dklen: number -): Promise { - return Buffer.from(await scryptJs.scrypt(password, salt, n, r, p, dklen)); +): Promise { + assertBytes(password); + assertBytes(salt); + return _scryptAsync(password, salt, { N: n, r, p, dkLen: dklen }); } export function scryptSync( - password: Buffer, - salt: Buffer, + password: Uint8Array, + salt: Uint8Array, n: number, p: number, r: number, dklen: number -): Buffer { - return Buffer.from(scryptJs.syncScrypt(password, salt, n, r, p, dklen)); +): Uint8Array { + assertBytes(password); + assertBytes(salt); + return _scrypt(password, salt, { N: n, r, p, dkLen: dklen }); } diff --git a/src/secp256k1.ts b/src/secp256k1.ts index a7797e2..738d995 100644 --- a/src/secp256k1.ts +++ b/src/secp256k1.ts @@ -1,24 +1,372 @@ -import { privateKeyVerify } from "secp256k1"; -import { getRandomBytes, getRandomBytesSync } from "./random"; +import { hmac } from "noble-hashes/lib/hmac"; +import { sha256 } from "noble-hashes/lib/sha256"; +import * as secp from "noble-secp256k1"; +import { + assertBool, + assertBytes, + concatBytes, + hexToBytes, + toHex +} from "./utils"; -const SECP256K1_PRIVATE_KEY_SIZE = 32; +// Enable sync API for noble-secp256k1 +secp.utils.hmacSha256 = ((key: Uint8Array, ...messages: Uint8Array[]) => { + const h = hmac.init(sha256, key); + for (const msg of messages) { + h.update(msg); + } + return h.digest(); +}) as any; -export async function createPrivateKey(): Promise { - while (true) { - const pk = await getRandomBytes(SECP256K1_PRIVATE_KEY_SIZE); - if (privateKeyVerify(pk)) { - return pk; - } +// Copy-paste from secp256k1, maybe export it? +const bytesToNumber = (bytes: Uint8Array) => hexToNumber(toHex(bytes)); +const numberToHex = (num: number | bigint) => + num.toString(16).padStart(64, "0"); +const numberToBytes = (num: number | bigint) => hexToBytes(numberToHex(num)); + +function hexToNumber(hex: string): bigint { + if (typeof hex !== "string") { + throw new TypeError("hexToNumber: expected string, got " + typeof hex); } + return BigInt(`0x${hex}`); +} + +// Calculates a modulo b +function mod(a: bigint, b: bigint = secp.CURVE.P): bigint { + const result = a % b; + return result >= 0 ? result : b + result; +} + +type Output = Uint8Array | ((len: number) => Uint8Array); +interface Signature { + signature: Uint8Array; + recid: number; +} + +function output( + out: Output = (len: number) => new Uint8Array(len), + length: number, + value?: Uint8Array +) { + if (typeof out === "function") { + out = out(length); + } + assertBytes(out, length); + if (value) { + out.set(value); + } + return out; +} + +function getSignature(signature: Uint8Array) { + assertBytes(signature, 64); + const r = bytesToNumber(signature.slice(0, 32)); + const s = bytesToNumber(signature.slice(32, 64)); + if (r >= secp.CURVE.n || s >= secp.CURVE.n) { + throw new Error("Cannot parse signature"); + } + return new secp.Signature(r, s); } export function createPrivateKeySync(): Uint8Array { - while (true) { - const pk = getRandomBytesSync(SECP256K1_PRIVATE_KEY_SIZE); - if (privateKeyVerify(pk)) { - return pk; - } + return secp.utils.randomPrivateKey(); +} + +export async function createPrivateKey(): Promise { + return createPrivateKeySync(); +} + +export function privateKeyVerify(privateKey: Uint8Array): boolean { + assertBytes(privateKey, 32); + return secp.utils.isValidPrivateKey(privateKey); +} + +export function publicKeyCreate( + privateKey: Uint8Array, + compressed = true, + out?: Output +): Uint8Array { + assertBytes(privateKey, 32); + assertBool(compressed); + const res = secp.getPublicKey(privateKey, compressed); + return output(out, compressed ? 33 : 65, res); +} + +export function publicKeyVerify(publicKey: Uint8Array): boolean { + assertBytes(publicKey, 33, 65); + try { + secp.Point.fromHex(publicKey); + return true; + } catch (e) { + return false; + } +} + +export function publicKeyConvert( + publicKey: Uint8Array, + compressed = true, + out?: Output +): Uint8Array { + assertBytes(publicKey, 33, 65); + assertBool(compressed); + const res = secp.Point.fromHex(publicKey).toRawBytes(compressed); + return output(out, compressed ? 33 : 65, res); +} + +export function ecdsaSign( + msgHash: Uint8Array, + privateKey: Uint8Array, + options = { noncefn: undefined, data: undefined }, + out?: Output +): Signature { + assertBytes(msgHash, 32); + assertBytes(privateKey, 32); + if (typeof options !== "object" || options === null) { + throw new TypeError("secp256k1.ecdsaSign: options should be object"); } + // noble-secp256k1 uses hmac instead of hmac-drbg here + if ( + options && + (options.noncefn !== undefined || options.data !== undefined) + ) { + throw new Error("Secp256k1: noncefn && data is unsupported"); + } + const [signature, recid] = secp._syncSign(msgHash, privateKey, { + recovered: true, + canonical: true + }); + const { r, s } = secp.Signature.fromHex(signature); + const res = concatBytes(numberToBytes(r), numberToBytes(s)); + return { + signature: output(out, 64, res), + recid + }; +} + +export function ecdsaRecover( + signature: Uint8Array, + recid: number, + msgHash: Uint8Array, + compressed = true, + out?: Output +) { + assertBytes(msgHash, 32); + assertBool(compressed); + const sign = getSignature(signature).toHex(); + const point = secp.Point.fromSignature(msgHash, sign, recid); + return output(out, compressed ? 33 : 65, point.toRawBytes(compressed)); +} + +export function ecdsaVerify( + signature: Uint8Array, + msgHash: Uint8Array, + publicKey: Uint8Array +) { + assertBytes(msgHash, 32); + assertBytes(publicKey, 33, 65); + const sign = getSignature(signature); + return secp.verify(sign, msgHash, publicKey); } -export * from "secp256k1"; +export function privateKeyTweakAdd( + privateKey: Uint8Array, + tweak: Uint8Array +): Uint8Array { + assertBytes(privateKey, 32); + assertBytes(tweak, 32); + let bn = bytesToNumber(tweak); + if (bn >= secp.CURVE.n) { + throw new Error("Tweak bigger than curve order"); + } + bn += bytesToNumber(privateKey); + if (bn >= secp.CURVE.n) { + bn -= secp.CURVE.n; + } + if (bn === 0n) { + throw new Error( + "The tweak was out of range or the resulted private key is invalid" + ); + } + privateKey.set(hexToBytes(numberToHex(bn))); + return privateKey; +} + +export function privateKeyNegate(privateKey: Uint8Array): Uint8Array { + assertBytes(privateKey, 32); + const bn = mod(-bytesToNumber(privateKey), secp.CURVE.n); + privateKey.set(hexToBytes(numberToHex(bn))); + return privateKey; +} + +export function publicKeyNegate( + publicKey: Uint8Array, + compressed = true, + out?: Output +) { + assertBytes(publicKey, 33, 65); + assertBool(compressed); + const point = secp.Point.fromHex(publicKey).negate(); + return output(out, compressed ? 33 : 65, point.toRawBytes(compressed)); +} + +export function publicKeyCombine( + publicKeys: Uint8Array[], + compressed = true, + out?: Output +) { + if (!Array.isArray(publicKeys) || !publicKeys.length) { + throw new TypeError( + `Expected array with one or more items, not ${publicKeys}` + ); + } + for (const publicKey of publicKeys) { + assertBytes(publicKey, 33, 65); + } + assertBool(compressed); + let point = secp.Point.fromHex(publicKeys[0]); + for (let i = 1; i < publicKeys.length; i++) { + point = point.add(secp.Point.fromHex(publicKeys[i])); + } + point.assertValidity(); + return output(out, compressed ? 33 : 65, point.toRawBytes(compressed)); +} + +export function publicKeyTweakAdd( + publicKey: Uint8Array, + tweak: Uint8Array, + compressed = true, + out?: Output +) { + assertBytes(publicKey, 33, 65); + assertBytes(tweak, 32); + assertBool(compressed); + const p1 = secp.Point.fromHex(publicKey); + const p2 = secp.Point.fromPrivateKey(tweak); + const point = p1.add(p2); + point.assertValidity(); + return output(out, compressed ? 33 : 65, point.toRawBytes(compressed)); +} + +export function publicKeyTweakMul( + publicKey: Uint8Array, + tweak: Uint8Array, + compressed = true, + out?: Output +) { + assertBytes(publicKey, 33, 65); + assertBytes(tweak, 32); + assertBool(compressed); + const bn = bytesToNumber(tweak); + if (bn <= 0 || bn >= secp.CURVE.n) { + throw new Error("Tweak is zero or bigger than curve order"); + } + const point = secp.Point.fromHex(publicKey).multiply(bn); + point.assertValidity(); + return output(out, compressed ? 33 : 65, point.toRawBytes(compressed)); +} + +export function privateKeyTweakMul( + privateKey: Uint8Array, + tweak: Uint8Array +): Uint8Array { + assertBytes(privateKey, 32); + assertBytes(tweak, 32); + let bn = bytesToNumber(tweak); + if (bn >= secp.CURVE.n) { + throw new Error("Tweak bigger than curve order"); + } + bn = mod(bn * bytesToNumber(privateKey), secp.CURVE.n); + if (bn >= secp.CURVE.n) { + bn -= secp.CURVE.n; + } + if (bn === 0n) { + throw new Error( + "The tweak was out of range or the resulted private key is invalid" + ); + } + privateKey.set(hexToBytes(numberToHex(bn))); + return privateKey; +} +// internal -> DER +export function signatureExport( + signature: Uint8Array, + out?: Output +): Uint8Array { + const res = getSignature(signature).toRawBytes(); + return output(out, 72, getSignature(signature).toRawBytes()).slice( + 0, + res.length + ); +} +// DER -> internal +export function signatureImport( + signature: Uint8Array, + out?: Output +): Uint8Array { + assertBytes(signature); + const sig = secp.Signature.fromHex(signature); + return output( + out, + 64, + concatBytes(...[sig.r, sig.s].map(i => numberToBytes(i))) + ); +} + +export function signatureNormalize(signature: Uint8Array): Uint8Array { + const res = getSignature(signature); + if (res.s > secp.CURVE.n / 2n) { + signature.set(numberToBytes(secp.CURVE.n - res.s), 32); + } + return signature; +} + +export function ecdh( + publicKey: Uint8Array, + privateKey: Uint8Array, + options: { + xbuf?: Uint8Array; + ybuf?: Uint8Array; + data?: Uint8Array; + hashfn?: (x: Uint8Array, y: Uint8Array, data: Uint8Array) => Uint8Array; + } = {}, + out?: Output +) { + assertBytes(publicKey, 33, 65); + assertBytes(privateKey, 32); + if (typeof options !== "object" || options === null) { + throw new TypeError("secp256k1.ecdh: options should be object"); + } + if (options.data !== undefined) { + assertBytes(options.data); + } + const point = secp.Point.fromHex(secp.getSharedSecret(privateKey, publicKey)); + if (options.hashfn === undefined) { + return output(out, 32, sha256(point.toRawBytes(true))); + } + if (typeof options.hashfn !== "function") { + throw new TypeError("secp256k1.ecdh: options.hashfn should be function"); + } + if (options.xbuf !== undefined) { + assertBytes(options.xbuf, 32); + } + if (options.ybuf !== undefined) { + assertBytes(options.ybuf, 32); + } + assertBytes(out as Uint8Array, 32); + const xbuf = options.xbuf || new Uint8Array(32); + xbuf.set(numberToBytes(point.x)); + const ybuf = options.ybuf || new Uint8Array(32); + ybuf.set(numberToBytes(point.y)); + const hash = options.hashfn(xbuf, ybuf, options.data!); + if (!(hash instanceof Uint8Array) || hash.length !== 32) { + throw new Error("secp256k1.ecdh: invalid options.hashfn output"); + } + return output(out, 32, hash); +} + +export function contextRandomize(seed: Uint8Array) { + if (seed !== null) { + assertBytes(seed, 32); + } + // There is no context to randomize +} diff --git a/src/sha256.ts b/src/sha256.ts index 34a5fb0..f2ad9f6 100644 --- a/src/sha256.ts +++ b/src/sha256.ts @@ -1,5 +1,4 @@ -import crypto from "crypto"; +import { sha256 as _sha256 } from "noble-hashes/lib/sha256"; +import { wrapHash } from "./utils"; -import { createHashFunction } from "./hash-utils"; - -export const sha256 = createHashFunction(() => crypto.createHash("sha256")); +export const sha256 = wrapHash(_sha256); diff --git a/src/shims/hdkey-crypto.ts b/src/shims/hdkey-crypto.ts deleted file mode 100644 index 5b6c25d..0000000 --- a/src/shims/hdkey-crypto.ts +++ /dev/null @@ -1 +0,0 @@ -export { createHash, createHmac, randomBytes } from "crypto"; diff --git a/src/shims/hdkey-secp256k1v3.ts b/src/shims/hdkey-secp256k1v3.ts deleted file mode 100644 index 75cf52d..0000000 --- a/src/shims/hdkey-secp256k1v3.ts +++ /dev/null @@ -1,49 +0,0 @@ -import * as secp256k1 from "secp256k1"; - -export function privateKeyVerify(privateKey: Buffer): boolean { - return secp256k1.privateKeyVerify(privateKey); -} - -export function publicKeyCreate(privateKey: Buffer, compressed = true): Buffer { - return Buffer.from(secp256k1.publicKeyCreate(privateKey, compressed)); -} - -export function publicKeyVerify(publicKey: Buffer): boolean { - return secp256k1.publicKeyVerify(publicKey); -} - -export function publicKeyConvert(publicKey: Buffer, compressed = true): Buffer { - return Buffer.from(secp256k1.publicKeyConvert(publicKey, compressed)); -} - -export function privateKeyTweakAdd(publicKey: Buffer, tweak: Buffer): Buffer { - return Buffer.from( - secp256k1.privateKeyTweakAdd(Buffer.from(publicKey), tweak) - ); -} - -export function publicKeyTweakAdd( - publicKey: Buffer, - tweak: Buffer, - compressed = true -): Buffer { - return Buffer.from( - secp256k1.publicKeyTweakAdd(Buffer.from(publicKey), tweak, compressed) - ); -} - -export function sign( - message: Buffer, - privateKey: Buffer -): { signature: Buffer; recovery: number } { - const ret = secp256k1.ecdsaSign(message, privateKey); - return { signature: Buffer.from(ret.signature), recovery: ret.recid }; -} - -export function verify( - message: Buffer, - signature: Buffer, - publicKey: Buffer -): boolean { - return secp256k1.ecdsaVerify(signature, message, publicKey); -} diff --git a/src/utils.ts b/src/utils.ts new file mode 100644 index 0000000..27cf5a7 --- /dev/null +++ b/src/utils.ts @@ -0,0 +1,95 @@ +// buf.toString('hex') -> toHex(buf) +export { toHex, createView } from "noble-hashes/lib/utils"; +// Buffer.from(hex, 'hex') -> hexToBytes(hex) +export function hexToBytes(hex: string): Uint8Array { + if (typeof hex !== "string") { + throw new TypeError(`hexToBytes: expected string, got ${typeof hex}`); + } + if (hex.length % 2) { + throw new Error("hexToBytes: received invalid unpadded hex"); + } + const array = new Uint8Array(hex.length / 2); + for (let i = 0; i < array.length; i++) { + const j = i * 2; + array[i] = Number.parseInt(hex.slice(j, j + 2), 16); + } + return array; +} +// Buffer.from(s, 'utf8') -> utf8ToBytes(s) +export function utf8ToBytes(s: string) { + if (typeof s !== "string") { + throw new TypeError(`utf8ToBytes expected string, got ${typeof s}`); + } + return new TextEncoder().encode(s); +} +// buf.toString('utf8') -> bytesToUtf8(buf) +export function bytesToUtf8(data: Uint8Array): string { + if (!(data instanceof Uint8Array)) { + throw new TypeError(`bytesToUtf8 expected Uint8Array, got ${typeof data}`); + } + return new TextDecoder().decode(data); +} +// buf.equals(buf2) -> equalsBytes(buf, buf2) +export function equalsBytes(a: Uint8Array, b: Uint8Array): boolean { + if (a.length !== b.length) { + return false; + } + for (let i = 0; i < a.length; i++) { + if (a[i] !== b[i]) { + return false; + } + } + return true; +} +// Buffer.concat([buf1, buf2]) -> concatBytes(buf1, buf2) +export function concatBytes(...arrays: Uint8Array[]): Uint8Array { + if (arrays.length === 1) { + return arrays[0]; + } + const length = arrays.reduce((a, arr) => a + arr.length, 0); + const result = new Uint8Array(length); + for (let i = 0, pad = 0; i < arrays.length; i++) { + const arr = arrays[i]; + result.set(arr, pad); + pad += arr.length; + } + return result; +} +// Internal utils +export function assertBytes(bytes: Uint8Array, ...len: number[]) { + if ( + bytes instanceof Uint8Array && + (!len.length || len.includes(bytes.length)) + ) { + return; + } + throw new TypeError( + `Expected ${len} bytes, not ${typeof bytes} with length=${bytes.length}` + ); +} + +export function assertBool(b: boolean) { + if (typeof b !== "boolean") { + throw new Error(`Expected boolean, not ${b}`); + } +} + +export function wrapHash(hash: (msg: Uint8Array) => Uint8Array) { + return (msg: Uint8Array) => { + assertBytes(msg); + return hash(msg); + }; +} + +export const crypto: { node?: any; web?: Crypto } = (() => { + const webCrypto = + typeof self === "object" && "crypto" in self ? self.crypto : undefined; + const nodeRequire = + typeof module !== "undefined" && + typeof module.require === "function" && + module.require.bind(module); + return { + node: nodeRequire && !webCrypto ? nodeRequire("crypto") : undefined, + web: webCrypto + }; +})(); diff --git a/src/vendor/.gitignore b/src/vendor/.gitignore deleted file mode 100644 index e69de29..0000000 diff --git a/test/karma.browserify.conf.js b/test/karma.browserify.conf.js index 129ac1e..6d543ab 100644 --- a/test/karma.browserify.conf.js +++ b/test/karma.browserify.conf.js @@ -1,6 +1,6 @@ module.exports = function(config) { config.set({ - frameworks: ["mocha", "chai"], + frameworks: ["mocha"], files: ["../test-builds/browserify-build.js"], colors: true, logLevel: config.LOG_INFO, diff --git a/test/karma.parcel.conf.js b/test/karma.parcel.conf.js index bce12a7..3748fce 100644 --- a/test/karma.parcel.conf.js +++ b/test/karma.parcel.conf.js @@ -1,7 +1,7 @@ module.exports = function(config) { config.set({ - frameworks: ["mocha", "chai"], - files: ["../test-builds/parcel/test/pure/*.js"], + frameworks: ["mocha"], + files: ["../test-builds/parcel/*.js"], colors: true, logLevel: config.LOG_INFO, browsers: ["ChromeHeadless"], diff --git a/test/karma.rollup.conf.js b/test/karma.rollup.conf.js index 72c1a01..1e63456 100644 --- a/test/karma.rollup.conf.js +++ b/test/karma.rollup.conf.js @@ -1,6 +1,6 @@ module.exports = function(config) { config.set({ - frameworks: ["mocha", "chai"], + frameworks: ["mocha"], files: ["../test-builds/rollup/*.js"], colors: true, logLevel: config.LOG_INFO, diff --git a/test/karma.webpack.conf.js b/test/karma.webpack.conf.js index c255114..999af31 100644 --- a/test/karma.webpack.conf.js +++ b/test/karma.webpack.conf.js @@ -1,6 +1,6 @@ module.exports = function(config) { config.set({ - frameworks: ["mocha", "chai"], + frameworks: ["mocha"], files: ["../test-builds/webpack-build.js"], colors: true, logLevel: config.LOG_INFO, diff --git a/test/mocha.opts b/test/mocha.opts index 2403597..ae70e30 100644 --- a/test/mocha.opts +++ b/test/mocha.opts @@ -1,2 +1,2 @@ --require ts-node/register -test/node/*.ts +test/test-vectors/*.ts diff --git a/test/node/aes.ts b/test/node/aes.ts deleted file mode 100644 index a1baf8f..0000000 --- a/test/node/aes.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { decrypt, encrypt } from "../../src/aes"; -import { createTests } from "../test-vectors/aes"; - -createTests(encrypt, decrypt); diff --git a/test/node/bip39.ts b/test/node/bip39.ts deleted file mode 100644 index ea4c273..0000000 --- a/test/node/bip39.ts +++ /dev/null @@ -1,15 +0,0 @@ -import * as bip39 from "../../src/bip39"; -import { wordlist as englishWordlist } from "../../src/bip39/wordlists/english"; -import { wordlist as spanishWordlist } from "../../src/bip39/wordlists/spanish"; -import { createTests } from "../test-vectors/bip39"; - -createTests( - bip39.generateMnemonic, - bip39.mnemonicToEntropy, - bip39.entropyToMnemonic, - bip39.validateMnemonic, - bip39.mnemonicToSeed, - bip39.mnemonicToSeedSync, - englishWordlist, - spanishWordlist -); diff --git a/test/node/blake2b.ts b/test/node/blake2b.ts deleted file mode 100644 index 64b4483..0000000 --- a/test/node/blake2b.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { blake2b } from "../../src/blake2b"; -import { createTests } from "../test-vectors/blake2b"; - -createTests(blake2b); diff --git a/test/node/hdkey.ts b/test/node/hdkey.ts deleted file mode 100644 index 3999264..0000000 --- a/test/node/hdkey.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { HDKey } from "../../src/hdkey"; -import { createTests } from "../test-vectors/hdkey"; - -createTests(HDKey); diff --git a/test/node/keccak.ts b/test/node/keccak.ts deleted file mode 100644 index 53c1686..0000000 --- a/test/node/keccak.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { keccak224, keccak256, keccak384, keccak512 } from "../../src/keccak"; - -import { - createTestsForVector, - keccak224Vectors, - keccak256Vectors, - keccak384Vectors, - keccak512Vectors -} from "../test-vectors/keccak"; - -describe("keccak", function() { - createTestsForVector(keccak224, keccak224Vectors); - createTestsForVector(keccak256, keccak256Vectors); - createTestsForVector(keccak384, keccak384Vectors); - createTestsForVector(keccak512, keccak512Vectors); -}); diff --git a/test/node/pbkdf2.ts b/test/node/pbkdf2.ts deleted file mode 100644 index b948a7a..0000000 --- a/test/node/pbkdf2.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { pbkdf2, pbkdf2Sync } from "../../src/pbkdf2"; -import { createTests } from "../test-vectors/pbkdf2"; - -createTests(pbkdf2Sync, pbkdf2); diff --git a/test/node/random.ts b/test/node/random.ts deleted file mode 100644 index 52c690c..0000000 --- a/test/node/random.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { getRandomBytes, getRandomBytesSync } from "../../src/random"; -import { createTests } from "../test-vectors/random"; - -createTests(getRandomBytesSync, getRandomBytes); diff --git a/test/node/ripemd160.ts b/test/node/ripemd160.ts deleted file mode 100644 index 6d93ac9..0000000 --- a/test/node/ripemd160.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { ripemd160 } from "../../src/ripemd160"; -import { createTests } from "../test-vectors/ripemd160"; - -createTests(ripemd160); diff --git a/test/node/scrypt.ts b/test/node/scrypt.ts deleted file mode 100644 index 4045ab4..0000000 --- a/test/node/scrypt.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { scrypt, scryptSync } from "../../src/scrypt"; -import { createTests } from "../test-vectors/scrypt"; - -createTests(scryptSync, scrypt); diff --git a/test/node/secp256k1.ts b/test/node/secp256k1.ts deleted file mode 100644 index b8a32cb..0000000 --- a/test/node/secp256k1.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { - createPrivateKey, - createPrivateKeySync, - ecdsaRecover, - ecdsaSign, - privateKeyVerify, - publicKeyConvert -} from "../../src/secp256k1"; -import { createTests } from "../test-vectors/secp256k1"; - -createTests( - ecdsaSign, - ecdsaRecover, - publicKeyConvert, - createPrivateKey, - createPrivateKeySync, - privateKeyVerify -); diff --git a/test/node/sha256.ts b/test/node/sha256.ts deleted file mode 100644 index 6b2fb47..0000000 --- a/test/node/sha256.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { sha256 } from "../../src/sha256"; -import { createTests } from "../test-vectors/sha256"; - -createTests(sha256); diff --git a/test/pure/aes.ts b/test/pure/aes.ts deleted file mode 100644 index a1baf8f..0000000 --- a/test/pure/aes.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { decrypt, encrypt } from "../../src/aes"; -import { createTests } from "../test-vectors/aes"; - -createTests(encrypt, decrypt); diff --git a/test/pure/bip39.ts b/test/pure/bip39.ts deleted file mode 100644 index ea4c273..0000000 --- a/test/pure/bip39.ts +++ /dev/null @@ -1,15 +0,0 @@ -import * as bip39 from "../../src/bip39"; -import { wordlist as englishWordlist } from "../../src/bip39/wordlists/english"; -import { wordlist as spanishWordlist } from "../../src/bip39/wordlists/spanish"; -import { createTests } from "../test-vectors/bip39"; - -createTests( - bip39.generateMnemonic, - bip39.mnemonicToEntropy, - bip39.entropyToMnemonic, - bip39.validateMnemonic, - bip39.mnemonicToSeed, - bip39.mnemonicToSeedSync, - englishWordlist, - spanishWordlist -); diff --git a/test/pure/blake2b.ts b/test/pure/blake2b.ts deleted file mode 100644 index 64b4483..0000000 --- a/test/pure/blake2b.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { blake2b } from "../../src/blake2b"; -import { createTests } from "../test-vectors/blake2b"; - -createTests(blake2b); diff --git a/test/pure/hdkey.ts b/test/pure/hdkey.ts deleted file mode 100644 index 2af9a3a..0000000 --- a/test/pure/hdkey.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { HDKey } from "../../src/pure/hdkey"; -import { createTests } from "../test-vectors/hdkey"; - -createTests(HDKey); diff --git a/test/pure/keccak.ts b/test/pure/keccak.ts deleted file mode 100644 index 53c1686..0000000 --- a/test/pure/keccak.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { keccak224, keccak256, keccak384, keccak512 } from "../../src/keccak"; - -import { - createTestsForVector, - keccak224Vectors, - keccak256Vectors, - keccak384Vectors, - keccak512Vectors -} from "../test-vectors/keccak"; - -describe("keccak", function() { - createTestsForVector(keccak224, keccak224Vectors); - createTestsForVector(keccak256, keccak256Vectors); - createTestsForVector(keccak384, keccak384Vectors); - createTestsForVector(keccak512, keccak512Vectors); -}); diff --git a/test/pure/pbkdf2.ts b/test/pure/pbkdf2.ts deleted file mode 100644 index b948a7a..0000000 --- a/test/pure/pbkdf2.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { pbkdf2, pbkdf2Sync } from "../../src/pbkdf2"; -import { createTests } from "../test-vectors/pbkdf2"; - -createTests(pbkdf2Sync, pbkdf2); diff --git a/test/pure/random.ts b/test/pure/random.ts deleted file mode 100644 index 52c690c..0000000 --- a/test/pure/random.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { getRandomBytes, getRandomBytesSync } from "../../src/random"; -import { createTests } from "../test-vectors/random"; - -createTests(getRandomBytesSync, getRandomBytes); diff --git a/test/pure/ripemd160.ts b/test/pure/ripemd160.ts deleted file mode 100644 index 412e159..0000000 --- a/test/pure/ripemd160.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { ripemd160 } from "../../src/pure/ripemd160"; -import { createTests } from "../test-vectors/ripemd160"; - -createTests(ripemd160); diff --git a/test/pure/scrypt.ts b/test/pure/scrypt.ts deleted file mode 100644 index 4045ab4..0000000 --- a/test/pure/scrypt.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { scrypt, scryptSync } from "../../src/scrypt"; -import { createTests } from "../test-vectors/scrypt"; - -createTests(scryptSync, scrypt); diff --git a/test/pure/secp256k1.ts b/test/pure/secp256k1.ts deleted file mode 100644 index b8a32cb..0000000 --- a/test/pure/secp256k1.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { - createPrivateKey, - createPrivateKeySync, - ecdsaRecover, - ecdsaSign, - privateKeyVerify, - publicKeyConvert -} from "../../src/secp256k1"; -import { createTests } from "../test-vectors/secp256k1"; - -createTests( - ecdsaSign, - ecdsaRecover, - publicKeyConvert, - createPrivateKey, - createPrivateKeySync, - privateKeyVerify -); diff --git a/test/pure/sha256.ts b/test/pure/sha256.ts deleted file mode 100644 index 79b475c..0000000 --- a/test/pure/sha256.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { sha256 } from "../../src/pure/sha256"; -import { createTests } from "../test-vectors/sha256"; - -createTests(sha256); diff --git a/test/rollup.config.js b/test/rollup.config.js index cdd34c4..882c4dc 100644 --- a/test/rollup.config.js +++ b/test/rollup.config.js @@ -1,12 +1,9 @@ import fs from "fs"; import path from "path"; -import commonjs from "rollup-plugin-commonjs"; -import resolve from "rollup-plugin-node-resolve"; -import nodeBuiltin from "rollup-plugin-node-builtins"; -import nodeGlobals from "rollup-plugin-node-globals"; -import json from "rollup-plugin-json"; +import commonjs from "@rollup/plugin-commonjs"; +import resolve from "@rollup/plugin-node-resolve"; -const TESTS_DIR = "./test-builds/tsc/test/pure"; +const TESTS_DIR = "./test-builds/tsc/test/test-vectors"; const testFiles = fs .readdirSync(TESTS_DIR) .filter(name => name.endsWith(".js")) @@ -23,9 +20,6 @@ export default testFiles.map(test => ({ }, plugins: [ commonjs(), - json(), - nodeGlobals(), - nodeBuiltin(), resolve({ browser: true, preferBuiltins: false diff --git a/test/test-vectors/aes.ts b/test/test-vectors/aes.ts index 004e586..b86f310 100644 --- a/test/test-vectors/aes.ts +++ b/test/test-vectors/aes.ts @@ -1,5 +1,6 @@ -import { assert } from "chai"; - +import { decrypt, encrypt } from "../../src/aes"; +import { hexToBytes, toHex } from "../../src/utils"; +import { deepStrictEqual, rejects } from "./assert"; // Test vectors taken from https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-38a.pdf const TEST_VECTORS = [ { @@ -100,71 +101,54 @@ const TEST_VECTORS = [ } ]; -export function createTests( - encrypt: ( - msg: Buffer, - key: Buffer, - iv: Buffer, - mode?: string, - pkcs7PaddingEnabled?: boolean - ) => Buffer, - decrypt: ( - cypherText: Buffer, - key: Buffer, - iv: Buffer, - mode?: string, - pkcs7PaddingEnabled?: boolean - ) => Buffer -) { - describe("aes", function() { - for (const [i, vector] of TEST_VECTORS.entries()) { - it(`Should encrypt the test ${i} correctly`, async function() { - const encrypted = encrypt( - Buffer.from(vector.msg, "hex"), - Buffer.from(vector.key, "hex"), - Buffer.from(vector.iv, "hex"), - vector.mode, - vector.pkcs7PaddingEnabled - ); - - assert.equal(encrypted.toString("hex"), vector.cypherText); - }); - - it(`Should decrypt the test ${i} correctly`, async function() { - const decrypted = decrypt( - Buffer.from(vector.cypherText, "hex"), - Buffer.from(vector.key, "hex"), - Buffer.from(vector.iv, "hex"), - vector.mode, - vector.pkcs7PaddingEnabled - ); - - assert.equal(decrypted.toString("hex"), vector.msg); - }); - } - - it("Should throw when not padding automatically and the message isn't the right size", function() { - assert.throws(() => - encrypt( - Buffer.from("abcd", "hex"), - Buffer.from("2b7e151628aed2a6abf7158809cf4f3c", "hex"), - Buffer.from("2b7e151628aed2a6abf7158809cf4f3c", "hex"), - "aes-128-cbc", - false - ) +describe("aes", () => { + for (const [i, vector] of TEST_VECTORS.entries()) { + it(`Should encrypt the test ${i} correctly`, async () => { + const encrypted = await encrypt( + hexToBytes(vector.msg), + hexToBytes(vector.key), + hexToBytes(vector.iv), + vector.mode, + vector.pkcs7PaddingEnabled ); + + deepStrictEqual(toHex(encrypted), vector.cypherText); }); - it("Should throw when trying to use non-aes modes", function() { - assert.throws(() => - encrypt( - Buffer.from("abcd", "hex"), - Buffer.from("2b7e151628aed2a6abf7158809cf4f3c", "hex"), - Buffer.from("2b7e151628aed2a6abf7158809cf4f3c", "hex"), - "asd-128-cbc", - false - ) + it(`Should decrypt the test ${i} correctly`, async () => { + const decrypted = await decrypt( + hexToBytes(vector.cypherText), + hexToBytes(vector.key), + hexToBytes(vector.iv), + vector.mode, + vector.pkcs7PaddingEnabled ); + + deepStrictEqual(toHex(decrypted), vector.msg); }); + } + + it("Should throw when not padding automatically and the message isn't the right size", async () => { + rejects(() => + encrypt( + hexToBytes("abcd"), + hexToBytes("2b7e151628aed2a6abf7158809cf4f3c"), + hexToBytes("2b7e151628aed2a6abf7158809cf4f3c"), + "aes-128-cbc", + false + ) + ); + }); + + it("Should throw when trying to use non-aes modes", async () => { + rejects(() => + encrypt( + hexToBytes("abcd"), + hexToBytes("2b7e151628aed2a6abf7158809cf4f3c"), + hexToBytes("2b7e151628aed2a6abf7158809cf4f3c"), + "asd-128-cbc", + false + ) + ); }); -} +}); diff --git a/test/test-vectors/assert.ts b/test/test-vectors/assert.ts new file mode 100644 index 0000000..0647208 --- /dev/null +++ b/test/test-vectors/assert.ts @@ -0,0 +1,84 @@ +// Minimal assert version to avoid dependecies on node internals +// Allows to verify that none of brwoserify version of node internals is included in resulting build +async function deepStrictEqual( + actual: unknown, + expected: unknown, + message?: string +) { + const [actualType, expectedType] = [typeof actual, typeof expected]; + const err = new Error( + `Non-equal values: actual=${actual} (type=${actualType}) expected=${expected} (type=${expectedType})${ + message ? `. Message: ${message}` : "" + }` + ); + if (actualType !== expectedType) { + throw err; + } + // Primitive types + if ( + ["string", "number", "bigint", "undefined", "boolean"].includes(actualType) + ) { + if (actual !== expected) { + throw err; + } + return; + } + if (actual instanceof Uint8Array && expected instanceof Uint8Array) { + if (actual.length !== expected.length) { + throw err; + } + for (let i = 0; i < actual.length; i++) { + if (actual[i] !== expected[i]) { + throw err; + } + } + return; + } + if (Array.isArray(actual) && Array.isArray(expected)) { + if (actual.length !== expected.length) { + throw err; + } + for (let i = 0; i < actual.length; i++) { + deepStrictEqual(actual[i], expected[i], message); + } + return; + } + if (actual === null && expected === null) { + return; + } + if (actualType === "object") { + const [actualKeys, expectedKeys] = [ + Object.keys(actual as object), + Object.keys(expected as object) + ]; + deepStrictEqual(actualKeys, expectedKeys, message); + for (const key of actualKeys) { + deepStrictEqual((actual as any)[key], (expected as any)[key], message); + } + return; + } + throw err; +} + +async function throws(cb: () => any) { + try { + cb(); + } catch (e) { + return; + } + throw new Error("Missing expected exception."); +} + +async function rejects(cb: () => Promise): Promise { + try { + await cb(); + } catch (e) { + return; + } + throw new Error("Missing expected rejection."); +} + +// Run tests with node assert: +// import { deepStrictEqual, throws } from "assert"; + +export { deepStrictEqual, throws, rejects }; diff --git a/test/test-vectors/bip39.ts b/test/test-vectors/bip39.ts index 676964a..04bb56b 100644 --- a/test/test-vectors/bip39.ts +++ b/test/test-vectors/bip39.ts @@ -1,119 +1,483 @@ -import { assert } from "chai"; +import { + entropyToMnemonic, + generateMnemonic, + mnemonicToEntropy, + mnemonicToSeed, + mnemonicToSeedSync, + validateMnemonic +} from "../../src/bip39"; +import { wordlist as englishWordlist } from "../../src/bip39/wordlists/english"; +import { wordlist as japaneseWordlist } from "../../src/bip39/wordlists/japanese"; +import { wordlist as spanishWordlist } from "../../src/bip39/wordlists/spanish"; +import { equalsBytes, hexToBytes, toHex } from "../../src/utils"; +import { deepStrictEqual, throws } from "./assert"; -export function createTests( - generateMnemonic: (wordlist: string[], strength?: number) => string, - mnemonicToEntropy: (mnemonic: string, wordlist: string[]) => Buffer, - entropyToMnemonic: (entropy: Buffer, wordlist: string[]) => string, - validateMnemonic: (mnemonic: string, wordlist: string[]) => boolean, - mnemonicToSeed: (mnemonic: string, passphrase?: string) => Promise, - mnemonicToSeedSync: (mnemonic: string, passphrase?: string) => Buffer, - englishWordlist: string[], - spanishWordlist: string[] -) { - describe("BIP39", function() { - describe("Mnemonic generation", function() { - it("should create a valid menomic", function() { - const mnemonic = generateMnemonic(englishWordlist, 128); - assert.isTrue(validateMnemonic(mnemonic, englishWordlist)); - }); +describe("BIP39", () => { + describe("Mnemonic generation", () => { + it("should create a valid menomic", () => { + const mnemonic = generateMnemonic(englishWordlist, 128); + deepStrictEqual(validateMnemonic(mnemonic, englishWordlist), true); }); + }); - describe("Mnemonic validation", function() { - it("should accept valid menomics", function() { - assert.isTrue( - validateMnemonic( - "jump police vessel depth mutual idea cable soap trophy dust hold wink", - englishWordlist - ) - ); + describe("Mnemonic validation", () => { + it("should accept valid menomics", () => { + deepStrictEqual( + validateMnemonic( + "jump police vessel depth mutual idea cable soap trophy dust hold wink", + englishWordlist + ), + true + ); - assert.isTrue( - validateMnemonic( - "koala óxido urbe crudo momia idioma boina rostro títere dilema himno víspera", - spanishWordlist - ) - ); - }); - - it("should reject invalid menomics", function() { - assert.isFalse(validateMnemonic("asd", englishWordlist)); - assert.isFalse( - validateMnemonic( - generateMnemonic(englishWordlist, 128), - spanishWordlist - ) - ); - }); + deepStrictEqual( + validateMnemonic( + "koala óxido urbe crudo momia idioma boina rostro títere dilema himno víspera", + spanishWordlist + ), + true + ); }); - describe("Entropy-mnemonic convertions", function() { - describe("Should convert from mnemonic to entropy and back", function() { - it("should work with the English wodlist", function() { - const mnemonic = generateMnemonic(englishWordlist, 128); - const entropy = mnemonicToEntropy(mnemonic, englishWordlist); - - assert.equal(entropyToMnemonic(entropy, englishWordlist), mnemonic); - }); + it("should reject invalid menomics", () => { + deepStrictEqual(validateMnemonic("asd", englishWordlist), false); + deepStrictEqual( + validateMnemonic( + generateMnemonic(englishWordlist, 128), + spanishWordlist + ), + false + ); + }); + }); - it("should work with the Spanish wodlist", function() { - const mnemonic = generateMnemonic(spanishWordlist, 128); - const entropy = mnemonicToEntropy(mnemonic, spanishWordlist); + describe("Entropy-mnemonic convertions", () => { + describe("Should convert from mnemonic to entropy and back", () => { + it("should work with the English wodlist", () => { + const mnemonic = generateMnemonic(englishWordlist, 128); + const entropy = mnemonicToEntropy(mnemonic, englishWordlist); + deepStrictEqual(entropyToMnemonic(entropy, englishWordlist), mnemonic); + }); - assert.equal(entropyToMnemonic(entropy, spanishWordlist), mnemonic); - }); + it("should work with the Spanish wodlist", () => { + const mnemonic = generateMnemonic(spanishWordlist, 128); + const entropy = mnemonicToEntropy(mnemonic, spanishWordlist); + deepStrictEqual(entropyToMnemonic(entropy, spanishWordlist), mnemonic); }); }); + }); - describe("Menonic to seed", function() { - describe("Without passphrase", function() { - const MENMONIC = - "koala óxido urbe crudo momia idioma boina rostro títere dilema himno víspera"; + describe("Menonic to seed", () => { + describe("Without passphrase", () => { + const MENMONIC = + "koala óxido urbe crudo momia idioma boina rostro títere dilema himno víspera"; - const SEED = Buffer.from( - "e9dc495a155c2c5b577847874323853efc11e2379cc25fdcd26f3ad2ecca8b05d2a0e995fb6738dbcf65760e571863e0e8f518b5626b7865ac74f2ab814c050f", - "hex" - ); + const SEED = hexToBytes( + "e9dc495a155c2c5b577847874323853efc11e2379cc25fdcd26f3ad2ecca8b05d2a0e995fb6738dbcf65760e571863e0e8f518b5626b7865ac74f2ab814c050f" + ); - describe("Sync", function() { - it("Should recover the right seed", function() { - const recoveredSeed = mnemonicToSeedSync(MENMONIC); - assert.isTrue(SEED.equals(recoveredSeed)); - }); + describe("Sync", () => { + it("Should recover the right seed", () => { + const recoveredSeed = mnemonicToSeedSync(MENMONIC); + deepStrictEqual(equalsBytes(SEED, recoveredSeed), true); }); + }); - describe("Async", function() { - it("Should recover the right seed", async function() { - const recoveredSeed = await mnemonicToSeed(MENMONIC); - assert.isTrue(SEED.equals(recoveredSeed)); - }); + describe("Async", () => { + it("Should recover the right seed", async () => { + const recoveredSeed = await mnemonicToSeed(MENMONIC); + deepStrictEqual(equalsBytes(SEED, recoveredSeed), true); }); }); + }); - describe("With passphrase", function() { - const MENMONIC = - "koala óxido urbe crudo momia idioma boina rostro títere dilema himno víspera"; + describe("With passphrase", () => { + const MENMONIC = + "koala óxido urbe crudo momia idioma boina rostro títere dilema himno víspera"; - const PASSPHRASE = "passphrase"; + const PASSPHRASE = "passphrase"; - const SEED = Buffer.from( - "c54939df37bf94ab65973c6c1b8e5eaf855dc4ab200698961c398685714c99f9d9e5c8518769619ba606bdaf5254d4ef34c0789089a2e4f21e357a1aae906f9d", - "hex" - ); + const SEED = hexToBytes( + "c54939df37bf94ab65973c6c1b8e5eaf855dc4ab200698961c398685714c99f9d9e5c8518769619ba606bdaf5254d4ef34c0789089a2e4f21e357a1aae906f9d" + ); - describe("Sync", function() { - it("Should recover the right seed", function() { - const recoveredSeed = mnemonicToSeedSync(MENMONIC, PASSPHRASE); - assert.isTrue(SEED.equals(recoveredSeed)); - }); + describe("Sync", () => { + it("Should recover the right seed", () => { + const recoveredSeed = mnemonicToSeedSync(MENMONIC, PASSPHRASE); + deepStrictEqual(SEED, recoveredSeed); }); + }); - describe("Async", function() { - it("Should recover the right seed", async function() { - const recoveredSeed = await mnemonicToSeed(MENMONIC, PASSPHRASE); - assert.isTrue(SEED.equals(recoveredSeed)); - }); + describe("Async", () => { + it("Should recover the right seed", async () => { + const recoveredSeed = await mnemonicToSeed(MENMONIC, PASSPHRASE); + deepStrictEqual(SEED, recoveredSeed); }); }); }); }); -} + // Based on https://github.com/bitcoinjs/bip39/blob/cfea218ee2e6c3157baabb1e2ec684d36cce89c5/test/index.js + const VECTORS: Record> = { + english: [ + [ + "00000000000000000000000000000000", + "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about", + "c55257c360c07c72029aebc1b53c05ed0362ada38ead3e3e9efa3708e53495531f09a6987599d18264c1e1c92f2cf141630c7a3c4ab7c81b2f001698e7463b04" + ], + [ + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f", + "legal winner thank year wave sausage worth useful legal winner thank yellow", + "2e8905819b8723fe2c1d161860e5ee1830318dbf49a83bd451cfb8440c28bd6fa457fe1296106559a3c80937a1c1069be3a3a5bd381ee6260e8d9739fce1f607" + ], + [ + "80808080808080808080808080808080", + "letter advice cage absurd amount doctor acoustic avoid letter advice cage above", + "d71de856f81a8acc65e6fc851a38d4d7ec216fd0796d0a6827a3ad6ed5511a30fa280f12eb2e47ed2ac03b5c462a0358d18d69fe4f985ec81778c1b370b652a8" + ], + [ + "ffffffffffffffffffffffffffffffff", + "zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo wrong", + "ac27495480225222079d7be181583751e86f571027b0497b5b5d11218e0a8a13332572917f0f8e5a589620c6f15b11c61dee327651a14c34e18231052e48c069" + ], + [ + "000000000000000000000000000000000000000000000000", + "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon agent", + "035895f2f481b1b0f01fcf8c289c794660b289981a78f8106447707fdd9666ca06da5a9a565181599b79f53b844d8a71dd9f439c52a3d7b3e8a79c906ac845fa" + ], + [ + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f", + "legal winner thank year wave sausage worth useful legal winner thank year wave sausage worth useful legal will", + "f2b94508732bcbacbcc020faefecfc89feafa6649a5491b8c952cede496c214a0c7b3c392d168748f2d4a612bada0753b52a1c7ac53c1e93abd5c6320b9e95dd" + ], + [ + "808080808080808080808080808080808080808080808080", + "letter advice cage absurd amount doctor acoustic avoid letter advice cage absurd amount doctor acoustic avoid letter always", + "107d7c02a5aa6f38c58083ff74f04c607c2d2c0ecc55501dadd72d025b751bc27fe913ffb796f841c49b1d33b610cf0e91d3aa239027f5e99fe4ce9e5088cd65" + ], + [ + "ffffffffffffffffffffffffffffffffffffffffffffffff", + "zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo when", + "0cd6e5d827bb62eb8fc1e262254223817fd068a74b5b449cc2f667c3f1f985a76379b43348d952e2265b4cd129090758b3e3c2c49103b5051aac2eaeb890a528" + ], + [ + "0000000000000000000000000000000000000000000000000000000000000000", + "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon art", + "bda85446c68413707090a52022edd26a1c9462295029f2e60cd7c4f2bbd3097170af7a4d73245cafa9c3cca8d561a7c3de6f5d4a10be8ed2a5e608d68f92fcc8" + ], + [ + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f", + "legal winner thank year wave sausage worth useful legal winner thank year wave sausage worth useful legal winner thank year wave sausage worth title", + "bc09fca1804f7e69da93c2f2028eb238c227f2e9dda30cd63699232578480a4021b146ad717fbb7e451ce9eb835f43620bf5c514db0f8add49f5d121449d3e87" + ], + [ + "8080808080808080808080808080808080808080808080808080808080808080", + "letter advice cage absurd amount doctor acoustic avoid letter advice cage absurd amount doctor acoustic avoid letter advice cage absurd amount doctor acoustic bless", + "c0c519bd0e91a2ed54357d9d1ebef6f5af218a153624cf4f2da911a0ed8f7a09e2ef61af0aca007096df430022f7a2b6fb91661a9589097069720d015e4e982f" + ], + [ + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo vote", + "dd48c104698c30cfe2b6142103248622fb7bb0ff692eebb00089b32d22484e1613912f0a5b694407be899ffd31ed3992c456cdf60f5d4564b8ba3f05a69890ad" + ], + [ + "77c2b00716cec7213839159e404db50d", + "jelly better achieve collect unaware mountain thought cargo oxygen act hood bridge", + "b5b6d0127db1a9d2226af0c3346031d77af31e918dba64287a1b44b8ebf63cdd52676f672a290aae502472cf2d602c051f3e6f18055e84e4c43897fc4e51a6ff" + ], + [ + "b63a9c59a6e641f288ebc103017f1da9f8290b3da6bdef7b", + "renew stay biology evidence goat welcome casual join adapt armor shuffle fault little machine walk stumble urge swap", + "9248d83e06f4cd98debf5b6f010542760df925ce46cf38a1bdb4e4de7d21f5c39366941c69e1bdbf2966e0f6e6dbece898a0e2f0a4c2b3e640953dfe8b7bbdc5" + ], + [ + "3e141609b97933b66a060dcddc71fad1d91677db872031e85f4c015c5e7e8982", + "dignity pass list indicate nasty swamp pool script soccer toe leaf photo multiply desk host tomato cradle drill spread actor shine dismiss champion exotic", + "ff7f3184df8696d8bef94b6c03114dbee0ef89ff938712301d27ed8336ca89ef9635da20af07d4175f2bf5f3de130f39c9d9e8dd0472489c19b1a020a940da67" + ], + [ + "0460ef47585604c5660618db2e6a7e7f", + "afford alter spike radar gate glance object seek swamp infant panel yellow", + "65f93a9f36b6c85cbe634ffc1f99f2b82cbb10b31edc7f087b4f6cb9e976e9faf76ff41f8f27c99afdf38f7a303ba1136ee48a4c1e7fcd3dba7aa876113a36e4" + ], + [ + "72f60ebac5dd8add8d2a25a797102c3ce21bc029c200076f", + "indicate race push merry suffer human cruise dwarf pole review arch keep canvas theme poem divorce alter left", + "3bbf9daa0dfad8229786ace5ddb4e00fa98a044ae4c4975ffd5e094dba9e0bb289349dbe2091761f30f382d4e35c4a670ee8ab50758d2c55881be69e327117ba" + ], + [ + "2c85efc7f24ee4573d2b81a6ec66cee209b2dcbd09d8eddc51e0215b0b68e416", + "clutch control vehicle tonight unusual clog visa ice plunge glimpse recipe series open hour vintage deposit universe tip job dress radar refuse motion taste", + "fe908f96f46668b2d5b37d82f558c77ed0d69dd0e7e043a5b0511c48c2f1064694a956f86360c93dd04052a8899497ce9e985ebe0c8c52b955e6ae86d4ff4449" + ], + [ + "eaebabb2383351fd31d703840b32e9e2", + "turtle front uncle idea crush write shrug there lottery flower risk shell", + "bdfb76a0759f301b0b899a1e3985227e53b3f51e67e3f2a65363caedf3e32fde42a66c404f18d7b05818c95ef3ca1e5146646856c461c073169467511680876c" + ], + [ + "7ac45cfe7722ee6c7ba84fbc2d5bd61b45cb2fe5eb65aa78", + "kiss carry display unusual confirm curtain upgrade antique rotate hello void custom frequent obey nut hole price segment", + "ed56ff6c833c07982eb7119a8f48fd363c4a9b1601cd2de736b01045c5eb8ab4f57b079403485d1c4924f0790dc10a971763337cb9f9c62226f64fff26397c79" + ], + [ + "4fa1a8bc3e6d80ee1316050e862c1812031493212b7ec3f3bb1b08f168cabeef", + "exile ask congress lamp submit jacket era scheme attend cousin alcohol catch course end lucky hurt sentence oven short ball bird grab wing top", + "095ee6f817b4c2cb30a5a797360a81a40ab0f9a4e25ecd672a3f58a0b5ba0687c096a6b14d2c0deb3bdefce4f61d01ae07417d502429352e27695163f7447a8c" + ], + [ + "18ab19a9f54a9274f03e5209a2ac8a91", + "board flee heavy tunnel powder denial science ski answer betray cargo cat", + "6eff1bb21562918509c73cb990260db07c0ce34ff0e3cc4a8cb3276129fbcb300bddfe005831350efd633909f476c45c88253276d9fd0df6ef48609e8bb7dca8" + ], + [ + "18a2e1d81b8ecfb2a333adcb0c17a5b9eb76cc5d05db91a4", + "board blade invite damage undo sun mimic interest slam gaze truly inherit resist great inject rocket museum chief", + "f84521c777a13b61564234bf8f8b62b3afce27fc4062b51bb5e62bdfecb23864ee6ecf07c1d5a97c0834307c5c852d8ceb88e7c97923c0a3b496bedd4e5f88a9" + ], + [ + "15da872c95a13dd738fbf50e427583ad61f18fd99f628c417a61cf8343c90419", + "beyond stage sleep clip because twist token leaf atom beauty genius food business side grid unable middle armed observe pair crouch tonight away coconut", + "b15509eaa2d09d3efd3e006ef42151b30367dc6e3aa5e44caba3fe4d3e352e65101fbdb86a96776b91946ff06f8eac594dc6ee1d3e82a42dfe1b40fef6bcc3fd" + ] + ], + japanese: [ + [ + "00000000000000000000000000000000", + "あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あおぞら", + "a262d6fb6122ecf45be09c50492b31f92e9beb7d9a845987a02cefda57a15f9c467a17872029a9e92299b5cbdf306e3a0ee620245cbd508959b6cb7ca637bd55" + ], + [ + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f", + "そつう れきだい ほんやく わかす りくつ ばいか ろせん やちん そつう れきだい ほんやく わかめ", + "aee025cbe6ca256862f889e48110a6a382365142f7d16f2b9545285b3af64e542143a577e9c144e101a6bdca18f8d97ec3366ebf5b088b1c1af9bc31346e60d9" + ], + [ + "80808080808080808080808080808080", + "そとづら あまど おおう あこがれる いくぶん けいけん あたえる いよく そとづら あまど おおう あかちゃん", + "e51736736ebdf77eda23fa17e31475fa1d9509c78f1deb6b4aacfbd760a7e2ad769c714352c95143b5c1241985bcb407df36d64e75dd5a2b78ca5d2ba82a3544" + ], + [ + "ffffffffffffffffffffffffffffffff", + "われる われる われる われる われる われる われる われる われる われる われる ろんぶん", + "4cd2ef49b479af5e1efbbd1e0bdc117f6a29b1010211df4f78e2ed40082865793e57949236c43b9fe591ec70e5bb4298b8b71dc4b267bb96ed4ed282c8f7761c" + ], + [ + "000000000000000000000000000000000000000000000000", + "あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あらいぐま", + "d99e8f1ce2d4288d30b9c815ae981edd923c01aa4ffdc5dee1ab5fe0d4a3e13966023324d119105aff266dac32e5cd11431eeca23bbd7202ff423f30d6776d69" + ], + [ + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f", + "そつう れきだい ほんやく わかす りくつ ばいか ろせん やちん そつう れきだい ほんやく わかす りくつ ばいか ろせん やちん そつう れいぎ", + "eaaf171efa5de4838c758a93d6c86d2677d4ccda4a064a7136344e975f91fe61340ec8a615464b461d67baaf12b62ab5e742f944c7bd4ab6c341fbafba435716" + ], + [ + "808080808080808080808080808080808080808080808080", + "そとづら あまど おおう あこがれる いくぶん けいけん あたえる いよく そとづら あまど おおう あこがれる いくぶん けいけん あたえる いよく そとづら いきなり", + "aec0f8d3167a10683374c222e6e632f2940c0826587ea0a73ac5d0493b6a632590179a6538287641a9fc9df8e6f24e01bf1be548e1f74fd7407ccd72ecebe425" + ], + [ + "ffffffffffffffffffffffffffffffffffffffffffffffff", + "われる われる われる われる われる われる われる われる われる われる われる われる われる われる われる われる われる りんご", + "f0f738128a65b8d1854d68de50ed97ac1831fc3a978c569e415bbcb431a6a671d4377e3b56abd518daa861676c4da75a19ccb41e00c37d086941e471a4374b95" + ], + [ + "0000000000000000000000000000000000000000000000000000000000000000", + "あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん いってい", + "23f500eec4a563bf90cfda87b3e590b211b959985c555d17e88f46f7183590cd5793458b094a4dccc8f05807ec7bd2d19ce269e20568936a751f6f1ec7c14ddd" + ], + [ + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f", + "そつう れきだい ほんやく わかす りくつ ばいか ろせん やちん そつう れきだい ほんやく わかす りくつ ばいか ろせん やちん そつう れきだい ほんやく わかす りくつ ばいか ろせん まんきつ", + "cd354a40aa2e241e8f306b3b752781b70dfd1c69190e510bc1297a9c5738e833bcdc179e81707d57263fb7564466f73d30bf979725ff783fb3eb4baa86560b05" + ], + [ + "8080808080808080808080808080808080808080808080808080808080808080", + "そとづら あまど おおう あこがれる いくぶん けいけん あたえる いよく そとづら あまど おおう あこがれる いくぶん けいけん あたえる いよく そとづら あまど おおう あこがれる いくぶん けいけん あたえる うめる", + "6b7cd1b2cdfeeef8615077cadd6a0625f417f287652991c80206dbd82db17bf317d5c50a80bd9edd836b39daa1b6973359944c46d3fcc0129198dc7dc5cd0e68" + ], + [ + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "われる われる われる われる われる われる われる われる われる われる われる われる われる われる われる われる われる われる われる われる われる われる われる らいう", + "a44ba7054ac2f9226929d56505a51e13acdaa8a9097923ca07ea465c4c7e294c038f3f4e7e4b373726ba0057191aced6e48ac8d183f3a11569c426f0de414623" + ], + [ + "77c2b00716cec7213839159e404db50d", + "せまい うちがわ あずき かろう めずらしい だんち ますく おさめる ていぼう あたる すあな えしゃく", + "344cef9efc37d0cb36d89def03d09144dd51167923487eec42c487f7428908546fa31a3c26b7391a2b3afe7db81b9f8c5007336b58e269ea0bd10749a87e0193" + ], + [ + "b63a9c59a6e641f288ebc103017f1da9f8290b3da6bdef7b", + "ぬすむ ふっかつ うどん こうりつ しつじ りょうり おたがい せもたれ あつめる いちりゅう はんしゃ ごますり そんけい たいちょう らしんばん ぶんせき やすみ ほいく", + "b14e7d35904cb8569af0d6a016cee7066335a21c1c67891b01b83033cadb3e8a034a726e3909139ecd8b2eb9e9b05245684558f329b38480e262c1d6bc20ecc4" + ], + [ + "3e141609b97933b66a060dcddc71fad1d91677db872031e85f4c015c5e7e8982", + "くのう てぬぐい そんかい すろっと ちきゅう ほあん とさか はくしゅ ひびく みえる そざい てんすう たんぴん くしょう すいようび みけん きさらぎ げざん ふくざつ あつかう はやい くろう おやゆび こすう", + "32e78dce2aff5db25aa7a4a32b493b5d10b4089923f3320c8b287a77e512455443298351beb3f7eb2390c4662a2e566eec5217e1a37467af43b46668d515e41b" + ], + [ + "0460ef47585604c5660618db2e6a7e7f", + "あみもの いきおい ふいうち にげる ざんしょ じかん ついか はたん ほあん すんぽう てちがい わかめ", + "0acf902cd391e30f3f5cb0605d72a4c849342f62bd6a360298c7013d714d7e58ddf9c7fdf141d0949f17a2c9c37ced1d8cb2edabab97c4199b142c829850154b" + ], + [ + "72f60ebac5dd8add8d2a25a797102c3ce21bc029c200076f", + "すろっと にくしみ なやむ たとえる へいこう すくう きない けってい とくべつ ねっしん いたみ せんせい おくりがな まかい とくい けあな いきおい そそぐ", + "9869e220bec09b6f0c0011f46e1f9032b269f096344028f5006a6e69ea5b0b8afabbb6944a23e11ebd021f182dd056d96e4e3657df241ca40babda532d364f73" + ], + [ + "2c85efc7f24ee4573d2b81a6ec66cee209b2dcbd09d8eddc51e0215b0b68e416", + "かほご きうい ゆたか みすえる もらう がっこう よそう ずっと ときどき したうけ にんか はっこう つみき すうじつ よけい くげん もくてき まわり せめる げざい にげる にんたい たんそく ほそく", + "713b7e70c9fbc18c831bfd1f03302422822c3727a93a5efb9659bec6ad8d6f2c1b5c8ed8b0b77775feaf606e9d1cc0a84ac416a85514ad59f5541ff5e0382481" + ], + [ + "eaebabb2383351fd31d703840b32e9e2", + "めいえん さのう めだつ すてる きぬごし ろんぱ はんこ まける たいおう さかいし ねんいり はぶらし", + "06e1d5289a97bcc95cb4a6360719131a786aba057d8efd603a547bd254261c2a97fcd3e8a4e766d5416437e956b388336d36c7ad2dba4ee6796f0249b10ee961" + ], + [ + "7ac45cfe7722ee6c7ba84fbc2d5bd61b45cb2fe5eb65aa78", + "せんぱい おしえる ぐんかん もらう きあい きぼう やおや いせえび のいず じゅしん よゆう きみつ さといも ちんもく ちわわ しんせいじ とめる はちみつ", + "1fef28785d08cbf41d7a20a3a6891043395779ed74503a5652760ee8c24dfe60972105ee71d5168071a35ab7b5bd2f8831f75488078a90f0926c8e9171b2bc4a" + ], + [ + "4fa1a8bc3e6d80ee1316050e862c1812031493212b7ec3f3bb1b08f168cabeef", + "こころ いどう きあつ そうがんきょう へいあん せつりつ ごうせい はいち いびき きこく あんい おちつく きこえる けんとう たいこ すすめる はっけん ていど はんおん いんさつ うなぎ しねま れいぼう みつかる", + "43de99b502e152d4c198542624511db3007c8f8f126a30818e856b2d8a20400d29e7a7e3fdd21f909e23be5e3c8d9aee3a739b0b65041ff0b8637276703f65c2" + ], + [ + "18ab19a9f54a9274f03e5209a2ac8a91", + "うりきれ さいせい じゆう むろん とどける ぐうたら はいれつ ひけつ いずれ うちあわせ おさめる おたく", + "3d711f075ee44d8b535bb4561ad76d7d5350ea0b1f5d2eac054e869ff7963cdce9581097a477d697a2a9433a0c6884bea10a2193647677977c9820dd0921cbde" + ], + [ + "18a2e1d81b8ecfb2a333adcb0c17a5b9eb76cc5d05db91a4", + "うりきれ うねる せっさたくま きもち めんきょ へいたく たまご ぜっく びじゅつかん さんそ むせる せいじ ねくたい しはらい せおう ねんど たんまつ がいけん", + "753ec9e333e616e9471482b4b70a18d413241f1e335c65cd7996f32b66cf95546612c51dcf12ead6f805f9ee3d965846b894ae99b24204954be80810d292fcdd" + ], + [ + "15da872c95a13dd738fbf50e427583ad61f18fd99f628c417a61cf8343c90419", + "うちゅう ふそく ひしょ がちょう うけもつ めいそう みかん そざい いばる うけとる さんま さこつ おうさま ぱんつ しひょう めした たはつ いちぶ つうじょう てさぎょう きつね みすえる いりぐち かめれおん", + "346b7321d8c04f6f37b49fdf062a2fddc8e1bf8f1d33171b65074531ec546d1d3469974beccb1a09263440fc92e1042580a557fdce314e27ee4eabb25fa5e5fe" + ] + ] + }; + describe("BIP39-lib vectors", () => { + function testVector( + description: string, + wordlist: string[], + password: string, + v: [string, string, string], + i: number + ) { + const [entropy, mnemonic, seed] = v; + describe(`for ${description} (${i}), ${entropy}`, async () => { + deepStrictEqual( + toHex(mnemonicToEntropy(mnemonic, wordlist)), + entropy, + "mnemonicToEntropy" + ); + deepStrictEqual( + toHex(mnemonicToSeedSync(mnemonic, password)), + seed, + "mnemonicToSeedSync" + ); + const res = await mnemonicToSeed(mnemonic, password); + deepStrictEqual(toHex(res), seed, "mnemonicToSeed"); + deepStrictEqual( + entropyToMnemonic(hexToBytes(entropy), wordlist), + mnemonic, + "entropyToMnemonic" + ); + deepStrictEqual( + validateMnemonic(mnemonic, wordlist), + true, + "validateMnemonic" + ); + }); + } + for (let i = 0; i < VECTORS.english.length; i++) { + testVector("English", englishWordlist, "TREZOR", VECTORS.english[i], i); + } + for (let i = 0; i < VECTORS.japanese.length; i++) { + testVector( + "Japanese", + japaneseWordlist, + "㍍ガバヴァぱばぐゞちぢ十人十色", + VECTORS.japanese[i], + i + ); + } + describe("Invalid entropy", () => { + throws(() => entropyToMnemonic(new Uint8Array([]), englishWordlist)); + throws(() => + entropyToMnemonic(new Uint8Array([0, 0, 0]), englishWordlist) + ); + throws(() => entropyToMnemonic(new Uint8Array(1028), englishWordlist)); + }); + describe("UTF8 passwords", () => { + for (const [_, mnemonic, seed] of VECTORS.japanese) { + const password = "㍍ガバヴァぱばぐゞちぢ十人十色"; + const normalizedPassword = + "メートルガバヴァぱばぐゞちぢ十人十色"; + deepStrictEqual( + toHex(mnemonicToSeedSync(mnemonic, password)), + seed, + "mnemonicToSeedSync normalizes passwords" + ); + deepStrictEqual( + toHex(mnemonicToSeedSync(mnemonic, normalizedPassword)), + seed, + "mnemonicToSeedSync leaves normalizes passwords as-is" + ); + } + }); + describe("generateMnemonic can vary entropy length", () => { + deepStrictEqual( + generateMnemonic(englishWordlist, 160).split(" ").length, + 15, + "can vary generated entropy bit length" + ); + }); + describe("validateMnemonic", () => { + deepStrictEqual( + validateMnemonic("sleep kitten", englishWordlist), + false, + "fails for a mnemonic that is too short" + ); + deepStrictEqual( + validateMnemonic( + "sleep kitten sleep kitten sleep kitten", + englishWordlist + ), + false, + "fails for a mnemonic that is too short" + ); + deepStrictEqual( + validateMnemonic( + "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about end grace oxygen maze bright face loan ticket trial leg cruel lizard bread worry reject journey perfect chef section caught neither install industry", + englishWordlist + ), + false, + "fails for a mnemonic that is too long" + ); + deepStrictEqual( + validateMnemonic( + "turtle front uncle idea crush write shrug there lottery flower risky shell", + englishWordlist + ), + false, + "fails if mnemonic words are not in the word list" + ); + deepStrictEqual( + validateMnemonic( + "sleep kitten sleep kitten sleep kitten sleep kitten sleep kitten sleep kitten", + englishWordlist + ), + false, + "fails for invalid checksum" + ); + }); + }); +}); diff --git a/test/test-vectors/blake2b.ts b/test/test-vectors/blake2b.ts index 22ad4da..3485ed1 100644 --- a/test/test-vectors/blake2b.ts +++ b/test/test-vectors/blake2b.ts @@ -1,5 +1,6 @@ -import { assert } from "chai"; - +import { blake2b } from "../../src/blake2b"; +import { hexToBytes, toHex } from "../../src/utils"; +import { deepStrictEqual, throws } from "./assert"; // Vectors extracted from https://github.com/emilbayes/blake2b/blob/f0a7c7b550133eca5f5fc3b751ccfd2335ce736f/test-vectors.json const TEST_VECTORS = [ { @@ -40,25 +41,20 @@ const TEST_VECTORS = [ } ]; -export function createTests( - hash: (input: Buffer, outputLength: number) => Buffer -) { - describe("blake2b", function() { - for (const [i, vector] of TEST_VECTORS.entries()) { - it(`Should return the right hash for the test ${i}`, function() { - const actual = hash(Buffer.from(vector.input, "hex"), vector.outlen); - - assert.equal(actual.toString("hex"), vector.out); - }); - } - - it("throws if the outputLength is <= 0", function() { - assert.throws(() => hash(Buffer.from("", "hex"), 0)); - assert.throws(() => hash(Buffer.from("", "hex"), -1)); +describe("blake2b", function() { + for (const [i, vector] of TEST_VECTORS.entries()) { + it(`Should return the right hash for the test ${i}`, function() { + const actual = blake2b(hexToBytes(vector.input), vector.outlen); + deepStrictEqual(toHex(actual), vector.out); }); + } - it("throws if the outputLength is > 64", function() { - assert.throws(() => hash(Buffer.from("", "hex"), 65)); - }); + it("throws if the outputLength is <= 0", function() { + throws(() => blake2b(hexToBytes(""), 0)); + throws(() => blake2b(hexToBytes(""), -1)); + }); + + it("throws if the outputLength is > 64", function() { + throws(() => blake2b(hexToBytes(""), 65)); }); -} +}); diff --git a/test/test-vectors/hdkey.ts b/test/test-vectors/hdkey.ts index 0bef5c2..53134e8 100644 --- a/test/test-vectors/hdkey.ts +++ b/test/test-vectors/hdkey.ts @@ -1,30 +1,429 @@ -import { assert } from "chai"; +import * as secp from "noble-secp256k1"; +import { HDKey } from "../../src/hdkey"; +import { hexToBytes, toHex } from "../../src/utils"; +import { deepStrictEqual, throws } from "./assert"; +// https://github.com/cryptocoinjs/hdkey/blob/42637e381bdef0c8f785b14f5b66a80dad969514/test/fixtures/hdkey.json +const fixtures = [ + { + seed: "000102030405060708090a0b0c0d0e0f", + path: "m", + public: + "xpub661MyMwAqRbcFtXgS5sYJABqqG9YLmC4Q1Rdap9gSE8NqtwybGhePY2gZ29ESFjqJoCu1Rupje8YtGqsefD265TMg7usUDFdp6W1EGMcet8", + private: + "xprv9s21ZrQH143K3QTDL4LXw2F7HEK3wJUD2nW2nRk4stbPy6cq3jPPqjiChkVvvNKmPGJxWUtg6LnF5kejMRNNU3TGtRBeJgk33yuGBxrMPHi" + }, + { + seed: "000102030405060708090a0b0c0d0e0f", + path: "m/0'", + public: + "xpub68Gmy5EdvgibQVfPdqkBBCHxA5htiqg55crXYuXoQRKfDBFA1WEjWgP6LHhwBZeNK1VTsfTFUHCdrfp1bgwQ9xv5ski8PX9rL2dZXvgGDnw", + private: + "xprv9uHRZZhk6KAJC1avXpDAp4MDc3sQKNxDiPvvkX8Br5ngLNv1TxvUxt4cV1rGL5hj6KCesnDYUhd7oWgT11eZG7XnxHrnYeSvkzY7d2bhkJ7" + }, + { + seed: "000102030405060708090a0b0c0d0e0f", + path: "m/0'/1", + public: + "xpub6ASuArnXKPbfEwhqN6e3mwBcDTgzisQN1wXN9BJcM47sSikHjJf3UFHKkNAWbWMiGj7Wf5uMash7SyYq527Hqck2AxYysAA7xmALppuCkwQ", + private: + "xprv9wTYmMFdV23N2TdNG573QoEsfRrWKQgWeibmLntzniatZvR9BmLnvSxqu53Kw1UmYPxLgboyZQaXwTCg8MSY3H2EU4pWcQDnRnrVA1xe8fs" + }, + { + seed: "000102030405060708090a0b0c0d0e0f", + path: "m/0'/1/2'", + public: + "xpub6D4BDPcP2GT577Vvch3R8wDkScZWzQzMMUm3PWbmWvVJrZwQY4VUNgqFJPMM3No2dFDFGTsxxpG5uJh7n7epu4trkrX7x7DogT5Uv6fcLW5", + private: + "xprv9z4pot5VBttmtdRTWfWQmoH1taj2axGVzFqSb8C9xaxKymcFzXBDptWmT7FwuEzG3ryjH4ktypQSAewRiNMjANTtpgP4mLTj34bhnZX7UiM" + }, + { + seed: "000102030405060708090a0b0c0d0e0f", + path: "m/0'/1/2'/2", + public: + "xpub6FHa3pjLCk84BayeJxFW2SP4XRrFd1JYnxeLeU8EqN3vDfZmbqBqaGJAyiLjTAwm6ZLRQUMv1ZACTj37sR62cfN7fe5JnJ7dh8zL4fiyLHV", + private: + "xprvA2JDeKCSNNZky6uBCviVfJSKyQ1mDYahRjijr5idH2WwLsEd4Hsb2Tyh8RfQMuPh7f7RtyzTtdrbdqqsunu5Mm3wDvUAKRHSC34sJ7in334" + }, + { + seed: "000102030405060708090a0b0c0d0e0f", + path: "m/0'/1/2'/2/1000000000", + public: + "xpub6H1LXWLaKsWFhvm6RVpEL9P4KfRZSW7abD2ttkWP3SSQvnyA8FSVqNTEcYFgJS2UaFcxupHiYkro49S8yGasTvXEYBVPamhGW6cFJodrTHy", + private: + "xprvA41z7zogVVwxVSgdKUHDy1SKmdb533PjDz7J6N6mV6uS3ze1ai8FHa8kmHScGpWmj4WggLyQjgPie1rFSruoUihUZREPSL39UNdE3BBDu76" + }, + { + seed: + "fffcf9f6f3f0edeae7e4e1dedbd8d5d2cfccc9c6c3c0bdbab7b4b1aeaba8a5a29f9c999693908d8a8784817e7b7875726f6c696663605d5a5754514e4b484542", + path: "m", + public: + "xpub661MyMwAqRbcFW31YEwpkMuc5THy2PSt5bDMsktWQcFF8syAmRUapSCGu8ED9W6oDMSgv6Zz8idoc4a6mr8BDzTJY47LJhkJ8UB7WEGuduB", + private: + "xprv9s21ZrQH143K31xYSDQpPDxsXRTUcvj2iNHm5NUtrGiGG5e2DtALGdso3pGz6ssrdK4PFmM8NSpSBHNqPqm55Qn3LqFtT2emdEXVYsCzC2U" + }, + { + seed: + "fffcf9f6f3f0edeae7e4e1dedbd8d5d2cfccc9c6c3c0bdbab7b4b1aeaba8a5a29f9c999693908d8a8784817e7b7875726f6c696663605d5a5754514e4b484542", + path: "m/0", + public: + "xpub69H7F5d8KSRgmmdJg2KhpAK8SR3DjMwAdkxj3ZuxV27CprR9LgpeyGmXUbC6wb7ERfvrnKZjXoUmmDznezpbZb7ap6r1D3tgFxHmwMkQTPH", + private: + "xprv9vHkqa6EV4sPZHYqZznhT2NPtPCjKuDKGY38FBWLvgaDx45zo9WQRUT3dKYnjwih2yJD9mkrocEZXo1ex8G81dwSM1fwqWpWkeS3v86pgKt" + }, + { + seed: + "fffcf9f6f3f0edeae7e4e1dedbd8d5d2cfccc9c6c3c0bdbab7b4b1aeaba8a5a29f9c999693908d8a8784817e7b7875726f6c696663605d5a5754514e4b484542", + path: "m/0/2147483647'", + public: + "xpub6ASAVgeehLbnwdqV6UKMHVzgqAG8Gr6riv3Fxxpj8ksbH9ebxaEyBLZ85ySDhKiLDBrQSARLq1uNRts8RuJiHjaDMBU4Zn9h8LZNnBC5y4a", + private: + "xprv9wSp6B7kry3Vj9m1zSnLvN3xH8RdsPP1Mh7fAaR7aRLcQMKTR2vidYEeEg2mUCTAwCd6vnxVrcjfy2kRgVsFawNzmjuHc2YmYRmagcEPdU9" + }, + { + seed: + "fffcf9f6f3f0edeae7e4e1dedbd8d5d2cfccc9c6c3c0bdbab7b4b1aeaba8a5a29f9c999693908d8a8784817e7b7875726f6c696663605d5a5754514e4b484542", + path: "m/0/2147483647'/1", + public: + "xpub6DF8uhdarytz3FWdA8TvFSvvAh8dP3283MY7p2V4SeE2wyWmG5mg5EwVvmdMVCQcoNJxGoWaU9DCWh89LojfZ537wTfunKau47EL2dhHKon", + private: + "xprv9zFnWC6h2cLgpmSA46vutJzBcfJ8yaJGg8cX1e5StJh45BBciYTRXSd25UEPVuesF9yog62tGAQtHjXajPPdbRCHuWS6T8XA2ECKADdw4Ef" + }, + { + seed: + "fffcf9f6f3f0edeae7e4e1dedbd8d5d2cfccc9c6c3c0bdbab7b4b1aeaba8a5a29f9c999693908d8a8784817e7b7875726f6c696663605d5a5754514e4b484542", + path: "m/0/2147483647'/1/2147483646'", + public: + "xpub6ERApfZwUNrhLCkDtcHTcxd75RbzS1ed54G1LkBUHQVHQKqhMkhgbmJbZRkrgZw4koxb5JaHWkY4ALHY2grBGRjaDMzQLcgJvLJuZZvRcEL", + private: + "xprvA1RpRA33e1JQ7ifknakTFpgNXPmW2YvmhqLQYMmrj4xJXXWYpDPS3xz7iAxn8L39njGVyuoseXzU6rcxFLJ8HFsTjSyQbLYnMpCqE2VbFWc" + }, + { + seed: + "fffcf9f6f3f0edeae7e4e1dedbd8d5d2cfccc9c6c3c0bdbab7b4b1aeaba8a5a29f9c999693908d8a8784817e7b7875726f6c696663605d5a5754514e4b484542", + path: "m/0/2147483647'/1/2147483646'/2", + public: + "xpub6FnCn6nSzZAw5Tw7cgR9bi15UV96gLZhjDstkXXxvCLsUXBGXPdSnLFbdpq8p9HmGsApME5hQTZ3emM2rnY5agb9rXpVGyy3bdW6EEgAtqt", + private: + "xprvA2nrNbFZABcdryreWet9Ea4LvTJcGsqrMzxHx98MMrotbir7yrKCEXw7nadnHM8Dq38EGfSh6dqA9QWTyefMLEcBYJUuekgW4BYPJcr9E7j" + } +]; -export function createTests(HDKey: any) { - describe("hdkey", function() { - it("Should derive private key correctly", function() { - const seed = - "fffcf9f6f3f0edeae7e4e1dedbd8d5d2cfccc9c6c3c0bdbab7b4b1aeaba8a5a29f9c999693908d8a8784817e7b7875726f6c696663605d5a5754514e4b484542"; - const hdkey = HDKey.fromMasterSeed(Buffer.from(seed, "hex")); - const childkey = hdkey.derive("m/0/2147483647'/1"); +describe("hdkey", () => { + it("Should derive private key correctly", () => { + const seed = + "fffcf9f6f3f0edeae7e4e1dedbd8d5d2cfccc9c6c3c0bdbab7b4b1aeaba8a5a29f9c999693908d8a8784817e7b7875726f6c696663605d5a5754514e4b484542"; + const hdkey = HDKey.fromMasterSeed(hexToBytes(seed)); + const childkey = hdkey.derive("m/0/2147483647'/1"); + deepStrictEqual( + childkey.privateExtendedKey, + "xprv9zFnWC6h2cLgpmSA46vutJzBcfJ8yaJGg8cX1e5StJh45BBciYTRXSd25UEPVuesF9yog62tGAQtHjXajPPdbRCHuWS6T8XA2ECKADdw4Ef" + ); + }); + + it("Should derive public key correctly", () => { + const seed = + "fffcf9f6f3f0edeae7e4e1dedbd8d5d2cfccc9c6c3c0bdbab7b4b1aeaba8a5a29f9c999693908d8a8784817e7b7875726f6c696663605d5a5754514e4b484542"; + const hdkey = HDKey.fromMasterSeed(hexToBytes(seed)); + const expected = hdkey.derive("m/0/2147483647'/1"); + const parentkey = hdkey.derive("m/0/2147483647'"); + parentkey.wipePrivateData(); + const childkey = parentkey.derive("m/1"); + deepStrictEqual(childkey.publicExtendedKey, expected.publicExtendedKey); + }); + + // Ported from https://github.com/cryptocoinjs/hdkey/blob/42637e381bdef0c8f785b14f5b66a80dad969514/test/hdkey.test.js + describe("+ fromMasterSeed", () => { + for (let f of fixtures) { + it("should properly derive the chain path: " + f.path, () => { + const hdkey = HDKey.fromMasterSeed(hexToBytes(f.seed)); + const childkey = hdkey.derive(f.path); + deepStrictEqual(childkey.privateExtendedKey, f.private); + deepStrictEqual(childkey.publicExtendedKey, f.public); + }); + + describe("> " + f.path + " toJSON() / fromJSON()", () => { + it("should return an object read for JSON serialization", () => { + const hdkey = HDKey.fromMasterSeed(hexToBytes(f.seed)); + const childkey = hdkey.derive(f.path); + const obj = { + xpriv: f.private, + xpub: f.public + }; + deepStrictEqual(childkey.toJSON(), obj); + const newKey = HDKey.fromJSON(obj); + deepStrictEqual(newKey.privateExtendedKey, f.private); + deepStrictEqual(newKey.publicExtendedKey, f.public); + }); + }); + } + }); + + describe("- privateKey", () => { + it("should throw an error if incorrect key size", () => { + const hdkey = new HDKey(); + throws(() => { + hdkey.privateKey = new Uint8Array([1, 2, 3, 4]); + }); + }); + }); + + describe("- publicKey", () => { + it("should throw an error if incorrect key size", () => { + throws(() => { + const hdkey = new HDKey(); + hdkey.publicKey = new Uint8Array([1, 2, 3, 4]); + }); + }); + + it("should not throw if key is 33 bytes (compressed)", () => { + const pub = secp.getPublicKey(secp.utils.randomPrivateKey(), true); + deepStrictEqual(pub.length, 33); + const hdkey = new HDKey(); + hdkey.publicKey = pub; + }); + + it("should not throw if key is 65 bytes (not compressed)", () => { + const pub = secp.getPublicKey(secp.utils.randomPrivateKey(), false); + deepStrictEqual(pub.length, 65); + const hdkey = new HDKey(); + hdkey.publicKey = pub; + }); + }); - assert.equal( - childkey.privateExtendedKey, - "xprv9zFnWC6h2cLgpmSA46vutJzBcfJ8yaJGg8cX1e5StJh45BBciYTRXSd25UEPVuesF9yog62tGAQtHjXajPPdbRCHuWS6T8XA2ECKADdw4Ef" + describe("+ fromExtendedKey()", () => { + describe("> when private", () => { + it("should parse it", () => { + // m/0/2147483647'/1/2147483646'/2 + const key = + "xprvA2nrNbFZABcdryreWet9Ea4LvTJcGsqrMzxHx98MMrotbir7yrKCEXw7nadnHM8Dq38EGfSh6dqA9QWTyefMLEcBYJUuekgW4BYPJcr9E7j"; + const hdkey = HDKey.fromExtendedKey(key); + deepStrictEqual(hdkey.versions.private, 0x0488ade4); + deepStrictEqual(hdkey.versions.public, 0x0488b21e); + deepStrictEqual(hdkey.depth, 5); + deepStrictEqual(hdkey.parentFingerprint, 0x31a507b8); + deepStrictEqual(hdkey.index, 2); + deepStrictEqual( + toHex(hdkey.chainCode!), + "9452b549be8cea3ecb7a84bec10dcfd94afe4d129ebfd3b3cb58eedf394ed271" + ); + deepStrictEqual( + toHex(hdkey.privateKey!), + "bb7d39bdb83ecf58f2fd82b6d918341cbef428661ef01ab97c28a4842125ac23" + ); + deepStrictEqual( + toHex(hdkey.publicKey!), + "024d902e1a2fc7a8755ab5b694c575fce742c48d9ff192e63df5193e4c7afe1f9c" + ); + deepStrictEqual( + toHex(hdkey.identifier!), + "26132fdbe7bf89cbc64cf8dafa3f9f88b8666220" + ); + }); + }); + + describe("> when public", () => { + it("should parse it", () => { + // m/0/2147483647'/1/2147483646'/2 + const key = + "xpub6FnCn6nSzZAw5Tw7cgR9bi15UV96gLZhjDstkXXxvCLsUXBGXPdSnLFbdpq8p9HmGsApME5hQTZ3emM2rnY5agb9rXpVGyy3bdW6EEgAtqt"; + const hdkey = HDKey.fromExtendedKey(key); + deepStrictEqual(hdkey.versions.private, 0x0488ade4); + deepStrictEqual(hdkey.versions.public, 0x0488b21e); + deepStrictEqual(hdkey.depth, 5); + deepStrictEqual(hdkey.parentFingerprint, 0x31a507b8); + deepStrictEqual(hdkey.index, 2); + deepStrictEqual( + toHex(hdkey.chainCode!), + "9452b549be8cea3ecb7a84bec10dcfd94afe4d129ebfd3b3cb58eedf394ed271" + ); + deepStrictEqual(hdkey.privateKey, null); + deepStrictEqual( + toHex(hdkey.publicKey!), + "024d902e1a2fc7a8755ab5b694c575fce742c48d9ff192e63df5193e4c7afe1f9c" + ); + deepStrictEqual( + toHex(hdkey.identifier!), + "26132fdbe7bf89cbc64cf8dafa3f9f88b8666220" + ); + }); + }); + }); + + describe("> when signing", () => { + it("should work", () => { + const key = + "xprvA2nrNbFZABcdryreWet9Ea4LvTJcGsqrMzxHx98MMrotbir7yrKCEXw7nadnHM8Dq38EGfSh6dqA9QWTyefMLEcBYJUuekgW4BYPJcr9E7j"; + const hdkey = HDKey.fromExtendedKey(key); + + const ma = new Uint8Array(32); + const mb = new Uint8Array(32).fill(8); + const a = hdkey.sign(ma); + const b = hdkey.sign(mb); + deepStrictEqual( + toHex(a), + "6ba4e554457ce5c1f1d7dbd10459465e39219eb9084ee23270688cbe0d49b52b7905d5beb28492be439a3250e9359e0390f844321b65f1a88ce07960dd85da06" + ); + deepStrictEqual( + toHex(b), + "dfae85d39b73c9d143403ce472f7c4c8a5032c13d9546030044050e7d39355e47a532e5c0ae2a25392d97f5e55ab1288ef1e08d5c034bad3b0956fbbab73b381" + ); + // TODO: noble-secp256k1 incompat + // assert.equal(hdkey.verify(ma, a), true); + deepStrictEqual(hdkey.verify(mb, b), true); + deepStrictEqual( + hdkey.verify(new Uint8Array(32), new Uint8Array(64)), + false ); + deepStrictEqual(hdkey.verify(ma, b), false); + deepStrictEqual(hdkey.verify(mb, a), false); + + throws(() => hdkey.verify(new Uint8Array(99), a)); + throws(() => hdkey.verify(ma, new Uint8Array(99))); }); + }); + + describe("> when deriving public key", () => { + it("should work", () => { + const key = + "xpub661MyMwAqRbcFtXgS5sYJABqqG9YLmC4Q1Rdap9gSE8NqtwybGhePY2gZ29ESFjqJoCu1Rupje8YtGqsefD265TMg7usUDFdp6W1EGMcet8"; + const hdkey = HDKey.fromExtendedKey(key); + + const path = "m/3353535/2223/0/99424/4/33"; + const derivedHDKey = hdkey.derive(path); - it("Should derive public key correctly", function() { - const seed = - "fffcf9f6f3f0edeae7e4e1dedbd8d5d2cfccc9c6c3c0bdbab7b4b1aeaba8a5a29f9c999693908d8a8784817e7b7875726f6c696663605d5a5754514e4b484542"; - const hdkey = HDKey.fromMasterSeed(Buffer.from(seed, "hex")); - const expected = hdkey.derive("m/0/2147483647'/1"); - const parentkey = hdkey.derive("m/0/2147483647'"); - parentkey.wipePrivateData(); + const expected = + "xpub6JdKdVJtdx6sC3nh87pDvnGhotXuU5Kz6Qy7Piy84vUAwWSYShsUGULE8u6gCivTHgz7cCKJHiXaaMeieB4YnoFVAsNgHHKXJ2mN6jCMbH1"; + deepStrictEqual(derivedHDKey.publicExtendedKey, expected); + }); + }); - const childkey = parentkey.derive("m/1"); + describe("> when private key integer is less than 32 bytes", () => { + it("should work", () => { + const seed = "000102030405060708090a0b0c0d0e0f"; + const masterKey = HDKey.fromMasterSeed(hexToBytes(seed)); - assert.equal(childkey.publicExtendedKey, expected.publicExtendedKey); + const newKey = masterKey.derive("m/44'/6'/4'"); + const expected = + "xprv9ymoag6W7cR6KBcJzhCM6qqTrb3rRVVwXKzwNqp1tDWcwierEv3BA9if3ARHMhMPh9u2jNoutcgpUBLMfq3kADDo7LzfoCnhhXMRGX3PXDx"; + deepStrictEqual(newKey.privateExtendedKey, expected); }); }); -} + + describe("HARDENED_OFFSET", () => { + it("should be set", () => { + deepStrictEqual(!!HDKey.HARDENED_OFFSET, true); + }); + }); + + describe("> when private key has leading zeros", () => { + it("will include leading zeros when hashing to derive child", () => { + const key = + "xprv9s21ZrQH143K3ckY9DgU79uMTJkQRLdbCCVDh81SnxTgPzLLGax6uHeBULTtaEtcAvKjXfT7ZWtHzKjTpujMkUd9dDb8msDeAfnJxrgAYhr"; + const hdkey = HDKey.fromExtendedKey(key); + deepStrictEqual( + toHex(hdkey.privateKey!), + "00000055378cf5fafb56c711c674143f9b0ee82ab0ba2924f19b64f5ae7cdbfd" + ); + const derived = hdkey.derive("m/44'/0'/0'/0/0'"); + deepStrictEqual( + toHex(derived.privateKey!), + "3348069561d2a0fb925e74bf198762acc47dce7db27372257d2d959a9e6f8aeb" + ); + }); + }); + + describe("> when private key is null", () => { + it("privateExtendedKey should return null and not throw", () => { + const seed = "000102030405060708090a0b0c0d0e0f"; + const masterKey = HDKey.fromMasterSeed(hexToBytes(seed)); + + deepStrictEqual(!!masterKey.privateExtendedKey, true, "xpriv is truthy"); + (masterKey as any).privKey = undefined; + + throws(() => masterKey.privateExtendedKey); + }); + }); + + describe(" - when the path given to derive contains only the master extended key", () => { + const hdKeyInstance = HDKey.fromMasterSeed(hexToBytes(fixtures[0].seed)); + + it("should return the same hdkey instance", () => { + deepStrictEqual(hdKeyInstance.derive("m"), hdKeyInstance); + deepStrictEqual(hdKeyInstance.derive("M"), hdKeyInstance); + deepStrictEqual(hdKeyInstance.derive("m'"), hdKeyInstance); + deepStrictEqual(hdKeyInstance.derive("M'"), hdKeyInstance); + }); + }); + + describe(" - when the path given to derive does not begin with master extended key", () => { + it("should throw an error", () => { + throws(() => HDKey.prototype.derive("123")); + }); + }); + + describe("- after wipePrivateData()", () => { + it("should not have private data", () => { + const hdkey = HDKey.fromMasterSeed( + hexToBytes(fixtures[6].seed) + ).wipePrivateData(); + deepStrictEqual(hdkey.privateKey, null); + throws(() => hdkey.privateExtendedKey); + throws(() => hdkey.sign(new Uint8Array(32))); + const childKey = hdkey.derive("m/0"); + deepStrictEqual(childKey.publicExtendedKey, fixtures[7].public); + deepStrictEqual(childKey.privateKey, null); + throws(() => childKey.privateExtendedKey); + }); + + it("should have correct data", () => { + // m/0/2147483647'/1/2147483646'/2 + const key = + "xprvA2nrNbFZABcdryreWet9Ea4LvTJcGsqrMzxHx98MMrotbir7yrKCEXw7nadnHM8Dq38EGfSh6dqA9QWTyefMLEcBYJUuekgW4BYPJcr9E7j"; + const hdkey = HDKey.fromExtendedKey(key).wipePrivateData(); + deepStrictEqual(hdkey.versions.private, 0x0488ade4); + deepStrictEqual(hdkey.versions.public, 0x0488b21e); + deepStrictEqual(hdkey.depth, 5); + deepStrictEqual(hdkey.parentFingerprint, 0x31a507b8); + deepStrictEqual(hdkey.index, 2); + deepStrictEqual( + toHex(hdkey.chainCode!), + "9452b549be8cea3ecb7a84bec10dcfd94afe4d129ebfd3b3cb58eedf394ed271" + ); + deepStrictEqual( + toHex(hdkey.publicKey!), + "024d902e1a2fc7a8755ab5b694c575fce742c48d9ff192e63df5193e4c7afe1f9c" + ); + deepStrictEqual( + toHex(hdkey.identifier!), + "26132fdbe7bf89cbc64cf8dafa3f9f88b8666220" + ); + }); + + it("should be able to verify signatures", () => { + const fullKey = HDKey.fromMasterSeed(hexToBytes(fixtures[0].seed)); + // using JSON methods to clone before mutating + const wipedKey = HDKey.fromJSON(fullKey.toJSON()).wipePrivateData(); + const hash = new Uint8Array(32).fill(8); + deepStrictEqual(!!wipedKey.verify(hash, fullKey.sign(hash)), true); + }); + + it("should not throw if called on hdkey without private data", () => { + const hdkey = HDKey.fromExtendedKey(fixtures[0].public); + hdkey.wipePrivateData(); + deepStrictEqual(hdkey.publicExtendedKey, fixtures[0].public); + }); + }); + it("should throw on derive of wrong indexes", () => { + const hdkey = HDKey.fromExtendedKey(fixtures[0].public); + const invalid = [ + "m/0/ 1 /2", + "m/0/1.5/2", + "m/0/331e100/2", + "m/0/3e/2", + "m/0/'/2" + ]; + for (const t of invalid) { + throws(() => hdkey.derive(t)); + } + }); +}); diff --git a/test/test-vectors/keccak.ts b/test/test-vectors/keccak.ts index 48cca13..38b4240 100644 --- a/test/test-vectors/keccak.ts +++ b/test/test-vectors/keccak.ts @@ -1,61 +1,50 @@ -import { assert } from "chai"; - -export function createTestsForVector( - hash: (msg: Buffer) => Buffer, - vectors: typeof keccak224Vectors -) { - describe(hash.name, function() { - for (const [i, vector] of vectors.entries()) { - it(`Should return the correct hash for test ${i}`, function() { - assert.equal(hash(vector.input).toString("hex"), vector.output); - }); - } - }); -} +import { keccak224, keccak256, keccak384, keccak512 } from "../../src/keccak"; +import { hexToBytes, toHex, utf8ToBytes } from "../../src/utils"; +import { deepStrictEqual } from "./assert"; export const keccak224Vectors = [ { - input: Buffer.from([]), + input: utf8ToBytes(""), output: "f71837502ba8e10837bdd8d365adb85591895602fc552b48b7390abd" }, { - input: Buffer.from("41", "hex"), + input: hexToBytes("41"), output: "ef40b16ff375c834e91412489889f36538748c5454f4b02ba750b65e" }, { - input: Buffer.from("asd", "ascii"), + input: utf8ToBytes("asd"), output: "c8cc732c0fa9004eb33d5d833ca22fbd27f21f1c53ef5670bc6779ca" } ]; export const keccak256Vectors = [ { - input: Buffer.from([]), + input: utf8ToBytes(""), output: "c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470" }, { - input: Buffer.from("41", "hex"), + input: hexToBytes("41"), output: "03783fac2efed8fbc9ad443e592ee30e61d65f471140c10ca155e937b435b760" }, { - input: Buffer.from("asd", "ascii"), + input: utf8ToBytes("asd"), output: "87c2d362de99f75a4f2755cdaaad2d11bf6cc65dc71356593c445535ff28f43d" } ]; export const keccak384Vectors = [ { - input: Buffer.from([]), + input: utf8ToBytes(""), output: "2c23146a63a29acf99e73b88f8c24eaa7dc60aa771780ccc006afbfa8fe2479b2dd2b21362337441ac12b515911957ff" }, { - input: Buffer.from("41", "hex"), + input: hexToBytes("41"), output: "5c744cf4b4e3fb8967189e9744261a74f0ef31cdd8850554c737803585ac109039b73c22c50ea866c94debf1061f37a4" }, { - input: Buffer.from("asd", "ascii"), + input: utf8ToBytes("asd"), output: "50efbfa7d5aa41e132c3cfba2bc503d0014eb5bf6d214420851bff0f284bc9a5383a49327600e2efc3ad9db3621decaf" } @@ -63,18 +52,37 @@ export const keccak384Vectors = [ export const keccak512Vectors = [ { - input: Buffer.from([]), + input: utf8ToBytes(""), output: "0eab42de4c3ceb9235fc91acffe746b29c29a8c366b7c60e4e67c466f36a4304c00fa9caf9d87976ba469bcbe06713b435f091ef2769fb160cdab33d3670680e" }, { - input: Buffer.from("41", "hex"), + input: hexToBytes("41"), output: "421a35a60054e5f383b6137e43d44e998f496748cc77258240ccfaa8730b51f40cf47c1bc09c728a8cd4f096731298d51463f15af89543fed478053346260c38" }, { - input: Buffer.from("asd", "ascii"), + input: utf8ToBytes("asd"), output: "3fb67c8b512d8ce73324db02dda2d19ebfb9d6a923c48fb503be3e0c7c752eb84e4da0818665133a27638dce8e9e8696a51b64b6b247354764609f22b4e65d35" } ]; + +const VECTORS: Array<[typeof keccak224, typeof keccak224Vectors]> = [ + [keccak224, keccak224Vectors], + [keccak256, keccak256Vectors], + [keccak384, keccak384Vectors], + [keccak512, keccak512Vectors] +]; + +describe("keccak", function() { + for (const [hash, vectors] of VECTORS) { + describe(hash.name, function() { + for (const [i, vector] of vectors.entries()) { + it(`Should return the correct hash for test ${i}`, function() { + deepStrictEqual(toHex(hash(vector.input)), vector.output); + }); + } + }); + } +}); diff --git a/test/test-vectors/pbkdf2.ts b/test/test-vectors/pbkdf2.ts index aedc1ee..9de18bb 100644 --- a/test/test-vectors/pbkdf2.ts +++ b/test/test-vectors/pbkdf2.ts @@ -1,17 +1,19 @@ -import { assert } from "chai"; +import { pbkdf2 as pbkdf2Async, pbkdf2Sync } from "../../src/pbkdf2"; +import { toHex, utf8ToBytes } from "../../src/utils"; +import { deepStrictEqual } from "./assert"; const TEST_VECTORS = [ { - password: Buffer.from("password", "ascii"), - salt: Buffer.from("salt", "ascii"), + password: utf8ToBytes("password"), + salt: utf8ToBytes("salt"), iterations: 1, keylen: 32, digest: "sha256", result: "120fb6cffcf8b32c43e7225256c4f837a86548c92ccc35480805987cb70be17b" }, { - password: Buffer.from("passwordPASSWORDpassword", "ascii"), - salt: Buffer.from("saltSALTsaltSALTsaltSALTsaltSALTsalt", "ascii"), + password: utf8ToBytes("passwordPASSWORDpassword"), + salt: utf8ToBytes("saltSALTsaltSALTsaltSALTsaltSALTsalt"), iterations: 4096, keylen: 40, digest: "sha256", @@ -19,8 +21,8 @@ const TEST_VECTORS = [ "348c89dbcbd32b2f32d814b8116e84cf2b17347ebc1800181c4e2a1fb8dd53e1c635518c7dac47e9" }, { - password: Buffer.from("password", "ascii"), - salt: Buffer.from("salt", "ascii"), + password: utf8ToBytes("password"), + salt: utf8ToBytes("salt"), iterations: 4096, keylen: 32, digest: "sha256", @@ -28,57 +30,40 @@ const TEST_VECTORS = [ } ]; -export function createTests( - pbkdf2Sync: ( - password: Buffer, - salt: Buffer, - iterations: number, - keylen: number, - digest: string - ) => Buffer, - pbkdf2Async: ( - password: Buffer, - salt: Buffer, - iterations: number, - keylen: number, - digest: string - ) => Promise -) { - describe("pbkdf2", function() { - describe("pbkdf2 sync", function() { - for (let i = 0; i < TEST_VECTORS.length; i++) { - it(`Should process the test ${i} correctly`, function() { - const vector = TEST_VECTORS[i]; +describe("pbkdf2", function() { + describe("pbkdf2 sync", function() { + for (let i = 0; i < TEST_VECTORS.length; i++) { + it(`Should process the test ${i} correctly`, function() { + const vector = TEST_VECTORS[i]; - const derived = pbkdf2Sync( - vector.password, - vector.salt, - vector.iterations, - vector.keylen, - vector.digest - ); + const derived = pbkdf2Sync( + vector.password, + vector.salt, + vector.iterations, + vector.keylen, + vector.digest + ); - assert.equal(derived.toString("hex"), vector.result); - }); - } - }); + deepStrictEqual(toHex(derived), vector.result); + }); + } + }); - describe("pbkdf2 async", function() { - for (let i = 0; i < TEST_VECTORS.length; i++) { - it(`Should process the test ${i} correctly`, async function() { - const vector = TEST_VECTORS[i]; + describe("pbkdf2 async", function() { + for (let i = 0; i < TEST_VECTORS.length; i++) { + it(`Should process the test ${i} correctly`, async function() { + const vector = TEST_VECTORS[i]; - const derived = await pbkdf2Async( - vector.password, - vector.salt, - vector.iterations, - vector.keylen, - vector.digest - ); + const derived = await pbkdf2Async( + vector.password, + vector.salt, + vector.iterations, + vector.keylen, + vector.digest + ); - assert.equal(derived.toString("hex"), vector.result); - }); - } - }); + deepStrictEqual(toHex(derived), vector.result); + }); + } }); -} +}); diff --git a/test/test-vectors/random.ts b/test/test-vectors/random.ts index 171437a..49dc582 100644 --- a/test/test-vectors/random.ts +++ b/test/test-vectors/random.ts @@ -1,23 +1,28 @@ -import { assert } from "chai"; +import { getRandomBytes, getRandomBytesSync } from "../../src/random"; +import { equalsBytes } from "../../src/utils"; +import { deepStrictEqual } from "./assert"; -export function createTests( - syncVersion: (bytes: number) => Buffer, - asyncVersion: (bytes: number) => Promise -) { - describe("Random number generation", function() { - describe("Sync version", function() { - it("Returns a Buffer of the right size", function() { - assert.instanceOf(syncVersion(32), Buffer); - assert.lengthOf(syncVersion(32), 32); - }); +describe("Random number generation", () => { + describe("Sync version", () => { + it("Returns a Uint8Array of the right size", () => { + deepStrictEqual(getRandomBytesSync(32) instanceof Uint8Array, true); + deepStrictEqual(getRandomBytesSync(32).length, 32); + deepStrictEqual( + equalsBytes(getRandomBytesSync(32), new Uint8Array(32)), + false + ); }); + }); - describe("Async version", function() { - it("Returns a Promise of Buffer of the right size", async function() { - assert.instanceOf(asyncVersion(32), Promise); - assert.instanceOf(await asyncVersion(32), Buffer); - assert.lengthOf(await asyncVersion(32), 32); - }); + describe("Async version", () => { + it("Returns a Promise of Uint8Array of the right size", async () => { + deepStrictEqual(getRandomBytes(32) instanceof Promise, true); + deepStrictEqual((await getRandomBytes(32)) instanceof Uint8Array, true); + deepStrictEqual((await getRandomBytes(32)).length, 32); + deepStrictEqual( + equalsBytes(await getRandomBytes(32), new Uint8Array(32)), + false + ); }); }); -} +}); diff --git a/test/test-vectors/ripemd160.ts b/test/test-vectors/ripemd160.ts index 965525c..8375b99 100644 --- a/test/test-vectors/ripemd160.ts +++ b/test/test-vectors/ripemd160.ts @@ -1,30 +1,30 @@ -import { assert } from "chai"; +import { ripemd160 } from "../../src/ripemd160"; +import { toHex, utf8ToBytes } from "../../src/utils"; +import { deepStrictEqual } from "./assert"; const TEST_VECTORS = [ { - input: Buffer.from("", "ascii"), + input: utf8ToBytes(""), output: "9c1185a5c5e9fc54612808977ee8f548b2258d31" }, { - input: Buffer.from("a", "ascii"), + input: utf8ToBytes("a"), output: "0bdc9d2d256b3ee9daae347be6f4dc835a467ffe" }, { - input: Buffer.from("abc", "ascii"), + input: utf8ToBytes("abc"), output: "8eb208f7e05d987a9b044a8e98c6b087f15a0bfc" }, { - input: Buffer.from("message digest", "ascii"), + input: utf8ToBytes("message digest"), output: "5d0689ef49d2fae572b881b123a85ffa21595f36" } ]; -export function createTests(hash: (msg: Buffer) => Buffer) { - describe("ripemd160", function() { - for (const [i, vector] of TEST_VECTORS.entries()) { - it(`Should return the right hash for the test ${i}`, async function() { - assert.equal(hash(vector.input).toString("hex"), vector.output); - }); - } - }); -} +describe("ripemd160", function() { + for (const [i, vector] of TEST_VECTORS.entries()) { + it(`Should return the right hash for the test ${i}`, async function() { + deepStrictEqual(toHex(ripemd160(vector.input)), vector.output); + }); + } +}); diff --git a/test/test-vectors/scrypt.ts b/test/test-vectors/scrypt.ts index 3547b03..484e408 100644 --- a/test/test-vectors/scrypt.ts +++ b/test/test-vectors/scrypt.ts @@ -1,4 +1,6 @@ -import { assert } from "chai"; +import { scrypt as scryptAsync, scryptSync } from "../../src/scrypt"; +import { hexToBytes, toHex } from "../../src/utils"; +import { deepStrictEqual } from "./assert"; const TEST_VECTORS = [ { @@ -33,65 +35,46 @@ const TEST_VECTORS = [ } ]; -export function createTests( - scryptSync: ( - password: Buffer, - salt: Buffer, - n: number, - p: number, - r: number, - dklen: number - ) => Buffer, - scryptAsync: ( - password: Buffer, - salt: Buffer, - n: number, - p: number, - r: number, - dklen: number - ) => Promise -) { - describe("scrypt", function() { - describe("scrypt sync", function() { - for (let i = 0; i < TEST_VECTORS.length; i++) { - it(`Should process the test ${i} correctly`, function() { - this.enableTimeouts(false); +describe("scrypt", function() { + describe("scrypt sync", function() { + for (let i = 0; i < TEST_VECTORS.length; i++) { + it(`Should process the test ${i} correctly`, function() { + this.enableTimeouts(false); - const vector = TEST_VECTORS[i]; + const vector = TEST_VECTORS[i]; - const derived = scryptSync( - Buffer.from(vector.password, "hex"), - Buffer.from(vector.salt, "hex"), - +vector.N, - +vector.p, - +vector.r, - +vector.dkLen - ); + const derived = scryptSync( + hexToBytes(vector.password), + hexToBytes(vector.salt), + +vector.N, + +vector.p, + +vector.r, + +vector.dkLen + ); - assert.equal(derived.toString("hex"), vector.derivedKey); - }); - } - }); + deepStrictEqual(toHex(derived), vector.derivedKey); + }); + } + }); - describe("scrypt async", function() { - for (let i = 0; i < TEST_VECTORS.length; i++) { - it(`Should process the test ${i} correctly`, async function() { - this.enableTimeouts(false); + describe("scrypt async", function() { + for (let i = 0; i < TEST_VECTORS.length; i++) { + it(`Should process the test ${i} correctly`, async function() { + this.enableTimeouts(false); - const vector = TEST_VECTORS[i]; + const vector = TEST_VECTORS[i]; - const derived = await scryptAsync( - Buffer.from(vector.password, "hex"), - Buffer.from(vector.salt, "hex"), - +vector.N, - +vector.p, - +vector.r, - +vector.dkLen - ); + const derived = await scryptAsync( + hexToBytes(vector.password), + hexToBytes(vector.salt), + +vector.N, + +vector.p, + +vector.r, + +vector.dkLen + ); - assert.equal(derived.toString("hex"), vector.derivedKey); - }); - } - }); + deepStrictEqual(toHex(derived), vector.derivedKey); + }); + } }); -} +}); diff --git a/test/test-vectors/secp256k1.ts b/test/test-vectors/secp256k1.ts index 329488e..05c157f 100644 --- a/test/test-vectors/secp256k1.ts +++ b/test/test-vectors/secp256k1.ts @@ -1,97 +1,235 @@ -import { assert } from "chai"; +import * as secp from "../../src/secp256k1"; +import { sha256 } from "../../src/sha256"; +import { concatBytes, hexToBytes, toHex } from "../../src/utils"; +import { deepStrictEqual, throws } from "./assert"; +import { VECTORS } from "./secp256k1_lib_vectors"; -export function createTests( - sign: ( - message: Uint8Array, - privateKey: Uint8Array - ) => { signature: Uint8Array; recid: number }, - recover: ( - message: Uint8Array, - recid: number, - signature: Uint8Array, - compressed?: boolean - ) => Uint8Array, - publicKeyConvert: (publicKey: Uint8Array, compressed?: boolean) => Uint8Array, - createPrivakeKey: () => Promise, - createPrivakeKeySync: () => Uint8Array, - privateKeyVerify: (pk: Uint8Array) => boolean -) { - describe("secp256k1", function() { - it("should create valid private keys", async function() { - const asyncPk = await createPrivakeKey(); - const syncPk = createPrivakeKeySync(); +describe("secp256k1", function() { + it("should create valid private keys", async function() { + const asyncPk = await secp.createPrivateKey(); + const syncPk = secp.createPrivateKeySync(); - assert.isTrue(privateKeyVerify(asyncPk)); - assert.isTrue(privateKeyVerify(syncPk)); - }); + deepStrictEqual(secp.privateKeyVerify(asyncPk), true); + deepStrictEqual(secp.privateKeyVerify(syncPk), true); + }); - it("Should sign correctly", function() { - // This test has been adapted from ethereumjs-util - // https://github.com/ethereumjs/ethereumjs-util/blob/3b1085059194b02354177d334f89cd82a5187883/test/index.js#L531 - const msgHash = Buffer.from( - "82ff40c0a986c6a5cfad4ddf4c3aa6996f1a7837f9c398e17e5de5cbd5a12b28", - "hex" - ); - const privateKey = Buffer.from( - "3c9229289a6125f7fdf1885a77bb12c37a8d3b4962d936f7e3084dece32a3ca1", - "hex" - ); + it("Should sign correctly", function() { + // This test has been adapted from ethereumjs-util + // https://github.com/ethereumjs/ethereumjs-util/blob/3b1085059194b02354177d334f89cd82a5187883/test/index.js#L531 + const msgHash = hexToBytes( + "82ff40c0a986c6a5cfad4ddf4c3aa6996f1a7837f9c398e17e5de5cbd5a12b28" + ); + const privateKey = hexToBytes( + "3c9229289a6125f7fdf1885a77bb12c37a8d3b4962d936f7e3084dece32a3ca1" + ); + const signature = secp.ecdsaSign(msgHash, privateKey); + const sig = { + r: signature.signature.slice(0, 32), + s: signature.signature.slice(32, 64), + v: signature.recid + }; + deepStrictEqual( + secp.signatureImport(secp.signatureExport(signature.signature)), + signature.signature + ); + deepStrictEqual( + sig.r, + hexToBytes( + "99e71a99cb2270b8cac5254f9e99b6210c6c10224a1579cf389ef88b20a1abe9" + ) + ); + deepStrictEqual( + sig.s, + hexToBytes( + "129ff05af364204442bdb53ab6f18a99ab48acc9326fa689f228040429e3ca66" + ) + ); + deepStrictEqual(sig.v, 0); + }); - const signature = sign(msgHash, privateKey); + it("Should recover signatures correctly", function() { + const echash = hexToBytes( + "82ff40c0a986c6a5cfad4ddf4c3aa6996f1a7837f9c398e17e5de5cbd5a12b28" + ); + const recid = 0; + const r = hexToBytes( + "99e71a99cb2270b8cac5254f9e99b6210c6c10224a1579cf389ef88b20a1abe9" + ); + const s = hexToBytes( + "129ff05af364204442bdb53ab6f18a99ab48acc9326fa689f228040429e3ca66" + ); + const expected = hexToBytes( + "b4ac68eff3a82d86db5f0489d66f91707e99943bf796ae6a2dcb2205c9522fa7915428b5ac3d3b9291e62142e7246d85ad54504fabbdb2bae5795161f8ddf259" + ); + const signature = concatBytes(r, s); + const senderPubKey = secp.ecdsaRecover(signature, recid, echash); + const recovered = secp.publicKeyConvert(senderPubKey, false).slice(1); + deepStrictEqual(recovered, expected); + deepStrictEqual( + secp.signatureImport(secp.signatureExport(signature)), + signature + ); + }); + it("ecdh with hashfn", () => { + /* GENERATED BY: + const secp256k1 = require('secp256k1'); + const crypto = require('crypto'); + const privateKey = hexToBytes('3c9229289a6125f7fdf1885a77bb12c37a8d3b4962d936f7e3084dece32a3ca1'); + const publicKey = hexToBytes( + '04b4ac68eff3a82d86db5f0489d66f91707e99943bf796ae6a2dcb2205c9522fa7915428b5ac3d3b9291e62142e7246d85ad54504fabbdb2bae5795161f8ddf259' + ); + const output = new Uint8Array(32); + const output2 = new Uint8Array(33); + const xbuf = new Uint8Array(32); + const ybuf = new Uint8Array(32); + const hashfn = (x, y, data) => + crypto.createHash('sha256').update(x).update(y).update(data).digest(); - const sig = { - r: signature.signature.slice(0, 32), - s: signature.signature.slice(32, 64), - v: signature.recid - }; + const hashfn2 = (x, y, data) => new Uint8Array(33); + const data = new Uint8Array([1, 2, 3, 4, 5]); + // 9461b13c2191424a2adafc45f8043504454dc37199b73a999bd12463b6904eeb + console.log('1', toHex(secp256k1.ecdh(publicKey, privateKey, {}))); + // 9461b13c2191424a2adafc45f8043504454dc37199b73a999bd12463b6904eeb + console.log('2', toHex(secp256k1.ecdh(publicKey, privateKey, { data }))); + // Error: Expected output to be an Uint8Array + // console.log('3', toHex(secp256k1.ecdh(publicKey, privateKey, { data, hashfn }))); + // Error: Scalar was invalid (zero or overflow) + // console.log('4', toHex(secp256k1.ecdh(publicKey, privateKey, { data, hashfn }, output2))); + // 6945269332a7e162866138faaffc09636e78ca742edbb555a2c274f7446cf6fb + console.log('4', toHex(secp256k1.ecdh(publicKey, privateKey, { data, hashfn }, output))); + // 6945269332a7e162866138faaffc09636e78ca742edbb555a2c274f7446cf6fb + console.log('4.1', toHex(output)); + // 6945269332a7e162866138faaffc09636e78ca742edbb555a2c274f7446cf6fb + console.log( + '5', + toHex(secp256k1.ecdh(publicKey, privateKey, { data, hashfn, xbuf, ybuf }, output)) + ); + // 6945269332a7e162866138faaffc09636e78ca742edbb555a2c274f7446cf6fb + console.log('5.1', toHex(output)); + // 8b2983e19282e35890fa04abc0ca4a1981723c50413db91a1387c43caae4888f + console.log('5.2', toHex(xbuf)); + // 6a4ee6fcc9e1403ab90236594278dfe158cd79608f4434f27506c5dd39776f97 + console.log('5.3', toHex(ybuf)); + // Error: Scalar was invalid (zero or overflow) + // console.log( + // '6', + // toHex(secp256k1.ecdh(publicKey, privateKey, { data, hashfn: hashfn2, xbuf, ybuf }, output)) + // ); + */ + const privateKey = hexToBytes( + "3c9229289a6125f7fdf1885a77bb12c37a8d3b4962d936f7e3084dece32a3ca1" + ); + const publicKey = hexToBytes( + "04b4ac68eff3a82d86db5f0489d66f91707e99943bf796ae6a2dcb2205c9522fa7915428b5ac3d3b9291e62142e7246d85ad54504fabbdb2bae5795161f8ddf259" + ); + const output = new Uint8Array(32); + const output2 = new Uint8Array(33); + const xbuf = new Uint8Array(32); + const ybuf = new Uint8Array(32); + const hashfn = (x: Uint8Array, y: Uint8Array, data: Uint8Array) => + sha256(concatBytes(x, y, data)); + const hashfn2 = (x: Uint8Array, y: Uint8Array, data: Uint8Array) => + new Uint8Array(33); + const d = new Uint8Array([1, 2, 3, 4, 5]); - assert.deepEqual( - sig.r, - Buffer.from( - "99e71a99cb2270b8cac5254f9e99b6210c6c10224a1579cf389ef88b20a1abe9", - "hex" - ) - ); - assert.deepEqual( - sig.s, - Buffer.from( - "129ff05af364204442bdb53ab6f18a99ab48acc9326fa689f228040429e3ca66", - "hex" + const exp1 = + "9461b13c2191424a2adafc45f8043504454dc37199b73a999bd12463b6904eeb"; + const exp2 = + "6945269332a7e162866138faaffc09636e78ca742edbb555a2c274f7446cf6fb"; + deepStrictEqual(toHex(secp.ecdh(publicKey, privateKey, {})), exp1); + deepStrictEqual(toHex(secp.ecdh(publicKey, privateKey, { data: d })), exp1); + throws(() => secp.ecdh(publicKey, privateKey, { data: d, hashfn })); + throws(() => + secp.ecdh(publicKey, privateKey, { data: d, hashfn }, output2) + ); + deepStrictEqual( + toHex(secp.ecdh(publicKey, privateKey, { data: d, hashfn }, output)), + exp2 + ); + deepStrictEqual(toHex(output), exp2); + deepStrictEqual( + toHex( + secp.ecdh( + publicKey, + privateKey, + { data: d, hashfn, xbuf, ybuf }, + output ) - ); - - assert.equal(sig.v, 0); - }); - - it("Should recover signatures correctly", function() { - const echash = Buffer.from( - "82ff40c0a986c6a5cfad4ddf4c3aa6996f1a7837f9c398e17e5de5cbd5a12b28", - "hex" - ); - - const recid = 0; - - const r = Buffer.from( - "99e71a99cb2270b8cac5254f9e99b6210c6c10224a1579cf389ef88b20a1abe9", - "hex" - ); - - const s = Buffer.from( - "129ff05af364204442bdb53ab6f18a99ab48acc9326fa689f228040429e3ca66", - "hex" - ); - - const expected = Buffer.from( - "b4ac68eff3a82d86db5f0489d66f91707e99943bf796ae6a2dcb2205c9522fa7915428b5ac3d3b9291e62142e7246d85ad54504fabbdb2bae5795161f8ddf259", - "hex" - ); - - const signature = Buffer.concat([r, s]); - - const senderPubKey = recover(signature, recid, echash); - const recovered = publicKeyConvert(senderPubKey, false).slice(1); + ), + exp2 + ); + deepStrictEqual(toHex(output), exp2); + deepStrictEqual( + toHex(xbuf), + "8b2983e19282e35890fa04abc0ca4a1981723c50413db91a1387c43caae4888f" + ); + deepStrictEqual( + toHex(ybuf), + "6a4ee6fcc9e1403ab90236594278dfe158cd79608f4434f27506c5dd39776f97" + ); + throws(() => + secp.ecdh( + publicKey, + privateKey, + { data: d, hashfn: hashfn2, xbuf, ybuf }, + output + ) + ); + }); - assert.deepEqual(recovered, expected); - }); + describe("Test vectors against library", () => { + const unserialize = (obj: any): any => { + if (Array.isArray(obj)) { + return obj.map(i => unserialize(i)); + } + if (typeof obj === "object" && obj !== null) { + if (obj.__BigInt__) { + return BigInt(`0x${obj.__BigInt__}`); + } else if (obj.__Buffer__) { + return hexToBytes(obj.__Buffer__); + } else if (obj.__Bytes__) { + return hexToBytes(obj.__Bytes__); + } + const res: Record = {}; + for (const key of Object.keys(obj)) { + res[key] = unserialize(obj[key]); + } + return res; + } + return obj; + }; + const genTest = (vectors: any, name: string, fn: any) => { + for (let i = 0; i < vectors[name].length; i++) { + const vector = vectors[name][i]; + it(`${name} (${i})${vector.err ? ` ERR: ${vector.err}` : ""}`, () => { + if (vector.err) { + throws(() => fn(...vector.args)); + } else { + deepStrictEqual(fn(...vector.args), vector.res); + } + deepStrictEqual(vector.args, vector.argsAfter); + }); + } + }; + const genTests = ( + vectors: Record, + library: Record + ) => { + for (let k of Object.keys(vectors)) { + const path = k.split("."); + let cur = library; + for (const i of path) { + if (!cur || typeof cur !== "object") { + throw new Error(`genTests: not object: ${k}, ${i}, ${typeof cur}`); + } + cur = cur[i]; + } + if (typeof cur !== "function") { + throw new Error(`genTests: not function ${k}`); + } + genTest(vectors, k, cur); + } + }; + genTests(unserialize(VECTORS), { secp256k1: secp }); }); -} +}); diff --git a/test/test-vectors/secp256k1_lib_vectors.ts b/test/test-vectors/secp256k1_lib_vectors.ts new file mode 100644 index 0000000..5f53e7e --- /dev/null +++ b/test/test-vectors/secp256k1_lib_vectors.ts @@ -0,0 +1,3323 @@ +export const VECTORS = { + "secp256k1.contextRandomize": [ + { + args: [], + argsAfter: [], + err: "Expected seed to be an Uint8Array or null" + }, + { + args: [ + { + __Bytes__: + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + } + ], + argsAfter: [ + { + __Bytes__: + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + } + ], + err: "Expected seed to be an Uint8Array with length 32" + }, + { + args: [ + { + __Buffer__: + "0c8376c22e2654225856ee9aaa17a727ad2c18d353a40bd7913fc454d3dc140f" + } + ], + argsAfter: [ + { + __Buffer__: + "0c8376c22e2654225856ee9aaa17a727ad2c18d353a40bd7913fc454d3dc140f" + } + ] + }, + { args: [null], argsAfter: [null] } + ], + "secp256k1.privateKeyVerify": [ + { + args: [null], + argsAfter: [null], + err: "Expected private key to be an Uint8Array" + }, + { + args: [ + { + __Buffer__: + "61d9721bd1df4b5abf82d3657036c6216bedbd7a4e3b83f03e8fa81906a12c" + } + ], + argsAfter: [ + { + __Buffer__: + "61d9721bd1df4b5abf82d3657036c6216bedbd7a4e3b83f03e8fa81906a12c" + } + ], + err: "Expected private key to be an Uint8Array with length 32" + }, + { + args: [ + { + __Buffer__: + "0000000000000000000000000000000000000000000000000000000000000000" + } + ], + argsAfter: [ + { + __Buffer__: + "0000000000000000000000000000000000000000000000000000000000000000" + } + ], + res: false + }, + { + args: [ + { + __Buffer__: + "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141" + } + ], + argsAfter: [ + { + __Buffer__: + "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141" + } + ], + res: false + }, + { + args: [ + { + __Buffer__: + "cfa1e8f4d84e31612b9b0c6982fa2448ea5cd1b9b3edbfb0c9823a9df04da034" + } + ], + argsAfter: [ + { + __Buffer__: + "cfa1e8f4d84e31612b9b0c6982fa2448ea5cd1b9b3edbfb0c9823a9df04da034" + } + ], + res: true + } + ], + "secp256k1.privateKeyNegate": [ + { + args: [null], + argsAfter: [null], + err: "Expected private key to be an Uint8Array" + }, + { + args: [ + { + __Buffer__: + "7f7dd5d30bb9f01c0555ea4fb6c908549e42036299e6030e40e4a0fbd3c1df" + } + ], + argsAfter: [ + { + __Buffer__: + "7f7dd5d30bb9f01c0555ea4fb6c908549e42036299e6030e40e4a0fbd3c1df" + } + ], + err: "Expected private key to be an Uint8Array with length 32" + }, + { + args: [ + { + __Buffer__: + "0000000000000000000000000000000000000000000000000000000000000000" + } + ], + argsAfter: [ + { + __Buffer__: + "0000000000000000000000000000000000000000000000000000000000000000" + } + ], + res: { + __Buffer__: + "0000000000000000000000000000000000000000000000000000000000000000" + } + }, + { + args: [ + { + __Buffer__: + "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141" + } + ], + argsAfter: [ + { + __Buffer__: + "0000000000000000000000000000000000000000000000000000000000000000" + } + ], + res: { + __Buffer__: + "0000000000000000000000000000000000000000000000000000000000000000" + } + }, + { + args: [ + { + __Buffer__: + "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd036414b" + } + ], + argsAfter: [ + { + __Buffer__: + "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364137" + } + ], + res: { + __Buffer__: + "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364137" + } + }, + { + args: [ + { + __Buffer__: + "bb712604b7f757c0bdb24508460efcc904653ee9edd25eeacad5ed65e6365ce8" + } + ], + argsAfter: [ + { + __Buffer__: + "448ed9fb4808a83f424dbaf7b9f10335b6499dfcc1764150f4fc7126e9ffe459" + } + ], + res: { + __Buffer__: + "448ed9fb4808a83f424dbaf7b9f10335b6499dfcc1764150f4fc7126e9ffe459" + } + } + ], + "secp256k1.privateKeyTweakAdd": [ + { + args: [ + null, + { + __Buffer__: + "9b0117349c339d021c21346fa51bd99c1ecfc3701c5067efc978f5c42a74d0eb" + } + ], + argsAfter: [ + null, + { + __Buffer__: + "9b0117349c339d021c21346fa51bd99c1ecfc3701c5067efc978f5c42a74d0eb" + } + ], + err: "Expected private key to be an Uint8Array" + }, + { + args: [ + { + __Buffer__: + "65d79b06ac114e3fa112d05109e2f0b1be4f052e6904c4ea83e9dc77a5f8d7" + }, + { + __Buffer__: + "629775f4a09cf1f8af0a2580c764713c52c1cd46c895f1d563bc6ab3cbd0e4ab" + } + ], + argsAfter: [ + { + __Buffer__: + "65d79b06ac114e3fa112d05109e2f0b1be4f052e6904c4ea83e9dc77a5f8d7" + }, + { + __Buffer__: + "629775f4a09cf1f8af0a2580c764713c52c1cd46c895f1d563bc6ab3cbd0e4ab" + } + ], + err: "Expected private key to be an Uint8Array with length 32" + }, + { + args: [ + { + __Buffer__: + "bb2de6f7ed7f1d207e6dbadf3fab085947452fd5d95061ae38b89a11010ef0c2" + }, + null + ], + argsAfter: [ + { + __Buffer__: + "bb2de6f7ed7f1d207e6dbadf3fab085947452fd5d95061ae38b89a11010ef0c2" + }, + null + ], + err: "Expected tweak to be an Uint8Array" + }, + { + args: [ + { + __Buffer__: + "f4a6c0be3ce65a54a46d6874fc32e33a10e5088788f3c31e51059b06679f66a1" + }, + { + __Buffer__: + "0e8b901cbf50549747ede18b69c8a3b32b04e67331ea8709278ea876aa8f89" + } + ], + argsAfter: [ + { + __Buffer__: + "f4a6c0be3ce65a54a46d6874fc32e33a10e5088788f3c31e51059b06679f66a1" + }, + { + __Buffer__: + "0e8b901cbf50549747ede18b69c8a3b32b04e67331ea8709278ea876aa8f89" + } + ], + err: "Expected tweak to be an Uint8Array with length 32" + }, + { + args: [ + { + __Buffer__: + "7c64fe71f25b364bae739c1bcbe1df999635a62fc3f7e602d96f796c4aa6f68d" + }, + { + __Buffer__: + "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141" + } + ], + argsAfter: [ + { + __Buffer__: + "7c64fe71f25b364bae739c1bcbe1df999635a62fc3f7e602d96f796c4aa6f68d" + }, + { + __Buffer__: + "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141" + } + ], + err: "The tweak was out of range or the resulted private key is invalid" + }, + { + args: [ + { + __Buffer__: + "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140" + }, + { + __Buffer__: + "0000000000000000000000000000000000000000000000000000000000000001" + } + ], + argsAfter: [ + { + __Buffer__: + "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140" + }, + { + __Buffer__: + "0000000000000000000000000000000000000000000000000000000000000001" + } + ], + err: "The tweak was out of range or the resulted private key is invalid" + }, + { + args: [ + { + __Buffer__: + "5a9817f063bec86b4f03094a5e0d857edc40a94b045b2700278cbadb7f87bd9c" + }, + { + __Buffer__: + "ead3f28c6f2d45c853e8e3e0620e97c5aaeba73deeb0a08348d19a8409ce9baf" + } + ], + argsAfter: [ + { + __Buffer__: + "456c0a7cd2ec0e33a2ebed2ac01c1d45cc7d73a243c32747b08bf6d2b920180a" + }, + { + __Buffer__: + "ead3f28c6f2d45c853e8e3e0620e97c5aaeba73deeb0a08348d19a8409ce9baf" + } + ], + res: { + __Buffer__: + "456c0a7cd2ec0e33a2ebed2ac01c1d45cc7d73a243c32747b08bf6d2b920180a" + } + } + ], + "secp256k1.privateKeyTweakMul": [ + { + args: [ + null, + { + __Buffer__: + "feeda811f65332b578336e182e09ae8f804022d6de2e71fbfc75faa53d60168c" + } + ], + argsAfter: [ + null, + { + __Buffer__: + "feeda811f65332b578336e182e09ae8f804022d6de2e71fbfc75faa53d60168c" + } + ], + err: "Expected private key to be an Uint8Array" + }, + { + args: [ + { + __Buffer__: + "cdc6ed30508ff8fc00f54e0e346ec2be9a67e03b0179b51da03044deb388c8" + }, + { + __Buffer__: + "17e70f2b422fee2ae8101c4114bae51d3a676c53b01ab216b10db5f49b969957" + } + ], + argsAfter: [ + { + __Buffer__: + "cdc6ed30508ff8fc00f54e0e346ec2be9a67e03b0179b51da03044deb388c8" + }, + { + __Buffer__: + "17e70f2b422fee2ae8101c4114bae51d3a676c53b01ab216b10db5f49b969957" + } + ], + err: "Expected private key to be an Uint8Array with length 32" + }, + { + args: [ + { + __Buffer__: + "2f276762c10c0762f3167ad7faf3b4f8f48f7cb82576c0776d7a472bcbfd4cbb" + }, + null + ], + argsAfter: [ + { + __Buffer__: + "2f276762c10c0762f3167ad7faf3b4f8f48f7cb82576c0776d7a472bcbfd4cbb" + }, + null + ], + err: "Expected tweak to be an Uint8Array" + }, + { + args: [ + { + __Buffer__: + "1cdd7e6afcb0125d1539345ac8a323e80dd90a0d8bb501f52b8388ab1688f366" + }, + { + __Buffer__: + "de2fe4821096760a1e4a0c838608556b01010fd9884c2456a2f01a884aac60" + } + ], + argsAfter: [ + { + __Buffer__: + "1cdd7e6afcb0125d1539345ac8a323e80dd90a0d8bb501f52b8388ab1688f366" + }, + { + __Buffer__: + "de2fe4821096760a1e4a0c838608556b01010fd9884c2456a2f01a884aac60" + } + ], + err: "Expected tweak to be an Uint8Array with length 32" + }, + { + args: [ + { + __Buffer__: + "ffec99ced46f63c47f140b19eda9ef7695a52c9deb46fc9f65982e84f1297ed9" + }, + { + __Buffer__: + "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141" + } + ], + argsAfter: [ + { + __Buffer__: + "ffec99ced46f63c47f140b19eda9ef7695a52c9deb46fc9f65982e84f1297ed9" + }, + { + __Buffer__: + "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141" + } + ], + err: "The tweak was out of range or equal to zero" + }, + { + args: [ + { + __Buffer__: + "40ecd28a1ea4d52518e22299b213f5ab24e603a08bf9a5c578aef50a2c7d3c5b" + }, + { + __Buffer__: + "0000000000000000000000000000000000000000000000000000000000000000" + } + ], + argsAfter: [ + { + __Buffer__: + "40ecd28a1ea4d52518e22299b213f5ab24e603a08bf9a5c578aef50a2c7d3c5b" + }, + { + __Buffer__: + "0000000000000000000000000000000000000000000000000000000000000000" + } + ], + err: "The tweak was out of range or equal to zero" + }, + { + args: [ + { + __Buffer__: + "230f56d6ea39486e3576163b003e974c3ddde00bffb036eae5e7b7ae5fa911e3" + }, + { + __Buffer__: + "73cd83b42d6b770427666b833dfdb1d5898400f7f276c8eaa39689bd710c3596" + } + ], + argsAfter: [ + { + __Buffer__: + "19f30a3451db82b7abe5091853a4d2edbd8a370a20c2cb74a85d07650130b05a" + }, + { + __Buffer__: + "73cd83b42d6b770427666b833dfdb1d5898400f7f276c8eaa39689bd710c3596" + } + ], + res: { + __Buffer__: + "19f30a3451db82b7abe5091853a4d2edbd8a370a20c2cb74a85d07650130b05a" + } + } + ], + "secp256k1.publicKeyVerify": [ + { + args: [null], + argsAfter: [null], + err: "Expected public key to be an Uint8Array" + }, + { + args: [ + { + __Buffer__: + "caceeb341dba8847b0dc6c72e0d8a261fcc23c8646d505a7d976b9423fbf0a93" + } + ], + argsAfter: [ + { + __Buffer__: + "caceeb341dba8847b0dc6c72e0d8a261fcc23c8646d505a7d976b9423fbf0a93" + } + ], + err: "Expected public key to be an Uint8Array with length [33, 65]" + }, + { + args: [ + { + __Buffer__: + "00cbfb40bdd183601359323a48b0bd960290feab3c5de7859bb8cff31ccc89e83e" + } + ], + argsAfter: [ + { + __Buffer__: + "00cbfb40bdd183601359323a48b0bd960290feab3c5de7859bb8cff31ccc89e83e" + } + ], + res: false + }, + { + args: [ + { + __Buffer__: + "04cbfb40bdd183601359323a48b0bd960290feab3c5de7859bb8cff31ccc89e83ef622862bf2734064c836ca053c063f4449406a68507dbb75ecc2bcb7ca2f176e" + } + ], + argsAfter: [ + { + __Buffer__: + "04cbfb40bdd183601359323a48b0bd960290feab3c5de7859bb8cff31ccc89e83ef622862bf2734064c836ca053c063f4449406a68507dbb75ecc2bcb7ca2f176e" + } + ], + res: false + }, + { + args: [ + { + __Buffer__: + "03cbfb40bdd183601359323a48b0bd960290feab3c5de7859bb8cff31ccc89e83ef622862bf2734064c836ca053c063f4449406a68507dbb75ecc2bcb7ca2f176f" + } + ], + argsAfter: [ + { + __Buffer__: + "03cbfb40bdd183601359323a48b0bd960290feab3c5de7859bb8cff31ccc89e83ef622862bf2734064c836ca053c063f4449406a68507dbb75ecc2bcb7ca2f176f" + } + ], + res: false + }, + { + args: [ + { + __Buffer__: + "03fc398c0626f1ed496a0306ad7970ec8b01151610aeeade539366636205ea4240" + } + ], + argsAfter: [ + { + __Buffer__: + "03fc398c0626f1ed496a0306ad7970ec8b01151610aeeade539366636205ea4240" + } + ], + res: true + }, + { + args: [ + { + __Buffer__: + "04fc398c0626f1ed496a0306ad7970ec8b01151610aeeade539366636205ea4240ad1ad70d2b2737c4a759f53cd46111e2613c10d5e41c3dd06c6d5b0cca9d7411" + } + ], + argsAfter: [ + { + __Buffer__: + "04fc398c0626f1ed496a0306ad7970ec8b01151610aeeade539366636205ea4240ad1ad70d2b2737c4a759f53cd46111e2613c10d5e41c3dd06c6d5b0cca9d7411" + } + ], + res: true + } + ], + "secp256k1.publicKeyCreate": [ + { + args: [null], + argsAfter: [null], + err: "Expected private key to be an Uint8Array" + }, + { + args: [ + { + __Buffer__: + "5196c9cd75897743f200098167f360450924a677ee1c2e0e6a74fd15f01086" + } + ], + argsAfter: [ + { + __Buffer__: + "5196c9cd75897743f200098167f360450924a677ee1c2e0e6a74fd15f01086" + } + ], + err: "Expected private key to be an Uint8Array with length 32" + }, + { + args: [ + { + __Buffer__: + "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141" + } + ], + argsAfter: [ + { + __Buffer__: + "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141" + } + ], + err: "Private Key is invalid" + }, + { + args: [ + { + __Buffer__: + "0000000000000000000000000000000000000000000000000000000000000000" + } + ], + argsAfter: [ + { + __Buffer__: + "0000000000000000000000000000000000000000000000000000000000000000" + } + ], + err: "Private Key is invalid" + }, + { + args: [ + { + __Buffer__: + "919d29169d70edf601a9648450444a2fed4f9f2b8592bfa629be3a644d51a47d" + }, + null + ], + argsAfter: [ + { + __Buffer__: + "919d29169d70edf601a9648450444a2fed4f9f2b8592bfa629be3a644d51a47d" + }, + null + ], + err: "Expected compressed to be a Boolean" + }, + { + args: [ + { + __Buffer__: + "b62c3992417a3b860a178fe38d6bb8f17ecbcf3da90e3f867ede082c43c97fd7" + }, + true, + null + ], + argsAfter: [ + { + __Buffer__: + "b62c3992417a3b860a178fe38d6bb8f17ecbcf3da90e3f867ede082c43c97fd7" + }, + true, + null + ], + err: "Expected output to be an Uint8Array" + }, + { + args: [ + { + __Buffer__: + "b62c3992417a3b860a178fe38d6bb8f17ecbcf3da90e3f867ede082c43c97fd7" + }, + true, + { + __Bytes__: + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + } + ], + argsAfter: [ + { + __Buffer__: + "b62c3992417a3b860a178fe38d6bb8f17ecbcf3da90e3f867ede082c43c97fd7" + }, + true, + { + __Bytes__: + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + } + ], + err: "Expected output to be an Uint8Array with length 33" + }, + { + args: [ + { + __Buffer__: + "b62c3992417a3b860a178fe38d6bb8f17ecbcf3da90e3f867ede082c43c97fd7" + }, + false, + { + __Bytes__: + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + } + ], + argsAfter: [ + { + __Buffer__: + "b62c3992417a3b860a178fe38d6bb8f17ecbcf3da90e3f867ede082c43c97fd7" + }, + false, + { + __Bytes__: + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + } + ], + err: "Expected output to be an Uint8Array with length 65" + } + ], + "secp256k1.publicKeyConvert": [ + { + args: [null], + argsAfter: [null], + err: "Expected public key to be an Uint8Array" + }, + { + args: [ + { + __Buffer__: + "05f782f164d377565473b05e797be5e7e9b0d23c29d2d748d6dc0e336e284199" + } + ], + argsAfter: [ + { + __Buffer__: + "05f782f164d377565473b05e797be5e7e9b0d23c29d2d748d6dc0e336e284199" + } + ], + err: "Expected public key to be an Uint8Array with length [33, 65]" + }, + { + args: [ + { + __Bytes__: + "000000000000000000000000000000000000000000000000000000000000000000" + } + ], + argsAfter: [ + { + __Bytes__: + "000000000000000000000000000000000000000000000000000000000000000000" + } + ], + err: "Public Key could not be parsed" + }, + { + args: [ + { + __Buffer__: + "037166e770efaa66024abee302d8d35705c7d33f19b593731fe8bd27536872d348" + }, + null + ], + argsAfter: [ + { + __Buffer__: + "037166e770efaa66024abee302d8d35705c7d33f19b593731fe8bd27536872d348" + }, + null + ], + err: "Expected compressed to be a Boolean" + }, + { + args: [ + { + __Buffer__: + "03aaf688e0ca2c68ebcbc73b388cafa7a1c58291278d8ed4551151c697e0d65f5d" + }, + true, + null + ], + argsAfter: [ + { + __Buffer__: + "03aaf688e0ca2c68ebcbc73b388cafa7a1c58291278d8ed4551151c697e0d65f5d" + }, + true, + null + ], + err: "Expected output to be an Uint8Array" + }, + { + args: [ + { + __Buffer__: + "03aaf688e0ca2c68ebcbc73b388cafa7a1c58291278d8ed4551151c697e0d65f5d" + }, + true, + { + __Bytes__: + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + } + ], + argsAfter: [ + { + __Buffer__: + "03aaf688e0ca2c68ebcbc73b388cafa7a1c58291278d8ed4551151c697e0d65f5d" + }, + true, + { + __Bytes__: + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + } + ], + err: "Expected output to be an Uint8Array with length 33" + }, + { + args: [ + { + __Buffer__: + "03aaf688e0ca2c68ebcbc73b388cafa7a1c58291278d8ed4551151c697e0d65f5d" + }, + false, + { + __Bytes__: + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + } + ], + argsAfter: [ + { + __Buffer__: + "03aaf688e0ca2c68ebcbc73b388cafa7a1c58291278d8ed4551151c697e0d65f5d" + }, + false, + { + __Bytes__: + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + } + ], + err: "Expected output to be an Uint8Array with length 65" + }, + { + args: [ + { + __Buffer__: + "02fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f" + } + ], + argsAfter: [ + { + __Buffer__: + "02fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f" + } + ], + err: "Public Key could not be parsed" + }, + { + args: [ + { + __Buffer__: + "04fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f0000000000000000000000000000000000000000000000000000000000000001" + } + ], + argsAfter: [ + { + __Buffer__: + "04fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f0000000000000000000000000000000000000000000000000000000000000001" + } + ], + err: "Public Key could not be parsed" + }, + { + args: [ + { + __Buffer__: + "040000000000000000000000000000000000000000000000000000000000000001fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f" + } + ], + argsAfter: [ + { + __Buffer__: + "040000000000000000000000000000000000000000000000000000000000000001fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f" + } + ], + err: "Public Key could not be parsed" + }, + { + args: [ + { + __Buffer__: + "065f6ae29aecb75fd4f2537c42063bc80def4aed5583d8146e5c7972e75918c198ceeb00c98387593b298c281651af850f3b4c0419e62819df2e10cc7a5d4ba305" + } + ], + argsAfter: [ + { + __Buffer__: + "065f6ae29aecb75fd4f2537c42063bc80def4aed5583d8146e5c7972e75918c198ceeb00c98387593b298c281651af850f3b4c0419e62819df2e10cc7a5d4ba305" + } + ], + err: "Public Key could not be parsed" + } + ], + "secp256k1.publicKeyNegate": [ + { + args: [null], + argsAfter: [null], + err: "Expected public key to be an Uint8Array" + }, + { + args: [ + { + __Buffer__: + "eb679c07a5fa8c0cd999d41887e949c3105b47aae5782ba9b87d3bfe917b2986" + } + ], + argsAfter: [ + { + __Buffer__: + "eb679c07a5fa8c0cd999d41887e949c3105b47aae5782ba9b87d3bfe917b2986" + } + ], + err: "Expected public key to be an Uint8Array with length [33, 65]" + }, + { + args: [ + { + __Bytes__: + "000000000000000000000000000000000000000000000000000000000000000000" + } + ], + argsAfter: [ + { + __Bytes__: + "000000000000000000000000000000000000000000000000000000000000000000" + } + ], + err: "Public Key could not be parsed" + }, + { + args: [ + { + __Buffer__: + "021a88ab60a67a3dd1d96bd6f5cfbaccb0e32aefcbfb04a34a8fccc1137b0cb281" + }, + null + ], + argsAfter: [ + { + __Buffer__: + "021a88ab60a67a3dd1d96bd6f5cfbaccb0e32aefcbfb04a34a8fccc1137b0cb281" + }, + null + ], + err: "Expected compressed to be a Boolean" + }, + { + args: [ + { + __Buffer__: + "0379f8f1ff466f8580708af7a8f6b73adaaf56c28887acf3f400bec3886e43da80" + }, + true, + null + ], + argsAfter: [ + { + __Buffer__: + "0379f8f1ff466f8580708af7a8f6b73adaaf56c28887acf3f400bec3886e43da80" + }, + true, + null + ], + err: "Expected output to be an Uint8Array" + }, + { + args: [ + { + __Buffer__: + "0379f8f1ff466f8580708af7a8f6b73adaaf56c28887acf3f400bec3886e43da80" + }, + true, + { + __Bytes__: + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + } + ], + argsAfter: [ + { + __Buffer__: + "0379f8f1ff466f8580708af7a8f6b73adaaf56c28887acf3f400bec3886e43da80" + }, + true, + { + __Bytes__: + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + } + ], + err: "Expected output to be an Uint8Array with length 33" + }, + { + args: [ + { + __Buffer__: + "0379f8f1ff466f8580708af7a8f6b73adaaf56c28887acf3f400bec3886e43da80" + }, + false, + { + __Bytes__: + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + } + ], + argsAfter: [ + { + __Buffer__: + "0379f8f1ff466f8580708af7a8f6b73adaaf56c28887acf3f400bec3886e43da80" + }, + false, + { + __Bytes__: + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + } + ], + err: "Expected output to be an Uint8Array with length 65" + } + ], + "secp256k1.publicKeyCombine": [ + { + args: [null], + argsAfter: [null], + err: "Expected public keys to be an Array" + }, + { + args: [[]], + argsAfter: [[]], + err: "Expected public keys array will have more than zero items" + }, + { + args: [[null]], + argsAfter: [[null]], + err: "Expected public key to be an Uint8Array" + }, + { + args: [ + [ + { + __Buffer__: + "5d57e8e08450cf345195361d5bdb549f76af20336af77db07b2e58e2fa531fb5" + } + ] + ], + argsAfter: [ + [ + { + __Buffer__: + "5d57e8e08450cf345195361d5bdb549f76af20336af77db07b2e58e2fa531fb5" + } + ] + ], + err: "Expected public key to be an Uint8Array with length [33, 65]" + }, + { + args: [ + [ + { + __Bytes__: + "000000000000000000000000000000000000000000000000000000000000000000" + } + ] + ], + argsAfter: [ + [ + { + __Bytes__: + "000000000000000000000000000000000000000000000000000000000000000000" + } + ] + ], + err: "Public Key could not be parsed" + }, + { + args: [ + [ + { + __Buffer__: + "038830fc3fc7dfa09eb41ec65a63f6c665d0a41eadb0fceca2666bf88cc93253cb" + }, + { + __Buffer__: + "028830fc3fc7dfa09eb41ec65a63f6c665d0a41eadb0fceca2666bf88cc93253cb" + } + ], + true + ], + argsAfter: [ + [ + { + __Buffer__: + "038830fc3fc7dfa09eb41ec65a63f6c665d0a41eadb0fceca2666bf88cc93253cb" + }, + { + __Buffer__: + "028830fc3fc7dfa09eb41ec65a63f6c665d0a41eadb0fceca2666bf88cc93253cb" + } + ], + true + ], + err: "The sum of the public keys is not valid" + }, + { + args: [ + [ + { + __Buffer__: + "03bf1cec19db2d3a2c864b04d2fa4ea6608335cec33b1db06c9531af5615368221" + } + ], + null + ], + argsAfter: [ + [ + { + __Buffer__: + "03bf1cec19db2d3a2c864b04d2fa4ea6608335cec33b1db06c9531af5615368221" + } + ], + null + ], + err: "Expected compressed to be a Boolean" + }, + { + args: [ + [ + { + __Buffer__: + "0312cb20e2d7a2dde3774d17acb329fbb5bca5f3824f908394a4698848232a6e2e" + } + ], + true, + null + ], + argsAfter: [ + [ + { + __Buffer__: + "0312cb20e2d7a2dde3774d17acb329fbb5bca5f3824f908394a4698848232a6e2e" + } + ], + true, + null + ], + err: "Expected output to be an Uint8Array" + }, + { + args: [ + [ + { + __Buffer__: + "0312cb20e2d7a2dde3774d17acb329fbb5bca5f3824f908394a4698848232a6e2e" + } + ], + true, + { + __Bytes__: + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + } + ], + argsAfter: [ + [ + { + __Buffer__: + "0312cb20e2d7a2dde3774d17acb329fbb5bca5f3824f908394a4698848232a6e2e" + } + ], + true, + { + __Bytes__: + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + } + ], + err: "Expected output to be an Uint8Array with length 33" + }, + { + args: [ + [ + { + __Buffer__: + "0312cb20e2d7a2dde3774d17acb329fbb5bca5f3824f908394a4698848232a6e2e" + } + ], + false, + { + __Bytes__: + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + } + ], + argsAfter: [ + [ + { + __Buffer__: + "0312cb20e2d7a2dde3774d17acb329fbb5bca5f3824f908394a4698848232a6e2e" + } + ], + false, + { + __Bytes__: + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + } + ], + err: "Expected output to be an Uint8Array with length 65" + } + ], + "secp256k1.publicKeyTweakAdd": [ + { + args: [ + null, + { + __Buffer__: + "960955b825f128884fcb7d2d17bfaa767db53907c4e366449b856b02558af9b3" + } + ], + argsAfter: [ + null, + { + __Buffer__: + "960955b825f128884fcb7d2d17bfaa767db53907c4e366449b856b02558af9b3" + } + ], + err: "Expected public key to be an Uint8Array" + }, + { + args: [ + { + __Buffer__: + "67d9890aded5839dea2cb6577f766b542116981e3137d93feb0f456baf769d1e" + }, + { + __Buffer__: + "9af2a39b8eaf43668087036c6d1ab66917db5fd24ab152c9bda3b39e81cbf318" + } + ], + argsAfter: [ + { + __Buffer__: + "67d9890aded5839dea2cb6577f766b542116981e3137d93feb0f456baf769d1e" + }, + { + __Buffer__: + "9af2a39b8eaf43668087036c6d1ab66917db5fd24ab152c9bda3b39e81cbf318" + } + ], + err: "Expected public key to be an Uint8Array with length [33, 65]" + }, + { + args: [ + { + __Bytes__: + "000000000000000000000000000000000000000000000000000000000000000000" + }, + { + __Buffer__: + "cee62dcf2cea28232885ded0836bafa465160dbaa4c6fc15d4523d650f79265d" + } + ], + argsAfter: [ + { + __Bytes__: + "000000000000000000000000000000000000000000000000000000000000000000" + }, + { + __Buffer__: + "cee62dcf2cea28232885ded0836bafa465160dbaa4c6fc15d4523d650f79265d" + } + ], + err: "Public Key could not be parsed" + }, + { + args: [ + { + __Buffer__: + "02fc27bfb6791c07adc33e3c5c154603cfe1bf5842cfceb0a0969cda604e137265" + }, + null + ], + argsAfter: [ + { + __Buffer__: + "02fc27bfb6791c07adc33e3c5c154603cfe1bf5842cfceb0a0969cda604e137265" + }, + null + ], + err: "Expected tweak to be an Uint8Array" + }, + { + args: [ + { + __Buffer__: + "0339b6b6e0947071ff39cd21d06cab00ce9c4b540099933f30daaa1736157dd831" + }, + { + __Buffer__: + "88fb2d59e3412b28bf2f06d0a8fc9e2f0b2706e3f09b3282d36d936942d071" + } + ], + argsAfter: [ + { + __Buffer__: + "0339b6b6e0947071ff39cd21d06cab00ce9c4b540099933f30daaa1736157dd831" + }, + { + __Buffer__: + "88fb2d59e3412b28bf2f06d0a8fc9e2f0b2706e3f09b3282d36d936942d071" + } + ], + err: "Expected tweak to be an Uint8Array with length 32" + }, + { + args: [ + { + __Buffer__: + "022e3e4075b97aed8c7b94fdc2f28eaf416648b2a39d488502aa74722b3247bdb4" + }, + { + __Buffer__: + "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141" + } + ], + argsAfter: [ + { + __Buffer__: + "022e3e4075b97aed8c7b94fdc2f28eaf416648b2a39d488502aa74722b3247bdb4" + }, + { + __Buffer__: + "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141" + } + ], + err: "The tweak was out of range or the resulted private key is invalid" + }, + { + args: [ + { + __Buffer__: + "0379be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798" + }, + { + __Buffer__: + "0000000000000000000000000000000000000000000000000000000000000001" + }, + true + ], + argsAfter: [ + { + __Buffer__: + "0379be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798" + }, + { + __Buffer__: + "0000000000000000000000000000000000000000000000000000000000000001" + }, + true + ], + err: "The tweak was out of range or the resulted private key is invalid" + }, + { + args: [ + { + __Buffer__: + "022d1db7c23d8e3428531c9ceaa4f8301ff44e64eae302e18f48d42ee5d837cd95" + }, + { + __Buffer__: + "d836246be122cae79b3f752b62236d81f9178e46068738f5b80726c28851687d" + }, + null + ], + argsAfter: [ + { + __Buffer__: + "022d1db7c23d8e3428531c9ceaa4f8301ff44e64eae302e18f48d42ee5d837cd95" + }, + { + __Buffer__: + "d836246be122cae79b3f752b62236d81f9178e46068738f5b80726c28851687d" + }, + null + ], + err: "Expected compressed to be a Boolean" + }, + { + args: [ + { + __Buffer__: + "02058060562d09620c4ab8d0d4612510faba9a68ab0d2af9a213d3c3d9cb5a64a7" + }, + { + __Buffer__: + "9bfebeb70384b48a42bba56c82285afdc23e63953ec3a40b35c5e7da44ebacf2" + }, + true, + null + ], + argsAfter: [ + { + __Buffer__: + "02058060562d09620c4ab8d0d4612510faba9a68ab0d2af9a213d3c3d9cb5a64a7" + }, + { + __Buffer__: + "9bfebeb70384b48a42bba56c82285afdc23e63953ec3a40b35c5e7da44ebacf2" + }, + true, + null + ], + err: "Expected output to be an Uint8Array" + }, + { + args: [ + { + __Buffer__: + "02058060562d09620c4ab8d0d4612510faba9a68ab0d2af9a213d3c3d9cb5a64a7" + }, + { + __Buffer__: + "9bfebeb70384b48a42bba56c82285afdc23e63953ec3a40b35c5e7da44ebacf2" + }, + true, + { + __Bytes__: + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + } + ], + argsAfter: [ + { + __Buffer__: + "02058060562d09620c4ab8d0d4612510faba9a68ab0d2af9a213d3c3d9cb5a64a7" + }, + { + __Buffer__: + "9bfebeb70384b48a42bba56c82285afdc23e63953ec3a40b35c5e7da44ebacf2" + }, + true, + { + __Bytes__: + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + } + ], + err: "Expected output to be an Uint8Array with length 33" + }, + { + args: [ + { + __Buffer__: + "02058060562d09620c4ab8d0d4612510faba9a68ab0d2af9a213d3c3d9cb5a64a7" + }, + { + __Buffer__: + "9bfebeb70384b48a42bba56c82285afdc23e63953ec3a40b35c5e7da44ebacf2" + }, + false, + { + __Bytes__: + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + } + ], + argsAfter: [ + { + __Buffer__: + "02058060562d09620c4ab8d0d4612510faba9a68ab0d2af9a213d3c3d9cb5a64a7" + }, + { + __Buffer__: + "9bfebeb70384b48a42bba56c82285afdc23e63953ec3a40b35c5e7da44ebacf2" + }, + false, + { + __Bytes__: + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + } + ], + err: "Expected output to be an Uint8Array with length 65" + } + ], + "secp256k1.publicKeyTweakMul": [ + { + args: [ + null, + { + __Buffer__: + "63207d1f4c34549dc8452ea772e6b181d5823eaf6ef640cb5992e6724444c344" + } + ], + argsAfter: [ + null, + { + __Buffer__: + "63207d1f4c34549dc8452ea772e6b181d5823eaf6ef640cb5992e6724444c344" + } + ], + err: "Expected public key to be an Uint8Array" + }, + { + args: [ + { + __Buffer__: + "d2b5367530e2adc7cf4a462650dc6303100ff87e96f8256f7eda7f1d4110ca7d" + }, + { + __Buffer__: + "ec46fc26623bfb67d991a1fdb8ec129ff879b867a8ad5ece200b48c902cbb6c3" + } + ], + argsAfter: [ + { + __Buffer__: + "d2b5367530e2adc7cf4a462650dc6303100ff87e96f8256f7eda7f1d4110ca7d" + }, + { + __Buffer__: + "ec46fc26623bfb67d991a1fdb8ec129ff879b867a8ad5ece200b48c902cbb6c3" + } + ], + err: "Expected public key to be an Uint8Array with length [33, 65]" + }, + { + args: [ + { + __Bytes__: + "000000000000000000000000000000000000000000000000000000000000000000" + }, + { + __Buffer__: + "73a5cda21f7fcdb4081924ec24fe6009c3a2fb28f49350db519d2a3378cd4fbe" + } + ], + argsAfter: [ + { + __Bytes__: + "000000000000000000000000000000000000000000000000000000000000000000" + }, + { + __Buffer__: + "73a5cda21f7fcdb4081924ec24fe6009c3a2fb28f49350db519d2a3378cd4fbe" + } + ], + err: "Public Key could not be parsed" + }, + { + args: [ + { + __Buffer__: + "03d4fd172a271e63651b81556a3a328662dfd7b45a7aa6b5355811e7786fadccbd" + }, + null + ], + argsAfter: [ + { + __Buffer__: + "03d4fd172a271e63651b81556a3a328662dfd7b45a7aa6b5355811e7786fadccbd" + }, + null + ], + err: "Expected tweak to be an Uint8Array" + }, + { + args: [ + { + __Buffer__: + "03fb596bdfaf604a211525c693c7f47d7a200d1174b5b6fff0e6bc41eb17ff6651" + }, + { + __Buffer__: + "744b0907643f2ebb1352195855fd582602e1ae1bdbf77e8e9d18be826eb1b6" + } + ], + argsAfter: [ + { + __Buffer__: + "03fb596bdfaf604a211525c693c7f47d7a200d1174b5b6fff0e6bc41eb17ff6651" + }, + { + __Buffer__: + "744b0907643f2ebb1352195855fd582602e1ae1bdbf77e8e9d18be826eb1b6" + } + ], + err: "Expected tweak to be an Uint8Array with length 32" + }, + { + args: [ + { + __Buffer__: + "033a85d361e5faef2fd196f571d5ecab18afe5dab9918f35259e9ddf7761a4ca6a" + }, + { + __Buffer__: + "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141" + } + ], + argsAfter: [ + { + __Buffer__: + "033a85d361e5faef2fd196f571d5ecab18afe5dab9918f35259e9ddf7761a4ca6a" + }, + { + __Buffer__: + "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141" + } + ], + err: "The tweak was out of range or equal to zero" + }, + { + args: [ + { + __Buffer__: + "02597c2597af205cf24d1e3c61f24a89e8eea6bc1784c8b6c1f5c495b7bb377852" + }, + { + __Buffer__: + "0000000000000000000000000000000000000000000000000000000000000000" + } + ], + argsAfter: [ + { + __Buffer__: + "02597c2597af205cf24d1e3c61f24a89e8eea6bc1784c8b6c1f5c495b7bb377852" + }, + { + __Buffer__: + "0000000000000000000000000000000000000000000000000000000000000000" + } + ], + err: "The tweak was out of range or equal to zero" + }, + { + args: [ + { + __Buffer__: + "022ef1392b3c9dd8aaae837b0177f46ad5b971898afbff87e630735473640c0d9f" + }, + { + __Buffer__: + "8d844898e482f7079da66fdd7d914b9e43b445c1449b15e48ec764ded5c7217e" + }, + null + ], + argsAfter: [ + { + __Buffer__: + "022ef1392b3c9dd8aaae837b0177f46ad5b971898afbff87e630735473640c0d9f" + }, + { + __Buffer__: + "8d844898e482f7079da66fdd7d914b9e43b445c1449b15e48ec764ded5c7217e" + }, + null + ], + err: "Expected compressed to be a Boolean" + }, + { + args: [ + { + __Buffer__: + "02cf1b392f6bb4aadf494ab48be2e6c7acd404149efd8e860dcd66470d7fae3162" + }, + { + __Buffer__: + "2a715b7a126969d9eb3279e5d8e74cbdd92a1ce3815348dde0db1b7795ab0ef4" + }, + true, + null + ], + argsAfter: [ + { + __Buffer__: + "02cf1b392f6bb4aadf494ab48be2e6c7acd404149efd8e860dcd66470d7fae3162" + }, + { + __Buffer__: + "2a715b7a126969d9eb3279e5d8e74cbdd92a1ce3815348dde0db1b7795ab0ef4" + }, + true, + null + ], + err: "Expected output to be an Uint8Array" + }, + { + args: [ + { + __Buffer__: + "02cf1b392f6bb4aadf494ab48be2e6c7acd404149efd8e860dcd66470d7fae3162" + }, + { + __Buffer__: + "2a715b7a126969d9eb3279e5d8e74cbdd92a1ce3815348dde0db1b7795ab0ef4" + }, + true, + { + __Bytes__: + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + } + ], + argsAfter: [ + { + __Buffer__: + "02cf1b392f6bb4aadf494ab48be2e6c7acd404149efd8e860dcd66470d7fae3162" + }, + { + __Buffer__: + "2a715b7a126969d9eb3279e5d8e74cbdd92a1ce3815348dde0db1b7795ab0ef4" + }, + true, + { + __Bytes__: + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + } + ], + err: "Expected output to be an Uint8Array with length 33" + }, + { + args: [ + { + __Buffer__: + "02cf1b392f6bb4aadf494ab48be2e6c7acd404149efd8e860dcd66470d7fae3162" + }, + { + __Buffer__: + "2a715b7a126969d9eb3279e5d8e74cbdd92a1ce3815348dde0db1b7795ab0ef4" + }, + false, + { + __Bytes__: + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + } + ], + argsAfter: [ + { + __Buffer__: + "02cf1b392f6bb4aadf494ab48be2e6c7acd404149efd8e860dcd66470d7fae3162" + }, + { + __Buffer__: + "2a715b7a126969d9eb3279e5d8e74cbdd92a1ce3815348dde0db1b7795ab0ef4" + }, + false, + { + __Bytes__: + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + } + ], + err: "Expected output to be an Uint8Array with length 65" + } + ], + "secp256k1.signatureNormalize": [ + { + args: [null], + argsAfter: [null], + err: "Expected signature to be an Uint8Array" + }, + { + args: [ + { + __Buffer__: + "f727256ba6af5b18376a5cb62b919d051a20a4b52cdeddb5310c84f650818c65b370bdff12aba36c7274352cfb6fd128b8a362cbcfc7466a84394880d1703c" + } + ], + argsAfter: [ + { + __Buffer__: + "f727256ba6af5b18376a5cb62b919d051a20a4b52cdeddb5310c84f650818c65b370bdff12aba36c7274352cfb6fd128b8a362cbcfc7466a84394880d1703c" + } + ], + err: "Expected signature to be an Uint8Array with length 64" + }, + { + args: [ + { + __Buffer__: + "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd03641410000000000000000000000000000000000000000000000000000000000000001" + } + ], + argsAfter: [ + { + __Buffer__: + "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd03641410000000000000000000000000000000000000000000000000000000000000001" + } + ], + err: "Signature could not be parsed" + }, + { + args: [ + { + __Buffer__: + "00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0" + } + ], + argsAfter: [ + { + __Buffer__: + "00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0" + } + ], + res: { + __Buffer__: + "00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0" + } + }, + { + args: [ + { + __Buffer__: + "00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1" + } + ], + argsAfter: [ + { + __Buffer__: + "00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0" + } + ], + res: { + __Buffer__: + "00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0" + } + } + ], + "secp256k1.signatureExport": [ + { + args: [null], + argsAfter: [null], + err: "Expected signature to be an Uint8Array" + }, + { + args: [ + { + __Buffer__: + "1848bf5436b2cca647068e64301feb012799b6e68362dc2d8f03b2a9fe45ad38178119562e7d015c10a8570a0697672fab926c6465f38f95d2c12613593e3d" + } + ], + argsAfter: [ + { + __Buffer__: + "1848bf5436b2cca647068e64301feb012799b6e68362dc2d8f03b2a9fe45ad38178119562e7d015c10a8570a0697672fab926c6465f38f95d2c12613593e3d" + } + ], + err: "Expected signature to be an Uint8Array with length 64" + }, + { + args: [ + { + __Buffer__: + "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd03641410000000000000000000000000000000000000000000000000000000000000001" + } + ], + argsAfter: [ + { + __Buffer__: + "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd03641410000000000000000000000000000000000000000000000000000000000000001" + } + ], + err: "Signature could not be parsed" + }, + { + args: [ + { + __Buffer__: + "6e3ff20960c72ba1a5cb83a0054ae20e496c3713f1a0db693e925d906d64fa647bb308435a3d4fbd40a8ea376fbcee25da32266abbbe1f9072983892afaf7485" + }, + null + ], + argsAfter: [ + { + __Buffer__: + "6e3ff20960c72ba1a5cb83a0054ae20e496c3713f1a0db693e925d906d64fa647bb308435a3d4fbd40a8ea376fbcee25da32266abbbe1f9072983892afaf7485" + }, + null + ], + err: "Expected output to be an Uint8Array" + }, + { + args: [ + { + __Buffer__: + "6e3ff20960c72ba1a5cb83a0054ae20e496c3713f1a0db693e925d906d64fa647bb308435a3d4fbd40a8ea376fbcee25da32266abbbe1f9072983892afaf7485" + }, + { + __Bytes__: + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + } + ], + argsAfter: [ + { + __Buffer__: + "6e3ff20960c72ba1a5cb83a0054ae20e496c3713f1a0db693e925d906d64fa647bb308435a3d4fbd40a8ea376fbcee25da32266abbbe1f9072983892afaf7485" + }, + { + __Bytes__: + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + } + ], + err: "Expected output to be an Uint8Array with length 72" + }, + { + args: [ + { + __Buffer__: + "ad1cbb8504417c5935b52f09b00169b55ca99715b334a3249c2aaf7332d8a3833170d726b69dd4743c8aef4bd853bed5f773509f23724ed5591c4169bd6aedf1" + } + ], + argsAfter: [ + { + __Buffer__: + "ad1cbb8504417c5935b52f09b00169b55ca99715b334a3249c2aaf7332d8a3833170d726b69dd4743c8aef4bd853bed5f773509f23724ed5591c4169bd6aedf1" + } + ], + res: { + __Bytes__: + "3045022100ad1cbb8504417c5935b52f09b00169b55ca99715b334a3249c2aaf7332d8a38302203170d726b69dd4743c8aef4bd853bed5f773509f23724ed5591c4169bd6aedf1" + } + } + ], + "secp256k1.signatureImport": [ + { + args: [null], + argsAfter: [null], + err: "Expected signature to be an Uint8Array" + }, + { + args: [ + { + __Bytes__: + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + } + ], + argsAfter: [ + { + __Bytes__: + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + } + ], + err: "Signature could not be parsed" + }, + { + args: [{ __Buffer__: "3006020101020101" }, null], + argsAfter: [{ __Buffer__: "3006020101020101" }, null], + err: "Expected output to be an Uint8Array" + }, + { + args: [ + { __Buffer__: "3006020101020101" }, + { + __Bytes__: + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + } + ], + argsAfter: [ + { __Buffer__: "3006020101020101" }, + { + __Bytes__: + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + } + ], + err: "Expected output to be an Uint8Array with length 64" + } + ], + "secp256k1.ecdsaSign": [ + { + args: [null], + argsAfter: [null], + err: "Expected message to be an Uint8Array" + }, + { + args: [ + { + __Buffer__: + "828880b1595b6f26be83bffcccffd7c9df16fc7c6af59f431fee3712007f7a" + } + ], + argsAfter: [ + { + __Buffer__: + "828880b1595b6f26be83bffcccffd7c9df16fc7c6af59f431fee3712007f7a" + } + ], + err: "Expected message to be an Uint8Array with length 32" + }, + { + args: [ + { + __Buffer__: + "f702d296765245bb985bb5f6a56135df167587144990c5017aecb3fd6c217eb2" + }, + null + ], + argsAfter: [ + { + __Buffer__: + "f702d296765245bb985bb5f6a56135df167587144990c5017aecb3fd6c217eb2" + }, + null + ], + err: "Expected private key to be an Uint8Array" + }, + { + args: [ + { + __Buffer__: + "ee822aa16108dd3f81dbdf462fcebd3042aa15e9ea166eef17d643e6869faa88" + }, + { + __Buffer__: + "924c57ca2adb7f5f63d04854f87ae4b2b47fe851cdec5176fd15aa94ae9524" + } + ], + argsAfter: [ + { + __Buffer__: + "ee822aa16108dd3f81dbdf462fcebd3042aa15e9ea166eef17d643e6869faa88" + }, + { + __Buffer__: + "924c57ca2adb7f5f63d04854f87ae4b2b47fe851cdec5176fd15aa94ae9524" + } + ], + err: "Expected private key to be an Uint8Array with length 32" + }, + { + args: [ + { + __Buffer__: + "b03754e195e1ac3f44a04bed0a29e710a59db9ad779b00ea357840ea6a8f7de7" + }, + { + __Bytes__: + "0000000000000000000000000000000000000000000000000000000000000000" + } + ], + argsAfter: [ + { + __Buffer__: + "b03754e195e1ac3f44a04bed0a29e710a59db9ad779b00ea357840ea6a8f7de7" + }, + { + __Bytes__: + "0000000000000000000000000000000000000000000000000000000000000000" + } + ], + err: + "The nonce generation function failed, or the private key was invalid" + }, + { + args: [ + { + __Buffer__: + "6426557330ca297e8bf74f1b5127578b7de757a99b9ccbec7c168452d8d1419c" + }, + { + __Buffer__: + "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141" + } + ], + argsAfter: [ + { + __Buffer__: + "6426557330ca297e8bf74f1b5127578b7de757a99b9ccbec7c168452d8d1419c" + }, + { + __Buffer__: + "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141" + } + ], + err: + "The nonce generation function failed, or the private key was invalid" + }, + { + args: [ + { + __Buffer__: + "12f08e363a977031d385e0ac7296a09c6b88418c5c7e2acb4ad933db7a820af4" + }, + { + __Buffer__: + "b01553881e751f758482e4be15e3575e1840267bce371dc3f4b205b527443e8c" + }, + null + ], + argsAfter: [ + { + __Buffer__: + "12f08e363a977031d385e0ac7296a09c6b88418c5c7e2acb4ad933db7a820af4" + }, + { + __Buffer__: + "b01553881e751f758482e4be15e3575e1840267bce371dc3f4b205b527443e8c" + }, + null + ], + err: "Expected options to be an Object" + }, + { + args: [ + { + __Buffer__: + "12f08e363a977031d385e0ac7296a09c6b88418c5c7e2acb4ad933db7a820af4" + }, + { + __Buffer__: + "b01553881e751f758482e4be15e3575e1840267bce371dc3f4b205b527443e8c" + }, + 42 + ], + argsAfter: [ + { + __Buffer__: + "12f08e363a977031d385e0ac7296a09c6b88418c5c7e2acb4ad933db7a820af4" + }, + { + __Buffer__: + "b01553881e751f758482e4be15e3575e1840267bce371dc3f4b205b527443e8c" + }, + 42 + ], + err: "Expected options to be an Object" + }, + { + args: [ + { + __Buffer__: + "12f08e363a977031d385e0ac7296a09c6b88418c5c7e2acb4ad933db7a820af4" + }, + { + __Buffer__: + "b01553881e751f758482e4be15e3575e1840267bce371dc3f4b205b527443e8c" + }, + { data: null } + ], + argsAfter: [ + { + __Buffer__: + "12f08e363a977031d385e0ac7296a09c6b88418c5c7e2acb4ad933db7a820af4" + }, + { + __Buffer__: + "b01553881e751f758482e4be15e3575e1840267bce371dc3f4b205b527443e8c" + }, + { data: null } + ], + err: "Expected options.data to be an Uint8Array" + }, + { + args: [ + { + __Buffer__: + "12f08e363a977031d385e0ac7296a09c6b88418c5c7e2acb4ad933db7a820af4" + }, + { + __Buffer__: + "b01553881e751f758482e4be15e3575e1840267bce371dc3f4b205b527443e8c" + }, + { noncefn: null } + ], + argsAfter: [ + { + __Buffer__: + "12f08e363a977031d385e0ac7296a09c6b88418c5c7e2acb4ad933db7a820af4" + }, + { + __Buffer__: + "b01553881e751f758482e4be15e3575e1840267bce371dc3f4b205b527443e8c" + }, + { noncefn: null } + ], + err: "Expected options.noncefn to be a Function" + }, + { + args: [ + { + __Buffer__: + "a57ee5b9a84b4fde74e68c9de11b6de7bcc3a4982c0a51581aebe32ebbc043ec" + }, + { + __Buffer__: + "96872b21294b1f547cf37c51065609a857b1009bd520b7b70338e18549b072a8" + }, + {}, + null + ], + argsAfter: [ + { + __Buffer__: + "a57ee5b9a84b4fde74e68c9de11b6de7bcc3a4982c0a51581aebe32ebbc043ec" + }, + { + __Buffer__: + "96872b21294b1f547cf37c51065609a857b1009bd520b7b70338e18549b072a8" + }, + {}, + null + ], + err: "Expected output to be an Uint8Array" + }, + { + args: [ + { + __Buffer__: + "a57ee5b9a84b4fde74e68c9de11b6de7bcc3a4982c0a51581aebe32ebbc043ec" + }, + { + __Buffer__: + "96872b21294b1f547cf37c51065609a857b1009bd520b7b70338e18549b072a8" + }, + {}, + { + __Bytes__: + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + } + ], + argsAfter: [ + { + __Buffer__: + "a57ee5b9a84b4fde74e68c9de11b6de7bcc3a4982c0a51581aebe32ebbc043ec" + }, + { + __Buffer__: + "96872b21294b1f547cf37c51065609a857b1009bd520b7b70338e18549b072a8" + }, + {}, + { + __Bytes__: + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + } + ], + err: "Expected output to be an Uint8Array with length 64" + } + ], + "secp256k1.ecdsaVerify": [ + { + args: [null], + argsAfter: [null], + err: "Expected signature to be an Uint8Array" + }, + { + args: [ + { + __Buffer__: + "3ca525c74a8f7a90cd9cae0d22e3ffea40aa9a50098a256eb5aae34c9ba57a229d4d1804009e6c53c1a26f198433bbe0555d2477f71237f8303d1a4856ba8f" + } + ], + argsAfter: [ + { + __Buffer__: + "3ca525c74a8f7a90cd9cae0d22e3ffea40aa9a50098a256eb5aae34c9ba57a229d4d1804009e6c53c1a26f198433bbe0555d2477f71237f8303d1a4856ba8f" + } + ], + err: "Expected signature to be an Uint8Array with length 64" + }, + { + args: [ + { + __Buffer__: + "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd036414158e8c8d8eb2df6b9238be32f0c9739da371d2bacb31a1899ac370c923ce9fd83" + }, + { + __Buffer__: + "dab989701782cb6850c28b62e76ade183e14386e6f5623a79ec55750c8f0444f" + }, + { + __Buffer__: + "0352a2bc282b9bfe236580b1ec3c82d9e029ac6fa57fbe0d7e3e097e8d6d7901b9" + } + ], + argsAfter: [ + { + __Buffer__: + "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd036414158e8c8d8eb2df6b9238be32f0c9739da371d2bacb31a1899ac370c923ce9fd83" + }, + { + __Buffer__: + "dab989701782cb6850c28b62e76ade183e14386e6f5623a79ec55750c8f0444f" + }, + { + __Buffer__: + "0352a2bc282b9bfe236580b1ec3c82d9e029ac6fa57fbe0d7e3e097e8d6d7901b9" + } + ], + err: "Signature could not be parsed" + }, + { + args: [ + { + __Buffer__: + "e70f70a2c59b763d2268b9d3ae6f548b1ee119f2520779d4b3240c21f450253d1a1a34791144c83696c9cf4c2561fc55d19dfac85efa1ce877b18c0b1fea1b51" + }, + null, + { + __Buffer__: + "039733c818f3aa880db189c9ea8184eaed10f32bffb2204b67f743c393585393a2" + } + ], + argsAfter: [ + { + __Buffer__: + "e70f70a2c59b763d2268b9d3ae6f548b1ee119f2520779d4b3240c21f450253d1a1a34791144c83696c9cf4c2561fc55d19dfac85efa1ce877b18c0b1fea1b51" + }, + null, + { + __Buffer__: + "039733c818f3aa880db189c9ea8184eaed10f32bffb2204b67f743c393585393a2" + } + ], + err: "Expected message to be an Uint8Array" + }, + { + args: [ + { + __Buffer__: + "aaf5c44eefb0f913990a3fd2829e36b494fe4b2c5de49f164ebbaf3b6ad62e7d182e22f04cd2e57ef869caa617d08e99bf0b8fa23adb7162b236365ad4e4ace0" + }, + { + __Buffer__: + "484f5ab0862d117fa11cb97dcee15f12fe40125e5dfd29309e0c30da743761" + }, + { + __Buffer__: + "032a5b3c7471164132b9ab718df77751bf209c0e52b588637e92fbe7cb65a12e87" + } + ], + argsAfter: [ + { + __Buffer__: + "aaf5c44eefb0f913990a3fd2829e36b494fe4b2c5de49f164ebbaf3b6ad62e7d182e22f04cd2e57ef869caa617d08e99bf0b8fa23adb7162b236365ad4e4ace0" + }, + { + __Buffer__: + "484f5ab0862d117fa11cb97dcee15f12fe40125e5dfd29309e0c30da743761" + }, + { + __Buffer__: + "032a5b3c7471164132b9ab718df77751bf209c0e52b588637e92fbe7cb65a12e87" + } + ], + err: "Expected message to be an Uint8Array with length 32" + }, + { + args: [ + { + __Buffer__: + "65277746a1cd1f301c7eacbf50cdea1663ad1c4fbbe9d94716d2cebb65b21cf55748b3ab0c521011c6e341dd9024a4d2c3e3251efbe38c86f53c13baaa08d325" + }, + { + __Buffer__: + "32f0c051d3b5b5322ba33ce85a7ce920bf99a78acc43eba61f4579bbe59a52d6" + }, + null + ], + argsAfter: [ + { + __Buffer__: + "65277746a1cd1f301c7eacbf50cdea1663ad1c4fbbe9d94716d2cebb65b21cf55748b3ab0c521011c6e341dd9024a4d2c3e3251efbe38c86f53c13baaa08d325" + }, + { + __Buffer__: + "32f0c051d3b5b5322ba33ce85a7ce920bf99a78acc43eba61f4579bbe59a52d6" + }, + null + ], + err: "Expected public key to be an Uint8Array" + }, + { + args: [ + { + __Buffer__: + "b60f0d27e1a5260a59cc0a84bf8507128473a0f92935423814b645e5ee965a9435fb7a1aea8970707eccb591d029e60fc0203420c5d9dfd77718446e10bf1723" + }, + { + __Buffer__: + "1b2d76070b1e09bbd5d669e1742885d5c628bd2d4a81d1f280085c91d8f6c0cf" + }, + { + __Buffer__: + "42e5c6b28983eef2e334ec66b17868de47b3b152ea9d187f704229f8d2e858f7" + } + ], + argsAfter: [ + { + __Buffer__: + "b60f0d27e1a5260a59cc0a84bf8507128473a0f92935423814b645e5ee965a9435fb7a1aea8970707eccb591d029e60fc0203420c5d9dfd77718446e10bf1723" + }, + { + __Buffer__: + "1b2d76070b1e09bbd5d669e1742885d5c628bd2d4a81d1f280085c91d8f6c0cf" + }, + { + __Buffer__: + "42e5c6b28983eef2e334ec66b17868de47b3b152ea9d187f704229f8d2e858f7" + } + ], + err: "Expected public key to be an Uint8Array with length [33, 65]" + }, + { + args: [ + { + __Buffer__: + "3b06d28205f71cea64dc9ddd461827b762417d9598aab7e963e7ac34a4967cf93f54e3e5d860759305a13825e055b15347f0ce1fb25dd9cec93f25cb04c05612" + }, + { + __Buffer__: + "238aca388260d30eec6f45c3518fe47ca5a128921a9826fe973ae00d34574bbd" + }, + { + __Buffer__: + "013f1c2710951aa6b4294881e74e8be175992bcac0c7dfbefc90396aaa01731dc0" + } + ], + argsAfter: [ + { + __Buffer__: + "3b06d28205f71cea64dc9ddd461827b762417d9598aab7e963e7ac34a4967cf93f54e3e5d860759305a13825e055b15347f0ce1fb25dd9cec93f25cb04c05612" + }, + { + __Buffer__: + "238aca388260d30eec6f45c3518fe47ca5a128921a9826fe973ae00d34574bbd" + }, + { + __Buffer__: + "013f1c2710951aa6b4294881e74e8be175992bcac0c7dfbefc90396aaa01731dc0" + } + ], + err: "Public Key could not be parsed" + }, + { + args: [ + { + __Buffer__: + "11a052cfc1234be184ea494c08b7ae2289d04f39ffd453db1652fb596606a81f7ede980239a1e8ee73413853bf587191ca0e5bd71b68c7abbe5e0a0f0f7475ce" + }, + { + __Buffer__: + "ba8459d0fe37784029de0d84f00c58aed69ead04a3d71a6c6a088fa8283e8f47" + }, + { + __Buffer__: + "0399c61b8f54b812fd6d5dab3d9480aef80d9c0879db1dc68d656685ce8d79bacb" + } + ], + argsAfter: [ + { + __Buffer__: + "11a052cfc1234be184ea494c08b7ae2289d04f39ffd453db1652fb596606a81f7ede980239a1e8ee73413853bf587191ca0e5bd71b68c7abbe5e0a0f0f7475ce" + }, + { + __Buffer__: + "ba8459d0fe37784029de0d84f00c58aed69ead04a3d71a6c6a088fa8283e8f47" + }, + { + __Buffer__: + "0399c61b8f54b812fd6d5dab3d9480aef80d9c0879db1dc68d656685ce8d79bacb" + } + ], + res: true + }, + { + args: [ + { + __Buffer__: + "11a052cfc1234be184ea494c08b7ae2289d04f39ffd453db1652fb596606a81f7ede980239a1e8ee73413853bf587191ca0e5bd71b68c7abbe5e0a0f0f7475ce" + }, + { + __Buffer__: + "bb8459d0fe37784029de0d84f00c58aed69ead04a3d71a6c6a088fa8283e8f47" + }, + { + __Buffer__: + "0399c61b8f54b812fd6d5dab3d9480aef80d9c0879db1dc68d656685ce8d79bacb" + } + ], + argsAfter: [ + { + __Buffer__: + "11a052cfc1234be184ea494c08b7ae2289d04f39ffd453db1652fb596606a81f7ede980239a1e8ee73413853bf587191ca0e5bd71b68c7abbe5e0a0f0f7475ce" + }, + { + __Buffer__: + "bb8459d0fe37784029de0d84f00c58aed69ead04a3d71a6c6a088fa8283e8f47" + }, + { + __Buffer__: + "0399c61b8f54b812fd6d5dab3d9480aef80d9c0879db1dc68d656685ce8d79bacb" + } + ], + res: false + }, + { + args: [ + { + __Buffer__: + "00000000000000000000000000000000000000000000000000000000000000007ede980239a1e8ee73413853bf587191ca0e5bd71b68c7abbe5e0a0f0f7475ce" + }, + { + __Buffer__: + "ba8459d0fe37784029de0d84f00c58aed69ead04a3d71a6c6a088fa8283e8f47" + }, + { + __Buffer__: + "0399c61b8f54b812fd6d5dab3d9480aef80d9c0879db1dc68d656685ce8d79bacb" + } + ], + argsAfter: [ + { + __Buffer__: + "00000000000000000000000000000000000000000000000000000000000000007ede980239a1e8ee73413853bf587191ca0e5bd71b68c7abbe5e0a0f0f7475ce" + }, + { + __Buffer__: + "ba8459d0fe37784029de0d84f00c58aed69ead04a3d71a6c6a088fa8283e8f47" + }, + { + __Buffer__: + "0399c61b8f54b812fd6d5dab3d9480aef80d9c0879db1dc68d656685ce8d79bacb" + } + ], + res: false + }, + { + args: [ + { + __Buffer__: + "11a052cfc1234be184ea494c08b7ae2289d04f39ffd453db1652fb596606a81f0000000000000000000000000000000000000000000000000000000000000000" + }, + { + __Buffer__: + "ba8459d0fe37784029de0d84f00c58aed69ead04a3d71a6c6a088fa8283e8f47" + }, + { + __Buffer__: + "0399c61b8f54b812fd6d5dab3d9480aef80d9c0879db1dc68d656685ce8d79bacb" + } + ], + argsAfter: [ + { + __Buffer__: + "11a052cfc1234be184ea494c08b7ae2289d04f39ffd453db1652fb596606a81f0000000000000000000000000000000000000000000000000000000000000000" + }, + { + __Buffer__: + "ba8459d0fe37784029de0d84f00c58aed69ead04a3d71a6c6a088fa8283e8f47" + }, + { + __Buffer__: + "0399c61b8f54b812fd6d5dab3d9480aef80d9c0879db1dc68d656685ce8d79bacb" + } + ], + res: false + }, + { + args: [ + { + __Buffer__: + "bb4124ce65ef1e1f32c796020fa00c6e35aa8b1384cfc05f105483febe9dcf107178ce0420ddf61e75b48b348751db4b5197efe5e1e194134ae833d798075437" + }, + { + __Buffer__: + "ce98a7f3a2fa3ba90ef3b693089964165a886b6ea87bc6fb950d906a209ff6ac" + }, + { + __Buffer__: + "0287c4aceff79d0f81862be527fda9dbcbf1318206fd1a9eab4e304445f74712e3" + } + ], + argsAfter: [ + { + __Buffer__: + "bb4124ce65ef1e1f32c796020fa00c6e35aa8b1384cfc05f105483febe9dcf107178ce0420ddf61e75b48b348751db4b5197efe5e1e194134ae833d798075437" + }, + { + __Buffer__: + "ce98a7f3a2fa3ba90ef3b693089964165a886b6ea87bc6fb950d906a209ff6ac" + }, + { + __Buffer__: + "0287c4aceff79d0f81862be527fda9dbcbf1318206fd1a9eab4e304445f74712e3" + } + ], + res: true + } + ], + "secp256k1.ecdsaRecover": [ + { + args: [null], + argsAfter: [null], + err: "Expected signature to be an Uint8Array" + }, + { + args: [ + { + __Buffer__: + "7ccef1cad0d4e73fe79ab4d306e767d44e5615bb38b30d65df2f0664143ec422d1d9b8e51e6ce0782a68ad1867c6241a4e65e4184767db4de78675f3ee3268" + }, + 0, + { + __Buffer__: + "11c4323193e4ada65b9f9d97d5d22809e215415e668abc6a72dcc33aaf029618" + } + ], + argsAfter: [ + { + __Buffer__: + "7ccef1cad0d4e73fe79ab4d306e767d44e5615bb38b30d65df2f0664143ec422d1d9b8e51e6ce0782a68ad1867c6241a4e65e4184767db4de78675f3ee3268" + }, + 0, + { + __Buffer__: + "11c4323193e4ada65b9f9d97d5d22809e215415e668abc6a72dcc33aaf029618" + } + ], + err: "Expected signature to be an Uint8Array with length 64" + }, + { + args: [ + { + __Buffer__: + "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd036414110ff78e4b7e67edc82592e22d2a60f2301fd70c9251d0ade720fcda5c5e4871e" + }, + 0, + { + __Buffer__: + "bbcc0fc65544ca76a337d748ae6acf598cd255c21ae77fde7d231feb09194f50" + } + ], + argsAfter: [ + { + __Buffer__: + "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd036414110ff78e4b7e67edc82592e22d2a60f2301fd70c9251d0ade720fcda5c5e4871e" + }, + 0, + { + __Buffer__: + "bbcc0fc65544ca76a337d748ae6acf598cd255c21ae77fde7d231feb09194f50" + } + ], + err: "Signature could not be parsed" + }, + { + args: [ + { + __Buffer__: + "8987cd2d162a01e18cd8135866f9c4545a01beeb8c40411b24c0504c6ab201ed8ba989ef676a1ebf135299e4b566214a7ac8f1ff73631b8fcc6967052855e297" + }, + null, + { + __Buffer__: + "4f7f5d2ca719813eb08a34eecc8b9282eba0821f32ed10f2b670a7014981b710" + } + ], + argsAfter: [ + { + __Buffer__: + "8987cd2d162a01e18cd8135866f9c4545a01beeb8c40411b24c0504c6ab201ed8ba989ef676a1ebf135299e4b566214a7ac8f1ff73631b8fcc6967052855e297" + }, + null, + { + __Buffer__: + "4f7f5d2ca719813eb08a34eecc8b9282eba0821f32ed10f2b670a7014981b710" + } + ], + err: "Expected recovery id to be a Number within interval [0, 3]" + }, + { + args: [ + { + __Buffer__: + "8987cd2d162a01e18cd8135866f9c4545a01beeb8c40411b24c0504c6ab201ed8ba989ef676a1ebf135299e4b566214a7ac8f1ff73631b8fcc6967052855e297" + }, + 4, + { + __Buffer__: + "4f7f5d2ca719813eb08a34eecc8b9282eba0821f32ed10f2b670a7014981b710" + } + ], + argsAfter: [ + { + __Buffer__: + "8987cd2d162a01e18cd8135866f9c4545a01beeb8c40411b24c0504c6ab201ed8ba989ef676a1ebf135299e4b566214a7ac8f1ff73631b8fcc6967052855e297" + }, + 4, + { + __Buffer__: + "4f7f5d2ca719813eb08a34eecc8b9282eba0821f32ed10f2b670a7014981b710" + } + ], + err: "Expected recovery id to be a Number within interval [0, 3]" + }, + { + args: [ + { + __Buffer__: + "d63eff8a39cd34de02d1273cfa744e40a6932421e8f2ec599e63f0d1ac07e76c65a3b54b76de1d95c28517ba7ec1dbf1f62701927eecca55cfbd77795ccf6f02" + }, + 0, + null + ], + argsAfter: [ + { + __Buffer__: + "d63eff8a39cd34de02d1273cfa744e40a6932421e8f2ec599e63f0d1ac07e76c65a3b54b76de1d95c28517ba7ec1dbf1f62701927eecca55cfbd77795ccf6f02" + }, + 0, + null + ], + err: "Expected message to be an Uint8Array" + }, + { + args: [ + { + __Buffer__: + "b47ef41e71989f22bbc461b2cd52a9ea5df339da6a29adf8bea14cdc49a87cc8396759fb6f00d62842211b5a895238ddfabce7b478b7d663164b121c6358b5d5" + }, + 0, + { + __Buffer__: + "bbf04a4b9646981205d8fc40086a6108f01a714e70d3b076c9dccced3bd35b" + } + ], + argsAfter: [ + { + __Buffer__: + "b47ef41e71989f22bbc461b2cd52a9ea5df339da6a29adf8bea14cdc49a87cc8396759fb6f00d62842211b5a895238ddfabce7b478b7d663164b121c6358b5d5" + }, + 0, + { + __Buffer__: + "bbf04a4b9646981205d8fc40086a6108f01a714e70d3b076c9dccced3bd35b" + } + ], + err: "Expected message to be an Uint8Array with length 32" + }, + { + args: [ + { + __Buffer__: + "1af87ae2721d3bdcaec96a9a21eba549a2aee7846532886704e87487e4a4d38d33f921aa5430bb0c6a1ac3f8959fe443d6554c10e5664536f78536329d518e74" + }, + 0, + { + __Buffer__: + "28a34fd7dd2c895b1c5f0ee38ba10c87ffc93ed6c08e7887712035c1af1b0a6b" + }, + null + ], + argsAfter: [ + { + __Buffer__: + "1af87ae2721d3bdcaec96a9a21eba549a2aee7846532886704e87487e4a4d38d33f921aa5430bb0c6a1ac3f8959fe443d6554c10e5664536f78536329d518e74" + }, + 0, + { + __Buffer__: + "28a34fd7dd2c895b1c5f0ee38ba10c87ffc93ed6c08e7887712035c1af1b0a6b" + }, + null + ], + err: "Expected compressed to be a Boolean" + }, + { + args: [ + { + __Buffer__: + "328b6dc618ddc8a9c64f2fba8961f44ee6661e25e816906624920a58c3c319f67fa31cce745592102f204e5ccce9de2d4477b0ae2d4abe2054c17f64fb0be511" + }, + 0, + { + __Buffer__: + "e2b785eefd015cd4522e874d02617d2556f58092648d1fbfac48a99c6f03c4f0" + }, + true, + null + ], + argsAfter: [ + { + __Buffer__: + "328b6dc618ddc8a9c64f2fba8961f44ee6661e25e816906624920a58c3c319f67fa31cce745592102f204e5ccce9de2d4477b0ae2d4abe2054c17f64fb0be511" + }, + 0, + { + __Buffer__: + "e2b785eefd015cd4522e874d02617d2556f58092648d1fbfac48a99c6f03c4f0" + }, + true, + null + ], + err: "Expected output to be an Uint8Array" + }, + { + args: [ + { + __Buffer__: + "328b6dc618ddc8a9c64f2fba8961f44ee6661e25e816906624920a58c3c319f67fa31cce745592102f204e5ccce9de2d4477b0ae2d4abe2054c17f64fb0be511" + }, + 0, + { + __Buffer__: + "e2b785eefd015cd4522e874d02617d2556f58092648d1fbfac48a99c6f03c4f0" + }, + true, + { + __Bytes__: + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + } + ], + argsAfter: [ + { + __Buffer__: + "328b6dc618ddc8a9c64f2fba8961f44ee6661e25e816906624920a58c3c319f67fa31cce745592102f204e5ccce9de2d4477b0ae2d4abe2054c17f64fb0be511" + }, + 0, + { + __Buffer__: + "e2b785eefd015cd4522e874d02617d2556f58092648d1fbfac48a99c6f03c4f0" + }, + true, + { + __Bytes__: + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + } + ], + err: "Expected output to be an Uint8Array with length 33" + }, + { + args: [ + { + __Buffer__: + "328b6dc618ddc8a9c64f2fba8961f44ee6661e25e816906624920a58c3c319f67fa31cce745592102f204e5ccce9de2d4477b0ae2d4abe2054c17f64fb0be511" + }, + 0, + { + __Buffer__: + "e2b785eefd015cd4522e874d02617d2556f58092648d1fbfac48a99c6f03c4f0" + }, + false, + { + __Bytes__: + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + } + ], + argsAfter: [ + { + __Buffer__: + "328b6dc618ddc8a9c64f2fba8961f44ee6661e25e816906624920a58c3c319f67fa31cce745592102f204e5ccce9de2d4477b0ae2d4abe2054c17f64fb0be511" + }, + 0, + { + __Buffer__: + "e2b785eefd015cd4522e874d02617d2556f58092648d1fbfac48a99c6f03c4f0" + }, + false, + { + __Bytes__: + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + } + ], + err: "Expected output to be an Uint8Array with length 65" + }, + { + args: [ + { + __Buffer__: + "000000000000000000000000000000000000000000000000000000000000000002fa1ef60abcf7526c04e40622751220fe1ac5a73e7d7003e89cd32dec1826da" + }, + 0, + { + __Buffer__: + "0c25c29a20e27d0aa9f4aa20871272c7e8e3572f9b9ec3e44f3266dedb95aacf" + } + ], + argsAfter: [ + { + __Buffer__: + "000000000000000000000000000000000000000000000000000000000000000002fa1ef60abcf7526c04e40622751220fe1ac5a73e7d7003e89cd32dec1826da" + }, + 0, + { + __Buffer__: + "0c25c29a20e27d0aa9f4aa20871272c7e8e3572f9b9ec3e44f3266dedb95aacf" + } + ], + err: "Public key could not be recover" + }, + { + args: [ + { + __Buffer__: + "a95566939af2256529d485455695b1c4928134119bd0af1ad7bef76f434948be0000000000000000000000000000000000000000000000000000000000000000" + }, + 0, + { + __Buffer__: + "0c25c29a20e27d0aa9f4aa20871272c7e8e3572f9b9ec3e44f3266dedb95aacf" + } + ], + argsAfter: [ + { + __Buffer__: + "a95566939af2256529d485455695b1c4928134119bd0af1ad7bef76f434948be0000000000000000000000000000000000000000000000000000000000000000" + }, + 0, + { + __Buffer__: + "0c25c29a20e27d0aa9f4aa20871272c7e8e3572f9b9ec3e44f3266dedb95aacf" + } + ], + err: "Public key could not be recover" + }, + { + args: [ + { + __Buffer__: + "a95566939af2256529d485455695b1c4928134119bd0af1ad7bef76f434948be02fa1ef60abcf7526c04e40622751220fe1ac5a73e7d7003e89cd32dec1826da" + }, + 2, + { + __Buffer__: + "0c25c29a20e27d0aa9f4aa20871272c7e8e3572f9b9ec3e44f3266dedb95aacf" + } + ], + argsAfter: [ + { + __Buffer__: + "a95566939af2256529d485455695b1c4928134119bd0af1ad7bef76f434948be02fa1ef60abcf7526c04e40622751220fe1ac5a73e7d7003e89cd32dec1826da" + }, + 2, + { + __Buffer__: + "0c25c29a20e27d0aa9f4aa20871272c7e8e3572f9b9ec3e44f3266dedb95aacf" + } + ], + err: "Public key could not be recover" + } + ], + "secp256k1.ecdh": [ + { + args: [ + null, + { + __Buffer__: + "410bc90bf69785b2cf5c8bdcb40e090c08cc338c10341fb52bad9343e0a5fbf4" + } + ], + argsAfter: [ + null, + { + __Buffer__: + "410bc90bf69785b2cf5c8bdcb40e090c08cc338c10341fb52bad9343e0a5fbf4" + } + ], + err: "Expected public key to be an Uint8Array" + }, + { + args: [ + { + __Buffer__: + "4f22baa61b26a069a3c0d89250609d429f8c1b25474cde8ef5fd6621206e5553" + }, + { + __Buffer__: + "a8e988bda37c86e9db4be12ceab3a745137906ca657cb8eb90c3a8b2acdb298d" + } + ], + argsAfter: [ + { + __Buffer__: + "4f22baa61b26a069a3c0d89250609d429f8c1b25474cde8ef5fd6621206e5553" + }, + { + __Buffer__: + "a8e988bda37c86e9db4be12ceab3a745137906ca657cb8eb90c3a8b2acdb298d" + } + ], + err: "Expected public key to be an Uint8Array with length [33, 65]" + }, + { + args: [ + { + __Buffer__: + "011f757495457eaab6502cde46af2206fe6268c3421fabde49e89f80ba6cdf6783" + }, + { + __Buffer__: + "168d45231ac44d6fff58055b37422cf6567e7358fe759629f87fe2b114b3631e" + } + ], + argsAfter: [ + { + __Buffer__: + "011f757495457eaab6502cde46af2206fe6268c3421fabde49e89f80ba6cdf6783" + }, + { + __Buffer__: + "168d45231ac44d6fff58055b37422cf6567e7358fe759629f87fe2b114b3631e" + } + ], + err: "Public Key could not be parsed" + }, + { + args: [ + { + __Buffer__: + "02445bfe6e12511703ff6550a5e227da8cf04a2601ba287da35870d3191c58d828" + }, + null + ], + argsAfter: [ + { + __Buffer__: + "02445bfe6e12511703ff6550a5e227da8cf04a2601ba287da35870d3191c58d828" + }, + null + ], + err: "Expected private key to be an Uint8Array" + }, + { + args: [ + { + __Buffer__: + "0242eed9610510cd2f23478184e473b92ae11f4f2c5fdb6939d4a62d8c1daa41fa" + }, + { + __Buffer__: + "efebbc998490f22b887e8063ab9d31344acfa26ee06e7f480cb15ba98eae41" + } + ], + argsAfter: [ + { + __Buffer__: + "0242eed9610510cd2f23478184e473b92ae11f4f2c5fdb6939d4a62d8c1daa41fa" + }, + { + __Buffer__: + "efebbc998490f22b887e8063ab9d31344acfa26ee06e7f480cb15ba98eae41" + } + ], + err: "Expected private key to be an Uint8Array with length 32" + }, + { + args: [ + { + __Buffer__: + "03b80dde5bbca37a93a8e3ad49b3ad8eedf73e11083cedfbbcbceb7e9139b3f845" + }, + { + __Buffer__: + "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141" + } + ], + argsAfter: [ + { + __Buffer__: + "03b80dde5bbca37a93a8e3ad49b3ad8eedf73e11083cedfbbcbceb7e9139b3f845" + }, + { + __Buffer__: + "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141" + } + ], + err: "Scalar was invalid (zero or overflow)" + }, + { + args: [ + { + __Buffer__: + "02a43f7de2291ad47927a1ac333e384503a0bd0a00716454b4527e028089b982c6" + }, + { + __Buffer__: + "0000000000000000000000000000000000000000000000000000000000000000" + } + ], + argsAfter: [ + { + __Buffer__: + "02a43f7de2291ad47927a1ac333e384503a0bd0a00716454b4527e028089b982c6" + }, + { + __Buffer__: + "0000000000000000000000000000000000000000000000000000000000000000" + } + ], + err: "Scalar was invalid (zero or overflow)" + }, + { + args: [ + { + __Buffer__: + "02a2acb97f34863f398de47381e423cc032f2970bab355fcab15f4988fe50972e4" + }, + { + __Buffer__: + "ecabc098a4956e30ac97ac6faf4adc408b7db217976cafcfb61194dc937e0299" + }, + null + ], + argsAfter: [ + { + __Buffer__: + "02a2acb97f34863f398de47381e423cc032f2970bab355fcab15f4988fe50972e4" + }, + { + __Buffer__: + "ecabc098a4956e30ac97ac6faf4adc408b7db217976cafcfb61194dc937e0299" + }, + null + ], + err: "Expected options to be an Object" + }, + { + args: [ + { + __Buffer__: + "02a2acb97f34863f398de47381e423cc032f2970bab355fcab15f4988fe50972e4" + }, + { + __Buffer__: + "ecabc098a4956e30ac97ac6faf4adc408b7db217976cafcfb61194dc937e0299" + }, + 42 + ], + argsAfter: [ + { + __Buffer__: + "02a2acb97f34863f398de47381e423cc032f2970bab355fcab15f4988fe50972e4" + }, + { + __Buffer__: + "ecabc098a4956e30ac97ac6faf4adc408b7db217976cafcfb61194dc937e0299" + }, + 42 + ], + err: "Expected options to be an Object" + }, + { + args: [ + { + __Buffer__: + "02a2acb97f34863f398de47381e423cc032f2970bab355fcab15f4988fe50972e4" + }, + { + __Buffer__: + "ecabc098a4956e30ac97ac6faf4adc408b7db217976cafcfb61194dc937e0299" + }, + { data: null } + ], + argsAfter: [ + { + __Buffer__: + "02a2acb97f34863f398de47381e423cc032f2970bab355fcab15f4988fe50972e4" + }, + { + __Buffer__: + "ecabc098a4956e30ac97ac6faf4adc408b7db217976cafcfb61194dc937e0299" + }, + { data: null } + ], + err: "Expected options.data to be an Uint8Array" + }, + { + args: [ + { + __Buffer__: + "02a2acb97f34863f398de47381e423cc032f2970bab355fcab15f4988fe50972e4" + }, + { + __Buffer__: + "ecabc098a4956e30ac97ac6faf4adc408b7db217976cafcfb61194dc937e0299" + }, + { hashfn: null } + ], + argsAfter: [ + { + __Buffer__: + "02a2acb97f34863f398de47381e423cc032f2970bab355fcab15f4988fe50972e4" + }, + { + __Buffer__: + "ecabc098a4956e30ac97ac6faf4adc408b7db217976cafcfb61194dc937e0299" + }, + { hashfn: null } + ], + err: "Expected options.hashfn to be a Function" + }, + { + args: [ + { + __Buffer__: + "039fb399291f00d8671d861bbc458d0ce60dc8f7b2c7a16d669c265ce8d2d6c0fc" + }, + { + __Buffer__: + "3e6b6559a96dc2909a036223d9d185fee6c49faf468fc33e26d410df7725de85" + }, + {}, + null + ], + argsAfter: [ + { + __Buffer__: + "039fb399291f00d8671d861bbc458d0ce60dc8f7b2c7a16d669c265ce8d2d6c0fc" + }, + { + __Buffer__: + "3e6b6559a96dc2909a036223d9d185fee6c49faf468fc33e26d410df7725de85" + }, + {}, + null + ], + err: "Expected output to be an Uint8Array" + }, + { + args: [ + { + __Buffer__: + "039fb399291f00d8671d861bbc458d0ce60dc8f7b2c7a16d669c265ce8d2d6c0fc" + }, + { + __Buffer__: + "3e6b6559a96dc2909a036223d9d185fee6c49faf468fc33e26d410df7725de85" + }, + {}, + { + __Bytes__: + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + } + ], + argsAfter: [ + { + __Buffer__: + "039fb399291f00d8671d861bbc458d0ce60dc8f7b2c7a16d669c265ce8d2d6c0fc" + }, + { + __Buffer__: + "3e6b6559a96dc2909a036223d9d185fee6c49faf468fc33e26d410df7725de85" + }, + {}, + { + __Bytes__: + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + } + ], + err: "Expected output to be an Uint8Array with length 32" + }, + { + args: [ + { + __Buffer__: + "02601dde92f4bbeac34692a042719439573b9a411f96717274819fcff417ad4d75" + }, + { + __Buffer__: + "4da23f448c132e31b7343eb3a5840799c533bffc806a8593e82cd2c64bfe5aec" + } + ], + argsAfter: [ + { + __Buffer__: + "02601dde92f4bbeac34692a042719439573b9a411f96717274819fcff417ad4d75" + }, + { + __Buffer__: + "4da23f448c132e31b7343eb3a5840799c533bffc806a8593e82cd2c64bfe5aec" + } + ], + res: { + __Bytes__: + "950d2d36b0e2226822370d54990aba72a2a09831a14426e218262a5d8d741338" + } + }, + { + args: [ + { + __Buffer__: + "032321eebb4cfd3b1e8006345b51a83b9885a9bd4194119f3730ffd73e0c589faf" + }, + { + __Buffer__: + "9ff0664c75c5be1f47a55acc0353a99e71eff4c2abce116de0489533b510e150" + } + ], + argsAfter: [ + { + __Buffer__: + "032321eebb4cfd3b1e8006345b51a83b9885a9bd4194119f3730ffd73e0c589faf" + }, + { + __Buffer__: + "9ff0664c75c5be1f47a55acc0353a99e71eff4c2abce116de0489533b510e150" + } + ], + res: { + __Bytes__: + "950d2d36b0e2226822370d54990aba72a2a09831a14426e218262a5d8d741338" + } + } + ] +}; diff --git a/test/test-vectors/sha256.ts b/test/test-vectors/sha256.ts index ec03362..05c1bad 100644 --- a/test/test-vectors/sha256.ts +++ b/test/test-vectors/sha256.ts @@ -1,36 +1,34 @@ -import { assert } from "chai"; +import { sha256 } from "../../src/sha256"; +import { toHex, utf8ToBytes } from "../../src/utils"; +import { deepStrictEqual } from "./assert"; const TEST_VECTORS = [ { - input: Buffer.from("", "ascii"), + input: utf8ToBytes(""), output: "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" }, { - input: Buffer.from("abc", "ascii"), + input: utf8ToBytes("abc"), output: "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad" }, { - input: Buffer.from( - "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", - "ascii" + input: utf8ToBytes( + "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" ), output: "248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1" }, { - input: Buffer.from( - "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", - "ascii" + input: utf8ToBytes( + "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" ), output: "248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1" } ]; -export function createTests(hash: (msg: Buffer) => Buffer) { - describe("sha256", function() { - for (const [i, vector] of TEST_VECTORS.entries()) { - it(`Should return the right hash for the test ${i}`, async function() { - assert.equal(hash(vector.input).toString("hex"), vector.output); - }); - } - }); -} +describe("sha256", function() { + for (const [i, vector] of TEST_VECTORS.entries()) { + it(`Should return the right hash for the test ${i}`, async function() { + deepStrictEqual(toHex(sha256(vector.input)), vector.output); + }); + } +}); diff --git a/tsconfig.json b/tsconfig.json index d9da0c9..4f7b18e 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,15 +1,22 @@ { "compilerOptions": { - "target": "es5", + "target": "es2020", "module": "commonjs", "strict": true, "esModuleInterop": true, "downlevelIteration": true, - "rootDirs": ["./src", "./test"], + "rootDirs": [ + "./src", + "./test" + ], "outDir": "./test-builds/tsc", "sourceMap": true, + "noUnusedLocals": true, "declaration": true, "declarationMap": true }, - "include": ["src/**/*.ts", "test/**/*.ts"] -} + "include": [ + "src/**/*.ts", + "test/**/*.ts" + ] +} \ No newline at end of file diff --git a/tsconfig.prod.json b/tsconfig.prod.json index 2f6fc3a..bc41799 100644 --- a/tsconfig.prod.json +++ b/tsconfig.prod.json @@ -1,6 +1,6 @@ { "compilerOptions": { - "target": "es5", + "target": "es2020", "module": "commonjs", "strict": true, "esModuleInterop": true, @@ -10,6 +10,8 @@ "declaration": true, "declarationMap": true }, - "include": ["src/**/*.ts"], + "include": [ + "src/**/*.ts" + ], "exclude": [] -} +} \ No newline at end of file diff --git a/tslint.json b/tslint.json index 1437349..852db4a 100644 --- a/tslint.json +++ b/tslint.json @@ -8,9 +8,15 @@ "prettier": true, "no-submodule-imports": false, "only-arrow-functions": false, - "no-implicit-dependencies": [true, ["chai"]], + "no-implicit-dependencies": [ + true, + [ + "chai" + ] + ], "no-var-requires": false, "object-literal-sort-keys": false, - "interface-name": false + "interface-name": false, + "no-bitwise": false } -} +} \ No newline at end of file From d9a05c9cb2f37a4eed10f2e8ff5fc4506c76629f Mon Sep 17 00:00:00 2001 From: Paul Miller Date: Thu, 14 Oct 2021 05:23:41 +0300 Subject: [PATCH 006/219] Update noble-hashes --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 3fa06b2..7d4c341 100644 --- a/package.json +++ b/package.json @@ -90,7 +90,7 @@ "webpack-cli": "^3.3.8" }, "dependencies": { - "noble-hashes": "^0.1.1", + "noble-hashes": "^0.2.0", "micro-base": "^0.1.1", "noble-secp256k1": "^1.2.10" }, From a3834885a56ded18fb52eecaf35763a7dac1d79e Mon Sep 17 00:00:00 2001 From: Paul Miller Date: Fri, 15 Oct 2021 03:35:07 +0300 Subject: [PATCH 007/219] Fix micro-base and hashes --- package.json | 12 ++++++------ src/bip39/index.ts | 2 +- src/hdkey.ts | 10 +++++----- src/utils.ts | 2 +- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/package.json b/package.json index 7d4c341..d535c83 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ethereum-cryptography", - "version": "1.0.0", + "version": "0.2.0", "description": "All the cryptographic primitives used in Ethereum", "contributors": [ { @@ -45,6 +45,11 @@ "*.d.ts", "*.d.ts.map" ], + "dependencies": { + "noble-hashes": "^0.2.0", + "micro-base": "^0.9.0", + "noble-secp256k1": "^1.2.10" + }, "sideEffects": false, "scripts": { "prepare": "npm run build", @@ -89,11 +94,6 @@ "webpack": "^4.39.3", "webpack-cli": "^3.3.8" }, - "dependencies": { - "noble-hashes": "^0.2.0", - "micro-base": "^0.1.1", - "noble-secp256k1": "^1.2.10" - }, "targets": { "parcel_tests": { "context": "browser" diff --git a/src/bip39/index.ts b/src/bip39/index.ts index 424830d..a3e8522 100644 --- a/src/bip39/index.ts +++ b/src/bip39/index.ts @@ -1,4 +1,4 @@ -import * as baseUtils from "micro-base/lib/utils"; +import { utils as baseUtils } from "micro-base"; import { pbkdf2, pbkdf2Async } from "noble-hashes/lib/pbkdf2"; import { sha256 } from "noble-hashes/lib/sha256"; import { sha512 } from "noble-hashes/lib/sha512"; diff --git a/src/hdkey.ts b/src/hdkey.ts index 65cc58d..c6a20b1 100644 --- a/src/hdkey.ts +++ b/src/hdkey.ts @@ -1,4 +1,4 @@ -import { base58check as _base58check } from "micro-base/lib/base58"; +import { base58check } from "micro-base"; import { hmac } from "noble-hashes/lib/hmac"; import { ripemd160 } from "noble-hashes/lib/ripemd160"; import { sha256 } from "noble-hashes/lib/sha256"; @@ -6,7 +6,7 @@ import { sha512 } from "noble-hashes/lib/sha512"; import * as random from "./random"; import * as secp256k1 from "./secp256k1"; import { assertBytes, concatBytes, createView, utf8ToBytes } from "./utils"; -const base58 = _base58check(sha256); +const base58c = base58check(sha256); const MASTER_SECRET = utf8ToBytes("Bitcoin seed"); // Bitcoin hardcoded by default @@ -37,7 +37,7 @@ export class HDKey { public static fromExtendedKey(base58key: string, versions?: Versions): HDKey { // => version(4) || depth(1) || fingerprint(4) || index(4) || chain(32) || key(33) const hdkey = new HDKey(versions); - const keyBuffer: Uint8Array = base58.decode(base58key); + const keyBuffer: Uint8Array = base58c.decode(base58key); const keyView = createView(keyBuffer); const version = keyView.getUint32(0, false); hdkey.depth = keyBuffer[4]; @@ -112,7 +112,7 @@ export class HDKey { if (!this.privKey) { throw new Error("No private key"); } - return base58.encode( + return base58c.encode( this.serialize( this.versions.private, concatBytes(new Uint8Array([0]), this.privKey) @@ -123,7 +123,7 @@ export class HDKey { if (!this.pubKey) { throw new Error("No public key"); } - return base58.encode(this.serialize(this.versions.public, this.pubKey)); + return base58c.encode(this.serialize(this.versions.public, this.pubKey)); } public derive(path: string): HDKey { diff --git a/src/utils.ts b/src/utils.ts index 27cf5a7..20dfb9a 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -1,5 +1,5 @@ // buf.toString('hex') -> toHex(buf) -export { toHex, createView } from "noble-hashes/lib/utils"; +export { bytesToHex as toHex, createView } from "noble-hashes/lib/utils"; // Buffer.from(hex, 'hex') -> hexToBytes(hex) export function hexToBytes(hex: string): Uint8Array { if (typeof hex !== "string") { From 45f93563b4885c06d9e3bb22d65c81b145e1d765 Mon Sep 17 00:00:00 2001 From: Paul Miller Date: Fri, 15 Oct 2021 03:54:31 +0300 Subject: [PATCH 008/219] Fix tslint --- src/aes.ts | 7 +++---- src/bip39/index.ts | 13 +++++++++---- test/test-vectors/hdkey.ts | 2 +- test/test-vectors/secp256k1.ts | 2 +- 4 files changed, 14 insertions(+), 10 deletions(-) diff --git a/src/aes.ts b/src/aes.ts index 2ef4689..0b01dee 100644 --- a/src/aes.ts +++ b/src/aes.ts @@ -1,14 +1,13 @@ -import { concatBytes, equalsBytes, crypto } from "./utils"; +import { concatBytes, crypto, equalsBytes } from "./utils"; function validateOpt(key: Uint8Array, iv: Uint8Array, mode: string) { if (!mode.startsWith("aes-")) { throw new Error(`AES submodule doesn't support mode ${mode}`); } - if (iv.length !== 16) { + if (iv.length !== 16) throw new Error("AES: wrong IV length"); - } if ( - (mode.startsWith("aes-128") && key.length != 16) || + (mode.startsWith("aes-128") && key.length !== 16) || (mode.startsWith("aes-256") && key.length !== 32) ) { throw new Error("AES: wrong key length"); diff --git a/src/bip39/index.ts b/src/bip39/index.ts index a3e8522..0a959fe 100644 --- a/src/bip39/index.ts +++ b/src/bip39/index.ts @@ -9,6 +9,11 @@ import { assertBytes } from "../utils"; const isJapanese = (wordlist: string[]) => wordlist[0] === "\u3042\u3044\u3053\u304f\u3057\u3093"; // Japanese wordlist +// Normalization replaces equivalent sequences of characters +// so that any two texts that are equivalent will be reduced +// to the same sequence of code points, called the normal form of the original text. +const nfkd = (str: string) => str.normalize("NFKD"); + function assertMnemonic(mnemonic: string) { if (typeof mnemonic !== "string") { throw new TypeError(`Invalid mnemonic type: ${typeof mnemonic}`); @@ -54,7 +59,7 @@ export function mnemonicToEntropy( wordlist: string[] ): Uint8Array { assertMnemonic(mnemonic); - const words = mnemonic.normalize("NFKD").split(" "); + const words = nfkd(mnemonic).split(" "); if (![12, 15, 18, 21, 24].includes(words.length)) { throw new Error("Invalid mnemonic"); } @@ -84,11 +89,11 @@ export function validateMnemonic( return true; } -const salt = (passphrase = "") => `mnemonic${passphrase}`.normalize("NFKD"); +const salt = (passphrase = "") => nfkd(`mnemonic${passphrase}`); export function mnemonicToSeed(mnemonic: string, passphrase = "") { assertMnemonic(mnemonic); - return pbkdf2Async(sha512, mnemonic.normalize("NFKD"), salt(passphrase), { + return pbkdf2Async(sha512, nfkd(mnemonic), salt(passphrase), { c: 2048, dkLen: 64 }); @@ -96,7 +101,7 @@ export function mnemonicToSeed(mnemonic: string, passphrase = "") { export function mnemonicToSeedSync(mnemonic: string, passphrase = "") { assertMnemonic(mnemonic); - return pbkdf2(sha512, mnemonic.normalize("NFKD"), salt(passphrase), { + return pbkdf2(sha512, nfkd(mnemonic), salt(passphrase), { c: 2048, dkLen: 64 }); diff --git a/test/test-vectors/hdkey.ts b/test/test-vectors/hdkey.ts index 53134e8..f17247f 100644 --- a/test/test-vectors/hdkey.ts +++ b/test/test-vectors/hdkey.ts @@ -133,7 +133,7 @@ describe("hdkey", () => { // Ported from https://github.com/cryptocoinjs/hdkey/blob/42637e381bdef0c8f785b14f5b66a80dad969514/test/hdkey.test.js describe("+ fromMasterSeed", () => { - for (let f of fixtures) { + for (const f of fixtures) { it("should properly derive the chain path: " + f.path, () => { const hdkey = HDKey.fromMasterSeed(hexToBytes(f.seed)); const childkey = hdkey.derive(f.path); diff --git a/test/test-vectors/secp256k1.ts b/test/test-vectors/secp256k1.ts index 05c157f..a717333 100644 --- a/test/test-vectors/secp256k1.ts +++ b/test/test-vectors/secp256k1.ts @@ -215,7 +215,7 @@ describe("secp256k1", function() { vectors: Record, library: Record ) => { - for (let k of Object.keys(vectors)) { + for (const k of Object.keys(vectors)) { const path = k.split("."); let cur = library; for (const i of path) { From 18039029832a14cb53831ac297f58c5c7edc95f1 Mon Sep 17 00:00:00 2001 From: Paul Miller Date: Fri, 15 Oct 2021 05:00:34 +0300 Subject: [PATCH 009/219] Small refactor of secp256k1 wrapper --- src/aes.ts | 3 ++- src/secp256k1.ts | 14 +++++--------- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/src/aes.ts b/src/aes.ts index 0b01dee..c3efdac 100644 --- a/src/aes.ts +++ b/src/aes.ts @@ -4,8 +4,9 @@ function validateOpt(key: Uint8Array, iv: Uint8Array, mode: string) { if (!mode.startsWith("aes-")) { throw new Error(`AES submodule doesn't support mode ${mode}`); } - if (iv.length !== 16) + if (iv.length !== 16) { throw new Error("AES: wrong IV length"); + } if ( (mode.startsWith("aes-128") && key.length !== 16) || (mode.startsWith("aes-256") && key.length !== 32) diff --git a/src/secp256k1.ts b/src/secp256k1.ts index 738d995..8fb5804 100644 --- a/src/secp256k1.ts +++ b/src/secp256k1.ts @@ -11,7 +11,7 @@ import { // Enable sync API for noble-secp256k1 secp.utils.hmacSha256 = ((key: Uint8Array, ...messages: Uint8Array[]) => { - const h = hmac.init(sha256, key); + const h = hmac.create(sha256, key); for (const msg of messages) { h.update(msg); } @@ -223,12 +223,10 @@ export function publicKeyCombine( assertBytes(publicKey, 33, 65); } assertBool(compressed); - let point = secp.Point.fromHex(publicKeys[0]); - for (let i = 1; i < publicKeys.length; i++) { - point = point.add(secp.Point.fromHex(publicKeys[i])); - } - point.assertValidity(); - return output(out, compressed ? 33 : 65, point.toRawBytes(compressed)); + const combined = publicKeys + .map(pub => secp.Point.fromHex(pub)) + .reduce((res, curr) => res.add(curr), secp.Point.ZERO); + return output(out, compressed ? 33 : 65, combined.toRawBytes(compressed)); } export function publicKeyTweakAdd( @@ -243,7 +241,6 @@ export function publicKeyTweakAdd( const p1 = secp.Point.fromHex(publicKey); const p2 = secp.Point.fromPrivateKey(tweak); const point = p1.add(p2); - point.assertValidity(); return output(out, compressed ? 33 : 65, point.toRawBytes(compressed)); } @@ -261,7 +258,6 @@ export function publicKeyTweakMul( throw new Error("Tweak is zero or bigger than curve order"); } const point = secp.Point.fromHex(publicKey).multiply(bn); - point.assertValidity(); return output(out, compressed ? 33 : 65, point.toRawBytes(compressed)); } From 7e618b67c20df75a4f562f6e6619a15e620c7ab5 Mon Sep 17 00:00:00 2001 From: Paul Miller Date: Fri, 15 Oct 2021 08:42:09 +0300 Subject: [PATCH 010/219] Switch hdkey to noble-secp instead of secp-wrapper --- package.json | 2 +- src/hdkey.ts | 110 +++++++++++++++++++++++++++---------- src/secp256k1.ts | 54 +++++++++--------- test/test-vectors/hdkey.ts | 2 +- 4 files changed, 109 insertions(+), 59 deletions(-) diff --git a/package.json b/package.json index d535c83..c5363c5 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,7 @@ "dependencies": { "noble-hashes": "^0.2.0", "micro-base": "^0.9.0", - "noble-secp256k1": "^1.2.10" + "noble-secp256k1": "^1.2.13" }, "sideEffects": false, "scripts": { diff --git a/src/hdkey.ts b/src/hdkey.ts index c6a20b1..424dfa8 100644 --- a/src/hdkey.ts +++ b/src/hdkey.ts @@ -3,11 +3,34 @@ import { hmac } from "noble-hashes/lib/hmac"; import { ripemd160 } from "noble-hashes/lib/ripemd160"; import { sha256 } from "noble-hashes/lib/sha256"; import { sha512 } from "noble-hashes/lib/sha512"; -import * as random from "./random"; -import * as secp256k1 from "./secp256k1"; -import { assertBytes, concatBytes, createView, utf8ToBytes } from "./utils"; +import { bytesToHex } from "noble-hashes/lib/utils"; +import * as secp from "noble-secp256k1"; +import { + assertBytes, + concatBytes, + createView, + hexToBytes, + utf8ToBytes +} from "./utils"; const base58c = base58check(sha256); +// Enable sync API for noble-secp256k1 +secp.utils.hmacSha256Sync = (key: Uint8Array, ...msgs: Uint8Array[]) => { + const h = hmac.create(sha256, key); + for (const msg of msgs) { + h.update(msg); + } + return h.digest(); +}; + +function bytesToNumber(bytes: Uint8Array): bigint { + return BigInt(`0x${bytesToHex(bytes)}`); +} + +function numberToBytes(num: bigint): Uint8Array { + return hexToBytes(num.toString(16).padStart(64, "0")); +} + const MASTER_SECRET = utf8ToBytes("Bitcoin seed"); // Bitcoin hardcoded by default const BITCOIN_VERSIONS: Versions = { private: 0x0488ade4, public: 0x0488b21e }; @@ -66,7 +89,8 @@ export class HDKey { public index: number = 0; public chainCode: Uint8Array | null = null; public parentFingerprint: number = 0; - private privKey?: Uint8Array; + private privKey?: bigint; + private privKeyBytes?: Uint8Array; private pubKey?: Uint8Array; private pubHash: Uint8Array | undefined; @@ -86,36 +110,45 @@ export class HDKey { return this.pubHash; } get privateKey(): Uint8Array | null { - return this.privKey || null; + return this.privKeyBytes || null; } - set privateKey(value: Uint8Array | null) { - if (!value || !secp256k1.privateKeyVerify(value)) { + set privateKey(value: Uint8Array | bigint | null) { + if (value == null) { + this.wipePrivateData(); + return; + } + if (!secp.utils.isValidPrivateKey(value)) { throw new Error("Invalid private key"); } - this.privKey = value; - this.pubKey = secp256k1.publicKeyCreate(value, true); + this.privKey = typeof value === "bigint" ? value : bytesToNumber(value); + this.privKeyBytes = numberToBytes(this.privKey); + this.pubKey = secp.getPublicKey(value, true); this.pubHash = hash160(this.pubKey); } get publicKey(): Uint8Array | null { return this.pubKey || null; } set publicKey(value: Uint8Array | null) { - if (!value || !secp256k1.publicKeyVerify(value)) { + let hex; + try { + hex = secp.Point.fromHex(value!); + } catch (error) { throw new Error("Invalid public key"); } - this.pubKey = secp256k1.publicKeyConvert(value, true); // force compressed point + this.pubKey = hex.toRawBytes(true); // force compressed point this.pubHash = hash160(this.pubKey); this.privKey = undefined; } get privateExtendedKey(): string { - if (!this.privKey) { + const priv = this.privateKey; + if (!priv) { throw new Error("No private key"); } return base58c.encode( this.serialize( this.versions.private, - concatBytes(new Uint8Array([0]), this.privKey) + concatBytes(new Uint8Array([0]), priv) ) ); } @@ -166,35 +199,45 @@ export class HDKey { createView(data).setUint32(0, index, false); if (index >= HDKey.HARDENED_OFFSET) { // Hardened - if (!this.privKey) { + const priv = this.privateKey; + if (!priv) { throw new Error("Could not derive hardened child key"); } // Hardened child: 0x00 || ser256(kpar) || ser32(index) - data = concatBytes(new Uint8Array([0]), this.privKey, data); + data = concatBytes(new Uint8Array([0]), priv, data); } else { // Normal child: serP(point(kpar)) || ser32(index) data = concatBytes(this.pubKey, data); } const I = hmac(sha512, this.chainCode, data); + const childTweak = bytesToNumber(I.slice(0, 32)); + const chainCode = I.slice(32); + if (childTweak > secp.CURVE.n) { + throw new Error("Tweak bigger than curve order"); + } const child = new HDKey(this.versions); try { // Private parent key -> private child key if (this.privateKey) { - child.privateKey = secp256k1.privateKeyTweakAdd( - this.privateKey.slice(), - I.slice(0, 32) - ); + let added = this.privKey! + childTweak; + if (added >= secp.CURVE.n) { + added -= secp.CURVE.n; + } + if (added === 0n) { + throw new Error( + "The tweak was out of range or the resulted private key is invalid" + ); + } + child.privateKey = added; } else { - child.publicKey = secp256k1.publicKeyTweakAdd( - this.pubKey.slice(), - I.slice(0, 32), - true - ); + child.publicKey = secp.Point.fromHex(this.pubKey) + .add(secp.Point.fromPrivateKey(childTweak)) + .toRawBytes(true); } } catch (err) { return this.deriveChild(index + 1); } - child.chainCode = I.slice(32); + child.chainCode = chainCode; child.depth = this.depth + 1; child.parentFingerprint = this.fingerprint; child.index = index; @@ -204,17 +247,28 @@ export class HDKey { if (!this.privateKey) { throw new Error("No privateKey set!"); } - return secp256k1.ecdsaSign(hash, this.privateKey).signature; + assertBytes(hash, 32); + return secp.signSync(hash, this.privKey!, { canonical: true, der: false }); } public verify(hash: Uint8Array, signature: Uint8Array): boolean { + assertBytes(hash, 32); + assertBytes(signature, 64); if (!this.publicKey) { throw new Error("No publicKey set!"); } - return secp256k1.ecdsaVerify(signature, hash, this.publicKey!); + let sig; + try { + sig = secp.Signature.fromCompact(signature); + } catch (error) { + return false; + } + return secp.verify(sig, hash, this.publicKey); } public wipePrivateData(): this { if (this.privKey) { - this.privKey.set(random.getRandomBytesSync(this.privKey.length)); + this.privKey = undefined; + this.privKeyBytes!.fill(0); + this.privKeyBytes = undefined; } this.privKey = undefined; return this; diff --git a/src/secp256k1.ts b/src/secp256k1.ts index 8fb5804..83b5e47 100644 --- a/src/secp256k1.ts +++ b/src/secp256k1.ts @@ -1,22 +1,14 @@ import { hmac } from "noble-hashes/lib/hmac"; import { sha256 } from "noble-hashes/lib/sha256"; import * as secp from "noble-secp256k1"; -import { - assertBool, - assertBytes, - concatBytes, - hexToBytes, - toHex -} from "./utils"; +import { assertBool, assertBytes, hexToBytes, toHex } from "./utils"; // Enable sync API for noble-secp256k1 -secp.utils.hmacSha256 = ((key: Uint8Array, ...messages: Uint8Array[]) => { +secp.utils.hmacSha256Sync = (key: Uint8Array, ...messages: Uint8Array[]) => { const h = hmac.create(sha256, key); - for (const msg of messages) { - h.update(msg); - } + messages.forEach(msg => h.update(msg)); return h.digest(); -}) as any; +}; // Copy-paste from secp256k1, maybe export it? const bytesToNumber = (bytes: Uint8Array) => hexToNumber(toHex(bytes)); @@ -65,7 +57,7 @@ function getSignature(signature: Uint8Array) { if (r >= secp.CURVE.n || s >= secp.CURVE.n) { throw new Error("Cannot parse signature"); } - return new secp.Signature(r, s); + return secp.Signature.fromCompact(signature); } export function createPrivateKeySync(): Uint8Array { @@ -131,16 +123,12 @@ export function ecdsaSign( ) { throw new Error("Secp256k1: noncefn && data is unsupported"); } - const [signature, recid] = secp._syncSign(msgHash, privateKey, { + const [signature, recid] = secp.signSync(msgHash, privateKey, { recovered: true, - canonical: true + canonical: true, + der: false }); - const { r, s } = secp.Signature.fromHex(signature); - const res = concatBytes(numberToBytes(r), numberToBytes(s)); - return { - signature: output(out, 64, res), - recid - }; + return { signature: output(out, 64, signature), recid }; } export function ecdsaRecover( @@ -162,10 +150,22 @@ export function ecdsaVerify( msgHash: Uint8Array, publicKey: Uint8Array ) { + assertBytes(signature, 64); assertBytes(msgHash, 32); assertBytes(publicKey, 33, 65); - const sign = getSignature(signature); - return secp.verify(sign, msgHash, publicKey); + assertBytes(signature, 64); + const r = bytesToNumber(signature.slice(0, 32)); + const s = bytesToNumber(signature.slice(32, 64)); + if (r >= secp.CURVE.n || s >= secp.CURVE.n) { + throw new Error("Cannot parse signature"); + } + let sig; + try { + sig = getSignature(signature); + } catch (error) { + return false; + } + return secp.verify(sig, msgHash, publicKey); } export function privateKeyTweakAdd( @@ -300,12 +300,8 @@ export function signatureImport( out?: Output ): Uint8Array { assertBytes(signature); - const sig = secp.Signature.fromHex(signature); - return output( - out, - 64, - concatBytes(...[sig.r, sig.s].map(i => numberToBytes(i))) - ); + const sig = secp.Signature.fromDER(signature); + return output(out, 64, hexToBytes(sig.toCompactHex())); } export function signatureNormalize(signature: Uint8Array): Uint8Array { diff --git a/test/test-vectors/hdkey.ts b/test/test-vectors/hdkey.ts index f17247f..6460ac7 100644 --- a/test/test-vectors/hdkey.ts +++ b/test/test-vectors/hdkey.ts @@ -338,7 +338,7 @@ describe("hdkey", () => { const masterKey = HDKey.fromMasterSeed(hexToBytes(seed)); deepStrictEqual(!!masterKey.privateExtendedKey, true, "xpriv is truthy"); - (masterKey as any).privKey = undefined; + (masterKey as any).privateKey = undefined; throws(() => masterKey.privateExtendedKey); }); From 6dace36f324d7315e8ca046ab12e8872d1e84f67 Mon Sep 17 00:00:00 2001 From: Paul Miller Date: Fri, 15 Oct 2021 09:04:22 +0300 Subject: [PATCH 011/219] Remove repeated code --- src/secp256k1.ts | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/secp256k1.ts b/src/secp256k1.ts index 83b5e47..b77a71e 100644 --- a/src/secp256k1.ts +++ b/src/secp256k1.ts @@ -52,11 +52,6 @@ function output( function getSignature(signature: Uint8Array) { assertBytes(signature, 64); - const r = bytesToNumber(signature.slice(0, 32)); - const s = bytesToNumber(signature.slice(32, 64)); - if (r >= secp.CURVE.n || s >= secp.CURVE.n) { - throw new Error("Cannot parse signature"); - } return secp.Signature.fromCompact(signature); } From d948da743a804e534a2554217c246330344148db Mon Sep 17 00:00:00 2001 From: Paul Miller Date: Sun, 17 Oct 2021 08:41:14 +0300 Subject: [PATCH 012/219] Add parcel cache to gitignore, remove old files --- .gitignore | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/.gitignore b/.gitignore index 8b9982b..59fc938 100644 --- a/.gitignore +++ b/.gitignore @@ -6,12 +6,4 @@ /shims /test-builds /node_modules -/scryptsy-without-crypto-build -/hdkey-without-crypto-build -/bip39-without-wordlists -/vendor -/bip39 -elliptic-secp256k1.js -scryptsy-without-crypto.js -hdkey-without-crypto.js -bip39-without-wordlists.js +/.parcel-cache From b64162f10a8d36cdcf5172134fa978aa77a8a370 Mon Sep 17 00:00:00 2001 From: Paul Miller Date: Sun, 17 Oct 2021 08:41:18 +0300 Subject: [PATCH 013/219] Update noble deps --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index c5363c5..0c542bc 100644 --- a/package.json +++ b/package.json @@ -46,9 +46,9 @@ "*.d.ts.map" ], "dependencies": { - "noble-hashes": "^0.2.0", + "noble-hashes": "^0.2.1", "micro-base": "^0.9.0", - "noble-secp256k1": "^1.2.13" + "noble-secp256k1": "^1.2.14" }, "sideEffects": false, "scripts": { From 9d486c8c15cc0c76aec415417ca3b271b3a71995 Mon Sep 17 00:00:00 2001 From: Paul Miller Date: Sun, 17 Oct 2021 20:02:27 +0300 Subject: [PATCH 014/219] Fix require crypto in browser with webpack --- package.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 0c542bc..8e86c79 100644 --- a/package.json +++ b/package.json @@ -50,6 +50,9 @@ "micro-base": "^0.9.0", "noble-secp256k1": "^1.2.14" }, + "browser": { + "crypto": false + }, "sideEffects": false, "scripts": { "prepare": "npm run build", @@ -99,4 +102,4 @@ "context": "browser" } } -} \ No newline at end of file +} From c0c68691e38d5983eabe595312f6b152b821732c Mon Sep 17 00:00:00 2001 From: Paul Miller Date: Mon, 18 Oct 2021 02:01:20 +0300 Subject: [PATCH 015/219] Allow sha512 in pbkdf2 --- src/pbkdf2.ts | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/pbkdf2.ts b/src/pbkdf2.ts index abde3f1..f4af0ed 100644 --- a/src/pbkdf2.ts +++ b/src/pbkdf2.ts @@ -3,6 +3,7 @@ import { pbkdf2Async as _pbkdf2Async } from "noble-hashes/lib/pbkdf2"; import { sha256 } from "noble-hashes/lib/sha256"; +import { sha512 } from "noble-hashes/lib/sha512"; import { assertBytes } from "./utils"; export async function pbkdf2( @@ -12,12 +13,12 @@ export async function pbkdf2( keylen: number, digest: string ): Promise { - if (digest !== "sha256") { - throw new Error("Only sha256 is supported"); + if (!["sha256", "sha512"].includes(digest)) { + throw new Error("Only sha256 and sha512 are supported"); } assertBytes(password); assertBytes(salt); - return _pbkdf2Async(sha256, password, salt, { + return _pbkdf2Async(digest === "sha256" ? sha256 : sha512, password, salt, { c: iterations, dkLen: keylen }); @@ -30,12 +31,12 @@ export function pbkdf2Sync( keylen: number, digest: string ): Uint8Array { - if (digest !== "sha256") { - throw new Error("Only sha256 is supported"); + if (!["sha256", "sha512"].includes(digest)) { + throw new Error("Only sha256 and sha512 are supported"); } assertBytes(password); assertBytes(salt); - return _pbkdf2(sha256, password, salt, { + return _pbkdf2(digest === "sha256" ? sha256 : sha512, password, salt, { c: iterations, dkLen: keylen }); From a3edf2e27cf1d984b6f83eb1cd58e9b1bb17fe1c Mon Sep 17 00:00:00 2001 From: Paul Miller Date: Mon, 18 Oct 2021 02:01:46 +0300 Subject: [PATCH 016/219] Remove audit directory --- audit/Changes_after_audit.md | 82 --------------------------- audit/Trail_of_Bits_audit_report.pdf | Bin 899467 -> 0 bytes 2 files changed, 82 deletions(-) delete mode 100644 audit/Changes_after_audit.md delete mode 100644 audit/Trail_of_Bits_audit_report.pdf diff --git a/audit/Changes_after_audit.md b/audit/Changes_after_audit.md deleted file mode 100644 index 11647b0..0000000 --- a/audit/Changes_after_audit.md +++ /dev/null @@ -1,82 +0,0 @@ -# Changes implemented in response to the audit - -This documents contains a list of the changes that have been implemented as a result of [the audit report](./Trail_of_Bits_audit_report.pdf). - -## TOB-NOMIC-001: AES modes of operation - -### Changes -* Set aes-ctr-128 as default operation mode and recommend using that. -* Update readme to mention that only aes-128-ctr, aes-128-cbc, and aes-256-cbc are supported. -* Print a warning if an unsupported mode is used. -* Recommend using aes-128-cbc and aes-256-cbc only to decrypt already encrypted data. -* Add an explanation about IVs having to be unique, and instructing the users to use the random module to get them. -* Add a warning about error messages and recommend using generic errors messages if the encryption/decryption fails. - -### Commits -* deb0844ae816d241c1c5930b13e3ea0b84eab933 - - -## TOB-NOMIC-002: secp256k1 interface for key generation - -### Changes -* Added two functions to the module to create private keys. These use the random module get random values and use secp256k1's private key validation function. - -### Commits -* 56c9edf58b123f2d4c62d625980abcc558770c8e - - -## TOB-NOMIC-003: Strong types for security - -No action was taken yet. This change requires more discussion with potential consumers of the library. - - -## TOB-NOMIC-004: Duplicated code - -### Changes -* Removal of duplicated code in aes, random, pbkdf2 and hashing modules. - -### Commits -* 03f8b75cd40d106847a53834531ee7c85894b5f6 -* 8c669d6ac0d759289de9be96dbd9c456ccbeb0cc -* fb998dec7cb1ade2de8079fe8db115f3cf15fdcf -* 434478c611f052b3d8201a34d100ae79bb2fcca3 -* 6c27cc4404c0975401dd97140eb03cde83b29db9 -* 373fcb331e361bf78de4574a33e5b316ec4f95d4 - - -## TOB-NOMIC-005: Dependency management - -### Changes -* Updated secp256k1 to v4. -* Replace js-sha3 with keccack v3. -* Run npm audit and fixed all non-dev-dependencies warnings. - -## Commits -* 063ba25c152abbb5005150ac9aad4b828245560d -* b6e244093fc1ddcf0c2f1874509c0ad3f302d67b -* 9a097accb1c5d1fed8eaa9ae60db3bc19b7faede -* 373fcb331e361bf78de4574a33e5b316ec4f95d4 - - -## TOB-NOMIC-006: Submodule management - -### Changes -* Update hdkey submodule. -* Update bip39 submodule. -* Replace scriptsy with scrypt-js and remove its submodule. -* Remove secp256k1 submodule, as secp256k1 v4 uses N-API and already meets the goals of this project. - -### Commits -* a1402f9701eb4b324e5940b06f80d35eb8ce1b9e -* d5d4859257ebf3be0c0dcbef24e05647b28ca02b -* 3cfa5516fba6b850461f2d3c8a1ff66550461012 -* b6e244093fc1ddcf0c2f1874509c0ad3f302d67b -* 9a097accb1c5d1fed8eaa9ae60db3bc19b7faede - -## OTHER CHANGES: Remove ethreum-cryptography-native package - -By updating kecack and secp256k1 to their N-API versions, there were little performance gains to obtain by using the native version of the package. We removed it to simplify the project. - -### Commits -* d5d4859257ebf3be0c0dcbef24e05647b28ca02b -* 05576f9a349352178c37cc0cc458766887bd2b9e diff --git a/audit/Trail_of_Bits_audit_report.pdf b/audit/Trail_of_Bits_audit_report.pdf deleted file mode 100644 index bd6e0b9e982e7d2443d1de549ef477cf95b3c049..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 899467 zcmaHSRa6|o7A-D=yThQt-QC^YebC_U79c=ycXtgWxVt-q;O+!>dvou4Z{5GQ)_nBp zsp>jiRi}ENefFVNm6T>;W99@+tDs;iTwhXn|1iH5zc84K88paU-(_>ccuXzS!CY32?B(n|8Pv$C_Ya|Nl*dg#jQ(%m2JL$N%2n!VJg;U=ddWvM4*bI+%U^Un8#n zHPZBP1_4=gRm|-`7VZER4G(ko|K5>vFtY{$SafVH-EDxJtgHYQS&*%@jXRK?6MQY< z^wr5#!`aLN+*cChX=?#emk|f|Rx)$52Xcd-t_~j9*4<4NCn&7EYGnF%&_L*5Eun$~4o|G$y(V z-e%lVgN+y4;qs2hF zNdR=p{h!Z|t&p1T*MHKL&S42${U#sx z^+E3wCLcGS9784_YeBCgJ#Pp3A1{CQVHq!U^jsmtVo8O3`})IQAIMf39R%KDw=VOA z{T@!2?1i7M_8vuEBsAiA!iLRaI4iCekj} zfBTJ08-X$k?CkA{2#Hus+I(*x(9p8<+sQuHH}6~9enXD}KAewd69Zn+(tLNhBdGnW zP*b#UVzs1;q7vCnnNoM~YvQg_k1>K9tIV(a0}LrqLCeXnK{)$0d_8(?&y#0JRFWXub%z7sU$1lv|6i7(Uo z`e>zus6^k+b*rKd60ZgyPuc3cKM zZN8F0fs``Y5BA46F1tSGrVK=Wc|QE|boX)>ay&bR^CT2ig_dS9AraO;1^vYjylPG8 zQ72$Z*-@*4EK8xFhlfTEjWSikDOxfM{gb+ECTXBWtgb zGFL@<9V##mxL?9y*!;TQc<_>LV)S{F{V+Z9Emwc7gOs}kWLA#s?{U6uw$|O4$Rimi zF>TsMT&j*@im01Aandi6iyB!>Wyxi#DYe&YG$#r%IzG#(q$WtJQrXhWk-=&v?s3ol zBmqPRvQ;SP)NORW4-Cl63>Mr_RJi+ltUSOw=myiv1sai=`NJ+^KScJgl8u zHVw;vb(9Jf12SkV__rIc3eA#rcwRz|+u5FVKC&7hM<>;zlJNVE9x@R5^sD^~&hHsE zkRI=yE}*@Es+m4;&1@${4VM?L)?9|7L?4xh-%8k%@4`c0t~UwV-9Nc>+=N4lCKoHc zS=t#G32v0{G9(&6?u^6|?4M;5TtRVXKkg@Y48aO++;)-|D!qed4jjFV^l8s6Rq@yD zdSNQ4nf_M}YhLx?4_mxA0g87CpuLxrromPNWE>*wF`OgAB~KU7Gi24E9B}oo_kV~I z6fs&O@(f&##D(W?ZN2QMxphqGEH^msPynmj+hZqmYB-UL7Z(WBDk>^y2d1}G5hR_)wpnlKGUNE`ep<~*8MKS;)84K zmTOHqyABIbKHjmE(=T|p99{VVP)g%I5wYopqN#oOf?Idj9?#OlKnmQN3Xm5(6HTN!-p3uHD-F;t~-cYUWh78 z?KisJ@J8)sHUsRJmpk8XCQ9=Tox>M)7+F~A359uF>-=$IeIOjY^zu1)I~%!zo!;Ax z_i1sjmJELXHVM2XSLNKXN&rJIZGYz~ID>{~-S8Pa)?qZH-~`dg z@A)!WSUh6ve?1iNikc@9bp26`+d2VuwiT=Bq`CQJg36j4P9OO>TwNGqUgzWEIV@BD zvhrh8Z*+HPJrWTYyW2DetS`!p_x_PsvO-3^ck!&xDG_^wA*NhXbb;7N zqjo3rAP)~BuZv9vx%q7SKi!X;GA)zZjrgE;{{tjob=ND}*T3Cei%q25&H_d_I5^kpTN&Zo4ATcU=GL=OOn!ea!;1Wn7>X zVbd~q*B$51N=vZ4eFn+y2)Y$1aicXKmY^GpSiJLfk9F#s3(%$1aHaD0yzBpDG8^DH z4#*|bTy8d9PX4`3rcvT|KR%Wr3%EgWY?~%!Z71c{lMBT6@&E0)@v_?9PJ9MMS}=Z{ zFWlpcGHUl3BGKV>$#j1g$&alTO2kBnKzMY694$^DGUG80b&toDOe1~F9tB}X^$E~u| z)Qn%tP5Tm3v*~L;)$AaEN-Bs(L|vwPHCkQAr*~pU`HLKaB7{@8Zc5!S zffejB;d)z}F(49}m?3fi!vcd7>E$g#TQrxTRoK+9@?CM(xSks`CVT+0$7FZ}H=0Vp zc>2t_gzKInadgqviI~^@X(fsyaWsbO_wRg@t~g9w)i^IN8YdU9RWJ8M%e89|%y~mL zr2O9;gj{wR6P9+Vmr9MN5F)9fAs0%1(e6qbuxu=>6H3-Z$cz=SGF&AYKJ$V^wR@eM z%Qe)gxi6r|^YfQr<-!@|R#=tYqD*hTbzmmy_TI?}qNVq$YHF#kD|*|+t8EvK z7HjH7yq`uH>O0v3Ud~%)OjkmCnl7URP>8Kd!`iH@GRqaYe@Y~gs5Qu0Y3UL|yY z6{15V>uO;Kp`vB&t3g#cEOM&w$#=4lrCtLeM(uV7$0pM11zqn3JIMSwEjBwTM^ubI z-t-j=WOQa0%F;Yp+YwB(w6$?Cpo|T0=x}Mch z9GLLX(t<<6IzV++OMGE_ufdjTp!&%iV`@J3>+1mfWMZl{mkc$2Mex6g8s&y5T=i+mNS;_tAH^}RhDTtc`FMS2)06iJX|1l=rG>F*Jh-$z-Ov2j{sj(E*o(I66*I$@Cr zxw#zILfWykb#!8i@DZ@beHm%&?3VNS-0~KA4M^^V zk=&#PLeTNY!29T1dsQDx2{p5*mKKh#_O>)62*=!GNRl&px30zUJ;RS#W)<@A@99$Y zmcN@vB_3xIE{Dz^EltmRcATZp7he>C!VTZw_0sSErk3mGT7BMtj zZi4)a>O%0|56cXOV^HM?Hy>@Z-Jj+m@D5^ zkch0I6%ZkIhAdsvVPs2Q$c;sDQB%am(!2MY8=mIFlouUh+}uMi37vNup4tDyGQ4&4 zZX#maJp`l(!(7HX4%oLNZ?TWr@br>Q0-bY@bm$?<(`!J1=<_lP&kK%ma( z^K`qA@*^~y!2vj7@`r9_+f*`id86)EZ>WwY#Wz|v%*aqCA~;hWT8h*M*j)yb?`jy&simLh-umU{B;GWD z_^N!t8t6M3QT4N(-Bh1IyR>&(D-;55um0V)w>=H?_r`<9UrW)$_waihk=NDAHA`KP zoW|Y{Ww?%fVm{9ztBn_R78|O8FfaYp_K$UVPdKFrF`Xm~jPidmgh=Evj6Hy(Ky*H_ zT`JtP^1*QnieW9#;;yAEq;k-Vrr2M?Wi+nsaO3Ujov$Xb`TRJv)uq34yN7+2s#rt(uBg9N1_WByQ;q%L&L2R_JP!q{&%7kh{Lzp$%R^t31v{`BnRof;HB243B zcm54jEB{hJQq-?DDm8Rd4IFYTkN1f7Tf9v$UM$*S@P2;13{vFxU7~?eCwOm`6V0L5;QkE2cbVj=W=$L@B}xCmm$WB02w3}wDjOs=~Y|ec+)Q0-5w!9 z`hMWA*6C^LMA~1d09csI9hi90OJuv~GWp5r9^QI9L}RuJm*#)Sm~+rCi}g0F$jhOT zLtSN~fSW|706iP>l~(x+9}Gm8J@T_kudmO5GV2O`Mq*Nu7%a9UXJCo>$s&76F0BhG zi_d6d|9P9+5sR^+9>;gPoJ$c_Fro4EhhTbY7=pG4n^RHWnw3y0ROg%mzmYbSTx>?i zxZF#$hDHW~mj|&TBB@5zPAKUMNHwBZo?f?syn3XS6|2VzV9b1exa_7Vwd7;saV*{Vno2wIyQLJWtE*!!A3&YCV%TuulO7xQl?10xpYQ zRrq;@*j;@%(2MyEDh`BUpqk@050IgNkp=}mgrZl|)D^Dp@gzt;Pem{PX%a&4aor8{ zy}sg{p#aJLa0=os&F=8FLjDvm+;7&pElA_pdTts}$!Gaz(xBD(W`8U)p0vm3HL^J_ z56twm-5C(GX6di?yu7R>f0=;*&6$AbK`oA_>R_O3|9d!r&Tt=AS~o##xE^F%2op?- z6kU}B4f=>ovZ77Sh}f4bU(24fxz?(R3TOV@6dj_`@u|>y-uOtbj@mhP$9%E&!3Y#3 z=*H0eut180rL5mvuc*YG&evVw{a0ty@o}?shL*j`-%c7fmO^Rb;VH7w9q{MSLEyMP zI9BnBH#hIb6{$T1np>{-j;&_Oi+=^dINbk(I9IHQLh9|WbFdP$?>6o>WSkT?VP`zm zcd-Q(TSFIuX_DSIi3=CoCxF62t2CRp=~(D7kIexu{m((AUb5MJLDZU%nyTt_r_Dx( zt&gzO)KnsFPJiE%+vVoC<%fR{(|PBWs7wwe-PuU`Y&nTU$TuS2%rj%Htdd3;k7xF-BbfFG{!vWeNm`A*>L@bo> z{)#OV&qhE$&Ud)bR9*=2plqs!pM_`bTUU_a+G3RUx0Qb28M?D{lmGo0 za4xGtaBTZLnu5i(Vv8o7+Y!Q&%kz8%76~uu<>2}Dh{y47 z;Cs9Y4_AxV4l5qwT#J{`=5PC%q*BkVXQ=)IcXqi^PNn2R4q0VS^F_LYv6BPd3|1{D zGKACUe>?%AdWy^l_&TC`;T(124gbhg98B1D7!r?8IuvPKm(8G|@o5#*ur(D6Ph<&K zPpHb#D!-5HCDW+<{q1*|SUh3^<`rUNV|99-Ze9(%f?Iv_-rnXFSYnBI@?4*}8^N*a z_$`gA!1soYze~tP&I}%Bb?UKmYKtQLrWxR&>)Z6Lumd%vDpZ0-o3T5g@|iiBMJ&YtPyQCWQ80G-80?&}i?5?a-!+aGI$A2!&flKF z(B@*b32((?vs3Ca=nnqLk12Ac8^zwaW23B2CRFS+JLTugPez15+|v;$(u!Mg-qUMu zWGxHYadH;9Zi+%b;O>dtI8no1c+M=;!U0*&)8(8=L{M{yy~1!tZ3#?3k_iVy?vV>+Uo-S+tOl zs4ja|m|GaBKfM>pD8eTrYHrS7(lKOFV|*xtx;4$TDX5= zn5{UsA2p6zpiG zy^|Lto?`|Xx1_u237P}V>Z)Wpx6vTvJ4HhAdw8<9) zao)V4rzZW0y0pl|I5)7^a^yR7QG1{`Yjx&y-1Z`9klJ()BhOw{O?rKe2o1Uktjz_3 zp16$1j~p>20>wzBT`4k;II?IL*f5$7QVQ;Q@x=Xt_~jqu)cBR-PHE%{jpDf`ea@!c zp(2u!@gq(drdJ3#5RM8VRLsf2GEtR8X3-MxRC@K9{?p-`U;>~_A1hrL)|QiY+{N5~ zvg&Ry*nzJC)xhU+3|M;^WlyU)RYh15YdHJGTPi@nqEtR2R7Vs+j4Z$aei&Mp0T;En zTLdb4OFk4Kj9j5SlEG^~{hZc?9?p7+PkPGd|*6nx>L=E=xLXOw| z$33|%-MaHa=(ICU0ikvK>#q#xLxNt!qOSrCesZC-QkX3C@w-xBs^ETtK-yxUg`EU_?%}(WNqPq_Yc*F; z0=dPNG-Y{#+;2r>*H?W$iGEWku$W~oN8d}4BsC_J4kYZGBccGN3Ajs@%2A%&!ZY3A z)MRzXr7A*q-is+*;;1cGa$dcrog)!eY0t`*#cBq}?tA!gO2NXHBYT-%+v*EqhK$J2 zL}J{#Jb3eZhJP6)C|Q7~9ScT`gofPqr-@bN(t;f?%893qUIv7UV;>ErJm8FT7HjX* zENsIubiv!Nq=e+y2B>)R@rEITSIU7SONrkN~-_`nGaod~w5o%Elf zwL%;(VKfySmoV_I9lTA;Oy)LOq&K;~>Qc?uPUd?`pnU{qgER4t-QMV3;+xsa#ss<5 ze+C9HsV<*19nmP~0xUg_M}LB|Zc4fQOh48rETLA^jMEj8K}7?>8ajeuxIIUxEeqkU zPRCT#W=M$<=ERotzxQ|OQRRhJ*;2^wlNe1W`yXHDyz>(X($O=X9JV+;R*n_v(j^3@THv{leZ`1u1~ z+@H#0QDVWk*Tnba(MlWAu7RRA_)E%=opviVio-3VH=iQo$N*u6;JJYY53-U)@@;Vy zC)^jswF0cAnjb?UNlbWo12D&D@JxgCV0SD}L#vXk{ob&xrOl9TNcKY9BfqYZw8Lad zi8E(I9Jtx$7XRzn`>LY!cNfyx(dXUXMkJa4+t|%P^>DmQXdOy6cfDSR=fCx~D9NJP zCJJ0GC2O>AftB|z~e8YCmaS3Zad={PaFXU7+-f46rZ`+F;JK`q%}|f8xi69{R_;` zp%D*HW%GdZ4FWE%VE!&9jhRHmtRGC+0oWL52yY}WWhb`!A&bAuCD{=R+9|;HD3@zs z!)W}WJ3>barz~Wh?LIJTYcgXod9Jy_5l$^L@+(qF$tGiz(oUu7satU3?r~h5HZ647 zKaSF{-h>OI_fxr$nQ|zx#b8}2WzdPw<>d;PCI(jTeNlGYXnvnsss^tHbwrbS5jom` zhVj4YEuvjnG6uVJ^e6f}F1QTDXe#hGp{kQcF3d_b(0zsM?&KMV*6bNbNoZM2ZNQyD z>*cg|%z81>XDpQ+VFZed)l|%2-N}u)3=DdOpAV!hzpiKlrCZ-bDW6(&EHB6 z>)@KxQzG4|Xl!#;yHQGObT=uVh-MnS?IAWF+((5$D3fbuJZF!L@FFW)_|v;D(a+

%mt9o~H5%w7|FKngK0hb79d0b{;m@(;$u;WnGbUKal3*F7P*9#&hFK_xr8`9cM z;8Zj=W@nN8TckN2pCwm0EFWJP<$DkeY|9rJlLo1 znYsVeXI&_vyGFps3MP^Cdu-kOtm8r5p^(kXU^Rig{TbMBgyeo^Ku8o$tiHmbBoESz zTbPHVJd*Z<7B4p7uu^$@n5*qht3|@>E&%qqP1ZDi4qNYw47KCbo~LyT9J8d#4!8vZH?Ff*O6VDh|vPi2f}IW$&!3DyLALw7L+T!{nQNn-T?? zSeF_$qtm%eomsLX%3;&JHY5wxRNHmmuy_8c9=kc#E!zJoAyVbc4VxYxAhpV@qmG4u znhVS6gI*~bm$?_uogKigt2&w80^wcuyDMh66{_y_ZTvSlT@HB;>HYO2T7DkW zUGL!p&If4af#Yc{IwmhY~Gq^eVgF-0vgC1I3I^__;|tFLalKkyY$zIPZ1yZwlR zYkMKNqd~yv4%hwV9ZzYVThnvn>}$!;YL7I^9PabsQ4i;qR+YfKU(#z0sUF_PlZs~g-fRjlzyGC zGOWAEP|kb;OZL0ycJC(8ee%c6H9EAlY8oiSddqlFI*8M8)A!|k&B48|8XR+Ga#%AP z=}*~dix!?O*XD}^^?gIcV#k3=WS72Lm1W^$JyC+Cs~sBnS@KUQQ_DKx&MH>T$)Z4D z^Wf&tFur({T~%Al{ab<-MNs!?stQ`6~8GS_5d{<1%Fm${iqkx(o4nUyXi1N9s=5z1$Iq>g5{6 zuL<~p17G2uhoQ2m>~f`SxX)jeE(&{TwR7%py3j$dQ zkqPzdNODc5fAEta7tR^j=QIVBRueK<&z`{!aA$+o46bkhbM+Yhy1qL=qQ7b#g&*f_ zUcK4HZg3stD*3`5r<~eNRh5;swY4g^@LVmP{m31@dH$~(wKMgGLDgke4`1B@dIkn9 zmSgjD8fC|@HgbqF2f&yzXvqAT{Iwk*K6FGKymXpNs%#$GVV{oOH>p?-43DwA_7m53 z)jm8AZM#t3u;y(oa*X(5!lRBy(gZ?lduU_7y;p%N;lChjR~d@Lm6p%h@_Zu)+cQNM z!L@7y0e-){W-rg6ptF(pS2V|!2FTIV*xxTGEI z=^9XlRNrr8$IS4ZF}|PcD(mFk;aa;KyuWOdWMRueGGuKMAcL9T9X8wfeQ=<yZl!V+WfIJ`Oy{AbEaix6SBi14_VTyqLzsP>tYweH=Nq=Uq9iQkb-ngl`@i2u zmDzTMU>{w}GGe;YTe#?C#(1FyRwwZ?1;kI2^WN+-gy2y{iRlaQA3Aq5@iau(JKFfJ zs2E&-%aczkLQOjWg<*n~9JXKAv$T`RS-Pt#|EhL0)UEF^z?1E_~@goGJA zl5q!I?SNB_|44WoDW-@m#Y{27V&MkL>{`d+L^#AVe>Mu5yW+#GPgg+kws?2YGnkzc zCrPra@YIWytnCGX#e54Tt6>URD}$M#LE!BV^4`28@uT5qZfOkv;O z-{)>3YS?Qyg{O7M0%`Z8%eo;Zw9Quq%DCnNg0!0 z2xCJzyiewFvc~N#O@4cHU-ct_Ps|2x6s@EaKjH#KxCN04xcWi4_L})G$_bmHIcpa_ zA3oZau#X%^u5ycj>MnmS-7YsLeE|=8?CzVxf@$F8fmEFKJHB*%dzR6jAvS~_B*>`! z23B>s3tq`*4ys`s?@tfE_Y*CL^;InRw205rw@tcGJGfsui;N?N9&coYSMQXlOy5)h z@?jT#?}SK^nu(nQo(d0i?&Lgo3pN>Ws?H(RrSwsG-|k=(0|9J(uk2cr*XIF)4qa|v^F!VE_;}mxpKnwy2wBbgB%;40;hW@=J>lFwmrqqb^NQ0WOp?ptev2xmnFQZjeVN)5_0 zN`6^|@W6lddsK`|o18s9XG`czBp<)?+QRc=F-9^8AMwNt);oEYQ(1`=G|6ztjFmM z+hUMT^9<=S%+iAHZ|<>7M9Amg;kqG3@(Cz)bP#%5C|Xht0P_&aNG;mb#Dz4zx8%`;3ZPxxA-LwSnSFpm+-^hyhEulk zVF&SlWuZpxj_Nj$a2X-sWEJ#885wlyGKJQ53DzM@t(`BwXxqaj7dO2kPWm6#=q;D+ zcy#!*WCu2dzmw-XS^^4zb5>fh>O?w{EK)d@hhV;|5Yl8$YlYfvpivYP=H-{?`aej$ z*T3P0LKTwZLY8CEj8tBHNJKEA+5%qxz=%lA-tRG37ni@sZx*?S!wNZj`8N4G$BMj; z=fDapeYlrwa#-i! zNij{1gzUUXtfSE`TK&k^Xh=n2OJIcoPBx8Zg)?GUs)Zs&063s%yd)oLG=Lgn;% zczC36gAA7b7GP>WWomxqSf3fd?e}e5PlL`CvOdn3v%pnU6*42SmQ?Iq5)`YRT z`sidAEP&NyvADsAFax_se799YR};LIfJMYm1fJxGfLQ+34;4@LlieHR#lFapV8pr- zW^rNi_0?-!BM$6QOTroQcy^HlO`1OIbW#+}f zw#xg+jz=jq;@5Eo#m%6%r)yC?w5&=yxI~U8%2bYHcU}@y_;;&`B7$iPo$x>fEG~s< zjUP<0S@RJ#^>S3`<4Mz14D@f}E~iiK=Qn72-Ho|oG!TueP1akDpb4-{cX53_@IHpc z>vH1@JG&kpi?O$Cc_40B}lORgo9!{cmdo0Wv3fEK@qKcwa(lL=o zp)O^TF(0};`i7L{f~;F^IIshT z$6OkFKW_BAt9<&L#gSxtom<{dpV{%`@OqTh7H3D)%ZBCofVb(ym4-2{ts4S{$um^o zhGIaFl3H+M2JIYOQAUjR7Y0>aSnDH(I4KXGICYCbIqP}VMp0;35uv zABXSp!UQ4?tMgjb8J*Ttq0N7%)t8#n_yPU$ckKiExS!8GzM_{zD~kXvV0Kid&-`xBQDchW zug=GvzZCn(F+;c7ee}W!NexCP;Dh%!v-u93E1buMCtM^uc;W>D9*9dhR_5-#HzH8D z&TNw}PU74Ao}+^z>PHa;x<<92go2`6v`R*CAVGV&Gle5Y`w?h`-UA3PI#DO2f_$D%(Sb8|+@A%EoIUgwTha=IQNdUXgh}9n)j&|z z3F@M7m1HJu%}$??^VO?_!S%f+e&lM1ubEb0b}F=o#y3#uCrwD1_qUK?*-=R|e;upX zET|CIRcF244>={5%Tz)Oiv?5)E@^aBnCQ zAL){+e7<>s1!SC=$e@4|<|^6+R6Wo1^xJ{!Y5w%>#1 zs0CTF=ooRoA+_xX@no00uX%Hgxhu12_n7er(cnX`Rlni;NjMBrsyziBh^N)96^vNt z8@1gGrRSTx_OG_S4Bc1j)E7I}YLu%_4_>&tII>WiL=k`S7W@}TBlNR=+c8!xL5m8X z-9tiSX=hDL_X?HqY{4?qxRxX{SC~wY1}-0BWS}LO*|xHhZUf;JSwiRc&g=UJE?7^z z8=+*tYyx@M<``RFXZULVnAc_hr_O?U090%vg@D;@S|q#biBvGC8gbwVA@PFt%hx+Xd;;ODLCTP5{#+o*=D)%)cIZC=0K z4qY<+qjwuKmcvR7wta~WMIk{k(x#4k+e@kn~)8#Flt!TW6U)45HQ}ev;b9YLG07~tDHl>kZgX; z0ioJoi=;u(z}`K&dI6}wzvZ@-jjmZmQ1NP;{mU&TjKYMVLK&z)kpvuk3*n8F@V?|M z#sYKf#@&ob;>mJFM1_Ny9U5MVR{hykAe3HPNgq-ugcZl?S7JQGZ=1Htjr&m@4Fiy;{r;Jd2`Uw}Hpc`tA4AKsm^ipSff~->I?-JCPWJc|J%Q*t zoY-*SiU)~gO%>R^FJ&Vrb+ombu$_X3GO$s_?2Ej9!DHhaT8rao5)QrnAw@!Zu#Mi4 z66xD#3&D-DL}e6$@KHlJsNumimU8rE!fOcN_^75hqh|gxQqe?)k(9G5u;jh!d86=cKo*9+^`$q=VO&QB5b%NjyB>xP8UD^uYeo|N|))K(M3Qcv9ELm z(KnRekQ0#fqx;D1hRm!_?-7tGQh{xnx8DLt(IR)OLZ$}RaHO@#Z@}_1P;|U%l%xP9 z=1lS}J6N-}Mwe$3NporV#5~{p^dnrn5Ea^4-_++BvPW%92=HTE2yO#cib!ZR-L;NkV6tSiE00l0Udd0c10r)=Q4bXC%ruL* z<1$KRP!t6q!^X?)M3JtY>87d{5eGEzF)FFrzK)M$nUcz?`|3l`@8#cnVaq8mB@Xyg zV|DKe8gG{_dR70}XKEXkJyd;;!IZSDD?Fy@F}TL&1=Y=wN6e5}xnfFG|JTCYvK_h;p}^)q~K)Sh%8bRAXH^03DK z@?69YZ+$gS8&BGNIOKaMBU0G!b7EFDU&z}c2SL}?%&r|j+|kbM1)DV?&0THY$~I>? z+Qyk|R#yh~X9$?I(sy%j;w(#bXQ(^;aGC(+J99`xvc$w@=b7$h6NDG412}pER(T_G`(}` z?Oj*6p6C8bb&fU^x})jwPm&j4IaDfWNF{c6BGD3Hy&B@@OZeO@b?gQ=aF>tjK4`6M z4^NMT`aH1g56}2zMWuN2019cVI_kd^yW2#-H^r^$`fkFQp_^5{9xjN!j3;-2+AgZ{ z6+!xV`3wy*gA&vt^F`W}%iOk1)0fEyU1HKm=%;9J&P3J=Cc`%|!~RZ)G^$|X`OURD zAqfUzOwz*hG+vmIU`ddicx=sI8hjn8JuSKu^si^d1Hzvrh*)KcIT@FS&q|Pjcm*|_ zW2dd{B3#x)sjTHNy=uP}?iiAws4Q&sS1xDX?ZugY5U^T;M6ow7Jj-)+1EK#Z4SFYj zP~wILMGs1JeGYcg=SwCu@@SAkSjsgz!}U#$?ji$>>jzy1hNQ;rcR&G<44YH-jWBhP z)u7$SC|G1N{JM8C7*kC9EI4NCP_^%jHZO-$Iec!bzt&r(oY0eiQT|!qLUdVe>{f%f zarjmzRHKR!h`lMcvD-19_uG3rDnqG|pi%g+f0a-7MLb@gNe7KXv4=o16Fpf*qDaAy zo8Jf}wLL3g{ex0clbY0-5qc!{AHNKI6eyamswR8`ufTHr{Z_ZY zFi}VpN~J8?^&$0W7wW6fr0G9rv7Y=!&N3yWBsA=JyjXnlH0C8lIxJyKE*AG94rrz6jiGpmnuI(a$E9s!m=m+9}&)FBvC zr@@M@dmC0-U#TivZ$VKKdSNdx@+FEUEM-PNekXOIAws4Y%z8*Fs*PFD!4%U!mG*f7%NVk&uQ5@2u!8oiKY%pofDvK4)kZ<%CZWJ79^ln#-Mep&phG#DF zjTa62Fin3S0LhTLkA^)|P2Pfus!_n^pr$Ih3Nu%sae7Q~H{oD+<1;-HOrFY8Dust` zB}qsWoQEAgR%x7U1)_ozFV9f!mvBte(NanVtoRV?*1PMRad&?GzmS%&%CyOAta>th zw7l>~f0SsZfx-lgNzSE=W3KHM>Hd7=3b_{DSHQWieJWFLQNoGpO4`AVuFp1@)j!}W z<=I2(52qWR>4_5fQtGVGuT`ozMz0$a0%Ov4IGI}Y*u&i>ZVFLfyiv>6L;g;;L1>dJ zV1m|>uTyEO+bXFUI>Ca$pqRuAx3Xlh=HTiQd;J7`VTN6_G|HGs(6NpLM{5^ zJ-+X*8uBJ?Fk^Y8d?+(9^^(e0YDlA+MayuIMq?|0NG5OGX`rhqN`6k*tZ&?`>Ybk{ zVd3v6y$S>P4(8fbgMZNAnjXE#$F=K+JBUY--zoS}2#}v8B~eMqeVVy2?oRz)6SrOc z8FcW{RB+Frw`_Ck#LasHs%;GWCbLo^90L>rO* z>UF7!_U9bf zA;TUbW`y@g7GubbRy0pxEXOPNfi%OH*B7m<4HOv=CfV-37MuZwp^6x9@EuK4Lr!}G zrLLIjG1vq4hGYFsO4D_Xk}=>GC)sjo!ul23?-Z%N-R?5Zf*H!riJ^Osrr44N^@mDd z<3M@+>&Q+xXOhWfg&iB!Rh{FN>Y{$33^~O8qH=-DQ7@ox%2FrAH%7$hsi-IfChrtIesgPaK4ps1u{`Sg>A;?zs;cNEE&?-%?&xRu8=UC;SJnNr5;;&iZ{~oh1hS+ z6;JZXmUjhr<+hHF(CF;%KTWf8Ak}AeBA^W+7huMtOOY%v9r#gO0Fxs5u4~-6$Wm*674VV$h#YA9KdhZobR}K*r(>HP+v?c1ZFg+jR>!t&+qP|Y zY-`Rp>whtGIcv>bvR0)|rK;Xtr}q9m&+8pLP}t=OxTBR8efR*+sFr_~X)S#FBKpl# zgNp%?_b?E}C1|4)2KEc5eQkKQcJ=sNgUB6K*i^hE3EVKx#*|2evsFu(n0SR?bGl~^ z?P4YpDTDGfybKpwGO4{8yWRd?gj(VJq=Mesle1E3UF8?;BBm^wz@W*3k!=ML!&0cn zy!i9dl@cj-XZ?9d96N_Hi(5kj0Fc-I$OCK+6E0s0BgE%Iz}JKk@X2Uk6MntR<(7eSnDL*Q^A5^|X< zWG9(`OmVgP&^26@UmFc&!^)U;V6CkE)q!lF7@8Pjx7F!5Nd{`?dL2`VPy)X1G3W8f-0V}A~JMoSp*a)PSK}}+6m^limtTl;s|@NnHb8CFGwCY-H{n0jA;Fp}g}HO<}=@|(CoV^m|PHM9@* zpz#HYhmj;73dQsWr(OZAtD*~GJsyRym{|hPyY9Tbi0ab8l5Y$g5-Yl@ z(5R(3_no)jF_I(MetOyl2P<@48*%Tw>YClV%=TFKvH`dY#vd{z8YU6?*sTa)phMs* z@4*fh6S6aNwlyk5B);x8!N3B{Sn$45|5>4QW`T2DWf#ITozkvP2_-Ip3 zOhqc%Injp88iaOL;?WX2Bk@C7hy z<9zZZJ%Pko^Xa0A-t}BG29?0C4ipWim&%{vq>x6klJtBuJv#a{$E&8GAn=q!SJg$w z4_*cx8cb|)o%7aFdD+SOO=X05l-A>>GNIzAa6uR}Abt;B_~{Us@J@c@8U0%DhTYqs zEB%dTYVB9N{hu44=Fn1igm>A+C1=iJ{j}Z33!j0RvRX2XufBr7dg^oh$09XkO|^=g z!#`(EQ=Z~1=R)_I;Lu>jLh(g$l9{}6O4_hTeb3aSzbz9t{PM(6Y|}HM8tsgRf*#yO zIw(kHx?oVi50{X|LUixkZw?cHWuFpMd4Rn*4Bj8TmmDdbrV=jTA%#K<&?u0$R+SSX zVJhs^-P(aH3MAcm^&+%nXurb60;={bH1ZNba0a0o2$i^kpsVDS(%W}=H@Blouwy9O z7|is9k`T^u8;`(LR13~Z;xXgi8DaZrs@zoj)>y|8OH+SM|2_~YtTgH_rR z(LcnUdzfLX2O^}ARV!SggJP~OV8RA(P_mhLuLiL-Ocphf+J~qwKgfsTBtmiLa~qEM zCZq^rj5G>4@>X!Qs$baPm22(H3fM!RV55>!^A9I0BBttA)UXK^Aq6omjz};F+x0U7 zf(5<=%Sh-RSWrQO_7epqs+SjLt=L6LCG;qRlRc4lG@Io z7fqLk&-8n$JVEazz+Lm4_vGdd7}KcaTGxw9{#hAffg%{yZ#S^Y?5 zR4K=Mh7|UFJqzQg!gEIKkoz@zXrj%Mz$ zdb&tUEc%SH#UNN`8gu~13qnX!(2jZk0U7R*aE!EAi9((m9eH>0uV!!!R zw08aP^yNIDjuq8+NU5QaW4uV_({G@jWi;@yQ5BX~P*0${&oaeAh0z*cU?<)A&yLyB z%-^4(5!k4GP7{YNoVvDQi^ukD`(yyy1*zT2NSsKm|63e!C7+x>Hw(6i)KlGRIuxP5 zDA)@~CHAS%5^QM*H4R@!lWWojHm#ne6*b_=jvfMxNT{09Pw&W?Z4VsKd~dU1a@Y!| zh=gY8lOWWXvdc1QUz9DTGBm%*AHp^YccvG3rCz1RA%}5=9I>Z552(VhR6S1%7BLV7 zRrJ~_+@JSglSy@ee#h=9BLk2+m>l$rW@`XyaWF6A3_1gZ*dswSfu%J{XlJfYu$rYt zJ=H~}P@mei*C(|hhKfJLOYay&s1>0REtQ8`&=G|Fq45yH^nF}DhsKpDWHOi>?vns6 z26YDQdYjQ1ryHHF+iOTn`X0o?FGM~rmlK=3Dt8_})2UytSbqE9d)3J_yIijKQ}IRs zL4xUQy45eSa!lhwLVM0N=SFG-lVOtZ2HG%$@A$1M)F;)RCs>^$&HBM`r=lqgAwe1TEeQWhb`==?@n?0ZBnSe~;06-A* zugPLj&(CM$Lb+5bG{^$^}ivIB(hPmTIKzVU6{KBC3xtA!Ns?FV@rNyniVc@)% zn+;fN$J34V0zfv?t?d3)CEbkOOBaobNKm*8rH?`Q4MC)AsrxIzZ#7GdFxwS?h2-0f z`8zO22)g15t%6f8JX=Z@5A*Ur8NPv8oneSa?axBXxATf9Zf zQ_X{TRU)GOJs7RBKuh$K=dUtXr92QvJ6|t3O+gd=3VeE0!HUTPrO{y_NCF5Qq+uVU ziw4f@-TTSVL`9G7SVh+5Aafn-u2K4Yj~FhrXR81)jQa?%1|nfJ*2>KYiNJI(U5jx)}{bXYu`f z{g3d9gX7gC6E}N7C9F&=ol#S-rG28d`3)LIdSU)iFd$n^J;Cg4@)+Z9crH~-j(+O= z&O(9>w=k(kwg|2BCSoKbE1u5J@dNoL+i*FAobyeDC#&cadN!E&a>li0-!*#Znvali zTL_hHX#q4DG5iORme+15!X5!QBcuUL+Nq-@RTGH~vE;! zh{zL}LKA5W=LAYbIWpr@(winPFF*T-#H0JS=B`z(tVV;erjL)&*NE(Ypt$XpGe9+k z$oKi0d1H&u@4@x9X>Uib+tJj~;dyspa{CcgS(#ev{jl-G5Ky&JT}ijk)BrkmKGA#u z09vhY{uv&i54bOF`F_mswh_W&($PP?TmJ^KxW+0hlR3MBFFndXhyL8_FP0%~@-+`abu0{{mFKtDnI^Y1Q^ z^YX+S)-NJN~$L-Cm@0e(6G>VefWy69)2KZ{-c83G5hH!iAq&T^)z8Co1;(` zScaj%g-eh8qZuxR0+uMW3jQ=S&q9}rk2(m;%6cK6&9xYFt#iRnJGY(132Qo)rF*`7 z1oPh=J?nRWR{T7J@7V)_`Z!tp4Q6Kr22!k-4u7#{&rUPJMpHq%xKyb4Y$_`1-GSfd z5<-F)F9Bc(-uC%qKi?FcF0Q!wQ}UMpv^{1LBtU(lqRIIUunUpbzW`G0>J+jW93E2T zsV0M5asHgTG+FMX=gwTZXy+M)_O|}V(0j;O<&HLsrL!5FPJAY6N={azr|LB}>kZXQ zmE(v4YRk(s>~=d_>kmo5`Yz4{eBRc=K7gp5$sqB>-5sxqzKT7>zO0zysh0A+DhOn; zI6eXapYQ$A*|VIK*{y}m)kuEUcpNlf(jzFB|MS&6qJE$-Spbq46Jw8re-0)cud2S}HSejjf2lv@`(iG3ZHT$zT zAK2`6cGkaw6KVmt?$2%5EIyC<`*Eti6kxAvgr1zj^X6HCb+xz%kS3Mj3B?gMq*04N z4Uy3zJsI3?dP=i}m}*9#sL;;b}_?UvQ;!;G#L>c#b!xa{;*uR)Th zEZaRqIb{Sy6?>@gOdh|6*tTVV^n^|p3*(PHB^q|bG6tYbSy`;F3!-+K+<0p$t;(>- z)8Q=cPR?5a7M%q_HzCg(K~#mDY4t%gdeWe)yt@I3U0xzT(Ntgs(($}G(lAWyj1wG( z3F|`fSU%^Yf6e^9>suRwPPr{jE?`0ZhUai7G8rr$-=A+uif((AUTL-8hy34#ORxYp z8=9n=NyQAf>U>%&U@Y8rlTSp?2v!B;0uOh}NuVE2rXeRRZ7+(PA^5)^@ApYYg9hI| zS@0<&@m|bzg!X7&-)?@sZ+<@fHoaM={67lL4f&IqCEl-9=Qx9AUOt z$LGg)<)Hvp4T9wOc+#7ZW#&N&&qN>9JjVR)Cynf#Yt-C(*>D4fNXYUhY7C2%Jv7Mg&aiu-ZCAjy9uYP^K?eDfM!y$!0+hH zR>ktCwN(9*c5>|&YyIAyn#RozVvIHQ=xFU-Pb<1<7Hc$u44GXRNX{SxF0;5(4&lOy z8j6&hy*qn+>JwZ`jVAZA0@39pk@@+jBLG}t*V8<5&jJXLc--#oBXkJ;D(ZAOpXzvO zDvrWAXT#@otg0UD=wIL1;WV8}OV#%caU^Gpghoj%Ig65d)Hd$mQ{%agkg?F|2k`m7 zPZfl(Lf;!tckdamc`L)(p)g;@@^-k?$g2vA)gn-cL)RJz5(h9`C=3%!fH9xf z>lq{?!R+?~0s(K2<&$NG#Tq4_iX_ZJIl)Uwgc6Hksyi}e6#2)6x|sq}TYPaakJnDu zn{GlfSO8<=WWR+n=-Z|RW`;1vOb zmtLdkb|fon3c!DdYT3WIEWCUN{CW;}$aA}0<#!NXSOqiyZc^G@zC2&l=_`Z7XrEyO zJ$MQzy;_NNO!U!KkIESXQY0o;UZME+Wk2$cA}MF+N@4hUkpejMiS1$;A|ObK$WeW- z!9N+4dsj}Fa@m~X=^o4TPsXD$+W^F&fhT%nVQNP1Gg#2&l!(5E5<(AA@$_6Eq zcLhcP2UakqSUs~jT@T$Y4>1i4c%~TzDr7}MR?4Ohoaj^rv)fF8Xp#_E*~r`BY|G6$ z&2V*P^9{d!IC+mO!~$!z9gy<$1}?xNc2cb!(9kzUvOJMe`rmWkPAG zfBr7mqz5J)SahPZId~64grVXl3M@#~dJLvmcbtd6psKQ=p>?H(+wYqgkg8k%GJXP> zoYdw=QtY<6M6;>horQe{bG{(yygh&a(rGhiR8W%+bCJL0TdC>wKHj)XEcI`oWC)KY z7Vay`uk<8Fsoz5%kQPxyYvZAg>PG=RomWr+yczu-8)^{pMi-Rj=e!9oph1^**KHS4 zJ%q!U?}m((SaAU^i)>2%0Us5Kx;16_~vV@r^N-1a*gKfy~ z`c%xv3al$UY0+Z92L%|a(jsL@B8yMAu94B(L9BOLj8<#9Sy*QfGdFX-KU=+?2{u}c zD89V^ef58=ab|Nmom8#2KU?Vbc)w}eRfkkRQpl*W7}EU0+m;8IuzpT5?f#QIAmNAx z?GgksIvms%*9xdbl3GOqyaNLP0`yhj&**XT*M$jO7DUkwA)>N$1PTb6UGL|W0M}m6 z_wwqS)BQdCkcK z7M@*&g-H}vqH$Wa&tk~OlYtLmWbQN@LuJ*iaQrd#+@XCzG_Tg33JHj zBWo;iM?=28=be|mL+}d^p>O<$)^y|m{EP;}k*WfkkLrVB^Zx}1RV!CMzkVKmd~f>+_DamRx=fz5t^TtN9WelD zT0|Z!y6C1H?*BG{cMO0?iMa#SKO=GYu-R@g`gqn2Ixhwa=)2nbdOa;kX<_(&bs0RV z22>U2!*hG#s2o5`MiUrIq!AFoFHwd*Mf;y&@;S)r-_3x^1`gajM%R zp@0(n?!9qnk8lS;@roc%gUqXnS2dwMdGZt|)dV)3%>hkXzPF~q{gibn>{Ah+ZD#1* z==Qq7vCF$P()Ah4U}XgaV@(epO$N%D?Fa-X3aqQLj~xBu3~2`1#C>$M-u7&6WnhPkeH@Zu04@<}<)&Ej?=3m1ybp47Q z&D0p`j^f$F_659C0mLyNCg^Vk>v09+La)L9vECtep3N50l!oSj+(sbBqYizPb3dH>v<;6MX>I(r6j}7)j;?~++ zoAq0yLv1(tLIm-GKV=^P95#{a?jc4*p^OqMv|80#EvZwap33bt2Y^zX;Z&^g=ARz~ zzHr9Nb`I6BOT^p2WJYM-TfGbz#P6<>K>tM&_NM8*zD;{N~i295e*7)Mb-L-J&s4F-gfN2En}F(`*<0ZDXt8bs2OYO zdfNe9OKh6(RdU#;poUlj&1t~kQ~-*@7Q*xB=#y zzrNILb3OxzTK>Dd#OrwjBcZZ;^UBXgQh5K$?)nRT0EMCnFroihC>sCbM;ntu1G^9V zolpl2_7xDfO8^Z9Cws_?k0P{c4E`GV;3=+Qm5B`ZpZQdQ6^W;=Z;k#c!q6`5U;-0h zDBkMufdtqL8Din7;mWX#x%YVE*PrvSG+_Bm?iS8PmzTfzx6hnmcxv~8g=G~3YC%e% z5emm1=-zM-~wt^s|8%C)0wT??OwH&rxw!MW<>Z= zeh(kq&CO4kyFNc#Z*J$g)r+l+-tonzao@nJTO0EF z$H@q3GVpuYLNNisjp(7))z#IXeZ<^tza1ynd{u1UYFAct5txuDN|TH zhEBJm%5yk!Ro^c=>tfyeNqcZjU9ViP#rtDM7k89StLgDz7?B>J#wUOryxH*+2_`q# zGf*GdqEos{#l6KH;=a0D-Q9Y9TsTIz>k(CPR;$u!c08uet5RavfH0ED&`# z?RR*9R>|)zSzYDnM=m(I3P(k}|2I(IfRwcK=Js}DSy@wMXKPbaQ(c|?N)~4#g?w#U zSxs3Pu$nzUa<18BJ$zt7lPWMDIV`PCui4?a9?7a)I!z5p1)87HF)|kpMd#xqD|`4J zx^lkpp0>uJ%lp;eSn7zTfJsV9YHV@}k~yvM0w)v-Lg>R~V27Yl0(`-Ai%wdJ$)KsH zqm`nsk(H}&Y+#TF262q8T5XdZB1*QesMzu>H&Fqxu+Y&*Y?bH32?Id|grPP(JPZ#H zudB<;+nqO2)06M6 z9YZaU1`8*5r@5si2)8q+`_cmCFYrPG<3PZ*_z(B$529eu>uU4)c+P5nprNirMM>P| z?S_k-%V1_uK~Tcy|K{&X-r8HPx}>-~zPVGQ3CCD#AH_lEX2Q1Lg+ z|Mg2KC=iflX2HXMO+o&royPyP2l=lz$N#iP`Ty1VL)_8OW6P_(L)H%sIajK~f%&Vw&-sXKKlx{$#QL#EJXR}*VrKd=G7cYE>)D{c zTvWRG4tJ*cBDiu4mZyRtK&v%l4q3B(SotdL{)w+gUQEGpP&cmzzh%zEZO7EP2L}Fi z1J#3J$LM_T*fp=L-S~xXcku-N$p@*)C)zL4ENrSS5Z$Sh?PJxpe&!$s`Pr_Q+N!}X zDLAw%JIxowf5G)p@lqO*0$YiVZFl3?jlgjIUA zw?cb49(d@AjWrBTtdon`!%KJ4@?By{T^dvoL5dLhcN9WB1**7`TY2Gm6-<7D=bvkf=-+Ee6b6?LE+Te=LwrjZ?uiEsX z%X&(kqFO6sLz}l*~;)N;;RYc3>(8)a->GA7;;c+KD|9zb7{2S-4Ge)JOq7MPJSXoK&O89DLbo7dGfGG(G&vj zrOSR2a96jQ7EIg3Pb}7V#0|q2^^x2KX}ReTkf@#~hWY5!yemZKn`9=9hnp?+{O7XLzOzo@yHQO{Ec@A# zTPoaX#+ha}E^A=#2;?HGON)*dqQ0#|@pG$LPw((m;W#Hl)^P7QQRk?#>N@bAnU_(5 z7VdSgWZkMK?AdOD9Zy??%R_Myl`sa5^2Z4QZZ=3_f+K_uQSnP};U1B5-S$ibS{||4 zH}|FGUC_5%`o2=R1XueSeOHjvAhe}oZJ7YNnO5Nz_4+$i%#y_HQV^8$6^+>&JrP}p znBzZ$LIlhpSF5-cp9tcOe;2_LL)ivzP)l@D2b!HgMMpx%d%a+vp4dI}3Qx9G^xZ(H ze-H?7)BiAD*|cL$im?UdOMAU`fi4(#^aF!_+x1$y&)6trd?|5_K0$di(@zy@ zuR#+N7~7C_jIY)K#&%@w2c-r(XY9>G*|JE%(+*-To-zqcuGjrNh&4)2RD2_QC`wO7L!f$p=$D-m&1y zT2OR=$3Fr0$PeDGOL?YTda=~;WgUIlxE!r=tVW(!aScZEzbq!r)MHmJjWWXswn`hM zwhY!I&#bY{(AWc8J0yJZZ3jj0EqLBv1Am1idiUBoBUFo9Rj`lsGHmi?LT9kz*9RL8 zZp+I1XPaw-l>T*kt_f)5`{nCQCv%oi#6Jcd9G^h)t?q!svc_DrikPcHdWL79eG$5< z!k~2dQBQz+8^>v8M|^R})~tF+g(lyWbOO~RV2SuW3fjr&WQE#2tW+N6Q}5%QTH5Gs z_;|yif`GHH0WUtq?bZ92|L7C5^yBs*tJ(OE=h^R$3(-EkJNLa>AzP+-ZOA{JJVLoX zcyt6B=R}ZU5{0321p8UtMiHA;g!J|)g%lm!)cA=1UW->j-}-gZYFW;C#3mV~v6$G! z6aEQjRuh6GXZ`J}bUsFL=NLZ2GW{lyRMHT53*h)1D0Sadhr%Ybgmv!i!-R=(g? zRcuY{uvdw9bNQ7to@{?;h7c4k8SWtb<}SkXmo^3|U?ep7an8X+p}pc%tnte4EPu|_ zKmk+#imyal<&THu0HtrhDTm>5y^sqB)$4P-D^aA!m;fa9_xcAB2~D2B z9SYuy%Ldh)loJ|L1Ac_aK}V!AdM&(Yie1(UNgD_}h|x)QH)E<4q)9K2C>Lv2S`>B# zL2P(yyetB~4gVinYB^O*yjsFH0PcIY^b%Mxpd;*G$^_G5i4mIyNhx?F*Y!T*M%%dYgQ<8XPh54&<` zpajEYOmt2iFa5rmMVfT8APIRzTP3*Y>%ib*rk9*%hV6u}nqtMljPnnl2tOSyG1%ix z`o=Sw&=d25PC>+TzLwftf`pEeHu8? z;+87B)300YjJIH1A`M68#T6zaM z{b9Is_V)LzMo`}EsZq-og*S&uyT6JUYmd|r+A3}kK61GE_ky1FbvNux4OK0mEP`X? zT}O}PD^>RIfs}>UiJAb&u@RUxq9bcJkA--`b}j zkmhLJoRrvo3OsMQb|}ST!dz-V&>GF2EkY7Vzdr}O(A^LQ*J>Avjr-sr6PT-5@B6@@ z5Y$413NQIxl&fVOl~}M%+My}8kRd754l_JTx@;owG-xb`3FJ8mC<0jyP8A#ZNK`JN zwVJTtD{E`4C}Nk89aZWA^6ikm&Ji+xXyy+XB6BxN{DZO-yC<$72}xU23n(Tq7ce-6 zw}h0RXSA4^1*T^Yk)3S9ju9Lr^b9BBUoVn)g9_hrmh+firZ8cV528l{FrJ@i$ew!1 z`f-69l9`vJoW%{YOBSX(urx|&T?0yi? zD$jY6Q1TogWhpSvC{|l%As!Cn;xc=}LWQk|+&PIj`!D?x`AN^22PZRbGp4D)^^ z{H@O+&eUY%(O~~D%s_mDEyE4X8-Op6|MDhlAYu$XEUCZ&Zy5Ygh%+#1US-W_^Oe(_ zU7d%;gA)BAp5#s0i6Lx+h|XoNRFtM&q&{{cW7)j;%Fa%CtI@6lA-w! z)_%(P7{qr^ZC#jdQ^Xg7Iy149PIFNGu}o1DQW?TaO4If;j=@*<&>!Auu~P2ps^@Pa z*yS-VQ0o4i)y97~!YA7&qUE3tY?jj*GZjTihMw_kq~^-66r_gGO z2(y*(RSSMg>O%@Hh}oW-P^LN|cmc$EA+76j92~8Jh7E9j2bj)~Q4ATKXjFJ2z7wrd zt*7Xwzw~+3D~rv^b{|zDs4Z3cOKEie2E;8YxIaL7eDQo0{fjja9`;l)>x4}1M%u#U z%R5}c&^c?D>lM>R8gNIhkbjrVe;1pmtK&9*o?wKO;BXS(yo~AZmOmO)rPoBr3jQG+ z^(AS<%k5|1XW7Hc#MMHvDI&ijUk|CFf&M#`GHQ83B$s{%>(v0*=GXHYK|ys%3b>Ozp=UDLA`JDgdBHMAAtb1mH~6_WrjmTAAl}}RGz6Lu?@||gzAA>VEcf~Ho#E!X z3mM3wIKf-w*w)HI4Wl~p{p%E}?4+`A4a2;Rzen9TeDY+9ioPukvD(h2_{8EAwM=RM zBG0fz=(^N~DDH7F6Yhegq=y%(aSm2?emfNj>=U5`x|T2M2i_*> zw-Z^R3ydJ**_&w@l!>zBy9}? z{Gf;=*r?pEybx{Yy)0`)AqVK+b+RNrf^hDt89s4bj+B_Cqm5(kT!u`g59rnRW6p>O zYuf$W*1Wc)Am*CyHK!;J$o#R6>{qn6X7f8=y?5(7y^gp2Aa`MBums$2NZI2V|JCgD zBzK+ZbM!YO`$mg;w8=dj>P8MW+NJipJ0h|je!qjV!ccfcnOOgb&-u<1r^9^m#LFy> zj7n5Jj zIMU>6NC(X!b*JO2EH(%>?U$J(mNiOaOH}02_FHNnyo|xmg^Ee#G~IfgGI<$l`PH_N zm__Zrj0)UL4D(xUMmH=)uwF<(&>O?P#j;^kTF_Ca=zcC!l6S5&F6+J+2iP7AuO{Y= z=iS}3NN!MSGv1mXSvr)Cp_kmGO}uYua;6tZo5=+&VEJ*TXeQr#YTaa^TKG^o))vMo zr}DlxDG$}us8!@5udFa$R+&g3np^@>owi7{&>?Lwg5XS%`aT~s$-QUVm2r^JO0EK? zxF_R+?wY@sl6wi6{SX;DCdpM%1Cq*N<6kd}jGIuDuEh2ayb;8*Too+53_YlohRlSZQWQJ1%5Hn*)%19TsH3jQjFu?;h zIhV_LVm;@w`3kIOf!qWrYysbJzV`~D1)8^1p2r-ZI5Qo7mMVwn_SsvDfHDlI4gmLPjEeH zdR7u+@jq=TSCMJ$ zu4{O23zzZ?()G*e`a4hbZIp85h2Rno9xan+R|+NvS$R1~v6h8rLEti9=c;hb&o=pw zGT*=4sUdV3fZkGcIF}QDgO86lc%^* zw~@*&Qi4Za22jnyh;f;r4_;z(_JH!bj3+|#P9d@koV`b=61X6OV6Ld8-1;FRe{|wO z7@!8DTk*HtW#itfrsea>*M8Mmmv_!k+eE~VN?wja$^ zWOAKZ)7V;(n7n=?UKTy$5Av9!`tLE*HA0YxNch;x!7e%v@MCZyVHQ}?~g!-UKn?Uv-@>A-G7RJ{zlz>EJ zvE{(20$oN|h9kqnu%COK&`Rk7yw@H%HYz6AL#HH8$p#M}3|J=#5fSvY@o)mpB$xZ! zh}3#1|46kF8>B1B`B*{bci$7Nps7QJ1XigDm0aoky74yBIqQao3%@<{W@=VpL_|>b zK$%DP>7K}y$Z}hWz@@1?pq%1%j#3F6dO=)4<6gFQqj*P<{$Or#pRK1M{u<4J-hhaM zR1Y7QjGo_AzEUST@C96th)?qw(F95~*PN#U@fzXKVWC(X!m`PoeEGKTf5kaI!PUhu zu`F0=8sH&0D!`j))sqWBjx*q!h`1q~Gvla)9D5WR+nX)+o$uqm-QStb-&y=yhI#Qh ze%31pKo5IqFoF1l<36hKERil9q9VQ|Fq3w-EdCK38;Ul%w2_AWcTt+5-KU!%pD-g7sZmKRC zlQFNgIr>luNmZy*enx?C?es<)2xEH(#m>>A+X-u)^RVh>ZU#qqUI zkU)Ttckg4`Q|2ULz5L~$JlqudBZ5vz^k`@h|tQ`Y11$Rjg17JU3 zVJx-qlqQwqZWV>{cW-fy^llndVL;3|ZH4DIIClME8C@~o_{yK9EC)TA5sectB+UUv zpuJj%Z?*5!XvD;YKdcks9t--I20&=NBw;Jm^uBRtG2zRMz<+`#(muzisP}-8YoGEY zWKx)|kp#rP@t+G1I{%UaG@NL}{95X(tT9kXo^hCBLQ(JbNL^+=NweUqbOkUYSVVuI zYc?GvevHM?7~&oB%J(&)@w9IBLV1h@e<161tA$#$kVI8?m+i_E%f7UkzwieDZTK`1 zd*Q+~2bROHq{b2f_BU2r6!Q#`H+SAOpF3Kpey@`P^RsA?vRdwW0SQUSRel~KQlIq< zE+9|)&p#gJs3JlLGga8)UfL0JXP!hoOg;PFw9kTENb9a4Z|$7iOsTUy65cm|Jnem} zdO|1|6w}9YQ6d%C`~ScXK52I-$|H0pW$|^mZD!nHc7K1q#s|IYY?mlDd}y|C7xoeV znhSC|+{5XbWO6W|!%V;*)sJRAz%T2Gjls*>DOOG7S`IAqHv~Q3S7687on!J5LH}!= z|MrI6(#+q?kY!LoFT2hXXc_bNzgT+!QI{6X?(mcQes4|gH-F7HQ+KFBs{1t0lD*e?*52#vh407v!LPnQeCFlVpYfcI zSY=asM}m}IB}B~ufBEaLzT8S_h}Rg#P^a{UgEZcqtm-et=~MoW`mmnm7=FB+VS}rj zTDp-Jc`NI+s$VWAsmG& z`JsM|a@9?)O!>7zwsNq>J)4rScetrx7*=%~J7lECiI0h`FblsY%`#aRZK)i`G9!vEj z*65)M;&}r@;M_Vb{9&&JnjGqBK+xjZzR1onLg7uiKw(oEOS;oO&;D3&_KCsQU@mjq zMQi81qEy&9f6c)KWxsdMmhlZ3_{>LX-pdOECT-tb`&+aJUT7}b!UJT6!Jf@?rE&{$ zV!-yWkRg+*NP8h#(#rMwD(D3D4GHs5Vg1GJOXBqA3j z?fD7vu9{jSQJ=}U4o75{uW@=$Vr__UvgmQfejG(1zP(*QMS-aBr?j8B7Z7=ktPUL!E#@N{EcA zF$+*LBdEvKN1P|;9BSb*iUD*kSc{R$)(oZ|K6Jgmjh;a~Vg_oS44Hr)h;sA%_@h>L ze1HLf8nq=}C;+ZfPUJx+}_t%TBo1Gej&&5q;y%~*d@7lO7N+dAX z9#^q>+`nT&Bi$Dd#)rGfLC^#UZ<@eoJSrE0et^GOBsiFUOum0}%YW3h!q5PA*nRTh zR9p>^QAuu&60k%xW=|9uxp>G;)D_^y_--R7k9?>5T{aaoMIdpR#i$zGn60UqR6=4C ziiGDcnM3To z#+9p4b~Fput`5Lsi5(5Bb9wAJ4vrhCz->zONfq0FCV1Q6MmgxjMuzrCSy|fEV{ckQ zb8ao%$kQ94!D~t^aabpE&f#w<=fUz#Liwl;jFVtrePH)~K!<6zrquN}$XGWYWL!TY}<&`d%|20Z+sQ~#{n>Q>+*BX(by^odIRfGqtyhV#F z-=j0PF*5y}LqyjBKYiEUf}bD-j^*%Bn8bgIRb!+tIy81!7k8F<>4$1D76@$9|#PUe6q){TNHd zuUSTwg~5_UBSjn`u?I8xxT5LZv%?RxkhE22#g0tB-}j5v($%F=x91)I;ueO-{|S+^ zhT@3`HTm^)=Zn`seo1V?5^E^doN*}?>9@T`nNAti{jg7xKZOr0Pqd4qnwVY+_ z6LkG3%8GpT{K<)mE+jO$w+EEudrIWEhEIhTyMgfWFb^r7ND#3T(kNBepz+!xZ=ifu z5ZVm-JXY!Aaz;l`aEPct-=Gu#a$*z$Q*P4t z!H5QsL%0d&W{UKo<3!jJ^hY(Z+;(yu#*@ z_i7bgnvm4_A>*c!NPd((&bV7{%M=M1N%WE6OWljd?R7`k(#J>abz+-?Zp!+3D8nid zrT0eyR;olh5jPwvgpIZft>*V_l#LAtLKfb_Ka>P<(6)Lqs<8$`J~I2aFF4eFNk<+> zRu#2Pd4j81srVp`#y|LWqIa!n$-t+e;oi^{b(Sz*|1+S)%)+ckONf6hF0dAiNCoj+S~yIZJPS$8>Jy4$9x;$y8(Pt-A6&N)`}!Y-~XY^omXfAU8W>0KJsC zjU@uTD1iB`#Ld>h$k+j($?*0W25kg-1!F@HK$DFLzyxHbV`Bj@va`@Ju>hEuS>N6i z0C02D|Et7Kzz}3^YxDL$0rbiW;t0Qg06tmkn_GcwIqmd84(5jDw){4>*5-y*`UZ}4 z=C+i)Z(qNK{avZY2>jm=k&&I@w}}6il!NKNFQOyJ*hJrk&e+IB-@(X{ALQ^RxvhzT zImnUD(AN6zvNHc;S((_`-wgSeu*`39|IMC^{}W*i9L(QjHMP?Je+bI*j|F}6J0mm0 zUk(Q{0~lEt=~({zHhuH7laaYT-J9>tY@J;HYoq?Bn$7?582!tr{}Ps&k@YX5{?Fuf zF}Jd!bF{TF{jViu`wy#%z76lU$wDt`r4KR|Ha4_1GDe`6GPW@VnE@DC*_i)U`>82u zi_eDE@u+&-%#S-3{{aoN`W?p}Hq4SoI@G5aZ0T3N33a+=Ey+A0>W|LvL>Ot#j$$T8`9m?AMmROzmv zPN&mnpRTnPZ%%i*Wx{dhT-1*Z2qkxgOR0J{%qt*B9U8=he-KY&6W4Hd^1Im^r18Hb zU|K#E(cIcRI2|QJMX+HG9@sp{w@#>p75Zh*@3(nyxvF`V_ysTPrEQrT3yYsWBh7PX zc9CA1_jTx}gJOxoMQtK?9c+LVm}1SRt6etSwdeLV1v)(gk0Vc}NYUABZL_42rCt zrBIV6sb9-Deu^?w?;c(9vOm20Jo!{`8FV|HiKa!WU=?RIAw*>$ilJzT1Ux5^(mM1L z-HmZp!rqgo4N5a%m-L~eowGm(i$eu=^VyVLi$P9TXk#JLmb^Dm#AkPcE0X#aDq=cc z3bEfs5jNUbk#1^*eKy3T&xM_0L9-%z3#r}*t7j%NphTHu3Wj(dHULgQel-KJuRn#k z@ZqNs(Ncqk1A!R!+>SIne70ahV1D?Bl&idw){@B*q%=*K_`X?NO?X1nz4Lga(l!}9 zj1|J_x-1l;r$DxnY|hn5gUPozcd@8M1t|(E486P%NCPC_C_E>wg&PrMeLJIm3zSTe zl6%ki*}?;9+Fo;?OsYN&GStfAlv%6KAOY8m4zNo|3@HvLvZ~7gFDIA?Ay1 zPsBV)Z?|z0=Ne**&JpWbOfF8f%$g-2p23`OZY?`e(W_zP*RyhtE>uI4!G*5v2JODH zug(z3%3WAmZ`)uMxK$en_Qf_-|B>hMl$oH=^o4$5FcHV z6mT<2@@!Yv5tVw?-U<=zwX9rKS*2BcbFa%!YA0`zgf0CzdpdS=;#U!d9zX=Ko4mU+ zxV!`(Lk98+jx=dS{Qw0An8i3H`+jcS5fgAs7?rSTP5^uE(;`HJEh}q8g+(%tL2jr@zRSwVBq`}bzSOCJpFW#$kcWAg4*DWb%o$D&QmP8V3z5) zqOp|Id;^Vje~{*VQ17!MFFDD|yFaH&v{0Or3WD{_Syk%^A;QVWa3raA4=)x$S2;%l zhq>X}BBW=cekd(_XtTN*mANNZ6FVxWLk0$F(e6|rq!hDkNiZ(+Ut!pbX@=QCsf7s- z%wbbv`RS9OKLwJ73deN)WEXD0aDcrDg8pUn!;Qhpy9w>J0QaM$wJpu$kzlq?^MM9e zk~q*DF5I!CgU>@`8~wHqI2oJ(32kSEJcHc{Kx*~4q8fDxP`!vXAP{N_%$kch=U*Dz zNDIuz3avK-dT~z#Qm3PA`n^BOD@_AKAINXqHsLB=sh5dVaqJqQ`=Dn^X|bEI8q$gc zGy3&Vwf(YYps@nx5R8 z8{n;|?B0=NJA5ku(trM5NZ(fG5c^oC^myD^`}NwS=EZ1s_U!3E+9bAn7+pTkb(q^- zWyI=W;_X-$?~&tW!0dOyuF%b<`0>-=Ml~<28uuHePhoU?q*f%J7x2C%yTt|6Y6IAU z-pDxf{zx+rGO?AW!IJzs`yXcRgXi06={VZ<@`_das=G9TWq+JnzAr>eLS01VhCNIb zI7M8VHXEF|bgz7A1iWYD+#)!31Y6_(HR8X~tKHmO=H+d~&70(v#CI>Q8f_;Yddu6hSNR>b z;NUh*ugV)QiY=QNV6Z4GU+0k@yH|J^T6C&fMShlt3||(@zYD(KXF9#_I*>O>kL|gu zHixd$>9IQbD55sobP+71_r%+OR~d7DM0^iQgb9$VlA@4e_US+0BG)v3k{P@pZ-vs= zF@Hk%{v~*;f#g5)L#E$c?{Cjb{EzRwZ#;pOg8{(E#ze;gU}Io>yZgTJ1Yu)G5P;r{ z&WhR6)Sc1U#@)#p_#d2)iSd60mX-A{TFT1y`;O1b#{LJcr9Gp8zJ;@mp&^6CAGrT3 zbeNSH_@*i&D?8xr2$nYq{(xn+XSQWFbh2jzS%Ln5{a>NDtW1BgF~&Eau>$|a#{O+( zQ+F#DM*}x2Lly&@KVbhkTYYmb3kMs3=?(hL!VK(xcdjwe#@W`$(Zd}A%}re0*(_Zcnb@2x|4^9Ye*>2J&8vSX z%&GtIO@Cn zhsMBv9~DBX{~FoMOdNlo#RhME1?`Q2Mj%Jy zKTZ9=61IRG|5~hIWd<-au>Q@?R>rmt&a7rk)~;-S+WDV{t+(I-eEVi(hom{v28VJZAj`%=BAfMmA;u5cr!1{Gssw zFX}%JS%0B2Z~&M&n10VC;9vLSKVbFsjU1gUt${AAe~f14e;%-Y<1)QrzPXp_&Cv|N zziSILvvyzsSy{X>EW7`3FY_M(>%Us7U}E54{o7iF)@alUD^ka};++;CN;oV53KN=j zlza~x@d|v2oZlDI?BRu zt7p10uNhNV04Bmb#?^T~+0N&QXWEkm&754_mm8D2Kv1pr!_z|zey8WNr~Bi(*6~*q zL+BC0YW#tRs}pj|kYJU2LBnnO3(7#>L9bt+8vZ$Sq{c8UF{7#I0s4z=7un)QVyokd zqtrNW!P_fw7{UaT!s3XY6&^2+XEUVb?3UtAnP}PKHHOEppYP|dNh0qm3LW;*igQVj zgo4-5mwYbbi}^Usi-U7lZwVq?zK`N$WOIVCk5|{ngYc@<5A$!y!=5hfxV3WE+y$dX zyjEH_A#T?0_StE8dOm=02G5-rfx!ejU$%ii>iK>2*i9Cjj=8|>w$ln2ybYU##W8!g z)q7X40303&PNOa&=DP5Zs~Qtr!?~r%HOtV z@WrS6w@i?kDN$&5KOK|z54mnwLtmJylo|c>dCzDUsjD?^II~~yz1jI|PLHV5HnI!5 zn()E>WF(CNxB-iIWdTOG7;aZu)XY=qvWnLRet_8zK*JoE@RBnu%S%a8CF&>hEG9f7 z6{~!K!9BUB6t|Ahq{{LM4@aWc*L}iAfup*cr5;x}^#gkaPDcN}+Az3zBJJhisbd$Y z5%M&s=a^$0$Hx1jx>TQKZl|soxehV&lY(6{ngpwTbo8`R=)oC6yUE1wd&-D9fB+lu zO!#t?9FY+G9Q9-yrK}?|4`RR0up=qYu^XA)Zn+J=9A%tJntP&^ilx~Jy#u;Po1oP2 zWuzUCrqm7}yQppJ7_PbQvqKWyLYdWO;j~APHi46J(>uZBvt)~l|<#UTe(t>JsO1{%mqEiRUJxr&1 zh!9nMZH1QaV(=hwn+XOTsMkvutend2~J-Ehf)hosiC! zDid2b=s=F9yno&@k0d(06wMl4YC_Ccbzz&~NQyGE)>da3j1gnRUm#_#U!GIgtgY#< z8F3t|ifkC8J~R!9@(>q?%zGN4U8552=Wd*FTho45DB8A*w%9Q-$&EfLF93@8ad8`I zT1AB;Z~TPP*g-{FI*OQ#=(Fr2dwE*G8Qo03D6d*xZ@q3wXTR^F+IxK+PJuFGdl9@a z%?~hJU*n|pI9eiImFCY@4F5%*O0fxD-TGW1bIX>P!>pLLO5mvab@pb^saexf1vK^5 z3=CkYUerxwo~h_k-Tr93KX>d9l(i)XDfEayU`A<|Gvpe#N4kVhLE*&n-VntS6cRYKB zA4beWE@>mZV~|3Mbx~Sir+7|6z^@dRO4c1MwdiZrvF`q88CAAo5w}nVzR2=AX*Pd! zle+p?+iFv!v9rRu@_5hb1I2%4umYoWxzrjc-uxcGq#RK&wK&(;p7ztu=LF?rQ8nCz zr4a_rt;+oXzh=?1&VK$CRRgCgFs(1N(_EZkxm0tNdwL|YY}cFdQ$;nVg>kHdzs zz8W@PlC0WktZFgnW~Fsw>O0-przrx52Q3rVoh!0pVvgs*gU>SSiPOqXl`95??#fiO z`txny5o!#IAKN}}rCtY}#eGpSQUDp=LpLU`M!U`IJ!yW{>e#mC<^kALXv|i~^P@^d z6bj-aze5#tL`(CZAPCq6Fu(4Jgc+J|P9dG_2i8!Bpu;Pem3-7?vepc`VI{(S7@YVV z#LILQn;ZQxShZ%yt~!(lA1iqp-j*TJSbhirn^iw3ndnwG z-!>Jfede0VZ{KZfuD`_=-oviCE5FX?vWRa)G)(v6sDws2vrmxo-qpwME6-|vU%b@D z<(jG)UPQ!R63>x%vXcCxvMnd*$1Gur12mKBHBkkM#B3^^q2tds@l5Ix3hC9nFx|=$ zEBayE%-DUh)%}x{3*!e#wPnNaJ}yz^>$1FDyN90$zZ2S8yW58V2=%1Yj)O(!d zrBl#S?k+|H(ty6fLSGCy??(!I!=_XFw(q|lv~zY^kcz=#eNF4Dbe*M_mrE_!DLRN@ zJ8jct3te{8azd(U+XQXI!o9OwC66nfMpv~KrvH+BdgsZVx{jEs@lD=+;_4~<(+5-p zlaGW$`}|t0g$7o!CPY>=4L_rPsi$+7g*&hAHY4hY&W{ z&nrsI|D09=IsQt(S>MuyHyX_hd|P>VOUZu|y#LpxqZtTf=g3JGXKG4|0|aDmQ=IrMW*bDZ;!_J=P|4+o%^ zk$HMqJ}-r0`q!KFi=M24**)9m<`*#plE-2{d`Is)$)|V}QJ9f7;4EZZ++#<%Uht_9 zK?LZ+s4xmrJS%X-RHA}gk$U{ca9twr%tWxmC6M;H|Eyle%|tcpe#A7Wid*xb7s;!@ zkWokXY3w4=)Zu69UvE}kZ3gj9)v%A!e=+^*(yS`(cNFy^vR1Geq#yW<(@;2Jd5jLXr&0KJU@>AgFT(j$&I{JaV z-{cKWb-(Q6(@e(}B-ASQK9(kTDa&yi8rf%gA%1!02V%9Mif-z5JTiFCxEcpcP{)TI zle%)DPG)Hq=&d09oX1N5)$ElfM=R2Ek0p6Fl}y&@9!UMZ3-(sd|<9C+TMPNtKQOr?cqENH2khHv|3-a zvft5Ny|FzuTp)miaV@&sRV=dYu3=ifMa))(r&`r`{lw2W-p(MnrQ36U5DO@r85`4` za9;@)gBiYyfREHg=yp39eWGMx4iP)oG4?!gdtY(!)wGC<#^?QBz9-vsbKNGUE~^sA z0 z3!GUgLNmZfs3MI%A=<%+d_>c7=$(>-2i*ZUVvpbe=%Wlp_vo<#+^9Gd-VbW1vTpXau9-CDxD)zt!=O)v z-iSE!PQ%Lk$0oicGf22>Hg}*rQQdXoHv6;UW)2ho&CD*Lb!xFJtjFv|9RWXU6)o-J z_dK;cMDsjm_Fg!_`ZDkFAhZUo8*O=Fvh2QMrP|(Juo3I_T7h@TZh!t->6DQ=ss?{m zC?J6@^;w*3t*aG`8*WXJcdLE55EwuXThidy)UBa}BzSI*ONJh!;sZ>l7~GI%R-BK$ z+ghB!2}t)3;fr_zNW>h-z3b`ek-=SGC0ZT%H3E>rT$-Jo+^qA_;m8-hi_?cizykNiAj#yDd)9Re{> z=ai({KNdHN<@TWEaP(WO04COY-}`xF-eDn!48ey8Fhf<@OCg;VU+>q8#QwsGVG-#( zsGNjw-lUFmM_l2OIXXjSv!XQpU>X?r11&Uz7VWT> z9ek<7Zu_Le#{OPY23L2*vz~>$}YwH2rjmDse`KV^4pd;tp_nu@)8s z%fOpj7rgOQ%*=SPS{VbyVBbkHl(KnSY(nMHYAHXFuW(O3#c>8$_*$i4Rm&@{7L-roo{|4bfx(U^gHso zks4BR0Y~h|59i7%5yPkV1nBQk)Jvh9EMjB@0a;F$CT=7XJWL3)Sj%O*Ls*iC^BgFn zy?}6fmN?9r00Bnm(&Q1E)Md=zSaxMf2^_O=XQJ?Mj0IBK8`X_DnqUA?>k7Hfo zhn{fxXh{xyc&;@Vu5K$Q(XC#^tvuGBI+qJkrOI{eYM@oQlqLYD1~9Yx&Ds*Xh0`Rd zTr*$W*;U6F`?867hOL$vTR%Cce5VD-tM!bX*AZDSNQ6rN#S3)B|Y?Dy2Zt| z6P*V%DCa(UoSm3Ten!|aDHCsT#A97gH~$zAA*H2BcU!|wW@*PuglG~cYMt6YKJH30 zpQ{J%I>bw?MpbtCNz9kGEsTW8=E&?S2_0UW&}Yqzw0E8Zu2{0J?#r(eH30RqKTdF! zua#`^EC_8WAw7e185v2&>E2HgHepiP(Z;$X;*be`1* z-mL5q*AU^A?L)E}mUZr6n}VOCIT#_u`#in$si9lY(R$ONIpC2rE9qZd8BZ)rgXO_g zXWDQFB|Mx}pc9(wj}{9Fn+Z1A#Rl0+<32s32a*EroeOnkKrotNN?*@%Lk2l7@XMzv z3*>#041ZJ!4TRVff0|GL$hb+C?PudiX-60{O{A{En>(+0ye@N#bSsYP=`0$js9#-w=mTiQpg zMmsywqX!KdqE%OkBwo37g{U(BLF5dk`9^S9??ia^MsIQ5(83&xQ@j!id!Lb5Ff46b zH6k;#TL|k|v|b@@Xk2?leFUnR+zx^c0hFMA0=&ZV(o{-rdONcH^R6p^PRoxaetncl z0uEX*9!TlYYRPyyW4%#2-QwML&iN#LX+C}Fi;t51HVa^2${ejC!E;@45bK;wCHVum zY;ws{&m4GA&C}B0w9GF9q5?Q6eESxY5bN^7sQX*Jmp(XfZS5P-QB7iGrJzmfNl_~8 zf)>kI$X!jvn^T%Z8wo6RLGwge2+XZoBZVPgEiyp)s*+r<~B@*PQL1GRritM*6llS_A1!oOB_2_G{^AEZ4 z5)aO-b>($rE~ZC$l#)o@5_=->l-zXM>&IcW7-~VLe;|Nd#Gm=}3kKInnTA!naz?N- z`0|jSQ4jd2fp}P+aDx+KyIx@sXsPLzaRVWS7D;l))wk&ktPLuUsn!M3KBSH!k}xqS zhZ9Kebz2rCTp}{IWja=ETfkjqg5x3255dn9x;MsPp|J$NqHy!GIlhkr2aSrwaEF3n z@R(g=qbse!$;T)9q-eMt`E`Eq{6U@@Pn)-kt(;a+HmoP9LcH4#pksDGuBSj9ox7Ku zO{;`4`EF2L<0ZXj=TgES*2WWDa$dI?1@F%6J=PT%lLDH}HnM6Kdy zDsES->N1qBzmuSm@Tiu9q}%Bw7d-X~{Ejk1>{b+ZiPc~&7$f8)1)@c!36RfGpd1{p zwRO&uo=N?siED8ohgI+sAQWbJ9RWQ^KEjT6F%>4H%CleDR5>y{NqT;_A`!nuhF6iM zH8~i&3MxMIkcW-onLVI0dc+gBnTwatwHn~xoHY2>GYG0*&D!Ef)92XJc9hhs9A3+)>#~xA z3Qh3K{Jb0mw`%>o2-!C7_EI&S9mUKyhlOqt$cszzxZbSO8h( z1MLy~)-M{_4073^+ZESGRViFa4HO&=BO}f(;G`{+Um<94{YE_i$TuO!%g&Dq!=%ef zxfrtVoJY~caCF4gapUTKL@|7{c4C60VCT}DG`agM6#2bV;dE7hAjMh@&v0`(QqPdk)1Am=ZX;7)Yv9B!QwItqxu#%K4yq!$kCB>##F0%3L?K;mAY7q;M#e}- zR>+!f@Y$JZ$T*NJPWK*2%6HDZvq8M{8kzA)|-AWDNxYhzj2(q+SC9^bpDzc1!B z{VX2^(W2;$m98-~)=uBH+^KOCCE!&`S35#q4|_P=8t!G$>!WA3H*!Z*fbS4NLPX^0 z|3l*DM`au`TBNaiHGV6T54&6IWL@f1W$uDW+j6CgFmLEu3inlSYG}HtF^SGK4Dvz-^-+0rsDA`0AnwfA6a5z@(zmdE%)??aI zNrlY8Gjopq#>B1m(_eWFy?jN!(Qi*t)nS1{?_yDM)TN-4f$)&9WRx!CNM!L5LFz-H zKD~%XM`lYf0itTn?jVF<6-IclSBbE9x;PswIyUzfBZVK#k0PhcrDs}v+}f;f6_+O| zzBtHL9A2Z1kmVG)9hqNs`pVQ=ic&m#8$LmK2rcQf?GHv56xF4dyvn=G|J;;>%B=g^ zA`F2>JdOxRMe!?UG?iu`S!{c4A(eC4Q|_{LK)%2Wk}CH1+Ppu}n~sCfZ*87BUFh%q zd5tHs=EQm`610nrb~14{>4HJyG=(2a!a~*)htU)1RrDa*v|?6=WA<5>%FtnW9i~Xi zRwreX4B08@{9F33AJ3vx(pYWs-|^1Cz~b`92Xplw6HSA3hm)<=hj(j9c60czp3zSU zQk>pecyx>saJUpv(|{D#HGBiFE#$eUXfPwRS7PLPelBS2&-UAZPqEswl#-se695Oh zbL~R)z`(90X^W-7FKDTpM^I z@1_SeH)H+qL&mVkXRDQWH?oxqa@<(wzQJx8WBbuG(Pg|b$k?_f70#+C3ijSbp6*5= zq7TDYwa;CALWLjsOwL~jc|2$HPz#{{UBr0nI5TO&xLy9S>A12nw(W^r=2%E{yGr84 zeywSSHIa`HcL_fJ!U*fY0l;tMo3RfQtjRxVv>9ntTpDvT7`NbSxR1KvCNI*)M%wU` ziDC$k#TiK7W%JP)I6#;Vq|gCpjO%!7@+2YK{>)Im&djzhtoD+-h^uEupk?pi25a#x zmOR|cNCdlO9-u9~))jj@!R^fE+uuQ5ut)AwotbEu{g7EzS_ z3JJD@MlpPQYG{rFH$BGpqYgqEcfwt5EbDYaZF!I5_G)P7IaeGurXQpsH{xBa1?~w$ zXz*u#a*)dem2q0fBD}t{o~2tlB!4!w&6{HVLKM}h5G#3(c;m5}R8SvY08;rPt0mIS zS-lfhK3-CGg!q8@)#s=r-|up8cUHrpXp2$t;G(`-!`L<@DXO{q#(?f=?n2rNo25&k zQ#EYTgr+ExKHGA9ZP-(x)1RkGk&=zLrNI z-NoFER0e*BZ_p}+sf!j~Oda;ZmhZU?E5*975dKbI5{={gz<>M`_k`5sae@z01wGgl zZj_9;^)Uo3sV%wFXssI`!qqFgHlgVbLap643!% z4v4$nYV+P=4KZ$Ta$1O0?9joA+epHFxETq;zvb?B`j)V++wO=yfdscqs3kMQs+AmP zjH5bYnvATEYQ2&=K=fk;K( z9omH)VnmSuJj~(_a)foqxNOYm504M+x?9;_vM|rmyfA4qIRfvpLr^&&%#OQ%LX;voNrI^y$J@Hrt^vj4mW%koDl!+*6Z z`BpRV_f<*4#jp>}=UyFoS;*;0g1Ly;Lbp=4yvs;;kXC1Y`p7!3eC(j&1Y9>IWjZb) z*>U-NGE9X2LOC%O-;48k>4|aF>Eq71-V@?Z?}xKuIY^E0bOph;Hh}ZRov#Ns#8j&B zP=t?(vV5+xv?cLvf!UqUAW35H$Dh;LUlba3UvTs}%x&}-x*y!y#l*J_N-;Hxdpf7a z32=XzIH>SN#N_#I%dPEfQXmqQ-hOEFnJA^t8LQIed%n+%0R!SXK0W}uqp#wj0tP>v z-(1hj@*$k(y*NBRoXILk@3(zMV)uI9JNZna3z%yX=b8}|sI0CkL_{X9@7FLCuBeG; zfRawv0Oxh`g@@xqZkQWHl9KXmSsT%~v>3UA_!ifp1Q&~jVF)fW%!Q|NPD|3A;0ys) zc%--WTnP|6It+A)M53?xE<2WURivClZ)7JbzGv#_PRWwAFY5GIkWK;!S?KA0;RI8H zg3~X*WjtKIitJD`U z`eWl_j} z-e5nl+{z8dBXrxtBnB@e!V=zVm2p76S9h1y@$VdcMLD#P7b8eg8(jTBc`JvGsZCSI znnbxcEJw4PTdTbo7u=1}njgBo!o&?N%+3nrrz!?r2IMoY!czA;vS<}sSY!UCPp-Cfi4o%CpV>WC%aSM zje^+W7;;x`wqo*Q0DwJe_;)qulYU0*U!)pF==#6dk z6Iz!8ejA(f@$-l>`&Ucm7@W_da^n=OMb@Vc5cSy%H>{LPD6zJN${?=qwI=xJJrzLH8q%$;4!Hz=jcLkioC}XL7X4 z4Jv;^nORmp%%T`_qtmZ3fE}2o8NT7?D9_QpjR6)39u zkckZW$-6jN!(SVoHG(&sx?bqRtEsUpud^QVMH1P7=FxQ2$|j4#&iQA>QF=LjquK*s zU;3Yh+L`%G#;`$cJTq zX0uQZBZ5lNyj&3b&YIQCceIR{BT{Nnp4Dd``*JzNqRTO79Htatj|MM~GASqr)L4Rs zGPIDq0Aqw#_6_L99xw`k2j~NpycXklB$N^^8jkE$6?*psW1uK$JutEIj$uBqKN&gq zOJC2t!KSFFO-9XNd#oL;0yDmKc$P(Ecu6BUEk_b=-ixnTlRz`v@%OLVdTjN0c}-sb zXByO;bSsvFd#-=#F$lxnfb`}3l{*X9VVR&;i3#5t5)f<>PSVS{Ix)HtF0#M{A_#Bs zb{bTfv1-7CDYB^h$V-j+wKo+R&1*;F6L++GAvF$)UmfWvY@Goqg{Zq{AK6C5;86Ik&Uo@( zQJ}wvG=PcMB%xWLZD6pHi;v89)an&9Xy~{glz>LFmj;q4IMyrSOw>LU<@DHJhppRz ziu65FxA)^LDzVmRNQrJY1`QmRNW8${59UKVYoaQov}&SKcnHX!H=)kzJW!n-zeP4K z>G?&?OOFT~n9nF@oSySnNP7(0;FKqoD?@G?GHfffnn=3O2CeX(Fvs!5EXP)n?J=|K zBT(0KRBE&d&QU`mB10=XR)KzDGaoC4u9syyeQ*W#2NCGho-#%?aQm&RSp{wEjBzSq zqxQALwMWVYwoA*K?k6-xXAst&;@WO=@C;P#t0VRk`<=1JyDY-EpmW`HWsVZ*bJ;LI$!qbbkQGeVai zQpa}O3_XBx+l-T5F`mxw*2LA5Ly_ZgR+gxn%1Jo2rZqGevS7-RD*8ap+J62g`Q?0J zt)jf13r}>#%K_T$!H49_n~=!+qhpUj_&`#3f{8q>`{XctK!+pDQyO0zjwB8%`E(Pl zN;7wo%nx^2npL&wV$S=}3|Ai6$i4g?Tc>9;D9Vg@1CdQygH^4kWYliQ)`pbitjp=T zACi3P#rjEE9XKj4aJjc6AfCOj-XBmw6A|fM-^TU~&c1_lEER>9PID(4e@Zg`K2Yn{ z(1J1IjN+-5(8D@A^z**d2DBTQNoaX0PN-Ki9A=9zF{!PuU-S>Nr+m( zq$XYGVFK6V(xF;|Pn+ndnaAI4Zm^E>GgilSHuHqqOZGyHfWVO;lEqPSoIHK)uO=sQ zT>2=KUh^3p47a~@gLo3_|ugw$~9*TEd zb}T3XF*u*a_>1SPZU@$7o z5XXvOlf`HJiqmgt@0K!h`03%j5+PSv(7EpI&qpcy|RNvJF~;}0(e&XtcL z9-3L~(uT>d8{agRLu|Dy9eo{$tXY5E=2~=0DkG}MEVaaZoL}$~TAky6N~CHey^tD6 z%+^+HzJ7lM{;f6tlR9&mgQJYh{1NM3r}^r4NkWgfCy$jp_Uxhiw)COm(%0OnPRYct z3Ghb9rpD64ZizZGqlI|wTO=d(**TNzmq3PH8WR(UI#;$SJrISFs{#X^E zo1bB1?WnYE#v+c5PoP^Dibe;6O1=mJ63LYC|tD+;kKu! zV{Em!9X=*n9kNoRqPPXI!C_2;(<`oS4#zm$!7dFEsEIN=W~jqd_O&MPQ4_6X#(CVu zXKQVaGc_Z!Em^7^-vBw6GJPEbsWFY+7WIeDtyEBX2>d#3C&i?H4>%2~i zr08kGLX$-0vyy1Df}|4j0{)$g8N9cRvSh-Lb~yzTDaEzG;kOAYQ%t|=j|8I_`4&(# z@*#*=eyd+lPV0FWJbSmI*eOk4Wmgi42@`KZ;c0IX1hA?FZ>fKl8=T*H&6Dds&6Iim zY}TgM!Hp&aK9#u1*lu}pxNxuypZZRP>Hx9|gpuq1|a9gmzeXqu;DXIMeOW8~GE&43!{>~dmmh=~4wwu|v>N#!@J*t{K z;lTWWM&~`=8#L9r;t#P)nD+|V6CjTLpR+~Q|7N8ykd2+??=>vTZj$k8g zx;}cosWk)R>hA|(jp|^q?R?l@QLPSSq;KWxK1j?hw68%$EyN8P)Ev$zf19d#*8R9Y z-pY9|ORRi7Fdy7Woc7MRvZNk6@8M>z_pDRt%cPUGr1A1&P-lC*#-!{%ojS{xm*>*M zmy45;-bdM%hYQ)qYJhfO#sSgI`cZO(LQy+a;J4NO^?g}Rd@OCkwpCs-p-%I4EbZ5q z{e1(5#C-8j9NNIGVHTE7@&o{+n${(Ki+$F93-x4O&`={(fRg(5&QP4?c z-S6CE%V;i(_J;Oe>Lr78?{VB+2>n(q}Gr$wdI7xsLP zuju5U61-Ik|Bxjmh`+jyDIAlObZN0+fFmRg@xApRSmkQo@Twb%YZdJgJhw1ZR0gtz zIHpfuz;p#n$9mQI)r8UR z`2m>?f+ljGKgJCXrz>faM>#s{2Pcu6Wy1(URcXb{Qw^tpgpR)={?7s6WUbSA_~N^e}`BB7+i?^obppA(r2c~eee_)x*y%rJNWQ2)7C&JOIt^nQOb|u zpa=h4_t^(=vN$>SW{fk_PmTh3W)sQEu~H<33XyOtcwjz##ea}PaI(SvO7_C5Kc94gM>3htRMDcEWDVI-C z8KDuWLy*qqh@Y*dWhhZ=Xj8a<8qJOkI-;h82b{qW=zG|PS0LlwOr7RcR^tglptgHJ zQf>I-7Hpg_93kd3s=$9;;t;d`|5!Vx=*rf0T?ZB0wv&o&vtpxS+qP}nwr$(C?Nm_F z$y|G%bLLuWwtcbYz8N>U_}Uo%Xd}Hp{d=Fc#WrLulps&(0CIzCjxRS#Xz-%NOgq3R z1}OTy{U`huDUZy@OV;SNj>S+u{xUvEmoHFodMU?kG%B5feT*whox|2bk#6NTf;*o= zT&rmIbpUVnL2Cu<&qD zeBeXeI(QcX!O+1`!|BdFMQwb?DUfec+7MMqz2NYJD>AiVL}-9on2a|Z!*amF&;!Kq zPdl1yfosjc-I^z|-&UTZJO_Y0;6us%D<9#2%UZ1(x0jBVO4X_MY7|S2^?hk}WWvozm`FWy&irRpGDzUzYMAHTOdr$65NN1M+QL<2%o&N)9R$qc$=9QG z@VW9hzhS!Y1E;;0z-@4T_fXuSktK@jQB(83a?zWIjMKC=F3eu77r+8RbBX`4yF0&C z2(6C4j?YY+UXi!{jORygh3{k?Q`d|GAV;*_3}ufi+tdroM2+U-Gp<;MCmYMu*_9$0 z#K2TVia2@5q<}FbhXH%%na>cxTf-3HZ0MpAWUL%?TLmqX3r#?hGfgx8mf@;DCagv< zsS|P6lQGIExdMrVtr?w5pNs_9>kpwEMW?&6XGy2)mV=1|?dL#9B#!ZF(-Z zB2gNM7W`bZq#oMM10@5!;Q48$&|86dlQQ8tIcOsRDDF}i>2A^9W^RV^qE;NClEUmr z@a=O>D|I)ug6eM}|@cRer&HA_1|1SeU)=D<`4pQ?hS@^!LN`R(h#P zuIRcTrgCS(GGad(PBSb*3XJgOfKH-)O%kd)L0>x}-3AF4YjRnqHKEGtgDWkrv4?28 zr5_m8BNO4ATyCPYFKKR;eFAfa6*G@+Q)brw49&%cV65d!u`REC1g<33cnIZS{I#fE zt9?Qduy;xzBnu=x9Rd~nE&%4|cFH!zJ3#KxCTSctIC@rvcvNqI!ZPzS{7!VvdgeG_ z^txD{=8Giv$lq)RFP8kSf&PA|JLgAi2?&2F$vMebWg0z?}3nLdo2+8zP_ObkxMxJH*Kw z1~E<$Rq@7!JSEAcT5%g47htP#PPfbPLCXJ>gyWiMAcpT!CfHZ;Ga5yM=o(S^$ehJ0 z;caDgv)q4~_Mu$~EZO%$Bi!FUZ0s(AZlC52O88vGtK&?Ety4ac!+pWzb0Sm2$`N9W z!g#TOYTZqFxLVh=wh*WB4a3l(_ih|VAlgE){YO)Osj0I`9H=t8#k5qb*fnmeG$*;2 z(=3Qlb?47~{$$gT7$fzfBT=oQ!dPK0#_%YT3dGzv+6~X!lr`;+ZYs(*PqE5STSQ@iS6*}WtHKAV{9mD0B{&Qb75iP= zP}Ug2ZF5VI`BrhFt-dp)Cn-V@yB!BTBWM&+HUNvq;l_MB+-r>)eKBm}_vaPZCl!P^ zP8pW{74>V$#g$?#;4{nea7l?~#by}lWIo=8lZI7~*~J=NWcG_W3nU*o54lF2;Cn8B8@s%r^! z=`p;Fk&)cBflLj4gZmNHSzgONA|<9VAvX;8%&@K8D<8ahbtC(ES^5LGwiQ$#i4G$w zQ+&i(;|d6L)k~wp{w;yiiT3{90MAq9coXzmwbh4$moZ?|^BMd74brU=j(YWt9&Xmz zXJD)K+**#l)Gd`?Z@-wk{~|_DuZ^Z!Mv}yW%fE}JRG<$S7KS)QHE29P4tP$eQeQ=> z=1QNy>$j@dg`tn5G(k2cY@G=s$X7+;c=HwW=SoBLp8Hu(GcltAte?hNkbAwf*wd;S zTy-~5Jsx$_Tu=0z=bybEl5q}|@?!$&m#{IcS%bq$*(=1e3_1-zZ*K}cXb9P0Ht-G+=}>(y^m{&6Zf zBZ2gQk@zmbC)X`C^qQ@r1ncu$kQjpvwWk_Mjloj<2^kNFnH zVHfYZDf+6wSBNN|mwux>Jr~+yBDA6CZ7UAyjl#0&CTyd>_T<2V{<@%@x{3`5^dn=l z2HNU{oj6K0GfjDg=5OX^*phyU^@ADU5ly~A(KZP(zU%)c8xqh^#FXP=l6`N;Dk5#) zTU%(Qx(q-X(VJ@D5)uZ&rDB5U#Jivww;Me%uddrjK;$K?ht11+UXl=fJ((Zur|UK4 zBLz}|NO~y?1lR{lqwzSfYI>&jLaqkm2kA_pNrUQxH!)df&7g-|Z<+OrURTAehfFht zbuN(tdB^Sd(;U4TMaD5XF9jSBqaHNJ-1*v$Js$-zYtJNlnh!&IwOI|y#MJ1QfO4UB zrb$PG=q+Rf6-J?|2W~!ydYxWpwSV8i8jB7#gJN|$fG*0SGS+X^i^H~LAF~ty^wH$Q z5i;FNIGO1{klncNC1~UwC;x_CA}O5h*RLJG5g>|}e4rq;T&@=`uXK_Ryp@G2K16YR zCnd}FrW%@1;t08o=3L9Ecy-*_o+JGBxU!*Z@0g4S(KhWkNPqDx4S)ET|UKC zv_D!g>PdZdAV8t-&+da2sZCM4p!)_qgYl7Su2+Cz?s zlpSABXA%;%ap+4=R69BJtBTyC*o=&LSno4{!HuR`(i@4ZbyaF}Ab5pSw?R$lOX;sU zq184spPi0|;OGxLoWEU-;Nrrqa3^K+4a-CY$*h&~DwdXftoY7h?T>jJ87d1LFL}_l zzIbVvyoP@l`^xi#&1e>;M`y5flH3nyW~mYt{6Mwr_0De+qT{hdPHp zG!kD~U3%t!7)qEK|46d@DJlHdG6$BwA5mta|BAaaGk!&s+3=ZI{_sisY3g6Q99aJs z0?KTEh$9%;8Sxod{s?6=(f!Nhzji9H{s}z%ho3X!Ka?c+jPzf*=&$jN|A-9z=`H`Y zQsL`#{uit_4FCUt8UFQv|Jtd*`X{Ht|MXm*iH+&sNXuaZqUUw>2qR+eQ+Pns0{47B zqbSiWAU2->5X7_hsp8d?v~m+wC}VqS5x?1YNFNXt{uc30xmT=tAcotf9itKj1M-IKM<_IpnG z_J=7iYC(Adv~$G(+d~=7aWnd3)F-D;BRYJ1(2lO9`^wNd5;f6})ed$;Uw&1@zgPsY6wx@@AkkgUI=MOFiM*% z)% z)=e~f<%J=gm@hgO}ZP~*oiNs zz9daNG2c8f|4!zIKS_l0@#9&FF(hC93(`OZDb_gx(-K1@KXB+@)P4TUVa>Bq@CPtp zqoc?NOPd#f96izd{ApsE7yE=&VTxse3 z1i*+2A;<$&A@k)C`Rg!lMDxhlLh+C)S)> zMDkb0uce&^RvezkZ|bm+7sF9eU9uE7h%l5hkcNrZ|8QUt4Q{K$jRhaWGyu+HQRG~| zx3v=779emH@n_2}x+sh(^fE>S+UA4uA`RsCXMHdLv;2<8r$^xqBwR-_dcojD7rD-&IrD)t$d8cp*mKeZHryfJPIK=W3926xXkkJs+9`a5oZGvR>K%+ z+1Zq0mlL5xavB^&V`q)%MDMCd23ydP9^Qm!VoWPS@#8Fl#>2ChnPXIK%`A`<;z(dH zZ!*ahLr^O5Nh?A@Iii2CG1=g(v^+$pQCK>alS{o|yXO+YIdL>HHcmsx)>{``v%$dX zOgXP*gfuhd&%F__z)DGS%VV|Km}gP+u%Sp5U_yR#hi86TN?jp4^!7QnL5`S8>F5Sp=yt{tSYPoeLL|Z*?5=% za?%z;aIauYtQe6|xSxmP!CnUg$?(NuYw$Udk*T7eNY`-H(F_vW@fh(QX4G0OImOUk zA!tzsQhR}$;ZEZpwKR_#vPSro2}5R$H$wyJuCxnt>)jS?b-fV;R^~uBLYsCF-yh}Y z=ai6QtQhlX-iNTVdk>gFni9Ql5qwi)xdt=QRtlEsl( zwT_vI;DfLhmJ~eTG-94v`ns=Izjb2c2%$WbNxdTdj80GcvGov^$rNOrl-I#~jd3WI za>RX61B2TqL8LMV?~{O$w*u9}BTmwlH$?QBT`%v}oFcWZ6!_UIU%C zI@ypii{T*Q3>%x$$w_Ruy;UQg_LB6S)T@L}GC{<0Z-GvDiAzl}RL#qLoj*8?hNzL}{fFbd!mPMUJ8&yDX|)EjzAmvzWF*_UsQ{;;Kxc+BPd@?hwe7wjANg$$3Oui|K-6r5lm6S@^i@$b$ZKh@rN4-YBF1B&(X5qrW2BG2oIR zW*mmsR?XH9RSHH_2IzLgEH@ek^^DSn*HBwt^;xmbBJ0~>%n1?LMQIMw+oM+Su)$Cy)Jx6~p)^9(~pX+2s0D%z`+9aig zN?m}l?q?!6Fr>{M)HSh=lWW^1GM6Z z$|*RO1CmGPu-QdI6m{dnUBU{f1EW43>$>Jgkzc0^s-W2`;fSV=TeI10uc4mfrFth@ zn5DOT4o=T(9CK(MS`L3ds}^7XxaiCc;ICW$JRa<`ePEN8AJi>f;`DPg&VsaE?%o&$ z!(sp-I6mkR%cF2P=Hi^z5y#(C1?YlSckXqd>u1m-d@@UX?`)w@!K;*rF4S;h1EYb* z^F!pTGI&reFctaj%OXf)0}-DooF?${z*_Kqaqux_KnC~{e1!FH}#khFfVz_?8 z+A;=bN`Du|&#}0B#O2W7ypB*}=VK|6@YUnmJJ%;_q|1qEA4Ue)l5J*|tLHwr0@%Wa zcGb%K<|sE}PbL6H2ruCyt`h+)-^jO?{KA%*Yx*lrB7uge!E{&%mZ%|Sbx{x(Ov~TD zK020q6in0eY`aDdOJ2P=Ee)#qCett#>9APP(}M7O=$ih^qlZXB_dr-{g9C1R3WV|! zh{FmBdnFmFn{M)B3saM4rI)KuofF$3x?NJ{`{=ep4TZcOU}5b|%vv41R1+M-&5hE^ zN@!2%4e{e}Xd=w2cAbJx(A1ic-KiZ+e#Ssv;)o3@spS!oU#~m(vd@ES2&7*#XmD`r zWD;!9COcIvc2^vmxQK;jtCOAs?HDpeUJR@G!R5$si@y4SB6I>X^&Y#vOVAxU z=Wr4N+q03c4=e|QL`LPd(bYFnNr}wJXDOXc&c%lJ1BYF*e+I( z=B~#caB7JY(-qB#U*YO~Dgs{jc02NPR9^lXG~mi0aoKIGik5_y4<9#e+rqx}_Vsm9 zsT4wtP|&W@mcyfYY=BVWqGcQnfj)1Xgmsqa$cj9KbACagauz}b_C;1!Riw$B)PU=l(BcvwaE=sH5s!20=HTgb={k10X?DN*RNy^zI?K%L<4O|5e| za=>rMcCbgaQK6PZt74tRST1o9ceI4L9F$XpadWI|3dRcoK_t5HB=v!}I`fLBD zPnfDMR~&HJP4g-%cHj3X1m=^RF#0KWV|d3)J$vV2;fkOi3G=)GT6b^$Giz7rHScx6 zfBh64CqwC-)?C1t&$UPRhcPI+~dY%Wmqht(CX zK)HOv0x>>B_SNr_CJO54?eJ?Ed@PYIyj_=q9-y|YF`g7IZoy03*B|XrzbHSAh(C_} z77)J24Zvz70n}$;+RKT|S*-1E6Q5r5qiM|y`Ue5?qs=+{Z&O?d?tDWpU*(z%rdQ4n z?jPike2`{8?}#|N)F+uhp;Ar+O8OC`Ko!$J$@?4EcPMh4E)F(g^fz|2XkM!v355k0 zO`r4z6yB5W7;nTc3uPvXU1%SwJfWL#Jiq>Ifz@Zxskh@pTU_>s{0I#XgrW0FO8F)s z4&DwKJvr}ucJz!sgp(=0c)utFCzNka%Qrttp@*3eelH<#5@AVOelA#lj*ShydqU>s zx`#+*d#86(@nY}p$-?N>3AunyAQ$N;$M(MRVqx2vg74609IF1Rhv^67KQ*`{Y!*&% zLT`9$BWdXoC}og#eRbw|Cd@2MNFJvON~VO+R)CNb5{ud`uA0xe2JKM;?eWD)!s_%R z;bp0m^YBN-?K$dw{xOu4LDw*~2J|`)+DSxxJ}2a&YNIFG=&)d8;Bl;(J>mSab{bP@ zCY~MdHJy1*ZL9H3-{&OWl65(N$5r8Ll|x7lGX-L*+ZjmN@ENk-OxUk-^;f6yimA0b->EvLcnemN1rEh0D2(|T5RuZ@OKxi}%=0sJ<@t(dmjp^b<> z-@Qx$J{%K{H$jGY5^xZ#SO9l+R!W~-6Az3e5VcE3H>Y&Y*z{~d!x?1;=`q%l+Q*`9 zafTLHpu;%vhLHLC0ny`?98OL)yln9zD6ahJh3~UCyEX=@N5oqjCv?mTp&KS0yShU) z=su^fJcE7 z=YsFM5JQ|dk`8TkS_1U2J_9GxK%J;)ju|VZ#$NeD}eLh8F~BK3sD9?MCD1&kPSeaUQIM zloRTAWZSa?uiH|?b5+u3OP%mCW{Ip{@tfSQjQW(g@knhX$PfqPdH-q>geGlP8FrE6 zG2}GV(Vg~tUl|jGRo@|?s3ZGpDsSNB{hR9)a=yoX%&UkA zDI?sM(QpsOl2(k9HJimfRIAKsq9fV}qHPE#1Auoz&qikMr`=XP)fT@k=DtMCUHU7> zU9IB&;gEwxBA#%6YcaAbV5m$FDL4aIG}+c~Wsr%02ZPQ@*lp(c)FGNV*!7swbE_o% z_V{ek&Vb`8pcEWdZpUo>NfrI_0HrZzx!4tQ%HpvX<+#m(q*TuMWA;|`0XtGA0DD-; zD@&LKECz7uoz4-{T<)?CDx(9M&s1bZ>G5_}G~?~6mm{&K=;~}#a{iXDsJ@ywUAufj z$-Ut?Xs5lasB~IYwQ?*?K=@D|G4==qy+N$&qEGO}7#>i2tzY}sz{ecG$Mn|>-}e*7 z#t^4u_f{pabm*fB=RcH$m)*2Fyc7C_Up zd@%LYftW~yO0)GE>-FI_C!nbQO@VbQUF=ib?dItZBa6cOD${bEX5WM8yY;q&C`a+{ zm+0a(#m(+WS-5VbUtO>KD&6n)&O8l}nR)pNyj92ijXy90dC9Iott0lf=|Q&H=(t)E zRz=CYro14cJww02m9#ryS6r!Tw=4Q8Z#G($l5c;fFEvryte{t!=T!O5$cUHz;!^@z zPo$%XZg7x=s=w>L^g^NF;-+mc?H1bK;P=GNrwz>68vaR=@nd)@TR_DVmwhABMbJ88 z-09ZR%RUKm|G`h6Jy1&Qba3gTSH1d0L)b~DP|3k^flFrdu(WXq-OP;Sg1$LjtYbbe zPF|%BW3gIhsch``3!^Y<1x%f5QIN67*q8|WYx@#SdiR>_&L_0z&*Oimv21^zPksr7 zzLd!<|5y9U@+B4iCouZgIF{}2F44`<_-)A(No|22_i`}=tE|4M}E zS-#llA1wM`2LH8Om+en{@;?Q#UxL{`q)p6UpEf<~7lZzn!GBGH+5UHwuU{wj-^88q zOPBdiNBq|ynC(wNssHc|GqC(aeERk6`Y-t@KI6ZByZ)L5v;9f?`aiK?Ms_BKf8M&& z2*++l^vc$zp9Z9glTe`p<9b}1X8(Qwb}$g+18n=jn{n3e*4B+%O1rP--pNv-QJJKu zM45P29v4ug`pN#|!<8uR^LNR#w+HvTeVIf<md~jyeUezZMUiy#A}OXs6AcK)YauF@BkE$R=xN%j=rq&C+Prmi zrX(R#)7ffTXBfFt%-fypyx!cMiF1LU8QGs4AiABlL$_4ZpPb!^W7=oO5|Ebp#-&&i ziVAt(mY1|ry9Q3GU_q|)3af<1iiEUy@pYA$kh#6?@4CF;1DTNZ8a&N8nm~L*K9OGi zoF~a#7y?K7SRbZ6Eq)&dIwW|MnLnJm`dUz$6v@dZ$WFHu+X`oGiLhyyX3!C|C6+!VPkM;N~hcW3|!FmXf&D1pNwYe=nupu(70Vc#=ojL{%e4YT6Hi&1#iwcc5*GJk25b z96td;PHF%R%=I%ZJ*!apE>EOpN+M}Wkf;~A#{hP?;df&)Z>sZAM8e%s#_5>TN=6FX zPqL0GX1yXr=k5TENL-jBj-t)6nfKHzZbHk~sg@an1A@Ol6x|xjZa>dsoh!ou=UFGM z2gFWS2GiNI7rGKGW}fw%o*qOT%v`}SASHZlRbchUv`N-CU#tZqwAiNF^r|Ejc$mkT zNK(-@7qVO5Gk8XDSZ%5evy2=R~gOd-KN|FLT~0fV+Hro zQbfid&Wl4_^Pn^O1}5Chp9vQQsq6%XVx*!kb)c3I21z>h)gHEe%0LBxn7cAYX*hb0 zd>nk7Jd1OqJQneX;Gt1L5rHH)G55Azk+brT3r{29`>y3|a$&S1a}?Vty@l8`?I9Er zjf#rCyvWvYB`P_%6teoAH?x5;XR{u?gv+q}6k5D-I8I+B7zp`rq)NrfkLy~$O*RY` zqRe9)?eJQy(Y}#H5RYDOT?M&PQm@SMZpu-_kZ`VwtJ2V|ov|fiXjOJ%@oZjwbmF5r zGB@98s>Jy4S1LCO)aIV;@u<)E+Fr3>k7PQjPg(dPTzyv}Y+J zDG9tnyC~%biNdHa;tL1@Tnyh9c1bixXr^?XH^D)cq@hCHum~C#WM-dHhR~re)frq0 zD9btMG0Zg>Pd0>YVJB+5I8u8ea0OJ$%J(ZJt3xmZI9K2#nX}IlJahqLD2Ta3z6T_0 zaKSEnS<65Qt(dw=G|8ITvA42k7Z;4nU(*+ROJE(DgoQnYme`VB44PkHB>erh!91C- zrzixmV`9Ys<}8EG;*nj;TS_lpLYA*)2n6{jkB{F|N#qk`+cDN+la()(@9~444%L2_i zfKq+FxbCJN!!~aP#1lfEa>@NlOux}8C1j+(tHs3Oq5?0y5-Z>L3dDqylFU0rLUHgn6; zJ<2%ily~e=@CWigEq};_Wp>c|JpRBPHs8d^wKS&kH5iIWAZxIQ1vG~#^R?J@Qc95bXCtCho6PZ?RaO?wV?YE=6z1b^yMUlcS1e-y^Qw!}*n2&FYR z5EWqMyfT6ihDoznz02^znPdq<<}7oz5n^jH+Jm9NA33Q?tp+07i!6AA?goYw zQ4_01pZqjb?Dj#3>Gv$c?4FSqSM)>#zS6rBahCB5uPityHmAXi|@#>`;r$pag#D-VgOnYwQIet#w zRWT;S_$ahj$9Yn{H1>L{xdYXABt-tt-?*G}p*nntPJ%X!(EQdybdLDN{(#=$K{;P5 z*KUDlhblja$g(0Z@axgfTa9->8yM>jxS-DcsGMtmc?1ADsc=0I5GH6Lu63jGjzQOL z0P^ZZZdqQuUy4nryqPrh`1-*-$ChFvz*HUYvMY_d;R(ouqsOuGQUx^-Cc-)b<9)bz zJDk!-Ne8AzstuzX@(XCRHIF1|I{b=!BQ0al#tPo11J*Ucj~XCW1mF$S1J#9r;zi-( zCy$1E&yp(_Nq!8Il_kDH(L=`85dy4X4TL>&M=I3$F&Z6U1-9Vn2x~2(m%fz9YRx56 zg~rAsrCUA%n$FqW-V12a*gmxV{yTn;igI^^@ycO~(-!&1%5nalBE?mp!SE-a;i z<{03OSV1~GM~nmw&H@v2A(s3VQ9~%a=?=~!qt`(l9lqXWPApF5Gyoz=)sNx1(H`_1 zFxXuEShzj$^Oo+nD6d96w&xZQ*~YR=GE#MpyYpb13y8O8ML*Q-jpeSwEub^{Oc2?& zuZ&}Hb$!v7=?N#>JjC{5&j%KIXe%-Au)bc^^&$eL`p2rTosG~6AH|S7%{4o*<7!mh zFh8P-&-5WXmku8%OD*Eo$PfQ5z)iZKZ;j*fF2bx^RRXMB|RnN#9?Nw0p+OE|g1u)pBUh+0#l+b6m1Y^cw`2kN9iUh6%1xn(z78<;ZhE?T$@r zuW#mRx$_RXthZ2+f27cVX(=x4sx!ZOWKfm{wE_TNsCfk7wMCppHgg6E@M(DhayLK+ z-h;}`uQrv&xdTf^!}JSged(MdCwt8yB$D01bGeByI)B_fP8l!R_|z#7Ey% zopx$T2z_LXs_L;_>N#-9#cPXT}$pwLh-Ktq+-|t zzj~j3G0tbB^IN$vTqd6|#?e9c-_U zvs6E|jBe2AnY-31i)uofx#=9%lG?H-@nG z>VeFXtxw#A6}x}bO@!@WVmn01#$xjIrJP$ON9h`z6Ta45TG3(#!YRLw^4MUaXP$YAwA zRI{2{Sf6{pE6>b{z7*^wzGVn2r;s-){53V*jtg(s@7rN>>mrb8rn(hlhh$lQ$b~*p z1Dsbsjw3U(+_5>*QQL^?2xkTw0n6_ynr0q|xS>spg14mr>qJm|Yjw=R<95TWHa%Z6 zB^qAcJiH8YND}}K${K2u4~Vo$FjU}*=P6@=9pYzT`F+S%r=&NcIDO*&AmpW00^ip$n-ee(`_ zt89Bc(V&EU6pE`Z4s>GWk#WDJ@~uS+o~&|kQMuJF*E1TK%3At^(Q4q|-!+7$>eR}S zGnE!Ar^(J89fcQ9)B)!A%^%8vk9YV4HeHKJd z_f?d}@LzQ}UqwS|*}fWZzM4b+(eK3mNBPj7cI5sVLVa!1 z{oNh8e@y=BO8cXC=)X&?nEyQZuOSrs-)BMp7)n+3n!FITD* zoHV0oHw6U6yg|izwZm66@E&f)v*EmX2gugc*#X4ZJw7gXkE?^aORxjxSQ@FSyOwfF zARFZc-(F6Gbvx~ZtfPtU zK*vcO6&TlFekJ!0w`&17LVSf3l=p(^zad4XFI=cEW#2h{HX_Gz`3iHuH zdU)PFr+l%Dsgj)Gal6F3T8UU?KOyc@CLjTX5p2IQvBml-lWc7#QYC$OEuhAXqotPPIoWUJ{dAu= zmPSfqPDqupM$&K(s5%WS!qo~GF_wt}z-HeIOsfNz1SpsqWl3X*Z9Mn|2tAG6k^fFKVE1TV3p`6ob!pfn6EJcXbfI5%-tZd-# zq*e)OGRyKc3G{2yc%IrxjX8QHXzdn&5lR?KPNO-{`x-ub3EQBpsC~On4n^?YjK%V$n7XAW9Y9M86DJgk6>79kJ+&H&z z`AWQ!lpcnXRLI+{hZM!ag^7AWR;5Won|uQ_6~gcWo``*$mH{dqqF5fe2piV2T#HVu z#L&u_lopm)a%$79JXj&=2lNk-G3SzyyY?3FG{BdAX_i>&-f>F5Z;}lz2cUWb_nNJOk z8eJB!4!Jn1S%y!5-%(3yF>#(JLb?=&)+spt>fuBQh@@#@yduFhth2+%25H5L!hXjj zAXh*Ztc--q(Bs5GJTbwpmrm7j2=IqE&A>Bx9>w}rl=xU@0QsDJL;9##Yu5jqM$=SC zUbLggqgGl=zG*gKpaJh}C978Wl2&9D!j^-_n_8%(hN-^qm+>M5K?&IFH`sVO{Nlif z)U1mQwXw0DVs?-akiC+o@MSG#V@paeJZ}a(Nb%V4^ZD z-3Qy4JCH~Q?&c1=UZH>8h#VGLh&7T!2eo3Cn<0MU%-OMpXL&1|p!SfK+VVLI4TxxcX>Wk}?{LuVEY)ytK z2=+Fov4ayLEL7v;ldwc7%?i!cvy1}vSgUBdM!jJLf+u`BxQSqi+!2=ovTpmCscESQ zA4dQh?;G|qPAI$4^l*RMmT{mdNb1O+)aKThz_4K1KiLzba-Qi_XlBv~taP=oW~}2z zNXVT?+0&n=k?_GZY}?WSVtXOV=gN|zZ9)MKpPjUU6bU+za$XVfy{Z@iDd#;^fS9D7 zK0^R%1vS8B*$rFpfbY~%K^22e*?`kH4AEt0%e}`R3_chM44biCwvG3HJhdf6qKYQn zeZRW8c}iQy`GgU$!@|l!k9cBep~Al-C~<#;y|gspC(yobyXw`Sj@sbSopBYSkjPQ# zojA%(7ovxOMTcm1H^sY0W>44}SxoH*?bfkOuNPzyzAYM3wF0BK0h$a1&=%uoPH?aD zg9P?yr6-&9?;_pHLNjuaze&=_yx_P?MX=@euN~+d+Na)vh4deN0=p8^@!&S10QCa$ zy+w;st5dh0)~1x@QM}9bn|#WMta(gzBFib@1>xA@Y;#=>FuV|T39Qr-0!P4~sOoym ze!w1ST4U3tNm;Fh;^l5_67bQ3DZxRQBa)j~8axF>JKJ__ABdvmYzk#vvs9&=D6C4a z=K5t&<+sOe-zj&bH<@Epb+_l$3YEJduj4%UYQMZdk=%ZE)u&-x4RHoLd%Tpj8LqUn z)h6?@nq{Gx9lN%J-PwJ=39=;D-dXM}=mDm1-BK%eIFiP4RZp?;6q1i7&53yVZ4XMk zfivIhZOl@%tdea@;c~q|eGA^KY?3wZI>pqVGBt_QsEc5JNxD@s{g>OTkVfp?`o=}7 zXlrMSL^PRJ$$nw|kJ$kgP`0uQ0P!!OQWQYo=&>$G0e-4dOR97F@Ac970>&Dq0T2urQB7bDKgS`bR z?ch2zvjJ3lbwzflp4&{i(k45vFlInOoEEtwSHJ9{a7%;J&-nl@W zglpR?SgEB)DO#TDb7S1aq^FXw+;g*Dzkeys!1P~j zmVeYceuZnkuJXQ$HUH@Wr>&bltC5W!J*&RSpXyTS>Hc&z{XbpbF*E#IL5xE@Uc~9 zjMwvaXka#8`w4F)S~2g3+w*a5H&KHT83hKX=llKc6P~np@Oj<70Nk`x_d9t6q&H&L zUh&6qb9C`Nt#&up+k;$I*BfWYgsnZtr=iR0@iHxY;f75jW92lOHw>?>c>rr>y_**w8b z(D{=x{mvQep1;p`jlXm;-qP70PdfeDYLk68_4CDFRWe2rnbsv!?1hnu^DsjLHvXDg zF_}kN;?~w5hxf(7QB*Y2III(a-ke3hhqSdfF2IjF>g5BSL~-;aVYhek;``J}7vCIj z?YjCocKe`%YqPJocx0SYYL#DrJP(cD(qOKkfvS$N9{V5Y4M~vnT8XBv!8i5BTw5Fb z!|x5Ar^GQn^jmMA*`%}Y{n)Q18azz#6+~<~$Awa|cB4)c5Vj!X9?g^ccaLA})}CkL z0(Rl`fg_pwN)6exvWm(25TQELvY&N^$^2R%`VZ!o?~yn{h@7h@vu3vL3oZyMZ zW1I*U?x+x*96kjf>v3uFkbE_TpdwXsaUXI(Cjbk8mkQl25T<%*Fd^gL=OQ06gzD`t z0YQ|)A6FXMjA&CPM^p4(;3yzGdGAFGI&vCdxcYnhQhdsRIBWBm`IGUs8p( zff>i3`4&PV%!DKmeJ=Xq1N36&UtcTA;=_Q`C{u^wWACb66STC zOKjf_PLomBD1Sfx4P?^=l+`FR?v0XU1}4ZVC)!=cYZ0oAV6@sTk0*Dx9J^%~cl6#@ zy%5C>2m%@!ei4!J7efyvK8&#P1>sg^?(!=aGAmY~G3i8C|4N?)Q%Mwz zo>@P; z;bV=JD@-yZ7x|x)VgQJoveHKVtg$z*oAu!t$TrSImH1q1MSEm7XTiULx+qD%E0YD+ z{p>p$VPe}ggnVPM3Sxx(`gNo2 zZHPd_TA&q~i*OX7C(;*_44AXiyCt65Tcffl6e_4F~k zBB&kZGnt9A%>@39fZqwagIcgG5O96NCGi@$YAb5K&3IhIJ{UY2 zFi($cgWRRT%Ulx4D9b}++Ke1Gdnpd(LL!-T%BtKa`_1i;$9e+N$xGFrlCVSbbBe)y zhAJP?n$r0rg8}bdwCmAV}7ucm`J*tZo~B{s3;XVLF*X&z)a9 zi@h+LmlO!vZNt$^M9UBz2-e!ViyvIlY?+@SiotIv0m_5Fd_^v|#WVUybT!>yRSm@U zdWEKOZ%ahBYC!DAd^l+C@1W8g;*r_xC{vxNd3PR8qcyKAj$5SWre=)FoJl6MCS7wg zVS)K1ythF=6pZ>#fuCdbofx$623y3M*;AxC%Bn2J-1L@FUE()gwefk&ba;lHM^uI% zvShD?C)nNGPg{iA!Jv-QWjaOur2oU(J2z(*zulg(ZCf4Nwr$(CojZ2YG48O_v7L0R zj@_|sd-9u^bLu&#o;rU_%`5nBRP9~Yy4G4BC>L1{VeJWJY#LDac~6enKMwR#>lgPx zB~xd*>s=1%=cdK_qQmhkvq%b(2A$r0_xd&C#OZ5%BqDr&VNjBC>TP+Tqr4=TOfq2m=nw5Xvi$5cEcOq{Ds<_$OroYoUAumW`Wl& z+Dn~hNQI+%!$z3$#lnu~3Eg=03?t6FwS6HbJv8}=++N816>}VfaP6z}1?1wy1pQgH z>(c&qvocSRt1lCo1hr~{AdK(;s=V?Vntw~#1O+Y5)u~oZ*0%^5Q+r0(z-B zgdviZ0nr#%626}Uge@?c!xnUYTQ3a7UgT0{HVMFpO9rrG)Yk(8aYen=o}HqKP!?{eUcp zdn3R>rZPSx*Sm&}`m*2X+aJAfklJ~XT8whi#WFaE$>{;1`8Xq7mvkUYS3lZ-AVy4U zZtJ9{7EJVAqe?LufzYR5FQ2r7;kJTkHXyad_B)KVj0`xhC z)y7Y}M3m%0O_8~4Vf4G#wD)sOE_Y-5>o5f4k`sDhTNqX>H4A355hgLm*`P5?17V~& zR_~wH4T*-x5HJN)%z^92AE{dUqd^%x(;>&mOb#UfxK2qMEpl}|EmPsa+@>AYJ2vCC z1lgo9d@Vt&07ME;o4)9VJmJ4<>o`R2BUkTF3JOg6%Ok&^du;2fn)VeQI&en}t}qd@ zLE)a15TiL9@e2woW*u>#Ja~QHDJ0sChh|5`JP(__304PNZ9w@L6o~ zD0sneL3F$k1e!7$2DE?v#tCjEGv&Hvy(pH^MA&XQlAp)Rm@y*%A*D{*lC)EpxRTHGOvU+!oK_6fux4B_M7_fDWYj6Z zVo%7K^MZ%97dsDy$@R`4ivn$o=7jX8R85M3MK2X`0V#W>=rBnMLhC2ozOkuIM9Hfc zN=Vur<}X!+cALy`VBf(SfsHEv!Kh@38N^1Dht3*>gRZ4dn7b{cx>4yqOuMJM{T15h zH;Agis~X-G%PiVUxpN_V#^y)zR&s$D9x>q>k8K(wupl72VGA;J#7|BDzi5OULQcHL zmNC}#ockYN^{ys!><(!#PCfvjg0)QgbG?KcdyhSzVWdTN?iYZ=huNbEQ%r#YF6C#p zm67Bhft(3axWqq`r34dl5AuDUqQ?@~lg8?~8eQtba`7FEFsm~k(ogdDABTSx!CZgu z{f*?33XX%>|7)Kv2mr0ur%e&#=CR~nBDGDmHK_>6w&R9fr_1)A7oFhPZQ7YDE&#@; zWGLg4m*%MW_CQTd+~N%&m3VjZdS63knE+~l7pjb$@jD^2@+;k8amtVK#)Q~+>`wC( zsD=kYhI<5gcgNJ+=E8665acIz z{{FEBpatD<<7B7G#$b}7b{#WzX(l=$&@&_nP-We+y}2?oqjfgq(RPnS?ljRLxaG2= zN9|GV;{I>m!d2lRPJLIQnr7eJ0Jpt*u1kJb`lEzx=QQLaONIfyE&ygH)|edC@ieTR zKdCZN1iQ}+8&(L)zL*M5dW&HfoRG7OI48_$XK{w}A!t5I80A1IK?v77W|r6U0Fh*H zzXg9LZ1HamksO$Zm$BVC2%~y|oHuxRB-Ju;N6hVBZn<~;PjXLu*7~P>ZD5+pC(7nJ zilf8PyT5pY?2fC?@y>QoM=&iJPUCyGOFM@ri#jXI9rwo}%Jv4D%E6!a4e$#Fn8uyl zyoJF+jk8nr+)gww5Z5?wqWK`UI6}Ke1%>Q9!1&7NqQtExb zV#J1nZ1jsozkFzJkWyhmbTh2G;R@a`Oc^9B8fr-nJYw?Qr;3~KP)h<2>wGC@Gp~h3YAsz9OxDJK~6Y0FJnJDyz z=1`#Bj6|0JEcCmk>{Ia;tJcZ178UGDD!n=$m8>Sh1IE``qf)-`Ji>-^ zH}8N?tER+dl3Qzaq7aTQS0`T(mT|2{Nt8Im5KkM+-gQ=9&rT+KcC4*Jl1df<`Pe7G zwoq|!drnTM*T|NOywy^Nsb>yNGi*&jxRmN#dJ!q4*<$@T3jLBBb3AJRvAiGjm+=Xe z_DE`eXgTnL4^|d~wpyaBrPAGgt3rq&YdP7jQ7c-HUK2WSI&BL`Eak7b$H)d6d{T8% zxhCbE8C5()&;a4Qaq3=*v+cDDVih-8Se<4M{Tnnk8!N4-JbXOPSx`Aek(IV)mQ7w8 zTaq{;>jbVm?I#B^R`n8#*?C3k2h~dZyc4k!wpLGIdqqbHv(+cboYCk3j30CA-Dxr` z82_MjM$!7#9dG3Vf0cl>s97C)g;=q&;YXajxPO zkqEMvvzSQ10iY z6Ed#)o7Vp;sNIejA?JP5bhgwm=C5`J-{+-#UT?21#MS8uveG%#28fRKgslM#jUhKD zI20S(n2qa6$51cPgp;YM3ocXP*Xj{hs`56{@$2yD2pi;c7=lAe?6F^{s=0CsBMtub zqirzoXQt^{jQsQFzzUDO1t#ltV-ZIj0fl%EIxRPbiXP=`a@I@3;y4s<0g*bTMdW+t zt}>HaTp;uT8miW)y!u@=0A%_N-wv8#t5x+WxE zh37^QGKC#V+Lrv{)5<=hK>ndnvWSal7B@IPo~xV(AM3j>&=7#y(|;qoviz6e(EmyL z{LZPc|1Ya;ga0RCvGt#Xg_n8Z%q(p+{|PvMVw9VJI80~ z%&0Nl)nDJJP)r7h8!=a-!$Ei{)1 z^&cLu?^+OLB3yadBF+2(pRd=k%C*E_Zm;jXk;*(K(h~2n^Z(&zqv}SMiD+%wndP10 zhbJk7aes+w075nUHr@{=jv`~&$J8V=pP!A0QHg=Q@2-KA;vHxrLmxQU;>2r^?c>lt z{I5UuDa2Y;Yt`QinAvB{=C|o&RB7bI#JnBwq}4Z9xQAxI>dOoZI_tr*3PbVm4PWcS z+57PY{+enCX_gH8T17Gf^`c|sF!m_uJcHfg0nyS_PJmj%<{1^r@bm=9V6w zItT&frA|fhna-tW|2>_mxXkY8%W&OQgNsfwbDy}B>TOk^m zqTyp@Ga-6w?~WCV7dURmrxiz&4naG87yfmbVd%|Dal>RW5}~nxQG~K|dnns{kyWQ9 ziCa)V7g&OlyG(9|;hVYs`}yddCl?prfShL4=EN7QSl`LW!;g8z7 z4)%eR=<)_B&-ql3d#VoVE(_6WIna@hjIT~4E;Vb0*n}Z1s+eg7iB6+x*cZIVZ@>IQH6qHh7_yM2)T^8sWq=3m&e%L%0#`z5+~zy z)(OKWJ!C&|J9FT{Md?KtuR&`wu9-Ez2Z4wJ1$noTjT@u?#?@9;(Gw7QtvKc)#8N;f zGJj3;TjbO(=9-d^RKW|u{aR#pMYu>WxmX$z)?XF@FFcv`K%1?R)1>$N{QzWGzNgy#*^6UhQI>L&86;gaxnMpMFH$;|U;WGJqQo{N#EH&~J zcPAuRd@s#JJ58luJCN)M{FHt)3@Ty5h}O3#D`MS6P(wtgS!)A-fc)0i#H;^-r5(S^ zB8wy7Xu;5SHN()#Q=-r|sW^vZ%95bX#}^IuF^l;9V+Q4N@b-s7RI*N>7Io8RA3?Xi z21T^^W?vZ#_Rf;Bc8r>7jJw>HiVRGZikg!AeT>zAUFW<7bjh3F{^@qW=u}MzL@?u( zkbAYhphgpYLZoU?VS3;hT7^k09?V0pFqt7NZmS7!6s15L@!YT#QZufeLqYS-|Q z(45_+R2HxBXY>b@bqXf@=`UtmagnTlK>=z(Ay}ArHi+)hL#uAncRDJ$4KenOOY~A5 zlY6f|{aCOSYs>>;SQ?)@aY)QZ?=)dOo}m8& zTK^lO*x=oHE+_rn|A{7!vQB~y%?5=j>2L=?X1r{VkDyJeVKQk>gA%V%kfxf~op7;z z;8B-1M^~XRN#OaBdn!p93WQ(|vD13G7`bH;>O@*X9WYgYZK~Hi6)pjyjP-K z6sjYqky}%bwb8#KgVPVjEZC-TItn&59`9yG-ULFOUvJrVnayEENMsYGG5BM7d)Fs8 z+}yT~w5LiGCd+Q$=y8GY2%mfPW8f)W^$qu>hK-32k@k8`_RSDWxu-Tg|o!$GwKyCciB zD-=ntINKumS~5^9>k-Ez$E}B46HbtL>tK9e2ftBS=$LSW6=aC8Z$fli|L)IeR_a1r z4G61vjT0Nwd{M|$Ov^iwE+W^1w=nXGp5&i(e?IR|r9;HA+j}!=X80XcT%izZ;aJg@WL^3DcLqS2c;a z%aO3NI6`78Km+2)x*?$KRW9NYj&y)VLGQK=rIBcc;lSFhBQq0h8^$0`F zd&kO}9ft*L7Y5yx-!gPhP=9ZJ$ee?-CgR_9kqo2TdT}be^`drRp_&%q4#dBTKhXNN z{_YG~Rts&{OI4+vTM5)UPgUH}tjIvE!B|N{ zU*s72*EFIH*>rx!tI3W869@)Gp4Hto7#P*CWo?1V2@j6`Khk)0`hkg_KF-(^tT@H7Y)j?>EGUe zLSnis9tTsJZtZWRCYg1&mFRMZbrJMVe|5v8 zXE*fU-cMJpF|)IC#PqyqAtpoAkqD7C4pRryXWXnkj&P(=j9Npd;s&vDOHIpB2uDss zY+Zpy->3W>zIM3`-mZLR@}SZp{CR%M$GuM`H4 z8?zd}q2Dxd`PPVXP|w{L1l(x3AUefmm;>WJad_yqHhgr+8tSZg#gg}lS{9Z275J`7 z*Drr6!ESAQoM_Tty#g z)CIiPFwOGOI>=j0BXU))_{hGSFIG2IkSYG@bPY(?KCX8PzNnSMBrW68Bim(8F!t=x znbHUcO9AzxY#*zcaNW1`2+>Hdr{)2xq%|w&YWAG@%}Ik9j-j_Gd z_W3P?<`qoz2-&O9SN1uC`BW0ECZ7u!uE?~M4hLX2ILtP%*~xIjb8o&w)1+Npr|WWP zEFas>vBhQ&p%as6o8K@=24B27+VscC3!;YNwU8SHT;!MZ>Eu$n(xQ6Pm|$)_@51x3 zu^al#Aeyn$QQB7i-q1Nk7Td8^Zua_Xiu4geiC(e6x9*O8sKO zxSiEHXnBBvOJr&BsfEBsmP&s}4O!y;@}#tcyoBke^IaXwpyv!@EqIF!?OER${moVW z&BH#LHAA0&V{TxoFW*^LVCvvIx!*?{SAgo!Y^=tER!grO#DI^E(vf0I0iCp_bzvf* zWO|Hp`9phQq|5Tz?RnucEpDy`m?>WYeHX4FStJWxVYABkh39f(EQR==Cj=9W(10)i zFcfP3rC-e;r84{3q+hajk==HS6g__iRxbzo~w2mTx-zuSP$;wrQKb&p5) zuG>&{Y<%LCBP(sFyO*Tki-=z|aF}T;FP3de0u9r~q&!?FO-xJ(WNi;LEL-lb)D6Y5 z!ZvT&Q>9DD^FG%0GASzPBUXfI1FRax9Cjs9=XAJd>=7Cngo#FY5E+y_3>jN>*Vmw) zRujxdqB!0wJaY2Afex+Rl@%urRLS*#($7hc+f|3vAUTP_-A`mB23I=HJX}SO)GbEx z0vEX1EWamEiW)eA(&kb$r|{9OUe;?@!B#_AO)FA1t11;2@YHr*55A&<>E~Zc`SOF( zbx{?rRknA>I!3V(5ETmR{}FaAAOgkKsn;C z{F12fG*TWiX4j@0$|4I&9o1v1=$!M30`DMM2uLq~K1jugs&tRi0s+7%PW)+WA<7^ao|MFXUto0dwJ4NJ$^Km=sfpPibLI#piTQ}O4sv*dutJHF@! zHyVAz<&-d2dX0cP<;`64us`Y;&RU8(Jq)#4k6x;S`LE-hcD=*BK}2aN)RbK{*{vaK zDF05@3Xprh++RB#9p{$M>R*+J&7E(kzo+0|_Z1&ctxDxPcdbmwLP4tKOkbOa?nQ=b z3YdiE3?nrGEvQJXhz2Uto#{^Mk@X@#D9=O=^Tc!1#}~s~(U#HY$VaP?Q_MMcY6EEE zBDezJABKQEj(oV;B&(9+M=^?{990oSTTRiwRwHrd{JK_0e>Lmp8Ko2oL?Z7dP(r2M z@y}>vVe@uq*BM!24bUUMUJ(p8?O|n(fq?1uYXRPOXkZc)h}rJ-rf*0ZH%;ryV*j&K zYhN-PWNRz!G{5zVqFv|Yh5G5ko^G~|N4=Sjh9dbMyh94wq5ngog?g)^tYla*r~R$A zA(fq7mAYH$xUIn37igz>{eR~M`>y2ppN{+gk7j>XZnpo#Ilf~9Y~Sq@|Eb$x{@-dg z{`*V^%XcHk|2+HuB#Ce^Gc*5hl8DoK3tHe)?aC3DhEFfZ5a=%Vm|HB!2dIETFnE*j z{1-C8siM!*{FHPFeP>1Nl3{hpjx+cB;ke|<%7+{3$ggZdxUS2r zZq!7p5K-XU&aKv~K9}n1WzS73@tRZABcqQ^P~eCANzlvV!%n%<>+M6qrHM#KtZP}& zO2!(ojETXQ%j@K0!DmXKtE;-Z!nLQ6j4Jn8M}`EKGRnqvh1y}tCs)vM{FPuD%h$~6 zP-GD~S$EYJW%v2b-GCBtsX8_#el=4;FGVPC{)F6D4Gv?$m;bZQabn_EyZ`5wn6>}) zEJQ}n{Y!5~K?F;Er*Sq)oQGi|cDV8eE|Vvkbj_ciOd4WTy)YWez?t8 z@27JBjVje}t6K`9bl2NVw^)oM_mu*H5hHPc7wKdX^LVt4@NFI*Q(MxZuW87A;$CrD zykVJ^yq0;81g9wXL1|VE4##G3nAhyjZG5VaFf`V{^DUg5WBF^gAHNIwRv@b9iP@+( zyU!S(sl+M!`Ktsd@OYAF{4pf8!O*RGBCXl_pOQiVfGpAx$ifn|e`8rE#8UlvY%HgG zV2u>|*@lnyXePMyHm?mFeY(TEWBDqq;rh?|Iazr3(N<+663=w^mA!--jrRe}J!^dG+R(hGt z>nN$8uqIfVbdh|a9E@;M#*-wW9WJ~d&psuR$kQpB6NOiI2yVElkkBxj0@7a(bWr(d zB@KCh_36_KmW-u42Ese{R1R%+vl>PB-OGh8uKx_$T}ilK3O*uO$V&JXq-(~D;xsLC z<^&a5+Fl1rz^zW8tk*?$fLP0bjkKw*P-V#(ew>#mgg+KWSfe|n+u1a8wlvwZwpLqPyi!<#U^MI z&hTcMAIGoTq<_+9$Su4eWI$-f)&DC!N(v+HTMsBSWLY7Bl1cT<4@}KzqmZ(o(a&CA zO~7CYh3^lB?*sCIjD)ha15nYkNQJpUn0f)&8t%*0TRG-t5Lh8ZLDwGz^AlanEkwHxDxG4kE8>3GZH zkiyD8bH@#S1Eqe1j=kWM6R5Iy$xh^k%nU*hr?;a)jE@d0T#kE#%#}kIsM~+HiP)9x zcNRX5*BgqU!=uKA^ly29TY@9P`^m!wkB~*6UV|0+n%rprPTyUR!8>Sl2hRE*vKo!1 z%?pq1V`J@&`LtUJw~I~Ni523jV`6@>6TUZSNS4njTv9c3%^qyjKchytbYf3S+drFssDyv`;O5-nOVP&VI@pQgt ztR-zkVgzA+=%Z%EVgh&*_}AD*BV@hY_y~nu2%I)LM^v|HcZ9pK5e>nC_M!Bx;^U~ZjMqjB64gh#Jc0!pl_cT#Ch zRWNSJqSnPQ=7M@)2vCYqxCB0hS^E-7FU;1Q;v5wkqIQOYG2R)xY8CRDVzn232A%^F ztXp}PWV7VYQ7)BaoJ8BON6#oOyX$Njp~2r7nf`>>D*MXOq9fn$4ZPwyX8YtugCfV8 zl5R+pV&$pJa=I?ALf!hb2@8fC_pc7zgIjH}VXwm~Z=>bWi|XN{>0M9c6aX^`TWw?MnQKcuI2qCMCymY^0@MbJN>ary`hN z26>j$Og)YPSl{_?LP2kyg0uXRi2R7Q8MP>rrbmqVocnoytjJ71wci*NGru(EmJnq! zbTH*i$5=bUpPJ_Mk))bN92&A63$EI(qOe!U6v%BIX-vVT*F?wPGoU{#z4<8+ah3^6 zm|Ri0=aU8Y8ELQoBSYKPvjw#-z5$P5-l-V&ggcR}B+Raz@frYhVe-o@i@*}nn25Dy zk>XYr8rQQoa8;656f+ck?+Ei!YX#Pz{IX@*Nh}CZW|Y7YtsS+4ud+u{gXL!hQb8`H zD9AbX6Ru80l%ZbxR(gPViU6^TV2z-iHxu_hUpscn`@t#t5|R5Muv*lmfGH7TwkNCv zufuub1I+2@RSg>wgFkjqDf$q<%kF8l@BU7ij(}7pSVU`bb%i3a_aGA5x#<{ZO-+C;(ohy@dR5pH$noj)l-gLlOy5;-3xfBcVu1S{geArzAh@ zx;UOyXM|FW=Lw|deyBW~g@%X_+47SH5PqZ{cjsJn9B~I_yi9jBb=YY^WuUpE53s5l z*-`6Ri-B%DnzqGOdj8WhsokZ@H{voH&Id(Gco{K07ZZ+MxgXkSnH1aTsLe6Jvd`wYt*V3rHe(U!d##bzhgU^L<3iA8Gi8@!3V}-aj!uGcx z1Hwyj<6XZ0E;lz1oV2j%i4N++U1pSPk4;({%s`fCO4ddtz>i*yHSUQS54Y5shp}x3 z6q){i`9CE51sgFh<7I09n)_yU9T^xnhv6&)TclV9-wTJ~jKv0VT6Ad-U{e!fAp@1;0=kDqHIp)PGR zl$rt1-E!lYB)w_>pt-hKVd7@Ka~pL)5H&urMs7cklmgjLmh_?f)*x{B^E*gmK-;OS zIzF6L4rN%n9B9%RlB4HGxb;)#y2beF6Hk9-2I3t9673zqT6HC&sk2ca93Q@Y`H@|B z^-pL=zevpmA0yO$3Bt8%X@nNuGIz{$r+q=lJT#qzctINFEvMD zAzDiO3{NtpMU^#HzFt0DtHUb~)32Q4J}jHJPRpmzyLSNR?Q_IJ zl@hv+bM4+XCiOkxg^XAnQ7&KncE`m z!kv_3Y+Vc5%RGL0=On0&jcQj7i7Sqw*fdeTI$Oh*TwgWKW*=6bedqS9e4eJ~)y-pt3$5 zQI8o=HPR9$GF}6Pd35>e>Z~LJ*YHr|5&%7CPsx^CjbV1)ZVt=Fw`Ny;{DQ%%Ve!!T z=3>ifM2Aq`L+w7z8!>nt+B zN7NTFLhZaG;5*_My}2{Pw;2Zi!~^KFJtLPsR%YVX+~7B<{SrgZ;QHQU>TJzWP!WP? z{t}XlkP;Obaw@ukyY1z&AJh*T%pWuMI-(*Rmyxp)s#7@YWi9Y>+vKSbNO$T_+GTbk z(1)oRUI%2{e=SOvzd6oT|4z2}8kFeMK%|UR3r}`m*je5s{1>y33Uf zaK}E|PRfJLG^d-jtH~5rIM2@bXvAvP22Z9fZ6Qi0EO(E?eRf4{Bue!~wvHb}j>~9l zvm-L5>dtq-?q-qG)y-6C{FkLbRTj^(Q$IApCIxeD2=$hS_#PjBec{Izxd`$gUtF9n zX-JIYvIp1e^A7_xaFbcF*vD(&z6C_Rvdh_+Q=z8ww+P(%C@!YIs6U;R-?pH=E|X;> z9kR;SSs#E+xu@J=OZFKFt!;iJlZRQznsXj7HRXQEKT!F($P#@wwGM15aryA&c!Z)=61cb8b4>o zgY$y}*5Ip4xp{j6rXiNu2e1(7NNzBBhx@|zIorIY`&bl@P*l%{IT+o2lGto5`VA<{ zXAs{&0L>jBo=(hF2)6Dr+zyC?$&kSH$Eo*}9x;|{Kv!5$G)`5KL?HZDK!6uP=^pcz zy2QyAA2)dVM>3+sRa%Rv5}(Z(CBvn@bQq7`!PTlAf)c5C`7ul+%2`9pI!Yb7Lcgqu zku}~XtaPgHuL>#=B|FWH|Pp zb{PFg^*5avX(@GKVaFW0+qY`qbO#jm$o7ZS;5UgfHO|lWeI@0Si^`P{KgU0-Q%XCh zxzx)f7=>=2HbVTM4}DCDR>6H7A&Fy{!q@bz5^}+#)j;yyP6BG|Quy}R8UL`E#q>`+ ziqT=u9gLt=a{poGS`}_M$1|dS+X}hGJ|aILz3>XV^c3+X7uK2%K7Z9;Vg6(3^vuyf zgFG3|*wXxyqv8^>Lu;zm2v+a>_(qqTxT&}-qoqZ_>YCMZjqp<6OCRGaZu_a37*31K zI3Jo`2{IOG9LLB&CF=xOoERLzRVAhhR+p9MX=x_Jc~BN;Up|@^HkM$GKU|K{vs&|5 z`@40O=as9Gufe!uwIX+Y`;_QqeMN9*R9<;b^@po!pPs!?VgSz2_^!(ZVi0op^)-ft zns*7xRlix;GjEH$$()TUkx~j6oC!sL6*HkHC3(cp$_5zB;!!R?@bP`XLK9a)yARvK zp6MWSvmh_c6^xkTucj40e4!KAH>Vb?3klt@^Y?7(?07u=M~_N zGj#e~1a<`grs7}k6dFM4m56?*vHkm$3SZYdCx^ky{B+n_b%qj`r&uJ4 z;SyIiVur7jWz;9Yu5b{8*4!|JY5H|Oe;-Q0HVcPc1L1C@{eVGDa~+G8Fzzm>L`cWS z{#QsLP|Oizt6YclRZ$MlyJA?lcJ2WXvXvhPh%l=N-HJf&8y~TpM(tXwqoA=hSF!I8 zRE1;_;FKyt;U7fej!FZzL)s;@TRiyVUmKq1Ku{Xsr=91zvXSkJ%HUp6?cMl=667!@ zDh5^68(@L!`Fo+5pXT3m-BP{#TM-EjPk9N{yj&>b`Gi23^19F(&AMw8uAuo>@AoEVz*X;0qk+w%@+G57XnB2)+%D>R4~yl3`t7ORYMRiLJQsGO*t6R=!$=S=1r zPM7IVBCm7uVk&*h{Zzd$v25HJ24j}z;EiI)DK1U)ux=Krll_J6S3kB>lp>J0Ir z&~M}Vz32WB79`2R(f$Lv`z}zjX858zvjH z$+0RFus?9MMf4eHt+%408qC=l(c& zTaJ7xc-T1;8p(ikh4wtWZxE^#B6B@adCN>|E-&vb5qfdv?x6DS43rkne}1k%?m!h^ z7Vxk~S~@_^6A~=R6he5sHBo*Y7b_bR^B{1{P)7NYxjzb_cb_!3C6U6E8`DKQFox!SR^kmqm7q=GQZTMh_Q^|x0(LUuR% zfk*f;X%zT+JCh`nW;0sxt?Q-Pj0C+n2QrG6xh$1xjF*+H6qJ?VUy=K;$ww0vyp2H- zbN}OR8mu4cI7UEZm?G4(A7IqR9A-RJTTWV`U)f<1AR>OF8s2Uu!dtjId149Z!`b`G z{d?Zqz${%Mm$N6vY)kCyKJjMWpNw3kSU&3CAmUOPvA1=mwhfo+AEC!47DGBqKR*KJ zV_fK{wx0^tWNI)kviMIGL8}#X)I9b)MH)goaLdrA+Tv@DHRCIV>)iZ%eq?nw36V#f z?v=meXU*3ykjnNFa1ivSdahR(qO=6@u!o5Ric4W_v88+(1*A^4=PQSa?(6+Dz@Ao1sx)Tgf?xXh*K^`?Wg=9;cT%^X6TQ;uC zq>Y?`kyyS&JgPO6EI&cvuxx|7?1n_yjC`jl^=gi*~G7t)Hvt*O#VZe?W7h ziD%M-ZOJpHHjK+2hEm;#Pzu!y&i)iN22_f;mq(QBCSfK8OO}aww`OCd6?kxS zvvFaA-k@2yhGh?r^5u^;IuHiW4(MazgWkW*$b_&K#Zx>6w}o+vvmP!4NU?~K{u5>u zD#G+5TL6zgJvdQvkwlai{P{Iks3qUVaX7;U zFWP)tzLs7daRw-07DMBl!)e@mH%oY`&)V4yK{-A3yL}P{tBg#5G0q6(a^)B65k;!Y zHcnDQyyuWpz0LOhzQdktijgX2X_{#!@!C~)3eE`rc@{dLhEw>1v=%SoOgi)0MX#z%J=+{qa~-U*df@NLBoo&3~MH0b~ho#0h*fGrOjTK!tj<-rvgT@ z3uGTu+};sRBYY{!ZkN1h2u-XlX7tUO3Tv{Jp@ASw2y~u5yQ<8Wl0E|rqBabo@H6N` z(x3R;u3{wQJ9sl1(tB=7EV+FG`KIYXvhi;5`X@{1d|C6teGQeL+@y(7yP5bNVw)&8 z;Xss^wq~$&Bzn_~~P`G1H>No*{2-)r8qkOThUTP?vYY^IuJ8^Lj-lweat( z_09?i!An*q!=!VQGO_8pojT<-%j6OXIz7&P=8Qy~Ins$~Nyg;(+Kz#7Eb){%>nZwT zTUNjJ9@&AAtjRe@rFc|7k_a%M&?Do$U=4LVCx3)E=AIKFNra0Owhk-SEXoMfwS)r) zah7_9rLr+xmCEYPUqYR@JItQ_^#y@K_!`JwVq4&02C97R!{=rNu%Z#B_llPm)!R7I z8b9`x#r};ivfttG;bzH*HN)d8Qv_^Jn5IWP)bqE+?@nMnz*rOEXD7N60-NnpNC-Rz z+juoNp;ywwX`QiN0joY5;flF6bkO$~YSiW5>Xmz6OA!E9Vk%!hUbOTXh>w8psfcOa z(##T-N{_}hYm?(pzrR|=J%W>LWtIG6HSmCN2?5zuNIB+byeZcERB!qf-3~yF0OJ=* zOK@0Dor-DwL2*y%06gL7XVRQCK?xGYlMQl?Zm@treP?j9Cr?#FHN?9%(wjej58yMM z7={+E{Q%&MC}7N992#|q@VmQr3RmLLL_z-2NU!NH76WMuKSeK?a>j7f@?UtgR?{jb zA%X@weIoqlXrDTrF1({+lE9$^TJ0V@`m{BtTBbRMS_GsRVv0#Yp#L7;ky5#<Y9P6~fb6Q!N zS)AEze{Tul;P}*?8(eyV*&j(2X@-2O0d!rg-Idl_t;qWM3lar19I_t)L>gfvf|?iC zdvYw7lr9Q{`g>urVAR098L+id*8z+z9!LGY#6KXH zA}H7iOWK6*4RsP?)T&W(m7XLT)dMju>1Cfes$=*YoAICDZM@upm?cEL#W@!6p5X-( zI)V;BJUns#%%L11F2gB8jE}YuA{ce@Lq=yljennpRk-W(cH-9J(^5_EO4ckpaB1k- z)s6^TxWGKyjwClyv1-%XiAR!qy2h`6ZKPLi!Zn5%;(Cq1 zn6g%{z0=-XY2);LJQ)6HH+3)h>UWpzhGp-3zfRX=4Mj_!teM3?PB{62eI}Dt-)g!Z zy++idU#ZRS>(ZWH;wh9EF+UmwhA#wk)iq`niMh1n!>SVvgAm28(f?vz@AG?Nc-6gii!L6g@V@bWk&WNtH~4t<>El zC+~cn6A{&}QHhsmWI$!YR3$Y1<%voebX00xiE$r=$8BTJ;V|(J2FA8-<)+&tGS~R^ zvf?oxUI^C366G&G(6J-G#LVW<&@Eyz{HC9)j$2s01e%50z8m$&T%hE%Fb49-RF4 z2JWJ4b*nE8Xv&|eSMTuqTPpge-SvFm%C%MU;(U|9uk4J4JoWc|esg7YR=%J`3x7=( z5C*D^OB!jl6y{3z0<8QOJyoemL<C!AE|h< zwD%^%cj|%|UPD^GDo<1gYgd-)=jXvP=q={Qw?w6M47YVxNf5q7r+}O7cqa6))nRO#aYbr;YQl9cz|1cSz#tBxs-$5s;L zD<9TR1wxK2FBwe(mAoxb74Yet8OE@SHooHp#w59#!Bt5DLq*D7&mu`{Tpr8a-|)LQ z+5GZd9~|cJxt(}#I55_tFbhcU-jfy)nZI!qYWrL*Zu*Nh{&byvavGlyJm*CfXvP{( zhJ9Iw9po^Aa}8AbWfgMM!tJ~|85GlwrZGpES3 zy3is#N?WMow`um{3D2{K2qOU*(F`1dRwu1TSjUp6#B+!-yk_)i1~cgN@K~Kfiez8w z=l8ikrun2O_HkKv*VbYmu`IB&g!O2KFdq@kqkTZ8?wW~gdO8talZg8Q?0)<(t!zI6 zYFQ847V^P2G#8#b_=OB01hRN^Yh#u?U1H;H;EIJ5kN!oGQV(|{`zz7R(}MQ|_41-u z3i!wY8buZUT59Jfr3qZc6qBE2lvEzHuvi8?J44`dHQ-!vP0|Xe?uyGlfbXMwduxfl zNKak)o{PTc;Zh`B$a!lgq8 zFZ%$#Ow8|*dBom9)r(-G{;y3IBmIJp6!MY*&)rPm$5*w*k@|l(BLDwDRcHGTP5nQf z8+M-m6sfXvvH!0Xs`eI6uAZFMtPb8>-@cjuT!fRUEgTEme@P(yf3*6raep^HeH(q) zzYC!L8=sE}vze#0y_=n-wb%c0@PDbR{XfY9>}(wWyU!=~fDXrxfF>mT2=^V6`#2I3GWyr+|Mq&l zH~k-{&!NTt?eqy)C2l2_Iq0$_k~495yT^V_MUs-xf^=#{mZ7~8y<>TGd87ZTh8paH3q}q3>viW{y<{Q1CMN|J_8`YeIrT}!7yY$XZgGl6Q$(#6AhHH{ zp7TW2sAJ?M&*=1C^-NAjQS`AHX0)|tA+<$s?UEPts4V{W>BNKkX@YZ@Q9@3t(|m?X zFHf#(^(U|V+sR;>-sp_Rn>()KU#gd@8^+;M?EjVD#p{h-ZCD0_w~U7;*o+|J${6Rm z8WNf1{w`c zBJ033y7+wG_R3 zERNSFJwp&yBl?6JX=neHsx#kD4lQgZKX&F8T)U*lYr8x#m!m%!J@IA%g>S?Wsb9BR zrFBpPl8kMQS`uhAF3pvdnOqgg_3ZcuJxNTrO5VciVLnz@LRqy}WPm!}TcwK3as6=y zRoZw{-onNc*ca|j^!Y@I2{T$zB^6M)8isgq-w;7kPVt|Fp11q3n$W$^ft)C@H0}~o z#qLyZ=FO8!1mxM8##>26K8#qc;nGszvPb++gn){eNW8xtuR$-Yv1J4}^I3F#jujpu zD8CkwHg_&@bk<{{z;bWL6q~$`ij@arS+4aIY|ecU9wSt!kiuxAD6t$i(@%D=_f1d}esK7Acln+=K$yk*!o#Fg#fluH5XW_3j zsGmal>-~4%b3TeLAL1j#ezg&PEgr%%PcGymgf^C;Cr=M8XGP(7J^q$#S5Eu9<~ZBp3*eRD{>z-)iTO3i zcabQ;@qN&2y99k+R**SVY~3c`Sq;DQWAH{scR0Y$gJj~%H{*p*KVNOtm5|}!>&;U| zuOrC3d5TQ!pIs6(_7=NU?fEAOhrMnL~eBZ#AEW zuCOpa0`$F@;3-9t_W#UeCEvNc#cjhT!KSBeflJFKxX%fs{*}qs#i~9y09#Z^czB<3 zM1GA+vIHQRV3S8J+xxL@AQ6|XI+Y$sN+XI}P{-QE0Llk$i(w!IZJyS%=(g1Sjt2Ei zpqG+Qa=|(m-l(NZ1;`R{-7|M_LBC(we4d@06^%8`P^PP?x2G*7qc&v7`S1b%eK;dC zo$$&O){h>4<2){sn|ad1kh$%U=SZj3zsrT)^lTEDmy#`~#ga6`6U6Zse}3~c3oNC> zqGX8~et#wVEShvA!QV2~_N_!bC>KkkaBilLC#Ad9sb=l|<^M(z9CXtqqU;vN{X@tQAV{*kUlmzZBO-Tv>TOj*o& z`%gJP{K7vcF%%;REDv}qsjGmIBmxcktiyvU)Hw{WaBZ1m7l0q~1ZioCOhDVEKuIZ0 zz3=Iiq5DV*NK&b?tQ2JCt|Dk89K7EHnp|=VuB~lymv^+%UNN_N3^Y=i>jE ze>|mmx8`6AJXZN+<>>lDPID1Q*U>f8AT$IYbFo5KPv`9Z)$Hy7fKANwqXYZU_iSNT z>v&?~EVliYZ$Fczn;5Zt-;=n7fEoIUU2vD`E6$DF)EvO+!hX0-mTR`s2EvI>Yg~IM zUu9p98)wW$JU<0$E8bBkwsxJ`2JzKmlpGIbH}&mt!Q)$&?uhxiRjC##S*g0o9@^^x z&0;B8^t>>y{Ja`%djrGG$6!#)&L=k(4CtiuG*YOYGuH5}APbmp&DqnlMfm6526s|W zYTjUSjP1Uk(6TQu5 zBMgd8^`%+`WdVI7KY{hWaum4CVR!se*uEqG5Mjq9LJ9i%hE~3VHhjDy;<22Dr@fT4 z(g^VD=-s!LSQnc$Ml7zY9OKpT`y?XX(A=wMeAE%VaRSNT^8Bwp#I)3+?gKhjqxsfe zt`(9u&4_gG8HD0{^A+z6iiH_4L$#cAqIL&cHU$x!r#|+PI8O0pMld%q+hqp+rrS#n z793zlohueM{>9Q0htw(Rzk7BKHydnsrn5fzNK`Y=n z7@MDnceg8*Qcp9B4o%y3CbfS)5ocp}Cb9Zkmtc!z)XdwfkT@<#OJc}VsQp6TLN~hF z@I~>JUED_LPF(CdRn&1r@7WkW(`O&nnv_dntDhoJyV@L`_~cyC_x9DdWO|*nn@0Lr zU%1%6V)?%C3b2=Biw$?&uk|Zk!f^IPX2^VHVb>1QBNXFTLOe=!b8oyRtIV@5Ix~tX z^A*jVLyug}fbD1u1yWPO${5D=n?N6RtoU~zOv*F0Qbup>yiEn#$N7aSmR@;e3s&nO zqA^c*bpjC&U$V@LXIH_asF%<4a42|&&%R`Lf@z3wKs4MPj9{7|qrt2<9R@biVaqVb zwo>}bsDbEyiv|D~Dd489ZhxgDCUe~6k|MOHTU7B}A<^UT_%3Y2a)fvkrO6VXbn^2( zd5$G{l9n^-5GyZd7r$wB7H4ndcR}!tBEPePq1vO?rqz)`K5DPgZ%=#hBcXqA@GIWy zY>ghkp09U89*r8Z!PdZWaBvWTRlwC+0sBO(P0pOi?r` z3tru_od&-<{K5VqmXt?k!}nNhg9+Bmj0hPe8DJ(LSgsE=psEy)1Y4qmsJa6(V`3W& z_6C2Jj}Q)^oOeGue>0rd>@N)+?~NwIshU$P)xSjvJ%E)h?!y(jy!g4o-1X)ym*@KwNDgym!emVrhEQgW2&Gjond zx=d_EjyqNV@ak^Sp*J4LSGs{McIv;Or%rDC9RuUIgKdTlepV3wS@9nO{&`|6Egcps zj=}n&XH;0htLu>7cM-%@GZ7mNN^@v7M$ZUboET*)MII(83;8h&%9(#CYlELhAeN zJu%NM)d5{S15JeucQi(7l~xlxM!wp`1&juoQn zo)GflY7T5bR5aY4#rG)@)k^9o7pph&)z<{?Ko|Q2wm^3V1l)R*s?nhR=R;qn$eeSYy?O`0TW`J83l)h!6m8$WmXj7b(J zo;Jlrp^JE7Q>)u!xhKo3mh#BAU0vrlU}=8EWVxrW#41%KPZMZW+GqGKkw#;nr}+9> zoGK)D{Ll_aNE#~?>fGMYBK(nsl!RElv|7_OkTfx^#Q{UV8;i(tl^WMlQ0eV%J2!P% zZ(!B{{or|Kfm?$dk-EvP-$oWZBp|bAZKdtea7g!E%7kcYFrY#L8ajZJht8QCqIl&c(d00;b_mP5MPVk(Ei&uk~&2 zyUN&^QgDh&>>=F*Wd%y!T01NLC&AYozXv}qU|BT3?Sd89sZt((dY7j-;ZNI8e+)r~ zB5l`q{U9#m<-|WLg#e+fc5b^CA)ikknYk(vv~shSG#1!50*Bx17aK$n-zh@DA3`ZB zEjA&_FbUBtsmrt2hoS@)7rq!aLarvR-4RyodWS`c{GzYe z^Ijf5%9^%3c1pwuaBv;qQU)(4(}%k+T5dZ0GMs1HA;!krZpOb!Xql5|S4KgrQ&ZOO*s*YYDlsgByyfj?)NebcmsM+- zsfarMibdB~u()!5d-Uz05+xX8^~U9Kh8IaIHFCKKPVHcQy3LkUn}0OsXEVh?3^PUY zud8c>Q-rry>`53=V%2?p*CxtyNQbK2k3*tj0@ewkXi4?Z@AO5?)vz7lJbbr)08KC8wAp)hOG74rCV+ zNvwU;sxN|u}RQeQw?Qb4Og9Ft{JBQeK zjAtQ+<)JVf+z>bRZ)KdT;$2Yjozt)5lHrI_?)o|}n*-@hk)DWo`l8Z{O48!6kA)9$zH&NNDmp= z+3EL}+rman2W?KU;K!qtR{s0z>Q>JOlLp18g6$389q}1!Tt$_r-c{6|=DVN2RWd-? z@SkikK9~Mce9c4w&Nq$tG)~f^ze-F;Kf1?Q5UFA$7^CWSu>B)ZCn!;w0#v>+tTGLI ztH3rXBNkXr7-)w6sp1=F#sh+H1;Y8UklMHWE55**EAHiB3oJoA3l=P-wx9?+Ju|SQ zzaMS1D?l0HvbTO;;&GpcdO%l}n!1|NR5xLjg3gNuskr;LZxE#DLf2Tt-w>0J%I2hP zFmy+FC9*laRMo*=_thWu;H-*djub-`?8FLF-${qC-3Yv+DwO|!2_3Qh*X7y5f*)8= zm<{y)e0~-F@Cp7Y_4gC_=ZVbM59}z+N`fC8?VXHJn1y6MFw5H5Tj^Q;cQok#@q!sO zIel{@14lTalfI*yt`QI6ctJ(9!e*3+E?zHxfo>CZ>)bSXe%Dp)d>ESlZYt z+3Fd<>xvjTn;94>iVMN}Gjnv1H?kMDv9h(XHnMj7z>UKE{}uOP<6>c9`Ckbk`%6f! z8k-GBwi9kc2L~B`_(C6|wTx-yIf=1NrPZESwE$nK8_HE7AwxZmxSiMbP2I+_8KG51 z(%=nR4UeI#2Z{xXFDRMlRjE%$Zlo2t*$%A^hTHcKyE{sf$j|=y`!Wkb`SAmCry{p7#D7Y6E+#qt(3HE_z=6Pw6uN;w|t$l^ujVX~764*%=OewHtO|%>Hyjs??9IE4#Vpzw6Kj);8@#Kwk1`>hwmRaCT+^+9*zG%|IdKF?WyOt`PgcJT9>Cc zE|4bu?Qh*@2RZ|coBFl|J}T}H&@4uGxNA1aRn0rx+@bJTuZ-Z*^STS_ySR5g&|el@ zHUS7UiHCd&Paxop0p^tj@O>;-@PB3xZyNScd;q%%09DVD_V+6vj_Nw7#lrT?gztT; zh+&9yqG%X3`pJQ_uT^g_Z5rdX`Zh?-#q%Y1N z<%FI1fh|vtC!<)1WNP=tYAbO-)2kBj0BA~=R&}@KyKd}2 z^Mxx(X&}j*sU0?5Q3*Pim9lcq!z4uWKb(pza_s83d44~0%Y~7-Wh%;POhDMJWk*J$ zRRD|2UE7ozif2`nfW`;?)_}ONc;MtLjI0M-JgZ&M_qoU+q_vNTrS|6LDKR8 zZOkWDU2zrl<(OfyGkEM-I#UcOpzlCHsrkvVGP4YNa6#Je0WKw3I9pOqHSbHMl+^c5 zZj^4Sy0$;(CyyY=8DxkfqYRl^(rGbz?VaAj$}pWS4x{}SCQo@b*XaMFIe^((kEh>u z-z}xhm%%mnsnjT)Z1Qlc!N6E*ZE82ouJ$!7Zbtse{H#*5e9XqF-bMTLxqs%(LM~^1 za?!xrF_Irl$gRFjm=jE$73`GSK(su6-gMq<{BSwd-0E&?kJXB+#e9v z9Rbt}%B?Pue7Dco9X+n?X=mD`Mw}X3_HT>N!F%PG>9p2OkAs_qC1!BNnL9j9Djn6z zj9}n(1^-ahHUSg!k68hdirF|DS{@DXa(O1tM0++>1Dh&)WOFAW6H!faxM`z`H}}s= zTfN~k5$@=0hFcogIv3p$;QssTKxIf2RS5aqJYDzwe+;4=+^&I%$EK3io_2pooa8>n z4y{|%aPtc!)ZVCB2Q?;vy_v*oFI>}R#=q#0w$Lm^B}tRBaH`1~(PE^oTgu9*m_8Oe zMlPnjlgyr- zueeu_99#r$w`E1X-vu#k#gjDAtg=HErq1eeH`51|ZxK2))i;^`v&xMLqX#+%qcptn z+1BVSv~r3dFPO#)msE!SXq8tQ8V5`^!qvhc;~b+iEIkSVgN+DpYJ`hEp9rh~1>QSv1D*09+3lJ`Ym;%q;V%3C-jwFIX8g zC2dOGa;60JCYLE7JJGm=2&JSZc77J~;G$@zR{ zgM8uAkfm>xrtAWcuBFcY#VM%K{Hr`u<8(7Ni|n9vs>hN1Kgz8o^T%btHMlI=>Vo4c zz#5~i{8RJSdJB;!G@k_)1eHGbOV7=PaDU-cn#&&5%e)?{;;t6*mJga17)BfmDI=V~ zz8X-x_3dQG53a`iXlK&@xT8@B++X~hh8uTGnc9WDsaa0AWrcf)O-Pt?KDB4&>=p0( z|12m#VQfd|0L|<0udgg*DlW>-VxD|?sulmW{l6Tl%e28Q&_nnLY0)j~gC^Yh?%ynz zHw!)e8!2T>UF1Bf;Qf~;1-$z|b@Tr>d~onUZ+!$?W758p#XAt_Y7~A)I=~fr_7(X* z)0s-S*fyUS*R<{`3oJ`D`&@jrIjojmeWA92bcPli*W`Sp{$C^Rsbqsr#T_IyWbMr! zc0`W~ME>H?o5)m;Bpv38hzl=*z~Rb2Mx))Q7~G+$ZB|mSJDEF`Y?!pW6WYTje9o7|7s?AipyF>@+i`m z$jmFJ@89e^J2uLDwOwscohJ3xt5FyqR{1~tXj0A11B@xJlzn$#8^hF?BL0JU5)rTe zU7jKHVJ?Y^otJ?5c6)kJDG_qj_gZ|IzQD>})Lrx6m7bM?{HzXfZ^{Etjv}yP3zB_1 zX7C9O>%x9NxmnH>mJlQlk;0z;!;B+(@e=)1l8fPv>H%|VgCM7w)4&D?5sLrrWNnhP zw&wNeb;);y&Q*sqN~4ig9h1O?wp9sedQ=ZaFN#1?ERUXw-9})rP^NqVlXkImUU@vz zO7XItVmz}=%^dG{UBfO~I9u&Tp#4^2v-vCI&6Q6vK4-R%M*(L(pF^MMu~8tKdp?0D zZlv1#q}0o{HN*N>-Y{U31ccjOkLAcOq&YK^ln%vTD6`R9;YAM7_1)?{>6=YBvN7pe zRW!(EBZFbXJNT{mU3V`MRV9Kt=;(cikDcdbv&>{RUeUFv6Q)&2b0?W_ro2|eAY+k~ zMJean00!QiVEpl}CgE5gnYVe20Ez+BN zq~SP^PWs@?(Rcq6i!XR8vl~*{+Poj6D)h?%f5q$Dp0setUED+#UZ1g)R5Cdq?w>Yy zCTRedK{x`K%u(^=0C?x^SKDU@y9;8+E@=fn&%gYslR;RYU_5`aZ%RfW@?7A`>VhBr^!^Yg*_GghI z1SdKj8aN_J$p3cr`6jrx4@;z6^P|`@t6~O?P5AkH_)KPO&$;HD2VIvpyxeOrJekAk zagJx6M0ok9n=;eI!6*T0pAkwmIqG0sYv46PeK0A!1Q1r)0cGB@(B^640=Y7cy@yTw zS(Gn$J%!1K5jZXOZUH&UHzK|giouD0`HHsUR+M5{uSzUe>@JrZ=?XFa!;>u~iH`0l z6_hQ0%=f}F%5`6gX;K&g-Z4qRr0LVb4`$;IcO%WMb!2_PkNnPW|ByUlnW>*?WxtHq z_PlV-QVaUq{O@_S8l{`QOX-Rcu!=JW2HBL|CTC)-1ZzM7@x}Fn+5A#X((>TF#_M=iQm_Ih^=Brd*UQuo>PT-z^ z%BODw9dM#XKM9k7y)0kvx&;S^7~B35UW1mFT8_!}23fdUbth}<%l*0%*XE|(F(an{ zq_gfz+3rJ4BTjZ&JInRgz!UN0)vAM^Ij*n|tyhTNZWF+pZ2i7Jo^(HQMovoN?#kG| z+`NHd(CtTkI##L^`rfUS-e*b^Qs}i0af8pEou@3J&*-@D)9>7tutt5OH(OpQ*U(=q z)Zwjt(h=vnjn*w)JeRmfzomKO5lP>m!KVt6D(SW{PS||zLY7ME?x)IKllxYQW6Z`>0-wr=6wnb5{ z;GMjlSf|G(M-uaV&(~U?Zh`Lv)-xJC{)R5b!)mU|$w)uS7s&p_G47n_ z>=uZA=Vcz-$$IHz`vw?gmB7Hy1%HP@g1B2 zzLLMZLgAE7s{inr0cSw(59yaN=Yw0I=DA$($~sQlSjct58z(b6WUml`HJp~A^(>qH zMUH>XZkVI{Q*g+U5^EIj9KGD|<(kec9o*pH4h4!lx@D4LGHsbebwAD;ZvN%jGj zqP8bq)6(Kxc0!=)hHGAs+5rS{P3Ig9LhbU>&pUnLqNT2aX~FCEqXHvQ8P9Qp<)rj% zmjAzoGn4pG-2Gj1@gV9)Qx{`NmW!*Zll6zUG~O7`x0c6YO{91$8d0`#hHPIYvCA#t zmxIo<-G+wTN>Z2o4aj`6&T+T}GAy5GJx$JPE|zL8j?@@C3?QDD3voz9y$$#AA}4ry zg@duGE{%GxeRM@Q#4~BLa2OxD1<_s<7xu%~ZQ;hE`ubYp^E_GIA2R%uGn)h0k-{rMYygW>Hz9R_1FJb2cW0dB5RX!3M#C2cY zI)EOokkur$GR93v0sRV{>MK?tFVrzZb^Hr(ob)K=R(#E`)g z-FzjoNho;_!nxn=eZUnU1ROr9A*7POpCVNQvChMggw|Hi zo5(k{y_L=4v2Hc(f6_QCD}n)u&gn*@k(tBzv(kJ|IuNtHjVbNBHCONh?ZmtMa_q+m zxbdi8_Nsft!SnLFk8U$n^(p~jQm5aO;hmwH4L$_pKjq+nYAFX1vmrxK4L@3~9*XPS zf)k%q86|(oxW$IFH1Itw%4~CAR8d?Eo&>{eBrvV>t7AQPSCm5xlu@%OPuj9CigEh} z^4lcqrto!G_K3j^qAXQ*81{B8lml1AxZ!z-hS54kCM_Fx5b1Rl)a;z~^el(;(NN|cTqWy!Ddex zOA4b8zd~*z^?L~i<;3am-l#AJ=ax=++nsp9yHR8e0y0V}4`0WhPEBMkAW7@HWxnej zrSu%Yo$W$oFZ0X8E$eINa{7lq7jSC!_VFr;sGvS^TVM1@f% z@0nN!`OXzPPU^P4_uF7nQb|l}n8Z8mcKGt6BKE66ySHhgp>VjWm`QFLo6^k+0Qi8O-F*9EF2z`8Gu2!nlM_I5OSQZQ)l2B>(4IyJa&LVXl_ zq88pt>NC&3q~r=#jOi0<*t1BscadE4{`xM&9_1}N6tuG#XGelq6Kk$fl` zHQSUgrX0>lJO!HaC}HR1?@oo_LZ8eNCEqA248!N4R<~Yeg9w@Y!+ZfXj2++Vs0^CS z?R?$U$)xoacze#dXrC!HDt-0Q!t~LoSLzmh!l2Xx1z6{IOVcYe%NX8uieXYGpWAa2 z(QTu}Qedp<`+Q8l#RGk5VGwQ5bsaDzA%5F4TnClF4cAXj;7AayFZ79}SR(e0g=X~| z&gv*Iq+j5MY)0$ksWB1XA>r!diB@B$+6&xWPOVz*N$;q;9-l6QNFkk(`-w>p=y)Dj zs0-L4)c2JK{_}GhMh2ug1|*|plP5kXwG)ShfGVc<=lEm$d47f3NgtBWi|Ec{B%_Y9 zyZZI1d$!bVs`mjfL{7}xxEG$>_ha5yA;)9$7JvMf=25HgQ?P90{77|*m=#vM6@+$4 zhGW<0#8JxXE%6&gL$k74;2^QP8+13u_)x$7h$|JkIz42nQ6`qHKiZT@?|&F6_kLQD z&WtuXDfhFswAMkx(xRz0G>L`L$WpTF(TyMe%0<1nZS1zOVnF>MM7Ln5MS{?27D!9Q z|K($mdYmMxa{A|PS*RpJDFD$+qteTGz&34lg9HEs>^b&g?JZv5I5vrD$ye$Tc@f)c zXlOj(@ZiOH*80bCOJF|Hcb$wJig^ilxTTjC)^f;Ko){c#8?>M|^;xnSTcW+&$3d$KF6_5tfmY;GLE~6o|GLyOj$r?mE zaLN#kWRz)$2x(Pla-#}s`$!Mbraa?Gn$zP2CvjSFSEjaJf|94D4PXVTmdOx;b2r9| zBo%}DdhNd`>zo2O0mmI5WDbqi@&Pi90YZ^|mX>kBxj}8T8u;tg$!03y=3!kK=5)N& z$;XE6N7f3495|^LO$^uqyFKERlKX(HD23+J160kt)7~fsjoA663?O4T9sWQupgB$` zCOfa@vh(q{y@sAY8k{#OA&ujC z(Hz*7mN0WxoYoEthUPCiTpKwW(jhR^wuK3@&AO_DY57LyD0U=q`!DD6^!2#{FXFD8!I-AF0u*Jak}ZI?7ku^F}W*e&*cvvRZ5K`;6pHUF}w-!PEb)8e> zh`HhzOL3IZ!Crov^!rdr+tAih9Fu-(em9r~f>5-n)zzJ6O?B-(0{p@oXXU-(;N>+t zI~Vgf(WwJYEAMEEWb{^<@<<8+wMx!7ML6`Uj?}lsqE=>T=wFr?E(bIapu+$MH z?{tpAQEV#zhy; z&VQYg_(ZT|-9I-Lwl(3VBE?Ei!Sv!jn-r!G#nV056e1W(;tHyNw5<9URz!<+*Jt+?=MjO_R2$Z>80GS+rrtIf4^-efMKXNHdvk3CaGO{-Z|9%fX!1fY)}Kkn=7G>F zg4B7V=}g)NE|UyW*++s!q*Pcza{ zGHa5j2#=Z784u7j7T+H0--6P?(XC860^zb5j)Qs8x=Is>gBYiB+F7B>tUpZ3XBv{t z4cAGh8FalEyWod{Sp~Y>m0_n}>U~71x#hAupz>YXn87zK&Jgh$!_DQ~8X-UzXK^le z@dg$N(*wgmmWrBV?hKukm+UJ>OIrF%XtJq}kdnYfCUK6Vh+BKf+6(?VcQba6=N9kx zrWNip9K0Z9>M=-Cz@8?Jqz$E~-kzn8aOebpX$gb_Yuc1EHobY1WDndL7bp%-5O5&HmiPl^Ij_GG|^@X;o@$~pNeQ_q-RNL zh10=P3UT!@_HmpQL{02qVfK-)=$a4ADLjuG>~B=8zhgE@3KC6}k79pz_9qMAoOh+w zN0g;&%F;fm23vZLJxy4hyRu&-hVKp19IBP&V=*^pWTfLTdFB;HTJASNdJROdu4uF%rV<8)s7Ciz7?DM1(aVUAIE1Zl_0I>qJau%^Hl=EBd@JCQvQZ4a(z zGRC?Egp!MgzFv9E-vX;x5QreT@ZHrl4~~QSa?g7- zQ7zdFVdjoR$5__X+#8&tT*+W$1mDt9sz(I^#^g72w}A|gJxdCWWTT|!$rTT|?A$46 z3ltJYJUl1-fDd7ss@07@IlFt7O4J9m%S+VK)mU#|F~LtgYGz>z0sHGUpO;!UGan&B zOt&UALGCAZjnbIH9!u#VH|kKaV8hb95F{fd?OX&EYF?3>#NgHp8=UG_4ij8)Wm1M{ zDZXdKN&OBGm8wUGeB7|cMq*5_aCyP9jQXf!fL0|l@zt9p9PcOH z)nx3UJEeX@@?ii0;IVF@XpjMiZU*2H5#`(fTO?`Jsz);WWrAPQ8Zngd`VU3bZ51#sU`aSQ#3)Cl$*u!4)n{IJf#vjeK z}(CRtOq|7`u_AqQEF{4s|BfL!BDu?|`cq09yCtR2o8u$(@)Y z?NRMq`{cdSSR)1@<+xf?mHAqOIY?*bqYA8(tAYEH-vuz^d$MS;j;!oWv@B zMw@KCH~Fa2cL6N%fhZpo(3)hDU51}RN(5BFcAR*3^fNCe`xj-zX4*ipt3Y+9E@%DII)1;J9;vJ!lNWzAB&H-F($dK=Jf|f_syhssME*O z6*Ws~w4!WLiN6T%&W|s!wL!*S{maqz!yPT$|0xpr_Z}B}GenrhLSV@>qVLg}%+cUC zr1LI3z|*_n4OSWVG-ze+mFouw9$RkiTiM0gJ9%U&B^ovC6CC|mCaIpto2`Jmny*rA z`P_Kt9!reI7Di??G;!dV0eWZVJj7jAInCv^NzX!`+!e0$kVixhyl;);7FNIH+#;j& zV1uqRZI}VKKSpSdSWC@M^$=sG*HT-unful(VH5cuO3l)3zRsopbY#fmG(MrqWW zXU7E>%~(mT;t@hO(^j;|`aPr}F{DkJ#lrT}Zw~1m(W5iRRd}ifW0t}Mw^kl23Mdn4 zGVM{d$&SE6!zlH4mK#_qw{M0l=qZvNCTo(qTn3cx;~nmKEIVhLX=6Q!ke@tsjh5M@497M)bm-I)&`{l)$FbN(FjCfra#0>P)zyV}>NU|8+@hXzZ4p>Gsj4OD zXVcGPv2}fpB`RD?c%g&*L~XQAa(`;_JmZg&r8eyDl?R+9<&wGUPH61k3*{36;wzgY zZ81`#)B;6f7n~m;74YPofYWJdEZE-sSrh8hKpAb;1$^VGt&sI*3a%9Asv1w`G-G+p zSI{K5tAcv2{0X|SwK|Dkw1|55beXUL-@G_T>@)}R+RP7L#Qs8?Wv zU1iRKPIwl0#<1%d0kPy#g*sIgd8JFO*%&i};PNBG5j-FlATGqS^GWquOBIq8dG0g< z(}HL7NZ$dG@G2j17*kGlKkXQm2YTCXKB^Q5KoeX74jETiyDSO~3Qv=>Ui?d6CREPL zmyKvgwJDjeQJHzKUi7>|LDoEHKEKOJ{N z-vYxX=+w{*wMQTmj^elfg5?8|%ASPXBh08-dOM`1V`&L#D^b;rHW$)mZ^iS{t zm0CoVECEe^Yf3w1g2WH>OIs&!$CqeR8Pp~cXr|lPGUWSQXH%P#4)EH!g>`No)Ty}k zh3PV{YJ3<60^5Tn^yjyVRW2%MSh2;Zvm;gwln0>04&Z%sR31yvAXoq^4K0|q=<`|` z!nPaCnOh#|=zlxdP3#l9)ri9b7a-^zR{C!J<8JW-y)$HSF7P2{c|(2VH08EreLt&2 zp1gAXi+_{c!2^Am%d4M0gRRp31AknVb_bK`mTXN~w4RL0=- ztKB!%+;wH<8?!n}wv}4-gp^i4OM2P>C~s03(WAqw!q^KV*mHH*Tt434_&M5Rv|*He z+221!{cTQ#Od9P00&zA;!#(#=ve{{3el2;SwLSXQ6J^)m zX5<^K0eEL^*ceG1iq6PWz^&sP2h%0dOHR*`EDTfOD7CbPA3BY!m9DSHN}?*H!BqUG zJ;InslVY@)4Z9bNMK72hXT}4msvl$Xp@v+lxUGW8kNCNWg9tPB$fY9H40PB(CQ+US zl)k#Da@;uut6UNg6Th4%?iu!(oF}kn+xazPk~dF>)4+9xqP>RG+)00r$DE=zmrN>c zw2!hIafB8@aqn*GcP-x`Fz28b_Y*JzKfY*D_%HvcW_}qS-XNF{LIg z1YN6}HHH&!)2tUld+(<-&m$V@b=-zIz;rl0;Be=}?6P?SPW$XGzOwX62{2uxzN8af zQ%1pgb*2B4@mbx}FG~&;hNGUPvV;qgrQ8*^CJMUqM?s_3Sw-gL>oRr&`|tLNnlM>Q1 zy!xAL#+-0;sw}sD__q&hfTNEBX>7I+F zlPnSSNxSr15hETcz+=|(-;i;OCOemkM-|s&JPiK@shZLGkUJ1G#o);}{e*9wls`W= z_p9Vk;EI5ROJ$$f+1&8^UEgmDR5EVgmMF1qTeLYl5PMF?Ye+6S5r}P)3dZ=b468kq z>9)~V*V-Qa2+V3P=gkAPDP``__H-DHfY}ffrQG$$FFr34Hb1l5&yTpXBtO^YU$?r< zDVIfe)#`OXq8*_#Y3>A>=hsz|2K8jm(a$1#ZIWJD7)|}&2GuG`Dz=Rq83+_fYKd~i z*`#2jKQ;16?{&jgwuqnq>tqx7aN`&Bu!)sssep6cBCGLvmJAOr#<%Mlb1HHQmeyms z?IyFu`>|E0GU=`w=4Mz`1I&_Z9x4ZV%wr9^j;Huf`qkgk77wquQ^ZO|V-3m`+3D>m z2M}@%ZfEf-LYmBP0x1Tr0s%q~IkZ;|1Vvu5#VXM@3fuKbU*QOG$5M8p6ZA3PAG&pJ zZejL36)nujhZP7GSq(&E`hW2rV=Zl1{?pT%6X6~8La^V@EciIcH!^phM#hUiYf`6 zL{Q=;jxXsJ0II_EBiz-SSD$E3GIN6B%wz6G7TOEgUvviqs9%d;vlf6e1qJFU%Z02Kx7vyBvllWwg zCIeZv3v(BL8l1A6BwdhqI%boT)(RmD47nr5TM_@fjsr|h>;2j{k{2Bp`kSNp^SsVd zM{R(?o+rAr7nO&NuVv?ytdi)5x3BvIZqth^#adinGTKNiwevgYSAAu2`X>=hVp-flHzois}Iza%} zQ8k7<_*q&2;Zo`|pUy?1Wq7&!#5>rv04=}UsJar#n`_$Msly>E-WBCx{<#TTdklZY zOZ#K_;3>=D&18X9eeVu%?6@4@a#jAiuEzgK4CRUTpHs|HEvF~C>0Da(2rqu=i$vku z8ml5`d99XuD)$#o=U>)GtmIE3u-!`d25DCFYcan^!TDLxWKPqCIG1udpQgj38uYd> z#(8I>KpoJ0JKV9$hBU|}XF%$W=M!PyTP)Ur46+(&5XKJdoJDpxagoOImUq+5J<)fE zMAlXz`@r{4#DJ!YSnvCqj|R-8KU8xyKc#?G94?>XIT-Ye`qyM8If&C=mH+ZNm2&DO z0gqM(;wYuX$~{qAMZz)M^#E|p&+^4(&Ql@3*Do>c2A>A@P4C9dkU&d)att(>tTQq@ zWpF4$Sz}R_3l9?mhK`SlMX{nPF;o}R`2A!Z{Wkhm))QCF>GFPpCU==YtLW!DMrX*m zM4Iu*uU(}(nXJ%3zjR3~>kQ5Ap8IY`^Wvt4QCoXbw1r=lD=K6BG2+#RhS2#F4!j6p zI-gMSW|j{Tf6oxVcjvEGKd}NW0rk&&GVVVmU88z&4|O0~i&|c{&%#9NOoA-$y&ON$ zcD$R!bkStTk#aa7|wh;1y}H z5Gfv-WF9;!U!8y2n|rt_)S1(h;<00U8f5SB6oidm;l9wqPwFr0$qWP?>QCS=Tr;7kwA{2>|6q{EjK+?1$L z;^9CLI_bt1sxa7=cfCLAKq)bK3vM96Y+MR%*iEm?@2!K!()(2%zsqLz3pGFdcKWSh zPDi~OY<_mKdp~9lyEIbGKG8C1c1u}LH*?1b)~PWuf_N%OR5K3R-6Jdnqg!RUc{;m~ z8|YsZ3RzQXrINO?2L-p}S~@Tylz z`CO@Ruju1Mq#y!zXDw=S(Yv&p69(%>fy?c-~ z+jf4YJC;p`>JW8l=`-D-Q7z(MO$t$CB7z)v4}!$pZ>Bx5XpV0(7@xCuE`$?f*i@LTBYd}C>CnF!{M zQR+bNdIT>Jwz^5{T*y|lO9=11)H)w7E%mtyGGRWB3+t8b73|uEeu!6Deu0_b-EmHh zcudfEhI+UKt$X8iay<-7!3;Modf0O>Toi)tT3@$90gB94vN;l>@Y40(S}I!UT5o(= z^#*Izs5}M>_KJ?MvE5e-d{u5|1f8dH{#W#vZ=D98s&=T4!|J93gw>Q^OC={uK6Gzq zWSsrYe-XyS_0*q=C|zs)gT~AkYXTGX*CKklSH$}xyvc&zTLtCsQq)R>u{_@l7k_ph zsM{fQ6dJiwmm5E~qKnV9acqHQ;Hv8}j{ATiT-QLNX%>739YeG=)T*RB>Arc1MPIWA z4oH?hQa&9VF21&2`a`bj>F>(aOqnU)odi0kFSndkVtk}ks(1A-&XkOrdkEIVd+@v( zuy+z<;HIi9Y?+gUIDYw=RX|F7szhboBwu(70{__jTs@-ez_#i<_F|q`vdYzhyZ?M~ z7}LtK+(KWfvB{*ZzS55rMj4hCGY1Y3XG!+t2J#ni_qD`Ui(Zz{jLg_eqfxn`(Yg9; zH-HGD{K()IJ6yI>GK8)q>e78m!GE4<4OVi|=ulk%s% z8-CnWA_BM3IuGq}d?1#qN}7IMt*zZ)+(@-nzXGqNl`(>JPsLjzOA%AMD^&Sb)kb%g zAH#NxI4sc=$9w>POb1^rN(R0D$LqtpEN``@zEmG_%N9NnG_5|b?FW0kf7etDb=U?U zuuqC-GJvb!pUFn2Kka-VYFA|;)=u}FDT(7O&b@LspAHTL*Jav%_+ztI)Fmmy9GWA1 zlj5~b0j>0xz#3-^&rD@!;F~^#)+&sRr=tH4HL>`_!65`L+HbcEq}I&aG%mBJg8(3_ z#q*)qlCC4?hJG44DO(>XwxbT1!S=bWx6t=zc#Jr)+fx7iztqLXAb<_$J1VomhhqyYU+Rt{`EU!e!z|sKxfrUVSVA88%6c#V|-q-MZaKj*8CGIZ%{*K z{VkmCpNUatpu`RgsjZac?>w9^8D)PPyPn@J^#j)th=g7mc(~zFV+futWBteNEc8-b z=q5Tj@rqGV2I@jMO7RFpYrd!Ood{j+~IS4 z;)o_^;qbm+3#wt|M(mC z7@YbaUl(9VbCt8Sk$iCbaaEr5{=aI5-8=ICIAQ>CT&1CX2B^mP&I{Bo0g~F45+&#L$CfGYl8zh>hH_rDqm^5dM(Ptqy7iBxC4M-Js8*n4Y#2l|m` zY;K*LoAzm*>P*hK%eDKb7u+C6>M#3V2%kDsLdR5z_7|8ezW?E;t*giXveakDJ};3l zkyba~4l6m3hrTIW%zu^P_qViqHb8RL>wvBu-I%=)9z&;HrH8+V10291d<40!)*P3O z`%0}#R88a=IZtlx%frbU3`ko zM$3-3e z^p=^2^zQdaMq)@qyI7Oz^dux`mnV1R(6Y+IN|C~>1{q+2XIJ&`dx);RIm`M!F6LvS za4T8beqR4_9wLhi^A?*~R&D$ze3`f~_@nxl`LsN}Mm=t4OoFQ~?W=nYKoJg%XNs!; z3OsVyyO{!!zsu53@33(<6}xr>N~g%9uS`_7jeo6+bOk>}07W;7PP25P&~e|u^-tOO zxVQ`?(EH0mXC}Y=9U**{tnOn{YPYwFpRhtqx`TmrAd(t&*Ku0{RX{t^lTsMT)Oiob zbut>a9SE$x$R@xK(@_>Q_cMWsUbQ>MYE7U7FOjr$nE(){lvn7Psf1iwjtkt3-j?p^ zmm7}l57xlq7AGPtt&6dF_wcS?)t78n_D_bSPlUuvP&IP)8;0p_okyi z$QQq>4_Uns-nKudf{iwYID)f2=(9!JS z(Adi$ONP)ov*3l}u21|z;MDnAhw}Se`^5S%>}Fv;^MU;+ae~W6;^gjadtPtF`W65E z90$)wVMs+~cPhhI!fM&``HT+0MEA1^3``V%md6^X^t<;&^b-ZzqGOoDkkqX$Y>Lc8L&2-C5Hde{=T! zy4Y#2I;9I<=+3LbyBd{`cST|O5m%sMO^>uHeEiGN|YO>IhGo=<+u-X4e!< zgoKoTQkB;Z#+#O{F5)z_M$ACHj7)h3kcAh*wh0DjuOuRi=qJSe4qm}76h%U_3GkFT z@3&at6ww?&UFfTnGTvD0p-3*vOK$Jf>>~VWKGOon2@zL`q-{=R=YbE$)Aos%`CF8g z9S<9yD7OhlmftRUX?mYpnM%40-+4t>{BHd?uU5bg7E#aPj*sC!;VTXYYd@|Nx?GL; zon^&rb?by%?wYg5mW#ydIaX#|Ki_Y{ClfNXU-Iv0j~#-9jDR57RG@#oJZ-S=1Rz!--p*c>lHFyO zReU7CUigsvTgh9opj(RQ>Kz+UY9D(QxIp?z-!+wATm+QJb$Qa0=@=_8IiPVE6|SRo zKJepEG&3G3>Pd$9L~*z#N5LaU)j91=hyC~a(p?)r7Y-*z1yncC+}FE;8eJyLsg-g~ zRK(nbwNff-Zk@^si$=Z_xJnB4J8czl@@?Y9J*O6k>O~GXD$Gr{i44{Kd}`2qYu?t`H6Fp;_OLYka{nZhow}*2 z8?#N}*S%$78IH##OhKeFshKm&Mi(ySvkWlNYoG6=GT!UwQK-iL5Jh|?t;Y(R}9FYMN>Ud*jX`mr70wEgM#0_NSME_wJtVy4&Y^ z12m6#UZ$6$zoyqXW(3giFpFQsz`a$jjnA??vwu9LB|XgRt4oA3O&}gl(1oba%)J7S z{SDC{Lr%BOw3;Sr6P!0K-C?5l)LaQx`Bj#}S}dM4T0l+gZMNYf&IS6li5lm^*un1d z?pG-G0--J80UyBzFl53Sc9_ZS|D?7$BcH0B=~i~3<0pSSIW9cIahv(yJ><;U!E{fFaAG2_ zO=3i%V%!&Az}pDNX}?nYK3B~~Zr?-4Z({kP)lWu=98MMFnitPgw_4tzm{(?%*reW0 zGQfQA?JhPF(3$ky)VO{h1f!KG%41`Y^$35x_=b`{R*P(J%}Jt1a`t7W&*Fz;NWhsb z`3MBQk>be5&a({Ny_4(Je~<3E1dV3P1BX1-_zy}{D?0rdsk0e!64rI5TQgbWdDT?6jZ$&uXVT# z6qUoI(BVQtqb@>v5t0z8lz}pLW7$_Q`!h|I?FL1 zkI>g%ybQJ=N#qB@Me@l;%N?f&)jRc@-XQXzH%EfX$5&Usg$^-nY`;x%4r{V_zmL=l z#J>9SJ*R~4r?~S~5@Q+{>J(zOKTF6kf2#T$K+CjD+@t+N`)iKpd%G~;MPRG?qE|wR zwkoP8k8bMy85V1+Um9Lx!rdOrZxKaX`r&t(6HtY|eGcu@KV65D^IVF$3o}ck{9uWv z0F1OW9p%tqzVdhX0`>#MVXv;fMpt2_7CU&JCZAvJhBp=X`vXy&;P|t?EhvwRyJ?nm zOfc?kBah_oJ53_yE?>p`nc78s>U{!g-CCui_H?(|sMZ-a@0QEBv69)rn}Qk?C$m-* z7}4!Lt_yYNCRfzGnQKnqX99yrpxaY2LHL_)Q7k{X7MNaR=sa(=KO_SRGc}LUpvm*dlm?)9hf`hRq8gaf9Cc-th zF$wx=ha<@cpQ>H)SFOqRI)q(aPhhT|t|u<_F)GA)>^8~lJoI^l+#FqDoid1++=~X2 zcH)?S3@hG5COT1RRSnfK`Y~$ZS8qZj9Z1=`XT~E-PrSGLDdo<`yLKj15^sjQCgazF zVkw5?A)MdNI@b@AP=uDI&s_FNLf;UWE}e|>CaTD|>REhCW$|QrhZ)NIerB`Nn!YVm zZD!v`Gl7dP!Tm6Z#iv@ZzxMDCmU+$xLSY)7UM^(FHP`~K7JynygM)Kh4GO9V*gE}tW2$o9o<3o z{9cp?c*@%$*8N`c*m14IH7`H5o$Of~S%#d$>A<34`_Psr8l&C!JdEIJ`%^J@=-cgY z1~XyN-K@b?h%U5og5-S|`jLoVB9`P*I|%E)FNj3&@iT`;gHOJ$To3NmW_QeWcFvnt zlw@#N;`QVIZL8u~RvL@>e9xcr7+di7Do|D@9 zCmrv*aYo6@LlkwFXaxR4DtHJui&rArvZV6|Wm%{d(b0RTs?l?L$wlm&H zx$50B(kIr!d^J18wWL@&e*`ueZy27v5gj_B4caSvAw)P-*DZjogv1W$y4`>J_+z*X zup3JC4X2fV)a1J`mbwMz%-HnZ?unp{z9fDL-CjhqST_gGA)uIP`c>g70eU+1S1)?! zL(Od7d%Ljgz3Gn)M`GQvTJMm~VMsAkhrUU_zbOoH4(vK5I6w(@IekE7cTGDVhg*({ z#*a7$qCFt9q99dkR)lK??kZgWlB+^R;)v!j2r3kyFZryXl?2m7ptN%jQ`-)9r1d~n z(3U$5N|EwSxHC%NkjIlMS6e1&^Wut&j#3B4>Oo=gnZw2gh0S02sB^e)BxizFT&wF- z!0*?`GS8Osl}+z`3}+^BtlpK_XM~{SvbhM|6n>uhA)ysP2vzNv-3&)F)mv4Y)Qc3B z;4e2ED!IhTEIH~84i!!@Q#G#$C>tOn>XD@+*)5Yh$*9o1Ivcv&p`5#@JF|`m+GQ>* zn)K!u*yy%UbQYqb*{7k~4bv@hdlv=M#@I39Pe=^wV~&85cHgA zN4^_+iOx|>l0mQ&`g0%#QB0GAC%S^*wM0&26+zaVQb6^*9Ybc5m5B1W1;U0~)rq2> zBX5!`b*wO64>1o*brwpT7{ZdtXrjuc`X4)Kq>a}>7HWyWJQre(AOhxJ!F8;z_!5ok z+ouJ!fRza=MENHd3O+Gpwpc#)nA#I7q9y0dbhR=J7=3F>`b)}YW);115)Kku1p!a= zmreFdOwe=&&-W3P4&@QYL6(dZGou)HRT)iuU_Zr_+9SEsL>m= z{v|V<&OqGG>2Q1~rgzoFv$nyk$ zXHZ6Qo1=1}u~{ByrUSQxJW_ICIVFyt^GA1IA>f&o<&*6;LCR8&8{Ker_$HpNj7fQQWL+gZ-mvGMRkDt#W|pkHUORDd zE#dootBK7KivCjEV<4AvZ{;!Zq&t5bPb?_8jxE8;@auVcm;q?IgIwvj*V2{B>OCq7 z8zpF`edO!1xU-+V1*>C67GopB1W#g9EYI7Y4fn1%fRO0G-^An%P0qbw+%4MXFZI(L zp(2!L#EUwp$6ZsR&Z&V_l;voYDj(m&q8o#E=2qknVcI|NlQP1$Kv-(X(F9|-iX+O{GX z(~E3viw*gc`EDrx{oGYWyOcmmtH#|&gpIa4w7-ImCtC&kyb;82)2vc8@E-|sjR5D6 zz8?C)9f$TxugGmI9jApGY>s4jfTF^lb92uTM(tPgrL1TcN*aA{MI}I@A&#KeV^XQ4 zm-gV|rQLvQGtrPvnwbT`K4`gByS&P2Vr~iOZu0l@OFZ<_Bv~i-;nTf!d+XSp_Bkqf3R7@qen%l7EVmm*Ty6WD^n@wRMbqE7m2ZUZL^rgwBltX$L~m~ zPdypbQFi($nz(=W;yT8(!3mTz>U)9-OSsZS62LhRaYwbXLEJyGdd&U_tS>GqXMU#! z2z`>OE^OL%Aa135`gT{&TivCOgU9@H6*A1s}_aC?gM z48ASNqm-}B+g(G}Cx;=5c$4z`5Eac3X-1+dXyC;u$fg^Z$18o_oIewfFA{r}f(OCKWdqqw z@AbRVCUe7)S?kiiv7wLg&5LzE$(vfivi~}8dQOkQxdtK@DSHQhw8n#p!H9v-@?JaP z#As2#zX&Dz1{h|R(2JOMDy+SdrryH3=kQs^df0P{4lbM!6&;FDcQ?Rl>`3D<#k%7d zsWNO$UtrZCtLBcxLS`MQGLXAj_@z1M{UM~A;d}p=DHW}J2y4Whi>{>tVu2VxpL6aZ zG><*19o!Jk`2A5I($j1$sF|~&U-rO|0CDz{3^i5beF)W5^rqa@MBx9fz`c0TJNFzu zPzt~!*dx)P%S!{*q^8^~jVEmkbBxw?etlmrv2u1JAaZE&<}zhh=@&kNdW zj!Z=&MZG5HB;;5| zBY)(zOY9(ZZ?qrrP#d@T%^_02Mtnfl;vX7>;FDV5b6!pZ4J9u9}iC7?WW6TCK+pT}<*zuqfh z>{Q=XFz6~pa__FBq;i?*&s^CJ!>w$#QO^n~sB^qq-!^dttfVD29DVvV9GEXGZQ6MA zdO|oYx{#x704IY|#r^yNMx+xC07dDQXU>_Z$QLfNA;^$vM0xy& z#nR?y?edDki|hwTQwYMOZJOQ)NIo~?yQPyeTOy==oA_K4dIYxSC-di0&k1*Uxd1O% z{*KPtgE|N%>6L^@y07r5Y)cpsKA?K2_yM>@yHen#OXnpvrtC(&h*>Mypu0#}t`}kY z{rIKYrR@QSZFdDUDg9;Y*|Ghq*Sz?%p{}p$K$o+A%tXhZqRSI~BE)K8xDhi&;aJ!?a6iZywz}esy!!>R*ad+4~-%VF+(98~2 zI)mv}dsVj0xvcJ=T|z}sqM^AH(%KoX)x2+lE`?qTm036IycDC-0a~9m&E;&rB7lR<0!#XY+`l3w^u&sW*B|H(7DC$6 zD>r$b0gi_Gw||iMj!hRyV_#3{PL`WaMJiNA(tRy-Z;%5sj6fhDs0q zIZa8Ij?~4+?;t%zEyzwFq|^66-j&m>r4(4HA7s*mw!e^JJM3wnGGng)(?Eo*otaL3 zLT_IGSBCr*mWbrkzAg~31u8U;7;f+}UYXSetn6CU9b9VxHo;aUB$zblRshYreR`Be z*qr-ptGkLmfu?qJV`rXPObgO@IN{8*%B2a;J*%XA)XyB2@e& zg4(Ukph%R!^)CMdO&wk0gu~a$I6Qe(iyC8B-ZL~muWdS*RN%wml@r?B!=f&xfejSxJm#F zvAi?NoA$igx+$namy7eqyy(X)4Ok^>80Pz`uND|H^ug6X`!O2OY@XG(Yt_|kpqvg9 zjyU~BcDb<(cc%))lgqy3EizNsCy_bJ2yi5`ZUkpSUgVv;QJn?J})6=h4Ia% z)MYkD4!y9N7Iw~r#1X$z{DSv>v?TZgNwuL$t`c59{dNWyl70QNV8m92lX|c8=^(t{ z>~9^Yfxst#3o2asDQB%(-%38L-%4`*X!*|P%}JqMT?V0w3IY#nqIGoqcFk<(ot?-2 z>Sv9_sr>jA7ZU%0%cG8x@q(w4^Ch?=PeN_%jih{&cr%a+f!N>b$%FdWc{1RR9r(K< z^_ctQUTh)NZ8Y`1QzDke_pY0v({dKspqHcWE}V} zzi^jb>V!{HKV2GA0k4||dzO7Z^P*~Mq5g0pzu^TXlgMHkYGBzo9@^G z&@zk=b)>yiXceD1Uk)5(r9;q6-l<=g-xhx(y!+Dh^%WE`LC$A`WH_R5j~P3brv*Rx z-cU!p*)`u@Ok|}2Oa?6nbJTj1{2R!@9Z-D?h!qYaWTUpAU&_awed*g$_ zbV%&@hAzq_jj^>Fy8nSisw%uwc>I`BXX-XX#P}M2Meo#zb>7T&y)jN=h3}KcyQpYt zi;Si)@08ewPq62NA%Yacos#Gf-BuxV{GjXjY~F~wq6KNwdzKy3*64^=^`J#L^_Er$ z>p`c0N1B|AXk$JJZVY$J>)|tvXD@ErjS-?36g~N^#KZI@-%2eT`@f^( zVWF_TRyC+QS~7Iyd}>y@_0TEqkn*o$&S~E)E;FhZXw^%(0C4h4#w=Tk)bZ_l&Zc3$ zf^Zb};39)_bsnv{rqxUY6b1^EzWUF_tYI%qm-cp6!Z*CQX!SBt_)fUx@deoY&#o3P zX-ZGR8miE6!%^!hsh&zTM^c8Vto+2d`n8;I?%8|L*nCa(wON%?99yW+PU3D#G`Kd%kf*9iYq@@8OG#}GeBwyGIUt4;*6P(&FeDDh`u z$WL`X;+B(FD~%mnA%F5aZNlq$jOSh^d%12)j`DRz3gfoTIadMb+>Pu2>(@z&@0A$R z!6|iu*Opli%dj_fQYYSn%`!$)HlLL@O zC}~~YGaJ#|+FPb3Q&Iv8br*x!~CGPx$xsz?Ji(B!X{ zgUY;xsA7!xz#cqmCyD!qmzRyXi)T<ct80Gh@~U0uVRwbHNaJNYPcH-NT%i*3PtS9An{?OFG%FT-fu(AuCPz$CrcGxHVRF z!a~jlFN$Ai$S<~6={Z->{gI@zL1ng0-Geidk;>}VV`#x zCmy~Uw(g#i_c_$_n6h&Z=PoYPam@~sm){5|=VfMBJ@;J@$;M01aMpV13V$Grl5e@mPCKsgR*%U=9?A>Lx9;QEC*QGr zs=Da5lL~*G!wy4NCY@r>&b;aA^ymJ);fe|c7XU`EPuiNS&-%tKN-z(~The4*X8ES2 z`4Z*#!{$%o^iYFd+W_Q*CG+uDJ_ooZK#FIcvDPS8N5=HnL_rygDpWthwm?cTEN^R# zK=H~1U*jX<9Ob2?&fNYZ&-w(FGwa!^%RX)ZDxywRoey^Uy%UlSX0R81MuEzeE|vMV zM(cF_WL?e$aX>(YHZ549yuZ3*Nk++j-C;gGpFN7hkN__{%YxmTjpYIeKUl$4UJnZ= zC^U?N-a>JR*lD{TSJUmZ$7>Nb8(Ddbhed6H6IDx^AIY*{U`6^EO^$aWd@U3Zo^@n&MGZLP> z2C-YFI{=qr3MI9;(QZ=g(sKiwlWQH&TaMrl24o&2Rs#BuL5>@PJDpmAEMnUXvJu>b zty&R$F8X=>>ywVI!}t#&VCh-hlJ<8cx;TKrNN1}K?orw5Nm(+R-V65(B}u#O<8MwB*3nUVPp%?8aE{!+7)Mf#Uv91_rQVp& zwmVmByO`V|OiM=Iu)<*0eYl3pIWCn2)l5s1-KH>*bfwh?7AHQttW5rSv0+p_l9jg5os0 z$arO2RY^rbLhc``{n3m*81o#WBGq)>)%*#3o-lZWW>{s7b+;i##FiMz5(AiUS-~)O z`%Zc!`6W>V@{`RMwPbP7b}Ks*=60!bsvMDXI1)R-;~yy$;u^ z6j(-N4H${#1!7-ox=RNiWOB^gW1;QXV%a{65OXnTpoMKAv(s#n!K3|7qC2Z7 zTz5n`?o(2-hp2xoCYNMv{i1NOEvKSx%GLOxJmM03z>IC&$Ffo7Gh#vHv>-uZRJsll zW`@r1C=Ks$3d+cLXPbfA82r|LG1t|TU)bm@<+@G%#G_23KD1=TUEe#A+hVE|7sfM5 za_f*e@;LtbHS6S2B&koMpj!TuC%WpGSoL;`F+f=>Kl;YkO+2U+V$ zveS{aNRH#d?Ql6Cu~q}hn{@DauROr30GI_4v>xvxTCy%{tLtx~Mz3Pl?96R}ePmuS z=^*UX*ZNaNiV`YFz#elw;G{hw5BqxD$~F9|d`=)oBkT<{1RN#)&_QG>F@CoSxe7u# z^_uGgQ~E}~UlyK~BW`Y{CW|2VE53yAV= zIY1x7Q+{@gAkQXldOscA99BUWd>r&U(7|ki!uZ$YZscQv^5;cWBPmm<5Z?7+xTUP^ z73kNSmu6$wqKr%Vzp?OaE(<1C%e@fYaoqPk*C(cW3BMz@v|<>bTp1$?i@I|0v(P_N zA|;W-rB2U!xUBo$y{}nSY+yh)DBvp3&DlTdAI8sfCi+Lo2!zJ5t8BKqQ3J}JbYL=Q zD=hyNvZCSf3mP@GC!827{N>B5qe4a8E&u%1cgzZV$h7102*Qg3#2=rY_4Z;L^+^1u zq4s!0eZuyag_g6?8d?-U|w@f^Kz+Wbu2L92))cf6usaEK5gWa_&`a=?Qy*tEr zJ+331C>9wW^jsT;ClUv*UNo2WnUX#Q3HvrD2y(%d_Ab{IsgJ&N zvWhwXX<+;Ii)(uuHp?|=ZB!T2EeqlKgg0{S{*KREb{`#N_&#?9^gc}*od^XpqY2Ft z;UY^i?LLKW9}{jF-V4KPm;g zC;QjlndIMpkDmRnybUeip!*1?pyP0!Q;9o<#595o(?)2L~n%_v9oq!-%;M% z!_I(9sXOVg+)hDL2>;12;QBvfu>QZg15EOFXj|8SN)i8>YPk*U&Zc%(yo=LZ&@QWN zqZ*m9-WR8Xt1mDJQmo#^B-BJ`}&jH=7i6%N74>(Z3^zJnlqlQ|a9~ z?VGzdKObd~h|XAv#>=fnRh$a)jGl=cOBCVZ-!cUKKgV11z`))NhN~?au1a7wz;ef+ zYhhheiudFuw@{sBmr0y4!-i+K6^kD)4=C;9DJ|((h-25tZbSApRBr(_c1FubP{m4WAGnn&5dEaTEY`v1L zjmuO%wScF6DN87o_>+=@6CV81kEFi>TIc;^7w0be#U;6djD9P4wv}eQ6KN8~GN>xF z%AvYy#IQOcmP>-f=(ECSWLzzRvGLnUa8q^u{`P+}wsp0^q5Aj7@sxW_~8vwr^`w>8;yj+SaI7IK>kh%l=C&CulpMmL}M=^prw({U_t}>x7PV zls8vH(T)6tQR(`u2eBId5&*5jk;n?2%cS*1=6eP&Q*%GMq4)%!w3-m8r&~{SfilX7fje z|KDX|kq+?>ux0PTQG3(A$ktpSTAwm=^3qy{*@ONhFszZHAbvucJvsTPLt^FhJu1KL z!f=&NjjxvNZ1t#iNI*~XSA6vr8GUPxqM;&`@u0Wt>o~Gcs(`QSY=H-bxHY>On>bdB zr$syH5X5)97J42^!kx2a|Ng4;qWrv-k`vFU zxK-wMBOh4QM?Kb?Z$%jm>*qQB6M1Fi5DW|G>j*FBYCLHIJU;`j?VI@{9x*gH9`cok z1lNQn4S7HEBJ2e1NIw7`K9R$;7y)%-{?ARs+%ud_u(?!MGGD1IBMG((L#iA*EH9;T zpK=dqxmQj>l>HSCdPJ3{o_28`yiVRiUK`dE>%!46kCdfwgdAZH>`@`4-@2#NyiA(g zu*tX&Db#7}G{CorLVo&Nz03LKq9FG~3%E{!tFot!!2KuvLq|8GC#pvs6JF{iAgto9 z*+aOZFkl>t$=eu9B(7`O0U4|=!=~1W;v{_7fj3mR%Df@U8IA9Wq!{%<>@P;WuUv&G zLX7bODbi3MSbbg#_54~T-{A`sW51?PR#s)*VVX@AI$c46{9kVjcqf}ah@6u3M=qS9 zyG?G0zqW(v@z(apBi_C?XATV?sm5BC{jS)zq)Qs*y2@5DY>^-WA!+r9ps>%ZwjpnA z3Jk6VxQn|>lvlTcV&M6JGxAH`0ZU-wF_A7Lc(?L@5g_uAiUSRx?W=L(ohgLYcJP&F zh1s+(-oz~8dRzNX=hRz}NXYd>Mk4BbrAs*T)lMn?upJbqu-z*t831ST5%xeLlGfxz zi=|7ZSb*B?x#E|q=*37$F0O?BGWl-`z|pvb2YfM#>y&Rd=3YJGjneOw(nM>=j9|X+ z`z)p!V?BNVL zfibv12r5p?#Ky%nMNRRx^WN{@kfhp7HK8udK0}K1* zpHZvsyHKhn{bi$B(IKW;DELDZ#ibvnG(fvWU9~$tTM~;qDw<4hh{ydsx8)?=Yn3(B zSsz3SVqNZvvz*(5YE;b>qRSc!oE+6|j(MD4p8|2Ry&8_zJ<$>stux*2p0w|f-7Lv~ zQ|~tZW1PK*LR;pSzJ_r@c~r_grS5r4SssSJYyXU!DO|l;vG}zav588xMrm{$8iW{p zJDLB%zO37#K#ot%^GmqQbU`sai#ACC^N?6(0sU4GkdEZZ|(!B32U^RgO6Wk- z#Njze*-!ar7Ai0CS(_ad(OCt9up^X)c#amhF!){>#4s+`m2<(ZHGk|M)kOvn&c-{( z62{*a*XV@qy2~QIepL6o>;gvuhZV}4ME;03O@?UYGI`e`3mX6_Ck1S<*`+(=Q+-;@xM3=nZL-ZGd&#Pc-EZa3H) zk>G`mt7V0`H#W>Gw?c@Bu1}g^gMT3z@nbCOWRW#v!o{oBoUq;-Nn0wJVDbQtd_MCR zn_kkI3O)D`JV}cn2f&BuSt_q)682QTI7RD<1Y&fl=z&$QSe-SroK>Wp8?6%Y{e}DJJaK6itNgm(epCKaMFNIqQzSF%$ zwnW(clJ9QlRwdgW4$i7qC)E!x`{NuB=?%Ym+6=ikU~)%LcDF$GXtnUBYkZ&m&Gn8U zmKE`emf;m6Pca_8GolC_c~+O@hPwh-3vJPVgGz~sD$@Pf#1V&M54LlE;J7g-f+$5P z6ALT-!L2Ftup#ceOtR!5`QKH_xP-S6ooPNa@2_bTql!D zBE!cmD|nih&f`x?zMA&Odx(>ca>=OQ`#R_deb+Sz{TzR4MWZ(#_B$&U9Bl~13WDN? zzxckr7>FK9cxAu1rMrtd82z$F%qBpGFdUZBAY!V7i%daSNoJ-bNY$`}|Bc(dh6%Z1Qm!~tvS_muRQopd-=aMSki#ztbc#V?CLCzBNxxz)wrn1EBGI z=a1Zj{0INc)}q5%q~fxdWTof3lBGFQYZbGOBN@*?d*vL%3cS)Eu7@m#42QxqcGM1}yspc!p9vm_hvGtKi(T zh8!}ZC*pbpv#HP3-pr1FhIZSq;Xl2WkQ59O7W437fm4tz_}bE~m^S|f%fOL3@vO9> z^|TxkT?!}l-D84OYT-lR*}8sF%Wr}e)>6jt7zgF6sg9at7~Xzw(Cm-I+FRMoQf3C- zM>du!@Oa){UJtRgvwvl#Y|pJ90X#n|baIF|H+w#_&)fm_VtnG{a^m%6c2xTDGXO^w zAqt+9pVMN;_Ht(*kfCwA&*1qysy^E6@%LW`-9OmZwdz~eYZZr;Y)V{7 zW#4K5h!b13*$hggH&8r!oTmm%pK~+18xW0O5i2UoCHniWVw&u-RNv%)^*Sfm53||F zVr;SBrwkH3M9pQE?C(;9a4}7E=~wjNvU&-klEOcjXM#c;N0>kXYxMWXdoIa!(ao{3c|yV#k|O#lYGWz8Dqb@o1cKhLwDb6!{Z zK3yJ%R%fwTFMq*ypGh8b1x~6>TF9rrO{f@wNk;D6QJn0{I1aWrPhc-pH~67&FIzO5 ze>lk?M-rTId{f?69~o@g?7@><%}I`A6BeE5^6u-q2zqRWF^O#^6-)TKA9Ftv7u}h% z%M7QG4rY@4dOyLAO{wI%JF2n6K_H!$+c$2U&Q7)d-MJg-%-;*9kY-Ij-sKJ%_Vg18 zTGtWx-j&z~_)vAb+Ki~WUJjP?flDSpkuaqMukn@idm6G<7rHe(*-*W_6XG3t_KE>G z1Efxwrf5}zRD)VuqrD<(@&u6(V}3fV4u>PC)&1NG5>PtM_WD3IHG9*%jt3V0Tfj6IHpLO|0=84-SRnyNmY|i6Xi8w%WI9~mI ziD=%5Xb+YeMhI~^cD{Fd#I;e@w?)BA8`b{e^WnjGC=Mw_*yu+sxh;dGxtu7`pXnp` zhb)0ysr|_Z0|y1NLFrJv+BQ%}b2B`PmRMvJDl-Tb<$3iZ>;1u%uY+G`eU-zdD5`#S| zsy~1t;F|RaF56k+kN`+)IczH&R^%+iDg*sot4mg?Kq{4iCW51Z*eq~ z=!$Y-T&5In@+tw(3j1!@>cX`?uSzDGyP^ca*b^EqeamxH-CB#ULUeS2_@@b8Ae!;s zy0+)9=5JJHDZUCd&i#wv;PK;a)OIT-O`rGA&|yhEW2apf!W$Y`(&ArWBX?UT)#XFT z$r*V1)6rh&Z|A(9Hhmpf{N08UNsZ)M%1AuAOl{-Li;lTVSyOH?ePOij3D%cPu`J^)onBET}p96_%Ethc_kxIuc*1F_7PnI+8xX z^TD~PWq$eoEPmz(?hhY|IdW}J@my+I)n2v6(Cu@qtyPrR^G-`75Ta1lM7-<#Rvacm z`@w%)lAU6OOKGv)Wq%OlW8fJr8w~UDnqEGjiO8^fI_MH>V=@xavugZt_H#K-(rU4b zOTnj)^*{k*XzqmJ*|Zu4_-o9?YiZB0d-LR0kf$frluVfNZxq^0ZkUHQimo%&Y;vVt9CCZg@7dq9hfX1)sJ4FZQ+gX-FV6VhPbA&AFe zzCQ9HeY`P{#EgCST+aRx{O{xab4L0SjGuJ!1J4~R>2oE{D2Oi&E&y_Tb#(y#Zv>CF4!}JCe=k z$n00-SI?@s7?q-oqr*rWV6)g2^FMd~I#Vi53y($et|cW9HPzUityuBrA`ycIDPoe< zEd2kEc=agu+skiFwx=Oe=w+87e0C>a$M?cFZ}83ZW-Q}f8!*}H9Q zw#30GHx{7^CjC1$vC4b*(Z2W&MOJH6{g#13)7>o(j-nj}dC0>=_hEp+7$JUN$M&l! zt_$3bR5m}>3g%=5bKa&H`#wn&PuzQO-~rB;?DQ{`g@6v;d4BqJ;hZ&hfMbO z_zwHiy>vk-UiaC}OU?`(8SJu@bt81mDxo{mF7Z9zc6#yYP}qn>xH(fMH0VT1unODO z=9aCmmkGxU=o8)*rfg~S8S)q&9)n3c)loZBTI$KM%gza#Cx+3xblk|wdzq-l(g0;% z_uuO-{l#755x!(5mq`|*Vf9ZtHk#Y>n3mRxb&9_UU#oKPdW&sRp!ht298rfg^GWQ zx9;X%Ml1sJdlQ!iYuih!dYyrL3Vd<*-bakRl}LBKySC!kJKxKJAHCshT%lA+{n-EhYpcCIQJ43#ejb;0e zHmH6$Y%}^>w{KaCotv0P?kFx(ynirU<9_*a#$}S&#J1h&n4#Eaay;*lsd)eHYjqrQ z*7P!6XU~SB&%+KvoDGBm!)g01tTW|?dCH&tXWS6Aw>^`jcbRVH10?UyAvNF14Hndi zjIr0Mb*&aHLlN@Y!s^@&MfiQZ1BTFX=h`w%HCDKVwE6Lc@k*d`?}8#R$9FW9^dDA> z8L2S*jl=McNKv*De8I$TPEm5UI$f`%B(IXbKNtMvxaEal&I!rlKBCeC>R+_VGR*Aj zQ?7g*f|XXA5yVmh&!Oe-MyB*Epi}(G@QGfwk>tyKob_~Xuy2<+ZsP#CN!d~)CThzw z@WBgb%u7Y8H*HO&1pmvXAq!|6y^EBJ;mK(2Mq$Pi8u>d0a>kau6q)zIXX+lEeD=|} zlRdhc4yOp65j4j$sN08mjxgBe0~2Inj^AM6BM@J>XHUex~2eR=`SIzt)`{a_s#;tG`hk| zd##2`1I!iu*MML8%M0zu8k$)Ktouq?^1FR-M^n^*_un9nUBP^)jH;JzstUz@WnI<< zqo^cOmY(>l_Ig8)2!N6httEvNF512NnUv1(%T)rmm=xzn?DO z?7T#9y?ttKJzBQk>RFfqFYr+ilh9-ky!X>fp;wp(Qro9Eb7z>TQuCZ*MscEPv7MdP z?BR{XWpX*fD(~iRCfNI~YHSH8p7xe#3U8_BBf@DJRt-6Go{-gZ$2!SqPd0H&*Zz55 zj2V*3Hsq^#@peZjnkD-=Zl=+6n=0Jwx%-+x? z%6+9WH|X*z?@fz4(6+ZsVv3)_zLu60tehAyn2kMgqxYgarxO0z0GksJOV4v^j#0an z%SF|YM|B0zQ)o}G)n-zd;Sm+McfW{91KBOnvBa`1Krt?@lkGxA*Rj zNA=$Wl!UA`pDZbIUt~DB^oKam@tdk(uElqGz|?EE041N|sdS7TqAve##)SXsULhxy zr{2J=0*m8`5^>?uMT3sf{P3E*RhcH-7(3Im2{kXC#c7WVQnR5Yqf??lJvkhjf%wdx zv}C#`V!L8);g*ktFaFWD`U7X0zPu3U2f|L~uKOb&Zz8hv8hm*LnOfP^@2X17Y zC536Nu+WZVuw*FzFcjn=_-Q_ISN#WfGxdDJSjew+uFG5M!(EZ%YUBHzRQ?7ng>2x~iAX|o^Ii%@GX0K-Dd7vkftB?2f4;W3bhP@hz&UNo`^oMP zs}r6ZUw%gk6SJ|*?>s0Xa)0lk8~QCXfo=Rf@g0GW{UeD~AFF^xmI2M}aEF%80nxSC zP(InWM@ujFO|Yn4Vr9z)KaBb&4;c=S>!I$jmMK_ac8fK7q?Z5XFX_n-vMFc@;;Uzk z;?YbeF9bE;`(hP`~&5bpz;Wcj?c<)>wCh+>QB z+&r@1(w2Ng;sDkHM34Sl*M0RY-TK{wQAz6XyvZ~vV1ZoS%0WHv;hNdL)8pg)KWwRx z2aepN)Z|C;2^p-#-n2>hS=D*2zo~}>#){1zaW9=qMEI=PT8%4!+8~_7tf1hW@J6p% zCY@@JZvi@6xi<<(PS-jTJtlNOXrnF0`B#f)CG1?YfkM^?> z^6wsVLLY~9dG`z^?g<+davCR^D$fnR^6A^KBj;xsDfADaH)|p&oU zFG@;|N(r1!KgKd!jT%+2T2EK4Wt(k&*2}SXiHJscAsQk&`hlqKzzr(z9UBSBya5)U zd)L}lX7ac$^IzUZp&X40pIC!2xuj1VD$>WaS){q)PwvBBr1*tn0)J0INo|^tPY5Rb z+p{q5qcSydQ+F@PbE0*}uG69H@^j0Wo&w&#LRnOr!-85u3(cR=j2j}}H)A6@;&Vtd zva0MYN2YMR>=lKcUPx<^{)b(r;kHWg7?{HoNl5DGd#0z<)&_QjzoIr%WaIji=aLr0 zM0IZIWW7zPap=VINvz|-mmYokV{phM9jmncT;R~MEtv23ZXjTZjg1Zp8hEnH&pmek z5;XOz{l$+fQw)!+r6taJl?>+j9{ptS(B5?2A2l?>d2BgNMFI25PD_eSKR?b|&jy%) zvoryoRrlwtA57cpJc@3f2c~QwU3r>CjU~4Nak~@ifo5E>ZP-_$x41eLg?+WH6!@x z$<}*5r{sUz=SgrtIn$i}NpGP+?^2Lh8Xfwc);I5^?}}rlnG-$YR6u|y@FRAhGn2pN zGU~O^5oaZq9T0N>!>%Wi+;4yVlDk*@x;Ml6`SrJ?y^g-wino}he|a!3DU^J~t|{>O z>G><|@b14X*LPDEZgq^97e8dA_ld*Y6HIXZ(DWjS@CpGDV|&_kG&tY9C#uou@Ecx8 z(E}vRzTT(oyxuw{t+c&6!MKZnBq#CBNuwiICiU_?Ofr>qi^y$~oFWi1Eed)De?N37 z@8z5@=w$dS8Yq@UVjJMTG8bzma-35Ew7`H3qoP{Z=mS^!#e7UnWA#4_KVbuxfha?2 zp}e+HUeAcfGRMt}5GP^oiu?Fs;!43U_xKTOd1noSsgeAWhW4li!&rser4Ol~S(EQx zeD>(z@icnihcjcBEl=)p#{fz$9C6U))mtI;+0e{rkad}|+g~|5K*>y}yp$UuRXy1t zI7Z{?d+#Adudeyq*vCi7Pj7h51UiziNz2WN*P*UeL}m!%eS&l_B|-m0_Dg;!i!Vn$LPE-MSv zSoE$c$A`eH8uJ!YNCYke4IV|9CsmR9>b#ev7^S_`G&kN$XDZ`k7}8G`*%#~&!!MG} z|Mhf071EC=)4kWaV8}tyjV6JV?*{r%Ql`Yj{?Si`dLP}9UA`^g#*fxgB3|f_dYdiB zmkZ-DrW@b-DR$G26VUh@ofTh(3+2ggCE+IL$rR{*i0I`Z>a}zn@QGwPaNSzET3zQ_ zV5R7$E|^{UXrt=4XYu>|)*+*3TFK=}l8=4&PM0fzp^@n;9|ngu#RHf<=~A9$r(kcc z80&X*UybZNFphIw8@9=ex8|o9y7dHOnSKd3@8i4o*Si{&MSY4!e`2Pu;~(mdw1xUm1{^*SQstfyxhoy< zO{-lZXj=Up8kOfMx2hXeS-kX`%7Fe^>jLS zrk)9S(!qjnB=93>s}Y#(zAZke^RD|CXy4N?BV^qi$wJ2O>^I0hv>M0c-FZ(NnKDxUGSnhR zD)soh3AFr|3v-vypBZGXy27%ysb+n2v$P9MB1|3?es;bxZl55b?2MmlrhC82PJef| zA##NXNF4I>q$obE%_adC$keD2Mmi-6-bo+m7NPL3NWc4&qbK zuU}@t4L%>!HJd#0lUXd1)T^tu9~1S(yQqVd7>m+5h#N278Y?f`xE*n^BG!GmE4i2a zs7-X_N1FY?F?H0-78a56rBCQyg(<0i1wQNiABs4siItE00X%R*6% z({7C+d(MVZ$XhMs!J1cOypLv`KL7f3fxPy~`9ed#*toXiB$(xhRV3XPMf0wh1^)|x zShn)KeKAaJ|9U6-NH^4NPnHU;NiMr?9gJz2*>q_r=<{8vl2kfmCMR zik}I?0Ltlgd9Iv8-5-y5W@6a+1P}0A;<_9_1M|I&ZuU)b@!iz7>D_O1mkLiRO=KcBC#;L%8oo#4Ry3j z8VKBVvyT8=078xE|8mLsMWN=!DGbp*-_lHGnd)e`ffol&{!RGq8!z9Vz`v*VUprg& zE^rmRjcOfE+}ChOsw^Vq=sTQspfbKOo_*|v<$fgPyUKf-=sft5A3}x1`~F8@Ef%W} z_z|}TsIEq?lNg@43~WTlc!Jz|@_q*R1OGQG9PrZp<8SMax-{V9zFC0(nEl!X50I|y z@^B1}N3Gd8pIm@La7%9M60(wBp3HwhbMp&FWCHqNdzttIxMz#W29b<_NB+-dz?iVh zr1umzUsj6R|8rwQJTE}y)%`#5_5Jr@{%_5CH^#slGsM5f%KzUq_HO`gjE*<%PT)iA z+ya5dz42B49|`t_%znB&S`%5DLU2GEq`FF zbHY*>^xVGxTI2qwr|hIIj%`-UyqMEk>3HqgaEe(45wnxOObfY9#uv?Dht%p=+9duF zR~O+INPA-j_bWvWc5Y|}D6j@>Y}sC4`Y_uI+@nsZ=XvqFkg2()cBTD#tm=Klq^y_k zzJ4$&4;z?bi5a-V14zwMS{m-WP^M6fB~cuLC1|eGMA`C#(F-x6&`GBm@IbHsWIK^Dg5 zBsa=D2M}5N#k$!9s7beoE+-iIBT4caWYGVY|o>58pa<{<-f}6vogtO~~Ji!GttHOK_ zqrX1*J@;MI8GbOlX`6-)0f#Tb3>eZ$`A<)66?OKx8ns;Ld{8I}rsKngr|$)VS7nnJ za9M|3c99v%Os2;IeviQqBKqYRq(F)SRSIVu77#}JHE5d2h3mn0S4^>DsL&gQSU5N) zewSN-hC_xU{tEZ?Ww0bGi@(oOxvjvrcljOL;sdJ?GNI@Ql$b(l(EA)hhB`5?jkOOa zG(lQEV$+qUcjc)}ccI?jq|YvX^F<(n6iT8*Z7i%e)Psz>1HE&K4AWxuoS1=W)=#_*F+iBd19i?;*9l9_7WyCRG_!Sc=8SXtv6q8r)PTP-HKQcdfeka=x zJicBdXP7Bk*dg)E^ViDm%wE8QdpeC(d6!&uaRe%N6P(pG(nd1jn846_kMao&q&(|V+E~1~%s@PfUM)sz2tXZPVsN$gGrw;PUMm6uiVPZeO z3e>u=-Q8Lw)zYRc4BWTS3@TRj?5Bxx_WTp7u%GdI$pS~e$Z&^5MND3+WNjHjz*66B zo`eZY(pTryKg=@yVl=2t?K$5=^VBlkxh20>Br0wD%S7!M=G%iFr zYq|gI^YyW9k&T+R;}f;!+}>z#6r^wO4N86`d>!Tgr3YMtn+M0@=PNc4Zdw}7(C~{n zzg$yHFb}IV%4(f?`N-f&;#(&7Im5~Ui%;p&A$R4P63LthlfwthbC<&hR!>G(plfjzFGu`en5 zxoXz&n=o;jr7Lqdv7%NgyGgu(bY7SO^LGffTYoQj|zt&BraaCSl}ex$-_O7^Jr8&S4;;| zf0ZyXnyJC`VPwhT;v&(sWu0WNdqL=uhQ9ts7XYh%E_J2Y_N3R$5>Y-hrKX`-TUjX{ zTARFx;6Nsl>7}IzY)rm>#)JhHWmh#_`Q2xBzOF)WqY1EFeY8}pX@G5W#4bNRPhkXo z-i*_uCJ0WL9bm%)j`ZC`2q&*Glkb=e_sb}_gheJ8c?MB9H}d6w-ks;5_sbH>9kDm& zhP_W~@9EJ&Dn^OsnT~oQNQ8gv=M-q(8gXw{-tiSeT&b&1pMu2E$t? zpZmQS+E{*21>9$GavNPnx2QI*M8bAS_lI1iVHTb2EGY?N;{ZV8r>e`fsR>jI~ z&jUkfThjlOUyj7KH#2v2;rv!WJB*=8TVCB-yOFf4w3LgR+o3(0#@LzeESS~P@5Nw^ z(!>)wtFMh}K+{sy(9lp+eA@*x5=vJO{zW6*7{=y(xO(}1Mk8Qns`+H5*Es+^0{wz} z*NwVyn08fFZKC|?F#%tAUcNK!-Jfs@KCoGEwH|mM#zOnPHkmHp+#{AN~oPw?Y$vkErZ|1nX{LCT3S}b|h!GmM=>@ zMH|1AQ`iu+o1~(pU0+!Nfl(d^J9Yq>CefEn0yFEm$6bQ{*pneDd(bWD-MitapBDbK zJLiN_+bpOR_Y|So@CTMQvJSy&bJcr3z1M9J{He~`Zby-Yl&#LQ+Yu}7;%sG25c9`?vsq^NNe!~kcAcgF6^AOFQ)_n>IzFg{-UHGB|)HA2Hzz6rM5z4?#j=MobV z+z%2sKdZ7iGz_i=;U7K%U);%yR?UCv<;M}(DIDzTF#w~WEUNaz!jW5yp~FSvyRxk6 z)*L-~0C`_VG2g-f%EIjJudv(IV39vEzz(27x+W%)ujYTeT4;Y-sN1+PuXIQQUwR%H z6@^Pg?=$=LHdtILz$UnW%V5mEc$1>$Jm2YYmf*}FS6 zIF(vXe|U=Wx%y#fRf5;uQ)cT-Ccnvje=Am5{{H8igF^BF)@&|=tYdtXKiZ3=FK(2u z$9FGvN50JQTvL4d;|JW`7!pO#+L@YC#FCq`K!RuFk$mGti1^3=S&|v;e&ba7{ zHJN$sW1Rmc=Pxl1V%BKi6fTLt!5Z%Q4MduiiW=dmKl)3bOq1O}-UtGEJvs5L$!qH^ z9$Dbo5|#JWPtJWPZA?*RWo0WvqG}?ViG-~xJG`_p?brmAm%HDIxeXFj z9a&l%8W*A29FTs|n{aKNArM#(ntZAz!Zd#Ckt~c``KA~Wc&WDKDUE^n58sETMf~pm z+0@oo4a&wx%YD{zuCQ&%%!bhaJ`=5h@8aHoV7v^twyOouqp4dvvOe`Qt593qzT%Z`@CGVR-W$H?w#L~8i((`1jrU78{(XC6S;2p(r{z4 z$Q0{f1srj^xjigv0RMux7My1LXc@WwTkGT=+$sdMeh-kl(82o$vim=}hnT<}aMNJ> zzPw-AckRUV>b~RM{}euff}A8=lJ-mjP#}czBTu>6@)h8P+MNAQNG_8IA}^DETj?T3 z(j^~bx>h}lMx$SzKsk{5Brw+EIDr$!+NgSgMq>K9fDuM&nMq;5gF~6&OW=@O5a|3E zpz}W>3S%kWFZ(?sxmvy$~k{{+8(mhO9rNL&g7dzl+n zsVAjjtGdhjD&1Z5x{XxMb*C_?cN1!GwF2tCu3__cyH|}hzKZD@emsp?9s_}m=QPa( zpii2-MQ65KOtx*lWK20}{BaWb!>T#YdffhMGp6b3{4`yAd%M`f@$vSodHnJ5`iVD> zs0oYG*&pa=kcG$Ek=}VQd~baT{(;m8M~F5?nUHiPV0l20R7C~1XTYu(;U0*3-xmrS z*_fk>w0sQS5=eChA#zzgoGQBg=+RTbTvRZ+({uIkUHFetW}IjlX_0=I-2H`HhftEi zAT++bL_!Zt1M4H|v(4p|ftJ>L$mNKlg*N-t_LrZ1eOd?x6#qWs8x`P+Fs{%o^=JhB z@o~zBuBCd(cR-+U)5P8Plqn2Oeaq7i)8K|%KMvhZaa@mYsgG@xsZZZcm&RO0-d}yA zWzE|}t|{wEx{AD05MeR|*=B8`*v37Co?3h*yZ=gE1THLfU6wok(JiUz!*5}VBTP58 zOn4}T=n?danIa6iN~4`#H+|ch&h}HmyRqL%CX85goGgs=#rN2#t43;`O1v(FB2BZ! z-Pyyw)8vdD-ID5q1!=~nKC5-2$&r<^EI^@V`ucX}zK5N1d&HqsI~j?nQ_TjWns6LH zqSB?%s=3;e^{*CA_ZEuVnMFhl3w7^ZMAkUZi`J1>%HSOk$KD0YA^Pmi{b;r-4?PLyiQ|fFNI0sRitZwI})4Y>)TE>E72bcsZMCsJt33X7*0nwQ+>EZ zObAc0KL0@QeL1*wOa^cj76&k0Q1Fh!UQAQsB=(-yo>o*;i@#Q*#7azO%0!{8&MW7O zG`VzmRaEZlJb-XMucP}K=-|-V!2~xoyIYKJ@$KMpBnbk|mh#1r@b&XMhr$As@&}@e z9>C=>dWR_AbanAz~Pmqjac5@?d z$SgL8+;76S>jW<>SEtB9H!V(<@6;Y#lV)8$^Vz+-SE}{3b?Mb!DXMgX;EwOl#mkqA zh)V$+;zB}d%}S#$%A6h+opNewQAnhVvoqK4jChij^Y2+QZY(V>W=g-Ne7!L6N)L|BS+e>%zSL&J zXdatXrso#zxG^6rSs?9)&|iBHWHf&N*w_j)99!=8IpmInaTYs@%lGj+FKmJ;f4bcBUlMdYnvhHhzrZs~ZwyOovI4&!t5;Recv@ZOf-B#uP1)*7(Om6oiG`0<|h7+?m5wx^@Fq-UoAzNpv!%Dg})#QDRz9PkI9)J}YTNi9YwZoKe%*&`?5L z+-)yr7M7TzIR|s|?22z=NEjakGGr$t>Aj8RJv2Dz;P~{E=3BrO#r?YSlN}R#%X7rF zk(%>!GWs{zq5}g1cY;6tar#UrAh#z4R}usJ_^CLy{P*-grJtP=Tk>d2R zh6rqLM@PqykdUUPrdKHDAhas?m`|9#=8U)-{wPQ5VL-}yCUQnc!VkAF#FCE!p zkki%K+1~K~jbKSR+rK zy_vef(d=Nf!#_oAh|TV7o-)3({(tTF%H;Bv>-nlp3b4JeKwNRBz9rL$#ucR7fim~N zrx}GoxHLuL9~CWq<{+BK*_NgqsQx)pEF2oBB%SkBf{pZddkoz@GTH01K03OAO5!$t zK@ky3LMRkz?ksvWnaHKr+}vyqzd8a?@ATq=Y}{sZ{0OR~q%_NP{gW^7)$G@x#6 zOw`nOUY_}9x(I;&`$1>;;4k}n_%A5aHfNb5!_Mg?b1A-&s(8ScX~Up*@7~RzkL&jK z_ALB6JWa4Lg4!PMmZ@tULGeSs_4OeO3akKkRUQhS-`sTaH)!|;lP>aNx$fjevMj&F zyP`ORDyN(wUQUyIF1MKQB@JA9Met93?EYR12uaHYEbQLUhp6k7sj-Pe23Yf^~fQD&{;YY?wXW!84@eNzdN;QNdMg{ z@#~aoA?c(*S~t)FIy+S-d)!Hz(Cd>8?luNTi@y`t)RI$K21P|giV6$oUMs!0N;1xe zkscoA80vkJIWA;CY04`)icp(Z@Z5=fvFgO(P6nxbhm`8mGBFW*<>kH8lX=P-k4wxri|ABB{0vcm4h?Dse5{QczJoPt*t32 zC~8%0K(({6AstiC1Szom%=}GmZtjNeCMIrf0%1pWn-;{&rdN^M?h8|wF-v%h<@Dtxl{^aue+_z(nUBn;q;=pGF})k)Pr@%Fjsa*A7Z+dY%>pgV z!QNhuiwkIQhsCl1r*mO4GBOjj&I(_(d&&0$)L*=KAulg4bFnG-$uezT7!96$7KU>j zE}oFykY#3OHhZrL!Qw1ekJ5EGguGAAD7Mg;(v%E9-2QpLfhcQwH?_0UQNg6HWW<4( zUhGXPmM8N<-ao<4U;FNMy!i)e?z=SQJ)`mD$yc-YQI|=t8y6JvHFZ)rHg#S*-tpC{(IUbHFV=raf~P37#|E|g zjX=_C^OHgR_ql??LN0Rr8oW~dNCC&LW)iJZ{n6oJA75XyMvte+x|ZE;Ym48qciMX; zroJSwzVGPz{k!cd^6drWv5ijOOfx|k3+!xg<1hPm$)8OmEiLV@mv=PlO&=aY#~-EM zl6+D1>|shs{>;coD3Tlc6P4$|61Bf3eD!u1=f7K3CU+f5SK?0em7LlV^NQlfL+N<0 z3dYK>p7;Pczm**qED3hW|Na;r`kwKTTK@OyWc(K?zZZ~)x~;3j>T_+P>Iq15s<43P z+Q06=DRz4X+mgs6ua?h`z)||bFk&WU604ck0M3KhL%#sfnwB0?SLQ9QIXXLAS3M)d z!5qF0lf7)4n4mK~Cj0Z!$zl&`IXFEXyF+0%hs2@yTf+eu|yD!+t*93c1^7uj| z2<@OQH3Iu>C9vydw5_bD$jZ(>kHBAM%ABnSylBlsoqcGZ4*#^EuBK-0W`jnKK;UCx z$4hA47lyo9vzww*Qo)*>EGs{DPAKlHu|tt<)8wqWd`B8?20 z06#xJiB_mbC<>$B@f7J)^kw{qnojhSrF3Ys{oE@JPV0{-S~5_M-5Tiqtu%9FcqyY= znw$Lt0$w2-J>yWFoK_&jQ8cdTq%UAS1gHro>RfO+IJ;P8qlhhsJMPv0f<;)RkJSxA zb69!Deq-IFs)WH*DC7m4n&5y~0-#dG0m#~TI={7dr#fg;fgtvn?iiycY{j5th4GhO zCYejzm)M8Q1&zJE9j>zx&*fh?^fxXEyKux5W1~Qu(@T&T2M0$a&CcH5o__$ea8uK0 z#%pdqzW0Z3x~Z>{^tqKt3MwmmXJ$|p6+IyMC&&Y@t0dE0)k6ImFIiDK-kOi|j|v51 zbcL6bH7g>!{3L8$+%(tR9ZJetrP)y5M!$5^m578G=8uZeVchZ0y$`{UHMOyG=EDsA zH#=xFXr8F4skPbS*6j!{FvHoB96KE@A{wy(Gu61F$mv4`TpUN!2)>-Gzh^nWK7uee zH(zFLh@Eddg=#Roa7|}xHtxH1voc35OXl8j^=_-kOn}bvW{HoTqT%k|oh$$C=tq;E zk=xAPo$@z86)XxCT%CEze5rJ2{2=Yukup-yFw7!Td9mh6z9*1Q$DF^hCJL9}=9~Z!5#G(ZUC}E=Ma&Y%)@Ea^CMyY@H(lgRs)vS-HH& zZK&1hZW;O08@Z7h`E`ySCr}gzwyX~q={*|lYxEIiFmfedGWtFt%7NZ#{36g`*~OtU z#G(DB)q7C@^QWggT$nw31v%~{64F+JKv)W-0bmM%`>d5N7$RKD^w!YvU(aH7R9sPr z(NU3;^E~@B3joMTEAB}L{W23P_6@ZrEX74qGB|7?S^njuSfsF5aii(VUXXtX>BnJ0 zvs@;pxi}iD_5@c)xOKlnf87fH#t}}ICdW1z>{OLwp7u~8qt7q!b3z4vM?t=d*SsN% z_g5pT=R!(cDkNB&Sh%=-nd0sM1_G#YaX6&aLmZ1oU2V)qjm2V!A1aU+t+j&Vh-H7q(P2hH#O}!cX|lT$C^2 z)(o;tEvZInFSw8ccEb)eZ5CgjHQYOgbiaM~4t?4on=KP?E<{E^^$_a<*}UJm(D8oH zKx_~eq);?Q>|%lIK4#!}=n$i6`KS84?SY2Q)~$N%i{uVDnhGMVhj^>V$zfPp+>>yc z*oIzM(inm9Z<7ZyZ2+uc(BOiK^?~R{J9!0z7bdBt6QOITcW}EIeo;?&71%T7=}GG` ze@oB%d-SB`x^Kf9rL%MWr7CABYWRXVgh9RQ%do(!t#p+y>DP(kRjr1+~RknLpD7vl35V()q7Y|Ar#-y;U;+VmL>@l!=-B>+>Ga+{8SvJ6`^b zr09qJDJ&|o>F$t}l-x70+d>M3gw&XuA5BkNAWRx`O(TW#JZXWz@k_x_k7t5-OxJwE z^c3dEHA);TV4&f%94rrC8bzyC7>4W=nUd9G*3g(OBTq?>v_^GpvAYK$wazb?udh+prFfSy^gM~uD-rv{=kot@1p$QYRVsCN#@%+#1M~PCAC@H z+QPD=k5LvB60&O19el8R27$V~y`Nl4!Cmb_w#x{T`}vvr%{V{Y#4 z3xD2dpKR3UTQWSeAMn)QWWT?#e7S`j)?FjR;^KF1xHFiN9$7{D=Y!2fTG^W98tjzn z&tI7-xfx%^l}iVZz<*(&;a8Y7d4VQ)`}XZ9O5V=S&TmkFnkdB7no%(#qPLcr=z$7y zfA#R`xFgej>>e&qLtBE-k(~O*Kc_pc8`Wi>{72RLn(!Ig!O{>TmheVFd3F?C_7XCf zLKmfrQ^!Po^#lDa%+rJ*WTj0+=)2@hZSX0|<1*Jt=Nr0v!_1T`Y& z{d;7&f3hmqg9o_?1Obd7>vj_gfarnco(#bE1N{Ay`C!?RzQa<%5zEN%7p_kZwtM4O z3k>JWgqD|=)2*RCKJ^1a9muAp2}6KNi9;sh<4JS1OLR*$v!(12Rw^oC4NxZ8K-2pq z)z#JXl3vkYZ6qTBS*S3iBO!V7EG{iVaA(~et;*gdY|s2@iRDgToN$D=_2if+)!%sN zjnJ~BfOKx72?w_C698T_9D6gxDTVK9N`n3PEro3q;1>?vmQTq7mVAfMo1DeUau9J= z+PuEup;(|JttNT+aH#Kv?M*O%R!*O~PmIO_r5Yc68*N%@72%o&%7&im`&USK$2@Yo zppFF+-Ypv*jiE$fu>zV*llRVagFDA~gYUue*};lj&(_vf@7N~i_(C20XauUyUGr1X z%S$9A$UVOO?LM@9?w4_1GEpoM^edC&c!0vMeIUVUjvW&Avw@}TwfREKDD`X3^)ZJW z-adS(GwHp|Ip_WR_obvJySfnMo<@JbDxPdlfzeowin4OB!@vrDBP~EP0%?REo(m^L zQUE0Ud@+ZJ!jubvn%SQ)bipE|OW_;dG_EZE_}+;6qx-&G;vYVuwmH}1 zof#%jv#6-3$jIDJw$0cR?62(~-pWT|gv5ROCNFRPDh~`;BF=tg-d{N&KHd%cfIPtD zySIjnE|OcCa6vhH6_1h~E9Vc`{r&q_#AUkKwl5oG)}aFhK6a8Ss1PSdN7xH`AwzQ; zS#5e(6x0_pP2PQW=}o^D_NtAYRq;Wm#yUq#4o;(73S-ug=EhpqpLf+bz&;#^Y4)i)!uR6=)vw?d$RvhPV@4&(!9m<17x9|{ND5_q z8bo0HPabg!g+T38Xd4V}5U?u@Zf!%qn52L%`=a7?sjR>^6S{Y+sv`iv?O9dE!mr^F z|IO!dcYai&0AI@;S_2jV4$aJ8U0o27xTK_`-8lt+q}aga$X4RFYcmD`v4S5bJJ0$Z zj-H>S+a=klOzL#UmG1@(W`Wh{>}1!bwgM^f#&N6?5WfafbPDPcTaG09RlBkR0KfWn z0pHuhgO95CoOjrYb)P(jFSVla{Y|iOaf=HI3Iep0m6ZXAR#g1)V-I?l=TZGjj(@>i zxS0nI?;j1<*MMu2wA@~&k^;z<*aw4^r0y8Hz=EXThbrsc@qTfw;mW{BO}tQbPT<5%m627Z6`syte+9>J<;#2_>dm3m83p`t;QSPNQ~tBakt9n6AFxVfh#3s0(Lo1^~I)#G$Nc( z^8LLgG*DCRyE_1yXoVhHzzZMz%?cJpfvQ^%V(VbvF8zQbokb%PP%iY1j7#s+^7p8wY(XRER@CjVmxh>5X z_r(np>|Y;wt+xy-oS@g0bGlJya26+%UR|fnWU6~9NMV7ZiqoR`d&LgtCs`*fY2^4i zKr-v89lEWggwqv58qw_t*Jd8y^=Y1;f3cy`z0mUr04KnRK0bc@_*Oj~8JU7AA#?N| z^6|u~heVPpwj|gnN8tUJw(&k?C|deK|9LG}v|LvcR->V|Hc9Y(&Z@-k-@fr1B0wL< z2vTQvba22YB*Yp4S`SITX)|cpk+HFiS?9OkNIG&lm|BqhyJYJ>C$kROTKD1|YmJ|@WF zAO|u=f2qw-at9jpZ4WR;3lD~D9cub8Ei?VN4JH>QG@4(}F}h`+kOO_ZIt0Aduz+u+ z@|FLkL7@MZjiPfOY>G|d`u@j~l5qK4JE3%dh@txW%_q~ZZ?xUdn7Bk%01SeekgYAO z-t{(Hv`9{$s2b*h1QHO|kWM@&5oP{!$SyKyKs4<8?dud@*4WoI`NijmZ1e*wnzl3C zwhVtz(?W2GgGK2*ntOXS6C-p#UK0`$KHJXg&bJWw|G0V&aIX6{{9k2f7ujTICzM?j z60$d6*-`dhUlAfBWN$+D%$`{xJA1FPviJO5dY)1{7B872|;RH`GN%*ZvJ zj7EDd%Oviy71k8$8FT7tHJHeq?=1ao4_$jR;nv$cbsot#TXv%d2Og`Y5nbIom#kTz zwa3hmcn6D6jxhys*&h6k%s*-1rQFxUZ(^6MOzAf?Wr`Yj;tWQ-CZG=iUjbz3G1lS1!BXR{sH>7) z?QnClKDyvbWzmI1p6En!CV$oV{3AUS$m@&tZ8#xzKDzrSg>oW5#Ru zrw3Yjm(9AvY1g&HNzUl*U z(5H^iM4k_+|4$qJBBQ83J`gA$pKkj>qOzi4d^HB#bYAl(np#$_pJOzy9~8Tx=PMPE z;FIn-ism@vrv+!RYQDL{v?HOpgyDxW8#iOCo~>el6T%TDE&W{7tYy8h@v_9AH4w^U zq8O5Tvd(r%#>9lFUcC&SVnJOR1VaRVMSJjBq`ZXz4)S`ZckU8#@kO8p zD=RCMfTwiX7u0)&-&8GCnlt#Qx#a?XiFJ~k;ML1idC|(%g$)AA?NYK zqPc7+)*4_jGz^W5>>j)0`P*&JKeN8xq#nt3Mw}9Je`|-y)#70S>jL}626#GCb#8|z zr>FTeMm(`qRaLVTeW^K^+v=`9_vz}7hva-|-e#q~5z~Ir!MdIprH^!!&UG5$k|Tm~nnuDrw&}5TV8!#B_bz0zRYYBO7@GNY3eNYPLQdHvlt+g* zT0ZiSNMsEy+mF8+2=Z&T`~2NAh)@4`fR8lD2Rq-+s#h9*R%o1^&W>!j+wifm;{+X8 zW#(dHVk%}lC%U@U&JSmxf0GJOg?cKyk2S|BA)6+I8mEezSY%Dfr7R-1Wunb`Zn!J0uZ_=tjs3@&x2d|cbjO~7 z`bvHM9ylr*)0H;#tgNe@ENSWKS#t4yj6UTO7v@LLYF5Ya>nRkpsc#RH*gPoE&%1V0 z?(cke>JXL4(}LEUczEUY!0Wz^T-p6cD`E-JfJ z8Wv%vjY%*Bj6tVeg9o6>meHGbWo4zD6=UCv)3oX)dOpkcx3+8GjL)9KbHBd4{K#oT z2V_VmCnsfPWw4YK344ltbde78Cx%9IuZ%h?ew=3hHJu&gqW(@{q;8go_G9lz(nt))J3h~V(CQ{P3*0h=ikIy?RRG3Zdk(* z(r3uw#Ky)(j4g}6rl;k;P}R3TmzsE8el~=txNXuW(9;lTde!zP=2)&miOSrggGtEh zKX%;dZw%z28*lJ`Z%Im^ZY4WR%D>$_N%`5yi+iBfamoPi6?LT?LPa!gT z3e7HuQxji9`YT(kCPk#f@1JDMi2ed78)f-Z9@jgzwoKj6hI#|G)Msy^X@=8~YD$2a z#u{l}m&Qy-_dQA!EmZ2+GdQ`5HS)^K`31~ZD^5;MmY2=CrpCv$l!gnmwuF%m2kV-4 zx6eoP+`0w7ibg4~#eg$(w}OYDFzn-Fs{KpSXQ&&?Hl&#o7 zyq-8d3qV=LPRDw;1X#f3@@G!2%39nl&eWHic|Jp}#z;ZuT>b47eg`#?oZo}&r`R$t z6nZrE@hZkS-OJBp|C5IKC{K1`F70l@IQ{`NK2E(_>B@%d@p@UW1!|rT_Zx99?+fNn z>whX&;ic51&HGubeIteIk6yRZQ;zZnFBbJAg-Q};&wO6JdSz9&Km6tvjr-QM%I_7b zO6(+Dpv+#JpMvDVOa2zrGM0PO%l0SWeBy&U4g$w5X8E&O3^D7E`#y?_it_boy2#c$ zGM|i_?x8i83bnyXd+AKt7xDs|g^z0Q8fiAob>Un;SGBa{bgr=%OjOI|BgFwKfHI`} z7~T9ERgFa^nDYVxF1<-2K!N|>vUu|3$sJA|+Pwad1;A$5*j}(kVkepE>!TQo`}gbb zsDJc3AA00&^hkIvm*P7R1Z`6wDL1cA*TuIQ6pyWMY-~Wo#>K^Dk863;U>9Gq@T*XCvKm2Yzc#EuVsCr%mi945wB zBmAqKBUoKt|HWKXsfI9nSJGUKE)qeP==4(GMbJx~08xR~FTIW$p8uM}-KD5Dvac|5 zb=7>WhL;>S!`jWw4d%s{o;wksfuu*f?<_tCSq@auXV1_o>)eld?iNc?qSZ7gu||rg z_L-5dJlYM6IU5>?xQ9mEW3m(Dd99d$nAlgice>7P zJAb)2v#QDkrnv{EJ(Dm)C5gB-rtpC-(qXvD0Ghm(me%U(DrO$RNiJ4M%_*A~3{pn8 zLd6$3PLH>{f_)z(N2@0v_y3_}88mxEJ8TMGWAR6&bg#LOS1QnTMT8f_`owGOXqFgWHsa#~;ID`sHIUsSO5H;hP& zHQvfr_ zoH?d<+=}}A+3Qe~Ga5h6n(0kFUrJI`6v=K#mAukP5*nO^Dy$A5_-L2E0a;)+V&m*x zyuw9b_bsoNX6PB;JCL0b)=o&Y9uzoHOHsSm*4KY_em{P|2(yg!{rY2xTo#Q7=O3ph zB)iy}V^Kzw|9_HrECX=Lw-0O{6l#y8DCbrih8j@bf3>G>*#hGuOimwoh$@?w3mZu( z%hU=-3U#W8f-E|_x*{SXw(I7f?yA4nW*=!<*e=3&o|{whKm;9!TYysD$_gl|w+04j zgZa&&!0|kQe2m{7$6^Kb;OfMO=c==0|7m-Hk19^`CnF_& zL^zCpU4wGW^rAJ2MdNbvIl|_PyTY}?iDYpWPO#RL1p|626NX!df#3Zf%KJznBMzSa}RJPFAE4lj0*-W$v$v)nH-8Cu`WhhA{ip$48WONsIH z=Fu08h0KF~A^!UHy`v+qLjh6I=~~PYMW&Dj+dE@IJ#Zzi>r~rk*Vj)^wl|V_Hv8eu zK7E%?{r#MHcK+N{vFM^YgF7qe2SIcaOpyfk<^ruR3_n%w{9o=*So1In<8m~SC*ps# zs65MA6UVlO_x)8Zf?<=_XMUUy^Wm-^VS0mk;aaub53~Ir`ck^eKThhIEBm&nBsG@y+rwK+N1I4=`AzWmO<$cYwv&wlTbZEPyD<@=ZE{b%Rr zO+tQvsJ1sMmUR-qoO3GCn+X@ z|KW*K^Ko=?%F4|2+-|)yYc#(+2zKAX2sQl!Jo5H6`Wqa>n8LsiN3^jO)?UpmDJitp zepZ&2ZR)_ysyZc~1?QK=)_@5gA`;m-b>!hl_ zQBe|5)LSmvyTg_LtM6qf->Y;97*O-;pC*;+Fns`r=f_WR`_irKxo`QE8crGQ&ZyGP zh7#@Pck#XZJ*=&_pwkQt47`oq8b&YmCX)9f6~CLarktK0^(Z86%CSvNOaL;Dij0he z^I-yvG4Lp^#|INi?c$TmvB@2|i*BeVD8Ore{DgW(Gevgejn3ZY4!#~tq$;F)xZGb+ zg#ZnoE&uk77*+sbzVfvVYK%v&4HrGk>^B4P9>O3@Onya@LOn)X>Lh!vA|c-@9M4ss z%h?&2gb{YKg>RuCjnUn4-&qL;b;!225MN;1SLHs>S1#|Lo|ft2@{cHN`{(f9;Mq9v zr@2%9Nnm9Bh8Iksysks=VMQY!L;qK1wlLfpv5HcT3CD1^2|!@gED{^NzdWR*_)^Ab zZ7lKzW462Nz?RyP{)hH{R`mNJk=!S_S+W;*++@f#p2{;}-MslA?)qcJ?B*_$-b5kO zTo8o7K-=Hm9;>jLDSJH#eyohv!{FaFVIdhf_XK9aqhyNcFeq-cW}>5;4-7E71yw!o z>(@rY1`E)YC+_)P)(9F|ORp@8@m#MG7rJ~r_V*V*)Eg6h{n_unH}#nr838mn$gh|d z-&O~I7bM6Uqj|7H@7^^lHQJnMz|Xn9e|mZfvg)wQn?g*PuX>Z(yu8{xP6fX=J5;7ISKWipo~f>>>AvN6 zdUEoJGGvLOQ&DHG5M|x7)xUlZ?V9l-vsvt?f92}wioji?4zSU$hvjCFQ(er+FmYVf ztDM`ULEM+L_d#^D-D`Jsc_~y+9u#v<%)-XG<}_d8eM*^LbotX!`BFS9vYV(icy@b160PodLL# z`7-%p4RPrTV~vQ2NP1VoBb)C;4^Jx^&N(VQj+dhQNARJjQ|cqcFwqz2sTFgF;7NAeBNiD&RFU@)E1nH~s1ivJ9l?aj{n));f#o(PDnM#2 zyo7g>Rtp)3p38Jvdj@{^F!!lyc9fBUAxN=De>vy_i|4K!tG9wI#pu1WsZFis=5I>b zRXc5Fd6))YsHJ z!qjxn`?fpgu0oCYAUpP8M^jG=ZX6TJ79cmgH8faR`$jFF^znOH$ z-QUmly|}nwzom~EptlQ(Vt4hv*u{ca<6CQM?swgew?VQ>iHH}QQZLZCRxw){<1lQu zY_I#!>Nl-)(sM~oe(O8J8n44A+OU2X{->)ixtS|@#@2_ZDr~quS?h8u0i$sY#l8F8 z#qWiMbd`AlHiIp7pC8^STb0avosz4At}-qjuZ$xuPNieo=05JeI~x$(VlKo6_}M_Ch2{25-v|FV$~d{xRchP9z3czI^4JAsb`ob6 zLez5qW46A&8mzDPpJWkz{$HhDtLn>Zu7PA4ix&PxvemcwQ$c0V&}7I1{YP<2%4MjR z?hf8j#IA%Hc57$B;(nXerC`ICz}ce$K0dyErntB`V5;5{51M~V`Le|6`pHh=2;|Ik zrR-ewLQYOj&(psZSooygXkculrZ%k$f<19<`kLwdN!+#ya%fQOz4H=PP#zgE38q+z zVV-UcKS0g^FW$ZT>WYUmU(g3H8t_wCJ;v?Atojq zHfx7J&X|{@;oHxjIt`w6?kdtO!Ln-aY2P|+?v$4L9v?@^sVMZFZ@ub3T#j1|C_A1H z9ariYom-oUE*DBSK|<{jGnj{kd3mzw{qNtuZ)t6vyE)?5f#?=}nrm6?Y5kO@Ib_Oo z>P3bpF#+y5u~E44KUNoMV@&wJ!K-qhCm-wo&0?hZNg#+%ceOK&E;KfuR~9#rfBprS zP=VC1@N0W&Q{84#Y9ybBM`PXR2|7AD z^w+^G+}|HTaOqSMtWU7M?h!MqdXcK2!A>I64YO^3+B0Ap&?_nyEC>2TKOc5 zUw8a)Az6s`h?g}I?%G^Sz^!r_?+`&cw4|w4Kh9Pk7*Z*fvOl*k*i`A*CDRZpOW(a+ zK3)5IZ3UaNqWQDhKtTg`eQd~2d>(P+Ga~3k8}AwK4LEGkZn)EtLXx_qTSf2DNP+Vcgd*7`gsLEpc`-e)S$AHd>3W`VZ>M*e6ngyf26d#Kn82^?4U z&hW>@8kE%3p5Uy2(8c^R$xFgzef0kI_`fW0zJF0#fd_kSZH>co7W{tb{cd9?C#I+v z*c{VbaPvkjtCfBG=I2);n+duPc2(p%c5=}VeTXpc)05ni5*};O2Dd}b`rTtQrnrXc z$j=RCGsL8q*w+=mE(wZYxfFo;q(K|MzT znHaCFg&6_*)GS<=9(|G z1q01q>3J?#U-Xv*F0Jb))mr-XdY!qsbcU-3*5;}mUV+p0ZsPO#LKIs^W#v9oJ_`ar z7i}ST?Qb~QQ}79M=ePqd3)(fR!OX(cy@JWJ$csNnt@+VWS8P&DuZkWec0s{$wX;vZ ze*H=ma-tS-<-L3N?sN+@x#Y4phHTK28+dM9Akcm0mP?C{a&5TP!4P>rI5T5aS5jD7 zdW#W4#@Ts!c?mqmooUZL@;rE;n1j}=8o4@VCZ9VL_>@kZJP7|EF2c^s`^&8Jf`E(+ z3vWqc(4Y}cQf;n=A!!DC<+6j?&5E;4tN0r?x&fDso2@Jau&L(;pe-pMFD4q!Cwy<- zQSfwsVw!f$w(?1dC2T=&YlHKu&PZjGRcliZFq#!3ZX19_jL8sbQ<_H~y{`5zgZ4OI zb^4yrR1fp3l)quJ)JR5)LStANk(-2>WD+uc)SA7#Tga{Fda&2kJ8d=h5!0Gbhw~vj zdtPa2Dey-+L#49zPEIqGHaFZD%hM9oRaL2kowpj_-Oy)ngCh+@%(W_w1uRD-W0>^L z?(Pio(xV7}`j*ADc>>Zuh^j=un{gC7@@z8`3Etki#uRbfBeXf%t@y|i*Z}CJP;R(v zsUhm!$tFGamIL-89I1fT@hz5xFYrC5FtA9(<(KQ zv$Wh;{&Hhke@mTb@uLqK@xol8u#T1{IN+#>=$5T%HPUB;R}sU1xEA_i9mPCiX4kp= zJnhpTkYq6SC$m0o(m8eYeEP2t2LdODI0e_5iUbSa@-@NJT(w)af?-xWT^~No6!e?@ zJm@%?A|)l2e)&=gnI@p3sH;omD}IlStyJ}mJ-elQM^XZ6`jy%S7PTIq zHl445X_A4q*?PG0YpNBokIV9S=4N0{;t@R)XSCbSqMd*d;DR0ILH%~;#79A!@KSYz zGa^q0lc|NBXW{;DZX(Z5_6zGzI{S0}U5D_7lD__ao4sYl&nzK^-mfnrNA8;sS$Brp zJnDFPc8llkzwRTa#`@VhzTvBjCx5OcL{~;C?OT~gSw9*67hhr2KVQiYAG{i-V<6nw zW?||D0^L$uOHzJFjWrVHI3Te4P=`I8z;d-2pN^{0}OzX)Xl8Wb;7(k(C}QE5Jvt9_Hq($yR@aO)~p?3vGIn-VG?x@2TIS z4&7FV=9DE1j~&Exzd7z4t*Od0@%zsgBY}hcAo7TAIOkNF=|Koc3=d~N+s>ObZ$7-^ zX#K^gqP31p>BTusw{Qe_zk)cRXfD+cs4}xQ9kPtQwV@bISV6AO7-D^3n5O3W&nAD=TNk}ZGYsYHM`GDolSo}NDE8hi=8hvdpUy62tb_J)Ppdb&=4v<4` zha16xfpkUPA@faFrf;0G7>ctnwXb;7#Uwkbi#IJ*=6ld@?z7)EJyrqAH)_+?i=efOYOVg_f=t{iszla5eV(ica;@&!)mjFv+lD3fQ7^X^WQoN-9VKEts;GqIj zd~wmpjtdtHtH~)G5Xv?wz1W(y{g%nt8am@!JQ5i1;DmTr=}m`Dqxsy$jjg-(yxIRC zmgfBCWg33PAUl5j6(Zpo-!D!}z>M`F$Ia!&(7=r7sC;}??((kgv&|FXwfD1hi%;b5 zjB)tNl0ZC)oC6y@Fr56LZphX=B(HRgax{-{(In^T!*ka5UEK!^p|lxrkQBq{-S@Cj{)%J$RWtggJpX%2sbaPY z>XRrA?cwq9K)q5O&fc!Bo7mVyA6s=e?@%HPv^NN#iEETH0Y#u~6CVNi=f~FX>cmXQ zZ_Wv4#4lOKJUHtst6x8*Pi?S8fO!8W>t!-EB_%r-S8qqhHRkuQGewBJY6_?ASiNmq zuy{tE^N5w!)xac%kpTLPWwZTpSrc}3Y^lnSRE3rD#O$PU!%@xPs_s25*9m{g!rx(2 zN{2qID_b5 zg|C@x%|7Sut7jx@!>=Fb>K!iwSLqG4RfZM^k+h!do2-YL}D#(mM3Z-mH zrjI}F3q^EH7QK>y93HS;%iPKCI{{PAU13yTStS=0i&tHZ`C(Kd;&uQ@29xo!*D2B7 z%`%pp;?TY5AJN>pb;B_{BBBYaNuT>m9LbFk$wCFpl2UChgeBB*?HBg;NTu-3PE~nI zq%mnd4)+gL@?gtFZ}xwH=QT6laWE;%t!C;C+wrU|HmV;Ltrgy8b+GkhjAy2q8j%;UNTA-$@CM;Xmt1j{HD6|A(QvdI{{ldBCw zhBrO(9UlzX{Q3OVFGm^gt>d5; zNzr(qa?bWMBY?5Y|N2!rU+whx_+1Ui4`hWVq8N~aL8r&`_9E;CtxQu-uRtlgCs_=# z7oz8T%2Ej6Yaxt-b^FKn+U96;%)CJ}ausjtopFo8?qo5fy&%eCI4*feSk^EgFx=f# z0^6*57PhOatD)>+z5QkgxZU-qQc?g5Y;9kop|n|FsKo za@xeFgOw%H;O9iKi=FHx3$-VC@2~#;PKS;&zsOw|j+fjLS}zxS6%_Vy?3qn|c&CTb zZAZ2LPt8YTZ2ZveWrkVQO2Lh2uxor_|E>-l=-{!3aPdf^^q|2Dl5L8)?G#aT!d6vw z{A<8-oSwei;zv`@iI&y-DkMMiNCYc#28N$WA{5511C5Q1hJ%f}XUcD61)CIIk#Tqme3akfs@c6uWkx) zH4@Zkgvm$(dx0&-*grcfl5(!FDe525Da{(`t(}V1r`z3bA^R9P(SU@%E`fV#w4vPE)1Llw4nd*! zLcfFj@B{CiogEnO6A~! zciaa6KX{ZDB*X4`axmc|n`!gwu7aa|QBUF;Poj0+d8A(cZ<5?Z)9y{I7&}<+5X(bT8J6&4JI-`)oFiV86?<6heAyyI zj94b&9LtjjMc#}18k^#y6?hZ&L#Tv)UYNsN5cR}DT>QFEQ=>YwBXX&a?~C`uw4;q( z`_S82A^SaqgI2I!p_GfDBr-#3ZB2v70EvAqdRv$pKZqt>I zw6u-=>Ir5StBx{rmj!rtjqC@1F%shwk-6pPF&Y(;VGO&BYeRu0RX9ufnLg z8_|NoOMJGwO-Hp2C1{U)w9X>e)CjMmD!H`yoW*5^H5@*Q0#J#Qt~5(N1zCs`t4 zzt#jgCpSdHz(=Rb!9HPAy0RT??)eU#BPXRjEO&Cljn@)k$Wf3O8ny`b)5At;A`nVxFs>QnABv%h4%e>n^N zyb3GSWKLGr>rPNy1*(5S{|HqAi*p=#P@4R9wCI}7WpDgLd>mak>f7t;Lf-WwVvBK} z|LpwSVKgtTu+(%BXw7mvP=K_CjJxe=hnd*-JlNaQrq%)F0E`z6kf5lBKxt{xUtV9Y zwOztq-h$5Oh6r*`_~AdPHBZP1b!;rKtu6KBB-PKaDUSS!nwsgGH`^3e*0Q&#ijUdq zdSqTzZO}LW#=7X;QI7o;_Sz@qUvDJO4!XocE^1->WrEQ53D9A+@(ZBa$;#S)Wd(iq zpQ|8PSN?@Vom<+ZfW*nPbvtlHO|eLCLP zY4QtBO;L$^m!1x0`+ar~nUaCCCGu%zC&wBUC7msSqO!7Kh#xNJChXP#GljqUC(tlW z@h>x!Zr;3^JtL8-@I!9R4{aUdOc4NYKIG-~nt&tXw(>73N=RJZ+xT6$hc5Aov9Q$C z$cx_H-qF#~!Qnn>(9w}Ie?0ESmCv1(mA?1Y%gYO{J7|F4Ae$-dGN5+CtstSKGytu6 zd|X_NtcjuF0=y4gy46pmOSfS!PhjsK;Eui0+vcnr|BfJ#90ZtJ+S+!uwvr@6YhzBE zzhme$HLYASwaLAg8HwomK`>`*DpS%ZIQe1i{9XOwd*eH5!OjllH6>q-Mat!xyc88mzT^a!6uODU=OKFIqVwQ&L!VW-4*u2R#p?iWws zi~zUXpjeuL=h7MWKP3d9hV&y=K1+y%a>}f}2pZ+2S52$GI1`eSYFN(_C3t}Sl<#<6 zOXj7_Q^Wyo4Ikhw7?sT((hMYV{EwnDY7|x%u66337DX^BbR=>%ctKn=1dVFQpix#rKE_)D3vcFXf{j<^4{Fh0uCmLr9V_|1S&Ho)e9%S_>~?@tqVby! zj4b(ky9Sd*l!H~y#HoZQxy4}KgAzC}FhGifepC-Rso4bU<-WUH`G3qrKq>x*kLQf~ zvKd|q72x=BwS~$Uj=Ge)#@)jn&W*=@p})w+e6>=<+NtvnXfoZ)vz?c29B6xuy=Tj8 z-krWmbUsne+?l9(mu|UNX*u*i=aI3nFXQ6EQ~bJ@;huWj6Pv$+@8ewtKl~-PElMvi zVN_c3Rq1)cY9camV!Jt>f330Wqha1NNOxYQ2wdvF#tqxO(PUifGW=eaiS6FKYj=** zyI}YQ>zScFaB^}IMt|t8ZjBPDdx>1?TW@V;i3$r-PI}*$x3FOQN1ua%(X!@jJFT3q zeaz-KLr{`7`@`5^2cKHN7PVG!_7<+_hzC=nyo*bfad43?L#B(6VcL+nB9CE+81Q3P z3dHa*Iv&|0JrHKyQDOB>6Bg={=1!Yr$6(e#Aog?3*p1`4hX2y1!*|oyvh>MP8^~|M z?ml|`VhxrKM@7)K{?*sPVZ_5r&Tt)%#49a_(cwnnTh6mT@+SuP)dqLbioF}Qn{xem z8m^XDwKuW-4E1=8Jmi$^1f-&9psg?-iQ%FkAc<*#iI;E)8w!7eW0UN0Fb0kM@f8n0 z_)_dyhl@WNAWA|k*%N`*rJJP1x)Pn^7RSFHC2HlX;(1hLtAzjV^pwe)B1Z{tOr zas1IUpVzL!zvJ)(E%g`!*e>Yg-CSKgcjIT?z<32RUwYU2__wZ^nadPnU>+#=-*6W$ zC;WheNkT$Gy%6uEP;YnlTQk@aetRUJ1~on2%kJ=XWb??J^biydR7rtM~njVPh*4{9uvutbv)kevto zRy-~kA9%Ol+{S{5obU}iSjr4UsqeWcg2UUD4-PHldOH8>c8KzyrB$ZsYeLne0eS*} zdEh&0?N|k$Sq>-1B zk}^Cz%x5v|)z7wp4QnMmlIX-q23sT1;j}4PhO?nanf}X)Hrz;~GuAxaI z0W~FFX&`Uh4%O{DcMOr$V`vUpndDRl>Sov$sK2G&E4g@JR1}x?VxALoUctNe)taRy z#3Urp`}+F(x3{!-6$-nn0ttw=uvC~vv*=z;ufyaIT}o`_S0g%s1}8K9G%Hp`nvA09 zhn4nT&1#sHUn<%+m^S}--Mm(UU+6~5e5(IyqB13sIlc3i5}8b@&|c#^Jzr8S`j^em zueL(+za2NKicd(;(G;NMgN&2qEmz) zpRpGg7lZec1b-{A7?qB}sv%Nczvek!(U*314@hq+uzcRODw2Q)R-fR_^F(xXCh}nP zin!)^uyCTY6zL}sggqdLOKN1oKRb>1vuL4%q?v>i>c>`ttpg^&C^#eH;sjlFu;l4~ z@1ko$;}-3UCaVlj~!2Jh;G1NC8|(MM+)%Kq+ll*hvQra$ULo18w%3JA|t z#b^Hr@-lL>`4iNK2=)aGwN4LmuITbR>?B>38CS1C#u~;=*0v6W%~9HK&Lqq4?P*up zFj%-)=sli9R3#(hDAAU=aWS^Xf$ZHnH}bZMtxx{49^=+wI&n*Ehr%cITXH6+6ng{) z6M6nQPSUU6RwWBBe@7vVEiYsC(oLMYrjNI~-&$;*a(0i;q33sxp6GS7P8rcmyfSwS zH0s1U(XSg~!*sLM=GYW3ZLQL#9nEgOOPHlP~?i_k~Y+=H( ziXz4WNc4tx7y$_#RdcvGg9KLvR0`43J_ zO~J06`h-6K91#V4DJ~{-KWGY>x~GbMOH$eT!DQ(QCggb|m9llp%oJ^HO9Y($H2Gk_ zbbDW9&|YV8_Jfl{cJUGo>>$sVx3a({@tWci&%`)NtV1rEud1IG)E1qoNNqZGJ-=<< zeX7m%Mae&+8(MT0h{^ZbQO2nYIY;VmaV*;y7k2S?WOm$WqzoXt@mhtygry;9`OIfHh^)cm=L(x^ z9W^D@$hY?dAj)T}U<;03!I#p)!ou#`^R1Pp>yIiu`@Sg`1+^Trr9Sm#?-6s1j5+gp z#O;rbAp{;ZItH77z?j--46L;JAZbrcKh@B7y;E)h)u z-B(xj%qMq2uU3~FZksTw_zu2zmwYkSixgs0>!C9?d5iX7lr?hu)ztD2RKjnLF)%ty z;v`1Q*Aw4&A7gZxpID!-87ix*!y*}kzPDuh@$qr$?P1`h9!oP2Wvh&jjcF+e`>M)X$8L>qUy98qphK*( zgq8&$c%LHxJ7F2o-eVwMH8%y~AdLaNHBkrir-&V zMh}TqdaaOMKk>_as*m9B!-f?uu7|7k=BY)!pF?j%G-&N5Hk9z8-Tb7jmK?)J>C?sY z)k?qE^!V9usjHt#T(6^~I7GLBrAtBb^YLkJcypBiXIpJ{0ij=umH9vnV)Q{W>P|Ls zD6!u1%832Ri67@XA1;&Y4!tbas!uP02Y!j@6>BK(9Tb(D_|k2@+VXn5?D^n&X7K`p zW8$dIn|3z}!y6`}Z4+J(rzcuQNA=@h|KxV#Dt+=%gyHdZ+%n&T$Cq}D1mc)0GSX3> zHvc&2)fR9bQd2#jakKB$o|#*H7ZaU?XhP$%5gMi(oQ>DqXgdpJdzBZ8G&VhXqmFMR z+cD$iy!73)7Gd+3yau6JlSVVSP2~M zE$B8K`CXi|Q%&bh(STm^ByNa0CFa?7i`?V8vl`T@=89YzDjI(kJimc94BYoDY>$qI zT7R`f8gknmA)logAkxm`Xpx>IIa5wi1z{*^hgu&>judgpJcbxm~3ji7{oGN7`wSmO-)jv)UbaP62PD=GBPvAQ>IXo z)8%On-X_pD>uzdNePF`Nj+m~sGo6~bknCrqFY!fW2NOgU-z2e(QJ_QAafxT2hH&d# zpHe|TIxus0Tsl0Zzwc?BEbN77%5GMueZ<29@$Y=Pv$9LvoG z^%(Y>o*cI;vWond3#dQ1ygKV7TW(A|CRX8NEd01s65|{2{V4K5P@mipaqS3;`Ah2C z`!%k#)M@v2*qmpw@X5VFzqF9+>_5@(2r|Bc0D zo1FG5Zf?@tRchwT@zCE}?&+>>ZY%bSNy@YY8jpxPWg!9t83qQT71)vlb*#eL`sq{D z_-?-`*vIP$=?wlQVy8;sNJLXF9*XsROTbIf<3)f6tQyW8-{!AaeBM14K)Jo9MTp{C zt(NA7`4Agrc}Ul6;V4ov-KaE@5^rGiO)zKL7>lQZNbJohPqfQ-GsatQHKb_fZA`g6 z%OAUMI0_#9Nh%AM%>Tyb+qPI=Pq?7Iz&mvusg)lR5CB3b#D!x8?0y5kS^A2`~G`A%b@sN(i2Py%U$%h3W%>O?4Rwv zt*_@;8>z4yRlt4>elYGs^J^)~nYRr+Gj0c%Uu^lG9Phr$J)gZ1Vp+|<#g-xS_S&nv zy2X`$r&O8`l`Z}nr1A*pF9qau0-4G~$Pp@{LL{@^I}F;-9`(FG%0J_}yGR z$M%#T!IanUdoJP7+tYXst+d^mEgSr`fT77g40jVcn{U+`k+4cNtYa}JhxMFV$Oylo zWa&^@zzJo#!2E43+Ov+r79Lf$ST1GRd)@<2VG3`%`_5zye>DT9{_X~~J3jz*v0uhc= zL{%i*k$blTK@)0zoeCjCF)TCG&tb|&Lr#9pN@_iO9uZ5Qsr&&7Zi9_2rjK?pf1Pv7X?1+7gz8N+wW#m<(E-bLqP@G!wk(Tq9u9N6~}7H?K-N+#f%} zYOIFuid`cuqHbBNlS4PQ2?V&2Zca`Wp`pE9Tn%qBTOv8cI|@J3QF~&MI`8?Y^%nL` zxr>JtTCE9I=)mnDj(CEe`!Uz%ykV4|XrZViw@b$qT2a_56dIJ9hLvjpKRa z3QA31ps?J~@00X&;HE=6dpokl0zjE}#{GaHZ$YHkoih*SBZJF}wQQ}$t`E*kf-fw( z%HGiZd-gN9)N_V1tp8ZI)xVlMjEZ`;>R11DO`T>({OFUpB5SMfoIg-%BMAaK zjO6b};>viUWvKn&V{I)eR@i1sF0f-O>zPx>$98QRNF%>)$GYi71q%$cY8>B!dw)g& z%bbXah{(ySjk`#$E^xGX>ekMVH&@O-8viW}9{|_Fm8LrD^u8IT)?Ucj`r8t}K|NrT zrNF|)w5zJLVjxF)>aT}1nM`h`!-FbP03jKYi1vLAY>oR4#OXhnL?0-Fz^<&LqhoBG zA!oYnyy4t#pho?(a8~E!=Y!tbgK-NG$V}e6$>aa)m z#Q&ts`M|-q^U{1eRngP9O`tEYLvzY!n=J_Os)W{8CMmFiuW{36|M5>~j(Q$rZ2T-t z!PcfBdTptaK?T3UE&gy$U51b6+JN&EG)(?xfoC%5{iN52%LFfJDs^(ce(jUW8)e=* z!A_MKCOgeR#i@1;>b5>eNNXXWfwet)$A)(FR@o#G* zh5ql~fByVg_&98o;q#eH?!sLc7Z->-M@2_R`*O47!W*L0b`+U?Gpd75E7@NvgA7kF z8HL18l8Kn~!q?m(LhT^_TUKU$^*f)SuC=$Twu>Iu-J`?9!}pR@phzsQ+_(EPHa3R! z_ivl?Gf7EUZ!KueARn2v!&awau|{axSqIJQ_OF`Jrfo|u^$E1uK?PrQoG!m{d4 zAM6Zl{#$qQ6yNi;y_;*==lBd@J+}(_pP~@N6Jz3`mOsO0`MNwrRcQqo{-S1qS=^p{ z9>-V1eU)uSaq|#xyBsPXi)cTe>{-|2`f$R$?qxw0e#7@g4Y@ExlW{*VajCsua4W8%Y}MPqa#`?%O5LQF zk0V2LgP)*vVZPvq{(#Y@$26I)nB7t)-@e1f8~~pS5b(4T52|X>?2}Zr+~8syVI^AY zLm3SCzJM56p~T5IhYfMd-oEar5=zIk$PXM|ayS%L(t#FhSk<2xRKGqFx1mYY9Um?5 z@P@XGm5t436V}jpM_)0`$!;40f>XTw{0|=$URHJ6dZci6u+Zq=xel%P^nC6ZE$ zBDt9JzbJk*@oPUKW|9@OX_1X=ll#MRXN#>N_Dkc#F+LZi9@y+^&@x)|gF8y|L`Hdu}eMbD`8lhk*Rz9KBId%Sn7yPNuq z!(W}Ys4I54vHLhup)-|8Vu*;Z*;B{IHT; z$&QS&w-S-P3E3Q3$H>eUnMYQV$ev|pk7I9+y))w2duDGA4(^xF_xHQ*`?~wPTvy)j z_v`h1KBjsSYqgtoSV)}4u&c>04R*Ju2!FHm@*FB$iwuy|4TzVU%av$Vz^P+lxbxNN z9p6u1hX5iN3}m{)(!q6d^K>dO8J2EG(=GTQo=tv$~5H1|DyVlJp?Fv)&lo%PO-y2EGfy%K{qX zG)*pCue_}HE5+?Ziq0%5ynBWcW)hPJR^s@R?h}ItoCF=VssQ^D$X5FZQp0YksGj#_ zK35YRaAsLu&maSpQDFm0t#M^Mgx}~^J1Q28O0DnT@fn@1S4(1V6yFX{#fJzR6jknG zS;(8tA~_`t$1RNVrAWQj*cU>p0X~k|izJFkZVe$%3+=?oG;x`Eimn=XOs4nb6WXwc zV5WIrXBc-|j`Tm^%?&;+Hc*kiJuiRvrn?>>gi;W5NKDF+<0Z(w)OfvC@&^Sg1{rUU zPeNXuEkgKUXF2Lm!yc{P-c;G$aFAz%Kp)any8z(ufE(uYBqR!It%WbCR2dWg z-TQ7UZx`HC-)k=kn@@ct6Z^ z;n#i3zD^r+LVx4Y_)Nx>vpaEKm7r~Dx$ZJ3dIl&PGJA!rzk_0zwi!2MGtmG`5;Ov9 zJ9vv+0ffM=x(We-D$4Zw^<}+qq07fVoOVd0aakCh>72}|<;w0@^=>9L%{X1{&8;J* zJVg2EgIHuPsy%y@JKW6KSl~C1VB&y6;Wz62VqmiGU$cBE zLnK9{-$Um5`#~^0-I{jncvP>=*Zsu~uh%yZ8@yM=qKd%PRMwZ}^t{&Yx^J6me=J;aw2s}- zW;}YA^@huYL+^*fP^Ihd=1<3WzM#U=#4l5R3QIKA#*?C$TP_iuShPZSXlh>GPJQ0A z-W41>9Jf>7NEo#7uO~`4HgJ$B#thw?|M3LJ_laQ`lJ4X8>|I~rq|XQSgmAEPgZcKt zb`eynIQopv+F6G4f~$|eoyFsh=c(O}42+-Fgbl^1cSxzY5+1Ipl=mhl5051>?(v+D z=%ebpxKo9{^(hx2vUoB)X(gTTU5ltip$w|QlD*30+jgGsnoA%Nx!vzqy}>`QMiD#& zX*$vc`U${}K7IDR>X4&c$)RRwH%p)Qiwb*rC61)1>UZdH0&z*5AZKgj2~IjN+0u%6 zgEb!?AB^5&FDea2FnKvwu7tAnVFef&shnil5g_e0-=ery4Yq)T)F3NU8{&f z;acM^B2ON$6t*f{dy?eXqE?X4f!XB9C>R+~GQU_|x`+)_}?V3ddy2H`GhvxKP1xs(|9-j;xOZuHD2Xvv*cw zY0jf5jC$v!_1OPj6VtC3ub3OiBQ8R2*EE(x4g@9YtEmg?QRis@u9vgEgSLPPT%v&Gmo)vc{Jz;Z@HOuSIoDs6J;UQ!cEZh9_am~1#q%j9r-oESffV5{=}sgZ-USTIeH*v$)!$PJkD9wgL5#HjD92bk8h@`f-q;v~?{nZ4g{6Fg4#+94 zlyHo^nT9f73_P{<3Yk@-r}?)~P4XoeDJ}Z;_viQ%+|Uv%KSBk1PM+p`g>fq_Ln1Fc z{ZyJoNTN6&H_{LO0K+ZA>r`NYO`5MPa87B+{JZ>h=nAJZeXFwz3@i4{*MiK62zckD zGdbcgdDz=gtX_yf46B+sKs`_pQ-XkT#~rbJNc*}TGNi+@{J=)*a4ta&EhpjQDEW+5 zgX4Wna(%m~jC2LMoKJ1d5@=+^q$>F-pEEPVX7()cj(cF)n6yhfX@lG|^}Y_n@v}!&Xz{@{ zh+?Hk`l(P*n2)TG9C#7Q-}@2j#Z=`#q@}WjEAG5^rt!|v z)6{eU2q+K%X8-=3iwswGTyahx^hFL2r^8iT{|%)BdTAqcX%e8=iafJ*oxeXPCCco2 zPFrnc?=&VYePR|{FjzV*$Mai{zTS0xMP}{>#W~=J^+Xw2e6ovXFoUp>_5z(=rfZ$o zSuq?Ae-`7Kk!Bv%vts`XB*+2@)Y^ZrLl+zbU0k0J`hvEJ<~|wr%4ZBv7X<~RJRKRP z#JG7cZ#O$a$d!e_`_ny@Hs_$;d;)Tjl%e6XgR!Iba50}7-k`$;Wbi`cFC7=t4*;cB z8Tkcei|s|AS9$gwz(^!1dFPi35aE}@IlvO7G9SHa`EtPDoIcU{w*q~yaBwb8kjp0{ z5^%kdFbl+$pOcyNz4RgECj1aHD{#7`<5&Du)Fv^P-&TFu`RV!#KK4}!Iho7X4n`dI zx|y4GOE{3L7=5qB<~jyKK5tCy!=*(x=!}#98BgcM%*AxJXsR`-sm_MN9<|D(>u#wQ}YqwZz59%T0` zK9WyzdrAZ?*Zw+UR_*SCJO=b-CsW#yf3+Oj$R)JJ_k~i_;+c^bs_u(ynm7Y-3cp%J z;Qajs=?w`Mw2^sSRz>P$JG<;5L5t|Dz>klHr?D=S&a~woXZ14k<01)A6X(M00XQ}e zPKXSBhzv+2wzjeP>j2tT5=R@QcrMRl`2(@wywNHvKkqoHMw8Em<&HGy73OwZfev=Z zW63012H{OYDtXPRXMAYcoW45;z=HopUuK*AF;~xXr15 z1_K3EA5b)A%G|*xFK}K{wvd!W`eXf;4gG#&PJqy$LLuD)`NN@$Q=W)fujRgGj>eA< zYg1|5FRtTZ6uTn%x%BjY>yHs-+Tf*Zc#USP>t*Za3G-`RcS?_wORlSB2*)jR;NGZ#=%ZwALF70852r7U0^F5g?D zrL7G<3cy`yYA)ZNZ?rw|`~ImN;3Ztt28kzrRj-svpN!VjIAe_7m7I^|n8dL9F6NVr ziha?_D?>!Z&GbHH>>=S{q>a5)h<970@WN&0B@Yu-O5Y|^z(GOCA;vAn4S@f}FW^W` zO`Sj8nchiWQ9mk(1L#u+7C}D#IQBIus@^rHDy63S(sT(TIo_Ns{EwPZW?a55iIede=FVaV5o}dBU;!&|$CX%)aM%HR+wwRh;;WQ9 zy~&ot!4r&CW)0V0krV;?nBBuU3$MJe3PZh_zYSgsD+>UNVlEH+P_ZR*DW1FGRZUF(&G z4s=;#$d%-ct#Aa9-`U;F^Jy$xgdSG6z*%z#NhYVhs*KYIzY+rRLiJaBslobp-Yb{= z?2^zhw)4u{+UA{jquR>fO3v6G8wS^Sc%UzB;qeM#il66rm($8;;lF({1pzXVXy#S{ z%{mLhfs2(F9^~j1HGSGknN{J{T!KW`7)yq9%d~n*OkGo3Uphpr-FTt(BxX*<`dKnn~FvR3$ifdA#$9`H^%Vsd8y z6{xO;hUxsvjPG=T1e65ax}BA{$@NwT9=I2u31JG_4E`yf+>IsylMRbud5T{ zwV*ye;N{`g@I=b_?zvl(|gRyaQSC>59w_GYJ_Pc4yC=s9yO*L#^P-IG_6$>#?>Vo zHDh#69Cv0i87$x}D#nDZr%9b;pQ&B2?aw-?ht~gnQSJKB!GY?JyP_lUu@nhH+ek>v zB_02u$x8(cwwdQ$^tbT{fmXOT)EZBpbNRl)J1xcj;ktJcQY?L4XgHusCeTE%j`YoQ z?X#WelIZISj{WEUgB)Dx1lp#*Zjg#YBmshuAtm19tL3q$Xhkj({++}i6!b-pvzQAt zLb2gm>wts0(pGz0)dBMB6&S&}3iKs5 zzd$tgPE)}r)$|nzkh?zCZ7~mTVojj|0K{)zS#>)XidgHwlENC}Uo|JWg?A2YU;A)~ zuBm%a*g4MEPQ)x>bK#HF0qD4o|KS4UmJMNjSgWG;y7<}{=m(t?763BFGDgRTJ7o!h zP&BN8lEsAwZ z^#d%nqO?a>*WIG=QT{y4FiLl(tnOaz%nnrSYY&WDF&~JB0WguHed@QfY;71*Y!68} zhwx=W^o@cEHDmbCB_GCbGvb29Bte@?zdr8dz7<>DR|N01GU$|p9$kq(f_zw;?xI;a zMoFepOb?z{e}NUjuRA%vY4^z%1tS8c9Sy}>;Z^7cfz$R9IV6d1x)WZ6vo5g>2TWAs zRj~lkn{ElECW-wEo(76EbGbeoug!IOb>sc+>+K1@R;>w_krW<&MQbmVBIEW48Y|&S zycDE|9gp{fQ_CmaBI9ui2HAgAXw{M8PoyGWVkW06j<^iB7d5-!y3!R~Ar5~1WBtj}*I{L{F8OW%Qv%09LC!mhR%y|Kv(hyF4upwmARAqCe zyS}kT*U=}IIRo&2wrmxRLtFQ7zQ8qDN&O@+;4}dr+GS$n;x@&xUU{u-M)bUQ#M>y5 z6ojf0B0%nO^i`<$mJZwJPizcyrm9j>+!!LnZ*C$~a&9M15OW5?h~|up=C4;+LZKd5 zRkA=Lw3zIG#zc!>Ip4v!fmi>?SId_t8WW`8tkiq?yxSMKh3=TPUboLqsmIdCM|+8} zKiGXu7wfs%*@mza3R`ukRs|b1pwWO^$OWi~LMeFcCrX|H(P$H_@Q|Z1?X4c`3*$qA z4l{2rXZx&!4X_uNj9=UX75k-^Fgv47?=)`58%mvg%IH>}AiF53E5@ zVa6rtQUlqQ+aA>?-M44P=(y~$Px^sZ+Hmf|CT%qp8}3AE2+BbHZ@ z>;m2n(Lj^1Z|X6*T~LKb8M;rmcZk({T8-Mbn#9E^#jw~=FKf8Wk0W^CmT`>iOi~*X z@_j8H_fo|lHTb1fsxXnXt=?aqvVeV{X}IGczNfT*EzZ*TUSJ)fMnra5p1fD@NowY7 zaebN?rbGl|%6{bZAp)%xXgB!D0RQu=r2G9Fz7vxB z*G%5I3nzUOe1T#fm@pT9G)28o^ogL)*Y6{&=C}iT0qz*5qUbx~FC zI2cd=5sb-FosXS~&#*P_2EKPqvT6YC8wg4Pk2pDMQDsDT22)uIW|kkwYR^MbDx z>=43s=@khWzn~xpDX*~_&L}A<8BnAuy8HV2FeI81pFekxw zt0nXLVZ8NPicZ>gL2R(jRR*Ig6Cu^-n9QZ&saXNQT23T`nDM4LKBkC_NCD;(9Ob}? zU*_tG+BebBiJNTW)382^WM~wyx02sc8=X)R83^!i|Ct}S-HTI;^cv`LxZfE2 z6Y?uYpUizT#m(8}EmxtiyQnPv5o^~55Q*Iik#a7fc3!1N{sQ&I5)&gGdr!;Q%c&3n zAI>d3NqCNg75sO{PL~Oi+y>XG`46YQw$2rYYxXVtg_Q^e&rkMqzOk9R!NR$Dyz3xZ zT6!65413}?uCnrpZ{rD^Y}~^YJW3ZCg!u8?+)LePmfs&+&HmL6hlSo5K0^}um)=!d zR&C7*xS=WRu@gO{G3op9>)0~~3y7j#heFT)Fk)R{m1em`r4>~2F!?WBy{w@_P=16G zJW>-9L>-2gCtGhs4n3qKtNmp;j_V~vg!!S3sOqXtoI`I2dH2s3=NrD3%lI%Qi~^Ad zv_0%f)?)ii^-T&A_Ith`14>qNP!H0M&=wQPxz))^xs2zCZ)X>T{%0>oD-;X~-xhWy zay>g*Kp3xo{X=(EciueSFoq4Y?2{O?1FtQR5(M>>Ceb7O1^mdDLbgXnQL#?+pTdY* z{wiJw3$@+M!j6wl&7jR=PNv*TZkG=th6*|3ZI>Vkwq$_V|I=TnL>Q@1aYCtnSP%>_ zzA^x~Fwy7jkBa_oPoC4O%Tao|Ex8qiSV9K*-j|lT9R$Bwp72U3VCV^7p2vOD&@zlnQzNn#1pm57gZayI1fT z0{I892;R&A^G;m1kH6A4gFFkpzK|kWDf8FH8>RhAb!-g+DcKtX@HA%^7eIwA0@2r3 z`2vZjB@r%zg+m7gCN508e;7F3(HB=lHxr&Px8_*YYUo%sPeAd&w9^B7@9j?>k_${b zD{G$XK=w8({&l9TwGi`G7@@-iQC!qs-BeE)kM8!Z+>vcxd{49F;y=%qBt3me(VgOo zftPZa>^F}gM|*+x`zN5emzFWe|NDkwc-_4972{>ybxC9u?V~DD_}2ad|1)@3N=IKs z)zg+sU%7!<+)M9C4<0wYeU2c-?7ua`@!6VJ@Q8LD&yl|^1w>vG7t=&$6Q^E`M>j%^ zrHy>1kS7?!d#=A@KF@Vli4}+w91QCT*u)8$G1#7Op#TFP z(m3_&pUZ1?hlzpD5E+4G$gap86=A?u19j4EOoH&I@SgWc4~EL6-3~cIxpns+s|%FA zMimtoOxJT?((nAOYPt*#qR}zc1{$ONy!XzPW(-&WOlBj+5$vwbDLgCytUpKYJpCiaa)8K2q^gY z@k12`YnnsiaLXYbXs*D{(^jcTIRVEryFHCE zhe4ah{_T_j{@~(HH2GY1(fKw2ix_Cf*=xa^-aJWLgb*hhutRiRTX@k@kujQVkE0G{ zqe9-Y#));RUT{3t`lxsiuEOedy}1#9L9T=pEQe1wXi^6f3=b z*ZlRhY)Hvv(OHoD-0wcyMh`M3<*ca5^4G`+e;Ak zm)yEZPR|0JX_Y!Re@zf7R(+0wA|tTpXN)El*QO6zSu_g((C5W(@r%UFjDeeUG3>z5&FUEWISsUGQD{E|K=WJ{6x^6*1arRvZP zSPOlq419zer=1Mx{X->1qk6l$OAIPN2rHHN$`OqR+5ePZqS-k)%Lne+DvoV7dbU|w zNe?8JQ$(3B)ek|6!yueAT81c`jGk0+1$qI+o)5e>Y1^1D61+$)Q1!3HS=*`6(VfmX z`4}&2X;pUw{skE=t&y&-u8xk5o*w>9+!iSbiP;BwPO$Isklt8NXE__>cyfLliULPV zR_fkB(z(etRi!fV1=r9CJWu2r3a3ER4dixgCIs`MiSyDkCG~D0q6q8y*E^ll5+8e;(l^{b2zz zR%X1B6@^Q7w@NSkRYM;$%#}w8>N^zKQvim^1>t^+a)1O?*-rAtwl3KN!%)DzyNf`o z3sm;EG4DGK1wCI6-}`PR4;;XC6qA zF`feU=8%m&kB<-ooi5FMS#(%X^2B-pdinhv`CdJ+q=loPw5aRS{eCpV_O{t}ZCpO( z81E!HqWgZ$0iz+gsGKAIm4#}oT88t9ge`f6##JHjBz3OF#QXA9*h zWN}pwUK6_t359l${c|E$B=N~dku?RJWmYmpzOgH&#bp-IHiJ%7$bvDa;s1)o zz}|bH=*{tTmE`}Y##_AiSlilV_=U0sKX~i+_8b~=3JN}eoy{>_hKkF;yg==+z$8{< z=u7;=}d*+223B%{&N(dQwVmkj%pi}CXA<1yaze{Z*ff73tb(PFGh?cNC5 zFUXR`DPGbJUxomUekZLksAC01tq-?m?N;*8imaq5LazANt4HT|{XQ#ZQLR((a%9Pv zrrwYx_U1BF^pPp%DVq#qDP^rgwA+ilCKbq@;g z*Ih*2T|{Nw;rhM0I`+@B_IXJ{67((IB=mK}iMs?dq~5bZ2VmU?8#$>{qN%E+_%Qx^ zYc%Y+)}TIu^;~MYf?@s0nwbiQ;?))J zWr)>H$J35DFO*je`9Ay*JUru{u>vvl@n7I*7pnsq>aRAsBN=Xshfmq9*R^;vwj9}P|2Y>u;m!JF9tO?OX#PTA`rgd?~@bXal%@ngNs-%Ky(aCzC@B` z%?O}rQ7%tWwuJ5uEV`b2MZYCOo&R6SnmRjwusz?Z_GH}FL>VYxqI%Mm-_X(CZj82} zdcz$LB4DX#6&Z;Exs|DQEF;HDK=Afde-)zl-bh2q+!;K_hbD=2#x2V{^Me~1yo;Ta zxyL`dWWpu9U$3c~iXF1)p0@hu5SE;i@FbpM;^brGVq;v}>6OWdilrf=KQh!FQEVyA z&FNTJL3iEJvO~*f-o5gtwp?EJ(i^pxMV{!TwWXtT;2prYWijI7;@D0tNDxU@i6lhi z4YFyxwHGd1$#rh2wTLA(Ey&(yiSN1#BRz1Gbnm%W{&j_U|6TD@j$k>|JBc8Z!TGAV ztB=yw5Ac9|R_?c2{hl_Eds?Ppf-8zW%yi<{p*0Xp{3qmB+?uU>)7S#_pK zFnS`2keY~5wC;uX({ozA^0rt<8o%~cD|)=h$R3i*v-2v48?q$`!(!4Dbmt9pPylIy z-q8=hf$1p*q}EZyBMFrotd~Fxv@goW%35;5SwnmSssYI!KXwNsBIr>H4h{yfLD!qe z0+39kqO9CMFre7i?*l^~1Y@~^0aK)vcfcPI!`8zeC%RaoD^ z1XG9&wcEc05onLFU?vvZ!7-Y7B|oh<^oU zX>c%I*j>Jlz9DNZWTxkgmf01m4%&O_2IIqka=%Nep@pG_-fbZc1G6r&VEO~BD=D<6x_ z4p0YXf{Pd!Ana?gD5xkWvwL3b-n9>_?_ESvKX~#{5G2q|?%RnH;hhf_iDEU0Jc`yc zm{)Fc6qr7npvmHv9v|t1%b2d7rB{|?axlMar4Wc4t2UOEdJ*=O#bi%KUst;HT%e1E z;eVExmx#aj3tErROIx$K8m~IxKTQJdTj3~;)8bJq?G=$*EC9@Vv8kyD5Z?gQ86XK| z4K%X>jK2|qxB-)d-Je>UM|v>+LUsJt`OjMJ1)6ta5zumP>}AO8ygVg&GM0PcLh|^0 zSg-4VL+Xj8td*TSJeL0C6&oYtZ_q`yKeQ__CK{9i)z;FIz$73f1U0>*ewa85rZY{J z+k1Ow2M3XTtI;&g?~iW0kUcACy)bpR`JN2iblDSLL3k0t{3o&l+hNPIKX7{?Z_K>N z3&wL0Q8MM8@$8wUBIlHh|qw}jJeY@<+;I&8M?1TzLjw97yKVV;ZJ~87Z}yKx6Ex0V*YUqcrE!u z{DG%(_FIef^Yf+aF0j|xK*gE| zg1c0>HFN#K5H%g=GM6qua%eNzP&zc)=LCeS%vPylK%${7>1CPh@%4h|1|Q)f7(3NC z^W=H0nxM`3x67whYi0jmQ->_YsXNP+D64DL|JT&9n77IST2-}KfS!qPc=V{+7Yt+< zHUUT^a$iRi!5tDBT7Hr;0>s9O{ESw3_xcTJe9EX~b6r|CuTA9FD}4gACj+$K^?xfY z{vf;`>i0ctg`jKz{*Cyn{^wRIL|yV5Y>saQPT~FYD$LPlrl$7^!JtV!QQHTgpAeZ0 zAY21+wc1-Tsi`-h&i68fNcKu{@rO=|djj-BZn1p}7D1A{;mdR7k5!5kW*LK3*hM?K zGR{f@QS6%`2L-UWdz>8jPF7bf-@f6S!D4^@v|YmgM|nG4Vu|wza$)`gUUr91;yUNZ zM6X)oRW^5!3F)7u#vWv9?PTX7_r}NKjkFG%ZCLj_?*vtOuVXD4O6klc>X69y31FS{ zzC*({HM}n`n=Jmd$ir6GcPmwb+abB{pFz^!y-4i$MK9BV2^?Sn^~|`t$Aq}|7EVSR z@MAqE3SH8A7zr5JgsGs=e(ypNIcH z4c6fN?)rL;rH*6z$NdG#tLwjiHR=!UdctI<@c&I#S2Cb&%2->6Id!K@Dy0;a5R;@R zgbdHn3gJ{Zj3fKmBD>Yk_qt3WZ^g#0;JcRU&Am%D)NM`U_Bwz^yBPifJMI#{KBycw z8i7mG{O{=s>y@bvzIgTje|cbxfq@}c>KbI?y7P~=8m!= zc$fXNI#9@5Y>zTTVkXX@1AA6kc4{gkAJIi_S|g|^7?g_DB`|&dxIm}KAA26W=&vOm zEqxeh(R~6rci|d&4+i|m4N8ntvH1TqVk*!&ldMbRer@-kQOr2aTY;!;m{(M@)EHm& zA?Wu-2F!5TnS;N+Y@hjg+`G&zEV};d|Ck70g4(|r9NxIOVj*DK{SF3{|2ZB+@III= z!TW??{_lfZ##vrk0w^MGyexQ)5SO!iV0m9S%}IsXY*(2?+b%$+nfEzD)dTD3jw*Ri zKgSGnn4NKSbZ>UDH~baI`ie8?FRD+gZTRvspt)D)8^baVxXD1|7iFfW&=oulMBM;< zRNocszN{byd5^N_kOPP`e;<#$GpLD3EGbTWY{)CZ80&C9Y%`Og;K>z@*Mqz#ocIOw zdO4Z5XK|?(|0jpH$C>t9!5PsKPZbmta^dj3ogENW0Rn%e6ceqvfKXQ|{W*aB_aDL1 zKxg%-t2vNr)wKcHadd=l2V^zi;6iA%o5w}?WW z&Ee;5A-GC_QDV4?n6X~+=l6LDMUIVKuL&T|LsdYx+0PedUwlX&qT`Ma4oaW55y%if z7w1D{PbL8U@rph8CH;^OAUu7XoYnGLjfdbRdM8+xz)k+ENDQkt{d1+)==_Sp+M zdmox6>HIw^V7?Jp^dJADA3gu%kC+3W-KQ&s!tWzDfA9s?AojT{4ibxBAjz}yxYaj# zlV=Ym48(~^|F0X=6^6A(4DgAq)m6|w3k+(vx#_Z@|Y;XHIX4KksbAAxR+Nzqg<^(xc?xdN9Xu<%oWH45pxKC?a@-K zyfnI1Cfw_Nh0xiYE3#ew9)sx{+OV&_SS6q+Pzw`@`%-saIdkIs{jwc+T@*7%bK;#y zMA6vqi#b7&3c3a>vHp0tap1+Ne-Xyf?!f}~g zKXMq#Qi{hXAgHXXXp2_Nj3lTDv@?DxjQ>VMq!S(!ZQkNfbLc3$k{eM~e!a7PH^S{% zuE&kH+?^;r{45G`s@LeM9gwo2XE^1Cssq{mU^X)&r z2LWpPA^q3f4om*#+d)jkN(1wQ!sLl=ubUnfe;@sdNF9@+6@f0R6jnZN0LS0Z-EA?{M$fn+Gt9MVZtX8!55DDX=vJxwF;^z9+okd2Tsz>bAQ z@X8(eQS%)vXF1T+YFsfS-q|-8>U|Ott?MnrHw|a6zxoWG zNSDp*BCrlW@q9e7EFkL(vc&fZ`9G8rD{NIlRz?Q234<{HL#E%0dcz^o}2|ufbrRj`hSuWjXW*TLh&USl;V_^k2G1ztorg7#y;V)DYR_iwWK3= zMhOOhMIs4PAn7n4J9}bKla+7{qDS)`#OMRtp4(53XVH|hvU<~~*nZ&N^CR95Txz5s zX{i?`-$R_wUh9XR&EM@){aF`VOgW~q09k$%2V9=ZvSx~6_!1)UrilX-7Q8IQZ-Z)O zdU*H_Vqsx?W_PyUaxmp86pC)$MM-`@E8er%8!WQbU`H~?S&xCio;XsiWNoO3Vm$Q} z4}sW{YTXSDDUfoYtN$XiTvxPy8m;BYrk#rQK}Vt^>X85zX@UWV$j-sp*-Z8IQv)`u z(cQU)47v1}*<9S|7?e=ZknwDuXI&humw{E|U(UNUEHZK9g~uZH_- zy!O_Mn{s&x_e{cSj9ctwX~K$vo3svbDyJ4-SXY|b6p(jt5y7GkHj}tDt zewsQc4#FM`U`q$?z(CC$O@k~?2GSsZV2-ay>Pz(jtnrm>wr_DDE)fD=G#u=k4 z%+IfLSr7M77a38wb^k`Tadhk-kdcv1Zc_L44DP9@j7_z|+ldq1satQy35~obdaOLf z4_K6sPqfU+i!2D(?YYLLo9z(Tslz0bwFp{HRd$sw7P(YfO0n-gza25IY{L_F`yk zGix)8xUiqqS___zq#p)wR+_yiC-yuI4YBHpW;SoTv8>Zq>2pwz+Mx>C6@c0S2(;aw zcYt}Gi8urVH9NR>FFGoJbC=5d{Wqn%yQ%&Y%PSiLgXJhDQA!170q`ZtSUmftHVC&- zn7zYdM%t?`E;s9{r8iF%A6oMch+f-SrMNob%wJnH(d!p~f1v5A&)y>XA)a~2O^{}0 z#r!73A{v0jtb(aZS!=&AyX1+&(NgNVZ<8i^FhUDt<5%{r)l8qAApd05^N{@hma{Hv zRwlXq?BX=$6Z=f%^#Wg%)@zy7Ny^Wkd!EM1ISE>x{IU_q7Z(g`Cp|e}(v5uhq@6P3 zG8mA-sfxM3!qBclK)PSc6UD#*zRmP(AO%~*ikEkVmT8}S>|bQj7JwPw9#YC4kRH7x}eR9(JS z_`)uUfX27YN8@6BAeiOPY{fRdziBU?1|u(00B390La-40y!F%U`P{-n1Hj9G9S(H# zQBNR}yTKiYMlA%|x=+l_r4+hk^Tz!g92_@cEiZcXd9IL?OA%JNg4>`hcOGj^nyy?N zv2|#aholnC{;I-8{_t6R`ZErQ2^m`^H5_Ru8C`2^o%$4^(eow7)K6n+_W_J1rB?cW zNOQ}B*a950#t1NbM4#ou8P{g+OpH9))bTI9Y*^72)Sq$|Mw=(X3Kd z!9E{f6$jZqS4x!XA)(I>WtM8lEnc-yq!j50ALlJpufIN$8Xnc~i|G4RSzni33gMur z^%i0M9syT3<=0H9xTjI9Xm+!SLBiZ+qreF7 z{=m77+r3rf{LJsxne2vV-2V@Wn?vDE6kT2`&)om2A0c;msd{&2pVk9cz>(ul`9d*p z$SG#guHli@jm{>h;fW&hi;J((M}q)8xuO7gFo;)i6K9};on*$cL><{Iw3?$cI+f`^ z)wt&|xz4M=KeL=36K6sB;`r2}U}zt3ZlZ}U3+*zy z`>4kFsAhrmAx>>v9~$y+Ow%eI-^{<}L?Uqya#vc<>x)CTzdfQjb|s}XNc1%p@-D=I zq#jJhyEvNp6$JZbuVVX-YonUORqv57$A`A$AfrN8+3z=-I){C!q%wut3AogehqkQT zNfJWTfj(AnNCAi!1fV{lqC$B$DKmS4%V}qK=oKuMpAw<*uz(+*wtQ>GR9!xxq|s

%wPyo}HDK_ffS#Ke=fpwy~mOg}V}(x2XPo1eNE~t!R)A zO2Q)2yF3NHMbe*Ppf0PttjyWj86csPW-+#I{1`J`Kgjr!8sLLN?@1Lc9iKDN9Jt91 z!oRd@l;aXyhxRU@Jx1Q`uU^v?3E=@C#{Mnp=!2>s8H?OhFUdkZ!)lGnZ~EYeqzSGq z{!6%DikV3lrahI7z6PAfDjRtIWjPU!K&(xoD|hGc$FCd~>!5Ysk9G80rYuL|KKsw! z=zI(6+fbjPxxx7cg88peMyT1^jbYR=0@X{vHQPtXRB&c42 zF$O%re=$o;fUfUz?A~D(HMm=*bKTI4q@zw!t+Kir#2>rvU1cbpIvf*8<|E|Gk()XQ zF)q_Lt=*S$k|1boL1HG(0RS_zKm{I-<3lYkG%fzC&d^l^!QX?-On?EBdt3Q(Nnw{N zs5cYV=a$ciKU|x!^9NJchotM)I9>b(ly(J4r2~(umDN8W<6QJvu5;a5&|?D`F2QY+ z!#NMoz4C)_K5Urzrhk@}%?d-p-CcEjk518MFQwPNS_i=(y7XjU8B6ejBbbSm9y};MFd_U>mO`F^ z`zQO2^K(R0s8U`Qs@k2M}At5L8F@CSaEbdTl24bQLoMRERWw0J6iln+E4Tx;NLwH`^ka zkyST%duN?(L1|1o*@mY4{35)IJBFJud0%kX5n zcD0vwCCqBhmni_H&KE)8kiJXvi?}6`ee^zLfC*~ z2h@@59-p06XQ~2F^L0Cm{XI;|NCgk~teFOaI7O)cqn;%(8T*WxnLH#@%;T}A0?9Us zH7~uJoFL!i83kxdxA*pdirCLqkIYgzP*3-rb|L zTZb@n>t?G5+8EZbhO)HsyLSGLUrw$EQX<7!sxGkd87>Pdeyk$p5DR?dr@70r5xK8pqM24OS;}M|buP#7A zqA$&W$Z3`fh^7EuL)3WFPsJ#yblw`{L}^_!^yUI`1?SxC2$Qc>bbVP>KI=n~$Ak?S zAz=@eA>2e7Fpg7%*$0qM!Svt*|A8xHtR0hTJPhCAt^5OA*6FCZc|Rb2?;tDpA6XAx zcTmq4ttyUg!(wShmLh5bfPXmx7}iH^TtQaKOm|NYSkOQ=oh2wr|L|ceib-ifbOjVQ zZ2tqSt41H=Xbhcu4XuU#xahBJSl&V54otr`7%IA)9RFR(M02_6ecuGU-x-16k%kJw{- zo4(QtjBB>SvopX&&e}izB7;~I@fXR*nagO@l*|^{`}S7Qv%%&!uxzfOX53oF2?7d8 zJK-~kw*Zk)TwPD~wcp;njiX{&by&yy(u^Qn)p>^QwI%;=cnLGjvo+Ht71^3CqL@3Y z#a*LID&=k{|B*){-XMWZ0r`_$N)o@?XdS;vWEfHrk- zMU=ZWF_|3LY05|GN|=`l0AlN0D2);EzT2OXswpGG|+V_OTM9&cJbA z4b}Xs4%m05Sj8WpgJsbXbSF}yt}f3Or-uBl>O+9Y%9<}}Wo1QP=!RAB2@CU7l_QYk z@6(CL4O>ke06S!UMoP*vb~5Y6MnzDyB+@`FBTYOU@sXE;GiIYK?9rGY%=~A!p_x5) zGb;A7x(7JOk-%!)lFOB+l@9`SI^Ud6%cIDae6uPn5*aM;cGLtJLloHOeEH3%d%V_n zS4(PI7x6}fL2Qm}8!EP-J@)yG;5*6(Jj#ljwvAN zj_rEV$1TeoeFuY+yf1ui=%~QNy{{k`!hqZNlORs7h}5~B+pYzUje3ibCtHJO9T=8o ze)gea^s5PGLlU)#wfYfv=55NFg^zxr%`@?zU1A;;D8xb6&AnRk7bz z{DlR6g4c82QVCyA6T6oQzPR3>j!o19+&=ofq-_1Wi9$M1x4_dT?gnY>bSJlg5^Gcy zNWDAS-y4LTzC^{VoJq_}0pQmW4}Q}PShH$inPrd<|GnW2$Q7K=1{kb$n%@CdBbiCA z^j?Yv2**!w`w9u-Ua+c7E&5}nhPDvdipQgBhDnj8;9yD)LbYUPGg}o8sevFtLV?ZA zZDp5lDbOCWZ*NesY^}VP0U`FL0(;b74>&&A1IIL95ja(V2)X|TKbip9!l>qA-Fw3K?-Id8saAK8#tVz{=@t%e?Kzle=(#Q4kuaOH5EJGebl#~d5sl@lZ2N=_Tii^XX&U-VO0BZ=8 zGEr8(AKZ2a;~(8r40-+C&s{tX5`EGlTEmANk?lG_Hcd7U0!#p6i!$)JKj1L_#WFr= z4CE8WUJ4L^B%|c@<>h4_Xw%GynVtc0BOnNznW)w!1flYbD_%6AesOrJ@Yc#5K@u+} zF<%AKghiI3k#rzfzU2Q7t(C!#MN9g;=gDciortK$Y)n6JgNaD1@OmL8R$9^aU**f# z-4V`#M`o5&Gs_-NNNxH}FpFZSWHo%=6V}iE=VSx;FReZpd`u{`IcZXB`|L-fCWN($dj>ry$ zgv!i3_Cd%fGb7{3DtlyQlaP7r%|Z6wWRpFQy$*g)@6Ye+y86?l>-Bm)AJ50*zVF9< z-;PF&@p4v{{C3MHV8M`<**zVkE;7b@EL7e4Ed|K%1L+&EWPHZYPpY>8aMh2s))b#= zO^u}sdtLz32&*UxdFza#JVrn(_zz>-lyb@_qJz7aduKkeR}~DIVSo*s8w;OXzJbn~ zN-#m`UqS~vFbElZirb=r{*6^&R#K7W(;a5B)re#N#ei22o z9X)hW<}D-X!m|B~tr(IBn;pph!X`KNl(?64nH9h?sCU3r5L6Joa=dF$Qz~Zj=_SCd z=1N*Umocbg*l@Hf`L*$Q@JDReM_lG%OC=RMDG1{G4{g&BbTMl5=+d;bB^Ma$x;Y=PB?Dq55fyWv5*I=B2-8j z60`9FUGVje!$1&-|6bD~IIcY8bcU^c_s--iv|YEY-OoyB0u-kCB2%kMSD6s_gl5(mit3cHjBw z#yUyalPBB0)Y9`m<_!_7XR#j3ZDXw2EkM7P7!;>p9GY_W_-HS+*06Dxk)Kg$Md8B(v?dR${!kJ{ zcYXNy5#;`yZK~@o$G{x0$x!EW(|;)~;N~2B1O^6W)juO9ZZI0>aH)15eZXz<^%~%l z2yOhb6TP#snsZpGxHqKc&wjcO!Fh!r_wyL{*tYvV4LP}>(`xT6T5x`_0;Do-|H4Ei zLH*zNJdD=X0DJJ7uVh=VphhL5}xSQZd8bQp>wFd1RD{XsY1pNb$=1-l63ZXSh#k$Al<$D z;C00Gio9?RfAP=1WO@F*pIz|lKG{T`f|h>72M}jAIx+FhEV=XoiJvhgR?n82_2jZ2QqJ+Vl+HafP~}RlI{x_~@i0Gf?RUn2*z~HEW%TGm z4!gSmIEOJ<0=%U5vX%$03rISJ-BQ1kF#Eq;B}^w&G?cl&%nJvStP>z*1_t1sqREvl zJ&1Pu=3y4j5P@~l1iYxJW(D`KVb3}%nt)>YT4R%_`~3C++^vPe3)z*Z{d}+=-`sY; z@wxa4lq$C`*K6l_)GKOXf-HH?D0xg9Z-58vZymjm)^k^ad#PhjwnKR>zJTR4sk!0 z(ZOT~3~hVJu6&HoY>bFI6!b^3`0fll<>f2s4m~_mCt@t5+UtjAQW*0p`0(#^2cHg` z%^!EXOgy<1m)40%=U51D|C~sI4vvH>7A#dc&>zYFyk=yI$kiY0juLqOoKR*2y1N7g zc96g|4XCo_Yn^Qrdpb*3dGU#n!@oNmn@d?8zirv;+I)O(_CvmjA31%m;K<$S>ct<7 zdT@~2UoWe4HniNb4?JjssnPY7-oS4M_Fm7$*Sj`_Om#Y5vI-?&>qf9zQ1j$I2LxdW2-JXhsQI%P7Wblq zrOeML*_IRHuF@bi>kb=1&z11c=5c)<-1VOR?1da+fUDmSxnX#ei*y|0&N4&KVsYx6 z(jPt^Gx2q?eoco4|kL;;Bxrx^;XmKm&1GqU9m0gwbw1b zR=r?qzSoxL8n0x3d{HO5@vppa42$gJdh>Eo)i6c*Xr{(hbfQ1U zkCrzvXKjjFlZjJhC`o*Z|>@D*Ir7X_19V>aqs@sr;l{#WmI&JiS7_{7Ax z7@wS-7xQJ-nUS@o!z_O2?nXkY51dGAmWu70(qlJ_tHJj&jZRtdO5}yShCQz*i(e(jO-AdcpJoUw8!|JnGFMnbAxed~g zUDAB|KX`EGS!FcA{iMkG=}E~V;me~@id86Z1qX=fv{@VwH@mxE1QM02TZv&f;=Jtn zN4xCUp!8KFSF>j&?`d*&gGb%SAnO<}3X*HugsmtNM@Y3RyNkIZnL~z@fsW+AP({;b z-r1;eUT8)^CSNOl`Jrx{T!7vL!w86vD#gTEk)}DumauvbicfONKV||=HMVd z@_mwv=g&n!Vc*8aWsT&PX`F`sbPWxeRDKVwD}QHP<&nar)BH1r^8E{sXn6XWlo|Z; zp5g($Pl-pD%-Ke_k(~v1&SMw?9Aqc)_5m+Irb4zeU_X z7hM*Jhuh9eS9cMT#F*eYG(w)h>`0BY28OwIc599`Am1z*_`U$)Bgn7^Ys6tJ@9(R? zS4d1~iQGTq%Kh1pF=N(!rE%KVaP&@cd&ZK8_!!RcwHVaTmfy?hhsEg&k^%oVb5bk8 zdt@c+0>A?=Rfy~MBq>n6Qc?=LvxTeu_=j6@ALz^$#RvIbpcH>tg^B=aEhye9%aYrg0!m_Vx&0fv>hf<}jxn(F8(%V% zQ}83{X=AfTZ0kclsp+r2HSnKp_`to-a$ey`+z3sc!(!4qaKtgaRrkF+hwU5;m=MK_ z(2N11dh9C*oaalH$uiVa^3j~;WVTZWZw`QE;(U-FUh}c*pN-M<`o9y!qPzA~% zrh&I;ZvlHxOgO*UvlkIWpKz{CeyF|BpcUeF`d-daVDSnaNF@;uq3 z$0uM}3qy|-!O({@4sU-H9(s^}bQrvgGi)lYNAOzGlHMQsd*^sXmPLX8>Ia`yz~{Re zd`;uUC;LorO4E1KKFFPFbV}mv@B``$s^SV}D(4+1|C`u}Ag)aV1|nXnM+cyJ(MMhH zTdd&2z^77u+grMV!h3(;tbi!D>~!8xe)Lgm(ZLB1=qx$L(?GM69XQhl{G=9w?|6dr zH7+i$I1)s(l`upiKQL@lM{a!=bg+l_k=McEWSa^Gg&dKbeM=Pvw4UTMU_fT1R7PS9+!3{Gy$ z(w4qiw$`~HQDc$kdPb^#70=f8MxI1g2WrQOMfBAPv7nij#i@27B(?6dgFC0yE&vP4c ziYkhWeL7j>@)%e&?H~A9kzAZ^~)I=~!6u9A-5}BiFv3jop== zmi(4L+1LAZPr+*He8``f2Nw;tC59}88jR-W=ZX1_&(KxMG-s4CvPE&PJGK}sPsIWZ zIrL}fIFP<4Bjx`zb&88DO{n7X+Uq(oX10*j4_0Zs3uxyX3BJev&DRo!~N&P z4Q!1hf@TbtpqZppGlmvipRYEsvfS&{mYH*L3V6ieDI)z2*%{flZn4VBVId*;!i0^T zzzeM|!H8XB-|hMPfy$5bbCpgUUWXP&=2`t;Z;Y3qho@bX+z=#P9CnXa(9ELl$e+~G zYv^+97ic)nhhX}iq!V755^39lT4X-QHBZhnMMRWqN9r%EXR`Qba?m6G!XG1P#MEa) z_NBu`aTjtJ;g}M-u9>>$U8woQNNwm1(K=t3ObnU4BNjyTzDsZ}+vp(28*O+6$y>i0 z&iCnWtR}I$!suZYKfmGv^CX;?fRY7*AfOYwRR<7Dp`S1_oBE;=O6yV-SN3bt@jN4M zf_h0+Ij3lnr?PFasKe>0kp!PB9S-aC@FSq9Q}C7aM8CP!j8?9Nj^5BMYg^*-xa*%n zmTL`f*0`>3ibF58eV zQD5Bc!tE626z58-bf%g?B*3oH*FS!B)m6TXA8~=J7+zAaozccTD7@=?`4{Dpap9BQ zpqO-WE@Yb^hkt=7d^GS9ZOv~viK?YiJ}_Pnim=qVDQ#n4R9Okt_Jw`U4P}3a8^Nwl zR@LFp9+Ljz!0f4F0y*>YcM`v%D6O#dAhgVG6#XI0s$%L^(poAItI%fr#6IGm08)kr z-3`VYH3amN=y$KdHP@qeij${g6b~q(O%~vej8T`9ygKZ?z-LK@^HY?bqFa+O`-o442)CwD*@4 zk&74BI;X6sz{F_0I++If7JD-_hah4>K}Dtg+J(q3V`E2-)iO_7A9VX9<~I3xg+wA} zccXqXnnuEM+tkIn5%MfNuYzWTT?V-7-bV+(t{l#XlE2rIlApN1$GqN&I`7=0L`J|8 z!oMn?-&7yFF(%`)>>6J&zrEyoyWiKW!4whgiSg{-_tm@$Yz${a?dQlShY&I}*0ZO+ zQwG)i1{IB7mt)hd2JTLFDcsx<4ib}|o5+nmpc_XH zyPI)szt5Ka@$L!(a;ZIW-0&+aollhXO54d!=I{$UtCigsWF-R{=P_O2t|d+zaj^g| zUD!oD8jdDThUH6roYL}jSJ#$e@2N=!Qu08CO@9^(Wm!)OIS!3kp4J zknazaP%^?S0QP#~g8Qs=#%>l5HtnBUMq?qFW$_dWH5{|NP*lSshNha0%pTvkOR`F-VB zbHL(b92*7O|%8G)wz6iu~G4nRG*?iCB=WFdSj0h$()JKyBued@w`J%24(&RQhqm9u zv9S{*gh4B2ssk;TtZMj`?>)V0?Vp<#M}PN?G^{A@BI-?apmt^wVszcl2a%s2 z4h1+sPHWM3;AMY!c(_lr0*12C14ukjuWvTkN)+D1-#L_lbC0N zVM2TKjtxW;ogm5HRGjANsI#U1{9?{VvG@-cy#qrCibzgtk?Cb@0)K042W7<=HDN;Metq{;nr6s3K5;Q+f zf^Y#aF7`FEC<_mmq5BPrlYM-BG~R?Tn${4Ug#IWNJITlvJ2uGCn;-DmH;u&It2jPpa_mstSi^$Q8`pBnV^I9Q}5j1ws_mGvc494_TQue22Eh;a^&6smJixO zp7tC)1zLmOju84O53xbIkB4QtkDaOk#+8Nsz*2-_CkB~XLVjtMQsf1jd;Tx2*wAy6 zEXN@}fuUdLPUFqWLIiu|W7~Uc<@Pa`L=uf2+dZ%RPIlzq=Jq?TRhttzJVNXh9*2Xv zu>vhz=9>YfkY8t4fn;ajRxuSxV?$G%{~9BZjIof|I=Ife#8C2UT?i@SoS|A!OXuNqe4^kN-S7R~MSyM} z>uz)9$LWQE!NIq@@g88MSRf(Pj+6RKi_zHJK!B+>3aud6jZHXb+}(!C!Spv>#9o-h?(t86v8^0``HU@l?XulMBlTN5|J6k4sHG6_==YN=rk9hu3_$<#@m9@(Icy)Mx^;AAj+7>r*7evbZ!>uc_t-=DInjohQhC#hk z&(K~a6ILWN9r+!KY2B&X2~U@>mfGG^4rfKsqDFsybPq}hzUJGihkseRfmyz37XDJX z(zp5&GIS@ubc@=jme1!`*so|uT;OX4FJ680MI%srV`!l0RmUj<(lP$Y*dx!i=}Ci#^y(g7qvoeVuQ!NQqkV? zxTp9XPpVRY3EewEw#l?rX5=iTNH^LHId89)>(cKxKwTkGRdhKOJI-D)w z(%(1E(vy3g&V;rLU7w|s>@jDVunBol`3NpLC)=1s$KfD(aZ6=01* z<_u){3zcC1l9pMMxuikoX_kDaMDA#$RC9$?a(W&zr2gK?jeklS=P%8-cOQaN zQ`(Pn;5d0sQpKDEjh*%+S%Ef)x~3l!oc4|dR_o#CFm3BTt^Scrd{Z^%h0poIn?zWf z+4}QzD@(x;I#?kKqyxVgskL8h0gfvtNzMyRcg_w$6p5iB?|kxYoqF1wY^ZBaL5QS# zD7P*ol>|WH#oZ#0K$sfZdp!PgLV`oeGU01QY1e1LqFcy^o!)G$lr8U+@zKt9+oW=; z*BO{vtn3a_w85r8lgn zijQ`9d6pEGH0R&m1yK$7BXc>*ZAPZYwi&a6E6%$kuSIFbKNk}eO10W8IXgdI;-9f8)S{)YWI}GVq}VWYY}kSO zeMl>XD{si<@%eCJYHFZs{NMg4E;EAtsq z(joiF(H8cBnmYvg25!Deoh371gWQ4-sPgkxEsprpT9c2dzdZqNJ-sLeD_ek^b3{pW zBc|S7P52ddu@m$E~C17^);N5G1&Gw}mW=TCl0!*P5Gp{(ah40BvJrjEeHHi=v<7`qy2_AUrYr z^?w-GlWxZN!~8rQb8`jpS&^7nDu$U_oA~4a99_V2y+u)w1e;ryIW&_+bo;V7QRJIH zB8+&N6vLnN)uFPCJJm%k76ds_&Q*DakBE&S&*&I zlH}*t2{s!>cjw-X`Dtmf`6UT-p4 z=W1tdZ9Se|+IInzvlo|!9uNJ4V0{%R$e87t^u4%^RnZ+}(DU9dY+aa50mkw?CBi@(NEc=7%=+j`rVatev-rIF!v{ zV&zo|-2nsJSo_1}?>1geE>-M+?@@^EaZD9An~BPJ-y4had_-ys!5 z=J{_?02qPLc-w3jQ?S|V<+LjO#Ow|sWU?ZL>c`iOHemngqr>>=9EeJNU`Yl zu7ac?l`rnqd#JE$IFH9p3VKt{y0fe>XQCpNz)r0EZXX`S(d(^^<8{QViS!a5$cw`a z^L0drAKmzkIp^Y-^=MS~ac}l`v<>oRl$M;0bQ+1|`;p`6@Pe*IBXAilWRfTP@ejjVn%-D_01=vdxe~0O2 zjS%%<**t+g1Rm9z+!IAsfJ5Z!Mieil6M zS@k01@{xKKZ5oicv)rWacBHR@C2H%IK!z$le=Nv(oxXzNzDVdpaR`6F5ndLvxjqRG zl)k93+mQN@^U*7U4vkgb`&D_b3XUXAoPR6vV6J+fNT`%}*Zm5XblRVjHmf96mv!Dm zrhsCJiG0sPo{4o;VzNVC$RV@%<@YgMB82Qr;wj_D%MYKLMz$=cujTOJr5klO=`NR7 z?o;74L?(PK@Qa$lLXJNR`U~{a{d?u3T#RRw8CIM{$r~G7B#Gl>Ts7`2QS~X29k*2G zTZ{?*FY=kq9{soL3FL*7-NNuJ_4`0v2~@u2bdrj*5pX3rYAwX~jB>%wqYzM=r`7s^x;ou$bNF?#dyAY;5&I1E5rC5p8=rnua|8-^fu)E z?z&xkI(BIO>8C4K!6F$_1y)jj62p_pj_`z+Rs9IjuLh}}o!OwG?YmT8WHh6arI@@0 z>`rJBnLR9j=k%rk7CG(FGR?rB*lTIkPQg{Aqz}~(zmyjd_XoLqM8;vyn}OM>7WhvA z>jSXt4}|l8z+f=QdVt4*?B>amW+`v4ni9t~?HtH%1Iv^S6h|~j0T!OJ{b#{?)Yd95 z&(Hf@4mwO+Oke0UtNwVr+~tGb$(M#1l@5I=--btQpUzuAyvFs+?3>P$h1RchDsFOYXR)u$pKKl`l83Cj@>Grc+yBlk zo8-7Zcp-l+%CVd`bwRJYWP3ZzwUV7;aWo{VG_Gs}xqYK)3D+O%Ft<)tvjT38hUnlv z3sF(gM-ndEBdSu*oi`~Or&U4>LLQC&{&*HUtVYF?Le)2KE8v`LIP21l>$OLM1XQpK zSxu4w3OTGLdZ0zuazl_`yoLlqweh&e`XC<`5NklP7HMvz{Vy^Et*`=gRYXX-5$vA& za$3FF>b{$9OXdo^i}N$p2CIAkAh41J?O6RBv%U?{F{Q82F{m^4`CUrZxN81>;__k+ z`-{0nTg$4&HkyE7s#u!UdC8ZJ-j3PTZTC}|8()Dqyy_Rc_5HpPh?q;ngkvKBre!DP zezYFN^6LHr@uQ0^M30#p_i;6_{D`Nafik;Bzds*)s=t0%UbshKCCu(bCKAIE*7SDn zFCM7AUBcfR#2TC5AP6a+0a1*;)?aO4TjkAVmQ1OKugj`Ns67Wag`V8KZA)d}jXw^$ zgI^IPPyQk!1&@E7H~zud1=aeBtGhd|hQe+i*kBTcc^y-F4h;?Q4;|wY=~0SG=_%w3 zSqsr*;+ec$J9%k5-Nly8e;!*%7&rG7)@IV@EsRXh_UZHv(4qkXj8F^=5OC%R92kMc z7=TgVTUabjvrxg0Z$6yG0(m+whvT=px?OfS8%ch%XaFv+=>J{)q4Mu+ZHtVgzKrb6 zBVpRwIIx)bc>S%@Tr6M7q_+kQGD8l>){+=kuDgK}5_^Dsri`h~=W1gP^7JPhN6GFI zeBjjyH?82ghJt4-k_Z$2FopHr$nu0a|7x8@mX&Ux>J=(K$nxDjBt_*EsIc`-aUPor zBxsK~zX93-TD^1+kV*?wfP?5AqaK7zs?FThUh1#T)MZEmS3G?Sj180=VC?_tomFpy zQ_>PZ@9ikVw920CMv$^4Jp&S?xSHz)DUs~HliSwobKe_6TOR@UA~0lPFZEnN+oejS z-p6VxFJC$3w09wd=!j@uR`1`Hhi65Ha6vG(RDQk5X`_=1Jb=9G5RT&>z3;sQh=oAF}vv~H|*g-dIh8yFyU ze&Ri_Xr|MdHBfW_A-$uIW|T)CeKG`;5D3F9DH<66SWbq&;YTc={!rf2^C3pq;^O&_ z^RermjRn|z&|@ZlW)EJSOzAr=)I8I&yT5P7XwV8OnL!E)vRPTEoETZ(_@jMK51`Nr zTy44umd^x^4nV0E^?G!AIw>tJg6}nh1oAu40pvY+;UGN>$WL8e`#i1?<3I62$WR)= zQhGy<)=dy@K({~6u4duf@7tDVKEul?cR%jC?C1<70AFhzo8}23+#7Dwz6Sc-(;z0x zIz0#J-wS{dF=7n&r~Pqe{X#J@heKdY2oA6CzJa^daTZ6t7lZ#i!^$hqi(h0lG;{BA-B%@zpDYF z=@$@i$*UgZSXpG9cL1?m1_EPLL5WfFqD_g8=hpaOOY`p$wU;v87QK<5ho_# zINCNvq=M|b5#dGycMnhBm=QF-7GDOs$>IWDoo)wq$8YcZbkN-m%s@^kgp1Dm^$QE5 z*m0#B#9VqF4ZV^AP9Y3WIB^|)U|q4iVz{P&-u)CM`dI>*7<{Xqi+|n4#2kV5*O^Cs@?^XbLmRfPA|mf*m%Ltu^<-qAe3g)DuYt3J(RhN?3blh?Tw zwpr#-nyGLAQQi-$B2Y2q^UFq5FeH(+wR9M7Y_4|mspmUyTzb^f@9?ou`**nf%zK1zP>Arc_72=pispXz z1!nT;K0`F@uQ+aaWB;F7!%*buVl7^RFIeiyB1KyZ;LUwI{Pm&1#K5R@MB84MInsfW zZV4VS=ohDrSbeS2nh+ua-qiYiy`7SIC7WMiU_yIwtKzBq@whPFHS=V{xPgl)% z;ISqvPy*bbnXo{WDfQXURw0QU!w^<^zqxM2SC)cBup&WLLyzAp|5IXBf|4r}f5+VFLp0zEd+@6t>OGM(Luip!PN7G!8Z~8qHnuat|UEOYz#>G z6oM$~BbO(Nv>9aX>46I*WQ=1Y@^@hAK@k^H?D&v#u+3)wNS3`$=Q}U5RjN%h?HDlM z*`R^}`M&`<$Qa(fINn0FfpBydX6BRK*~`PU8w19s&&u{uFhjZ}=(|^>En^7*=_r(n{CXUW}DHdJT6L+WCJkXq*j8UivKxnngWX4_C^p$v2$ z&<^H>am8~6zGvpO0f(yEKTX1wH%#6}Bp;~P!7AAN+sSjvfnEd;o}#5+F;6(J3#ffH z#$iVvgbpFULb_630Q~a)Y39^pfX{#w%z zo4|voxZx_xwx{BDG#$}=zA$B37LdL6N=CA`-^MfPz>l7Swx>I?fD!rc1wd|Msoj2W4z0Hg`r+h}ePk?};Yi`F3WGX;%=CmqBsu_0q} ztqv3!)(k;2%0TA`m|9QW;yu$pPdgI6CguTx?rjsK>|=zc`0xgHCV-Q$FXhMpWrkx= zEH6(Q9y-<%%RAkIxUS!P3IMQ@ur|a(Ln}yu0Y*XTZL4c*Ybz@sr^>rFw5E!ZLBWe$ zs8G%gI3C2?k-+Unt-Yt;5|2>5y(Q#P`EP!H>h1$9wtu)Fb*s?C1IJNn(HG_&hTw7O z--<0xvddL(?^H5q%QZ8B0rzaqh|RO-@oyf-RdaA|*j+lt<(EG-!DH%hgkD3$Q{Yz@ z&RYnuQ48cve?((?uA!A^Yb9!)Fe9c4S;C*h?iJRgS-;FrzZG_1ex{^#52M?W?TYoH z=Bbu2@iJM9HMGwOe{Y^E<(BqaDo}Uw5Ek(5+v)Lfa|M1x$29Q#YhAI6=hj^NN67v9 zQ?)T|GXga4H8I$PB}Fzx?9^A?r-2|7 zS#KMbLnkGit>lHyJ6X~x*X9;10?@LJ^}RqZ1lkA)iFoo~0?}&yU1-$CPQ%q8V~Or+ zX9rd0L75nci{x`0Wd8r(A8V90g85kcwHEVQ5*Zy^fVTRSJ2ach184)deS90ZcL(VA zJeNVY94#cSWv(v?>jymudmSKhOAucu^eWwRDV+UOv$cwRCHS5K0-QHacS?1)M z?6uV+WqUDl`C@7figJT$YAz?p zF-O@ydYXgo_RkKPAmnHgvo8lb!a7B-+gBA)a-@1^T3I(vD38Ol5~p#a^g^$4hn=$2 z)URb!w_i6$jUMyF!VwWW7PLDx)whZpA?DLvaCF2|FOS0lhb?Weq!>Z8N#2aH8`y$% z0hKVB41;R>J4LZVbm;Jae=E=vgW^!}!t$(2AaIoE{|2Cde5=!m27X+vtA;?a_`3QO zSwqZa!^f8RqM$dkcTGl5e#JQI1m-MQrpU>J<}M-dKraAekRM9yfCME709`!L ziIN2^1Eiy9_qJ2SXOq%(e9BvQcLka`d_E-^((%31@ZXbQlA$e1`@SMazh*}Fe>)xx z6yp1wBj#Y#H9z5g5J&v66*0Mz44dt|==*skwh|L+s&2~`+eg0dukOZ;FI$S^ZfEhv zONEy9nzFKvGNx{2bcUcDDE4U1bpJ*|#|Aq{xnr$s63CiPSK~AYcSRHFi9U{5Lh`H> z>RoSYR$lGKsXRl9*NVIw8i3qQO>Z9-(Yw%BN!O@)~BFf3|yiUI`M zH$rVm!;KBhwdG=*XZmz!n}3T_beq$l*w0q>&z~l59-3bdaNPC`8`DSLd%XsX+6T9N zy++z^!BR6({o#KbK_rPw>el9>+z}dhGiypEWACXu?#8te83aUP)Tt`Zf2Mq=AMQ}d5oCwsogzoHA?g0KwGh=Y+~-UH~&XQ_vqUgWyS3&^ZlF~V+Ux%Mt(b=NpF>txU+|D<}d#ipi1e>UTj~crbR@b zh;-tAmdmH13Pp@;toEna^jYKaox$O7@|c@${|k4fyGdl2nTExznPfHZfOs5)bly32 z7UuV!8xIjMcv$Hx;)up&bcxF$PAH=~l{~xNLZtqcB{--fmD+eusDGrG&ct-LgOo{# zG`QB=)O^ONu8g`zSjF)Z30+2FsxNj`(}pj=6MviRlwPnY@vC{0_=U2+R60Hl`T2ri z1K5HHd^Q)NCEwyL2=s7&HVE<%mys%P}X}11%GtCl zuhFrwMGu4qye+=7?yqkuy!?2-wK5^(7eVZ?YGqh6rM76<+D`raVDrWbp2uYX-E5=> z%`?7Q9rVy%snFAOS^j29#V~m`q-y(SWEqFY$bMZ@UTIAd#C>{-;wt4KcsuQzZx3kX z|8#tt6VJ zC^ES|gJ^}E$pkTPFc0TRq#%;;{wn0g7OGw?XfBF_Tb*#U&E{CqZHR9X+b8*Tgkbh3 z_no5cbNZ3hPbhmyE_Q!IAY%vc)aA*}7Fgom*f4oQ1G14**x>1jPFrDv#M#kLz#3<_X+7Xz`m zE_MFc=7oFm&`Z!0Q*|Rg+onYf?92 zz!kOr^C5^YFr@3|0y2SRzfONEIhcW>V9Mu(kMfH?4)6Ow9o!AKbTL z@`r!lr~MT_TP*tZH3;??^v7B5XWa5u(bzq3W>+3H|4Oui-IH>cW36$~h@AFXIbaBy z6;L-oe#<8U%>zNe-Bd0P)znrZkHSPe_}Bonf!t_+z}fs}Nu}(u);1IIG37Bl~uTIVXhe2^R*m9r`jnzz* z-mJij9bA5^4BaPgnCY6_WO(_;h zkiPjzg!|_UJzk{_xG#?nwTxdh7adZFo;xYCfQtb5VsUeGPkwOm^hAR$6{Ojg>m}#+ z1T8?Rqo?QZ@uoCnppO@ZJ+yc{{U!<2I6sjEsc;8KktXymhZh^j5G#q#7IW*3>tPOt z8q(oL-;B)|Qo+rOzKi(;&EyaRxmM?6Ur2M?kg?aMln3@sYHCP4SAgff@ve1t@d%g} z>CE5SjeVkYbEk@ino{0ewkWR!R{=yO8mf?j_S|=EEJ2?0+GO~0{=C2tR)J>?Sw8gG zE&+Tu*q}NBg9&O4pq$~4q^?h>tB>x?6ZAWMPFURidP%1mg=Z z4DP65W1n_@{2DLt5^$IElvt!}EFTs5oqE#FD>PE{604CY%L4D($BS%EP1JEE>{ zI*p7xG&w1NUluDd!BmoF@R}`&1k#tU7j1oynkOj)na`^;p8woEKsAvHO)x~?^V*;& zkh4+A(m;Ub*g=?7vV^hnB6&#mY^63`vpY7{Vc?9TesoIp7=A$e)HKXZ~_YWX{ zbpTAES5aD3afo)G%v=?y<-=~O+Va0D#HF_1ofW!|$}b^_`@hx$`20W+^<*?OG<0-y zR8%7G+C#UuKX`h43W5<4veL%(yYl!8#}UR|Z8zF3LH+G-2k{EMtLw`>@9Xn5;DoNK zqy)ATs=ql(AZz2s_bu=?Jzs}GWXVk&dMt4> ztSX|-Ir`81ODb7?$fU*i#z>B8in#MqE52Jr)nrn>V;BrS>yJV4HmhTm)5;@n-g0|UzUSES(SfYb{M#W7cQ%$PgDKaqD(TdMV`L?1m4-Kjtzz;Ie@c7K z>Vo-P0t?B{%wx+F>uToxncRS9_N6BFgU3WaDUuM1bh2aPs?oVQL$j-_QFRBf8a3WC z7;Tt^qj2!;m@Pzm&k$N!`S9?4tGBAu0UHF8cf3w;V4A)tFm(1p@o@{kL9tR1*qQlW zP4nL&XC-TPR<^OR(a<1A1DdE0SoVTPnE(qjXfuvr{*>A|+ko!&fFe@IK%JxuV;2x` zTlSIEfuBjhKiBDjunc*z*T@vH9)hO<@u)6p8P(u%xe`Fl7iF zJC34%)?l&W?>Dd>G@PYKBqE1zE|4($>YYkJ0&Hv=1)(tcdjKJ9q3gjW^k8=NYj!ht zN98B7-_g;gpq&8YB1xk7FnyF$TN1Ur-;d2b%2sB&q^G4uehFQu4V-^i5GAUk|hE7G=GQRVBxX{-IMpy>S$Q_H9_5qk=tFDGS{Ft*Mk6e^xO+A z!F8Mfh7iKI7n#0@%fltB`NmO_6Tzu=j%gJhjgmSwJPRM_yE^0MS%(7vJG59+{eZrm zS8BC4iB-H^2m{cb$nE4PAE#0EnM6wb0l|H09?=6xkO3hT^`p8sJdX@+ZyD_uHb{qm z?euo_J`y&`9_M2LzeE&QA=4+0Z>?O;tHEs{jMURTFw#kYl5c}znV6W^-`^h|9)5Ci z5*UaF6@=*mPX5XRsz>^UGiu*|I0}GxrN(bQlGj9R_zG)N@dzTjJy7UwOQB#{=6#x$ z(>8H!#VRb%C~v05u^krj#QwYuZoRaFjh~hzPB)=G_OT9f)5B{Y6>r3mV!Fz|VkCWwlp8^s-cBE0r2X(0Z{Lao!U?bt_(b|tN1DcKrY(<|x*ovYp*gawB;4U@atN;&Y zuvq;cuofVrrmn88rRBUmSpr5#Uc=h*qN4lrZ^5+cWw0_KvFlA?B;pJ6qA@x_6l#e- zzy7r~k^qZZ|4Elf{jG`xuhgvTdxYc#-nBu!+dgm&yMu9-NAqqC8i$5b!P_2vY9@PQ z#(Y%D_bB*L4CHH;Jv7|S!pG=Pi#tp&leS5FUCv0tE#OoM%^2TvyuXis@7_JSqJ;(H zN$;)k$5nfzFYeWx{=K?unx)j)w;3;>-UZ#NRa~&i($*f)9iCFIobRC92W zd6+3p#x*?Rln}ZZe^O9$6^|O#O-=1IQ~T&T6t8BiyKUDWzdgDh1UZk?`Chcyza*(9 z>e&~2(x#o3al3J$K4Li6i(n;s@x^(~_f27W8g>tkNyhm!Jw%5qXV9RXP8dD*dnEA) z4{~)EA~f z?MLh~^BTf`2$`1UWO2%Ps&k7C8rbMX)ElCtoRs^D>03Zr4Jjo)KLI)NVqo`|Z!Ns>R|Ly4 z9_vdre^XjC<%tuP`ee0C`M#{>zYsIe5+%mCKkO7eZ0Z4zTfTQ|nI@<+e^Vw((&Qi1 z)LS-1Hv|wT!?%^r89S+W7R7V0=3HG{+ zR>P{@w9SQ~1#tK4E2;kLxfrYE--G8QneL@QKC~qSn-RRunRp%3GF*A@D@oyTS9FQ( ztd#N|2Ypzp2I`I#iSyCbh)whyjDm=4i}#+XlWFYA=g*=@0-S=Q7x0xQQFUsWaTVjk zmG!)K`J$VjmB6KE0$ zc;!KaTOs9G2Ma)VEQPu#6pExx>E)JqqUykUwgg^JH)8O=tIfW6g#U4XFqQ<+iTt-d zRbT(C>fQ=3oGsGYyDsmH+ym9E9yqvXpYrP|7^9PqtP_64Hy6YRNFIAdd z8yYUwuS2W|jtCH1`4t3N7V`mM;ZAK3-{x|1#sW9Zb7*a$8)+1t4V+}kS>K{{I zb8Cc%<_w&KVT$J6KU|Tu9Ah2U1es)skf@lxN|%9gSpUzH4Q{)A@1wVy`+ ztb0>z9J0kNIi-^^t{l~o4PY;nFEGfkub<#T`cm((h&rjrt}sM&i@6C$j}8kSab#Vn zJMNdz|Lw3_4Yi!_m?3)V=?YzLh_2dwSd$v7En7NALKD_L+TuPbc41ijpf16QrNN*u zg=ed^ySp1S+bLcGDD&oHi5=TV2_*lIs<#e{!h52JQ6wb)A%1f`p$Q@TMq zR$7n{2|-FgIu=REB?N>eq`SMjm*u^FzQ4ElPoI7C+2P)~GiT16lRY#{&X-J9uUrR@ zx(^EA3_tYhqrVU0@cVAqobLGOT)WD5fiQa+XW&V`2rVY#t)s;?R&%?+*9-uX*QvScI5)p6S9|UIjC-5@M~wJ%3R>+;O3U#n>Mz*6Fwj7f#Y~tvC0QT+Rwf zxJ#Z$H|68P4SX?0@dc@1Ivh(7<)3<;D2Ik>kv z*+_3jv3*bUrjyB2PNiLj5pRyiH%~XM>lc#9l8>!ShfTmTGcKv&QZ8@B`V_CE?>5Mx^L|d=>2ZJv}-$&I->K#wcU^l9ZaTMkAUgM zAM+ZIDc-Y0h*4@-M=*DsA7$?5&9x_=9arpeH)q9{%ypIndyl==1v+8!-u_p63$TXU%R2I`m!Z^QWj)y} zur^1)ZNM9-t%t|<6=J{jB|tUM?-QC8IkyS(oz4-e`gwKkNdP$LIrmjqRBU6jw6E@T z8u*`dX)e+he|#M-nh?@hkL}}vWQ)NKG7fcLoxOr|%_d(RjNzzqe7fOB3dLKByt5lB zYOff>aY?%~puU^TJD$_1IW)g2zpYn^&dxuSzR3t>!QK=CN*a?SHB)c zJMXF{FQC?9iaU~58kvsN7bZ>GWgcm|<8r=kyeiw#m_LfV{pma_ll=SGP>&Y5?Qa3a z>lV(WE&cmvF@8Fs>M3gb@lEcYURH;*WS-`J|54CPt5|zTd&1A}vKcJX)qI#Liv@pu zv-@SLL=Bp*(rgwVpNxz}#?@8qoXO3#H3mxI9F!_vze8lyYsoRrX2=zYe%_%>Kdt+` z`Za3nN!nMFqDlMOtFQa~-3BdDAY1ec+|l!SBnZ3euwF$$m#YqAAZ!<4ia0$&PUC52ohKU?op2fG_)MSs`te4h`h{#ev&N$@CgmiC+f za`dxv-S6_$nRh+KF_5!b5Ycnv*i~@Yge{+H`_t#wTF~s8OZs7TU6}xsT>?9EK&l5? zw8bh(NSh~DE0m9khodHj)!6~()y^(Z96!uGgrfz z`?!tYvY6QkNa~KcTAo5`V z=n z8{&7h8T_@q@GuVQV|3gt73r)$sYMwV3Rhu}T>7cp(-hg5~#|bt%&!t497VRBULhfaBpzzpZ=67jZm!U#=XR0w3|> zKVQV2MIN;GFMgwV`F-(P=_vf~Z$0qfOQfuDX+JbmRhX;!9x6D5^Ss3YXA|*54ui1? z!>jIUU{;){;RTx`0`ILizKY-39+_XLjb*5um80ph{pRz>Cb?Bb6%hm3*PVl*Gp&TW zb4kuTB0n6JZpo;axtIEz)*mEHMf^q%i4(~Ci)2vc{e8Pc_5P9TQ2gq*l?Unz)c|C>*+)g_)r$7(Y4EsS|{6bB{UfAw4Ro{)S?dNcnm8zOPh25Y~3`7JpLhj(dz zd=`bMoLu0D!BBEF@a)(VNu+c%EFQ|9xMw~}-9qWTgTm>?%on8NHwqJEQ_1R^(Vf#S zlq2ar8883nhf70onPDyPz5c=A6K6aXBo@+l$%_W!_e8AaY~nt#F^;@12vg0bLN#;5 z6Rd^%bvW|=)~W;ah@&uuR>$vpnY|0&hkI=Mt|c!yPbmWhg^rYeDPzT9N>I#V#=_SI z4C8|bAJulOJdC@)8!GcNZw@yGkH+MZqU9yslCzT8S3@=wrv=L^#*;-Yxg-^sSUfEz zT=z1gLq562x~&ZWOiL`ZIo1m8l${(laj!W(%t)4eIEX2!nQStJ4k&;R9y#k!SFwk7 zXv{xUL}8!5esaK{{Z2I?`yDOP!*LjE!Lna4rS2;G{mh5{g)_2}zd2Ts9$%M+B0_E$ zkz>L52gA!t?-twUJ`1E-4sdEui<_PtYI;5Vrk-X!D%~MDm>3HA-kb_g=;D8prs};G zSTMC7c8ZTKaQCE%q?M*ff$Ga?{@VKiTgk!u^>R&n1JX98hv>%aGZs9|BO-2Gj|LuP z!a?B+GR#He@$d`C+h)tdk}h9-`c)idjKI9gLpHYdFZj<&gD#~mrJb~LVai~{SD$Z- zIQgjcZnPN8RC6*MMs2Z(lC4T#?=zt@p()y}Lu;xUYSIc%J^{5UfJ4ZMXF*X&pI-uC zZ9f7y)g0~-Jp=;%Eb+fr#N40;F*bT9AR9sR5 zDbvS*E>re$Ad3_GX8dZl-fDfyqyFS{CSrIqKRsN-EZ^;f|DGn+E@+0&bGbfLg*Xrc zAa|qZ4+y)H*dSd8uV3k#>K)xItr3USjc*KZy{CmDU5$+9E<=7Ze>5Q-JBL$fT`Q>B zT4&w#Ooog;I4bEPc$oruKpoADDeytN}KS^E=0`1 zwr*aO@ltB>-6j?8Y|$Db^vw^|*?R?}%v)LvoA{AR91d1v+BIZ4wQCbzUpt2GKfbGF zKUdF6xf9N;8<*-MQyeD$d^mkQO4v2sn)A?7gzQa-wky<_3SD8EN2ySiq^hCnk+st?Xb~fsl}tpQ=5L;-{%hWs~ljHOW|d@34XolGmU3#d;S|&f6E{4 zU`}_QQCr{FCqy>h94D85qBJ=7?;B{a8QxJ3%p;${P=rBFtB>t*@hO<2*L;1kbTxEk zSDm}rcdtOB4D`D>IXTN=u!)_c8+RZ>MNw8BH9S5#@JMmh^U?TQGWI+`Z}>`-47R@q zsIOp8Z*eOM9|fjjF9ogT{5SoP2ks&Y3b>+PnZDaapzrqd@>-$njk%g}OiG@>;7Y;Z z-|u1N_PI<#2d0Q%N>v{)$wLf4O813l*u<2SX{o6`D_t>Qasj-KlW?tXb3v1!z`tAt zKMw&T4{Q!G>bc!9eq(T3wjRmYNvV<{8kcCENryHWImkQnY#n>0Dt_%kUR-_2z%A3t zt8q74{^N_jY%-H_9@+dddJd^W@sNY%i{d8<$f1$>Eko+70!z;tx@i}4VU znJ-y5nMv=P2#(Pj8veQw4J(w`EdCcsIRZ57hYxqQw#cmq@^F?RKc2J=i;an~i`vG@ zA=oa*`qKoN0jq_)O)&r@5Cj+8f3Ywq4SvZHQAh1RG() zcfQfd_uziUZ}|a6{YIOmmWFb1u9o_M)^-{R8zRvs_4V~G+JV4a8=$$pFmLIexUW=E zJ?vk5)dR!YFcjDLqW&hEOf{I=dc5_btqYp}6nzufqF-X-o}RAp$EAfOdkN5la5LF~ zH;GCC_%Q)Gk$}xEnju@u{v%B^>#NW0l`kI?B1Ag7o8nwQI zfx*lJppmMr5Yu*`wg-S=Jq5fbYJK0$Z)Da!-+*Z<*N@lt<)lNgm08#L8M!{)_HWNX z2lBhjrcj=azk7de=**!s12wl_55|CqUh=J7j{O00i29NFtrWdsdEA9V@Ao%VV<_Sy z-%Atpmhu$?V4Dve1@RdI)QV>iz&VcWTt)zaI(Xo1-dE$}lat2xTN)5DmE6vDSYYj` zi;`9SZ{Xp=@VH*lfhgG@+e|o?o(h4XSaLF+$ge2}5S3@x^a(v$tfbXfz#{z~+Wvg= zC+EV*6^Q;tXQPUB;F-SnT6#Yz#czWQE--HWY0+&pke>SWtKa~MuG0nt>|evCN&1oA z0axHH>NlGIw&oUmsZD4=@Px!zm0_EZnEtg5agXU}L4tEx%WaeME|;QyRk{;g!pqjQ zozikon9$S-9E^5m*apNlo+)Xz5B56*slX!&j`c^w>@aMsG&##r+vlSi`^}VAcWh%W zq5ORqp8(gA`5%PQv9x_NTBJEQH@9M#V!8$)Un8DEgMZt6y^o2P$AP1q{_g@<_m=8a z`3D3n)w=@?@ytw`*^L44Am*zabsh9LWagUVPV#45CDl#PR)6eR0&b|FgwV7eRuzlS8$K77kwbhyW4y?=}N{dk%?-l-XrXTUY6Y)9!KJZ64E_oJe>Di{y z%Xiz1|LprYuiA~X+6}E5{LyFtf!zi{bpuRtkE(T`;hpqnb);R&!zZ4B+7r*c9Rn=w z}!jl8;7?i6_8`}+Mb%u7Qb(JBSGwaCoT38GMT! zQe??*IX~NDlOWl=d5V5(WQ2)7o}!~|T`(8Vj~7k^q2L2?AgWB#U^^hHmQCK>Tg|?= zcsmR_8bQJQet}eXvph|w>n;@EPZXA_Y67?+18dD-luo9Z90Eq^Kv3F|P;yywZN}Nv5l?>g**o zc?+}ZOK}CN0YD>1U}+7aLR=r`*5;P-C*Ti;V(wTry29$p8{L3euxR7!jQ{L7<=T|vO2IhkY?8Z$( ze0+&21uK~UpnHul&QtGOi3pMZ4wI~)#0PthtU;4HCnIm~OF7Cm6X5d~=?uhEv~eUm zO;8#y-PeT-))aXWRs(&g1Lk8|Xv?uPm){*zf^?qn z<%`^u78f*6945BZ5THmkh}{vqBd4n z%@ien{CMT_8P+pA*_V8dI0;6detXD>aGLz}K}FH|jwKD-)$sW*c`iMN=KX!dvnFH= z{rtQKkagn3o5xp$pco?SX+gpVrarShKFSna`v z8(&xR(vzckxc-c>P7+dkct|LGLk5>b;RZQ7-#E$(L_p56^-r9?O1v+y3rH%~+Tr7hQj} z`P&?Kb!mHO*u^;{vUc2gB6R=Aq>_z*K7}kV&BNh-ky%A9y&7*%o`So zqk6?$GvPoq$;oN|Wrt>gN{vCBP>%`6q;}J0cg|6opS=3N?Sn<&ra?mk6bj#rB<3Qu zeO+%fGszFidTW1IYm22qjN&~OmQUBue-@sy#lO9F00z+K{QN2KU?_i4F7~8!zA#3K zpW=PA;&y4uLDu>0R=!mjh{(tv`?s^6UYWXMxCfeYmGV(K8Ip8e~4MS@*$1g_bHT>iOT zcg0Y0@CUv*iDtNfG?OIfT(C=z(N$qPzHKuneIiS)Dp!E)ltSV5u-&8-qIyla(a9`ZC!?eB+(;}xXRN~P9&B6QD9Ad&QKnj2qd@WtSR(^HA&{zn+6>X-Rhz&P5 z=LP<;p59d9UtOCWCN z8Iuy07S(s+W~lVnVLGCq?@L+B{%Y8KOV z*++xZ%B7DTb{fJ~N_1JWE$1nGnXeJqB~V*J``fM zQ#J%jo=BK1oIA$;{y0Zp`o4E@O}p;RA|h8B6j^$=!}9}gh6Qd9%s<9zMSE<=>5H|awpqnW`=l2ctA#sB?w-8EOo(E=BUo>{t} zi$Fi;_emvG3Y6xJPrflbOOv%Zf{4PFZpW?+@E2!DwBU1|4yTZ(;cZ8`y6l`UUI3Xs zpmpYS(Qe0Z0&zR5V9^aBb(@%0`!g4WiULZzR=EDW>X?gfQwveWlwY2MjZ`M(Z(24d z?=!{0EtTz_2=OU8s;7^rUdMxKYiP8uxn21O%F1FOO{bfD++}2BfM@EQb65g$Ea~_9 z!#WD8`P~$$kyDV)mcnj9&FbUhlj~YWP`cn0Q_*qw@y)e}y&LsR=^m(6*K^~pGm*+97Q;C>?4SvLhjJ(H*Xdi zJP;in7C=lL?AO8y3oBqO%vUAsv6uC0Q%U%-@`-NY@Zhf*s^V9x4|###F%k%{0rQo6 zf&{Mj$SJB(i>9q?Ct(lCfU%>Y|8fLMxRX0tiRmFWwr+)K zklKsto46r)RIh({uEY1o|7AVRp`~wYKVc7Es~Whi9U-nFIJ9Spuz!1-`QNaa&_zAm zJB6Um&8?cWe!5pwZ@)iw6oD5+iQiyWY#P5( z!&#nYkqZwFi3dEMn{eKMr{g9+tz{`i-W3xFQw~d!jQ?fP6?o$2^&Kuf+5h_NU%COL z?Ptn!D?5bxY9(Wb(hs<(0hqJD4r`g#;Jb}L9yJD|%YQMbb&yvKfxk)y80X8EFNa$6 zLP4@J7tSA#@d*0~#C0yiy}iBJ1yx<>)Vf|=pHe2F`{q-S;`6vUr=KI3K%Qa22WRI3vP)QDZ3nO zOp8S8K+mTAJ)V^*ck|V_DLsw?qeVuNlrFpJayed=Z`?@I zt>`o%dccy*+DMW-ZTDp9kVTh)bybBPx`wHw1znR&Uxj^}c^|D3}Q9A>h<2J!|C zfH6hRYt@$_;sqRforIu|`jl_I9b*l}jCblr_->aXXfZJ`YQB;8(^sh+Lxg(zrZpEq z(9WVSA$ly&mOOPPt1$l;BL$2pJwUkKE1U1Wrv~@dtQq?s6m*7aqE+o zCE_Or=jHsMU&^CCdjsJMEp@zl^9&^;v&kwTt-~K$Rz7`hIn&Qwi%RM=Ig@YO z*3o^SQvB{$j>RNN>0x8c|NA5{oj@)c8X68-Zk(nnEf@Sxl#PuuK}lW;=iyO`Ff^K( z)nT@QkyQ)6pO2ypUG93~nyWTENpEW|Gs~Ln)ySSC$K{ZKD@(oWm{yG;*H~R+G(OGg zOp18z@JE)|hccQVOwZWN3M!l7@)=I-vDqfbk|tBX;zbZ&B8jroO<#vmv<6p)ih5l@ zfW2Dsvfs03&khB^-lCHj2$096T|ep}ff`nMa89Auybtrsm#%zCGaN$pw^EU2mDXKY z3o}>s7J?ic9BXS1!(>Ri2PPB9s}po|bP3>{1+c0AH9+_1$kDvh9!Q22Y}gEF<}vE* za`mjfl^gkp@n2%D>M2n@kM{o9>ip!j} z9Rn!mb)2Cv-)=1JnfapWbAjmXJxw3+?|b7f6Y@~n3nZnPdZA3;>>2|a-ZRl9Qp;qG z)u-W`I@!^5TPl*oh&aHY7-%W{_Bvp{6TqD|nXZ>-SZl=+?81Pz<#lIk{FinEV{U=G z@s1BJ5{wd(!0wxLeZ|`Ifrx@yME)~f(F7zM>3?2+vyRnv86q6$JpWk0ElU{1&4t}J zf2LZe|bn7y3|_-*ixZc5p1cstnrR$fp;Z zjeFD(futNJ{qx_#JTnmZ1BTy##|uWSAuH5ho;%MqBxPmMl9AN`<|-(Y8!-}3woUe$ zbxBj%-+NcdjEs+a{v+sOb#PB!uv6j$AD*04!KCb=W0@IqnOTE!#+j9UM%%4){}rmr zKK9vOtBCo3Mb^saYU!b@uRpTjbF15r$zL|#CcXavqW$I3Lre1bXyXo>vFHI}3V~C7 z0q*A7WCkuJQ*N0!IK>ML#B0qx9I~tV4_f%V1HCKqnI`d?#)8FpE&Ken;XhHuGB33- zVR=^5|Fcr9T!QSMdkW3}JlG09gHVWht~nWBmhB$S2+RELq|{4~!rVc(`0|O9(2Hbt zN#8B|OudsdX35LV)x7#KwA%N0uf~Vj!v4+FfY?XLV6lw^VSBb?NXT;2^`7If88Me* z_te?Uv%>~gFv15b1C8#XAjNXG7j`qZ<1Ri82g=N|UJC(1K|v491}j+}JKRboOnqZw zWNhM=;dh0W5_J8%K^+>tXd8EIkOvh zxg{K~0=2$#W&_Y<>#JQBaWaFs=G)1!UjIz=FRd90aqwZ?n-Zt6yowj#{rGA8@o%Aa zRdz^rP}>u?ZhX1sW{Rv#(Fll?;$=8@j2?{0-a1m%j1eX)R>Sgdq*{<2;z8FY)-UWg`*WQi;SN8m3V!V~COhq`%>H?IXYT!J?q4fOPsYw_z@tG@-9T)b)82;ea}+QAdD^ONBA+wLvh=is`r3>LQCH^KBogIZ<;j}?4w z9McaCAkisksyv6>YW$1cN3$N5BxFCs%33+<{2O$=v82+B898{IsUkGRYoVzNyRKHq z`^Vr0O5FF*TJH^jbGY5oSxy zxNmM{7+V8xAKPwRuN3AcMzi@8Q`4vydB4%WKs~pLxj$b5)E)o_043I(M5c(>z`hor z^_X*3>anqDtauWQRJyMahX)yr@%RZ#D zBrx?2Lw6g=b2ez+57Oa#Bs!|kE;vD;!p8Ps4r;ngy*kjb+5DR=1&>CD>Y8XK?x$vk zJ|9lTqe|O+7pq%$dyL7)`t5ddfm8q*9X-8tw%Vj%(T_CHBEIeQX3yu05LAj3c<`fE z_NL;^^`ozCMQl~#dRYhCBkvhXZ%MO>LgB=oDLWxhr3UlBBY#&u~G zSnX80Q+Ls3W5ve-+Nvb29y4aVW*+47P)G3pYE;>ntxTdp&cs-)yd+0;sb2CGa$h(vfc zHsULR9ij2X;H*b}`hIg1P3($`*79fTEYRZ_*`e`Ho?#8GY8zk+_1z90ODUrynt4Y) z4VkzSf?M(O2;VeNUph0RJ~6;0^Pf9)An+J?Oia8uDIp+mezlQR*NDml?OyE&DP?TT z%2f!TGLR_gm?w8~^WUI%8IvYvxe3SSnNjFOv+&)dhvDd4k_`a~y>yk)39(FCK9B-dDH)B@K z68c=sm^YQ^BaYI$FN+upL0C>)S5}#gW*ZV>-A|{#JBl`If1|P2LfFbiG=l=XpT2s| zBm>?_(0!~h^vCN3_V81e!uPEtr2rr?G0D^(`$5w}>i4hfl`X|O(Wnc}KEra%(fJ1MqM|(^#e-5Z6kKBKcB=4?SM)p!vZyr5Oj1izCB-FUKaB^ zcbKjQiv|H2MWg$katE*%-{Sw^o2N<*Q@hDDj{apD^ZMf_&`!PBC4PtPV(=o$_iPLT zHoaOb5y>G~gurp2@izM3YbV+x;ZkR3DZHDH&x}C?C5HI z>-ok*;J;$R!WL4~v6`%OzF&w9v*l#4RKfrodU`7^vVzk0_uK1tGD)2o~E z3a+UdO-;}!86@3qSdvrsW+w-^3r4ekYTDlX8q8S5i(&s=dY>t(ddP%vy*3!8fs6P{ zRc`i{>j``@O}H%UmA8e@_;E;{O29U_LWvaj`;_K9d;vxp&FJ#uY-OvG1%;l1WKPaw zCY}9+tDmjL$Is7yA@hO+C^h)``kr4viqNzkVAdKovo`tr{1_spF(&st@0vC8C>W>< zC2Uf)_ZBisW2d*Q%-I?lNne32iZFPprCtx+utjq_iRzqh_of%wyEU#f*Z7Q#uj@Id zRQwRmuQOkg+(gCO$~gRe&1&IdDvw^I_s^w&*6fp?IGOcO&`l z#e387nk4+{bxSP>*E932v4T%&JVpV!4~GrC!;m82a+GT1Ebq> zi~g>5o>azHvxQoZA9|D1^7u2qpI>~5YCr!!YgO>$Oa~m%RMUlm%p5Ew?4g$Gx-93I zR9RMdQ}_L~42&ERJtc@B5C8zpA$C8jn zZ_w9z_2i)Q?uXEz2@#1!wY~iBA-YG{rV&KAVL&R5jMH#)zQyOn3WQ-E*)}n;&MeZ7 zWcXJnQK_UA+xCnx>vT0qq%`4v%v>iDo*FBNl%&IyjZo(*`%{}Ka*onP6y%E6B=V6c43^~&#EJnIbgt-g0@6TG4T?=FMI^|N1m?7pRtI$L}D8?X<1 z1ULZ@a&y zdn7}Y#_By^j61H_lA3LS>U21Ls_mAW(^2@DB8exLc)oXv!{Pm!VNp`^ziu&Fr$1a} zgj8P+W_J2Y0FV3B!PHmas+bMq(-|aEV9mti1zvolGVYo8w~#GXJfY@w7Z|H9TrWk3 zt=e6iYX)STC;^^{kTu9a*@0JS)A%=Y!t_ z{%EkP`dPknXUv5rAAL+fYKOeNNQ87X+IKeu-h6oe{P|?Fcy1L^JLW$7TM=?S{_Fhz zVFr>foONk#tt9)ZQO9;Zry_oj(YX~i{uiTXnndn(Pjrh-+m>b;?cErUkNA#a$`%4e zC5fQ~WaH+_W4iAAOdsm_Q(B2@9I);2gDLd$HdWekemLsdi_K4e_(ai|gX3KFnwN6# z{!?88-ZFLl0@IqVu;YO63kVU8^5RaSKR_=9jxUG1MTZ+%O)LXx+i63XGXSi{&fD5j z#~AJ9%w#m#A3L%(r(LmFD3Sa7rDZG=cc?yoM6xjacF$&o@GcDxbwGWH&^jzhU$}F= zqppNr0hc0RhE$mp&~bvPe=&8zo2SsHymV<~rc3P5BHq`B{=KL8c7dVk#%O*t$>B*`38Lz% z#v)#XPyIHj!iaD^-w8){hcGspBIx=6G0CdyjP;IVUfZD+7(>GMxJmL#%Eu?hVt77w zh1-+yGARpx4QNDjE~NFYyY^*p(tK4y)Uh~_@n&q?{QfgRAkgU(W@PNF{BZv{ zJNqus2sy7=e+11NkI(Y|`VcPJvYTd$gMi+f$N958fBeOH{f<+9a3$s!Hsvt{`$4<> zAK;BD@GTG*=G!lE;*-^v?&r~)RPy(+5|e7UX1O>a zrHzAwsQ=|5@E=#U$};s5AvlFp$6q~5yz4qPX3=$6D{%}Xu!W}o>+3kBSd;FfwYRq~ ze$sF9ez_ar!VvopO91$#Jyf=2EF)Wk{EZN!z)RR(Y9InluN(AYjv{RZ(F_CFa{mnk z3b8!-92ql&Do`g}i!@TrPmZK3OZVSj_Rw5W?an^xWy_ADPX;0Ik zrL8T?ZbVIuL(wn*vL^qHh*_^TbC<796rZraxIUlBClV+e|8n9*()^fvlm0#-m-2=d zVoylszxw9nQST0M|exw{=i<~K47CxBuNmGu z?`#fJSF!_^XCo_Q{5%6Tn$-*unlob?V;mlGQ7&gNFDla?Z$0dr5h5uZL6JMnp7|zl z^#^{r2vw`e573EMMSsTN#@*jXzhH>ste?9JG;Y`dmVN6?qt`)$|81L-4%K4Qls3jr z8L1u{q1*lu1~%vio+j8Dy|_C)!|WCiVF$LGpvRh%80HfL!qvZi{Q{-re_^U*_e68n zL@UI_erl^Jf8{vnOPC&f)^%Ju_U6}l#u}hy49&)vT=>bci}N9;u6OZz($V0~yC68Ff&sb7d=L9E57>Ne&5^o!Y}``fROi z4}Vz8=@d1>QwO@_Q3`YdqI*e4Z7CDZ-P{gf$Ooo)JM+>b|Aem+Su}U;|4y6arSYpb zOqpwAV8&LnL|M%nB;4%xwy@}e{#R8mzO$&ZN`vZu0jw^0kj$!!$X&R4Igif3tS?LS zpq=2kb~>A;)b=vm+DG)u)_MHik>G`ds&}}pB8ukdnN4rQ*0#xknxP_T>yobc#My`- zuJlBAAci68Q`O$r8?Q+m>e=+nbkG>D}>3Ihh5;UV zMRbG$bs_pi5xw1ucfY&$_hIZigzH~pz1wUeG@qW!%qq2- z>|Za;g+_u;7I67ohEJ6EM*jWxjUUzSv^I^FneA7i=yqVDSt>@y-2MxOsKzwzwlnDV zy5RT4zM#k@n9~n|5Uwv(bK;gC>0TA!@#2ZRm;js#$Bpzi5jSkuaFwfzye)v7te?DT z8lU+sLmw~HVG>WWQd8hP7{&@N6g@~iU?dq3(ERot{Me%uuCenL-puH1pxyTENy=@t z7ZZE{H5MBG--IMzd2E&JHr(VCY8XI|9olGm1PK#QxI$ztXS=A8+{B_oJ$PlXTRcA@ z**?MDuACj|F_7*mCZau#w@FHoA~VPn6AMdGc6QYvQ3tnXzS7XvuAy@~ISQA@>&;P4hODP`Q?y95T&^Tt;SLs( ze{Fr;*W25MFE&fQ?C&GrKFgYEz`XxJN>1*%jwdv3BIRUNt6N~&{FB~30Gp6jmWB=- z<=;Y`lAHT(^vlPCgin9^SUKu=D>m!j4^AK}VPL)?al55TN=gb;cuf3{Ix8&^>D8$3 z;~$J7BTN!U8X4Gm$QgXcW$lRNRlD;uYNqdXb*7Qe#O9S>v0M%J;~|nC53$5>i0L^} zWGo$Lq*qP&Qg?QpMf19nKNUxf8x4c3LP&#$jg7tAy**X}nk_T0Af7tQ?pW%%W|fk$ zfs~gWEuLWJXv1)_)PO8nXVrB$PJ&>QHaYxW;G zL6nUAch4+vM8+`l^kKuB+6oz>m;1?#-TB^`{uA~eya$PCx)-L2f0i0e<#eCDGK@&@ z7G-vm+B}&PdEd$Bema}=_*l!)k6fNeC^DWzkE>kw(RtHY=7>(ljoVe~V6&=9Rcx3U z*WB7`ZakUc=axT6reiaP0ud@rb2S||=v~7r&Y_*o%rDxp;pwT5YX`$;TFq-dBH%CWD52SRNh^O2B zq7;h%HmwF6ZecXepNI&JZJdyokF? zftP$RnFs(zikT>*NrU;DGQuF$qurdj#VQVpxnEjh&*h0j&}iMdcxmc20yz3D$)G#h z*w5a?(bUXtWzO0$5L`e$ht7_Z-STj-nfg9Rnw*RMH&prP8l}K|AtrKWK0T!4lPjrj z9qViMruor)@8pa?m|AvHhg$pJo|z;Lj!L;-Rl?u&NtJU3Y{G}e$?yN7ENQ~C44;&eSi3~~Wg1)wJI~#Wu<$VOni+p^Cno>>S*LHP%q#a)PT=X~=%HkiRC)WV zod5}XD9}_-bb;pYbbR}c z)xy!y(Z!`AVV$ry@f#$7AR|UulhP$sj!>p}oVU3yQX0lF&Sp4T12=be0DpQ8@EWpSd29n6 zbmg~i0mH-rki|bvyN1JupBBo_JOtRh@Aw4D604CYJc9ZDXY*J*wD;QOrNZHobPjLw z5^mCc*m!oTr@w31SY~8fXeSAiD3nQO?_H_qL5io;+HTEkCe;k2KiT?*jXj~xA6Z$a zI}JB(^JR_RB`7s8POY;L3hSVoqK)wpW$wDO5D&j)DGc&H1Rv+2@H<%?TRL^vg*HHPjd#&fCj(R zVRi2HduF#|pXRX`4$k!#Tqe2dLSF6$smo(5j&S@jnUW59d-ug;y?f`_(BnQZkeCKu zPH|SAfYIr^ApXk|)G+{OXRzxA&jN84+x5>gSP zucO*waatv8j1;p8hN$F$ls1{)YFjU63>8&j?`)3iRL3jJaw~E~1)EhraP-tO8p^9` z7%4ABl6IV;NNTz0Fg4(8o*3Ynu@3o{APg_r5Z56-PE~+m4YhyFGCOOcH%>dd?6gA& zhW~%T$z*+%P2``NuCaLiaQ#E8^LH>M7`EYKWm}A!nwokVJ~ffgfnr@&sqGM0^@Tcz%vukdIcuE zXDKD~$HfT4vsDw1ZzY^QmX_ss=qV-Q$Gsmeei)H|RMED43Himi5w)w-SZPy|SzW?u zU?~8}DAJibR>-lzvJVmtN(~>fEN9P*($*djfQ+N;3=$`PiunD14~LN==?8M4FBVDe zv=94%i|3zFx%U)IH|e{<14fKN6aTkxtkL=Q5NKfBYYv+Gl>~2~$ikX8jzcEJJjG^^ zjpM@^Fe?R`CQM9SZYKZ1p)(T$6)4t%AH+=+m`ZvNjg33HM%ds+(7uMS{x=M55<2h2 zr>UJwecl^$Uz&<}`|#had@51~++Y?fL4sQh;n zMdpjuY+-I6(%CGb?s?>Y4bK!Cc@}-6`BL1Q-yJ@o$?NbqWHGhJ3=SxCr^(R^OJ(lg zamAf5-Icp!a8R}|rR;ti{X_nw`n8zU<0slldNg+mk6N*nB6gNMe}$QS@+5W<{DqP0 zqF8huxZWFo+?vWNbE-v0eT&`SpR`xDTLJ8(aJ(R+`~v+fuoo1}ch#bkQ<2loSmVLMPkFM~9T z{^Q>5;qAb1efTf>uUvPIcCyur+K5=*ls}hcBuy=CP?qMrJ4||hsRn;r+XB5*;E^B6 zFV8Jbn-0W1@Ebi!Ih_!@@WC*uJW&QT7$;0+&0`fPI0@79>vo}!F|l|dPkdz6UOUWR zQNKhGM>z+2KIkL3sWKdKEjiqlnUPYMs`=YE1Fa`5Z9diJ;o9E|XuX@oqR;#AL*7`k zt?4tA_T!uu$8v_s{Kcw@OWC5syYn6lX4LhN>Y~H8RC>GpYoshQN|^a_iq;~a_BBUT zk4T5rJC>QcZf|2He6ckD%N@1P+T?>3HP-#dy*TT=*Bul=Ptj-ROs*u_&Tc6uHtv;Q z1Q=#vEyaluUWxUdp%@zHsPaDDo7nLRAiVI4-Z>$Ax}KlOeukDl^`Xl2t@bh@;T7Ag z4_|@U|L=8Q(t>I?;JK`)aEYMeE_^=joSCH8@8-%-4V(oe^2W_Y?3_gqi5`4_sKC1w z$bL>pdNWdms0g(oNu?-CzKwGB+5W@`Hv^--+q4BFCYqYA?%R=E{mhO4WRd}V%Sm3# zTvIGue8_2?Eog#fC5!UPubtTI+f*_lNpzX4oVy5neNp&C?n}8O%8}Y-_ckO-NVQw{663!$5bl0Fw*N9}`aDxR z^YofVZKPNHedB7cz0?PuFAu^-ZIRY+KuBN?3LJ?&)3E2CMpoxLW73cgZ965 zm&Z|2)b3*H%?phJrx6VaA|)3$hY<0eGrv*MM}F1ji0J8xn3`-#(@`p8hL!cYE~-i$ zT|?MHa#=uz*!iVZ`Nb`gG|p>vHpj(q!jJ&V6`k;xsN~f4SNqt~b(pUcAFe&frRm?< zD79A$cfQ8btiq^h_77lo7u!1F$`!e*y-KsH@SK+v60=Yd{9iuY7=Fr z+9HaHYae`7vg%Kyn>bLG+<5&u9E*2lXQ$Eo$lTf4IsX4*=_;e5>e@C)w}5mSyu@;_v?z8W@LP;Rt<6oa0t*&+eXo#5oojgPma7 zhA2Lo4A*XGoTIQyp{6Z#ZdACqVT>MtcOMn~5MgN!yn|_1qm z@%IOd%x`ORNIPiSK0pE7eKkVKd4MYG`C6M*oKj^0^Yw zE{}~R1)nj_L2QX;^5Ujpv zDi_}k0JhY8Pv7oZhG|Iq37zFpjuTpzV}snS27_c<5%__kKSV<9sOWw9E3dGv^2F`x z;;3a;@gw&0ncwPXY0%iJ&U(bM=5wBa6=m^{uqFGM%7<13H~3kx9qX@3-tgS!5Y7kG z6KF`*iA1(ivpNHq?@(drVpA-`>Bq-rVa9y>wS%vytwWYP`M75US(&Cpd)fr4P}ZcE zkBE=KsJL0#lzWSYrN#|fvLFK|eEOY%@YHYkYQAW3knmu%eGf4_HaNnOPZG9+X47+!1s);iH z&@t&}JOa7&uJL5EOtXTeD^hj{?`hauv2pu6ayQ|Si*tV(U_6oqw!cp_XP<&_qi3{E z*tWU=m%&V)!b<^`vKa)Gngly9ucoRh-Of8X0Nc~6U`i@j)`k0`%3e0N&=iug-VC1z z-UejS_I7vAeWYxA+Y}atA%0b?LvET^|CZ?il(wsmc;jV?NN&~0E*EORCBM9BI6;gM z2oBXrLBVFv7hC~ z;$zHBXNbtW_s6K?#qK{IR^mjl*o#zNgDXc4sx}~%kouplnr#CbZ2P62Xqsl$xZek5 zoLo`zWQ7$3wuYjZ_@81x%zdfse>-W- zULKuIxAdF^hAfl#^80SK;KI^jojmwiKcymc9~0SlCh}kaC{9)WpJD_7n~(YsHwm-v z#ZbYTFQF_SrjcGbD#hKvyiWL?vGLIM*(yWsC`x3R5-Nm!I^de1G{6g~LY6LlL6z8% zKl@=??mFwM3xUX34Lm`61rQpQUWj`hru!W(bzfW;JKOzAD;$qfNgr49Ytj2Fh zH>;+ERE>I{1qO8fZq({SDcxOXQJP(A}yPzZAoZe;UlX)d^^;+W%f6 zRejrse`?I~XyM*h5aH$_ShpcBi1PduYmQEuZ>h)MT&;yT8!2qU?y}g85J63x5EF25 zId2H`b8vWXD;b!?n$u$uj$*HG7p!UvZ>v2Sr?;K*Rb|(&7n6S(>JG9^;9m_l zot);}j5miXg!T$LD6jfFz4c2Q17VSd3<;nz&Grl`9e0%v`I&i#vz_I1|GqCjl3Tn6 z_l%?4NYib-0J#Y#k+f52xie&Ohf78gxfP(NmHa(`saOZxm_Y_5vdej_gRx5(7*}xa zKf|l{0=E;8pD+myC~Y%a9b)m#f9uSaUv+xaiuE$ZrS#j1GxEnKm2zlP$#kAaO?F9F#POtj;J`elGU*84%w5wI>f+^4DsIG9R( zI7dzsyM!05l->GOz+^wQfC69Mn$?Jrn~Q6x&BOi}JZW|jWw8#UR%{UfmV4?I8xVP$ ztjYDcr)-250^lxn>Kb7%H6F%u+t~5sb-&XCM|75$R4_euVc*_e`W-L(1=-ZM9i z)VL~rZ>-B8bj^|b{ae*2xVhyDZc0J;6GAUMpjs{!zsG`AX6v%fcuKweXP8YnoeBx- z+?$v$;r-K)O78O%`LgG&?E>bAwsvvwrh04>cMRjU771Mjq;b*m0^Ix_oUSJN<&L7W zD7+WqA_e7X@d)ROMVQ-(R?BYw5lhz5sk{~tea|23Wi%HN%PV_*3DY`Gefv9Dt}Hd{ z&h|BLf153j-km6`ogJZ!AwNc+YOLD+OU}a2>xH!;l1dR@-@3>9U1Er!Eb1F4wEfjd~)#o(@wsZ$<+(Fo@rf&Erb9edn^(*_$E28=$O0x44a|HAa+Q9 zhR@Kk@<%NqL`w8bcKwG?h1(RpzTO>2dxEQ0NpzC6AY@MdL%gmmLG3UFwyngx+)$Ao z>$hJ-Cch1Ei!XV8x-jG;kiCU=2lDa#%wx|aF&lh*jar=L z9e)_Yu6}|}wx?cC?LDP1YAcqi2QF{N#03%2{S;@CsX$$sl#%l9AC)xF_Q?xy5}DVOJigHv-lg~u2;T{OH6^$b4Nez##paJD|HeG^x?{Xznuv?O>h&joF5j@A{xU-w!cA@g(FH3@J|7Eq3r#wBygARS9>i(8r{Vs zY;}d`-L9G4)Ty)J6W_}1R9p2f;}j22*8`{YUbvDpGuCeV9A1!d{n1a}nv;nl5~s7P z=0;kWl6+zC&Tb;Bz2)ZopajNva)VHA0TpAB0*$vr4 zGPGv)eVvMBEyJR=+PV!R;jpMZBwL-^jmFn`mxQllphnaC!im5Gnf$OOFyPe08jEQY0$Y z$xUuTZf{GhD@}6?jr}My!ex=5nJ_QVOk+ufb_YR0%-;m3J4|WI1c0Brm92T8*|u-x z#`@TF$$IwyMym;A_ucq@^^s;4rb_KM5Z|7*HARX_l{KDQuRd-3fc;FKs03<*+A7hzr{J^QLj};Wy z&BF;fS&dbFp!9C@$ATTH?B9k9pK*|3JLK8+_OTkIY*G-$7~}E^>6R@BQNeY0CP86iu_L1&=;EQdLo%{1r4XAc!8ig0x+@h{a;(;MTvZ>Z;6?D`? zpx_M0kE!^^C9CWfAsZ&6m!YB4`=uP_# zph9}8kDD6dT6TC9FV=zZw5@qk_%&-<_q zmHj#=8K8#)dl4cuFTnH)kWL(&NfQvRfyZ(RY5MNNebTtwfHj-ZJKnL@jil=zs?$tC zFIZUtQ+YhhN6kh6mC#*4SWX~7X>5+C`gRjQabD((LpIX|9yi4#Htj<4T1SF9cpN5e z%V)Bk&+r3--1XBFSlCnfqrW92EsidhFWukPqs9XpNDalnR~$IE*xVHwP7i30NBCGL7={#&}t+h^?Zv zC~j17!`bEGrKpj{@DU#fidbIs_DR2frJHH@qO$34ZJxrwr4ZG}y%X@X1ai`IWPMCe z*N??MPxzne6r@M73N>(a!sitMjQ1bNOCs*7|D>u>X4=y?ft1h$zu|7vHEUqSFpLRI z@&;66BLts@OZJ`7u;1?vk$kn=3Y!mRs34t!Bve71W-vRww?GH6o6AQ~X{E5F9r5d|r1| zQc0gGwO0x4?H%`kKQ!Xf`ggi&f4niwsW*cCYz zpWWxq4?qBSgCwd11{uKx|k&c7YwKokJ z>LkZ^yjRibaRYDlufIjDRE~8%agej^fa~J{WmL3Fm7!xu7rM#y%_X(g@+ZVgqdY&- zUvnriIdTRX(&Ol+T=e6%7rdmzn=9-v*ZJ)l*<4$$b(mK&0z5`phniG-+w3F^oQF4! zq>~v(!7#%6F)p;F~Hpj_EfVjfmB*GkxutDrpO-!uF;@f&^NT& zBY*E#QBhsKBxGr*3TdY9!#||v_<6En=w;s%iRGLH)C4MR=C=;ROITy+bS+tCpb}A0L^kV_8iv(l|6lQWw-p5yP^jp=_yo*Fyh(4(isJR zJp_6TU?g7WROIAzoaXA4ECRAVv(+{SAMmeBPE^a@g5EXQBRd|Zy<0;moC&)LU{iFo z&-cj7i`sR^Yk=;A%{%WtdgI+Q4WoMW_U^X~CGuuEe?-dWgMH0|j?Q#*Hy8uYuAm5$Gj4Mx$Sd z{Fvz5l><*_&Al#`*w}Q=yQdRxo*T|C~TX#v?>Bjp6d_L2DcE)KpoLgmv=4W{;bghVhx6|r(HGZkTnX0a{H zA{_Qx6u0rz`#fjS$99^cVT1Fyx{8|@G{(!y$Fmf7^jf)JG#6=GA0@_N0i+O$wcU&HYJU@{DcN?A;eOFaIdrLqo16?*%2=72O;${)W@v!FLHG^Mw@v zNCv=LGBy}tv1Hh-#EP0ZCIY}bp*1pq;7c+ zK1}X<`6TCwNanmjrA6CM$r0w_?Q5C$nP&f19y*YOAIRQ+y8;yf0N+j$SiL`RhLx0X z<=^4q;Q?S2fcVx7=pHJi0dZo^M7i?`5L^Ic0H_JSIn37)HG$|WR~uMvWB`J()-U&b zp+^w`Qd2Cb;?3PjOSG{en*^*cM@+x~NPH26|C}%vFY%&QL)h~%k7m3R4^#Zs+?^y3yZXG z!w@+oELgU&cTbdMi^aye#qe}x!&c8+TbaISayR+Di%r7JlK0}S`HWaMK7v=VZOJr# zdip`UK0o&*gEZzP2jr4+dVA#MuBKDmMxnCv5`9^Vqk>{vd5F-OFVvqp54K!4&%GV(^n2bkk9E@?loM@?DBG zTx>3pmOui#MQ4fu!8h{4uk_>mZwC34*B##dRMp!83LKD7D~n_|xkI8GgAjTn4rbNyBpEOFlE z+6z83Y)4$H&fbu$P#8T%kV_JI@gMIDU@&=(eN84GffOxT_XIrs9vR8QZB?zj+798O z1h`#Bu<0%)5_-{>V*p!%7QW%ik`TcOmbwM3*#I_=4Dwt%;MJ?gL4}1j_kOrBO7ZE& zZPw~1XCp~1r}#E=g61lrEe$h1S-`AhL($Ki$qh~@1!>HC=@LP-D(DG;iF(BP zvO18wF@5eRegFsu(z2JL`f~~Dr=ic-q8lHs!`^U!Xn)k@%-l<9VSw*5{OSZyyt(7` zXvS$SPegb$ur>S9tlUTeB3jEDxgC^wqp?w&Aper=*x(SIJ4)8Qw^E$ ze)nu;_)58ecY^Ex zm0`eC?|$dbq#AL5zfdB;yR)m2Nai3-;(>_P@YZehq?sn42*%_m>_?#Bi&A-oC|w2P z{(3(NMmqnfD$N1ubvcV;+Qnr^e|++v6&~UCB2=gius0pKhiz-^oK2UTp6J`)RCB#p zy-c=Z0y&y6twrurrB!y>0lG3MXfRRY`IWTi3qXt=7vFedg4Gp=6(IG zX1h1mENe1+fRproUZkW+c?b9}e*@fT06uSOfzwh8M~u?X++4o!j5Dv}m5vzU;5&e1 zT-wfLka%+4`v{zYw(knkD{c6+L)LNx>_yGHzDY~`+uJ=YR9D4j?%|9bs@FBD_c#*% z-%{J>u)J8oL-&8={)gU>prHpslat42W84yBx+J&`$oeAGqaeFS&HL;YsjMsub^vo+mL`Hw%A9`qV?E4;r=no{UY z#XV;2hL>oZW#Neh)~q}&1Ow+ z82mjr67**bmu_CmLbN)--JxbIKl}MnWK$)!G-pdw)Si2mo#rHv-kMP>=@Y}3y*GiE z_G*IAguiIkg{+&+sIOvN3b~a9cJvM}sR6n<^k#=mVonzIG5r}h4r&;CGMQLu3azNE zr9g8&m=nrzP9Difr-E22xweM@mYPB)jbHzVn3kpEh|yt=t*6FC{*|A@;dKwb)M$Rj zby{4MYrSqYa$LH?>Vo0;r-#q{T)UIa%i>K#;ZvQaaYe-{6v!)bJV5Zsk0B-*_#G$FDm??Vr*(N-wV&-ETKeY@Bz zRCNjf#}c=HrewNyP1%Bbmok437$fX?$)5nb#;J3-maM+7b>8if{o-p6`PieBOUu+q zR75x{Zff?wfN?ugT*d$Jwg3c#+;_(VL6Zysav$J_1Ks`#%{PRluO9HZz!>&UxM(yk zTmmtV{v$lR#UCjixekDub&7OuFOLe@C8$)KnV?u0{#3tlfknO^CvE(&gCRI8SQ$3W zBIrfuv2|ViJdFQL3NAUsi6MUoLxsjxiuW49x%|8f zJl~6)U@r|!oCnfWa|L)i6}trFtV5(H4q(iaWp}^A2}DlI6NR@@d>{ocit8E{j_0rW zo&~p`(%QYTavn)8RsF#-ZD$B-q60typS>|_1~6IEV2O2*cci$5|GnOpD^R#|m6siea)5LPYaGTXeeh`S zyFvaRMricl=7W=c#MPCTr>7^{7oCsm&s;tuL)qffn-Y^vN+Gn?`bS^RK{m2XP-o4K z`oaQH)XK_A_OKn8uXGe3Ci8*$}37QXv^|U(M(NUON#F%G(dj-y)S=~yyd~y4~(V-#Sb<^e%~=> z1kp)_UtFWI{jzCFii_?6FThh?rni&2UyvZ-qno<Sw4SFEt*snmc zipYQ8)=1j^;_ZO7v7&wl!uV6To<9#%$^YnJa{e6#u|E;^Nx~#k^Rfxk`0@t-5{1Ck4lyVEl~rByk8=oRY<^HP77 z-bvaGk(7cTT>KVq_0R83hv?R9a}!{HIz*d_umtBbg_&|hpJI!~Gj-bN#D-9!y?%ez zWv-#Gp{KhWDN!x@j8$*)Cet<7KfxqRaGEN<_DQFXG7p}b%vmr~bYG8nTxKZm79FA_ zv*VAD`Mr|??yrx$y1yt2W_|P>ma)Ff{Cu2|zch05TTl`!=V@79!k5f>+>o#5AjLe} z9EiNkA-3K3d?9TnV#fauwVid6@@MHJW$t9W`bu!uH$ENbB~8MIDp4w-<1i*J5NO>w z(_j*y+K7HYGWVW!#L}~yPDXQ>len&a>Z}_%t%`xjJMC_$PtLZswBTaC2JqP~E`0V> zGg^9f?4~VO9B4#csR;=eU~b?{DZ#jUJ^_tv9Yb9fd9!Tz19Z+RFB9V+lZI1&Z4J#I zzT)vGZOPT3wX=!X4+(}=A3cQTl$#guH}S(>;)W6V`S_1Vc)E9K%(-LVmat5>qlJXJ zKi32?GDMkj$DcIQIDlTGz$^yv0g_v=n(0i_F{DJW_IcEp<74OFWlR&fle-pByKu5Z3`9vo zVg5>(_Un@goFRGrjk#L8r2AGV=ZOv5xXwU2t$EOP`xKaMxLlV4YXLHFcW3R9Q#WvmWHq za2`7%GHtUVVkF7_lNCpeM}J0(h{wI@|K5dX{j^<9vmo4pHt5g~4E!%Aba4~kp9s}OHD;_{me%Y~>@{nGjP z?%gP$-wOsLcy@L;p5Qz14A9BT;t^90|W6nb$hHWoVa(v`9ftCx`OUn?um0GaUe;$L@tIwf6W&$ z(yWQ=NoE?IuWtZ|pgPSMOeI&BwpN`0TX!T3ELVcXl(>jmE0%@RM!wWvG^t^K{L)Kq z$xyOgZUmrZhHzWA_cP0w<35Xvx%J8Ywt43zKaVFRLmJ|UF4&SphAzz#G z46m$zr-gt4AWwS5=J1d@^efA@<2AYY8B}q9!O!e|SkY*E!_nWtRhmKVSjF1GN5DL% zdJnMv&|vlmt)-?|EsRYJP__f4!uQ2*7_a|As`lp|At1;tna(H3 zxAiaH$;4fZh70xU1Gb78S>k2>EU}%6_sKFJG|{n(6x)>fu{e!Q1!hS*~V;c!H-=9BqvmwH5{w(o*uNfbQeLR0hP0ww<6YVd=c=di# zZTc%wrmnU=&Z7W8nfc)G@WFnFDlZQg1}mK48*$IPDN1pt zsd)2AE-HsY>B^Mk^6reYA#tmpRKW08t>RG`gbY(jokm~C3@h?CR}{-)o) z`}YMEDz13f``^eGab zZ!ud$R{_b`?I-5Vu}kpR{U1@zEzWGot9^RkMEZLQ+!QQnjCMC-ubK<6@?b}s3F#3- z5ustDL`OMW6{|cPqe;168;MvOUFcujH(8vuxrLow{1kMC>=(w}9K0C9c~nnAUAX)s z!*2RL{E@^x&OQq5ML9}$*K_4xoe@+_>!8(RI#Aik|K=P^$$+RkFun-o^BavA%NY4l z3%6Cg3&->|GE+5X(XqQQJM<@jb2Ap(v_8 zw^p$}JuP+1Mv0FpaBR<%_nUu0{3Ov7Y4u>il6kfm8k!91Bx-dp%KtnU(CKWCSVmpc zA5Y5OP=tZ*kXt2{JJ%2Cgq{YyD>Xw2o{F1+u@+@a(3T>8e*l!gxtD-c__)-0X=x}F zCBXEB9?g}gXuo!v*5gQzKc!a^h!nyD0U3KeWliClcD^1E!x+HdvmLDPr?B`7vp0VE zL8rU|)At8Ze|qDxf9#(kQrr>>X*BIw@Lz{=AMRUuAZH2AE1OS7R7(dJT(+6)N#$%z zaK4{|x>X~Om+&r3vv*3|->l|aSt)9y-_7sCR7yU6KAgP&;ATG39`sBU{_9PF``6lT zGPdJoX{-;MrHfxY-HR3pwob5?l3+u3uBI|&GSYFU>+0UYM8?foR!!roRDqL0)lX}S zlTg=FBYOTd@EL&g|3ko(hRsiBS7z(ZZa82irTH|s>gGW2a8O-Kk4pcjmO}MqAJ@ z3E}CV_1VWgJ!xByhE96W>e$oPnQ;3{y`8yyf`g-YS2MzAU;WZd>uXeCV$tqzi6db~ z;-9>J=1)H)jW$7F95?`Ge*!e55+3%@^~FXR6zi9To|?}?gNo-Cexg@nv^P3n%a1GR z=y!X~^zW(+%UENS+~9YguM^Lh8n@~%HCltysz*nnztp~|uMkJ5-hZ}mwX$0Tl`lEH zo0}B6YHx23!0_$ht&`?)R={Z4QBr1DXTk}c`-lG{tGH&XD!)OTkG9p><;*^0_=jv2-V6pk(WvEELG#lcuk-8i; zo3Cd5j`k*Bk5`P6HIWD_CgiVv%dlg;GK;%7=)9ySM6S+PF(s4szt<7WyR{#goblEx zj?KI>_>&why~;B=GP>9gZ<#k~Ho0o`hLc>y-m^|ed(C_c3TDxde>IR_(Z8BvN)=ld zx0}T|DJP>bpu?XT5B%OSITw0n=gdL7fT83YXnZ`;;BRTLkJV6Ra=wm7{o7svH~fpP zHDBqS+r!Ok5aA$2gh{&o(>0@a%E`ZLEOdTR%qWugH4w_ex4RbWtM6j`gS}4va$4GxXPZ;p2Mf5Jie$U!{)Wy(g0ecyyiA?55Itab z1W}~KprAY_7zWqRhz`!9kP@s@W7eB()enBXv$IoaS4fZ)#)Wnes8o=-%c;NB5r}hn zwEVkHms8ivt3i#my6l(BE|^lSf;qE(jFO&^Qt8{B?*>>nu*Xrr_;a*B;wvdN^>+tA zhP!L}K`nn^`z+!{H?X;RHjpAzK}N=YTnA1|-l)~H5w=p&i%-s#0YDwhlC~qBG^#*( zJ>TJUu>JOj_psIXao&Rd>%R#l`Fw4z1yj^>^Hog@cen-##&Dm%k(d zn{qS@2Sb|s&l;qU_MRi20qNCryTy%Y9uJhPfHq&T>96ASc#`)Ai zy|icJi5Tjg-D{No-}ndy7VUv6vcuURb))ioi_)RvF8{W6l2Q`n-bI?5qZObC@tWMD zseyX2EW4)ks{Ycpt6#nAot87dQ*;yj@bAp2EbJkDug3VI8-Bf&_5?o` z|KN*{c+CtjXF9$f3GXH&CwCy0{SfFMY=Mo@m>Eyyb$@cw9+Zi$_tt(2#|Xx1l@wFl z|2f7q;q^@dgSm^<=a^1c>EF(PF1hRFFq*TG zp^kC60@sw%i<=jeATfHeH1!`*PN#^TDuW3aC*7RP?B?>^BFt~=5y1$iYLOn5ZvBhR z_}e94vY1#LJ?~ygj&H-7`BR#zKuEr7kyN5sE1e6m-5j;0@ZzZ5H&x$uBSxO43NR)t z|CZq_liamc|5@~HT*FR{qt$NpSLnaIScykF)jv2@MUzcwFjTu_IP(Ro;+Eb^suby2 zPP44iCzz6AjOSL}T3N>KkhPBqKU%Oo$?b>&Fe|r{37z&K6fdp6+?Uypc=maId!@!P zu%vJjHy^h$QJ==CHgp&>fVi{g-tDNO!!|Enc1z$eLoG#@OV}nhNG1yn!M<_Q&V5 zl?Qs;7&d2KKdxYB0ERChxUpU4Um}TN|Q$xw?q<78QTjBzMwyYkG|N{ z`*Lkljh|)m?2Zyh&6t4Y3$v*;CTWPl{Fkbdu^gLscAo+&%gktU%5G;*X=o!T85xOf z+&Vfs0s{ky%f7^ED{c+Rm@KVgp5PRs<;QP6YA`+fM4P{^L6$Lvo=A>whd7-6{^psz zJ0Obq=9|8F*G-2IRWVsr%)99FBvyZ4&(+8hq2tt<`i+S@|BBehDLEvs#>dCcPJS~1 z)+DRgU9u}NS2g6N&ny!~i|#$N-&aOD0G$8fDDuQo6uuVwdXO8oD2hs7rMgSlD; zhPc(c;S?G(m3G?J`-`0l#z6qq_9kne*A-C<_fJsUz1_4PTRhJ}8=xn)LET*g_P;9m z7((+@)P8pzOiBj%&}efyxahyu(mS#ND21lZ$c>Q1L}W z6aBlpzaNzAcTv-WU6Sd$qkq@2!^co9LVF<%z=rC&JqEHea@G|E!C}ri<>$MH{6&Lhaby!$%hG z5@pO264wEQ7rf>t@(ueh#vskOfO}(lnW@i@(f$0&S>i=J^n@>Uggv8_Cd=Zx*@7$lc7eIY zL$G0X0&R=_@K3`(BIX+^?lN*eJ2G5Dd)9zKK$Hy1>-OTHx$tRudHLQ{837@oPEjva zXK7Ok0+~`Zb!hvN!42~xkI8dadt>2z!+AxjC`W%n?5^Qq2OxHM%bq5_DKI=RCCxCu z9bmHzEpAoVTwe)NP{ku`Q^nHB%f`Y*zh@6<#eYj0M&LI5;wP}anu z&F9L1X>E2r(fdb3KY#v|xmzWvXl%QfvjdDb(a_S$D)xUugg(7Z;FO&2Ob?~ByQ^m- zFKNF~eTFv%D?kVIp#nYe(}n>jlrK(9Qa+ZO0S;i8u>Jg0TJ)Dzh7kXJ201u?xmm&h zcSBVY4L?w;{`d8D*Psy}Jt$o)EDWumG>j8TXF&`NeRd~`PIkf0lD!l^6W(Zl8-1R5 zHu9Yz;8p3T&JT{qtZUAqxkvmn0_T^PPIEPQZ5r+j2WSCkg~r)+9s>&!&*>G7jg6h0 zco)9-5quu*>wC*?A1((Jq4`wo@ti`DLBZ<^bYo+3)d~;Zml-+*hU=EBX@5fX3-o>! zlm-S%5z;62S@QGp^75zLEqYF+ic|5Lq+-1aj3T-4FutMCc#KXsPN{3S9CKR3er-Ft z-olxnP*VNE6zF9ip6YuN4MnSVDpT3`%@|E!A@a!Gt_+mR4lwtU?ex)r(;oCO96}9^;mf?M z`hUCDrx_UuR3vF)&!-RkG1OW)O63t~<}6ylTTHhEmue<=vbBbbV?Rl@h?$6t>K$vB zP{q7Yb3meA(MsJ*hWU^(-vS7ch|G9h;fR9G3GF=MC(l$gS=B)MUG@DOdBf^Hcg23E z2CVsGnH8QY@R9v5i|GZ87U~;)37y;cTip)uAVM6>C@KTrn>&8r0b^i{GgnL`w+H+r zy3y5yA8WnQmXTY_HWU;3h-HVfVrqz6PwyEUG{jT!qQ2C{@*j)#O81}P;fIwf0B5Qk zkG{IP0=!_18(po8!3srVSBmwqoP}{mLO7KLzSyY9&6xxMlyYC`1k+T z$dT-tw`y?OdCb9I5YmCPb}BY1CZgL5=YORPZD+*Bw`qgAQS&rhZA)@V@)*>4?+yCn ze=`X(sCV$fONTl&<@v=kD9NAGvY_;HA;>JmQUrsJ7iBv0BSF?}50y;E2E2n-uS?RL zul?kw-DBw3Hc>Wjw83yif$x7u%7_A#D|l1VC|02b3vd3tN10mt z98p6O+|3I}GnqY1f{Fm)1h9NG7NS?TvfA`Ql=y$c z_5u1A1|uRtk4_bGj*D1_<`@AH$e2%y!MCsb z|E{C{P5yG6t7hb_|H&e;%z1xsc7f$^+G1mf{?K3m=W@c&?Bf+vOYqB<*pvCQOe?wl z(B3Yc1S&fQIG|9U(yYjYDe-2p0J*=#vpDD@&{{b*g(#&~Ao_}fBeJ+fMMc@ze!EOM z3+CtNuTR3xPjIHm7d!W&{pBr`w;4fF6jRLLxog7>U4izG@A>;*=K;F3VWFWnfK406 zlj=l6+>9lU4=XbDTT!@dyXiqeL4XvYJ)rckKU+<1TX}Uu@l7jVi(OamANVHoLcvwK zC!4Oqt5dNXzch$~4OZ<%xesH;;4+ohuE(FIknHT+^yS8zZPj+a0KPp2@lWg`B9}mQ z30w}zRG!+@J3FQO_7-bfn?n0@lN(#TPswa6E7jLeph9^N+nU_@%(=XSP2D>Bi!iIx zb30q77n?D@=kNt{bLhM_K%y1Z{fyEAvg`2>N*1nUXmk%j#Nc6m^(qwNc~WM7=(wBL z2D^mjL)N2s8M-Ao(3u#?L*LzX*meOXFTi$Kh<5m2$D{?CYnJ94xvzAyXo4oq->d{C zVNWnHLQ(!)MP70mPt_2hu+tsJtOj^9cH&fB!N#Pdm$+rRp5byOYQM}iP$-*7;miLY zO())Hu?{}#c;=5`J=X?&R=a=PVfod6(8KhKbY4NAD1bjEw9zu`3*)V*~fzu zw(tfRvJht~am1)!oMrU9XApDUs0ldR9ytPl8bJ35NLK?MCR5+j^HmccqqAS_XsQC1 zN3r)euviF^lcWuK5~b>o-204{`t@steZh?`I@&d?CH8(it22GW;&(-cRjp;k+G`76 zrUFO=@iVgtSViIR_}A1Z&ue%cYRzfN>(BhbZB!Y!U1Zydh3wN*BZLmw{jkV*NS7Ml zKbd8pdcr}_qt?^Q<$7o;U#`#SGm806S`eYRrY0U*E&<2wSyq~`<3#wW*5Jy(nH@DH zk(sF>a@R^hmPZRAEPDRr^$*UHc%J$fWNqm;lQmr~7hsCv{X_H^zp&tTf8OdK)~Y|K z|6}Sc!=jAVwqd$MkdhkdmhMtSKtQ^rhVE`jX%GSFZt3o3Xr!gP1tbNf^Ihy`@9+42 z`ELa7x!1a`GiA+xqilHB=Ha45iHXmf+blJGRJ(&x!BY6um1dv)#p12br( z{r&y@jFk_u$(gi?C^*Y>i<#~BkAG9B70=A384RkER?Amv491tZVU*`*P{-~=mWkdW zeusXHmd#u8EZ+ayKFH^AbZ~$Ox7^}-umei5L;US`L0cO&19`b?Xs{__r>vsp&%M9? z{sqPZi*~E=s>PcXuWGU&iKA+;Zk}9`z!Z&xoVW91J2?9>*0`-jSo0%gSk$kL|5>LB z`y7i07iZTLm$yR5UQ+*e=paUU4~2GY>>Y+7g;KwRcxRK>t#6SAuB~Jk7kn!j7n}N# z8DWDXP0EkI)X62`6&-vP=+Myss-hf6<+6^6 z4ri3;znlaMQjJbLjH9~*kdYm17G6+bHwq&lv`kG(nULf_w_lu>_Jn?@eL;=()yAu5 z)PDYMT(X-q(snc9e>bcE9X@ltfyXa{OC-omUzWE~yKjPZ!MFW|T4`{6Uj;gr8w74& z1u`dKjCF0?O%GuraI@<)9D;=ij0?cnIX*s~?uHa92joTe*4AEUzm-!BZHP!niqxX+ zF@1e}?(^l6NU-|HGK4oyqGf0sKJpW7IyHlw`JGTRX@elB8UXbZ;k zFqbFytYS84CR!0vXK0(=C5ffo{~UlUTL?a6+ujh`IBEE9Rj~nv^8WWqi+ameAIklg zvDg50q{b5=ous=c#A+>Fts-b8QsrAs&7@JYFF2Exo|d_a7sSm%)DJI<|G@a;jyL-u zPYCw!Gs|VF&f*H1^U_xy!sZD=ttobZwhxwgvGL;TpotWjT7aW}CA9ieH#h+X3bw6z z3iPYgc18@=sbY$+A@-NHzo*wEPec!+?HJ;?Fs%ShSi?fl@+*Vl8k)tJQG$VlgwzR- z)ga2j0nUe!?RX_d_2HyBn`JF-zYflaY&`2Tmid0x)WL)a*f^H-GScT`No}slCD3T*ERF=0*;NS?)}#byjn2*Sb8}DK7`>y$O9x0vb4_b&YiVgj zAD51pjc;aVCfsLG>V?DC4P-lav4)l)U171VUHBPMddn;4>xnL2T*{BjDQLMegMpL>f&#?oS_pN*+Q)Ykdaq;fq$Gf z%cI@^v4J-wu~JuKGm-r+)A#1)g%0G!Z0N=hw3BD!KNwcjLdGPYJsTu&zJMA#1Ow&N z0-U#r&rrQ-wp)J1RaLCp#*`&-wL5NlcuY*{)U?SsKMt-+(DR|#$BMBw2X zo&NeXlXwq}Bo-*Zz`-%A)^bpj%2!$Qxzr=iivq18z{=q9>C^S?ZI+-j${NLSVV18a z*wX0a5_|jmpZ4Fs%9QPgGH(d)>obDSO-eL@2%I1^Xx@L3?SI#bGBK zu~f4XG^{>5Bq}4$I<3}*P5vO11@F;Xa=Or8XH4yl^SdRSN8f@~DZq@lA@R*I*_41Q zz}nKXtN$H<836IPNp&|Q`~FhKSUCa=_oWF#1pPbw1=o-^tQ8-Z6Z;A+->X#Fvb)Qf z%!%j-jIUYEqlHNo&4vhTVtnu0tBJ*m zJM$3OTa%68?)@IRd1%3F?d{yt!fSnU&VmXrZF+osECr(mhoC@8f~+ZcY?-279iUDi zKAzxCX~*F&$%_}w23-Mqt#0S%=L@Zy<5a3etwj>~L#IR>3ZFHY4IuF8wSUM=N~Kt`T(db;4avZ($ytTF9K-Hhcv#FVW7pG{`nJ*p_V}*{pX7vf-0ueVejj| zrWtSY2Zx3N$Tl`ME-LRi9A3T732*KmbO_ed)%D)!4hC3DmmK_`<*k8e)nYZWq3Q_V zzUNHFlZ$b+tzVhwT3IsY;}Vx_Tez7@SprSU*OwXuYIIT3}xY21iwF=*$ z^{nZ-s7U+K7z5D6Ps^hRC%6I6*I?omJ%r`?hdrNtu&SaT=WT?ru5!}qYfd8@tu@O! z=PIux-l;NZ8rp}4bQ#Qhmo0WCKbDl1I@g(GTr9CAgvH^A-zl&;MTjozIIrRNlgV^ zuRG&e_G?y(gePut3JMCcvOt3ec6m^2U%fh&!E{jrTin*UEwudvX(3vtJwe=aoRCzc z)wI}Onl~!l!UgjYBvUCSQ;|?EL-Zkg>?H5Kq2UHFpVwGShuv^qi%P?UTM@K{axJqu}qM?hYvQMbN!EE8i2`^eOukULV0r_*;%|bJ0t|ydA#C17tDLLR~^C znpteeb`DK`j~$JTjpxrrxl(k+N5HT!(!4e}90)<~j6FK;H<7nswLFWn<6Fz59L{*b zo78`vSqfzqXhF{OjezWM>0eJ%KW( zQ-8yeB5EXl-MibuklRqYXHIwxFXxPDRq(-EYF-(Xis*HCFU-uGgR7S>nWCFP&&jE# z`O)br7wl#I1;k&$)skXhILnTRrQiju*=5zy{RaQe+bei0LcjT%ii)}nqPAiZ$!9#e zt^9MZ7=?EOSo*fB?W1|S`&+NdA)pVSx(9AZ?e?0&KYnd?`7unM<5^mSfyT9Aef2_1 zXQlJ=%Z8Oz!Ej-NCQD*W|Hm5$b1C1;7OK{1{?@e5xLumRnb~Xn^su(y5BY)xg^_*{ zZ(4P_>pGR-dPYpVyR)OArxyvCI0T^{aGybc90Y7&>s^5kWC|?(BMU1l*oEItc&Vv3 z0Zaw1fs67BGypCnJ(smEsBZ4_hS1rZ^ zQK_k<&Su|ss*-&3C-z^x`eDPf2g=i=Mt7wm!ZG7cj9K6+`kGu(YBqhGBoI1 zyz=Bq8JU@J1vnTms8Wf{4i95WTdOc9I8b7Ei9;Ze3`1AuvGY*9wcRW~9PS?L%#;*# zm@G@_uf4tSzEl?^Fc*u<2VMo{`70LH)$x$i4Utz@S6k0jU}IsOkp;tGS-X95u-jYr zr2C5SK9y#PVC#TMl)L)bpUAvN}Efq42M?!@QcgfUBA;ZR?<5F+2??GpJ{1)_hEEcms=7 zVJu50=Zism&L9r8WtemRKk$scyZ4->T!lVN;D_M(j@Hf0ngD~}EBmTR_`AijBaCLVh#@uauUCv>Nvxe?L^7-YC_z??bfNO ztBdb4ScdsQ6nZc*F#d-4FFi%XSXhu~`n#R2DHNbRREhe@pYE3i20KS57EQZ7yWoD1}>`)MHZ2AUl%}59~dT-vmIXMD=jH3~e zfzM7)C~mbR8<82{Grk05)17AyPNe6ESA;cR(+> zHFD^lbc`DjmNZDn)r>z?=|JAxg8z%(JzskWpR}q(-qn0-)D_-|b zF>op}?nKZ!ybh^nS-Vv<<~|Rxnhh(;JO4kV`I*8G@Swv2bjxtz_zO6gyBdBmXK%T2iu;azu9r(930SF>!EaUw|#e15X4L*?WU;S}^qa zA)Dbrz2DJ5^y{(`8zXHjhJ7qG4UO(ykbrLa=~Hub^tj|5H2?ee>T$Ww@_AHFQez|kp@Cwi$O}BYYNI}k(A1m`4+3IhV6=QOcEb+s zINaL$*M$m^mxR@j_$mE?>6QDgB3avTlX!#;WDKm_--H$@!vg%c-EVL?*qR(dU9hWa zWYY{%8hjFyu-%9S!dzD5EvJ_MwEXz{~G&49a@OsDncY){o|)@wg3B0^49mYI?9$?*x5=R_EG@x^r|2Hl-dS;h(5H$~OTDS7bqpMXStQ2j%=J6{fy?itB^JEzjTdu0KUYy^d41qaiQ?VpM?Emx z$iT^ZBd}7CJ{a^?z)VBK-i3$UggI+Y8~hF&G>S4*aL6I?xUYdtdVZ{=KPt<<$)*Gv zxp3hU(wVeIiSFZ7I!=|9+^^u{!-4ENcB*5LVy>S8hNJ&)=2!ab(T6ND?#_!ry%Ej+yc2qg3*T7rTQZ1isAtrOL&Ic7xAJQD;;fZ9#ZV+fdi6)+FEW7 z4y7CpvOacx{<$VmK$R@A2(wm|l$10!CJk>Vg6`56pS{M?1)oD8_DQMH=$bFbS@($* zAjY^}Ie1P@Njtw0@iHH{*&R|84j3WwgUtkh)z>2%h%)V_M}m`)k@@_gPnVK8L8#ye z^1Y&BY*{(k>*!#v(ioN|Ob{uRrlU|h7a6Vyq#A9_Bv>d7SVy2d7U&=O;*H(!OWHM0 z#wrkuUv{(O61@`mSkREQ91rb5`d1V8{(_)aesFB8!|zcn&N4!rF<&K|rewX6FO?aL zV8puwbAq=4)pvQKwOwUjrImGWwJ<cG;bxsxuR&ulF>+mXPR3A^s0)%|dPE1m4ud9PWi|Ka_6|G@Tl5kz_|E_4ZP8)@)Wux?4#)9(~NwSSBjea_Gie~Jng4>Yop2|h0e1P~2|>D(>I znlx-mW>BpKM4tk~=v$kcBOg%~DNv*_H1I|3rWLz`2=puZB8UMuNGa}1uFxM%E@-sW zLJF8$=K71jD?8&C*q^#?EEL~pgs)(P(#91%wx_tvfhl$?9|*1hq5*0Wz+$uRz#35p zIPrHVva+%gZ{IrN_=^JU*4!}3A}v2X@Ci8;z~01dsITwBZ1Ozc2be$?0|8P0L_;pX zBAO*Wsx8e<&fxNYuK^&-8j@W31f$yie!-YrOtff4A=1DupZor~x(yw%O2y$j{tsNv z?p*=T^HtUTLFx5V8&4G;I4&+gvqe|9&qon2xBC+H8@BR>%}9PL915;`dr&fB)8E|O z+}qX$2Zx~V!@EulJ3)QvbZ&(ZE=h|oVZVA`8C+4%rYD;}q`MSYUXj(G?!zHzsr3%+ z(&YkY#0k61?uBP8WwZC3?EU`I+b$jU#ow?>=2=M z8+~9Ptlu)qm`14u2jufu6WaG`l!pkOzaofY+Ok z@=Dt@yQL*nhIZ4VF(eKxPc~bPd4MjIh=4%8u777QPp;E5S0@?FvZVgpTi}NQb#2}k z3+6x%Q72{j;yHNM-x4XizEWKO!yz6ORBF1G2v)Kh-|n$QzBi!TST&X|r{b!BKiu2% zk30dVfB+RT87V0o+=o}GP-igI(|foFL?2-f_iBR4m4 zkb2@Uiwlc*gGfh5$Hy)=FjvX(%PCl`fMm9kz*xwMUskK6`s;BW{aBd8cf@er!C&D# zs=uc#Z(eFzb%=d*+v#u0fGj?Je4c;4JpB@=AxU1CM@B}1YZ@J$Uph`Exk_BSV71u{ zI}g+vLd`bzxHoWB-Ssm%K+T$}%(V9Mytn$+zV_%pR%N1YOHw|Oyew{e?xRwaR34?@ zEX`am3)6PHxzK+r_<#FK0g^y|Ldw7!2K7312ZhHk&ifx8Mn$!+gVI$$>Wa^=vb1GQ z(8bR$6suWTl_*!m%H{*DFJvkg@t7c@Z+AS4{ne`qa8mPpRu%}(!8Y#0adZU}!_ zINa~vVyrHuJl6G&g@}s8a0%qte%>qcumxV4DswUtl6f$(Lm&PUdpNeVjxKtNdY=7I ztLnb|K}&$KF|*?!00jP36bjt|8rGlZxZ5pW+h|5k;HjypCEvgTaAP?A^s7-KZU|XF zQYXln{>8(e)naKr`wtmdL|-XDd2vqpsLl26Wg<%Nw(RzhAv&g_kjzjyTq*k(rMou= zN+mpQx?e@~YieshP;4S2BO8*@1k9b$(S<E?xNxzpW+{`m;66AAsb~Z9Z zx^H!Jdkdd_Ti39t6a~B*{W!-?$$Hs1*!LYuY5V>Ug1#zW-j*XK zb>?Oj*KIQ{tzS|v3_8us;;ST8`ZWG9a_kaRYdt=bjL^b+daMpk^EPgO7}uu>$Nqq~ zhMQxZQ5wQ5+unIO9G+yX42%6S?c-AI;}`ryE~915^Lb5k0;X#uOWdz302%zApqgqc z1e@%Yew#%S28`AK3Ril@S^F~OV{$+eM(o12q6n#Y{{JQb~X#mp)5H}={& zlP;GLhf8-BJlYl(MW?no@XjgR+}s;}fHo`$+f1@yX0OsJ1CoUBx!D(={}m*#Xm-oR z#K#A{_=knFxEV77q(ZbWQ+1VW{qzX<+Fq3?6+2Dik4{dicn7LrIp-ib_(DUel`cx;qfc4zPd9Ac>|F4Twyaq3t%u@Ls7kj}E+p?j@OWHu2DpztsQ82LSMN z9KUIWi337hCuZ6Gvu@!Cc5M%Vpstz9cYT~)laN?F9HM4mo|Rp;=a)8DDcC;*Q+m}Y zFem^uGMK@8`}(?$Iy+yhVmhl@`CbqA^IA*&X)J=yG`RTr?VCB9!*p}HExoMjL;5$x zUzM5v3#u~iJ!46(3U&Tutcm(gd>PbM{s$jVE|AGr(bUug|7NXI=E4AUJKmwyKh4CY_s~ zY{1)V;@VBbZmTKJ&L6fro~zTgwYUFc*z=R3;dz4W%-mcfAm7s8mbv>Nnv?h23RGPF z{hKPIemY_0YWl%ufX$X0nfo&q4$i}71iQhwnX};RZ%shiJa^8Vy8p|P+Wp+gUX(Uf z4sYBotK9c|nOP)T?3?Z;fMpm}_Be`g|ZEFI3S=5fDvbdH4t38ibS4I%t ztj5W{Ah3srvTHl-n{~$-1*@3;tdyrK;~X(C*!^^^uOXM@tBaSUuCFa_B5<>z;J2UM z!MUDn@E;Rpk^G*p@L%HebeqSclcgTgwB{d}QiY#rejvPjTyd9vdc<9Bed}mJM#bT7 zR@8<}Svv2~mJ(&lmG@fN-`ZyRW#_#__|I7?4_${N8Jh+P2Ul#{uHtZSZn@{+F=Ddq z*esSK(k}c%GT>Bmzvcz(#6ftQv<0dR`7JJQl1>kaws2AU8vD2O@eMEvplydf0>e+CBllzO24D}IjQ;T_{2rSSSKLz9T&SD0TTPsQS6S6ze6m*^pWXN zy<_n2m%)p!Evfb`1t4AlrVl4)XMod%OL~InB_JnSx3QQi_`t@-#z$ZQ(h0_Wx(>!x zCQ@9i=eBA(t^Tapc6^Cjb!xuJw0;Jqoxp~uuS~-y>UN6n^QTn=U~5`wkF=O8QeWH; z(5sl-kfcsZDiy1p$cp*ik?2d!lRln=injqf3%A+G=MS7rOoPkH0KqQUGz2j)zr|_` z3sGwU6g4)+2?u*xngzn?tR_``Ix%;n#nJqe>_AvG#QUTRFbfe|3~SUt0~f(?XAlZi zv&vK{uIa~2)Xrn7pz?EPZHpMflA{%4v$fizY5M2RfO^_lo+$>|7?n zQrgq^%Id12C|*rEc#_#gCCzOeD+ShpPr?DDZhx&xD7rSwK_jAJsBaV3S^S)pI#;-? z9n&B!X+pP)O?Ipt8-y;YXnQ=QQlk%|`=QSG?hRJ6F3#?4sYdx?iz`byPER;lR4^R* z@F+N*bNrDpiAGX+F~`aVM$j2Tzycfk$!skBI@<3Jk?7zji31SF*J$6Snagtp_Fjc# zyzZJ)oFXrW7AO4mB>qWk&-W{fsrp5R0bx$jn4MhD`e@&V13o^!0VV-im1a7!PzEru z?oCck0tq)LybcLL@%l&@6)yI${$F&sp|PPEYjqou|TQxIEIH>e=Nu~9?vkdb7H9vm*baD7mz|@Bq8slJZV z!_d~yFcXY}Cykt)n=?O#(WL(pVD=7#r`JSD#2*Wd#0s&H4wBeN-Z%jxMKdq!)qFNI za)l`wzA&#An_knGx~$r(GqbetgMZRo6N*x~Mw|?-vmgM%&IcK?Y!+&e^*h1hbq63* zuiXrHhjgx#MSCU2_zBs$_|DBiN)uH{g+FHEe0)R^&Ea^2gr+)ya~}(#@A7w;ux=7~ z>9t6E0&Boa)>OjuDzB;~r#w%w64lC8J5Zdu7C#ZlsJ2YLvDA9~GGzfm;wopE_wQ50 z{W_wfamkrJ>UIqkm;H(~t$&h^OjwkkbrwW_E>;Rqi~<4s%Zs8Motsnh0kg06XEE`3 z%RMvJjGp=b$Ji-O+!2}>uZH!ym`eR&haaE7{{J3M@p|w?CAp-xw@3pKJ+;K6oUX5L zhlHU9H6|`D|M?rFLj0Y6Csra%ozKsSiBWNx_zZSS(mDwlGZQBz6(BgP)KBRU2m(!G z!^2*;M~#sOsP2dJhOhpCSe&rF5Urvv&Y0otD!Lx}$mg%KZi{qK=%IS-~k=xFi=gJO{#jF5u7yO`NQ) zt#x$BdpLTD&R~*oJ~7Y5Ld%*@CADGw%9lF)L7L8on_Ix4(&pGRRkOJEJuJ6>V3#x`n}ZPH zWy5sye^k}}4oKjy6WK|6FMIsiLD}Jfkcj=Mj!{{uLwWXMLyIushx@T^dUArsm=5^Z!}}--;gE90 zvf^Tp0S3$^jnF;@$+c{g?ie$QDBV|CKvw~<`r)Vl&mDHFCm|6q`Yuu$7Mn6rnK_7d zGL(TXS8QbwN(Rm;)00BImFeqZ>t_jFef(XMRQFctlH$koY620CylJCjKYm=DSNiFx ztMgVMK81eNm#=$WrY71o>k4YaNSz5cI#@Vaqh6a&)_EW(Ydk3RRS^l`+%r@8bBJKD z-JC}MSK8Jazn*?W7&NESXYI-NuBHeoI+F8w^!g%FJj_4kS!Z}vTAGfVTSN1CAZg@I z?YLMgsFe*w#l^?!d{HO(s97*QJG=Ai*L?HjI8AH`>7pR}>$^9FGnG!mmIin^^-F)} zY(-C2+q|#2mW#^DKvP+w3@xA`IFp*&+S29e(LHbpUEg)FiAtJAHzy1MCUHS#I31Am{q(9nU>$_~$8KVlG3aSoRn*%=wp7*sY) zVwHcQ68%!+74`zR?iDg2G4WOzaRbW1IZL&q*#r`%7@eq{7y<-xkiSP9BumI#Nmgty zRvdkydyogD;y|cbz!mUx66Hiw`S@6`9_Gaz!B(gd{0(%k|Em#jZ+Ew~j@GTHGea(w zEms(?{OEU~p>7;Xy5rpZqsJ?2uxf0 z05S4A+)pzf6gG6ss0GS>3FBsQd|z%aENwUge8SHUCXqAW>})PCKXP%jG`bC*&1${1 zrh$Qhl9Ce8$(E>>l9G*jo{bI;GO@FV_UU(cr%2`9pY-5fls7N|>droNtvO21hT?6cU|CQu`z5NGq}+B_|ei?Iq|%71!M>11@R8W+th)-&qcLJqNrnIz%l)f7bB@ zMw(Q0$%C)4ZSa#B#^t-OsZ=-Dm3^pJr%LptUd4lV`{koe+uznm%?Iy zeuYH)ZZ6CHK_Cmuujd)aFmiIxzGvQ77S{UkQe*KG9_kw0vW2B3P%hzxkE9Z#ARz^X zhW1?B0FSAo<0+U{Pm}BoJT3L~C~UkK6f^7W>p$$}MRffS3EgmN27wd~G@_zD7l#YL z)YsQ+Bp{IHtG*@$Z{23CJu;;Fo|ail?yF4gyRusR`5ZuenUbPmVn#$qH~xKn<-keY zkAUcFjfnEw#S_4QqRhg|u{AAS7!r2PweHE_$2uY6>xc{wuP*O8D4VK0E{y#(e(-c{ z{5sjQaL6cEE9MY3jgf5F(fZ*Y8dx0oHrgywqg2H@gpO5J8iaqyCK7JgGWrQXobpXGKl z11IMxR#p+o)qyNLJGHv{un`K;2h;~K?5b}tj=}G5T-LgW=E2d?{jT_$CtvaR1A@7*!)EFKa(BgHI5489| zX6f^Ay}RR!ZEt1eR5#9|s-^qUg+7?wC0m|T5FA_EFH_UffRmcDZ~@vV zbp?DFnVD;va7uygX9s9G0zy4JJmxEhX#8tKLVG)A?J~C%45PqtVl8qTX|}kh8HM7e zk!(5*h$oOx0bWZ5v-u)w8k*LYmc^wdVPRp2h)3sE%KZgUv8@1=Xi*U((8Vb!eSSXs zjFZ$O#(X5%5twS@hF|C;N%x6UE2 z{0TD+u7ji9Z&XnQlhJ1Zdgnw)^}VX$-r?ul@R5b{w?TICGmx~=hVpdB-37bkSI*K(#071EZlVRr85>9 zoSDj|?$cn*Ml>4{sNX%W4GG|9WPnWwNMg_lij){v{T}ae#qUl)OiPyU%^tw&9I%i9 zKaB}D5A%Bjwa)-1wE6c1mmw!F4>7rmuhD5r8CK)+&6`&`o6#FKtz92cLtt?5Tk$c>!n~@TLQ}e#mKTx&| zU@hR7`uw~Hh{QXYa(t}qFvy$FvA^(+L2y^`x8^GAtP&)qm-xO>_P^|7>XQJ5x9!N0 zJ_flXvWM6{qYMGZZWr9K&1?WlNZRM|s{7^Gu}$&ZKraI z>{{V7ZhZH93R|u;U0u(M{qDyr#~;&gF9|V%rSjnU-2k5_aJ|&^L5VrxC%z}H#aHh3 zVK$dDMnYy>1$#?7I~+{R=NQ2vl+ok6Jp=x(F*0W-8*k+a9TUwJU?tl!zVi=Fb&GvJ zP^rPe)!ma@T8ddQ0%Y@FRCUV=3e28z?QVf$^BU+5$bko@MgkS@9 zr+be(G&W$UqH$Kth!6Yi&-JO#S>{*}@B0#IMjxN+>Y^)hd06b=QIJ6w%mX1@tzvTT zT!?}dMODLBjjq$o{yeufoX+Aq(H-%kz_%(^wk#7Rp{o*D*^jiAJd-8`xDd`l#jKEr z4G?L=p|4$Sgna5V!^U=whc_?ObrTrRaFdYtj8(0B(xRR#m}}pT=rAmS2B|dg{G=(p zOgceoDjRL>LgxMp*bjn&df7VR>T7G+rFkOy04sHx^?0`ni237VyChs0B^bUYv8vh2 zSkJQw@yWB&j=LlM1?=OoHGLf&>+71_TnT&SxCxB1tEi-;IhM*cd_ux}H6i&ms<=T` zKNeKKg*;M;n=L*Q1-HIhs9zQL5veO*E>R97D2%Z9o#>3e%(cn)O|Pjn$hU@D;;_S| zLg+Qsa%*8&I!P+b=Z%70urT*m|2bj^1PV&RbCf_Bp}zhqa2inXq73+V86-ocBqie$ z5(KS)>A+&a`196!g>wUPx%lq{FIp?ceO%HHjrgHG{wxU1u4Dz5|4hG^%a1>VgxIruv;6`5+LfqNir&7NK3tC1? zd)~j1>$Jc_a{Sm0Oj_SD)FpK_6y7ID6!YzAUc9YhMM63-S)9+EI{2`#a!!vvtODcu zMx|BJWt9~Dmo1sg`y5p<%gyIY`&Zd=AvY`?h7u^}0?>T180Kg&XqNC%z=8)g=A+w~ zBkc}~=SL8D=0p{)AZEU6_EiH0qT_wZT=rbCI*Ka(NK65=OE7q);w{lH z9-h{ZFemscY6qh_j!sofG_+3HVQlz0RjnVn%SI(>rCZG*i=2V_jru&BN;B4#>-Bmp zRvk6(ol{qdUEQYlPUhYvB!vk=5ps@&CA*E!z(-8%>wFt;tQP1IXMZgfX~t*SgMAd_ItUMV&3!2 zDq$~y>N9UwlsD;|Y|bo=3H?b$~=(Z+y`$jW^!6Z8m| ztns?E<7jrhc+!Go*Po=-IQ_7%NQoqN1=iv3D#bFiM%7xtzO!?x8!kwj3pK?0U@lPPJJXv$Rf@r4B|_MP z-dL_~RQ+TO(;FHdc6M^Yz`!_3TWS0BZ$=Z!3%LLpdB?)mbCxy<1;1AH{D3XJ;GL-s&MbXNG!yR~wR zD=+oV)?b^6!FVTj-Q?d7Cm%K*Jm1SmJzJl=xxV&yce}fCEE^)p8VAwf2;$Shd7>;g zgr`Y>gs(aTu(X{z#ETeyqAuq7RnE2 zAoq2LV+C3SCmRb}TQ+891XXe#cSIBFQxEi`aVo>Z!~g#MTk+l>=XL+HD(bKfSMZ8b$OY{oV6Vlk zsB5bd3ng5V>cz7FQ$Hdq|7WZe3TQ-an)2G5e~(@XbXaEvn=ty{&iyt0@F7wiQTYS* z*X5zY4|x^3@AVqW>_2v-*Ekqb1qcxOox_O9OH6Wa2;VFr8u$ES4Ay4hOLcm_%5_-A0P@q-gy6T`$yd4q_dv&SYc1I ze`Bh$2@mgFr;+b)`6J9$N6x~cvOV0)b6nDcfQTq0D5w)!uWc*L$BigP>W#V6%zfet zAi!be#I3frr*#bw_!&=pHQ=$6IgO9kV1L5n{6fHKEeT))ZjIhAXooVb7zZfrI3Y!( z#Z|{Y6pt(?6exmTQgVqaJ|icWFPsX!WnB)Dp)DyZ`#xa-XynCeV^lywoZsEuwR`Dd zt@`e4R(}0`_6j!@B0`_-%$@2f_u~f2OAq!5hL(ERW;QoCzGV(<6dEvK>df=V}H=$ysaX)LNh}jE`x52 zQ%j0#N}>Pt;V6dU(YCflObDdcqX6+zr$^`Amx!bMjmd*jLzaZN0)L4OOBESldXTHG;Lq?@b9zs@|7=m6_o&h z1HWjohc1UiyT*r~U#6+WdWehDgE?kjVnMzeF{`xSJD11*iD$z1S79M(EU(L-I=_M1 zp$^2A7Z*3X9wc7Vd2~^V#^H3x<~Y#_L*9^*k!{R^h`P%sVMrxNaai$v;-0h(F{y6| z%cE3h=B>y{?@OWrM}))jpuA4`#*Ohx`y#x4-?|LiPP#E2V%9$GQZ$WS{X+%ec5Ljx za7RAIItE5|f2N(}urFVLCp|k&afOajxh1B#S$+-Cr-!(9l$WZ_=#H4WgBU zA24_vgQ)MjtJCoCaILa{JenTIY*7zv2k)34wNWZ~`3J_25>oA`a^zy7l4qqAhdN&g z!=#qq{``ieU9VrbH`ct6NHUA>^;I+eyJ`+o3EI)>QYrq0#r6fw@3N+ppjilOc9UTE zi{%w?hi3sL4HyYsU3sHOok3vn@QdDoXh`9N1sGf+;G_D13^a)yii3J-@!*ysal0Lo zi|H;RFingRtj4TfI8|)ZnbI7B2u98{>|NrcNG_cB<}#&QFU2XobDaKdq`?$ThPCJB zg7qGek_a?ij?zSK|9Dn6b&Ap<9erm zRTam$H^Oe1qBN$y2?4HOcjp^m*aRw1u2eOPrr3%XZH^pZ)u8q9n>j7IvI$mUi_spX zu1ou&XUmTiAw%tcR{K5fhEO?maXYJmCAqgN@(OKRKU583+CR8xNZ7N@hJaF2myJX501 zLuw1`lUOK$16#lhB4FjcGxFj$hNq{eK_yVc-*4dh6_vSY#enoRjIYfgPolaS&t_@+ zlbfW)QG8Frf^+6h^RIf(5IIZIr1V!|?K@s1(E8yb9Cm;xVY}a~MEFS;FE)NQaus!Spq9PH55H;939|SCe-#Cnhk?Nytilx(4uF+vAM^Vb z@MVlJltomTlbM>@2nfD_YHsuH`rlDOAjngDeRz7i_PDD2PzqF;WpF+~FQ;ApiiM?T zT=Z{zZvlUxu!cOv#P&L9vk+{2G4@;2HI&$*S0t~G=*>GJ{ymJCm2+*^1o7^6uhbud znzJY7hs>5oF6Q@d9PSVi5hDxg_<$)*rFa?)Aet? zemwvV#C#I$+O^C~>%h=_3X27o_Qm-*GQ;n^!cF|iN-icf|FE9w-oF`# zzyB^RSJ@&(A>Bsvb+*r)llbNt+}sCNqQdXr=f&KCBzDIlRu~7IMWsc)`S^0%y>F{f z>MUXn~!ZIA&O@{@aPOv=wl6Kt520!Ls#}==qfQjf=ZR;_($Ps zTZDke1OBD`e?+}ySQT3L^{q%FEh&h!NJ=--N=kQ1cS#G<4IfM>28$nZZ>Rq z7U#bH@B8hX4+l7~_F8k!F~)C-egv=$K=usJqhkwW^or*NrFq!qK-4j%YMaB%e1Jlb z`qo8e+FQH0#-=9H&-CEw1(%x*$2f3VSiz~TNZYf2z(V`w^TKAK`ZGmzDrnAtbR|lQ z$zJ`5Gw4IT4&^((7{>H5$X*ol>?i02{l}3!j(^-^Bm{CsF8SbJ-;USoWPv=#10fT-mg$^NwAS3{gxKa5N@v_|B({>NLdEFzj?j z{Pt}JEvl|-L2W}p$3fsC3pn&;QsF~@GM*tz@4O|r8_pYTRnN=OYoXYL3ILX zzb6gj5PnHFH#c!{1l1KQFu79aWoRm&x2g(#hZDknRVk3j<8qXGOK>h4ge=>D+B^o|BUUOrg4pig17TLC*$K_-m0d-(EP#tCE~xffsDBey3Ag(-#^y^jj}P zRtfpEOFuPD+zi9-!!KxD3=1**fwN2C1Fty9TAG^bnbj%ns_%O}B()lfOM74b6uvC( zi{t43ovA31qg~dC`PgNJc~B}z)s&#ZYpK;e`(XM{>zm=?A1#g&&U#6b`8S1n(f1So z-|KSY=_Mux&%YT(CgimlWqw1&7JUnb6o%CG{H%6nkb7gjM2f0lBuuwROfe(&Jqaq z!Eyqj#a*wb|L>7hpf0R5cIvTEl~fxmC@6gUR+IArm|=)zuf5{Uk0d^Q3Z|7?4A({( z@$IYB<9QaNu@d9%=0;6J!&`G4JOOzYA;%m)P!q{^T;ojV8KpYKz6f!KUVPl%IzDa# z=mzimbuxW_kT>SOHvjxNq+#sY0kS;3Py1?jZ-TBn*v@tUW-%vXU?>ErvZl-4S0hTg z%WPZ){>xkCzT3#pnT`Qkw4;BO7+9ITfEnRUkr4Ms;Kd!r!9O)xPz_nK7by?_?X~$* zz;Jj`5aIkP4s#X-;N1j-gvhjlkj8*EUZTZaKsQ#bdR?U40uwq%FVc&f*z;chUeMf# z!Z18=MH2A1>s0WjhhPv4K0h+NIA;q}e8~qYKfi zGKnyDz6KmLw1BHouwM&+i2LtxJdw_s6Vo#jM?3~0cK!)|*WLHRJVEATTKf_35#Z1E zp11J%se|K#a}Hh8H?YM-6JR>sd0i9q6(Ti3O2(i=Sz=N)B0~w;>KM#|8y&ahfC>#n zho=%B6dUlRLiL3=QrT(U_M$Hm276G%s|G(!Lf&y$ZDjBb7AKRW4YlwyRlcQVomaX< z>VT{GZ2|N>i<(Aoms(lX8W|bAMTXPKRV^0y4rMP{-%(S|(!QDX?EiRP$K3y!^z?QS z^aQJ@0L25s_8>@NHCNtoX1@8#|DyQDDoKQTZxV81irx6e7r~Yw1^hC_3~B}?Z}DZ8 z1+6ZTD#A-l+TWHED=Wz5*5 zW6QGQ{|KI_Kg_6LZPwNuvGE6AM&(Jpg+1^5yA~epHN3A~Lh7@T<+kaCLNz0YIQZXC zc#WU>w@>^?u2|Z*AfCYV_&4-};bk$DQfTIgRPsb=2ffAA&;t87HPEDPR}DlaJO$f; zI(83t(&ozl<{sp%IzC6BMJ@uCSO=wFFUUs$J7u+2NqK%gEnu{Q>PoXS0oj|9f&x+2 z`hs0s-c5H8lQ&1tAnRTb^@t4+;$&J~xNFoDA>;pzcCSBPyNU&w_!}Svzu;Uk}#;Ii(=!Aq$&8M)e_GgU5B5@fC~f zlKwf8&W~U(ynsD5sc12#O5~18zL-HyH2hPsqZ8-4&#+LIWs2bpwGDa9GyMk{PvDCL zJp>R3vl4!EOn_ln3GweF_>9Wab!vwAkq%~e2}9_#Z3||c+U34leQmySkpXE^gAl7A zl1(V9#QNhYFU!c|P%OGZM5&IxxgS0@xKhEZ#SO(9zOD&eM>Do2K`E9SF#lCsso%o* zK-KjaMU%FjW-tbU6FM3aJC;JJ`q?;Tt%*yc`#JeFuOg&Ty7Q^)!=VS7D6k`1jX1D@ z*)KHTHC&Jkif6}FMWm5Fx@#wok8B6Ovhc9q_OP#I+k!yfb~|jlat!f?S*G6lJ-czS z`%rPb3BnXjD(0?i;6hU^3{?e7$zpk_1ZNe;98RLV4WM|L(Vr8AmFUjL7}W8qum(K+ z9nV>!zo$(@SVQ@K?rPKwABEe2sUT`q-pw|kBo^#_pM@2&$-lvG} zKg(TQb*BH>FyGW!AeyPCqN*yF%x(_qeQ@~L1;uqCPnu8(E`<_n)c`+XR|CM`fL=t@ zl*4*~9eC1(7e#{thb?Tatelhs@#a9)2mag%3>t8Ug98Knno>Wwjb#KYD>DnHLr@O7 z;4b39Gho0%2+9%=k<>q7vK)uMq%YK_`_&&DpwAQCzs#D%*{maD@qv{m7!>e|pLUBZ zh-+6Y>YG-XdL>x(zF*?K{8CD6^tM0e`X5BMiUwC$s_iD5p1Q~E*hRn>s*?1%jra@v zq%JbPIw?E17qvo;IO72Q&e;Xyst%m_6ijkH%AB_)4U1t=!(Re)XSc>b$h^gMLQkZ} z6?d0;#${;P0{>8KIYiUjCVTdy#?C=66Qqd?^J1LbH76tCyCPZUj&OfD1c(_i}f zMb0F+1Pya*j9BNvF9x6m!J@O&w6|ZkKxGqd*7FWbFG$&mWxssEdXi!$Cnh>SJbwVd zU%1nW4fmG6HurJkRAN80wreLzU#b=xnR4e`Ca8IrTdeO7Eyt|f(wk1cS|S!U=5#!k z7m>n`UQQeScO-ER^g9Opu)$4VB@`RFlwrjDXU$X62~0c-2n-frMgaVS{PU@)sUf(u zYa5Jp$!itfZAfI5nrQ})aeD{9vJyk_aBzGBp6d^QfD61fJ3-|6(5_lLR_vhPww$i+ zn>eX&Q|$_L&%tq2e_#6qs7G3<_}a&BzcosK@~wRnK`TI^14y<8%Q?3Y7MRq#_|-st z9*(dtru3A+8}@3fb(s)D((bhJXE@aa_Qq){PdSAttEH$&B^DLBusQ+LyE!Xq@-WwX zJi^yrH)IU@R%2U3HAZtEn*2kC1llbQ;p)_=qNz>s_b(A8SG}Jat}sI^m<4s`_h6bc z>(InWd=K zxt5uPP9TemyaA%DulHq3&S;pKAKussm%Lopb`(C}13{#(1$Zy| zr9t3YiOl|f;+B3v&&6xk0s`_s;V^vNax_a@zwP6Xz@y&~xEcW77BKK^Zf=5(vBvu4d2(StO$BKLkr#0v~w|En4Nd!G_o)k_H z-ns&yLfe0WLPBk}t+&0_`8JrPBj*dDAs~_u&QXVH(C9lXWPoYZe%Ec{$$3f7m7Jji zPL-3!i5g^F%FheKK24tbrZ^hxCW~>SAnNSriVomZ`-0weYw}i&H zb8|m=C=yz&ZuVs@L>>>uA|OMkV&s|k`$LPD`Jx;5yk|%?hUkY^Rrrg98p|Ix_TE_7 zOUijJkN41YAmJsvJ0EUZDqQA5aV`{S4pxgFEPhuYR9pS9LF|-p&@^QIm|5yUDiDG9 zX}FB}HoWqUg@VT(x+_cKCH=zQKNil2t+?%u@r7RyWm_0wEqfrs)t69LSc5 z^+BqgvW?0$r=&8S*`>FPUndjN8c;knKcrI8Zf)<8t~a8QoeiAxaCzsI-pV&V^2PQb z?{}&S=8%jOZC=?Ah`>)SsS|L1+ge_qlp62l!We_;I#L;cx&|eLTC zrNk#DtjDmUKW5mO`u2}wj^1>IxT)cO4{HP(!E+?SX{}a%mm?Cnz<6L_8Z7Vw=3XrX z%MNKta#VG9qtPs)_vjtQ{8@S&Xj<~_hm4N_$* zGl+d{#Tm7=wQ~=O>tc57=Eaqj4xj@D(McYfv$L~cHGUWLWvp(*q#qt^@80!$%CByi zb#5n3LR>{IJNoywFys-`I}uK=u4)e;YwPQz97j7l0M)_L);%hM$S4^>96;*W8&1T{ zh92~*h$edWA#`R0o3z}5eVV2`wM-mD|AUaU0J-uq_%~UZAhsKqG==D8u@AYr-_VAG z3I6I226ZYitif-OmF%{1cJp=_$f2L8Du*{h_SD!+HLYV+RX)_&42xkctai=eQ$VM^ zGtZG;=dvO^jfO3caTpdHjXTomOVi-eMotnH!(>pHeoy)Ntj_({u{qeOwq@V7YPNjE zvBI7>rwjX;{FBGRKuz*$IoU7FSe8AaKA+Qw=KJ!#b;x#R#P2-yAqM;jhfCsI)d9#~ zo{+6`k>OU29VVXgK?-wR75d%6WudS)CpO=AROiISM)6clKm^IXMnqjlLhHQEy!bJ| z@$R>7&I*l=(b45vo|rJ(2hwTCidjU~1CUy%1+yQ1M-?@R&;M1gIsMuTz1C97&PvK; z5dU)ZMOkNR(Q>E1At=zJgUJ+D&5HeK4|kA#u(qS}EBSj>aqa!2)13CC!DAJ@kV228 zHTU{I632l|C6}#Ur3CVlV07?$@@yG>RnH9Xn)>5DZC3Dq{DymDMA^ot{<#Bd;`d5fu5vKV*mY_I8PsCVa^TJj zTgmasDczII83(EdFp1Tl4wV)dUEPV?yy3d9Rcq`O0ZM^rcZ{VVPf zsriW%CPA^&A8g+88gY~_LVYaV{lzx-$fm8ljo6k6!I#F22VO$ix~g$@ok2zFcZ`gs zB_-YSAoW4d!GX6F1ilvtB%%h0oE-AMC+?4H%i;BS0x0|Er1 zgTYL~{-q29ewRU<6g5dhQ`4gHZBI+)?c%o3i`&IjkK1X87s4p1s|Z*If+UQUs?l|` zvaco*;(55bUxA56ttg)1W&Eq0p-Z1+c%yO*GUY5$@h-XW!Kr4@N~)SfAsmPYUI}Cg^7{K1qg^OdH0t7m00Hd zE%3E21XN$*-%dA;{gf6K$N!G5xEoMTp+KEac_^_dAN=FjtmRmoK~t*c%SE>+9N8ur zNzB2rY>32rlee8keJ$?ah97Rr%hc#MhA##hke9C^ctRJ$Wd1rk`?|jzUvH2O<0*}~ zm`CtDlQe7i2LI60YL7E>n`=I``RP_!Y$A^P&m59+ecqW3T(MOogeyA^+=aB+rRt z*FUd3#e4Ole_|mZ-fA)Zdq!e}flfF1}ySk^vM5s7%<};N`u6K_!wHwB3fg zj;qJg%q`U>!^Dd++^k6l;FARgIe-!paj*^i2B4J4do8~hT5E%_7FT8ZX%7?dJFmbF z5>V#MNk>S$kb?nVV%oPoV3$$(Hayg;y52tqS##8UB-8XBQ=%XTYk^hcH>FcUl0JX_ zOdR%);EjO0Kd$e$vyIQ^?qHWSkUW$!N?zBe%)pbHEUagJTDW2dCN zBM+>HCl^nHMioCK$mS^QB4D^l{qmydzE|*DX2UsjuVV zOsyqOWBGKtHwytrZ;_T*R!Y-Sik<6{Grp*pUH~Vuw>9M9V(I2wCV5ovoivvD_Xgp7 z-|ruQu`^zxW5Trb?zJ^X>Z(@UIT%i>@5;2iv|eDtUHMT;$7Ou*-u2HCU)`>DrZ8le zW2dpw(Beu)gcc9lBD)2oD|^%v-ULRiz*4jT5y!XjcrEW$rYnt4hK5<`gyvAgsrR}% zo${t+x-W}cUts((tR9CH2t6b&3ON*zaE<8aI4ljCyP4`3Smt}|VKyRiH-q_r#AMxz z7d$6?Zr%XS;%63cFn0)w7- z{($Hajgy7E6cABv79oi7;!vk>X$n9-lva;7U_lgRZfV_=kRrDttBiV-iBW7v2qP_X z5pvi-c6z1H5572CGHRSA2TQ+^gDa=PyO#P%5fqR&0ylEj;UDC{N1pc-Ct__zMz>F$gD0LcQCdgdQY{j09^Tpy;3|>{aS=IT%TuvLFpi^61>P>1>Tt{Uz3zrI zsLp3o##+|zzMVSih9&7MQr6yTWB!ghi`-VQv(ezFR$I!RQq96$XueTBRCwuYPKIU zWp*GzaeDja;`^)jX|t`BDVPErHN!ad+UgKOJUn1kf&d%%*jW4esq^8&=9E41o|@ORdbOPlSBV2YqDT_eV{~3k&3k zp3H#V%INzRIJI7bs5Usyyx*ZtsWQi+Asza!KCx4-8?YjScq}lw0GU$I?QCOmso!r; zjkl#$^6hFEl&ZuFCS`()xUNm%vdEICdx4Zdv5~Qu>wqbU`*{h0P}kkPv98WVNeTCY z5ZspVF0qR5vO7hpP>l-pJ{L~428bxwLs``qcGTdlFrkgJyI#lbgXx|A zK-)7s%%K#494o13)@(>DeDF24`DZ+&|;yOrT}mwu*oz-(-wieRmeZ zI_?&HY6j;IT_0RwEVuA8)4ZuMlNB9M^k0imKEBcHv7G+wLFjWl3HwX+H2Qgpb$~&% z{{9N{!BRs^SH*}DqpkIK|F_meM4j0b_VyM1hCUJE$Q19G)e4kHCGV#{feC3qU?7uD z;{`zH1V=>l{JHo$G2x5AqTT59Ie#)PAz^(Z<~Cpj1y)377?xc+K2NFxIC2DbBp~u1 zk@p#b>^lSqYmZW@%E~|5eoPN&16tshv^-Ovro!@aklXfne1HMy6+mDaR?VMG0EBqq zI=|zo+8a2Dkh!k`ed`)>GR1|3Cl63V9%7M(biu>%@>3zXthD~2D?_&42u*` z5+N|9LG%>j->Oqw#P4ABLT4>77*+&>j}E8n^8fuVy+!}V)5$Cs_*e-!&_7Bac$r?h zx9VUhT1bDlg^60oQyqu=?ZbpKri%YwSbG)Nq-OJpNl;ezkTfn}3R za^owX>%)Oo1l#T~~4go{kcj)-IB1D>#?$crjmok*;@<@96Vc53`h> zzUORwd~NjLjDwTEa(>HVqF!U60@RgQI;GC8F6%|)*Tf5KtR$qu$~w!pHx-JdfFpg` zS*7!yb*CDLLPeJG+V!(kaZTR6KANS7rs&$5glg*^NI>jdtoSMk3N&|jD46=%F4g-? zx`I6*c1EZH4!~V$c3_5Bp!Gw#XrjI?8@E0ev>HJ6*EKPOK`#Lzl!@;PaOwGJ7CxtB z&y^%M6c2BgFRE)DZLJsnJ95O4sn#wEu$Ogf-KFkX-NT#AX$TCcFY$&{ays~8>g(&D z7T$qt6+F7PyZIUV0Q!;}U^|p^JO*OY+r9{BswL_bAm#?nE#R|*F_l~jXDLYg6t07( zx0^MfdqXb@9u~^1@JOOFJ9B7wbR_&|c(~>uQ&CBYR9uBfwupfLOD3lO$a80YhmBxs z?VpN;8!1>JV)tJ90=&EnqGTO(7ISNtwC@i2<#ps;?9aDk2lYOK5QsR-dN$*KD_>e~ z%em{SHQ&Xb2Goj~yCPUG?Nq zkl%Uk=0ed3$`gQ%MECI>JCd*kmrXZkt<#0JG?Uee6LN-GzP!~aXEY!1a-z#oxIE37 zsek0?jeF`ENgk?%jQuNO@05$k?8=PqZ$M{6AsC;Me>fhSZBcFUi2s?4)*7u#r+S{e zplGXV?V3`1#hmDsi(M_v!!fbNTUuX5$?>c8s?DqwqI{fAm$|_|Pt6!u@qoT{^}+Xj zb#R>OfGzT}vdfYr<44@|6RC;SmgF2?Csso7i}wxFOa4`P_6oLxX)JpVzpu8ZS@B!c zATxguibfDe4y!J{c^577Dg5=xqZO|y6sS^HK)SHFK&p>#+8)!1EQ@sWi8 z6TNM+-F`}BHXUmlXrAkv5y<6%JGq}p3J{U_jC zKG(SC0~wF^PycQW;2sJM3qwOgV+@PaqA;i$l!#DVJn!6a;{DbG)|TLaiNNo&>;=qd z&a6qtz;@$ev?S%Kb%FDy^?kKK-SyjgUL}|?SHhg%=^QZ9V8a7boI;^8hyb`u;Ycil z9Cx*{ZM!{U)R4kmSs9aA$++3s`T6R~k$^S*UP{kHzF8^;7cJ6@(F>57exihOMyICU z1N1p5zw1~{4)E5yy4eps6QkV1t3N&n(1$1Pv81o@$P?t9OL;>f^}9gMIIaE_$8W`y@eY7K;veY zJv{R+VN9&FF4)JEqQW^K;3f3^3szSE9K=I!QgBpMQ2uSEO@|ClWH)*!;B|Rnd zMTF|xU+A&&*4CpnL?tui>b0~opgtQVb3Ik_vSou4GO@acOQRsTA^O^7*7$f=J&kOQ zcP6%e_I>)|j1&r0aB2hL%(l9nR`0{ne_sBzN2I-55YW7fD~TJ-j~pJYJz{_A}mCrsCjid8nV@P`0SLFS2>2d?ihp%odk;zxo7!4=A0#5tHXs4BADD&YP~J~kb3 zI4xf=g-7I!=UCss>0sU`wm#rCK6=PIYn(IN!K<5D>ixcL{&?-ZIQ3u+g+>wi-T**-o=rR{K9Myy0PX5gL%k9;EQv-BRY z7a;Xpsz7(mEBv+1t@}fLTlFG4dJIxtF)E}c#{Z0*hK{Rm z!B6q|^(gal&=rd47*Xx1KbK-?y$(kH0rf`p!}Y{cfl-tUOG#1D0*EaF6FPYEx;i@n zN!Cx#iUQ2h&|JHw9{l~`E9Q95bu~1Smib6M4X)Gb_q+3}eu_8j_E5Gwyj|*dHvU)- zNfUV0>eWN=SxC=gZ(x}r#*6yHe_d3hi32u@UqvkTC)fbpf`_uVR+5n0-IskeIG?w3 zv7(p#(Uf2f2y)dk-cVo-S$_=7#zjSc5%U3O9J1kH9QE~9S)@AnM{nnSwKFw?E5!VD zrz$BimWcd+ha32n6+R=CzA@AND`rfxZ*rWu2umOOEgGYd#99pWv3PRWqdSr*!K6ov z`6)gpx_-}n<*}YECjUYTrxrBoYD1}6;KWhmV8Z2|3(>~SaYeG0yTs4j50pkCYp;~w z*JNdNI5$bWeYeBRmuRdIfW=wclNA#jvTZAQS*#N5^y#8lHwBY*=e{EaGx=waTZwAO zVp$=IozDlZtHxc$_8-Hl`0wcGZo%SaAWHLt{QxJV@t_Db`tyqmEYt@1QOZwk4lXd^ zG&wH&HL>F2tZ9o!u%=|~9W6K31jNCHZ3b%^^2}Hgw>GCaU_KpN$)i7|lF*!+vx(Ey zH@2r+2)XDfxyA>)7CDW~Z!oXwF~h3Xpr47UZ=r-7XyJGgUJoP+Q{k^Oe#k>xFiZy&s;hU11=q&H9F;G#wt z9uK;{O(`7u7S}mLga8q~Iu!ol{ku)l7Uczpb;R|J&#iRE#llRs5s^$8JTaB76-y%P z6xn)ouZrIA)zVhsK3qGA!>_dDAqJL#X5rU%n(zfZ0e)LuQJvR(dgx!ifwHZI9D4AC z*B`Eoj)*)pvGG4}70k0c;Q+|v_}Esht@G!ES!$C@%F&X+a>L{+g1*54)_!Q-uLyP6 zz<}jz3*VfS0jYL8Cm()IU`jyS@#NVr@5oamgJz_O1R$juwuWffomVM`o zwe0k87NfBL5NhiBMW0?8jl55=6s5qW?I z#*fUD@EQ*ffga8$v#E)XfgxO9Tv}euQ>nnI>MB-Jh%odF9xSx92DawCz0SNWojN)p z;h(@-f~`=IXcc19{c5Pos97-F7;guPiliFFeeVSlb5(}efr2ihOJYlbaLyN zz&6a2rH4W#fKRS&Ben5B^|Dw0?PalP_`<@1J1ztMpfjr7d8rl=tS!5imZlbXm#^FW z+q${_WB->> zTPnI7#K7U2jQDj=}b(i=BAWhE48nZq#dbcXpn3 zJAz&zPc|ixn$$Orx$Pc@7rsd-3=>T;0Ka*H+?5inuN@LHFfgk~0UnTgGbWNgIvA== zaWnu%u>-`nw#1vLAa6;(aR=_yxjFTl*JNZ-xa^+{(Uu;xYOQ>pw*!+PptP?VYQ~2+ zp#q!Zm|~j)&}~my2*E$#Hz;n0KpEgaOH02N^126gPy&+sxKM1?)I;xAc zzXx97J+-W-9&u?Mgb=9=I_6Tg&ON}Ze$U$TpSivw0E{;Xw6=MFMAM#%Y#^pZwptN& z^+{?g<$NiW$n!Gp$%Nw7NvEs!s}wBV=kRb&qNc*x^?`o+P%axVH?EO>8La{KOr`Ao zSu>zMN@ji0PALmm1uZz+`k$N0Gd)DVR+GEqc{S(Nr{7wURzYjRuzk}l5bu5XSS+UA zd3$@SSEwih^YCaYkCK*_mX6M_5o__C4@|J*=$! z_L}B97>HBOk{+@-!fs%-ojrUPC$+=o4ODy(Rd)ju_c4Jrc0rG;l5uu<{K0rfz#<{% zmDbke+svxl_y2`$FJS+~OkX6UUxzz-1a1L5R02yH;M6`cLZN0&2QCNKGt z7-u2$>#z$0ewrNReIYHqSFVAA+O*}~k6wdhr69FaN*v3mVaU$$rLIQBdJ&OQ1|0$! z3n|L+8z)odFYr>4Di+-$eV50fFV2Dz@Cc-ZEi8r{9oXL0q17bTt9VJ|r~7O4`I~V_ z|9_b>#O&Gqj<4YEtqgT|?h@x(AD~cPnCT6iBb zJ*-r8%Y>`ZBNVLlUIL6JutCcAEy$sOg`wA0`S2#j#u0A>puoK;iO32JRoK~j)0I8X z&0xY&$iytVq#PDgQ-w+Z4|QGF24keA?x|UK6=}2J2Mp4GubLt*H6uDQ`{tMFz)viS z&&qd)U9(s-8tM0m3WP@B_^KJKc>qje$XI@+rGNu^xJ`tK8kGHzX}negD35QVwl&{# z0=Gp}p#F0ebVfaB>hD?Jp`iQB0@9=yytKV&s2?F%7mQ0I^TUG#%6`w&3DoSdOFVr1 ziQS8hjSch3JfP7?MgZ za^K5-97SO+C7w#>H`i6Gt5()%X5VvC$(KutVoUT=dDJ=m-eD~&pLxET|@TwsnVX> z_e&)DWo_^B>gre0)w;^cu_-BFkEY#x$0@(}gJ(SgsAW<)tu>8}b3NpHIe1;AHu4Wv z&a25kjW~h%MOj%ZJc?f#-7Z+ z$EZ~cI9Z?~dKJzhAkb1%Gp(==VxQ-A&z728AWe%|WoUxT&V!S?7l2qLm~s4<%_ZWd z+BD}uUsiTFno<(*pFvH`%EksbC;|lDmpuzg(Wmolo@mE(EyIB|(OAhD`fs)i%HE z_U%h`K+Uu3x$zWC7);}|CUzA~ANH;}4)NM-c={WU3O8dYSde(ddrEP!QlIO-`76_s zp9Q=CJUm3I09*Hsm-HeOWKyfGXBWx*IA9cewdWs^2 z-<4Gn9^bPvM$sqkDE?uPNJz$!lKpJVcwef|p2z{;pg7%bL!UbnKe;!sTRx@M-uaP$ zxN2A32#3{@3}j0;)|R0gzFEk2HG|-rf-6e@9wlcI)HJ}6sm`&o)SMLlHZ=&dv{s0i zj}u*3lS!{v7iS9cW^xaK23FKZ0WYnO{lH~L;nGL0E>FdfBLI9C|9`mDjNAR<9XEEy z_p5pEsJBZaBs}3l0HW2$dg1v?6|iLJa)0{nO2N;s(Bo?A4d0B{Wl?3D)#;Z#wI7-M zveT1WD1hNNHp3D24XRtGZNvubZ22Gp{?Ad)Ww+WxK80KvDGvf0_hewaz9@ZsIy62LPYi6%aW!+Pp56LzW_*>ZHLZh3_dv+;3)O z^%51;_c`s28CWF?QcXZBEG{jrv8MZ4QHf18NhOg);F=Wm)>8?`)e=@zQ`7z%`*K$e zf8Gh`hc|ZX@}KtTPoh?my*Su^@L2)KS9SGVnrxS0g|>9ty0g11O7F6VOqyI!F8<>| z)hLjiuA@W1&F_b~pKJycj8HIoPYh9(ksP1}A)T?@gA8Qa2b}2TAkeLI!!@}aU!9$4 zHaO&tvt!b~ecN7yzSIWPVWJm4HXXCGF8 z;1fD*q6a>PH3iDE7xb8))g|Dd(^z9uQ%)e^0c@&F>gDYUr9ad7T!2-A;n_4vII8o` zg1;e7{tpZuKrr4U+6Uub)qGpC-68{*DRvhYjl*T%=k_DAOEw33s?xZ1`|TIKnMM&}7&j3#mXG(e2qE$Jz2iWPaxTAV7ia}}eqfJvz3A@idju+O~8xc#& z_inK+2d%_vQT1Z4SiJ4AC9i6d_fbV!y48H>=ht5i3o<>;EYM5(WNe|eT#6d{I};b1 z@L`80wnJ3MJAw(CX3F{!U~Zdgz|$cvO_6K{NDe>~#gzS>pAWVLzv&}*@fbI{eJ%qC z{6EMdAieyPKXL$j3elV6g}p{4`0!0TaA`xPca%eE!z6}1Ql#fMhU zz>S12T@GX~qt{>mY&u}WgK^0y6WUWkz;R0kHDK*;3{ge-`~iWUr#&#@P09|j`xqM* zx)h4NGJw4wFq3LEB{x8i@+jQG{!hR?) zP|go@N?9bdK-16C5$3w<-&0)7tHf zWdV)`U?D!iiNG{CgWdd>WuLuB8;&O6gN7_whauO4y7;Lj*F!Xcg<_vDb$L@UA5TFk z%a!jQ&Fe>vPX32QFt@dp2cdeLa6;Ki6(^?)kjn6IcQ4VDQfFA`46yLn9GnLGTsu0J zb8}JS1{B*S=wJB`NC^gX<|}%-#gRs>M5%Lh085jXNvB_dO3i`v2ZQF%ch^7)NFF>PS)E$B4od-ak)XC=yT zvy&4g(chhPW#e{}24(69#-BvqRny=ym&S@9+NR6Mg;7oaQsfS#LV9wmqRChX zi%XA%uMPRkrL(@wrE$MpJRCV8c6WmQ?Z1=FRcY=>X+%vJZ1I9McEewUis0JqE4+){ zGEtK{0~7FGXwV3z2wUCDDF{iRep1Dr;8M1palA9dB->XuE$y3fu^%3|yw$+A+04J= z7Yzdc3#_6|M0WZRbog{xU?Q&h&KY5MWXwtFSb4sz6WMWCAOCll2?QnI@UMC8#5@+- zb}Y-Nb-w)^+z$L^J4!6(#owme$h(T@S5CDLo;*U2Ehlzv9MbRALUU1DPd;Nm&r;_s zFWbZwkg}f0Vc*G~wD|Tuu9v|;_;s2bgiHT|cs5 zaxMQcT@qCcYHbQWa(p=HXnHMOR=TLVdLFbYNVe4DM7?fGX`CPuc(+eYP9)3#;xZrs z0XDZI33Zn6SNrphLRT_1^Tq~G%~@FeD|78AWhRQ)vgp1GUF zVf{JU?T5RHrt`Y4K6pxSXTy1uNy8zI?K-!*Q#^@bLlZ!MsX?XdXvcG|$NY|>iGku# zxMzMm(qu_hqW58jqST(2G-CvpU%?xT;Sdybp#N?JMr_^ohxRHI#-@W`^OGy$Yxwcr(>CP3k*VF*w?) z;U3Ux-RI%T7r`Np_*vxJ9U?EekC_(%qzC|`dSXboG{f=mr>)@Vsz*4jSzgNQCgmwj$B3gV)F2CToF?UuV*? zW@>_|9J17Dq6g?LxQ|N(Q5I=67+;SYFKnI1aHXd-pWd5Vj#6zYvJ*3EJ}BmzZ==kT zM5bdAnm{3&4qgje!CcLlW&C1KT`W&^VpUxqrHg6!1+@X<*?8XBhZHFcW+7)==t;(C zru2c!C-d&3|B-4?SCRm5h*0ZzZx7D<_cMum|15pG%6uBE<{?I zIycvMX(=)>v9ZeZ99!&TmU@pKcE`o}E8RpNa80E6kCarv)cX7!)BC-r!+P}GHX8*V z2F!5sUgqg-UAV)*txGbT=7VTDnvO6^u=E%B{yO5pjU?2fwTfSsU;ZkV!h zVj@}0pYW(Cy-K4$peN?z;6U@k#0Cy zXk6ZIteP547WP5fOHNkWCjZqD?ic{|2gk=3&w8QS9L)Ja_C}?G&NNL2L}6Sj<5#`G zY}baLC;>F^?%VJg`RKx|DPY+;c%cpV_5H`_8=YT(t_1qGN1ui91r-CIPPX=K&Eve~ zHQEYswbO~9uKhvExBP#)p7qgwQUmf3J>ys>3L%q!BPYuDc>LNTA|e1>1jK;VO@QfJ zDXX(K;o87t%Ckf{4UC?W)b6IwPvx2D>IJ&q>({TVDl6Mhfqu|Bn8hpsMtIi_T0&=k zGU_X^;=N0T+miOAsHpyAesrmNU}vQG>vfw>zA{cpXhP9;w|x9?me6(&JN6zO8ge@1 z2A-G;-jU9gg19?K>74hs)$~ttNJXJtV?)6v`s>5<_Vx%+$a6Gy-R~<4)x#+CS9(F; zAen>nxn@U#4Bb-i6b^V3%ANFLha=StG-{9cqAd&My}y6@B*7};jJ|CzA^mvM+pB?}UEO={nK}E;x{jW2UbFCL@Y#yh zL$OU(QSeNuv&%y7DU^klrQJ) zlts<_KNM6{3k!?RnT`m>_d12I#lN(5j>}n>20L#1+OOb~bA*xNnoxPd`vz}n*7sY~ zZMFGI8x+EKwq&HF>=&E@lzGR!egdUrWc!mcTA%u7z9ra**vS0hkJ%kj+wvd~uhba; zMrNtBEW{O94a!B*{*D1NoSjJdGr(|J`N&@TRZM1~gmL>@OD|KanQ8a;9KH+sooiNU zUjF3A_x$|#ATvjwF&cz~e&O$&`wJj}e0^Tw;RX2n^GB4iGPGa*<_f8%Y<+l(=t=jq zRu-Y-nj&FPhcDRUl0HP6>-*jMsZSIO%tB-(XPz&N@0QXXjxWR#XbAuKN1mUj0A9Ui zACYpK1A0>DiAMW6+}@|z?9ZP*owyko3$CSU$?U&rrb9vb)4vX8Qym>0CVgQ20zvZv z5u1rRuZ{f9p>!FIV~wiV23x@M5lcV6!Z2-fIWD_bGsOzSfeQLil`ZkGM{P?&@ZVsxSmoh z#g&l;)q5F(`mNvBn9hI*TpOby-0ErtQ~mq=-PSdcJ#GCRUEwb z^Y>9%PEoa1HY1QI4JFRckuJ(Km&?&Pad2@NgLt>d)YD)@gJ3yGjnPa~@%eqEn!EB} zT5|GJcJ$IU2MGc<%9x-0IX{^7=~ck06wf}r`MGz+W$_=96cM}3uoG8fy#j>AIz>jS zxD|RtmHM=74nCm}%*GR=)LV`0slkQhWlLmEqx)_A1WUKUVo3TX=fg^petYgzY@8SC zl}J9c!@V|oVzCRNPEpMA#v9><|U+f}BW z<9SsH$b65C)LH|?(lgbXF-O`h6jzE%zkAgNhu_zK|Cc%g?u!>y-UFfy3T=u77csSX z@;jKVo$<$G*;TM|HI%&?y9IRD)W5>eJ{2k#s=OFjNy`HSnlmI(ljI+=XEqf zgDhj0((xz&nT(De|9d$62Q-P6N6Hjl>bXH7I_nppdzt z#w3pNg2W*Q7t6zG8cYWYeYnSlTKsnJQ)?DcHh1zkQE4vJ*Wj5 z-EQ0KVqDUSQ;P~Gsq62%SD}{VcIh8&cUqzsWJ+;g!nEjR>TB0Cq0_x=E`H3}wZH_) z^Q)X?WLbs}FKMnr@~&V&bEN)9RRl@(I_VU$`8Se{KG>@~QP}(9611cg(gd)iA&6SU z0ASnR+O}NIytZwAg223)0jXKLg>%`G2>r;U9bv#64J z@j_RF==A<@Etz!zm_%%g-f*kqGh~9svxogR8~w~hWYO0CT_IX@vJM$miO`(qcobe^ z_x(|qiucdAK!OFnoF@h8bWsHt_|Sma8Ye7BQod@y?I{j)Hl<5#P%V+(j?vI91wTbeAye6ZFJC7Ae)2hAKItZUd8-NV`tF0N}_qK0gmQ z-{Psgj~Ol3KP>6_&L2i;Y|oA!{w-e%{h>**;*7CkEmT??;*J@XF=0(7@(9g$?QKz8 zvO7k9y=4E~%Fo)0rI&M>aFIRby@D(rG72Cs1f*oMEI;tUVeP+D7Yro zc)hcCwiA2&edPQj-+c$Bm;N!=4tv?15&kc4JL(GkiEXly;$o#jWgtSGY_|a+|Jdug zDg6e*i>G=ol|2R#P`O@>M3wZq93KfqkhBb#pxX-P`qQ&kq`Roj`TuD8?szJ^|9{G! zA!McOm6?&fA`)d?S=S~bGnrRbLdf2mvah|lE=e}od+)v7T>MU-_wW0s$HO1@o_ogY z^?W@Cw-dUjFqNC0&THo;>=`)w5q|Rlc?iY+gTd6E9=7JdUjXdVy>s#sR{6cU8CH4G zTko`V9NUL;7fBG%ybN*Cms*zUltsl)Nwo)PmUE;SdqI&c^RtSo{5Dd@+3HWl7*COB zmVM|zQO4@PU@SJet5EW0F{hN*1_m>elVZ;&?#_3c`mY6Tf0ssR!#33YZV$^30g3b` zd|_VWMXr7I5qH!bQ@KL1zKpNoR8ifO`f4}~mUlN*5S!iIKV7Vb}I-o5ujTuA5y zc(-6-sDVfcz#>Qob5QF{Uz|+!m`jM15^(0-UMboSatRx0;lc>;~ABl=mzl!q&AwQQ%DJk1R+W2uUy)Gn-JDUu4Je(6PiuerdfeiJ<)Dj#IvPp!Fw$z$bsOxm~(xx4>EUur6} zy6WYrCYE#3E2S#jqZx)`TGwk6K4`kmc(^Cl0}sm^fM*SWOe=tUgIq_Twr>e@xTeTm zw&m3`Qnfwnb>m@X4phz0@kf9b1?YNw196N`xCievD1;i&aW>6Ycnrb|W-vC8tQzXZ zIYU40yWz5!L=M~7J2>?B^)&+%e^XOa;Cu@%20(VbR9H4)DwMy~eC_$u2#U^XrbK(X zfB1kO+zv+8m#5%vXdPR*i*PY~j<>MAO%V{kLD-|hRSFy5w_7lBSzk!ZtchpT@9ixf zfHtQG(iTBpEEsc@3Ovhvay)p)G+bC+3~j_%yAAAF|5+Rd%RAS&g2{t|LSQFtH;u81 zO@tQj?W0{~+G)kf&s8TOzyW3VfZ?lh(jj*`5`BKIn%Wg^?(f(?sl%zei0M%gCk(s7 zx~vnQ0In}!@Q#D~;$;F)GMFlm`dun4Y$Fq(M~W%I%62leG(me25th$uTKNd}Uup2w ze3uPaqrtEZiCg%0tTNknnaX2clq_NWRdiZvU(1bTlp(>u0~CE=7zOMU7EAg&v_GbQ z+}G}SKM|?x`4HiYg%C_lZ#1FN)^s*6{Gxb2T6LI-4RUH>xNeb__&Ni*S2h!}cIp+* zcp0DR28a{15mw#=@UhiUp4Em?eTo`|qLV>4H5T%0&n_SWr@nvRZ7W8(t?P~SQE>$s zRa{V0uEsobgau(XII?gh&q zU{4F)GVqvZ%T0@hM*i7y0}~&r;w>0B)8)=dEWHJpGL)2*WTA>`!NYWeM(GDC*!tez(RUhu&ZmAdHzaW(-?rg*`zuruTc%B79lu^{;46=iTphzy7UAtASq4G0Lh^P~6~ z4gj7(h7=cWxT>XYG2xPZfI8!l?OJJR&R;La3DU@QNMHx`vp_{-VvZT5``eL>S|4u- z@UvR*zfE9b_tM5p_jXSwp;b!-DjNuL@mD;JRaL`$4-+;wH#rku+TFn-CLVC0pr8Q3 z*uG^y>0p+`=EAz<{-&@o)tvq0_eboAKijYR9yZ|Hoiu&e83&84kuHwycgE;@`sVp_ z?AkLKYan*2sd?e0g%el-6eM(_?=N+uAm|>Gr_UahVA8eATRxQ4#A-x~l}fi{{aO`C z%krlAdN-Z^*;9GG);v*{cxjV3kUs5?VJtged$6;!5Hu1#z1X^yxpW7qBJ?gmKB z6i5=FCvW3ESVD9c{u+dj>TCUp9VmWRZFjL{({PmK>#aTVi!iUg&wVBwGV;zjDv5S4 z&M;I4AA2UjDDig%X?osG+5;U3M2q8os3KD>K}+CbApa_aJa|bXwU^-31cY@w z_B|o?oD(;AH{aYq|LJpQcsHG>F6Iyv3LoBTUWL4P%@72AR&OGwVo>D82pv9b8uLw8 zCx929{BoyZP%#u{b6q48{7azakSWcEXiV(A)BCbX?7_xW?ywEW{NMwO@p#Y!f!Kq+ zx`jyV$a@^2mVcYWjFW9OHE7UC_-h(%7fVsWQAOwxE~1Bf=}q z$HDBy1bK&OC-VW)J*VJ1yv2ZQlj2BzWgU`xw;}gdzNOo6_-BEw)pkUOiACG{j(FmW zL&Z9w@TLY{$dZmQAu_SEAs#c5kc^g=fDzaT??Gy+rtE{wxUMgC@-o`!XxD0vMrwKYXnBKp@{)tG_10 z&JAqwJ-RbCx5aPJJ#-~2p(m8rtJV%73*`*tZRkLdCJjC`XsQ5)b8|mp0fs0i^wC0> zkoCG94jlr`(vX9VM{NansN!*{Jl|#f&q!#4lHTjDgePY)$TcEemi)c1b2*9O{2LGz z*l!s;>+64FFh;8IPQWUa`Fy7F_0o*^vhi|r>^pv2t7^Urz_diPPM@H%I=x|Qzp#4~ zzLfiqV_OA(68-4gD5_gJR>$8&YS;=NWA^{_%buwFa1!3};t8+R1|#`5bYR_eg5QvW z5#W9S|83uu2vO~9g`-+$4}LoI>rO|#6U{#s2CQ#&e&8ui)DJX z^7jwBPAj_F85T?k!N6XRM_c*6eOub(PXmaRY(GFo$`ZZ*;Ksph!-%`q6>$9kaiHZF zgWcT~3sd%j0_J9m7+L3~b>i|0G$EuyQ4E3CjsVi@`}VD|Zebr@%FqdaYWRMR&T+K) z!nhweKm%CJBRRQtI_;3#x)^V1w4aKsH=w@t_arBElBfp%iuy6ZL5iEL#t`Q5tB#G4 zcB@J0IVpr7sb0>=rU?u`mv99gcupupjH3XOO|(xDjj_FVxW5R$(mUoB`=F|#B3E~N zUWWh!J=v5a{;0zLW_S=T!lBfc{`>=Kjx^fRa`L!1ZkA-SEDkv1 z=oB-L0h4^``~&jzH--v(E8(@qJ=z6i%nJQjL{>PEs^MSig=W z*VaP~7mFVOxn5U4z+f#s>t(v=3AcJ1a7_lFcLwYKeb-Kn^r1n<%!-&v2-@u8A#Im1xwL2HqJ;*C4}2r zZ^RLK@g!`uHOEkh`iAE2moCC7^`rN;0Lty_iah=XEv;RFyw@d@Hz4nhLnh+TS<@l5 zcc=%X?^z=Qpepg7tAFrh3`L=4wKO&DBOO3Z;###)5LaI=oaFMpm^?V+b+3-b-v_UN z%MPuNv$Hd>wt4f0%$~`owPl$d7H=?oRS*>6SuUUE^ZGii((tjRYqRdIhCRcHO>gxj$G4#(jW zOrFPaV@qfP>N3tk5Pu3l>=d;xsal}m1-{n7^3mNEfZ4bJYsZE$opxU13YqKLP`dH*J}nKBC-GvSzV`gTPQonj1ASW?m+%Yhq zd!9RcadF{yh{SCzH9d-i66@Jl1k)RpXNkXm$OgymH-M>35u}KcP#x0_(TZz~jaVU5 zpeO|&X_=7$%*xu@1T{9?ZHr&I-`zuBi<8Od;RJ#VrY9A8JooTGU@Sm4JCPh@de5uh#HkEw2p^J0wsHft2*{#WMDpB;yNHG{}%@L5rk%UaZ`I9!n zke3u6zoL}k7o{v`ylS}ck~tI#f>0h{wAFdzQX!7G4W;oSdy0yRY#By}hCnQlsb3wQ zj)_$Jo@b4)<+muV_PqOlcx13 z2oq7Mpm+Er;#*gvz=M3{`T4dm84EzM{qQ60oFCRyhwibcJ@u4%ID z>Q>B)JxkL!B)p*pmJ%Rkha^H0m|K$I_zawHvV;5x5*vXQ$K!xvfG$Qu=X{1Tbb6c{ zZ?QH3-yXp0D{$P7%e`~ktWc!tazu6QQRd_StK`a#@FKMV1+vCwI0tm;AhjLvIXqqB zDoab(YbHj0JGKH_Rv>b+^Xl?L{@ts;u)~#oCX+qxL`eKpZ;~_-ncgR@RmSF)AUojc zL+N-)6P9r8tg2NgLMWJndtOid%v|j?m0X6fzU$xdH*RNKg$yv2PZ>mi-e6g+F=qRj z23?DDZWHZ%!jP0tYGZ3#N%}l;8@!TwV=|@zw=w!f<#m2cZG3I&VC#O z^=-VGF5(Y@ZV`8&d&0_OZsxASwqZj>D`Vrc9^a9>orx5f0GU^V~8*LU8gECfnzXv29ltAVd?89KhplZ=da8Ayezo1!tzE}S65Aqh;8ZU`X^jkO8aEZ z-}-x-7oL=I&)^_qCtUn$6pj_|TQ6#I^v?}`iL(@n0Ja2mh=mIxHrO(xnwQ3&&ir7c zOADXtU&Bu+JJ-GSMdh9OnOU0ULx6Qr@a1bhv~ z1qAms^x;e&MH!H^&S*3bs!y_7KMKznHB|ce7gf7LxP(lCGb$dFe!t|tU3AUjF%wOK zYAPSS6f=7m1+rO}O5D@VJlf%xL2j!2?eKdq>B6DJ3DNS>927LS-ap~B80t!K?ChCo z{TSR|@`;ny7@s~MBEne#!$`msvlnRsX;SaiI%hHE3#oWm(!QRUqq&pSfSx(XG&tk1 z_}P^sR=Q%q%3IXfB(EMvdkn{Di;r{WYpysZZbTCOD*H1S?Cjg*$pLHt6nTm8=3|1M zH+#Mn882VOqXV(-0OPXaH^&BO_x4?1j~ltZ)!%SE!!d)@UKyF!d)xQ?2tTxZX6^=5 z6OZ>c;`WTI>@e)qWwiAyjAxwwzq^2-?+Ge#?B}t#qrSxW}5Z#fGxvGv`r6}#p2sMgUvk|qr)>bQgzgEE&sc>OYZ5$|r~3bwax z#geawqhMH!eusgKZCytt%!fhH?8&5S#La?z~ z>Qm{)-QC`-&1iA!I7~Sk^BXVMjfP)gJ~1k zV|cFw#KgpaSw@`~`X`+K{=b7xkhREzGbr-~T%p>=N8CY_j}CjpzLfXzLdbGPcmq|- z$j<{wP)3HmA1MYpDc`%Y9__}wn)+TKk}Ui8pgH?n%WQQ%@4^Mkv{Sa-%+>` zN-MxM^zYS`FfDQBU{q+R|H>o?SibsNF1ZRZe=y&M2YW8l6r`a>sVhaLD@88tJ)7v4 z3N!m&N$5;@@{@#^D_LbH+K;&yLgN+76{p@Z8+Vf+n}Z#W_XEA<7fc{x2?B-z)f~9y z5~r&xD;Qj{ffarFl&+aJxZEC1@LX?5oYm#*^i?A5JEMfhy(QWF3wjK#OZG9?gfP}` zn~^^?B^p}&EHA*L1uXq)e*iCQZLTqmOktXziJSY<&WGi?jL9l(gP+;x{*P^PIoYrmei^h(`Co z0YgCoFf0L)8WiuqIrR#Vp8(!Lh8OfHjfhwI?EHLvV3WS;S{l%T-%aE@}+5rUr)zHu4r3AW5TYL`8))(7@?KDHX zRsf%8?fPOt#`8E&DHjYVXin}`b+hbk4t-HP=kscU4XKhEGV#<0zF`&m{d_!m;*ru& zsArFHZDn0=!Sm1Ktw-Df{%uWunHP(gK49296>=z_Kaz?~UP@!Pi~&DsYx^{8qxR|* z=ng-~$@vd%WoHT@dn;{*nLzkf1W48-P){G4SgKXu2&apo-oYi4kyWPV*}$`l`$-&Z z^bXIqBLPbD>aJw;udjvIM<_H9b>Rog6Ycn90|vY|2*3byb00+EJ z2_?>tEd=w|NBg^qtNs*V1+4u1xlyx+03Y8VBjZ!gyy4`=27;BmK^Z){nFF5<2|ybF zuFnG_KQy|u;xjMfH67B>@9ni-sH4WlaQkM%KA~8$qyVtDy|snPyhSn2yl68(g+j;b z!rD}q&$R!$P66~lX@c}rw6tW6R|VcsJU#>=PbKFc3`cmy#Aag1&e!ysJ$R_$H2`ixY9B=JZyhnHFP}t^@d}t6JFGTy~;c;=5 z>$~g&Z>+kCg~YZe48%E{|@J+>7*?YH4n#|IjuLZA`954Icq$9g9}U9sm|8f z^vm5_x!BJTZVqzd0-GmVg_)UVhJUA`#}rZ(<(vx_I%y;t!c?PI^96TJop{I;=hJQ$r`@AFwcS zAM(z3Auxuw!Yx2|0UVcJ#-5&@A~<~G1O+H%0UA*Z660fIYd7Df-&SpdmBEr#WSTNQ zO@nsp+odL8J}Z6rmTc9G^6_k`#Fp6gB`(!YUvI&iA$6ar4;R&OnmB|)=Nx-KsjUJB zDBia<*JoXihCDPTj`dvBBp~K_%r7pGVZqAIjzF!aI@$k=|C*uvoXc~S?-~pBw3J#* zUDj7yftvDaT`g z5qbNTo-W5KZ}&`|`F}CGk>l{-9C88?;Ex0ZoI%zLC|ffwf4t&Su@FCW=nkdB#N*?M zSM_zp)-E0clgoEDHlK)@yOOccH-7eFRhNq&2$xY?k_1#wvty z(XyckMCu`6*Pn^$d<>c#j-crCVAjmt!k;IkW~|DvF|ti`Ab4yKpIJ4v?4l@#d%k=b zf5YL>6?vp>$DblZ(8M1~{C^GSEBxKW-os0P9K5nba_%kM-h32W2#Esjua#$4Wmrwq zf*7j+6uNb&d+D_M3=uQ3ojP$BJN;=4lt%f8`@Dt!Z+Fy?!hIt0YxK1LV-2dy5VDq+ zBVE-VvZSX3p>n+Ehqg($Ji~=g%L{^rg9Q*heSJY4Tw-JonV7z0q5)hBasbP(A0Y@p z=@aD z7K^@mwOCatNy>i+(0&&>Pz1O>0^Vj9c#6Ba*jZR)UCjiOrAGsQ0kB}lwQ7+1%4~vO znI7fl6{tncb2+|&yJF=Ss@EuE)!mwuZ!^VMwLMg0d1ao!SpWBLk5KBMXPn<_Ykq=! zg3HZqi-(EMZR9fRj6TDsP3%~rsj;ekn-3{=9ewbLdKxIjoO_-Av#!At+|yMWhP z-B(iEz*}RRCVWn@MB?mga|?2rM)pwEqLG8ARfnld43nN-3lxnHXtvM1JQ`MAcpzaY z1Jdv*llLmZ<7nHpp7;gSz())W;4T2Rjed>on9R*l6qvs)*q#JKBPf5*Rp4k4IevrE zxQ#k|I$4ZiXCK^svsWfXPnmNmJ6USlv}{0JBh`+UH_{}&(&sFsvAVJr0ar%t$u zu)8pcA~kcn7SHkje>wZ&ctS4UvZnqPVB&*O0F+1#MX3A;WZ+$yeOCYE`)fRmFCk1~ zrbzf_GOF1KU(xC(t48VCS(GPhd&FORCHkCj?TCBSRShN~+tL=%grG?l_5#ijWug|HwTB0X7YYyPcko5fHcQm7X%x$g0ulyV- zn0o3`k)%2I;R=KOB&QM4WiNsXguX2a*Ymv`f6sCcZ_(r7D@GG<0WPk8zh!N?eJu3w z_T<~|Z1>-6i&cO+^|oY5*v+bHYU3>M;W4+31qZ^VG3?&^q&};sVNJuxTcQ*~4VEeo zBJDXs*OMy9JI>vEZ6NQ&r+4E^uLgix+PN~nWL{EMt0MH*!@sK}`Q0P=rp5+BLK=Oq z+(BYQ6I{DX15MzJVXTvq7J{6%{ck(xue$ZkYH@3s?B;(Wq%On1m!=1p3m{)M|82az z4sa&|60bQA+AmyO85miW>%!v~XHr*V@M%7%(!y~9v^xY9PeIL7Pbaz~XnEIW4qyM{ zr}4Qghud5D`Xg5d?ATc`Qv9X&N2JZiu@-`FfmCpB3nXI^0n#59Q@Z-a<&n9Y1Ro!~ zriOAZ^2?XQCrT6|=pGVN;&ia?XwtZ3{UhOw>hbIN2G{$L!jAx{MdBVO_qgR zE|qAM^OXy7oy=Ik=7qgTs(f}^?eIfuPo1a>bWbQ@f)TGgmT~mvTu`HknN)*;^MqiP8#y9uIFPwDCrpdq6gh#n8N32uVwnZJlR>~aaIjrmT%2qAxBzrC zV1~Q2v;?S~AB2t^=Mf0Y2q!^T`4!{JGSnQZP_nKV($Dh-Rps}eUUY4&_ z>?gw5sb!m|W}Q9e@)xAziLT|Kq5jcklJ`A_FhR-M%z0J(?k}=0ix%!c`bJfJmD$tC zL}^_1&po`g)Z!=n0JqN9;A~w0p~^pV z#0|kCT!L7+qVL}ExW&+OIz}X<-8oVJ^fu&2sT3o5s^w9ZKpf}T=s9n4yXA_~);Isb z@ZMDP8a=jOyp4%dg&sX4BPkybdI=QDms=}$%6`PRn7ETAOHYA^l>^jArO~S&mhvht zyyq!tXx`0ymSWiD@Gb6&hB{-V+!`AEMP^u+ksQ^5L8D0^#vq`2I7&t$!8I~U!kGkh zc|!cJ%bggdDpjCQJi5~<&=$Po8AE)(P2lbfLDuUA{Oose-Qtmq8`SqFjiVD1>#(s^ zO2|GmuR!QNeI4iL-}PIgH_i5+ee!$NPFq~;^m)`JrPL{7=@o2w$xDK9Qi5cu=oi2sQz^Fsfw%>%)d%A;0x_JY zGE=W%&pesT7So=&ey^?7{V|fgQ;2=XKXZbVt?f2icOwi+6LJ~ z`00p&6UP1N4)i_}maG@p1^%)lAS5vdM8;tUF%$6ZLmV&@A^&ceEn+;5@(oC?E*Z(A zLsjG>&ZG#X8hR|gA=n8NMRap(T7>n@OAtwxk{E@{nm2fa`-9D7g8cmLG-`YlZu!6T%GV(m zl@Cnt{U<-MB9@OlFg^jPxGx~u+}8PBi9Y=%@o#GR?U1<_FMEQG>DB~zMFEkcRPc;u zA>Rm6_iQsVpPU`Q2_Jk~+wfD1 zG?d;WnxazR%hB>b))??E4JplhauctVTUcBiD8dY_>|(^J8Q;z$?+~DZ;##S4t0_R_c+b`DT-u~b(M#$F>)me@5iS8?jK&-dywo$ ziMtD*xTr>7*Kifsh|^1*LnNGq49aNFyRFX-&!MV}C&j^r{dpfq7E%OgUo|mlcA;&R zbA()amGdeaGju&pZP_Fvl1|C}9(>JZ6T4kZPgA{w`!5_>u?bGp(irPH&yfuhX_OAX z{j63{n%hOuA>p<6xGL3Jf?&K{qMf;eyC{1)(?Zc~zQQiqoOZs`8$~7I`UE!aBPMR% z2X{wXC5*m*hS8LW;IrlF2xPk-JM{-y!GPV>(!}d!=0W<9Lb=|l%QCLbuSbtP*;D-S z;7!4{lDNI+q5=C#rKM_(3=vLZ2zhvCl~un!u$c{`eN=l4D)NhKAy6;5A1Cj}Re1%g@lo$kYU(&z?;z{`;$Qrm@Ub;obR>I~ zVf3yQ3nrH|H`CKTY-StU2Ci@RZ}EP7^I#&bZW*#$#s9KQPfZPCGpcKVdyR36I0pyb z0EMr?;4&-X&&&z;5C7R$>;8FZF8+EXqFg%$e@==&;4nATn7@A!VEGN&;D)U9XoHJ4 z6rKIpNujxsSJCF8Ov$|Fc4?s3&mF8tVQ&x@>nW$ZFa3Q>k-Y)nl#yL^LB@{1nx_j{ zCqG$RShOkU18&K|To9-U=Op6+GwXL3H+Wa0x-CA3gaEki2+URhKnSR3aC9J5xMJDJ z5(@Y3lX(5B9bxL5`t4mrnONc*J#I)rrzSQJR|M7hdpPd%=8AcJ5h902tmFw3rE7_H zyt`l3CTu<&%IZDUziy~6$t)9htP|2SUNC`-E2AH8F3-%s30PfflyEgL&PVfw@0YX8 z>h2XBr_?kzN-rY0I~75tkEuC-Q84BO5uLmoH+4(^r=wx7*Zi?c$#Q1qM`kE;3FjM zWgnL)?JKZqi%u^4{*w!3O`E?AO;P>RU*IGQm3j^sR5o=N4-*3@H*`zW;fcma_A$^TyeC6;alD`L(ZHFEC8+ULA$drI&rj6@q(E`3LdF z*5~ODk5OyF)N_nyO&`b(4nk{WxT5q({W9QX(ibQ38zzDL0&GFO@juN3LKOiX5)wZ#R|MG3y(AudZ=P0sq>Y zRb1TdwyYl>xW6tQK4l@Yna;$c_ZY#H`V{wtzRL3Y^!W%>^W%*kJ6Tp{{<>gc6RcqK zkpa35&ZB^9#v#Vy4VWeYfq_e`(|{QWh=v`>Le?q$Hy6xEecwB0XKLSHh!=Lxc%b3~ z38`kG?3A_po`p+xvc`ld6aIe(F`n#FXh>qTtU;(`k}_X&`20OB+~Y(Cx4#TJ3%N8p zTyT*H2}Vup`~ajLpgb|D&|_d=NKa1(mawfx0)S0;r4uwHlA-$z2_-G}@(>L6vU2*l zy;6sqT~RKRsw4tc8?PP}>18}Z2LvV3$v(xRD%;Tf2Vsj?3Huo`W8pfsGKk@ykOEWp z`xvs1?(OSW5^9gnlTU(q%HfoBPAE2;U;?Y3oI-p$2dJDcjunoqPEM)(7& zh8H>aUdF$OM&^9`9XFm6^IPW+GDlJL^SpeRT6PS#aBa?OWKONLZG3Hx(nHEaBfB?6 zPjz`deZ#C#f)7V>i5obQh%RzFiC*T^Y!0Vt*;E`XpW#sG+pC1^9azwml1!dstIsUu z`DqKJD(|hJVF|gjh#jR?hE0#rm~WTQm6u!4PK=bP^AA(UKcl$lAk)Spgt(USW6ORb&)bIZ=WcJ3j z=55IbMRAL=0UmdL*_{`z!eXKm!&KqlxKB7-KbTd3++|!y`*wkH=h*_(iz>erPzvHz zgVjeQ`zrERT?jF<*jc_7Spa(zFfagt^0L2&b2mEL-F*(coBYnJd}XetU>Ic%Gw!#@ zyJDfdypQAZ*roNcemeaAD_12aLvBiZQe1Xv^ru$I;9Ap`)slHAjO>L}Gg!T4_ zyJkGGeCa*b)k85|dtj_)XJ_Z&5DcN4`I|`!X7OSpAZv8xtNno#!i5IrAV!cdmckP8 zJm6T(*g32^pP;mh5v^K?6f8#=!$S}|i;E`d>bUT7{nF1=^?>R_B(v;E8P&COaKJd& zD8jc~mx{X^axaosua-lv{3HCkdt0`IWWwyc>l2iUCe@p=apVLjJ$oM)v!e+NPUu)Y z1RUp^-+6Pzc5m<8MHqMc1*}xSqQ@mMc>`mWz;?Tfm(kfgUdTR~6cii`*#8cb<)*-_ z46rQ@OCSC~7v)rBwi8VX&I5}Vwe2GcM3Ez<{~DI$tw~${pG{c9Uvzw)PobJ6Go&2P zG@6KtO!Iz@oU{pKSL{;+PS$graI^BPvbQhfWc~I1_`hYR+G#gT*DDz_oYUL=WEY-(fBkQH z!G5L_jM4^J3yEP>25Z#=+FViyhqpJ`EqBwqFP%N`Mf!%^+zuPXW?W)PW8vMD(tP{X zzjBnh(T&5jw>iA)(gmYUL#rm#At;zm!U(J31 zcn{c}1A5d%XE^o0X?bnx*T;kYwj2Q;KT6qIBV^Ur!Ir2@|ctPbT!dKK`Q zKtgC_q;aK1sN)&vk6RTlVr%lD427M`Pko1hgIQHoRaa)>lm@!UpACobrCE$KjM5|< z%_YvsIIza>=F<=*!8h?7jCig4kLV)qj1Ij1gu{G)k=!@}7h5c*SS9=pTLu*AXr#O} zq4igQ-l~bZ2cDH25mM9m2*Q=jJzkVz;;|N1(^xqvpjRvuUZX}H9^CU2HOBHUMbtj_ zt(XfQ0RgR$R2MU`+v)hockG(@1Q(C z5nhV9`Pqf6XGW#8YrUM}yk_?*HeihqVVf)pC;!C7t(V)EWcn~Peo=!>uz@&IldZ4H z&9<=qGvRu|H~rvAU2ou<1WG@H7uI4lA+9sP!hXS40Tu6UG6@Bqmyd_=uXsA-CJmW+ zCSA5a44o^k(!OzxIIGZAb2wyzUFo)Y-dpSLUg)*OeTj#qwo=!zU}a_o^YgKdpArNM0`mxx5TSEZ5Rk5pkXTVI+^$hgUw@NDqSrD_KJkY6G3_ZS!SMaTr^kg(A@;G_m(Jbm;}J0 zK=>`l7es&P=mPMFG&~vijnwahPZL77Q-pDT_ii+<$q~MfmvW8bnNWo3enV!#l1Za0 zPj45Y0ln6^ytgK5YJDJ=0<@_aadE3l`WQcsDG+})ziu2$iPjYfEq&@(H7S~OH>x9 z<8Q`)y>M$N=60p@TxZ?%tK)|Ek9oVS5!w;ghc2US$+<*C5|Ad78A{Ke3nZ&CZXZeB zW=&;{g#L}-3MMvw<_vH^A_C`~=!>l%h@qF*U#>}>GYM{u_Vw;?8u$m8o(&wwK!y9$ zUzU^5Ei!LiU-UD#xT#sabmJoCVdZahf~_fjbbV_AGOI54lyZ*%V|Dce1un1ur1Jet}NbxV<*I2YkeyYY8MR`<$RAmsy~{(n`B z;VG46?_22Eix6={-7bnqP;5C!Eklr>V#${NQ5Zm&YTef$Rz#)Vil>>u($DY__-6>) z?q9`KMvyCJ2!SN-aoSV*_V#S!Bgj?OB>f){ODv885>wUkPloc%(Lu=P+lijT%xuf& zmwxS)g6IwIL4U_~kq~B*vfRJEjF)4%ngcR$7MAtD+_F>=N>$kDpV{?{jiq59!@EoR z?ojEedE6Y6iaSC|Bh<{ya%6nA7aeZ_0oSZEd;kupvvjny_X&axc|)Yq2jvDBQ1P-w ze!i}#oRtrHY2W$eJC>0LV^dQ!WMl&1<1TC;f!TOTnx8Z1bEhsT(|$*7xe6PzQ?21; za#M52ihidE50Qo>@jXcEQ|G~4f*b}IzOYAKjUQ{cLvEaeD{>)Q2O8Bxf1%Ii>FBoH zg+&@FQ;O3&xtgs?VdvyOzZo`|mipIeq(NV)J2%WC&})1e8It}h$&-_lAk+6sB>ON8 z`dBcv--|&L97P*8aZKf@VT(USrD)qB3Y=&9@Hg(?K9KvfTZyDV`!hA@X`g)qDshPt zL2i#<=@kg8cFC7N5@Isk0z1(XN3<=TDN;N&(65JE9dc2-gEc2EO~=VZf$6x>>)9cI_0pqr5tsN7iv()F-MyVNWe_)?o5__ z4i0{mD)NMx`R)m+k#DW@RJWHT)_A35FR(DX*#=IKN5AOGQv;(w%lGs~$F-?GR)UN| z{D-Zhqu<}tt&+D@ix=W9t1n)?if}x;i~>WQ$yuCs)R;#es2%)|xq}ImF}2)~CRvy9 zdSy`eoc*~cYeFA&Zg#lL-aPsBF)ZCS32ItlGL+xIb-l@2aMEtpWmT#*`f_OA5Ns%w z(aA{Y;9(oFU@b6jG(n2b3_kgD>`gDzd$K;@`bzD~4^H-$VIQg7mKda=600rVZbCTBj8*Oqjn1Pbzd_ zU*?1x#21s2hET79nG5(JAl(U2x55T{gMNfHe|(g_E10YX(j`T*%k&}9c-}XmlS1?S z`aB;#Fr#yA?R<$K!k}#cc;WTG$@Ol1*E^YWbXaP_uNJ?|)ac>V1UAoed&#k5#T2L` zkKd;aMxtsQlny~VyxbVJ_O5^%T+eBS5fpf8M2LX&7e?XyoAMoe0X^>}EqdZ8mWCvL z!{cljf5(qjy@n)t;4f#FNs2Mr!Igc?d^He_T*h{ZEOx}+xPeP zfz{vxBJ+=GR=G%gv6`0w?_y(~TP{dE+jhdorXls7UtUVlCnpFVO0eIV^ZAx|0}&5- z92ARrcNS5bFO-|b#=EBCLXxKO_~fln04jaH8=x^L4SEuGz=sFfFu;iIlPkC+;Quu1 zt7=Y5DSraebM<&0Y7hg)jBjd^@MA*TG}YpI%)&mQxL-~kwUDwq=#oW zg#D6l{f!9bpF6TLC{|_{2ZP_<#83=%HgaO`FVF@>J*psRe{L|$=D{h_Ri3gmCO&USY-rjGRynQoKp}GpMkgS%s~v zr@}H~cXks6v#gLMOcQl{*!U!|7Z8xPL0x*tjnf3L3A~F-v~N^CR9JyfG4?W`k!Lh_A z-1*ZAb==8X_ZRPN+qx*XockNT`m+X659uN#=|V2cR0*U$i3*)7)DVyOjv1}iwam2Y zk4y;Z6gkPi=_irtgR_Y|X8Ud&u%gP%|HteHe?w)moze;mWYF25{Rr`r-1w&#PP^)z*~a;*u1hA)#&kdK`QDV8xqM==~DHh5?7oF@sA3tN5Q|W3t2!4$H zo+X>kbgr8nh#fxWL+d=oXK89^FFF5@Z19|7VaD-#_GPK?fRw&BUsvLIw?R5!rK#pm zXS9bte98sNF+dEi6m@?->0tBOyupNKu}zjk$EW_fXDrS~>>l}xZ%i><9}U%5-z47+ zJc1jRF$FP=OquMfXcqUrwts8cVnVYNxv*S^u#sP`gFm`IF6nqQ!)|Qy%z1oYwQ$=r z^86swWCTk>c~U&O`^C)~FaZ4D@6TX32Ca+pbLKEX;Q}5`EztWpBCbU^IKFhPpmt5x z*v9a-05d^Qe8=1!orJR9A8L;F>r_a zUJ;!qm?enK&%2dj-ZWlc4DV>nVG|C>(w&Gr{!Ygy*EyM8=5s-=SW4Dny8Y*+6TRH@ ztAXER+WwG&25GjK8zByY3j{$43BA~-`Ez+dKldT@U!z3W8k1V!Aq0tzxhHt_oNim2 z^^9rAk0)pmzWh|Wj#hbTkvwTM)g07#gs6IV@h*EO&$vUE^*%=_uJ6jZnuY_w z2%C_+S^Mm3-@RT#Ua}sRQy)jx$B$<&R?q5p&mLuBM~EO&=r$>mkMD%zXYQ4fcVCP3 zCjAS}jp??aC&7KS)?nU60yaa6-(i=Xs*J>a{@Y?e$CIIhe&NzCyQK8Jy*YwJhI%nd zwt<2Ki~ace4u0CDcjTR4hOqnqS6I67524K^dn3mnx^m@*j-z(F2~cE5llRq<&4|vZ zoyS|RtKeDKV{~Ogw8HC4-VpZPmGH%928L1E!?cU zBOdt1`oYS1kS9ju-FS##5^d>6Q9&>4l(*i+u!h#JiV6i{dg?w7=2JqNnYxbBv@iV? z_6_EvJRg!h3lh&z6*^CrossPu+X_H-Z?G1OZ%?*d4^4W=7a~nuhz6xiYD5QHupBJL z2nv-J^lLa5wR^Z-g_HX9SsG&MbOQ-r3MBV|lC{B*H(qs#Ij#N(weKVIRWMnON92p5 z)!7$T_4$+HztQNPV8VoMP$4H%Q*W{|Tb;I$@^VQ;XZ0M)2C7Og(lUSjleB|NSnRd& zuyk+j>f!17GhJI4ds?K9=n-05#(o=^t?L$_v3SLEdv5xTH9KP=T*AtSIQE_V&gb}B zsu_`a<19&R>5c4X)oZoHd{^ynJ~p|_rtfZrnU_>|W3 zPL5c|FW~Vs<+|SYPpAXNqAM%DM7@jnh?JI(N&f_ESJ}a2kwhgQO_pxnHLRH>o3)9P z%X(|@LMt!0VhCJUiTO5o_4c1zcF)he)ls3kJoj~uAa5{gzEP8+cftLu_`P{NI9BAd zs2WC7#wsX4Jb;<@4G`Ud>US?UN*eH$|0{7lW3x(yOpKz8qlnYo0B+;~U)S)?o3dC*MtPQ|C*^oa5P@s`gK9|#Yypj6x;j@m<#hWzK|Eo z;cMj^!BUl_cAu-Rvg2i>9Cbu-W92fXr z^l}z|cdIY#$7NeIHp~_gk3T;j5A*EW9yLDZt{HG+O@G7h#*ELyg_`?Yc`UwKsGUt3 z;pmX(xwn^`)B&W35=?aXXXa{O7B63xy^b&|Eu%2Q5gP^SBnSH~48*LvpfqjSEBPl25FPpA?R z*j@Z4c@Ky_k4WX~==A;k`FT*f_e4nxY0zM{Hq3^VbU`;aQ~sny*^0c{n!K`j zJq_;{_Olepx|$>MC60mlUq@j#N>*hdZWr4!efFd#^NeXhWy=d`S@+wg~05zoDcyrC$0oHOqC zl7$~ru5rh{fi-_?)3a@ubY<;?&hDej1o>P8Po5iOEJ1h&Q2~VGYAmcO;)z=L460r+ z`{pX4moyxwDkW@!EwfoB4fYt>MMl726xBqn=G)oW2_a-x2p66Hoc0&Wd;gEA zxA2Pc``U*ADFH#cL6L4Gr9nC+haNx)>23yTC8a^SV}PL>h5-@j?naRAMh1TO=liVn zu6O=|Su^LHz4x`R*ge#viFdx!`>-HpJY;iNW&o)}yoX>YzSWILUlI1}al2KST3V_Q zZBs;-o!C{2b(9@@Pro*D^kDCDhqc6Ewq|fWvq5EPnrme5*2a>>Agx1_mX_y+-s)Cs z?&8qQp*c*dPIOtXx5KmSYe_i(%d?8Isu;Uj>p)^#6lttfAA)du0?#=H5H`m>33i~| zaZ4;1U{hk6_1KDK>8_%Tb`bUD%LOZqh59?dF#(bBW7d^K)c zwkEP$%VxolU6I?A*$IpxOyc!NWcW9Ad+DJ^VF2%yTe%|MuYR&!xHy;%oiYaItG0vE zEj{Vw59Y4Xgooif^a01){BXDZkm7Cc19XYY`k`dC#E7}#y@Rm$eKUP;qfa;Q?H{gd z6V3gGU@q$H-7$JeL?Mv3vP#f7K5cI7kVk*k#L#onEJ{Zgl%9rTpUD6{a3r%t69v3sPy7gngLdLIDdQJ!S>+Zqdx_bFx-XZy`0J}I3&CI z0V23xMc1`OJ~Wp1U^m@(Y!}7r{R$1rslweR02xnI*Te zWw(zL7ea!Q7X14Xi5x>IyFUOgH96!1QX~_v<4VX5?L02Dt!J5P|g9JB%}*+yVu2-1HvBdYF5VY`gIo6*S&l180_-2NFV`n_WOd3$vKo{8(BURkXTEbbvwBMHTok$oA*c ze>=((-#Ngxj!p`Kmq{|uT4mZ!)_V)mF5b9WkD9Tesu3BH9?Ss~R=ts^jC!H>jtmXu zA^-cgnE#(eq72C_ja~d#TrPjFa|Ayuv`W_-bCB-E%HN_Ir$@Oh8 z!2clSU_di1lKBA=_=z|+P_UDNQv$c&)wDC@x3MAI48nZ&I=>}ES9kS;_JUHttnLSm z$$dNtmJ&b9}K z?_Fn6Hm^CEbcM;21$CzzKP}N{w{o`H{HnKtgQ;OO+a^yMED}{c0 z6070-^te9>cVx?Lg%b720RpGi(xgr=xdg=99#CY(K+MEMj1`Wl&eHCy=SHD-+BipI z(68o%!7E~3CQkm4@Kk~((1Yvyh2_FVJ#{2iyV^p7h7;2_Zcy2;4W`|GjLa!;ia;u}1m z2*3|asJ<4#@l6)Fb47@uH`1g^;zGAw)#~MTd#Y{gDZ+}~VZfRBDCJrrl zJ8Q({wHZ~-_zl4JUwY(G55Te*IHTp~){2RZcD`8G_X*umQPki$-;sg9zeSAU5Rq3yt$9jZT7IaEnqHS((e8EK?mF$F)XKF>bBjVbxBAKH%4coi^aauSuE(_x&XB(p5^~@q0wn+iW;20--G?0tob`JFF)n z6Ul%7G50K){2_X{(l5v`W_4ajz}OEfv6_uJxPEz-ml@xkRWo@nRCF@CAH}W|wC1CgKY4j7cM!j3 zefm7G7uk1p+IK9u0kt2SYxcsC zn`~q`alnqQ2N)1O$B^FHKPdhx=Ia_isJZNeE-CdR5d^rU zKpQQZ<9>aTW7+9#_A*s^1V?L3v?pK)UO(WJpRyRgA#&H9bvbtNI6GQ}#$&%Y9bD!C z$n$Yh>SuCyp-Ja*oTtMfLR zHcim4P?|G5f=j2u@yXtj%kz44*C|JdL8sfB>71qGn(x52 ztf;66fK|I40o|&xgyb2AH$eP^<;@r<_*La;aK6DC!{|AW0yEk0cdJ;kJqH-4Gee+I zCZz|jq^G%$fcrt<4g5l7gx%IR*kd9BIYR(K zDTFNJ|3~l4dNNQ~`*}yI@E@6WJFJHa&gc-BkNz*4=Nh1_aRDq2U{7w) zIStm0CE^|`G>iOwO&1P(QHOx`{O~SCtNdqCdS$#(_#|(`kpZUoB^^BlZ@F%-AXN9+ zXvA!biE{A-a<1Y6LNhV`Ekixipo zn-#P&B*^Sz@^nD_LUeE@&}Vd_J}Dvj`Hq-turIIw4r#GMkZ?23gT;6Pk;Vm^K+%(Y z+EZ_A^23jX_JWCE=Ee9lePMW$Xh+0iFdb2v+37&4(({K+JIC>}Fxa)3&cRC^l7VFN zy@h|izujb$!Gg`T>t~?Ei?NkKs*ZFcSZ#T|9PnTLfI@cALN#JiqzLAFpg%SVd+lqOaM!K0ebu)nj7Pn!?B78mQBsIK|^a=CygGU(|o%7K7j2X?WText*(5##N z-&N^#;)GJF7WU8ryDaQh&rF`@wy3Q5S$}C^-ySG5oar^6I`Q|=Ltv@-Uziv+`Z#vx zj~@Vyyx;m?o!5Xd#EO2f+c4sdF!s<3I2EvpAh^|YgklF6++I?S8rKlgD1}-TL);7k z^DqBZ>76*iYE~SBECAC*XhlU^+e@1mz-R*1F4hLKi2V|43`b^fo4GOC$8S^qB9K=j37H+ERYQI#YhJx}ZxTL7k?mT!QVkF{8+x?p< zMiPpz0zZzlE+_u@Q%f*M19xmsci^Va>8<}Olje}Gb{A**z!7YKv%09>Iy<@!gJ2v`XHo#9yiYFO zWSu*iVxz6&`v%Pd^a8x`h}8C$OY^$N6FL@MpKKo1iqcNJc<#HcxS z-5wAdihFei>2sTjIhwes!@5h6t45i+nQk&dDr0ii7}ad4J-laZ6T7`#PuRt3iuQf| znmT~kPJp1yGeYymWXV@jxtcDku+NI<(Q%KmWJZg3-2u>}>wsKvjs>D?^9l-HeqrE< zsoOS|dEe5U^X}sr6QrFM?sgP{p;-p!)l!guppVe$G31O%4|EgV^gZao81jZ-6n}v4 zMw6I)`<3X>IzPWh-;$P$DJlM8kg})10sX=9 zr^jCDPGfk-nwJNrcHBr_IAosY0X|PD%$ZtiTGJ7`7MGc;vv*k{0s8%}xT|#e+yroX z0*r4)hK8b}-;3V?oAbrR#elMY7Kk8bkDK6wi<|+l@?6qYhc(x}l(W(RxhaOl3x zi0QNZEb!xuvmrUP+A>bVZ^ho^aef?c6%v9%}bwJxL$ z(6gHfjjT?qyPXTI42ZfOwlx1X?Mr0RGIdLEFif0bf`Xu+s5&Y=CFSHYSyCaCL()Ui zSJELU%9pEH=^0P7c+U&)z94F%Z``YWK3H=fOG^ze|H}qzQTy#|^e7C#$Cg)?HTFRK z!jQlV892m~P2wg9cgL*FXCs4>jgk)ja!l2MGEfju!lHSfnlkp~(fyY9m$}e(Evws-=ZO$5X67;d^G{|?g$eGj668BF!34&@(Uh(jI3*SGG zDw<@<-p|Yzmy{@QlJR$0rK-p;HId%`R^B=EPR(zSXyYYO-zu8$Xs*vClzR~S&Clwd*|wv1g7K3usyT6vcS2ydWGCD* zxT5vdJ}6=3sbvrJRY}C;JxJmewh#WpMeY+`)r2{3Lt`W0Fc9>yY;Z6{3fde_#_ z;K6zcrAk0m+hHkjYfT8IkbAgK>D{3FO0w=|;mLrpjmiYtS8tk2qY+O_%{Da&+R#A2 zq{MZ35-Eq9q#yxG%d7HWz)9*yS4vI07H8=ou3y=C2xbzg+Je`;*G6)qvR!C6K$eA( zIf^-l!I{8yp?GF@7rC@r)Wb9CiOyh+d#3ojec!l< zJKlRW)xBNwO7xeTyIsPa9I-g217m`RdlkYKHMQ@ALqK#jW)SYIp(fWZwI;lD6@zkm&=QAvPJ(SP*gz zX9#=*IR|8nmd^fNKN{g60N(^XFK%Qw9TZJ4IlA_dx;-Dh4+V7uvKiW~cX$k5W4f}u zo9rQ(g#AJX6m)};ykCHq5#YjdCPGNFKOigW>+@jUD%>chJEM2acvCPMJZ=L7QR?ON zk5qNdA#R87OwJBsyq(sV-*Xn^uA@M!kmnp~3a|dm!HRH(GQ_l@fiH13Bob@j{e(P# zow;>=#wZ5{Ip7qa0@&IC3idzyEP&hp6m1bWyw&{5DfUmQPy}Dg^xMHvSv;O$3=VE& zh2nuofZiwB985Jlo70yK45CVq;Iqog5 zGNlr0{v#hYzG#ut+}x%b+cg%f{h?|zC12on3rM4V{xrCK4n*ut?ywD3<+>mTH%~*} z`JOme(cHd@MD@v-Ik<}8T_-`KTLid9m`GxdA0Fn+PjV_#c{ed%qk-7oy|^D&q7lT= zp=}*)h<{7mtNF|FZ_)LVKr|A8*;ufml-R_pNSKpqM~2R#^Z^RR-zxGUxR^UgORs+B zn6sSJzq4g#!^nSY@nq-7H0XhO&%LXF1J6utEbwva&D-3m z+^2KHjq~?2De9u+WYg|&2q`?x{L?mjfHlRN8B*%)C?}WUwd_vs{yFcxCn^zt^s&m% zsUIG-PM;pPt@?TXU2=pZ)>p1)=*`vpV*qB@xVKAog)rUi4GzN~!y597O(z1ur>q8{ z&l61-9+4UHjZeZB%}OO5z zlzcetT>~r!iN1wdvAAqkw|Z+{tOu(W*NM>t-;-{fi8LCOYA6a;&3-)KdF5os4$DAQ zi!BZlGk`~t$nPT7KlY6j#u}FhSNb)5{&zTp>LheUTI%^4$f zyIOihYItrZipoc7ZlUbumP(L%Aa_?&;wsswN<&%M7kM=YNR@}G=!Nc6*#EhWsIBV) zFBRbs)}=Lq0Xt=#OhDI8v&Y7>VdHKJChv)eQiZE@@}MU9_BGl$^*>_&@$d!FRJV@M z_uR_F_kV0O+6c<)-Kbe`@M>SNtQ869#-bRy>_Dvnl2&cb5(exwd%wx82Z(7i+!z?v z6vz`MHb4X=en33oWz-#G?U#9PR^Q0;Cg!Z*ORk@>e;A&SMs+{W0qcLFyQ!T4WUE@` zx(o?rZEcIT0+6#l^5y&Iz$38I#F9qR(dy(dO&@jv;0R&yQjfPu=43o(;#PwsqR0L& z6BJpnO3s1bX#{>_Ut6%pVJ6Q2QX6Qva#Qs5KH}W(8_#t7xnBrRqGT|MnScb{a!_M9 z&#_bxK}YQ#TMg`QADp!?ryukb|>+WdPMlBf70$E1bF!u~w_FpM^J~W0w}*Aa(74qvog*t=ueTwDohN-U zvZwt#57j0-oSNuxv!-oErgl#cC}KK0eq`n5zODY|9Qt%Rksl`5pIKyT7kYPi<#3u* zTv~mR)g`_P#V-me1qFix@adjn?4-ar1hL#g!X)>k>S>FRW3Q#4Ad}Or&5*P-f;h<4 zAEt1Z6p)c{-dp7ci2Oej zaW^L7;l*Yb#dG%|O$Slmq({O8-9((5qpZnXF42}xC)>?)*}j2&-<-G_H|bn0aP~kS z!+|oAn3(vT9FQC$B&VXud+AWVKmStEAzt)oPO^;ISi;#~o~RR&GDY||q>n^?KJDky z$75A)l>zJ=2vaby&hzg4+WfelkW9uK%HyQ?yn#}wiv@%JR5g-0=pUerDAr~(IsDJX zKQie;5327vbb?TT*Lf=o6u+aZpRoBn92W$6j_U-Lz!Ip2$m;w!`fxi)GoE5D`y&4J zGwLev3=i75edRGWxa$pOJ-V-~ZV)d?#pAl}Y8p#K&10Sk_tP)oF4S0;-iQ~kVgM5) zW6m?vs`*_|pWetFX{?J8k=wI4PX=#m@=BNIxDb7HRXpTAGx)LUUC0GxSAFJ!x;hip0F<^9;3bo^M4{zv>{oxQZFqo-3Ii$_qpE+qy4B+?PXu6;Z?X&it z-@sUEW($1HT-M`db}y7`DnZvi#)f-fd`Q80eKW_jGFWoC^}UgwR%*VAAJ{l4 z^jl1vXwL=Gcw5l`|jQ-n4|!mIYrOG z6;8OUc#DU#s%kW%TfYs#SGh$FXZ7D_3p6!VLLw--*Mf(F#g398eXlISMSEMW*sb*I zF1IY*-@jIV*`&e8#OWi^Nu>XYob&DDE#knCcI~O=!))wuV(`$-k_;NW!CGngc{Lag zq;n4LcneSpkD(w^_i)7;fQ~E%f7JuRi z_)A#0zl6k1VvHb~Q0N%vF&aO{l_g_tge)*%-DYay=R@T0O={NHfUHA6k2dz5j=lwE zE|fhXQN0SB)R!WpwPEVk6vVCk)(D)e0^TgoXygLb2g)1zq$W5aw zouMe>4@d;+#WH!ZGmOKtEwbx&*Wkan8$rRDT-L;AF?TTT6=%h+5G{&HRe}&EAbK5_ z`U|ltoCF1yLc6lK$gI5I*>lA*MZfi2o>o_0R)G!W;<*^c`DsrG1 z;4Z!(bA+3_wv?fTNN%%_6Sg_mDczs=ZCWU^ygH|Q;bT)jL%0{cmG ziPIJ79&r3!@`!Z|Jzo*<8rsAk$^E#!o3VN}11q@*y3&GdbYDVY&dSV{9K=GO-xpx? z?oGjX@yn|zR;n?Xl*J0&NO?apqB#%$!?nCtOuL<(vxd?>xQ5ph!^ORCpE&;eqjPdn39Xq7P_h>B4Idt((I?4OR@v5hA zIZM)D1??12*}?F-d5I&_)cm1yfs)`MK3*|+zN6AKX=JaASX*~LkfaetAR_0GPh2b)Stea-XbI9~Zm}g#@&9MxHARHWd2cu+Gm5+rgut zQ&A4ko)Dc1Dsl7q5EVA~{@{yjH*#AStqtU(YB$W zPx5qZl&k*Jj>b(*3X|~V z-A~Td=$W=Bceeb7Z1f+{^LrG zXL7~i{{^_f%r9F&#>w1pFO*}e$|2B&&ib=vvxPSAu72yHqR=vK1I7v|5wG37y_(Uv1X=G_0OQg0=FJAn+sF!>ZH3po3{gI{= z^3r`w;-&|e2L+|2it@jIN6q2-73_SM+klU_RnZN>V7LpyMz<8WxZBCa8m$w-8syst zNf<>=gs{)?>MT@Z>G<};@*a-f;8lUM+ZLhVzKknTK!+2fh5qGWc9h$**@ytvamsK2 zU+lT+`enX%IQ!e;VB($z6yotEeJ~}cZN6%fa(Eghw&htrlK;VOqdmK8+3-zQDm|yn zmrjVFi<*A3ioLsk#6WK1XwXb4IQG{U1ooyLUbLr04tFEnkAeclKQ7^-IFdcFa`!X4 z<}(#~fGC1}4>t>d6z>1fKmC>r5{unmm9Wwx{PzHw4q0;wk5%r$@%#^~xI2xh&0)ue zl3P#Rlgb5n00G^@X&?C#amhy2;rqL_E9(PTyE*sR#7u+!UjXl)*Qa|x9XI7}5*9(T zC$vaO|!^@-|0w~%q=Dbyk>!488Vr?L`lXJD6;RQ7kN8=qHGgR&^ zlfV=I_od*^=TkpYpQV*V*9j<)b9#S=%rqRcZOFY^e22)l-8%|7-FA+z%*JdpuVvZp zLRTB+Du2(>_<@(83u!_O3lP!f-`?5+z$J_>B8dK{XVgf$$+R7^g#4Be2EHxXpvj#BqCP$6g@c z-o{-q66H%zE|Rl@6nUN|jxsI#+8;T%tZmr*GM#D&?GjqU+9Pd4F}&jC1Nn15mnjVA zTI6rEx>^3wns>1;!|oc>Ppkz$XM2A7C)sev|Cr@YO2P|?m?rz)P41nCzKCbyE1eQb zAN6nq$Yp%a2Uvt1=1+?WZu9c{%QB) z+m&(EU-xa>q#rw5LvSfsyIovbGMK`pb}F@tz%NL6lb)C>q?8f?bvs>r|IxGF8ktI| zvT>2ewStGaxm5gLy!7goUU}^kbqt zOi3Z9;K(KTgm3--EUn=i9D=1rrVm5lbJTUdMicz|nMg_G;5ObQVE9i+2=3owFb9 z0{jBNO;dgZH69o8BBNw__T3Tt{EYF2_9@>!4P<5tcb368LRso5h*CA-b_RGPpRpG3 zB)Qt3JxG*R$O~hGe-?(Dd=9OTQ)h{2dVDpKE#|$RaSH7HumJgi-{r0_{BGpGq(vk! z)UO(3i1=T;6XD`BK8oQsu=uuI*kaD7NO;e}f-KV^*J9C7QSI=Pq+2YJ3KzG4RRG5nEvwHZPN!vx__kZt2AqY?@RTRda@ zaD^2ep$g!RpBWUIXQMjM6=AImvbN67Ypw1q4;*CCO94uZM7NilebL%%?>&^qj+W3+ zidZzgm|2DZA5h`Fa9k$%eM(zhVj*O^hF{r0=FB9l|2-57T~8J|=HkMmM-gX-AR;SHOW?PUedpabO}JZYh^|hF-0}E# z0pHK*T8^NG3?qBv<}O`+a%t*W{l7_!gbqFy^1RBE2VOz}m?XmZ^_1crA=t)vyUfla zLXkT&f>t|D&3&sL-Hgo4_(ejUxwltP0AGCfmZ2?-wEm@q$8+2+(1Zg;Q%A`k)Yt^o zmjVo7WErj1FEFlj_=U&&|DC|c?n(%No5OR8*6>GGH58q4~gVNuixSy*;{8b1LaiKN$Zd0(Y;Migk!Q><(1e7q}8oK*=BbFyzGQfZd z@!mAwvZ8*L1eB9&y8^s`cF7STcN~UQuWTo#(>0m89BzX;T&ZJiw%gIR<~W_W>H>Ue zO0D(M!u!x?s2A&Yo$g5;oTQcrh4W^v0EaXh3r?-GjLI`=?Cw%lbg z<33`%TKR-N4Z;5D&tklonXN(@AmMk*j)lY_#HgCEqE1B@anV!4`a8}51S(g^BKo*q z16RcI#1ml|$MC78b(kTF*JC#J&1bq`ih2hi$f}?KEhlc>a2wD|LiMZuw>5E?-O274>?0)SYx&^omwi0Jg7Jzawe~f}u6p(4qQwZ`fmXI3@P8o0_4zTF3D5w-SDS08G?@;a7mDNhU|Fma1V6S7|O z8BYL>huqtX@jGPP>o}Tsz>V3RDEuFWWU4cDmw5LxvK&RT%t(-F9 zFh$MP5Ec$J4|y`{PizjryXNBO_j^0ZQkw7birZa z+ExIU%DtdbPm~V4Enx+f`CR2d3yJu!OaT#T6bv$WyOfre#zBG;*^8t9K_G>aEnn>epH+jzd*KCL~Y+f0iQKFPq?e7^! zBpcV!n_*Zg2{KS`;IsuCXAQW0-UdjT29)OKTL7*arv(es)4E{#++&hzaO2JVQ$ve6 z+Ta=;YWU*yZ9xc>K+7?j@Yi1#Y?*atNvFZ|AuN?`A)A<|qgw(y?CXFuWZ~aGC zud##`n|;WmMVBn)+F%I3ef(O${snPzt9Hq*Fh~>DifQ1G=eCW{3yK*qk?8yz-aWJ7;?;tq0B~@eKW^zjoGG>4O|qbcx&PYRs9u z7P5d@nvu~W@ZLcFEv=b#`jJY;-H`Ep3t9_Rx_2b_R$mV3QZ8~w3PPue)t?2v_GuNy9@>ntj#SCj(rAoKj z4pi1_jOAcj^VvL9vs2`l9Cm3<9iTP4vLx#Npnl+7V{@B|dvW^_M&qQGKiTKtqF5hm zG;s?WF}0J3?(|^K{)T5@YmaArYdK77C9&Au$?3(C*}0A?xas!teQJ# z8M_x`pG)gZ2@#h6M)WXP!XRgZ#~yc%f>C`v)(!K|7&)&a6q!&Cg~bcQi=Sg0TY1(9 ziu-(eq+OuSK@88H-e+phRq>%8V+7qMV3to)jV*5ldC$_>ZvNLhy=Jy&A*QgHd-Tq7XS?%w&4UNk=UIo;+%vtgJisfBLO?!oW z7DKcfE3;oQZ7-nFFK<3aWM&2iMl_gq#;)Fkzfg(IVf0tki?)(5zjvw-ezJ~n>?z4A zpsI5oz=KW3bBUvu9Dl8yD{?#_05d(CUCc~!3jJpM@epGPJd1vuVmynzxSLTR4*-}vfc0Dry6=^x1bM8eldOn5h&@tUc-AJB1ETSAapkOY_XV~)Ts z9t^eR2e^%#AZYDI?K*=)=A}1=-g*@m-!N$tx$y7y85jRWlO@p4i7FuhKc&jnUQjdnVks`U4s2l!q846hhHJBL&8 zRq7uArgeK(i}0s^@Lu?1k%7ahr2#X_0!kSNJHsBx7v&UXS4HFcgtQ2}Pz7*_c$>?) z!5z+tq9@E;2H$Qv*cbU}y%)~9mAFe-W#4KbaV&Y;!_^s#Fwj6Ry53Nq+PIM)c_S zZUwkoOUL$=ooyHmJ{ckYgCtWnGv16l4et!s{W&Iyo`kL3?=?w=kCfCcyyAlOh3aum zE%CgkMybZL-}Q9UOlhjD$Yy7o(7)9ddpZKE(utdp6-my@=gX>##SnuJ#DP5X$2*{2 zXnhb*=tAoD0oT150gm0L6=bQPi0Lqw{cx0^l8-Ivl}va#^oQ7bG#^&R>oS~W)#_

|T^X7)xSM@WIV0i~IiqhXbZ3+#tJB}eZN?%NLTlt&8- zF6!Q?%=?exj`-xNy~K@JY)KvGCG%@RT8e);tb1(=Pl*Wc@!+yZo=5$x3=iG-+q0*03#sjCp>6Jj4S7|}NgQTkn* z<6Ev7Y95y^U*9bOU?WrKJ!w5|s)W9H+R|FV))X^9%NQ0?n=iQWnc#G4@x49GS7H=W-Es@C)VEY44?G#GvfHu&QDWt9ZUgiU&%S(cD_=*E zSu~B10@*h?x2t`<$X<&^BUA1Uqo0o@dp}PGhroL_3G(Ejjb^umt@gMSqZh7as~e2@DCf5%Eg=MYt z$clKA*xqMBCNeYhSzJnL@>f^@!xdm2QP$Pf0aEhaet_8r2#y~IG$H55?I#LGcD@aZ z)sX~Z^x}E^wf?ccMu*a@HjwYPvnc7f&57Je`!|ZMDy5h3^{_fp7n*F4@37BpxTjNEr>WuQY zGA&)5+?fQC)fC9^N5Ol}sBXUDgPK9uiT6SKHzlG}sRaM5ds4li(^#5hUKSc2jpg47 zGv6+On+}8^Y-qHKq$b`yJh!&B3LUd6j%@Rou%KCg3HjH{}$yx zfI@#(E#vd@HP=w3e57ENx+~hvD3-5wrJwsRVz#^Vj7<29xEie7?g+nQeM-?|4HDx& zG9^2;KAscqs}+`i^|CO1j9^Y}^@9AEmxXXGs>it=@X?wLvt2PMa4K%)h z^W0kp^_S}4z?1`>f+$oM=uFkOZXOP%8ZhZaqJdY z4dNQ+sFa(t0)F7vWYL*-zSE zh=(?M(ts;0jQ7Cunv3fNip$d@vYP?zKaV)ieO;6PKp<8Z7_hw}Y{79Pb>di*TKjlB zW_0ph*s}yO0|{@tp?!l(_ORpD0K{yMtq?n4=DLB=R!6uhwE8`N|3Pi7Ykti0o;T%P zXR9rZj2@|Iw>YYkUK&%?c*9w(B$u!dS~P`xYO?)wY;X5Y7` z)*8xO|G`P8!Rr8=6std`MDU5x7eEeAAU9$n?qYtItXUN+9lpe)Yb~CABvMKpjkN*& zzR7FPgQdj>yY+@$X6fZ#y$t=T#CX3M%>yK*0NFi2EU}JX?TK3}knl7!LD=TQr^5K+ zV0I$@%GVbIB^h-+s9EA&YiZHX4Y%4k7TFzbzi6>5kTS!HJ*%m|4JFIViMvR&DI#BG$kV&T!AMO;KiMyWJ5q)Xw4Aw3y(C;o{;=B%>GhS{+cT4`l zN)y_LVZD8%Nf&qdhUgn3qZ=>p5uQJ=pcRRu9uW#1*iWjVFs(TxG^wFrtYqaj007%k zYWTo`fYFDp5(FwF*Gk<_Sj9%zJj!mmb-P!W+fJZx27k0KjW0-y0f&wtCjqvry`<>( z3fL`4e?doekeBt4k$Lrt&aTl9;12=jNoD{k6Ub=lG;3)=%mH^D`0Y+(Uoa$8cdb4( zyy4SI$k+?AJJ{P}W8W+SMEQ)BKK15(YFn$+!}1Y(phjYr>wjR03p@bMBIj-fRX4On zGCx-aLN0(o3UgJH=3Xy(5mgcz8nHilS%&K*?Cht0wQj#1T0e+olY9f8-CFY~YsbFL z{6^7E_2YNodcWZ4Yo$6>M}9z(@C7@Ey1uS%U709nX?^YR(4ja{b(qs0Ik;H*A0x0& zX^U}WqF7ezWN6ft6(mb+wXzn3E_8d@z zp4b``;v-cXu$OLSV8Xvw8CuK?(=&%UyxgC|7KcFqHn* z*40I?`u#Nh>20473-kOhg2ik<;=(Y}tq?29FSw~gBP#Haoz5Tn5`$-N4JbH|d)S%W zN@+wSL`zM=O~Aha6HAnCAYMtxaZxUE$^C%E1Rlblqt}0+xt53rz~nMz_o4M4kTSrx zlYXT@)Vx$Rci<^XYr6TO`uB|F`oU}CO`%M{sDlRO(2hMG%Oqw>mhAWpJ0RGnKLHsj*1>`{O~+gID;w>ykeN*#n-T zFp2`VQ^14YMYhZJ&#(UiFy?EYN#YC33jr@sj9|#MPHwBDBBo9M0d^@q;4kJm5dT##nZr7vu9H@wv*m;QcLeG0cBPhA8^4 zIl275=A`l6r2?)!Ij5orIj6$&p+9~0Mxv01iH${l!y-h{#rE2dHzM)>l~mxMo1>Oo zuvF5VTwy7LZR_WjPDYzu|0p;i!wx`+PD{>GgF&8x(1U4_p9f4~>Qu1_Ls{s-(lK=1 zpH|@`q$Ij||2(jN&KH)J+U!jh3uV5juHiOqyKG-W#--+HWQickzzsNi_uOUK}J1@N@5U=Au zR^@+tm^bU%UfTD1m5Zp1!NOHRO|B#S70V><@4Fg{)v|-?U61U4QPBneKbpQWEXwce z8bLxpq)P!sLb|&I>28o3LPENmp+QwzhI)>__y6*Vix12- z_nbL<@3q!m%P%h@LtJV#G*Rodf2yQik++E9Edzv83{6r!PD z|2?m2ZkOr8THTBZ7{o<&V|XKk%+mp!9CyWaVsgWt4oSv3jBprIUsk3Uhs^Rl%D@&%IowJi~nAB(@W|(egd~M$>~$= zK>T3xj1SVeM2xDJS=iy7BNF$|*l)m85upLE!PwDz^XV7W%a*^J)QO&NhnMZ@g?g?< z(-SenT{+_*8WMB^)xiDfo0wk;6qoGI>u70nT1^z0%&H7G|3FLksKsnEX=}^1ArD?z z&{(bSc|fj!&t+8Q44ZlHbXh(FVPRlyJ=HhJprB8|edFXBOc7!Xndx0}R|i?(pcB)1 zMf~hM?hU*~3#k*vs^6gzW(Kqnd03$}rZUO*%DVf%_*@dEJ625zR`u=4;Zi%!Ic0sX z8^27X`%8T1J`oH98ws)oATFYpCh%DrJGTk>X?=!$8qub0Owf!H@ubb!`Vty=|9e68 zZf!z(AN3+`VE7-n`hb@_GYiY#whd9rIIF%-^uU=ByIz@N0a5mxto-;@Cm3YPi5ipE z#jJa>&8qzX-yff&aP;--SKPSK`!mq(;bEqFxPL_^vqkg?QPCYbh_s9{5WO)xNvE)U zUzKz|5LsgHJlf+Qj+IVdE(k_JI;@a#M?QDE$Y#@G&5{;y%(E?PBI}?Y!)vE-?391? z{n=O^7I38W>G^m~i5mPt(NCmT9U}XWO>rrrXh}};etcE*0^cH|A7dy-sbcJC^Iy4B z0ziVRD>wB=qu+Z7kQwS`Skeuoi(|-SCi%{qCv7;oEtqRP&T$=4dEDb&!@y}7M33%# z2~{m}o2#*WlX_pO2j6`(3Zqrhf4IdjkQ#HrXlfNYpY8ILFYPU?znLEH@~oDeD@HQi zFEgczc3Y1h6o6i(S00|)-TvWKfC^4I#heLZ~0b>Xv6KT2g&kQ4H-sLD6q;UIlIX>L73!U0*-~?yshI61JaD=CpVVU0ie0 zQA78@@iQEHrp}Y#t1g21{m@YAeAD$wa@E=-j60^eU8DucuPy$Z`0I0}JzgrYAK(&1 z?9IT>#+AS#Tqi77a{>4Xc!M z+>K%aC@8#6n<+W&o@iFTbyvR+k;r2if%Rljj$}YtT+PA*CF-G_h%(jW^;DWIcnkKX zlXanv73$H(x0c`B<7kr4@zK_x-|Uxua7Pk#BNAlGsi+z-Z)cvHThz{Njby2j(E>*L z4t3`4>vfbNyyh(u!NMN3Kw(@Jl8d$4Tjv;1=d*Zk;X`clRqzXd2V^(+;Y7-tsWXqw zJX*k@3_@~&P;gl6Ckz6b*zrAwIdPrzCo+_Ncg0kVYl9E!AVgc}w%FcfN;>Cl?M!~Z# zaF3?Vf>tz^_MK-(2o2+Ju|~@Q9M*)+n50NegZ6jdim7(=aOswxb|ORbVdW@PJipjJ zBr{OomWGbQ(kNiU65i=q{m50v^24;%y+oe3E^lSnU26ZLkrsh-K%`^1#_KHO5qcfk9}ixvZ=TVeO!( zaA`J9PfvdW3@(QDW_S+c4J$eYmcyR9XGy57d0(XSq@xg{t!(->(_#CHOFRv-UnUrP zEbf^BL|TMlbrlu1{lpED51uK%E9iWY6m@Y_^kjK*R&d)wHkJ^`#Zi^)I+#@4cv4XU zE0M`uAvmN1(uc#_grpQjP;`O;Wzcn5&3k7t^0*p~K4LiSkLbDI{at5=^39$tB`oaW zG zKfV1>%iAz1qU#>}8%Yj26uDCb41JkNyzCN`;Nz5oT*g(XgpKn6|CdqTi1%qpemuU7 zOdj4B_h^-=q>O()^f#zyyQw?ru|_+hVa?#jzGlR`d^xTYR+E-X02%xl$$|rnXSFNx zUo@lRE$0?^>Mk7dnjG9{@N|YKfR})VQrHxmW{{XzJ67ygkrDsce_;3PFJv-usdXHF zTd|gI{SalNi(bbt4F?g2KX$#| zpN*<#MaFd8Q`3aiqCcM_TUwM+2D#IXD}Iz|Yilt-DlC9p=e#N4Xw$!olxSaPMs0tZ z(~`S-{};g$n~ycN;dx zc9t~u25+*cV$e($Rw*XyO&3f$KjNd5TrhBWfwHzafa9;K7>i7vahxF~{>Yxn&&VjC z46otk|FXCDD5GMn^};(5QC9hxxWQ@X`};dRn_I>7^gh?(-;qy_9;k~seQT;3U8GWB zocyyX_OSiwTxu-F#9p0@%yIBp`va4Ax7c2SE2~6!kvUbIWIK8Z!eAW7P-cBwLkBpj zX_zez*kyu;b+h53F!%Zd9URKWQnr3L`l+0N5ON+qsm{F|RyNlw6re=V9N8=;cq6H#G>~<7Rs>S1 z$#IQPqt~ZkQbtu$gpE(v-8-;9SIzF}{kp**Ad3)?S5Cvc`i@JSkm{TVb2&DhglSUC zyY;IdU|9W|CLczXsJs-z2alJ!=T)zi_acwMDRqB|N(O$CH!viFoO-F|;7|d&8O*$yy(1ZweNxpHWODjAY_J1K zg7b()m5g<~2vP?|cJ_+t9Btub#miJ=0e+6wT5QX(bqbl+xxNrICxI6)wMf<8+2T!d zunoBUz=mw_6EL!gS@hs?;2cdjuT8-0bt8&(7?NHtu=gMI?^J!Tql^5*@03~0G4fN{ zK(RY|EktHVPxl;20&DqGjeccLp>=lAQ1sSzlCrU3qk914Ysk=!0gV&H|8FVPE zeOHWNN$Reg%IKmmAAKc-b0K{wep|}c1l3uzz3d1PHKA98^9#O9b?@MF@`!QF$K>9+ zvVkCan^_Wr`1HY$uA*54h*dziFy^i(K0wjONXW=;SD!eOEc>rXUrm;55-~K;j#!9Uxm_o-iToIV5E44pQuJr4phni%D?Fj1eMv((4#N-r z9-c0M364x*#HU@a;A-ZCD$sv`uU}f!!n#`rZP!^D(rY=K!Fc<+dQ$Y3m%7~5+hxsJ z5htyKEbrz(d4WScsIR3z;spn$6L-3(5lb1|(+8r^2pQ=->Exv=v^*(<0NvBSf!9gId8tX#o!AE6ea{l~zQ8zl# z^z++j3fwN3m4`cX@Awz8;MZYjO9SY&=;$OCh1{7XmF$=(QwQ_9CECz+3?tn?$j=n3 zpXh%GZ+)&p8-sCXR_;UYNubfKwMleXJAc=;1y|LeA@gY?(8|NZ&bIwMe+J9Gxv8ld z4;Ftt{~gWGUD}rKu>8l3)NF0@9X>+Ck891lqXEh?mY~8g0n$~w+2(NkZlgQ*3V2y+ zgKcvNN$X!pS%H-lWq4`2X!_Apk{d(Bg4+uuiR#B**pHAWmuvAhn zR0bsVgjw#(ST26IW446YdhDz8Qgpoy{MfrbM{88F9ufzY(R{zTPuUtZ4x4Q-4Oi4p z1eXs{BLI;PH@t!=Zg4KtL&`gXfm|d!HF9J70h$$-iJ`_j@(Tp!#lifaz*w_cU~~ku zX_b(-RNvqgukQBM4}y9kLC#iQ2A5u7)%r?DOV)kMr2w1>d3S+xH*%j7dJ+x2eADpB zzI#s8kW--Tnt(uG907Nz5%zRQkY!^A4z zPRn=b6o=Wr{mYlpRTA_B6qOK_blT%M?7IrzRdiA1%~wvNmBPTOIERiCH{Wsq+^BVV zzC!<2OR`^7mjx*Jw${Z28eOjnh;TUl_+Y#E+p%-KkacJ?%;`P$5g1wI38jH#d+4}^qGeG>(cwGK>7{gmTM$zVTaj(#iwK+Ecq*WMpiYRyis6XI0r195jNN0a zx?$p1X6W>;M>8;5M%O299W~)irW%i`nD;EU^^7Td%QJO`s6rw1KK{At^G{4jzzE(x z=T~jHm;ToT%kUL(rG9m8Wo0G6zzYkv0Qv@kRaT}+Ebdsmhh|-R9_7u#%ET3(5ia;%qDW1v!UjpOrTzU%Ijd|c92Lr9&<Y+*49^cunw<`>GBtgj-9EMrOm}y zo|=e>tj^x15Y*YgyY&PSI_*ZCX8F&XN{trp-}&Jvq$bnfY!J=$B~cdj^z{J#Q;iZX(mJ5P+t~F5_wV6BX`}Z1M(H(X9 z?R4)~Ez*#~nMTWs5ItSlCOJejNe4y4paftZMUGl{Ja#9+6{bU8ZdSv{ejDAsU{c#* zH{J`V?`fi0Mps5aS&N!Sv;=9~sJ?rZ2zBX>AP{%aw6z`P(zP=@dymq?UTUkt#ZAL#zlS^2uJV>YI8DyM65e{|IsH6h^}IY@zCL*T+SXrvHf)LKY)WcE(Cz^u_rPy zH7LIxX0IlxEwmYyo&5ZXiK6X)`Jy%WWA1?9tMENFAE6jemR}z(ejzh?g^`U|Xxyz|cARTlWG1bpp(~uJ zUC@MXDyFL?5Ed17!aEtWc3uAb4a z96F7j1dp1R$sC6qumKfA+Qt6Su{xY%~{;^yCc*qAnxf6a>z z!0L1M>dNPfd0NQNW#mya@~|S8sia)7iO@5a*0T@eT1TL8+lHwr@)`_Iw#*D_}No zXeVU3Bec0AMAD}F?FIf9Hcw$HQh)WiSK%B>t2&*YscHf*78pX2h8{53Vt)na7l-dX zo1PXV2#1x>%qbNDMA;VJ#8E0~D!+};GgjJXlHr8Pt25EF!<+btv%Wue2J%;n7diXK zYSv<>Z8lE3I#&jB<*i zNA_V-_hZ6`kW8BRXM$i7hTq>F0X(@}qgJISEDnlTBP(kEPIWJ8Az;6p|C@dGP6BdW z)P_-b;J>5Ad=H;LaIw(Vt#qqD1v0h!nONg{{L!|tnf9}`^Bdp1zUcLanLT>>+`b6qRtXv{Tv0#;Z-SyK>IB?0Lyv% z`uad9UwC*pFe(UEQ_B(`sxT1+Vi2%}bMb<6iWDfc0WiJp+JUXOp=z3zSJYLKaxEd2 z0+pdweg9y>TOMvsC-erJkUAV0%6vD~ln_*=r1+XAhFoU03_{>oRFc9dbR2xLims(n z*(grKZ@jZu8H?g^4(Tamqy^n zv&Q`CsVQRsXWm?$E+`s&+&?RGtTS24OJ>RYLG6&r{0cL*!+tNeF;$agZ~EbMk_Uj1 zIGTCPg+ttfpF#Wn@ch?Hjl-7ySf(Ok!4{|J3YsE(Ji+glSwaF*q05r2n5;N8JDc|Z zxrBG8H-||fJM%(TA3;O)fvY2}Oya}q=bb{(n+B!9fShu7PCCyP+AAR}T6H8NWKUxmD8@}9@L)?Yq?HU%4jo|L=4Ix0?WA8N<~qzALyYP5j@Xt`-xM~SpYw06tz&Y|K?U{3CM94rZ;7^ zh^;o5=cB&!$C+uz_!*s*6-O;7)R(QVnWXCOXfqcV?uHB%>}YHmz2syqzOifoS0$3< zVF8oX!_yV(L-~QHLMf=RF%I)ThSIn!K*$VG`LQxH*XXkf7R}yp6+sfgT>kX4r<3W6@=fgt!I@tlYhFWM?l!<29}e^h_KYuJO6+;Ze9++@Pdz*YnU&|@Um5g%}%#{ zhxnuC7urSq1s(11(fvNOy(Yd?D(ON2)) zs;{Z3sjI6C^!6GWs|eT0Gjc>3YEDhg(65Hpq|*CQr#`$Qr2@WEkHX@(-_M;nU}So> z=7*LcV)OfwsZNjm#in~ZTF-j27s#w)#Ll1B$;K^hJZ=zMbvJw9M*##sk>8^ksN`3& zq_5`xpHd9{QV+S{k81-sh7*9d7>B*;#7`y1iIG0c0ms;7zBwPyvgm%oVuptG0D3=g zLQUM>9rm;<*+68AVoDtS8KUgNr;_lW3pH+b8M?Qh&b)2>+}!K!Vh+!fU%pdUx&B82 zm7T~QWTle!`C@$Lzex-`4#zjx?@C1Z0~io0DuSf1wbp|>dbz3tM`UEW{7)j2=DlC5 zm)s18+*mR77YeF-8rv+nQ+7W&H|Hc5T(->z-YLHB!&$8TffmMZFMA$J7JD!x6$EN- z^oUxOEt9kC&M=blND1w>8^S#gvN5p0Kq`?Q=r zA0lnmoPgy|MLjm9JbGt)iqhr*TF(>rlJXrPuIR}IKFaQ7mP|5^ehy>o_cc7$qOw+* z5)T&+4g~{*TOxBDoo9^&99KMb2lOKq(GzSQV)(3v2#bjP?4lzqEM%B#bbHD9>-5iK zOWYZ0*-6v~qQ&G?42)%m3oja$yrmv$zI}VO;5L#zWEK3n3QVpb)XwqNc^rmoVv!9c zA(i>HO-RI(=ogfR!f3(2?sZ?)!q5alHxm4Y3x$%`@d#px7+NPBPMWHW;*G> zU$)+pwy?fL>T?-rj^5cC>&xX{?s^B`H|nHzGdLbO}JD(B`P6eAff7M%4ql|79ZPLr>j`n(94^mC>BHwdw+K5z+?dHJAg{+@P2+Mx9 zD!6yOZ_`zfsl7|D`IFf$?@worvDlD$G1hhZdSygfL! z{iG#cs+MMf%9(kOB7y210gsbD67S!`gI+j_$J~F}O*NriSPx*}d9^=Z|8F84 z{s3f;s9Dq^p0S42mko$ATLbubk8=m5KJA4!f@PdcLeN4#Tv2!He^*mUU+r|XKf#AM(xdCHCR&Ji2=Kw}#bY!Um0@)VmZL|*Yi#KKsX&Pa4 z!M$Y=$rhUk!Uv7xP4})bioLsGJeoiAAay=D!QIgY^k4D#jtmA;M{Jd95Sw#IMU$CU zrOx`Gwv9@TaKG4-RPfq#+;A-Kmdn3;YvaPY)MIEHVDatvbA!+6R&FkBXmB&j7I-T1 z+8j@~nE!e|y4W6W7R+y0JpA^JxUrieMF0mlQ2ldmIq$Daei#0*(P{<=(J|z%;L>lIZq? ztof#xIuh+r>4@)Z1y)f1BO*~@-6-WaT8%q-TtaB8irqB+zHKoRwKywzj-+Q*+b{lu zMZ;f$zj~<$jwB%%Ts;)ddWc zStU4@MPRJOvfxf%5q4Q_3jj6?zO75$e7XUwyZ_<&U!TY63UDFSzI+&q(`Us%5xqT| z0IHB1wLs)VQ9!$%_}!(2BbAkvmFhQ9AE0ys6ivWhMLoFNGLw>Y=2?mAc)}`Q-eS|* zkA*&j()KUMzm7#iMX-pYP%)|rTXHu`qh_eEGR)F{e(ntRnvVDehsMS_xD^`6hPCA0 zeROcBJaqiDc!o8xw|f4PTfRQUK{TYcIm6{6d!y0iS`2DFBu-ZfQ8ql>`TD->^v|s! zfbV@_lJgv9V9my5Foa|+WOE}IGWBEk$G7*B>FS<*R?qUFK2KAjG9(?bHck)N_3=ca z%;JZw>*GrDl(_5DM&05{MIonq$UkTA;QinV=GpJ;wb#Yv2fZp8Rc-#o-l zWQ7GTsoilw-Dj1-vV!AiKGMMTH#L97&d|JU8zfO1b zzKB1vlLsrJ|BZK}$yUeWYGDBVPvp=J*$MeVs%uj65~TWq8Jnq=ecB)8S*E!GJlfGI ztjm^U%HT_Q*nmQlahj?n!Hn<*ZRw?{GGItLV?Fn3&ER@EKvs7l7-v0fmP zhk`34-h%b0ctLgn&mEJoD?=a1@``{Waj+A8!QYiVvfLkTJ0aKTe8GN?`YDH(h^3ct zJpH)xe#QCR_$de{7fpC`T?l)zzzi4RUz`Pvqh?(5j?m}RpZc3=sgooRP=x>K5`Oaj zcy!z~WS8Uf^oQYvjYubo@lQvjzn|UK?~^DxjC+_2whkBK2sa^lSUZ*n`pSg3E<)Cs zN*|5)Ot|&0{#rE@aARo%?xaCJKEQ+KmF4K%+p@6SEXX9s<%fALuGjWt=TnE z1*<}fw`6U2;n4-FU@?(}@3PG7y*J5Y$q9JbljzkIi`&AJN~;v~Lmdsq2;=Ys=7oQY zEExzfTQQcdW~PtKNT*js4?D(>Pr@Y!BAag%e;?=8owX=k#GqZ2IvoUAQ}5nyI_4yM zcqHr!ECVB!;_z1JrpIjgxRqCZ?57GOqAZx+HDM)0X6^5;-p1G@X~P=67a%2qV=jOk z+)mcx&J&okTJh`8Q;PZ~Lpb8ho$}|WYW~9F1|IBmh%y-O-H$B!1=V?2`Ym5WFWQ#f z{-k&v4rRV$;7NMNU}?pjE|R3&r|j$Ub&FUe-tUONvZ1#XjlIF#$Qd&h=Lgpi@gq84 zGM(r6SR|8vM@Qnq&%@|m%ZI!)z5j;z)hkzIub{MDe*f05;$^K(jO1<8{d6^@J;tIb zlRieRtVTU*)e-fD<+1*KN8`o~b3UZ8i@>Ji*~!vu;3;q6>$7mHMi~!zY+=hM1I{ZH|Ne<@-42q(&luClbf#tLvcs8S;ceL5*wNn&-;J06#aqDfe!I7Hz`B$}wyLX64>}bc#b>NnuOkhOo_qPO= z9uC8;D}o)2&6rC#lxd!qH^zi*WNqu?w|e(JjvEO@M_DZgYrh)sTR!6in}qQ{ zQ+lX%ar@`%hwey6siW=%oty}q-b&Gs_?a2wmo5n&O=}aQe^avd2^FR&2aR)%G!*x8 z)*F55GMew)p>%0a-x>^Xk}ErtZGWeYLiKO+GW80_Xx;38gY8beT{$|CgQ@!4`*3+n z7I(i=;tP?G8PECL>Y;7zoRcVB*Bg)KJ=CK^q{Jz0U>oljj+Cz2mBZhoov4t5y}e3c zOqV@x9EfUcVciWyGeujy4A~u_5;u|>O<3{WhSS?m$IYe?CNAP}D ze~=^|rtL!$rRIdmBj1g-^n;ut8{Xa1LoMcerVojykpMx+(^XYfl9rg;Jgvk0ru|uq z*-lX=4kc3);;rwX=8Fxx9W;k>bToL{nWq!>RlQK9L2W*C(umhsN!O=wewE9Pn2vFT>a znTKPLt@stF+a)g+?(si9Cq$;{I#tivi%B;1nFrfVhEgnG+;a%8^D_{D_P zE=f6*vLnJiv_K-j&Hm8p6U12cZ|l8j5OOLd$?L9$_Dff4l{YQH;S0Qr_UYGN2kX`5 zgUBY91zg|o35(S>qsTwaKIKKtopCOSq}Ly&3>J*J5|X_U`jO3w#N6RMJC(kn8mwBY zhs@_&m4v{<>8tKzs;M9!RtB>U9!2AYx_OIaYU;A-_5^A#JsW2Tnb*|$pUPRiF8k`M zRc{Qh-qY@pDdE;V6O1GZYDTWs?OwN+&QmjFAE6}uxC-!)7jPNcb~;udy;AA;be$2h z=|GyZXiHHFMTe78W>V-ZAQasq&E;_8retnJQS-+1O-xMm_4PO6z@%N~@li=7#$ZQm zbL0(o-JZw64DCKcXk~39bb^I;_hoaRjllMAr*A-0`&XU-u!HXNI|voTQ^WL&sj}+Zth{QaQ&!Qgz1{dtM4b zVBYwlgp!dfUb^IRg-TauwdB2XzeR~tFrB>W?98(!tTDx6O*vw?BEbucJG{DnGv8FpeYin|Nf}Q=`paVhVU+|iO5efi9#hw_ zt4gb$ygTt}uYx}Nj-lA@>(&>63EJTqLrf;CEURih31&mmD`azgyIv6+=TKdwRMq*H zMi$4OVS;fOskCko#XE!3*CGDSh%y1)ub)}!%p<==`LS+Qawiw{o_pxkMK+g`s3v$M z`f9UN?}6$-UG}%b*kfs7N-hDhTgl*bxVu~JXty9X-Nn=DTYmJ=4u;vddC&V47@3B> z*n+&T;7-(G|Itsci|(jt=R|Sf_@Kii7#z?_Y=J;kL zG@P8#^h&Q1sdLYyuYafWQ(ID1RD`L?b4ZEd(TF4Ow(!nDeXbv(OtRE8M?!Z!ajf{i z^%hA(!}-LQa-^*KA2Tz>CIeb`^&Tsu>ut#7V^`gq62$r3E4;NbYqh(2u4cOZ>66|m zXHjkgDNDQN*l6NcofJJvX2dwl7dlh^EB{32GL-bR;@CW$AtWT*g~zP!`jC?pyATpK#!! zN0x9fV>}hGFg0O8b@)50m-6~TA9g4l)Z5ftR+Kw6V_b3DT;|YlJL=`7GAs#<^3AXi zFkAx%xun8I#R;Rhw@NDYTsC-RQ{RPSC3&!gR24dMKiZ@}PODp=-mYR86wV%VnW)k;A4DL!>&WR?oJ`W%P96Q+0h2<%J~_#Tg0VCq%+pU*)A4b#Zt@Xz+Am~usg+XmRp?%N4^Y)3Q=8+%aZqDrV3*;<$SJZ!she=%g*OT+iHr( z{6wDBlm4dW6Y&y)BjQ!y(t63|^`%3ZJMRtkS-lOedhf?!A^kC7WS61YQYMl!+qzz# zn7h8z&cwRn_jlX8pvU#S43)N1R*lj_*&yXDwbTx+z;w=^z3_9|G`7`8Y`d^fC*fgE zayF&B(nIUo57fW#!6TotU?v-+U6en14sejL4OWI&pIW6T4syZY4^B@Q!^oKH*4?pR zWQ|A!Al>cl_kkLV!=#0L4~3n>;QKE)n(wZjgXj>Xt2pULs`nyw&r7S?dmb~V!enS2 zi)7x@o7{k@#QYD2@BD?!$-q&Z8S47rw;Srk%hbCRd=C2$;J2CBANb=(-eMFy?H7lmMxnJO;)xN zK|bNeTqa&c>r(?M1qxAW6T1XxD1lzjZZUgzbRZTM>)=KLYJPF#cHXaFzvS@#WjxyxX)7{W zaXsZHcN+0Zu8~inaU+x71BC~n%5dxm;+05O66OgQ)+9{$YBzzOB!JN5a;K*g4l6WK zv^uNbtlHK?v#k)fdc-V6t29dd!F6iJLN3WQ{H%%S)-H4-hO4_0R&{Nf`Rq>mq*& z@{;nsM$5@9yd#zD9v-6{QsmOoDQ`^NcFyHs@dS){XB@(ow~>;72{tRSGm(A`O}8ifK?wk(U-(%JX2IqaOL$HhJcM@H;}~LX@}B$&L}CE zIA1Z99cBr!hgrfn=;HGVE+ zaoFm%_on4yhC~^Q!#jZ9^6-xPy~Krd2nanTQi0xX!qL%RZTQi>e zZnSq6m{Bjy2DkNOYp3iUX@xCv1v>XHMRVcDBc@x^<6t3<9z{*eTyqA7rZSwRjTqqQi2|z*S!v1szB(GYShLo)tg4mYs3$`#J?sd zFuZQd{aBTHLFRytUp6BJv2GW|&Tn(ZTWjxJxl1tEtyB3z-!o=LYsqS?52y7)y|g?g zV8piTCl*sOyu5W;roLxotmMD0KmO$YSvu3jgpOO}%4bjzL@*6|sJU1Xd+tzF%4pBp zhWx9tlXZa{Tm-Ya>V~JRbTWl`Q6fT1K^KCu0R^-%kLft?n{clK}WvRnA zlQ4WVQ-lcdix2;*e@KiE@g@$f)Hkr_3?E*9Y|vP=L4W9aV1`w42P%^47gF zxZ?wj&RXVzGTW_rFIyd{2uOeS@j9)G?euMaNqXr&FlATLnnY^62cc?{{Ox^1ZST~>jY<|}n5yW;Lj z$n%2ltAU7rL1ly=GWkdchQ{O}4 zLFET8nJh#ZH|OaG>4>wkY82{{xCghTbz12khqd1aurC5_B4Qu*!e|nBtX-iNeRPQne z;%DH$7meY@ue1WHHhpCu6ms)%UYTm(w#Kb5xPsDKiI|7~c10W~4@y+T5H(3-|M`S- zf0XMcKuv1Y@Fu<)uoE+EoDvv;wx?HTRDYJ5d$?I8VU(pVFHGMDK%K#Z)Nl zJgXrw$8}flfg1TUYNqxXI#Rhw8Y#`7#d-(-xxovb;op8#UpVkgf6U%ABvE9|-Tgi1 zj-%c~$sPM*@OF`{iCRmr_KB`9!v$U`DT4RD%}pzcw>4R^98qhr*ZflOenH zetBQmZ+i;~d&svXfO0{BmAl%BN&ijyKN-VLL_TEEcMxScN&VJS?Yr-(UUNSY_nS&S z>c}pk0OT3^6LymptQm>x{n|WvxNq9Xg9!ya_1p93E*!Ow2cKJ#h9gJJx6!P&TAM3h zS5g<dO$c?S;wplRNrYWO)5uD1U~^D~yPV_`@U*Ow5T{8kC3_N2RS<4=daO*9x?)L6WA_NDR{BUMu8Wfz%V z*5WIsM1eTb8~bkfCOLknJz+`?fk$Wr)(Fy!DC<|j&(gcE;&2}swI%;X9-W@@OY7~$ z2An8iPQgAYWD01eE7BbD;n1I0F<`psh15QbT)>~Osd@FxB8aBGEQ~LoRq~IuKs2Q} z-fksxg~=-&eg9zvS&%lOUom}oc?o=yVJD_wrO&AqLE2K&SaRy*X_sN7S@ePt!POd|%oadcT)U z7X9Ag61jEGeth6U3csdRso-&USNQtpH#zv&C09E?_=#$~c2F1Hs~^zebjPXA%5r%W zD=pg10@Fl^ZICf4Ew7}@;1xe;o29l}Qc_~vNSG|p>QLQjs zdcD1qfnA;xmg9vYx2U%(PKK`7rTa_6;abZ*CH6L_3+-|~6(fv}wR#iu1G%NpHo-t- zn`;FWt4ZwHF-I3R>hF+=`HgnarB1V!!&yuURg97t`TgH3!+g(}a)17di zBl}m1zT@l~xF=m3zesS0SUZ9la69YSg~}c(FOWRV!jtfn0DqVmKL0S3v*w0v;hQj@BrGl3sEqP{` z0>LEP)q&71%)4JHe$v~7U?Ke$NWc5iOb9^DRs_heA$-!e%*mY(ARCk15e1JXiz8l+ zhNR~&a`D#Q>*(W$s%tZ15YtIA7^@mN4UVK0q6Qe zyk^dx^08eL84=O?vP;V}yeVr!@~`I}o%1a-dpdG%*gNyVfDV42_DHxfFeB{95~ftc za2uKCt$mNHYHoG))Q;UDYN$O6TO#!b!!BOi*S8B;3|YUJItq_E)R9h4VF!&Lbq7}X zIh%iEsY&=nj$bpM*miv1Hl%?5pmJX;fxM7EUQlv1 zHKT={>tr>!;3-aDkBfou#)#1`++D%a4yb)Ao4w12dxemlNZHOOnyLQn*rkV{MCJJ6 z`K__}WE9aXwE31EF)}Q~?O|u1ns2zW7|3L~w!2NE`qN3o(`|1oqgj<1K19J~s+yugTVOo%YOg=TS_GHR3Se*BHF!%!gBScewj!pj&9WqQgMcT}H(GnaX zD}(C{vq`m1oco$+VGrxRWa2`jP2YtdiRx*vzpn*iP@zG%Jth z)Ns|Lh|sNlvWvfYQLe&+IQ{7Ptu1lRrgO2_asVO9LWV#TwT3|Gt{y`z$sONQOOIT+ zXv(H{TWu#P@j;Gu5vXEF9XA-1@0e8z#-wjT&szUqr?WzH!(NTon8hgE>a)5UEuuC$ z`NQm?i5?c6u(qqHetQh>cK!Au?z3R+5t5v{(DPrvH7ilA39}C7Cm}VaQo9>VG{k#Dtdi$K4lh&I> zu7rWzG}bozna0m(WD~!I^x@r#!hSQ2a?K+WR#lwgL*~`8i-Tg`LhF+UExAqNSGk~t z^LKlOVRsid9hCtsm`vmUR!A}vjVj7Y>s+q;6!!*G)qHF(Zm!#7giTa2ul|j7P*&mG zyWj-pi>58S<1su%8KT%VvyXRzaAbOT?@#XJ2N9?7li==BVPtt^LeWD5Dwa^h=cdNT&;xy_*a)9dFyV#9 zs8Y2P?9EeQzosE*Prbli{?JDR8jkV#<|Ab>rs4+^Pp0|3yxhc{nds@4TaPn&q$Dyv zHVQL$jJmDkLzq66h`;rtoPjL_IbGi=F+FB0rx_9Uzhm#C4kA|9WLzRKycp;12Pcgo zf(+VJeZ2m-ZC4NBa5C{og`SrqL{#4hiy;YH^t*4|v^#SSQ(WhC`T;V<3UbCGNM}RD zPkduZvN>=-f8naHSdm&?!q+r5ia#NygzsCTTwn}6{yo*41`U5-lonzO6i1@L*vR}h zS|0xK?5Z(#70w)qM%~-Q?SH7|n*%4q?9{s|j8^}hJ}zGb%g^>-Qx-YjyZ35GdiD8Qc|LzXaOw*w`D&dB7wY2_)>i7xD-<2L7G>8Hr;*- zll`=x8)27#jV2MF0hO`%)$TqHP?lgC3IZ(75J$_u^TJo0yGLr+qqc~Gx(d^NsPEJH zcQw46!qx}zG4Xy4!fRU+x>@GcSNWY^gytopq8iY=IL$nM?I`DM z;v5h|tf3tb6O`@D$0-f>4E05W^PAd89J6`SzRWj%kI)swC@_eOF+LXQe0R!Xo3Xcj z@GO{E_zBn$t5w2H(483lJ^Q4$`tRIO-uD0mr+ zpVw?rTGq^J(D@!a9Aml4Jwdm-Xkig~CL5q6M-Gu1BREg-t0k-Gky!AeYh`PefKUnPAlEkx1+q@U|Fh+7_&K|G?~o&8Yt zw#A6Cb|H9mXJL|`fF#LJ?zXe^7}@7cE8l#)b`{AS2>*Jr)P!pEvh(o_%snD_7t-?k$X*!-Y&pm>CB_`Y{*964CC_9t*3xc6vR-%-lm4q@B+%VI7U zJi^m^USaJH@buf1Ce4e!M#{CYj+J+hq&ULa>u**N8GVhT6FbVPZ`|Y9Ma~l~dR@!NK?Z z6^|@hX4sD`5-2g^WkG61x9MMn98N1Ft=CaZ*K8vdMk@WuEcoho3!NyNU}ZFQ|B@w; z+FR_*vM$PD=)IcFG_!~DPAXrP%I5|I2a(t@;^!KMw@Zq(jXPHz zH@3@1%gxEWYk6<*uPDMw52D~fM*+vvkpnn?`I@G<*;jSG<)qUFPk9+z??t31qLuE) z)p)X8Nh{O$&jV;ruVk@%+$K&pfZE-CWaXOZ{tzX%eHnZhJg?8l`)yO!t=GTxYgl7i z%gmo{!PIk;(~1$tc*Kg?)KQe;+5UGZbCIJ}A*t(+Vz$JFD*R`;bF>R&3QZ2Qk3SaU zFy}Mg%wY7yyGHLnZVFDfkyIlZyCpfTJIXpT0qrOm&hf@S77fQjUbnN*0j>cRJZt-A zD=@IGKjpVK4-6zLDX95jBcW*RYcOKovJJ;$dy{}Xj)F1M#rOI6uN`xtbc2|SDW%(DA|0;9{Z zr(bIVTeFpmLqip*OCy1Gcv#!cD-CCd_+`(Gnl%>VpXO)WUYia%ocsOcbl?7T z<-D{-I9CQw%I#RKl=O0Aq;-<{P(J^-qRR}*e7u@AMsL9CKq1lD*anQjb=}=rdF@A* zwuKq_-$AYuNPzxb@=S@cHMbI6e*{RoPYD#jAX?qk~X6UFAGfThw>~GK`qXFO2 zk`C^MERlBenGs29r_ZUttVv*%I{54DQ=T&^%+!Y`Xl@TI3Z_ zOQ`^;B{hEf!3BsWGRg8R)Qx!<3d#-x7B!MO)}wTy<;%e_qnk`DoZJ^E;ro6O??|`n z0zTxmg(H2_3PyH(pY`^>?|rLUIH8Av8~x6mBpQ2WKb1w0>4ypy+W zb+TPvO!`Q&ZP z6YQu}OClF{csG?6;+jFAk4bYJ(vggUA69Yz6did{m3hAnJU^FX4_7JjF&zv&mVV*j zA@l?$q?|u0P6fRN_6MPk!K>xzy6f#Ekx{nioUP-+Np&aF$36?4e<2q^{R3n_>CZXn zLq9{G+CoV7$bvJ!=t1sik~|$ADtM}4TVDpCAX!UB9f)*=hR1$OcTD&u;TEP$XG;6y zpKaUQo~Ri;os`$r7XMJv7R5%sx@w2%`AufGIG?I~lZkx9wrBlO-7?$TPUb;4oEq^c zg3tmcR{OW2G`?cf!)U$l@$H5$2z>GPoctbJ`L^8(+$|( zvbo^Ys_ga1__&20RMMY|rBTa|BViWh<5+Dd0o@GKr)tfPC1sBFb_#vvjbMo_>Z$iu zBuO|P_jVXBlD2}LSA|X#i?C$|_D=km@`8%WBUP<&Ej>c%{CU2aL`x@K`e&_4%PSdh z5RxR~Z06HL`I>BRu>R`h5Xj8YvQ@$9Hp@p9!?H#epi(7OMYA^iCdbLeMeVqhft(195TlQ%ja6EP*`m>%hj$v zqyD$*&1@x+L*?5fwF#uO*40O!)_1Q-Z+3yqS8pA){v6wMp_ve^WKGCMfV|eXhUJX# zP?&(~RM-;EY3OTM%s$~KV8SN{%mnP#>MU^*|LXSrHegBPb^6`8<$efGhg|`Ud?K@_ zyIFQu-3N;zEmY1jLI0Z4$Kfjo5Tw6!wK)8$?)QEr{RpKMs=;h1l-y;=ti`qAO_fH zi{Ia>(Q-PJPnpzfMX!xM9r%ALokMK&kB+`71;nYde)I_!Jh@0Xs}QxyecA}mi@`tj zeeFdcxQh+5oEYb;JM(6XaJq1QZ$4*z_gP(HwPpRM+h~+^N(v24Qj72HQmc;NY%;O) zljp-Iqq&4~kRn6uaJ+pbf2+fqS`!5L)X&^>t8c|;z8G!Ia1(#!NNRC;L0ZbMWa2&5 zib$WMemNSB-Ja%am1C)xHag22w_wvOb7Kqd?js@5ImT9{iV1LQpvuFwfJ)xQiBM!# zJ!~Hk6}w8|PfaXj%FxEs?8QCXX>ve_8wq?v9_Hd@QqL-Rl%WeOhk5D9eNcy3DpB$vQ92#l%}Q+;EupQ@0@8g z#6_Qx+8xn4c%6o*IgLN1cYO;GSyKJ;%@+S?zT2;y(k@l$ix9_MBKz+ zcYGJ#L#pdF_zjj~FS?3Vd@kKF$%KyoYYy~Mtd?NvLaDxA@(%#U81X=ba!=RCy_inJWq8)6a864dAeIoWRK_F-E-7V9 zu|d_DV#(-j=KIdt<09qUuhigiVRyI(VI5mQeEI8GG@CX9qWpMufr{mNI-{;p|IXiJ zUtL!L>cT)(jdX2A1v)^!#$xV61bw+sW!Xk^|3G&jN#d`XK1a@Fw8|N#pCw(itwGql zdW9=iwTBS}hXqlIiRtiUHo_2UgiN@{lc=WRjlytxqRTMLd+NGhCBL=!65jAQT`e^~ z+Ar$DT0OCH3Hh8%!MlHYYL^|SdxrMpQfRvI#I5g3r|XI z$Zgft+3nnIp1<@j#&!vcWkJ76J6GLrp33Xe&Cj0grj(i`?QcUae&p$oEqZvYX7J=L zWvKK#y2}lbsVlaPlciN<8?1JRVRWdIa~8Qk5mkCjNC|8BY`7sV2x z<4zJe1&~rQCS*)i_~xxlX|SEW558yeQfq&#D1=ahKM?&fp_yeLCW@nflN7K2*MByC z<8v-I&|{;qmvA27m5oGU$j)e9kq78+Z0BcsYO&({r{(OgOmg^qTSxF7``&(Y&hu>~_~U%jX&8Fm zbp}#pS9E)lr5Jk8&XhOL{k~dt!KV&9z=3+MhS&XSSnBmPOlZmBOUW!x1FOOsE?9AC zWgDp}UWX!!9{v29I|93$Glx3qy>H4dEcnRPzHI-maSAP_crfIpkSe`H0tsX z0|aTzpKr7ePN9EkgYi4sgCF$Vr-Hl~i4D*6M;K{=W3-v~#ojp#TmqS?KnA(&6zFVd z`cKNdCloBuU+KRFwWW5=dGT6D>41+|643yZ>kNlLQvoGvT=4U-3}E+?ROfX)-}%qd zRdQe_;f>rbFqDB-Yb%jX~mR_<095N4!V zLyKO?yMalT=YQwp(hbG5l2P#6);olj)7)jY^OIExqzbfrSu2T|uz-bL4E@e@CG=b` z?}qjAy3Z`oEb#(1?XpOD(gKAgo5HP3c^xOmucJQo>X^9@?;Vt~{c9%qZ;lp*7w)1v?E(y zW1P>cXT#4}s%bsP+2U`WnrwUp(%XduQejVA&>oYz1x>|Kg>U}!KCnIujJI2SlwSpz z4|@dJIs~YmQKj-Z3zc{?ZRsG!xI4KSIt*>V8sFQ7KsJ(E6+;#b=Tvva=i&NS@&u>) z;D<-txZVZAzs;v9l9do#hhk8rC0La1-&x^BzmgAr|t zpYrrSE>|VXdoqD1HXJ8Mfm1SJVSSBIx zBcQpKltT>)Ul5mo#{lQGKK#s9%(jjfu{>0qXHh(qn>?Sbl*jw)FNXW0!gI=;%F2Pc| z=^#xWMM~!0KXVp#k5c+-x@Blhg-Be}IFaPyw7t{QTL?DS7OmyIE)`~sNUJ{c^wje> zKB0}}8gN9w)){GWpxtXmP{QHr|MKS>^t>NQ*C=SpaCuokk zdnS#ZDA{26jaT$PTrZ8HezqD4Eon(u*&~xj7XEtHMH64-9L#^9%5rj!w6V8GCL`dm z;WwYHa1dF5!#&+?-b!QFfovvaithqa!pC8MY5HU}c0uKyra*h<-A;{Hc~PNw1mS#S zxwGKE+tE6|s$XBKU*CaJbFLJ#t=YAn1G|Nf%=z9;tazisTH@B-;njbuGZdZsH&!ByHwNvUzq@GL}jWg3#}aHLt0m2jIw8_B6 z1urFf*7ctC>b?hdr`jW5frXSmzYnoxwohyz%VJiha5$3JcFNxsbGFX|1^nO<&uDCv zvzz5UJv;aEws)IwxP-$*J(Z5GG4e7c(D66Jeo2%r={nTpjnxRmMu=wK4L3zB`}R?N zPqsv{`?ZEd>NlGD))jmrX&WAdV(4P+l*^V&-e|gq((#T$=t(NT_E=RzoGo7wXs*^Q zRr7bO+SH@;vDvhLKGFF=l-WT;pFtUS32&4wUU53~GHq0;#PsWi@Tsz+P(DG{{5#T* zy&zD2*r`m=xT0?UTrc!o^R7oha7T(7HQqQM9lX7MddG#As$kFIwDCy(Yt!7Xl4PRy z;%jG*l9l{YzAn34;)^A<%lu0i479Y|+`>=_bfirMXR`%_qf+YoOj{;C=lU4hX$%%# zgOMSAdjmkHbzK?UD`YsS*57aTVJAV7)!U?6lTydT6AgCS3Q5}BVZ6WBWtAaL^) ze^*!P87V*<80A9JYi0kfFTQaaj8%LUmFm7}T=ldDcDw-D-G`gM_J#7vn`_?$pr8bi z+e63U!oRZqtfST6=d9v~)mY5>UeS7;{lvqSb5RPxooq>n39zGPa@MrMtyvEc$?i+a zMvOk8tT^tj_zW2amTB%3ax(%Q@QkKsuE*~9NRXOBLdG^IKg!N!x$M8Sl?kKE%Tse7El_ z0Vi+lh1}v1i=cj=;9}EQFE7t56DEqigFj;rk$XcEi$H34HN+1zuox;7OSw~?;$b&c z&@lQ8*b8;~K|c@(RYp|*2o~DE8g)Yi6c{C&UiX=*bcom$IWzS4@bJ|Tr7J_1 z20m@?a)gK@@MO$#4ZNU$YtgWpZ+?Zm-?k1Es*yVLcczj<@F9NHp!qsvY50QIKolL5=^=jVmI|*OQ-%RCSF=D-ZN5Quj@_Yp zB)QLD0TXx{A5wznQ+{(rezCu?eNfY{?bg@ei=9~t!VN)AaNLO~=6B!Z^YkJ~4_%<7 z_}|@GsDwrG&VVzEy^`gHvtciS?C`rkyZ(U8>Brn;#kZh3G-Rc=dd8NwuvdDsHksNw z{pg!|`Q<={R?&(9jIqeE0*zR-G<6B7PCrVL?mH3tsb@>(_X8>>Jf<@R3SB|MPaBy3 zErD^uu;lr(K9U#A^>z)rFcau))Q2FgOab3%^WOI4@L3hxJA;O~)eL!gSeYchw8#Vq>C8I2bYwFsUdZA}Yq%p~w8L1Jg7#1j)o$ zsEi;zC9J_ge4J<|teFoJYYISE(T#N)22wxl4}gH+$3S_@EKa$IPj3)K;pxkp+w=mL zF-4I*bMtFN^QI|cSa_sygCCpIt*#-6=&6+#$8tg#*~-P^rnO6HF)(|utA;AmmLjdnoTRRZC~49?rIYMpZWP==1zuGp6aKWuX3+9+@fX$YkOKa@i4n2K`%H} zj&qp%L3{T=&9@DK0epWc8>~n?apy)aXEa3GS?iYd^{% zRfu`gtoPPm)C^6I)$6MayL$BOZgb)hKMcOlhdj#Af{912!QX;~`}@iP%^uv!TF;P) zccO0)ca!hqab3zi+ga=Kzh_ZbM|cFNa!+1xq`j<{fYs*Mxi44gPF~a^F~jKXBaWm-u>ELS~_oJ=RX$Z)O|m;s{lVSg0J7;C?!C z;@MEWS&P-vl+2EEk~)qU-v)8JL4A72hq2M=#K=FtO&x=5Kmcu}2TadBNkY7+ctG*d zs;TKQk3@c)u^8u_;Lo1{jFbM&+dkF*p}E>0gcW8wqJQaEG6FG6q>g$tYBUn6hV;FG zShm%&8y*i}P#8T>T3((%WpUmKs2N?I@nk&UMyNDo7KgS^AoqL<5I0VJ>OJp4AwpeU zQCwX1V;aI*(WufgH*PqDHr2m_)064o0vMCzu)-eu3C10>b37dI6nR+Ebso6h?S^f) z2RE{2ACbJ}=u2_11%I-Jt6GjS?H;0U3CdrI7jXEW4gO$S04}^bLd$%dZbKH=!r#F` z(Q>TLEVMfWq5zwpB`M8xMB(|q59h-N6f%B(ej>uE&uaXx$LD7}dPj|^<$m%q=t7T7 z+-FH+yFl+KjVf)t!At1F$pZ#2$DK!4M}pWt$08m1f~m+ zOU5MT!6GGv+@9*bMs4YK)+{1t7VPCE=RZ^id1Tr#^qm0P)y{Y^{f99eaAQY>WgT;CEF%sl%*lexi} zABL-?-ttcfKN-v*>`MjEt5zIE7U)HDCbuv;6{`|_5S+1DNW7H%)Zt6EtW1XUuDCo9cc^*rl zhej{YomS^u(p9)bi<25kI;a7oN1f5GfTZHc?@=`5nDu0)F!lEcRX*W@=@<+Kqrr>r zpKcWEvwEbgF&28a@lqW&a{=0ot7b2Y){(`7>h-9kpZq`;?xQ_1g3A4){&Sv+z~o z%PYuYFdlNe8!&TPhF=oX%)R4ZG0Ys%b|xk5cT zzaQCgj4*J}f-g}2H9+-f6k~&c`;Okn+Y-C%HIF62%XttI(AfDMx-S? zQgdTpnw|oQoxuHFq<@bpBx7ZBag0w(2nTiJlUjRD(l_I~O%7ea%%r8gq$H%J+(|lA z46U+Tv0KHDd>QlR15R^65oWK%6T7)v2i~p%;DFTTQ-t)IwJo9u6w9DjPHt=nAFw-( z+?VBiOO^(NAJ08K3^ebr^nfa+doRMF@FLmgVhnl8lU7CkRm#PUyk-@Im9s7hf4Q-U zw-ILA+rX3pQsc2tL95tBd`b0h2&4~~421VPzThJ+0#IoE+AUm}1L-KI%DO-ZwPkfV zt2j~U0Is}#wmtDMl}p*^>rR(e!Pu7js{W}3w1Mx-&NU2$*| zqv1U#mfQey8Rv)J#O%Q;$b6pnCb86-< zw&Mm~V*)jgqq?nfWj^bd#&@0oUHR`tuWp4`%m`t3UGKRXdd)(jSF%lq(@$c*>rVXi z@7<5&UOsN;qUzO02QPKI%bnw)=Peh^c*M^WmXEadtvmoRG&ji{e@|sZstEGs_2 z*s<5L!a3XvkUfJc5IPpE&%S|6#}ZQX->&ugt>9i=G2gge1_CxSEu~{-_DAoZM*NLm z-wKmdp8naYHW==fm(5>UUD3nhd$2Y%_xaYwNQ-^KlxaB&Mb9KY%N2@}D$eU|hp-iG zDg0TO?ykQ*o}*3>Zolh`MsjH@Mmo#GZ^}4@*0VnI>YeG;QktDM?YAuKAl(BS4SL)V z*X}9vJ>r)}-gibz8cm$V+b&gMwS00;F$fEbrp+|vo_#`6ce+u{Gw21s2uLp9@gIDG zJrmYY4mjM$zz?;w1#&unLe-CJBwYGv#*6KHKu|S=mo#7JpKi&;m8L=`Zl7v_GMwbA zA?O;ZUhyh+jkaOV;}6bl`IuP)K0mUus2w)-S~xg3&-_t=?gmX4Rd=d~z5dK-j(lbq-CY z2A*U0t{>aOFi%Fv-ZbdUV)|x zcSDWt*FC`fCC5auME7>M(&DoJf@zhy`E+g=@2&>l+YnxE|0QDYThq&*KQYz}oHdG{s*SH-~-M~PJ8gl#$o9{K2YM&TR5BX zsT7C_u47SRL}+Shpk}K|U5j8L!}}B1EjN99k9zMd6g{xz*bJB!-2f>Av=q?$R(b|< zL+c$7IJK$zyx%m=b#-uOo8QuquG>WQ71fUbs@fPrW&$j51Cn$`fkobD?K&`nFkJ(~ z3;KqT8*c-F4i#!-G>X$88zEGF~CflkG+kLqH64|k$^Fa=7)6I zt0rcZ2y)cee#swTSIRjpPjpH(0@RYbqI(0ypP$fS>12Jn_YV(C%F1SW&L7EvD_lt= zv@39f=V}pIB2{@DCzS6zoLJQp6Le^XZ2OWcz5eH+b|(tWlktGrhJzt16@FPXL(i7Y zaDPz)2ov?zzR?Vy)TMqx;?sIPZ52ME0qpHyW#i#;EDPwTSF5H$rd|L3xL__-$QViL zn4SoZ%cT-s_C|iQ*u`HpguPQXfZkZNCoTY_mF3oABU8#%|y8m`IPA7MXKzEWa|%s5QC!=XbCTjZJeL6?rcD(B13f(mwdaqOcOy_1@5N}Xt+(v*6%R9G626-H z;@2XQ+>*7nFCEHvD*jr#2nZ~(Pxod(RO$dmY?W=rgfqi^x7$^qK`ee+kIv^!`_f z$;jKo%}7gd{Qm*A&Si(jEWlCovp)+9K|LoyiEl=OukN|K_?=_#77wJq&nW)|{P9eu{d zPgC$SM6@TiAyepNi#&CAl#Z|=Mr0zJrw;@uE8$RDy^y!-LMW;wiY0gS+s;EqVb^vO zfcj<80F9%SnOipgqv|rVIM&Fu0jlMM$Dj373fSC)k0YPNb=hI_^L59?*x&p21^uus z{H1tc!=L^I3C8OY!7^rciCN|g=6OIcDp5V*km z^WNnc&m;QRC-c&eflL@N5Kgn}($*ysgOB;Oa)Q5TNf?Xjb`NP#4uyHVx8q#>DrFQ- zik?#Vxl+@A*0gWMeojFi{aDGTt^hpCWL&M!gL8;1k#TBayP8Om2vQ|xWJOg`V1)32 zt&^43#;Pg@z>ZIqKK>YnsZ67~=Rb0F`sbC(#9iOIOIukZ3c%8D29#)$XQWcaW-YfoRJf!>GM92cV6_mf4snDwHSDG7*YtETg(pKU zI*k-`{Gn%}G2Y^HS=?k1;wX)8b+dE{VP|vk+qZB3+2a9Ln+c5Cz*oQ`au-m48B67! z=*;yv1j}dK*q0XT+cBg3HV6owGO;~X?2^hsGU6s+4Am@iC2gq<6^XFxYHa?>I6T2D zk#C8G40~Og(w}98Sd@X;CM1XEmC>*%Rc{U9-v4G%s-IKt9o#@Xned8ZJI8Fj(9#yj z*_m7Z6uMRXDu(7|n6?k5#o1r?QkLTf7+wyP@hH2$_-he$?m<4;+jUZ3!ORV=vDM}w`ke8mQz$kvY zu2m@qh?7&=FP%a6P8i?^;U+`!+z_OW!H?ja{{hwA^gpvf+K4KMS}lQe$>oN}oK8Yv zpahy%$Idq4{K}OJ(W_8ZpoI3l&CKe=-_0A>f@K5h0oE@Sd5lO+!0(@pY!`*uD@l4X zTHLaE9l31peIq@9k^02Xj4yd3aUWH68J(qRs=IFUlnGmsh?xj%<~Eu?a{1v8vaixw?`}U3dVa*2|b9 zmv6#=N!c?|B3}a3QzQFTiaEA)MJ323`3>k%Mn`fJ0G&HOf{UlpxyspcFFj_HVvqE> zE5Il)rC&tr0zRtb+u7`&Ip!OXUQoOA+HJEE%_Q1iQ`}@p-Zd+(bGFJkhBry>^$!Sd ze;8ubRu|^!gzK$%ucQ4L){g+*7%L2R^M)Rib|}*Z7G>0&m0Z5#hjdgR#&mqQZx#1b zWyq}hbL?V^I>W=nF66yPY|l)=%6gIRwz|~m>uYRG84ZjGPf~mbJ}^Eb*_%3lKa-(* zzsU?+4ZrSjANt`${GYZsytvs%ZtBK>-UTecp~oNaOYGFT`ulJWc4siOl%D*ju$p3P9Ia?)$hF5ZKC!bzBmQ}XAd}97=$`qCKdT2isy@YO0!G@yC3Hn z-bglg<*6-{`;>4UOA%u9=BUiud!PwPXv1?Ho0Wf8X?(f8>oC^ntXVpC zhm|dcq5#uDDOiA&`HJ-*KwjOwzNAvfcINOlsn*~ie9M%^=Q0eW zuyd89dv18sPia4S+Ap0n zBmf<9Ive>Ta5MGthsR-$&nN4tQNr?OpxDxeETWBGNmd0OLlq??eB7}cSnVveqEJke z-?-PV_u5COYsjGe{m_n~x@KlUZ46%bYy>kTsH7sOtk@pLzneVG4990Y8{K#cH zt>#=^WI;~XZ8WW8Hp(&tQsxT`aEyBmN7RdbtH0Y-O7`ARUBAg)5%2V_T0{JSV;&iqIKf)%>Zr@`7`=mi&$qrj1!@f1!p9`~(CZVd+E*ylDV z+3XW_1fkVK{G6G+;Scc<;eaXZ+oJex_5TjSJ1hgl52ItCA`xgM7P8Sbh%wQSlPDQ{ zJEJbR;_Of`W~JOPuRhUB0~dx$_Qz&7cx4U1Q){_vws2AFpC~C&3}u?I@Y_^8270@Z zDfuw`ObbGq7+3+xnDgITs*|{Rf7s{qduKi zQbc|PTaSrjQsuE~+Xz%g?JGqnT+VTUV zO6ZZr&`Ehsz3&2~MTJ9vXetd9xs|}0FmfPV&t)Y%@gHRoG_RP3%U3XqRivzCZvogE z5BA$Pt7r(+zTA9XE3&0xnV%C4#&+&1vQ>zUuK#kE?{4i6XJ_%+Lw3`COiTUnr>%qh z&%5_7bvwcUPJ zT!O79ALEOcCd3@6cUpi@DnM<1Y^(&}nnXvfNcX-kpCwZZ3;P-A<9;EM9|0UtzU(D# ztBi!6q56qnVHiRyiJ^ZtQc{9MR5cB1Q~og7lxOT^>nA%uwQZ+RFPe1yCVMgbdBJHT zxzd7f1@4qadsG`!mU_Mk5~1BpdHWE2LN;3g32it`oO2R^GJF@dY9gV@FS4A#KQFE> z*Z+tpLO!)JW`#fU7C=|lQvjbmcD${qr@x?V^+iga3m&NRrARME&RIoI90LJY4ik(e zh}Wm_+k~xLyAdOkYtX3Lgl*|!Yhc4sM<>k}i5P(H>azv(X=C~ed_Mrvn4K!JQF?$3 zd2h2fff{M#k5aNGyuZe?Rfbrn7JMJ4gjsr6hp#demiZq1)b_|J2V)BW7XKRia8S)} zt0v>;n~5Xey9m4+kj|Se74{8kkH@){y7&p62?=eej?=b|JN!2fJX>D%aUYu_Fc*<} zzBkoGh)9zW$H!Z-KnkdB7=EG>q&7|2kA9uk!Xm!CD(pTk6{eFW@6{hjzLbK;`+(u&kL%t;Jfc>3XgFfqtjupn-7bfq9F`uSkO z$+Hwq*?@04QZ;?bij)tVKWdBs|C)fQVRa^cE#1hzQp18AQ2`fw1bqQWD(u3-0(-K& zH!lrMK|=#q*FXKB&&?O+;g`ZI>V)et1N5AXY%G!QV;80W2gxkWC04FsXNVd zOjv?^g^V_F0oB`nD`BV9sKdrvr21d4)5EY@>|qPR;ei9_WjeOF|4RB4vjY&Qn0xAp z^D}Eo8CU9xRsFZS!wbz>-C|ZwwjKA3ydnSDr;UD_YLfO!R^^63l`AL`526hRuM~-{n$@<{x%Kq=( zd@nX(iIu05g8qFM0(5Qk%C%qVK?lx{P`GqVCfA+9%bGLp(}#$LOY?fe&H^&s-(wvE zLv6id(nV|6dNhWG)2{m}o;c>yRiLS_U(g;o1-?LGCtbhs(^AGr$!?gfnTs>$ zlzS3pew0S@%HG-5a!;FA8L93$i{cI566vf-m$!grmu5V9jcz}KiQZ~D)#s1e>Z6W2 z=`7=^W*nkVFa^0{%hj0hswXnY#r3UKK=!R; zlRu~nx_b0FHogIqbIbqz>T$Q%jXP<{r}oOse$9TZP3o@H4l8~z-;C{2=IQ30n6nNX zC%{snc~avpTDQ>C%z$p}e)dKCy#7umayBqx=Z73`&HyL`9&CfWsv@p1{D~&@lN5qg zy6yB$k8s&&jNtDtQ$QJ_>gIlspNQzzRq+%rYyLXGJBrDTFu%fCsPkpau-Y2gT3keg zMS%Ps2?g1k!1g7qplTTZHOu=VdKllQ)#i;_$IlXtmxx>ak&NKVBFA@X9owP5V?jDx zDssQerw^QWHqX=;e8=6=E~$l~TzVljIIigSY8}Ukw(+^cI`=W1u-gf;iNy3iX=L$U z-Q^tbV{^5ObeZO#kF;B|sl?Wo=Uck3~EEN6t~j>K-4dF_=44JV)_U%e=Xn8OG`N zmEWBuy9ZQZU0NgWE|z`YCOrkP)%Tyed&mF$Zs7erCGDaVf$Ej~%^QERyV95VOX}BX zqK>5#$D)!&TsdEz>dgfRK3&&6sBom*mw~(g8cBiT`R1H3^ywl}j16^?FhqBml1kX?^X@m zS=BEwC8;lpEI;^l=?~2%+;)t2X72dPAR{9O`{PV;l0kIIV}7yJ!o&NG=*KhW<&Cxu zU&5*>(4B40U*_i$_F6Gqg5m$Y;QYHyGCwGL^R!fiv9G%7adRErNX|c5>I%s;p5T9~ zYY;*9}ylwTmXN@7klV(@$r-4Hm5+(^<#^SngI6@$7k5po)#YRdJ z@n5w_t;szfYEGVD8Xhhs5cbPH^hnvmGZ$p#X6MP1rlM~3lp@lp-nbgOSCXMJ?PbXY z`BE<|X6UDJS|a_`r+@~+c&vW1R#ciHFt?w5(8hv=_5UbZ!Nz_WN=g0Z&1do}uyNfT z=yg5x$YoYlk}`B{mE>~Rbb?`|*p33fVDY`tCYMYF-*xt1dBNZTzZTRIRJV_%#w#Xs#N`flojTmNP(f%xw34 zthg#Xd|)Rb_f!01UnE~sGv_6W#LU|Ys+gw$%5ZCx$n)M5nY+>qrTMIvL~=6+WPTRC z5gg}eq9Fk*zOBY^&DaL~k~($Flj^k+j#6mD_Y|J`Ri>EK2s8W9UQBM>wzeb*g%KW) zNFJ@b4|u6p>2DD#%ZE4Qq_ch*N`hZxv+JK9z30vU!h&86MB`!YDEnRhJKo*r-&15R zF|o1SMehLNO8qyR1Y^vM6Ym;+A??~Z>tE}%Tw3GL32{qb2qV>4NRXsEjc*> zSyllXgjJZmHRK$4dVr5g_zAa56!sAclcCW`*~W+EUmRtO1wF#CYPV&ullK~pQJ-Wp zrF~59*92}@j5QX&GhLLJPt2DwBSqh@1C{7GvG=p^EoP{coyu=G>6)<*Yn`pQVju1d z`H1eR6XxkR*f~?*Krw3+*@m_JG9Jj^*56Y+o5)knB2yvKf5IU#SN{DnG8j8-rQZxrFm5%Lt@2P{P40bXrLi4 zrFHC-4Rew5Hki)JLkqwBMzS_H?+XGaZlu)@oVi8fiX1{}4v@9tM%FXSSv)ak9bJW* zmW41=<6o7f5Ua&GS)L%ImEIL7tS%(qUpH5^F{ok_S?TTjO#ApZ+f$lvX?~=ZHN%K` zZBJi>)_zt=g-!aU+pfDJuCtk|F?gGdm{mt%{riJy{I9zc zpRS#og%kk@n!?HAQuq4_d~|PD}i+wdm|> zxuZLhAo+>PKruf8OtccDTr9YO8M)fxgNUa~CC|}urt)a9#PBf&&pxl(rji3a-}lV5 z@10i{1Y*IWxrREkSenW_ex24v}n z4KT2#{MA<)iU;6=RC}@H8tT}(@~qmnNvJ3FF*#_?V&j(DL|I*PK<}*p>$1n@R0$oY z=I`D|&OUvg&+!bt)mC$IYNZf%)O_sW;kCFKfr)d{W;3XL30bj6wb70nNd3jZ`S%WJ zu2g?mYd!iYVBz2?Ah7cg^$K2g{(B++XD#abIzV4a6nCfP9iXYuGf?&zD5Jgv^I%m(VR(%mEGO60Ozxk!f3N&3`1r_S8I%v}4tau}~Qnjb$(sovyt z&fNNxmMg~IFz`CeS=Amzntf6)^#Qnhhv6%Cov+_V&{aE@)H~j^7X&|av~O6H zH`_lk*aa*4{=FDGc+B$770dQEMSNP3Q&<5jkGU+SJ5aQ)d<0t+HFCMxE!BJ1T*-cJ z_`B7>PpoJ#>#O4&n9|bN$fQW~Thr^XmS8-jeul$EY{KG!NkGDc)lUa-{?oJY> zB+;I}+GOnoC%ONRq_YfYt82D!ahFou9g0&3R$Pk~53WTT+?^oB3zSmaU4j;Ox8f4q z-QD%({qFgdpGo%Fd(W(SW({K~zNVvZ+j^?1gY97+(I2!Hl{MdRpN*KVrJj@qw2(G1||!S~+tiM&y?!dW)z;}0a93p;M4eM7y^D@VJ1auvuPm{Xw=Q;GH)hD3~&6KLP ztk{=TK(XKt+uHGQ{t@{&E4)XF?hzF*u8l{H-#F|K zV?)nc*V_0Wd|*=O*7-O%PT;Df@w-@b#xrNNM)BO-x7NBx|0#NqtLz@D2h(d$Tf`qD zq0%Rmt(5L0;4Zp;be`8#br9svYrhU@qf!=AaK{;Bq^&E0#=!@chwU4t7=* zir1IKGB-zq6H+-pLU79XJvN+_XW07N-i5E7N)QTpscnLZM`!nTDHf^TuXQ?XMC~{i zXd}xMXcgboDd&1u5ED?cU=@E+-N>8zLUiBxK^_)3>)8arQ>8L|ipegJpEzV6UG26@ z^p3(+U^S+nK2Y{XFl)nuoi|9SHPjNI8R~6=O4N^Bn@b9x{N%RR0 zwL=Qat#icF#$*cICg7Ma4Cl;h6ek&=H(Irpshgb?IbewTv=yho-&vDeS87Cj(l%L# z)W(bF+Vb~#d6F}{{ZUamd5K`hm+IseY$+YXvO0SkpXP|sY#&8rsMLksq)t(gUPSVFj_FBA$js|#egl{1u} zsczP@`(h~Jlk=+PrsbvyJTndXORON{$Xu@b-LgzizztGf+?%F=c z_Eac`b8Y;}kTgx7P?^;AEigvSsVoa-FFkWF#XzOW1KN5G`z)T_eSiKK=TgY0c*$20CiuX;@~& zKb`u37u(QRt!yZb)6*h?X&Idv*t^lFwUEVM{2Pp**D|W z{bd!E!dN(Bhot+$SM|uASZ`MMFvyxpSVc2Vn6?rcUQ%!7l5OTO|6WUms3q7EVZzv; zbI?N|-b{MDCP7Ymi8T%YKoOs7y=S!wNB^`LFXk9?4#1jAMz}f z&E6R5Kq(a1B7V|UUMXg!E%BbvAuAtouk5df*q}tac}B(B^!2Su7{>Lxs{yTu+(I^; zTddvOo@U(U0q%|7eT6k0+~#lh>y^*%qSS5}3Pb?Y=47v7BGo#r&ZCPv#uW~6|H|yg z(;zPGWa)y(Ry5SGSX1and1w~rQ2U?3oByQ=!9PYfRy|5WQ-8mAZ|Pe5`xBgBSm?e} z3G&oSZ|8AT9hz*t)e=SBb&wF2sZ#)vZjHF%b*zkAZ&j*yCf=#R6&JV3l+5PkN)%*F zPSwXFB%@?UC5=rT`V~ZzXFtHD(sDhe>rif>C}l(q{Uk1rDfr+5l|^-BamN_N5!PEw zfy9LDqNit|7orMXzKfkeDsIdOC*9Yh(hRxJc-WnU8 ziPAqq*Eihff67~pl<6bv4L>0jO_Pw3Jv|_4@wMD`L_5wzx8MN=qeIEEY}aB5P1kNcA+e>c*feB{|z zF;GwL_Zv3Oy4M=0Zn3#@$C-hF0XCo2&DNl2TC|4w$k(>Bpa=CAuPK8Y3y6^JSk`V$ z8BG?C;-1x9ECuqa24|SUs^Kw`(8THz;#UnH+vJQQ>as)hs$k`ue9Tc}_op6V`WdR0 z+Hsg)aY70?q;i2`%q@aB?eDV^z2MzWQb`xNnx>I z>?O`6;5Cr}S8aTnO~gR<*5fC6Y5^n2x&QYB9vI_Ozp8d+ZXs8p!zj}eDjI4(t@H3s z*OOwJ^md@*JT+d#?r2&=Ax8W2^R?w7~QM*>m1fPZ(lQJM-k1nRWxRp%giG3k~0h#>j8RS z;f#Iby`;iux6ck&*jAq=_M-QH3h#oYEz=|#_1pRsKf*|e5z869!Sb1M%3Z-4rRj&6TAl9z{pS&fEP7A{;y?*p1=> zD53^;IHnoE9l(!?9f3}KGy-M50&?S|WuaQWy1Cu9*tonlvawq8>jN&Aplz=}CJiPuwLLMpD36-)X_(SDlOgX(jl1ke)w7pT)@9Lmsv)g^YI0H#5kip6Ft-ycv*_! z0_ZHBi@khDM{(n=S#OM_FmoinUYV+oHDJ%nwqSgHySO|t3`Jv`WNzK-eNGrNIh|Il zqMK7_MMS9gLV=QF*78&pftNE0CtW9rx zjjbrKj=%H;xCFD#5%#)-fp-6fhvO9r*v$#`?D+kqN7+Mrm1vgNWFJfMa9uHqh7m}U zJMrFUI!?TsZfw*u<;u|-ao|QPummf@wAX-%`Ld40nVC{?#VHa;-y!qJCzzVh!)xhe zg4EHiiYzOt;2!-ubx6Rct$!^@_>?P|ZRW>{9H-dC(>+9D$7UMIpuK(|4&8dMvR+2= zAQnD52kUu(IJ20Dilb*pshrOWvP{Mb2wr)-Nl`fH^t&m4Q88|G1@i*70#>alndcTe zUdmrC@s70(!$f-4?{D#Ze{?8VY1Cljy+ODmySuxM-yY|>y1HPq-t>iL-+cnZ#&DwG zP#)vQQQH43vY*w6ho#J?YAg9EEge5#8MB%-=B*cvEy%u5LGE@2lR&%W$-#K<#rr)g zOGMEm$`1-@@pI4a4OglT-M6O#-5E_}9jsTvuxyH>uYdem!*z#f;^4f0C|UUX*%=AP zZ&O|KbfQ=6@Xi4uc=e<>mnyx{+zQSlkphMs`1D(%T>xb{6`|2h&OV$WbGHM){=2R- zSw)h+plS{i$t#u$d@)2BuEU;G#KoVoLrYz|T}TX7NM-r5d2 z6Lkv#KYU@jpJ_>=o|RvAW=7-oJ8!8lGu0HL`^pww}>p^Kqd5rI@~Lk<{G9#!p;4D80WN9 z)8J9*=Y7;Cgbx}ZdM5l()(g%Wj~vEFTGy@{AXKlr$-D7-YZ7P?tDk3Jzq{23Ag&+3n zydv1*>MPmL=O0SJWXLVehFJbR)Xem9%!U+r@@;h`*}rXS1Rtf0muVPl|d$O3dR)vmZTsE_b~F|{dhs4 z)iOh+GpbPMhU0C&0T$OGVE*`_;HCppNL8EZ`~uiRobNZEXVgP5@4_AN_{8y*3|t2? zo5L zN=O~@{Lal}E`#?!qe?`s8tW<_!6*S3a-t2!p8^3Q??!|_>_f=*&J$*UWC z^5d0{j?f4VejfWmd|$Wg-8XhYXTeNpe6!?JF3T9_E_oRdb(+(}lRliT44@+gtTPcL zeEnQe{G*SQ*1)^&kQKjU1#o$>v}Ta-5>*NNzaWP#ashNSx5Yci$ouuj z3^O-d@-~Un1tMQ@6&I#w#h@U77j6}?ae!oR&Et-*fX}=SXJA z*Vm841_{@}24q|uOV0N55YXq-cTwY}biQ1WTN)I;UEu`5Q$VAg@pb znhfqG&WL>QttwM_cl+70K*+mFC$8WtxGM0$VPGTyx|k_4p>Xw1)QUw@N&~LF^4_>M z@T|91D{NnjgUTi3PCti2i=)BeiNNk-UZTB63zY3o>A%A^eO*Dx1s4}7Rx-qlir+26 zbF1ZNnXk~STRLeZP2SQw!_tQZ-`OmnWm^m1-V3M8s?oIZYpGgs2mZiE$dTpO%{!t! z^$$GGil6l>Eu-i@Wyb5yfDQ(xsdp>I>6snM$NasxZMqY?{}@zHPGLnMMe>uQakn_N z9P-dG?i)F2O~=>Z{F%8F9}s7?3-7yhF1I$%Ns@CjF+?h7t=Qp2kNC8-nDI~iPW*F$ z!U|OojzNsY;~|a=Bg`61Ep25%!mur_tm*+~9DVQV$h=$0CG-hMG1>Cz+h2&W-uh0Z z_n}NOq#FJY*paJr=F1P_%YZySf9X821JlKuXfE-qH%zn2%03e1PdMUnM zu!r*lp1DyICg_izLobg+6nBR@Hj0BC2J2!jSC3P+I`fTv0o(=#3&Dii#9_2_>FiQA zGPcq1U9&pzNK7}#ny!*)pNj%LXe00se`)oEw$G9{>5RKK!h1|y(P;#=N9(pyMy%Sv zc3IBPfvb_blL(V3tx^!8{fmh|b{=SPBZzoG^PlRVKn-ym<(Yb>FBR3fIa-4c>?a5x z%Os_2@O-3B4wSJ4*lJ5|N5cuQ=wmbKTF=ld5i5ji19dxt>jVwX-=&9vG}{9;c|qA& zo)L@>q)xol(d;B^(^B1`RN$ktYujQK%dL?xJZiw`OfEL&su|1N_TTf0tGLT z5CR3erKTG`l3^lp(9IMtwPt$aAyATP`{R5HQS!7lYq~?KRkD*f1af>B8lm`ug_SR{ zkEMf-(DhGyCEsakj_Qx^>FaNzL`$&_HZtQ6I;2(({P@~1cT-3J(lW?Q-4o%)iWu-M z;a_n_5s~H%1+i5=oCh8VZ%Aw(91y{lSdyxbZ*p_TdFXbxROzevZqyhmDzayy9RGz@ z%lY0cvnqiR&em~WHnUisnmd^dFNIVze4WFgE_f72E))#7{87w3iudIkONDs1js5#N zmd@M(7>q$sShUXbb-tUZjy8-lOk+NG{k+%Ll-0NDv#Jt}=PFNfxg)y0i((Y{Wd1oF zhSmFURWi@SUnQ=R5lRSovt-ije+irBu7}x5Uv`dPKI$@hE+DHjRbbuaLIM z&(j7Q=^;GUoqP*e%HR+v6lV)T{**8~y|@4m}oCMBsu~znjI_Fz%&afm7~>BKV$FU>*9@I;U-^F-@{}#_MW9wyp-pI0)TA zs+P9T-Tl_y7!EMEGKKt&4L_xLV9l}x8)O1ZHC|tAod&ES=+W&ZOLJL537o%88(8m&nE8z9?Y1MD;PV@@(>YQ*QX5#+ZMdF1*+&}r zBDTdcDSzv#M(l>Gv^$^j1*bZ_yI$ClHI@jJ5ZPzQ*0h=IA#3@2QL?UDL7d5dovrd| zhYo~Hkt2d1(!ZYn(&8vWUZhL=Av{0(yO16NHyFBH>e^^vR-(RKYE7sZZ8^-vvJo&t zkVx|d3s~U6K(kM1pQcOol0b9ua{#bOcv@c-X}Ga+Mnw*OPEfLtXSc4tT}M?A=K`U& z3_pziX3J8O=lU7oc7}2L+lczX)}<>;d*|6%zFsoA;&v#x-(kd5v?KiHd6R7fiNPwW z7I41zGN+xA5 zrcOx-rlfYyx8* zyIgdeledUX|DMYqtgRiN!+n^ml40D(&1TsiA#F8(M#(ufmE_WP#$2K44pG@M(jg#)E()D zwBt(gcg$me2TuZy)H}F#u`I0tDFg|@8Ov!qOKz8c1gaW(kbngVgp^UGVYxIUSgp~s z&@Ybi^@O)Q%wO?oKueJNHg?Z4)Tlg+G|ahu>0Bo}FkrkFD9n|Z z{fido_ijiPXhUYdmW1WHm{`8=yJ?3x~^&rRk5fQuF=SRUh<$orRfh>)GgHDkZukFIjE zrgg(R^^4^34YFl8(YF))M)ockH@p3Q8))uDtd|_-(75Et)Iva*gDRg1YS%#5o; z*!M--*+8FjYc?oOjg!#>+XT;4gt-b^=anQF{ z@1MimsX6+pL8(7x($X0HDMB9@Li*32gXpL#aWp2sNy;HCgFMJ%RWh5HQgu}UoZFXF zgp`C|w(rsR{y=*!AY`5`oV^__kAHsblIv}kE_~(`8Dvp5O;DveX(Y@#Akmgwf78zJ z_Zj_&13P-Iok!0SEnmDWW_@g2gz%)3>ChMTm)#uTpIHE?Sb*#4)Rlu*U%B_fPy>Z^ zQYD1QKRYFRHcYnc`HYs^z#LC{^ zR~@V>B+9d|K4{p1O^4~)ou}f@1S4mCI=sX4!FJiP=u(pRM&M4tt7|LAu?BXVG_59w{CHeRU^4sdQazpkn}OhT4$?Hx zMu#MO+iiuUl~AU3c-sw44oARj@LI07pYz5?R`;&R{*+=J;TQ+^I~|0)HC)1~sw5R* zJsg-#VRuBV%@U+tb z#AWT^0d7)~f1TckkFTx?9zj=U6Te7hoEmYO`!aisoh*7;vHDa3C zA(a~wD*y{KD!y=9bFc5^GUoW7?JSP&LB^LiOcV|10jI4xH9L|wFzxr49|^K<;z}{| z!>Bx|WFj))QEKimhmpQCaV?0F2#fLQVV+T7>~wIEF*P-yC#z{1)vi8tPLnscAzHiT zh(oIJz~JUKJT)Et3}HLt=WaPsY0f7|uTSu(NrOEqWRcW}V)!~VXow?8ipUya#g6wx zL%TAFP6{p7rd#aqIafVhE;3?x_#Wx#7u(EUT)dE8WVPy+IL+^?U?eDc+iJFI-X3ql znD@32>ENki9iE`K0^q6*V&TPY z=}GuQx8PZU-rvoZXcmW8(`#+L2hq4{on*RX*)|T#;cJ*qbAm4j0wEdLS-Y^y1c)pg z-Y#5rgBm9L=R`&t&E7A?AB03mQe z*uMtO7z`&OCksme;3C>s|JJv@Z@USVtJ_C;X1~6vv=#?Y&tzO%-lMlA%P{*O?aS*) zU|hp;oT^2x`SJ-2kl9lA&7awiruV97#Su>1UzGIWufxhIt#W%4tXSjiSR-+Y|K+7`bN+oue*tMcYbvwM-mB?_1|W3 z_JwHKqx~>LgX=57!53<|pS#Sh{X{f~j2OIFEFWt6bdH}D1hvceQG}NZOXZ^zsG7I< z9EBvJ)C%i`B5I(-5(IKLuq5r;P^Mq}rURXvw}G?-hsx;Z&i#L?w`|SMP}!i_F$eO)GdQk&m`}4tpWmyr`X>KoAz#&~MSU zZVpYaq=C;FX*GP-kpmY_RE+0su&Wrw^XDB&2w2CnQ6|uSD+%v!$=CYRHrzeeU;<+e z>97VNyo}4d?BGTxDVHNKGDR8adJ29HHo?>1Yii&@-61$(MOnx#di9I42=$*FDuD>e zC&_aOSxQ=5S6K`hcCCq19m_QH?zz1fS%xkOzn7sUh$P2myW2CN`-7uw1d7rcp`eq- z$YQ*fSX$CUf24gft3mc_JQmF5#Jr=X8rT2nd}|@Zha6q3 znX;tBo&4Q~3IWff4k9W*O1abp-tk*#mrBF4Hb`-NVn^xxOlMOw^T=c)7DmqL1`v8A) zck;RCbm3xFd!kksMT(<$OG=9m)j6_Mm=`Rgyzn7jZynnI(dX7!>5`i0^IW3&oWsg^ z|IOYhR|!r%3A^=a@%N{(e&OC587<|$1m>?2j4h817}yvEEVx?`y17cGy$$5NuSTYB zZBM^mqDh_-Nd3ODNaGF?Cp{Ce^?rcysN;=~0dmU!2I(%AoWrjH zES^j5c#O?P*l~kT!;(QP1=)sHF7(xzR2S`Psb!s&ZAFq}7p-7hHnhaB78ZtnOPcwd z!I8E?qj6yAfU)LHi;T#le*!jg4Og~8MobeC=>XjpRxO)t*AS(t`Ce#~Ds1jLwzr>8 zOl55J0fbx8Fxbo_Ad%jFeok6>5tcOS&Md`u4bCC^hC_V-u zBRe?6`dP${rtc^T+gsPGs2yzQ~{AL6c3C_WaUKClWRdk_@smu1`FeiJBh9ARFq2L9*zV~e{oAV_{CD$S9s+^U5q){&D zCRMD09jRoC^p}j@Y4sw`SMvG(;VT)nOoBz^h=??-WcM>4hFP0_drPq1wA8VqpZQ2p z;er8gTwmGr-Kd2=@lA^?lYY5}O#WE12hfxAbDN9n%03zt+0SIOEG?i(7fp|5iFLq+ zAifPa36LKg9MsiW&;49k9jG5j<9D#1ugYm{HK50f=-XT+Te5CkvA61I$V*I2v|nki zgS=^dBM(a*vIQ}|0$0{W6~Byr{DDfwXsC;9jr z~aim1QF^<1L8%DkS?Qxue;c|D~V_C5KUzos$D_2bafH)YuR5=+vRy z)$;ebl{m~8o%^7xH|-co39qz*C+Z{jV`w*G6!+Q9a23pH+O|Rwbu*TFyxr|BH6I}e5kF`U4P1n8YZ3-RB7{8S6r!uIW|oFVbvNlZ+~Y-{c`@5QRc$e zS|bPBHRA9tvpHda&s%~H^35qBV|no_Z6&OX=bC+gV#7Ro@sW&IRMOOt%GohXR!-CHy&X2<89X@n9t@|9m@+mpR* z%mH$>{CIZAwuHmQ-+hiA*!9P9%C(qV$n0DLga8f9u?Fp5U)E$HquQ$zN^R9JfyHn< z!>)d)Plpg--Z8EL@pwgl<8R52c{EX^06sfh#kwCu-w#$Ew~fM1YJoTf2Y&}>giZCYj!9W-mT7Ya*x%%0}Hd=9k}b~@sBk&;l8 z5K92zPQ#Z*ZpE*KTd6GK7IG)El7>_fDnR1+F=A2zHXAyc;2Z?=jb2LQVm1NOl}|@+=ct$1A;N9ar?4{N7`t;@%=NZEWQ`P zWwv36!TTmHy#L^1Of>Blo6$*i5Q`Kw)^)}K_xB)&QFG||GZkaQ@8Cq(=Q9`#@K>- zLhIVJqAdB5_{NjX0+|xkG^CuPRLS#m zh2Un{HHc{n1;B{3MFbIh zKzaJ{#lE;$1CyK8e&9K{c3kVW1IemF%uucGfZVq*ql0uq6-Y6}3K`X3yobDKk^hN8 zsc=`$d#6cSt5`5;we91A>?Ct(JSL*49ag(|7}DyrTliie6Mn9Y_TwJ&eFakyh;0TrJPJHaN&KD$bYz|%7>`bF9^%~zu`UD}9M&pIB`=mYH#gVM2B^Tx(7T~9R$v7^ zj2)4a8|d#ZEGRfx>*y%zhuN2KbH5iYGi)JzWn^MngB@|q&fOw4*$SpipX*WKkv&MP zmv(c58G>(<7-57MHTC&~6I)hl*26-5cV}#^L%k3g;ww|7u)y28?XK=`@Wfi@vlj8F zG1f2iDtASsfQT#&0~q%Ebf>)0mk@0MP2VG=80C=JC||F#vKP(wZ{TC7`I5)Ka2$>s z;O$Ou7i}>RBf~W3lq&Y{xLiGaCt|&o&~qw|IiBD{(qZT+T`~LF&^~zKukG1R#L;*_ z*J-|CIwWD10;-D}b38ez%tm(JmPorKkr9|bT zQ`PZ`QhQvT6Qjp3HeBorM9ME90^t0iV^al_g<55Khwom_?EcF1o~w_Fk@D;Dum;HQ z4sB7Gm+0a;J-D(`py}{FL$NxghCeH<^`P}j=rRqqp@O%+y|v?)>(-Y!e##aaYnd^w zEQdA$D=Ydi&Q&kb*R9HK(zJpVN-yFER?J3(Wq;=6=9QzUo7+Rv^~z8r*irAme%a)0 zVR8E!r6rK#2sC*`$G6)zumLASVzvo(DIIAYWsW(6;oUG;R?Zks2>G>&+c<#-0zrhCU-Wbb%FA}p>77#%9rrN{ zQ)ML(fI8FE6Z_F70#XdQhz1peA@%L@I$GlhPb;!Kz{bwEZwl;RnG5bnY5yryOw|u+ zhHFczg&4?2X;H@k&U@X+X^av5GEVEQB`1Ef+HUYQ3<8W85fRr>dxcFEHC&>gr@i$x zdREqWuqG*1+mKW8M;8QOKA_g&u_a5*Q807oU;){qNu*qX9aC$*v`WyB{S!kNXCg~n z$biSpqB;5Uoj_zM2>-A9z@Ulw803nWs} z&=E@Eue4V>QKIea)dKp1oF#qQb&LkSBQu~N1(T|(F?+|?HEAsje&D~9=7M#P>j4%i z6^T;xaGJX|^1$CQ_vLzbZdGWlMT=34XG$kX54=6{#Ni*=a_7{^ZD16vonN9ZX!9Dm(3Og@5-a5aiCS#8X@1lj=4``n1fK$7j}bJHvKz zkX`>t&d0LiR>?6em3nk2<#7<{m9Sop7!x^A90pv5NScCgPfMVOuiN}Hu!dkKC)l|t z?0e7UN)q`4mOr22vW|eCgwDz}n5ROsXF*#WOz*)N59R+u_r%ko|bYO;G?kd24BK}du2W!7szjK zkCvxNqm|SR!^yh#rT!ij)ax;0Qy8i=kJ(j*P#}Bt>z);)-v5@CmeNP5t{ooUSZGL8 z3i9-eH#vER;4!UA6Cfkj0#sHDg$`cQNF z35?>JUSW&|CRpd%TUM{g(M$ucxOhoC5LiHl$!;}zgrZN4^`?v*VOIGty6QD7T^#~t zAw>^?S-4DoJA5@Xm5`7yT&a?we>aNRu_UhiUkWGX;LbKbTxj_zj94_zWMU%i*zGxB z{;PyI?BUYx{BQ(o^Q!eu>p(i-OqC7=YFmC?&`_ea$GbP-)qmp=xHcG(viS@KY^tzj z3_|$yIwvEVawFi2Vo|Kk5rh)uiUZ_^xssuBbX!ags86;p3%){0>BePGUGl3`ujo=% zwKx|@LVze3Kw6f*Npk_D4qch#tbXXjAJ6*bb|Q+R{PwY{`&O` zHbOo#sQT$wLc+~%nuAKpCyTLk!Rex}Z?g^UP>rOSnVJ8F3~cpBKRi6}EpZ7a*RhNa zd9iDEk6#DS0YOGOsdjV^BriY0Jx^VtYRuH{`S5b117J@!6?3Ut`Er{kFHf!R5eV;G0 zMO<)Gy2d&FYKeRG&o8sX;y)Ul8r3x*@cA$jrUcLlSA56ZDI8+AD-a$2GEDV5t=BOp zrl>$v5hse~0p;Z`aZu4U_>(j$G_nMh2_@z5(pnb!|ifyHe~kt zZ&t>T>MLiLld5od2TQ)?G2Jut-Fj_ly=czjW6NoJW#)7UlFxF_+qX?upWPq$qie>( zy<5Vb=i-d<1^M~D7kxzF*Q>1YjL&n5Td;K}!8|D;&o=)`hI8ZHCYv`2s_X0PtFam{ zWG?;t*O}RwROyy6XKd1iO%xvfEjO_;qbAJn25zJBf49+N{|ot0Pd9g>ClX~hJ-SN( z;*#|LSIl7DzJpuXRgWb@K3|Q$9!aDAL?@U?LD@&~k|_@Ge-96SV!@2ea{f`TM7yRN)%L;+HkUh|F0e_&Q zX2TD%RRn($VsT|?zo>%>lCG$hFZ$E67afCyhl?tDT1*|+4IpoAhy&hmynGF!gB)Rk zq!a|CRE{LjRP%T(eIpnMy7-*VXG@cD!|NFL>sL1PHm-!`^4m8j_GHkZ9I zcG7dxhszxpp*1u#G!R4a0Tr=_mL3MoF|8-v9hZB9K(g9H#6BsXIW8Xm*@6^gHSs*c z(RBZ}c>P!~BnNC1kAcJU#EB&RTpXC&DpAMYs`r6wa@UZ9zeToS7DnB{1!8YQtGIzu z5#Gwa6`^BjKS_(_Nya%$s%2SU2|8DIeF4^-UH-`5nT&$Az8VgEP^ImbGpzb^#H??4 zI+$^x;(hg!-W5h&rK4JCS+ii<#1A>A)ks0u+AV5)`uZlbbGenmUkZ&grY9nOV+UWu@Wg{s$)G z;vyo>rk8ozzdzcq6Dl`7R^zZtvzb0{hW%!jsGPG|#8{HfP0I4(Im6`vDW)gbtU*-TT7Iz4t?OynMz=TD0rXZ(*476+JV`03;Gm#vhoT-?85s);i=CaFa>EurA)&|1o#D9(!=)-y1bGPo z^s3JW^u2!XXnC7YOOVR?P$FH1!$?tM{@Yq6O7GZWu&h|t)uL1XII*@ZtZiZvn3b3= zV!O+3Fq0&|z>rrt<+1R_rF91hRNQ0tfnpvYJ)m+x2--{&m?D%`>-d+tmhkB+@O{uS0wHak)t%>Ye@{+o^ zxO|KhazCDr_`noHCFXxP^RcdZU@km5I$Cs&O~(t?;$nIA%jlP&A!T*EW-k&7hxUm)WpV)%_0EbHifVsWagie=RJcaZC|dEOp`WiI#n8U%41WX_iLcL?4p$K zG~oC?bIhNgk=_j9=Htg@q#|Mp6lbSR}H;mKYSk=nnF9-(&|$WoE$&3~fzX>BbC*A=-%R%}BC1 zz~*XwcM9M7SuICjvL;3pcs}=9e5crev?xGz<9T4kiQ=b!p}T;c1OZcIWMc0fHvAe> zG5YpGkqYs%rfdd&rP%1uXpj~sp&*Eq-=bO4weY!uIL_~pv#Y;Te1}f`Y z?Ak-Wo(MOrZ!U%GymzZ}Th}xF%Vsx(s(Nr-xdYW<&gP*2)F&;F5cav?s9zx02t8JM zieN?izuQ;)V(tF9Zv8XQ9V>wT;mKs3?+Ea;I%A}>QJ?Z?f8ro5E!_&UsD_zlih7=# zSX=MI8lkfMZWnT>>i_<|grV7v^O2E}Q&Us0kU0c{sIagQ`!N94;O+JsTxEPE=7n~JVLdkm+dCf zerahz^A`xT+n;>_CdHv?nUw2#em+h1emIa%b%;f_giGRd z>AUZJ^PX=Xg*OTo=8i-RaSZ0~0q#`0TBoE`P6;_tpwosu9VKatUNr_*J?*AZUIZV` z@FCQZwph?FPen>j%-(iZ3hP=3U#q-unj8DGp*7-Soa4 ztl%VpbzQzeEBijvX=AgqF&kf#R(8_X%?RANByY@*yp%S5r7rowH{{E@|oq_4lA3l4i6~Z&;`agZ>Cderob)coSCKjK4n=Fa6`GjzJ z4Sq}%gUa4He$1A&s?F+{eh0#oV=a^AfgeCwnU{fROB9gfunSeA;jn+y{|Qu`egLs{3DF_=G}om~jztny(o&F(?-$3x#mFC0=`wX< zfuq&?q`n>@8=gRAX#&i6ZN6bAVY>GT(Y1edZBHPDWkw;u(VZWRwX__XuwX-k7t5J@ ztOb;OOjxGJCFcoUR`{^aH`KJM<-#cy(5Hf8k;h4@1X~j)tTs?LOZORIQ!uC?(rSCV zPA|PMnr67=15&}hws(#Pbot9}m&Cr{Z*zdC zcO9XIY(g}sv8HRH+a9_l!dR7lQ7TBRTQHMLiu=0G&csNAh&2$(2PC!BkMeh;b6Z&kNr3~1TLSS zdrmAUS;p%KK)YRANoOsSL6V7|T@9S>cVmMkv(mu#3vy9ssOObdyA-*W^S)I*z$#I)x@1F<4aFjaNC_^(UYUqfYC^<9`SLFANs=sWknT~ zDPO1X5t_U8^^SoaU_qzV)p>=!Us1+;~0S1*Pa7tNjye zygiSmQd+%9Q#llRd+!#an=QJu^<4v)w3N}y5^OWCWtesJe>}Z)TvT2AJ$y@tbcY~_ zqO`yu(%sz*-7qtBNC-%GgAyX00}Lr$(%lRl(kURF@427*`+NTbKFplh*FI9`g#W3tc>U7f5WJCDy> zcj7rTam(j!sZ(9L8pUatw>m9xbm}c-iQalY9@JXmW!k!@X5rd7UVf($ZDfwOj|Kyc zFI2B?zwP*~Ajka#nB8W7hR3#Y^jfL&Tz*=-4nddwfxGb3eTa$!a(44VVPc z1N7R$fPbO$S^LR!3md;+KcPz%HB+#e%Dgcax1^W9CWAxGuG%~5e%{{NW$Dz8n_I1q z#6B1sPwc~i94DIYx8xcY{L}U1maMjanS^4ax)Z{c;SN}ihE1M`d|!~T7m4~a?v$+uyc@a0 z5~_nSt>5qR$gMXzD+JZ8KQ*!QA zARccVNK%5Wr7HNkdO9VWDfXIPF`wriLb!9!w}c)H+jFnmNDk{X|R@E1ys+KTVYHIYv5B(0~g1 z6lz+s^S$?r`?tFzvF#OkGmennd(_>MF-zys`5hyW>(w{Y1y_#gah|hFU9Za6j$7)bOq=?dAYzBibG z`!zK>c(t?>Rh*O5DT8w|Zx@ztp0=k7ZGl@4p(i__!ki#&pJonm5P{kj)dDt0=6L~1 zHZ7-Q+#hIFt`fVfJa1Iz2YS&)XDb!h_zbBIo2WecnjvdnxXFZNBZLsQBbKuhO4D7R zBR;(}u{32AC^FnOdX+@gXcZn_v1VH=|6Hi%6Q%7-#*$|}$O7#HfsxtLa}R`s${@dY zIetl2@9jh(N*VY-MYl%nFh(w;MAf zg@Bk<-wyg#e6sCiQ}XHMmNu>uRp#8u-pV3CwKD*DZP~uuih&^FvuyIWa*B?<17dM5 z@tGLuM#42LaspdQ0srvwiN{R|Z<#_%SpGNBrNY8PwqKG49{JB}>i%AR6RSbC4-5L& z6A_TVQ7ND&xI+^}fjuEqzdbF|zG*W6x@|*xtVO*x)+dGtVvYC8gN+pwMp=&LPH%%+ zy40_H{s6`|F-rS$@P^P&Yv$(ktrbF8jf9Aax}8B-0zA%8{#a9v-$mM}xwP5PfpQ^X z$QR3Nck-dRBo56q!saV&Q}T3CeDi3J`=NFZ(J#|GQWr;0p~7u|CGD!(O&0Na(UPjC z_9$1`p!s3ShYI*S0Y{GwfjB3|KM=mZ^?9lOCpus=e^P=9*FNI{_xqrP2MwWu!c6G| zmO9zIy8_PwP+UISpKrgVm*c$R7prsuQzTnaQpc;jNZlc_JY!#0<3K6EK1t&sy04;; zc2Dz^k;GMTU*N~Fo04N>7_QQIPjg)GsC6Y&!l&`^8~yi&uZ29ZUORZ-hOGXOJqY3Z zv8ij5CMy@PkY9qy)lzWZ*}on_4mnJJ^PAO0glOHcm2P!*81e$U!mW8x1Fru2AQ3m5 z4w3A)+89AOMI)h3ULR>Kg&XbG(iy_{N;aTf$GovU$y0d*c|8fquM*$`Gy_#=@DV%S z#ZI~UI(xon2hEK=b4!qJ>xQs5by6Byd5*XR<~4%oZZsz2ity!k2^rbMcdxu`hbWY+ z`IB>xUV|w6*Mru2gNOw^zzjiL$v;jj)rSNPt0j^xPX=mes|ZK5v8=+RmiX8-eIn z#k>tb)PKf5D;hv|TOhTeqwwCjpOEu6Sr9MXn9e2jc{-|a$C+Y*iu9+k6`wCX?nY6M z%zsv%hI||4A3u0`HC}z};f$C{`ZNXW^H{Pl>8pMX*M(ES8JHBSORa*Lw8V=k)THIG zu%$3NpFfxU!*xE&)p{jzGAnX7%yk|h{$>2p_ilsc^3c_~ycN0NdYSHinZOg-&?>We zMr|0hltuTd>a!Ta*@MT}!a0U0FPzvXrh83C%Eq##*B-V;9gS>|>7E{g4s#$Ts15(7 z4ndP2T4n5yH$YrC4=ugZ8=yfyW63DIOjCES7#yFNd>d=c1Ij6GFG^zaMSHOAB;UfC ziELH|LlHS+$PM1p($g*DDkRHtUboik+YIY+FOVnrL!&s3ySO0j`!DCgc1FTC?10Az z%?F1i5ker_kl%fOy0TGb;nv*h)Z%-+HL#zE*=pJ@T~{a=DL!hf+gyI!kp*(n9U3b`QE>O4^U=6E|2T>@ZLVP7Ga5&H-M+gr3-#KF4M1(K_Cfc zDFO4`%*;%Q94<~yPFCo1snZ`wYG0zEbTYfZ zyODIW@ZQs#AhchbQh5{8NaTmhypocV;$qu@#Md|>=DR$##`B{Fs_trU5qck}{oyTBftg40;&)A4rz zv@*Q`d$<0`E#ArU|KZZPar&85d-t|3c?}Pv#$vQB@P!R)(HTM4|4x|j$3GqdoioR& zEfho(Y>%HNVq#vc_y+-Y&sf1lxG^#{W?i9X8@l$$OC86f2$L8|Dk6K77bb@XNz|j6 zf;PO=%}q@J-nX`zpP%0e2A9vKujrOgFhFbI}#Ob&&kPYYis-Y^AhlFvHshk8KY3(eSKo~A#)YopNE^<#l_`w zLQR9rX-3`mi%zn(@0i2fVl=ZfGT@!(&6Uat6l@dukyrM#l% zbp}UCA0(s2UV5T}zA3X040F&GJuG4e7bOf(wkLW3P9db|11nHFvjJv>X}Y^?;UG2qj|{{H>_ zy|L$dNN=x<$>ye_^3xU1c{aU?%Gq;`soc?>fy|&jChY%)b!qN}Q72Iyr^7b6*3Ef5 z6e!LU42b-;W8eP@aH^j)+=PmKRMesW@pJ)}C6GJz5tBg1ed^8xAoskF?E!=6We57p z+KY<|UwqmZ$lnI$dzfA%GS3V{W_jVvV4Q!eoe(SOMdQNc8`}M6!X&XZ@a9}`X}-^I z2n+w2hRqV_SSRcd5MxPlq5sz9zP$izR6w z)bH%2Y5k(JVu}K~KPxM%FKG%F$i);Dzr-nCSiC2O{;Kn}N!Yf_iJKFUL z*am9thuK?^EK#Y)nMT(gfJ;@^)nz8cN=!`L9?gVSJ#TsMX>R^|rPap(3>FX&So=W2#S6IAc?HAl3w-BZ7x4_-}-JV^q=r=Yfs-`mL`>R%S3c z;`+D5%wH(~#Zj9v1_@R$b{Mj_fpY6WAVDm3K`G{XCRGg#URYRw00awPM%VgVHa1!| zAT100jl*bPzs7cgF{qQvbfdSo7tokr@d;$MVPt9v9F%4!u2$?sZY5pW@h8z@3S-Gc zZT#*kOq9P@gZ)Fba!qds!U#%j2I_ZSHrPQZY{mzo;A9iKCRzy9I7V7fznZ9eJBqTVm zbvz5RSW_mJVw`wH1n7pd>(dS3Dbw56clVaXiKi_sJ&9=S_1_HD>AHhryS=gU zVFB;FS%t*;|4mrWOIr#mlnNcqzjL7S^oXw^VlRc7)fBn?Wq*juy?j0Z3>RPq{psgc z+fNX(D0cTaHZJZ%#t1-kT5{XfEdWF({)8UKw?A`LK$OJ_F!?BE%k*ERC}2VdtZM)j zn%}`}`2iBK+Tt}eHbwyXOiIR;dPG6T_pT0gwN~zgPNl?B-;}8CZH@HF^!=Q|e^sm$ z4`&xO8oIgJFGI(~DPZ|46~%*c7+Zl>k)1B2ktUYPqQ;{?Jvn^HNDRE(FsyL85th^k z29F;_FK%vv^0I4cYD!A%Du-F4=V6yEW`vJ3d;LGxlW@}(G!}C`ChMbC6krhw_GJB8 zg{*r24brPzWmxj~1WQaOA8Yoe_va|EV}@;x3DQ`I1Z`2#RpH3KlIUVJd8 zSqRx=c1JN&Yl$|gGdzcbKgw_DVnl6l(lm-1XB=tD3cc6R)C3Zb1?P_SL^O1Yltvlq z31eT2-bLSuezVbtnp=-c2Ws-aV_Q5o6jWZ+yryU6E=fr`pPW$K#w2|*#|zVB{PFL^ z1^$bY88}iJnR!t0hCC)hhN2y%dMN)!+l9Vq9a}?J_tV3z`&c><4EFwGO--|pj~rE9 z{K%`44T~@}>n7T%`}NqR183zE1lXpP2#N)pf%<+u25zd~y==V?`Oj=mHRQOe@O~v!3dSkcye@Xul;7_KF(^ z1-M!$#h-W^3?oPh(dJ%~c?)8)%Hu1jbIEvNl!s$gIQ?CPUt1+@?pQ4B-88vj*E{lc zqg{6y1DQ5LNOfc|7`2H3utTvV&rLrU3INBok&o!edX!K?CS3#oWX@0Cp@cu6VlVln zH0-jXS^)jCH*wh5C*f%9WOQtjk1t}5hDGY}>>>OFwdJ z_*VmtPJ1RCO`Lj?TRaupLeBOA7FRHb2AWjeL}`h;4k6_XDRzwYx#ioWo>305NXt#! zX@UIoiQjAH(k_Bq5M1`3JVl0q-Wfw-s-5(@dau!EG#WF@&t+`zZFIHsh(%toETRpw zw{Bf1l!5CMiMamZC(zR2@AcH)_yrXVS#3DLmnaaqmM&6+u)2f--(XUK#3J43eke| z?lXDnSFu4$_piuzYeMhl?=fy~_DmILMj*DR5`3q1dQ6o9mS9@Hv;(^guIy|ITC6Y& z$$dhalWZVer)r+TgXKwOL`)G^`nKeX8bsnztQ|4d*q zqi!f=_sKDRFcW2|ux{xs$MRHWJOY(h5S7^JT%4vi=_oVWgWb!ckzZoxpl7UUzF1~b zCzL7E{Z+CZVdnJfO{D6!Y;$vBT2W*%;dCvbeC%AJhailkSMYFkG*a172dikj(Knxt zl9CMG$Y(>ZiSw~i9X=j`UTTE(Z-Hi9VBiaT;LGoT#A-H=l%cr=Y2Q|v(tNUj_oa#H zc2!o8s72@r#j|i6i-72IHQW5YewcHm(J>;I?AfbeY_#U~?;ifUKwd!@+V#MN-ynP;d<+}NviLSE~X9VeXwRcL-<+KTZ zi5p*#S1~&q7TT{V^g6aEaAKMP%fBn6;DM;CQ@Ash@w)j;zaS%uTTHP(lr*Bnfw>;AtX!7E#H7CQZXhoF zYOPVD|A7SDwAVj8HtSmQ8U_(zJ(02h@Payb+bTERt1L*@%SpX_c5(ZVGoQRF=lXRG8I7|i0Be(C6NF1>czW+PnYfb>6QTffzmY_(p2zDfHI z7LwcWdE_2^Zuo&|R;-#J=h>N<&Y25%Nc^4qxMk~=IF_X8Iu95&u=3$9yDkhPxk0Xa z>LvDSQ}1}xU3b$P%QT7Hm(Opv#td9adgSVazrjzrlhU&yQZ5KMf(qWwtt?m+6swZg zJnd$M-P!w@zS~7#@U1NplL<2qtT?5tvZ=1cu&mh0wUb`cV*O|@QCs-M&zdythx&4$ zH_fb+!wk-Ds@BCUZLy9lXKU zrUdpdTzzQlH>%x%^{F6fTPgAyaap~(fE)B+?N?La;m6ZkT2QMoenT(i;uX@eK4LuB zgR>yyeZGE~wfFK>{76wsNRrKOX71O}0Z7~DKhaId%p|=dE~$%Zpxe)Sq2y?!@ZEp5 zDQpI*5NTO<)w!<^2f_u)`ad8oqjuxZZZMVI9J`!qXs-LArXTZ+>ot!x| z$RT~2`wM~&%2MBaM)NKZWr1TVQpq8NI$$aK@Y$%)H}~^58fb0N#%E()#x)0w1djf4 z?77+o9Sfeh)5lWK`wQj{sM^!h&R3!Di;Zi98=$8-?Ux0T@0lHDxr}+DLQ-1)i8P%8 zcb0X(np&W$Dzeey%TZI(sp_`}H@dmy{zG~bTyewnDx__zrBoiTH)53M8yR`n_WM-h zrBWlWxp0WqSCe1EGOX30+CVH)Ozy?inqY>eVr1 zcZFZ3dOYpx#4JLO3mC2(e;>59hn}We5M3<0m8G5nvxB4_l7mPAANczwjD`DVW2r9C zAG7}g!DGMf@4cNW?dq8W^a1fm{$>=!jOmp3F;9g?Q15QPa_`)u-RmOl@Rm0Mne@2ggfNVVoHSbgU;j|zNXgg->AHdnZz58AGX$r zJ`x%SwaYFU*X(>Q$b-{ZBVPwZBU>8S>HVWd9!t@X!@_F$`4$Ry99l1{CW421=LI_x zF7y(f+5~9Ak~#bMcv^+Sj8+4p*+UlhF4NDvU#I6PGDY8vm|2m(y5g+R{L(MD{otm#*5*g3PopO_6@8v16;+2EbH&(JmdkBICDTrz2%~$Pd zQSs%k-fjJkU&!q$@U-@Ev}p@&!+#!8T!8m32^=4h7g8oMv2D@w>>I1Tv^lL>CdzIM zAMFhjA(kd~!_Oynug8}GTue#qPlK5uTf$DA_mkV-DeA9p?>pn;37cOS?Mq2Zcdi1; z#xY-{aMe8Q-!-_?nwX*C63_+H0;n6mekK15^9MAl1C}mNP`-?uURibFfY)>?GcThF zjLu_A3T7sMvqXG1ZqHUC{=xRK`LA<@*juYJ1ddm=mIJflQS+5)nZ1s9M(uZ%I3;3t zh>DGdhfNUcQ)!7LF33rXC~lygc;LAjD(2Ve^G%b29qepnd241fOt5BOos5nRIDPwR0$+9<`n8XmRJKJ1rAC zaK}+tgn8sAZL8oJTEO>w)@nQ0@k^UTqervHf#-WNJXcJ84kl8m>fat@dKQqt*u&UD z$Y($)t@cRv;#@L~sX&fMr)@mbKSeiyG(gpD$0S9I$0GQzjMF38v{(%va4~F_$~<{; z&1&De*Spkoc;B8<*17Fh&W-bUCcI9jI#qAnO03}cUSR4GM>I;KKJo6or&Q`aYhDah z!ml6qtZKB7H9Z)ZKM73)7qWDttA={ULO;(=_udM%i%Rbu5X(KCxKGuP{(TrCg+&&jxEqhqn_MV_;ekY@l=xhWN9az`f8~)xBNALwAPUK zxV&-*;+8*DdL*MuSmKTlOhSvpDv~-JWU8{71U}$z<*`Qe?3EU<`WpR0=DcIFrOO54 zugA1X95)VfQ552quZ+j5DC@CqdlM0~;Ax%sC9gB!Ei~crY|qInMo?a+P{J4$WQw5& ztMsZzu5qzN6L~xhGZMubODMu%dlgdLToPqi(L_3E-5x$Mf={Kjp;WIvJ(Bf*mB;{o z#kt4A-5UiT5;7nH(j&dMJ<4?g=rYJN>*i*T2E&8+K3WmewrS=N5t)mcpCQiqfJ0EH z&Q}As=GFA1SH4FWPjj$3Uf3WzAG6ZCIjB^{Jv@-57rJDpD75g<+2V7C=#Xu&l?e5s z6!h_B-2fezNjnLY`Pr4z(r6TQryi&GQ6kjS=&vrR%R7%ijI>m!h)$l2#W^K%!OMj6 z&kV8A?(SEfG5sk(6w|As9`Xhl045ig`;Y71216586XMu@)-opi+NDnRLWb z_{bQ~6OIp_QYAlwPKmphausFY-_H5Y(^H|s9I}9fU$0PDn*SnP_8iFx7c>3QF`~6y zcTCp3p69#ln20l5FdQsWUODbfH?_z_Kus$rcOPZ-qiT^ILKqU{+6oY%pE{}LpPnRj zIfb?EFDcMT*s*~9u|@I6vMj{9B}KwW40f>iDYu`Mw!Bi}>D&{9l!2|W_x7j%=-6k! z$F=3=PXGeC<#Gcg7fwSi05CCBcyn_g>FUpF7zJa3ZKbL1hvfkPgd3kTuR6K;Out1- zST{R4SCPgo%0~Pj$Vqtn4~2J5!o`z~_H5_L{{K*u==Xh$rB6+1i^I%urObpFJww;p zcQL|si+vjaBoS@`WV?vk_dn7P`No(~#mGeFS`ViJZjq0dd2u3(?PzUL{1Tbp6+f>Ms_)0Z7);l3|tS znwS~@vGvB#0D@Hd#_*`9sECN0!a~bS8+`T1QznmSC6K~{+7NrB7JNjQVFhSm zb=b)7Zf<~#G+@N|czK1e*SqLI?VH~;4L4?VtpD%AgNx9CEizO`uxQTO7$6i-A>!nq zxJ)CZ|G`*;OaOY4e;>J(EF?PM!_K4-WoYrjmvg+fwpOi`s;pqyA?u^7wUW~FN8Pui z4uX<%U(PF%(T*OgdhGaDBgX&5&G7N?w*KDWhjlsB3ucaw`LGC#=gj_(BKG>aIy~}r zlnSHf*`=ju6Wowrbx`E*JDj_u@81Dd>P<7WGyW(-#Ybl z2NDdf{@B#a=aI}PuAN!$%;NytpKId{l82Z7!DVQ_NF>UDq%kII>6b#R{NIhhzt7Nq z#VZ9|lR2^HT&!%wPF#HHG`-%Sf1;$I_y$~EYAU5_Qet8?kYk=hpaq{XuhL^8_OiCW zU|;}Lz67H8Lne>h(AhF79_yB;$GakxOc%%d$IWpn`w2F`W=i3x@%b5HTWYHRSL$a8 znjD#Jf=?Xwh$WpnC?j?M0Js3HN4yG*s&|GPR(F$oXmI^Mq~Uu~odYgKC5 zfXVgU(;oNgV5lY%&h&qGocfeCW~G$pHXY`5d8j|;544pFbwBC?O&Y*$znjW>1O|Z9 z_rPFvp~2ZA>jAN*m!|Y4LC%twn7YyMM{4S>vL&nx$eCj$pm^$w94^3&0;6xHf&Ong zC6N{#{Njn7YTQ>-7f*@KA1A>Y!=Glnbewf*=&^kA0HDu8v3s0Yut$UEa)gV?EdxLc z0yG^!y*2nh`MJ5dd3s(G-kIo^&pP_wEdoX$9~@U&{2siuwaLP|_NIX3SoI(Pto|KU z{Hj0_Hs{`!c+3AP?~79C|2u&M>ww4M<)%KbK!@Akv!)(OwNk)+Fw7yZ^luC8MqmZ! zqyj|;JlI3&ufp<{+h63}2)-$VHQim$mK)%QNfv1I^!EO0 z2a4+t@XoITpBngnkt~J7eTm%N#5mWFV|Lt*TRPzO+KVqXKM4Of7{L)c{V@ylWy87T zRjMmxX}03QRonk<&Cf$_q~jk*#JORp+EG)BO@Jx7x%s)5(4q=8>n*s3-9qiI3d z*)yB?0!CqG9v0)f4yDorxET%@sjIV$OFumUSepSg54h6p-D zK+5}?^xpa8-N~LBYT_C-C6+C!OFEm!6(s=rHuhmrcd2IsNWHs(grG3vIOQGTxi)5b zx{}o|d$H$2GTbTi@&_2XICj#e(Upu`9E`|t{_oL@<{yO_=_23S0)H*zvz8*IUZ@Qg zh?)^*B!_`-S6-p?XzFt@sVQ%0pmq1!FZIf>nxF9U!IvYngXntg*Kl%@=w6ll3hoJQ z_mt}9kY3{~j*#v4m40?qWv35|hMc@Rr+nYL4M292!i?Z=NL%4nnQUOs`@HZ6^&v<> z*#r?lEki`J@v5~&Ca|@4_mVm%`aNIs5R~aWe7twNdmGaN2lTmWr3)HwcPbqn=Qa^K z-3RUPt3)>R(9J<@tIR5!mU=^5Wo9-&FNBS!w)Q|81PG$0*517{Y8Xr-Xc1}&Ae-;M zAoXrN@xt-!#VC@z)DZ9A8|NKtfokVW{fsK!o43f!j{#bW78wVZCMCr~jo{PtV+TuE zCaNc%J&a>&e+LA~9D+tWNCH2}088Y^j`b5q#Xs+;qsm>VXu>BL3R`75i?_x8Qu0V! zRAmByXgfYKIC`f_MHS(!+)s`SF0*ctalCYT(m4ciRMlaymc!zZly(R^x=E;MC{+j4 zb_(UMYsu_PAM`s1f@r||jpgAZmxrem#w9fw4?~8bNNzzZhNV+;`y%ufO>S zkc!ME%CX^VEJDhqd6o4+4I}x}u+vVd1B#I2kz&kx_N~$7FT9jFEl_8k7m65fyqEE& z0aoh$g`nyJ@<@>IHgANVMQZ5K12;c z#bCYAves6awLMV9Q0mI7Kn@F`Labh>&}Xz>BA=MWhbrV-;TDV;x4^kK->4Sptj`Ec z;3A$O%*i=}Ob$Drbe+ll^quy^^L%0%g^uP9W6OSnJ<>U{2g%zBY9G>UQP_ zDhtJPSJLJ$-*hK-y|jFzUUt#UL_&sVe?&_)DhRef+*B1vsjt*4A&Nt%3Uv$Q0Y&jQ zWOy$>h9{WJ^HK*TrBcT3uNhu@wUOo+vPuw;)hJbuNUu@%!EVbl2VW z3_ltob*rYV#+tQ&O~q%j=}tmRi&R=2SXuy_DM8Cy4i37q0y(B%G-e@TVO^^&EiIv; z1MVBfk{R2N8$ZWXv@4^eP8_4eo;K>{r;A{~3QvrGA^2IvNb$`4v^hYpyC2Hn84B+! zUpAVM|3bsvN_q%cJ`dSV->{lS;R8Hh_tuG9#^*em0@KF|$*Z1RHDfyuzZ^92s9#JQ zl7HXNfL5PM07Ug0!@r_B&eS)ye2Uv10PZ|Ze9iA+&w6`lMi!+`Qw)Gkn*-T}wZ_sT z`B3W`;)dO33=V}7)tbuqEBd_fTq&y@>zcj4l^jd5z8pHKk8M2kn>pJx9!9^-F52t9 zM#ZN0E%>$(f90vvn{&z~rOsyl0+UH|G5zXS#F_xXo#(lt7__U(p{GpPwt>X#N?d^r zd31uo0|DqL(@Q=}&*+uw&HjSp8RuVTW06M~Nv$p#Yvln?fqtc?C%6Hx98uG@hl0U} z7c4nnohu>8jf@;1wN;&!U+*x;%vKPTGAnQ}#K_Btt7jm=dV02bmEl@d4UPNS@lPk& z*-DhQ6Bh0D6yC?{LH`|eIt_cGyQ3Fg61NJ1Y=slcPsFdm@0S&!HUJnrGaW!GKR~8Y zv&)xN83~z)sV@MzK*ZmarVUwBBXNzVFu(yLZGhvCEA?E;y~w zTRXY}$HbkWK6G>#k~HTuMTn};DkGFSb1Uu2KdOg*3sb}=xA=SK`6*!Hccox+>~dL; z#ABa8MSyWMZL3jO%ENLm?ft=J(78u1Y`f9`7-Kx3{Vi_e_i!mjzMM)(v>i`W4~w|2 z?L|2R@?MzHRsWRs{9%%VkE;+A1z>Z&8-HK-etSq;dE|cXg;!?M_A@<7I|zj9iPzAP z`-KrE_va5why85k+rCnE5v|;bS5==f;oaL;Nn;J(B-HtTC-C&@{)Gk+W(X08nT#cR zQ4Xq?GPt5c7}8>WK9i=+Vs`5ymN6r#@twr;N)8rN(ng^;!M?w{jwbeTUvNRmu&Ji=2l+YoAnGR7pIo4@WI zeT2n4^BRc>rjx!l=VhE=YcohFwYG#cS^+zr4bY8t?H%&na^zZ{#`I6S602I^%0DEI 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

m@2piXqa0t5@}#jp-xC@n(tHN%twt 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

8y=&%-9@14(K3AD0{UEj4{v8SSbUz? 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 Date: Mon, 18 Oct 2021 02:14:30 +0300 Subject: [PATCH 017/219] Switch from travis to github ci --- .github/workflows/nodejs.yml | 27 +++++++++++++++++++++++++++ .travis.yml | 21 --------------------- scripts/check-browser-field.js | 22 ---------------------- 3 files changed, 27 insertions(+), 43 deletions(-) create mode 100644 .github/workflows/nodejs.yml delete mode 100644 .travis.yml delete mode 100644 scripts/check-browser-field.js diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml new file mode 100644 index 0000000..d923934 --- /dev/null +++ b/.github/workflows/nodejs.yml @@ -0,0 +1,27 @@ +name: Node CI + +on: [push] + +jobs: + build: + + runs-on: ubuntu-latest + + strategy: + matrix: + node-version: [12.x, 14.x, 16.x] + + steps: + - uses: actions/checkout@v1 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node-version }} + - name: npm install, build, and test + run: | + npm install + npm run test + npm run browser-tests + npm run lint + env: + CI: true \ No newline at end of file diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 2d807c6..0000000 --- a/.travis.yml +++ /dev/null @@ -1,21 +0,0 @@ -language: node_js - -node_js: - - 12 - - 14 - - 16 - -install: - - npm i - -script: - - npm run test - - npm run browser-tests - - npm run lint - - npm run build && node scripts/check-browser-field.js - -cache: - npm: true - directories: - - $HOME/.npm - - node_modules diff --git a/scripts/check-browser-field.js b/scripts/check-browser-field.js deleted file mode 100644 index 608b5aa..0000000 --- a/scripts/check-browser-field.js +++ /dev/null @@ -1,22 +0,0 @@ -const fs = require("fs"); - -const pkg = JSON.parse(fs.readFileSync(__dirname + "/../package.json", "utf8")); - -const files = fs - .readdirSync(__dirname + "/../test-vectors") - .filter(f => f.endsWith(".js")); - -for (const file of files) { - const mapping = pkg.browser["./" + file]; - const expected = "./test-vectors/" + file; - - if (mapping !== expected) { - console.error( - `Incorrect or missing mappnig of ${file} in the package.browser` - ); - - console.error(`It should be "${expected}" but is "${mapping}"`); - - process.exit(1); - } -} From 079f70d201f934839d9b151859c55dac041aec61 Mon Sep 17 00:00:00 2001 From: Paul Miller Date: Mon, 18 Oct 2021 02:24:19 +0300 Subject: [PATCH 018/219] bip39: do not expose getCoder --- src/bip39/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bip39/index.ts b/src/bip39/index.ts index 0a959fe..084cf45 100644 --- a/src/bip39/index.ts +++ b/src/bip39/index.ts @@ -39,7 +39,7 @@ const checksum = (entropy: Uint8Array) => { return new Uint8Array([(sha256(entropy)[0] >> bitsLeft) << bitsLeft]); }; -export function getCoder(wordlist: string[]) { +function getCoder(wordlist: string[]) { if ( !Array.isArray(wordlist) || wordlist.length !== 2 ** 11 || From ab549e52404db7df33751828ee5a86a36d5002a8 Mon Sep 17 00:00:00 2001 From: Paul Miller Date: Mon, 18 Oct 2021 05:28:48 +0300 Subject: [PATCH 019/219] New docs --- README.md | 519 +++++++++++++++++++++--------------------------------- 1 file changed, 197 insertions(+), 322 deletions(-) diff --git a/README.md b/README.md index 292e5fd..a6350d3 100644 --- a/README.md +++ b/README.md @@ -11,38 +11,30 @@ developing Javascript/TypeScript applications and tools for Ethereum. Pure Javascript implementations of all the primitives are included, so it can be used out of the box for web applications and libraries. -In Node, it takes advantage of the built-in and N-API based implementations -whenever possible. - The cryptographic primitives included are: -* [Pseudorandom number generation](#pseudorandom-number-generation-submodule) -* [Keccak](#keccak-submodule) -* [Scrypt](#scrypt-submodule) -* [PBKDF2](#pbkdf2-submodule) -* [SHA-256](#sha-256-submodule) -* [RIPEMD-160](#ripemd-160-submodule) -* [BLAKE2b](#blake2b-submodule) -* [AES](#aes-submodule) -* [Secp256k1](#secp256k1-submodule) -* [Hierarchical Deterministic keys derivation](#hierarchical-deterministic-keys-submodule) -* [Seed recovery phrases](#seed-recovery-phrases) +* Hashes: SHA256, keccak-256, RIPEMD160, BLAKE2b +* KDFs: PBKDF2, Scrypt +* CSPRNG (Cryptographically strong pseudorandom number generator) +* secp256k1 curve +* BIP32 HD Keygen +* BIP39 Mnemonic phrases +* AES Encryption -## Installation +## Usage -Via `npm`: +Use NPM / Yarn in node.js / browser: ```bash -$ npm install ethereum-cryptography -``` +# NPM +npm install ethereum-cryptography -Via `yarn`: - -```bash -$ yarn add ethereum-cryptography +# Yarn +yarn add ethereum-cryptography ``` -## Usage +See [browser usage](#browser-usage) for information on using the package with major Javascript bundlers. It is +tested with `webpack`, `Rollup`, `Parcel`, and `Browserify`. This package has no single entry-point, but submodule for each cryptographic primitive. Read each primitive's section of this document to learn how to use @@ -53,199 +45,228 @@ huge bundles when using this package for the web. This could be avoided through tree-shaking, but the possibility of it not working properly on one of [the supported bundlers](#browser-usage) is too high. -## Pseudorandom number generation submodule - -The `random` submodule has functions to generate cryptographically strong -pseudo-random data in synchronous and asynchronous ways. +```js +// Hashes +const { sha256 } = require("ethereum-cryptography/sha256"); +const { keccak256 } = require("ethereum-cryptography/keccak"); +const { ripemd160 } = require("ethereum-cryptography/ripemd160"); +const { blake2b } = require("ethereum-cryptography/blake2b"); -In Node, this functions are backed by [`crypto.randomBytes`](https://nodejs.org/api/crypto.html#crypto_crypto_randombytes_size_callback). +// KDFs +const { pbkdf2Sync } = require("ethereum-cryptography/pbkdf2"); +const { scryptSync } = require("ethereum-cryptography/scrypt"); -In the browser, [`crypto.getRandomValues`](https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues) -is used. If not available, this module won't work, as that would be insecure. +// Random +const { getRandomBytesSync } = require("ethereum-cryptography/random"); -### Function types +// AES encryption +const { encrypt } = require("ethereum-cryptography/aes"); -```ts -function getRandomBytes(bytes: number): Promise; +// secp256k1 elliptic curve operations +const { createPrivateKeySync, ecdsaSign } = require("ethereum-cryptography/secp256k1"); -function getRandomBytesSync(bytes: number): Buffer; +// BIP32 HD Keygen, BIP39 Mnemonic Phrases +const { HDKey } = require("ethereum-cryptography/hdkey"); +const { generateMnemonic } = require("ethereum-cryptography/bip39"); +const { wordlist } = require("ethereum-cryptography/bip39/wordlists/english"); ``` -### Example usage +## Hashes: SHA256, keccak-256, RIPEMD160, BLAKE2b +```typescript +function sha256(msg: Uint8Array): Uint8Array; +function keccak256(msg: Uint8Array): Uint8Array; +function ripemd160(msg: Uint8Array): Uint8Array; +function blake2b(msg: Uint8Array, outputLength = 64): Uint8Array; +``` ```js -const { getRandomBytesSync } = require("ethereum-cryptography/random"); - -console.log(getRandomBytesSync(32).toString("hex")); +const { sha256 } = require("ethereum-cryptography/sha256"); +const { keccak256, keccak224, keccak384, keccak512 } = require("ethereum-cryptography/keccak"); +const { ripemd160 } = require("ethereum-cryptography/ripemd160"); +const { blake2b } = require("ethereum-cryptography/blake2b"); ``` -## Keccak submodule - The `keccak` submodule has four functions that implement different variations of the Keccak hashing algorithm. These are `keccak224`, `keccak256`, `keccak384`, and `keccak512`. -### Function types +## KDFs: PBKDF2, Scrypt ```ts -function keccak224(msg: Buffer): Buffer; - -function keccak256(msg: Buffer): Buffer; - -function keccak384(msg: Buffer): Buffer; - -function keccak512(msg: Buffer): Buffer; -``` - -### Example usage - -```js -const { keccak256 } = require("ethereum-cryptography/keccak"); - -console.log(keccak256(Buffer.from("Hello, world!", "ascii")).toString("hex")); +function pbkdf2(password: Uint8Array, salt: Uint8Array, iterations: number, keylen: number, digest: string): Promise; +function pbkdf2Sync(password: Uint8Array, salt: Uint8Array, iterations: number, keylen: number, digest: string): Uint8Array; +function scrypt(password: Uint8Array, salt: Uint8Array, N: number, p: number, r: number, dkLen: number): Promise; +function scryptSync(password: Uint8Array, salt: Uint8Array, N: number, p: number, r: number, dkLen: number): Uint8Array; ``` -## Scrypt submodule +The `pbkdf2` submodule has two functions implementing the PBKDF2 key +derivation algorithm in synchronous and asynchronous ways. This algorithm is +very slow, and using the synchronous version in the browser is not recommended, +as it will block its main thread and hang your UI. The KDF supports `sha256` and `sha512` digests. The `scrypt` submodule has two functions implementing the Scrypt key derivation algorithm in synchronous and asynchronous ways. This algorithm is very slow, and using the synchronous version in the browser is not recommended, as it will block its main thread and hang your UI. -### Password encoding - Encoding passwords is a frequent source of errors. Please read [these notes](https://github.com/ricmoo/scrypt-js/tree/0eb70873ddf3d24e34b53e0d9a99a0cef06a79c0#encoding-notes) -before using this submodule. +before using these submodules. -### Function types - -```ts -function scrypt(password: Buffer, salt: Buffer, n: number, p: number, r: number, dklen: number): Promise; - -function scryptSync(password: Buffer, salt: Buffer, n: number, p: number, r: number, dklen: number): Buffer; +```js +const { pbkdf2Sync } = require("ethereum-cryptography/pbkdf2"); +console.log(pbkdf2Sync("password", "salt", 131072, 32, "sha256")); ``` -### Example usage - ```js const { scryptSync } = require("ethereum-cryptography/scrypt"); - -console.log( - scryptSync( - Buffer.from("ascii password", "ascii"), - Buffer.from("salt", "hex"), - 16, - 1, - 1, - 64 - ).toString("hex") -); +console.log(scryptSync("password", "salt", 262144, 8, 1, 32)); ``` -## PBKDF2 submodule - -The `pbkdf2` submodule has two functions implementing the PBKDF2 key -derivation algorithm in synchronous and asynchronous ways. This algorithm is -very slow, and using the synchronous version in the browser is not recommended, -as it will block its main thread and hang your UI. - -### Password encoding +## CSPRNG (Cryptographically strong pseudorandom number generator) -Encoding passwords is a frequent source of errors. Please read -[these notes](https://github.com/ricmoo/scrypt-js/tree/0eb70873ddf3d24e34b53e0d9a99a0cef06a79c0#encoding-notes) -before using this submodule. +```ts +function getRandomBytes(bytes: number): Promise; +function getRandomBytesSync(bytes: number): Uint8Array; +``` -### Supported digests +The `random` submodule has functions to generate cryptographically strong +pseudo-random data in synchronous and asynchronous ways. -In Node this submodule uses the built-in implementation and supports any digest -returned by [`crypto.getHashes`](https://nodejs.org/api/crypto.html#crypto_crypto_gethashes). +Backed by [`crypto.getRandomValues`](https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues) in browser and by [`crypto.randomBytes`](https://nodejs.org/api/crypto.html#crypto_crypto_randombytes_size_callback) in node.js. If backends are somehow not available, the module would throw an error and won't work, as keeping them working would be insecure. -In the browser, it is tested to support at least `sha256`, the only digest -normally used with `pbkdf2` in Ethereum. It may support more. +```js +const { getRandomBytesSync } = require("ethereum-cryptography/random"); +console.log(getRandomBytesSync(32)); +``` -### Function types +## secp256k1 curve ```ts -function pbkdf2(password: Buffer, salt: Buffer, iterations: number, keylen: number, digest: string): Promise; - -function pbkdf2Sync(password: Buffer, salt: Buffer, iterations: number, keylen: number, digest: string): Buffer; +function getPublicKey(privateKey: Uint8Array, isCompressed?: false): Uint8Array; +function getSharedSecret(privateKeyA: Uint8Array, publicKeyB: Uint8Array): Uint8Array; +function sign(msgHash: Uint8Array, privateKey: Uint8Array, opts?: Options): Promise; +function verify(signature: Uint8Array, msgHash: Uint8Array, publicKey: Uint8Array): boolean +function recoverPublicKey(msgHash: Uint8Array, signature: Uint8Array, recovery: number): Uint8Array | undefined; +function utils.randomPrivateKey(): Uint8Array; ``` -### Example usage +The `curve-secp256k1` submodule provides a library for elliptic curve operations on +the curve secp256k1. For detailed documentation, follow [README of `noble-secp256k1`](https://github.com/paulmillr/noble-secp256k1), which the module uses as a backend. -```js -const { pbkdf2Sync } = require("ethereum-cryptography/pbkdf2"); +secp256k1 private keys need to be cryptographically secure random numbers with +certain caracteristics. If this is not the case, the security of secp256k1 is +compromised. We strongly recommend using `utils.randomPrivateKey()` to generate them. -console.log( - pbkdf2Sync( - Buffer.from("ascii password", "ascii"), - Buffer.from("salt", "hex"), - 4096, - 32, - 'sha256' - ).toString("hex") -); +```js +const secp = require("ethereum-cryptography/curve-secp256k1"); +(async () => { + // You pass either a hex string, or Uint8Array + const privateKey = "6b911fd37cdf5c81d4c0adb1ab7fa822ed253ab0ad9aa18d77257c88b29b718e"; + const messageHash = "a33321f98e4ff1c283c76998f14f57447545d339b3db534c6d886decb4209f28"; + const publicKey = secp.getPublicKey(privateKey); + const signature = await secp.sign(messageHash, privateKey); + const isSigned = secp.verify(signature, messageHash, publicKey); +})(); ``` -## SHA-256 submodule +Note: if you've been using ethereum-cryptography v0.1, it had different API. We're providing a compatibility layer for users who want to upgrade without hassle. Check out [the legacy documentation](#legacy-secp256k1-compatibility-layer). -The `sha256` submodule contains a single function implementing the SHA-256 -hashing algorithm. +## BIP32 HD Keygen -### Function types +This module exports a single class whose type is ```ts -function sha256(msg: Buffer): Buffer; -``` +class HDKey { + public static HARDENED_OFFSET: number; + public static fromMasterSeed(seed: Uint8Array, versions: Versions): HDKey; + public static fromExtendedKey(base58key: string, versions: Versions): HDKey; + public static fromJSON(json: { xpriv: string }): HDKey; -### Example usage + public versions: Versions; + public depth: number; + public index: number; + public chainCode: Uint8Array | null; + public privateKey: Uint8Array | null; + public publicKey: Uint8Array | null; + public fingerprint: number; + public parentFingerprint: number; + public pubKeyHash: Uint8Array | undefined; + public identifier: Uint8Array | undefined; + public privateExtendedKey: string; + public publicExtendedKey: string; -```js -const { sha256 } = require("ethereum-cryptography/sha256"); + private constructor(versios: Versions); + public derive(path: string): HDKey; + public deriveChild(index: number): HDKey; + public sign(hash: Uint8Array): Uint8Array; + public verify(hash: Uint8Array, signature: Uint8Array): boolean; + public wipePrivateData(): this; + public toJSON(): { xpriv: string; xpub: string }; +} -console.log(sha256(Buffer.from("message", "ascii")).toString("hex")); +interface Versions { + private: number; + public: number; +} ``` -## RIPEMD-160 submodule - -The `ripemd160` submodule contains a single function implementing the -RIPEMD-160 hashing algorithm. - -### Function types - -```ts -function ripemd160(msg: Buffer): Buffer; -``` +The `hdkey` submodule provides a library for keys derivation according to +[BIP32](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki). -### Example usage +It has almost the exact same API than the version `1.x` of +[`hdkey` from cryptocoinjs](https://github.com/cryptocoinjs/hdkey), +but it's backed by this package's primitives, and has built-in TypeScript types. +Its only difference is that it has to be be used with a named import. ```js -const { ripemd160 } = require("ethereum-cryptography/ripemd160"); - -console.log(ripemd160(Buffer.from("message", "ascii")).toString("hex")); -``` +const { HDKey } = require("ethereum-cryptography/hdkey"); -## BLAKE2b submodule +const seed = "fffcf9f6f3f0edeae7e4e1dedbd8d5d2cfccc9c6c3c0bdbab7b4b1aeaba8a5a29f9c999693908d8a8784817e7b7875726f6c696663605d5a5754514e4b484542"; +const hdkey = HDKey.fromMasterSeed(Uint8Array.from(seed, "hex")); +const childkey = hdkey.derive("m/0/2147483647'/1"); -The `blake2b` submodule contains a single function implementing the -BLAKE2b non-keyed hashing algorithm. +console.log(childkey.privateExtendedKey); +``` -### Function types +## BIP39 Mnemonic Seed Phrase ```ts -function blake2b(input: Buffer, outputLength = 64): Buffer; +function generateMnemonic(wordlist: string[], strength: number = 128): string; +function mnemonicToEntropy(mnemonic: string, wordlist: string[]): Uint8Array; +function entropyToMnemonic(entropy: Uint8Array, wordlist: string[]): string; +function validateMnemonic(mnemonic: string, wordlist: string[]): boolean; +async function mnemonicToSeed(mnemonic: string, passphrase: string = ""): Promise; +function mnemonicToSeedSync(mnemonic: string, passphrase: string = ""): Uint8Array; ``` -### Example usage +The `bip39` submodule provides functions to generate, validate and use seed +recovery phrases according to [BIP39](https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki). ```js -const { blake2b } = require("ethereum-cryptography/blake2b"); - -console.log(blake2b(Buffer.from("message", "ascii")).toString("hex")); +const { generateMnemonic } = require("ethereum-cryptography/bip39"); +const { wordlist } = require("ethereum-cryptography/bip39/wordlists/english"); +console.log(generateMnemonic(wordlist)); ``` -## AES submodule +This submodule also contains the word lists defined by BIP39 for Czech, English, +French, Italian, Japanese, Korean, Simplified and Traditional Chinese, and +Spanish. These are not imported by default, as that would increase bundle sizes +too much. Instead, you should import and use them explicitly. + +The word lists are exported as a `wordlist` variable in each of these submodules: + +* `ethereum-cryptography/bip39/wordlists/czech.js` +* `ethereum-cryptography/bip39/wordlists/english.js` +* `ethereum-cryptography/bip39/wordlists/french.js` +* `ethereum-cryptography/bip39/wordlists/italian.js` +* `ethereum-cryptography/bip39/wordlists/japanese.js` +* `ethereum-cryptography/bip39/wordlists/korean.js` +* `ethereum-cryptography/bip39/wordlists/simplified-chinese.js` +* `ethereum-cryptography/bip39/wordlists/spanish.js` +* `ethereum-cryptography/bip39/wordlists/traditional-chinese.js` + +## AES Encryption The `aes` submodule contains encryption and decryption functions implementing the [Advanced Encryption Standard](https://en.wikipedia.org/wiki/Advanced_Encryption_Standard) @@ -316,9 +337,8 @@ exception. ### Function types ```ts -function encrypt(msg: Buffer, key: Buffer, iv: Buffer, mode = "aes-128-ctr", pkcs7PaddingEnabled = true): Buffer; - -function decrypt(cypherText: Buffer, key: Buffer, iv: Buffer, mode = "aes-128-ctr", pkcs7PaddingEnabled = true): Buffer +function encrypt(msg: Uint8Array, key: Uint8Array, iv: Uint8Array, mode = "aes-128-ctr", pkcs7PaddingEnabled = true): Uint8Array; +function decrypt(cypherText: Uint8Array, key: Uint8Array, iv: Uint8Array, mode = "aes-128-ctr", pkcs7PaddingEnabled = true): Uint8Array ``` ### Example usage @@ -328,180 +348,15 @@ const { encrypt } = require("ethereum-cryptography/aes"); console.log( encrypt( - Buffer.from("message", "ascii"), - Buffer.from("2b7e151628aed2a6abf7158809cf4f3c", "hex"), - Buffer.from("f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff", "hex") - ).toString("hex") -); -``` - -## Secp256k1 submodule - -The `secp256k1` submodule provides a library for elliptic curve operations on -the curve Secp256k1. - -It has the exact same API than the version `4.x` of the [`secp256k1`](https://github.com/cryptocoinjs/secp256k1-node) -module from cryptocoinjs, with two added function to create private keys. - -### Creating private keys - -Secp256k1 private keys need to be cryptographycally secure random numbers with -certain caracteristics. If this is not the case, the security of Secp256k1 is -compromissed. - -We strongly recommend to use this module to create new private keys. - -### Function types - -Functions to create private keys: - -```ts -function createPrivateKey(): Promise; - -function function createPrivateKeySync(): Uint8Array; -``` - -For the rest of the functions, pleasse read [`secp256k1`'s documentation](https://github.com/cryptocoinjs/secp256k1-node). - -### Example usage - -```js -const { createPrivateKeySync, ecdsaSign } = require("ethereum-cryptography/secp256k1"); - -const msgHash = Buffer.from( - "82ff40c0a986c6a5cfad4ddf4c3aa6996f1a7837f9c398e17e5de5cbd5a12b28", - "hex" + Uint8Array.from("message", "ascii"), + Uint8Array.from("2b7e151628aed2a6abf7158809cf4f3c", "hex"), + Uint8Array.from("f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff", "hex") + ) ); - -const privateKey = createPrivateKeySync(); - -console.log(Buffer.from(ecdsaSign(msgHash, privateKey).signature).toString("hex")); -``` - -## Hierarchical Deterministic keys submodule - -The `hdkey` submodule provides a library for keys derivation according to -[BIP32](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki). - -It has almost the exact same API than the version `1.x` of -[`hdkey` from cryptocoinjs](https://github.com/cryptocoinjs/hdkey), -but it's backed by this package's primitives, and has built-in TypeScript types. -Its only difference is that it has to be be used with a named import. - -### Function types - -This module exports a single class whose type is - -```ts -class HDKey { - public static HARDENED_OFFSET: number; - public static fromMasterSeed(seed: Buffer, versions: Versions): HDKey; - public static fromExtendedKey(base58key: string, versions: Versions): HDKey; - public static fromJSON(json: { xpriv: string }): HDKey; - - public versions: Versions; - public depth: number; - public index: number; - public chainCode: Buffer | null; - public privateKey: Buffer | null; - public publicKey: Buffer | null; - public fingerprint: number; - public parentFingerprint: number; - public pubKeyHash: Buffer | undefined; - public identifier: Buffer | undefined; - public privateExtendedKey: string; - public publicExtendedKey: string; - - private constructor(versios: Versions); - public derive(path: string): HDKey; - public deriveChild(index: number): HDKey; - public sign(hash: Buffer): Buffer; - public verify(hash: Buffer, signature: Buffer): boolean; - public wipePrivateData(): this; - public toJSON(): { xpriv: string; xpub: string }; -} - -interface Versions { - private: number; - public: number; -} -``` - -### Example usage - -```js -const { HDKey } = require("ethereum-cryptography/hdkey"); - -const seed = "fffcf9f6f3f0edeae7e4e1dedbd8d5d2cfccc9c6c3c0bdbab7b4b1aeaba8a5a29f9c999693908d8a8784817e7b7875726f6c696663605d5a5754514e4b484542"; -const hdkey = HDKey.fromMasterSeed(Buffer.from(seed, "hex")); -const childkey = hdkey.derive("m/0/2147483647'/1"); - -console.log(childkey.privateExtendedKey); -``` - -## Seed recovery phrases - -The `bip39` submodule provides functions to generate, validate and use seed -recovery phrases according to [BIP39](https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki). - -### Function types - -```ts -function generateMnemonic(wordlist: string[], strength: number = 128): string; - -function mnemonicToEntropy(mnemonic: string, wordlist: string[]): Buffer; - -function entropyToMnemonic(entropy: Buffer, wordlist: string[]): string; - -function validateMnemonic(mnemonic: string, wordlist: string[]): boolean; - -async function mnemonicToSeed(mnemonic: string, passphrase: string = ""): Promise; - -function mnemonicToSeedSync(mnemonic: string, passphrase: string = ""): Buffer; -``` - -### Word lists - -This submodule also contains the word lists defined by BIP39 for Czech, English, -French, Italian, Japanese, Korean, Simplified and Traditional Chinese, and -Spanish. These are not imported by default, as that would increase bundle sizes -too much. Instead, you should import and use them explicitly. - -The word lists are exported as a `wordlist` variable in each of these submodules: - -* `ethereum-cryptography/bip39/wordlists/czech.js` - -* `ethereum-cryptography/bip39/wordlists/english.js` - -* `ethereum-cryptography/bip39/wordlists/french.js` - -* `ethereum-cryptography/bip39/wordlists/italian.js` - -* `ethereum-cryptography/bip39/wordlists/japanese.js` - -* `ethereum-cryptography/bip39/wordlists/korean.js` - -* `ethereum-cryptography/bip39/wordlists/simplified-chinese.js` - -* `ethereum-cryptography/bip39/wordlists/spanish.js` - -* `ethereum-cryptography/bip39/wordlists/traditional-chinese.js` - -### Example usage - -```js - -const { generateMnemonic } = require("ethereum-cryptography/bip39"); -const { wordlist } = require("ethereum-cryptography/bip39/wordlists/english"); - -console.log(generateMnemonic(wordlist)); ``` ## Browser usage -This package works with all the major Javascript bundlers. It is -tested with `webpack`, `Rollup`, `Parcel`, and `Browserify`. - ### Rollup setup Using this library with Rollup requires the following plugins: @@ -527,6 +382,24 @@ These can be used by setting your `plugins` array like this: ] ``` +## Legacy secp256k1 compatibility layer + +**Note:** do not use this module; it is only for users who upgrade +from ethereum-cryptography v0.1. It could be removed in the future, +but we're keeping it around for now, for backwards-compatibility. + +The API of `secp256k1` is the same as [secp256k1-node](https://github.com/cryptocoinjs/secp256k1-node): + +```js +const { createPrivateKeySync, ecdsaSign } = require("ethereum-cryptography/secp256k1"); +const msgHash = Uint8Array.from( + "82ff40c0a986c6a5cfad4ddf4c3aa6996f1a7837f9c398e17e5de5cbd5a12b28", + "hex" +); +const privateKey = createPrivateKeySync(); +console.log(Uint8Array.from(ecdsaSign(msgHash, privateKey).signature)); +``` + ## Missing cryptographic primitives This package intentionally excludes the the cryptographic primitives necessary @@ -542,13 +415,15 @@ you found another primitive that is missing. ## Security audit -This library has been audited by [Trail of Bits](https://www.trailofbits.com/). -You can see the results of the audit and the changes implemented as a result of -it in [`audit/`](./audit). +This library is in the process of getting a security audit. ## License -`ethereum-cryptography` is released under [the MIT License](./LICENSE). +`ethereum-cryptography` is released under The MIT License (MIT) + +Copyright (c) 2021 Patricio Palladino, Paul Miller, ethereum-cryptography contributors + +See [LICENSE](./LICENSE) file. [1]: https://img.shields.io/npm/v/ethereum-cryptography.svg [2]: https://www.npmjs.com/package/ethereum-cryptography From c0426a8bbec817acb0a03ca2cdc7f731a63ed771 Mon Sep 17 00:00:00 2001 From: Paul Miller Date: Mon, 18 Oct 2021 05:52:07 +0300 Subject: [PATCH 020/219] Marketing --- README.md | 70 +++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 52 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index a6350d3..143e2b2 100644 --- a/README.md +++ b/README.md @@ -1,25 +1,33 @@ # ethereum-cryptography -[![npm version][1]][2] -[![Travis CI][3]][4] -[![license][5]][6] -[![Types][7]][8] +[![npm version][1]][2] [![Travis CI][3]][4] [![license][5]][6] [![Types][7]][8] -This npm package contains all the cryptographic primitives normally used when -developing Javascript/TypeScript applications and tools for Ethereum. - -Pure Javascript implementations of all the primitives are included, so it can -be used out of the box for web applications and libraries. +This package contains all pure-js cryptographic primitives normally used when +developing Javascript / TypeScript applications and tools for Ethereum. The cryptographic primitives included are: -* Hashes: SHA256, keccak-256, RIPEMD160, BLAKE2b -* KDFs: PBKDF2, Scrypt -* CSPRNG (Cryptographically strong pseudorandom number generator) -* secp256k1 curve -* BIP32 HD Keygen -* BIP39 Mnemonic phrases -* AES Encryption +* [Hashes: SHA256, keccak-256, RIPEMD160, BLAKE2b](#hashes-sha256-keccak-256-ripemd160-blake2b) +* [KDFs: PBKDF2, Scrypt](#kdfs-pbkdf2-scrypt) +* [CSPRNG (Cryptographically strong pseudorandom number generator)](#csprng-cryptographically-strong-pseudorandom-number-generator) +* [secp256k1 curve](#secp256k1-curve) +* [BIP32 HD Keygen](#bip32-hd-keygen) +* [BIP39 Mnemonic phrases](#bip39-mnemonic-phrases) +* [AES Encryption](#aes-encryption) + +**October 2021 update:** We're releasing **experimental** version 0.2 of the package. +The module has been completely rewritten: + +- ~6x smaller: 4,000 lines of code incl. all deps instead of 22,438; 185KB of unpacked code instead of 755KB +- 3 dependencies (pending an audit) instead of 38 +- Same functionality, all old APIs are the same to simplify the upgrade path +- **Breaking:** we target runtimes with [bigint](https://caniuse.com/bigint) support, + which is Chrome 67+, Edge 79+, Firefox 68+, Safari 14+, node.js 10+. If you need to support + older runtimes, use `ethereum-cryptography@0.1` +- **Breaking:** we return `Uint8Array` from all methods that worked with `Buffer` before. + `Buffer` has never been supported in browsers, while `Uint8Array`s are supported natively in both + browsers and node.js. See [Upgrading](#upgrading) +- The new module [has not been audited yet](#security), but it's in the process of getting the audit. Use it at your own risk ## Usage @@ -34,7 +42,7 @@ yarn add ethereum-cryptography ``` See [browser usage](#browser-usage) for information on using the package with major Javascript bundlers. It is -tested with `webpack`, `Rollup`, `Parcel`, and `Browserify`. +tested with **Webpack, Rollup, Parcel and Browserify**. This package has no single entry-point, but submodule for each cryptographic primitive. Read each primitive's section of this document to learn how to use @@ -413,7 +421,33 @@ to implement the following EIPs: Feel free to open an issue if you want this decision to be reconsidered, or if you found another primitive that is missing. -## Security audit +## Upgrading + +Version 0.2 changes from 0.1: + +- **Breaking:** we target runtimes with [bigint](https://caniuse.com/bigint) support, + which is Chrome 67+, Edge 79+, Firefox 68+, Safari 14+, node.js 10+. If you need to support + older runtimes, use `ethereum-cryptography@0.1` +- **Breaking:** we return `Uint8Array` from all methods that worked with `Buffer` before. + `Buffer` has never been supported in browsers, while `Uint8Array`s are supported natively in both + browsers and node.js: + +``` +const { sha256 } = require("ethereum-cryptography/sha256"); + +// Old usage +const hasho = sha256(Buffer.from("string", "utf8")).toString("hex"); + +// New usage +const { toHex } = require("ethereum-cryptography/utils"); +const hashn = toHex(sha256("string")); + +// If you have `Buffer` module and want to preserve it: +const hashb = Buffer.from(sha256("string")); +const hashbo = hashb.toString("hex"); +``` + +## Security This library is in the process of getting a security audit. From 8a886bb089ff736c9d2bc9dd850d71557053d8fb Mon Sep 17 00:00:00 2001 From: Paul Miller Date: Mon, 18 Oct 2021 05:55:19 +0300 Subject: [PATCH 021/219] README --- README.md | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 143e2b2..db7c595 100644 --- a/README.md +++ b/README.md @@ -18,15 +18,14 @@ The cryptographic primitives included are: **October 2021 update:** We're releasing **experimental** version 0.2 of the package. The module has been completely rewritten: -- ~6x smaller: 4,000 lines of code incl. all deps instead of 22,438; 185KB of unpacked code instead of 755KB +- ~6x smaller: 4,000 lines of code instead of 22,438 (with all deps); 185KB of unpacked code instead of 755KB - 3 dependencies (pending an audit) instead of 38 -- Same functionality, all old APIs are the same to simplify the upgrade path -- **Breaking:** we target runtimes with [bigint](https://caniuse.com/bigint) support, - which is Chrome 67+, Edge 79+, Firefox 68+, Safari 14+, node.js 10+. If you need to support - older runtimes, use `ethereum-cryptography@0.1` -- **Breaking:** we return `Uint8Array` from all methods that worked with `Buffer` before. +- **Same functionality**, all old APIs remain the same except for two breaking changes: + 1. We return `Uint8Array` from all methods that worked with `Buffer` before. `Buffer` has never been supported in browsers, while `Uint8Array`s are supported natively in both browsers and node.js. See [Upgrading](#upgrading) + 2. We target runtimes with [bigint](https://caniuse.com/bigint) support, + which is Chrome 67+, Edge 79+, Firefox 68+, Safari 14+, node.js 10+. If you need to support older runtimes, use `ethereum-cryptography@0.1` - The new module [has not been audited yet](#security), but it's in the process of getting the audit. Use it at your own risk ## Usage From 4e8164290973da6fd4827858f48cabd83fc285ab Mon Sep 17 00:00:00 2001 From: Paul Miller Date: Mon, 18 Oct 2021 05:56:23 +0300 Subject: [PATCH 022/219] README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index db7c595..4b7faff 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ The cryptographic primitives included are: **October 2021 update:** We're releasing **experimental** version 0.2 of the package. The module has been completely rewritten: -- ~6x smaller: 4,000 lines of code instead of 22,438 (with all deps); 185KB of unpacked code instead of 755KB +- ~6x smaller: 4,000 lines of code instead of 22,438 (with all deps); 185KB instead of 755KB - 3 dependencies (pending an audit) instead of 38 - **Same functionality**, all old APIs remain the same except for two breaking changes: 1. We return `Uint8Array` from all methods that worked with `Buffer` before. From 198e556796c56f67c570c27977cec5fb71ce21b2 Mon Sep 17 00:00:00 2001 From: Paul Miller Date: Mon, 18 Oct 2021 06:32:16 +0300 Subject: [PATCH 023/219] Expose curve-secp256k1 module --- .gitignore | 3 +-- README.md | 28 +++++++++++++++++----------- src/curve-secp256k1.ts | 21 +++++++++++++++++++++ src/hdkey.ts | 11 +---------- src/secp256k1.ts | 11 +++-------- 5 files changed, 43 insertions(+), 31 deletions(-) create mode 100644 src/curve-secp256k1.ts diff --git a/.gitignore b/.gitignore index 59fc938..3c40276 100644 --- a/.gitignore +++ b/.gitignore @@ -2,8 +2,7 @@ /*.js.map /*.d.ts /*.d.ts.map -/pure -/shims +/bip39 /test-builds /node_modules /.parcel-cache diff --git a/README.md b/README.md index 4b7faff..1830f6c 100644 --- a/README.md +++ b/README.md @@ -86,6 +86,11 @@ function ripemd160(msg: Uint8Array): Uint8Array; function blake2b(msg: Uint8Array, outputLength = 64): Uint8Array; ``` +- SHA2 (SHA256, SHA512) +- keccak-256 variant of SHA3 +- RIPEMD160 +- BLAKE2b + ```js const { sha256 } = require("ethereum-cryptography/sha256"); const { keccak256, keccak224, keccak384, keccak512 } = require("ethereum-cryptography/keccak"); @@ -153,6 +158,7 @@ console.log(getRandomBytesSync(32)); function getPublicKey(privateKey: Uint8Array, isCompressed?: false): Uint8Array; function getSharedSecret(privateKeyA: Uint8Array, publicKeyB: Uint8Array): Uint8Array; function sign(msgHash: Uint8Array, privateKey: Uint8Array, opts?: Options): Promise; +function signSync(msgHash: Uint8Array, privateKey: Uint8Array, opts?: Options): Uint8Array; function verify(signature: Uint8Array, msgHash: Uint8Array, publicKey: Uint8Array): boolean function recoverPublicKey(msgHash: Uint8Array, signature: Uint8Array, recovery: number): Uint8Array | undefined; function utils.randomPrivateKey(): Uint8Array; @@ -228,9 +234,10 @@ Its only difference is that it has to be be used with a named import. ```js const { HDKey } = require("ethereum-cryptography/hdkey"); +const { hexToBytes } = require("ethereum-cryptography/utils"); const seed = "fffcf9f6f3f0edeae7e4e1dedbd8d5d2cfccc9c6c3c0bdbab7b4b1aeaba8a5a29f9c999693908d8a8784817e7b7875726f6c696663605d5a5754514e4b484542"; -const hdkey = HDKey.fromMasterSeed(Uint8Array.from(seed, "hex")); +const hdkey = HDKey.fromMasterSeed(hexToBytes(seed)); const childkey = hdkey.derive("m/0/2147483647'/1"); console.log(childkey.privateExtendedKey); @@ -275,6 +282,11 @@ The word lists are exported as a `wordlist` variable in each of these submodules ## AES Encryption +```ts +function encrypt(msg: Uint8Array, key: Uint8Array, iv: Uint8Array, mode = "aes-128-ctr", pkcs7PaddingEnabled = true): Uint8Array; +function decrypt(cypherText: Uint8Array, key: Uint8Array, iv: Uint8Array, mode = "aes-128-ctr", pkcs7PaddingEnabled = true): Uint8Array +``` + The `aes` submodule contains encryption and decryption functions implementing the [Advanced Encryption Standard](https://en.wikipedia.org/wiki/Advanced_Encryption_Standard) algorithm. @@ -341,23 +353,17 @@ Note that implementing this can mean catching all errors that can be thrown when calling on of this module's functions, and just throwing a new generic exception. -### Function types - -```ts -function encrypt(msg: Uint8Array, key: Uint8Array, iv: Uint8Array, mode = "aes-128-ctr", pkcs7PaddingEnabled = true): Uint8Array; -function decrypt(cypherText: Uint8Array, key: Uint8Array, iv: Uint8Array, mode = "aes-128-ctr", pkcs7PaddingEnabled = true): Uint8Array -``` - ### Example usage ```js const { encrypt } = require("ethereum-cryptography/aes"); +const { hexToBytes, utf8ToBytes } = require("ethereum-cryptography/utils"); console.log( encrypt( - Uint8Array.from("message", "ascii"), - Uint8Array.from("2b7e151628aed2a6abf7158809cf4f3c", "hex"), - Uint8Array.from("f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff", "hex") + utf8ToBytes("message"), + hexToBytes("2b7e151628aed2a6abf7158809cf4f3c"), + hexToBytes("f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff") ) ); ``` diff --git a/src/curve-secp256k1.ts b/src/curve-secp256k1.ts new file mode 100644 index 0000000..cba926c --- /dev/null +++ b/src/curve-secp256k1.ts @@ -0,0 +1,21 @@ +import { hmac } from "noble-hashes/lib/hmac"; +import { sha256 } from "noble-hashes/lib/sha256"; +import { utils as _utils } from "noble-secp256k1"; +export { + getPublicKey, + sign, + signSync, + verify, + getSharedSecret, + utils, + Point, + Signature, + CURVE +} from "noble-secp256k1"; + +// Enable sync API for noble-secp256k1 +_utils.hmacSha256Sync = (key: Uint8Array, ...messages: Uint8Array[]) => { + const h = hmac.create(sha256, key); + messages.forEach(msg => h.update(msg)); + return h.digest(); +}; diff --git a/src/hdkey.ts b/src/hdkey.ts index 424dfa8..8dd6495 100644 --- a/src/hdkey.ts +++ b/src/hdkey.ts @@ -4,7 +4,7 @@ import { ripemd160 } from "noble-hashes/lib/ripemd160"; import { sha256 } from "noble-hashes/lib/sha256"; import { sha512 } from "noble-hashes/lib/sha512"; import { bytesToHex } from "noble-hashes/lib/utils"; -import * as secp from "noble-secp256k1"; +import * as secp from "./curve-secp256k1"; import { assertBytes, concatBytes, @@ -14,15 +14,6 @@ import { } from "./utils"; const base58c = base58check(sha256); -// Enable sync API for noble-secp256k1 -secp.utils.hmacSha256Sync = (key: Uint8Array, ...msgs: Uint8Array[]) => { - const h = hmac.create(sha256, key); - for (const msg of msgs) { - h.update(msg); - } - return h.digest(); -}; - function bytesToNumber(bytes: Uint8Array): bigint { return BigInt(`0x${bytesToHex(bytes)}`); } diff --git a/src/secp256k1.ts b/src/secp256k1.ts index b77a71e..707056c 100644 --- a/src/secp256k1.ts +++ b/src/secp256k1.ts @@ -1,14 +1,9 @@ -import { hmac } from "noble-hashes/lib/hmac"; import { sha256 } from "noble-hashes/lib/sha256"; -import * as secp from "noble-secp256k1"; +import * as secp from "./curve-secp256k1"; import { assertBool, assertBytes, hexToBytes, toHex } from "./utils"; -// Enable sync API for noble-secp256k1 -secp.utils.hmacSha256Sync = (key: Uint8Array, ...messages: Uint8Array[]) => { - const h = hmac.create(sha256, key); - messages.forEach(msg => h.update(msg)); - return h.digest(); -}; +// Legacy compatibility layer for elliptic via noble-secp256k1 +// Use `curve-secp256k1` module directly instead // Copy-paste from secp256k1, maybe export it? const bytesToNumber = (bytes: Uint8Array) => hexToNumber(toHex(bytes)); From e3597d9d244ea9496a36118a89fe0abd332b2812 Mon Sep 17 00:00:00 2001 From: Paul Miller Date: Mon, 18 Oct 2021 06:34:28 +0300 Subject: [PATCH 024/219] README --- README.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 1830f6c..40d9eff 100644 --- a/README.md +++ b/README.md @@ -81,27 +81,28 @@ const { wordlist } = require("ethereum-cryptography/bip39/wordlists/english"); ## Hashes: SHA256, keccak-256, RIPEMD160, BLAKE2b ```typescript function sha256(msg: Uint8Array): Uint8Array; +function sha512(msg: Uint8Array): Uint8Array; function keccak256(msg: Uint8Array): Uint8Array; function ripemd160(msg: Uint8Array): Uint8Array; function blake2b(msg: Uint8Array, outputLength = 64): Uint8Array; ``` +Exposes following cryptographic hash functions: + - SHA2 (SHA256, SHA512) -- keccak-256 variant of SHA3 +- keccak-256 variant of SHA3 (also `keccak224`, `keccak384`, +and `keccak512`) - RIPEMD160 - BLAKE2b ```js const { sha256 } = require("ethereum-cryptography/sha256"); +const { sha512 } = require("ethereum-cryptography/sha512"); const { keccak256, keccak224, keccak384, keccak512 } = require("ethereum-cryptography/keccak"); const { ripemd160 } = require("ethereum-cryptography/ripemd160"); const { blake2b } = require("ethereum-cryptography/blake2b"); ``` -The `keccak` submodule has four functions that implement different variations of -the Keccak hashing algorithm. These are `keccak224`, `keccak256`, `keccak384`, -and `keccak512`. - ## KDFs: PBKDF2, Scrypt ```ts From c4faa3f9abaa28bfd5e0f12148e5afaecd12cbf7 Mon Sep 17 00:00:00 2001 From: Paul Miller Date: Mon, 18 Oct 2021 07:15:30 +0300 Subject: [PATCH 025/219] Expose sha512 --- src/sha512.ts | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 src/sha512.ts diff --git a/src/sha512.ts b/src/sha512.ts new file mode 100644 index 0000000..7bc3962 --- /dev/null +++ b/src/sha512.ts @@ -0,0 +1,4 @@ +import { sha512 as _sha512 } from "noble-hashes/lib/sha512"; +import { wrapHash } from "./utils"; + +export const sha512 = wrapHash(_sha512); From fe571a83e57e1d3ad9620879cb0d165a3b4297e2 Mon Sep 17 00:00:00 2001 From: Paul Miller Date: Mon, 18 Oct 2021 07:24:55 +0300 Subject: [PATCH 026/219] test: curve-secp256k1, sha512 --- test/test-vectors/curve-secp256k1.ts | 16 +++++++++++++ test/test-vectors/sha512.ts | 34 ++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+) create mode 100644 test/test-vectors/curve-secp256k1.ts create mode 100644 test/test-vectors/sha512.ts diff --git a/test/test-vectors/curve-secp256k1.ts b/test/test-vectors/curve-secp256k1.ts new file mode 100644 index 0000000..3fe5937 --- /dev/null +++ b/test/test-vectors/curve-secp256k1.ts @@ -0,0 +1,16 @@ +import * as secp from "../../src/curve-secp256k1"; +import { deepStrictEqual } from "./assert"; + +describe("curve-secp256k1", () => { + it("should verify msg bb5a...", async () => { + const msg = + "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023"; + const x = 3252872872578928810725465493269682203671229454553002637820453004368632726370n; + const y = 17482644437196207387910659778872952193236850502325156318830589868678978890912n; + const r = 432420386565659656852420866390673177323n; + const s = 115792089237316195423570985008687907852837564279074904382605163141518161494334n; + const pub = new secp.Point(x, y); + const sig = new secp.Signature(r, s); + deepStrictEqual(secp.verify(sig, msg, pub), true); + }); +}); diff --git a/test/test-vectors/sha512.ts b/test/test-vectors/sha512.ts new file mode 100644 index 0000000..6e92c7d --- /dev/null +++ b/test/test-vectors/sha512.ts @@ -0,0 +1,34 @@ +import { sha512 } from "../../src/sha512"; +import { toHex, utf8ToBytes } from "../../src/utils"; +import { deepStrictEqual } from "./assert"; + +const TEST_VECTORS = [ + { + input: utf8ToBytes(""), + output: "cf83e1357eefb8bd f1542850d66d8007 d620e4050b5715dc 83f4a921d36ce9ce 47d0d13c5d85f2b0 ff8318d2877eec2f 63b931bd47417a81 a538327af927da3e" + }, + { + input: utf8ToBytes("abc"), + output: "ddaf35a193617aba cc417349ae204131 12e6fa4e89a97ea2 0a9eeee64b55d39a 2192992a274fc1a8 36ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f" + }, + { + input: utf8ToBytes( + "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" + ), + output: "204a8fc6dda82f0a 0ced7beb8e08a416 57c16ef468b228a8 279be331a703c335 96fd15c13b1b07f9 aa1d3bea57789ca0 31ad85c7a71dd703 54ec631238ca3445" + }, + { + input: utf8ToBytes( + "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu" + ), + output: "8e959b75dae313da 8cf4f72814fc143f 8f7779c6eb9f7fa1 7299aeadb6889018 501d289e4900f7e4 331b99dec4b5433a c7d329eeb6dd2654 5e96e55b874be909" + } +]; + +describe("sha512", function() { + for (const [i, vector] of TEST_VECTORS.entries()) { + it(`Should return the right hash for the test ${i}`, async function() { + deepStrictEqual(toHex(sha512(vector.input)), vector.output.replace(/ /g, '')); + }); + } +}); From af66ea2559ed49e07dde1393d6d791deef704be7 Mon Sep 17 00:00:00 2001 From: Paul Miller Date: Mon, 18 Oct 2021 07:43:46 +0300 Subject: [PATCH 027/219] Lint --- test/test-vectors/sha512.ts | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/test/test-vectors/sha512.ts b/test/test-vectors/sha512.ts index 6e92c7d..0dc2a79 100644 --- a/test/test-vectors/sha512.ts +++ b/test/test-vectors/sha512.ts @@ -5,30 +5,37 @@ import { deepStrictEqual } from "./assert"; const TEST_VECTORS = [ { input: utf8ToBytes(""), - output: "cf83e1357eefb8bd f1542850d66d8007 d620e4050b5715dc 83f4a921d36ce9ce 47d0d13c5d85f2b0 ff8318d2877eec2f 63b931bd47417a81 a538327af927da3e" + output: + "cf83e1357eefb8bd f1542850d66d8007 d620e4050b5715dc 83f4a921d36ce9ce 47d0d13c5d85f2b0 ff8318d2877eec2f 63b931bd47417a81 a538327af927da3e" }, { input: utf8ToBytes("abc"), - output: "ddaf35a193617aba cc417349ae204131 12e6fa4e89a97ea2 0a9eeee64b55d39a 2192992a274fc1a8 36ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f" + output: + "ddaf35a193617aba cc417349ae204131 12e6fa4e89a97ea2 0a9eeee64b55d39a 2192992a274fc1a8 36ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f" }, { input: utf8ToBytes( "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" ), - output: "204a8fc6dda82f0a 0ced7beb8e08a416 57c16ef468b228a8 279be331a703c335 96fd15c13b1b07f9 aa1d3bea57789ca0 31ad85c7a71dd703 54ec631238ca3445" + output: + "204a8fc6dda82f0a 0ced7beb8e08a416 57c16ef468b228a8 279be331a703c335 96fd15c13b1b07f9 aa1d3bea57789ca0 31ad85c7a71dd703 54ec631238ca3445" }, { input: utf8ToBytes( "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu" ), - output: "8e959b75dae313da 8cf4f72814fc143f 8f7779c6eb9f7fa1 7299aeadb6889018 501d289e4900f7e4 331b99dec4b5433a c7d329eeb6dd2654 5e96e55b874be909" + output: + "8e959b75dae313da 8cf4f72814fc143f 8f7779c6eb9f7fa1 7299aeadb6889018 501d289e4900f7e4 331b99dec4b5433a c7d329eeb6dd2654 5e96e55b874be909" } ]; describe("sha512", function() { for (const [i, vector] of TEST_VECTORS.entries()) { it(`Should return the right hash for the test ${i}`, async function() { - deepStrictEqual(toHex(sha512(vector.input)), vector.output.replace(/ /g, '')); + deepStrictEqual( + toHex(sha512(vector.input)), + vector.output.replace(/ /g, "") + ); }); } }); From cc47e538c5d561b6253f7008d31d219fe547f305 Mon Sep 17 00:00:00 2001 From: Paul Miller Date: Mon, 18 Oct 2021 07:46:36 +0300 Subject: [PATCH 028/219] Simplify secp256k1 ops --- src/hdkey.ts | 14 ++++++++------ src/secp256k1.ts | 25 +++++++++++++------------ 2 files changed, 21 insertions(+), 18 deletions(-) diff --git a/src/hdkey.ts b/src/hdkey.ts index 8dd6495..f6d8843 100644 --- a/src/hdkey.ts +++ b/src/hdkey.ts @@ -22,6 +22,11 @@ function numberToBytes(num: bigint): Uint8Array { return hexToBytes(num.toString(16).padStart(64, "0")); } +function modN(a: bigint, b: bigint = secp.CURVE.n): bigint { + const result = a % b; + return result >= 0 ? result : b + result; +} + const MASTER_SECRET = utf8ToBytes("Bitcoin seed"); // Bitcoin hardcoded by default const BITCOIN_VERSIONS: Versions = { private: 0x0488ade4, public: 0x0488b21e }; @@ -203,18 +208,15 @@ export class HDKey { const I = hmac(sha512, this.chainCode, data); const childTweak = bytesToNumber(I.slice(0, 32)); const chainCode = I.slice(32); - if (childTweak > secp.CURVE.n) { + if (!secp.utils.isValidPrivateKey(childTweak)) { throw new Error("Tweak bigger than curve order"); } const child = new HDKey(this.versions); try { // Private parent key -> private child key if (this.privateKey) { - let added = this.privKey! + childTweak; - if (added >= secp.CURVE.n) { - added -= secp.CURVE.n; - } - if (added === 0n) { + const added = modN(this.privKey! + childTweak); + if (!secp.utils.isValidPrivateKey(added)) { throw new Error( "The tweak was out of range or the resulted private key is invalid" ); diff --git a/src/secp256k1.ts b/src/secp256k1.ts index 707056c..5248a77 100644 --- a/src/secp256k1.ts +++ b/src/secp256k1.ts @@ -23,6 +23,7 @@ function mod(a: bigint, b: bigint = secp.CURVE.P): bigint { const result = a % b; return result >= 0 ? result : b + result; } +const ORDER = secp.CURVE.n; type Output = Uint8Array | ((len: number) => Uint8Array); interface Signature { @@ -146,7 +147,7 @@ export function ecdsaVerify( assertBytes(signature, 64); const r = bytesToNumber(signature.slice(0, 32)); const s = bytesToNumber(signature.slice(32, 64)); - if (r >= secp.CURVE.n || s >= secp.CURVE.n) { + if (r >= ORDER || s >= ORDER) { throw new Error("Cannot parse signature"); } let sig; @@ -165,12 +166,12 @@ export function privateKeyTweakAdd( assertBytes(privateKey, 32); assertBytes(tweak, 32); let bn = bytesToNumber(tweak); - if (bn >= secp.CURVE.n) { + if (bn >= ORDER) { throw new Error("Tweak bigger than curve order"); } bn += bytesToNumber(privateKey); - if (bn >= secp.CURVE.n) { - bn -= secp.CURVE.n; + if (bn >= ORDER) { + bn -= ORDER; } if (bn === 0n) { throw new Error( @@ -183,7 +184,7 @@ export function privateKeyTweakAdd( export function privateKeyNegate(privateKey: Uint8Array): Uint8Array { assertBytes(privateKey, 32); - const bn = mod(-bytesToNumber(privateKey), secp.CURVE.n); + const bn = mod(-bytesToNumber(privateKey), ORDER); privateKey.set(hexToBytes(numberToHex(bn))); return privateKey; } @@ -244,7 +245,7 @@ export function publicKeyTweakMul( assertBytes(tweak, 32); assertBool(compressed); const bn = bytesToNumber(tweak); - if (bn <= 0 || bn >= secp.CURVE.n) { + if (bn <= 0 || bn >= ORDER) { throw new Error("Tweak is zero or bigger than curve order"); } const point = secp.Point.fromHex(publicKey).multiply(bn); @@ -258,12 +259,12 @@ export function privateKeyTweakMul( assertBytes(privateKey, 32); assertBytes(tweak, 32); let bn = bytesToNumber(tweak); - if (bn >= secp.CURVE.n) { + if (bn >= ORDER) { throw new Error("Tweak bigger than curve order"); } - bn = mod(bn * bytesToNumber(privateKey), secp.CURVE.n); - if (bn >= secp.CURVE.n) { - bn -= secp.CURVE.n; + bn = mod(bn * bytesToNumber(privateKey), ORDER); + if (bn >= ORDER) { + bn -= ORDER; } if (bn === 0n) { throw new Error( @@ -296,8 +297,8 @@ export function signatureImport( export function signatureNormalize(signature: Uint8Array): Uint8Array { const res = getSignature(signature); - if (res.s > secp.CURVE.n / 2n) { - signature.set(numberToBytes(secp.CURVE.n - res.s), 32); + if (res.s > ORDER / 2n) { + signature.set(numberToBytes(ORDER - res.s), 32); } return signature; } From caf41a9680050ac4b584dc70ea905e688b204048 Mon Sep 17 00:00:00 2001 From: Paul Miller Date: Tue, 19 Oct 2021 22:29:20 +0300 Subject: [PATCH 029/219] Changes as per feedback --- README.md | 44 +-- src/curve-secp256k1.ts | 21 -- src/hdkey.ts | 2 +- src/secp256k1-compat.ts | 355 ++++++++++++++++++++++++ src/secp256k1.ts | 374 ++------------------------ test/test-vectors/curve-secp256k1.ts | 16 -- test/test-vectors/secp256k1-compat.ts | 235 ++++++++++++++++ test/test-vectors/secp256k1.ts | 243 +---------------- 8 files changed, 651 insertions(+), 639 deletions(-) delete mode 100644 src/curve-secp256k1.ts create mode 100644 src/secp256k1-compat.ts delete mode 100644 test/test-vectors/curve-secp256k1.ts create mode 100644 test/test-vectors/secp256k1-compat.ts diff --git a/README.md b/README.md index 40d9eff..43d6020 100644 --- a/README.md +++ b/README.md @@ -26,6 +26,7 @@ The module has been completely rewritten: browsers and node.js. See [Upgrading](#upgrading) 2. We target runtimes with [bigint](https://caniuse.com/bigint) support, which is Chrome 67+, Edge 79+, Firefox 68+, Safari 14+, node.js 10+. If you need to support older runtimes, use `ethereum-cryptography@0.1` + 3. If you've used `secp256k1`, [rename it to `secp256k1-compat`](#legacy-secp256k1-compatibility-layer) - The new module [has not been audited yet](#security), but it's in the process of getting the audit. Use it at your own risk ## Usage @@ -34,10 +35,10 @@ Use NPM / Yarn in node.js / browser: ```bash # NPM -npm install ethereum-cryptography +npm install ethereum-cryptography@next # Yarn -yarn add ethereum-cryptography +yarn add ethereum-cryptography@next ``` See [browser usage](#browser-usage) for information on using the package with major Javascript bundlers. It is @@ -76,6 +77,9 @@ const { createPrivateKeySync, ecdsaSign } = require("ethereum-cryptography/secp2 const { HDKey } = require("ethereum-cryptography/hdkey"); const { generateMnemonic } = require("ethereum-cryptography/bip39"); const { wordlist } = require("ethereum-cryptography/bip39/wordlists/english"); + +// utilities +const { hexToBytes, toHex, utf8ToBytes } = require("ethereum-cryptography/utils"); ``` ## Hashes: SHA256, keccak-256, RIPEMD160, BLAKE2b @@ -101,6 +105,16 @@ const { sha512 } = require("ethereum-cryptography/sha512"); const { keccak256, keccak224, keccak384, keccak512 } = require("ethereum-cryptography/keccak"); const { ripemd160 } = require("ethereum-cryptography/ripemd160"); const { blake2b } = require("ethereum-cryptography/blake2b"); + +sha256(Uint8Array.from([1, 2, 3])) + +// Can be used with strings +const { utf8ToBytes } = require("ethereum-cryptography/utils"); +sha256(utf8ToBytes("abc")) + +// If you need hex +const { toHex } = require("ethereum-cryptography/utils"); +toHex(sha256(utf8ToBytes("abc"))) ``` ## KDFs: PBKDF2, Scrypt @@ -127,13 +141,16 @@ Encoding passwords is a frequent source of errors. Please read before using these submodules. ```js -const { pbkdf2Sync } = require("ethereum-cryptography/pbkdf2"); -console.log(pbkdf2Sync("password", "salt", 131072, 32, "sha256")); +const { pbkdf2 } = require("ethereum-cryptography/pbkdf2"); +const { utf8ToBytes } = require("ethereum-cryptography/utils"); +// Pass Uint8Array, or convert strings to Uint8Array +console.log(await pbkdf2(utf8ToBytes("password"), utf8ToBytes("salt"), 131072, 32, "sha256")); ``` ```js const { scryptSync } = require("ethereum-cryptography/scrypt"); -console.log(scryptSync("password", "salt", 262144, 8, 1, 32)); +const { utf8ToBytes } = require("ethereum-cryptography/utils"); +console.log(await scrypt(utf8ToBytes("password"), utf8ToBytes("salt"), 262144, 8, 1, 32)); ``` ## CSPRNG (Cryptographically strong pseudorandom number generator) @@ -165,7 +182,7 @@ function recoverPublicKey(msgHash: Uint8Array, signature: Uint8Array, recovery: function utils.randomPrivateKey(): Uint8Array; ``` -The `curve-secp256k1` submodule provides a library for elliptic curve operations on +The `secp256k1` submodule provides a library for elliptic curve operations on the curve secp256k1. For detailed documentation, follow [README of `noble-secp256k1`](https://github.com/paulmillr/noble-secp256k1), which the module uses as a backend. secp256k1 private keys need to be cryptographically secure random numbers with @@ -173,7 +190,7 @@ certain caracteristics. If this is not the case, the security of secp256k1 is compromised. We strongly recommend using `utils.randomPrivateKey()` to generate them. ```js -const secp = require("ethereum-cryptography/curve-secp256k1"); +const secp = require("ethereum-cryptography/secp256k1"); (async () => { // You pass either a hex string, or Uint8Array const privateKey = "6b911fd37cdf5c81d4c0adb1ab7fa822ed253ab0ad9aa18d77257c88b29b718e"; @@ -376,19 +393,13 @@ console.log( Using this library with Rollup requires the following plugins: * [`@rollup/plugin-commonjs`](https://www.npmjs.com/package/@rollup/plugin-commonjs) -* [`@rollup/plugin-json`](https://www.npmjs.com/package/@rollup/plugin-json) * [`@rollup/plugin-node-resolve`](https://www.npmjs.com/package/@rollup/plugin-node-resolve) -* [`rollup-plugin-node-builtins`](https://www.npmjs.com/package/rollup-plugin-node-builtins) -* [`rollup-plugin-node-globals`](https://www.npmjs.com/package/rollup-plugin-node-globals) These can be used by setting your `plugins` array like this: ```js plugins: [ commonjs(), - json(), - nodeGlobals(), - nodeBuiltins(), resolve({ browser: true, preferBuiltins: false, @@ -398,14 +409,15 @@ These can be used by setting your `plugins` array like this: ## Legacy secp256k1 compatibility layer -**Note:** do not use this module; it is only for users who upgrade +**Note:** consider using `secp256k1` instead; +This module is only for users who upgraded from ethereum-cryptography v0.1. It could be removed in the future, but we're keeping it around for now, for backwards-compatibility. -The API of `secp256k1` is the same as [secp256k1-node](https://github.com/cryptocoinjs/secp256k1-node): +The API of `secp256k1-compat` is the same as [secp256k1-node](https://github.com/cryptocoinjs/secp256k1-node): ```js -const { createPrivateKeySync, ecdsaSign } = require("ethereum-cryptography/secp256k1"); +const { createPrivateKeySync, ecdsaSign } = require("ethereum-cryptography/secp256k1-compat"); const msgHash = Uint8Array.from( "82ff40c0a986c6a5cfad4ddf4c3aa6996f1a7837f9c398e17e5de5cbd5a12b28", "hex" diff --git a/src/curve-secp256k1.ts b/src/curve-secp256k1.ts deleted file mode 100644 index cba926c..0000000 --- a/src/curve-secp256k1.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { hmac } from "noble-hashes/lib/hmac"; -import { sha256 } from "noble-hashes/lib/sha256"; -import { utils as _utils } from "noble-secp256k1"; -export { - getPublicKey, - sign, - signSync, - verify, - getSharedSecret, - utils, - Point, - Signature, - CURVE -} from "noble-secp256k1"; - -// Enable sync API for noble-secp256k1 -_utils.hmacSha256Sync = (key: Uint8Array, ...messages: Uint8Array[]) => { - const h = hmac.create(sha256, key); - messages.forEach(msg => h.update(msg)); - return h.digest(); -}; diff --git a/src/hdkey.ts b/src/hdkey.ts index f6d8843..cc294af 100644 --- a/src/hdkey.ts +++ b/src/hdkey.ts @@ -4,7 +4,7 @@ import { ripemd160 } from "noble-hashes/lib/ripemd160"; import { sha256 } from "noble-hashes/lib/sha256"; import { sha512 } from "noble-hashes/lib/sha512"; import { bytesToHex } from "noble-hashes/lib/utils"; -import * as secp from "./curve-secp256k1"; +import * as secp from "./secp256k1"; import { assertBytes, concatBytes, diff --git a/src/secp256k1-compat.ts b/src/secp256k1-compat.ts new file mode 100644 index 0000000..0a83fe3 --- /dev/null +++ b/src/secp256k1-compat.ts @@ -0,0 +1,355 @@ +import { sha256 } from "noble-hashes/lib/sha256"; +import * as secp from "./secp256k1"; +import { assertBool, assertBytes, hexToBytes, toHex } from "./utils"; + +// Legacy compatibility layer for elliptic via noble-secp256k1 +// Use `curve-secp256k1` module directly instead + +// Copy-paste from secp256k1, maybe export it? +const bytesToNumber = (bytes: Uint8Array) => hexToNumber(toHex(bytes)); +const numberToHex = (num: number | bigint) => + num.toString(16).padStart(64, "0"); +const numberToBytes = (num: number | bigint) => hexToBytes(numberToHex(num)); + +function hexToNumber(hex: string): bigint { + if (typeof hex !== "string") { + throw new TypeError("hexToNumber: expected string, got " + typeof hex); + } + return BigInt(`0x${hex}`); +} + +// Calculates a modulo b +function mod(a: bigint, b: bigint = secp.CURVE.P): bigint { + const result = a % b; + return result >= 0 ? result : b + result; +} +const ORDER = secp.CURVE.n; + +type Output = Uint8Array | ((len: number) => Uint8Array); +interface Signature { + signature: Uint8Array; + recid: number; +} + +function output( + out: Output = (len: number) => new Uint8Array(len), + length: number, + value?: Uint8Array +) { + if (typeof out === "function") { + out = out(length); + } + assertBytes(out, length); + if (value) { + out.set(value); + } + return out; +} + +function getSignature(signature: Uint8Array) { + assertBytes(signature, 64); + return secp.Signature.fromCompact(signature); +} + +export function createPrivateKeySync(): Uint8Array { + return secp.utils.randomPrivateKey(); +} + +export async function createPrivateKey(): Promise { + return createPrivateKeySync(); +} + +export function privateKeyVerify(privateKey: Uint8Array): boolean { + assertBytes(privateKey, 32); + return secp.utils.isValidPrivateKey(privateKey); +} + +export function publicKeyCreate( + privateKey: Uint8Array, + compressed = true, + out?: Output +): Uint8Array { + assertBytes(privateKey, 32); + assertBool(compressed); + const res = secp.getPublicKey(privateKey, compressed); + return output(out, compressed ? 33 : 65, res); +} + +export function publicKeyVerify(publicKey: Uint8Array): boolean { + assertBytes(publicKey, 33, 65); + try { + secp.Point.fromHex(publicKey); + return true; + } catch (e) { + return false; + } +} + +export function publicKeyConvert( + publicKey: Uint8Array, + compressed = true, + out?: Output +): Uint8Array { + assertBytes(publicKey, 33, 65); + assertBool(compressed); + const res = secp.Point.fromHex(publicKey).toRawBytes(compressed); + return output(out, compressed ? 33 : 65, res); +} + +export function ecdsaSign( + msgHash: Uint8Array, + privateKey: Uint8Array, + options = { noncefn: undefined, data: undefined }, + out?: Output +): Signature { + assertBytes(msgHash, 32); + assertBytes(privateKey, 32); + if (typeof options !== "object" || options === null) { + throw new TypeError("secp256k1.ecdsaSign: options should be object"); + } + // noble-secp256k1 uses hmac instead of hmac-drbg here + if ( + options && + (options.noncefn !== undefined || options.data !== undefined) + ) { + throw new Error("Secp256k1: noncefn && data is unsupported"); + } + const [signature, recid] = secp.signSync(msgHash, privateKey, { + recovered: true, + canonical: true, + der: false + }); + return { signature: output(out, 64, signature), recid }; +} + +export function ecdsaRecover( + signature: Uint8Array, + recid: number, + msgHash: Uint8Array, + compressed = true, + out?: Output +) { + assertBytes(msgHash, 32); + assertBool(compressed); + const sign = getSignature(signature).toHex(); + const point = secp.Point.fromSignature(msgHash, sign, recid); + return output(out, compressed ? 33 : 65, point.toRawBytes(compressed)); +} + +export function ecdsaVerify( + signature: Uint8Array, + msgHash: Uint8Array, + publicKey: Uint8Array +) { + assertBytes(signature, 64); + assertBytes(msgHash, 32); + assertBytes(publicKey, 33, 65); + assertBytes(signature, 64); + const r = bytesToNumber(signature.slice(0, 32)); + const s = bytesToNumber(signature.slice(32, 64)); + if (r >= ORDER || s >= ORDER) { + throw new Error("Cannot parse signature"); + } + let sig; + try { + sig = getSignature(signature); + } catch (error) { + return false; + } + return secp.verify(sig, msgHash, publicKey); +} + +export function privateKeyTweakAdd( + privateKey: Uint8Array, + tweak: Uint8Array +): Uint8Array { + assertBytes(privateKey, 32); + assertBytes(tweak, 32); + let bn = bytesToNumber(tweak); + if (bn >= ORDER) { + throw new Error("Tweak bigger than curve order"); + } + bn += bytesToNumber(privateKey); + if (bn >= ORDER) { + bn -= ORDER; + } + if (bn === 0n) { + throw new Error( + "The tweak was out of range or the resulted private key is invalid" + ); + } + privateKey.set(hexToBytes(numberToHex(bn))); + return privateKey; +} + +export function privateKeyNegate(privateKey: Uint8Array): Uint8Array { + assertBytes(privateKey, 32); + const bn = mod(-bytesToNumber(privateKey), ORDER); + privateKey.set(hexToBytes(numberToHex(bn))); + return privateKey; +} + +export function publicKeyNegate( + publicKey: Uint8Array, + compressed = true, + out?: Output +) { + assertBytes(publicKey, 33, 65); + assertBool(compressed); + const point = secp.Point.fromHex(publicKey).negate(); + return output(out, compressed ? 33 : 65, point.toRawBytes(compressed)); +} + +export function publicKeyCombine( + publicKeys: Uint8Array[], + compressed = true, + out?: Output +) { + if (!Array.isArray(publicKeys) || !publicKeys.length) { + throw new TypeError( + `Expected array with one or more items, not ${publicKeys}` + ); + } + for (const publicKey of publicKeys) { + assertBytes(publicKey, 33, 65); + } + assertBool(compressed); + const combined = publicKeys + .map(pub => secp.Point.fromHex(pub)) + .reduce((res, curr) => res.add(curr), secp.Point.ZERO); + return output(out, compressed ? 33 : 65, combined.toRawBytes(compressed)); +} + +export function publicKeyTweakAdd( + publicKey: Uint8Array, + tweak: Uint8Array, + compressed = true, + out?: Output +) { + assertBytes(publicKey, 33, 65); + assertBytes(tweak, 32); + assertBool(compressed); + const p1 = secp.Point.fromHex(publicKey); + const p2 = secp.Point.fromPrivateKey(tweak); + const point = p1.add(p2); + return output(out, compressed ? 33 : 65, point.toRawBytes(compressed)); +} + +export function publicKeyTweakMul( + publicKey: Uint8Array, + tweak: Uint8Array, + compressed = true, + out?: Output +) { + assertBytes(publicKey, 33, 65); + assertBytes(tweak, 32); + assertBool(compressed); + const bn = bytesToNumber(tweak); + if (bn <= 0 || bn >= ORDER) { + throw new Error("Tweak is zero or bigger than curve order"); + } + const point = secp.Point.fromHex(publicKey).multiply(bn); + return output(out, compressed ? 33 : 65, point.toRawBytes(compressed)); +} + +export function privateKeyTweakMul( + privateKey: Uint8Array, + tweak: Uint8Array +): Uint8Array { + assertBytes(privateKey, 32); + assertBytes(tweak, 32); + let bn = bytesToNumber(tweak); + if (bn >= ORDER) { + throw new Error("Tweak bigger than curve order"); + } + bn = mod(bn * bytesToNumber(privateKey), ORDER); + if (bn >= ORDER) { + bn -= ORDER; + } + if (bn === 0n) { + throw new Error( + "The tweak was out of range or the resulted private key is invalid" + ); + } + privateKey.set(hexToBytes(numberToHex(bn))); + return privateKey; +} +// internal -> DER +export function signatureExport( + signature: Uint8Array, + out?: Output +): Uint8Array { + const res = getSignature(signature).toRawBytes(); + return output(out, 72, getSignature(signature).toRawBytes()).slice( + 0, + res.length + ); +} +// DER -> internal +export function signatureImport( + signature: Uint8Array, + out?: Output +): Uint8Array { + assertBytes(signature); + const sig = secp.Signature.fromDER(signature); + return output(out, 64, hexToBytes(sig.toCompactHex())); +} + +export function signatureNormalize(signature: Uint8Array): Uint8Array { + const res = getSignature(signature); + if (res.s > ORDER / 2n) { + signature.set(numberToBytes(ORDER - res.s), 32); + } + return signature; +} + +export function ecdh( + publicKey: Uint8Array, + privateKey: Uint8Array, + options: { + xbuf?: Uint8Array; + ybuf?: Uint8Array; + data?: Uint8Array; + hashfn?: (x: Uint8Array, y: Uint8Array, data: Uint8Array) => Uint8Array; + } = {}, + out?: Output +) { + assertBytes(publicKey, 33, 65); + assertBytes(privateKey, 32); + if (typeof options !== "object" || options === null) { + throw new TypeError("secp256k1.ecdh: options should be object"); + } + if (options.data !== undefined) { + assertBytes(options.data); + } + const point = secp.Point.fromHex(secp.getSharedSecret(privateKey, publicKey)); + if (options.hashfn === undefined) { + return output(out, 32, sha256(point.toRawBytes(true))); + } + if (typeof options.hashfn !== "function") { + throw new TypeError("secp256k1.ecdh: options.hashfn should be function"); + } + if (options.xbuf !== undefined) { + assertBytes(options.xbuf, 32); + } + if (options.ybuf !== undefined) { + assertBytes(options.ybuf, 32); + } + assertBytes(out as Uint8Array, 32); + const xbuf = options.xbuf || new Uint8Array(32); + xbuf.set(numberToBytes(point.x)); + const ybuf = options.ybuf || new Uint8Array(32); + ybuf.set(numberToBytes(point.y)); + const hash = options.hashfn(xbuf, ybuf, options.data!); + if (!(hash instanceof Uint8Array) || hash.length !== 32) { + throw new Error("secp256k1.ecdh: invalid options.hashfn output"); + } + return output(out, 32, hash); +} + +export function contextRandomize(seed: Uint8Array) { + if (seed !== null) { + assertBytes(seed, 32); + } + // There is no context to randomize +} diff --git a/src/secp256k1.ts b/src/secp256k1.ts index 5248a77..cba926c 100644 --- a/src/secp256k1.ts +++ b/src/secp256k1.ts @@ -1,355 +1,21 @@ +import { hmac } from "noble-hashes/lib/hmac"; import { sha256 } from "noble-hashes/lib/sha256"; -import * as secp from "./curve-secp256k1"; -import { assertBool, assertBytes, hexToBytes, toHex } from "./utils"; - -// Legacy compatibility layer for elliptic via noble-secp256k1 -// Use `curve-secp256k1` module directly instead - -// Copy-paste from secp256k1, maybe export it? -const bytesToNumber = (bytes: Uint8Array) => hexToNumber(toHex(bytes)); -const numberToHex = (num: number | bigint) => - num.toString(16).padStart(64, "0"); -const numberToBytes = (num: number | bigint) => hexToBytes(numberToHex(num)); - -function hexToNumber(hex: string): bigint { - if (typeof hex !== "string") { - throw new TypeError("hexToNumber: expected string, got " + typeof hex); - } - return BigInt(`0x${hex}`); -} - -// Calculates a modulo b -function mod(a: bigint, b: bigint = secp.CURVE.P): bigint { - const result = a % b; - return result >= 0 ? result : b + result; -} -const ORDER = secp.CURVE.n; - -type Output = Uint8Array | ((len: number) => Uint8Array); -interface Signature { - signature: Uint8Array; - recid: number; -} - -function output( - out: Output = (len: number) => new Uint8Array(len), - length: number, - value?: Uint8Array -) { - if (typeof out === "function") { - out = out(length); - } - assertBytes(out, length); - if (value) { - out.set(value); - } - return out; -} - -function getSignature(signature: Uint8Array) { - assertBytes(signature, 64); - return secp.Signature.fromCompact(signature); -} - -export function createPrivateKeySync(): Uint8Array { - return secp.utils.randomPrivateKey(); -} - -export async function createPrivateKey(): Promise { - return createPrivateKeySync(); -} - -export function privateKeyVerify(privateKey: Uint8Array): boolean { - assertBytes(privateKey, 32); - return secp.utils.isValidPrivateKey(privateKey); -} - -export function publicKeyCreate( - privateKey: Uint8Array, - compressed = true, - out?: Output -): Uint8Array { - assertBytes(privateKey, 32); - assertBool(compressed); - const res = secp.getPublicKey(privateKey, compressed); - return output(out, compressed ? 33 : 65, res); -} - -export function publicKeyVerify(publicKey: Uint8Array): boolean { - assertBytes(publicKey, 33, 65); - try { - secp.Point.fromHex(publicKey); - return true; - } catch (e) { - return false; - } -} - -export function publicKeyConvert( - publicKey: Uint8Array, - compressed = true, - out?: Output -): Uint8Array { - assertBytes(publicKey, 33, 65); - assertBool(compressed); - const res = secp.Point.fromHex(publicKey).toRawBytes(compressed); - return output(out, compressed ? 33 : 65, res); -} - -export function ecdsaSign( - msgHash: Uint8Array, - privateKey: Uint8Array, - options = { noncefn: undefined, data: undefined }, - out?: Output -): Signature { - assertBytes(msgHash, 32); - assertBytes(privateKey, 32); - if (typeof options !== "object" || options === null) { - throw new TypeError("secp256k1.ecdsaSign: options should be object"); - } - // noble-secp256k1 uses hmac instead of hmac-drbg here - if ( - options && - (options.noncefn !== undefined || options.data !== undefined) - ) { - throw new Error("Secp256k1: noncefn && data is unsupported"); - } - const [signature, recid] = secp.signSync(msgHash, privateKey, { - recovered: true, - canonical: true, - der: false - }); - return { signature: output(out, 64, signature), recid }; -} - -export function ecdsaRecover( - signature: Uint8Array, - recid: number, - msgHash: Uint8Array, - compressed = true, - out?: Output -) { - assertBytes(msgHash, 32); - assertBool(compressed); - const sign = getSignature(signature).toHex(); - const point = secp.Point.fromSignature(msgHash, sign, recid); - return output(out, compressed ? 33 : 65, point.toRawBytes(compressed)); -} - -export function ecdsaVerify( - signature: Uint8Array, - msgHash: Uint8Array, - publicKey: Uint8Array -) { - assertBytes(signature, 64); - assertBytes(msgHash, 32); - assertBytes(publicKey, 33, 65); - assertBytes(signature, 64); - const r = bytesToNumber(signature.slice(0, 32)); - const s = bytesToNumber(signature.slice(32, 64)); - if (r >= ORDER || s >= ORDER) { - throw new Error("Cannot parse signature"); - } - let sig; - try { - sig = getSignature(signature); - } catch (error) { - return false; - } - return secp.verify(sig, msgHash, publicKey); -} - -export function privateKeyTweakAdd( - privateKey: Uint8Array, - tweak: Uint8Array -): Uint8Array { - assertBytes(privateKey, 32); - assertBytes(tweak, 32); - let bn = bytesToNumber(tweak); - if (bn >= ORDER) { - throw new Error("Tweak bigger than curve order"); - } - bn += bytesToNumber(privateKey); - if (bn >= ORDER) { - bn -= ORDER; - } - if (bn === 0n) { - throw new Error( - "The tweak was out of range or the resulted private key is invalid" - ); - } - privateKey.set(hexToBytes(numberToHex(bn))); - return privateKey; -} - -export function privateKeyNegate(privateKey: Uint8Array): Uint8Array { - assertBytes(privateKey, 32); - const bn = mod(-bytesToNumber(privateKey), ORDER); - privateKey.set(hexToBytes(numberToHex(bn))); - return privateKey; -} - -export function publicKeyNegate( - publicKey: Uint8Array, - compressed = true, - out?: Output -) { - assertBytes(publicKey, 33, 65); - assertBool(compressed); - const point = secp.Point.fromHex(publicKey).negate(); - return output(out, compressed ? 33 : 65, point.toRawBytes(compressed)); -} - -export function publicKeyCombine( - publicKeys: Uint8Array[], - compressed = true, - out?: Output -) { - if (!Array.isArray(publicKeys) || !publicKeys.length) { - throw new TypeError( - `Expected array with one or more items, not ${publicKeys}` - ); - } - for (const publicKey of publicKeys) { - assertBytes(publicKey, 33, 65); - } - assertBool(compressed); - const combined = publicKeys - .map(pub => secp.Point.fromHex(pub)) - .reduce((res, curr) => res.add(curr), secp.Point.ZERO); - return output(out, compressed ? 33 : 65, combined.toRawBytes(compressed)); -} - -export function publicKeyTweakAdd( - publicKey: Uint8Array, - tweak: Uint8Array, - compressed = true, - out?: Output -) { - assertBytes(publicKey, 33, 65); - assertBytes(tweak, 32); - assertBool(compressed); - const p1 = secp.Point.fromHex(publicKey); - const p2 = secp.Point.fromPrivateKey(tweak); - const point = p1.add(p2); - return output(out, compressed ? 33 : 65, point.toRawBytes(compressed)); -} - -export function publicKeyTweakMul( - publicKey: Uint8Array, - tweak: Uint8Array, - compressed = true, - out?: Output -) { - assertBytes(publicKey, 33, 65); - assertBytes(tweak, 32); - assertBool(compressed); - const bn = bytesToNumber(tweak); - if (bn <= 0 || bn >= ORDER) { - throw new Error("Tweak is zero or bigger than curve order"); - } - const point = secp.Point.fromHex(publicKey).multiply(bn); - return output(out, compressed ? 33 : 65, point.toRawBytes(compressed)); -} - -export function privateKeyTweakMul( - privateKey: Uint8Array, - tweak: Uint8Array -): Uint8Array { - assertBytes(privateKey, 32); - assertBytes(tweak, 32); - let bn = bytesToNumber(tweak); - if (bn >= ORDER) { - throw new Error("Tweak bigger than curve order"); - } - bn = mod(bn * bytesToNumber(privateKey), ORDER); - if (bn >= ORDER) { - bn -= ORDER; - } - if (bn === 0n) { - throw new Error( - "The tweak was out of range or the resulted private key is invalid" - ); - } - privateKey.set(hexToBytes(numberToHex(bn))); - return privateKey; -} -// internal -> DER -export function signatureExport( - signature: Uint8Array, - out?: Output -): Uint8Array { - const res = getSignature(signature).toRawBytes(); - return output(out, 72, getSignature(signature).toRawBytes()).slice( - 0, - res.length - ); -} -// DER -> internal -export function signatureImport( - signature: Uint8Array, - out?: Output -): Uint8Array { - assertBytes(signature); - const sig = secp.Signature.fromDER(signature); - return output(out, 64, hexToBytes(sig.toCompactHex())); -} - -export function signatureNormalize(signature: Uint8Array): Uint8Array { - const res = getSignature(signature); - if (res.s > ORDER / 2n) { - signature.set(numberToBytes(ORDER - res.s), 32); - } - return signature; -} - -export function ecdh( - publicKey: Uint8Array, - privateKey: Uint8Array, - options: { - xbuf?: Uint8Array; - ybuf?: Uint8Array; - data?: Uint8Array; - hashfn?: (x: Uint8Array, y: Uint8Array, data: Uint8Array) => Uint8Array; - } = {}, - out?: Output -) { - assertBytes(publicKey, 33, 65); - assertBytes(privateKey, 32); - if (typeof options !== "object" || options === null) { - throw new TypeError("secp256k1.ecdh: options should be object"); - } - if (options.data !== undefined) { - assertBytes(options.data); - } - const point = secp.Point.fromHex(secp.getSharedSecret(privateKey, publicKey)); - if (options.hashfn === undefined) { - return output(out, 32, sha256(point.toRawBytes(true))); - } - if (typeof options.hashfn !== "function") { - throw new TypeError("secp256k1.ecdh: options.hashfn should be function"); - } - if (options.xbuf !== undefined) { - assertBytes(options.xbuf, 32); - } - if (options.ybuf !== undefined) { - assertBytes(options.ybuf, 32); - } - assertBytes(out as Uint8Array, 32); - const xbuf = options.xbuf || new Uint8Array(32); - xbuf.set(numberToBytes(point.x)); - const ybuf = options.ybuf || new Uint8Array(32); - ybuf.set(numberToBytes(point.y)); - const hash = options.hashfn(xbuf, ybuf, options.data!); - if (!(hash instanceof Uint8Array) || hash.length !== 32) { - throw new Error("secp256k1.ecdh: invalid options.hashfn output"); - } - return output(out, 32, hash); -} - -export function contextRandomize(seed: Uint8Array) { - if (seed !== null) { - assertBytes(seed, 32); - } - // There is no context to randomize -} +import { utils as _utils } from "noble-secp256k1"; +export { + getPublicKey, + sign, + signSync, + verify, + getSharedSecret, + utils, + Point, + Signature, + CURVE +} from "noble-secp256k1"; + +// Enable sync API for noble-secp256k1 +_utils.hmacSha256Sync = (key: Uint8Array, ...messages: Uint8Array[]) => { + const h = hmac.create(sha256, key); + messages.forEach(msg => h.update(msg)); + return h.digest(); +}; diff --git a/test/test-vectors/curve-secp256k1.ts b/test/test-vectors/curve-secp256k1.ts deleted file mode 100644 index 3fe5937..0000000 --- a/test/test-vectors/curve-secp256k1.ts +++ /dev/null @@ -1,16 +0,0 @@ -import * as secp from "../../src/curve-secp256k1"; -import { deepStrictEqual } from "./assert"; - -describe("curve-secp256k1", () => { - it("should verify msg bb5a...", async () => { - const msg = - "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023"; - const x = 3252872872578928810725465493269682203671229454553002637820453004368632726370n; - const y = 17482644437196207387910659778872952193236850502325156318830589868678978890912n; - const r = 432420386565659656852420866390673177323n; - const s = 115792089237316195423570985008687907852837564279074904382605163141518161494334n; - const pub = new secp.Point(x, y); - const sig = new secp.Signature(r, s); - deepStrictEqual(secp.verify(sig, msg, pub), true); - }); -}); diff --git a/test/test-vectors/secp256k1-compat.ts b/test/test-vectors/secp256k1-compat.ts new file mode 100644 index 0000000..8616a67 --- /dev/null +++ b/test/test-vectors/secp256k1-compat.ts @@ -0,0 +1,235 @@ +import * as secp from "../../src/secp256k1-compat"; +import { sha256 } from "../../src/sha256"; +import { concatBytes, hexToBytes, toHex } from "../../src/utils"; +import { deepStrictEqual, throws } from "./assert"; +import { VECTORS } from "./secp256k1_lib_vectors"; + +describe("secp256k1", function() { + it("should create valid private keys", async function() { + const asyncPk = await secp.createPrivateKey(); + const syncPk = secp.createPrivateKeySync(); + + deepStrictEqual(secp.privateKeyVerify(asyncPk), true); + deepStrictEqual(secp.privateKeyVerify(syncPk), true); + }); + + it("Should sign correctly", function() { + // This test has been adapted from ethereumjs-util + // https://github.com/ethereumjs/ethereumjs-util/blob/3b1085059194b02354177d334f89cd82a5187883/test/index.js#L531 + const msgHash = hexToBytes( + "82ff40c0a986c6a5cfad4ddf4c3aa6996f1a7837f9c398e17e5de5cbd5a12b28" + ); + const privateKey = hexToBytes( + "3c9229289a6125f7fdf1885a77bb12c37a8d3b4962d936f7e3084dece32a3ca1" + ); + const signature = secp.ecdsaSign(msgHash, privateKey); + const sig = { + r: signature.signature.slice(0, 32), + s: signature.signature.slice(32, 64), + v: signature.recid + }; + deepStrictEqual( + secp.signatureImport(secp.signatureExport(signature.signature)), + signature.signature + ); + deepStrictEqual( + sig.r, + hexToBytes( + "99e71a99cb2270b8cac5254f9e99b6210c6c10224a1579cf389ef88b20a1abe9" + ) + ); + deepStrictEqual( + sig.s, + hexToBytes( + "129ff05af364204442bdb53ab6f18a99ab48acc9326fa689f228040429e3ca66" + ) + ); + deepStrictEqual(sig.v, 0); + }); + + it("Should recover signatures correctly", function() { + const echash = hexToBytes( + "82ff40c0a986c6a5cfad4ddf4c3aa6996f1a7837f9c398e17e5de5cbd5a12b28" + ); + const recid = 0; + const r = hexToBytes( + "99e71a99cb2270b8cac5254f9e99b6210c6c10224a1579cf389ef88b20a1abe9" + ); + const s = hexToBytes( + "129ff05af364204442bdb53ab6f18a99ab48acc9326fa689f228040429e3ca66" + ); + const expected = hexToBytes( + "b4ac68eff3a82d86db5f0489d66f91707e99943bf796ae6a2dcb2205c9522fa7915428b5ac3d3b9291e62142e7246d85ad54504fabbdb2bae5795161f8ddf259" + ); + const signature = concatBytes(r, s); + const senderPubKey = secp.ecdsaRecover(signature, recid, echash); + const recovered = secp.publicKeyConvert(senderPubKey, false).slice(1); + deepStrictEqual(recovered, expected); + deepStrictEqual( + secp.signatureImport(secp.signatureExport(signature)), + signature + ); + }); + it("ecdh with hashfn", () => { + /* GENERATED BY: + const secp256k1 = require('secp256k1'); + const crypto = require('crypto'); + const privateKey = hexToBytes('3c9229289a6125f7fdf1885a77bb12c37a8d3b4962d936f7e3084dece32a3ca1'); + const publicKey = hexToBytes( + '04b4ac68eff3a82d86db5f0489d66f91707e99943bf796ae6a2dcb2205c9522fa7915428b5ac3d3b9291e62142e7246d85ad54504fabbdb2bae5795161f8ddf259' + ); + const output = new Uint8Array(32); + const output2 = new Uint8Array(33); + const xbuf = new Uint8Array(32); + const ybuf = new Uint8Array(32); + const hashfn = (x, y, data) => + crypto.createHash('sha256').update(x).update(y).update(data).digest(); + + const hashfn2 = (x, y, data) => new Uint8Array(33); + const data = new Uint8Array([1, 2, 3, 4, 5]); + // 9461b13c2191424a2adafc45f8043504454dc37199b73a999bd12463b6904eeb + console.log('1', toHex(secp256k1.ecdh(publicKey, privateKey, {}))); + // 9461b13c2191424a2adafc45f8043504454dc37199b73a999bd12463b6904eeb + console.log('2', toHex(secp256k1.ecdh(publicKey, privateKey, { data }))); + // Error: Expected output to be an Uint8Array + // console.log('3', toHex(secp256k1.ecdh(publicKey, privateKey, { data, hashfn }))); + // Error: Scalar was invalid (zero or overflow) + // console.log('4', toHex(secp256k1.ecdh(publicKey, privateKey, { data, hashfn }, output2))); + // 6945269332a7e162866138faaffc09636e78ca742edbb555a2c274f7446cf6fb + console.log('4', toHex(secp256k1.ecdh(publicKey, privateKey, { data, hashfn }, output))); + // 6945269332a7e162866138faaffc09636e78ca742edbb555a2c274f7446cf6fb + console.log('4.1', toHex(output)); + // 6945269332a7e162866138faaffc09636e78ca742edbb555a2c274f7446cf6fb + console.log( + '5', + toHex(secp256k1.ecdh(publicKey, privateKey, { data, hashfn, xbuf, ybuf }, output)) + ); + // 6945269332a7e162866138faaffc09636e78ca742edbb555a2c274f7446cf6fb + console.log('5.1', toHex(output)); + // 8b2983e19282e35890fa04abc0ca4a1981723c50413db91a1387c43caae4888f + console.log('5.2', toHex(xbuf)); + // 6a4ee6fcc9e1403ab90236594278dfe158cd79608f4434f27506c5dd39776f97 + console.log('5.3', toHex(ybuf)); + // Error: Scalar was invalid (zero or overflow) + // console.log( + // '6', + // toHex(secp256k1.ecdh(publicKey, privateKey, { data, hashfn: hashfn2, xbuf, ybuf }, output)) + // ); + */ + const privateKey = hexToBytes( + "3c9229289a6125f7fdf1885a77bb12c37a8d3b4962d936f7e3084dece32a3ca1" + ); + const publicKey = hexToBytes( + "04b4ac68eff3a82d86db5f0489d66f91707e99943bf796ae6a2dcb2205c9522fa7915428b5ac3d3b9291e62142e7246d85ad54504fabbdb2bae5795161f8ddf259" + ); + const output = new Uint8Array(32); + const output2 = new Uint8Array(33); + const xbuf = new Uint8Array(32); + const ybuf = new Uint8Array(32); + const hashfn = (x: Uint8Array, y: Uint8Array, data: Uint8Array) => + sha256(concatBytes(x, y, data)); + const hashfn2 = (x: Uint8Array, y: Uint8Array, data: Uint8Array) => + new Uint8Array(33); + const d = new Uint8Array([1, 2, 3, 4, 5]); + + const exp1 = + "9461b13c2191424a2adafc45f8043504454dc37199b73a999bd12463b6904eeb"; + const exp2 = + "6945269332a7e162866138faaffc09636e78ca742edbb555a2c274f7446cf6fb"; + deepStrictEqual(toHex(secp.ecdh(publicKey, privateKey, {})), exp1); + deepStrictEqual(toHex(secp.ecdh(publicKey, privateKey, { data: d })), exp1); + throws(() => secp.ecdh(publicKey, privateKey, { data: d, hashfn })); + throws(() => + secp.ecdh(publicKey, privateKey, { data: d, hashfn }, output2) + ); + deepStrictEqual( + toHex(secp.ecdh(publicKey, privateKey, { data: d, hashfn }, output)), + exp2 + ); + deepStrictEqual(toHex(output), exp2); + deepStrictEqual( + toHex( + secp.ecdh( + publicKey, + privateKey, + { data: d, hashfn, xbuf, ybuf }, + output + ) + ), + exp2 + ); + deepStrictEqual(toHex(output), exp2); + deepStrictEqual( + toHex(xbuf), + "8b2983e19282e35890fa04abc0ca4a1981723c50413db91a1387c43caae4888f" + ); + deepStrictEqual( + toHex(ybuf), + "6a4ee6fcc9e1403ab90236594278dfe158cd79608f4434f27506c5dd39776f97" + ); + throws(() => + secp.ecdh( + publicKey, + privateKey, + { data: d, hashfn: hashfn2, xbuf, ybuf }, + output + ) + ); + }); + + describe("Test vectors against library", () => { + const unserialize = (obj: any): any => { + if (Array.isArray(obj)) { + return obj.map(i => unserialize(i)); + } + if (typeof obj === "object" && obj !== null) { + if (obj.__BigInt__) { + return BigInt(`0x${obj.__BigInt__}`); + } else if (obj.__Buffer__) { + return hexToBytes(obj.__Buffer__); + } else if (obj.__Bytes__) { + return hexToBytes(obj.__Bytes__); + } + const res: Record = {}; + for (const key of Object.keys(obj)) { + res[key] = unserialize(obj[key]); + } + return res; + } + return obj; + }; + const genTest = (vectors: any, name: string, fn: any) => { + for (let i = 0; i < vectors[name].length; i++) { + const vector = vectors[name][i]; + it(`${name} (${i})${vector.err ? ` ERR: ${vector.err}` : ""}`, () => { + if (vector.err) { + throws(() => fn(...vector.args)); + } else { + deepStrictEqual(fn(...vector.args), vector.res); + } + deepStrictEqual(vector.args, vector.argsAfter); + }); + } + }; + const genTests = ( + vectors: Record, + library: Record + ) => { + for (const k of Object.keys(vectors)) { + const path = k.split("."); + let cur = library; + for (const i of path) { + if (!cur || typeof cur !== "object") { + throw new Error(`genTests: not object: ${k}, ${i}, ${typeof cur}`); + } + cur = cur[i]; + } + if (typeof cur !== "function") { + throw new Error(`genTests: not function ${k}`); + } + genTest(vectors, k, cur); + } + }; + genTests(unserialize(VECTORS), { secp256k1: secp }); + }); +}); diff --git a/test/test-vectors/secp256k1.ts b/test/test-vectors/secp256k1.ts index a717333..7092932 100644 --- a/test/test-vectors/secp256k1.ts +++ b/test/test-vectors/secp256k1.ts @@ -1,235 +1,16 @@ import * as secp from "../../src/secp256k1"; -import { sha256 } from "../../src/sha256"; -import { concatBytes, hexToBytes, toHex } from "../../src/utils"; -import { deepStrictEqual, throws } from "./assert"; -import { VECTORS } from "./secp256k1_lib_vectors"; +import { deepStrictEqual } from "./assert"; -describe("secp256k1", function() { - it("should create valid private keys", async function() { - const asyncPk = await secp.createPrivateKey(); - const syncPk = secp.createPrivateKeySync(); - - deepStrictEqual(secp.privateKeyVerify(asyncPk), true); - deepStrictEqual(secp.privateKeyVerify(syncPk), true); - }); - - it("Should sign correctly", function() { - // This test has been adapted from ethereumjs-util - // https://github.com/ethereumjs/ethereumjs-util/blob/3b1085059194b02354177d334f89cd82a5187883/test/index.js#L531 - const msgHash = hexToBytes( - "82ff40c0a986c6a5cfad4ddf4c3aa6996f1a7837f9c398e17e5de5cbd5a12b28" - ); - const privateKey = hexToBytes( - "3c9229289a6125f7fdf1885a77bb12c37a8d3b4962d936f7e3084dece32a3ca1" - ); - const signature = secp.ecdsaSign(msgHash, privateKey); - const sig = { - r: signature.signature.slice(0, 32), - s: signature.signature.slice(32, 64), - v: signature.recid - }; - deepStrictEqual( - secp.signatureImport(secp.signatureExport(signature.signature)), - signature.signature - ); - deepStrictEqual( - sig.r, - hexToBytes( - "99e71a99cb2270b8cac5254f9e99b6210c6c10224a1579cf389ef88b20a1abe9" - ) - ); - deepStrictEqual( - sig.s, - hexToBytes( - "129ff05af364204442bdb53ab6f18a99ab48acc9326fa689f228040429e3ca66" - ) - ); - deepStrictEqual(sig.v, 0); - }); - - it("Should recover signatures correctly", function() { - const echash = hexToBytes( - "82ff40c0a986c6a5cfad4ddf4c3aa6996f1a7837f9c398e17e5de5cbd5a12b28" - ); - const recid = 0; - const r = hexToBytes( - "99e71a99cb2270b8cac5254f9e99b6210c6c10224a1579cf389ef88b20a1abe9" - ); - const s = hexToBytes( - "129ff05af364204442bdb53ab6f18a99ab48acc9326fa689f228040429e3ca66" - ); - const expected = hexToBytes( - "b4ac68eff3a82d86db5f0489d66f91707e99943bf796ae6a2dcb2205c9522fa7915428b5ac3d3b9291e62142e7246d85ad54504fabbdb2bae5795161f8ddf259" - ); - const signature = concatBytes(r, s); - const senderPubKey = secp.ecdsaRecover(signature, recid, echash); - const recovered = secp.publicKeyConvert(senderPubKey, false).slice(1); - deepStrictEqual(recovered, expected); - deepStrictEqual( - secp.signatureImport(secp.signatureExport(signature)), - signature - ); - }); - it("ecdh with hashfn", () => { - /* GENERATED BY: - const secp256k1 = require('secp256k1'); - const crypto = require('crypto'); - const privateKey = hexToBytes('3c9229289a6125f7fdf1885a77bb12c37a8d3b4962d936f7e3084dece32a3ca1'); - const publicKey = hexToBytes( - '04b4ac68eff3a82d86db5f0489d66f91707e99943bf796ae6a2dcb2205c9522fa7915428b5ac3d3b9291e62142e7246d85ad54504fabbdb2bae5795161f8ddf259' - ); - const output = new Uint8Array(32); - const output2 = new Uint8Array(33); - const xbuf = new Uint8Array(32); - const ybuf = new Uint8Array(32); - const hashfn = (x, y, data) => - crypto.createHash('sha256').update(x).update(y).update(data).digest(); - - const hashfn2 = (x, y, data) => new Uint8Array(33); - const data = new Uint8Array([1, 2, 3, 4, 5]); - // 9461b13c2191424a2adafc45f8043504454dc37199b73a999bd12463b6904eeb - console.log('1', toHex(secp256k1.ecdh(publicKey, privateKey, {}))); - // 9461b13c2191424a2adafc45f8043504454dc37199b73a999bd12463b6904eeb - console.log('2', toHex(secp256k1.ecdh(publicKey, privateKey, { data }))); - // Error: Expected output to be an Uint8Array - // console.log('3', toHex(secp256k1.ecdh(publicKey, privateKey, { data, hashfn }))); - // Error: Scalar was invalid (zero or overflow) - // console.log('4', toHex(secp256k1.ecdh(publicKey, privateKey, { data, hashfn }, output2))); - // 6945269332a7e162866138faaffc09636e78ca742edbb555a2c274f7446cf6fb - console.log('4', toHex(secp256k1.ecdh(publicKey, privateKey, { data, hashfn }, output))); - // 6945269332a7e162866138faaffc09636e78ca742edbb555a2c274f7446cf6fb - console.log('4.1', toHex(output)); - // 6945269332a7e162866138faaffc09636e78ca742edbb555a2c274f7446cf6fb - console.log( - '5', - toHex(secp256k1.ecdh(publicKey, privateKey, { data, hashfn, xbuf, ybuf }, output)) - ); - // 6945269332a7e162866138faaffc09636e78ca742edbb555a2c274f7446cf6fb - console.log('5.1', toHex(output)); - // 8b2983e19282e35890fa04abc0ca4a1981723c50413db91a1387c43caae4888f - console.log('5.2', toHex(xbuf)); - // 6a4ee6fcc9e1403ab90236594278dfe158cd79608f4434f27506c5dd39776f97 - console.log('5.3', toHex(ybuf)); - // Error: Scalar was invalid (zero or overflow) - // console.log( - // '6', - // toHex(secp256k1.ecdh(publicKey, privateKey, { data, hashfn: hashfn2, xbuf, ybuf }, output)) - // ); - */ - const privateKey = hexToBytes( - "3c9229289a6125f7fdf1885a77bb12c37a8d3b4962d936f7e3084dece32a3ca1" - ); - const publicKey = hexToBytes( - "04b4ac68eff3a82d86db5f0489d66f91707e99943bf796ae6a2dcb2205c9522fa7915428b5ac3d3b9291e62142e7246d85ad54504fabbdb2bae5795161f8ddf259" - ); - const output = new Uint8Array(32); - const output2 = new Uint8Array(33); - const xbuf = new Uint8Array(32); - const ybuf = new Uint8Array(32); - const hashfn = (x: Uint8Array, y: Uint8Array, data: Uint8Array) => - sha256(concatBytes(x, y, data)); - const hashfn2 = (x: Uint8Array, y: Uint8Array, data: Uint8Array) => - new Uint8Array(33); - const d = new Uint8Array([1, 2, 3, 4, 5]); - - const exp1 = - "9461b13c2191424a2adafc45f8043504454dc37199b73a999bd12463b6904eeb"; - const exp2 = - "6945269332a7e162866138faaffc09636e78ca742edbb555a2c274f7446cf6fb"; - deepStrictEqual(toHex(secp.ecdh(publicKey, privateKey, {})), exp1); - deepStrictEqual(toHex(secp.ecdh(publicKey, privateKey, { data: d })), exp1); - throws(() => secp.ecdh(publicKey, privateKey, { data: d, hashfn })); - throws(() => - secp.ecdh(publicKey, privateKey, { data: d, hashfn }, output2) - ); - deepStrictEqual( - toHex(secp.ecdh(publicKey, privateKey, { data: d, hashfn }, output)), - exp2 - ); - deepStrictEqual(toHex(output), exp2); - deepStrictEqual( - toHex( - secp.ecdh( - publicKey, - privateKey, - { data: d, hashfn, xbuf, ybuf }, - output - ) - ), - exp2 - ); - deepStrictEqual(toHex(output), exp2); - deepStrictEqual( - toHex(xbuf), - "8b2983e19282e35890fa04abc0ca4a1981723c50413db91a1387c43caae4888f" - ); - deepStrictEqual( - toHex(ybuf), - "6a4ee6fcc9e1403ab90236594278dfe158cd79608f4434f27506c5dd39776f97" - ); - throws(() => - secp.ecdh( - publicKey, - privateKey, - { data: d, hashfn: hashfn2, xbuf, ybuf }, - output - ) - ); - }); - - describe("Test vectors against library", () => { - const unserialize = (obj: any): any => { - if (Array.isArray(obj)) { - return obj.map(i => unserialize(i)); - } - if (typeof obj === "object" && obj !== null) { - if (obj.__BigInt__) { - return BigInt(`0x${obj.__BigInt__}`); - } else if (obj.__Buffer__) { - return hexToBytes(obj.__Buffer__); - } else if (obj.__Bytes__) { - return hexToBytes(obj.__Bytes__); - } - const res: Record = {}; - for (const key of Object.keys(obj)) { - res[key] = unserialize(obj[key]); - } - return res; - } - return obj; - }; - const genTest = (vectors: any, name: string, fn: any) => { - for (let i = 0; i < vectors[name].length; i++) { - const vector = vectors[name][i]; - it(`${name} (${i})${vector.err ? ` ERR: ${vector.err}` : ""}`, () => { - if (vector.err) { - throws(() => fn(...vector.args)); - } else { - deepStrictEqual(fn(...vector.args), vector.res); - } - deepStrictEqual(vector.args, vector.argsAfter); - }); - } - }; - const genTests = ( - vectors: Record, - library: Record - ) => { - for (const k of Object.keys(vectors)) { - const path = k.split("."); - let cur = library; - for (const i of path) { - if (!cur || typeof cur !== "object") { - throw new Error(`genTests: not object: ${k}, ${i}, ${typeof cur}`); - } - cur = cur[i]; - } - if (typeof cur !== "function") { - throw new Error(`genTests: not function ${k}`); - } - genTest(vectors, k, cur); - } - }; - genTests(unserialize(VECTORS), { secp256k1: secp }); +describe("curve-secp256k1", () => { + it("should verify msg bb5a...", async () => { + const msg = + "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023"; + const x = 3252872872578928810725465493269682203671229454553002637820453004368632726370n; + const y = 17482644437196207387910659778872952193236850502325156318830589868678978890912n; + const r = 432420386565659656852420866390673177323n; + const s = 115792089237316195423570985008687907852837564279074904382605163141518161494334n; + const pub = new secp.Point(x, y); + const sig = new secp.Signature(r, s); + deepStrictEqual(secp.verify(sig, msg, pub), true); }); }); From b0b983cec4f878f56ee63d3c75c48b0ca41f096c Mon Sep 17 00:00:00 2001 From: Paul Miller Date: Tue, 19 Oct 2021 22:35:02 +0300 Subject: [PATCH 030/219] hdkey copyright --- README.md | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/README.md b/README.md index 43d6020..7555b92 100644 --- a/README.md +++ b/README.md @@ -249,6 +249,7 @@ It has almost the exact same API than the version `1.x` of [`hdkey` from cryptocoinjs](https://github.com/cryptocoinjs/hdkey), but it's backed by this package's primitives, and has built-in TypeScript types. Its only difference is that it has to be be used with a named import. +The implementation is [loosely based on hdkey, which has MIT License](#LICENSE). ```js const { HDKey } = require("ethereum-cryptography/hdkey"); @@ -477,6 +478,29 @@ Copyright (c) 2021 Patricio Palladino, Paul Miller, ethereum-cryptography contri See [LICENSE](./LICENSE) file. +`hdkey` is loosely based on [hdkey](https://github.com/cryptocoinjs/hdkey), +which has [MIT License](https://github.com/cryptocoinjs/hdkey/blob/3f3c0b5cedb98f971835b5116ebea05b3c09422a/LICENSE) + +Copyright (c) 2018 cryptocoinjs + +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. + [1]: https://img.shields.io/npm/v/ethereum-cryptography.svg [2]: https://www.npmjs.com/package/ethereum-cryptography [3]: https://img.shields.io/travis/ethereum/js-ethereum-cryptography/master.svg?label=Travis%20CI From 66b4575d6965a5da22f3f97d37a7f1ed0d0a8746 Mon Sep 17 00:00:00 2001 From: Paul Miller Date: Tue, 19 Oct 2021 22:36:24 +0300 Subject: [PATCH 031/219] Fix license --- README.md | 20 +------------------- 1 file changed, 1 insertion(+), 19 deletions(-) diff --git a/README.md b/README.md index 7555b92..540ed8e 100644 --- a/README.md +++ b/README.md @@ -479,28 +479,10 @@ Copyright (c) 2021 Patricio Palladino, Paul Miller, ethereum-cryptography contri See [LICENSE](./LICENSE) file. `hdkey` is loosely based on [hdkey](https://github.com/cryptocoinjs/hdkey), -which has [MIT License](https://github.com/cryptocoinjs/hdkey/blob/3f3c0b5cedb98f971835b5116ebea05b3c09422a/LICENSE) +which had [MIT License](https://github.com/cryptocoinjs/hdkey/blob/3f3c0b5cedb98f971835b5116ebea05b3c09422a/LICENSE) Copyright (c) 2018 cryptocoinjs -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. - [1]: https://img.shields.io/npm/v/ethereum-cryptography.svg [2]: https://www.npmjs.com/package/ethereum-cryptography [3]: https://img.shields.io/travis/ethereum/js-ethereum-cryptography/master.svg?label=Travis%20CI From e93a147940ca12a4b1fb460240c968a294e8bed5 Mon Sep 17 00:00:00 2001 From: Gus Date: Sat, 6 Nov 2021 21:22:18 +0100 Subject: [PATCH 032/219] Update README.md Change AES Encryption functions return type to Promise (typo that costed me some troubles ^^) --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 540ed8e..5c0e694 100644 --- a/README.md +++ b/README.md @@ -302,8 +302,8 @@ The word lists are exported as a `wordlist` variable in each of these submodules ## AES Encryption ```ts -function encrypt(msg: Uint8Array, key: Uint8Array, iv: Uint8Array, mode = "aes-128-ctr", pkcs7PaddingEnabled = true): Uint8Array; -function decrypt(cypherText: Uint8Array, key: Uint8Array, iv: Uint8Array, mode = "aes-128-ctr", pkcs7PaddingEnabled = true): Uint8Array +function encrypt(msg: Uint8Array, key: Uint8Array, iv: Uint8Array, mode = "aes-128-ctr", pkcs7PaddingEnabled = true): Promise; +function decrypt(cypherText: Uint8Array, key: Uint8Array, iv: Uint8Array, mode = "aes-128-ctr", pkcs7PaddingEnabled = true): Promise; ``` The `aes` submodule contains encryption and decryption functions implementing From 4182b1d023d1024240f3d30d9e073dec8f6fba4f Mon Sep 17 00:00:00 2001 From: Paul Miller Date: Sun, 7 Nov 2021 23:18:40 +0200 Subject: [PATCH 033/219] Update to new noble packages --- package.json | 6 +++--- src/bip39/index.ts | 8 ++++---- src/blake2b.ts | 2 +- src/hdkey.ts | 10 +++++----- src/keccak.ts | 2 +- src/pbkdf2.ts | 6 +++--- src/ripemd160.ts | 2 +- src/scrypt.ts | 2 +- src/secp256k1-compat.ts | 2 +- src/secp256k1.ts | 8 ++++---- src/sha256.ts | 2 +- src/sha512.ts | 2 +- src/utils.ts | 2 +- test/test-vectors/hdkey.ts | 2 +- 14 files changed, 28 insertions(+), 28 deletions(-) diff --git a/package.json b/package.json index 8e86c79..b64a2f6 100644 --- a/package.json +++ b/package.json @@ -46,9 +46,9 @@ "*.d.ts.map" ], "dependencies": { - "noble-hashes": "^0.2.1", "micro-base": "^0.9.0", - "noble-secp256k1": "^1.2.14" + "@noble/hashes": "^0.4.1", + "@noble/secp256k1": "^1.3.0" }, "browser": { "crypto": false @@ -102,4 +102,4 @@ "context": "browser" } } -} +} \ No newline at end of file diff --git a/src/bip39/index.ts b/src/bip39/index.ts index 084cf45..e3109b8 100644 --- a/src/bip39/index.ts +++ b/src/bip39/index.ts @@ -1,8 +1,8 @@ import { utils as baseUtils } from "micro-base"; -import { pbkdf2, pbkdf2Async } from "noble-hashes/lib/pbkdf2"; -import { sha256 } from "noble-hashes/lib/sha256"; -import { sha512 } from "noble-hashes/lib/sha512"; -import { assertNumber } from "noble-hashes/lib/utils"; +import { pbkdf2, pbkdf2Async } from "@noble/hashes/lib/pbkdf2"; +import { sha256 } from "@noble/hashes/lib/sha256"; +import { sha512 } from "@noble/hashes/lib/sha512"; +import { assertNumber } from "@noble/hashes/lib/utils"; import { getRandomBytesSync } from "../random"; import { assertBytes } from "../utils"; diff --git a/src/blake2b.ts b/src/blake2b.ts index 4428d2e..eacd935 100644 --- a/src/blake2b.ts +++ b/src/blake2b.ts @@ -1,4 +1,4 @@ -import { blake2b as _blake2b } from "noble-hashes/lib/blake2b"; +import { blake2b as _blake2b } from "@noble/hashes/lib/blake2b"; import { assertBytes } from "./utils"; export const blake2b = (msg: Uint8Array, outputLength = 64): Uint8Array => { diff --git a/src/hdkey.ts b/src/hdkey.ts index cc294af..ab3e4e1 100644 --- a/src/hdkey.ts +++ b/src/hdkey.ts @@ -1,9 +1,9 @@ import { base58check } from "micro-base"; -import { hmac } from "noble-hashes/lib/hmac"; -import { ripemd160 } from "noble-hashes/lib/ripemd160"; -import { sha256 } from "noble-hashes/lib/sha256"; -import { sha512 } from "noble-hashes/lib/sha512"; -import { bytesToHex } from "noble-hashes/lib/utils"; +import { hmac } from "@noble/hashes/lib/hmac"; +import { ripemd160 } from "@noble/hashes/lib/ripemd160"; +import { sha256 } from "@noble/hashes/lib/sha256"; +import { sha512 } from "@noble/hashes/lib/sha512"; +import { bytesToHex } from "@noble/hashes/lib/utils"; import * as secp from "./secp256k1"; import { assertBytes, diff --git a/src/keccak.ts b/src/keccak.ts index 7f82fb0..6b86fec 100644 --- a/src/keccak.ts +++ b/src/keccak.ts @@ -1,4 +1,4 @@ -import * as sha3 from "noble-hashes/lib/sha3"; +import * as sha3 from "@noble/hashes/lib/sha3"; import { wrapHash } from "./utils"; export const keccak224 = wrapHash(sha3.keccak_224); diff --git a/src/pbkdf2.ts b/src/pbkdf2.ts index f4af0ed..ae051bc 100644 --- a/src/pbkdf2.ts +++ b/src/pbkdf2.ts @@ -1,9 +1,9 @@ import { pbkdf2 as _pbkdf2, pbkdf2Async as _pbkdf2Async -} from "noble-hashes/lib/pbkdf2"; -import { sha256 } from "noble-hashes/lib/sha256"; -import { sha512 } from "noble-hashes/lib/sha512"; +} from "@noble/hashes/lib/pbkdf2"; +import { sha256 } from "@noble/hashes/lib/sha256"; +import { sha512 } from "@noble/hashes/lib/sha512"; import { assertBytes } from "./utils"; export async function pbkdf2( diff --git a/src/ripemd160.ts b/src/ripemd160.ts index aa444ea..d47dd1d 100644 --- a/src/ripemd160.ts +++ b/src/ripemd160.ts @@ -1,4 +1,4 @@ -import { ripemd160 as _ripemd160 } from "noble-hashes/lib/ripemd160"; +import { ripemd160 as _ripemd160 } from "@noble/hashes/lib/ripemd160"; import { wrapHash } from "./utils"; export const ripemd160 = wrapHash(_ripemd160); diff --git a/src/scrypt.ts b/src/scrypt.ts index a21beda..0446bde 100644 --- a/src/scrypt.ts +++ b/src/scrypt.ts @@ -1,7 +1,7 @@ import { scrypt as _scrypt, scryptAsync as _scryptAsync -} from "noble-hashes/lib/scrypt"; +} from "@noble/hashes/lib/scrypt"; import { assertBytes } from "./utils"; export async function scrypt( diff --git a/src/secp256k1-compat.ts b/src/secp256k1-compat.ts index 0a83fe3..86cc12f 100644 --- a/src/secp256k1-compat.ts +++ b/src/secp256k1-compat.ts @@ -1,4 +1,4 @@ -import { sha256 } from "noble-hashes/lib/sha256"; +import { sha256 } from "@noble/hashes/lib/sha256"; import * as secp from "./secp256k1"; import { assertBool, assertBytes, hexToBytes, toHex } from "./utils"; diff --git a/src/secp256k1.ts b/src/secp256k1.ts index cba926c..895ff91 100644 --- a/src/secp256k1.ts +++ b/src/secp256k1.ts @@ -1,6 +1,6 @@ -import { hmac } from "noble-hashes/lib/hmac"; -import { sha256 } from "noble-hashes/lib/sha256"; -import { utils as _utils } from "noble-secp256k1"; +import { hmac } from "@noble/hashes/lib/hmac"; +import { sha256 } from "@noble/hashes/lib/sha256"; +import { utils as _utils } from "@noble/secp256k1"; export { getPublicKey, sign, @@ -11,7 +11,7 @@ export { Point, Signature, CURVE -} from "noble-secp256k1"; +} from "@noble/secp256k1"; // Enable sync API for noble-secp256k1 _utils.hmacSha256Sync = (key: Uint8Array, ...messages: Uint8Array[]) => { diff --git a/src/sha256.ts b/src/sha256.ts index f2ad9f6..513bfef 100644 --- a/src/sha256.ts +++ b/src/sha256.ts @@ -1,4 +1,4 @@ -import { sha256 as _sha256 } from "noble-hashes/lib/sha256"; +import { sha256 as _sha256 } from "@noble/hashes/lib/sha256"; import { wrapHash } from "./utils"; export const sha256 = wrapHash(_sha256); diff --git a/src/sha512.ts b/src/sha512.ts index 7bc3962..e263037 100644 --- a/src/sha512.ts +++ b/src/sha512.ts @@ -1,4 +1,4 @@ -import { sha512 as _sha512 } from "noble-hashes/lib/sha512"; +import { sha512 as _sha512 } from "@noble/hashes/lib/sha512"; import { wrapHash } from "./utils"; export const sha512 = wrapHash(_sha512); diff --git a/src/utils.ts b/src/utils.ts index 20dfb9a..76d488d 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -1,5 +1,5 @@ // buf.toString('hex') -> toHex(buf) -export { bytesToHex as toHex, createView } from "noble-hashes/lib/utils"; +export { bytesToHex as toHex, createView } from "@noble/hashes/lib/utils"; // Buffer.from(hex, 'hex') -> hexToBytes(hex) export function hexToBytes(hex: string): Uint8Array { if (typeof hex !== "string") { diff --git a/test/test-vectors/hdkey.ts b/test/test-vectors/hdkey.ts index 6460ac7..56eeb3b 100644 --- a/test/test-vectors/hdkey.ts +++ b/test/test-vectors/hdkey.ts @@ -1,4 +1,4 @@ -import * as secp from "noble-secp256k1"; +import * as secp from "@noble/secp256k1"; import { HDKey } from "../../src/hdkey"; import { hexToBytes, toHex } from "../../src/utils"; import { deepStrictEqual, throws } from "./assert"; From a86276637f29c7d107908bae4123475c0f4a9f69 Mon Sep 17 00:00:00 2001 From: Paul Miller Date: Mon, 8 Nov 2021 21:11:05 +0200 Subject: [PATCH 034/219] Fix lint --- src/bip39/index.ts | 2 +- src/hdkey.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/bip39/index.ts b/src/bip39/index.ts index e3109b8..9514b1e 100644 --- a/src/bip39/index.ts +++ b/src/bip39/index.ts @@ -1,8 +1,8 @@ -import { utils as baseUtils } from "micro-base"; import { pbkdf2, pbkdf2Async } from "@noble/hashes/lib/pbkdf2"; import { sha256 } from "@noble/hashes/lib/sha256"; import { sha512 } from "@noble/hashes/lib/sha512"; import { assertNumber } from "@noble/hashes/lib/utils"; +import { utils as baseUtils } from "micro-base"; import { getRandomBytesSync } from "../random"; import { assertBytes } from "../utils"; diff --git a/src/hdkey.ts b/src/hdkey.ts index ab3e4e1..ddad0a3 100644 --- a/src/hdkey.ts +++ b/src/hdkey.ts @@ -1,9 +1,9 @@ -import { base58check } from "micro-base"; import { hmac } from "@noble/hashes/lib/hmac"; import { ripemd160 } from "@noble/hashes/lib/ripemd160"; import { sha256 } from "@noble/hashes/lib/sha256"; import { sha512 } from "@noble/hashes/lib/sha512"; import { bytesToHex } from "@noble/hashes/lib/utils"; +import { base58check } from "micro-base"; import * as secp from "./secp256k1"; import { assertBytes, From 4b8b11cd25d5ca4b137572f7332cfe3d0457034f Mon Sep 17 00:00:00 2001 From: Patricio Palladino Date: Mon, 8 Nov 2021 20:18:52 -0300 Subject: [PATCH 035/219] Run the CI on PRs --- .github/workflows/nodejs.yml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml index d923934..b98af6a 100644 --- a/.github/workflows/nodejs.yml +++ b/.github/workflows/nodejs.yml @@ -1,6 +1,12 @@ name: Node CI -on: [push] +on: + push: + branches: + - $default-branch + pull_request: + branches: + - "*" jobs: build: From 0d6f2946f2d143b8afdfb765a751e479200fab86 Mon Sep 17 00:00:00 2001 From: Paul Miller Date: Sat, 11 Dec 2021 14:09:46 +0400 Subject: [PATCH 036/219] Update deps I know how semver works, but updating nonetheless just in case --- package.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index b64a2f6..554e158 100644 --- a/package.json +++ b/package.json @@ -46,9 +46,9 @@ "*.d.ts.map" ], "dependencies": { - "micro-base": "^0.9.0", - "@noble/hashes": "^0.4.1", - "@noble/secp256k1": "^1.3.0" + "micro-base": "^0.10.0", + "@noble/hashes": "^0.4.4", + "@noble/secp256k1": "^1.3.1" }, "browser": { "crypto": false @@ -102,4 +102,4 @@ "context": "browser" } } -} \ No newline at end of file +} From 1379b3fa7c5dcea3c00bfa82a5a241bfa0a53ba1 Mon Sep 17 00:00:00 2001 From: Paul Miller Date: Sun, 12 Dec 2021 00:57:50 +0400 Subject: [PATCH 037/219] Update package.json --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 554e158..d485c10 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,7 @@ "dependencies": { "micro-base": "^0.10.0", "@noble/hashes": "^0.4.4", - "@noble/secp256k1": "^1.3.1" + "@noble/secp256k1": "^1.3.2" }, "browser": { "crypto": false From 57728b7696e61f3f805aeed6052be7caa203bac3 Mon Sep 17 00:00:00 2001 From: Paul Miller Date: Mon, 13 Dec 2021 18:50:41 +0400 Subject: [PATCH 038/219] Update package.json --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d485c10..d2cbbb3 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,7 @@ "dependencies": { "micro-base": "^0.10.0", "@noble/hashes": "^0.4.4", - "@noble/secp256k1": "^1.3.2" + "@noble/secp256k1": "^1.3.3" }, "browser": { "crypto": false From 9d2f6b28e81f49419d407f34aef13dfc44aaa0f0 Mon Sep 17 00:00:00 2001 From: Patricio Palladino Date: Mon, 13 Dec 2021 19:59:19 -0300 Subject: [PATCH 039/219] Bump version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d2cbbb3..25bdbfa 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ethereum-cryptography", - "version": "0.2.0", + "version": "0.2.1", "description": "All the cryptographic primitives used in Ethereum", "contributors": [ { From db88880f6c58fc8ddd441fcc31128ec57dfad672 Mon Sep 17 00:00:00 2001 From: Paul Miller Date: Mon, 20 Dec 2021 13:38:05 +0600 Subject: [PATCH 040/219] Use top-level modules from @noble/hashes --- src/bip39/index.ts | 8 ++++---- src/blake2b.ts | 2 +- src/hdkey.ts | 10 +++++----- src/keccak.ts | 2 +- src/pbkdf2.ts | 6 +++--- src/ripemd160.ts | 2 +- src/scrypt.ts | 2 +- src/secp256k1-compat.ts | 2 +- src/secp256k1.ts | 4 ++-- src/sha256.ts | 2 +- src/sha512.ts | 2 +- src/utils.ts | 2 +- 12 files changed, 22 insertions(+), 22 deletions(-) diff --git a/src/bip39/index.ts b/src/bip39/index.ts index 9514b1e..d3e8e87 100644 --- a/src/bip39/index.ts +++ b/src/bip39/index.ts @@ -1,7 +1,7 @@ -import { pbkdf2, pbkdf2Async } from "@noble/hashes/lib/pbkdf2"; -import { sha256 } from "@noble/hashes/lib/sha256"; -import { sha512 } from "@noble/hashes/lib/sha512"; -import { assertNumber } from "@noble/hashes/lib/utils"; +import { pbkdf2, pbkdf2Async } from "@noble/hashes/pbkdf2"; +import { sha256 } from "@noble/hashes/sha256"; +import { sha512 } from "@noble/hashes/sha512"; +import { assertNumber } from "@noble/hashes/utils"; import { utils as baseUtils } from "micro-base"; import { getRandomBytesSync } from "../random"; import { assertBytes } from "../utils"; diff --git a/src/blake2b.ts b/src/blake2b.ts index eacd935..9249138 100644 --- a/src/blake2b.ts +++ b/src/blake2b.ts @@ -1,4 +1,4 @@ -import { blake2b as _blake2b } from "@noble/hashes/lib/blake2b"; +import { blake2b as _blake2b } from "@noble/hashes/blake2b"; import { assertBytes } from "./utils"; export const blake2b = (msg: Uint8Array, outputLength = 64): Uint8Array => { diff --git a/src/hdkey.ts b/src/hdkey.ts index ddad0a3..6aadcaa 100644 --- a/src/hdkey.ts +++ b/src/hdkey.ts @@ -1,8 +1,8 @@ -import { hmac } from "@noble/hashes/lib/hmac"; -import { ripemd160 } from "@noble/hashes/lib/ripemd160"; -import { sha256 } from "@noble/hashes/lib/sha256"; -import { sha512 } from "@noble/hashes/lib/sha512"; -import { bytesToHex } from "@noble/hashes/lib/utils"; +import { hmac } from "@noble/hashes/hmac"; +import { ripemd160 } from "@noble/hashes/ripemd160"; +import { sha256 } from "@noble/hashes/sha256"; +import { sha512 } from "@noble/hashes/sha512"; +import { bytesToHex } from "@noble/hashes/utils"; import { base58check } from "micro-base"; import * as secp from "./secp256k1"; import { diff --git a/src/keccak.ts b/src/keccak.ts index 6b86fec..1d67b78 100644 --- a/src/keccak.ts +++ b/src/keccak.ts @@ -1,4 +1,4 @@ -import * as sha3 from "@noble/hashes/lib/sha3"; +import * as sha3 from "@noble/hashes/sha3"; import { wrapHash } from "./utils"; export const keccak224 = wrapHash(sha3.keccak_224); diff --git a/src/pbkdf2.ts b/src/pbkdf2.ts index ae051bc..5b21e7a 100644 --- a/src/pbkdf2.ts +++ b/src/pbkdf2.ts @@ -1,9 +1,9 @@ import { pbkdf2 as _pbkdf2, pbkdf2Async as _pbkdf2Async -} from "@noble/hashes/lib/pbkdf2"; -import { sha256 } from "@noble/hashes/lib/sha256"; -import { sha512 } from "@noble/hashes/lib/sha512"; +} from "@noble/hashes/pbkdf2"; +import { sha256 } from "@noble/hashes/sha256"; +import { sha512 } from "@noble/hashes/sha512"; import { assertBytes } from "./utils"; export async function pbkdf2( diff --git a/src/ripemd160.ts b/src/ripemd160.ts index d47dd1d..4f2bfee 100644 --- a/src/ripemd160.ts +++ b/src/ripemd160.ts @@ -1,4 +1,4 @@ -import { ripemd160 as _ripemd160 } from "@noble/hashes/lib/ripemd160"; +import { ripemd160 as _ripemd160 } from "@noble/hashes/ripemd160"; import { wrapHash } from "./utils"; export const ripemd160 = wrapHash(_ripemd160); diff --git a/src/scrypt.ts b/src/scrypt.ts index 0446bde..9049fbb 100644 --- a/src/scrypt.ts +++ b/src/scrypt.ts @@ -1,7 +1,7 @@ import { scrypt as _scrypt, scryptAsync as _scryptAsync -} from "@noble/hashes/lib/scrypt"; +} from "@noble/hashes/scrypt"; import { assertBytes } from "./utils"; export async function scrypt( diff --git a/src/secp256k1-compat.ts b/src/secp256k1-compat.ts index 86cc12f..8c9d631 100644 --- a/src/secp256k1-compat.ts +++ b/src/secp256k1-compat.ts @@ -1,4 +1,4 @@ -import { sha256 } from "@noble/hashes/lib/sha256"; +import { sha256 } from "@noble/hashes/sha256"; import * as secp from "./secp256k1"; import { assertBool, assertBytes, hexToBytes, toHex } from "./utils"; diff --git a/src/secp256k1.ts b/src/secp256k1.ts index 895ff91..f2636c1 100644 --- a/src/secp256k1.ts +++ b/src/secp256k1.ts @@ -1,5 +1,5 @@ -import { hmac } from "@noble/hashes/lib/hmac"; -import { sha256 } from "@noble/hashes/lib/sha256"; +import { hmac } from "@noble/hashes/hmac"; +import { sha256 } from "@noble/hashes/sha256"; import { utils as _utils } from "@noble/secp256k1"; export { getPublicKey, diff --git a/src/sha256.ts b/src/sha256.ts index 513bfef..8b3490b 100644 --- a/src/sha256.ts +++ b/src/sha256.ts @@ -1,4 +1,4 @@ -import { sha256 as _sha256 } from "@noble/hashes/lib/sha256"; +import { sha256 as _sha256 } from "@noble/hashes/sha256"; import { wrapHash } from "./utils"; export const sha256 = wrapHash(_sha256); diff --git a/src/sha512.ts b/src/sha512.ts index e263037..6929aee 100644 --- a/src/sha512.ts +++ b/src/sha512.ts @@ -1,4 +1,4 @@ -import { sha512 as _sha512 } from "@noble/hashes/lib/sha512"; +import { sha512 as _sha512 } from "@noble/hashes/sha512"; import { wrapHash } from "./utils"; export const sha512 = wrapHash(_sha512); diff --git a/src/utils.ts b/src/utils.ts index 76d488d..a9cada9 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -1,5 +1,5 @@ // buf.toString('hex') -> toHex(buf) -export { bytesToHex as toHex, createView } from "@noble/hashes/lib/utils"; +export { bytesToHex as toHex, createView } from "@noble/hashes/utils"; // Buffer.from(hex, 'hex') -> hexToBytes(hex) export function hexToBytes(hex: string): Uint8Array { if (typeof hex !== "string") { From c36ce232170d84e46d9cd174ba360c81179210c6 Mon Sep 17 00:00:00 2001 From: Paul Miller Date: Mon, 20 Dec 2021 13:42:37 +0600 Subject: [PATCH 041/219] Update noble-hashes to top-level version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 25bdbfa..b1ee9b0 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ ], "dependencies": { "micro-base": "^0.10.0", - "@noble/hashes": "^0.4.4", + "@noble/hashes": "^0.5.0", "@noble/secp256k1": "^1.3.3" }, "browser": { From d54629ce278504987060f74c79975f0f372861f6 Mon Sep 17 00:00:00 2001 From: Paul Miller Date: Mon, 20 Dec 2021 16:25:59 +0600 Subject: [PATCH 042/219] Move package.json keywords below the more important fields --- package.json | 48 ++++++++++++++++++++++++------------------------ 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/package.json b/package.json index b1ee9b0..0fd0199 100644 --- a/package.json +++ b/package.json @@ -12,30 +12,8 @@ "url": "https://paulmillr.com" } ], - "repository": "github:ethereum/js-ethereum-cryptography", + "repository": "https://github.com/ethereum/js-ethereum-cryptography", "license": "MIT", - "keywords": [ - "ethereum", - "cryptography", - "digital signature", - "hash", - "encryption", - "prng", - "keccak", - "scrypt", - "pbkdf2", - "sha-256", - "ripemd-160", - "blake2b", - "aes", - "advanced encryption standar", - "secp256k1", - "ecdsa", - "bip32", - "hierarchical deterministic keys", - "hdwallet", - "hdkeys" - ], "main": "./index.js", "files": [ "src", @@ -47,7 +25,7 @@ ], "dependencies": { "micro-base": "^0.10.0", - "@noble/hashes": "^0.5.0", + "@noble/hashes": "^0.5.1", "@noble/secp256k1": "^1.3.3" }, "browser": { @@ -97,6 +75,28 @@ "webpack": "^4.39.3", "webpack-cli": "^3.3.8" }, + "keywords": [ + "ethereum", + "cryptography", + "digital signature", + "hash", + "encryption", + "prng", + "keccak", + "scrypt", + "pbkdf2", + "sha-256", + "ripemd-160", + "blake2b", + "aes", + "advanced encryption standar", + "secp256k1", + "ecdsa", + "bip32", + "hierarchical deterministic keys", + "hdwallet", + "hdkeys" + ], "targets": { "parcel_tests": { "context": "browser" From 79567293e8be2af909968d3bc7e0d6f3f5864b92 Mon Sep 17 00:00:00 2001 From: Patricio Palladino Date: Mon, 20 Dec 2021 08:43:50 -0300 Subject: [PATCH 043/219] Bump version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 0fd0199..d311226 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ethereum-cryptography", - "version": "0.2.1", + "version": "0.2.2", "description": "All the cryptographic primitives used in Ethereum", "contributors": [ { From 4c026659d7caacc3fe437b0f8ca593a1ce8dba1c Mon Sep 17 00:00:00 2001 From: Paul Miller Date: Tue, 21 Dec 2021 15:24:15 +0600 Subject: [PATCH 044/219] Use assertBytes from noble-hashes --- package.json | 2 +- src/bip39/index.ts | 3 +-- src/utils.ts | 15 ++------------- 3 files changed, 4 insertions(+), 16 deletions(-) diff --git a/package.json b/package.json index d311226..1ecddb1 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ ], "dependencies": { "micro-base": "^0.10.0", - "@noble/hashes": "^0.5.1", + "@noble/hashes": "^0.5.2", "@noble/secp256k1": "^1.3.3" }, "browser": { diff --git a/src/bip39/index.ts b/src/bip39/index.ts index d3e8e87..548f55d 100644 --- a/src/bip39/index.ts +++ b/src/bip39/index.ts @@ -1,10 +1,9 @@ import { pbkdf2, pbkdf2Async } from "@noble/hashes/pbkdf2"; import { sha256 } from "@noble/hashes/sha256"; import { sha512 } from "@noble/hashes/sha512"; -import { assertNumber } from "@noble/hashes/utils"; +import { assertBytes, assertNumber } from "@noble/hashes/utils"; import { utils as baseUtils } from "micro-base"; import { getRandomBytesSync } from "../random"; -import { assertBytes } from "../utils"; const isJapanese = (wordlist: string[]) => wordlist[0] === "\u3042\u3044\u3053\u304f\u3057\u3093"; // Japanese wordlist diff --git a/src/utils.ts b/src/utils.ts index a9cada9..11e8dee 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -1,5 +1,6 @@ // buf.toString('hex') -> toHex(buf) -export { bytesToHex as toHex, createView } from "@noble/hashes/utils"; +import { assertBytes } from "@noble/hashes/utils"; +export { bytesToHex as toHex, assertBytes, createView } from "@noble/hashes/utils"; // Buffer.from(hex, 'hex') -> hexToBytes(hex) export function hexToBytes(hex: string): Uint8Array { if (typeof hex !== "string") { @@ -56,18 +57,6 @@ export function concatBytes(...arrays: Uint8Array[]): Uint8Array { return result; } // Internal utils -export function assertBytes(bytes: Uint8Array, ...len: number[]) { - if ( - bytes instanceof Uint8Array && - (!len.length || len.includes(bytes.length)) - ) { - return; - } - throw new TypeError( - `Expected ${len} bytes, not ${typeof bytes} with length=${bytes.length}` - ); -} - export function assertBool(b: boolean) { if (typeof b !== "boolean") { throw new Error(`Expected boolean, not ${b}`); From d0ffa4f7d70a60213ecc5b5100c466918383d3ce Mon Sep 17 00:00:00 2001 From: Paul Miller Date: Tue, 21 Dec 2021 15:31:16 +0600 Subject: [PATCH 045/219] Fix lint --- src/utils.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/utils.ts b/src/utils.ts index 11e8dee..1420897 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -1,6 +1,10 @@ // buf.toString('hex') -> toHex(buf) import { assertBytes } from "@noble/hashes/utils"; -export { bytesToHex as toHex, assertBytes, createView } from "@noble/hashes/utils"; +export { + assertBytes, + bytesToHex as toHex, + createView +} from "@noble/hashes/utils"; // Buffer.from(hex, 'hex') -> hexToBytes(hex) export function hexToBytes(hex: string): Uint8Array { if (typeof hex !== "string") { From d45622e651181811fa6e1f86f32280265ab1b317 Mon Sep 17 00:00:00 2001 From: Paul Miller Date: Tue, 21 Dec 2021 23:26:01 +0600 Subject: [PATCH 046/219] Hdkey fix --- src/hdkey.ts | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/hdkey.ts b/src/hdkey.ts index 6aadcaa..f56a460 100644 --- a/src/hdkey.ts +++ b/src/hdkey.ts @@ -133,7 +133,7 @@ export class HDKey { } this.pubKey = hex.toRawBytes(true); // force compressed point this.pubHash = hash160(this.pubKey); - this.privKey = undefined; + this.wipePrivateData(); } get privateExtendedKey(): string { @@ -258,12 +258,11 @@ export class HDKey { return secp.verify(sig, hash, this.publicKey); } public wipePrivateData(): this { - if (this.privKey) { - this.privKey = undefined; + this.privKey = undefined; + if (this.privKeyBytes != null) { this.privKeyBytes!.fill(0); this.privKeyBytes = undefined; } - this.privKey = undefined; return this; } public toJSON(): { xpriv: string; xpub: string } { From 08d38dc820f8821bbed010d181cf551fbf5dd628 Mon Sep 17 00:00:00 2001 From: Paul Miller Date: Wed, 22 Dec 2021 01:22:16 +0600 Subject: [PATCH 047/219] Clarify hdkey --- README.md | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 5c0e694..1c56104 100644 --- a/README.md +++ b/README.md @@ -205,7 +205,26 @@ Note: if you've been using ethereum-cryptography v0.1, it had different API. We' ## BIP32 HD Keygen -This module exports a single class whose type is +This module exports a single class `HDKey`, which should be used like this: + +```ts +const { HDKey } = require("ethereum-cryptography/secp256k1"); +const hdkey1 = HDKey.fromMasterSeed(seed); +const hdkey2 = HDKey.fromExtendedKey(base58key); +const hdkey3 = HDKey.fromJSON({ xpriv: string }); + +// props +[hdkey1.depth, hdkey1.index, hdkey1.chainCode]; +console.log(hdkey2.privateKey, hdkey2.publicKey); +console.log(hdkey3.derive("m/0/2147483647'/1")); +const sig = hdkey3.sign(hash); +hdkey3.verify(hash, sig); +``` + +Note: do not set `privateKey` and `publicKey` directly. Use `wipePrivateData()` to +clean-up the instance. + +The full API is: ```ts class HDKey { From 02eb64d05e4e0b39e2452c90d266141e56da25c1 Mon Sep 17 00:00:00 2001 From: Paul Miller Date: Wed, 22 Dec 2021 01:35:36 +0600 Subject: [PATCH 048/219] README update --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index 1c56104..fd0e936 100644 --- a/README.md +++ b/README.md @@ -221,8 +221,7 @@ const sig = hdkey3.sign(hash); hdkey3.verify(hash, sig); ``` -Note: do not set `privateKey` and `publicKey` directly. Use `wipePrivateData()` to -clean-up the instance. +Note: do not set `privateKey` and `publicKey` directly, you will get wrong keys. The full API is: From af463df68638234ea506743605f4194dac82108c Mon Sep 17 00:00:00 2001 From: Paul Miller Date: Thu, 23 Dec 2021 00:24:15 +0600 Subject: [PATCH 049/219] Rewrite hdkey to make it more robust --- src/hdkey.ts | 164 ++++++++++++++++++++++--------------- test/test-vectors/hdkey.ts | 29 ++++--- 2 files changed, 115 insertions(+), 78 deletions(-) diff --git a/src/hdkey.ts b/src/hdkey.ts index f56a460..3f95c28 100644 --- a/src/hdkey.ts +++ b/src/hdkey.ts @@ -30,6 +30,7 @@ function modN(a: bigint, b: bigint = secp.CURVE.n): bigint { const MASTER_SECRET = utf8ToBytes("Bitcoin seed"); // Bitcoin hardcoded by default const BITCOIN_VERSIONS: Versions = { private: 0x0488ade4, public: 0x0488b21e }; +export const HARDENED_OFFSET: number = 0x80000000; export interface Versions { private: number; @@ -44,54 +45,97 @@ const toU32 = (n: number) => { return buf; }; +type HDKeyOpt = { + versions: Versions; + depth?: number; + index?: number; + parentFingerprint?: number; + chainCode: Uint8Array; + publicKey?: Uint8Array; + privateKey?: Uint8Array | bigint; +}; + export class HDKey { - public static HARDENED_OFFSET: number = 0x80000000; - public static fromMasterSeed(seed: Uint8Array, versions?: Versions): HDKey { + readonly versions: Versions; + readonly depth: number = 0; + readonly index: number = 0; + readonly chainCode: Uint8Array | null = null; + readonly parentFingerprint: number = 0; + private privKey?: bigint; + private privKeyBytes?: Uint8Array; + private pubKey?: Uint8Array; + private pubHash: Uint8Array | undefined; + + static fromMasterSeed( + seed: Uint8Array, + versions: Versions = BITCOIN_VERSIONS + ): HDKey { const I = hmac(sha512, MASTER_SECRET, seed); - const hdkey = new HDKey(versions); - hdkey.chainCode = I.slice(32); - hdkey.privateKey = I.slice(0, 32); - return hdkey; + return new HDKey({ + versions, + chainCode: I.slice(32), + privateKey: I.slice(0, 32) + }); } - public static fromExtendedKey(base58key: string, versions?: Versions): HDKey { + + static fromExtendedKey( + base58key: string, + versions: Versions = BITCOIN_VERSIONS + ): HDKey { // => version(4) || depth(1) || fingerprint(4) || index(4) || chain(32) || key(33) - const hdkey = new HDKey(versions); const keyBuffer: Uint8Array = base58c.decode(base58key); const keyView = createView(keyBuffer); const version = keyView.getUint32(0, false); - hdkey.depth = keyBuffer[4]; - hdkey.parentFingerprint = keyView.getUint32(5, false); - hdkey.index = keyView.getUint32(9, false); - hdkey.chainCode = keyBuffer.slice(13, 45); + const opt = { + versions, + depth: keyBuffer[4], + parentFingerprint: keyView.getUint32(5, false), + index: keyView.getUint32(9, false), + chainCode: keyBuffer.slice(13, 45) + }; const key = keyBuffer.slice(45); const isPriv = key[0] === 0; - if (version !== hdkey.versions[isPriv ? "private" : "public"]) { + if (version !== versions[isPriv ? "private" : "public"]) { throw new Error("Version mismatch"); } if (isPriv) { - hdkey.privateKey = key.slice(1); + return new HDKey({ ...opt, privateKey: key.slice(1) }); } else { - hdkey.publicKey = key; + return new HDKey({ ...opt, publicKey: key }); } - return hdkey; } - public static fromJSON(json: { xpriv: string }): HDKey { + static fromJSON(json: { xpriv: string }): HDKey { return HDKey.fromExtendedKey(json.xpriv); } - public versions: Versions; - public depth: number = 0; - public index: number = 0; - public chainCode: Uint8Array | null = null; - public parentFingerprint: number = 0; - private privKey?: bigint; - private privKeyBytes?: Uint8Array; - private pubKey?: Uint8Array; - private pubHash: Uint8Array | undefined; - - constructor(versions?: Versions) { - this.versions = versions || BITCOIN_VERSIONS; + constructor(opt: HDKeyOpt) { + if (!opt || typeof opt !== "object") { + throw new Error("HDKey.constructor must not be called directly"); + } + this.versions = opt.versions || BITCOIN_VERSIONS; + this.depth = opt.depth || 0; + this.chainCode = opt.chainCode; + this.index = opt.index || 0; + this.parentFingerprint = opt.parentFingerprint || 0; + if (opt.publicKey && opt.privateKey) + throw new Error("HDKey: publicKey and privateKey at same time."); + if (opt.privateKey) { + if (!secp.utils.isValidPrivateKey(opt.privateKey)) { + throw new Error("Invalid private key"); + } + this.privKey = + typeof opt.privateKey === "bigint" + ? opt.privateKey + : bytesToNumber(opt.privateKey); + this.privKeyBytes = numberToBytes(this.privKey); + this.pubKey = secp.getPublicKey(opt.privateKey, true); + } else if (opt.publicKey) { + this.pubKey = secp.Point.fromHex(opt.publicKey).toRawBytes(true); // force compressed point + } else { + throw new Error("HDKey: no public or private key provided"); + } + this.pubHash = hash160(this.pubKey); } get fingerprint(): number { if (!this.pubHash) { @@ -108,34 +152,9 @@ export class HDKey { get privateKey(): Uint8Array | null { return this.privKeyBytes || null; } - set privateKey(value: Uint8Array | bigint | null) { - if (value == null) { - this.wipePrivateData(); - return; - } - if (!secp.utils.isValidPrivateKey(value)) { - throw new Error("Invalid private key"); - } - this.privKey = typeof value === "bigint" ? value : bytesToNumber(value); - this.privKeyBytes = numberToBytes(this.privKey); - this.pubKey = secp.getPublicKey(value, true); - this.pubHash = hash160(this.pubKey); - } get publicKey(): Uint8Array | null { return this.pubKey || null; } - set publicKey(value: Uint8Array | null) { - let hex; - try { - hex = secp.Point.fromHex(value!); - } catch (error) { - throw new Error("Invalid public key"); - } - this.pubKey = hex.toRawBytes(true); // force compressed point - this.pubHash = hash160(this.pubKey); - this.wipePrivateData(); - } - get privateExtendedKey(): string { const priv = this.privateKey; if (!priv) { @@ -171,17 +190,18 @@ export class HDKey { throw new Error(`Invalid child index: ${c}`); } let idx = +m[1]; - if (!Number.isSafeInteger(idx) || idx >= HDKey.HARDENED_OFFSET) { + if (!Number.isSafeInteger(idx) || idx >= HARDENED_OFFSET) { throw new Error("Invalid index"); } // hardened key if (m[2] === "'") { - idx += HDKey.HARDENED_OFFSET; + idx += HARDENED_OFFSET; } child = child.deriveChild(idx); } return child; } + public deriveChild(index: number): HDKey { if (!Number.isSafeInteger(index) || index < 0 || index >= 2 ** 33) { throw new Error( @@ -193,7 +213,7 @@ export class HDKey { } let data = new Uint8Array(4); createView(data).setUint32(0, index, false); - if (index >= HDKey.HARDENED_OFFSET) { + if (index >= HARDENED_OFFSET) { // Hardened const priv = this.privateKey; if (!priv) { @@ -211,7 +231,13 @@ export class HDKey { if (!secp.utils.isValidPrivateKey(childTweak)) { throw new Error("Tweak bigger than curve order"); } - const child = new HDKey(this.versions); + const opt: HDKeyOpt = { + versions: this.versions, + chainCode, + depth: this.depth + 1, + parentFingerprint: this.fingerprint, + index + }; try { // Private parent key -> private child key if (this.privateKey) { @@ -221,28 +247,29 @@ export class HDKey { "The tweak was out of range or the resulted private key is invalid" ); } - child.privateKey = added; + opt.privateKey = added; } else { - child.publicKey = secp.Point.fromHex(this.pubKey) + opt.publicKey = secp.Point.fromHex(this.pubKey) .add(secp.Point.fromPrivateKey(childTweak)) .toRawBytes(true); } + return new HDKey(opt); } catch (err) { return this.deriveChild(index + 1); } - child.chainCode = chainCode; - child.depth = this.depth + 1; - child.parentFingerprint = this.fingerprint; - child.index = index; - return child; } + public sign(hash: Uint8Array): Uint8Array { if (!this.privateKey) { throw new Error("No privateKey set!"); } assertBytes(hash, 32); - return secp.signSync(hash, this.privKey!, { canonical: true, der: false }); + return secp.signSync(hash, this.privKey!, { + canonical: true, + der: false + }); } + public verify(hash: Uint8Array, signature: Uint8Array): boolean { assertBytes(hash, 32); assertBytes(signature, 64); @@ -257,10 +284,11 @@ export class HDKey { } return secp.verify(sig, hash, this.publicKey); } + public wipePrivateData(): this { this.privKey = undefined; - if (this.privKeyBytes != null) { - this.privKeyBytes!.fill(0); + if (this.privKeyBytes) { + this.privKeyBytes.fill(0); this.privKeyBytes = undefined; } return this; diff --git a/test/test-vectors/hdkey.ts b/test/test-vectors/hdkey.ts index 56eeb3b..a7612e1 100644 --- a/test/test-vectors/hdkey.ts +++ b/test/test-vectors/hdkey.ts @@ -1,5 +1,5 @@ import * as secp from "@noble/secp256k1"; -import { HDKey } from "../../src/hdkey"; +import { HDKey, HARDENED_OFFSET } from "../../src/hdkey"; import { hexToBytes, toHex } from "../../src/utils"; import { deepStrictEqual, throws } from "./assert"; // https://github.com/cryptocoinjs/hdkey/blob/42637e381bdef0c8f785b14f5b66a80dad969514/test/fixtures/hdkey.json @@ -160,8 +160,11 @@ describe("hdkey", () => { describe("- privateKey", () => { it("should throw an error if incorrect key size", () => { - const hdkey = new HDKey(); + const seed = "fffcf9f6f3f0edeae7e4e1dedbd8d5d2cfccc9c6c3c0bdbab7b4b1aeaba8a5a29f9c999693908d8a8784817e7b7875726f6c696663605d5a5754514e4b484542"; + const hdkey = HDKey.fromMasterSeed(hexToBytes(seed)); + // const hdkey = new HDKey.HDKey(); throws(() => { + // @ts-ignore hdkey.privateKey = new Uint8Array([1, 2, 3, 4]); }); }); @@ -170,7 +173,9 @@ describe("hdkey", () => { describe("- publicKey", () => { it("should throw an error if incorrect key size", () => { throws(() => { - const hdkey = new HDKey(); + const seed = "fffcf9f6f3f0edeae7e4e1dedbd8d5d2cfccc9c6c3c0bdbab7b4b1aeaba8a5a29f9c999693908d8a8784817e7b7875726f6c696663605d5a5754514e4b484542"; + const hdkey = HDKey.fromMasterSeed(hexToBytes(seed)); + // @ts-ignore hdkey.publicKey = new Uint8Array([1, 2, 3, 4]); }); }); @@ -178,15 +183,19 @@ describe("hdkey", () => { it("should not throw if key is 33 bytes (compressed)", () => { const pub = secp.getPublicKey(secp.utils.randomPrivateKey(), true); deepStrictEqual(pub.length, 33); - const hdkey = new HDKey(); - hdkey.publicKey = pub; + const seed = "fffcf9f6f3f0edeae7e4e1dedbd8d5d2cfccc9c6c3c0bdbab7b4b1aeaba8a5a29f9c999693908d8a8784817e7b7875726f6c696663605d5a5754514e4b484542"; + const hdkey = HDKey.fromMasterSeed(hexToBytes(seed)); + // @ts-ignore + throws(() => { hdkey.publicKey = pub; }); }); it("should not throw if key is 65 bytes (not compressed)", () => { const pub = secp.getPublicKey(secp.utils.randomPrivateKey(), false); deepStrictEqual(pub.length, 65); - const hdkey = new HDKey(); - hdkey.publicKey = pub; + const seed = "fffcf9f6f3f0edeae7e4e1dedbd8d5d2cfccc9c6c3c0bdbab7b4b1aeaba8a5a29f9c999693908d8a8784817e7b7875726f6c696663605d5a5754514e4b484542"; + const hdkey = HDKey.fromMasterSeed(hexToBytes(seed)); + // @ts-ignore + throws(() => { hdkey.publicKey = pub; }); }); }); @@ -311,7 +320,7 @@ describe("hdkey", () => { describe("HARDENED_OFFSET", () => { it("should be set", () => { - deepStrictEqual(!!HDKey.HARDENED_OFFSET, true); + deepStrictEqual(!!HARDENED_OFFSET, true); }); }); @@ -338,9 +347,9 @@ describe("hdkey", () => { const masterKey = HDKey.fromMasterSeed(hexToBytes(seed)); deepStrictEqual(!!masterKey.privateExtendedKey, true, "xpriv is truthy"); - (masterKey as any).privateKey = undefined; + throws(() => { (masterKey as any).privateKey = undefined; }); - throws(() => masterKey.privateExtendedKey); + // throws(() => masterKey.privateExtendedKey); }); }); From a44264f0d8b9496ca24abbad01ff0c9492f8d123 Mon Sep 17 00:00:00 2001 From: Paul Miller Date: Thu, 23 Dec 2021 00:28:32 +0600 Subject: [PATCH 050/219] hdkey docs --- README.md | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/README.md b/README.md index fd0e936..616dd81 100644 --- a/README.md +++ b/README.md @@ -221,7 +221,8 @@ const sig = hdkey3.sign(hash); hdkey3.verify(hash, sig); ``` -Note: do not set `privateKey` and `publicKey` directly, you will get wrong keys. +Note: `chainCode` property is essentially a private part +of a secret "master" key, it should be guarded from unauthorized access. The full API is: @@ -232,26 +233,25 @@ class HDKey { public static fromExtendedKey(base58key: string, versions: Versions): HDKey; public static fromJSON(json: { xpriv: string }): HDKey; - public versions: Versions; - public depth: number; - public index: number; - public chainCode: Uint8Array | null; - public privateKey: Uint8Array | null; - public publicKey: Uint8Array | null; - public fingerprint: number; - public parentFingerprint: number; - public pubKeyHash: Uint8Array | undefined; - public identifier: Uint8Array | undefined; - public privateExtendedKey: string; - public publicExtendedKey: string; - - private constructor(versios: Versions); - public derive(path: string): HDKey; - public deriveChild(index: number): HDKey; - public sign(hash: Uint8Array): Uint8Array; - public verify(hash: Uint8Array, signature: Uint8Array): boolean; - public wipePrivateData(): this; - public toJSON(): { xpriv: string; xpub: string }; + readonly versions: Versions; + readonly depth: number = 0; + readonly index: number = 0; + readonly chainCode: Uint8Array | null = null; + readonly parentFingerprint: number = 0; + + get fingerprint(): number; + get identifier(): Uint8Array | undefined; + get pubKeyHash(): Uint8Array | undefined; + get privateKey(): Uint8Array | null; + get publicKey(): Uint8Array | null; + get privateExtendedKey(): string; + get publicExtendedKey(): string; + + derive(path: string): HDKey; + deriveChild(index: number): HDKey; + sign(hash: Uint8Array): Uint8Array; + verify(hash: Uint8Array, signature: Uint8Array): boolean; + wipePrivateData(): this; } interface Versions { From 756d4c691f5a947df5c3fa55c861f4589e684830 Mon Sep 17 00:00:00 2001 From: Paul Miller Date: Thu, 23 Dec 2021 00:32:07 +0600 Subject: [PATCH 051/219] Lint --- src/hdkey.ts | 103 +++++++++++++++++++------------------ test/test-vectors/hdkey.ts | 30 +++++++---- 2 files changed, 72 insertions(+), 61 deletions(-) diff --git a/src/hdkey.ts b/src/hdkey.ts index 3f95c28..d829f2b 100644 --- a/src/hdkey.ts +++ b/src/hdkey.ts @@ -45,7 +45,7 @@ const toU32 = (n: number) => { return buf; }; -type HDKeyOpt = { +interface HDKeyOpt { versions: Versions; depth?: number; index?: number; @@ -53,20 +53,47 @@ type HDKeyOpt = { chainCode: Uint8Array; publicKey?: Uint8Array; privateKey?: Uint8Array | bigint; -}; +} export class HDKey { - readonly versions: Versions; - readonly depth: number = 0; - readonly index: number = 0; - readonly chainCode: Uint8Array | null = null; - readonly parentFingerprint: number = 0; - private privKey?: bigint; - private privKeyBytes?: Uint8Array; - private pubKey?: Uint8Array; - private pubHash: Uint8Array | undefined; + get fingerprint(): number { + if (!this.pubHash) { + throw new Error("No publicKey set!"); + } + return fromU32(this.pubHash); + } + get identifier(): Uint8Array | undefined { + return this.pubHash; + } + get pubKeyHash(): Uint8Array | undefined { + return this.pubHash; + } + get privateKey(): Uint8Array | null { + return this.privKeyBytes || null; + } + get publicKey(): Uint8Array | null { + return this.pubKey || null; + } + get privateExtendedKey(): string { + const priv = this.privateKey; + if (!priv) { + throw new Error("No private key"); + } + return base58c.encode( + this.serialize( + this.versions.private, + concatBytes(new Uint8Array([0]), priv) + ) + ); + } + get publicExtendedKey(): string { + if (!this.pubKey) { + throw new Error("No public key"); + } + return base58c.encode(this.serialize(this.versions.public, this.pubKey)); + } - static fromMasterSeed( + public static fromMasterSeed( seed: Uint8Array, versions: Versions = BITCOIN_VERSIONS ): HDKey { @@ -78,7 +105,7 @@ export class HDKey { }); } - static fromExtendedKey( + public static fromExtendedKey( base58key: string, versions: Versions = BITCOIN_VERSIONS ): HDKey { @@ -105,9 +132,18 @@ export class HDKey { } } - static fromJSON(json: { xpriv: string }): HDKey { + public static fromJSON(json: { xpriv: string }): HDKey { return HDKey.fromExtendedKey(json.xpriv); } + public readonly versions: Versions; + public readonly depth: number = 0; + public readonly index: number = 0; + public readonly chainCode: Uint8Array | null = null; + public readonly parentFingerprint: number = 0; + private privKey?: bigint; + private privKeyBytes?: Uint8Array; + private pubKey?: Uint8Array; + private pubHash: Uint8Array | undefined; constructor(opt: HDKeyOpt) { if (!opt || typeof opt !== "object") { @@ -118,8 +154,9 @@ export class HDKey { this.chainCode = opt.chainCode; this.index = opt.index || 0; this.parentFingerprint = opt.parentFingerprint || 0; - if (opt.publicKey && opt.privateKey) + if (opt.publicKey && opt.privateKey) { throw new Error("HDKey: publicKey and privateKey at same time."); + } if (opt.privateKey) { if (!secp.utils.isValidPrivateKey(opt.privateKey)) { throw new Error("Invalid private key"); @@ -137,42 +174,6 @@ export class HDKey { } this.pubHash = hash160(this.pubKey); } - get fingerprint(): number { - if (!this.pubHash) { - throw new Error("No publicKey set!"); - } - return fromU32(this.pubHash); - } - get identifier(): Uint8Array | undefined { - return this.pubHash; - } - get pubKeyHash(): Uint8Array | undefined { - return this.pubHash; - } - get privateKey(): Uint8Array | null { - return this.privKeyBytes || null; - } - get publicKey(): Uint8Array | null { - return this.pubKey || null; - } - get privateExtendedKey(): string { - const priv = this.privateKey; - if (!priv) { - throw new Error("No private key"); - } - return base58c.encode( - this.serialize( - this.versions.private, - concatBytes(new Uint8Array([0]), priv) - ) - ); - } - get publicExtendedKey(): string { - if (!this.pubKey) { - throw new Error("No public key"); - } - return base58c.encode(this.serialize(this.versions.public, this.pubKey)); - } public derive(path: string): HDKey { if (!/^[mM]'?/.test(path)) { diff --git a/test/test-vectors/hdkey.ts b/test/test-vectors/hdkey.ts index a7612e1..1ccbb7c 100644 --- a/test/test-vectors/hdkey.ts +++ b/test/test-vectors/hdkey.ts @@ -1,5 +1,5 @@ import * as secp from "@noble/secp256k1"; -import { HDKey, HARDENED_OFFSET } from "../../src/hdkey"; +import { HARDENED_OFFSET, HDKey } from "../../src/hdkey"; import { hexToBytes, toHex } from "../../src/utils"; import { deepStrictEqual, throws } from "./assert"; // https://github.com/cryptocoinjs/hdkey/blob/42637e381bdef0c8f785b14f5b66a80dad969514/test/fixtures/hdkey.json @@ -160,7 +160,8 @@ describe("hdkey", () => { describe("- privateKey", () => { it("should throw an error if incorrect key size", () => { - const seed = "fffcf9f6f3f0edeae7e4e1dedbd8d5d2cfccc9c6c3c0bdbab7b4b1aeaba8a5a29f9c999693908d8a8784817e7b7875726f6c696663605d5a5754514e4b484542"; + const seed = + "fffcf9f6f3f0edeae7e4e1dedbd8d5d2cfccc9c6c3c0bdbab7b4b1aeaba8a5a29f9c999693908d8a8784817e7b7875726f6c696663605d5a5754514e4b484542"; const hdkey = HDKey.fromMasterSeed(hexToBytes(seed)); // const hdkey = new HDKey.HDKey(); throws(() => { @@ -173,7 +174,8 @@ describe("hdkey", () => { describe("- publicKey", () => { it("should throw an error if incorrect key size", () => { throws(() => { - const seed = "fffcf9f6f3f0edeae7e4e1dedbd8d5d2cfccc9c6c3c0bdbab7b4b1aeaba8a5a29f9c999693908d8a8784817e7b7875726f6c696663605d5a5754514e4b484542"; + const seed = + "fffcf9f6f3f0edeae7e4e1dedbd8d5d2cfccc9c6c3c0bdbab7b4b1aeaba8a5a29f9c999693908d8a8784817e7b7875726f6c696663605d5a5754514e4b484542"; const hdkey = HDKey.fromMasterSeed(hexToBytes(seed)); // @ts-ignore hdkey.publicKey = new Uint8Array([1, 2, 3, 4]); @@ -183,19 +185,25 @@ describe("hdkey", () => { it("should not throw if key is 33 bytes (compressed)", () => { const pub = secp.getPublicKey(secp.utils.randomPrivateKey(), true); deepStrictEqual(pub.length, 33); - const seed = "fffcf9f6f3f0edeae7e4e1dedbd8d5d2cfccc9c6c3c0bdbab7b4b1aeaba8a5a29f9c999693908d8a8784817e7b7875726f6c696663605d5a5754514e4b484542"; + const seed = + "fffcf9f6f3f0edeae7e4e1dedbd8d5d2cfccc9c6c3c0bdbab7b4b1aeaba8a5a29f9c999693908d8a8784817e7b7875726f6c696663605d5a5754514e4b484542"; const hdkey = HDKey.fromMasterSeed(hexToBytes(seed)); - // @ts-ignore - throws(() => { hdkey.publicKey = pub; }); + throws(() => { + // @ts-ignore + hdkey.publicKey = pub; + }); }); it("should not throw if key is 65 bytes (not compressed)", () => { const pub = secp.getPublicKey(secp.utils.randomPrivateKey(), false); deepStrictEqual(pub.length, 65); - const seed = "fffcf9f6f3f0edeae7e4e1dedbd8d5d2cfccc9c6c3c0bdbab7b4b1aeaba8a5a29f9c999693908d8a8784817e7b7875726f6c696663605d5a5754514e4b484542"; + const seed = + "fffcf9f6f3f0edeae7e4e1dedbd8d5d2cfccc9c6c3c0bdbab7b4b1aeaba8a5a29f9c999693908d8a8784817e7b7875726f6c696663605d5a5754514e4b484542"; const hdkey = HDKey.fromMasterSeed(hexToBytes(seed)); - // @ts-ignore - throws(() => { hdkey.publicKey = pub; }); + throws(() => { + // @ts-ignore + hdkey.publicKey = pub; + }); }); }); @@ -347,7 +355,9 @@ describe("hdkey", () => { const masterKey = HDKey.fromMasterSeed(hexToBytes(seed)); deepStrictEqual(!!masterKey.privateExtendedKey, true, "xpriv is truthy"); - throws(() => { (masterKey as any).privateKey = undefined; }); + throws(() => { + (masterKey as any).privateKey = undefined; + }); // throws(() => masterKey.privateExtendedKey); }); From 0652c615d0daaa1f2959f7282c4ce04146ca0a0f Mon Sep 17 00:00:00 2001 From: Patricio Palladino Date: Wed, 22 Dec 2021 15:39:03 -0300 Subject: [PATCH 052/219] Bump version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1ecddb1..b7a0206 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ethereum-cryptography", - "version": "0.2.2", + "version": "0.2.3", "description": "All the cryptographic primitives used in Ethereum", "contributors": [ { From dca1d4fa5dc432f9610a3b42fc3f8169ab5cc239 Mon Sep 17 00:00:00 2001 From: Paul Miller Date: Thu, 23 Dec 2021 00:52:57 +0600 Subject: [PATCH 053/219] Re-use noble-hashes crypto module --- src/aes.ts | 3 ++- src/bip39/index.ts | 5 ++--- src/random.ts | 10 ++-------- 3 files changed, 6 insertions(+), 12 deletions(-) diff --git a/src/aes.ts b/src/aes.ts index c3efdac..aef8f79 100644 --- a/src/aes.ts +++ b/src/aes.ts @@ -1,4 +1,5 @@ -import { concatBytes, crypto, equalsBytes } from "./utils"; +import { crypto } from "@noble/hashes/crypto"; +import { concatBytes, equalsBytes } from "./utils"; function validateOpt(key: Uint8Array, iv: Uint8Array, mode: string) { if (!mode.startsWith("aes-")) { diff --git a/src/bip39/index.ts b/src/bip39/index.ts index 548f55d..cf8c619 100644 --- a/src/bip39/index.ts +++ b/src/bip39/index.ts @@ -1,9 +1,8 @@ import { pbkdf2, pbkdf2Async } from "@noble/hashes/pbkdf2"; import { sha256 } from "@noble/hashes/sha256"; import { sha512 } from "@noble/hashes/sha512"; -import { assertBytes, assertNumber } from "@noble/hashes/utils"; +import { assertBytes, assertNumber, randomBytes } from "@noble/hashes/utils"; import { utils as baseUtils } from "micro-base"; -import { getRandomBytesSync } from "../random"; const isJapanese = (wordlist: string[]) => wordlist[0] === "\u3042\u3044\u3053\u304f\u3057\u3093"; // Japanese wordlist @@ -27,7 +26,7 @@ export function generateMnemonic( if (strength % 32 !== 0) { throw new TypeError("Invalid entropy"); } - return entropyToMnemonic(getRandomBytesSync(strength / 8), wordlist); + return entropyToMnemonic(randomBytes(strength / 8), wordlist); } const checksum = (entropy: Uint8Array) => { diff --git a/src/random.ts b/src/random.ts index 7947c37..0c7c0b8 100644 --- a/src/random.ts +++ b/src/random.ts @@ -1,13 +1,7 @@ -import { crypto } from "./utils"; +import { randomBytes } from "@noble/hashes/utils"; export function getRandomBytesSync(bytes: number): Uint8Array { - if (crypto.web) { - return crypto.web.getRandomValues(new Uint8Array(bytes)); - } else if (crypto.node) { - return new Uint8Array(crypto.node.randomBytes(bytes).buffer); - } else { - throw new Error("The environment doesn't have randomBytes function"); - } + return randomBytes(bytes); } export async function getRandomBytes(bytes: number): Promise { From e4f524cc11105c0dac22ce9647c6adca23baaf86 Mon Sep 17 00:00:00 2001 From: Paul Miller Date: Fri, 24 Dec 2021 02:11:47 +0600 Subject: [PATCH 054/219] Improve hdkey bound checks and bip39 array type check --- src/bip39/index.ts | 9 ++- src/hdkey.ts | 13 ++- test/test-vectors/hdkey.ts | 157 +++++++++++++++++++++++++++++++++++++ 3 files changed, 176 insertions(+), 3 deletions(-) diff --git a/src/bip39/index.ts b/src/bip39/index.ts index 548f55d..c228bc0 100644 --- a/src/bip39/index.ts +++ b/src/bip39/index.ts @@ -46,6 +46,11 @@ function getCoder(wordlist: string[]) { ) { throw new Error("Worlist: expected array of 2048 strings"); } + for (const i of wordlist) { + if (typeof i !== "string") { + throw new Error(`Wordlist: non-string element: ${i}`); + } + } return baseUtils.chain( baseUtils.checksum(1, checksum), baseUtils.radix2(11, true), @@ -94,7 +99,7 @@ export function mnemonicToSeed(mnemonic: string, passphrase = "") { assertMnemonic(mnemonic); return pbkdf2Async(sha512, nfkd(mnemonic), salt(passphrase), { c: 2048, - dkLen: 64 + dkLen: 64, }); } @@ -102,6 +107,6 @@ export function mnemonicToSeedSync(mnemonic: string, passphrase = "") { assertMnemonic(mnemonic); return pbkdf2(sha512, nfkd(mnemonic), salt(passphrase), { c: 2048, - dkLen: 64 + dkLen: 64, }); } diff --git a/src/hdkey.ts b/src/hdkey.ts index d829f2b..c2c46c9 100644 --- a/src/hdkey.ts +++ b/src/hdkey.ts @@ -97,6 +97,11 @@ export class HDKey { seed: Uint8Array, versions: Versions = BITCOIN_VERSIONS ): HDKey { + if (8 * seed.length < 128 || 8 * seed.length > 512) { + throw new Error( + "HDKey: wrong seed length=${seed.length}. Should be between 128 and 512 bits; 256 bits is advised)" + ); + } const I = hmac(sha512, MASTER_SECRET, seed); return new HDKey({ versions, @@ -154,6 +159,12 @@ export class HDKey { this.chainCode = opt.chainCode; this.index = opt.index || 0; this.parentFingerprint = opt.parentFingerprint || 0; + if (!this.depth) { + if (this.parentFingerprint || this.index) + throw new Error( + "HDKey: zero depth with non-zero index/parent fingerprint" + ); + } if (opt.publicKey && opt.privateKey) { throw new Error("HDKey: publicKey and privateKey at same time."); } @@ -204,7 +215,7 @@ export class HDKey { } public deriveChild(index: number): HDKey { - if (!Number.isSafeInteger(index) || index < 0 || index >= 2 ** 33) { + if (!Number.isSafeInteger(index) || index < 0 || index >= 2 ** 32) { throw new Error( `Child index should be positive 32-bit integer, not ${index}` ); diff --git a/test/test-vectors/hdkey.ts b/test/test-vectors/hdkey.ts index 1ccbb7c..4acac6b 100644 --- a/test/test-vectors/hdkey.ts +++ b/test/test-vectors/hdkey.ts @@ -118,6 +118,8 @@ describe("hdkey", () => { childkey.privateExtendedKey, "xprv9zFnWC6h2cLgpmSA46vutJzBcfJ8yaJGg8cX1e5StJh45BBciYTRXSd25UEPVuesF9yog62tGAQtHjXajPPdbRCHuWS6T8XA2ECKADdw4Ef" ); + // Should throw on 2**32 childs + throws(() => hdkey.deriveChild(2 ** 32)); }); it("Should derive public key correctly", () => { @@ -445,4 +447,159 @@ describe("hdkey", () => { throws(() => hdkey.derive(t)); } }); + // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki + describe("Spec test vectors", () => { + it("Test Vector 1", () => { + const master = HDKey.fromMasterSeed( + hexToBytes("000102030405060708090a0b0c0d0e0f") + ); + deepStrictEqual(master.derive("m").toJSON(), { + xpriv: + "xprv9s21ZrQH143K3QTDL4LXw2F7HEK3wJUD2nW2nRk4stbPy6cq3jPPqjiChkVvvNKmPGJxWUtg6LnF5kejMRNNU3TGtRBeJgk33yuGBxrMPHi", + xpub: + "xpub661MyMwAqRbcFtXgS5sYJABqqG9YLmC4Q1Rdap9gSE8NqtwybGhePY2gZ29ESFjqJoCu1Rupje8YtGqsefD265TMg7usUDFdp6W1EGMcet8" + }); + deepStrictEqual(master.derive("m/0'").toJSON(), { + xpriv: + "xprv9uHRZZhk6KAJC1avXpDAp4MDc3sQKNxDiPvvkX8Br5ngLNv1TxvUxt4cV1rGL5hj6KCesnDYUhd7oWgT11eZG7XnxHrnYeSvkzY7d2bhkJ7", + xpub: + "xpub68Gmy5EdvgibQVfPdqkBBCHxA5htiqg55crXYuXoQRKfDBFA1WEjWgP6LHhwBZeNK1VTsfTFUHCdrfp1bgwQ9xv5ski8PX9rL2dZXvgGDnw" + }); + deepStrictEqual(master.derive("m/0'/1").toJSON(), { + xpriv: + "xprv9wTYmMFdV23N2TdNG573QoEsfRrWKQgWeibmLntzniatZvR9BmLnvSxqu53Kw1UmYPxLgboyZQaXwTCg8MSY3H2EU4pWcQDnRnrVA1xe8fs", + xpub: + "xpub6ASuArnXKPbfEwhqN6e3mwBcDTgzisQN1wXN9BJcM47sSikHjJf3UFHKkNAWbWMiGj7Wf5uMash7SyYq527Hqck2AxYysAA7xmALppuCkwQ" + }); + deepStrictEqual(master.derive("m/0'/1/2'").toJSON(), { + xpriv: + "xprv9z4pot5VBttmtdRTWfWQmoH1taj2axGVzFqSb8C9xaxKymcFzXBDptWmT7FwuEzG3ryjH4ktypQSAewRiNMjANTtpgP4mLTj34bhnZX7UiM", + xpub: + "xpub6D4BDPcP2GT577Vvch3R8wDkScZWzQzMMUm3PWbmWvVJrZwQY4VUNgqFJPMM3No2dFDFGTsxxpG5uJh7n7epu4trkrX7x7DogT5Uv6fcLW5" + }); + deepStrictEqual(master.derive("m/0'/1/2'/2").toJSON(), { + xpriv: + "xprvA2JDeKCSNNZky6uBCviVfJSKyQ1mDYahRjijr5idH2WwLsEd4Hsb2Tyh8RfQMuPh7f7RtyzTtdrbdqqsunu5Mm3wDvUAKRHSC34sJ7in334", + xpub: + "xpub6FHa3pjLCk84BayeJxFW2SP4XRrFd1JYnxeLeU8EqN3vDfZmbqBqaGJAyiLjTAwm6ZLRQUMv1ZACTj37sR62cfN7fe5JnJ7dh8zL4fiyLHV" + }); + deepStrictEqual(master.derive("m/0'/1/2'/2/1000000000").toJSON(), { + xpriv: + "xprvA41z7zogVVwxVSgdKUHDy1SKmdb533PjDz7J6N6mV6uS3ze1ai8FHa8kmHScGpWmj4WggLyQjgPie1rFSruoUihUZREPSL39UNdE3BBDu76", + xpub: + "xpub6H1LXWLaKsWFhvm6RVpEL9P4KfRZSW7abD2ttkWP3SSQvnyA8FSVqNTEcYFgJS2UaFcxupHiYkro49S8yGasTvXEYBVPamhGW6cFJodrTHy" + }); + }); + it("Test Vector 2", () => { + const master = HDKey.fromMasterSeed( + hexToBytes( + "fffcf9f6f3f0edeae7e4e1dedbd8d5d2cfccc9c6c3c0bdbab7b4b1aeaba8a5a29f9c999693908d8a8784817e7b7875726f6c696663605d5a5754514e4b484542" + ) + ); + deepStrictEqual(master.derive("m").toJSON(), { + xpriv: + "xprv9s21ZrQH143K31xYSDQpPDxsXRTUcvj2iNHm5NUtrGiGG5e2DtALGdso3pGz6ssrdK4PFmM8NSpSBHNqPqm55Qn3LqFtT2emdEXVYsCzC2U", + xpub: + "xpub661MyMwAqRbcFW31YEwpkMuc5THy2PSt5bDMsktWQcFF8syAmRUapSCGu8ED9W6oDMSgv6Zz8idoc4a6mr8BDzTJY47LJhkJ8UB7WEGuduB" + }); + deepStrictEqual(master.derive("m/0").toJSON(), { + xpriv: + "xprv9vHkqa6EV4sPZHYqZznhT2NPtPCjKuDKGY38FBWLvgaDx45zo9WQRUT3dKYnjwih2yJD9mkrocEZXo1ex8G81dwSM1fwqWpWkeS3v86pgKt", + xpub: + "xpub69H7F5d8KSRgmmdJg2KhpAK8SR3DjMwAdkxj3ZuxV27CprR9LgpeyGmXUbC6wb7ERfvrnKZjXoUmmDznezpbZb7ap6r1D3tgFxHmwMkQTPH" + }); + deepStrictEqual(master.derive("m/0/2147483647'").toJSON(), { + xpriv: + "xprv9wSp6B7kry3Vj9m1zSnLvN3xH8RdsPP1Mh7fAaR7aRLcQMKTR2vidYEeEg2mUCTAwCd6vnxVrcjfy2kRgVsFawNzmjuHc2YmYRmagcEPdU9", + xpub: + "xpub6ASAVgeehLbnwdqV6UKMHVzgqAG8Gr6riv3Fxxpj8ksbH9ebxaEyBLZ85ySDhKiLDBrQSARLq1uNRts8RuJiHjaDMBU4Zn9h8LZNnBC5y4a" + }); + deepStrictEqual(master.derive("m/0/2147483647'/1").toJSON(), { + xpriv: + "xprv9zFnWC6h2cLgpmSA46vutJzBcfJ8yaJGg8cX1e5StJh45BBciYTRXSd25UEPVuesF9yog62tGAQtHjXajPPdbRCHuWS6T8XA2ECKADdw4Ef", + xpub: + "xpub6DF8uhdarytz3FWdA8TvFSvvAh8dP3283MY7p2V4SeE2wyWmG5mg5EwVvmdMVCQcoNJxGoWaU9DCWh89LojfZ537wTfunKau47EL2dhHKon" + }); + deepStrictEqual(master.derive("m/0/2147483647'/1/2147483646'").toJSON(), { + xpriv: + "xprvA1RpRA33e1JQ7ifknakTFpgNXPmW2YvmhqLQYMmrj4xJXXWYpDPS3xz7iAxn8L39njGVyuoseXzU6rcxFLJ8HFsTjSyQbLYnMpCqE2VbFWc", + xpub: + "xpub6ERApfZwUNrhLCkDtcHTcxd75RbzS1ed54G1LkBUHQVHQKqhMkhgbmJbZRkrgZw4koxb5JaHWkY4ALHY2grBGRjaDMzQLcgJvLJuZZvRcEL" + }); + deepStrictEqual( + master.derive("m/0/2147483647'/1/2147483646'/2").toJSON(), + { + xpriv: + "xprvA2nrNbFZABcdryreWet9Ea4LvTJcGsqrMzxHx98MMrotbir7yrKCEXw7nadnHM8Dq38EGfSh6dqA9QWTyefMLEcBYJUuekgW4BYPJcr9E7j", + xpub: + "xpub6FnCn6nSzZAw5Tw7cgR9bi15UV96gLZhjDstkXXxvCLsUXBGXPdSnLFbdpq8p9HmGsApME5hQTZ3emM2rnY5agb9rXpVGyy3bdW6EEgAtqt" + } + ); + }); + it("Test Vector 3", () => { + const master = HDKey.fromMasterSeed( + hexToBytes( + "4b381541583be4423346c643850da4b320e46a87ae3d2a4e6da11eba819cd4acba45d239319ac14f863b8d5ab5a0d0c64d2e8a1e7d1457df2e5a3c51c73235be" + ) + ); + deepStrictEqual(master.derive("m").toJSON(), { + xpriv: + "xprv9s21ZrQH143K25QhxbucbDDuQ4naNntJRi4KUfWT7xo4EKsHt2QJDu7KXp1A3u7Bi1j8ph3EGsZ9Xvz9dGuVrtHHs7pXeTzjuxBrCmmhgC6", + xpub: + "xpub661MyMwAqRbcEZVB4dScxMAdx6d4nFc9nvyvH3v4gJL378CSRZiYmhRoP7mBy6gSPSCYk6SzXPTf3ND1cZAceL7SfJ1Z3GC8vBgp2epUt13" + }); + deepStrictEqual(master.derive("m/0'").toJSON(), { + xpriv: + "xprv9uPDJpEQgRQfDcW7BkF7eTya6RPxXeJCqCJGHuCJ4GiRVLzkTXBAJMu2qaMWPrS7AANYqdq6vcBcBUdJCVVFceUvJFjaPdGZ2y9WACViL4L", + xpub: + "xpub68NZiKmJWnxxS6aaHmn81bvJeTESw724CRDs6HbuccFQN9Ku14VQrADWgqbhhTHBaohPX4CjNLf9fq9MYo6oDaPPLPxSb7gwQN3ih19Zm4Y" + }); + }); + it("Test Vector 4", () => { + const master = HDKey.fromMasterSeed( + hexToBytes( + "3ddd5602285899a946114506157c7997e5444528f3003f6134712147db19b678" + ) + ); + deepStrictEqual(master.derive("m").toJSON(), { + xpriv: + "xprv9s21ZrQH143K48vGoLGRPxgo2JNkJ3J3fqkirQC2zVdk5Dgd5w14S7fRDyHH4dWNHUgkvsvNDCkvAwcSHNAQwhwgNMgZhLtQC63zxwhQmRv", + xpub: + "xpub661MyMwAqRbcGczjuMoRm6dXaLDEhW1u34gKenbeYqAix21mdUKJyuyu5F1rzYGVxyL6tmgBUAEPrEz92mBXjByMRiJdba9wpnN37RLLAXa" + }); + deepStrictEqual(master.derive("m/0'").toJSON(), { + xpriv: + "xprv9vB7xEWwNp9kh1wQRfCCQMnZUEG21LpbR9NPCNN1dwhiZkjjeGRnaALmPXCX7SgjFTiCTT6bXes17boXtjq3xLpcDjzEuGLQBM5ohqkao9G", + xpub: + "xpub69AUMk3qDBi3uW1sXgjCmVjJ2G6WQoYSnNHyzkmdCHEhSZ4tBok37xfFEqHd2AddP56Tqp4o56AePAgCjYdvpW2PU2jbUPFKsav5ut6Ch1m" + }); + deepStrictEqual(master.derive("m/0'/1'").toJSON(), { + xpriv: + "xprv9xJocDuwtYCMNAo3Zw76WENQeAS6WGXQ55RCy7tDJ8oALr4FWkuVoHJeHVAcAqiZLE7Je3vZJHxspZdFHfnBEjHqU5hG1Jaj32dVoS6XLT1", + xpub: + "xpub6BJA1jSqiukeaesWfxe6sNK9CCGaujFFSJLomWHprUL9DePQ4JDkM5d88n49sMGJxrhpjazuXYWdMf17C9T5XnxkopaeS7jGk1GyyVziaMt" + }); + }); + it("Test Vector 5", () => { + const keys = [ + "xpub661MyMwAqRbcEYS8w7XLSVeEsBXy79zSzH1J8vCdxAZningWLdN3zgtU6LBpB85b3D2yc8sfvZU521AAwdZafEz7mnzBBsz4wKY5fTtTQBm", // (pubkey version / prvkey mismatch) + "xprv9s21ZrQH143K24Mfq5zL5MhWK9hUhhGbd45hLXo2Pq2oqzMMo63oStZzFGTQQD3dC4H2D5GBj7vWvSQaaBv5cxi9gafk7NF3pnBju6dwKvH", // (prvkey version / pubkey mismatch) + "xpub661MyMwAqRbcEYS8w7XLSVeEsBXy79zSzH1J8vCdxAZningWLdN3zgtU6Txnt3siSujt9RCVYsx4qHZGc62TG4McvMGcAUjeuwZdduYEvFn", // (invalid pubkey prefix 04) + "xprv9s21ZrQH143K24Mfq5zL5MhWK9hUhhGbd45hLXo2Pq2oqzMMo63oStZzFGpWnsj83BHtEy5Zt8CcDr1UiRXuWCmTQLxEK9vbz5gPstX92JQ", // (invalid prvkey prefix 04) + "xpub661MyMwAqRbcEYS8w7XLSVeEsBXy79zSzH1J8vCdxAZningWLdN3zgtU6N8ZMMXctdiCjxTNq964yKkwrkBJJwpzZS4HS2fxvyYUA4q2Xe4", // (invalid pubkey prefix 01) + "xprv9s21ZrQH143K24Mfq5zL5MhWK9hUhhGbd45hLXo2Pq2oqzMMo63oStZzFAzHGBP2UuGCqWLTAPLcMtD9y5gkZ6Eq3Rjuahrv17fEQ3Qen6J", // (invalid prvkey prefix 01) + "xprv9s2SPatNQ9Vc6GTbVMFPFo7jsaZySyzk7L8n2uqKXJen3KUmvQNTuLh3fhZMBoG3G4ZW1N2kZuHEPY53qmbZzCHshoQnNf4GvELZfqTUrcv", // (zero depth with non-zero parent fingerprint) + "xpub661no6RGEX3uJkY4bNnPcw4URcQTrSibUZ4NqJEw5eBkv7ovTwgiT91XX27VbEXGENhYRCf7hyEbWrR3FewATdCEebj6znwMfQkhRYHRLpJ", // (zero depth with non-zero parent fingerprint) + "xprv9s21ZrQH4r4TsiLvyLXqM9P7k1K3EYhA1kkD6xuquB5i39AU8KF42acDyL3qsDbU9NmZn6MsGSUYZEsuoePmjzsB3eFKSUEh3Gu1N3cqVUN", // (zero depth with non-zero index) + "xpub661MyMwAuDcm6CRQ5N4qiHKrJ39Xe1R1NyfouMKTTWcguwVcfrZJaNvhpebzGerh7gucBvzEQWRugZDuDXjNDRmXzSZe4c7mnTK97pTvGS8", // (zero depth with non-zero index) + "DMwo58pR1QLEFihHiXPVykYB6fJmsTeHvyTp7hRThAtCX8CvYzgPcn8XnmdfHGMQzT7ayAmfo4z3gY5KfbrZWZ6St24UVf2Qgo6oujFktLHdHY4", // (unknown extended key version) + "DMwo58pR1QLEFihHiXPVykYB6fJmsTeHvyTp7hRThAtCX8CvYzgPcn8XnmdfHPmHJiEDXkTiJTVV9rHEBUem2mwVbbNfvT2MTcAqj3nesx8uBf9", // (unknown extended key version) + "xprv9s21ZrQH143K24Mfq5zL5MhWK9hUhhGbd45hLXo2Pq2oqzMMo63oStZzF93Y5wvzdUayhgkkFoicQZcP3y52uPPxFnfoLZB21Teqt1VvEHx", // (private key 0 not in 1..n-1) + "xprv9s21ZrQH143K24Mfq5zL5MhWK9hUhhGbd45hLXo2Pq2oqzMMo63oStZzFAzHGBP2UuGCqWLTAPLcMtD5SDKr24z3aiUvKr9bJpdrcLg1y3G", // (private key n not in 1..n-1) + "xpub661MyMwAqRbcEYS8w7XLSVeEsBXy79zSzH1J8vCdxAZningWLdN3zgtU6Q5JXayek4PRsn35jii4veMimro1xefsM58PgBMrvdYre8QyULY", // (invalid pubkey 020000000000000000000000000000000000000000000000000000000000000007) + "xprv9s21ZrQH143K3QTDL4LXw2F7HEK3wJUD2nW2nRk4stbPy6cq3jPPqjiChkVvvNKmPGJxWUtg6LnF5kejMRNNU3TGtRBeJgk33yuGBxrMPHL" // (invalid checksum) + ]; + for (let c of keys) throws(() => HDKey.fromExtendedKey(c)); + }); + }); }); From 18e07b4fe8235263b45e5abef8b1f4f2fdb6faee Mon Sep 17 00:00:00 2001 From: Paul Miller Date: Fri, 24 Dec 2021 11:25:30 +0600 Subject: [PATCH 055/219] Fix linter. --- src/bip39/index.ts | 4 ++-- src/hdkey.ts | 5 +++-- test/test-vectors/hdkey.ts | 4 +++- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/bip39/index.ts b/src/bip39/index.ts index c228bc0..596bcf2 100644 --- a/src/bip39/index.ts +++ b/src/bip39/index.ts @@ -99,7 +99,7 @@ export function mnemonicToSeed(mnemonic: string, passphrase = "") { assertMnemonic(mnemonic); return pbkdf2Async(sha512, nfkd(mnemonic), salt(passphrase), { c: 2048, - dkLen: 64, + dkLen: 64 }); } @@ -107,6 +107,6 @@ export function mnemonicToSeedSync(mnemonic: string, passphrase = "") { assertMnemonic(mnemonic); return pbkdf2(sha512, nfkd(mnemonic), salt(passphrase), { c: 2048, - dkLen: 64, + dkLen: 64 }); } diff --git a/src/hdkey.ts b/src/hdkey.ts index c2c46c9..d4e24c7 100644 --- a/src/hdkey.ts +++ b/src/hdkey.ts @@ -99,7 +99,7 @@ export class HDKey { ): HDKey { if (8 * seed.length < 128 || 8 * seed.length > 512) { throw new Error( - "HDKey: wrong seed length=${seed.length}. Should be between 128 and 512 bits; 256 bits is advised)" + `HDKey: wrong seed length=${seed.length}. Should be between 128 and 512 bits; 256 bits is advised)` ); } const I = hmac(sha512, MASTER_SECRET, seed); @@ -160,10 +160,11 @@ export class HDKey { this.index = opt.index || 0; this.parentFingerprint = opt.parentFingerprint || 0; if (!this.depth) { - if (this.parentFingerprint || this.index) + if (this.parentFingerprint || this.index) { throw new Error( "HDKey: zero depth with non-zero index/parent fingerprint" ); + } } if (opt.publicKey && opt.privateKey) { throw new Error("HDKey: publicKey and privateKey at same time."); diff --git a/test/test-vectors/hdkey.ts b/test/test-vectors/hdkey.ts index 4acac6b..bb83d70 100644 --- a/test/test-vectors/hdkey.ts +++ b/test/test-vectors/hdkey.ts @@ -599,7 +599,9 @@ describe("hdkey", () => { "xpub661MyMwAqRbcEYS8w7XLSVeEsBXy79zSzH1J8vCdxAZningWLdN3zgtU6Q5JXayek4PRsn35jii4veMimro1xefsM58PgBMrvdYre8QyULY", // (invalid pubkey 020000000000000000000000000000000000000000000000000000000000000007) "xprv9s21ZrQH143K3QTDL4LXw2F7HEK3wJUD2nW2nRk4stbPy6cq3jPPqjiChkVvvNKmPGJxWUtg6LnF5kejMRNNU3TGtRBeJgk33yuGBxrMPHL" // (invalid checksum) ]; - for (let c of keys) throws(() => HDKey.fromExtendedKey(c)); + for (const c of keys) { + throws(() => HDKey.fromExtendedKey(c)); + } }); }); }); From 8377186183d6cedf4582b952c7e577dd3b60314f Mon Sep 17 00:00:00 2001 From: Paul Miller Date: Fri, 24 Dec 2021 11:40:59 +0600 Subject: [PATCH 056/219] hdkey: Improve toU32 --- src/hdkey.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/hdkey.ts b/src/hdkey.ts index d4e24c7..7a1d3f0 100644 --- a/src/hdkey.ts +++ b/src/hdkey.ts @@ -40,6 +40,9 @@ export interface Versions { const hash160 = (data: Uint8Array) => ripemd160(sha256(data)); const fromU32 = (data: Uint8Array) => createView(data).getUint32(0, false); const toU32 = (n: number) => { + if (!Number.isSafeInteger(n) || n < 0 || n >= 2 ** 32) { + throw new Error(`Invalid number=${n}. Should be [0, 2**32)`); + } const buf = new Uint8Array(4); createView(buf).setUint32(0, n, false); return buf; @@ -224,8 +227,7 @@ export class HDKey { if (!this.pubKey || !this.chainCode) { throw new Error("No publicKey or chainCode set"); } - let data = new Uint8Array(4); - createView(data).setUint32(0, index, false); + let data = toU32(index); if (index >= HARDENED_OFFSET) { // Hardened const priv = this.privateKey; From 2fe90d980bb538c59e00eaa7cfdfdb91e54a9d9d Mon Sep 17 00:00:00 2001 From: Patricio Palladino Date: Fri, 24 Dec 2021 10:55:24 -0300 Subject: [PATCH 057/219] Bump version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b7a0206..cef8452 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ethereum-cryptography", - "version": "0.2.3", + "version": "0.2.4", "description": "All the cryptographic primitives used in Ethereum", "contributors": [ { From 142cd6b89bf05172d8859acd3c8e1b3d12b1bce5 Mon Sep 17 00:00:00 2001 From: Paul Miller Date: Fri, 24 Dec 2021 23:43:40 +0600 Subject: [PATCH 058/219] Bump noble-hashes for re-testing --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index cef8452..b4f7346 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ ], "dependencies": { "micro-base": "^0.10.0", - "@noble/hashes": "^0.5.2", + "@noble/hashes": "^0.5.6", "@noble/secp256k1": "^1.3.3" }, "browser": { From ea812a3ec55e1049626930b1346b479e1a2ed646 Mon Sep 17 00:00:00 2001 From: Paul Miller Date: Fri, 24 Dec 2021 23:50:12 +0600 Subject: [PATCH 059/219] Improve hdkey a bit --- src/hdkey.ts | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/src/hdkey.ts b/src/hdkey.ts index 7a1d3f0..fb0740b 100644 --- a/src/hdkey.ts +++ b/src/hdkey.ts @@ -40,8 +40,8 @@ export interface Versions { const hash160 = (data: Uint8Array) => ripemd160(sha256(data)); const fromU32 = (data: Uint8Array) => createView(data).getUint32(0, false); const toU32 = (n: number) => { - if (!Number.isSafeInteger(n) || n < 0 || n >= 2 ** 32) { - throw new Error(`Invalid number=${n}. Should be [0, 2**32)`); + if (!Number.isSafeInteger(n) || n < 0 || n > 2 ** 32 - 1) { + throw new Error(`Invalid number=${n}. Should be from 1 to 2 ** 32 - 1`); } const buf = new Uint8Array(4); createView(buf).setUint32(0, n, false); @@ -219,11 +219,6 @@ export class HDKey { } public deriveChild(index: number): HDKey { - if (!Number.isSafeInteger(index) || index < 0 || index >= 2 ** 32) { - throw new Error( - `Child index should be positive 32-bit integer, not ${index}` - ); - } if (!this.pubKey || !this.chainCode) { throw new Error("No publicKey or chainCode set"); } From 95e052d1a3f008bd63bf3d28eedfb21f9e7420ed Mon Sep 17 00:00:00 2001 From: Paul Miller Date: Fri, 31 Dec 2021 20:35:03 +0200 Subject: [PATCH 060/219] Move more utils into noble-hashes --- README.md | 15 ++------------ package.json | 4 ++-- src/hdkey.ts | 10 +++++----- src/secp256k1.ts | 3 ++- src/utils.ts | 52 +++++++++--------------------------------------- 5 files changed, 20 insertions(+), 64 deletions(-) diff --git a/README.md b/README.md index 616dd81..37e1e65 100644 --- a/README.md +++ b/README.md @@ -113,7 +113,7 @@ const { utf8ToBytes } = require("ethereum-cryptography/utils"); sha256(utf8ToBytes("abc")) // If you need hex -const { toHex } = require("ethereum-cryptography/utils"); +const { bytesToHex as toHex } = require("ethereum-cryptography/utils"); toHex(sha256(utf8ToBytes("abc"))) ``` @@ -208,7 +208,7 @@ Note: if you've been using ethereum-cryptography v0.1, it had different API. We' This module exports a single class `HDKey`, which should be used like this: ```ts -const { HDKey } = require("ethereum-cryptography/secp256k1"); +const { HDKey } = require("ethereum-cryptography/hdkey"); const hdkey1 = HDKey.fromMasterSeed(seed); const hdkey2 = HDKey.fromExtendedKey(base58key); const hdkey3 = HDKey.fromJSON({ xpriv: string }); @@ -269,17 +269,6 @@ but it's backed by this package's primitives, and has built-in TypeScript types. Its only difference is that it has to be be used with a named import. The implementation is [loosely based on hdkey, which has MIT License](#LICENSE). -```js -const { HDKey } = require("ethereum-cryptography/hdkey"); -const { hexToBytes } = require("ethereum-cryptography/utils"); - -const seed = "fffcf9f6f3f0edeae7e4e1dedbd8d5d2cfccc9c6c3c0bdbab7b4b1aeaba8a5a29f9c999693908d8a8784817e7b7875726f6c696663605d5a5754514e4b484542"; -const hdkey = HDKey.fromMasterSeed(hexToBytes(seed)); -const childkey = hdkey.derive("m/0/2147483647'/1"); - -console.log(childkey.privateExtendedKey); -``` - ## BIP39 Mnemonic Seed Phrase ```ts diff --git a/package.json b/package.json index b4f7346..0b58110 100644 --- a/package.json +++ b/package.json @@ -24,8 +24,8 @@ "*.d.ts.map" ], "dependencies": { - "micro-base": "^0.10.0", - "@noble/hashes": "^0.5.6", + "micro-base": "^0.10.1", + "@noble/hashes": "^0.5.7", "@noble/secp256k1": "^1.3.3" }, "browser": { diff --git a/src/hdkey.ts b/src/hdkey.ts index fb0740b..a81c844 100644 --- a/src/hdkey.ts +++ b/src/hdkey.ts @@ -2,16 +2,16 @@ import { hmac } from "@noble/hashes/hmac"; import { ripemd160 } from "@noble/hashes/ripemd160"; import { sha256 } from "@noble/hashes/sha256"; import { sha512 } from "@noble/hashes/sha512"; -import { bytesToHex } from "@noble/hashes/utils"; -import { base58check } from "micro-base"; -import * as secp from "./secp256k1"; import { assertBytes, + bytesToHex, concatBytes, createView, hexToBytes, utf8ToBytes -} from "./utils"; +} from "@noble/hashes/utils"; +import { base58check } from "micro-base"; +import * as secp from "./secp256k1"; const base58c = base58check(sha256); function bytesToNumber(bytes: Uint8Array): bigint { @@ -41,7 +41,7 @@ const hash160 = (data: Uint8Array) => ripemd160(sha256(data)); const fromU32 = (data: Uint8Array) => createView(data).getUint32(0, false); const toU32 = (n: number) => { if (!Number.isSafeInteger(n) || n < 0 || n > 2 ** 32 - 1) { - throw new Error(`Invalid number=${n}. Should be from 1 to 2 ** 32 - 1`); + throw new Error(`Invalid number=${n}. Should be from 0 to 2 ** 32 - 1`); } const buf = new Uint8Array(4); createView(buf).setUint32(0, n, false); diff --git a/src/secp256k1.ts b/src/secp256k1.ts index f2636c1..8efc5b3 100644 --- a/src/secp256k1.ts +++ b/src/secp256k1.ts @@ -10,7 +10,8 @@ export { utils, Point, Signature, - CURVE + CURVE, + schnorr } from "@noble/secp256k1"; // Enable sync API for noble-secp256k1 diff --git a/src/utils.ts b/src/utils.ts index 1420897..0583236 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -1,32 +1,16 @@ // buf.toString('hex') -> toHex(buf) import { assertBytes } from "@noble/hashes/utils"; export { + assertBool, assertBytes, + bytesToHex, bytesToHex as toHex, - createView + concatBytes, + hexToBytes, + createView, + utf8ToBytes } from "@noble/hashes/utils"; -// Buffer.from(hex, 'hex') -> hexToBytes(hex) -export function hexToBytes(hex: string): Uint8Array { - if (typeof hex !== "string") { - throw new TypeError(`hexToBytes: expected string, got ${typeof hex}`); - } - if (hex.length % 2) { - throw new Error("hexToBytes: received invalid unpadded hex"); - } - const array = new Uint8Array(hex.length / 2); - for (let i = 0; i < array.length; i++) { - const j = i * 2; - array[i] = Number.parseInt(hex.slice(j, j + 2), 16); - } - return array; -} -// Buffer.from(s, 'utf8') -> utf8ToBytes(s) -export function utf8ToBytes(s: string) { - if (typeof s !== "string") { - throw new TypeError(`utf8ToBytes expected string, got ${typeof s}`); - } - return new TextEncoder().encode(s); -} + // buf.toString('utf8') -> bytesToUtf8(buf) export function bytesToUtf8(data: Uint8Array): string { if (!(data instanceof Uint8Array)) { @@ -34,6 +18,7 @@ export function bytesToUtf8(data: Uint8Array): string { } return new TextDecoder().decode(data); } + // buf.equals(buf2) -> equalsBytes(buf, buf2) export function equalsBytes(a: Uint8Array, b: Uint8Array): boolean { if (a.length !== b.length) { @@ -46,27 +31,8 @@ export function equalsBytes(a: Uint8Array, b: Uint8Array): boolean { } return true; } -// Buffer.concat([buf1, buf2]) -> concatBytes(buf1, buf2) -export function concatBytes(...arrays: Uint8Array[]): Uint8Array { - if (arrays.length === 1) { - return arrays[0]; - } - const length = arrays.reduce((a, arr) => a + arr.length, 0); - const result = new Uint8Array(length); - for (let i = 0, pad = 0; i < arrays.length; i++) { - const arr = arrays[i]; - result.set(arr, pad); - pad += arr.length; - } - return result; -} -// Internal utils -export function assertBool(b: boolean) { - if (typeof b !== "boolean") { - throw new Error(`Expected boolean, not ${b}`); - } -} +// Internal utils export function wrapHash(hash: (msg: Uint8Array) => Uint8Array) { return (msg: Uint8Array) => { assertBytes(msg); From e155e37b5b100f386d80083779a1949b855062b2 Mon Sep 17 00:00:00 2001 From: Paul Miller Date: Tue, 4 Jan 2022 23:39:57 +0200 Subject: [PATCH 061/219] Disallow zero tweaks --- src/secp256k1-compat.ts | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/secp256k1-compat.ts b/src/secp256k1-compat.ts index 8c9d631..81b2914 100644 --- a/src/secp256k1-compat.ts +++ b/src/secp256k1-compat.ts @@ -3,7 +3,7 @@ import * as secp from "./secp256k1"; import { assertBool, assertBytes, hexToBytes, toHex } from "./utils"; // Legacy compatibility layer for elliptic via noble-secp256k1 -// Use `curve-secp256k1` module directly instead +// Use `secp256k1` module directly instead // Copy-paste from secp256k1, maybe export it? const bytesToNumber = (bytes: Uint8Array) => hexToNumber(toHex(bytes)); @@ -166,6 +166,9 @@ export function privateKeyTweakAdd( assertBytes(privateKey, 32); assertBytes(tweak, 32); let bn = bytesToNumber(tweak); + if (bn === 0n) { + throw new Error("Tweak must not be zero"); + } if (bn >= ORDER) { throw new Error("Tweak bigger than curve order"); } @@ -231,6 +234,9 @@ export function publicKeyTweakAdd( assertBool(compressed); const p1 = secp.Point.fromHex(publicKey); const p2 = secp.Point.fromPrivateKey(tweak); + if (p2.equals(secp.Point.ZERO)) { + throw new Error("Tweak must not be zero"); + } const point = p1.add(p2); return output(out, compressed ? 33 : 65, point.toRawBytes(compressed)); } @@ -245,6 +251,9 @@ export function publicKeyTweakMul( assertBytes(tweak, 32); assertBool(compressed); const bn = bytesToNumber(tweak); + if (bn === 0n) { + throw new Error("Tweak must not be zero"); + } if (bn <= 0 || bn >= ORDER) { throw new Error("Tweak is zero or bigger than curve order"); } @@ -259,6 +268,9 @@ export function privateKeyTweakMul( assertBytes(privateKey, 32); assertBytes(tweak, 32); let bn = bytesToNumber(tweak); + if (bn === 0n) { + throw new Error("Tweak must not be zero"); + } if (bn >= ORDER) { throw new Error("Tweak bigger than curve order"); } From 9a292c8a4aac76efa6e31f745a3e4dbd30c02de2 Mon Sep 17 00:00:00 2001 From: Paul Miller Date: Wed, 5 Jan 2022 01:55:42 +0200 Subject: [PATCH 062/219] Fix tests --- package.json | 2 +- src/secp256k1-compat.ts | 3 ++- test/test-vectors/secp256k1.ts | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 0b58110..8d0396e 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ "dependencies": { "micro-base": "^0.10.1", "@noble/hashes": "^0.5.7", - "@noble/secp256k1": "^1.3.3" + "@noble/secp256k1": "^1.4.0" }, "browser": { "crypto": false diff --git a/src/secp256k1-compat.ts b/src/secp256k1-compat.ts index 81b2914..e3ede25 100644 --- a/src/secp256k1-compat.ts +++ b/src/secp256k1-compat.ts @@ -150,13 +150,14 @@ export function ecdsaVerify( if (r >= ORDER || s >= ORDER) { throw new Error("Cannot parse signature"); } + const pub = secp.Point.fromHex(publicKey); // should not throw error let sig; try { sig = getSignature(signature); } catch (error) { return false; } - return secp.verify(sig, msgHash, publicKey); + return secp.verify(sig, msgHash, pub); } export function privateKeyTweakAdd( diff --git a/test/test-vectors/secp256k1.ts b/test/test-vectors/secp256k1.ts index 7092932..8a84d94 100644 --- a/test/test-vectors/secp256k1.ts +++ b/test/test-vectors/secp256k1.ts @@ -1,7 +1,7 @@ import * as secp from "../../src/secp256k1"; import { deepStrictEqual } from "./assert"; -describe("curve-secp256k1", () => { +describe("secp256k1", () => { it("should verify msg bb5a...", async () => { const msg = "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023"; @@ -11,6 +11,6 @@ describe("curve-secp256k1", () => { const s = 115792089237316195423570985008687907852837564279074904382605163141518161494334n; const pub = new secp.Point(x, y); const sig = new secp.Signature(r, s); - deepStrictEqual(secp.verify(sig, msg, pub), true); + deepStrictEqual(secp.verify(sig, msg, pub, { strict: false }), true); }); }); From 01ef1c760528eb4aab0817c2137ddaa5f7a18714 Mon Sep 17 00:00:00 2001 From: Paul Miller Date: Wed, 5 Jan 2022 11:54:26 +0200 Subject: [PATCH 063/219] Disallow tweaks --- src/secp256k1-compat.ts | 27 ++++++++++----------------- 1 file changed, 10 insertions(+), 17 deletions(-) diff --git a/src/secp256k1-compat.ts b/src/secp256k1-compat.ts index e3ede25..638dcce 100644 --- a/src/secp256k1-compat.ts +++ b/src/secp256k1-compat.ts @@ -2,8 +2,8 @@ import { sha256 } from "@noble/hashes/sha256"; import * as secp from "./secp256k1"; import { assertBool, assertBytes, hexToBytes, toHex } from "./utils"; -// Legacy compatibility layer for elliptic via noble-secp256k1 -// Use `secp256k1` module directly instead +// Use `secp256k1` module directly. +// This is a legacy compatibility layer for `tiny-secp256k1` via noble-secp256k1 // Copy-paste from secp256k1, maybe export it? const bytesToNumber = (bytes: Uint8Array) => hexToNumber(toHex(bytes)); @@ -116,7 +116,6 @@ export function ecdsaSign( } const [signature, recid] = secp.signSync(msgHash, privateKey, { recovered: true, - canonical: true, der: false }); return { signature: output(out, 64, signature), recid }; @@ -235,10 +234,10 @@ export function publicKeyTweakAdd( assertBool(compressed); const p1 = secp.Point.fromHex(publicKey); const p2 = secp.Point.fromPrivateKey(tweak); - if (p2.equals(secp.Point.ZERO)) { + const point = p1.add(p2); + if (p2.equals(secp.Point.ZERO) || point.equals(secp.Point.ZERO)) { throw new Error("Tweak must not be zero"); } - const point = p1.add(p2); return output(out, compressed ? 33 : 65, point.toRawBytes(compressed)); } @@ -255,7 +254,7 @@ export function publicKeyTweakMul( if (bn === 0n) { throw new Error("Tweak must not be zero"); } - if (bn <= 0 || bn >= ORDER) { + if (bn <= 1 || bn >= ORDER) { throw new Error("Tweak is zero or bigger than curve order"); } const point = secp.Point.fromHex(publicKey).multiply(bn); @@ -269,22 +268,16 @@ export function privateKeyTweakMul( assertBytes(privateKey, 32); assertBytes(tweak, 32); let bn = bytesToNumber(tweak); - if (bn === 0n) { - throw new Error("Tweak must not be zero"); - } - if (bn >= ORDER) { - throw new Error("Tweak bigger than curve order"); - } - bn = mod(bn * bytesToNumber(privateKey), ORDER); - if (bn >= ORDER) { - bn -= ORDER; + if (bn <= 1 || bn >= ORDER) { + throw new Error("Tweak is zero or bigger than curve order"); } - if (bn === 0n) { + const res = mod(bn * bytesToNumber(privateKey), ORDER); + if (res === 0n) { throw new Error( "The tweak was out of range or the resulted private key is invalid" ); } - privateKey.set(hexToBytes(numberToHex(bn))); + privateKey.set(hexToBytes(numberToHex(res))); return privateKey; } // internal -> DER From c1015b9255eb3d6a6a3b6ed122726da6b29b30ff Mon Sep 17 00:00:00 2001 From: Paul Miller Date: Wed, 5 Jan 2022 11:54:41 +0200 Subject: [PATCH 064/219] Lint --- src/secp256k1-compat.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/secp256k1-compat.ts b/src/secp256k1-compat.ts index 638dcce..85b2fef 100644 --- a/src/secp256k1-compat.ts +++ b/src/secp256k1-compat.ts @@ -267,7 +267,7 @@ export function privateKeyTweakMul( ): Uint8Array { assertBytes(privateKey, 32); assertBytes(tweak, 32); - let bn = bytesToNumber(tweak); + const bn = bytesToNumber(tweak); if (bn <= 1 || bn >= ORDER) { throw new Error("Tweak is zero or bigger than curve order"); } From 8a51824c5ad32fc806888ce83983a9f23a337b66 Mon Sep 17 00:00:00 2001 From: Patricio Palladino Date: Wed, 5 Jan 2022 19:14:04 -0300 Subject: [PATCH 065/219] Update src/secp256k1-compat.ts --- src/secp256k1-compat.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/secp256k1-compat.ts b/src/secp256k1-compat.ts index 85b2fef..d01bd34 100644 --- a/src/secp256k1-compat.ts +++ b/src/secp256k1-compat.ts @@ -3,7 +3,7 @@ import * as secp from "./secp256k1"; import { assertBool, assertBytes, hexToBytes, toHex } from "./utils"; // Use `secp256k1` module directly. -// This is a legacy compatibility layer for `tiny-secp256k1` via noble-secp256k1 +// This is a legacy compatibility layer for the npm package `secp256k1` via noble-secp256k1 // Copy-paste from secp256k1, maybe export it? const bytesToNumber = (bytes: Uint8Array) => hexToNumber(toHex(bytes)); From f23838fa8c9363ba924f8faa62ac929f0adcb5e5 Mon Sep 17 00:00:00 2001 From: Paul Miller Date: Fri, 7 Jan 2022 23:35:03 +0200 Subject: [PATCH 066/219] Audit --- README.md | 49 ++++++++++++------------- audit/2022-01-05-cure53-audit-nbl2.pdf | Bin 0 -> 319415 bytes audit/README.md | 3 ++ 3 files changed, 27 insertions(+), 25 deletions(-) create mode 100644 audit/2022-01-05-cure53-audit-nbl2.pdf create mode 100644 audit/README.md diff --git a/README.md b/README.md index 37e1e65..097a3af 100644 --- a/README.md +++ b/README.md @@ -2,9 +2,15 @@ [![npm version][1]][2] [![Travis CI][3]][4] [![license][5]][6] [![Types][7]][8] -This package contains all pure-js cryptographic primitives normally used when +All pure-js cryptographic primitives normally used when developing Javascript / TypeScript applications and tools for Ethereum. +**January 2022 update:** Version 1.0 of the package is out. The module has been completely rewritten: + +- **6x smaller:** 4,000 lines of code instead of 22,438 (with all deps); 185KB instead of 755KB +- 3 dependencies by one author instead of 38 by 5 authors +- [Audited](#security) by an independent security firm + The cryptographic primitives included are: * [Hashes: SHA256, keccak-256, RIPEMD160, BLAKE2b](#hashes-sha256-keccak-256-ripemd160-blake2b) @@ -15,30 +21,16 @@ The cryptographic primitives included are: * [BIP39 Mnemonic phrases](#bip39-mnemonic-phrases) * [AES Encryption](#aes-encryption) -**October 2021 update:** We're releasing **experimental** version 0.2 of the package. -The module has been completely rewritten: - -- ~6x smaller: 4,000 lines of code instead of 22,438 (with all deps); 185KB instead of 755KB -- 3 dependencies (pending an audit) instead of 38 -- **Same functionality**, all old APIs remain the same except for two breaking changes: - 1. We return `Uint8Array` from all methods that worked with `Buffer` before. - `Buffer` has never been supported in browsers, while `Uint8Array`s are supported natively in both - browsers and node.js. See [Upgrading](#upgrading) - 2. We target runtimes with [bigint](https://caniuse.com/bigint) support, - which is Chrome 67+, Edge 79+, Firefox 68+, Safari 14+, node.js 10+. If you need to support older runtimes, use `ethereum-cryptography@0.1` - 3. If you've used `secp256k1`, [rename it to `secp256k1-compat`](#legacy-secp256k1-compatibility-layer) -- The new module [has not been audited yet](#security), but it's in the process of getting the audit. Use it at your own risk - ## Usage Use NPM / Yarn in node.js / browser: ```bash # NPM -npm install ethereum-cryptography@next +npm install ethereum-cryptography # Yarn -yarn add ethereum-cryptography@next +yarn add ethereum-cryptography ``` See [browser usage](#browser-usage) for information on using the package with major Javascript bundlers. It is @@ -205,6 +197,9 @@ Note: if you've been using ethereum-cryptography v0.1, it had different API. We' ## BIP32 HD Keygen +Hierarchical deterministic (HD) wallets that conform to BIP32 standard. +Also available as standalone package [micro-bip32](https://github.com/paulmillr/micro-bip32). + This module exports a single class `HDKey`, which should be used like this: ```ts @@ -283,6 +278,8 @@ function mnemonicToSeedSync(mnemonic: string, passphrase: string = ""): Uint8Arr The `bip39` submodule provides functions to generate, validate and use seed recovery phrases according to [BIP39](https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki). +Also available as standalone package [micro-bip39](https://github.com/paulmillr/micro-bip39). + ```js const { generateMnemonic } = require("ethereum-cryptography/bip39"); const { wordlist } = require("ethereum-cryptography/bip39/wordlists/english"); @@ -449,14 +446,16 @@ you found another primitive that is missing. ## Upgrading -Version 0.2 changes from 0.1: +Version 1.0 changes from 0.1: + +**Same functionality**, all old APIs remain the same except for the breaking changes: -- **Breaking:** we target runtimes with [bigint](https://caniuse.com/bigint) support, - which is Chrome 67+, Edge 79+, Firefox 68+, Safari 14+, node.js 10+. If you need to support - older runtimes, use `ethereum-cryptography@0.1` -- **Breaking:** we return `Uint8Array` from all methods that worked with `Buffer` before. - `Buffer` has never been supported in browsers, while `Uint8Array`s are supported natively in both - browsers and node.js: +1. We return `Uint8Array` from all methods that worked with `Buffer` before. +`Buffer` has never been supported in browsers, while `Uint8Array`s are supported natively in both +browsers and node.js. See [Upgrading](#upgrading) +2. We target runtimes with [bigint](https://caniuse.com/bigint) support, +which is Chrome 67+, Edge 79+, Firefox 68+, Safari 14+, node.js 10+. If you need to support older runtimes, use `ethereum-cryptography@0.1` +3. If you've used `secp256k1`, [rename it to `secp256k1-compat`](#legacy-secp256k1-compatibility-layer) ``` const { sha256 } = require("ethereum-cryptography/sha256"); @@ -475,7 +474,7 @@ const hashbo = hashb.toString("hex"); ## Security -This library is in the process of getting a security audit. +Audited by Cure53 on Jan 5, 2022. Check out the audit [PDF](./audit/2022-01-05-cure53-audit-nbl2.pdf) & [URL](https://cure53.de/pentest-report_hashing-libs.pdf). ## License diff --git a/audit/2022-01-05-cure53-audit-nbl2.pdf b/audit/2022-01-05-cure53-audit-nbl2.pdf new file mode 100644 index 0000000000000000000000000000000000000000..1a7c9d5ae546e5b1dbe56d62fce4d67a11dd8173 GIT binary patch literal 319415 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 ZmBP+qUi8{k{kHjPIUr|5a6^R@JUO*I0Yjn!oit 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