From 706b4aa323c5fe51ab440f6b206df07d2486f7fd Mon Sep 17 00:00:00 2001 From: Dernbu <63487502+Dernbu@users.noreply.github.com> Date: Sat, 8 Apr 2023 22:09:59 +0800 Subject: [PATCH 1/9] minimal wasm MVP --- modules.json | 5 ++++- package.json | 2 ++ src/bundles/wasm/index.ts | 12 ++++++++++++ src/bundles/wasm/wabt.ts | 23 +++++++++++++++++++++++ yarn.lock | 30 ++++++++++++++++++++++++++++++ 5 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 src/bundles/wasm/index.ts create mode 100644 src/bundles/wasm/wabt.ts diff --git a/modules.json b/modules.json index de3832b5a..d53e9bf51 100644 --- a/modules.json +++ b/modules.json @@ -85,5 +85,8 @@ }, "remote_execution": { "tabs": [] + }, + "wasm": { + "tabs": [] } -} +} \ No newline at end of file diff --git a/package.json b/package.json index 88d736142..7f440c2e1 100644 --- a/package.json +++ b/package.json @@ -97,6 +97,8 @@ "react-ace": "^10.1.0", "react-dom": "^17.0.2", "regl": "^2.1.0", + "source-academy-utils": "^1.0.0", + "source-academy-wabt": "^1.0.4", "tslib": "^2.3.1" }, "jest": { diff --git a/src/bundles/wasm/index.ts b/src/bundles/wasm/index.ts new file mode 100644 index 000000000..3358c57a3 --- /dev/null +++ b/src/bundles/wasm/index.ts @@ -0,0 +1,12 @@ +/** + * A single sentence summarising the module (this sentence is displayed larger). + * + * Sentences describing the module. More sentences about the module. + * + * @module wasm + * @author Kim Yongbeom + */ +export { + wcompile, + wrun, +} from './wabt'; diff --git a/src/bundles/wasm/wabt.ts b/src/bundles/wasm/wabt.ts new file mode 100644 index 000000000..47dbbfe6e --- /dev/null +++ b/src/bundles/wasm/wabt.ts @@ -0,0 +1,23 @@ +import { getParseTree, compileParseTree, compile } from 'source-academy-wabt'; +import {objectToLinkedList} from 'source-academy-utils'; + +/** + * Compile stuff + * @param program + * @returns + */ +export const wcompile = (program: string) => Array.from(compile(program)); + +/** + * Run stuff + * @param buffer + * @returns + */ +export const wrun = (buffer: number[] | Uint8Array) => { + if (buffer instanceof Array) { + buffer = new Uint8Array(buffer); + } + + const exps = new WebAssembly.Instance(new WebAssembly.Module(buffer)).exports; + return objectToLinkedList(exps); +}; diff --git a/yarn.lock b/yarn.lock index c6779f244..17b7c946e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1694,6 +1694,11 @@ cjs-module-lexer@^1.0.0: resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz#9f84ba3244a512f3a54e5277e8eef4c489864e40" integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA== +class-transformer@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/class-transformer/-/class-transformer-0.5.1.tgz#24147d5dffd2a6cea930a3250a677addf96ab336" + integrity sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw== + classnames@^2.3.1: version "2.3.2" resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.2.tgz#351d813bf0137fcc6a76a16b88208d2560a0d924" @@ -4926,6 +4931,11 @@ readable-stream@~2.3.6: string_decoder "~1.1.1" util-deprecate "~1.0.1" +reflect-metadata@^0.1.13: + version "0.1.13" + resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.13.tgz#67ae3ca57c972a2aa1642b10fe363fe32d49dc08" + integrity sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg== + regenerator-runtime@^0.13.11: version "0.13.11" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" @@ -5194,6 +5204,21 @@ socks@^2.6.2: ip "^2.0.0" smart-buffer "^4.2.0" +source-academy-utils@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/source-academy-utils/-/source-academy-utils-1.0.1.tgz#5fb596c952c86a6751207de6df5f5d01213d1054" + integrity sha512-xcY9kHeS+E5XY/29KPDKxWcdO3858I7Kb/IxuetNSGCrfhkIi3rVE69lsCkY1WwK6x2AwiqX2qHxrq/htfsPRQ== + +source-academy-wabt@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/source-academy-wabt/-/source-academy-wabt-1.0.6.tgz#1b221a23fe526a77c79e84fd0ddc102b3d37c15a" + integrity sha512-encnYj7gAYslqdz/DG/JCR3GkBzpo0E78gXmgyfRUZrqpgc7j/scQnxnSrBHXS2XFVF+JjvN/asIhaZ+/peXLQ== + dependencies: + class-transformer "^0.5.1" + lodash "^4.17.21" + reflect-metadata "^0.1.13" + typescript "4" + source-map-support@0.5.13: version "0.5.13" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" @@ -5572,6 +5597,11 @@ typedoc@^0.23.23: minimatch "^6.1.6" shiki "^0.14.1" +typescript@4: + version "4.9.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" + integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== + typescript@4.8: version "4.8.4" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.8.4.tgz#c464abca159669597be5f96b8943500b238e60e6" From 980ba228cacfa0bd109db83cf95ac06673a76d4b Mon Sep 17 00:00:00 2001 From: Dernbu <63487502+Dernbu@users.noreply.github.com> Date: Sun, 9 Apr 2023 12:18:12 +0800 Subject: [PATCH 2/9] Add comments for module methods --- src/bundles/wasm/wabt.ts | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/bundles/wasm/wabt.ts b/src/bundles/wasm/wabt.ts index 47dbbfe6e..a108fd1cf 100644 --- a/src/bundles/wasm/wabt.ts +++ b/src/bundles/wasm/wabt.ts @@ -1,17 +1,17 @@ -import { getParseTree, compileParseTree, compile } from 'source-academy-wabt'; -import {objectToLinkedList} from 'source-academy-utils'; +import { compile } from 'source-academy-wabt'; +import { objectToLinkedList } from 'source-academy-utils'; /** - * Compile stuff - * @param program - * @returns + * Compile a (hopefully valid) WebAssembly Text module to binary. + * @param program program to compile + * @returns an array of 8-bit unsigned integers. */ export const wcompile = (program: string) => Array.from(compile(program)); /** - * Run stuff - * @param buffer - * @returns + * Run a compiled WebAssembly Binary Buffer. + * @param buffer an array of 8-bit unsigned integers to run + * @returns a linked list of exports that the relevant WebAssembly Module exports */ export const wrun = (buffer: number[] | Uint8Array) => { if (buffer instanceof Array) { From a3c96dc45e1295a511fb759846af990cd75d71aa Mon Sep 17 00:00:00 2001 From: Dernbu <63487502+Dernbu@users.noreply.github.com> Date: Tue, 11 Apr 2023 14:54:07 +0800 Subject: [PATCH 3/9] Add documentation --- src/bundles/wasm/index.ts | 79 ++++++++++++++++++++++++++++++++++++++- src/bundles/wasm/wabt.ts | 2 +- yarn.lock | 12 +++--- 3 files changed, 84 insertions(+), 9 deletions(-) diff --git a/src/bundles/wasm/index.ts b/src/bundles/wasm/index.ts index 3358c57a3..57ff2ba61 100644 --- a/src/bundles/wasm/index.ts +++ b/src/bundles/wasm/index.ts @@ -1,7 +1,82 @@ /** - * A single sentence summarising the module (this sentence is displayed larger). + * WebAssembly Module for Source Academy, for developing with WebAssembly Text and Binaries. * - * Sentences describing the module. More sentences about the module. + * Examples: + * Simple 'add' library: + * ```wat + * import {wcompile, wrun} from "wasm"; + * + * const program = ` + * (module + * (func (param f64) (param f64) (result f64) + * local.get 0 + * local.get 1 + * f64.add) + * (export "add" (func 0)) + * ) + * `; + * + * + * const binary = wcompile(program); + * const exports = wrun(binary); + * + * display(binary); + * display_list(exports); + * + * const add_fn = head(tail(exports)); + * + * display(add_fn(10, 35)); + * ``` + * + * 'Calculator Language': + * ```wat + * // Type your program in here! + * import {wcompile, wrun} from "wasm"; + * + * const program = ` + * (module + * (func (param f64) (param f64) (result f64) + * local.get 0 + * local.get 1 + * f64.add) + * (func (param f64) (param f64) (result f64) + * local.get 0 + * local.get 1 + * f64.sub) + * (func (param f64) (param f64) (result f64) + * local.get 0 + * local.get 1 + * f64.mul) + * (func (param f64) (param f64) (result f64) + * local.get 0 + * local.get 1 + * f64.div) + * (export "add" (func 0)) + * (export "sub" (func 1)) + * (export "mul" (func 2)) + * (export "div" (func 3)) + * )`; + * + * + * const encoding = wcompile(program); + * let exports = wrun(encoding); + * + * display_list(exports); + * + * const div = head(tail(exports)); + * exports = tail(tail(exports)); + * const mul = head(tail(exports)); + * exports = tail(tail(exports)); + * const sub = head(tail(exports)); + * exports = tail(tail(exports)); + * const add = head(tail(exports)); + * + * display(div(10, -35)); + * display(mul(10, 12347)); + * display(sub(12347, 12347)); + * display(add(10, 0)); + * ``` + * * * @module wasm * @author Kim Yongbeom diff --git a/src/bundles/wasm/wabt.ts b/src/bundles/wasm/wabt.ts index a108fd1cf..be65124e8 100644 --- a/src/bundles/wasm/wabt.ts +++ b/src/bundles/wasm/wabt.ts @@ -20,4 +20,4 @@ export const wrun = (buffer: number[] | Uint8Array) => { const exps = new WebAssembly.Instance(new WebAssembly.Module(buffer)).exports; return objectToLinkedList(exps); -}; +}; \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 17b7c946e..45a770e17 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5205,14 +5205,14 @@ socks@^2.6.2: smart-buffer "^4.2.0" source-academy-utils@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/source-academy-utils/-/source-academy-utils-1.0.1.tgz#5fb596c952c86a6751207de6df5f5d01213d1054" - integrity sha512-xcY9kHeS+E5XY/29KPDKxWcdO3858I7Kb/IxuetNSGCrfhkIi3rVE69lsCkY1WwK6x2AwiqX2qHxrq/htfsPRQ== + version "1.0.2" + resolved "https://registry.yarnpkg.com/source-academy-utils/-/source-academy-utils-1.0.2.tgz#fc35a4e21e6e6a14743ed560978a9701af1a8bdc" + integrity sha512-cSx/Rxr0CEOr+KJKILKicOVSVknG82fMEozaituD5mjh92przLW8C4kafzXrfGMjPVb6p7lxFMk5S6QyiYI2/g== source-academy-wabt@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/source-academy-wabt/-/source-academy-wabt-1.0.6.tgz#1b221a23fe526a77c79e84fd0ddc102b3d37c15a" - integrity sha512-encnYj7gAYslqdz/DG/JCR3GkBzpo0E78gXmgyfRUZrqpgc7j/scQnxnSrBHXS2XFVF+JjvN/asIhaZ+/peXLQ== + version "1.0.8" + resolved "https://registry.yarnpkg.com/source-academy-wabt/-/source-academy-wabt-1.0.8.tgz#2c07f4aeba392fe3bf258a1cc1e37d1c47696363" + integrity sha512-gYPLVuBjQ+Qrv9srFq5aRundsJh0hG3ZkJL1YETiIDK/mrSmU79a5rTD3+aFdpNlQOT35ZIe86iD1ZdiOrF62Q== dependencies: class-transformer "^0.5.1" lodash "^4.17.21" From 344abb9a4eb6c209d8f1e05c9bb09200cf5be45a Mon Sep 17 00:00:00 2001 From: Dernbu <63487502+Dernbu@users.noreply.github.com> Date: Thu, 13 Apr 2023 19:29:04 +0800 Subject: [PATCH 4/9] Change line endings to windows --- src/bundles/wasm/index.ts | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/bundles/wasm/index.ts b/src/bundles/wasm/index.ts index 57ff2ba61..3ba88ac3f 100644 --- a/src/bundles/wasm/index.ts +++ b/src/bundles/wasm/index.ts @@ -5,7 +5,7 @@ * Simple 'add' library: * ```wat * import {wcompile, wrun} from "wasm"; - * + * * const program = ` * (module * (func (param f64) (param f64) (result f64) @@ -15,24 +15,24 @@ * (export "add" (func 0)) * ) * `; - * - * + * + * * const binary = wcompile(program); * const exports = wrun(binary); - * + * * display(binary); * display_list(exports); - * + * * const add_fn = head(tail(exports)); - * + * * display(add_fn(10, 35)); * ``` - * + * * 'Calculator Language': * ```wat * // Type your program in here! * import {wcompile, wrun} from "wasm"; - * + * * const program = ` * (module * (func (param f64) (param f64) (result f64) @@ -56,13 +56,13 @@ * (export "mul" (func 2)) * (export "div" (func 3)) * )`; - * - * + * + * * const encoding = wcompile(program); * let exports = wrun(encoding); - * + * * display_list(exports); - * + * * const div = head(tail(exports)); * exports = tail(tail(exports)); * const mul = head(tail(exports)); @@ -70,13 +70,13 @@ * const sub = head(tail(exports)); * exports = tail(tail(exports)); * const add = head(tail(exports)); - * + * * display(div(10, -35)); * display(mul(10, 12347)); * display(sub(12347, 12347)); * display(add(10, 0)); * ``` - * + * * * @module wasm * @author Kim Yongbeom From d8ddc16f25e309a8445bed5b74b41b00be58e355 Mon Sep 17 00:00:00 2001 From: Dernbu <63487502+Dernbu@users.noreply.github.com> Date: Thu, 13 Apr 2023 19:35:01 +0800 Subject: [PATCH 5/9] Fix eslint --- src/bundles/wasm/wabt.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bundles/wasm/wabt.ts b/src/bundles/wasm/wabt.ts index be65124e8..a108fd1cf 100644 --- a/src/bundles/wasm/wabt.ts +++ b/src/bundles/wasm/wabt.ts @@ -20,4 +20,4 @@ export const wrun = (buffer: number[] | Uint8Array) => { const exps = new WebAssembly.Instance(new WebAssembly.Module(buffer)).exports; return objectToLinkedList(exps); -}; \ No newline at end of file +}; From 83128d2937ef1a60d01ffeda7122d7eb5e4c72af Mon Sep 17 00:00:00 2001 From: Dernbu <63487502+Dernbu@users.noreply.github.com> Date: Thu, 13 Apr 2023 19:38:21 +0800 Subject: [PATCH 6/9] Update dependency --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 45a770e17..2a9768ae8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5210,9 +5210,9 @@ source-academy-utils@^1.0.0: integrity sha512-cSx/Rxr0CEOr+KJKILKicOVSVknG82fMEozaituD5mjh92przLW8C4kafzXrfGMjPVb6p7lxFMk5S6QyiYI2/g== source-academy-wabt@^1.0.4: - version "1.0.8" - resolved "https://registry.yarnpkg.com/source-academy-wabt/-/source-academy-wabt-1.0.8.tgz#2c07f4aeba392fe3bf258a1cc1e37d1c47696363" - integrity sha512-gYPLVuBjQ+Qrv9srFq5aRundsJh0hG3ZkJL1YETiIDK/mrSmU79a5rTD3+aFdpNlQOT35ZIe86iD1ZdiOrF62Q== + version "1.0.10" + resolved "https://registry.yarnpkg.com/source-academy-wabt/-/source-academy-wabt-1.0.10.tgz#4187804a10b8233dc0f3498b49d07523940b4789" + integrity sha512-eRm9Q+wm9rNKpaX3X+ykKjcLyrV2O6elAIG3qmkuOeOLk3f26QEFfroBvNxLtvVokkItWRHek9T/d5Gqrqo5tQ== dependencies: class-transformer "^0.5.1" lodash "^4.17.21" From acddad3f2a7dce3cc23f9307f5679167b08191c8 Mon Sep 17 00:00:00 2001 From: Dernbu <63487502+Dernbu@users.noreply.github.com> Date: Mon, 17 Apr 2023 17:15:19 +0800 Subject: [PATCH 7/9] replace line ending --- src/bundles/wasm/index.ts | 174 +++++++++++++++++++------------------- src/bundles/wasm/wabt.ts | 46 +++++----- 2 files changed, 110 insertions(+), 110 deletions(-) diff --git a/src/bundles/wasm/index.ts b/src/bundles/wasm/index.ts index 3ba88ac3f..89cbef8e9 100644 --- a/src/bundles/wasm/index.ts +++ b/src/bundles/wasm/index.ts @@ -1,87 +1,87 @@ -/** - * WebAssembly Module for Source Academy, for developing with WebAssembly Text and Binaries. - * - * Examples: - * Simple 'add' library: - * ```wat - * import {wcompile, wrun} from "wasm"; - * - * const program = ` - * (module - * (func (param f64) (param f64) (result f64) - * local.get 0 - * local.get 1 - * f64.add) - * (export "add" (func 0)) - * ) - * `; - * - * - * const binary = wcompile(program); - * const exports = wrun(binary); - * - * display(binary); - * display_list(exports); - * - * const add_fn = head(tail(exports)); - * - * display(add_fn(10, 35)); - * ``` - * - * 'Calculator Language': - * ```wat - * // Type your program in here! - * import {wcompile, wrun} from "wasm"; - * - * const program = ` - * (module - * (func (param f64) (param f64) (result f64) - * local.get 0 - * local.get 1 - * f64.add) - * (func (param f64) (param f64) (result f64) - * local.get 0 - * local.get 1 - * f64.sub) - * (func (param f64) (param f64) (result f64) - * local.get 0 - * local.get 1 - * f64.mul) - * (func (param f64) (param f64) (result f64) - * local.get 0 - * local.get 1 - * f64.div) - * (export "add" (func 0)) - * (export "sub" (func 1)) - * (export "mul" (func 2)) - * (export "div" (func 3)) - * )`; - * - * - * const encoding = wcompile(program); - * let exports = wrun(encoding); - * - * display_list(exports); - * - * const div = head(tail(exports)); - * exports = tail(tail(exports)); - * const mul = head(tail(exports)); - * exports = tail(tail(exports)); - * const sub = head(tail(exports)); - * exports = tail(tail(exports)); - * const add = head(tail(exports)); - * - * display(div(10, -35)); - * display(mul(10, 12347)); - * display(sub(12347, 12347)); - * display(add(10, 0)); - * ``` - * - * - * @module wasm - * @author Kim Yongbeom - */ -export { - wcompile, - wrun, -} from './wabt'; +/** + * WebAssembly Module for Source Academy, for developing with WebAssembly Text and Binaries. + * + * Examples: + * Simple 'add' library: + * ```wat + * import {wcompile, wrun} from "wasm"; + * + * const program = ` + * (module + * (func (param f64) (param f64) (result f64) + * local.get 0 + * local.get 1 + * f64.add) + * (export "add" (func 0)) + * ) + * `; + * + * + * const binary = wcompile(program); + * const exports = wrun(binary); + * + * display(binary); + * display_list(exports); + * + * const add_fn = head(tail(exports)); + * + * display(add_fn(10, 35)); + * ``` + * + * 'Calculator Language': + * ```wat + * // Type your program in here! + * import {wcompile, wrun} from "wasm"; + * + * const program = ` + * (module + * (func (param f64) (param f64) (result f64) + * local.get 0 + * local.get 1 + * f64.add) + * (func (param f64) (param f64) (result f64) + * local.get 0 + * local.get 1 + * f64.sub) + * (func (param f64) (param f64) (result f64) + * local.get 0 + * local.get 1 + * f64.mul) + * (func (param f64) (param f64) (result f64) + * local.get 0 + * local.get 1 + * f64.div) + * (export "add" (func 0)) + * (export "sub" (func 1)) + * (export "mul" (func 2)) + * (export "div" (func 3)) + * )`; + * + * + * const encoding = wcompile(program); + * let exports = wrun(encoding); + * + * display_list(exports); + * + * const div = head(tail(exports)); + * exports = tail(tail(exports)); + * const mul = head(tail(exports)); + * exports = tail(tail(exports)); + * const sub = head(tail(exports)); + * exports = tail(tail(exports)); + * const add = head(tail(exports)); + * + * display(div(10, -35)); + * display(mul(10, 12347)); + * display(sub(12347, 12347)); + * display(add(10, 0)); + * ``` + * + * + * @module wasm + * @author Kim Yongbeom + */ +export { + wcompile, + wrun, +} from './wabt'; diff --git a/src/bundles/wasm/wabt.ts b/src/bundles/wasm/wabt.ts index a108fd1cf..bdf5d5a0f 100644 --- a/src/bundles/wasm/wabt.ts +++ b/src/bundles/wasm/wabt.ts @@ -1,23 +1,23 @@ -import { compile } from 'source-academy-wabt'; -import { objectToLinkedList } from 'source-academy-utils'; - -/** - * Compile a (hopefully valid) WebAssembly Text module to binary. - * @param program program to compile - * @returns an array of 8-bit unsigned integers. - */ -export const wcompile = (program: string) => Array.from(compile(program)); - -/** - * Run a compiled WebAssembly Binary Buffer. - * @param buffer an array of 8-bit unsigned integers to run - * @returns a linked list of exports that the relevant WebAssembly Module exports - */ -export const wrun = (buffer: number[] | Uint8Array) => { - if (buffer instanceof Array) { - buffer = new Uint8Array(buffer); - } - - const exps = new WebAssembly.Instance(new WebAssembly.Module(buffer)).exports; - return objectToLinkedList(exps); -}; +import { compile } from 'source-academy-wabt'; +import { objectToLinkedList } from 'source-academy-utils'; + +/** + * Compile a (hopefully valid) WebAssembly Text module to binary. + * @param program program to compile + * @returns an array of 8-bit unsigned integers. + */ +export const wcompile = (program: string) => Array.from(compile(program)); + +/** + * Run a compiled WebAssembly Binary Buffer. + * @param buffer an array of 8-bit unsigned integers to run + * @returns a linked list of exports that the relevant WebAssembly Module exports + */ +export const wrun = (buffer: number[] | Uint8Array) => { + if (buffer instanceof Array) { + buffer = new Uint8Array(buffer); + } + + const exps = new WebAssembly.Instance(new WebAssembly.Module(buffer)).exports; + return objectToLinkedList(exps); +}; From ec377809a8f3ea3ffa6b108ce3e150c6bb584b69 Mon Sep 17 00:00:00 2001 From: Dernbu <63487502+Dernbu@users.noreply.github.com> Date: Tue, 9 May 2023 23:30:36 +0800 Subject: [PATCH 8/9] add .gitattributes file for line endings + save before --renormalise --- .gitattributes | 9 + yarn.lock | 1552 ++++++++++++++++++++++++------------------------ 2 files changed, 785 insertions(+), 776 deletions(-) create mode 100644 .gitattributes diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 000000000..f6eac7711 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,9 @@ +## Standardize line encodings +## Src: https://docs.github.com/en/get-started/getting-started-with-git/configuring-git-to-handle-line-endings#per-repository-settings +# Set the default behavior, in case people don't have core.autocrlf set. +* text=auto + +# Declare files that will always have CRLF line endings on checkout. +*.js text eof=crlf +*.ts text eof=crlf +*.tsx text eof=crlf \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 170e2ed6e..c04d9aaf0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4,7 +4,7 @@ "@ampproject/remapping@^2.1.0": version "2.2.0" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" + resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz" integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== dependencies: "@jridgewell/gen-mapping" "^0.1.0" @@ -12,19 +12,19 @@ "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.18.6": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz" integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== dependencies: "@babel/highlight" "^7.18.6" "@babel/compat-data@^7.20.5": version "7.20.14" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.20.14.tgz#4106fc8b755f3e3ee0a0a7c27dde5de1d2b2baf8" + resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.14.tgz" integrity sha512-0YpKHD6ImkWMEINCyDAD0HLLUH/lPCefG8ld9it8DJB2wnApraKuhgYTvTY1z7UFIfBTGy5LwncZ+5HWWGbhFw== "@babel/core@^7.11.6", "@babel/core@^7.12.3": version "7.20.12" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.20.12.tgz#7930db57443c6714ad216953d1356dac0eb8496d" + resolved "https://registry.npmjs.org/@babel/core/-/core-7.20.12.tgz" integrity sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg== dependencies: "@ampproject/remapping" "^2.1.0" @@ -45,7 +45,7 @@ "@babel/generator@^7.20.7", "@babel/generator@^7.7.2": version "7.20.14" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.20.14.tgz#9fa772c9f86a46c6ac9b321039400712b96f64ce" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.20.14.tgz" integrity sha512-AEmuXHdcD3A52HHXxaTmYlb8q/xMEhoRP67B3T4Oq7lbmSoqroMZzjnGj3+i1io3pdnF8iBYVu4Ilj+c4hBxYg== dependencies: "@babel/types" "^7.20.7" @@ -54,7 +54,7 @@ "@babel/helper-compilation-targets@^7.20.7": version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz#a6cd33e93629f5eb473b021aac05df62c4cd09bb" + resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz" integrity sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ== dependencies: "@babel/compat-data" "^7.20.5" @@ -65,12 +65,12 @@ "@babel/helper-environment-visitor@^7.18.9": version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" + resolved "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz" integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== "@babel/helper-function-name@^7.19.0": version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz#941574ed5390682e872e52d3f38ce9d1bef4648c" + resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz" integrity sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w== dependencies: "@babel/template" "^7.18.10" @@ -78,21 +78,21 @@ "@babel/helper-hoist-variables@^7.18.6": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" + resolved "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz" integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== dependencies: "@babel/types" "^7.18.6" "@babel/helper-module-imports@^7.18.6": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" + resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz" integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== dependencies: "@babel/types" "^7.18.6" "@babel/helper-module-transforms@^7.20.11": version "7.20.11" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz#df4c7af713c557938c50ea3ad0117a7944b2f1b0" + resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz" integrity sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg== dependencies: "@babel/helper-environment-visitor" "^7.18.9" @@ -106,41 +106,41 @@ "@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.8.0": version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz#d1b9000752b18d0877cff85a5c376ce5c3121629" + resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz" integrity sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ== "@babel/helper-simple-access@^7.20.2": version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz#0ab452687fe0c2cfb1e2b9e0015de07fc2d62dd9" + resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz" integrity sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA== dependencies: "@babel/types" "^7.20.2" "@babel/helper-split-export-declaration@^7.18.6": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" + resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz" integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== dependencies: "@babel/types" "^7.18.6" "@babel/helper-string-parser@^7.19.4": version "7.19.4" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz#38d3acb654b4701a9b77fb0615a96f775c3a9e63" + resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz" integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw== "@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": version "7.19.1" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" + resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz" integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== "@babel/helper-validator-option@^7.18.6": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8" + resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz" integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== "@babel/helpers@^7.20.7": version "7.20.13" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.20.13.tgz#e3cb731fb70dc5337134cadc24cbbad31cc87ad2" + resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.13.tgz" integrity sha512-nzJ0DWCL3gB5RCXbUO3KIMMsBY2Eqbx8mBpKGE/02PgyRQFcPQLbkQ1vyy596mZLaP+dAfD+R4ckASzNVmW3jg== dependencies: "@babel/template" "^7.20.7" @@ -149,7 +149,7 @@ "@babel/highlight@^7.18.6": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" + resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz" integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== dependencies: "@babel/helper-validator-identifier" "^7.18.6" @@ -158,122 +158,122 @@ "@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.13", "@babel/parser@^7.20.7": version "7.20.15" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.20.15.tgz#eec9f36d8eaf0948bb88c87a46784b5ee9fd0c89" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.20.15.tgz" integrity sha512-DI4a1oZuf8wC+oAJA9RW6ga3Zbe8RZFt7kD9i4qAspz3I/yHet1VvC3DiSy/fsUvv5pvJuNPh0LPOdCcqinDPg== "@babel/parser@^7.19.4": version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.21.4.tgz#94003fdfc520bbe2875d4ae557b43ddb6d880f17" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.21.4.tgz" integrity sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw== "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz" integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-bigint@^7.8.3": version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz" integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-class-properties@^7.8.3": version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz" integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== dependencies: "@babel/helper-plugin-utils" "^7.12.13" "@babel/plugin-syntax-import-meta@^7.8.3": version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz" integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-json-strings@^7.8.3": version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz" integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-jsx@^7.7.2": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz#a8feef63b010150abd97f1649ec296e849943ca0" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz" integrity sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q== dependencies: "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz" integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz" integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-numeric-separator@^7.8.3": version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz" integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-object-rest-spread@^7.8.3": version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz" integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-optional-catch-binding@^7.8.3": version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz" integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-optional-chaining@^7.8.3": version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz" integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-top-level-await@^7.8.3": version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz" integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-typescript@^7.7.2": version "7.20.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz#4e9a0cfc769c85689b77a2e642d24e9f697fc8c7" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz" integrity sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ== dependencies: "@babel/helper-plugin-utils" "^7.19.0" "@babel/runtime@^7.1.2", "@babel/runtime@^7.20.7", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.7": version "7.20.13" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.20.13.tgz#7055ab8a7cff2b8f6058bf6ae45ff84ad2aded4b" + resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.13.tgz" integrity sha512-gt3PKXs0DBoL9xCvOIIZ2NEqAGZqHjAnmVbfQtB620V0uReIQutpel14KcneZuer7UioY8ALKZ7iocavvzTNFA== dependencies: regenerator-runtime "^0.13.11" "@babel/template@^7.18.10", "@babel/template@^7.20.7", "@babel/template@^7.3.3": version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.20.7.tgz#a15090c2839a83b02aa996c0b4994005841fd5a8" + resolved "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz" integrity sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw== dependencies: "@babel/code-frame" "^7.18.6" @@ -282,7 +282,7 @@ "@babel/traverse@^7.20.10", "@babel/traverse@^7.20.12", "@babel/traverse@^7.20.13", "@babel/traverse@^7.7.2": version "7.20.13" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.20.13.tgz#817c1ba13d11accca89478bd5481b2d168d07473" + resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.13.tgz" integrity sha512-kMJXfF0T6DIS9E8cgdLCSAL+cuCK+YEZHWiLK0SXpTo8YRj5lpJu3CDNKiIBCne4m9hhTIqUg6SYTAI39tAiVQ== dependencies: "@babel/code-frame" "^7.18.6" @@ -298,7 +298,7 @@ "@babel/types@^7.0.0", "@babel/types@^7.18.6", "@babel/types@^7.19.0", "@babel/types@^7.20.2", "@babel/types@^7.20.7", "@babel/types@^7.3.0", "@babel/types@^7.3.3": version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.20.7.tgz#54ec75e252318423fc07fb644dc6a58a64c09b7f" + resolved "https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz" integrity sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg== dependencies: "@babel/helper-string-parser" "^7.19.4" @@ -307,17 +307,17 @@ "@bcoe/v8-coverage@^0.2.3": version "0.2.3" - resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" + resolved "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== "@blueprintjs/colors@^4.1.15": version "4.1.15" - resolved "https://registry.yarnpkg.com/@blueprintjs/colors/-/colors-4.1.15.tgz#745217581640a1f5fdb4c0d767fde608a7de2887" + resolved "https://registry.npmjs.org/@blueprintjs/colors/-/colors-4.1.15.tgz" integrity sha512-iOwfwE3tOXiM+dmwkdK7fY6dCGqg7yBLYAUHrmPUeYscrqZ8gJqUXAtDumuWMoLvm1SEz5SVIEfm16QnHd4efw== "@blueprintjs/core@^4.16.3", "@blueprintjs/core@^4.6.1": version "4.16.3" - resolved "https://registry.yarnpkg.com/@blueprintjs/core/-/core-4.16.3.tgz#04b5f02589f3bfca30c28a08edc1ca5b43d99d8b" + resolved "https://registry.npmjs.org/@blueprintjs/core/-/core-4.16.3.tgz" integrity sha512-XFqcuwG9QBP/6LxegzDBv7PlTY8LdPM53nfJ8nRcUMcHmHoZ8HyYA9f40lMbiUTg4yAFz50Yw8Fc8uAja267ag== dependencies: "@blueprintjs/colors" "^4.1.15" @@ -334,7 +334,7 @@ "@blueprintjs/icons@^4.13.2", "@blueprintjs/icons@^4.4.0": version "4.13.2" - resolved "https://registry.yarnpkg.com/@blueprintjs/icons/-/icons-4.13.2.tgz#df748957984a4f22988136f89aaaf4c686c100bb" + resolved "https://registry.npmjs.org/@blueprintjs/icons/-/icons-4.13.2.tgz" integrity sha512-BxDSkpF2YCyGwcl2Ke4JX+UdQP++s/PKYeYt7SmllZaIXY/sEws3fgop9EfN0kfKGofv9k1VwU/F4uGNRJz/5A== dependencies: change-case "^4.1.2" @@ -343,7 +343,7 @@ "@blueprintjs/popover2@^1.4.3": version "1.13.3" - resolved "https://registry.yarnpkg.com/@blueprintjs/popover2/-/popover2-1.13.3.tgz#437c35b7e7c2cd394fb5eb4042f94acea4ed8e9a" + resolved "https://registry.npmjs.org/@blueprintjs/popover2/-/popover2-1.13.3.tgz" integrity sha512-FJ1QamBHRf45rIU3iDbGRnSAOM7SCI+I9DjBCWQlmjNa8fCJXOPd7mmLuolhlNfI9kdgRs0+6RgCifonIJ9BTg== dependencies: "@blueprintjs/core" "^4.16.3" @@ -356,12 +356,12 @@ "@box2d/core@^0.10.0": version "0.10.0" - resolved "https://registry.yarnpkg.com/@box2d/core/-/core-0.10.0.tgz#99c8893970b33f68ab22a426ca8d23166b9d7de5" + resolved "https://registry.npmjs.org/@box2d/core/-/core-0.10.0.tgz" integrity sha512-rVawB+VokPnE2IarLPXE9blbpV26KOEYdadsnXf7ToyXzceXMADPrSIvYIyTzXLteiLE9i+UTMmTcCvYXl+QEA== "@box2d/debug-draw@^0.10.0": version "0.10.0" - resolved "https://registry.yarnpkg.com/@box2d/debug-draw/-/debug-draw-0.10.0.tgz#53f57523be4ab1c9c6922c268b938271f4b789a2" + resolved "https://registry.npmjs.org/@box2d/debug-draw/-/debug-draw-0.10.0.tgz" integrity sha512-cPkgwRD2Na/p/lIUjeBFXiMpAebbiE3PL+SpSGyrILfeJqF/WEZW3J+mzPNougwezcc8HKKHcd5B0jZZFUQhIA== dependencies: "@box2d/core" "^0.10.0" @@ -478,7 +478,7 @@ "@eslint/eslintrc@^1.4.1": version "1.4.1" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.4.1.tgz#af58772019a2d271b7e2d4c23ff4ddcba3ccfb3e" + resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz" integrity sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA== dependencies: ajv "^6.12.4" @@ -493,12 +493,12 @@ "@gar/promisify@^1.1.3": version "1.1.3" - resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" + resolved "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz" integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== "@humanwhocodes/config-array@^0.11.8": version "0.11.8" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.8.tgz#03595ac2075a4dc0f191cc2131de14fbd7d410b9" + resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz" integrity sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g== dependencies: "@humanwhocodes/object-schema" "^1.2.1" @@ -507,17 +507,17 @@ "@humanwhocodes/module-importer@^1.0.1": version "1.0.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz" integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== "@humanwhocodes/object-schema@^1.2.1": version "1.2.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" + resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz" integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== "@hypnosphi/create-react-context@^0.3.1": version "0.3.1" - resolved "https://registry.yarnpkg.com/@hypnosphi/create-react-context/-/create-react-context-0.3.1.tgz#f8bfebdc7665f5d426cba3753e0e9c7d3154d7c6" + resolved "https://registry.npmjs.org/@hypnosphi/create-react-context/-/create-react-context-0.3.1.tgz" integrity sha512-V1klUed202XahrWJLLOT3EXNeCpFHCcJntdFGI15ntCwau+jfT386w7OFTMaCqOgXUH1fa0w/I1oZs+i/Rfr0A== dependencies: gud "^1.0.0" @@ -525,7 +525,7 @@ "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" - resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" + resolved "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz" integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== dependencies: camelcase "^5.3.1" @@ -536,12 +536,12 @@ "@istanbuljs/schema@^0.1.2": version "0.1.3" - resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" + resolved "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz" integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== "@jest/console@^29.4.3": version "29.4.3" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.4.3.tgz#1f25a99f7f860e4c46423b5b1038262466fadde1" + resolved "https://registry.npmjs.org/@jest/console/-/console-29.4.3.tgz" integrity sha512-W/o/34+wQuXlgqlPYTansOSiBnuxrTv61dEVkA6HNmpcgHLUjfaUbdqt6oVvOzaawwo9IdW9QOtMgQ1ScSZC4A== dependencies: "@jest/types" "^29.4.3" @@ -553,7 +553,7 @@ "@jest/core@^29.4.3": version "29.4.3" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.4.3.tgz#829dd65bffdb490de5b0f69e97de8e3b5eadd94b" + resolved "https://registry.npmjs.org/@jest/core/-/core-29.4.3.tgz" integrity sha512-56QvBq60fS4SPZCuM7T+7scNrkGIe7Mr6PVIXUpu48ouvRaWOFqRPV91eifvFM0ay2HmfswXiGf97NGUN5KofQ== dependencies: "@jest/console" "^29.4.3" @@ -587,7 +587,7 @@ "@jest/environment@^29.4.3": version "29.4.3" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.4.3.tgz#9fe2f3169c3b33815dc4bd3960a064a83eba6548" + resolved "https://registry.npmjs.org/@jest/environment/-/environment-29.4.3.tgz" integrity sha512-dq5S6408IxIa+lr54zeqce+QgI+CJT4nmmA+1yzFgtcsGK8c/EyiUb9XQOgz3BMKrRDfKseeOaxj2eO8LlD3lA== dependencies: "@jest/fake-timers" "^29.4.3" @@ -597,14 +597,14 @@ "@jest/expect-utils@^29.4.3": version "29.4.3" - resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.4.3.tgz#95ce4df62952f071bcd618225ac7c47eaa81431e" + resolved "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.4.3.tgz" integrity sha512-/6JWbkxHOP8EoS8jeeTd9dTfc9Uawi+43oLKHfp6zzux3U2hqOOVnV3ai4RpDYHOccL6g+5nrxpoc8DmJxtXVQ== dependencies: jest-get-type "^29.4.3" "@jest/expect@^29.4.3": version "29.4.3" - resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.4.3.tgz#d31a28492e45a6bcd0f204a81f783fe717045c6e" + resolved "https://registry.npmjs.org/@jest/expect/-/expect-29.4.3.tgz" integrity sha512-iktRU/YsxEtumI9zsPctYUk7ptpC+AVLLk1Ax3AsA4g1C+8OOnKDkIQBDHtD5hA/+VtgMd5AWI5gNlcAlt2vxQ== dependencies: expect "^29.4.3" @@ -612,7 +612,7 @@ "@jest/fake-timers@^29.4.3": version "29.4.3" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.4.3.tgz#31e982638c60fa657d310d4b9d24e023064027b0" + resolved "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.4.3.tgz" integrity sha512-4Hote2MGcCTWSD2gwl0dwbCpBRHhE6olYEuTj8FMowdg3oQWNKr2YuxenPQYZ7+PfqPY1k98wKDU4Z+Hvd4Tiw== dependencies: "@jest/types" "^29.4.3" @@ -624,7 +624,7 @@ "@jest/globals@^29.4.3": version "29.4.3" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.4.3.tgz#63a2c4200d11bc6d46f12bbe25b07f771fce9279" + resolved "https://registry.npmjs.org/@jest/globals/-/globals-29.4.3.tgz" integrity sha512-8BQ/5EzfOLG7AaMcDh7yFCbfRLtsc+09E1RQmRBI4D6QQk4m6NSK/MXo+3bJrBN0yU8A2/VIcqhvsOLFmziioA== dependencies: "@jest/environment" "^29.4.3" @@ -634,7 +634,7 @@ "@jest/reporters@^29.4.3": version "29.4.3" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.4.3.tgz#0a68a0c0f20554760cc2e5443177a0018969e353" + resolved "https://registry.npmjs.org/@jest/reporters/-/reporters-29.4.3.tgz" integrity sha512-sr2I7BmOjJhyqj9ANC6CTLsL4emMoka7HkQpcoMRlhCbQJjz2zsRzw0BDPiPyEFDXAbxKgGFYuQZiSJ1Y6YoTg== dependencies: "@bcoe/v8-coverage" "^0.2.3" @@ -664,14 +664,14 @@ "@jest/schemas@^29.4.3": version "29.4.3" - resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.4.3.tgz#39cf1b8469afc40b6f5a2baaa146e332c4151788" + resolved "https://registry.npmjs.org/@jest/schemas/-/schemas-29.4.3.tgz" integrity sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg== dependencies: "@sinclair/typebox" "^0.25.16" "@jest/source-map@^29.4.3": version "29.4.3" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.4.3.tgz#ff8d05cbfff875d4a791ab679b4333df47951d20" + resolved "https://registry.npmjs.org/@jest/source-map/-/source-map-29.4.3.tgz" integrity sha512-qyt/mb6rLyd9j1jUts4EQncvS6Yy3PM9HghnNv86QBlV+zdL2inCdK1tuVlL+J+lpiw2BI67qXOrX3UurBqQ1w== dependencies: "@jridgewell/trace-mapping" "^0.3.15" @@ -680,7 +680,7 @@ "@jest/test-result@^29.4.3": version "29.4.3" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.4.3.tgz#e13d973d16c8c7cc0c597082d5f3b9e7f796ccb8" + resolved "https://registry.npmjs.org/@jest/test-result/-/test-result-29.4.3.tgz" integrity sha512-Oi4u9NfBolMq9MASPwuWTlC5WvmNRwI4S8YrQg5R5Gi47DYlBe3sh7ILTqi/LGrK1XUE4XY9KZcQJTH1WJCLLA== dependencies: "@jest/console" "^29.4.3" @@ -690,7 +690,7 @@ "@jest/test-sequencer@^29.4.3": version "29.4.3" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.4.3.tgz#0862e876a22993385a0f3e7ea1cc126f208a2898" + resolved "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.4.3.tgz" integrity sha512-yi/t2nES4GB4G0mjLc0RInCq/cNr9dNwJxcGg8sslajua5Kb4kmozAc+qPLzplhBgfw1vLItbjyHzUN92UXicw== dependencies: "@jest/test-result" "^29.4.3" @@ -700,7 +700,7 @@ "@jest/transform@^29.4.3": version "29.4.3" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.4.3.tgz#f7d17eac9cb5bb2e1222ea199c7c7e0835e0c037" + resolved "https://registry.npmjs.org/@jest/transform/-/transform-29.4.3.tgz" integrity sha512-8u0+fBGWolDshsFgPQJESkDa72da/EVwvL+II0trN2DR66wMwiQ9/CihaGfHdlLGFzbBZwMykFtxuwFdZqlKwg== dependencies: "@babel/core" "^7.11.6" @@ -721,7 +721,7 @@ "@jest/types@^29.4.3": version "29.4.3" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.4.3.tgz#9069145f4ef09adf10cec1b2901b2d390031431f" + resolved "https://registry.npmjs.org/@jest/types/-/types-29.4.3.tgz" integrity sha512-bPYfw8V65v17m2Od1cv44FH+SiKW7w2Xu7trhcdTLUmSv85rfKsP+qXSjO4KGJr4dtPSzl/gvslZBXctf1qGEA== dependencies: "@jest/schemas" "^29.4.3" @@ -733,12 +733,12 @@ "@joeychenofficial/alt-ergo-modified@^2.4.0": version "2.4.0" - resolved "https://registry.yarnpkg.com/@joeychenofficial/alt-ergo-modified/-/alt-ergo-modified-2.4.0.tgz#27aec0cbed8ab4e2f0dad6feb4f0c9766ac3132f" + resolved "https://registry.npmjs.org/@joeychenofficial/alt-ergo-modified/-/alt-ergo-modified-2.4.0.tgz" integrity sha512-58b0K8pNUVZXGbua4IJQ+1K+E+jz3MkhDazZaaeKlD+sOLYR9iTHIbicV/I5K16ivYW6R9lONiT3dz8rMeFJ1w== "@jridgewell/gen-mapping@^0.1.0": version "0.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996" + resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz" integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== dependencies: "@jridgewell/set-array" "^1.0.0" @@ -746,7 +746,7 @@ "@jridgewell/gen-mapping@^0.3.2": version "0.3.2" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" + resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz" integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== dependencies: "@jridgewell/set-array" "^1.0.1" @@ -755,22 +755,22 @@ "@jridgewell/resolve-uri@3.1.0": version "3.1.0" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" + resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz" integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== "@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": version "1.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz" integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== "@jridgewell/sourcemap-codec@1.4.14", "@jridgewell/sourcemap-codec@^1.4.10": version "1.4.14" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" + resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz" integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== "@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.15", "@jridgewell/trace-mapping@^0.3.9": version "0.3.17" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz#793041277af9073b0951a7fe0f0d8c4c98c36985" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz" integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g== dependencies: "@jridgewell/resolve-uri" "3.1.0" @@ -778,17 +778,17 @@ "@jscad/array-utils@2.1.4": version "2.1.4" - resolved "https://registry.yarnpkg.com/@jscad/array-utils/-/array-utils-2.1.4.tgz#05e93c7c0ccaab8fa5e81e3ec685aab9c41e7075" + resolved "https://registry.npmjs.org/@jscad/array-utils/-/array-utils-2.1.4.tgz" integrity sha512-c31r4zSKsE+4Xfwk2V8monDA0hx5G89QGzaakWVUvuGNowYS9WSsYCwHiTIXodjR+HEnDu4okQ7k/whmP0Ne2g== "@jscad/modeling@^2.9.5": version "2.11.0" - resolved "https://registry.yarnpkg.com/@jscad/modeling/-/modeling-2.11.0.tgz#890e8e3bda0fb89e8905e815eea8302225a12b89" + resolved "https://registry.npmjs.org/@jscad/modeling/-/modeling-2.11.0.tgz" integrity sha512-B2GnufqIP6vLwQs9ZWBJRWir0dE9O5EV0Vtz2w9370S6i/6+IQA3Xqhghr8xGdEblKJoJXeE5GOOMUHEsqzoDA== "@jscad/regl-renderer@^2.6.1": version "2.6.5" - resolved "https://registry.yarnpkg.com/@jscad/regl-renderer/-/regl-renderer-2.6.5.tgz#449917be94d1a5c4917f71e5ae202bed18a4d835" + resolved "https://registry.npmjs.org/@jscad/regl-renderer/-/regl-renderer-2.6.5.tgz" integrity sha512-UTrOIUiJcBAyBnvEVzseLb42VjeWs9JJPUHBwol3YBr7NkERRrAm2a0zk2WiQzl3Y4I/HOkfpvOlrry/0zV4Ng== dependencies: "@jscad/array-utils" "2.1.4" @@ -799,12 +799,12 @@ "@juggle/resize-observer@^3.4.0": version "3.4.0" - resolved "https://registry.yarnpkg.com/@juggle/resize-observer/-/resize-observer-3.4.0.tgz#08d6c5e20cf7e4cc02fd181c4b0c225cd31dbb60" + resolved "https://registry.npmjs.org/@juggle/resize-observer/-/resize-observer-3.4.0.tgz" integrity sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA== "@nodelib/fs.scandir@2.1.5": version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== dependencies: "@nodelib/fs.stat" "2.0.5" @@ -812,12 +812,12 @@ "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== "@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== dependencies: "@nodelib/fs.scandir" "2.1.5" @@ -825,7 +825,7 @@ "@npmcli/fs@^2.1.0": version "2.1.2" - resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-2.1.2.tgz#a9e2541a4a2fec2e69c29b35e6060973da79b865" + resolved "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz" integrity sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ== dependencies: "@gar/promisify" "^1.1.3" @@ -833,7 +833,7 @@ "@npmcli/move-file@^2.0.0": version "2.0.1" - resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-2.0.1.tgz#26f6bdc379d87f75e55739bab89db525b06100e4" + resolved "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz" integrity sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ== dependencies: mkdirp "^1.0.4" @@ -841,43 +841,43 @@ "@popperjs/core@^2.11.6": version "2.11.6" - resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.6.tgz#cee20bd55e68a1720bdab363ecf0c821ded4cd45" + resolved "https://registry.npmjs.org/@popperjs/core/-/core-2.11.6.tgz" integrity sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw== "@sinclair/typebox@^0.25.16": version "0.25.23" - resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.25.23.tgz#1c15b0d2b872d89cc0f47c7243eacb447df8b8bd" + resolved "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.23.tgz" integrity sha512-VEB8ygeP42CFLWyAJhN5OklpxUliqdNEUcXb4xZ/CINqtYGTjL5ukluKdKzQ0iWdUxyQ7B0539PAUhHKrCNWSQ== "@sinonjs/commons@^2.0.0": version "2.0.0" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-2.0.0.tgz#fd4ca5b063554307e8327b4564bd56d3b73924a3" + resolved "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz" integrity sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg== dependencies: type-detect "4.0.8" "@sinonjs/fake-timers@^10.0.2": version "10.0.2" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.0.2.tgz#d10549ed1f423d80639c528b6c7f5a1017747d0c" + resolved "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.0.2.tgz" integrity sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw== dependencies: "@sinonjs/commons" "^2.0.0" "@tootallnate/once@2": version "2.0.0" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" + resolved "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz" integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== "@ts-morph/bootstrap@^0.18.0": version "0.18.0" - resolved "https://registry.yarnpkg.com/@ts-morph/bootstrap/-/bootstrap-0.18.0.tgz#23f886caa87575e48b07c9905ddbd56a33ee33f4" + resolved "https://registry.npmjs.org/@ts-morph/bootstrap/-/bootstrap-0.18.0.tgz" integrity sha512-LmYkdorZT7UonhVuATqj8jFBVz/4ykuFdbrA5szk19OAVxEWaytg7TsngC2waUDLfdc93aJrCF9Gs8Extc1Pfg== dependencies: "@ts-morph/common" "~0.18.0" "@ts-morph/common@~0.18.0": version "0.18.1" - resolved "https://registry.yarnpkg.com/@ts-morph/common/-/common-0.18.1.tgz#ca40c3a62c3f9e17142e0af42633ad63efbae0ec" + resolved "https://registry.npmjs.org/@ts-morph/common/-/common-0.18.1.tgz" integrity sha512-RVE+zSRICWRsfrkAw5qCAK+4ZH9kwEFv5h0+/YeHTLieWP7F4wWq4JsKFuNWG+fYh/KF+8rAtgdj5zb2mm+DVA== dependencies: fast-glob "^3.2.12" @@ -887,7 +887,7 @@ "@types/babel__core@^7.1.14": version "7.20.0" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.0.tgz#61bc5a4cae505ce98e1e36c5445e4bee060d8891" + resolved "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.0.tgz" integrity sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ== dependencies: "@babel/parser" "^7.20.7" @@ -898,14 +898,14 @@ "@types/babel__generator@*": version "7.6.4" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.4.tgz#1f20ce4c5b1990b37900b63f050182d28c2439b7" + resolved "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz" integrity sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg== dependencies: "@babel/types" "^7.0.0" "@types/babel__template@*": version "7.4.1" - resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.1.tgz#3d1a48fd9d6c0edfd56f2ff578daed48f36c8969" + resolved "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz" integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g== dependencies: "@babel/parser" "^7.1.0" @@ -913,24 +913,24 @@ "@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": version "7.18.3" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.18.3.tgz#dfc508a85781e5698d5b33443416b6268c4b3e8d" + resolved "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.3.tgz" integrity sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w== dependencies: "@babel/types" "^7.3.0" "@types/dom-mediacapture-record@^1.0.11": version "1.0.14" - resolved "https://registry.yarnpkg.com/@types/dom-mediacapture-record/-/dom-mediacapture-record-1.0.14.tgz#5224cdfbe43a77a514192762209c40c8c73563ba" + resolved "https://registry.npmjs.org/@types/dom-mediacapture-record/-/dom-mediacapture-record-1.0.14.tgz" integrity sha512-dNVhzNPFPUwm/nABmEZRTXGWiU7EFApgbYB0WTlZlsC1iXOMyG/5TrElNMToyQ3jbtiZFaZeIjEN/lpo4oMQWw== "@types/dom4@^2.0.2": version "2.0.2" - resolved "https://registry.yarnpkg.com/@types/dom4/-/dom4-2.0.2.tgz#6495303f049689ce936ed328a3e5ede9c51408ee" + resolved "https://registry.npmjs.org/@types/dom4/-/dom4-2.0.2.tgz" integrity sha512-Rt4IC1T7xkCWa0OG1oSsPa0iqnxlDeQqKXZAHrQGLb7wFGncWm85MaxKUjAGejOrUynOgWlFi4c6S6IyJwoK4g== "@types/eslint@^8.4.10": version "8.21.1" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.21.1.tgz#110b441a210d53ab47795124dbc3e9bb993d1e7c" + resolved "https://registry.npmjs.org/@types/eslint/-/eslint-8.21.1.tgz" integrity sha512-rc9K8ZpVjNcLs8Fp0dkozd5Pt2Apk1glO4Vgz8ix1u6yFByxfqo5Yavpy65o+93TAe24jr7v+eSBtFLvOQtCRQ== dependencies: "@types/estree" "*" @@ -938,43 +938,43 @@ "@types/estree@*", "@types/estree@^1.0.0": version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.0.tgz#5fb2e536c1ae9bf35366eed879e827fa59ca41c2" + resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz" integrity sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ== "@types/estree@0.0.52": version "0.0.52" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.52.tgz#7f1f57ad5b741f3d5b210d3b1f145640d89bf8fe" + resolved "https://registry.npmjs.org/@types/estree/-/estree-0.0.52.tgz" integrity sha512-BZWrtCU0bMVAIliIV+HJO1f1PR41M7NKjfxrFJwwhKI1KwhwOxYw1SXg9ao+CIMt774nFuGiG6eU+udtbEI9oQ== "@types/graceful-fs@^4.1.3": version "4.1.6" - resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.6.tgz#e14b2576a1c25026b7f02ede1de3b84c3a1efeae" + resolved "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz" integrity sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw== dependencies: "@types/node" "*" "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": version "2.0.4" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" + resolved "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz" integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== "@types/istanbul-lib-report@*": version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" + resolved "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz" integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== dependencies: "@types/istanbul-lib-coverage" "*" "@types/istanbul-reports@^3.0.0": version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" + resolved "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz" integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== dependencies: "@types/istanbul-lib-report" "*" "@types/jest@^27.4.1": version "27.5.2" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-27.5.2.tgz#ec49d29d926500ffb9fd22b84262e862049c026c" + resolved "https://registry.npmjs.org/@types/jest/-/jest-27.5.2.tgz" integrity sha512-mpT8LJJ4CMeeahobofYWIjFo0xonRS/HfxnVEPMPFSQdGUt1uHCnoPT7Zhb+sjDU2wz0oKV0OLUR0WzrHNgfeA== dependencies: jest-matcher-utils "^27.0.0" @@ -982,7 +982,7 @@ "@types/jsdom@^20.0.0": version "20.0.1" - resolved "https://registry.yarnpkg.com/@types/jsdom/-/jsdom-20.0.1.tgz#07c14bc19bd2f918c1929541cdaacae894744808" + resolved "https://registry.npmjs.org/@types/jsdom/-/jsdom-20.0.1.tgz" integrity sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ== dependencies: "@types/node" "*" @@ -991,47 +991,47 @@ "@types/json-schema@*", "@types/json-schema@^7.0.9": version "7.0.11" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" + resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz" integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== "@types/json5@^0.0.29": version "0.0.29" - resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz" integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== "@types/lodash@^4.14.191": version "4.14.191" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.191.tgz#09511e7f7cba275acd8b419ddac8da9a6a79e2fa" + resolved "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.191.tgz" integrity sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ== "@types/node@*": version "18.14.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.14.0.tgz#94c47b9217bbac49d4a67a967fdcdeed89ebb7d0" + resolved "https://registry.npmjs.org/@types/node/-/node-18.14.0.tgz" integrity sha512-5EWrvLmglK+imbCJY0+INViFWUHg1AHel1sq4ZVSfdcNqGy9Edv3UB9IIzzg+xPaUcAgZYcfVs2fBcwDeZzU0A== "@types/node@^17.0.23": version "17.0.45" - resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.45.tgz#2c0fafd78705e7a18b7906b5201a522719dc5190" + resolved "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz" integrity sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw== "@types/plotly.js-dist@npm:@types/plotly.js": - version "2.12.16" - resolved "https://registry.yarnpkg.com/@types/plotly.js/-/plotly.js-2.12.16.tgz#99a7ef35052ba5ef985a036ba0ec2d549a604a3c" - integrity sha512-EKt30RIIOcVTxFFmrhe+hQauz/DaxoEWsiZFeAWQyeok0lPjqng1f/h6H7C5/s5EpE/vg5SxtCbG856to4LJNw== + version "2.12.18" + resolved "https://registry.npmjs.org/@types/plotly.js/-/plotly.js-2.12.18.tgz" + integrity sha512-ff+CIEWnqZNjZqHtQZvkEAVuLs9fkm1f54QnPVmgoET7wMHdSqUka2hasVN4e5yfHD05YwGjsAtCseewJh/BMw== "@types/prettier@^2.1.5": version "2.7.2" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.2.tgz#6c2324641cc4ba050a8c710b2b251b377581fbf0" + resolved "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.2.tgz" integrity sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg== "@types/prop-types@*": version "15.7.5" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" + resolved "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz" integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== "@types/react@^17.0.43": version "17.0.53" - resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.53.tgz#10d4d5999b8af3d6bc6a9369d7eb953da82442ab" + resolved "https://registry.npmjs.org/@types/react/-/react-17.0.53.tgz" integrity sha512-1yIpQR2zdYu1Z/dc1OxC+MA6GR240u3gcnP4l6mvj/PJiVaqHsQPmWttsvHsfnhfPbU2FuGmo0wSITPygjBmsw== dependencies: "@types/prop-types" "*" @@ -1040,39 +1040,39 @@ "@types/scheduler@*": version "0.16.2" - resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" + resolved "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz" integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== "@types/semver@^7.3.12": version "7.3.13" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91" + resolved "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz" integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw== "@types/stack-utils@^2.0.0": version "2.0.1" - resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" + resolved "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz" integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== "@types/tough-cookie@*": version "4.0.2" - resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-4.0.2.tgz#6286b4c7228d58ab7866d19716f3696e03a09397" + resolved "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.2.tgz" integrity sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw== "@types/yargs-parser@*": version "21.0.0" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" + resolved "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz" integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== "@types/yargs@^17.0.8": version "17.0.22" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.22.tgz#7dd37697691b5f17d020f3c63e7a45971ff71e9a" + resolved "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz" integrity sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g== dependencies: "@types/yargs-parser" "*" "@typescript-eslint/eslint-plugin@^5.47.1": version "5.52.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.52.0.tgz#5fb0d43574c2411f16ea80f5fc335b8eaa7b28a8" + resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.52.0.tgz" integrity sha512-lHazYdvYVsBokwCdKOppvYJKaJ4S41CgKBcPvyd0xjZNbvQdhn/pnJlGtQksQ/NhInzdaeaSarlBjDXHuclEbg== dependencies: "@typescript-eslint/scope-manager" "5.52.0" @@ -1088,7 +1088,7 @@ "@typescript-eslint/parser@^5.47.1": version "5.52.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.52.0.tgz#73c136df6c0133f1d7870de7131ccf356f5be5a4" + resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.52.0.tgz" integrity sha512-e2KiLQOZRo4Y0D/b+3y08i3jsekoSkOYStROYmPUnGMEoA0h+k2qOH5H6tcjIc68WDvGwH+PaOrP1XRzLJ6QlA== dependencies: "@typescript-eslint/scope-manager" "5.52.0" @@ -1098,7 +1098,7 @@ "@typescript-eslint/scope-manager@5.52.0": version "5.52.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.52.0.tgz#a993d89a0556ea16811db48eabd7c5b72dcb83d1" + resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.52.0.tgz" integrity sha512-AR7sxxfBKiNV0FWBSARxM8DmNxrwgnYMPwmpkC1Pl1n+eT8/I2NAUPuwDy/FmDcC6F8pBfmOcaxcxRHspgOBMw== dependencies: "@typescript-eslint/types" "5.52.0" @@ -1106,7 +1106,7 @@ "@typescript-eslint/type-utils@5.52.0": version "5.52.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.52.0.tgz#9fd28cd02e6f21f5109e35496df41893f33167aa" + resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.52.0.tgz" integrity sha512-tEKuUHfDOv852QGlpPtB3lHOoig5pyFQN/cUiZtpw99D93nEBjexRLre5sQZlkMoHry/lZr8qDAt2oAHLKA6Jw== dependencies: "@typescript-eslint/typescript-estree" "5.52.0" @@ -1116,12 +1116,12 @@ "@typescript-eslint/types@5.52.0": version "5.52.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.52.0.tgz#19e9abc6afb5bd37a1a9bea877a1a836c0b3241b" + resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.52.0.tgz" integrity sha512-oV7XU4CHYfBhk78fS7tkum+/Dpgsfi91IIDy7fjCyq2k6KB63M6gMC0YIvy+iABzmXThCRI6xpCEyVObBdWSDQ== "@typescript-eslint/typescript-estree@5.52.0": version "5.52.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.52.0.tgz#6408cb3c2ccc01c03c278cb201cf07e73347dfca" + resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.52.0.tgz" integrity sha512-WeWnjanyEwt6+fVrSR0MYgEpUAuROxuAH516WPjUblIrClzYJj0kBbjdnbQXLpgAN8qbEuGywiQsXUVDiAoEuQ== dependencies: "@typescript-eslint/types" "5.52.0" @@ -1134,7 +1134,7 @@ "@typescript-eslint/utils@5.52.0", "@typescript-eslint/utils@^5.10.0": version "5.52.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.52.0.tgz#b260bb5a8f6b00a0ed51db66bdba4ed5e4845a72" + resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.52.0.tgz" integrity sha512-As3lChhrbwWQLNk2HC8Ree96hldKIqk98EYvypd3It8Q1f8d5zWyIoaZEp2va5667M4ZyE7X8UUR+azXrFl+NA== dependencies: "@types/json-schema" "^7.0.9" @@ -1148,7 +1148,7 @@ "@typescript-eslint/visitor-keys@5.52.0": version "5.52.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.52.0.tgz#e38c971259f44f80cfe49d97dbffa38e3e75030f" + resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.52.0.tgz" integrity sha512-qMwpw6SU5VHCPr99y274xhbm+PRViK/NATY6qzt+Et7+mThGuFSl/ompj2/hrBlRP/kq+BFdgagnOSgw9TB0eA== dependencies: "@typescript-eslint/types" "5.52.0" @@ -1156,29 +1156,29 @@ abab@^2.0.6: version "2.0.6" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" + resolved "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz" integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== abbrev@^1.0.0: version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== ace-builds@^1.4.14: version "1.15.2" - resolved "https://registry.yarnpkg.com/ace-builds/-/ace-builds-1.15.2.tgz#e9be5c4cbc835894e1202ddc8f7a1f0df049f321" + resolved "https://registry.npmjs.org/ace-builds/-/ace-builds-1.15.2.tgz" integrity sha512-ANXWnANcB4XgC9tyCtG8EXjeDdDY6iJuPQs+pDiZF/2chQMU7LTOBgw9xJdeRzRyNX5+KGZKwgB80XyY2n5QvA== acorn-class-fields@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/acorn-class-fields/-/acorn-class-fields-1.0.0.tgz#b413793e6b3ddfcd17a02f9c7a850f4bbfdc1c7a" + resolved "https://registry.npmjs.org/acorn-class-fields/-/acorn-class-fields-1.0.0.tgz" integrity sha512-l+1FokF34AeCXGBHkrXFmml9nOIRI+2yBnBpO5MaVAaTIJ96irWLtcCxX+7hAp6USHFCe+iyyBB4ZhxV807wmA== dependencies: acorn-private-class-elements "^1.0.0" acorn-globals@^7.0.0: version "7.0.1" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-7.0.1.tgz#0dbf05c44fa7c94332914c02066d5beff62c40c3" + resolved "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz" integrity sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q== dependencies: acorn "^8.1.0" @@ -1186,46 +1186,46 @@ acorn-globals@^7.0.0: acorn-jsx@^5.3.2: version "5.3.2" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== acorn-loose@^8.0.0: version "8.3.0" - resolved "https://registry.yarnpkg.com/acorn-loose/-/acorn-loose-8.3.0.tgz#0cd62461d21dce4f069785f8d3de136d5525029a" + resolved "https://registry.npmjs.org/acorn-loose/-/acorn-loose-8.3.0.tgz" integrity sha512-75lAs9H19ldmW+fAbyqHdjgdCrz0pWGXKmnqFoh8PyVd1L2RIb4RzYrSjmopeqv3E1G3/Pimu6GgLlrGbrkF7w== dependencies: acorn "^8.5.0" acorn-private-class-elements@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/acorn-private-class-elements/-/acorn-private-class-elements-1.0.0.tgz#c5805bf8a46cd065dc9b3513bfebb504c88cd706" + resolved "https://registry.npmjs.org/acorn-private-class-elements/-/acorn-private-class-elements-1.0.0.tgz" integrity sha512-zYNcZtxKgVCg1brS39BEou86mIao1EV7eeREG+6WMwKbuYTeivRRs6S2XdWnboRde6G9wKh2w+WBydEyJsJ6mg== acorn-walk@^8.0.0, acorn-walk@^8.0.2: version "8.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" + resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz" integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== acorn@^7.1.1: version "7.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" + resolved "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== acorn@^8.1.0, acorn@^8.5.0, acorn@^8.8.0, acorn@^8.8.1, acorn@^8.8.2: version "8.8.2" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz" integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== agent-base@6, agent-base@^6.0.2: version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== dependencies: debug "4" agentkeepalive@^4.2.1: version "4.2.1" - resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.2.1.tgz#a7975cbb9f83b367f06c90cc51ff28fe7d499717" + resolved "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz" integrity sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA== dependencies: debug "^4.1.0" @@ -1234,7 +1234,7 @@ agentkeepalive@^4.2.1: aggregate-error@^3.0.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz" integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== dependencies: clean-stack "^2.0.0" @@ -1242,7 +1242,7 @@ aggregate-error@^3.0.0: ajv@^6.10.0, ajv@^6.12.4: version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== dependencies: fast-deep-equal "^3.1.1" @@ -1252,43 +1252,43 @@ ajv@^6.10.0, ajv@^6.12.4: ansi-escapes@^4.2.1: version "4.3.2" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== dependencies: type-fest "^0.21.3" ansi-regex@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== ansi-sequence-parser@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/ansi-sequence-parser/-/ansi-sequence-parser-1.1.0.tgz#4d790f31236ac20366b23b3916b789e1bde39aed" + resolved "https://registry.npmjs.org/ansi-sequence-parser/-/ansi-sequence-parser-1.1.0.tgz" integrity sha512-lEm8mt52to2fT8GhciPCGeCXACSz2UwIN4X2e2LJSnZ5uAbn2/dsYdOmUXq0AtWS5cpAupysIneExOgH0Vd2TQ== ansi-styles@^3.2.1: version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== dependencies: color-convert "^1.9.0" ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: color-convert "^2.0.1" ansi-styles@^5.0.0: version "5.2.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz" integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== anymatch@^3.0.3: version "3.1.3" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz" integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== dependencies: normalize-path "^3.0.0" @@ -1296,12 +1296,12 @@ anymatch@^3.0.3: "aproba@^1.0.3 || ^2.0.0": version "2.0.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" + resolved "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz" integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== are-we-there-yet@^3.0.0: version "3.0.1" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz#679df222b278c64f2cdba1175cdc00b0d96164bd" + resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz" integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg== dependencies: delegates "^1.0.0" @@ -1309,26 +1309,26 @@ are-we-there-yet@^3.0.0: argparse@^1.0.7: version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== dependencies: sprintf-js "~1.0.2" argparse@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== aria-query@^5.1.3: version "5.1.3" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.1.3.tgz#19db27cd101152773631396f7a95a3b58c22c35e" + resolved "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz" integrity sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ== dependencies: deep-equal "^2.0.5" array-includes@^3.1.5, array-includes@^3.1.6: version "3.1.6" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f" + resolved "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz" integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw== dependencies: call-bind "^1.0.2" @@ -1339,12 +1339,12 @@ array-includes@^3.1.5, array-includes@^3.1.6: array-union@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== array.prototype.flat@^1.3.1: version "1.3.1" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz#ffc6576a7ca3efc2f46a143b9d1dda9b4b3cf5e2" + resolved "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz" integrity sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA== dependencies: call-bind "^1.0.2" @@ -1354,7 +1354,7 @@ array.prototype.flat@^1.3.1: array.prototype.flatmap@^1.3.1: version "1.3.1" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz#1aae7903c2100433cb8261cd4ed310aab5c4a183" + resolved "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz" integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ== dependencies: call-bind "^1.0.2" @@ -1364,7 +1364,7 @@ array.prototype.flatmap@^1.3.1: array.prototype.tosorted@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz#ccf44738aa2b5ac56578ffda97c03fd3e23dd532" + resolved "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz" integrity sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ== dependencies: call-bind "^1.0.2" @@ -1375,46 +1375,46 @@ array.prototype.tosorted@^1.1.1: ast-types-flow@^0.0.7: version "0.0.7" - resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" + resolved "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz" integrity sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag== astring@^1.4.3, astring@^1.8.4: version "1.8.4" - resolved "https://registry.yarnpkg.com/astring/-/astring-1.8.4.tgz#6d4c5d8de7be2ead9e4a3cc0e2efb8d759378904" + resolved "https://registry.npmjs.org/astring/-/astring-1.8.4.tgz" integrity sha512-97a+l2LBU3Op3bBQEff79i/E4jMD2ZLFD8rHx9B6mXyB2uQwhJQYfiDqUwtfjF4QA1F2qs//N6Cw8LetMbQjcw== async@^2.6.4: version "2.6.4" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" + resolved "https://registry.npmjs.org/async/-/async-2.6.4.tgz" integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== dependencies: lodash "^4.17.14" asynckit@^0.4.0: version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== available-typed-arrays@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" + resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz" integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== axe-core@^4.6.2: version "4.6.3" - resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.6.3.tgz#fc0db6fdb65cc7a80ccf85286d91d64ababa3ece" + resolved "https://registry.npmjs.org/axe-core/-/axe-core-4.6.3.tgz" integrity sha512-/BQzOX780JhsxDnPpH4ZiyrJAzcd8AfzFPkv+89veFSr1rcMjuq2JDCwypKaPeB6ljHp9KjXhPpjgCvQlWYuqg== axobject-query@^3.1.1: version "3.1.1" - resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-3.1.1.tgz#3b6e5c6d4e43ca7ba51c5babf99d22a9c68485e1" + resolved "https://registry.npmjs.org/axobject-query/-/axobject-query-3.1.1.tgz" integrity sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg== dependencies: deep-equal "^2.0.5" babel-jest@^29.4.3: version "29.4.3" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.4.3.tgz#478b84d430972b277ad67dd631be94abea676792" + resolved "https://registry.npmjs.org/babel-jest/-/babel-jest-29.4.3.tgz" integrity sha512-o45Wyn32svZE+LnMVWv/Z4x0SwtLbh4FyGcYtR20kIWd+rdrDZ9Fzq8Ml3MYLD+mZvEdzCjZsCnYZ2jpJyQ+Nw== dependencies: "@jest/transform" "^29.4.3" @@ -1427,7 +1427,7 @@ babel-jest@^29.4.3: babel-plugin-istanbul@^6.1.1: version "6.1.1" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" + resolved "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz" integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" @@ -1438,7 +1438,7 @@ babel-plugin-istanbul@^6.1.1: babel-plugin-jest-hoist@^29.4.3: version "29.4.3" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.4.3.tgz#ad1dfb5d31940957e00410ef7d9b2aa94b216101" + resolved "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.4.3.tgz" integrity sha512-mB6q2q3oahKphy5V7CpnNqZOCkxxZ9aokf1eh82Dy3jQmg4xvM1tGrh5y6BQUJh4a3Pj9+eLfwvAZ7VNKg7H8Q== dependencies: "@babel/template" "^7.3.3" @@ -1448,7 +1448,7 @@ babel-plugin-jest-hoist@^29.4.3: babel-preset-current-node-syntax@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" + resolved "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz" integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== dependencies: "@babel/plugin-syntax-async-generators" "^7.8.4" @@ -1466,7 +1466,7 @@ babel-preset-current-node-syntax@^1.0.0: babel-preset-jest@^29.4.3: version "29.4.3" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.4.3.tgz#bb926b66ae253b69c6e3ef87511b8bb5c53c5b52" + resolved "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.4.3.tgz" integrity sha512-gWx6COtSuma6n9bw+8/F+2PCXrIgxV/D1TJFnp6OyBK2cxPWg0K9p/sriNYeifKjpUkMViWQ09DSWtzJQRETsw== dependencies: babel-plugin-jest-hoist "^29.4.3" @@ -1474,34 +1474,34 @@ babel-preset-jest@^29.4.3: balanced-match@^1.0.0: version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== base64-js@^1.3.1: version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== basic-auth@^1.0.3: version "1.1.0" - resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-1.1.0.tgz#45221ee429f7ee1e5035be3f51533f1cdfd29884" + resolved "https://registry.npmjs.org/basic-auth/-/basic-auth-1.1.0.tgz" integrity sha512-CtGuTyWf3ig+sgRyC7uP6DM3N+5ur/p8L+FPfsd+BbIfIs74TFfCajZTHnCw6K5dqM0bZEbRIqRy1fAdiUJhTA== bindings@^1.5.0: version "1.5.0" - resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + resolved "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz" integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== dependencies: file-uri-to-path "1.0.0" bit-twiddle@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/bit-twiddle/-/bit-twiddle-1.0.2.tgz#0c6c1fabe2b23d17173d9a61b7b7093eb9e1769e" + resolved "https://registry.npmjs.org/bit-twiddle/-/bit-twiddle-1.0.2.tgz" integrity sha512-B9UhK0DKFZhoTFcfvAzhqsjStvGJp9vYWf3+6SNTtdSQnvIgfkHbgHrg/e4+TH71N2GDu8tpmCVoyfrL1d7ntA== bl@^4.0.3: version "4.1.0" - resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + resolved "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz" integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== dependencies: buffer "^5.5.0" @@ -1510,7 +1510,7 @@ bl@^4.0.3: brace-expansion@^1.1.7: version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== dependencies: balanced-match "^1.0.0" @@ -1518,21 +1518,21 @@ brace-expansion@^1.1.7: brace-expansion@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== dependencies: balanced-match "^1.0.0" braces@^3.0.2: version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== dependencies: fill-range "^7.0.1" browserslist@^4.21.3: version "4.21.5" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.5.tgz#75c5dae60063ee641f977e00edd3cfb2fb7af6a7" + resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz" integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w== dependencies: caniuse-lite "^1.0.30001449" @@ -1542,26 +1542,26 @@ browserslist@^4.21.3: bs-logger@0.x: version "0.2.6" - resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" + resolved "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz" integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== dependencies: fast-json-stable-stringify "2.x" bser@2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" + resolved "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz" integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== dependencies: node-int64 "^0.4.0" buffer-from@^1.0.0: version "1.1.2" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== buffer@^5.5.0: version "5.7.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== dependencies: base64-js "^1.3.1" @@ -1569,7 +1569,7 @@ buffer@^5.5.0: cacache@^16.1.0: version "16.1.3" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-16.1.3.tgz#a02b9f34ecfaf9a78c9f4bc16fceb94d5d67a38e" + resolved "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz" integrity sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ== dependencies: "@npmcli/fs" "^2.1.0" @@ -1593,7 +1593,7 @@ cacache@^16.1.0: call-bind@^1.0.0, call-bind@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== dependencies: function-bind "^1.1.1" @@ -1601,12 +1601,12 @@ call-bind@^1.0.0, call-bind@^1.0.2: callsites@^3.0.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== camel-case@^4.1.2: version "4.1.2" - resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" + resolved "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz" integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== dependencies: pascal-case "^3.1.2" @@ -1614,27 +1614,27 @@ camel-case@^4.1.2: camelcase@^5.3.1: version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== camelcase@^6.2.0: version "6.3.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== camera-unproject@1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/camera-unproject/-/camera-unproject-1.0.1.tgz#86927a9d6d5340a8c9e36da840f7ccb6d6da12cf" + resolved "https://registry.npmjs.org/camera-unproject/-/camera-unproject-1.0.1.tgz" integrity sha512-IAta9EeGGa9rLJsw9Fk0lrZycDg2fF6nl6AvJ+QrkROxc4IaawosU9PQjoqgFYrOe1+kqJlod/W2TAZkTpxZQg== caniuse-lite@^1.0.30001449: version "1.0.30001456" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001456.tgz#734ec1dbfa4f3abe6e435b78ecf40d68e8c32ce4" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001456.tgz" integrity sha512-XFHJY5dUgmpMV25UqaD4kVq2LsiaU5rS8fb0f17pCoXQiQslzmFgnfOxfvo1bTpTqf7dwG/N/05CnLCnOEKmzA== capital-case@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/capital-case/-/capital-case-1.0.4.tgz#9d130292353c9249f6b00fa5852bee38a717e669" + resolved "https://registry.npmjs.org/capital-case/-/capital-case-1.0.4.tgz" integrity sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A== dependencies: no-case "^3.0.4" @@ -1643,7 +1643,7 @@ capital-case@^1.0.4: chalk@^2.0.0: version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== dependencies: ansi-styles "^3.2.1" @@ -1652,7 +1652,7 @@ chalk@^2.0.0: chalk@^4.0.0: version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== dependencies: ansi-styles "^4.1.0" @@ -1660,12 +1660,12 @@ chalk@^4.0.0: chalk@^5.0.1: version "5.2.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.2.0.tgz#249623b7d66869c673699fb66d65723e54dfcfb3" + resolved "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz" integrity sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA== change-case@^4.1.2: version "4.1.2" - resolved "https://registry.yarnpkg.com/change-case/-/change-case-4.1.2.tgz#fedfc5f136045e2398c0410ee441f95704641e12" + resolved "https://registry.npmjs.org/change-case/-/change-case-4.1.2.tgz" integrity sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A== dependencies: camel-case "^4.1.2" @@ -1683,47 +1683,47 @@ change-case@^4.1.2: char-regex@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" + resolved "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz" integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== chownr@^1.1.1: version "1.1.4" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + resolved "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz" integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== chownr@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" + resolved "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz" integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== ci-info@^3.2.0: version "3.8.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91" + resolved "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz" integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== cjs-module-lexer@^1.0.0: version "1.2.2" - resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz#9f84ba3244a512f3a54e5277e8eef4c489864e40" + resolved "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz" integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA== class-transformer@^0.5.1: version "0.5.1" - resolved "https://registry.yarnpkg.com/class-transformer/-/class-transformer-0.5.1.tgz#24147d5dffd2a6cea930a3250a677addf96ab336" + resolved "https://registry.npmjs.org/class-transformer/-/class-transformer-0.5.1.tgz" integrity sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw== classnames@^2.3.1: version "2.3.2" - resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.2.tgz#351d813bf0137fcc6a76a16b88208d2560a0d924" + resolved "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz" integrity sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw== clean-stack@^2.0.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== cliui@^7.0.2: version "7.0.4" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + resolved "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz" integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== dependencies: string-width "^4.2.0" @@ -1732,7 +1732,7 @@ cliui@^7.0.2: cliui@^8.0.1: version "8.0.1" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + resolved "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz" integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== dependencies: string-width "^4.2.0" @@ -1741,85 +1741,85 @@ cliui@^8.0.1: co@^4.6.0: version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + resolved "https://registry.npmjs.org/co/-/co-4.6.0.tgz" integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== collect-v8-coverage@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" + resolved "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz" integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== color-convert@^1.9.0: version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== dependencies: color-name "1.1.3" color-convert@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== dependencies: color-name "~1.1.4" color-name@1.1.3: version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== color-name@~1.1.4: version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== color-support@^1.1.3: version "1.1.3" - resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" + resolved "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz" integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== colors@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" + resolved "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz" integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== combined-stream@^1.0.8: version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== dependencies: delayed-stream "~1.0.0" commander@^9.4.0: version "9.5.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-9.5.0.tgz#bc08d1eb5cedf7ccb797a96199d41c7bc3e60d30" + resolved "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz" integrity sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ== concat-map@0.0.1: version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== confusing-browser-globals@^1.0.10: version "1.0.11" - resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz#ae40e9b57cdd3915408a2805ebd3a5585608dc81" + resolved "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz" integrity sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA== console-control-strings@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + resolved "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz" integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== console-table-printer@^2.11.1: version "2.11.1" - resolved "https://registry.yarnpkg.com/console-table-printer/-/console-table-printer-2.11.1.tgz#c2dfe56e6343ea5bcfa3701a4be29fe912dbd9c7" + resolved "https://registry.npmjs.org/console-table-printer/-/console-table-printer-2.11.1.tgz" integrity sha512-8LfFpbF/BczoxPwo2oltto5bph8bJkGOATXsg3E9ddMJOGnWJciKHldx2zDj5XIBflaKzPfVCjOTl6tMh7lErg== dependencies: simple-wcswidth "^1.0.1" constant-case@^3.0.4: version "3.0.4" - resolved "https://registry.yarnpkg.com/constant-case/-/constant-case-3.0.4.tgz#3b84a9aeaf4cf31ec45e6bf5de91bdfb0589faf1" + resolved "https://registry.npmjs.org/constant-case/-/constant-case-3.0.4.tgz" integrity sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ== dependencies: no-case "^3.0.4" @@ -1828,17 +1828,17 @@ constant-case@^3.0.4: convert-source-map@^1.6.0, convert-source-map@^1.7.0: version "1.9.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" + resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz" integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== convert-source-map@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz" integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== copyfiles@^2.4.1: version "2.4.1" - resolved "https://registry.yarnpkg.com/copyfiles/-/copyfiles-2.4.1.tgz#d2dcff60aaad1015f09d0b66e7f0f1c5cd3c5da5" + resolved "https://registry.npmjs.org/copyfiles/-/copyfiles-2.4.1.tgz" integrity sha512-fereAvAvxDrQDOXybk3Qu3dPbOoKoysFMWtkY3mv5BsL8//OSZVL5DCLYqgRfY5cWirgRzlC+WSrxp6Bo3eNZg== dependencies: glob "^7.0.5" @@ -1851,24 +1851,24 @@ copyfiles@^2.4.1: core-util-is@~1.0.0: version "1.0.3" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz" integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== corser@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/corser/-/corser-2.0.1.tgz#8eda252ecaab5840dcd975ceb90d9370c819ff87" + resolved "https://registry.npmjs.org/corser/-/corser-2.0.1.tgz" integrity sha512-utCYNzRSQIZNPIcGZdQc92UVJYAhtGAteCFg0yRaFm8f0P+CPtyGyHXJcGXnffjCybUCEx3FQ2G7U3/o9eIkVQ== cross-env@^7.0.3: version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-7.0.3.tgz#865264b29677dc015ba8418918965dd232fc54cf" + resolved "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz" integrity sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw== dependencies: cross-spawn "^7.0.1" cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== dependencies: path-key "^3.1.0" @@ -1877,34 +1877,34 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3: cssom@^0.5.0: version "0.5.0" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.5.0.tgz#d254fa92cd8b6fbd83811b9fbaed34663cc17c36" + resolved "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz" integrity sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw== cssom@~0.3.6: version "0.3.8" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" + resolved "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz" integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== cssstyle@^2.3.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" + resolved "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz" integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== dependencies: cssom "~0.3.6" csstype@^3.0.2: version "3.1.1" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.1.tgz#841b532c45c758ee546a11d5bd7b7b473c8c30b9" + resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz" integrity sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw== damerau-levenshtein@^1.0.8: version "1.0.8" - resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" + resolved "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz" integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== data-urls@^3.0.2: version "3.0.2" - resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-3.0.2.tgz#9cf24a477ae22bcef5cd5f6f0bfbc1d2d3be9143" + resolved "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz" integrity sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ== dependencies: abab "^2.0.6" @@ -1913,43 +1913,43 @@ data-urls@^3.0.2: dayjs@^1.10.4: version "1.11.7" - resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.7.tgz#4b296922642f70999544d1144a2c25730fce63e2" + resolved "https://registry.npmjs.org/dayjs/-/dayjs-1.11.7.tgz" integrity sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ== debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" debug@^3.2.7: version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== dependencies: ms "^2.1.1" decimal.js@^10.4.2: version "10.4.3" - resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" + resolved "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz" integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== decompress-response@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" + resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz" integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== dependencies: mimic-response "^3.1.0" dedent@^0.7.0: version "0.7.0" - resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" + resolved "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz" integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== deep-equal@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" + resolved "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz" integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== dependencies: is-arguments "^1.0.4" @@ -1961,7 +1961,7 @@ deep-equal@^1.1.1: deep-equal@^2.0.5: version "2.2.0" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.2.0.tgz#5caeace9c781028b9ff459f33b779346637c43e6" + resolved "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.0.tgz" integrity sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw== dependencies: call-bind "^1.0.2" @@ -1984,22 +1984,22 @@ deep-equal@^2.0.5: deep-extend@^0.6.0: version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + resolved "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz" integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== deep-is@^0.1.3, deep-is@~0.1.3: version "0.1.4" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== deepmerge@^4.2.2: version "4.3.0" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.0.tgz#65491893ec47756d44719ae520e0e2609233b59b" + resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.0.tgz" integrity sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og== define-properties@^1.1.3, define-properties@^1.1.4: version "1.2.0" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5" + resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz" integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== dependencies: has-property-descriptors "^1.0.0" @@ -2007,68 +2007,68 @@ define-properties@^1.1.3, define-properties@^1.1.4: delayed-stream@~1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== delegates@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + resolved "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz" integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== depd@^1.1.2: version "1.1.2" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== detect-libc@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.1.tgz#e1897aa88fa6ad197862937fbc0441ef352ee0cd" + resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz" integrity sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w== detect-newline@^3.0.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" + resolved "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz" integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== diff-match-patch@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/diff-match-patch/-/diff-match-patch-1.0.5.tgz#abb584d5f10cd1196dfc55aa03701592ae3f7b37" + resolved "https://registry.npmjs.org/diff-match-patch/-/diff-match-patch-1.0.5.tgz" integrity sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw== diff-sequences@^27.5.1: version "27.5.1" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.5.1.tgz#eaecc0d327fd68c8d9672a1e64ab8dccb2ef5327" + resolved "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz" integrity sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ== diff-sequences@^29.4.3: version "29.4.3" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.4.3.tgz#9314bc1fabe09267ffeca9cbafc457d8499a13f2" + resolved "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz" integrity sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA== dir-glob@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== dependencies: path-type "^4.0.0" doctrine@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + resolved "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz" integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== dependencies: esutils "^2.0.2" doctrine@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== dependencies: esutils "^2.0.2" dom-helpers@^5.0.1: version "5.2.1" - resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.2.1.tgz#d9400536b2bf8225ad98fe052e029451ac40e902" + resolved "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz" integrity sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA== dependencies: "@babel/runtime" "^7.8.7" @@ -2076,19 +2076,19 @@ dom-helpers@^5.0.1: dom4@^2.1.5: version "2.1.6" - resolved "https://registry.yarnpkg.com/dom4/-/dom4-2.1.6.tgz#c90df07134aa0dbd81ed4d6ba1237b36fc164770" + resolved "https://registry.npmjs.org/dom4/-/dom4-2.1.6.tgz" integrity sha512-JkCVGnN4ofKGbjf5Uvc8mmxaATIErKQKSgACdBXpsQ3fY6DlIpAyWfiBSrGkttATssbDCp3psiAKWXk5gmjycA== domexception@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/domexception/-/domexception-4.0.0.tgz#4ad1be56ccadc86fc76d033353999a8037d03673" + resolved "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz" integrity sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw== dependencies: webidl-conversions "^7.0.0" dot-case@^3.0.4: version "3.0.4" - resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" + resolved "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz" integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== dependencies: no-case "^3.0.4" @@ -2096,7 +2096,7 @@ dot-case@^3.0.4: ecstatic@^3.3.2: version "3.3.2" - resolved "https://registry.yarnpkg.com/ecstatic/-/ecstatic-3.3.2.tgz#6d1dd49814d00594682c652adb66076a69d46c48" + resolved "https://registry.npmjs.org/ecstatic/-/ecstatic-3.3.2.tgz" integrity sha512-fLf9l1hnwrHI2xn9mEDT7KIi22UDqA2jaCwyCbSUJh9a1V+LEUSL/JO/6TIz/QyuBURWUHrFL5Kg2TtO1bkkog== dependencies: he "^1.1.1" @@ -2106,22 +2106,22 @@ ecstatic@^3.3.2: electron-to-chromium@^1.4.284: version "1.4.302" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.302.tgz#5770646ffe7051677b489226144aad9386d420f2" + resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.302.tgz" integrity sha512-Uk7C+7aPBryUR1Fwvk9VmipBcN9fVsqBO57jV2ZjTm+IZ6BMNqu7EDVEg2HxCNufk6QcWlFsBkhQyQroB2VWKw== emittery@^0.13.1: version "0.13.1" - resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" + resolved "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz" integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== emoji-regex@^8.0.0: version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== emoji-regex@^9.2.2: version "9.2.2" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== encoding@^0.1.13: @@ -2133,36 +2133,36 @@ encoding@^0.1.13: end-of-stream@^1.1.0, end-of-stream@^1.4.1: version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== dependencies: once "^1.4.0" entities@^4.4.0: version "4.4.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-4.4.0.tgz#97bdaba170339446495e653cfd2db78962900174" + resolved "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz" integrity sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA== env-paths@^2.2.0: version "2.2.1" - resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" + resolved "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz" integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== err-code@^2.0.2: version "2.0.3" - resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" + resolved "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz" integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== error-ex@^1.3.1: version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== dependencies: is-arrayish "^0.2.1" es-abstract@^1.19.0, es-abstract@^1.20.4: version "1.21.1" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.21.1.tgz#e6105a099967c08377830a0c9cb589d570dd86c6" + resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.1.tgz" integrity sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg== dependencies: available-typed-arrays "^1.0.5" @@ -2201,7 +2201,7 @@ es-abstract@^1.19.0, es-abstract@^1.20.4: es-get-iterator@^1.1.2: version "1.1.3" - resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.3.tgz#3ef87523c5d464d41084b2c3c9c214f1199763d6" + resolved "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz" integrity sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw== dependencies: call-bind "^1.0.2" @@ -2216,7 +2216,7 @@ es-get-iterator@^1.1.2: es-set-tostringtag@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" + resolved "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz" integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== dependencies: get-intrinsic "^1.1.3" @@ -2225,14 +2225,14 @@ es-set-tostringtag@^2.0.1: es-shim-unscopables@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" + resolved "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz" integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== dependencies: has "^1.0.3" es-to-primitive@^1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz" integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== dependencies: is-callable "^1.1.4" @@ -2241,7 +2241,7 @@ es-to-primitive@^1.2.1: esbuild@^0.17.8: version "0.17.8" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.17.8.tgz#f7f799abc7cdce3f0f2e3e0c01f120d4d55193b4" + resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.17.8.tgz" integrity sha512-g24ybC3fWhZddZK6R3uD2iF/RIPnRpwJAqLov6ouX3hMbY4+tKolP0VMF3zuIYCaXun+yHwS5IPQ91N2BT191g== optionalDependencies: "@esbuild/android-arm" "0.17.8" @@ -2269,27 +2269,27 @@ esbuild@^0.17.8: escalade@^3.1.1: version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== escape-string-regexp@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== escape-string-regexp@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz" integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== escape-string-regexp@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== escodegen@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd" + resolved "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz" integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw== dependencies: esprima "^4.0.1" @@ -2301,7 +2301,7 @@ escodegen@^2.0.0: eslint-config-airbnb-base@^15.0.0: version "15.0.0" - resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz#6b09add90ac79c2f8d723a2580e07f3925afd236" + resolved "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz" integrity sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig== dependencies: confusing-browser-globals "^1.0.10" @@ -2311,14 +2311,14 @@ eslint-config-airbnb-base@^15.0.0: eslint-config-airbnb-typescript@^17.0.0: version "17.0.0" - resolved "https://registry.yarnpkg.com/eslint-config-airbnb-typescript/-/eslint-config-airbnb-typescript-17.0.0.tgz#360dbcf810b26bbcf2ff716198465775f1c49a07" + resolved "https://registry.npmjs.org/eslint-config-airbnb-typescript/-/eslint-config-airbnb-typescript-17.0.0.tgz" integrity sha512-elNiuzD0kPAPTXjFWg+lE24nMdHMtuxgYoD30OyMD6yrW1AhFZPAg27VX7d3tzOErw+dgJTNWfRSDqEcXb4V0g== dependencies: eslint-config-airbnb-base "^15.0.0" eslint-config-airbnb@^19.0.4: version "19.0.4" - resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-19.0.4.tgz#84d4c3490ad70a0ffa571138ebcdea6ab085fdc3" + resolved "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-19.0.4.tgz" integrity sha512-T75QYQVQX57jiNgpF9r1KegMICE94VYwoFQyMGhrvc+lB8YF2E/M/PYDaQe1AJcWaEgqLE+ErXV1Og/+6Vyzew== dependencies: eslint-config-airbnb-base "^15.0.0" @@ -2327,7 +2327,7 @@ eslint-config-airbnb@^19.0.4: eslint-import-resolver-node@^0.3.7: version "0.3.7" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz#83b375187d412324a1963d84fa664377a23eb4d7" + resolved "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz" integrity sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA== dependencies: debug "^3.2.7" @@ -2336,7 +2336,7 @@ eslint-import-resolver-node@^0.3.7: eslint-import-resolver-typescript@^2.7.1: version "2.7.1" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.7.1.tgz#a90a4a1c80da8d632df25994c4c5fdcdd02b8751" + resolved "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.7.1.tgz" integrity sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ== dependencies: debug "^4.3.4" @@ -2347,14 +2347,14 @@ eslint-import-resolver-typescript@^2.7.1: eslint-module-utils@^2.7.4: version "2.7.4" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz#4f3e41116aaf13a20792261e61d3a2e7e0583974" + resolved "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz" integrity sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA== dependencies: debug "^3.2.7" eslint-plugin-import@^2.26.0: version "2.27.5" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz#876a6d03f52608a3e5bb439c2550588e51dd6c65" + resolved "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz" integrity sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow== dependencies: array-includes "^3.1.6" @@ -2375,14 +2375,14 @@ eslint-plugin-import@^2.26.0: eslint-plugin-jest@^26.8.1: version "26.9.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-26.9.0.tgz#7931c31000b1c19e57dbfb71bbf71b817d1bf949" + resolved "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-26.9.0.tgz" integrity sha512-TWJxWGp1J628gxh2KhaH1H1paEdgE2J61BBF1I59c6xWeL5+D1BzMxGDN/nXAfX+aSkR5u80K+XhskK6Gwq9ng== dependencies: "@typescript-eslint/utils" "^5.10.0" eslint-plugin-jsx-a11y@^6.5.1: version "6.7.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz#fca5e02d115f48c9a597a6894d5bcec2f7a76976" + resolved "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz" integrity sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA== dependencies: "@babel/runtime" "^7.20.7" @@ -2404,12 +2404,12 @@ eslint-plugin-jsx-a11y@^6.5.1: eslint-plugin-react-hooks@^4.4.0: version "4.6.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3" + resolved "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz" integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== eslint-plugin-react@^7.29.4: version "7.32.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz#e71f21c7c265ebce01bcbc9d0955170c55571f10" + resolved "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz" integrity sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg== dependencies: array-includes "^3.1.6" @@ -2430,12 +2430,12 @@ eslint-plugin-react@^7.29.4: eslint-plugin-simple-import-sort@^8.0.0: version "8.0.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-8.0.0.tgz#9d9a2372b0606e999ea841b10458a370a6ccc160" + resolved "https://registry.npmjs.org/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-8.0.0.tgz" integrity sha512-bXgJQ+lqhtQBCuWY/FUWdB27j4+lqcvXv5rUARkzbeWLwea+S5eBZEQrhnO+WgX3ZoJHVj0cn943iyXwByHHQw== eslint-scope@^5.1.1: version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== dependencies: esrecurse "^4.3.0" @@ -2443,7 +2443,7 @@ eslint-scope@^5.1.1: eslint-scope@^7.1.1: version "7.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz" integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== dependencies: esrecurse "^4.3.0" @@ -2451,24 +2451,24 @@ eslint-scope@^7.1.1: eslint-utils@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" + resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz" integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== dependencies: eslint-visitor-keys "^2.0.0" eslint-visitor-keys@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz" integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== eslint-visitor-keys@^3.3.0: version "3.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz" integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== eslint@^8.21.0: version "8.34.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.34.0.tgz#fe0ab0ef478104c1f9ebc5537e303d25a8fb22d6" + resolved "https://registry.npmjs.org/eslint/-/eslint-8.34.0.tgz" integrity sha512-1Z8iFsucw+7kSqXNZVslXS8Ioa4u2KM7GPwuKtkTFAqZ/cHMcEaR+1+Br0wLlot49cNxIiZk5wp8EAbPcYZxTg== dependencies: "@eslint/eslintrc" "^1.4.1" @@ -2513,7 +2513,7 @@ eslint@^8.21.0: espree@^9.4.0: version "9.4.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.4.1.tgz#51d6092615567a2c2cff7833445e37c28c0065bd" + resolved "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz" integrity sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg== dependencies: acorn "^8.8.0" @@ -2522,46 +2522,46 @@ espree@^9.4.0: esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== esquery@^1.4.0: version "1.4.2" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.2.tgz#c6d3fee05dd665808e2ad870631f221f5617b1d1" + resolved "https://registry.npmjs.org/esquery/-/esquery-1.4.2.tgz" integrity sha512-JVSoLdTlTDkmjFmab7H/9SL9qGSyjElT3myyKp7krqjVFQCDLmj1QFaCLRFBszBKI0XVZaiiXvuPIX3ZwHe1Ng== dependencies: estraverse "^5.1.0" esrecurse@^4.3.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== dependencies: estraverse "^5.2.0" estraverse@^4.1.1: version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== esutils@^2.0.2: version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== eventemitter3@^4.0.0, eventemitter3@^4.0.7: version "4.0.7" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== execa@^4.0.3: version "4.1.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" + resolved "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz" integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== dependencies: cross-spawn "^7.0.0" @@ -2576,7 +2576,7 @@ execa@^4.0.3: execa@^5.0.0: version "5.1.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz" integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== dependencies: cross-spawn "^7.0.3" @@ -2591,17 +2591,17 @@ execa@^5.0.0: exit@^0.1.2: version "0.1.2" - resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + resolved "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz" integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== expand-template@^2.0.3: version "2.0.3" - resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" + resolved "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz" integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== expect@^29.4.3: version "29.4.3" - resolved "https://registry.yarnpkg.com/expect/-/expect-29.4.3.tgz#5e47757316df744fe3b8926c3ae8a3ebdafff7fe" + resolved "https://registry.npmjs.org/expect/-/expect-29.4.3.tgz" integrity sha512-uC05+Q7eXECFpgDrHdXA4k2rpMyStAYPItEDLyQDo5Ta7fVkJnNA/4zh/OIVkVVNZ1oOK1PipQoyNjuZ6sz6Dg== dependencies: "@jest/expect-utils" "^29.4.3" @@ -2612,12 +2612,12 @@ expect@^29.4.3: fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== fast-glob@^3.2.12, fast-glob@^3.2.9: version "3.2.12" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" + resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz" integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== dependencies: "@nodelib/fs.stat" "^2.0.2" @@ -2628,55 +2628,55 @@ fast-glob@^3.2.12, fast-glob@^3.2.9: fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== fastq@^1.6.0: version "1.15.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" + resolved "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz" integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== dependencies: reusify "^1.0.4" fb-watchman@^2.0.0: version "2.0.2" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" + resolved "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz" integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== dependencies: bser "2.1.1" file-entry-cache@^6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== dependencies: flat-cache "^3.0.4" file-uri-to-path@1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + resolved "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz" integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== fill-range@^7.0.1: version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== dependencies: to-regex-range "^5.0.1" find-parent-dir@^0.3.0: version "0.3.1" - resolved "https://registry.yarnpkg.com/find-parent-dir/-/find-parent-dir-0.3.1.tgz#c5c385b96858c3351f95d446cab866cbf9f11125" + resolved "https://registry.npmjs.org/find-parent-dir/-/find-parent-dir-0.3.1.tgz" integrity sha512-o4UcykWV/XN9wm+jMEtWLPlV8RXCZnMhQI6F6OdHeSez7iiJWePw8ijOlskJZMsaQoGR/b7dH6lO02HhaTN7+A== find-up@^4.0.0, find-up@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== dependencies: locate-path "^5.0.0" @@ -2684,7 +2684,7 @@ find-up@^4.0.0, find-up@^4.1.0: find-up@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== dependencies: locate-path "^6.0.0" @@ -2692,7 +2692,7 @@ find-up@^5.0.0: flat-cache@^3.0.4: version "3.0.4" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz" integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== dependencies: flatted "^3.1.0" @@ -2700,24 +2700,24 @@ flat-cache@^3.0.4: flatted@^3.1.0: version "3.2.7" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" + resolved "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz" integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== follow-redirects@^1.0.0: version "1.15.2" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" + resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz" integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== for-each@^0.3.3: version "0.3.3" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + resolved "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz" integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== dependencies: is-callable "^1.1.3" form-data@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz" integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== dependencies: asynckit "^0.4.0" @@ -2726,19 +2726,19 @@ form-data@^4.0.0: fs-constants@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + resolved "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz" integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== fs-minipass@^2.0.0, fs-minipass@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz" integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== dependencies: minipass "^3.0.0" fs.realpath@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== fsevents@^2.3.2: @@ -2748,12 +2748,12 @@ fsevents@^2.3.2: function-bind@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== function.prototype.name@^1.1.5: version "1.1.5" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" + resolved "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz" integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== dependencies: call-bind "^1.0.2" @@ -2763,12 +2763,12 @@ function.prototype.name@^1.1.5: functions-have-names@^1.2.2: version "1.2.3" - resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + resolved "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz" integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== gauge@^4.0.3: version "4.0.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce" + resolved "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz" integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg== dependencies: aproba "^1.0.3 || ^2.0.0" @@ -2782,17 +2782,17 @@ gauge@^4.0.3: gensync@^1.0.0-beta.2: version "1.0.0-beta.2" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== get-caller-file@^2.0.5: version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.0.tgz#7ad1dc0535f3a2904bba075772763e5051f6d05f" + resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz" integrity sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q== dependencies: function-bind "^1.1.1" @@ -2801,24 +2801,24 @@ get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@ get-package-type@^0.1.0: version "0.1.0" - resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" + resolved "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz" integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== get-stream@^5.0.0: version "5.2.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz" integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== dependencies: pump "^3.0.0" get-stream@^6.0.0: version "6.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== get-symbol-description@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" + resolved "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz" integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== dependencies: call-bind "^1.0.2" @@ -2826,32 +2826,32 @@ get-symbol-description@^1.0.0: github-from-package@0.0.0: version "0.0.0" - resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" + resolved "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz" integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== gl-mat4@1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/gl-mat4/-/gl-mat4-1.2.0.tgz#49d8a7636b70aa00819216635f4a3fd3f4669b26" + resolved "https://registry.npmjs.org/gl-mat4/-/gl-mat4-1.2.0.tgz" integrity sha512-sT5C0pwB1/e9G9AvAoLsoaJtbMGjfd/jfxo8jMCKqYYEnjZuFvqV5rehqar0538EmssjdDeiEWnKyBSTw7quoA== gl-matrix@^3.3.0: version "3.4.3" - resolved "https://registry.yarnpkg.com/gl-matrix/-/gl-matrix-3.4.3.tgz#fc1191e8320009fd4d20e9339595c6041ddc22c9" + resolved "https://registry.npmjs.org/gl-matrix/-/gl-matrix-3.4.3.tgz" integrity sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA== gl-vec3@1.1.3: version "1.1.3" - resolved "https://registry.yarnpkg.com/gl-vec3/-/gl-vec3-1.1.3.tgz#a47c62f918774a06cbed1b65bcd0288ecbb03826" + resolved "https://registry.npmjs.org/gl-vec3/-/gl-vec3-1.1.3.tgz" integrity sha512-jduKUqT0SGH02l8Yl+mV1yVsDfYgQAJyXGxkJQGyxPLHRiW25DwVIRPt6uvhrEMHftJfqhqKthRcyZqNEl9Xdw== gl-wiretap@^0.6.2: version "0.6.2" - resolved "https://registry.yarnpkg.com/gl-wiretap/-/gl-wiretap-0.6.2.tgz#e4aa19622831088fbaa7e5a18d01768f7a3fb07c" + resolved "https://registry.npmjs.org/gl-wiretap/-/gl-wiretap-0.6.2.tgz" integrity sha512-fxy1XGiPkfzK+T3XKDbY7yaqMBmozCGvAFyTwaZA3imeZH83w7Hr3r3bYlMRWIyzMI/lDUvUMM/92LE2OwqFyQ== gl@^5.0.3: version "5.0.3" - resolved "https://registry.yarnpkg.com/gl/-/gl-5.0.3.tgz#a10f37c50e48954348cc3e790b83313049bdbe1c" + resolved "https://registry.npmjs.org/gl/-/gl-5.0.3.tgz" integrity sha512-toWmb3Rgli5Wl9ygjZeglFBVLDYMOomy+rXlVZVDCoIRV+6mQE5nY4NgQgokYIc5oQzc1pvWY9lQJ0hGn61ZUg== dependencies: bindings "^1.5.0" @@ -2864,21 +2864,21 @@ gl@^5.0.3: glob-parent@^5.1.2: version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" glob-parent@^6.0.2: version "6.0.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== dependencies: is-glob "^4.0.3" glob@^7.0.5, glob@^7.1.3, glob@^7.1.4, glob@^7.2.0: version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== dependencies: fs.realpath "^1.0.0" @@ -2890,7 +2890,7 @@ glob@^7.0.5, glob@^7.1.3, glob@^7.1.4, glob@^7.2.0: glob@^8.0.1: version "8.1.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" + resolved "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz" integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== dependencies: fs.realpath "^1.0.0" @@ -2901,26 +2901,26 @@ glob@^8.0.1: globals@^11.1.0: version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== globals@^13.19.0: version "13.20.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82" + resolved "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz" integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ== dependencies: type-fest "^0.20.2" globalthis@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" + resolved "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz" integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== dependencies: define-properties "^1.1.3" globby@^11.1.0: version "11.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== dependencies: array-union "^2.1.0" @@ -2932,26 +2932,26 @@ globby@^11.1.0: glsl-tokenizer@^2.1.5: version "2.1.5" - resolved "https://registry.yarnpkg.com/glsl-tokenizer/-/glsl-tokenizer-2.1.5.tgz#1c2e78c16589933c274ba278d0a63b370c5fee1a" + resolved "https://registry.npmjs.org/glsl-tokenizer/-/glsl-tokenizer-2.1.5.tgz" integrity sha512-XSZEJ/i4dmz3Pmbnpsy3cKh7cotvFlBiZnDOwnj/05EwNp2XrhQ4XKJxT7/pDt4kp4YcpRSKz8eTV7S+mwV6MA== dependencies: through2 "^0.6.3" gopd@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + resolved "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz" integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== dependencies: get-intrinsic "^1.1.3" gpu-mock.js@^1.3.0: version "1.3.1" - resolved "https://registry.yarnpkg.com/gpu-mock.js/-/gpu-mock.js-1.3.1.tgz#f7deaa09da3f672762eda944ecf948fd2c4b1490" + resolved "https://registry.npmjs.org/gpu-mock.js/-/gpu-mock.js-1.3.1.tgz" integrity sha512-+lbp8rQ0p1nTa6Gk6HoLiw4yM6JTpql82U+nCF3sZbX4FJWP9PzzF1018dW8K+pbmqRmhLHbn6Bjc6i6tgUpbA== gpu.js@^2.10.4: version "2.16.0" - resolved "https://registry.yarnpkg.com/gpu.js/-/gpu.js-2.16.0.tgz#35531f8ee79292b71a454455e7bf0aaf6693182a" + resolved "https://registry.npmjs.org/gpu.js/-/gpu.js-2.16.0.tgz" integrity sha512-ZKmWdRXi3F/9nim5ew2IPXZaMlSyqtMtVC8Itobjl+qYUgUqcBHxu8WKqK0AqIyjBVBl7A5ORo4Db2hzgrPd4A== dependencies: acorn "^7.1.1" @@ -2962,78 +2962,78 @@ gpu.js@^2.10.4: graceful-fs@^4.2.6, graceful-fs@^4.2.9: version "4.2.10" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz" integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== grapheme-splitter@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" + resolved "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz" integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== gud@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/gud/-/gud-1.0.0.tgz#a489581b17e6a70beca9abe3ae57de7a499852c0" + resolved "https://registry.npmjs.org/gud/-/gud-1.0.0.tgz" integrity sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw== has-bigints@^1.0.1, has-bigints@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" + resolved "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz" integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== has-flag@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== has-flag@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== has-property-descriptors@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" + resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz" integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== dependencies: get-intrinsic "^1.1.1" has-proto@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" + resolved "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz" integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== has-symbols@^1.0.2, has-symbols@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== has-tostringtag@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz" integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== dependencies: has-symbols "^1.0.2" has-unicode@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + resolved "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz" integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== has@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz" integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== dependencies: function-bind "^1.1.1" he@^1.1.1: version "1.2.0" - resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== header-case@^2.0.4: version "2.0.4" - resolved "https://registry.yarnpkg.com/header-case/-/header-case-2.0.4.tgz#5a42e63b55177349cf405beb8d775acabb92c063" + resolved "https://registry.npmjs.org/header-case/-/header-case-2.0.4.tgz" integrity sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q== dependencies: capital-case "^1.0.4" @@ -3041,24 +3041,24 @@ header-case@^2.0.4: html-encoding-sniffer@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz#2cb1a8cf0db52414776e5b2a7a04d5dd98158de9" + resolved "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz" integrity sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA== dependencies: whatwg-encoding "^2.0.0" html-escaper@^2.0.0: version "2.0.2" - resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + resolved "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz" integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== http-cache-semantics@^4.1.0: version "4.1.1" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" + resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz" integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== http-proxy-agent@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" + resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz" integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== dependencies: "@tootallnate/once" "2" @@ -3067,7 +3067,7 @@ http-proxy-agent@^5.0.0: http-proxy@^1.18.0: version "1.18.1" - resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" + resolved "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz" integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== dependencies: eventemitter3 "^4.0.0" @@ -3076,7 +3076,7 @@ http-proxy@^1.18.0: http-server@^0.12.3: version "0.12.3" - resolved "https://registry.yarnpkg.com/http-server/-/http-server-0.12.3.tgz#ba0471d0ecc425886616cb35c4faf279140a0d37" + resolved "https://registry.npmjs.org/http-server/-/http-server-0.12.3.tgz" integrity sha512-be0dKG6pni92bRjq0kvExtj/NrrAd28/8fCXkaI/4piTwQMSDSLMhWyW0NI1V+DBI3aa1HMlQu46/HjVLfmugA== dependencies: basic-auth "^1.0.3" @@ -3092,7 +3092,7 @@ http-server@^0.12.3: https-proxy-agent@^5.0.0, https-proxy-agent@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz" integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== dependencies: agent-base "6" @@ -3100,24 +3100,24 @@ https-proxy-agent@^5.0.0, https-proxy-agent@^5.0.1: human-signals@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" + resolved "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz" integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== human-signals@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== humanize-ms@^1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" + resolved "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz" integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== dependencies: ms "^2.0.0" husky@5: version "5.2.0" - resolved "https://registry.yarnpkg.com/husky/-/husky-5.2.0.tgz#fc5e1c2300d34855d47de4753607d00943fc0802" + resolved "https://registry.npmjs.org/husky/-/husky-5.2.0.tgz" integrity sha512-AM8T/auHXRBxlrfPVLKP6jt49GCM2Zz47m8G3FOMsLmTv8Dj/fKVWE0Rh2d4Qrvmy131xEsdQnb3OXRib67PGg== iconv-lite@0.6.3, iconv-lite@^0.6.2: @@ -3129,17 +3129,17 @@ iconv-lite@0.6.3, iconv-lite@^0.6.2: ieee754@^1.1.13: version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== ignore@^5.2.0: version "5.2.4" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" + resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz" integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== import-fresh@^3.0.0, import-fresh@^3.2.1: version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== dependencies: parent-module "^1.0.0" @@ -3147,7 +3147,7 @@ import-fresh@^3.0.0, import-fresh@^3.2.1: import-local@^3.0.2: version "3.1.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" + resolved "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz" integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== dependencies: pkg-dir "^4.2.0" @@ -3155,22 +3155,22 @@ import-local@^3.0.2: imurmurhash@^0.1.4: version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== indent-string@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== infer-owner@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + resolved "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz" integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== inflight@^1.0.4: version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== dependencies: once "^1.3.0" @@ -3178,22 +3178,22 @@ inflight@^1.0.4: inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== inherits@2.0.3: version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== ini@~1.3.0: version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== internal-slot@^1.0.3, internal-slot@^1.0.4: version "1.0.5" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" + resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz" integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== dependencies: get-intrinsic "^1.2.0" @@ -3202,12 +3202,12 @@ internal-slot@^1.0.3, internal-slot@^1.0.4: ip@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da" + resolved "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz" integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== is-arguments@^1.0.4, is-arguments@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" + resolved "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz" integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== dependencies: call-bind "^1.0.2" @@ -3215,7 +3215,7 @@ is-arguments@^1.0.4, is-arguments@^1.1.1: is-array-buffer@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.1.tgz#deb1db4fcae48308d54ef2442706c0393997052a" + resolved "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.1.tgz" integrity sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ== dependencies: call-bind "^1.0.2" @@ -3224,19 +3224,19 @@ is-array-buffer@^3.0.1: is-arrayish@^0.2.1: version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== is-bigint@^1.0.1: version "1.0.4" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + resolved "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz" integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== dependencies: has-bigints "^1.0.1" is-boolean-object@^1.1.0: version "1.1.2" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + resolved "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz" integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== dependencies: call-bind "^1.0.2" @@ -3244,85 +3244,85 @@ is-boolean-object@^1.1.0: is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: version "1.2.7" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== is-core-module@^2.11.0, is-core-module@^2.9.0: version "2.11.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" + resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz" integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== dependencies: has "^1.0.3" is-date-object@^1.0.1, is-date-object@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz" integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== dependencies: has-tostringtag "^1.0.0" is-extglob@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== is-fullwidth-code-point@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== is-generator-fn@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" + resolved "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz" integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" is-lambda@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" + resolved "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz" integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== is-map@^2.0.1, is-map@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" + resolved "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz" integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== is-negative-zero@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" + resolved "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz" integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== is-number-object@^1.0.4: version "1.0.7" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" + resolved "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz" integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== dependencies: has-tostringtag "^1.0.0" is-number@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== is-path-inside@^3.0.3: version "3.0.3" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== is-potential-custom-element-name@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" + resolved "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz" integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== is-regex@^1.0.4, is-regex@^1.1.4: version "1.1.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz" integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== dependencies: call-bind "^1.0.2" @@ -3330,38 +3330,38 @@ is-regex@^1.0.4, is-regex@^1.1.4: is-set@^2.0.1, is-set@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec" + resolved "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz" integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g== is-shared-array-buffer@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" + resolved "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz" integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== dependencies: call-bind "^1.0.2" is-stream@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== is-string@^1.0.5, is-string@^1.0.7: version "1.0.7" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + resolved "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz" integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== dependencies: has-tostringtag "^1.0.0" is-symbol@^1.0.2, is-symbol@^1.0.3: version "1.0.4" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz" integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== dependencies: has-symbols "^1.0.2" is-typed-array@^1.1.10, is-typed-array@^1.1.9: version "1.1.10" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.10.tgz#36a5b5cb4189b575d1a3e4b08536bfb485801e3f" + resolved "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz" integrity sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A== dependencies: available-typed-arrays "^1.0.5" @@ -3372,19 +3372,19 @@ is-typed-array@^1.1.10, is-typed-array@^1.1.9: is-weakmap@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.1.tgz#5008b59bdc43b698201d18f62b37b2ca243e8cf2" + resolved "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz" integrity sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA== is-weakref@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + resolved "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz" integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== dependencies: call-bind "^1.0.2" is-weakset@^2.0.1: version "2.0.2" - resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.2.tgz#4569d67a747a1ce5a994dfd4ef6dcea76e7c0a1d" + resolved "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz" integrity sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg== dependencies: call-bind "^1.0.2" @@ -3392,32 +3392,32 @@ is-weakset@^2.0.1: isarray@0.0.1: version "0.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + resolved "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== isarray@^2.0.5: version "2.0.5" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + resolved "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz" integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== isarray@~1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== isexe@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: version "3.2.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" + resolved "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz" integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: version "5.2.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" + resolved "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz" integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== dependencies: "@babel/core" "^7.12.3" @@ -3428,7 +3428,7 @@ istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: istanbul-lib-report@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" + resolved "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz" integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== dependencies: istanbul-lib-coverage "^3.0.0" @@ -3437,7 +3437,7 @@ istanbul-lib-report@^3.0.0: istanbul-lib-source-maps@^4.0.0: version "4.0.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" + resolved "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz" integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== dependencies: debug "^4.1.1" @@ -3446,7 +3446,7 @@ istanbul-lib-source-maps@^4.0.0: istanbul-reports@^3.1.3: version "3.1.5" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.5.tgz#cc9a6ab25cb25659810e4785ed9d9fb742578bae" + resolved "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz" integrity sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w== dependencies: html-escaper "^2.0.0" @@ -3454,7 +3454,7 @@ istanbul-reports@^3.1.3: jest-changed-files@^29.4.3: version "29.4.3" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.4.3.tgz#7961fe32536b9b6d5c28dfa0abcfab31abcf50a7" + resolved "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.4.3.tgz" integrity sha512-Vn5cLuWuwmi2GNNbokPOEcvrXGSGrqVnPEZV7rC6P7ck07Dyw9RFnvWglnupSh+hGys0ajGtw/bc2ZgweljQoQ== dependencies: execa "^5.0.0" @@ -3462,7 +3462,7 @@ jest-changed-files@^29.4.3: jest-circus@^29.4.3: version "29.4.3" - resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.4.3.tgz#fff7be1cf5f06224dd36a857d52a9efeb005ba04" + resolved "https://registry.npmjs.org/jest-circus/-/jest-circus-29.4.3.tgz" integrity sha512-Vw/bVvcexmdJ7MLmgdT3ZjkJ3LKu8IlpefYokxiqoZy6OCQ2VAm6Vk3t/qHiAGUXbdbJKJWnc8gH3ypTbB/OBw== dependencies: "@jest/environment" "^29.4.3" @@ -3487,7 +3487,7 @@ jest-circus@^29.4.3: jest-cli@^29.4.3: version "29.4.3" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.4.3.tgz#fe31fdd0c90c765f392b8b7c97e4845071cd2163" + resolved "https://registry.npmjs.org/jest-cli/-/jest-cli-29.4.3.tgz" integrity sha512-PiiAPuFNfWWolCE6t3ZrDXQc6OsAuM3/tVW0u27UWc1KE+n/HSn5dSE6B2juqN7WP+PP0jAcnKtGmI4u8GMYCg== dependencies: "@jest/core" "^29.4.3" @@ -3505,7 +3505,7 @@ jest-cli@^29.4.3: jest-config@^29.4.3: version "29.4.3" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.4.3.tgz#fca9cdfe6298ae6d04beef1624064d455347c978" + resolved "https://registry.npmjs.org/jest-config/-/jest-config-29.4.3.tgz" integrity sha512-eCIpqhGnIjdUCXGtLhz4gdDoxKSWXKjzNcc5r+0S1GKOp2fwOipx5mRcwa9GB/ArsxJ1jlj2lmlD9bZAsBxaWQ== dependencies: "@babel/core" "^7.11.6" @@ -3533,7 +3533,7 @@ jest-config@^29.4.3: jest-diff@^27.5.1: version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.5.1.tgz#a07f5011ac9e6643cf8a95a462b7b1ecf6680def" + resolved "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz" integrity sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw== dependencies: chalk "^4.0.0" @@ -3543,7 +3543,7 @@ jest-diff@^27.5.1: jest-diff@^29.4.3: version "29.4.3" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.4.3.tgz#42f4eb34d0bf8c0fb08b0501069b87e8e84df347" + resolved "https://registry.npmjs.org/jest-diff/-/jest-diff-29.4.3.tgz" integrity sha512-YB+ocenx7FZ3T5O9lMVMeLYV4265socJKtkwgk/6YUz/VsEzYDkiMuMhWzZmxm3wDRQvayJu/PjkjjSkjoHsCA== dependencies: chalk "^4.0.0" @@ -3553,14 +3553,14 @@ jest-diff@^29.4.3: jest-docblock@^29.4.3: version "29.4.3" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.4.3.tgz#90505aa89514a1c7dceeac1123df79e414636ea8" + resolved "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.4.3.tgz" integrity sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg== dependencies: detect-newline "^3.0.0" jest-each@^29.4.3: version "29.4.3" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.4.3.tgz#a434c199a2f6151c5e3dc80b2d54586bdaa72819" + resolved "https://registry.npmjs.org/jest-each/-/jest-each-29.4.3.tgz" integrity sha512-1ElHNAnKcbJb/b+L+7j0/w7bDvljw4gTv1wL9fYOczeJrbTbkMGQ5iQPFJ3eFQH19VPTx1IyfePdqSpePKss7Q== dependencies: "@jest/types" "^29.4.3" @@ -3571,7 +3571,7 @@ jest-each@^29.4.3: jest-environment-jsdom@^29.4.1: version "29.4.3" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-29.4.3.tgz#bd8ed3808e6d3f616403fbaf8354f77019613d90" + resolved "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.4.3.tgz" integrity sha512-rFjf8JXrw3OjUzzmSE5l0XjMj0/MSVEUMCSXBGPDkfwb1T03HZI7iJSL0cGctZApPSyJxbjyKDVxkZuyhHkuTw== dependencies: "@jest/environment" "^29.4.3" @@ -3585,7 +3585,7 @@ jest-environment-jsdom@^29.4.1: jest-environment-node@^29.4.3: version "29.4.3" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.4.3.tgz#579c4132af478befc1889ddc43c2413a9cdbe014" + resolved "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.4.3.tgz" integrity sha512-gAiEnSKF104fsGDXNkwk49jD/0N0Bqu2K9+aMQXA6avzsA9H3Fiv1PW2D+gzbOSR705bWd2wJZRFEFpV0tXISg== dependencies: "@jest/environment" "^29.4.3" @@ -3597,17 +3597,17 @@ jest-environment-node@^29.4.3: jest-get-type@^27.5.1: version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.5.1.tgz#3cd613c507b0f7ace013df407a1c1cd578bcb4f1" + resolved "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz" integrity sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw== jest-get-type@^29.4.3: version "29.4.3" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.4.3.tgz#1ab7a5207c995161100b5187159ca82dd48b3dd5" + resolved "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz" integrity sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg== jest-haste-map@^29.4.3: version "29.4.3" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.4.3.tgz#085a44283269e7ace0645c63a57af0d2af6942e2" + resolved "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.4.3.tgz" integrity sha512-eZIgAS8tvm5IZMtKlR8Y+feEOMfo2pSQkmNbufdbMzMSn9nitgGxF1waM/+LbryO3OkMcKS98SUb+j/cQxp/vQ== dependencies: "@jest/types" "^29.4.3" @@ -3626,7 +3626,7 @@ jest-haste-map@^29.4.3: jest-leak-detector@^29.4.3: version "29.4.3" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.4.3.tgz#2b35191d6b35aa0256e63a9b79b0f949249cf23a" + resolved "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.4.3.tgz" integrity sha512-9yw4VC1v2NspMMeV3daQ1yXPNxMgCzwq9BocCwYrRgXe4uaEJPAN0ZK37nFBhcy3cUwEVstFecFLaTHpF7NiGA== dependencies: jest-get-type "^29.4.3" @@ -3634,7 +3634,7 @@ jest-leak-detector@^29.4.3: jest-matcher-utils@^27.0.0: version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz#9c0cdbda8245bc22d2331729d1091308b40cf8ab" + resolved "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz" integrity sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw== dependencies: chalk "^4.0.0" @@ -3644,7 +3644,7 @@ jest-matcher-utils@^27.0.0: jest-matcher-utils@^29.4.3: version "29.4.3" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.4.3.tgz#ea68ebc0568aebea4c4213b99f169ff786df96a0" + resolved "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.4.3.tgz" integrity sha512-TTciiXEONycZ03h6R6pYiZlSkvYgT0l8aa49z/DLSGYjex4orMUcafuLXYyyEDWB1RKglq00jzwY00Ei7yFNVg== dependencies: chalk "^4.0.0" @@ -3654,7 +3654,7 @@ jest-matcher-utils@^29.4.3: jest-message-util@^29.4.3: version "29.4.3" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.4.3.tgz#65b5280c0fdc9419503b49d4f48d4999d481cb5b" + resolved "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.4.3.tgz" integrity sha512-1Y8Zd4ZCN7o/QnWdMmT76If8LuDv23Z1DRovBj/vcSFNlGCJGoO8D1nJDw1AdyAGUk0myDLFGN5RbNeJyCRGCw== dependencies: "@babel/code-frame" "^7.12.13" @@ -3669,7 +3669,7 @@ jest-message-util@^29.4.3: jest-mock@^29.4.3: version "29.4.3" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.4.3.tgz#23d84a20a74cdfff0510fdbeefb841ed57b0fe7e" + resolved "https://registry.npmjs.org/jest-mock/-/jest-mock-29.4.3.tgz" integrity sha512-LjFgMg+xed9BdkPMyIJh+r3KeHt1klXPJYBULXVVAkbTaaKjPX1o1uVCAZADMEp/kOxGTwy/Ot8XbvgItOrHEg== dependencies: "@jest/types" "^29.4.3" @@ -3678,17 +3678,17 @@ jest-mock@^29.4.3: jest-pnp-resolver@^1.2.2: version "1.2.3" - resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" + resolved "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz" integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== jest-regex-util@^29.4.3: version "29.4.3" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.4.3.tgz#a42616141e0cae052cfa32c169945d00c0aa0bb8" + resolved "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.4.3.tgz" integrity sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg== jest-resolve-dependencies@^29.4.3: version "29.4.3" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.4.3.tgz#9ad7f23839a6d88cef91416bda9393a6e9fd1da5" + resolved "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.4.3.tgz" integrity sha512-uvKMZAQ3nmXLH7O8WAOhS5l0iWyT3WmnJBdmIHiV5tBbdaDZ1wqtNX04FONGoaFvSOSHBJxnwAVnSn1WHdGVaw== dependencies: jest-regex-util "^29.4.3" @@ -3696,7 +3696,7 @@ jest-resolve-dependencies@^29.4.3: jest-resolve@^29.4.3: version "29.4.3" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.4.3.tgz#3c5b5c984fa8a763edf9b3639700e1c7900538e2" + resolved "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.4.3.tgz" integrity sha512-GPokE1tzguRyT7dkxBim4wSx6E45S3bOQ7ZdKEG+Qj0Oac9+6AwJPCk0TZh5Vu0xzeX4afpb+eDmgbmZFFwpOw== dependencies: chalk "^4.0.0" @@ -3711,7 +3711,7 @@ jest-resolve@^29.4.3: jest-runner@^29.4.3: version "29.4.3" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.4.3.tgz#68dc82c68645eda12bea42b5beece6527d7c1e5e" + resolved "https://registry.npmjs.org/jest-runner/-/jest-runner-29.4.3.tgz" integrity sha512-GWPTEiGmtHZv1KKeWlTX9SIFuK19uLXlRQU43ceOQ2hIfA5yPEJC7AMkvFKpdCHx6pNEdOD+2+8zbniEi3v3gA== dependencies: "@jest/console" "^29.4.3" @@ -3738,7 +3738,7 @@ jest-runner@^29.4.3: jest-runtime@^29.4.3: version "29.4.3" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.4.3.tgz#f25db9874dcf35a3ab27fdaabca426666cc745bf" + resolved "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.4.3.tgz" integrity sha512-F5bHvxSH+LvLV24vVB3L8K467dt3y3dio6V3W89dUz9nzvTpqd/HcT9zfYKL2aZPvD63vQFgLvaUX/UpUhrP6Q== dependencies: "@jest/environment" "^29.4.3" @@ -3766,7 +3766,7 @@ jest-runtime@^29.4.3: jest-snapshot@^29.4.3: version "29.4.3" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.4.3.tgz#183d309371450d9c4a3de7567ed2151eb0e91145" + resolved "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.4.3.tgz" integrity sha512-NGlsqL0jLPDW91dz304QTM/SNO99lpcSYYAjNiX0Ou+sSGgkanKBcSjCfp/pqmiiO1nQaOyLp6XQddAzRcx3Xw== dependencies: "@babel/core" "^7.11.6" @@ -3796,7 +3796,7 @@ jest-snapshot@^29.4.3: jest-util@^29.0.0, jest-util@^29.4.3: version "29.4.3" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.4.3.tgz#851a148e23fc2b633c55f6dad2e45d7f4579f496" + resolved "https://registry.npmjs.org/jest-util/-/jest-util-29.4.3.tgz" integrity sha512-ToSGORAz4SSSoqxDSylWX8JzkOQR7zoBtNRsA7e+1WUX5F8jrOwaNpuh1YfJHJKDHXLHmObv5eOjejUd+/Ws+Q== dependencies: "@jest/types" "^29.4.3" @@ -3808,7 +3808,7 @@ jest-util@^29.0.0, jest-util@^29.4.3: jest-validate@^29.4.3: version "29.4.3" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.4.3.tgz#a13849dec4f9e95446a7080ad5758f58fa88642f" + resolved "https://registry.npmjs.org/jest-validate/-/jest-validate-29.4.3.tgz" integrity sha512-J3u5v7aPQoXPzaar6GndAVhdQcZr/3osWSgTeKg5v574I9ybX/dTyH0AJFb5XgXIB7faVhf+rS7t4p3lL9qFaw== dependencies: "@jest/types" "^29.4.3" @@ -3820,7 +3820,7 @@ jest-validate@^29.4.3: jest-watcher@^29.4.3: version "29.4.3" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.4.3.tgz#e503baa774f0c2f8f3c8db98a22ebf885f19c384" + resolved "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.4.3.tgz" integrity sha512-zwlXH3DN3iksoIZNk73etl1HzKyi5FuQdYLnkQKm5BW4n8HpoG59xSwpVdFrnh60iRRaRBGw0gcymIxjJENPcA== dependencies: "@jest/test-result" "^29.4.3" @@ -3834,7 +3834,7 @@ jest-watcher@^29.4.3: jest-worker@^29.4.3: version "29.4.3" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.4.3.tgz#9a4023e1ea1d306034237c7133d7da4240e8934e" + resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-29.4.3.tgz" integrity sha512-GLHN/GTAAMEy5BFdvpUfzr9Dr80zQqBrh0fz1mtRMe05hqP45+HfQltu7oTBfduD0UeZs09d+maFtFYAXFWvAA== dependencies: "@types/node" "*" @@ -3844,7 +3844,7 @@ jest-worker@^29.4.3: jest@^29.4.1: version "29.4.3" - resolved "https://registry.yarnpkg.com/jest/-/jest-29.4.3.tgz#1b8be541666c6feb99990fd98adac4737e6e6386" + resolved "https://registry.npmjs.org/jest/-/jest-29.4.3.tgz" integrity sha512-XvK65feuEFGZT8OO0fB/QAQS+LGHvQpaadkH5p47/j3Ocqq3xf2pK9R+G0GzgfuhXVxEv76qCOOcMb5efLk6PA== dependencies: "@jest/core" "^29.4.3" @@ -3854,12 +3854,12 @@ jest@^29.4.1: js-sdsl@^4.1.4: version "4.3.0" - resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.3.0.tgz#aeefe32a451f7af88425b11fdb5f58c90ae1d711" + resolved "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz" integrity sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ== js-slang@^1.0.20: version "1.0.20" - resolved "https://registry.yarnpkg.com/js-slang/-/js-slang-1.0.20.tgz#458c8e67234dde8eded2c5e21521efa3a3cea8a8" + resolved "https://registry.npmjs.org/js-slang/-/js-slang-1.0.20.tgz" integrity sha512-T/a2OX/xQYDPADhJq5vqD9wScJCz2aVIgroV8rB5vPEyPscfDWoxUhnAcQ4AXJY6eNMbr1hqII/e+kGPKesNlA== dependencies: "@babel/parser" "^7.19.4" @@ -3879,12 +3879,12 @@ js-slang@^1.0.20: "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== js-yaml@^3.13.1: version "3.14.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== dependencies: argparse "^1.0.7" @@ -3892,14 +3892,14 @@ js-yaml@^3.13.1: js-yaml@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== dependencies: argparse "^2.0.1" jsdom@^20.0.0: version "20.0.3" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-20.0.3.tgz#886a41ba1d4726f67a8858028c99489fed6ad4db" + resolved "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz" integrity sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ== dependencies: abab "^2.0.6" @@ -3931,44 +3931,44 @@ jsdom@^20.0.0: jsesc@^2.5.1: version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== json-parse-even-better-errors@^2.3.0: version "2.3.1" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== json-schema-traverse@^0.4.1: version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== json5@^1.0.1: version "1.0.2" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" + resolved "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz" integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== dependencies: minimist "^1.2.0" json5@^2.2.2, json5@^2.2.3: version "2.2.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== jsonc-parser@^3.2.0: version "3.2.0" - resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76" + resolved "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz" integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== "jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.3: version "3.3.3" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz#76b3e6e6cece5c69d49a5792c3d01bd1a0cdc7ea" + resolved "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz" integrity sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw== dependencies: array-includes "^3.1.5" @@ -3976,29 +3976,29 @@ jsonc-parser@^3.2.0: kleur@^3.0.3: version "3.0.3" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + resolved "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== language-subtag-registry@~0.3.2: version "0.3.22" - resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz#2e1500861b2e457eba7e7ae86877cbd08fa1fd1d" + resolved "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz" integrity sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w== language-tags@=1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.5.tgz#d321dbc4da30ba8bf3024e040fa5c14661f9193a" + resolved "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz" integrity sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ== dependencies: language-subtag-registry "~0.3.2" leven@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + resolved "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz" integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== levn@^0.4.1: version "0.4.1" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== dependencies: prelude-ls "^1.2.1" @@ -4006,7 +4006,7 @@ levn@^0.4.1: levn@~0.3.0: version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + resolved "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz" integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA== dependencies: prelude-ls "~1.1.2" @@ -4014,101 +4014,101 @@ levn@~0.3.0: lines-and-columns@^1.1.6: version "1.2.4" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== locate-path@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz" integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== dependencies: p-locate "^4.1.0" locate-path@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== dependencies: p-locate "^5.0.0" lodash.get@^4.4.2: version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" + resolved "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz" integrity sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ== lodash.isequal@^4.5.0: version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" + resolved "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz" integrity sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ== lodash.memoize@4.x: version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + resolved "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz" integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== lodash.merge@^4.6.2: version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== lodash@^4.17.14, lodash@^4.17.20, lodash@^4.17.21: version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + resolved "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz" integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== dependencies: js-tokens "^3.0.0 || ^4.0.0" lower-case@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" + resolved "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz" integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== dependencies: tslib "^2.0.3" lru-cache@^5.1.1: version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz" integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== dependencies: yallist "^3.0.2" lru-cache@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== dependencies: yallist "^4.0.0" lru-cache@^7.7.1: version "7.16.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.16.1.tgz#7acea16fecd9ed11430e78443c2bb81a06d3dea9" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-7.16.1.tgz" integrity sha512-9kkuMZHnLH/8qXARvYSjNvq8S1GYFFzynQTAfKeaJ0sIrR3PUPuu37Z+EiIANiZBvpfTf2B5y8ecDLSMWlLv+w== lunr@^2.3.9: version "2.3.9" - resolved "https://registry.yarnpkg.com/lunr/-/lunr-2.3.9.tgz#18b123142832337dd6e964df1a5a7707b25d35e1" + resolved "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz" integrity sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow== make-dir@^3.0.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz" integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== dependencies: semver "^6.0.0" make-error@1.x: version "1.3.6" - resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== make-fetch-happen@^10.0.3: version "10.2.1" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz#f5e3835c5e9817b617f2770870d9492d28678164" + resolved "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz" integrity sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w== dependencies: agentkeepalive "^4.2.1" @@ -4130,29 +4130,29 @@ make-fetch-happen@^10.0.3: makeerror@1.0.12: version "1.0.12" - resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" + resolved "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz" integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== dependencies: tmpl "1.0.5" marked@^4.2.12: version "4.2.12" - resolved "https://registry.yarnpkg.com/marked/-/marked-4.2.12.tgz#d69a64e21d71b06250da995dcd065c11083bebb5" + resolved "https://registry.npmjs.org/marked/-/marked-4.2.12.tgz" integrity sha512-yr8hSKa3Fv4D3jdZmtMMPghgVt6TWbk86WQaWhDloQjRSQhMMYCAro7jP7VDJrjjdV8pxVxMssXS8B8Y5DZ5aw== merge-stream@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== micromatch@^4.0.4: version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== dependencies: braces "^3.0.2" @@ -4160,67 +4160,67 @@ micromatch@^4.0.4: mime-db@1.52.0: version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== mime-types@^2.1.12: version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== dependencies: mime-db "1.52.0" mime@^1.6.0: version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== mimic-fn@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== mimic-response@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" + resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz" integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== minimatch@^3.0.3, minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" minimatch@^5.0.1, minimatch@^5.1.0: version "5.1.6" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz" integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== dependencies: brace-expansion "^2.0.1" minimatch@^6.1.6: version "6.2.0" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-6.2.0.tgz#2b70fd13294178c69c04dfc05aebdb97a4e79e42" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-6.2.0.tgz" integrity sha512-sauLxniAmvnhhRjFwPNnJKaPFYyddAgbYdeUpHULtCT/GhzdCx/MDNy+Y40lBxTQUrMzDE8e0S43Z5uqfO0REg== dependencies: brace-expansion "^2.0.1" minimist@^1.1.0, minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5, minimist@^1.2.6: version "1.2.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== minipass-collect@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" + resolved "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz" integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== dependencies: minipass "^3.0.0" minipass-fetch@^2.0.3: version "2.1.2" - resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-2.1.2.tgz#95560b50c472d81a3bc76f20ede80eaed76d8add" + resolved "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz" integrity sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA== dependencies: minipass "^3.1.6" @@ -4231,40 +4231,40 @@ minipass-fetch@^2.0.3: minipass-flush@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" + resolved "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz" integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== dependencies: minipass "^3.0.0" minipass-pipeline@^1.2.4: version "1.2.4" - resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" + resolved "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz" integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== dependencies: minipass "^3.0.0" minipass-sized@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" + resolved "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz" integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== dependencies: minipass "^3.0.0" minipass@^3.0.0, minipass@^3.1.1, minipass@^3.1.6: version "3.3.6" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" + resolved "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz" integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== dependencies: yallist "^4.0.0" minipass@^4.0.0: version "4.0.3" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-4.0.3.tgz#00bfbaf1e16e35e804f4aa31a7c1f6b8d9f0ee72" + resolved "https://registry.npmjs.org/minipass/-/minipass-4.0.3.tgz" integrity sha512-OW2r4sQ0sI+z5ckEt5c1Tri4xTgZwYDxpE54eqWlQloQRoWtXjqt9udJ5Z4dSv7wK+nfFI7FRXyCpBSft+gpFw== minizlib@^2.1.1, minizlib@^2.1.2: version "2.1.2" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" + resolved "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz" integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== dependencies: minipass "^3.0.0" @@ -4272,59 +4272,59 @@ minizlib@^2.1.1, minizlib@^2.1.2: mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: version "0.5.3" - resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" + resolved "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz" integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== mkdirp@^0.5.6: version "0.5.6" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== dependencies: minimist "^1.2.6" mkdirp@^1.0.3, mkdirp@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== ms@2.1.2: version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== ms@^2.0.0, ms@^2.1.1: version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== nan@^2.16.0: version "2.17.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.17.0.tgz#c0150a2368a182f033e9aa5195ec76ea41a199cb" + resolved "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz" integrity sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ== napi-build-utils@^1.0.1: version "1.0.2" - resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" + resolved "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz" integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== natural-compare-lite@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" + resolved "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz" integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== natural-compare@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== negotiator@^0.6.3: version "0.6.3" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== no-case@^3.0.4: version "3.0.4" - resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" + resolved "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz" integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== dependencies: lower-case "^2.0.2" @@ -4332,19 +4332,19 @@ no-case@^3.0.4: node-abi@^3.22.0, node-abi@^3.3.0: version "3.33.0" - resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.33.0.tgz#8b23a0cec84e1c5f5411836de6a9b84bccf26e7f" + resolved "https://registry.npmjs.org/node-abi/-/node-abi-3.33.0.tgz" integrity sha512-7GGVawqyHF4pfd0YFybhv/eM9JwTtPqx0mAanQ146O3FlSh3pA24zf9IRQTOsfTSqXTNzPSP5iagAJ94jjuVog== dependencies: semver "^7.3.5" node-getopt@^0.3.2: version "0.3.2" - resolved "https://registry.yarnpkg.com/node-getopt/-/node-getopt-0.3.2.tgz#57507cd22f6f69650aa99252304a842f1224e44c" + resolved "https://registry.npmjs.org/node-getopt/-/node-getopt-0.3.2.tgz" integrity sha512-yqkmYrMbK1wPrfz7mgeYvA4tBperLg9FQ4S3Sau3nSAkpOA0x0zC8nQ1siBwozy1f4SE8vq2n1WKv99r+PCa1Q== node-gyp@^9.0.0: version "9.3.1" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-9.3.1.tgz#1e19f5f290afcc9c46973d68700cbd21a96192e4" + resolved "https://registry.npmjs.org/node-gyp/-/node-gyp-9.3.1.tgz" integrity sha512-4Q16ZCqq3g8awk6UplT7AuxQ35XN4R/yf/+wSAwcBUAjg7l58RTactWaP8fIDTi0FzI7YcVLujwExakZlfWkXg== dependencies: env-paths "^2.2.0" @@ -4360,17 +4360,17 @@ node-gyp@^9.0.0: node-int64@^0.4.0: version "0.4.0" - resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + resolved "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz" integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== node-releases@^2.0.8: version "2.0.10" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.10.tgz#c311ebae3b6a148c89b1813fd7c4d3c024ef537f" + resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz" integrity sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w== noms@0.0.0: version "0.0.0" - resolved "https://registry.yarnpkg.com/noms/-/noms-0.0.0.tgz#da8ebd9f3af9d6760919b27d9cdc8092a7332859" + resolved "https://registry.npmjs.org/noms/-/noms-0.0.0.tgz" integrity sha512-lNDU9VJaOPxUmXcLb+HQFeUgQQPtMI24Gt6hgfuMHRJgMRHMF/qZ4HJD3GDru4sSw9IQl2jPjAYnQrdIeLbwow== dependencies: inherits "^2.0.1" @@ -4378,31 +4378,31 @@ noms@0.0.0: nopt@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-6.0.0.tgz#245801d8ebf409c6df22ab9d95b65e1309cdb16d" + resolved "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz" integrity sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g== dependencies: abbrev "^1.0.0" normalize-path@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== normalize.css@^8.0.1: version "8.0.1" - resolved "https://registry.yarnpkg.com/normalize.css/-/normalize.css-8.0.1.tgz#9b98a208738b9cc2634caacbc42d131c97487bf3" + resolved "https://registry.npmjs.org/normalize.css/-/normalize.css-8.0.1.tgz" integrity sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg== npm-run-path@^4.0.0, npm-run-path@^4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== dependencies: path-key "^3.0.0" npmlog@^6.0.0: version "6.0.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830" + resolved "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz" integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== dependencies: are-we-there-yet "^3.0.0" @@ -4412,22 +4412,22 @@ npmlog@^6.0.0: nwsapi@^2.2.2: version "2.2.2" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.2.tgz#e5418863e7905df67d51ec95938d67bf801f0bb0" + resolved "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.2.tgz" integrity sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw== object-assign@^4.1.1: version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== object-inspect@^1.12.2, object-inspect@^1.9.0: version "1.12.3" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" + resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz" integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== object-is@^1.0.1, object-is@^1.1.5: version "1.1.5" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" + resolved "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz" integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== dependencies: call-bind "^1.0.2" @@ -4435,12 +4435,12 @@ object-is@^1.0.1, object-is@^1.1.5: object-keys@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== object.assign@^4.1.2, object.assign@^4.1.3, object.assign@^4.1.4: version "4.1.4" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" + resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz" integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== dependencies: call-bind "^1.0.2" @@ -4450,7 +4450,7 @@ object.assign@^4.1.2, object.assign@^4.1.3, object.assign@^4.1.4: object.entries@^1.1.5, object.entries@^1.1.6: version "1.1.6" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.6.tgz#9737d0e5b8291edd340a3e3264bb8a3b00d5fa23" + resolved "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz" integrity sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w== dependencies: call-bind "^1.0.2" @@ -4459,7 +4459,7 @@ object.entries@^1.1.5, object.entries@^1.1.6: object.fromentries@^2.0.6: version "2.0.6" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.6.tgz#cdb04da08c539cffa912dcd368b886e0904bfa73" + resolved "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz" integrity sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg== dependencies: call-bind "^1.0.2" @@ -4468,7 +4468,7 @@ object.fromentries@^2.0.6: object.hasown@^1.1.2: version "1.1.2" - resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.2.tgz#f919e21fad4eb38a57bc6345b3afd496515c3f92" + resolved "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz" integrity sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw== dependencies: define-properties "^1.1.4" @@ -4476,7 +4476,7 @@ object.hasown@^1.1.2: object.values@^1.1.6: version "1.1.6" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d" + resolved "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz" integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw== dependencies: call-bind "^1.0.2" @@ -4485,26 +4485,26 @@ object.values@^1.1.6: once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" onetime@^5.1.0, onetime@^5.1.2: version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== dependencies: mimic-fn "^2.1.0" opener@^1.5.1: version "1.5.2" - resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" + resolved "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz" integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== optionator@^0.8.1: version "0.8.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + resolved "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz" integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== dependencies: deep-is "~0.1.3" @@ -4516,7 +4516,7 @@ optionator@^0.8.1: optionator@^0.9.1: version "0.9.1" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz" integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== dependencies: deep-is "^0.1.3" @@ -4528,47 +4528,47 @@ optionator@^0.9.1: p-limit@^2.2.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== dependencies: p-try "^2.0.0" p-limit@^3.0.2, p-limit@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== dependencies: yocto-queue "^0.1.0" p-locate@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz" integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== dependencies: p-limit "^2.2.0" p-locate@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== dependencies: p-limit "^3.0.2" p-map@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + resolved "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz" integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== dependencies: aggregate-error "^3.0.0" p-try@^2.0.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== param-case@^3.0.4: version "3.0.4" - resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" + resolved "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz" integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== dependencies: dot-case "^3.0.4" @@ -4576,14 +4576,14 @@ param-case@^3.0.4: parent-module@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== dependencies: callsites "^3.0.0" parse-json@^5.2.0: version "5.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz" integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== dependencies: "@babel/code-frame" "^7.0.0" @@ -4593,14 +4593,14 @@ parse-json@^5.2.0: parse5@^7.0.0, parse5@^7.1.1: version "7.1.2" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32" + resolved "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz" integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== dependencies: entities "^4.4.0" pascal-case@^3.1.2: version "3.1.2" - resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" + resolved "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz" integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== dependencies: no-case "^3.0.4" @@ -4608,12 +4608,12 @@ pascal-case@^3.1.2: path-browserify@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" + resolved "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz" integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== path-case@^3.0.4: version "3.0.4" - resolved "https://registry.yarnpkg.com/path-case/-/path-case-3.0.4.tgz#9168645334eb942658375c56f80b4c0cb5f82c6f" + resolved "https://registry.npmjs.org/path-case/-/path-case-3.0.4.tgz" integrity sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg== dependencies: dot-case "^3.0.4" @@ -4621,32 +4621,32 @@ path-case@^3.0.4: path-exists@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== path-is-absolute@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== path-parse@^1.0.7: version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== path-type@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== path@^0.12.7: version "0.12.7" - resolved "https://registry.yarnpkg.com/path/-/path-0.12.7.tgz#d4dc2a506c4ce2197eb481ebfcd5b36c0140b10f" + resolved "https://registry.npmjs.org/path/-/path-0.12.7.tgz" integrity sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q== dependencies: process "^0.11.1" @@ -4654,7 +4654,7 @@ path@^0.12.7: phaser@^3.54.0: version "3.55.2" - resolved "https://registry.yarnpkg.com/phaser/-/phaser-3.55.2.tgz#c1e2e9e70de7085502885e06f46b7eb4bd95e29a" + resolved "https://registry.npmjs.org/phaser/-/phaser-3.55.2.tgz" integrity sha512-amKXsbb2Ht29dGPKvt1edq3yGGYKtq8373GpJYGKPNPnneYY6MtVTOgjHDuZwtmUyK4v86FugkT3hzW/N4tjxQ== dependencies: eventemitter3 "^4.0.7" @@ -4662,39 +4662,39 @@ phaser@^3.54.0: picocolors@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== picomatch@^2.0.4, picomatch@^2.2.3, picomatch@^2.3.1: version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== pirates@^4.0.4: version "4.0.5" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" + resolved "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz" integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== pkg-dir@^4.2.0: version "4.2.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz" integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== dependencies: find-up "^4.0.0" plotly.js-dist@^2.17.1: version "2.18.2" - resolved "https://registry.yarnpkg.com/plotly.js-dist/-/plotly.js-dist-2.18.2.tgz#f32834e15985b98dbc1c74102ac59f3ced5eda48" + resolved "https://registry.npmjs.org/plotly.js-dist/-/plotly.js-dist-2.18.2.tgz" integrity sha512-HZonDoQe7MFHFp7A4U6sd/Inz5Gd5kv4ozr3vM26utbF9GH2WC2OCuNycIQCJzoY8CtlFpJCHHek+JkBUUfrZg== popper.js@^1.14.4, popper.js@^1.16.1: version "1.16.1" - resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.1.tgz#2a223cb3dc7b6213d740e40372be40de43e65b1b" + resolved "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz" integrity sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ== portfinder@^1.0.25: version "1.0.32" - resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.32.tgz#2fe1b9e58389712429dc2bea5beb2146146c7f81" + resolved "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz" integrity sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg== dependencies: async "^2.6.4" @@ -4703,7 +4703,7 @@ portfinder@^1.0.25: prebuild-install@^7.1.1: version "7.1.1" - resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.1.tgz#de97d5b34a70a0c81334fd24641f2a1702352e45" + resolved "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz" integrity sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw== dependencies: detect-libc "^2.0.0" @@ -4721,17 +4721,17 @@ prebuild-install@^7.1.1: prelude-ls@^1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== prelude-ls@~1.1.2: version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz" integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w== pretty-format@^27.0.0, pretty-format@^27.5.1: version "27.5.1" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" + resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz" integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== dependencies: ansi-regex "^5.0.1" @@ -4740,7 +4740,7 @@ pretty-format@^27.0.0, pretty-format@^27.5.1: pretty-format@^29.4.3: version "29.4.3" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.4.3.tgz#25500ada21a53c9e8423205cf0337056b201244c" + resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-29.4.3.tgz" integrity sha512-cvpcHTc42lcsvOOAzd3XuNWTcvk1Jmnzqeu+WsOuiPmxUJTnkbAcFNsRKvEpBEUFVUgy/GTZLulZDcDEi+CIlA== dependencies: "@jest/schemas" "^29.4.3" @@ -4749,22 +4749,22 @@ pretty-format@^29.4.3: process-nextick-args@~2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== process@^0.11.1: version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + resolved "https://registry.npmjs.org/process/-/process-0.11.10.tgz" integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== promise-inflight@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + resolved "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz" integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== promise-retry@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" + resolved "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz" integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== dependencies: err-code "^2.0.2" @@ -4772,7 +4772,7 @@ promise-retry@^2.0.1: prompts@^2.0.1: version "2.4.2" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" + resolved "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz" integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== dependencies: kleur "^3.0.3" @@ -4780,7 +4780,7 @@ prompts@^2.0.1: prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1: version "15.8.1" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" + resolved "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz" integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== dependencies: loose-envify "^1.4.0" @@ -4789,12 +4789,12 @@ prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1: psl@^1.1.33: version "1.9.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" + resolved "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz" integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== pump@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== dependencies: end-of-stream "^1.1.0" @@ -4802,29 +4802,29 @@ pump@^3.0.0: punycode@^2.1.0, punycode@^2.1.1: version "2.3.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz" integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== qs@^6.4.0: version "6.11.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" + resolved "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz" integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== dependencies: side-channel "^1.0.4" querystringify@^2.1.1: version "2.2.0" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" + resolved "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz" integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== queue-microtask@^1.2.2: version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== rc@^1.2.7: version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + resolved "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz" integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== dependencies: deep-extend "^0.6.0" @@ -4834,7 +4834,7 @@ rc@^1.2.7: react-ace@^10.1.0: version "10.1.0" - resolved "https://registry.yarnpkg.com/react-ace/-/react-ace-10.1.0.tgz#d348eac2b16475231779070b6cd16768deed565f" + resolved "https://registry.npmjs.org/react-ace/-/react-ace-10.1.0.tgz" integrity sha512-VkvUjZNhdYTuKOKQpMIZi7uzZZVgzCjM7cLYu6F64V0mejY8a2XTyPUIMszC6A4trbeMIHbK5fYFcT/wkP/8VA== dependencies: ace-builds "^1.4.14" @@ -4845,7 +4845,7 @@ react-ace@^10.1.0: react-dom@^17.0.2: version "17.0.2" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23" + resolved "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz" integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA== dependencies: loose-envify "^1.1.0" @@ -4854,27 +4854,27 @@ react-dom@^17.0.2: react-fast-compare@^3.0.1: version "3.2.0" - resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.0.tgz#641a9da81b6a6320f270e89724fb45a0b39e43bb" + resolved "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.0.tgz" integrity sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA== react-is@^16.13.1: version "16.13.1" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== react-is@^17.0.1: version "17.0.2" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" + resolved "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz" integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== react-is@^18.0.0: version "18.2.0" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" + resolved "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz" integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== react-popper@^1.3.11: version "1.3.11" - resolved "https://registry.yarnpkg.com/react-popper/-/react-popper-1.3.11.tgz#a2cc3f0a67b75b66cfa62d2c409f9dd1fcc71ffd" + resolved "https://registry.npmjs.org/react-popper/-/react-popper-1.3.11.tgz" integrity sha512-VSA/bS+pSndSF2fiasHK/PTEEAyOpX60+H5EPAjoArr8JGm+oihu4UbrqcEBpQibJxBVCpYyjAX7abJ+7DoYVg== dependencies: "@babel/runtime" "^7.1.2" @@ -4887,7 +4887,7 @@ react-popper@^1.3.11: react-popper@^2.3.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/react-popper/-/react-popper-2.3.0.tgz#17891c620e1320dce318bad9fede46a5f71c70ba" + resolved "https://registry.npmjs.org/react-popper/-/react-popper-2.3.0.tgz" integrity sha512-e1hj8lL3uM+sgSR4Lxzn5h1GxBlpa4CQz0XLF8kx4MDrDRWY0Ena4c97PUeSX9i5W3UAfDP0z0FXCTQkoXUl3Q== dependencies: react-fast-compare "^3.0.1" @@ -4895,7 +4895,7 @@ react-popper@^2.3.0: react-transition-group@^4.4.5: version "4.4.5" - resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.5.tgz#e53d4e3f3344da8521489fbef8f2581d42becdd1" + resolved "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz" integrity sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g== dependencies: "@babel/runtime" "^7.5.5" @@ -4905,7 +4905,7 @@ react-transition-group@^4.4.5: react@^17.0.2: version "17.0.2" - resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" + resolved "https://registry.npmjs.org/react/-/react-17.0.2.tgz" integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA== dependencies: loose-envify "^1.1.0" @@ -4913,7 +4913,7 @@ react@^17.0.2: "readable-stream@>=1.0.33-1 <1.1.0-0", readable-stream@~1.0.31: version "1.0.34" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz" integrity sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg== dependencies: core-util-is "~1.0.0" @@ -4923,7 +4923,7 @@ react@^17.0.2: readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: version "3.6.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== dependencies: inherits "^2.0.3" @@ -4932,7 +4932,7 @@ readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: readable-stream@~2.3.6: version "2.3.7" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== dependencies: core-util-is "~1.0.0" @@ -4945,17 +4945,17 @@ readable-stream@~2.3.6: reflect-metadata@^0.1.13: version "0.1.13" - resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.13.tgz#67ae3ca57c972a2aa1642b10fe363fe32d49dc08" + resolved "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz" integrity sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg== regenerator-runtime@^0.13.11: version "0.13.11" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" + resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz" integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.4.3: version "1.4.3" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" + resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz" integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== dependencies: call-bind "^1.0.2" @@ -4964,49 +4964,49 @@ regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.4.3: regexpp@^3.2.0: version "3.2.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" + resolved "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== regl@2.1.0, regl@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/regl/-/regl-2.1.0.tgz#7dae71e9ff20f29c4f42f510c70cd92ebb6b657c" + resolved "https://registry.npmjs.org/regl/-/regl-2.1.0.tgz" integrity sha512-oWUce/aVoEvW5l2V0LK7O5KJMzUSKeiOwFuJehzpSFd43dO5spP9r+sSUfhKtsky4u6MCqWJaRL+abzExynfTg== require-directory@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== requires-port@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + resolved "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz" integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== resolve-cwd@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + resolved "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz" integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== dependencies: resolve-from "^5.0.0" resolve-from@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== resolve-from@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== resolve.exports@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.0.tgz#c1a0028c2d166ec2fbf7d0644584927e76e7400e" + resolved "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.0.tgz" integrity sha512-6K/gDlqgQscOlg9fSRpWstA8sYe8rbELsSTNpx+3kTrsVCzvSl0zIvRErM7fdl9ERWDsKnrLnwB+Ne89918XOg== resolve@^1.20.0, resolve@^1.22.0, resolve@^1.22.1: version "1.22.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz" integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== dependencies: is-core-module "^2.9.0" @@ -5015,7 +5015,7 @@ resolve@^1.20.0, resolve@^1.22.0, resolve@^1.22.1: resolve@^2.0.0-next.4: version "2.0.0-next.4" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.4.tgz#3d37a113d6429f496ec4752d2a2e58efb1fd4660" + resolved "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz" integrity sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ== dependencies: is-core-module "^2.9.0" @@ -5024,46 +5024,46 @@ resolve@^2.0.0-next.4: retry@^0.12.0: version "0.12.0" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + resolved "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz" integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== reusify@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== rimraf@^3.0.2: version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== dependencies: glob "^7.1.3" rimraf@^4.1.2: version "4.1.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-4.1.2.tgz#20dfbc98083bdfaa28b01183162885ef213dbf7c" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-4.1.2.tgz" integrity sha512-BlIbgFryTbw3Dz6hyoWFhKk+unCcHMSkZGrTFVAx2WmttdBSonsdtRlwiuTbDqTKr+UlXIUqJVS4QT5tUzGENQ== run-parallel@^1.1.9: version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== dependencies: queue-microtask "^1.2.2" safe-buffer@^5.0.1, safe-buffer@~5.2.0: version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== safe-regex-test@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" + resolved "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz" integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== dependencies: call-bind "^1.0.2" @@ -5072,19 +5072,19 @@ safe-regex-test@^1.0.0: "safer-buffer@>= 2.1.2 < 3.0.0": version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== saxes@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/saxes/-/saxes-6.0.0.tgz#fe5b4a4768df4f14a201b1ba6a65c1f3d9988cc5" + resolved "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz" integrity sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA== dependencies: xmlchars "^2.2.0" scheduler@^0.20.2: version "0.20.2" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91" + resolved "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz" integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ== dependencies: loose-envify "^1.1.0" @@ -5092,24 +5092,24 @@ scheduler@^0.20.2: secure-compare@3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/secure-compare/-/secure-compare-3.0.1.tgz#f1a0329b308b221fae37b9974f3d578d0ca999e3" + resolved "https://registry.npmjs.org/secure-compare/-/secure-compare-3.0.1.tgz" integrity sha512-AckIIV90rPDcBcglUwXPF3kg0P0qmPsPXAj6BBEENQE1p5yA1xfmDJzfi1Tappj37Pv2mVbKpL3Z1T+Nn7k1Qw== semver@7.x, semver@^7.3.5, semver@^7.3.7: version "7.3.8" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" + resolved "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz" integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== dependencies: lru-cache "^6.0.0" semver@^6.0.0, semver@^6.3.0: version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== sentence-case@^3.0.4: version "3.0.4" - resolved "https://registry.yarnpkg.com/sentence-case/-/sentence-case-3.0.4.tgz#3645a7b8c117c787fde8702056225bb62a45131f" + resolved "https://registry.npmjs.org/sentence-case/-/sentence-case-3.0.4.tgz" integrity sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg== dependencies: no-case "^3.0.4" @@ -5118,24 +5118,24 @@ sentence-case@^3.0.4: set-blocking@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== shebang-command@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== dependencies: shebang-regex "^3.0.0" shebang-regex@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== shiki@^0.14.1: version "0.14.1" - resolved "https://registry.yarnpkg.com/shiki/-/shiki-0.14.1.tgz#9fbe082d0a8aa2ad63df4fbf2ee11ec924aa7ee1" + resolved "https://registry.npmjs.org/shiki/-/shiki-0.14.1.tgz" integrity sha512-+Jz4nBkCBe0mEDqo1eKRcCdjRtrCjozmcbTUjbPTX7OOJfEbTZzlUWlZtGe3Gb5oV1/jnojhG//YZc3rs9zSEw== dependencies: ansi-sequence-parser "^1.1.0" @@ -5145,7 +5145,7 @@ shiki@^0.14.1: side-channel@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz" integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== dependencies: call-bind "^1.0.0" @@ -5154,17 +5154,17 @@ side-channel@^1.0.4: signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== simple-concat@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" + resolved "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz" integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== simple-get@^4.0.0: version "4.0.1" - resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543" + resolved "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz" integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA== dependencies: decompress-response "^6.0.0" @@ -5173,27 +5173,27 @@ simple-get@^4.0.0: simple-wcswidth@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/simple-wcswidth/-/simple-wcswidth-1.0.1.tgz#8ab18ac0ae342f9d9b629604e54d2aa1ecb018b2" + resolved "https://registry.npmjs.org/simple-wcswidth/-/simple-wcswidth-1.0.1.tgz" integrity sha512-xMO/8eNREtaROt7tJvWJqHBDTMFN4eiQ5I4JRMuilwfnFcV5W9u7RUkueNkdw0jPqGMX36iCywelS5yilTuOxg== sisteransi@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + resolved "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz" integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== slash@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== smart-buffer@^4.2.0: version "4.2.0" - resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" + resolved "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz" integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== snake-case@^3.0.4: version "3.0.4" - resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c" + resolved "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz" integrity sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg== dependencies: dot-case "^3.0.4" @@ -5201,7 +5201,7 @@ snake-case@^3.0.4: socks-proxy-agent@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz#dc069ecf34436621acb41e3efa66ca1b5fed15b6" + resolved "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz" integrity sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww== dependencies: agent-base "^6.0.2" @@ -5210,7 +5210,7 @@ socks-proxy-agent@^7.0.0: socks@^2.6.2: version "2.7.1" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.1.tgz#d8e651247178fde79c0663043e07240196857d55" + resolved "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz" integrity sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ== dependencies: ip "^2.0.0" @@ -5218,12 +5218,12 @@ socks@^2.6.2: source-academy-utils@^1.0.0: version "1.0.2" - resolved "https://registry.yarnpkg.com/source-academy-utils/-/source-academy-utils-1.0.2.tgz#fc35a4e21e6e6a14743ed560978a9701af1a8bdc" + resolved "https://registry.npmjs.org/source-academy-utils/-/source-academy-utils-1.0.2.tgz" integrity sha512-cSx/Rxr0CEOr+KJKILKicOVSVknG82fMEozaituD5mjh92przLW8C4kafzXrfGMjPVb6p7lxFMk5S6QyiYI2/g== source-academy-wabt@^1.0.4: version "1.0.10" - resolved "https://registry.yarnpkg.com/source-academy-wabt/-/source-academy-wabt-1.0.10.tgz#4187804a10b8233dc0f3498b49d07523940b4789" + resolved "https://registry.npmjs.org/source-academy-wabt/-/source-academy-wabt-1.0.10.tgz" integrity sha512-eRm9Q+wm9rNKpaX3X+ykKjcLyrV2O6elAIG3qmkuOeOLk3f26QEFfroBvNxLtvVokkItWRHek9T/d5Gqrqo5tQ== dependencies: class-transformer "^0.5.1" @@ -5233,7 +5233,7 @@ source-academy-wabt@^1.0.4: source-map-support@0.5.13: version "0.5.13" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" + resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz" integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== dependencies: buffer-from "^1.0.0" @@ -5241,43 +5241,43 @@ source-map-support@0.5.13: source-map@0.7.3: version "0.7.3" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz" integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== sprintf-js@~1.0.2: version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== ssri@^9.0.0: version "9.0.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-9.0.1.tgz#544d4c357a8d7b71a19700074b6883fcb4eae057" + resolved "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz" integrity sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q== dependencies: minipass "^3.1.1" stack-utils@^2.0.3: version "2.0.6" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" + resolved "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz" integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== dependencies: escape-string-regexp "^2.0.0" stop-iteration-iterator@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz#6a60be0b4ee757d1ed5254858ec66b10c49285e4" + resolved "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz" integrity sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ== dependencies: internal-slot "^1.0.4" string-length@^4.0.1: version "4.0.2" - resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" + resolved "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz" integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== dependencies: char-regex "^1.0.2" @@ -5285,7 +5285,7 @@ string-length@^4.0.1: "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== dependencies: emoji-regex "^8.0.0" @@ -5294,7 +5294,7 @@ string-length@^4.0.1: string.prototype.matchall@^4.0.8: version "4.0.8" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz#3bf85722021816dcd1bf38bb714915887ca79fd3" + resolved "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz" integrity sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg== dependencies: call-bind "^1.0.2" @@ -5308,7 +5308,7 @@ string.prototype.matchall@^4.0.8: string.prototype.trimend@^1.0.6: version "1.0.6" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" + resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz" integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== dependencies: call-bind "^1.0.2" @@ -5317,7 +5317,7 @@ string.prototype.trimend@^1.0.6: string.prototype.trimstart@^1.0.6: version "1.0.6" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" + resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz" integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== dependencies: call-bind "^1.0.2" @@ -5326,89 +5326,89 @@ string.prototype.trimstart@^1.0.6: string_decoder@^1.1.1: version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== dependencies: safe-buffer "~5.2.0" string_decoder@~0.10.x: version "0.10.31" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ== string_decoder@~1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== dependencies: safe-buffer "~5.1.0" strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: ansi-regex "^5.0.1" strip-bom@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== strip-bom@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz" integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== strip-final-newline@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== strip-json-comments@~2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz" integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== supports-color@^5.3.0: version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: has-flag "^3.0.0" supports-color@^7.1.0: version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" supports-color@^8.0.0: version "8.1.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== dependencies: has-flag "^4.0.0" supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== symbol-tree@^3.2.4: version "3.2.4" - resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" + resolved "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== tar-fs@^2.0.0: version "2.1.1" - resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" + resolved "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz" integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== dependencies: chownr "^1.1.1" @@ -5418,7 +5418,7 @@ tar-fs@^2.0.0: tar-stream@^2.1.4: version "2.2.0" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" + resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz" integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== dependencies: bl "^4.0.3" @@ -5429,7 +5429,7 @@ tar-stream@^2.1.4: tar@^6.1.11, tar@^6.1.2: version "6.1.13" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.13.tgz#46e22529000f612180601a6fe0680e7da508847b" + resolved "https://registry.npmjs.org/tar/-/tar-6.1.13.tgz" integrity sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw== dependencies: chownr "^2.0.0" @@ -5441,7 +5441,7 @@ tar@^6.1.11, tar@^6.1.2: test-exclude@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + resolved "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz" integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== dependencies: "@istanbuljs/schema" "^0.1.2" @@ -5450,12 +5450,12 @@ test-exclude@^6.0.0: text-table@^0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== through2@^0.6.3: version "0.6.5" - resolved "https://registry.yarnpkg.com/through2/-/through2-0.6.5.tgz#41ab9c67b29d57209071410e1d7a7a968cd3ad48" + resolved "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz" integrity sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg== dependencies: readable-stream ">=1.0.33-1 <1.1.0-0" @@ -5463,7 +5463,7 @@ through2@^0.6.3: through2@^2.0.1: version "2.0.5" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + resolved "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz" integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== dependencies: readable-stream "~2.3.6" @@ -5471,24 +5471,24 @@ through2@^2.0.1: tmpl@1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" + resolved "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz" integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== to-fast-properties@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== to-regex-range@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== dependencies: is-number "^7.0.0" tough-cookie@^4.1.2: version "4.1.2" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.2.tgz#e53e84b85f24e0b65dd526f46628db6c85f6b874" + resolved "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.2.tgz" integrity sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ== dependencies: psl "^1.1.33" @@ -5498,14 +5498,14 @@ tough-cookie@^4.1.2: tr46@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-3.0.0.tgz#555c4e297a950617e8eeddef633c87d4d9d6cbf9" + resolved "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz" integrity sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA== dependencies: punycode "^2.1.1" ts-jest@^29.0.5: version "29.0.5" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-29.0.5.tgz#c5557dcec8fe434fcb8b70c3e21c6b143bfce066" + resolved "https://registry.npmjs.org/ts-jest/-/ts-jest-29.0.5.tgz" integrity sha512-PL3UciSgIpQ7f6XjVOmbi96vmDHUqAyqDr8YxzopDqX3kfgYtX1cuNeBjP+L9sFXi6nzsGGA6R3fP3DDDJyrxA== dependencies: bs-logger "0.x" @@ -5519,7 +5519,7 @@ ts-jest@^29.0.5: tsconfig-paths@^3.14.1: version "3.14.1" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a" + resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz" integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ== dependencies: "@types/json5" "^0.0.29" @@ -5529,65 +5529,65 @@ tsconfig-paths@^3.14.1: tslib@^1.8.1, tslib@^1.9.2: version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== tslib@^2.0.3, tslib@^2.3.1: version "2.5.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz" integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== tslib@~2.3.1: version "2.3.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz" integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== tsutils@^3.21.0: version "3.21.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz" integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== dependencies: tslib "^1.8.1" tunnel-agent@^0.6.0: version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + resolved "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz" integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== dependencies: safe-buffer "^5.0.1" type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== dependencies: prelude-ls "^1.2.1" type-check@~0.3.2: version "0.3.2" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + resolved "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz" integrity sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg== dependencies: prelude-ls "~1.1.2" type-detect@4.0.8: version "4.0.8" - resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + resolved "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== type-fest@^0.20.2: version "0.20.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== type-fest@^0.21.3: version "0.21.3" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== typed-array-length@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" + resolved "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz" integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== dependencies: call-bind "^1.0.2" @@ -5596,12 +5596,12 @@ typed-array-length@^1.0.4: typed-styles@^0.0.7: version "0.0.7" - resolved "https://registry.yarnpkg.com/typed-styles/-/typed-styles-0.0.7.tgz#93392a008794c4595119ff62dde6809dbc40a3d9" + resolved "https://registry.npmjs.org/typed-styles/-/typed-styles-0.0.7.tgz" integrity sha512-pzP0PWoZUhsECYjABgCGQlRGL1n7tOHsgwYv3oIiEpJwGhFTuty/YNeduxQYzXXa3Ge5BdT6sHYIQYpl4uJ+5Q== typedoc@^0.23.23: version "0.23.25" - resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.23.25.tgz#5f8f1850fd044c4d15d453117affddf11a265610" + resolved "https://registry.npmjs.org/typedoc/-/typedoc-0.23.25.tgz" integrity sha512-O1he153qVyoCgJYSvIyY3bPP1wAJTegZfa6tL3APinSZhJOf8CSd8F/21M6ex8pUY/fuY6n0jAsT4fIuMGA6sA== dependencies: lunr "^2.3.9" @@ -5611,17 +5611,17 @@ typedoc@^0.23.23: typescript@4: version "4.9.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" + resolved "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz" integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== typescript@4.8: version "4.8.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.8.4.tgz#c464abca159669597be5f96b8943500b238e60e6" + resolved "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz" integrity sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ== unbox-primitive@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" + resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz" integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== dependencies: call-bind "^1.0.2" @@ -5631,38 +5631,38 @@ unbox-primitive@^1.0.2: union@~0.5.0: version "0.5.0" - resolved "https://registry.yarnpkg.com/union/-/union-0.5.0.tgz#b2c11be84f60538537b846edb9ba266ba0090075" + resolved "https://registry.npmjs.org/union/-/union-0.5.0.tgz" integrity sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA== dependencies: qs "^6.4.0" unique-filename@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-2.0.1.tgz#e785f8675a9a7589e0ac77e0b5c34d2eaeac6da2" + resolved "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz" integrity sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A== dependencies: unique-slug "^3.0.0" unique-slug@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-3.0.0.tgz#6d347cf57c8a7a7a6044aabd0e2d74e4d76dc7c9" + resolved "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz" integrity sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w== dependencies: imurmurhash "^0.1.4" universalify@^0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" + resolved "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz" integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== untildify@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" + resolved "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz" integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== update-browserslist-db@^1.0.10: version "1.0.10" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3" + resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz" integrity sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ== dependencies: escalade "^3.1.1" @@ -5670,33 +5670,33 @@ update-browserslist-db@^1.0.10: upper-case-first@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/upper-case-first/-/upper-case-first-2.0.2.tgz#992c3273f882abd19d1e02894cc147117f844324" + resolved "https://registry.npmjs.org/upper-case-first/-/upper-case-first-2.0.2.tgz" integrity sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg== dependencies: tslib "^2.0.3" upper-case@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-2.0.2.tgz#d89810823faab1df1549b7d97a76f8662bae6f7a" + resolved "https://registry.npmjs.org/upper-case/-/upper-case-2.0.2.tgz" integrity sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg== dependencies: tslib "^2.0.3" uri-js@^4.2.2: version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== dependencies: punycode "^2.1.0" url-join@^2.0.5: version "2.0.5" - resolved "https://registry.yarnpkg.com/url-join/-/url-join-2.0.5.tgz#5af22f18c052a000a48d7b82c5e9c2e2feeda728" + resolved "https://registry.npmjs.org/url-join/-/url-join-2.0.5.tgz" integrity sha512-c2H1fIgpUdwFRIru9HFno5DT73Ok8hg5oOb5AT3ayIgvCRfxgs2jyt5Slw8kEB7j3QUr6yJmMPDT/odjk7jXow== url-parse@^1.5.3: version "1.5.10" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" + resolved "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz" integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== dependencies: querystringify "^2.1.1" @@ -5704,19 +5704,19 @@ url-parse@^1.5.3: util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== util@^0.10.3: version "0.10.4" - resolved "https://registry.yarnpkg.com/util/-/util-0.10.4.tgz#3aa0125bfe668a4672de58857d3ace27ecb76901" + resolved "https://registry.npmjs.org/util/-/util-0.10.4.tgz" integrity sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A== dependencies: inherits "2.0.3" v8-to-istanbul@^9.0.1: version "9.1.0" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz#1b83ed4e397f58c85c266a570fc2558b5feb9265" + resolved "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz" integrity sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA== dependencies: "@jridgewell/trace-mapping" "^0.3.12" @@ -5725,60 +5725,60 @@ v8-to-istanbul@^9.0.1: vscode-oniguruma@^1.7.0: version "1.7.0" - resolved "https://registry.yarnpkg.com/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz#439bfad8fe71abd7798338d1cd3dc53a8beea94b" + resolved "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz" integrity sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA== vscode-textmate@^8.0.0: version "8.0.0" - resolved "https://registry.yarnpkg.com/vscode-textmate/-/vscode-textmate-8.0.0.tgz#2c7a3b1163ef0441097e0b5d6389cd5504b59e5d" + resolved "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-8.0.0.tgz" integrity sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg== w3c-xmlserializer@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz#aebdc84920d806222936e3cdce408e32488a3073" + resolved "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz" integrity sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw== dependencies: xml-name-validator "^4.0.0" walker@^1.0.8: version "1.0.8" - resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" + resolved "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz" integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== dependencies: makeerror "1.0.12" warning@^4.0.2, warning@^4.0.3: version "4.0.3" - resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3" + resolved "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz" integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w== dependencies: loose-envify "^1.0.0" webgpu@^0.1.16: version "0.1.16" - resolved "https://registry.yarnpkg.com/webgpu/-/webgpu-0.1.16.tgz#dec416373e308181b28864b58c8a914461d7ceee" + resolved "https://registry.npmjs.org/webgpu/-/webgpu-0.1.16.tgz" integrity sha512-KAXn/f8lnL8o4B718zzdfi1l0nEWQpuoWlC1L5WM/svAbeHjShCEI0l5ZcZBEEUm9FF3ZTgRjWk8iwbJfnGKTA== webidl-conversions@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" + resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz" integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== whatwg-encoding@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz#e7635f597fd87020858626805a2729fa7698ac53" + resolved "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz" integrity sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg== dependencies: iconv-lite "0.6.3" whatwg-mimetype@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz#5fa1a7623867ff1af6ca3dc72ad6b8a4208beba7" + resolved "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz" integrity sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q== whatwg-url@^11.0.0: version "11.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-11.0.0.tgz#0a849eebb5faf2119b901bb76fd795c2848d4018" + resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz" integrity sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ== dependencies: tr46 "^3.0.0" @@ -5786,7 +5786,7 @@ whatwg-url@^11.0.0: which-boxed-primitive@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + resolved "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz" integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== dependencies: is-bigint "^1.0.1" @@ -5797,7 +5797,7 @@ which-boxed-primitive@^1.0.2: which-collection@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.1.tgz#70eab71ebbbd2aefaf32f917082fc62cdcb70906" + resolved "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz" integrity sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A== dependencies: is-map "^2.0.1" @@ -5807,7 +5807,7 @@ which-collection@^1.0.1: which-typed-array@^1.1.9: version "1.1.9" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6" + resolved "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz" integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA== dependencies: available-typed-arrays "^1.0.5" @@ -5819,26 +5819,26 @@ which-typed-array@^1.1.9: which@^2.0.1, which@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" wide-align@^1.1.5: version "1.1.5" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" + resolved "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz" integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== dependencies: string-width "^1.0.2 || 2 || 3 || 4" word-wrap@^1.2.3, word-wrap@~1.2.3: version "1.2.3" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== wrap-ansi@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== dependencies: ansi-styles "^4.0.0" @@ -5847,12 +5847,12 @@ wrap-ansi@^7.0.0: wrappy@1: version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== write-file-atomic@^4.0.2: version "4.0.2" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" + resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz" integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== dependencies: imurmurhash "^0.1.4" @@ -5860,59 +5860,59 @@ write-file-atomic@^4.0.2: ws@^8.11.0: version "8.12.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.12.1.tgz#c51e583d79140b5e42e39be48c934131942d4a8f" + resolved "https://registry.npmjs.org/ws/-/ws-8.12.1.tgz" integrity sha512-1qo+M9Ba+xNhPB+YTWUlK6M17brTut5EXbcBaMRN5pH5dFrXz7lzz1ChFSUq3bOUl8yEvSenhHmYUNJxFzdJew== xml-name-validator@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz#79a006e2e63149a8600f15430f0a4725d1524835" + resolved "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz" integrity sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw== xmlchars@^2.2.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" + resolved "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz" integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== xmlhttprequest-ts@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/xmlhttprequest-ts/-/xmlhttprequest-ts-1.0.1.tgz#7b3cb4a197aee38cf2d4f9dd6189d1d21f0835b2" + resolved "https://registry.npmjs.org/xmlhttprequest-ts/-/xmlhttprequest-ts-1.0.1.tgz" integrity sha512-x+7u8NpBcwfBCeGqUpdGrR6+kGUGVjKc4wolyCz7CQqBZQp7VIyaF1xAvJ7ApRzvLeuiC4BbmrA6CWH9NqxK/g== dependencies: tslib "^1.9.2" "xtend@>=4.0.0 <4.1.0-0", xtend@~4.0.1: version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== y18n@^5.0.5: version "5.0.8" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== yallist@^3.0.2: version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== yallist@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== yargs-parser@^20.2.2: version "20.2.9" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== yargs-parser@^21.0.1, yargs-parser@^21.1.1: version "21.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== yargs@^16.1.0: version "16.2.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + resolved "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz" integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== dependencies: cliui "^7.0.2" @@ -5925,7 +5925,7 @@ yargs@^16.1.0: yargs@^17.3.1: version "17.7.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.0.tgz#b21e9af1e0a619a2a9c67b1133219b2975a07985" + resolved "https://registry.npmjs.org/yargs/-/yargs-17.7.0.tgz" integrity sha512-dwqOPg5trmrre9+v8SUo2q/hAwyKoVfu8OC1xPHKJGNdxAvPl4sKxL4vBnh3bQz/ZvvGAFeA5H3ou2kcOY8sQQ== dependencies: cliui "^8.0.1" @@ -5938,7 +5938,7 @@ yargs@^17.3.1: yarnhook@^0.5.1: version "0.5.3" - resolved "https://registry.yarnpkg.com/yarnhook/-/yarnhook-0.5.3.tgz#f6245cea57131236ec10a11c30ea3449d1984f21" + resolved "https://registry.npmjs.org/yarnhook/-/yarnhook-0.5.3.tgz" integrity sha512-QxCGBYw8XTV4gah0oHjLzg6tJRnj4I5AcM3Ae32V3bWgpXdyZQ7u1m34woOQbc2RrOrjlpivnnwZG461ECvsDQ== dependencies: execa "^4.0.3" @@ -5946,5 +5946,5 @@ yarnhook@^0.5.1: yocto-queue@^0.1.0: version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== From 6c7946a39d095c92cf19f393e446033eaafafa86 Mon Sep 17 00:00:00 2001 From: Dernbu <63487502+Dernbu@users.noreply.github.com> Date: Tue, 9 May 2023 23:35:11 +0800 Subject: [PATCH 9/9] Normalize all the line endings --- .gitattributes | 5 +- .github/ISSUE_TEMPLATE/bug_report.md | 92 +- .../ISSUE_TEMPLATE/documentation_request.md | 30 +- .github/pull_request_template.md | 64 +- .husky/pre-commit | 8 +- .vscode/launch.json | 32 +- .vscode/settings.json | 12 +- __mocks__/chalk.js | 4 +- scripts/src/build/__tests__/buildAll.test.ts | 250 +- .../src/build/__tests__/buildUtils.test.ts | 148 +- scripts/src/build/buildUtils.ts | 604 +- scripts/src/build/dev.ts | 760 +- scripts/src/build/docs/__mocks__/docUtils.ts | 40 +- scripts/src/build/docs/__tests__/docs.test.ts | 180 +- scripts/src/build/docs/__tests__/json.test.ts | 492 +- scripts/src/build/docs/docUtils.ts | 112 +- scripts/src/build/docs/html.ts | 202 +- scripts/src/build/docs/index.ts | 124 +- scripts/src/build/docs/json.ts | 474 +- scripts/src/build/index.ts | 160 +- .../build/modules/__tests__/bundle.test.ts | 122 +- .../build/modules/__tests__/modules.test.ts | 110 +- .../src/build/modules/__tests__/tab.test.ts | 66 +- scripts/src/build/modules/bundle.ts | 214 +- scripts/src/build/modules/index.ts | 136 +- scripts/src/build/modules/moduleUtils.ts | 310 +- scripts/src/build/modules/tab.ts | 266 +- .../src/build/prebuild/__mocks__/eslint.ts | 18 +- scripts/src/build/prebuild/__mocks__/tsc.ts | 14 +- .../build/prebuild/__tests__/prebuild.test.ts | 626 +- scripts/src/build/prebuild/eslint.ts | 212 +- scripts/src/build/prebuild/index.ts | 180 +- scripts/src/build/prebuild/tsc.ts | 278 +- scripts/src/build/types.ts | 204 +- scripts/src/index.ts | 34 +- scripts/src/jest.config.js | 92 +- scripts/src/jest.setup.ts | 50 +- scripts/src/scriptUtils.ts | 118 +- scripts/src/templates/index.ts | 74 +- scripts/src/templates/module.ts | 90 +- scripts/src/templates/print.ts | 58 +- scripts/src/templates/tab.ts | 138 +- scripts/src/templates/utilities.ts | 34 +- src/bundles/arcade_2d/audio.ts | 176 +- src/bundles/arcade_2d/constants.ts | 92 +- src/bundles/arcade_2d/functions.ts | 1866 +- src/bundles/arcade_2d/gameobject.ts | 736 +- src/bundles/arcade_2d/index.ts | 518 +- src/bundles/arcade_2d/phaserScene.ts | 744 +- src/bundles/arcade_2d/types.ts | 254 +- src/bundles/binary_tree/functions.ts | 298 +- src/bundles/binary_tree/index.ts | 20 +- src/bundles/binary_tree/types.ts | 2 +- src/bundles/copy_gc/index.ts | 1014 +- src/bundles/copy_gc/types.ts | 64 +- src/bundles/csg/constants.ts | 84 +- src/bundles/csg/core.ts | 50 +- src/bundles/csg/functions.ts | 1676 +- src/bundles/csg/index.ts | 162 +- src/bundles/csg/input_tracker.ts | 564 +- src/bundles/csg/jscad/renderer.ts | 510 +- src/bundles/csg/jscad/types.ts | 554 +- src/bundles/csg/listener_tracker.ts | 56 +- src/bundles/csg/stateful_renderer.ts | 282 +- src/bundles/csg/types.ts | 698 +- src/bundles/csg/utilities.ts | 264 +- src/bundles/curve/curves_webgl.ts | 916 +- src/bundles/curve/functions.ts | 1688 +- src/bundles/curve/index.ts | 86 +- src/bundles/curve/types.ts | 106 +- src/bundles/game/functions.ts | 3050 +- src/bundles/game/index.ts | 90 +- src/bundles/game/types.ts | 74 +- src/bundles/mark_sweep/index.ts | 748 +- src/bundles/mark_sweep/types.ts | 64 +- src/bundles/painter/functions.ts | 148 +- src/bundles/painter/index.ts | 12 +- src/bundles/painter/painter.ts | 42 +- src/bundles/physics_2d/PhysicsObject.ts | 384 +- src/bundles/physics_2d/PhysicsWorld.ts | 270 +- src/bundles/physics_2d/functions.ts | 1008 +- src/bundles/physics_2d/index.ts | 236 +- src/bundles/physics_2d/types.ts | 88 +- src/bundles/pix_n_flix/constants.ts | 28 +- src/bundles/pix_n_flix/functions.ts | 1556 +- src/bundles/pix_n_flix/index.ts | 60 +- src/bundles/pix_n_flix/types.ts | 88 +- src/bundles/plotly/curve_functions.ts | 246 +- src/bundles/plotly/functions.ts | 684 +- src/bundles/plotly/index.ts | 26 +- src/bundles/plotly/plotly.ts | 120 +- src/bundles/plotly/sound_functions.ts | 162 +- src/bundles/remote_execution/ev3/index.ts | 110 +- src/bundles/remote_execution/index.ts | 16 +- src/bundles/repeat/__tests__/index.ts | 34 +- src/bundles/repeat/functions.ts | 100 +- src/bundles/repeat/index.ts | 14 +- src/bundles/repl/functions.ts | 166 +- src/bundles/repl/index.ts | 146 +- src/bundles/repl/programmable_repl.ts | 516 +- src/bundles/rune/functions.ts | 2052 +- src/bundles/rune/index.ts | 110 +- src/bundles/rune/rune.ts | 824 +- src/bundles/rune/runes_ops.ts | 722 +- src/bundles/rune/runes_webgl.ts | 326 +- src/bundles/rune_in_words/functions.ts | 1230 +- src/bundles/rune_in_words/index.ts | 104 +- src/bundles/rune_in_words/rune.ts | 2 +- src/bundles/rune_in_words/runes_ops.ts | 122 +- src/bundles/scrabble/__tests__/index.ts | 34 +- src/bundles/scrabble/functions.ts | 135236 +++++++-------- src/bundles/scrabble/index.ts | 20 +- src/bundles/scrabble/types.ts | 8 +- src/bundles/sound/functions.ts | 1880 +- src/bundles/sound/index.ts | 78 +- src/bundles/sound/riffwave.ts | 38 +- src/bundles/sound/types.ts | 28 +- src/bundles/sound_matrix/functions.ts | 786 +- src/bundles/sound_matrix/index.ts | 30 +- src/bundles/sound_matrix/list.ts | 744 +- src/bundles/sound_matrix/types.ts | 8 +- src/bundles/stereo_sound/functions.ts | 2232 +- src/bundles/stereo_sound/index.ts | 90 +- src/bundles/stereo_sound/riffwave.ts | 38 +- src/bundles/stereo_sound/types.ts | 28 +- src/bundles/unity_academy/UnityAcademy.tsx | 1338 +- .../unity_academy/UnityAcademyMaths.ts | 134 +- src/bundles/unity_academy/config.ts | 4 +- src/bundles/unity_academy/functions.ts | 2370 +- src/bundles/unity_academy/index.ts | 278 +- src/bundles/wasm/index.ts | 174 +- src/bundles/wasm/wabt.ts | 46 +- src/jest.config.js | 34 +- src/tabs/ArcadeTwod/index.tsx | 360 +- src/tabs/CopyGc/index.tsx | 922 +- src/tabs/CopyGc/style.tsx | 26 +- src/tabs/Csg/canvas_holder.tsx | 346 +- src/tabs/Csg/hover_control_hint.tsx | 136 +- src/tabs/Csg/index.tsx | 78 +- src/tabs/Csg/types.ts | 54 +- src/tabs/Curve/3Dcurve_anim_canvas.tsx | 698 +- src/tabs/Curve/curve_canvas3d.tsx | 366 +- src/tabs/Curve/index.tsx | 110 +- src/tabs/Game/constants.ts | 10 +- src/tabs/Game/index.tsx | 82 +- src/tabs/MarkSweep/index.tsx | 946 +- src/tabs/MarkSweep/style.tsx | 26 +- src/tabs/Painter/index.tsx | 178 +- src/tabs/Pixnflix/index.tsx | 856 +- src/tabs/Plotly/index.tsx | 170 +- src/tabs/Repeat/index.tsx | 40 +- src/tabs/Repl/index.tsx | 236 +- src/tabs/Rune/hollusion_canvas.tsx | 68 +- src/tabs/Rune/index.tsx | 154 +- src/tabs/Sound/index.tsx | 124 +- src/tabs/SoundMatrix/index.tsx | 228 +- src/tabs/StereoSound/index.tsx | 124 +- src/tabs/UnityAcademy/index.tsx | 404 +- src/tabs/common/animation_canvas.tsx | 634 +- src/tabs/common/modal_div.tsx | 132 +- src/tabs/common/multi_item_display.tsx | 156 +- src/tabs/common/webgl_canvas.tsx | 60 +- src/tabs/physics_2d/DebugDrawCanvas.tsx | 618 +- src/tabs/physics_2d/index.tsx | 90 +- src/tsconfig.json | 92 +- src/typings/@types/js-slang/context.d.ts | 8 +- src/typings/anim_types.tsx | 34 +- src/typings/type_helpers.ts | 44 +- 168 files changed, 95382 insertions(+), 95379 deletions(-) diff --git a/.gitattributes b/.gitattributes index f6eac7711..8079746b0 100644 --- a/.gitattributes +++ b/.gitattributes @@ -6,4 +6,7 @@ # Declare files that will always have CRLF line endings on checkout. *.js text eof=crlf *.ts text eof=crlf -*.tsx text eof=crlf \ No newline at end of file +*.tsx text eof=crlf +*.md text eof=crlf +*.cjs text eof=crlf +*.json text eof=crlf \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 59639f9ca..8740824dc 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -1,46 +1,46 @@ ---- -name: Bug Report -about: Use this template for highlighting bugs. -title: '[FEATURE NAME]: [BUG SUMMARY]' -labels: bug ---- - -# Prerequisites - -Please answer the following questions for yourself before submitting an issue. **YOU MAY DELETE THE PREREQUISITES SECTION.** - -- [ ] I am running the latest version -- [ ] I checked the documentation and found no answer -- [ ] I checked to make sure that this issue has not already been filed - -# Expected Behavior - -Please describe the behavior you are expecting - -# Current Behavior - -What is the current behavior? - -# Failure Information (for bugs) - -Please help provide information about the failure if this is a bug. If it is not a bug, please remove the rest of this template. - -## Steps to Reproduce - -Please provide detailed steps for reproducing the issue. - -1. step 1 -2. step 2 -3. you get it... - -## Context - -Please provide any relevant information about your setup. This is important in case the issue is not reproducible except for under certain conditions. - -- Version used: -- Browser Name and version: -- Operating System and version (desktop or mobile): - -## Failure Logs - -Please include any relevant log snippets or files here. +--- +name: Bug Report +about: Use this template for highlighting bugs. +title: '[FEATURE NAME]: [BUG SUMMARY]' +labels: bug +--- + +# Prerequisites + +Please answer the following questions for yourself before submitting an issue. **YOU MAY DELETE THE PREREQUISITES SECTION.** + +- [ ] I am running the latest version +- [ ] I checked the documentation and found no answer +- [ ] I checked to make sure that this issue has not already been filed + +# Expected Behavior + +Please describe the behavior you are expecting + +# Current Behavior + +What is the current behavior? + +# Failure Information (for bugs) + +Please help provide information about the failure if this is a bug. If it is not a bug, please remove the rest of this template. + +## Steps to Reproduce + +Please provide detailed steps for reproducing the issue. + +1. step 1 +2. step 2 +3. you get it... + +## Context + +Please provide any relevant information about your setup. This is important in case the issue is not reproducible except for under certain conditions. + +- Version used: +- Browser Name and version: +- Operating System and version (desktop or mobile): + +## Failure Logs + +Please include any relevant log snippets or files here. diff --git a/.github/ISSUE_TEMPLATE/documentation_request.md b/.github/ISSUE_TEMPLATE/documentation_request.md index 68b87e70d..c5b917ef0 100644 --- a/.github/ISSUE_TEMPLATE/documentation_request.md +++ b/.github/ISSUE_TEMPLATE/documentation_request.md @@ -1,15 +1,15 @@ ---- -name: Wiki Documentation Request -about: Use this template for requesting documentation on a feature in the wiki. -title: '[Wiki]: [FEATURE]' -labels: documentation ---- - -# Feature - -Please briefly describe the feature that needs documentation. - -## Checklist - -- [ ] I checked the documentation and found that it does not already exist -- [ ] I checked to make sure that this issue has not already been filed +--- +name: Wiki Documentation Request +about: Use this template for requesting documentation on a feature in the wiki. +title: '[Wiki]: [FEATURE]' +labels: documentation +--- + +# Feature + +Please briefly describe the feature that needs documentation. + +## Checklist + +- [ ] I checked the documentation and found that it does not already exist +- [ ] I checked to make sure that this issue has not already been filed diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index a7ba87d93..6fdaba0a7 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -1,32 +1,32 @@ -# Description - -Please include a summary of the change and which issue is fixed. Please also include relevant motivation and context. List any dependencies that are required for this change. - -Fixes # (issue) - -## Type of change - -Please delete options that are not relevant. - -- [ ] Bug fix (non-breaking change which fixes an issue) -- [ ] New feature (non-breaking change which adds functionality) -- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected) -- [ ] This change requires a documentation update - -# How Has This Been Tested? - -Please describe the tests that you ran to verify your changes. Provide instructions so we can reproduce. Please also list any relevant details for your test configuration. - -- [ ] Test A -- [ ] Test B - -# Checklist: - -- [ ] My code follows the style guidelines of this project -- [ ] I have performed a self-review of my own code -- [ ] I have commented my code, particularly in hard-to-understand areas -- [ ] I have made corresponding changes to the documentation -- [ ] My changes generate no new warnings -- [ ] I have added tests that prove my fix is effective or that my feature works -- [ ] New and existing unit tests pass locally with my changes -- [ ] Any dependent changes have been merged and published in downstream modules +# Description + +Please include a summary of the change and which issue is fixed. Please also include relevant motivation and context. List any dependencies that are required for this change. + +Fixes # (issue) + +## Type of change + +Please delete options that are not relevant. + +- [ ] Bug fix (non-breaking change which fixes an issue) +- [ ] New feature (non-breaking change which adds functionality) +- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected) +- [ ] This change requires a documentation update + +# How Has This Been Tested? + +Please describe the tests that you ran to verify your changes. Provide instructions so we can reproduce. Please also list any relevant details for your test configuration. + +- [ ] Test A +- [ ] Test B + +# Checklist: + +- [ ] My code follows the style guidelines of this project +- [ ] I have performed a self-review of my own code +- [ ] I have commented my code, particularly in hard-to-understand areas +- [ ] I have made corresponding changes to the documentation +- [ ] My changes generate no new warnings +- [ ] I have added tests that prove my fix is effective or that my feature works +- [ ] New and existing unit tests pass locally with my changes +- [ ] Any dependent changes have been merged and published in downstream modules diff --git a/.husky/pre-commit b/.husky/pre-commit index b08f47166..dc811ba70 100644 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1,4 +1,4 @@ -#!/bin/sh -. "$(dirname "$0")/_/husky.sh" - -yarn build --tsc --lint +#!/bin/sh +. "$(dirname "$0")/_/husky.sh" + +yarn build --tsc --lint diff --git a/.vscode/launch.json b/.vscode/launch.json index db4b56848..d27f1b763 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -1,17 +1,17 @@ -{ - "configurations": [ - { - "type": "node", - "name": "Test Scripts", - "request": "launch", - "args": [ - "test", - "--runInBand", - "--config=${cwd}/scripts/src/jest.config.js" - ], - "console": "integratedTerminal", - "internalConsoleOptions": "neverOpen", - "runtimeExecutable": "yarn" - } - ] +{ + "configurations": [ + { + "type": "node", + "name": "Test Scripts", + "request": "launch", + "args": [ + "test", + "--runInBand", + "--config=${cwd}/scripts/src/jest.config.js" + ], + "console": "integratedTerminal", + "internalConsoleOptions": "neverOpen", + "runtimeExecutable": "yarn" + } + ] } \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index 45cda114a..f568f6be2 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,7 +1,7 @@ -{ - "eslint.workingDirectories": [ - "src", - "scripts/src" - ], - "files.eol": "\r\n", +{ + "eslint.workingDirectories": [ + "src", + "scripts/src" + ], + "files.eol": "\r\n", } \ No newline at end of file diff --git a/__mocks__/chalk.js b/__mocks__/chalk.js index be0e0afac..a796bfb77 100644 --- a/__mocks__/chalk.js +++ b/__mocks__/chalk.js @@ -1,3 +1,3 @@ -export default new Proxy({}, { - get: () => (input) => input, +export default new Proxy({}, { + get: () => (input) => input, }) \ No newline at end of file diff --git a/scripts/src/build/__tests__/buildAll.test.ts b/scripts/src/build/__tests__/buildAll.test.ts index 90043ecdc..c9b0e8998 100644 --- a/scripts/src/build/__tests__/buildAll.test.ts +++ b/scripts/src/build/__tests__/buildAll.test.ts @@ -1,125 +1,125 @@ -import { getBuildAllCommand } from '..'; -import * as modules from '../modules'; -import * as docsModule from '../docs'; -import * as lintModule from '../prebuild/eslint'; -import * as tscModule from '../prebuild/tsc'; -import { MockedFunction } from 'jest-mock'; - -import fs from 'fs/promises'; -import pathlib from 'path'; - -jest.mock('../prebuild/tsc'); -jest.mock('../prebuild/eslint'); - -jest.mock('esbuild', () => ({ - build: jest.fn().mockResolvedValue({ outputFiles: [] }), -})); - -jest.spyOn(modules, 'buildModules'); -jest.spyOn(docsModule, 'buildJsons'); -jest.spyOn(docsModule, 'buildHtml'); - -const asMock = any>(func: T) => func as MockedFunction; -const runCommand = (...args: string[]) => getBuildAllCommand().parseAsync(args, { from: 'user' }); - -describe('test build all command', () => { - it('should create the output directories, copy the manifest, and call all build functions', async () => { - await runCommand(); - - expect(fs.mkdir) - .toBeCalledWith('build', { recursive: true }) - - expect(fs.copyFile) - .toBeCalledWith('modules.json', pathlib.join('build', 'modules.json')); - - expect(docsModule.initTypedoc) - .toHaveBeenCalledTimes(1); - - expect(docsModule.buildJsons) - .toHaveBeenCalledTimes(1); - - expect(docsModule.buildHtml) - .toHaveBeenCalledTimes(1); - - expect(modules.buildModules) - .toHaveBeenCalledTimes(1); - }); - - it('should exit with code 1 if tsc returns with an error', async () => { - try { - await runCommand('--tsc'); - } catch (error) { - expect(error) - .toEqual(new Error('process.exit called with 1')); - } - - expect(process.exit) - .toHaveBeenCalledWith(1); - - expect(tscModule.runTsc) - .toHaveBeenCalledTimes(1); - }); - - it('should exit with code 1 if eslint returns with an error', async () => { - try { - await runCommand('--lint'); - } catch (error) { - expect(error) - .toEqual(new Error('process.exit called with 1')); - } - - expect(lintModule.runEslint) - .toHaveBeenCalledTimes(1); - - expect(process.exit) - .toHaveBeenCalledWith(1); - }); - - it('should exit with code 1 if buildJsons returns with an error', async () => { - asMock(docsModule.buildJsons).mockResolvedValueOnce([['json', 'test0', { severity: 'error' }]]) - try { - await runCommand(); - } catch (error) { - expect(error) - .toEqual(new Error('process.exit called with 1')); - } - - expect(process.exit) - .toHaveBeenCalledWith(1); - }) - - it('should exit with code 1 if buildModules returns with an error', async () => { - asMock(modules.buildModules).mockResolvedValueOnce([['bundle', 'test0', { severity: 'error' }]]) - try { - await runCommand(); - } catch (error) { - expect(error) - .toEqual(new Error('process.exit called with 1')) - } - - expect(process.exit) - .toHaveBeenCalledWith(1); - }); - - it('should exit with code 1 if buildHtml returns with an error', async () => { - asMock(docsModule.buildHtml).mockResolvedValueOnce({ - elapsed: 0, - result: { - severity: 'error', - } - }); - - try { - await runCommand(); - } catch (error) { - expect(error) - .toEqual(new Error('process.exit called with 1')) - } - - expect(process.exit) - .toHaveBeenCalledWith(1); - - expect(docsModule.buildHtml) - .toHaveBeenCalledTimes(1); - }); -}); +import { getBuildAllCommand } from '..'; +import * as modules from '../modules'; +import * as docsModule from '../docs'; +import * as lintModule from '../prebuild/eslint'; +import * as tscModule from '../prebuild/tsc'; +import { MockedFunction } from 'jest-mock'; + +import fs from 'fs/promises'; +import pathlib from 'path'; + +jest.mock('../prebuild/tsc'); +jest.mock('../prebuild/eslint'); + +jest.mock('esbuild', () => ({ + build: jest.fn().mockResolvedValue({ outputFiles: [] }), +})); + +jest.spyOn(modules, 'buildModules'); +jest.spyOn(docsModule, 'buildJsons'); +jest.spyOn(docsModule, 'buildHtml'); + +const asMock = any>(func: T) => func as MockedFunction; +const runCommand = (...args: string[]) => getBuildAllCommand().parseAsync(args, { from: 'user' }); + +describe('test build all command', () => { + it('should create the output directories, copy the manifest, and call all build functions', async () => { + await runCommand(); + + expect(fs.mkdir) + .toBeCalledWith('build', { recursive: true }) + + expect(fs.copyFile) + .toBeCalledWith('modules.json', pathlib.join('build', 'modules.json')); + + expect(docsModule.initTypedoc) + .toHaveBeenCalledTimes(1); + + expect(docsModule.buildJsons) + .toHaveBeenCalledTimes(1); + + expect(docsModule.buildHtml) + .toHaveBeenCalledTimes(1); + + expect(modules.buildModules) + .toHaveBeenCalledTimes(1); + }); + + it('should exit with code 1 if tsc returns with an error', async () => { + try { + await runCommand('--tsc'); + } catch (error) { + expect(error) + .toEqual(new Error('process.exit called with 1')); + } + + expect(process.exit) + .toHaveBeenCalledWith(1); + + expect(tscModule.runTsc) + .toHaveBeenCalledTimes(1); + }); + + it('should exit with code 1 if eslint returns with an error', async () => { + try { + await runCommand('--lint'); + } catch (error) { + expect(error) + .toEqual(new Error('process.exit called with 1')); + } + + expect(lintModule.runEslint) + .toHaveBeenCalledTimes(1); + + expect(process.exit) + .toHaveBeenCalledWith(1); + }); + + it('should exit with code 1 if buildJsons returns with an error', async () => { + asMock(docsModule.buildJsons).mockResolvedValueOnce([['json', 'test0', { severity: 'error' }]]) + try { + await runCommand(); + } catch (error) { + expect(error) + .toEqual(new Error('process.exit called with 1')); + } + + expect(process.exit) + .toHaveBeenCalledWith(1); + }) + + it('should exit with code 1 if buildModules returns with an error', async () => { + asMock(modules.buildModules).mockResolvedValueOnce([['bundle', 'test0', { severity: 'error' }]]) + try { + await runCommand(); + } catch (error) { + expect(error) + .toEqual(new Error('process.exit called with 1')) + } + + expect(process.exit) + .toHaveBeenCalledWith(1); + }); + + it('should exit with code 1 if buildHtml returns with an error', async () => { + asMock(docsModule.buildHtml).mockResolvedValueOnce({ + elapsed: 0, + result: { + severity: 'error', + } + }); + + try { + await runCommand(); + } catch (error) { + expect(error) + .toEqual(new Error('process.exit called with 1')) + } + + expect(process.exit) + .toHaveBeenCalledWith(1); + + expect(docsModule.buildHtml) + .toHaveBeenCalledTimes(1); + }); +}); diff --git a/scripts/src/build/__tests__/buildUtils.test.ts b/scripts/src/build/__tests__/buildUtils.test.ts index 24c4dbb9f..c28d2fdbb 100644 --- a/scripts/src/build/__tests__/buildUtils.test.ts +++ b/scripts/src/build/__tests__/buildUtils.test.ts @@ -1,74 +1,74 @@ -import { retrieveBundlesAndTabs } from '../buildUtils'; - -describe('Test retrieveBundlesAndTabs', () => { - it('should return all bundles and tabs when null is passed for modules', async () => { - const result = await retrieveBundlesAndTabs('', null, null); - - expect(result.bundles) - .toEqual(expect.arrayContaining(['test0', 'test1', 'test2'])); - expect(result.modulesSpecified) - .toBe(false); - expect(result.tabs) - .toEqual(expect.arrayContaining(['tab0', 'tab1'])); - }); - - it('should return only specific bundles and their tabs when an array is passed for modules', async () => { - const result = await retrieveBundlesAndTabs('', ['test0'], null); - - expect(result.bundles) - .toEqual(expect.arrayContaining(['test0'])); - expect(result.modulesSpecified) - .toBe(true); - expect(result.tabs) - .toEqual(expect.arrayContaining(['tab0'])); - }); - - it('should return only tabs when an empty array is passed for modules', async () => { - const result = await retrieveBundlesAndTabs('', [], null); - - expect(result.bundles) - .toEqual([]); - expect(result.modulesSpecified) - .toBe(true); - expect(result.tabs) - .toEqual(expect.arrayContaining(['tab0', 'tab1'])); - }); - - it('should return tabs from the specified modules, and concatenate specified tabs', async () => { - const result = await retrieveBundlesAndTabs('', ['test0'], ['tab1']); - - expect(result.bundles) - .toEqual(['test0']); - expect(result.modulesSpecified) - .toBe(true); - expect(result.tabs) - .toEqual(expect.arrayContaining(['tab0', 'tab1'])); - }); - - it('should return only specified tabs when addTabs is false', async () => { - const result = await retrieveBundlesAndTabs('', ['test0'], ['tab1'], false); - - expect(result.bundles) - .toEqual(['test0']); - expect(result.modulesSpecified) - .toBe(true); - expect(result.tabs) - .toEqual(['tab1']); - }); - - it('should throw an exception when encountering unknown modules or tabs', () => Promise.all([ - expect(retrieveBundlesAndTabs('', ['random'], null)).rejects.toMatchObject(new Error('Unknown modules: random')), - expect(retrieveBundlesAndTabs('', [], ['random1', 'random2'])).rejects.toMatchObject(new Error('Unknown tabs: random1, random2')) - ])); - - it('should always return unique modules and tabs', async () => { - const result = await retrieveBundlesAndTabs('', ['test0', 'test0'], ['tab0']); - - expect(result.bundles) - .toEqual(['test0']); - expect(result.modulesSpecified) - .toBe(true); - expect(result.tabs) - .toEqual(['tab0']); - }) -}); +import { retrieveBundlesAndTabs } from '../buildUtils'; + +describe('Test retrieveBundlesAndTabs', () => { + it('should return all bundles and tabs when null is passed for modules', async () => { + const result = await retrieveBundlesAndTabs('', null, null); + + expect(result.bundles) + .toEqual(expect.arrayContaining(['test0', 'test1', 'test2'])); + expect(result.modulesSpecified) + .toBe(false); + expect(result.tabs) + .toEqual(expect.arrayContaining(['tab0', 'tab1'])); + }); + + it('should return only specific bundles and their tabs when an array is passed for modules', async () => { + const result = await retrieveBundlesAndTabs('', ['test0'], null); + + expect(result.bundles) + .toEqual(expect.arrayContaining(['test0'])); + expect(result.modulesSpecified) + .toBe(true); + expect(result.tabs) + .toEqual(expect.arrayContaining(['tab0'])); + }); + + it('should return only tabs when an empty array is passed for modules', async () => { + const result = await retrieveBundlesAndTabs('', [], null); + + expect(result.bundles) + .toEqual([]); + expect(result.modulesSpecified) + .toBe(true); + expect(result.tabs) + .toEqual(expect.arrayContaining(['tab0', 'tab1'])); + }); + + it('should return tabs from the specified modules, and concatenate specified tabs', async () => { + const result = await retrieveBundlesAndTabs('', ['test0'], ['tab1']); + + expect(result.bundles) + .toEqual(['test0']); + expect(result.modulesSpecified) + .toBe(true); + expect(result.tabs) + .toEqual(expect.arrayContaining(['tab0', 'tab1'])); + }); + + it('should return only specified tabs when addTabs is false', async () => { + const result = await retrieveBundlesAndTabs('', ['test0'], ['tab1'], false); + + expect(result.bundles) + .toEqual(['test0']); + expect(result.modulesSpecified) + .toBe(true); + expect(result.tabs) + .toEqual(['tab1']); + }); + + it('should throw an exception when encountering unknown modules or tabs', () => Promise.all([ + expect(retrieveBundlesAndTabs('', ['random'], null)).rejects.toMatchObject(new Error('Unknown modules: random')), + expect(retrieveBundlesAndTabs('', [], ['random1', 'random2'])).rejects.toMatchObject(new Error('Unknown tabs: random1, random2')) + ])); + + it('should always return unique modules and tabs', async () => { + const result = await retrieveBundlesAndTabs('', ['test0', 'test0'], ['tab0']); + + expect(result.bundles) + .toEqual(['test0']); + expect(result.modulesSpecified) + .toBe(true); + expect(result.tabs) + .toEqual(['tab0']); + }) +}); diff --git a/scripts/src/build/buildUtils.ts b/scripts/src/build/buildUtils.ts index 3c14ab555..80597906d 100644 --- a/scripts/src/build/buildUtils.ts +++ b/scripts/src/build/buildUtils.ts @@ -1,302 +1,302 @@ -import chalk from 'chalk'; -import { Command, Option } from 'commander'; -import { Table } from 'console-table-printer'; -import fs from 'fs/promises'; -import path from 'path'; - -import { retrieveManifest } from '../scriptUtils.js'; - -import { - type AssetTypes, - type BuildResult, - type OperationResult, - type OverallResult, - type UnreducedResult, - Assets, -} from './types.js'; - -export const divideAndRound = (dividend: number, divisor: number, round: number = 2) => (dividend / divisor).toFixed(round); - -export const fileSizeFormatter = (size?: number) => { - if (typeof size !== 'number') return '-'; - - size /= 1000; - if (size < 0.01) return '<0.01 KB'; - if (size >= 100) return `${divideAndRound(size, 1000)} MB`; - return `${size.toFixed(2)} KB`; -}; - -export const logResult = ( - unreduced: UnreducedResult[], - verbose: boolean, -) => { - const overallResult = unreduced.reduce((res, [type, name, entry]) => { - if (!res[type]) { - res[type] = { - severity: 'success', - results: {}, - }; - } - - if (entry.severity === 'error') res[type].severity = 'error'; - else if (res[type].severity === 'success' && entry.severity === 'warn') res[type].severity = 'warn'; - - res[type].results[name] = entry; - return res; - }, {} as Partial>>); - return console.log(Object.entries(overallResult) - .map(([label, toLog]) => { - if (!toLog) return null; - - const upperCaseLabel = label[0].toUpperCase() + label.slice(1); - const { severity: overallSev, results } = toLog; - const entries = Object.entries(results); - if (entries.length === 0) return ''; - - if (!verbose) { - if (overallSev === 'success') { - return `${chalk.cyanBright(`${upperCaseLabel}s built`)} ${chalk.greenBright('successfully')}\n`; - } - if (overallSev === 'warn') { - return chalk.cyanBright(`${upperCaseLabel}s built with ${chalk.yellowBright('warnings')}:\n${ - entries - .filter(([, { severity }]) => severity === 'warn') - .map(([bundle, { error }], i) => chalk.yellowBright(`${i + 1}. ${bundle}: ${error}`)) - .join('\n')}\n`); - } - - return chalk.cyanBright(`${upperCaseLabel}s build ${chalk.redBright('failed')} with errors:\n${ - entries - .filter(([, { severity }]) => severity !== 'success') - .map(([bundle, { error, severity }], i) => (severity === 'error' - ? chalk.redBright(`${i + 1}. Error ${bundle}: ${error}`) - : chalk.yellowBright(`${i + 1}. Warning ${bundle}: +${error}`))) - .join('\n')}\n`); - } - - const outputTable = new Table({ - columns: [{ - name: 'name', - title: upperCaseLabel, - }, - { - name: 'severity', - title: 'Status', - }, - { - name: 'elapsed', - title: 'Elapsed (s)', - }, - { - name: 'fileSize', - title: 'File Size', - }, - { - name: 'error', - title: 'Errors', - }], - }); - - entries.forEach(([name, { elapsed, severity, error, fileSize }]) => { - if (severity === 'error') { - outputTable.addRow({ - name, - elapsed: '-', - error, - fileSize: '-', - severity: 'Error', - }, { color: 'red' }); - } else if (severity === 'warn') { - outputTable.addRow({ - name, - elapsed: divideAndRound(elapsed, 1000, 2), - error, - fileSize: fileSizeFormatter(fileSize), - severity: 'Warning', - }, { color: 'yellow' }); - } else { - outputTable.addRow({ - name, - elapsed: divideAndRound(elapsed, 1000, 2), - error: '-', - fileSize: fileSizeFormatter(fileSize), - severity: 'Success', - }, { color: 'green' }); - } - }); - - if (overallSev === 'success') { - return `${chalk.cyanBright(`${upperCaseLabel}s built`)} ${chalk.greenBright('successfully')}:\n${outputTable.render()}\n`; - } - if (overallSev === 'warn') { - return `${chalk.cyanBright(`${upperCaseLabel}s built`)} with ${chalk.yellowBright('warnings')}:\n${outputTable.render()}\n`; - } - return `${chalk.cyanBright(`${upperCaseLabel}s build ${chalk.redBright('failed')} with errors`)}:\n${outputTable.render()}\n`; - }) - .filter((str) => str !== null) - .join('\n')); -}; - -/** - * Call this function to exit with code 1 when there are errors with the build command that ran - */ -export const exitOnError = ( - results: (UnreducedResult | OperationResult | null)[], - ...others: (UnreducedResult | OperationResult | null)[] -) => { - results.concat(others) - .forEach((entry) => { - if (!entry) return; - - if (Array.isArray(entry)) { - const [,,{ severity }] = entry; - if (severity === 'error') process.exit(1); - } else if (entry.severity === 'error') process.exit(1); - }); -}; - -export const retrieveTabs = async (manifestFile: string, tabs: string[] | null) => { - const manifest = await retrieveManifest(manifestFile); - const knownTabs = Object.values(manifest) - .flatMap((x) => x.tabs); - - if (tabs === null) { - tabs = knownTabs; - } else { - const unknownTabs = tabs.filter((t) => !knownTabs.includes(t)); - - if (unknownTabs.length > 0) { - throw new Error(`Unknown tabs: ${unknownTabs.join(', ')}`); - } - } - - return tabs; -}; - -export const retrieveBundles = async (manifestFile: string, modules: string[] | null) => { - const manifest = await retrieveManifest(manifestFile); - const knownBundles = Object.keys(manifest); - - if (modules !== null) { - // Some modules were specified - const unknownModules = modules.filter((m) => !knownBundles.includes(m)); - - if (unknownModules.length > 0) { - throw new Error(`Unknown modules: ${unknownModules.join(', ')}`); - } - return modules; - } - return knownBundles; -}; - -/** - * Function to determine which bundles and tabs to build based on the user's input. - * - * @param modules - * - Pass `null` to indicate that the user did not specify any modules. This - * will add all bundles currently registered in the manifest - * - Pass `[]` to indicate not to add any modules - * - Pass an array of strings to manually specify modules to process - * @param tabOpts - * - Pass `null` to indicate that the user did not specify any tabs. This - * will add all tabs currently registered in the manifest - * - Pass `[]` to indicate not to add any tabs - * - Pass an array of strings to manually specify tabs to process - * @param addTabs If `true`, then all tabs of selected bundles will be added to - * the list of tabs to build. - */ -export const retrieveBundlesAndTabs = async ( - manifestFile: string, - modules: string[] | null, - tabOpts: string[] | null, - addTabs: boolean = true, -) => { - const manifest = await retrieveManifest(manifestFile); - const knownBundles = Object.keys(manifest); - const knownTabs = Object.values(manifest) - .flatMap((x) => x.tabs); - - let bundles: string[]; - let tabs: string[]; - - if (modules !== null) { - // Some modules were specified - const unknownModules = modules.filter((m) => !knownBundles.includes(m)); - - if (unknownModules.length > 0) { - throw new Error(`Unknown modules: ${unknownModules.join(', ')}`); - } - bundles = modules; - - if (addTabs) { - // If a bundle is being rebuilt, add its tabs - tabs = modules.flatMap((bundle) => manifest[bundle].tabs); - } else { - tabs = []; - } - } else { - // No modules were specified - bundles = knownBundles; - tabs = []; - } - - if (tabOpts !== null) { - // Tabs were specified - const unknownTabs = tabOpts.filter((t) => !knownTabs.includes(t)); - - if (unknownTabs.length > 0) { - throw new Error(`Unknown tabs: ${unknownTabs.join(', ')}`); - } - tabs = tabs.concat(tabOpts); - } else { - // No tabs were specified - tabs = tabs.concat(knownTabs); - } - - return { - bundles: [...new Set(bundles)], - tabs: [...new Set(tabs)], - modulesSpecified: modules !== null, - }; -}; - -export const bundleNameExpander = (srcdir: string) => (name: string) => path.join(srcdir, 'bundles', name, 'index.ts'); -export const tabNameExpander = (srcdir: string) => (name: string) => path.join(srcdir, 'tabs', name, 'index.tsx'); - -export const createBuildCommand = (label: string, addLint: boolean) => { - const cmd = new Command(label) - .option('--outDir ', 'Output directory', 'build') - .option('--srcDir ', 'Source directory for files', 'src') - .option('--manifest ', 'Manifest file', 'modules.json') - .option('-v, --verbose', 'Display more information about the build results', false); - - if (addLint) { - cmd.option('--tsc', 'Run tsc before building') - .option('--lint', 'Run eslint before building') - .addOption(new Option('--fix', 'Ask eslint to autofix linting errors') - .implies({ lint: true })); - } - - return cmd; -}; - -/** - * Create the output directory's root folder - */ -export const createOutDir = (outDir: string) => fs.mkdir(outDir, { recursive: true }); - -/** - * Copy the manifest to the output folder. The root output folder will be created - * if it does not already exist. - */ -export const copyManifest = ({ manifest, outDir }: { manifest: string, outDir: string }) => createOutDir(outDir) - .then(() => fs.copyFile( - manifest, path.join(outDir, manifest), - )); - -/** - * Create the output directories for each type of asset. - */ -export const createBuildDirs = (outDir: string) => Promise.all( - Assets.map((asset) => fs.mkdir(path.join(outDir, `${asset}s`), { recursive: true })), -); +import chalk from 'chalk'; +import { Command, Option } from 'commander'; +import { Table } from 'console-table-printer'; +import fs from 'fs/promises'; +import path from 'path'; + +import { retrieveManifest } from '../scriptUtils.js'; + +import { + type AssetTypes, + type BuildResult, + type OperationResult, + type OverallResult, + type UnreducedResult, + Assets, +} from './types.js'; + +export const divideAndRound = (dividend: number, divisor: number, round: number = 2) => (dividend / divisor).toFixed(round); + +export const fileSizeFormatter = (size?: number) => { + if (typeof size !== 'number') return '-'; + + size /= 1000; + if (size < 0.01) return '<0.01 KB'; + if (size >= 100) return `${divideAndRound(size, 1000)} MB`; + return `${size.toFixed(2)} KB`; +}; + +export const logResult = ( + unreduced: UnreducedResult[], + verbose: boolean, +) => { + const overallResult = unreduced.reduce((res, [type, name, entry]) => { + if (!res[type]) { + res[type] = { + severity: 'success', + results: {}, + }; + } + + if (entry.severity === 'error') res[type].severity = 'error'; + else if (res[type].severity === 'success' && entry.severity === 'warn') res[type].severity = 'warn'; + + res[type].results[name] = entry; + return res; + }, {} as Partial>>); + return console.log(Object.entries(overallResult) + .map(([label, toLog]) => { + if (!toLog) return null; + + const upperCaseLabel = label[0].toUpperCase() + label.slice(1); + const { severity: overallSev, results } = toLog; + const entries = Object.entries(results); + if (entries.length === 0) return ''; + + if (!verbose) { + if (overallSev === 'success') { + return `${chalk.cyanBright(`${upperCaseLabel}s built`)} ${chalk.greenBright('successfully')}\n`; + } + if (overallSev === 'warn') { + return chalk.cyanBright(`${upperCaseLabel}s built with ${chalk.yellowBright('warnings')}:\n${ + entries + .filter(([, { severity }]) => severity === 'warn') + .map(([bundle, { error }], i) => chalk.yellowBright(`${i + 1}. ${bundle}: ${error}`)) + .join('\n')}\n`); + } + + return chalk.cyanBright(`${upperCaseLabel}s build ${chalk.redBright('failed')} with errors:\n${ + entries + .filter(([, { severity }]) => severity !== 'success') + .map(([bundle, { error, severity }], i) => (severity === 'error' + ? chalk.redBright(`${i + 1}. Error ${bundle}: ${error}`) + : chalk.yellowBright(`${i + 1}. Warning ${bundle}: +${error}`))) + .join('\n')}\n`); + } + + const outputTable = new Table({ + columns: [{ + name: 'name', + title: upperCaseLabel, + }, + { + name: 'severity', + title: 'Status', + }, + { + name: 'elapsed', + title: 'Elapsed (s)', + }, + { + name: 'fileSize', + title: 'File Size', + }, + { + name: 'error', + title: 'Errors', + }], + }); + + entries.forEach(([name, { elapsed, severity, error, fileSize }]) => { + if (severity === 'error') { + outputTable.addRow({ + name, + elapsed: '-', + error, + fileSize: '-', + severity: 'Error', + }, { color: 'red' }); + } else if (severity === 'warn') { + outputTable.addRow({ + name, + elapsed: divideAndRound(elapsed, 1000, 2), + error, + fileSize: fileSizeFormatter(fileSize), + severity: 'Warning', + }, { color: 'yellow' }); + } else { + outputTable.addRow({ + name, + elapsed: divideAndRound(elapsed, 1000, 2), + error: '-', + fileSize: fileSizeFormatter(fileSize), + severity: 'Success', + }, { color: 'green' }); + } + }); + + if (overallSev === 'success') { + return `${chalk.cyanBright(`${upperCaseLabel}s built`)} ${chalk.greenBright('successfully')}:\n${outputTable.render()}\n`; + } + if (overallSev === 'warn') { + return `${chalk.cyanBright(`${upperCaseLabel}s built`)} with ${chalk.yellowBright('warnings')}:\n${outputTable.render()}\n`; + } + return `${chalk.cyanBright(`${upperCaseLabel}s build ${chalk.redBright('failed')} with errors`)}:\n${outputTable.render()}\n`; + }) + .filter((str) => str !== null) + .join('\n')); +}; + +/** + * Call this function to exit with code 1 when there are errors with the build command that ran + */ +export const exitOnError = ( + results: (UnreducedResult | OperationResult | null)[], + ...others: (UnreducedResult | OperationResult | null)[] +) => { + results.concat(others) + .forEach((entry) => { + if (!entry) return; + + if (Array.isArray(entry)) { + const [,,{ severity }] = entry; + if (severity === 'error') process.exit(1); + } else if (entry.severity === 'error') process.exit(1); + }); +}; + +export const retrieveTabs = async (manifestFile: string, tabs: string[] | null) => { + const manifest = await retrieveManifest(manifestFile); + const knownTabs = Object.values(manifest) + .flatMap((x) => x.tabs); + + if (tabs === null) { + tabs = knownTabs; + } else { + const unknownTabs = tabs.filter((t) => !knownTabs.includes(t)); + + if (unknownTabs.length > 0) { + throw new Error(`Unknown tabs: ${unknownTabs.join(', ')}`); + } + } + + return tabs; +}; + +export const retrieveBundles = async (manifestFile: string, modules: string[] | null) => { + const manifest = await retrieveManifest(manifestFile); + const knownBundles = Object.keys(manifest); + + if (modules !== null) { + // Some modules were specified + const unknownModules = modules.filter((m) => !knownBundles.includes(m)); + + if (unknownModules.length > 0) { + throw new Error(`Unknown modules: ${unknownModules.join(', ')}`); + } + return modules; + } + return knownBundles; +}; + +/** + * Function to determine which bundles and tabs to build based on the user's input. + * + * @param modules + * - Pass `null` to indicate that the user did not specify any modules. This + * will add all bundles currently registered in the manifest + * - Pass `[]` to indicate not to add any modules + * - Pass an array of strings to manually specify modules to process + * @param tabOpts + * - Pass `null` to indicate that the user did not specify any tabs. This + * will add all tabs currently registered in the manifest + * - Pass `[]` to indicate not to add any tabs + * - Pass an array of strings to manually specify tabs to process + * @param addTabs If `true`, then all tabs of selected bundles will be added to + * the list of tabs to build. + */ +export const retrieveBundlesAndTabs = async ( + manifestFile: string, + modules: string[] | null, + tabOpts: string[] | null, + addTabs: boolean = true, +) => { + const manifest = await retrieveManifest(manifestFile); + const knownBundles = Object.keys(manifest); + const knownTabs = Object.values(manifest) + .flatMap((x) => x.tabs); + + let bundles: string[]; + let tabs: string[]; + + if (modules !== null) { + // Some modules were specified + const unknownModules = modules.filter((m) => !knownBundles.includes(m)); + + if (unknownModules.length > 0) { + throw new Error(`Unknown modules: ${unknownModules.join(', ')}`); + } + bundles = modules; + + if (addTabs) { + // If a bundle is being rebuilt, add its tabs + tabs = modules.flatMap((bundle) => manifest[bundle].tabs); + } else { + tabs = []; + } + } else { + // No modules were specified + bundles = knownBundles; + tabs = []; + } + + if (tabOpts !== null) { + // Tabs were specified + const unknownTabs = tabOpts.filter((t) => !knownTabs.includes(t)); + + if (unknownTabs.length > 0) { + throw new Error(`Unknown tabs: ${unknownTabs.join(', ')}`); + } + tabs = tabs.concat(tabOpts); + } else { + // No tabs were specified + tabs = tabs.concat(knownTabs); + } + + return { + bundles: [...new Set(bundles)], + tabs: [...new Set(tabs)], + modulesSpecified: modules !== null, + }; +}; + +export const bundleNameExpander = (srcdir: string) => (name: string) => path.join(srcdir, 'bundles', name, 'index.ts'); +export const tabNameExpander = (srcdir: string) => (name: string) => path.join(srcdir, 'tabs', name, 'index.tsx'); + +export const createBuildCommand = (label: string, addLint: boolean) => { + const cmd = new Command(label) + .option('--outDir ', 'Output directory', 'build') + .option('--srcDir ', 'Source directory for files', 'src') + .option('--manifest ', 'Manifest file', 'modules.json') + .option('-v, --verbose', 'Display more information about the build results', false); + + if (addLint) { + cmd.option('--tsc', 'Run tsc before building') + .option('--lint', 'Run eslint before building') + .addOption(new Option('--fix', 'Ask eslint to autofix linting errors') + .implies({ lint: true })); + } + + return cmd; +}; + +/** + * Create the output directory's root folder + */ +export const createOutDir = (outDir: string) => fs.mkdir(outDir, { recursive: true }); + +/** + * Copy the manifest to the output folder. The root output folder will be created + * if it does not already exist. + */ +export const copyManifest = ({ manifest, outDir }: { manifest: string, outDir: string }) => createOutDir(outDir) + .then(() => fs.copyFile( + manifest, path.join(outDir, manifest), + )); + +/** + * Create the output directories for each type of asset. + */ +export const createBuildDirs = (outDir: string) => Promise.all( + Assets.map((asset) => fs.mkdir(path.join(outDir, `${asset}s`), { recursive: true })), +); diff --git a/scripts/src/build/dev.ts b/scripts/src/build/dev.ts index 8824a33c1..40533c55b 100644 --- a/scripts/src/build/dev.ts +++ b/scripts/src/build/dev.ts @@ -1,380 +1,380 @@ -import chalk from 'chalk'; -import { context as esbuild } from 'esbuild'; -import type { Application } from 'typedoc'; - -import { buildHtml, buildJsons, initTypedoc, logHtmlResult } from './docs/index.js'; -import { bundleOptions, reduceBundleOutputFiles } from './modules/bundle.js'; -import { reduceTabOutputFiles, tabOptions } from './modules/tab.js'; -import { - bundleNameExpander, - copyManifest, - createBuildCommand, - createBuildDirs, - divideAndRound, - logResult, - retrieveBundlesAndTabs, - tabNameExpander, -} from './buildUtils.js'; -import type { BuildCommandInputs, UnreducedResult } from './types.js'; - -/** - * Wait until the user presses 'ctrl+c' on the keyboard - */ -const waitForQuit = () => new Promise((resolve, reject) => { - process.stdin.setRawMode(true); - process.stdin.on('data', (data) => { - const byteArray = [...data]; - if (byteArray.length > 0 && byteArray[0] === 3) { - console.log('^C'); - process.stdin.setRawMode(false); - resolve(); - } - }); - process.stdin.on('error', reject); -}); - -type ContextOptions = Record<'srcDir' | 'outDir', string>; -const getBundleContext = ({ srcDir, outDir }: ContextOptions, bundles: string[], app?: Application) => esbuild({ - ...bundleOptions, - outbase: outDir, - outdir: outDir, - entryPoints: bundles.map(bundleNameExpander(srcDir)), - plugins: [{ - name: 'Bundle Compiler', - async setup(pluginBuild) { - let jsonPromise: Promise | null = null; - if (app) { - app.convertAndWatch(async (project) => { - console.log(chalk.magentaBright('Beginning jsons build...')); - jsonPromise = buildJsons(project, { - outDir, - bundles, - }); - }); - } - - let startTime: number; - pluginBuild.onStart(() => { - console.log(chalk.magentaBright('Beginning bundles build...')); - startTime = performance.now(); - }); - - pluginBuild.onEnd(async ({ outputFiles }) => { - const [mainResults, jsonResults] = await Promise.all([ - reduceBundleOutputFiles(outputFiles, startTime, outDir), - jsonPromise || Promise.resolve([]), - ]); - logResult(mainResults.concat(jsonResults), false); - - console.log(chalk.gray(`Bundles took ${divideAndRound(performance.now() - startTime, 1000, 2)}s to complete\n`)); - }); - }, - }], -}); - -const getTabContext = ({ srcDir, outDir }: ContextOptions, tabs: string[]) => esbuild({ - ...tabOptions, - outbase: outDir, - outdir: outDir, - entryPoints: tabs.map(tabNameExpander(srcDir)), - external: ['react*', 'react-dom'], - plugins: [{ - name: 'Tab Compiler', - setup(pluginBuild) { - let startTime: number; - pluginBuild.onStart(() => { - console.log(chalk.magentaBright('Beginning tabs build...')); - startTime = performance.now(); - }); - - pluginBuild.onEnd(async ({ outputFiles }) => { - const mainResults = await reduceTabOutputFiles(outputFiles, startTime, outDir); - logResult(mainResults, false); - - console.log(chalk.gray(`Tabs took ${divideAndRound(performance.now() - startTime, 1000, 2)}s to complete\n`)); - }); - }, - }], -}); - -// const serveContext = async (context: Awaited>) => { -// const { port } = await context.serve({ -// host: '127.0.0.2', -// onRequest: ({ method, path: urlPath, remoteAddress, timeInMS }) => console.log(`[${new Date() -// .toISOString()}] ${chalk.gray(remoteAddress)} "${chalk.cyan(`${method} ${urlPath}`)}": Response Time: ${ -// chalk.magentaBright(`${divideAndRound(timeInMS, 1000, 2)}s`)}`), -// }); - -// return port; -// }; - -type WatchCommandInputs = { - docs: boolean; -} & BuildCommandInputs; - -export const watchCommand = createBuildCommand('watch', false) - .description('Run esbuild in watch mode, rebuilding on every detected file system change') - .option('--no-docs', 'Don\'t rebuild documentation') - .action(async (opts: WatchCommandInputs) => { - const [{ bundles, tabs }] = await Promise.all([ - retrieveBundlesAndTabs(opts.manifest, null, null), - createBuildDirs(opts.outDir), - copyManifest(opts), - ]); - - let app: Application | null = null; - if (opts.docs) { - ({ result: [app] } = await initTypedoc({ - srcDir: opts.srcDir, - bundles, - verbose: false, - }, true)); - } - - const [bundlesContext, tabsContext] = await Promise.all([ - getBundleContext(opts, bundles, app), - getTabContext(opts, tabs), - ]); - - console.log(chalk.yellowBright(`Watching ${chalk.cyanBright(`./${opts.srcDir}`)} for changes\nPress CTRL + C to stop`)); - await Promise.all([bundlesContext.watch(), tabsContext.watch()]); - await waitForQuit(); - console.log(chalk.yellowBright('Stopping...')); - - const [htmlResult] = await Promise.all([ - opts.docs - ? buildHtml(app, app.convert(), { - outDir: opts.outDir, - modulesSpecified: false, - }) - : Promise.resolve(null), - bundlesContext.cancel() - .then(() => bundlesContext.dispose()), - tabsContext.cancel() - .then(() => tabsContext.dispose()), - copyManifest(opts), - ]); - logHtmlResult(htmlResult); - }); - -/* -type DevCommandInputs = { - docs: boolean; - - ip: string | null; - port: number | null; - - watch: boolean; - serve: boolean; -} & BuildCommandInputs; - -const devCommand = createBuildCommand('dev') - .description('Use this command to leverage esbuild\'s automatic rebuilding capapbilities.' - + ' Use --watch to rebuild every time the file system detects changes and' - + ' --serve to serve modules using a special HTTP server that rebuilds on each request.' - + ' If neither is specified then --serve is assumed') - .option('--no-docs', 'Don\'t rebuild documentation') - .option('-w, --watch', 'Rebuild on file system changes', false) - .option('-s, --serve', 'Run the HTTP server, and rebuild on every request', false) - .option('-i, --ip', 'Host interface to bind to', null) - .option('-p, --port', 'Port to bind for the server to bind to', (value) => { - const parsedInt = parseInt(value); - if (isNaN(parsedInt) || parsedInt < 1 || parsedInt > 65535) { - throw new InvalidArgumentError(`Expected port to be a valid number between 1-65535, got ${value}!`); - } - return parsedInt; - }, null) - .action(async ({ verbose, ...opts }: DevCommandInputs) => { - const shouldWatch = opts.watch; - const shouldServe = opts.serve || !opts.watch; - - if (!shouldServe) { - if (opts.ip) console.log(chalk.yellowBright('--ip option specified without --serve!')); - if (opts.port) console.log(chalk.yellowBright('--port option specified without --serve!')); - } - - const [{ bundles, tabs }] = await Promise.all([ - retrieveBundlesAndTabs(opts.manifest, null, null), - fsPromises.mkdir(`${opts.outDir}/bundles/`, { recursive: true }), - fsPromises.mkdir(`${opts.outDir}/tabs/`, { recursive: true }), - fsPromises.mkdir(`${opts.outDir}/jsons/`, { recursive: true }), - fsPromises.copyFile(opts.manifest, `${opts.outDir}/${opts.manifest}`), - ]); - - - const [bundlesContext, tabsContext] = await Promise.all([ - getBundleContext(opts, bundles), - getTabContext(opts, tabs), - ]); - - await Promise.all([ - bundlesContext.watch(), - tabsContext.watch(), - ]); - - await Promise.all([ - bundlesContext.cancel() - .then(() => bundlesContext.dispose()), - tabsContext.cancel() - .then(() => tabsContext.dispose()), - ]); - - await waitForQuit(); - - - if (opts.watch) { - await Promise.all([ - bundlesContext.watch(), - tabsContext.watch(), - ]); - } - - let httpServer: http.Server | null = null; - if (opts.serve) { - const [bundlesPort, tabsPort] = await Promise.all([ - serveContext(bundlesContext), - serveContext(tabsContext), - ]); - - httpServer = http.createServer((req, res) => { - const urlSegments = req.url.split('/'); - if (urlSegments.length === 3) { - const [, assetType, name] = urlSegments; - - if (assetType === 'jsons') { - const filePath = path.join(opts.outDir, 'jsons', name); - if (!fsSync.existsSync(filePath)) { - res.writeHead(404, 'No such json file'); - res.end(); - return; - } - - const readStream = fsSync.createReadStream(filePath); - readStream.on('data', (data) => res.write(data)); - readStream.on('end', () => { - res.writeHead(200); - res.end(); - }); - readStream.on('error', (err) => { - res.writeHead(500, `Error Occurred: ${err}`); - res.end(); - }); - } else if (assetType === 'tabs') { - const proxyReq = http.request({ - host: '127.0.0.2', - port: tabsPort, - path: req.url, - method: req.method, - headers: req.headers, - }, (proxyRes) => { - // Forward each incoming request to esbuild - res.writeHead(proxyRes.statusCode, proxyRes.headers); - proxyRes.pipe(res, { end: true }); - }); - // Forward the body of the request to esbuild - req.pipe(proxyReq, { end: true }); - } else if (assetType === 'bundles') { - const proxyReq = http.request({ - host: '127.0.0.2', - port: bundlesPort, - path: req.url, - method: req.method, - headers: req.headers, - }, (proxyRes) => { - // Forward each incoming request to esbuild - res.writeHead(proxyRes.statusCode, proxyRes.headers); - proxyRes.pipe(res, { end: true }); - }); - // Forward the body of the request to esbuild - req.pipe(proxyReq, { end: true }); - } else { - res.writeHead(400); - res.end(); - } - } - }); - httpServer.listen(opts.port, opts.ip); - - await new Promise((resolve) => httpServer.once('listening', () => resolve())); - console.log(`${ - chalk.greenBright(`Serving ${ - chalk.cyanBright(`./${opts.outDir}`) - } at`)} ${ - chalk.yellowBright(`${opts.ip}:${opts.port}`) - }`); - } - - await waitForQuit(); - - if (httpServer) { - httpServer.close(); - } - - await Promise.all([ - bundlesContext.cancel() - .then(() => bundlesContext.dispose()), - tabsContext.cancel() - .then(() => tabsContext.dispose()), - ]); - - let app: Application | null = null; - if (opts.docs) { - ({ result: [app] } = await initTypedoc({ - srcDir: opts.srcDir, - bundles: Object.keys(manifest), - verbose, - }, true)); - } - - let typedocProj: ProjectReflection | null = null; - const buildDocs = async () => { - if (!opts.docs) return []; - typedocProj = app.convert(); - return buildJsons(typedocProj, { - bundles: Object.keys(manifest), - outDir: opts.outDir, - }); - }; - - if (shouldWatch) { - console.log(chalk.yellowBright(`Watching ${chalk.cyanBright(`./${opts.srcDir}`)} for changes`)); - await context.watch(); - } - - if (shouldServe) { - const { port: servePort, host: serveHost } = await context.serve({ - servedir: opts.outDir, - port: opts.port || 8022, - host: opts.ip || '0.0.0.0', - onRequest: ({ method, path: urlPath, remoteAddress, timeInMS }) => console.log(`[${new Date() - .toISOString()}] ${chalk.gray(remoteAddress)} "${chalk.cyan(`${method} ${urlPath}`)}": Response Time: ${ - chalk.magentaBright(`${divideAndRound(timeInMS, 1000, 2)}s`)}`), - }); - console.log(`${ - chalk.greenBright(`Serving ${ - chalk.cyanBright(`./${opts.outDir}`) - } at`)} ${ - chalk.yellowBright(`${serveHost}:${servePort}`) - }`); - } - - console.log(chalk.yellowBright('Press CTRL + C to stop')); - - await waitForQuit(); - console.log(chalk.yellowBright('Stopping...')); - const [htmlResult] = await Promise.all([ - opts.docs - ? buildHtml(app, typedocProj, { - outDir: opts.outDir, - modulesSpecified: false, - }) - : Promise.resolve(null), - context.cancel(), - ]); - - logHtmlResult(htmlResult); - await context.dispose(); - }); - -export default devCommand; -*/ +import chalk from 'chalk'; +import { context as esbuild } from 'esbuild'; +import type { Application } from 'typedoc'; + +import { buildHtml, buildJsons, initTypedoc, logHtmlResult } from './docs/index.js'; +import { bundleOptions, reduceBundleOutputFiles } from './modules/bundle.js'; +import { reduceTabOutputFiles, tabOptions } from './modules/tab.js'; +import { + bundleNameExpander, + copyManifest, + createBuildCommand, + createBuildDirs, + divideAndRound, + logResult, + retrieveBundlesAndTabs, + tabNameExpander, +} from './buildUtils.js'; +import type { BuildCommandInputs, UnreducedResult } from './types.js'; + +/** + * Wait until the user presses 'ctrl+c' on the keyboard + */ +const waitForQuit = () => new Promise((resolve, reject) => { + process.stdin.setRawMode(true); + process.stdin.on('data', (data) => { + const byteArray = [...data]; + if (byteArray.length > 0 && byteArray[0] === 3) { + console.log('^C'); + process.stdin.setRawMode(false); + resolve(); + } + }); + process.stdin.on('error', reject); +}); + +type ContextOptions = Record<'srcDir' | 'outDir', string>; +const getBundleContext = ({ srcDir, outDir }: ContextOptions, bundles: string[], app?: Application) => esbuild({ + ...bundleOptions, + outbase: outDir, + outdir: outDir, + entryPoints: bundles.map(bundleNameExpander(srcDir)), + plugins: [{ + name: 'Bundle Compiler', + async setup(pluginBuild) { + let jsonPromise: Promise | null = null; + if (app) { + app.convertAndWatch(async (project) => { + console.log(chalk.magentaBright('Beginning jsons build...')); + jsonPromise = buildJsons(project, { + outDir, + bundles, + }); + }); + } + + let startTime: number; + pluginBuild.onStart(() => { + console.log(chalk.magentaBright('Beginning bundles build...')); + startTime = performance.now(); + }); + + pluginBuild.onEnd(async ({ outputFiles }) => { + const [mainResults, jsonResults] = await Promise.all([ + reduceBundleOutputFiles(outputFiles, startTime, outDir), + jsonPromise || Promise.resolve([]), + ]); + logResult(mainResults.concat(jsonResults), false); + + console.log(chalk.gray(`Bundles took ${divideAndRound(performance.now() - startTime, 1000, 2)}s to complete\n`)); + }); + }, + }], +}); + +const getTabContext = ({ srcDir, outDir }: ContextOptions, tabs: string[]) => esbuild({ + ...tabOptions, + outbase: outDir, + outdir: outDir, + entryPoints: tabs.map(tabNameExpander(srcDir)), + external: ['react*', 'react-dom'], + plugins: [{ + name: 'Tab Compiler', + setup(pluginBuild) { + let startTime: number; + pluginBuild.onStart(() => { + console.log(chalk.magentaBright('Beginning tabs build...')); + startTime = performance.now(); + }); + + pluginBuild.onEnd(async ({ outputFiles }) => { + const mainResults = await reduceTabOutputFiles(outputFiles, startTime, outDir); + logResult(mainResults, false); + + console.log(chalk.gray(`Tabs took ${divideAndRound(performance.now() - startTime, 1000, 2)}s to complete\n`)); + }); + }, + }], +}); + +// const serveContext = async (context: Awaited>) => { +// const { port } = await context.serve({ +// host: '127.0.0.2', +// onRequest: ({ method, path: urlPath, remoteAddress, timeInMS }) => console.log(`[${new Date() +// .toISOString()}] ${chalk.gray(remoteAddress)} "${chalk.cyan(`${method} ${urlPath}`)}": Response Time: ${ +// chalk.magentaBright(`${divideAndRound(timeInMS, 1000, 2)}s`)}`), +// }); + +// return port; +// }; + +type WatchCommandInputs = { + docs: boolean; +} & BuildCommandInputs; + +export const watchCommand = createBuildCommand('watch', false) + .description('Run esbuild in watch mode, rebuilding on every detected file system change') + .option('--no-docs', 'Don\'t rebuild documentation') + .action(async (opts: WatchCommandInputs) => { + const [{ bundles, tabs }] = await Promise.all([ + retrieveBundlesAndTabs(opts.manifest, null, null), + createBuildDirs(opts.outDir), + copyManifest(opts), + ]); + + let app: Application | null = null; + if (opts.docs) { + ({ result: [app] } = await initTypedoc({ + srcDir: opts.srcDir, + bundles, + verbose: false, + }, true)); + } + + const [bundlesContext, tabsContext] = await Promise.all([ + getBundleContext(opts, bundles, app), + getTabContext(opts, tabs), + ]); + + console.log(chalk.yellowBright(`Watching ${chalk.cyanBright(`./${opts.srcDir}`)} for changes\nPress CTRL + C to stop`)); + await Promise.all([bundlesContext.watch(), tabsContext.watch()]); + await waitForQuit(); + console.log(chalk.yellowBright('Stopping...')); + + const [htmlResult] = await Promise.all([ + opts.docs + ? buildHtml(app, app.convert(), { + outDir: opts.outDir, + modulesSpecified: false, + }) + : Promise.resolve(null), + bundlesContext.cancel() + .then(() => bundlesContext.dispose()), + tabsContext.cancel() + .then(() => tabsContext.dispose()), + copyManifest(opts), + ]); + logHtmlResult(htmlResult); + }); + +/* +type DevCommandInputs = { + docs: boolean; + + ip: string | null; + port: number | null; + + watch: boolean; + serve: boolean; +} & BuildCommandInputs; + +const devCommand = createBuildCommand('dev') + .description('Use this command to leverage esbuild\'s automatic rebuilding capapbilities.' + + ' Use --watch to rebuild every time the file system detects changes and' + + ' --serve to serve modules using a special HTTP server that rebuilds on each request.' + + ' If neither is specified then --serve is assumed') + .option('--no-docs', 'Don\'t rebuild documentation') + .option('-w, --watch', 'Rebuild on file system changes', false) + .option('-s, --serve', 'Run the HTTP server, and rebuild on every request', false) + .option('-i, --ip', 'Host interface to bind to', null) + .option('-p, --port', 'Port to bind for the server to bind to', (value) => { + const parsedInt = parseInt(value); + if (isNaN(parsedInt) || parsedInt < 1 || parsedInt > 65535) { + throw new InvalidArgumentError(`Expected port to be a valid number between 1-65535, got ${value}!`); + } + return parsedInt; + }, null) + .action(async ({ verbose, ...opts }: DevCommandInputs) => { + const shouldWatch = opts.watch; + const shouldServe = opts.serve || !opts.watch; + + if (!shouldServe) { + if (opts.ip) console.log(chalk.yellowBright('--ip option specified without --serve!')); + if (opts.port) console.log(chalk.yellowBright('--port option specified without --serve!')); + } + + const [{ bundles, tabs }] = await Promise.all([ + retrieveBundlesAndTabs(opts.manifest, null, null), + fsPromises.mkdir(`${opts.outDir}/bundles/`, { recursive: true }), + fsPromises.mkdir(`${opts.outDir}/tabs/`, { recursive: true }), + fsPromises.mkdir(`${opts.outDir}/jsons/`, { recursive: true }), + fsPromises.copyFile(opts.manifest, `${opts.outDir}/${opts.manifest}`), + ]); + + + const [bundlesContext, tabsContext] = await Promise.all([ + getBundleContext(opts, bundles), + getTabContext(opts, tabs), + ]); + + await Promise.all([ + bundlesContext.watch(), + tabsContext.watch(), + ]); + + await Promise.all([ + bundlesContext.cancel() + .then(() => bundlesContext.dispose()), + tabsContext.cancel() + .then(() => tabsContext.dispose()), + ]); + + await waitForQuit(); + + + if (opts.watch) { + await Promise.all([ + bundlesContext.watch(), + tabsContext.watch(), + ]); + } + + let httpServer: http.Server | null = null; + if (opts.serve) { + const [bundlesPort, tabsPort] = await Promise.all([ + serveContext(bundlesContext), + serveContext(tabsContext), + ]); + + httpServer = http.createServer((req, res) => { + const urlSegments = req.url.split('/'); + if (urlSegments.length === 3) { + const [, assetType, name] = urlSegments; + + if (assetType === 'jsons') { + const filePath = path.join(opts.outDir, 'jsons', name); + if (!fsSync.existsSync(filePath)) { + res.writeHead(404, 'No such json file'); + res.end(); + return; + } + + const readStream = fsSync.createReadStream(filePath); + readStream.on('data', (data) => res.write(data)); + readStream.on('end', () => { + res.writeHead(200); + res.end(); + }); + readStream.on('error', (err) => { + res.writeHead(500, `Error Occurred: ${err}`); + res.end(); + }); + } else if (assetType === 'tabs') { + const proxyReq = http.request({ + host: '127.0.0.2', + port: tabsPort, + path: req.url, + method: req.method, + headers: req.headers, + }, (proxyRes) => { + // Forward each incoming request to esbuild + res.writeHead(proxyRes.statusCode, proxyRes.headers); + proxyRes.pipe(res, { end: true }); + }); + // Forward the body of the request to esbuild + req.pipe(proxyReq, { end: true }); + } else if (assetType === 'bundles') { + const proxyReq = http.request({ + host: '127.0.0.2', + port: bundlesPort, + path: req.url, + method: req.method, + headers: req.headers, + }, (proxyRes) => { + // Forward each incoming request to esbuild + res.writeHead(proxyRes.statusCode, proxyRes.headers); + proxyRes.pipe(res, { end: true }); + }); + // Forward the body of the request to esbuild + req.pipe(proxyReq, { end: true }); + } else { + res.writeHead(400); + res.end(); + } + } + }); + httpServer.listen(opts.port, opts.ip); + + await new Promise((resolve) => httpServer.once('listening', () => resolve())); + console.log(`${ + chalk.greenBright(`Serving ${ + chalk.cyanBright(`./${opts.outDir}`) + } at`)} ${ + chalk.yellowBright(`${opts.ip}:${opts.port}`) + }`); + } + + await waitForQuit(); + + if (httpServer) { + httpServer.close(); + } + + await Promise.all([ + bundlesContext.cancel() + .then(() => bundlesContext.dispose()), + tabsContext.cancel() + .then(() => tabsContext.dispose()), + ]); + + let app: Application | null = null; + if (opts.docs) { + ({ result: [app] } = await initTypedoc({ + srcDir: opts.srcDir, + bundles: Object.keys(manifest), + verbose, + }, true)); + } + + let typedocProj: ProjectReflection | null = null; + const buildDocs = async () => { + if (!opts.docs) return []; + typedocProj = app.convert(); + return buildJsons(typedocProj, { + bundles: Object.keys(manifest), + outDir: opts.outDir, + }); + }; + + if (shouldWatch) { + console.log(chalk.yellowBright(`Watching ${chalk.cyanBright(`./${opts.srcDir}`)} for changes`)); + await context.watch(); + } + + if (shouldServe) { + const { port: servePort, host: serveHost } = await context.serve({ + servedir: opts.outDir, + port: opts.port || 8022, + host: opts.ip || '0.0.0.0', + onRequest: ({ method, path: urlPath, remoteAddress, timeInMS }) => console.log(`[${new Date() + .toISOString()}] ${chalk.gray(remoteAddress)} "${chalk.cyan(`${method} ${urlPath}`)}": Response Time: ${ + chalk.magentaBright(`${divideAndRound(timeInMS, 1000, 2)}s`)}`), + }); + console.log(`${ + chalk.greenBright(`Serving ${ + chalk.cyanBright(`./${opts.outDir}`) + } at`)} ${ + chalk.yellowBright(`${serveHost}:${servePort}`) + }`); + } + + console.log(chalk.yellowBright('Press CTRL + C to stop')); + + await waitForQuit(); + console.log(chalk.yellowBright('Stopping...')); + const [htmlResult] = await Promise.all([ + opts.docs + ? buildHtml(app, typedocProj, { + outDir: opts.outDir, + modulesSpecified: false, + }) + : Promise.resolve(null), + context.cancel(), + ]); + + logHtmlResult(htmlResult); + await context.dispose(); + }); + +export default devCommand; +*/ diff --git a/scripts/src/build/docs/__mocks__/docUtils.ts b/scripts/src/build/docs/__mocks__/docUtils.ts index 7cc4e51d6..7f755a72c 100644 --- a/scripts/src/build/docs/__mocks__/docUtils.ts +++ b/scripts/src/build/docs/__mocks__/docUtils.ts @@ -1,21 +1,21 @@ -import type { ProjectReference } from 'typescript'; - -export const initTypedoc = jest.fn(() => { - const proj = { - getChildByName: () => ({ - children: [], - }), - path: '', - } as ProjectReference; - - return Promise.resolve({ - elapsed: 0, - result: [{ - convert: jest.fn() - .mockReturnValue(proj), - generateDocs: jest.fn(() => Promise.resolve()), - }, proj], - }); -}); - +import type { ProjectReference } from 'typescript'; + +export const initTypedoc = jest.fn(() => { + const proj = { + getChildByName: () => ({ + children: [], + }), + path: '', + } as ProjectReference; + + return Promise.resolve({ + elapsed: 0, + result: [{ + convert: jest.fn() + .mockReturnValue(proj), + generateDocs: jest.fn(() => Promise.resolve()), + }, proj], + }); +}); + export const logTypedocTime = jest.fn(); \ No newline at end of file diff --git a/scripts/src/build/docs/__tests__/docs.test.ts b/scripts/src/build/docs/__tests__/docs.test.ts index 2a9e4950d..9f743dba0 100644 --- a/scripts/src/build/docs/__tests__/docs.test.ts +++ b/scripts/src/build/docs/__tests__/docs.test.ts @@ -1,90 +1,90 @@ -import type { MockedFunction } from 'jest-mock'; -import { getBuildDocsCommand } from '..'; -import { initTypedoc } from '../docUtils'; -import * as jsonModule from '../json'; -import * as htmlModule from '../html'; -import fs from 'fs/promises'; - -jest.mock('../../prebuild/tsc'); - -jest.spyOn(jsonModule, 'buildJsons'); -jest.spyOn(htmlModule, 'buildHtml'); - -const asMock = any>(func: T) => func as MockedFunction; -const mockBuildJson = asMock(jsonModule.buildJsons); - -const runCommand = (...args: string[]) => getBuildDocsCommand().parseAsync(args, { from: 'user' }); -describe('test the docs command', () => { - it('should create the output directories and call all doc build functions', async () => { - await runCommand(); - - expect(fs.mkdir) - .toBeCalledWith('build', { recursive: true }) - - expect(jsonModule.buildJsons) - .toHaveBeenCalledTimes(1); - - expect(htmlModule.buildHtml) - .toHaveBeenCalledTimes(1); - - expect(initTypedoc) - .toHaveBeenCalledTimes(1); - }); - - it('should only build the documentation for specified modules', async () => { - await runCommand('test0', 'test1') - - expect(jsonModule.buildJsons) - .toHaveBeenCalledTimes(1); - - const buildJsonCall = mockBuildJson.mock.calls[0]; - expect(buildJsonCall[1]) - .toMatchObject({ - outDir: 'build', - bundles: ['test0', 'test1'] - }) - - expect(htmlModule.buildHtml) - .toHaveBeenCalledTimes(1); - - expect(htmlModule.buildHtml) - .toReturnWith(Promise.resolve({ - elapsed: 0, - result: { - severity: 'warn' - } - })) - }); - - it('should exit with code 1 if tsc returns with an error', async () => { - try { - await runCommand('--tsc'); - } catch (error) { - expect(error) - .toEqual(new Error('process.exit called with 1')) - } - - expect(jsonModule.buildJsons) - .toHaveBeenCalledTimes(0); - - expect(process.exit) - .toHaveBeenCalledWith(1); - }); - - it("should exit with code 1 when there are errors", async () => { - mockBuildJson.mockResolvedValueOnce([['json', 'test0', { severity: 'error' }]]) - - try { - await runCommand(); - } catch (error) { - expect(error) - .toEqual(new Error('process.exit called with 1')) - } - - expect(jsonModule.buildJsons) - .toHaveBeenCalledTimes(1); - - expect(process.exit) - .toHaveBeenCalledWith(1); - }) -}); +import type { MockedFunction } from 'jest-mock'; +import { getBuildDocsCommand } from '..'; +import { initTypedoc } from '../docUtils'; +import * as jsonModule from '../json'; +import * as htmlModule from '../html'; +import fs from 'fs/promises'; + +jest.mock('../../prebuild/tsc'); + +jest.spyOn(jsonModule, 'buildJsons'); +jest.spyOn(htmlModule, 'buildHtml'); + +const asMock = any>(func: T) => func as MockedFunction; +const mockBuildJson = asMock(jsonModule.buildJsons); + +const runCommand = (...args: string[]) => getBuildDocsCommand().parseAsync(args, { from: 'user' }); +describe('test the docs command', () => { + it('should create the output directories and call all doc build functions', async () => { + await runCommand(); + + expect(fs.mkdir) + .toBeCalledWith('build', { recursive: true }) + + expect(jsonModule.buildJsons) + .toHaveBeenCalledTimes(1); + + expect(htmlModule.buildHtml) + .toHaveBeenCalledTimes(1); + + expect(initTypedoc) + .toHaveBeenCalledTimes(1); + }); + + it('should only build the documentation for specified modules', async () => { + await runCommand('test0', 'test1') + + expect(jsonModule.buildJsons) + .toHaveBeenCalledTimes(1); + + const buildJsonCall = mockBuildJson.mock.calls[0]; + expect(buildJsonCall[1]) + .toMatchObject({ + outDir: 'build', + bundles: ['test0', 'test1'] + }) + + expect(htmlModule.buildHtml) + .toHaveBeenCalledTimes(1); + + expect(htmlModule.buildHtml) + .toReturnWith(Promise.resolve({ + elapsed: 0, + result: { + severity: 'warn' + } + })) + }); + + it('should exit with code 1 if tsc returns with an error', async () => { + try { + await runCommand('--tsc'); + } catch (error) { + expect(error) + .toEqual(new Error('process.exit called with 1')) + } + + expect(jsonModule.buildJsons) + .toHaveBeenCalledTimes(0); + + expect(process.exit) + .toHaveBeenCalledWith(1); + }); + + it("should exit with code 1 when there are errors", async () => { + mockBuildJson.mockResolvedValueOnce([['json', 'test0', { severity: 'error' }]]) + + try { + await runCommand(); + } catch (error) { + expect(error) + .toEqual(new Error('process.exit called with 1')) + } + + expect(jsonModule.buildJsons) + .toHaveBeenCalledTimes(1); + + expect(process.exit) + .toHaveBeenCalledWith(1); + }) +}); diff --git a/scripts/src/build/docs/__tests__/json.test.ts b/scripts/src/build/docs/__tests__/json.test.ts index 9e983c2fb..05d231c53 100644 --- a/scripts/src/build/docs/__tests__/json.test.ts +++ b/scripts/src/build/docs/__tests__/json.test.ts @@ -1,246 +1,246 @@ -import type { MockedFunction } from "jest-mock"; -import getJsonCommand, * as jsonModule from '../json'; -import * as tscModule from '../../prebuild/tsc'; -import fs from 'fs/promises'; -import type { DeclarationReflection } from "typedoc"; - -jest.spyOn(jsonModule, 'buildJsons'); -jest.spyOn(tscModule, 'runTsc') - .mockResolvedValue({ - elapsed: 0, - result: { - severity: 'error', - results: [], - } - }) - -const mockBuildJson = jsonModule.buildJsons as MockedFunction; -const runCommand = (...args: string[]) => getJsonCommand().parseAsync(args, { from: 'user' }); - -describe('test json command', () => { - test('normal function', async () => { - await runCommand(); - - expect(fs.mkdir) - .toBeCalledWith('build', { recursive: true }) - - expect(jsonModule.buildJsons) - .toHaveBeenCalledTimes(1); - }) - - it('should only build the jsons for specified modules', async () => { - await runCommand('test0', 'test1') - - expect(jsonModule.buildJsons) - .toHaveBeenCalledTimes(1); - - const buildJsonCall = mockBuildJson.mock.calls[0]; - expect(buildJsonCall[1]) - .toMatchObject({ - outDir: 'build', - bundles: ['test0', 'test1'] - }) - }); - - it('should exit with code 1 if tsc returns with an error', async () => { - try { - await runCommand('--tsc'); - } catch (error) { - expect(error) - .toEqual(new Error('process.exit called with 1')); - } - - expect(jsonModule.buildJsons) - .toHaveBeenCalledTimes(0); - - expect(process.exit) - .toHaveBeenCalledWith(1); - }); - - it('should exit with code 1 if buildJsons returns with an error', async () => { - mockBuildJson.mockResolvedValueOnce([['json', 'test0', { severity: 'error' }]]) - try { - await runCommand(); - } catch (error) { - expect(error) - .toEqual(new Error('process.exit called with 1')); - } - - expect(jsonModule.buildJsons) - .toHaveBeenCalledTimes(1); - - expect(process.exit) - .toHaveBeenCalledWith(1); - }) -}); - -describe('test parsers', () => { - const { Variable: variableParser, Function: functionParser } = jsonModule.parsers; - - describe('test function parser', () => { - test('normal function with parameters', () => { - const element = { - name: 'foo', - signatures: [{ - parameters: [{ - name: 'x', - type: { - name: 'number', - }, - }, { - name: 'y', - type: { - name: 'string', - }, - }], - type: { - name: 'string', - }, - comment: { - summary: [{ - text: 'Test' - }, { - text: ' Description' - }] - } - }] - } as DeclarationReflection; - - const { header, desc } = functionParser(element); - - expect(header) - .toEqual(`${element.name}(x: number, y: string) → {string}`); - - expect(desc) - .toEqual('

Test Description

'); - }); - - test('normal function without parameters', () => { - const element = { - name: 'foo', - signatures: [{ - type: { - name: 'string', - }, - comment: { - summary: [{ - text: 'Test' - }, { - text: ' Description' - }] - } - }] - } as DeclarationReflection; - - const { header, desc } = functionParser(element); - - expect(header) - .toEqual(`${element.name}() → {string}`); - - expect(desc) - .toEqual('

Test Description

'); - }); - - test('normal function without return type', () => { - const element = { - name: 'foo', - signatures: [{ - comment: { - summary: [{ - text: 'Test' - }, { - text: ' Description' - }] - } - }] - } as DeclarationReflection; - - const { header, desc } = functionParser(element); - - expect(header) - .toEqual(`${element.name}() → {void}`); - - expect(desc) - .toEqual('

Test Description

'); - }); - - it('should provide \'No description available\' when description is missing', () => { - const element = { - name: 'foo', - signatures: [{}] - } as DeclarationReflection; - - const { header, desc } = functionParser(element); - - expect(header) - .toEqual(`${element.name}() → {void}`); - - expect(desc) - .toEqual('

No description available

'); - }); - }); - - describe('test variable parser', () => { - test('normal function', () => { - const element = { - name: 'test_variable', - type: { - name: 'number' - }, - comment: { - summary: [{ - text: 'Test' - }, { - text: ' Description' - }] - } - } as DeclarationReflection; - - const { header, desc } = variableParser(element); - - expect(header) - .toEqual(`${element.name}: number`); - - expect(desc) - .toEqual('

Test Description

'); - }) - - it('should provide \'No description available\' when description is missing', () => { - const element = { - name: 'test_variable', - type: { - name: 'number' - }, - } as DeclarationReflection; - - const { header, desc } = variableParser(element); - - expect(header) - .toEqual(`${element.name}: number`); - - expect(desc) - .toEqual('

No description available

'); - }) - - it("should provide 'unknown' if type information is unavailable", () => { - const element = { - name: 'test_variable', - comment: { - summary: [{ - text: 'Test' - }, { - text: 'Description' - }] - } - } as DeclarationReflection; - - const { header, desc } = variableParser(element); - - expect(header) - .toEqual(`${element.name}: unknown`); - - expect(desc) - .toEqual('

TestDescription

'); - }); - }); -}); +import type { MockedFunction } from "jest-mock"; +import getJsonCommand, * as jsonModule from '../json'; +import * as tscModule from '../../prebuild/tsc'; +import fs from 'fs/promises'; +import type { DeclarationReflection } from "typedoc"; + +jest.spyOn(jsonModule, 'buildJsons'); +jest.spyOn(tscModule, 'runTsc') + .mockResolvedValue({ + elapsed: 0, + result: { + severity: 'error', + results: [], + } + }) + +const mockBuildJson = jsonModule.buildJsons as MockedFunction; +const runCommand = (...args: string[]) => getJsonCommand().parseAsync(args, { from: 'user' }); + +describe('test json command', () => { + test('normal function', async () => { + await runCommand(); + + expect(fs.mkdir) + .toBeCalledWith('build', { recursive: true }) + + expect(jsonModule.buildJsons) + .toHaveBeenCalledTimes(1); + }) + + it('should only build the jsons for specified modules', async () => { + await runCommand('test0', 'test1') + + expect(jsonModule.buildJsons) + .toHaveBeenCalledTimes(1); + + const buildJsonCall = mockBuildJson.mock.calls[0]; + expect(buildJsonCall[1]) + .toMatchObject({ + outDir: 'build', + bundles: ['test0', 'test1'] + }) + }); + + it('should exit with code 1 if tsc returns with an error', async () => { + try { + await runCommand('--tsc'); + } catch (error) { + expect(error) + .toEqual(new Error('process.exit called with 1')); + } + + expect(jsonModule.buildJsons) + .toHaveBeenCalledTimes(0); + + expect(process.exit) + .toHaveBeenCalledWith(1); + }); + + it('should exit with code 1 if buildJsons returns with an error', async () => { + mockBuildJson.mockResolvedValueOnce([['json', 'test0', { severity: 'error' }]]) + try { + await runCommand(); + } catch (error) { + expect(error) + .toEqual(new Error('process.exit called with 1')); + } + + expect(jsonModule.buildJsons) + .toHaveBeenCalledTimes(1); + + expect(process.exit) + .toHaveBeenCalledWith(1); + }) +}); + +describe('test parsers', () => { + const { Variable: variableParser, Function: functionParser } = jsonModule.parsers; + + describe('test function parser', () => { + test('normal function with parameters', () => { + const element = { + name: 'foo', + signatures: [{ + parameters: [{ + name: 'x', + type: { + name: 'number', + }, + }, { + name: 'y', + type: { + name: 'string', + }, + }], + type: { + name: 'string', + }, + comment: { + summary: [{ + text: 'Test' + }, { + text: ' Description' + }] + } + }] + } as DeclarationReflection; + + const { header, desc } = functionParser(element); + + expect(header) + .toEqual(`${element.name}(x: number, y: string) → {string}`); + + expect(desc) + .toEqual('

Test Description

'); + }); + + test('normal function without parameters', () => { + const element = { + name: 'foo', + signatures: [{ + type: { + name: 'string', + }, + comment: { + summary: [{ + text: 'Test' + }, { + text: ' Description' + }] + } + }] + } as DeclarationReflection; + + const { header, desc } = functionParser(element); + + expect(header) + .toEqual(`${element.name}() → {string}`); + + expect(desc) + .toEqual('

Test Description

'); + }); + + test('normal function without return type', () => { + const element = { + name: 'foo', + signatures: [{ + comment: { + summary: [{ + text: 'Test' + }, { + text: ' Description' + }] + } + }] + } as DeclarationReflection; + + const { header, desc } = functionParser(element); + + expect(header) + .toEqual(`${element.name}() → {void}`); + + expect(desc) + .toEqual('

Test Description

'); + }); + + it('should provide \'No description available\' when description is missing', () => { + const element = { + name: 'foo', + signatures: [{}] + } as DeclarationReflection; + + const { header, desc } = functionParser(element); + + expect(header) + .toEqual(`${element.name}() → {void}`); + + expect(desc) + .toEqual('

No description available

'); + }); + }); + + describe('test variable parser', () => { + test('normal function', () => { + const element = { + name: 'test_variable', + type: { + name: 'number' + }, + comment: { + summary: [{ + text: 'Test' + }, { + text: ' Description' + }] + } + } as DeclarationReflection; + + const { header, desc } = variableParser(element); + + expect(header) + .toEqual(`${element.name}: number`); + + expect(desc) + .toEqual('

Test Description

'); + }) + + it('should provide \'No description available\' when description is missing', () => { + const element = { + name: 'test_variable', + type: { + name: 'number' + }, + } as DeclarationReflection; + + const { header, desc } = variableParser(element); + + expect(header) + .toEqual(`${element.name}: number`); + + expect(desc) + .toEqual('

No description available

'); + }) + + it("should provide 'unknown' if type information is unavailable", () => { + const element = { + name: 'test_variable', + comment: { + summary: [{ + text: 'Test' + }, { + text: 'Description' + }] + } + } as DeclarationReflection; + + const { header, desc } = variableParser(element); + + expect(header) + .toEqual(`${element.name}: unknown`); + + expect(desc) + .toEqual('

TestDescription

'); + }); + }); +}); diff --git a/scripts/src/build/docs/docUtils.ts b/scripts/src/build/docs/docUtils.ts index 3880ab46b..b2fde0165 100644 --- a/scripts/src/build/docs/docUtils.ts +++ b/scripts/src/build/docs/docUtils.ts @@ -1,56 +1,56 @@ -import chalk from 'chalk'; -import { type ProjectReflection, Application, TSConfigReader } from 'typedoc'; - -import { wrapWithTimer } from '../../scriptUtils.js'; -import { bundleNameExpander, divideAndRound } from '../buildUtils.js'; - -type TypedocOpts = { - srcDir: string; - bundles: string[]; - verbose: boolean; -}; - -/** - * Offload running typedoc into async code to increase parallelism - * - * @param watch Pass true to initialize typedoc in watch mode. `app.convert()` will not be called. - */ -export const initTypedoc = wrapWithTimer( - ({ - srcDir, - bundles, - verbose, - }: TypedocOpts, - watch?: boolean) => new Promise<[Application, ProjectReflection]>((resolve, reject) => { - try { - const app = new Application(); - app.options.addReader(new TSConfigReader()); - - app.bootstrap({ - categorizeByGroup: true, - entryPoints: bundles.map(bundleNameExpander(srcDir)), - excludeInternal: true, - logger: watch ? 'none' : undefined, - logLevel: verbose ? 'Info' : 'Error', - name: 'Source Academy Modules', - readme: `${srcDir}/README.md`, - tsconfig: `${srcDir}/tsconfig.json`, - skipErrorChecking: true, - watch, - }); - - if (watch) resolve([app, null]); - - const project = app.convert(); - if (!project) { - reject(new Error('Failed to initialize typedoc - Make sure to check that the source files have no compilation errors!')); - } else resolve([app, project]); - } catch (error) { - reject(error); - } - }), -); - -export const logTypedocTime = (elapsed: number) => console.log( - `${chalk.cyanBright('Took')} ${divideAndRound(elapsed, 1000)}s ${chalk.cyanBright('to initialize typedoc')}`, -); +import chalk from 'chalk'; +import { type ProjectReflection, Application, TSConfigReader } from 'typedoc'; + +import { wrapWithTimer } from '../../scriptUtils.js'; +import { bundleNameExpander, divideAndRound } from '../buildUtils.js'; + +type TypedocOpts = { + srcDir: string; + bundles: string[]; + verbose: boolean; +}; + +/** + * Offload running typedoc into async code to increase parallelism + * + * @param watch Pass true to initialize typedoc in watch mode. `app.convert()` will not be called. + */ +export const initTypedoc = wrapWithTimer( + ({ + srcDir, + bundles, + verbose, + }: TypedocOpts, + watch?: boolean) => new Promise<[Application, ProjectReflection]>((resolve, reject) => { + try { + const app = new Application(); + app.options.addReader(new TSConfigReader()); + + app.bootstrap({ + categorizeByGroup: true, + entryPoints: bundles.map(bundleNameExpander(srcDir)), + excludeInternal: true, + logger: watch ? 'none' : undefined, + logLevel: verbose ? 'Info' : 'Error', + name: 'Source Academy Modules', + readme: `${srcDir}/README.md`, + tsconfig: `${srcDir}/tsconfig.json`, + skipErrorChecking: true, + watch, + }); + + if (watch) resolve([app, null]); + + const project = app.convert(); + if (!project) { + reject(new Error('Failed to initialize typedoc - Make sure to check that the source files have no compilation errors!')); + } else resolve([app, project]); + } catch (error) { + reject(error); + } + }), +); + +export const logTypedocTime = (elapsed: number) => console.log( + `${chalk.cyanBright('Took')} ${divideAndRound(elapsed, 1000)}s ${chalk.cyanBright('to initialize typedoc')}`, +); diff --git a/scripts/src/build/docs/html.ts b/scripts/src/build/docs/html.ts index 735ae76c7..5ae55a9ab 100644 --- a/scripts/src/build/docs/html.ts +++ b/scripts/src/build/docs/html.ts @@ -1,101 +1,101 @@ -import chalk from 'chalk'; -import { Command } from 'commander'; -import type { Application, ProjectReflection } from 'typedoc'; - -import { wrapWithTimer } from '../../scriptUtils.js'; -import { divideAndRound, exitOnError, retrieveBundles } from '../buildUtils.js'; -import { logTscResults, runTsc } from '../prebuild/tsc.js'; -import type { BuildCommandInputs, OperationResult } from '../types'; - -import { initTypedoc, logTypedocTime } from './docUtils.js'; - -type HTMLOptions = { - outDir: string; - modulesSpecified: boolean; -}; - -/** - * Build HTML documentation - */ -export const buildHtml = wrapWithTimer(async (app: Application, - project: ProjectReflection, { - outDir, - modulesSpecified, - }: HTMLOptions): Promise => { - if (modulesSpecified) { - return { - severity: 'warn', - }; - } - - try { - await app.generateDocs(project, `${outDir}/documentation`); - return { - severity: 'success', - }; - } catch (error) { - return { - severity: 'error', - error, - }; - } -}); - -/** - * Log output from `buildHtml` - * @see {buildHtml} - */ -export const logHtmlResult = (htmlResult: Awaited> | null) => { - if (!htmlResult) return; - - const { elapsed, result: { severity, error } } = htmlResult; - if (severity === 'success') { - const timeStr = divideAndRound(elapsed, 1000); - console.log(`${chalk.cyanBright('HTML documentation built')} ${chalk.greenBright('successfully')} in ${timeStr}s\n`); - } else if (severity === 'warn') { - console.log(chalk.yellowBright('Modules were manually specified, not building HTML documentation\n')); - } else { - console.log(`${chalk.cyanBright('HTML documentation')} ${chalk.redBright('failed')}: ${error}\n`); - } -}; - -type HTMLCommandInputs = Omit; - -/** - * Get CLI command to only build HTML documentation - */ -const getBuildHtmlCommand = () => new Command('html') - .option('--outDir ', 'Output directory', 'build') - .option('--srcDir ', 'Source directory for files', 'src') - .option('--manifest ', 'Manifest file', 'modules.json') - .option('-v, --verbose', 'Display more information about the build results', false) - .option('--tsc', 'Run tsc before building') - .description('Build only HTML documentation') - .action(async (opts: HTMLCommandInputs) => { - const bundles = await retrieveBundles(opts.manifest, null); - - if (opts.tsc) { - const tscResult = await runTsc(opts.srcDir, { - bundles, - tabs: [], - }); - logTscResults(tscResult); - if (tscResult.result.severity === 'error') process.exit(1); - } - - const { elapsed: typedoctime, result: [app, project] } = await initTypedoc({ - bundles, - srcDir: opts.srcDir, - verbose: opts.verbose, - }); - logTypedocTime(typedoctime); - - const htmlResult = await buildHtml(app, project, { - outDir: opts.outDir, - modulesSpecified: false, - }); - logHtmlResult(htmlResult); - exitOnError([], htmlResult.result); - }); - -export default getBuildHtmlCommand; +import chalk from 'chalk'; +import { Command } from 'commander'; +import type { Application, ProjectReflection } from 'typedoc'; + +import { wrapWithTimer } from '../../scriptUtils.js'; +import { divideAndRound, exitOnError, retrieveBundles } from '../buildUtils.js'; +import { logTscResults, runTsc } from '../prebuild/tsc.js'; +import type { BuildCommandInputs, OperationResult } from '../types'; + +import { initTypedoc, logTypedocTime } from './docUtils.js'; + +type HTMLOptions = { + outDir: string; + modulesSpecified: boolean; +}; + +/** + * Build HTML documentation + */ +export const buildHtml = wrapWithTimer(async (app: Application, + project: ProjectReflection, { + outDir, + modulesSpecified, + }: HTMLOptions): Promise => { + if (modulesSpecified) { + return { + severity: 'warn', + }; + } + + try { + await app.generateDocs(project, `${outDir}/documentation`); + return { + severity: 'success', + }; + } catch (error) { + return { + severity: 'error', + error, + }; + } +}); + +/** + * Log output from `buildHtml` + * @see {buildHtml} + */ +export const logHtmlResult = (htmlResult: Awaited> | null) => { + if (!htmlResult) return; + + const { elapsed, result: { severity, error } } = htmlResult; + if (severity === 'success') { + const timeStr = divideAndRound(elapsed, 1000); + console.log(`${chalk.cyanBright('HTML documentation built')} ${chalk.greenBright('successfully')} in ${timeStr}s\n`); + } else if (severity === 'warn') { + console.log(chalk.yellowBright('Modules were manually specified, not building HTML documentation\n')); + } else { + console.log(`${chalk.cyanBright('HTML documentation')} ${chalk.redBright('failed')}: ${error}\n`); + } +}; + +type HTMLCommandInputs = Omit; + +/** + * Get CLI command to only build HTML documentation + */ +const getBuildHtmlCommand = () => new Command('html') + .option('--outDir ', 'Output directory', 'build') + .option('--srcDir ', 'Source directory for files', 'src') + .option('--manifest ', 'Manifest file', 'modules.json') + .option('-v, --verbose', 'Display more information about the build results', false) + .option('--tsc', 'Run tsc before building') + .description('Build only HTML documentation') + .action(async (opts: HTMLCommandInputs) => { + const bundles = await retrieveBundles(opts.manifest, null); + + if (opts.tsc) { + const tscResult = await runTsc(opts.srcDir, { + bundles, + tabs: [], + }); + logTscResults(tscResult); + if (tscResult.result.severity === 'error') process.exit(1); + } + + const { elapsed: typedoctime, result: [app, project] } = await initTypedoc({ + bundles, + srcDir: opts.srcDir, + verbose: opts.verbose, + }); + logTypedocTime(typedoctime); + + const htmlResult = await buildHtml(app, project, { + outDir: opts.outDir, + modulesSpecified: false, + }); + logHtmlResult(htmlResult); + exitOnError([], htmlResult.result); + }); + +export default getBuildHtmlCommand; diff --git a/scripts/src/build/docs/index.ts b/scripts/src/build/docs/index.ts index 2797e39b4..ad790be47 100644 --- a/scripts/src/build/docs/index.ts +++ b/scripts/src/build/docs/index.ts @@ -1,62 +1,62 @@ -import chalk from 'chalk'; - -import { printList } from '../../scriptUtils.js'; -import { createBuildCommand, createOutDir, exitOnError, logResult, retrieveBundles } from '../buildUtils.js'; -import { logTscResults, runTsc } from '../prebuild/tsc.js'; -import type { BuildCommandInputs } from '../types.js'; - -import { initTypedoc, logTypedocTime } from './docUtils.js'; -import { buildHtml, logHtmlResult } from './html.js'; -import { buildJsons } from './json.js'; - -export const getBuildDocsCommand = () => createBuildCommand('docs', true) - .argument('[modules...]', 'Manually specify which modules to build documentation', null) - .action(async (modules: string[] | null, { manifest, srcDir, outDir, verbose, tsc }: Omit) => { - const [bundles] = await Promise.all([ - retrieveBundles(manifest, modules), - createOutDir(outDir), - ]); - - if (bundles.length === 0) return; - - if (tsc) { - const tscResult = await runTsc(srcDir, { - bundles, - tabs: [], - }); - logTscResults(tscResult); - if (tscResult.result.severity === 'error') process.exit(1); - } - - printList(`${chalk.cyanBright('Building HTML documentation and jsons for the following bundles:')}\n`, bundles); - - const { elapsed, result: [app, project] } = await initTypedoc({ - bundles, - srcDir, - verbose, - }); - const [jsonResults, htmlResult] = await Promise.all([ - buildJsons(project, { - outDir, - bundles, - }), - buildHtml(app, project, { - outDir, - modulesSpecified: modules !== null, - }), - // app.generateJson(project, `${buildOpts.outDir}/docs.json`), - ]); - - logTypedocTime(elapsed); - if (!jsonResults && !htmlResult) return; - - logHtmlResult(htmlResult); - logResult(jsonResults, verbose); - exitOnError(jsonResults, htmlResult.result); - }) - .description('Build only jsons and HTML documentation'); - -export default getBuildDocsCommand; -export { default as getBuildHtmlCommand, logHtmlResult, buildHtml } from './html.js'; -export { default as getBuildJsonCommand, buildJsons } from './json.js'; -export { initTypedoc } from './docUtils.js'; +import chalk from 'chalk'; + +import { printList } from '../../scriptUtils.js'; +import { createBuildCommand, createOutDir, exitOnError, logResult, retrieveBundles } from '../buildUtils.js'; +import { logTscResults, runTsc } from '../prebuild/tsc.js'; +import type { BuildCommandInputs } from '../types.js'; + +import { initTypedoc, logTypedocTime } from './docUtils.js'; +import { buildHtml, logHtmlResult } from './html.js'; +import { buildJsons } from './json.js'; + +export const getBuildDocsCommand = () => createBuildCommand('docs', true) + .argument('[modules...]', 'Manually specify which modules to build documentation', null) + .action(async (modules: string[] | null, { manifest, srcDir, outDir, verbose, tsc }: Omit) => { + const [bundles] = await Promise.all([ + retrieveBundles(manifest, modules), + createOutDir(outDir), + ]); + + if (bundles.length === 0) return; + + if (tsc) { + const tscResult = await runTsc(srcDir, { + bundles, + tabs: [], + }); + logTscResults(tscResult); + if (tscResult.result.severity === 'error') process.exit(1); + } + + printList(`${chalk.cyanBright('Building HTML documentation and jsons for the following bundles:')}\n`, bundles); + + const { elapsed, result: [app, project] } = await initTypedoc({ + bundles, + srcDir, + verbose, + }); + const [jsonResults, htmlResult] = await Promise.all([ + buildJsons(project, { + outDir, + bundles, + }), + buildHtml(app, project, { + outDir, + modulesSpecified: modules !== null, + }), + // app.generateJson(project, `${buildOpts.outDir}/docs.json`), + ]); + + logTypedocTime(elapsed); + if (!jsonResults && !htmlResult) return; + + logHtmlResult(htmlResult); + logResult(jsonResults, verbose); + exitOnError(jsonResults, htmlResult.result); + }) + .description('Build only jsons and HTML documentation'); + +export default getBuildDocsCommand; +export { default as getBuildHtmlCommand, logHtmlResult, buildHtml } from './html.js'; +export { default as getBuildJsonCommand, buildJsons } from './json.js'; +export { initTypedoc } from './docUtils.js'; diff --git a/scripts/src/build/docs/json.ts b/scripts/src/build/docs/json.ts index d82d64cb2..1e3f98b4d 100644 --- a/scripts/src/build/docs/json.ts +++ b/scripts/src/build/docs/json.ts @@ -1,237 +1,237 @@ -import chalk from 'chalk'; -import fs from 'fs/promises'; -import type { - DeclarationReflection, - IntrinsicType, - ProjectReflection, - ReferenceType, - SomeType, -} from 'typedoc'; - -import { printList, wrapWithTimer } from '../../scriptUtils.js'; -import { - createBuildCommand, - createOutDir, - exitOnError, - logResult, - retrieveBundles, -} from '../buildUtils.js'; -import { logTscResults, runTsc } from '../prebuild/tsc.js'; -import type { BuildCommandInputs, BuildResult, Severity, UnreducedResult } from '../types'; - -import { initTypedoc, logTypedocTime } from './docUtils.js'; -import drawdown from './drawdown.js'; - - -const typeToName = (type?: SomeType, alt: string = 'unknown') => (type ? (type as ReferenceType | IntrinsicType).name : alt); - -/** - * Parsers to convert typedoc elements into strings - */ -export const parsers: Record Record<'header' | 'desc', string>> = { - Variable(element) { - let desc: string; - if (!element.comment) desc = 'No description available'; - else { - desc = element.comment.summary.map(({ text }) => text) - .join(''); - } - return { - header: `${element.name}: ${typeToName(element.type)}`, - desc: drawdown(desc), - }; - }, - Function({ name: elementName, signatures: [signature] }) { - // Form the parameter string for the function - let paramStr: string; - if (!signature.parameters) paramStr = '()'; - else { - paramStr = `(${signature.parameters - .map(({ type, name }) => { - const typeStr = typeToName(type); - return `${name}: ${typeStr}`; - }) - .join(', ')})`; - } - const resultStr = typeToName(signature.type, 'void'); - let desc: string; - if (!signature.comment) desc = 'No description available'; - else { - desc = signature.comment.summary.map(({ text }) => text) - .join(''); - } - return { - header: `${elementName}${paramStr} → {${resultStr}}`, - desc: drawdown(desc), - }; - }, -}; - -/** - * Build a single json - */ -const buildJson = wrapWithTimer(async ( - bundle: string, - moduleDocs: DeclarationReflection | undefined, - outDir: string, -): Promise => { - try { - if (!moduleDocs) { - return { - severity: 'error', - error: `Could not find generated docs for ${bundle}`, - }; - } - - const [sevRes, result] = moduleDocs.children.reduce(([{ severity, errors }, decls], decl) => { - try { - const parser = parsers[decl.kindString]; - if (!parser) { - return [{ - severity: 'warn' as Severity, - errors: [...errors, `Symbol '${decl.name}': Could not find parser for type ${decl.kindString}`], - }, decls]; - } - const { header, desc } = parser(decl); - - return [{ - severity, - errors, - }, { - ...decls, - [decl.name]: `

${header}

${desc}
`, - - }]; - } catch (error) { - return [{ - severity: 'warn' as Severity, - errors: [...errors, `Could not parse declaration for ${decl.name}: ${error}`], - }]; - } - }, [ - { - severity: 'success', - errors: [], - }, - {}, - ] as [ - { - severity: Severity, - errors: any[] - }, - Record, - // Record, - ]); - - let size: number | undefined; - if (result) { - const outFile = `${outDir}/jsons/${bundle}.json`; - await fs.writeFile(outFile, JSON.stringify(result, null, 2)); - ({ size } = await fs.stat(outFile)); - } else { - if (sevRes.severity !== 'error') sevRes.severity = 'warn'; - sevRes.errors.push(`No json generated for ${bundle}`); - } - - const errorStr = sevRes.errors.length > 1 ? `${sevRes.errors[0]} +${sevRes.errors.length - 1}` : sevRes.errors[0]; - - return { - severity: sevRes.severity, - fileSize: size, - error: errorStr, - }; - } catch (error) { - return { - severity: 'error', - error, - }; - } -}); - -type BuildJsonOpts = { - bundles: string[]; - outDir: string; -}; - -/** - * Build all specified jsons - */ -export const buildJsons = async (project: ProjectReflection, { outDir, bundles }: BuildJsonOpts): Promise => { - await fs.mkdir(`${outDir}/jsons`, { recursive: true }); - if (bundles.length === 1) { - // If only 1 bundle is provided, typedoc's output is different in structure - // So this new parser is used instead. - const [bundle] = bundles; - const { elapsed, result } = await buildJson(bundle, project as any, outDir); - return [['json', bundle, { - ...result, - elapsed, - }] as UnreducedResult]; - } - - return Promise.all( - bundles.map(async (bundle) => { - const { elapsed, result } = await buildJson(bundle, project.getChildByName(bundle) as DeclarationReflection, outDir); - return ['json', bundle, { - ...result, - elapsed, - }] as UnreducedResult; - }), - ); -}; - -/** - * Get console command for building jsons - * - */ -const getJsonCommand = () => createBuildCommand('jsons', false) - .option('--tsc', 'Run tsc before building') - .argument('[modules...]', 'Manually specify which modules to build jsons for', null) - .action(async (modules: string[] | null, { manifest, srcDir, outDir, verbose, tsc }: Omit) => { - const [bundles] = await Promise.all([ - retrieveBundles(manifest, modules), - createOutDir(outDir), - ]); - - if (bundles.length === 0) return; - - if (tsc) { - const tscResult = await runTsc(srcDir, { - bundles, - tabs: [], - }); - logTscResults(tscResult); - if (tscResult.result.severity === 'error') process.exit(1); - } - - const { elapsed: typedocTime, result: [, project] } = await initTypedoc({ - bundles, - srcDir, - verbose, - }); - - - logTypedocTime(typedocTime); - printList(chalk.magentaBright('Building jsons for the following modules:\n'), bundles); - const jsonResults = await buildJsons(project, { - bundles, - outDir, - }); - logResult(jsonResults, verbose); - exitOnError(jsonResults); - }) - .description('Build only jsons'); - -export default getJsonCommand; +import chalk from 'chalk'; +import fs from 'fs/promises'; +import type { + DeclarationReflection, + IntrinsicType, + ProjectReflection, + ReferenceType, + SomeType, +} from 'typedoc'; + +import { printList, wrapWithTimer } from '../../scriptUtils.js'; +import { + createBuildCommand, + createOutDir, + exitOnError, + logResult, + retrieveBundles, +} from '../buildUtils.js'; +import { logTscResults, runTsc } from '../prebuild/tsc.js'; +import type { BuildCommandInputs, BuildResult, Severity, UnreducedResult } from '../types'; + +import { initTypedoc, logTypedocTime } from './docUtils.js'; +import drawdown from './drawdown.js'; + + +const typeToName = (type?: SomeType, alt: string = 'unknown') => (type ? (type as ReferenceType | IntrinsicType).name : alt); + +/** + * Parsers to convert typedoc elements into strings + */ +export const parsers: Record Record<'header' | 'desc', string>> = { + Variable(element) { + let desc: string; + if (!element.comment) desc = 'No description available'; + else { + desc = element.comment.summary.map(({ text }) => text) + .join(''); + } + return { + header: `${element.name}: ${typeToName(element.type)}`, + desc: drawdown(desc), + }; + }, + Function({ name: elementName, signatures: [signature] }) { + // Form the parameter string for the function + let paramStr: string; + if (!signature.parameters) paramStr = '()'; + else { + paramStr = `(${signature.parameters + .map(({ type, name }) => { + const typeStr = typeToName(type); + return `${name}: ${typeStr}`; + }) + .join(', ')})`; + } + const resultStr = typeToName(signature.type, 'void'); + let desc: string; + if (!signature.comment) desc = 'No description available'; + else { + desc = signature.comment.summary.map(({ text }) => text) + .join(''); + } + return { + header: `${elementName}${paramStr} → {${resultStr}}`, + desc: drawdown(desc), + }; + }, +}; + +/** + * Build a single json + */ +const buildJson = wrapWithTimer(async ( + bundle: string, + moduleDocs: DeclarationReflection | undefined, + outDir: string, +): Promise => { + try { + if (!moduleDocs) { + return { + severity: 'error', + error: `Could not find generated docs for ${bundle}`, + }; + } + + const [sevRes, result] = moduleDocs.children.reduce(([{ severity, errors }, decls], decl) => { + try { + const parser = parsers[decl.kindString]; + if (!parser) { + return [{ + severity: 'warn' as Severity, + errors: [...errors, `Symbol '${decl.name}': Could not find parser for type ${decl.kindString}`], + }, decls]; + } + const { header, desc } = parser(decl); + + return [{ + severity, + errors, + }, { + ...decls, + [decl.name]: `

${header}

${desc}
`, + + }]; + } catch (error) { + return [{ + severity: 'warn' as Severity, + errors: [...errors, `Could not parse declaration for ${decl.name}: ${error}`], + }]; + } + }, [ + { + severity: 'success', + errors: [], + }, + {}, + ] as [ + { + severity: Severity, + errors: any[] + }, + Record, + // Record, + ]); + + let size: number | undefined; + if (result) { + const outFile = `${outDir}/jsons/${bundle}.json`; + await fs.writeFile(outFile, JSON.stringify(result, null, 2)); + ({ size } = await fs.stat(outFile)); + } else { + if (sevRes.severity !== 'error') sevRes.severity = 'warn'; + sevRes.errors.push(`No json generated for ${bundle}`); + } + + const errorStr = sevRes.errors.length > 1 ? `${sevRes.errors[0]} +${sevRes.errors.length - 1}` : sevRes.errors[0]; + + return { + severity: sevRes.severity, + fileSize: size, + error: errorStr, + }; + } catch (error) { + return { + severity: 'error', + error, + }; + } +}); + +type BuildJsonOpts = { + bundles: string[]; + outDir: string; +}; + +/** + * Build all specified jsons + */ +export const buildJsons = async (project: ProjectReflection, { outDir, bundles }: BuildJsonOpts): Promise => { + await fs.mkdir(`${outDir}/jsons`, { recursive: true }); + if (bundles.length === 1) { + // If only 1 bundle is provided, typedoc's output is different in structure + // So this new parser is used instead. + const [bundle] = bundles; + const { elapsed, result } = await buildJson(bundle, project as any, outDir); + return [['json', bundle, { + ...result, + elapsed, + }] as UnreducedResult]; + } + + return Promise.all( + bundles.map(async (bundle) => { + const { elapsed, result } = await buildJson(bundle, project.getChildByName(bundle) as DeclarationReflection, outDir); + return ['json', bundle, { + ...result, + elapsed, + }] as UnreducedResult; + }), + ); +}; + +/** + * Get console command for building jsons + * + */ +const getJsonCommand = () => createBuildCommand('jsons', false) + .option('--tsc', 'Run tsc before building') + .argument('[modules...]', 'Manually specify which modules to build jsons for', null) + .action(async (modules: string[] | null, { manifest, srcDir, outDir, verbose, tsc }: Omit) => { + const [bundles] = await Promise.all([ + retrieveBundles(manifest, modules), + createOutDir(outDir), + ]); + + if (bundles.length === 0) return; + + if (tsc) { + const tscResult = await runTsc(srcDir, { + bundles, + tabs: [], + }); + logTscResults(tscResult); + if (tscResult.result.severity === 'error') process.exit(1); + } + + const { elapsed: typedocTime, result: [, project] } = await initTypedoc({ + bundles, + srcDir, + verbose, + }); + + + logTypedocTime(typedocTime); + printList(chalk.magentaBright('Building jsons for the following modules:\n'), bundles); + const jsonResults = await buildJsons(project, { + bundles, + outDir, + }); + logResult(jsonResults, verbose); + exitOnError(jsonResults); + }) + .description('Build only jsons'); + +export default getJsonCommand; diff --git a/scripts/src/build/index.ts b/scripts/src/build/index.ts index 1c3371d99..20c2a0149 100644 --- a/scripts/src/build/index.ts +++ b/scripts/src/build/index.ts @@ -1,80 +1,80 @@ -import chalk from 'chalk'; -import { Command } from 'commander'; - -import { printList } from '../scriptUtils.js'; - -import { logTypedocTime } from './docs/docUtils.js'; -import getBuildDocsCommand, { - buildHtml, - buildJsons, - getBuildHtmlCommand, - getBuildJsonCommand, - initTypedoc, - logHtmlResult, -} from './docs/index.js'; -import getBuildModulesCommand, { - buildModules, - getBuildTabsCommand, -} from './modules/index.js'; -import type { LintCommandInputs } from './prebuild/eslint.js'; -import { prebuild } from './prebuild/index.js'; -import { copyManifest, createBuildCommand, createOutDir, exitOnError, logResult, retrieveBundlesAndTabs } from './buildUtils.js'; -import type { BuildCommandInputs } from './types.js'; - -export const getBuildAllCommand = () => createBuildCommand('all', true) - .argument('[modules...]', 'Manually specify which modules to build', null) - .action(async (modules: string[] | null, opts: BuildCommandInputs & LintCommandInputs) => { - const [assets] = await Promise.all([ - retrieveBundlesAndTabs(opts.manifest, modules, null), - createOutDir(opts.outDir), - ]); - await prebuild(opts, assets); - - printList(`${chalk.cyanBright('Building bundles, tabs, jsons and HTML for the following bundles:')}\n`, assets.bundles); - - const [results, { - typedoctime, - html: htmlResult, - json: jsonResults, - }] = await Promise.all([ - buildModules(opts, assets), - initTypedoc({ - ...opts, - bundles: assets.bundles, - }) - .then(async ({ elapsed, result: [app, project] }) => { - const [json, html] = await Promise.all([ - buildJsons(project, { - outDir: opts.outDir, - bundles: assets.bundles, - }), - buildHtml(app, project, { - outDir: opts.outDir, - modulesSpecified: modules !== null, - }), - ]); - return { - json, - html, - typedoctime: elapsed, - }; - }), - copyManifest(opts), - ]); - - logTypedocTime(typedoctime); - - logResult(results.concat(jsonResults), opts.verbose); - logHtmlResult(htmlResult); - exitOnError(results, ...jsonResults, htmlResult.result); - }) - .description('Build bundles, tabs, jsons and HTML documentation'); - -export default new Command('build') - .description('Run without arguments to build all, or use a specific build subcommand') - .addCommand(getBuildAllCommand(), { isDefault: true }) - .addCommand(getBuildDocsCommand()) - .addCommand(getBuildHtmlCommand()) - .addCommand(getBuildJsonCommand()) - .addCommand(getBuildModulesCommand()) - .addCommand(getBuildTabsCommand()); +import chalk from 'chalk'; +import { Command } from 'commander'; + +import { printList } from '../scriptUtils.js'; + +import { logTypedocTime } from './docs/docUtils.js'; +import getBuildDocsCommand, { + buildHtml, + buildJsons, + getBuildHtmlCommand, + getBuildJsonCommand, + initTypedoc, + logHtmlResult, +} from './docs/index.js'; +import getBuildModulesCommand, { + buildModules, + getBuildTabsCommand, +} from './modules/index.js'; +import type { LintCommandInputs } from './prebuild/eslint.js'; +import { prebuild } from './prebuild/index.js'; +import { copyManifest, createBuildCommand, createOutDir, exitOnError, logResult, retrieveBundlesAndTabs } from './buildUtils.js'; +import type { BuildCommandInputs } from './types.js'; + +export const getBuildAllCommand = () => createBuildCommand('all', true) + .argument('[modules...]', 'Manually specify which modules to build', null) + .action(async (modules: string[] | null, opts: BuildCommandInputs & LintCommandInputs) => { + const [assets] = await Promise.all([ + retrieveBundlesAndTabs(opts.manifest, modules, null), + createOutDir(opts.outDir), + ]); + await prebuild(opts, assets); + + printList(`${chalk.cyanBright('Building bundles, tabs, jsons and HTML for the following bundles:')}\n`, assets.bundles); + + const [results, { + typedoctime, + html: htmlResult, + json: jsonResults, + }] = await Promise.all([ + buildModules(opts, assets), + initTypedoc({ + ...opts, + bundles: assets.bundles, + }) + .then(async ({ elapsed, result: [app, project] }) => { + const [json, html] = await Promise.all([ + buildJsons(project, { + outDir: opts.outDir, + bundles: assets.bundles, + }), + buildHtml(app, project, { + outDir: opts.outDir, + modulesSpecified: modules !== null, + }), + ]); + return { + json, + html, + typedoctime: elapsed, + }; + }), + copyManifest(opts), + ]); + + logTypedocTime(typedoctime); + + logResult(results.concat(jsonResults), opts.verbose); + logHtmlResult(htmlResult); + exitOnError(results, ...jsonResults, htmlResult.result); + }) + .description('Build bundles, tabs, jsons and HTML documentation'); + +export default new Command('build') + .description('Run without arguments to build all, or use a specific build subcommand') + .addCommand(getBuildAllCommand(), { isDefault: true }) + .addCommand(getBuildDocsCommand()) + .addCommand(getBuildHtmlCommand()) + .addCommand(getBuildJsonCommand()) + .addCommand(getBuildModulesCommand()) + .addCommand(getBuildTabsCommand()); diff --git a/scripts/src/build/modules/__tests__/bundle.test.ts b/scripts/src/build/modules/__tests__/bundle.test.ts index 8576ff1eb..e3f0ff3f8 100644 --- a/scripts/src/build/modules/__tests__/bundle.test.ts +++ b/scripts/src/build/modules/__tests__/bundle.test.ts @@ -1,61 +1,61 @@ -import { build as esbuild } from 'esbuild'; -import fs from 'fs/promises'; -import { outputBundle } from '../bundle'; -import { esbuildOptions } from '../moduleUtils'; - -const testBundle = ` - import context from 'js-slang/context'; - - export const foo = () => 'foo'; - export const bar = () => { - context.moduleContexts.test0.state = 'bar'; - }; -` - -test('building a bundle', async () => { - const { outputFiles } = await esbuild({ - ...esbuildOptions, - stdin: { - contents: testBundle, - }, - outdir: '.', - outbase: '.', - external: ['js-slang*'], - }); - - const [{ text: compiledBundle }] = outputFiles!; - - const result = await outputBundle('test0', compiledBundle, 'build'); - expect(result).toMatchObject({ - fileSize: 10, - severity: 'success', - }) - - expect(fs.stat) - .toHaveBeenCalledWith('build/bundles/test0.js') - - expect(fs.writeFile) - .toHaveBeenCalledTimes(1) - - const call = (fs.writeFile as jest.MockedFunction).mock.calls[0]; - - expect(call[0]).toEqual('build/bundles/test0.js') - const bundleText = `(${call[1]})`; - const mockContext = { - moduleContexts: { - test0: { - state: null, - } - } - } - const bundleFuncs = eval(bundleText)(x => ({ - 'js-slang/context': mockContext, - }[x])); - expect(bundleFuncs.foo()).toEqual('foo'); - expect(bundleFuncs.bar()).toEqual(undefined); - expect(mockContext.moduleContexts).toMatchObject({ - test0: { - state: 'bar', - }, - }); -}); +import { build as esbuild } from 'esbuild'; +import fs from 'fs/promises'; +import { outputBundle } from '../bundle'; +import { esbuildOptions } from '../moduleUtils'; + +const testBundle = ` + import context from 'js-slang/context'; + + export const foo = () => 'foo'; + export const bar = () => { + context.moduleContexts.test0.state = 'bar'; + }; +` + +test('building a bundle', async () => { + const { outputFiles } = await esbuild({ + ...esbuildOptions, + stdin: { + contents: testBundle, + }, + outdir: '.', + outbase: '.', + external: ['js-slang*'], + }); + + const [{ text: compiledBundle }] = outputFiles!; + + const result = await outputBundle('test0', compiledBundle, 'build'); + expect(result).toMatchObject({ + fileSize: 10, + severity: 'success', + }) + + expect(fs.stat) + .toHaveBeenCalledWith('build/bundles/test0.js') + + expect(fs.writeFile) + .toHaveBeenCalledTimes(1) + + const call = (fs.writeFile as jest.MockedFunction).mock.calls[0]; + + expect(call[0]).toEqual('build/bundles/test0.js') + const bundleText = `(${call[1]})`; + const mockContext = { + moduleContexts: { + test0: { + state: null, + } + } + } + const bundleFuncs = eval(bundleText)(x => ({ + 'js-slang/context': mockContext, + }[x])); + expect(bundleFuncs.foo()).toEqual('foo'); + expect(bundleFuncs.bar()).toEqual(undefined); + expect(mockContext.moduleContexts).toMatchObject({ + test0: { + state: 'bar', + }, + }); +}); diff --git a/scripts/src/build/modules/__tests__/modules.test.ts b/scripts/src/build/modules/__tests__/modules.test.ts index e97510804..302d0278e 100644 --- a/scripts/src/build/modules/__tests__/modules.test.ts +++ b/scripts/src/build/modules/__tests__/modules.test.ts @@ -1,56 +1,56 @@ -import getBuildModulesCommand, * as modules from '..'; -import fs from 'fs/promises'; -import pathlib from 'path'; - -jest.spyOn(modules, 'buildModules'); - -jest.mock('esbuild', () => ({ - build: jest.fn().mockResolvedValue({ outputFiles: [] }), -})); - -jest.mock('../../prebuild/tsc'); - -const runCommand = (...args: string[]) => getBuildModulesCommand().parseAsync(args, { from: 'user' }); -const buildModulesMock = modules.buildModules as jest.MockedFunction - -describe('test modules command', () => { - it('should create the output directories, and copy the manifest', async () => { - await runCommand(); - - expect(fs.mkdir) - .toBeCalledWith('build', { recursive: true }) - - expect(fs.copyFile) - .toBeCalledWith('modules.json', pathlib.join('build', 'modules.json')); - }) - - it('should only build specific modules and tabs when manually specified', async () => { - await runCommand('test0'); - - expect(modules.buildModules) - .toHaveBeenCalledTimes(1); - - const buildModulesCall = buildModulesMock.mock.calls[0]; - expect(buildModulesCall[1]) - .toMatchObject({ - bundles: ['test0'], - tabs: ['tab0'], - modulesSpecified: true, - }) - }); - - it('should exit with code 1 if tsc returns with an error', async () => { - try { - await runCommand('--tsc'); - } catch (error) { - expect(error) - .toEqual(new Error('process.exit called with 1')); - } - - expect(modules.buildModules) - .toHaveBeenCalledTimes(0); - - expect(process.exit) - .toHaveBeenCalledWith(1); - }); +import getBuildModulesCommand, * as modules from '..'; +import fs from 'fs/promises'; +import pathlib from 'path'; + +jest.spyOn(modules, 'buildModules'); + +jest.mock('esbuild', () => ({ + build: jest.fn().mockResolvedValue({ outputFiles: [] }), +})); + +jest.mock('../../prebuild/tsc'); + +const runCommand = (...args: string[]) => getBuildModulesCommand().parseAsync(args, { from: 'user' }); +const buildModulesMock = modules.buildModules as jest.MockedFunction + +describe('test modules command', () => { + it('should create the output directories, and copy the manifest', async () => { + await runCommand(); + + expect(fs.mkdir) + .toBeCalledWith('build', { recursive: true }) + + expect(fs.copyFile) + .toBeCalledWith('modules.json', pathlib.join('build', 'modules.json')); + }) + + it('should only build specific modules and tabs when manually specified', async () => { + await runCommand('test0'); + + expect(modules.buildModules) + .toHaveBeenCalledTimes(1); + + const buildModulesCall = buildModulesMock.mock.calls[0]; + expect(buildModulesCall[1]) + .toMatchObject({ + bundles: ['test0'], + tabs: ['tab0'], + modulesSpecified: true, + }) + }); + + it('should exit with code 1 if tsc returns with an error', async () => { + try { + await runCommand('--tsc'); + } catch (error) { + expect(error) + .toEqual(new Error('process.exit called with 1')); + } + + expect(modules.buildModules) + .toHaveBeenCalledTimes(0); + + expect(process.exit) + .toHaveBeenCalledWith(1); + }); }) \ No newline at end of file diff --git a/scripts/src/build/modules/__tests__/tab.test.ts b/scripts/src/build/modules/__tests__/tab.test.ts index 44337f696..e097393dd 100644 --- a/scripts/src/build/modules/__tests__/tab.test.ts +++ b/scripts/src/build/modules/__tests__/tab.test.ts @@ -1,34 +1,34 @@ -import getBuildTabsCommand, * as tabModule from '../tab'; -import fs from 'fs/promises'; -import pathlib from 'path'; - -jest.spyOn(tabModule, 'buildTabs'); - -jest.mock('esbuild', () => ({ - build: jest.fn().mockResolvedValue({ outputFiles: [] }), -})); - -const runCommand = (...args: string[]) => getBuildTabsCommand().parseAsync(args, { from: 'user' }); - -describe('test tab command', () => { - it('should create the output directories, and copy the manifest', async () => { - await runCommand(); - - expect(fs.mkdir) - .toBeCalledWith('build', { recursive: true }) - - expect(fs.copyFile) - .toBeCalledWith('modules.json', pathlib.join('build', 'modules.json')); - }) - - it('should only build specific tabs when manually specified', async () => { - await runCommand('tab0'); - - expect(tabModule.buildTabs) - .toHaveBeenCalledTimes(1); - - const buildModulesCall = (tabModule.buildTabs as jest.MockedFunction).mock.calls[0]; - expect(buildModulesCall[0]) - .toEqual(['tab0']); - }); +import getBuildTabsCommand, * as tabModule from '../tab'; +import fs from 'fs/promises'; +import pathlib from 'path'; + +jest.spyOn(tabModule, 'buildTabs'); + +jest.mock('esbuild', () => ({ + build: jest.fn().mockResolvedValue({ outputFiles: [] }), +})); + +const runCommand = (...args: string[]) => getBuildTabsCommand().parseAsync(args, { from: 'user' }); + +describe('test tab command', () => { + it('should create the output directories, and copy the manifest', async () => { + await runCommand(); + + expect(fs.mkdir) + .toBeCalledWith('build', { recursive: true }) + + expect(fs.copyFile) + .toBeCalledWith('modules.json', pathlib.join('build', 'modules.json')); + }) + + it('should only build specific tabs when manually specified', async () => { + await runCommand('tab0'); + + expect(tabModule.buildTabs) + .toHaveBeenCalledTimes(1); + + const buildModulesCall = (tabModule.buildTabs as jest.MockedFunction).mock.calls[0]; + expect(buildModulesCall[0]) + .toEqual(['tab0']); + }); }); \ No newline at end of file diff --git a/scripts/src/build/modules/bundle.ts b/scripts/src/build/modules/bundle.ts index 3c51d2e26..22348d31f 100644 --- a/scripts/src/build/modules/bundle.ts +++ b/scripts/src/build/modules/bundle.ts @@ -1,107 +1,107 @@ -import { parse } from 'acorn'; -import { generate } from 'astring'; -import { - type BuildOptions as ESBuildOptions, - type OutputFile, - build as esbuild, -} from 'esbuild'; -import type { - ArrowFunctionExpression, - BlockStatement, - CallExpression, - ExpressionStatement, - Identifier, - Program, - VariableDeclaration, -} from 'estree'; -import fs from 'fs/promises'; -import pathlib from 'path'; - -import { bundleNameExpander } from '../buildUtils.js'; -import type { BuildOptions, BuildResult, UnreducedResult } from '../types.js'; - -import { esbuildOptions } from './moduleUtils.js'; - -export const outputBundle = async (name: string, bundleText: string, outDir: string): Promise> => { - try { - const parsed = parse(bundleText, { ecmaVersion: 6 }) as unknown as Program; - - // Account for 'use strict'; directives - let declStatement: VariableDeclaration; - if (parsed.body[0].type === 'VariableDeclaration') { - declStatement = parsed.body[0]; - } else { - declStatement = parsed.body[1] as unknown as VariableDeclaration; - } - const varDeclarator = declStatement.declarations[0]; - const callExpression = varDeclarator.init as CallExpression; - const moduleCode = callExpression.callee as ArrowFunctionExpression; - - const output = { - type: 'ArrowFunctionExpression', - body: { - type: 'BlockStatement', - body: moduleCode.body.type === 'BlockStatement' - ? (moduleCode.body as BlockStatement).body - : [{ - type: 'ExpressionStatement', - expression: moduleCode.body, - } as ExpressionStatement], - }, - params: [ - { - type: 'Identifier', - name: 'require', - } as Identifier, - ], - } as ArrowFunctionExpression; - - let newCode = generate(output); - if (newCode.endsWith(';')) newCode = newCode.slice(0, -1); - - const outFile = `${outDir}/bundles/${name}.js`; - await fs.writeFile(outFile, newCode); - const { size } = await fs.stat(outFile); - return { - severity: 'success', - fileSize: size, - }; - } catch (error) { - console.log(error); - return { - severity: 'error', - error, - }; - } -}; - -export const bundleOptions: ESBuildOptions = { - ...esbuildOptions, - external: ['js-slang*'], -}; - -export const buildBundles = async (bundles: string[], { srcDir, outDir }: BuildOptions) => { - const nameExpander = bundleNameExpander(srcDir); - const { outputFiles } = await esbuild({ - ...bundleOptions, - entryPoints: bundles.map(nameExpander), - outbase: outDir, - outdir: outDir, - }); - return outputFiles; -}; - -export const reduceBundleOutputFiles = (outputFiles: OutputFile[], startTime: number, outDir: string) => Promise.all(outputFiles.map(async ({ path, text }) => { - const [rawType, name] = path.split(pathlib.sep) - .slice(-3, -1); - - if (rawType !== 'bundles') { - throw new Error(`Expected only bundles, got ${rawType}`); - } - - const result = await outputBundle(name, text, outDir); - return ['bundle', name, { - elapsed: performance.now() - startTime, - ...result, - }] as UnreducedResult; -})); +import { parse } from 'acorn'; +import { generate } from 'astring'; +import { + type BuildOptions as ESBuildOptions, + type OutputFile, + build as esbuild, +} from 'esbuild'; +import type { + ArrowFunctionExpression, + BlockStatement, + CallExpression, + ExpressionStatement, + Identifier, + Program, + VariableDeclaration, +} from 'estree'; +import fs from 'fs/promises'; +import pathlib from 'path'; + +import { bundleNameExpander } from '../buildUtils.js'; +import type { BuildOptions, BuildResult, UnreducedResult } from '../types.js'; + +import { esbuildOptions } from './moduleUtils.js'; + +export const outputBundle = async (name: string, bundleText: string, outDir: string): Promise> => { + try { + const parsed = parse(bundleText, { ecmaVersion: 6 }) as unknown as Program; + + // Account for 'use strict'; directives + let declStatement: VariableDeclaration; + if (parsed.body[0].type === 'VariableDeclaration') { + declStatement = parsed.body[0]; + } else { + declStatement = parsed.body[1] as unknown as VariableDeclaration; + } + const varDeclarator = declStatement.declarations[0]; + const callExpression = varDeclarator.init as CallExpression; + const moduleCode = callExpression.callee as ArrowFunctionExpression; + + const output = { + type: 'ArrowFunctionExpression', + body: { + type: 'BlockStatement', + body: moduleCode.body.type === 'BlockStatement' + ? (moduleCode.body as BlockStatement).body + : [{ + type: 'ExpressionStatement', + expression: moduleCode.body, + } as ExpressionStatement], + }, + params: [ + { + type: 'Identifier', + name: 'require', + } as Identifier, + ], + } as ArrowFunctionExpression; + + let newCode = generate(output); + if (newCode.endsWith(';')) newCode = newCode.slice(0, -1); + + const outFile = `${outDir}/bundles/${name}.js`; + await fs.writeFile(outFile, newCode); + const { size } = await fs.stat(outFile); + return { + severity: 'success', + fileSize: size, + }; + } catch (error) { + console.log(error); + return { + severity: 'error', + error, + }; + } +}; + +export const bundleOptions: ESBuildOptions = { + ...esbuildOptions, + external: ['js-slang*'], +}; + +export const buildBundles = async (bundles: string[], { srcDir, outDir }: BuildOptions) => { + const nameExpander = bundleNameExpander(srcDir); + const { outputFiles } = await esbuild({ + ...bundleOptions, + entryPoints: bundles.map(nameExpander), + outbase: outDir, + outdir: outDir, + }); + return outputFiles; +}; + +export const reduceBundleOutputFiles = (outputFiles: OutputFile[], startTime: number, outDir: string) => Promise.all(outputFiles.map(async ({ path, text }) => { + const [rawType, name] = path.split(pathlib.sep) + .slice(-3, -1); + + if (rawType !== 'bundles') { + throw new Error(`Expected only bundles, got ${rawType}`); + } + + const result = await outputBundle(name, text, outDir); + return ['bundle', name, { + elapsed: performance.now() - startTime, + ...result, + }] as UnreducedResult; +})); diff --git a/scripts/src/build/modules/index.ts b/scripts/src/build/modules/index.ts index edef979d1..9e95e4064 100644 --- a/scripts/src/build/modules/index.ts +++ b/scripts/src/build/modules/index.ts @@ -1,68 +1,68 @@ -import chalk from 'chalk'; -import { promises as fs } from 'fs'; - -import { printList } from '../../scriptUtils.js'; -import { - copyManifest, - createBuildCommand, - createOutDir, - exitOnError, - logResult, - retrieveBundlesAndTabs, -} from '../buildUtils.js'; -import type { LintCommandInputs } from '../prebuild/eslint.js'; -import { prebuild } from '../prebuild/index.js'; -import type { AssetInfo, BuildCommandInputs, BuildOptions } from '../types'; - -import { buildBundles, reduceBundleOutputFiles } from './bundle.js'; -import { buildTabs, reduceTabOutputFiles } from './tab.js'; - -export const buildModules = async (opts: BuildOptions, { bundles, tabs }: AssetInfo) => { - const startPromises: Promise[] = []; - if (bundles.length > 0) { - startPromises.push(fs.mkdir(`${opts.outDir}/bundles`, { recursive: true })); - } - - if (tabs.length > 0) { - startPromises.push(fs.mkdir(`${opts.outDir}/tabs`, { recursive: true })); - } - - await Promise.all(startPromises); - const startTime = performance.now(); - const [bundleResults, tabResults] = await Promise.all([ - buildBundles(bundles, opts) - .then((outputFiles) => reduceBundleOutputFiles(outputFiles, startTime, opts.outDir)), - buildTabs(tabs, opts) - .then((outputFiles) => reduceTabOutputFiles(outputFiles, startTime, opts.outDir)), - ]); - - return bundleResults.concat(tabResults); -}; - -const getBuildModulesCommand = () => createBuildCommand('modules', true) - .argument('[modules...]', 'Manually specify which modules to build', null) - .description('Build modules and their tabs') - .action(async (modules: string[] | null, { manifest, ...opts }: BuildCommandInputs & LintCommandInputs) => { - const [assets] = await Promise.all([ - retrieveBundlesAndTabs(manifest, modules, []), - createOutDir(opts.outDir), - ]); - - await prebuild(opts, assets); - - printList(`${chalk.magentaBright('Building bundles and tabs for the following bundles:')}\n`, assets.bundles); - - const [results] = await Promise.all([ - buildModules(opts, assets), - copyManifest({ - manifest, - outDir: opts.outDir, - }), - ]); - logResult(results, opts.verbose); - exitOnError(results); - }) - .description('Build only bundles and tabs'); - -export { default as getBuildTabsCommand } from './tab.js'; -export default getBuildModulesCommand; +import chalk from 'chalk'; +import { promises as fs } from 'fs'; + +import { printList } from '../../scriptUtils.js'; +import { + copyManifest, + createBuildCommand, + createOutDir, + exitOnError, + logResult, + retrieveBundlesAndTabs, +} from '../buildUtils.js'; +import type { LintCommandInputs } from '../prebuild/eslint.js'; +import { prebuild } from '../prebuild/index.js'; +import type { AssetInfo, BuildCommandInputs, BuildOptions } from '../types'; + +import { buildBundles, reduceBundleOutputFiles } from './bundle.js'; +import { buildTabs, reduceTabOutputFiles } from './tab.js'; + +export const buildModules = async (opts: BuildOptions, { bundles, tabs }: AssetInfo) => { + const startPromises: Promise[] = []; + if (bundles.length > 0) { + startPromises.push(fs.mkdir(`${opts.outDir}/bundles`, { recursive: true })); + } + + if (tabs.length > 0) { + startPromises.push(fs.mkdir(`${opts.outDir}/tabs`, { recursive: true })); + } + + await Promise.all(startPromises); + const startTime = performance.now(); + const [bundleResults, tabResults] = await Promise.all([ + buildBundles(bundles, opts) + .then((outputFiles) => reduceBundleOutputFiles(outputFiles, startTime, opts.outDir)), + buildTabs(tabs, opts) + .then((outputFiles) => reduceTabOutputFiles(outputFiles, startTime, opts.outDir)), + ]); + + return bundleResults.concat(tabResults); +}; + +const getBuildModulesCommand = () => createBuildCommand('modules', true) + .argument('[modules...]', 'Manually specify which modules to build', null) + .description('Build modules and their tabs') + .action(async (modules: string[] | null, { manifest, ...opts }: BuildCommandInputs & LintCommandInputs) => { + const [assets] = await Promise.all([ + retrieveBundlesAndTabs(manifest, modules, []), + createOutDir(opts.outDir), + ]); + + await prebuild(opts, assets); + + printList(`${chalk.magentaBright('Building bundles and tabs for the following bundles:')}\n`, assets.bundles); + + const [results] = await Promise.all([ + buildModules(opts, assets), + copyManifest({ + manifest, + outDir: opts.outDir, + }), + ]); + logResult(results, opts.verbose); + exitOnError(results); + }) + .description('Build only bundles and tabs'); + +export { default as getBuildTabsCommand } from './tab.js'; +export default getBuildModulesCommand; diff --git a/scripts/src/build/modules/moduleUtils.ts b/scripts/src/build/modules/moduleUtils.ts index ee652dfdc..76dadb504 100644 --- a/scripts/src/build/modules/moduleUtils.ts +++ b/scripts/src/build/modules/moduleUtils.ts @@ -1,155 +1,155 @@ -import type { BuildOptions as ESBuildOptions } from 'esbuild'; -import type { - BinaryExpression, - FunctionDeclaration, - Identifier, - IfStatement, - Literal, - MemberExpression, - NewExpression, - ObjectExpression, - Property, - ReturnStatement, - TemplateLiteral, - ThrowStatement, - VariableDeclaration, -} from 'estree'; - -/** - * Build the AST representation of a `require` function to use with the transpiled IIFEs - */ -export const requireCreator = (createObj: Record) => ({ - type: 'FunctionDeclaration', - id: { - type: 'Identifier', - name: 'require', - } as Identifier, - params: [ - { - type: 'Identifier', - name: 'x', - } as Identifier, - ], - body: { - type: 'BlockStatement', - body: [ - { - type: 'VariableDeclaration', - kind: 'const', - declarations: [ - { - type: 'VariableDeclarator', - id: { - type: 'Identifier', - name: 'result', - } as Identifier, - init: { - type: 'MemberExpression', - computed: true, - property: { - type: 'Identifier', - name: 'x', - } as Identifier, - object: { - type: 'ObjectExpression', - properties: Object.entries(createObj) - .map(([key, value]) => ({ - type: 'Property', - kind: 'init', - key: { - type: 'Literal', - value: key, - } as Literal, - value: { - type: 'Identifier', - name: value, - } as Identifier, - })) as Property[], - } as ObjectExpression, - } as MemberExpression, - }, - ], - } as VariableDeclaration, - { - type: 'IfStatement', - test: { - type: 'BinaryExpression', - left: { - type: 'Identifier', - name: 'result', - } as Identifier, - operator: '===', - right: { - type: 'Identifier', - name: 'undefined', - } as Identifier, - } as BinaryExpression, - consequent: { - type: 'ThrowStatement', - argument: { - type: 'NewExpression', - callee: { - type: 'Identifier', - name: 'Error', - } as Identifier, - arguments: [ - { - type: 'TemplateLiteral', - expressions: [ - { - type: 'Identifier', - name: 'x', - }, - ], - quasis: [ - { - type: 'TemplateElement', - value: { - raw: 'Internal Error: Unknown import "', - }, - tail: false, - }, - { - type: 'TemplateElement', - value: { - raw: '"!', - }, - tail: true, - }, - ], - } as TemplateLiteral, - ], - } as NewExpression, - } as ThrowStatement, - alternate: { - type: 'ReturnStatement', - argument: { - type: 'Identifier', - name: 'result', - } as Identifier, - } as ReturnStatement, - } as IfStatement, - ], - }, -}) as FunctionDeclaration; - -export const esbuildOptions: ESBuildOptions = { - bundle: true, - format: 'iife', - globalName: 'module', - define: { - process: JSON.stringify({ - env: { - NODE_ENV: 'production', - }, - }), - }, - loader: { - '.ts': 'ts', - '.tsx': 'tsx', - }, - // minify: true, - platform: 'browser', - target: 'es6', - write: false, -}; +import type { BuildOptions as ESBuildOptions } from 'esbuild'; +import type { + BinaryExpression, + FunctionDeclaration, + Identifier, + IfStatement, + Literal, + MemberExpression, + NewExpression, + ObjectExpression, + Property, + ReturnStatement, + TemplateLiteral, + ThrowStatement, + VariableDeclaration, +} from 'estree'; + +/** + * Build the AST representation of a `require` function to use with the transpiled IIFEs + */ +export const requireCreator = (createObj: Record) => ({ + type: 'FunctionDeclaration', + id: { + type: 'Identifier', + name: 'require', + } as Identifier, + params: [ + { + type: 'Identifier', + name: 'x', + } as Identifier, + ], + body: { + type: 'BlockStatement', + body: [ + { + type: 'VariableDeclaration', + kind: 'const', + declarations: [ + { + type: 'VariableDeclarator', + id: { + type: 'Identifier', + name: 'result', + } as Identifier, + init: { + type: 'MemberExpression', + computed: true, + property: { + type: 'Identifier', + name: 'x', + } as Identifier, + object: { + type: 'ObjectExpression', + properties: Object.entries(createObj) + .map(([key, value]) => ({ + type: 'Property', + kind: 'init', + key: { + type: 'Literal', + value: key, + } as Literal, + value: { + type: 'Identifier', + name: value, + } as Identifier, + })) as Property[], + } as ObjectExpression, + } as MemberExpression, + }, + ], + } as VariableDeclaration, + { + type: 'IfStatement', + test: { + type: 'BinaryExpression', + left: { + type: 'Identifier', + name: 'result', + } as Identifier, + operator: '===', + right: { + type: 'Identifier', + name: 'undefined', + } as Identifier, + } as BinaryExpression, + consequent: { + type: 'ThrowStatement', + argument: { + type: 'NewExpression', + callee: { + type: 'Identifier', + name: 'Error', + } as Identifier, + arguments: [ + { + type: 'TemplateLiteral', + expressions: [ + { + type: 'Identifier', + name: 'x', + }, + ], + quasis: [ + { + type: 'TemplateElement', + value: { + raw: 'Internal Error: Unknown import "', + }, + tail: false, + }, + { + type: 'TemplateElement', + value: { + raw: '"!', + }, + tail: true, + }, + ], + } as TemplateLiteral, + ], + } as NewExpression, + } as ThrowStatement, + alternate: { + type: 'ReturnStatement', + argument: { + type: 'Identifier', + name: 'result', + } as Identifier, + } as ReturnStatement, + } as IfStatement, + ], + }, +}) as FunctionDeclaration; + +export const esbuildOptions: ESBuildOptions = { + bundle: true, + format: 'iife', + globalName: 'module', + define: { + process: JSON.stringify({ + env: { + NODE_ENV: 'production', + }, + }), + }, + loader: { + '.ts': 'ts', + '.tsx': 'tsx', + }, + // minify: true, + platform: 'browser', + target: 'es6', + write: false, +}; diff --git a/scripts/src/build/modules/tab.ts b/scripts/src/build/modules/tab.ts index d987892dd..edbcb5ccb 100644 --- a/scripts/src/build/modules/tab.ts +++ b/scripts/src/build/modules/tab.ts @@ -1,133 +1,133 @@ -import { parse } from 'acorn'; -import { generate } from 'astring'; -import chalk from 'chalk'; -import { - type BuildOptions as ESBuildOptions, - type OutputFile, - build as esbuild, -} from 'esbuild'; -import type { - ArrowFunctionExpression, - Identifier, - Literal, - MemberExpression, - Program, - VariableDeclaration, -} from 'estree'; -import fs from 'fs/promises'; -import pathlib from 'path'; - -import { printList } from '../../scriptUtils.js'; -import { - copyManifest, - createBuildCommand, - exitOnError, - logResult, - retrieveTabs, - tabNameExpander, -} from '../buildUtils.js'; -import type { LintCommandInputs } from '../prebuild/eslint.js'; -import { prebuild } from '../prebuild/index.js'; -import type { BuildCommandInputs, BuildOptions, BuildResult, UnreducedResult } from '../types'; - -import { esbuildOptions } from './moduleUtils.js'; - -const outputTab = async (tabName: string, text: string, outDir: string): Promise> => { - try { - const parsed = parse(text, { ecmaVersion: 6 }) as unknown as Program; - const declStatement = parsed.body[1] as VariableDeclaration; - - const newTab = { - type: 'ArrowFunctionExpression', - body: { - type: 'MemberExpression', - object: declStatement.declarations[0].init, - property: { - type: 'Literal', - value: 'default', - } as Literal, - computed: true, - } as MemberExpression, - params: [{ - type: 'Identifier', - name: 'require', - } as Identifier], - } as ArrowFunctionExpression; - - let newCode = generate(newTab); - if (newCode.endsWith(';')) newCode = newCode.slice(0, -1); - - const outFile = `${outDir}/tabs/${tabName}.js`; - await fs.writeFile(outFile, newCode); - const { size } = await fs.stat(outFile); - return { - severity: 'success', - fileSize: size, - }; - } catch (error) { - return { - severity: 'error', - error, - }; - } -}; - -export const tabOptions: ESBuildOptions = { - ...esbuildOptions, - jsx: 'automatic', - external: ['react', 'react-dom', 'react/jsx-runtime'], -}; - -export const buildTabs = async (tabs: string[], { srcDir, outDir }: BuildOptions) => { - const nameExpander = tabNameExpander(srcDir); - const { outputFiles } = await esbuild({ - ...tabOptions, - entryPoints: tabs.map(nameExpander), - outbase: outDir, - outdir: outDir, - }); - return outputFiles; -}; - -export const reduceTabOutputFiles = (outputFiles: OutputFile[], startTime: number, outDir: string) => Promise.all(outputFiles.map(async ({ path, text }) => { - const [rawType, name] = path.split(pathlib.sep) - .slice(-3, -1); - - if (rawType !== 'tabs') { - throw new Error(`Expected only tabs, got ${rawType}`); - } - - const result = await outputTab(name, text, outDir); - return ['tab', name, { - elapsed: performance.now() - startTime, - ...result, - }] as UnreducedResult; -})); - -const getBuildTabsCommand = () => createBuildCommand('tabs', true) - .argument('[tabs...]', 'Manually specify which tabs to build', null) - .description('Build only tabs') - .action(async (tabsOpt: string[] | null, { manifest, ...opts }: BuildCommandInputs & LintCommandInputs) => { - const tabs = await retrieveTabs(manifest, tabsOpt); - - await prebuild(opts, { - tabs, - bundles: [], - }); - - printList(`${chalk.magentaBright('Building the following tabs:')}\n`, tabs); - const startTime = performance.now(); - const [reducedRes] = await Promise.all([ - buildTabs(tabs, opts) - .then((results) => reduceTabOutputFiles(results, startTime, opts.outDir)), - copyManifest({ - outDir: opts.outDir, - manifest, - }), - ]); - logResult(reducedRes, opts.verbose); - exitOnError(reducedRes); - }); - - -export default getBuildTabsCommand; +import { parse } from 'acorn'; +import { generate } from 'astring'; +import chalk from 'chalk'; +import { + type BuildOptions as ESBuildOptions, + type OutputFile, + build as esbuild, +} from 'esbuild'; +import type { + ArrowFunctionExpression, + Identifier, + Literal, + MemberExpression, + Program, + VariableDeclaration, +} from 'estree'; +import fs from 'fs/promises'; +import pathlib from 'path'; + +import { printList } from '../../scriptUtils.js'; +import { + copyManifest, + createBuildCommand, + exitOnError, + logResult, + retrieveTabs, + tabNameExpander, +} from '../buildUtils.js'; +import type { LintCommandInputs } from '../prebuild/eslint.js'; +import { prebuild } from '../prebuild/index.js'; +import type { BuildCommandInputs, BuildOptions, BuildResult, UnreducedResult } from '../types'; + +import { esbuildOptions } from './moduleUtils.js'; + +const outputTab = async (tabName: string, text: string, outDir: string): Promise> => { + try { + const parsed = parse(text, { ecmaVersion: 6 }) as unknown as Program; + const declStatement = parsed.body[1] as VariableDeclaration; + + const newTab = { + type: 'ArrowFunctionExpression', + body: { + type: 'MemberExpression', + object: declStatement.declarations[0].init, + property: { + type: 'Literal', + value: 'default', + } as Literal, + computed: true, + } as MemberExpression, + params: [{ + type: 'Identifier', + name: 'require', + } as Identifier], + } as ArrowFunctionExpression; + + let newCode = generate(newTab); + if (newCode.endsWith(';')) newCode = newCode.slice(0, -1); + + const outFile = `${outDir}/tabs/${tabName}.js`; + await fs.writeFile(outFile, newCode); + const { size } = await fs.stat(outFile); + return { + severity: 'success', + fileSize: size, + }; + } catch (error) { + return { + severity: 'error', + error, + }; + } +}; + +export const tabOptions: ESBuildOptions = { + ...esbuildOptions, + jsx: 'automatic', + external: ['react', 'react-dom', 'react/jsx-runtime'], +}; + +export const buildTabs = async (tabs: string[], { srcDir, outDir }: BuildOptions) => { + const nameExpander = tabNameExpander(srcDir); + const { outputFiles } = await esbuild({ + ...tabOptions, + entryPoints: tabs.map(nameExpander), + outbase: outDir, + outdir: outDir, + }); + return outputFiles; +}; + +export const reduceTabOutputFiles = (outputFiles: OutputFile[], startTime: number, outDir: string) => Promise.all(outputFiles.map(async ({ path, text }) => { + const [rawType, name] = path.split(pathlib.sep) + .slice(-3, -1); + + if (rawType !== 'tabs') { + throw new Error(`Expected only tabs, got ${rawType}`); + } + + const result = await outputTab(name, text, outDir); + return ['tab', name, { + elapsed: performance.now() - startTime, + ...result, + }] as UnreducedResult; +})); + +const getBuildTabsCommand = () => createBuildCommand('tabs', true) + .argument('[tabs...]', 'Manually specify which tabs to build', null) + .description('Build only tabs') + .action(async (tabsOpt: string[] | null, { manifest, ...opts }: BuildCommandInputs & LintCommandInputs) => { + const tabs = await retrieveTabs(manifest, tabsOpt); + + await prebuild(opts, { + tabs, + bundles: [], + }); + + printList(`${chalk.magentaBright('Building the following tabs:')}\n`, tabs); + const startTime = performance.now(); + const [reducedRes] = await Promise.all([ + buildTabs(tabs, opts) + .then((results) => reduceTabOutputFiles(results, startTime, opts.outDir)), + copyManifest({ + outDir: opts.outDir, + manifest, + }), + ]); + logResult(reducedRes, opts.verbose); + exitOnError(reducedRes); + }); + + +export default getBuildTabsCommand; diff --git a/scripts/src/build/prebuild/__mocks__/eslint.ts b/scripts/src/build/prebuild/__mocks__/eslint.ts index a816f3498..ccb676b3f 100644 --- a/scripts/src/build/prebuild/__mocks__/eslint.ts +++ b/scripts/src/build/prebuild/__mocks__/eslint.ts @@ -1,10 +1,10 @@ -export const runEslint = jest.fn().mockImplementation(() => ({ - elapsed: 0, - result: { - formatted: '', - results: [], - severity: 'error', - } -})) - +export const runEslint = jest.fn().mockImplementation(() => ({ + elapsed: 0, + result: { + formatted: '', + results: [], + severity: 'error', + } +})) + export const logLintResult = jest.fn(); \ No newline at end of file diff --git a/scripts/src/build/prebuild/__mocks__/tsc.ts b/scripts/src/build/prebuild/__mocks__/tsc.ts index 56eb703a4..4e17827bf 100644 --- a/scripts/src/build/prebuild/__mocks__/tsc.ts +++ b/scripts/src/build/prebuild/__mocks__/tsc.ts @@ -1,8 +1,8 @@ -export const logTscResults = jest.fn(); -export const runTsc = jest.fn().mockResolvedValue({ - elapsed: 0, - result: { - severity: 'error', - results: [], - } +export const logTscResults = jest.fn(); +export const runTsc = jest.fn().mockResolvedValue({ + elapsed: 0, + result: { + severity: 'error', + results: [], + } }) \ No newline at end of file diff --git a/scripts/src/build/prebuild/__tests__/prebuild.test.ts b/scripts/src/build/prebuild/__tests__/prebuild.test.ts index 3a49b939c..41c1a43cf 100644 --- a/scripts/src/build/prebuild/__tests__/prebuild.test.ts +++ b/scripts/src/build/prebuild/__tests__/prebuild.test.ts @@ -1,313 +1,313 @@ -import type { MockedFunction } from 'jest-mock'; - -import getLintCommand, * as lintModule from '../eslint'; -import getTscCommand, * as tscModule from '../tsc'; -import getPrebuildCommand from '..'; - -jest.spyOn(lintModule, 'runEslint') -jest.spyOn(tscModule, 'runTsc'); - -const asMock = any>(func: T) => func as MockedFunction; -const mockedTsc = asMock(tscModule.runTsc); -const mockedEslint = asMock(lintModule.runEslint); - -describe('test eslint command', () => { - const runCommand = (...args: string[]) => getLintCommand().parseAsync(args, { from: 'user' }); - - test('regular command function', async () => { - mockedEslint.mockResolvedValueOnce({ - elapsed: 0, - result: { - formatted: '', - results: [], - severity: 'success', - } - }); - - await runCommand(); - - expect(lintModule.runEslint) - .toHaveBeenCalledTimes(1); - }); - - it('should only lint specified bundles and tabs', async () => { - mockedEslint.mockResolvedValueOnce({ - elapsed: 0, - result: { - formatted: '', - results: [], - severity: 'success', - } - }); - - await runCommand('-m', 'test0', '-t', 'tab0'); - - expect(lintModule.runEslint) - .toHaveBeenCalledTimes(1); - - const lintCall = mockedEslint.mock.calls[0]; - expect(lintCall[1]) - .toMatchObject({ - bundles: ['test0'], - tabs: ['tab0'] - }); - }); - - it('should exit with code 1 if there are linting errors', async () => { - mockedEslint.mockResolvedValueOnce({ - elapsed: 0, - result: { - formatted: '', - results: [], - severity: 'error', - } - }); - - try { - await runCommand(); - } catch (error) { - expect(error) - .toEqual(new Error('process.exit called with 1')) - } - expect(lintModule.runEslint) - .toHaveBeenCalledTimes(1); - - expect(process.exit) - .toHaveBeenCalledWith(1); - }); -}); - -describe('test tsc command', () => { - const runCommand = (...args: string[]) => getTscCommand().parseAsync(args, { from: 'user' }); - - test('regular command function', async () => { - mockedTsc.mockResolvedValueOnce({ - elapsed: 0, - result: { - results: [], - severity: 'success', - } - }); - - await runCommand(); - - expect(tscModule.runTsc) - .toHaveBeenCalledTimes(1); - }); - - it('should only typecheck specified bundles and tabs', async () => { - mockedTsc.mockResolvedValueOnce({ - elapsed: 0, - result: { - results: [], - severity: 'success', - } - }); - - await runCommand('-m', 'test0', '-t', 'tab0'); - - expect(tscModule.runTsc) - .toHaveBeenCalledTimes(1); - - const tscCall = mockedTsc.mock.calls[0]; - expect(tscCall[1]) - .toMatchObject({ - bundles: ['test0'], - tabs: ['tab0'] - }); - }); - - it('should exit with code 1 if there are type check errors', async () => { - mockedTsc.mockResolvedValueOnce({ - elapsed: 0, - result: { - results: [], - severity: 'error', - } - }); - - try { - await runCommand(); - } catch (error) { - expect(error) - .toEqual(new Error('process.exit called with 1')) - } - - expect(tscModule.runTsc) - .toHaveBeenCalledTimes(1); - - expect(process.exit) - .toHaveBeenCalledWith(1); - }); -}); - -describe('test prebuild command', () => { - const runCommand = (...args: string[]) => getPrebuildCommand().parseAsync(args, { from: 'user' }); - - test('regular command function', async () => { - mockedTsc.mockResolvedValueOnce({ - elapsed: 0, - result: { - results: [], - severity: 'success', - } - }); - - mockedEslint.mockResolvedValueOnce({ - elapsed: 0, - result: { - formatted: '', - results: [], - severity: 'success', - } - }); - - await runCommand(); - - expect(tscModule.runTsc) - .toHaveBeenCalledTimes(1); - - expect(lintModule.runEslint) - .toHaveBeenCalledTimes(1); - }); - - it('should only run on specified bundles and tabs', async () => { - mockedTsc.mockResolvedValueOnce({ - elapsed: 0, - result: { - results: [], - severity: 'success', - } - }); - - mockedEslint.mockResolvedValueOnce({ - elapsed: 0, - result: { - formatted: '', - results: [], - severity: 'success', - } - }); - - await runCommand('-m', 'test0', '-t', 'tab0'); - - expect(tscModule.runTsc) - .toHaveBeenCalledTimes(1); - - const tscCall = mockedTsc.mock.calls[0]; - expect(tscCall[1]) - .toMatchObject({ - bundles: ['test0'], - tabs: ['tab0'] - }); - - expect(lintModule.runEslint) - .toHaveBeenCalledTimes(1); - - const lintCall = mockedEslint.mock.calls[0]; - expect(lintCall[1]) - .toMatchObject({ - bundles: ['test0'], - tabs: ['tab0'] - }); - }); - - describe('test error functionality', () => { - it('should exit with code 1 if there are type check errors', async () => { - mockedTsc.mockResolvedValueOnce({ - elapsed: 0, - result: { - results: [], - severity: 'error', - } - }); - - mockedEslint.mockResolvedValueOnce({ - elapsed: 0, - result: { - formatted: '', - results: [], - severity: 'success', - } - }); - - try { - await runCommand(); - } catch (error) { - expect(error) - .toEqual(new Error('process.exit called with 1')) - } - - expect(tscModule.runTsc) - .toHaveBeenCalledTimes(1); - - expect(lintModule.runEslint) - .toHaveBeenCalledTimes(1); - - expect(process.exit) - .toHaveBeenCalledWith(1); - }); - - it('should exit with code 1 if there are lint errors', async () => { - mockedTsc.mockResolvedValueOnce({ - elapsed: 0, - result: { - results: [], - severity: 'success', - } - }); - - mockedEslint.mockResolvedValueOnce({ - elapsed: 0, - result: { - formatted: '', - results: [], - severity: 'error', - } - }); - - try { - await runCommand(); - } catch (error) { - expect(error) - .toEqual(new Error('process.exit called with 1')) - } - - expect(tscModule.runTsc) - .toHaveBeenCalledTimes(1); - - expect(lintModule.runEslint) - .toHaveBeenCalledTimes(1); - - expect(process.exit) - .toHaveBeenCalledWith(1); - }); - - it('should exit with code 1 and not run tsc if there are unfixable linting errors and --fix was specified', async () => { - mockedEslint.mockResolvedValueOnce({ - elapsed: 0, - result: { - formatted: '', - results: [], - severity: 'error', - } - }); - - try { - await runCommand('--fix'); - } catch (error) { - expect(error) - .toEqual(new Error('process.exit called with 1')) - } - - expect(tscModule.runTsc) - .toHaveBeenCalledTimes(0); - - expect(lintModule.runEslint) - .toHaveBeenCalledTimes(1); - - expect(process.exit) - .toHaveBeenCalledWith(1); - }); - }); -}); +import type { MockedFunction } from 'jest-mock'; + +import getLintCommand, * as lintModule from '../eslint'; +import getTscCommand, * as tscModule from '../tsc'; +import getPrebuildCommand from '..'; + +jest.spyOn(lintModule, 'runEslint') +jest.spyOn(tscModule, 'runTsc'); + +const asMock = any>(func: T) => func as MockedFunction; +const mockedTsc = asMock(tscModule.runTsc); +const mockedEslint = asMock(lintModule.runEslint); + +describe('test eslint command', () => { + const runCommand = (...args: string[]) => getLintCommand().parseAsync(args, { from: 'user' }); + + test('regular command function', async () => { + mockedEslint.mockResolvedValueOnce({ + elapsed: 0, + result: { + formatted: '', + results: [], + severity: 'success', + } + }); + + await runCommand(); + + expect(lintModule.runEslint) + .toHaveBeenCalledTimes(1); + }); + + it('should only lint specified bundles and tabs', async () => { + mockedEslint.mockResolvedValueOnce({ + elapsed: 0, + result: { + formatted: '', + results: [], + severity: 'success', + } + }); + + await runCommand('-m', 'test0', '-t', 'tab0'); + + expect(lintModule.runEslint) + .toHaveBeenCalledTimes(1); + + const lintCall = mockedEslint.mock.calls[0]; + expect(lintCall[1]) + .toMatchObject({ + bundles: ['test0'], + tabs: ['tab0'] + }); + }); + + it('should exit with code 1 if there are linting errors', async () => { + mockedEslint.mockResolvedValueOnce({ + elapsed: 0, + result: { + formatted: '', + results: [], + severity: 'error', + } + }); + + try { + await runCommand(); + } catch (error) { + expect(error) + .toEqual(new Error('process.exit called with 1')) + } + expect(lintModule.runEslint) + .toHaveBeenCalledTimes(1); + + expect(process.exit) + .toHaveBeenCalledWith(1); + }); +}); + +describe('test tsc command', () => { + const runCommand = (...args: string[]) => getTscCommand().parseAsync(args, { from: 'user' }); + + test('regular command function', async () => { + mockedTsc.mockResolvedValueOnce({ + elapsed: 0, + result: { + results: [], + severity: 'success', + } + }); + + await runCommand(); + + expect(tscModule.runTsc) + .toHaveBeenCalledTimes(1); + }); + + it('should only typecheck specified bundles and tabs', async () => { + mockedTsc.mockResolvedValueOnce({ + elapsed: 0, + result: { + results: [], + severity: 'success', + } + }); + + await runCommand('-m', 'test0', '-t', 'tab0'); + + expect(tscModule.runTsc) + .toHaveBeenCalledTimes(1); + + const tscCall = mockedTsc.mock.calls[0]; + expect(tscCall[1]) + .toMatchObject({ + bundles: ['test0'], + tabs: ['tab0'] + }); + }); + + it('should exit with code 1 if there are type check errors', async () => { + mockedTsc.mockResolvedValueOnce({ + elapsed: 0, + result: { + results: [], + severity: 'error', + } + }); + + try { + await runCommand(); + } catch (error) { + expect(error) + .toEqual(new Error('process.exit called with 1')) + } + + expect(tscModule.runTsc) + .toHaveBeenCalledTimes(1); + + expect(process.exit) + .toHaveBeenCalledWith(1); + }); +}); + +describe('test prebuild command', () => { + const runCommand = (...args: string[]) => getPrebuildCommand().parseAsync(args, { from: 'user' }); + + test('regular command function', async () => { + mockedTsc.mockResolvedValueOnce({ + elapsed: 0, + result: { + results: [], + severity: 'success', + } + }); + + mockedEslint.mockResolvedValueOnce({ + elapsed: 0, + result: { + formatted: '', + results: [], + severity: 'success', + } + }); + + await runCommand(); + + expect(tscModule.runTsc) + .toHaveBeenCalledTimes(1); + + expect(lintModule.runEslint) + .toHaveBeenCalledTimes(1); + }); + + it('should only run on specified bundles and tabs', async () => { + mockedTsc.mockResolvedValueOnce({ + elapsed: 0, + result: { + results: [], + severity: 'success', + } + }); + + mockedEslint.mockResolvedValueOnce({ + elapsed: 0, + result: { + formatted: '', + results: [], + severity: 'success', + } + }); + + await runCommand('-m', 'test0', '-t', 'tab0'); + + expect(tscModule.runTsc) + .toHaveBeenCalledTimes(1); + + const tscCall = mockedTsc.mock.calls[0]; + expect(tscCall[1]) + .toMatchObject({ + bundles: ['test0'], + tabs: ['tab0'] + }); + + expect(lintModule.runEslint) + .toHaveBeenCalledTimes(1); + + const lintCall = mockedEslint.mock.calls[0]; + expect(lintCall[1]) + .toMatchObject({ + bundles: ['test0'], + tabs: ['tab0'] + }); + }); + + describe('test error functionality', () => { + it('should exit with code 1 if there are type check errors', async () => { + mockedTsc.mockResolvedValueOnce({ + elapsed: 0, + result: { + results: [], + severity: 'error', + } + }); + + mockedEslint.mockResolvedValueOnce({ + elapsed: 0, + result: { + formatted: '', + results: [], + severity: 'success', + } + }); + + try { + await runCommand(); + } catch (error) { + expect(error) + .toEqual(new Error('process.exit called with 1')) + } + + expect(tscModule.runTsc) + .toHaveBeenCalledTimes(1); + + expect(lintModule.runEslint) + .toHaveBeenCalledTimes(1); + + expect(process.exit) + .toHaveBeenCalledWith(1); + }); + + it('should exit with code 1 if there are lint errors', async () => { + mockedTsc.mockResolvedValueOnce({ + elapsed: 0, + result: { + results: [], + severity: 'success', + } + }); + + mockedEslint.mockResolvedValueOnce({ + elapsed: 0, + result: { + formatted: '', + results: [], + severity: 'error', + } + }); + + try { + await runCommand(); + } catch (error) { + expect(error) + .toEqual(new Error('process.exit called with 1')) + } + + expect(tscModule.runTsc) + .toHaveBeenCalledTimes(1); + + expect(lintModule.runEslint) + .toHaveBeenCalledTimes(1); + + expect(process.exit) + .toHaveBeenCalledWith(1); + }); + + it('should exit with code 1 and not run tsc if there are unfixable linting errors and --fix was specified', async () => { + mockedEslint.mockResolvedValueOnce({ + elapsed: 0, + result: { + formatted: '', + results: [], + severity: 'error', + } + }); + + try { + await runCommand('--fix'); + } catch (error) { + expect(error) + .toEqual(new Error('process.exit called with 1')) + } + + expect(tscModule.runTsc) + .toHaveBeenCalledTimes(0); + + expect(lintModule.runEslint) + .toHaveBeenCalledTimes(1); + + expect(process.exit) + .toHaveBeenCalledWith(1); + }); + }); +}); diff --git a/scripts/src/build/prebuild/eslint.ts b/scripts/src/build/prebuild/eslint.ts index 885499187..57e444185 100644 --- a/scripts/src/build/prebuild/eslint.ts +++ b/scripts/src/build/prebuild/eslint.ts @@ -1,106 +1,106 @@ -import chalk from 'chalk'; -import { Command } from 'commander'; -import { ESLint } from 'eslint'; -import pathlib from 'path'; - -import { findSeverity, printList, wrapWithTimer } from '../../scriptUtils.js'; -import { divideAndRound, exitOnError, retrieveBundlesAndTabs } from '../buildUtils.js'; -import type { AssetInfo, BuildCommandInputs, Severity } from '../types.js'; - -export type LintCommandInputs = ({ - lint: false; - fix: false; -} | { - lint: true; - fix: boolean; -}) & { - srcDir: string; -}; - -export type LintOpts = Omit; - -type LintResults = { - formatted: string; - results: ESLint.LintResult[], - severity: Severity; -}; - -/** - * Run eslint programmatically - * Refer to https://eslint.org/docs/latest/integrate/nodejs-api for documentation - */ -export const runEslint = wrapWithTimer(async (opts: LintOpts, { bundles, tabs }: AssetInfo): Promise => { - const linter = new ESLint({ - cwd: pathlib.resolve(opts.srcDir), - overrideConfigFile: '.eslintrc.cjs', - extensions: ['ts', 'tsx'], - fix: opts.fix, - useEslintrc: false, - }); - - const promises: Promise[] = [ - bundles.length > 0 ? linter.lintFiles(bundles.map((bundle) => pathlib.join('bundles', bundle))) : Promise.resolve([]), - tabs.length > 0 ? linter.lintFiles(tabs.map((tabName) => pathlib.join('tabs', tabName))) : Promise.resolve([]), - ]; - - if (bundles.length > 0) { - printList(`${chalk.magentaBright('Running eslint on the following bundles')}:\n`, bundles); - } - - if (tabs.length > 0) { - printList(`${chalk.magentaBright('Running eslint on the following tabs')}:\n`, tabs); - } - - const [lintBundles, lintTabs] = await Promise.all(promises); - const lintResults = [...lintBundles, ...lintTabs]; - - if (opts.fix) { - console.log(chalk.magentaBright('Running eslint autofix...')); - await ESLint.outputFixes(lintResults); - } - - const lintSeverity = findSeverity(lintResults, ({ errorCount, warningCount }) => { - if (errorCount > 0) return 'error'; - if (warningCount > 0) return 'warn'; - return 'success'; - }); - - const outputFormatter = await linter.loadFormatter('stylish'); - const formatterOutput = outputFormatter.format(lintResults); - - return { - formatted: typeof formatterOutput === 'string' ? formatterOutput : await formatterOutput, - results: lintResults, - severity: lintSeverity, - }; -}); - -export const logLintResult = (input: Awaited> | null) => { - if (!input) return; - - const { elapsed, result: { formatted, severity } } = input; - let errStr: string; - - if (severity === 'error') errStr = chalk.cyanBright('with ') + chalk.redBright('errors'); - else if (severity === 'warn') errStr = chalk.cyanBright('with ') + chalk.yellowBright('warnings'); - else errStr = chalk.greenBright('successfully'); - - console.log(`${chalk.cyanBright(`Linting completed in ${divideAndRound(elapsed, 1000)}s ${errStr}:`)}\n${formatted}`); -}; - -const getLintCommand = () => new Command('lint') - .description('Run eslint') - .option('--fix', 'Ask eslint to autofix linting errors', false) - .option('--srcDir ', 'Source directory for files', 'src') - .option('--manifest ', 'Manifest file', 'modules.json') - .option('-m, --modules ', 'Manually specify which modules to check', null) - .option('-t, --tabs ', 'Manually specify which tabs to check', null) - .option('-v, --verbose', 'Display more information about the build results', false) - .action(async ({ modules, tabs, manifest, ...opts }: BuildCommandInputs & LintCommandInputs) => { - const assets = await retrieveBundlesAndTabs(manifest, modules, tabs); - const result = await runEslint(opts, assets); - logLintResult(result); - exitOnError([], result.result); - }); - -export default getLintCommand; +import chalk from 'chalk'; +import { Command } from 'commander'; +import { ESLint } from 'eslint'; +import pathlib from 'path'; + +import { findSeverity, printList, wrapWithTimer } from '../../scriptUtils.js'; +import { divideAndRound, exitOnError, retrieveBundlesAndTabs } from '../buildUtils.js'; +import type { AssetInfo, BuildCommandInputs, Severity } from '../types.js'; + +export type LintCommandInputs = ({ + lint: false; + fix: false; +} | { + lint: true; + fix: boolean; +}) & { + srcDir: string; +}; + +export type LintOpts = Omit; + +type LintResults = { + formatted: string; + results: ESLint.LintResult[], + severity: Severity; +}; + +/** + * Run eslint programmatically + * Refer to https://eslint.org/docs/latest/integrate/nodejs-api for documentation + */ +export const runEslint = wrapWithTimer(async (opts: LintOpts, { bundles, tabs }: AssetInfo): Promise => { + const linter = new ESLint({ + cwd: pathlib.resolve(opts.srcDir), + overrideConfigFile: '.eslintrc.cjs', + extensions: ['ts', 'tsx'], + fix: opts.fix, + useEslintrc: false, + }); + + const promises: Promise[] = [ + bundles.length > 0 ? linter.lintFiles(bundles.map((bundle) => pathlib.join('bundles', bundle))) : Promise.resolve([]), + tabs.length > 0 ? linter.lintFiles(tabs.map((tabName) => pathlib.join('tabs', tabName))) : Promise.resolve([]), + ]; + + if (bundles.length > 0) { + printList(`${chalk.magentaBright('Running eslint on the following bundles')}:\n`, bundles); + } + + if (tabs.length > 0) { + printList(`${chalk.magentaBright('Running eslint on the following tabs')}:\n`, tabs); + } + + const [lintBundles, lintTabs] = await Promise.all(promises); + const lintResults = [...lintBundles, ...lintTabs]; + + if (opts.fix) { + console.log(chalk.magentaBright('Running eslint autofix...')); + await ESLint.outputFixes(lintResults); + } + + const lintSeverity = findSeverity(lintResults, ({ errorCount, warningCount }) => { + if (errorCount > 0) return 'error'; + if (warningCount > 0) return 'warn'; + return 'success'; + }); + + const outputFormatter = await linter.loadFormatter('stylish'); + const formatterOutput = outputFormatter.format(lintResults); + + return { + formatted: typeof formatterOutput === 'string' ? formatterOutput : await formatterOutput, + results: lintResults, + severity: lintSeverity, + }; +}); + +export const logLintResult = (input: Awaited> | null) => { + if (!input) return; + + const { elapsed, result: { formatted, severity } } = input; + let errStr: string; + + if (severity === 'error') errStr = chalk.cyanBright('with ') + chalk.redBright('errors'); + else if (severity === 'warn') errStr = chalk.cyanBright('with ') + chalk.yellowBright('warnings'); + else errStr = chalk.greenBright('successfully'); + + console.log(`${chalk.cyanBright(`Linting completed in ${divideAndRound(elapsed, 1000)}s ${errStr}:`)}\n${formatted}`); +}; + +const getLintCommand = () => new Command('lint') + .description('Run eslint') + .option('--fix', 'Ask eslint to autofix linting errors', false) + .option('--srcDir ', 'Source directory for files', 'src') + .option('--manifest ', 'Manifest file', 'modules.json') + .option('-m, --modules ', 'Manually specify which modules to check', null) + .option('-t, --tabs ', 'Manually specify which tabs to check', null) + .option('-v, --verbose', 'Display more information about the build results', false) + .action(async ({ modules, tabs, manifest, ...opts }: BuildCommandInputs & LintCommandInputs) => { + const assets = await retrieveBundlesAndTabs(manifest, modules, tabs); + const result = await runEslint(opts, assets); + logLintResult(result); + exitOnError([], result.result); + }); + +export default getLintCommand; diff --git a/scripts/src/build/prebuild/index.ts b/scripts/src/build/prebuild/index.ts index d2361d22d..4436cad5c 100644 --- a/scripts/src/build/prebuild/index.ts +++ b/scripts/src/build/prebuild/index.ts @@ -1,90 +1,90 @@ -import { Command } from 'commander'; - -import { exitOnError, retrieveBundlesAndTabs } from '../buildUtils.js'; -import type { AssetInfo } from '../types.js'; - -import { type LintCommandInputs, type LintOpts, logLintResult, runEslint } from './eslint.js'; -import { type TscCommandInputs, type TscOpts, logTscResults, runTsc } from './tsc.js'; - -type PreBuildOpts = TscOpts & LintOpts & { - lint: boolean; - tsc: boolean; -}; - -type PreBuildResult = { - lintResult: Awaited> | null; - tscResult: Awaited> | null; -}; -/** - * Run both `tsc` and `eslint` in parallel if `--fix` was not specified. Otherwise, run eslint - * to fix linting errors first, then run tsc for type checking - * - * @returns An object that contains the results from linting and typechecking - */ -const prebuildInternal = async (opts: PreBuildOpts, assets: AssetInfo): Promise => { - if (opts.fix) { - // Run tsc and then lint - const lintResult = await runEslint(opts, assets); - - if (!opts.tsc || lintResult.result.severity === 'error') { - return { - lintResult, - tscResult: null, - }; - } - - const tscResult = await runTsc(opts.srcDir, assets); - return { - lintResult, - tscResult, - }; - // eslint-disable-next-line no-else-return - } else { - const [lintResult, tscResult] = await Promise.all([ - opts.lint ? runEslint(opts, assets) : Promise.resolve(null), - opts.tsc ? runTsc(opts.srcDir, assets) : Promise.resolve(null), - ]); - - return { - lintResult, - tscResult, - }; - } -}; - -/** - * Run eslint and tsc based on the provided options, and exit with code 1 - * if either returns with an error status - */ -export const prebuild = async (opts: PreBuildOpts, assets: AssetInfo) => { - const { lintResult, tscResult } = await prebuildInternal(opts, assets); - logLintResult(lintResult); - logTscResults(tscResult); - - exitOnError([], lintResult?.result, tscResult?.result); - if (lintResult?.result.severity === 'error' || tscResult?.result.severity === 'error') { - throw new Error('Exiting for jest'); - } -}; - -type PrebuildCommandInputs = LintCommandInputs & TscCommandInputs; - -const getPrebuildCommand = () => new Command('prebuild') - .description('Run both tsc and eslint') - .option('--fix', 'Ask eslint to autofix linting errors', false) - .option('--srcDir ', 'Source directory for files', 'src') - .option('--manifest ', 'Manifest file', 'modules.json') - .option('-m, --modules [modules...]', 'Manually specify which modules to check', null) - .option('-t, --tabs [tabs...]', 'Manually specify which tabs to check', null) - .action(async ({ modules, tabs, manifest, ...opts }: PrebuildCommandInputs) => { - const assets = await retrieveBundlesAndTabs(manifest, modules, tabs, false); - await prebuild({ - ...opts, - tsc: true, - lint: true, - }, assets); - }); - -export default getPrebuildCommand; -export { default as getLintCommand } from './eslint.js'; -export { default as getTscCommand } from './tsc.js'; +import { Command } from 'commander'; + +import { exitOnError, retrieveBundlesAndTabs } from '../buildUtils.js'; +import type { AssetInfo } from '../types.js'; + +import { type LintCommandInputs, type LintOpts, logLintResult, runEslint } from './eslint.js'; +import { type TscCommandInputs, type TscOpts, logTscResults, runTsc } from './tsc.js'; + +type PreBuildOpts = TscOpts & LintOpts & { + lint: boolean; + tsc: boolean; +}; + +type PreBuildResult = { + lintResult: Awaited> | null; + tscResult: Awaited> | null; +}; +/** + * Run both `tsc` and `eslint` in parallel if `--fix` was not specified. Otherwise, run eslint + * to fix linting errors first, then run tsc for type checking + * + * @returns An object that contains the results from linting and typechecking + */ +const prebuildInternal = async (opts: PreBuildOpts, assets: AssetInfo): Promise => { + if (opts.fix) { + // Run tsc and then lint + const lintResult = await runEslint(opts, assets); + + if (!opts.tsc || lintResult.result.severity === 'error') { + return { + lintResult, + tscResult: null, + }; + } + + const tscResult = await runTsc(opts.srcDir, assets); + return { + lintResult, + tscResult, + }; + // eslint-disable-next-line no-else-return + } else { + const [lintResult, tscResult] = await Promise.all([ + opts.lint ? runEslint(opts, assets) : Promise.resolve(null), + opts.tsc ? runTsc(opts.srcDir, assets) : Promise.resolve(null), + ]); + + return { + lintResult, + tscResult, + }; + } +}; + +/** + * Run eslint and tsc based on the provided options, and exit with code 1 + * if either returns with an error status + */ +export const prebuild = async (opts: PreBuildOpts, assets: AssetInfo) => { + const { lintResult, tscResult } = await prebuildInternal(opts, assets); + logLintResult(lintResult); + logTscResults(tscResult); + + exitOnError([], lintResult?.result, tscResult?.result); + if (lintResult?.result.severity === 'error' || tscResult?.result.severity === 'error') { + throw new Error('Exiting for jest'); + } +}; + +type PrebuildCommandInputs = LintCommandInputs & TscCommandInputs; + +const getPrebuildCommand = () => new Command('prebuild') + .description('Run both tsc and eslint') + .option('--fix', 'Ask eslint to autofix linting errors', false) + .option('--srcDir ', 'Source directory for files', 'src') + .option('--manifest ', 'Manifest file', 'modules.json') + .option('-m, --modules [modules...]', 'Manually specify which modules to check', null) + .option('-t, --tabs [tabs...]', 'Manually specify which tabs to check', null) + .action(async ({ modules, tabs, manifest, ...opts }: PrebuildCommandInputs) => { + const assets = await retrieveBundlesAndTabs(manifest, modules, tabs, false); + await prebuild({ + ...opts, + tsc: true, + lint: true, + }, assets); + }); + +export default getPrebuildCommand; +export { default as getLintCommand } from './eslint.js'; +export { default as getTscCommand } from './tsc.js'; diff --git a/scripts/src/build/prebuild/tsc.ts b/scripts/src/build/prebuild/tsc.ts index 8536447a1..8153bda15 100644 --- a/scripts/src/build/prebuild/tsc.ts +++ b/scripts/src/build/prebuild/tsc.ts @@ -1,139 +1,139 @@ -import chalk from 'chalk'; -import { Command } from 'commander'; -import { existsSync, promises as fs } from 'fs'; -import pathlib from 'path'; -import ts, { type CompilerOptions } from 'typescript'; - -import { printList, wrapWithTimer } from '../../scriptUtils.js'; -import { bundleNameExpander, divideAndRound, exitOnError, retrieveBundlesAndTabs, tabNameExpander } from '../buildUtils.js'; -import type { AssetInfo, CommandInputs, Severity } from '../types.js'; - -type TscResult = { - severity: Severity, - results: ts.Diagnostic[]; - error?: any; -}; - -export type TscOpts = { - srcDir: string; -}; - -type TsconfigResult = { - severity: 'error'; - error?: any; - results: ts.Diagnostic[]; -} | { - severity: 'success'; - results: CompilerOptions; -}; - -const getTsconfig = async (srcDir: string): Promise => { - // Step 1: Read the text from tsconfig.json - const tsconfigLocation = pathlib.join(srcDir, 'tsconfig.json'); - if (!existsSync(tsconfigLocation)) { - return { - severity: 'error', - results: [], - error: `Could not locate tsconfig.json at ${tsconfigLocation}`, - }; - } - const configText = await fs.readFile(tsconfigLocation, 'utf-8'); - - // Step 2: Parse the raw text into a json object - const { error: configJsonError, config: configJson } = ts.parseConfigFileTextToJson(tsconfigLocation, configText); - if (configJsonError) { - return { - severity: 'error', - results: [configJsonError], - }; - } - - // Step 3: Parse the json object into a config object for use by tsc - const { errors: parseErrors, options: tsconfig } = ts.parseJsonConfigFileContent(configJson, ts.sys, srcDir); - if (parseErrors.length > 0) { - return { - severity: 'error', - results: parseErrors, - }; - } - - return { - severity: 'success', - results: tsconfig, - }; -}; - -/** - * @param params_0 Source Directory - */ -export const runTsc = wrapWithTimer((async (srcDir: string, { bundles, tabs }: AssetInfo): Promise => { - const fileNames: string[] = []; - - if (bundles.length > 0) { - printList(`${chalk.magentaBright('Running tsc on the following bundles')}:\n`, bundles); - bundles.forEach((bundle) => fileNames.push(bundleNameExpander(srcDir)(bundle))); - } - - if (tabs.length > 0) { - printList(`${chalk.magentaBright('Running tsc on the following tabs')}:\n`, tabs); - tabs.forEach((tabName) => fileNames.push(tabNameExpander(srcDir)(tabName))); - } - - const tsconfigRes = await getTsconfig(srcDir); - if (tsconfigRes.severity === 'error') { - return { - severity: 'error', - results: tsconfigRes.results, - }; - } - - const tsc = ts.createProgram(fileNames, tsconfigRes.results); - const results = tsc.emit(); - const diagnostics = ts.getPreEmitDiagnostics(tsc) - .concat(results.diagnostics); - - return { - severity: diagnostics.length > 0 ? 'error' : 'success', - results: diagnostics, - }; -})); - -export const logTscResults = (input: Awaited> | null) => { - if (!input) return; - - const { elapsed, result: { severity, results, error } } = input; - if (error) { - console.log(`${chalk.cyanBright(`tsc finished with ${chalk.redBright('errors')}:`)} ${error}`); - return; - } - - const diagStr = ts.formatDiagnosticsWithColorAndContext(results, { - getNewLine: () => '\n', - getCurrentDirectory: () => pathlib.resolve('.'), - getCanonicalFileName: (name) => pathlib.basename(name), - }); - - if (severity === 'error') { - console.log(`${diagStr}\n${chalk.cyanBright(`tsc finished with ${chalk.redBright('errors')} in ${divideAndRound(elapsed, 1000)}s`)}`); - } else { - console.log(`${diagStr}\n${chalk.cyanBright(`tsc completed ${chalk.greenBright('successfully')} in ${divideAndRound(elapsed, 1000)}s`)}`); - } -}; - -export type TscCommandInputs = CommandInputs; - -const getTscCommand = () => new Command('typecheck') - .description('Run tsc to perform type checking') - .option('--srcDir ', 'Source directory for files', 'src') - .option('--manifest ', 'Manifest file', 'modules.json') - .option('-m, --modules [modules...]', 'Manually specify which modules to check', null) - .option('-t, --tabs [tabs...]', 'Manually specify which tabs to check', null) - .option('-v, --verbose', 'Display more information about the build results', false) - .action(async ({ modules, tabs, manifest, srcDir }: TscCommandInputs) => { - const assets = await retrieveBundlesAndTabs(manifest, modules, tabs); - const tscResults = await runTsc(srcDir, assets); - logTscResults(tscResults); - exitOnError([], tscResults.result); - }); - -export default getTscCommand; +import chalk from 'chalk'; +import { Command } from 'commander'; +import { existsSync, promises as fs } from 'fs'; +import pathlib from 'path'; +import ts, { type CompilerOptions } from 'typescript'; + +import { printList, wrapWithTimer } from '../../scriptUtils.js'; +import { bundleNameExpander, divideAndRound, exitOnError, retrieveBundlesAndTabs, tabNameExpander } from '../buildUtils.js'; +import type { AssetInfo, CommandInputs, Severity } from '../types.js'; + +type TscResult = { + severity: Severity, + results: ts.Diagnostic[]; + error?: any; +}; + +export type TscOpts = { + srcDir: string; +}; + +type TsconfigResult = { + severity: 'error'; + error?: any; + results: ts.Diagnostic[]; +} | { + severity: 'success'; + results: CompilerOptions; +}; + +const getTsconfig = async (srcDir: string): Promise => { + // Step 1: Read the text from tsconfig.json + const tsconfigLocation = pathlib.join(srcDir, 'tsconfig.json'); + if (!existsSync(tsconfigLocation)) { + return { + severity: 'error', + results: [], + error: `Could not locate tsconfig.json at ${tsconfigLocation}`, + }; + } + const configText = await fs.readFile(tsconfigLocation, 'utf-8'); + + // Step 2: Parse the raw text into a json object + const { error: configJsonError, config: configJson } = ts.parseConfigFileTextToJson(tsconfigLocation, configText); + if (configJsonError) { + return { + severity: 'error', + results: [configJsonError], + }; + } + + // Step 3: Parse the json object into a config object for use by tsc + const { errors: parseErrors, options: tsconfig } = ts.parseJsonConfigFileContent(configJson, ts.sys, srcDir); + if (parseErrors.length > 0) { + return { + severity: 'error', + results: parseErrors, + }; + } + + return { + severity: 'success', + results: tsconfig, + }; +}; + +/** + * @param params_0 Source Directory + */ +export const runTsc = wrapWithTimer((async (srcDir: string, { bundles, tabs }: AssetInfo): Promise => { + const fileNames: string[] = []; + + if (bundles.length > 0) { + printList(`${chalk.magentaBright('Running tsc on the following bundles')}:\n`, bundles); + bundles.forEach((bundle) => fileNames.push(bundleNameExpander(srcDir)(bundle))); + } + + if (tabs.length > 0) { + printList(`${chalk.magentaBright('Running tsc on the following tabs')}:\n`, tabs); + tabs.forEach((tabName) => fileNames.push(tabNameExpander(srcDir)(tabName))); + } + + const tsconfigRes = await getTsconfig(srcDir); + if (tsconfigRes.severity === 'error') { + return { + severity: 'error', + results: tsconfigRes.results, + }; + } + + const tsc = ts.createProgram(fileNames, tsconfigRes.results); + const results = tsc.emit(); + const diagnostics = ts.getPreEmitDiagnostics(tsc) + .concat(results.diagnostics); + + return { + severity: diagnostics.length > 0 ? 'error' : 'success', + results: diagnostics, + }; +})); + +export const logTscResults = (input: Awaited> | null) => { + if (!input) return; + + const { elapsed, result: { severity, results, error } } = input; + if (error) { + console.log(`${chalk.cyanBright(`tsc finished with ${chalk.redBright('errors')}:`)} ${error}`); + return; + } + + const diagStr = ts.formatDiagnosticsWithColorAndContext(results, { + getNewLine: () => '\n', + getCurrentDirectory: () => pathlib.resolve('.'), + getCanonicalFileName: (name) => pathlib.basename(name), + }); + + if (severity === 'error') { + console.log(`${diagStr}\n${chalk.cyanBright(`tsc finished with ${chalk.redBright('errors')} in ${divideAndRound(elapsed, 1000)}s`)}`); + } else { + console.log(`${diagStr}\n${chalk.cyanBright(`tsc completed ${chalk.greenBright('successfully')} in ${divideAndRound(elapsed, 1000)}s`)}`); + } +}; + +export type TscCommandInputs = CommandInputs; + +const getTscCommand = () => new Command('typecheck') + .description('Run tsc to perform type checking') + .option('--srcDir ', 'Source directory for files', 'src') + .option('--manifest ', 'Manifest file', 'modules.json') + .option('-m, --modules [modules...]', 'Manually specify which modules to check', null) + .option('-t, --tabs [tabs...]', 'Manually specify which tabs to check', null) + .option('-v, --verbose', 'Display more information about the build results', false) + .action(async ({ modules, tabs, manifest, srcDir }: TscCommandInputs) => { + const assets = await retrieveBundlesAndTabs(manifest, modules, tabs); + const tscResults = await runTsc(srcDir, assets); + logTscResults(tscResults); + exitOnError([], tscResults.result); + }); + +export default getTscCommand; diff --git a/scripts/src/build/types.ts b/scripts/src/build/types.ts index d7549295c..0a994a38a 100644 --- a/scripts/src/build/types.ts +++ b/scripts/src/build/types.ts @@ -1,102 +1,102 @@ -export type Severity = 'success' | 'error' | 'warn'; - -export const Assets = ['bundle', 'tab', 'json'] as const; - -/** - * Type of assets that can be built - */ -export type AssetTypes = typeof Assets[number]; - -/** - * Represents the result of a single operation (like building a single bundle) - */ -export type OperationResult = { - /** - * Overall success of operation - */ - severity: Severity; - - /** - * Any warning or error messages - */ - error?: any; -}; - -/** - * Represents the result of an operation that results in a file written to disk - */ -export type BuildResult = { - /** - * Time taken (im milliseconds) for the operation to complete - */ - elapsed?: number; - - /** - * Size (in bytes) of the file written to disk - */ - fileSize?: number; -} & OperationResult; - -/** - * Represents the collective result of a number of operations (like `buildJsons`) - */ -export type OverallResult = { - severity: Severity; - results: Record; -} | null; - -/** - * A different form of `buildResult` with the associated asset type and name. - */ -export type UnreducedResult = [AssetTypes, string, BuildResult]; - -/** - * Options common to all commands - */ -export type CommandInputs = { - /** - * Directory containing source files - */ - srcDir: string; - - /** - * Enable verbose logging - */ - verbose: boolean; - - /** - * Location of the manifest file - */ - manifest: string; - - /** - * String array containing the modules the user specified, or `null` if they specified none - */ - modules: string[] | null; - - /** - * String array containing the tabs the user specified, or `null` if they specified none - */ - tabs: string[] | null; -}; - -/** - * Options specific to commands that output files - */ -export type BuildCommandInputs = { - outDir: string; - tsc: boolean; -} & CommandInputs; - -/** - * Options that are passed to command handlers - */ -export type BuildOptions = Omit; - -/** - * Specifies which bundles and tabs are to be built - */ -export type AssetInfo = { - bundles: string[]; - tabs: string[]; -}; +export type Severity = 'success' | 'error' | 'warn'; + +export const Assets = ['bundle', 'tab', 'json'] as const; + +/** + * Type of assets that can be built + */ +export type AssetTypes = typeof Assets[number]; + +/** + * Represents the result of a single operation (like building a single bundle) + */ +export type OperationResult = { + /** + * Overall success of operation + */ + severity: Severity; + + /** + * Any warning or error messages + */ + error?: any; +}; + +/** + * Represents the result of an operation that results in a file written to disk + */ +export type BuildResult = { + /** + * Time taken (im milliseconds) for the operation to complete + */ + elapsed?: number; + + /** + * Size (in bytes) of the file written to disk + */ + fileSize?: number; +} & OperationResult; + +/** + * Represents the collective result of a number of operations (like `buildJsons`) + */ +export type OverallResult = { + severity: Severity; + results: Record; +} | null; + +/** + * A different form of `buildResult` with the associated asset type and name. + */ +export type UnreducedResult = [AssetTypes, string, BuildResult]; + +/** + * Options common to all commands + */ +export type CommandInputs = { + /** + * Directory containing source files + */ + srcDir: string; + + /** + * Enable verbose logging + */ + verbose: boolean; + + /** + * Location of the manifest file + */ + manifest: string; + + /** + * String array containing the modules the user specified, or `null` if they specified none + */ + modules: string[] | null; + + /** + * String array containing the tabs the user specified, or `null` if they specified none + */ + tabs: string[] | null; +}; + +/** + * Options specific to commands that output files + */ +export type BuildCommandInputs = { + outDir: string; + tsc: boolean; +} & CommandInputs; + +/** + * Options that are passed to command handlers + */ +export type BuildOptions = Omit; + +/** + * Specifies which bundles and tabs are to be built + */ +export type AssetInfo = { + bundles: string[]; + tabs: string[]; +}; diff --git a/scripts/src/index.ts b/scripts/src/index.ts index 834b8b3fd..da7254c2d 100644 --- a/scripts/src/index.ts +++ b/scripts/src/index.ts @@ -1,17 +1,17 @@ -import { Command } from 'commander'; - -import { watchCommand } from './build/dev.js'; -import buildAllCommand from './build/index.js'; -import getPrebuildCommand, { getLintCommand, getTscCommand } from './build/prebuild/index.js'; -import createCommand from './templates/index.js'; - -const parser = new Command() - .addCommand(buildAllCommand) - .addCommand(createCommand) - .addCommand(getLintCommand()) - .addCommand(getPrebuildCommand()) - .addCommand(getTscCommand()) - .addCommand(watchCommand); - -await parser.parseAsync(); -process.exit(); +import { Command } from 'commander'; + +import { watchCommand } from './build/dev.js'; +import buildAllCommand from './build/index.js'; +import getPrebuildCommand, { getLintCommand, getTscCommand } from './build/prebuild/index.js'; +import createCommand from './templates/index.js'; + +const parser = new Command() + .addCommand(buildAllCommand) + .addCommand(createCommand) + .addCommand(getLintCommand()) + .addCommand(getPrebuildCommand()) + .addCommand(getTscCommand()) + .addCommand(watchCommand); + +await parser.parseAsync(); +process.exit(); diff --git a/scripts/src/jest.config.js b/scripts/src/jest.config.js index 5a202eb98..43725c2b0 100644 --- a/scripts/src/jest.config.js +++ b/scripts/src/jest.config.js @@ -1,46 +1,46 @@ -import presets from 'ts-jest/presets/index.js'; - -const preset = presets.jsWithTsESM; -const [[transformKey, [, transforms]]] = Object.entries(preset.transform); - -/** - * @type {import('jest').config} - */ -export default { - clearMocks: true, - displayName: 'Scripts', - testEnvironment: 'node', - extensionsToTreatAsEsm: ['.ts'], - rootDir: '../../', - modulePaths: [ - '/scripts/src', - ], - moduleDirectories: [ - '/node_modules', - '/scripts/src', - ], - transform: { - [transformKey]: ['ts-jest', { - ...transforms, - // tsconfig: '/scripts/src/tsconfig.json', - tsconfig: { - allowSyntheticDefaultImports: true, - allowJs: true, - esModuleInterop: true, - module: 'es2022', - moduleResolution: 'node', - resolveJsonModule: true, - target: 'es2022', - }, - }], - }, - // Module Name settings required to make chalk work with jest - moduleNameMapper: { - 'chalk': '/scripts/src/__mocks__/chalk.cjs', - '(.+)\\.js': '$1', - }, - testMatch: [ - '/scripts/src/**/__tests__/**/*.test.ts', - ], - setupFilesAfterEnv: ["/scripts/src/jest.setup.ts"] -}; +import presets from 'ts-jest/presets/index.js'; + +const preset = presets.jsWithTsESM; +const [[transformKey, [, transforms]]] = Object.entries(preset.transform); + +/** + * @type {import('jest').config} + */ +export default { + clearMocks: true, + displayName: 'Scripts', + testEnvironment: 'node', + extensionsToTreatAsEsm: ['.ts'], + rootDir: '../../', + modulePaths: [ + '/scripts/src', + ], + moduleDirectories: [ + '/node_modules', + '/scripts/src', + ], + transform: { + [transformKey]: ['ts-jest', { + ...transforms, + // tsconfig: '/scripts/src/tsconfig.json', + tsconfig: { + allowSyntheticDefaultImports: true, + allowJs: true, + esModuleInterop: true, + module: 'es2022', + moduleResolution: 'node', + resolveJsonModule: true, + target: 'es2022', + }, + }], + }, + // Module Name settings required to make chalk work with jest + moduleNameMapper: { + 'chalk': '/scripts/src/__mocks__/chalk.cjs', + '(.+)\\.js': '$1', + }, + testMatch: [ + '/scripts/src/**/__tests__/**/*.test.ts', + ], + setupFilesAfterEnv: ["/scripts/src/jest.setup.ts"] +}; diff --git a/scripts/src/jest.setup.ts b/scripts/src/jest.setup.ts index fb816c2b0..fe86c3b30 100644 --- a/scripts/src/jest.setup.ts +++ b/scripts/src/jest.setup.ts @@ -1,25 +1,25 @@ -jest.mock('fs/promises', () => ({ - copyFile: jest.fn(() => Promise.resolve()), - mkdir: jest.fn(() => Promise.resolve()), - stat: jest.fn().mockResolvedValue({ size: 10 }), - writeFile: jest.fn(() => Promise.resolve()), -})); - -jest.mock('./scriptUtils', () => ({ - ...jest.requireActual('./scriptUtils'), - retrieveManifest: jest.fn(() => Promise.resolve({ - test0: { - tabs: ['tab0'], - }, - test1: { tabs: [] }, - test2: { - tabs: ['tab1'], - }, - })), -})); - -jest.mock('./build/docs/docUtils'); - -jest.spyOn(process, 'exit').mockImplementation(code => { - throw new Error(`process.exit called with ${code}`) -}); +jest.mock('fs/promises', () => ({ + copyFile: jest.fn(() => Promise.resolve()), + mkdir: jest.fn(() => Promise.resolve()), + stat: jest.fn().mockResolvedValue({ size: 10 }), + writeFile: jest.fn(() => Promise.resolve()), +})); + +jest.mock('./scriptUtils', () => ({ + ...jest.requireActual('./scriptUtils'), + retrieveManifest: jest.fn(() => Promise.resolve({ + test0: { + tabs: ['tab0'], + }, + test1: { tabs: [] }, + test2: { + tabs: ['tab1'], + }, + })), +})); + +jest.mock('./build/docs/docUtils'); + +jest.spyOn(process, 'exit').mockImplementation(code => { + throw new Error(`process.exit called with ${code}`) +}); diff --git a/scripts/src/scriptUtils.ts b/scripts/src/scriptUtils.ts index e0edce3ea..dd3dd0b65 100644 --- a/scripts/src/scriptUtils.ts +++ b/scripts/src/scriptUtils.ts @@ -1,59 +1,59 @@ -import { readFile } from 'fs/promises'; -import { dirname, join } from 'path'; -import { fileURLToPath } from 'url'; - -import type { Severity } from './build/types'; - -export type ModuleManifest = Record; - -export function cjsDirname(url: string) { - return join(dirname(fileURLToPath(url))); -} - -export const retrieveManifest = async (manifest: string) => { - try { - const rawManifest = await readFile(manifest, 'utf-8'); - return JSON.parse(rawManifest) as ModuleManifest; - } catch (error) { - if (error.code === 'ENOENT') throw new Error(`Could not locate manifest file at ${manifest}`); - throw error; - } -}; - -export const wrapWithTimer = Promise>(func: T) => async (...params: Parameters): Promise<{ - elapsed: number, - result: Awaited> -}> => { - const startTime = performance.now(); - const result = await func(...params); - const endTime = performance.now(); - - return { - elapsed: endTime - startTime, - result, - }; -}; - -export const printList = (header: string, lst: T[], mapper?: (each: T) => string, sep: string = '\n') => { - const mappingFunction = mapper || ((each) => { - if (typeof each === 'string') return each; - return `${each}`; - }); - - console.log(`${header}\n${ - lst.map((str, i) => `${i + 1}. ${mappingFunction(str)}`) - .join(sep) - }`); -}; - -export const findSeverity = (items: T[], converter: (item: T) => Severity) => { - let output: Severity = 'success'; - for (const item of items) { - const severity = converter(item); - if (severity === 'error') return 'error'; - if (severity === 'warn') output = 'warn'; - } - return output; -}; +import { readFile } from 'fs/promises'; +import { dirname, join } from 'path'; +import { fileURLToPath } from 'url'; + +import type { Severity } from './build/types'; + +export type ModuleManifest = Record; + +export function cjsDirname(url: string) { + return join(dirname(fileURLToPath(url))); +} + +export const retrieveManifest = async (manifest: string) => { + try { + const rawManifest = await readFile(manifest, 'utf-8'); + return JSON.parse(rawManifest) as ModuleManifest; + } catch (error) { + if (error.code === 'ENOENT') throw new Error(`Could not locate manifest file at ${manifest}`); + throw error; + } +}; + +export const wrapWithTimer = Promise>(func: T) => async (...params: Parameters): Promise<{ + elapsed: number, + result: Awaited> +}> => { + const startTime = performance.now(); + const result = await func(...params); + const endTime = performance.now(); + + return { + elapsed: endTime - startTime, + result, + }; +}; + +export const printList = (header: string, lst: T[], mapper?: (each: T) => string, sep: string = '\n') => { + const mappingFunction = mapper || ((each) => { + if (typeof each === 'string') return each; + return `${each}`; + }); + + console.log(`${header}\n${ + lst.map((str, i) => `${i + 1}. ${mappingFunction(str)}`) + .join(sep) + }`); +}; + +export const findSeverity = (items: T[], converter: (item: T) => Severity) => { + let output: Severity = 'success'; + for (const item of items) { + const severity = converter(item); + if (severity === 'error') return 'error'; + if (severity === 'warn') output = 'warn'; + } + return output; +}; diff --git a/scripts/src/templates/index.ts b/scripts/src/templates/index.ts index 2bbb6fa41..5041c8dfd 100644 --- a/scripts/src/templates/index.ts +++ b/scripts/src/templates/index.ts @@ -1,37 +1,37 @@ -import { Command } from 'commander'; - -import { addNew as addNewModule } from './module.js'; -import { askQuestion, error as _error, info, rl, warn } from './print.js'; -import { addNew as addNewTab } from './tab.js'; -import type { Options } from './utilities.js'; - -async function askMode() { - while (true) { - // eslint-disable-next-line no-await-in-loop - const mode = await askQuestion( - 'What would you like to create? (module/tab)', - ); - if (mode !== 'module' && mode !== 'tab') { - warn("Please answer with only 'module' or 'tab'."); - } else { - return mode; - } - } -} - -export default new Command('create') - .option('--srcDir ', 'Source directory for files', 'src') - .option('--manifest ', 'Manifest file', 'modules.json') - .description('Interactively create a new module or tab') - .action(async (buildOpts: Options) => { - try { - const mode = await askMode(); - if (mode === 'module') await addNewModule(buildOpts); - else if (mode === 'tab') await addNewTab(buildOpts); - } catch (error) { - _error(`ERROR: ${error.message}`); - info('Terminating module app...'); - } finally { - rl.close(); - } - }); +import { Command } from 'commander'; + +import { addNew as addNewModule } from './module.js'; +import { askQuestion, error as _error, info, rl, warn } from './print.js'; +import { addNew as addNewTab } from './tab.js'; +import type { Options } from './utilities.js'; + +async function askMode() { + while (true) { + // eslint-disable-next-line no-await-in-loop + const mode = await askQuestion( + 'What would you like to create? (module/tab)', + ); + if (mode !== 'module' && mode !== 'tab') { + warn("Please answer with only 'module' or 'tab'."); + } else { + return mode; + } + } +} + +export default new Command('create') + .option('--srcDir ', 'Source directory for files', 'src') + .option('--manifest ', 'Manifest file', 'modules.json') + .description('Interactively create a new module or tab') + .action(async (buildOpts: Options) => { + try { + const mode = await askMode(); + if (mode === 'module') await addNewModule(buildOpts); + else if (mode === 'tab') await addNewTab(buildOpts); + } catch (error) { + _error(`ERROR: ${error.message}`); + info('Terminating module app...'); + } finally { + rl.close(); + } + }); diff --git a/scripts/src/templates/module.ts b/scripts/src/templates/module.ts index 1527e58c7..a2bb60c88 100644 --- a/scripts/src/templates/module.ts +++ b/scripts/src/templates/module.ts @@ -1,45 +1,45 @@ -import { promises as fs } from 'fs'; - -import { type ModuleManifest, cjsDirname, retrieveManifest } from '../scriptUtils.js'; - -import { askQuestion, success, warn } from './print.js'; -import { type Options, isSnakeCase } from './utilities.js'; - -export const check = (manifest: ModuleManifest, name: string) => Object.keys(manifest) - .includes(name); - -async function askModuleName(manifest: ModuleManifest) { - while (true) { - // eslint-disable-next-line no-await-in-loop - const name = await askQuestion( - 'What is the name of your new module? (eg. binary_tree)', - ); - if (isSnakeCase(name) === false) { - warn('Module names must be in snake case. (eg. binary_tree)'); - } else if (check(manifest, name)) { - warn('A module with the same name already exists.'); - } else { - return name; - } - } -} - -export async function addNew(buildOpts: Options) { - const manifest = await retrieveManifest(buildOpts.manifest); - const moduleName = await askModuleName(manifest); - - const bundleDestination = `${buildOpts.srcDir}/bundles/${moduleName}`; - await fs.mkdir(bundleDestination, { recursive: true }); - await fs.copyFile( - `${cjsDirname(import.meta.url)}/templates/__bundle__.ts`, - `${bundleDestination}/index.ts`, - ); - await fs.writeFile( - 'modules.json', - JSON.stringify({ - ...manifest, - [moduleName]: { tabs: [] }, - }, null, 2), - ); - success(`Bundle for module ${moduleName} created at ${bundleDestination}.`); -} +import { promises as fs } from 'fs'; + +import { type ModuleManifest, cjsDirname, retrieveManifest } from '../scriptUtils.js'; + +import { askQuestion, success, warn } from './print.js'; +import { type Options, isSnakeCase } from './utilities.js'; + +export const check = (manifest: ModuleManifest, name: string) => Object.keys(manifest) + .includes(name); + +async function askModuleName(manifest: ModuleManifest) { + while (true) { + // eslint-disable-next-line no-await-in-loop + const name = await askQuestion( + 'What is the name of your new module? (eg. binary_tree)', + ); + if (isSnakeCase(name) === false) { + warn('Module names must be in snake case. (eg. binary_tree)'); + } else if (check(manifest, name)) { + warn('A module with the same name already exists.'); + } else { + return name; + } + } +} + +export async function addNew(buildOpts: Options) { + const manifest = await retrieveManifest(buildOpts.manifest); + const moduleName = await askModuleName(manifest); + + const bundleDestination = `${buildOpts.srcDir}/bundles/${moduleName}`; + await fs.mkdir(bundleDestination, { recursive: true }); + await fs.copyFile( + `${cjsDirname(import.meta.url)}/templates/__bundle__.ts`, + `${bundleDestination}/index.ts`, + ); + await fs.writeFile( + 'modules.json', + JSON.stringify({ + ...manifest, + [moduleName]: { tabs: [] }, + }, null, 2), + ); + success(`Bundle for module ${moduleName} created at ${bundleDestination}.`); +} diff --git a/scripts/src/templates/print.ts b/scripts/src/templates/print.ts index 9433dd499..97dbf0abe 100644 --- a/scripts/src/templates/print.ts +++ b/scripts/src/templates/print.ts @@ -1,29 +1,29 @@ -import chalk from 'chalk'; -import { createInterface } from 'readline'; - -export const rl = createInterface({ - input: process.stdin, - output: process.stdout, -}); - -export function info(...args) { - return console.log(...args.map((string) => chalk.grey(string))); -} - -export function error(...args) { - return console.log(...args.map((string) => chalk.red(string))); -} - -export function warn(...args) { - return console.log(...args.map((string) => chalk.yellow(string))); -} - -export function success(...args) { - return console.log(...args.map((string) => chalk.green(string))); -} - -export function askQuestion(question: string) { - return new Promise((resolve) => { - rl.question(chalk.blueBright(`${question}\n`), resolve); - }); -} +import chalk from 'chalk'; +import { createInterface } from 'readline'; + +export const rl = createInterface({ + input: process.stdin, + output: process.stdout, +}); + +export function info(...args) { + return console.log(...args.map((string) => chalk.grey(string))); +} + +export function error(...args) { + return console.log(...args.map((string) => chalk.red(string))); +} + +export function warn(...args) { + return console.log(...args.map((string) => chalk.yellow(string))); +} + +export function success(...args) { + return console.log(...args.map((string) => chalk.green(string))); +} + +export function askQuestion(question: string) { + return new Promise((resolve) => { + rl.question(chalk.blueBright(`${question}\n`), resolve); + }); +} diff --git a/scripts/src/templates/tab.ts b/scripts/src/templates/tab.ts index 5b4101a3e..65b31a02e 100644 --- a/scripts/src/templates/tab.ts +++ b/scripts/src/templates/tab.ts @@ -1,69 +1,69 @@ -/* eslint-disable no-await-in-loop */ -import { promises as fs } from 'fs'; - -import { type ModuleManifest, cjsDirname, retrieveManifest } from '../scriptUtils.js'; - -import { check as _check } from './module.js'; -import { askQuestion, success, warn } from './print.js'; -import { type Options, isPascalCase } from './utilities.js'; - -export function check(manifest: ModuleManifest, tabName: string) { - return Object.values(manifest) - .flatMap((x) => x.tabs) - .includes(tabName); -} - -async function askModuleName(manifest: ModuleManifest) { - while (true) { - const name = await askQuestion('Add a new tab to which module?'); - if (!_check(manifest, name)) { - warn(`Module ${name} does not exist.`); - } else { - return name; - } - } -} - -async function askTabName(manifest: ModuleManifest) { - while (true) { - const name = await askQuestion( - 'What is the name of your new tab? (eg. BinaryTree)', - ); - if (!isPascalCase(name)) { - warn('Tab names must be in pascal case. (eg. BinaryTree)'); - } else if (check(manifest, name)) { - warn('A tab with the same name already exists.'); - } else { - return name; - } - } -} - -export async function addNew(buildOpts: Options) { - const manifest = await retrieveManifest(buildOpts.manifest); - - const moduleName = await askModuleName(manifest); - const tabName = await askTabName(manifest); - - // Copy module tab template into correct destination and show success message - const tabDestination = `${buildOpts.srcDir}/tabs/${tabName}`; - await fs.mkdir(tabDestination, { recursive: true }); - await fs.copyFile( - `${cjsDirname(import.meta.url)}/templates/__tab__.tsx`, - `${tabDestination}/index.tsx`, - ); - await fs.writeFile( - 'modules.json', - JSON.stringify( - { - ...manifest, - [moduleName]: { tabs: [...manifest[moduleName].tabs, tabName] }, - }, - null, - 2, - ), - ); - success( - `Tab ${tabName} for module ${moduleName} created at ${tabDestination}.`, - ); -} +/* eslint-disable no-await-in-loop */ +import { promises as fs } from 'fs'; + +import { type ModuleManifest, cjsDirname, retrieveManifest } from '../scriptUtils.js'; + +import { check as _check } from './module.js'; +import { askQuestion, success, warn } from './print.js'; +import { type Options, isPascalCase } from './utilities.js'; + +export function check(manifest: ModuleManifest, tabName: string) { + return Object.values(manifest) + .flatMap((x) => x.tabs) + .includes(tabName); +} + +async function askModuleName(manifest: ModuleManifest) { + while (true) { + const name = await askQuestion('Add a new tab to which module?'); + if (!_check(manifest, name)) { + warn(`Module ${name} does not exist.`); + } else { + return name; + } + } +} + +async function askTabName(manifest: ModuleManifest) { + while (true) { + const name = await askQuestion( + 'What is the name of your new tab? (eg. BinaryTree)', + ); + if (!isPascalCase(name)) { + warn('Tab names must be in pascal case. (eg. BinaryTree)'); + } else if (check(manifest, name)) { + warn('A tab with the same name already exists.'); + } else { + return name; + } + } +} + +export async function addNew(buildOpts: Options) { + const manifest = await retrieveManifest(buildOpts.manifest); + + const moduleName = await askModuleName(manifest); + const tabName = await askTabName(manifest); + + // Copy module tab template into correct destination and show success message + const tabDestination = `${buildOpts.srcDir}/tabs/${tabName}`; + await fs.mkdir(tabDestination, { recursive: true }); + await fs.copyFile( + `${cjsDirname(import.meta.url)}/templates/__tab__.tsx`, + `${tabDestination}/index.tsx`, + ); + await fs.writeFile( + 'modules.json', + JSON.stringify( + { + ...manifest, + [moduleName]: { tabs: [...manifest[moduleName].tabs, tabName] }, + }, + null, + 2, + ), + ); + success( + `Tab ${tabName} for module ${moduleName} created at ${tabDestination}.`, + ); +} diff --git a/scripts/src/templates/utilities.ts b/scripts/src/templates/utilities.ts index 62239c25c..449d6e428 100644 --- a/scripts/src/templates/utilities.ts +++ b/scripts/src/templates/utilities.ts @@ -1,17 +1,17 @@ -// Snake case regex has been changed from `/\b[a-z]+(?:_[a-z]+)*\b/u` to `/\b[a-z0-9]+(?:_[a-z0-9]+)*\b/u` -// to be consistent with the naming of the `arcade_2d` and `physics_2d` modules. -// This change should not affect other modules, since the set of possible names is only expanded. -const snakeCaseRegex = /\b[a-z0-9]+(?:_[a-z0-9]+)*\b/u; -const pascalCaseRegex = /^[A-Z][a-z]+(?:[A-Z][a-z]+)*$/u; - -export function isSnakeCase(string: string) { - return snakeCaseRegex.test(string); -} - -export function isPascalCase(string: string) { - return pascalCaseRegex.test(string); -} -export type Options = { - srcDir: string; - manifest: string; -}; +// Snake case regex has been changed from `/\b[a-z]+(?:_[a-z]+)*\b/u` to `/\b[a-z0-9]+(?:_[a-z0-9]+)*\b/u` +// to be consistent with the naming of the `arcade_2d` and `physics_2d` modules. +// This change should not affect other modules, since the set of possible names is only expanded. +const snakeCaseRegex = /\b[a-z0-9]+(?:_[a-z0-9]+)*\b/u; +const pascalCaseRegex = /^[A-Z][a-z]+(?:[A-Z][a-z]+)*$/u; + +export function isSnakeCase(string: string) { + return snakeCaseRegex.test(string); +} + +export function isPascalCase(string: string) { + return pascalCaseRegex.test(string); +} +export type Options = { + srcDir: string; + manifest: string; +}; diff --git a/src/bundles/arcade_2d/audio.ts b/src/bundles/arcade_2d/audio.ts index 1cd3703ec..43f792f7c 100644 --- a/src/bundles/arcade_2d/audio.ts +++ b/src/bundles/arcade_2d/audio.ts @@ -1,88 +1,88 @@ -/** - * This file contains Arcade2D's representation of audio clips and sound. - */ - -/** - * Encapsulates the representation of AudioClips. - * AudioClips are unique - there are no AudioClips with the same URL. - */ -export class AudioClip { - private static audioClipCount: number = 0; - // Stores AudioClip index with the URL as a unique key. - private static audioClipsIndexMap: Map = new Map(); - // Stores all the created AudioClips - private static audioClipsArray: Array = []; - public readonly id: number; - - private isUpdated: boolean = false; - private shouldPlay: boolean = false; - private shouldLoop: boolean = false; - - private constructor( - private url: string, - private volumeLevel: number, - ) { - this.id = AudioClip.audioClipCount++; - AudioClip.audioClipsIndexMap.set(url, this.id); - AudioClip.audioClipsArray.push(this); - } - - /** - * Factory method to create new AudioClip if unique URL provided. - * Otherwise returns the previously created AudioClip. - */ - public static of(url: string, volumeLevel: number): AudioClip { - if (url === '') { - throw new Error('AudioClip URL cannot be empty'); - } - if (AudioClip.audioClipsIndexMap.has(url)) { - return AudioClip.audioClipsArray[AudioClip.audioClipsIndexMap.get(url) as number]; - } - return new AudioClip(url, volumeLevel); - } - public getUrl() { - return this.url; - } - public getVolumeLevel() { - return this.volumeLevel; - } - public shouldAudioClipLoop() { - return this.shouldLoop; - } - public shouldAudioClipPlay() { - return this.shouldPlay; - } - public setShouldAudioClipLoop(loop: boolean) { - if (this.shouldLoop !== loop) { - this.shouldLoop = loop; - this.isUpdated = false; - } - } - /** - * Updates the play/pause state. - * @param play When true, the Audio Clip has a playing state. - */ - public setShouldAudioClipPlay(play: boolean) { - this.shouldPlay = play; - this.isUpdated = false; - } - /** - * Checks if the Audio Clip needs to update. Updates the flag if true. - */ - public hasAudioClipUpdates() { - const prevValue = !this.isUpdated; - this.setAudioClipUpdated(); - return prevValue; - } - public setAudioClipUpdated() { - this.isUpdated = true; - } - public static getAudioClipsArray() { - return AudioClip.audioClipsArray; - } - - public toReplString = () => ''; - - /** @override */ - public toString = () => this.toReplString(); -} +/** + * This file contains Arcade2D's representation of audio clips and sound. + */ + +/** + * Encapsulates the representation of AudioClips. + * AudioClips are unique - there are no AudioClips with the same URL. + */ +export class AudioClip { + private static audioClipCount: number = 0; + // Stores AudioClip index with the URL as a unique key. + private static audioClipsIndexMap: Map = new Map(); + // Stores all the created AudioClips + private static audioClipsArray: Array = []; + public readonly id: number; + + private isUpdated: boolean = false; + private shouldPlay: boolean = false; + private shouldLoop: boolean = false; + + private constructor( + private url: string, + private volumeLevel: number, + ) { + this.id = AudioClip.audioClipCount++; + AudioClip.audioClipsIndexMap.set(url, this.id); + AudioClip.audioClipsArray.push(this); + } + + /** + * Factory method to create new AudioClip if unique URL provided. + * Otherwise returns the previously created AudioClip. + */ + public static of(url: string, volumeLevel: number): AudioClip { + if (url === '') { + throw new Error('AudioClip URL cannot be empty'); + } + if (AudioClip.audioClipsIndexMap.has(url)) { + return AudioClip.audioClipsArray[AudioClip.audioClipsIndexMap.get(url) as number]; + } + return new AudioClip(url, volumeLevel); + } + public getUrl() { + return this.url; + } + public getVolumeLevel() { + return this.volumeLevel; + } + public shouldAudioClipLoop() { + return this.shouldLoop; + } + public shouldAudioClipPlay() { + return this.shouldPlay; + } + public setShouldAudioClipLoop(loop: boolean) { + if (this.shouldLoop !== loop) { + this.shouldLoop = loop; + this.isUpdated = false; + } + } + /** + * Updates the play/pause state. + * @param play When true, the Audio Clip has a playing state. + */ + public setShouldAudioClipPlay(play: boolean) { + this.shouldPlay = play; + this.isUpdated = false; + } + /** + * Checks if the Audio Clip needs to update. Updates the flag if true. + */ + public hasAudioClipUpdates() { + const prevValue = !this.isUpdated; + this.setAudioClipUpdated(); + return prevValue; + } + public setAudioClipUpdated() { + this.isUpdated = true; + } + public static getAudioClipsArray() { + return AudioClip.audioClipsArray; + } + + public toReplString = () => ''; + + /** @override */ + public toString = () => this.toReplString(); +} diff --git a/src/bundles/arcade_2d/constants.ts b/src/bundles/arcade_2d/constants.ts index 48bfed350..96b76b991 100644 --- a/src/bundles/arcade_2d/constants.ts +++ b/src/bundles/arcade_2d/constants.ts @@ -1,46 +1,46 @@ -// This file contains the default values of the game canvas and GameObjects. - -import { type InteractableProps, type RenderProps, type TransformProps } from './types'; - -// Default values of game -export const DEFAULT_WIDTH: number = 600; -export const DEFAULT_HEIGHT: number = 600; -export const DEFAULT_SCALE: number = 1; -export const DEFAULT_FPS: number = 30; -export const DEFAULT_VOLUME: number = 0.5; // Unused - -// Interval of allowed values of game -export const MAX_HEIGHT: number = 1000; -export const MIN_HEIGHT: number = 100; -export const MAX_WIDTH: number = 1000; -export const MIN_WIDTH: number = 100; -export const MAX_SCALE: number = 10; -export const MIN_SCALE: number = 0.1; -export const MAX_FPS: number = 120; -export const MIN_FPS: number = 1; -export const MAX_VOLUME: number = 1; -export const MIN_VOLUME: number = 0; - -// A mode where the hitboxes is shown in the canvas for debugging purposes, -// and debug log information -export const DEFAULT_DEBUG_STATE: boolean = false; - -// Default values for GameObject properties -export const DEFAULT_TRANSFORM_PROPS: TransformProps = { - position: [0, 0], - scale: [1, 1], - rotation: 0, -}; - -export const DEFAULT_RENDER_PROPS: RenderProps = { - color: [255, 255, 255, 255], - flip: [false, false], - isVisible: true, -}; - -export const DEFAULT_INTERACTABLE_PROPS: InteractableProps = { - isHitboxActive: true, -}; - -// Default values of Phaser scene -export const DEFAULT_PATH_PREFIX: string = 'https://source-academy-assets.s3-ap-southeast-1.amazonaws.com/'; +// This file contains the default values of the game canvas and GameObjects. + +import { type InteractableProps, type RenderProps, type TransformProps } from './types'; + +// Default values of game +export const DEFAULT_WIDTH: number = 600; +export const DEFAULT_HEIGHT: number = 600; +export const DEFAULT_SCALE: number = 1; +export const DEFAULT_FPS: number = 30; +export const DEFAULT_VOLUME: number = 0.5; // Unused + +// Interval of allowed values of game +export const MAX_HEIGHT: number = 1000; +export const MIN_HEIGHT: number = 100; +export const MAX_WIDTH: number = 1000; +export const MIN_WIDTH: number = 100; +export const MAX_SCALE: number = 10; +export const MIN_SCALE: number = 0.1; +export const MAX_FPS: number = 120; +export const MIN_FPS: number = 1; +export const MAX_VOLUME: number = 1; +export const MIN_VOLUME: number = 0; + +// A mode where the hitboxes is shown in the canvas for debugging purposes, +// and debug log information +export const DEFAULT_DEBUG_STATE: boolean = false; + +// Default values for GameObject properties +export const DEFAULT_TRANSFORM_PROPS: TransformProps = { + position: [0, 0], + scale: [1, 1], + rotation: 0, +}; + +export const DEFAULT_RENDER_PROPS: RenderProps = { + color: [255, 255, 255, 255], + flip: [false, false], + isVisible: true, +}; + +export const DEFAULT_INTERACTABLE_PROPS: InteractableProps = { + isHitboxActive: true, +}; + +// Default values of Phaser scene +export const DEFAULT_PATH_PREFIX: string = 'https://source-academy-assets.s3-ap-southeast-1.amazonaws.com/'; diff --git a/src/bundles/arcade_2d/functions.ts b/src/bundles/arcade_2d/functions.ts index f35ec1292..e47236966 100644 --- a/src/bundles/arcade_2d/functions.ts +++ b/src/bundles/arcade_2d/functions.ts @@ -1,933 +1,933 @@ -/** - * The module `arcade_2d` is a wrapper for the Phaser.io game engine. - * It provides functions for manipulating GameObjects in a canvas. - * - * A *GameObject* is defined by its transform and rendered object. - * - * @module arcade_2d - * @author Titus Chew Xuan Jun - * @author Xenos Fiorenzo Anong - */ - -import Phaser from 'phaser'; -import { - PhaserScene, - gameState, -} from './phaserScene'; -import { - GameObject, - RenderableGameObject, - type ShapeGameObject, - SpriteGameObject, - TextGameObject, - RectangleGameObject, - CircleGameObject, - TriangleGameObject, InteractableGameObject, -} from './gameobject'; -import { - type DisplayText, - type BuildGame, - type Sprite, - type UpdateFunction, - type RectangleProps, - type CircleProps, - type TriangleProps, - type FlipXY, - type ScaleXY, - type PositionXY, - type DimensionsXY, - type ColorRGBA, -} from './types'; -import { - DEFAULT_WIDTH, - DEFAULT_HEIGHT, - DEFAULT_SCALE, - DEFAULT_FPS, - MAX_HEIGHT, - MIN_HEIGHT, - MAX_WIDTH, - MIN_WIDTH, - MAX_SCALE, - MIN_SCALE, - MAX_FPS, - MIN_FPS, - MAX_VOLUME, - MIN_VOLUME, - DEFAULT_DEBUG_STATE, - DEFAULT_TRANSFORM_PROPS, - DEFAULT_RENDER_PROPS, - DEFAULT_INTERACTABLE_PROPS, -} from './constants'; -import { AudioClip } from './audio'; - -// ============================================================================= -// Global Variables -// ============================================================================= - -// Configuration for game initialization. -export const config = { - width: DEFAULT_WIDTH, - height: DEFAULT_HEIGHT, - scale: DEFAULT_SCALE, - fps: DEFAULT_FPS, - isDebugEnabled: DEFAULT_DEBUG_STATE, - // User update function - userUpdateFunction: (() => {}) as UpdateFunction, -}; - -// ============================================================================= -// Creation of GameObjects -// ============================================================================= - -/** - * Creates a RectangleGameObject that takes in rectangle shape properties. - * - * @param width The width of the rectangle - * @param height The height of the rectangle - * @example - * ``` - * const rectangle = create_rectangle(100, 100); - * ``` - * @category GameObject - */ -export const create_rectangle: (width: number, height: number) => ShapeGameObject = (width: number, height: number) => { - const rectangle = { - width, - height, - } as RectangleProps; - return new RectangleGameObject(DEFAULT_TRANSFORM_PROPS, DEFAULT_RENDER_PROPS, DEFAULT_INTERACTABLE_PROPS, rectangle); -}; - -/** - * Creates a CircleGameObject that takes in circle shape properties. - * - * @param width The width of the rectangle - * @param height The height of the rectangle - * ``` - * const circle = create_circle(100); - * ``` - * @category GameObject - */ -export const create_circle: (radius: number) => ShapeGameObject = (radius: number) => { - const circle = { - radius, - } as CircleProps; - return new CircleGameObject(DEFAULT_TRANSFORM_PROPS, DEFAULT_RENDER_PROPS, DEFAULT_INTERACTABLE_PROPS, circle); -}; - -/** - * Creates a TriangleGameObject that takes in an downright isosceles triangle shape properties. - * - * @param width The width of the isosceles triangle - * @param height The height of the isosceles triangle - * ``` - * const triangle = create_triangle(100, 100); - * ``` - * @category GameObject - */ -export const create_triangle: (width: number, height: number) => ShapeGameObject = (width: number, height: number) => { - const triangle = { - x1: 0, - y1: 0, - x2: width, - y2: 0, - x3: width / 2, - y3: height, - } as TriangleProps; - return new TriangleGameObject(DEFAULT_TRANSFORM_PROPS, DEFAULT_RENDER_PROPS, DEFAULT_INTERACTABLE_PROPS, triangle); -}; - -/** - * Creates a GameObject that contains a text reference. - * - * @param text Text string displayed - * @example - * ``` - * const helloworld = create_text("Hello\nworld!"); - * ``` - * @category GameObject - */ -export const create_text: (text: string) => TextGameObject = (text: string) => { - const displayText = { - text, - } as DisplayText; - return new TextGameObject(DEFAULT_TRANSFORM_PROPS, DEFAULT_RENDER_PROPS, DEFAULT_INTERACTABLE_PROPS, displayText); -}; - -/** - * Creates a GameObject that contains a Sprite image reference. - * Source Academy assets can be used by specifying path without the prepend. - * Source Academy assets can be found at https://source-academy-assets.s3-ap-southeast-1.amazonaws.com/ with Ctrl+f ".png". - * Phaser assets can be found at https://labs.phaser.io/assets/. - * If Phaser assets are unavailable, go to https://github.com/photonstorm/phaser3-examples/tree/master/public/assets - * to get the asset path and append it to `https://labs.phaser.io/assets/`. - * Assets from other websites can also be used if they support Cross-Origin Resource Sharing (CORS), but the full path must be specified. - * - * @param image_url The image URL of the sprite - * @example - * ``` - * const shortpath = create_sprite("objects/cmr/splendall.png"); - * const fullpath = create_sprite("https://source-academy-assets.s3-ap-southeast-1.amazonaws.com/objects/cmr/splendall.png"); - * ``` - * @category GameObject - */ -export const create_sprite: (image_url: string) => SpriteGameObject = (image_url: string) => { - if (image_url === '') { - throw new Error('image_url cannot be empty'); - } - if (typeof image_url !== 'string') { - throw new Error('image_url must be a string'); - } - const sprite: Sprite = { - imageUrl: image_url, - } as Sprite; - return new SpriteGameObject(DEFAULT_TRANSFORM_PROPS, DEFAULT_RENDER_PROPS, DEFAULT_INTERACTABLE_PROPS, sprite); -}; - -// ============================================================================= -// Manipulation of GameObjects -// ============================================================================= - -/** - * Updates the position transform of the GameObject. - * - * @param gameObject GameObject reference - * @param coordinates [x, y] coordinates of new position - * @returns the GameObject reference passed in - * @example - * ``` - * update_position(create_text("Hello world!"), [1, 2]); - * ``` - * @category GameObject - */ -export const update_position: (gameObject: GameObject, [x, y]: PositionXY) => GameObject -= (gameObject: GameObject, [x, y]: PositionXY) => { - if (gameObject instanceof GameObject) { - gameObject.setTransform({ - ...gameObject.getTransform(), - position: [x, y], - }); - return gameObject; - } - throw new TypeError('Cannot update position of a non-GameObject'); -}; - -/** - * Updates the scale transform of the GameObject. - * - * @param gameObject GameObject reference - * @param scale [x, y] scale of the size of the GameObject - * @returns the GameObject reference passed in - * @example - * ``` - * update_scale(create_text("Hello world!"), [2, 0.5]); - * ``` - * @category GameObject - */ -export const update_scale: (gameObject: GameObject, [x, y]: ScaleXY) => GameObject -= (gameObject: GameObject, [x, y]: ScaleXY) => { - if (gameObject instanceof GameObject) { - gameObject.setTransform({ - ...gameObject.getTransform(), - scale: [x, y], - }); - return gameObject; - } - throw new TypeError('Cannot update scale of a non-GameObject'); -}; - -/** - * Updates the rotation transform of the GameObject. - * - * @param gameObject GameObject reference - * @param radians The value in radians to rotate the GameObject clockwise by - * @returns the GameObject reference passed in - * @example - * ``` - * update_rotation(create_text("Hello world!"), math_PI); - * ``` - * @category GameObject - */ -export const update_rotation: (gameObject: GameObject, radians: number) => GameObject -= (gameObject: GameObject, radians: number) => { - if (gameObject instanceof GameObject) { - gameObject.setTransform({ - ...gameObject.getTransform(), - rotation: radians, - }); - return gameObject; - } - throw new TypeError('Cannot update rotation of a non-GameObject'); -}; - -/** - * Updates the color of the GameObject. - * Note that the value is modulo 256, so passing values greater than 255 is allowed. - * - * @param gameObject GameObject reference - * @param color The color as an RGBA array, with RGBA values ranging from 0 to 255. - * @returns the GameObject reference passed in - * @example - * ``` - * update_color(create_rectangle(100, 100), [255, 0, 0, 255]); - * ``` - * @category GameObject - */ -export const update_color: (gameObject: GameObject, color: ColorRGBA) => GameObject -= (gameObject: GameObject, color: ColorRGBA) => { - if (color.length !== 4) { - throw new Error('color must be a 4-element array'); - } - if (gameObject instanceof RenderableGameObject) { - gameObject.setRenderState({ - ...gameObject.getRenderState(), - color, - }); - return gameObject; - } - throw new TypeError('Cannot update color of a non-GameObject'); -}; - -/** - * Updates the flip state of the GameObject. - * - * @param gameObject GameObject reference - * @param flip The [x, y] flip state as a boolean array - * @returns the GameObject reference passed in - * @example - * ``` - * update_flip(create_triangle(100, 100), [false, true]); - * ``` - * @category GameObject - */ -export const update_flip: (gameObject: GameObject, flip: FlipXY) => GameObject -= (gameObject: GameObject, flip: FlipXY) => { - if (flip.length !== 2) { - throw new Error('flip must be a 2-element array'); - } - if (gameObject instanceof RenderableGameObject) { - gameObject.setRenderState({ - ...gameObject.getRenderState(), - flip, - }); - return gameObject; - } - throw new TypeError('Cannot update flip of a non-GameObject'); -}; - -/** - * Updates the text of the TextGameObject. - * - * @param textGameObject TextGameObject reference - * @param text The updated text of the TextGameObject - * @returns the GameObject reference passed in - * @throws Error if not a TextGameObject is passed in - * @example - * ``` - * update_text(create_text("Hello world!"), "Goodbye world!"); - * ``` - * @category GameObject - */ -export const update_text: (textGameObject: TextGameObject, text: string) => GameObject -= (textGameObject: TextGameObject, text: string) => { - if (textGameObject instanceof TextGameObject) { - textGameObject.setText({ - text, - } as DisplayText); - return textGameObject; - } - throw new TypeError('Cannot update text onto a non-TextGameObject'); -}; - -/** - * Renders this GameObject in front of all other GameObjects. - * - * @param gameObject GameObject reference - * @example - * ``` - * update_to_top(create_text("Hello world!")); - * ``` - * @category GameObject - */ -export const update_to_top: (gameObject: GameObject) => GameObject -= (gameObject: GameObject) => { - if (gameObject instanceof RenderableGameObject) { - gameObject.setBringToTopFlag(); - return gameObject; - } - throw new TypeError('Cannot update to top a non-GameObject'); -}; - -// ============================================================================= -// Querying of GameObjects -// ============================================================================= - -/** - * Queries the id of the GameObject. - * The id of a GameObject is in the order of creation, starting from 0. - * - * @param gameObject GameObject reference - * @returns the id of the GameObject reference - * @example - * ``` - * const id0 = create_text("This has id 0"); - * const id1 = create_text("This has id 1"); - * const id2 = create_text("This has id 2"); - * queryGameObjectId(id2); - * ``` - * @category GameObject - */ -export const query_id: (gameObject: GameObject) => number = (gameObject: GameObject) => { - if (gameObject instanceof GameObject) { - return gameObject.id; - } - throw new TypeError('Cannot query id of non-GameObject'); -}; - -/** - * Queries the [x, y] position transform of the GameObject. - * - * @param gameObject GameObject reference - * @returns [x, y] position as an array - * @example - * ``` - * const gameobject = update_position(create_circle(100), [100, 100]); - * query_position(gameobject); - * ``` - * @category GameObject - */ -export const query_position: (gameObject: GameObject) => PositionXY -= (gameObject: GameObject) => { - if (gameObject instanceof GameObject) { - return [...gameObject.getTransform().position]; - } - throw new TypeError('Cannot query position of non-GameObject'); -}; - -/** - * Queries the z-rotation transform of the GameObject. - * - * @param gameObject GameObject reference - * @returns z-rotation as a number in radians - * @example - * ``` - * const gameobject = update_rotation(create_rectangle(100, 200), math_PI / 4); - * query_rotation(gameobject); - * ``` - * @category GameObject - */ -export const query_rotation: (gameObject: GameObject) => number -= (gameObject: GameObject) => { - if (gameObject instanceof GameObject) { - return gameObject.getTransform().rotation; - } - throw new TypeError('Cannot query rotation of non-GameObject'); -}; - -/** - * Queries the [x, y] scale transform of the GameObject. - * - * @param gameObject GameObject reference - * @returns [x, y] scale as an array - * @example - * ``` - * const gameobject = update_scale(create_circle(100), [2, 0.5]); - * query_scale(gameobject); - * ``` - * @category GameObject - */ -export const query_scale: (gameObject: GameObject) => ScaleXY -= (gameObject: GameObject) => { - if (gameObject instanceof GameObject) { - return [...gameObject.getTransform().scale]; - } - throw new TypeError('Cannot query scale of non-GameObject'); -}; - -/** - * Queries the [r, g, b, a] color property of the GameObject. - * - * @param gameObject GameObject reference - * @returns [r, g, b, a] color as an array - * @example - * ``` - * const gameobject = update_color(create_circle(100), [255, 127, 127, 255]); - * query_color(gameobject); - * ``` - * @category GameObject - */ -export const query_color: (gameObject: RenderableGameObject) => ColorRGBA -= (gameObject: RenderableGameObject) => { - if (gameObject instanceof RenderableGameObject) { - return [...gameObject.getColor()]; - } - throw new TypeError('Cannot query color of non-GameObject'); -}; - -/** - * Queries the [x, y] flip property of the GameObject. - * - * @param gameObject GameObject reference - * @returns [x, y] flip state as an array - * @example - * ``` - * const gameobject = update_flip(create_triangle(100), [false, true]); - * query_flip(gameobject); - * ``` - * @category GameObject - */ -export const query_flip: (gameObject: RenderableGameObject) => FlipXY -= (gameObject: RenderableGameObject) => { - if (gameObject instanceof RenderableGameObject) { - return [...gameObject.getFlipState()]; - } - throw new TypeError('Cannot query flip of non-GameObject'); -}; - -/** - * Queries the text of a Text GameObject. - * - * @param textGameObject TextGameObject reference - * @returns text string associated with the Text GameObject - * @throws Error if not a TextGameObject is passed in - * @example - * ``` - * const text = create_text("Hello World!"); - * query_text(text); - * ``` - * @category GameObject - */ -export const query_text: (textGameObject: TextGameObject) => string -= (textGameObject: TextGameObject) => { - if (textGameObject instanceof TextGameObject) { - return textGameObject.getText().text; - } - throw new TypeError('Cannot query text of non-TextGameObject'); -}; - -/** - * Queries the (mouse) pointer position. - * - * @returns [x, y] coordinates of the pointer as an array - * @example - * ``` - * const position = query_pointer_position(); - * position[0]; // x - * position[1]; // y - * ``` - */ -export const query_pointer_position: () => PositionXY -= () => gameState.pointerProps.pointerPosition; - -// ============================================================================= -// Game configuration -// ============================================================================= - -/** - * Private function to set the allowed range for a value. - * - * @param num the numeric value - * @param min the minimum value allowed for that number - * @param max the maximum value allowed for that number - * @returns a number within the interval - * @hidden - */ -const withinRange: (num: number, min: number, max: number) => number -= (num: number, min: number, max: number) => { - if (num > max) { - return max; - } - if (num < min) { - return min; - } - return num; -}; - -/** - * Sets the frames per second of the canvas, which should be between the MIN_FPS and MAX_FPS. - * It ranges between 1 and 120, with the default target as 30. - * This function should not be called in the update function. - * - * @param fps The frames per second of canvas to set. - * @example - * ``` - * // set fps to 60 - * set_fps(60); - * ``` - */ -export const set_fps: (fps: number) => void = (fps: number) => { - config.fps = withinRange(fps, MIN_FPS, MAX_FPS); -}; - -/** - * Sets the dimensions of the canvas, which should be between the - * min and max widths and height. - * - * @param dimensions An array containing [width, height] of the canvas. - * @example - * ``` - * // set the width as 500 and height as 400 - * set_dimensions([500, 400]); - * ``` - */ -export const set_dimensions: (dimensions: DimensionsXY) => void = (dimensions: DimensionsXY) => { - if (dimensions.length !== 2) { - throw new Error('dimensions must be a 2-element array'); - } - config.width = withinRange(dimensions[0], MIN_WIDTH, MAX_WIDTH); - config.height = withinRange(dimensions[1], MIN_HEIGHT, MAX_HEIGHT); -}; - -/** - * Sets the scale (zoom) of the pixels in the canvas. - * If scale is doubled, then the number of units across would be halved. - * This has a side effect of making the game pixelated if scale > 1. - * The default scale is 1. - * - * @param scale The scale of the canvas to set. - * @example - * ``` - * // sets the scale of the canvas to 2. - * set_scale(2); - * ``` - */ -export const set_scale: (scale: number) => void = (scale: number) => { - config.scale = withinRange(scale, MIN_SCALE, MAX_SCALE); -}; - -/** - * Enables debug mode. - * Hit box interaction between pointer and GameObjects are shown with a green outline in debug mode. - * Hit box interaction between GameObjects is based off a rectangular area instead, which is not reflected. - * debug_log(...) information is shown on the top-left corner of the canvas. - * - * @example - * ``` - * enable_debug(); - * update_loop(game_state => { - * debug_log(get_game_time()); - * }); - * ``` - */ -export const enable_debug: () => void = () => { - config.isDebugEnabled = true; -}; - - -/** - * Logs any information passed into it within the `update_loop`. - * Displays the information in the top-left corner of the canvas only if debug mode is enabled. - * Calling `display` within the `update_loop` function will not work as intended, so use `debug_log` instead. - * - * @param info The information to log. - * @example - * ``` - * enable_debug(); - * update_loop(game_state => { - * debug_log(get_game_time()); - * }); - * ``` - */ -export const debug_log: (info: string) => void = (info: string) => { - if (config.isDebugEnabled) { - gameState.debugLogArray.push(info); - } -}; - -// ============================================================================= -// Game loop -// ============================================================================= - -/** - * Detects if a key input is pressed down. - * This function must be called in your update function to detect inputs. - * To get specific keys, go to https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key#result. - * - * @param key_name The key name of the key. - * @returns True, in the frame the key is pressed down. - * @example - * ``` - * if (input_key_down("a")) { - * // "a" key is pressed down - * } - * ``` - * @category Logic - */ -export const input_key_down: (key_name: string) => boolean = (key_name: string) => gameState.inputKeysDown.has(key_name); - -/** - * Detects if the left mouse button is pressed down. - * This function should be called in your update function. - * - * @returns True, if the left mouse button is pressed down. - * @example - * ``` - * if(input_left_mouse_down()) { - * // Left mouse button down - * } - * ``` - * @category Logic - */ -export const input_left_mouse_down: () => boolean = () => gameState.pointerProps.isPointerPrimaryDown; - -/** - * Detects if the right mouse button is pressed down. - * This function should be called in your update function. - * - * @returns True, if the right mouse button is pressed down. - * @example - * ``` - * if (input_right_mouse_down()) { - * // Right mouse button down - * } - * ``` - * @category Logic - */ -export const input_right_mouse_down: () => boolean = () => gameState.pointerProps.isPointerSecondaryDown; - -/** - * Detects if the (mouse) pointer is over the gameobject. - * This function should be called in your update function. - * - * @param gameObject The gameobject reference. - * @returns True, if the pointer is over the gameobject. - * @example - * ``` - * // Creating a button using a gameobject - * const button = createTextGameObject("click me"); - * // Test if button is clicked - * if (pointer_over_gameobject(button) && input_left_mouse_down()) { - * // Button is clicked - * } - * ``` - * @category Logic - */ -export const pointer_over_gameobject = (gameObject: GameObject) => { - if (gameObject instanceof GameObject) { - return gameState.pointerProps.pointerOverGameObjectsId.has(gameObject.id); - } - throw new TypeError('Cannot check pointer over non-GameObject'); -}; -/** - * Checks if two gameobjects overlap with each other, using a rectangular bounding box. - * This bounding box is rectangular, for all GameObjects. - * This function should be called in your update function. - * - * @param gameObject1 The first gameobject reference. - * @param gameObject2 The second gameobject reference. - * @returns True, if both gameobjects overlap with each other. - * @example - * ``` - * const rectangle1 = create_rectangle(100, 100); - * const rectangle2 = create_rectangle(100, 100); - * if (gameobjects_overlap(rectangle1, rectangle2)) { - * // Both rectangles overlap - * } - * ``` - * @category Logic - */ -export const gameobjects_overlap: (gameObject1: InteractableGameObject, gameObject2: InteractableGameObject) => boolean -= (gameObject1: InteractableGameObject, gameObject2: InteractableGameObject) => { - if (gameObject1 instanceof InteractableGameObject && gameObject2 instanceof InteractableGameObject) { - return gameObject1.isOverlapping(gameObject2); - } - throw new TypeError('Cannot check overlap of non-GameObject'); -}; -/** - * Gets the current in-game time, which is based off the start time. - * This function should be called in your update function. - * - * @returns a number specifying the time in milliseconds - * @example - * ``` - * if (get_game_time() > 100) { - * // Do something after 100 milliseconds - * } - * ``` - */ -export const get_game_time: () => number = () => gameState.gameTime; - -/** - * Gets the current loop count, which is the number of frames that have run. - * Depends on the framerate set for how fast this changes. - * This function should be called in your update function. - * - * @returns a number specifying number of loops that have been run. - * @example - * ``` - * if (get_loop_count() === 100) { - * // Do something on the 100th frame - * } - * ``` - */ -export const get_loop_count: () => number = () => gameState.loopCount; - -/** - * This sets the update loop in the canvas. - * The update loop is run once per frame, so it depends on the fps set for the number of times this loop is run. - * There should only be one update_loop called. - * All game logic should be handled within your update_function. - * You cannot create GameObjects inside the update_loop. - * game_state is an array that can be modified to store anything. - * - * @param update_function A user-defined update_function, that takes in an array as a parameter. - * @example - * ``` - * // Create gameobjects outside update_loop - * update_loop((game_state) => { - * // Update gameobjects inside update_loop - * - * // Using game_state as a counter - * if (game_state[0] === undefined) { - * game_state[0] = 0; - * } - * game_state[0] = game_state[0] + 1; - * }) - * ``` - */ -export const update_loop: (update_function: UpdateFunction) => void = (update_function: UpdateFunction) => { - // Test for error in user update function - // This cannot not check for errors inside a block that is not run. - update_function([]); - config.userUpdateFunction = update_function; -}; - -/** - * Builds the game. - * Processes the initialization and updating of the game. - * All created GameObjects and their properties are passed into the game. - * - * @example - * ``` - * // This must be the last function called in the Source program. - * build_game(); - * ``` - */ -export const build_game: () => BuildGame = () => { - // Reset frame and time counters. - gameState.loopCount = 0; - gameState.gameTime = 0; - - const inputConfig = { - keyboard: true, - mouse: true, - windowEvents: false, - }; - - const fpsConfig = { - min: MIN_FPS, - target: config.fps, - forceSetTimeOut: true, - }; - - const gameConfig = { - width: config.width / config.scale, - height: config.height / config.scale, - zoom: config.scale, - // Setting to Phaser.WEBGL can lead to WebGL: INVALID_OPERATION errors, so Phaser.CANVAS is used instead. - // Also: Phaser.WEBGL can crash when there are too many contexts - // WEBGL is generally more performant, and allows for tinting of gameobjects. - type: Phaser.WEBGL, - parent: 'phaser-game', - scene: PhaserScene, - input: inputConfig, - fps: fpsConfig, - banner: false, - }; - - return { - toReplString: () => '[Arcade 2D]', - gameConfig, - }; -}; - -// ============================================================================= -// Audio functions -// ============================================================================= - -/** - * Create an audio clip that can be referenced. - * Source Academy assets can be found at https://source-academy-assets.s3-ap-southeast-1.amazonaws.com/ with Ctrl+f ".mp3". - * Phaser audio assets can be found at https://labs.phaser.io/assets/audio. - * Phaser sound effects assets can be found at https://labs.phaser.io/assets/audio/SoundEffects/. - * If Phaser assets are unavailable, go to https://github.com/photonstorm/phaser3-examples/tree/master/public/assets - * to get the asset path and append it to `https://labs.phaser.io/assets/`. - * This function should not be called in your update function. - * - * @param audio_url The URL of the audio clip. - * @param volume_level A number between 0 to 1, representing the volume level of the audio clip. - * @returns The AudioClip reference - * @example - * ``` - * const audioClip = create_audio("bgm/GalacticHarmony.mp3", 0.5); - * ``` - * @category Audio - */ -export const create_audio: (audio_url: string, volume_level: number) => AudioClip -= (audio_url: string, volume_level: number) => { - if (typeof audio_url !== 'string') { - throw new Error('audio_url must be a string'); - } - if (typeof volume_level !== 'number') { - throw new Error('volume_level must be a number'); - } - return AudioClip.of(audio_url, withinRange(volume_level, MIN_VOLUME, MAX_VOLUME)); -}; - -/** - * Loops the audio clip provided, which will play the audio clip indefinitely. - * Setting whether an audio clip should loop be done outside the update function. - * - * @param audio_clip The AudioClip reference - * @returns The AudioClip reference - * @example - * ``` - * const audioClip = loop_audio(create_audio("bgm/GalacticHarmony.mp3", 0.5)); - * ``` - * @category Audio - */ -export const loop_audio: (audio_clip: AudioClip) => AudioClip = (audio_clip: AudioClip) => { - if (audio_clip instanceof AudioClip) { - audio_clip.setShouldAudioClipLoop(true); - return audio_clip; - } - throw new TypeError('Cannot loop a non-AudioClip'); -}; - -/** - * Plays the audio clip, and stops when the audio clip is over. - * - * @param audio_clip The AudioClip reference - * @returns The AudioClip reference - * @example - * ``` - * const audioClip = play_audio(create_audio("bgm/GalacticHarmony.mp3", 0.5)); - * ``` - * @category Audio - */ -export const play_audio: (audio_clip: AudioClip) => AudioClip = (audio_clip: AudioClip) => { - if (audio_clip instanceof AudioClip) { - audio_clip.setShouldAudioClipPlay(true); - return audio_clip; - } - throw new TypeError('Cannot play a non-AudioClip'); -}; - -/** - * Stops the audio clip immediately. - * - * @param audio_clip The AudioClip reference - * @returns The AudioClip reference - * @example - * ``` - * const audioClip = play_audio(create_audio("bgm/GalacticHarmony.mp3", 0.5)); - * ``` - * @category Audio - */ -export const stop_audio: (audio_clip: AudioClip) => AudioClip = (audio_clip: AudioClip) => { - if (audio_clip instanceof AudioClip) { - audio_clip.setShouldAudioClipPlay(false); - return audio_clip; - } - throw new TypeError('Cannot stop a non-AudioClip'); -}; +/** + * The module `arcade_2d` is a wrapper for the Phaser.io game engine. + * It provides functions for manipulating GameObjects in a canvas. + * + * A *GameObject* is defined by its transform and rendered object. + * + * @module arcade_2d + * @author Titus Chew Xuan Jun + * @author Xenos Fiorenzo Anong + */ + +import Phaser from 'phaser'; +import { + PhaserScene, + gameState, +} from './phaserScene'; +import { + GameObject, + RenderableGameObject, + type ShapeGameObject, + SpriteGameObject, + TextGameObject, + RectangleGameObject, + CircleGameObject, + TriangleGameObject, InteractableGameObject, +} from './gameobject'; +import { + type DisplayText, + type BuildGame, + type Sprite, + type UpdateFunction, + type RectangleProps, + type CircleProps, + type TriangleProps, + type FlipXY, + type ScaleXY, + type PositionXY, + type DimensionsXY, + type ColorRGBA, +} from './types'; +import { + DEFAULT_WIDTH, + DEFAULT_HEIGHT, + DEFAULT_SCALE, + DEFAULT_FPS, + MAX_HEIGHT, + MIN_HEIGHT, + MAX_WIDTH, + MIN_WIDTH, + MAX_SCALE, + MIN_SCALE, + MAX_FPS, + MIN_FPS, + MAX_VOLUME, + MIN_VOLUME, + DEFAULT_DEBUG_STATE, + DEFAULT_TRANSFORM_PROPS, + DEFAULT_RENDER_PROPS, + DEFAULT_INTERACTABLE_PROPS, +} from './constants'; +import { AudioClip } from './audio'; + +// ============================================================================= +// Global Variables +// ============================================================================= + +// Configuration for game initialization. +export const config = { + width: DEFAULT_WIDTH, + height: DEFAULT_HEIGHT, + scale: DEFAULT_SCALE, + fps: DEFAULT_FPS, + isDebugEnabled: DEFAULT_DEBUG_STATE, + // User update function + userUpdateFunction: (() => {}) as UpdateFunction, +}; + +// ============================================================================= +// Creation of GameObjects +// ============================================================================= + +/** + * Creates a RectangleGameObject that takes in rectangle shape properties. + * + * @param width The width of the rectangle + * @param height The height of the rectangle + * @example + * ``` + * const rectangle = create_rectangle(100, 100); + * ``` + * @category GameObject + */ +export const create_rectangle: (width: number, height: number) => ShapeGameObject = (width: number, height: number) => { + const rectangle = { + width, + height, + } as RectangleProps; + return new RectangleGameObject(DEFAULT_TRANSFORM_PROPS, DEFAULT_RENDER_PROPS, DEFAULT_INTERACTABLE_PROPS, rectangle); +}; + +/** + * Creates a CircleGameObject that takes in circle shape properties. + * + * @param width The width of the rectangle + * @param height The height of the rectangle + * ``` + * const circle = create_circle(100); + * ``` + * @category GameObject + */ +export const create_circle: (radius: number) => ShapeGameObject = (radius: number) => { + const circle = { + radius, + } as CircleProps; + return new CircleGameObject(DEFAULT_TRANSFORM_PROPS, DEFAULT_RENDER_PROPS, DEFAULT_INTERACTABLE_PROPS, circle); +}; + +/** + * Creates a TriangleGameObject that takes in an downright isosceles triangle shape properties. + * + * @param width The width of the isosceles triangle + * @param height The height of the isosceles triangle + * ``` + * const triangle = create_triangle(100, 100); + * ``` + * @category GameObject + */ +export const create_triangle: (width: number, height: number) => ShapeGameObject = (width: number, height: number) => { + const triangle = { + x1: 0, + y1: 0, + x2: width, + y2: 0, + x3: width / 2, + y3: height, + } as TriangleProps; + return new TriangleGameObject(DEFAULT_TRANSFORM_PROPS, DEFAULT_RENDER_PROPS, DEFAULT_INTERACTABLE_PROPS, triangle); +}; + +/** + * Creates a GameObject that contains a text reference. + * + * @param text Text string displayed + * @example + * ``` + * const helloworld = create_text("Hello\nworld!"); + * ``` + * @category GameObject + */ +export const create_text: (text: string) => TextGameObject = (text: string) => { + const displayText = { + text, + } as DisplayText; + return new TextGameObject(DEFAULT_TRANSFORM_PROPS, DEFAULT_RENDER_PROPS, DEFAULT_INTERACTABLE_PROPS, displayText); +}; + +/** + * Creates a GameObject that contains a Sprite image reference. + * Source Academy assets can be used by specifying path without the prepend. + * Source Academy assets can be found at https://source-academy-assets.s3-ap-southeast-1.amazonaws.com/ with Ctrl+f ".png". + * Phaser assets can be found at https://labs.phaser.io/assets/. + * If Phaser assets are unavailable, go to https://github.com/photonstorm/phaser3-examples/tree/master/public/assets + * to get the asset path and append it to `https://labs.phaser.io/assets/`. + * Assets from other websites can also be used if they support Cross-Origin Resource Sharing (CORS), but the full path must be specified. + * + * @param image_url The image URL of the sprite + * @example + * ``` + * const shortpath = create_sprite("objects/cmr/splendall.png"); + * const fullpath = create_sprite("https://source-academy-assets.s3-ap-southeast-1.amazonaws.com/objects/cmr/splendall.png"); + * ``` + * @category GameObject + */ +export const create_sprite: (image_url: string) => SpriteGameObject = (image_url: string) => { + if (image_url === '') { + throw new Error('image_url cannot be empty'); + } + if (typeof image_url !== 'string') { + throw new Error('image_url must be a string'); + } + const sprite: Sprite = { + imageUrl: image_url, + } as Sprite; + return new SpriteGameObject(DEFAULT_TRANSFORM_PROPS, DEFAULT_RENDER_PROPS, DEFAULT_INTERACTABLE_PROPS, sprite); +}; + +// ============================================================================= +// Manipulation of GameObjects +// ============================================================================= + +/** + * Updates the position transform of the GameObject. + * + * @param gameObject GameObject reference + * @param coordinates [x, y] coordinates of new position + * @returns the GameObject reference passed in + * @example + * ``` + * update_position(create_text("Hello world!"), [1, 2]); + * ``` + * @category GameObject + */ +export const update_position: (gameObject: GameObject, [x, y]: PositionXY) => GameObject += (gameObject: GameObject, [x, y]: PositionXY) => { + if (gameObject instanceof GameObject) { + gameObject.setTransform({ + ...gameObject.getTransform(), + position: [x, y], + }); + return gameObject; + } + throw new TypeError('Cannot update position of a non-GameObject'); +}; + +/** + * Updates the scale transform of the GameObject. + * + * @param gameObject GameObject reference + * @param scale [x, y] scale of the size of the GameObject + * @returns the GameObject reference passed in + * @example + * ``` + * update_scale(create_text("Hello world!"), [2, 0.5]); + * ``` + * @category GameObject + */ +export const update_scale: (gameObject: GameObject, [x, y]: ScaleXY) => GameObject += (gameObject: GameObject, [x, y]: ScaleXY) => { + if (gameObject instanceof GameObject) { + gameObject.setTransform({ + ...gameObject.getTransform(), + scale: [x, y], + }); + return gameObject; + } + throw new TypeError('Cannot update scale of a non-GameObject'); +}; + +/** + * Updates the rotation transform of the GameObject. + * + * @param gameObject GameObject reference + * @param radians The value in radians to rotate the GameObject clockwise by + * @returns the GameObject reference passed in + * @example + * ``` + * update_rotation(create_text("Hello world!"), math_PI); + * ``` + * @category GameObject + */ +export const update_rotation: (gameObject: GameObject, radians: number) => GameObject += (gameObject: GameObject, radians: number) => { + if (gameObject instanceof GameObject) { + gameObject.setTransform({ + ...gameObject.getTransform(), + rotation: radians, + }); + return gameObject; + } + throw new TypeError('Cannot update rotation of a non-GameObject'); +}; + +/** + * Updates the color of the GameObject. + * Note that the value is modulo 256, so passing values greater than 255 is allowed. + * + * @param gameObject GameObject reference + * @param color The color as an RGBA array, with RGBA values ranging from 0 to 255. + * @returns the GameObject reference passed in + * @example + * ``` + * update_color(create_rectangle(100, 100), [255, 0, 0, 255]); + * ``` + * @category GameObject + */ +export const update_color: (gameObject: GameObject, color: ColorRGBA) => GameObject += (gameObject: GameObject, color: ColorRGBA) => { + if (color.length !== 4) { + throw new Error('color must be a 4-element array'); + } + if (gameObject instanceof RenderableGameObject) { + gameObject.setRenderState({ + ...gameObject.getRenderState(), + color, + }); + return gameObject; + } + throw new TypeError('Cannot update color of a non-GameObject'); +}; + +/** + * Updates the flip state of the GameObject. + * + * @param gameObject GameObject reference + * @param flip The [x, y] flip state as a boolean array + * @returns the GameObject reference passed in + * @example + * ``` + * update_flip(create_triangle(100, 100), [false, true]); + * ``` + * @category GameObject + */ +export const update_flip: (gameObject: GameObject, flip: FlipXY) => GameObject += (gameObject: GameObject, flip: FlipXY) => { + if (flip.length !== 2) { + throw new Error('flip must be a 2-element array'); + } + if (gameObject instanceof RenderableGameObject) { + gameObject.setRenderState({ + ...gameObject.getRenderState(), + flip, + }); + return gameObject; + } + throw new TypeError('Cannot update flip of a non-GameObject'); +}; + +/** + * Updates the text of the TextGameObject. + * + * @param textGameObject TextGameObject reference + * @param text The updated text of the TextGameObject + * @returns the GameObject reference passed in + * @throws Error if not a TextGameObject is passed in + * @example + * ``` + * update_text(create_text("Hello world!"), "Goodbye world!"); + * ``` + * @category GameObject + */ +export const update_text: (textGameObject: TextGameObject, text: string) => GameObject += (textGameObject: TextGameObject, text: string) => { + if (textGameObject instanceof TextGameObject) { + textGameObject.setText({ + text, + } as DisplayText); + return textGameObject; + } + throw new TypeError('Cannot update text onto a non-TextGameObject'); +}; + +/** + * Renders this GameObject in front of all other GameObjects. + * + * @param gameObject GameObject reference + * @example + * ``` + * update_to_top(create_text("Hello world!")); + * ``` + * @category GameObject + */ +export const update_to_top: (gameObject: GameObject) => GameObject += (gameObject: GameObject) => { + if (gameObject instanceof RenderableGameObject) { + gameObject.setBringToTopFlag(); + return gameObject; + } + throw new TypeError('Cannot update to top a non-GameObject'); +}; + +// ============================================================================= +// Querying of GameObjects +// ============================================================================= + +/** + * Queries the id of the GameObject. + * The id of a GameObject is in the order of creation, starting from 0. + * + * @param gameObject GameObject reference + * @returns the id of the GameObject reference + * @example + * ``` + * const id0 = create_text("This has id 0"); + * const id1 = create_text("This has id 1"); + * const id2 = create_text("This has id 2"); + * queryGameObjectId(id2); + * ``` + * @category GameObject + */ +export const query_id: (gameObject: GameObject) => number = (gameObject: GameObject) => { + if (gameObject instanceof GameObject) { + return gameObject.id; + } + throw new TypeError('Cannot query id of non-GameObject'); +}; + +/** + * Queries the [x, y] position transform of the GameObject. + * + * @param gameObject GameObject reference + * @returns [x, y] position as an array + * @example + * ``` + * const gameobject = update_position(create_circle(100), [100, 100]); + * query_position(gameobject); + * ``` + * @category GameObject + */ +export const query_position: (gameObject: GameObject) => PositionXY += (gameObject: GameObject) => { + if (gameObject instanceof GameObject) { + return [...gameObject.getTransform().position]; + } + throw new TypeError('Cannot query position of non-GameObject'); +}; + +/** + * Queries the z-rotation transform of the GameObject. + * + * @param gameObject GameObject reference + * @returns z-rotation as a number in radians + * @example + * ``` + * const gameobject = update_rotation(create_rectangle(100, 200), math_PI / 4); + * query_rotation(gameobject); + * ``` + * @category GameObject + */ +export const query_rotation: (gameObject: GameObject) => number += (gameObject: GameObject) => { + if (gameObject instanceof GameObject) { + return gameObject.getTransform().rotation; + } + throw new TypeError('Cannot query rotation of non-GameObject'); +}; + +/** + * Queries the [x, y] scale transform of the GameObject. + * + * @param gameObject GameObject reference + * @returns [x, y] scale as an array + * @example + * ``` + * const gameobject = update_scale(create_circle(100), [2, 0.5]); + * query_scale(gameobject); + * ``` + * @category GameObject + */ +export const query_scale: (gameObject: GameObject) => ScaleXY += (gameObject: GameObject) => { + if (gameObject instanceof GameObject) { + return [...gameObject.getTransform().scale]; + } + throw new TypeError('Cannot query scale of non-GameObject'); +}; + +/** + * Queries the [r, g, b, a] color property of the GameObject. + * + * @param gameObject GameObject reference + * @returns [r, g, b, a] color as an array + * @example + * ``` + * const gameobject = update_color(create_circle(100), [255, 127, 127, 255]); + * query_color(gameobject); + * ``` + * @category GameObject + */ +export const query_color: (gameObject: RenderableGameObject) => ColorRGBA += (gameObject: RenderableGameObject) => { + if (gameObject instanceof RenderableGameObject) { + return [...gameObject.getColor()]; + } + throw new TypeError('Cannot query color of non-GameObject'); +}; + +/** + * Queries the [x, y] flip property of the GameObject. + * + * @param gameObject GameObject reference + * @returns [x, y] flip state as an array + * @example + * ``` + * const gameobject = update_flip(create_triangle(100), [false, true]); + * query_flip(gameobject); + * ``` + * @category GameObject + */ +export const query_flip: (gameObject: RenderableGameObject) => FlipXY += (gameObject: RenderableGameObject) => { + if (gameObject instanceof RenderableGameObject) { + return [...gameObject.getFlipState()]; + } + throw new TypeError('Cannot query flip of non-GameObject'); +}; + +/** + * Queries the text of a Text GameObject. + * + * @param textGameObject TextGameObject reference + * @returns text string associated with the Text GameObject + * @throws Error if not a TextGameObject is passed in + * @example + * ``` + * const text = create_text("Hello World!"); + * query_text(text); + * ``` + * @category GameObject + */ +export const query_text: (textGameObject: TextGameObject) => string += (textGameObject: TextGameObject) => { + if (textGameObject instanceof TextGameObject) { + return textGameObject.getText().text; + } + throw new TypeError('Cannot query text of non-TextGameObject'); +}; + +/** + * Queries the (mouse) pointer position. + * + * @returns [x, y] coordinates of the pointer as an array + * @example + * ``` + * const position = query_pointer_position(); + * position[0]; // x + * position[1]; // y + * ``` + */ +export const query_pointer_position: () => PositionXY += () => gameState.pointerProps.pointerPosition; + +// ============================================================================= +// Game configuration +// ============================================================================= + +/** + * Private function to set the allowed range for a value. + * + * @param num the numeric value + * @param min the minimum value allowed for that number + * @param max the maximum value allowed for that number + * @returns a number within the interval + * @hidden + */ +const withinRange: (num: number, min: number, max: number) => number += (num: number, min: number, max: number) => { + if (num > max) { + return max; + } + if (num < min) { + return min; + } + return num; +}; + +/** + * Sets the frames per second of the canvas, which should be between the MIN_FPS and MAX_FPS. + * It ranges between 1 and 120, with the default target as 30. + * This function should not be called in the update function. + * + * @param fps The frames per second of canvas to set. + * @example + * ``` + * // set fps to 60 + * set_fps(60); + * ``` + */ +export const set_fps: (fps: number) => void = (fps: number) => { + config.fps = withinRange(fps, MIN_FPS, MAX_FPS); +}; + +/** + * Sets the dimensions of the canvas, which should be between the + * min and max widths and height. + * + * @param dimensions An array containing [width, height] of the canvas. + * @example + * ``` + * // set the width as 500 and height as 400 + * set_dimensions([500, 400]); + * ``` + */ +export const set_dimensions: (dimensions: DimensionsXY) => void = (dimensions: DimensionsXY) => { + if (dimensions.length !== 2) { + throw new Error('dimensions must be a 2-element array'); + } + config.width = withinRange(dimensions[0], MIN_WIDTH, MAX_WIDTH); + config.height = withinRange(dimensions[1], MIN_HEIGHT, MAX_HEIGHT); +}; + +/** + * Sets the scale (zoom) of the pixels in the canvas. + * If scale is doubled, then the number of units across would be halved. + * This has a side effect of making the game pixelated if scale > 1. + * The default scale is 1. + * + * @param scale The scale of the canvas to set. + * @example + * ``` + * // sets the scale of the canvas to 2. + * set_scale(2); + * ``` + */ +export const set_scale: (scale: number) => void = (scale: number) => { + config.scale = withinRange(scale, MIN_SCALE, MAX_SCALE); +}; + +/** + * Enables debug mode. + * Hit box interaction between pointer and GameObjects are shown with a green outline in debug mode. + * Hit box interaction between GameObjects is based off a rectangular area instead, which is not reflected. + * debug_log(...) information is shown on the top-left corner of the canvas. + * + * @example + * ``` + * enable_debug(); + * update_loop(game_state => { + * debug_log(get_game_time()); + * }); + * ``` + */ +export const enable_debug: () => void = () => { + config.isDebugEnabled = true; +}; + + +/** + * Logs any information passed into it within the `update_loop`. + * Displays the information in the top-left corner of the canvas only if debug mode is enabled. + * Calling `display` within the `update_loop` function will not work as intended, so use `debug_log` instead. + * + * @param info The information to log. + * @example + * ``` + * enable_debug(); + * update_loop(game_state => { + * debug_log(get_game_time()); + * }); + * ``` + */ +export const debug_log: (info: string) => void = (info: string) => { + if (config.isDebugEnabled) { + gameState.debugLogArray.push(info); + } +}; + +// ============================================================================= +// Game loop +// ============================================================================= + +/** + * Detects if a key input is pressed down. + * This function must be called in your update function to detect inputs. + * To get specific keys, go to https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key#result. + * + * @param key_name The key name of the key. + * @returns True, in the frame the key is pressed down. + * @example + * ``` + * if (input_key_down("a")) { + * // "a" key is pressed down + * } + * ``` + * @category Logic + */ +export const input_key_down: (key_name: string) => boolean = (key_name: string) => gameState.inputKeysDown.has(key_name); + +/** + * Detects if the left mouse button is pressed down. + * This function should be called in your update function. + * + * @returns True, if the left mouse button is pressed down. + * @example + * ``` + * if(input_left_mouse_down()) { + * // Left mouse button down + * } + * ``` + * @category Logic + */ +export const input_left_mouse_down: () => boolean = () => gameState.pointerProps.isPointerPrimaryDown; + +/** + * Detects if the right mouse button is pressed down. + * This function should be called in your update function. + * + * @returns True, if the right mouse button is pressed down. + * @example + * ``` + * if (input_right_mouse_down()) { + * // Right mouse button down + * } + * ``` + * @category Logic + */ +export const input_right_mouse_down: () => boolean = () => gameState.pointerProps.isPointerSecondaryDown; + +/** + * Detects if the (mouse) pointer is over the gameobject. + * This function should be called in your update function. + * + * @param gameObject The gameobject reference. + * @returns True, if the pointer is over the gameobject. + * @example + * ``` + * // Creating a button using a gameobject + * const button = createTextGameObject("click me"); + * // Test if button is clicked + * if (pointer_over_gameobject(button) && input_left_mouse_down()) { + * // Button is clicked + * } + * ``` + * @category Logic + */ +export const pointer_over_gameobject = (gameObject: GameObject) => { + if (gameObject instanceof GameObject) { + return gameState.pointerProps.pointerOverGameObjectsId.has(gameObject.id); + } + throw new TypeError('Cannot check pointer over non-GameObject'); +}; +/** + * Checks if two gameobjects overlap with each other, using a rectangular bounding box. + * This bounding box is rectangular, for all GameObjects. + * This function should be called in your update function. + * + * @param gameObject1 The first gameobject reference. + * @param gameObject2 The second gameobject reference. + * @returns True, if both gameobjects overlap with each other. + * @example + * ``` + * const rectangle1 = create_rectangle(100, 100); + * const rectangle2 = create_rectangle(100, 100); + * if (gameobjects_overlap(rectangle1, rectangle2)) { + * // Both rectangles overlap + * } + * ``` + * @category Logic + */ +export const gameobjects_overlap: (gameObject1: InteractableGameObject, gameObject2: InteractableGameObject) => boolean += (gameObject1: InteractableGameObject, gameObject2: InteractableGameObject) => { + if (gameObject1 instanceof InteractableGameObject && gameObject2 instanceof InteractableGameObject) { + return gameObject1.isOverlapping(gameObject2); + } + throw new TypeError('Cannot check overlap of non-GameObject'); +}; +/** + * Gets the current in-game time, which is based off the start time. + * This function should be called in your update function. + * + * @returns a number specifying the time in milliseconds + * @example + * ``` + * if (get_game_time() > 100) { + * // Do something after 100 milliseconds + * } + * ``` + */ +export const get_game_time: () => number = () => gameState.gameTime; + +/** + * Gets the current loop count, which is the number of frames that have run. + * Depends on the framerate set for how fast this changes. + * This function should be called in your update function. + * + * @returns a number specifying number of loops that have been run. + * @example + * ``` + * if (get_loop_count() === 100) { + * // Do something on the 100th frame + * } + * ``` + */ +export const get_loop_count: () => number = () => gameState.loopCount; + +/** + * This sets the update loop in the canvas. + * The update loop is run once per frame, so it depends on the fps set for the number of times this loop is run. + * There should only be one update_loop called. + * All game logic should be handled within your update_function. + * You cannot create GameObjects inside the update_loop. + * game_state is an array that can be modified to store anything. + * + * @param update_function A user-defined update_function, that takes in an array as a parameter. + * @example + * ``` + * // Create gameobjects outside update_loop + * update_loop((game_state) => { + * // Update gameobjects inside update_loop + * + * // Using game_state as a counter + * if (game_state[0] === undefined) { + * game_state[0] = 0; + * } + * game_state[0] = game_state[0] + 1; + * }) + * ``` + */ +export const update_loop: (update_function: UpdateFunction) => void = (update_function: UpdateFunction) => { + // Test for error in user update function + // This cannot not check for errors inside a block that is not run. + update_function([]); + config.userUpdateFunction = update_function; +}; + +/** + * Builds the game. + * Processes the initialization and updating of the game. + * All created GameObjects and their properties are passed into the game. + * + * @example + * ``` + * // This must be the last function called in the Source program. + * build_game(); + * ``` + */ +export const build_game: () => BuildGame = () => { + // Reset frame and time counters. + gameState.loopCount = 0; + gameState.gameTime = 0; + + const inputConfig = { + keyboard: true, + mouse: true, + windowEvents: false, + }; + + const fpsConfig = { + min: MIN_FPS, + target: config.fps, + forceSetTimeOut: true, + }; + + const gameConfig = { + width: config.width / config.scale, + height: config.height / config.scale, + zoom: config.scale, + // Setting to Phaser.WEBGL can lead to WebGL: INVALID_OPERATION errors, so Phaser.CANVAS is used instead. + // Also: Phaser.WEBGL can crash when there are too many contexts + // WEBGL is generally more performant, and allows for tinting of gameobjects. + type: Phaser.WEBGL, + parent: 'phaser-game', + scene: PhaserScene, + input: inputConfig, + fps: fpsConfig, + banner: false, + }; + + return { + toReplString: () => '[Arcade 2D]', + gameConfig, + }; +}; + +// ============================================================================= +// Audio functions +// ============================================================================= + +/** + * Create an audio clip that can be referenced. + * Source Academy assets can be found at https://source-academy-assets.s3-ap-southeast-1.amazonaws.com/ with Ctrl+f ".mp3". + * Phaser audio assets can be found at https://labs.phaser.io/assets/audio. + * Phaser sound effects assets can be found at https://labs.phaser.io/assets/audio/SoundEffects/. + * If Phaser assets are unavailable, go to https://github.com/photonstorm/phaser3-examples/tree/master/public/assets + * to get the asset path and append it to `https://labs.phaser.io/assets/`. + * This function should not be called in your update function. + * + * @param audio_url The URL of the audio clip. + * @param volume_level A number between 0 to 1, representing the volume level of the audio clip. + * @returns The AudioClip reference + * @example + * ``` + * const audioClip = create_audio("bgm/GalacticHarmony.mp3", 0.5); + * ``` + * @category Audio + */ +export const create_audio: (audio_url: string, volume_level: number) => AudioClip += (audio_url: string, volume_level: number) => { + if (typeof audio_url !== 'string') { + throw new Error('audio_url must be a string'); + } + if (typeof volume_level !== 'number') { + throw new Error('volume_level must be a number'); + } + return AudioClip.of(audio_url, withinRange(volume_level, MIN_VOLUME, MAX_VOLUME)); +}; + +/** + * Loops the audio clip provided, which will play the audio clip indefinitely. + * Setting whether an audio clip should loop be done outside the update function. + * + * @param audio_clip The AudioClip reference + * @returns The AudioClip reference + * @example + * ``` + * const audioClip = loop_audio(create_audio("bgm/GalacticHarmony.mp3", 0.5)); + * ``` + * @category Audio + */ +export const loop_audio: (audio_clip: AudioClip) => AudioClip = (audio_clip: AudioClip) => { + if (audio_clip instanceof AudioClip) { + audio_clip.setShouldAudioClipLoop(true); + return audio_clip; + } + throw new TypeError('Cannot loop a non-AudioClip'); +}; + +/** + * Plays the audio clip, and stops when the audio clip is over. + * + * @param audio_clip The AudioClip reference + * @returns The AudioClip reference + * @example + * ``` + * const audioClip = play_audio(create_audio("bgm/GalacticHarmony.mp3", 0.5)); + * ``` + * @category Audio + */ +export const play_audio: (audio_clip: AudioClip) => AudioClip = (audio_clip: AudioClip) => { + if (audio_clip instanceof AudioClip) { + audio_clip.setShouldAudioClipPlay(true); + return audio_clip; + } + throw new TypeError('Cannot play a non-AudioClip'); +}; + +/** + * Stops the audio clip immediately. + * + * @param audio_clip The AudioClip reference + * @returns The AudioClip reference + * @example + * ``` + * const audioClip = play_audio(create_audio("bgm/GalacticHarmony.mp3", 0.5)); + * ``` + * @category Audio + */ +export const stop_audio: (audio_clip: AudioClip) => AudioClip = (audio_clip: AudioClip) => { + if (audio_clip instanceof AudioClip) { + audio_clip.setShouldAudioClipPlay(false); + return audio_clip; + } + throw new TypeError('Cannot stop a non-AudioClip'); +}; diff --git a/src/bundles/arcade_2d/gameobject.ts b/src/bundles/arcade_2d/gameobject.ts index 9e45b6557..0b3126337 100644 --- a/src/bundles/arcade_2d/gameobject.ts +++ b/src/bundles/arcade_2d/gameobject.ts @@ -1,368 +1,368 @@ -/** - * This file contains the bundle's representation of GameObjects. - */ -import type { ReplResult } from '../../typings/type_helpers'; -import { DEFAULT_INTERACTABLE_PROPS, DEFAULT_RENDER_PROPS, DEFAULT_TRANSFORM_PROPS } from './constants'; -import type * as types from './types'; - -// ============================================================================= -// Classes -// ============================================================================= - -/** - * Encapsulates the basic data-representation of a GameObject. - */ -export abstract class GameObject implements Transformable, ReplResult { - private static gameObjectCount: number = 0; - protected static gameObjectsArray: InteractableGameObject[] = []; // Stores all the created GameObjects - protected isTransformUpdated: boolean = false; - public readonly id: number; - - constructor( - private transformProps: types.TransformProps = DEFAULT_TRANSFORM_PROPS, - ) { - this.id = GameObject.gameObjectCount++; - } - setTransform(transformProps: types.TransformProps) { - this.transformProps = transformProps; - this.isTransformUpdated = false; - } - getTransform(): types.TransformProps { - return this.transformProps; - } - hasTransformUpdates(): boolean { - return !this.isTransformUpdated; - } - setTransformUpdated() { - this.isTransformUpdated = true; - } - - /** - * This method is called when init() Phaser Scene. - * @returns The GameObjects as an array. - */ - public static getGameObjectsArray() { - return GameObject.gameObjectsArray; - } - - public toReplString = () => ''; -} - -/** - * Encapsulates the basic data-representation of a RenderableGameObject. - */ -export abstract class RenderableGameObject extends GameObject implements Renderable { - protected isRenderUpdated: boolean = false; - private shouldBringToTop: boolean = false; - - constructor( - transformProps: types.TransformProps, - private renderProps: types.RenderProps = DEFAULT_RENDER_PROPS, - ) { - super(transformProps); - } - - setRenderState(renderProps: types.RenderProps) { - // if (renderProps.renderedImage === undefined || this.phaserType === undefined) { - // throw new Error('GameObject\'s render image type is undefined'); - // } - // if (this.phaserType in renderProps.renderedImage) { - // throw new Error('Unable to update GameObject with image type that does not match'); - // } - this.renderProps = renderProps; - this.isRenderUpdated = false; - } - getRenderState(): types.RenderProps { - return this.renderProps; - } - /** - * Sets a flag to render the GameObject infront of other GameObjects. - */ - setBringToTopFlag() { - this.shouldBringToTop = true; - this.isRenderUpdated = false; - } - hasRenderUpdates(): boolean { - return !this.isRenderUpdated; - } - setRenderUpdated() { - this.isRenderUpdated = true; - this.shouldBringToTop = false; - } - getColor(): types.ColorRGBA { - return this.renderProps.color; - } - getFlipState(): types.FlipXY { - return this.renderProps.flip; - } - getShouldBringToTop(): boolean { - return this.shouldBringToTop; - } -} - -/** - * Encapsulates the basic data-representation of a InteractableGameObject. - */ -export abstract class InteractableGameObject extends RenderableGameObject implements Interactable { - protected isHitboxUpdated: boolean = false; - protected phaserGameObject: types.PhaserGameObject | undefined; - - constructor( - transformProps: types.TransformProps, - renderProps: types.RenderProps, - private interactableProps: types.InteractableProps = DEFAULT_INTERACTABLE_PROPS, - ) { - super(transformProps, renderProps); - GameObject.gameObjectsArray.push(this); - } - setHitboxState(hitboxProps: types.InteractableProps) { - this.interactableProps = hitboxProps; - this.isHitboxUpdated = false; - } - getHitboxState(): types.InteractableProps { - return this.interactableProps; - } - hasHitboxUpdates(): boolean { - return !this.isHitboxUpdated; - } - setHitboxUpdated() { - this.isHitboxUpdated = true; - } - /** - * This stores the GameObject within the phaser game, which can only be set after the game has started. - * @param phaserGameObject The phaser GameObject reference. - */ - setPhaserGameObject(phaserGameObject: Phaser.GameObjects.Shape | Phaser.GameObjects.Sprite | Phaser.GameObjects.Text) { - this.phaserGameObject = phaserGameObject; - } - /** - * Checks if two Source GameObjects are overlapping, using their Phaser GameObjects to check. - * This method needs to be overriden if the hit area of the Phaser GameObject is not a rectangle. - * @param other The other GameObject - * @returns True, if both GameObjects overlap in the phaser game. - */ - isOverlapping(other: InteractableGameObject): boolean { - if (this.phaserGameObject === undefined || other.phaserGameObject === undefined) { - return false; - } - // Use getBounds to check if two objects overlap, checking the shape of the area before checking overlap. - // Since getBounds() returns a Rectangle, it will be unable to check the actual intersection of non-rectangular shapes. - // eslint-disable-next-line new-cap - return Phaser.Geom.Intersects.RectangleToRectangle(this.phaserGameObject.getBounds(), other.phaserGameObject.getBounds()); - } -} - -/** - * Encapsulates the data-representation of a ShapeGameObject. - */ -export abstract class ShapeGameObject extends InteractableGameObject { - /** - * Gets the shape properties of the ShapeGameObject. - * @returns The shape properties. - */ - public abstract getShape(); - - /** @override */ - public toReplString = () => ''; - - /** @override */ - public toString = () => this.toReplString(); -} - -/** - * Encapsulates the data-representation of a RectangleGameObject. - */ -export class RectangleGameObject extends ShapeGameObject { - constructor( - transformProps: types.TransformProps, - renderProps: types.RenderProps, - interactableProps: types.InteractableProps, - private rectangle: types.RectangleProps, - ) { - super(transformProps, renderProps, interactableProps); - } - /** @override */ - getShape(): types.RectangleProps { - return this.rectangle; - } -} - -/** - * Encapsulates the data-representation of a CircleGameObject. - */ -export class CircleGameObject extends ShapeGameObject { - constructor( - transformProps: types.TransformProps, - renderProps: types.RenderProps, - interactableProps: types.InteractableProps, - private circle: types.CircleProps, - ) { - super(transformProps, renderProps, interactableProps); - } - /** @override */ - getShape(): types.CircleProps { - return this.circle; - } -} - -/** - * Encapsulates the data-representation of a TriangleGameObject. - */ -export class TriangleGameObject extends ShapeGameObject { - constructor( - transformProps: types.TransformProps, - renderProps: types.RenderProps, - interactableProps: types.InteractableProps, - private triangle: types.TriangleProps, - ) { - super(transformProps, renderProps, interactableProps); - } - /** @override */ - getShape(): types.TriangleProps { - return this.triangle; - } -} - -/** - * Encapsulates the data-representation of a SpriteGameObject. - */ -export class SpriteGameObject extends InteractableGameObject { - constructor( - transformProps: types.TransformProps, - renderProps: types.RenderProps, - interactableProps: types.InteractableProps, - private sprite: types.Sprite, - ) { - super(transformProps, renderProps, interactableProps); - } - /** - * Gets the sprite displayed by the SpriteGameObject. - * @returns The sprite as a Sprite. - */ - getSprite(): types.Sprite { - return this.sprite; - } - - /** @override */ - public toReplString = () => ''; - - /** @override */ - public toString = () => this.toReplString(); -} - -/** - * Encapsulates the data-representation of a TextGameObject. - */ -export class TextGameObject extends InteractableGameObject { - constructor( - transformProps: types.TransformProps, - renderProps: types.RenderProps, - interactableProps: types.InteractableProps, - private displayText: types.DisplayText, - ) { - super(transformProps, renderProps, interactableProps); - } - /** - * Sets the text displayed by the GameObject in the canvas. - * @param text The text displayed. - */ - setText(text: types.DisplayText) { - this.setRenderState(this.getRenderState()); - this.displayText = text; - } - /** - * Gets the text displayed by the GameObject in the canvas. - * @returns The text displayed. - */ - getText(): types.DisplayText { - return this.displayText; - } - - /** @override */ - public toReplString = () => ''; - - /** @override */ - public toString = () => this.toReplString(); -} - -// ============================================================================= -// Interfaces -// ============================================================================= - -/** - * Interface to represent GameObjects that can undergo transformations. - */ -interface Transformable { - /** - * @param renderProps The transform properties of the GameObject. - */ - setTransform(transformProps: types.TransformProps); - - /** - * @returns The render properties of the GameObject. - */ - getTransform(): types.TransformProps; - - /** - * Checks if the transform properties needs to update - * @returns Determines if transform of the GameObject in the canvas needs to be updated. - */ - hasTransformUpdates(): boolean; - - /** - * Should be called when the GameObject's transform has been updated in the canvas. - */ - setTransformUpdated(); -} - -/** - * Interface to represent GameObjects that can be rendered in the canvas. - */ -interface Renderable { - /** - * @param renderProps The render properties of the GameObject. - */ - setRenderState(renderProps: types.RenderProps); - - /** - * @returns The render properties of the GameObject. - */ - getRenderState(): types.RenderProps; - - /** - * Checks if the render properties needs to update. - * @returns Determines if rendered image of the GameObject in the canvas needs to be updated. - */ - hasRenderUpdates(): boolean; - - /** - * Should be called when the GameObject's rendered image has been updated in the canvas. - */ - setRenderUpdated(); -} - -/** - * Interface to represent GameObjects that can be interacted with. - */ -interface Interactable { - /** - * @param active The hitbox state of the GameObject in detecting overlaps. - */ - setHitboxState(interactableProps: types.InteractableProps); - - /** - * @returns The hitbox state of the GameObject in detecting overlaps. - */ - getHitboxState(): types.InteractableProps; - - /** - * Checks if the interactivity properties needs to update - * @returns Determines if hitbox of the GameObject in the canvas needs to be updated. - */ - hasHitboxUpdates(): boolean; - - /** - * Should be called when the GameObject's hitbox has been updated in the canvas. - */ - setHitboxUpdated(); -} +/** + * This file contains the bundle's representation of GameObjects. + */ +import type { ReplResult } from '../../typings/type_helpers'; +import { DEFAULT_INTERACTABLE_PROPS, DEFAULT_RENDER_PROPS, DEFAULT_TRANSFORM_PROPS } from './constants'; +import type * as types from './types'; + +// ============================================================================= +// Classes +// ============================================================================= + +/** + * Encapsulates the basic data-representation of a GameObject. + */ +export abstract class GameObject implements Transformable, ReplResult { + private static gameObjectCount: number = 0; + protected static gameObjectsArray: InteractableGameObject[] = []; // Stores all the created GameObjects + protected isTransformUpdated: boolean = false; + public readonly id: number; + + constructor( + private transformProps: types.TransformProps = DEFAULT_TRANSFORM_PROPS, + ) { + this.id = GameObject.gameObjectCount++; + } + setTransform(transformProps: types.TransformProps) { + this.transformProps = transformProps; + this.isTransformUpdated = false; + } + getTransform(): types.TransformProps { + return this.transformProps; + } + hasTransformUpdates(): boolean { + return !this.isTransformUpdated; + } + setTransformUpdated() { + this.isTransformUpdated = true; + } + + /** + * This method is called when init() Phaser Scene. + * @returns The GameObjects as an array. + */ + public static getGameObjectsArray() { + return GameObject.gameObjectsArray; + } + + public toReplString = () => ''; +} + +/** + * Encapsulates the basic data-representation of a RenderableGameObject. + */ +export abstract class RenderableGameObject extends GameObject implements Renderable { + protected isRenderUpdated: boolean = false; + private shouldBringToTop: boolean = false; + + constructor( + transformProps: types.TransformProps, + private renderProps: types.RenderProps = DEFAULT_RENDER_PROPS, + ) { + super(transformProps); + } + + setRenderState(renderProps: types.RenderProps) { + // if (renderProps.renderedImage === undefined || this.phaserType === undefined) { + // throw new Error('GameObject\'s render image type is undefined'); + // } + // if (this.phaserType in renderProps.renderedImage) { + // throw new Error('Unable to update GameObject with image type that does not match'); + // } + this.renderProps = renderProps; + this.isRenderUpdated = false; + } + getRenderState(): types.RenderProps { + return this.renderProps; + } + /** + * Sets a flag to render the GameObject infront of other GameObjects. + */ + setBringToTopFlag() { + this.shouldBringToTop = true; + this.isRenderUpdated = false; + } + hasRenderUpdates(): boolean { + return !this.isRenderUpdated; + } + setRenderUpdated() { + this.isRenderUpdated = true; + this.shouldBringToTop = false; + } + getColor(): types.ColorRGBA { + return this.renderProps.color; + } + getFlipState(): types.FlipXY { + return this.renderProps.flip; + } + getShouldBringToTop(): boolean { + return this.shouldBringToTop; + } +} + +/** + * Encapsulates the basic data-representation of a InteractableGameObject. + */ +export abstract class InteractableGameObject extends RenderableGameObject implements Interactable { + protected isHitboxUpdated: boolean = false; + protected phaserGameObject: types.PhaserGameObject | undefined; + + constructor( + transformProps: types.TransformProps, + renderProps: types.RenderProps, + private interactableProps: types.InteractableProps = DEFAULT_INTERACTABLE_PROPS, + ) { + super(transformProps, renderProps); + GameObject.gameObjectsArray.push(this); + } + setHitboxState(hitboxProps: types.InteractableProps) { + this.interactableProps = hitboxProps; + this.isHitboxUpdated = false; + } + getHitboxState(): types.InteractableProps { + return this.interactableProps; + } + hasHitboxUpdates(): boolean { + return !this.isHitboxUpdated; + } + setHitboxUpdated() { + this.isHitboxUpdated = true; + } + /** + * This stores the GameObject within the phaser game, which can only be set after the game has started. + * @param phaserGameObject The phaser GameObject reference. + */ + setPhaserGameObject(phaserGameObject: Phaser.GameObjects.Shape | Phaser.GameObjects.Sprite | Phaser.GameObjects.Text) { + this.phaserGameObject = phaserGameObject; + } + /** + * Checks if two Source GameObjects are overlapping, using their Phaser GameObjects to check. + * This method needs to be overriden if the hit area of the Phaser GameObject is not a rectangle. + * @param other The other GameObject + * @returns True, if both GameObjects overlap in the phaser game. + */ + isOverlapping(other: InteractableGameObject): boolean { + if (this.phaserGameObject === undefined || other.phaserGameObject === undefined) { + return false; + } + // Use getBounds to check if two objects overlap, checking the shape of the area before checking overlap. + // Since getBounds() returns a Rectangle, it will be unable to check the actual intersection of non-rectangular shapes. + // eslint-disable-next-line new-cap + return Phaser.Geom.Intersects.RectangleToRectangle(this.phaserGameObject.getBounds(), other.phaserGameObject.getBounds()); + } +} + +/** + * Encapsulates the data-representation of a ShapeGameObject. + */ +export abstract class ShapeGameObject extends InteractableGameObject { + /** + * Gets the shape properties of the ShapeGameObject. + * @returns The shape properties. + */ + public abstract getShape(); + + /** @override */ + public toReplString = () => ''; + + /** @override */ + public toString = () => this.toReplString(); +} + +/** + * Encapsulates the data-representation of a RectangleGameObject. + */ +export class RectangleGameObject extends ShapeGameObject { + constructor( + transformProps: types.TransformProps, + renderProps: types.RenderProps, + interactableProps: types.InteractableProps, + private rectangle: types.RectangleProps, + ) { + super(transformProps, renderProps, interactableProps); + } + /** @override */ + getShape(): types.RectangleProps { + return this.rectangle; + } +} + +/** + * Encapsulates the data-representation of a CircleGameObject. + */ +export class CircleGameObject extends ShapeGameObject { + constructor( + transformProps: types.TransformProps, + renderProps: types.RenderProps, + interactableProps: types.InteractableProps, + private circle: types.CircleProps, + ) { + super(transformProps, renderProps, interactableProps); + } + /** @override */ + getShape(): types.CircleProps { + return this.circle; + } +} + +/** + * Encapsulates the data-representation of a TriangleGameObject. + */ +export class TriangleGameObject extends ShapeGameObject { + constructor( + transformProps: types.TransformProps, + renderProps: types.RenderProps, + interactableProps: types.InteractableProps, + private triangle: types.TriangleProps, + ) { + super(transformProps, renderProps, interactableProps); + } + /** @override */ + getShape(): types.TriangleProps { + return this.triangle; + } +} + +/** + * Encapsulates the data-representation of a SpriteGameObject. + */ +export class SpriteGameObject extends InteractableGameObject { + constructor( + transformProps: types.TransformProps, + renderProps: types.RenderProps, + interactableProps: types.InteractableProps, + private sprite: types.Sprite, + ) { + super(transformProps, renderProps, interactableProps); + } + /** + * Gets the sprite displayed by the SpriteGameObject. + * @returns The sprite as a Sprite. + */ + getSprite(): types.Sprite { + return this.sprite; + } + + /** @override */ + public toReplString = () => ''; + + /** @override */ + public toString = () => this.toReplString(); +} + +/** + * Encapsulates the data-representation of a TextGameObject. + */ +export class TextGameObject extends InteractableGameObject { + constructor( + transformProps: types.TransformProps, + renderProps: types.RenderProps, + interactableProps: types.InteractableProps, + private displayText: types.DisplayText, + ) { + super(transformProps, renderProps, interactableProps); + } + /** + * Sets the text displayed by the GameObject in the canvas. + * @param text The text displayed. + */ + setText(text: types.DisplayText) { + this.setRenderState(this.getRenderState()); + this.displayText = text; + } + /** + * Gets the text displayed by the GameObject in the canvas. + * @returns The text displayed. + */ + getText(): types.DisplayText { + return this.displayText; + } + + /** @override */ + public toReplString = () => ''; + + /** @override */ + public toString = () => this.toReplString(); +} + +// ============================================================================= +// Interfaces +// ============================================================================= + +/** + * Interface to represent GameObjects that can undergo transformations. + */ +interface Transformable { + /** + * @param renderProps The transform properties of the GameObject. + */ + setTransform(transformProps: types.TransformProps); + + /** + * @returns The render properties of the GameObject. + */ + getTransform(): types.TransformProps; + + /** + * Checks if the transform properties needs to update + * @returns Determines if transform of the GameObject in the canvas needs to be updated. + */ + hasTransformUpdates(): boolean; + + /** + * Should be called when the GameObject's transform has been updated in the canvas. + */ + setTransformUpdated(); +} + +/** + * Interface to represent GameObjects that can be rendered in the canvas. + */ +interface Renderable { + /** + * @param renderProps The render properties of the GameObject. + */ + setRenderState(renderProps: types.RenderProps); + + /** + * @returns The render properties of the GameObject. + */ + getRenderState(): types.RenderProps; + + /** + * Checks if the render properties needs to update. + * @returns Determines if rendered image of the GameObject in the canvas needs to be updated. + */ + hasRenderUpdates(): boolean; + + /** + * Should be called when the GameObject's rendered image has been updated in the canvas. + */ + setRenderUpdated(); +} + +/** + * Interface to represent GameObjects that can be interacted with. + */ +interface Interactable { + /** + * @param active The hitbox state of the GameObject in detecting overlaps. + */ + setHitboxState(interactableProps: types.InteractableProps); + + /** + * @returns The hitbox state of the GameObject in detecting overlaps. + */ + getHitboxState(): types.InteractableProps; + + /** + * Checks if the interactivity properties needs to update + * @returns Determines if hitbox of the GameObject in the canvas needs to be updated. + */ + hasHitboxUpdates(): boolean; + + /** + * Should be called when the GameObject's hitbox has been updated in the canvas. + */ + setHitboxUpdated(); +} diff --git a/src/bundles/arcade_2d/index.ts b/src/bundles/arcade_2d/index.ts index dc49ea10b..90234e307 100644 --- a/src/bundles/arcade_2d/index.ts +++ b/src/bundles/arcade_2d/index.ts @@ -1,259 +1,259 @@ -/** - * Arcade2D allows users to create their own 2D games with Source §3 and above variants. - * This module will simplify the features available in Phaser 3 to make it more accessible - * to CS1101S students. Some examples have been included below. - * - * How to use Arcade2D: - * 1. Create gameobjects: create gameobjects using any of the create functions, such as `create_rectangle`. - * 2. Create update function: call `update_loop` with your update function as an argument. - * Your update function should take in an array as an argument, which you can use for maintaining - * your game state. The logic of your game is contained within your update function. - * 3. Build the game: call `build_game` as the last statement. - * - * ### WASD input example - * ``` -import { create_rectangle, query_position, update_position, update_loop, build_game, input_key_down } from "arcade_2d"; - -// Create GameObjects outside update_loop(...) -const player = update_position(create_rectangle(100, 100), [300, 300]); -const movement_dist = 10; - -function add_vectors(to, from) { - to[0] = to[0] + from[0]; - to[1] = to[1] + from[1]; -} - -update_loop(game_state => { - const new_position = query_position(player); - - if (input_key_down("w")) { - add_vectors(new_position, [0, -1 * movement_dist]); - } - if (input_key_down("a")) { - add_vectors(new_position, [-1 * movement_dist, 0]); - } - if (input_key_down("s")) { - add_vectors(new_position, [0, movement_dist]); - } - if (input_key_down("d")) { - add_vectors(new_position, [movement_dist, 0]); - } - - // Update GameObjects within update_loop(...) - update_position(player, new_position); -}); -build_game(); - * ``` - * - * ### Draggable objects example - * ``` -import { create_sprite, update_position, update_scale, pointer_over_gameobject, input_left_mouse_down, update_to_top, query_pointer_position, update_loop, build_game } from "arcade_2d"; - -// Using assets -const gameobjects = [ - update_position(create_sprite("objects/cmr/splendall.png"), [200, 400]), - update_position(update_scale(create_sprite("avatars/beat/beat.happy.png"), [0.3, 0.3]), [300, 200]), - update_position(update_scale(create_sprite("avatars/chieftain/chieftain.happy.png"), [0.2, 0.2]), [400, 300])]; - -// Simple dragging function -function drag_gameobject(gameobject) { - if (input_left_mouse_down() && pointer_over_gameobject(gameobject)) { - update_to_top(update_position(gameobject, query_pointer_position())); - } -} - -update_loop(game_state => { - for (let i = 0; i < 3; i = i + 1) { - drag_gameobject(gameobjects[i]); - } -}); -build_game(); - * ``` - * - * ### Playing audio example - * ``` -import { input_key_down, create_audio, play_audio, update_loop, build_game } from "arcade_2d"; - -const audio = create_audio("https://labs.phaser.io/assets/audio/SoundEffects/key.wav", 1); -update_loop(game_state => { - // Press space to play audio - if (input_key_down(" ")) { - play_audio(audio); - } -}); -build_game(); - * ``` - * ### Grid colouring example - * - * ``` -import { create_rectangle, update_position, update_color, get_loop_count, set_scale, update_loop, build_game } from "arcade_2d"; - -const gameobjects = []; -for (let i = 0; i < 100; i = i + 1) { - gameobjects[i] = []; - for (let j = 0; j < 100; j = j + 1) { - gameobjects[i][j] = update_position(create_rectangle(1, 1), [i, j]); - } -} - -update_loop(game_state => { - const k = get_loop_count(); - for (let i = 0; i < 100; i = i + 1) { - for (let j = 0; j < 100; j = j + 1) { - update_color(gameobjects[i][j], - [k * i * j * 7, k * j * i * 2, i * j * k * 3, i * j * k * 5]); - } - } -}); -set_scale(6); -build_game(); - * ``` - * ### Snake game example - * ``` -import { create_rectangle, create_sprite, create_text, query_position, update_color, update_position, update_scale, update_text, update_to_top, set_fps, get_loop_count, enable_debug, debug_log, input_key_down, gameobjects_overlap, update_loop, build_game, create_audio, loop_audio, stop_audio, play_audio } from "arcade_2d"; -// enable_debug(); // Uncomment this to see debug info - -// Constants -let snake_length = 4; -const food_growth = 4; -set_fps(10); - -const snake = []; -const size = 600; -const unit = 30; -const grid = size / unit; -const start_length = snake_length; - -// Create Sprite Gameobjects -update_scale(create_sprite("https://labs.phaser.io/assets/games/germs/background.png"), [4, 4]); // Background -const food = create_sprite("https://labs.phaser.io/assets/sprites/tomato.png"); -let eaten = true; - -for (let i = 0; i < 1000; i = i + 1) { - snake[i] = update_color(update_position(create_rectangle(unit, unit), [-unit / 2, -unit / 2]), - [127 + 128 * math_sin(i / 20), 127 + 128 * math_sin(i / 50), 127 + 128 * math_sin(i / 30), 255]); // Store offscreen -} -const snake_head = update_color(update_position(create_rectangle(unit * 0.9, unit * 0.9), [-unit / 2, -unit / 2]), [0, 0, 0 ,0]); // Head - -let move_dir = [unit, 0]; - -// Other functions -const add_vec = (v1, v2) => [v1[0] + v2[0], v1[1] + v2[1]]; -const bound_vec = v => [(v[0] + size) % size, (v[1] + size) % size]; -function input() { - if (input_key_down("w") && move_dir[1] === 0) { - move_dir = [0, -unit]; - play_audio(move); - } else if (input_key_down("a") && move_dir[0] === 0) { - move_dir = [-unit, 0]; - play_audio(move); - } else if (input_key_down("s") && move_dir[1] === 0) { - move_dir = [0, unit]; - play_audio(move); - } else if (input_key_down("d") && move_dir[0] === 0) { - move_dir = [unit, 0]; - play_audio(move); - } -} -let alive = true; - -// Create Text Gameobjects -const score = update_position(create_text("Score: "), [size - 60, 20]); -const game_text = update_color(update_scale(update_position(create_text(""), [size / 2, size / 2]), [2, 2]), [0, 0, 0, 255]); - -// Audio -const eat = create_audio("https://labs.phaser.io/assets/audio/SoundEffects/key.wav", 1); -const lose = create_audio("https://labs.phaser.io/assets/audio/stacker/gamelost.m4a", 1); -const move = create_audio("https://labs.phaser.io/assets/audio/SoundEffects/alien_death1.wav", 1); -const bg_audio = play_audio(loop_audio(create_audio("https://labs.phaser.io/assets/audio/tech/bass.mp3", 0.5))); - -// Create Update loop -update_loop(game_state => { - update_text(score, "Score: " + stringify(snake_length - start_length)); - if (!alive) { - update_text(game_text, "Game Over!"); - return undefined; - } - - // Move snake - for (let i = snake_length - 1; i > 0; i = i - 1) { - update_position(snake[i], query_position(snake[i - 1])); - } - update_position(snake[0], query_position(snake_head)); // Update head - update_position(snake_head, bound_vec(add_vec(query_position(snake_head), move_dir))); // Update head - debug_log(query_position(snake[0])); // Head - - input(); - - // Add food - if (eaten) { - update_position(food, [math_floor(math_random() * grid) * unit + unit / 2, math_floor(math_random() * grid) * unit + unit / 2]); - eaten = false; - } - - // Eat food - if (get_loop_count() > 1 && gameobjects_overlap(snake_head, food)) { - eaten = true; - snake_length = snake_length + food_growth; - play_audio(eat); - } - debug_log(snake_length); // Score - - // Check collision - if (get_loop_count() > start_length) { - for (let i = 0; i < snake_length; i = i + 1) { - if (gameobjects_overlap(snake_head, snake[i])) { - alive = false; - play_audio(lose); - stop_audio(bg_audio); - } - } - } -}); -build_game(); - * ``` - * @module arcade_2d - * @author Titus Chew Xuan Jun - * @author Xenos Fiorenzo Anong - */ - -export { - create_circle, - create_rectangle, - create_triangle, - create_sprite, - create_text, - query_color, - query_flip, - query_id, - query_pointer_position, - query_position, - query_rotation, - query_scale, - query_text, - update_color, - update_flip, - update_position, - update_rotation, - update_scale, - update_text, - update_to_top, - set_fps, - set_dimensions, - set_scale, - get_game_time, - get_loop_count, - enable_debug, - debug_log, - input_key_down, - input_left_mouse_down, - input_right_mouse_down, - pointer_over_gameobject, - gameobjects_overlap, - update_loop, - build_game, - create_audio, - loop_audio, - stop_audio, - play_audio, -} from './functions'; +/** + * Arcade2D allows users to create their own 2D games with Source §3 and above variants. + * This module will simplify the features available in Phaser 3 to make it more accessible + * to CS1101S students. Some examples have been included below. + * + * How to use Arcade2D: + * 1. Create gameobjects: create gameobjects using any of the create functions, such as `create_rectangle`. + * 2. Create update function: call `update_loop` with your update function as an argument. + * Your update function should take in an array as an argument, which you can use for maintaining + * your game state. The logic of your game is contained within your update function. + * 3. Build the game: call `build_game` as the last statement. + * + * ### WASD input example + * ``` +import { create_rectangle, query_position, update_position, update_loop, build_game, input_key_down } from "arcade_2d"; + +// Create GameObjects outside update_loop(...) +const player = update_position(create_rectangle(100, 100), [300, 300]); +const movement_dist = 10; + +function add_vectors(to, from) { + to[0] = to[0] + from[0]; + to[1] = to[1] + from[1]; +} + +update_loop(game_state => { + const new_position = query_position(player); + + if (input_key_down("w")) { + add_vectors(new_position, [0, -1 * movement_dist]); + } + if (input_key_down("a")) { + add_vectors(new_position, [-1 * movement_dist, 0]); + } + if (input_key_down("s")) { + add_vectors(new_position, [0, movement_dist]); + } + if (input_key_down("d")) { + add_vectors(new_position, [movement_dist, 0]); + } + + // Update GameObjects within update_loop(...) + update_position(player, new_position); +}); +build_game(); + * ``` + * + * ### Draggable objects example + * ``` +import { create_sprite, update_position, update_scale, pointer_over_gameobject, input_left_mouse_down, update_to_top, query_pointer_position, update_loop, build_game } from "arcade_2d"; + +// Using assets +const gameobjects = [ + update_position(create_sprite("objects/cmr/splendall.png"), [200, 400]), + update_position(update_scale(create_sprite("avatars/beat/beat.happy.png"), [0.3, 0.3]), [300, 200]), + update_position(update_scale(create_sprite("avatars/chieftain/chieftain.happy.png"), [0.2, 0.2]), [400, 300])]; + +// Simple dragging function +function drag_gameobject(gameobject) { + if (input_left_mouse_down() && pointer_over_gameobject(gameobject)) { + update_to_top(update_position(gameobject, query_pointer_position())); + } +} + +update_loop(game_state => { + for (let i = 0; i < 3; i = i + 1) { + drag_gameobject(gameobjects[i]); + } +}); +build_game(); + * ``` + * + * ### Playing audio example + * ``` +import { input_key_down, create_audio, play_audio, update_loop, build_game } from "arcade_2d"; + +const audio = create_audio("https://labs.phaser.io/assets/audio/SoundEffects/key.wav", 1); +update_loop(game_state => { + // Press space to play audio + if (input_key_down(" ")) { + play_audio(audio); + } +}); +build_game(); + * ``` + * ### Grid colouring example + * + * ``` +import { create_rectangle, update_position, update_color, get_loop_count, set_scale, update_loop, build_game } from "arcade_2d"; + +const gameobjects = []; +for (let i = 0; i < 100; i = i + 1) { + gameobjects[i] = []; + for (let j = 0; j < 100; j = j + 1) { + gameobjects[i][j] = update_position(create_rectangle(1, 1), [i, j]); + } +} + +update_loop(game_state => { + const k = get_loop_count(); + for (let i = 0; i < 100; i = i + 1) { + for (let j = 0; j < 100; j = j + 1) { + update_color(gameobjects[i][j], + [k * i * j * 7, k * j * i * 2, i * j * k * 3, i * j * k * 5]); + } + } +}); +set_scale(6); +build_game(); + * ``` + * ### Snake game example + * ``` +import { create_rectangle, create_sprite, create_text, query_position, update_color, update_position, update_scale, update_text, update_to_top, set_fps, get_loop_count, enable_debug, debug_log, input_key_down, gameobjects_overlap, update_loop, build_game, create_audio, loop_audio, stop_audio, play_audio } from "arcade_2d"; +// enable_debug(); // Uncomment this to see debug info + +// Constants +let snake_length = 4; +const food_growth = 4; +set_fps(10); + +const snake = []; +const size = 600; +const unit = 30; +const grid = size / unit; +const start_length = snake_length; + +// Create Sprite Gameobjects +update_scale(create_sprite("https://labs.phaser.io/assets/games/germs/background.png"), [4, 4]); // Background +const food = create_sprite("https://labs.phaser.io/assets/sprites/tomato.png"); +let eaten = true; + +for (let i = 0; i < 1000; i = i + 1) { + snake[i] = update_color(update_position(create_rectangle(unit, unit), [-unit / 2, -unit / 2]), + [127 + 128 * math_sin(i / 20), 127 + 128 * math_sin(i / 50), 127 + 128 * math_sin(i / 30), 255]); // Store offscreen +} +const snake_head = update_color(update_position(create_rectangle(unit * 0.9, unit * 0.9), [-unit / 2, -unit / 2]), [0, 0, 0 ,0]); // Head + +let move_dir = [unit, 0]; + +// Other functions +const add_vec = (v1, v2) => [v1[0] + v2[0], v1[1] + v2[1]]; +const bound_vec = v => [(v[0] + size) % size, (v[1] + size) % size]; +function input() { + if (input_key_down("w") && move_dir[1] === 0) { + move_dir = [0, -unit]; + play_audio(move); + } else if (input_key_down("a") && move_dir[0] === 0) { + move_dir = [-unit, 0]; + play_audio(move); + } else if (input_key_down("s") && move_dir[1] === 0) { + move_dir = [0, unit]; + play_audio(move); + } else if (input_key_down("d") && move_dir[0] === 0) { + move_dir = [unit, 0]; + play_audio(move); + } +} +let alive = true; + +// Create Text Gameobjects +const score = update_position(create_text("Score: "), [size - 60, 20]); +const game_text = update_color(update_scale(update_position(create_text(""), [size / 2, size / 2]), [2, 2]), [0, 0, 0, 255]); + +// Audio +const eat = create_audio("https://labs.phaser.io/assets/audio/SoundEffects/key.wav", 1); +const lose = create_audio("https://labs.phaser.io/assets/audio/stacker/gamelost.m4a", 1); +const move = create_audio("https://labs.phaser.io/assets/audio/SoundEffects/alien_death1.wav", 1); +const bg_audio = play_audio(loop_audio(create_audio("https://labs.phaser.io/assets/audio/tech/bass.mp3", 0.5))); + +// Create Update loop +update_loop(game_state => { + update_text(score, "Score: " + stringify(snake_length - start_length)); + if (!alive) { + update_text(game_text, "Game Over!"); + return undefined; + } + + // Move snake + for (let i = snake_length - 1; i > 0; i = i - 1) { + update_position(snake[i], query_position(snake[i - 1])); + } + update_position(snake[0], query_position(snake_head)); // Update head + update_position(snake_head, bound_vec(add_vec(query_position(snake_head), move_dir))); // Update head + debug_log(query_position(snake[0])); // Head + + input(); + + // Add food + if (eaten) { + update_position(food, [math_floor(math_random() * grid) * unit + unit / 2, math_floor(math_random() * grid) * unit + unit / 2]); + eaten = false; + } + + // Eat food + if (get_loop_count() > 1 && gameobjects_overlap(snake_head, food)) { + eaten = true; + snake_length = snake_length + food_growth; + play_audio(eat); + } + debug_log(snake_length); // Score + + // Check collision + if (get_loop_count() > start_length) { + for (let i = 0; i < snake_length; i = i + 1) { + if (gameobjects_overlap(snake_head, snake[i])) { + alive = false; + play_audio(lose); + stop_audio(bg_audio); + } + } + } +}); +build_game(); + * ``` + * @module arcade_2d + * @author Titus Chew Xuan Jun + * @author Xenos Fiorenzo Anong + */ + +export { + create_circle, + create_rectangle, + create_triangle, + create_sprite, + create_text, + query_color, + query_flip, + query_id, + query_pointer_position, + query_position, + query_rotation, + query_scale, + query_text, + update_color, + update_flip, + update_position, + update_rotation, + update_scale, + update_text, + update_to_top, + set_fps, + set_dimensions, + set_scale, + get_game_time, + get_loop_count, + enable_debug, + debug_log, + input_key_down, + input_left_mouse_down, + input_right_mouse_down, + pointer_over_gameobject, + gameobjects_overlap, + update_loop, + build_game, + create_audio, + loop_audio, + stop_audio, + play_audio, +} from './functions'; diff --git a/src/bundles/arcade_2d/phaserScene.ts b/src/bundles/arcade_2d/phaserScene.ts index 7eec1414c..65ade4715 100644 --- a/src/bundles/arcade_2d/phaserScene.ts +++ b/src/bundles/arcade_2d/phaserScene.ts @@ -1,372 +1,372 @@ -import Phaser from 'phaser'; -import { - CircleGameObject, - GameObject, - type InteractableGameObject, - RectangleGameObject, - ShapeGameObject, - SpriteGameObject, - TextGameObject, - TriangleGameObject, -} from './gameobject'; -import { - config, -} from './functions'; -import { - type TransformProps, - type PositionXY, - type ExceptionError, - type PhaserGameObject, -} from './types'; -import { AudioClip } from './audio'; -import { DEFAULT_PATH_PREFIX } from './constants'; - -// Game state information, that changes every frame. -export const gameState = { - // Stores the debug information, which is reset every iteration of the update loop. - debugLogArray: new Array(), - // The current in-game time and frame count. - gameTime: 0, - loopCount: 0, - // Store keys that are down in the Phaser Scene - // By default, this is empty, unless a key is down - inputKeysDown: new Set(), - pointerProps: { - // the current (mouse) pointer position in the canvas - pointerPosition: [0, 0] as PositionXY, - // true if (left mouse button) pointer down, false otherwise - isPointerPrimaryDown: false, - isPointerSecondaryDown: false, - // Stores the IDs of the GameObjects that the pointer is over - pointerOverGameObjectsId: new Set(), - }, -}; - -// The game state which the user can modify, through their update function. -const userGameStateArray: Array = Array.of(); - -/** - * The Phaser scene that parses the GameObjects and update loop created by the user, - * into Phaser GameObjects, and Phaser updates. - */ -export class PhaserScene extends Phaser.Scene { - constructor() { - super('PhaserScene'); - } - private sourceGameObjects: Array = GameObject.getGameObjectsArray(); - private phaserGameObjects: Array = []; - private corsAssetsUrl: Set = new Set(); - private sourceAudioClips: Array = AudioClip.getAudioClipsArray(); - private phaserAudioClips: Array = []; - private shouldRerenderGameObjects: boolean = true; - private delayedKeyUpEvents: Set = new Set(); - private hasRuntimeError: boolean = false; - private debugLogInitialErrorCount: number = 0; - // Handle debug information - private debugLogText: Phaser.GameObjects.Text | undefined = undefined; - - init() { - gameState.debugLogArray.length = 0; - // Disable context menu within the canvas - this.game.canvas.oncontextmenu = (e) => e.preventDefault(); - } - - preload() { - // Set the default path prefix - this.load.setPath(DEFAULT_PATH_PREFIX); - this.sourceGameObjects.forEach((gameObject) => { - if (gameObject instanceof SpriteGameObject) { - this.corsAssetsUrl.add(gameObject.getSprite().imageUrl); - } - }); - // Preload sprites (through Cross-Origin resource sharing (CORS)) - this.corsAssetsUrl.forEach((url) => { - this.load.image(url, url); - }); - // Preload audio - this.sourceAudioClips.forEach((audioClip: AudioClip) => { - this.load.audio(audioClip.getUrl(), audioClip.getUrl()); - }); - // Checks if loaded assets success - this.load.on('loaderror', (file: Phaser.Loader.File) => { - this.debugLogInitialErrorCount++; - gameState.debugLogArray.push(`LoadError: "${file.key}" failed`); - }); - } - - create() { - this.createPhaserGameObjects(); - this.createAudioClips(); - - // Handle keyboard inputs - // Keyboard events can be detected inside the Source editor, which is not intended. #BUG - this.input.keyboard.on('keydown', (event: KeyboardEvent) => { - gameState.inputKeysDown.add(event.key); - }); - this.input.keyboard.on('keyup', (event: KeyboardEvent) => { - this.delayedKeyUpEvents.add(() => gameState.inputKeysDown.delete(event.key)); - }); - - // Handle debug info - if (!config.isDebugEnabled && !this.hasRuntimeError) { - gameState.debugLogArray.length = 0; - } - this.debugLogText = this.add.text(0, 0, gameState.debugLogArray) - .setWordWrapWidth(config.scale < 1 ? this.renderer.width * config.scale : this.renderer.width) - .setBackgroundColor('black') - .setAlpha(0.8) - .setScale(config.scale < 1 ? 1 / config.scale : 1); - } - - update(time, delta) { - // Set the time and delta - gameState.gameTime += delta; - gameState.loopCount++; - - // Set the pointer properties - gameState.pointerProps = { - ...gameState.pointerProps, - pointerPosition: [Math.trunc(this.input.activePointer.x), Math.trunc(this.input.activePointer.y)], - isPointerPrimaryDown: this.input.activePointer.primaryDown, - isPointerSecondaryDown: this.input.activePointer.rightButtonDown(), - }; - - this.handleUserDefinedUpdateFunction(); - this.handleGameObjectUpdates(); - this.handleAudioUpdates(); - - // Delay KeyUp events, so that low FPS can still detect KeyDown. - // eslint-disable-next-line array-callback-return - this.delayedKeyUpEvents.forEach((event: Function) => event()); - this.delayedKeyUpEvents.clear(); - - // Remove rerendering once game has been reloaded. - this.shouldRerenderGameObjects = false; - - // Set and clear debug info - if (this.debugLogText) { - this.debugLogText.setText(gameState.debugLogArray); - this.children.bringToTop(this.debugLogText); - if (this.hasRuntimeError) { - this.debugLogText.setColor('orange'); - this.sound.stopAll(); - this.scene.pause(); - } else { - gameState.debugLogArray.length = this.debugLogInitialErrorCount; - } - } - } - - private createPhaserGameObjects() { - this.sourceGameObjects.forEach((gameObject) => { - const transformProps = gameObject.getTransform(); - // Create TextGameObject - if (gameObject instanceof TextGameObject) { - const text = gameObject.getText().text; - this.phaserGameObjects.push(this.add.text( - transformProps.position[0], - transformProps.position[1], - text, - )); - this.phaserGameObjects[gameObject.id].setOrigin(0.5, 0.5); - if (gameObject.getHitboxState().isHitboxActive) { - this.phaserGameObjects[gameObject.id].setInteractive(); - } - } - // Create SpriteGameObject - if (gameObject instanceof SpriteGameObject) { - const url = gameObject.getSprite().imageUrl; - this.phaserGameObjects.push(this.add.sprite( - transformProps.position[0], - transformProps.position[1], - url, - )); - if (gameObject.getHitboxState().isHitboxActive) { - this.phaserGameObjects[gameObject.id].setInteractive(); - } - } - // Create ShapeGameObject - if (gameObject instanceof ShapeGameObject) { - if (gameObject instanceof RectangleGameObject) { - const shape = gameObject.getShape(); - this.phaserGameObjects.push(this.add.rectangle( - transformProps.position[0], - transformProps.position[1], - shape.width, - shape.height, - )); - if (gameObject.getHitboxState().isHitboxActive) { - this.phaserGameObjects[gameObject.id].setInteractive(); - } - } - if (gameObject instanceof CircleGameObject) { - const shape = gameObject.getShape(); - this.phaserGameObjects.push(this.add.circle( - transformProps.position[0], - transformProps.position[1], - shape.radius, - )); - if (gameObject.getHitboxState().isHitboxActive) { - this.phaserGameObjects[gameObject.id].setInteractive( - new Phaser.Geom.Circle( - shape.radius, - shape.radius, - shape.radius, - ), Phaser.Geom.Circle.Contains, - ); - } - } - if (gameObject instanceof TriangleGameObject) { - const shape = gameObject.getShape(); - this.phaserGameObjects.push(this.add.triangle( - transformProps.position[0], - transformProps.position[1], - shape.x1, - shape.y1, - shape.x2, - shape.y2, - shape.x3, - shape.y3, - )); - if (gameObject.getHitboxState().isHitboxActive) { - this.phaserGameObjects[gameObject.id].setInteractive( - new Phaser.Geom.Triangle( - shape.x1, - shape.y1, - shape.x2, - shape.y2, - shape.x3, - shape.y3, - ), Phaser.Geom.Triangle.Contains, - ); - } - } - } - - const phaserGameObject = this.phaserGameObjects[gameObject.id]; - // Handle pointer over GameObjects - phaserGameObject.on('pointerover', () => { - gameState.pointerProps.pointerOverGameObjectsId.add(gameObject.id); - }); - phaserGameObject.on('pointerout', () => { - gameState.pointerProps.pointerOverGameObjectsId.delete(gameObject.id); - }); - - // Enter debug mode - if (config.isDebugEnabled) { - this.input.enableDebug(phaserGameObject); - } - - // Store the phaserGameObject in the source representation - gameObject.setPhaserGameObject(phaserGameObject); - }); - } - - private createAudioClips() { - try { - this.sourceAudioClips.forEach((audioClip: AudioClip) => { - this.phaserAudioClips.push(this.sound.add(audioClip.getUrl(), { - loop: audioClip.shouldAudioClipLoop(), - volume: audioClip.getVolumeLevel(), - })); - }); - } catch (error) { - this.hasRuntimeError = true; - if (error instanceof Error) { - gameState.debugLogArray.push(`${error.name}: ${error.message}`); - } else { - gameState.debugLogArray.push('LoadError: Cannot load audio file'); - console.log(error); - } - } - } - - /** Run the user-defined update function, and catch runtime errors. */ - private handleUserDefinedUpdateFunction() { - try { - if (!this.hasRuntimeError) { - config.userUpdateFunction(userGameStateArray); - } - } catch (error) { - this.hasRuntimeError = true; - if (error instanceof Error) { - gameState.debugLogArray.push(`${error.name}: ${error.message}`); - } else { - const exceptionError = error as ExceptionError; - gameState.debugLogArray.push( - `Line ${exceptionError.location.start.line}: ${exceptionError.error.name}: ${exceptionError.error.message}`, - ); - } - } - } - - /** Loop through each GameObject in the array and determine which needs to update. */ - private handleGameObjectUpdates() { - this.sourceGameObjects.forEach((gameObject: InteractableGameObject) => { - const phaserGameObject = this.phaserGameObjects[gameObject.id] as PhaserGameObject; - if (phaserGameObject) { - // Update the transform of Phaser GameObject - if (gameObject.hasTransformUpdates() || this.shouldRerenderGameObjects) { - const transformProps = gameObject.getTransform() as TransformProps; - phaserGameObject.setPosition(transformProps.position[0], transformProps.position[1]) - .setRotation(transformProps.rotation) - .setScale(transformProps.scale[0], transformProps.scale[1]); - if (gameObject instanceof TriangleGameObject) { - // The only shape that requires flipping is the triangle, as the rest are symmetric about their origin. - phaserGameObject.setRotation(transformProps.rotation + (gameObject.getFlipState()[1] ? Math.PI : 0)); - } - gameObject.setTransformUpdated(); - } - - // Update the image of Phaser GameObject - if (gameObject.hasRenderUpdates() || this.shouldRerenderGameObjects) { - const color = gameObject.getColor(); - // eslint-disable-next-line new-cap - const intColor = Phaser.Display.Color.GetColor32(color[0], color[1], color[2], color[3]); - const flip = gameObject.getFlipState(); - if (gameObject instanceof TextGameObject) { - (phaserGameObject as Phaser.GameObjects.Text).setTint(intColor) - .setAlpha(color[3] / 255) - .setFlip(flip[0], flip[1]) - .setText(gameObject.getText().text); - } else if (gameObject instanceof SpriteGameObject) { - (phaserGameObject as Phaser.GameObjects.Sprite).setTint(intColor) - .setAlpha(color[3] / 255) - .setFlip(flip[0], flip[1]); - } else if (gameObject instanceof ShapeGameObject) { - (phaserGameObject as Phaser.GameObjects.Shape).setFillStyle(intColor, color[3] / 255) - // Phaser.GameObjects.Shape does not have setFlip, so flipping is done with rotations. - // The only shape that requires flipping is the triangle, as the rest are symmetric about their origin. - .setRotation(gameObject.getTransform().rotation + (flip[1] ? Math.PI : 0)); - } - // Update the z-index (rendering order), to the top. - if (gameObject.getShouldBringToTop()) { - this.children.bringToTop(phaserGameObject); - } - gameObject.setRenderUpdated(); - } - } else { - this.hasRuntimeError = true; - gameState.debugLogArray.push('RuntimeError: GameObject error in update_loop'); - } - }); - } - - private handleAudioUpdates() { - this.sourceAudioClips.forEach((audioClip: AudioClip) => { - if (audioClip.hasAudioClipUpdates()) { - const phaserAudioClip = this.phaserAudioClips[audioClip.id] as Phaser.Sound.BaseSound; - if (phaserAudioClip) { - if (audioClip.shouldAudioClipPlay()) { - phaserAudioClip.play(); - } else { - phaserAudioClip.stop(); - } - } else { - this.hasRuntimeError = true; - gameState.debugLogArray.push('RuntimeError: Audio error in update_loop'); - } - } - }); - } -} +import Phaser from 'phaser'; +import { + CircleGameObject, + GameObject, + type InteractableGameObject, + RectangleGameObject, + ShapeGameObject, + SpriteGameObject, + TextGameObject, + TriangleGameObject, +} from './gameobject'; +import { + config, +} from './functions'; +import { + type TransformProps, + type PositionXY, + type ExceptionError, + type PhaserGameObject, +} from './types'; +import { AudioClip } from './audio'; +import { DEFAULT_PATH_PREFIX } from './constants'; + +// Game state information, that changes every frame. +export const gameState = { + // Stores the debug information, which is reset every iteration of the update loop. + debugLogArray: new Array(), + // The current in-game time and frame count. + gameTime: 0, + loopCount: 0, + // Store keys that are down in the Phaser Scene + // By default, this is empty, unless a key is down + inputKeysDown: new Set(), + pointerProps: { + // the current (mouse) pointer position in the canvas + pointerPosition: [0, 0] as PositionXY, + // true if (left mouse button) pointer down, false otherwise + isPointerPrimaryDown: false, + isPointerSecondaryDown: false, + // Stores the IDs of the GameObjects that the pointer is over + pointerOverGameObjectsId: new Set(), + }, +}; + +// The game state which the user can modify, through their update function. +const userGameStateArray: Array = Array.of(); + +/** + * The Phaser scene that parses the GameObjects and update loop created by the user, + * into Phaser GameObjects, and Phaser updates. + */ +export class PhaserScene extends Phaser.Scene { + constructor() { + super('PhaserScene'); + } + private sourceGameObjects: Array = GameObject.getGameObjectsArray(); + private phaserGameObjects: Array = []; + private corsAssetsUrl: Set = new Set(); + private sourceAudioClips: Array = AudioClip.getAudioClipsArray(); + private phaserAudioClips: Array = []; + private shouldRerenderGameObjects: boolean = true; + private delayedKeyUpEvents: Set = new Set(); + private hasRuntimeError: boolean = false; + private debugLogInitialErrorCount: number = 0; + // Handle debug information + private debugLogText: Phaser.GameObjects.Text | undefined = undefined; + + init() { + gameState.debugLogArray.length = 0; + // Disable context menu within the canvas + this.game.canvas.oncontextmenu = (e) => e.preventDefault(); + } + + preload() { + // Set the default path prefix + this.load.setPath(DEFAULT_PATH_PREFIX); + this.sourceGameObjects.forEach((gameObject) => { + if (gameObject instanceof SpriteGameObject) { + this.corsAssetsUrl.add(gameObject.getSprite().imageUrl); + } + }); + // Preload sprites (through Cross-Origin resource sharing (CORS)) + this.corsAssetsUrl.forEach((url) => { + this.load.image(url, url); + }); + // Preload audio + this.sourceAudioClips.forEach((audioClip: AudioClip) => { + this.load.audio(audioClip.getUrl(), audioClip.getUrl()); + }); + // Checks if loaded assets success + this.load.on('loaderror', (file: Phaser.Loader.File) => { + this.debugLogInitialErrorCount++; + gameState.debugLogArray.push(`LoadError: "${file.key}" failed`); + }); + } + + create() { + this.createPhaserGameObjects(); + this.createAudioClips(); + + // Handle keyboard inputs + // Keyboard events can be detected inside the Source editor, which is not intended. #BUG + this.input.keyboard.on('keydown', (event: KeyboardEvent) => { + gameState.inputKeysDown.add(event.key); + }); + this.input.keyboard.on('keyup', (event: KeyboardEvent) => { + this.delayedKeyUpEvents.add(() => gameState.inputKeysDown.delete(event.key)); + }); + + // Handle debug info + if (!config.isDebugEnabled && !this.hasRuntimeError) { + gameState.debugLogArray.length = 0; + } + this.debugLogText = this.add.text(0, 0, gameState.debugLogArray) + .setWordWrapWidth(config.scale < 1 ? this.renderer.width * config.scale : this.renderer.width) + .setBackgroundColor('black') + .setAlpha(0.8) + .setScale(config.scale < 1 ? 1 / config.scale : 1); + } + + update(time, delta) { + // Set the time and delta + gameState.gameTime += delta; + gameState.loopCount++; + + // Set the pointer properties + gameState.pointerProps = { + ...gameState.pointerProps, + pointerPosition: [Math.trunc(this.input.activePointer.x), Math.trunc(this.input.activePointer.y)], + isPointerPrimaryDown: this.input.activePointer.primaryDown, + isPointerSecondaryDown: this.input.activePointer.rightButtonDown(), + }; + + this.handleUserDefinedUpdateFunction(); + this.handleGameObjectUpdates(); + this.handleAudioUpdates(); + + // Delay KeyUp events, so that low FPS can still detect KeyDown. + // eslint-disable-next-line array-callback-return + this.delayedKeyUpEvents.forEach((event: Function) => event()); + this.delayedKeyUpEvents.clear(); + + // Remove rerendering once game has been reloaded. + this.shouldRerenderGameObjects = false; + + // Set and clear debug info + if (this.debugLogText) { + this.debugLogText.setText(gameState.debugLogArray); + this.children.bringToTop(this.debugLogText); + if (this.hasRuntimeError) { + this.debugLogText.setColor('orange'); + this.sound.stopAll(); + this.scene.pause(); + } else { + gameState.debugLogArray.length = this.debugLogInitialErrorCount; + } + } + } + + private createPhaserGameObjects() { + this.sourceGameObjects.forEach((gameObject) => { + const transformProps = gameObject.getTransform(); + // Create TextGameObject + if (gameObject instanceof TextGameObject) { + const text = gameObject.getText().text; + this.phaserGameObjects.push(this.add.text( + transformProps.position[0], + transformProps.position[1], + text, + )); + this.phaserGameObjects[gameObject.id].setOrigin(0.5, 0.5); + if (gameObject.getHitboxState().isHitboxActive) { + this.phaserGameObjects[gameObject.id].setInteractive(); + } + } + // Create SpriteGameObject + if (gameObject instanceof SpriteGameObject) { + const url = gameObject.getSprite().imageUrl; + this.phaserGameObjects.push(this.add.sprite( + transformProps.position[0], + transformProps.position[1], + url, + )); + if (gameObject.getHitboxState().isHitboxActive) { + this.phaserGameObjects[gameObject.id].setInteractive(); + } + } + // Create ShapeGameObject + if (gameObject instanceof ShapeGameObject) { + if (gameObject instanceof RectangleGameObject) { + const shape = gameObject.getShape(); + this.phaserGameObjects.push(this.add.rectangle( + transformProps.position[0], + transformProps.position[1], + shape.width, + shape.height, + )); + if (gameObject.getHitboxState().isHitboxActive) { + this.phaserGameObjects[gameObject.id].setInteractive(); + } + } + if (gameObject instanceof CircleGameObject) { + const shape = gameObject.getShape(); + this.phaserGameObjects.push(this.add.circle( + transformProps.position[0], + transformProps.position[1], + shape.radius, + )); + if (gameObject.getHitboxState().isHitboxActive) { + this.phaserGameObjects[gameObject.id].setInteractive( + new Phaser.Geom.Circle( + shape.radius, + shape.radius, + shape.radius, + ), Phaser.Geom.Circle.Contains, + ); + } + } + if (gameObject instanceof TriangleGameObject) { + const shape = gameObject.getShape(); + this.phaserGameObjects.push(this.add.triangle( + transformProps.position[0], + transformProps.position[1], + shape.x1, + shape.y1, + shape.x2, + shape.y2, + shape.x3, + shape.y3, + )); + if (gameObject.getHitboxState().isHitboxActive) { + this.phaserGameObjects[gameObject.id].setInteractive( + new Phaser.Geom.Triangle( + shape.x1, + shape.y1, + shape.x2, + shape.y2, + shape.x3, + shape.y3, + ), Phaser.Geom.Triangle.Contains, + ); + } + } + } + + const phaserGameObject = this.phaserGameObjects[gameObject.id]; + // Handle pointer over GameObjects + phaserGameObject.on('pointerover', () => { + gameState.pointerProps.pointerOverGameObjectsId.add(gameObject.id); + }); + phaserGameObject.on('pointerout', () => { + gameState.pointerProps.pointerOverGameObjectsId.delete(gameObject.id); + }); + + // Enter debug mode + if (config.isDebugEnabled) { + this.input.enableDebug(phaserGameObject); + } + + // Store the phaserGameObject in the source representation + gameObject.setPhaserGameObject(phaserGameObject); + }); + } + + private createAudioClips() { + try { + this.sourceAudioClips.forEach((audioClip: AudioClip) => { + this.phaserAudioClips.push(this.sound.add(audioClip.getUrl(), { + loop: audioClip.shouldAudioClipLoop(), + volume: audioClip.getVolumeLevel(), + })); + }); + } catch (error) { + this.hasRuntimeError = true; + if (error instanceof Error) { + gameState.debugLogArray.push(`${error.name}: ${error.message}`); + } else { + gameState.debugLogArray.push('LoadError: Cannot load audio file'); + console.log(error); + } + } + } + + /** Run the user-defined update function, and catch runtime errors. */ + private handleUserDefinedUpdateFunction() { + try { + if (!this.hasRuntimeError) { + config.userUpdateFunction(userGameStateArray); + } + } catch (error) { + this.hasRuntimeError = true; + if (error instanceof Error) { + gameState.debugLogArray.push(`${error.name}: ${error.message}`); + } else { + const exceptionError = error as ExceptionError; + gameState.debugLogArray.push( + `Line ${exceptionError.location.start.line}: ${exceptionError.error.name}: ${exceptionError.error.message}`, + ); + } + } + } + + /** Loop through each GameObject in the array and determine which needs to update. */ + private handleGameObjectUpdates() { + this.sourceGameObjects.forEach((gameObject: InteractableGameObject) => { + const phaserGameObject = this.phaserGameObjects[gameObject.id] as PhaserGameObject; + if (phaserGameObject) { + // Update the transform of Phaser GameObject + if (gameObject.hasTransformUpdates() || this.shouldRerenderGameObjects) { + const transformProps = gameObject.getTransform() as TransformProps; + phaserGameObject.setPosition(transformProps.position[0], transformProps.position[1]) + .setRotation(transformProps.rotation) + .setScale(transformProps.scale[0], transformProps.scale[1]); + if (gameObject instanceof TriangleGameObject) { + // The only shape that requires flipping is the triangle, as the rest are symmetric about their origin. + phaserGameObject.setRotation(transformProps.rotation + (gameObject.getFlipState()[1] ? Math.PI : 0)); + } + gameObject.setTransformUpdated(); + } + + // Update the image of Phaser GameObject + if (gameObject.hasRenderUpdates() || this.shouldRerenderGameObjects) { + const color = gameObject.getColor(); + // eslint-disable-next-line new-cap + const intColor = Phaser.Display.Color.GetColor32(color[0], color[1], color[2], color[3]); + const flip = gameObject.getFlipState(); + if (gameObject instanceof TextGameObject) { + (phaserGameObject as Phaser.GameObjects.Text).setTint(intColor) + .setAlpha(color[3] / 255) + .setFlip(flip[0], flip[1]) + .setText(gameObject.getText().text); + } else if (gameObject instanceof SpriteGameObject) { + (phaserGameObject as Phaser.GameObjects.Sprite).setTint(intColor) + .setAlpha(color[3] / 255) + .setFlip(flip[0], flip[1]); + } else if (gameObject instanceof ShapeGameObject) { + (phaserGameObject as Phaser.GameObjects.Shape).setFillStyle(intColor, color[3] / 255) + // Phaser.GameObjects.Shape does not have setFlip, so flipping is done with rotations. + // The only shape that requires flipping is the triangle, as the rest are symmetric about their origin. + .setRotation(gameObject.getTransform().rotation + (flip[1] ? Math.PI : 0)); + } + // Update the z-index (rendering order), to the top. + if (gameObject.getShouldBringToTop()) { + this.children.bringToTop(phaserGameObject); + } + gameObject.setRenderUpdated(); + } + } else { + this.hasRuntimeError = true; + gameState.debugLogArray.push('RuntimeError: GameObject error in update_loop'); + } + }); + } + + private handleAudioUpdates() { + this.sourceAudioClips.forEach((audioClip: AudioClip) => { + if (audioClip.hasAudioClipUpdates()) { + const phaserAudioClip = this.phaserAudioClips[audioClip.id] as Phaser.Sound.BaseSound; + if (phaserAudioClip) { + if (audioClip.shouldAudioClipPlay()) { + phaserAudioClip.play(); + } else { + phaserAudioClip.stop(); + } + } else { + this.hasRuntimeError = true; + gameState.debugLogArray.push('RuntimeError: Audio error in update_loop'); + } + } + }); + } +} diff --git a/src/bundles/arcade_2d/types.ts b/src/bundles/arcade_2d/types.ts index 6104c451e..dafa6c61e 100644 --- a/src/bundles/arcade_2d/types.ts +++ b/src/bundles/arcade_2d/types.ts @@ -1,127 +1,127 @@ -/** - * This file contains the types used to represent GameObjects. - */ - -/** Represents (x,y) worldspace position of a GameObject. */ -export type PositionXY = [number, number]; - -/** Represents (x,y) worldspace scale of a GameObject. */ -export type ScaleXY = [number, number]; - -/** Represents the (width, height) dimensions of the game canvas. */ -export type DimensionsXY = [number, number]; - -/** Represents the (red, green, blue, alpha) of a color of a GameObject. */ -export type ColorRGBA = [number, number, number, number]; - -/** Represents (x,y) flip state of GameObject. */ -export type FlipXY = [boolean, boolean]; - -/** - * Represents transform properties of a GameObject in worldspace. - * @property {PositionXY} position - The (x,y) worldspace position of the GameObject. - * @property {ScaleXY} xScale - The (x,y) worldspace scale of the GameObject. - * @property {number} rotation - The worldspace rotation of the GameObject, in radians counter-clockwise. - */ -export type TransformProps = { - position: PositionXY; - scale: ScaleXY; - rotation: number; -}; - -/** - * Represents the render properties of a GameObject. - * @property {ColorRGBA} color - The color associated with the GameObject tint. - * @property {FlipXY} flip - The (x,y) flip state of the GameObject. - * @property {boolean} visible - The render-visibility of the GameObject. - */ -export type RenderProps = { - color: ColorRGBA; - flip: FlipXY; - isVisible: boolean; -}; - -/** - * Represents the interactable properties of a GameObject. - * @property {boolean} isHitboxActive - The interactable state of the hitbox associated with the GameObject in the canvas. - */ -export type InteractableProps = { - isHitboxActive: boolean; -}; - -/** - * Represents a rectangle of a GameObject's shape. - */ -export type RectangleProps = { - width: number; - height: number; -}; - -/** - * Represents a isosceles triangular shape of a GameObject's shape. - */ -export type TriangleProps = { - x1: number; - y1: number; - x2: number; - y2: number; - x3: number; - y3: number; -}; - -/** - * Represents a circular shape of a GameObject's shape. - */ -export type CircleProps = { - radius: number; -}; - -/** - * Represents the rendered text of a GameObject. - */ -export type DisplayText = { - text: string; -}; - -/** - * Represents the rendered sprite of a GameObject. - */ -export type Sprite = { - imageUrl: string; -}; - -// ============================================================================= -// Other types -// ============================================================================= - -/** - * Represent the return type of build_game(), which is accessed in the debuggerContext.result.value. - */ -export type BuildGame = { - toReplString: () => string; - gameConfig; -}; - -/** - * Represents an update function that is user-defined. - * userSuppliedState is an array that stores whatever the user sets it to be, - * which can be assessed and modified on the next frame. - */ -export type UpdateFunction = (userSuppliedState: Array) => void; - -/** - * Represents a runtime error, that is not an instance of Error. - */ -export type ExceptionError = { - error: Error; - location: { - start: { - line: number; - }; - }; -}; - -/** - * Represents the Phaser Game Object types that are used. - */ -export type PhaserGameObject = Phaser.GameObjects.Sprite | Phaser.GameObjects.Text | Phaser.GameObjects.Shape; +/** + * This file contains the types used to represent GameObjects. + */ + +/** Represents (x,y) worldspace position of a GameObject. */ +export type PositionXY = [number, number]; + +/** Represents (x,y) worldspace scale of a GameObject. */ +export type ScaleXY = [number, number]; + +/** Represents the (width, height) dimensions of the game canvas. */ +export type DimensionsXY = [number, number]; + +/** Represents the (red, green, blue, alpha) of a color of a GameObject. */ +export type ColorRGBA = [number, number, number, number]; + +/** Represents (x,y) flip state of GameObject. */ +export type FlipXY = [boolean, boolean]; + +/** + * Represents transform properties of a GameObject in worldspace. + * @property {PositionXY} position - The (x,y) worldspace position of the GameObject. + * @property {ScaleXY} xScale - The (x,y) worldspace scale of the GameObject. + * @property {number} rotation - The worldspace rotation of the GameObject, in radians counter-clockwise. + */ +export type TransformProps = { + position: PositionXY; + scale: ScaleXY; + rotation: number; +}; + +/** + * Represents the render properties of a GameObject. + * @property {ColorRGBA} color - The color associated with the GameObject tint. + * @property {FlipXY} flip - The (x,y) flip state of the GameObject. + * @property {boolean} visible - The render-visibility of the GameObject. + */ +export type RenderProps = { + color: ColorRGBA; + flip: FlipXY; + isVisible: boolean; +}; + +/** + * Represents the interactable properties of a GameObject. + * @property {boolean} isHitboxActive - The interactable state of the hitbox associated with the GameObject in the canvas. + */ +export type InteractableProps = { + isHitboxActive: boolean; +}; + +/** + * Represents a rectangle of a GameObject's shape. + */ +export type RectangleProps = { + width: number; + height: number; +}; + +/** + * Represents a isosceles triangular shape of a GameObject's shape. + */ +export type TriangleProps = { + x1: number; + y1: number; + x2: number; + y2: number; + x3: number; + y3: number; +}; + +/** + * Represents a circular shape of a GameObject's shape. + */ +export type CircleProps = { + radius: number; +}; + +/** + * Represents the rendered text of a GameObject. + */ +export type DisplayText = { + text: string; +}; + +/** + * Represents the rendered sprite of a GameObject. + */ +export type Sprite = { + imageUrl: string; +}; + +// ============================================================================= +// Other types +// ============================================================================= + +/** + * Represent the return type of build_game(), which is accessed in the debuggerContext.result.value. + */ +export type BuildGame = { + toReplString: () => string; + gameConfig; +}; + +/** + * Represents an update function that is user-defined. + * userSuppliedState is an array that stores whatever the user sets it to be, + * which can be assessed and modified on the next frame. + */ +export type UpdateFunction = (userSuppliedState: Array) => void; + +/** + * Represents a runtime error, that is not an instance of Error. + */ +export type ExceptionError = { + error: Error; + location: { + start: { + line: number; + }; + }; +}; + +/** + * Represents the Phaser Game Object types that are used. + */ +export type PhaserGameObject = Phaser.GameObjects.Sprite | Phaser.GameObjects.Text | Phaser.GameObjects.Shape; diff --git a/src/bundles/binary_tree/functions.ts b/src/bundles/binary_tree/functions.ts index f15d8e8c5..e165964d8 100644 --- a/src/bundles/binary_tree/functions.ts +++ b/src/bundles/binary_tree/functions.ts @@ -1,149 +1,149 @@ -/** - * The `binary_tree` Source Module provides functions for the interaction with binary trees, as covered the textbook - * [Structure and Interpretation of Computer Programs, JavaScript Adaptation (SICP JS)](https://sourceacademy.org/sicpjs) - * in [section 2.3.3 Example: Representing Sets](https://sourceacademy.org/sicpjs/2.3.3#h3). - * Click on a function name in the index below to see how the function is defined and used. - * @module binary_tree - */ -import type { BinaryTree } from './types'; - -/** - * Returns an empty binary tree, represented by the empty list null - * @example - * ```typescript - * display(make_empty_tree()); // Shows "null" in the REPL - * ``` - * @return An empty binary tree - */ - -export function make_empty_tree(): BinaryTree { - return null; -} - -/** - * Returns a binary tree node composed of the specified left subtree, value and right subtree. - * @example - * ```typescript - * const tree = make_tree(1, make_empty_tree(), make_empty_tree()); - * display(tree); // Shows "[1, [null, [null, null]]]" in the REPL - * ``` - * @param value Value to be stored in the node - * @param left Left subtree of the node - * @param right Right subtree of the node - * @returns A binary tree - */ -export function make_tree( - value: any, - left: BinaryTree, - right: BinaryTree, -): BinaryTree { - return [value, [left, [right, null]]]; -} - -/** - * Returns a boolean value, indicating whether the given - * value is a binary tree. - * @example - * ```typescript - * const tree = make_tree(1, make_empty_tree(), make_empty_tree()); - * display(is_tree(tree)); // Shows "true" in the REPL - * ``` - * @param v Value to be tested - * @returns bool - */ -export function is_tree( - value: any, -): boolean { - return value === null - || (Array.isArray(value) - && value.length === 2 - && Array.isArray(value[1]) - && value[1].length === 2 - && is_tree(value[1][0]) - && value[1][1].length === 2 - && is_tree(value[1][1][0]) - && value[1][1][1] === null); -} - -/** - * Returns a boolean value, indicating whether the given - * value is an empty binary tree. - * @example - * ```typescript - * const tree = make_tree(1, make_empty_tree(), make_empty_tree()); - * display(is_empty_tree(tree)); // Shows "false" in the REPL - * ``` - * @param v Value to be tested - * @returns bool - */ -export function is_empty_tree( - value: any, -): boolean { - return value === null; -} - -/** - * Returns the entry of a given binary tree. - * @example - * ```typescript - * const tree = make_tree(1, make_empty_tree(), make_empty_tree()); - * display(entry(tree)); // Shows "1" in the REPL - * ``` - * @param t BinaryTree to be accessed - * @returns Value - */ -export function entry( - t: BinaryTree, -): boolean { - if (Array.isArray(t) && t.length === 2) { - return t[0]; - } - throw new Error( - `function entry expects binary tree, received: ${t}`, - ); -} - -/** - * Returns the left branch of a given binary tree. - * @example - * ```typescript - * const tree = make_tree(1, make_tree(2, make_empty_tree(), make_empty_tree()), make_empty_tree()); - * display(entry(left_branch(tree))); // Shows "2" in the REPL - * ``` - * @param t BinaryTree to be accessed - * @returns BinaryTree - */ -export function left_branch( - t: BinaryTree, -): BinaryTree { - if (Array.isArray(t) && t.length === 2 - && Array.isArray(t[1]) && t[1].length === 2) { - return t[1][0]; - } - throw new Error( - `function left_branch expects binary tree, received: ${t}`, - ); -} - -/** - * Returns the right branch of a given binary tree. - * @example - * ```typescript - * const tree = make_tree(1, make_empty_tree(), make_tree(2, make_empty_tree(), make_empty_tree())); - * display(entry(right_branch(tree))); // Shows "2" in the REPL - * ``` - * @param t BinaryTree to be accessed - * @returns BinaryTree - */ -export function right_branch( - t: BinaryTree, -): BinaryTree { - if (Array.isArray(t) && t.length === 2 - && Array.isArray(t[1]) && t[1].length === 2 - && Array.isArray(t[1][1]) && t[1][1].length === 2) { - return t[1][1][0]; - } - throw new Error( - `function right_branch expects binary tree, received: ${t}`, - ); -} +/** + * The `binary_tree` Source Module provides functions for the interaction with binary trees, as covered the textbook + * [Structure and Interpretation of Computer Programs, JavaScript Adaptation (SICP JS)](https://sourceacademy.org/sicpjs) + * in [section 2.3.3 Example: Representing Sets](https://sourceacademy.org/sicpjs/2.3.3#h3). + * Click on a function name in the index below to see how the function is defined and used. + * @module binary_tree + */ +import type { BinaryTree } from './types'; + +/** + * Returns an empty binary tree, represented by the empty list null + * @example + * ```typescript + * display(make_empty_tree()); // Shows "null" in the REPL + * ``` + * @return An empty binary tree + */ + +export function make_empty_tree(): BinaryTree { + return null; +} + +/** + * Returns a binary tree node composed of the specified left subtree, value and right subtree. + * @example + * ```typescript + * const tree = make_tree(1, make_empty_tree(), make_empty_tree()); + * display(tree); // Shows "[1, [null, [null, null]]]" in the REPL + * ``` + * @param value Value to be stored in the node + * @param left Left subtree of the node + * @param right Right subtree of the node + * @returns A binary tree + */ +export function make_tree( + value: any, + left: BinaryTree, + right: BinaryTree, +): BinaryTree { + return [value, [left, [right, null]]]; +} + +/** + * Returns a boolean value, indicating whether the given + * value is a binary tree. + * @example + * ```typescript + * const tree = make_tree(1, make_empty_tree(), make_empty_tree()); + * display(is_tree(tree)); // Shows "true" in the REPL + * ``` + * @param v Value to be tested + * @returns bool + */ +export function is_tree( + value: any, +): boolean { + return value === null + || (Array.isArray(value) + && value.length === 2 + && Array.isArray(value[1]) + && value[1].length === 2 + && is_tree(value[1][0]) + && value[1][1].length === 2 + && is_tree(value[1][1][0]) + && value[1][1][1] === null); +} + +/** + * Returns a boolean value, indicating whether the given + * value is an empty binary tree. + * @example + * ```typescript + * const tree = make_tree(1, make_empty_tree(), make_empty_tree()); + * display(is_empty_tree(tree)); // Shows "false" in the REPL + * ``` + * @param v Value to be tested + * @returns bool + */ +export function is_empty_tree( + value: any, +): boolean { + return value === null; +} + +/** + * Returns the entry of a given binary tree. + * @example + * ```typescript + * const tree = make_tree(1, make_empty_tree(), make_empty_tree()); + * display(entry(tree)); // Shows "1" in the REPL + * ``` + * @param t BinaryTree to be accessed + * @returns Value + */ +export function entry( + t: BinaryTree, +): boolean { + if (Array.isArray(t) && t.length === 2) { + return t[0]; + } + throw new Error( + `function entry expects binary tree, received: ${t}`, + ); +} + +/** + * Returns the left branch of a given binary tree. + * @example + * ```typescript + * const tree = make_tree(1, make_tree(2, make_empty_tree(), make_empty_tree()), make_empty_tree()); + * display(entry(left_branch(tree))); // Shows "2" in the REPL + * ``` + * @param t BinaryTree to be accessed + * @returns BinaryTree + */ +export function left_branch( + t: BinaryTree, +): BinaryTree { + if (Array.isArray(t) && t.length === 2 + && Array.isArray(t[1]) && t[1].length === 2) { + return t[1][0]; + } + throw new Error( + `function left_branch expects binary tree, received: ${t}`, + ); +} + +/** + * Returns the right branch of a given binary tree. + * @example + * ```typescript + * const tree = make_tree(1, make_empty_tree(), make_tree(2, make_empty_tree(), make_empty_tree())); + * display(entry(right_branch(tree))); // Shows "2" in the REPL + * ``` + * @param t BinaryTree to be accessed + * @returns BinaryTree + */ +export function right_branch( + t: BinaryTree, +): BinaryTree { + if (Array.isArray(t) && t.length === 2 + && Array.isArray(t[1]) && t[1].length === 2 + && Array.isArray(t[1][1]) && t[1][1].length === 2) { + return t[1][1][0]; + } + throw new Error( + `function right_branch expects binary tree, received: ${t}`, + ); +} diff --git a/src/bundles/binary_tree/index.ts b/src/bundles/binary_tree/index.ts index a4f3f50e8..fcee9053c 100644 --- a/src/bundles/binary_tree/index.ts +++ b/src/bundles/binary_tree/index.ts @@ -1,10 +1,10 @@ -/** - * Binary Tree abstraction for Source Academy - * @author Martin Henz - * @author Joel Lee - * @author Loh Xian Ze, Bryan - */ -export { - entry, is_empty_tree, is_tree, left_branch, - make_empty_tree, make_tree, right_branch, -} from './functions'; +/** + * Binary Tree abstraction for Source Academy + * @author Martin Henz + * @author Joel Lee + * @author Loh Xian Ze, Bryan + */ +export { + entry, is_empty_tree, is_tree, left_branch, + make_empty_tree, make_tree, right_branch, +} from './functions'; diff --git a/src/bundles/binary_tree/types.ts b/src/bundles/binary_tree/types.ts index 877d19ab8..9976428b1 100644 --- a/src/bundles/binary_tree/types.ts +++ b/src/bundles/binary_tree/types.ts @@ -1 +1 @@ -export type BinaryTree = (BinaryTree | any)[] | null; +export type BinaryTree = (BinaryTree | any)[] | null; diff --git a/src/bundles/copy_gc/index.ts b/src/bundles/copy_gc/index.ts index 1467e47b8..34aa0812a 100644 --- a/src/bundles/copy_gc/index.ts +++ b/src/bundles/copy_gc/index.ts @@ -1,507 +1,507 @@ -import { COMMAND, type CommandHeapObject, type Memory, type MemoryHeaps, type Tag } from './types'; - -// Global Variables -let ROW: number = 10; -const COLUMN: number = 32; -let MEMORY_SIZE: number = -99; -let TO_SPACE: number; -let FROM_SPACE: number; -let memory: Memory; -let memoryHeaps: Memory[] = []; -const commandHeap: CommandHeapObject[] = []; -let toMemoryMatrix: number[][]; -let fromMemoryMatrix: number[][]; -let tags: Tag[]; -let typeTag: string[]; -const flips: number[] = []; -let TAG_SLOT: number = 0; -let SIZE_SLOT: number = 1; -let FIRST_CHILD_SLOT: number = 2; -let LAST_CHILD_SLOT: number = 3; -let ROOTS: number[] = []; - -function initialize_tag(allTag: number[], types: string[]): void { - tags = allTag; - typeTag = types; -} - -function allHeap(newHeap: number[][]): void { - memoryHeaps = newHeap; -} - -function updateFlip(): void { - flips.push(commandHeap.length - 1); -} - -function generateMemory(): void { - toMemoryMatrix = []; - for (let i = 0; i < ROW / 2; i += 1) { - memory = []; - for (let j = 0; j < COLUMN && i * COLUMN + j < MEMORY_SIZE / 2; j += 1) { - memory.push(i * COLUMN + j); - } - toMemoryMatrix.push(memory); - } - - fromMemoryMatrix = []; - for (let i = ROW / 2; i < ROW; i += 1) { - memory = []; - for (let j = 0; j < COLUMN && i * COLUMN + j < MEMORY_SIZE; j += 1) { - memory.push(i * COLUMN + j); - } - fromMemoryMatrix.push(memory); - } - - const obj: CommandHeapObject = { - type: COMMAND.INIT, - to: TO_SPACE, - from: FROM_SPACE, - heap: [], - left: -1, - right: -1, - sizeLeft: 0, - sizeRight: 0, - desc: 'Memory initially empty.', - leftDesc: '', - rightDesc: '', - scan: -1, - free: -1, - }; - - commandHeap.push(obj); -} - -function resetFromSpace(fromSpace, heap): number[] { - const newHeap: number[] = []; - if (fromSpace > 0) { - for (let i = 0; i < MEMORY_SIZE / 2; i += 1) { - newHeap.push(heap[i]); - } - for (let i = MEMORY_SIZE / 2; i < MEMORY_SIZE; i += 1) { - newHeap.push(0); - } - } else { - // to space between 0...M/2 - for (let i = 0; i < MEMORY_SIZE / 2; i += 1) { - newHeap.push(0); - } - for (let i = MEMORY_SIZE / 2; i < MEMORY_SIZE; i += 1) { - newHeap.push(heap[i]); - } - } - return newHeap; -} - -function initialize_memory(memorySize: number): void { - MEMORY_SIZE = memorySize; - ROW = MEMORY_SIZE / COLUMN; - TO_SPACE = 0; - FROM_SPACE = MEMORY_SIZE / 2; - generateMemory(); -} - -function newCommand( - type, - toSpace, - fromSpace, - left, - right, - sizeLeft, - sizeRight, - heap, - description, - firstDesc, - lastDesc, -): void { - const newType = type; - const newToSpace = toSpace; - const newFromSpace = fromSpace; - const newLeft = left; - const newRight = right; - const newSizeLeft = sizeLeft; - const newSizeRight = sizeRight; - const newDesc = description; - const newFirstDesc = firstDesc; - const newLastDesc = lastDesc; - - memory = []; - for (let j = 0; j < heap.length; j += 1) { - memory.push(heap[j]); - } - - const obj: CommandHeapObject = { - type: newType, - to: newToSpace, - from: newFromSpace, - heap: memory, - left: newLeft, - right: newRight, - sizeLeft: newSizeLeft, - sizeRight: newSizeRight, - desc: newDesc, - leftDesc: newFirstDesc, - rightDesc: newLastDesc, - scan: -1, - free: -1, - }; - - commandHeap.push(obj); -} - -function newCopy(left, right, heap): void { - const { length } = commandHeap; - const toSpace = commandHeap[length - 1].to; - const fromSpace = commandHeap[length - 1].from; - const newSizeLeft = heap[left + SIZE_SLOT]; - const newSizeRight = heap[right + SIZE_SLOT]; - const desc = `Copying node ${left} to ${right}`; - newCommand( - COMMAND.COPY, - toSpace, - fromSpace, - left, - right, - newSizeLeft, - newSizeRight, - heap, - desc, - 'index', - 'free', - ); -} - -function endFlip(left, heap): void { - const { length } = commandHeap; - const fromSpace = commandHeap[length - 1].from; - const toSpace = commandHeap[length - 1].to; - const newSizeLeft = heap[left + SIZE_SLOT]; - const desc = 'Flip finished'; - newCommand( - COMMAND.FLIP, - toSpace, - fromSpace, - left, - -1, - newSizeLeft, - 0, - heap, - desc, - 'free', - '', - ); - updateFlip(); -} - -function updateRoots(array): void { - for (let i = 0; i < array.length; i += 1) { - ROOTS.push(array[i]); - } -} - -function resetRoots(): void { - ROOTS = []; -} - -function startFlip(toSpace, fromSpace, heap): void { - const desc = 'Memory is exhausted. Start stop and copy garbage collector.'; - newCommand( - 'Start of Cheneys', - toSpace, - fromSpace, - -1, - -1, - 0, - 0, - heap, - desc, - '', - '', - ); - updateFlip(); -} - -function newPush(left, right, heap): void { - const { length } = commandHeap; - const toSpace = commandHeap[length - 1].to; - const fromSpace = commandHeap[length - 1].from; - const desc = `Push OS update memory ${left} and ${right}.`; - newCommand( - COMMAND.PUSH, - toSpace, - fromSpace, - left, - right, - 1, - 1, - heap, - desc, - 'last child address slot', - 'new child pushed', - ); -} - -function newPop(res, left, right, heap): void { - const { length } = commandHeap; - const toSpace = commandHeap[length - 1].to; - const fromSpace = commandHeap[length - 1].from; - const newRes = res; - const desc = `Pop OS from memory ${left}, with value ${newRes}.`; - newCommand( - COMMAND.POP, - toSpace, - fromSpace, - left, - right, - 1, - 1, - heap, - desc, - 'popped memory', - 'last child address slot', - ); -} - -function doneShowRoot(heap): void { - const toSpace = 0; - const fromSpace = 0; - const desc = 'All root nodes are copied'; - newCommand( - 'Copied Roots', - toSpace, - fromSpace, - -1, - -1, - 0, - 0, - heap, - desc, - '', - '', - ); -} - -function showRoots(left, heap): void { - const { length } = commandHeap; - const toSpace = commandHeap[length - 1].to; - const fromSpace = commandHeap[length - 1].from; - const newSizeLeft = heap[left + SIZE_SLOT]; - const desc = `Roots: node ${left}`; - newCommand( - 'Showing Roots', - toSpace, - fromSpace, - left, - -1, - newSizeLeft, - 0, - heap, - desc, - 'roots', - '', - ); -} - -function newAssign(res, left, heap): void { - const { length } = commandHeap; - const toSpace = commandHeap[length - 1].to; - const fromSpace = commandHeap[length - 1].from; - const newRes = res; - const desc = `Assign memory [${left}] with ${newRes}.`; - newCommand( - COMMAND.ASSIGN, - toSpace, - fromSpace, - left, - -1, - 1, - 1, - heap, - desc, - 'assigned memory', - '', - ); -} - -function newNew(left, heap): void { - const { length } = commandHeap; - const toSpace = commandHeap[length - 1].to; - const fromSpace = commandHeap[length - 1].from; - const newSizeLeft = heap[left + SIZE_SLOT]; - const desc = `New node starts in [${left}].`; - newCommand( - COMMAND.NEW, - toSpace, - fromSpace, - left, - -1, - newSizeLeft, - 0, - heap, - desc, - 'new memory allocated', - '', - ); -} - -function scanFlip(left, right, scan, free, heap): void { - const { length } = commandHeap; - const toSpace = commandHeap[length - 1].to; - const fromSpace = commandHeap[length - 1].from; - memory = []; - for (let j = 0; j < heap.length; j += 1) { - memory.push(heap[j]); - } - - const newLeft = left; - const newRight = right; - const newScan = scan; - const newFree = free; - let newDesc = `Scanning node at ${left} for children node ${scan} and ${free}`; - if (scan) { - if (free) { - newDesc = `Scanning node at ${left} for children node ${scan} and ${free}`; - } else { - newDesc = `Scanning node at ${left} for children node ${scan}`; - } - } else if (free) { - newDesc = `Scanning node at ${left} for children node ${free}`; - } - - const obj: CommandHeapObject = { - type: COMMAND.SCAN, - to: toSpace, - from: fromSpace, - heap: memory, - left: newLeft, - right: newRight, - sizeLeft: 1, - sizeRight: 1, - scan: newScan, - free: newFree, - desc: newDesc, - leftDesc: 'scan', - rightDesc: 'free', - }; - - commandHeap.push(obj); -} - -function updateSlotSegment( - tag: number, - size: number, - first: number, - last: number, -): void { - if (tag >= 0) { - TAG_SLOT = tag; - } - if (size >= 0) { - SIZE_SLOT = size; - } - if (first >= 0) { - FIRST_CHILD_SLOT = first; - } - if (last >= 0) { - LAST_CHILD_SLOT = last; - } -} - -function get_memory_size(): number { - return MEMORY_SIZE; -} - -function get_tags(): Tag[] { - return tags; -} - -function get_command(): CommandHeapObject[] { - return commandHeap; -} - -function get_flips(): number[] { - return flips; -} - -function get_types(): String[] { - return typeTag; -} - -function get_from_space(): number { - return FROM_SPACE; -} - -function get_memory_heap(): MemoryHeaps { - return memoryHeaps; -} - -function get_to_memory_matrix(): MemoryHeaps { - return toMemoryMatrix; -} - -function get_from_memory_matrix(): MemoryHeaps { - return fromMemoryMatrix; -} - -function get_roots(): number[] { - return ROOTS; -} - -function get_slots(): number[] { - return [TAG_SLOT, SIZE_SLOT, FIRST_CHILD_SLOT, LAST_CHILD_SLOT]; -} - -function get_to_space(): number { - return TO_SPACE; -} - -function get_column_size(): number { - return COLUMN; -} - -function get_row_size(): number { - return ROW; -} - -function init() { - return { - toReplString: () => '', - get_memory_size, - get_from_space, - get_to_space, - get_memory_heap, - get_tags, - get_types, - get_column_size, - get_row_size, - get_from_memory_matrix, - get_to_memory_matrix, - get_flips, - get_slots, - get_command, - get_roots, - }; -} - -export { - init, - // initialisation - initialize_memory, - initialize_tag, - generateMemory, - allHeap, - updateSlotSegment, - resetFromSpace, - newCommand, - newCopy, - endFlip, - newPush, - newPop, - newAssign, - newNew, - scanFlip, - startFlip, - updateRoots, - resetRoots, - showRoots, - doneShowRoot, -}; +import { COMMAND, type CommandHeapObject, type Memory, type MemoryHeaps, type Tag } from './types'; + +// Global Variables +let ROW: number = 10; +const COLUMN: number = 32; +let MEMORY_SIZE: number = -99; +let TO_SPACE: number; +let FROM_SPACE: number; +let memory: Memory; +let memoryHeaps: Memory[] = []; +const commandHeap: CommandHeapObject[] = []; +let toMemoryMatrix: number[][]; +let fromMemoryMatrix: number[][]; +let tags: Tag[]; +let typeTag: string[]; +const flips: number[] = []; +let TAG_SLOT: number = 0; +let SIZE_SLOT: number = 1; +let FIRST_CHILD_SLOT: number = 2; +let LAST_CHILD_SLOT: number = 3; +let ROOTS: number[] = []; + +function initialize_tag(allTag: number[], types: string[]): void { + tags = allTag; + typeTag = types; +} + +function allHeap(newHeap: number[][]): void { + memoryHeaps = newHeap; +} + +function updateFlip(): void { + flips.push(commandHeap.length - 1); +} + +function generateMemory(): void { + toMemoryMatrix = []; + for (let i = 0; i < ROW / 2; i += 1) { + memory = []; + for (let j = 0; j < COLUMN && i * COLUMN + j < MEMORY_SIZE / 2; j += 1) { + memory.push(i * COLUMN + j); + } + toMemoryMatrix.push(memory); + } + + fromMemoryMatrix = []; + for (let i = ROW / 2; i < ROW; i += 1) { + memory = []; + for (let j = 0; j < COLUMN && i * COLUMN + j < MEMORY_SIZE; j += 1) { + memory.push(i * COLUMN + j); + } + fromMemoryMatrix.push(memory); + } + + const obj: CommandHeapObject = { + type: COMMAND.INIT, + to: TO_SPACE, + from: FROM_SPACE, + heap: [], + left: -1, + right: -1, + sizeLeft: 0, + sizeRight: 0, + desc: 'Memory initially empty.', + leftDesc: '', + rightDesc: '', + scan: -1, + free: -1, + }; + + commandHeap.push(obj); +} + +function resetFromSpace(fromSpace, heap): number[] { + const newHeap: number[] = []; + if (fromSpace > 0) { + for (let i = 0; i < MEMORY_SIZE / 2; i += 1) { + newHeap.push(heap[i]); + } + for (let i = MEMORY_SIZE / 2; i < MEMORY_SIZE; i += 1) { + newHeap.push(0); + } + } else { + // to space between 0...M/2 + for (let i = 0; i < MEMORY_SIZE / 2; i += 1) { + newHeap.push(0); + } + for (let i = MEMORY_SIZE / 2; i < MEMORY_SIZE; i += 1) { + newHeap.push(heap[i]); + } + } + return newHeap; +} + +function initialize_memory(memorySize: number): void { + MEMORY_SIZE = memorySize; + ROW = MEMORY_SIZE / COLUMN; + TO_SPACE = 0; + FROM_SPACE = MEMORY_SIZE / 2; + generateMemory(); +} + +function newCommand( + type, + toSpace, + fromSpace, + left, + right, + sizeLeft, + sizeRight, + heap, + description, + firstDesc, + lastDesc, +): void { + const newType = type; + const newToSpace = toSpace; + const newFromSpace = fromSpace; + const newLeft = left; + const newRight = right; + const newSizeLeft = sizeLeft; + const newSizeRight = sizeRight; + const newDesc = description; + const newFirstDesc = firstDesc; + const newLastDesc = lastDesc; + + memory = []; + for (let j = 0; j < heap.length; j += 1) { + memory.push(heap[j]); + } + + const obj: CommandHeapObject = { + type: newType, + to: newToSpace, + from: newFromSpace, + heap: memory, + left: newLeft, + right: newRight, + sizeLeft: newSizeLeft, + sizeRight: newSizeRight, + desc: newDesc, + leftDesc: newFirstDesc, + rightDesc: newLastDesc, + scan: -1, + free: -1, + }; + + commandHeap.push(obj); +} + +function newCopy(left, right, heap): void { + const { length } = commandHeap; + const toSpace = commandHeap[length - 1].to; + const fromSpace = commandHeap[length - 1].from; + const newSizeLeft = heap[left + SIZE_SLOT]; + const newSizeRight = heap[right + SIZE_SLOT]; + const desc = `Copying node ${left} to ${right}`; + newCommand( + COMMAND.COPY, + toSpace, + fromSpace, + left, + right, + newSizeLeft, + newSizeRight, + heap, + desc, + 'index', + 'free', + ); +} + +function endFlip(left, heap): void { + const { length } = commandHeap; + const fromSpace = commandHeap[length - 1].from; + const toSpace = commandHeap[length - 1].to; + const newSizeLeft = heap[left + SIZE_SLOT]; + const desc = 'Flip finished'; + newCommand( + COMMAND.FLIP, + toSpace, + fromSpace, + left, + -1, + newSizeLeft, + 0, + heap, + desc, + 'free', + '', + ); + updateFlip(); +} + +function updateRoots(array): void { + for (let i = 0; i < array.length; i += 1) { + ROOTS.push(array[i]); + } +} + +function resetRoots(): void { + ROOTS = []; +} + +function startFlip(toSpace, fromSpace, heap): void { + const desc = 'Memory is exhausted. Start stop and copy garbage collector.'; + newCommand( + 'Start of Cheneys', + toSpace, + fromSpace, + -1, + -1, + 0, + 0, + heap, + desc, + '', + '', + ); + updateFlip(); +} + +function newPush(left, right, heap): void { + const { length } = commandHeap; + const toSpace = commandHeap[length - 1].to; + const fromSpace = commandHeap[length - 1].from; + const desc = `Push OS update memory ${left} and ${right}.`; + newCommand( + COMMAND.PUSH, + toSpace, + fromSpace, + left, + right, + 1, + 1, + heap, + desc, + 'last child address slot', + 'new child pushed', + ); +} + +function newPop(res, left, right, heap): void { + const { length } = commandHeap; + const toSpace = commandHeap[length - 1].to; + const fromSpace = commandHeap[length - 1].from; + const newRes = res; + const desc = `Pop OS from memory ${left}, with value ${newRes}.`; + newCommand( + COMMAND.POP, + toSpace, + fromSpace, + left, + right, + 1, + 1, + heap, + desc, + 'popped memory', + 'last child address slot', + ); +} + +function doneShowRoot(heap): void { + const toSpace = 0; + const fromSpace = 0; + const desc = 'All root nodes are copied'; + newCommand( + 'Copied Roots', + toSpace, + fromSpace, + -1, + -1, + 0, + 0, + heap, + desc, + '', + '', + ); +} + +function showRoots(left, heap): void { + const { length } = commandHeap; + const toSpace = commandHeap[length - 1].to; + const fromSpace = commandHeap[length - 1].from; + const newSizeLeft = heap[left + SIZE_SLOT]; + const desc = `Roots: node ${left}`; + newCommand( + 'Showing Roots', + toSpace, + fromSpace, + left, + -1, + newSizeLeft, + 0, + heap, + desc, + 'roots', + '', + ); +} + +function newAssign(res, left, heap): void { + const { length } = commandHeap; + const toSpace = commandHeap[length - 1].to; + const fromSpace = commandHeap[length - 1].from; + const newRes = res; + const desc = `Assign memory [${left}] with ${newRes}.`; + newCommand( + COMMAND.ASSIGN, + toSpace, + fromSpace, + left, + -1, + 1, + 1, + heap, + desc, + 'assigned memory', + '', + ); +} + +function newNew(left, heap): void { + const { length } = commandHeap; + const toSpace = commandHeap[length - 1].to; + const fromSpace = commandHeap[length - 1].from; + const newSizeLeft = heap[left + SIZE_SLOT]; + const desc = `New node starts in [${left}].`; + newCommand( + COMMAND.NEW, + toSpace, + fromSpace, + left, + -1, + newSizeLeft, + 0, + heap, + desc, + 'new memory allocated', + '', + ); +} + +function scanFlip(left, right, scan, free, heap): void { + const { length } = commandHeap; + const toSpace = commandHeap[length - 1].to; + const fromSpace = commandHeap[length - 1].from; + memory = []; + for (let j = 0; j < heap.length; j += 1) { + memory.push(heap[j]); + } + + const newLeft = left; + const newRight = right; + const newScan = scan; + const newFree = free; + let newDesc = `Scanning node at ${left} for children node ${scan} and ${free}`; + if (scan) { + if (free) { + newDesc = `Scanning node at ${left} for children node ${scan} and ${free}`; + } else { + newDesc = `Scanning node at ${left} for children node ${scan}`; + } + } else if (free) { + newDesc = `Scanning node at ${left} for children node ${free}`; + } + + const obj: CommandHeapObject = { + type: COMMAND.SCAN, + to: toSpace, + from: fromSpace, + heap: memory, + left: newLeft, + right: newRight, + sizeLeft: 1, + sizeRight: 1, + scan: newScan, + free: newFree, + desc: newDesc, + leftDesc: 'scan', + rightDesc: 'free', + }; + + commandHeap.push(obj); +} + +function updateSlotSegment( + tag: number, + size: number, + first: number, + last: number, +): void { + if (tag >= 0) { + TAG_SLOT = tag; + } + if (size >= 0) { + SIZE_SLOT = size; + } + if (first >= 0) { + FIRST_CHILD_SLOT = first; + } + if (last >= 0) { + LAST_CHILD_SLOT = last; + } +} + +function get_memory_size(): number { + return MEMORY_SIZE; +} + +function get_tags(): Tag[] { + return tags; +} + +function get_command(): CommandHeapObject[] { + return commandHeap; +} + +function get_flips(): number[] { + return flips; +} + +function get_types(): String[] { + return typeTag; +} + +function get_from_space(): number { + return FROM_SPACE; +} + +function get_memory_heap(): MemoryHeaps { + return memoryHeaps; +} + +function get_to_memory_matrix(): MemoryHeaps { + return toMemoryMatrix; +} + +function get_from_memory_matrix(): MemoryHeaps { + return fromMemoryMatrix; +} + +function get_roots(): number[] { + return ROOTS; +} + +function get_slots(): number[] { + return [TAG_SLOT, SIZE_SLOT, FIRST_CHILD_SLOT, LAST_CHILD_SLOT]; +} + +function get_to_space(): number { + return TO_SPACE; +} + +function get_column_size(): number { + return COLUMN; +} + +function get_row_size(): number { + return ROW; +} + +function init() { + return { + toReplString: () => '', + get_memory_size, + get_from_space, + get_to_space, + get_memory_heap, + get_tags, + get_types, + get_column_size, + get_row_size, + get_from_memory_matrix, + get_to_memory_matrix, + get_flips, + get_slots, + get_command, + get_roots, + }; +} + +export { + init, + // initialisation + initialize_memory, + initialize_tag, + generateMemory, + allHeap, + updateSlotSegment, + resetFromSpace, + newCommand, + newCopy, + endFlip, + newPush, + newPop, + newAssign, + newNew, + scanFlip, + startFlip, + updateRoots, + resetRoots, + showRoots, + doneShowRoot, +}; diff --git a/src/bundles/copy_gc/types.ts b/src/bundles/copy_gc/types.ts index 61caf5942..32ae5b243 100644 --- a/src/bundles/copy_gc/types.ts +++ b/src/bundles/copy_gc/types.ts @@ -1,32 +1,32 @@ -export type Memory = number[]; -export type MemoryHeaps = Memory[]; -export type Tag = number; - -// command type - -export enum COMMAND { - FLIP = 'Flip', - PUSH = 'Push', - POP = 'Pop', - COPY = 'Copy', - ASSIGN = 'Assign', - NEW = 'New', - SCAN = 'Scan', - INIT = 'Initialize Memory', -} - -export type CommandHeapObject = { - type: String; - to: number; - from: number; - heap: number[]; - left: number; - right: number; - sizeLeft: number; - sizeRight: number; - desc: String; - scan: number; - leftDesc: String; - rightDesc: String; - free: number; -}; +export type Memory = number[]; +export type MemoryHeaps = Memory[]; +export type Tag = number; + +// command type + +export enum COMMAND { + FLIP = 'Flip', + PUSH = 'Push', + POP = 'Pop', + COPY = 'Copy', + ASSIGN = 'Assign', + NEW = 'New', + SCAN = 'Scan', + INIT = 'Initialize Memory', +} + +export type CommandHeapObject = { + type: String; + to: number; + from: number; + heap: number[]; + left: number; + right: number; + sizeLeft: number; + sizeRight: number; + desc: String; + scan: number; + leftDesc: String; + rightDesc: String; + free: number; +}; diff --git a/src/bundles/csg/constants.ts b/src/bundles/csg/constants.ts index 1d66072be..48fa3be76 100644 --- a/src/bundles/csg/constants.ts +++ b/src/bundles/csg/constants.ts @@ -1,42 +1,42 @@ -/* [Imports] */ -import { IconSize } from '@blueprintjs/core'; - -/* [Exports] */ - -//NOTE Silver is in here to avoid circular dependencies, instead of in -// functions.ts with the other colour strings -export const SILVER: string = '#AAAAAA'; -export const DEFAULT_COLOR: string = SILVER; - -// Values extracted from the styling of the frontend -export const SA_TAB_BUTTON_WIDTH: string = '40px'; -export const SA_TAB_ICON_SIZE: number = IconSize.LARGE; - -export const BP_TOOLTIP_PADDING: string = '10px 12px'; -export const BP_TAB_BUTTON_MARGIN: string = '20px'; -export const BP_TAB_PANEL_MARGIN: string = '20px'; -export const BP_BORDER_RADIUS: string = '3px'; -export const STANDARD_MARGIN: string = '10px'; - -export const BP_TEXT_COLOR: string = '#F5F8FA'; -export const BP_TOOLTIP_BACKGROUND_COLOR: string = '#E1E8ED'; -export const BP_ICON_COLOR: string = '#A7B6C2'; -export const ACE_GUTTER_TEXT_COLOR: string = '#8091A0'; -export const ACE_GUTTER_BACKGROUND_COLOR: string = '#34495E'; -export const BP_TOOLTIP_TEXT_COLOR: string = '#394B59'; - -// Renderer grid constants -export const MAIN_TICKS: number = 1; -export const SUB_TICKS: number = MAIN_TICKS / 4; -export const GRID_PADDING: number = MAIN_TICKS; -export const ROUND_UP_INTERVAL: number = MAIN_TICKS; - -// Controls zoom constants -export const ZOOM_TICK_SCALE: number = 0.1; - -// Controls rotation constants -export const ROTATION_SPEED: number = 0.0015; - -// Controls pan constants -export const X_FACTOR: number = 1; -export const Y_FACTOR: number = 0.75; +/* [Imports] */ +import { IconSize } from '@blueprintjs/core'; + +/* [Exports] */ + +//NOTE Silver is in here to avoid circular dependencies, instead of in +// functions.ts with the other colour strings +export const SILVER: string = '#AAAAAA'; +export const DEFAULT_COLOR: string = SILVER; + +// Values extracted from the styling of the frontend +export const SA_TAB_BUTTON_WIDTH: string = '40px'; +export const SA_TAB_ICON_SIZE: number = IconSize.LARGE; + +export const BP_TOOLTIP_PADDING: string = '10px 12px'; +export const BP_TAB_BUTTON_MARGIN: string = '20px'; +export const BP_TAB_PANEL_MARGIN: string = '20px'; +export const BP_BORDER_RADIUS: string = '3px'; +export const STANDARD_MARGIN: string = '10px'; + +export const BP_TEXT_COLOR: string = '#F5F8FA'; +export const BP_TOOLTIP_BACKGROUND_COLOR: string = '#E1E8ED'; +export const BP_ICON_COLOR: string = '#A7B6C2'; +export const ACE_GUTTER_TEXT_COLOR: string = '#8091A0'; +export const ACE_GUTTER_BACKGROUND_COLOR: string = '#34495E'; +export const BP_TOOLTIP_TEXT_COLOR: string = '#394B59'; + +// Renderer grid constants +export const MAIN_TICKS: number = 1; +export const SUB_TICKS: number = MAIN_TICKS / 4; +export const GRID_PADDING: number = MAIN_TICKS; +export const ROUND_UP_INTERVAL: number = MAIN_TICKS; + +// Controls zoom constants +export const ZOOM_TICK_SCALE: number = 0.1; + +// Controls rotation constants +export const ROTATION_SPEED: number = 0.0015; + +// Controls pan constants +export const X_FACTOR: number = 1; +export const Y_FACTOR: number = 0.75; diff --git a/src/bundles/csg/core.ts b/src/bundles/csg/core.ts index d55d80630..82bef31e4 100644 --- a/src/bundles/csg/core.ts +++ b/src/bundles/csg/core.ts @@ -1,25 +1,25 @@ -/* [Imports] */ -import type { CsgModuleState, RenderGroupManager } from './utilities.js'; - -/* [Exports] */ -// After bundle initialises, tab will need to re-init on its end, as they run -// independently and are different versions of Core -export class Core { - private static moduleState: CsgModuleState | null = null; - - public static initialize(csgModuleState: CsgModuleState): void { - Core.moduleState = csgModuleState; - } - - public static getRenderGroupManager(): RenderGroupManager { - let moduleState: CsgModuleState = Core.moduleState as CsgModuleState; - - return moduleState.renderGroupManager; - } - - public static nextComponent(): number { - let moduleState: CsgModuleState = Core.moduleState as CsgModuleState; - - return moduleState.nextComponent(); - } -} +/* [Imports] */ +import type { CsgModuleState, RenderGroupManager } from './utilities.js'; + +/* [Exports] */ +// After bundle initialises, tab will need to re-init on its end, as they run +// independently and are different versions of Core +export class Core { + private static moduleState: CsgModuleState | null = null; + + public static initialize(csgModuleState: CsgModuleState): void { + Core.moduleState = csgModuleState; + } + + public static getRenderGroupManager(): RenderGroupManager { + let moduleState: CsgModuleState = Core.moduleState as CsgModuleState; + + return moduleState.renderGroupManager; + } + + public static nextComponent(): number { + let moduleState: CsgModuleState = Core.moduleState as CsgModuleState; + + return moduleState.nextComponent(); + } +} diff --git a/src/bundles/csg/functions.ts b/src/bundles/csg/functions.ts index ee19f75f8..333e40b23 100644 --- a/src/bundles/csg/functions.ts +++ b/src/bundles/csg/functions.ts @@ -1,838 +1,838 @@ -/** - * The module `csg` provides functions for drawing Constructive Solid Geometry (CSG) called `Shape`. - * - * A *Shape* is defined by its polygons and vertices. - * - * @module csg - * @author Liu Muchen - * @author Joel Leow - */ - -/* [Imports] */ -import { primitives } from '@jscad/modeling'; -import { colorize } from '@jscad/modeling/src/colors'; -import { - type BoundingBox, - measureArea, - measureBoundingBox, - measureVolume, -} from '@jscad/modeling/src/measurements'; -import { - intersect as _intersect, - subtract as _subtract, - union as _union, -} from '@jscad/modeling/src/operations/booleans'; -import { extrudeLinear } from '@jscad/modeling/src/operations/extrusions'; -import { - align, - center, - mirror, - rotate as _rotate, - scale as _scale, - translate as _translate, -} from '@jscad/modeling/src/operations/transforms'; -import { SILVER } from './constants.js'; -import { Core } from './core.js'; -import type { Color, Coordinates, Solid } from './jscad/types.js'; -import { clamp, hexToColor, type RenderGroup, Shape } from './utilities'; - -/* [Exports] */ - -// [Variables - Primitive shapes] - -/** - * Primitive Shape of a cube. - * - * @category Primitive - */ -export const cube: Shape = shapeSetOrigin( - new Shape(primitives.cube({ size: 1 })), -); - -/** - * Primitive Shape of a sphere. - * - * @category Primitive - */ -export const sphere: Shape = shapeSetOrigin( - new Shape(primitives.sphere({ radius: 0.5 })), -); - -/** - * Primitive Shape of a cylinder. - * - * @category Primitive - */ -export const cylinder: Shape = shapeSetOrigin( - new Shape(primitives.cylinder({ - radius: 0.5, - height: 1, - })), -); - -/** - * Primitive Shape of a prism. - * - * @category Primitive - */ -export const prism: Shape = shapeSetOrigin( - new Shape(extrudeLinear({ height: 1 }, primitives.triangle())), -); - -/** - * Primitive Shape of an extruded star. - * - * @category Primitive - */ -export const star: Shape = shapeSetOrigin( - new Shape(extrudeLinear({ height: 1 }, primitives.star({ outerRadius: 0.5 }))), -); - -/** - * Primitive Shape of a square pyramid. - * - * @category Primitive - */ -export const pyramid: Shape = shapeSetOrigin( - new Shape( - primitives.cylinderElliptic({ - height: 1, - startRadius: [0.5, 0.5], - endRadius: [Number.MIN_VALUE, Number.MIN_VALUE], - segments: 4, - }), - ), -); - -/** - * Primitive Shape of a cone. - * - * @category Primitive - */ -export const cone: Shape = shapeSetOrigin( - new Shape( - primitives.cylinderElliptic({ - height: 1, - startRadius: [0.5, 0.5], - endRadius: [Number.MIN_VALUE, Number.MIN_VALUE], - }), - ), -); - -/** - * Primitive Shape of a torus. - * - * @category Primitive - */ -export const torus: Shape = shapeSetOrigin( - new Shape(primitives.torus({ - innerRadius: 0.125, - outerRadius: 0.375, - })), -); - -/** - * Primitive Shape of a rounded cube. - * - * @category Primitive - */ -export const rounded_cube: Shape = shapeSetOrigin( - new Shape(primitives.roundedCuboid({ size: [1, 1, 1] })), -); - -/** - * Primitive Shape of a rounded cylinder. - * - * @category Primitive - */ -export const rounded_cylinder: Shape = shapeSetOrigin( - new Shape(primitives.roundedCylinder({ - height: 1, - radius: 0.5, - })), -); - -/** - * Primitive Shape of a geodesic sphere. - * - * @category Primitive - */ -export const geodesic_sphere: Shape = shapeSetOrigin( - new Shape(primitives.geodesicSphere({ radius: 0.5 })), -); - -// [Variables - Colours] - -/** - * A hex colour code for black (#000000). - * - * @category Colour - */ -export const black: string = '#000000'; - -/** - * A hex colour code for dark blue (#0000AA). - * - * @category Colour - */ -export const navy: string = '#0000AA'; - -/** - * A hex colour code for green (#00AA00). - * - * @category Colour - */ -export const green: string = '#00AA00'; - -/** - * A hex colour code for dark cyan (#00AAAA). - * - * @category Colour - */ -export const teal: string = '#00AAAA'; - -/** - * A hex colour code for dark red (#AA0000). - * - * @category Colour - */ -export const crimson: string = '#AA0000'; - -/** - * A hex colour code for purple (#AA00AA). - * - * @category Colour - */ -export const purple: string = '#AA00AA'; - -/** - * A hex colour code for orange (#FFAA00). - * - * @category Colour - */ -export const orange: string = '#FFAA00'; - -/** - * A hex colour code for light grey (#AAAAAA). This is the default colour used - * when storing a Shape. - * - * @category Colour - */ -export const silver: string = SILVER; - -/** - * A hex colour code for dark grey (#555555). - * - * @category Colour - */ -export const gray: string = '#555555'; - -/** - * A hex colour code for blue (#5555FF). - * - * @category Colour - */ -export const blue: string = '#5555FF'; - -/** - * A hex colour code for light green (#55FF55). - * - * @category Colour - */ -export const lime: string = '#55FF55'; - -/** - * A hex colour code for cyan (#55FFFF). - * - * @category Colour - */ -export const cyan: string = '#55FFFF'; - -/** - * A hex colour code for light red (#FF5555). - * - * @category Colour - */ -export const rose: string = '#FF5555'; - -/** - * A hex colour code for pink (#FF55FF). - * - * @category Colour - */ -export const pink: string = '#FF55FF'; - -/** - * A hex colour code for yellow (#FFFF55). - * - * @category Colour - */ -export const yellow: string = '#FFFF55'; - -/** - * A hex colour code for white (#FFFFFF). - * - * @category Colour - */ -export const white: string = '#FFFFFF'; - -// [Functions] - -/** - * Union of the two provided shapes to produce a new shape. - * - * @param {Shape} a - The first shape - * @param {Shape} b - The second shape - * @returns {Shape} The resulting unioned shape - */ -export function union(a: Shape, b: Shape): Shape { - let newSolid: Solid = _union(a.solid, b.solid); - return new Shape(newSolid); -} - -/** - * Subtraction of the second shape from the first shape to produce a new shape. - * - * @param {Shape} a - The shape to be subtracted from - * @param {Shape} b - The shape to remove from the first shape - * @returns {Shape} The resulting subtracted shape - */ -export function subtract(a: Shape, b: Shape): Shape { - let newSolid: Solid = _subtract(a.solid, b.solid); - return new Shape(newSolid); -} - -/** - * Intersection of the two shape to produce a new shape. - * - * @param {Shape} a - The first shape - * @param {Shape} b - The second shape - * @returns {Shape} The resulting intersection shape - */ -export function intersect(a: Shape, b: Shape): Shape { - let newSolid: Solid = _intersect(a.solid, b.solid); - return new Shape(newSolid); -} - -/** - * Scales the shape in the x, y and z direction with the specified factor, - * ranging from 0 to infinity. - * For example scaling the shape by 1 in x, y and z direction results in - * the original shape. - * - * @param {Shape} shape - The shape to be scaled - * @param {number} x - Scaling in the x direction - * @param {number} y - Scaling in the y direction - * @param {number} z - Scaling in the z direction - * @returns {Shape} Resulting Shape - */ -export function scale(shape: Shape, x: number, y: number, z: number): Shape { - let newSolid: Solid = _scale([x, y, z], shape.solid); - return new Shape(newSolid); -} - -/** - * Scales the shape in the x direction with the specified factor, - * ranging from 0 to infinity. - * For example scaling the shape by 1 in x direction results in the - * original shape. - * - * @param {Shape} shape - The shape to be scaled - * @param {number} x - Scaling in the x direction - * @returns {Shape} Resulting Shape - */ -export function scale_x(shape: Shape, x: number): Shape { - return scale(shape, x, 1, 1); -} - -/** - * Scales the shape in the y direction with the specified factor, - * ranging from 0 to infinity. - * For example scaling the shape by 1 in y direction results in the - * original shape. - * - * @param {Shape} shape - The shape to be scaled - * @param {number} y - Scaling in the y direction - * @returns {Shape} Resulting Shape - */ -export function scale_y(shape: Shape, y: number): Shape { - return scale(shape, 1, y, 1); -} - -/** - * Scales the shape in the z direction with the specified factor, - * ranging from 0 to infinity. - * For example scaling the shape by 1 in z direction results in the - * original shape. - * - * @param {Shape} shape - The shape to be scaled - * @param {number} z - Scaling in the z direction - * @returns {Shape} Resulting Shape - */ -export function scale_z(shape: Shape, z: number): Shape { - return scale(shape, 1, 1, z); -} - -/** - * Returns a lambda function that contains the center of the given shape in the - * x, y and z direction. Providing 'x', 'y', 'z' as input would return x, y and - * z coordinates of shape's center - * - * For example - * ```` - * const a = shape_center(sphere); - * a('x'); // Returns the x coordinate of the shape's center - * ```` - * - * @param {Shape} shape - The scale to be measured - * @returns {(String) => number} A lambda function providing the shape's center - * coordinates - */ -export function shape_center(shape: Shape): (axis: String) => number { - let bounds: BoundingBox = measureBoundingBox(shape.solid); - let centerCoords: Coordinates = [ - bounds[0][0] + (bounds[1][0] - bounds[0][0]) / 2, - bounds[0][1] + (bounds[1][1] - bounds[0][1]) / 2, - bounds[0][2] + (bounds[1][2] - bounds[0][2]) / 2, - ]; - return (axis: String): number => { - let i: number = axis === 'x' ? 0 : axis === 'y' ? 1 : axis === 'z' ? 2 : -1; - if (i === -1) { - throw Error('shape_center\'s returned function expects a proper axis.'); - } else { - return centerCoords[i]; - } - }; -} - -/** - * Set the center of the shape with the provided x, y and z coordinates. - * - * @param {Shape} shape - The scale to have the center set - * @param {nunber} x - The center with the x coordinate - * @param {nunber} y - The center with the y coordinate - * @param {nunber} z - The center with the z coordinate - * @returns {Shape} The shape with the new center - */ -export function shape_set_center( - shape: Shape, - x: number, - y: number, - z: number, -): Shape { - let newSolid: Solid = center({ relativeTo: [x, y, z] }, shape.solid); - return new Shape(newSolid); -} - -/** - * Measure the area of the provided shape. - * - * @param {Shape} shape - The shape to measure the area from - * @returns {number} The area of the shape - */ -export function area(shape: Shape): number { - return measureArea(shape.solid); -} - -/** - * Measure the volume of the provided shape. - * - * @param {Shape} shape - The shape to measure the volume from - * @returns {number} The volume of the shape - */ -export function volume(shape: Shape): number { - return measureVolume(shape.solid); -} - -//TODO -/** - * Mirror / Flip the provided shape by the plane with normal direction vector - * given by the x, y and z components. - * - * @param {Shape} shape - The shape to mirror / flip - * @param {number} x - The x coordinate of the direction vector - * @param {number} y - The y coordinate of the direction vector - * @param {number} z - The z coordinate of the direction vector - * @returns {Shape} The mirrored / flipped shape - */ -function shape_mirror(shape: Shape, x: number, y: number, z: number) { - let newSolid: Solid = mirror({ normal: [x, y, z] }, shape.solid); - return new Shape(newSolid); -} - -/** - * Mirror / Flip the provided shape in the x direction. - * - * @param {Shape} shape - The shape to mirror / flip - * @returns {Shape} The mirrored / flipped shape - */ -export function flip_x(shape: Shape): Shape { - return shape_mirror(shape, 1, 0, 0); -} - -/** - * Mirror / Flip the provided shape in the y direction. - * - * @param {Shape} shape - The shape to mirror / flip - * @returns {Shape} The mirrored / flipped shape - */ -export function flip_y(shape: Shape): Shape { - return shape_mirror(shape, 0, 1, 0); -} - -/** - * Mirror / Flip the provided shape in the z direction. - * - * @param {Shape} shape - The shape to mirror / flip - * @returns {Shape} The mirrored / flipped shape - */ -export function flip_z(shape: Shape): Shape { - return shape_mirror(shape, 0, 0, 1); -} - -/** - * Translate / Move the shape by the provided x, y and z units from negative - * infinity to infinity. - * - * @param {Shape} shape - * @param {number} x - The number to shift the shape in the x direction - * @param {number} y - The number to shift the shape in the y direction - * @param {number} z - The number to shift the shape in the z direction - * @returns {Shape} The translated shape - */ -export function translate( - shape: Shape, - x: number, - y: number, - z: number, -): Shape { - let newSolid: Solid = _translate([x, y, z], shape.solid); - return new Shape(newSolid); -} - -/** - * Translate / Move the shape by the provided x units from negative infinity - * to infinity. - * - * @param {Shape} shape - * @param {number} x - The number to shift the shape in the x direction - * @returns {Shape} The translated shape - */ -export function translate_x(shape: Shape, x: number): Shape { - return translate(shape, x, 0, 0); -} - -/** - * Translate / Move the shape by the provided y units from negative infinity - * to infinity. - * - * @param {Shape} shape - * @param {number} y - The number to shift the shape in the y direction - * @returns {Shape} The translated shape - */ -export function translate_y(shape: Shape, y: number): Shape { - return translate(shape, 0, y, 0); -} - -/** - * Translate / Move the shape by the provided z units from negative infinity - * to infinity. - * - * @param {Shape} shape - * @param {number} z - The number to shift the shape in the z direction - * @returns {Shape} The translated shape - */ -export function translate_z(shape: Shape, z: number): Shape { - return translate(shape, 0, 0, z); -} - -/** - * Places the second shape `b` beside the first shape `a` in the positive x direction, - * centering the `b`'s y and z on the `a`'s y and z center. - * - * @param {Shape} a - The shape to be placed beside with - * @param {Shape} b - The shape placed beside - * @returns {Shape} The final shape - */ -export function beside_x(a: Shape, b: Shape): Shape { - let aBounds: BoundingBox = measureBoundingBox(a.solid); - let newX: number = aBounds[1][0]; - let newY: number = aBounds[0][1] + (aBounds[1][1] - aBounds[0][1]) / 2; - let newZ: number = aBounds[0][2] + (aBounds[1][2] - aBounds[0][2]) / 2; - let newSolid: Solid = _union( - a.solid, - align( - { - modes: ['min', 'center', 'center'], - relativeTo: [newX, newY, newZ], - }, - b.solid, - ), - ); - return new Shape(newSolid); -} - -/** - * Places the second shape `b` beside the first shape `a` in the positive y direction, - * centering the `b`'s x and z on the `a`'s x and z center. - * - * @param {Shape} a - The shape to be placed beside with - * @param {Shape} b - The shape placed beside - * @returns {Shape} The final shape - */ -export function beside_y(a: Shape, b: Shape): Shape { - let aBounds: BoundingBox = measureBoundingBox(a.solid); - let newX: number = aBounds[0][0] + (aBounds[1][0] - aBounds[0][0]) / 2; - let newY: number = aBounds[1][1]; - let newZ: number = aBounds[0][2] + (aBounds[1][2] - aBounds[0][2]) / 2; - let newSolid: Solid = _union( - a.solid, - align( - { - modes: ['center', 'min', 'center'], - relativeTo: [newX, newY, newZ], - }, - b.solid, - ), - ); - return new Shape(newSolid); -} - -/** - * Places the second shape `b` beside the first shape `a` in the positive z direction, - * centering the `b`'s x and y on the `a`'s x and y center. - * - * @param {Shape} a - The shape to be placed beside with - * @param {Shape} b - The shape placed beside - * @returns {Shape} The final shape - */ -export function beside_z(a: Shape, b: Shape): Shape { - let aBounds: BoundingBox = measureBoundingBox(a.solid); - let newX: number = aBounds[0][0] + (aBounds[1][0] - aBounds[0][0]) / 2; - let newY: number = aBounds[0][1] + (aBounds[1][1] - aBounds[0][1]) / 2; - let newZ: number = aBounds[1][2]; - let newSolid: Solid = _union( - a.solid, - align( - { - modes: ['center', 'center', 'min'], - relativeTo: [newX, newY, newZ], - }, - b.solid, - ), - ); - return new Shape(newSolid); -} - -/** - * Returns a lambda function that contains the coordinates of the bounding box. - * Provided with the axis 'x', 'y' or 'z' and value 'min' for minimum and 'max' - * for maximum, it returns the coordinates of the bounding box. - * - * For example - * ```` - * const a = bounding_box(sphere); - * a('x', 'min'); // Returns the maximum x coordinate of the bounding box - * ```` - * - * @param {Shape} shape - The scale to be measured - * @returns {(String, String) => number} A lambda function providing the - * shape's bounding box coordinates - */ - -export function bounding_box( - shape: Shape, -): (axis: String, min: String) => number { - let bounds: BoundingBox = measureBoundingBox(shape.solid); - return (axis: String, min: String): number => { - let i: number = axis === 'x' ? 0 : axis === 'y' ? 1 : axis === 'z' ? 2 : -1; - let j: number = min === 'min' ? 0 : min === 'max' ? 1 : -1; - if (i === -1 || j === -1) { - throw Error( - 'bounding_box returned function expects a proper axis and min String.', - ); - } else { - return bounds[j][i]; - } - }; -} - -/** - * Rotate the shape by the provided angles in the x, y and z direction. - * Angles provided are in the form of radians (i.e. 2π represent 360 - * degrees) - * - * @param {Shape} shape - The shape to be rotated - * @param {number} x - Angle of rotation in the x direction - * @param {number} y - Angle of rotation in the y direction - * @param {number} z - Angle of rotation in the z direction - * @returns {Shape} The rotated shape - */ -export function rotate(shape: Shape, x: number, y: number, z: number): Shape { - let newSolid: Solid = _rotate([x, y, z], shape.solid); - return new Shape(newSolid); -} - -/** - * Rotate the shape by the provided angles in the x direction. Angles - * provided are in the form of radians (i.e. 2π represent 360 degrees) - * - * @param {Shape} shape - The shape to be rotated - * @param {number} x - Angle of rotation in the x direction - * @returns {Shape} The rotated shape - */ -export function rotate_x(shape: Shape, x: number): Shape { - return rotate(shape, x, 0, 0); -} - -/** - * Rotate the shape by the provided angles in the y direction. Angles - * provided are in the form of radians (i.e. 2π represent 360 degrees) - * - * @param {Shape} shape - The shape to be rotated - * @param {number} y - Angle of rotation in the y direction - * @returns {Shape} The rotated shape - */ -export function rotate_y(shape: Shape, y: number): Shape { - return rotate(shape, 0, y, 0); -} - -/** - * Rotate the shape by the provided angles in the z direction. Angles - * provided are in the form of radians (i.e. 2π represent 360 degrees) - * - * @param {Shape} shape - The shape to be rotated - * @param {number} z - Angle of rotation in the z direction - * @returns {Shape} The rotated shape - */ -export function rotate_z(shape: Shape, z: number): Shape { - return rotate(shape, 0, 0, z); -} - -//TODO -/** - * Center the provided shape with the middle base of the shape at (0, 0, 0). - * - * @param {Shape} shape - The shape to be centered - * @returns {Shape} The shape that is centered - */ -function shapeSetOrigin(shape: Shape) { - let newSolid: Solid = align({ modes: ['min', 'min', 'min'] }, shape.solid); - return new Shape(newSolid); -} - -/** - * Checks if the specified argument is a Shape. - * - * @param {unknown} argument - The value to check. - * @returns {boolean} Whether the argument is a Shape. - */ -export function is_shape(argument: unknown): boolean { - return argument instanceof Shape; -} - -/** - * Creates a clone of the specified Shape. - * - * @param {Shape} shape - The Shape to be cloned. - * @returns {Shape} The cloned Shape. - */ -export function clone(shape: Shape): Shape { - return shape.clone(); -} - -/** - * Stores a clone of the specified Shape for later rendering. Its colour - * defaults to the module's provided silver colour variable. - * - * @param {Shape} shape - The Shape to be stored. - */ -export function store(shape: Shape) { - Core.getRenderGroupManager() - .storeShape(shape.clone()); -} - -/** - * Colours a clone of the specified Shape using the specified hex colour code, - * then stores it for later rendering. You may use one of the colour variables - * provided by the module, or you may specify your own custom colour code. - * - * Colour codes must be of the form "#XXXXXX" or "XXXXXX", where each X - * represents a non-case sensitive hexadecimal number. Invalid colour codes - * default to black. - * - * @param {Shape} shape - The Shape to be coloured and stored. - * @param {string} hex - The colour code to use. - */ -export function store_as_color(shape: Shape, hex: string) { - let color: Color = hexToColor(hex); - let coloredSolid: Solid = colorize(color, shape.solid); - Core.getRenderGroupManager() - .storeShape(new Shape(coloredSolid)); -} - -/** - * Colours a clone of the specified Shape using the specified RGB values, then - * stores it for later rendering. - * - * RGB values are clamped between 0 and 1. - * - * @param {Shape} shape - The Shape to be coloured and stored. - * @param {number} redComponent - The colour's red component. - * @param {number} greenComponent - The colour's green component. - * @param {number} blueComponent - The colour's blue component. - */ -export function store_as_rgb( - shape: Shape, - redComponent: number, - greenComponent: number, - blueComponent: number, -) { - redComponent = clamp(redComponent, 0, 1); - greenComponent = clamp(greenComponent, 0, 1); - blueComponent = clamp(blueComponent, 0, 1); - - let coloredSolid: Solid = colorize( - [redComponent, greenComponent, blueComponent], - shape.solid, - ); - Core.getRenderGroupManager() - .storeShape(new Shape(coloredSolid)); -} - -/** - * Renders using any Shapes stored thus far, along with a grid and axis. The - * Shapes will then not be included in any subsequent renders. - */ -export function render_grid_axis(): RenderGroup { - // Render group is returned for REPL text only; do not document - return Core.getRenderGroupManager() - .nextRenderGroup(true, true); -} - -/** - * Renders using any Shapes stored thus far, along with a grid. The Shapes will - * then not be included in any subsequent renders. - */ -export function render_grid(): RenderGroup { - return Core.getRenderGroupManager() - .nextRenderGroup(true); -} - -/** - * Renders using any Shapes stored thus far, along with an axis. The Shapes will - * then not be included in any subsequent renders. - */ -export function render_axis(): RenderGroup { - return Core.getRenderGroupManager() - .nextRenderGroup(undefined, true); -} - -/** - * Renders using any Shapes stored thus far. The Shapes will then not be - * included in any subsequent renders. - */ -export function render(): RenderGroup { - return Core.getRenderGroupManager() - .nextRenderGroup(); -} +/** + * The module `csg` provides functions for drawing Constructive Solid Geometry (CSG) called `Shape`. + * + * A *Shape* is defined by its polygons and vertices. + * + * @module csg + * @author Liu Muchen + * @author Joel Leow + */ + +/* [Imports] */ +import { primitives } from '@jscad/modeling'; +import { colorize } from '@jscad/modeling/src/colors'; +import { + type BoundingBox, + measureArea, + measureBoundingBox, + measureVolume, +} from '@jscad/modeling/src/measurements'; +import { + intersect as _intersect, + subtract as _subtract, + union as _union, +} from '@jscad/modeling/src/operations/booleans'; +import { extrudeLinear } from '@jscad/modeling/src/operations/extrusions'; +import { + align, + center, + mirror, + rotate as _rotate, + scale as _scale, + translate as _translate, +} from '@jscad/modeling/src/operations/transforms'; +import { SILVER } from './constants.js'; +import { Core } from './core.js'; +import type { Color, Coordinates, Solid } from './jscad/types.js'; +import { clamp, hexToColor, type RenderGroup, Shape } from './utilities'; + +/* [Exports] */ + +// [Variables - Primitive shapes] + +/** + * Primitive Shape of a cube. + * + * @category Primitive + */ +export const cube: Shape = shapeSetOrigin( + new Shape(primitives.cube({ size: 1 })), +); + +/** + * Primitive Shape of a sphere. + * + * @category Primitive + */ +export const sphere: Shape = shapeSetOrigin( + new Shape(primitives.sphere({ radius: 0.5 })), +); + +/** + * Primitive Shape of a cylinder. + * + * @category Primitive + */ +export const cylinder: Shape = shapeSetOrigin( + new Shape(primitives.cylinder({ + radius: 0.5, + height: 1, + })), +); + +/** + * Primitive Shape of a prism. + * + * @category Primitive + */ +export const prism: Shape = shapeSetOrigin( + new Shape(extrudeLinear({ height: 1 }, primitives.triangle())), +); + +/** + * Primitive Shape of an extruded star. + * + * @category Primitive + */ +export const star: Shape = shapeSetOrigin( + new Shape(extrudeLinear({ height: 1 }, primitives.star({ outerRadius: 0.5 }))), +); + +/** + * Primitive Shape of a square pyramid. + * + * @category Primitive + */ +export const pyramid: Shape = shapeSetOrigin( + new Shape( + primitives.cylinderElliptic({ + height: 1, + startRadius: [0.5, 0.5], + endRadius: [Number.MIN_VALUE, Number.MIN_VALUE], + segments: 4, + }), + ), +); + +/** + * Primitive Shape of a cone. + * + * @category Primitive + */ +export const cone: Shape = shapeSetOrigin( + new Shape( + primitives.cylinderElliptic({ + height: 1, + startRadius: [0.5, 0.5], + endRadius: [Number.MIN_VALUE, Number.MIN_VALUE], + }), + ), +); + +/** + * Primitive Shape of a torus. + * + * @category Primitive + */ +export const torus: Shape = shapeSetOrigin( + new Shape(primitives.torus({ + innerRadius: 0.125, + outerRadius: 0.375, + })), +); + +/** + * Primitive Shape of a rounded cube. + * + * @category Primitive + */ +export const rounded_cube: Shape = shapeSetOrigin( + new Shape(primitives.roundedCuboid({ size: [1, 1, 1] })), +); + +/** + * Primitive Shape of a rounded cylinder. + * + * @category Primitive + */ +export const rounded_cylinder: Shape = shapeSetOrigin( + new Shape(primitives.roundedCylinder({ + height: 1, + radius: 0.5, + })), +); + +/** + * Primitive Shape of a geodesic sphere. + * + * @category Primitive + */ +export const geodesic_sphere: Shape = shapeSetOrigin( + new Shape(primitives.geodesicSphere({ radius: 0.5 })), +); + +// [Variables - Colours] + +/** + * A hex colour code for black (#000000). + * + * @category Colour + */ +export const black: string = '#000000'; + +/** + * A hex colour code for dark blue (#0000AA). + * + * @category Colour + */ +export const navy: string = '#0000AA'; + +/** + * A hex colour code for green (#00AA00). + * + * @category Colour + */ +export const green: string = '#00AA00'; + +/** + * A hex colour code for dark cyan (#00AAAA). + * + * @category Colour + */ +export const teal: string = '#00AAAA'; + +/** + * A hex colour code for dark red (#AA0000). + * + * @category Colour + */ +export const crimson: string = '#AA0000'; + +/** + * A hex colour code for purple (#AA00AA). + * + * @category Colour + */ +export const purple: string = '#AA00AA'; + +/** + * A hex colour code for orange (#FFAA00). + * + * @category Colour + */ +export const orange: string = '#FFAA00'; + +/** + * A hex colour code for light grey (#AAAAAA). This is the default colour used + * when storing a Shape. + * + * @category Colour + */ +export const silver: string = SILVER; + +/** + * A hex colour code for dark grey (#555555). + * + * @category Colour + */ +export const gray: string = '#555555'; + +/** + * A hex colour code for blue (#5555FF). + * + * @category Colour + */ +export const blue: string = '#5555FF'; + +/** + * A hex colour code for light green (#55FF55). + * + * @category Colour + */ +export const lime: string = '#55FF55'; + +/** + * A hex colour code for cyan (#55FFFF). + * + * @category Colour + */ +export const cyan: string = '#55FFFF'; + +/** + * A hex colour code for light red (#FF5555). + * + * @category Colour + */ +export const rose: string = '#FF5555'; + +/** + * A hex colour code for pink (#FF55FF). + * + * @category Colour + */ +export const pink: string = '#FF55FF'; + +/** + * A hex colour code for yellow (#FFFF55). + * + * @category Colour + */ +export const yellow: string = '#FFFF55'; + +/** + * A hex colour code for white (#FFFFFF). + * + * @category Colour + */ +export const white: string = '#FFFFFF'; + +// [Functions] + +/** + * Union of the two provided shapes to produce a new shape. + * + * @param {Shape} a - The first shape + * @param {Shape} b - The second shape + * @returns {Shape} The resulting unioned shape + */ +export function union(a: Shape, b: Shape): Shape { + let newSolid: Solid = _union(a.solid, b.solid); + return new Shape(newSolid); +} + +/** + * Subtraction of the second shape from the first shape to produce a new shape. + * + * @param {Shape} a - The shape to be subtracted from + * @param {Shape} b - The shape to remove from the first shape + * @returns {Shape} The resulting subtracted shape + */ +export function subtract(a: Shape, b: Shape): Shape { + let newSolid: Solid = _subtract(a.solid, b.solid); + return new Shape(newSolid); +} + +/** + * Intersection of the two shape to produce a new shape. + * + * @param {Shape} a - The first shape + * @param {Shape} b - The second shape + * @returns {Shape} The resulting intersection shape + */ +export function intersect(a: Shape, b: Shape): Shape { + let newSolid: Solid = _intersect(a.solid, b.solid); + return new Shape(newSolid); +} + +/** + * Scales the shape in the x, y and z direction with the specified factor, + * ranging from 0 to infinity. + * For example scaling the shape by 1 in x, y and z direction results in + * the original shape. + * + * @param {Shape} shape - The shape to be scaled + * @param {number} x - Scaling in the x direction + * @param {number} y - Scaling in the y direction + * @param {number} z - Scaling in the z direction + * @returns {Shape} Resulting Shape + */ +export function scale(shape: Shape, x: number, y: number, z: number): Shape { + let newSolid: Solid = _scale([x, y, z], shape.solid); + return new Shape(newSolid); +} + +/** + * Scales the shape in the x direction with the specified factor, + * ranging from 0 to infinity. + * For example scaling the shape by 1 in x direction results in the + * original shape. + * + * @param {Shape} shape - The shape to be scaled + * @param {number} x - Scaling in the x direction + * @returns {Shape} Resulting Shape + */ +export function scale_x(shape: Shape, x: number): Shape { + return scale(shape, x, 1, 1); +} + +/** + * Scales the shape in the y direction with the specified factor, + * ranging from 0 to infinity. + * For example scaling the shape by 1 in y direction results in the + * original shape. + * + * @param {Shape} shape - The shape to be scaled + * @param {number} y - Scaling in the y direction + * @returns {Shape} Resulting Shape + */ +export function scale_y(shape: Shape, y: number): Shape { + return scale(shape, 1, y, 1); +} + +/** + * Scales the shape in the z direction with the specified factor, + * ranging from 0 to infinity. + * For example scaling the shape by 1 in z direction results in the + * original shape. + * + * @param {Shape} shape - The shape to be scaled + * @param {number} z - Scaling in the z direction + * @returns {Shape} Resulting Shape + */ +export function scale_z(shape: Shape, z: number): Shape { + return scale(shape, 1, 1, z); +} + +/** + * Returns a lambda function that contains the center of the given shape in the + * x, y and z direction. Providing 'x', 'y', 'z' as input would return x, y and + * z coordinates of shape's center + * + * For example + * ```` + * const a = shape_center(sphere); + * a('x'); // Returns the x coordinate of the shape's center + * ```` + * + * @param {Shape} shape - The scale to be measured + * @returns {(String) => number} A lambda function providing the shape's center + * coordinates + */ +export function shape_center(shape: Shape): (axis: String) => number { + let bounds: BoundingBox = measureBoundingBox(shape.solid); + let centerCoords: Coordinates = [ + bounds[0][0] + (bounds[1][0] - bounds[0][0]) / 2, + bounds[0][1] + (bounds[1][1] - bounds[0][1]) / 2, + bounds[0][2] + (bounds[1][2] - bounds[0][2]) / 2, + ]; + return (axis: String): number => { + let i: number = axis === 'x' ? 0 : axis === 'y' ? 1 : axis === 'z' ? 2 : -1; + if (i === -1) { + throw Error('shape_center\'s returned function expects a proper axis.'); + } else { + return centerCoords[i]; + } + }; +} + +/** + * Set the center of the shape with the provided x, y and z coordinates. + * + * @param {Shape} shape - The scale to have the center set + * @param {nunber} x - The center with the x coordinate + * @param {nunber} y - The center with the y coordinate + * @param {nunber} z - The center with the z coordinate + * @returns {Shape} The shape with the new center + */ +export function shape_set_center( + shape: Shape, + x: number, + y: number, + z: number, +): Shape { + let newSolid: Solid = center({ relativeTo: [x, y, z] }, shape.solid); + return new Shape(newSolid); +} + +/** + * Measure the area of the provided shape. + * + * @param {Shape} shape - The shape to measure the area from + * @returns {number} The area of the shape + */ +export function area(shape: Shape): number { + return measureArea(shape.solid); +} + +/** + * Measure the volume of the provided shape. + * + * @param {Shape} shape - The shape to measure the volume from + * @returns {number} The volume of the shape + */ +export function volume(shape: Shape): number { + return measureVolume(shape.solid); +} + +//TODO +/** + * Mirror / Flip the provided shape by the plane with normal direction vector + * given by the x, y and z components. + * + * @param {Shape} shape - The shape to mirror / flip + * @param {number} x - The x coordinate of the direction vector + * @param {number} y - The y coordinate of the direction vector + * @param {number} z - The z coordinate of the direction vector + * @returns {Shape} The mirrored / flipped shape + */ +function shape_mirror(shape: Shape, x: number, y: number, z: number) { + let newSolid: Solid = mirror({ normal: [x, y, z] }, shape.solid); + return new Shape(newSolid); +} + +/** + * Mirror / Flip the provided shape in the x direction. + * + * @param {Shape} shape - The shape to mirror / flip + * @returns {Shape} The mirrored / flipped shape + */ +export function flip_x(shape: Shape): Shape { + return shape_mirror(shape, 1, 0, 0); +} + +/** + * Mirror / Flip the provided shape in the y direction. + * + * @param {Shape} shape - The shape to mirror / flip + * @returns {Shape} The mirrored / flipped shape + */ +export function flip_y(shape: Shape): Shape { + return shape_mirror(shape, 0, 1, 0); +} + +/** + * Mirror / Flip the provided shape in the z direction. + * + * @param {Shape} shape - The shape to mirror / flip + * @returns {Shape} The mirrored / flipped shape + */ +export function flip_z(shape: Shape): Shape { + return shape_mirror(shape, 0, 0, 1); +} + +/** + * Translate / Move the shape by the provided x, y and z units from negative + * infinity to infinity. + * + * @param {Shape} shape + * @param {number} x - The number to shift the shape in the x direction + * @param {number} y - The number to shift the shape in the y direction + * @param {number} z - The number to shift the shape in the z direction + * @returns {Shape} The translated shape + */ +export function translate( + shape: Shape, + x: number, + y: number, + z: number, +): Shape { + let newSolid: Solid = _translate([x, y, z], shape.solid); + return new Shape(newSolid); +} + +/** + * Translate / Move the shape by the provided x units from negative infinity + * to infinity. + * + * @param {Shape} shape + * @param {number} x - The number to shift the shape in the x direction + * @returns {Shape} The translated shape + */ +export function translate_x(shape: Shape, x: number): Shape { + return translate(shape, x, 0, 0); +} + +/** + * Translate / Move the shape by the provided y units from negative infinity + * to infinity. + * + * @param {Shape} shape + * @param {number} y - The number to shift the shape in the y direction + * @returns {Shape} The translated shape + */ +export function translate_y(shape: Shape, y: number): Shape { + return translate(shape, 0, y, 0); +} + +/** + * Translate / Move the shape by the provided z units from negative infinity + * to infinity. + * + * @param {Shape} shape + * @param {number} z - The number to shift the shape in the z direction + * @returns {Shape} The translated shape + */ +export function translate_z(shape: Shape, z: number): Shape { + return translate(shape, 0, 0, z); +} + +/** + * Places the second shape `b` beside the first shape `a` in the positive x direction, + * centering the `b`'s y and z on the `a`'s y and z center. + * + * @param {Shape} a - The shape to be placed beside with + * @param {Shape} b - The shape placed beside + * @returns {Shape} The final shape + */ +export function beside_x(a: Shape, b: Shape): Shape { + let aBounds: BoundingBox = measureBoundingBox(a.solid); + let newX: number = aBounds[1][0]; + let newY: number = aBounds[0][1] + (aBounds[1][1] - aBounds[0][1]) / 2; + let newZ: number = aBounds[0][2] + (aBounds[1][2] - aBounds[0][2]) / 2; + let newSolid: Solid = _union( + a.solid, + align( + { + modes: ['min', 'center', 'center'], + relativeTo: [newX, newY, newZ], + }, + b.solid, + ), + ); + return new Shape(newSolid); +} + +/** + * Places the second shape `b` beside the first shape `a` in the positive y direction, + * centering the `b`'s x and z on the `a`'s x and z center. + * + * @param {Shape} a - The shape to be placed beside with + * @param {Shape} b - The shape placed beside + * @returns {Shape} The final shape + */ +export function beside_y(a: Shape, b: Shape): Shape { + let aBounds: BoundingBox = measureBoundingBox(a.solid); + let newX: number = aBounds[0][0] + (aBounds[1][0] - aBounds[0][0]) / 2; + let newY: number = aBounds[1][1]; + let newZ: number = aBounds[0][2] + (aBounds[1][2] - aBounds[0][2]) / 2; + let newSolid: Solid = _union( + a.solid, + align( + { + modes: ['center', 'min', 'center'], + relativeTo: [newX, newY, newZ], + }, + b.solid, + ), + ); + return new Shape(newSolid); +} + +/** + * Places the second shape `b` beside the first shape `a` in the positive z direction, + * centering the `b`'s x and y on the `a`'s x and y center. + * + * @param {Shape} a - The shape to be placed beside with + * @param {Shape} b - The shape placed beside + * @returns {Shape} The final shape + */ +export function beside_z(a: Shape, b: Shape): Shape { + let aBounds: BoundingBox = measureBoundingBox(a.solid); + let newX: number = aBounds[0][0] + (aBounds[1][0] - aBounds[0][0]) / 2; + let newY: number = aBounds[0][1] + (aBounds[1][1] - aBounds[0][1]) / 2; + let newZ: number = aBounds[1][2]; + let newSolid: Solid = _union( + a.solid, + align( + { + modes: ['center', 'center', 'min'], + relativeTo: [newX, newY, newZ], + }, + b.solid, + ), + ); + return new Shape(newSolid); +} + +/** + * Returns a lambda function that contains the coordinates of the bounding box. + * Provided with the axis 'x', 'y' or 'z' and value 'min' for minimum and 'max' + * for maximum, it returns the coordinates of the bounding box. + * + * For example + * ```` + * const a = bounding_box(sphere); + * a('x', 'min'); // Returns the maximum x coordinate of the bounding box + * ```` + * + * @param {Shape} shape - The scale to be measured + * @returns {(String, String) => number} A lambda function providing the + * shape's bounding box coordinates + */ + +export function bounding_box( + shape: Shape, +): (axis: String, min: String) => number { + let bounds: BoundingBox = measureBoundingBox(shape.solid); + return (axis: String, min: String): number => { + let i: number = axis === 'x' ? 0 : axis === 'y' ? 1 : axis === 'z' ? 2 : -1; + let j: number = min === 'min' ? 0 : min === 'max' ? 1 : -1; + if (i === -1 || j === -1) { + throw Error( + 'bounding_box returned function expects a proper axis and min String.', + ); + } else { + return bounds[j][i]; + } + }; +} + +/** + * Rotate the shape by the provided angles in the x, y and z direction. + * Angles provided are in the form of radians (i.e. 2π represent 360 + * degrees) + * + * @param {Shape} shape - The shape to be rotated + * @param {number} x - Angle of rotation in the x direction + * @param {number} y - Angle of rotation in the y direction + * @param {number} z - Angle of rotation in the z direction + * @returns {Shape} The rotated shape + */ +export function rotate(shape: Shape, x: number, y: number, z: number): Shape { + let newSolid: Solid = _rotate([x, y, z], shape.solid); + return new Shape(newSolid); +} + +/** + * Rotate the shape by the provided angles in the x direction. Angles + * provided are in the form of radians (i.e. 2π represent 360 degrees) + * + * @param {Shape} shape - The shape to be rotated + * @param {number} x - Angle of rotation in the x direction + * @returns {Shape} The rotated shape + */ +export function rotate_x(shape: Shape, x: number): Shape { + return rotate(shape, x, 0, 0); +} + +/** + * Rotate the shape by the provided angles in the y direction. Angles + * provided are in the form of radians (i.e. 2π represent 360 degrees) + * + * @param {Shape} shape - The shape to be rotated + * @param {number} y - Angle of rotation in the y direction + * @returns {Shape} The rotated shape + */ +export function rotate_y(shape: Shape, y: number): Shape { + return rotate(shape, 0, y, 0); +} + +/** + * Rotate the shape by the provided angles in the z direction. Angles + * provided are in the form of radians (i.e. 2π represent 360 degrees) + * + * @param {Shape} shape - The shape to be rotated + * @param {number} z - Angle of rotation in the z direction + * @returns {Shape} The rotated shape + */ +export function rotate_z(shape: Shape, z: number): Shape { + return rotate(shape, 0, 0, z); +} + +//TODO +/** + * Center the provided shape with the middle base of the shape at (0, 0, 0). + * + * @param {Shape} shape - The shape to be centered + * @returns {Shape} The shape that is centered + */ +function shapeSetOrigin(shape: Shape) { + let newSolid: Solid = align({ modes: ['min', 'min', 'min'] }, shape.solid); + return new Shape(newSolid); +} + +/** + * Checks if the specified argument is a Shape. + * + * @param {unknown} argument - The value to check. + * @returns {boolean} Whether the argument is a Shape. + */ +export function is_shape(argument: unknown): boolean { + return argument instanceof Shape; +} + +/** + * Creates a clone of the specified Shape. + * + * @param {Shape} shape - The Shape to be cloned. + * @returns {Shape} The cloned Shape. + */ +export function clone(shape: Shape): Shape { + return shape.clone(); +} + +/** + * Stores a clone of the specified Shape for later rendering. Its colour + * defaults to the module's provided silver colour variable. + * + * @param {Shape} shape - The Shape to be stored. + */ +export function store(shape: Shape) { + Core.getRenderGroupManager() + .storeShape(shape.clone()); +} + +/** + * Colours a clone of the specified Shape using the specified hex colour code, + * then stores it for later rendering. You may use one of the colour variables + * provided by the module, or you may specify your own custom colour code. + * + * Colour codes must be of the form "#XXXXXX" or "XXXXXX", where each X + * represents a non-case sensitive hexadecimal number. Invalid colour codes + * default to black. + * + * @param {Shape} shape - The Shape to be coloured and stored. + * @param {string} hex - The colour code to use. + */ +export function store_as_color(shape: Shape, hex: string) { + let color: Color = hexToColor(hex); + let coloredSolid: Solid = colorize(color, shape.solid); + Core.getRenderGroupManager() + .storeShape(new Shape(coloredSolid)); +} + +/** + * Colours a clone of the specified Shape using the specified RGB values, then + * stores it for later rendering. + * + * RGB values are clamped between 0 and 1. + * + * @param {Shape} shape - The Shape to be coloured and stored. + * @param {number} redComponent - The colour's red component. + * @param {number} greenComponent - The colour's green component. + * @param {number} blueComponent - The colour's blue component. + */ +export function store_as_rgb( + shape: Shape, + redComponent: number, + greenComponent: number, + blueComponent: number, +) { + redComponent = clamp(redComponent, 0, 1); + greenComponent = clamp(greenComponent, 0, 1); + blueComponent = clamp(blueComponent, 0, 1); + + let coloredSolid: Solid = colorize( + [redComponent, greenComponent, blueComponent], + shape.solid, + ); + Core.getRenderGroupManager() + .storeShape(new Shape(coloredSolid)); +} + +/** + * Renders using any Shapes stored thus far, along with a grid and axis. The + * Shapes will then not be included in any subsequent renders. + */ +export function render_grid_axis(): RenderGroup { + // Render group is returned for REPL text only; do not document + return Core.getRenderGroupManager() + .nextRenderGroup(true, true); +} + +/** + * Renders using any Shapes stored thus far, along with a grid. The Shapes will + * then not be included in any subsequent renders. + */ +export function render_grid(): RenderGroup { + return Core.getRenderGroupManager() + .nextRenderGroup(true); +} + +/** + * Renders using any Shapes stored thus far, along with an axis. The Shapes will + * then not be included in any subsequent renders. + */ +export function render_axis(): RenderGroup { + return Core.getRenderGroupManager() + .nextRenderGroup(undefined, true); +} + +/** + * Renders using any Shapes stored thus far. The Shapes will then not be + * included in any subsequent renders. + */ +export function render(): RenderGroup { + return Core.getRenderGroupManager() + .nextRenderGroup(); +} diff --git a/src/bundles/csg/index.ts b/src/bundles/csg/index.ts index 093b418d0..06ea4db46 100644 --- a/src/bundles/csg/index.ts +++ b/src/bundles/csg/index.ts @@ -1,81 +1,81 @@ -/* [Imports] */ -import context from 'js-slang/context'; -import { Core } from './core.js'; -import { CsgModuleState } from './utilities.js'; - - - -/* [Main] */ -let moduleState = new CsgModuleState(); - -context.moduleContexts.csg.state = moduleState; -// We initialise Core for the first time over on the bundles' end here -Core.initialize(moduleState); - - - -/* [Exports] */ -export { - area, - beside_x, - beside_y, - beside_z, - black, - blue, - bounding_box, - clone, - cone, - crimson, - cube, - cyan, - cylinder, - flip_x, - flip_y, - flip_z, - geodesic_sphere, - gray, - green, - intersect, - is_shape, - lime, - navy, - orange, - pink, - prism, - purple, - pyramid, - render, - render_axis, - render_grid, - render_grid_axis, - rose, - rotate, - rotate_x, - rotate_y, - rotate_z, - rounded_cube, - rounded_cylinder, - scale, - scale_x, - scale_y, - scale_z, - shape_center, - shape_set_center, - silver, - sphere, - star, - store, - store_as_color, - store_as_rgb, - subtract, - teal, - torus, - translate, - translate_x, - translate_y, - translate_z, - union, - volume, - white, - yellow, -} from './functions'; +/* [Imports] */ +import context from 'js-slang/context'; +import { Core } from './core.js'; +import { CsgModuleState } from './utilities.js'; + + + +/* [Main] */ +let moduleState = new CsgModuleState(); + +context.moduleContexts.csg.state = moduleState; +// We initialise Core for the first time over on the bundles' end here +Core.initialize(moduleState); + + + +/* [Exports] */ +export { + area, + beside_x, + beside_y, + beside_z, + black, + blue, + bounding_box, + clone, + cone, + crimson, + cube, + cyan, + cylinder, + flip_x, + flip_y, + flip_z, + geodesic_sphere, + gray, + green, + intersect, + is_shape, + lime, + navy, + orange, + pink, + prism, + purple, + pyramid, + render, + render_axis, + render_grid, + render_grid_axis, + rose, + rotate, + rotate_x, + rotate_y, + rotate_z, + rounded_cube, + rounded_cylinder, + scale, + scale_x, + scale_y, + scale_z, + shape_center, + shape_set_center, + silver, + sphere, + star, + store, + store_as_color, + store_as_rgb, + subtract, + teal, + torus, + translate, + translate_x, + translate_y, + translate_z, + union, + volume, + white, + yellow, +} from './functions'; diff --git a/src/bundles/csg/input_tracker.ts b/src/bundles/csg/input_tracker.ts index 4499a124f..1a67a8aec 100644 --- a/src/bundles/csg/input_tracker.ts +++ b/src/bundles/csg/input_tracker.ts @@ -1,282 +1,282 @@ -/* [Imports] */ -import vec3 from '@jscad/modeling/src/maths/vec3'; -import { ZOOM_TICK_SCALE } from './constants.js'; -import { - cloneControlsState, - pan, - rotate, - updateProjection, - updateStates, - zoomToFit, -} from './jscad/renderer.js'; -import type { - ControlsState, - GeometryEntity, - PerspectiveCameraState, -} from './jscad/types.js'; -import ListenerTracker from './listener_tracker.js'; - -/* [Main] */ -enum MousePointer { - // Based on MouseEvent#button - LEFT = 0, - MIDDLE = 1, - RIGHT = 2, - BACK = 3, - FORWARD = 4, - - NONE = -1, - OTHER = 7050, -} - -/* [Exports] */ -export default class InputTracker { - private controlsState: ControlsState = cloneControlsState(); - - // Start off the first frame by initially zooming to fit - private zoomToFit: boolean = true; - - private zoomTicks: number = 0; - - private heldPointer: MousePointer = MousePointer.NONE; - - private lastX: number | null = null; - private lastY: number | null = null; - - private rotateX: number = 0; - private rotateY: number = 0; - private panX: number = 0; - private panY: number = 0; - - private listenerTracker: ListenerTracker; - - // Set to true when a new frame must be requested, as states have changed and - // the canvas should look different - public frameDirty: boolean = false; - - constructor( - private canvas: HTMLCanvasElement, - private cameraState: PerspectiveCameraState, - private geometryEntities: GeometryEntity[], - ) { - this.listenerTracker = new ListenerTracker(canvas); - } - - private changeZoomTicks(wheelDelta: number) { - // Regardless of scroll magnitude, which the OS can change, each event - // firing should only tick once up or down - this.zoomTicks += Math.sign(wheelDelta); - } - - private setHeldPointer(mouseEventButton: number) { - switch (mouseEventButton) { - case MousePointer.LEFT: - case MousePointer.RIGHT: - case MousePointer.MIDDLE: - this.heldPointer = mouseEventButton; - break; - default: - this.heldPointer = MousePointer.OTHER; - break; - } - } - - private unsetHeldPointer() { - this.heldPointer = MousePointer.NONE; - } - - private shouldIgnorePointerMove(): boolean { - return ![MousePointer.LEFT, MousePointer.MIDDLE].includes(this.heldPointer); - } - - private isPointerPan(isShiftKey: boolean): boolean { - return ( - this.heldPointer === MousePointer.MIDDLE - || (this.heldPointer === MousePointer.LEFT && isShiftKey) - ); - } - - private unsetLastCoordinates() { - this.lastX = null; - this.lastY = null; - } - - private tryDynamicResize() { - let { width: oldWidth, height: oldHeight } = this.canvas; - - // Account for display scaling - let canvasBounds: DOMRect = this.canvas.getBoundingClientRect(); - let { devicePixelRatio } = window; - let newWidth: number = Math.floor(canvasBounds.width * devicePixelRatio); - let newHeight: number = Math.floor(canvasBounds.height * devicePixelRatio); - - if (oldWidth === newWidth && oldHeight === newHeight) return; - this.frameDirty = true; - - this.canvas.width = newWidth; - this.canvas.height = newHeight; - - updateProjection(this.cameraState, newWidth, newHeight); - } - - private tryZoomToFit() { - if (!this.zoomToFit) return; - this.frameDirty = true; - - zoomToFit(this.cameraState, this.controlsState, this.geometryEntities); - - this.zoomToFit = false; - } - - private tryZoom() { - if (this.zoomTicks === 0) return; - - while (this.zoomTicks !== 0) { - let currentTick: number = Math.sign(this.zoomTicks); - this.zoomTicks -= currentTick; - - let scaledChange: number = currentTick * ZOOM_TICK_SCALE; - let potentialNewScale: number = this.controlsState.scale + scaledChange; - let potentialNewDistance: number - = vec3.distance(this.cameraState.position, this.cameraState.target) - * potentialNewScale; - - if ( - potentialNewDistance > this.controlsState.limits.minDistance - && potentialNewDistance < this.controlsState.limits.maxDistance - ) { - this.frameDirty = true; - this.controlsState.scale = potentialNewScale; - } else break; - } - - this.zoomTicks = 0; - } - - private tryRotate() { - if (this.rotateX === 0 && this.rotateY === 0) return; - this.frameDirty = true; - - rotate(this.cameraState, this.controlsState, this.rotateX, this.rotateY); - - this.rotateX = 0; - this.rotateY = 0; - } - - private tryPan() { - if (this.panX === 0 && this.panY === 0) return; - this.frameDirty = true; - - pan(this.cameraState, this.controlsState, this.panX, this.panY); - - this.panX = 0; - this.panY = 0; - } - - addListeners() { - this.listenerTracker.addListener('dblclick', (_mouseEvent: MouseEvent) => { - this.zoomToFit = true; - }); - - this.listenerTracker.addListener( - 'wheel', - (wheelEvent: WheelEvent) => { - // Prevent scrolling the side panel when there is overflow - wheelEvent.preventDefault(); - - this.changeZoomTicks(wheelEvent.deltaY); - }, - // Force wait for our potential preventDefault() - { passive: false }, - ); - - this.listenerTracker.addListener( - 'pointerdown', - (pointerEvent: PointerEvent) => { - // Prevent middle-click from activating auto-scrolling - pointerEvent.preventDefault(); - - this.setHeldPointer(pointerEvent.button); - this.lastX = pointerEvent.pageX; - this.lastY = pointerEvent.pageY; - - // Detect drags even outside the canvas element's borders - this.canvas.setPointerCapture(pointerEvent.pointerId); - }, - // Force wait for our potential preventDefault() - { passive: false }, - ); - - this.listenerTracker.addListener( - 'pointerup', - (pointerEvent: PointerEvent) => { - this.unsetHeldPointer(); - this.unsetLastCoordinates(); - - this.canvas.releasePointerCapture(pointerEvent.pointerId); - }, - ); - - this.listenerTracker.addListener( - 'pointermove', - (pointerEvent: PointerEvent) => { - if (this.shouldIgnorePointerMove()) return; - - let currentX = pointerEvent.pageX; - let currentY = pointerEvent.pageY; - - if (this.lastX !== null && this.lastY !== null) { - // If tracked before, use differences to react to input - let differenceX = this.lastX - currentX; - let differenceY = this.lastY - currentY; - - if (this.isPointerPan(pointerEvent.shiftKey)) { - // Drag right (X increases) - // Camera right (still +) - // Viewport left (invert to -) - this.panX += differenceX; - - // Drag down (Y increases) - // Camera down (invert to -) - // Viewport up (still -) - this.panY -= differenceY; - } else { - // Else default to rotate - - // Drag right (X increases) - // Camera angle from origin left (invert to -) - this.rotateX -= differenceX; - - // Drag down (Y increases) - // Camera angle from origin up (still +) - this.rotateY += differenceY; - } - } - - this.lastX = currentX; - this.lastY = currentY; - }, - ); - } - - removeListeners() { - this.listenerTracker.removeListeners(); - } - - respondToInput() { - this.tryZoomToFit(); - this.tryZoom(); - this.tryRotate(); - this.tryPan(); - if (this.frameDirty) updateStates(this.cameraState, this.controlsState); - - // A successful resize dirties the frame, but does not require - // updateStates(), only its own updateProjection() - this.tryDynamicResize(); - } - - flushMidInput() { - this.unsetHeldPointer(); - this.unsetLastCoordinates(); - } -} +/* [Imports] */ +import vec3 from '@jscad/modeling/src/maths/vec3'; +import { ZOOM_TICK_SCALE } from './constants.js'; +import { + cloneControlsState, + pan, + rotate, + updateProjection, + updateStates, + zoomToFit, +} from './jscad/renderer.js'; +import type { + ControlsState, + GeometryEntity, + PerspectiveCameraState, +} from './jscad/types.js'; +import ListenerTracker from './listener_tracker.js'; + +/* [Main] */ +enum MousePointer { + // Based on MouseEvent#button + LEFT = 0, + MIDDLE = 1, + RIGHT = 2, + BACK = 3, + FORWARD = 4, + + NONE = -1, + OTHER = 7050, +} + +/* [Exports] */ +export default class InputTracker { + private controlsState: ControlsState = cloneControlsState(); + + // Start off the first frame by initially zooming to fit + private zoomToFit: boolean = true; + + private zoomTicks: number = 0; + + private heldPointer: MousePointer = MousePointer.NONE; + + private lastX: number | null = null; + private lastY: number | null = null; + + private rotateX: number = 0; + private rotateY: number = 0; + private panX: number = 0; + private panY: number = 0; + + private listenerTracker: ListenerTracker; + + // Set to true when a new frame must be requested, as states have changed and + // the canvas should look different + public frameDirty: boolean = false; + + constructor( + private canvas: HTMLCanvasElement, + private cameraState: PerspectiveCameraState, + private geometryEntities: GeometryEntity[], + ) { + this.listenerTracker = new ListenerTracker(canvas); + } + + private changeZoomTicks(wheelDelta: number) { + // Regardless of scroll magnitude, which the OS can change, each event + // firing should only tick once up or down + this.zoomTicks += Math.sign(wheelDelta); + } + + private setHeldPointer(mouseEventButton: number) { + switch (mouseEventButton) { + case MousePointer.LEFT: + case MousePointer.RIGHT: + case MousePointer.MIDDLE: + this.heldPointer = mouseEventButton; + break; + default: + this.heldPointer = MousePointer.OTHER; + break; + } + } + + private unsetHeldPointer() { + this.heldPointer = MousePointer.NONE; + } + + private shouldIgnorePointerMove(): boolean { + return ![MousePointer.LEFT, MousePointer.MIDDLE].includes(this.heldPointer); + } + + private isPointerPan(isShiftKey: boolean): boolean { + return ( + this.heldPointer === MousePointer.MIDDLE + || (this.heldPointer === MousePointer.LEFT && isShiftKey) + ); + } + + private unsetLastCoordinates() { + this.lastX = null; + this.lastY = null; + } + + private tryDynamicResize() { + let { width: oldWidth, height: oldHeight } = this.canvas; + + // Account for display scaling + let canvasBounds: DOMRect = this.canvas.getBoundingClientRect(); + let { devicePixelRatio } = window; + let newWidth: number = Math.floor(canvasBounds.width * devicePixelRatio); + let newHeight: number = Math.floor(canvasBounds.height * devicePixelRatio); + + if (oldWidth === newWidth && oldHeight === newHeight) return; + this.frameDirty = true; + + this.canvas.width = newWidth; + this.canvas.height = newHeight; + + updateProjection(this.cameraState, newWidth, newHeight); + } + + private tryZoomToFit() { + if (!this.zoomToFit) return; + this.frameDirty = true; + + zoomToFit(this.cameraState, this.controlsState, this.geometryEntities); + + this.zoomToFit = false; + } + + private tryZoom() { + if (this.zoomTicks === 0) return; + + while (this.zoomTicks !== 0) { + let currentTick: number = Math.sign(this.zoomTicks); + this.zoomTicks -= currentTick; + + let scaledChange: number = currentTick * ZOOM_TICK_SCALE; + let potentialNewScale: number = this.controlsState.scale + scaledChange; + let potentialNewDistance: number + = vec3.distance(this.cameraState.position, this.cameraState.target) + * potentialNewScale; + + if ( + potentialNewDistance > this.controlsState.limits.minDistance + && potentialNewDistance < this.controlsState.limits.maxDistance + ) { + this.frameDirty = true; + this.controlsState.scale = potentialNewScale; + } else break; + } + + this.zoomTicks = 0; + } + + private tryRotate() { + if (this.rotateX === 0 && this.rotateY === 0) return; + this.frameDirty = true; + + rotate(this.cameraState, this.controlsState, this.rotateX, this.rotateY); + + this.rotateX = 0; + this.rotateY = 0; + } + + private tryPan() { + if (this.panX === 0 && this.panY === 0) return; + this.frameDirty = true; + + pan(this.cameraState, this.controlsState, this.panX, this.panY); + + this.panX = 0; + this.panY = 0; + } + + addListeners() { + this.listenerTracker.addListener('dblclick', (_mouseEvent: MouseEvent) => { + this.zoomToFit = true; + }); + + this.listenerTracker.addListener( + 'wheel', + (wheelEvent: WheelEvent) => { + // Prevent scrolling the side panel when there is overflow + wheelEvent.preventDefault(); + + this.changeZoomTicks(wheelEvent.deltaY); + }, + // Force wait for our potential preventDefault() + { passive: false }, + ); + + this.listenerTracker.addListener( + 'pointerdown', + (pointerEvent: PointerEvent) => { + // Prevent middle-click from activating auto-scrolling + pointerEvent.preventDefault(); + + this.setHeldPointer(pointerEvent.button); + this.lastX = pointerEvent.pageX; + this.lastY = pointerEvent.pageY; + + // Detect drags even outside the canvas element's borders + this.canvas.setPointerCapture(pointerEvent.pointerId); + }, + // Force wait for our potential preventDefault() + { passive: false }, + ); + + this.listenerTracker.addListener( + 'pointerup', + (pointerEvent: PointerEvent) => { + this.unsetHeldPointer(); + this.unsetLastCoordinates(); + + this.canvas.releasePointerCapture(pointerEvent.pointerId); + }, + ); + + this.listenerTracker.addListener( + 'pointermove', + (pointerEvent: PointerEvent) => { + if (this.shouldIgnorePointerMove()) return; + + let currentX = pointerEvent.pageX; + let currentY = pointerEvent.pageY; + + if (this.lastX !== null && this.lastY !== null) { + // If tracked before, use differences to react to input + let differenceX = this.lastX - currentX; + let differenceY = this.lastY - currentY; + + if (this.isPointerPan(pointerEvent.shiftKey)) { + // Drag right (X increases) + // Camera right (still +) + // Viewport left (invert to -) + this.panX += differenceX; + + // Drag down (Y increases) + // Camera down (invert to -) + // Viewport up (still -) + this.panY -= differenceY; + } else { + // Else default to rotate + + // Drag right (X increases) + // Camera angle from origin left (invert to -) + this.rotateX -= differenceX; + + // Drag down (Y increases) + // Camera angle from origin up (still +) + this.rotateY += differenceY; + } + } + + this.lastX = currentX; + this.lastY = currentY; + }, + ); + } + + removeListeners() { + this.listenerTracker.removeListeners(); + } + + respondToInput() { + this.tryZoomToFit(); + this.tryZoom(); + this.tryRotate(); + this.tryPan(); + if (this.frameDirty) updateStates(this.cameraState, this.controlsState); + + // A successful resize dirties the frame, but does not require + // updateStates(), only its own updateProjection() + this.tryDynamicResize(); + } + + flushMidInput() { + this.unsetHeldPointer(); + this.unsetLastCoordinates(); + } +} diff --git a/src/bundles/csg/jscad/renderer.ts b/src/bundles/csg/jscad/renderer.ts index 2e7c3d011..7966559ed 100644 --- a/src/bundles/csg/jscad/renderer.ts +++ b/src/bundles/csg/jscad/renderer.ts @@ -1,255 +1,255 @@ -/* [Imports] */ -import measureBoundingBox from '@jscad/modeling/src/measurements/measureBoundingBox'; -import { - cameras, - controls, - drawCommands, - entitiesFromSolids, - prepareRender, -} from '@jscad/regl-renderer'; -import { - ACE_GUTTER_BACKGROUND_COLOR, - ACE_GUTTER_TEXT_COLOR, - BP_TEXT_COLOR, - DEFAULT_COLOR, - GRID_PADDING, - MAIN_TICKS, - ROTATION_SPEED, - ROUND_UP_INTERVAL, - SUB_TICKS, - X_FACTOR, - Y_FACTOR, -} from '../constants.js'; -import { hexToAlphaColor, type RenderGroup, type Shape } from '../utilities.js'; -import type { - AlphaColor, - AxisEntityType, - BoundingBox, - ControlsState, - EntitiesFromSolidsOptions, - Entity, - GeometryEntity, - MultiGridEntityType, - PanStates, - PerspectiveCameraState, - RotateStates, - Solid, - UpdatedStates, - WrappedRenderer, - WrappedRendererData, - ZoomToFitStates, -} from './types.js'; - -/* [Main] */ -let { orbit } = controls; - -function solidsToGeometryEntities(solids: Solid[]): GeometryEntity[] { - let options: EntitiesFromSolidsOptions = { - color: hexToAlphaColor(DEFAULT_COLOR), - }; - return (entitiesFromSolids( - options, - ...solids, - ) as unknown) as GeometryEntity[]; -} - -function neatGridDistance(rawDistance: number) { - let paddedDistance: number = rawDistance + GRID_PADDING; - let roundedDistance: number - = Math.ceil(paddedDistance / ROUND_UP_INTERVAL) * ROUND_UP_INTERVAL; - return roundedDistance; -} - -class MultiGridEntity implements MultiGridEntityType { - visuals: { - drawCmd: 'drawGrid'; - show: boolean; - - color?: AlphaColor; - subColor?: AlphaColor; - } = { - drawCmd: 'drawGrid', - show: true, - - color: hexToAlphaColor(BP_TEXT_COLOR), - subColor: hexToAlphaColor(ACE_GUTTER_TEXT_COLOR), - }; - - ticks: [number, number] = [MAIN_TICKS, SUB_TICKS]; - - size: [number, number]; - - constructor(size: number) { - this.size = [size, size]; - } -} - -class AxisEntity implements AxisEntityType { - visuals: { - drawCmd: 'drawAxis'; - show: boolean; - } = { - drawCmd: 'drawAxis', - show: true, - }; - - alwaysVisible: boolean = false; - - constructor(public size?: number) {} -} - -function makeExtraEntities( - renderGroup: RenderGroup, - solids: Solid[], -): Entity[] { - let { hasGrid, hasAxis } = renderGroup; - // Run calculations for grid and/or axis only if needed - if (!(hasAxis || hasGrid)) return []; - - let boundingBoxes: BoundingBox[] = solids.map( - (solid: Solid): BoundingBox => measureBoundingBox(solid), - ); - let minMaxXys: number[][] = boundingBoxes.map( - (boundingBox: BoundingBox): number[] => { - let minX = boundingBox[0][0]; - let minY = boundingBox[0][1]; - let maxX = boundingBox[1][0]; - let maxY = boundingBox[1][1]; - return [minX, minY, maxX, maxY]; - }, - ); - let xys: number[] = minMaxXys.flat(1); - let distancesFromOrigin: number[] = xys.map(Math.abs); - let furthestDistance: number = Math.max(...distancesFromOrigin); - let neatDistance: number = neatGridDistance(furthestDistance); - - let extraEntities: Entity[] = []; - if (hasGrid) extraEntities.push(new MultiGridEntity(neatDistance * 2)); - if (hasAxis) extraEntities.push(new AxisEntity(neatDistance)); - return extraEntities; -} - -/* [Exports] */ -export function makeWrappedRendererData( - renderGroup: RenderGroup, - cameraState: PerspectiveCameraState, -): WrappedRendererData { - let solids: Solid[] = renderGroup.shapes.map( - (shape: Shape): Solid => shape.solid, - ); - let geometryEntities: GeometryEntity[] = solidsToGeometryEntities(solids); - let extraEntities: Entity[] = makeExtraEntities(renderGroup, solids); - let allEntities: Entity[] = [...geometryEntities, ...extraEntities]; - - return { - entities: allEntities, - geometryEntities, - - camera: cameraState, - - rendering: { - background: hexToAlphaColor(ACE_GUTTER_BACKGROUND_COLOR), - }, - - drawCommands, - }; -} - -export function makeWrappedRenderer( - canvas: HTMLCanvasElement, -): WrappedRenderer { - return prepareRender({ - // Used to initialise Regl from the REGL package constructor - glOptions: { canvas }, - }); -} - -export function cloneCameraState(): PerspectiveCameraState { - return { ...cameras.perspective.defaults }; -} -export function cloneControlsState(): ControlsState { - return { ...controls.orbit.defaults }; -} - -export function updateProjection( - cameraState: PerspectiveCameraState, - width: number, - height: number, -) { - // Modify the projection, aspect ratio & viewport. As compared to the general - // controls.orbit.update() or even cameras.perspective.update() - cameras.perspective.setProjection(cameraState, cameraState, { - width, - height, - }); -} - -export function updateStates( - cameraState: PerspectiveCameraState, - controlsState: ControlsState, -) { - let states: UpdatedStates = (orbit.update({ - camera: cameraState, - controls: controlsState, - }) as unknown) as UpdatedStates; - - cameraState.position = states.camera.position; - cameraState.view = states.camera.view; - - controlsState.thetaDelta = states.controls.thetaDelta; - controlsState.phiDelta = states.controls.phiDelta; - controlsState.scale = states.controls.scale; -} - -export function zoomToFit( - cameraState: PerspectiveCameraState, - controlsState: ControlsState, - geometryEntities: GeometryEntity[], -) { - let states: ZoomToFitStates = (orbit.zoomToFit({ - camera: cameraState, - controls: controlsState, - entities: geometryEntities as any, - }) as unknown) as ZoomToFitStates; - - cameraState.target = states.camera.target; - - controlsState.scale = states.controls.scale; -} - -export function rotate( - cameraState: PerspectiveCameraState, - controlsState: ControlsState, - rotateX: number, - rotateY: number, -) { - let states: RotateStates = (orbit.rotate( - { - camera: cameraState, - controls: controlsState, - speed: ROTATION_SPEED, - }, - [rotateX, rotateY], - ) as unknown) as RotateStates; - - controlsState.thetaDelta = states.controls.thetaDelta; - controlsState.phiDelta = states.controls.phiDelta; -} - -export function pan( - cameraState: PerspectiveCameraState, - controlsState: ControlsState, - panX: number, - panY: number, -) { - let states: PanStates = (orbit.pan( - { - camera: cameraState, - controls: controlsState, - }, - [panX * X_FACTOR, panY * Y_FACTOR], - ) as unknown) as PanStates; - - cameraState.position = states.camera.position; - cameraState.target = states.camera.target; -} +/* [Imports] */ +import measureBoundingBox from '@jscad/modeling/src/measurements/measureBoundingBox'; +import { + cameras, + controls, + drawCommands, + entitiesFromSolids, + prepareRender, +} from '@jscad/regl-renderer'; +import { + ACE_GUTTER_BACKGROUND_COLOR, + ACE_GUTTER_TEXT_COLOR, + BP_TEXT_COLOR, + DEFAULT_COLOR, + GRID_PADDING, + MAIN_TICKS, + ROTATION_SPEED, + ROUND_UP_INTERVAL, + SUB_TICKS, + X_FACTOR, + Y_FACTOR, +} from '../constants.js'; +import { hexToAlphaColor, type RenderGroup, type Shape } from '../utilities.js'; +import type { + AlphaColor, + AxisEntityType, + BoundingBox, + ControlsState, + EntitiesFromSolidsOptions, + Entity, + GeometryEntity, + MultiGridEntityType, + PanStates, + PerspectiveCameraState, + RotateStates, + Solid, + UpdatedStates, + WrappedRenderer, + WrappedRendererData, + ZoomToFitStates, +} from './types.js'; + +/* [Main] */ +let { orbit } = controls; + +function solidsToGeometryEntities(solids: Solid[]): GeometryEntity[] { + let options: EntitiesFromSolidsOptions = { + color: hexToAlphaColor(DEFAULT_COLOR), + }; + return (entitiesFromSolids( + options, + ...solids, + ) as unknown) as GeometryEntity[]; +} + +function neatGridDistance(rawDistance: number) { + let paddedDistance: number = rawDistance + GRID_PADDING; + let roundedDistance: number + = Math.ceil(paddedDistance / ROUND_UP_INTERVAL) * ROUND_UP_INTERVAL; + return roundedDistance; +} + +class MultiGridEntity implements MultiGridEntityType { + visuals: { + drawCmd: 'drawGrid'; + show: boolean; + + color?: AlphaColor; + subColor?: AlphaColor; + } = { + drawCmd: 'drawGrid', + show: true, + + color: hexToAlphaColor(BP_TEXT_COLOR), + subColor: hexToAlphaColor(ACE_GUTTER_TEXT_COLOR), + }; + + ticks: [number, number] = [MAIN_TICKS, SUB_TICKS]; + + size: [number, number]; + + constructor(size: number) { + this.size = [size, size]; + } +} + +class AxisEntity implements AxisEntityType { + visuals: { + drawCmd: 'drawAxis'; + show: boolean; + } = { + drawCmd: 'drawAxis', + show: true, + }; + + alwaysVisible: boolean = false; + + constructor(public size?: number) {} +} + +function makeExtraEntities( + renderGroup: RenderGroup, + solids: Solid[], +): Entity[] { + let { hasGrid, hasAxis } = renderGroup; + // Run calculations for grid and/or axis only if needed + if (!(hasAxis || hasGrid)) return []; + + let boundingBoxes: BoundingBox[] = solids.map( + (solid: Solid): BoundingBox => measureBoundingBox(solid), + ); + let minMaxXys: number[][] = boundingBoxes.map( + (boundingBox: BoundingBox): number[] => { + let minX = boundingBox[0][0]; + let minY = boundingBox[0][1]; + let maxX = boundingBox[1][0]; + let maxY = boundingBox[1][1]; + return [minX, minY, maxX, maxY]; + }, + ); + let xys: number[] = minMaxXys.flat(1); + let distancesFromOrigin: number[] = xys.map(Math.abs); + let furthestDistance: number = Math.max(...distancesFromOrigin); + let neatDistance: number = neatGridDistance(furthestDistance); + + let extraEntities: Entity[] = []; + if (hasGrid) extraEntities.push(new MultiGridEntity(neatDistance * 2)); + if (hasAxis) extraEntities.push(new AxisEntity(neatDistance)); + return extraEntities; +} + +/* [Exports] */ +export function makeWrappedRendererData( + renderGroup: RenderGroup, + cameraState: PerspectiveCameraState, +): WrappedRendererData { + let solids: Solid[] = renderGroup.shapes.map( + (shape: Shape): Solid => shape.solid, + ); + let geometryEntities: GeometryEntity[] = solidsToGeometryEntities(solids); + let extraEntities: Entity[] = makeExtraEntities(renderGroup, solids); + let allEntities: Entity[] = [...geometryEntities, ...extraEntities]; + + return { + entities: allEntities, + geometryEntities, + + camera: cameraState, + + rendering: { + background: hexToAlphaColor(ACE_GUTTER_BACKGROUND_COLOR), + }, + + drawCommands, + }; +} + +export function makeWrappedRenderer( + canvas: HTMLCanvasElement, +): WrappedRenderer { + return prepareRender({ + // Used to initialise Regl from the REGL package constructor + glOptions: { canvas }, + }); +} + +export function cloneCameraState(): PerspectiveCameraState { + return { ...cameras.perspective.defaults }; +} +export function cloneControlsState(): ControlsState { + return { ...controls.orbit.defaults }; +} + +export function updateProjection( + cameraState: PerspectiveCameraState, + width: number, + height: number, +) { + // Modify the projection, aspect ratio & viewport. As compared to the general + // controls.orbit.update() or even cameras.perspective.update() + cameras.perspective.setProjection(cameraState, cameraState, { + width, + height, + }); +} + +export function updateStates( + cameraState: PerspectiveCameraState, + controlsState: ControlsState, +) { + let states: UpdatedStates = (orbit.update({ + camera: cameraState, + controls: controlsState, + }) as unknown) as UpdatedStates; + + cameraState.position = states.camera.position; + cameraState.view = states.camera.view; + + controlsState.thetaDelta = states.controls.thetaDelta; + controlsState.phiDelta = states.controls.phiDelta; + controlsState.scale = states.controls.scale; +} + +export function zoomToFit( + cameraState: PerspectiveCameraState, + controlsState: ControlsState, + geometryEntities: GeometryEntity[], +) { + let states: ZoomToFitStates = (orbit.zoomToFit({ + camera: cameraState, + controls: controlsState, + entities: geometryEntities as any, + }) as unknown) as ZoomToFitStates; + + cameraState.target = states.camera.target; + + controlsState.scale = states.controls.scale; +} + +export function rotate( + cameraState: PerspectiveCameraState, + controlsState: ControlsState, + rotateX: number, + rotateY: number, +) { + let states: RotateStates = (orbit.rotate( + { + camera: cameraState, + controls: controlsState, + speed: ROTATION_SPEED, + }, + [rotateX, rotateY], + ) as unknown) as RotateStates; + + controlsState.thetaDelta = states.controls.thetaDelta; + controlsState.phiDelta = states.controls.phiDelta; +} + +export function pan( + cameraState: PerspectiveCameraState, + controlsState: ControlsState, + panX: number, + panY: number, +) { + let states: PanStates = (orbit.pan( + { + camera: cameraState, + controls: controlsState, + }, + [panX * X_FACTOR, panY * Y_FACTOR], + ) as unknown) as PanStates; + + cameraState.position = states.camera.position; + cameraState.target = states.camera.target; +} diff --git a/src/bundles/csg/jscad/types.ts b/src/bundles/csg/jscad/types.ts index cd0c4d056..e5109d468 100644 --- a/src/bundles/csg/jscad/types.ts +++ b/src/bundles/csg/jscad/types.ts @@ -1,277 +1,277 @@ -/* [Import] */ -import type { RGB, RGBA } from '@jscad/modeling/src/colors/types.js'; -import type { Geom3 } from '@jscad/modeling/src/geometries/types.js'; -import { type cameras, type drawCommands, controls } from '@jscad/regl-renderer'; -import type makeDrawMultiGrid from '@jscad/regl-renderer/types/rendering/commands/drawGrid/multi'; - -/* [Main] */ -let { orbit } = controls; - -/* [Exports] */ -export type Color = RGB; -export type AlphaColor = RGBA; - -export type Numbers2 = [number, number]; -export type Numbers3 = [number, number, number]; - -export type Vector = Numbers3; -export type Coordinates = Numbers3; -export type BoundingBox = [Coordinates, Coordinates]; - -// @jscad\regl-renderer\src\rendering\renderDefaults.js -export type RenderOptions = { - // Used early on in render.js. Clears the canvas to the specified background - // colour - background?: AlphaColor; - - // Specified values used in various rendering commands as shader uniforms - lightColor?: AlphaColor; - lightDirection?: Vector; - ambientLightAmount?: number; - diffuseLightAmount?: number; - specularLightAmount?: number; - materialShininess?: number; // As uMaterialShininess in main DrawCommand - - // Specified value is unused, which seems unintentional. Their default value - // for this is used directly in V2's entitiesFromSolids.js as the default - // Geometry colour. Also gets used directly in various rendering commands as - // their shader uniforms' default colour - meshColor?: AlphaColor; - - // Unused - lightPosition?: Coordinates; // See also lightDirection -}; - -// @jscad\regl-renderer\src\geometry-utils-V2\entitiesFromSolids.js -// @jscad\regl-renderer\demo-web.js -// @jscad\regl-renderer\src\rendering\render.js -/* - (This is not exhaustive. There are still other Props used for uniforms in the - various rendering commands. Eg model, color, angle.) - (There are other Entity subtypes not defined in this file - GridEntity, - LineEntity & MeshEntity) -*/ -export type Entity = { - visuals: { - // Key for the DrawCommandMaker that should be used on this Entity. Key gets - // used on WrappedRendererData#drawCommands. Property must exist & match a - // DrawCommandMaker, or behaviour is like show: false - drawCmd: 'drawAxis' | 'drawGrid' | 'drawLines' | 'drawMesh'; - - // Whether to actually draw the Entity via nested DrawCommand - show: boolean; - - // Used to retrieve created DrawCommands from cache - cacheId?: number | null; - }; -}; - -// @jscad\regl-renderer\src\geometry-utils-V2\geom3ToGeometries.js -// @jscad\regl-renderer\src\geometry-utils-V2\geom3ToGeometries.test.js -export type Geometry = { - type: '2d' | '3d'; - positions: Coordinates[]; - normals: Coordinates[]; - indices: Coordinates[]; - colors: AlphaColor[]; - transforms: Mat4; - isTransparent: boolean; -}; - -// @jscad\regl-renderer\src\geometry-utils-V2\entitiesFromSolids.js -export type GeometryEntity = Entity & { - visuals: { - drawCmd: 'drawLines' | 'drawMesh'; - - // Whether the Geometry is transparent. Transparents need to be rendered - // before non-transparents - transparent: boolean; - - // Eventually determines whether to use vColorShaders (Geometry must also - // have colour), or meshShaders - useVertexColors: boolean; - }; - - // The original Geometry used to make the GeometryEntity - geometry: Geometry; -}; - -// @jscad\regl-renderer\src\rendering\commands\drawGrid\multi.js -// @jscad\regl-renderer\src\rendering\commands\drawGrid\index.js -// @jscad\regl-renderer\demo-web.js -// @jscad\web\src\ui\views\viewer.js -// @jscad\regl-renderer\src\index.js -export type MultiGridEntityType = Entity & { - // Entity#visuals gets stuffed into the nested DrawCommand as Props. The Props - // get passed on wholesale by makeDrawMultiGrid()'s returned lambda, where the - // following properties then get used (rather than while setting up the - // DrawCommands) - visuals: { - drawCmd: 'drawGrid'; - - color?: AlphaColor; - subColor?: AlphaColor; // Also as color - - fadeOut?: boolean; - }; - - size?: Numbers2; - // First number used on the main grid, second number on sub grid - ticks?: [number, number]; - - centered?: boolean; - - // Deprecated - lineWidth?: number; -}; - -// @jscad\regl-renderer\src\rendering\commands\drawAxis\index.js -// @jscad\regl-renderer\demo-web.js -export type AxisEntityType = Entity & { - visuals: { - drawCmd: 'drawAxis'; - }; - - size?: number; - alwaysVisible?: boolean; - - xColor?: AlphaColor; - yColor?: AlphaColor; - zColor?: AlphaColor; - - // Deprecated - lineWidth?: number; -}; - -// There are 4 rendering commands to use in regl-renderer: drawAxis, drawGrid, -// drawLines & drawMesh. drawExps appears abandoned. Only once passed Regl & an -// Entity do they return an actual DrawCommand -export type DrawCommandMaker = typeof drawCommands | typeof makeDrawMultiGrid; -export type DrawCommandMakers = Record; - -// @jscad\regl-renderer\src\cameras\perspectiveCamera.js -// @jscad\regl-renderer\src\cameras\orthographicCamera.js -/* - (Not exhaustive, only defines well the important properties we need.) - (Orthgraphic camera is ignored, this file assumes PerspectiveCameraState) -*/ -export type Mat4 = Float32Array; -export type PerspectiveCameraState = Omit< - typeof cameras.perspective.cameraState, -'target' | 'position' | 'view' -> & { - target: Coordinates; - - position: Coordinates; - view: Mat4; -}; - -// @jscad\regl-renderer\src\rendering\render.js -/* - Gets used in the WrappedRenderer. Also gets passed as Props into the main - DrawCommand, where it is used in setup specified by the internal - renderContext.js/renderWrapper. The lambda of the main DrawCommand does not - use those Props, rather, it references the data in the WrappedRenderer - directly. Therefore, regl.prop() is not called, nor are Props used via the - semantic equivalent (context, props) => {}. The context passed to that lambda - also remains unused -*/ -export type WrappedRendererData = { - entities: Entity[]; - // A CUSTOM property used to easily pass only the GeometryEntities to - // InputTracker for zoom to fit - geometryEntities: GeometryEntity[]; - - // Along with all of the relevant Entity's & Entity#visuals's properties, this - // entire object gets destructured & stuffed into each nested DrawCommand as - // Props. Messy & needs tidying in regl-renderer - camera: PerspectiveCameraState; - - rendering?: RenderOptions; - - drawCommands: DrawCommandMakers; -}; - -// @jscad\regl-renderer\src\rendering\render.js -/* - When called, the WrappedRenderer creates a main DrawCommand. This main - DrawCommand then gets called as a scoped command, used to create & call more - DrawCommands for the data.entities. Nested DrawCommands get cached & may store - some Entity properties during setup, but properties passed in from Props later - may take precedence. The main DrawCommand is said to be in charge of injecting - most uniforms into the Regl context, ie keeping track of all Regl global state -*/ -export type WrappedRenderer = (data: WrappedRendererData) => void; - -// @jscad\regl-renderer\src\controls\orbitControls.js -/* - (Not exhaustive, only defines well the important properties we need) -*/ -export type ControlsState = Omit< - typeof orbit.controlsState, -'scale' | 'thetaDelta' | 'phiDelta' -> & - typeof orbit.controlsProps & { - scale: number; - - thetaDelta: number; - phiDelta: number; -}; - -export type Solid = Geom3; - -// @jscad\regl-renderer\src\geometry-utils-V2\entitiesFromSolids.js -/* - Options for the function that converts Solids into Geometries, then into - GeometryEntities -*/ -export type EntitiesFromSolidsOptions = { - // Default colour for entity rendering if the solid does not have one - color?: AlphaColor; - - // Whether to smooth the normals of 3D solids, rendering a smooth surface - smoothNormals?: boolean; -}; - -// @jscad\regl-renderer\src\controls\orbitControls.js -export type UpdatedStates = { - camera: { - position: Coordinates; - view: Mat4; - }; - controls: { - thetaDelta: number; - phiDelta: number; - scale: number; - - changed: boolean; - }; -}; - -// @jscad\regl-renderer\src\controls\orbitControls.js -export type ZoomToFitStates = { - camera: { - target: Vector; - }; - controls: { - scale: number; - }; -}; - -// @jscad\regl-renderer\src\controls\orbitControls.js -export type RotateStates = { - camera: PerspectiveCameraState; - controls: { - thetaDelta: number; - phiDelta: number; - }; -}; - -// @jscad\regl-renderer\src\controls\orbitControls.js -export type PanStates = { - camera: { - position: Coordinates; - target: Vector; - }; - controls: ControlsState; -}; +/* [Import] */ +import type { RGB, RGBA } from '@jscad/modeling/src/colors/types.js'; +import type { Geom3 } from '@jscad/modeling/src/geometries/types.js'; +import { type cameras, type drawCommands, controls } from '@jscad/regl-renderer'; +import type makeDrawMultiGrid from '@jscad/regl-renderer/types/rendering/commands/drawGrid/multi'; + +/* [Main] */ +let { orbit } = controls; + +/* [Exports] */ +export type Color = RGB; +export type AlphaColor = RGBA; + +export type Numbers2 = [number, number]; +export type Numbers3 = [number, number, number]; + +export type Vector = Numbers3; +export type Coordinates = Numbers3; +export type BoundingBox = [Coordinates, Coordinates]; + +// @jscad\regl-renderer\src\rendering\renderDefaults.js +export type RenderOptions = { + // Used early on in render.js. Clears the canvas to the specified background + // colour + background?: AlphaColor; + + // Specified values used in various rendering commands as shader uniforms + lightColor?: AlphaColor; + lightDirection?: Vector; + ambientLightAmount?: number; + diffuseLightAmount?: number; + specularLightAmount?: number; + materialShininess?: number; // As uMaterialShininess in main DrawCommand + + // Specified value is unused, which seems unintentional. Their default value + // for this is used directly in V2's entitiesFromSolids.js as the default + // Geometry colour. Also gets used directly in various rendering commands as + // their shader uniforms' default colour + meshColor?: AlphaColor; + + // Unused + lightPosition?: Coordinates; // See also lightDirection +}; + +// @jscad\regl-renderer\src\geometry-utils-V2\entitiesFromSolids.js +// @jscad\regl-renderer\demo-web.js +// @jscad\regl-renderer\src\rendering\render.js +/* + (This is not exhaustive. There are still other Props used for uniforms in the + various rendering commands. Eg model, color, angle.) + (There are other Entity subtypes not defined in this file - GridEntity, + LineEntity & MeshEntity) +*/ +export type Entity = { + visuals: { + // Key for the DrawCommandMaker that should be used on this Entity. Key gets + // used on WrappedRendererData#drawCommands. Property must exist & match a + // DrawCommandMaker, or behaviour is like show: false + drawCmd: 'drawAxis' | 'drawGrid' | 'drawLines' | 'drawMesh'; + + // Whether to actually draw the Entity via nested DrawCommand + show: boolean; + + // Used to retrieve created DrawCommands from cache + cacheId?: number | null; + }; +}; + +// @jscad\regl-renderer\src\geometry-utils-V2\geom3ToGeometries.js +// @jscad\regl-renderer\src\geometry-utils-V2\geom3ToGeometries.test.js +export type Geometry = { + type: '2d' | '3d'; + positions: Coordinates[]; + normals: Coordinates[]; + indices: Coordinates[]; + colors: AlphaColor[]; + transforms: Mat4; + isTransparent: boolean; +}; + +// @jscad\regl-renderer\src\geometry-utils-V2\entitiesFromSolids.js +export type GeometryEntity = Entity & { + visuals: { + drawCmd: 'drawLines' | 'drawMesh'; + + // Whether the Geometry is transparent. Transparents need to be rendered + // before non-transparents + transparent: boolean; + + // Eventually determines whether to use vColorShaders (Geometry must also + // have colour), or meshShaders + useVertexColors: boolean; + }; + + // The original Geometry used to make the GeometryEntity + geometry: Geometry; +}; + +// @jscad\regl-renderer\src\rendering\commands\drawGrid\multi.js +// @jscad\regl-renderer\src\rendering\commands\drawGrid\index.js +// @jscad\regl-renderer\demo-web.js +// @jscad\web\src\ui\views\viewer.js +// @jscad\regl-renderer\src\index.js +export type MultiGridEntityType = Entity & { + // Entity#visuals gets stuffed into the nested DrawCommand as Props. The Props + // get passed on wholesale by makeDrawMultiGrid()'s returned lambda, where the + // following properties then get used (rather than while setting up the + // DrawCommands) + visuals: { + drawCmd: 'drawGrid'; + + color?: AlphaColor; + subColor?: AlphaColor; // Also as color + + fadeOut?: boolean; + }; + + size?: Numbers2; + // First number used on the main grid, second number on sub grid + ticks?: [number, number]; + + centered?: boolean; + + // Deprecated + lineWidth?: number; +}; + +// @jscad\regl-renderer\src\rendering\commands\drawAxis\index.js +// @jscad\regl-renderer\demo-web.js +export type AxisEntityType = Entity & { + visuals: { + drawCmd: 'drawAxis'; + }; + + size?: number; + alwaysVisible?: boolean; + + xColor?: AlphaColor; + yColor?: AlphaColor; + zColor?: AlphaColor; + + // Deprecated + lineWidth?: number; +}; + +// There are 4 rendering commands to use in regl-renderer: drawAxis, drawGrid, +// drawLines & drawMesh. drawExps appears abandoned. Only once passed Regl & an +// Entity do they return an actual DrawCommand +export type DrawCommandMaker = typeof drawCommands | typeof makeDrawMultiGrid; +export type DrawCommandMakers = Record; + +// @jscad\regl-renderer\src\cameras\perspectiveCamera.js +// @jscad\regl-renderer\src\cameras\orthographicCamera.js +/* + (Not exhaustive, only defines well the important properties we need.) + (Orthgraphic camera is ignored, this file assumes PerspectiveCameraState) +*/ +export type Mat4 = Float32Array; +export type PerspectiveCameraState = Omit< + typeof cameras.perspective.cameraState, +'target' | 'position' | 'view' +> & { + target: Coordinates; + + position: Coordinates; + view: Mat4; +}; + +// @jscad\regl-renderer\src\rendering\render.js +/* + Gets used in the WrappedRenderer. Also gets passed as Props into the main + DrawCommand, where it is used in setup specified by the internal + renderContext.js/renderWrapper. The lambda of the main DrawCommand does not + use those Props, rather, it references the data in the WrappedRenderer + directly. Therefore, regl.prop() is not called, nor are Props used via the + semantic equivalent (context, props) => {}. The context passed to that lambda + also remains unused +*/ +export type WrappedRendererData = { + entities: Entity[]; + // A CUSTOM property used to easily pass only the GeometryEntities to + // InputTracker for zoom to fit + geometryEntities: GeometryEntity[]; + + // Along with all of the relevant Entity's & Entity#visuals's properties, this + // entire object gets destructured & stuffed into each nested DrawCommand as + // Props. Messy & needs tidying in regl-renderer + camera: PerspectiveCameraState; + + rendering?: RenderOptions; + + drawCommands: DrawCommandMakers; +}; + +// @jscad\regl-renderer\src\rendering\render.js +/* + When called, the WrappedRenderer creates a main DrawCommand. This main + DrawCommand then gets called as a scoped command, used to create & call more + DrawCommands for the data.entities. Nested DrawCommands get cached & may store + some Entity properties during setup, but properties passed in from Props later + may take precedence. The main DrawCommand is said to be in charge of injecting + most uniforms into the Regl context, ie keeping track of all Regl global state +*/ +export type WrappedRenderer = (data: WrappedRendererData) => void; + +// @jscad\regl-renderer\src\controls\orbitControls.js +/* + (Not exhaustive, only defines well the important properties we need) +*/ +export type ControlsState = Omit< + typeof orbit.controlsState, +'scale' | 'thetaDelta' | 'phiDelta' +> & + typeof orbit.controlsProps & { + scale: number; + + thetaDelta: number; + phiDelta: number; +}; + +export type Solid = Geom3; + +// @jscad\regl-renderer\src\geometry-utils-V2\entitiesFromSolids.js +/* + Options for the function that converts Solids into Geometries, then into + GeometryEntities +*/ +export type EntitiesFromSolidsOptions = { + // Default colour for entity rendering if the solid does not have one + color?: AlphaColor; + + // Whether to smooth the normals of 3D solids, rendering a smooth surface + smoothNormals?: boolean; +}; + +// @jscad\regl-renderer\src\controls\orbitControls.js +export type UpdatedStates = { + camera: { + position: Coordinates; + view: Mat4; + }; + controls: { + thetaDelta: number; + phiDelta: number; + scale: number; + + changed: boolean; + }; +}; + +// @jscad\regl-renderer\src\controls\orbitControls.js +export type ZoomToFitStates = { + camera: { + target: Vector; + }; + controls: { + scale: number; + }; +}; + +// @jscad\regl-renderer\src\controls\orbitControls.js +export type RotateStates = { + camera: PerspectiveCameraState; + controls: { + thetaDelta: number; + phiDelta: number; + }; +}; + +// @jscad\regl-renderer\src\controls\orbitControls.js +export type PanStates = { + camera: { + position: Coordinates; + target: Vector; + }; + controls: ControlsState; +}; diff --git a/src/bundles/csg/listener_tracker.ts b/src/bundles/csg/listener_tracker.ts index aeba0fda6..79539fc99 100644 --- a/src/bundles/csg/listener_tracker.ts +++ b/src/bundles/csg/listener_tracker.ts @@ -1,28 +1,28 @@ -/* [Exports] */ -export default class ListenerTracker { - private listeners: [string, Function][] = []; - - constructor(private element: Element) {} - - addListener( - eventType: string, - listener: Function, - options?: AddEventListenerOptions, - ) { - this.listeners.push([eventType, listener]); - this.element.addEventListener( - eventType, - listener as EventListenerOrEventListenerObject, - options, - ); - } - - removeListeners() { - this.listeners.forEach(([eventType, listener]) => { - this.element.removeEventListener( - eventType, - listener as EventListenerOrEventListenerObject, - ); - }); - } -} +/* [Exports] */ +export default class ListenerTracker { + private listeners: [string, Function][] = []; + + constructor(private element: Element) {} + + addListener( + eventType: string, + listener: Function, + options?: AddEventListenerOptions, + ) { + this.listeners.push([eventType, listener]); + this.element.addEventListener( + eventType, + listener as EventListenerOrEventListenerObject, + options, + ); + } + + removeListeners() { + this.listeners.forEach(([eventType, listener]) => { + this.element.removeEventListener( + eventType, + listener as EventListenerOrEventListenerObject, + ); + }); + } +} diff --git a/src/bundles/csg/stateful_renderer.ts b/src/bundles/csg/stateful_renderer.ts index 642709eea..e284d0da0 100644 --- a/src/bundles/csg/stateful_renderer.ts +++ b/src/bundles/csg/stateful_renderer.ts @@ -1,141 +1,141 @@ -/* [Imports] */ -import InputTracker from './input_tracker.js'; -import { - cloneCameraState, - makeWrappedRenderer, - makeWrappedRendererData, -} from './jscad/renderer.js'; -import type { - Entity, - PerspectiveCameraState, - WrappedRenderer, - WrappedRendererData, -} from './jscad/types.js'; -import ListenerTracker from './listener_tracker.js'; -import type { RenderGroup } from './utilities.js'; - -/* [Exports] */ -export default class StatefulRenderer { - private isStarted: boolean = false; - private currentRequestId: number | null = null; - - private cameraState: PerspectiveCameraState = cloneCameraState(); - - private webGlListenerTracker: ListenerTracker; - - private wrappedRendererData: WrappedRendererData; - - private inputTracker: InputTracker; - - constructor( - private canvas: HTMLCanvasElement, - renderGroup: RenderGroup, - private componentNumber: number, - - private loseCallback: Function, - private restoreCallback: Function, - ) { - //FIXME Issue #7 - this.cameraState.position = [1000, 1000, 1500]; - - this.webGlListenerTracker = new ListenerTracker(canvas); - - this.wrappedRendererData = makeWrappedRendererData( - renderGroup, - this.cameraState, - ); - - this.inputTracker = new InputTracker( - canvas, - this.cameraState, - this.wrappedRendererData.geometryEntities, - ); - } - - private addWebGlListeners() { - this.webGlListenerTracker.addListener( - 'webglcontextlost', - (contextEvent: WebGLContextEvent) => { - // Allow restoration of context - contextEvent.preventDefault(); - - console.debug(`>>> CONTEXT LOST FOR #${this.componentNumber}`); - - this.loseCallback(); - - this.stop(); - }, - ); - - this.webGlListenerTracker.addListener( - 'webglcontextrestored', - (_contextEvent: WebGLContextEvent) => { - console.debug(`>>> CONTEXT RESTORED FOR #${this.componentNumber}`); - - this.start(); - - this.restoreCallback(); - }, - ); - } - - private forgetEntityCaches() { - // Clear draw cache IDs so starting again doesn't try to retrieve - // DrawCommands - this.wrappedRendererData.entities.forEach((entity: Entity) => { - entity.visuals.cacheId = null; - }); - } - - start(firstStart = false) { - if (this.isStarted) return; - this.isStarted = true; - - if (!firstStart) { - // As listeners were previously removed, flush some tracked inputs to - // avoid bugs like the pointer being stuck down - this.inputTracker.flushMidInput(); - - this.forgetEntityCaches(); - } - - // Creating the WrappedRenderer already involves REGL. Losing WebGL context - // requires repeating this step (ie, with each start()) - let wrappedRenderer: WrappedRenderer = makeWrappedRenderer(this.canvas); - - if (firstStart) this.addWebGlListeners(); - this.inputTracker.addListeners(); - - let frameCallback: FrameRequestCallback = ( - _timestamp: DOMHighResTimeStamp, - ) => { - this.inputTracker.respondToInput(); - - if (this.inputTracker.frameDirty) { - console.debug(`>>> Frame for #${this.componentNumber}`); - - wrappedRenderer(this.wrappedRendererData); - this.inputTracker.frameDirty = false; - } - - this.currentRequestId = window.requestAnimationFrame(frameCallback); - }; - if (!firstStart) { - // Force draw upon restarting, eg after recovering from context loss - this.inputTracker.frameDirty = true; - } - this.currentRequestId = window.requestAnimationFrame(frameCallback); - } - - stop(lastStop = false) { - if (this.currentRequestId !== null) { - window.cancelAnimationFrame(this.currentRequestId); - this.currentRequestId = null; - } - - this.inputTracker.removeListeners(); - if (lastStop) this.webGlListenerTracker.removeListeners(); - - this.isStarted = false; - } -} +/* [Imports] */ +import InputTracker from './input_tracker.js'; +import { + cloneCameraState, + makeWrappedRenderer, + makeWrappedRendererData, +} from './jscad/renderer.js'; +import type { + Entity, + PerspectiveCameraState, + WrappedRenderer, + WrappedRendererData, +} from './jscad/types.js'; +import ListenerTracker from './listener_tracker.js'; +import type { RenderGroup } from './utilities.js'; + +/* [Exports] */ +export default class StatefulRenderer { + private isStarted: boolean = false; + private currentRequestId: number | null = null; + + private cameraState: PerspectiveCameraState = cloneCameraState(); + + private webGlListenerTracker: ListenerTracker; + + private wrappedRendererData: WrappedRendererData; + + private inputTracker: InputTracker; + + constructor( + private canvas: HTMLCanvasElement, + renderGroup: RenderGroup, + private componentNumber: number, + + private loseCallback: Function, + private restoreCallback: Function, + ) { + //FIXME Issue #7 + this.cameraState.position = [1000, 1000, 1500]; + + this.webGlListenerTracker = new ListenerTracker(canvas); + + this.wrappedRendererData = makeWrappedRendererData( + renderGroup, + this.cameraState, + ); + + this.inputTracker = new InputTracker( + canvas, + this.cameraState, + this.wrappedRendererData.geometryEntities, + ); + } + + private addWebGlListeners() { + this.webGlListenerTracker.addListener( + 'webglcontextlost', + (contextEvent: WebGLContextEvent) => { + // Allow restoration of context + contextEvent.preventDefault(); + + console.debug(`>>> CONTEXT LOST FOR #${this.componentNumber}`); + + this.loseCallback(); + + this.stop(); + }, + ); + + this.webGlListenerTracker.addListener( + 'webglcontextrestored', + (_contextEvent: WebGLContextEvent) => { + console.debug(`>>> CONTEXT RESTORED FOR #${this.componentNumber}`); + + this.start(); + + this.restoreCallback(); + }, + ); + } + + private forgetEntityCaches() { + // Clear draw cache IDs so starting again doesn't try to retrieve + // DrawCommands + this.wrappedRendererData.entities.forEach((entity: Entity) => { + entity.visuals.cacheId = null; + }); + } + + start(firstStart = false) { + if (this.isStarted) return; + this.isStarted = true; + + if (!firstStart) { + // As listeners were previously removed, flush some tracked inputs to + // avoid bugs like the pointer being stuck down + this.inputTracker.flushMidInput(); + + this.forgetEntityCaches(); + } + + // Creating the WrappedRenderer already involves REGL. Losing WebGL context + // requires repeating this step (ie, with each start()) + let wrappedRenderer: WrappedRenderer = makeWrappedRenderer(this.canvas); + + if (firstStart) this.addWebGlListeners(); + this.inputTracker.addListeners(); + + let frameCallback: FrameRequestCallback = ( + _timestamp: DOMHighResTimeStamp, + ) => { + this.inputTracker.respondToInput(); + + if (this.inputTracker.frameDirty) { + console.debug(`>>> Frame for #${this.componentNumber}`); + + wrappedRenderer(this.wrappedRendererData); + this.inputTracker.frameDirty = false; + } + + this.currentRequestId = window.requestAnimationFrame(frameCallback); + }; + if (!firstStart) { + // Force draw upon restarting, eg after recovering from context loss + this.inputTracker.frameDirty = true; + } + this.currentRequestId = window.requestAnimationFrame(frameCallback); + } + + stop(lastStop = false) { + if (this.currentRequestId !== null) { + window.cancelAnimationFrame(this.currentRequestId); + this.currentRequestId = null; + } + + this.inputTracker.removeListeners(); + if (lastStop) this.webGlListenerTracker.removeListeners(); + + this.isStarted = false; + } +} diff --git a/src/bundles/csg/types.ts b/src/bundles/csg/types.ts index e813ea89a..b2cf0d266 100644 --- a/src/bundles/csg/types.ts +++ b/src/bundles/csg/types.ts @@ -1,349 +1,349 @@ -/* [Imports] */ -import type { RGB, RGBA } from '@jscad/modeling/src/colors'; -import type { Geom3 } from '@jscad/modeling/src/geometries/types'; -import { - cameras, - controls as _controls, - type drawCommands, -} from '@jscad/regl-renderer'; -import type makeDrawMultiGrid from '@jscad/regl-renderer/types/rendering/commands/drawGrid/multi'; -import type { InitializationOptions } from 'regl'; - -/* [Main] */ -let orthographicCamera = cameras.orthographic; -let perspectiveCamera = cameras.perspective; - -let controls = _controls.orbit; - -/* [Exports] */ - -// [Proper typing for JS in regl-renderer] -type Numbers2 = [number, number]; - -type Numbers3 = [number, number, number]; -export type VectorXYZ = Numbers3; -export type CoordinatesXYZ = Numbers3; -export type Color = RGB; - -export type Mat4 = Float32Array; - -// @jscad\regl-renderer\src\cameras\perspectiveCamera.js -// @jscad\regl-renderer\src\cameras\orthographicCamera.js -export type PerspectiveCamera = typeof perspectiveCamera; -export type OrthographicCamera = typeof orthographicCamera; - -export type PerspectiveCameraState = Omit< - typeof perspectiveCamera.cameraState, -'target' | 'position' | 'view' -> & { - target: CoordinatesXYZ; - - position: CoordinatesXYZ; - view: Mat4; -}; -export type OrthographicCameraState = typeof orthographicCamera.cameraState; -export type CameraState = PerspectiveCameraState | OrthographicCameraState; - -// @jscad\regl-renderer\src\controls\orbitControls.js -export type Controls = Omit< - typeof controls, -'update' | 'zoomToFit' | 'rotate' | 'pan' -> & { - update: ControlsUpdate.Function; - zoomToFit: ControlsZoomToFit.Function; - rotate: ControlsRotate; - pan: ControlsPan; -}; -export namespace ControlsUpdate { - export type Function = (options: Options) => Output; - - export type Options = { - controls: ControlsState; - camera: CameraState; - }; - - export type Output = { - controls: { - thetaDelta: number; - phiDelta: number; - scale: number; - changed: boolean; - }; - camera: { - position: CoordinatesXYZ; - view: Mat4; - }; - }; -} -export namespace ControlsZoomToFit { - export type Function = (options: Options) => Output; - - export type Options = { - controls: ControlsState; - camera: CameraState; - entities: GeometryEntity[]; - }; - - export type Output = { - camera: { - target: VectorXYZ; - }; - controls: { - scale: number; - }; - }; -} -export type ControlsRotate = ( - options: { - controls: ControlsState; - camera: CameraState; - speed?: number; - }, - rotateAngles: Numbers2 -) => { - controls: { - thetaDelta: number; - phiDelta: number; - }; - camera: CameraState; -}; -export type ControlsPan = ( - options: { - controls: ControlsState; - camera: CameraState; - speed?: number; - }, - rotateAngles: Numbers2 -) => { - controls: ControlsState; - camera: { - position: CoordinatesXYZ; - target: VectorXYZ; - }; -}; - -export type ControlsState = Omit< - typeof controls.controlsState, -'scale' | 'thetaDelta' | 'phiDelta' -> & - typeof controls.controlsProps & { - scale: number; - - thetaDelta: number; - phiDelta: number; -}; - -export type Solid = Geom3; - -// @jscad\regl-renderer\src\geometry-utils-V2\geom3ToGeometries.js -// @jscad\regl-renderer\src\geometry-utils-V2\geom3ToGeometries.test.js -export type Geometry = { - type: '2d' | '3d'; - positions: CoordinatesXYZ[]; - normals: CoordinatesXYZ[]; - indices: CoordinatesXYZ[]; - colors: RGBA[]; - transforms: Mat4; - isTransparent: boolean; -}; - -// @jscad\regl-renderer\src\geometry-utils-V2\entitiesFromSolids.js -// @jscad\regl-renderer\demo-web.js -// There are still other Props used for uniforms in the various rendering -// commands, eg model, color, angle -export type Entity = { - visuals: { - // Key for the draw command that should be used on this Entity. - // Key is used on WrappedRenderer.AllData#drawCommands. - // Property must exist & match a drawCommand, - // or behaviour is like show: false - drawCmd: 'drawAxis' | 'drawGrid' | 'drawLines' | 'drawMesh'; - - // Whether to actually draw the Entity via nested DrawCommand - show: boolean; - }; -}; - -// @jscad\regl-renderer\src\geometry-utils-V2\entitiesFromSolids.js -export type GeometryEntity = Entity & { - visuals: { - drawCmd: 'drawLines' | 'drawMesh'; - - // Whether the Geometry is transparent. - // Transparents need to be rendered before non-transparents - transparent: boolean; - - // Eventually determines whether to use vColorShaders - // (Geometry must also have colour) or meshShaders - useVertexColors: boolean; - }; - - // The original Geometry used to make the GeometryEntity - geometry: Geometry; -}; - -// @jscad\regl-renderer\src\rendering\commands\drawAxis\index.js -// @jscad\regl-renderer\demo-web.js -export type AxisEntityType = Entity & { - visuals: { - drawCmd: 'drawAxis'; - }; - - xColor?: RGBA; - yColor?: RGBA; - zColor?: RGBA; - size?: number; - alwaysVisible?: boolean; - - // Deprecated - lineWidth?: number; -}; - -// @jscad\regl-renderer\src\rendering\commands\drawGrid\index.js -// @jscad\regl-renderer\demo-web.js -export type GridEntity = Entity & { - visuals: { - drawCmd: 'drawGrid'; - - color?: RGBA; - fadeOut?: boolean; - }; - size?: Numbers2; - ticks?: number; - centered?: boolean; - - // Deprecated - lineWidth?: number; -}; - -// @jscad\regl-renderer\src\rendering\commands\drawGrid\multi.js -// @jscad\regl-renderer\demo-web.js -// @jscad\web\src\ui\views\viewer.js -// @jscad\regl-renderer\src\index.js -export type MultiGridEntityType = Omit & { - // Entity#visuals gets stuffed into the nested DrawCommand as Props. - // The Props get passed on wholesale by makeDrawMultiGrid()'s returned lambda, - // where the following properties then get used - // (rather than while setting up the DrawCommands) - visuals: { - subColor?: RGBA; // As color - }; - - // First number used on the main grid, second number on sub grid - ticks?: [number, number]; -}; - -// @jscad\regl-renderer\src\rendering\commands\drawLines\index.js -export type LinesEntity = Entity & { - visuals: { - drawCmd: 'drawLines'; - }; - - color?: RGBA; -}; - -// @jscad\regl-renderer\src\rendering\commands\drawMesh\index.js -export type MeshEntity = Entity & { - visuals: { - drawCmd: 'drawMesh'; - }; - - dynamicCulling?: boolean; - color?: RGBA; -}; - -export namespace PrepareRender { - // @jscad\regl-renderer\src\rendering\render.js - export type Function = (options: AllOptions) => WrappedRenderer.Function; - - // @jscad\regl-renderer\src\rendering\render.js - export type AllOptions = { - // Used to initialise Regl from the REGL package constructor - glOptions: InitializationOptions; - }; -} - -// When called, the WrappedRenderer creates a main DrawCommand. -// This main DrawCommand then gets called as a scoped command, -// used to create & call more DrawCommands for the #entities. -// Nested DrawCommands get cached -// & may store some Entity properties during setup, -// but properties passed in from Props later may take precedence. -// The main DrawCommand is said to be in charge of injecting most uniforms into -// the Regl context, ie keeping track of all Regl global state -export namespace WrappedRenderer { - // @jscad\regl-renderer\src\rendering\render.js - export type Function = (data: AllData) => void; - - // @jscad\regl-renderer\src\rendering\render.js - // Gets used in the WrappedRenderer. - // Also gets passed as Props into the main DrawCommand, - // where it is used in setup specified by the internal - // renderContext.js/renderWrapper. - // The lambda of the main DrawCommand does not use those Props, rather, - // it references the data in the WrappedRenderer directly. - // Therefore, regl.prop() is not called, - // nor are Props used via the semantic equivalent (context, props) => {}. - // The context passed to that lambda also remains unused - export type AllData = { - rendering?: RenderOptions; - - entities: Entity[]; - - drawCommands: PrepareDrawCommands; - - // Along with all of the relevant Entity's & Entity#visuals's properties, - // this gets stuffed into each nested DrawCommand as Props. - // Messy & needs tidying in regl-renderer - camera: CameraState; - }; - - // @jscad\regl-renderer\src\rendering\renderDefaults.js - export type RenderOptions = { - // Custom value used early on in render.js. - // Clears the canvas to this background colour - background?: RGBA; - - // Default value used directly in V2's entitiesFromSolids.js as the default Geometry colour. - // Default value also used directly in various rendering commands as their shader uniforms' default colour. - // Custom value appears unused - meshColor?: RGBA; - - // Custom value used in various rendering commands as shader uniforms - lightColor?: RGBA; - lightDirection?: VectorXYZ; - ambientLightAmount?: number; - diffuseLightAmount?: number; - specularLightAmount?: number; - materialShininess?: number; // As uMaterialShininess in main DrawCommand - - // Unused - lightPosition?: CoordinatesXYZ; // See also lightDirection - }; - - // There are 4 rendering commands to use in regl-renderer: - // drawAxis, drawGrid, drawLines & drawMesh. - // drawExps appears abandoned. - // Only once passed Regl & an Entity do they return an actual DrawCommand - export type PrepareDrawCommands = Record; - export type PrepareDrawCommandFunction = - | typeof drawCommands - | typeof makeDrawMultiGrid; -} - -// @jscad\regl-renderer\src\geometry-utils-V2\entitiesFromSolids.js -// Converts Solids into Geometries and then into Entities -export namespace EntitiesFromSolids { - export type Function = ( - options?: Options, - ...solids: Solid[] - ) => GeometryEntity[]; - - export type Options = { - // Default colour for entity rendering if the solid does not have one - color?: RGBA; - - // Whether to smooth the normals of 3D solids, rendering a smooth surface - smoothNormals?: boolean; - }; -} +/* [Imports] */ +import type { RGB, RGBA } from '@jscad/modeling/src/colors'; +import type { Geom3 } from '@jscad/modeling/src/geometries/types'; +import { + cameras, + controls as _controls, + type drawCommands, +} from '@jscad/regl-renderer'; +import type makeDrawMultiGrid from '@jscad/regl-renderer/types/rendering/commands/drawGrid/multi'; +import type { InitializationOptions } from 'regl'; + +/* [Main] */ +let orthographicCamera = cameras.orthographic; +let perspectiveCamera = cameras.perspective; + +let controls = _controls.orbit; + +/* [Exports] */ + +// [Proper typing for JS in regl-renderer] +type Numbers2 = [number, number]; + +type Numbers3 = [number, number, number]; +export type VectorXYZ = Numbers3; +export type CoordinatesXYZ = Numbers3; +export type Color = RGB; + +export type Mat4 = Float32Array; + +// @jscad\regl-renderer\src\cameras\perspectiveCamera.js +// @jscad\regl-renderer\src\cameras\orthographicCamera.js +export type PerspectiveCamera = typeof perspectiveCamera; +export type OrthographicCamera = typeof orthographicCamera; + +export type PerspectiveCameraState = Omit< + typeof perspectiveCamera.cameraState, +'target' | 'position' | 'view' +> & { + target: CoordinatesXYZ; + + position: CoordinatesXYZ; + view: Mat4; +}; +export type OrthographicCameraState = typeof orthographicCamera.cameraState; +export type CameraState = PerspectiveCameraState | OrthographicCameraState; + +// @jscad\regl-renderer\src\controls\orbitControls.js +export type Controls = Omit< + typeof controls, +'update' | 'zoomToFit' | 'rotate' | 'pan' +> & { + update: ControlsUpdate.Function; + zoomToFit: ControlsZoomToFit.Function; + rotate: ControlsRotate; + pan: ControlsPan; +}; +export namespace ControlsUpdate { + export type Function = (options: Options) => Output; + + export type Options = { + controls: ControlsState; + camera: CameraState; + }; + + export type Output = { + controls: { + thetaDelta: number; + phiDelta: number; + scale: number; + changed: boolean; + }; + camera: { + position: CoordinatesXYZ; + view: Mat4; + }; + }; +} +export namespace ControlsZoomToFit { + export type Function = (options: Options) => Output; + + export type Options = { + controls: ControlsState; + camera: CameraState; + entities: GeometryEntity[]; + }; + + export type Output = { + camera: { + target: VectorXYZ; + }; + controls: { + scale: number; + }; + }; +} +export type ControlsRotate = ( + options: { + controls: ControlsState; + camera: CameraState; + speed?: number; + }, + rotateAngles: Numbers2 +) => { + controls: { + thetaDelta: number; + phiDelta: number; + }; + camera: CameraState; +}; +export type ControlsPan = ( + options: { + controls: ControlsState; + camera: CameraState; + speed?: number; + }, + rotateAngles: Numbers2 +) => { + controls: ControlsState; + camera: { + position: CoordinatesXYZ; + target: VectorXYZ; + }; +}; + +export type ControlsState = Omit< + typeof controls.controlsState, +'scale' | 'thetaDelta' | 'phiDelta' +> & + typeof controls.controlsProps & { + scale: number; + + thetaDelta: number; + phiDelta: number; +}; + +export type Solid = Geom3; + +// @jscad\regl-renderer\src\geometry-utils-V2\geom3ToGeometries.js +// @jscad\regl-renderer\src\geometry-utils-V2\geom3ToGeometries.test.js +export type Geometry = { + type: '2d' | '3d'; + positions: CoordinatesXYZ[]; + normals: CoordinatesXYZ[]; + indices: CoordinatesXYZ[]; + colors: RGBA[]; + transforms: Mat4; + isTransparent: boolean; +}; + +// @jscad\regl-renderer\src\geometry-utils-V2\entitiesFromSolids.js +// @jscad\regl-renderer\demo-web.js +// There are still other Props used for uniforms in the various rendering +// commands, eg model, color, angle +export type Entity = { + visuals: { + // Key for the draw command that should be used on this Entity. + // Key is used on WrappedRenderer.AllData#drawCommands. + // Property must exist & match a drawCommand, + // or behaviour is like show: false + drawCmd: 'drawAxis' | 'drawGrid' | 'drawLines' | 'drawMesh'; + + // Whether to actually draw the Entity via nested DrawCommand + show: boolean; + }; +}; + +// @jscad\regl-renderer\src\geometry-utils-V2\entitiesFromSolids.js +export type GeometryEntity = Entity & { + visuals: { + drawCmd: 'drawLines' | 'drawMesh'; + + // Whether the Geometry is transparent. + // Transparents need to be rendered before non-transparents + transparent: boolean; + + // Eventually determines whether to use vColorShaders + // (Geometry must also have colour) or meshShaders + useVertexColors: boolean; + }; + + // The original Geometry used to make the GeometryEntity + geometry: Geometry; +}; + +// @jscad\regl-renderer\src\rendering\commands\drawAxis\index.js +// @jscad\regl-renderer\demo-web.js +export type AxisEntityType = Entity & { + visuals: { + drawCmd: 'drawAxis'; + }; + + xColor?: RGBA; + yColor?: RGBA; + zColor?: RGBA; + size?: number; + alwaysVisible?: boolean; + + // Deprecated + lineWidth?: number; +}; + +// @jscad\regl-renderer\src\rendering\commands\drawGrid\index.js +// @jscad\regl-renderer\demo-web.js +export type GridEntity = Entity & { + visuals: { + drawCmd: 'drawGrid'; + + color?: RGBA; + fadeOut?: boolean; + }; + size?: Numbers2; + ticks?: number; + centered?: boolean; + + // Deprecated + lineWidth?: number; +}; + +// @jscad\regl-renderer\src\rendering\commands\drawGrid\multi.js +// @jscad\regl-renderer\demo-web.js +// @jscad\web\src\ui\views\viewer.js +// @jscad\regl-renderer\src\index.js +export type MultiGridEntityType = Omit & { + // Entity#visuals gets stuffed into the nested DrawCommand as Props. + // The Props get passed on wholesale by makeDrawMultiGrid()'s returned lambda, + // where the following properties then get used + // (rather than while setting up the DrawCommands) + visuals: { + subColor?: RGBA; // As color + }; + + // First number used on the main grid, second number on sub grid + ticks?: [number, number]; +}; + +// @jscad\regl-renderer\src\rendering\commands\drawLines\index.js +export type LinesEntity = Entity & { + visuals: { + drawCmd: 'drawLines'; + }; + + color?: RGBA; +}; + +// @jscad\regl-renderer\src\rendering\commands\drawMesh\index.js +export type MeshEntity = Entity & { + visuals: { + drawCmd: 'drawMesh'; + }; + + dynamicCulling?: boolean; + color?: RGBA; +}; + +export namespace PrepareRender { + // @jscad\regl-renderer\src\rendering\render.js + export type Function = (options: AllOptions) => WrappedRenderer.Function; + + // @jscad\regl-renderer\src\rendering\render.js + export type AllOptions = { + // Used to initialise Regl from the REGL package constructor + glOptions: InitializationOptions; + }; +} + +// When called, the WrappedRenderer creates a main DrawCommand. +// This main DrawCommand then gets called as a scoped command, +// used to create & call more DrawCommands for the #entities. +// Nested DrawCommands get cached +// & may store some Entity properties during setup, +// but properties passed in from Props later may take precedence. +// The main DrawCommand is said to be in charge of injecting most uniforms into +// the Regl context, ie keeping track of all Regl global state +export namespace WrappedRenderer { + // @jscad\regl-renderer\src\rendering\render.js + export type Function = (data: AllData) => void; + + // @jscad\regl-renderer\src\rendering\render.js + // Gets used in the WrappedRenderer. + // Also gets passed as Props into the main DrawCommand, + // where it is used in setup specified by the internal + // renderContext.js/renderWrapper. + // The lambda of the main DrawCommand does not use those Props, rather, + // it references the data in the WrappedRenderer directly. + // Therefore, regl.prop() is not called, + // nor are Props used via the semantic equivalent (context, props) => {}. + // The context passed to that lambda also remains unused + export type AllData = { + rendering?: RenderOptions; + + entities: Entity[]; + + drawCommands: PrepareDrawCommands; + + // Along with all of the relevant Entity's & Entity#visuals's properties, + // this gets stuffed into each nested DrawCommand as Props. + // Messy & needs tidying in regl-renderer + camera: CameraState; + }; + + // @jscad\regl-renderer\src\rendering\renderDefaults.js + export type RenderOptions = { + // Custom value used early on in render.js. + // Clears the canvas to this background colour + background?: RGBA; + + // Default value used directly in V2's entitiesFromSolids.js as the default Geometry colour. + // Default value also used directly in various rendering commands as their shader uniforms' default colour. + // Custom value appears unused + meshColor?: RGBA; + + // Custom value used in various rendering commands as shader uniforms + lightColor?: RGBA; + lightDirection?: VectorXYZ; + ambientLightAmount?: number; + diffuseLightAmount?: number; + specularLightAmount?: number; + materialShininess?: number; // As uMaterialShininess in main DrawCommand + + // Unused + lightPosition?: CoordinatesXYZ; // See also lightDirection + }; + + // There are 4 rendering commands to use in regl-renderer: + // drawAxis, drawGrid, drawLines & drawMesh. + // drawExps appears abandoned. + // Only once passed Regl & an Entity do they return an actual DrawCommand + export type PrepareDrawCommands = Record; + export type PrepareDrawCommandFunction = + | typeof drawCommands + | typeof makeDrawMultiGrid; +} + +// @jscad\regl-renderer\src\geometry-utils-V2\entitiesFromSolids.js +// Converts Solids into Geometries and then into Entities +export namespace EntitiesFromSolids { + export type Function = ( + options?: Options, + ...solids: Solid[] + ) => GeometryEntity[]; + + export type Options = { + // Default colour for entity rendering if the solid does not have one + color?: RGBA; + + // Whether to smooth the normals of 3D solids, rendering a smooth surface + smoothNormals?: boolean; + }; +} diff --git a/src/bundles/csg/utilities.ts b/src/bundles/csg/utilities.ts index 8bd52471a..36eed049e 100644 --- a/src/bundles/csg/utilities.ts +++ b/src/bundles/csg/utilities.ts @@ -1,132 +1,132 @@ -/* [Imports] */ -import { clone, type Geom3 } from '@jscad/modeling/src/geometries/geom3'; -import type { ModuleContext } from 'js-slang'; -import type { ModuleContexts, ReplResult } from '../../typings/type_helpers.js'; -import type { AlphaColor, Color, Solid } from './jscad/types.js'; - -/* [Exports] */ -export class Shape implements ReplResult { - constructor(public solid: Solid) {} - - toReplString(): string { - return ''; - } - - clone(): Shape { - return new Shape(clone(this.solid as Geom3)); - } -} - -export class RenderGroup implements ReplResult { - constructor(public canvasNumber: number) {} - - render: boolean = false; - hasGrid: boolean = true; - hasAxis: boolean = true; - - shapes: Shape[] = []; - - toReplString(): string { - return ``; - } -} - -export class RenderGroupManager { - private canvasTracker: number = 1; - private renderGroups: RenderGroup[] = []; - - constructor() { - this.addRenderGroup(); - } - - private addRenderGroup() { - // Passes in canvasTracker as is, then increments it - this.renderGroups.push(new RenderGroup(this.canvasTracker++)); - } - - private getCurrentRenderGroup(): RenderGroup { - return this.renderGroups.at(-1) as RenderGroup; - } - - // Returns the old render group - nextRenderGroup( - oldHasGrid: boolean = false, - oldHasAxis: boolean = false, - ): RenderGroup { - let oldRenderGroup: RenderGroup = this.getCurrentRenderGroup(); - oldRenderGroup.render = true; - oldRenderGroup.hasGrid = oldHasGrid; - oldRenderGroup.hasAxis = oldHasAxis; - - this.addRenderGroup(); - - return oldRenderGroup; - } - - storeShape(shape: Shape) { - this.getCurrentRenderGroup().shapes.push(shape); - } - - shouldRender(): boolean { - return this.getGroupsToRender().length > 0; - } - - getGroupsToRender(): RenderGroup[] { - return this.renderGroups.filter( - (renderGroup: RenderGroup) => renderGroup.render, - ); - } -} - -export class CsgModuleState { - private componentCounter: number = 0; - - public readonly renderGroupManager: RenderGroupManager; - - public constructor() { - this.renderGroupManager = new RenderGroupManager(); - } - - // Returns the new component number - public nextComponent(): number { - return ++this.componentCounter; - } -} - -export function getModuleContext( - moduleContexts: ModuleContexts, -): ModuleContext | null { - let potentialModuleContext: ModuleContext | undefined = moduleContexts.csg; - return potentialModuleContext ?? null; -} - -export function hexToColor(hex: string): Color { - let regex: RegExp = /^#?(?[\da-f]{2})(?[\da-f]{2})(?[\da-f]{2})$/iu; - let potentialGroups: { [key: string]: string } | undefined = hex.match(regex) - ?.groups; - if (potentialGroups === undefined) return [0, 0, 0]; - let groups: { [key: string]: string } = potentialGroups; - - return [ - parseInt(groups.red, 16) / 0xff, - parseInt(groups.green, 16) / 0xff, - parseInt(groups.blue, 16) / 0xff, - ]; -} - -export function colorToAlphaColor( - color: Color, - opacity: number = 1, -): AlphaColor { - return [...color, opacity]; -} - -export function hexToAlphaColor(hex: string): AlphaColor { - return colorToAlphaColor(hexToColor(hex)); -} - -export function clamp(value: number, lowest: number, highest: number): number { - value = Math.max(value, lowest); - value = Math.min(value, highest); - return value; -} +/* [Imports] */ +import { clone, type Geom3 } from '@jscad/modeling/src/geometries/geom3'; +import type { ModuleContext } from 'js-slang'; +import type { ModuleContexts, ReplResult } from '../../typings/type_helpers.js'; +import type { AlphaColor, Color, Solid } from './jscad/types.js'; + +/* [Exports] */ +export class Shape implements ReplResult { + constructor(public solid: Solid) {} + + toReplString(): string { + return ''; + } + + clone(): Shape { + return new Shape(clone(this.solid as Geom3)); + } +} + +export class RenderGroup implements ReplResult { + constructor(public canvasNumber: number) {} + + render: boolean = false; + hasGrid: boolean = true; + hasAxis: boolean = true; + + shapes: Shape[] = []; + + toReplString(): string { + return ``; + } +} + +export class RenderGroupManager { + private canvasTracker: number = 1; + private renderGroups: RenderGroup[] = []; + + constructor() { + this.addRenderGroup(); + } + + private addRenderGroup() { + // Passes in canvasTracker as is, then increments it + this.renderGroups.push(new RenderGroup(this.canvasTracker++)); + } + + private getCurrentRenderGroup(): RenderGroup { + return this.renderGroups.at(-1) as RenderGroup; + } + + // Returns the old render group + nextRenderGroup( + oldHasGrid: boolean = false, + oldHasAxis: boolean = false, + ): RenderGroup { + let oldRenderGroup: RenderGroup = this.getCurrentRenderGroup(); + oldRenderGroup.render = true; + oldRenderGroup.hasGrid = oldHasGrid; + oldRenderGroup.hasAxis = oldHasAxis; + + this.addRenderGroup(); + + return oldRenderGroup; + } + + storeShape(shape: Shape) { + this.getCurrentRenderGroup().shapes.push(shape); + } + + shouldRender(): boolean { + return this.getGroupsToRender().length > 0; + } + + getGroupsToRender(): RenderGroup[] { + return this.renderGroups.filter( + (renderGroup: RenderGroup) => renderGroup.render, + ); + } +} + +export class CsgModuleState { + private componentCounter: number = 0; + + public readonly renderGroupManager: RenderGroupManager; + + public constructor() { + this.renderGroupManager = new RenderGroupManager(); + } + + // Returns the new component number + public nextComponent(): number { + return ++this.componentCounter; + } +} + +export function getModuleContext( + moduleContexts: ModuleContexts, +): ModuleContext | null { + let potentialModuleContext: ModuleContext | undefined = moduleContexts.csg; + return potentialModuleContext ?? null; +} + +export function hexToColor(hex: string): Color { + let regex: RegExp = /^#?(?[\da-f]{2})(?[\da-f]{2})(?[\da-f]{2})$/iu; + let potentialGroups: { [key: string]: string } | undefined = hex.match(regex) + ?.groups; + if (potentialGroups === undefined) return [0, 0, 0]; + let groups: { [key: string]: string } = potentialGroups; + + return [ + parseInt(groups.red, 16) / 0xff, + parseInt(groups.green, 16) / 0xff, + parseInt(groups.blue, 16) / 0xff, + ]; +} + +export function colorToAlphaColor( + color: Color, + opacity: number = 1, +): AlphaColor { + return [...color, opacity]; +} + +export function hexToAlphaColor(hex: string): AlphaColor { + return colorToAlphaColor(hexToColor(hex)); +} + +export function clamp(value: number, lowest: number, highest: number): number { + value = Math.max(value, lowest); + value = Math.min(value, highest); + return value; +} diff --git a/src/bundles/curve/curves_webgl.ts b/src/bundles/curve/curves_webgl.ts index d72f7e441..30272b03c 100644 --- a/src/bundles/curve/curves_webgl.ts +++ b/src/bundles/curve/curves_webgl.ts @@ -1,458 +1,458 @@ -import { mat4, vec3 } from 'gl-matrix'; -import type { ReplResult } from '../../typings/type_helpers'; -import type { CurveSpace, DrawMode, ScaleMode } from './types'; - -/** @hidden */ -export const drawnCurves: CurveDrawn[] = []; - -// Vertex shader program -const vsS: string = ` -attribute vec4 aFragColor; -attribute vec4 aVertexPosition; -uniform mat4 uModelViewMatrix; -uniform mat4 uProjectionMatrix; - -varying lowp vec4 aColor; - -void main() { - gl_PointSize = 2.0; - aColor = aFragColor; - gl_Position = uProjectionMatrix * uModelViewMatrix * aVertexPosition; -}`; - -// Fragment shader program -const fsS: string = ` -varying lowp vec4 aColor; -precision mediump float; -void main() { - gl_FragColor = aColor; -}`; - -// ============================================================================= -// Module's Private Functions -// -// This file contains all the private functions used by the Curves module for -// rendering curves. For documentation/tutorials on WebGL API, see -// https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API. -// ============================================================================= - -/** - * Gets shader based on given shader program code. - * - * @param gl - WebGL's rendering context - * @param type - constant describing the type of shader to load - * @param source - source code of the shader - * @returns WebGLShader used to initialize shader program - */ -function loadShader( - gl: WebGLRenderingContext, - type: number, - source: string, -): WebGLShader { - const shader = gl.createShader(type); - if (!shader) { - throw new Error('WebGLShader not available.'); - } - gl.shaderSource(shader, source); - gl.compileShader(shader); - return shader; -} - -/** - * Initializes the shader program used by WebGL. - * - * @param gl - WebGL's rendering context - * @param vsSource - vertex shader program code - * @param fsSource - fragment shader program code - * @returns WebGLProgram used for getting AttribLocation and UniformLocation - */ -function initShaderProgram( - gl: WebGLRenderingContext, - vsSource: string, - fsSource: string, -): WebGLProgram { - const vertexShader = loadShader(gl, gl.VERTEX_SHADER, vsSource); - const fragmentShader = loadShader(gl, gl.FRAGMENT_SHADER, fsSource); - const shaderProgram = gl.createProgram(); - if (!shaderProgram) { - throw new Error('Unable to initialize the shader program.'); - } - gl.attachShader(shaderProgram, vertexShader); - gl.attachShader(shaderProgram, fragmentShader); - gl.linkProgram(shaderProgram); - return shaderProgram; -} - -/** - * The return type of the curve generated by the source code in workspace. - * WebGLCanvas in Curves tab captures the return value and calls its init function. - */ -type ProgramInfo = { - program: WebGLProgram; - attribLocations: { - vertexPosition: number; - vertexColor: number; - }; - uniformLocations: { - projectionMatrix: WebGLUniformLocation | null; - modelViewMatrix: WebGLUniformLocation | null; - }; -}; - -type BufferInfo = { - cubeBuffer: WebGLBuffer | null; - curveBuffer: WebGLBuffer | null; - curveColorBuffer: WebGLBuffer | null; -}; - -/** A function that takes in number from 0 to 1 and returns a Point. */ -export type Curve = ((u: number) => Point) & { - shouldNotAppend?: boolean; -}; - -type Color = [r: number, g: number, b: number, t: number]; - -/** Encapsulates 3D point with RGB values. */ -export class Point implements ReplResult { - constructor( - public readonly x: number, - public readonly y: number, - public readonly z: number, - public readonly color: Color, - ) {} - - public toReplString = () => `(${this.x}, ${this.y}, ${this.z}, Color: ${this.color})`; -} - -/** - * Represents a Curve that has been generated from the `generateCurve` - * function. - */ -export class CurveDrawn implements ReplResult { - private renderingContext: WebGLRenderingContext | null; - - private programs: ProgramInfo | null; - - private buffersInfo: BufferInfo | null; - - constructor( - private readonly drawMode: DrawMode, - private readonly numPoints: number, - private readonly space: CurveSpace, - private readonly drawCubeArray: number[], - private readonly curvePosArray: number[], - private readonly curveColorArray: number[], - ) { - this.renderingContext = null; - this.programs = null; - this.buffersInfo = null; - } - - public toReplString = () => ''; - - public is3D = () => this.space === '3D'; - - public init = (canvas: HTMLCanvasElement) => { - this.renderingContext = canvas.getContext('webgl'); - if (!this.renderingContext) { - throw new Error('Rendering context cannot be null.'); - } - const cubeBuffer = this.renderingContext.createBuffer(); - this.renderingContext.bindBuffer( - this.renderingContext.ARRAY_BUFFER, - cubeBuffer, - ); - this.renderingContext.bufferData( - this.renderingContext.ARRAY_BUFFER, - new Float32Array(this.drawCubeArray), - this.renderingContext.STATIC_DRAW, - ); - - const curveBuffer = this.renderingContext.createBuffer(); - this.renderingContext.bindBuffer( - this.renderingContext.ARRAY_BUFFER, - curveBuffer, - ); - this.renderingContext.bufferData( - this.renderingContext.ARRAY_BUFFER, - new Float32Array(this.curvePosArray), - this.renderingContext.STATIC_DRAW, - ); - - const curveColorBuffer = this.renderingContext.createBuffer(); - this.renderingContext.bindBuffer( - this.renderingContext.ARRAY_BUFFER, - curveColorBuffer, - ); - this.renderingContext.bufferData( - this.renderingContext.ARRAY_BUFFER, - new Float32Array(this.curveColorArray), - this.renderingContext.STATIC_DRAW, - ); - - const shaderProgram = initShaderProgram(this.renderingContext, vsS, fsS); - this.programs = { - program: shaderProgram, - attribLocations: { - vertexPosition: this.renderingContext.getAttribLocation( - shaderProgram, - 'aVertexPosition', - ), - vertexColor: this.renderingContext.getAttribLocation( - shaderProgram, - 'aFragColor', - ), - }, - uniformLocations: { - projectionMatrix: this.renderingContext.getUniformLocation( - shaderProgram, - 'uProjectionMatrix', - ), - modelViewMatrix: this.renderingContext.getUniformLocation( - shaderProgram, - 'uModelViewMatrix', - ), - }, - }; - this.buffersInfo = { - cubeBuffer, - curveBuffer, - curveColorBuffer, - }; - }; - - public redraw = (angle: number) => { - if (!this.renderingContext) { - return; - } - - const gl = this.renderingContext; - const itemSize = this.space === '3D' ? 3 : 2; - gl.clearColor(1, 1, 1, 1); // Clear to white, fully opaque - gl.clearDepth(1.0); // Clear everything - gl.enable(gl.DEPTH_TEST); // Enable depth testing - gl.depthFunc(gl.LEQUAL); // Near things obscure far things - // eslint-disable-next-line no-bitwise - gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); - - const transMat = mat4.create(); - const projMat = mat4.create(); - - if (this.space === '3D') { - const padding = Math.sqrt(1 / 3.1); - mat4.scale( - transMat, - transMat, - vec3.fromValues(padding, padding, padding), - ); - mat4.translate(transMat, transMat, [0, 0, -5]); - mat4.rotate(transMat, transMat, -(Math.PI / 2), [1, 0, 0]); // axis to rotate around X (static) - mat4.rotate(transMat, transMat, angle, [0, 0, 1]); // axis to rotate around Z (dynamic) - - const fieldOfView = (45 * Math.PI) / 180; - const aspect = gl.canvas.width / gl.canvas.height; - const zNear = 0.01; // Must not be zero, depth testing loses precision proportional to log(zFar / zNear) - const zFar = 50.0; - mat4.perspective(projMat, fieldOfView, aspect, zNear, zFar); - } - - gl.useProgram(this.programs!.program); - gl.uniformMatrix4fv( - this.programs!.uniformLocations.projectionMatrix, - false, - projMat, - ); - gl.uniformMatrix4fv( - this.programs!.uniformLocations.modelViewMatrix, - false, - transMat, - ); - gl.enableVertexAttribArray(this.programs!.attribLocations.vertexPosition); - gl.enableVertexAttribArray(this.programs!.attribLocations.vertexColor); - - if (this.space === '3D') { - // Draw Cube - gl.bindBuffer(gl.ARRAY_BUFFER, this.buffersInfo!.cubeBuffer); - gl.vertexAttribPointer( - this.programs!.attribLocations.vertexPosition, - 3, - gl.FLOAT, - false, - 0, - 0, - ); - const colors: number[] = []; - for (let i = 0; i < 16; i += 1) { - colors.push(0.6, 0.6, 0.6, 1); - } - const colorBuffer = gl.createBuffer(); - gl.bindBuffer(gl.ARRAY_BUFFER, colorBuffer); - gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(colors), gl.STATIC_DRAW); - gl.vertexAttribPointer(0, 4, gl.FLOAT, false, 0, 0); - gl.drawArrays(gl.LINE_STRIP, 0, 16); - } - // Draw Curve - gl.bindBuffer(gl.ARRAY_BUFFER, this.buffersInfo!.curveBuffer); - gl.vertexAttribPointer( - this.programs!.attribLocations.vertexPosition, - itemSize, - gl.FLOAT, - false, - 0, - 0, - ); - gl.bindBuffer(gl.ARRAY_BUFFER, this.buffersInfo!.curveColorBuffer); - gl.vertexAttribPointer(0, 4, gl.FLOAT, false, 0, 0); - if (this.drawMode === 'lines') { - gl.drawArrays(gl.LINE_STRIP, 0, this.numPoints + 1); - } else { - gl.drawArrays(gl.POINTS, 0, this.numPoints + 1); - } - }; -} - -// eslint-disable-next-line complexity -export function generateCurve( - scaleMode: ScaleMode, - drawMode: DrawMode, - numPoints: number, - func: Curve, - space: CurveSpace, - isFullView: boolean, -) { - const curvePosArray: number[] = []; - const curveColorArray: number[] = []; - const drawCubeArray: number[] = []; - - // initialize the min/max to extreme values - let min_x = Infinity; - let max_x = -Infinity; - let min_y = Infinity; - let max_y = -Infinity; - let min_z = Infinity; - let max_z = -Infinity; - - for (let i = 0; i <= numPoints; i += 1) { - const point = func(i / numPoints); - const x = point.x * 2 - 1; - const y = point.y * 2 - 1; - const z = point.z * 2 - 1; - if (space === '2D') { - curvePosArray.push(x, y); - } else { - curvePosArray.push(x, y, z); - } - const color_r = point.color[0]; - const color_g = point.color[1]; - const color_b = point.color[2]; - const color_a = point.color[3]; - curveColorArray.push(color_r, color_g, color_b, color_a); - min_x = Math.min(min_x, x); - max_x = Math.max(max_x, x); - min_y = Math.min(min_y, y); - max_y = Math.max(max_y, y); - min_z = Math.min(min_z, z); - max_z = Math.max(max_z, z); - } - - // padding for 2d draw_connected_full_view - if (isFullView) { - const horiz_padding = 0.05 * (max_x - min_x); - min_x -= horiz_padding; - max_x += horiz_padding; - const vert_padding = 0.05 * (max_y - min_y); - min_y -= vert_padding; - max_y += vert_padding; - const depth_padding = 0.05 * (max_z - min_z); - min_z -= depth_padding; - max_z += depth_padding; - } - - // box generation, coordinates are added into the array using 4 push - // operations to improve on readability during code editing. - if (space === '3D') { - drawCubeArray.push(-1, 1, 1, -1, -1, 1, -1, -1, -1, -1, 1, -1); - drawCubeArray.push(1, 1, -1, 1, -1, -1, -1, -1, -1, 1, -1, -1); - drawCubeArray.push(1, -1, 1, -1, -1, 1, 1, -1, 1, 1, 1, 1); - drawCubeArray.push(-1, 1, 1, -1, 1, -1, 1, 1, -1, 1, 1, 1); - } else { - min_z = 0; - max_z = 0; - } - - if (scaleMode === 'fit') { - const center = [ - (min_x + max_x) / 2, - (min_y + max_y) / 2, - (min_z + max_z) / 2, - ]; - let scale = Math.max(max_x - min_x, max_y - min_y, max_z - min_z); - scale = scale === 0 ? 1 : scale; - if (space === '3D') { - for (let i = 0; i < curvePosArray.length; i += 1) { - if (i % 3 === 0) { - curvePosArray[i] -= center[0]; - curvePosArray[i] /= scale / 2; - } else if (i % 3 === 1) { - curvePosArray[i] -= center[1]; - curvePosArray[i] /= scale / 2; - } else { - curvePosArray[i] -= center[2]; - curvePosArray[i] /= scale / 2; - } - } - } else { - for (let i = 0; i < curvePosArray.length; i += 1) { - if (i % 2 === 0) { - curvePosArray[i] -= center[0]; - curvePosArray[i] /= scale / 2; - } else { - curvePosArray[i] -= center[1]; - curvePosArray[i] /= scale / 2; - } - } - } - } else if (scaleMode === 'stretch') { - const center = [ - (min_x + max_x) / 2, - (min_y + max_y) / 2, - (min_z + max_z) / 2, - ]; - const x_scale = max_x === min_x ? 1 : max_x - min_x; - const y_scale = max_y === min_y ? 1 : max_y - min_y; - const z_scale = max_z === min_z ? 1 : max_z - min_z; - if (space === '3D') { - for (let i = 0; i < curvePosArray.length; i += 1) { - if (i % 3 === 0) { - curvePosArray[i] -= center[0]; - curvePosArray[i] /= x_scale / 2; - } else if (i % 3 === 1) { - curvePosArray[i] -= center[1]; - curvePosArray[i] /= y_scale / 2; - } else { - curvePosArray[i] -= center[2]; - curvePosArray[i] /= z_scale / 2; - } - } - } else { - for (let i = 0; i < curvePosArray.length; i += 1) { - if (i % 2 === 0) { - curvePosArray[i] -= center[0]; - curvePosArray[i] /= x_scale / 2; - } else { - curvePosArray[i] -= center[1]; - curvePosArray[i] /= y_scale / 2; - } - } - } - } - - return new CurveDrawn( - drawMode, - numPoints, - space, - drawCubeArray, - curvePosArray, - curveColorArray, - ); -} +import { mat4, vec3 } from 'gl-matrix'; +import type { ReplResult } from '../../typings/type_helpers'; +import type { CurveSpace, DrawMode, ScaleMode } from './types'; + +/** @hidden */ +export const drawnCurves: CurveDrawn[] = []; + +// Vertex shader program +const vsS: string = ` +attribute vec4 aFragColor; +attribute vec4 aVertexPosition; +uniform mat4 uModelViewMatrix; +uniform mat4 uProjectionMatrix; + +varying lowp vec4 aColor; + +void main() { + gl_PointSize = 2.0; + aColor = aFragColor; + gl_Position = uProjectionMatrix * uModelViewMatrix * aVertexPosition; +}`; + +// Fragment shader program +const fsS: string = ` +varying lowp vec4 aColor; +precision mediump float; +void main() { + gl_FragColor = aColor; +}`; + +// ============================================================================= +// Module's Private Functions +// +// This file contains all the private functions used by the Curves module for +// rendering curves. For documentation/tutorials on WebGL API, see +// https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API. +// ============================================================================= + +/** + * Gets shader based on given shader program code. + * + * @param gl - WebGL's rendering context + * @param type - constant describing the type of shader to load + * @param source - source code of the shader + * @returns WebGLShader used to initialize shader program + */ +function loadShader( + gl: WebGLRenderingContext, + type: number, + source: string, +): WebGLShader { + const shader = gl.createShader(type); + if (!shader) { + throw new Error('WebGLShader not available.'); + } + gl.shaderSource(shader, source); + gl.compileShader(shader); + return shader; +} + +/** + * Initializes the shader program used by WebGL. + * + * @param gl - WebGL's rendering context + * @param vsSource - vertex shader program code + * @param fsSource - fragment shader program code + * @returns WebGLProgram used for getting AttribLocation and UniformLocation + */ +function initShaderProgram( + gl: WebGLRenderingContext, + vsSource: string, + fsSource: string, +): WebGLProgram { + const vertexShader = loadShader(gl, gl.VERTEX_SHADER, vsSource); + const fragmentShader = loadShader(gl, gl.FRAGMENT_SHADER, fsSource); + const shaderProgram = gl.createProgram(); + if (!shaderProgram) { + throw new Error('Unable to initialize the shader program.'); + } + gl.attachShader(shaderProgram, vertexShader); + gl.attachShader(shaderProgram, fragmentShader); + gl.linkProgram(shaderProgram); + return shaderProgram; +} + +/** + * The return type of the curve generated by the source code in workspace. + * WebGLCanvas in Curves tab captures the return value and calls its init function. + */ +type ProgramInfo = { + program: WebGLProgram; + attribLocations: { + vertexPosition: number; + vertexColor: number; + }; + uniformLocations: { + projectionMatrix: WebGLUniformLocation | null; + modelViewMatrix: WebGLUniformLocation | null; + }; +}; + +type BufferInfo = { + cubeBuffer: WebGLBuffer | null; + curveBuffer: WebGLBuffer | null; + curveColorBuffer: WebGLBuffer | null; +}; + +/** A function that takes in number from 0 to 1 and returns a Point. */ +export type Curve = ((u: number) => Point) & { + shouldNotAppend?: boolean; +}; + +type Color = [r: number, g: number, b: number, t: number]; + +/** Encapsulates 3D point with RGB values. */ +export class Point implements ReplResult { + constructor( + public readonly x: number, + public readonly y: number, + public readonly z: number, + public readonly color: Color, + ) {} + + public toReplString = () => `(${this.x}, ${this.y}, ${this.z}, Color: ${this.color})`; +} + +/** + * Represents a Curve that has been generated from the `generateCurve` + * function. + */ +export class CurveDrawn implements ReplResult { + private renderingContext: WebGLRenderingContext | null; + + private programs: ProgramInfo | null; + + private buffersInfo: BufferInfo | null; + + constructor( + private readonly drawMode: DrawMode, + private readonly numPoints: number, + private readonly space: CurveSpace, + private readonly drawCubeArray: number[], + private readonly curvePosArray: number[], + private readonly curveColorArray: number[], + ) { + this.renderingContext = null; + this.programs = null; + this.buffersInfo = null; + } + + public toReplString = () => ''; + + public is3D = () => this.space === '3D'; + + public init = (canvas: HTMLCanvasElement) => { + this.renderingContext = canvas.getContext('webgl'); + if (!this.renderingContext) { + throw new Error('Rendering context cannot be null.'); + } + const cubeBuffer = this.renderingContext.createBuffer(); + this.renderingContext.bindBuffer( + this.renderingContext.ARRAY_BUFFER, + cubeBuffer, + ); + this.renderingContext.bufferData( + this.renderingContext.ARRAY_BUFFER, + new Float32Array(this.drawCubeArray), + this.renderingContext.STATIC_DRAW, + ); + + const curveBuffer = this.renderingContext.createBuffer(); + this.renderingContext.bindBuffer( + this.renderingContext.ARRAY_BUFFER, + curveBuffer, + ); + this.renderingContext.bufferData( + this.renderingContext.ARRAY_BUFFER, + new Float32Array(this.curvePosArray), + this.renderingContext.STATIC_DRAW, + ); + + const curveColorBuffer = this.renderingContext.createBuffer(); + this.renderingContext.bindBuffer( + this.renderingContext.ARRAY_BUFFER, + curveColorBuffer, + ); + this.renderingContext.bufferData( + this.renderingContext.ARRAY_BUFFER, + new Float32Array(this.curveColorArray), + this.renderingContext.STATIC_DRAW, + ); + + const shaderProgram = initShaderProgram(this.renderingContext, vsS, fsS); + this.programs = { + program: shaderProgram, + attribLocations: { + vertexPosition: this.renderingContext.getAttribLocation( + shaderProgram, + 'aVertexPosition', + ), + vertexColor: this.renderingContext.getAttribLocation( + shaderProgram, + 'aFragColor', + ), + }, + uniformLocations: { + projectionMatrix: this.renderingContext.getUniformLocation( + shaderProgram, + 'uProjectionMatrix', + ), + modelViewMatrix: this.renderingContext.getUniformLocation( + shaderProgram, + 'uModelViewMatrix', + ), + }, + }; + this.buffersInfo = { + cubeBuffer, + curveBuffer, + curveColorBuffer, + }; + }; + + public redraw = (angle: number) => { + if (!this.renderingContext) { + return; + } + + const gl = this.renderingContext; + const itemSize = this.space === '3D' ? 3 : 2; + gl.clearColor(1, 1, 1, 1); // Clear to white, fully opaque + gl.clearDepth(1.0); // Clear everything + gl.enable(gl.DEPTH_TEST); // Enable depth testing + gl.depthFunc(gl.LEQUAL); // Near things obscure far things + // eslint-disable-next-line no-bitwise + gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); + + const transMat = mat4.create(); + const projMat = mat4.create(); + + if (this.space === '3D') { + const padding = Math.sqrt(1 / 3.1); + mat4.scale( + transMat, + transMat, + vec3.fromValues(padding, padding, padding), + ); + mat4.translate(transMat, transMat, [0, 0, -5]); + mat4.rotate(transMat, transMat, -(Math.PI / 2), [1, 0, 0]); // axis to rotate around X (static) + mat4.rotate(transMat, transMat, angle, [0, 0, 1]); // axis to rotate around Z (dynamic) + + const fieldOfView = (45 * Math.PI) / 180; + const aspect = gl.canvas.width / gl.canvas.height; + const zNear = 0.01; // Must not be zero, depth testing loses precision proportional to log(zFar / zNear) + const zFar = 50.0; + mat4.perspective(projMat, fieldOfView, aspect, zNear, zFar); + } + + gl.useProgram(this.programs!.program); + gl.uniformMatrix4fv( + this.programs!.uniformLocations.projectionMatrix, + false, + projMat, + ); + gl.uniformMatrix4fv( + this.programs!.uniformLocations.modelViewMatrix, + false, + transMat, + ); + gl.enableVertexAttribArray(this.programs!.attribLocations.vertexPosition); + gl.enableVertexAttribArray(this.programs!.attribLocations.vertexColor); + + if (this.space === '3D') { + // Draw Cube + gl.bindBuffer(gl.ARRAY_BUFFER, this.buffersInfo!.cubeBuffer); + gl.vertexAttribPointer( + this.programs!.attribLocations.vertexPosition, + 3, + gl.FLOAT, + false, + 0, + 0, + ); + const colors: number[] = []; + for (let i = 0; i < 16; i += 1) { + colors.push(0.6, 0.6, 0.6, 1); + } + const colorBuffer = gl.createBuffer(); + gl.bindBuffer(gl.ARRAY_BUFFER, colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(colors), gl.STATIC_DRAW); + gl.vertexAttribPointer(0, 4, gl.FLOAT, false, 0, 0); + gl.drawArrays(gl.LINE_STRIP, 0, 16); + } + // Draw Curve + gl.bindBuffer(gl.ARRAY_BUFFER, this.buffersInfo!.curveBuffer); + gl.vertexAttribPointer( + this.programs!.attribLocations.vertexPosition, + itemSize, + gl.FLOAT, + false, + 0, + 0, + ); + gl.bindBuffer(gl.ARRAY_BUFFER, this.buffersInfo!.curveColorBuffer); + gl.vertexAttribPointer(0, 4, gl.FLOAT, false, 0, 0); + if (this.drawMode === 'lines') { + gl.drawArrays(gl.LINE_STRIP, 0, this.numPoints + 1); + } else { + gl.drawArrays(gl.POINTS, 0, this.numPoints + 1); + } + }; +} + +// eslint-disable-next-line complexity +export function generateCurve( + scaleMode: ScaleMode, + drawMode: DrawMode, + numPoints: number, + func: Curve, + space: CurveSpace, + isFullView: boolean, +) { + const curvePosArray: number[] = []; + const curveColorArray: number[] = []; + const drawCubeArray: number[] = []; + + // initialize the min/max to extreme values + let min_x = Infinity; + let max_x = -Infinity; + let min_y = Infinity; + let max_y = -Infinity; + let min_z = Infinity; + let max_z = -Infinity; + + for (let i = 0; i <= numPoints; i += 1) { + const point = func(i / numPoints); + const x = point.x * 2 - 1; + const y = point.y * 2 - 1; + const z = point.z * 2 - 1; + if (space === '2D') { + curvePosArray.push(x, y); + } else { + curvePosArray.push(x, y, z); + } + const color_r = point.color[0]; + const color_g = point.color[1]; + const color_b = point.color[2]; + const color_a = point.color[3]; + curveColorArray.push(color_r, color_g, color_b, color_a); + min_x = Math.min(min_x, x); + max_x = Math.max(max_x, x); + min_y = Math.min(min_y, y); + max_y = Math.max(max_y, y); + min_z = Math.min(min_z, z); + max_z = Math.max(max_z, z); + } + + // padding for 2d draw_connected_full_view + if (isFullView) { + const horiz_padding = 0.05 * (max_x - min_x); + min_x -= horiz_padding; + max_x += horiz_padding; + const vert_padding = 0.05 * (max_y - min_y); + min_y -= vert_padding; + max_y += vert_padding; + const depth_padding = 0.05 * (max_z - min_z); + min_z -= depth_padding; + max_z += depth_padding; + } + + // box generation, coordinates are added into the array using 4 push + // operations to improve on readability during code editing. + if (space === '3D') { + drawCubeArray.push(-1, 1, 1, -1, -1, 1, -1, -1, -1, -1, 1, -1); + drawCubeArray.push(1, 1, -1, 1, -1, -1, -1, -1, -1, 1, -1, -1); + drawCubeArray.push(1, -1, 1, -1, -1, 1, 1, -1, 1, 1, 1, 1); + drawCubeArray.push(-1, 1, 1, -1, 1, -1, 1, 1, -1, 1, 1, 1); + } else { + min_z = 0; + max_z = 0; + } + + if (scaleMode === 'fit') { + const center = [ + (min_x + max_x) / 2, + (min_y + max_y) / 2, + (min_z + max_z) / 2, + ]; + let scale = Math.max(max_x - min_x, max_y - min_y, max_z - min_z); + scale = scale === 0 ? 1 : scale; + if (space === '3D') { + for (let i = 0; i < curvePosArray.length; i += 1) { + if (i % 3 === 0) { + curvePosArray[i] -= center[0]; + curvePosArray[i] /= scale / 2; + } else if (i % 3 === 1) { + curvePosArray[i] -= center[1]; + curvePosArray[i] /= scale / 2; + } else { + curvePosArray[i] -= center[2]; + curvePosArray[i] /= scale / 2; + } + } + } else { + for (let i = 0; i < curvePosArray.length; i += 1) { + if (i % 2 === 0) { + curvePosArray[i] -= center[0]; + curvePosArray[i] /= scale / 2; + } else { + curvePosArray[i] -= center[1]; + curvePosArray[i] /= scale / 2; + } + } + } + } else if (scaleMode === 'stretch') { + const center = [ + (min_x + max_x) / 2, + (min_y + max_y) / 2, + (min_z + max_z) / 2, + ]; + const x_scale = max_x === min_x ? 1 : max_x - min_x; + const y_scale = max_y === min_y ? 1 : max_y - min_y; + const z_scale = max_z === min_z ? 1 : max_z - min_z; + if (space === '3D') { + for (let i = 0; i < curvePosArray.length; i += 1) { + if (i % 3 === 0) { + curvePosArray[i] -= center[0]; + curvePosArray[i] /= x_scale / 2; + } else if (i % 3 === 1) { + curvePosArray[i] -= center[1]; + curvePosArray[i] /= y_scale / 2; + } else { + curvePosArray[i] -= center[2]; + curvePosArray[i] /= z_scale / 2; + } + } + } else { + for (let i = 0; i < curvePosArray.length; i += 1) { + if (i % 2 === 0) { + curvePosArray[i] -= center[0]; + curvePosArray[i] /= x_scale / 2; + } else { + curvePosArray[i] -= center[1]; + curvePosArray[i] /= y_scale / 2; + } + } + } + } + + return new CurveDrawn( + drawMode, + numPoints, + space, + drawCubeArray, + curvePosArray, + curveColorArray, + ); +} diff --git a/src/bundles/curve/functions.ts b/src/bundles/curve/functions.ts index 774d39fb3..c8b05f71a 100644 --- a/src/bundles/curve/functions.ts +++ b/src/bundles/curve/functions.ts @@ -1,844 +1,844 @@ -/** - * drawing *curves*, i.e. collections of *points*, on a canvas in a tools tab - * - * A *point* is defined by its coordinates (x, y and z), and the color assigned to - * it (r, g, and b). A few constructors for points is given, for example - * `make_color_point`. Selectors allow access to the coordinates and color - * components, for example `x_of`. - * - * A *curve* is a - * unary function which takes a number argument within the unit interval `[0,1]` - * and returns a point. If `C` is a curve, then the starting point of the curve - * is always `C(0)`, and the ending point is always `C(1)`. - * - * A *curve transformation* is a function that takes a curve as argument and - * returns a curve. Examples of curve transformations are `scale` and `translate`. - * - * A *curve drawer* is function that takes a number argument and returns - * a function that takes a curve as argument and visualises it in the output screen is - * shown in the Source Academy in the tab with the "Curves Canvas" icon (image). - * The following [example](https://share.sourceacademy.org/unitcircle) uses - * the curve drawer `draw_connected_full_view` to display a curve called - * `unit_circle`. - * ``` - * import { make_point, draw_connected_full_view } from "curve"; - * function unit_circle(t) { - * return make_point(math_sin(2 * math_PI * t), - * math_cos(2 * math_PI * t)); - * } - * draw_connected_full_view(100)(unit_circle); - * ``` - * draws a full circle in the display tab. - * - * @module curve - * @author Lee Zheng Han - * @author Ng Yong Xiang - */ - -/* eslint-disable @typescript-eslint/naming-convention */ -import context from 'js-slang/context'; -import { type Curve, type CurveDrawn, generateCurve, Point } from './curves_webgl'; -import { - AnimatedCurve, - type CurveAnimation, - type CurveSpace, - type CurveTransformer, - type DrawMode, - type RenderFunction, - type ScaleMode, -} from './types'; - -const drawnCurves: (CurveDrawn | AnimatedCurve)[] = []; -context.moduleContexts.curve.state = { - drawnCurves, -}; - -function createDrawFunction( - scaleMode: ScaleMode, - drawMode: DrawMode, - space: CurveSpace, - isFullView: boolean, -): (numPoints: number) => RenderFunction { - return (numPoints: number) => { - const func = (curve: Curve) => { - const curveDrawn = generateCurve( - scaleMode, - drawMode, - numPoints, - curve, - space, - isFullView, - ); - - if (!curve.shouldNotAppend) { - drawnCurves.push(curveDrawn); - } - - return curveDrawn; - }; - // Because the draw functions are actually functions - // we need hacky workarounds like these to pass information around - func.is3D = space === '3D'; - return func; - }; -} - -// ============================================================================= -// Module's Exposed Functions -// -// This file only includes the implementation and documentation of exposed -// functions of the module. For private functions dealing with the browser's -// graphics library context, see './curves_webgl.ts'. -// ============================================================================= - -/** - * Returns a function that turns a given Curve into a Drawing, by sampling the - * Curve at `num` sample points and connecting each pair with a line. - * The parts between (0,0) and (1,1) of the resulting Drawing are shown in the window. - * - * @param num determines the number of points, lower than 65535, to be sampled. - * Including 0 and 1, there are `num + 1` evenly spaced sample points - * @return function of type Curve → Drawing - * @example - * ``` - * draw_connected(100)(t => make_point(t, t)); - * ``` - */ -export const draw_connected = createDrawFunction('none', 'lines', '2D', false); - -/** - * Returns a function that turns a given Curve into a Drawing, by sampling the - * Curve at `num` sample points and connecting each pair with a line. The Drawing is - * translated and stretched/shrunk to show the full curve and maximize its width - * and height, with some padding. - * - * @param num determines the number of points, lower than 65535, to be sampled. - * Including 0 and 1, there are `num + 1` evenly spaced sample points - * @return function of type Curve → Drawing - * @example - * ``` - * draw_connected_full_view(100)(t => make_point(t, t)); - * ``` - */ -export const draw_connected_full_view = createDrawFunction( - 'stretch', - 'lines', - '2D', - true, -); - -/** - * Returns a function that turns a given Curve into a Drawing, by sampling the - * Curve at `num` sample points and connecting each pair with a line. The Drawing - * is translated and scaled proportionally to show the full curve and maximize - * its size, with some padding. - * - * @param num determines the number of points, lower than 65535, to be sampled. - * Including 0 and 1, there are `num + 1` evenly spaced sample points - * @return function of type Curve → Drawing - * @example - * ``` - * draw_connected_full_view_proportional(100)(t => make_point(t, t)); - * ``` - */ -export const draw_connected_full_view_proportional = createDrawFunction( - 'fit', - 'lines', - '2D', - true, -); - -/** - * Returns a function that turns a given Curve into a Drawing, by sampling the - * Curve at `num` sample points. The Drawing consists of isolated - * points, and does not connect them. The parts between (0,0) and (1,1) of the - * resulting Drawing are shown in the window. - * - * @param num determines the number of points, lower than 65535, to be sampled. - * Including 0 and 1,there are `num + 1` evenly spaced sample points - * @return function of type Curve → Drawing - * @example - * ``` - * draw_points(100)(t => make_point(t, t)); - * ``` - */ -export const draw_points = createDrawFunction('none', 'points', '2D', false); - -/** - * Returns a function that turns a given Curve into a Drawing, by sampling the - * Curve at `num` sample points. The Drawing consists of isolated - * points, and does not connect them. The Drawing is translated and - * stretched/shrunk to show the full curve and maximize its width and height, - * with some padding. - * - * @param num determines the number of points, lower than 65535, to be sampled. - * Including 0 and 1, there are `num + 1` evenly spaced sample points - * @return function of type Curve → Drawing - * @example - * ``` - * draw_points_full_view(100)(t => make_point(t, t)); - * ``` - */ -export const draw_points_full_view = createDrawFunction( - 'stretch', - 'points', - '2D', - true, -); - -/** - * Returns a function that turns a given Curve into a Drawing, by sampling the - * Curve at `num` sample points. The Drawing consists of isolated - * points, and does not connect them. The Drawing is translated and scaled - * proportionally with its size maximized to fit entirely inside the window, - * with some padding. - * - * @param num determines the number of points, lower than 65535, to be sampled. - * Including 0 and 1, there are `num + 1` evenly spaced sample points - * @return function of type Curve → Drawing - * @example - * ``` - * draw_points_full_view_proportional(100)(t => make_point(t, t)); - * ``` - */ -export const draw_points_full_view_proportional = createDrawFunction( - 'fit', - 'points', - '2D', - true, -); - -/** - * Returns a function that turns a given 3D Curve into a Drawing, by sampling - * the 3D Curve at `num` sample points and connecting each pair with - * a line. The parts between (0,0,0) and (1,1,1) of the resulting Drawing are - * shown within the unit cube. - * - * @param num determines the number of points, lower than 65535, to be sampled. - * Including 0 and 1, there are `num + 1` evenly spaced sample points - * @return function of type Curve → Drawing - * @example - * ``` - * draw_3D_connected(100)(t => make_3D_point(t, t, t)); - * ``` - */ -export const draw_3D_connected = createDrawFunction( - 'none', - 'lines', - '3D', - false, -); - -/** - * Returns a function that turns a given 3D Curve into a Drawing, by sampling - * the 3D Curve at `num` sample points and connecting each pair with - * a line. The Drawing is translated and stretched/shrunk to show the full - * curve and maximize its width and height within the cube. - * - * @param num determines the number of points, lower than 65535, to be sampled. - * Including 0 and 1, there are `num + 1` evenly spaced sample points - * @return function of type Curve → Drawing - * @example - * ``` - * draw_3D_connected_full_view(100)(t => make_3D_point(t, t, t)); - * ``` - */ -export const draw_3D_connected_full_view = createDrawFunction( - 'stretch', - 'lines', - '3D', - false, -); - -/** - * Returns a function that turns a given 3D Curve into a Drawing, by sampling - * the 3D Curve at `num` sample points and connecting each pair with - * a line. The Drawing is translated and scaled proportionally with its size - * maximized to fit entirely inside the cube. - * - * @param num determines the number of points, lower than 65535, to be sampled. - * Including 0 and 1, there are `num + 1` evenly spaced sample points - * @return function of type Curve → Drawing - * @example - * ``` - * draw_3D_connected_full_view_proportional(100)(t => make_3D_point(t, t, t)); - * ``` - */ -export const draw_3D_connected_full_view_proportional = createDrawFunction( - 'fit', - 'lines', - '3D', - false, -); - -/** - * Returns a function that turns a given 3D Curve into a Drawing, by sampling - * the 3D Curve at `num` sample points. The Drawing consists of - * isolated points, and does not connect them. The parts between (0,0,0) - * and (1,1,1) of the resulting Drawing are shown within the unit cube. - * - * @param num determines the number of points, lower than 65535, to be sampled. - * Including 0 and 1, there are `num + 1` evenly spaced sample points - * @return function of type Curve → Drawing - * @example - * ``` - * draw_3D_points(100)(t => make_3D_point(t, t, t)); - * ``` - */ -export const draw_3D_points = createDrawFunction('none', 'points', '3D', false); - -/** - * Returns a function that turns a given 3D Curve into a Drawing, by sampling - * the 3D Curve at `num` sample points. The Drawing consists of - * isolated points, and does not connect them. The Drawing is translated and - * stretched/shrunk to maximize its size to fit entirely inside the cube. - * - * @param num determines the number of points, lower than 65535, to be sampled. - * Including 0 and 1, there are `num + 1` evenly spaced sample points - * @return function of type Curve → Drawing - * @example - * ``` - * draw_3D_points_full_view(100)(t => make_3D_point(t, t, t)); - * ``` - */ -export const draw_3D_points_full_view = createDrawFunction( - 'stretch', - 'points', - '3D', - false, -); - -/** - * Returns a function that turns a given 3D Curve into a Drawing, by sampling - * the 3D Curve at `num` sample points. The Drawing consists of - * isolated points, and does not connect them. The Drawing is translated and - * scaled proportionally with its size maximized to fit entirely inside the cube. - * - * @param num determines the number of points, lower than 65535, to be sampled. - * Including 0 and 1, there are `num + 1` evenly spaced sample points - * @return function of type Curve → Drawing - * @example - * ``` - * draw_3D_points_full_view_proportional(100)(t => make_3D_point(t, t, t)); - * ``` - */ -export const draw_3D_points_full_view_proportional = createDrawFunction( - 'fit', - 'points', - '3D', - false, -); - -/** - * Makes a Point with given x and y coordinates. - * - * @param x x-coordinate of new point - * @param y y-coordinate of new point - * @returns with x and y as coordinates - * @example - * ``` - * const point = make_point(0.5, 0.5); - * ``` - */ -export function make_point(x: number, y: number): Point { - return new Point(x, y, 0, [0, 0, 0, 1]); -} - -/** - * Makes a 3D Point with given x, y and z coordinates. - * - * @param x x-coordinate of new point - * @param y y-coordinate of new point - * @param z z-coordinate of new point - * @returns with x, y and z as coordinates - * @example - * ``` - * const point = make_3D_point(0.5, 0.5, 0.5); - * ``` - */ -export function make_3D_point(x: number, y: number, z: number): Point { - return new Point(x, y, z, [0, 0, 0, 1]); -} - -/** - * Makes a color Point with given x and y coordinates, and RGB values ranging - * from 0 to 255. Any input lower than 0 for RGB will be rounded up to 0, and - * any input higher than 255 will be rounded down to 255. - * - * @param x x-coordinate of new point - * @param y y-coordinate of new point - * @param r red component of new point - * @param g green component of new point - * @param b blue component of new point - * @returns with x and y as coordinates, and r, g and b as RGB values - * @example - * ``` - * const redPoint = make_color_point(0.5, 0.5, 255, 0, 0); - * ``` - */ -export function make_color_point( - x: number, - y: number, - r: number, - g: number, - b: number, -): Point { - return new Point(x, y, 0, [r / 255, g / 255, b / 255, 1]); -} - -/** - * Makes a 3D color Point with given x, y and z coordinates, and RGB values - * ranging from 0 to 255. Any input lower than 0 for RGB will be rounded up to - * 0, and any input higher than 255 will be rounded down to 255. - * - * @param x x-coordinate of new point - * @param y y-coordinate of new point - * @param z z-coordinate of new point - * @param r red component of new point - * @param g green component of new point - * @param b blue component of new point - * @returns with x, y and z as coordinates, and r, g and b as RGB values - * @example - * ``` - * const redPoint = make_color_point(0.5, 0.5, 0.5, 255, 0, 0); - * ``` - */ -export function make_3D_color_point( - x: number, - y: number, - z: number, - r: number, - g: number, - b: number, -): Point { - return new Point(x, y, z, [r / 255, g / 255, b / 255, 1]); -} - -/** - * Retrieves the x-coordinate of a given Point. - * - * @param p given point - * @returns x-coordinate of the Point - * @example - * ``` - * const point = make_color_point(1, 2, 3, 50, 100, 150); - * x_of(point); // Returns 1 - * ``` - */ -export function x_of(pt: Point): number { - return pt.x; -} - -/** - * Retrieves the y-coordinate of a given Point. - * - * @param p given point - * @returns y-coordinate of the Point - * @example - * ``` - * const point = make_color_point(1, 2, 3, 50, 100, 150); - * y_of(point); // Returns 2 - * ``` - */ -export function y_of(pt: Point): number { - return pt.y; -} - -/** - * Retrieves the z-coordinate of a given Point. - * - * @param p given point - * @returns z-coordinate of the Point - * @example - * ``` - * const point = make_color_point(1, 2, 3, 50, 100, 150); - * z_of(point); // Returns 3 - * ``` - */ -export function z_of(pt: Point): number { - return pt.z; -} - -/** - * Retrieves the red component of a given Point. - * - * @param p given point - * @returns Red component of the Point - * @example - * ``` - * const point = make_color_point(1, 2, 3, 50, 100, 150); - * r_of(point); // Returns 50 - * ``` - */ -export function r_of(pt: Point): number { - return pt.color[0] * 255; -} - -/** - * Retrieves the green component of a given Point. - * - * @param p given point - * @returns Green component of the Point - * @example - * ``` - * const point = make_color_point(1, 2, 3, 50, 100, 150); - * g_of(point); // Returns 100 - * ``` - */ -export function g_of(pt: Point): number { - return pt.color[1] * 255; -} - -/** - * Retrieves the blue component of a given Point. - * - * @param p given point - * @returns Blue component of the Point - * @example - * ``` - * const point = make_color_point(1, 2, 3, 50, 100, 150); - * b_of(point); // Returns 150 - * ``` - */ -export function b_of(pt: Point): number { - return pt.color[2] * 255; -} - -/** - * This function is a Curve transformation: a function from a Curve to a Curve. - * The points of the result Curve are the same points as the points of the - * original Curve, but in reverse: The result Curve applied to 0 is the original - * Curve applied to 1 and vice versa. - * - * @param original original Curve - * @returns result Curve - */ -export function invert(curve: Curve): Curve { - return (t: number) => curve(1 - t); -} - -/** - * This function returns a Curve transformation: It takes an x-value x0, a - * y-value y0 and a z-value z0, as arguments and - * returns a Curve transformation that takes a Curve as argument and returns a - * new Curve, by translating the original by x0 in x-direction, y0 in - * y-direction and z0 in z-direction. - * - * @param x0 x-value - * @param y0 y-value - * @param z0 z-value - * @returns Curve transformation - */ -export function translate( - x0: number, - y0: number, - z0: number, -): CurveTransformer { - return (curve: Curve) => { - const transformation = (cf: Curve) => (t: number) => { - const a = x0 === undefined ? 0 : x0; - const b = y0 === undefined ? 0 : y0; - const c = z0 === undefined ? 0 : z0; - const ct: Point = cf(t); - return make_3D_color_point( - a + x_of(ct), - b + y_of(ct), - c + z_of(ct), - r_of(ct), - g_of(ct), - b_of(ct), - ); - }; - return transformation(curve); - }; -} - -/** - * This function takes 3 angles, a, b and c in radians as parameter - * and returns a Curve transformation: a function that takes a Curve as argument - * and returns a new Curve, which is the original Curve rotated - * extrinsically with Euler angles (a, b, c) about x, y, - * and z axes. - * - * @param a given angle - * @param b given angle - * @param c given angle - * @returns function that takes a Curve and returns a Curve - */ -export function rotate_around_origin( - theta1: number, - theta2: number, - theta3: number, -): CurveTransformer { - if (theta3 === undefined && theta1 !== undefined && theta2 !== undefined) { - // 2 args - throw new Error('Expected 1 or 3 arguments, but received 2'); - } else if ( - theta1 !== undefined - && theta2 === undefined - && theta3 === undefined - ) { - // 1 args - const cth = Math.cos(theta1); - const sth = Math.sin(theta1); - return (curve: Curve) => { - const transformation = (c: Curve) => (t: number) => { - const ct = c(t); - const x = x_of(ct); - const y = y_of(ct); - const z = z_of(ct); - return make_3D_color_point( - cth * x - sth * y, - sth * x + cth * y, - z, - r_of(ct), - g_of(ct), - b_of(ct), - ); - }; - return transformation(curve); - }; - } else { - const cthx = Math.cos(theta1); - const sthx = Math.sin(theta1); - const cthy = Math.cos(theta2); - const sthy = Math.sin(theta2); - const cthz = Math.cos(theta3); - const sthz = Math.sin(theta3); - return (curve: Curve) => { - const transformation = (c: Curve) => (t: number) => { - const ct = c(t); - const coord = [x_of(ct), y_of(ct), z_of(ct)]; - const mat = [ - [ - cthz * cthy, - cthz * sthy * sthx - sthz * cthx, - cthz * sthy * cthx + sthz * sthx, - ], - [ - sthz * cthy, - sthz * sthy * sthx + cthz * cthx, - sthz * sthy * cthx - cthz * sthx, - ], - [-sthy, cthy * sthx, cthy * cthx], - ]; - let xf = 0; - let yf = 0; - let zf = 0; - for (let i = 0; i < 3; i += 1) { - xf += mat[0][i] * coord[i]; - yf += mat[1][i] * coord[i]; - zf += mat[2][i] * coord[i]; - } - return make_3D_color_point(xf, yf, zf, r_of(ct), g_of(ct), b_of(ct)); - }; - return transformation(curve); - }; - } -} - -/** - * This function takes scaling factors `a`, `b` and - * `c`, as arguments and returns a - * Curve transformation that scales a given Curve by `a` in - * x-direction, `b` in y-direction and `c` in z-direction. - * - * @param a scaling factor in x-direction - * @param b scaling factor in y-direction - * @param c scaling factor in z-direction - * @returns function that takes a Curve and returns a Curve - */ -export function scale(a: number, b: number, c: number): CurveTransformer { - return (curve) => { - const transformation = (cf: Curve) => (t: number) => { - const ct = cf(t); - const a1 = a === undefined ? 1 : a; - const b1 = b === undefined ? 1 : b; - const c1 = c === undefined ? 1 : c; - return make_3D_color_point( - a1 * x_of(ct), - b1 * y_of(ct), - c1 * z_of(ct), - r_of(ct), - g_of(ct), - b_of(ct), - ); - }; - return transformation(curve); - }; -} - -/** - * This function takes a scaling factor s argument and returns a Curve - * transformation that scales a given Curve by s in x, y and z direction. - * - * @param s scaling factor - * @returns function that takes a Curve and returns a Curve - */ -export function scale_proportional(s: number): CurveTransformer { - return scale(s, s, s); -} - -/** - * This function is a Curve transformation: It takes a Curve as argument and - * returns a new Curve, as follows. A Curve is in standard position if it - * starts at (0,0) ends at (1,0). This function puts the given Curve in - * standard position by rigidly translating it so its start Point is at the - * origin (0,0), then rotating it about the origin to put its endpoint on the - * x axis, then scaling it to put the endpoint at (1,0). Behavior is unspecified - * on closed Curves where start-point equal end-point. - * - * @param curve given Curve - * @returns result Curve - */ -export function put_in_standard_position(curve: Curve): Curve { - const start_point = curve(0); - const curve_started_at_origin = translate( - -x_of(start_point), - -y_of(start_point), - 0, - )(curve); - const new_end_point = curve_started_at_origin(1); - const theta = Math.atan2(y_of(new_end_point), x_of(new_end_point)); - const curve_ended_at_x_axis = rotate_around_origin( - 0, - 0, - -theta, - )(curve_started_at_origin); - const end_point_on_x_axis = x_of(curve_ended_at_x_axis(1)); - return scale_proportional(1 / end_point_on_x_axis)(curve_ended_at_x_axis); -} - -/** - * This function is a binary Curve operator: It takes two Curves as arguments - * and returns a new Curve. The two Curves are combined by using the full first - * Curve for the first portion of the result and by using the full second Curve - * for the second portion of the result. The second Curve is not changed, and - * therefore there might be a big jump in the middle of the result Curve. - * - * @param curve1 first Curve - * @param curve2 second Curve - * @returns result Curve - */ -export function connect_rigidly(curve1: Curve, curve2: Curve): Curve { - return (t) => (t < 1 / 2 ? curve1(2 * t) : curve2(2 * t - 1)); -} - -/** - * This function is a binary Curve operator: It takes two Curves as arguments - * and returns a new Curve. The two Curves are combined by using the full first - * Curve for the first portion of the result and by using the full second Curve - * for the second portion of the result. The second Curve is translated such - * that its point at fraction 0 is the same as the Point of the first Curve at - * fraction 1. - * - * @param curve1 first Curve - * @param curve2 second Curve - * @returns result Curve - */ -export function connect_ends(curve1: Curve, curve2: Curve): Curve { - const startPointOfCurve2 = curve2(0); - const endPointOfCurve1 = curve1(1); - return connect_rigidly( - curve1, - translate( - x_of(endPointOfCurve1) - x_of(startPointOfCurve2), - y_of(endPointOfCurve1) - y_of(startPointOfCurve2), - z_of(endPointOfCurve1) - z_of(startPointOfCurve2), - )(curve2), - ); -} - -/** - * This function is a curve: a function from a fraction t to a point. The points - * lie on the unit circle. They start at Point (1,0) when t is 0. When t is - * 0.25, they reach Point (0,1), when t is 0.5, they reach Point (-1, 0), etc. - * - * @param t fraction between 0 and 1 - * @returns Point on the circle at t - */ -export function unit_circle(t: number): Point { - return make_point(Math.cos(2 * Math.PI * t), Math.sin(2 * Math.PI * t)); -} - -/** - * This function is a curve: a function from a fraction t to a point. The - * x-coordinate at fraction t is t, and the y-coordinate is 0. - * - * @param t fraction between 0 and 1 - * @returns Point on the line at t - */ -export function unit_line(t: number): Point { - return make_point(t, 0); -} - -/** - * This function is a Curve generator: it takes a number and returns a - * horizontal curve. The number is a y-coordinate, and the Curve generates only - * points with the given y-coordinate. - * - * @param t fraction between 0 and 1 - * @returns horizontal Curve - */ -export function unit_line_at(t: number): Curve { - return (a: number): Point => make_point(a, t); -} - -/** - * This function is a curve: a function from a fraction t to a point. The points - * lie on the right half of the unit circle. They start at Point (0,1) when t is - * 0. When t is 0.5, they reach Point (1,0), when t is 1, they reach Point - * (0, -1). - * - * @param t fraction between 0 and 1 - * @returns Point in the arc at t - */ -export function arc(t: number): Point { - return make_point(Math.sin(Math.PI * t), Math.cos(Math.PI * t)); -} - -/** - * Create a animation of curves using a curve generating function. - * @param duration The duration of the animation in seconds - * @param fps Framerate of the animation in frames per second - * @param drawer Draw function to the generated curves with - * @param func Curve generating function. Takes in a timestamp value and returns a curve - * @return Curve Animation - */ -export function animate_curve( - duration: number, - fps: number, - drawer: RenderFunction, - func: CurveAnimation, -): AnimatedCurve { - if (drawer.is3D) { - throw new Error('animate_curve cannot be used with 3D draw function!'); - } - - const anim = new AnimatedCurve(duration, fps, func, drawer, false); - drawnCurves.push(anim); - return anim; -} - -/** - * Create a animation of curves using a curve generating function. - * @param duration The duration of the animation in seconds - * @param fps Framerate of the animation in frames per second - * @param drawer Draw function to the generated curves with - * @param func Curve generating function. Takes in a timestamp value and returns a curve - * @return 3D Curve Animation - */ -export function animate_3D_curve( - duration: number, - fps: number, - drawer: RenderFunction, - func: CurveAnimation, -): AnimatedCurve { - if (!drawer.is3D) { - throw new Error('animate_3D_curve cannot be used with 2D draw function!'); - } - - const anim = new AnimatedCurve(duration, fps, func, drawer, true); - drawnCurves.push(anim); - return anim; -} +/** + * drawing *curves*, i.e. collections of *points*, on a canvas in a tools tab + * + * A *point* is defined by its coordinates (x, y and z), and the color assigned to + * it (r, g, and b). A few constructors for points is given, for example + * `make_color_point`. Selectors allow access to the coordinates and color + * components, for example `x_of`. + * + * A *curve* is a + * unary function which takes a number argument within the unit interval `[0,1]` + * and returns a point. If `C` is a curve, then the starting point of the curve + * is always `C(0)`, and the ending point is always `C(1)`. + * + * A *curve transformation* is a function that takes a curve as argument and + * returns a curve. Examples of curve transformations are `scale` and `translate`. + * + * A *curve drawer* is function that takes a number argument and returns + * a function that takes a curve as argument and visualises it in the output screen is + * shown in the Source Academy in the tab with the "Curves Canvas" icon (image). + * The following [example](https://share.sourceacademy.org/unitcircle) uses + * the curve drawer `draw_connected_full_view` to display a curve called + * `unit_circle`. + * ``` + * import { make_point, draw_connected_full_view } from "curve"; + * function unit_circle(t) { + * return make_point(math_sin(2 * math_PI * t), + * math_cos(2 * math_PI * t)); + * } + * draw_connected_full_view(100)(unit_circle); + * ``` + * draws a full circle in the display tab. + * + * @module curve + * @author Lee Zheng Han + * @author Ng Yong Xiang + */ + +/* eslint-disable @typescript-eslint/naming-convention */ +import context from 'js-slang/context'; +import { type Curve, type CurveDrawn, generateCurve, Point } from './curves_webgl'; +import { + AnimatedCurve, + type CurveAnimation, + type CurveSpace, + type CurveTransformer, + type DrawMode, + type RenderFunction, + type ScaleMode, +} from './types'; + +const drawnCurves: (CurveDrawn | AnimatedCurve)[] = []; +context.moduleContexts.curve.state = { + drawnCurves, +}; + +function createDrawFunction( + scaleMode: ScaleMode, + drawMode: DrawMode, + space: CurveSpace, + isFullView: boolean, +): (numPoints: number) => RenderFunction { + return (numPoints: number) => { + const func = (curve: Curve) => { + const curveDrawn = generateCurve( + scaleMode, + drawMode, + numPoints, + curve, + space, + isFullView, + ); + + if (!curve.shouldNotAppend) { + drawnCurves.push(curveDrawn); + } + + return curveDrawn; + }; + // Because the draw functions are actually functions + // we need hacky workarounds like these to pass information around + func.is3D = space === '3D'; + return func; + }; +} + +// ============================================================================= +// Module's Exposed Functions +// +// This file only includes the implementation and documentation of exposed +// functions of the module. For private functions dealing with the browser's +// graphics library context, see './curves_webgl.ts'. +// ============================================================================= + +/** + * Returns a function that turns a given Curve into a Drawing, by sampling the + * Curve at `num` sample points and connecting each pair with a line. + * The parts between (0,0) and (1,1) of the resulting Drawing are shown in the window. + * + * @param num determines the number of points, lower than 65535, to be sampled. + * Including 0 and 1, there are `num + 1` evenly spaced sample points + * @return function of type Curve → Drawing + * @example + * ``` + * draw_connected(100)(t => make_point(t, t)); + * ``` + */ +export const draw_connected = createDrawFunction('none', 'lines', '2D', false); + +/** + * Returns a function that turns a given Curve into a Drawing, by sampling the + * Curve at `num` sample points and connecting each pair with a line. The Drawing is + * translated and stretched/shrunk to show the full curve and maximize its width + * and height, with some padding. + * + * @param num determines the number of points, lower than 65535, to be sampled. + * Including 0 and 1, there are `num + 1` evenly spaced sample points + * @return function of type Curve → Drawing + * @example + * ``` + * draw_connected_full_view(100)(t => make_point(t, t)); + * ``` + */ +export const draw_connected_full_view = createDrawFunction( + 'stretch', + 'lines', + '2D', + true, +); + +/** + * Returns a function that turns a given Curve into a Drawing, by sampling the + * Curve at `num` sample points and connecting each pair with a line. The Drawing + * is translated and scaled proportionally to show the full curve and maximize + * its size, with some padding. + * + * @param num determines the number of points, lower than 65535, to be sampled. + * Including 0 and 1, there are `num + 1` evenly spaced sample points + * @return function of type Curve → Drawing + * @example + * ``` + * draw_connected_full_view_proportional(100)(t => make_point(t, t)); + * ``` + */ +export const draw_connected_full_view_proportional = createDrawFunction( + 'fit', + 'lines', + '2D', + true, +); + +/** + * Returns a function that turns a given Curve into a Drawing, by sampling the + * Curve at `num` sample points. The Drawing consists of isolated + * points, and does not connect them. The parts between (0,0) and (1,1) of the + * resulting Drawing are shown in the window. + * + * @param num determines the number of points, lower than 65535, to be sampled. + * Including 0 and 1,there are `num + 1` evenly spaced sample points + * @return function of type Curve → Drawing + * @example + * ``` + * draw_points(100)(t => make_point(t, t)); + * ``` + */ +export const draw_points = createDrawFunction('none', 'points', '2D', false); + +/** + * Returns a function that turns a given Curve into a Drawing, by sampling the + * Curve at `num` sample points. The Drawing consists of isolated + * points, and does not connect them. The Drawing is translated and + * stretched/shrunk to show the full curve and maximize its width and height, + * with some padding. + * + * @param num determines the number of points, lower than 65535, to be sampled. + * Including 0 and 1, there are `num + 1` evenly spaced sample points + * @return function of type Curve → Drawing + * @example + * ``` + * draw_points_full_view(100)(t => make_point(t, t)); + * ``` + */ +export const draw_points_full_view = createDrawFunction( + 'stretch', + 'points', + '2D', + true, +); + +/** + * Returns a function that turns a given Curve into a Drawing, by sampling the + * Curve at `num` sample points. The Drawing consists of isolated + * points, and does not connect them. The Drawing is translated and scaled + * proportionally with its size maximized to fit entirely inside the window, + * with some padding. + * + * @param num determines the number of points, lower than 65535, to be sampled. + * Including 0 and 1, there are `num + 1` evenly spaced sample points + * @return function of type Curve → Drawing + * @example + * ``` + * draw_points_full_view_proportional(100)(t => make_point(t, t)); + * ``` + */ +export const draw_points_full_view_proportional = createDrawFunction( + 'fit', + 'points', + '2D', + true, +); + +/** + * Returns a function that turns a given 3D Curve into a Drawing, by sampling + * the 3D Curve at `num` sample points and connecting each pair with + * a line. The parts between (0,0,0) and (1,1,1) of the resulting Drawing are + * shown within the unit cube. + * + * @param num determines the number of points, lower than 65535, to be sampled. + * Including 0 and 1, there are `num + 1` evenly spaced sample points + * @return function of type Curve → Drawing + * @example + * ``` + * draw_3D_connected(100)(t => make_3D_point(t, t, t)); + * ``` + */ +export const draw_3D_connected = createDrawFunction( + 'none', + 'lines', + '3D', + false, +); + +/** + * Returns a function that turns a given 3D Curve into a Drawing, by sampling + * the 3D Curve at `num` sample points and connecting each pair with + * a line. The Drawing is translated and stretched/shrunk to show the full + * curve and maximize its width and height within the cube. + * + * @param num determines the number of points, lower than 65535, to be sampled. + * Including 0 and 1, there are `num + 1` evenly spaced sample points + * @return function of type Curve → Drawing + * @example + * ``` + * draw_3D_connected_full_view(100)(t => make_3D_point(t, t, t)); + * ``` + */ +export const draw_3D_connected_full_view = createDrawFunction( + 'stretch', + 'lines', + '3D', + false, +); + +/** + * Returns a function that turns a given 3D Curve into a Drawing, by sampling + * the 3D Curve at `num` sample points and connecting each pair with + * a line. The Drawing is translated and scaled proportionally with its size + * maximized to fit entirely inside the cube. + * + * @param num determines the number of points, lower than 65535, to be sampled. + * Including 0 and 1, there are `num + 1` evenly spaced sample points + * @return function of type Curve → Drawing + * @example + * ``` + * draw_3D_connected_full_view_proportional(100)(t => make_3D_point(t, t, t)); + * ``` + */ +export const draw_3D_connected_full_view_proportional = createDrawFunction( + 'fit', + 'lines', + '3D', + false, +); + +/** + * Returns a function that turns a given 3D Curve into a Drawing, by sampling + * the 3D Curve at `num` sample points. The Drawing consists of + * isolated points, and does not connect them. The parts between (0,0,0) + * and (1,1,1) of the resulting Drawing are shown within the unit cube. + * + * @param num determines the number of points, lower than 65535, to be sampled. + * Including 0 and 1, there are `num + 1` evenly spaced sample points + * @return function of type Curve → Drawing + * @example + * ``` + * draw_3D_points(100)(t => make_3D_point(t, t, t)); + * ``` + */ +export const draw_3D_points = createDrawFunction('none', 'points', '3D', false); + +/** + * Returns a function that turns a given 3D Curve into a Drawing, by sampling + * the 3D Curve at `num` sample points. The Drawing consists of + * isolated points, and does not connect them. The Drawing is translated and + * stretched/shrunk to maximize its size to fit entirely inside the cube. + * + * @param num determines the number of points, lower than 65535, to be sampled. + * Including 0 and 1, there are `num + 1` evenly spaced sample points + * @return function of type Curve → Drawing + * @example + * ``` + * draw_3D_points_full_view(100)(t => make_3D_point(t, t, t)); + * ``` + */ +export const draw_3D_points_full_view = createDrawFunction( + 'stretch', + 'points', + '3D', + false, +); + +/** + * Returns a function that turns a given 3D Curve into a Drawing, by sampling + * the 3D Curve at `num` sample points. The Drawing consists of + * isolated points, and does not connect them. The Drawing is translated and + * scaled proportionally with its size maximized to fit entirely inside the cube. + * + * @param num determines the number of points, lower than 65535, to be sampled. + * Including 0 and 1, there are `num + 1` evenly spaced sample points + * @return function of type Curve → Drawing + * @example + * ``` + * draw_3D_points_full_view_proportional(100)(t => make_3D_point(t, t, t)); + * ``` + */ +export const draw_3D_points_full_view_proportional = createDrawFunction( + 'fit', + 'points', + '3D', + false, +); + +/** + * Makes a Point with given x and y coordinates. + * + * @param x x-coordinate of new point + * @param y y-coordinate of new point + * @returns with x and y as coordinates + * @example + * ``` + * const point = make_point(0.5, 0.5); + * ``` + */ +export function make_point(x: number, y: number): Point { + return new Point(x, y, 0, [0, 0, 0, 1]); +} + +/** + * Makes a 3D Point with given x, y and z coordinates. + * + * @param x x-coordinate of new point + * @param y y-coordinate of new point + * @param z z-coordinate of new point + * @returns with x, y and z as coordinates + * @example + * ``` + * const point = make_3D_point(0.5, 0.5, 0.5); + * ``` + */ +export function make_3D_point(x: number, y: number, z: number): Point { + return new Point(x, y, z, [0, 0, 0, 1]); +} + +/** + * Makes a color Point with given x and y coordinates, and RGB values ranging + * from 0 to 255. Any input lower than 0 for RGB will be rounded up to 0, and + * any input higher than 255 will be rounded down to 255. + * + * @param x x-coordinate of new point + * @param y y-coordinate of new point + * @param r red component of new point + * @param g green component of new point + * @param b blue component of new point + * @returns with x and y as coordinates, and r, g and b as RGB values + * @example + * ``` + * const redPoint = make_color_point(0.5, 0.5, 255, 0, 0); + * ``` + */ +export function make_color_point( + x: number, + y: number, + r: number, + g: number, + b: number, +): Point { + return new Point(x, y, 0, [r / 255, g / 255, b / 255, 1]); +} + +/** + * Makes a 3D color Point with given x, y and z coordinates, and RGB values + * ranging from 0 to 255. Any input lower than 0 for RGB will be rounded up to + * 0, and any input higher than 255 will be rounded down to 255. + * + * @param x x-coordinate of new point + * @param y y-coordinate of new point + * @param z z-coordinate of new point + * @param r red component of new point + * @param g green component of new point + * @param b blue component of new point + * @returns with x, y and z as coordinates, and r, g and b as RGB values + * @example + * ``` + * const redPoint = make_color_point(0.5, 0.5, 0.5, 255, 0, 0); + * ``` + */ +export function make_3D_color_point( + x: number, + y: number, + z: number, + r: number, + g: number, + b: number, +): Point { + return new Point(x, y, z, [r / 255, g / 255, b / 255, 1]); +} + +/** + * Retrieves the x-coordinate of a given Point. + * + * @param p given point + * @returns x-coordinate of the Point + * @example + * ``` + * const point = make_color_point(1, 2, 3, 50, 100, 150); + * x_of(point); // Returns 1 + * ``` + */ +export function x_of(pt: Point): number { + return pt.x; +} + +/** + * Retrieves the y-coordinate of a given Point. + * + * @param p given point + * @returns y-coordinate of the Point + * @example + * ``` + * const point = make_color_point(1, 2, 3, 50, 100, 150); + * y_of(point); // Returns 2 + * ``` + */ +export function y_of(pt: Point): number { + return pt.y; +} + +/** + * Retrieves the z-coordinate of a given Point. + * + * @param p given point + * @returns z-coordinate of the Point + * @example + * ``` + * const point = make_color_point(1, 2, 3, 50, 100, 150); + * z_of(point); // Returns 3 + * ``` + */ +export function z_of(pt: Point): number { + return pt.z; +} + +/** + * Retrieves the red component of a given Point. + * + * @param p given point + * @returns Red component of the Point + * @example + * ``` + * const point = make_color_point(1, 2, 3, 50, 100, 150); + * r_of(point); // Returns 50 + * ``` + */ +export function r_of(pt: Point): number { + return pt.color[0] * 255; +} + +/** + * Retrieves the green component of a given Point. + * + * @param p given point + * @returns Green component of the Point + * @example + * ``` + * const point = make_color_point(1, 2, 3, 50, 100, 150); + * g_of(point); // Returns 100 + * ``` + */ +export function g_of(pt: Point): number { + return pt.color[1] * 255; +} + +/** + * Retrieves the blue component of a given Point. + * + * @param p given point + * @returns Blue component of the Point + * @example + * ``` + * const point = make_color_point(1, 2, 3, 50, 100, 150); + * b_of(point); // Returns 150 + * ``` + */ +export function b_of(pt: Point): number { + return pt.color[2] * 255; +} + +/** + * This function is a Curve transformation: a function from a Curve to a Curve. + * The points of the result Curve are the same points as the points of the + * original Curve, but in reverse: The result Curve applied to 0 is the original + * Curve applied to 1 and vice versa. + * + * @param original original Curve + * @returns result Curve + */ +export function invert(curve: Curve): Curve { + return (t: number) => curve(1 - t); +} + +/** + * This function returns a Curve transformation: It takes an x-value x0, a + * y-value y0 and a z-value z0, as arguments and + * returns a Curve transformation that takes a Curve as argument and returns a + * new Curve, by translating the original by x0 in x-direction, y0 in + * y-direction and z0 in z-direction. + * + * @param x0 x-value + * @param y0 y-value + * @param z0 z-value + * @returns Curve transformation + */ +export function translate( + x0: number, + y0: number, + z0: number, +): CurveTransformer { + return (curve: Curve) => { + const transformation = (cf: Curve) => (t: number) => { + const a = x0 === undefined ? 0 : x0; + const b = y0 === undefined ? 0 : y0; + const c = z0 === undefined ? 0 : z0; + const ct: Point = cf(t); + return make_3D_color_point( + a + x_of(ct), + b + y_of(ct), + c + z_of(ct), + r_of(ct), + g_of(ct), + b_of(ct), + ); + }; + return transformation(curve); + }; +} + +/** + * This function takes 3 angles, a, b and c in radians as parameter + * and returns a Curve transformation: a function that takes a Curve as argument + * and returns a new Curve, which is the original Curve rotated + * extrinsically with Euler angles (a, b, c) about x, y, + * and z axes. + * + * @param a given angle + * @param b given angle + * @param c given angle + * @returns function that takes a Curve and returns a Curve + */ +export function rotate_around_origin( + theta1: number, + theta2: number, + theta3: number, +): CurveTransformer { + if (theta3 === undefined && theta1 !== undefined && theta2 !== undefined) { + // 2 args + throw new Error('Expected 1 or 3 arguments, but received 2'); + } else if ( + theta1 !== undefined + && theta2 === undefined + && theta3 === undefined + ) { + // 1 args + const cth = Math.cos(theta1); + const sth = Math.sin(theta1); + return (curve: Curve) => { + const transformation = (c: Curve) => (t: number) => { + const ct = c(t); + const x = x_of(ct); + const y = y_of(ct); + const z = z_of(ct); + return make_3D_color_point( + cth * x - sth * y, + sth * x + cth * y, + z, + r_of(ct), + g_of(ct), + b_of(ct), + ); + }; + return transformation(curve); + }; + } else { + const cthx = Math.cos(theta1); + const sthx = Math.sin(theta1); + const cthy = Math.cos(theta2); + const sthy = Math.sin(theta2); + const cthz = Math.cos(theta3); + const sthz = Math.sin(theta3); + return (curve: Curve) => { + const transformation = (c: Curve) => (t: number) => { + const ct = c(t); + const coord = [x_of(ct), y_of(ct), z_of(ct)]; + const mat = [ + [ + cthz * cthy, + cthz * sthy * sthx - sthz * cthx, + cthz * sthy * cthx + sthz * sthx, + ], + [ + sthz * cthy, + sthz * sthy * sthx + cthz * cthx, + sthz * sthy * cthx - cthz * sthx, + ], + [-sthy, cthy * sthx, cthy * cthx], + ]; + let xf = 0; + let yf = 0; + let zf = 0; + for (let i = 0; i < 3; i += 1) { + xf += mat[0][i] * coord[i]; + yf += mat[1][i] * coord[i]; + zf += mat[2][i] * coord[i]; + } + return make_3D_color_point(xf, yf, zf, r_of(ct), g_of(ct), b_of(ct)); + }; + return transformation(curve); + }; + } +} + +/** + * This function takes scaling factors `a`, `b` and + * `c`, as arguments and returns a + * Curve transformation that scales a given Curve by `a` in + * x-direction, `b` in y-direction and `c` in z-direction. + * + * @param a scaling factor in x-direction + * @param b scaling factor in y-direction + * @param c scaling factor in z-direction + * @returns function that takes a Curve and returns a Curve + */ +export function scale(a: number, b: number, c: number): CurveTransformer { + return (curve) => { + const transformation = (cf: Curve) => (t: number) => { + const ct = cf(t); + const a1 = a === undefined ? 1 : a; + const b1 = b === undefined ? 1 : b; + const c1 = c === undefined ? 1 : c; + return make_3D_color_point( + a1 * x_of(ct), + b1 * y_of(ct), + c1 * z_of(ct), + r_of(ct), + g_of(ct), + b_of(ct), + ); + }; + return transformation(curve); + }; +} + +/** + * This function takes a scaling factor s argument and returns a Curve + * transformation that scales a given Curve by s in x, y and z direction. + * + * @param s scaling factor + * @returns function that takes a Curve and returns a Curve + */ +export function scale_proportional(s: number): CurveTransformer { + return scale(s, s, s); +} + +/** + * This function is a Curve transformation: It takes a Curve as argument and + * returns a new Curve, as follows. A Curve is in standard position if it + * starts at (0,0) ends at (1,0). This function puts the given Curve in + * standard position by rigidly translating it so its start Point is at the + * origin (0,0), then rotating it about the origin to put its endpoint on the + * x axis, then scaling it to put the endpoint at (1,0). Behavior is unspecified + * on closed Curves where start-point equal end-point. + * + * @param curve given Curve + * @returns result Curve + */ +export function put_in_standard_position(curve: Curve): Curve { + const start_point = curve(0); + const curve_started_at_origin = translate( + -x_of(start_point), + -y_of(start_point), + 0, + )(curve); + const new_end_point = curve_started_at_origin(1); + const theta = Math.atan2(y_of(new_end_point), x_of(new_end_point)); + const curve_ended_at_x_axis = rotate_around_origin( + 0, + 0, + -theta, + )(curve_started_at_origin); + const end_point_on_x_axis = x_of(curve_ended_at_x_axis(1)); + return scale_proportional(1 / end_point_on_x_axis)(curve_ended_at_x_axis); +} + +/** + * This function is a binary Curve operator: It takes two Curves as arguments + * and returns a new Curve. The two Curves are combined by using the full first + * Curve for the first portion of the result and by using the full second Curve + * for the second portion of the result. The second Curve is not changed, and + * therefore there might be a big jump in the middle of the result Curve. + * + * @param curve1 first Curve + * @param curve2 second Curve + * @returns result Curve + */ +export function connect_rigidly(curve1: Curve, curve2: Curve): Curve { + return (t) => (t < 1 / 2 ? curve1(2 * t) : curve2(2 * t - 1)); +} + +/** + * This function is a binary Curve operator: It takes two Curves as arguments + * and returns a new Curve. The two Curves are combined by using the full first + * Curve for the first portion of the result and by using the full second Curve + * for the second portion of the result. The second Curve is translated such + * that its point at fraction 0 is the same as the Point of the first Curve at + * fraction 1. + * + * @param curve1 first Curve + * @param curve2 second Curve + * @returns result Curve + */ +export function connect_ends(curve1: Curve, curve2: Curve): Curve { + const startPointOfCurve2 = curve2(0); + const endPointOfCurve1 = curve1(1); + return connect_rigidly( + curve1, + translate( + x_of(endPointOfCurve1) - x_of(startPointOfCurve2), + y_of(endPointOfCurve1) - y_of(startPointOfCurve2), + z_of(endPointOfCurve1) - z_of(startPointOfCurve2), + )(curve2), + ); +} + +/** + * This function is a curve: a function from a fraction t to a point. The points + * lie on the unit circle. They start at Point (1,0) when t is 0. When t is + * 0.25, they reach Point (0,1), when t is 0.5, they reach Point (-1, 0), etc. + * + * @param t fraction between 0 and 1 + * @returns Point on the circle at t + */ +export function unit_circle(t: number): Point { + return make_point(Math.cos(2 * Math.PI * t), Math.sin(2 * Math.PI * t)); +} + +/** + * This function is a curve: a function from a fraction t to a point. The + * x-coordinate at fraction t is t, and the y-coordinate is 0. + * + * @param t fraction between 0 and 1 + * @returns Point on the line at t + */ +export function unit_line(t: number): Point { + return make_point(t, 0); +} + +/** + * This function is a Curve generator: it takes a number and returns a + * horizontal curve. The number is a y-coordinate, and the Curve generates only + * points with the given y-coordinate. + * + * @param t fraction between 0 and 1 + * @returns horizontal Curve + */ +export function unit_line_at(t: number): Curve { + return (a: number): Point => make_point(a, t); +} + +/** + * This function is a curve: a function from a fraction t to a point. The points + * lie on the right half of the unit circle. They start at Point (0,1) when t is + * 0. When t is 0.5, they reach Point (1,0), when t is 1, they reach Point + * (0, -1). + * + * @param t fraction between 0 and 1 + * @returns Point in the arc at t + */ +export function arc(t: number): Point { + return make_point(Math.sin(Math.PI * t), Math.cos(Math.PI * t)); +} + +/** + * Create a animation of curves using a curve generating function. + * @param duration The duration of the animation in seconds + * @param fps Framerate of the animation in frames per second + * @param drawer Draw function to the generated curves with + * @param func Curve generating function. Takes in a timestamp value and returns a curve + * @return Curve Animation + */ +export function animate_curve( + duration: number, + fps: number, + drawer: RenderFunction, + func: CurveAnimation, +): AnimatedCurve { + if (drawer.is3D) { + throw new Error('animate_curve cannot be used with 3D draw function!'); + } + + const anim = new AnimatedCurve(duration, fps, func, drawer, false); + drawnCurves.push(anim); + return anim; +} + +/** + * Create a animation of curves using a curve generating function. + * @param duration The duration of the animation in seconds + * @param fps Framerate of the animation in frames per second + * @param drawer Draw function to the generated curves with + * @param func Curve generating function. Takes in a timestamp value and returns a curve + * @return 3D Curve Animation + */ +export function animate_3D_curve( + duration: number, + fps: number, + drawer: RenderFunction, + func: CurveAnimation, +): AnimatedCurve { + if (!drawer.is3D) { + throw new Error('animate_3D_curve cannot be used with 2D draw function!'); + } + + const anim = new AnimatedCurve(duration, fps, func, drawer, true); + drawnCurves.push(anim); + return anim; +} diff --git a/src/bundles/curve/index.ts b/src/bundles/curve/index.ts index 40413bcd2..2338b266c 100644 --- a/src/bundles/curve/index.ts +++ b/src/bundles/curve/index.ts @@ -1,43 +1,43 @@ -/** - * Bundle for Source Academy Curves module - * @author Lee Zheng Han - * @author Ng Yong Xiang - */ -export { - animate_3D_curve, - animate_curve, - arc, - b_of, - connect_ends, - connect_rigidly, - draw_3D_connected, - draw_3D_connected_full_view, - draw_3D_connected_full_view_proportional, - draw_3D_points, - draw_3D_points_full_view, - draw_3D_points_full_view_proportional, - draw_connected, - draw_connected_full_view, - draw_connected_full_view_proportional, - draw_points, - draw_points_full_view, - draw_points_full_view_proportional, - g_of, - invert, - make_3D_color_point, - make_3D_point, - make_color_point, - make_point, - put_in_standard_position, - r_of, - rotate_around_origin, - scale, - scale_proportional, - translate, - unit_circle, - unit_line, - unit_line_at, - x_of, - y_of, - z_of, -} from './functions'; +/** + * Bundle for Source Academy Curves module + * @author Lee Zheng Han + * @author Ng Yong Xiang + */ +export { + animate_3D_curve, + animate_curve, + arc, + b_of, + connect_ends, + connect_rigidly, + draw_3D_connected, + draw_3D_connected_full_view, + draw_3D_connected_full_view_proportional, + draw_3D_points, + draw_3D_points_full_view, + draw_3D_points_full_view_proportional, + draw_connected, + draw_connected_full_view, + draw_connected_full_view_proportional, + draw_points, + draw_points_full_view, + draw_points_full_view_proportional, + g_of, + invert, + make_3D_color_point, + make_3D_point, + make_color_point, + make_point, + put_in_standard_position, + r_of, + rotate_around_origin, + scale, + scale_proportional, + translate, + unit_circle, + unit_line, + unit_line_at, + x_of, + y_of, + z_of, +} from './functions'; diff --git a/src/bundles/curve/types.ts b/src/bundles/curve/types.ts index 787c55235..99cdfd7b6 100644 --- a/src/bundles/curve/types.ts +++ b/src/bundles/curve/types.ts @@ -1,53 +1,53 @@ -import { glAnimation, type AnimFrame } from '../../typings/anim_types'; -import type { ReplResult } from '../../typings/type_helpers'; -import type { Curve, CurveDrawn } from './curves_webgl'; - -/** A function that takes in CurveFunction and returns a tranformed CurveFunction. */ -export type CurveTransformer = (c: Curve) => Curve; - -export type DrawMode = 'lines' | 'points'; -export type ScaleMode = 'none' | 'stretch' | 'fit'; -export type CurveSpace = '2D' | '3D'; - -/** - * A function that takes in a timestamp and returns a Curve - */ -export type CurveAnimation = (t: number) => Curve; - -/** - * A function that specifies additional rendering information when taking in - * a CurveFunction and returns a ShapeDrawn based on its specifications. - */ -export type RenderFunction = { - is3D: boolean -} & ((func: Curve) => CurveDrawn); - -export class AnimatedCurve extends glAnimation implements ReplResult { - constructor( - duration: number, - fps: number, - private readonly func: (timestamp: number) => Curve, - private readonly drawer: RenderFunction, - public readonly is3D: boolean, - ) { - super(duration, fps); - this.angle = 0; - } - - public getFrame(timestamp: number): AnimFrame { - const curve = this.func(timestamp); - curve.shouldNotAppend = true; - const curveDrawn = this.drawer(curve); - - return { - draw: (canvas: HTMLCanvasElement) => { - curveDrawn.init(canvas); - curveDrawn.redraw(this.angle); - }, - }; - } - - public angle: number; - - public toReplString = () => ''; -} +import { glAnimation, type AnimFrame } from '../../typings/anim_types'; +import type { ReplResult } from '../../typings/type_helpers'; +import type { Curve, CurveDrawn } from './curves_webgl'; + +/** A function that takes in CurveFunction and returns a tranformed CurveFunction. */ +export type CurveTransformer = (c: Curve) => Curve; + +export type DrawMode = 'lines' | 'points'; +export type ScaleMode = 'none' | 'stretch' | 'fit'; +export type CurveSpace = '2D' | '3D'; + +/** + * A function that takes in a timestamp and returns a Curve + */ +export type CurveAnimation = (t: number) => Curve; + +/** + * A function that specifies additional rendering information when taking in + * a CurveFunction and returns a ShapeDrawn based on its specifications. + */ +export type RenderFunction = { + is3D: boolean +} & ((func: Curve) => CurveDrawn); + +export class AnimatedCurve extends glAnimation implements ReplResult { + constructor( + duration: number, + fps: number, + private readonly func: (timestamp: number) => Curve, + private readonly drawer: RenderFunction, + public readonly is3D: boolean, + ) { + super(duration, fps); + this.angle = 0; + } + + public getFrame(timestamp: number): AnimFrame { + const curve = this.func(timestamp); + curve.shouldNotAppend = true; + const curveDrawn = this.drawer(curve); + + return { + draw: (canvas: HTMLCanvasElement) => { + curveDrawn.init(canvas); + curveDrawn.redraw(this.angle); + }, + }; + } + + public angle: number; + + public toReplString = () => ''; +} diff --git a/src/bundles/game/functions.ts b/src/bundles/game/functions.ts index 637d95fe9..5695f4a8e 100644 --- a/src/bundles/game/functions.ts +++ b/src/bundles/game/functions.ts @@ -1,1525 +1,1525 @@ -/** - * Game library that translates Phaser 3 API into Source. - * - * More in-depth explanation of the Phaser 3 API can be found at - * Phaser 3 documentation itself. - * - * For Phaser 3 API Documentation, check: - * https://photonstorm.github.io/phaser3-docs/ - * - * @module game - * @author Anthony Halim - * @author Chi Xu - * @author Chong Sia Tiffany - * @author Gokul Rajiv - */ - -/* eslint-disable consistent-return, @typescript-eslint/default-param-last, @typescript-eslint/no-shadow, @typescript-eslint/no-unused-vars */ -import type { - GameObject, - List, - ObjectConfig, - RawContainer, - RawGameElement, - RawGameObject, - RawInputObject, -} from './types'; - -import context from 'js-slang/context'; - -/** @hidden */ -export default function gameFuncs(): { [name: string]: any } { - const { - scene, - preloadImageMap, - preloadSoundMap, - preloadSpritesheetMap, - remotePath, - screenSize, - createAward, - } = context.moduleContexts.game.state || {}; - - // Listener ObjectTypes - enum ListenerTypes { - InputPlugin = 'input_plugin', - KeyboardKeyType = 'keyboard_key', - } - - const ListnerTypes = Object.values(ListenerTypes); - - // Object ObjectTypes - enum ObjectTypes { - ImageType = 'image', - TextType = 'text', - RectType = 'rect', - EllipseType = 'ellipse', - ContainerType = 'container', - AwardType = 'award', - } - - const ObjTypes = Object.values(ObjectTypes); - - const nullFn = () => {}; - - // ============================================================================= - // Module's Private Functions - // ============================================================================= - - /** @hidden */ - function get_obj( - obj: GameObject, - ): RawGameObject | RawInputObject | RawContainer { - return obj.object!; - } - - /** @hidden */ - function get_game_obj(obj: GameObject): RawGameObject | RawContainer { - return obj.object as RawGameObject | RawContainer; - } - - /** @hidden */ - function get_input_obj(obj: GameObject): RawInputObject { - return obj.object as RawInputObject; - } - - /** @hidden */ - function get_container(obj: GameObject): RawContainer { - return obj.object as RawContainer; - } - - /** - * Checks whether the given game object is of the enquired type. - * If the given obj is undefined, will also return false. - * - * @param obj the game object - * @param type enquired type - * @returns if game object is of enquired type - * @hidden - */ - function is_type(obj: GameObject, type: string): boolean { - return obj !== undefined && obj.type === type && obj.object !== undefined; - } - - /** - * Checks whether the given game object is any of the enquired ObjectTypes - * - * @param obj the game object - * @param ObjectTypes enquired ObjectTypes - * @returns if game object is of any of the enquired ObjectTypes - * @hidden - */ - function is_any_type(obj: GameObject, types: string[]): boolean { - for (let i = 0; i < types.length; ++i) { - if (is_type(obj, types[i])) return true; - } - return false; - } - - /** - * Set a game object to the given type. - * Mutates the object. - * - * @param object the game object - * @param type type to set - * @returns typed game object - * @hidden - */ - function set_type( - object: RawGameObject | RawInputObject | RawContainer, - type: string, - ): GameObject { - return { - type, - object, - }; - } - - /** - * Throw a console error, including the function caller name. - * - * @param {string} message error message - * @hidden - */ - function throw_error(message: string) { - // eslint-disable-next-line no-caller, @typescript-eslint/no-throw-literal - throw console.error(`${arguments.callee.caller.name}: ${message}`); - } - - // List processing - // Original Author: Martin Henz - - /** - * array test works differently for Rhino and - * the Firefox environment (especially Web Console) - */ - function array_test(x: any): boolean { - if (Array.isArray === undefined) { - return x instanceof Array; - } - return Array.isArray(x); - } - - /** - * pair constructs a pair using a two-element array - * LOW-LEVEL FUNCTION, NOT SOURCE - */ - function pair(x: any, xs: any): [any, any] { - return [x, xs]; - } - - /** - * is_pair returns true iff arg is a two-element array - * LOW-LEVEL FUNCTION, NOT SOURCE - */ - function is_pair(x: any): boolean { - return array_test(x) && x.length === 2; - } - - /** - * head returns the first component of the given pair, - * throws an exception if the argument is not a pair - * LOW-LEVEL FUNCTION, NOT SOURCE - */ - function head(xs: List): any { - if (is_pair(xs)) { - return xs![0]; - } - throw new Error( - `head(xs) expects a pair as argument xs, but encountered ${xs}`, - ); - } - - /** - * tail returns the second component of the given pair - * throws an exception if the argument is not a pair - * LOW-LEVEL FUNCTION, NOT SOURCE - */ - function tail(xs: List) { - if (is_pair(xs)) { - return xs![1]; - } - throw new Error( - `tail(xs) expects a pair as argument xs, but encountered ${xs}`, - ); - } - - /** - * is_null returns true if arg is exactly null - * LOW-LEVEL FUNCTION, NOT SOURCE - */ - function is_null(xs: any) { - return xs === null; - } - - /** - * map applies first arg f to the elements of the second argument, - * assumed to be a list. - * f is applied element-by-element: - * map(f,[1,[2,[]]]) results in [f(1),[f(2),[]]] - * map throws an exception if the second argument is not a list, - * and if the second argument is a non-empty list and the first - * argument is not a function. - */ - function map(f: (x: any) => any, xs: List) { - return is_null(xs) ? null : pair(f(head(xs)), map(f, tail(xs))); - } - - // ============================================================================= - // Module's Exposed Functions - // ============================================================================= - - // HELPER - - function prepend_remote_url(asset_key: string): string { - return remotePath(asset_key); - } - - function create_config(lst: List): ObjectConfig { - const config = {}; - map((xs: [any, any]) => { - if (!is_pair(xs)) { - throw_error('xs is not pair!'); - } - config[head(xs)] = tail(xs); - }, lst); - return config; - } - - function create_text_config( - font_family: string = 'Courier', - font_size: string = '16px', - color: string = '#fff', - stroke: string = '#fff', - stroke_thickness: number = 0, - align: string = 'left', - ): ObjectConfig { - return { - fontFamily: font_family, - fontSize: font_size, - color, - stroke, - strokeThickness: stroke_thickness, - align, - }; - } - - function create_interactive_config( - draggable: boolean = false, - use_hand_cursor: boolean = false, - pixel_perfect: boolean = false, - alpha_tolerance: number = 1, - ): ObjectConfig { - return { - draggable, - useHandCursor: use_hand_cursor, - pixelPerfect: pixel_perfect, - alphaTolerance: alpha_tolerance, - }; - } - - function create_sound_config( - mute: boolean = false, - volume: number = 1, - rate: number = 1, - detune: number = 0, - seek: number = 0, - loop: boolean = false, - delay: number = 0, - ): ObjectConfig { - return { - mute, - volume, - rate, - detune, - seek, - loop, - delay, - }; - } - - function create_tween_config( - target_prop: string = 'x', - target_value: string | number = 0, - delay: number = 0, - duration: number = 1000, - ease: Function | string = 'Power0', - on_complete: Function = nullFn, - yoyo: boolean = false, - loop: number = 0, - loop_delay: number = 0, - on_loop: Function = nullFn, - ): ObjectConfig { - return { - [target_prop]: target_value, - delay, - duration, - ease, - onComplete: on_complete, - yoyo, - loop, - loopDelay: loop_delay, - onLoop: on_loop, - }; - } - - function create_anim_config( - anims_key: string, - anim_frames: ObjectConfig[], - frame_rate: number = 24, - duration: any = null, - repeat: number = -1, - yoyo: boolean = false, - show_on_start: boolean = true, - hide_on_complete: boolean = false, - ): ObjectConfig { - return { - key: anims_key, - frames: anim_frames, - frameRate: frame_rate, - duration, - repeat, - yoyo, - showOnStart: show_on_start, - hideOnComplete: hide_on_complete, - }; - } - - function create_anim_frame_config( - key: string, - duration: number = 0, - visible: boolean = true, - ): ObjectConfig { - return { - key, - duration, - visible, - }; - } - - function create_anim_spritesheet_frame_configs( - key: string, - ): ObjectConfig[] | undefined { - if (preloadSpritesheetMap.get(key)) { - const configArr = scene.anims.generateFrameNumbers(key, {}); - return configArr; - } - throw_error(`${key} is not associated with any spritesheet`); - } - - function create_spritesheet_config( - frame_width: number, - frame_height: number, - start_frame: number = 0, - margin: number = 0, - spacing: number = 0, - ): ObjectConfig { - return { - frameWidth: frame_width, - frameHeight: frame_height, - startFrame: start_frame, - margin, - spacing, - }; - } - - // SCREEN - - function get_screen_width(): number { - return screenSize.x; - } - - function get_screen_height(): number { - return screenSize.y; - } - - function get_screen_display_width(): number { - return scene.scale.displaySize.width; - } - - function get_screen_display_height(): number { - return scene.scale.displaySize.height; - } - - // LOAD - - function load_image(key: string, url: string) { - preloadImageMap.set(key, url); - } - - function load_sound(key: string, url: string) { - preloadSoundMap.set(key, url); - } - - function load_spritesheet( - key: string, - url: string, - spritesheet_config: ObjectConfig, - ) { - preloadSpritesheetMap.set(key, [url, spritesheet_config]); - } - - // ADD - - function add(obj: GameObject): GameObject | undefined { - if (is_any_type(obj, ObjTypes)) { - scene.add.existing(get_game_obj(obj)); - return obj; - } - throw_error(`${obj} is not of type ${ObjTypes}`); - } - - // SOUND - - function play_sound(key: string, config: ObjectConfig = {}): void { - if (preloadSoundMap.get(key)) { - scene.sound.play(key, config); - } else { - throw_error(`${key} is not associated with any sound`); - } - } - - // ANIMS - - function create_anim(anim_config: ObjectConfig): boolean { - const anims = scene.anims.create(anim_config); - return typeof anims !== 'boolean'; - } - - function play_anim_on_image( - image: GameObject, - anims_key: string, - ): GameObject | undefined { - if (is_type(image, ObjectTypes.ImageType)) { - (get_obj(image) as Phaser.GameObjects.Sprite).play(anims_key); - return image; - } - throw_error(`${image} is not of type ${ObjectTypes.ImageType}`); - } - - // IMAGE - - function create_image( - x: number, - y: number, - asset_key: string, - ): GameObject | undefined { - if ( - preloadImageMap.get(asset_key) - || preloadSpritesheetMap.get(asset_key) - ) { - const image = new Phaser.GameObjects.Sprite(scene, x, y, asset_key); - return set_type(image, ObjectTypes.ImageType); - } - throw_error(`${asset_key} is not associated with any image`); - } - - // AWARD - - function create_award(x: number, y: number, award_key: string): GameObject { - return set_type(createAward(x, y, award_key), ObjectTypes.AwardType); - } - - // TEXT - - function create_text( - x: number, - y: number, - text: string, - config: ObjectConfig = {}, - ): GameObject { - const txt = new Phaser.GameObjects.Text(scene, x, y, text, config); - return set_type(txt, ObjectTypes.TextType); - } - - // RECTANGLE - - function create_rect( - x: number, - y: number, - width: number, - height: number, - fill: number = 0, - alpha: number = 1, - ): GameObject { - const rect = new Phaser.GameObjects.Rectangle( - scene, - x, - y, - width, - height, - fill, - alpha, - ); - return set_type(rect, ObjectTypes.RectType); - } - - // ELLIPSE - - function create_ellipse( - x: number, - y: number, - width: number, - height: number, - fill: number = 0, - alpha: number = 1, - ): GameObject { - const ellipse = new Phaser.GameObjects.Ellipse( - scene, - x, - y, - width, - height, - fill, - alpha, - ); - return set_type(ellipse, ObjectTypes.EllipseType); - } - - // CONTAINER - - function create_container(x: number, y: number): GameObject { - const cont = new Phaser.GameObjects.Container(scene, x, y); - return set_type(cont, ObjectTypes.ContainerType); - } - - function add_to_container( - container: GameObject, - obj: GameObject, - ): GameObject | undefined { - if ( - is_type(container, ObjectTypes.ContainerType) - && is_any_type(obj, ObjTypes) - ) { - get_container(container) - .add(get_game_obj(obj)); - return container; - } - throw_error( - `${obj} is not of type ${ObjTypes} or ${container} is not of type ${ObjectTypes.ContainerType}`, - ); - } - - // OBJECT - - function destroy_obj(obj: GameObject) { - if (is_any_type(obj, ObjTypes)) { - get_game_obj(obj) - .destroy(); - } else { - throw_error(`${obj} is not of type ${ObjTypes}`); - } - } - - function set_display_size( - obj: GameObject, - x: number, - y: number, - ): GameObject | undefined { - if (is_any_type(obj, ObjTypes)) { - get_game_obj(obj) - .setDisplaySize(x, y); - return obj; - } - throw_error(`${obj} is not of type ${ObjTypes}`); - } - - function set_alpha(obj: GameObject, alpha: number): GameObject | undefined { - if (is_any_type(obj, ObjTypes)) { - get_game_obj(obj) - .setAlpha(alpha); - return obj; - } - throw_error(`${obj} is not of type ${ObjTypes}`); - } - - function set_interactive( - obj: GameObject, - config: ObjectConfig = {}, - ): GameObject | undefined { - if (is_any_type(obj, ObjTypes)) { - get_game_obj(obj) - .setInteractive(config); - return obj; - } - throw_error(`${obj} is not of type ${ObjTypes}`); - } - - function set_origin( - obj: GameObject, - x: number, - y: number, - ): GameObject | undefined { - if (is_any_type(obj, ObjTypes)) { - (get_game_obj(obj) as RawGameObject).setOrigin(x, y); - return obj; - } - throw_error(`${obj} is not of type ${ObjTypes}`); - } - - function set_position( - obj: GameObject, - x: number, - y: number, - ): GameObject | undefined { - if (obj && is_any_type(obj, ObjTypes)) { - get_game_obj(obj) - .setPosition(x, y); - return obj; - } - throw_error(`${obj} is not of type ${ObjTypes}`); - } - - function set_scale( - obj: GameObject, - x: number, - y: number, - ): GameObject | undefined { - if (is_any_type(obj, ObjTypes)) { - get_game_obj(obj) - .setScale(x, y); - return obj; - } - throw_error(`${obj} is not of type ${ObjTypes}`); - } - - function set_rotation(obj: GameObject, rad: number): GameObject | undefined { - if (is_any_type(obj, ObjTypes)) { - get_game_obj(obj) - .setRotation(rad); - return obj; - } - throw_error(`${obj} is not of type ${ObjTypes}`); - } - - function set_flip( - obj: GameObject, - x: boolean, - y: boolean, - ): GameObject | undefined { - const GameElementType = [ObjectTypes.ImageType, ObjectTypes.TextType]; - if (is_any_type(obj, GameElementType)) { - (get_obj(obj) as RawGameElement).setFlip(x, y); - return obj; - } - throw_error(`${obj} is not of type ${GameElementType}`); - } - - async function add_tween( - obj: GameObject, - config: ObjectConfig = {}, - ): Promise { - if (is_any_type(obj, ObjTypes)) { - scene.tweens.add({ - targets: get_game_obj(obj), - ...config, - }); - return obj; - } - throw_error(`${obj} is not of type ${ObjTypes}`); - } - - // LISTENER - - function add_listener( - obj: GameObject, - event: string, - callback: Function, - ): GameObject | undefined { - if (is_any_type(obj, ObjTypes)) { - const listener = get_game_obj(obj) - .addListener(event, callback); - return set_type(listener, ListenerTypes.InputPlugin); - } - throw_error(`${obj} is not of type ${ObjTypes}`); - } - - function add_keyboard_listener( - key: string | number, - event: string, - callback: Function, - ): GameObject { - const keyObj = scene.input.keyboard.addKey(key); - const keyboardListener = keyObj.addListener(event, callback); - return set_type(keyboardListener, ListenerTypes.KeyboardKeyType); - } - - function remove_listener(listener: GameObject): boolean { - if (is_any_type(listener, ListnerTypes)) { - get_input_obj(listener) - .removeAllListeners(); - return true; - } - return false; - } - - const functions = { - add, - add_listener, - add_keyboard_listener, - add_to_container, - add_tween, - create_anim, - create_anim_config, - create_anim_frame_config, - create_anim_spritesheet_frame_configs, - create_award, - create_config, - create_container, - create_ellipse, - create_image, - create_interactive_config, - create_rect, - create_text, - create_text_config, - create_tween_config, - create_sound_config, - create_spritesheet_config, - destroy_obj, - get_screen_width, - get_screen_height, - get_screen_display_width, - get_screen_display_height, - load_image, - load_sound, - load_spritesheet, - play_anim_on_image, - play_sound, - prepend_remote_url, - remove_listener, - set_alpha, - set_display_size, - set_flip, - set_interactive, - set_origin, - set_position, - set_rotation, - set_scale, - }; - - const finalFunctions = {}; - - Object.entries(functions) - .forEach(([key, fn]) => { - finalFunctions[key] = !scene ? nullFn : fn; - }); - - return finalFunctions; -} - -// ============================================================================= -// Dummy functions for TypeDoc -// -// Refer to functions of matching signature in `gameFuncs` -// for implementation details -// ============================================================================= - -/** - * Prepend the given asset key with the remote path (S3 path). - * - * @param asset_key - * @returns prepended path - */ -export function prepend_remote_url(asset_key: string): string { - return ''; -} - -/** - * Transforms the given list into an object config. The list follows - * the format of list([key1, value1], [key2, value2]). - * - * e.g list(["alpha", 0], ["duration", 1000]) - * - * @param lst the list to be turned into object config. - * @returns object config - */ -export function create_config(lst: List): ObjectConfig { - return {}; -} - -/** - * Create text config object, can be used to stylise text object. - * - * font_family: for available font_family, see: - * https://developer.mozilla.org/en-US/docs/Web/CSS/font-family#Valid_family_names - * - * align: must be either 'left', 'right', 'center', or 'justify' - * - * For more details about text config, see: - * https://photonstorm.github.io/phaser3-docs/Phaser.Types.GameObjects.Text.html#.TextStyle - * - * @param font_family font to be used - * @param font_size size of font, must be appended with 'px' e.g. '16px' - * @param color colour of font, in hex e.g. '#fff' - * @param stroke colour of stroke, in hex e.g. '#fff' - * @param stroke_thickness thickness of stroke - * @param align text alignment - * @returns text config - */ -export function create_text_config( - font_family: string = 'Courier', - font_size: string = '16px', - color: string = '#fff', - stroke: string = '#fff', - stroke_thickness: number = 0, - align: string = 'left', -): ObjectConfig { - return {}; -} - -/** - * Create interactive config object, can be used to configure interactive settings. - * - * For more details about interactive config object, see: - * https://photonstorm.github.io/phaser3-docs/Phaser.Types.Input.html#.InputConfiguration - * - * @param draggable object will be set draggable - * @param use_hand_cursor if true, pointer will be set to 'pointer' when a pointer is over it - * @param pixel_perfect pixel perfect function will be set for the hit area. Only works for texture based object - * @param alpha_tolerance if pixel_perfect is set, this is the alpha tolerance threshold value used in the callback - * @returns interactive config - */ -export function create_interactive_config( - draggable: boolean = false, - use_hand_cursor: boolean = false, - pixel_perfect: boolean = false, - alpha_tolerance: number = 1, -): ObjectConfig { - return {}; -} - -/** - * Create sound config object, can be used to configure sound settings. - * - * For more details about sound config object, see: - * https://photonstorm.github.io/phaser3-docs/Phaser.Types.Sound.html#.SoundConfig - * - * @param mute whether the sound should be muted or not - * @param volume value between 0(silence) and 1(full volume) - * @param rate the speed at which the sound is played - * @param detune detuning of the sound, in cents - * @param seek position of playback for the sound, in seconds - * @param loop whether or not the sound should loop - * @param delay time, in seconds, that elapse before the sound actually starts - * @returns sound config - */ -export function create_sound_config( - mute: boolean = false, - volume: number = 1, - rate: number = 1, - detune: number = 0, - seek: number = 0, - loop: boolean = false, - delay: number = 0, -): ObjectConfig { - return {}; -} - -/** - * Create tween config object, can be used to configure tween settings. - * - * For more details about tween config object, see: - * https://photonstorm.github.io/phaser3-docs/Phaser.Types.Tweens.html#.TweenBuilderConfig - * - * @param target_prop target to tween, e.g. x, y, alpha - * @param target_value the property value to tween to - * @param delay time in ms/frames before tween will start - * @param duration duration of tween in ms/frames, exclude yoyos or repeats - * @param ease ease function to use, e.g. 'Power0', 'Power1', 'Power2' - * @param on_complete function to execute when tween completes - * @param yoyo if set to true, once tween complete, reverses the values incrementally to get back to the starting tween values - * @param loop number of times the tween should loop, or -1 to loop indefinitely - * @param loop_delay The time the tween will pause before starting either a yoyo or returning to the start for a repeat - * @param on_loop function to execute each time the tween loops - * @returns tween config - */ -export function create_tween_config( - target_prop: string = 'x', - target_value: string | number = 0, - delay: number = 0, - duration: number = 1000, - ease: Function | string = 'Power0', - on_complete: Function, - yoyo: boolean = false, - loop: number = 0, - loop_delay: number = 0, - on_loop: Function, -): ObjectConfig { - return {}; -} - -/** - * Create anims config, can be used to configure anims - * - * For more details about the config object, see: - * https://photonstorm.github.io/phaser3-docs/Phaser.Types.Animations.html#.Animation - * - * @param anims_key key that the animation will be associated with - * @param anim_frames data used to generate the frames for animation - * @param frame_rate frame rate of playback in frames per second - * @param duration how long the animation should play in seconds. - * If null, will be derived from frame_rate - * @param repeat number of times to repeat the animation, -1 for infinity - * @param yoyo should the animation yoyo (reverse back down to the start) - * @param show_on_start should the sprite be visible when the anims start? - * @param hide_on_complete should the sprite be not visible when the anims finish? - * @returns animation config - */ -export function create_anim_config( - anims_key: string, - anim_frames: ObjectConfig[], - frame_rate: number = 24, - duration: any = null, - repeat: number = -1, - yoyo: boolean = false, - show_on_start: boolean = true, - hide_on_complete: boolean = false, -): ObjectConfig { - return {}; -} - -/** - * Create animation frame config, can be used to configure a specific frame - * within an animation. - * - * The key should refer to an image that is already loaded. - * To make frame_config from spritesheet based on its frames, - * use create_anim_spritesheet_frame_configs instead. - * - * @param key key that is associated with the sprite at this frame - * @param duration duration, in ms, of this frame of the animation - * @param visible should the parent object be visible during this frame? - * @returns animation frame config - */ -export function create_anim_frame_config( - key: string, - duration: number = 0, - visible: boolean = true, -): ObjectConfig { - return {}; -} - -/** - * Create list of animation frame config, can be used directly as part of - * anim_config's `frames` parameter. - * - * This function will generate list of frame configs based on the - * spritesheet_config attached to the associated spritesheet. - * This function requires that the given key is a spritesheet key - * i.e. a key associated with loaded spritesheet, loaded in using - * load_spritesheet function. - * - * Will return empty frame configs if key is not associated with - * a spritesheet. - * - * @param key key associated with spritesheet - * @returns animation frame configs - */ -export function create_anim_spritesheet_frame_configs( - key: string, -): ObjectConfig[] | undefined { - return undefined; -} - -/** - * Create spritesheet config, can be used to configure the frames within the - * spritesheet. Can be used as config at load_spritesheet. - * - * @param frame_width width of frame in pixels - * @param frame_height height of frame in pixels - * @param start_frame first frame to start parsing from - * @param margin margin in the image; this is the space around the edge of the frames - * @param spacing the spacing between each frame in the image - * @returns spritesheet config - */ -export function create_spritesheet_config( - frame_width: number, - frame_height: number, - start_frame: number = 0, - margin: number = 0, - spacing: number = 0, -): ObjectConfig { - return {}; -} - -// SCREEN - -/** - * Get in-game screen width. - * - * @return screen width - */ -export function get_screen_width(): number { - return -1; -} - -/** - * Get in-game screen height. - * - * @return screen height - */ -export function get_screen_height(): number { - return -1; -} - -/** - * Get game screen display width (accounting window size). - * - * @return screen display width - */ -export function get_screen_display_width(): number { - return -1; -} - -/** - * Get game screen display height (accounting window size). - * - * @return screen display height - */ -export function get_screen_display_height(): number { - return -1; -} - -// LOAD - -/** - * Load the image asset into the scene for use. All images - * must be loaded before used in create_image. - * - * @param key key to be associated with the image - * @param url path to the image - */ -export function load_image(key: string, url: string) {} - -/** - * Load the sound asset into the scene for use. All sound - * must be loaded before used in play_sound. - * - * @param key key to be associated with the sound - * @param url path to the sound - */ -export function load_sound(key: string, url: string) {} - -/** - * Load the spritesheet into the scene for use. All spritesheet must - * be loaded before used in create_image. - * - * @param key key associated with the spritesheet - * @param url path to the sound - * @param spritesheet_config config to determines frames within the spritesheet - */ -export function load_spritesheet( - key: string, - url: string, - spritesheet_config: ObjectConfig, -) { - return {}; -} - -// ADD - -/** - * Add the object to the scene. Only objects added to the scene - * will appear. - * - * @param obj game object to be added - */ -export function add(obj: GameObject): GameObject | undefined { - return undefined; -} - -// SOUND - -/** - * Play the sound associated with the key. - * Throws error if key is non-existent. - * - * @param key key to the sound to be played - * @param config sound config to be used - */ -export function play_sound(key: string, config: ObjectConfig = {}): void {} - -// ANIMS - -/** - * Create a new animation and add it to the available animations. - * Animations are global i.e. once created, it can be used anytime, anywhere. - * - * NOTE: Anims DO NOT need to be added into the scene to be used. - * It is automatically added to the scene when it is created. - * - * Will return true if the animation key is valid - * (key is specified within the anim_config); false if the key - * is already in use. - * - * @param anim_config - * @returns true if animation is successfully created, false otherwise - */ -export function create_anim(anim_config: ObjectConfig): boolean { - return false; -} - -/** - * Start playing the given animation on image game object. - * - * @param image image game object - * @param anims_key key associated with an animation - */ -export function play_anim_on_image( - image: GameObject, - anims_key: string, -): GameObject | undefined { - return undefined; -} - -// IMAGE - -/** - * Create an image using the key associated with a loaded image. - * If key is not associated with any loaded image, throws error. - * - * 0, 0 is located at the top, left hand side. - * - * @param x x position of the image. 0 is at the left side - * @param y y position of the image. 0 is at the top side - * @param asset_key key to loaded image - * @returns image game object - */ -export function create_image( - x: number, - y: number, - asset_key: string, -): GameObject | undefined { - return undefined; -} - -// AWARD - -/** - * Create an award using the key associated with the award. - * The award key can be obtained from the Awards Hall or - * Awards menu, after attaining the award. - * - * Valid award will have an on-hover VERIFIED tag to distinguish - * it from images created by create_image. - * - * If student does not possess the award, this function will - * return a untagged, default image. - * - * @param x x position of the image. 0 is at the left side - * @param y y position of the image. 0 is at the top side - * @param award_key key for award - * @returns award game object - */ -export function create_award( - x: number, - y: number, - award_key: string, -): GameObject { - return { - type: 'null', - object: undefined, - }; -} - -// TEXT - -/** - * Create a text object. - * - * 0, 0 is located at the top, left hand side. - * - * @param x x position of the text - * @param y y position of the text - * @param text text to be shown - * @param config text configuration to be used - * @returns text game object - */ -export function create_text( - x: number, - y: number, - text: string, - config: ObjectConfig = {}, -): GameObject { - return { - type: 'null', - object: undefined, - }; -} - -// RECTANGLE - -/** - * Create a rectangle object. - * - * 0, 0 is located at the top, left hand side. - * - * @param x x coordinate of the top, left corner posiiton - * @param y y coordinate of the top, left corner position - * @param width width of rectangle - * @param height height of rectangle - * @param fill colour fill, in hext e.g 0xffffff - * @param alpha value between 0 and 1 to denote alpha - * @returns rectangle object - */ -export function create_rect( - x: number, - y: number, - width: number, - height: number, - fill: number = 0, - alpha: number = 1, -): GameObject { - return { - type: 'null', - object: undefined, - }; -} - -// ELLIPSE - -/** - * Create an ellipse object. - * - * @param x x coordinate of the centre of ellipse - * @param y y coordinate of the centre of ellipse - * @param width width of ellipse - * @param height height of ellipse - * @param fill colour fill, in hext e.g 0xffffff - * @param alpha value between 0 and 1 to denote alpha - * @returns ellipse object - */ -export function create_ellipse( - x: number, - y: number, - width: number, - height: number, - fill: number = 0, - alpha: number = 1, -): GameObject { - return { - type: 'null', - object: undefined, - }; -} - -// CONTAINER - -/** - * Create a container object. Container is able to contain any other game object, - * and the positions of contained game object will be relative to the container. - * - * Rendering the container as visible or invisible will also affect the contained - * game object. - * - * Container can also contain another container. - * - * 0, 0 is located at the top, left hand side. - * - * For more details about container object, see: - * https://photonstorm.github.io/phaser3-docs/Phaser.GameObjects.Container.html - * - * @param x x position of the container - * @param y y position of the container - * @returns container object - */ -export function create_container(x: number, y: number): GameObject { - return { - type: 'container', - object: undefined, - }; -} - -/** - * Add the given game object to the container. - * Mutates the container. - * - * @param container container object - * @param obj game object to add to the container - * @returns container object - */ -export function add_to_container( - container: GameObject, - obj: GameObject, -): GameObject | undefined { - return undefined; -} - -// OBJECT - -/** - * Destroy the given game object. Destroyed game object - * is removed from the scene, and all of its listeners - * is also removed. - * - * @param obj game object itself - */ -export function destroy_obj(obj: GameObject) {} - -/** - * Set the display size of the object. - * Mutate the object. - * - * @param obj object to be set - * @param x new display width size - * @param y new display height size - * @returns game object itself - */ -export function set_display_size( - obj: GameObject, - x: number, - y: number, -): GameObject | undefined { - return undefined; -} - -/** - * Set the alpha of the object. - * Mutate the object. - * - * @param obj object to be set - * @param alpha new alpha - * @returns game object itself - */ -export function set_alpha( - obj: GameObject, - alpha: number, -): GameObject | undefined { - return undefined; -} - -/** - * Set the interactivity of the object. - * Mutate the object. - * - * Rectangle and Ellipse are not able to receive configs, only boolean - * i.e. set_interactive(rect, true); set_interactive(ellipse, false) - * - * @param obj object to be set - * @param config interactive config to be used - * @returns game object itself - */ -export function set_interactive( - obj: GameObject, - config: ObjectConfig = {}, -): GameObject | undefined { - return undefined; -} - -/** - * Set the origin in which all position related will be relative to. - * In other words, the anchor of the object. - * Mutate the object. - * - * @param obj object to be set - * @param x new anchor x coordinate, between value 0 to 1. - * @param y new anchor y coordinate, between value 0 to 1. - * @returns game object itself - */ -export function set_origin( - obj: GameObject, - x: number, - y: number, -): GameObject | undefined { - return undefined; -} - -/** - * Set the position of the game object - * Mutate the object - * - * @param obj object to be set - * @param x new x position - * @param y new y position - * @returns game object itself - */ -export function set_position( - obj: GameObject, - x: number, - y: number, -): GameObject | undefined { - return undefined; -} - -/** - * Set the scale of the object. - * Mutate the object. - * - * @param obj object to be set - * @param x new x scale - * @param y new y scale - * @returns game object itself - */ -export function set_scale( - obj: GameObject, - x: number, - y: number, -): GameObject | undefined { - return undefined; -} - -/** - * Set the rotation of the object. - * Mutate the object. - * - * @param obj object to be set - * @param rad the rotation, in radians - * @returns game object itself - */ -export function set_rotation( - obj: GameObject, - rad: number, -): GameObject | undefined { - return undefined; -} - -/** - * Sets the horizontal and flipped state of the object. - * Mutate the object. - * - * @param obj game object itself - * @param x to flip in the horizontal state - * @param y to flip in the vertical state - * @returns game object itself - */ -export function set_flip( - obj: GameObject, - x: boolean, - y: boolean, -): GameObject | undefined { - return undefined; -} - -/** - * Creates a tween to the object and plays it. - * Mutate the object. - * - * @param obj object to be added to - * @param config tween config - * @returns game object itself - */ -export async function add_tween( - obj: GameObject, - config: ObjectConfig = {}, -): Promise { - return undefined; -} - -// LISTENER - -/** - * Attach a listener to the object. The callback will be executed - * when the event is emitted. - * Mutate the object. - * - * For all available events, see: - * https://photonstorm.github.io/phaser3-docs/Phaser.Input.Events.html - * - * @param obj object to be added to - * @param event the event name - * @param callback listener function, executed on event - * @returns listener game object - */ -export function add_listener( - obj: GameObject, - event: string, - callback: Function, -): GameObject | undefined { - return undefined; -} - -/** - * Attach a listener to the object. The callback will be executed - * when the event is emitted. - * Mutate the object. - * - * For all available events, see: - * https://photonstorm.github.io/phaser3-docs/Phaser.Input.Events.html - * - * For list of keycodes, see: - * https://github.com/photonstorm/phaser/blob/v3.22.0/src/input/keyboard/keys/KeyCodes.js - * - * @param key keyboard key to trigger listener - * @param event the event name - * @param callback listener function, executed on event - * @returns listener game object - */ -export function add_keyboard_listener( - key: string | number, - event: string, - callback: Function, -): GameObject { - return { - type: 'null', - object: undefined, - }; -} - -/** - * Deactivate and remove listener. - * - * @param listener - * @returns if successful - */ -export function remove_listener(listener: GameObject): boolean { - return false; -} +/** + * Game library that translates Phaser 3 API into Source. + * + * More in-depth explanation of the Phaser 3 API can be found at + * Phaser 3 documentation itself. + * + * For Phaser 3 API Documentation, check: + * https://photonstorm.github.io/phaser3-docs/ + * + * @module game + * @author Anthony Halim + * @author Chi Xu + * @author Chong Sia Tiffany + * @author Gokul Rajiv + */ + +/* eslint-disable consistent-return, @typescript-eslint/default-param-last, @typescript-eslint/no-shadow, @typescript-eslint/no-unused-vars */ +import type { + GameObject, + List, + ObjectConfig, + RawContainer, + RawGameElement, + RawGameObject, + RawInputObject, +} from './types'; + +import context from 'js-slang/context'; + +/** @hidden */ +export default function gameFuncs(): { [name: string]: any } { + const { + scene, + preloadImageMap, + preloadSoundMap, + preloadSpritesheetMap, + remotePath, + screenSize, + createAward, + } = context.moduleContexts.game.state || {}; + + // Listener ObjectTypes + enum ListenerTypes { + InputPlugin = 'input_plugin', + KeyboardKeyType = 'keyboard_key', + } + + const ListnerTypes = Object.values(ListenerTypes); + + // Object ObjectTypes + enum ObjectTypes { + ImageType = 'image', + TextType = 'text', + RectType = 'rect', + EllipseType = 'ellipse', + ContainerType = 'container', + AwardType = 'award', + } + + const ObjTypes = Object.values(ObjectTypes); + + const nullFn = () => {}; + + // ============================================================================= + // Module's Private Functions + // ============================================================================= + + /** @hidden */ + function get_obj( + obj: GameObject, + ): RawGameObject | RawInputObject | RawContainer { + return obj.object!; + } + + /** @hidden */ + function get_game_obj(obj: GameObject): RawGameObject | RawContainer { + return obj.object as RawGameObject | RawContainer; + } + + /** @hidden */ + function get_input_obj(obj: GameObject): RawInputObject { + return obj.object as RawInputObject; + } + + /** @hidden */ + function get_container(obj: GameObject): RawContainer { + return obj.object as RawContainer; + } + + /** + * Checks whether the given game object is of the enquired type. + * If the given obj is undefined, will also return false. + * + * @param obj the game object + * @param type enquired type + * @returns if game object is of enquired type + * @hidden + */ + function is_type(obj: GameObject, type: string): boolean { + return obj !== undefined && obj.type === type && obj.object !== undefined; + } + + /** + * Checks whether the given game object is any of the enquired ObjectTypes + * + * @param obj the game object + * @param ObjectTypes enquired ObjectTypes + * @returns if game object is of any of the enquired ObjectTypes + * @hidden + */ + function is_any_type(obj: GameObject, types: string[]): boolean { + for (let i = 0; i < types.length; ++i) { + if (is_type(obj, types[i])) return true; + } + return false; + } + + /** + * Set a game object to the given type. + * Mutates the object. + * + * @param object the game object + * @param type type to set + * @returns typed game object + * @hidden + */ + function set_type( + object: RawGameObject | RawInputObject | RawContainer, + type: string, + ): GameObject { + return { + type, + object, + }; + } + + /** + * Throw a console error, including the function caller name. + * + * @param {string} message error message + * @hidden + */ + function throw_error(message: string) { + // eslint-disable-next-line no-caller, @typescript-eslint/no-throw-literal + throw console.error(`${arguments.callee.caller.name}: ${message}`); + } + + // List processing + // Original Author: Martin Henz + + /** + * array test works differently for Rhino and + * the Firefox environment (especially Web Console) + */ + function array_test(x: any): boolean { + if (Array.isArray === undefined) { + return x instanceof Array; + } + return Array.isArray(x); + } + + /** + * pair constructs a pair using a two-element array + * LOW-LEVEL FUNCTION, NOT SOURCE + */ + function pair(x: any, xs: any): [any, any] { + return [x, xs]; + } + + /** + * is_pair returns true iff arg is a two-element array + * LOW-LEVEL FUNCTION, NOT SOURCE + */ + function is_pair(x: any): boolean { + return array_test(x) && x.length === 2; + } + + /** + * head returns the first component of the given pair, + * throws an exception if the argument is not a pair + * LOW-LEVEL FUNCTION, NOT SOURCE + */ + function head(xs: List): any { + if (is_pair(xs)) { + return xs![0]; + } + throw new Error( + `head(xs) expects a pair as argument xs, but encountered ${xs}`, + ); + } + + /** + * tail returns the second component of the given pair + * throws an exception if the argument is not a pair + * LOW-LEVEL FUNCTION, NOT SOURCE + */ + function tail(xs: List) { + if (is_pair(xs)) { + return xs![1]; + } + throw new Error( + `tail(xs) expects a pair as argument xs, but encountered ${xs}`, + ); + } + + /** + * is_null returns true if arg is exactly null + * LOW-LEVEL FUNCTION, NOT SOURCE + */ + function is_null(xs: any) { + return xs === null; + } + + /** + * map applies first arg f to the elements of the second argument, + * assumed to be a list. + * f is applied element-by-element: + * map(f,[1,[2,[]]]) results in [f(1),[f(2),[]]] + * map throws an exception if the second argument is not a list, + * and if the second argument is a non-empty list and the first + * argument is not a function. + */ + function map(f: (x: any) => any, xs: List) { + return is_null(xs) ? null : pair(f(head(xs)), map(f, tail(xs))); + } + + // ============================================================================= + // Module's Exposed Functions + // ============================================================================= + + // HELPER + + function prepend_remote_url(asset_key: string): string { + return remotePath(asset_key); + } + + function create_config(lst: List): ObjectConfig { + const config = {}; + map((xs: [any, any]) => { + if (!is_pair(xs)) { + throw_error('xs is not pair!'); + } + config[head(xs)] = tail(xs); + }, lst); + return config; + } + + function create_text_config( + font_family: string = 'Courier', + font_size: string = '16px', + color: string = '#fff', + stroke: string = '#fff', + stroke_thickness: number = 0, + align: string = 'left', + ): ObjectConfig { + return { + fontFamily: font_family, + fontSize: font_size, + color, + stroke, + strokeThickness: stroke_thickness, + align, + }; + } + + function create_interactive_config( + draggable: boolean = false, + use_hand_cursor: boolean = false, + pixel_perfect: boolean = false, + alpha_tolerance: number = 1, + ): ObjectConfig { + return { + draggable, + useHandCursor: use_hand_cursor, + pixelPerfect: pixel_perfect, + alphaTolerance: alpha_tolerance, + }; + } + + function create_sound_config( + mute: boolean = false, + volume: number = 1, + rate: number = 1, + detune: number = 0, + seek: number = 0, + loop: boolean = false, + delay: number = 0, + ): ObjectConfig { + return { + mute, + volume, + rate, + detune, + seek, + loop, + delay, + }; + } + + function create_tween_config( + target_prop: string = 'x', + target_value: string | number = 0, + delay: number = 0, + duration: number = 1000, + ease: Function | string = 'Power0', + on_complete: Function = nullFn, + yoyo: boolean = false, + loop: number = 0, + loop_delay: number = 0, + on_loop: Function = nullFn, + ): ObjectConfig { + return { + [target_prop]: target_value, + delay, + duration, + ease, + onComplete: on_complete, + yoyo, + loop, + loopDelay: loop_delay, + onLoop: on_loop, + }; + } + + function create_anim_config( + anims_key: string, + anim_frames: ObjectConfig[], + frame_rate: number = 24, + duration: any = null, + repeat: number = -1, + yoyo: boolean = false, + show_on_start: boolean = true, + hide_on_complete: boolean = false, + ): ObjectConfig { + return { + key: anims_key, + frames: anim_frames, + frameRate: frame_rate, + duration, + repeat, + yoyo, + showOnStart: show_on_start, + hideOnComplete: hide_on_complete, + }; + } + + function create_anim_frame_config( + key: string, + duration: number = 0, + visible: boolean = true, + ): ObjectConfig { + return { + key, + duration, + visible, + }; + } + + function create_anim_spritesheet_frame_configs( + key: string, + ): ObjectConfig[] | undefined { + if (preloadSpritesheetMap.get(key)) { + const configArr = scene.anims.generateFrameNumbers(key, {}); + return configArr; + } + throw_error(`${key} is not associated with any spritesheet`); + } + + function create_spritesheet_config( + frame_width: number, + frame_height: number, + start_frame: number = 0, + margin: number = 0, + spacing: number = 0, + ): ObjectConfig { + return { + frameWidth: frame_width, + frameHeight: frame_height, + startFrame: start_frame, + margin, + spacing, + }; + } + + // SCREEN + + function get_screen_width(): number { + return screenSize.x; + } + + function get_screen_height(): number { + return screenSize.y; + } + + function get_screen_display_width(): number { + return scene.scale.displaySize.width; + } + + function get_screen_display_height(): number { + return scene.scale.displaySize.height; + } + + // LOAD + + function load_image(key: string, url: string) { + preloadImageMap.set(key, url); + } + + function load_sound(key: string, url: string) { + preloadSoundMap.set(key, url); + } + + function load_spritesheet( + key: string, + url: string, + spritesheet_config: ObjectConfig, + ) { + preloadSpritesheetMap.set(key, [url, spritesheet_config]); + } + + // ADD + + function add(obj: GameObject): GameObject | undefined { + if (is_any_type(obj, ObjTypes)) { + scene.add.existing(get_game_obj(obj)); + return obj; + } + throw_error(`${obj} is not of type ${ObjTypes}`); + } + + // SOUND + + function play_sound(key: string, config: ObjectConfig = {}): void { + if (preloadSoundMap.get(key)) { + scene.sound.play(key, config); + } else { + throw_error(`${key} is not associated with any sound`); + } + } + + // ANIMS + + function create_anim(anim_config: ObjectConfig): boolean { + const anims = scene.anims.create(anim_config); + return typeof anims !== 'boolean'; + } + + function play_anim_on_image( + image: GameObject, + anims_key: string, + ): GameObject | undefined { + if (is_type(image, ObjectTypes.ImageType)) { + (get_obj(image) as Phaser.GameObjects.Sprite).play(anims_key); + return image; + } + throw_error(`${image} is not of type ${ObjectTypes.ImageType}`); + } + + // IMAGE + + function create_image( + x: number, + y: number, + asset_key: string, + ): GameObject | undefined { + if ( + preloadImageMap.get(asset_key) + || preloadSpritesheetMap.get(asset_key) + ) { + const image = new Phaser.GameObjects.Sprite(scene, x, y, asset_key); + return set_type(image, ObjectTypes.ImageType); + } + throw_error(`${asset_key} is not associated with any image`); + } + + // AWARD + + function create_award(x: number, y: number, award_key: string): GameObject { + return set_type(createAward(x, y, award_key), ObjectTypes.AwardType); + } + + // TEXT + + function create_text( + x: number, + y: number, + text: string, + config: ObjectConfig = {}, + ): GameObject { + const txt = new Phaser.GameObjects.Text(scene, x, y, text, config); + return set_type(txt, ObjectTypes.TextType); + } + + // RECTANGLE + + function create_rect( + x: number, + y: number, + width: number, + height: number, + fill: number = 0, + alpha: number = 1, + ): GameObject { + const rect = new Phaser.GameObjects.Rectangle( + scene, + x, + y, + width, + height, + fill, + alpha, + ); + return set_type(rect, ObjectTypes.RectType); + } + + // ELLIPSE + + function create_ellipse( + x: number, + y: number, + width: number, + height: number, + fill: number = 0, + alpha: number = 1, + ): GameObject { + const ellipse = new Phaser.GameObjects.Ellipse( + scene, + x, + y, + width, + height, + fill, + alpha, + ); + return set_type(ellipse, ObjectTypes.EllipseType); + } + + // CONTAINER + + function create_container(x: number, y: number): GameObject { + const cont = new Phaser.GameObjects.Container(scene, x, y); + return set_type(cont, ObjectTypes.ContainerType); + } + + function add_to_container( + container: GameObject, + obj: GameObject, + ): GameObject | undefined { + if ( + is_type(container, ObjectTypes.ContainerType) + && is_any_type(obj, ObjTypes) + ) { + get_container(container) + .add(get_game_obj(obj)); + return container; + } + throw_error( + `${obj} is not of type ${ObjTypes} or ${container} is not of type ${ObjectTypes.ContainerType}`, + ); + } + + // OBJECT + + function destroy_obj(obj: GameObject) { + if (is_any_type(obj, ObjTypes)) { + get_game_obj(obj) + .destroy(); + } else { + throw_error(`${obj} is not of type ${ObjTypes}`); + } + } + + function set_display_size( + obj: GameObject, + x: number, + y: number, + ): GameObject | undefined { + if (is_any_type(obj, ObjTypes)) { + get_game_obj(obj) + .setDisplaySize(x, y); + return obj; + } + throw_error(`${obj} is not of type ${ObjTypes}`); + } + + function set_alpha(obj: GameObject, alpha: number): GameObject | undefined { + if (is_any_type(obj, ObjTypes)) { + get_game_obj(obj) + .setAlpha(alpha); + return obj; + } + throw_error(`${obj} is not of type ${ObjTypes}`); + } + + function set_interactive( + obj: GameObject, + config: ObjectConfig = {}, + ): GameObject | undefined { + if (is_any_type(obj, ObjTypes)) { + get_game_obj(obj) + .setInteractive(config); + return obj; + } + throw_error(`${obj} is not of type ${ObjTypes}`); + } + + function set_origin( + obj: GameObject, + x: number, + y: number, + ): GameObject | undefined { + if (is_any_type(obj, ObjTypes)) { + (get_game_obj(obj) as RawGameObject).setOrigin(x, y); + return obj; + } + throw_error(`${obj} is not of type ${ObjTypes}`); + } + + function set_position( + obj: GameObject, + x: number, + y: number, + ): GameObject | undefined { + if (obj && is_any_type(obj, ObjTypes)) { + get_game_obj(obj) + .setPosition(x, y); + return obj; + } + throw_error(`${obj} is not of type ${ObjTypes}`); + } + + function set_scale( + obj: GameObject, + x: number, + y: number, + ): GameObject | undefined { + if (is_any_type(obj, ObjTypes)) { + get_game_obj(obj) + .setScale(x, y); + return obj; + } + throw_error(`${obj} is not of type ${ObjTypes}`); + } + + function set_rotation(obj: GameObject, rad: number): GameObject | undefined { + if (is_any_type(obj, ObjTypes)) { + get_game_obj(obj) + .setRotation(rad); + return obj; + } + throw_error(`${obj} is not of type ${ObjTypes}`); + } + + function set_flip( + obj: GameObject, + x: boolean, + y: boolean, + ): GameObject | undefined { + const GameElementType = [ObjectTypes.ImageType, ObjectTypes.TextType]; + if (is_any_type(obj, GameElementType)) { + (get_obj(obj) as RawGameElement).setFlip(x, y); + return obj; + } + throw_error(`${obj} is not of type ${GameElementType}`); + } + + async function add_tween( + obj: GameObject, + config: ObjectConfig = {}, + ): Promise { + if (is_any_type(obj, ObjTypes)) { + scene.tweens.add({ + targets: get_game_obj(obj), + ...config, + }); + return obj; + } + throw_error(`${obj} is not of type ${ObjTypes}`); + } + + // LISTENER + + function add_listener( + obj: GameObject, + event: string, + callback: Function, + ): GameObject | undefined { + if (is_any_type(obj, ObjTypes)) { + const listener = get_game_obj(obj) + .addListener(event, callback); + return set_type(listener, ListenerTypes.InputPlugin); + } + throw_error(`${obj} is not of type ${ObjTypes}`); + } + + function add_keyboard_listener( + key: string | number, + event: string, + callback: Function, + ): GameObject { + const keyObj = scene.input.keyboard.addKey(key); + const keyboardListener = keyObj.addListener(event, callback); + return set_type(keyboardListener, ListenerTypes.KeyboardKeyType); + } + + function remove_listener(listener: GameObject): boolean { + if (is_any_type(listener, ListnerTypes)) { + get_input_obj(listener) + .removeAllListeners(); + return true; + } + return false; + } + + const functions = { + add, + add_listener, + add_keyboard_listener, + add_to_container, + add_tween, + create_anim, + create_anim_config, + create_anim_frame_config, + create_anim_spritesheet_frame_configs, + create_award, + create_config, + create_container, + create_ellipse, + create_image, + create_interactive_config, + create_rect, + create_text, + create_text_config, + create_tween_config, + create_sound_config, + create_spritesheet_config, + destroy_obj, + get_screen_width, + get_screen_height, + get_screen_display_width, + get_screen_display_height, + load_image, + load_sound, + load_spritesheet, + play_anim_on_image, + play_sound, + prepend_remote_url, + remove_listener, + set_alpha, + set_display_size, + set_flip, + set_interactive, + set_origin, + set_position, + set_rotation, + set_scale, + }; + + const finalFunctions = {}; + + Object.entries(functions) + .forEach(([key, fn]) => { + finalFunctions[key] = !scene ? nullFn : fn; + }); + + return finalFunctions; +} + +// ============================================================================= +// Dummy functions for TypeDoc +// +// Refer to functions of matching signature in `gameFuncs` +// for implementation details +// ============================================================================= + +/** + * Prepend the given asset key with the remote path (S3 path). + * + * @param asset_key + * @returns prepended path + */ +export function prepend_remote_url(asset_key: string): string { + return ''; +} + +/** + * Transforms the given list into an object config. The list follows + * the format of list([key1, value1], [key2, value2]). + * + * e.g list(["alpha", 0], ["duration", 1000]) + * + * @param lst the list to be turned into object config. + * @returns object config + */ +export function create_config(lst: List): ObjectConfig { + return {}; +} + +/** + * Create text config object, can be used to stylise text object. + * + * font_family: for available font_family, see: + * https://developer.mozilla.org/en-US/docs/Web/CSS/font-family#Valid_family_names + * + * align: must be either 'left', 'right', 'center', or 'justify' + * + * For more details about text config, see: + * https://photonstorm.github.io/phaser3-docs/Phaser.Types.GameObjects.Text.html#.TextStyle + * + * @param font_family font to be used + * @param font_size size of font, must be appended with 'px' e.g. '16px' + * @param color colour of font, in hex e.g. '#fff' + * @param stroke colour of stroke, in hex e.g. '#fff' + * @param stroke_thickness thickness of stroke + * @param align text alignment + * @returns text config + */ +export function create_text_config( + font_family: string = 'Courier', + font_size: string = '16px', + color: string = '#fff', + stroke: string = '#fff', + stroke_thickness: number = 0, + align: string = 'left', +): ObjectConfig { + return {}; +} + +/** + * Create interactive config object, can be used to configure interactive settings. + * + * For more details about interactive config object, see: + * https://photonstorm.github.io/phaser3-docs/Phaser.Types.Input.html#.InputConfiguration + * + * @param draggable object will be set draggable + * @param use_hand_cursor if true, pointer will be set to 'pointer' when a pointer is over it + * @param pixel_perfect pixel perfect function will be set for the hit area. Only works for texture based object + * @param alpha_tolerance if pixel_perfect is set, this is the alpha tolerance threshold value used in the callback + * @returns interactive config + */ +export function create_interactive_config( + draggable: boolean = false, + use_hand_cursor: boolean = false, + pixel_perfect: boolean = false, + alpha_tolerance: number = 1, +): ObjectConfig { + return {}; +} + +/** + * Create sound config object, can be used to configure sound settings. + * + * For more details about sound config object, see: + * https://photonstorm.github.io/phaser3-docs/Phaser.Types.Sound.html#.SoundConfig + * + * @param mute whether the sound should be muted or not + * @param volume value between 0(silence) and 1(full volume) + * @param rate the speed at which the sound is played + * @param detune detuning of the sound, in cents + * @param seek position of playback for the sound, in seconds + * @param loop whether or not the sound should loop + * @param delay time, in seconds, that elapse before the sound actually starts + * @returns sound config + */ +export function create_sound_config( + mute: boolean = false, + volume: number = 1, + rate: number = 1, + detune: number = 0, + seek: number = 0, + loop: boolean = false, + delay: number = 0, +): ObjectConfig { + return {}; +} + +/** + * Create tween config object, can be used to configure tween settings. + * + * For more details about tween config object, see: + * https://photonstorm.github.io/phaser3-docs/Phaser.Types.Tweens.html#.TweenBuilderConfig + * + * @param target_prop target to tween, e.g. x, y, alpha + * @param target_value the property value to tween to + * @param delay time in ms/frames before tween will start + * @param duration duration of tween in ms/frames, exclude yoyos or repeats + * @param ease ease function to use, e.g. 'Power0', 'Power1', 'Power2' + * @param on_complete function to execute when tween completes + * @param yoyo if set to true, once tween complete, reverses the values incrementally to get back to the starting tween values + * @param loop number of times the tween should loop, or -1 to loop indefinitely + * @param loop_delay The time the tween will pause before starting either a yoyo or returning to the start for a repeat + * @param on_loop function to execute each time the tween loops + * @returns tween config + */ +export function create_tween_config( + target_prop: string = 'x', + target_value: string | number = 0, + delay: number = 0, + duration: number = 1000, + ease: Function | string = 'Power0', + on_complete: Function, + yoyo: boolean = false, + loop: number = 0, + loop_delay: number = 0, + on_loop: Function, +): ObjectConfig { + return {}; +} + +/** + * Create anims config, can be used to configure anims + * + * For more details about the config object, see: + * https://photonstorm.github.io/phaser3-docs/Phaser.Types.Animations.html#.Animation + * + * @param anims_key key that the animation will be associated with + * @param anim_frames data used to generate the frames for animation + * @param frame_rate frame rate of playback in frames per second + * @param duration how long the animation should play in seconds. + * If null, will be derived from frame_rate + * @param repeat number of times to repeat the animation, -1 for infinity + * @param yoyo should the animation yoyo (reverse back down to the start) + * @param show_on_start should the sprite be visible when the anims start? + * @param hide_on_complete should the sprite be not visible when the anims finish? + * @returns animation config + */ +export function create_anim_config( + anims_key: string, + anim_frames: ObjectConfig[], + frame_rate: number = 24, + duration: any = null, + repeat: number = -1, + yoyo: boolean = false, + show_on_start: boolean = true, + hide_on_complete: boolean = false, +): ObjectConfig { + return {}; +} + +/** + * Create animation frame config, can be used to configure a specific frame + * within an animation. + * + * The key should refer to an image that is already loaded. + * To make frame_config from spritesheet based on its frames, + * use create_anim_spritesheet_frame_configs instead. + * + * @param key key that is associated with the sprite at this frame + * @param duration duration, in ms, of this frame of the animation + * @param visible should the parent object be visible during this frame? + * @returns animation frame config + */ +export function create_anim_frame_config( + key: string, + duration: number = 0, + visible: boolean = true, +): ObjectConfig { + return {}; +} + +/** + * Create list of animation frame config, can be used directly as part of + * anim_config's `frames` parameter. + * + * This function will generate list of frame configs based on the + * spritesheet_config attached to the associated spritesheet. + * This function requires that the given key is a spritesheet key + * i.e. a key associated with loaded spritesheet, loaded in using + * load_spritesheet function. + * + * Will return empty frame configs if key is not associated with + * a spritesheet. + * + * @param key key associated with spritesheet + * @returns animation frame configs + */ +export function create_anim_spritesheet_frame_configs( + key: string, +): ObjectConfig[] | undefined { + return undefined; +} + +/** + * Create spritesheet config, can be used to configure the frames within the + * spritesheet. Can be used as config at load_spritesheet. + * + * @param frame_width width of frame in pixels + * @param frame_height height of frame in pixels + * @param start_frame first frame to start parsing from + * @param margin margin in the image; this is the space around the edge of the frames + * @param spacing the spacing between each frame in the image + * @returns spritesheet config + */ +export function create_spritesheet_config( + frame_width: number, + frame_height: number, + start_frame: number = 0, + margin: number = 0, + spacing: number = 0, +): ObjectConfig { + return {}; +} + +// SCREEN + +/** + * Get in-game screen width. + * + * @return screen width + */ +export function get_screen_width(): number { + return -1; +} + +/** + * Get in-game screen height. + * + * @return screen height + */ +export function get_screen_height(): number { + return -1; +} + +/** + * Get game screen display width (accounting window size). + * + * @return screen display width + */ +export function get_screen_display_width(): number { + return -1; +} + +/** + * Get game screen display height (accounting window size). + * + * @return screen display height + */ +export function get_screen_display_height(): number { + return -1; +} + +// LOAD + +/** + * Load the image asset into the scene for use. All images + * must be loaded before used in create_image. + * + * @param key key to be associated with the image + * @param url path to the image + */ +export function load_image(key: string, url: string) {} + +/** + * Load the sound asset into the scene for use. All sound + * must be loaded before used in play_sound. + * + * @param key key to be associated with the sound + * @param url path to the sound + */ +export function load_sound(key: string, url: string) {} + +/** + * Load the spritesheet into the scene for use. All spritesheet must + * be loaded before used in create_image. + * + * @param key key associated with the spritesheet + * @param url path to the sound + * @param spritesheet_config config to determines frames within the spritesheet + */ +export function load_spritesheet( + key: string, + url: string, + spritesheet_config: ObjectConfig, +) { + return {}; +} + +// ADD + +/** + * Add the object to the scene. Only objects added to the scene + * will appear. + * + * @param obj game object to be added + */ +export function add(obj: GameObject): GameObject | undefined { + return undefined; +} + +// SOUND + +/** + * Play the sound associated with the key. + * Throws error if key is non-existent. + * + * @param key key to the sound to be played + * @param config sound config to be used + */ +export function play_sound(key: string, config: ObjectConfig = {}): void {} + +// ANIMS + +/** + * Create a new animation and add it to the available animations. + * Animations are global i.e. once created, it can be used anytime, anywhere. + * + * NOTE: Anims DO NOT need to be added into the scene to be used. + * It is automatically added to the scene when it is created. + * + * Will return true if the animation key is valid + * (key is specified within the anim_config); false if the key + * is already in use. + * + * @param anim_config + * @returns true if animation is successfully created, false otherwise + */ +export function create_anim(anim_config: ObjectConfig): boolean { + return false; +} + +/** + * Start playing the given animation on image game object. + * + * @param image image game object + * @param anims_key key associated with an animation + */ +export function play_anim_on_image( + image: GameObject, + anims_key: string, +): GameObject | undefined { + return undefined; +} + +// IMAGE + +/** + * Create an image using the key associated with a loaded image. + * If key is not associated with any loaded image, throws error. + * + * 0, 0 is located at the top, left hand side. + * + * @param x x position of the image. 0 is at the left side + * @param y y position of the image. 0 is at the top side + * @param asset_key key to loaded image + * @returns image game object + */ +export function create_image( + x: number, + y: number, + asset_key: string, +): GameObject | undefined { + return undefined; +} + +// AWARD + +/** + * Create an award using the key associated with the award. + * The award key can be obtained from the Awards Hall or + * Awards menu, after attaining the award. + * + * Valid award will have an on-hover VERIFIED tag to distinguish + * it from images created by create_image. + * + * If student does not possess the award, this function will + * return a untagged, default image. + * + * @param x x position of the image. 0 is at the left side + * @param y y position of the image. 0 is at the top side + * @param award_key key for award + * @returns award game object + */ +export function create_award( + x: number, + y: number, + award_key: string, +): GameObject { + return { + type: 'null', + object: undefined, + }; +} + +// TEXT + +/** + * Create a text object. + * + * 0, 0 is located at the top, left hand side. + * + * @param x x position of the text + * @param y y position of the text + * @param text text to be shown + * @param config text configuration to be used + * @returns text game object + */ +export function create_text( + x: number, + y: number, + text: string, + config: ObjectConfig = {}, +): GameObject { + return { + type: 'null', + object: undefined, + }; +} + +// RECTANGLE + +/** + * Create a rectangle object. + * + * 0, 0 is located at the top, left hand side. + * + * @param x x coordinate of the top, left corner posiiton + * @param y y coordinate of the top, left corner position + * @param width width of rectangle + * @param height height of rectangle + * @param fill colour fill, in hext e.g 0xffffff + * @param alpha value between 0 and 1 to denote alpha + * @returns rectangle object + */ +export function create_rect( + x: number, + y: number, + width: number, + height: number, + fill: number = 0, + alpha: number = 1, +): GameObject { + return { + type: 'null', + object: undefined, + }; +} + +// ELLIPSE + +/** + * Create an ellipse object. + * + * @param x x coordinate of the centre of ellipse + * @param y y coordinate of the centre of ellipse + * @param width width of ellipse + * @param height height of ellipse + * @param fill colour fill, in hext e.g 0xffffff + * @param alpha value between 0 and 1 to denote alpha + * @returns ellipse object + */ +export function create_ellipse( + x: number, + y: number, + width: number, + height: number, + fill: number = 0, + alpha: number = 1, +): GameObject { + return { + type: 'null', + object: undefined, + }; +} + +// CONTAINER + +/** + * Create a container object. Container is able to contain any other game object, + * and the positions of contained game object will be relative to the container. + * + * Rendering the container as visible or invisible will also affect the contained + * game object. + * + * Container can also contain another container. + * + * 0, 0 is located at the top, left hand side. + * + * For more details about container object, see: + * https://photonstorm.github.io/phaser3-docs/Phaser.GameObjects.Container.html + * + * @param x x position of the container + * @param y y position of the container + * @returns container object + */ +export function create_container(x: number, y: number): GameObject { + return { + type: 'container', + object: undefined, + }; +} + +/** + * Add the given game object to the container. + * Mutates the container. + * + * @param container container object + * @param obj game object to add to the container + * @returns container object + */ +export function add_to_container( + container: GameObject, + obj: GameObject, +): GameObject | undefined { + return undefined; +} + +// OBJECT + +/** + * Destroy the given game object. Destroyed game object + * is removed from the scene, and all of its listeners + * is also removed. + * + * @param obj game object itself + */ +export function destroy_obj(obj: GameObject) {} + +/** + * Set the display size of the object. + * Mutate the object. + * + * @param obj object to be set + * @param x new display width size + * @param y new display height size + * @returns game object itself + */ +export function set_display_size( + obj: GameObject, + x: number, + y: number, +): GameObject | undefined { + return undefined; +} + +/** + * Set the alpha of the object. + * Mutate the object. + * + * @param obj object to be set + * @param alpha new alpha + * @returns game object itself + */ +export function set_alpha( + obj: GameObject, + alpha: number, +): GameObject | undefined { + return undefined; +} + +/** + * Set the interactivity of the object. + * Mutate the object. + * + * Rectangle and Ellipse are not able to receive configs, only boolean + * i.e. set_interactive(rect, true); set_interactive(ellipse, false) + * + * @param obj object to be set + * @param config interactive config to be used + * @returns game object itself + */ +export function set_interactive( + obj: GameObject, + config: ObjectConfig = {}, +): GameObject | undefined { + return undefined; +} + +/** + * Set the origin in which all position related will be relative to. + * In other words, the anchor of the object. + * Mutate the object. + * + * @param obj object to be set + * @param x new anchor x coordinate, between value 0 to 1. + * @param y new anchor y coordinate, between value 0 to 1. + * @returns game object itself + */ +export function set_origin( + obj: GameObject, + x: number, + y: number, +): GameObject | undefined { + return undefined; +} + +/** + * Set the position of the game object + * Mutate the object + * + * @param obj object to be set + * @param x new x position + * @param y new y position + * @returns game object itself + */ +export function set_position( + obj: GameObject, + x: number, + y: number, +): GameObject | undefined { + return undefined; +} + +/** + * Set the scale of the object. + * Mutate the object. + * + * @param obj object to be set + * @param x new x scale + * @param y new y scale + * @returns game object itself + */ +export function set_scale( + obj: GameObject, + x: number, + y: number, +): GameObject | undefined { + return undefined; +} + +/** + * Set the rotation of the object. + * Mutate the object. + * + * @param obj object to be set + * @param rad the rotation, in radians + * @returns game object itself + */ +export function set_rotation( + obj: GameObject, + rad: number, +): GameObject | undefined { + return undefined; +} + +/** + * Sets the horizontal and flipped state of the object. + * Mutate the object. + * + * @param obj game object itself + * @param x to flip in the horizontal state + * @param y to flip in the vertical state + * @returns game object itself + */ +export function set_flip( + obj: GameObject, + x: boolean, + y: boolean, +): GameObject | undefined { + return undefined; +} + +/** + * Creates a tween to the object and plays it. + * Mutate the object. + * + * @param obj object to be added to + * @param config tween config + * @returns game object itself + */ +export async function add_tween( + obj: GameObject, + config: ObjectConfig = {}, +): Promise { + return undefined; +} + +// LISTENER + +/** + * Attach a listener to the object. The callback will be executed + * when the event is emitted. + * Mutate the object. + * + * For all available events, see: + * https://photonstorm.github.io/phaser3-docs/Phaser.Input.Events.html + * + * @param obj object to be added to + * @param event the event name + * @param callback listener function, executed on event + * @returns listener game object + */ +export function add_listener( + obj: GameObject, + event: string, + callback: Function, +): GameObject | undefined { + return undefined; +} + +/** + * Attach a listener to the object. The callback will be executed + * when the event is emitted. + * Mutate the object. + * + * For all available events, see: + * https://photonstorm.github.io/phaser3-docs/Phaser.Input.Events.html + * + * For list of keycodes, see: + * https://github.com/photonstorm/phaser/blob/v3.22.0/src/input/keyboard/keys/KeyCodes.js + * + * @param key keyboard key to trigger listener + * @param event the event name + * @param callback listener function, executed on event + * @returns listener game object + */ +export function add_keyboard_listener( + key: string | number, + event: string, + callback: Function, +): GameObject { + return { + type: 'null', + object: undefined, + }; +} + +/** + * Deactivate and remove listener. + * + * @param listener + * @returns if successful + */ +export function remove_listener(listener: GameObject): boolean { + return false; +} diff --git a/src/bundles/game/index.ts b/src/bundles/game/index.ts index 5312549fa..73fdfecf5 100644 --- a/src/bundles/game/index.ts +++ b/src/bundles/game/index.ts @@ -1,45 +1,45 @@ -import gameFuncs from './functions'; - -export const { - add, - add_listener, - add_keyboard_listener, - add_to_container, - add_tween, - create_anim, - create_anim_config, - create_anim_frame_config, - create_anim_spritesheet_frame_configs, - create_award, - create_config, - create_container, - create_ellipse, - create_image, - create_interactive_config, - create_rect, - create_text, - create_text_config, - create_tween_config, - create_sound_config, - create_spritesheet_config, - destroy_obj, - get_screen_width, - get_screen_height, - get_screen_display_width, - get_screen_display_height, - load_image, - load_sound, - load_spritesheet, - play_anim_on_image, - play_sound, - prepend_remote_url, - remove_listener, - set_alpha, - set_display_size, - set_flip, - set_interactive, - set_origin, - set_position, - set_rotation, - set_scale, -} = gameFuncs(); +import gameFuncs from './functions'; + +export const { + add, + add_listener, + add_keyboard_listener, + add_to_container, + add_tween, + create_anim, + create_anim_config, + create_anim_frame_config, + create_anim_spritesheet_frame_configs, + create_award, + create_config, + create_container, + create_ellipse, + create_image, + create_interactive_config, + create_rect, + create_text, + create_text_config, + create_tween_config, + create_sound_config, + create_spritesheet_config, + destroy_obj, + get_screen_width, + get_screen_height, + get_screen_display_width, + get_screen_display_height, + load_image, + load_sound, + load_spritesheet, + play_anim_on_image, + play_sound, + prepend_remote_url, + remove_listener, + set_alpha, + set_display_size, + set_flip, + set_interactive, + set_origin, + set_position, + set_rotation, + set_scale, +} = gameFuncs(); diff --git a/src/bundles/game/types.ts b/src/bundles/game/types.ts index f0169158f..0b1cf5fb6 100644 --- a/src/bundles/game/types.ts +++ b/src/bundles/game/types.ts @@ -1,37 +1,37 @@ -import type * as Phaser from 'phaser'; - -export type List = [any, List] | null; - -export type ObjectConfig = { [attr: string]: any }; - -export type RawGameElement = - | Phaser.GameObjects.Sprite - | Phaser.GameObjects.Text; - -export type RawGameShape = - | Phaser.GameObjects.Rectangle - | Phaser.GameObjects.Ellipse; - -export type RawGameObject = RawGameElement | RawGameShape; - -export type RawContainer = Phaser.GameObjects.Container; - -export type RawInputObject = - | Phaser.Input.InputPlugin - | Phaser.Input.Keyboard.Key; - -export type GameObject = { - type: string; - object: RawGameObject | RawInputObject | RawContainer | undefined; -}; - - -export type GameParams = { - scene: Phaser.Scene; - preloadImageMap: Map; - preloadSoundMap: Map; - preloadSpritesheetMap: Map; - remotePath: (path: string) => string; - screenSize: { x: number; y: number }; - createAward: (x: number, y: number, key: string) => Phaser.GameObjects.Sprite; -}; +import type * as Phaser from 'phaser'; + +export type List = [any, List] | null; + +export type ObjectConfig = { [attr: string]: any }; + +export type RawGameElement = + | Phaser.GameObjects.Sprite + | Phaser.GameObjects.Text; + +export type RawGameShape = + | Phaser.GameObjects.Rectangle + | Phaser.GameObjects.Ellipse; + +export type RawGameObject = RawGameElement | RawGameShape; + +export type RawContainer = Phaser.GameObjects.Container; + +export type RawInputObject = + | Phaser.Input.InputPlugin + | Phaser.Input.Keyboard.Key; + +export type GameObject = { + type: string; + object: RawGameObject | RawInputObject | RawContainer | undefined; +}; + + +export type GameParams = { + scene: Phaser.Scene; + preloadImageMap: Map; + preloadSoundMap: Map; + preloadSpritesheetMap: Map; + remotePath: (path: string) => string; + screenSize: { x: number; y: number }; + createAward: (x: number, y: number, key: string) => Phaser.GameObjects.Sprite; +}; diff --git a/src/bundles/mark_sweep/index.ts b/src/bundles/mark_sweep/index.ts index c6f43a17c..65d879c01 100644 --- a/src/bundles/mark_sweep/index.ts +++ b/src/bundles/mark_sweep/index.ts @@ -1,374 +1,374 @@ -import { type MemoryHeaps, type Memory, type Tag, COMMAND, type CommandHeapObject } from './types'; - -// Global Variables -let ROW: number = 10; -const COLUMN: number = 32; -let NODE_SIZE: number = 0; -let MEMORY_SIZE: number = -99; -let memory: Memory; -let memoryHeaps: Memory[] = []; -const commandHeap: CommandHeapObject[] = []; -let memoryMatrix: number[][]; -let tags: Tag[]; -let typeTag: string[]; -const flips: number[] = []; -let TAG_SLOT: number = 0; -let SIZE_SLOT: number = 1; -let FIRST_CHILD_SLOT: number = 2; -let LAST_CHILD_SLOT: number = 3; -let MARKED: number = 1; -let UNMARKED: number = 0; -let ROOTS: number[] = []; - -function generateMemory(): void { - memoryMatrix = []; - for (let i = 0; i < ROW; i += 1) { - memory = []; - for (let j = 0; j < COLUMN && i * COLUMN + j < MEMORY_SIZE; j += 1) { - memory.push(i * COLUMN + j); - } - memoryMatrix.push(memory); - } - - const obj: CommandHeapObject = { - type: COMMAND.INIT, - heap: [], - left: -1, - right: -1, - sizeLeft: 0, - sizeRight: 0, - desc: 'Memory initially empty.', - leftDesc: '', - rightDesc: '', - queue: [], - }; - - commandHeap.push(obj); -} - -function updateRoots(array): void { - for (let i = 0; i < array.length; i += 1) { - ROOTS.push(array[i]); - } -} - -function initialize_memory( - memorySize: number, - nodeSize, - marked, - unmarked, -): void { - MEMORY_SIZE = memorySize; - NODE_SIZE = nodeSize; - const excess = MEMORY_SIZE % NODE_SIZE; - MEMORY_SIZE -= excess; - ROW = MEMORY_SIZE / COLUMN; - MARKED = marked; - UNMARKED = unmarked; - generateMemory(); -} - -function initialize_tag(allTag: number[], types: string[]): void { - tags = allTag; - typeTag = types; -} - -function allHeap(newHeap: number[][]): void { - memoryHeaps = newHeap; -} - -function updateFlip(): void { - flips.push(commandHeap.length - 1); -} - -function newCommand( - type, - left, - right, - sizeLeft, - sizeRight, - heap, - description, - firstDesc, - lastDesc, - queue = [], -): void { - const newType = type; - const newLeft = left; - const newRight = right; - const newSizeLeft = sizeLeft; - const newSizeRight = sizeRight; - const newDesc = description; - const newFirstDesc = firstDesc; - const newLastDesc = lastDesc; - - memory = []; - for (let j = 0; j < heap.length; j += 1) { - memory.push(heap[j]); - } - const newQueue: number[] = []; - for (let j = 0; j < queue.length; j += 1) { - newQueue.push(queue[j]); - } - - const obj: CommandHeapObject = { - type: newType, - heap: memory, - left: newLeft, - right: newRight, - sizeLeft: newSizeLeft, - sizeRight: newSizeRight, - desc: newDesc, - leftDesc: newFirstDesc, - rightDesc: newLastDesc, - queue: newQueue, - }; - - commandHeap.push(obj); -} - -function newSweep(left, heap): void { - const newSizeLeft = NODE_SIZE; - const desc = `Freeing node ${left}`; - newCommand( - COMMAND.SWEEP, - left, - -1, - newSizeLeft, - 0, - heap, - desc, - 'freed node', - '', - ); -} - -function newMark(left, heap, queue): void { - const newSizeLeft = NODE_SIZE; - const desc = `Marking node ${left} to be live memory`; - newCommand( - COMMAND.MARK, - left, - -1, - newSizeLeft, - 0, - heap, - desc, - 'marked node', - '', - queue, - ); -} - -function addRoots(arr): void { - for (let i = 0; i < arr.length; i += 1) { - ROOTS.push(arr[i]); - } -} - -function showRoot(heap): void { - const desc = 'All root nodes are marked'; - newCommand(COMMAND.SHOW_MARKED, -1, -1, 0, 0, heap, desc, '', ''); -} - -function showRoots(heap): void { - for (let i = 0; i < ROOTS.length; i += 1) { - showRoot(heap); - } - ROOTS = []; -} - -function newUpdateSweep(right, heap): void { - const desc = `Set node ${right} to freelist`; - newCommand( - COMMAND.RESET, - -1, - right, - 0, - NODE_SIZE, - heap, - desc, - 'free node', - '', - ); -} - -function newPush(left, right, heap): void { - const desc = `Push OS update memory ${left} and ${right}.`; - newCommand( - COMMAND.PUSH, - left, - right, - 1, - 1, - heap, - desc, - 'last child address slot', - 'new child pushed', - ); -} - -function newPop(res, left, right, heap): void { - const newRes = res; - const desc = `Pop OS from memory ${left}, with value ${newRes}.`; - newCommand( - COMMAND.POP, - left, - right, - 1, - 1, - heap, - desc, - 'popped memory', - 'last child address slot', - ); -} - -function newAssign(res, left, heap): void { - const newRes = res; - const desc = `Assign memory [${left}] with ${newRes}.`; - newCommand(COMMAND.ASSIGN, left, -1, 1, 1, heap, desc, 'assigned memory', ''); -} - -function newNew(left, heap): void { - const newSizeLeft = NODE_SIZE; - const desc = `New node starts in [${left}].`; - newCommand( - COMMAND.NEW, - left, - -1, - newSizeLeft, - 0, - heap, - desc, - 'new memory allocated', - '', - ); -} - -function newGC(heap): void { - const desc = 'Memory exhausted, start Mark and Sweep Algorithm'; - newCommand(COMMAND.START, -1, -1, 0, 0, heap, desc, '', ''); - updateFlip(); -} - -function endGC(heap): void { - const desc = 'Result of free memory'; - newCommand(COMMAND.END, -1, -1, 0, 0, heap, desc, '', ''); - updateFlip(); -} - -function updateSlotSegment( - tag: number, - size: number, - first: number, - last: number, -): void { - if (tag >= 0) { - TAG_SLOT = tag; - } - if (size >= 0) { - SIZE_SLOT = size; - } - if (first >= 0) { - FIRST_CHILD_SLOT = first; - } - if (last >= 0) { - LAST_CHILD_SLOT = last; - } -} - -function get_memory_size(): number { - return MEMORY_SIZE; -} - -function get_tags(): Tag[] { - return tags; -} - -function get_command(): CommandHeapObject[] { - return commandHeap; -} - -function get_flips(): number[] { - return flips; -} - -function get_types(): String[] { - return typeTag; -} - -function get_memory_heap(): MemoryHeaps { - return memoryHeaps; -} - -function get_memory_matrix(): MemoryHeaps { - return memoryMatrix; -} - -function get_roots(): number[] { - return ROOTS; -} - -function get_slots(): number[] { - return [TAG_SLOT, SIZE_SLOT, FIRST_CHILD_SLOT, LAST_CHILD_SLOT]; -} - -function get_column_size(): number { - return COLUMN; -} - -function get_row_size(): number { - return ROW; -} - -function get_unmarked(): number { - return UNMARKED; -} - -function get_marked(): number { - return MARKED; -} - -function init() { - return { - toReplString: () => '', - get_memory_size, - get_memory_heap, - get_tags, - get_types, - get_column_size, - get_row_size, - get_memory_matrix, - get_flips, - get_slots, - get_command, - get_unmarked, - get_marked, - get_roots, - }; -} - -export { - init, - // initialisation - initialize_memory, - initialize_tag, - generateMemory, - allHeap, - updateSlotSegment, - newCommand, - newMark, - newPush, - newPop, - newAssign, - newNew, - newGC, - newSweep, - updateRoots, - newUpdateSweep, - showRoots, - endGC, - addRoots, - showRoot, -}; +import { type MemoryHeaps, type Memory, type Tag, COMMAND, type CommandHeapObject } from './types'; + +// Global Variables +let ROW: number = 10; +const COLUMN: number = 32; +let NODE_SIZE: number = 0; +let MEMORY_SIZE: number = -99; +let memory: Memory; +let memoryHeaps: Memory[] = []; +const commandHeap: CommandHeapObject[] = []; +let memoryMatrix: number[][]; +let tags: Tag[]; +let typeTag: string[]; +const flips: number[] = []; +let TAG_SLOT: number = 0; +let SIZE_SLOT: number = 1; +let FIRST_CHILD_SLOT: number = 2; +let LAST_CHILD_SLOT: number = 3; +let MARKED: number = 1; +let UNMARKED: number = 0; +let ROOTS: number[] = []; + +function generateMemory(): void { + memoryMatrix = []; + for (let i = 0; i < ROW; i += 1) { + memory = []; + for (let j = 0; j < COLUMN && i * COLUMN + j < MEMORY_SIZE; j += 1) { + memory.push(i * COLUMN + j); + } + memoryMatrix.push(memory); + } + + const obj: CommandHeapObject = { + type: COMMAND.INIT, + heap: [], + left: -1, + right: -1, + sizeLeft: 0, + sizeRight: 0, + desc: 'Memory initially empty.', + leftDesc: '', + rightDesc: '', + queue: [], + }; + + commandHeap.push(obj); +} + +function updateRoots(array): void { + for (let i = 0; i < array.length; i += 1) { + ROOTS.push(array[i]); + } +} + +function initialize_memory( + memorySize: number, + nodeSize, + marked, + unmarked, +): void { + MEMORY_SIZE = memorySize; + NODE_SIZE = nodeSize; + const excess = MEMORY_SIZE % NODE_SIZE; + MEMORY_SIZE -= excess; + ROW = MEMORY_SIZE / COLUMN; + MARKED = marked; + UNMARKED = unmarked; + generateMemory(); +} + +function initialize_tag(allTag: number[], types: string[]): void { + tags = allTag; + typeTag = types; +} + +function allHeap(newHeap: number[][]): void { + memoryHeaps = newHeap; +} + +function updateFlip(): void { + flips.push(commandHeap.length - 1); +} + +function newCommand( + type, + left, + right, + sizeLeft, + sizeRight, + heap, + description, + firstDesc, + lastDesc, + queue = [], +): void { + const newType = type; + const newLeft = left; + const newRight = right; + const newSizeLeft = sizeLeft; + const newSizeRight = sizeRight; + const newDesc = description; + const newFirstDesc = firstDesc; + const newLastDesc = lastDesc; + + memory = []; + for (let j = 0; j < heap.length; j += 1) { + memory.push(heap[j]); + } + const newQueue: number[] = []; + for (let j = 0; j < queue.length; j += 1) { + newQueue.push(queue[j]); + } + + const obj: CommandHeapObject = { + type: newType, + heap: memory, + left: newLeft, + right: newRight, + sizeLeft: newSizeLeft, + sizeRight: newSizeRight, + desc: newDesc, + leftDesc: newFirstDesc, + rightDesc: newLastDesc, + queue: newQueue, + }; + + commandHeap.push(obj); +} + +function newSweep(left, heap): void { + const newSizeLeft = NODE_SIZE; + const desc = `Freeing node ${left}`; + newCommand( + COMMAND.SWEEP, + left, + -1, + newSizeLeft, + 0, + heap, + desc, + 'freed node', + '', + ); +} + +function newMark(left, heap, queue): void { + const newSizeLeft = NODE_SIZE; + const desc = `Marking node ${left} to be live memory`; + newCommand( + COMMAND.MARK, + left, + -1, + newSizeLeft, + 0, + heap, + desc, + 'marked node', + '', + queue, + ); +} + +function addRoots(arr): void { + for (let i = 0; i < arr.length; i += 1) { + ROOTS.push(arr[i]); + } +} + +function showRoot(heap): void { + const desc = 'All root nodes are marked'; + newCommand(COMMAND.SHOW_MARKED, -1, -1, 0, 0, heap, desc, '', ''); +} + +function showRoots(heap): void { + for (let i = 0; i < ROOTS.length; i += 1) { + showRoot(heap); + } + ROOTS = []; +} + +function newUpdateSweep(right, heap): void { + const desc = `Set node ${right} to freelist`; + newCommand( + COMMAND.RESET, + -1, + right, + 0, + NODE_SIZE, + heap, + desc, + 'free node', + '', + ); +} + +function newPush(left, right, heap): void { + const desc = `Push OS update memory ${left} and ${right}.`; + newCommand( + COMMAND.PUSH, + left, + right, + 1, + 1, + heap, + desc, + 'last child address slot', + 'new child pushed', + ); +} + +function newPop(res, left, right, heap): void { + const newRes = res; + const desc = `Pop OS from memory ${left}, with value ${newRes}.`; + newCommand( + COMMAND.POP, + left, + right, + 1, + 1, + heap, + desc, + 'popped memory', + 'last child address slot', + ); +} + +function newAssign(res, left, heap): void { + const newRes = res; + const desc = `Assign memory [${left}] with ${newRes}.`; + newCommand(COMMAND.ASSIGN, left, -1, 1, 1, heap, desc, 'assigned memory', ''); +} + +function newNew(left, heap): void { + const newSizeLeft = NODE_SIZE; + const desc = `New node starts in [${left}].`; + newCommand( + COMMAND.NEW, + left, + -1, + newSizeLeft, + 0, + heap, + desc, + 'new memory allocated', + '', + ); +} + +function newGC(heap): void { + const desc = 'Memory exhausted, start Mark and Sweep Algorithm'; + newCommand(COMMAND.START, -1, -1, 0, 0, heap, desc, '', ''); + updateFlip(); +} + +function endGC(heap): void { + const desc = 'Result of free memory'; + newCommand(COMMAND.END, -1, -1, 0, 0, heap, desc, '', ''); + updateFlip(); +} + +function updateSlotSegment( + tag: number, + size: number, + first: number, + last: number, +): void { + if (tag >= 0) { + TAG_SLOT = tag; + } + if (size >= 0) { + SIZE_SLOT = size; + } + if (first >= 0) { + FIRST_CHILD_SLOT = first; + } + if (last >= 0) { + LAST_CHILD_SLOT = last; + } +} + +function get_memory_size(): number { + return MEMORY_SIZE; +} + +function get_tags(): Tag[] { + return tags; +} + +function get_command(): CommandHeapObject[] { + return commandHeap; +} + +function get_flips(): number[] { + return flips; +} + +function get_types(): String[] { + return typeTag; +} + +function get_memory_heap(): MemoryHeaps { + return memoryHeaps; +} + +function get_memory_matrix(): MemoryHeaps { + return memoryMatrix; +} + +function get_roots(): number[] { + return ROOTS; +} + +function get_slots(): number[] { + return [TAG_SLOT, SIZE_SLOT, FIRST_CHILD_SLOT, LAST_CHILD_SLOT]; +} + +function get_column_size(): number { + return COLUMN; +} + +function get_row_size(): number { + return ROW; +} + +function get_unmarked(): number { + return UNMARKED; +} + +function get_marked(): number { + return MARKED; +} + +function init() { + return { + toReplString: () => '', + get_memory_size, + get_memory_heap, + get_tags, + get_types, + get_column_size, + get_row_size, + get_memory_matrix, + get_flips, + get_slots, + get_command, + get_unmarked, + get_marked, + get_roots, + }; +} + +export { + init, + // initialisation + initialize_memory, + initialize_tag, + generateMemory, + allHeap, + updateSlotSegment, + newCommand, + newMark, + newPush, + newPop, + newAssign, + newNew, + newGC, + newSweep, + updateRoots, + newUpdateSweep, + showRoots, + endGC, + addRoots, + showRoot, +}; diff --git a/src/bundles/mark_sweep/types.ts b/src/bundles/mark_sweep/types.ts index 8d30ca24a..56c71389d 100644 --- a/src/bundles/mark_sweep/types.ts +++ b/src/bundles/mark_sweep/types.ts @@ -1,32 +1,32 @@ -export type Memory = number[]; -export type MemoryHeaps = Memory[]; -export type Tag = number; - -export enum COMMAND { - FLIP = 'Flip', - PUSH = 'Push', - POP = 'Pop', - COPY = 'Copy', - ASSIGN = 'Assign', - NEW = 'New', - START = 'Mark and Sweep Start', - END = 'End of Garbage Collector', - RESET = 'Sweep Reset', - SHOW_MARKED = 'Marked Roots', - MARK = 'Mark', - SWEEP = 'Sweep', - INIT = 'Initialize Memory', -} - -export type CommandHeapObject = { - type: String; - heap: number[]; - left: number; - right: number; - sizeLeft: number; - sizeRight: number; - desc: String; - leftDesc: String; - rightDesc: String; - queue: number[]; -}; +export type Memory = number[]; +export type MemoryHeaps = Memory[]; +export type Tag = number; + +export enum COMMAND { + FLIP = 'Flip', + PUSH = 'Push', + POP = 'Pop', + COPY = 'Copy', + ASSIGN = 'Assign', + NEW = 'New', + START = 'Mark and Sweep Start', + END = 'End of Garbage Collector', + RESET = 'Sweep Reset', + SHOW_MARKED = 'Marked Roots', + MARK = 'Mark', + SWEEP = 'Sweep', + INIT = 'Initialize Memory', +} + +export type CommandHeapObject = { + type: String; + heap: number[]; + left: number; + right: number; + sizeLeft: number; + sizeRight: number; + desc: String; + leftDesc: String; + rightDesc: String; + queue: number[]; +}; diff --git a/src/bundles/painter/functions.ts b/src/bundles/painter/functions.ts index 7cbbefba0..6edc8eeed 100644 --- a/src/bundles/painter/functions.ts +++ b/src/bundles/painter/functions.ts @@ -1,74 +1,74 @@ -/** - * The module `painter` provides functions for visualizing painters in SICP JS 2.2.4 plots using the plotly.js library. - * @module painter - */ - -import context from 'js-slang/context'; -import Plotly, { type Data, type Layout } from 'plotly.js-dist'; -import { type Frame, LinePlot } from './painter'; - -const drawnPainters: LinePlot[] = []; -context.moduleContexts.painter.state = { - drawnPainters, -}; - -let data: Data = {}; -const x_s: (number | null)[] = []; -const y_s: (number | null)[] = []; - -/** - * Draw a line from v_start to v_end - * @param v_start vector of the first point - * @param v_end vector of the second point - * @example - * ``` - * const v1 = pair(1,2); - * const v2 = pair(2,3); - * draw_line(v1, v2); - * ``` - */ -export function draw_line(v_start: number[], v_end: number[]) { - console.log(x_s, y_s, v_start, v_end); - x_s.push(v_start[0]); - x_s.push(v_end[0]); - y_s.push(v_start[1]); - y_s.push(v_end[1]); - x_s.push(null); - y_s.push(null); -} - -/** - * Returns a function that turns a given Frame into a Drawing, given the - * painter - * @param painter the painter to transform the frame - * @returns function of type Frame → Drawing - * * @example - * ``` - * display_painter(flipped_outline_painter)(unit_frame); - * ``` - */ -export function display_painter(painter: (frame: Frame) => void) { - return (frame: Frame) => { - painter(frame); - data = { - x: x_s, - y: y_s, - }; - drawnPainters.push( - new LinePlot(draw_new_painter, { - ...data, - mode: 'lines', - } as Data, { - xaxis: { visible: true }, - yaxis: { - visible: true, - scaleanchor: 'x', - }, - }), - ); - }; -} - -function draw_new_painter(divId: string, data: Data, layout: Partial) { - Plotly.newPlot(divId, [data], layout); -} +/** + * The module `painter` provides functions for visualizing painters in SICP JS 2.2.4 plots using the plotly.js library. + * @module painter + */ + +import context from 'js-slang/context'; +import Plotly, { type Data, type Layout } from 'plotly.js-dist'; +import { type Frame, LinePlot } from './painter'; + +const drawnPainters: LinePlot[] = []; +context.moduleContexts.painter.state = { + drawnPainters, +}; + +let data: Data = {}; +const x_s: (number | null)[] = []; +const y_s: (number | null)[] = []; + +/** + * Draw a line from v_start to v_end + * @param v_start vector of the first point + * @param v_end vector of the second point + * @example + * ``` + * const v1 = pair(1,2); + * const v2 = pair(2,3); + * draw_line(v1, v2); + * ``` + */ +export function draw_line(v_start: number[], v_end: number[]) { + console.log(x_s, y_s, v_start, v_end); + x_s.push(v_start[0]); + x_s.push(v_end[0]); + y_s.push(v_start[1]); + y_s.push(v_end[1]); + x_s.push(null); + y_s.push(null); +} + +/** + * Returns a function that turns a given Frame into a Drawing, given the + * painter + * @param painter the painter to transform the frame + * @returns function of type Frame → Drawing + * * @example + * ``` + * display_painter(flipped_outline_painter)(unit_frame); + * ``` + */ +export function display_painter(painter: (frame: Frame) => void) { + return (frame: Frame) => { + painter(frame); + data = { + x: x_s, + y: y_s, + }; + drawnPainters.push( + new LinePlot(draw_new_painter, { + ...data, + mode: 'lines', + } as Data, { + xaxis: { visible: true }, + yaxis: { + visible: true, + scaleanchor: 'x', + }, + }), + ); + }; +} + +function draw_new_painter(divId: string, data: Data, layout: Partial) { + Plotly.newPlot(divId, [data], layout); +} diff --git a/src/bundles/painter/index.ts b/src/bundles/painter/index.ts index 0d72a9a2a..37444e2e5 100644 --- a/src/bundles/painter/index.ts +++ b/src/bundles/painter/index.ts @@ -1,6 +1,6 @@ -/** - * Bundle for Source Academy Painter repository - * @author Sourabh Raj Jaiswal - */ - -export { draw_line, display_painter } from './functions'; +/** + * Bundle for Source Academy Painter repository + * @author Sourabh Raj Jaiswal + */ + +export { draw_line, display_painter } from './functions'; diff --git a/src/bundles/painter/painter.ts b/src/bundles/painter/painter.ts index 05067b0cb..b170fa204 100644 --- a/src/bundles/painter/painter.ts +++ b/src/bundles/painter/painter.ts @@ -1,21 +1,21 @@ -import type { ReplResult } from '../../typings/type_helpers'; -import type { Data, Layout } from 'plotly.js-dist'; - -export class LinePlot implements ReplResult { - plotlyDrawFn: any; - data: Data; - layout: Partial; - constructor(plotlyDrawFn: any, data: Data, layout: Partial) { - this.plotlyDrawFn = plotlyDrawFn; - this.data = data; - this.layout = layout; - } - public toReplString = () => ''; - - public draw = (divId: string) => { - this.plotlyDrawFn(divId, this.data, this.layout); - }; -} - -type Vector = number[]; -export type Frame = Vector[]; +import type { ReplResult } from '../../typings/type_helpers'; +import type { Data, Layout } from 'plotly.js-dist'; + +export class LinePlot implements ReplResult { + plotlyDrawFn: any; + data: Data; + layout: Partial; + constructor(plotlyDrawFn: any, data: Data, layout: Partial) { + this.plotlyDrawFn = plotlyDrawFn; + this.data = data; + this.layout = layout; + } + public toReplString = () => ''; + + public draw = (divId: string) => { + this.plotlyDrawFn(divId, this.data, this.layout); + }; +} + +type Vector = number[]; +export type Frame = Vector[]; diff --git a/src/bundles/physics_2d/PhysicsObject.ts b/src/bundles/physics_2d/PhysicsObject.ts index 5fe15dabb..e6bbb681e 100644 --- a/src/bundles/physics_2d/PhysicsObject.ts +++ b/src/bundles/physics_2d/PhysicsObject.ts @@ -1,192 +1,192 @@ -/* eslint-disable new-cap */ -// We have to disable linting rules since Box2D functions do not -// follow the same guidelines as the rest of the codebase. - -import { - type b2Body, - type b2Shape, - type b2Fixture, - b2BodyType, - b2CircleShape, - b2PolygonShape, - b2Vec2, -} from '@box2d/core'; -import { type ReplResult } from '../../typings/type_helpers'; - -import { ACCURACY, type Force, type ForceWithPos } from './types'; -import { type PhysicsWorld } from './PhysicsWorld'; - -export class PhysicsObject implements ReplResult { - private body: b2Body; - private shape: b2Shape; - private fixture: b2Fixture; - private forcesCentered: Force[] = []; - private forcesAtAPoint: ForceWithPos[] = []; - - constructor( - position: b2Vec2, - rotation: number, - shape: b2Shape, - isStatic: boolean, - world: PhysicsWorld, - ) { - this.body = world.createBody({ - type: isStatic ? b2BodyType.b2_staticBody : b2BodyType.b2_dynamicBody, - position, - angle: rotation, - }); - this.shape = shape; - - this.fixture = this.body.CreateFixture({ - shape: this.shape, - density: 1, - friction: 1, - }); - } - - public getFixture() { - return this.fixture; - } - - public getMass() { - return this.body.GetMass(); - } - - public setDensity(density: number) { - this.fixture.SetDensity(density); - this.body.ResetMassData(); - } - - public setFriction(friction: number) { - this.fixture.SetFriction(friction); - } - - public getPosition() { - return this.body.GetPosition(); - } - - public setPosition(pos: b2Vec2) { - this.body.SetTransformVec(pos, this.getRotation()); - } - - public getRotation() { - return this.body.GetAngle(); - } - - public setRotation(rot: number) { - this.body.SetAngle(rot); - } - - public getVelocity() { - return this.body.GetLinearVelocity(); - } - - public setVelocity(velc: b2Vec2) { - this.body.SetLinearVelocity(velc); - } - - public getAngularVelocity() { - return this.body.GetAngularVelocity(); - } - - public setAngularVelocity(velc: number) { - this.body.SetAngularVelocity(velc); - } - - public addForceCentered(force: Force) { - this.forcesCentered.push(force); - } - - public addForceAtAPoint(force: Force, pos: b2Vec2) { - this.forcesAtAPoint.push({ - force, - pos, - }); - } - - private applyForcesToCenter(world_time: number) { - this.forcesCentered = this.forcesCentered.filter( - (force: Force) => force.start_time + force.duration > world_time, - ); - - const resForce = this.forcesCentered - .filter((force: Force) => force.start_time < world_time) - .reduce( - (res: b2Vec2, force: Force) => res.Add(force.direction.Scale(force.magnitude)), - new b2Vec2(), - ); - - this.body.ApplyForceToCenter(resForce); - } - - private applyForcesAtAPoint(world_time: number) { - this.forcesAtAPoint = this.forcesAtAPoint.filter( - (forceWithPos: ForceWithPos) => forceWithPos.force.start_time + forceWithPos.force.duration > world_time, - ); - - this.forcesAtAPoint.forEach((forceWithPos) => { - const force = forceWithPos.force; - this.body.ApplyForce( - force.direction.Scale(force.magnitude), - forceWithPos.pos, - ); - }); - } - - public applyForces(world_time: number) { - this.applyForcesToCenter(world_time); - this.applyForcesAtAPoint(world_time); - } - - public isTouching(obj2: PhysicsObject) { - let ce = this.body.GetContactList(); - while (ce !== null) { - if (ce.other === obj2.body && ce.contact.IsTouching()) { - return true; - } - ce = ce.next; - } - return false; - } - - public toReplString = () => ` - Mass: ${this.getMass() - .toFixed(ACCURACY)} - Position: [${this.getPosition().x.toFixed( - ACCURACY, - )},${this.getPosition().y.toFixed(ACCURACY)}] - Velocity: [${this.getVelocity().x.toFixed( - ACCURACY, - )},${this.getVelocity().y.toFixed(ACCURACY)}] - - Rotation: ${this.getRotation() - .toFixed(ACCURACY)} - AngularVelocity: [${this.getAngularVelocity() - .toFixed(ACCURACY)}]`; - - public scale_size(scale: number) { - if (this.shape instanceof b2CircleShape) { - this.shape.m_radius *= scale; - } else if (this.shape instanceof b2PolygonShape) { - const centroid: b2Vec2 = this.shape.m_centroid; - const arr: b2Vec2[] = []; - this.shape.m_vertices.forEach((vec) => { - arr.push( - new b2Vec2( - centroid.x + scale * (vec.x - centroid.x), - centroid.y + scale * (vec.y - centroid.y), - ), - ); - }); - this.shape = new b2PolygonShape() - .Set(arr); - } - const f: b2Fixture = this.fixture; - this.body.DestroyFixture(this.fixture); - this.fixture = this.body.CreateFixture({ - shape: this.shape, - density: f.GetDensity(), - friction: f.GetFriction(), - }); - } -} +/* eslint-disable new-cap */ +// We have to disable linting rules since Box2D functions do not +// follow the same guidelines as the rest of the codebase. + +import { + type b2Body, + type b2Shape, + type b2Fixture, + b2BodyType, + b2CircleShape, + b2PolygonShape, + b2Vec2, +} from '@box2d/core'; +import { type ReplResult } from '../../typings/type_helpers'; + +import { ACCURACY, type Force, type ForceWithPos } from './types'; +import { type PhysicsWorld } from './PhysicsWorld'; + +export class PhysicsObject implements ReplResult { + private body: b2Body; + private shape: b2Shape; + private fixture: b2Fixture; + private forcesCentered: Force[] = []; + private forcesAtAPoint: ForceWithPos[] = []; + + constructor( + position: b2Vec2, + rotation: number, + shape: b2Shape, + isStatic: boolean, + world: PhysicsWorld, + ) { + this.body = world.createBody({ + type: isStatic ? b2BodyType.b2_staticBody : b2BodyType.b2_dynamicBody, + position, + angle: rotation, + }); + this.shape = shape; + + this.fixture = this.body.CreateFixture({ + shape: this.shape, + density: 1, + friction: 1, + }); + } + + public getFixture() { + return this.fixture; + } + + public getMass() { + return this.body.GetMass(); + } + + public setDensity(density: number) { + this.fixture.SetDensity(density); + this.body.ResetMassData(); + } + + public setFriction(friction: number) { + this.fixture.SetFriction(friction); + } + + public getPosition() { + return this.body.GetPosition(); + } + + public setPosition(pos: b2Vec2) { + this.body.SetTransformVec(pos, this.getRotation()); + } + + public getRotation() { + return this.body.GetAngle(); + } + + public setRotation(rot: number) { + this.body.SetAngle(rot); + } + + public getVelocity() { + return this.body.GetLinearVelocity(); + } + + public setVelocity(velc: b2Vec2) { + this.body.SetLinearVelocity(velc); + } + + public getAngularVelocity() { + return this.body.GetAngularVelocity(); + } + + public setAngularVelocity(velc: number) { + this.body.SetAngularVelocity(velc); + } + + public addForceCentered(force: Force) { + this.forcesCentered.push(force); + } + + public addForceAtAPoint(force: Force, pos: b2Vec2) { + this.forcesAtAPoint.push({ + force, + pos, + }); + } + + private applyForcesToCenter(world_time: number) { + this.forcesCentered = this.forcesCentered.filter( + (force: Force) => force.start_time + force.duration > world_time, + ); + + const resForce = this.forcesCentered + .filter((force: Force) => force.start_time < world_time) + .reduce( + (res: b2Vec2, force: Force) => res.Add(force.direction.Scale(force.magnitude)), + new b2Vec2(), + ); + + this.body.ApplyForceToCenter(resForce); + } + + private applyForcesAtAPoint(world_time: number) { + this.forcesAtAPoint = this.forcesAtAPoint.filter( + (forceWithPos: ForceWithPos) => forceWithPos.force.start_time + forceWithPos.force.duration > world_time, + ); + + this.forcesAtAPoint.forEach((forceWithPos) => { + const force = forceWithPos.force; + this.body.ApplyForce( + force.direction.Scale(force.magnitude), + forceWithPos.pos, + ); + }); + } + + public applyForces(world_time: number) { + this.applyForcesToCenter(world_time); + this.applyForcesAtAPoint(world_time); + } + + public isTouching(obj2: PhysicsObject) { + let ce = this.body.GetContactList(); + while (ce !== null) { + if (ce.other === obj2.body && ce.contact.IsTouching()) { + return true; + } + ce = ce.next; + } + return false; + } + + public toReplString = () => ` + Mass: ${this.getMass() + .toFixed(ACCURACY)} + Position: [${this.getPosition().x.toFixed( + ACCURACY, + )},${this.getPosition().y.toFixed(ACCURACY)}] + Velocity: [${this.getVelocity().x.toFixed( + ACCURACY, + )},${this.getVelocity().y.toFixed(ACCURACY)}] + + Rotation: ${this.getRotation() + .toFixed(ACCURACY)} + AngularVelocity: [${this.getAngularVelocity() + .toFixed(ACCURACY)}]`; + + public scale_size(scale: number) { + if (this.shape instanceof b2CircleShape) { + this.shape.m_radius *= scale; + } else if (this.shape instanceof b2PolygonShape) { + const centroid: b2Vec2 = this.shape.m_centroid; + const arr: b2Vec2[] = []; + this.shape.m_vertices.forEach((vec) => { + arr.push( + new b2Vec2( + centroid.x + scale * (vec.x - centroid.x), + centroid.y + scale * (vec.y - centroid.y), + ), + ); + }); + this.shape = new b2PolygonShape() + .Set(arr); + } + const f: b2Fixture = this.fixture; + this.body.DestroyFixture(this.fixture); + this.fixture = this.body.CreateFixture({ + shape: this.shape, + density: f.GetDensity(), + friction: f.GetFriction(), + }); + } +} diff --git a/src/bundles/physics_2d/PhysicsWorld.ts b/src/bundles/physics_2d/PhysicsWorld.ts index b6445db72..3d2dd825a 100644 --- a/src/bundles/physics_2d/PhysicsWorld.ts +++ b/src/bundles/physics_2d/PhysicsWorld.ts @@ -1,135 +1,135 @@ -/* eslint-disable new-cap */ -// We have to disable linting rules since Box2D functions do not -// follow the same guidelines as the rest of the codebase. - -import { - type b2Body, - type b2Fixture, - type b2BodyDef, - b2BodyType, - b2PolygonShape, - type b2StepConfig, - b2Vec2, - b2World, - b2ContactListener, - type b2Contact, -} from '@box2d/core'; -import { type PhysicsObject } from './PhysicsObject'; -import { Timer } from './types'; - -export class PhysicsWorld { - private b2World: b2World; - private physicsObjects: PhysicsObject[]; - private timer: Timer; - private touchingObjects: Map>; - - private iterationsConfig: b2StepConfig = { - velocityIterations: 8, - positionIterations: 3, - }; - - constructor() { - this.b2World = b2World.Create(new b2Vec2()); - this.physicsObjects = []; - this.timer = new Timer(); - this.touchingObjects = new Map>(); - - const contactListener: b2ContactListener = new b2ContactListener(); - contactListener.BeginContact = (contact: b2Contact) => { - const m = this.touchingObjects.get(contact.GetFixtureA()); - if (m === undefined) { - const newMap = new Map(); - newMap.set(contact.GetFixtureB(), this.timer.getTime()); - this.touchingObjects.set(contact.GetFixtureA(), newMap); - } else { - m.set(contact.GetFixtureB(), this.timer.getTime()); - } - }; - contactListener.EndContact = (contact: b2Contact) => { - const contacts = this.touchingObjects.get(contact.GetFixtureA()); - if (contacts) { - contacts.delete(contact.GetFixtureB()); - } - }; - - this.b2World.SetContactListener(contactListener); - } - - public setGravity(gravity: b2Vec2) { - this.b2World.SetGravity(gravity); - } - - public addObject(obj: PhysicsObject) { - this.physicsObjects.push(obj); - return obj; - } - - public createBody(bodyDef: b2BodyDef) { - return this.b2World.CreateBody(bodyDef); - } - - public makeGround(height: number, friction: number) { - const groundBody: b2Body = this.createBody({ - type: b2BodyType.b2_staticBody, - position: new b2Vec2(0, height - 10), - }); - const groundShape: b2PolygonShape = new b2PolygonShape() - .SetAsBox( - 10000, - 10, - ); - - groundBody.CreateFixture({ - shape: groundShape, - density: 1, - friction, - }); - } - - public update(dt: number) { - for (const obj of this.physicsObjects) { - obj.applyForces(this.timer.getTime()); - } - this.b2World.Step(dt, this.iterationsConfig); - this.timer.step(dt); - } - - public simulate(total_time: number) { - const dt = 0.01; - for (let i = 0; i < total_time; i += dt) { - this.update(dt); - } - } - - public getB2World() { - return this.b2World; - } - - public getWorldStatus(): String { - let world_status: String = ` - World time: ${this.timer.toString()} - - Objects: - `; - this.physicsObjects.forEach((obj) => { - world_status += ` - ------------------------ - ${obj.toReplString()} - ------------------------ - `; - }); - return world_status; - } - - public findImpact(obj1: PhysicsObject, obj2: PhysicsObject) { - const m = this.touchingObjects.get(obj1.getFixture()); - if (m === undefined) { - return -1; - } - const time = m.get(obj2.getFixture()); - if (time === undefined) { - return -1; - } - return time; - } -} +/* eslint-disable new-cap */ +// We have to disable linting rules since Box2D functions do not +// follow the same guidelines as the rest of the codebase. + +import { + type b2Body, + type b2Fixture, + type b2BodyDef, + b2BodyType, + b2PolygonShape, + type b2StepConfig, + b2Vec2, + b2World, + b2ContactListener, + type b2Contact, +} from '@box2d/core'; +import { type PhysicsObject } from './PhysicsObject'; +import { Timer } from './types'; + +export class PhysicsWorld { + private b2World: b2World; + private physicsObjects: PhysicsObject[]; + private timer: Timer; + private touchingObjects: Map>; + + private iterationsConfig: b2StepConfig = { + velocityIterations: 8, + positionIterations: 3, + }; + + constructor() { + this.b2World = b2World.Create(new b2Vec2()); + this.physicsObjects = []; + this.timer = new Timer(); + this.touchingObjects = new Map>(); + + const contactListener: b2ContactListener = new b2ContactListener(); + contactListener.BeginContact = (contact: b2Contact) => { + const m = this.touchingObjects.get(contact.GetFixtureA()); + if (m === undefined) { + const newMap = new Map(); + newMap.set(contact.GetFixtureB(), this.timer.getTime()); + this.touchingObjects.set(contact.GetFixtureA(), newMap); + } else { + m.set(contact.GetFixtureB(), this.timer.getTime()); + } + }; + contactListener.EndContact = (contact: b2Contact) => { + const contacts = this.touchingObjects.get(contact.GetFixtureA()); + if (contacts) { + contacts.delete(contact.GetFixtureB()); + } + }; + + this.b2World.SetContactListener(contactListener); + } + + public setGravity(gravity: b2Vec2) { + this.b2World.SetGravity(gravity); + } + + public addObject(obj: PhysicsObject) { + this.physicsObjects.push(obj); + return obj; + } + + public createBody(bodyDef: b2BodyDef) { + return this.b2World.CreateBody(bodyDef); + } + + public makeGround(height: number, friction: number) { + const groundBody: b2Body = this.createBody({ + type: b2BodyType.b2_staticBody, + position: new b2Vec2(0, height - 10), + }); + const groundShape: b2PolygonShape = new b2PolygonShape() + .SetAsBox( + 10000, + 10, + ); + + groundBody.CreateFixture({ + shape: groundShape, + density: 1, + friction, + }); + } + + public update(dt: number) { + for (const obj of this.physicsObjects) { + obj.applyForces(this.timer.getTime()); + } + this.b2World.Step(dt, this.iterationsConfig); + this.timer.step(dt); + } + + public simulate(total_time: number) { + const dt = 0.01; + for (let i = 0; i < total_time; i += dt) { + this.update(dt); + } + } + + public getB2World() { + return this.b2World; + } + + public getWorldStatus(): String { + let world_status: String = ` + World time: ${this.timer.toString()} + + Objects: + `; + this.physicsObjects.forEach((obj) => { + world_status += ` + ------------------------ + ${obj.toReplString()} + ------------------------ + `; + }); + return world_status; + } + + public findImpact(obj1: PhysicsObject, obj2: PhysicsObject) { + const m = this.touchingObjects.get(obj1.getFixture()); + if (m === undefined) { + return -1; + } + const time = m.get(obj2.getFixture()); + if (time === undefined) { + return -1; + } + return time; + } +} diff --git a/src/bundles/physics_2d/functions.ts b/src/bundles/physics_2d/functions.ts index b1637ed1c..960bbba40 100644 --- a/src/bundles/physics_2d/functions.ts +++ b/src/bundles/physics_2d/functions.ts @@ -1,504 +1,504 @@ -/* eslint-disable new-cap */ -// We have to disable linting rules since Box2D functions do not -// follow the same guidelines as the rest of the codebase. - -/** - * @module physics_2d - * @author Muhammad Fikri Bin Abdul Kalam - * @author Yu Jiali - */ - -import context from 'js-slang/context'; - -import { b2CircleShape, b2PolygonShape } from '@box2d/core'; - -import { type Force, Vector2 } from './types'; -import { PhysicsObject } from './PhysicsObject'; -import { PhysicsWorld } from './PhysicsWorld'; - -// Global Variables - -let world: PhysicsWorld | null = null; -const NO_WORLD = new Error('Please call set_gravity first!'); -const MULTIPLE_WORLDS = new Error('You may only call set_gravity once!'); - -// Module's Exposed Functions - -/** - * Makes a 2d vector with the given x and y components. - * - * @param x x-component of new vector - * @param y y-component of new vector - * @returns with x, y as components - * - * @category Main - */ -export function make_vector(x: number, y: number): Vector2 { - return new Vector2(x, y); -} - -/** - * Makes a force with direction vector, magnitude, force duration and start time. - * - * @param dir direction of force - * @param mag magnitude of force - * @param dur duration of force - * @param start start time of force - * @returns new force - * - * @category Dynamics - */ -export function make_force( - dir: Vector2, - mag: number, - dur: number, - start: number, -): Force { - let force: Force = { - direction: dir, - magnitude: mag, - duration: dur, - start_time: start, - }; - return force; -} - -/** - * Creates a new physics world and sets the gravity of the world. - * - * @param v gravity vector - * @example - * ``` - * set_gravity(0, -9.8); // gravity vector for real world - * ``` - * - * @category Main - */ -export function set_gravity(v: Vector2) { - if (world) { - throw MULTIPLE_WORLDS; - } - - world = new PhysicsWorld(); - context.moduleContexts.physics_2d.state = { - world, - }; - world.setGravity(v); -} - -/** - * Makes the ground body of the world. - * - * @param height height of ground - * @param friction friction of ground - * - * @category Main - */ -export function make_ground(height: number, friction: number) { - if (!world) { - throw NO_WORLD; - } - - world.makeGround(height, friction); -} - -/** - * Makes a wall (static box object with no velocity). - * - * @param pos position of the wall - * @param rot rotation of the wall - * @param size size of the wall - * @returns new box (wall) object - * - * @category Main - */ -export function add_wall(pos: Vector2, rot: number, size: Vector2) { - if (!world) { - throw NO_WORLD; - } - - return world.addObject( - new PhysicsObject( - pos, - rot, - new b2PolygonShape() - .SetAsBox(size.x / 2, size.y / 2), - true, - world, - ), - ); -} - -/** - * Makes a box object with given initial position, rotation, velocity, size and add it to the world. - * - * @param pos initial position vector of center - * @param rot initial rotation - * @param velc initial velocity vector - * @param size size - * @returns new box object - * - * @category Body - */ -export function add_box_object( - pos: Vector2, - rot: number, - velc: Vector2, - size: Vector2, - isStatic: boolean, -): PhysicsObject { - if (!world) { - throw NO_WORLD; - } - const newObj: PhysicsObject = new PhysicsObject( - pos, - rot, - new b2PolygonShape() - .SetAsBox(size.x / 2, size.y / 2), - isStatic, - world, - ); - newObj.setVelocity(velc); - return world.addObject(newObj); -} - -/** - * Makes a circle object with given initial position, rotation, velocity, radius and add it to the world. - * - * @param pos initial position vector of center - * @param rot initial rotation - * @param velc initial velocity vector - * @param radius radius - * @returns new circle object - * - * @category Body - */ -export function add_circle_object( - pos: Vector2, - rot: number, - velc: Vector2, - radius: number, - isStatic: boolean, -): PhysicsObject { - if (!world) { - throw NO_WORLD; - } - const newObj: PhysicsObject = new PhysicsObject( - pos, - rot, - new b2CircleShape() - .Set(new Vector2(), radius), - isStatic, - world, - ); - newObj.setVelocity(velc); - return world.addObject(newObj); -} - -/** - * Makes a triangle object with given initial position, rotation, velocity, base, height and add it to the world. - * - * @param pos initial position vector of center - * @param rot initial rotation - * @param velc initial velocity vector - * @param base base - * @param height height - * @returns new triangle object - * - * @category Body - */ -export function add_triangle_object( - pos: Vector2, - rot: number, - velc: Vector2, - base: number, - height: number, - isStatic: boolean, -): PhysicsObject { - if (!world) { - throw NO_WORLD; - } - const newObj: PhysicsObject = new PhysicsObject( - pos, - rot, - new b2PolygonShape() - .Set([ - new Vector2(-base / 2, -height / 2), - new Vector2(base / 2, -height / 2), - new Vector2(0, height / 2), - ]), - isStatic, - world, - ); - newObj.setVelocity(velc); - return world.addObject(newObj); -} - -/** - * Updates the world once with the given time step. - * - * @param dt value of fixed time step - * - * @category Main - */ -export function update_world(dt: number) { - if (!world) { - throw NO_WORLD; - } - - world.update(dt); -} - -/** - * Simulates the world for given duration. - * - * @param total_time total time to simulate - * - * @category Main - */ -export function simulate_world(total_time: number) { - if (!world) { - throw NO_WORLD; - } - - world.simulate(total_time); -} - -/** - * Gets position of the object at current world time. - * - * @param obj existing object - * @returns position of center - * - * @category Body - */ -export function get_position(obj: PhysicsObject): Vector2 { - return new Vector2(obj.getPosition().x, obj.getPosition().y); -} - -/** - * Gets rotation of the object at current world time. - * - * @param obj existing object - * @returns rotation of object - * - * @category Body - */ -export function get_rotation(obj: PhysicsObject): number { - return obj.getRotation(); -} - -/** - * Gets velocity of the object at current world time. - * - * @param obj exisiting object - * @returns velocity vector - * - * @category Body - */ -export function get_velocity(obj: PhysicsObject): Vector2 { - return new Vector2(obj.getVelocity().x, obj.getVelocity().y); -} - -/** - * Gets angular velocity of the object at current world time. - * - * @param obj exisiting object - * @returns angular velocity vector - * - * @category Body - */ -export function get_angular_velocity(obj: PhysicsObject): Vector2 { - return new Vector2(obj.getAngularVelocity()); -} - -/** - * Sets the position of the object. - * - * @param obj existing object - * @param pos new position - * - * @category Body - */ -export function set_position(obj: PhysicsObject, pos: Vector2): void { - obj.setPosition(pos); -} - -/** - * Sets the rotation of the object. - * - * @param obj existing object - * @param rot new rotation - * - * @category Body - */ -export function set_rotation(obj: PhysicsObject, rot: number): void { - obj.setRotation(rot); -} - -/** - * Sets current velocity of the object. - * - * @param obj exisiting object - * @param velc new velocity - * - * @category Body - */ -export function set_velocity(obj: PhysicsObject, velc: Vector2): void { - obj.setVelocity(velc); -} - -/** - * Sets current angular velocity of the object. - * - * @param obj exisiting object - * @param velc angular velocity number - * - * @category Body - */ -export function set_angular_velocity(obj: PhysicsObject, velc: number): void { - return obj.setAngularVelocity(velc); -} - -/** - * Set density of the object. - * - * @param obj existing object - * @param density density - * - * @category Body - */ -export function set_density(obj: PhysicsObject, density: number) { - obj.setDensity(density); -} - -/** - * Resizes the object with given scale factor. - * - * @param obj existinig object - * @param scale scaling size - * - * @category Body - */ -export function scale_size(obj: PhysicsObject, scale: number) { - if (!world) { - throw NO_WORLD; - } - obj.scale_size(scale); -} - -/** - * Sets the friction value of the object. - * - * @param obj - * @param friction - * - * @category Body - */ -export function set_friction(obj: PhysicsObject, friction: number) { - obj.setFriction(friction); -} - -/** - * Checks if two objects are touching at current world time. - * - * @param obj1 - * @param obj2 - * @returns touching state - * - * @category Dynamics - */ -export function is_touching(obj1: PhysicsObject, obj2: PhysicsObject) { - return obj1.isTouching(obj2); -} - -/** - * Gets the impact start time of two currently touching objects. - * Returns -1 if they are not touching. - * - * @param obj1 - * @param obj2 - * @returns impact start time - * - * @category Dynamics - */ -export function impact_start_time(obj1: PhysicsObject, obj2: PhysicsObject) { - if (!world) { - throw NO_WORLD; - } - - return world.findImpact(obj1, obj2); -} - -/** - * Applies a force to given object at its center. - * - * @param force existing force - * @param obj existing object the force applies on - * - * @category Dynamics - */ -export function apply_force_to_center(force: Force, obj: PhysicsObject) { - obj.addForceCentered(force); -} - -/** - * Apllies force to given object at given world point. - * - * @param force existing force - * @param pos world point the force is applied on - * @param obj existing object the force applies on - * - * @category Dynamics - */ -export function apply_force(force: Force, pos: Vector2, obj: PhysicsObject) { - obj.addForceAtAPoint(force, pos); -} - -/** - * Converts a 2d vector into an array. - * - * @param vec 2D vector to convert - * @returns array with [x, y] - * - * @category Main - */ -export function vector_to_array(vec: Vector2) { - return [vec.x, vec.y]; -} - -/** - * Converts an array of 2 numbers into a 2d vector. - * - * @param arr array with [x, y] - * @returns vector 2d - * - * @category Main - */ -export function array_to_vector([x, y]: [number, number]) { - return new Vector2(x, y); -} - -/** - * Adds two vectors together and returns the resultant vector. - * - * @param arr array with [x, y] - * @returns vector 2d - * - * @category Main - */ -export function add_vector(vec1: Vector2, vec2: Vector2) { - return new Vector2(vec1.x + vec2.x, vec1.y + vec2.y); -} - -/** - * Subtract the second vector from the first and returns the resultant vector. - * - * @param arr array with [x, y] - * @returns vector 2d - * - * @category Main - */ -export function subtract_vector(vec1: Vector2, vec2: Vector2) { - return new Vector2(vec1.x - vec2.x, vec1.y - vec2.y); -} +/* eslint-disable new-cap */ +// We have to disable linting rules since Box2D functions do not +// follow the same guidelines as the rest of the codebase. + +/** + * @module physics_2d + * @author Muhammad Fikri Bin Abdul Kalam + * @author Yu Jiali + */ + +import context from 'js-slang/context'; + +import { b2CircleShape, b2PolygonShape } from '@box2d/core'; + +import { type Force, Vector2 } from './types'; +import { PhysicsObject } from './PhysicsObject'; +import { PhysicsWorld } from './PhysicsWorld'; + +// Global Variables + +let world: PhysicsWorld | null = null; +const NO_WORLD = new Error('Please call set_gravity first!'); +const MULTIPLE_WORLDS = new Error('You may only call set_gravity once!'); + +// Module's Exposed Functions + +/** + * Makes a 2d vector with the given x and y components. + * + * @param x x-component of new vector + * @param y y-component of new vector + * @returns with x, y as components + * + * @category Main + */ +export function make_vector(x: number, y: number): Vector2 { + return new Vector2(x, y); +} + +/** + * Makes a force with direction vector, magnitude, force duration and start time. + * + * @param dir direction of force + * @param mag magnitude of force + * @param dur duration of force + * @param start start time of force + * @returns new force + * + * @category Dynamics + */ +export function make_force( + dir: Vector2, + mag: number, + dur: number, + start: number, +): Force { + let force: Force = { + direction: dir, + magnitude: mag, + duration: dur, + start_time: start, + }; + return force; +} + +/** + * Creates a new physics world and sets the gravity of the world. + * + * @param v gravity vector + * @example + * ``` + * set_gravity(0, -9.8); // gravity vector for real world + * ``` + * + * @category Main + */ +export function set_gravity(v: Vector2) { + if (world) { + throw MULTIPLE_WORLDS; + } + + world = new PhysicsWorld(); + context.moduleContexts.physics_2d.state = { + world, + }; + world.setGravity(v); +} + +/** + * Makes the ground body of the world. + * + * @param height height of ground + * @param friction friction of ground + * + * @category Main + */ +export function make_ground(height: number, friction: number) { + if (!world) { + throw NO_WORLD; + } + + world.makeGround(height, friction); +} + +/** + * Makes a wall (static box object with no velocity). + * + * @param pos position of the wall + * @param rot rotation of the wall + * @param size size of the wall + * @returns new box (wall) object + * + * @category Main + */ +export function add_wall(pos: Vector2, rot: number, size: Vector2) { + if (!world) { + throw NO_WORLD; + } + + return world.addObject( + new PhysicsObject( + pos, + rot, + new b2PolygonShape() + .SetAsBox(size.x / 2, size.y / 2), + true, + world, + ), + ); +} + +/** + * Makes a box object with given initial position, rotation, velocity, size and add it to the world. + * + * @param pos initial position vector of center + * @param rot initial rotation + * @param velc initial velocity vector + * @param size size + * @returns new box object + * + * @category Body + */ +export function add_box_object( + pos: Vector2, + rot: number, + velc: Vector2, + size: Vector2, + isStatic: boolean, +): PhysicsObject { + if (!world) { + throw NO_WORLD; + } + const newObj: PhysicsObject = new PhysicsObject( + pos, + rot, + new b2PolygonShape() + .SetAsBox(size.x / 2, size.y / 2), + isStatic, + world, + ); + newObj.setVelocity(velc); + return world.addObject(newObj); +} + +/** + * Makes a circle object with given initial position, rotation, velocity, radius and add it to the world. + * + * @param pos initial position vector of center + * @param rot initial rotation + * @param velc initial velocity vector + * @param radius radius + * @returns new circle object + * + * @category Body + */ +export function add_circle_object( + pos: Vector2, + rot: number, + velc: Vector2, + radius: number, + isStatic: boolean, +): PhysicsObject { + if (!world) { + throw NO_WORLD; + } + const newObj: PhysicsObject = new PhysicsObject( + pos, + rot, + new b2CircleShape() + .Set(new Vector2(), radius), + isStatic, + world, + ); + newObj.setVelocity(velc); + return world.addObject(newObj); +} + +/** + * Makes a triangle object with given initial position, rotation, velocity, base, height and add it to the world. + * + * @param pos initial position vector of center + * @param rot initial rotation + * @param velc initial velocity vector + * @param base base + * @param height height + * @returns new triangle object + * + * @category Body + */ +export function add_triangle_object( + pos: Vector2, + rot: number, + velc: Vector2, + base: number, + height: number, + isStatic: boolean, +): PhysicsObject { + if (!world) { + throw NO_WORLD; + } + const newObj: PhysicsObject = new PhysicsObject( + pos, + rot, + new b2PolygonShape() + .Set([ + new Vector2(-base / 2, -height / 2), + new Vector2(base / 2, -height / 2), + new Vector2(0, height / 2), + ]), + isStatic, + world, + ); + newObj.setVelocity(velc); + return world.addObject(newObj); +} + +/** + * Updates the world once with the given time step. + * + * @param dt value of fixed time step + * + * @category Main + */ +export function update_world(dt: number) { + if (!world) { + throw NO_WORLD; + } + + world.update(dt); +} + +/** + * Simulates the world for given duration. + * + * @param total_time total time to simulate + * + * @category Main + */ +export function simulate_world(total_time: number) { + if (!world) { + throw NO_WORLD; + } + + world.simulate(total_time); +} + +/** + * Gets position of the object at current world time. + * + * @param obj existing object + * @returns position of center + * + * @category Body + */ +export function get_position(obj: PhysicsObject): Vector2 { + return new Vector2(obj.getPosition().x, obj.getPosition().y); +} + +/** + * Gets rotation of the object at current world time. + * + * @param obj existing object + * @returns rotation of object + * + * @category Body + */ +export function get_rotation(obj: PhysicsObject): number { + return obj.getRotation(); +} + +/** + * Gets velocity of the object at current world time. + * + * @param obj exisiting object + * @returns velocity vector + * + * @category Body + */ +export function get_velocity(obj: PhysicsObject): Vector2 { + return new Vector2(obj.getVelocity().x, obj.getVelocity().y); +} + +/** + * Gets angular velocity of the object at current world time. + * + * @param obj exisiting object + * @returns angular velocity vector + * + * @category Body + */ +export function get_angular_velocity(obj: PhysicsObject): Vector2 { + return new Vector2(obj.getAngularVelocity()); +} + +/** + * Sets the position of the object. + * + * @param obj existing object + * @param pos new position + * + * @category Body + */ +export function set_position(obj: PhysicsObject, pos: Vector2): void { + obj.setPosition(pos); +} + +/** + * Sets the rotation of the object. + * + * @param obj existing object + * @param rot new rotation + * + * @category Body + */ +export function set_rotation(obj: PhysicsObject, rot: number): void { + obj.setRotation(rot); +} + +/** + * Sets current velocity of the object. + * + * @param obj exisiting object + * @param velc new velocity + * + * @category Body + */ +export function set_velocity(obj: PhysicsObject, velc: Vector2): void { + obj.setVelocity(velc); +} + +/** + * Sets current angular velocity of the object. + * + * @param obj exisiting object + * @param velc angular velocity number + * + * @category Body + */ +export function set_angular_velocity(obj: PhysicsObject, velc: number): void { + return obj.setAngularVelocity(velc); +} + +/** + * Set density of the object. + * + * @param obj existing object + * @param density density + * + * @category Body + */ +export function set_density(obj: PhysicsObject, density: number) { + obj.setDensity(density); +} + +/** + * Resizes the object with given scale factor. + * + * @param obj existinig object + * @param scale scaling size + * + * @category Body + */ +export function scale_size(obj: PhysicsObject, scale: number) { + if (!world) { + throw NO_WORLD; + } + obj.scale_size(scale); +} + +/** + * Sets the friction value of the object. + * + * @param obj + * @param friction + * + * @category Body + */ +export function set_friction(obj: PhysicsObject, friction: number) { + obj.setFriction(friction); +} + +/** + * Checks if two objects are touching at current world time. + * + * @param obj1 + * @param obj2 + * @returns touching state + * + * @category Dynamics + */ +export function is_touching(obj1: PhysicsObject, obj2: PhysicsObject) { + return obj1.isTouching(obj2); +} + +/** + * Gets the impact start time of two currently touching objects. + * Returns -1 if they are not touching. + * + * @param obj1 + * @param obj2 + * @returns impact start time + * + * @category Dynamics + */ +export function impact_start_time(obj1: PhysicsObject, obj2: PhysicsObject) { + if (!world) { + throw NO_WORLD; + } + + return world.findImpact(obj1, obj2); +} + +/** + * Applies a force to given object at its center. + * + * @param force existing force + * @param obj existing object the force applies on + * + * @category Dynamics + */ +export function apply_force_to_center(force: Force, obj: PhysicsObject) { + obj.addForceCentered(force); +} + +/** + * Apllies force to given object at given world point. + * + * @param force existing force + * @param pos world point the force is applied on + * @param obj existing object the force applies on + * + * @category Dynamics + */ +export function apply_force(force: Force, pos: Vector2, obj: PhysicsObject) { + obj.addForceAtAPoint(force, pos); +} + +/** + * Converts a 2d vector into an array. + * + * @param vec 2D vector to convert + * @returns array with [x, y] + * + * @category Main + */ +export function vector_to_array(vec: Vector2) { + return [vec.x, vec.y]; +} + +/** + * Converts an array of 2 numbers into a 2d vector. + * + * @param arr array with [x, y] + * @returns vector 2d + * + * @category Main + */ +export function array_to_vector([x, y]: [number, number]) { + return new Vector2(x, y); +} + +/** + * Adds two vectors together and returns the resultant vector. + * + * @param arr array with [x, y] + * @returns vector 2d + * + * @category Main + */ +export function add_vector(vec1: Vector2, vec2: Vector2) { + return new Vector2(vec1.x + vec2.x, vec1.y + vec2.y); +} + +/** + * Subtract the second vector from the first and returns the resultant vector. + * + * @param arr array with [x, y] + * @returns vector 2d + * + * @category Main + */ +export function subtract_vector(vec1: Vector2, vec2: Vector2) { + return new Vector2(vec1.x - vec2.x, vec1.y - vec2.y); +} diff --git a/src/bundles/physics_2d/index.ts b/src/bundles/physics_2d/index.ts index 361759d9b..8d44ccab9 100644 --- a/src/bundles/physics_2d/index.ts +++ b/src/bundles/physics_2d/index.ts @@ -1,118 +1,118 @@ -/** - * 2D Phyiscs simulation module for Source Academy. - * - * A vector is defined by its coordinates (x and y). The 2D vector is used to - * represent direction, size, position, velocity and other physical attributes in - * the physics world. Vector manipulation and transformations between vector and array - * types are supported. - * - *
- * - * A force is defined by its direction (a vector), its magnitude, duration and - * start time. A force is only actively applied if: - * ``` - * diff > 0 && diff < duration, where diff is world time - start time - * ``` - * - *
- * - * A world is the single physics world the module is based on. - * - * - `set_gravity` needs to be called once at the start of the program to initialize the world - * and set the gravity. - * - `make_ground` and `add_wall` are optional but recommended to be used to set boundaries - * in the world. - * - *
- * - * An object is initially defined in the add function by: - * - shape: which add function was used (e.g. `add_box_object`) - * - position: initial position - * - velocity: initial velocity - * - size: initial size (depends on the shape of the object) - * - rotation: initial rotation - * - isStatic (whether it is affected by physics) - * - * There are also additional attributes that can be set after an object has been added: - * - density: mass per area of object - * - friction: how much friction the object surface has - * - * There are two ways to apply a force on a given object: - * - `apply_force`: applies a force to an object at a given object - * - `apply_force_to_center`: applies a force to an object directly at its center - * - * Detection of collision and precise starting time are provided by: - * - `is_touching` - * - `impact_start_time` - * - *
- * - * After adding objects to the world, calling `update_world` will simulate the world.\ - * The suggested time step is 1/60 (seconds). - * - * Visualization of the physics world can also be seen in the display tab. -* - *
- * - * The following example simulates a free fall of a circle object. - * ``` - * import { set_gravity, make_vector, add_circle_object, update_world } from "physics_2d"; - * - * const gravity = make_vector(0, -9.8); - * set_gravity(gravity); - * - * make_ground(0, 1); - * - * const pos = make_vector(0, 100); - * const velc = make_vector(0, 0); - * add_circle_object(pos, 0, velc, 10, false); - * - * for (let i = 0; i < 10; i = i + 1) { - * update_world(1/60); - * } - * ``` - *
- * - * @module physics_2d - * @author Muhammad Fikri Bin Abdul Kalam - * @author Yu Jiali - */ -export { - set_gravity, - make_ground, - add_wall, - - make_vector, - make_force, - - add_box_object, - add_circle_object, - add_triangle_object, - - set_density, - set_friction, - scale_size, - - get_position, - set_position, - get_rotation, - set_rotation, - get_velocity, - set_velocity, - get_angular_velocity, - set_angular_velocity, - - apply_force, - apply_force_to_center, - - is_touching, - impact_start_time, - - update_world, - simulate_world, - - vector_to_array, - array_to_vector, - add_vector, - subtract_vector, -} from './functions'; +/** + * 2D Phyiscs simulation module for Source Academy. + * + * A vector is defined by its coordinates (x and y). The 2D vector is used to + * represent direction, size, position, velocity and other physical attributes in + * the physics world. Vector manipulation and transformations between vector and array + * types are supported. + * + *
+ * + * A force is defined by its direction (a vector), its magnitude, duration and + * start time. A force is only actively applied if: + * ``` + * diff > 0 && diff < duration, where diff is world time - start time + * ``` + * + *
+ * + * A world is the single physics world the module is based on. + * + * - `set_gravity` needs to be called once at the start of the program to initialize the world + * and set the gravity. + * - `make_ground` and `add_wall` are optional but recommended to be used to set boundaries + * in the world. + * + *
+ * + * An object is initially defined in the add function by: + * - shape: which add function was used (e.g. `add_box_object`) + * - position: initial position + * - velocity: initial velocity + * - size: initial size (depends on the shape of the object) + * - rotation: initial rotation + * - isStatic (whether it is affected by physics) + * + * There are also additional attributes that can be set after an object has been added: + * - density: mass per area of object + * - friction: how much friction the object surface has + * + * There are two ways to apply a force on a given object: + * - `apply_force`: applies a force to an object at a given object + * - `apply_force_to_center`: applies a force to an object directly at its center + * + * Detection of collision and precise starting time are provided by: + * - `is_touching` + * - `impact_start_time` + * + *
+ * + * After adding objects to the world, calling `update_world` will simulate the world.\ + * The suggested time step is 1/60 (seconds). + * + * Visualization of the physics world can also be seen in the display tab. +* + *
+ * + * The following example simulates a free fall of a circle object. + * ``` + * import { set_gravity, make_vector, add_circle_object, update_world } from "physics_2d"; + * + * const gravity = make_vector(0, -9.8); + * set_gravity(gravity); + * + * make_ground(0, 1); + * + * const pos = make_vector(0, 100); + * const velc = make_vector(0, 0); + * add_circle_object(pos, 0, velc, 10, false); + * + * for (let i = 0; i < 10; i = i + 1) { + * update_world(1/60); + * } + * ``` + *
+ * + * @module physics_2d + * @author Muhammad Fikri Bin Abdul Kalam + * @author Yu Jiali + */ +export { + set_gravity, + make_ground, + add_wall, + + make_vector, + make_force, + + add_box_object, + add_circle_object, + add_triangle_object, + + set_density, + set_friction, + scale_size, + + get_position, + set_position, + get_rotation, + set_rotation, + get_velocity, + set_velocity, + get_angular_velocity, + set_angular_velocity, + + apply_force, + apply_force_to_center, + + is_touching, + impact_start_time, + + update_world, + simulate_world, + + vector_to_array, + array_to_vector, + add_vector, + subtract_vector, +} from './functions'; diff --git a/src/bundles/physics_2d/types.ts b/src/bundles/physics_2d/types.ts index 95e890440..272160c34 100644 --- a/src/bundles/physics_2d/types.ts +++ b/src/bundles/physics_2d/types.ts @@ -1,44 +1,44 @@ -/* eslint-disable new-cap */ -// We have to disable linting rules since Box2D functions do not -// follow the same guidelines as the rest of the codebase. - -import { b2Vec2 } from '@box2d/core'; -import { type ReplResult } from '../../typings/type_helpers'; - -export const ACCURACY = 2; -export class Vector2 extends b2Vec2 implements ReplResult { - public toReplString = () => `Vector2D: [${this.x}, ${this.y}]`; -} - -export type Force = { - direction: b2Vec2; - magnitude: number; - duration: number; - start_time: number; -}; - -export type ForceWithPos = { - force: Force; - pos: b2Vec2; -}; - -export class Timer { - private time: number; - - constructor() { - this.time = 0; - } - - public step(dt: number) { - this.time += dt; - return this.time; - } - - public getTime() { - return this.time; - } - - public toString() { - return `${this.time.toFixed(4)}`; - } -} +/* eslint-disable new-cap */ +// We have to disable linting rules since Box2D functions do not +// follow the same guidelines as the rest of the codebase. + +import { b2Vec2 } from '@box2d/core'; +import { type ReplResult } from '../../typings/type_helpers'; + +export const ACCURACY = 2; +export class Vector2 extends b2Vec2 implements ReplResult { + public toReplString = () => `Vector2D: [${this.x}, ${this.y}]`; +} + +export type Force = { + direction: b2Vec2; + magnitude: number; + duration: number; + start_time: number; +}; + +export type ForceWithPos = { + force: Force; + pos: b2Vec2; +}; + +export class Timer { + private time: number; + + constructor() { + this.time = 0; + } + + public step(dt: number) { + this.time += dt; + return this.time; + } + + public getTime() { + return this.time; + } + + public toString() { + return `${this.time.toFixed(4)}`; + } +} diff --git a/src/bundles/pix_n_flix/constants.ts b/src/bundles/pix_n_flix/constants.ts index 1245489a7..d34117f26 100644 --- a/src/bundles/pix_n_flix/constants.ts +++ b/src/bundles/pix_n_flix/constants.ts @@ -1,14 +1,14 @@ -// Default values of video -export const DEFAULT_WIDTH: number = 400; -export const DEFAULT_HEIGHT: number = 300; -export const DEFAULT_FPS: number = 10; -export const DEFAULT_VOLUME: number = 0.5; -export const DEFAULT_LOOP: number = Infinity; - -// Maximum values allowed for video -export const MAX_HEIGHT: number = 1024; -export const MIN_HEIGHT: number = 1; -export const MAX_WIDTH: number = 1024; -export const MIN_WIDTH: number = 1; -export const MAX_FPS: number = 60; -export const MIN_FPS: number = 1; +// Default values of video +export const DEFAULT_WIDTH: number = 400; +export const DEFAULT_HEIGHT: number = 300; +export const DEFAULT_FPS: number = 10; +export const DEFAULT_VOLUME: number = 0.5; +export const DEFAULT_LOOP: number = Infinity; + +// Maximum values allowed for video +export const MAX_HEIGHT: number = 1024; +export const MIN_HEIGHT: number = 1; +export const MAX_WIDTH: number = 1024; +export const MIN_WIDTH: number = 1; +export const MAX_FPS: number = 60; +export const MIN_FPS: number = 1; diff --git a/src/bundles/pix_n_flix/functions.ts b/src/bundles/pix_n_flix/functions.ts index 8561c68b4..867dc24aa 100644 --- a/src/bundles/pix_n_flix/functions.ts +++ b/src/bundles/pix_n_flix/functions.ts @@ -1,778 +1,778 @@ -/** - * The pix_n_flix module allows us to process still images and videos. - * - * An Image (which is a still image or a frame of a video) is a - * two-dimensional array of Pixels, and a Pixel consists of red, blue and green color - * values, each ranging from 0 to 255. To access these color values of a Pixel, we - * provide the functions red_of, blue_of and green_of. - * - * A central element of pix_n_flix is the notion of a Filter, a function that is applied - * to two Images: the source Image and the destination Image. When a Filter is installed - * (using the function install_filter), it transforms each source Image from the live camera - * or from a local/remote file to a destination Image that is then displayed on screen - * in the Source Academy "Pix N Flix" tab (with a camera icon). - * - * The dimensions (i.e. width and height) of the displayed images can be set by the user using - * the function set_dimensions, and all source and destination Images of the Filters will - * also be set to the same dimensions. To access the current dimensions of the Images, the user - * can use the functions image_width and image_height. - * - * @module pix_n_flix - */ - -/* eslint-disable @typescript-eslint/no-shadow */ -import { - type CanvasElement, - type VideoElement, - type ErrorLogger, - type StartPacket, - type Pixel, - type Pixels, - type Filter, - type Queue, - type TabsPacket, - type BundlePacket, - InputFeed, - type ImageElement, -} from './types'; - -import { - DEFAULT_WIDTH, - DEFAULT_HEIGHT, - DEFAULT_FPS, - DEFAULT_VOLUME, - MAX_HEIGHT, - MIN_HEIGHT, - MAX_WIDTH, - MIN_WIDTH, - MAX_FPS, - MIN_FPS, - DEFAULT_LOOP, -} from './constants'; - -// Global Variables -let WIDTH: number = DEFAULT_WIDTH; -let HEIGHT: number = DEFAULT_HEIGHT; -let FPS: number = DEFAULT_FPS; -let VOLUME: number = DEFAULT_VOLUME; -let LOOP_COUNT: number = DEFAULT_LOOP; - -let imageElement: ImageElement; -let videoElement: VideoElement; -let canvasElement: CanvasElement; -let canvasRenderingContext: CanvasRenderingContext2D; -let errorLogger: ErrorLogger; -let tabsPackage: TabsPacket; - -const pixels: Pixels = []; -const temporaryPixels: Pixels = []; -let filter: Filter = copy_image; - -let toRunLateQueue: boolean = false; -let videoIsPlaying: boolean = false; - -let requestId: number; -let prevTime: number | null = null; -let totalElapsedTime: number = 0; -let playCount: number = 0; - -let inputFeed: InputFeed = InputFeed.Camera; -let url: string = ''; - -// Images dont aspect ratio correctly -let keepAspectRatio: boolean = true; -let intrinsicWidth: number = WIDTH; -let intrinsicHeight: number = HEIGHT; -let displayWidth: number = WIDTH; -let displayHeight: number = HEIGHT; - -// ============================================================================= -// Module's Private Functions -// ============================================================================= - -/** @hidden */ -function setupData(): void { - for (let i = 0; i < HEIGHT; i += 1) { - pixels[i] = []; - temporaryPixels[i] = []; - for (let j = 0; j < WIDTH; j += 1) { - pixels[i][j] = [0, 0, 0, 255]; - temporaryPixels[i][j] = [0, 0, 0, 255]; - } - } -} - -/** @hidden */ -function isPixelFilled(pixel: Pixel): boolean { - let ok = true; - for (let i = 0; i < 4; i += 1) { - if (pixel[i] >= 0 && pixel[i] <= 255) { - continue; - } - ok = false; - pixel[i] = 0; - } - return ok; -} - -/** @hidden */ -function writeToBuffer(buffer: Uint8ClampedArray, data: Pixels) { - let ok: boolean = true; - - for (let i = 0; i < HEIGHT; i += 1) { - for (let j = 0; j < WIDTH; j += 1) { - const p = i * WIDTH * 4 + j * 4; - if (isPixelFilled(data[i][j]) === false) { - ok = false; - } - buffer[p] = data[i][j][0]; - buffer[p + 1] = data[i][j][1]; - buffer[p + 2] = data[i][j][2]; - buffer[p + 3] = data[i][j][3]; - } - } - - if (!ok) { - const warningMessage - = 'You have invalid values for some pixels! Reseting them to default (0)'; - console.warn(warningMessage); - errorLogger(warningMessage, false); - } -} - -/** @hidden */ -function readFromBuffer(pixelData: Uint8ClampedArray, src: Pixels) { - for (let i = 0; i < HEIGHT; i += 1) { - for (let j = 0; j < WIDTH; j += 1) { - const p = i * WIDTH * 4 + j * 4; - src[i][j] = [ - pixelData[p], - pixelData[p + 1], - pixelData[p + 2], - pixelData[p + 3], - ]; - } - } -} - -/** @hidden */ -function drawImage(source: VideoElement | ImageElement): void { - if (keepAspectRatio) { - canvasRenderingContext.rect(0, 0, WIDTH, HEIGHT); - canvasRenderingContext.fill(); - canvasRenderingContext.drawImage( - source, - 0, - 0, - intrinsicWidth, - intrinsicHeight, - (WIDTH - displayWidth) / 2, - (HEIGHT - displayHeight) / 2, - displayWidth, - displayHeight, - ); - } else canvasRenderingContext.drawImage(source, 0, 0, WIDTH, HEIGHT); - - const pixelObj = canvasRenderingContext.getImageData(0, 0, WIDTH, HEIGHT); - readFromBuffer(pixelObj.data, pixels); - - // Runtime checks to guard against crashes - try { - filter(pixels, temporaryPixels); - writeToBuffer(pixelObj.data, temporaryPixels); - } catch (e: any) { - console.error(JSON.stringify(e)); - const errMsg = `There is an error with filter function, filter will be reset to default. ${e.name}: ${e.message}`; - console.error(errMsg); - - if (!e.name) { - errorLogger( - 'There is an error with filter function (error shown below). Filter will be reset back to the default. If you are facing an infinite loop error, you can consider increasing the timeout period (clock icon) at the top / reducing the frame dimensions.', - ); - - errorLogger([e], true); - } else { - errorLogger(errMsg, false); - } - - filter = copy_image; - filter(pixels, temporaryPixels); - } - - canvasRenderingContext.putImageData(pixelObj, 0, 0); -} - -/** @hidden */ -function draw(timestamp: number): void { - requestId = window.requestAnimationFrame(draw); - - if (prevTime === null) prevTime = timestamp; - - const elapsed = timestamp - prevTime; - if (elapsed > 1000 / FPS && videoIsPlaying) { - drawImage(videoElement); - prevTime = timestamp; - totalElapsedTime += elapsed; - if (toRunLateQueue) { - // eslint-disable-next-line @typescript-eslint/no-use-before-define - lateQueue(); - toRunLateQueue = false; - } - } -} - -/** @hidden */ -function playVideoElement() { - if (!videoIsPlaying) { - videoElement - .play() - .then(() => { - videoIsPlaying = true; - }) - .catch((err) => { - console.warn(err); - }); - } -} - -/** @hidden */ -function pauseVideoElement() { - if (videoIsPlaying) { - videoElement.pause(); - videoIsPlaying = false; - } -} - -/** @hidden */ -function startVideo(): void { - if (videoIsPlaying) return; - if (inputFeed === InputFeed.Camera) videoIsPlaying = true; - else playVideoElement(); - requestId = window.requestAnimationFrame(draw); -} - -/** - * Stops the loop that is drawing on image. - * - * @hidden - */ -function stopVideo(): void { - if (!videoIsPlaying) return; - if (inputFeed === InputFeed.Camera) videoIsPlaying = false; - else pauseVideoElement(); - window.cancelAnimationFrame(requestId); - prevTime = null; -} - -/** @hidden */ -function setAspectRatioDimensions(w: number, h: number): void { - intrinsicHeight = h; - intrinsicWidth = w; - const scale = Math.min(WIDTH / w, HEIGHT / h); - displayWidth = scale * w; - displayHeight = scale * h; -} - -/** @hidden */ -function loadMedia(): void { - if (!navigator.mediaDevices.getUserMedia) { - const errMsg = 'The browser you are using does not support getUserMedia'; - console.error(errMsg); - errorLogger(errMsg, false); - } - - // If video is already part of bundle state - if (videoElement.srcObject) return; - - navigator.mediaDevices - .getUserMedia({ video: true }) - .then((stream) => { - videoElement.srcObject = stream; - videoElement.onloadedmetadata = () => setAspectRatioDimensions( - videoElement.videoWidth, - videoElement.videoHeight, - ); - toRunLateQueue = true; - }) - .catch((error) => { - const errorMessage = `${error.name}: ${error.message}`; - console.error(errorMessage); - errorLogger(errorMessage, false); - }); - - startVideo(); -} - -/** @hidden */ -function loadAlternative(): void { - try { - if (inputFeed === InputFeed.VideoURL) { - videoElement.src = url; - startVideo(); - } else if (inputFeed === InputFeed.ImageURL) { - imageElement.src = url; - } - } catch (e: any) { - console.error(JSON.stringify(e)); - const errMsg = `There is an error loading the URL. ${e.name}: ${e.message}`; - console.error(errMsg); - loadMedia(); - return; - } - toRunLateQueue = true; - - /** Setting Up videoElement */ - videoElement.crossOrigin = 'anonymous'; - videoElement.onended = () => { - playCount++; - if (playCount >= LOOP_COUNT) { - playCount = 0; - - tabsPackage.onClickStill(); - } else { - stopVideo(); - startVideo(); - } - }; - videoElement.onloadedmetadata = () => { - setAspectRatioDimensions(videoElement.videoWidth, videoElement.videoHeight); - }; - - /** Setting Up imageElement */ - imageElement.crossOrigin = 'anonymous'; - imageElement.onload = () => { - setAspectRatioDimensions( - imageElement.naturalWidth, - imageElement.naturalHeight, - ); - drawImage(imageElement); - }; -} - -/** - * Update the FPS - * - * @hidden - */ -function updateFPS(fps: number): void { - if (fps < MIN_FPS || fps > MAX_FPS) return; - FPS = fps; -} - -/** - * Update the image dimensions. - * - * @hidden - */ -function updateDimensions(w: number, h: number): void { - // ignore if no change or bad inputs - if ( - (w === WIDTH && h === HEIGHT) - || w > MAX_WIDTH - || w < MIN_WIDTH - || h > MAX_HEIGHT - || h < MIN_HEIGHT - ) { - return; - } - - const status = videoIsPlaying; - stopVideo(); - - WIDTH = w; - HEIGHT = h; - - imageElement.width = w; - imageElement.height = h; - videoElement.width = w; - videoElement.height = h; - canvasElement.width = w; - canvasElement.height = h; - - setupData(); - - if (!status) { - setTimeout(() => stopVideo(), 50); - return; - } - - startVideo(); -} - -/** - * Updates the volume of the local video - * - * @hidden - */ -function updateVolume(v: number): void { - VOLUME = Math.max(0.0, Math.min(1.0, v)); - videoElement.volume = VOLUME; -} - -// queue is run when init is called -let queue: Queue = () => {}; - -/** - * Adds function to the queue - * - * @hidden - */ -function enqueue(funcToAdd: Queue): void { - const funcToRunFirst: Queue = queue; - queue = () => { - funcToRunFirst(); - funcToAdd(); - }; -} - -// lateQueue is run after media has properly loaded -let lateQueue: Queue = () => {}; - -/** - * Adds function to the lateQueue - * - * @hidden - */ -function lateEnqueue(funcToAdd: Queue): void { - const funcToRunFirst: Queue = lateQueue; - lateQueue = () => { - funcToRunFirst(); - funcToAdd(); - }; -} - -/** - * Used to initialise the video library. - * - * @returns a BundlePackage object containing Video's properties - * and other miscellaneous information relevant to tabs. - * @hidden - */ -function init( - image: ImageElement, - video: VideoElement, - canvas: CanvasElement, - _errorLogger: ErrorLogger, - _tabsPackage: TabsPacket, -): BundlePacket { - imageElement = image; - videoElement = video; - canvasElement = canvas; - errorLogger = _errorLogger; - tabsPackage = _tabsPackage; - const context = canvasElement.getContext('2d'); - if (!context) throw new Error('Canvas context should not be null.'); - canvasRenderingContext = context; - setupData(); - if (inputFeed === InputFeed.Camera) { - loadMedia(); - } else { - loadAlternative(); - } - queue(); - return { - HEIGHT, - WIDTH, - FPS, - VOLUME, - inputFeed, - }; -} - -/** - * Destructor that does necessary cleanup. - * - * @hidden - */ -function deinit(): void { - stopVideo(); - const stream = videoElement.srcObject; - if (!stream) { - return; - } - stream.getTracks() - .forEach((track) => { - track.stop(); - }); -} - -// ============================================================================= -// Module's Exposed Functions -// ============================================================================= - -/** - * Starts processing the image or video using the installed filter. - */ -export function start(): StartPacket { - return { - toReplString: () => '[Pix N Flix]', - init, - deinit, - startVideo, - stopVideo, - updateFPS, - updateVolume, - updateDimensions, - }; -} - -/** - * Returns the red component of the given pixel. - * - * @param pixel The given pixel - * @returns The red component as a number between 0 and 255 - */ -export function red_of(pixel: Pixel): number { - // returns the red value of pixel respectively - return pixel[0]; -} - -/** - * Returns the green component of the given pixel. - * - * @param pixel The given pixel - * @returns The green component as a number between 0 and 255 - */ -export function green_of(pixel: Pixel): number { - // returns the green value of pixel respectively - return pixel[1]; -} - -/** - * Returns the blue component of the given pixel. - * - * @param pixel The given pixel - * @returns The blue component as a number between 0 and 255 - */ -export function blue_of(pixel: Pixel): number { - // returns the blue value of pixel respectively - return pixel[2]; -} - -/** - * Returns the alpha component of the given pixel. - * - * @param pixel The given pixel - * @returns The alpha component as a number between 0 and 255 - */ -export function alpha_of(pixel: Pixel): number { - // returns the alpha value of pixel respectively - return pixel[3]; -} - -/** - * Assigns the given red, green, blue and alpha component values to - * the given pixel. - * - * @param pixel The given pixel - * @param r The red component as a number between 0 and 255 - * @param g The green component as a number between 0 and 255 - * @param b The blue component as a number between 0 and 255 - * @param a The alpha component as a number between 0 and 255 - */ -export function set_rgba( - pixel: Pixel, - r: number, - g: number, - b: number, - a: number, -): void { - // assigns the r,g,b values to this pixel - pixel[0] = r; - pixel[1] = g; - pixel[2] = b; - pixel[3] = a; -} - -/** - * Returns the current height of the displayed images in - * pixels, i.e. the number of pixels in the vertical dimension. - * - * @returns The height of the displayed images (in pixels) - */ -export function image_height(): number { - return HEIGHT; -} - -/** - * Returns the current width of the displayed images in - * pixels, i.e. the number of pixels in the horizontal dimension. - * - * @returns The width of the displayed images (in pixels) - */ -export function image_width(): number { - return WIDTH; -} - -/** - * The default filter that just copies the source image to the - * destination image. - * - * @param src Source image - * @param dest Destination image - */ -export function copy_image(src: Pixels, dest: Pixels): void { - for (let i = 0; i < HEIGHT; i += 1) { - for (let j = 0; j < WIDTH; j += 1) { - dest[i][j] = src[i][j]; - } - } -} - -/** - * Installs the given filter to be used to transform each source image from - * the live camera or from a local/remote file to a destination image that - * is then displayed on screen. - * - * A filter is a function that is applied to two - * two-dimensional arrays of Pixels: - * the source image and the destination image. - * - * @param filter The filter to be installed - */ -export function install_filter(_filter: Filter): void { - filter = _filter; -} - -/** - * Resets the installed filter to the default filter. - */ -export function reset_filter(): void { - install_filter(copy_image); -} - -/** - * Creates a black image. - * - * @hidden - */ -function new_image(): Pixels { - const img: Pixels = []; - for (let i = 0; i < HEIGHT; i += 1) { - img[i] = []; - for (let j = 0; j < WIDTH; j += 1) { - img[i][j] = [0, 0, 0, 255]; - } - } - return img; -} - -/** - * Returns a new filter that is equivalent to applying - * filter1 and then filter2. - * - * @param filter1 The first filter - * @param filter2 The second filter - * @returns The filter equivalent to applying filter1 and then filter2 - */ -export function compose_filter(filter1: Filter, filter2: Filter): Filter { - return (src, dest) => { - const temp = new_image(); - filter1(src, temp); - filter2(temp, dest); - }; -} - -/** - * Pauses the video at a set time after the video starts. - * - * @param pause_time Time in ms after the video starts. - */ -export function pause_at(pause_time: number): void { - // prevent negative pause_time - lateEnqueue(() => { - setTimeout( - tabsPackage.onClickStill, - pause_time >= 0 ? pause_time : -pause_time, - ); - }); -} - -/** - * Sets the diemsions of the displayed images. - * Note: Only accepts width and height values within the range of 1 to 500. - * - * @param width The width of the displayed images (default value: 300) - * @param height The height of the displayed images (default value: 400) - */ -export function set_dimensions(width: number, height: number): void { - enqueue(() => updateDimensions(width, height)); -} - -/** - * Sets the framerate (i.e. frames per second (FPS)) of the video. - * Note: Only accepts FPS values within the range of 2 to 30. - * - * @param fps FPS of video (default value: 10) - */ -export function set_fps(fps: number): void { - enqueue(() => updateFPS(fps)); -} - -/** - * Sets the audio volume of the local video file played. - * Note: Only accepts volume value within the range of 0 to 100. - * - * @param volume Volume of video (Default value of 50) - */ -export function set_volume(volume: number): void { - enqueue(() => updateVolume(Math.max(0, Math.min(100, volume) / 100.0))); -} - -/** - * Sets pix_n_flix to use video or image feed from a local file - * instead of using the default live camera feed. - */ -export function use_local_file(): void { - inputFeed = InputFeed.Local; -} - -/** - * Sets pix_n_flix to use the image from the given URL as the image feed - * instead of using the default live camera feed. - * - * @param URL URL of the image - */ -export function use_image_url(URL: string): void { - inputFeed = InputFeed.ImageURL; - url = URL; -} - -/** - * Sets pix_n_flix to use the video from the given URL as the video feed - * instead of using the default live camera feed. - * - * @param URL URL of the video - */ -export function use_video_url(URL: string): void { - inputFeed = InputFeed.VideoURL; - url = URL; -} - -/** - * Returns the elapsed time in milliseconds since the start of the video. - * - * @returns The elapsed time in milliseconds since the start of the video - */ -export function get_video_time(): number { - return totalElapsedTime; -} - -/** - * Sets pix_n_flix to preserve the aspect ratio of the video or image - * - * @param keepAspectRatio to keep aspect ratio. (Default value of true) - */ -export function keep_aspect_ratio(_keepAspectRatio: boolean): void { - keepAspectRatio = _keepAspectRatio; -} - -/** - * Sets the number of times the video is played. - * If the number of times the video repeats is negative, the video will loop forever. - * - * @param n number of times the video repeats after the first iteration. If n < 1, n will be taken to be 1. (Default value of Infinity) - */ -export function set_loop_count(n: number): void { - LOOP_COUNT = n; -} +/** + * The pix_n_flix module allows us to process still images and videos. + * + * An Image (which is a still image or a frame of a video) is a + * two-dimensional array of Pixels, and a Pixel consists of red, blue and green color + * values, each ranging from 0 to 255. To access these color values of a Pixel, we + * provide the functions red_of, blue_of and green_of. + * + * A central element of pix_n_flix is the notion of a Filter, a function that is applied + * to two Images: the source Image and the destination Image. When a Filter is installed + * (using the function install_filter), it transforms each source Image from the live camera + * or from a local/remote file to a destination Image that is then displayed on screen + * in the Source Academy "Pix N Flix" tab (with a camera icon). + * + * The dimensions (i.e. width and height) of the displayed images can be set by the user using + * the function set_dimensions, and all source and destination Images of the Filters will + * also be set to the same dimensions. To access the current dimensions of the Images, the user + * can use the functions image_width and image_height. + * + * @module pix_n_flix + */ + +/* eslint-disable @typescript-eslint/no-shadow */ +import { + type CanvasElement, + type VideoElement, + type ErrorLogger, + type StartPacket, + type Pixel, + type Pixels, + type Filter, + type Queue, + type TabsPacket, + type BundlePacket, + InputFeed, + type ImageElement, +} from './types'; + +import { + DEFAULT_WIDTH, + DEFAULT_HEIGHT, + DEFAULT_FPS, + DEFAULT_VOLUME, + MAX_HEIGHT, + MIN_HEIGHT, + MAX_WIDTH, + MIN_WIDTH, + MAX_FPS, + MIN_FPS, + DEFAULT_LOOP, +} from './constants'; + +// Global Variables +let WIDTH: number = DEFAULT_WIDTH; +let HEIGHT: number = DEFAULT_HEIGHT; +let FPS: number = DEFAULT_FPS; +let VOLUME: number = DEFAULT_VOLUME; +let LOOP_COUNT: number = DEFAULT_LOOP; + +let imageElement: ImageElement; +let videoElement: VideoElement; +let canvasElement: CanvasElement; +let canvasRenderingContext: CanvasRenderingContext2D; +let errorLogger: ErrorLogger; +let tabsPackage: TabsPacket; + +const pixels: Pixels = []; +const temporaryPixels: Pixels = []; +let filter: Filter = copy_image; + +let toRunLateQueue: boolean = false; +let videoIsPlaying: boolean = false; + +let requestId: number; +let prevTime: number | null = null; +let totalElapsedTime: number = 0; +let playCount: number = 0; + +let inputFeed: InputFeed = InputFeed.Camera; +let url: string = ''; + +// Images dont aspect ratio correctly +let keepAspectRatio: boolean = true; +let intrinsicWidth: number = WIDTH; +let intrinsicHeight: number = HEIGHT; +let displayWidth: number = WIDTH; +let displayHeight: number = HEIGHT; + +// ============================================================================= +// Module's Private Functions +// ============================================================================= + +/** @hidden */ +function setupData(): void { + for (let i = 0; i < HEIGHT; i += 1) { + pixels[i] = []; + temporaryPixels[i] = []; + for (let j = 0; j < WIDTH; j += 1) { + pixels[i][j] = [0, 0, 0, 255]; + temporaryPixels[i][j] = [0, 0, 0, 255]; + } + } +} + +/** @hidden */ +function isPixelFilled(pixel: Pixel): boolean { + let ok = true; + for (let i = 0; i < 4; i += 1) { + if (pixel[i] >= 0 && pixel[i] <= 255) { + continue; + } + ok = false; + pixel[i] = 0; + } + return ok; +} + +/** @hidden */ +function writeToBuffer(buffer: Uint8ClampedArray, data: Pixels) { + let ok: boolean = true; + + for (let i = 0; i < HEIGHT; i += 1) { + for (let j = 0; j < WIDTH; j += 1) { + const p = i * WIDTH * 4 + j * 4; + if (isPixelFilled(data[i][j]) === false) { + ok = false; + } + buffer[p] = data[i][j][0]; + buffer[p + 1] = data[i][j][1]; + buffer[p + 2] = data[i][j][2]; + buffer[p + 3] = data[i][j][3]; + } + } + + if (!ok) { + const warningMessage + = 'You have invalid values for some pixels! Reseting them to default (0)'; + console.warn(warningMessage); + errorLogger(warningMessage, false); + } +} + +/** @hidden */ +function readFromBuffer(pixelData: Uint8ClampedArray, src: Pixels) { + for (let i = 0; i < HEIGHT; i += 1) { + for (let j = 0; j < WIDTH; j += 1) { + const p = i * WIDTH * 4 + j * 4; + src[i][j] = [ + pixelData[p], + pixelData[p + 1], + pixelData[p + 2], + pixelData[p + 3], + ]; + } + } +} + +/** @hidden */ +function drawImage(source: VideoElement | ImageElement): void { + if (keepAspectRatio) { + canvasRenderingContext.rect(0, 0, WIDTH, HEIGHT); + canvasRenderingContext.fill(); + canvasRenderingContext.drawImage( + source, + 0, + 0, + intrinsicWidth, + intrinsicHeight, + (WIDTH - displayWidth) / 2, + (HEIGHT - displayHeight) / 2, + displayWidth, + displayHeight, + ); + } else canvasRenderingContext.drawImage(source, 0, 0, WIDTH, HEIGHT); + + const pixelObj = canvasRenderingContext.getImageData(0, 0, WIDTH, HEIGHT); + readFromBuffer(pixelObj.data, pixels); + + // Runtime checks to guard against crashes + try { + filter(pixels, temporaryPixels); + writeToBuffer(pixelObj.data, temporaryPixels); + } catch (e: any) { + console.error(JSON.stringify(e)); + const errMsg = `There is an error with filter function, filter will be reset to default. ${e.name}: ${e.message}`; + console.error(errMsg); + + if (!e.name) { + errorLogger( + 'There is an error with filter function (error shown below). Filter will be reset back to the default. If you are facing an infinite loop error, you can consider increasing the timeout period (clock icon) at the top / reducing the frame dimensions.', + ); + + errorLogger([e], true); + } else { + errorLogger(errMsg, false); + } + + filter = copy_image; + filter(pixels, temporaryPixels); + } + + canvasRenderingContext.putImageData(pixelObj, 0, 0); +} + +/** @hidden */ +function draw(timestamp: number): void { + requestId = window.requestAnimationFrame(draw); + + if (prevTime === null) prevTime = timestamp; + + const elapsed = timestamp - prevTime; + if (elapsed > 1000 / FPS && videoIsPlaying) { + drawImage(videoElement); + prevTime = timestamp; + totalElapsedTime += elapsed; + if (toRunLateQueue) { + // eslint-disable-next-line @typescript-eslint/no-use-before-define + lateQueue(); + toRunLateQueue = false; + } + } +} + +/** @hidden */ +function playVideoElement() { + if (!videoIsPlaying) { + videoElement + .play() + .then(() => { + videoIsPlaying = true; + }) + .catch((err) => { + console.warn(err); + }); + } +} + +/** @hidden */ +function pauseVideoElement() { + if (videoIsPlaying) { + videoElement.pause(); + videoIsPlaying = false; + } +} + +/** @hidden */ +function startVideo(): void { + if (videoIsPlaying) return; + if (inputFeed === InputFeed.Camera) videoIsPlaying = true; + else playVideoElement(); + requestId = window.requestAnimationFrame(draw); +} + +/** + * Stops the loop that is drawing on image. + * + * @hidden + */ +function stopVideo(): void { + if (!videoIsPlaying) return; + if (inputFeed === InputFeed.Camera) videoIsPlaying = false; + else pauseVideoElement(); + window.cancelAnimationFrame(requestId); + prevTime = null; +} + +/** @hidden */ +function setAspectRatioDimensions(w: number, h: number): void { + intrinsicHeight = h; + intrinsicWidth = w; + const scale = Math.min(WIDTH / w, HEIGHT / h); + displayWidth = scale * w; + displayHeight = scale * h; +} + +/** @hidden */ +function loadMedia(): void { + if (!navigator.mediaDevices.getUserMedia) { + const errMsg = 'The browser you are using does not support getUserMedia'; + console.error(errMsg); + errorLogger(errMsg, false); + } + + // If video is already part of bundle state + if (videoElement.srcObject) return; + + navigator.mediaDevices + .getUserMedia({ video: true }) + .then((stream) => { + videoElement.srcObject = stream; + videoElement.onloadedmetadata = () => setAspectRatioDimensions( + videoElement.videoWidth, + videoElement.videoHeight, + ); + toRunLateQueue = true; + }) + .catch((error) => { + const errorMessage = `${error.name}: ${error.message}`; + console.error(errorMessage); + errorLogger(errorMessage, false); + }); + + startVideo(); +} + +/** @hidden */ +function loadAlternative(): void { + try { + if (inputFeed === InputFeed.VideoURL) { + videoElement.src = url; + startVideo(); + } else if (inputFeed === InputFeed.ImageURL) { + imageElement.src = url; + } + } catch (e: any) { + console.error(JSON.stringify(e)); + const errMsg = `There is an error loading the URL. ${e.name}: ${e.message}`; + console.error(errMsg); + loadMedia(); + return; + } + toRunLateQueue = true; + + /** Setting Up videoElement */ + videoElement.crossOrigin = 'anonymous'; + videoElement.onended = () => { + playCount++; + if (playCount >= LOOP_COUNT) { + playCount = 0; + + tabsPackage.onClickStill(); + } else { + stopVideo(); + startVideo(); + } + }; + videoElement.onloadedmetadata = () => { + setAspectRatioDimensions(videoElement.videoWidth, videoElement.videoHeight); + }; + + /** Setting Up imageElement */ + imageElement.crossOrigin = 'anonymous'; + imageElement.onload = () => { + setAspectRatioDimensions( + imageElement.naturalWidth, + imageElement.naturalHeight, + ); + drawImage(imageElement); + }; +} + +/** + * Update the FPS + * + * @hidden + */ +function updateFPS(fps: number): void { + if (fps < MIN_FPS || fps > MAX_FPS) return; + FPS = fps; +} + +/** + * Update the image dimensions. + * + * @hidden + */ +function updateDimensions(w: number, h: number): void { + // ignore if no change or bad inputs + if ( + (w === WIDTH && h === HEIGHT) + || w > MAX_WIDTH + || w < MIN_WIDTH + || h > MAX_HEIGHT + || h < MIN_HEIGHT + ) { + return; + } + + const status = videoIsPlaying; + stopVideo(); + + WIDTH = w; + HEIGHT = h; + + imageElement.width = w; + imageElement.height = h; + videoElement.width = w; + videoElement.height = h; + canvasElement.width = w; + canvasElement.height = h; + + setupData(); + + if (!status) { + setTimeout(() => stopVideo(), 50); + return; + } + + startVideo(); +} + +/** + * Updates the volume of the local video + * + * @hidden + */ +function updateVolume(v: number): void { + VOLUME = Math.max(0.0, Math.min(1.0, v)); + videoElement.volume = VOLUME; +} + +// queue is run when init is called +let queue: Queue = () => {}; + +/** + * Adds function to the queue + * + * @hidden + */ +function enqueue(funcToAdd: Queue): void { + const funcToRunFirst: Queue = queue; + queue = () => { + funcToRunFirst(); + funcToAdd(); + }; +} + +// lateQueue is run after media has properly loaded +let lateQueue: Queue = () => {}; + +/** + * Adds function to the lateQueue + * + * @hidden + */ +function lateEnqueue(funcToAdd: Queue): void { + const funcToRunFirst: Queue = lateQueue; + lateQueue = () => { + funcToRunFirst(); + funcToAdd(); + }; +} + +/** + * Used to initialise the video library. + * + * @returns a BundlePackage object containing Video's properties + * and other miscellaneous information relevant to tabs. + * @hidden + */ +function init( + image: ImageElement, + video: VideoElement, + canvas: CanvasElement, + _errorLogger: ErrorLogger, + _tabsPackage: TabsPacket, +): BundlePacket { + imageElement = image; + videoElement = video; + canvasElement = canvas; + errorLogger = _errorLogger; + tabsPackage = _tabsPackage; + const context = canvasElement.getContext('2d'); + if (!context) throw new Error('Canvas context should not be null.'); + canvasRenderingContext = context; + setupData(); + if (inputFeed === InputFeed.Camera) { + loadMedia(); + } else { + loadAlternative(); + } + queue(); + return { + HEIGHT, + WIDTH, + FPS, + VOLUME, + inputFeed, + }; +} + +/** + * Destructor that does necessary cleanup. + * + * @hidden + */ +function deinit(): void { + stopVideo(); + const stream = videoElement.srcObject; + if (!stream) { + return; + } + stream.getTracks() + .forEach((track) => { + track.stop(); + }); +} + +// ============================================================================= +// Module's Exposed Functions +// ============================================================================= + +/** + * Starts processing the image or video using the installed filter. + */ +export function start(): StartPacket { + return { + toReplString: () => '[Pix N Flix]', + init, + deinit, + startVideo, + stopVideo, + updateFPS, + updateVolume, + updateDimensions, + }; +} + +/** + * Returns the red component of the given pixel. + * + * @param pixel The given pixel + * @returns The red component as a number between 0 and 255 + */ +export function red_of(pixel: Pixel): number { + // returns the red value of pixel respectively + return pixel[0]; +} + +/** + * Returns the green component of the given pixel. + * + * @param pixel The given pixel + * @returns The green component as a number between 0 and 255 + */ +export function green_of(pixel: Pixel): number { + // returns the green value of pixel respectively + return pixel[1]; +} + +/** + * Returns the blue component of the given pixel. + * + * @param pixel The given pixel + * @returns The blue component as a number between 0 and 255 + */ +export function blue_of(pixel: Pixel): number { + // returns the blue value of pixel respectively + return pixel[2]; +} + +/** + * Returns the alpha component of the given pixel. + * + * @param pixel The given pixel + * @returns The alpha component as a number between 0 and 255 + */ +export function alpha_of(pixel: Pixel): number { + // returns the alpha value of pixel respectively + return pixel[3]; +} + +/** + * Assigns the given red, green, blue and alpha component values to + * the given pixel. + * + * @param pixel The given pixel + * @param r The red component as a number between 0 and 255 + * @param g The green component as a number between 0 and 255 + * @param b The blue component as a number between 0 and 255 + * @param a The alpha component as a number between 0 and 255 + */ +export function set_rgba( + pixel: Pixel, + r: number, + g: number, + b: number, + a: number, +): void { + // assigns the r,g,b values to this pixel + pixel[0] = r; + pixel[1] = g; + pixel[2] = b; + pixel[3] = a; +} + +/** + * Returns the current height of the displayed images in + * pixels, i.e. the number of pixels in the vertical dimension. + * + * @returns The height of the displayed images (in pixels) + */ +export function image_height(): number { + return HEIGHT; +} + +/** + * Returns the current width of the displayed images in + * pixels, i.e. the number of pixels in the horizontal dimension. + * + * @returns The width of the displayed images (in pixels) + */ +export function image_width(): number { + return WIDTH; +} + +/** + * The default filter that just copies the source image to the + * destination image. + * + * @param src Source image + * @param dest Destination image + */ +export function copy_image(src: Pixels, dest: Pixels): void { + for (let i = 0; i < HEIGHT; i += 1) { + for (let j = 0; j < WIDTH; j += 1) { + dest[i][j] = src[i][j]; + } + } +} + +/** + * Installs the given filter to be used to transform each source image from + * the live camera or from a local/remote file to a destination image that + * is then displayed on screen. + * + * A filter is a function that is applied to two + * two-dimensional arrays of Pixels: + * the source image and the destination image. + * + * @param filter The filter to be installed + */ +export function install_filter(_filter: Filter): void { + filter = _filter; +} + +/** + * Resets the installed filter to the default filter. + */ +export function reset_filter(): void { + install_filter(copy_image); +} + +/** + * Creates a black image. + * + * @hidden + */ +function new_image(): Pixels { + const img: Pixels = []; + for (let i = 0; i < HEIGHT; i += 1) { + img[i] = []; + for (let j = 0; j < WIDTH; j += 1) { + img[i][j] = [0, 0, 0, 255]; + } + } + return img; +} + +/** + * Returns a new filter that is equivalent to applying + * filter1 and then filter2. + * + * @param filter1 The first filter + * @param filter2 The second filter + * @returns The filter equivalent to applying filter1 and then filter2 + */ +export function compose_filter(filter1: Filter, filter2: Filter): Filter { + return (src, dest) => { + const temp = new_image(); + filter1(src, temp); + filter2(temp, dest); + }; +} + +/** + * Pauses the video at a set time after the video starts. + * + * @param pause_time Time in ms after the video starts. + */ +export function pause_at(pause_time: number): void { + // prevent negative pause_time + lateEnqueue(() => { + setTimeout( + tabsPackage.onClickStill, + pause_time >= 0 ? pause_time : -pause_time, + ); + }); +} + +/** + * Sets the diemsions of the displayed images. + * Note: Only accepts width and height values within the range of 1 to 500. + * + * @param width The width of the displayed images (default value: 300) + * @param height The height of the displayed images (default value: 400) + */ +export function set_dimensions(width: number, height: number): void { + enqueue(() => updateDimensions(width, height)); +} + +/** + * Sets the framerate (i.e. frames per second (FPS)) of the video. + * Note: Only accepts FPS values within the range of 2 to 30. + * + * @param fps FPS of video (default value: 10) + */ +export function set_fps(fps: number): void { + enqueue(() => updateFPS(fps)); +} + +/** + * Sets the audio volume of the local video file played. + * Note: Only accepts volume value within the range of 0 to 100. + * + * @param volume Volume of video (Default value of 50) + */ +export function set_volume(volume: number): void { + enqueue(() => updateVolume(Math.max(0, Math.min(100, volume) / 100.0))); +} + +/** + * Sets pix_n_flix to use video or image feed from a local file + * instead of using the default live camera feed. + */ +export function use_local_file(): void { + inputFeed = InputFeed.Local; +} + +/** + * Sets pix_n_flix to use the image from the given URL as the image feed + * instead of using the default live camera feed. + * + * @param URL URL of the image + */ +export function use_image_url(URL: string): void { + inputFeed = InputFeed.ImageURL; + url = URL; +} + +/** + * Sets pix_n_flix to use the video from the given URL as the video feed + * instead of using the default live camera feed. + * + * @param URL URL of the video + */ +export function use_video_url(URL: string): void { + inputFeed = InputFeed.VideoURL; + url = URL; +} + +/** + * Returns the elapsed time in milliseconds since the start of the video. + * + * @returns The elapsed time in milliseconds since the start of the video + */ +export function get_video_time(): number { + return totalElapsedTime; +} + +/** + * Sets pix_n_flix to preserve the aspect ratio of the video or image + * + * @param keepAspectRatio to keep aspect ratio. (Default value of true) + */ +export function keep_aspect_ratio(_keepAspectRatio: boolean): void { + keepAspectRatio = _keepAspectRatio; +} + +/** + * Sets the number of times the video is played. + * If the number of times the video repeats is negative, the video will loop forever. + * + * @param n number of times the video repeats after the first iteration. If n < 1, n will be taken to be 1. (Default value of Infinity) + */ +export function set_loop_count(n: number): void { + LOOP_COUNT = n; +} diff --git a/src/bundles/pix_n_flix/index.ts b/src/bundles/pix_n_flix/index.ts index 0cc242365..16395e43a 100644 --- a/src/bundles/pix_n_flix/index.ts +++ b/src/bundles/pix_n_flix/index.ts @@ -1,30 +1,30 @@ -/** - * Bundle for Source Academy pix_n_flix module - * @author Loh Xian Ze, Bryan - * @author Tang Xin Kye, Marcus - */ - -export { - start, - red_of, - blue_of, - green_of, - alpha_of, - set_rgba, - image_height, - image_width, - copy_image, - install_filter, - reset_filter, - compose_filter, - pause_at, - set_dimensions, - set_fps, - set_volume, - use_local_file, - use_image_url, - use_video_url, - get_video_time, - keep_aspect_ratio, - set_loop_count, -} from './functions'; +/** + * Bundle for Source Academy pix_n_flix module + * @author Loh Xian Ze, Bryan + * @author Tang Xin Kye, Marcus + */ + +export { + start, + red_of, + blue_of, + green_of, + alpha_of, + set_rgba, + image_height, + image_width, + copy_image, + install_filter, + reset_filter, + compose_filter, + pause_at, + set_dimensions, + set_fps, + set_volume, + use_local_file, + use_image_url, + use_video_url, + get_video_time, + keep_aspect_ratio, + set_loop_count, +} from './functions'; diff --git a/src/bundles/pix_n_flix/types.ts b/src/bundles/pix_n_flix/types.ts index 356bff1b2..c83e6bec1 100644 --- a/src/bundles/pix_n_flix/types.ts +++ b/src/bundles/pix_n_flix/types.ts @@ -1,44 +1,44 @@ -export type VideoElement = HTMLVideoElement & { srcObject?: MediaStream }; -export type ImageElement = HTMLImageElement; -export type CanvasElement = HTMLCanvasElement; -export type ErrorLogger = ( - error: string | string[], - isSlangError?: boolean -) => void; -export type TabsPacket = { - onClickStill: () => void; -}; -export enum InputFeed { - Camera, - ImageURL, - VideoURL, - Local, -} - -export type BundlePacket = { - HEIGHT: number; - WIDTH: number; - FPS: number; - VOLUME: number; - inputFeed: InputFeed; -}; -export type Queue = () => void; -export type StartPacket = { - toReplString: () => string; - init: ( - image: ImageElement, - video: VideoElement, - canvas: CanvasElement, - errorLogger: ErrorLogger, - tabsPackage: TabsPacket - ) => BundlePacket; - deinit: () => void; - startVideo: () => void; - stopVideo: () => void; - updateFPS: (fps: number) => void; - updateVolume: (volume: number) => void; - updateDimensions: (width: number, height: number) => void; -}; -export type Pixel = number[]; -export type Pixels = Pixel[][]; -export type Filter = (src: Pixels, dest: Pixels) => void; +export type VideoElement = HTMLVideoElement & { srcObject?: MediaStream }; +export type ImageElement = HTMLImageElement; +export type CanvasElement = HTMLCanvasElement; +export type ErrorLogger = ( + error: string | string[], + isSlangError?: boolean +) => void; +export type TabsPacket = { + onClickStill: () => void; +}; +export enum InputFeed { + Camera, + ImageURL, + VideoURL, + Local, +} + +export type BundlePacket = { + HEIGHT: number; + WIDTH: number; + FPS: number; + VOLUME: number; + inputFeed: InputFeed; +}; +export type Queue = () => void; +export type StartPacket = { + toReplString: () => string; + init: ( + image: ImageElement, + video: VideoElement, + canvas: CanvasElement, + errorLogger: ErrorLogger, + tabsPackage: TabsPacket + ) => BundlePacket; + deinit: () => void; + startVideo: () => void; + stopVideo: () => void; + updateFPS: (fps: number) => void; + updateVolume: (volume: number) => void; + updateDimensions: (width: number, height: number) => void; +}; +export type Pixel = number[]; +export type Pixels = Pixel[][]; +export type Filter = (src: Pixels, dest: Pixels) => void; diff --git a/src/bundles/plotly/curve_functions.ts b/src/bundles/plotly/curve_functions.ts index 1f1d8286e..a19175205 100644 --- a/src/bundles/plotly/curve_functions.ts +++ b/src/bundles/plotly/curve_functions.ts @@ -1,123 +1,123 @@ -import Plotly, { type Data, type Layout } from 'plotly.js-dist'; -import { type Curve, CurvePlot, type Point } from './plotly'; - -export function x_of(pt: Point): number { - return pt.x; -} - -/** - * Retrieves the y-coordinate of a given Point. - * - * @param p given point - * @returns y-coordinate of the Point - * @example - * ``` - * const point = make_color_point(1, 2, 3, 50, 100, 150); - * y_of(point); // Returns 2 - * ``` - */ -export function y_of(pt: Point): number { - return pt.y; -} - -/** - * Retrieves the z-coordinate of a given Point. - * - * @param p given point - * @returns z-coordinate of the Point - * @example - * ``` - * const point = make_color_point(1, 2, 3, 50, 100, 150); - * z_of(point); // Returns 3 - * ``` - */ -export function z_of(pt: Point): number { - return pt.z; -} - -/** - * Retrieves the red component of a given Point. - * - * @param p given point - * @returns Red component of the Point - * @example - * ``` - * const point = make_color_point(1, 2, 3, 50, 100, 150); - * r_of(point); // Returns 50 - * ``` - */ -export function r_of(pt: Point): number { - return pt.color.r * 255; -} - -/** - * Retrieves the green component of a given Point. - * - * @param p given point - * @returns Green component of the Point - * @example - * ``` - * const point = make_color_point(1, 2, 3, 50, 100, 150); - * g_of(point); // Returns 100 - * ``` - */ -export function g_of(pt: Point): number { - return pt.color.g * 255; -} - -/** - * Retrieves the blue component of a given Point. - * - * @param p given point - * @returns Blue component of the Point - * @example - * ``` - * const point = make_color_point(1, 2, 3, 50, 100, 150); - * b_of(point); // Returns 150 - * ``` - */ -export function b_of(pt: Point): number { - return pt.color.b * 255; -} -export function generatePlot( - type: string, - numPoints: number, - config: Data, - layout: Partial, - is_colored: boolean, - func: Curve, -): CurvePlot { - let x_s: number[] = []; - let y_s: number[] = []; - let z_s: number[] = []; - let color_s: string[] = []; - for (let i = 0; i <= numPoints; i += 1) { - const point = func(i / numPoints); - x_s.push(x_of(point)); - y_s.push(y_of(point)); - z_s.push(z_of(point)); - color_s.push(`rgb(${r_of(point)},${g_of(point)},${b_of(point)})`); - } - const plotlyData: Data = { - x: x_s, - y: y_s, - z: z_s, - marker: { - size: 2, - color: color_s, - }, - }; - return new CurvePlot( - draw_new_curve, - { - ...plotlyData, - ...config, - type, - } as Data, - layout, - ); -} - -function draw_new_curve(divId: string, data: Data, layout: Partial) { - Plotly.newPlot(divId, [data], layout); -} +import Plotly, { type Data, type Layout } from 'plotly.js-dist'; +import { type Curve, CurvePlot, type Point } from './plotly'; + +export function x_of(pt: Point): number { + return pt.x; +} + +/** + * Retrieves the y-coordinate of a given Point. + * + * @param p given point + * @returns y-coordinate of the Point + * @example + * ``` + * const point = make_color_point(1, 2, 3, 50, 100, 150); + * y_of(point); // Returns 2 + * ``` + */ +export function y_of(pt: Point): number { + return pt.y; +} + +/** + * Retrieves the z-coordinate of a given Point. + * + * @param p given point + * @returns z-coordinate of the Point + * @example + * ``` + * const point = make_color_point(1, 2, 3, 50, 100, 150); + * z_of(point); // Returns 3 + * ``` + */ +export function z_of(pt: Point): number { + return pt.z; +} + +/** + * Retrieves the red component of a given Point. + * + * @param p given point + * @returns Red component of the Point + * @example + * ``` + * const point = make_color_point(1, 2, 3, 50, 100, 150); + * r_of(point); // Returns 50 + * ``` + */ +export function r_of(pt: Point): number { + return pt.color.r * 255; +} + +/** + * Retrieves the green component of a given Point. + * + * @param p given point + * @returns Green component of the Point + * @example + * ``` + * const point = make_color_point(1, 2, 3, 50, 100, 150); + * g_of(point); // Returns 100 + * ``` + */ +export function g_of(pt: Point): number { + return pt.color.g * 255; +} + +/** + * Retrieves the blue component of a given Point. + * + * @param p given point + * @returns Blue component of the Point + * @example + * ``` + * const point = make_color_point(1, 2, 3, 50, 100, 150); + * b_of(point); // Returns 150 + * ``` + */ +export function b_of(pt: Point): number { + return pt.color.b * 255; +} +export function generatePlot( + type: string, + numPoints: number, + config: Data, + layout: Partial, + is_colored: boolean, + func: Curve, +): CurvePlot { + let x_s: number[] = []; + let y_s: number[] = []; + let z_s: number[] = []; + let color_s: string[] = []; + for (let i = 0; i <= numPoints; i += 1) { + const point = func(i / numPoints); + x_s.push(x_of(point)); + y_s.push(y_of(point)); + z_s.push(z_of(point)); + color_s.push(`rgb(${r_of(point)},${g_of(point)},${b_of(point)})`); + } + const plotlyData: Data = { + x: x_s, + y: y_s, + z: z_s, + marker: { + size: 2, + color: color_s, + }, + }; + return new CurvePlot( + draw_new_curve, + { + ...plotlyData, + ...config, + type, + } as Data, + layout, + ); +} + +function draw_new_curve(divId: string, data: Data, layout: Partial) { + Plotly.newPlot(divId, [data], layout); +} diff --git a/src/bundles/plotly/functions.ts b/src/bundles/plotly/functions.ts index 3f3d10fd3..7dc38bfeb 100644 --- a/src/bundles/plotly/functions.ts +++ b/src/bundles/plotly/functions.ts @@ -1,342 +1,342 @@ -/** - * The module `plotly` provides functions for drawing plots using the plotly.js library. - * @module plotly - */ - -import context from 'js-slang/context'; -import Plotly, { type Data, type Layout } from 'plotly.js-dist'; -import { - type Curve, - type CurvePlot, - type CurvePlotFunction, - DrawnPlot, - type ListOfPairs, -} from './plotly'; -import { generatePlot } from './curve_functions'; - -const drawnPlots: (DrawnPlot | CurvePlot)[] = []; -context.moduleContexts.plotly.state = { - drawnPlots, -}; - -/** - * Adds a new plotly plot to the context which will be rendered in the Plotly Tabs - * @example - * ```typescript - * const z1 = [ - * [8.83,8.89,8.81,8.87,8.9,8.87], - * [8.89,8.94,8.85,8.94,8.96,8.92], - * [8.84,8.9,8.82,8.92,8.93,8.91], - * [8.79,8.85,8.79,8.9,8.94,8.92], - * [8.79,8.88,8.81,8.9,8.95,8.92], - * [8.8,8.82,8.78,8.91,8.94,8.92], - * [8.75,8.78,8.77,8.91,8.95,8.92], - * [8.8,8.8,8.77,8.91,8.95,8.94], - * [8.74,8.81,8.76,8.93,8.98,8.99], - * [8.89,8.99,8.92,9.1,9.13,9.11], - * [8.97,8.97,8.91,9.09,9.11,9.11], - * [9.04,9.08,9.05,9.25,9.28,9.27], - * [9,9.01,9,9.2,9.23,9.2], - * [8.99,8.99,8.98,9.18,9.2,9.19], - * [8.93,8.97,8.97,9.18,9.2,9.18] - * ]; - * new_plot(list(pair("z", z1), pair("type", "surface"))) // creates a surface plot in Plotly Tab - * ``` - * - * - * @Types - * ``` typescript - * // The data format for input [{field_name}, value] from among the following fields - * data = { - * type: PlotType; - * x: Datum[] | Datum[][]; - * y: Datum[] | Datum[][]; - * z: Datum[] | Datum[][] | Datum[][][]; - * mode: - * | 'lines' - * | 'markers' - * | 'text' - * | 'lines+markers' - * | 'text+markers' - * | 'text+lines' - * | 'text+lines+markers' - * } - * - * - * type Datum = string | number | Date | null; - * type PlotType = - * | 'bar' - * | 'barpolar' - * | 'box' - * | 'candlestick' - * | 'carpet' - * | 'choropleth' - * | 'choroplethmapbox' - * | 'cone' - * | 'contour' - * | 'contourcarpet' - * | 'densitymapbox' - * | 'funnel' - * | 'funnelarea' - * | 'heatmap' - * | 'heatmapgl' - * | 'histogram' - * | 'histogram2d' - * | 'histogram2dcontour' - * | 'image' - * | 'indicator' - * | 'isosurface' - * | 'mesh3d' - * | 'ohlc' - * | 'parcats' - * | 'parcoords' - * | 'pie' - * | 'pointcloud' - * | 'sankey' - * | 'scatter' - * | 'scatter3d' - * | 'scattercarpet' - * | 'scattergeo' - * | 'scattergl' - * | 'scattermapbox' - * | 'scatterpolar' - * | 'scatterpolargl' - * | 'scatterternary' - * | 'splom' - * | 'streamtube' - * | 'sunburst' - * | 'surface' - * | 'table' - * | 'treemap' - * | 'violin' - * | 'volume' - * | 'waterfall'; - * - * ``` - * @param data The data in the form of list of pair, with the first term in the pair is - * the name of the field as a string and the second term is the value of the field - * among the fields mentioned above - */ -export function new_plot(data: ListOfPairs): void { - drawnPlots.push(new DrawnPlot(draw_new_plot, data)); -} - - -/** - * Adds a new plotly plot to the context which will be rendered in the Plotly Tabs - * @example - * ```typescript - * - * const z1 = [ - * [8.83,8.89,8.81,8.87,8.9,8.87], - * [8.89,8.94,8.85,8.94,8.96,8.92], - * [8.84,8.9,8.82,8.92,8.93,8.91], - * [8.79,8.85,8.79,8.9,8.94,8.92], - * [8.79,8.88,8.81,8.9,8.95,8.92], - * [8.8,8.82,8.78,8.91,8.94,8.92], - * [8.75,8.78,8.77,8.91,8.95,8.92], - * [8.8,8.8,8.77,8.91,8.95,8.94], - * [8.74,8.81,8.76,8.93,8.98,8.99], - * [8.89,8.99,8.92,9.1,9.13,9.11], - * [8.97,8.97,8.91,9.09,9.11,9.11], - * [9.04,9.08,9.05,9.25,9.28,9.27], - * [9,9.01,9,9.2,9.23,9.2], - * [8.99,8.99,8.98,9.18,9.2,9.19], - * [8.93,8.97,8.97,9.18,9.2,9.18] - * ]; - * - * let z2 = []; - * for (var i=0;i, - is_colored: boolean = false, -): (numPoints: number) => CurvePlotFunction { - return (numPoints: number) => { - const func = (curveFunction: Curve) => { - const plotDrawn = generatePlot( - type, - numPoints, - config, - layout, - is_colored, - curveFunction, - ); - - drawnPlots.push(plotDrawn); - return plotDrawn; - }; - - return func; - }; -} - -/** - * Returns a function that turns a given Curve into a Drawing, by sampling the - * Curve at `num` sample points and connecting each pair with a line. - * The parts between (0,0) and (1,1) of the resulting Drawing are shown in the window. - * - * @param num determines the number of points, lower than 65535, to be sampled. - * Including 0 and 1, there are `num + 1` evenly spaced sample points - * @return function of type Curve → Drawing - * @example - * ``` - * draw_connected(100)(t => make_point(t, t)); - * ``` - */ -export const draw_connected_2d = createPlotFunction( - 'scatter', - { mode: 'lines' }, - { - xaxis: { visible: false }, - yaxis: { - visible: false, - scaleanchor: 'x', - }, - }, - -); - -export const draw_3D_points = createPlotFunction( - 'scatter3d', - { mode: 'markers' }, - { - - }, - true, -); +/** + * The module `plotly` provides functions for drawing plots using the plotly.js library. + * @module plotly + */ + +import context from 'js-slang/context'; +import Plotly, { type Data, type Layout } from 'plotly.js-dist'; +import { + type Curve, + type CurvePlot, + type CurvePlotFunction, + DrawnPlot, + type ListOfPairs, +} from './plotly'; +import { generatePlot } from './curve_functions'; + +const drawnPlots: (DrawnPlot | CurvePlot)[] = []; +context.moduleContexts.plotly.state = { + drawnPlots, +}; + +/** + * Adds a new plotly plot to the context which will be rendered in the Plotly Tabs + * @example + * ```typescript + * const z1 = [ + * [8.83,8.89,8.81,8.87,8.9,8.87], + * [8.89,8.94,8.85,8.94,8.96,8.92], + * [8.84,8.9,8.82,8.92,8.93,8.91], + * [8.79,8.85,8.79,8.9,8.94,8.92], + * [8.79,8.88,8.81,8.9,8.95,8.92], + * [8.8,8.82,8.78,8.91,8.94,8.92], + * [8.75,8.78,8.77,8.91,8.95,8.92], + * [8.8,8.8,8.77,8.91,8.95,8.94], + * [8.74,8.81,8.76,8.93,8.98,8.99], + * [8.89,8.99,8.92,9.1,9.13,9.11], + * [8.97,8.97,8.91,9.09,9.11,9.11], + * [9.04,9.08,9.05,9.25,9.28,9.27], + * [9,9.01,9,9.2,9.23,9.2], + * [8.99,8.99,8.98,9.18,9.2,9.19], + * [8.93,8.97,8.97,9.18,9.2,9.18] + * ]; + * new_plot(list(pair("z", z1), pair("type", "surface"))) // creates a surface plot in Plotly Tab + * ``` + * + * + * @Types + * ``` typescript + * // The data format for input [{field_name}, value] from among the following fields + * data = { + * type: PlotType; + * x: Datum[] | Datum[][]; + * y: Datum[] | Datum[][]; + * z: Datum[] | Datum[][] | Datum[][][]; + * mode: + * | 'lines' + * | 'markers' + * | 'text' + * | 'lines+markers' + * | 'text+markers' + * | 'text+lines' + * | 'text+lines+markers' + * } + * + * + * type Datum = string | number | Date | null; + * type PlotType = + * | 'bar' + * | 'barpolar' + * | 'box' + * | 'candlestick' + * | 'carpet' + * | 'choropleth' + * | 'choroplethmapbox' + * | 'cone' + * | 'contour' + * | 'contourcarpet' + * | 'densitymapbox' + * | 'funnel' + * | 'funnelarea' + * | 'heatmap' + * | 'heatmapgl' + * | 'histogram' + * | 'histogram2d' + * | 'histogram2dcontour' + * | 'image' + * | 'indicator' + * | 'isosurface' + * | 'mesh3d' + * | 'ohlc' + * | 'parcats' + * | 'parcoords' + * | 'pie' + * | 'pointcloud' + * | 'sankey' + * | 'scatter' + * | 'scatter3d' + * | 'scattercarpet' + * | 'scattergeo' + * | 'scattergl' + * | 'scattermapbox' + * | 'scatterpolar' + * | 'scatterpolargl' + * | 'scatterternary' + * | 'splom' + * | 'streamtube' + * | 'sunburst' + * | 'surface' + * | 'table' + * | 'treemap' + * | 'violin' + * | 'volume' + * | 'waterfall'; + * + * ``` + * @param data The data in the form of list of pair, with the first term in the pair is + * the name of the field as a string and the second term is the value of the field + * among the fields mentioned above + */ +export function new_plot(data: ListOfPairs): void { + drawnPlots.push(new DrawnPlot(draw_new_plot, data)); +} + + +/** + * Adds a new plotly plot to the context which will be rendered in the Plotly Tabs + * @example + * ```typescript + * + * const z1 = [ + * [8.83,8.89,8.81,8.87,8.9,8.87], + * [8.89,8.94,8.85,8.94,8.96,8.92], + * [8.84,8.9,8.82,8.92,8.93,8.91], + * [8.79,8.85,8.79,8.9,8.94,8.92], + * [8.79,8.88,8.81,8.9,8.95,8.92], + * [8.8,8.82,8.78,8.91,8.94,8.92], + * [8.75,8.78,8.77,8.91,8.95,8.92], + * [8.8,8.8,8.77,8.91,8.95,8.94], + * [8.74,8.81,8.76,8.93,8.98,8.99], + * [8.89,8.99,8.92,9.1,9.13,9.11], + * [8.97,8.97,8.91,9.09,9.11,9.11], + * [9.04,9.08,9.05,9.25,9.28,9.27], + * [9,9.01,9,9.2,9.23,9.2], + * [8.99,8.99,8.98,9.18,9.2,9.19], + * [8.93,8.97,8.97,9.18,9.2,9.18] + * ]; + * + * let z2 = []; + * for (var i=0;i, + is_colored: boolean = false, +): (numPoints: number) => CurvePlotFunction { + return (numPoints: number) => { + const func = (curveFunction: Curve) => { + const plotDrawn = generatePlot( + type, + numPoints, + config, + layout, + is_colored, + curveFunction, + ); + + drawnPlots.push(plotDrawn); + return plotDrawn; + }; + + return func; + }; +} + +/** + * Returns a function that turns a given Curve into a Drawing, by sampling the + * Curve at `num` sample points and connecting each pair with a line. + * The parts between (0,0) and (1,1) of the resulting Drawing are shown in the window. + * + * @param num determines the number of points, lower than 65535, to be sampled. + * Including 0 and 1, there are `num + 1` evenly spaced sample points + * @return function of type Curve → Drawing + * @example + * ``` + * draw_connected(100)(t => make_point(t, t)); + * ``` + */ +export const draw_connected_2d = createPlotFunction( + 'scatter', + { mode: 'lines' }, + { + xaxis: { visible: false }, + yaxis: { + visible: false, + scaleanchor: 'x', + }, + }, + +); + +export const draw_3D_points = createPlotFunction( + 'scatter3d', + { mode: 'markers' }, + { + + }, + true, +); diff --git a/src/bundles/plotly/index.ts b/src/bundles/plotly/index.ts index d3e2b1a3c..507ac9fa8 100644 --- a/src/bundles/plotly/index.ts +++ b/src/bundles/plotly/index.ts @@ -1,13 +1,13 @@ -/** - * Bundle for Source Academy Plotly repository - * @author Sourabh Raj Jaiswal - */ - -export { - new_plot, - new_plot_json, - draw_connected_2d, - draw_3D_points, -} from './functions'; - -export { draw_sound_2d } from './sound_functions'; +/** + * Bundle for Source Academy Plotly repository + * @author Sourabh Raj Jaiswal + */ + +export { + new_plot, + new_plot_json, + draw_connected_2d, + draw_3D_points, +} from './functions'; + +export { draw_sound_2d } from './sound_functions'; diff --git a/src/bundles/plotly/plotly.ts b/src/bundles/plotly/plotly.ts index 1dd10c74a..866d39318 100644 --- a/src/bundles/plotly/plotly.ts +++ b/src/bundles/plotly/plotly.ts @@ -1,60 +1,60 @@ - -import { type Data, type Layout } from 'plotly.js-dist'; -import { type ReplResult } from '../../typings/type_helpers'; - -/** - * Represents plots with a draw method attached - */ -export class DrawnPlot implements ReplResult { - drawFn: any; - data: ListOfPairs; - constructor(drawFn: any, data: ListOfPairs) { - this.drawFn = drawFn; - this.data = data; - } - - public toReplString = () => ''; - - public draw = (divId: string) => { - this.drawFn(this.data, divId); - }; -} - -export class CurvePlot implements ReplResult { - plotlyDrawFn: any; - data: Data; - layout: Partial; - constructor(plotlyDrawFn: any, data: Data, layout: Partial) { - this.plotlyDrawFn = plotlyDrawFn; - this.data = data; - this.layout = layout; - } - public toReplString = () => ''; - - public draw = (divId: string) => { - this.plotlyDrawFn(divId, this.data, this.layout); - }; -} - -export type ListOfPairs = (ListOfPairs | any)[] | null; -export type Data2d = number[]; -export type Color = { r: number, g: number, b: number }; - -export type DataTransformer = (c: Data2d[]) => Data2d[]; -export type CurvePlotFunction = ((func: Curve) => CurvePlot); - -export type Curve = ((n: number) => Point); -export type CurveTransformer = (c: Curve) => Curve; - - -/** Encapsulates 3D point with RGB values. */ -export class Point implements ReplResult { - constructor( - public readonly x: number, - public readonly y: number, - public readonly z: number, - public readonly color: Color, - ) {} - - public toReplString = () => `(${this.x}, ${this.y}, ${this.z}, Color: ${this.color})`; -} + +import { type Data, type Layout } from 'plotly.js-dist'; +import { type ReplResult } from '../../typings/type_helpers'; + +/** + * Represents plots with a draw method attached + */ +export class DrawnPlot implements ReplResult { + drawFn: any; + data: ListOfPairs; + constructor(drawFn: any, data: ListOfPairs) { + this.drawFn = drawFn; + this.data = data; + } + + public toReplString = () => ''; + + public draw = (divId: string) => { + this.drawFn(this.data, divId); + }; +} + +export class CurvePlot implements ReplResult { + plotlyDrawFn: any; + data: Data; + layout: Partial; + constructor(plotlyDrawFn: any, data: Data, layout: Partial) { + this.plotlyDrawFn = plotlyDrawFn; + this.data = data; + this.layout = layout; + } + public toReplString = () => ''; + + public draw = (divId: string) => { + this.plotlyDrawFn(divId, this.data, this.layout); + }; +} + +export type ListOfPairs = (ListOfPairs | any)[] | null; +export type Data2d = number[]; +export type Color = { r: number, g: number, b: number }; + +export type DataTransformer = (c: Data2d[]) => Data2d[]; +export type CurvePlotFunction = ((func: Curve) => CurvePlot); + +export type Curve = ((n: number) => Point); +export type CurveTransformer = (c: Curve) => Curve; + + +/** Encapsulates 3D point with RGB values. */ +export class Point implements ReplResult { + constructor( + public readonly x: number, + public readonly y: number, + public readonly z: number, + public readonly color: Color, + ) {} + + public toReplString = () => `(${this.x}, ${this.y}, ${this.z}, Color: ${this.color})`; +} diff --git a/src/bundles/plotly/sound_functions.ts b/src/bundles/plotly/sound_functions.ts index 8b793d857..bb472e4b6 100644 --- a/src/bundles/plotly/sound_functions.ts +++ b/src/bundles/plotly/sound_functions.ts @@ -1,81 +1,81 @@ -import context from 'js-slang/context'; -import Plotly, { type Data, type Layout } from 'plotly.js-dist'; -import { get_duration, get_wave, is_sound } from '../sound'; -import { type Sound } from '../sound/types'; -import { CurvePlot, type DrawnPlot } from './plotly'; - -const FS: number = 44100; // Output sample rate - -const drawnPlots: (DrawnPlot | CurvePlot)[] = []; -context.moduleContexts.plotly.state = { - drawnPlots, -}; - -/** - * Visualizes the sound on a 2d line graph - * @param sound the sound which is to be visualized on plotly - */ -export function draw_sound_2d(sound: Sound) { - if (!is_sound(sound)) { - throw new Error(`draw_sound_2d is expecting sound, but encountered ${sound}`); - // If a sound is already displayed, terminate execution. - } else if (get_duration(sound) < 0) { - throw new Error('draw_sound_2d: duration of sound is negative'); - } else { - // Instantiate audio context if it has not been instantiated. - - // Create mono buffer - const channel: number[] = []; - const time_stamps: number[] = []; - const len = Math.ceil(FS * get_duration(sound)); - - - const wave = get_wave(sound); - for (let i = 0; i < len; i += 1) { - time_stamps[i] = i / FS; - channel[i] = wave( i / FS ); - } - - let x_s: number[] = []; - let y_s: number[] = []; - - for (let i = 0; i < channel.length; i += 1) { - x_s.push(time_stamps[i]); - y_s.push(channel[i]); - } - - const plotlyData: Data = { - x: x_s, - y: y_s, - }; - const plot = new CurvePlot( - draw_new_curve, - { - ...plotlyData, - type: 'scattergl', - mode: 'lines', - line: { width: 0.5 }, - } as Data, - { - xaxis: { - type: 'linear', - title: 'Time', - anchor: 'y', - position: 0, - rangeslider: { visible: true }, - }, - yaxis: { - type: 'linear', - visible: false, - }, - bargap: 0.2, - barmode: 'stack', - }, - ); - drawnPlots.push(plot); - } -} - -function draw_new_curve(divId: string, data: Data, layout: Partial) { - Plotly.newPlot(divId, [data], layout); -} +import context from 'js-slang/context'; +import Plotly, { type Data, type Layout } from 'plotly.js-dist'; +import { get_duration, get_wave, is_sound } from '../sound'; +import { type Sound } from '../sound/types'; +import { CurvePlot, type DrawnPlot } from './plotly'; + +const FS: number = 44100; // Output sample rate + +const drawnPlots: (DrawnPlot | CurvePlot)[] = []; +context.moduleContexts.plotly.state = { + drawnPlots, +}; + +/** + * Visualizes the sound on a 2d line graph + * @param sound the sound which is to be visualized on plotly + */ +export function draw_sound_2d(sound: Sound) { + if (!is_sound(sound)) { + throw new Error(`draw_sound_2d is expecting sound, but encountered ${sound}`); + // If a sound is already displayed, terminate execution. + } else if (get_duration(sound) < 0) { + throw new Error('draw_sound_2d: duration of sound is negative'); + } else { + // Instantiate audio context if it has not been instantiated. + + // Create mono buffer + const channel: number[] = []; + const time_stamps: number[] = []; + const len = Math.ceil(FS * get_duration(sound)); + + + const wave = get_wave(sound); + for (let i = 0; i < len; i += 1) { + time_stamps[i] = i / FS; + channel[i] = wave( i / FS ); + } + + let x_s: number[] = []; + let y_s: number[] = []; + + for (let i = 0; i < channel.length; i += 1) { + x_s.push(time_stamps[i]); + y_s.push(channel[i]); + } + + const plotlyData: Data = { + x: x_s, + y: y_s, + }; + const plot = new CurvePlot( + draw_new_curve, + { + ...plotlyData, + type: 'scattergl', + mode: 'lines', + line: { width: 0.5 }, + } as Data, + { + xaxis: { + type: 'linear', + title: 'Time', + anchor: 'y', + position: 0, + rangeslider: { visible: true }, + }, + yaxis: { + type: 'linear', + visible: false, + }, + bargap: 0.2, + barmode: 'stack', + }, + ); + drawnPlots.push(plot); + } +} + +function draw_new_curve(divId: string, data: Data, layout: Partial) { + Plotly.newPlot(divId, [data], layout); +} diff --git a/src/bundles/remote_execution/ev3/index.ts b/src/bundles/remote_execution/ev3/index.ts index e59867bfd..ed0444326 100644 --- a/src/bundles/remote_execution/ev3/index.ts +++ b/src/bundles/remote_execution/ev3/index.ts @@ -1,55 +1,55 @@ -import { Chapter } from 'js-slang/dist/types'; - -const ev3DeviceType = { - id: 'EV3', - name: 'Lego Mindstorms EV3', - // This list must be in the same order as the list here: - // https://github.com/source-academy/sinter/blob/master/devices/ev3/src/ev3_functions.c#L891 - internalFunctions: [ - 'ev3_pause', - 'ev3_connected', - 'ev3_motorA', - 'ev3_motorB', - 'ev3_motorC', - 'ev3_motorD', - 'ev3_motorGetSpeed', - 'ev3_motorSetSpeed', - 'ev3_motorStart', - 'ev3_motorStop', - 'ev3_motorSetStopAction', - 'ev3_motorGetPosition', - 'ev3_runForTime', - 'ev3_runToAbsolutePosition', - 'ev3_runToRelativePosition', - 'ev3_colorSensor', - 'ev3_colorSensorRed', - 'ev3_colorSensorGreen', - 'ev3_colorSensorBlue', - 'ev3_reflectedLightIntensity', - 'ev3_ambientLightIntensity', - 'ev3_colorSensorGetColor', - 'ev3_ultrasonicSensor', - 'ev3_ultrasonicSensorDistance', - 'ev3_gyroSensor', - 'ev3_gyroSensorAngle', - 'ev3_gyroSensorRate', - 'ev3_touchSensor1', - 'ev3_touchSensor2', - 'ev3_touchSensor3', - 'ev3_touchSensor4', - 'ev3_touchSensorPressed', - 'ev3_hello', - 'ev3_waitForButtonPress', - 'ev3_speak', - 'ev3_playSequence', - 'ev3_ledLeftGreen', - 'ev3_ledLeftRed', - 'ev3_ledRightGreen', - 'ev3_ledRightRed', - 'ev3_ledGetBrightness', - 'ev3_ledSetBrightness', - ], - languageChapter: Chapter.SOURCE_3, -}; - -export default ev3DeviceType; +import { Chapter } from 'js-slang/dist/types'; + +const ev3DeviceType = { + id: 'EV3', + name: 'Lego Mindstorms EV3', + // This list must be in the same order as the list here: + // https://github.com/source-academy/sinter/blob/master/devices/ev3/src/ev3_functions.c#L891 + internalFunctions: [ + 'ev3_pause', + 'ev3_connected', + 'ev3_motorA', + 'ev3_motorB', + 'ev3_motorC', + 'ev3_motorD', + 'ev3_motorGetSpeed', + 'ev3_motorSetSpeed', + 'ev3_motorStart', + 'ev3_motorStop', + 'ev3_motorSetStopAction', + 'ev3_motorGetPosition', + 'ev3_runForTime', + 'ev3_runToAbsolutePosition', + 'ev3_runToRelativePosition', + 'ev3_colorSensor', + 'ev3_colorSensorRed', + 'ev3_colorSensorGreen', + 'ev3_colorSensorBlue', + 'ev3_reflectedLightIntensity', + 'ev3_ambientLightIntensity', + 'ev3_colorSensorGetColor', + 'ev3_ultrasonicSensor', + 'ev3_ultrasonicSensorDistance', + 'ev3_gyroSensor', + 'ev3_gyroSensorAngle', + 'ev3_gyroSensorRate', + 'ev3_touchSensor1', + 'ev3_touchSensor2', + 'ev3_touchSensor3', + 'ev3_touchSensor4', + 'ev3_touchSensorPressed', + 'ev3_hello', + 'ev3_waitForButtonPress', + 'ev3_speak', + 'ev3_playSequence', + 'ev3_ledLeftGreen', + 'ev3_ledLeftRed', + 'ev3_ledRightGreen', + 'ev3_ledRightRed', + 'ev3_ledGetBrightness', + 'ev3_ledSetBrightness', + ], + languageChapter: Chapter.SOURCE_3, +}; + +export default ev3DeviceType; diff --git a/src/bundles/remote_execution/index.ts b/src/bundles/remote_execution/index.ts index 2e85754fb..999a06252 100644 --- a/src/bundles/remote_execution/index.ts +++ b/src/bundles/remote_execution/index.ts @@ -1,8 +1,8 @@ -/** - * Module responsible for execution of Source on remote devices. - * - * @module remote_execution - * @author Richard Dominick - */ - -export { default as EV3 } from './ev3'; +/** + * Module responsible for execution of Source on remote devices. + * + * @module remote_execution + * @author Richard Dominick + */ + +export { default as EV3 } from './ev3'; diff --git a/src/bundles/repeat/__tests__/index.ts b/src/bundles/repeat/__tests__/index.ts index 571eddf2b..e4e553763 100644 --- a/src/bundles/repeat/__tests__/index.ts +++ b/src/bundles/repeat/__tests__/index.ts @@ -1,17 +1,17 @@ -import { repeat, twice, thrice } from '../functions'; - -// Test functions -test('repeat works correctly and repeats function n times', () => { - expect(repeat((x: number) => x + 1, 5)(1)) - .toBe(6); -}); - -test('twice works correctly and repeats function twice', () => { - expect(twice((x: number) => x + 1)(1)) - .toBe(3); -}); - -test('thrice works correctly and repeats function thrice', () => { - expect(thrice((x: number) => x + 1)(1)) - .toBe(4); -}); +import { repeat, twice, thrice } from '../functions'; + +// Test functions +test('repeat works correctly and repeats function n times', () => { + expect(repeat((x: number) => x + 1, 5)(1)) + .toBe(6); +}); + +test('twice works correctly and repeats function twice', () => { + expect(twice((x: number) => x + 1)(1)) + .toBe(3); +}); + +test('thrice works correctly and repeats function thrice', () => { + expect(thrice((x: number) => x + 1)(1)) + .toBe(4); +}); diff --git a/src/bundles/repeat/functions.ts b/src/bundles/repeat/functions.ts index 29cc55592..4f2b02dfe 100644 --- a/src/bundles/repeat/functions.ts +++ b/src/bundles/repeat/functions.ts @@ -1,50 +1,50 @@ -/** - * This is the official documentation for the repeat module. - * @module repeat - */ - -/** - * Returns a new function which when applied to an argument, has the same effect - * as applying the specified function to the same argument n times. - * @example - * ```typescript - * const plusTen = repeat(x => x + 2, 5); - * plusTen(0); // Returns 10 - * ``` - * @param func the function to be repeated - * @param n the number of times to repeat the function - * @return the new function that has the same effect as func repeated n times - */ -export function repeat(func: Function, n: number): Function { - return n === 0 ? (x: any) => x : (x: any) => func(repeat(func, n - 1)(x)); -} - -/** - * Returns a new function which when applied to an argument, has the same effect - * as applying the specified function to the same argument 2 times. - * @example - * ```typescript - * const plusTwo = twice(x => x + 1); - * plusTwo(2); // Returns 4 - * ``` - * @param func the function to be repeated - * @return the new function that has the same effect as `(x => func(func(x)))` - */ -export function twice(func: Function): Function { - return repeat(func, 2); -} - -/** - * Returns a new function which when applied to an argument, has the same effect - * as applying the specified function to the same argument 3 times. - * @example - * ```typescript - * const plusNine = thrice(x => x + 3); - * plusNine(0); // Returns 9 - * ``` - * @param func the function to be repeated - * @return the new function that has the same effect as `(x => func(func(func(x))))` - */ -export function thrice(func: Function): Function { - return repeat(func, 3); -} +/** + * This is the official documentation for the repeat module. + * @module repeat + */ + +/** + * Returns a new function which when applied to an argument, has the same effect + * as applying the specified function to the same argument n times. + * @example + * ```typescript + * const plusTen = repeat(x => x + 2, 5); + * plusTen(0); // Returns 10 + * ``` + * @param func the function to be repeated + * @param n the number of times to repeat the function + * @return the new function that has the same effect as func repeated n times + */ +export function repeat(func: Function, n: number): Function { + return n === 0 ? (x: any) => x : (x: any) => func(repeat(func, n - 1)(x)); +} + +/** + * Returns a new function which when applied to an argument, has the same effect + * as applying the specified function to the same argument 2 times. + * @example + * ```typescript + * const plusTwo = twice(x => x + 1); + * plusTwo(2); // Returns 4 + * ``` + * @param func the function to be repeated + * @return the new function that has the same effect as `(x => func(func(x)))` + */ +export function twice(func: Function): Function { + return repeat(func, 2); +} + +/** + * Returns a new function which when applied to an argument, has the same effect + * as applying the specified function to the same argument 3 times. + * @example + * ```typescript + * const plusNine = thrice(x => x + 3); + * plusNine(0); // Returns 9 + * ``` + * @param func the function to be repeated + * @return the new function that has the same effect as `(x => func(func(func(x))))` + */ +export function thrice(func: Function): Function { + return repeat(func, 3); +} diff --git a/src/bundles/repeat/index.ts b/src/bundles/repeat/index.ts index dbb112404..8e1023ae4 100644 --- a/src/bundles/repeat/index.ts +++ b/src/bundles/repeat/index.ts @@ -1,7 +1,7 @@ -/** - * Test bundle for Source Academy modules repository - * @author Loh Xian Ze, Bryan - * @author Tang Xin Kye, Marcus - */ - -export { repeat, twice, thrice } from './functions'; +/** + * Test bundle for Source Academy modules repository + * @author Loh Xian Ze, Bryan + * @author Tang Xin Kye, Marcus + */ + +export { repeat, twice, thrice } from './functions'; diff --git a/src/bundles/repl/functions.ts b/src/bundles/repl/functions.ts index 89c6c6cc8..fa017d9b1 100644 --- a/src/bundles/repl/functions.ts +++ b/src/bundles/repl/functions.ts @@ -1,83 +1,83 @@ -/** - * Functions for Programmable REPL - * @module repl - * @author Wang Zihan - */ - - -import context from 'js-slang/context'; -import { ProgrammableRepl } from './programmable_repl'; - -const INSTANCE = new ProgrammableRepl(); -context.moduleContexts.repl.state = INSTANCE; -/** - * Setup the programmable REPL with given metacircular evaulator entrance function - * @param {evalFunc} evalFunc - metacircular evaulator entrance function - * - * @category Main - */ -export function set_evaluator(evalFunc: Function) { - if (!(evalFunc instanceof Function)) { - const typeName = typeof (evalFunc); - throw new Error(`Wrong parameter type "${typeName}' in function "set_evaluator". It supposed to be a function and it's the entrance function of your metacircular evaulator.`); - } - INSTANCE.evalFunction = evalFunc; - return { - toReplString: () => '', - }; -} - - -/** - * Redirects the display message into Programmable Repl Tab - * If you give a pair as the parameter, it will use the given pair to generate rich text and use rich text display mode to display the string in Programmable Repl Tab with undefined return value (see module description for more information). - * If you give other things as the parameter, it will simply display the toString value of the parameter in Programmable Repl Tab and returns the displayed string itself. - * @param {content} the content you want to display - * - * @category Main - */ -export function module_display(content: any) : any { - if (INSTANCE.richDisplayInternal(content) === 'not_rich_text_pair') { - INSTANCE.pushOutputString(content.toString(), 'white', 'plaintext');// students may set the value of the parameter "str" to types other than a string (for example "module_display(1)" ). So here I need to first convert the parameter "str" into a string before preceding. - return content; - } - return undefined; -} - - -/** - * Set Programmable Repl editor background image with a customized image URL - * @param {img_url} the url to the new background image - * @param {background_color_alpha} the alpha (transparency) of the original background color that covers on your background image [0 ~ 1]. Recommended value is 0.5 . - * - * @category Main - */ -export function set_background_image(img_url: string, background_color_alpha: number) : void { - INSTANCE.customizedEditorProps.backgroundImageUrl = img_url; - INSTANCE.customizedEditorProps.backgroundColorAlpha = background_color_alpha; -} - - -/** - * Set Programmable Repl editor font size - * @param {font_size_px} font size (in pixel) - * - * @category Main - */ -export function set_font_size(font_size_px: number) { - INSTANCE.customizedEditorProps.fontSize = parseInt(font_size_px.toString());// The TypeScript type checker will throw an error as "parseInt" in TypeScript only accepts one string as parameter. -} - - -/** - * When use this function as the entrance function in the parameter of "set_evaluator", the Programmable Repl will directly use the default js-slang interpreter to run your program in Programmable Repl editor. Do not directly call this function in your own code. - * @param {program} Do not directly set this parameter in your code. - * @param {safeKey} A parameter that is designed to prevent student from directly calling this function in Source language. - * - * @category Main - */ -export function default_js_slang(_program: string) : any { - throw new Error('Invaild Call: Function "default_js_slang" can not be directly called by user\'s code in editor. You should use it as the parameter of the function "set_evaluator"'); - // When the function is normally called by set_evaluator function, safeKey is set to "document.body", which has a type "Element". - // Students can not create objects and use HTML Elements in Source due to limitations and rules in Source, so they can't set the safeKey to a HTML Element, thus they can't use this function in Source. -} +/** + * Functions for Programmable REPL + * @module repl + * @author Wang Zihan + */ + + +import context from 'js-slang/context'; +import { ProgrammableRepl } from './programmable_repl'; + +const INSTANCE = new ProgrammableRepl(); +context.moduleContexts.repl.state = INSTANCE; +/** + * Setup the programmable REPL with given metacircular evaulator entrance function + * @param {evalFunc} evalFunc - metacircular evaulator entrance function + * + * @category Main + */ +export function set_evaluator(evalFunc: Function) { + if (!(evalFunc instanceof Function)) { + const typeName = typeof (evalFunc); + throw new Error(`Wrong parameter type "${typeName}' in function "set_evaluator". It supposed to be a function and it's the entrance function of your metacircular evaulator.`); + } + INSTANCE.evalFunction = evalFunc; + return { + toReplString: () => '', + }; +} + + +/** + * Redirects the display message into Programmable Repl Tab + * If you give a pair as the parameter, it will use the given pair to generate rich text and use rich text display mode to display the string in Programmable Repl Tab with undefined return value (see module description for more information). + * If you give other things as the parameter, it will simply display the toString value of the parameter in Programmable Repl Tab and returns the displayed string itself. + * @param {content} the content you want to display + * + * @category Main + */ +export function module_display(content: any) : any { + if (INSTANCE.richDisplayInternal(content) === 'not_rich_text_pair') { + INSTANCE.pushOutputString(content.toString(), 'white', 'plaintext');// students may set the value of the parameter "str" to types other than a string (for example "module_display(1)" ). So here I need to first convert the parameter "str" into a string before preceding. + return content; + } + return undefined; +} + + +/** + * Set Programmable Repl editor background image with a customized image URL + * @param {img_url} the url to the new background image + * @param {background_color_alpha} the alpha (transparency) of the original background color that covers on your background image [0 ~ 1]. Recommended value is 0.5 . + * + * @category Main + */ +export function set_background_image(img_url: string, background_color_alpha: number) : void { + INSTANCE.customizedEditorProps.backgroundImageUrl = img_url; + INSTANCE.customizedEditorProps.backgroundColorAlpha = background_color_alpha; +} + + +/** + * Set Programmable Repl editor font size + * @param {font_size_px} font size (in pixel) + * + * @category Main + */ +export function set_font_size(font_size_px: number) { + INSTANCE.customizedEditorProps.fontSize = parseInt(font_size_px.toString());// The TypeScript type checker will throw an error as "parseInt" in TypeScript only accepts one string as parameter. +} + + +/** + * When use this function as the entrance function in the parameter of "set_evaluator", the Programmable Repl will directly use the default js-slang interpreter to run your program in Programmable Repl editor. Do not directly call this function in your own code. + * @param {program} Do not directly set this parameter in your code. + * @param {safeKey} A parameter that is designed to prevent student from directly calling this function in Source language. + * + * @category Main + */ +export function default_js_slang(_program: string) : any { + throw new Error('Invaild Call: Function "default_js_slang" can not be directly called by user\'s code in editor. You should use it as the parameter of the function "set_evaluator"'); + // When the function is normally called by set_evaluator function, safeKey is set to "document.body", which has a type "Element". + // Students can not create objects and use HTML Elements in Source due to limitations and rules in Source, so they can't set the safeKey to a HTML Element, thus they can't use this function in Source. +} diff --git a/src/bundles/repl/index.ts b/src/bundles/repl/index.ts index 7d303d6fd..c8633cd0b 100644 --- a/src/bundles/repl/index.ts +++ b/src/bundles/repl/index.ts @@ -1,73 +1,73 @@ -/** - * Bundle for Source Academy Programmable REPL module - * @module repl - * @author Wang Zihan - */ - -/* - -Example on usage: - <*> Use with metacircular evaluator: - - import { set_evaluator, module_display } from "repl"; - - const primitive_functions = list( - ...... - list("display", module_display ), // Here change this from "display" to "module_display" to let the display result goes to the repl tab. - ...... - } - - function parse_and_evaluate(code){ - (your metacircular evaluator entry function) - } - - set_evaluator(parse_and_evaluate); // This can invoke the repl with your metacircular evaluator's evaluation entry - - =*=*=*=*=*= I'm the deluxe split line :) =*=*=*=*=*= - - <*> Use with Source Academy's builtin js-slang - import { set_evaluator, default_js_slang, module_display } from "repl"; // Here you also need to import "module_display" along with "set_evaluator" and "default_js_slang". - - set_evaluator(default_js_slang); // This can invoke the repl with Source Academy's builtin js-slang evaluation entry - - (Note that you can't directly call "default_js_slang" in your own code. It should only be used as the parameter of "set_evaluator") - - =*=*=*=*=*= I'm the deluxe split line :) =*=*=*=*=*= - - <*> Customize Editor Appearance - import { set_background_image, set_font_size } from "repl"; - set_background_image("https://www.some_image_website.xyz/your_favorite_image.png"); // Set the background image of the editor in repl tab - set_font_size(20.5); // Set the font size of the editor in repl tab - - =*=*=*=*=*= I'm the deluxe split line :) =*=*=*=*=*= - - <*> Rich Text Display - first import { module_display } from "repl"; - Format: pair(pair("string",style),style)... - - Examples: - module_display(pair(pair(pair(pair("Hello World","underline"),"italic"),"bold"),"gigantic")); - module_display(pair(pair(pair(pair(pair(pair("Hello World","underline"),"italic"),"bold"),"gigantic"),"clrb#FF00B9"),"clrt#ff9700")); - module_display(pair(pair(pair(pair(pair("Hello World","underline"),"italic"),"bold"),"gigantic"),"clrt#0ff1ed")); - - Coloring: "clrt" stands for text color, "clrb" stands for background color. The color string are in hexadecimal begin with "#" and followed by 6 hexadecimal digits. - Example: pair("123","clrt#ff0000") will produce a red "123"; pair("456","clrb#00ff00") will produce a green "456". - Besides coloring, the following styles are also supported: - bold: Make the text bold. - italic: Make the text italic. - small: Make the text in small size. - medium: Make the text in medium size. - large: Make the text in large size. - gigantic: Make the text in very large size. - underline: Underline the text. - Note that if you apply the conflicting attributes together, only one conflicted style will take effect and other conflicting styles will be discarded, like " pair(pair(pair("123",small),medium),large) " (Set conflicting font size for the same text) - Also note that for safety matters, certain words and characters are not allowed to appear under rich text display mode. -*/ - -export { - set_evaluator, - module_display, - set_background_image, - set_font_size, - default_js_slang, -} from './functions'; +/** + * Bundle for Source Academy Programmable REPL module + * @module repl + * @author Wang Zihan + */ + +/* + +Example on usage: + <*> Use with metacircular evaluator: + + import { set_evaluator, module_display } from "repl"; + + const primitive_functions = list( + ...... + list("display", module_display ), // Here change this from "display" to "module_display" to let the display result goes to the repl tab. + ...... + } + + function parse_and_evaluate(code){ + (your metacircular evaluator entry function) + } + + set_evaluator(parse_and_evaluate); // This can invoke the repl with your metacircular evaluator's evaluation entry + + =*=*=*=*=*= I'm the deluxe split line :) =*=*=*=*=*= + + <*> Use with Source Academy's builtin js-slang + import { set_evaluator, default_js_slang, module_display } from "repl"; // Here you also need to import "module_display" along with "set_evaluator" and "default_js_slang". + + set_evaluator(default_js_slang); // This can invoke the repl with Source Academy's builtin js-slang evaluation entry + + (Note that you can't directly call "default_js_slang" in your own code. It should only be used as the parameter of "set_evaluator") + + =*=*=*=*=*= I'm the deluxe split line :) =*=*=*=*=*= + + <*> Customize Editor Appearance + import { set_background_image, set_font_size } from "repl"; + set_background_image("https://www.some_image_website.xyz/your_favorite_image.png"); // Set the background image of the editor in repl tab + set_font_size(20.5); // Set the font size of the editor in repl tab + + =*=*=*=*=*= I'm the deluxe split line :) =*=*=*=*=*= + + <*> Rich Text Display + first import { module_display } from "repl"; + Format: pair(pair("string",style),style)... + + Examples: + module_display(pair(pair(pair(pair("Hello World","underline"),"italic"),"bold"),"gigantic")); + module_display(pair(pair(pair(pair(pair(pair("Hello World","underline"),"italic"),"bold"),"gigantic"),"clrb#FF00B9"),"clrt#ff9700")); + module_display(pair(pair(pair(pair(pair("Hello World","underline"),"italic"),"bold"),"gigantic"),"clrt#0ff1ed")); + + Coloring: "clrt" stands for text color, "clrb" stands for background color. The color string are in hexadecimal begin with "#" and followed by 6 hexadecimal digits. + Example: pair("123","clrt#ff0000") will produce a red "123"; pair("456","clrb#00ff00") will produce a green "456". + Besides coloring, the following styles are also supported: + bold: Make the text bold. + italic: Make the text italic. + small: Make the text in small size. + medium: Make the text in medium size. + large: Make the text in large size. + gigantic: Make the text in very large size. + underline: Underline the text. + Note that if you apply the conflicting attributes together, only one conflicted style will take effect and other conflicting styles will be discarded, like " pair(pair(pair("123",small),medium),large) " (Set conflicting font size for the same text) + Also note that for safety matters, certain words and characters are not allowed to appear under rich text display mode. +*/ + +export { + set_evaluator, + module_display, + set_background_image, + set_font_size, + default_js_slang, +} from './functions'; diff --git a/src/bundles/repl/programmable_repl.ts b/src/bundles/repl/programmable_repl.ts index d1da36712..197372533 100644 --- a/src/bundles/repl/programmable_repl.ts +++ b/src/bundles/repl/programmable_repl.ts @@ -1,258 +1,258 @@ -/** - * Source Academy Programmable REPL module - * @module repl - * @author Wang Zihan - */ - - -import context from 'js-slang/context'; -import { default_js_slang } from './functions'; -import { runFilesInContext, type IOptions } from 'js-slang'; - -export class ProgrammableRepl { - public evalFunction: Function; - public userCodeInEditor: string; - public outputStrings: any[]; - private _editorInstance; - private _tabReactComponent: any; - - public customizedEditorProps = { - backgroundImageUrl: 'no-background-image', - backgroundColorAlpha: 1, - fontSize: 17, - }; - - constructor() { - this.evalFunction = (_placeholder) => this.easterEggFunction(); - this.userCodeInEditor = this.getSavedEditorContent(); - this.outputStrings = []; - this._editorInstance = null;// To be set when calling "SetEditorInstance" in the ProgrammableRepl Tab React Component render function. - developmentLog(this); - } - - InvokeREPL_Internal(evalFunc: Function) { - this.evalFunction = evalFunc; - } - - runCode() { - this.outputStrings = []; - let retVal: any; - try { - if (Object.is(this.evalFunction, default_js_slang)) { - retVal = this.runInJsSlang(this.userCodeInEditor); - } else { - retVal = this.evalFunction(this.userCodeInEditor); - } - } catch (exception: any) { - console.log(exception); - this.pushOutputString(`Line ${exception.location.start.line.toString()}: ${exception.error.message}`, 'red'); - this.reRenderTab(); - return; - } - if (retVal === undefined) { - this.pushOutputString('Program exit with undefined return value.', 'cyan'); - } else { - if (typeof (retVal) === 'string') { - retVal = `"${retVal}"`; - } - // Here must use plain text output mode because retVal contains strings from the users. - this.pushOutputString(`Program exit with return value ${retVal}`, 'cyan'); - } - this.reRenderTab(); - developmentLog('RunCode finished'); - } - - updateUserCode(code) { - this.userCodeInEditor = code; - } - - // Rich text output method allow output strings to have html tags and css styles. - pushOutputString(content : string, textColor : string, outputMethod : string = 'plaintext') { - let tmp = { - content, - color: textColor, - outputMethod, - }; - this.outputStrings.push(tmp); - } - - setEditorInstance(instance: any) { - if (instance === undefined) return; // It seems that when calling this function in gui->render->ref, the React internal calls this function for multiple times (at least two times) , and in at least one call the parameter 'instance' is set to 'undefined'. If I don't add this if statement, the program will throw a runtime error when rendering tab. - this._editorInstance = instance; - this._editorInstance.on('guttermousedown', (e) => { - const breakpointLine = e.getDocumentPosition().row; - developmentLog(breakpointLine); - }); - - this._editorInstance.setOptions({ fontSize: `${this.customizedEditorProps.fontSize.toString()}pt` }); - } - - richDisplayInternal(pair_rich_text) { - developmentLog(pair_rich_text); - const head = (pair) => pair[0]; - const tail = (pair) => pair[1]; - const is_pair = (obj) => obj instanceof Array && obj.length === 2; - if (!is_pair(pair_rich_text)) return 'not_rich_text_pair'; - function checkColorStringValidity(htmlColor:string) { - if (htmlColor.length !== 7) return false; - if (htmlColor[0] !== '#') return false; - for (let i = 1; i < 7; i++) { - const char = htmlColor[i]; - developmentLog(` ${char}`); - if (!((char >= '0' && char <= '9') || (char >= 'A' && char <= 'F') || (char >= 'a' && char <= 'f'))) { - return false; - } - } - return true; - } - function recursiveHelper(thisInstance, param): string { - if (typeof (param) === 'string') { - // There MUST be a safe check on users' strings, because users may insert something that can be interpreted as executable JavaScript code when outputing rich text. - const safeCheckResult = thisInstance.userStringSafeCheck(param); - if (safeCheckResult !== 'safe') { - throw new Error(`For safety matters, the character/word ${safeCheckResult} is not allowed in rich text output. Please remove it or use plain text output mode and try again.`); - } - developmentLog(head(param)); - return `">${param}`; - // return param; - } - if (!is_pair(param)) { - throw new Error(`Unexpected data type ${typeof (param)} when processing rich text. It should be a pair.`); - } else { - const pairStyleToCssStyle : { [pairStyle : string] : string } = { - bold: 'font-weight:bold;', - italic: 'font-style:italic;', - small: 'font-size: 14px;', - medium: 'font-size: 20px;', - large: 'font-size: 25px;', - gigantic: 'font-size: 50px;', - underline: 'text-decoration: underline;', - }; - if (typeof (tail(param)) !== 'string') { - throw new Error(`The tail in style pair should always be a string, but got ${typeof (tail(param))}.`); - } - let style = ''; - if (tail(param) - .substring(0, 3) === 'clr') { - let prefix = ''; - if (tail(param)[3] === 't') prefix = 'color:'; - else if (tail(param)[3] === 'b') prefix = 'background-color:'; - else throw new Error('Error when decoding rich text color data'); - const colorHex = tail(param) - .substring(4); - if (!checkColorStringValidity(colorHex)) { - throw new Error(`Invalid html color string ${colorHex}. It should start with # and followed by 6 characters representing a hex number.`); - } - style = `${prefix + colorHex};`; - } else { - style = pairStyleToCssStyle[tail(param)]; - if (style === undefined) { - throw new Error(`Found undefined style ${tail(param)} during processing rich text.`); - } - } - // return `${recursiveHelper(thisInstance, head(param))}`; - return style + recursiveHelper(thisInstance, head(param)); - } - } - this.pushOutputString(`', 'script', 'javascript', 'eval', 'document', 'window', 'console', 'location']; - for (let word of forbiddenWords) { - if (tmp.indexOf(word) !== -1) { - return word; - } - } - return 'safe'; - } - - /* - Directly invoking Source Academy's builtin js-slang runner. - Needs hard-coded support from js-slang part for the "sourceRunner" function and "backupContext" property in the content object for this to work. - */ - runInJsSlang(code: string): string { - developmentLog('js-slang context:'); - // console.log(context); - const options : Partial = { - originalMaxExecTime: 1000, - scheduler: 'preemptive', - stepLimit: 1000, - throwInfiniteLoops: true, - useSubst: false, - }; - context.prelude = 'const display=(x)=>module_display(x);'; - context.errors = []; // Here if I don't manually clear the "errors" array in context, the remaining errors from the last evaluation will stop the function "preprocessFileImports" in preprocessor.ts of js-slang thus stop the whole evaluation. - const sourceFile : Record = { - '/ReplModuleUserCode.js': code, - }; - - runFilesInContext(sourceFile, '/ReplModuleUserCode.js', context, options) - .then((evalResult) => { - if (evalResult.status === 'suspended' || evalResult.status === 'suspended-ec-eval') { - throw new Error('This should not happen'); - } - if (evalResult.status !== 'error') { - this.pushOutputString('js-slang program finished with value:', 'cyan'); - // Here must use plain text output mode because evalResult.value contains strings from the users. - this.pushOutputString(evalResult.value === undefined ? 'undefined' : evalResult.value.toString(), 'cyan'); - } else { - const errors = context.errors; - console.log(errors); - const errorCount = errors.length; - for (let i = 0; i < errorCount; i++) { - const error = errors[i]; - if (error.explain() - .indexOf('Name module_display not declared.') !== -1) { - this.pushOutputString('[Error] It seems that you haven\'t import the function "module_display" correctly when calling "set_evaluator" in Source Academy\'s main editor.', 'red'); - } else this.pushOutputString(`Line ${error.location.start.line}: ${error.type} Error: ${error.explain()} (${error.elaborate()})`, 'red'); - } - } - this.reRenderTab(); - }); - - return 'Async run in js-slang'; - } - - setTabReactComponentInstance(tab : any) { - this._tabReactComponent = tab; - } - - private reRenderTab() { - this._tabReactComponent.setState({});// Forces the tab React Component to re-render using setState - } - - saveEditorContent() { - localStorage.setItem('programmable_repl_saved_editor_code', this.userCodeInEditor.toString()); - this.pushOutputString('Saved', 'lightgreen'); - this.pushOutputString('The saved code is stored locally in your browser. You may lose the saved code if you clear browser data or use another device.', 'gray', 'richtext'); - this.reRenderTab(); - } - - private getSavedEditorContent() { - let savedContent = localStorage.getItem('programmable_repl_saved_editor_code'); - if (savedContent === null) return ''; - return savedContent; - } - - // Small Easter Egg that doesn't affect module functionality and normal user experience :) - // Please don't modify these text! Thanks! :) - private easterEggFunction() { - this.pushOutputString('[Author (Wang Zihan)] ❤I love Keqing and Ganyu.❤', 'pink', 'richtext'); - this.pushOutputString('Showing my love to my favorite girls through a SA module, is that the so-called "romance of a programmer"?', 'gray', 'richtext'); - this.pushOutputString('❤❤❤❤❤', 'pink'); - this.pushOutputString('
', 'white', 'richtext'); - this.pushOutputString('If you see this, please check whether you have called invoke_repl function with the correct parameter before using the Programmable Repl Tab.', 'yellow', 'richtext'); - return 'Easter Egg!'; - } -} - -// Comment all the codes inside this function before merging the code to github as production version. -// Because console.log() can expose the sandboxed VM location to students thus may cause security concerns. -function developmentLog(_content) { - // console.log(`[Programmable Repl Log] ${_content}`); -} +/** + * Source Academy Programmable REPL module + * @module repl + * @author Wang Zihan + */ + + +import context from 'js-slang/context'; +import { default_js_slang } from './functions'; +import { runFilesInContext, type IOptions } from 'js-slang'; + +export class ProgrammableRepl { + public evalFunction: Function; + public userCodeInEditor: string; + public outputStrings: any[]; + private _editorInstance; + private _tabReactComponent: any; + + public customizedEditorProps = { + backgroundImageUrl: 'no-background-image', + backgroundColorAlpha: 1, + fontSize: 17, + }; + + constructor() { + this.evalFunction = (_placeholder) => this.easterEggFunction(); + this.userCodeInEditor = this.getSavedEditorContent(); + this.outputStrings = []; + this._editorInstance = null;// To be set when calling "SetEditorInstance" in the ProgrammableRepl Tab React Component render function. + developmentLog(this); + } + + InvokeREPL_Internal(evalFunc: Function) { + this.evalFunction = evalFunc; + } + + runCode() { + this.outputStrings = []; + let retVal: any; + try { + if (Object.is(this.evalFunction, default_js_slang)) { + retVal = this.runInJsSlang(this.userCodeInEditor); + } else { + retVal = this.evalFunction(this.userCodeInEditor); + } + } catch (exception: any) { + console.log(exception); + this.pushOutputString(`Line ${exception.location.start.line.toString()}: ${exception.error.message}`, 'red'); + this.reRenderTab(); + return; + } + if (retVal === undefined) { + this.pushOutputString('Program exit with undefined return value.', 'cyan'); + } else { + if (typeof (retVal) === 'string') { + retVal = `"${retVal}"`; + } + // Here must use plain text output mode because retVal contains strings from the users. + this.pushOutputString(`Program exit with return value ${retVal}`, 'cyan'); + } + this.reRenderTab(); + developmentLog('RunCode finished'); + } + + updateUserCode(code) { + this.userCodeInEditor = code; + } + + // Rich text output method allow output strings to have html tags and css styles. + pushOutputString(content : string, textColor : string, outputMethod : string = 'plaintext') { + let tmp = { + content, + color: textColor, + outputMethod, + }; + this.outputStrings.push(tmp); + } + + setEditorInstance(instance: any) { + if (instance === undefined) return; // It seems that when calling this function in gui->render->ref, the React internal calls this function for multiple times (at least two times) , and in at least one call the parameter 'instance' is set to 'undefined'. If I don't add this if statement, the program will throw a runtime error when rendering tab. + this._editorInstance = instance; + this._editorInstance.on('guttermousedown', (e) => { + const breakpointLine = e.getDocumentPosition().row; + developmentLog(breakpointLine); + }); + + this._editorInstance.setOptions({ fontSize: `${this.customizedEditorProps.fontSize.toString()}pt` }); + } + + richDisplayInternal(pair_rich_text) { + developmentLog(pair_rich_text); + const head = (pair) => pair[0]; + const tail = (pair) => pair[1]; + const is_pair = (obj) => obj instanceof Array && obj.length === 2; + if (!is_pair(pair_rich_text)) return 'not_rich_text_pair'; + function checkColorStringValidity(htmlColor:string) { + if (htmlColor.length !== 7) return false; + if (htmlColor[0] !== '#') return false; + for (let i = 1; i < 7; i++) { + const char = htmlColor[i]; + developmentLog(` ${char}`); + if (!((char >= '0' && char <= '9') || (char >= 'A' && char <= 'F') || (char >= 'a' && char <= 'f'))) { + return false; + } + } + return true; + } + function recursiveHelper(thisInstance, param): string { + if (typeof (param) === 'string') { + // There MUST be a safe check on users' strings, because users may insert something that can be interpreted as executable JavaScript code when outputing rich text. + const safeCheckResult = thisInstance.userStringSafeCheck(param); + if (safeCheckResult !== 'safe') { + throw new Error(`For safety matters, the character/word ${safeCheckResult} is not allowed in rich text output. Please remove it or use plain text output mode and try again.`); + } + developmentLog(head(param)); + return `">${param}
`; + // return param; + } + if (!is_pair(param)) { + throw new Error(`Unexpected data type ${typeof (param)} when processing rich text. It should be a pair.`); + } else { + const pairStyleToCssStyle : { [pairStyle : string] : string } = { + bold: 'font-weight:bold;', + italic: 'font-style:italic;', + small: 'font-size: 14px;', + medium: 'font-size: 20px;', + large: 'font-size: 25px;', + gigantic: 'font-size: 50px;', + underline: 'text-decoration: underline;', + }; + if (typeof (tail(param)) !== 'string') { + throw new Error(`The tail in style pair should always be a string, but got ${typeof (tail(param))}.`); + } + let style = ''; + if (tail(param) + .substring(0, 3) === 'clr') { + let prefix = ''; + if (tail(param)[3] === 't') prefix = 'color:'; + else if (tail(param)[3] === 'b') prefix = 'background-color:'; + else throw new Error('Error when decoding rich text color data'); + const colorHex = tail(param) + .substring(4); + if (!checkColorStringValidity(colorHex)) { + throw new Error(`Invalid html color string ${colorHex}. It should start with # and followed by 6 characters representing a hex number.`); + } + style = `${prefix + colorHex};`; + } else { + style = pairStyleToCssStyle[tail(param)]; + if (style === undefined) { + throw new Error(`Found undefined style ${tail(param)} during processing rich text.`); + } + } + // return `${recursiveHelper(thisInstance, head(param))}`; + return style + recursiveHelper(thisInstance, head(param)); + } + } + this.pushOutputString(`', 'script', 'javascript', 'eval', 'document', 'window', 'console', 'location']; + for (let word of forbiddenWords) { + if (tmp.indexOf(word) !== -1) { + return word; + } + } + return 'safe'; + } + + /* + Directly invoking Source Academy's builtin js-slang runner. + Needs hard-coded support from js-slang part for the "sourceRunner" function and "backupContext" property in the content object for this to work. + */ + runInJsSlang(code: string): string { + developmentLog('js-slang context:'); + // console.log(context); + const options : Partial = { + originalMaxExecTime: 1000, + scheduler: 'preemptive', + stepLimit: 1000, + throwInfiniteLoops: true, + useSubst: false, + }; + context.prelude = 'const display=(x)=>module_display(x);'; + context.errors = []; // Here if I don't manually clear the "errors" array in context, the remaining errors from the last evaluation will stop the function "preprocessFileImports" in preprocessor.ts of js-slang thus stop the whole evaluation. + const sourceFile : Record = { + '/ReplModuleUserCode.js': code, + }; + + runFilesInContext(sourceFile, '/ReplModuleUserCode.js', context, options) + .then((evalResult) => { + if (evalResult.status === 'suspended' || evalResult.status === 'suspended-ec-eval') { + throw new Error('This should not happen'); + } + if (evalResult.status !== 'error') { + this.pushOutputString('js-slang program finished with value:', 'cyan'); + // Here must use plain text output mode because evalResult.value contains strings from the users. + this.pushOutputString(evalResult.value === undefined ? 'undefined' : evalResult.value.toString(), 'cyan'); + } else { + const errors = context.errors; + console.log(errors); + const errorCount = errors.length; + for (let i = 0; i < errorCount; i++) { + const error = errors[i]; + if (error.explain() + .indexOf('Name module_display not declared.') !== -1) { + this.pushOutputString('[Error] It seems that you haven\'t import the function "module_display" correctly when calling "set_evaluator" in Source Academy\'s main editor.', 'red'); + } else this.pushOutputString(`Line ${error.location.start.line}: ${error.type} Error: ${error.explain()} (${error.elaborate()})`, 'red'); + } + } + this.reRenderTab(); + }); + + return 'Async run in js-slang'; + } + + setTabReactComponentInstance(tab : any) { + this._tabReactComponent = tab; + } + + private reRenderTab() { + this._tabReactComponent.setState({});// Forces the tab React Component to re-render using setState + } + + saveEditorContent() { + localStorage.setItem('programmable_repl_saved_editor_code', this.userCodeInEditor.toString()); + this.pushOutputString('Saved', 'lightgreen'); + this.pushOutputString('The saved code is stored locally in your browser. You may lose the saved code if you clear browser data or use another device.', 'gray', 'richtext'); + this.reRenderTab(); + } + + private getSavedEditorContent() { + let savedContent = localStorage.getItem('programmable_repl_saved_editor_code'); + if (savedContent === null) return ''; + return savedContent; + } + + // Small Easter Egg that doesn't affect module functionality and normal user experience :) + // Please don't modify these text! Thanks! :) + private easterEggFunction() { + this.pushOutputString('[Author (Wang Zihan)] ❤I love Keqing and Ganyu.❤', 'pink', 'richtext'); + this.pushOutputString('Showing my love to my favorite girls through a SA module, is that the so-called "romance of a programmer"?', 'gray', 'richtext'); + this.pushOutputString('❤❤❤❤❤', 'pink'); + this.pushOutputString('
', 'white', 'richtext'); + this.pushOutputString('If you see this, please check whether you have called invoke_repl function with the correct parameter before using the Programmable Repl Tab.', 'yellow', 'richtext'); + return 'Easter Egg!'; + } +} + +// Comment all the codes inside this function before merging the code to github as production version. +// Because console.log() can expose the sandboxed VM location to students thus may cause security concerns. +function developmentLog(_content) { + // console.log(`[Programmable Repl Log] ${_content}`); +} diff --git a/src/bundles/rune/functions.ts b/src/bundles/rune/functions.ts index 71b3c7fe7..8a745d99c 100644 --- a/src/bundles/rune/functions.ts +++ b/src/bundles/rune/functions.ts @@ -1,1026 +1,1026 @@ -/** - * The module `rune` provides functions for drawing runes. - * - * A *Rune* is defined by its vertices (x,y,z,t), the colors on its vertices (r,g,b,a), a transformation matrix for rendering the Rune and a (could be empty) list of its sub-Runes. - * @module rune - */ -import context from 'js-slang/context'; -import { mat4, vec3 } from 'gl-matrix'; -import { - Rune, - NormalRune, - type RuneAnimation, - DrawnRune, - drawRunesToFrameBuffer, - AnimatedRune, -} from './rune'; -import { - getSquare, - getBlank, - getRcross, - getSail, - getTriangle, - getCorner, - getNova, - getCircle, - getHeart, - getPentagram, - getRibbon, - throwIfNotRune, - addColorFromHex, - colorPalette, - hexToColor, -} from './runes_ops'; -import { - type FrameBufferWithTexture, - getWebGlFromCanvas, - initFramebufferObject, - initShaderProgram, -} from './runes_webgl'; - -const drawnRunes: (DrawnRune | AnimatedRune)[] = []; -context.moduleContexts.rune.state = { - drawnRunes, -}; - -// ============================================================================= -// Basic Runes -// ============================================================================= - -/** - * Rune with the shape of a full square - * - * @category Primitive - */ -export const square: Rune = getSquare(); -/** - * Rune with the shape of a blank square - * - * @category Primitive - */ -export const blank: Rune = getBlank(); -/** - * Rune with the shape of a - * small square inside a large square, - * each diagonally split into a - * black and white half - * - * @category Primitive - */ -export const rcross: Rune = getRcross(); -/** - * Rune with the shape of a sail - * - * @category Primitive - */ -export const sail: Rune = getSail(); -/** - * Rune with the shape of a triangle - * - * @category Primitive - */ -export const triangle: Rune = getTriangle(); -/** - * Rune with black triangle, - * filling upper right corner - * - * @category Primitive - */ -export const corner: Rune = getCorner(); -/** - * Rune with the shape of two overlapping - * triangles, residing in the upper half - * of the shape - * - * @category Primitive - */ -export const nova: Rune = getNova(); -/** - * Rune with the shape of a circle - * - * @category Primitive - */ -export const circle: Rune = getCircle(); -/** - * Rune with the shape of a heart - * - * @category Primitive - */ -export const heart: Rune = getHeart(); -/** - * Rune with the shape of a pentagram - * - * @category Primitive - */ -export const pentagram: Rune = getPentagram(); -/** - * Rune with the shape of a ribbon - * winding outwards in an anticlockwise spiral - * - * @category Primitive - */ -export const ribbon: Rune = getRibbon(); - -// ============================================================================= -// Textured Runes -// ============================================================================= -/** - * Create a rune using the image provided in the url - * @param {string} imageUrl URL to the image that is used to create the rune. - * Note that the url must be from a domain that allows CORS. - * @returns {Rune} Rune created using the image. - * - * @category Main - */ -export function from_url(imageUrl: string): Rune { - const rune = getSquare(); - rune.texture = new Image(); - rune.texture.crossOrigin = 'anonymous'; - rune.texture.src = imageUrl; - return rune; -} - -// ============================================================================= -// XY-axis Transformation functions -// ============================================================================= - -/** - * Scales a given Rune by separate factors in x and y direction - * @param {number} ratio_x - Scaling factor in x direction - * @param {number} ratio_y - Scaling factor in y direction - * @param {Rune} rune - Given Rune - * @return {Rune} Resulting scaled Rune - * - * @category Main - */ -export function scale_independent( - ratio_x: number, - ratio_y: number, - rune: Rune, -): Rune { - throwIfNotRune('scale_independent', rune); - const scaleVec = vec3.fromValues(ratio_x, ratio_y, 1); - const scaleMat = mat4.create(); - mat4.scale(scaleMat, scaleMat, scaleVec); - - const wrapperMat = mat4.create(); - mat4.multiply(wrapperMat, scaleMat, wrapperMat); - return Rune.of({ - subRunes: [rune], - transformMatrix: wrapperMat, - }); -} - -/** - * Scales a given Rune by a given factor in both x and y direction - * @param {number} ratio - Scaling factor - * @param {Rune} rune - Given Rune - * @return {Rune} Resulting scaled Rune - * - * @category Main - */ -export function scale(ratio: number, rune: Rune): Rune { - throwIfNotRune('scale', rune); - return scale_independent(ratio, ratio, rune); -} - -/** - * Translates a given Rune by given values in x and y direction - * @param {number} x - Translation in x direction - * @param {number} y - Translation in y direction - * @param {Rune} rune - Given Rune - * @return {Rune} Resulting translated Rune - * - * @category Main - */ -export function translate(x: number, y: number, rune: Rune): Rune { - throwIfNotRune('translate', rune); - const translateVec = vec3.fromValues(x, -y, 0); - const translateMat = mat4.create(); - mat4.translate(translateMat, translateMat, translateVec); - - const wrapperMat = mat4.create(); - mat4.multiply(wrapperMat, translateMat, wrapperMat); - return Rune.of({ - subRunes: [rune], - transformMatrix: wrapperMat, - }); -} - -/** - * Rotates a given Rune by a given angle, - * given in radians, in anti-clockwise direction. - * Note that parts of the Rune - * may be cropped as a result. - * @param {number} rad - Angle in radians - * @param {Rune} rune - Given Rune - * @return {Rune} Rotated Rune - * - * @category Main - */ -export function rotate(rad: number, rune: Rune): Rune { - throwIfNotRune('rotate', rune); - const rotateMat = mat4.create(); - mat4.rotateZ(rotateMat, rotateMat, rad); - - const wrapperMat = mat4.create(); - mat4.multiply(wrapperMat, rotateMat, wrapperMat); - return Rune.of({ - subRunes: [rune], - transformMatrix: wrapperMat, - }); -} - -/** - * Makes a new Rune from two given Runes by - * placing the first on top of the second - * such that the first one occupies frac - * portion of the height of the result and - * the second the rest - * @param {number} frac - Fraction between 0 and 1 (inclusive) - * @param {Rune} rune1 - Given Rune - * @param {Rune} rune2 - Given Rune - * @return {Rune} Resulting Rune - * - * @category Main - */ -export function stack_frac(frac: number, rune1: Rune, rune2: Rune): Rune { - throwIfNotRune('stack_frac', rune1); - throwIfNotRune('stack_frac', rune2); - - if (!(frac >= 0 && frac <= 1)) { - throw Error('stack_frac can only take fraction in [0,1].'); - } - - const upper = translate(0, -(1 - frac), scale_independent(1, frac, rune1)); - const lower = translate(0, frac, scale_independent(1, 1 - frac, rune2)); - return Rune.of({ - subRunes: [upper, lower], - }); -} - -/** - * Makes a new Rune from two given Runes by - * placing the first on top of the second, each - * occupying equal parts of the height of the - * result - * @param {Rune} rune1 - Given Rune - * @param {Rune} rune2 - Given Rune - * @return {Rune} Resulting Rune - * - * @category Main - */ -export function stack(rune1: Rune, rune2: Rune): Rune { - throwIfNotRune('stack', rune1, rune2); - return stack_frac(1 / 2, rune1, rune2); -} - -/** - * Makes a new Rune from a given Rune - * by vertically stacking n copies of it - * @param {number} n - Positive integer - * @param {Rune} rune - Given Rune - * @return {Rune} Resulting Rune - * - * @category Main - */ -export function stackn(n: number, rune: Rune): Rune { - throwIfNotRune('stackn', rune); - if (n === 1) { - return rune; - } - return stack_frac(1 / n, rune, stackn(n - 1, rune)); -} - -/** - * Makes a new Rune from a given Rune - * by turning it a quarter-turn around the centre in - * clockwise direction. - * @param {Rune} rune - Given Rune - * @return {Rune} Resulting Rune - * - * @category Main - */ -export function quarter_turn_right(rune: Rune): Rune { - throwIfNotRune('quarter_turn_right', rune); - return rotate(-Math.PI / 2, rune); -} - -/** - * Makes a new Rune from a given Rune - * by turning it a quarter-turn in - * anti-clockwise direction. - * @param {Rune} rune - Given Rune - * @return {Rune} Resulting Rune - * - * @category Main - */ -export function quarter_turn_left(rune: Rune): Rune { - throwIfNotRune('quarter_turn_left', rune); - return rotate(Math.PI / 2, rune); -} - -/** - * Makes a new Rune from a given Rune - * by turning it upside-down - * @param {Rune} rune - Given Rune - * @return {Rune} Resulting Rune - * - * @category Main - */ -export function turn_upside_down(rune: Rune): Rune { - throwIfNotRune('turn_upside_down', rune); - return rotate(Math.PI, rune); -} - -/** - * Makes a new Rune from two given Runes by - * placing the first on the left of the second - * such that the first one occupies frac - * portion of the width of the result and - * the second the rest - * @param {number} frac - Fraction between 0 and 1 (inclusive) - * @param {Rune} rune1 - Given Rune - * @param {Rune} rune2 - Given Rune - * @return {Rune} Resulting Rune - * - * @category Main - */ -export function beside_frac(frac: number, rune1: Rune, rune2: Rune): Rune { - throwIfNotRune('beside_frac', rune1, rune2); - - if (!(frac >= 0 && frac <= 1)) { - throw Error('beside_frac can only take fraction in [0,1].'); - } - - const left = translate(-(1 - frac), 0, scale_independent(frac, 1, rune1)); - const right = translate(frac, 0, scale_independent(1 - frac, 1, rune2)); - return Rune.of({ - subRunes: [left, right], - }); -} - -/** - * Makes a new Rune from two given Runes by - * placing the first on the left of the second, - * both occupying equal portions of the width - * of the result - * @param {Rune} rune1 - Given Rune - * @param {Rune} rune2 - Given Rune - * @return {Rune} Resulting Rune - * - * @category Main - */ -export function beside(rune1: Rune, rune2: Rune): Rune { - throwIfNotRune('beside', rune1, rune2); - return beside_frac(1 / 2, rune1, rune2); -} - -/** - * Makes a new Rune from a given Rune by - * flipping it around a horizontal axis, - * turning it upside down - * @param {Rune} rune - Given Rune - * @return {Rune} Resulting Rune - * - * @category Main - */ -export function flip_vert(rune: Rune): Rune { - throwIfNotRune('flip_vert', rune); - return scale_independent(1, -1, rune); -} - -/** - * Makes a new Rune from a given Rune by - * flipping it around a vertical axis, - * creating a mirror image - * @param {Rune} rune - Given Rune - * @return {Rune} Resulting Rune - * - * @category Main - */ -export function flip_horiz(rune: Rune): Rune { - throwIfNotRune('flip_horiz', rune); - return scale_independent(-1, 1, rune); -} - -/** - * Makes a new Rune from a given Rune by - * arranging into a square for copies of the - * given Rune in different orientations - * @param {Rune} rune - Given Rune - * @return {Rune} Resulting Rune - * - * @category Main - */ -export function make_cross(rune: Rune): Rune { - throwIfNotRune('make_cross', rune); - return stack( - beside(quarter_turn_right(rune), rotate(Math.PI, rune)), - beside(rune, rotate(Math.PI / 2, rune)), - ); -} - -/** - * Applies a given function n times to an initial value - * @param {number} n - A non-negative integer - * @param {function} pattern - Unary function from Rune to Rune - * @param {Rune} initial - The initial Rune - * @return {Rune} - Result of n times application of pattern to initial: - * pattern(pattern(...pattern(pattern(initial))...)) - * - * @category Main - */ -export function repeat_pattern( - n: number, - pattern: (a: Rune) => Rune, - initial: Rune, -): Rune { - if (n === 0) { - return initial; - } - return pattern(repeat_pattern(n - 1, pattern, initial)); -} - -// ============================================================================= -// Z-axis Transformation functions -// ============================================================================= - -/** - * The depth range of the z-axis of a rune is [0,-1], this function gives a [0, -frac] of the depth range to rune1 and the rest to rune2. - * @param {number} frac - Fraction between 0 and 1 (inclusive) - * @param {Rune} rune1 - Given Rune - * @param {Rune} rune2 - Given Rune - * @return {Rune} Resulting Rune - * - * @category Main - */ -export function overlay_frac(frac: number, rune1: Rune, rune2: Rune): Rune { - // to developer: please read https://www.tutorialspoint.com/webgl/webgl_basics.htm to understand the webgl z-axis interpretation. - // The key point is that positive z is closer to the screen. Hence, the image at the back should have smaller z value. Primitive runes have z = 0. - throwIfNotRune('overlay_frac', rune1); - throwIfNotRune('overlay_frac', rune2); - if (!(frac >= 0 && frac <= 1)) { - throw Error('overlay_frac can only take fraction in [0,1].'); - } - // by definition, when frac == 0 or 1, the back rune will overlap with the front rune. - // however, this would cause graphical glitch because overlapping is physically impossible - // we hack this problem by clipping the frac input from [0,1] to [1E-6, 1-1E-6] - // this should not be graphically noticable - let useFrac = frac; - const minFrac = 0.000001; - const maxFrac = 1 - minFrac; - if (useFrac < minFrac) { - useFrac = minFrac; - } - if (useFrac > maxFrac) { - useFrac = maxFrac; - } - - const frontMat = mat4.create(); - // z: scale by frac - mat4.scale(frontMat, frontMat, vec3.fromValues(1, 1, useFrac)); - const front = Rune.of({ - subRunes: [rune1], - transformMatrix: frontMat, - }); - - const backMat = mat4.create(); - // need to apply transformation in backwards order! - mat4.translate(backMat, backMat, vec3.fromValues(0, 0, -useFrac)); - mat4.scale(backMat, backMat, vec3.fromValues(1, 1, 1 - useFrac)); - const back = Rune.of({ - subRunes: [rune2], - transformMatrix: backMat, - }); - - return Rune.of({ - subRunes: [front, back], // render front first to avoid redrawing - }); -} - -/** - * The depth range of the z-axis of a rune is [0,-1], this function maps the depth range of rune1 and rune2 to [0,-0.5] and [-0.5,-1] respectively. - * @param {Rune} rune1 - Given Rune - * @param {Rune} rune2 - Given Rune - * @return {Rune} Resulting Runes - * - * @category Main - */ -export function overlay(rune1: Rune, rune2: Rune): Rune { - throwIfNotRune('overlay', rune1); - throwIfNotRune('overlay', rune2); - return overlay_frac(0.5, rune1, rune2); -} - -// ============================================================================= -// Color functions -// ============================================================================= - -/** - * Adds color to rune by specifying - * the red, green, blue (RGB) value, ranging from 0.0 to 1.0. - * RGB is additive: if all values are 1, the color is white, - * and if all values are 0, the color is black. - * @param {Rune} rune - The rune to add color to - * @param {number} r - Red value [0.0-1.0] - * @param {number} g - Green value [0.0-1.0] - * @param {number} b - Blue value [0.0-1.0] - * @returns {Rune} The colored Rune - * - * @category Color - */ -export function color(rune: Rune, r: number, g: number, b: number): Rune { - throwIfNotRune('color', rune); - - const colorVector = [r, g, b, 1]; - return Rune.of({ - colors: new Float32Array(colorVector), - subRunes: [rune], - }); -} - -/** - * Gives random color to the given rune. - * The color is chosen randomly from the following nine - * colors: red, pink, purple, indigo, blue, green, yellow, orange, brown - * @param {Rune} rune - The rune to color - * @returns {Rune} The colored Rune - * - * @category Color - */ -export function random_color(rune: Rune): Rune { - throwIfNotRune('random_color', rune); - const randomColor = hexToColor( - colorPalette[Math.floor(Math.random() * colorPalette.length)], - ); - - return Rune.of({ - colors: new Float32Array(randomColor), - subRunes: [rune], - }); -} - -/** - * Colors the given rune red (#F44336). - * @param {Rune} rune - The rune to color - * @returns {Rune} The colored Rune - * - * @category Color - */ -export function red(rune: Rune): Rune { - throwIfNotRune('red', rune); - return addColorFromHex(rune, '#F44336'); -} - -/** - * Colors the given rune pink (#E91E63s). - * @param {Rune} rune - The rune to color - * @returns {Rune} The colored Rune - * - * @category Color - */ -export function pink(rune: Rune): Rune { - throwIfNotRune('pink', rune); - return addColorFromHex(rune, '#E91E63'); -} - -/** - * Colors the given rune purple (#AA00FF). - * @param {Rune} rune - The rune to color - * @returns {Rune} The colored Rune - * - * @category Color - */ -export function purple(rune: Rune): Rune { - throwIfNotRune('purple', rune); - return addColorFromHex(rune, '#AA00FF'); -} - -/** - * Colors the given rune indigo (#3F51B5). - * @param {Rune} rune - The rune to color - * @returns {Rune} The colored Rune - * - * @category Color - */ -export function indigo(rune: Rune): Rune { - throwIfNotRune('indigo', rune); - return addColorFromHex(rune, '#3F51B5'); -} - -/** - * Colors the given rune blue (#2196F3). - * @param {Rune} rune - The rune to color - * @returns {Rune} The colored Rune - * - * @category Color - */ -export function blue(rune: Rune): Rune { - throwIfNotRune('blue', rune); - return addColorFromHex(rune, '#2196F3'); -} - -/** - * Colors the given rune green (#4CAF50). - * @param {Rune} rune - The rune to color - * @returns {Rune} The colored Rune - * - * @category Color - */ -export function green(rune: Rune): Rune { - throwIfNotRune('green', rune); - return addColorFromHex(rune, '#4CAF50'); -} - -/** - * Colors the given rune yellow (#FFEB3B). - * @param {Rune} rune - The rune to color - * @returns {Rune} The colored Rune - * - * @category Color - */ -export function yellow(rune: Rune): Rune { - throwIfNotRune('yellow', rune); - return addColorFromHex(rune, '#FFEB3B'); -} - -/** - * Colors the given rune orange (#FF9800). - * @param {Rune} rune - The rune to color - * @returns {Rune} The colored Rune - * - * @category Color - */ -export function orange(rune: Rune): Rune { - throwIfNotRune('orange', rune); - return addColorFromHex(rune, '#FF9800'); -} - -/** - * Colors the given rune brown. - * @param {Rune} rune - The rune to color - * @returns {Rune} The colored Rune - * - * @category Color - */ -export function brown(rune: Rune): Rune { - throwIfNotRune('brown', rune); - return addColorFromHex(rune, '#795548'); -} - -/** - * Colors the given rune black (#000000). - * @param {Rune} rune - The rune to color - * @returns {Rune} The colored Rune - * - * @category Color - */ -export function black(rune: Rune): Rune { - throwIfNotRune('black', rune); - return addColorFromHex(rune, '#000000'); -} - -/** - * Colors the given rune white (#FFFFFF). - * @param {Rune} rune - The rune to color - * @returns {Rune} The colored Rune - * - * @category Color - */ -export function white(rune: Rune): Rune { - throwIfNotRune('white', rune); - return addColorFromHex(rune, '#FFFFFF'); -} - -// ============================================================================= -// Drawing functions -// ============================================================================= - -/** - * Renders the specified Rune in a tab as a basic drawing. - * @param rune - The Rune to render - * @return {Rune} The specified Rune - * - * @category Main - */ -export function show(rune: Rune): Rune { - throwIfNotRune('show', rune); - drawnRunes.push(new NormalRune(rune)); - return rune; -} - -/** @hidden */ -export class AnaglyphRune extends DrawnRune { - private static readonly anaglyphVertexShader = ` - precision mediump float; - attribute vec4 a_position; - varying highp vec2 v_texturePosition; - void main() { - gl_Position = a_position; - // texture position is in [0,1], vertex position is in [-1,1] - v_texturePosition.x = (a_position.x + 1.0) / 2.0; - v_texturePosition.y = (a_position.y + 1.0) / 2.0; - } - `; - - private static readonly anaglyphFragmentShader = ` - precision mediump float; - uniform sampler2D u_sampler_red; - uniform sampler2D u_sampler_cyan; - varying highp vec2 v_texturePosition; - void main() { - gl_FragColor = texture2D(u_sampler_red, v_texturePosition) - + texture2D(u_sampler_cyan, v_texturePosition) - 1.0; - gl_FragColor.a = 1.0; - } - `; - - constructor(rune: Rune) { - super(rune, false); - } - - public draw = (canvas: HTMLCanvasElement) => { - const gl = getWebGlFromCanvas(canvas); - - // before draw the runes to framebuffer, we need to first draw a white background to cover the transparent places - const runes = white(overlay_frac(0.999999999, blank, scale(2.2, square))) - .flatten() - .concat(this.rune.flatten()); - - // calculate the left and right camera matrices - const halfEyeDistance = 0.03; - const leftCameraMatrix = mat4.create(); - mat4.lookAt( - leftCameraMatrix, - vec3.fromValues(-halfEyeDistance, 0, 0), - vec3.fromValues(0, 0, -0.4), - vec3.fromValues(0, 1, 0), - ); - const rightCameraMatrix = mat4.create(); - mat4.lookAt( - rightCameraMatrix, - vec3.fromValues(halfEyeDistance, 0, 0), - vec3.fromValues(0, 0, -0.4), - vec3.fromValues(0, 1, 0), - ); - - // left/right eye images are drawn into respective framebuffers - const leftBuffer = initFramebufferObject(gl); - const rightBuffer = initFramebufferObject(gl); - drawRunesToFrameBuffer( - gl, - runes, - leftCameraMatrix, - new Float32Array([1, 0, 0, 1]), - leftBuffer.framebuffer, - true, - ); - drawRunesToFrameBuffer( - gl, - runes, - rightCameraMatrix, - new Float32Array([0, 1, 1, 1]), - rightBuffer.framebuffer, - true, - ); - - // prepare to draw to screen by setting framebuffer to null - gl.bindFramebuffer(gl.FRAMEBUFFER, null); - // prepare the shader program to combine the left/right eye images - const shaderProgram = initShaderProgram( - gl, - AnaglyphRune.anaglyphVertexShader, - AnaglyphRune.anaglyphFragmentShader, - ); - gl.useProgram(shaderProgram); - const reduPt = gl.getUniformLocation(shaderProgram, 'u_sampler_red'); - const cyanuPt = gl.getUniformLocation(shaderProgram, 'u_sampler_cyan'); - const vertexPositionPointer = gl.getAttribLocation( - shaderProgram, - 'a_position', - ); - - gl.activeTexture(gl.TEXTURE0); - gl.bindTexture(gl.TEXTURE_2D, leftBuffer.texture); - gl.uniform1i(cyanuPt, 0); - - gl.activeTexture(gl.TEXTURE1); - gl.bindTexture(gl.TEXTURE_2D, rightBuffer.texture); - gl.uniform1i(reduPt, 1); - - // draw a square, which will allow the texture to be used - // load position buffer - const positionBuffer = gl.createBuffer(); - gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer); - gl.bufferData(gl.ARRAY_BUFFER, square.vertices, gl.STATIC_DRAW); - gl.vertexAttribPointer(vertexPositionPointer, 4, gl.FLOAT, false, 0, 0); - gl.enableVertexAttribArray(vertexPositionPointer); - gl.drawArrays(gl.TRIANGLES, 0, 6); - }; -} - -/** - * Renders the specified Rune in a tab as an anaglyph. Use 3D glasses to view the - * anaglyph. - * @param rune - The Rune to render - * @return {Rune} The specified Rune - * - * @category Main - */ -export function anaglyph(rune: Rune): Rune { - throwIfNotRune('anaglyph', rune); - drawnRunes.push(new AnaglyphRune(rune)); - return rune; -} - -/** @hidden */ -export class HollusionRune extends DrawnRune { - constructor(rune: Rune, magnitude: number) { - super(rune, true); - this.rune.hollusionDistance = magnitude; - } - - private static readonly copyVertexShader = ` - precision mediump float; - attribute vec4 a_position; - varying highp vec2 v_texturePosition; - void main() { - gl_Position = a_position; - // texture position is in [0,1], vertex position is in [-1,1] - v_texturePosition.x = (a_position.x + 1.0) / 2.0; - v_texturePosition.y = (a_position.y + 1.0) / 2.0; - } - `; - - private static readonly copyFragmentShader = ` - precision mediump float; - uniform sampler2D uTexture; - varying highp vec2 v_texturePosition; - void main() { - gl_FragColor = texture2D(uTexture, v_texturePosition); - } - `; - - public draw = (canvas: HTMLCanvasElement) => { - const gl = getWebGlFromCanvas(canvas); - - const runes = white(overlay_frac(0.999999999, blank, scale(2.2, square))) - .flatten() - .concat(this.rune.flatten()); - - // first render all the frames into a framebuffer - const xshiftMax = runes[0].hollusionDistance; - const period = 2000; // animations loops every 2 seconds - const frameCount = 50; // in total 50 frames, gives rise to 25 fps - const frameBuffer: FrameBufferWithTexture[] = []; - - const renderFrame = (framePos: number): FrameBufferWithTexture => { - const fb = initFramebufferObject(gl); - // prepare camera projection array - const cameraMatrix = mat4.create(); - // let the object shift in the x direction - // the following calculation will let x oscillate in (-xshiftMax, xshiftMax) with time - let xshift = (framePos * (period / frameCount)) % period; - if (xshift > period / 2) { - xshift = period - xshift; - } - xshift = xshiftMax * (2 * ((2 * xshift) / period) - 1); - mat4.lookAt( - cameraMatrix, - vec3.fromValues(xshift, 0, 0), - vec3.fromValues(0, 0, -0.4), - vec3.fromValues(0, 1, 0), - ); - - drawRunesToFrameBuffer( - gl, - runes, - cameraMatrix, - new Float32Array([1, 1, 1, 1]), - fb.framebuffer, - true, - ); - return fb; - }; - - for (let i = 0; i < frameCount; i += 1) { - frameBuffer.push(renderFrame(i)); - } - - // Then, draw a frame from framebuffer for each update - const copyShaderProgram = initShaderProgram( - gl, - HollusionRune.copyVertexShader, - HollusionRune.copyFragmentShader, - ); - gl.useProgram(copyShaderProgram); - const texturePt = gl.getUniformLocation(copyShaderProgram, 'uTexture'); - const vertexPositionPointer = gl.getAttribLocation( - copyShaderProgram, - 'a_position', - ); - gl.bindFramebuffer(gl.FRAMEBUFFER, null); - const positionBuffer = gl.createBuffer(); - gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer); - gl.bufferData(gl.ARRAY_BUFFER, square.vertices, gl.STATIC_DRAW); - gl.vertexAttribPointer(vertexPositionPointer, 4, gl.FLOAT, false, 0, 0); - gl.enableVertexAttribArray(vertexPositionPointer); - - let lastTime = 0; - function render(timeInMs: number) { - if (timeInMs - lastTime < period / frameCount) return; - - lastTime = timeInMs; - - const framePos - = Math.floor(timeInMs / (period / frameCount)) % frameCount; - const fbObject = frameBuffer[framePos]; - gl.clearColor(1.0, 1.0, 1.0, 1.0); // Set clear color to white, fully opaque - // eslint-disable-next-line no-bitwise - gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); // Clear the viewport - - gl.activeTexture(gl.TEXTURE0); - gl.bindTexture(gl.TEXTURE_2D, fbObject.texture); - gl.uniform1i(texturePt, 0); - - gl.drawArrays(gl.TRIANGLES, 0, 6); - } - - return render; - }; -} - -/** - * Renders the specified Rune in a tab as a hollusion, using the specified - * magnitude. - * @param rune - The Rune to render - * @param {number} magnitude - The hollusion's magnitude - * @return {Rune} The specified Rune - * - * @category Main - */ -export function hollusion_magnitude(rune: Rune, magnitude: number): Rune { - throwIfNotRune('hollusion_magnitude', rune); - drawnRunes.push(new HollusionRune(rune, magnitude)); - return rune; -} - -/** - * Renders the specified Rune in a tab as a hollusion, with a default magnitude - * of 0.1. - * @param rune - The Rune to render - * @return {Rune} The specified Rune - * - * @category Main - */ -export function hollusion(rune: Rune): Rune { - throwIfNotRune('hollusion', rune); - return hollusion_magnitude(rune, 0.1); -} - -/** - * Create an animation of runes - * @param duration Duration of the entire animation in seconds - * @param fps Duration of each frame in frames per seconds - * @param func Takes in the timestamp and returns a Rune to draw - * @returns A rune animation - * - * @category Main - */ -export function animate_rune( - duration: number, - fps: number, - func: RuneAnimation, -) { - const anim = new AnimatedRune(duration, fps, (n) => { - const rune = func(n); - throwIfNotRune('animate_rune', rune); - return new NormalRune(rune); - }); - drawnRunes.push(anim); - return anim; -} - -/** - * Create an animation of anaglyph runes - * @param duration Duration of the entire animation in seconds - * @param fps Duration of each frame in frames per seconds - * @param func Takes in the timestamp and returns a Rune to draw - * @returns A rune animation - * - * @category Main - */ -export function animate_anaglyph( - duration: number, - fps: number, - func: RuneAnimation, -) { - const anim = new AnimatedRune(duration, fps, (n) => { - const rune = func(n); - throwIfNotRune('animate_anaglyph', rune); - return new AnaglyphRune(rune); - }); - drawnRunes.push(anim); - return anim; -} +/** + * The module `rune` provides functions for drawing runes. + * + * A *Rune* is defined by its vertices (x,y,z,t), the colors on its vertices (r,g,b,a), a transformation matrix for rendering the Rune and a (could be empty) list of its sub-Runes. + * @module rune + */ +import context from 'js-slang/context'; +import { mat4, vec3 } from 'gl-matrix'; +import { + Rune, + NormalRune, + type RuneAnimation, + DrawnRune, + drawRunesToFrameBuffer, + AnimatedRune, +} from './rune'; +import { + getSquare, + getBlank, + getRcross, + getSail, + getTriangle, + getCorner, + getNova, + getCircle, + getHeart, + getPentagram, + getRibbon, + throwIfNotRune, + addColorFromHex, + colorPalette, + hexToColor, +} from './runes_ops'; +import { + type FrameBufferWithTexture, + getWebGlFromCanvas, + initFramebufferObject, + initShaderProgram, +} from './runes_webgl'; + +const drawnRunes: (DrawnRune | AnimatedRune)[] = []; +context.moduleContexts.rune.state = { + drawnRunes, +}; + +// ============================================================================= +// Basic Runes +// ============================================================================= + +/** + * Rune with the shape of a full square + * + * @category Primitive + */ +export const square: Rune = getSquare(); +/** + * Rune with the shape of a blank square + * + * @category Primitive + */ +export const blank: Rune = getBlank(); +/** + * Rune with the shape of a + * small square inside a large square, + * each diagonally split into a + * black and white half + * + * @category Primitive + */ +export const rcross: Rune = getRcross(); +/** + * Rune with the shape of a sail + * + * @category Primitive + */ +export const sail: Rune = getSail(); +/** + * Rune with the shape of a triangle + * + * @category Primitive + */ +export const triangle: Rune = getTriangle(); +/** + * Rune with black triangle, + * filling upper right corner + * + * @category Primitive + */ +export const corner: Rune = getCorner(); +/** + * Rune with the shape of two overlapping + * triangles, residing in the upper half + * of the shape + * + * @category Primitive + */ +export const nova: Rune = getNova(); +/** + * Rune with the shape of a circle + * + * @category Primitive + */ +export const circle: Rune = getCircle(); +/** + * Rune with the shape of a heart + * + * @category Primitive + */ +export const heart: Rune = getHeart(); +/** + * Rune with the shape of a pentagram + * + * @category Primitive + */ +export const pentagram: Rune = getPentagram(); +/** + * Rune with the shape of a ribbon + * winding outwards in an anticlockwise spiral + * + * @category Primitive + */ +export const ribbon: Rune = getRibbon(); + +// ============================================================================= +// Textured Runes +// ============================================================================= +/** + * Create a rune using the image provided in the url + * @param {string} imageUrl URL to the image that is used to create the rune. + * Note that the url must be from a domain that allows CORS. + * @returns {Rune} Rune created using the image. + * + * @category Main + */ +export function from_url(imageUrl: string): Rune { + const rune = getSquare(); + rune.texture = new Image(); + rune.texture.crossOrigin = 'anonymous'; + rune.texture.src = imageUrl; + return rune; +} + +// ============================================================================= +// XY-axis Transformation functions +// ============================================================================= + +/** + * Scales a given Rune by separate factors in x and y direction + * @param {number} ratio_x - Scaling factor in x direction + * @param {number} ratio_y - Scaling factor in y direction + * @param {Rune} rune - Given Rune + * @return {Rune} Resulting scaled Rune + * + * @category Main + */ +export function scale_independent( + ratio_x: number, + ratio_y: number, + rune: Rune, +): Rune { + throwIfNotRune('scale_independent', rune); + const scaleVec = vec3.fromValues(ratio_x, ratio_y, 1); + const scaleMat = mat4.create(); + mat4.scale(scaleMat, scaleMat, scaleVec); + + const wrapperMat = mat4.create(); + mat4.multiply(wrapperMat, scaleMat, wrapperMat); + return Rune.of({ + subRunes: [rune], + transformMatrix: wrapperMat, + }); +} + +/** + * Scales a given Rune by a given factor in both x and y direction + * @param {number} ratio - Scaling factor + * @param {Rune} rune - Given Rune + * @return {Rune} Resulting scaled Rune + * + * @category Main + */ +export function scale(ratio: number, rune: Rune): Rune { + throwIfNotRune('scale', rune); + return scale_independent(ratio, ratio, rune); +} + +/** + * Translates a given Rune by given values in x and y direction + * @param {number} x - Translation in x direction + * @param {number} y - Translation in y direction + * @param {Rune} rune - Given Rune + * @return {Rune} Resulting translated Rune + * + * @category Main + */ +export function translate(x: number, y: number, rune: Rune): Rune { + throwIfNotRune('translate', rune); + const translateVec = vec3.fromValues(x, -y, 0); + const translateMat = mat4.create(); + mat4.translate(translateMat, translateMat, translateVec); + + const wrapperMat = mat4.create(); + mat4.multiply(wrapperMat, translateMat, wrapperMat); + return Rune.of({ + subRunes: [rune], + transformMatrix: wrapperMat, + }); +} + +/** + * Rotates a given Rune by a given angle, + * given in radians, in anti-clockwise direction. + * Note that parts of the Rune + * may be cropped as a result. + * @param {number} rad - Angle in radians + * @param {Rune} rune - Given Rune + * @return {Rune} Rotated Rune + * + * @category Main + */ +export function rotate(rad: number, rune: Rune): Rune { + throwIfNotRune('rotate', rune); + const rotateMat = mat4.create(); + mat4.rotateZ(rotateMat, rotateMat, rad); + + const wrapperMat = mat4.create(); + mat4.multiply(wrapperMat, rotateMat, wrapperMat); + return Rune.of({ + subRunes: [rune], + transformMatrix: wrapperMat, + }); +} + +/** + * Makes a new Rune from two given Runes by + * placing the first on top of the second + * such that the first one occupies frac + * portion of the height of the result and + * the second the rest + * @param {number} frac - Fraction between 0 and 1 (inclusive) + * @param {Rune} rune1 - Given Rune + * @param {Rune} rune2 - Given Rune + * @return {Rune} Resulting Rune + * + * @category Main + */ +export function stack_frac(frac: number, rune1: Rune, rune2: Rune): Rune { + throwIfNotRune('stack_frac', rune1); + throwIfNotRune('stack_frac', rune2); + + if (!(frac >= 0 && frac <= 1)) { + throw Error('stack_frac can only take fraction in [0,1].'); + } + + const upper = translate(0, -(1 - frac), scale_independent(1, frac, rune1)); + const lower = translate(0, frac, scale_independent(1, 1 - frac, rune2)); + return Rune.of({ + subRunes: [upper, lower], + }); +} + +/** + * Makes a new Rune from two given Runes by + * placing the first on top of the second, each + * occupying equal parts of the height of the + * result + * @param {Rune} rune1 - Given Rune + * @param {Rune} rune2 - Given Rune + * @return {Rune} Resulting Rune + * + * @category Main + */ +export function stack(rune1: Rune, rune2: Rune): Rune { + throwIfNotRune('stack', rune1, rune2); + return stack_frac(1 / 2, rune1, rune2); +} + +/** + * Makes a new Rune from a given Rune + * by vertically stacking n copies of it + * @param {number} n - Positive integer + * @param {Rune} rune - Given Rune + * @return {Rune} Resulting Rune + * + * @category Main + */ +export function stackn(n: number, rune: Rune): Rune { + throwIfNotRune('stackn', rune); + if (n === 1) { + return rune; + } + return stack_frac(1 / n, rune, stackn(n - 1, rune)); +} + +/** + * Makes a new Rune from a given Rune + * by turning it a quarter-turn around the centre in + * clockwise direction. + * @param {Rune} rune - Given Rune + * @return {Rune} Resulting Rune + * + * @category Main + */ +export function quarter_turn_right(rune: Rune): Rune { + throwIfNotRune('quarter_turn_right', rune); + return rotate(-Math.PI / 2, rune); +} + +/** + * Makes a new Rune from a given Rune + * by turning it a quarter-turn in + * anti-clockwise direction. + * @param {Rune} rune - Given Rune + * @return {Rune} Resulting Rune + * + * @category Main + */ +export function quarter_turn_left(rune: Rune): Rune { + throwIfNotRune('quarter_turn_left', rune); + return rotate(Math.PI / 2, rune); +} + +/** + * Makes a new Rune from a given Rune + * by turning it upside-down + * @param {Rune} rune - Given Rune + * @return {Rune} Resulting Rune + * + * @category Main + */ +export function turn_upside_down(rune: Rune): Rune { + throwIfNotRune('turn_upside_down', rune); + return rotate(Math.PI, rune); +} + +/** + * Makes a new Rune from two given Runes by + * placing the first on the left of the second + * such that the first one occupies frac + * portion of the width of the result and + * the second the rest + * @param {number} frac - Fraction between 0 and 1 (inclusive) + * @param {Rune} rune1 - Given Rune + * @param {Rune} rune2 - Given Rune + * @return {Rune} Resulting Rune + * + * @category Main + */ +export function beside_frac(frac: number, rune1: Rune, rune2: Rune): Rune { + throwIfNotRune('beside_frac', rune1, rune2); + + if (!(frac >= 0 && frac <= 1)) { + throw Error('beside_frac can only take fraction in [0,1].'); + } + + const left = translate(-(1 - frac), 0, scale_independent(frac, 1, rune1)); + const right = translate(frac, 0, scale_independent(1 - frac, 1, rune2)); + return Rune.of({ + subRunes: [left, right], + }); +} + +/** + * Makes a new Rune from two given Runes by + * placing the first on the left of the second, + * both occupying equal portions of the width + * of the result + * @param {Rune} rune1 - Given Rune + * @param {Rune} rune2 - Given Rune + * @return {Rune} Resulting Rune + * + * @category Main + */ +export function beside(rune1: Rune, rune2: Rune): Rune { + throwIfNotRune('beside', rune1, rune2); + return beside_frac(1 / 2, rune1, rune2); +} + +/** + * Makes a new Rune from a given Rune by + * flipping it around a horizontal axis, + * turning it upside down + * @param {Rune} rune - Given Rune + * @return {Rune} Resulting Rune + * + * @category Main + */ +export function flip_vert(rune: Rune): Rune { + throwIfNotRune('flip_vert', rune); + return scale_independent(1, -1, rune); +} + +/** + * Makes a new Rune from a given Rune by + * flipping it around a vertical axis, + * creating a mirror image + * @param {Rune} rune - Given Rune + * @return {Rune} Resulting Rune + * + * @category Main + */ +export function flip_horiz(rune: Rune): Rune { + throwIfNotRune('flip_horiz', rune); + return scale_independent(-1, 1, rune); +} + +/** + * Makes a new Rune from a given Rune by + * arranging into a square for copies of the + * given Rune in different orientations + * @param {Rune} rune - Given Rune + * @return {Rune} Resulting Rune + * + * @category Main + */ +export function make_cross(rune: Rune): Rune { + throwIfNotRune('make_cross', rune); + return stack( + beside(quarter_turn_right(rune), rotate(Math.PI, rune)), + beside(rune, rotate(Math.PI / 2, rune)), + ); +} + +/** + * Applies a given function n times to an initial value + * @param {number} n - A non-negative integer + * @param {function} pattern - Unary function from Rune to Rune + * @param {Rune} initial - The initial Rune + * @return {Rune} - Result of n times application of pattern to initial: + * pattern(pattern(...pattern(pattern(initial))...)) + * + * @category Main + */ +export function repeat_pattern( + n: number, + pattern: (a: Rune) => Rune, + initial: Rune, +): Rune { + if (n === 0) { + return initial; + } + return pattern(repeat_pattern(n - 1, pattern, initial)); +} + +// ============================================================================= +// Z-axis Transformation functions +// ============================================================================= + +/** + * The depth range of the z-axis of a rune is [0,-1], this function gives a [0, -frac] of the depth range to rune1 and the rest to rune2. + * @param {number} frac - Fraction between 0 and 1 (inclusive) + * @param {Rune} rune1 - Given Rune + * @param {Rune} rune2 - Given Rune + * @return {Rune} Resulting Rune + * + * @category Main + */ +export function overlay_frac(frac: number, rune1: Rune, rune2: Rune): Rune { + // to developer: please read https://www.tutorialspoint.com/webgl/webgl_basics.htm to understand the webgl z-axis interpretation. + // The key point is that positive z is closer to the screen. Hence, the image at the back should have smaller z value. Primitive runes have z = 0. + throwIfNotRune('overlay_frac', rune1); + throwIfNotRune('overlay_frac', rune2); + if (!(frac >= 0 && frac <= 1)) { + throw Error('overlay_frac can only take fraction in [0,1].'); + } + // by definition, when frac == 0 or 1, the back rune will overlap with the front rune. + // however, this would cause graphical glitch because overlapping is physically impossible + // we hack this problem by clipping the frac input from [0,1] to [1E-6, 1-1E-6] + // this should not be graphically noticable + let useFrac = frac; + const minFrac = 0.000001; + const maxFrac = 1 - minFrac; + if (useFrac < minFrac) { + useFrac = minFrac; + } + if (useFrac > maxFrac) { + useFrac = maxFrac; + } + + const frontMat = mat4.create(); + // z: scale by frac + mat4.scale(frontMat, frontMat, vec3.fromValues(1, 1, useFrac)); + const front = Rune.of({ + subRunes: [rune1], + transformMatrix: frontMat, + }); + + const backMat = mat4.create(); + // need to apply transformation in backwards order! + mat4.translate(backMat, backMat, vec3.fromValues(0, 0, -useFrac)); + mat4.scale(backMat, backMat, vec3.fromValues(1, 1, 1 - useFrac)); + const back = Rune.of({ + subRunes: [rune2], + transformMatrix: backMat, + }); + + return Rune.of({ + subRunes: [front, back], // render front first to avoid redrawing + }); +} + +/** + * The depth range of the z-axis of a rune is [0,-1], this function maps the depth range of rune1 and rune2 to [0,-0.5] and [-0.5,-1] respectively. + * @param {Rune} rune1 - Given Rune + * @param {Rune} rune2 - Given Rune + * @return {Rune} Resulting Runes + * + * @category Main + */ +export function overlay(rune1: Rune, rune2: Rune): Rune { + throwIfNotRune('overlay', rune1); + throwIfNotRune('overlay', rune2); + return overlay_frac(0.5, rune1, rune2); +} + +// ============================================================================= +// Color functions +// ============================================================================= + +/** + * Adds color to rune by specifying + * the red, green, blue (RGB) value, ranging from 0.0 to 1.0. + * RGB is additive: if all values are 1, the color is white, + * and if all values are 0, the color is black. + * @param {Rune} rune - The rune to add color to + * @param {number} r - Red value [0.0-1.0] + * @param {number} g - Green value [0.0-1.0] + * @param {number} b - Blue value [0.0-1.0] + * @returns {Rune} The colored Rune + * + * @category Color + */ +export function color(rune: Rune, r: number, g: number, b: number): Rune { + throwIfNotRune('color', rune); + + const colorVector = [r, g, b, 1]; + return Rune.of({ + colors: new Float32Array(colorVector), + subRunes: [rune], + }); +} + +/** + * Gives random color to the given rune. + * The color is chosen randomly from the following nine + * colors: red, pink, purple, indigo, blue, green, yellow, orange, brown + * @param {Rune} rune - The rune to color + * @returns {Rune} The colored Rune + * + * @category Color + */ +export function random_color(rune: Rune): Rune { + throwIfNotRune('random_color', rune); + const randomColor = hexToColor( + colorPalette[Math.floor(Math.random() * colorPalette.length)], + ); + + return Rune.of({ + colors: new Float32Array(randomColor), + subRunes: [rune], + }); +} + +/** + * Colors the given rune red (#F44336). + * @param {Rune} rune - The rune to color + * @returns {Rune} The colored Rune + * + * @category Color + */ +export function red(rune: Rune): Rune { + throwIfNotRune('red', rune); + return addColorFromHex(rune, '#F44336'); +} + +/** + * Colors the given rune pink (#E91E63s). + * @param {Rune} rune - The rune to color + * @returns {Rune} The colored Rune + * + * @category Color + */ +export function pink(rune: Rune): Rune { + throwIfNotRune('pink', rune); + return addColorFromHex(rune, '#E91E63'); +} + +/** + * Colors the given rune purple (#AA00FF). + * @param {Rune} rune - The rune to color + * @returns {Rune} The colored Rune + * + * @category Color + */ +export function purple(rune: Rune): Rune { + throwIfNotRune('purple', rune); + return addColorFromHex(rune, '#AA00FF'); +} + +/** + * Colors the given rune indigo (#3F51B5). + * @param {Rune} rune - The rune to color + * @returns {Rune} The colored Rune + * + * @category Color + */ +export function indigo(rune: Rune): Rune { + throwIfNotRune('indigo', rune); + return addColorFromHex(rune, '#3F51B5'); +} + +/** + * Colors the given rune blue (#2196F3). + * @param {Rune} rune - The rune to color + * @returns {Rune} The colored Rune + * + * @category Color + */ +export function blue(rune: Rune): Rune { + throwIfNotRune('blue', rune); + return addColorFromHex(rune, '#2196F3'); +} + +/** + * Colors the given rune green (#4CAF50). + * @param {Rune} rune - The rune to color + * @returns {Rune} The colored Rune + * + * @category Color + */ +export function green(rune: Rune): Rune { + throwIfNotRune('green', rune); + return addColorFromHex(rune, '#4CAF50'); +} + +/** + * Colors the given rune yellow (#FFEB3B). + * @param {Rune} rune - The rune to color + * @returns {Rune} The colored Rune + * + * @category Color + */ +export function yellow(rune: Rune): Rune { + throwIfNotRune('yellow', rune); + return addColorFromHex(rune, '#FFEB3B'); +} + +/** + * Colors the given rune orange (#FF9800). + * @param {Rune} rune - The rune to color + * @returns {Rune} The colored Rune + * + * @category Color + */ +export function orange(rune: Rune): Rune { + throwIfNotRune('orange', rune); + return addColorFromHex(rune, '#FF9800'); +} + +/** + * Colors the given rune brown. + * @param {Rune} rune - The rune to color + * @returns {Rune} The colored Rune + * + * @category Color + */ +export function brown(rune: Rune): Rune { + throwIfNotRune('brown', rune); + return addColorFromHex(rune, '#795548'); +} + +/** + * Colors the given rune black (#000000). + * @param {Rune} rune - The rune to color + * @returns {Rune} The colored Rune + * + * @category Color + */ +export function black(rune: Rune): Rune { + throwIfNotRune('black', rune); + return addColorFromHex(rune, '#000000'); +} + +/** + * Colors the given rune white (#FFFFFF). + * @param {Rune} rune - The rune to color + * @returns {Rune} The colored Rune + * + * @category Color + */ +export function white(rune: Rune): Rune { + throwIfNotRune('white', rune); + return addColorFromHex(rune, '#FFFFFF'); +} + +// ============================================================================= +// Drawing functions +// ============================================================================= + +/** + * Renders the specified Rune in a tab as a basic drawing. + * @param rune - The Rune to render + * @return {Rune} The specified Rune + * + * @category Main + */ +export function show(rune: Rune): Rune { + throwIfNotRune('show', rune); + drawnRunes.push(new NormalRune(rune)); + return rune; +} + +/** @hidden */ +export class AnaglyphRune extends DrawnRune { + private static readonly anaglyphVertexShader = ` + precision mediump float; + attribute vec4 a_position; + varying highp vec2 v_texturePosition; + void main() { + gl_Position = a_position; + // texture position is in [0,1], vertex position is in [-1,1] + v_texturePosition.x = (a_position.x + 1.0) / 2.0; + v_texturePosition.y = (a_position.y + 1.0) / 2.0; + } + `; + + private static readonly anaglyphFragmentShader = ` + precision mediump float; + uniform sampler2D u_sampler_red; + uniform sampler2D u_sampler_cyan; + varying highp vec2 v_texturePosition; + void main() { + gl_FragColor = texture2D(u_sampler_red, v_texturePosition) + + texture2D(u_sampler_cyan, v_texturePosition) - 1.0; + gl_FragColor.a = 1.0; + } + `; + + constructor(rune: Rune) { + super(rune, false); + } + + public draw = (canvas: HTMLCanvasElement) => { + const gl = getWebGlFromCanvas(canvas); + + // before draw the runes to framebuffer, we need to first draw a white background to cover the transparent places + const runes = white(overlay_frac(0.999999999, blank, scale(2.2, square))) + .flatten() + .concat(this.rune.flatten()); + + // calculate the left and right camera matrices + const halfEyeDistance = 0.03; + const leftCameraMatrix = mat4.create(); + mat4.lookAt( + leftCameraMatrix, + vec3.fromValues(-halfEyeDistance, 0, 0), + vec3.fromValues(0, 0, -0.4), + vec3.fromValues(0, 1, 0), + ); + const rightCameraMatrix = mat4.create(); + mat4.lookAt( + rightCameraMatrix, + vec3.fromValues(halfEyeDistance, 0, 0), + vec3.fromValues(0, 0, -0.4), + vec3.fromValues(0, 1, 0), + ); + + // left/right eye images are drawn into respective framebuffers + const leftBuffer = initFramebufferObject(gl); + const rightBuffer = initFramebufferObject(gl); + drawRunesToFrameBuffer( + gl, + runes, + leftCameraMatrix, + new Float32Array([1, 0, 0, 1]), + leftBuffer.framebuffer, + true, + ); + drawRunesToFrameBuffer( + gl, + runes, + rightCameraMatrix, + new Float32Array([0, 1, 1, 1]), + rightBuffer.framebuffer, + true, + ); + + // prepare to draw to screen by setting framebuffer to null + gl.bindFramebuffer(gl.FRAMEBUFFER, null); + // prepare the shader program to combine the left/right eye images + const shaderProgram = initShaderProgram( + gl, + AnaglyphRune.anaglyphVertexShader, + AnaglyphRune.anaglyphFragmentShader, + ); + gl.useProgram(shaderProgram); + const reduPt = gl.getUniformLocation(shaderProgram, 'u_sampler_red'); + const cyanuPt = gl.getUniformLocation(shaderProgram, 'u_sampler_cyan'); + const vertexPositionPointer = gl.getAttribLocation( + shaderProgram, + 'a_position', + ); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, leftBuffer.texture); + gl.uniform1i(cyanuPt, 0); + + gl.activeTexture(gl.TEXTURE1); + gl.bindTexture(gl.TEXTURE_2D, rightBuffer.texture); + gl.uniform1i(reduPt, 1); + + // draw a square, which will allow the texture to be used + // load position buffer + const positionBuffer = gl.createBuffer(); + gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer); + gl.bufferData(gl.ARRAY_BUFFER, square.vertices, gl.STATIC_DRAW); + gl.vertexAttribPointer(vertexPositionPointer, 4, gl.FLOAT, false, 0, 0); + gl.enableVertexAttribArray(vertexPositionPointer); + gl.drawArrays(gl.TRIANGLES, 0, 6); + }; +} + +/** + * Renders the specified Rune in a tab as an anaglyph. Use 3D glasses to view the + * anaglyph. + * @param rune - The Rune to render + * @return {Rune} The specified Rune + * + * @category Main + */ +export function anaglyph(rune: Rune): Rune { + throwIfNotRune('anaglyph', rune); + drawnRunes.push(new AnaglyphRune(rune)); + return rune; +} + +/** @hidden */ +export class HollusionRune extends DrawnRune { + constructor(rune: Rune, magnitude: number) { + super(rune, true); + this.rune.hollusionDistance = magnitude; + } + + private static readonly copyVertexShader = ` + precision mediump float; + attribute vec4 a_position; + varying highp vec2 v_texturePosition; + void main() { + gl_Position = a_position; + // texture position is in [0,1], vertex position is in [-1,1] + v_texturePosition.x = (a_position.x + 1.0) / 2.0; + v_texturePosition.y = (a_position.y + 1.0) / 2.0; + } + `; + + private static readonly copyFragmentShader = ` + precision mediump float; + uniform sampler2D uTexture; + varying highp vec2 v_texturePosition; + void main() { + gl_FragColor = texture2D(uTexture, v_texturePosition); + } + `; + + public draw = (canvas: HTMLCanvasElement) => { + const gl = getWebGlFromCanvas(canvas); + + const runes = white(overlay_frac(0.999999999, blank, scale(2.2, square))) + .flatten() + .concat(this.rune.flatten()); + + // first render all the frames into a framebuffer + const xshiftMax = runes[0].hollusionDistance; + const period = 2000; // animations loops every 2 seconds + const frameCount = 50; // in total 50 frames, gives rise to 25 fps + const frameBuffer: FrameBufferWithTexture[] = []; + + const renderFrame = (framePos: number): FrameBufferWithTexture => { + const fb = initFramebufferObject(gl); + // prepare camera projection array + const cameraMatrix = mat4.create(); + // let the object shift in the x direction + // the following calculation will let x oscillate in (-xshiftMax, xshiftMax) with time + let xshift = (framePos * (period / frameCount)) % period; + if (xshift > period / 2) { + xshift = period - xshift; + } + xshift = xshiftMax * (2 * ((2 * xshift) / period) - 1); + mat4.lookAt( + cameraMatrix, + vec3.fromValues(xshift, 0, 0), + vec3.fromValues(0, 0, -0.4), + vec3.fromValues(0, 1, 0), + ); + + drawRunesToFrameBuffer( + gl, + runes, + cameraMatrix, + new Float32Array([1, 1, 1, 1]), + fb.framebuffer, + true, + ); + return fb; + }; + + for (let i = 0; i < frameCount; i += 1) { + frameBuffer.push(renderFrame(i)); + } + + // Then, draw a frame from framebuffer for each update + const copyShaderProgram = initShaderProgram( + gl, + HollusionRune.copyVertexShader, + HollusionRune.copyFragmentShader, + ); + gl.useProgram(copyShaderProgram); + const texturePt = gl.getUniformLocation(copyShaderProgram, 'uTexture'); + const vertexPositionPointer = gl.getAttribLocation( + copyShaderProgram, + 'a_position', + ); + gl.bindFramebuffer(gl.FRAMEBUFFER, null); + const positionBuffer = gl.createBuffer(); + gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer); + gl.bufferData(gl.ARRAY_BUFFER, square.vertices, gl.STATIC_DRAW); + gl.vertexAttribPointer(vertexPositionPointer, 4, gl.FLOAT, false, 0, 0); + gl.enableVertexAttribArray(vertexPositionPointer); + + let lastTime = 0; + function render(timeInMs: number) { + if (timeInMs - lastTime < period / frameCount) return; + + lastTime = timeInMs; + + const framePos + = Math.floor(timeInMs / (period / frameCount)) % frameCount; + const fbObject = frameBuffer[framePos]; + gl.clearColor(1.0, 1.0, 1.0, 1.0); // Set clear color to white, fully opaque + // eslint-disable-next-line no-bitwise + gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); // Clear the viewport + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, fbObject.texture); + gl.uniform1i(texturePt, 0); + + gl.drawArrays(gl.TRIANGLES, 0, 6); + } + + return render; + }; +} + +/** + * Renders the specified Rune in a tab as a hollusion, using the specified + * magnitude. + * @param rune - The Rune to render + * @param {number} magnitude - The hollusion's magnitude + * @return {Rune} The specified Rune + * + * @category Main + */ +export function hollusion_magnitude(rune: Rune, magnitude: number): Rune { + throwIfNotRune('hollusion_magnitude', rune); + drawnRunes.push(new HollusionRune(rune, magnitude)); + return rune; +} + +/** + * Renders the specified Rune in a tab as a hollusion, with a default magnitude + * of 0.1. + * @param rune - The Rune to render + * @return {Rune} The specified Rune + * + * @category Main + */ +export function hollusion(rune: Rune): Rune { + throwIfNotRune('hollusion', rune); + return hollusion_magnitude(rune, 0.1); +} + +/** + * Create an animation of runes + * @param duration Duration of the entire animation in seconds + * @param fps Duration of each frame in frames per seconds + * @param func Takes in the timestamp and returns a Rune to draw + * @returns A rune animation + * + * @category Main + */ +export function animate_rune( + duration: number, + fps: number, + func: RuneAnimation, +) { + const anim = new AnimatedRune(duration, fps, (n) => { + const rune = func(n); + throwIfNotRune('animate_rune', rune); + return new NormalRune(rune); + }); + drawnRunes.push(anim); + return anim; +} + +/** + * Create an animation of anaglyph runes + * @param duration Duration of the entire animation in seconds + * @param fps Duration of each frame in frames per seconds + * @param func Takes in the timestamp and returns a Rune to draw + * @returns A rune animation + * + * @category Main + */ +export function animate_anaglyph( + duration: number, + fps: number, + func: RuneAnimation, +) { + const anim = new AnimatedRune(duration, fps, (n) => { + const rune = func(n); + throwIfNotRune('animate_anaglyph', rune); + return new AnaglyphRune(rune); + }); + drawnRunes.push(anim); + return anim; +} diff --git a/src/bundles/rune/index.ts b/src/bundles/rune/index.ts index 546eba1fb..4b08a251f 100644 --- a/src/bundles/rune/index.ts +++ b/src/bundles/rune/index.ts @@ -1,55 +1,55 @@ -/** - * Bundle for Source Academy Runes module - * @author Hou Ruomu - */ -export { - anaglyph, - animate_anaglyph, - animate_rune, - beside, - beside_frac, - black, - blank, - blue, - brown, - circle, - color, - corner, - flip_horiz, - flip_vert, - from_url, - green, - heart, - hollusion, - hollusion_magnitude, - indigo, - make_cross, - nova, - orange, - overlay, - overlay_frac, - pentagram, - pink, - purple, - quarter_turn_left, - quarter_turn_right, - random_color, - rcross, - red, - repeat_pattern, - ribbon, - rotate, - sail, - scale, - scale_independent, - show, - square, - stack, - stackn, - stack_frac, - translate, - triangle, - turn_upside_down, - white, - yellow, -} from './functions'; +/** + * Bundle for Source Academy Runes module + * @author Hou Ruomu + */ +export { + anaglyph, + animate_anaglyph, + animate_rune, + beside, + beside_frac, + black, + blank, + blue, + brown, + circle, + color, + corner, + flip_horiz, + flip_vert, + from_url, + green, + heart, + hollusion, + hollusion_magnitude, + indigo, + make_cross, + nova, + orange, + overlay, + overlay_frac, + pentagram, + pink, + purple, + quarter_turn_left, + quarter_turn_right, + random_color, + rcross, + red, + repeat_pattern, + ribbon, + rotate, + sail, + scale, + scale_independent, + show, + square, + stack, + stackn, + stack_frac, + translate, + triangle, + turn_upside_down, + white, + yellow, +} from './functions'; diff --git a/src/bundles/rune/rune.ts b/src/bundles/rune/rune.ts index ee3ea3a64..d1ab043a9 100644 --- a/src/bundles/rune/rune.ts +++ b/src/bundles/rune/rune.ts @@ -1,412 +1,412 @@ -import { mat4 } from 'gl-matrix'; -import { type AnimFrame, glAnimation } from '../../typings/anim_types'; -import type { ReplResult } from '../../typings/type_helpers'; -import { getWebGlFromCanvas, initShaderProgram } from './runes_webgl'; - -const normalVertexShader = ` -attribute vec4 aVertexPosition; -uniform vec4 uVertexColor; -uniform mat4 uModelViewMatrix; -uniform mat4 uProjectionMatrix; -uniform mat4 uCameraMatrix; - -varying lowp vec4 vColor; -varying highp vec2 vTexturePosition; -varying lowp float colorFactor; -void main(void) { - gl_Position = uProjectionMatrix * uCameraMatrix * uModelViewMatrix * aVertexPosition; - vColor = uVertexColor; - - // texture position is in [0,1], vertex position is in [-1,1] - vTexturePosition.x = (aVertexPosition.x + 1.0) / 2.0; - vTexturePosition.y = 1.0 - (aVertexPosition.y + 1.0) / 2.0; - - colorFactor = gl_Position.z; -} -`; - -const normalFragmentShader = ` -precision mediump float; -uniform bool uRenderWithTexture; -uniform bool uRenderWithDepthColor; -uniform sampler2D uTexture; -varying lowp float colorFactor; -uniform vec4 uColorFilter; - - -varying lowp vec4 vColor; -varying highp vec2 vTexturePosition; -void main(void) { - if (uRenderWithTexture){ - gl_FragColor = texture2D(uTexture, vTexturePosition); - } else { - gl_FragColor = vColor; - } - if (uRenderWithDepthColor){ - gl_FragColor += (colorFactor + 0.5) * (1.0 - gl_FragColor); - gl_FragColor.a = 1.0; - } - gl_FragColor = uColorFilter * gl_FragColor + 1.0 - uColorFilter; - gl_FragColor.a = 1.0; -} -`; -/** - * The basic data-representation of a Rune. When the Rune is drawn, every 3 consecutive vertex will form a triangle. - * @field vertices - A list of vertex coordinates, each vertex has 4 coordiante (x,y,z,t). - * @field colors - A list of vertex colors, each vertex has a color (r,g,b,a). - * @field transformMatrix - A mat4 that is applied to all the vertices and the sub runes - * @field subRune - A (potentially empty) list of Runes - */ -export class Rune { - constructor( - public vertices: Float32Array, - public colors: Float32Array | null, - public transformMatrix: mat4, - public subRunes: Rune[], - public texture: HTMLImageElement | null, - public hollusionDistance: number, - ) {} - - public copy = () => new Rune( - this.vertices, - this.colors, - mat4.clone(this.transformMatrix), - this.subRunes, - this.texture, - this.hollusionDistance, - ); - - /** - * Flatten the subrunes to return a list of runes - * @return Rune[], a list of runes - */ - public flatten = () => { - const runeList: Rune[] = []; - const runeTodoList: Rune[] = [this.copy()]; - - while (runeTodoList.length !== 0) { - const runeToExpand: Rune = runeTodoList.pop()!; // ! claims that the pop() will not return undefined. - runeToExpand.subRunes.forEach((subRune: Rune) => { - const subRuneCopy = subRune.copy(); - - mat4.multiply( - subRuneCopy.transformMatrix, - runeToExpand.transformMatrix, - subRuneCopy.transformMatrix, - ); - subRuneCopy.hollusionDistance = runeToExpand.hollusionDistance; - if (runeToExpand.colors !== null) { - subRuneCopy.colors = runeToExpand.colors; - } - runeTodoList.push(subRuneCopy); - }); - runeToExpand.subRunes = []; - if (runeToExpand.vertices.length > 0) { - runeList.push(runeToExpand); - } - } - return runeList; - }; - - public static of = ( - params: { - vertices?: Float32Array; - colors?: Float32Array | null; - transformMatrix?: mat4; - subRunes?: Rune[]; - texture?: HTMLImageElement | null; - hollusionDistance?: number; - } = {}, - ) => { - const paramGetter = (name: string, defaultValue: () => any) => (params[name] === undefined ? defaultValue() : params[name]); - - return new Rune( - paramGetter('vertices', () => new Float32Array()), - paramGetter('colors', () => null), - paramGetter('transformMatrix', mat4.create), - paramGetter('subRunes', () => []), - paramGetter('texture', () => null), - paramGetter('hollusionDistance', () => 0.1), - ); - }; - - public toReplString = () => ''; -} - -/** - * Draws the list of runes with the prepared WebGLRenderingContext, with each rune overlapping each other onto a given framebuffer. if the framebuffer is null, draw to the default canvas. - * - * @param gl a prepared WebGLRenderingContext with shader program linked - * @param runes a list of rune (Rune[]) to be drawn sequentially - */ -export function drawRunesToFrameBuffer( - gl: WebGLRenderingContext, - runes: Rune[], - cameraMatrix: mat4, - colorFilter: Float32Array, - framebuffer: WebGLFramebuffer | null = null, - depthSwitch: boolean = false, -) { - // step 1: initiate the WebGLRenderingContext - gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer); - // step 2: initiate the shaderProgram - const shaderProgram = initShaderProgram( - gl, - normalVertexShader, - normalFragmentShader, - ); - gl.useProgram(shaderProgram); - if (gl === null) { - throw Error('Rendering Context not initialized for drawRune.'); - } - - // create pointers to the data-entries of the shader program - const vertexPositionPointer = gl.getAttribLocation( - shaderProgram, - 'aVertexPosition', - ); - const vertexColorPointer = gl.getUniformLocation( - shaderProgram, - 'uVertexColor', - ); - const vertexColorFilterPt = gl.getUniformLocation( - shaderProgram, - 'uColorFilter', - ); - const projectionMatrixPointer = gl.getUniformLocation( - shaderProgram, - 'uProjectionMatrix', - ); - const cameraMatrixPointer = gl.getUniformLocation( - shaderProgram, - 'uCameraMatrix', - ); - const modelViewMatrixPointer = gl.getUniformLocation( - shaderProgram, - 'uModelViewMatrix', - ); - const textureSwitchPointer = gl.getUniformLocation( - shaderProgram, - 'uRenderWithTexture', - ); - const depthSwitchPointer = gl.getUniformLocation( - shaderProgram, - 'uRenderWithDepthColor', - ); - const texturePointer = gl.getUniformLocation(shaderProgram, 'uTexture'); - - // load depth - gl.uniform1i(depthSwitchPointer, depthSwitch ? 1 : 0); - - // load projection and camera - const orthoCam = mat4.create(); - mat4.ortho(orthoCam, -1, 1, -1, 1, -0.5, 1.5); - gl.uniformMatrix4fv(projectionMatrixPointer, false, orthoCam); - gl.uniformMatrix4fv(cameraMatrixPointer, false, cameraMatrix); - - // load colorfilter - gl.uniform4fv(vertexColorFilterPt, colorFilter); - - // 3. draw each Rune using the shader program - /** - * Credit to: https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API/Tutorial/Using_textures_in_WebGL - * Initialize a texture and load an image. - * When the image finished loading copy it into the texture. - */ - const loadTexture = (image: HTMLImageElement): WebGLTexture | null => { - const texture = gl.createTexture(); - gl.bindTexture(gl.TEXTURE_2D, texture); - function isPowerOf2(value) { - // eslint-disable-next-line no-bitwise - return (value & (value - 1)) === 0; - } - // Because images have to be downloaded over the internet - // they might take a moment until they are ready. - // Until then put a single pixel in the texture so we can - // use it immediately. When the image has finished downloading - // we'll update the texture with the contents of the image. - const level = 0; - const internalFormat = gl.RGBA; - const width = 1; - const height = 1; - const border = 0; - const srcFormat = gl.RGBA; - const srcType = gl.UNSIGNED_BYTE; - const pixel = new Uint8Array([0, 0, 255, 255]); // opaque blue - gl.texImage2D( - gl.TEXTURE_2D, - level, - internalFormat, - width, - height, - border, - srcFormat, - srcType, - pixel, - ); - - gl.bindTexture(gl.TEXTURE_2D, texture); - gl.texImage2D( - gl.TEXTURE_2D, - level, - internalFormat, - srcFormat, - srcType, - image, - ); - - // WebGL1 has different requirements for power of 2 images - // vs non power of 2 images so check if the image is a - // power of 2 in both dimensions. - if (isPowerOf2(image.width) && isPowerOf2(image.height)) { - // Yes, it's a power of 2. Generate mips. - gl.generateMipmap(gl.TEXTURE_2D); - } else { - // No, it's not a power of 2. Turn off mips and set - // wrapping to clamp to edge - gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); - gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); - gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); - } - - return texture; - }; - - runes.forEach((rune: Rune) => { - // load position buffer - const positionBuffer = gl.createBuffer(); - gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer); - gl.bufferData(gl.ARRAY_BUFFER, rune.vertices, gl.STATIC_DRAW); - gl.vertexAttribPointer(vertexPositionPointer, 4, gl.FLOAT, false, 0, 0); - gl.enableVertexAttribArray(vertexPositionPointer); - - // load color/texture - if (rune.texture === null) { - gl.uniform4fv( - vertexColorPointer, - rune.colors || new Float32Array([0, 0, 0, 1]), - ); - gl.uniform1i(textureSwitchPointer, 0); - } else { - const texture = loadTexture(rune.texture); - gl.activeTexture(gl.TEXTURE0); - gl.bindTexture(gl.TEXTURE_2D, texture); - gl.uniform1i(texturePointer, 0); - gl.uniform1i(textureSwitchPointer, 1); - } - - // load transformation matrix - gl.uniformMatrix4fv(modelViewMatrixPointer, false, rune.transformMatrix); - - // draw - const vertexCount = rune.vertices.length / 4; - gl.drawArrays(gl.TRIANGLES, 0, vertexCount); - }); -} - -/** - * Represents runes with a draw method attached - */ -export abstract class DrawnRune implements ReplResult { - private static readonly normalVertexShader = ` - attribute vec4 aVertexPosition; - uniform vec4 uVertexColor; - uniform mat4 uModelViewMatrix; - uniform mat4 uProjectionMatrix; - uniform mat4 uCameraMatrix; - - varying lowp vec4 vColor; - varying highp vec2 vTexturePosition; - varying lowp float colorFactor; - void main(void) { - gl_Position = uProjectionMatrix * uCameraMatrix * uModelViewMatrix * aVertexPosition; - vColor = uVertexColor; - - // texture position is in [0,1], vertex position is in [-1,1] - vTexturePosition.x = (aVertexPosition.x + 1.0) / 2.0; - vTexturePosition.y = 1.0 - (aVertexPosition.y + 1.0) / 2.0; - - colorFactor = gl_Position.z; - } - `; - - private static readonly normalFragmentShader = ` - precision mediump float; - uniform bool uRenderWithTexture; - uniform bool uRenderWithDepthColor; - uniform sampler2D uTexture; - varying lowp float colorFactor; - uniform vec4 uColorFilter; - - - varying lowp vec4 vColor; - varying highp vec2 vTexturePosition; - void main(void) { - if (uRenderWithTexture){ - gl_FragColor = texture2D(uTexture, vTexturePosition); - } else { - gl_FragColor = vColor; - } - if (uRenderWithDepthColor){ - gl_FragColor += (colorFactor + 0.5) * (1.0 - gl_FragColor); - gl_FragColor.a = 1.0; - } - gl_FragColor = uColorFilter * gl_FragColor + 1.0 - uColorFilter; - gl_FragColor.a = 1.0; - } - `; - - constructor( - protected readonly rune: Rune, - public readonly isHollusion: boolean, - ) {} - - public toReplString = () => ''; - - public abstract draw: (canvas: HTMLCanvasElement) => void; -} - -export class NormalRune extends DrawnRune { - constructor(rune: Rune) { - super(rune, false); - } - - public draw = (canvas: HTMLCanvasElement) => { - const gl = getWebGlFromCanvas(canvas); - - // prepare camera projection array - const cameraMatrix = mat4.create(); - - // color filter set to [1,1,1,1] for transparent filter - drawRunesToFrameBuffer( - gl, - this.rune.flatten(), - cameraMatrix, - new Float32Array([1, 1, 1, 1]), - null, - true, - ); - }; -} - -/** A function that takes in a timestamp and returns a Rune */ -export type RuneAnimation = (time: number) => Rune; - -export class AnimatedRune extends glAnimation implements ReplResult { - constructor( - duration: number, - fps: number, - private readonly func: (frame: number) => DrawnRune, - ) { - super(duration, fps); - } - - public getFrame(num: number): AnimFrame { - const rune = this.func(num); - return { - draw: rune.draw, - }; - } - - public toReplString = () => ''; -} +import { mat4 } from 'gl-matrix'; +import { type AnimFrame, glAnimation } from '../../typings/anim_types'; +import type { ReplResult } from '../../typings/type_helpers'; +import { getWebGlFromCanvas, initShaderProgram } from './runes_webgl'; + +const normalVertexShader = ` +attribute vec4 aVertexPosition; +uniform vec4 uVertexColor; +uniform mat4 uModelViewMatrix; +uniform mat4 uProjectionMatrix; +uniform mat4 uCameraMatrix; + +varying lowp vec4 vColor; +varying highp vec2 vTexturePosition; +varying lowp float colorFactor; +void main(void) { + gl_Position = uProjectionMatrix * uCameraMatrix * uModelViewMatrix * aVertexPosition; + vColor = uVertexColor; + + // texture position is in [0,1], vertex position is in [-1,1] + vTexturePosition.x = (aVertexPosition.x + 1.0) / 2.0; + vTexturePosition.y = 1.0 - (aVertexPosition.y + 1.0) / 2.0; + + colorFactor = gl_Position.z; +} +`; + +const normalFragmentShader = ` +precision mediump float; +uniform bool uRenderWithTexture; +uniform bool uRenderWithDepthColor; +uniform sampler2D uTexture; +varying lowp float colorFactor; +uniform vec4 uColorFilter; + + +varying lowp vec4 vColor; +varying highp vec2 vTexturePosition; +void main(void) { + if (uRenderWithTexture){ + gl_FragColor = texture2D(uTexture, vTexturePosition); + } else { + gl_FragColor = vColor; + } + if (uRenderWithDepthColor){ + gl_FragColor += (colorFactor + 0.5) * (1.0 - gl_FragColor); + gl_FragColor.a = 1.0; + } + gl_FragColor = uColorFilter * gl_FragColor + 1.0 - uColorFilter; + gl_FragColor.a = 1.0; +} +`; +/** + * The basic data-representation of a Rune. When the Rune is drawn, every 3 consecutive vertex will form a triangle. + * @field vertices - A list of vertex coordinates, each vertex has 4 coordiante (x,y,z,t). + * @field colors - A list of vertex colors, each vertex has a color (r,g,b,a). + * @field transformMatrix - A mat4 that is applied to all the vertices and the sub runes + * @field subRune - A (potentially empty) list of Runes + */ +export class Rune { + constructor( + public vertices: Float32Array, + public colors: Float32Array | null, + public transformMatrix: mat4, + public subRunes: Rune[], + public texture: HTMLImageElement | null, + public hollusionDistance: number, + ) {} + + public copy = () => new Rune( + this.vertices, + this.colors, + mat4.clone(this.transformMatrix), + this.subRunes, + this.texture, + this.hollusionDistance, + ); + + /** + * Flatten the subrunes to return a list of runes + * @return Rune[], a list of runes + */ + public flatten = () => { + const runeList: Rune[] = []; + const runeTodoList: Rune[] = [this.copy()]; + + while (runeTodoList.length !== 0) { + const runeToExpand: Rune = runeTodoList.pop()!; // ! claims that the pop() will not return undefined. + runeToExpand.subRunes.forEach((subRune: Rune) => { + const subRuneCopy = subRune.copy(); + + mat4.multiply( + subRuneCopy.transformMatrix, + runeToExpand.transformMatrix, + subRuneCopy.transformMatrix, + ); + subRuneCopy.hollusionDistance = runeToExpand.hollusionDistance; + if (runeToExpand.colors !== null) { + subRuneCopy.colors = runeToExpand.colors; + } + runeTodoList.push(subRuneCopy); + }); + runeToExpand.subRunes = []; + if (runeToExpand.vertices.length > 0) { + runeList.push(runeToExpand); + } + } + return runeList; + }; + + public static of = ( + params: { + vertices?: Float32Array; + colors?: Float32Array | null; + transformMatrix?: mat4; + subRunes?: Rune[]; + texture?: HTMLImageElement | null; + hollusionDistance?: number; + } = {}, + ) => { + const paramGetter = (name: string, defaultValue: () => any) => (params[name] === undefined ? defaultValue() : params[name]); + + return new Rune( + paramGetter('vertices', () => new Float32Array()), + paramGetter('colors', () => null), + paramGetter('transformMatrix', mat4.create), + paramGetter('subRunes', () => []), + paramGetter('texture', () => null), + paramGetter('hollusionDistance', () => 0.1), + ); + }; + + public toReplString = () => ''; +} + +/** + * Draws the list of runes with the prepared WebGLRenderingContext, with each rune overlapping each other onto a given framebuffer. if the framebuffer is null, draw to the default canvas. + * + * @param gl a prepared WebGLRenderingContext with shader program linked + * @param runes a list of rune (Rune[]) to be drawn sequentially + */ +export function drawRunesToFrameBuffer( + gl: WebGLRenderingContext, + runes: Rune[], + cameraMatrix: mat4, + colorFilter: Float32Array, + framebuffer: WebGLFramebuffer | null = null, + depthSwitch: boolean = false, +) { + // step 1: initiate the WebGLRenderingContext + gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer); + // step 2: initiate the shaderProgram + const shaderProgram = initShaderProgram( + gl, + normalVertexShader, + normalFragmentShader, + ); + gl.useProgram(shaderProgram); + if (gl === null) { + throw Error('Rendering Context not initialized for drawRune.'); + } + + // create pointers to the data-entries of the shader program + const vertexPositionPointer = gl.getAttribLocation( + shaderProgram, + 'aVertexPosition', + ); + const vertexColorPointer = gl.getUniformLocation( + shaderProgram, + 'uVertexColor', + ); + const vertexColorFilterPt = gl.getUniformLocation( + shaderProgram, + 'uColorFilter', + ); + const projectionMatrixPointer = gl.getUniformLocation( + shaderProgram, + 'uProjectionMatrix', + ); + const cameraMatrixPointer = gl.getUniformLocation( + shaderProgram, + 'uCameraMatrix', + ); + const modelViewMatrixPointer = gl.getUniformLocation( + shaderProgram, + 'uModelViewMatrix', + ); + const textureSwitchPointer = gl.getUniformLocation( + shaderProgram, + 'uRenderWithTexture', + ); + const depthSwitchPointer = gl.getUniformLocation( + shaderProgram, + 'uRenderWithDepthColor', + ); + const texturePointer = gl.getUniformLocation(shaderProgram, 'uTexture'); + + // load depth + gl.uniform1i(depthSwitchPointer, depthSwitch ? 1 : 0); + + // load projection and camera + const orthoCam = mat4.create(); + mat4.ortho(orthoCam, -1, 1, -1, 1, -0.5, 1.5); + gl.uniformMatrix4fv(projectionMatrixPointer, false, orthoCam); + gl.uniformMatrix4fv(cameraMatrixPointer, false, cameraMatrix); + + // load colorfilter + gl.uniform4fv(vertexColorFilterPt, colorFilter); + + // 3. draw each Rune using the shader program + /** + * Credit to: https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API/Tutorial/Using_textures_in_WebGL + * Initialize a texture and load an image. + * When the image finished loading copy it into the texture. + */ + const loadTexture = (image: HTMLImageElement): WebGLTexture | null => { + const texture = gl.createTexture(); + gl.bindTexture(gl.TEXTURE_2D, texture); + function isPowerOf2(value) { + // eslint-disable-next-line no-bitwise + return (value & (value - 1)) === 0; + } + // Because images have to be downloaded over the internet + // they might take a moment until they are ready. + // Until then put a single pixel in the texture so we can + // use it immediately. When the image has finished downloading + // we'll update the texture with the contents of the image. + const level = 0; + const internalFormat = gl.RGBA; + const width = 1; + const height = 1; + const border = 0; + const srcFormat = gl.RGBA; + const srcType = gl.UNSIGNED_BYTE; + const pixel = new Uint8Array([0, 0, 255, 255]); // opaque blue + gl.texImage2D( + gl.TEXTURE_2D, + level, + internalFormat, + width, + height, + border, + srcFormat, + srcType, + pixel, + ); + + gl.bindTexture(gl.TEXTURE_2D, texture); + gl.texImage2D( + gl.TEXTURE_2D, + level, + internalFormat, + srcFormat, + srcType, + image, + ); + + // WebGL1 has different requirements for power of 2 images + // vs non power of 2 images so check if the image is a + // power of 2 in both dimensions. + if (isPowerOf2(image.width) && isPowerOf2(image.height)) { + // Yes, it's a power of 2. Generate mips. + gl.generateMipmap(gl.TEXTURE_2D); + } else { + // No, it's not a power of 2. Turn off mips and set + // wrapping to clamp to edge + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); + } + + return texture; + }; + + runes.forEach((rune: Rune) => { + // load position buffer + const positionBuffer = gl.createBuffer(); + gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer); + gl.bufferData(gl.ARRAY_BUFFER, rune.vertices, gl.STATIC_DRAW); + gl.vertexAttribPointer(vertexPositionPointer, 4, gl.FLOAT, false, 0, 0); + gl.enableVertexAttribArray(vertexPositionPointer); + + // load color/texture + if (rune.texture === null) { + gl.uniform4fv( + vertexColorPointer, + rune.colors || new Float32Array([0, 0, 0, 1]), + ); + gl.uniform1i(textureSwitchPointer, 0); + } else { + const texture = loadTexture(rune.texture); + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, texture); + gl.uniform1i(texturePointer, 0); + gl.uniform1i(textureSwitchPointer, 1); + } + + // load transformation matrix + gl.uniformMatrix4fv(modelViewMatrixPointer, false, rune.transformMatrix); + + // draw + const vertexCount = rune.vertices.length / 4; + gl.drawArrays(gl.TRIANGLES, 0, vertexCount); + }); +} + +/** + * Represents runes with a draw method attached + */ +export abstract class DrawnRune implements ReplResult { + private static readonly normalVertexShader = ` + attribute vec4 aVertexPosition; + uniform vec4 uVertexColor; + uniform mat4 uModelViewMatrix; + uniform mat4 uProjectionMatrix; + uniform mat4 uCameraMatrix; + + varying lowp vec4 vColor; + varying highp vec2 vTexturePosition; + varying lowp float colorFactor; + void main(void) { + gl_Position = uProjectionMatrix * uCameraMatrix * uModelViewMatrix * aVertexPosition; + vColor = uVertexColor; + + // texture position is in [0,1], vertex position is in [-1,1] + vTexturePosition.x = (aVertexPosition.x + 1.0) / 2.0; + vTexturePosition.y = 1.0 - (aVertexPosition.y + 1.0) / 2.0; + + colorFactor = gl_Position.z; + } + `; + + private static readonly normalFragmentShader = ` + precision mediump float; + uniform bool uRenderWithTexture; + uniform bool uRenderWithDepthColor; + uniform sampler2D uTexture; + varying lowp float colorFactor; + uniform vec4 uColorFilter; + + + varying lowp vec4 vColor; + varying highp vec2 vTexturePosition; + void main(void) { + if (uRenderWithTexture){ + gl_FragColor = texture2D(uTexture, vTexturePosition); + } else { + gl_FragColor = vColor; + } + if (uRenderWithDepthColor){ + gl_FragColor += (colorFactor + 0.5) * (1.0 - gl_FragColor); + gl_FragColor.a = 1.0; + } + gl_FragColor = uColorFilter * gl_FragColor + 1.0 - uColorFilter; + gl_FragColor.a = 1.0; + } + `; + + constructor( + protected readonly rune: Rune, + public readonly isHollusion: boolean, + ) {} + + public toReplString = () => ''; + + public abstract draw: (canvas: HTMLCanvasElement) => void; +} + +export class NormalRune extends DrawnRune { + constructor(rune: Rune) { + super(rune, false); + } + + public draw = (canvas: HTMLCanvasElement) => { + const gl = getWebGlFromCanvas(canvas); + + // prepare camera projection array + const cameraMatrix = mat4.create(); + + // color filter set to [1,1,1,1] for transparent filter + drawRunesToFrameBuffer( + gl, + this.rune.flatten(), + cameraMatrix, + new Float32Array([1, 1, 1, 1]), + null, + true, + ); + }; +} + +/** A function that takes in a timestamp and returns a Rune */ +export type RuneAnimation = (time: number) => Rune; + +export class AnimatedRune extends glAnimation implements ReplResult { + constructor( + duration: number, + fps: number, + private readonly func: (frame: number) => DrawnRune, + ) { + super(duration, fps); + } + + public getFrame(num: number): AnimFrame { + const rune = this.func(num); + return { + draw: rune.draw, + }; + } + + public toReplString = () => ''; +} diff --git a/src/bundles/rune/runes_ops.ts b/src/bundles/rune/runes_ops.ts index 995095f59..48fe911e2 100644 --- a/src/bundles/rune/runes_ops.ts +++ b/src/bundles/rune/runes_ops.ts @@ -1,361 +1,361 @@ -/** - * This file contains the bundle's private functions for runes. - */ -import { Rune } from './rune'; - -// ============================================================================= -// Utility Functions -// ============================================================================= -export function throwIfNotRune(name, ...runes) { - runes.forEach((rune) => { - if (!(rune instanceof Rune)) { - throw Error(`${name} expects a rune as argument.`); - } - }); -} - -// ============================================================================= -// Basic Runes -// ============================================================================= - -/** - * primitive Rune in the rune of a full square - * */ -export const getSquare: () => Rune = () => { - const vertexList: number[] = []; - const colorList: number[] = []; - - vertexList.push(-1, 1, 0, 1); - vertexList.push(-1, -1, 0, 1); - vertexList.push(1, -1, 0, 1); - vertexList.push(1, -1, 0, 1); - vertexList.push(-1, 1, 0, 1); - vertexList.push(1, 1, 0, 1); - - colorList.push(0, 0, 0, 1); - - return Rune.of({ - vertices: new Float32Array(vertexList), - colors: new Float32Array(colorList), - }); -}; - -export const getBlank: () => Rune = () => Rune.of(); - -/** - * primitive Rune in the rune of a - * smallsquare inside a large square, - * each diagonally split into a - * black and white half - * */ -export const getRcross: () => Rune = () => { - const vertexList: number[] = []; - const colorList: number[] = []; - // lower small triangle - vertexList.push(-0.5, 0.5, 0, 1); - vertexList.push(-0.5, -0.5, 0, 1); - vertexList.push(0.5, -0.5, 0, 1); - - // upper shape, starting from left-top corner - vertexList.push(-1, 1, 0, 1); - vertexList.push(-0.5, 0.5, 0, 1); - vertexList.push(1, 1, 0, 1); - - vertexList.push(-0.5, 0.5, 0, 1); - vertexList.push(1, 1, 0, 1); - vertexList.push(0.5, 0.5, 0, 1); - - vertexList.push(1, 1, 0, 1); - vertexList.push(0.5, 0.5, 0, 1); - vertexList.push(1, -1, 0, 1); - - vertexList.push(0.5, 0.5, 0, 1); - vertexList.push(1, -1, 0, 1); - vertexList.push(0.5, -0.5, 0, 1); - - colorList.push(0, 0, 0, 1); - - return Rune.of({ - vertices: new Float32Array(vertexList), - colors: new Float32Array(colorList), - }); -}; - -/** - * primitive Rune in the rune of a sail - * */ -export const getSail: () => Rune = () => { - const vertexList: number[] = []; - const colorList: number[] = []; - - vertexList.push(0.5, -1, 0, 1); - vertexList.push(0, -1, 0, 1); - vertexList.push(0, 1, 0, 1); - - colorList.push(0, 0, 0, 1); - - return Rune.of({ - vertices: new Float32Array(vertexList), - colors: new Float32Array(colorList), - }); -}; - -/** - * primitive Rune in the rune of a triangle - * */ -export const getTriangle: () => Rune = () => { - const vertexList: number[] = []; - const colorList: number[] = []; - - vertexList.push(1, -1, 0, 1); - vertexList.push(0, -1, 0, 1); - vertexList.push(0, 1, 0, 1); - - colorList.push(0, 0, 0, 1); - - return Rune.of({ - vertices: new Float32Array(vertexList), - colors: new Float32Array(colorList), - }); -}; - -/** - * primitive Rune with black triangle, - * filling upper right corner - * */ -export const getCorner: () => Rune = () => { - const vertexList: number[] = []; - const colorList: number[] = []; - vertexList.push(1, 0, 0, 1); - vertexList.push(1, 1, 0, 1); - vertexList.push(0, 1, 0, 1); - - colorList.push(0, 0, 0, 1); - - return Rune.of({ - vertices: new Float32Array(vertexList), - colors: new Float32Array(colorList), - }); -}; - -/** - * primitive Rune in the rune of two overlapping - * triangles, residing in the upper half - * of - * */ -export const getNova: () => Rune = () => { - const vertexList: number[] = []; - const colorList: number[] = []; - vertexList.push(0, 1, 0, 1); - vertexList.push(-0.5, 0, 0, 1); - vertexList.push(0, 0.5, 0, 1); - - vertexList.push(-0.5, 0, 0, 1); - vertexList.push(0, 0.5, 0, 1); - vertexList.push(1, 0, 0, 1); - - colorList.push(0, 0, 0, 1); - - return Rune.of({ - vertices: new Float32Array(vertexList), - colors: new Float32Array(colorList), - }); -}; - -/** - * primitive Rune in the rune of a circle - * */ -export const getCircle: () => Rune = () => { - const vertexList: number[] = []; - const colorList: number[] = []; - const circleDiv = 60; - for (let i = 0; i < circleDiv; i += 1) { - const angle1 = ((2 * Math.PI) / circleDiv) * i; - const angle2 = ((2 * Math.PI) / circleDiv) * (i + 1); - vertexList.push(Math.cos(angle1), Math.sin(angle1), 0, 1); - vertexList.push(Math.cos(angle2), Math.sin(angle2), 0, 1); - vertexList.push(0, 0, 0, 1); - } - colorList.push(0, 0, 0, 1); - - return Rune.of({ - vertices: new Float32Array(vertexList), - colors: new Float32Array(colorList), - }); -}; - -/** - * primitive Rune in the rune of a heart - * */ -export const getHeart: () => Rune = () => { - const vertexList: number[] = []; - const colorList: number[] = []; - - const root2 = Math.sqrt(2); - const r = 4 / (2 + 3 * root2); - const scaleX = 1 / (r * (1 + root2 / 2)); - const numPoints = 10; - - // right semi-circle - const rightCenterX = r / root2; - const rightCenterY = 1 - r; - for (let i = 0; i < numPoints; i += 1) { - const angle1 = Math.PI * (-1 / 4 + i / numPoints); - const angle2 = Math.PI * (-1 / 4 + (i + 1) / numPoints); - vertexList.push( - (Math.cos(angle1) * r + rightCenterX) * scaleX, - Math.sin(angle1) * r + rightCenterY, - 0, - 1, - ); - vertexList.push( - (Math.cos(angle2) * r + rightCenterX) * scaleX, - Math.sin(angle2) * r + rightCenterY, - 0, - 1, - ); - vertexList.push(0, -1, 0, 1); - } - // left semi-circle - const leftCenterX = -r / root2; - const leftCenterY = 1 - r; - for (let i = 0; i <= numPoints; i += 1) { - const angle1 = Math.PI * (1 / 4 + i / numPoints); - const angle2 = Math.PI * (1 / 4 + (i + 1) / numPoints); - vertexList.push( - (Math.cos(angle1) * r + leftCenterX) * scaleX, - Math.sin(angle1) * r + leftCenterY, - 0, - 1, - ); - vertexList.push( - (Math.cos(angle2) * r + leftCenterX) * scaleX, - Math.sin(angle2) * r + leftCenterY, - 0, - 1, - ); - vertexList.push(0, -1, 0, 1); - } - - colorList.push(0, 0, 0, 1); - - return Rune.of({ - vertices: new Float32Array(vertexList), - colors: new Float32Array(colorList), - }); -}; - -/** - * primitive Rune in the rune of a pentagram - * */ -export const getPentagram: () => Rune = () => { - const vertexList: number[] = []; - const colorList: number[] = []; - - const v1 = Math.sin(Math.PI / 10); - const v2 = Math.cos(Math.PI / 10); - - const w1 = Math.sin((3 * Math.PI) / 10); - const w2 = Math.cos((3 * Math.PI) / 10); - - const vertices: number[][] = []; - vertices.push([v2, v1, 0, 1]); - vertices.push([w2, -w1, 0, 1]); - vertices.push([-w2, -w1, 0, 1]); - vertices.push([-v2, v1, 0, 1]); - vertices.push([0, 1, 0, 1]); - - for (let i = 0; i < 5; i += 1) { - vertexList.push(0, 0, 0, 1); - vertexList.push(...vertices[i]); - vertexList.push(...vertices[(i + 2) % 5]); - } - - colorList.push(0, 0, 0, 1); - - return Rune.of({ - vertices: new Float32Array(vertexList), - colors: new Float32Array(colorList), - }); -}; - -/** - * primitive Rune in the rune of a ribbon - * winding outwards in an anticlockwise spiral - * */ -export const getRibbon: () => Rune = () => { - const vertexList: number[] = []; - const colorList: number[] = []; - - const thetaMax = 30; - const thickness = -1 / thetaMax; - const unit = 0.1; - - const vertices: number[][] = []; - for (let i = 0; i < thetaMax; i += unit) { - vertices.push([ - (i / thetaMax) * Math.cos(i), - (i / thetaMax) * Math.sin(i), - 0, - 1, - ]); - vertices.push([ - Math.abs(Math.cos(i) * thickness) + (i / thetaMax) * Math.cos(i), - Math.abs(Math.sin(i) * thickness) + (i / thetaMax) * Math.sin(i), - 0, - 1, - ]); - } - for (let i = 0; i < vertices.length - 2; i += 1) { - vertexList.push(...vertices[i]); - vertexList.push(...vertices[i + 1]); - vertexList.push(...vertices[i + 2]); - } - - colorList.push(0, 0, 0, 1); - - return Rune.of({ - vertices: new Float32Array(vertexList), - colors: new Float32Array(colorList), - }); -}; - -// ============================================================================= -// Coloring Functions -// ============================================================================= -// black and white not included because they are boring colors -// colorPalette is used in generateFlattenedRuneList to generate a random color -export const colorPalette = [ - '#F44336', - '#E91E63', - '#AA00FF', - '#3F51B5', - '#2196F3', - '#4CAF50', - '#FFEB3B', - '#FF9800', - '#795548', -]; - -export function hexToColor(hex): number[] { - const result = /^#?(?[a-f\d]{2})(?[a-f\d]{2})(?[a-f\d]{2})$/iu.exec( - hex, - ); - if (result === null || result.length < 4) { - return [0, 0, 0]; - } - return [ - parseInt(result[1], 16) / 255, - parseInt(result[2], 16) / 255, - parseInt(result[3], 16) / 255, - 1, - ]; -} - -export function addColorFromHex(rune, hex) { - throwIfNotRune('addColorFromHex', rune); - return Rune.of({ - subRunes: [rune], - colors: new Float32Array(hexToColor(hex)), - }); -} +/** + * This file contains the bundle's private functions for runes. + */ +import { Rune } from './rune'; + +// ============================================================================= +// Utility Functions +// ============================================================================= +export function throwIfNotRune(name, ...runes) { + runes.forEach((rune) => { + if (!(rune instanceof Rune)) { + throw Error(`${name} expects a rune as argument.`); + } + }); +} + +// ============================================================================= +// Basic Runes +// ============================================================================= + +/** + * primitive Rune in the rune of a full square + * */ +export const getSquare: () => Rune = () => { + const vertexList: number[] = []; + const colorList: number[] = []; + + vertexList.push(-1, 1, 0, 1); + vertexList.push(-1, -1, 0, 1); + vertexList.push(1, -1, 0, 1); + vertexList.push(1, -1, 0, 1); + vertexList.push(-1, 1, 0, 1); + vertexList.push(1, 1, 0, 1); + + colorList.push(0, 0, 0, 1); + + return Rune.of({ + vertices: new Float32Array(vertexList), + colors: new Float32Array(colorList), + }); +}; + +export const getBlank: () => Rune = () => Rune.of(); + +/** + * primitive Rune in the rune of a + * smallsquare inside a large square, + * each diagonally split into a + * black and white half + * */ +export const getRcross: () => Rune = () => { + const vertexList: number[] = []; + const colorList: number[] = []; + // lower small triangle + vertexList.push(-0.5, 0.5, 0, 1); + vertexList.push(-0.5, -0.5, 0, 1); + vertexList.push(0.5, -0.5, 0, 1); + + // upper shape, starting from left-top corner + vertexList.push(-1, 1, 0, 1); + vertexList.push(-0.5, 0.5, 0, 1); + vertexList.push(1, 1, 0, 1); + + vertexList.push(-0.5, 0.5, 0, 1); + vertexList.push(1, 1, 0, 1); + vertexList.push(0.5, 0.5, 0, 1); + + vertexList.push(1, 1, 0, 1); + vertexList.push(0.5, 0.5, 0, 1); + vertexList.push(1, -1, 0, 1); + + vertexList.push(0.5, 0.5, 0, 1); + vertexList.push(1, -1, 0, 1); + vertexList.push(0.5, -0.5, 0, 1); + + colorList.push(0, 0, 0, 1); + + return Rune.of({ + vertices: new Float32Array(vertexList), + colors: new Float32Array(colorList), + }); +}; + +/** + * primitive Rune in the rune of a sail + * */ +export const getSail: () => Rune = () => { + const vertexList: number[] = []; + const colorList: number[] = []; + + vertexList.push(0.5, -1, 0, 1); + vertexList.push(0, -1, 0, 1); + vertexList.push(0, 1, 0, 1); + + colorList.push(0, 0, 0, 1); + + return Rune.of({ + vertices: new Float32Array(vertexList), + colors: new Float32Array(colorList), + }); +}; + +/** + * primitive Rune in the rune of a triangle + * */ +export const getTriangle: () => Rune = () => { + const vertexList: number[] = []; + const colorList: number[] = []; + + vertexList.push(1, -1, 0, 1); + vertexList.push(0, -1, 0, 1); + vertexList.push(0, 1, 0, 1); + + colorList.push(0, 0, 0, 1); + + return Rune.of({ + vertices: new Float32Array(vertexList), + colors: new Float32Array(colorList), + }); +}; + +/** + * primitive Rune with black triangle, + * filling upper right corner + * */ +export const getCorner: () => Rune = () => { + const vertexList: number[] = []; + const colorList: number[] = []; + vertexList.push(1, 0, 0, 1); + vertexList.push(1, 1, 0, 1); + vertexList.push(0, 1, 0, 1); + + colorList.push(0, 0, 0, 1); + + return Rune.of({ + vertices: new Float32Array(vertexList), + colors: new Float32Array(colorList), + }); +}; + +/** + * primitive Rune in the rune of two overlapping + * triangles, residing in the upper half + * of + * */ +export const getNova: () => Rune = () => { + const vertexList: number[] = []; + const colorList: number[] = []; + vertexList.push(0, 1, 0, 1); + vertexList.push(-0.5, 0, 0, 1); + vertexList.push(0, 0.5, 0, 1); + + vertexList.push(-0.5, 0, 0, 1); + vertexList.push(0, 0.5, 0, 1); + vertexList.push(1, 0, 0, 1); + + colorList.push(0, 0, 0, 1); + + return Rune.of({ + vertices: new Float32Array(vertexList), + colors: new Float32Array(colorList), + }); +}; + +/** + * primitive Rune in the rune of a circle + * */ +export const getCircle: () => Rune = () => { + const vertexList: number[] = []; + const colorList: number[] = []; + const circleDiv = 60; + for (let i = 0; i < circleDiv; i += 1) { + const angle1 = ((2 * Math.PI) / circleDiv) * i; + const angle2 = ((2 * Math.PI) / circleDiv) * (i + 1); + vertexList.push(Math.cos(angle1), Math.sin(angle1), 0, 1); + vertexList.push(Math.cos(angle2), Math.sin(angle2), 0, 1); + vertexList.push(0, 0, 0, 1); + } + colorList.push(0, 0, 0, 1); + + return Rune.of({ + vertices: new Float32Array(vertexList), + colors: new Float32Array(colorList), + }); +}; + +/** + * primitive Rune in the rune of a heart + * */ +export const getHeart: () => Rune = () => { + const vertexList: number[] = []; + const colorList: number[] = []; + + const root2 = Math.sqrt(2); + const r = 4 / (2 + 3 * root2); + const scaleX = 1 / (r * (1 + root2 / 2)); + const numPoints = 10; + + // right semi-circle + const rightCenterX = r / root2; + const rightCenterY = 1 - r; + for (let i = 0; i < numPoints; i += 1) { + const angle1 = Math.PI * (-1 / 4 + i / numPoints); + const angle2 = Math.PI * (-1 / 4 + (i + 1) / numPoints); + vertexList.push( + (Math.cos(angle1) * r + rightCenterX) * scaleX, + Math.sin(angle1) * r + rightCenterY, + 0, + 1, + ); + vertexList.push( + (Math.cos(angle2) * r + rightCenterX) * scaleX, + Math.sin(angle2) * r + rightCenterY, + 0, + 1, + ); + vertexList.push(0, -1, 0, 1); + } + // left semi-circle + const leftCenterX = -r / root2; + const leftCenterY = 1 - r; + for (let i = 0; i <= numPoints; i += 1) { + const angle1 = Math.PI * (1 / 4 + i / numPoints); + const angle2 = Math.PI * (1 / 4 + (i + 1) / numPoints); + vertexList.push( + (Math.cos(angle1) * r + leftCenterX) * scaleX, + Math.sin(angle1) * r + leftCenterY, + 0, + 1, + ); + vertexList.push( + (Math.cos(angle2) * r + leftCenterX) * scaleX, + Math.sin(angle2) * r + leftCenterY, + 0, + 1, + ); + vertexList.push(0, -1, 0, 1); + } + + colorList.push(0, 0, 0, 1); + + return Rune.of({ + vertices: new Float32Array(vertexList), + colors: new Float32Array(colorList), + }); +}; + +/** + * primitive Rune in the rune of a pentagram + * */ +export const getPentagram: () => Rune = () => { + const vertexList: number[] = []; + const colorList: number[] = []; + + const v1 = Math.sin(Math.PI / 10); + const v2 = Math.cos(Math.PI / 10); + + const w1 = Math.sin((3 * Math.PI) / 10); + const w2 = Math.cos((3 * Math.PI) / 10); + + const vertices: number[][] = []; + vertices.push([v2, v1, 0, 1]); + vertices.push([w2, -w1, 0, 1]); + vertices.push([-w2, -w1, 0, 1]); + vertices.push([-v2, v1, 0, 1]); + vertices.push([0, 1, 0, 1]); + + for (let i = 0; i < 5; i += 1) { + vertexList.push(0, 0, 0, 1); + vertexList.push(...vertices[i]); + vertexList.push(...vertices[(i + 2) % 5]); + } + + colorList.push(0, 0, 0, 1); + + return Rune.of({ + vertices: new Float32Array(vertexList), + colors: new Float32Array(colorList), + }); +}; + +/** + * primitive Rune in the rune of a ribbon + * winding outwards in an anticlockwise spiral + * */ +export const getRibbon: () => Rune = () => { + const vertexList: number[] = []; + const colorList: number[] = []; + + const thetaMax = 30; + const thickness = -1 / thetaMax; + const unit = 0.1; + + const vertices: number[][] = []; + for (let i = 0; i < thetaMax; i += unit) { + vertices.push([ + (i / thetaMax) * Math.cos(i), + (i / thetaMax) * Math.sin(i), + 0, + 1, + ]); + vertices.push([ + Math.abs(Math.cos(i) * thickness) + (i / thetaMax) * Math.cos(i), + Math.abs(Math.sin(i) * thickness) + (i / thetaMax) * Math.sin(i), + 0, + 1, + ]); + } + for (let i = 0; i < vertices.length - 2; i += 1) { + vertexList.push(...vertices[i]); + vertexList.push(...vertices[i + 1]); + vertexList.push(...vertices[i + 2]); + } + + colorList.push(0, 0, 0, 1); + + return Rune.of({ + vertices: new Float32Array(vertexList), + colors: new Float32Array(colorList), + }); +}; + +// ============================================================================= +// Coloring Functions +// ============================================================================= +// black and white not included because they are boring colors +// colorPalette is used in generateFlattenedRuneList to generate a random color +export const colorPalette = [ + '#F44336', + '#E91E63', + '#AA00FF', + '#3F51B5', + '#2196F3', + '#4CAF50', + '#FFEB3B', + '#FF9800', + '#795548', +]; + +export function hexToColor(hex): number[] { + const result = /^#?(?[a-f\d]{2})(?[a-f\d]{2})(?[a-f\d]{2})$/iu.exec( + hex, + ); + if (result === null || result.length < 4) { + return [0, 0, 0]; + } + return [ + parseInt(result[1], 16) / 255, + parseInt(result[2], 16) / 255, + parseInt(result[3], 16) / 255, + 1, + ]; +} + +export function addColorFromHex(rune, hex) { + throwIfNotRune('addColorFromHex', rune); + return Rune.of({ + subRunes: [rune], + colors: new Float32Array(hexToColor(hex)), + }); +} diff --git a/src/bundles/rune/runes_webgl.ts b/src/bundles/rune/runes_webgl.ts index 5a7640697..1b57d7b66 100644 --- a/src/bundles/rune/runes_webgl.ts +++ b/src/bundles/rune/runes_webgl.ts @@ -1,163 +1,163 @@ -/** - * This file contains the module's private functions that handles various webgl operations. - */ - -export type FrameBufferWithTexture = { - framebuffer: WebGLFramebuffer; - texture: WebGLTexture; -}; - -// The following 2 functions loadShader and initShaderProgram are copied from the curve library, 26 Jul 2021 with no change. This unfortunately violated DIY priciple but I have no choice as those functions are not exported. -/** - * Gets shader based on given shader program code. - * - * @param gl - WebGL's rendering context - * @param type - Constant describing the type of shader to load - * @param source - Source code of the shader - * @returns WebGLShader used to initialize shader program - */ -function loadShader( - gl: WebGLRenderingContext, - type: number, - source: string, -): WebGLShader { - const shader = gl.createShader(type); - if (!shader) { - throw new Error('WebGLShader not available.'); - } - gl.shaderSource(shader, source); - gl.compileShader(shader); - const compiled = gl.getShaderParameter(shader, gl.COMPILE_STATUS); - if (!compiled) { - const compilationLog = gl.getShaderInfoLog(shader); - throw Error(`Shader compilation failed: ${compilationLog}`); - } - return shader; -} - -/** - * Initializes the shader program used by WebGL. - * - * @param gl - WebGL's rendering context - * @param vsSource - Vertex shader program code - * @param fsSource - Fragment shader program code - * @returns WebGLProgram used for getting AttribLocation and UniformLocation - */ -export function initShaderProgram( - gl: WebGLRenderingContext, - vsSource: string, - fsSource: string, -): WebGLProgram { - const vertexShader = loadShader(gl, gl.VERTEX_SHADER, vsSource); - const fragmentShader = loadShader(gl, gl.FRAGMENT_SHADER, fsSource); - const shaderProgram = gl.createProgram(); - if (!shaderProgram) { - throw new Error('Unable to initialize the shader program.'); - } - gl.attachShader(shaderProgram, vertexShader); - gl.attachShader(shaderProgram, fragmentShader); - gl.linkProgram(shaderProgram); - return shaderProgram; -} - -/** - * Get a WebGLRenderingContext from Canvas input - * @param canvas WebGLRenderingContext - * @returns - */ -export function getWebGlFromCanvas( - canvas: HTMLCanvasElement, -): WebGLRenderingContext { - const gl: WebGLRenderingContext | null = canvas.getContext('webgl'); - if (!gl) { - throw Error('Unable to initialize WebGL.'); - } - gl.clearColor(1.0, 1.0, 1.0, 1.0); // Set clear color to white, fully opaque - gl.enable(gl.DEPTH_TEST); // Enable depth testing - gl.depthFunc(gl.LESS); // Near things obscure far things (this is default setting can omit) - // eslint-disable-next-line no-bitwise - gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); // Clear the viewport - return gl; -} - -/** - * creates a framebuffer - * @param gl WebGLRenderingContext - * @returns FrameBufferWithTexture - */ -export function initFramebufferObject( - gl: WebGLRenderingContext, -): FrameBufferWithTexture { - // create a framebuffer object - const framebuffer = gl.createFramebuffer(); - if (!framebuffer) { - throw Error('Failed to create frame buffer object'); - } - - // create a texture object and set its size and parameters - const texture = gl.createTexture(); - if (!texture) { - throw Error('Failed to create texture object'); - } - gl.bindTexture(gl.TEXTURE_2D, texture); - gl.texImage2D( - gl.TEXTURE_2D, - 0, - gl.RGBA, - gl.drawingBufferWidth, - gl.drawingBufferHeight, - 0, - gl.RGBA, - gl.UNSIGNED_BYTE, - null, - ); - gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); - - // create a renderbuffer for depth buffer - const depthBuffer = gl.createRenderbuffer(); - if (!depthBuffer) { - throw Error('Failed to create renderbuffer object'); - } - - // bind renderbuffer object to target and set size - gl.bindRenderbuffer(gl.RENDERBUFFER, depthBuffer); - gl.renderbufferStorage( - gl.RENDERBUFFER, - gl.DEPTH_COMPONENT16, - gl.drawingBufferWidth, - gl.drawingBufferHeight, - ); - - // set the texture object to the framebuffer object - gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer); // bind to target - gl.framebufferTexture2D( - gl.FRAMEBUFFER, - gl.COLOR_ATTACHMENT0, - gl.TEXTURE_2D, - texture, - 0, - ); - // set the renderbuffer object to the framebuffer object - gl.framebufferRenderbuffer( - gl.FRAMEBUFFER, - gl.DEPTH_ATTACHMENT, - gl.RENDERBUFFER, - depthBuffer, - ); - - // check whether the framebuffer is configured correctly - const e = gl.checkFramebufferStatus(gl.FRAMEBUFFER); - if (gl.FRAMEBUFFER_COMPLETE !== e) { - throw Error(`Frame buffer object is incomplete:${e.toString()}`); - } - - // Unbind the buffer object - gl.bindFramebuffer(gl.FRAMEBUFFER, null); - gl.bindTexture(gl.TEXTURE_2D, null); - gl.bindRenderbuffer(gl.RENDERBUFFER, null); - - return { - framebuffer, - texture, - }; -} +/** + * This file contains the module's private functions that handles various webgl operations. + */ + +export type FrameBufferWithTexture = { + framebuffer: WebGLFramebuffer; + texture: WebGLTexture; +}; + +// The following 2 functions loadShader and initShaderProgram are copied from the curve library, 26 Jul 2021 with no change. This unfortunately violated DIY priciple but I have no choice as those functions are not exported. +/** + * Gets shader based on given shader program code. + * + * @param gl - WebGL's rendering context + * @param type - Constant describing the type of shader to load + * @param source - Source code of the shader + * @returns WebGLShader used to initialize shader program + */ +function loadShader( + gl: WebGLRenderingContext, + type: number, + source: string, +): WebGLShader { + const shader = gl.createShader(type); + if (!shader) { + throw new Error('WebGLShader not available.'); + } + gl.shaderSource(shader, source); + gl.compileShader(shader); + const compiled = gl.getShaderParameter(shader, gl.COMPILE_STATUS); + if (!compiled) { + const compilationLog = gl.getShaderInfoLog(shader); + throw Error(`Shader compilation failed: ${compilationLog}`); + } + return shader; +} + +/** + * Initializes the shader program used by WebGL. + * + * @param gl - WebGL's rendering context + * @param vsSource - Vertex shader program code + * @param fsSource - Fragment shader program code + * @returns WebGLProgram used for getting AttribLocation and UniformLocation + */ +export function initShaderProgram( + gl: WebGLRenderingContext, + vsSource: string, + fsSource: string, +): WebGLProgram { + const vertexShader = loadShader(gl, gl.VERTEX_SHADER, vsSource); + const fragmentShader = loadShader(gl, gl.FRAGMENT_SHADER, fsSource); + const shaderProgram = gl.createProgram(); + if (!shaderProgram) { + throw new Error('Unable to initialize the shader program.'); + } + gl.attachShader(shaderProgram, vertexShader); + gl.attachShader(shaderProgram, fragmentShader); + gl.linkProgram(shaderProgram); + return shaderProgram; +} + +/** + * Get a WebGLRenderingContext from Canvas input + * @param canvas WebGLRenderingContext + * @returns + */ +export function getWebGlFromCanvas( + canvas: HTMLCanvasElement, +): WebGLRenderingContext { + const gl: WebGLRenderingContext | null = canvas.getContext('webgl'); + if (!gl) { + throw Error('Unable to initialize WebGL.'); + } + gl.clearColor(1.0, 1.0, 1.0, 1.0); // Set clear color to white, fully opaque + gl.enable(gl.DEPTH_TEST); // Enable depth testing + gl.depthFunc(gl.LESS); // Near things obscure far things (this is default setting can omit) + // eslint-disable-next-line no-bitwise + gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); // Clear the viewport + return gl; +} + +/** + * creates a framebuffer + * @param gl WebGLRenderingContext + * @returns FrameBufferWithTexture + */ +export function initFramebufferObject( + gl: WebGLRenderingContext, +): FrameBufferWithTexture { + // create a framebuffer object + const framebuffer = gl.createFramebuffer(); + if (!framebuffer) { + throw Error('Failed to create frame buffer object'); + } + + // create a texture object and set its size and parameters + const texture = gl.createTexture(); + if (!texture) { + throw Error('Failed to create texture object'); + } + gl.bindTexture(gl.TEXTURE_2D, texture); + gl.texImage2D( + gl.TEXTURE_2D, + 0, + gl.RGBA, + gl.drawingBufferWidth, + gl.drawingBufferHeight, + 0, + gl.RGBA, + gl.UNSIGNED_BYTE, + null, + ); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); + + // create a renderbuffer for depth buffer + const depthBuffer = gl.createRenderbuffer(); + if (!depthBuffer) { + throw Error('Failed to create renderbuffer object'); + } + + // bind renderbuffer object to target and set size + gl.bindRenderbuffer(gl.RENDERBUFFER, depthBuffer); + gl.renderbufferStorage( + gl.RENDERBUFFER, + gl.DEPTH_COMPONENT16, + gl.drawingBufferWidth, + gl.drawingBufferHeight, + ); + + // set the texture object to the framebuffer object + gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer); // bind to target + gl.framebufferTexture2D( + gl.FRAMEBUFFER, + gl.COLOR_ATTACHMENT0, + gl.TEXTURE_2D, + texture, + 0, + ); + // set the renderbuffer object to the framebuffer object + gl.framebufferRenderbuffer( + gl.FRAMEBUFFER, + gl.DEPTH_ATTACHMENT, + gl.RENDERBUFFER, + depthBuffer, + ); + + // check whether the framebuffer is configured correctly + const e = gl.checkFramebufferStatus(gl.FRAMEBUFFER); + if (gl.FRAMEBUFFER_COMPLETE !== e) { + throw Error(`Frame buffer object is incomplete:${e.toString()}`); + } + + // Unbind the buffer object + gl.bindFramebuffer(gl.FRAMEBUFFER, null); + gl.bindTexture(gl.TEXTURE_2D, null); + gl.bindRenderbuffer(gl.RENDERBUFFER, null); + + return { + framebuffer, + texture, + }; +} diff --git a/src/bundles/rune_in_words/functions.ts b/src/bundles/rune_in_words/functions.ts index b7fa66b46..f033076a6 100644 --- a/src/bundles/rune_in_words/functions.ts +++ b/src/bundles/rune_in_words/functions.ts @@ -1,615 +1,615 @@ -/** - * The module `rune_in_words` provides functions for computing with runes using text instead of graphics. - * - * A *Rune* is defined by its vertices (x,y,z,t), the colors on its vertices (r,g,b,a), a transformation matrix for rendering the Rune and a (could be empty) list of its sub-Runes. In this module, runes are represented as strings that approximate the way they are created. No graphical output is generated. - * @module rune_in_words - */ -import type { Rune } from './rune'; -import { - getSquare, - getBlank, - getRcross, - getSail, - getTriangle, - getCorner, - getNova, - getCircle, - getHeart, - getPentagram, - getRibbon, - throwIfNotRune, -} from './runes_ops'; - -// ============================================================================= -// Basic Runes -// ============================================================================= - -/** - * Rune with the shape of a full square - * - * @category Primitive - */ -export const square: string = getSquare(); -/** - * Rune with the shape of a blank square - * - * @category Primitive - */ -export const blank: string = getBlank(); -/** - * Rune with the shape of a - * small square inside a large square, - * each diagonally split into a - * black and white half - * - * @category Primitive - */ -export const rcross: string = getRcross(); -/** - * Rune with the shape of a sail - * - * @category Primitive - */ -export const sail: string = getSail(); -/** - * Rune with the shape of a triangle - * - * @category Primitive - */ -export const triangle: string = getTriangle(); -/** - * Rune with black triangle, - * filling upper right corner - * - * @category Primitive - */ -export const corner: string = getCorner(); -/** - * Rune with the shape of two overlapping - * triangles, residing in the upper half - * of the shape - * - * @category Primitive - */ -export const nova: string = getNova(); -/** - * Rune with the shape of a circle - * - * @category Primitive - */ -export const circle: string = getCircle(); -/** - * Rune with the shape of a heart - * - * @category Primitive - */ -export const heart: string = getHeart(); -/** - * Rune with the shape of a pentagram - * - * @category Primitive - */ -export const pentagram: string = getPentagram(); -/** - * Rune with the shape of a ribbon - * winding outwards in an anticlockwise spiral - * - * @category Primitive - */ -export const ribbon: string = getRibbon(); - -// ============================================================================= -// Textured Runes -// ============================================================================= -/** - * Create a rune using the image provided in the url - * @param {string} imageUrl URL to the image that is used to create the rune. - * Note that the url must be from a domain that allows CORS. - * @returns {Rune} Rune created using the image. - * - * @category Main - */ -export function from_url(imageUrl: string): string { - return `url(${imageUrl})`; -} - -// ============================================================================= -// XY-axis Transformation functions -// ============================================================================= - -/** - * Scales a given Rune by separate factors in x and y direction - * @param {number} ratio_x - Scaling factor in x direction - * @param {number} ratio_y - Scaling factor in y direction - * @param {Rune} rune - Given Rune - * @return {Rune} Resulting scaled Rune - * - * @category Main - */ -export function scale_independent( - ratio_x: number, - ratio_y: number, - rune: string, -): string { - throwIfNotRune('scale_independent', rune); - return `scaled(${rune}, ${ratio_x}, ${ratio_y})`; -} - -/** - * Scales a given Rune by a given factor in both x and y direction - * @param {number} ratio - Scaling factor - * @param {Rune} rune - Given Rune - * @return {Rune} Resulting scaled Rune - * - * @category Main - */ -export function scale(ratio: number, rune: string): string { - throwIfNotRune('scale', rune); - return scale_independent(ratio, ratio, rune); -} - -/** - * Translates a given Rune by given values in x and y direction - * @param {number} x - Translation in x direction - * @param {number} y - Translation in y direction - * @param {Rune} rune - Given Rune - * @return {Rune} Resulting translated Rune - * - * @category Main - */ -export function translate(x: number, y: number, rune: string): string { - throwIfNotRune('translate', rune); - return `translated(${rune}, ${x}, ${y})`; -} - -/** - * Rotates a given Rune by a given angle, - * given in radians, in anti-clockwise direction. - * Note that parts of the Rune - * may be cropped as a result. - * @param {number} rad - Angle in radians - * @param {Rune} rune - Given Rune - * @return {Rune} Rotated Rune - * - * @category Main - */ -export function rotate(rad: number, rune: string): string { - throwIfNotRune('rotate', rune); - return `rotated(${rune}, ${rad})`; -} - -/** - * Makes a new Rune from two given Runes by - * placing the first on top of the second - * such that the first one occupies frac - * portion of the height of the result and - * the second the rest - * @param {number} frac - Fraction between 0 and 1 (inclusive) - * @param {Rune} rune1 - Given Rune - * @param {Rune} rune2 - Given Rune - * @return {Rune} Resulting Rune - * - * @category Main - */ -export function stack_frac(frac: number, rune1: string, rune2: string): string { - throwIfNotRune('stack_frac', rune1); - throwIfNotRune('stack_frac', rune2); - - return `stack_frac(${frac}, ${rune1}, ${rune2})`; -} - -/** - * Makes a new Rune from two given Runes by - * placing the first on top of the second, each - * occupying equal parts of the height of the - * result - * @param {Rune} rune1 - Given Rune - * @param {Rune} rune2 - Given Rune - * @return {Rune} Resulting Rune - * - * @category Main - */ -export function stack(rune1: string, rune2: string): string { - throwIfNotRune('stack', rune1, rune2); - return `stack(${rune1}, ${rune2})`; -} - -/** - * Makes a new Rune from a given Rune - * by vertically stacking n copies of it - * @param {number} n - Positive integer - * @param {Rune} rune - Given Rune - * @return {Rune} Resulting Rune - * - * @category Main - */ -export function stackn(n: number, rune: string): string { - throwIfNotRune('stackn', rune); - - return `stackn(${n}, ${rune})`; -} - -/** - * Makes a new Rune from a given Rune - * by turning it a quarter-turn around the centre in - * clockwise direction. - * @param {Rune} rune - Given Rune - * @return {Rune} Resulting Rune - * - * @category Main - */ -export function quarter_turn_right(rune: string): string { - throwIfNotRune('quarter_turn_right', rune); - return `quarter_turn_right(${rune})`; -} - -/** - * Makes a new Rune from a given Rune - * by turning it a quarter-turn in - * anti-clockwise direction. - * @param {Rune} rune - Given Rune - * @return {Rune} Resulting Rune - * - * @category Main - */ -export function quarter_turn_left(rune: string): string { - throwIfNotRune('quarter_turn_left', rune); - return `quarter_turn_left(${rune})`; -} - -/** - * Makes a new Rune from a given Rune - * by turning it upside-down - * @param {Rune} rune - Given Rune - * @return {Rune} Resulting Rune - * - * @category Main - */ -export function turn_upside_down(rune: string): string { - throwIfNotRune('turn_upside_down', rune); - return `quarter_upside_down(${rune})`; -} - -/** - * Makes a new Rune from two given Runes by - * placing the first on the left of the second - * such that the first one occupies frac - * portion of the width of the result and - * the second the rest - * @param {number} frac - Fraction between 0 and 1 (inclusive) - * @param {Rune} rune1 - Given Rune - * @param {Rune} rune2 - Given Rune - * @return {Rune} Resulting Rune - * - * @category Main - */ -export function beside_frac(frac: number, rune1: string, rune2: string): string { - throwIfNotRune('beside_frac', rune1, rune2); - - return `beside_frac(${frac}, ${rune1}, ${rune2})`; -} - -/** - * Makes a new Rune from two given Runes by - * placing the first on the left of the second, - * both occupying equal portions of the width - * of the result - * @param {Rune} rune1 - Given Rune - * @param {Rune} rune2 - Given Rune - * @return {Rune} Resulting Rune - * - * @category Main - */ -export function beside(rune1: string, rune2: string): string { - throwIfNotRune('beside', rune1, rune2); - return `stack(${rune1}, ${rune2})`; -} - -/** - * Makes a new Rune from a given Rune by - * flipping it around a horizontal axis, - * turning it upside down - * @param {Rune} rune - Given Rune - * @return {Rune} Resulting Rune - * - * @category Main - */ -export function flip_vert(rune: string): string { - throwIfNotRune('flip_vert', rune); - return `flip_vert(${rune})`; -} - -/** - * Makes a new Rune from a given Rune by - * flipping it around a vertical axis, - * creating a mirror image - * @param {Rune} rune - Given Rune - * @return {Rune} Resulting Rune - * - * @category Main - */ -export function flip_horiz(rune: string): string { - throwIfNotRune('flip_horiz', rune); - return `flip_horiz(${rune})`; -} - -/** - * Makes a new Rune from a given Rune by - * arranging into a square for copies of the - * given Rune in different orientations - * @param {Rune} rune - Given Rune - * @return {Rune} Resulting Rune - * - * @category Main - */ -export function make_cross(rune: string): string { - throwIfNotRune('make_cross', rune); - return stack( - beside(quarter_turn_right(rune), turn_upside_down(rune)), - beside(rune, quarter_turn_left(rune)), - ); -} - -/** - * Applies a given function n times to an initial value - * @param {number} n - A non-negative integer - * @param {function} pattern - Unary function from Rune to Rune - * @param {Rune} initial - The initial Rune - * @return {Rune} - Result of n times application of pattern to initial: - * pattern(pattern(...pattern(pattern(initial))...)) - * - * @category Main - */ -export function repeat_pattern( - n: number, - pattern: (a: string) => Rune, - initial: string, -): string { - if (n === 0) { - return initial; - } - return pattern(repeat_pattern(n - 1, pattern, initial)); -} - -// ============================================================================= -// Z-axis Transformation functions -// ============================================================================= - -/** - * The depth range of the z-axis of a rune is [0,-1], this function gives a [0, -frac] of the depth range to rune1 and the rest to rune2. - * @param {number} frac - Fraction between 0 and 1 (inclusive) - * @param {Rune} rune1 - Given Rune - * @param {Rune} rune2 - Given Rune - * @return {Rune} Resulting Rune - * - * @category Main - */ -export function overlay_frac(frac: number, rune1: string, rune2: string): string { - throwIfNotRune('overlay_frac', rune1); - throwIfNotRune('overlay_frac', rune2); - return `overlay_frac(${frac}, ${rune1}, ${rune2})`; -} - -/** - * The depth range of the z-axis of a rune is [0,-1], this function maps the depth range of rune1 and rune2 to [0,-0.5] and [-0.5,-1] respectively. - * @param {Rune} rune1 - Given Rune - * @param {Rune} rune2 - Given Rune - * @return {Rune} Resulting Runes - * - * @category Main - */ -export function overlay(rune1: string, rune2: string): string { - throwIfNotRune('overlay', rune1); - throwIfNotRune('overlay', rune2); - return `overlay(${rune1}, ${rune2})`; -} - -// ============================================================================= -// Color functions -// ============================================================================= - -/** - * Adds color to rune by specifying - * the red, green, blue (RGB) value, ranging from 0.0 to 1.0. - * RGB is additive: if all values are 1, the color is white, - * and if all values are 0, the color is black. - * @param {Rune} rune - The rune to add color to - * @param {number} r - Red value [0.0-1.0] - * @param {number} g - Green value [0.0-1.0] - * @param {number} b - Blue value [0.0-1.0] - * @returns {Rune} The colored Rune - * - * @category Color - */ -export function color(rune: string, r: number, g: number, b: number): string { - throwIfNotRune('color', rune); - return `color(${rune}, ${r}, ${g}, ${b})`; -} - -/** - * Gives random color to the given rune. - * The color is chosen randomly from the following nine - * colors: red, pink, purple, indigo, blue, green, yellow, orange, brown - * @param {Rune} rune - The rune to color - * @returns {Rune} The colored Rune - * - * @category Color - */ -export function random_color(rune: string): string { - throwIfNotRune('random_color', rune); - return `random(${rune})`; -} - -/** - * Colors the given rune red (#F44336). - * @param {Rune} rune - The rune to color - * @returns {Rune} The colored Rune - * - * @category Color - */ -export function red(rune: string): string { - throwIfNotRune('red', rune); - return `red(${rune})`; -} - -/** - * Colors the given rune pink (#E91E63s). - * @param {Rune} rune - The rune to color - * @returns {Rune} The colored Rune - * - * @category Color - */ -export function pink(rune: string): string { - throwIfNotRune('pink', rune); - return `pink(${rune})`; -} - -/** - * Colors the given rune purple (#AA00FF). - * @param {Rune} rune - The rune to color - * @returns {Rune} The colored Rune - * - * @category Color - */ -export function purple(rune: string): string { - throwIfNotRune('purple', rune); - return `purple(${rune})`; -} - -/** - * Colors the given rune indigo (#3F51B5). - * @param {Rune} rune - The rune to color - * @returns {Rune} The colored Rune - * - * @category Color - */ -export function indigo(rune: string): string { - throwIfNotRune('indigo', rune); - return `indigo(${rune})`; -} - -/** - * Colors the given rune blue (#2196F3). - * @param {Rune} rune - The rune to color - * @returns {Rune} The colored Rune - * - * @category Color - */ -export function blue(rune: string): string { - throwIfNotRune('blue', rune); - return `blue(${rune})`; -} - -/** - * Colors the given rune green (#4CAF50). - * @param {Rune} rune - The rune to color - * @returns {Rune} The colored Rune - * - * @category Color - */ -export function green(rune: string): string { - throwIfNotRune('green', rune); - return `green(${rune})`; -} - -/** - * Colors the given rune yellow (#FFEB3B). - * @param {Rune} rune - The rune to color - * @returns {Rune} The colored Rune - * - * @category Color - */ -export function yellow(rune: string): string { - throwIfNotRune('yellow', rune); - return `yellow(${rune})`; -} - -/** - * Colors the given rune orange (#FF9800). - * @param {Rune} rune - The rune to color - * @returns {Rune} The colored Rune - * - * @category Color - */ -export function orange(rune: string): string { - throwIfNotRune('orange', rune); - return `orange(${rune})`; -} - -/** - * Colors the given rune brown. - * @param {Rune} rune - The rune to color - * @returns {Rune} The colored Rune - * - * @category Color - */ -export function brown(rune: string): string { - throwIfNotRune('brown', rune); - return `brown(${rune})`; -} - -/** - * Colors the given rune black (#000000). - * @param {Rune} rune - The rune to color - * @returns {Rune} The colored Rune - * - * @category Color - */ -export function black(rune: string): string { - throwIfNotRune('black', rune); - return `black(${rune})`; -} - -/** - * Colors the given rune white (#FFFFFF). - * @param {Rune} rune - The rune to color - * @returns {Rune} The colored Rune - * - * @category Color - */ -export function white(rune: string): string { - throwIfNotRune('white', rune); - return `white(${rune})`; -} - -// ============================================================================= -// Drawing functions -// ============================================================================= - -/** - * Renders the specified Rune in a tab as a basic drawing. - * @param rune - The Rune to render - * @return {Rune} The specified Rune - * - * @category Main - */ -export function show(rune: string): string { - throwIfNotRune('show', rune); - return rune; -} - -/** - * Renders the specified Rune in a tab as an anaglyph. Use 3D glasses to view the - * anaglyph. - * @param rune - The Rune to render - * @return {Rune} The specified Rune - * - * @category Main - */ -export function anaglyph(rune: string): string { - throwIfNotRune('anaglyph', rune); - return rune; -} - -/** - * Renders the specified Rune in a tab as a hollusion, with a default magnitude - * of 0.1. - * @param rune - The Rune to render - * @return {Rune} The specified Rune - * - * @category Main - */ -export function hollusion(rune: string): string { - throwIfNotRune('hollusion', rune); - return rune; -} +/** + * The module `rune_in_words` provides functions for computing with runes using text instead of graphics. + * + * A *Rune* is defined by its vertices (x,y,z,t), the colors on its vertices (r,g,b,a), a transformation matrix for rendering the Rune and a (could be empty) list of its sub-Runes. In this module, runes are represented as strings that approximate the way they are created. No graphical output is generated. + * @module rune_in_words + */ +import type { Rune } from './rune'; +import { + getSquare, + getBlank, + getRcross, + getSail, + getTriangle, + getCorner, + getNova, + getCircle, + getHeart, + getPentagram, + getRibbon, + throwIfNotRune, +} from './runes_ops'; + +// ============================================================================= +// Basic Runes +// ============================================================================= + +/** + * Rune with the shape of a full square + * + * @category Primitive + */ +export const square: string = getSquare(); +/** + * Rune with the shape of a blank square + * + * @category Primitive + */ +export const blank: string = getBlank(); +/** + * Rune with the shape of a + * small square inside a large square, + * each diagonally split into a + * black and white half + * + * @category Primitive + */ +export const rcross: string = getRcross(); +/** + * Rune with the shape of a sail + * + * @category Primitive + */ +export const sail: string = getSail(); +/** + * Rune with the shape of a triangle + * + * @category Primitive + */ +export const triangle: string = getTriangle(); +/** + * Rune with black triangle, + * filling upper right corner + * + * @category Primitive + */ +export const corner: string = getCorner(); +/** + * Rune with the shape of two overlapping + * triangles, residing in the upper half + * of the shape + * + * @category Primitive + */ +export const nova: string = getNova(); +/** + * Rune with the shape of a circle + * + * @category Primitive + */ +export const circle: string = getCircle(); +/** + * Rune with the shape of a heart + * + * @category Primitive + */ +export const heart: string = getHeart(); +/** + * Rune with the shape of a pentagram + * + * @category Primitive + */ +export const pentagram: string = getPentagram(); +/** + * Rune with the shape of a ribbon + * winding outwards in an anticlockwise spiral + * + * @category Primitive + */ +export const ribbon: string = getRibbon(); + +// ============================================================================= +// Textured Runes +// ============================================================================= +/** + * Create a rune using the image provided in the url + * @param {string} imageUrl URL to the image that is used to create the rune. + * Note that the url must be from a domain that allows CORS. + * @returns {Rune} Rune created using the image. + * + * @category Main + */ +export function from_url(imageUrl: string): string { + return `url(${imageUrl})`; +} + +// ============================================================================= +// XY-axis Transformation functions +// ============================================================================= + +/** + * Scales a given Rune by separate factors in x and y direction + * @param {number} ratio_x - Scaling factor in x direction + * @param {number} ratio_y - Scaling factor in y direction + * @param {Rune} rune - Given Rune + * @return {Rune} Resulting scaled Rune + * + * @category Main + */ +export function scale_independent( + ratio_x: number, + ratio_y: number, + rune: string, +): string { + throwIfNotRune('scale_independent', rune); + return `scaled(${rune}, ${ratio_x}, ${ratio_y})`; +} + +/** + * Scales a given Rune by a given factor in both x and y direction + * @param {number} ratio - Scaling factor + * @param {Rune} rune - Given Rune + * @return {Rune} Resulting scaled Rune + * + * @category Main + */ +export function scale(ratio: number, rune: string): string { + throwIfNotRune('scale', rune); + return scale_independent(ratio, ratio, rune); +} + +/** + * Translates a given Rune by given values in x and y direction + * @param {number} x - Translation in x direction + * @param {number} y - Translation in y direction + * @param {Rune} rune - Given Rune + * @return {Rune} Resulting translated Rune + * + * @category Main + */ +export function translate(x: number, y: number, rune: string): string { + throwIfNotRune('translate', rune); + return `translated(${rune}, ${x}, ${y})`; +} + +/** + * Rotates a given Rune by a given angle, + * given in radians, in anti-clockwise direction. + * Note that parts of the Rune + * may be cropped as a result. + * @param {number} rad - Angle in radians + * @param {Rune} rune - Given Rune + * @return {Rune} Rotated Rune + * + * @category Main + */ +export function rotate(rad: number, rune: string): string { + throwIfNotRune('rotate', rune); + return `rotated(${rune}, ${rad})`; +} + +/** + * Makes a new Rune from two given Runes by + * placing the first on top of the second + * such that the first one occupies frac + * portion of the height of the result and + * the second the rest + * @param {number} frac - Fraction between 0 and 1 (inclusive) + * @param {Rune} rune1 - Given Rune + * @param {Rune} rune2 - Given Rune + * @return {Rune} Resulting Rune + * + * @category Main + */ +export function stack_frac(frac: number, rune1: string, rune2: string): string { + throwIfNotRune('stack_frac', rune1); + throwIfNotRune('stack_frac', rune2); + + return `stack_frac(${frac}, ${rune1}, ${rune2})`; +} + +/** + * Makes a new Rune from two given Runes by + * placing the first on top of the second, each + * occupying equal parts of the height of the + * result + * @param {Rune} rune1 - Given Rune + * @param {Rune} rune2 - Given Rune + * @return {Rune} Resulting Rune + * + * @category Main + */ +export function stack(rune1: string, rune2: string): string { + throwIfNotRune('stack', rune1, rune2); + return `stack(${rune1}, ${rune2})`; +} + +/** + * Makes a new Rune from a given Rune + * by vertically stacking n copies of it + * @param {number} n - Positive integer + * @param {Rune} rune - Given Rune + * @return {Rune} Resulting Rune + * + * @category Main + */ +export function stackn(n: number, rune: string): string { + throwIfNotRune('stackn', rune); + + return `stackn(${n}, ${rune})`; +} + +/** + * Makes a new Rune from a given Rune + * by turning it a quarter-turn around the centre in + * clockwise direction. + * @param {Rune} rune - Given Rune + * @return {Rune} Resulting Rune + * + * @category Main + */ +export function quarter_turn_right(rune: string): string { + throwIfNotRune('quarter_turn_right', rune); + return `quarter_turn_right(${rune})`; +} + +/** + * Makes a new Rune from a given Rune + * by turning it a quarter-turn in + * anti-clockwise direction. + * @param {Rune} rune - Given Rune + * @return {Rune} Resulting Rune + * + * @category Main + */ +export function quarter_turn_left(rune: string): string { + throwIfNotRune('quarter_turn_left', rune); + return `quarter_turn_left(${rune})`; +} + +/** + * Makes a new Rune from a given Rune + * by turning it upside-down + * @param {Rune} rune - Given Rune + * @return {Rune} Resulting Rune + * + * @category Main + */ +export function turn_upside_down(rune: string): string { + throwIfNotRune('turn_upside_down', rune); + return `quarter_upside_down(${rune})`; +} + +/** + * Makes a new Rune from two given Runes by + * placing the first on the left of the second + * such that the first one occupies frac + * portion of the width of the result and + * the second the rest + * @param {number} frac - Fraction between 0 and 1 (inclusive) + * @param {Rune} rune1 - Given Rune + * @param {Rune} rune2 - Given Rune + * @return {Rune} Resulting Rune + * + * @category Main + */ +export function beside_frac(frac: number, rune1: string, rune2: string): string { + throwIfNotRune('beside_frac', rune1, rune2); + + return `beside_frac(${frac}, ${rune1}, ${rune2})`; +} + +/** + * Makes a new Rune from two given Runes by + * placing the first on the left of the second, + * both occupying equal portions of the width + * of the result + * @param {Rune} rune1 - Given Rune + * @param {Rune} rune2 - Given Rune + * @return {Rune} Resulting Rune + * + * @category Main + */ +export function beside(rune1: string, rune2: string): string { + throwIfNotRune('beside', rune1, rune2); + return `stack(${rune1}, ${rune2})`; +} + +/** + * Makes a new Rune from a given Rune by + * flipping it around a horizontal axis, + * turning it upside down + * @param {Rune} rune - Given Rune + * @return {Rune} Resulting Rune + * + * @category Main + */ +export function flip_vert(rune: string): string { + throwIfNotRune('flip_vert', rune); + return `flip_vert(${rune})`; +} + +/** + * Makes a new Rune from a given Rune by + * flipping it around a vertical axis, + * creating a mirror image + * @param {Rune} rune - Given Rune + * @return {Rune} Resulting Rune + * + * @category Main + */ +export function flip_horiz(rune: string): string { + throwIfNotRune('flip_horiz', rune); + return `flip_horiz(${rune})`; +} + +/** + * Makes a new Rune from a given Rune by + * arranging into a square for copies of the + * given Rune in different orientations + * @param {Rune} rune - Given Rune + * @return {Rune} Resulting Rune + * + * @category Main + */ +export function make_cross(rune: string): string { + throwIfNotRune('make_cross', rune); + return stack( + beside(quarter_turn_right(rune), turn_upside_down(rune)), + beside(rune, quarter_turn_left(rune)), + ); +} + +/** + * Applies a given function n times to an initial value + * @param {number} n - A non-negative integer + * @param {function} pattern - Unary function from Rune to Rune + * @param {Rune} initial - The initial Rune + * @return {Rune} - Result of n times application of pattern to initial: + * pattern(pattern(...pattern(pattern(initial))...)) + * + * @category Main + */ +export function repeat_pattern( + n: number, + pattern: (a: string) => Rune, + initial: string, +): string { + if (n === 0) { + return initial; + } + return pattern(repeat_pattern(n - 1, pattern, initial)); +} + +// ============================================================================= +// Z-axis Transformation functions +// ============================================================================= + +/** + * The depth range of the z-axis of a rune is [0,-1], this function gives a [0, -frac] of the depth range to rune1 and the rest to rune2. + * @param {number} frac - Fraction between 0 and 1 (inclusive) + * @param {Rune} rune1 - Given Rune + * @param {Rune} rune2 - Given Rune + * @return {Rune} Resulting Rune + * + * @category Main + */ +export function overlay_frac(frac: number, rune1: string, rune2: string): string { + throwIfNotRune('overlay_frac', rune1); + throwIfNotRune('overlay_frac', rune2); + return `overlay_frac(${frac}, ${rune1}, ${rune2})`; +} + +/** + * The depth range of the z-axis of a rune is [0,-1], this function maps the depth range of rune1 and rune2 to [0,-0.5] and [-0.5,-1] respectively. + * @param {Rune} rune1 - Given Rune + * @param {Rune} rune2 - Given Rune + * @return {Rune} Resulting Runes + * + * @category Main + */ +export function overlay(rune1: string, rune2: string): string { + throwIfNotRune('overlay', rune1); + throwIfNotRune('overlay', rune2); + return `overlay(${rune1}, ${rune2})`; +} + +// ============================================================================= +// Color functions +// ============================================================================= + +/** + * Adds color to rune by specifying + * the red, green, blue (RGB) value, ranging from 0.0 to 1.0. + * RGB is additive: if all values are 1, the color is white, + * and if all values are 0, the color is black. + * @param {Rune} rune - The rune to add color to + * @param {number} r - Red value [0.0-1.0] + * @param {number} g - Green value [0.0-1.0] + * @param {number} b - Blue value [0.0-1.0] + * @returns {Rune} The colored Rune + * + * @category Color + */ +export function color(rune: string, r: number, g: number, b: number): string { + throwIfNotRune('color', rune); + return `color(${rune}, ${r}, ${g}, ${b})`; +} + +/** + * Gives random color to the given rune. + * The color is chosen randomly from the following nine + * colors: red, pink, purple, indigo, blue, green, yellow, orange, brown + * @param {Rune} rune - The rune to color + * @returns {Rune} The colored Rune + * + * @category Color + */ +export function random_color(rune: string): string { + throwIfNotRune('random_color', rune); + return `random(${rune})`; +} + +/** + * Colors the given rune red (#F44336). + * @param {Rune} rune - The rune to color + * @returns {Rune} The colored Rune + * + * @category Color + */ +export function red(rune: string): string { + throwIfNotRune('red', rune); + return `red(${rune})`; +} + +/** + * Colors the given rune pink (#E91E63s). + * @param {Rune} rune - The rune to color + * @returns {Rune} The colored Rune + * + * @category Color + */ +export function pink(rune: string): string { + throwIfNotRune('pink', rune); + return `pink(${rune})`; +} + +/** + * Colors the given rune purple (#AA00FF). + * @param {Rune} rune - The rune to color + * @returns {Rune} The colored Rune + * + * @category Color + */ +export function purple(rune: string): string { + throwIfNotRune('purple', rune); + return `purple(${rune})`; +} + +/** + * Colors the given rune indigo (#3F51B5). + * @param {Rune} rune - The rune to color + * @returns {Rune} The colored Rune + * + * @category Color + */ +export function indigo(rune: string): string { + throwIfNotRune('indigo', rune); + return `indigo(${rune})`; +} + +/** + * Colors the given rune blue (#2196F3). + * @param {Rune} rune - The rune to color + * @returns {Rune} The colored Rune + * + * @category Color + */ +export function blue(rune: string): string { + throwIfNotRune('blue', rune); + return `blue(${rune})`; +} + +/** + * Colors the given rune green (#4CAF50). + * @param {Rune} rune - The rune to color + * @returns {Rune} The colored Rune + * + * @category Color + */ +export function green(rune: string): string { + throwIfNotRune('green', rune); + return `green(${rune})`; +} + +/** + * Colors the given rune yellow (#FFEB3B). + * @param {Rune} rune - The rune to color + * @returns {Rune} The colored Rune + * + * @category Color + */ +export function yellow(rune: string): string { + throwIfNotRune('yellow', rune); + return `yellow(${rune})`; +} + +/** + * Colors the given rune orange (#FF9800). + * @param {Rune} rune - The rune to color + * @returns {Rune} The colored Rune + * + * @category Color + */ +export function orange(rune: string): string { + throwIfNotRune('orange', rune); + return `orange(${rune})`; +} + +/** + * Colors the given rune brown. + * @param {Rune} rune - The rune to color + * @returns {Rune} The colored Rune + * + * @category Color + */ +export function brown(rune: string): string { + throwIfNotRune('brown', rune); + return `brown(${rune})`; +} + +/** + * Colors the given rune black (#000000). + * @param {Rune} rune - The rune to color + * @returns {Rune} The colored Rune + * + * @category Color + */ +export function black(rune: string): string { + throwIfNotRune('black', rune); + return `black(${rune})`; +} + +/** + * Colors the given rune white (#FFFFFF). + * @param {Rune} rune - The rune to color + * @returns {Rune} The colored Rune + * + * @category Color + */ +export function white(rune: string): string { + throwIfNotRune('white', rune); + return `white(${rune})`; +} + +// ============================================================================= +// Drawing functions +// ============================================================================= + +/** + * Renders the specified Rune in a tab as a basic drawing. + * @param rune - The Rune to render + * @return {Rune} The specified Rune + * + * @category Main + */ +export function show(rune: string): string { + throwIfNotRune('show', rune); + return rune; +} + +/** + * Renders the specified Rune in a tab as an anaglyph. Use 3D glasses to view the + * anaglyph. + * @param rune - The Rune to render + * @return {Rune} The specified Rune + * + * @category Main + */ +export function anaglyph(rune: string): string { + throwIfNotRune('anaglyph', rune); + return rune; +} + +/** + * Renders the specified Rune in a tab as a hollusion, with a default magnitude + * of 0.1. + * @param rune - The Rune to render + * @return {Rune} The specified Rune + * + * @category Main + */ +export function hollusion(rune: string): string { + throwIfNotRune('hollusion', rune); + return rune; +} diff --git a/src/bundles/rune_in_words/index.ts b/src/bundles/rune_in_words/index.ts index f57f2ffaf..bfc583b3b 100644 --- a/src/bundles/rune_in_words/index.ts +++ b/src/bundles/rune_in_words/index.ts @@ -1,52 +1,52 @@ -/** - * Bundle for Source Academy Runes module using words instead of pictures - * @author Martin Henz - */ -export { - anaglyph, - beside, - beside_frac, - black, - blank, - blue, - brown, - circle, - color, - corner, - flip_horiz, - flip_vert, - from_url, - green, - heart, - hollusion, - indigo, - make_cross, - nova, - orange, - overlay, - overlay_frac, - pentagram, - pink, - purple, - quarter_turn_left, - quarter_turn_right, - random_color, - rcross, - red, - repeat_pattern, - ribbon, - rotate, - sail, - scale, - scale_independent, - show, - square, - stack, - stackn, - stack_frac, - translate, - triangle, - turn_upside_down, - white, - yellow, -} from './functions'; +/** + * Bundle for Source Academy Runes module using words instead of pictures + * @author Martin Henz + */ +export { + anaglyph, + beside, + beside_frac, + black, + blank, + blue, + brown, + circle, + color, + corner, + flip_horiz, + flip_vert, + from_url, + green, + heart, + hollusion, + indigo, + make_cross, + nova, + orange, + overlay, + overlay_frac, + pentagram, + pink, + purple, + quarter_turn_left, + quarter_turn_right, + random_color, + rcross, + red, + repeat_pattern, + ribbon, + rotate, + sail, + scale, + scale_independent, + show, + square, + stack, + stackn, + stack_frac, + translate, + triangle, + turn_upside_down, + white, + yellow, +} from './functions'; diff --git a/src/bundles/rune_in_words/rune.ts b/src/bundles/rune_in_words/rune.ts index 89c5b90c2..34528d050 100644 --- a/src/bundles/rune_in_words/rune.ts +++ b/src/bundles/rune_in_words/rune.ts @@ -1 +1 @@ -export type Rune = string; +export type Rune = string; diff --git a/src/bundles/rune_in_words/runes_ops.ts b/src/bundles/rune_in_words/runes_ops.ts index 8b90901ec..26068e152 100644 --- a/src/bundles/rune_in_words/runes_ops.ts +++ b/src/bundles/rune_in_words/runes_ops.ts @@ -1,61 +1,61 @@ -// ============================================================================= -// Utility Functions -// ============================================================================= -export function throwIfNotRune(name, ...runes) { - runes.forEach((rune) => { - if (!(typeof rune === 'string')) { - throw Error(`${name} expects a rune (string) as argument.`); - } - }); -} - -// ============================================================================= -// Basic Runes -// ============================================================================= - -/** - * primitive Rune in the rune of a full square - * */ -export const getSquare: () => string = () => 'square'; - -export const getBlank: () => string = () => 'blank'; - -export const getRcross: () => string = () => 'rcross'; - -export const getSail: () => string = () => 'sail'; - -export const getTriangle: () => string = () => 'triangle'; - -export const getCorner: () => string = () => 'corner'; - -export const getNova: () => string = () => 'nova'; - -export const getCircle: () => string = () => 'circle'; - -export const getHeart: () => string = () => 'heart'; - -export const getPentagram: () => string = () => 'pentagram'; - -export const getRibbon: () => string = () => 'ribbon'; - -// ============================================================================= -// Coloring Functions -// ============================================================================= -// black and white not included because they are boring colors -// colorPalette is used in generateFlattenedRuneList to generate a random color -export const colorPalette = [ - '#F44336', - '#E91E63', - '#AA00FF', - '#3F51B5', - '#2196F3', - '#4CAF50', - '#FFEB3B', - '#FF9800', - '#795548', -]; - -export function addColorFromHex(rune, hex) { - throwIfNotRune('addColorFromHex', rune); - return `color(${rune}, ${hex})`; -} +// ============================================================================= +// Utility Functions +// ============================================================================= +export function throwIfNotRune(name, ...runes) { + runes.forEach((rune) => { + if (!(typeof rune === 'string')) { + throw Error(`${name} expects a rune (string) as argument.`); + } + }); +} + +// ============================================================================= +// Basic Runes +// ============================================================================= + +/** + * primitive Rune in the rune of a full square + * */ +export const getSquare: () => string = () => 'square'; + +export const getBlank: () => string = () => 'blank'; + +export const getRcross: () => string = () => 'rcross'; + +export const getSail: () => string = () => 'sail'; + +export const getTriangle: () => string = () => 'triangle'; + +export const getCorner: () => string = () => 'corner'; + +export const getNova: () => string = () => 'nova'; + +export const getCircle: () => string = () => 'circle'; + +export const getHeart: () => string = () => 'heart'; + +export const getPentagram: () => string = () => 'pentagram'; + +export const getRibbon: () => string = () => 'ribbon'; + +// ============================================================================= +// Coloring Functions +// ============================================================================= +// black and white not included because they are boring colors +// colorPalette is used in generateFlattenedRuneList to generate a random color +export const colorPalette = [ + '#F44336', + '#E91E63', + '#AA00FF', + '#3F51B5', + '#2196F3', + '#4CAF50', + '#FFEB3B', + '#FF9800', + '#795548', +]; + +export function addColorFromHex(rune, hex) { + throwIfNotRune('addColorFromHex', rune); + return `color(${rune}, ${hex})`; +} diff --git a/src/bundles/scrabble/__tests__/index.ts b/src/bundles/scrabble/__tests__/index.ts index ba9db69f3..c487f0eb3 100644 --- a/src/bundles/scrabble/__tests__/index.ts +++ b/src/bundles/scrabble/__tests__/index.ts @@ -1,17 +1,17 @@ -import { scrabble_array, scrabble_list } from '../functions'; - -function list_ref(list, n) { - return n === 0 ? list[0] : list_ref(list[1], n - 1); -} - -// Test functions - -test('get the first word in the array', () => { - expect(scrabble_array[0]) - .toBe('aardwolves'); -}); - -test('get the first word in the list', () => { - expect(list_ref(scrabble_list, 0)) - .toBe('aardwolves'); -}); +import { scrabble_array, scrabble_list } from '../functions'; + +function list_ref(list, n) { + return n === 0 ? list[0] : list_ref(list[1], n - 1); +} + +// Test functions + +test('get the first word in the array', () => { + expect(scrabble_array[0]) + .toBe('aardwolves'); +}); + +test('get the first word in the list', () => { + expect(list_ref(scrabble_list, 0)) + .toBe('aardwolves'); +}); diff --git a/src/bundles/scrabble/functions.ts b/src/bundles/scrabble/functions.ts index 6ab86ffe9..45f04d205 100644 --- a/src/bundles/scrabble/functions.ts +++ b/src/bundles/scrabble/functions.ts @@ -1,67618 +1,67618 @@ -/** - * The `scrabble` Source Module provides the allowable - * words in Scrabble in a list and in an array, according to - * https://github.com/benjamincrom/scrabble/blob/master/scrabble/dictionary.json - * @module scrabble - */ - -import type { List } from './types'; - -/** - * `scrabble_array` is an array of strings, each representing - * an allowed word in Scrabble. - */ - -export const scrabble_array = [ - 'aardwolves', - 'abacterial', - 'abandoners', - 'abandoning', - 'abandonment', - 'abandonments', - 'abasements', - 'abashments', - 'abatements', - 'abbreviate', - 'abbreviated', - 'abbreviates', - 'abbreviating', - 'abbreviation', - 'abbreviations', - 'abbreviator', - 'abbreviators', - 'abdicating', - 'abdication', - 'abdications', - 'abdicators', - 'abdominally', - 'abducentes', - 'abductions', - 'abductores', - 'abecedarian', - 'abecedarians', - 'aberrances', - 'aberrancies', - 'aberrantly', - 'aberration', - 'aberrational', - 'aberrations', - 'abeyancies', - 'abhorrence', - 'abhorrences', - 'abhorrently', - 'abiogeneses', - 'abiogenesis', - 'abiogenically', - 'abiogenist', - 'abiogenists', - 'abiological', - 'abiotically', - 'abjections', - 'abjectness', - 'abjectnesses', - 'abjuration', - 'abjurations', - 'ablatively', - 'ablutionary', - 'abnegating', - 'abnegation', - 'abnegations', - 'abnegators', - 'abnormalities', - 'abnormality', - 'abnormally', - 'abolishable', - 'abolishers', - 'abolishing', - 'abolishment', - 'abolishments', - 'abolitionary', - 'abolitionism', - 'abolitionisms', - 'abolitionist', - 'abolitionists', - 'abolitions', - 'abominable', - 'abominably', - 'abominated', - 'abominates', - 'abominating', - 'abomination', - 'abominations', - 'abominator', - 'abominators', - 'aboriginal', - 'aboriginally', - 'aboriginals', - 'aborigines', - 'abortifacient', - 'abortifacients', - 'abortionist', - 'abortionists', - 'abortively', - 'abortiveness', - 'abortivenesses', - 'aboveboard', - 'aboveground', - 'abracadabra', - 'abracadabras', - 'abrasively', - 'abrasiveness', - 'abrasivenesses', - 'abreacting', - 'abreaction', - 'abreactions', - 'abridgement', - 'abridgements', - 'abridgment', - 'abridgments', - 'abrogating', - 'abrogation', - 'abrogations', - 'abruptions', - 'abruptness', - 'abruptnesses', - 'abscessing', - 'abscission', - 'abscissions', - 'absconders', - 'absconding', - 'absenteeism', - 'absenteeisms', - 'absentminded', - 'absentmindedly', - 'absentmindedness', - 'absentmindednesses', - 'absolutely', - 'absoluteness', - 'absolutenesses', - 'absolutest', - 'absolution', - 'absolutions', - 'absolutism', - 'absolutisms', - 'absolutist', - 'absolutistic', - 'absolutists', - 'absolutive', - 'absolutize', - 'absolutized', - 'absolutizes', - 'absolutizing', - 'absorbabilities', - 'absorbability', - 'absorbable', - 'absorbance', - 'absorbances', - 'absorbancies', - 'absorbancy', - 'absorbants', - 'absorbencies', - 'absorbency', - 'absorbents', - 'absorbingly', - 'absorptance', - 'absorptances', - 'absorption', - 'absorptions', - 'absorptive', - 'absorptivities', - 'absorptivity', - 'absquatulate', - 'absquatulated', - 'absquatulates', - 'absquatulating', - 'abstainers', - 'abstaining', - 'abstemious', - 'abstemiously', - 'abstemiousness', - 'abstemiousnesses', - 'abstention', - 'abstentions', - 'abstentious', - 'absterging', - 'abstinence', - 'abstinences', - 'abstinently', - 'abstractable', - 'abstracted', - 'abstractedly', - 'abstractedness', - 'abstractednesses', - 'abstracter', - 'abstracters', - 'abstractest', - 'abstracting', - 'abstraction', - 'abstractional', - 'abstractionism', - 'abstractionisms', - 'abstractionist', - 'abstractionists', - 'abstractions', - 'abstractive', - 'abstractly', - 'abstractness', - 'abstractnesses', - 'abstractor', - 'abstractors', - 'abstricted', - 'abstricting', - 'abstrusely', - 'abstruseness', - 'abstrusenesses', - 'abstrusest', - 'abstrusities', - 'abstrusity', - 'absurdisms', - 'absurdists', - 'absurdities', - 'absurdness', - 'absurdnesses', - 'abundances', - 'abundantly', - 'abusiveness', - 'abusivenesses', - 'academical', - 'academically', - 'academician', - 'academicians', - 'academicism', - 'academicisms', - 'academisms', - 'acanthocephalan', - 'acanthocephalans', - 'acanthuses', - 'acaricidal', - 'acaricides', - 'acatalectic', - 'acatalectics', - 'acaulescent', - 'accelerando', - 'accelerandos', - 'accelerant', - 'accelerants', - 'accelerate', - 'accelerated', - 'accelerates', - 'accelerating', - 'acceleratingly', - 'acceleration', - 'accelerations', - 'accelerative', - 'accelerator', - 'accelerators', - 'accelerometer', - 'accelerometers', - 'accentless', - 'accentually', - 'accentuate', - 'accentuated', - 'accentuates', - 'accentuating', - 'accentuation', - 'accentuations', - 'acceptabilities', - 'acceptability', - 'acceptable', - 'acceptableness', - 'acceptablenesses', - 'acceptably', - 'acceptance', - 'acceptances', - 'acceptation', - 'acceptations', - 'acceptedly', - 'acceptingly', - 'acceptingness', - 'acceptingnesses', - 'accessaries', - 'accessibilities', - 'accessibility', - 'accessible', - 'accessibleness', - 'accessiblenesses', - 'accessibly', - 'accessional', - 'accessioned', - 'accessioning', - 'accessions', - 'accessorial', - 'accessories', - 'accessorise', - 'accessorised', - 'accessorises', - 'accessorising', - 'accessorize', - 'accessorized', - 'accessorizes', - 'accessorizing', - 'acciaccatura', - 'acciaccaturas', - 'accidences', - 'accidental', - 'accidentally', - 'accidentalness', - 'accidentalnesses', - 'accidentals', - 'accidently', - 'accipiters', - 'accipitrine', - 'accipitrines', - 'acclaimers', - 'acclaiming', - 'acclamation', - 'acclamations', - 'acclimated', - 'acclimates', - 'acclimating', - 'acclimation', - 'acclimations', - 'acclimatise', - 'acclimatised', - 'acclimatises', - 'acclimatising', - 'acclimatization', - 'acclimatizations', - 'acclimatize', - 'acclimatized', - 'acclimatizer', - 'acclimatizers', - 'acclimatizes', - 'acclimatizing', - 'acclivities', - 'accommodate', - 'accommodated', - 'accommodates', - 'accommodating', - 'accommodatingly', - 'accommodation', - 'accommodational', - 'accommodationist', - 'accommodationists', - 'accommodations', - 'accommodative', - 'accommodativeness', - 'accommodativenesses', - 'accommodator', - 'accommodators', - 'accompanied', - 'accompanies', - 'accompaniment', - 'accompaniments', - 'accompanist', - 'accompanists', - 'accompanying', - 'accomplice', - 'accomplices', - 'accomplish', - 'accomplishable', - 'accomplished', - 'accomplisher', - 'accomplishers', - 'accomplishes', - 'accomplishing', - 'accomplishment', - 'accomplishments', - 'accordance', - 'accordances', - 'accordantly', - 'accordingly', - 'accordionist', - 'accordionists', - 'accordions', - 'accouchement', - 'accouchements', - 'accoucheur', - 'accoucheurs', - 'accountabilities', - 'accountability', - 'accountable', - 'accountableness', - 'accountablenesses', - 'accountably', - 'accountancies', - 'accountancy', - 'accountant', - 'accountants', - 'accountantship', - 'accountantships', - 'accounting', - 'accountings', - 'accoutered', - 'accoutering', - 'accouterment', - 'accouterments', - 'accoutrement', - 'accoutrements', - 'accoutring', - 'accreditable', - 'accreditation', - 'accreditations', - 'accredited', - 'accrediting', - 'accretionary', - 'accretions', - 'accruement', - 'accruements', - 'acculturate', - 'acculturated', - 'acculturates', - 'acculturating', - 'acculturation', - 'acculturational', - 'acculturations', - 'acculturative', - 'accumulate', - 'accumulated', - 'accumulates', - 'accumulating', - 'accumulation', - 'accumulations', - 'accumulative', - 'accumulatively', - 'accumulativeness', - 'accumulativenesses', - 'accumulator', - 'accumulators', - 'accuracies', - 'accurately', - 'accurateness', - 'accuratenesses', - 'accursedly', - 'accursedness', - 'accursednesses', - 'accusation', - 'accusations', - 'accusative', - 'accusatives', - 'accusatory', - 'accusingly', - 'accustomation', - 'accustomations', - 'accustomed', - 'accustomedness', - 'accustomednesses', - 'accustoming', - 'acephalous', - 'acerbating', - 'acerbically', - 'acerbities', - 'acetabular', - 'acetabulum', - 'acetabulums', - 'acetaldehyde', - 'acetaldehydes', - 'acetamides', - 'acetaminophen', - 'acetaminophens', - 'acetanilid', - 'acetanilide', - 'acetanilides', - 'acetanilids', - 'acetazolamide', - 'acetazolamides', - 'acetification', - 'acetifications', - 'acetifying', - 'acetonitrile', - 'acetonitriles', - 'acetophenetidin', - 'acetophenetidins', - 'acetylated', - 'acetylates', - 'acetylating', - 'acetylation', - 'acetylations', - 'acetylative', - 'acetylcholine', - 'acetylcholines', - 'acetylcholinesterase', - 'acetylcholinesterases', - 'acetylenes', - 'acetylenic', - 'acetylsalicylate', - 'acetylsalicylates', - 'achalasias', - 'achievable', - 'achievement', - 'achievements', - 'achinesses', - 'achlorhydria', - 'achlorhydrias', - 'achlorhydric', - 'achondrite', - 'achondrites', - 'achondritic', - 'achondroplasia', - 'achondroplasias', - 'achondroplastic', - 'achromatic', - 'achromatically', - 'achromatism', - 'achromatisms', - 'achromatize', - 'achromatized', - 'achromatizes', - 'achromatizing', - 'acidification', - 'acidifications', - 'acidifiers', - 'acidifying', - 'acidimeter', - 'acidimeters', - 'acidimetric', - 'acidimetries', - 'acidimetry', - 'acidnesses', - 'acidophile', - 'acidophiles', - 'acidophilic', - 'acidophils', - 'acidulated', - 'acidulates', - 'acidulating', - 'acidulation', - 'acidulations', - 'acierating', - 'acknowledge', - 'acknowledged', - 'acknowledgedly', - 'acknowledgement', - 'acknowledgements', - 'acknowledges', - 'acknowledging', - 'acknowledgment', - 'acknowledgments', - 'acoelomate', - 'acoelomates', - 'acoustical', - 'acoustically', - 'acoustician', - 'acousticians', - 'acquaintance', - 'acquaintances', - 'acquaintanceship', - 'acquaintanceships', - 'acquainted', - 'acquainting', - 'acquiesced', - 'acquiescence', - 'acquiescences', - 'acquiescent', - 'acquiescently', - 'acquiesces', - 'acquiescing', - 'acquirable', - 'acquirement', - 'acquirements', - 'acquisition', - 'acquisitional', - 'acquisitions', - 'acquisitive', - 'acquisitively', - 'acquisitiveness', - 'acquisitivenesses', - 'acquisitor', - 'acquisitors', - 'acquittals', - 'acquittance', - 'acquittances', - 'acquitters', - 'acquitting', - 'acridities', - 'acridnesses', - 'acriflavine', - 'acriflavines', - 'acrimonies', - 'acrimonious', - 'acrimoniously', - 'acrimoniousness', - 'acrimoniousnesses', - 'acritarchs', - 'acrobatically', - 'acrobatics', - 'acrocentric', - 'acrocentrics', - 'acromegalic', - 'acromegalics', - 'acromegalies', - 'acromegaly', - 'acronymically', - 'acropetally', - 'acrophobes', - 'acrophobia', - 'acrophobias', - 'acropolises', - 'acrostical', - 'acrostically', - 'acrylamide', - 'acrylamides', - 'acrylonitrile', - 'acrylonitriles', - 'actabilities', - 'actability', - 'actinically', - 'actinolite', - 'actinolites', - 'actinometer', - 'actinometers', - 'actinometric', - 'actinometries', - 'actinometry', - 'actinomorphic', - 'actinomorphies', - 'actinomorphy', - 'actinomyces', - 'actinomycete', - 'actinomycetes', - 'actinomycetous', - 'actinomycin', - 'actinomycins', - 'actinomycoses', - 'actinomycosis', - 'actinomycotic', - 'actionable', - 'actionably', - 'actionless', - 'activating', - 'activation', - 'activations', - 'activators', - 'activeness', - 'activenesses', - 'activistic', - 'activities', - 'activizing', - 'actomyosin', - 'actomyosins', - 'actualities', - 'actualization', - 'actualizations', - 'actualized', - 'actualizes', - 'actualizing', - 'actuarially', - 'actuations', - 'acupressure', - 'acupressures', - 'acupuncture', - 'acupunctures', - 'acupuncturist', - 'acupuncturists', - 'acutenesses', - 'acyclovirs', - 'acylations', - 'adamancies', - 'adamantine', - 'adaptabilities', - 'adaptability', - 'adaptation', - 'adaptational', - 'adaptationally', - 'adaptations', - 'adaptedness', - 'adaptednesses', - 'adaptively', - 'adaptiveness', - 'adaptivenesses', - 'adaptivities', - 'adaptivity', - 'addictions', - 'additional', - 'additionally', - 'additively', - 'additivities', - 'additivity', - 'addlepated', - 'addressabilities', - 'addressability', - 'addressable', - 'addressees', - 'addressers', - 'addressing', - 'adductions', - 'adenitises', - 'adenocarcinoma', - 'adenocarcinomas', - 'adenocarcinomata', - 'adenocarcinomatous', - 'adenohypophyseal', - 'adenohypophyses', - 'adenohypophysial', - 'adenohypophysis', - 'adenomatous', - 'adenosines', - 'adenoviral', - 'adenovirus', - 'adenoviruses', - 'adeptnesses', - 'adequacies', - 'adequately', - 'adequateness', - 'adequatenesses', - 'adherences', - 'adherently', - 'adhesional', - 'adhesively', - 'adhesiveness', - 'adhesivenesses', - 'adhibiting', - 'adiabatically', - 'adipocytes', - 'adiposities', - 'adjacencies', - 'adjacently', - 'adjectival', - 'adjectivally', - 'adjectively', - 'adjectives', - 'adjourning', - 'adjournment', - 'adjournments', - 'adjudicate', - 'adjudicated', - 'adjudicates', - 'adjudicating', - 'adjudication', - 'adjudications', - 'adjudicative', - 'adjudicator', - 'adjudicators', - 'adjudicatory', - 'adjunction', - 'adjunctions', - 'adjunctive', - 'adjuration', - 'adjurations', - 'adjuratory', - 'adjustabilities', - 'adjustability', - 'adjustable', - 'adjustment', - 'adjustmental', - 'adjustments', - 'adjutancies', - 'admeasured', - 'admeasurement', - 'admeasurements', - 'admeasures', - 'admeasuring', - 'administer', - 'administered', - 'administering', - 'administers', - 'administrable', - 'administrant', - 'administrants', - 'administrate', - 'administrated', - 'administrates', - 'administrating', - 'administration', - 'administrations', - 'administrative', - 'administratively', - 'administrator', - 'administrators', - 'administratrices', - 'administratrix', - 'admirabilities', - 'admirability', - 'admirableness', - 'admirablenesses', - 'admiralties', - 'admiration', - 'admirations', - 'admiringly', - 'admissibilities', - 'admissibility', - 'admissible', - 'admissions', - 'admittance', - 'admittances', - 'admittedly', - 'admixtures', - 'admonished', - 'admonisher', - 'admonishers', - 'admonishes', - 'admonishing', - 'admonishingly', - 'admonishment', - 'admonishments', - 'admonition', - 'admonitions', - 'admonitorily', - 'admonitory', - 'adolescence', - 'adolescences', - 'adolescent', - 'adolescently', - 'adolescents', - 'adoptabilities', - 'adoptability', - 'adoptianism', - 'adoptianisms', - 'adoptionism', - 'adoptionisms', - 'adoptionist', - 'adoptionists', - 'adoptively', - 'adorabilities', - 'adorability', - 'adorableness', - 'adorablenesses', - 'adorations', - 'adornments', - 'adrenalectomies', - 'adrenalectomized', - 'adrenalectomy', - 'adrenaline', - 'adrenalines', - 'adrenergic', - 'adrenergically', - 'adrenochrome', - 'adrenochromes', - 'adrenocortical', - 'adrenocorticosteroid', - 'adrenocorticosteroids', - 'adrenocorticotrophic', - 'adrenocorticotrophin', - 'adrenocorticotrophins', - 'adrenocorticotropic', - 'adrenocorticotropin', - 'adrenocorticotropins', - 'adroitness', - 'adroitnesses', - 'adscititious', - 'adsorbable', - 'adsorbates', - 'adsorbents', - 'adsorption', - 'adsorptions', - 'adsorptive', - 'adulations', - 'adulterant', - 'adulterants', - 'adulterate', - 'adulterated', - 'adulterates', - 'adulterating', - 'adulteration', - 'adulterations', - 'adulterator', - 'adulterators', - 'adulterers', - 'adulteress', - 'adulteresses', - 'adulteries', - 'adulterine', - 'adulterous', - 'adulterously', - 'adulthoods', - 'adultnesses', - 'adumbrated', - 'adumbrates', - 'adumbrating', - 'adumbration', - 'adumbrations', - 'adumbrative', - 'adumbratively', - 'advancement', - 'advancements', - 'advantaged', - 'advantageous', - 'advantageously', - 'advantageousness', - 'advantageousnesses', - 'advantages', - 'advantaging', - 'advections', - 'adventitia', - 'adventitial', - 'adventitias', - 'adventitious', - 'adventitiously', - 'adventives', - 'adventured', - 'adventurer', - 'adventurers', - 'adventures', - 'adventuresome', - 'adventuresomeness', - 'adventuresomenesses', - 'adventuress', - 'adventuresses', - 'adventuring', - 'adventurism', - 'adventurisms', - 'adventurist', - 'adventuristic', - 'adventurists', - 'adventurous', - 'adventurously', - 'adventurousness', - 'adventurousnesses', - 'adverbially', - 'adverbials', - 'adversarial', - 'adversaries', - 'adversariness', - 'adversarinesses', - 'adversative', - 'adversatively', - 'adversatives', - 'adverseness', - 'adversenesses', - 'adversities', - 'advertence', - 'advertences', - 'advertencies', - 'advertency', - 'advertently', - 'advertised', - 'advertisement', - 'advertisements', - 'advertiser', - 'advertisers', - 'advertises', - 'advertising', - 'advertisings', - 'advertized', - 'advertizement', - 'advertizements', - 'advertizes', - 'advertizing', - 'advertorial', - 'advertorials', - 'advisabilities', - 'advisability', - 'advisableness', - 'advisablenesses', - 'advisement', - 'advisements', - 'advisories', - 'advocacies', - 'advocating', - 'advocation', - 'advocations', - 'advocative', - 'advocators', - 'aeciospore', - 'aeciospores', - 'aepyornises', - 'aerenchyma', - 'aerenchymas', - 'aerenchymata', - 'aerialists', - 'aerobatics', - 'aerobically', - 'aerobiological', - 'aerobiologies', - 'aerobiology', - 'aerobioses', - 'aerobiosis', - 'aerobraked', - 'aerobrakes', - 'aerobraking', - 'aerodromes', - 'aerodynamic', - 'aerodynamical', - 'aerodynamically', - 'aerodynamicist', - 'aerodynamicists', - 'aerodynamics', - 'aeroelastic', - 'aeroelasticities', - 'aeroelasticity', - 'aeroembolism', - 'aeroembolisms', - 'aerogramme', - 'aerogrammes', - 'aerologies', - 'aeromagnetic', - 'aeromechanics', - 'aeromedical', - 'aeromedicine', - 'aeromedicines', - 'aerometers', - 'aeronautic', - 'aeronautical', - 'aeronautically', - 'aeronautics', - 'aeronomers', - 'aeronomical', - 'aeronomies', - 'aeronomist', - 'aeronomists', - 'aeroplanes', - 'aerosolization', - 'aerosolizations', - 'aerosolize', - 'aerosolized', - 'aerosolizes', - 'aerosolizing', - 'aerospaces', - 'aerostatics', - 'aerothermodynamic', - 'aerothermodynamics', - 'aesthetical', - 'aesthetically', - 'aesthetician', - 'aestheticians', - 'aestheticism', - 'aestheticisms', - 'aestheticize', - 'aestheticized', - 'aestheticizes', - 'aestheticizing', - 'aesthetics', - 'aestivated', - 'aestivates', - 'aestivating', - 'aestivation', - 'aestivations', - 'aetiologies', - 'affabilities', - 'affability', - 'affectabilities', - 'affectability', - 'affectable', - 'affectation', - 'affectations', - 'affectedly', - 'affectedness', - 'affectednesses', - 'affectingly', - 'affectional', - 'affectionally', - 'affectionate', - 'affectionately', - 'affectioned', - 'affectionless', - 'affections', - 'affectively', - 'affectivities', - 'affectivity', - 'affectless', - 'affectlessness', - 'affectlessnesses', - 'affenpinscher', - 'affenpinschers', - 'afferently', - 'affiancing', - 'afficionado', - 'afficionados', - 'affidavits', - 'affiliated', - 'affiliates', - 'affiliating', - 'affiliation', - 'affiliations', - 'affinities', - 'affirmable', - 'affirmance', - 'affirmances', - 'affirmation', - 'affirmations', - 'affirmative', - 'affirmatively', - 'affirmatives', - 'affixation', - 'affixations', - 'affixments', - 'afflatuses', - 'afflicting', - 'affliction', - 'afflictions', - 'afflictive', - 'afflictively', - 'affluences', - 'affluencies', - 'affluently', - 'affordabilities', - 'affordability', - 'affordable', - 'affordably', - 'afforestation', - 'afforestations', - 'afforested', - 'afforesting', - 'affricates', - 'affricative', - 'affricatives', - 'affrighted', - 'affrighting', - 'affronting', - 'aficionada', - 'aficionadas', - 'aficionado', - 'aficionados', - 'aflatoxins', - 'aforementioned', - 'aforethought', - 'afterbirth', - 'afterbirths', - 'afterburner', - 'afterburners', - 'aftercares', - 'afterclaps', - 'afterdecks', - 'aftereffect', - 'aftereffects', - 'afterglows', - 'afterimage', - 'afterimages', - 'afterlives', - 'aftermarket', - 'aftermarkets', - 'aftermaths', - 'afternoons', - 'afterpiece', - 'afterpieces', - 'aftershave', - 'aftershaves', - 'aftershock', - 'aftershocks', - 'aftertaste', - 'aftertastes', - 'afterthought', - 'afterthoughts', - 'aftertimes', - 'afterwards', - 'afterwords', - 'afterworld', - 'afterworlds', - 'agammaglobulinemia', - 'agammaglobulinemias', - 'agammaglobulinemic', - 'agamospermies', - 'agamospermy', - 'agapanthus', - 'agapanthuses', - 'agednesses', - 'agelessness', - 'agelessnesses', - 'agendaless', - 'aggiornamento', - 'aggiornamentos', - 'agglomerate', - 'agglomerated', - 'agglomerates', - 'agglomerating', - 'agglomeration', - 'agglomerations', - 'agglomerative', - 'agglutinabilities', - 'agglutinability', - 'agglutinable', - 'agglutinate', - 'agglutinated', - 'agglutinates', - 'agglutinating', - 'agglutination', - 'agglutinations', - 'agglutinative', - 'agglutinin', - 'agglutinins', - 'agglutinogen', - 'agglutinogenic', - 'agglutinogens', - 'aggradation', - 'aggradations', - 'aggrandise', - 'aggrandised', - 'aggrandises', - 'aggrandising', - 'aggrandize', - 'aggrandized', - 'aggrandizement', - 'aggrandizements', - 'aggrandizer', - 'aggrandizers', - 'aggrandizes', - 'aggrandizing', - 'aggravated', - 'aggravates', - 'aggravating', - 'aggravation', - 'aggravations', - 'aggregated', - 'aggregately', - 'aggregateness', - 'aggregatenesses', - 'aggregates', - 'aggregating', - 'aggregation', - 'aggregational', - 'aggregations', - 'aggregative', - 'aggregatively', - 'aggressing', - 'aggression', - 'aggressions', - 'aggressive', - 'aggressively', - 'aggressiveness', - 'aggressivenesses', - 'aggressivities', - 'aggressivity', - 'aggressors', - 'aggrievedly', - 'aggrievement', - 'aggrievements', - 'aggrieving', - 'agitatedly', - 'agitational', - 'agitations', - 'agnosticism', - 'agnosticisms', - 'agonistically', - 'agonizingly', - 'agoraphobe', - 'agoraphobes', - 'agoraphobia', - 'agoraphobias', - 'agoraphobic', - 'agoraphobics', - 'agranulocyte', - 'agranulocytes', - 'agranulocytoses', - 'agranulocytosis', - 'agrarianism', - 'agrarianisms', - 'agreeabilities', - 'agreeability', - 'agreeableness', - 'agreeablenesses', - 'agreements', - 'agribusiness', - 'agribusinesses', - 'agribusinessman', - 'agribusinessmen', - 'agrichemical', - 'agrichemicals', - 'agricultural', - 'agriculturalist', - 'agriculturalists', - 'agriculturally', - 'agriculture', - 'agricultures', - 'agriculturist', - 'agriculturists', - 'agrimonies', - 'agrochemical', - 'agrochemicals', - 'agroforester', - 'agroforesters', - 'agroforestries', - 'agroforestry', - 'agrologies', - 'agronomically', - 'agronomies', - 'agronomist', - 'agronomists', - 'ahistorical', - 'aiguillette', - 'aiguillettes', - 'ailanthuses', - 'ailurophile', - 'ailurophiles', - 'ailurophobe', - 'ailurophobes', - 'ailurophobia', - 'ailurophobias', - 'aimlessness', - 'aimlessnesses', - 'airbrushed', - 'airbrushes', - 'airbrushing', - 'aircoaches', - 'airdropped', - 'airdropping', - 'airfreight', - 'airfreighted', - 'airfreighting', - 'airfreights', - 'airinesses', - 'airlessness', - 'airlessnesses', - 'airlifting', - 'airmailing', - 'airmanship', - 'airmanships', - 'airproofed', - 'airproofing', - 'airsickness', - 'airsicknesses', - 'airstreams', - 'airtightness', - 'airtightnesses', - 'airworthier', - 'airworthiest', - 'airworthiness', - 'airworthinesses', - 'aitchbones', - 'alabasters', - 'alabastrine', - 'alacrities', - 'alacritous', - 'alarmingly', - 'albatrosses', - 'albinistic', - 'albuminous', - 'albuminuria', - 'albuminurias', - 'albuminuric', - 'alchemical', - 'alchemically', - 'alchemistic', - 'alchemistical', - 'alchemists', - 'alchemized', - 'alchemizes', - 'alchemizing', - 'alcoholically', - 'alcoholics', - 'alcoholism', - 'alcoholisms', - 'alcyonarian', - 'alcyonarians', - 'alderflies', - 'aldermanic', - 'alderwoman', - 'alderwomen', - 'aldolization', - 'aldolizations', - 'aldosterone', - 'aldosterones', - 'aldosteronism', - 'aldosteronisms', - 'alertnesses', - 'alexanders', - 'alexandrine', - 'alexandrines', - 'alexandrite', - 'alexandrites', - 'alfilarias', - 'algaecides', - 'algarrobas', - 'algebraically', - 'algebraist', - 'algebraists', - 'algidities', - 'algolagnia', - 'algolagniac', - 'algolagniacs', - 'algolagnias', - 'algological', - 'algologies', - 'algologist', - 'algologists', - 'algorithmic', - 'algorithmically', - 'algorithms', - 'alienabilities', - 'alienability', - 'alienating', - 'alienation', - 'alienations', - 'alienators', - 'aliennesses', - 'alightment', - 'alightments', - 'alignments', - 'alikenesses', - 'alimentary', - 'alimentation', - 'alimentations', - 'alimenting', - 'alinements', - 'aliteracies', - 'aliterates', - 'alivenesses', - 'alkahestic', - 'alkalified', - 'alkalifies', - 'alkalifying', - 'alkalimeter', - 'alkalimeters', - 'alkalimetries', - 'alkalimetry', - 'alkalinities', - 'alkalinity', - 'alkalinization', - 'alkalinizations', - 'alkalinize', - 'alkalinized', - 'alkalinizes', - 'alkalinizing', - 'alkalising', - 'alkalizing', - 'alkaloidal', - 'alkylating', - 'alkylation', - 'alkylations', - 'allantoides', - 'allantoins', - 'allargando', - 'allegation', - 'allegations', - 'allegiance', - 'allegiances', - 'allegorical', - 'allegorically', - 'allegoricalness', - 'allegoricalnesses', - 'allegories', - 'allegorise', - 'allegorised', - 'allegorises', - 'allegorising', - 'allegorist', - 'allegorists', - 'allegorization', - 'allegorizations', - 'allegorize', - 'allegorized', - 'allegorizer', - 'allegorizers', - 'allegorizes', - 'allegorizing', - 'allegretto', - 'allegrettos', - 'allelomorph', - 'allelomorphic', - 'allelomorphism', - 'allelomorphisms', - 'allelomorphs', - 'allelopathic', - 'allelopathies', - 'allelopathy', - 'allemandes', - 'allergenic', - 'allergenicities', - 'allergenicity', - 'allergists', - 'allethrins', - 'alleviated', - 'alleviates', - 'alleviating', - 'alleviation', - 'alleviations', - 'alleviator', - 'alleviators', - 'alliaceous', - 'alligators', - 'alliterate', - 'alliterated', - 'alliterates', - 'alliterating', - 'alliteration', - 'alliterations', - 'alliterative', - 'alliteratively', - 'alloantibodies', - 'alloantibody', - 'alloantigen', - 'alloantigens', - 'allocatable', - 'allocating', - 'allocation', - 'allocations', - 'allocators', - 'allocution', - 'allocutions', - 'allogamies', - 'allogamous', - 'allogeneic', - 'allografted', - 'allografting', - 'allografts', - 'allographic', - 'allographs', - 'allometric', - 'allometries', - 'allomorphic', - 'allomorphism', - 'allomorphisms', - 'allomorphs', - 'allopatric', - 'allopatrically', - 'allopatries', - 'allophanes', - 'allophones', - 'allophonic', - 'allopolyploid', - 'allopolyploidies', - 'allopolyploids', - 'allopolyploidy', - 'allopurinol', - 'allopurinols', - 'allosaurus', - 'allosauruses', - 'allosteric', - 'allosterically', - 'allosteries', - 'allotetraploid', - 'allotetraploidies', - 'allotetraploids', - 'allotetraploidy', - 'allotments', - 'allotropes', - 'allotropic', - 'allotropies', - 'allotypically', - 'allotypies', - 'allowanced', - 'allowances', - 'allowancing', - 'allurement', - 'allurements', - 'alluringly', - 'allusively', - 'allusiveness', - 'allusivenesses', - 'almandines', - 'almandites', - 'almightiness', - 'almightinesses', - 'almsgivers', - 'almsgiving', - 'almsgivings', - 'almshouses', - 'alogically', - 'alonenesses', - 'alongshore', - 'aloofnesses', - 'alpenglows', - 'alpenhorns', - 'alpenstock', - 'alpenstocks', - 'alphabeted', - 'alphabetic', - 'alphabetical', - 'alphabetically', - 'alphabeting', - 'alphabetization', - 'alphabetizations', - 'alphabetize', - 'alphabetized', - 'alphabetizer', - 'alphabetizers', - 'alphabetizes', - 'alphabetizing', - 'alphameric', - 'alphanumeric', - 'alphanumerical', - 'alphanumerically', - 'alphanumerics', - 'alphosises', - 'altarpiece', - 'altarpieces', - 'altazimuth', - 'altazimuths', - 'alterabilities', - 'alterability', - 'alteration', - 'alterations', - 'altercated', - 'altercates', - 'altercating', - 'altercation', - 'altercations', - 'alternated', - 'alternately', - 'alternates', - 'alternating', - 'alternation', - 'alternations', - 'alternative', - 'alternatively', - 'alternativeness', - 'alternativenesses', - 'alternatives', - 'alternator', - 'alternators', - 'altimeters', - 'altimetries', - 'altiplanos', - 'altitudinal', - 'altitudinous', - 'altocumuli', - 'altocumulus', - 'altogether', - 'altogethers', - 'altostrati', - 'altostratus', - 'altruistic', - 'altruistically', - 'aluminates', - 'aluminiums', - 'aluminized', - 'aluminizes', - 'aluminizing', - 'aluminosilicate', - 'aluminosilicates', - 'alveolarly', - 'amalgamate', - 'amalgamated', - 'amalgamates', - 'amalgamating', - 'amalgamation', - 'amalgamations', - 'amalgamator', - 'amalgamators', - 'amantadine', - 'amantadines', - 'amanuenses', - 'amanuensis', - 'amaranthine', - 'amaryllises', - 'amassments', - 'amateurish', - 'amateurishly', - 'amateurishness', - 'amateurishnesses', - 'amateurism', - 'amateurisms', - 'amativeness', - 'amativenesses', - 'amazements', - 'amazonites', - 'amazonstone', - 'amazonstones', - 'ambassador', - 'ambassadorial', - 'ambassadors', - 'ambassadorship', - 'ambassadorships', - 'ambassadress', - 'ambassadresses', - 'ambergrises', - 'amberjacks', - 'ambidexterities', - 'ambidexterity', - 'ambidextrous', - 'ambidextrously', - 'ambiguities', - 'ambiguously', - 'ambiguousness', - 'ambiguousnesses', - 'ambisexual', - 'ambisexualities', - 'ambisexuality', - 'ambisexuals', - 'ambitioned', - 'ambitioning', - 'ambitionless', - 'ambitiously', - 'ambitiousness', - 'ambitiousnesses', - 'ambivalence', - 'ambivalences', - 'ambivalent', - 'ambivalently', - 'ambiversion', - 'ambiversions', - 'amblygonite', - 'amblygonites', - 'amblyopias', - 'ambrosially', - 'ambrotypes', - 'ambulacral', - 'ambulacrum', - 'ambulances', - 'ambulating', - 'ambulation', - 'ambulations', - 'ambulatories', - 'ambulatorily', - 'ambulatory', - 'ambuscaded', - 'ambuscader', - 'ambuscaders', - 'ambuscades', - 'ambuscading', - 'ambushment', - 'ambushments', - 'amebocytes', - 'ameliorate', - 'ameliorated', - 'ameliorates', - 'ameliorating', - 'amelioration', - 'ameliorations', - 'ameliorative', - 'ameliorator', - 'ameliorators', - 'amelioratory', - 'ameloblast', - 'ameloblasts', - 'amenabilities', - 'amenability', - 'amendatory', - 'amendments', - 'amenorrhea', - 'amenorrheas', - 'amenorrheic', - 'amentiferous', - 'amercement', - 'amercements', - 'amerciable', - 'americiums', - 'amethystine', - 'ametropias', - 'amiabilities', - 'amiability', - 'amiableness', - 'amiablenesses', - 'amiantuses', - 'amicabilities', - 'amicability', - 'amicableness', - 'amicablenesses', - 'aminoaciduria', - 'aminoacidurias', - 'aminopeptidase', - 'aminopeptidases', - 'aminophylline', - 'aminophyllines', - 'aminopterin', - 'aminopterins', - 'aminopyrine', - 'aminopyrines', - 'aminotransferase', - 'aminotransferases', - 'amitotically', - 'amitriptyline', - 'amitriptylines', - 'ammoniacal', - 'ammoniated', - 'ammoniates', - 'ammoniating', - 'ammoniation', - 'ammoniations', - 'ammonification', - 'ammonifications', - 'ammonified', - 'ammonifies', - 'ammonifying', - 'ammunition', - 'ammunitions', - 'amnestying', - 'amniocenteses', - 'amniocentesis', - 'amobarbital', - 'amobarbitals', - 'amoebiases', - 'amoebiasis', - 'amoebocyte', - 'amoebocytes', - 'amontillado', - 'amontillados', - 'amoralisms', - 'amoralities', - 'amorousness', - 'amorousnesses', - 'amorphously', - 'amorphousness', - 'amorphousnesses', - 'amortising', - 'amortizable', - 'amortization', - 'amortizations', - 'amortizing', - 'amoxicillin', - 'amoxicillins', - 'amoxycillin', - 'amoxycillins', - 'amperometric', - 'ampersands', - 'amphetamine', - 'amphetamines', - 'amphibians', - 'amphibious', - 'amphibiously', - 'amphibiousness', - 'amphibiousnesses', - 'amphiboles', - 'amphibolies', - 'amphibolite', - 'amphibolites', - 'amphibologies', - 'amphibology', - 'amphibrach', - 'amphibrachic', - 'amphibrachs', - 'amphictyonic', - 'amphictyonies', - 'amphictyony', - 'amphidiploid', - 'amphidiploidies', - 'amphidiploids', - 'amphidiploidy', - 'amphimacer', - 'amphimacers', - 'amphimixes', - 'amphimixis', - 'amphioxuses', - 'amphipathic', - 'amphiphile', - 'amphiphiles', - 'amphiphilic', - 'amphiploid', - 'amphiploidies', - 'amphiploids', - 'amphiploidy', - 'amphiprostyle', - 'amphiprostyles', - 'amphisbaena', - 'amphisbaenas', - 'amphisbaenic', - 'amphitheater', - 'amphitheaters', - 'amphitheatric', - 'amphitheatrical', - 'amphitheatrically', - 'amphoteric', - 'ampicillin', - 'ampicillins', - 'amplenesses', - 'amplexuses', - 'amplidynes', - 'amplification', - 'amplifications', - 'amplifiers', - 'amplifying', - 'amplitudes', - 'amputating', - 'amputation', - 'amputations', - 'amusements', - 'amusingness', - 'amusingnesses', - 'amygdalins', - 'amygdaloid', - 'amygdaloidal', - 'amygdaloids', - 'amyloidoses', - 'amyloidosis', - 'amyloidosises', - 'amylolytic', - 'amylopectin', - 'amylopectins', - 'amyloplast', - 'amyloplasts', - 'amylopsins', - 'amyotonias', - 'anabaptism', - 'anabaptisms', - 'anablepses', - 'anabolisms', - 'anachronic', - 'anachronism', - 'anachronisms', - 'anachronistic', - 'anachronistically', - 'anachronous', - 'anachronously', - 'anacolutha', - 'anacoluthic', - 'anacoluthically', - 'anacoluthon', - 'anacoluthons', - 'anacreontic', - 'anacreontics', - 'anadiploses', - 'anadiplosis', - 'anadromous', - 'anaerobically', - 'anaerobioses', - 'anaerobiosis', - 'anaesthesia', - 'anaesthesias', - 'anaesthetic', - 'anaesthetics', - 'anageneses', - 'anagenesis', - 'anaglyphic', - 'anagnorises', - 'anagnorisis', - 'anagogical', - 'anagogically', - 'anagrammatic', - 'anagrammatical', - 'anagrammatically', - 'anagrammatization', - 'anagrammatizations', - 'anagrammatize', - 'anagrammatized', - 'anagrammatizes', - 'anagrammatizing', - 'anagrammed', - 'anagramming', - 'analemmata', - 'analemmatic', - 'analeptics', - 'analgesias', - 'analgesics', - 'analgetics', - 'analogical', - 'analogically', - 'analogists', - 'analogized', - 'analogizes', - 'analogizing', - 'analogously', - 'analogousness', - 'analogousnesses', - 'analphabet', - 'analphabetic', - 'analphabetics', - 'analphabetism', - 'analphabetisms', - 'analphabets', - 'analysands', - 'analytical', - 'analytically', - 'analyticities', - 'analyticity', - 'analyzabilities', - 'analyzability', - 'analyzable', - 'analyzation', - 'analyzations', - 'anamnestic', - 'anamorphic', - 'anapestics', - 'anaphorically', - 'anaphrodisiac', - 'anaphrodisiacs', - 'anaphylactic', - 'anaphylactically', - 'anaphylactoid', - 'anaphylaxes', - 'anaphylaxis', - 'anaplasias', - 'anaplasmoses', - 'anaplasmosis', - 'anaplastic', - 'anarchical', - 'anarchically', - 'anarchisms', - 'anarchistic', - 'anarchists', - 'anasarcous', - 'anastigmat', - 'anastigmatic', - 'anastigmats', - 'anastomose', - 'anastomosed', - 'anastomoses', - 'anastomosing', - 'anastomosis', - 'anastomotic', - 'anastrophe', - 'anastrophes', - 'anathemata', - 'anathematize', - 'anathematized', - 'anathematizes', - 'anathematizing', - 'anatomical', - 'anatomically', - 'anatomised', - 'anatomises', - 'anatomising', - 'anatomists', - 'anatomized', - 'anatomizes', - 'anatomizing', - 'anatropous', - 'ancestored', - 'ancestoring', - 'ancestrally', - 'ancestress', - 'ancestresses', - 'ancestries', - 'anchorages', - 'anchoresses', - 'anchorites', - 'anchoritic', - 'anchoritically', - 'anchorless', - 'anchorpeople', - 'anchorperson', - 'anchorpersons', - 'anchorwoman', - 'anchorwomen', - 'anchovetas', - 'anchovetta', - 'anchovettas', - 'ancientest', - 'ancientness', - 'ancientnesses', - 'ancientries', - 'ancillaries', - 'ancylostomiases', - 'ancylostomiasis', - 'andalusite', - 'andalusites', - 'andantinos', - 'andouilles', - 'andouillette', - 'andouillettes', - 'andradites', - 'androcentric', - 'androecium', - 'androgeneses', - 'androgenesis', - 'androgenetic', - 'androgenic', - 'androgynes', - 'androgynies', - 'androgynous', - 'andromedas', - 'androsterone', - 'androsterones', - 'anecdotage', - 'anecdotages', - 'anecdotalism', - 'anecdotalisms', - 'anecdotalist', - 'anecdotalists', - 'anecdotally', - 'anecdotical', - 'anecdotically', - 'anecdotist', - 'anecdotists', - 'anelasticities', - 'anelasticity', - 'anemically', - 'anemograph', - 'anemographs', - 'anemometer', - 'anemometers', - 'anemometries', - 'anemometry', - 'anemophilous', - 'anencephalic', - 'anencephalies', - 'anencephaly', - 'anesthesia', - 'anesthesias', - 'anesthesiologies', - 'anesthesiologist', - 'anesthesiologists', - 'anesthesiology', - 'anesthetic', - 'anesthetically', - 'anesthetics', - 'anesthetist', - 'anesthetists', - 'anesthetize', - 'anesthetized', - 'anesthetizes', - 'anesthetizing', - 'anestruses', - 'aneuploidies', - 'aneuploids', - 'aneuploidy', - 'aneurysmal', - 'anfractuosities', - 'anfractuosity', - 'anfractuous', - 'angelfishes', - 'angelically', - 'angelologies', - 'angelologist', - 'angelologists', - 'angelology', - 'angiocardiographic', - 'angiocardiographies', - 'angiocardiography', - 'angiogeneses', - 'angiogenesis', - 'angiogenic', - 'angiograms', - 'angiographic', - 'angiographies', - 'angiography', - 'angiomatous', - 'angioplasties', - 'angioplasty', - 'angiosperm', - 'angiospermous', - 'angiosperms', - 'angiotensin', - 'angiotensins', - 'anglerfish', - 'anglerfishes', - 'anglesites', - 'angleworms', - 'anglicised', - 'anglicises', - 'anglicising', - 'anglicisms', - 'anglicization', - 'anglicizations', - 'anglicized', - 'anglicizes', - 'anglicizing', - 'anglophone', - 'angrinesses', - 'anguishing', - 'angularities', - 'angularity', - 'angulating', - 'angulation', - 'angulations', - 'anhedonias', - 'anhydrides', - 'anhydrites', - 'anilinctus', - 'anilinctuses', - 'anilinguses', - 'animadversion', - 'animadversions', - 'animadvert', - 'animadverted', - 'animadverting', - 'animadverts', - 'animalcula', - 'animalcule', - 'animalcules', - 'animalculum', - 'animaliers', - 'animalisms', - 'animalistic', - 'animalities', - 'animalization', - 'animalizations', - 'animalized', - 'animalizes', - 'animalizing', - 'animallike', - 'animatedly', - 'animateness', - 'animatenesses', - 'animations', - 'animosities', - 'aniseikonia', - 'aniseikonias', - 'aniseikonic', - 'anisogamies', - 'anisogamous', - 'anisometropia', - 'anisometropias', - 'anisometropic', - 'anisotropic', - 'anisotropically', - 'anisotropies', - 'anisotropism', - 'anisotropisms', - 'anisotropy', - 'anklebones', - 'ankylosaur', - 'ankylosaurs', - 'ankylosaurus', - 'ankylosauruses', - 'ankylosing', - 'ankylostomiases', - 'ankylostomiasis', - 'annalistic', - 'annelidans', - 'annexation', - 'annexational', - 'annexationist', - 'annexationists', - 'annexations', - 'annihilate', - 'annihilated', - 'annihilates', - 'annihilating', - 'annihilation', - 'annihilations', - 'annihilator', - 'annihilators', - 'annihilatory', - 'anniversaries', - 'anniversary', - 'annotating', - 'annotation', - 'annotations', - 'annotative', - 'annotators', - 'announcement', - 'announcements', - 'announcers', - 'announcing', - 'annoyances', - 'annoyingly', - 'annualized', - 'annualizes', - 'annualizing', - 'annuitants', - 'annulation', - 'annulations', - 'annulments', - 'annunciate', - 'annunciated', - 'annunciates', - 'annunciating', - 'annunciation', - 'annunciations', - 'annunciator', - 'annunciators', - 'annunciatory', - 'anodically', - 'anodization', - 'anodizations', - 'anointment', - 'anointments', - 'anomalously', - 'anomalousness', - 'anomalousnesses', - 'anonymities', - 'anonymously', - 'anonymousness', - 'anonymousnesses', - 'anopheline', - 'anophelines', - 'anorectics', - 'anorexigenic', - 'anorthites', - 'anorthitic', - 'anorthosite', - 'anorthosites', - 'anorthositic', - 'anovulatory', - 'answerable', - 'antagonism', - 'antagonisms', - 'antagonist', - 'antagonistic', - 'antagonistically', - 'antagonists', - 'antagonize', - 'antagonized', - 'antagonizes', - 'antagonizing', - 'antebellum', - 'antecedence', - 'antecedences', - 'antecedent', - 'antecedently', - 'antecedents', - 'anteceding', - 'antecessor', - 'antecessors', - 'antechamber', - 'antechambers', - 'antechapel', - 'antechapels', - 'antechoirs', - 'antedating', - 'antediluvian', - 'antediluvians', - 'antemortem', - 'antenatally', - 'antennular', - 'antennules', - 'antenuptial', - 'antependia', - 'antependium', - 'antependiums', - 'antepenult', - 'antepenultima', - 'antepenultimas', - 'antepenultimate', - 'antepenultimates', - 'antepenults', - 'anteriorly', - 'anteverted', - 'anteverting', - 'anthelices', - 'anthelions', - 'anthelixes', - 'anthelmintic', - 'anthelmintics', - 'antheridia', - 'antheridial', - 'antheridium', - 'anthocyanin', - 'anthocyanins', - 'anthocyans', - 'anthological', - 'anthologies', - 'anthologist', - 'anthologists', - 'anthologize', - 'anthologized', - 'anthologizer', - 'anthologizers', - 'anthologizes', - 'anthologizing', - 'anthophilous', - 'anthophyllite', - 'anthophyllites', - 'anthozoans', - 'anthracene', - 'anthracenes', - 'anthracite', - 'anthracites', - 'anthracitic', - 'anthracnose', - 'anthracnoses', - 'anthranilate', - 'anthranilates', - 'anthraquinone', - 'anthraquinones', - 'anthropical', - 'anthropocentric', - 'anthropocentrically', - 'anthropocentricities', - 'anthropocentricity', - 'anthropocentrism', - 'anthropocentrisms', - 'anthropogenic', - 'anthropoid', - 'anthropoids', - 'anthropological', - 'anthropologically', - 'anthropologies', - 'anthropologist', - 'anthropologists', - 'anthropology', - 'anthropometric', - 'anthropometries', - 'anthropometry', - 'anthropomorph', - 'anthropomorphic', - 'anthropomorphically', - 'anthropomorphism', - 'anthropomorphisms', - 'anthropomorphist', - 'anthropomorphists', - 'anthropomorphization', - 'anthropomorphizations', - 'anthropomorphize', - 'anthropomorphized', - 'anthropomorphizes', - 'anthropomorphizing', - 'anthropomorphs', - 'anthropopathism', - 'anthropopathisms', - 'anthropophagi', - 'anthropophagies', - 'anthropophagous', - 'anthropophagus', - 'anthropophagy', - 'anthroposophies', - 'anthroposophy', - 'anthuriums', - 'antiabortion', - 'antiabortionist', - 'antiabortionists', - 'antiacademic', - 'antiacademics', - 'antiadministration', - 'antiaggression', - 'antiaircraft', - 'antiaircrafts', - 'antialcohol', - 'antialcoholism', - 'antialcoholisms', - 'antiallergenic', - 'antiallergenics', - 'antianemia', - 'antianxiety', - 'antiapartheid', - 'antiapartheids', - 'antiaphrodisiac', - 'antiaphrodisiacs', - 'antiaristocratic', - 'antiarrhythmic', - 'antiarrhythmics', - 'antiarthritic', - 'antiarthritics', - 'antiarthritis', - 'antiassimilation', - 'antiassimilations', - 'antiasthma', - 'antiauthoritarian', - 'antiauthoritarianism', - 'antiauthoritarianisms', - 'antiauthority', - 'antiauxins', - 'antibacklash', - 'antibacterial', - 'antibacterials', - 'antibaryon', - 'antibaryons', - 'antibillboard', - 'antibioses', - 'antibiosis', - 'antibiotic', - 'antibiotically', - 'antibiotics', - 'antiblackism', - 'antiblackisms', - 'antibodies', - 'antibourgeois', - 'antiboycott', - 'antiboycotts', - 'antibureaucratic', - 'antiburglar', - 'antiburglary', - 'antibusiness', - 'antibusing', - 'anticaking', - 'anticancer', - 'anticapitalism', - 'anticapitalisms', - 'anticapitalist', - 'anticapitalists', - 'anticarcinogen', - 'anticarcinogenic', - 'anticarcinogens', - 'anticaries', - 'anticatalyst', - 'anticatalysts', - 'anticathode', - 'anticathodes', - 'anticellulite', - 'anticensorship', - 'anticholesterol', - 'anticholinergic', - 'anticholinergics', - 'anticholinesterase', - 'anticholinesterases', - 'antichurch', - 'anticigarette', - 'anticipant', - 'anticipants', - 'anticipatable', - 'anticipate', - 'anticipated', - 'anticipates', - 'anticipating', - 'anticipation', - 'anticipations', - 'anticipator', - 'anticipators', - 'anticipatory', - 'anticlassical', - 'anticlerical', - 'anticlericalism', - 'anticlericalisms', - 'anticlericalist', - 'anticlericalists', - 'anticlericals', - 'anticlimactic', - 'anticlimactical', - 'anticlimactically', - 'anticlimax', - 'anticlimaxes', - 'anticlinal', - 'anticlines', - 'anticlockwise', - 'anticlotting', - 'anticoagulant', - 'anticoagulants', - 'anticodons', - 'anticollision', - 'anticolonial', - 'anticolonialism', - 'anticolonialisms', - 'anticolonialist', - 'anticolonialists', - 'anticolonials', - 'anticommercial', - 'anticommercialism', - 'anticommercialisms', - 'anticommunism', - 'anticommunisms', - 'anticommunist', - 'anticommunists', - 'anticompetitive', - 'anticonglomerate', - 'anticonservation', - 'anticonservationist', - 'anticonservationists', - 'anticonservations', - 'anticonsumer', - 'anticonsumers', - 'anticonventional', - 'anticonvulsant', - 'anticonvulsants', - 'anticonvulsive', - 'anticonvulsives', - 'anticorporate', - 'anticorrosion', - 'anticorrosive', - 'anticorrosives', - 'anticorruption', - 'anticorruptions', - 'anticounterfeiting', - 'anticreative', - 'anticruelty', - 'anticultural', - 'anticyclone', - 'anticyclones', - 'anticyclonic', - 'antidandruff', - 'antidefamation', - 'antidemocratic', - 'antidepressant', - 'antidepressants', - 'antidepression', - 'antidepressions', - 'antiderivative', - 'antiderivatives', - 'antidesegregation', - 'antidesertification', - 'antidesiccant', - 'antidesiccants', - 'antidevelopment', - 'antidiabetic', - 'antidiarrheal', - 'antidilution', - 'antidiscrimination', - 'antidogmatic', - 'antidotally', - 'antidoting', - 'antidromic', - 'antidromically', - 'antidumping', - 'antieconomic', - 'antieducational', - 'antiegalitarian', - 'antielectron', - 'antielectrons', - 'antielites', - 'antielitism', - 'antielitisms', - 'antielitist', - 'antielitists', - 'antiemetic', - 'antiemetics', - 'antientropic', - 'antiepilepsy', - 'antiepileptic', - 'antiepileptics', - 'antierotic', - 'antiestablishment', - 'antiestrogen', - 'antiestrogens', - 'antievolution', - 'antievolutionary', - 'antievolutionism', - 'antievolutionisms', - 'antievolutionist', - 'antievolutionists', - 'antifamily', - 'antifascism', - 'antifascisms', - 'antifascist', - 'antifascists', - 'antifashion', - 'antifashionable', - 'antifashions', - 'antifatigue', - 'antifederalist', - 'antifederalists', - 'antifemale', - 'antifeminine', - 'antifeminism', - 'antifeminisms', - 'antifeminist', - 'antifeminists', - 'antiferromagnet', - 'antiferromagnetic', - 'antiferromagnetically', - 'antiferromagnetism', - 'antiferromagnetisms', - 'antiferromagnets', - 'antifertility', - 'antifilibuster', - 'antifilibusters', - 'antifluoridationist', - 'antifluoridationists', - 'antifoaming', - 'antifogging', - 'antiforeclosure', - 'antiforeign', - 'antiforeigner', - 'antiformalist', - 'antiformalists', - 'antifouling', - 'antifreeze', - 'antifreezes', - 'antifriction', - 'antifrictions', - 'antifungal', - 'antifungals', - 'antigambling', - 'antigenically', - 'antigenicities', - 'antigenicity', - 'antiglobulin', - 'antiglobulins', - 'antigovernment', - 'antigravities', - 'antigravity', - 'antigrowth', - 'antiguerrilla', - 'antiguerrillas', - 'antiheroes', - 'antiheroic', - 'antiheroine', - 'antiheroines', - 'antiherpes', - 'antihierarchical', - 'antihijack', - 'antihistamine', - 'antihistamines', - 'antihistaminic', - 'antihistaminics', - 'antihistorical', - 'antihomosexual', - 'antihumanism', - 'antihumanisms', - 'antihumanistic', - 'antihumanitarian', - 'antihumanitarians', - 'antihunter', - 'antihunting', - 'antihuntings', - 'antihypertensive', - 'antihypertensives', - 'antihysteric', - 'antihysterics', - 'antijamming', - 'antikickback', - 'antiknocks', - 'antileprosy', - 'antilepton', - 'antileptons', - 'antileukemic', - 'antiliberal', - 'antiliberalism', - 'antiliberalisms', - 'antiliberals', - 'antilibertarian', - 'antilibertarians', - 'antiliterate', - 'antiliterates', - 'antilitter', - 'antilittering', - 'antilogarithm', - 'antilogarithmic', - 'antilogarithms', - 'antilogical', - 'antilogies', - 'antilynching', - 'antimacassar', - 'antimacassars', - 'antimagnetic', - 'antimalaria', - 'antimalarial', - 'antimalarials', - 'antimanagement', - 'antimanagements', - 'antimarijuana', - 'antimarket', - 'antimaterialism', - 'antimaterialisms', - 'antimaterialist', - 'antimaterialists', - 'antimatter', - 'antimatters', - 'antimechanist', - 'antimechanists', - 'antimerger', - 'antimetabolic', - 'antimetabolics', - 'antimetabolite', - 'antimetabolites', - 'antimetaphysical', - 'antimicrobial', - 'antimicrobials', - 'antimilitarism', - 'antimilitarisms', - 'antimilitarist', - 'antimilitarists', - 'antimilitary', - 'antimiscegenation', - 'antimissile', - 'antimissiles', - 'antimitotic', - 'antimitotics', - 'antimodern', - 'antimodernist', - 'antimodernists', - 'antimoderns', - 'antimonarchical', - 'antimonarchist', - 'antimonarchists', - 'antimonial', - 'antimonials', - 'antimonide', - 'antimonides', - 'antimonies', - 'antimonopolist', - 'antimonopolists', - 'antimonopoly', - 'antimosquito', - 'antimusical', - 'antimycins', - 'antinarrative', - 'antinational', - 'antinationalist', - 'antinationalists', - 'antinatural', - 'antinature', - 'antinatures', - 'antinausea', - 'antineoplastic', - 'antinepotism', - 'antinepotisms', - 'antineutrino', - 'antineutrinos', - 'antineutron', - 'antineutrons', - 'antinomian', - 'antinomianism', - 'antinomianisms', - 'antinomians', - 'antinomies', - 'antinovelist', - 'antinovelists', - 'antinovels', - 'antinuclear', - 'antinucleon', - 'antinucleons', - 'antiobesities', - 'antiobesity', - 'antiobscenities', - 'antiobscenity', - 'antiorganization', - 'antiorganizations', - 'antioxidant', - 'antioxidants', - 'antiozonant', - 'antiozonants', - 'antiparallel', - 'antiparasitic', - 'antiparasitics', - 'antiparticle', - 'antiparticles', - 'antipastos', - 'antipathetic', - 'antipathetically', - 'antipathies', - 'antiperiodic', - 'antipersonnel', - 'antiperspirant', - 'antiperspirants', - 'antipesticide', - 'antiphlogistic', - 'antiphonal', - 'antiphonally', - 'antiphonals', - 'antiphonaries', - 'antiphonary', - 'antiphonies', - 'antiphrases', - 'antiphrasis', - 'antipiracies', - 'antipiracy', - 'antiplague', - 'antiplagues', - 'antiplaque', - 'antipleasure', - 'antipleasures', - 'antipoaching', - 'antipodals', - 'antipodean', - 'antipodeans', - 'antipoetic', - 'antipolice', - 'antipolitical', - 'antipolitics', - 'antipollution', - 'antipollutions', - 'antipopular', - 'antipornographic', - 'antipornography', - 'antipoverty', - 'antipredator', - 'antipredators', - 'antiprofiteering', - 'antiprogressive', - 'antiprostitution', - 'antiproton', - 'antiprotons', - 'antipruritic', - 'antipruritics', - 'antipsychotic', - 'antipsychotics', - 'antipyreses', - 'antipyresis', - 'antipyretic', - 'antipyretics', - 'antipyrine', - 'antipyrines', - 'antiquarian', - 'antiquarianism', - 'antiquarianisms', - 'antiquarians', - 'antiquaries', - 'antiquarks', - 'antiquated', - 'antiquates', - 'antiquating', - 'antiquation', - 'antiquations', - 'antiquities', - 'antirabies', - 'antirachitic', - 'antiracism', - 'antiracisms', - 'antiracist', - 'antiracists', - 'antiracketeering', - 'antiradical', - 'antiradicalism', - 'antiradicalisms', - 'antirational', - 'antirationalism', - 'antirationalisms', - 'antirationalist', - 'antirationalists', - 'antirationalities', - 'antirationality', - 'antirealism', - 'antirealisms', - 'antirealist', - 'antirealists', - 'antirecession', - 'antirecessionary', - 'antirecessions', - 'antireductionism', - 'antireductionisms', - 'antireductionist', - 'antireductionists', - 'antireflection', - 'antireflective', - 'antireform', - 'antiregulatory', - 'antirejection', - 'antireligion', - 'antireligious', - 'antirevolutionaries', - 'antirevolutionary', - 'antirheumatic', - 'antirheumatics', - 'antiritualism', - 'antiritualisms', - 'antiromantic', - 'antiromanticism', - 'antiromanticisms', - 'antiromantics', - 'antiroyalist', - 'antiroyalists', - 'antirrhinum', - 'antirrhinums', - 'antisatellite', - 'antischizophrenia', - 'antischizophrenic', - 'antiscience', - 'antisciences', - 'antiscientific', - 'antiscorbutic', - 'antiscorbutics', - 'antisecrecy', - 'antisegregation', - 'antiseizure', - 'antisentimental', - 'antiseparatist', - 'antiseparatists', - 'antisepses', - 'antisepsis', - 'antiseptic', - 'antiseptically', - 'antiseptics', - 'antiserums', - 'antisexist', - 'antisexists', - 'antisexual', - 'antisexualities', - 'antisexuality', - 'antishoplifting', - 'antislaveries', - 'antislavery', - 'antismoker', - 'antismokers', - 'antismoking', - 'antismuggling', - 'antisocial', - 'antisocialist', - 'antisocialists', - 'antisocially', - 'antispasmodic', - 'antispasmodics', - 'antispeculation', - 'antispeculative', - 'antispending', - 'antistatic', - 'antistories', - 'antistress', - 'antistrike', - 'antistrophe', - 'antistrophes', - 'antistrophic', - 'antistrophically', - 'antistudent', - 'antisubmarine', - 'antisubsidy', - 'antisubversion', - 'antisubversions', - 'antisubversive', - 'antisubversives', - 'antisuicide', - 'antisymmetric', - 'antisyphilitic', - 'antisyphilitics', - 'antitakeover', - 'antitarnish', - 'antitechnological', - 'antitechnologies', - 'antitechnology', - 'antiterrorism', - 'antiterrorisms', - 'antiterrorist', - 'antiterrorists', - 'antitheoretical', - 'antitheses', - 'antithesis', - 'antithetic', - 'antithetical', - 'antithetically', - 'antithrombin', - 'antithrombins', - 'antithyroid', - 'antitobacco', - 'antitotalitarian', - 'antitoxins', - 'antitrades', - 'antitraditional', - 'antitruster', - 'antitrusters', - 'antitubercular', - 'antituberculosis', - 'antituberculous', - 'antitumoral', - 'antitussive', - 'antitussives', - 'antityphoid', - 'antiunemployment', - 'antiuniversities', - 'antiuniversity', - 'antivenins', - 'antiviolence', - 'antivitamin', - 'antivitamins', - 'antivivisection', - 'antivivisectionist', - 'antivivisectionists', - 'antiwelfare', - 'antiwhaling', - 'antiwrinkle', - 'antonomasia', - 'antonomasias', - 'antonymies', - 'antonymous', - 'anxiolytic', - 'anxiolytics', - 'anxiousness', - 'anxiousnesses', - 'aoristically', - 'aortographic', - 'aortographies', - 'aortography', - 'apartheids', - 'apartmental', - 'apartments', - 'apartnesses', - 'apathetically', - 'apatosaurus', - 'apatosauruses', - 'aperiodically', - 'aperiodicities', - 'aperiodicity', - 'aphaereses', - 'aphaeresis', - 'aphaeretic', - 'aphetically', - 'aphorising', - 'aphoristic', - 'aphoristically', - 'aphorizing', - 'aphrodisiac', - 'aphrodisiacal', - 'aphrodisiacs', - 'apicultural', - 'apiculture', - 'apicultures', - 'apiculturist', - 'apiculturists', - 'apiologies', - 'apishnesses', - 'apoapsides', - 'apocalypse', - 'apocalypses', - 'apocalyptic', - 'apocalyptical', - 'apocalyptically', - 'apocalypticism', - 'apocalypticisms', - 'apocalyptism', - 'apocalyptisms', - 'apocalyptist', - 'apocalyptists', - 'apocarpies', - 'apochromatic', - 'apocryphal', - 'apocryphally', - 'apocryphalness', - 'apocryphalnesses', - 'apodeictic', - 'apodictically', - 'apoenzymes', - 'apolipoprotein', - 'apolipoproteins', - 'apolitical', - 'apolitically', - 'apologetic', - 'apologetically', - 'apologetics', - 'apologised', - 'apologises', - 'apologising', - 'apologists', - 'apologized', - 'apologizer', - 'apologizers', - 'apologizes', - 'apologizing', - 'apomictically', - 'apomorphine', - 'apomorphines', - 'aponeuroses', - 'aponeurosis', - 'aponeurotic', - 'apophonies', - 'apophthegm', - 'apophthegms', - 'apophyllite', - 'apophyllites', - 'apophyseal', - 'apoplectic', - 'apoplectically', - 'apoplexies', - 'aposematic', - 'aposematically', - 'aposiopeses', - 'aposiopesis', - 'aposiopetic', - 'apospories', - 'aposporous', - 'apostacies', - 'apostasies', - 'apostatise', - 'apostatised', - 'apostatises', - 'apostatising', - 'apostatize', - 'apostatized', - 'apostatizes', - 'apostatizing', - 'apostleship', - 'apostleships', - 'apostolate', - 'apostolates', - 'apostolicities', - 'apostolicity', - 'apostrophe', - 'apostrophes', - 'apostrophic', - 'apostrophise', - 'apostrophised', - 'apostrophises', - 'apostrophising', - 'apostrophize', - 'apostrophized', - 'apostrophizes', - 'apostrophizing', - 'apothecaries', - 'apothecary', - 'apothecial', - 'apothecium', - 'apothegmatic', - 'apotheoses', - 'apotheosis', - 'apotheosize', - 'apotheosized', - 'apotheosizes', - 'apotheosizing', - 'apotropaic', - 'apotropaically', - 'appallingly', - 'apparatchik', - 'apparatchiki', - 'apparatchiks', - 'apparatuses', - 'appareling', - 'apparelled', - 'apparelling', - 'apparently', - 'apparentness', - 'apparentnesses', - 'apparition', - 'apparitional', - 'apparitions', - 'apparitors', - 'appealabilities', - 'appealability', - 'appealable', - 'appealingly', - 'appearance', - 'appearances', - 'appeasable', - 'appeasement', - 'appeasements', - 'appellants', - 'appellation', - 'appellations', - 'appellative', - 'appellatively', - 'appellatives', - 'appendages', - 'appendants', - 'appendectomies', - 'appendectomy', - 'appendicectomies', - 'appendicectomy', - 'appendices', - 'appendicites', - 'appendicitides', - 'appendicitis', - 'appendicitises', - 'appendicular', - 'appendixes', - 'apperceive', - 'apperceived', - 'apperceives', - 'apperceiving', - 'apperception', - 'apperceptions', - 'apperceptive', - 'appertained', - 'appertaining', - 'appertains', - 'appetences', - 'appetencies', - 'appetisers', - 'appetising', - 'appetitive', - 'appetizers', - 'appetizing', - 'appetizingly', - 'applaudable', - 'applaudably', - 'applauders', - 'applauding', - 'applecarts', - 'applejacks', - 'applesauce', - 'applesauces', - 'appliances', - 'applicabilities', - 'applicability', - 'applicable', - 'applicants', - 'application', - 'applications', - 'applicative', - 'applicatively', - 'applicator', - 'applicators', - 'applicatory', - 'appliqueing', - 'appoggiatura', - 'appoggiaturas', - 'appointees', - 'appointing', - 'appointive', - 'appointment', - 'appointments', - 'apportionable', - 'apportioned', - 'apportioning', - 'apportionment', - 'apportionments', - 'apportions', - 'appositely', - 'appositeness', - 'appositenesses', - 'apposition', - 'appositional', - 'appositions', - 'appositive', - 'appositively', - 'appositives', - 'appraisals', - 'appraisees', - 'appraisement', - 'appraisements', - 'appraisers', - 'appraising', - 'appraisingly', - 'appraisive', - 'appreciable', - 'appreciably', - 'appreciate', - 'appreciated', - 'appreciates', - 'appreciating', - 'appreciation', - 'appreciations', - 'appreciative', - 'appreciatively', - 'appreciativeness', - 'appreciativenesses', - 'appreciator', - 'appreciators', - 'appreciatory', - 'apprehended', - 'apprehending', - 'apprehends', - 'apprehensible', - 'apprehensibly', - 'apprehension', - 'apprehensions', - 'apprehensive', - 'apprehensively', - 'apprehensiveness', - 'apprehensivenesses', - 'apprentice', - 'apprenticed', - 'apprentices', - 'apprenticeship', - 'apprenticeships', - 'apprenticing', - 'appressoria', - 'appressorium', - 'approachabilities', - 'approachability', - 'approachable', - 'approached', - 'approaches', - 'approaching', - 'approbated', - 'approbates', - 'approbating', - 'approbation', - 'approbations', - 'approbatory', - 'appropriable', - 'appropriate', - 'appropriated', - 'appropriately', - 'appropriateness', - 'appropriatenesses', - 'appropriates', - 'appropriating', - 'appropriation', - 'appropriations', - 'appropriative', - 'appropriator', - 'appropriators', - 'approvable', - 'approvably', - 'approvingly', - 'approximate', - 'approximated', - 'approximately', - 'approximates', - 'approximating', - 'approximation', - 'approximations', - 'approximative', - 'appurtenance', - 'appurtenances', - 'appurtenant', - 'appurtenants', - 'apriorities', - 'aptitudinal', - 'aptitudinally', - 'aquacultural', - 'aquaculture', - 'aquacultures', - 'aquaculturist', - 'aquaculturists', - 'aquamarine', - 'aquamarines', - 'aquaplaned', - 'aquaplaner', - 'aquaplaners', - 'aquaplanes', - 'aquaplaning', - 'aquarelles', - 'aquarellist', - 'aquarellists', - 'aquatically', - 'aquatinted', - 'aquatinter', - 'aquatinters', - 'aquatinting', - 'aquatintist', - 'aquatintists', - 'aquiculture', - 'aquicultures', - 'aquiferous', - 'aquilegias', - 'aquilinities', - 'aquilinity', - 'arabesques', - 'arabicization', - 'arabicizations', - 'arabicized', - 'arabicizes', - 'arabicizing', - 'arabilities', - 'arabinoses', - 'arabinoside', - 'arabinosides', - 'arachnoids', - 'aragonites', - 'aragonitic', - 'araucarian', - 'araucarias', - 'arbitrable', - 'arbitraged', - 'arbitrager', - 'arbitragers', - 'arbitrages', - 'arbitrageur', - 'arbitrageurs', - 'arbitraging', - 'arbitrament', - 'arbitraments', - 'arbitrarily', - 'arbitrariness', - 'arbitrarinesses', - 'arbitrated', - 'arbitrates', - 'arbitrating', - 'arbitration', - 'arbitrational', - 'arbitrations', - 'arbitrative', - 'arbitrator', - 'arbitrators', - 'arboreally', - 'arborescence', - 'arborescences', - 'arborescent', - 'arboretums', - 'arboricultural', - 'arboriculture', - 'arboricultures', - 'arborization', - 'arborizations', - 'arborizing', - 'arborvitae', - 'arborvitaes', - 'arboviruses', - 'arccosines', - 'archaebacteria', - 'archaebacterium', - 'archaeoastronomies', - 'archaeoastronomy', - 'archaeological', - 'archaeologically', - 'archaeologies', - 'archaeologist', - 'archaeologists', - 'archaeology', - 'archaeopteryx', - 'archaeopteryxes', - 'archaically', - 'archaising', - 'archaistic', - 'archaizing', - 'archangelic', - 'archangels', - 'archbishop', - 'archbishopric', - 'archbishoprics', - 'archbishops', - 'archconservative', - 'archconservatives', - 'archdeacon', - 'archdeaconries', - 'archdeaconry', - 'archdeacons', - 'archdiocesan', - 'archdiocese', - 'archdioceses', - 'archduchess', - 'archduchesses', - 'archduchies', - 'archdukedom', - 'archdukedoms', - 'archegonia', - 'archegonial', - 'archegoniate', - 'archegoniates', - 'archegonium', - 'archenemies', - 'archenteron', - 'archenterons', - 'archeological', - 'archeologically', - 'archeologies', - 'archeologist', - 'archeologists', - 'archeology', - 'archerfish', - 'archerfishes', - 'archesporia', - 'archesporial', - 'archesporium', - 'archetypal', - 'archetypally', - 'archetypes', - 'archetypical', - 'archfiends', - 'archidiaconal', - 'archiepiscopal', - 'archiepiscopally', - 'archiepiscopate', - 'archiepiscopates', - 'archimandrite', - 'archimandrites', - 'archipelagic', - 'archipelago', - 'archipelagoes', - 'archipelagos', - 'architectonic', - 'architectonically', - 'architectonics', - 'architects', - 'architectural', - 'architecturally', - 'architecture', - 'architectures', - 'architrave', - 'architraves', - 'archivists', - 'archivolts', - 'archnesses', - 'archosaurian', - 'archosaurs', - 'archpriest', - 'archpriests', - 'arctangent', - 'arctangents', - 'arctically', - 'arduousness', - 'arduousnesses', - 'arecolines', - 'arenaceous', - 'arenicolous', - 'areocentric', - 'areologies', - 'argentiferous', - 'argentines', - 'argentites', - 'argillaceous', - 'argillites', - 'argumentation', - 'argumentations', - 'argumentative', - 'argumentatively', - 'argumentive', - 'argumentum', - 'arhatships', - 'ariboflavinoses', - 'ariboflavinosis', - 'ariboflavinosises', - 'aridnesses', - 'aristocracies', - 'aristocracy', - 'aristocrat', - 'aristocratic', - 'aristocratically', - 'aristocrats', - 'arithmetic', - 'arithmetical', - 'arithmetically', - 'arithmetician', - 'arithmeticians', - 'arithmetics', - 'armadillos', - 'armamentaria', - 'armamentarium', - 'armaturing', - 'armigerous', - 'armistices', - 'armorially', - 'aromatherapies', - 'aromatherapist', - 'aromatherapists', - 'aromatherapy', - 'aromatically', - 'aromaticities', - 'aromaticity', - 'aromatization', - 'aromatizations', - 'aromatized', - 'aromatizes', - 'aromatizing', - 'arpeggiate', - 'arpeggiated', - 'arpeggiates', - 'arpeggiating', - 'arquebuses', - 'arraigning', - 'arraignment', - 'arraignments', - 'arrangement', - 'arrangements', - 'arrearages', - 'arrestants', - 'arrestingly', - 'arrestment', - 'arrestments', - 'arrhythmia', - 'arrhythmias', - 'arrhythmic', - 'arrivistes', - 'arrogances', - 'arrogantly', - 'arrogating', - 'arrogation', - 'arrogations', - 'arrondissement', - 'arrondissements', - 'arrowheads', - 'arrowroots', - 'arrowwoods', - 'arrowworms', - 'arsenicals', - 'arsenopyrite', - 'arsenopyrites', - 'arsphenamine', - 'arsphenamines', - 'artemisias', - 'arterially', - 'arteriogram', - 'arteriograms', - 'arteriographic', - 'arteriographies', - 'arteriography', - 'arteriolar', - 'arterioles', - 'arterioscleroses', - 'arteriosclerosis', - 'arteriosclerotic', - 'arteriosclerotics', - 'arteriovenous', - 'arteritides', - 'artfulness', - 'artfulnesses', - 'arthralgia', - 'arthralgias', - 'arthralgic', - 'arthritically', - 'arthritics', - 'arthritides', - 'arthrodeses', - 'arthrodesis', - 'arthropathies', - 'arthropathy', - 'arthropodan', - 'arthropods', - 'arthroscope', - 'arthroscopes', - 'arthroscopic', - 'arthroscopies', - 'arthroscopy', - 'arthrospore', - 'arthrospores', - 'artichokes', - 'articulable', - 'articulacies', - 'articulacy', - 'articulate', - 'articulated', - 'articulately', - 'articulateness', - 'articulatenesses', - 'articulates', - 'articulating', - 'articulation', - 'articulations', - 'articulative', - 'articulator', - 'articulators', - 'articulatory', - 'artifactual', - 'artificers', - 'artificial', - 'artificialities', - 'artificiality', - 'artificially', - 'artificialness', - 'artificialnesses', - 'artilleries', - 'artillerist', - 'artillerists', - 'artilleryman', - 'artillerymen', - 'artinesses', - 'artiodactyl', - 'artiodactyls', - 'artisanship', - 'artisanships', - 'artistically', - 'artistries', - 'artlessness', - 'artlessnesses', - 'arytenoids', - 'asafetidas', - 'asafoetida', - 'asafoetidas', - 'asbestoses', - 'asbestosis', - 'asbestuses', - 'ascariases', - 'ascariasis', - 'ascendable', - 'ascendance', - 'ascendances', - 'ascendancies', - 'ascendancy', - 'ascendantly', - 'ascendants', - 'ascendence', - 'ascendences', - 'ascendencies', - 'ascendency', - 'ascendents', - 'ascendible', - 'ascensional', - 'ascensions', - 'ascertainable', - 'ascertained', - 'ascertaining', - 'ascertainment', - 'ascertainments', - 'ascertains', - 'ascetically', - 'asceticism', - 'asceticisms', - 'asclepiads', - 'ascocarpic', - 'ascogonium', - 'ascomycete', - 'ascomycetes', - 'ascomycetous', - 'ascorbates', - 'ascospores', - 'ascosporic', - 'ascribable', - 'ascription', - 'ascriptions', - 'ascriptive', - 'aseptically', - 'asexualities', - 'asexuality', - 'ashinesses', - 'asininities', - 'askewnesses', - 'asparagine', - 'asparagines', - 'aspartames', - 'aspartates', - 'asperating', - 'aspergilla', - 'aspergilli', - 'aspergilloses', - 'aspergillosis', - 'aspergillum', - 'aspergillums', - 'aspergillus', - 'asperities', - 'aspersions', - 'asphalting', - 'asphaltite', - 'asphaltites', - 'asphaltums', - 'aspherical', - 'asphyxiate', - 'asphyxiated', - 'asphyxiates', - 'asphyxiating', - 'asphyxiation', - 'asphyxiations', - 'aspidistra', - 'aspidistras', - 'aspirating', - 'aspiration', - 'aspirational', - 'aspirations', - 'aspirators', - 'assagaiing', - 'assailable', - 'assailants', - 'assassinate', - 'assassinated', - 'assassinates', - 'assassinating', - 'assassination', - 'assassinations', - 'assassinator', - 'assassinators', - 'assaulters', - 'assaulting', - 'assaultive', - 'assaultively', - 'assaultiveness', - 'assaultivenesses', - 'assegaiing', - 'assemblage', - 'assemblages', - 'assemblagist', - 'assemblagists', - 'assemblers', - 'assemblies', - 'assembling', - 'assemblyman', - 'assemblymen', - 'assemblywoman', - 'assemblywomen', - 'assentation', - 'assentations', - 'assertedly', - 'assertions', - 'assertively', - 'assertiveness', - 'assertivenesses', - 'assessable', - 'assessment', - 'assessments', - 'asseverate', - 'asseverated', - 'asseverates', - 'asseverating', - 'asseveration', - 'asseverations', - 'asseverative', - 'assiduities', - 'assiduously', - 'assiduousness', - 'assiduousnesses', - 'assignabilities', - 'assignability', - 'assignable', - 'assignation', - 'assignations', - 'assignment', - 'assignments', - 'assimilabilities', - 'assimilability', - 'assimilable', - 'assimilate', - 'assimilated', - 'assimilates', - 'assimilating', - 'assimilation', - 'assimilationism', - 'assimilationisms', - 'assimilationist', - 'assimilationists', - 'assimilations', - 'assimilative', - 'assimilator', - 'assimilators', - 'assimilatory', - 'assistance', - 'assistances', - 'assistants', - 'assistantship', - 'assistantships', - 'associated', - 'associates', - 'associateship', - 'associateships', - 'associating', - 'association', - 'associational', - 'associationism', - 'associationisms', - 'associationist', - 'associationistic', - 'associationists', - 'associations', - 'associative', - 'associatively', - 'associativities', - 'associativity', - 'assoilment', - 'assoilments', - 'assonances', - 'assonantal', - 'assortative', - 'assortatively', - 'assortment', - 'assortments', - 'assuagement', - 'assuagements', - 'assumabilities', - 'assumability', - 'assumpsits', - 'assumption', - 'assumptions', - 'assumptive', - 'assurances', - 'assuredness', - 'assurednesses', - 'astarboard', - 'asteriated', - 'asterisked', - 'asterisking', - 'asteriskless', - 'asteroidal', - 'asthenosphere', - 'asthenospheres', - 'asthenospheric', - 'asthmatically', - 'asthmatics', - 'astigmatic', - 'astigmatics', - 'astigmatism', - 'astigmatisms', - 'astonished', - 'astonishes', - 'astonishing', - 'astonishingly', - 'astonishment', - 'astonishments', - 'astounding', - 'astoundingly', - 'astrakhans', - 'astricting', - 'astringencies', - 'astringency', - 'astringent', - 'astringently', - 'astringents', - 'astringing', - 'astrobiologies', - 'astrobiologist', - 'astrobiologists', - 'astrobiology', - 'astrocytes', - 'astrocytic', - 'astrocytoma', - 'astrocytomas', - 'astrocytomata', - 'astrodomes', - 'astrolabes', - 'astrologer', - 'astrologers', - 'astrological', - 'astrologically', - 'astrologies', - 'astrometric', - 'astrometries', - 'astrometry', - 'astronautic', - 'astronautical', - 'astronautically', - 'astronautics', - 'astronauts', - 'astronomer', - 'astronomers', - 'astronomic', - 'astronomical', - 'astronomically', - 'astronomies', - 'astrophotograph', - 'astrophotographer', - 'astrophotographers', - 'astrophotographies', - 'astrophotographs', - 'astrophotography', - 'astrophysical', - 'astrophysically', - 'astrophysicist', - 'astrophysicists', - 'astrophysics', - 'astuteness', - 'astutenesses', - 'asymmetric', - 'asymmetrical', - 'asymmetrically', - 'asymmetries', - 'asymptomatic', - 'asymptomatically', - 'asymptotes', - 'asymptotic', - 'asymptotically', - 'asynchronies', - 'asynchronism', - 'asynchronisms', - 'asynchronous', - 'asynchronously', - 'asynchrony', - 'asyndetically', - 'asyndetons', - 'ataractics', - 'atavistically', - 'atelectases', - 'atelectasis', - 'athanasies', - 'atheistical', - 'atheistically', - 'athenaeums', - 'atheoretical', - 'atherogeneses', - 'atherogenesis', - 'atherogenic', - 'atheromata', - 'atheromatous', - 'atheroscleroses', - 'atherosclerosis', - 'atherosclerotic', - 'athletically', - 'athleticism', - 'athleticisms', - 'athrocytes', - 'athwartship', - 'athwartships', - 'atmometers', - 'atmosphere', - 'atmosphered', - 'atmospheres', - 'atmospheric', - 'atmospherically', - 'atmospherics', - 'atomically', - 'atomistically', - 'atomization', - 'atomizations', - 'atonalisms', - 'atonalists', - 'atonalities', - 'atonements', - 'atrabilious', - 'atrabiliousness', - 'atrabiliousnesses', - 'atrioventricular', - 'atrociously', - 'atrociousness', - 'atrociousnesses', - 'atrocities', - 'atrophying', - 'attachable', - 'attachment', - 'attachments', - 'attainabilities', - 'attainability', - 'attainable', - 'attainders', - 'attainment', - 'attainments', - 'attainting', - 'attempered', - 'attempering', - 'attemptable', - 'attempting', - 'attendance', - 'attendances', - 'attendants', - 'attentional', - 'attentions', - 'attentively', - 'attentiveness', - 'attentivenesses', - 'attenuated', - 'attenuates', - 'attenuating', - 'attenuation', - 'attenuations', - 'attenuator', - 'attenuators', - 'attestation', - 'attestations', - 'attitudinal', - 'attitudinally', - 'attitudinise', - 'attitudinised', - 'attitudinises', - 'attitudinising', - 'attitudinize', - 'attitudinized', - 'attitudinizes', - 'attitudinizing', - 'attorneyship', - 'attorneyships', - 'attornment', - 'attornments', - 'attractance', - 'attractances', - 'attractancies', - 'attractancy', - 'attractant', - 'attractants', - 'attracting', - 'attraction', - 'attractions', - 'attractive', - 'attractively', - 'attractiveness', - 'attractivenesses', - 'attractors', - 'attributable', - 'attributed', - 'attributes', - 'attributing', - 'attribution', - 'attributional', - 'attributions', - 'attributive', - 'attributively', - 'attributives', - 'attritional', - 'attritions', - 'attunement', - 'attunements', - 'atypicalities', - 'atypicality', - 'atypically', - 'aubergines', - 'auctioneer', - 'auctioneers', - 'auctioning', - 'audaciously', - 'audaciousness', - 'audaciousnesses', - 'audacities', - 'audibilities', - 'audibility', - 'audiocassette', - 'audiocassettes', - 'audiogenic', - 'audiograms', - 'audiologic', - 'audiological', - 'audiologies', - 'audiologist', - 'audiologists', - 'audiometer', - 'audiometers', - 'audiometric', - 'audiometries', - 'audiometry', - 'audiophile', - 'audiophiles', - 'audiotapes', - 'audiovisual', - 'audiovisuals', - 'auditioned', - 'auditioning', - 'auditories', - 'auditorily', - 'auditorium', - 'auditoriums', - 'augmentation', - 'augmentations', - 'augmentative', - 'augmentatives', - 'augmenters', - 'augmenting', - 'augmentors', - 'augustness', - 'augustnesses', - 'auriculate', - 'auriferous', - 'auscultate', - 'auscultated', - 'auscultates', - 'auscultating', - 'auscultation', - 'auscultations', - 'auscultatory', - 'ausforming', - 'auslanders', - 'auspicious', - 'auspiciously', - 'auspiciousness', - 'auspiciousnesses', - 'austenites', - 'austenitic', - 'austereness', - 'austerenesses', - 'austerities', - 'australopithecine', - 'australopithecines', - 'autarchical', - 'autarchies', - 'autarkical', - 'autecological', - 'autecologies', - 'autecology', - 'auteurists', - 'authentically', - 'authenticate', - 'authenticated', - 'authenticates', - 'authenticating', - 'authentication', - 'authentications', - 'authenticator', - 'authenticators', - 'authenticities', - 'authenticity', - 'authoresses', - 'authorised', - 'authorises', - 'authorising', - 'authoritarian', - 'authoritarianism', - 'authoritarianisms', - 'authoritarians', - 'authoritative', - 'authoritatively', - 'authoritativeness', - 'authoritativenesses', - 'authorities', - 'authorization', - 'authorizations', - 'authorized', - 'authorizer', - 'authorizers', - 'authorizes', - 'authorizing', - 'authorship', - 'authorships', - 'autistically', - 'autoantibodies', - 'autoantibody', - 'autobahnen', - 'autobiographer', - 'autobiographers', - 'autobiographic', - 'autobiographical', - 'autobiographically', - 'autobiographies', - 'autobiography', - 'autobusses', - 'autocatalyses', - 'autocatalysis', - 'autocatalytic', - 'autocatalytically', - 'autocephalies', - 'autocephalous', - 'autocephaly', - 'autochthon', - 'autochthones', - 'autochthonous', - 'autochthonously', - 'autochthons', - 'autoclaved', - 'autoclaves', - 'autoclaving', - 'autocorrelation', - 'autocorrelations', - 'autocracies', - 'autocratic', - 'autocratical', - 'autocratically', - 'autocrosses', - 'autodidact', - 'autodidactic', - 'autodidacts', - 'autoecious', - 'autoeciously', - 'autoecisms', - 'autoerotic', - 'autoeroticism', - 'autoeroticisms', - 'autoerotism', - 'autoerotisms', - 'autogamies', - 'autogamous', - 'autogenies', - 'autogenous', - 'autogenously', - 'autografted', - 'autografting', - 'autografts', - 'autographed', - 'autographic', - 'autographically', - 'autographies', - 'autographing', - 'autographs', - 'autography', - 'autohypnoses', - 'autohypnosis', - 'autohypnotic', - 'autoimmune', - 'autoimmunities', - 'autoimmunity', - 'autoimmunization', - 'autoimmunizations', - 'autoinfection', - 'autoinfections', - 'autointoxication', - 'autointoxications', - 'autoloading', - 'autologous', - 'autolysate', - 'autolysates', - 'autolysing', - 'autolyzate', - 'autolyzates', - 'autolyzing', - 'automakers', - 'automatable', - 'automatically', - 'automaticities', - 'automaticity', - 'automatics', - 'automating', - 'automation', - 'automations', - 'automatism', - 'automatisms', - 'automatist', - 'automatists', - 'automatization', - 'automatizations', - 'automatize', - 'automatized', - 'automatizes', - 'automatizing', - 'automatons', - 'automobile', - 'automobiled', - 'automobiles', - 'automobiling', - 'automobilist', - 'automobilists', - 'automobilities', - 'automobility', - 'automorphism', - 'automorphisms', - 'automotive', - 'autonomically', - 'autonomies', - 'autonomist', - 'autonomists', - 'autonomous', - 'autonomously', - 'autopilots', - 'autopolyploid', - 'autopolyploidies', - 'autopolyploids', - 'autopolyploidy', - 'autopsying', - 'autoradiogram', - 'autoradiograms', - 'autoradiograph', - 'autoradiographic', - 'autoradiographies', - 'autoradiographs', - 'autoradiography', - 'autorotate', - 'autorotated', - 'autorotates', - 'autorotating', - 'autorotation', - 'autorotations', - 'autoroutes', - 'autosexing', - 'autosomally', - 'autostrada', - 'autostradas', - 'autostrade', - 'autosuggest', - 'autosuggested', - 'autosuggesting', - 'autosuggestion', - 'autosuggestions', - 'autosuggests', - 'autotetraploid', - 'autotetraploidies', - 'autotetraploids', - 'autotetraploidy', - 'autotomies', - 'autotomize', - 'autotomized', - 'autotomizes', - 'autotomizing', - 'autotomous', - 'autotransformer', - 'autotransformers', - 'autotransfusion', - 'autotransfusions', - 'autotrophic', - 'autotrophically', - 'autotrophies', - 'autotrophs', - 'autotrophy', - 'autotypies', - 'autoworker', - 'autoworkers', - 'autoxidation', - 'autoxidations', - 'autumnally', - 'auxiliaries', - 'auxotrophic', - 'auxotrophies', - 'auxotrophs', - 'auxotrophy', - 'availabilities', - 'availability', - 'availableness', - 'availablenesses', - 'avalanched', - 'avalanches', - 'avalanching', - 'avaricious', - 'avariciously', - 'avariciousness', - 'avariciousnesses', - 'avascularities', - 'avascularity', - 'aventurine', - 'aventurines', - 'averageness', - 'averagenesses', - 'averseness', - 'aversenesses', - 'aversively', - 'aversiveness', - 'aversivenesses', - 'avgolemono', - 'avgolemonos', - 'avianizing', - 'aviatrices', - 'aviatrixes', - 'aviculture', - 'avicultures', - 'aviculturist', - 'aviculturists', - 'avidnesses', - 'avitaminoses', - 'avitaminosis', - 'avitaminotic', - 'avocational', - 'avocationally', - 'avocations', - 'avoidances', - 'avoirdupois', - 'avoirdupoises', - 'avouchment', - 'avouchments', - 'avuncularities', - 'avuncularity', - 'avuncularly', - 'awarenesses', - 'awaynesses', - 'awesomeness', - 'awesomenesses', - 'awestricken', - 'awfulnesses', - 'awkwardest', - 'awkwardness', - 'awkwardnesses', - 'axenically', - 'axialities', - 'axillaries', - 'axiological', - 'axiologically', - 'axiologies', - 'axiomatically', - 'axiomatisation', - 'axiomatisations', - 'axiomatization', - 'axiomatizations', - 'axiomatize', - 'axiomatized', - 'axiomatizes', - 'axiomatizing', - 'axisymmetric', - 'axisymmetrical', - 'axisymmetries', - 'axisymmetry', - 'axonometric', - 'axoplasmic', - 'ayahuascas', - 'ayatollahs', - 'azathioprine', - 'azathioprines', - 'azeotropes', - 'azidothymidine', - 'azidothymidines', - 'azimuthally', - 'azoospermia', - 'azoospermias', - 'azotobacter', - 'azotobacters', - 'babbitting', - 'babblement', - 'babblements', - 'babesioses', - 'babesiosis', - 'babesiosises', - 'babysitter', - 'babysitters', - 'baccalaureate', - 'baccalaureates', - 'bacchanalia', - 'bacchanalian', - 'bacchanalians', - 'bacchanals', - 'bacchantes', - 'bachelordom', - 'bachelordoms', - 'bachelorette', - 'bachelorettes', - 'bachelorhood', - 'bachelorhoods', - 'bacitracin', - 'bacitracins', - 'backbencher', - 'backbenchers', - 'backbenches', - 'backbiters', - 'backbiting', - 'backbitings', - 'backbitten', - 'backblocks', - 'backboards', - 'backbreaker', - 'backbreakers', - 'backbreaking', - 'backcloths', - 'backcountries', - 'backcountry', - 'backcourtman', - 'backcourtmen', - 'backcourts', - 'backcrossed', - 'backcrosses', - 'backcrossing', - 'backdating', - 'backdropped', - 'backdropping', - 'backfields', - 'backfilled', - 'backfilling', - 'backfiring', - 'backfitted', - 'backfitting', - 'backgammon', - 'backgammons', - 'background', - 'backgrounded', - 'backgrounder', - 'backgrounders', - 'backgrounding', - 'backgrounds', - 'backhanded', - 'backhandedly', - 'backhander', - 'backhanders', - 'backhanding', - 'backhauled', - 'backhauling', - 'backhouses', - 'backlashed', - 'backlasher', - 'backlashers', - 'backlashes', - 'backlashing', - 'backlighted', - 'backlighting', - 'backlights', - 'backlisted', - 'backlisting', - 'backlogged', - 'backlogging', - 'backpacked', - 'backpacker', - 'backpackers', - 'backpacking', - 'backpedaled', - 'backpedaling', - 'backpedalled', - 'backpedalling', - 'backpedals', - 'backrushes', - 'backscatter', - 'backscattered', - 'backscattering', - 'backscatterings', - 'backscatters', - 'backslapped', - 'backslapper', - 'backslappers', - 'backslapping', - 'backslashes', - 'backslidden', - 'backslider', - 'backsliders', - 'backslides', - 'backsliding', - 'backspaced', - 'backspaces', - 'backspacing', - 'backsplash', - 'backsplashes', - 'backstabbed', - 'backstabber', - 'backstabbers', - 'backstabbing', - 'backstabbings', - 'backstairs', - 'backstitch', - 'backstitched', - 'backstitches', - 'backstitching', - 'backstopped', - 'backstopping', - 'backstreet', - 'backstreets', - 'backstretch', - 'backstretches', - 'backstroke', - 'backstrokes', - 'backswings', - 'backswords', - 'backtracked', - 'backtracking', - 'backtracks', - 'backwardly', - 'backwardness', - 'backwardnesses', - 'backwashed', - 'backwashes', - 'backwashing', - 'backwaters', - 'backwoodsman', - 'backwoodsmen', - 'backwoodsy', - 'bacteremia', - 'bacteremias', - 'bacteremic', - 'bacterially', - 'bactericidal', - 'bactericidally', - 'bactericide', - 'bactericides', - 'bacteriochlorophyll', - 'bacteriochlorophylls', - 'bacteriocin', - 'bacteriocins', - 'bacteriologic', - 'bacteriological', - 'bacteriologically', - 'bacteriologies', - 'bacteriologist', - 'bacteriologists', - 'bacteriology', - 'bacteriolyses', - 'bacteriolysis', - 'bacteriolytic', - 'bacteriophage', - 'bacteriophages', - 'bacteriophagies', - 'bacteriophagy', - 'bacteriorhodopsin', - 'bacteriorhodopsins', - 'bacteriostases', - 'bacteriostasis', - 'bacteriostat', - 'bacteriostatic', - 'bacteriostats', - 'bacteriuria', - 'bacteriurias', - 'bacterization', - 'bacterizations', - 'bacterized', - 'bacterizes', - 'bacterizing', - 'bacteroids', - 'badinaging', - 'badmintons', - 'badmouthed', - 'badmouthing', - 'bafflegabs', - 'bafflement', - 'bafflements', - 'bafflingly', - 'bagatelles', - 'bagginesses', - 'bailiffship', - 'bailiffships', - 'bailiwicks', - 'bairnliest', - 'baksheeshes', - 'bakshished', - 'bakshishes', - 'bakshishing', - 'balaclavas', - 'balalaikas', - 'balbriggan', - 'balbriggans', - 'baldachino', - 'baldachinos', - 'baldachins', - 'balderdash', - 'balderdashes', - 'baldheaded', - 'baldnesses', - 'balefulness', - 'balefulnesses', - 'balkanization', - 'balkanizations', - 'balkanized', - 'balkanizes', - 'balkanizing', - 'balkinesses', - 'balladeers', - 'balladists', - 'balladries', - 'ballasting', - 'ballcarrier', - 'ballcarriers', - 'ballerinas', - 'balletomane', - 'balletomanes', - 'balletomania', - 'balletomanias', - 'ballhandling', - 'ballhandlings', - 'ballistically', - 'ballistics', - 'ballooning', - 'balloonings', - 'balloonist', - 'balloonists', - 'ballplayer', - 'ballplayers', - 'ballpoints', - 'ballyhooed', - 'ballyhooing', - 'ballyragged', - 'ballyragging', - 'balmacaans', - 'balminesses', - 'balneologies', - 'balneology', - 'balustrade', - 'balustraded', - 'balustrades', - 'bamboozled', - 'bamboozlement', - 'bamboozlements', - 'bamboozles', - 'bamboozling', - 'banalities', - 'banalizing', - 'banderilla', - 'banderillas', - 'banderillero', - 'banderilleros', - 'banderoles', - 'bandicoots', - 'banditries', - 'bandleader', - 'bandleaders', - 'bandmaster', - 'bandmasters', - 'bandoleers', - 'bandoliers', - 'bandstands', - 'bandwagons', - 'bandwidths', - 'baneberries', - 'banishment', - 'banishments', - 'banistered', - 'bankabilities', - 'bankability', - 'bankrolled', - 'bankroller', - 'bankrollers', - 'bankrolling', - 'bankruptcies', - 'bankruptcy', - 'bankrupted', - 'bankrupting', - 'bannerette', - 'bannerettes', - 'bannisters', - 'banqueters', - 'banqueting', - 'banquettes', - 'bantamweight', - 'bantamweights', - 'banteringly', - 'baptismally', - 'baptisteries', - 'baptistery', - 'baptistries', - 'barbarianism', - 'barbarianisms', - 'barbarians', - 'barbarically', - 'barbarisms', - 'barbarities', - 'barbarization', - 'barbarizations', - 'barbarized', - 'barbarizes', - 'barbarizing', - 'barbarously', - 'barbarousness', - 'barbarousnesses', - 'barbascoes', - 'barbecuers', - 'barbecuing', - 'barbequing', - 'barberries', - 'barbershop', - 'barbershops', - 'barbitones', - 'barbiturate', - 'barbiturates', - 'barcaroles', - 'barcarolle', - 'barcarolles', - 'bardolater', - 'bardolaters', - 'bardolatries', - 'bardolatry', - 'barebacked', - 'barefacedly', - 'barefacedness', - 'barefacednesses', - 'barefooted', - 'bareheaded', - 'barenesses', - 'bargainers', - 'bargaining', - 'bargeboard', - 'bargeboards', - 'barhopping', - 'barkeepers', - 'barkentine', - 'barkentines', - 'barleycorn', - 'barleycorns', - 'barnstormed', - 'barnstormer', - 'barnstormers', - 'barnstorming', - 'barnstorms', - 'baroceptor', - 'baroceptors', - 'barographic', - 'barographs', - 'barometers', - 'barometric', - 'barometrically', - 'barometries', - 'baronesses', - 'baronetage', - 'baronetages', - 'baronetcies', - 'baroreceptor', - 'baroreceptors', - 'barquentine', - 'barquentines', - 'barquettes', - 'barrackers', - 'barracking', - 'barracoons', - 'barracouta', - 'barracoutas', - 'barracudas', - 'barramunda', - 'barramundas', - 'barramundi', - 'barramundis', - 'barratries', - 'barrelages', - 'barrelfuls', - 'barrelhead', - 'barrelheads', - 'barrelhouse', - 'barrelhouses', - 'barrelling', - 'barrelsful', - 'barrenness', - 'barrennesses', - 'barretries', - 'barricaded', - 'barricades', - 'barricading', - 'barricadoed', - 'barricadoes', - 'barricadoing', - 'barristers', - 'bartenders', - 'bartending', - 'baseboards', - 'baseliners', - 'basementless', - 'basenesses', - 'baserunning', - 'baserunnings', - 'bashfulness', - 'bashfulnesses', - 'basicities', - 'basidiomycete', - 'basidiomycetes', - 'basidiomycetous', - 'basidiospore', - 'basidiospores', - 'basification', - 'basifications', - 'basipetally', - 'basketball', - 'basketballs', - 'basketfuls', - 'basketlike', - 'basketries', - 'basketsful', - 'basketwork', - 'basketworks', - 'basophiles', - 'basophilia', - 'basophilias', - 'basophilic', - 'bassetting', - 'bassnesses', - 'bassoonist', - 'bassoonists', - 'bastardies', - 'bastardise', - 'bastardised', - 'bastardises', - 'bastardising', - 'bastardization', - 'bastardizations', - 'bastardize', - 'bastardized', - 'bastardizes', - 'bastardizing', - 'bastinades', - 'bastinadoed', - 'bastinadoes', - 'bastinadoing', - 'batfowling', - 'bathetically', - 'bathhouses', - 'batholithic', - 'batholiths', - 'bathwaters', - 'bathymetric', - 'bathymetrical', - 'bathymetrically', - 'bathymetries', - 'bathymetry', - 'bathypelagic', - 'bathyscaph', - 'bathyscaphe', - 'bathyscaphes', - 'bathyscaphs', - 'bathysphere', - 'bathyspheres', - 'bathythermograph', - 'bathythermographs', - 'batrachian', - 'batrachians', - 'battailous', - 'battalions', - 'battements', - 'battinesses', - 'battlefield', - 'battlefields', - 'battlefront', - 'battlefronts', - 'battleground', - 'battlegrounds', - 'battlement', - 'battlemented', - 'battlements', - 'battleship', - 'battleships', - 'battlewagon', - 'battlewagons', - 'baudronses', - 'bawdinesses', - 'bawdyhouse', - 'bawdyhouses', - 'bayberries', - 'bayoneting', - 'bayonetted', - 'bayonetting', - 'beachcombed', - 'beachcomber', - 'beachcombers', - 'beachcombing', - 'beachcombs', - 'beachfront', - 'beachfronts', - 'beachgoers', - 'beachheads', - 'beanstalks', - 'bearabilities', - 'bearability', - 'bearbaiting', - 'bearbaitings', - 'bearberries', - 'beardedness', - 'beardednesses', - 'beardtongue', - 'beardtongues', - 'bearishness', - 'bearishnesses', - 'beastliest', - 'beastliness', - 'beastlinesses', - 'beatifically', - 'beatification', - 'beatifications', - 'beatifying', - 'beatitudes', - 'beauteously', - 'beauteousness', - 'beauteousnesses', - 'beautician', - 'beauticians', - 'beautification', - 'beautifications', - 'beautified', - 'beautifier', - 'beautifiers', - 'beautifies', - 'beautifuler', - 'beautifulest', - 'beautifully', - 'beautifulness', - 'beautifulnesses', - 'beautifying', - 'beaverboard', - 'beaverboards', - 'beblooding', - 'becarpeted', - 'becarpeting', - 'bechalking', - 'bechancing', - 'becharming', - 'beclamored', - 'beclamoring', - 'beclasping', - 'becloaking', - 'beclogging', - 'beclothing', - 'beclouding', - 'beclowning', - 'becomingly', - 'becowarded', - 'becowarding', - 'becrawling', - 'becrowding', - 'becrusting', - 'becudgeled', - 'becudgeling', - 'becudgelled', - 'becudgelling', - 'bedabbling', - 'bedarkened', - 'bedarkening', - 'bedazzlement', - 'bedazzlements', - 'bedazzling', - 'bedchamber', - 'bedchambers', - 'bedclothes', - 'bedcovering', - 'bedcoverings', - 'bedeafened', - 'bedeafening', - 'bedeviling', - 'bedevilled', - 'bedevilling', - 'bedevilment', - 'bedevilments', - 'bedfellows', - 'bediapered', - 'bediapering', - 'bedighting', - 'bedimpling', - 'bedirtying', - 'bedizening', - 'bedizenment', - 'bedizenments', - 'bedlamites', - 'bedraggled', - 'bedraggles', - 'bedraggling', - 'bedrenched', - 'bedrenches', - 'bedrenching', - 'bedriveled', - 'bedriveling', - 'bedrivelled', - 'bedrivelling', - 'bedrugging', - 'bedspreads', - 'bedsprings', - 'bedwarfing', - 'beechdrops', - 'beefeaters', - 'beefsteaks', - 'beekeepers', - 'beekeeping', - 'beekeepings', - 'befingered', - 'befingering', - 'befittingly', - 'beflagging', - 'beflecking', - 'beflowered', - 'beflowering', - 'beforehand', - 'beforetime', - 'befretting', - 'befriended', - 'befriending', - 'befringing', - 'befuddlement', - 'befuddlements', - 'befuddling', - 'beggarliness', - 'beggarlinesses', - 'beggarweed', - 'beggarweeds', - 'beginnings', - 'begirdling', - 'begladding', - 'beglamored', - 'beglamoring', - 'beglamoured', - 'beglamouring', - 'beglamours', - 'beglooming', - 'begrimming', - 'begroaning', - 'begrudging', - 'begrudgingly', - 'beguilement', - 'beguilements', - 'beguilingly', - 'behavioral', - 'behaviorally', - 'behaviorism', - 'behaviorisms', - 'behaviorist', - 'behavioristic', - 'behaviorists', - 'behaviours', - 'beheadings', - 'behindhand', - 'bejeweling', - 'bejewelled', - 'bejewelling', - 'bejumbling', - 'beknighted', - 'beknighting', - 'beknotting', - 'belaboring', - 'belaboured', - 'belabouring', - 'belatedness', - 'belatednesses', - 'beleaguered', - 'beleaguering', - 'beleaguerment', - 'beleaguerments', - 'beleaguers', - 'belemnites', - 'believabilities', - 'believability', - 'believable', - 'believably', - 'beliquored', - 'beliquoring', - 'belittlement', - 'belittlements', - 'belittlers', - 'belittling', - 'belladonna', - 'belladonnas', - 'belletrist', - 'belletristic', - 'belletrists', - 'bellflower', - 'bellflowers', - 'bellicosely', - 'bellicosities', - 'bellicosity', - 'belligerence', - 'belligerences', - 'belligerencies', - 'belligerency', - 'belligerent', - 'belligerently', - 'belligerents', - 'bellwether', - 'bellwethers', - 'bellyached', - 'bellyacher', - 'bellyachers', - 'bellyaches', - 'bellyaching', - 'bellybands', - 'bellybutton', - 'bellybuttons', - 'belongingness', - 'belongingnesses', - 'belongings', - 'belowdecks', - 'belowground', - 'belvederes', - 'bemadaming', - 'bemaddened', - 'bemaddening', - 'bemedalled', - 'bemingling', - 'bemuddling', - 'bemurmured', - 'bemurmuring', - 'bemusement', - 'bemusements', - 'bemuzzling', - 'benchlands', - 'benchmarks', - 'benchwarmer', - 'benchwarmers', - 'benediction', - 'benedictions', - 'benedictory', - 'benefaction', - 'benefactions', - 'benefactor', - 'benefactors', - 'benefactress', - 'benefactresses', - 'beneficence', - 'beneficences', - 'beneficent', - 'beneficently', - 'beneficial', - 'beneficially', - 'beneficialness', - 'beneficialnesses', - 'beneficiaries', - 'beneficiary', - 'beneficiate', - 'beneficiated', - 'beneficiates', - 'beneficiating', - 'beneficiation', - 'beneficiations', - 'beneficing', - 'benefiters', - 'benefiting', - 'benefitted', - 'benefitting', - 'benevolence', - 'benevolences', - 'benevolent', - 'benevolently', - 'benevolentness', - 'benevolentnesses', - 'bengalines', - 'benightedly', - 'benightedness', - 'benightednesses', - 'benignancies', - 'benignancy', - 'benignantly', - 'benignities', - 'bentonites', - 'bentonitic', - 'benzaldehyde', - 'benzaldehydes', - 'benzanthracene', - 'benzanthracenes', - 'benzidines', - 'benzimidazole', - 'benzimidazoles', - 'benzoapyrene', - 'benzoapyrenes', - 'benzocaine', - 'benzocaines', - 'benzodiazepine', - 'benzodiazepines', - 'benzofuran', - 'benzofurans', - 'benzophenone', - 'benzophenones', - 'bepainting', - 'bepimpling', - 'bequeathal', - 'bequeathals', - 'bequeathed', - 'bequeathing', - 'berascaled', - 'berascaling', - 'berberines', - 'berberises', - 'bereavement', - 'bereavements', - 'beribboned', - 'berkeliums', - 'berserkers', - 'berylliums', - 'bescorched', - 'bescorches', - 'bescorching', - 'bescouring', - 'bescreened', - 'bescreening', - 'beseeching', - 'beseechingly', - 'besetments', - 'beshadowed', - 'beshadowing', - 'beshivered', - 'beshivering', - 'beshouting', - 'beshrewing', - 'beshrouded', - 'beshrouding', - 'besmearing', - 'besmirched', - 'besmirches', - 'besmirching', - 'besmoothed', - 'besmoothing', - 'besmudging', - 'besmutting', - 'besoothing', - 'bespattered', - 'bespattering', - 'bespatters', - 'bespeaking', - 'bespectacled', - 'bespousing', - 'bespreading', - 'besprinkle', - 'besprinkled', - 'besprinkles', - 'besprinkling', - 'besteading', - 'bestialities', - 'bestiality', - 'bestialize', - 'bestialized', - 'bestializes', - 'bestializing', - 'bestiaries', - 'bestirring', - 'bestrewing', - 'bestridden', - 'bestriding', - 'bestrowing', - 'bestseller', - 'bestsellerdom', - 'bestsellerdoms', - 'bestsellers', - 'bestudding', - 'beswarming', - 'betattered', - 'betattering', - 'bethanking', - 'bethinking', - 'bethorning', - 'bethumping', - 'betokening', - 'betrothals', - 'betrotheds', - 'betrothing', - 'betterment', - 'betterments', - 'betweenbrain', - 'betweenbrains', - 'betweenness', - 'betweennesses', - 'betweentimes', - 'betweenwhiles', - 'bevomiting', - 'bewearying', - 'bewhiskered', - 'bewildered', - 'bewilderedly', - 'bewilderedness', - 'bewilderednesses', - 'bewildering', - 'bewilderingly', - 'bewilderment', - 'bewilderments', - 'bewitcheries', - 'bewitchery', - 'bewitching', - 'bewitchingly', - 'bewitchment', - 'bewitchments', - 'beworrying', - 'bewrapping', - 'biannually', - 'biasnesses', - 'biathletes', - 'biblically', - 'biblicisms', - 'biblicists', - 'bibliographer', - 'bibliographers', - 'bibliographic', - 'bibliographical', - 'bibliographically', - 'bibliographies', - 'bibliography', - 'bibliolater', - 'bibliolaters', - 'bibliolatries', - 'bibliolatrous', - 'bibliolatry', - 'bibliologies', - 'bibliology', - 'bibliomania', - 'bibliomaniac', - 'bibliomaniacal', - 'bibliomaniacs', - 'bibliomanias', - 'bibliopegic', - 'bibliopegies', - 'bibliopegist', - 'bibliopegists', - 'bibliopegy', - 'bibliophile', - 'bibliophiles', - 'bibliophilic', - 'bibliophilies', - 'bibliophilism', - 'bibliophilisms', - 'bibliophily', - 'bibliopole', - 'bibliopoles', - 'bibliopolist', - 'bibliopolists', - 'bibliotheca', - 'bibliothecae', - 'bibliothecal', - 'bibliothecas', - 'bibliotherapies', - 'bibliotherapy', - 'bibliotics', - 'bibliotist', - 'bibliotists', - 'bibulously', - 'bibulousness', - 'bibulousnesses', - 'bicameralism', - 'bicameralisms', - 'bicarbonate', - 'bicarbonates', - 'bicentenaries', - 'bicentenary', - 'bicentennial', - 'bicentennials', - 'bichromate', - 'bichromated', - 'bichromates', - 'bicomponent', - 'biconcavities', - 'biconcavity', - 'biconditional', - 'biconditionals', - 'biconvexities', - 'biconvexity', - 'bicultural', - 'biculturalism', - 'biculturalisms', - 'bicyclists', - 'biddabilities', - 'biddability', - 'bidialectal', - 'bidialectalism', - 'bidialectalisms', - 'bidirectional', - 'bidirectionally', - 'bidonville', - 'bidonvilles', - 'biennially', - 'bifacially', - 'bifidities', - 'biflagellate', - 'bifunctional', - 'bifurcated', - 'bifurcates', - 'bifurcating', - 'bifurcation', - 'bifurcations', - 'bigamously', - 'bigeminies', - 'bighearted', - 'bigheartedly', - 'bigheartedness', - 'bigheartednesses', - 'bigmouthed', - 'bijections', - 'bijouterie', - 'bijouteries', - 'bilateralism', - 'bilateralisms', - 'bilaterally', - 'bilberries', - 'bildungsroman', - 'bildungsromane', - 'bildungsromans', - 'bilgewater', - 'bilgewaters', - 'bilharzial', - 'bilharzias', - 'bilharziases', - 'bilharziasis', - 'bilingualism', - 'bilingualisms', - 'bilingually', - 'bilinguals', - 'biliousness', - 'biliousnesses', - 'bilirubins', - 'biliverdin', - 'biliverdins', - 'billabongs', - 'billboarded', - 'billboarding', - 'billboards', - 'billfishes', - 'billingsgate', - 'billingsgates', - 'billionaire', - 'billionaires', - 'billionths', - 'billowiest', - 'billycocks', - 'bilocation', - 'bilocations', - 'bimanually', - 'bimetallic', - 'bimetallics', - 'bimetallism', - 'bimetallisms', - 'bimetallist', - 'bimetallistic', - 'bimetallists', - 'bimillenaries', - 'bimillenary', - 'bimillennial', - 'bimillennials', - 'bimodalities', - 'bimodality', - 'bimolecular', - 'bimolecularly', - 'bimonthlies', - 'bimorphemic', - 'binational', - 'binaurally', - 'bindingness', - 'bindingnesses', - 'binocularities', - 'binocularity', - 'binocularly', - 'binoculars', - 'binomially', - 'binucleate', - 'binucleated', - 'bioacoustics', - 'bioactivities', - 'bioactivity', - 'bioassayed', - 'bioassaying', - 'bioavailabilities', - 'bioavailability', - 'bioavailable', - 'biocenoses', - 'biocenosis', - 'biochemical', - 'biochemically', - 'biochemicals', - 'biochemist', - 'biochemistries', - 'biochemistry', - 'biochemists', - 'bioclimatic', - 'biocoenoses', - 'biocoenosis', - 'biocompatibilities', - 'biocompatibility', - 'biocompatible', - 'biocontrol', - 'biocontrols', - 'bioconversion', - 'bioconversions', - 'biodegradabilities', - 'biodegradability', - 'biodegradable', - 'biodegradation', - 'biodegradations', - 'biodegrade', - 'biodegraded', - 'biodegrades', - 'biodegrading', - 'biodeterioration', - 'biodeteriorations', - 'biodiversities', - 'biodiversity', - 'biodynamic', - 'bioelectric', - 'bioelectrical', - 'bioelectricities', - 'bioelectricity', - 'bioenergetic', - 'bioenergetics', - 'bioengineer', - 'bioengineered', - 'bioengineering', - 'bioengineerings', - 'bioengineers', - 'bioethical', - 'bioethicist', - 'bioethicists', - 'biofeedback', - 'biofeedbacks', - 'biofouling', - 'biofoulings', - 'biogeneses', - 'biogenesis', - 'biogenetic', - 'biogenetically', - 'biogeochemical', - 'biogeochemicals', - 'biogeochemistries', - 'biogeochemistry', - 'biogeographer', - 'biogeographers', - 'biogeographic', - 'biogeographical', - 'biogeographies', - 'biogeography', - 'biographee', - 'biographees', - 'biographer', - 'biographers', - 'biographic', - 'biographical', - 'biographically', - 'biographies', - 'biohazards', - 'biological', - 'biologically', - 'biologicals', - 'biologisms', - 'biologistic', - 'biologists', - 'bioluminescence', - 'bioluminescences', - 'bioluminescent', - 'biomaterial', - 'biomaterials', - 'biomathematical', - 'biomathematician', - 'biomathematicians', - 'biomathematics', - 'biomechanical', - 'biomechanically', - 'biomechanics', - 'biomedical', - 'biomedicine', - 'biomedicines', - 'biometeorological', - 'biometeorologies', - 'biometeorology', - 'biometrical', - 'biometrician', - 'biometricians', - 'biometrics', - 'biometries', - 'biomolecular', - 'biomolecule', - 'biomolecules', - 'biomorphic', - 'biophysical', - 'biophysicist', - 'biophysicists', - 'biophysics', - 'biopolymer', - 'biopolymers', - 'bioreactor', - 'bioreactors', - 'biorhythmic', - 'biorhythms', - 'biosafeties', - 'bioscience', - 'biosciences', - 'bioscientific', - 'bioscientist', - 'bioscientists', - 'bioscopies', - 'biosensors', - 'biosocially', - 'biospheres', - 'biospheric', - 'biostatistical', - 'biostatistician', - 'biostatisticians', - 'biostatistics', - 'biostratigraphic', - 'biostratigraphies', - 'biostratigraphy', - 'biosyntheses', - 'biosynthesis', - 'biosynthetic', - 'biosynthetically', - 'biosystematic', - 'biosystematics', - 'biosystematist', - 'biosystematists', - 'biotechnical', - 'biotechnological', - 'biotechnologies', - 'biotechnologist', - 'biotechnologists', - 'biotechnology', - 'biotelemetric', - 'biotelemetries', - 'biotelemetry', - 'biotransformation', - 'biotransformations', - 'biparental', - 'biparentally', - 'bipartisan', - 'bipartisanism', - 'bipartisanisms', - 'bipartisanship', - 'bipartisanships', - 'bipartitely', - 'bipartition', - 'bipartitions', - 'bipedalism', - 'bipedalisms', - 'bipedalities', - 'bipedality', - 'bipinnately', - 'bipolarities', - 'bipolarity', - 'bipolarization', - 'bipolarizations', - 'bipolarize', - 'bipolarized', - 'bipolarizes', - 'bipolarizing', - 'bipropellant', - 'bipropellants', - 'bipyramidal', - 'bipyramids', - 'biquadratic', - 'biquadratics', - 'biracialism', - 'biracialisms', - 'birdbrained', - 'birdbrains', - 'birdhouses', - 'birdliming', - 'birdwatcher', - 'birdwatchers', - 'birefringence', - 'birefringences', - 'birefringent', - 'birthdates', - 'birthmarks', - 'birthplace', - 'birthplaces', - 'birthrates', - 'birthright', - 'birthrights', - 'birthroots', - 'birthstone', - 'birthstones', - 'birthworts', - 'bisectional', - 'bisectionally', - 'bisections', - 'bisexualities', - 'bisexuality', - 'bisexually', - 'bishoprics', - 'bistouries', - 'bisulfates', - 'bisulfides', - 'bisulfites', - 'bitartrate', - 'bitartrates', - 'bitcheries', - 'bitchiness', - 'bitchinesses', - 'bitterbrush', - 'bitterbrushes', - 'bitterness', - 'bitternesses', - 'bitterroot', - 'bitterroots', - 'bittersweet', - 'bittersweetly', - 'bittersweetness', - 'bittersweetnesses', - 'bittersweets', - 'bitterweed', - 'bitterweeds', - 'bituminization', - 'bituminizations', - 'bituminize', - 'bituminized', - 'bituminizes', - 'bituminizing', - 'bituminous', - 'biuniqueness', - 'biuniquenesses', - 'bivouacked', - 'bivouacking', - 'biweeklies', - 'bizarreness', - 'bizarrenesses', - 'bizarrerie', - 'bizarreries', - 'blabbering', - 'blabbermouth', - 'blabbermouths', - 'blackamoor', - 'blackamoors', - 'blackballed', - 'blackballing', - 'blackballs', - 'blackberries', - 'blackberry', - 'blackbirded', - 'blackbirder', - 'blackbirders', - 'blackbirding', - 'blackbirds', - 'blackboard', - 'blackboards', - 'blackbodies', - 'blackcocks', - 'blackeners', - 'blackening', - 'blackenings', - 'blackfaces', - 'blackfishes', - 'blackflies', - 'blackguard', - 'blackguarded', - 'blackguarding', - 'blackguardism', - 'blackguardisms', - 'blackguardly', - 'blackguards', - 'blackhander', - 'blackhanders', - 'blackheads', - 'blackheart', - 'blackhearts', - 'blackjacked', - 'blackjacking', - 'blackjacks', - 'blacklands', - 'blackleads', - 'blacklisted', - 'blacklister', - 'blacklisters', - 'blacklisting', - 'blacklists', - 'blackmailed', - 'blackmailer', - 'blackmailers', - 'blackmailing', - 'blackmails', - 'blacknesses', - 'blackpolls', - 'blacksmith', - 'blacksmithing', - 'blacksmithings', - 'blacksmiths', - 'blacksnake', - 'blacksnakes', - 'blacktails', - 'blackthorn', - 'blackthorns', - 'blacktopped', - 'blacktopping', - 'blackwater', - 'blackwaters', - 'blackwoods', - 'bladderlike', - 'bladdernut', - 'bladdernuts', - 'bladderwort', - 'bladderworts', - 'blaeberries', - 'blamefully', - 'blamelessly', - 'blamelessness', - 'blamelessnesses', - 'blameworthiness', - 'blameworthinesses', - 'blameworthy', - 'blancmange', - 'blancmanges', - 'blandished', - 'blandisher', - 'blandishers', - 'blandishes', - 'blandishing', - 'blandishment', - 'blandishments', - 'blandnesses', - 'blanketflower', - 'blanketflowers', - 'blanketing', - 'blanketlike', - 'blanknesses', - 'blanquette', - 'blanquettes', - 'blarneying', - 'blasphemed', - 'blasphemer', - 'blasphemers', - 'blasphemes', - 'blasphemies', - 'blaspheming', - 'blasphemous', - 'blasphemously', - 'blasphemousness', - 'blasphemousnesses', - 'blastemata', - 'blastematic', - 'blastments', - 'blastocoel', - 'blastocoele', - 'blastocoeles', - 'blastocoelic', - 'blastocoels', - 'blastocyst', - 'blastocysts', - 'blastoderm', - 'blastoderms', - 'blastodisc', - 'blastodiscs', - 'blastomata', - 'blastomere', - 'blastomeres', - 'blastomycoses', - 'blastomycosis', - 'blastopore', - 'blastopores', - 'blastoporic', - 'blastospore', - 'blastospores', - 'blastulation', - 'blastulations', - 'blatancies', - 'blatherers', - 'blathering', - 'blatherskite', - 'blatherskites', - 'blattering', - 'blaxploitation', - 'blaxploitations', - 'blazonings', - 'blazonries', - 'bleachable', - 'bleacherite', - 'bleacherites', - 'bleaknesses', - 'bleariness', - 'blearinesses', - 'blemishing', - 'blepharoplast', - 'blepharoplasties', - 'blepharoplasts', - 'blepharoplasty', - 'blepharospasm', - 'blepharospasms', - 'blessedest', - 'blessedness', - 'blessednesses', - 'blethering', - 'blimpishly', - 'blimpishness', - 'blimpishnesses', - 'blindfishes', - 'blindfolded', - 'blindfolding', - 'blindfolds', - 'blindingly', - 'blindnesses', - 'blindsided', - 'blindsides', - 'blindsiding', - 'blindworms', - 'blinkering', - 'blissfully', - 'blissfulness', - 'blissfulnesses', - 'blistering', - 'blisteringly', - 'blithering', - 'blithesome', - 'blithesomely', - 'blitzkrieg', - 'blitzkriegs', - 'blizzardly', - 'blockaders', - 'blockading', - 'blockbuster', - 'blockbusters', - 'blockbusting', - 'blockbustings', - 'blockheads', - 'blockhouse', - 'blockhouses', - 'bloodbaths', - 'bloodcurdling', - 'bloodguilt', - 'bloodguiltiness', - 'bloodguiltinesses', - 'bloodguilts', - 'bloodguilty', - 'bloodhound', - 'bloodhounds', - 'bloodiness', - 'bloodinesses', - 'bloodlessly', - 'bloodlessness', - 'bloodlessnesses', - 'bloodletting', - 'bloodlettings', - 'bloodlines', - 'bloodmobile', - 'bloodmobiles', - 'bloodroots', - 'bloodsheds', - 'bloodstain', - 'bloodstained', - 'bloodstains', - 'bloodstock', - 'bloodstocks', - 'bloodstone', - 'bloodstones', - 'bloodstream', - 'bloodstreams', - 'bloodsucker', - 'bloodsuckers', - 'bloodsucking', - 'bloodthirstily', - 'bloodthirstiness', - 'bloodthirstinesses', - 'bloodthirsty', - 'bloodworms', - 'bloomeries', - 'blossoming', - 'blotchiest', - 'bloviating', - 'blowfishes', - 'blowtorches', - 'blubbering', - 'bludgeoned', - 'bludgeoning', - 'bluebeards', - 'blueberries', - 'bluebonnet', - 'bluebonnets', - 'bluebottle', - 'bluebottles', - 'bluefishes', - 'bluegrasses', - 'bluejacket', - 'bluejackets', - 'bluenesses', - 'bluepoints', - 'blueprinted', - 'blueprinting', - 'blueprints', - 'blueshifted', - 'blueshifts', - 'bluestocking', - 'bluestockings', - 'bluestones', - 'bluetongue', - 'bluetongues', - 'bluffnesses', - 'bluishness', - 'bluishnesses', - 'blunderbuss', - 'blunderbusses', - 'blunderers', - 'blundering', - 'blunderingly', - 'bluntnesses', - 'blurriness', - 'blurrinesses', - 'blurringly', - 'blushingly', - 'blusterers', - 'blustering', - 'blusteringly', - 'blusterous', - 'boardinghouse', - 'boardinghouses', - 'boardrooms', - 'boardsailing', - 'boardsailings', - 'boardsailor', - 'boardsailors', - 'boardwalks', - 'boarfishes', - 'boastfully', - 'boastfulness', - 'boastfulnesses', - 'boatbuilder', - 'boatbuilders', - 'boatbuilding', - 'boatbuildings', - 'boathouses', - 'boatswains', - 'bobsledded', - 'bobsledder', - 'bobsledders', - 'bobsledding', - 'bobsleddings', - 'bobtailing', - 'bodaciously', - 'boddhisattva', - 'boddhisattvas', - 'bodhisattva', - 'bodhisattvas', - 'bodybuilder', - 'bodybuilders', - 'bodybuilding', - 'bodybuildings', - 'bodychecked', - 'bodychecking', - 'bodychecks', - 'bodyguards', - 'bodysurfed', - 'bodysurfer', - 'bodysurfers', - 'bodysurfing', - 'bohemianism', - 'bohemianisms', - 'boilermaker', - 'boilermakers', - 'boilerplate', - 'boilerplates', - 'boilersuit', - 'boilersuits', - 'boisterous', - 'boisterously', - 'boisterousness', - 'boisterousnesses', - 'boldfacing', - 'boldnesses', - 'bolivianos', - 'bolometers', - 'bolometric', - 'bolometrically', - 'bolshevism', - 'bolshevisms', - 'bolshevize', - 'bolshevized', - 'bolshevizes', - 'bolshevizing', - 'bolsterers', - 'bolstering', - 'bombardier', - 'bombardiers', - 'bombarding', - 'bombardment', - 'bombardments', - 'bombardons', - 'bombastically', - 'bombazines', - 'bombinated', - 'bombinates', - 'bombinating', - 'bombination', - 'bombinations', - 'bombshells', - 'bombsights', - 'bondholder', - 'bondholders', - 'bondstones', - 'bonefishes', - 'bonefishing', - 'bonefishings', - 'boneheaded', - 'boneheadedness', - 'boneheadednesses', - 'bonesetter', - 'bonesetters', - 'boninesses', - 'bonnyclabber', - 'bonnyclabbers', - 'booboisies', - 'bookbinder', - 'bookbinderies', - 'bookbinders', - 'bookbindery', - 'bookbinding', - 'bookbindings', - 'bookishness', - 'bookishnesses', - 'bookkeeper', - 'bookkeepers', - 'bookkeeping', - 'bookkeepings', - 'bookmakers', - 'bookmaking', - 'bookmakings', - 'bookmarker', - 'bookmarkers', - 'bookmobile', - 'bookmobiles', - 'bookplates', - 'bookseller', - 'booksellers', - 'bookselling', - 'booksellings', - 'bookshelves', - 'bookstalls', - 'bookstores', - 'boomeranged', - 'boomeranging', - 'boomerangs', - 'boondoggle', - 'boondoggled', - 'boondoggler', - 'boondogglers', - 'boondoggles', - 'boondoggling', - 'boorishness', - 'boorishnesses', - 'boosterism', - 'boosterisms', - 'bootblacks', - 'bootlegged', - 'bootlegger', - 'bootleggers', - 'bootlegging', - 'bootlessly', - 'bootlessness', - 'bootlessnesses', - 'bootlicked', - 'bootlicker', - 'bootlickers', - 'bootlicking', - 'bootstrapped', - 'bootstrapping', - 'bootstraps', - 'borborygmi', - 'borborygmus', - 'bordereaux', - 'borderland', - 'borderlands', - 'borderline', - 'borderlines', - 'borescopes', - 'boringness', - 'boringnesses', - 'borohydride', - 'borohydrides', - 'borosilicate', - 'borosilicates', - 'borrowings', - 'bossinesses', - 'botanically', - 'botanicals', - 'botanising', - 'botanizing', - 'botcheries', - 'botheration', - 'botherations', - 'bothersome', - 'botryoidal', - 'botrytises', - 'bottlebrush', - 'bottlebrushes', - 'bottlefuls', - 'bottleneck', - 'bottlenecked', - 'bottlenecking', - 'bottlenecks', - 'bottomland', - 'bottomlands', - 'bottomless', - 'bottomlessly', - 'bottomlessness', - 'bottomlessnesses', - 'bottommost', - 'bottomries', - 'botulinums', - 'botulinuses', - 'bougainvillaea', - 'bougainvillaeas', - 'bougainvillea', - 'bougainvilleas', - 'bouillabaisse', - 'bouillabaisses', - 'boulevardier', - 'boulevardiers', - 'boulevards', - 'bouleversement', - 'bouleversements', - 'bouncingly', - 'boundaries', - 'boundedness', - 'boundednesses', - 'bounderish', - 'boundlessly', - 'boundlessness', - 'boundlessnesses', - 'bounteously', - 'bounteousness', - 'bounteousnesses', - 'bountifully', - 'bountifulness', - 'bountifulnesses', - 'bourbonism', - 'bourbonisms', - 'bourgeoise', - 'bourgeoises', - 'bourgeoisie', - 'bourgeoisies', - 'bourgeoisification', - 'bourgeoisifications', - 'bourgeoisified', - 'bourgeoisifies', - 'bourgeoisify', - 'bourgeoisifying', - 'bourgeoned', - 'bourgeoning', - 'bourguignon', - 'bourguignonne', - 'boustrophedon', - 'boustrophedonic', - 'boustrophedons', - 'boutonniere', - 'boutonnieres', - 'bovinities', - 'bowdlerise', - 'bowdlerised', - 'bowdlerises', - 'bowdlerising', - 'bowdlerization', - 'bowdlerizations', - 'bowdlerize', - 'bowdlerized', - 'bowdlerizer', - 'bowdlerizers', - 'bowdlerizes', - 'bowdlerizing', - 'bowerbirds', - 'bowstrings', - 'boxberries', - 'boxhauling', - 'boxinesses', - 'boycotters', - 'boycotting', - 'boyfriends', - 'boyishness', - 'boyishnesses', - 'boysenberries', - 'boysenberry', - 'brachiated', - 'brachiates', - 'brachiating', - 'brachiation', - 'brachiations', - 'brachiator', - 'brachiators', - 'brachiopod', - 'brachiopods', - 'brachycephalic', - 'brachycephalies', - 'brachycephaly', - 'brachypterous', - 'bracketing', - 'brackishness', - 'brackishnesses', - 'bracteoles', - 'bradycardia', - 'bradycardias', - 'bradykinin', - 'bradykinins', - 'braggadocio', - 'braggadocios', - 'braillewriter', - 'braillewriters', - 'braillists', - 'braincases', - 'brainchild', - 'brainchildren', - 'braininess', - 'braininesses', - 'brainlessly', - 'brainlessness', - 'brainlessnesses', - 'brainpower', - 'brainpowers', - 'brainsickly', - 'brainstorm', - 'brainstormed', - 'brainstormer', - 'brainstormers', - 'brainstorming', - 'brainstormings', - 'brainstorms', - 'brainteaser', - 'brainteasers', - 'brainwashed', - 'brainwasher', - 'brainwashers', - 'brainwashes', - 'brainwashing', - 'brainwashings', - 'brambliest', - 'branchiest', - 'branchiopod', - 'branchiopods', - 'branchless', - 'branchlets', - 'branchline', - 'branchlines', - 'brandished', - 'brandishes', - 'brandishing', - 'brannigans', - 'brashnesses', - 'brassbound', - 'brasseries', - 'brassieres', - 'brassiness', - 'brassinesses', - 'bratticing', - 'brattiness', - 'brattinesses', - 'bratwursts', - 'braunschweiger', - 'braunschweigers', - 'brawniness', - 'brawninesses', - 'brazenness', - 'brazennesses', - 'brazilwood', - 'brazilwoods', - 'breadbasket', - 'breadbaskets', - 'breadboard', - 'breadboarded', - 'breadboarding', - 'breadboards', - 'breadboxes', - 'breadfruit', - 'breadfruits', - 'breadlines', - 'breadstuff', - 'breadstuffs', - 'breadthwise', - 'breadwinner', - 'breadwinners', - 'breadwinning', - 'breadwinnings', - 'breakables', - 'breakaways', - 'breakdowns', - 'breakevens', - 'breakfasted', - 'breakfaster', - 'breakfasters', - 'breakfasting', - 'breakfasts', - 'breakfront', - 'breakfronts', - 'breaksaway', - 'breakthrough', - 'breakthroughs', - 'breakwater', - 'breakwaters', - 'breastbone', - 'breastbones', - 'breastplate', - 'breastplates', - 'breaststroke', - 'breaststroker', - 'breaststrokers', - 'breaststrokes', - 'breastwork', - 'breastworks', - 'breathabilities', - 'breathability', - 'breathable', - 'breathiest', - 'breathiness', - 'breathinesses', - 'breathings', - 'breathless', - 'breathlessly', - 'breathlessness', - 'breathlessnesses', - 'breathtaking', - 'breathtakingly', - 'brecciated', - 'brecciates', - 'brecciating', - 'brecciation', - 'brecciations', - 'breechblock', - 'breechblocks', - 'breechcloth', - 'breechcloths', - 'breechclout', - 'breechclouts', - 'breechings', - 'breechloader', - 'breechloaders', - 'breezeless', - 'breezeways', - 'breeziness', - 'breezinesses', - 'bremsstrahlung', - 'bremsstrahlungs', - 'brevetcies', - 'brevetting', - 'breviaries', - 'brickfield', - 'brickfields', - 'bricklayer', - 'bricklayers', - 'bricklaying', - 'bricklayings', - 'brickworks', - 'brickyards', - 'bricolages', - 'bridegroom', - 'bridegrooms', - 'bridesmaid', - 'bridesmaids', - 'bridewells', - 'bridgeable', - 'bridgehead', - 'bridgeheads', - 'bridgeless', - 'bridgework', - 'bridgeworks', - 'briefcases', - 'briefnesses', - 'brigadiers', - 'brigandage', - 'brigandages', - 'brigandine', - 'brigandines', - 'brigantine', - 'brigantines', - 'brightened', - 'brightener', - 'brighteners', - 'brightening', - 'brightness', - 'brightnesses', - 'brightwork', - 'brightworks', - 'brilliance', - 'brilliances', - 'brilliancies', - 'brilliancy', - 'brilliantine', - 'brilliantines', - 'brilliantly', - 'brilliants', - 'brimstones', - 'bringdowns', - 'brininesses', - 'brinkmanship', - 'brinkmanships', - 'brinksmanship', - 'brinksmanships', - 'briolettes', - 'briquetted', - 'briquettes', - 'briquetting', - 'brisknesses', - 'bristlelike', - 'bristletail', - 'bristletails', - 'bristliest', - 'brittleness', - 'brittlenesses', - 'broadcasted', - 'broadcaster', - 'broadcasters', - 'broadcasting', - 'broadcasts', - 'broadcloth', - 'broadcloths', - 'broadening', - 'broadlooms', - 'broadnesses', - 'broadscale', - 'broadsheet', - 'broadsheets', - 'broadsided', - 'broadsides', - 'broadsiding', - 'broadsword', - 'broadswords', - 'broadtails', - 'brocatelle', - 'brocatelles', - 'brochettes', - 'brogueries', - 'broideries', - 'broidering', - 'brokenhearted', - 'brokenness', - 'brokennesses', - 'brokerages', - 'brokerings', - 'bromegrass', - 'bromegrasses', - 'bromelains', - 'bromeliads', - 'brominated', - 'brominates', - 'brominating', - 'bromination', - 'brominations', - 'bromocriptine', - 'bromocriptines', - 'bromouracil', - 'bromouracils', - 'bronchially', - 'bronchiectases', - 'bronchiectasis', - 'bronchiolar', - 'bronchiole', - 'bronchioles', - 'bronchites', - 'bronchitic', - 'bronchitides', - 'bronchitis', - 'bronchitises', - 'bronchodilator', - 'bronchodilators', - 'bronchogenic', - 'bronchopneumonia', - 'bronchopneumonias', - 'bronchoscope', - 'bronchoscopes', - 'bronchoscopic', - 'bronchoscopies', - 'bronchoscopist', - 'bronchoscopists', - 'bronchoscopy', - 'bronchospasm', - 'bronchospasms', - 'bronchospastic', - 'broncobuster', - 'broncobusters', - 'brontosaur', - 'brontosaurs', - 'brontosaurus', - 'brontosauruses', - 'broodiness', - 'broodinesses', - 'broodingly', - 'broodmares', - 'broomballer', - 'broomballers', - 'broomballs', - 'broomcorns', - 'broomrapes', - 'broomstick', - 'broomsticks', - 'brotherhood', - 'brotherhoods', - 'brothering', - 'brotherliness', - 'brotherlinesses', - 'browbeaten', - 'browbeating', - 'brownnosed', - 'brownnoser', - 'brownnosers', - 'brownnoses', - 'brownnosing', - 'brownshirt', - 'brownshirts', - 'brownstone', - 'brownstones', - 'browridges', - 'brucelloses', - 'brucellosis', - 'brummagems', - 'brushabilities', - 'brushability', - 'brushbacks', - 'brushlands', - 'brushwoods', - 'brushworks', - 'brusqueness', - 'brusquenesses', - 'brusquerie', - 'brusqueries', - 'brutalised', - 'brutalises', - 'brutalising', - 'brutalities', - 'brutalization', - 'brutalizations', - 'brutalized', - 'brutalizes', - 'brutalizing', - 'brutifying', - 'brutishness', - 'brutishnesses', - 'bryological', - 'bryologies', - 'bryologist', - 'bryologists', - 'bryophyllum', - 'bryophyllums', - 'bryophytes', - 'bryophytic', - 'bubblegums', - 'bubblehead', - 'bubbleheaded', - 'bubbleheads', - 'buccaneered', - 'buccaneering', - 'buccaneerish', - 'buccaneers', - 'buccinator', - 'buccinators', - 'buckboards', - 'bucketfuls', - 'bucketsful', - 'bucklering', - 'buckminsterfullerene', - 'buckminsterfullerenes', - 'buckraming', - 'buckskinned', - 'buckthorns', - 'bucktoothed', - 'buckwheats', - 'buckyballs', - 'bucolically', - 'budgerigar', - 'budgerigars', - 'budgeteers', - 'buffaloberries', - 'buffaloberry', - 'buffalofish', - 'buffalofishes', - 'buffaloing', - 'bufflehead', - 'buffleheads', - 'buffooneries', - 'buffoonery', - 'buffoonish', - 'bugleweeds', - 'buhrstones', - 'bulkinesses', - 'bullbaiting', - 'bullbaitings', - 'bulldogged', - 'bulldogger', - 'bulldoggers', - 'bulldogging', - 'bulldoggings', - 'bulldozers', - 'bulldozing', - 'bulletined', - 'bulletining', - 'bulletproof', - 'bullfighter', - 'bullfighters', - 'bullfighting', - 'bullfightings', - 'bullfights', - 'bullfinches', - 'bullheaded', - 'bullheadedly', - 'bullheadedness', - 'bullheadednesses', - 'bullishness', - 'bullishnesses', - 'bullmastiff', - 'bullmastiffs', - 'bullnecked', - 'bullrushes', - 'bullshitted', - 'bullshitting', - 'bullterrier', - 'bullterriers', - 'bullwhipped', - 'bullwhipping', - 'bullyragged', - 'bullyragging', - 'bulwarking', - 'bumbershoot', - 'bumbershoots', - 'bumblebees', - 'bumblingly', - 'bumpinesses', - 'bumpkinish', - 'bumptiously', - 'bumptiousness', - 'bumptiousnesses', - 'bunchberries', - 'bunchberry', - 'bunchgrass', - 'bunchgrasses', - 'bunglesome', - 'bunglingly', - 'bunkhouses', - 'buoyancies', - 'burdensome', - 'bureaucracies', - 'bureaucracy', - 'bureaucrat', - 'bureaucratese', - 'bureaucrateses', - 'bureaucratic', - 'bureaucratically', - 'bureaucratise', - 'bureaucratised', - 'bureaucratises', - 'bureaucratising', - 'bureaucratism', - 'bureaucratisms', - 'bureaucratization', - 'bureaucratizations', - 'bureaucratize', - 'bureaucratized', - 'bureaucratizes', - 'bureaucratizing', - 'bureaucrats', - 'burgeoning', - 'burglaries', - 'burglarious', - 'burglariously', - 'burglarize', - 'burglarized', - 'burglarizes', - 'burglarizing', - 'burglarproof', - 'burgomaster', - 'burgomasters', - 'burgundies', - 'burladeros', - 'burlesqued', - 'burlesquely', - 'burlesquer', - 'burlesquers', - 'burlesques', - 'burlesquing', - 'burlinesses', - 'burnishers', - 'burnishing', - 'burnishings', - 'burrstones', - 'bursitises', - 'burthening', - 'bushelling', - 'bushinesses', - 'bushmaster', - 'bushmasters', - 'bushranger', - 'bushrangers', - 'bushranging', - 'bushrangings', - 'bushwhacked', - 'bushwhacker', - 'bushwhackers', - 'bushwhacking', - 'bushwhacks', - 'businesses', - 'businesslike', - 'businessman', - 'businessmen', - 'businesspeople', - 'businessperson', - 'businesspersons', - 'businesswoman', - 'businesswomen', - 'bustlingly', - 'busybodies', - 'busynesses', - 'butadienes', - 'butcheries', - 'butchering', - 'butterball', - 'butterballs', - 'buttercups', - 'butterfats', - 'butterfingered', - 'butterfingers', - 'butterfish', - 'butterfishes', - 'butterflied', - 'butterflies', - 'butterflyer', - 'butterflyers', - 'butterflying', - 'butteriest', - 'butterless', - 'buttermilk', - 'buttermilks', - 'butternuts', - 'butterscotch', - 'butterscotches', - 'butterweed', - 'butterweeds', - 'butterwort', - 'butterworts', - 'buttinskies', - 'buttonball', - 'buttonballs', - 'buttonbush', - 'buttonbushes', - 'buttonhole', - 'buttonholed', - 'buttonholer', - 'buttonholers', - 'buttonholes', - 'buttonholing', - 'buttonhook', - 'buttonhooked', - 'buttonhooking', - 'buttonhooks', - 'buttonless', - 'buttonwood', - 'buttonwoods', - 'buttressed', - 'buttresses', - 'buttressing', - 'buttstocks', - 'butylating', - 'butylation', - 'butylations', - 'butyraldehyde', - 'butyraldehydes', - 'butyrophenone', - 'butyrophenones', - 'buxomnesses', - 'byproducts', - 'byssinoses', - 'byssinosis', - 'bystanders', - 'cabalettas', - 'cabalistic', - 'caballeros', - 'cabbageworm', - 'cabbageworms', - 'cabdrivers', - 'cabinetmaker', - 'cabinetmakers', - 'cabinetmaking', - 'cabinetmakings', - 'cabinetries', - 'cabinetwork', - 'cabinetworks', - 'cablegrams', - 'cabriolets', - 'cacciatore', - 'cachinnate', - 'cachinnated', - 'cachinnates', - 'cachinnating', - 'cachinnation', - 'cachinnations', - 'caciquisms', - 'cacodemonic', - 'cacodemons', - 'cacographical', - 'cacographies', - 'cacography', - 'cacomistle', - 'cacomistles', - 'cacophonies', - 'cacophonous', - 'cacophonously', - 'cadastrally', - 'cadaverine', - 'cadaverines', - 'cadaverous', - 'cadaverously', - 'caddishness', - 'caddishnesses', - 'caddisworm', - 'caddisworms', - 'cadetships', - 'caducities', - 'caecilians', - 'caesareans', - 'caesarians', - 'caespitose', - 'cafeterias', - 'cafetorium', - 'cafetoriums', - 'caffeinated', - 'cageynesses', - 'caginesses', - 'cairngorms', - 'cajolement', - 'cajolements', - 'cajoleries', - 'cakewalked', - 'cakewalker', - 'cakewalkers', - 'cakewalking', - 'calabashes', - 'calabooses', - 'calamander', - 'calamanders', - 'calamaries', - 'calamining', - 'calamities', - 'calamitous', - 'calamitously', - 'calamondin', - 'calamondins', - 'calcareous', - 'calcareously', - 'calcicoles', - 'calcicolous', - 'calciferol', - 'calciferols', - 'calciferous', - 'calcification', - 'calcifications', - 'calcifuges', - 'calcifugous', - 'calcifying', - 'calcimined', - 'calcimines', - 'calcimining', - 'calcination', - 'calcinations', - 'calcinoses', - 'calcinosis', - 'calcitonin', - 'calcitonins', - 'calculable', - 'calculated', - 'calculatedly', - 'calculatedness', - 'calculatednesses', - 'calculates', - 'calculating', - 'calculatingly', - 'calculation', - 'calculational', - 'calculations', - 'calculator', - 'calculators', - 'calculuses', - 'calefactories', - 'calefactory', - 'calendared', - 'calendaring', - 'calendered', - 'calenderer', - 'calenderers', - 'calendering', - 'calendrical', - 'calendulas', - 'calentures', - 'calibrated', - 'calibrates', - 'calibrating', - 'calibration', - 'calibrations', - 'calibrator', - 'calibrators', - 'californium', - 'californiums', - 'caliginous', - 'calipashes', - 'calipering', - 'caliphates', - 'calisthenic', - 'calisthenics', - 'calligrapher', - 'calligraphers', - 'calligraphic', - 'calligraphically', - 'calligraphies', - 'calligraphist', - 'calligraphists', - 'calligraphy', - 'callipered', - 'callipering', - 'callipygian', - 'callipygous', - 'callithump', - 'callithumpian', - 'callithumps', - 'callosities', - 'callousing', - 'callousness', - 'callousnesses', - 'callowness', - 'callownesses', - 'calmatives', - 'calmnesses', - 'calmodulin', - 'calmodulins', - 'calorically', - 'calorimeter', - 'calorimeters', - 'calorimetric', - 'calorimetrically', - 'calorimetries', - 'calorimetry', - 'calorizing', - 'calumniate', - 'calumniated', - 'calumniates', - 'calumniating', - 'calumniation', - 'calumniations', - 'calumniator', - 'calumniators', - 'calumnious', - 'calumniously', - 'calvadoses', - 'calypsonian', - 'calypsonians', - 'camaraderie', - 'camaraderies', - 'camarillas', - 'camcorders', - 'camelbacks', - 'camelopard', - 'camelopards', - 'cameraperson', - 'camerapersons', - 'camerawoman', - 'camerawomen', - 'camerlengo', - 'camerlengos', - 'camisadoes', - 'camorrista', - 'camorristi', - 'camouflage', - 'camouflageable', - 'camouflaged', - 'camouflages', - 'camouflagic', - 'camouflaging', - 'campaigned', - 'campaigner', - 'campaigners', - 'campaigning', - 'campaniles', - 'campanologies', - 'campanologist', - 'campanologists', - 'campanology', - 'campanulas', - 'campanulate', - 'campcrafts', - 'campesinos', - 'campestral', - 'campground', - 'campgrounds', - 'camphoraceous', - 'camphorate', - 'camphorated', - 'camphorates', - 'camphorating', - 'campinesses', - 'campylobacter', - 'campylobacters', - 'campylotropous', - 'canalicular', - 'canaliculi', - 'canaliculus', - 'canalising', - 'canalization', - 'canalizations', - 'canalizing', - 'cancelable', - 'cancelation', - 'cancelations', - 'cancellable', - 'cancellation', - 'cancellations', - 'cancellers', - 'cancelling', - 'cancellous', - 'cancerously', - 'candelabra', - 'candelabras', - 'candelabrum', - 'candelabrums', - 'candescence', - 'candescences', - 'candescent', - 'candidacies', - 'candidates', - 'candidature', - 'candidatures', - 'candidiases', - 'candidiasis', - 'candidness', - 'candidnesses', - 'candleberries', - 'candleberry', - 'candlefish', - 'candlefishes', - 'candleholder', - 'candleholders', - 'candlelight', - 'candlelighted', - 'candlelighter', - 'candlelighters', - 'candlelights', - 'candlenuts', - 'candlepins', - 'candlepower', - 'candlepowers', - 'candlesnuffer', - 'candlesnuffers', - 'candlestick', - 'candlesticks', - 'candlewick', - 'candlewicks', - 'candlewood', - 'candlewoods', - 'candyfloss', - 'candyflosses', - 'candytufts', - 'canebrakes', - 'caninities', - 'cankerworm', - 'cankerworms', - 'cannabinoid', - 'cannabinoids', - 'cannabinol', - 'cannabinols', - 'cannabises', - 'cannelloni', - 'cannibalise', - 'cannibalised', - 'cannibalises', - 'cannibalising', - 'cannibalism', - 'cannibalisms', - 'cannibalistic', - 'cannibalization', - 'cannibalizations', - 'cannibalize', - 'cannibalized', - 'cannibalizes', - 'cannibalizing', - 'canninesses', - 'cannisters', - 'cannonaded', - 'cannonades', - 'cannonading', - 'cannonball', - 'cannonballed', - 'cannonballing', - 'cannonballs', - 'cannoneers', - 'cannonries', - 'canonesses', - 'canonically', - 'canonicals', - 'canonicities', - 'canonicity', - 'canonising', - 'canonization', - 'canonizations', - 'canonizing', - 'canoodling', - 'canorously', - 'canorousness', - 'canorousnesses', - 'cantaloupe', - 'cantaloupes', - 'cantaloups', - 'cantankerous', - 'cantankerously', - 'cantankerousness', - 'cantankerousnesses', - 'cantatrice', - 'cantatrices', - 'cantatrici', - 'cantharides', - 'cantharidin', - 'cantharidins', - 'canthaxanthin', - 'canthaxanthins', - 'cantilenas', - 'cantilever', - 'cantilevered', - 'cantilevering', - 'cantilevers', - 'cantillate', - 'cantillated', - 'cantillates', - 'cantillating', - 'cantillation', - 'cantillations', - 'cantonment', - 'cantonments', - 'canulating', - 'canvasback', - 'canvasbacks', - 'canvaslike', - 'canvassers', - 'canvassing', - 'caoutchouc', - 'caoutchoucs', - 'capabilities', - 'capability', - 'capableness', - 'capablenesses', - 'capaciously', - 'capaciousness', - 'capaciousnesses', - 'capacitance', - 'capacitances', - 'capacitate', - 'capacitated', - 'capacitates', - 'capacitating', - 'capacitation', - 'capacitations', - 'capacities', - 'capacitive', - 'capacitively', - 'capacitors', - 'caparisoned', - 'caparisoning', - 'caparisons', - 'capercaillie', - 'capercaillies', - 'capercailzie', - 'capercailzies', - 'capillaries', - 'capillarities', - 'capillarity', - 'capitalise', - 'capitalised', - 'capitalises', - 'capitalising', - 'capitalism', - 'capitalisms', - 'capitalist', - 'capitalistic', - 'capitalistically', - 'capitalists', - 'capitalization', - 'capitalizations', - 'capitalize', - 'capitalized', - 'capitalizes', - 'capitalizing', - 'capitation', - 'capitations', - 'capitularies', - 'capitulary', - 'capitulate', - 'capitulated', - 'capitulates', - 'capitulating', - 'capitulation', - 'capitulations', - 'caponizing', - 'cappelletti', - 'cappuccino', - 'cappuccinos', - 'capriccios', - 'capricious', - 'capriciously', - 'capriciousness', - 'capriciousnesses', - 'caprification', - 'caprifications', - 'caprioling', - 'caprolactam', - 'caprolactams', - 'capsaicins', - 'capsulated', - 'capsulized', - 'capsulizes', - 'capsulizing', - 'captaincies', - 'captaining', - 'captainship', - 'captainships', - 'captioning', - 'captionless', - 'captiously', - 'captiousness', - 'captiousnesses', - 'captivated', - 'captivates', - 'captivating', - 'captivation', - 'captivations', - 'captivator', - 'captivators', - 'captivities', - 'captoprils', - 'carabineer', - 'carabineers', - 'carabinero', - 'carabineros', - 'carabiners', - 'carabinier', - 'carabiniere', - 'carabinieri', - 'carabiniers', - 'caracoling', - 'caracolled', - 'caracolling', - 'carambolas', - 'caramelise', - 'caramelised', - 'caramelises', - 'caramelising', - 'caramelize', - 'caramelized', - 'caramelizes', - 'caramelizing', - 'caravaners', - 'caravaning', - 'caravanned', - 'caravanner', - 'caravanners', - 'caravanning', - 'caravansaries', - 'caravansary', - 'caravanserai', - 'caravanserais', - 'carbachols', - 'carbamates', - 'carbamides', - 'carbanions', - 'carbazoles', - 'carbocyclic', - 'carbohydrase', - 'carbohydrases', - 'carbohydrate', - 'carbohydrates', - 'carbonaceous', - 'carbonades', - 'carbonadoed', - 'carbonadoes', - 'carbonadoing', - 'carbonados', - 'carbonaras', - 'carbonated', - 'carbonates', - 'carbonating', - 'carbonation', - 'carbonations', - 'carboniferous', - 'carbonization', - 'carbonizations', - 'carbonized', - 'carbonizes', - 'carbonizing', - 'carbonless', - 'carbonnade', - 'carbonnades', - 'carbonylation', - 'carbonylations', - 'carbonylic', - 'carboxylase', - 'carboxylases', - 'carboxylate', - 'carboxylated', - 'carboxylates', - 'carboxylating', - 'carboxylation', - 'carboxylations', - 'carboxylic', - 'carboxymethylcellulose', - 'carboxymethylcelluloses', - 'carboxypeptidase', - 'carboxypeptidases', - 'carbuncled', - 'carbuncles', - 'carbuncular', - 'carbureted', - 'carbureting', - 'carburetion', - 'carburetions', - 'carburetor', - 'carburetors', - 'carburetted', - 'carburetter', - 'carburetters', - 'carburetting', - 'carburettor', - 'carburettors', - 'carburised', - 'carburises', - 'carburising', - 'carburization', - 'carburizations', - 'carburized', - 'carburizes', - 'carburizing', - 'carcinogen', - 'carcinogeneses', - 'carcinogenesis', - 'carcinogenic', - 'carcinogenicities', - 'carcinogenicity', - 'carcinogens', - 'carcinoids', - 'carcinomas', - 'carcinomata', - 'carcinomatoses', - 'carcinomatosis', - 'carcinomatosises', - 'carcinomatous', - 'carcinosarcoma', - 'carcinosarcomas', - 'carcinosarcomata', - 'cardboards', - 'cardholder', - 'cardholders', - 'cardinalate', - 'cardinalates', - 'cardinalities', - 'cardinality', - 'cardinally', - 'cardinalship', - 'cardinalships', - 'cardiogenic', - 'cardiogram', - 'cardiograms', - 'cardiograph', - 'cardiographic', - 'cardiographies', - 'cardiographs', - 'cardiography', - 'cardiological', - 'cardiologies', - 'cardiologist', - 'cardiologists', - 'cardiology', - 'cardiomyopathies', - 'cardiomyopathy', - 'cardiopathies', - 'cardiopathy', - 'cardiopulmonary', - 'cardiorespiratory', - 'cardiothoracic', - 'cardiotonic', - 'cardiotonics', - 'cardiovascular', - 'carditises', - 'cardplayer', - 'cardplayers', - 'cardsharper', - 'cardsharpers', - 'cardsharps', - 'careerisms', - 'careerists', - 'carefuller', - 'carefullest', - 'carefulness', - 'carefulnesses', - 'caregivers', - 'caregiving', - 'caregivings', - 'carelessly', - 'carelessness', - 'carelessnesses', - 'caressingly', - 'caressively', - 'caretakers', - 'caretaking', - 'caretakings', - 'caricatural', - 'caricature', - 'caricatured', - 'caricatures', - 'caricaturing', - 'caricaturist', - 'caricaturists', - 'carillonned', - 'carillonneur', - 'carillonneurs', - 'carillonning', - 'cariogenic', - 'carjackers', - 'carjacking', - 'carjackings', - 'carmagnole', - 'carmagnoles', - 'carminative', - 'carminatives', - 'carnalities', - 'carnallite', - 'carnallites', - 'carnassial', - 'carnassials', - 'carnations', - 'carnelians', - 'carnifying', - 'carnitines', - 'carnivores', - 'carnivorous', - 'carnivorously', - 'carnivorousness', - 'carnivorousnesses', - 'carnotites', - 'carotenoid', - 'carotenoids', - 'carotinoid', - 'carotinoids', - 'carpaccios', - 'carpellary', - 'carpellate', - 'carpentered', - 'carpentering', - 'carpenters', - 'carpentries', - 'carpetbagger', - 'carpetbaggeries', - 'carpetbaggers', - 'carpetbaggery', - 'carpetbagging', - 'carpetbags', - 'carpetings', - 'carpetweed', - 'carpetweeds', - 'carpogonia', - 'carpogonial', - 'carpogonium', - 'carpoolers', - 'carpooling', - 'carpophore', - 'carpophores', - 'carpospore', - 'carpospores', - 'carrageenan', - 'carrageenans', - 'carrageenin', - 'carrageenins', - 'carrageens', - 'carragheen', - 'carragheens', - 'carrefours', - 'carriageway', - 'carriageways', - 'carritches', - 'carronades', - 'carrotiest', - 'carrottopped', - 'carrottops', - 'carrousels', - 'carrybacks', - 'carryforward', - 'carryforwards', - 'carryovers', - 'carsickness', - 'carsicknesses', - 'cartelised', - 'cartelises', - 'cartelising', - 'cartelization', - 'cartelizations', - 'cartelized', - 'cartelizes', - 'cartelizing', - 'cartilages', - 'cartilaginous', - 'cartographer', - 'cartographers', - 'cartographic', - 'cartographical', - 'cartographically', - 'cartographies', - 'cartography', - 'cartooning', - 'cartoonings', - 'cartoonish', - 'cartoonishly', - 'cartoonist', - 'cartoonists', - 'cartoonlike', - 'cartoppers', - 'cartouches', - 'cartridges', - 'cartularies', - 'cartwheeled', - 'cartwheeler', - 'cartwheelers', - 'cartwheeling', - 'cartwheels', - 'carvacrols', - 'caryatides', - 'caryopsides', - 'cascarilla', - 'cascarillas', - 'caseations', - 'casebearer', - 'casebearers', - 'caseinates', - 'caseworker', - 'caseworkers', - 'cashiering', - 'casseroles', - 'cassimeres', - 'cassiterite', - 'cassiterites', - 'cassoulets', - 'cassowaries', - 'castabilities', - 'castability', - 'castellans', - 'castellated', - 'castigated', - 'castigates', - 'castigating', - 'castigation', - 'castigations', - 'castigator', - 'castigators', - 'castoreums', - 'castrating', - 'castration', - 'castrations', - 'castrators', - 'castratory', - 'casualness', - 'casualnesses', - 'casualties', - 'casuarinas', - 'casuistical', - 'casuistries', - 'catabolically', - 'catabolism', - 'catabolisms', - 'catabolite', - 'catabolites', - 'catabolize', - 'catabolized', - 'catabolizes', - 'catabolizing', - 'catachreses', - 'catachresis', - 'catachrestic', - 'catachrestical', - 'catachrestically', - 'cataclysmal', - 'cataclysmic', - 'cataclysmically', - 'cataclysms', - 'catadioptric', - 'catadromous', - 'catafalque', - 'catafalques', - 'catalectic', - 'catalectics', - 'catalepsies', - 'cataleptic', - 'cataleptically', - 'cataleptics', - 'catalogers', - 'cataloging', - 'catalogued', - 'cataloguer', - 'cataloguers', - 'catalogues', - 'cataloguing', - 'catalytically', - 'catalyzers', - 'catalyzing', - 'catamarans', - 'catamenial', - 'catamounts', - 'cataphoras', - 'cataphoreses', - 'cataphoresis', - 'cataphoretic', - 'cataphoretically', - 'cataphoric', - 'cataplasms', - 'cataplexies', - 'catapulted', - 'catapulting', - 'cataractous', - 'catarrhally', - 'catarrhine', - 'catarrhines', - 'catastrophe', - 'catastrophes', - 'catastrophic', - 'catastrophically', - 'catastrophism', - 'catastrophisms', - 'catastrophist', - 'catastrophists', - 'catatonias', - 'catatonically', - 'catatonics', - 'catcalling', - 'catchflies', - 'catchments', - 'catchpenny', - 'catchphrase', - 'catchphrases', - 'catchpoles', - 'catchpolls', - 'catchwords', - 'catecheses', - 'catechesis', - 'catechetical', - 'catechismal', - 'catechisms', - 'catechistic', - 'catechists', - 'catechization', - 'catechizations', - 'catechized', - 'catechizer', - 'catechizers', - 'catechizes', - 'catechizing', - 'catecholamine', - 'catecholaminergic', - 'catecholamines', - 'catechumen', - 'catechumens', - 'categorical', - 'categorically', - 'categories', - 'categorise', - 'categorised', - 'categorises', - 'categorising', - 'categorization', - 'categorizations', - 'categorize', - 'categorized', - 'categorizes', - 'categorizing', - 'catenaries', - 'catenating', - 'catenation', - 'catenations', - 'catercorner', - 'catercornered', - 'cateresses', - 'caterpillar', - 'caterpillars', - 'caterwauled', - 'caterwauling', - 'caterwauls', - 'catfacings', - 'cathartics', - 'cathecting', - 'cathedrals', - 'cathepsins', - 'catheterization', - 'catheterizations', - 'catheterize', - 'catheterized', - 'catheterizes', - 'catheterizing', - 'cathodally', - 'cathodically', - 'catholically', - 'catholicate', - 'catholicates', - 'catholicities', - 'catholicity', - 'catholicize', - 'catholicized', - 'catholicizes', - 'catholicizing', - 'catholicoi', - 'catholicon', - 'catholicons', - 'catholicos', - 'catholicoses', - 'cationically', - 'catnappers', - 'catnapping', - 'cattinesses', - 'caucussing', - 'caudillismo', - 'caudillismos', - 'cauliflower', - 'caulifloweret', - 'cauliflowerets', - 'cauliflowers', - 'causalgias', - 'causalities', - 'causations', - 'causatively', - 'causatives', - 'causewayed', - 'causewaying', - 'caustically', - 'causticities', - 'causticity', - 'cauterization', - 'cauterizations', - 'cauterized', - 'cauterizes', - 'cauterizing', - 'cautionary', - 'cautioning', - 'cautiously', - 'cautiousness', - 'cautiousnesses', - 'cavalcades', - 'cavaliered', - 'cavaliering', - 'cavalierism', - 'cavalierisms', - 'cavalierly', - 'cavalletti', - 'cavalryman', - 'cavalrymen', - 'cavefishes', - 'cavernicolous', - 'cavernously', - 'cavitating', - 'cavitation', - 'cavitations', - 'ceanothuses', - 'ceaselessly', - 'ceaselessness', - 'ceaselessnesses', - 'cedarbirds', - 'cedarwoods', - 'ceilometer', - 'ceilometers', - 'celandines', - 'celebrants', - 'celebrated', - 'celebratedness', - 'celebratednesses', - 'celebrates', - 'celebrating', - 'celebration', - 'celebrations', - 'celebrator', - 'celebrators', - 'celebratory', - 'celebrities', - 'celerities', - 'celestially', - 'celestials', - 'celestites', - 'celibacies', - 'cellarages', - 'cellarette', - 'cellarettes', - 'cellblocks', - 'cellobiose', - 'cellobioses', - 'celloidins', - 'cellophane', - 'cellophanes', - 'cellularities', - 'cellularity', - 'cellulases', - 'cellulites', - 'cellulitides', - 'cellulitis', - 'cellulitises', - 'celluloids', - 'cellulolytic', - 'celluloses', - 'cellulosic', - 'cellulosics', - 'cementation', - 'cementations', - 'cementites', - 'cementitious', - 'cemeteries', - 'cenospecies', - 'censorious', - 'censoriously', - 'censoriousness', - 'censoriousnesses', - 'censorship', - 'censorships', - 'censurable', - 'centaureas', - 'centauries', - 'centenarian', - 'centenarians', - 'centenaries', - 'centennial', - 'centennially', - 'centennials', - 'centerboard', - 'centerboards', - 'centeredness', - 'centerednesses', - 'centerfold', - 'centerfolds', - 'centerless', - 'centerline', - 'centerlines', - 'centerpiece', - 'centerpieces', - 'centesimal', - 'centesimos', - 'centigrade', - 'centigrams', - 'centiliter', - 'centiliters', - 'centillion', - 'centillions', - 'centimeter', - 'centimeters', - 'centimorgan', - 'centimorgans', - 'centipedes', - 'centralest', - 'centralise', - 'centralised', - 'centralises', - 'centralising', - 'centralism', - 'centralisms', - 'centralist', - 'centralistic', - 'centralists', - 'centralities', - 'centrality', - 'centralization', - 'centralizations', - 'centralize', - 'centralized', - 'centralizer', - 'centralizers', - 'centralizes', - 'centralizing', - 'centrically', - 'centricities', - 'centricity', - 'centrifugal', - 'centrifugally', - 'centrifugals', - 'centrifugation', - 'centrifugations', - 'centrifuge', - 'centrifuged', - 'centrifuges', - 'centrifuging', - 'centrioles', - 'centripetal', - 'centripetally', - 'centromere', - 'centromeres', - 'centromeric', - 'centrosome', - 'centrosomes', - 'centrosymmetric', - 'centupling', - 'centurions', - 'cephalexin', - 'cephalexins', - 'cephalically', - 'cephalization', - 'cephalizations', - 'cephalometric', - 'cephalometries', - 'cephalometry', - 'cephalopod', - 'cephalopods', - 'cephaloridine', - 'cephaloridines', - 'cephalosporin', - 'cephalosporins', - 'cephalothin', - 'cephalothins', - 'cephalothoraces', - 'cephalothorax', - 'cephalothoraxes', - 'ceramicist', - 'ceramicists', - 'ceratopsian', - 'ceratopsians', - 'cerebellar', - 'cerebellum', - 'cerebellums', - 'cerebrally', - 'cerebrated', - 'cerebrates', - 'cerebrating', - 'cerebration', - 'cerebrations', - 'cerebroside', - 'cerebrosides', - 'cerebrospinal', - 'cerebrovascular', - 'cerecloths', - 'ceremonial', - 'ceremonialism', - 'ceremonialisms', - 'ceremonialist', - 'ceremonialists', - 'ceremonially', - 'ceremonials', - 'ceremonies', - 'ceremonious', - 'ceremoniously', - 'ceremoniousness', - 'ceremoniousnesses', - 'certainest', - 'certainties', - 'certifiable', - 'certifiably', - 'certificate', - 'certificated', - 'certificates', - 'certificating', - 'certification', - 'certifications', - 'certificatory', - 'certifiers', - 'certifying', - 'certiorari', - 'certioraris', - 'certitudes', - 'ceruloplasmin', - 'ceruloplasmins', - 'ceruminous', - 'cerussites', - 'cervelases', - 'cervicites', - 'cervicitides', - 'cervicitis', - 'cervicitises', - 'cessations', - 'cetologies', - 'cetologist', - 'cetologists', - 'chaetognath', - 'chaetognaths', - 'chafferers', - 'chaffering', - 'chaffinches', - 'chagrining', - 'chagrinned', - 'chagrinning', - 'chainsawed', - 'chainsawing', - 'chainwheel', - 'chainwheels', - 'chairlifts', - 'chairmaned', - 'chairmaning', - 'chairmanned', - 'chairmanning', - 'chairmanship', - 'chairmanships', - 'chairperson', - 'chairpersons', - 'chairwoman', - 'chairwomen', - 'chalazions', - 'chalcedonic', - 'chalcedonies', - 'chalcedony', - 'chalcocite', - 'chalcocites', - 'chalcogenide', - 'chalcogenides', - 'chalcogens', - 'chalcopyrite', - 'chalcopyrites', - 'chalkboard', - 'chalkboards', - 'challenged', - 'challenger', - 'challengers', - 'challenges', - 'challenging', - 'challengingly', - 'chalybeate', - 'chalybeates', - 'chamaephyte', - 'chamaephytes', - 'chambering', - 'chamberlain', - 'chamberlains', - 'chambermaid', - 'chambermaids', - 'chameleonic', - 'chameleonlike', - 'chameleons', - 'chamfering', - 'chamoising', - 'chamomiles', - 'champagnes', - 'champaigns', - 'champerties', - 'champertous', - 'champignon', - 'champignons', - 'championed', - 'championing', - 'championship', - 'championships', - 'champleves', - 'chancelleries', - 'chancellery', - 'chancellor', - 'chancellories', - 'chancellors', - 'chancellorship', - 'chancellorships', - 'chancellory', - 'chanceries', - 'chanciness', - 'chancinesses', - 'chancroidal', - 'chancroids', - 'chandelier', - 'chandeliered', - 'chandeliers', - 'chandelled', - 'chandelles', - 'chandelling', - 'chandleries', - 'changeabilities', - 'changeability', - 'changeable', - 'changeableness', - 'changeablenesses', - 'changeably', - 'changefully', - 'changefulness', - 'changefulnesses', - 'changeless', - 'changelessly', - 'changelessness', - 'changelessnesses', - 'changeling', - 'changelings', - 'changeover', - 'changeovers', - 'channelers', - 'channeling', - 'channelization', - 'channelizations', - 'channelize', - 'channelized', - 'channelizes', - 'channelizing', - 'channelled', - 'channelling', - 'chansonnier', - 'chansonniers', - 'chanterelle', - 'chanterelles', - 'chanteuses', - 'chanticleer', - 'chanticleers', - 'chaotically', - 'chaparajos', - 'chaparejos', - 'chaparrals', - 'chaperonage', - 'chaperonages', - 'chaperoned', - 'chaperones', - 'chaperoning', - 'chapfallen', - 'chaplaincies', - 'chaplaincy', - 'chaptering', - 'charabancs', - 'charactered', - 'characterful', - 'characteries', - 'charactering', - 'characteristic', - 'characteristically', - 'characteristics', - 'characterization', - 'characterizations', - 'characterize', - 'characterized', - 'characterizes', - 'characterizing', - 'characterless', - 'characterological', - 'characterologically', - 'characters', - 'charactery', - 'charbroiled', - 'charbroiler', - 'charbroilers', - 'charbroiling', - 'charbroils', - 'charcoaled', - 'charcoaling', - 'charcuterie', - 'charcuteries', - 'chardonnay', - 'chardonnays', - 'chargeable', - 'chargehand', - 'chargehands', - 'charinesses', - 'charioteer', - 'charioteers', - 'charioting', - 'charismata', - 'charismatic', - 'charismatics', - 'charitable', - 'charitableness', - 'charitablenesses', - 'charitably', - 'charivaris', - 'charladies', - 'charlatanism', - 'charlatanisms', - 'charlatanries', - 'charlatanry', - 'charlatans', - 'charlottes', - 'charmeuses', - 'charminger', - 'charmingest', - 'charmingly', - 'charterers', - 'chartering', - 'chartreuse', - 'chartreuses', - 'chartularies', - 'chartulary', - 'chassepots', - 'chasteners', - 'chasteness', - 'chastenesses', - 'chastening', - 'chastisement', - 'chastisements', - 'chastisers', - 'chastising', - 'chastities', - 'chateaubriand', - 'chateaubriands', - 'chatelaine', - 'chatelaines', - 'chatelains', - 'chatoyance', - 'chatoyances', - 'chatoyancies', - 'chatoyancy', - 'chatoyants', - 'chatterbox', - 'chatterboxes', - 'chatterers', - 'chattering', - 'chattiness', - 'chattinesses', - 'chauffeured', - 'chauffeuring', - 'chauffeurs', - 'chaulmoogra', - 'chaulmoogras', - 'chaussures', - 'chautauqua', - 'chautauquas', - 'chauvinism', - 'chauvinisms', - 'chauvinist', - 'chauvinistic', - 'chauvinistically', - 'chauvinists', - 'chawbacons', - 'cheapening', - 'cheapishly', - 'cheapjacks', - 'cheapnesses', - 'cheapskate', - 'cheapskates', - 'checkbooks', - 'checkerberries', - 'checkerberry', - 'checkerboard', - 'checkerboards', - 'checkering', - 'checklists', - 'checkmarked', - 'checkmarking', - 'checkmarks', - 'checkmated', - 'checkmates', - 'checkmating', - 'checkpoint', - 'checkpoints', - 'checkreins', - 'checkrooms', - 'checkrowed', - 'checkrowing', - 'cheechakos', - 'cheekbones', - 'cheekiness', - 'cheekinesses', - 'cheerfuller', - 'cheerfullest', - 'cheerfully', - 'cheerfulness', - 'cheerfulnesses', - 'cheeriness', - 'cheerinesses', - 'cheerleader', - 'cheerleaders', - 'cheerleading', - 'cheerleads', - 'cheerlessly', - 'cheerlessness', - 'cheerlessnesses', - 'cheeseburger', - 'cheeseburgers', - 'cheesecake', - 'cheesecakes', - 'cheesecloth', - 'cheesecloths', - 'cheeseparing', - 'cheeseparings', - 'cheesiness', - 'cheesinesses', - 'chelatable', - 'chelations', - 'chelicerae', - 'cheliceral', - 'chelonians', - 'chemically', - 'chemiluminescence', - 'chemiluminescences', - 'chemiluminescent', - 'chemiosmotic', - 'chemisette', - 'chemisettes', - 'chemisorbed', - 'chemisorbing', - 'chemisorbs', - 'chemisorption', - 'chemisorptions', - 'chemistries', - 'chemoautotrophic', - 'chemoautotrophies', - 'chemoautotrophy', - 'chemoprophylactic', - 'chemoprophylaxes', - 'chemoprophylaxis', - 'chemoreception', - 'chemoreceptions', - 'chemoreceptive', - 'chemoreceptor', - 'chemoreceptors', - 'chemosurgeries', - 'chemosurgery', - 'chemosurgical', - 'chemosyntheses', - 'chemosynthesis', - 'chemosynthetic', - 'chemotactic', - 'chemotactically', - 'chemotaxes', - 'chemotaxis', - 'chemotaxonomic', - 'chemotaxonomies', - 'chemotaxonomist', - 'chemotaxonomists', - 'chemotaxonomy', - 'chemotherapeutic', - 'chemotherapeutically', - 'chemotherapeutics', - 'chemotherapies', - 'chemotherapist', - 'chemotherapists', - 'chemotherapy', - 'chemotropism', - 'chemotropisms', - 'chemurgies', - 'cheongsams', - 'chequering', - 'cherimoyas', - 'cherishable', - 'cherishers', - 'cherishing', - 'chernozemic', - 'chernozems', - 'cherrylike', - 'cherrystone', - 'cherrystones', - 'cherubically', - 'cherublike', - 'chessboard', - 'chessboards', - 'chesterfield', - 'chesterfields', - 'chevaliers', - 'chevelures', - 'chiaroscurist', - 'chiaroscurists', - 'chiaroscuro', - 'chiaroscuros', - 'chiasmatic', - 'chibouques', - 'chicaneries', - 'chiccories', - 'chickadees', - 'chickarees', - 'chickenhearted', - 'chickening', - 'chickenpox', - 'chickenpoxes', - 'chickenshit', - 'chickenshits', - 'chickories', - 'chickweeds', - 'chicnesses', - 'chiefships', - 'chieftaincies', - 'chieftaincy', - 'chieftains', - 'chieftainship', - 'chieftainships', - 'chiffchaff', - 'chiffchaffs', - 'chiffonade', - 'chiffonades', - 'chiffonier', - 'chiffoniers', - 'chifforobe', - 'chifforobes', - 'chihuahuas', - 'chilblains', - 'childbearing', - 'childbearings', - 'childbirth', - 'childbirths', - 'childhoods', - 'childishly', - 'childishness', - 'childishnesses', - 'childlessness', - 'childlessnesses', - 'childliest', - 'childlikeness', - 'childlikenesses', - 'childproof', - 'childproofed', - 'childproofing', - 'childproofs', - 'chiliastic', - 'chilliness', - 'chillinesses', - 'chillingly', - 'chillnesses', - 'chimaerism', - 'chimaerisms', - 'chimerical', - 'chimerically', - 'chimerisms', - 'chimichanga', - 'chimichangas', - 'chimneylike', - 'chimneypiece', - 'chimneypieces', - 'chimpanzee', - 'chimpanzees', - 'chinaberries', - 'chinaberry', - 'chinawares', - 'chincherinchee', - 'chincherinchees', - 'chinchiest', - 'chinchilla', - 'chinchillas', - 'chinkapins', - 'chinoiserie', - 'chinoiseries', - 'chinquapin', - 'chinquapins', - 'chintziest', - 'chionodoxa', - 'chionodoxas', - 'chipboards', - 'chippering', - 'chiralities', - 'chirimoyas', - 'chirographer', - 'chirographers', - 'chirographic', - 'chirographical', - 'chirographies', - 'chirography', - 'chiromancer', - 'chiromancers', - 'chiromancies', - 'chiromancy', - 'chironomid', - 'chironomids', - 'chiropodies', - 'chiropodist', - 'chiropodists', - 'chiropractic', - 'chiropractics', - 'chiropractor', - 'chiropractors', - 'chiropteran', - 'chiropterans', - 'chirruping', - 'chirurgeon', - 'chirurgeons', - 'chisellers', - 'chiselling', - 'chitchatted', - 'chitchatting', - 'chittering', - 'chitterlings', - 'chivalries', - 'chivalrous', - 'chivalrously', - 'chivalrousness', - 'chivalrousnesses', - 'chivareeing', - 'chivariing', - 'chlamydiae', - 'chlamydial', - 'chlamydospore', - 'chlamydospores', - 'chloasmata', - 'chloracnes', - 'chloralose', - 'chloralosed', - 'chloraloses', - 'chloramine', - 'chloramines', - 'chloramphenicol', - 'chloramphenicols', - 'chlordanes', - 'chlordiazepoxide', - 'chlordiazepoxides', - 'chlorellas', - 'chlorenchyma', - 'chlorenchymas', - 'chlorenchymata', - 'chlorinate', - 'chlorinated', - 'chlorinates', - 'chlorinating', - 'chlorination', - 'chlorinations', - 'chlorinator', - 'chlorinators', - 'chlorinities', - 'chlorinity', - 'chlorobenzene', - 'chlorobenzenes', - 'chlorofluorocarbon', - 'chlorofluorocarbons', - 'chlorofluoromethane', - 'chlorofluoromethanes', - 'chloroform', - 'chloroformed', - 'chloroforming', - 'chloroforms', - 'chlorohydrin', - 'chlorohydrins', - 'chlorophyll', - 'chlorophyllous', - 'chlorophylls', - 'chloropicrin', - 'chloropicrins', - 'chloroplast', - 'chloroplastic', - 'chloroplasts', - 'chloroprene', - 'chloroprenes', - 'chloroquine', - 'chloroquines', - 'chlorothiazide', - 'chlorothiazides', - 'chlorpromazine', - 'chlorpromazines', - 'chlorpropamide', - 'chlorpropamides', - 'chlortetracycline', - 'chlortetracyclines', - 'choanocyte', - 'choanocytes', - 'chockablock', - 'chocoholic', - 'chocoholics', - 'chocolates', - 'chocolatey', - 'chocolatier', - 'chocolatiers', - 'choiceness', - 'choicenesses', - 'choirmaster', - 'choirmasters', - 'chokeberries', - 'chokeberry', - 'chokecherries', - 'chokecherry', - 'cholangiogram', - 'cholangiograms', - 'cholangiographic', - 'cholangiographies', - 'cholangiography', - 'cholecalciferol', - 'cholecalciferols', - 'cholecystectomies', - 'cholecystectomized', - 'cholecystectomy', - 'cholecystites', - 'cholecystitides', - 'cholecystitis', - 'cholecystitises', - 'cholecystokinin', - 'cholecystokinins', - 'cholelithiases', - 'cholelithiasis', - 'cholerically', - 'cholestases', - 'cholestasis', - 'cholestatic', - 'cholesteric', - 'cholesterol', - 'cholesterols', - 'cholestyramine', - 'cholestyramines', - 'cholinergic', - 'cholinergically', - 'cholinesterase', - 'cholinesterases', - 'chondriosome', - 'chondriosomes', - 'chondrites', - 'chondritic', - 'chondrocrania', - 'chondrocranium', - 'chondrocraniums', - 'chondroitin', - 'chondroitins', - 'chondrules', - 'chopfallen', - 'chophouses', - 'choplogics', - 'choppering', - 'choppiness', - 'choppinesses', - 'chopsticks', - 'choraguses', - 'chordamesoderm', - 'chordamesodermal', - 'chordamesoderms', - 'choreguses', - 'choreiform', - 'choreograph', - 'choreographed', - 'choreographer', - 'choreographers', - 'choreographic', - 'choreographically', - 'choreographies', - 'choreographing', - 'choreographs', - 'choreography', - 'chorioallantoic', - 'chorioallantoides', - 'chorioallantois', - 'choriocarcinoma', - 'choriocarcinomas', - 'choriocarcinomata', - 'choristers', - 'chorographer', - 'chorographers', - 'chorographic', - 'chorographies', - 'chorography', - 'chorussing', - 'chowderhead', - 'chowderheaded', - 'chowderheads', - 'chowdering', - 'chowhounds', - 'chrestomathies', - 'chrestomathy', - 'chrismation', - 'chrismations', - 'christened', - 'christening', - 'christenings', - 'christiania', - 'christianias', - 'chromaffin', - 'chromatically', - 'chromaticism', - 'chromaticisms', - 'chromaticities', - 'chromaticity', - 'chromatics', - 'chromatids', - 'chromatinic', - 'chromatins', - 'chromatogram', - 'chromatograms', - 'chromatograph', - 'chromatographed', - 'chromatographer', - 'chromatographers', - 'chromatographic', - 'chromatographically', - 'chromatographies', - 'chromatographing', - 'chromatographs', - 'chromatography', - 'chromatolyses', - 'chromatolysis', - 'chromatolytic', - 'chromatophore', - 'chromatophores', - 'chrominance', - 'chrominances', - 'chromizing', - 'chromocenter', - 'chromocenters', - 'chromodynamics', - 'chromogenic', - 'chromogens', - 'chromolithograph', - 'chromolithographed', - 'chromolithographer', - 'chromolithographers', - 'chromolithographic', - 'chromolithographies', - 'chromolithographing', - 'chromolithographs', - 'chromolithography', - 'chromomere', - 'chromomeres', - 'chromomeric', - 'chromonema', - 'chromonemata', - 'chromonematic', - 'chromophil', - 'chromophobe', - 'chromophore', - 'chromophores', - 'chromophoric', - 'chromoplast', - 'chromoplasts', - 'chromoprotein', - 'chromoproteins', - 'chromosomal', - 'chromosomally', - 'chromosome', - 'chromosomes', - 'chromosphere', - 'chromospheres', - 'chromospheric', - 'chronaxies', - 'chronically', - 'chronicities', - 'chronicity', - 'chronicled', - 'chronicler', - 'chroniclers', - 'chronicles', - 'chronicling', - 'chronobiologic', - 'chronobiological', - 'chronobiologies', - 'chronobiologist', - 'chronobiologists', - 'chronobiology', - 'chronogram', - 'chronograms', - 'chronograph', - 'chronographic', - 'chronographies', - 'chronographs', - 'chronography', - 'chronologer', - 'chronologers', - 'chronologic', - 'chronological', - 'chronologically', - 'chronologies', - 'chronologist', - 'chronologists', - 'chronology', - 'chronometer', - 'chronometers', - 'chronometric', - 'chronometrical', - 'chronometrically', - 'chronometries', - 'chronometry', - 'chronotherapies', - 'chronotherapy', - 'chrysalides', - 'chrysalids', - 'chrysalises', - 'chrysanthemum', - 'chrysanthemums', - 'chrysarobin', - 'chrysarobins', - 'chrysoberyl', - 'chrysoberyls', - 'chrysolite', - 'chrysolites', - 'chrysomelid', - 'chrysomelids', - 'chrysophyte', - 'chrysophytes', - 'chrysoprase', - 'chrysoprases', - 'chrysotile', - 'chrysotiles', - 'chubbiness', - 'chubbinesses', - 'chuckawalla', - 'chuckawallas', - 'chuckholes', - 'chucklehead', - 'chuckleheaded', - 'chuckleheads', - 'chucklesome', - 'chucklingly', - 'chuckwalla', - 'chuckwallas', - 'chugalugged', - 'chugalugging', - 'chumminess', - 'chumminesses', - 'chuntering', - 'churchgoer', - 'churchgoers', - 'churchgoing', - 'churchgoings', - 'churchianities', - 'churchianity', - 'churchiest', - 'churchings', - 'churchless', - 'churchlier', - 'churchliest', - 'churchliness', - 'churchlinesses', - 'churchmanship', - 'churchmanships', - 'churchwarden', - 'churchwardens', - 'churchwoman', - 'churchwomen', - 'churchyard', - 'churchyards', - 'churlishly', - 'churlishness', - 'churlishnesses', - 'churrigueresque', - 'chylomicron', - 'chylomicrons', - 'chymotrypsin', - 'chymotrypsinogen', - 'chymotrypsinogens', - 'chymotrypsins', - 'chymotryptic', - 'cicatrices', - 'cicatricial', - 'cicatrixes', - 'cicatrization', - 'cicatrizations', - 'cicatrized', - 'cicatrizes', - 'cicatrizing', - 'cicisbeism', - 'cicisbeisms', - 'cigarettes', - 'cigarillos', - 'ciguateras', - 'ciliations', - 'cimetidine', - 'cimetidines', - 'cinchonine', - 'cinchonines', - 'cinchonism', - 'cinchonisms', - 'cincturing', - 'cinemagoer', - 'cinemagoers', - 'cinematheque', - 'cinematheques', - 'cinematically', - 'cinematize', - 'cinematized', - 'cinematizes', - 'cinematizing', - 'cinematograph', - 'cinematographer', - 'cinematographers', - 'cinematographic', - 'cinematographically', - 'cinematographies', - 'cinematographs', - 'cinematography', - 'cinerarias', - 'cinerarium', - 'cinnabarine', - 'cinquecentist', - 'cinquecentisti', - 'cinquecentists', - 'cinquecento', - 'cinquecentos', - 'cinquefoil', - 'cinquefoils', - 'ciphertext', - 'ciphertexts', - 'circinately', - 'circuities', - 'circuiting', - 'circuitous', - 'circuitously', - 'circuitousness', - 'circuitousnesses', - 'circuitries', - 'circularise', - 'circularised', - 'circularises', - 'circularising', - 'circularities', - 'circularity', - 'circularization', - 'circularizations', - 'circularize', - 'circularized', - 'circularizes', - 'circularizing', - 'circularly', - 'circularness', - 'circularnesses', - 'circulatable', - 'circulated', - 'circulates', - 'circulating', - 'circulation', - 'circulations', - 'circulative', - 'circulator', - 'circulators', - 'circulatory', - 'circumambient', - 'circumambiently', - 'circumambulate', - 'circumambulated', - 'circumambulates', - 'circumambulating', - 'circumambulation', - 'circumambulations', - 'circumcenter', - 'circumcenters', - 'circumcircle', - 'circumcircles', - 'circumcise', - 'circumcised', - 'circumciser', - 'circumcisers', - 'circumcises', - 'circumcising', - 'circumcision', - 'circumcisions', - 'circumference', - 'circumferences', - 'circumferential', - 'circumflex', - 'circumflexes', - 'circumfluent', - 'circumfluous', - 'circumfuse', - 'circumfused', - 'circumfuses', - 'circumfusing', - 'circumfusion', - 'circumfusions', - 'circumjacent', - 'circumlocution', - 'circumlocutions', - 'circumlocutory', - 'circumlunar', - 'circumnavigate', - 'circumnavigated', - 'circumnavigates', - 'circumnavigating', - 'circumnavigation', - 'circumnavigations', - 'circumnavigator', - 'circumnavigators', - 'circumpolar', - 'circumscissile', - 'circumscribe', - 'circumscribed', - 'circumscribes', - 'circumscribing', - 'circumscription', - 'circumscriptions', - 'circumspect', - 'circumspection', - 'circumspections', - 'circumspectly', - 'circumstance', - 'circumstanced', - 'circumstances', - 'circumstantial', - 'circumstantialities', - 'circumstantiality', - 'circumstantially', - 'circumstantiate', - 'circumstantiated', - 'circumstantiates', - 'circumstantiating', - 'circumstellar', - 'circumvallate', - 'circumvallated', - 'circumvallates', - 'circumvallating', - 'circumvallation', - 'circumvallations', - 'circumvent', - 'circumvented', - 'circumventing', - 'circumvention', - 'circumventions', - 'circumvents', - 'circumvolution', - 'circumvolutions', - 'cirrhotics', - 'cirrocumuli', - 'cirrocumulus', - 'cirrostrati', - 'cirrostratus', - 'cisplatins', - 'citational', - 'citification', - 'citifications', - 'citizeness', - 'citizenesses', - 'citizenries', - 'citizenship', - 'citizenships', - 'citriculture', - 'citricultures', - 'citriculturist', - 'citriculturists', - 'citronella', - 'citronellal', - 'citronellals', - 'citronellas', - 'citronellol', - 'citronellols', - 'citrulline', - 'citrullines', - 'cityscapes', - 'civilianization', - 'civilianizations', - 'civilianize', - 'civilianized', - 'civilianizes', - 'civilianizing', - 'civilisation', - 'civilisations', - 'civilising', - 'civilities', - 'civilization', - 'civilizational', - 'civilizations', - 'civilizers', - 'civilizing', - 'clabbering', - 'cladistically', - 'cladistics', - 'cladoceran', - 'cladocerans', - 'cladogeneses', - 'cladogenesis', - 'cladogenetic', - 'cladogenetically', - 'cladograms', - 'cladophyll', - 'cladophylla', - 'cladophylls', - 'cladophyllum', - 'clairaudience', - 'clairaudiences', - 'clairaudient', - 'clairaudiently', - 'clairvoyance', - 'clairvoyances', - 'clairvoyant', - 'clairvoyantly', - 'clairvoyants', - 'clamberers', - 'clambering', - 'clamminess', - 'clamminesses', - 'clamorously', - 'clamorousness', - 'clamorousnesses', - 'clamouring', - 'clampdowns', - 'clamshells', - 'clandestine', - 'clandestinely', - 'clandestineness', - 'clandestinenesses', - 'clandestinities', - 'clandestinity', - 'clangoring', - 'clangorous', - 'clangorously', - 'clangoured', - 'clangouring', - 'clankingly', - 'clannishly', - 'clannishness', - 'clannishnesses', - 'clapboarded', - 'clapboarding', - 'clapboards', - 'clapperclaw', - 'clapperclawed', - 'clapperclawing', - 'clapperclaws', - 'clarification', - 'clarifications', - 'clarifiers', - 'clarifying', - 'clarinetist', - 'clarinetists', - 'clarinettist', - 'clarinettists', - 'clarioning', - 'classicalities', - 'classicality', - 'classically', - 'classicism', - 'classicisms', - 'classicist', - 'classicistic', - 'classicists', - 'classicize', - 'classicized', - 'classicizes', - 'classicizing', - 'classifiable', - 'classification', - 'classifications', - 'classificatory', - 'classified', - 'classifier', - 'classifiers', - 'classifies', - 'classifying', - 'classiness', - 'classinesses', - 'classlessness', - 'classlessnesses', - 'classmates', - 'classrooms', - 'clathrates', - 'clatterers', - 'clattering', - 'clatteringly', - 'claudication', - 'claudications', - 'claughting', - 'claustrophobe', - 'claustrophobes', - 'claustrophobia', - 'claustrophobias', - 'claustrophobic', - 'claustrophobically', - 'clavichord', - 'clavichordist', - 'clavichordists', - 'clavichords', - 'clavicular', - 'clavierist', - 'clavieristic', - 'clavierists', - 'clawhammer', - 'cleanabilities', - 'cleanability', - 'cleanhanded', - 'cleanliest', - 'cleanliness', - 'cleanlinesses', - 'cleannesses', - 'clearances', - 'clearheaded', - 'clearheadedly', - 'clearheadedness', - 'clearheadednesses', - 'clearinghouse', - 'clearinghouses', - 'clearnesses', - 'clearstories', - 'clearstory', - 'clearwings', - 'cleistogamic', - 'cleistogamies', - 'cleistogamous', - 'cleistogamously', - 'cleistogamy', - 'clematises', - 'clemencies', - 'clepsydrae', - 'clepsydras', - 'clerestories', - 'clerestory', - 'clergywoman', - 'clergywomen', - 'clericalism', - 'clericalisms', - 'clericalist', - 'clericalists', - 'clerically', - 'clerkliest', - 'clerkships', - 'cleverness', - 'clevernesses', - 'clientages', - 'clienteles', - 'clientless', - 'cliffhanger', - 'cliffhangers', - 'climacteric', - 'climacterics', - 'climactically', - 'climatically', - 'climatological', - 'climatologically', - 'climatologies', - 'climatologist', - 'climatologists', - 'climatology', - 'climaxless', - 'clinchingly', - 'clingstone', - 'clingstones', - 'clinically', - 'clinicians', - 'clinicopathologic', - 'clinicopathological', - 'clinicopathologically', - 'clinkering', - 'clinometer', - 'clinometers', - 'clinquants', - 'clintonias', - 'cliometric', - 'cliometrician', - 'cliometricians', - 'cliometrics', - 'clipboards', - 'clipsheets', - 'cliquishly', - 'cliquishness', - 'cliquishnesses', - 'clitorectomies', - 'clitorectomy', - 'clitoridectomies', - 'clitoridectomy', - 'clitorides', - 'clitorises', - 'cloakrooms', - 'clobbering', - 'clockworks', - 'cloddishness', - 'cloddishnesses', - 'clodhopper', - 'clodhoppers', - 'clodhopping', - 'clofibrate', - 'clofibrates', - 'cloisonnes', - 'cloistered', - 'cloistering', - 'cloistress', - 'cloistresses', - 'clomiphene', - 'clomiphenes', - 'clonicities', - 'clonidines', - 'closedowns', - 'closefisted', - 'closemouthed', - 'closenesses', - 'closestool', - 'closestools', - 'closetfuls', - 'clostridia', - 'clostridial', - 'clostridium', - 'clothbound', - 'clotheshorse', - 'clotheshorses', - 'clothesline', - 'clotheslined', - 'clotheslines', - 'clotheslining', - 'clothespin', - 'clothespins', - 'clothespress', - 'clothespresses', - 'cloudberries', - 'cloudberry', - 'cloudburst', - 'cloudbursts', - 'cloudiness', - 'cloudinesses', - 'cloudlands', - 'cloudlessly', - 'cloudlessness', - 'cloudlessnesses', - 'cloudscape', - 'cloudscapes', - 'cloverleaf', - 'cloverleafs', - 'cloverleaves', - 'clowneries', - 'clownishly', - 'clownishness', - 'clownishnesses', - 'cloxacillin', - 'cloxacillins', - 'clubbiness', - 'clubbinesses', - 'clubfooted', - 'clubhauled', - 'clubhauling', - 'clubhouses', - 'clumsiness', - 'clumsinesses', - 'clustering', - 'cluttering', - 'cnidarians', - 'coacervate', - 'coacervates', - 'coacervation', - 'coacervations', - 'coachworks', - 'coadaptation', - 'coadaptations', - 'coadjutors', - 'coadjutrices', - 'coadjutrix', - 'coadministration', - 'coadministrations', - 'coadmiring', - 'coadmitted', - 'coadmitting', - 'coagencies', - 'coagulabilities', - 'coagulability', - 'coagulable', - 'coagulants', - 'coagulases', - 'coagulated', - 'coagulates', - 'coagulating', - 'coagulation', - 'coagulations', - 'coalescence', - 'coalescences', - 'coalescent', - 'coalescing', - 'coalfields', - 'coalfishes', - 'coalification', - 'coalifications', - 'coalifying', - 'coalitionist', - 'coalitionists', - 'coalitions', - 'coanchored', - 'coanchoring', - 'coannexing', - 'coappeared', - 'coappearing', - 'coaptation', - 'coaptations', - 'coarctation', - 'coarctations', - 'coarseness', - 'coarsenesses', - 'coarsening', - 'coassisted', - 'coassisting', - 'coassuming', - 'coastguard', - 'coastguardman', - 'coastguardmen', - 'coastguards', - 'coastguardsman', - 'coastguardsmen', - 'coastlands', - 'coastlines', - 'coastwards', - 'coatdresses', - 'coatimundi', - 'coatimundis', - 'coattended', - 'coattending', - 'coattested', - 'coattesting', - 'coauthored', - 'coauthoring', - 'coauthorship', - 'coauthorships', - 'cobalamins', - 'cobaltines', - 'cobaltites', - 'cobblestone', - 'cobblestoned', - 'cobblestones', - 'cobelligerent', - 'cobelligerents', - 'cobwebbier', - 'cobwebbiest', - 'cobwebbing', - 'cocainization', - 'cocainizations', - 'cocainized', - 'cocainizes', - 'cocainizing', - 'cocaptained', - 'cocaptaining', - 'cocaptains', - 'cocarboxylase', - 'cocarboxylases', - 'cocarcinogen', - 'cocarcinogenic', - 'cocarcinogens', - 'cocatalyst', - 'cocatalysts', - 'coccidioidomycoses', - 'coccidioidomycosis', - 'coccidioses', - 'coccidiosis', - 'cochairing', - 'cochairman', - 'cochairmen', - 'cochairperson', - 'cochairpersons', - 'cochairwoman', - 'cochairwomen', - 'cochampion', - 'cochampions', - 'cochineals', - 'cockalorum', - 'cockalorums', - 'cockamamie', - 'cockatiels', - 'cockatrice', - 'cockatrices', - 'cockbilled', - 'cockbilling', - 'cockchafer', - 'cockchafers', - 'cockeyedly', - 'cockeyedness', - 'cockeyednesses', - 'cockfighting', - 'cockfightings', - 'cockfights', - 'cockhorses', - 'cockinesses', - 'cockleburs', - 'cockleshell', - 'cockleshells', - 'cockneyfied', - 'cockneyfies', - 'cockneyfying', - 'cockneyish', - 'cockneyism', - 'cockneyisms', - 'cockroaches', - 'cockscombs', - 'cocksfoots', - 'cocksucker', - 'cocksuckers', - 'cocksurely', - 'cocksureness', - 'cocksurenesses', - 'cocktailed', - 'cocktailing', - 'cocomposer', - 'cocomposers', - 'coconspirator', - 'coconspirators', - 'cocoonings', - 'cocounseled', - 'cocounseling', - 'cocounselled', - 'cocounselling', - 'cocounsels', - 'cocreating', - 'cocreators', - 'cocultivate', - 'cocultivated', - 'cocultivates', - 'cocultivating', - 'cocultivation', - 'cocultivations', - 'cocultured', - 'cocultures', - 'coculturing', - 'cocurators', - 'cocurricular', - 'codefendant', - 'codefendants', - 'codependence', - 'codependences', - 'codependencies', - 'codependency', - 'codependent', - 'codependents', - 'coderiving', - 'codesigned', - 'codesigning', - 'codetermination', - 'codeterminations', - 'codeveloped', - 'codeveloper', - 'codevelopers', - 'codeveloping', - 'codevelops', - 'codicillary', - 'codicological', - 'codicologies', - 'codicology', - 'codifiabilities', - 'codifiability', - 'codification', - 'codifications', - 'codirected', - 'codirecting', - 'codirection', - 'codirections', - 'codirector', - 'codirectors', - 'codiscover', - 'codiscovered', - 'codiscoverer', - 'codiscoverers', - 'codiscovering', - 'codiscovers', - 'codominant', - 'codominants', - 'codswallop', - 'codswallops', - 'coeducation', - 'coeducational', - 'coeducationally', - 'coeducations', - 'coefficient', - 'coefficients', - 'coelacanth', - 'coelacanths', - 'coelentera', - 'coelenterate', - 'coelenterates', - 'coelenteron', - 'coelomates', - 'coembodied', - 'coembodies', - 'coembodying', - 'coemployed', - 'coemploying', - 'coenacting', - 'coenamored', - 'coenamoring', - 'coenduring', - 'coenobites', - 'coenocytes', - 'coenocytic', - 'coenzymatic', - 'coenzymatically', - 'coequalities', - 'coequality', - 'coequating', - 'coercively', - 'coerciveness', - 'coercivenesses', - 'coercivities', - 'coercivity', - 'coerecting', - 'coetaneous', - 'coevalities', - 'coevolution', - 'coevolutionary', - 'coevolutions', - 'coevolving', - 'coexecutor', - 'coexecutors', - 'coexerting', - 'coexistence', - 'coexistences', - 'coexistent', - 'coexisting', - 'coextended', - 'coextending', - 'coextensive', - 'coextensively', - 'cofavorite', - 'cofavorites', - 'cofeatured', - 'cofeatures', - 'cofeaturing', - 'coffeecake', - 'coffeecakes', - 'coffeehouse', - 'coffeehouses', - 'coffeemaker', - 'coffeemakers', - 'coffeepots', - 'cofferdams', - 'cofinanced', - 'cofinances', - 'cofinancing', - 'cofounders', - 'cofounding', - 'cofunction', - 'cofunctions', - 'cogeneration', - 'cogenerations', - 'cogenerator', - 'cogenerators', - 'cogitating', - 'cogitation', - 'cogitations', - 'cogitative', - 'cognations', - 'cognitional', - 'cognitions', - 'cognitively', - 'cognizable', - 'cognizably', - 'cognizance', - 'cognizances', - 'cognominal', - 'cognoscente', - 'cognoscenti', - 'cognoscible', - 'cohabitant', - 'cohabitants', - 'cohabitation', - 'cohabitations', - 'cohabiting', - 'coheiresses', - 'coherences', - 'coherencies', - 'coherently', - 'cohesionless', - 'cohesively', - 'cohesiveness', - 'cohesivenesses', - 'cohobating', - 'cohomological', - 'cohomologies', - 'cohomology', - 'cohostessed', - 'cohostesses', - 'cohostessing', - 'coiffeuses', - 'coiffuring', - 'coilabilities', - 'coilability', - 'coincidence', - 'coincidences', - 'coincident', - 'coincidental', - 'coincidentally', - 'coincidently', - 'coinciding', - 'coinferred', - 'coinferring', - 'coinhering', - 'coinsurance', - 'coinsurances', - 'coinsurers', - 'coinsuring', - 'cointerred', - 'cointerring', - 'coinvented', - 'coinventing', - 'coinventor', - 'coinventors', - 'coinvestigator', - 'coinvestigators', - 'coinvestor', - 'coinvestors', - 'colatitude', - 'colatitudes', - 'colcannons', - 'colchicine', - 'colchicines', - 'colchicums', - 'coldcocked', - 'coldcocking', - 'coldhearted', - 'coldheartedly', - 'coldheartedness', - 'coldheartednesses', - 'coldnesses', - 'colemanite', - 'colemanites', - 'coleoptera', - 'coleopteran', - 'coleopterans', - 'coleopterist', - 'coleopterists', - 'coleopterous', - 'coleoptile', - 'coleoptiles', - 'coleorhiza', - 'coleorhizae', - 'colicroots', - 'colinearities', - 'colinearity', - 'coliphages', - 'collaborate', - 'collaborated', - 'collaborates', - 'collaborating', - 'collaboration', - 'collaborationism', - 'collaborationisms', - 'collaborationist', - 'collaborationists', - 'collaborations', - 'collaborative', - 'collaboratively', - 'collaboratives', - 'collaborator', - 'collaborators', - 'collagenase', - 'collagenases', - 'collagenous', - 'collagists', - 'collapsibilities', - 'collapsibility', - 'collapsible', - 'collapsing', - 'collarbone', - 'collarbones', - 'collarless', - 'collateral', - 'collateralities', - 'collaterality', - 'collateralize', - 'collateralized', - 'collateralizes', - 'collateralizing', - 'collaterally', - 'collaterals', - 'collations', - 'colleagues', - 'colleagueship', - 'colleagueships', - 'collectable', - 'collectables', - 'collectanea', - 'collectedly', - 'collectedness', - 'collectednesses', - 'collectible', - 'collectibles', - 'collecting', - 'collection', - 'collections', - 'collective', - 'collectively', - 'collectives', - 'collectivise', - 'collectivised', - 'collectivises', - 'collectivising', - 'collectivism', - 'collectivisms', - 'collectivist', - 'collectivistic', - 'collectivistically', - 'collectivists', - 'collectivities', - 'collectivity', - 'collectivization', - 'collectivizations', - 'collectivize', - 'collectivized', - 'collectivizes', - 'collectivizing', - 'collectors', - 'collectorship', - 'collectorships', - 'collegialities', - 'collegiality', - 'collegially', - 'collegians', - 'collegiate', - 'collegiately', - 'collegiums', - 'collembolan', - 'collembolans', - 'collembolous', - 'collenchyma', - 'collenchymas', - 'collenchymata', - 'collenchymatous', - 'collieries', - 'collieshangie', - 'collieshangies', - 'colligated', - 'colligates', - 'colligating', - 'colligation', - 'colligations', - 'colligative', - 'collimated', - 'collimates', - 'collimating', - 'collimation', - 'collimations', - 'collimator', - 'collimators', - 'collinearities', - 'collinearity', - 'collisional', - 'collisionally', - 'collisions', - 'collocated', - 'collocates', - 'collocating', - 'collocation', - 'collocational', - 'collocations', - 'collodions', - 'colloguing', - 'colloidally', - 'colloquial', - 'colloquialism', - 'colloquialisms', - 'colloquialities', - 'colloquiality', - 'colloquially', - 'colloquials', - 'colloquies', - 'colloquist', - 'colloquists', - 'colloquium', - 'colloquiums', - 'collotypes', - 'collusions', - 'collusively', - 'colluviums', - 'collyriums', - 'collywobbles', - 'colobomata', - 'colocating', - 'colocynths', - 'cologarithm', - 'cologarithms', - 'colonelcies', - 'colonialism', - 'colonialisms', - 'colonialist', - 'colonialistic', - 'colonialists', - 'colonialize', - 'colonialized', - 'colonializes', - 'colonializing', - 'colonially', - 'colonialness', - 'colonialnesses', - 'colonisation', - 'colonisations', - 'colonising', - 'colonization', - 'colonizationist', - 'colonizationists', - 'colonizations', - 'colonizers', - 'colonizing', - 'colonnaded', - 'colonnades', - 'colophonies', - 'coloration', - 'colorations', - 'coloratura', - 'coloraturas', - 'colorblind', - 'colorblindness', - 'colorblindnesses', - 'colorectal', - 'colorfastness', - 'colorfastnesses', - 'colorfully', - 'colorfulness', - 'colorfulnesses', - 'colorimeter', - 'colorimeters', - 'colorimetric', - 'colorimetrically', - 'colorimetries', - 'colorimetry', - 'coloristic', - 'coloristically', - 'colorization', - 'colorizations', - 'colorizing', - 'colorlessly', - 'colorlessness', - 'colorlessnesses', - 'colorpoint', - 'colorpoints', - 'colossally', - 'colosseums', - 'colossuses', - 'colostomies', - 'colostrums', - 'colotomies', - 'colpitises', - 'colportage', - 'colportages', - 'colporteur', - 'colporteurs', - 'coltishness', - 'coltishnesses', - 'coltsfoots', - 'columbaria', - 'columbarium', - 'columbines', - 'columbites', - 'columbiums', - 'columellae', - 'columellar', - 'columniation', - 'columniations', - 'columnistic', - 'columnists', - 'comanagement', - 'comanagements', - 'comanagers', - 'comanaging', - 'combatants', - 'combatively', - 'combativeness', - 'combativenesses', - 'combatting', - 'combinable', - 'combination', - 'combinational', - 'combinations', - 'combinative', - 'combinatorial', - 'combinatorially', - 'combinatorics', - 'combinatory', - 'combustibilities', - 'combustibility', - 'combustible', - 'combustibles', - 'combustibly', - 'combusting', - 'combustion', - 'combustions', - 'combustive', - 'combustors', - 'comedically', - 'comedienne', - 'comediennes', - 'comeliness', - 'comelinesses', - 'comestible', - 'comestibles', - 'comeuppance', - 'comeuppances', - 'comfortable', - 'comfortableness', - 'comfortablenesses', - 'comfortably', - 'comforters', - 'comforting', - 'comfortingly', - 'comfortless', - 'comicalities', - 'comicality', - 'comingling', - 'commandable', - 'commandant', - 'commandants', - 'commandeer', - 'commandeered', - 'commandeering', - 'commandeers', - 'commanderies', - 'commanders', - 'commandership', - 'commanderships', - 'commandery', - 'commanding', - 'commandingly', - 'commandment', - 'commandments', - 'commandoes', - 'commemorate', - 'commemorated', - 'commemorates', - 'commemorating', - 'commemoration', - 'commemorations', - 'commemorative', - 'commemoratively', - 'commemoratives', - 'commemorator', - 'commemorators', - 'commencement', - 'commencements', - 'commencers', - 'commencing', - 'commendable', - 'commendably', - 'commendation', - 'commendations', - 'commendatory', - 'commenders', - 'commending', - 'commensalism', - 'commensalisms', - 'commensally', - 'commensals', - 'commensurabilities', - 'commensurability', - 'commensurable', - 'commensurably', - 'commensurate', - 'commensurately', - 'commensuration', - 'commensurations', - 'commentaries', - 'commentary', - 'commentate', - 'commentated', - 'commentates', - 'commentating', - 'commentator', - 'commentators', - 'commenting', - 'commercial', - 'commercialise', - 'commercialised', - 'commercialises', - 'commercialising', - 'commercialism', - 'commercialisms', - 'commercialist', - 'commercialistic', - 'commercialists', - 'commercialities', - 'commerciality', - 'commercialization', - 'commercializations', - 'commercialize', - 'commercialized', - 'commercializes', - 'commercializing', - 'commercially', - 'commercials', - 'commercing', - 'commination', - 'comminations', - 'comminatory', - 'commingled', - 'commingles', - 'commingling', - 'comminuted', - 'comminutes', - 'comminuting', - 'comminution', - 'comminutions', - 'commiserate', - 'commiserated', - 'commiserates', - 'commiserating', - 'commiseratingly', - 'commiseration', - 'commiserations', - 'commiserative', - 'commissarial', - 'commissariat', - 'commissariats', - 'commissaries', - 'commissars', - 'commissary', - 'commission', - 'commissionaire', - 'commissionaires', - 'commissioned', - 'commissioner', - 'commissioners', - 'commissionership', - 'commissionerships', - 'commissioning', - 'commissions', - 'commissural', - 'commissure', - 'commissures', - 'commitment', - 'commitments', - 'committable', - 'committals', - 'committeeman', - 'committeemen', - 'committees', - 'committeewoman', - 'committeewomen', - 'committing', - 'commixture', - 'commixtures', - 'commodification', - 'commodifications', - 'commodified', - 'commodifies', - 'commodifying', - 'commodious', - 'commodiously', - 'commodiousness', - 'commodiousnesses', - 'commodities', - 'commodores', - 'commonages', - 'commonalities', - 'commonality', - 'commonalties', - 'commonalty', - 'commonness', - 'commonnesses', - 'commonplace', - 'commonplaceness', - 'commonplacenesses', - 'commonplaces', - 'commonsense', - 'commonsensible', - 'commonsensical', - 'commonsensically', - 'commonweal', - 'commonweals', - 'commonwealth', - 'commonwealths', - 'commotions', - 'communalism', - 'communalisms', - 'communalist', - 'communalists', - 'communalities', - 'communality', - 'communalize', - 'communalized', - 'communalizes', - 'communalizing', - 'communally', - 'communards', - 'communicabilities', - 'communicability', - 'communicable', - 'communicableness', - 'communicablenesses', - 'communicably', - 'communicant', - 'communicants', - 'communicate', - 'communicated', - 'communicatee', - 'communicatees', - 'communicates', - 'communicating', - 'communication', - 'communicational', - 'communications', - 'communicative', - 'communicatively', - 'communicativeness', - 'communicativenesses', - 'communicator', - 'communicators', - 'communicatory', - 'communions', - 'communique', - 'communiques', - 'communised', - 'communises', - 'communising', - 'communisms', - 'communistic', - 'communistically', - 'communists', - 'communitarian', - 'communitarianism', - 'communitarianisms', - 'communitarians', - 'communities', - 'communization', - 'communizations', - 'communized', - 'communizes', - 'communizing', - 'commutable', - 'commutated', - 'commutates', - 'commutating', - 'commutation', - 'commutations', - 'commutative', - 'commutativities', - 'commutativity', - 'commutator', - 'commutators', - 'comonomers', - 'compacters', - 'compactest', - 'compactible', - 'compacting', - 'compaction', - 'compactions', - 'compactness', - 'compactnesses', - 'compactors', - 'companionabilities', - 'companionability', - 'companionable', - 'companionableness', - 'companionablenesses', - 'companionably', - 'companionate', - 'companioned', - 'companioning', - 'companions', - 'companionship', - 'companionships', - 'companionway', - 'companionways', - 'companying', - 'comparabilities', - 'comparability', - 'comparable', - 'comparableness', - 'comparablenesses', - 'comparably', - 'comparatist', - 'comparatists', - 'comparative', - 'comparatively', - 'comparativeness', - 'comparativenesses', - 'comparatives', - 'comparativist', - 'comparativists', - 'comparator', - 'comparators', - 'comparison', - 'comparisons', - 'comparting', - 'compartment', - 'compartmental', - 'compartmentalise', - 'compartmentalised', - 'compartmentalises', - 'compartmentalising', - 'compartmentalization', - 'compartmentalizations', - 'compartmentalize', - 'compartmentalized', - 'compartmentalizes', - 'compartmentalizing', - 'compartmentation', - 'compartmentations', - 'compartmented', - 'compartmenting', - 'compartments', - 'compassable', - 'compassing', - 'compassion', - 'compassionate', - 'compassionated', - 'compassionately', - 'compassionateness', - 'compassionatenesses', - 'compassionates', - 'compassionating', - 'compassionless', - 'compassions', - 'compatibilities', - 'compatibility', - 'compatible', - 'compatibleness', - 'compatiblenesses', - 'compatibles', - 'compatibly', - 'compatriot', - 'compatriotic', - 'compatriots', - 'compeering', - 'compellable', - 'compellation', - 'compellations', - 'compelling', - 'compellingly', - 'compendious', - 'compendiously', - 'compendiousness', - 'compendiousnesses', - 'compendium', - 'compendiums', - 'compensabilities', - 'compensability', - 'compensable', - 'compensate', - 'compensated', - 'compensates', - 'compensating', - 'compensation', - 'compensational', - 'compensations', - 'compensative', - 'compensator', - 'compensators', - 'compensatory', - 'competence', - 'competences', - 'competencies', - 'competency', - 'competently', - 'competition', - 'competitions', - 'competitive', - 'competitively', - 'competitiveness', - 'competitivenesses', - 'competitor', - 'competitors', - 'compilation', - 'compilations', - 'complacence', - 'complacences', - 'complacencies', - 'complacency', - 'complacent', - 'complacently', - 'complainant', - 'complainants', - 'complained', - 'complainer', - 'complainers', - 'complaining', - 'complainingly', - 'complaints', - 'complaisance', - 'complaisances', - 'complaisant', - 'complaisantly', - 'complected', - 'complecting', - 'complement', - 'complemental', - 'complementaries', - 'complementarily', - 'complementariness', - 'complementarinesses', - 'complementarities', - 'complementarity', - 'complementary', - 'complementation', - 'complementations', - 'complemented', - 'complementing', - 'complementizer', - 'complementizers', - 'complements', - 'completely', - 'completeness', - 'completenesses', - 'completest', - 'completing', - 'completion', - 'completions', - 'completist', - 'completists', - 'completive', - 'complexation', - 'complexations', - 'complexest', - 'complexified', - 'complexifies', - 'complexify', - 'complexifying', - 'complexing', - 'complexion', - 'complexional', - 'complexioned', - 'complexions', - 'complexities', - 'complexity', - 'complexness', - 'complexnesses', - 'compliance', - 'compliances', - 'compliancies', - 'compliancy', - 'compliantly', - 'complicacies', - 'complicacy', - 'complicate', - 'complicated', - 'complicatedly', - 'complicatedness', - 'complicatednesses', - 'complicates', - 'complicating', - 'complication', - 'complications', - 'complicities', - 'complicitous', - 'complicity', - 'compliment', - 'complimentarily', - 'complimentary', - 'complimented', - 'complimenting', - 'compliments', - 'complotted', - 'complotting', - 'componential', - 'components', - 'comporting', - 'comportment', - 'comportments', - 'composedly', - 'composedness', - 'composednesses', - 'composited', - 'compositely', - 'composites', - 'compositing', - 'composition', - 'compositional', - 'compositionally', - 'compositions', - 'compositor', - 'compositors', - 'composting', - 'composures', - 'compoundable', - 'compounded', - 'compounder', - 'compounders', - 'compounding', - 'compradore', - 'compradores', - 'compradors', - 'comprehend', - 'comprehended', - 'comprehendible', - 'comprehending', - 'comprehends', - 'comprehensibilities', - 'comprehensibility', - 'comprehensible', - 'comprehensibleness', - 'comprehensiblenesses', - 'comprehensibly', - 'comprehension', - 'comprehensions', - 'comprehensive', - 'comprehensively', - 'comprehensiveness', - 'comprehensivenesses', - 'compressed', - 'compressedly', - 'compresses', - 'compressibilities', - 'compressibility', - 'compressible', - 'compressing', - 'compression', - 'compressional', - 'compressions', - 'compressive', - 'compressively', - 'compressor', - 'compressors', - 'comprising', - 'comprizing', - 'compromise', - 'compromised', - 'compromiser', - 'compromisers', - 'compromises', - 'compromising', - 'comptroller', - 'comptrollers', - 'comptrollership', - 'comptrollerships', - 'compulsion', - 'compulsions', - 'compulsive', - 'compulsively', - 'compulsiveness', - 'compulsivenesses', - 'compulsivities', - 'compulsivity', - 'compulsorily', - 'compulsory', - 'compunction', - 'compunctions', - 'compunctious', - 'compurgation', - 'compurgations', - 'compurgator', - 'compurgators', - 'computabilities', - 'computability', - 'computable', - 'computation', - 'computational', - 'computationally', - 'computations', - 'computerdom', - 'computerdoms', - 'computerese', - 'computereses', - 'computerise', - 'computerised', - 'computerises', - 'computerising', - 'computerist', - 'computerists', - 'computerizable', - 'computerization', - 'computerizations', - 'computerize', - 'computerized', - 'computerizes', - 'computerizing', - 'computerless', - 'computerlike', - 'computernik', - 'computerniks', - 'computerphobe', - 'computerphobes', - 'computerphobia', - 'computerphobias', - 'computerphobic', - 'comradeliness', - 'comradelinesses', - 'comraderies', - 'comradeship', - 'comradeships', - 'concanavalin', - 'concanavalins', - 'concatenate', - 'concatenated', - 'concatenates', - 'concatenating', - 'concatenation', - 'concatenations', - 'concavities', - 'concealable', - 'concealers', - 'concealing', - 'concealingly', - 'concealment', - 'concealments', - 'concededly', - 'conceitedly', - 'conceitedness', - 'conceitednesses', - 'conceiting', - 'conceivabilities', - 'conceivability', - 'conceivable', - 'conceivableness', - 'conceivablenesses', - 'conceivably', - 'conceivers', - 'conceiving', - 'concelebrant', - 'concelebrants', - 'concelebrate', - 'concelebrated', - 'concelebrates', - 'concelebrating', - 'concelebration', - 'concelebrations', - 'concentered', - 'concentering', - 'concenters', - 'concentrate', - 'concentrated', - 'concentratedly', - 'concentrates', - 'concentrating', - 'concentration', - 'concentrations', - 'concentrative', - 'concentrator', - 'concentrators', - 'concentric', - 'concentrically', - 'concentricities', - 'concentricity', - 'conceptacle', - 'conceptacles', - 'conception', - 'conceptional', - 'conceptions', - 'conceptive', - 'conceptual', - 'conceptualise', - 'conceptualised', - 'conceptualises', - 'conceptualising', - 'conceptualism', - 'conceptualisms', - 'conceptualist', - 'conceptualistic', - 'conceptualistically', - 'conceptualists', - 'conceptualities', - 'conceptuality', - 'conceptualization', - 'conceptualizations', - 'conceptualize', - 'conceptualized', - 'conceptualizer', - 'conceptualizers', - 'conceptualizes', - 'conceptualizing', - 'conceptually', - 'conceptuses', - 'concerning', - 'concernment', - 'concernments', - 'concertedly', - 'concertedness', - 'concertednesses', - 'concertgoer', - 'concertgoers', - 'concertgoing', - 'concertgoings', - 'concertina', - 'concertinas', - 'concerting', - 'concertino', - 'concertinos', - 'concertize', - 'concertized', - 'concertizes', - 'concertizing', - 'concertmaster', - 'concertmasters', - 'concertmeister', - 'concertmeisters', - 'concession', - 'concessionaire', - 'concessionaires', - 'concessional', - 'concessionary', - 'concessioner', - 'concessioners', - 'concessions', - 'concessive', - 'concessively', - 'conchoidal', - 'conchoidally', - 'conchologies', - 'conchologist', - 'conchologists', - 'conchology', - 'concierges', - 'conciliarly', - 'conciliate', - 'conciliated', - 'conciliates', - 'conciliating', - 'conciliation', - 'conciliations', - 'conciliative', - 'conciliator', - 'conciliators', - 'conciliatory', - 'concinnities', - 'concinnity', - 'conciseness', - 'concisenesses', - 'concisions', - 'concluders', - 'concluding', - 'conclusion', - 'conclusionary', - 'conclusions', - 'conclusive', - 'conclusively', - 'conclusiveness', - 'conclusivenesses', - 'conclusory', - 'concocters', - 'concocting', - 'concoction', - 'concoctions', - 'concoctive', - 'concomitance', - 'concomitances', - 'concomitant', - 'concomitantly', - 'concomitants', - 'concordance', - 'concordances', - 'concordant', - 'concordantly', - 'concordats', - 'concourses', - 'concrescence', - 'concrescences', - 'concrescent', - 'concretely', - 'concreteness', - 'concretenesses', - 'concreting', - 'concretion', - 'concretionary', - 'concretions', - 'concretism', - 'concretisms', - 'concretist', - 'concretists', - 'concretization', - 'concretizations', - 'concretize', - 'concretized', - 'concretizes', - 'concretizing', - 'concubinage', - 'concubinages', - 'concubines', - 'concupiscence', - 'concupiscences', - 'concupiscent', - 'concupiscible', - 'concurrence', - 'concurrences', - 'concurrencies', - 'concurrency', - 'concurrent', - 'concurrently', - 'concurrents', - 'concurring', - 'concussing', - 'concussion', - 'concussions', - 'concussive', - 'condemnable', - 'condemnation', - 'condemnations', - 'condemnatory', - 'condemners', - 'condemning', - 'condemnors', - 'condensable', - 'condensate', - 'condensates', - 'condensation', - 'condensational', - 'condensations', - 'condensers', - 'condensible', - 'condensing', - 'condescend', - 'condescended', - 'condescendence', - 'condescendences', - 'condescending', - 'condescendingly', - 'condescends', - 'condescension', - 'condescensions', - 'condimental', - 'condiments', - 'conditionable', - 'conditional', - 'conditionalities', - 'conditionality', - 'conditionally', - 'conditionals', - 'conditioned', - 'conditioner', - 'conditioners', - 'conditioning', - 'conditions', - 'condolatory', - 'condolence', - 'condolences', - 'condominium', - 'condominiums', - 'condonable', - 'condonation', - 'condonations', - 'condottiere', - 'condottieri', - 'conduciveness', - 'conducivenesses', - 'conductance', - 'conductances', - 'conductibilities', - 'conductibility', - 'conductible', - 'conductimetric', - 'conducting', - 'conduction', - 'conductions', - 'conductive', - 'conductivities', - 'conductivity', - 'conductometric', - 'conductorial', - 'conductors', - 'conductress', - 'conductresses', - 'conduplicate', - 'condylomas', - 'condylomata', - 'condylomatous', - 'coneflower', - 'coneflowers', - 'confabbing', - 'confabulate', - 'confabulated', - 'confabulates', - 'confabulating', - 'confabulation', - 'confabulations', - 'confabulator', - 'confabulators', - 'confabulatory', - 'confecting', - 'confection', - 'confectionaries', - 'confectionary', - 'confectioner', - 'confectioneries', - 'confectioners', - 'confectionery', - 'confections', - 'confederacies', - 'confederacy', - 'confederal', - 'confederate', - 'confederated', - 'confederates', - 'confederating', - 'confederation', - 'confederations', - 'confederative', - 'conference', - 'conferences', - 'conferencing', - 'conferencings', - 'conferential', - 'conferment', - 'conferments', - 'conferrable', - 'conferrals', - 'conferrence', - 'conferrences', - 'conferrers', - 'conferring', - 'confessable', - 'confessedly', - 'confessing', - 'confession', - 'confessional', - 'confessionalism', - 'confessionalisms', - 'confessionalist', - 'confessionalists', - 'confessionally', - 'confessionals', - 'confessions', - 'confessors', - 'confidante', - 'confidantes', - 'confidants', - 'confidence', - 'confidences', - 'confidential', - 'confidentialities', - 'confidentiality', - 'confidentially', - 'confidently', - 'confidingly', - 'confidingness', - 'confidingnesses', - 'configuration', - 'configurational', - 'configurationally', - 'configurations', - 'configurative', - 'configured', - 'configures', - 'configuring', - 'confinement', - 'confinements', - 'confirmabilities', - 'confirmability', - 'confirmable', - 'confirmand', - 'confirmands', - 'confirmation', - 'confirmational', - 'confirmations', - 'confirmatory', - 'confirmedly', - 'confirmedness', - 'confirmednesses', - 'confirming', - 'confiscable', - 'confiscatable', - 'confiscate', - 'confiscated', - 'confiscates', - 'confiscating', - 'confiscation', - 'confiscations', - 'confiscator', - 'confiscators', - 'confiscatory', - 'confiteors', - 'confitures', - 'conflagrant', - 'conflagration', - 'conflagrations', - 'conflating', - 'conflation', - 'conflations', - 'conflicted', - 'conflictful', - 'conflicting', - 'conflictingly', - 'confliction', - 'conflictions', - 'conflictive', - 'conflictual', - 'confluence', - 'confluences', - 'confluents', - 'confocally', - 'conformable', - 'conformably', - 'conformance', - 'conformances', - 'conformation', - 'conformational', - 'conformations', - 'conformers', - 'conforming', - 'conformism', - 'conformisms', - 'conformist', - 'conformists', - 'conformities', - 'conformity', - 'confounded', - 'confoundedly', - 'confounder', - 'confounders', - 'confounding', - 'confoundingly', - 'confraternities', - 'confraternity', - 'confrontal', - 'confrontals', - 'confrontation', - 'confrontational', - 'confrontationist', - 'confrontationists', - 'confrontations', - 'confronted', - 'confronter', - 'confronters', - 'confronting', - 'confusedly', - 'confusedness', - 'confusednesses', - 'confusingly', - 'confusional', - 'confusions', - 'confutation', - 'confutations', - 'confutative', - 'congealing', - 'congealment', - 'congealments', - 'congelation', - 'congelations', - 'congeneric', - 'congenerous', - 'congenialities', - 'congeniality', - 'congenially', - 'congenital', - 'congenitally', - 'congesting', - 'congestion', - 'congestions', - 'congestive', - 'conglobate', - 'conglobated', - 'conglobates', - 'conglobating', - 'conglobation', - 'conglobations', - 'conglobing', - 'conglomerate', - 'conglomerated', - 'conglomerates', - 'conglomerateur', - 'conglomerateurs', - 'conglomeratic', - 'conglomerating', - 'conglomeration', - 'conglomerations', - 'conglomerative', - 'conglomerator', - 'conglomerators', - 'conglutinate', - 'conglutinated', - 'conglutinates', - 'conglutinating', - 'conglutination', - 'conglutinations', - 'congratulate', - 'congratulated', - 'congratulates', - 'congratulating', - 'congratulation', - 'congratulations', - 'congratulator', - 'congratulators', - 'congratulatory', - 'congregant', - 'congregants', - 'congregate', - 'congregated', - 'congregates', - 'congregating', - 'congregation', - 'congregational', - 'congregationalism', - 'congregationalisms', - 'congregationalist', - 'congregationalists', - 'congregations', - 'congregator', - 'congregators', - 'congressed', - 'congresses', - 'congressing', - 'congressional', - 'congressionally', - 'congressman', - 'congressmen', - 'congresspeople', - 'congressperson', - 'congresspersons', - 'congresswoman', - 'congresswomen', - 'congruence', - 'congruences', - 'congruencies', - 'congruency', - 'congruently', - 'congruities', - 'congruously', - 'congruousness', - 'congruousnesses', - 'conicities', - 'conidiophore', - 'conidiophores', - 'coniferous', - 'conjectural', - 'conjecturally', - 'conjecture', - 'conjectured', - 'conjecturer', - 'conjecturers', - 'conjectures', - 'conjecturing', - 'conjoining', - 'conjointly', - 'conjugalities', - 'conjugality', - 'conjugally', - 'conjugants', - 'conjugated', - 'conjugately', - 'conjugateness', - 'conjugatenesses', - 'conjugates', - 'conjugating', - 'conjugation', - 'conjugational', - 'conjugationally', - 'conjugations', - 'conjunction', - 'conjunctional', - 'conjunctionally', - 'conjunctions', - 'conjunctiva', - 'conjunctivae', - 'conjunctival', - 'conjunctivas', - 'conjunctive', - 'conjunctively', - 'conjunctives', - 'conjunctivites', - 'conjunctivitides', - 'conjunctivitis', - 'conjunctivitises', - 'conjuncture', - 'conjunctures', - 'conjuration', - 'conjurations', - 'connatural', - 'connaturalities', - 'connaturality', - 'connaturally', - 'connectable', - 'connectedly', - 'connectedness', - 'connectednesses', - 'connecters', - 'connectible', - 'connecting', - 'connection', - 'connectional', - 'connections', - 'connective', - 'connectively', - 'connectives', - 'connectivities', - 'connectivity', - 'connectors', - 'connexions', - 'conniption', - 'conniptions', - 'connivance', - 'connivances', - 'connoisseur', - 'connoisseurs', - 'connoisseurship', - 'connoisseurships', - 'connotation', - 'connotational', - 'connotations', - 'connotative', - 'connotatively', - 'connubialism', - 'connubialisms', - 'connubialities', - 'connubiality', - 'connubially', - 'conominees', - 'conquering', - 'conquerors', - 'conquistador', - 'conquistadores', - 'conquistadors', - 'consanguine', - 'consanguineous', - 'consanguineously', - 'consanguinities', - 'consanguinity', - 'conscience', - 'conscienceless', - 'consciences', - 'conscientious', - 'conscientiously', - 'conscientiousness', - 'conscientiousnesses', - 'conscionable', - 'consciouses', - 'consciously', - 'consciousness', - 'consciousnesses', - 'conscribed', - 'conscribes', - 'conscribing', - 'conscripted', - 'conscripting', - 'conscription', - 'conscriptions', - 'conscripts', - 'consecrate', - 'consecrated', - 'consecrates', - 'consecrating', - 'consecration', - 'consecrations', - 'consecrative', - 'consecrator', - 'consecrators', - 'consecratory', - 'consecution', - 'consecutions', - 'consecutive', - 'consecutively', - 'consecutiveness', - 'consecutivenesses', - 'consensual', - 'consensually', - 'consensuses', - 'consentaneous', - 'consentaneously', - 'consenters', - 'consenting', - 'consentingly', - 'consequence', - 'consequences', - 'consequent', - 'consequential', - 'consequentialities', - 'consequentiality', - 'consequentially', - 'consequentialness', - 'consequentialnesses', - 'consequently', - 'consequents', - 'conservancies', - 'conservancy', - 'conservation', - 'conservational', - 'conservationist', - 'conservationists', - 'conservations', - 'conservatism', - 'conservatisms', - 'conservative', - 'conservatively', - 'conservativeness', - 'conservativenesses', - 'conservatives', - 'conservatize', - 'conservatized', - 'conservatizes', - 'conservatizing', - 'conservatoire', - 'conservatoires', - 'conservator', - 'conservatorial', - 'conservatories', - 'conservators', - 'conservatorship', - 'conservatorships', - 'conservatory', - 'conservers', - 'conserving', - 'considerable', - 'considerables', - 'considerably', - 'considerate', - 'considerately', - 'considerateness', - 'consideratenesses', - 'consideration', - 'considerations', - 'considered', - 'considering', - 'consigliere', - 'consiglieri', - 'consignable', - 'consignation', - 'consignations', - 'consignees', - 'consigning', - 'consignment', - 'consignments', - 'consignors', - 'consistence', - 'consistences', - 'consistencies', - 'consistency', - 'consistent', - 'consistently', - 'consisting', - 'consistorial', - 'consistories', - 'consistory', - 'consociate', - 'consociated', - 'consociates', - 'consociating', - 'consociation', - 'consociational', - 'consociations', - 'consolation', - 'consolations', - 'consolatory', - 'consolidate', - 'consolidated', - 'consolidates', - 'consolidating', - 'consolidation', - 'consolidations', - 'consolidator', - 'consolidators', - 'consolingly', - 'consonance', - 'consonances', - 'consonancies', - 'consonancy', - 'consonantal', - 'consonantly', - 'consonants', - 'consorting', - 'consortium', - 'consortiums', - 'conspecific', - 'conspecifics', - 'conspectus', - 'conspectuses', - 'conspicuities', - 'conspicuity', - 'conspicuous', - 'conspicuously', - 'conspicuousness', - 'conspicuousnesses', - 'conspiracies', - 'conspiracy', - 'conspiration', - 'conspirational', - 'conspirations', - 'conspirator', - 'conspiratorial', - 'conspiratorially', - 'conspirators', - 'conspiring', - 'constables', - 'constabularies', - 'constabulary', - 'constancies', - 'constantan', - 'constantans', - 'constantly', - 'constative', - 'constatives', - 'constellate', - 'constellated', - 'constellates', - 'constellating', - 'constellation', - 'constellations', - 'constellatory', - 'consternate', - 'consternated', - 'consternates', - 'consternating', - 'consternation', - 'consternations', - 'constipate', - 'constipated', - 'constipates', - 'constipating', - 'constipation', - 'constipations', - 'constituencies', - 'constituency', - 'constituent', - 'constituently', - 'constituents', - 'constitute', - 'constituted', - 'constitutes', - 'constituting', - 'constitution', - 'constitutional', - 'constitutionalism', - 'constitutionalisms', - 'constitutionalist', - 'constitutionalists', - 'constitutionalities', - 'constitutionality', - 'constitutionalization', - 'constitutionalizations', - 'constitutionalize', - 'constitutionalized', - 'constitutionalizes', - 'constitutionalizing', - 'constitutionally', - 'constitutionals', - 'constitutionless', - 'constitutions', - 'constitutive', - 'constitutively', - 'constrained', - 'constrainedly', - 'constraining', - 'constrains', - 'constraint', - 'constraints', - 'constricted', - 'constricting', - 'constriction', - 'constrictions', - 'constrictive', - 'constrictor', - 'constrictors', - 'constricts', - 'constringe', - 'constringed', - 'constringent', - 'constringes', - 'constringing', - 'construable', - 'constructed', - 'constructible', - 'constructing', - 'construction', - 'constructional', - 'constructionally', - 'constructionist', - 'constructionists', - 'constructions', - 'constructive', - 'constructively', - 'constructiveness', - 'constructivenesses', - 'constructivism', - 'constructivisms', - 'constructivist', - 'constructivists', - 'constructor', - 'constructors', - 'constructs', - 'construing', - 'consubstantial', - 'consubstantiation', - 'consubstantiations', - 'consuetude', - 'consuetudes', - 'consuetudinary', - 'consulates', - 'consulship', - 'consulships', - 'consultancies', - 'consultancy', - 'consultant', - 'consultants', - 'consultantship', - 'consultantships', - 'consultation', - 'consultations', - 'consultative', - 'consulters', - 'consulting', - 'consultive', - 'consultors', - 'consumable', - 'consumables', - 'consumedly', - 'consumerism', - 'consumerisms', - 'consumerist', - 'consumeristic', - 'consumerists', - 'consumership', - 'consumerships', - 'consummate', - 'consummated', - 'consummately', - 'consummates', - 'consummating', - 'consummation', - 'consummations', - 'consummative', - 'consummator', - 'consummators', - 'consummatory', - 'consumption', - 'consumptions', - 'consumptive', - 'consumptively', - 'consumptives', - 'contacting', - 'contagions', - 'contagious', - 'contagiously', - 'contagiousness', - 'contagiousnesses', - 'containable', - 'containerboard', - 'containerboards', - 'containerisation', - 'containerisations', - 'containerise', - 'containerised', - 'containerises', - 'containerising', - 'containerization', - 'containerizations', - 'containerize', - 'containerized', - 'containerizes', - 'containerizing', - 'containerless', - 'containerport', - 'containerports', - 'containers', - 'containership', - 'containerships', - 'containing', - 'containment', - 'containments', - 'contaminant', - 'contaminants', - 'contaminate', - 'contaminated', - 'contaminates', - 'contaminating', - 'contamination', - 'contaminations', - 'contaminative', - 'contaminator', - 'contaminators', - 'contemners', - 'contemning', - 'contemnors', - 'contemplate', - 'contemplated', - 'contemplates', - 'contemplating', - 'contemplation', - 'contemplations', - 'contemplative', - 'contemplatively', - 'contemplativeness', - 'contemplativenesses', - 'contemplatives', - 'contemplator', - 'contemplators', - 'contemporaneities', - 'contemporaneity', - 'contemporaneous', - 'contemporaneously', - 'contemporaneousness', - 'contemporaneousnesses', - 'contemporaries', - 'contemporarily', - 'contemporary', - 'contemporize', - 'contemporized', - 'contemporizes', - 'contemporizing', - 'contemptibilities', - 'contemptibility', - 'contemptible', - 'contemptibleness', - 'contemptiblenesses', - 'contemptibly', - 'contemptuous', - 'contemptuously', - 'contemptuousness', - 'contemptuousnesses', - 'contenders', - 'contending', - 'contentedly', - 'contentedness', - 'contentednesses', - 'contenting', - 'contention', - 'contentions', - 'contentious', - 'contentiously', - 'contentiousness', - 'contentiousnesses', - 'contentment', - 'contentments', - 'conterminous', - 'conterminously', - 'contestable', - 'contestant', - 'contestants', - 'contestation', - 'contestations', - 'contesters', - 'contesting', - 'contextless', - 'contextual', - 'contextualize', - 'contextualized', - 'contextualizes', - 'contextualizing', - 'contextually', - 'contexture', - 'contextures', - 'contiguities', - 'contiguity', - 'contiguous', - 'contiguously', - 'contiguousness', - 'contiguousnesses', - 'continence', - 'continences', - 'continental', - 'continentally', - 'continentals', - 'continently', - 'continents', - 'contingence', - 'contingences', - 'contingencies', - 'contingency', - 'contingent', - 'contingently', - 'contingents', - 'continually', - 'continuance', - 'continuances', - 'continuant', - 'continuants', - 'continuate', - 'continuation', - 'continuations', - 'continuative', - 'continuator', - 'continuators', - 'continuers', - 'continuing', - 'continuingly', - 'continuities', - 'continuity', - 'continuous', - 'continuously', - 'continuousness', - 'continuousnesses', - 'continuums', - 'contorting', - 'contortion', - 'contortionist', - 'contortionistic', - 'contortionists', - 'contortions', - 'contortive', - 'contouring', - 'contraband', - 'contrabandist', - 'contrabandists', - 'contrabands', - 'contrabass', - 'contrabasses', - 'contrabassist', - 'contrabassists', - 'contrabassoon', - 'contrabassoons', - 'contraception', - 'contraceptions', - 'contraceptive', - 'contraceptives', - 'contracted', - 'contractibilities', - 'contractibility', - 'contractible', - 'contractile', - 'contractilities', - 'contractility', - 'contracting', - 'contraction', - 'contractional', - 'contractionary', - 'contractions', - 'contractive', - 'contractor', - 'contractors', - 'contractual', - 'contractually', - 'contracture', - 'contractures', - 'contradict', - 'contradictable', - 'contradicted', - 'contradicting', - 'contradiction', - 'contradictions', - 'contradictious', - 'contradictor', - 'contradictories', - 'contradictorily', - 'contradictoriness', - 'contradictorinesses', - 'contradictors', - 'contradictory', - 'contradicts', - 'contradistinction', - 'contradistinctions', - 'contradistinctive', - 'contradistinctively', - 'contradistinguish', - 'contradistinguished', - 'contradistinguishes', - 'contradistinguishing', - 'contraindicate', - 'contraindicated', - 'contraindicates', - 'contraindicating', - 'contraindication', - 'contraindications', - 'contralateral', - 'contraltos', - 'contraoctave', - 'contraoctaves', - 'contraposition', - 'contrapositions', - 'contrapositive', - 'contrapositives', - 'contraption', - 'contraptions', - 'contrapuntal', - 'contrapuntally', - 'contrapuntist', - 'contrapuntists', - 'contrarian', - 'contrarians', - 'contraries', - 'contrarieties', - 'contrariety', - 'contrarily', - 'contrariness', - 'contrarinesses', - 'contrarious', - 'contrariwise', - 'contrastable', - 'contrasted', - 'contrasting', - 'contrastive', - 'contrastively', - 'contravene', - 'contravened', - 'contravener', - 'contraveners', - 'contravenes', - 'contravening', - 'contravention', - 'contraventions', - 'contredanse', - 'contredanses', - 'contretemps', - 'contribute', - 'contributed', - 'contributes', - 'contributing', - 'contribution', - 'contributions', - 'contributive', - 'contributively', - 'contributor', - 'contributors', - 'contributory', - 'contritely', - 'contriteness', - 'contritenesses', - 'contrition', - 'contritions', - 'contrivance', - 'contrivances', - 'contrivers', - 'contriving', - 'controllabilities', - 'controllability', - 'controllable', - 'controlled', - 'controller', - 'controllers', - 'controllership', - 'controllerships', - 'controlling', - 'controlment', - 'controlments', - 'controversial', - 'controversialism', - 'controversialisms', - 'controversialist', - 'controversialists', - 'controversially', - 'controversies', - 'controversy', - 'controvert', - 'controverted', - 'controverter', - 'controverters', - 'controvertible', - 'controverting', - 'controverts', - 'contumacies', - 'contumacious', - 'contumaciously', - 'contumelies', - 'contumelious', - 'contumeliously', - 'contusions', - 'conundrums', - 'conurbation', - 'conurbations', - 'convalesce', - 'convalesced', - 'convalescence', - 'convalescences', - 'convalescent', - 'convalescents', - 'convalesces', - 'convalescing', - 'convecting', - 'convection', - 'convectional', - 'convections', - 'convective', - 'convectors', - 'convenience', - 'conveniences', - 'conveniencies', - 'conveniency', - 'convenient', - 'conveniently', - 'conventicle', - 'conventicler', - 'conventiclers', - 'conventicles', - 'conventing', - 'convention', - 'conventional', - 'conventionalism', - 'conventionalisms', - 'conventionalist', - 'conventionalists', - 'conventionalities', - 'conventionality', - 'conventionalization', - 'conventionalizations', - 'conventionalize', - 'conventionalized', - 'conventionalizes', - 'conventionalizing', - 'conventionally', - 'conventioneer', - 'conventioneers', - 'conventions', - 'conventual', - 'conventually', - 'conventuals', - 'convergence', - 'convergences', - 'convergencies', - 'convergency', - 'convergent', - 'converging', - 'conversable', - 'conversance', - 'conversances', - 'conversancies', - 'conversancy', - 'conversant', - 'conversation', - 'conversational', - 'conversationalist', - 'conversationalists', - 'conversationally', - 'conversations', - 'conversazione', - 'conversaziones', - 'conversazioni', - 'conversely', - 'conversers', - 'conversing', - 'conversion', - 'conversional', - 'conversions', - 'convertaplane', - 'convertaplanes', - 'converters', - 'convertibilities', - 'convertibility', - 'convertible', - 'convertibleness', - 'convertiblenesses', - 'convertibles', - 'convertibly', - 'converting', - 'convertiplane', - 'convertiplanes', - 'convertors', - 'convexities', - 'conveyance', - 'conveyancer', - 'conveyancers', - 'conveyances', - 'conveyancing', - 'conveyancings', - 'conveyorise', - 'conveyorised', - 'conveyorises', - 'conveyorising', - 'conveyorization', - 'conveyorizations', - 'conveyorize', - 'conveyorized', - 'conveyorizes', - 'conveyorizing', - 'convicting', - 'conviction', - 'convictions', - 'convincers', - 'convincing', - 'convincingly', - 'convincingness', - 'convincingnesses', - 'convivialities', - 'conviviality', - 'convivially', - 'convocation', - 'convocational', - 'convocations', - 'convoluted', - 'convolutes', - 'convoluting', - 'convolution', - 'convolutions', - 'convolving', - 'convolvuli', - 'convolvulus', - 'convolvuluses', - 'convulsant', - 'convulsants', - 'convulsing', - 'convulsion', - 'convulsionary', - 'convulsions', - 'convulsive', - 'convulsively', - 'convulsiveness', - 'convulsivenesses', - 'cookhouses', - 'cookshacks', - 'cookstoves', - 'coolheaded', - 'coolnesses', - 'coonhounds', - 'cooperages', - 'cooperated', - 'cooperates', - 'cooperating', - 'cooperation', - 'cooperationist', - 'cooperationists', - 'cooperations', - 'cooperative', - 'cooperatively', - 'cooperativeness', - 'cooperativenesses', - 'cooperatives', - 'cooperator', - 'cooperators', - 'coordinate', - 'coordinated', - 'coordinately', - 'coordinateness', - 'coordinatenesses', - 'coordinates', - 'coordinating', - 'coordination', - 'coordinations', - 'coordinative', - 'coordinator', - 'coordinators', - 'coparcenaries', - 'coparcenary', - 'coparcener', - 'coparceners', - 'copartnered', - 'copartnering', - 'copartners', - 'copartnership', - 'copartnerships', - 'copayments', - 'copestones', - 'copingstone', - 'copingstones', - 'copiousness', - 'copiousnesses', - 'coplanarities', - 'coplanarity', - 'coplotting', - 'copolymeric', - 'copolymerization', - 'copolymerizations', - 'copolymerize', - 'copolymerized', - 'copolymerizes', - 'copolymerizing', - 'copolymers', - 'copperases', - 'copperhead', - 'copperheads', - 'copperplate', - 'copperplates', - 'coppersmith', - 'coppersmiths', - 'copresented', - 'copresenting', - 'copresents', - 'copresident', - 'copresidents', - 'coprincipal', - 'coprincipals', - 'coprisoner', - 'coprisoners', - 'coprocessing', - 'coprocessings', - 'coprocessor', - 'coprocessors', - 'coproduced', - 'coproducer', - 'coproducers', - 'coproduces', - 'coproducing', - 'coproduction', - 'coproductions', - 'coproducts', - 'coprolites', - 'coprolitic', - 'copromoter', - 'copromoters', - 'coprophagies', - 'coprophagous', - 'coprophagy', - 'coprophilia', - 'coprophiliac', - 'coprophiliacs', - 'coprophilias', - 'coprophilous', - 'coproprietor', - 'coproprietors', - 'coproprietorship', - 'coproprietorships', - 'coprosperities', - 'coprosperity', - 'copublished', - 'copublisher', - 'copublishers', - 'copublishes', - 'copublishing', - 'copulating', - 'copulation', - 'copulations', - 'copulative', - 'copulatives', - 'copulatory', - 'copurified', - 'copurifies', - 'copurifying', - 'copycatted', - 'copycatting', - 'copyedited', - 'copyediting', - 'copyholder', - 'copyholders', - 'copyreader', - 'copyreaders', - 'copyreading', - 'copyrightable', - 'copyrighted', - 'copyrighting', - 'copyrights', - 'copywriter', - 'copywriters', - 'coquetries', - 'coquetting', - 'coquettish', - 'coquettishly', - 'coquettishness', - 'coquettishnesses', - 'coralbells', - 'coralberries', - 'coralberry', - 'corallines', - 'corbeilles', - 'corbelings', - 'corbelling', - 'corbiculae', - 'cordelling', - 'cordgrasses', - 'cordialities', - 'cordiality', - 'cordialness', - 'cordialnesses', - 'cordierite', - 'cordierites', - 'cordillera', - 'cordilleran', - 'cordilleras', - 'corduroyed', - 'corduroying', - 'cordwainer', - 'cordwaineries', - 'cordwainers', - 'cordwainery', - 'corecipient', - 'corecipients', - 'coredeemed', - 'coredeeming', - 'corelating', - 'coreligionist', - 'coreligionists', - 'corepressor', - 'corepressors', - 'corequisite', - 'corequisites', - 'coresearcher', - 'coresearchers', - 'coresident', - 'coresidential', - 'coresidents', - 'corespondent', - 'corespondents', - 'coriaceous', - 'corianders', - 'corkboards', - 'corkinesses', - 'corkscrewed', - 'corkscrewing', - 'corkscrews', - 'cormorants', - 'cornbreads', - 'corncrakes', - 'cornelians', - 'cornerback', - 'cornerbacks', - 'cornerstone', - 'cornerstones', - 'cornerways', - 'cornerwise', - 'cornetcies', - 'cornetists', - 'cornettist', - 'cornettists', - 'cornfields', - 'cornflakes', - 'cornflower', - 'cornflowers', - 'cornhusker', - 'cornhuskers', - 'cornhusking', - 'cornhuskings', - 'cornification', - 'cornifications', - 'corninesses', - 'cornrowing', - 'cornstalks', - 'cornstarch', - 'cornstarches', - 'cornucopia', - 'cornucopian', - 'cornucopias', - 'corollaries', - 'coromandel', - 'coromandels', - 'coronagraph', - 'coronagraphs', - 'coronaries', - 'coronating', - 'coronation', - 'coronations', - 'coronograph', - 'coronographs', - 'corotating', - 'corotation', - 'corotations', - 'corporalities', - 'corporality', - 'corporally', - 'corporately', - 'corporation', - 'corporations', - 'corporatism', - 'corporatisms', - 'corporatist', - 'corporative', - 'corporativism', - 'corporativisms', - 'corporator', - 'corporators', - 'corporealities', - 'corporeality', - 'corporeally', - 'corporealness', - 'corporealnesses', - 'corporeities', - 'corporeity', - 'corposants', - 'corpulence', - 'corpulences', - 'corpulencies', - 'corpulency', - 'corpulently', - 'corpuscles', - 'corpuscular', - 'corralling', - 'corrasions', - 'correctable', - 'correctest', - 'correcting', - 'correction', - 'correctional', - 'corrections', - 'correctitude', - 'correctitudes', - 'corrective', - 'correctively', - 'correctives', - 'correctness', - 'correctnesses', - 'correctors', - 'correlatable', - 'correlated', - 'correlates', - 'correlating', - 'correlation', - 'correlational', - 'correlations', - 'correlative', - 'correlatively', - 'correlatives', - 'correlator', - 'correlators', - 'correspond', - 'corresponded', - 'correspondence', - 'correspondences', - 'correspondencies', - 'correspondency', - 'correspondent', - 'correspondents', - 'corresponding', - 'correspondingly', - 'corresponds', - 'corresponsive', - 'corrigenda', - 'corrigendum', - 'corrigibilities', - 'corrigibility', - 'corrigible', - 'corroborant', - 'corroborate', - 'corroborated', - 'corroborates', - 'corroborating', - 'corroboration', - 'corroborations', - 'corroborative', - 'corroborator', - 'corroborators', - 'corroboratory', - 'corroboree', - 'corroborees', - 'corrodible', - 'corrosions', - 'corrosively', - 'corrosiveness', - 'corrosivenesses', - 'corrosives', - 'corrugated', - 'corrugates', - 'corrugating', - 'corrugation', - 'corrugations', - 'corrupters', - 'corruptest', - 'corruptibilities', - 'corruptibility', - 'corruptible', - 'corruptibly', - 'corrupting', - 'corruption', - 'corruptionist', - 'corruptionists', - 'corruptions', - 'corruptive', - 'corruptively', - 'corruptness', - 'corruptnesses', - 'corruptors', - 'corselette', - 'corselettes', - 'corsetiere', - 'corsetieres', - 'corsetries', - 'cortically', - 'corticoids', - 'corticosteroid', - 'corticosteroids', - 'corticosterone', - 'corticosterones', - 'corticotrophin', - 'corticotrophins', - 'corticotropin', - 'corticotropins', - 'cortisones', - 'coruscated', - 'coruscates', - 'coruscating', - 'coruscation', - 'coruscations', - 'corybantes', - 'corybantic', - 'corydalises', - 'corymbosely', - 'corynebacteria', - 'corynebacterial', - 'corynebacterium', - 'coryneform', - 'coryphaeus', - 'coscripted', - 'coscripting', - 'cosignatories', - 'cosignatory', - 'cosinesses', - 'cosmetically', - 'cosmetician', - 'cosmeticians', - 'cosmeticize', - 'cosmeticized', - 'cosmeticizes', - 'cosmeticizing', - 'cosmetologies', - 'cosmetologist', - 'cosmetologists', - 'cosmetology', - 'cosmically', - 'cosmochemical', - 'cosmochemist', - 'cosmochemistries', - 'cosmochemistry', - 'cosmochemists', - 'cosmogenic', - 'cosmogonic', - 'cosmogonical', - 'cosmogonies', - 'cosmogonist', - 'cosmogonists', - 'cosmographer', - 'cosmographers', - 'cosmographic', - 'cosmographical', - 'cosmographies', - 'cosmography', - 'cosmological', - 'cosmologically', - 'cosmologies', - 'cosmologist', - 'cosmologists', - 'cosmonauts', - 'cosmopolis', - 'cosmopolises', - 'cosmopolitan', - 'cosmopolitanism', - 'cosmopolitanisms', - 'cosmopolitans', - 'cosmopolite', - 'cosmopolites', - 'cosmopolitism', - 'cosmopolitisms', - 'cosponsored', - 'cosponsoring', - 'cosponsors', - 'cosponsorship', - 'cosponsorships', - 'costarring', - 'costermonger', - 'costermongers', - 'costiveness', - 'costivenesses', - 'costlessly', - 'costliness', - 'costlinesses', - 'costmaries', - 'costumeries', - 'costumiers', - 'cosurfactant', - 'cosurfactants', - 'cotangents', - 'coterminous', - 'coterminously', - 'cotillions', - 'cotoneaster', - 'cotoneasters', - 'cotransduce', - 'cotransduced', - 'cotransduces', - 'cotransducing', - 'cotransduction', - 'cotransductions', - 'cotransfer', - 'cotransferred', - 'cotransferring', - 'cotransfers', - 'cotransport', - 'cotransported', - 'cotransporting', - 'cotransports', - 'cotrustees', - 'cotterless', - 'cottonmouth', - 'cottonmouths', - 'cottonseed', - 'cottonseeds', - 'cottontail', - 'cottontails', - 'cottonweed', - 'cottonweeds', - 'cottonwood', - 'cottonwoods', - 'cotyledonary', - 'cotyledons', - 'cotylosaur', - 'cotylosaurs', - 'coulometer', - 'coulometers', - 'coulometric', - 'coulometrically', - 'coulometries', - 'coulometry', - 'councillor', - 'councillors', - 'councillorship', - 'councillorships', - 'councilman', - 'councilmanic', - 'councilmen', - 'councilors', - 'councilwoman', - 'councilwomen', - 'counselees', - 'counseling', - 'counselings', - 'counselled', - 'counselling', - 'counsellings', - 'counsellor', - 'counsellors', - 'counselors', - 'counselorship', - 'counselorships', - 'countabilities', - 'countability', - 'countdowns', - 'countenance', - 'countenanced', - 'countenancer', - 'countenancers', - 'countenances', - 'countenancing', - 'counteraccusation', - 'counteraccusations', - 'counteract', - 'counteracted', - 'counteracting', - 'counteraction', - 'counteractions', - 'counteractive', - 'counteracts', - 'counteradaptation', - 'counteradaptations', - 'counteradvertising', - 'counteradvertisings', - 'counteragent', - 'counteragents', - 'counteraggression', - 'counteraggressions', - 'counterargue', - 'counterargued', - 'counterargues', - 'counterarguing', - 'counterargument', - 'counterarguments', - 'counterassault', - 'counterassaults', - 'counterattack', - 'counterattacked', - 'counterattacker', - 'counterattackers', - 'counterattacking', - 'counterattacks', - 'counterbade', - 'counterbalance', - 'counterbalanced', - 'counterbalances', - 'counterbalancing', - 'counterbid', - 'counterbidden', - 'counterbidding', - 'counterbids', - 'counterblast', - 'counterblasts', - 'counterblockade', - 'counterblockaded', - 'counterblockades', - 'counterblockading', - 'counterblow', - 'counterblows', - 'countercampaign', - 'countercampaigns', - 'counterchange', - 'counterchanged', - 'counterchanges', - 'counterchanging', - 'countercharge', - 'countercharged', - 'countercharges', - 'countercharging', - 'countercheck', - 'counterchecked', - 'counterchecking', - 'counterchecks', - 'counterclaim', - 'counterclaimed', - 'counterclaiming', - 'counterclaims', - 'counterclockwise', - 'countercommercial', - 'countercomplaint', - 'countercomplaints', - 'counterconditioning', - 'counterconditionings', - 'counterconspiracies', - 'counterconspiracy', - 'counterconvention', - 'counterconventions', - 'countercountermeasure', - 'countercountermeasures', - 'countercoup', - 'countercoups', - 'countercries', - 'countercriticism', - 'countercriticisms', - 'countercry', - 'countercultural', - 'counterculturalism', - 'counterculturalisms', - 'counterculture', - 'countercultures', - 'counterculturist', - 'counterculturists', - 'countercurrent', - 'countercurrently', - 'countercurrents', - 'countercyclical', - 'countercyclically', - 'counterdemand', - 'counterdemands', - 'counterdemonstrate', - 'counterdemonstrated', - 'counterdemonstrates', - 'counterdemonstrating', - 'counterdemonstration', - 'counterdemonstrations', - 'counterdemonstrator', - 'counterdemonstrators', - 'counterdeployment', - 'counterdeployments', - 'countereducational', - 'countereffort', - 'counterefforts', - 'counterespionage', - 'counterespionages', - 'counterevidence', - 'counterevidences', - 'counterexample', - 'counterexamples', - 'counterfactual', - 'counterfeit', - 'counterfeited', - 'counterfeiter', - 'counterfeiters', - 'counterfeiting', - 'counterfeits', - 'counterfire', - 'counterfired', - 'counterfires', - 'counterfiring', - 'counterflow', - 'counterflows', - 'counterfoil', - 'counterfoils', - 'counterforce', - 'counterforces', - 'countergovernment', - 'countergovernments', - 'counterguerilla', - 'counterguerillas', - 'counterguerrilla', - 'counterguerrillas', - 'counterhypotheses', - 'counterhypothesis', - 'counterimage', - 'counterimages', - 'counterincentive', - 'counterincentives', - 'counterinflation', - 'counterinflationary', - 'counterinfluence', - 'counterinfluenced', - 'counterinfluences', - 'counterinfluencing', - 'countering', - 'counterinstance', - 'counterinstances', - 'counterinstitution', - 'counterinstitutions', - 'counterinsurgencies', - 'counterinsurgency', - 'counterinsurgent', - 'counterinsurgents', - 'counterintelligence', - 'counterintelligences', - 'counterinterpretation', - 'counterinterpretations', - 'counterintuitive', - 'counterintuitively', - 'counterion', - 'counterions', - 'counterirritant', - 'counterirritants', - 'counterman', - 'countermand', - 'countermanded', - 'countermanding', - 'countermands', - 'countermarch', - 'countermarched', - 'countermarches', - 'countermarching', - 'countermeasure', - 'countermeasures', - 'countermelodies', - 'countermelody', - 'countermemo', - 'countermemos', - 'countermen', - 'countermine', - 'countermined', - 'countermines', - 'countermining', - 'countermobilization', - 'countermobilizations', - 'countermove', - 'countermoved', - 'countermovement', - 'countermovements', - 'countermoves', - 'countermoving', - 'countermyth', - 'countermyths', - 'counteroffensive', - 'counteroffensives', - 'counteroffer', - 'counteroffers', - 'counterorder', - 'counterordered', - 'counterordering', - 'counterorders', - 'counterpane', - 'counterpanes', - 'counterpart', - 'counterparts', - 'counterpetition', - 'counterpetitioned', - 'counterpetitioning', - 'counterpetitions', - 'counterpicket', - 'counterpicketed', - 'counterpicketing', - 'counterpickets', - 'counterplan', - 'counterplans', - 'counterplay', - 'counterplayer', - 'counterplayers', - 'counterplays', - 'counterplea', - 'counterpleas', - 'counterplot', - 'counterplots', - 'counterplotted', - 'counterplotting', - 'counterploy', - 'counterploys', - 'counterpoint', - 'counterpointed', - 'counterpointing', - 'counterpoints', - 'counterpoise', - 'counterpoised', - 'counterpoises', - 'counterpoising', - 'counterpose', - 'counterposed', - 'counterposes', - 'counterposing', - 'counterpower', - 'counterpowers', - 'counterpressure', - 'counterpressures', - 'counterproductive', - 'counterprogramming', - 'counterprogrammings', - 'counterproject', - 'counterprojects', - 'counterpropaganda', - 'counterpropagandas', - 'counterproposal', - 'counterproposals', - 'counterprotest', - 'counterprotests', - 'counterpunch', - 'counterpunched', - 'counterpuncher', - 'counterpunchers', - 'counterpunches', - 'counterpunching', - 'counterquestion', - 'counterquestioned', - 'counterquestioning', - 'counterquestions', - 'counterraid', - 'counterraided', - 'counterraiding', - 'counterraids', - 'counterrallied', - 'counterrallies', - 'counterrally', - 'counterrallying', - 'counterreaction', - 'counterreactions', - 'counterreform', - 'counterreformation', - 'counterreformations', - 'counterreformer', - 'counterreformers', - 'counterreforms', - 'counterresponse', - 'counterresponses', - 'counterretaliation', - 'counterretaliations', - 'counterrevolution', - 'counterrevolutionaries', - 'counterrevolutionary', - 'counterrevolutions', - 'counterscientific', - 'countershading', - 'countershadings', - 'countershot', - 'countershots', - 'countersign', - 'countersignature', - 'countersignatures', - 'countersigned', - 'countersigning', - 'countersigns', - 'countersink', - 'countersinking', - 'countersinks', - 'countersniper', - 'countersnipers', - 'counterspell', - 'counterspells', - 'counterspies', - 'counterspy', - 'counterstain', - 'counterstained', - 'counterstaining', - 'counterstains', - 'counterstate', - 'counterstated', - 'counterstatement', - 'counterstatements', - 'counterstates', - 'counterstating', - 'counterstep', - 'counterstepped', - 'counterstepping', - 'countersteps', - 'counterstrategies', - 'counterstrategist', - 'counterstrategists', - 'counterstrategy', - 'counterstream', - 'counterstreams', - 'counterstrike', - 'counterstrikes', - 'counterstroke', - 'counterstrokes', - 'counterstyle', - 'counterstyles', - 'countersue', - 'countersued', - 'countersues', - 'countersuggestion', - 'countersuggestions', - 'countersuing', - 'countersuit', - 'countersuits', - 'countersunk', - 'countersurveillance', - 'countersurveillances', - 'countertactics', - 'countertendencies', - 'countertendency', - 'countertenor', - 'countertenors', - 'counterterror', - 'counterterrorism', - 'counterterrorisms', - 'counterterrorist', - 'counterterrorists', - 'counterterrors', - 'counterthreat', - 'counterthreats', - 'counterthrust', - 'counterthrusts', - 'countertop', - 'countertops', - 'countertrade', - 'countertrades', - 'countertradition', - 'countertraditions', - 'countertransference', - 'countertransferences', - 'countertrend', - 'countertrends', - 'countervail', - 'countervailed', - 'countervailing', - 'countervails', - 'counterview', - 'counterviews', - 'counterviolence', - 'counterviolences', - 'counterweight', - 'counterweighted', - 'counterweighting', - 'counterweights', - 'counterworld', - 'counterworlds', - 'countesses', - 'countinghouse', - 'countinghouses', - 'countlessly', - 'countrified', - 'countryfied', - 'countryish', - 'countryman', - 'countrymen', - 'countryseat', - 'countryseats', - 'countryside', - 'countrysides', - 'countrywide', - 'countrywoman', - 'countrywomen', - 'couplement', - 'couplements', - 'couponings', - 'courageous', - 'courageously', - 'courageousness', - 'courageousnesses', - 'courantoes', - 'courgettes', - 'courseware', - 'coursewares', - 'courteously', - 'courteousness', - 'courteousnesses', - 'courtesans', - 'courtesied', - 'courtesies', - 'courtesying', - 'courthouse', - 'courthouses', - 'courtliest', - 'courtliness', - 'courtlinesses', - 'courtrooms', - 'courtships', - 'courtsides', - 'courtyards', - 'couscouses', - 'cousinages', - 'cousinhood', - 'cousinhoods', - 'cousinries', - 'cousinship', - 'cousinships', - 'couturiere', - 'couturieres', - 'couturiers', - 'covalences', - 'covalencies', - 'covalently', - 'covariance', - 'covariances', - 'covariation', - 'covariations', - 'covellines', - 'covellites', - 'covenantal', - 'covenanted', - 'covenantee', - 'covenantees', - 'covenanter', - 'covenanters', - 'covenanting', - 'covenantor', - 'covenantors', - 'coveralled', - 'coverslips', - 'covertness', - 'covertnesses', - 'covertures', - 'covetingly', - 'covetously', - 'covetousness', - 'covetousnesses', - 'cowardices', - 'cowardliness', - 'cowardlinesses', - 'cowberries', - 'cowcatcher', - 'cowcatchers', - 'cowlstaffs', - 'cowlstaves', - 'cowpuncher', - 'cowpunchers', - 'coxcombical', - 'coxcombries', - 'coxswained', - 'coxswaining', - 'coyotillos', - 'cozinesses', - 'crabbedness', - 'crabbednesses', - 'crabgrasses', - 'crabsticks', - 'crackajack', - 'crackajacks', - 'crackbacks', - 'crackbrain', - 'crackbrained', - 'crackbrains', - 'crackdowns', - 'crackerjack', - 'crackerjacks', - 'crackleware', - 'cracklewares', - 'crackliest', - 'cracklings', - 'cradlesong', - 'cradlesongs', - 'craftiness', - 'craftinesses', - 'craftsmanlike', - 'craftsmanly', - 'craftsmanship', - 'craftsmanships', - 'craftspeople', - 'craftsperson', - 'craftspersons', - 'craftswoman', - 'craftswomen', - 'cragginess', - 'cragginesses', - 'cramoisies', - 'cranberries', - 'cranesbill', - 'cranesbills', - 'craniocerebral', - 'craniofacial', - 'craniologies', - 'craniology', - 'craniometries', - 'craniometry', - 'craniosacral', - 'craniotomies', - 'craniotomy', - 'crankcases', - 'crankiness', - 'crankinesses', - 'crankshaft', - 'crankshafts', - 'cranreuchs', - 'crapshooter', - 'crapshooters', - 'crapshoots', - 'crashingly', - 'crashworthiness', - 'crashworthinesses', - 'crashworthy', - 'crassitude', - 'crassitudes', - 'crassnesses', - 'craterlets', - 'craterlike', - 'craunching', - 'cravenness', - 'cravennesses', - 'crawfished', - 'crawfishes', - 'crawfishing', - 'crawlspace', - 'crawlspaces', - 'crayfishes', - 'crayonists', - 'crazinesses', - 'crazyweeds', - 'creakiness', - 'creakinesses', - 'creameries', - 'creaminess', - 'creaminesses', - 'creampuffs', - 'creamwares', - 'creaseless', - 'creatinine', - 'creatinines', - 'creationism', - 'creationisms', - 'creationist', - 'creationists', - 'creatively', - 'creativeness', - 'creativenesses', - 'creativities', - 'creativity', - 'creaturehood', - 'creaturehoods', - 'creatureliness', - 'creaturelinesses', - 'creaturely', - 'credential', - 'credentialed', - 'credentialing', - 'credentialism', - 'credentialisms', - 'credentialled', - 'credentialling', - 'credentials', - 'credibilities', - 'credibility', - 'creditabilities', - 'creditability', - 'creditable', - 'creditableness', - 'creditablenesses', - 'creditably', - 'creditworthiness', - 'creditworthinesses', - 'creditworthy', - 'credulities', - 'credulously', - 'credulousness', - 'credulousnesses', - 'creepiness', - 'creepinesses', - 'cremations', - 'crematoria', - 'crematories', - 'crematorium', - 'crematoriums', - 'crenations', - 'crenelated', - 'crenelation', - 'crenelations', - 'crenellated', - 'crenellation', - 'crenellations', - 'crenelling', - 'crenulated', - 'crenulation', - 'crenulations', - 'creolising', - 'creolization', - 'creolizations', - 'creolizing', - 'creosoting', - 'crepitated', - 'crepitates', - 'crepitating', - 'crepitation', - 'crepitations', - 'crepuscles', - 'crepuscular', - 'crepuscule', - 'crepuscules', - 'crescendoed', - 'crescendoes', - 'crescendoing', - 'crescendos', - 'crescentic', - 'crescively', - 'crestfallen', - 'crestfallenly', - 'crestfallenness', - 'crestfallennesses', - 'cretinisms', - 'crevassing', - 'crewelwork', - 'crewelworks', - 'cribriform', - 'cricketers', - 'cricketing', - 'criminalistics', - 'criminalities', - 'criminality', - 'criminalization', - 'criminalizations', - 'criminalize', - 'criminalized', - 'criminalizes', - 'criminalizing', - 'criminally', - 'criminated', - 'criminates', - 'criminating', - 'crimination', - 'criminations', - 'criminological', - 'criminologically', - 'criminologies', - 'criminologist', - 'criminologists', - 'criminology', - 'crimsoning', - 'crinkliest', - 'crinolined', - 'crinolines', - 'cripplingly', - 'crispbread', - 'crispbreads', - 'crispening', - 'crispiness', - 'crispinesses', - 'crispnesses', - 'crisscross', - 'crisscrossed', - 'crisscrosses', - 'crisscrossing', - 'criterions', - 'criteriums', - 'criticalities', - 'criticality', - 'critically', - 'criticalness', - 'criticalnesses', - 'criticaster', - 'criticasters', - 'criticised', - 'criticises', - 'criticising', - 'criticisms', - 'criticizable', - 'criticized', - 'criticizer', - 'criticizers', - 'criticizes', - 'criticizing', - 'critiquing', - 'crocheters', - 'crocheting', - 'crocidolite', - 'crocidolites', - 'crockeries', - 'crocodiles', - 'crocodilian', - 'crocodilians', - 'croissants', - 'crookbacked', - 'crookbacks', - 'crookedest', - 'crookedness', - 'crookednesses', - 'crookeries', - 'crooknecks', - 'croqueting', - 'croquettes', - 'croquignole', - 'croquignoles', - 'crossabilities', - 'crossability', - 'crossbanded', - 'crossbanding', - 'crossbandings', - 'crossbarred', - 'crossbarring', - 'crossbeams', - 'crossbearer', - 'crossbearers', - 'crossbills', - 'crossbones', - 'crossbowman', - 'crossbowmen', - 'crossbreds', - 'crossbreed', - 'crossbreeding', - 'crossbreeds', - 'crosscourt', - 'crosscurrent', - 'crosscurrents', - 'crosscutting', - 'crosscuttings', - 'crossfires', - 'crosshairs', - 'crosshatch', - 'crosshatched', - 'crosshatches', - 'crosshatching', - 'crossheads', - 'crosslinguistic', - 'crosslinguistically', - 'crossnesses', - 'crossopterygian', - 'crossopterygians', - 'crossovers', - 'crosspatch', - 'crosspatches', - 'crosspiece', - 'crosspieces', - 'crossroads', - 'crossruffed', - 'crossruffing', - 'crossruffs', - 'crosstalks', - 'crosstrees', - 'crosswalks', - 'crosswinds', - 'crosswords', - 'crotchetiness', - 'crotchetinesses', - 'croustades', - 'crowbarred', - 'crowbarring', - 'crowberries', - 'crowdedness', - 'crowdednesses', - 'crowkeeper', - 'crowkeepers', - 'crowstepped', - 'cruciferous', - 'crucifixes', - 'crucifixion', - 'crucifixions', - 'cruciforms', - 'crucifying', - 'crudenesses', - 'cruelnesses', - 'cruiserweight', - 'cruiserweights', - 'crumbliest', - 'crumbliness', - 'crumblinesses', - 'crumblings', - 'crumminess', - 'crumminesses', - 'crumpliest', - 'crunchable', - 'crunchiest', - 'crunchiness', - 'crunchinesses', - 'crushingly', - 'crushproof', - 'crustacean', - 'crustaceans', - 'crustaceous', - 'crustiness', - 'crustinesses', - 'cryobiological', - 'cryobiologies', - 'cryobiologist', - 'cryobiologists', - 'cryobiology', - 'cryogenically', - 'cryogenics', - 'cryogenies', - 'cryophilic', - 'cryopreservation', - 'cryopreservations', - 'cryopreserve', - 'cryopreserved', - 'cryopreserves', - 'cryopreserving', - 'cryoprobes', - 'cryoprotectant', - 'cryoprotectants', - 'cryoprotective', - 'cryoscopes', - 'cryoscopic', - 'cryoscopies', - 'cryostatic', - 'cryosurgeon', - 'cryosurgeons', - 'cryosurgeries', - 'cryosurgery', - 'cryosurgical', - 'cryotherapies', - 'cryotherapy', - 'cryptanalyses', - 'cryptanalysis', - 'cryptanalyst', - 'cryptanalysts', - 'cryptanalytic', - 'cryptanalytical', - 'cryptarithm', - 'cryptarithms', - 'cryptically', - 'cryptococcal', - 'cryptococci', - 'cryptococcoses', - 'cryptococcosis', - 'cryptococcus', - 'cryptocrystalline', - 'cryptogamic', - 'cryptogamous', - 'cryptogams', - 'cryptogenic', - 'cryptogram', - 'cryptograms', - 'cryptograph', - 'cryptographer', - 'cryptographers', - 'cryptographic', - 'cryptographically', - 'cryptographies', - 'cryptographs', - 'cryptography', - 'cryptologic', - 'cryptological', - 'cryptologies', - 'cryptologist', - 'cryptologists', - 'cryptology', - 'cryptomeria', - 'cryptomerias', - 'cryptonyms', - 'cryptorchid', - 'cryptorchidism', - 'cryptorchidisms', - 'cryptorchids', - 'cryptorchism', - 'cryptorchisms', - 'cryptozoologies', - 'cryptozoologist', - 'cryptozoologists', - 'cryptozoology', - 'crystalize', - 'crystalized', - 'crystalizes', - 'crystalizing', - 'crystalline', - 'crystallinities', - 'crystallinity', - 'crystallise', - 'crystallised', - 'crystallises', - 'crystallising', - 'crystallite', - 'crystallites', - 'crystallizable', - 'crystallization', - 'crystallizations', - 'crystallize', - 'crystallized', - 'crystallizer', - 'crystallizers', - 'crystallizes', - 'crystallizing', - 'crystallographer', - 'crystallographers', - 'crystallographic', - 'crystallographically', - 'crystallographies', - 'crystallography', - 'crystalloid', - 'crystalloidal', - 'crystalloids', - 'ctenophoran', - 'ctenophorans', - 'ctenophore', - 'ctenophores', - 'cuadrillas', - 'cubbyholes', - 'cubicities', - 'cuckolding', - 'cuckoldries', - 'cuckooflower', - 'cuckooflowers', - 'cuckoopint', - 'cuckoopints', - 'cuddlesome', - 'cudgelling', - 'cuirassier', - 'cuirassiers', - 'cuirassing', - 'culinarian', - 'culinarians', - 'culinarily', - 'cullenders', - 'culminated', - 'culminates', - 'culminating', - 'culmination', - 'culminations', - 'culpabilities', - 'culpability', - 'culpableness', - 'culpablenesses', - 'cultishness', - 'cultishnesses', - 'cultivabilities', - 'cultivability', - 'cultivable', - 'cultivatable', - 'cultivated', - 'cultivates', - 'cultivating', - 'cultivation', - 'cultivations', - 'cultivator', - 'cultivators', - 'culturally', - 'cumberbund', - 'cumberbunds', - 'cumbersome', - 'cumbersomely', - 'cumbersomeness', - 'cumbersomenesses', - 'cumbrously', - 'cumbrousness', - 'cumbrousnesses', - 'cummerbund', - 'cummerbunds', - 'cumulating', - 'cumulation', - 'cumulations', - 'cumulative', - 'cumulatively', - 'cumulativeness', - 'cumulativenesses', - 'cumuliform', - 'cumulonimbi', - 'cumulonimbus', - 'cumulonimbuses', - 'cunctation', - 'cunctations', - 'cunctative', - 'cuneiforms', - 'cunnilinctus', - 'cunnilinctuses', - 'cunnilingus', - 'cunnilinguses', - 'cunningest', - 'cunningness', - 'cunningnesses', - 'cupbearers', - 'cupellation', - 'cupellations', - 'cupidities', - 'cupriferous', - 'cupronickel', - 'cupronickels', - 'curabilities', - 'curability', - 'curableness', - 'curablenesses', - 'curarization', - 'curarizations', - 'curarizing', - 'curatively', - 'curatorial', - 'curatorship', - 'curatorships', - 'curbstones', - 'curettages', - 'curettement', - 'curettements', - 'curiosities', - 'curiousest', - 'curiousness', - 'curiousnesses', - 'curlicuing', - 'curlinesses', - 'curlpapers', - 'curmudgeon', - 'curmudgeonliness', - 'curmudgeonlinesses', - 'curmudgeonly', - 'curmudgeons', - 'currencies', - 'currentness', - 'currentnesses', - 'curricular', - 'curriculum', - 'curriculums', - 'currieries', - 'currycombed', - 'currycombing', - 'currycombs', - 'cursedness', - 'cursednesses', - 'cursiveness', - 'cursivenesses', - 'cursoriness', - 'cursorinesses', - 'curtailers', - 'curtailing', - 'curtailment', - 'curtailments', - 'curtaining', - 'curtainless', - 'curtalaxes', - 'curtilages', - 'curtnesses', - 'curtseying', - 'curvaceous', - 'curvacious', - 'curvatures', - 'curveballed', - 'curveballing', - 'curveballs', - 'curvetting', - 'curvilinear', - 'curvilinearities', - 'curvilinearity', - 'cushioning', - 'cushionless', - 'cuspidation', - 'cuspidations', - 'cussedness', - 'cussednesses', - 'custodians', - 'custodianship', - 'custodianships', - 'customarily', - 'customariness', - 'customarinesses', - 'customhouse', - 'customhouses', - 'customised', - 'customises', - 'customising', - 'customization', - 'customizations', - 'customized', - 'customizer', - 'customizers', - 'customizes', - 'customizing', - 'customshouse', - 'customshouses', - 'cutabilities', - 'cutability', - 'cutaneously', - 'cutcheries', - 'cutenesses', - 'cutgrasses', - 'cutinising', - 'cutinizing', - 'cutthroats', - 'cuttlebone', - 'cuttlebones', - 'cuttlefish', - 'cuttlefishes', - 'cyanamides', - 'cyanoacrylate', - 'cyanoacrylates', - 'cyanobacteria', - 'cyanobacterium', - 'cyanocobalamin', - 'cyanocobalamine', - 'cyanocobalamines', - 'cyanocobalamins', - 'cyanoethylate', - 'cyanoethylated', - 'cyanoethylates', - 'cyanoethylating', - 'cyanoethylation', - 'cyanoethylations', - 'cyanogeneses', - 'cyanogenesis', - 'cyanogenetic', - 'cyanogenic', - 'cyanohydrin', - 'cyanohydrins', - 'cybernated', - 'cybernation', - 'cybernations', - 'cybernetic', - 'cybernetical', - 'cybernetically', - 'cybernetician', - 'cyberneticians', - 'cyberneticist', - 'cyberneticists', - 'cybernetics', - 'cyberpunks', - 'cyberspace', - 'cyberspaces', - 'cycadeoids', - 'cycadophyte', - 'cycadophytes', - 'cyclamates', - 'cyclazocine', - 'cyclazocines', - 'cyclicalities', - 'cyclicality', - 'cyclically', - 'cyclicities', - 'cyclization', - 'cyclizations', - 'cycloaddition', - 'cycloadditions', - 'cycloaliphatic', - 'cyclodextrin', - 'cyclodextrins', - 'cyclodiene', - 'cyclodienes', - 'cyclogeneses', - 'cyclogenesis', - 'cyclohexane', - 'cyclohexanes', - 'cyclohexanone', - 'cyclohexanones', - 'cycloheximide', - 'cycloheximides', - 'cyclohexylamine', - 'cyclohexylamines', - 'cyclometer', - 'cyclometers', - 'cyclonically', - 'cycloolefin', - 'cycloolefinic', - 'cycloolefins', - 'cyclopaedia', - 'cyclopaedias', - 'cycloparaffin', - 'cycloparaffins', - 'cyclopedia', - 'cyclopedias', - 'cyclopedic', - 'cyclophosphamide', - 'cyclophosphamides', - 'cyclopropane', - 'cyclopropanes', - 'cycloramas', - 'cycloramic', - 'cycloserine', - 'cycloserines', - 'cyclosporine', - 'cyclosporines', - 'cyclostome', - 'cyclostomes', - 'cyclostyle', - 'cyclostyled', - 'cyclostyles', - 'cyclostyling', - 'cyclothymia', - 'cyclothymias', - 'cyclothymic', - 'cyclotomic', - 'cyclotrons', - 'cylindered', - 'cylindering', - 'cylindrical', - 'cylindrically', - 'cymbalists', - 'cymbidiums', - 'cymophanes', - 'cypripedia', - 'cypripedium', - 'cypripediums', - 'cyproheptadine', - 'cyproheptadines', - 'cyproterone', - 'cyproterones', - 'cysteamine', - 'cysteamines', - 'cysticerci', - 'cysticercoid', - 'cysticercoids', - 'cysticercoses', - 'cysticercosis', - 'cysticercus', - 'cystinuria', - 'cystinurias', - 'cystitides', - 'cystocarps', - 'cystoliths', - 'cystoscope', - 'cystoscopes', - 'cystoscopic', - 'cystoscopies', - 'cystoscopy', - 'cytochalasin', - 'cytochalasins', - 'cytochemical', - 'cytochemistries', - 'cytochemistry', - 'cytochrome', - 'cytochromes', - 'cytodifferentiation', - 'cytodifferentiations', - 'cytogenetic', - 'cytogenetical', - 'cytogenetically', - 'cytogeneticist', - 'cytogeneticists', - 'cytogenetics', - 'cytogenies', - 'cytokineses', - 'cytokinesis', - 'cytokinetic', - 'cytokinins', - 'cytological', - 'cytologically', - 'cytologies', - 'cytologist', - 'cytologists', - 'cytolysins', - 'cytomegalic', - 'cytomegalovirus', - 'cytomegaloviruses', - 'cytomembrane', - 'cytomembranes', - 'cytopathic', - 'cytopathogenic', - 'cytopathogenicities', - 'cytopathogenicity', - 'cytophilic', - 'cytophotometric', - 'cytophotometries', - 'cytophotometry', - 'cytoplasmic', - 'cytoplasmically', - 'cytoplasms', - 'cytoskeletal', - 'cytoskeleton', - 'cytoskeletons', - 'cytostatic', - 'cytostatically', - 'cytostatics', - 'cytotaxonomic', - 'cytotaxonomically', - 'cytotaxonomies', - 'cytotaxonomy', - 'cytotechnologies', - 'cytotechnologist', - 'cytotechnologists', - 'cytotechnology', - 'cytotoxicities', - 'cytotoxicity', - 'cytotoxins', - 'czarevitch', - 'czarevitches', - 'dachshunds', - 'dactylologies', - 'dactylology', - 'daftnesses', - 'daggerlike', - 'daguerreotype', - 'daguerreotyped', - 'daguerreotypes', - 'daguerreotypies', - 'daguerreotyping', - 'daguerreotypist', - 'daguerreotypists', - 'daguerreotypy', - 'dailinesses', - 'daintiness', - 'daintinesses', - 'dairymaids', - 'dalliances', - 'dalmatians', - 'damageabilities', - 'damageability', - 'damagingly', - 'damascened', - 'damascenes', - 'damascening', - 'damnableness', - 'damnablenesses', - 'damnations', - 'damnedests', - 'damnifying', - 'dampnesses', - 'damselfish', - 'damselfishes', - 'damselflies', - 'dandelions', - 'dandification', - 'dandifications', - 'dandifying', - 'dandyishly', - 'dangerously', - 'dangerousness', - 'dangerousnesses', - 'danknesses', - 'dapperness', - 'dappernesses', - 'daredevilries', - 'daredevilry', - 'daredevils', - 'daredeviltries', - 'daredeviltry', - 'daringness', - 'daringnesses', - 'darknesses', - 'darlingness', - 'darlingnesses', - 'dartboards', - 'dashboards', - 'dastardliness', - 'dastardlinesses', - 'datednesses', - 'datelining', - 'daughterless', - 'daundering', - 'daunomycin', - 'daunomycins', - 'daunorubicin', - 'daunorubicins', - 'dauntingly', - 'dauntlessly', - 'dauntlessness', - 'dauntlessnesses', - 'davenports', - 'dawsonites', - 'daydreamed', - 'daydreamer', - 'daydreamers', - 'daydreaming', - 'daydreamlike', - 'dayflowers', - 'daylighted', - 'daylighting', - 'daylightings', - 'dazednesses', - 'dazzlingly', - 'deacidification', - 'deacidifications', - 'deacidified', - 'deacidifies', - 'deacidifying', - 'deaconesses', - 'deaconries', - 'deactivate', - 'deactivated', - 'deactivates', - 'deactivating', - 'deactivation', - 'deactivations', - 'deactivator', - 'deactivators', - 'deadeningly', - 'deadenings', - 'deadheaded', - 'deadheading', - 'deadlifted', - 'deadlifting', - 'deadlights', - 'deadliness', - 'deadlinesses', - 'deadlocked', - 'deadlocking', - 'deadnesses', - 'deadpanned', - 'deadpanner', - 'deadpanners', - 'deadpanning', - 'deadweight', - 'deadweights', - 'deaerating', - 'deaeration', - 'deaerations', - 'deaerators', - 'deafeningly', - 'deafnesses', - 'dealations', - 'dealership', - 'dealerships', - 'dealfishes', - 'deaminases', - 'deaminated', - 'deaminates', - 'deaminating', - 'deamination', - 'deaminations', - 'dearnesses', - 'deathblows', - 'deathlessly', - 'deathlessness', - 'deathlessnesses', - 'deathtraps', - 'deathwatch', - 'deathwatches', - 'debarkation', - 'debarkations', - 'debarments', - 'debasement', - 'debasements', - 'debatement', - 'debatements', - 'debauchees', - 'debaucheries', - 'debauchers', - 'debauchery', - 'debauching', - 'debentures', - 'debilitate', - 'debilitated', - 'debilitates', - 'debilitating', - 'debilitation', - 'debilitations', - 'debilities', - 'debonairly', - 'debonairness', - 'debonairnesses', - 'debouching', - 'debouchment', - 'debouchments', - 'debridement', - 'debridements', - 'debriefing', - 'debriefings', - 'debruising', - 'debutantes', - 'decadences', - 'decadencies', - 'decadently', - 'decaffeinate', - 'decaffeinated', - 'decaffeinates', - 'decaffeinating', - 'decaffeination', - 'decaffeinations', - 'decahedron', - 'decahedrons', - 'decalcification', - 'decalcifications', - 'decalcified', - 'decalcifies', - 'decalcifying', - 'decalcomania', - 'decalcomanias', - 'decaliters', - 'decalogues', - 'decameters', - 'decamethonium', - 'decamethoniums', - 'decametric', - 'decampment', - 'decampments', - 'decantation', - 'decantations', - 'decapitate', - 'decapitated', - 'decapitates', - 'decapitating', - 'decapitation', - 'decapitations', - 'decapitator', - 'decapitators', - 'decapodans', - 'decapodous', - 'decarbonate', - 'decarbonated', - 'decarbonates', - 'decarbonating', - 'decarbonation', - 'decarbonations', - 'decarbonize', - 'decarbonized', - 'decarbonizer', - 'decarbonizers', - 'decarbonizes', - 'decarbonizing', - 'decarboxylase', - 'decarboxylases', - 'decarboxylate', - 'decarboxylated', - 'decarboxylates', - 'decarboxylating', - 'decarboxylation', - 'decarboxylations', - 'decarburization', - 'decarburizations', - 'decarburize', - 'decarburized', - 'decarburizes', - 'decarburizing', - 'decasualization', - 'decasualizations', - 'decasyllabic', - 'decasyllabics', - 'decasyllable', - 'decasyllables', - 'decathlete', - 'decathletes', - 'decathlons', - 'deceitfully', - 'deceitfulness', - 'deceitfulnesses', - 'deceivable', - 'deceivingly', - 'decelerate', - 'decelerated', - 'decelerates', - 'decelerating', - 'deceleration', - 'decelerations', - 'decelerator', - 'decelerators', - 'decemviral', - 'decemvirate', - 'decemvirates', - 'decenaries', - 'decennially', - 'decennials', - 'decenniums', - 'decentered', - 'decentering', - 'decentralization', - 'decentralizations', - 'decentralize', - 'decentralized', - 'decentralizes', - 'decentralizing', - 'decentring', - 'deceptional', - 'deceptions', - 'deceptively', - 'deceptiveness', - 'deceptivenesses', - 'decerebrate', - 'decerebrated', - 'decerebrates', - 'decerebrating', - 'decerebration', - 'decerebrations', - 'decertification', - 'decertifications', - 'decertified', - 'decertifies', - 'decertifying', - 'dechlorinate', - 'dechlorinated', - 'dechlorinates', - 'dechlorinating', - 'dechlorination', - 'dechlorinations', - 'decidabilities', - 'decidability', - 'decidedness', - 'decidednesses', - 'deciduousness', - 'deciduousnesses', - 'deciliters', - 'decillions', - 'decimalization', - 'decimalizations', - 'decimalize', - 'decimalized', - 'decimalizes', - 'decimalizing', - 'decimating', - 'decimation', - 'decimations', - 'decimeters', - 'decipherable', - 'deciphered', - 'decipherer', - 'decipherers', - 'deciphering', - 'decipherment', - 'decipherments', - 'decisional', - 'decisioned', - 'decisioning', - 'decisively', - 'decisiveness', - 'decisivenesses', - 'deckhouses', - 'declaimers', - 'declaiming', - 'declamation', - 'declamations', - 'declamatory', - 'declarable', - 'declarants', - 'declaration', - 'declarations', - 'declarative', - 'declaratively', - 'declaratory', - 'declassification', - 'declassifications', - 'declassified', - 'declassifies', - 'declassify', - 'declassifying', - 'declassing', - 'declension', - 'declensional', - 'declensions', - 'declinable', - 'declination', - 'declinational', - 'declinations', - 'declivities', - 'declivitous', - 'decoctions', - 'decollated', - 'decollates', - 'decollating', - 'decollation', - 'decollations', - 'decolletage', - 'decolletages', - 'decolletes', - 'decolonization', - 'decolonizations', - 'decolonize', - 'decolonized', - 'decolonizes', - 'decolonizing', - 'decoloring', - 'decolorization', - 'decolorizations', - 'decolorize', - 'decolorized', - 'decolorizer', - 'decolorizers', - 'decolorizes', - 'decolorizing', - 'decoloured', - 'decolouring', - 'decommission', - 'decommissioned', - 'decommissioning', - 'decommissions', - 'decompensate', - 'decompensated', - 'decompensates', - 'decompensating', - 'decompensation', - 'decompensations', - 'decomposabilities', - 'decomposability', - 'decomposable', - 'decomposed', - 'decomposer', - 'decomposers', - 'decomposes', - 'decomposing', - 'decomposition', - 'decompositions', - 'decompound', - 'decompress', - 'decompressed', - 'decompresses', - 'decompressing', - 'decompression', - 'decompressions', - 'deconcentrate', - 'deconcentrated', - 'deconcentrates', - 'deconcentrating', - 'deconcentration', - 'deconcentrations', - 'decondition', - 'deconditioned', - 'deconditioning', - 'deconditions', - 'decongestant', - 'decongestants', - 'decongested', - 'decongesting', - 'decongestion', - 'decongestions', - 'decongestive', - 'decongests', - 'deconsecrate', - 'deconsecrated', - 'deconsecrates', - 'deconsecrating', - 'deconsecration', - 'deconsecrations', - 'deconstruct', - 'deconstructed', - 'deconstructing', - 'deconstruction', - 'deconstructionist', - 'deconstructionists', - 'deconstructions', - 'deconstructive', - 'deconstructor', - 'deconstructors', - 'deconstructs', - 'decontaminate', - 'decontaminated', - 'decontaminates', - 'decontaminating', - 'decontamination', - 'decontaminations', - 'decontaminator', - 'decontaminators', - 'decontrolled', - 'decontrolling', - 'decontrols', - 'decorating', - 'decoration', - 'decorations', - 'decorative', - 'decoratively', - 'decorativeness', - 'decorativenesses', - 'decorators', - 'decorously', - 'decorousness', - 'decorousnesses', - 'decorticate', - 'decorticated', - 'decorticates', - 'decorticating', - 'decortication', - 'decortications', - 'decorticator', - 'decorticators', - 'decoupaged', - 'decoupages', - 'decoupaging', - 'decoupling', - 'decreasing', - 'decreasingly', - 'decremental', - 'decremented', - 'decrementing', - 'decrements', - 'decrepitate', - 'decrepitated', - 'decrepitates', - 'decrepitating', - 'decrepitation', - 'decrepitations', - 'decrepitly', - 'decrepitude', - 'decrepitudes', - 'decrescendo', - 'decrescendos', - 'decrescent', - 'decriminalization', - 'decriminalizations', - 'decriminalize', - 'decriminalized', - 'decriminalizes', - 'decriminalizing', - 'decrowning', - 'decrypting', - 'decryption', - 'decryptions', - 'decussated', - 'decussates', - 'decussating', - 'decussation', - 'decussations', - 'dedicatedly', - 'dedicatees', - 'dedicating', - 'dedication', - 'dedications', - 'dedicators', - 'dedicatory', - 'dedifferentiate', - 'dedifferentiated', - 'dedifferentiates', - 'dedifferentiating', - 'dedifferentiation', - 'dedifferentiations', - 'deductibilities', - 'deductibility', - 'deductible', - 'deductibles', - 'deductions', - 'deductively', - 'deepnesses', - 'deerberries', - 'deerhounds', - 'deerstalker', - 'deerstalkers', - 'deescalate', - 'deescalated', - 'deescalates', - 'deescalating', - 'deescalation', - 'deescalations', - 'defacement', - 'defacements', - 'defalcated', - 'defalcates', - 'defalcating', - 'defalcation', - 'defalcations', - 'defalcator', - 'defalcators', - 'defamation', - 'defamations', - 'defamatory', - 'defaulters', - 'defaulting', - 'defeasance', - 'defeasances', - 'defeasibilities', - 'defeasibility', - 'defeasible', - 'defeatisms', - 'defeatists', - 'defeatures', - 'defecating', - 'defecation', - 'defecations', - 'defections', - 'defectively', - 'defectiveness', - 'defectivenesses', - 'defectives', - 'defeminization', - 'defeminizations', - 'defeminize', - 'defeminized', - 'defeminizes', - 'defeminizing', - 'defenceman', - 'defencemen', - 'defendable', - 'defendants', - 'defenestrate', - 'defenestrated', - 'defenestrates', - 'defenestrating', - 'defenestration', - 'defenestrations', - 'defenseless', - 'defenselessly', - 'defenselessness', - 'defenselessnesses', - 'defenseman', - 'defensemen', - 'defensibilities', - 'defensibility', - 'defensible', - 'defensibly', - 'defensively', - 'defensiveness', - 'defensivenesses', - 'defensives', - 'deferences', - 'deferential', - 'deferentially', - 'deferments', - 'deferrable', - 'deferrables', - 'defervescence', - 'defervescences', - 'defibrillate', - 'defibrillated', - 'defibrillates', - 'defibrillating', - 'defibrillation', - 'defibrillations', - 'defibrillator', - 'defibrillators', - 'defibrinate', - 'defibrinated', - 'defibrinates', - 'defibrinating', - 'defibrination', - 'defibrinations', - 'deficiencies', - 'deficiency', - 'deficiently', - 'deficients', - 'defilading', - 'defilement', - 'defilements', - 'definement', - 'definements', - 'definienda', - 'definiendum', - 'definientia', - 'definitely', - 'definiteness', - 'definitenesses', - 'definition', - 'definitional', - 'definitions', - 'definitive', - 'definitively', - 'definitiveness', - 'definitivenesses', - 'definitives', - 'definitize', - 'definitized', - 'definitizes', - 'definitizing', - 'definitude', - 'definitudes', - 'deflagrate', - 'deflagrated', - 'deflagrates', - 'deflagrating', - 'deflagration', - 'deflagrations', - 'deflationary', - 'deflations', - 'deflectable', - 'deflecting', - 'deflection', - 'deflections', - 'deflective', - 'deflectors', - 'defloration', - 'deflorations', - 'deflowered', - 'deflowerer', - 'deflowerers', - 'deflowering', - 'defocusing', - 'defocussed', - 'defocusses', - 'defocussing', - 'defoliants', - 'defoliated', - 'defoliates', - 'defoliating', - 'defoliation', - 'defoliations', - 'defoliator', - 'defoliators', - 'deforcement', - 'deforcements', - 'deforestation', - 'deforestations', - 'deforested', - 'deforesting', - 'deformable', - 'deformalize', - 'deformalized', - 'deformalizes', - 'deformalizing', - 'deformation', - 'deformational', - 'deformations', - 'deformative', - 'deformities', - 'defrauders', - 'defrauding', - 'defrayable', - 'defrocking', - 'defrosters', - 'defrosting', - 'deftnesses', - 'degaussers', - 'degaussing', - 'degeneracies', - 'degeneracy', - 'degenerate', - 'degenerated', - 'degenerately', - 'degenerateness', - 'degeneratenesses', - 'degenerates', - 'degenerating', - 'degeneration', - 'degenerations', - 'degenerative', - 'deglaciated', - 'deglaciation', - 'deglaciations', - 'deglamorization', - 'deglamorizations', - 'deglamorize', - 'deglamorized', - 'deglamorizes', - 'deglamorizing', - 'deglutition', - 'deglutitions', - 'degradable', - 'degradation', - 'degradations', - 'degradative', - 'degradedly', - 'degradingly', - 'degranulation', - 'degranulations', - 'degreasers', - 'degreasing', - 'degressive', - 'degressively', - 'degringolade', - 'degringolades', - 'degustation', - 'degustations', - 'dehiscence', - 'dehiscences', - 'dehumanization', - 'dehumanizations', - 'dehumanize', - 'dehumanized', - 'dehumanizes', - 'dehumanizing', - 'dehumidification', - 'dehumidifications', - 'dehumidified', - 'dehumidifier', - 'dehumidifiers', - 'dehumidifies', - 'dehumidify', - 'dehumidifying', - 'dehydrated', - 'dehydrates', - 'dehydrating', - 'dehydration', - 'dehydrations', - 'dehydrator', - 'dehydrators', - 'dehydrochlorinase', - 'dehydrochlorinases', - 'dehydrochlorinate', - 'dehydrochlorinated', - 'dehydrochlorinates', - 'dehydrochlorinating', - 'dehydrochlorination', - 'dehydrochlorinations', - 'dehydrogenase', - 'dehydrogenases', - 'dehydrogenate', - 'dehydrogenated', - 'dehydrogenates', - 'dehydrogenating', - 'dehydrogenation', - 'dehydrogenations', - 'deification', - 'deifications', - 'deindustrialization', - 'deindustrializations', - 'deindustrialize', - 'deindustrialized', - 'deindustrializes', - 'deindustrializing', - 'deinonychus', - 'deinonychuses', - 'deinstitutionalization', - 'deinstitutionalizations', - 'deinstitutionalize', - 'deinstitutionalized', - 'deinstitutionalizes', - 'deinstitutionalizing', - 'deionization', - 'deionizations', - 'deionizers', - 'deionizing', - 'deistically', - 'dejectedly', - 'dejectedness', - 'dejectednesses', - 'dejections', - 'dekaliters', - 'dekameters', - 'dekametric', - 'delaminate', - 'delaminated', - 'delaminates', - 'delaminating', - 'delamination', - 'delaminations', - 'delectabilities', - 'delectability', - 'delectable', - 'delectables', - 'delectably', - 'delectation', - 'delectations', - 'delegacies', - 'delegatees', - 'delegating', - 'delegation', - 'delegations', - 'delegators', - 'delegitimation', - 'delegitimations', - 'deleterious', - 'deleteriously', - 'deleteriousness', - 'deleteriousnesses', - 'delftwares', - 'deliberate', - 'deliberated', - 'deliberately', - 'deliberateness', - 'deliberatenesses', - 'deliberates', - 'deliberating', - 'deliberation', - 'deliberations', - 'deliberative', - 'deliberatively', - 'deliberativeness', - 'deliberativenesses', - 'delicacies', - 'delicately', - 'delicatessen', - 'delicatessens', - 'deliciously', - 'deliciousness', - 'deliciousnesses', - 'delightedly', - 'delightedness', - 'delightednesses', - 'delighters', - 'delightful', - 'delightfully', - 'delightfulness', - 'delightfulnesses', - 'delighting', - 'delightsome', - 'delimitation', - 'delimitations', - 'delimiters', - 'delimiting', - 'delineated', - 'delineates', - 'delineating', - 'delineation', - 'delineations', - 'delineative', - 'delineator', - 'delineators', - 'delinquencies', - 'delinquency', - 'delinquent', - 'delinquently', - 'delinquents', - 'deliquesce', - 'deliquesced', - 'deliquescence', - 'deliquescences', - 'deliquescent', - 'deliquesces', - 'deliquescing', - 'deliriously', - 'deliriousness', - 'deliriousnesses', - 'deliverabilities', - 'deliverability', - 'deliverable', - 'deliverance', - 'deliverances', - 'deliverers', - 'deliveries', - 'delivering', - 'deliveryman', - 'deliverymen', - 'delocalization', - 'delocalizations', - 'delocalize', - 'delocalized', - 'delocalizes', - 'delocalizing', - 'delphically', - 'delphinium', - 'delphiniums', - 'deltoideus', - 'delusional', - 'delusionary', - 'delusively', - 'delusiveness', - 'delusivenesses', - 'delustered', - 'delustering', - 'demagnetization', - 'demagnetizations', - 'demagnetize', - 'demagnetized', - 'demagnetizer', - 'demagnetizers', - 'demagnetizes', - 'demagnetizing', - 'demagogically', - 'demagogies', - 'demagoging', - 'demagogued', - 'demagogueries', - 'demagoguery', - 'demagogues', - 'demagoguing', - 'demandable', - 'demandants', - 'demandingly', - 'demandingness', - 'demandingnesses', - 'demantoids', - 'demarcated', - 'demarcates', - 'demarcating', - 'demarcation', - 'demarcations', - 'dematerialization', - 'dematerializations', - 'dematerialize', - 'dematerialized', - 'dematerializes', - 'dematerializing', - 'demeanours', - 'dementedly', - 'dementedness', - 'dementednesses', - 'demergered', - 'demergering', - 'demeriting', - 'demigoddess', - 'demigoddesses', - 'demilitarization', - 'demilitarizations', - 'demilitarize', - 'demilitarized', - 'demilitarizes', - 'demilitarizing', - 'demimondaine', - 'demimondaines', - 'demimondes', - 'demineralization', - 'demineralizations', - 'demineralize', - 'demineralized', - 'demineralizer', - 'demineralizers', - 'demineralizes', - 'demineralizing', - 'demisemiquaver', - 'demisemiquavers', - 'demissions', - 'demitasses', - 'demiurgical', - 'demiworlds', - 'demobilization', - 'demobilizations', - 'demobilize', - 'demobilized', - 'demobilizes', - 'demobilizing', - 'democracies', - 'democratic', - 'democratically', - 'democratization', - 'democratizations', - 'democratize', - 'democratized', - 'democratizer', - 'democratizers', - 'democratizes', - 'democratizing', - 'demodulate', - 'demodulated', - 'demodulates', - 'demodulating', - 'demodulation', - 'demodulations', - 'demodulator', - 'demodulators', - 'demographer', - 'demographers', - 'demographic', - 'demographical', - 'demographically', - 'demographics', - 'demographies', - 'demography', - 'demoiselle', - 'demoiselles', - 'demolished', - 'demolisher', - 'demolishers', - 'demolishes', - 'demolishing', - 'demolishment', - 'demolishments', - 'demolition', - 'demolitionist', - 'demolitionists', - 'demolitions', - 'demonesses', - 'demonetization', - 'demonetizations', - 'demonetize', - 'demonetized', - 'demonetizes', - 'demonetizing', - 'demoniacal', - 'demoniacally', - 'demonically', - 'demonising', - 'demonization', - 'demonizations', - 'demonizing', - 'demonological', - 'demonologies', - 'demonologist', - 'demonologists', - 'demonology', - 'demonstrabilities', - 'demonstrability', - 'demonstrable', - 'demonstrably', - 'demonstrate', - 'demonstrated', - 'demonstrates', - 'demonstrating', - 'demonstration', - 'demonstrational', - 'demonstrations', - 'demonstrative', - 'demonstratively', - 'demonstrativeness', - 'demonstrativenesses', - 'demonstratives', - 'demonstrator', - 'demonstrators', - 'demoralization', - 'demoralizations', - 'demoralize', - 'demoralized', - 'demoralizer', - 'demoralizers', - 'demoralizes', - 'demoralizing', - 'demoralizingly', - 'demountable', - 'demounting', - 'demulcents', - 'demultiplexer', - 'demultiplexers', - 'demureness', - 'demurenesses', - 'demurrages', - 'demyelinating', - 'demyelination', - 'demyelinations', - 'demystification', - 'demystifications', - 'demystified', - 'demystifies', - 'demystifying', - 'demythologization', - 'demythologizations', - 'demythologize', - 'demythologized', - 'demythologizer', - 'demythologizers', - 'demythologizes', - 'demythologizing', - 'denationalization', - 'denationalizations', - 'denationalize', - 'denationalized', - 'denationalizes', - 'denationalizing', - 'denaturalization', - 'denaturalizations', - 'denaturalize', - 'denaturalized', - 'denaturalizes', - 'denaturalizing', - 'denaturant', - 'denaturants', - 'denaturation', - 'denaturations', - 'denaturing', - 'denazification', - 'denazifications', - 'denazified', - 'denazifies', - 'denazifying', - 'dendriform', - 'dendrochronological', - 'dendrochronologically', - 'dendrochronologies', - 'dendrochronologist', - 'dendrochronologists', - 'dendrochronology', - 'dendrogram', - 'dendrograms', - 'dendrologic', - 'dendrological', - 'dendrologies', - 'dendrologist', - 'dendrologists', - 'dendrology', - 'denegation', - 'denegations', - 'denervated', - 'denervates', - 'denervating', - 'denervation', - 'denervations', - 'deniabilities', - 'deniability', - 'denigrated', - 'denigrates', - 'denigrating', - 'denigration', - 'denigrations', - 'denigrative', - 'denigrator', - 'denigrators', - 'denigratory', - 'denitrification', - 'denitrifications', - 'denitrified', - 'denitrifier', - 'denitrifiers', - 'denitrifies', - 'denitrifying', - 'denizening', - 'denominate', - 'denominated', - 'denominates', - 'denominating', - 'denomination', - 'denominational', - 'denominationalism', - 'denominationalisms', - 'denominations', - 'denominative', - 'denominatives', - 'denominator', - 'denominators', - 'denotation', - 'denotations', - 'denotative', - 'denotement', - 'denotements', - 'denouement', - 'denouements', - 'denouncement', - 'denouncements', - 'denouncers', - 'denouncing', - 'densenesses', - 'densification', - 'densifications', - 'densifying', - 'densitometer', - 'densitometers', - 'densitometric', - 'densitometries', - 'densitometry', - 'denticulate', - 'denticulated', - 'denticulation', - 'denticulations', - 'dentifrice', - 'dentifrices', - 'dentistries', - 'dentitions', - 'denturists', - 'denuclearization', - 'denuclearizations', - 'denuclearize', - 'denuclearized', - 'denuclearizes', - 'denuclearizing', - 'denudating', - 'denudation', - 'denudations', - 'denudement', - 'denudements', - 'denumerabilities', - 'denumerability', - 'denumerable', - 'denumerably', - 'denunciation', - 'denunciations', - 'denunciative', - 'denunciatory', - 'deodorants', - 'deodorization', - 'deodorizations', - 'deodorized', - 'deodorizer', - 'deodorizers', - 'deodorizes', - 'deodorizing', - 'deontological', - 'deontologies', - 'deontologist', - 'deontologists', - 'deontology', - 'deorbiting', - 'deoxidation', - 'deoxidations', - 'deoxidized', - 'deoxidizer', - 'deoxidizers', - 'deoxidizes', - 'deoxidizing', - 'deoxygenate', - 'deoxygenated', - 'deoxygenates', - 'deoxygenating', - 'deoxygenation', - 'deoxygenations', - 'deoxyribonuclease', - 'deoxyribonucleases', - 'deoxyribonucleotide', - 'deoxyribonucleotides', - 'deoxyribose', - 'deoxyriboses', - 'depainting', - 'department', - 'departmental', - 'departmentalization', - 'departmentalizations', - 'departmentalize', - 'departmentalized', - 'departmentalizes', - 'departmentalizing', - 'departmentally', - 'departments', - 'departures', - 'depauperate', - 'dependabilities', - 'dependability', - 'dependable', - 'dependableness', - 'dependablenesses', - 'dependably', - 'dependance', - 'dependances', - 'dependants', - 'dependence', - 'dependences', - 'dependencies', - 'dependency', - 'dependently', - 'dependents', - 'depersonalization', - 'depersonalizations', - 'depersonalize', - 'depersonalized', - 'depersonalizes', - 'depersonalizing', - 'dephosphorylate', - 'dephosphorylated', - 'dephosphorylates', - 'dephosphorylating', - 'dephosphorylation', - 'dephosphorylations', - 'depictions', - 'depigmentation', - 'depigmentations', - 'depilating', - 'depilation', - 'depilations', - 'depilatories', - 'depilatory', - 'depletable', - 'depletions', - 'deplorable', - 'deplorableness', - 'deplorablenesses', - 'deplorably', - 'deploringly', - 'deployable', - 'deployment', - 'deployments', - 'depolarization', - 'depolarizations', - 'depolarize', - 'depolarized', - 'depolarizer', - 'depolarizers', - 'depolarizes', - 'depolarizing', - 'depolished', - 'depolishes', - 'depolishing', - 'depoliticization', - 'depoliticizations', - 'depoliticize', - 'depoliticized', - 'depoliticizes', - 'depoliticizing', - 'depolymerization', - 'depolymerizations', - 'depolymerize', - 'depolymerized', - 'depolymerizes', - 'depolymerizing', - 'depopulate', - 'depopulated', - 'depopulates', - 'depopulating', - 'depopulation', - 'depopulations', - 'deportable', - 'deportation', - 'deportations', - 'deportment', - 'deportments', - 'depositaries', - 'depositary', - 'depositing', - 'deposition', - 'depositional', - 'depositions', - 'depositories', - 'depositors', - 'depository', - 'depravation', - 'depravations', - 'depravedly', - 'depravedness', - 'depravednesses', - 'depravement', - 'depravements', - 'depravities', - 'deprecated', - 'deprecates', - 'deprecating', - 'deprecatingly', - 'deprecation', - 'deprecations', - 'deprecatorily', - 'deprecatory', - 'depreciable', - 'depreciate', - 'depreciated', - 'depreciates', - 'depreciating', - 'depreciatingly', - 'depreciation', - 'depreciations', - 'depreciative', - 'depreciator', - 'depreciators', - 'depreciatory', - 'depredated', - 'depredates', - 'depredating', - 'depredation', - 'depredations', - 'depredator', - 'depredators', - 'depredatory', - 'depressant', - 'depressants', - 'depressible', - 'depressing', - 'depressingly', - 'depression', - 'depressions', - 'depressive', - 'depressively', - 'depressives', - 'depressors', - 'depressurization', - 'depressurizations', - 'depressurize', - 'depressurized', - 'depressurizes', - 'depressurizing', - 'deprivation', - 'deprivations', - 'deprogramed', - 'deprograming', - 'deprogrammed', - 'deprogrammer', - 'deprogrammers', - 'deprogramming', - 'deprograms', - 'depurating', - 'deputation', - 'deputations', - 'deputization', - 'deputizations', - 'deputizing', - 'deracinate', - 'deracinated', - 'deracinates', - 'deracinating', - 'deracination', - 'deracinations', - 'deraigning', - 'derailleur', - 'derailleurs', - 'derailment', - 'derailments', - 'derangement', - 'derangements', - 'derealization', - 'derealizations', - 'deregulate', - 'deregulated', - 'deregulates', - 'deregulating', - 'deregulation', - 'deregulations', - 'dereliction', - 'derelictions', - 'derepressed', - 'derepresses', - 'derepressing', - 'derepression', - 'derepressions', - 'deridingly', - 'derisively', - 'derisiveness', - 'derisivenesses', - 'derivation', - 'derivational', - 'derivations', - 'derivative', - 'derivatively', - 'derivativeness', - 'derivativenesses', - 'derivatives', - 'derivatization', - 'derivatizations', - 'derivatize', - 'derivatized', - 'derivatizes', - 'derivatizing', - 'dermabrasion', - 'dermabrasions', - 'dermatites', - 'dermatitides', - 'dermatitis', - 'dermatitises', - 'dermatogen', - 'dermatogens', - 'dermatoglyphic', - 'dermatoglyphics', - 'dermatologic', - 'dermatological', - 'dermatologies', - 'dermatologist', - 'dermatologists', - 'dermatology', - 'dermatomal', - 'dermatomes', - 'dermatophyte', - 'dermatophytes', - 'dermatoses', - 'dermatosis', - 'dermestids', - 'derogating', - 'derogation', - 'derogations', - 'derogative', - 'derogatively', - 'derogatorily', - 'derogatory', - 'derringers', - 'desacralization', - 'desacralizations', - 'desacralize', - 'desacralized', - 'desacralizes', - 'desacralizing', - 'desalinate', - 'desalinated', - 'desalinates', - 'desalinating', - 'desalination', - 'desalinations', - 'desalinator', - 'desalinators', - 'desalinization', - 'desalinizations', - 'desalinize', - 'desalinized', - 'desalinizes', - 'desalinizing', - 'descanting', - 'descendant', - 'descendants', - 'descendent', - 'descendents', - 'descenders', - 'descendible', - 'descending', - 'descension', - 'descensions', - 'describable', - 'describers', - 'describing', - 'description', - 'descriptions', - 'descriptive', - 'descriptively', - 'descriptiveness', - 'descriptivenesses', - 'descriptor', - 'descriptors', - 'desecrated', - 'desecrater', - 'desecraters', - 'desecrates', - 'desecrating', - 'desecration', - 'desecrations', - 'desecrator', - 'desecrators', - 'desegregate', - 'desegregated', - 'desegregates', - 'desegregating', - 'desegregation', - 'desegregations', - 'deselected', - 'deselecting', - 'desensitization', - 'desensitizations', - 'desensitize', - 'desensitized', - 'desensitizer', - 'desensitizers', - 'desensitizes', - 'desensitizing', - 'desertification', - 'desertifications', - 'desertions', - 'deservedly', - 'deservedness', - 'deservednesses', - 'deservings', - 'desexualization', - 'desexualizations', - 'desexualize', - 'desexualized', - 'desexualizes', - 'desexualizing', - 'deshabille', - 'deshabilles', - 'desiccants', - 'desiccated', - 'desiccates', - 'desiccating', - 'desiccation', - 'desiccations', - 'desiccative', - 'desiccator', - 'desiccators', - 'desiderata', - 'desiderate', - 'desiderated', - 'desiderates', - 'desiderating', - 'desideration', - 'desiderations', - 'desiderative', - 'desideratum', - 'designated', - 'designates', - 'designating', - 'designation', - 'designations', - 'designative', - 'designator', - 'designators', - 'designatory', - 'designedly', - 'designment', - 'designments', - 'desilvered', - 'desilvering', - 'desipramine', - 'desipramines', - 'desirabilities', - 'desirability', - 'desirableness', - 'desirablenesses', - 'desirables', - 'desirously', - 'desirousness', - 'desirousnesses', - 'desistance', - 'desistances', - 'desmosomal', - 'desmosomes', - 'desolately', - 'desolateness', - 'desolatenesses', - 'desolaters', - 'desolating', - 'desolatingly', - 'desolation', - 'desolations', - 'desolators', - 'desorption', - 'desorptions', - 'despairers', - 'despairing', - 'despairingly', - 'despatched', - 'despatches', - 'despatching', - 'desperadoes', - 'desperados', - 'desperately', - 'desperateness', - 'desperatenesses', - 'desperation', - 'desperations', - 'despicable', - 'despicableness', - 'despicablenesses', - 'despicably', - 'despiritualize', - 'despiritualized', - 'despiritualizes', - 'despiritualizing', - 'despisement', - 'despisements', - 'despiteful', - 'despitefully', - 'despitefulness', - 'despitefulnesses', - 'despiteous', - 'despiteously', - 'despoilers', - 'despoiling', - 'despoilment', - 'despoilments', - 'despoliation', - 'despoliations', - 'despondence', - 'despondences', - 'despondencies', - 'despondency', - 'despondent', - 'despondently', - 'desponding', - 'despotically', - 'despotisms', - 'desquamate', - 'desquamated', - 'desquamates', - 'desquamating', - 'desquamation', - 'desquamations', - 'dessertspoon', - 'dessertspoonful', - 'dessertspoonfuls', - 'dessertspoons', - 'dessertspoonsful', - 'destabilization', - 'destabilizations', - 'destabilize', - 'destabilized', - 'destabilizes', - 'destabilizing', - 'destaining', - 'destination', - 'destinations', - 'destituteness', - 'destitutenesses', - 'destitution', - 'destitutions', - 'destroyers', - 'destroying', - 'destructed', - 'destructibilities', - 'destructibility', - 'destructible', - 'destructing', - 'destruction', - 'destructionist', - 'destructionists', - 'destructions', - 'destructive', - 'destructively', - 'destructiveness', - 'destructivenesses', - 'destructivities', - 'destructivity', - 'desuetudes', - 'desugaring', - 'desulfured', - 'desulfuring', - 'desulfurization', - 'desulfurizations', - 'desulfurize', - 'desulfurized', - 'desulfurizes', - 'desulfurizing', - 'desultorily', - 'desultoriness', - 'desultorinesses', - 'detachabilities', - 'detachability', - 'detachable', - 'detachably', - 'detachedly', - 'detachedness', - 'detachednesses', - 'detachment', - 'detachments', - 'detailedly', - 'detailedness', - 'detailednesses', - 'detainment', - 'detainments', - 'detasseled', - 'detasseling', - 'detasselled', - 'detasselling', - 'detectabilities', - 'detectability', - 'detectable', - 'detections', - 'detectivelike', - 'detectives', - 'detentions', - 'detergencies', - 'detergency', - 'detergents', - 'deteriorate', - 'deteriorated', - 'deteriorates', - 'deteriorating', - 'deterioration', - 'deteriorations', - 'deteriorative', - 'determents', - 'determinable', - 'determinableness', - 'determinablenesses', - 'determinably', - 'determinacies', - 'determinacy', - 'determinant', - 'determinantal', - 'determinants', - 'determinate', - 'determinately', - 'determinateness', - 'determinatenesses', - 'determination', - 'determinations', - 'determinative', - 'determinatives', - 'determinator', - 'determinators', - 'determined', - 'determinedly', - 'determinedness', - 'determinednesses', - 'determiner', - 'determiners', - 'determines', - 'determining', - 'determinism', - 'determinisms', - 'determinist', - 'deterministic', - 'deterministically', - 'determinists', - 'deterrabilities', - 'deterrability', - 'deterrable', - 'deterrence', - 'deterrences', - 'deterrently', - 'deterrents', - 'detersives', - 'detestable', - 'detestableness', - 'detestablenesses', - 'detestably', - 'detestation', - 'detestations', - 'dethronement', - 'dethronements', - 'dethroners', - 'dethroning', - 'detonabilities', - 'detonability', - 'detonatable', - 'detonating', - 'detonation', - 'detonations', - 'detonative', - 'detonators', - 'detoxicant', - 'detoxicants', - 'detoxicate', - 'detoxicated', - 'detoxicates', - 'detoxicating', - 'detoxication', - 'detoxications', - 'detoxification', - 'detoxifications', - 'detoxified', - 'detoxifies', - 'detoxifying', - 'detracting', - 'detraction', - 'detractions', - 'detractive', - 'detractively', - 'detractors', - 'detraining', - 'detrainment', - 'detrainments', - 'detribalization', - 'detribalizations', - 'detribalize', - 'detribalized', - 'detribalizes', - 'detribalizing', - 'detrimental', - 'detrimentally', - 'detrimentals', - 'detriments', - 'detritions', - 'detumescence', - 'detumescences', - 'detumescent', - 'deuteragonist', - 'deuteragonists', - 'deuteranomalies', - 'deuteranomalous', - 'deuteranomaly', - 'deuteranope', - 'deuteranopes', - 'deuteranopia', - 'deuteranopias', - 'deuteranopic', - 'deuterated', - 'deuterates', - 'deuterating', - 'deuteration', - 'deuterations', - 'deuteriums', - 'deuterocanonical', - 'deuterostome', - 'deuterostomes', - 'deutoplasm', - 'deutoplasms', - 'devaluated', - 'devaluates', - 'devaluating', - 'devaluation', - 'devaluations', - 'devastated', - 'devastates', - 'devastating', - 'devastatingly', - 'devastation', - 'devastations', - 'devastative', - 'devastator', - 'devastators', - 'developable', - 'developers', - 'developing', - 'development', - 'developmental', - 'developmentally', - 'developments', - 'deverbative', - 'deverbatives', - 'deviancies', - 'deviationism', - 'deviationisms', - 'deviationist', - 'deviationists', - 'deviations', - 'devilfishes', - 'devilishly', - 'devilishness', - 'devilishnesses', - 'devilments', - 'deviltries', - 'devilwoods', - 'deviousness', - 'deviousnesses', - 'devitalize', - 'devitalized', - 'devitalizes', - 'devitalizing', - 'devitrification', - 'devitrifications', - 'devitrified', - 'devitrifies', - 'devitrifying', - 'devocalize', - 'devocalized', - 'devocalizes', - 'devocalizing', - 'devolution', - 'devolutionary', - 'devolutionist', - 'devolutionists', - 'devolutions', - 'devotedness', - 'devotednesses', - 'devotement', - 'devotements', - 'devotional', - 'devotionally', - 'devotionals', - 'devoutness', - 'devoutnesses', - 'dewaterers', - 'dewatering', - 'dewberries', - 'dewinesses', - 'dexamethasone', - 'dexamethasones', - 'dexterities', - 'dexterously', - 'dexterousness', - 'dexterousnesses', - 'dextranase', - 'dextranases', - 'dextroamphetamine', - 'dextroamphetamines', - 'dextrorotary', - 'dextrorotatory', - 'dezincking', - 'diabetogenic', - 'diabetologist', - 'diabetologists', - 'diableries', - 'diabolical', - 'diabolically', - 'diabolicalness', - 'diabolicalnesses', - 'diabolisms', - 'diabolists', - 'diabolized', - 'diabolizes', - 'diabolizing', - 'diachronic', - 'diachronically', - 'diachronies', - 'diaconates', - 'diacritical', - 'diacritics', - 'diadelphous', - 'diadromous', - 'diageneses', - 'diagenesis', - 'diagenetic', - 'diagenetically', - 'diageotropic', - 'diagnosable', - 'diagnoseable', - 'diagnosing', - 'diagnostic', - 'diagnostical', - 'diagnostically', - 'diagnostician', - 'diagnosticians', - 'diagnostics', - 'diagonalizable', - 'diagonalization', - 'diagonalizations', - 'diagonalize', - 'diagonalized', - 'diagonalizes', - 'diagonalizing', - 'diagonally', - 'diagraming', - 'diagrammable', - 'diagrammatic', - 'diagrammatical', - 'diagrammatically', - 'diagrammed', - 'diagramming', - 'diakineses', - 'diakinesis', - 'dialectally', - 'dialectical', - 'dialectically', - 'dialectician', - 'dialecticians', - 'dialectics', - 'dialectological', - 'dialectologically', - 'dialectologies', - 'dialectologist', - 'dialectologists', - 'dialectology', - 'dialogical', - 'dialogically', - 'dialogistic', - 'dialogists', - 'dialoguing', - 'dialysates', - 'dialyzable', - 'dialyzates', - 'diamagnetic', - 'diamagnetism', - 'diamagnetisms', - 'diametrical', - 'diametrically', - 'diamondback', - 'diamondbacks', - 'diamondiferous', - 'diamonding', - 'dianthuses', - 'diapausing', - 'diapedeses', - 'diapedesis', - 'diaphaneities', - 'diaphaneity', - 'diaphanous', - 'diaphanously', - 'diaphanousness', - 'diaphanousnesses', - 'diaphonies', - 'diaphorase', - 'diaphorases', - 'diaphoreses', - 'diaphoresis', - 'diaphoretic', - 'diaphoretics', - 'diaphragmatic', - 'diaphragmatically', - 'diaphragms', - 'diaphyseal', - 'diaphysial', - 'diapositive', - 'diapositives', - 'diarrhetic', - 'diarrhoeas', - 'diarthroses', - 'diarthrosis', - 'diastemata', - 'diastereoisomer', - 'diastereoisomeric', - 'diastereoisomerism', - 'diastereoisomerisms', - 'diastereoisomers', - 'diastereomer', - 'diastereomeric', - 'diastereomers', - 'diastrophic', - 'diastrophically', - 'diastrophism', - 'diastrophisms', - 'diatessaron', - 'diatessarons', - 'diathermanous', - 'diathermic', - 'diathermies', - 'diatomaceous', - 'diatomites', - 'diatonically', - 'diazoniums', - 'diazotization', - 'diazotizations', - 'diazotized', - 'diazotizes', - 'diazotizing', - 'dibenzofuran', - 'dibenzofurans', - 'dicarboxylic', - 'dicentrics', - 'dichlorobenzene', - 'dichlorobenzenes', - 'dichlorodifluoromethane', - 'dichlorodifluoromethanes', - 'dichloroethane', - 'dichloroethanes', - 'dichlorvos', - 'dichlorvoses', - 'dichogamies', - 'dichogamous', - 'dichondras', - 'dichotically', - 'dichotomies', - 'dichotomist', - 'dichotomists', - 'dichotomization', - 'dichotomizations', - 'dichotomize', - 'dichotomized', - 'dichotomizes', - 'dichotomizing', - 'dichotomous', - 'dichotomously', - 'dichotomousness', - 'dichotomousnesses', - 'dichroisms', - 'dichromate', - 'dichromates', - 'dichromatic', - 'dichromatism', - 'dichromatisms', - 'dichromats', - 'dichroscope', - 'dichroscopes', - 'dickcissel', - 'dickcissels', - 'dicotyledon', - 'dicotyledonous', - 'dicotyledons', - 'dicoumarin', - 'dicoumarins', - 'dicoumarol', - 'dicoumarols', - 'dicrotisms', - 'dictations', - 'dictatorial', - 'dictatorially', - 'dictatorialness', - 'dictatorialnesses', - 'dictatorship', - 'dictatorships', - 'dictionally', - 'dictionaries', - 'dictionary', - 'dictyosome', - 'dictyosomes', - 'dictyostele', - 'dictyosteles', - 'dicumarols', - 'dicynodont', - 'dicynodonts', - 'didactical', - 'didactically', - 'didacticism', - 'didacticisms', - 'diddlysquat', - 'didgeridoo', - 'didgeridoos', - 'didjeridoo', - 'didjeridoos', - 'didynamies', - 'dieffenbachia', - 'dieffenbachias', - 'dielectric', - 'dielectrics', - 'diencephala', - 'diencephalic', - 'diencephalon', - 'diencephalons', - 'dieselings', - 'dieselization', - 'dieselizations', - 'dieselized', - 'dieselizes', - 'dieselizing', - 'diestruses', - 'dietetically', - 'diethylcarbamazine', - 'diethylcarbamazines', - 'diethylstilbestrol', - 'diethylstilbestrols', - 'dieticians', - 'dietitians', - 'difference', - 'differenced', - 'differences', - 'differencing', - 'differentia', - 'differentiabilities', - 'differentiability', - 'differentiable', - 'differentiae', - 'differential', - 'differentially', - 'differentials', - 'differentiate', - 'differentiated', - 'differentiates', - 'differentiating', - 'differentiation', - 'differentiations', - 'differently', - 'differentness', - 'differentnesses', - 'difficulties', - 'difficultly', - 'difficulty', - 'diffidence', - 'diffidences', - 'diffidently', - 'diffracted', - 'diffracting', - 'diffraction', - 'diffractions', - 'diffractometer', - 'diffractometers', - 'diffractometric', - 'diffractometries', - 'diffractometry', - 'diffuseness', - 'diffusenesses', - 'diffusible', - 'diffusional', - 'diffusionism', - 'diffusionisms', - 'diffusionist', - 'diffusionists', - 'diffusions', - 'diffusively', - 'diffusiveness', - 'diffusivenesses', - 'diffusivities', - 'diffusivity', - 'difunctional', - 'digestibilities', - 'digestibility', - 'digestible', - 'digestions', - 'digestively', - 'digestives', - 'digitalins', - 'digitalises', - 'digitalization', - 'digitalizations', - 'digitalize', - 'digitalized', - 'digitalizes', - 'digitalizing', - 'digitately', - 'digitigrade', - 'digitization', - 'digitizations', - 'digitizers', - 'digitizing', - 'digitonins', - 'digitoxigenin', - 'digitoxigenins', - 'digitoxins', - 'diglyceride', - 'diglycerides', - 'dignifying', - 'dignitaries', - 'digraphically', - 'digressing', - 'digression', - 'digressional', - 'digressionary', - 'digressions', - 'digressive', - 'digressively', - 'digressiveness', - 'digressivenesses', - 'dihydroergotamine', - 'dihydroergotamines', - 'dihydroxyacetone', - 'dihydroxyacetones', - 'dilapidate', - 'dilapidated', - 'dilapidates', - 'dilapidating', - 'dilapidation', - 'dilapidations', - 'dilatabilities', - 'dilatability', - 'dilatancies', - 'dilatation', - 'dilatational', - 'dilatations', - 'dilatometer', - 'dilatometers', - 'dilatometric', - 'dilatometries', - 'dilatometry', - 'dilatorily', - 'dilatoriness', - 'dilatorinesses', - 'dilemmatic', - 'dilettante', - 'dilettantes', - 'dilettanti', - 'dilettantish', - 'dilettantism', - 'dilettantisms', - 'diligences', - 'diligently', - 'dillydallied', - 'dillydallies', - 'dillydally', - 'dillydallying', - 'diluteness', - 'dilutenesses', - 'dimenhydrinate', - 'dimenhydrinates', - 'dimensional', - 'dimensionalities', - 'dimensionality', - 'dimensionally', - 'dimensioned', - 'dimensioning', - 'dimensionless', - 'dimensions', - 'dimercaprol', - 'dimercaprols', - 'dimerization', - 'dimerizations', - 'dimerizing', - 'dimethoate', - 'dimethoates', - 'dimethylhydrazine', - 'dimethylhydrazines', - 'dimethylnitrosamine', - 'dimethylnitrosamines', - 'dimethyltryptamine', - 'dimethyltryptamines', - 'diminishable', - 'diminished', - 'diminishes', - 'diminishing', - 'diminishment', - 'diminishments', - 'diminuendo', - 'diminuendos', - 'diminution', - 'diminutions', - 'diminutive', - 'diminutively', - 'diminutiveness', - 'diminutivenesses', - 'diminutives', - 'dimorphism', - 'dimorphisms', - 'dimorphous', - 'dingdonged', - 'dingdonging', - 'dinginesses', - 'dingleberries', - 'dingleberry', - 'dinitrobenzene', - 'dinitrobenzenes', - 'dinitrophenol', - 'dinitrophenols', - 'dinnerless', - 'dinnertime', - 'dinnertimes', - 'dinnerware', - 'dinnerwares', - 'dinoflagellate', - 'dinoflagellates', - 'dinosaurian', - 'dinucleotide', - 'dinucleotides', - 'dipeptidase', - 'dipeptidases', - 'dipeptides', - 'diphenhydramine', - 'diphenhydramines', - 'diphenylamine', - 'diphenylamines', - 'diphenylhydantoin', - 'diphenylhydantoins', - 'diphosgene', - 'diphosgenes', - 'diphosphate', - 'diphosphates', - 'diphtheria', - 'diphtherial', - 'diphtherias', - 'diphtheritic', - 'diphtheroid', - 'diphtheroids', - 'diphthongal', - 'diphthongization', - 'diphthongizations', - 'diphthongize', - 'diphthongized', - 'diphthongizes', - 'diphthongizing', - 'diphthongs', - 'diphyletic', - 'diphyodont', - 'diploblastic', - 'diplococci', - 'diplococcus', - 'diplodocus', - 'diplodocuses', - 'diploidies', - 'diplomacies', - 'diplomaing', - 'diplomates', - 'diplomatic', - 'diplomatically', - 'diplomatist', - 'diplomatists', - 'diplophase', - 'diplophases', - 'diplotenes', - 'dipnetting', - 'dipperfuls', - 'dipsomania', - 'dipsomaniac', - 'dipsomaniacal', - 'dipsomaniacs', - 'dipsomanias', - 'dipterocarp', - 'dipterocarps', - 'directedness', - 'directednesses', - 'directional', - 'directionalities', - 'directionality', - 'directionless', - 'directionlessness', - 'directionlessnesses', - 'directions', - 'directives', - 'directivities', - 'directivity', - 'directness', - 'directnesses', - 'directorate', - 'directorates', - 'directorial', - 'directories', - 'directorship', - 'directorships', - 'directress', - 'directresses', - 'directrice', - 'directrices', - 'directrixes', - 'direnesses', - 'dirigibles', - 'dirigismes', - 'dirtinesses', - 'disabilities', - 'disability', - 'disablement', - 'disablements', - 'disabusing', - 'disaccharidase', - 'disaccharidases', - 'disaccharide', - 'disaccharides', - 'disaccorded', - 'disaccording', - 'disaccords', - 'disaccustom', - 'disaccustomed', - 'disaccustoming', - 'disaccustoms', - 'disadvantage', - 'disadvantaged', - 'disadvantagedness', - 'disadvantagednesses', - 'disadvantageous', - 'disadvantageously', - 'disadvantageousness', - 'disadvantageousnesses', - 'disadvantages', - 'disadvantaging', - 'disaffected', - 'disaffecting', - 'disaffection', - 'disaffections', - 'disaffects', - 'disaffiliate', - 'disaffiliated', - 'disaffiliates', - 'disaffiliating', - 'disaffiliation', - 'disaffiliations', - 'disaffirmance', - 'disaffirmances', - 'disaffirmed', - 'disaffirming', - 'disaffirms', - 'disaggregate', - 'disaggregated', - 'disaggregates', - 'disaggregating', - 'disaggregation', - 'disaggregations', - 'disaggregative', - 'disagreeable', - 'disagreeableness', - 'disagreeablenesses', - 'disagreeably', - 'disagreeing', - 'disagreement', - 'disagreements', - 'disallowance', - 'disallowances', - 'disallowed', - 'disallowing', - 'disambiguate', - 'disambiguated', - 'disambiguates', - 'disambiguating', - 'disambiguation', - 'disambiguations', - 'disannulled', - 'disannulling', - 'disappearance', - 'disappearances', - 'disappeared', - 'disappearing', - 'disappears', - 'disappoint', - 'disappointed', - 'disappointedly', - 'disappointing', - 'disappointingly', - 'disappointment', - 'disappointments', - 'disappoints', - 'disapprobation', - 'disapprobations', - 'disapproval', - 'disapprovals', - 'disapprove', - 'disapproved', - 'disapprover', - 'disapprovers', - 'disapproves', - 'disapproving', - 'disapprovingly', - 'disarmament', - 'disarmaments', - 'disarmingly', - 'disarrange', - 'disarranged', - 'disarrangement', - 'disarrangements', - 'disarranges', - 'disarranging', - 'disarrayed', - 'disarraying', - 'disarticulate', - 'disarticulated', - 'disarticulates', - 'disarticulating', - 'disarticulation', - 'disarticulations', - 'disassemble', - 'disassembled', - 'disassembles', - 'disassemblies', - 'disassembling', - 'disassembly', - 'disassociate', - 'disassociated', - 'disassociates', - 'disassociating', - 'disassociation', - 'disassociations', - 'disastrous', - 'disastrously', - 'disavowable', - 'disavowals', - 'disavowing', - 'disbanding', - 'disbandment', - 'disbandments', - 'disbarment', - 'disbarments', - 'disbarring', - 'disbeliefs', - 'disbelieve', - 'disbelieved', - 'disbeliever', - 'disbelievers', - 'disbelieves', - 'disbelieving', - 'disbenefit', - 'disbenefits', - 'disbosomed', - 'disbosoming', - 'disboweled', - 'disboweling', - 'disbowelled', - 'disbowelling', - 'disbudding', - 'disburdened', - 'disburdening', - 'disburdenment', - 'disburdenments', - 'disburdens', - 'disbursement', - 'disbursements', - 'disbursers', - 'disbursing', - 'discanting', - 'discardable', - 'discarders', - 'discarding', - 'discarnate', - 'discepting', - 'discernable', - 'discerners', - 'discernible', - 'discernibly', - 'discerning', - 'discerningly', - 'discernment', - 'discernments', - 'dischargeable', - 'discharged', - 'dischargee', - 'dischargees', - 'discharger', - 'dischargers', - 'discharges', - 'discharging', - 'discipleship', - 'discipleships', - 'disciplinable', - 'disciplinal', - 'disciplinarian', - 'disciplinarians', - 'disciplinarily', - 'disciplinarities', - 'disciplinarity', - 'disciplinary', - 'discipline', - 'disciplined', - 'discipliner', - 'discipliners', - 'disciplines', - 'discipling', - 'disciplining', - 'disclaimed', - 'disclaimer', - 'disclaimers', - 'disclaiming', - 'disclamation', - 'disclamations', - 'disclimaxes', - 'disclosers', - 'disclosing', - 'disclosure', - 'disclosures', - 'discographer', - 'discographers', - 'discographic', - 'discographical', - 'discographies', - 'discography', - 'discoloration', - 'discolorations', - 'discolored', - 'discoloring', - 'discombobulate', - 'discombobulated', - 'discombobulates', - 'discombobulating', - 'discombobulation', - 'discombobulations', - 'discomfited', - 'discomfiting', - 'discomfits', - 'discomfiture', - 'discomfitures', - 'discomfort', - 'discomfortable', - 'discomforted', - 'discomforting', - 'discomforts', - 'discommend', - 'discommended', - 'discommending', - 'discommends', - 'discommode', - 'discommoded', - 'discommodes', - 'discommoding', - 'discompose', - 'discomposed', - 'discomposes', - 'discomposing', - 'discomposure', - 'discomposures', - 'disconcert', - 'disconcerted', - 'disconcerting', - 'disconcertingly', - 'disconcertment', - 'disconcertments', - 'disconcerts', - 'disconfirm', - 'disconfirmed', - 'disconfirming', - 'disconfirms', - 'disconformities', - 'disconformity', - 'disconnect', - 'disconnected', - 'disconnectedly', - 'disconnectedness', - 'disconnectednesses', - 'disconnecting', - 'disconnection', - 'disconnections', - 'disconnects', - 'disconsolate', - 'disconsolately', - 'disconsolateness', - 'disconsolatenesses', - 'disconsolation', - 'disconsolations', - 'discontent', - 'discontented', - 'discontentedly', - 'discontentedness', - 'discontentednesses', - 'discontenting', - 'discontentment', - 'discontentments', - 'discontents', - 'discontinuance', - 'discontinuances', - 'discontinuation', - 'discontinuations', - 'discontinue', - 'discontinued', - 'discontinues', - 'discontinuing', - 'discontinuities', - 'discontinuity', - 'discontinuous', - 'discontinuously', - 'discophile', - 'discophiles', - 'discordance', - 'discordances', - 'discordancies', - 'discordancy', - 'discordant', - 'discordantly', - 'discording', - 'discotheque', - 'discotheques', - 'discountable', - 'discounted', - 'discountenance', - 'discountenanced', - 'discountenances', - 'discountenancing', - 'discounter', - 'discounters', - 'discounting', - 'discourage', - 'discourageable', - 'discouraged', - 'discouragement', - 'discouragements', - 'discourager', - 'discouragers', - 'discourages', - 'discouraging', - 'discouragingly', - 'discoursed', - 'discourser', - 'discoursers', - 'discourses', - 'discoursing', - 'discourteous', - 'discourteously', - 'discourteousness', - 'discourteousnesses', - 'discourtesies', - 'discourtesy', - 'discoverable', - 'discovered', - 'discoverer', - 'discoverers', - 'discoveries', - 'discovering', - 'discreditable', - 'discreditably', - 'discredited', - 'discrediting', - 'discredits', - 'discreeter', - 'discreetest', - 'discreetly', - 'discreetness', - 'discreetnesses', - 'discrepancies', - 'discrepancy', - 'discrepant', - 'discrepantly', - 'discretely', - 'discreteness', - 'discretenesses', - 'discretion', - 'discretionary', - 'discretions', - 'discriminabilities', - 'discriminability', - 'discriminable', - 'discriminably', - 'discriminant', - 'discriminants', - 'discriminate', - 'discriminated', - 'discriminates', - 'discriminating', - 'discriminatingly', - 'discrimination', - 'discriminational', - 'discriminations', - 'discriminative', - 'discriminator', - 'discriminatorily', - 'discriminators', - 'discriminatory', - 'discrowned', - 'discrowning', - 'discursive', - 'discursively', - 'discursiveness', - 'discursivenesses', - 'discussable', - 'discussant', - 'discussants', - 'discussers', - 'discussible', - 'discussing', - 'discussion', - 'discussions', - 'disdainful', - 'disdainfully', - 'disdainfulness', - 'disdainfulnesses', - 'disdaining', - 'diseconomies', - 'diseconomy', - 'disembarkation', - 'disembarkations', - 'disembarked', - 'disembarking', - 'disembarks', - 'disembarrass', - 'disembarrassed', - 'disembarrasses', - 'disembarrassing', - 'disembodied', - 'disembodies', - 'disembodying', - 'disembogue', - 'disembogued', - 'disembogues', - 'disemboguing', - 'disembowel', - 'disemboweled', - 'disemboweling', - 'disembowelled', - 'disembowelling', - 'disembowelment', - 'disembowelments', - 'disembowels', - 'disenchant', - 'disenchanted', - 'disenchanter', - 'disenchanters', - 'disenchanting', - 'disenchantingly', - 'disenchantment', - 'disenchantments', - 'disenchants', - 'disencumber', - 'disencumbered', - 'disencumbering', - 'disencumbers', - 'disendowed', - 'disendower', - 'disendowers', - 'disendowing', - 'disendowment', - 'disendowments', - 'disenfranchise', - 'disenfranchised', - 'disenfranchisement', - 'disenfranchisements', - 'disenfranchises', - 'disenfranchising', - 'disengaged', - 'disengagement', - 'disengagements', - 'disengages', - 'disengaging', - 'disentailed', - 'disentailing', - 'disentails', - 'disentangle', - 'disentangled', - 'disentanglement', - 'disentanglements', - 'disentangles', - 'disentangling', - 'disenthral', - 'disenthrall', - 'disenthralled', - 'disenthralling', - 'disenthralls', - 'disenthrals', - 'disentitle', - 'disentitled', - 'disentitles', - 'disentitling', - 'disequilibrate', - 'disequilibrated', - 'disequilibrates', - 'disequilibrating', - 'disequilibration', - 'disequilibrations', - 'disequilibria', - 'disequilibrium', - 'disequilibriums', - 'disestablish', - 'disestablished', - 'disestablishes', - 'disestablishing', - 'disestablishment', - 'disestablishmentarian', - 'disestablishmentarians', - 'disestablishments', - 'disesteemed', - 'disesteeming', - 'disesteems', - 'disfavored', - 'disfavoring', - 'disfigured', - 'disfigurement', - 'disfigurements', - 'disfigures', - 'disfiguring', - 'disfranchise', - 'disfranchised', - 'disfranchisement', - 'disfranchisements', - 'disfranchises', - 'disfranchising', - 'disfrocked', - 'disfrocking', - 'disfunction', - 'disfunctional', - 'disfunctions', - 'disfurnish', - 'disfurnished', - 'disfurnishes', - 'disfurnishing', - 'disfurnishment', - 'disfurnishments', - 'disgorging', - 'disgraceful', - 'disgracefully', - 'disgracefulness', - 'disgracefulnesses', - 'disgracers', - 'disgracing', - 'disgruntle', - 'disgruntled', - 'disgruntlement', - 'disgruntlements', - 'disgruntles', - 'disgruntling', - 'disguisedly', - 'disguisement', - 'disguisements', - 'disguisers', - 'disguising', - 'disgustedly', - 'disgustful', - 'disgustfully', - 'disgusting', - 'disgustingly', - 'dishabille', - 'dishabilles', - 'disharmonies', - 'disharmonious', - 'disharmonize', - 'disharmonized', - 'disharmonizes', - 'disharmonizing', - 'disharmony', - 'dishcloths', - 'dishclouts', - 'dishearten', - 'disheartened', - 'disheartening', - 'dishearteningly', - 'disheartenment', - 'disheartenments', - 'disheartens', - 'dishelming', - 'disherited', - 'disheriting', - 'disheveled', - 'disheveling', - 'dishevelled', - 'dishevelling', - 'dishonesties', - 'dishonestly', - 'dishonesty', - 'dishonorable', - 'dishonorableness', - 'dishonorablenesses', - 'dishonorably', - 'dishonored', - 'dishonorer', - 'dishonorers', - 'dishonoring', - 'dishtowels', - 'dishwasher', - 'dishwashers', - 'dishwaters', - 'disillusion', - 'disillusioned', - 'disillusioning', - 'disillusionment', - 'disillusionments', - 'disillusions', - 'disincentive', - 'disincentives', - 'disinclination', - 'disinclinations', - 'disincline', - 'disinclined', - 'disinclines', - 'disinclining', - 'disinfectant', - 'disinfectants', - 'disinfected', - 'disinfecting', - 'disinfection', - 'disinfections', - 'disinfects', - 'disinfestant', - 'disinfestants', - 'disinfestation', - 'disinfestations', - 'disinfested', - 'disinfesting', - 'disinfests', - 'disinflation', - 'disinflationary', - 'disinflations', - 'disinformation', - 'disinformations', - 'disingenuous', - 'disingenuously', - 'disingenuousness', - 'disingenuousnesses', - 'disinherit', - 'disinheritance', - 'disinheritances', - 'disinherited', - 'disinheriting', - 'disinherits', - 'disinhibit', - 'disinhibited', - 'disinhibiting', - 'disinhibition', - 'disinhibitions', - 'disinhibits', - 'disintegrate', - 'disintegrated', - 'disintegrates', - 'disintegrating', - 'disintegration', - 'disintegrations', - 'disintegrative', - 'disintegrator', - 'disintegrators', - 'disinterest', - 'disinterested', - 'disinterestedly', - 'disinterestedness', - 'disinterestednesses', - 'disinteresting', - 'disinterests', - 'disintermediation', - 'disintermediations', - 'disinterment', - 'disinterments', - 'disinterred', - 'disinterring', - 'disintoxicate', - 'disintoxicated', - 'disintoxicates', - 'disintoxicating', - 'disintoxication', - 'disintoxications', - 'disinvested', - 'disinvesting', - 'disinvestment', - 'disinvestments', - 'disinvests', - 'disinvited', - 'disinvites', - 'disinviting', - 'disjecting', - 'disjoining', - 'disjointed', - 'disjointedly', - 'disjointedness', - 'disjointednesses', - 'disjointing', - 'disjunction', - 'disjunctions', - 'disjunctive', - 'disjunctively', - 'disjunctives', - 'disjuncture', - 'disjunctures', - 'dislikable', - 'dislikeable', - 'dislimning', - 'dislocated', - 'dislocates', - 'dislocating', - 'dislocation', - 'dislocations', - 'dislodgement', - 'dislodgements', - 'dislodging', - 'dislodgment', - 'dislodgments', - 'disloyally', - 'disloyalties', - 'disloyalty', - 'dismalness', - 'dismalnesses', - 'dismantled', - 'dismantlement', - 'dismantlements', - 'dismantles', - 'dismantling', - 'dismasting', - 'dismayingly', - 'dismembered', - 'dismembering', - 'dismemberment', - 'dismemberments', - 'dismembers', - 'dismissals', - 'dismissing', - 'dismission', - 'dismissions', - 'dismissive', - 'dismissively', - 'dismounted', - 'dismounting', - 'disobedience', - 'disobediences', - 'disobedient', - 'disobediently', - 'disobeyers', - 'disobeying', - 'disobliged', - 'disobliges', - 'disobliging', - 'disordered', - 'disorderedly', - 'disorderedness', - 'disorderednesses', - 'disordering', - 'disorderliness', - 'disorderlinesses', - 'disorderly', - 'disorganization', - 'disorganizations', - 'disorganize', - 'disorganized', - 'disorganizes', - 'disorganizing', - 'disorientate', - 'disorientated', - 'disorientates', - 'disorientating', - 'disorientation', - 'disorientations', - 'disoriented', - 'disorienting', - 'disorients', - 'disownment', - 'disownments', - 'disparaged', - 'disparagement', - 'disparagements', - 'disparager', - 'disparagers', - 'disparages', - 'disparaging', - 'disparagingly', - 'disparately', - 'disparateness', - 'disparatenesses', - 'disparities', - 'disparting', - 'dispassion', - 'dispassionate', - 'dispassionately', - 'dispassionateness', - 'dispassionatenesses', - 'dispassions', - 'dispatched', - 'dispatcher', - 'dispatchers', - 'dispatches', - 'dispatching', - 'dispelling', - 'dispending', - 'dispensabilities', - 'dispensability', - 'dispensable', - 'dispensaries', - 'dispensary', - 'dispensation', - 'dispensational', - 'dispensations', - 'dispensatories', - 'dispensatory', - 'dispensers', - 'dispensing', - 'dispeopled', - 'dispeoples', - 'dispeopling', - 'dispersals', - 'dispersant', - 'dispersants', - 'dispersedly', - 'dispersers', - 'dispersible', - 'dispersing', - 'dispersion', - 'dispersions', - 'dispersive', - 'dispersively', - 'dispersiveness', - 'dispersivenesses', - 'dispersoid', - 'dispersoids', - 'dispirited', - 'dispiritedly', - 'dispiritedness', - 'dispiritednesses', - 'dispiriting', - 'dispiteous', - 'displaceable', - 'displacement', - 'displacements', - 'displacing', - 'displanted', - 'displanting', - 'displayable', - 'displaying', - 'displeased', - 'displeases', - 'displeasing', - 'displeasure', - 'displeasures', - 'disploding', - 'displosion', - 'displosions', - 'displuming', - 'disporting', - 'disportment', - 'disportments', - 'disposabilities', - 'disposability', - 'disposable', - 'disposables', - 'disposition', - 'dispositional', - 'dispositions', - 'dispositive', - 'dispossess', - 'dispossessed', - 'dispossesses', - 'dispossessing', - 'dispossession', - 'dispossessions', - 'dispossessor', - 'dispossessors', - 'disposures', - 'dispraised', - 'dispraiser', - 'dispraisers', - 'dispraises', - 'dispraising', - 'dispraisingly', - 'dispreading', - 'disprizing', - 'disproportion', - 'disproportional', - 'disproportionate', - 'disproportionated', - 'disproportionately', - 'disproportionates', - 'disproportionating', - 'disproportionation', - 'disproportionations', - 'disproportioned', - 'disproportioning', - 'disproportions', - 'disprovable', - 'disproving', - 'disputable', - 'disputably', - 'disputants', - 'disputation', - 'disputations', - 'disputatious', - 'disputatiously', - 'disputatiousness', - 'disputatiousnesses', - 'disqualification', - 'disqualifications', - 'disqualified', - 'disqualifies', - 'disqualify', - 'disqualifying', - 'disquantitied', - 'disquantities', - 'disquantity', - 'disquantitying', - 'disquieted', - 'disquieting', - 'disquietingly', - 'disquietly', - 'disquietude', - 'disquietudes', - 'disquisition', - 'disquisitions', - 'disregarded', - 'disregardful', - 'disregarding', - 'disregards', - 'disrelated', - 'disrelation', - 'disrelations', - 'disrelished', - 'disrelishes', - 'disrelishing', - 'disremember', - 'disremembered', - 'disremembering', - 'disremembers', - 'disrepairs', - 'disreputabilities', - 'disreputability', - 'disreputable', - 'disreputableness', - 'disreputablenesses', - 'disreputably', - 'disreputes', - 'disrespect', - 'disrespectabilities', - 'disrespectability', - 'disrespectable', - 'disrespected', - 'disrespectful', - 'disrespectfully', - 'disrespectfulness', - 'disrespectfulnesses', - 'disrespecting', - 'disrespects', - 'disrooting', - 'disrupters', - 'disrupting', - 'disruption', - 'disruptions', - 'disruptive', - 'disruptively', - 'disruptiveness', - 'disruptivenesses', - 'dissatisfaction', - 'dissatisfactions', - 'dissatisfactory', - 'dissatisfied', - 'dissatisfies', - 'dissatisfy', - 'dissatisfying', - 'disseating', - 'dissecting', - 'dissection', - 'dissections', - 'dissectors', - 'disseising', - 'disseisins', - 'disseisors', - 'disseizing', - 'disseizins', - 'dissembled', - 'dissembler', - 'dissemblers', - 'dissembles', - 'dissembling', - 'disseminate', - 'disseminated', - 'disseminates', - 'disseminating', - 'dissemination', - 'disseminations', - 'disseminator', - 'disseminators', - 'disseminule', - 'disseminules', - 'dissension', - 'dissensions', - 'dissensuses', - 'dissenters', - 'dissentient', - 'dissentients', - 'dissenting', - 'dissention', - 'dissentions', - 'dissentious', - 'dissepiment', - 'dissepiments', - 'dissertate', - 'dissertated', - 'dissertates', - 'dissertating', - 'dissertation', - 'dissertational', - 'dissertations', - 'dissertator', - 'dissertators', - 'disserting', - 'disservice', - 'disserviceable', - 'disservices', - 'disserving', - 'disseverance', - 'disseverances', - 'dissevered', - 'dissevering', - 'disseverment', - 'disseverments', - 'dissidence', - 'dissidences', - 'dissidents', - 'dissimilar', - 'dissimilarities', - 'dissimilarity', - 'dissimilarly', - 'dissimilars', - 'dissimilate', - 'dissimilated', - 'dissimilates', - 'dissimilating', - 'dissimilation', - 'dissimilations', - 'dissimilatory', - 'dissimilitude', - 'dissimilitudes', - 'dissimulate', - 'dissimulated', - 'dissimulates', - 'dissimulating', - 'dissimulation', - 'dissimulations', - 'dissimulator', - 'dissimulators', - 'dissipated', - 'dissipatedly', - 'dissipatedness', - 'dissipatednesses', - 'dissipater', - 'dissipaters', - 'dissipates', - 'dissipating', - 'dissipation', - 'dissipations', - 'dissipative', - 'dissociabilities', - 'dissociability', - 'dissociable', - 'dissociate', - 'dissociated', - 'dissociates', - 'dissociating', - 'dissociation', - 'dissociations', - 'dissociative', - 'dissoluble', - 'dissolutely', - 'dissoluteness', - 'dissolutenesses', - 'dissolution', - 'dissolutions', - 'dissolvable', - 'dissolvent', - 'dissolvents', - 'dissolvers', - 'dissolving', - 'dissonance', - 'dissonances', - 'dissonantly', - 'dissuaders', - 'dissuading', - 'dissuasion', - 'dissuasions', - 'dissuasive', - 'dissuasively', - 'dissuasiveness', - 'dissuasivenesses', - 'dissyllable', - 'dissyllables', - 'dissymmetric', - 'dissymmetries', - 'dissymmetry', - 'distaining', - 'distancing', - 'distantness', - 'distantnesses', - 'distasteful', - 'distastefully', - 'distastefulness', - 'distastefulnesses', - 'distasting', - 'distelfink', - 'distelfinks', - 'distemperate', - 'distemperature', - 'distemperatures', - 'distempered', - 'distempering', - 'distempers', - 'distending', - 'distensibilities', - 'distensibility', - 'distensible', - 'distension', - 'distensions', - 'distention', - 'distentions', - 'distichous', - 'distillate', - 'distillates', - 'distillation', - 'distillations', - 'distilleries', - 'distillers', - 'distillery', - 'distilling', - 'distincter', - 'distinctest', - 'distinction', - 'distinctions', - 'distinctive', - 'distinctively', - 'distinctiveness', - 'distinctivenesses', - 'distinctly', - 'distinctness', - 'distinctnesses', - 'distinguish', - 'distinguishabilities', - 'distinguishability', - 'distinguishable', - 'distinguishably', - 'distinguished', - 'distinguishes', - 'distinguishing', - 'distorters', - 'distorting', - 'distortion', - 'distortional', - 'distortions', - 'distractable', - 'distracted', - 'distractedly', - 'distractibilities', - 'distractibility', - 'distractible', - 'distracting', - 'distractingly', - 'distraction', - 'distractions', - 'distractive', - 'distrainable', - 'distrained', - 'distrainer', - 'distrainers', - 'distraining', - 'distrainor', - 'distrainors', - 'distraints', - 'distraught', - 'distraughtly', - 'distressed', - 'distresses', - 'distressful', - 'distressfully', - 'distressfulness', - 'distressfulnesses', - 'distressing', - 'distressingly', - 'distributaries', - 'distributary', - 'distribute', - 'distributed', - 'distributee', - 'distributees', - 'distributes', - 'distributing', - 'distribution', - 'distributional', - 'distributions', - 'distributive', - 'distributively', - 'distributivities', - 'distributivity', - 'distributor', - 'distributors', - 'distributorship', - 'distributorships', - 'districted', - 'districting', - 'distrusted', - 'distrustful', - 'distrustfully', - 'distrustfulness', - 'distrustfulnesses', - 'distrusting', - 'disturbance', - 'disturbances', - 'disturbers', - 'disturbing', - 'disturbingly', - 'disubstituted', - 'disulfides', - 'disulfiram', - 'disulfirams', - 'disulfoton', - 'disulfotons', - 'disunionist', - 'disunionists', - 'disunities', - 'disuniting', - 'disutilities', - 'disutility', - 'disvaluing', - 'disyllabic', - 'disyllable', - 'disyllables', - 'ditchdigger', - 'ditchdiggers', - 'dithiocarbamate', - 'dithiocarbamates', - 'dithyrambic', - 'dithyrambically', - 'dithyrambs', - 'ditransitive', - 'ditransitives', - 'diuretically', - 'divagating', - 'divagation', - 'divagations', - 'divaricate', - 'divaricated', - 'divaricates', - 'divaricating', - 'divarication', - 'divarications', - 'divebombed', - 'divebombing', - 'divergence', - 'divergences', - 'divergencies', - 'divergency', - 'divergently', - 'diverseness', - 'diversenesses', - 'diversification', - 'diversifications', - 'diversified', - 'diversifier', - 'diversifiers', - 'diversifies', - 'diversifying', - 'diversionary', - 'diversionist', - 'diversionists', - 'diversions', - 'diversities', - 'diverticula', - 'diverticular', - 'diverticulites', - 'diverticulitides', - 'diverticulitis', - 'diverticulitises', - 'diverticuloses', - 'diverticulosis', - 'diverticulosises', - 'diverticulum', - 'divertimenti', - 'divertimento', - 'divertimentos', - 'divertissement', - 'divertissements', - 'divestiture', - 'divestitures', - 'divestment', - 'divestments', - 'dividedness', - 'dividednesses', - 'dividendless', - 'divination', - 'divinations', - 'divinatory', - 'divinising', - 'divinities', - 'divinizing', - 'divisibilities', - 'divisibility', - 'divisional', - 'divisionism', - 'divisionisms', - 'divisionist', - 'divisionists', - 'divisively', - 'divisiveness', - 'divisivenesses', - 'divorcement', - 'divorcements', - 'divulgence', - 'divulgences', - 'dizzinesses', - 'dizzyingly', - 'djellabahs', - 'dobsonflies', - 'docilities', - 'dockmaster', - 'dockmasters', - 'dockworker', - 'dockworkers', - 'doctorates', - 'doctorless', - 'doctorship', - 'doctorships', - 'doctrinaire', - 'doctrinaires', - 'doctrinairism', - 'doctrinairisms', - 'doctrinally', - 'docudramas', - 'documentable', - 'documental', - 'documentalist', - 'documentalists', - 'documentarian', - 'documentarians', - 'documentaries', - 'documentarily', - 'documentarist', - 'documentarists', - 'documentary', - 'documentation', - 'documentational', - 'documentations', - 'documented', - 'documenter', - 'documenters', - 'documenting', - 'dodecagons', - 'dodecahedra', - 'dodecahedral', - 'dodecahedron', - 'dodecahedrons', - 'dodecaphonic', - 'dodecaphonically', - 'dodecaphonies', - 'dodecaphonist', - 'dodecaphonists', - 'dodecaphony', - 'dodgeballs', - 'dodginesses', - 'dogberries', - 'dogcatcher', - 'dogcatchers', - 'dogfighting', - 'doggedness', - 'doggednesses', - 'doggishness', - 'doggishnesses', - 'doggoneder', - 'doggonedest', - 'doglegging', - 'dogmatical', - 'dogmatically', - 'dogmaticalness', - 'dogmaticalnesses', - 'dogmatisms', - 'dogmatists', - 'dogmatization', - 'dogmatizations', - 'dogmatized', - 'dogmatizer', - 'dogmatizers', - 'dogmatizes', - 'dogmatizing', - 'dognappers', - 'dognapping', - 'dogsbodies', - 'dogsledded', - 'dogsledder', - 'dogsledders', - 'dogsledding', - 'dogtrotted', - 'dogtrotting', - 'dogwatches', - 'dolefuller', - 'dolefullest', - 'dolefulness', - 'dolefulnesses', - 'dolichocephalic', - 'dolichocephalies', - 'dolichocephaly', - 'dollhouses', - 'dollishness', - 'dollishnesses', - 'dolomitization', - 'dolomitizations', - 'dolomitize', - 'dolomitized', - 'dolomitizes', - 'dolomitizing', - 'dolorously', - 'dolorousness', - 'dolorousnesses', - 'dolphinfish', - 'dolphinfishes', - 'doltishness', - 'doltishnesses', - 'domestically', - 'domesticate', - 'domesticated', - 'domesticates', - 'domesticating', - 'domestication', - 'domestications', - 'domesticities', - 'domesticity', - 'domiciliary', - 'domiciliate', - 'domiciliated', - 'domiciliates', - 'domiciliating', - 'domiciliation', - 'domiciliations', - 'domiciling', - 'dominances', - 'dominantly', - 'dominating', - 'domination', - 'dominations', - 'dominative', - 'dominators', - 'dominatrices', - 'dominatrix', - 'dominatrixes', - 'domineered', - 'domineering', - 'domineeringly', - 'domineeringness', - 'domineeringnesses', - 'dominicker', - 'dominickers', - 'dominiques', - 'donenesses', - 'donkeywork', - 'donkeyworks', - 'donnickers', - 'donnishness', - 'donnishnesses', - 'donnybrook', - 'donnybrooks', - 'doodlebugs', - 'doohickeys', - 'doohickies', - 'doomsayers', - 'doomsaying', - 'doomsayings', - 'doomsdayer', - 'doomsdayers', - 'doorkeeper', - 'doorkeepers', - 'doorplates', - 'dopaminergic', - 'dopinesses', - 'doppelganger', - 'doppelgangers', - 'dormancies', - 'dormitories', - 'doronicums', - 'dorsiventral', - 'dorsiventralities', - 'dorsiventrality', - 'dorsiventrally', - 'dorsolateral', - 'dorsoventral', - 'dorsoventralities', - 'dorsoventrality', - 'dorsoventrally', - 'dosimeters', - 'dosimetric', - 'dosimetries', - 'dottinesses', - 'doubleheader', - 'doubleheaders', - 'doubleness', - 'doublenesses', - 'doublespeak', - 'doublespeaker', - 'doublespeakers', - 'doublespeaks', - 'doublethink', - 'doublethinks', - 'doubletons', - 'doubtfully', - 'doubtfulness', - 'doubtfulnesses', - 'doubtingly', - 'doubtlessly', - 'doubtlessness', - 'doubtlessnesses', - 'doughfaces', - 'doughnutlike', - 'doughtiest', - 'doughtiness', - 'doughtinesses', - 'dournesses', - 'douroucouli', - 'douroucoulis', - 'dovetailed', - 'dovetailing', - 'dovishness', - 'dovishnesses', - 'dowdinesses', - 'dowitchers', - 'downbursts', - 'downdrafts', - 'downfallen', - 'downgraded', - 'downgrades', - 'downgrading', - 'downhearted', - 'downheartedly', - 'downheartedness', - 'downheartednesses', - 'downhiller', - 'downhillers', - 'downloadable', - 'downloaded', - 'downloading', - 'downplayed', - 'downplaying', - 'downrightly', - 'downrightness', - 'downrightnesses', - 'downscaled', - 'downscales', - 'downscaling', - 'downshifted', - 'downshifting', - 'downshifts', - 'downsizing', - 'downslides', - 'downspouts', - 'downstages', - 'downstairs', - 'downstater', - 'downstaters', - 'downstates', - 'downstream', - 'downstroke', - 'downstrokes', - 'downswings', - 'downtowner', - 'downtowners', - 'downtrends', - 'downtrodden', - 'downwardly', - 'downwardness', - 'downwardnesses', - 'downwashes', - 'doxologies', - 'doxorubicin', - 'doxorubicins', - 'doxycycline', - 'doxycyclines', - 'dozinesses', - 'drabnesses', - 'draftiness', - 'draftinesses', - 'draftsmanship', - 'draftsmanships', - 'draftsperson', - 'draftspersons', - 'draggingly', - 'dragonflies', - 'dragonhead', - 'dragonheads', - 'dragooning', - 'drainpipes', - 'dramatically', - 'dramatisation', - 'dramatisations', - 'dramatised', - 'dramatises', - 'dramatising', - 'dramatists', - 'dramatizable', - 'dramatization', - 'dramatizations', - 'dramatized', - 'dramatizes', - 'dramatizing', - 'dramaturge', - 'dramaturges', - 'dramaturgic', - 'dramaturgical', - 'dramaturgically', - 'dramaturgies', - 'dramaturgs', - 'dramaturgy', - 'drapabilities', - 'drapability', - 'drapeabilities', - 'drapeability', - 'drastically', - 'draughtier', - 'draughtiest', - 'draughting', - 'draughtsman', - 'draughtsmen', - 'drawbridge', - 'drawbridges', - 'drawerfuls', - 'drawknives', - 'drawlingly', - 'drawnworks', - 'drawplates', - 'drawshaves', - 'drawstring', - 'drawstrings', - 'dreadfully', - 'dreadfulness', - 'dreadfulnesses', - 'dreadlocks', - 'dreadnought', - 'dreadnoughts', - 'dreamfully', - 'dreamfulness', - 'dreamfulnesses', - 'dreaminess', - 'dreaminesses', - 'dreamlands', - 'dreamlessly', - 'dreamlessness', - 'dreamlessnesses', - 'dreamtimes', - 'dreamworld', - 'dreamworlds', - 'dreariness', - 'drearinesses', - 'dressiness', - 'dressinesses', - 'dressmaker', - 'dressmakers', - 'dressmaking', - 'dressmakings', - 'driftingly', - 'driftwoods', - 'drillabilities', - 'drillability', - 'drillmaster', - 'drillmasters', - 'drinkabilities', - 'drinkability', - 'drinkables', - 'dripstones', - 'drivabilities', - 'drivability', - 'driveabilities', - 'driveability', - 'drivelines', - 'drivelling', - 'drivenness', - 'drivennesses', - 'driverless', - 'driveshaft', - 'driveshafts', - 'drivetrain', - 'drivetrains', - 'drizzliest', - 'drizzlingly', - 'drolleries', - 'drollnesses', - 'dromedaries', - 'droopingly', - 'dropcloths', - 'dropkicker', - 'dropkickers', - 'droplights', - 'dropperful', - 'dropperfuls', - 'droppersful', - 'drosophila', - 'drosophilas', - 'droughtier', - 'droughtiest', - 'droughtiness', - 'droughtinesses', - 'drouthiest', - 'drowsiness', - 'drowsinesses', - 'drudgeries', - 'drudgingly', - 'drugmakers', - 'drugstores', - 'druidesses', - 'drumbeater', - 'drumbeaters', - 'drumbeating', - 'drumbeatings', - 'drumfishes', - 'drumsticks', - 'drunkenness', - 'drunkennesses', - 'drupaceous', - 'dryasdusts', - 'dryopithecine', - 'dryopithecines', - 'drysalteries', - 'drysalters', - 'drysaltery', - 'dualistically', - 'dubiousness', - 'dubiousnesses', - 'dubitation', - 'dubitations', - 'duckboards', - 'duckwalked', - 'duckwalking', - 'ductilities', - 'duennaship', - 'duennaships', - 'dulcifying', - 'dulcimores', - 'dullnesses', - 'dullsville', - 'dullsvilles', - 'dumbfounded', - 'dumbfounder', - 'dumbfoundered', - 'dumbfoundering', - 'dumbfounders', - 'dumbfounding', - 'dumbfounds', - 'dumbnesses', - 'dumbstruck', - 'dumbwaiter', - 'dumbwaiters', - 'dumfounded', - 'dumfounding', - 'dumortierite', - 'dumortierites', - 'dumpinesses', - 'dunderhead', - 'dunderheaded', - 'dunderheads', - 'dundrearies', - 'dungeoning', - 'duodecillion', - 'duodecillions', - 'duodecimal', - 'duodecimals', - 'duodecimos', - 'duopolistic', - 'duopsonies', - 'duplicated', - 'duplicates', - 'duplicating', - 'duplication', - 'duplications', - 'duplicative', - 'duplicator', - 'duplicators', - 'duplicities', - 'duplicitous', - 'duplicitously', - 'durabilities', - 'durability', - 'durableness', - 'durablenesses', - 'duralumins', - 'durometers', - 'duskinesses', - 'dustcovers', - 'dustinesses', - 'dutifulness', - 'dutifulnesses', - 'duumvirate', - 'duumvirates', - 'dwarfishly', - 'dwarfishness', - 'dwarfishnesses', - 'dwarfnesses', - 'dyadically', - 'dyeabilities', - 'dyeability', - 'dynamically', - 'dynamistic', - 'dynamiters', - 'dynamiting', - 'dynamometer', - 'dynamometers', - 'dynamometric', - 'dynamometries', - 'dynamometry', - 'dynamotors', - 'dynastically', - 'dysarthria', - 'dysarthrias', - 'dyscrasias', - 'dysenteric', - 'dysenteries', - 'dysfunction', - 'dysfunctional', - 'dysfunctions', - 'dysgeneses', - 'dysgenesis', - 'dyskinesia', - 'dyskinesias', - 'dyskinetic', - 'dyslogistic', - 'dyslogistically', - 'dysmenorrhea', - 'dysmenorrheas', - 'dysmenorrheic', - 'dyspepsias', - 'dyspepsies', - 'dyspeptically', - 'dyspeptics', - 'dysphagias', - 'dysphasias', - 'dysphasics', - 'dysphemism', - 'dysphemisms', - 'dysphemistic', - 'dysphonias', - 'dysphorias', - 'dysplasias', - 'dysplastic', - 'dysprosium', - 'dysprosiums', - 'dysrhythmia', - 'dysrhythmias', - 'dysrhythmic', - 'dystrophic', - 'dystrophies', - 'eagernesses', - 'earlinesses', - 'earlywoods', - 'earmarking', - 'earnestness', - 'earnestnesses', - 'earsplitting', - 'earthbound', - 'earthenware', - 'earthenwares', - 'earthiness', - 'earthinesses', - 'earthliest', - 'earthlight', - 'earthlights', - 'earthliness', - 'earthlinesses', - 'earthlings', - 'earthmover', - 'earthmovers', - 'earthmoving', - 'earthmovings', - 'earthquake', - 'earthquakes', - 'earthrises', - 'earthshaker', - 'earthshakers', - 'earthshaking', - 'earthshakingly', - 'earthshine', - 'earthshines', - 'earthstars', - 'earthwards', - 'earthworks', - 'earthworms', - 'earwigging', - 'earwitness', - 'earwitnesses', - 'easinesses', - 'easterlies', - 'easterners', - 'easternmost', - 'easygoingness', - 'easygoingnesses', - 'eavesdropped', - 'eavesdropper', - 'eavesdroppers', - 'eavesdropping', - 'eavesdrops', - 'ebullience', - 'ebulliences', - 'ebulliencies', - 'ebulliency', - 'ebulliently', - 'ebullition', - 'ebullitions', - 'eccentrically', - 'eccentricities', - 'eccentricity', - 'eccentrics', - 'ecchymoses', - 'ecchymosis', - 'ecchymotic', - 'ecclesiastic', - 'ecclesiastical', - 'ecclesiastically', - 'ecclesiasticism', - 'ecclesiasticisms', - 'ecclesiastics', - 'ecclesiological', - 'ecclesiologies', - 'ecclesiologist', - 'ecclesiologists', - 'ecclesiology', - 'ecdysiasts', - 'echeloning', - 'echeverias', - 'echinococci', - 'echinococcoses', - 'echinococcosis', - 'echinococcus', - 'echinoderm', - 'echinodermatous', - 'echinoderms', - 'echiuroids', - 'echocardiogram', - 'echocardiograms', - 'echocardiographer', - 'echocardiographers', - 'echocardiographic', - 'echocardiographies', - 'echocardiography', - 'echolalias', - 'echolocation', - 'echolocations', - 'echoviruses', - 'eclaircissement', - 'eclaircissements', - 'eclampsias', - 'eclectically', - 'eclecticism', - 'eclecticisms', - 'eclipsises', - 'ecocatastrophe', - 'ecocatastrophes', - 'ecological', - 'ecologically', - 'ecologists', - 'econoboxes', - 'econometric', - 'econometrically', - 'econometrician', - 'econometricians', - 'econometrics', - 'econometrist', - 'econometrists', - 'economical', - 'economically', - 'economised', - 'economises', - 'economising', - 'economists', - 'economized', - 'economizer', - 'economizers', - 'economizes', - 'economizing', - 'ecophysiological', - 'ecophysiologies', - 'ecophysiology', - 'ecospecies', - 'ecospheres', - 'ecosystems', - 'ecotourism', - 'ecotourisms', - 'ecotourist', - 'ecotourists', - 'ecstatically', - 'ectodermal', - 'ectomorphic', - 'ectomorphs', - 'ectoparasite', - 'ectoparasites', - 'ectoparasitic', - 'ectopically', - 'ectoplasmic', - 'ectoplasms', - 'ectothermic', - 'ectotherms', - 'ectotrophic', - 'ecumenical', - 'ecumenicalism', - 'ecumenicalisms', - 'ecumenically', - 'ecumenicism', - 'ecumenicisms', - 'ecumenicist', - 'ecumenicists', - 'ecumenicities', - 'ecumenicity', - 'ecumenisms', - 'ecumenists', - 'eczematous', - 'edaphically', - 'edelweisses', - 'edentulous', - 'edginesses', - 'edibilities', - 'edibleness', - 'ediblenesses', - 'edification', - 'edifications', - 'editorialist', - 'editorialists', - 'editorialization', - 'editorializations', - 'editorialize', - 'editorialized', - 'editorializer', - 'editorializers', - 'editorializes', - 'editorializing', - 'editorially', - 'editorials', - 'editorship', - 'editorships', - 'editresses', - 'educabilities', - 'educability', - 'educatedness', - 'educatednesses', - 'educational', - 'educationalist', - 'educationalists', - 'educationally', - 'educationese', - 'educationeses', - 'educationist', - 'educationists', - 'educations', - 'edulcorate', - 'edulcorated', - 'edulcorates', - 'edulcorating', - 'edutainment', - 'edutainments', - 'eelgrasses', - 'eerinesses', - 'effaceable', - 'effacement', - 'effacements', - 'effectively', - 'effectiveness', - 'effectivenesses', - 'effectives', - 'effectivities', - 'effectivity', - 'effectualities', - 'effectuality', - 'effectually', - 'effectualness', - 'effectualnesses', - 'effectuate', - 'effectuated', - 'effectuates', - 'effectuating', - 'effectuation', - 'effectuations', - 'effeminacies', - 'effeminacy', - 'effeminate', - 'effeminately', - 'effeminates', - 'efferently', - 'effervesce', - 'effervesced', - 'effervescence', - 'effervescences', - 'effervescent', - 'effervescently', - 'effervesces', - 'effervescing', - 'effeteness', - 'effetenesses', - 'efficacies', - 'efficacious', - 'efficaciously', - 'efficaciousness', - 'efficaciousnesses', - 'efficacities', - 'efficacity', - 'efficiencies', - 'efficiency', - 'efficiently', - 'effloresce', - 'effloresced', - 'efflorescence', - 'efflorescences', - 'efflorescent', - 'effloresces', - 'efflorescing', - 'effluences', - 'effluviums', - 'effluxions', - 'effortfully', - 'effortfulness', - 'effortfulnesses', - 'effortless', - 'effortlessly', - 'effortlessness', - 'effortlessnesses', - 'effronteries', - 'effrontery', - 'effulgence', - 'effulgences', - 'effusively', - 'effusiveness', - 'effusivenesses', - 'egalitarian', - 'egalitarianism', - 'egalitarianisms', - 'egalitarians', - 'eggbeaters', - 'eggheadedness', - 'eggheadednesses', - 'eglantines', - 'egocentric', - 'egocentrically', - 'egocentricities', - 'egocentricity', - 'egocentrics', - 'egocentrism', - 'egocentrisms', - 'egoistical', - 'egoistically', - 'egomaniacal', - 'egomaniacally', - 'egomaniacs', - 'egotistical', - 'egotistically', - 'egregiously', - 'egregiousness', - 'egregiousnesses', - 'egressions', - 'eicosanoid', - 'eicosanoids', - 'eiderdowns', - 'eidetically', - 'eigenmodes', - 'eigenvalue', - 'eigenvalues', - 'eigenvector', - 'eigenvectors', - 'eighteenth', - 'eighteenths', - 'eightieths', - 'einsteinium', - 'einsteiniums', - 'eisteddfod', - 'eisteddfodau', - 'eisteddfodic', - 'eisteddfods', - 'ejaculated', - 'ejaculates', - 'ejaculating', - 'ejaculation', - 'ejaculations', - 'ejaculator', - 'ejaculators', - 'ejaculatory', - 'ejectments', - 'elaborated', - 'elaborately', - 'elaborateness', - 'elaboratenesses', - 'elaborates', - 'elaborating', - 'elaboration', - 'elaborations', - 'elaborative', - 'elasmobranch', - 'elasmobranchs', - 'elastically', - 'elasticities', - 'elasticity', - 'elasticized', - 'elastomeric', - 'elastomers', - 'elatedness', - 'elatednesses', - 'elaterites', - 'elbowrooms', - 'elderberries', - 'elderberry', - 'elderliness', - 'elderlinesses', - 'elderships', - 'elecampane', - 'elecampanes', - 'electabilities', - 'electability', - 'electioneer', - 'electioneered', - 'electioneerer', - 'electioneerers', - 'electioneering', - 'electioneers', - 'electively', - 'electiveness', - 'electivenesses', - 'electorally', - 'electorate', - 'electorates', - 'electresses', - 'electrical', - 'electrically', - 'electrician', - 'electricians', - 'electricities', - 'electricity', - 'electrification', - 'electrifications', - 'electrified', - 'electrifies', - 'electrifying', - 'electroacoustic', - 'electroacoustics', - 'electroanalyses', - 'electroanalysis', - 'electroanalytical', - 'electrocardiogram', - 'electrocardiograms', - 'electrocardiograph', - 'electrocardiographic', - 'electrocardiographically', - 'electrocardiographies', - 'electrocardiographs', - 'electrocardiography', - 'electrochemical', - 'electrochemically', - 'electrochemistries', - 'electrochemistry', - 'electroconvulsive', - 'electrocorticogram', - 'electrocorticograms', - 'electrocute', - 'electrocuted', - 'electrocutes', - 'electrocuting', - 'electrocution', - 'electrocutions', - 'electrodeposit', - 'electrodeposited', - 'electrodepositing', - 'electrodeposition', - 'electrodepositions', - 'electrodeposits', - 'electrodermal', - 'electrodes', - 'electrodesiccation', - 'electrodesiccations', - 'electrodialyses', - 'electrodialysis', - 'electrodialytic', - 'electrodynamic', - 'electrodynamics', - 'electrodynamometer', - 'electrodynamometers', - 'electroencephalogram', - 'electroencephalograms', - 'electroencephalograph', - 'electroencephalographer', - 'electroencephalographers', - 'electroencephalographic', - 'electroencephalographically', - 'electroencephalographies', - 'electroencephalographs', - 'electroencephalography', - 'electrofishing', - 'electrofishings', - 'electroform', - 'electroformed', - 'electroforming', - 'electroforms', - 'electrogeneses', - 'electrogenesis', - 'electrogenic', - 'electrogram', - 'electrograms', - 'electrohydraulic', - 'electroing', - 'electrojet', - 'electrojets', - 'electrokinetic', - 'electrokinetics', - 'electroless', - 'electrologies', - 'electrologist', - 'electrologists', - 'electrology', - 'electroluminescence', - 'electroluminescences', - 'electroluminescent', - 'electrolyses', - 'electrolysis', - 'electrolyte', - 'electrolytes', - 'electrolytic', - 'electrolytically', - 'electrolyze', - 'electrolyzed', - 'electrolyzes', - 'electrolyzing', - 'electromagnet', - 'electromagnetic', - 'electromagnetically', - 'electromagnetism', - 'electromagnetisms', - 'electromagnets', - 'electromechanical', - 'electromechanically', - 'electrometallurgies', - 'electrometallurgy', - 'electrometer', - 'electrometers', - 'electromyogram', - 'electromyograms', - 'electromyograph', - 'electromyographic', - 'electromyographically', - 'electromyographies', - 'electromyographs', - 'electromyography', - 'electronegative', - 'electronegativities', - 'electronegativity', - 'electronic', - 'electronically', - 'electronics', - 'electrooculogram', - 'electrooculograms', - 'electrooculographies', - 'electrooculography', - 'electroosmoses', - 'electroosmosis', - 'electroosmotic', - 'electropherogram', - 'electropherograms', - 'electrophile', - 'electrophiles', - 'electrophilic', - 'electrophilicities', - 'electrophilicity', - 'electrophorese', - 'electrophoresed', - 'electrophoreses', - 'electrophoresing', - 'electrophoresis', - 'electrophoretic', - 'electrophoretically', - 'electrophoretogram', - 'electrophoretograms', - 'electrophori', - 'electrophorus', - 'electrophotographic', - 'electrophotographies', - 'electrophotography', - 'electrophysiologic', - 'electrophysiological', - 'electrophysiologically', - 'electrophysiologies', - 'electrophysiologist', - 'electrophysiologists', - 'electrophysiology', - 'electroplate', - 'electroplated', - 'electroplates', - 'electroplating', - 'electropositive', - 'electroretinogram', - 'electroretinograms', - 'electroretinograph', - 'electroretinographic', - 'electroretinographies', - 'electroretinographs', - 'electroretinography', - 'electroscope', - 'electroscopes', - 'electroshock', - 'electroshocks', - 'electrostatic', - 'electrostatically', - 'electrostatics', - 'electrosurgeries', - 'electrosurgery', - 'electrosurgical', - 'electrotherapies', - 'electrotherapy', - 'electrothermal', - 'electrothermally', - 'electrotonic', - 'electrotonically', - 'electrotonus', - 'electrotonuses', - 'electrotype', - 'electrotyped', - 'electrotyper', - 'electrotypers', - 'electrotypes', - 'electrotyping', - 'electroweak', - 'electrowinning', - 'electrowinnings', - 'electuaries', - 'eledoisins', - 'eleemosynary', - 'elegancies', - 'elegiacally', - 'elementally', - 'elementals', - 'elementarily', - 'elementariness', - 'elementarinesses', - 'elementary', - 'elephantiases', - 'elephantiasis', - 'elephantine', - 'elevations', - 'elicitation', - 'elicitations', - 'eligibilities', - 'eligibility', - 'eliminated', - 'eliminates', - 'eliminating', - 'elimination', - 'eliminations', - 'eliminative', - 'eliminator', - 'eliminators', - 'ellipsoidal', - 'ellipsoids', - 'elliptical', - 'elliptically', - 'ellipticals', - 'ellipticities', - 'ellipticity', - 'elocutionary', - 'elocutionist', - 'elocutionists', - 'elocutions', - 'elongating', - 'elongation', - 'elongations', - 'elopements', - 'eloquences', - 'eloquently', - 'elucidated', - 'elucidates', - 'elucidating', - 'elucidation', - 'elucidations', - 'elucidative', - 'elucidator', - 'elucidators', - 'elucubrate', - 'elucubrated', - 'elucubrates', - 'elucubrating', - 'elucubration', - 'elucubrations', - 'elusiveness', - 'elusivenesses', - 'elutriated', - 'elutriates', - 'elutriating', - 'elutriation', - 'elutriations', - 'elutriator', - 'elutriators', - 'eluviating', - 'eluviation', - 'eluviations', - 'emaciating', - 'emaciation', - 'emaciations', - 'emalangeni', - 'emanations', - 'emancipate', - 'emancipated', - 'emancipates', - 'emancipating', - 'emancipation', - 'emancipationist', - 'emancipationists', - 'emancipations', - 'emancipator', - 'emancipators', - 'emarginate', - 'emargination', - 'emarginations', - 'emasculate', - 'emasculated', - 'emasculates', - 'emasculating', - 'emasculation', - 'emasculations', - 'emasculator', - 'emasculators', - 'embalmment', - 'embalmments', - 'embankment', - 'embankments', - 'embarcadero', - 'embarcaderos', - 'embargoing', - 'embarkation', - 'embarkations', - 'embarkment', - 'embarkments', - 'embarrassable', - 'embarrassed', - 'embarrassedly', - 'embarrasses', - 'embarrassing', - 'embarrassingly', - 'embarrassment', - 'embarrassments', - 'embassages', - 'embattlement', - 'embattlements', - 'embattling', - 'embayments', - 'embeddings', - 'embedments', - 'embellished', - 'embellisher', - 'embellishers', - 'embellishes', - 'embellishing', - 'embellishment', - 'embellishments', - 'embezzlement', - 'embezzlements', - 'embezzlers', - 'embezzling', - 'embittered', - 'embittering', - 'embitterment', - 'embitterments', - 'emblazoned', - 'emblazoner', - 'emblazoners', - 'emblazoning', - 'emblazonment', - 'emblazonments', - 'emblazonries', - 'emblazonry', - 'emblematic', - 'emblematical', - 'emblematically', - 'emblematize', - 'emblematized', - 'emblematizes', - 'emblematizing', - 'emblements', - 'embodiment', - 'embodiments', - 'emboldened', - 'emboldening', - 'embolectomies', - 'embolectomy', - 'embolismic', - 'embolization', - 'embolizations', - 'embonpoint', - 'embonpoints', - 'embordered', - 'embordering', - 'embosoming', - 'embossable', - 'embossment', - 'embossments', - 'embouchure', - 'embouchures', - 'embourgeoisement', - 'embourgeoisements', - 'emboweling', - 'embowelled', - 'embowelling', - 'embowering', - 'embraceable', - 'embracement', - 'embracements', - 'embraceors', - 'embraceries', - 'embracingly', - 'embrangled', - 'embranglement', - 'embranglements', - 'embrangles', - 'embrangling', - 'embrasures', - 'embrittled', - 'embrittlement', - 'embrittlements', - 'embrittles', - 'embrittling', - 'embrocation', - 'embrocations', - 'embroidered', - 'embroiderer', - 'embroiderers', - 'embroideries', - 'embroidering', - 'embroiders', - 'embroidery', - 'embroiling', - 'embroilment', - 'embroilments', - 'embrowning', - 'embryogeneses', - 'embryogenesis', - 'embryogenetic', - 'embryogenic', - 'embryogenies', - 'embryogeny', - 'embryological', - 'embryologically', - 'embryologies', - 'embryologist', - 'embryologists', - 'embryology', - 'embryonated', - 'embryonically', - 'embryophyte', - 'embryophytes', - 'emendating', - 'emendation', - 'emendations', - 'emergences', - 'emergencies', - 'emetically', - 'emigrating', - 'emigration', - 'emigrations', - 'eminencies', - 'emissaries', - 'emissivities', - 'emissivity', - 'emittances', - 'emmenagogue', - 'emmenagogues', - 'emollients', - 'emoluments', - 'emotionalism', - 'emotionalisms', - 'emotionalist', - 'emotionalistic', - 'emotionalists', - 'emotionalities', - 'emotionality', - 'emotionalize', - 'emotionalized', - 'emotionalizes', - 'emotionalizing', - 'emotionally', - 'emotionless', - 'emotionlessly', - 'emotionlessness', - 'emotionlessnesses', - 'emotivities', - 'empaneling', - 'empanelled', - 'empanelling', - 'empathetic', - 'empathetically', - 'empathically', - 'empathised', - 'empathises', - 'empathising', - 'empathized', - 'empathizes', - 'empathizing', - 'empennages', - 'emperorship', - 'emperorships', - 'emphasised', - 'emphasises', - 'emphasising', - 'emphasized', - 'emphasizes', - 'emphasizing', - 'emphatically', - 'emphysemas', - 'emphysematous', - 'emphysemic', - 'empirically', - 'empiricism', - 'empiricisms', - 'empiricist', - 'empiricists', - 'emplacement', - 'emplacements', - 'employabilities', - 'employability', - 'employable', - 'employables', - 'employment', - 'employments', - 'empoisoned', - 'empoisoning', - 'empoisonment', - 'empoisonments', - 'empowering', - 'empowerment', - 'empowerments', - 'empressement', - 'empressements', - 'emptinesses', - 'empurpling', - 'emulations', - 'emulatively', - 'emulousness', - 'emulousnesses', - 'emulsifiable', - 'emulsification', - 'emulsifications', - 'emulsified', - 'emulsifier', - 'emulsifiers', - 'emulsifies', - 'emulsifying', - 'emulsoidal', - 'enactments', - 'enamelists', - 'enamelling', - 'enamelware', - 'enamelwares', - 'enamoration', - 'enamorations', - 'enamouring', - 'enantiomer', - 'enantiomeric', - 'enantiomers', - 'enantiomorph', - 'enantiomorphic', - 'enantiomorphism', - 'enantiomorphisms', - 'enantiomorphous', - 'enantiomorphs', - 'encampment', - 'encampments', - 'encapsulate', - 'encapsulated', - 'encapsulates', - 'encapsulating', - 'encapsulation', - 'encapsulations', - 'encapsuled', - 'encapsules', - 'encapsuling', - 'encasement', - 'encasements', - 'encashable', - 'encashment', - 'encashments', - 'encaustics', - 'encephalitic', - 'encephalitides', - 'encephalitis', - 'encephalitogen', - 'encephalitogenic', - 'encephalitogens', - 'encephalogram', - 'encephalograms', - 'encephalograph', - 'encephalographies', - 'encephalographs', - 'encephalography', - 'encephalomyelitides', - 'encephalomyelitis', - 'encephalomyocarditis', - 'encephalomyocarditises', - 'encephalon', - 'encephalopathic', - 'encephalopathies', - 'encephalopathy', - 'enchaining', - 'enchainment', - 'enchainments', - 'enchanters', - 'enchanting', - 'enchantingly', - 'enchantment', - 'enchantments', - 'enchantress', - 'enchantresses', - 'enchiladas', - 'enchiridia', - 'enchiridion', - 'enchiridions', - 'enciphered', - 'encipherer', - 'encipherers', - 'enciphering', - 'encipherment', - 'encipherments', - 'encirclement', - 'encirclements', - 'encircling', - 'enclasping', - 'enclosures', - 'encomiastic', - 'encomiasts', - 'encompassed', - 'encompasses', - 'encompassing', - 'encompassment', - 'encompassments', - 'encountered', - 'encountering', - 'encounters', - 'encouraged', - 'encouragement', - 'encouragements', - 'encourager', - 'encouragers', - 'encourages', - 'encouraging', - 'encouragingly', - 'encrimsoned', - 'encrimsoning', - 'encrimsons', - 'encroached', - 'encroacher', - 'encroachers', - 'encroaches', - 'encroaching', - 'encroachment', - 'encroachments', - 'encrustation', - 'encrustations', - 'encrusting', - 'encrypting', - 'encryption', - 'encryptions', - 'encumbered', - 'encumbering', - 'encumbrance', - 'encumbrancer', - 'encumbrancers', - 'encumbrances', - 'encyclical', - 'encyclicals', - 'encyclopaedia', - 'encyclopaedias', - 'encyclopaedic', - 'encyclopedia', - 'encyclopedias', - 'encyclopedic', - 'encyclopedically', - 'encyclopedism', - 'encyclopedisms', - 'encyclopedist', - 'encyclopedists', - 'encystment', - 'encystments', - 'endamaging', - 'endamoebae', - 'endamoebas', - 'endangered', - 'endangering', - 'endangerment', - 'endangerments', - 'endarchies', - 'endarterectomies', - 'endarterectomy', - 'endearingly', - 'endearment', - 'endearments', - 'endeavored', - 'endeavoring', - 'endeavoured', - 'endeavouring', - 'endeavours', - 'endemically', - 'endemicities', - 'endemicity', - 'endergonic', - 'endlessness', - 'endlessnesses', - 'endobiotic', - 'endocardia', - 'endocardial', - 'endocarditis', - 'endocarditises', - 'endocardium', - 'endochondral', - 'endocrines', - 'endocrinologic', - 'endocrinological', - 'endocrinologies', - 'endocrinologist', - 'endocrinologists', - 'endocrinology', - 'endocytoses', - 'endocytosis', - 'endocytosises', - 'endocytotic', - 'endodermal', - 'endodermis', - 'endodermises', - 'endodontic', - 'endodontically', - 'endodontics', - 'endodontist', - 'endodontists', - 'endoenzyme', - 'endoenzymes', - 'endogamies', - 'endogamous', - 'endogenies', - 'endogenous', - 'endogenously', - 'endolithic', - 'endolymphatic', - 'endolymphs', - 'endometria', - 'endometrial', - 'endometrioses', - 'endometriosis', - 'endometriosises', - 'endometrites', - 'endometritides', - 'endometritis', - 'endometritises', - 'endometrium', - 'endomitoses', - 'endomitosis', - 'endomitotic', - 'endomixises', - 'endomorphic', - 'endomorphies', - 'endomorphism', - 'endomorphisms', - 'endomorphs', - 'endomorphy', - 'endonuclease', - 'endonucleases', - 'endonucleolytic', - 'endoparasite', - 'endoparasites', - 'endoparasitic', - 'endoparasitism', - 'endoparasitisms', - 'endopeptidase', - 'endopeptidases', - 'endoperoxide', - 'endoperoxides', - 'endophytes', - 'endophytic', - 'endoplasmic', - 'endoplasms', - 'endopodite', - 'endopodites', - 'endopolyploid', - 'endopolyploidies', - 'endopolyploidy', - 'endorphins', - 'endorsable', - 'endorsement', - 'endorsements', - 'endoscopes', - 'endoscopic', - 'endoscopically', - 'endoscopies', - 'endoskeletal', - 'endoskeleton', - 'endoskeletons', - 'endosmoses', - 'endosperms', - 'endospores', - 'endosteally', - 'endostyles', - 'endosulfan', - 'endosulfans', - 'endosymbiont', - 'endosymbionts', - 'endosymbioses', - 'endosymbiosis', - 'endosymbiotic', - 'endothecia', - 'endothecium', - 'endothelia', - 'endothelial', - 'endothelioma', - 'endotheliomas', - 'endotheliomata', - 'endothelium', - 'endothermic', - 'endothermies', - 'endotherms', - 'endothermy', - 'endotoxins', - 'endotracheal', - 'endotrophic', - 'endowments', - 'endurances', - 'enduringly', - 'enduringness', - 'enduringnesses', - 'energetically', - 'energetics', - 'energising', - 'energization', - 'energizations', - 'energizers', - 'energizing', - 'enervating', - 'enervation', - 'enervations', - 'enfeeblement', - 'enfeeblements', - 'enfeebling', - 'enfeoffing', - 'enfeoffment', - 'enfeoffments', - 'enfettered', - 'enfettering', - 'enfevering', - 'enfilading', - 'enfleurage', - 'enfleurages', - 'enforceabilities', - 'enforceability', - 'enforceable', - 'enforcement', - 'enforcements', - 'enframement', - 'enframements', - 'enfranchise', - 'enfranchised', - 'enfranchisement', - 'enfranchisements', - 'enfranchises', - 'enfranchising', - 'engagement', - 'engagements', - 'engagingly', - 'engarlanded', - 'engarlanding', - 'engarlands', - 'engendered', - 'engendering', - 'engineered', - 'engineering', - 'engineerings', - 'engineries', - 'engirdling', - 'englishing', - 'englutting', - 'engorgement', - 'engorgements', - 'engrafting', - 'engraftment', - 'engraftments', - 'engrailing', - 'engraining', - 'engravings', - 'engrossers', - 'engrossing', - 'engrossingly', - 'engrossment', - 'engrossments', - 'engulfment', - 'engulfments', - 'enhancement', - 'enhancements', - 'enharmonic', - 'enharmonically', - 'enigmatical', - 'enigmatically', - 'enjambement', - 'enjambements', - 'enjambment', - 'enjambments', - 'enjoyableness', - 'enjoyablenesses', - 'enjoyments', - 'enkephalin', - 'enkephalins', - 'enkindling', - 'enlacement', - 'enlacements', - 'enlargeable', - 'enlargement', - 'enlargements', - 'enlightened', - 'enlightening', - 'enlightenment', - 'enlightenments', - 'enlightens', - 'enlistment', - 'enlistments', - 'enlivening', - 'enmeshment', - 'enmeshments', - 'ennoblement', - 'ennoblements', - 'enokidakes', - 'enological', - 'enologists', - 'enormities', - 'enormously', - 'enormousness', - 'enormousnesses', - 'enraptured', - 'enraptures', - 'enrapturing', - 'enravished', - 'enravishes', - 'enravishing', - 'enregister', - 'enregistered', - 'enregistering', - 'enregisters', - 'enrichment', - 'enrichments', - 'enrollment', - 'enrollments', - 'ensanguine', - 'ensanguined', - 'ensanguines', - 'ensanguining', - 'ensconcing', - 'enscrolled', - 'enscrolling', - 'enserfment', - 'enserfments', - 'ensheathed', - 'ensheathes', - 'ensheathing', - 'enshrinees', - 'enshrinement', - 'enshrinements', - 'enshrining', - 'enshrouded', - 'enshrouding', - 'ensigncies', - 'ensilaging', - 'enslavement', - 'enslavements', - 'ensnarling', - 'ensorceled', - 'ensorceling', - 'ensorcelled', - 'ensorcelling', - 'ensorcellment', - 'ensorcellments', - 'ensorcells', - 'ensphering', - 'enswathing', - 'entablature', - 'entablatures', - 'entailment', - 'entailments', - 'entamoebae', - 'entamoebas', - 'entanglement', - 'entanglements', - 'entanglers', - 'entangling', - 'entelechies', - 'entelluses', - 'enteritides', - 'enteritises', - 'enterobacteria', - 'enterobacterial', - 'enterobacterium', - 'enterobiases', - 'enterobiasis', - 'enterochromaffin', - 'enterococcal', - 'enterococci', - 'enterococcus', - 'enterocoel', - 'enterocoele', - 'enterocoeles', - 'enterocoelic', - 'enterocoelous', - 'enterocoels', - 'enterocolitis', - 'enterocolitises', - 'enterogastrone', - 'enterogastrones', - 'enterokinase', - 'enterokinases', - 'enteropathies', - 'enteropathogenic', - 'enteropathy', - 'enterostomal', - 'enterostomies', - 'enterostomy', - 'enterotoxin', - 'enterotoxins', - 'enteroviral', - 'enterovirus', - 'enteroviruses', - 'enterprise', - 'enterpriser', - 'enterprisers', - 'enterprises', - 'enterprising', - 'entertained', - 'entertainer', - 'entertainers', - 'entertaining', - 'entertainingly', - 'entertainment', - 'entertainments', - 'entertains', - 'enthalpies', - 'enthralled', - 'enthralling', - 'enthrallment', - 'enthrallments', - 'enthronement', - 'enthronements', - 'enthroning', - 'enthusiasm', - 'enthusiasms', - 'enthusiast', - 'enthusiastic', - 'enthusiastically', - 'enthusiasts', - 'enthymemes', - 'enticement', - 'enticements', - 'enticingly', - 'entireness', - 'entirenesses', - 'entireties', - 'entitlement', - 'entitlements', - 'entodermal', - 'entodermic', - 'entombment', - 'entombments', - 'entomofauna', - 'entomofaunae', - 'entomofaunas', - 'entomological', - 'entomologically', - 'entomologies', - 'entomologist', - 'entomologists', - 'entomology', - 'entomophagous', - 'entomophilies', - 'entomophilous', - 'entomophily', - 'entoprocts', - 'entourages', - 'entrainers', - 'entraining', - 'entrainment', - 'entrainments', - 'entrancement', - 'entrancements', - 'entranceway', - 'entranceways', - 'entrancing', - 'entrapment', - 'entrapments', - 'entrapping', - 'entreaties', - 'entreating', - 'entreatingly', - 'entreatment', - 'entreatments', - 'entrechats', - 'entrecotes', - 'entrenched', - 'entrenches', - 'entrenching', - 'entrenchment', - 'entrenchments', - 'entrepreneur', - 'entrepreneurial', - 'entrepreneurialism', - 'entrepreneurialisms', - 'entrepreneurially', - 'entrepreneurs', - 'entrepreneurship', - 'entrepreneurships', - 'entropically', - 'entropions', - 'entrusting', - 'entrustment', - 'entrustments', - 'entwisting', - 'enucleated', - 'enucleates', - 'enucleating', - 'enucleation', - 'enucleations', - 'enumerabilities', - 'enumerability', - 'enumerable', - 'enumerated', - 'enumerates', - 'enumerating', - 'enumeration', - 'enumerations', - 'enumerative', - 'enumerator', - 'enumerators', - 'enunciable', - 'enunciated', - 'enunciates', - 'enunciating', - 'enunciation', - 'enunciations', - 'enunciator', - 'enunciators', - 'enuresises', - 'enveloping', - 'envelopment', - 'envelopments', - 'envenoming', - 'envenomization', - 'envenomizations', - 'enviableness', - 'enviablenesses', - 'enviousness', - 'enviousnesses', - 'environing', - 'environment', - 'environmental', - 'environmentalism', - 'environmentalisms', - 'environmentalist', - 'environmentalists', - 'environmentally', - 'environments', - 'envisaging', - 'envisioned', - 'envisioning', - 'enwheeling', - 'enwrapping', - 'enwreathed', - 'enwreathes', - 'enwreathing', - 'enzymatically', - 'enzymically', - 'enzymologies', - 'enzymologist', - 'enzymologists', - 'enzymology', - 'eohippuses', - 'eosinophil', - 'eosinophilia', - 'eosinophilias', - 'eosinophilic', - 'eosinophils', - 'epauletted', - 'epaulettes', - 'epeirogenic', - 'epeirogenically', - 'epeirogenies', - 'epeirogeny', - 'epentheses', - 'epenthesis', - 'epenthetic', - 'epexegeses', - 'epexegesis', - 'epexegetic', - 'epexegetical', - 'epexegetically', - 'ephedrines', - 'ephemeralities', - 'ephemerality', - 'ephemerally', - 'ephemerals', - 'ephemerides', - 'ephemerids', - 'epiblastic', - 'epicalyces', - 'epicalyxes', - 'epicardial', - 'epicardium', - 'epicenisms', - 'epicenters', - 'epicentral', - 'epichlorohydrin', - 'epichlorohydrins', - 'epicontinental', - 'epicureanism', - 'epicureanisms', - 'epicureans', - 'epicurisms', - 'epicuticle', - 'epicuticles', - 'epicuticular', - 'epicycloid', - 'epicycloidal', - 'epicycloids', - 'epidemical', - 'epidemically', - 'epidemicities', - 'epidemicity', - 'epidemiologic', - 'epidemiological', - 'epidemiologically', - 'epidemiologies', - 'epidemiologist', - 'epidemiologists', - 'epidemiology', - 'epidendrum', - 'epidendrums', - 'epidermises', - 'epidermoid', - 'epidiascope', - 'epidiascopes', - 'epididymal', - 'epididymides', - 'epididymis', - 'epididymites', - 'epididymitides', - 'epididymitis', - 'epididymitises', - 'epigastric', - 'epigeneses', - 'epigenesis', - 'epigenetic', - 'epigenetically', - 'epiglottal', - 'epiglottic', - 'epiglottides', - 'epiglottis', - 'epiglottises', - 'epigonisms', - 'epigrammatic', - 'epigrammatically', - 'epigrammatism', - 'epigrammatisms', - 'epigrammatist', - 'epigrammatists', - 'epigrammatize', - 'epigrammatized', - 'epigrammatizer', - 'epigrammatizers', - 'epigrammatizes', - 'epigrammatizing', - 'epigrapher', - 'epigraphers', - 'epigraphic', - 'epigraphical', - 'epigraphically', - 'epigraphies', - 'epigraphist', - 'epigraphists', - 'epilations', - 'epilepsies', - 'epileptically', - 'epileptics', - 'epileptiform', - 'epileptogenic', - 'epileptoid', - 'epilimnion', - 'epilimnions', - 'epiloguing', - 'epimerases', - 'epinasties', - 'epinephrin', - 'epinephrine', - 'epinephrines', - 'epinephrins', - 'epineurium', - 'epineuriums', - 'epipelagic', - 'epiphanies', - 'epiphanous', - 'epiphenomena', - 'epiphenomenal', - 'epiphenomenalism', - 'epiphenomenalisms', - 'epiphenomenally', - 'epiphenomenon', - 'epiphragms', - 'epiphyseal', - 'epiphysial', - 'epiphytically', - 'epiphytism', - 'epiphytisms', - 'epiphytologies', - 'epiphytology', - 'epiphytotic', - 'epiphytotics', - 'episcopacies', - 'episcopacy', - 'episcopally', - 'episcopate', - 'episcopates', - 'episiotomies', - 'episiotomy', - 'episodical', - 'episodically', - 'episomally', - 'epistasies', - 'epistemically', - 'epistemological', - 'epistemologically', - 'epistemologies', - 'epistemologist', - 'epistemologists', - 'epistemology', - 'epistolaries', - 'epistolary', - 'epistolers', - 'epistrophe', - 'epistrophes', - 'epitaphial', - 'epitaxially', - 'epithalamia', - 'epithalamic', - 'epithalamion', - 'epithalamium', - 'epithalamiums', - 'epithelial', - 'epithelialization', - 'epithelializations', - 'epithelialize', - 'epithelialized', - 'epithelializes', - 'epithelializing', - 'epithelioid', - 'epithelioma', - 'epitheliomas', - 'epitheliomata', - 'epitheliomatous', - 'epithelium', - 'epitheliums', - 'epithelization', - 'epithelizations', - 'epithelize', - 'epithelized', - 'epithelizes', - 'epithelizing', - 'epithetical', - 'epitomical', - 'epitomised', - 'epitomises', - 'epitomising', - 'epitomized', - 'epitomizes', - 'epitomizing', - 'epizootics', - 'epizooties', - 'epizootiologic', - 'epizootiological', - 'epizootiologies', - 'epizootiology', - 'epoxidation', - 'epoxidations', - 'epoxidized', - 'epoxidizes', - 'epoxidizing', - 'equabilities', - 'equability', - 'equableness', - 'equablenesses', - 'equalisers', - 'equalising', - 'equalitarian', - 'equalitarianism', - 'equalitarianisms', - 'equalitarians', - 'equalities', - 'equalization', - 'equalizations', - 'equalizers', - 'equalizing', - 'equanimities', - 'equanimity', - 'equational', - 'equationally', - 'equatorial', - 'equatorward', - 'equestrian', - 'equestrians', - 'equestrienne', - 'equestriennes', - 'equiangular', - 'equicaloric', - 'equidistant', - 'equidistantly', - 'equilateral', - 'equilibrant', - 'equilibrants', - 'equilibrate', - 'equilibrated', - 'equilibrates', - 'equilibrating', - 'equilibration', - 'equilibrations', - 'equilibrator', - 'equilibrators', - 'equilibratory', - 'equilibria', - 'equilibrist', - 'equilibristic', - 'equilibrists', - 'equilibrium', - 'equilibriums', - 'equinities', - 'equinoctial', - 'equinoctials', - 'equipments', - 'equipoised', - 'equipoises', - 'equipoising', - 'equipollence', - 'equipollences', - 'equipollent', - 'equipollently', - 'equipollents', - 'equiponderant', - 'equipotential', - 'equiprobable', - 'equisetums', - 'equitabilities', - 'equitability', - 'equitableness', - 'equitablenesses', - 'equitation', - 'equitations', - 'equivalence', - 'equivalences', - 'equivalencies', - 'equivalency', - 'equivalent', - 'equivalently', - 'equivalents', - 'equivocalities', - 'equivocality', - 'equivocally', - 'equivocalness', - 'equivocalnesses', - 'equivocate', - 'equivocated', - 'equivocates', - 'equivocating', - 'equivocation', - 'equivocations', - 'equivocator', - 'equivocators', - 'equivoques', - 'eradiating', - 'eradicable', - 'eradicated', - 'eradicates', - 'eradicating', - 'eradication', - 'eradications', - 'eradicator', - 'eradicators', - 'erasabilities', - 'erasability', - 'erectilities', - 'erectility', - 'erectnesses', - 'eremitical', - 'eremitisms', - 'ergastoplasm', - 'ergastoplasmic', - 'ergastoplasms', - 'ergodicities', - 'ergodicity', - 'ergographs', - 'ergometers', - 'ergometric', - 'ergonomically', - 'ergonomics', - 'ergonomist', - 'ergonomists', - 'ergonovine', - 'ergonovines', - 'ergosterol', - 'ergosterols', - 'ergotamine', - 'ergotamines', - 'ericaceous', - 'eriophyids', - 'eristically', - 'erodibilities', - 'erodibility', - 'erosionally', - 'erosiveness', - 'erosivenesses', - 'erosivities', - 'erotically', - 'eroticisms', - 'eroticists', - 'eroticization', - 'eroticizations', - 'eroticized', - 'eroticizes', - 'eroticizing', - 'erotization', - 'erotizations', - 'erotogenic', - 'errantries', - 'erratically', - 'erraticism', - 'erraticisms', - 'erroneously', - 'erroneousness', - 'erroneousnesses', - 'eructating', - 'eructation', - 'eructations', - 'eruditions', - 'eruptively', - 'erysipelas', - 'erysipelases', - 'erythematous', - 'erythorbate', - 'erythorbates', - 'erythremia', - 'erythremias', - 'erythrismal', - 'erythrisms', - 'erythristic', - 'erythrites', - 'erythroblast', - 'erythroblastic', - 'erythroblastoses', - 'erythroblastosis', - 'erythroblasts', - 'erythrocyte', - 'erythrocytes', - 'erythrocytic', - 'erythromycin', - 'erythromycins', - 'erythropoieses', - 'erythropoiesis', - 'erythropoietic', - 'erythropoietin', - 'erythropoietins', - 'erythrosin', - 'erythrosine', - 'erythrosines', - 'erythrosins', - 'escadrille', - 'escadrilles', - 'escaladers', - 'escalading', - 'escalating', - 'escalation', - 'escalations', - 'escalators', - 'escalatory', - 'escalloped', - 'escalloping', - 'escaloping', - 'escapement', - 'escapements', - 'escapologies', - 'escapologist', - 'escapologists', - 'escapology', - 'escarpment', - 'escarpments', - 'escharotic', - 'escharotics', - 'eschatological', - 'eschatologically', - 'eschatologies', - 'eschatology', - 'escheatable', - 'escheating', - 'escritoire', - 'escritoires', - 'escutcheon', - 'escutcheons', - 'esemplastic', - 'esophageal', - 'esoterically', - 'esotericism', - 'esotericisms', - 'espadrille', - 'espadrilles', - 'espaliered', - 'espaliering', - 'especially', - 'esperances', - 'espieglerie', - 'espiegleries', - 'espionages', - 'esplanades', - 'essayistic', - 'essentialism', - 'essentialisms', - 'essentialist', - 'essentialists', - 'essentialities', - 'essentiality', - 'essentialize', - 'essentialized', - 'essentializes', - 'essentializing', - 'essentially', - 'essentialness', - 'essentialnesses', - 'essentials', - 'establishable', - 'established', - 'establisher', - 'establishers', - 'establishes', - 'establishing', - 'establishment', - 'establishmentarian', - 'establishmentarianism', - 'establishmentarianisms', - 'establishmentarians', - 'establishments', - 'estaminets', - 'esterification', - 'esterifications', - 'esterified', - 'esterifies', - 'esterifying', - 'esthesises', - 'esthetician', - 'estheticians', - 'estheticism', - 'estheticisms', - 'estimableness', - 'estimablenesses', - 'estimating', - 'estimation', - 'estimations', - 'estimative', - 'estimators', - 'estivating', - 'estivation', - 'estivations', - 'estradiols', - 'estrangement', - 'estrangements', - 'estrangers', - 'estranging', - 'estreating', - 'estrogenic', - 'estrogenically', - 'esuriences', - 'esuriently', - 'eternalize', - 'eternalized', - 'eternalizes', - 'eternalizing', - 'eternalness', - 'eternalnesses', - 'eternising', - 'eternities', - 'eternization', - 'eternizations', - 'eternizing', - 'ethambutol', - 'ethambutols', - 'ethanolamine', - 'ethanolamines', - 'etherealities', - 'ethereality', - 'etherealization', - 'etherealizations', - 'etherealize', - 'etherealized', - 'etherealizes', - 'etherealizing', - 'ethereally', - 'etherealness', - 'etherealnesses', - 'etherified', - 'etherifies', - 'etherifying', - 'etherization', - 'etherizations', - 'etherizers', - 'etherizing', - 'ethicalities', - 'ethicality', - 'ethicalness', - 'ethicalnesses', - 'ethicizing', - 'ethionamide', - 'ethionamides', - 'ethionines', - 'ethnically', - 'ethnicities', - 'ethnobotanical', - 'ethnobotanies', - 'ethnobotanist', - 'ethnobotanists', - 'ethnobotany', - 'ethnocentric', - 'ethnocentricities', - 'ethnocentricity', - 'ethnocentrism', - 'ethnocentrisms', - 'ethnographer', - 'ethnographers', - 'ethnographic', - 'ethnographical', - 'ethnographically', - 'ethnographies', - 'ethnography', - 'ethnohistorian', - 'ethnohistorians', - 'ethnohistoric', - 'ethnohistorical', - 'ethnohistories', - 'ethnohistory', - 'ethnologic', - 'ethnological', - 'ethnologies', - 'ethnologist', - 'ethnologists', - 'ethnomethodologies', - 'ethnomethodologist', - 'ethnomethodologists', - 'ethnomethodology', - 'ethnomusicological', - 'ethnomusicologies', - 'ethnomusicologist', - 'ethnomusicologists', - 'ethnomusicology', - 'ethnoscience', - 'ethnosciences', - 'ethological', - 'ethologies', - 'ethologist', - 'ethologists', - 'ethylating', - 'ethylbenzene', - 'ethylbenzenes', - 'ethylenediaminetetraacetate', - 'ethylenediaminetetraacetates', - 'etiolating', - 'etiolation', - 'etiolations', - 'etiological', - 'etiologically', - 'etiologies', - 'etiquettes', - 'etymological', - 'etymologically', - 'etymologies', - 'etymologise', - 'etymologised', - 'etymologises', - 'etymologising', - 'etymologist', - 'etymologists', - 'etymologize', - 'etymologized', - 'etymologizes', - 'etymologizing', - 'eucalyptol', - 'eucalyptole', - 'eucalyptoles', - 'eucalyptols', - 'eucalyptus', - 'eucalyptuses', - 'eucaryotes', - 'eucharises', - 'eucharistic', - 'euchromatic', - 'euchromatin', - 'euchromatins', - 'eudaemonism', - 'eudaemonisms', - 'eudaemonist', - 'eudaemonistic', - 'eudaemonists', - 'eudaimonism', - 'eudaimonisms', - 'eudiometer', - 'eudiometers', - 'eudiometric', - 'eudiometrically', - 'eugenically', - 'eugenicist', - 'eugenicists', - 'eugeosynclinal', - 'eugeosyncline', - 'eugeosynclines', - 'euglenoids', - 'euglobulin', - 'euglobulins', - 'euhemerism', - 'euhemerisms', - 'euhemerist', - 'euhemeristic', - 'euhemerists', - 'eukaryotes', - 'eukaryotic', - 'eulogising', - 'eulogistic', - 'eulogistically', - 'eulogizers', - 'eulogizing', - 'eunuchisms', - 'eunuchoids', - 'euonymuses', - 'eupatridae', - 'euphausiid', - 'euphausiids', - 'euphemised', - 'euphemises', - 'euphemising', - 'euphemisms', - 'euphemistic', - 'euphemistically', - 'euphemists', - 'euphemized', - 'euphemizer', - 'euphemizers', - 'euphemizes', - 'euphemizing', - 'euphonically', - 'euphonious', - 'euphoniously', - 'euphoniousness', - 'euphoniousnesses', - 'euphoniums', - 'euphorbias', - 'euphoriant', - 'euphoriants', - 'euphorically', - 'euphrasies', - 'euphuistic', - 'euphuistically', - 'euploidies', - 'eurhythmic', - 'eurhythmics', - 'eurhythmies', - 'eurybathic', - 'euryhaline', - 'eurypterid', - 'eurypterids', - 'eurythermal', - 'eurythermic', - 'eurythermous', - 'eurythmics', - 'eurythmies', - 'eutectoids', - 'euthanasia', - 'euthanasias', - 'euthanasic', - 'euthanatize', - 'euthanatized', - 'euthanatizes', - 'euthanatizing', - 'euthanized', - 'euthanizes', - 'euthanizing', - 'euthenists', - 'eutherians', - 'eutrophication', - 'eutrophications', - 'eutrophies', - 'evacuating', - 'evacuation', - 'evacuations', - 'evacuative', - 'evagination', - 'evaginations', - 'evaluating', - 'evaluation', - 'evaluations', - 'evaluative', - 'evaluators', - 'evanescence', - 'evanescences', - 'evanescent', - 'evanescing', - 'evangelical', - 'evangelically', - 'evangelism', - 'evangelisms', - 'evangelist', - 'evangelistic', - 'evangelistically', - 'evangelists', - 'evangelization', - 'evangelizations', - 'evangelize', - 'evangelized', - 'evangelizes', - 'evangelizing', - 'evanishing', - 'evaporated', - 'evaporates', - 'evaporating', - 'evaporation', - 'evaporations', - 'evaporative', - 'evaporator', - 'evaporators', - 'evaporites', - 'evaporitic', - 'evapotranspiration', - 'evapotranspirations', - 'evasiveness', - 'evasivenesses', - 'evenhanded', - 'evenhandedly', - 'evenhandedness', - 'evenhandednesses', - 'evennesses', - 'eventfully', - 'eventfulness', - 'eventfulnesses', - 'eventualities', - 'eventuality', - 'eventually', - 'eventuated', - 'eventuates', - 'eventuating', - 'everblooming', - 'everduring', - 'everglades', - 'evergreens', - 'everlasting', - 'everlastingly', - 'everlastingness', - 'everlastingnesses', - 'everlastings', - 'everydayness', - 'everydaynesses', - 'everyplace', - 'everything', - 'everywhere', - 'everywoman', - 'everywomen', - 'evidencing', - 'evidential', - 'evidentially', - 'evidentiary', - 'evildoings', - 'evilnesses', - 'eviscerate', - 'eviscerated', - 'eviscerates', - 'eviscerating', - 'evisceration', - 'eviscerations', - 'evocations', - 'evocatively', - 'evocativeness', - 'evocativenesses', - 'evolutionarily', - 'evolutionary', - 'evolutionism', - 'evolutionisms', - 'evolutionist', - 'evolutionists', - 'evolutions', - 'evolvement', - 'evolvements', - 'evonymuses', - 'exacerbate', - 'exacerbated', - 'exacerbates', - 'exacerbating', - 'exacerbation', - 'exacerbations', - 'exactingly', - 'exactingness', - 'exactingnesses', - 'exactitude', - 'exactitudes', - 'exactnesses', - 'exaggerate', - 'exaggerated', - 'exaggeratedly', - 'exaggeratedness', - 'exaggeratednesses', - 'exaggerates', - 'exaggerating', - 'exaggeration', - 'exaggerations', - 'exaggerative', - 'exaggerator', - 'exaggerators', - 'exaggeratory', - 'exaltation', - 'exaltations', - 'examinable', - 'examinants', - 'examination', - 'examinational', - 'examinations', - 'exanthemas', - 'exanthemata', - 'exanthematic', - 'exanthematous', - 'exarchates', - 'exasperate', - 'exasperated', - 'exasperatedly', - 'exasperates', - 'exasperating', - 'exasperatingly', - 'exasperation', - 'exasperations', - 'excavating', - 'excavation', - 'excavational', - 'excavations', - 'excavators', - 'exceedingly', - 'excellence', - 'excellences', - 'excellencies', - 'excellency', - 'excellently', - 'excelsiors', - 'exceptionabilities', - 'exceptionability', - 'exceptionable', - 'exceptionably', - 'exceptional', - 'exceptionalism', - 'exceptionalisms', - 'exceptionalities', - 'exceptionality', - 'exceptionally', - 'exceptionalness', - 'exceptionalnesses', - 'exceptions', - 'excerpters', - 'excerpting', - 'excerption', - 'excerptions', - 'excerptors', - 'excessively', - 'excessiveness', - 'excessivenesses', - 'exchangeabilities', - 'exchangeability', - 'exchangeable', - 'exchangers', - 'exchanging', - 'exchequers', - 'excipients', - 'excisional', - 'excitabilities', - 'excitability', - 'excitableness', - 'excitablenesses', - 'excitation', - 'excitations', - 'excitative', - 'excitatory', - 'excitement', - 'excitements', - 'excitingly', - 'exclaimers', - 'exclaiming', - 'exclamation', - 'exclamations', - 'exclamatory', - 'excludabilities', - 'excludability', - 'excludable', - 'excludible', - 'exclusionary', - 'exclusionist', - 'exclusionists', - 'exclusions', - 'exclusively', - 'exclusiveness', - 'exclusivenesses', - 'exclusives', - 'exclusivism', - 'exclusivisms', - 'exclusivist', - 'exclusivists', - 'exclusivities', - 'exclusivity', - 'excogitate', - 'excogitated', - 'excogitates', - 'excogitating', - 'excogitation', - 'excogitations', - 'excogitative', - 'excommunicate', - 'excommunicated', - 'excommunicates', - 'excommunicating', - 'excommunication', - 'excommunications', - 'excommunicative', - 'excommunicator', - 'excommunicators', - 'excoriated', - 'excoriates', - 'excoriating', - 'excoriation', - 'excoriations', - 'excremental', - 'excrementitious', - 'excrements', - 'excrescence', - 'excrescences', - 'excrescencies', - 'excrescency', - 'excrescent', - 'excrescently', - 'excretions', - 'excruciate', - 'excruciated', - 'excruciates', - 'excruciating', - 'excruciatingly', - 'excruciation', - 'excruciations', - 'exculpated', - 'exculpates', - 'exculpating', - 'exculpation', - 'exculpations', - 'exculpatory', - 'excursionist', - 'excursionists', - 'excursions', - 'excursively', - 'excursiveness', - 'excursivenesses', - 'excursuses', - 'excusableness', - 'excusablenesses', - 'excusatory', - 'execrableness', - 'execrablenesses', - 'execrating', - 'execration', - 'execrations', - 'execrative', - 'execrators', - 'executable', - 'executables', - 'executants', - 'executioner', - 'executioners', - 'executions', - 'executives', - 'executorial', - 'executorship', - 'executorships', - 'executrices', - 'executrixes', - 'exegetical', - 'exegetists', - 'exemplarily', - 'exemplariness', - 'exemplarinesses', - 'exemplarities', - 'exemplarity', - 'exemplification', - 'exemplifications', - 'exemplified', - 'exemplifies', - 'exemplifying', - 'exemptions', - 'exenterate', - 'exenterated', - 'exenterates', - 'exenterating', - 'exenteration', - 'exenterations', - 'exercisable', - 'exercisers', - 'exercising', - 'exercitation', - 'exercitations', - 'exfoliated', - 'exfoliates', - 'exfoliating', - 'exfoliation', - 'exfoliations', - 'exfoliative', - 'exhalation', - 'exhalations', - 'exhausters', - 'exhaustibilities', - 'exhaustibility', - 'exhaustible', - 'exhausting', - 'exhaustion', - 'exhaustions', - 'exhaustive', - 'exhaustively', - 'exhaustiveness', - 'exhaustivenesses', - 'exhaustivities', - 'exhaustivity', - 'exhaustless', - 'exhaustlessly', - 'exhaustlessness', - 'exhaustlessnesses', - 'exhibiting', - 'exhibition', - 'exhibitioner', - 'exhibitioners', - 'exhibitionism', - 'exhibitionisms', - 'exhibitionist', - 'exhibitionistic', - 'exhibitionistically', - 'exhibitionists', - 'exhibitions', - 'exhibitive', - 'exhibitors', - 'exhibitory', - 'exhilarate', - 'exhilarated', - 'exhilarates', - 'exhilarating', - 'exhilaratingly', - 'exhilaration', - 'exhilarations', - 'exhilarative', - 'exhortation', - 'exhortations', - 'exhortative', - 'exhortatory', - 'exhumation', - 'exhumations', - 'exigencies', - 'exiguities', - 'exiguously', - 'exiguousness', - 'exiguousnesses', - 'existences', - 'existential', - 'existentialism', - 'existentialisms', - 'existentialist', - 'existentialistic', - 'existentialistically', - 'existentialists', - 'existentially', - 'exobiological', - 'exobiologies', - 'exobiologist', - 'exobiologists', - 'exobiology', - 'exocytoses', - 'exocytosis', - 'exocytotic', - 'exodermises', - 'exodontias', - 'exodontist', - 'exodontists', - 'exoenzymes', - 'exoerythrocytic', - 'exogenously', - 'exonerated', - 'exonerates', - 'exonerating', - 'exoneration', - 'exonerations', - 'exonerative', - 'exonuclease', - 'exonucleases', - 'exopeptidase', - 'exopeptidases', - 'exophthalmic', - 'exophthalmos', - 'exophthalmoses', - 'exophthalmus', - 'exophthalmuses', - 'exorbitance', - 'exorbitances', - 'exorbitant', - 'exorbitantly', - 'exorcisers', - 'exorcising', - 'exorcistic', - 'exorcistical', - 'exorcizing', - 'exoskeletal', - 'exoskeleton', - 'exoskeletons', - 'exospheres', - 'exospheric', - 'exoterically', - 'exothermal', - 'exothermally', - 'exothermic', - 'exothermically', - 'exothermicities', - 'exothermicity', - 'exotically', - 'exoticisms', - 'exoticness', - 'exoticnesses', - 'expandabilities', - 'expandability', - 'expandable', - 'expansibilities', - 'expansibility', - 'expansible', - 'expansional', - 'expansionary', - 'expansionism', - 'expansionisms', - 'expansionist', - 'expansionistic', - 'expansionists', - 'expansions', - 'expansively', - 'expansiveness', - 'expansivenesses', - 'expansivities', - 'expansivity', - 'expatiated', - 'expatiates', - 'expatiating', - 'expatiation', - 'expatiations', - 'expatriate', - 'expatriated', - 'expatriates', - 'expatriating', - 'expatriation', - 'expatriations', - 'expatriatism', - 'expatriatisms', - 'expectable', - 'expectably', - 'expectance', - 'expectances', - 'expectancies', - 'expectancy', - 'expectantly', - 'expectants', - 'expectation', - 'expectational', - 'expectations', - 'expectative', - 'expectedly', - 'expectedness', - 'expectednesses', - 'expectorant', - 'expectorants', - 'expectorate', - 'expectorated', - 'expectorates', - 'expectorating', - 'expectoration', - 'expectorations', - 'expedience', - 'expediences', - 'expediencies', - 'expediency', - 'expediential', - 'expediently', - 'expedients', - 'expediters', - 'expediting', - 'expedition', - 'expeditionary', - 'expeditions', - 'expeditious', - 'expeditiously', - 'expeditiousness', - 'expeditiousnesses', - 'expeditors', - 'expellable', - 'expendabilities', - 'expendability', - 'expendable', - 'expendables', - 'expenditure', - 'expenditures', - 'expensively', - 'expensiveness', - 'expensivenesses', - 'experience', - 'experienced', - 'experiences', - 'experiencing', - 'experiential', - 'experientially', - 'experiment', - 'experimental', - 'experimentalism', - 'experimentalisms', - 'experimentalist', - 'experimentalists', - 'experimentally', - 'experimentation', - 'experimentations', - 'experimented', - 'experimenter', - 'experimenters', - 'experimenting', - 'experiments', - 'expertises', - 'expertisms', - 'expertized', - 'expertizes', - 'expertizing', - 'expertness', - 'expertnesses', - 'expiations', - 'expiration', - 'expirations', - 'expiratory', - 'explainable', - 'explainers', - 'explaining', - 'explanation', - 'explanations', - 'explanative', - 'explanatively', - 'explanatorily', - 'explanatory', - 'explantation', - 'explantations', - 'explanting', - 'expletives', - 'explicable', - 'explicably', - 'explicated', - 'explicates', - 'explicating', - 'explication', - 'explications', - 'explicative', - 'explicatively', - 'explicator', - 'explicators', - 'explicatory', - 'explicitly', - 'explicitness', - 'explicitnesses', - 'exploitable', - 'exploitation', - 'exploitations', - 'exploitative', - 'exploitatively', - 'exploiters', - 'exploiting', - 'exploitive', - 'exploration', - 'explorational', - 'explorations', - 'explorative', - 'exploratively', - 'exploratory', - 'explosions', - 'explosively', - 'explosiveness', - 'explosivenesses', - 'explosives', - 'exponential', - 'exponentially', - 'exponentials', - 'exponentiation', - 'exponentiations', - 'exportabilities', - 'exportability', - 'exportable', - 'exportation', - 'exportations', - 'expositing', - 'exposition', - 'expositional', - 'expositions', - 'expositive', - 'expositors', - 'expository', - 'expostulate', - 'expostulated', - 'expostulates', - 'expostulating', - 'expostulation', - 'expostulations', - 'expostulatory', - 'expounders', - 'expounding', - 'expressage', - 'expressages', - 'expressers', - 'expressible', - 'expressing', - 'expression', - 'expressional', - 'expressionism', - 'expressionisms', - 'expressionist', - 'expressionistic', - 'expressionistically', - 'expressionists', - 'expressionless', - 'expressionlessly', - 'expressionlessness', - 'expressionlessnesses', - 'expressions', - 'expressive', - 'expressively', - 'expressiveness', - 'expressivenesses', - 'expressivities', - 'expressivity', - 'expressman', - 'expressmen', - 'expressway', - 'expressways', - 'expropriate', - 'expropriated', - 'expropriates', - 'expropriating', - 'expropriation', - 'expropriations', - 'expropriator', - 'expropriators', - 'expulsions', - 'expunction', - 'expunctions', - 'expurgated', - 'expurgates', - 'expurgating', - 'expurgation', - 'expurgations', - 'expurgator', - 'expurgatorial', - 'expurgators', - 'expurgatory', - 'exquisitely', - 'exquisiteness', - 'exquisitenesses', - 'exquisites', - 'exsanguinate', - 'exsanguinated', - 'exsanguinates', - 'exsanguinating', - 'exsanguination', - 'exsanguinations', - 'exscinding', - 'exsertions', - 'exsiccated', - 'exsiccates', - 'exsiccating', - 'exsiccation', - 'exsiccations', - 'exsolution', - 'exsolutions', - 'extemporal', - 'extemporally', - 'extemporaneities', - 'extemporaneity', - 'extemporaneous', - 'extemporaneously', - 'extemporaneousness', - 'extemporaneousnesses', - 'extemporarily', - 'extemporary', - 'extemporisation', - 'extemporisations', - 'extemporise', - 'extemporised', - 'extemporises', - 'extemporising', - 'extemporization', - 'extemporizations', - 'extemporize', - 'extemporized', - 'extemporizer', - 'extemporizers', - 'extemporizes', - 'extemporizing', - 'extendabilities', - 'extendability', - 'extendable', - 'extendedly', - 'extendedness', - 'extendednesses', - 'extendible', - 'extensibilities', - 'extensibility', - 'extensible', - 'extensional', - 'extensionalities', - 'extensionality', - 'extensionally', - 'extensions', - 'extensities', - 'extensively', - 'extensiveness', - 'extensivenesses', - 'extensometer', - 'extensometers', - 'extenuated', - 'extenuates', - 'extenuating', - 'extenuation', - 'extenuations', - 'extenuator', - 'extenuators', - 'extenuatory', - 'exteriorise', - 'exteriorised', - 'exteriorises', - 'exteriorising', - 'exteriorities', - 'exteriority', - 'exteriorization', - 'exteriorizations', - 'exteriorize', - 'exteriorized', - 'exteriorizes', - 'exteriorizing', - 'exteriorly', - 'exterminate', - 'exterminated', - 'exterminates', - 'exterminating', - 'extermination', - 'exterminations', - 'exterminator', - 'exterminators', - 'exterminatory', - 'extermined', - 'extermines', - 'extermining', - 'externalisation', - 'externalisations', - 'externalise', - 'externalised', - 'externalises', - 'externalising', - 'externalism', - 'externalisms', - 'externalities', - 'externality', - 'externalization', - 'externalizations', - 'externalize', - 'externalized', - 'externalizes', - 'externalizing', - 'externally', - 'externship', - 'externships', - 'exteroceptive', - 'exteroceptor', - 'exteroceptors', - 'exterritorial', - 'exterritorialities', - 'exterritoriality', - 'extincting', - 'extinction', - 'extinctions', - 'extinctive', - 'extinguish', - 'extinguishable', - 'extinguished', - 'extinguisher', - 'extinguishers', - 'extinguishes', - 'extinguishing', - 'extinguishment', - 'extinguishments', - 'extirpated', - 'extirpates', - 'extirpating', - 'extirpation', - 'extirpations', - 'extirpator', - 'extirpators', - 'extolments', - 'extortionary', - 'extortionate', - 'extortionately', - 'extortioner', - 'extortioners', - 'extortionist', - 'extortionists', - 'extortions', - 'extracellular', - 'extracellularly', - 'extrachromosomal', - 'extracorporeal', - 'extracorporeally', - 'extracranial', - 'extractabilities', - 'extractability', - 'extractable', - 'extracting', - 'extraction', - 'extractions', - 'extractive', - 'extractively', - 'extractives', - 'extractors', - 'extracurricular', - 'extracurriculars', - 'extraditable', - 'extradited', - 'extradites', - 'extraditing', - 'extradition', - 'extraditions', - 'extradoses', - 'extraembryonic', - 'extragalactic', - 'extrahepatic', - 'extrajudicial', - 'extrajudicially', - 'extralegal', - 'extralegally', - 'extralimital', - 'extralinguistic', - 'extralinguistically', - 'extraliterary', - 'extralities', - 'extralogical', - 'extramarital', - 'extramundane', - 'extramural', - 'extramurally', - 'extramusical', - 'extraneous', - 'extraneously', - 'extraneousness', - 'extraneousnesses', - 'extranuclear', - 'extraordinaire', - 'extraordinarily', - 'extraordinariness', - 'extraordinarinesses', - 'extraordinary', - 'extrapolate', - 'extrapolated', - 'extrapolates', - 'extrapolating', - 'extrapolation', - 'extrapolations', - 'extrapolative', - 'extrapolator', - 'extrapolators', - 'extrapyramidal', - 'extrasensory', - 'extrasystole', - 'extrasystoles', - 'extraterrestrial', - 'extraterrestrials', - 'extraterritorial', - 'extraterritorialities', - 'extraterritoriality', - 'extratextual', - 'extrauterine', - 'extravagance', - 'extravagances', - 'extravagancies', - 'extravagancy', - 'extravagant', - 'extravagantly', - 'extravaganza', - 'extravaganzas', - 'extravagate', - 'extravagated', - 'extravagates', - 'extravagating', - 'extravasate', - 'extravasated', - 'extravasates', - 'extravasating', - 'extravasation', - 'extravasations', - 'extravascular', - 'extravehicular', - 'extraversion', - 'extraversions', - 'extraverted', - 'extraverts', - 'extremeness', - 'extremenesses', - 'extremisms', - 'extremists', - 'extremities', - 'extricable', - 'extricated', - 'extricates', - 'extricating', - 'extrication', - 'extrications', - 'extrinsically', - 'extroversion', - 'extroversions', - 'extroverted', - 'extroverts', - 'extrudabilities', - 'extrudability', - 'extrudable', - 'extrusions', - 'extubating', - 'exuberance', - 'exuberances', - 'exuberantly', - 'exuberated', - 'exuberates', - 'exuberating', - 'exudations', - 'exultances', - 'exultancies', - 'exultantly', - 'exultation', - 'exultations', - 'exultingly', - 'exurbanite', - 'exurbanites', - 'exuviating', - 'exuviation', - 'exuviations', - 'eyeballing', - 'eyebrights', - 'eyednesses', - 'eyedropper', - 'eyedroppers', - 'eyeglasses', - 'eyeletting', - 'eyepoppers', - 'eyestrains', - 'eyestrings', - 'eyewitness', - 'eyewitnesses', - 'fabricants', - 'fabricated', - 'fabricates', - 'fabricating', - 'fabrication', - 'fabrications', - 'fabricator', - 'fabricators', - 'fabulistic', - 'fabulously', - 'fabulousness', - 'fabulousnesses', - 'facecloths', - 'facelessness', - 'facelessnesses', - 'faceplates', - 'facetiously', - 'facetiousness', - 'facetiousnesses', - 'facileness', - 'facilenesses', - 'facilitate', - 'facilitated', - 'facilitates', - 'facilitating', - 'facilitation', - 'facilitations', - 'facilitative', - 'facilitator', - 'facilitators', - 'facilitatory', - 'facilities', - 'facsimiles', - 'facticities', - 'factionalism', - 'factionalisms', - 'factionally', - 'factiously', - 'factiousness', - 'factiousnesses', - 'factitious', - 'factitiously', - 'factitiousness', - 'factitiousnesses', - 'factitively', - 'factorable', - 'factorages', - 'factorials', - 'factorization', - 'factorizations', - 'factorized', - 'factorizes', - 'factorizing', - 'factorship', - 'factorships', - 'factorylike', - 'factualism', - 'factualisms', - 'factualist', - 'factualists', - 'factualities', - 'factuality', - 'factualness', - 'factualnesses', - 'facultative', - 'facultatively', - 'faddishness', - 'faddishnesses', - 'faggotings', - 'faggotries', - 'fainthearted', - 'faintheartedly', - 'faintheartedness', - 'faintheartednesses', - 'faintishness', - 'faintishnesses', - 'faintnesses', - 'fairground', - 'fairgrounds', - 'fairleader', - 'fairleaders', - 'fairnesses', - 'fairylands', - 'faithfully', - 'faithfulness', - 'faithfulnesses', - 'faithlessly', - 'faithlessness', - 'faithlessnesses', - 'falconries', - 'faldstools', - 'fallacious', - 'fallaciously', - 'fallaciousness', - 'fallaciousnesses', - 'fallaleries', - 'fallfishes', - 'fallibilities', - 'fallibility', - 'fallowness', - 'fallownesses', - 'falsehoods', - 'falsenesses', - 'falseworks', - 'falsifiabilities', - 'falsifiability', - 'falsifiable', - 'falsification', - 'falsifications', - 'falsifiers', - 'falsifying', - 'falteringly', - 'familiarise', - 'familiarised', - 'familiarises', - 'familiarising', - 'familiarities', - 'familiarity', - 'familiarization', - 'familiarizations', - 'familiarize', - 'familiarized', - 'familiarizes', - 'familiarizing', - 'familiarly', - 'familiarness', - 'familiarnesses', - 'familistic', - 'famishment', - 'famishments', - 'famousness', - 'famousnesses', - 'fanatically', - 'fanaticalness', - 'fanaticalnesses', - 'fanaticism', - 'fanaticisms', - 'fanaticize', - 'fanaticized', - 'fanaticizes', - 'fanaticizing', - 'fancifully', - 'fancifulness', - 'fancifulnesses', - 'fancifying', - 'fancinesses', - 'fancyworks', - 'fanfaronade', - 'fanfaronades', - 'fanfolding', - 'fantabulous', - 'fantasised', - 'fantasises', - 'fantasising', - 'fantasists', - 'fantasized', - 'fantasizer', - 'fantasizers', - 'fantasizes', - 'fantasizing', - 'fantastical', - 'fantasticalities', - 'fantasticality', - 'fantastically', - 'fantasticalness', - 'fantasticalnesses', - 'fantasticate', - 'fantasticated', - 'fantasticates', - 'fantasticating', - 'fantastication', - 'fantastications', - 'fantastico', - 'fantasticoes', - 'fantastics', - 'fantasying', - 'fantasyland', - 'fantasylands', - 'fantoccini', - 'faradising', - 'faradizing', - 'farandoles', - 'farcicalities', - 'farcicality', - 'farcically', - 'farewelled', - 'farewelling', - 'farfetchedness', - 'farfetchednesses', - 'farinaceous', - 'farkleberries', - 'farkleberry', - 'farmerette', - 'farmerettes', - 'farmhouses', - 'farmsteads', - 'farmworker', - 'farmworkers', - 'farraginous', - 'farrieries', - 'farsighted', - 'farsightedly', - 'farsightedness', - 'farsightednesses', - 'farthermost', - 'farthingale', - 'farthingales', - 'fasciation', - 'fasciations', - 'fascicular', - 'fascicularly', - 'fasciculate', - 'fasciculated', - 'fasciculation', - 'fasciculations', - 'fascicules', - 'fasciculus', - 'fascinated', - 'fascinates', - 'fascinating', - 'fascinatingly', - 'fascination', - 'fascinations', - 'fascinator', - 'fascinators', - 'fascioliases', - 'fascioliasis', - 'fascistically', - 'fashionabilities', - 'fashionability', - 'fashionable', - 'fashionableness', - 'fashionablenesses', - 'fashionables', - 'fashionably', - 'fashioners', - 'fashioning', - 'fashionmonger', - 'fashionmongers', - 'fastballer', - 'fastballers', - 'fastenings', - 'fastidious', - 'fastidiously', - 'fastidiousness', - 'fastidiousnesses', - 'fastigiate', - 'fastnesses', - 'fatalistic', - 'fatalistically', - 'fatalities', - 'fatefulness', - 'fatefulnesses', - 'fatheadedly', - 'fatheadedness', - 'fatheadednesses', - 'fatherhood', - 'fatherhoods', - 'fatherland', - 'fatherlands', - 'fatherless', - 'fatherlike', - 'fatherliness', - 'fatherlinesses', - 'fathomable', - 'fathomless', - 'fathomlessly', - 'fathomlessness', - 'fathomlessnesses', - 'fatigabilities', - 'fatigability', - 'fatiguingly', - 'fatshedera', - 'fatshederas', - 'fattinesses', - 'fatuousness', - 'fatuousnesses', - 'faultfinder', - 'faultfinders', - 'faultfinding', - 'faultfindings', - 'faultiness', - 'faultinesses', - 'faultlessly', - 'faultlessness', - 'faultlessnesses', - 'faunistically', - 'favorableness', - 'favorablenesses', - 'favoritism', - 'favoritisms', - 'fearfuller', - 'fearfullest', - 'fearfulness', - 'fearfulnesses', - 'fearlessly', - 'fearlessness', - 'fearlessnesses', - 'fearsomely', - 'fearsomeness', - 'fearsomenesses', - 'feasibilities', - 'feasibility', - 'featherbed', - 'featherbedded', - 'featherbedding', - 'featherbeddings', - 'featherbeds', - 'featherbrain', - 'featherbrained', - 'featherbrains', - 'featheredge', - 'featheredged', - 'featheredges', - 'featheredging', - 'featherhead', - 'featherheaded', - 'featherheads', - 'featherier', - 'featheriest', - 'feathering', - 'featherings', - 'featherless', - 'featherlight', - 'featherstitch', - 'featherstitched', - 'featherstitches', - 'featherstitching', - 'featherweight', - 'featherweights', - 'featureless', - 'featurette', - 'featurettes', - 'febrifuges', - 'fecklessly', - 'fecklessness', - 'fecklessnesses', - 'feculences', - 'fecundated', - 'fecundates', - 'fecundating', - 'fecundation', - 'fecundations', - 'fecundities', - 'federacies', - 'federalese', - 'federaleses', - 'federalism', - 'federalisms', - 'federalist', - 'federalists', - 'federalization', - 'federalizations', - 'federalize', - 'federalized', - 'federalizes', - 'federalizing', - 'federating', - 'federation', - 'federations', - 'federative', - 'federatively', - 'feebleminded', - 'feeblemindedly', - 'feeblemindedness', - 'feeblemindednesses', - 'feebleness', - 'feeblenesses', - 'feedstocks', - 'feedstuffs', - 'feelingness', - 'feelingnesses', - 'feistiness', - 'feistinesses', - 'feldspathic', - 'felicitate', - 'felicitated', - 'felicitates', - 'felicitating', - 'felicitation', - 'felicitations', - 'felicitator', - 'felicitators', - 'felicities', - 'felicitous', - 'felicitously', - 'felicitousness', - 'felicitousnesses', - 'felinities', - 'fellations', - 'fellmonger', - 'fellmongered', - 'fellmongeries', - 'fellmongering', - 'fellmongerings', - 'fellmongers', - 'fellmongery', - 'fellnesses', - 'fellowship', - 'fellowshiped', - 'fellowshiping', - 'fellowshipped', - 'fellowshipping', - 'fellowships', - 'feloniously', - 'feloniousness', - 'feloniousnesses', - 'femaleness', - 'femalenesses', - 'feminacies', - 'femininely', - 'feminineness', - 'femininenesses', - 'femininities', - 'femininity', - 'feminising', - 'feministic', - 'feminities', - 'feminization', - 'feminizations', - 'feminizing', - 'femtosecond', - 'femtoseconds', - 'fencelessness', - 'fencelessnesses', - 'fenderless', - 'fenestrate', - 'fenestrated', - 'fenestration', - 'fenestrations', - 'fenugreeks', - 'feoffments', - 'feracities', - 'feretories', - 'fermentable', - 'fermentation', - 'fermentations', - 'fermentative', - 'fermenters', - 'fermenting', - 'fermentors', - 'ferociously', - 'ferociousness', - 'ferociousnesses', - 'ferocities', - 'ferredoxin', - 'ferredoxins', - 'ferrelling', - 'ferretings', - 'ferricyanide', - 'ferricyanides', - 'ferriferous', - 'ferrimagnet', - 'ferrimagnetic', - 'ferrimagnetically', - 'ferrimagnetism', - 'ferrimagnetisms', - 'ferrimagnets', - 'ferrocenes', - 'ferroconcrete', - 'ferroconcretes', - 'ferrocyanide', - 'ferrocyanides', - 'ferroelectric', - 'ferroelectricities', - 'ferroelectricity', - 'ferroelectrics', - 'ferromagnesian', - 'ferromagnet', - 'ferromagnetic', - 'ferromagnetism', - 'ferromagnetisms', - 'ferromagnets', - 'ferromanganese', - 'ferromanganeses', - 'ferrosilicon', - 'ferrosilicons', - 'ferrotypes', - 'ferruginous', - 'ferryboats', - 'fertileness', - 'fertilenesses', - 'fertilities', - 'fertilizable', - 'fertilization', - 'fertilizations', - 'fertilized', - 'fertilizer', - 'fertilizers', - 'fertilizes', - 'fertilizing', - 'fervencies', - 'fervidness', - 'fervidnesses', - 'fescennine', - 'festinated', - 'festinately', - 'festinates', - 'festinating', - 'festivalgoer', - 'festivalgoers', - 'festiveness', - 'festivenesses', - 'festivities', - 'festooneries', - 'festoonery', - 'festooning', - 'fetchingly', - 'fetichisms', - 'fetidnesses', - 'fetishisms', - 'fetishistic', - 'fetishistically', - 'fetishists', - 'fetologies', - 'fetologist', - 'fetologists', - 'fetoprotein', - 'fetoproteins', - 'fetoscopes', - 'fetoscopies', - 'fettuccine', - 'fettuccini', - 'feudalisms', - 'feudalistic', - 'feudalists', - 'feudalities', - 'feudalization', - 'feudalizations', - 'feudalized', - 'feudalizes', - 'feudalizing', - 'feudatories', - 'feuilleton', - 'feuilletonism', - 'feuilletonisms', - 'feuilletonist', - 'feuilletonists', - 'feuilletons', - 'feverishly', - 'feverishness', - 'feverishnesses', - 'feverworts', - 'fianchetti', - 'fianchetto', - 'fianchettoed', - 'fianchettoing', - 'fianchettos', - 'fiberboard', - 'fiberboards', - 'fiberfills', - 'fiberglass', - 'fiberglassed', - 'fiberglasses', - 'fiberglassing', - 'fiberization', - 'fiberizations', - 'fiberizing', - 'fiberscope', - 'fiberscopes', - 'fibreboard', - 'fibreboards', - 'fibrefills', - 'fibreglass', - 'fibreglasses', - 'fibrillate', - 'fibrillated', - 'fibrillates', - 'fibrillating', - 'fibrillation', - 'fibrillations', - 'fibrinogen', - 'fibrinogens', - 'fibrinoids', - 'fibrinolyses', - 'fibrinolysin', - 'fibrinolysins', - 'fibrinolysis', - 'fibrinolytic', - 'fibrinopeptide', - 'fibrinopeptides', - 'fibroblast', - 'fibroblastic', - 'fibroblasts', - 'fibrocystic', - 'fibromatous', - 'fibronectin', - 'fibronectins', - 'fibrosarcoma', - 'fibrosarcomas', - 'fibrosarcomata', - 'fibrosites', - 'fibrositides', - 'fibrositis', - 'fibrositises', - 'fibrovascular', - 'fickleness', - 'ficklenesses', - 'fictionalise', - 'fictionalised', - 'fictionalises', - 'fictionalising', - 'fictionalities', - 'fictionality', - 'fictionalization', - 'fictionalizations', - 'fictionalize', - 'fictionalized', - 'fictionalizes', - 'fictionalizing', - 'fictionally', - 'fictioneer', - 'fictioneering', - 'fictioneerings', - 'fictioneers', - 'fictionist', - 'fictionists', - 'fictionization', - 'fictionizations', - 'fictionize', - 'fictionized', - 'fictionizes', - 'fictionizing', - 'fictitious', - 'fictitiously', - 'fictitiousness', - 'fictitiousnesses', - 'fictiveness', - 'fictivenesses', - 'fiddleback', - 'fiddlebacks', - 'fiddlehead', - 'fiddleheads', - 'fiddlestick', - 'fiddlesticks', - 'fidelities', - 'fidgetiness', - 'fidgetinesses', - 'fiducially', - 'fiduciaries', - 'fieldfares', - 'fieldpiece', - 'fieldpieces', - 'fieldstone', - 'fieldstones', - 'fieldstrip', - 'fieldstripped', - 'fieldstripping', - 'fieldstrips', - 'fieldstript', - 'fieldworks', - 'fiendishly', - 'fiendishness', - 'fiendishnesses', - 'fierceness', - 'fiercenesses', - 'fierinesses', - 'fifteenths', - 'figuration', - 'figurations', - 'figurative', - 'figuratively', - 'figurativeness', - 'figurativenesses', - 'figurehead', - 'figureheads', - 'filagreeing', - 'filamentary', - 'filamentous', - 'filariases', - 'filariasis', - 'filefishes', - 'filiations', - 'filibuster', - 'filibustered', - 'filibusterer', - 'filibusterers', - 'filibustering', - 'filibusters', - 'filigreeing', - 'filiopietistic', - 'filmically', - 'filminesses', - 'filmmakers', - 'filmmaking', - 'filmmakings', - 'filmographies', - 'filmography', - 'filmsetter', - 'filmsetters', - 'filmsetting', - 'filmsettings', - 'filmstrips', - 'filterabilities', - 'filterability', - 'filterable', - 'filthiness', - 'filthinesses', - 'filtrating', - 'filtration', - 'filtrations', - 'fimbriated', - 'fimbriation', - 'fimbriations', - 'finalising', - 'finalities', - 'finalization', - 'finalizations', - 'finalizing', - 'financially', - 'financiers', - 'financings', - 'finenesses', - 'fingerboard', - 'fingerboards', - 'fingerhold', - 'fingerholds', - 'fingerings', - 'fingerlike', - 'fingerling', - 'fingerlings', - 'fingernail', - 'fingernails', - 'fingerpick', - 'fingerpicked', - 'fingerpicking', - 'fingerpickings', - 'fingerpicks', - 'fingerpost', - 'fingerposts', - 'fingerprint', - 'fingerprinted', - 'fingerprinting', - 'fingerprintings', - 'fingerprints', - 'fingertips', - 'finicalness', - 'finicalnesses', - 'finickiest', - 'finickiness', - 'finickinesses', - 'finiteness', - 'finitenesses', - 'finnickier', - 'finnickiest', - 'fireballer', - 'fireballers', - 'fireballing', - 'firebombed', - 'firebombing', - 'firebrands', - 'firebreaks', - 'firebricks', - 'firecracker', - 'firecrackers', - 'firedrakes', - 'firefanged', - 'firefanging', - 'firefighter', - 'firefighters', - 'firefights', - 'fireguards', - 'firehouses', - 'firelights', - 'fireplaced', - 'fireplaces', - 'firepowers', - 'fireproofed', - 'fireproofing', - 'fireproofs', - 'firestones', - 'firestorms', - 'firethorns', - 'firewaters', - 'firmamental', - 'firmaments', - 'firmnesses', - 'firstborns', - 'firstfruits', - 'firstlings', - 'fishabilities', - 'fishability', - 'fisherfolk', - 'fisherwoman', - 'fisherwomen', - 'fishmonger', - 'fishmongers', - 'fishplates', - 'fishtailed', - 'fishtailing', - 'fissilities', - 'fissionabilities', - 'fissionability', - 'fissionable', - 'fissionables', - 'fissioning', - 'fissiparous', - 'fissiparousness', - 'fissiparousnesses', - 'fistfights', - 'fisticuffs', - 'fitfulness', - 'fitfulnesses', - 'fittingness', - 'fittingnesses', - 'fixednesses', - 'flabbergast', - 'flabbergasted', - 'flabbergasting', - 'flabbergastingly', - 'flabbergasts', - 'flabbiness', - 'flabbinesses', - 'flabellate', - 'flabelliform', - 'flaccidities', - 'flaccidity', - 'flackeries', - 'flagellant', - 'flagellantism', - 'flagellantisms', - 'flagellants', - 'flagellate', - 'flagellated', - 'flagellates', - 'flagellating', - 'flagellation', - 'flagellations', - 'flagellins', - 'flagellums', - 'flageolets', - 'flaggingly', - 'flagitious', - 'flagitiously', - 'flagitiousness', - 'flagitiousnesses', - 'flagrances', - 'flagrancies', - 'flagrantly', - 'flagstaffs', - 'flagstaves', - 'flagsticks', - 'flagstones', - 'flakinesses', - 'flamboyance', - 'flamboyances', - 'flamboyancies', - 'flamboyancy', - 'flamboyant', - 'flamboyantly', - 'flamboyants', - 'flameproof', - 'flameproofed', - 'flameproofer', - 'flameproofers', - 'flameproofing', - 'flameproofs', - 'flamethrower', - 'flamethrowers', - 'flamingoes', - 'flammabilities', - 'flammability', - 'flammables', - 'flannelette', - 'flannelettes', - 'flanneling', - 'flannelled', - 'flannelling', - 'flannelmouthed', - 'flapdoodle', - 'flapdoodles', - 'flashbacks', - 'flashboard', - 'flashboards', - 'flashbulbs', - 'flashcards', - 'flashcubes', - 'flashiness', - 'flashinesses', - 'flashlamps', - 'flashlight', - 'flashlights', - 'flashovers', - 'flashtubes', - 'flatfishes', - 'flatfooted', - 'flatfooting', - 'flatlander', - 'flatlanders', - 'flatnesses', - 'flatteners', - 'flattening', - 'flatterers', - 'flatteries', - 'flattering', - 'flatteringly', - 'flatulence', - 'flatulences', - 'flatulencies', - 'flatulency', - 'flatulently', - 'flatwashes', - 'flauntiest', - 'flauntingly', - 'flavanones', - 'flavonoids', - 'flavoprotein', - 'flavoproteins', - 'flavorfully', - 'flavorings', - 'flavorists', - 'flavorless', - 'flavorsome', - 'flavouring', - 'flawlessly', - 'flawlessness', - 'flawlessnesses', - 'fleahopper', - 'fleahoppers', - 'flechettes', - 'fledglings', - 'fleeringly', - 'fleetingly', - 'fleetingness', - 'fleetingnesses', - 'fleetnesses', - 'flemishing', - 'fleshiness', - 'fleshinesses', - 'fleshliest', - 'fleshments', - 'fletchings', - 'flexibilities', - 'flexibility', - 'flexitimes', - 'flexographic', - 'flexographically', - 'flexographies', - 'flexography', - 'flibbertigibbet', - 'flibbertigibbets', - 'flibbertigibbety', - 'flichtered', - 'flichtering', - 'flickering', - 'flickeringly', - 'flightiest', - 'flightiness', - 'flightinesses', - 'flightless', - 'flimflammed', - 'flimflammer', - 'flimflammeries', - 'flimflammers', - 'flimflammery', - 'flimflamming', - 'flimsiness', - 'flimsinesses', - 'flintiness', - 'flintinesses', - 'flintlocks', - 'flippancies', - 'flippantly', - 'flirtation', - 'flirtations', - 'flirtatious', - 'flirtatiously', - 'flirtatiousness', - 'flirtatiousnesses', - 'flittering', - 'floatation', - 'floatations', - 'floatplane', - 'floatplanes', - 'flocculant', - 'flocculants', - 'flocculate', - 'flocculated', - 'flocculates', - 'flocculating', - 'flocculation', - 'flocculations', - 'flocculator', - 'flocculators', - 'flocculent', - 'floodgates', - 'floodlight', - 'floodlighted', - 'floodlighting', - 'floodlights', - 'floodplain', - 'floodplains', - 'floodwater', - 'floodwaters', - 'floorboard', - 'floorboards', - 'floorcloth', - 'floorcloths', - 'floorwalker', - 'floorwalkers', - 'flophouses', - 'floppiness', - 'floppinesses', - 'florescence', - 'florescences', - 'florescent', - 'floriation', - 'floriations', - 'floribunda', - 'floribundas', - 'floricultural', - 'floriculture', - 'floricultures', - 'floriculturist', - 'floriculturists', - 'floridities', - 'floridness', - 'floridnesses', - 'floriferous', - 'floriferousness', - 'floriferousnesses', - 'florigenic', - 'florilegia', - 'florilegium', - 'floristically', - 'floristries', - 'flotations', - 'flounciest', - 'flouncings', - 'floundered', - 'floundering', - 'flourished', - 'flourisher', - 'flourishers', - 'flourishes', - 'flourishing', - 'flourishingly', - 'flowcharting', - 'flowchartings', - 'flowcharts', - 'flowerages', - 'flowerette', - 'flowerettes', - 'floweriest', - 'floweriness', - 'flowerinesses', - 'flowerless', - 'flowerlike', - 'flowerpots', - 'flowmeters', - 'flowstones', - 'fluctuated', - 'fluctuates', - 'fluctuating', - 'fluctuation', - 'fluctuational', - 'fluctuations', - 'fluegelhorn', - 'fluegelhorns', - 'fluffiness', - 'fluffinesses', - 'flugelhorn', - 'flugelhornist', - 'flugelhornists', - 'flugelhorns', - 'fluidextract', - 'fluidextracts', - 'fluidising', - 'fluidities', - 'fluidization', - 'fluidizations', - 'fluidizers', - 'fluidizing', - 'fluidnesses', - 'flummeries', - 'flummoxing', - 'fluoresced', - 'fluorescein', - 'fluoresceins', - 'fluorescence', - 'fluorescences', - 'fluorescent', - 'fluorescents', - 'fluorescer', - 'fluorescers', - 'fluoresces', - 'fluorescing', - 'fluoridate', - 'fluoridated', - 'fluoridates', - 'fluoridating', - 'fluoridation', - 'fluoridations', - 'fluorimeter', - 'fluorimeters', - 'fluorimetric', - 'fluorimetries', - 'fluorimetry', - 'fluorinate', - 'fluorinated', - 'fluorinates', - 'fluorinating', - 'fluorination', - 'fluorinations', - 'fluorocarbon', - 'fluorocarbons', - 'fluorochrome', - 'fluorochromes', - 'fluorographic', - 'fluorographies', - 'fluorography', - 'fluorometer', - 'fluorometers', - 'fluorometric', - 'fluorometries', - 'fluorometry', - 'fluoroscope', - 'fluoroscoped', - 'fluoroscopes', - 'fluoroscopic', - 'fluoroscopically', - 'fluoroscopies', - 'fluoroscoping', - 'fluoroscopist', - 'fluoroscopists', - 'fluoroscopy', - 'fluorouracil', - 'fluorouracils', - 'fluorspars', - 'fluphenazine', - 'fluphenazines', - 'flushnesses', - 'flusteredly', - 'flustering', - 'flutterboard', - 'flutterboards', - 'flutterers', - 'fluttering', - 'fluviatile', - 'flyblowing', - 'flybridges', - 'flycatcher', - 'flycatchers', - 'flyspecked', - 'flyspecking', - 'flyswatter', - 'flyswatters', - 'flyweights', - 'foamflower', - 'foamflowers', - 'foaminesses', - 'focalising', - 'focalization', - 'focalizations', - 'focalizing', - 'fogginesses', - 'foliaceous', - 'foliations', - 'folkishness', - 'folkishnesses', - 'folklorish', - 'folklorist', - 'folkloristic', - 'folklorists', - 'folksiness', - 'folksinesses', - 'folksinger', - 'folksingers', - 'folksinging', - 'folksingings', - 'follicular', - 'folliculites', - 'folliculitides', - 'folliculitis', - 'folliculitises', - 'followership', - 'followerships', - 'followings', - 'fomentation', - 'fomentations', - 'fondnesses', - 'fontanelle', - 'fontanelles', - 'foodlessness', - 'foodlessnesses', - 'foodstuffs', - 'foolfishes', - 'foolhardier', - 'foolhardiest', - 'foolhardily', - 'foolhardiness', - 'foolhardinesses', - 'foolishest', - 'foolishness', - 'foolishnesses', - 'footballer', - 'footballers', - 'footboards', - 'footbridge', - 'footbridges', - 'footcloths', - 'footdragger', - 'footdraggers', - 'footfaulted', - 'footfaulting', - 'footfaults', - 'footlambert', - 'footlamberts', - 'footlessly', - 'footlessness', - 'footlessnesses', - 'footlights', - 'footlocker', - 'footlockers', - 'footnoting', - 'footprints', - 'footslogged', - 'footslogger', - 'footsloggers', - 'footslogging', - 'footsoreness', - 'footsorenesses', - 'footstones', - 'footstools', - 'foppishness', - 'foppishnesses', - 'foraminifer', - 'foraminifera', - 'foraminiferal', - 'foraminiferan', - 'foraminiferans', - 'foraminifers', - 'foraminous', - 'forbearance', - 'forbearances', - 'forbearers', - 'forbearing', - 'forbiddance', - 'forbiddances', - 'forbidders', - 'forbidding', - 'forbiddingly', - 'forcefully', - 'forcefulness', - 'forcefulnesses', - 'forcemeats', - 'forcepslike', - 'forcibleness', - 'forciblenesses', - 'forearming', - 'foreboders', - 'forebodies', - 'foreboding', - 'forebodingly', - 'forebodingness', - 'forebodingnesses', - 'forebodings', - 'forebrains', - 'forecaddie', - 'forecaddies', - 'forecastable', - 'forecasted', - 'forecaster', - 'forecasters', - 'forecasting', - 'forecastle', - 'forecastles', - 'forechecked', - 'forechecker', - 'forecheckers', - 'forechecking', - 'forechecks', - 'foreclosed', - 'forecloses', - 'foreclosing', - 'foreclosure', - 'foreclosures', - 'forecourts', - 'foredating', - 'foredoomed', - 'foredooming', - 'forefather', - 'forefathers', - 'forefeeling', - 'forefended', - 'forefending', - 'forefinger', - 'forefingers', - 'forefronts', - 'foregather', - 'foregathered', - 'foregathering', - 'foregathers', - 'foreground', - 'foregrounded', - 'foregrounding', - 'foregrounds', - 'forehanded', - 'forehandedly', - 'forehandedness', - 'forehandednesses', - 'forehooves', - 'foreigners', - 'foreignism', - 'foreignisms', - 'foreignness', - 'foreignnesses', - 'forejudged', - 'forejudges', - 'forejudging', - 'foreknowing', - 'foreknowledge', - 'foreknowledges', - 'foreladies', - 'forelocked', - 'forelocking', - 'foremanship', - 'foremanships', - 'foremother', - 'foremothers', - 'forensically', - 'foreordain', - 'foreordained', - 'foreordaining', - 'foreordains', - 'foreordination', - 'foreordinations', - 'forepassed', - 'forequarter', - 'forequarters', - 'forereached', - 'forereaches', - 'forereaching', - 'forerunner', - 'forerunners', - 'forerunning', - 'foreseeabilities', - 'foreseeability', - 'foreseeable', - 'foreseeing', - 'foreshadow', - 'foreshadowed', - 'foreshadower', - 'foreshadowers', - 'foreshadowing', - 'foreshadows', - 'foreshanks', - 'foresheets', - 'foreshocks', - 'foreshores', - 'foreshorten', - 'foreshortened', - 'foreshortening', - 'foreshortens', - 'foreshowed', - 'foreshowing', - 'foresighted', - 'foresightedly', - 'foresightedness', - 'foresightednesses', - 'foresightful', - 'foresights', - 'forespeaking', - 'forespeaks', - 'forespoken', - 'forestages', - 'forestalled', - 'forestaller', - 'forestallers', - 'forestalling', - 'forestallment', - 'forestallments', - 'forestalls', - 'forestation', - 'forestations', - 'forestaysail', - 'forestaysails', - 'forestland', - 'forestlands', - 'forestries', - 'foreswearing', - 'foreswears', - 'foretasted', - 'foretastes', - 'foretasting', - 'foreteller', - 'foretellers', - 'foretelling', - 'forethought', - 'forethoughtful', - 'forethoughtfully', - 'forethoughtfulness', - 'forethoughtfulnesses', - 'forethoughts', - 'foretokened', - 'foretokening', - 'foretokens', - 'foretopman', - 'foretopmen', - 'forevermore', - 'foreverness', - 'forevernesses', - 'forewarned', - 'forewarning', - 'forfeitable', - 'forfeiters', - 'forfeiting', - 'forfeiture', - 'forfeitures', - 'forfending', - 'forgathered', - 'forgathering', - 'forgathers', - 'forgeabilities', - 'forgeability', - 'forgetfully', - 'forgetfulness', - 'forgetfulnesses', - 'forgettable', - 'forgetters', - 'forgetting', - 'forgivable', - 'forgivably', - 'forgiveness', - 'forgivenesses', - 'forgivingly', - 'forgivingness', - 'forgivingnesses', - 'forjudging', - 'forklifted', - 'forklifting', - 'forlornest', - 'forlornness', - 'forlornnesses', - 'formabilities', - 'formability', - 'formaldehyde', - 'formaldehydes', - 'formalised', - 'formalises', - 'formalising', - 'formalisms', - 'formalistic', - 'formalists', - 'formalities', - 'formalizable', - 'formalization', - 'formalizations', - 'formalized', - 'formalizer', - 'formalizers', - 'formalizes', - 'formalizing', - 'formalness', - 'formalnesses', - 'formamides', - 'formations', - 'formatively', - 'formatives', - 'formatters', - 'formatting', - 'formfitting', - 'formicaries', - 'formidabilities', - 'formidability', - 'formidable', - 'formidableness', - 'formidablenesses', - 'formidably', - 'formlessly', - 'formlessness', - 'formlessnesses', - 'formulaically', - 'formularies', - 'formularization', - 'formularizations', - 'formularize', - 'formularized', - 'formularizer', - 'formularizers', - 'formularizes', - 'formularizing', - 'formulated', - 'formulates', - 'formulating', - 'formulation', - 'formulations', - 'formulator', - 'formulators', - 'formulized', - 'formulizes', - 'formulizing', - 'fornicated', - 'fornicates', - 'fornicating', - 'fornication', - 'fornications', - 'fornicator', - 'fornicators', - 'forswearing', - 'forsythias', - 'fortalices', - 'fortepiano', - 'fortepianos', - 'forthcoming', - 'forthright', - 'forthrightly', - 'forthrightness', - 'forthrightnesses', - 'forthrights', - 'fortification', - 'fortifications', - 'fortifiers', - 'fortifying', - 'fortissimi', - 'fortissimo', - 'fortissimos', - 'fortitudes', - 'fortnightlies', - 'fortnightly', - 'fortnights', - 'fortressed', - 'fortresses', - 'fortressing', - 'fortresslike', - 'fortuities', - 'fortuitous', - 'fortuitously', - 'fortuitousness', - 'fortuitousnesses', - 'fortunately', - 'fortunateness', - 'fortunatenesses', - 'fortuneteller', - 'fortunetellers', - 'fortunetelling', - 'fortunetellings', - 'forwarders', - 'forwardest', - 'forwarding', - 'forwardness', - 'forwardnesses', - 'fossickers', - 'fossicking', - 'fossiliferous', - 'fossilised', - 'fossilises', - 'fossilising', - 'fossilization', - 'fossilizations', - 'fossilized', - 'fossilizes', - 'fossilizing', - 'fosterages', - 'fosterling', - 'fosterlings', - 'foulbroods', - 'foulmouthed', - 'foulnesses', - 'foundation', - 'foundational', - 'foundationally', - 'foundationless', - 'foundations', - 'foundering', - 'foundlings', - 'fountained', - 'fountainhead', - 'fountainheads', - 'fountaining', - 'fourdrinier', - 'fourdriniers', - 'fourplexes', - 'fourragere', - 'fourrageres', - 'foursquare', - 'fourteener', - 'fourteeners', - 'fourteenth', - 'fourteenths', - 'foxhunters', - 'foxhunting', - 'foxhuntings', - 'foxinesses', - 'foxtrotted', - 'foxtrotting', - 'fozinesses', - 'fractional', - 'fractionalization', - 'fractionalizations', - 'fractionalize', - 'fractionalized', - 'fractionalizes', - 'fractionalizing', - 'fractionally', - 'fractionate', - 'fractionated', - 'fractionates', - 'fractionating', - 'fractionation', - 'fractionations', - 'fractionator', - 'fractionators', - 'fractioned', - 'fractioning', - 'fractiously', - 'fractiousness', - 'fractiousnesses', - 'fracturing', - 'fragilities', - 'fragmental', - 'fragmentally', - 'fragmentarily', - 'fragmentariness', - 'fragmentarinesses', - 'fragmentary', - 'fragmentate', - 'fragmentated', - 'fragmentates', - 'fragmentating', - 'fragmentation', - 'fragmentations', - 'fragmented', - 'fragmenting', - 'fragmentize', - 'fragmentized', - 'fragmentizes', - 'fragmentizing', - 'fragrances', - 'fragrancies', - 'fragrantly', - 'frailnesses', - 'frambesias', - 'framboises', - 'frameshift', - 'frameshifts', - 'frameworks', - 'franchised', - 'franchisee', - 'franchisees', - 'franchiser', - 'franchisers', - 'franchises', - 'franchising', - 'franchisor', - 'franchisors', - 'francolins', - 'francophone', - 'frangibilities', - 'frangibility', - 'frangipane', - 'frangipanes', - 'frangipani', - 'frangipanis', - 'frangipanni', - 'frankfurter', - 'frankfurters', - 'frankfurts', - 'frankincense', - 'frankincenses', - 'franklinite', - 'franklinites', - 'franknesses', - 'frankpledge', - 'frankpledges', - 'frantically', - 'franticness', - 'franticnesses', - 'fraternalism', - 'fraternalisms', - 'fraternally', - 'fraternities', - 'fraternity', - 'fraternization', - 'fraternizations', - 'fraternize', - 'fraternized', - 'fraternizer', - 'fraternizers', - 'fraternizes', - 'fraternizing', - 'fratricidal', - 'fratricide', - 'fratricides', - 'fraudulence', - 'fraudulences', - 'fraudulent', - 'fraudulently', - 'fraudulentness', - 'fraudulentnesses', - 'fraughting', - 'fraxinella', - 'fraxinellas', - 'freakiness', - 'freakinesses', - 'freakishly', - 'freakishness', - 'freakishnesses', - 'freckliest', - 'freebasers', - 'freebasing', - 'freeboards', - 'freebooted', - 'freebooter', - 'freebooters', - 'freebooting', - 'freedwoman', - 'freedwomen', - 'freehanded', - 'freehandedly', - 'freehandedness', - 'freehandednesses', - 'freehearted', - 'freeheartedly', - 'freeholder', - 'freeholders', - 'freelanced', - 'freelancer', - 'freelancers', - 'freelances', - 'freelancing', - 'freeloaded', - 'freeloader', - 'freeloaders', - 'freeloading', - 'freemartin', - 'freemartins', - 'freemasonries', - 'freemasonry', - 'freenesses', - 'freestanding', - 'freestones', - 'freestyler', - 'freestylers', - 'freestyles', - 'freethinker', - 'freethinkers', - 'freethinking', - 'freethinkings', - 'freewheeled', - 'freewheeler', - 'freewheelers', - 'freewheeling', - 'freewheelingly', - 'freewheels', - 'freewriting', - 'freewritings', - 'freezingly', - 'freightage', - 'freightages', - 'freighters', - 'freighting', - 'fremituses', - 'frenchification', - 'frenchifications', - 'frenchified', - 'frenchifies', - 'frenchifying', - 'frenetically', - 'freneticism', - 'freneticisms', - 'frenziedly', - 'frequences', - 'frequencies', - 'frequentation', - 'frequentations', - 'frequentative', - 'frequentatives', - 'frequented', - 'frequenter', - 'frequenters', - 'frequentest', - 'frequenting', - 'frequently', - 'frequentness', - 'frequentnesses', - 'fresheners', - 'freshening', - 'freshnesses', - 'freshwater', - 'freshwaters', - 'fretfulness', - 'fretfulnesses', - 'friabilities', - 'friability', - 'fricandeau', - 'fricandeaus', - 'fricandeaux', - 'fricandoes', - 'fricasseed', - 'fricasseeing', - 'fricassees', - 'fricatives', - 'frictional', - 'frictionally', - 'frictionless', - 'frictionlessly', - 'friedcakes', - 'friendless', - 'friendlessness', - 'friendlessnesses', - 'friendlier', - 'friendlies', - 'friendliest', - 'friendlily', - 'friendliness', - 'friendlinesses', - 'friendship', - 'friendships', - 'friezelike', - 'frightened', - 'frightening', - 'frighteningly', - 'frightfully', - 'frightfulness', - 'frightfulnesses', - 'frigidities', - 'frigidness', - 'frigidnesses', - 'frigorific', - 'fripperies', - 'friskiness', - 'friskinesses', - 'fritillaria', - 'fritillarias', - 'fritillaries', - 'fritillary', - 'fritterers', - 'frittering', - 'frivolities', - 'frivollers', - 'frivolling', - 'frivolously', - 'frivolousness', - 'frivolousnesses', - 'frizziness', - 'frizzinesses', - 'frizzliest', - 'frogfishes', - 'froghopper', - 'froghoppers', - 'frolicking', - 'frolicsome', - 'fromenties', - 'frontalities', - 'frontality', - 'frontcourt', - 'frontcourts', - 'frontiersman', - 'frontiersmen', - 'frontispiece', - 'frontispieces', - 'frontogeneses', - 'frontogenesis', - 'frontolyses', - 'frontolysis', - 'frontrunner', - 'frontrunners', - 'frontwards', - 'frostbites', - 'frostbiting', - 'frostbitings', - 'frostbitten', - 'frostiness', - 'frostinesses', - 'frostworks', - 'frothiness', - 'frothinesses', - 'frowardness', - 'frowardnesses', - 'frowningly', - 'frowstiest', - 'frozenness', - 'frozennesses', - 'fructification', - 'fructifications', - 'fructified', - 'fructifies', - 'fructifying', - 'frugalities', - 'frugivores', - 'frugivorous', - 'fruitarian', - 'fruitarians', - 'fruitcakes', - 'fruiterers', - 'fruitfuller', - 'fruitfullest', - 'fruitfully', - 'fruitfulness', - 'fruitfulnesses', - 'fruitiness', - 'fruitinesses', - 'fruitlessly', - 'fruitlessness', - 'fruitlessnesses', - 'fruitwoods', - 'frumenties', - 'frustrated', - 'frustrates', - 'frustrating', - 'frustratingly', - 'frustration', - 'frustrations', - 'frutescent', - 'fucoxanthin', - 'fucoxanthins', - 'fugacities', - 'fugitively', - 'fugitiveness', - 'fugitivenesses', - 'fulfillers', - 'fulfilling', - 'fulfillment', - 'fulfillments', - 'fulgurated', - 'fulgurates', - 'fulgurating', - 'fulguration', - 'fulgurations', - 'fulgurites', - 'fuliginous', - 'fuliginously', - 'fullerenes', - 'fullmouthed', - 'fullnesses', - 'fulminated', - 'fulminates', - 'fulminating', - 'fulmination', - 'fulminations', - 'fulsomeness', - 'fulsomenesses', - 'fumatories', - 'fumblingly', - 'fumigating', - 'fumigation', - 'fumigations', - 'fumigators', - 'fumitories', - 'funambulism', - 'funambulisms', - 'funambulist', - 'funambulists', - 'functional', - 'functionalism', - 'functionalisms', - 'functionalist', - 'functionalistic', - 'functionalists', - 'functionalities', - 'functionality', - 'functionally', - 'functionaries', - 'functionary', - 'functioned', - 'functioning', - 'functionless', - 'fundamental', - 'fundamentalism', - 'fundamentalisms', - 'fundamentalist', - 'fundamentalistic', - 'fundamentalists', - 'fundamentally', - 'fundamentals', - 'fundaments', - 'fundraiser', - 'fundraisers', - 'fundraising', - 'fundraisings', - 'funereally', - 'fungibilities', - 'fungibility', - 'fungicidal', - 'fungicidally', - 'fungicides', - 'fungistatic', - 'funiculars', - 'funkinesses', - 'funnelform', - 'funnelling', - 'funninesses', - 'furanoside', - 'furanosides', - 'furazolidone', - 'furazolidones', - 'furbearers', - 'furbelowed', - 'furbelowing', - 'furbishers', - 'furbishing', - 'furcations', - 'furloughed', - 'furloughing', - 'furmenties', - 'furnishers', - 'furnishing', - 'furnishings', - 'furnitures', - 'furosemide', - 'furosemides', - 'furrieries', - 'furtherance', - 'furtherances', - 'furtherers', - 'furthering', - 'furthermore', - 'furthermost', - 'furtiveness', - 'furtivenesses', - 'furunculoses', - 'furunculosis', - 'fusibilities', - 'fusibility', - 'fusillades', - 'fusionists', - 'fussbudget', - 'fussbudgets', - 'fussbudgety', - 'fussinesses', - 'fustigated', - 'fustigates', - 'fustigating', - 'fustigation', - 'fustigations', - 'fustinesses', - 'fusulinids', - 'futileness', - 'futilenesses', - 'futilitarian', - 'futilitarianism', - 'futilitarianisms', - 'futilitarians', - 'futilities', - 'futureless', - 'futurelessness', - 'futurelessnesses', - 'futuristic', - 'futuristically', - 'futuristics', - 'futurities', - 'futurological', - 'futurologies', - 'futurologist', - 'futurologists', - 'futurology', - 'fuzzinesses', - 'gabardines', - 'gaberdines', - 'gadgeteers', - 'gadgetries', - 'gadolinite', - 'gadolinites', - 'gadolinium', - 'gadoliniums', - 'gadrooning', - 'gadroonings', - 'gadzookeries', - 'gadzookery', - 'gaillardia', - 'gaillardias', - 'gainfulness', - 'gainfulnesses', - 'gaingiving', - 'gaingivings', - 'gainsayers', - 'gainsaying', - 'galactorrhea', - 'galactorrheas', - 'galactosamine', - 'galactosamines', - 'galactosemia', - 'galactosemias', - 'galactosemic', - 'galactoses', - 'galactosidase', - 'galactosidases', - 'galactoside', - 'galactosides', - 'galactosyl', - 'galactosyls', - 'galantines', - 'galavanted', - 'galavanting', - 'galenicals', - 'galingales', - 'galivanted', - 'galivanting', - 'gallamines', - 'gallanting', - 'gallantries', - 'gallbladder', - 'gallbladders', - 'galleasses', - 'gallerygoer', - 'gallerygoers', - 'gallerying', - 'galleryite', - 'galleryites', - 'galliasses', - 'gallicisms', - 'gallicization', - 'gallicizations', - 'gallicized', - 'gallicizes', - 'gallicizing', - 'galligaskins', - 'gallimaufries', - 'gallimaufry', - 'gallinaceous', - 'gallinipper', - 'gallinippers', - 'gallinules', - 'gallivanted', - 'gallivanting', - 'gallivants', - 'gallonages', - 'gallopades', - 'gallowglass', - 'gallowglasses', - 'gallstones', - 'galumphing', - 'galvanically', - 'galvanised', - 'galvanises', - 'galvanising', - 'galvanisms', - 'galvanization', - 'galvanizations', - 'galvanized', - 'galvanizer', - 'galvanizers', - 'galvanizes', - 'galvanizing', - 'galvanometer', - 'galvanometers', - 'galvanometric', - 'galvanoscope', - 'galvanoscopes', - 'gambolling', - 'gamekeeper', - 'gamekeepers', - 'gamenesses', - 'gamesmanship', - 'gamesmanships', - 'gamesomely', - 'gamesomeness', - 'gamesomenesses', - 'gametangia', - 'gametangium', - 'gametically', - 'gametocyte', - 'gametocytes', - 'gametogeneses', - 'gametogenesis', - 'gametogenic', - 'gametogenous', - 'gametophore', - 'gametophores', - 'gametophyte', - 'gametophytes', - 'gametophytic', - 'gaminesses', - 'gamopetalous', - 'gangbanger', - 'gangbangers', - 'gangbuster', - 'gangbusters', - 'ganglionated', - 'ganglionic', - 'ganglioside', - 'gangliosides', - 'gangplanks', - 'gangrening', - 'gangrenous', - 'gangsterdom', - 'gangsterdoms', - 'gangsterish', - 'gangsterism', - 'gangsterisms', - 'gannisters', - 'gantelopes', - 'gantleting', - 'garbageman', - 'garbagemen', - 'gardenfuls', - 'garderobes', - 'gargantuan', - 'garibaldis', - 'garishness', - 'garishnesses', - 'garlanding', - 'garmenting', - 'garnetiferous', - 'garnierite', - 'garnierites', - 'garnisheed', - 'garnisheeing', - 'garnishees', - 'garnishing', - 'garnishment', - 'garnishments', - 'garnitures', - 'garrisoned', - 'garrisoning', - 'garrotting', - 'garrulities', - 'garrulously', - 'garrulousness', - 'garrulousnesses', - 'gasconaded', - 'gasconader', - 'gasconaders', - 'gasconades', - 'gasconading', - 'gaseousness', - 'gaseousnesses', - 'gasholders', - 'gasification', - 'gasifications', - 'gasometers', - 'gassinesses', - 'gastightness', - 'gastightnesses', - 'gastnesses', - 'gastrectomies', - 'gastrectomy', - 'gastritides', - 'gastrocnemii', - 'gastrocnemius', - 'gastroduodenal', - 'gastroenteritides', - 'gastroenteritis', - 'gastroenteritises', - 'gastroenterological', - 'gastroenterologies', - 'gastroenterologist', - 'gastroenterologists', - 'gastroenterology', - 'gastroesophageal', - 'gastrointestinal', - 'gastrolith', - 'gastroliths', - 'gastronome', - 'gastronomes', - 'gastronomic', - 'gastronomical', - 'gastronomically', - 'gastronomies', - 'gastronomist', - 'gastronomists', - 'gastronomy', - 'gastropods', - 'gastroscope', - 'gastroscopes', - 'gastroscopic', - 'gastroscopies', - 'gastroscopist', - 'gastroscopists', - 'gastroscopy', - 'gastrotrich', - 'gastrotrichs', - 'gastrovascular', - 'gastrulate', - 'gastrulated', - 'gastrulates', - 'gastrulating', - 'gastrulation', - 'gastrulations', - 'gatehouses', - 'gatekeeper', - 'gatekeepers', - 'gatekeeping', - 'gatherings', - 'gaucheness', - 'gauchenesses', - 'gaucheries', - 'gaudinesses', - 'gauffering', - 'gauntleted', - 'gauntleting', - 'gauntnesses', - 'gavelkinds', - 'gawkinesses', - 'gawkishness', - 'gawkishnesses', - 'gazehounds', - 'gazetteers', - 'geanticline', - 'geanticlines', - 'gearchange', - 'gearchanges', - 'gearshifts', - 'gearwheels', - 'gedankenexperiment', - 'gedankenexperiments', - 'gegenschein', - 'gegenscheins', - 'gelandesprung', - 'gelandesprungs', - 'gelatinization', - 'gelatinizations', - 'gelatinize', - 'gelatinized', - 'gelatinizes', - 'gelatinizing', - 'gelatinous', - 'gelatinously', - 'gelatinousness', - 'gelatinousnesses', - 'gelidities', - 'gelignites', - 'gelsemiums', - 'gemeinschaft', - 'gemeinschaften', - 'gemeinschafts', - 'geminating', - 'gemination', - 'geminations', - 'gemmations', - 'gemmologies', - 'gemmologist', - 'gemmologists', - 'gemological', - 'gemologies', - 'gemologist', - 'gemologists', - 'gemutlichkeit', - 'gemutlichkeits', - 'gendarmerie', - 'gendarmeries', - 'gendarmery', - 'genealogical', - 'genealogically', - 'genealogies', - 'genealogist', - 'genealogists', - 'generalisation', - 'generalisations', - 'generalise', - 'generalised', - 'generalises', - 'generalising', - 'generalissimo', - 'generalissimos', - 'generalist', - 'generalists', - 'generalities', - 'generality', - 'generalizabilities', - 'generalizability', - 'generalizable', - 'generalization', - 'generalizations', - 'generalize', - 'generalized', - 'generalizer', - 'generalizers', - 'generalizes', - 'generalizing', - 'generalship', - 'generalships', - 'generating', - 'generation', - 'generational', - 'generationally', - 'generations', - 'generative', - 'generators', - 'generatrices', - 'generatrix', - 'generically', - 'genericness', - 'genericnesses', - 'generosities', - 'generosity', - 'generously', - 'generousness', - 'generousnesses', - 'genetically', - 'geneticist', - 'geneticists', - 'genialities', - 'geniculate', - 'geniculated', - 'genitivally', - 'genitourinary', - 'genotypical', - 'genotypically', - 'gentamicin', - 'gentamicins', - 'genteelest', - 'genteelism', - 'genteelisms', - 'genteelness', - 'genteelnesses', - 'gentilesse', - 'gentilesses', - 'gentilities', - 'gentlefolk', - 'gentlefolks', - 'gentlemanlike', - 'gentlemanlikeness', - 'gentlemanlikenesses', - 'gentlemanliness', - 'gentlemanlinesses', - 'gentlemanly', - 'gentleness', - 'gentlenesses', - 'gentleperson', - 'gentlepersons', - 'gentlewoman', - 'gentlewomen', - 'gentrification', - 'gentrifications', - 'gentrified', - 'gentrifier', - 'gentrifiers', - 'gentrifies', - 'gentrifying', - 'genuflected', - 'genuflecting', - 'genuflection', - 'genuflections', - 'genuflects', - 'genuineness', - 'genuinenesses', - 'geobotanic', - 'geobotanical', - 'geobotanies', - 'geobotanist', - 'geobotanists', - 'geocentric', - 'geocentrically', - 'geochemical', - 'geochemically', - 'geochemist', - 'geochemistries', - 'geochemistry', - 'geochemists', - 'geochronologic', - 'geochronological', - 'geochronologically', - 'geochronologies', - 'geochronologist', - 'geochronologists', - 'geochronology', - 'geodesists', - 'geodetical', - 'geognosies', - 'geographer', - 'geographers', - 'geographic', - 'geographical', - 'geographically', - 'geographies', - 'geohydrologic', - 'geohydrologies', - 'geohydrologist', - 'geohydrologists', - 'geohydrology', - 'geological', - 'geologically', - 'geologists', - 'geologized', - 'geologizes', - 'geologizing', - 'geomagnetic', - 'geomagnetically', - 'geomagnetism', - 'geomagnetisms', - 'geomancers', - 'geomancies', - 'geometrical', - 'geometrically', - 'geometrician', - 'geometricians', - 'geometrics', - 'geometrids', - 'geometries', - 'geometrise', - 'geometrised', - 'geometrises', - 'geometrising', - 'geometrization', - 'geometrizations', - 'geometrize', - 'geometrized', - 'geometrizes', - 'geometrizing', - 'geomorphic', - 'geomorphological', - 'geomorphologies', - 'geomorphologist', - 'geomorphologists', - 'geomorphology', - 'geophagies', - 'geophysical', - 'geophysically', - 'geophysicist', - 'geophysicists', - 'geophysics', - 'geopolitical', - 'geopolitically', - 'geopolitician', - 'geopoliticians', - 'geopolitics', - 'geopressured', - 'georgettes', - 'geoscience', - 'geosciences', - 'geoscientist', - 'geoscientists', - 'geostationary', - 'geostrategic', - 'geostrategies', - 'geostrategist', - 'geostrategists', - 'geostrategy', - 'geostrophic', - 'geostrophically', - 'geosynchronous', - 'geosynclinal', - 'geosyncline', - 'geosynclines', - 'geotechnical', - 'geotectonic', - 'geotectonically', - 'geothermal', - 'geothermally', - 'geotropically', - 'geotropism', - 'geotropisms', - 'gerfalcons', - 'geriatrician', - 'geriatricians', - 'geriatrics', - 'germanders', - 'germaniums', - 'germanization', - 'germanizations', - 'germanized', - 'germanizes', - 'germanizing', - 'germicidal', - 'germicides', - 'germinabilities', - 'germinability', - 'germinally', - 'germinated', - 'germinates', - 'germinating', - 'germination', - 'germinations', - 'germinative', - 'gerontocracies', - 'gerontocracy', - 'gerontocrat', - 'gerontocratic', - 'gerontocrats', - 'gerontologic', - 'gerontological', - 'gerontologies', - 'gerontologist', - 'gerontologists', - 'gerontology', - 'gerontomorphic', - 'gerrymander', - 'gerrymandered', - 'gerrymandering', - 'gerrymanders', - 'gerundives', - 'gesellschaft', - 'gesellschaften', - 'gesellschafts', - 'gesneriads', - 'gestaltist', - 'gestaltists', - 'gestational', - 'gestations', - 'gesticulant', - 'gesticulate', - 'gesticulated', - 'gesticulates', - 'gesticulating', - 'gesticulation', - 'gesticulations', - 'gesticulative', - 'gesticulator', - 'gesticulators', - 'gesticulatory', - 'gesturally', - 'gesundheit', - 'gewurztraminer', - 'gewurztraminers', - 'geyserites', - 'ghastfully', - 'ghastliest', - 'ghastliness', - 'ghastlinesses', - 'ghettoization', - 'ghettoizations', - 'ghettoized', - 'ghettoizes', - 'ghettoizing', - 'ghostliest', - 'ghostliness', - 'ghostlinesses', - 'ghostwrite', - 'ghostwriter', - 'ghostwriters', - 'ghostwrites', - 'ghostwriting', - 'ghostwritten', - 'ghostwrote', - 'ghoulishly', - 'ghoulishness', - 'ghoulishnesses', - 'giantesses', - 'giardiases', - 'giardiasis', - 'gibberellin', - 'gibberellins', - 'gibberishes', - 'gibbetting', - 'gibbosities', - 'giddinesses', - 'giftedness', - 'giftednesses', - 'gigantesque', - 'gigantically', - 'gigantisms', - 'gigglingly', - 'gillnetted', - 'gillnetter', - 'gillnetters', - 'gillnetting', - 'gillyflower', - 'gillyflowers', - 'gimballing', - 'gimcrackeries', - 'gimcrackery', - 'gimmicking', - 'gimmickries', - 'gingellies', - 'gingerbread', - 'gingerbreaded', - 'gingerbreads', - 'gingerbready', - 'gingerliness', - 'gingerlinesses', - 'gingerroot', - 'gingerroots', - 'gingersnap', - 'gingersnaps', - 'gingivectomies', - 'gingivectomy', - 'gingivites', - 'gingivitides', - 'gingivitis', - 'gingivitises', - 'girandoles', - 'girlfriend', - 'girlfriends', - 'girlishness', - 'girlishnesses', - 'glabrescent', - 'glaciating', - 'glaciation', - 'glaciations', - 'glaciological', - 'glaciologies', - 'glaciologist', - 'glaciologists', - 'glaciology', - 'gladdening', - 'gladiatorial', - 'gladiators', - 'gladioluses', - 'gladnesses', - 'gladsomely', - 'gladsomeness', - 'gladsomenesses', - 'gladsomest', - 'gladstones', - 'glamorised', - 'glamorises', - 'glamorising', - 'glamorization', - 'glamorizations', - 'glamorized', - 'glamorizer', - 'glamorizers', - 'glamorizes', - 'glamorizing', - 'glamorously', - 'glamorousness', - 'glamorousnesses', - 'glamouring', - 'glamourize', - 'glamourized', - 'glamourizes', - 'glamourizing', - 'glamourless', - 'glamourous', - 'glancingly', - 'glandularly', - 'glaringness', - 'glaringnesses', - 'glassblower', - 'glassblowers', - 'glassblowing', - 'glassblowings', - 'glasshouse', - 'glasshouses', - 'glassiness', - 'glassinesses', - 'glassmaker', - 'glassmakers', - 'glassmaking', - 'glassmakings', - 'glasspaper', - 'glasspapered', - 'glasspapering', - 'glasspapers', - 'glasswares', - 'glassworker', - 'glassworkers', - 'glassworks', - 'glassworts', - 'glauconite', - 'glauconites', - 'glauconitic', - 'glaucousness', - 'glaucousnesses', - 'glazieries', - 'gleefulness', - 'gleefulnesses', - 'glegnesses', - 'gleization', - 'gleizations', - 'glengarries', - 'glibnesses', - 'glimmering', - 'glimmerings', - 'glioblastoma', - 'glioblastomas', - 'glioblastomata', - 'glissaders', - 'glissading', - 'glissandos', - 'glistening', - 'glistering', - 'glitterati', - 'glittering', - 'glitteringly', - 'gloatingly', - 'globalised', - 'globalises', - 'globalising', - 'globalisms', - 'globalists', - 'globalization', - 'globalizations', - 'globalized', - 'globalizes', - 'globalizing', - 'globefishes', - 'globeflower', - 'globeflowers', - 'glochidium', - 'glockenspiel', - 'glockenspiels', - 'glomerular', - 'glomerules', - 'glomerulonephritides', - 'glomerulonephritis', - 'glomerulus', - 'gloominess', - 'gloominesses', - 'glorification', - 'glorifications', - 'glorifiers', - 'glorifying', - 'gloriously', - 'gloriousness', - 'gloriousnesses', - 'glossarial', - 'glossaries', - 'glossarist', - 'glossarists', - 'glossators', - 'glossiness', - 'glossinesses', - 'glossitises', - 'glossographer', - 'glossographers', - 'glossolalia', - 'glossolalias', - 'glossolalist', - 'glossolalists', - 'glossopharyngeal', - 'glossopharyngeals', - 'glottochronological', - 'glottochronologies', - 'glottochronology', - 'glucocorticoid', - 'glucocorticoids', - 'glucokinase', - 'glucokinases', - 'gluconates', - 'gluconeogeneses', - 'gluconeogenesis', - 'glucosamine', - 'glucosamines', - 'glucosidase', - 'glucosidases', - 'glucosides', - 'glucosidic', - 'glucuronidase', - 'glucuronidases', - 'glucuronide', - 'glucuronides', - 'glumnesses', - 'glutamates', - 'glutaminase', - 'glutaminases', - 'glutamines', - 'glutaraldehyde', - 'glutaraldehydes', - 'glutathione', - 'glutathiones', - 'glutethimide', - 'glutethimides', - 'glutinously', - 'gluttonies', - 'gluttonous', - 'gluttonously', - 'gluttonousness', - 'gluttonousnesses', - 'glyceraldehyde', - 'glyceraldehydes', - 'glycerides', - 'glyceridic', - 'glycerinate', - 'glycerinated', - 'glycerinates', - 'glycerinating', - 'glycerines', - 'glycogeneses', - 'glycogenesis', - 'glycogenolyses', - 'glycogenolysis', - 'glycogenolytic', - 'glycolipid', - 'glycolipids', - 'glycolyses', - 'glycolysis', - 'glycolytic', - 'glycopeptide', - 'glycopeptides', - 'glycoprotein', - 'glycoproteins', - 'glycosaminoglycan', - 'glycosaminoglycans', - 'glycosidase', - 'glycosidases', - 'glycosides', - 'glycosidic', - 'glycosidically', - 'glycosuria', - 'glycosurias', - 'glycosylate', - 'glycosylated', - 'glycosylates', - 'glycosylating', - 'glycosylation', - 'glycosylations', - 'gnatcatcher', - 'gnatcatchers', - 'gnosticism', - 'gnosticisms', - 'gnotobiotic', - 'gnotobiotically', - 'goalkeeper', - 'goalkeepers', - 'goalmouths', - 'goaltender', - 'goaltenders', - 'goaltending', - 'goaltendings', - 'goatfishes', - 'goatsucker', - 'goatsuckers', - 'gobbledegook', - 'gobbledegooks', - 'gobbledygook', - 'gobbledygooks', - 'godchildren', - 'goddamming', - 'goddamning', - 'goddaughter', - 'goddaughters', - 'godfathered', - 'godfathering', - 'godfathers', - 'godforsaken', - 'godlessness', - 'godlessnesses', - 'godlikeness', - 'godlikenesses', - 'godlinesses', - 'godmothers', - 'godparents', - 'goitrogenic', - 'goitrogenicities', - 'goitrogenicity', - 'goitrogens', - 'goldbricked', - 'goldbricking', - 'goldbricks', - 'goldeneyes', - 'goldenness', - 'goldennesses', - 'goldenrods', - 'goldenseal', - 'goldenseals', - 'goldfields', - 'goldfinches', - 'goldfishes', - 'goldsmiths', - 'goldstones', - 'golliwoggs', - 'gonadectomies', - 'gonadectomized', - 'gonadectomy', - 'gonadotrophic', - 'gonadotrophin', - 'gonadotrophins', - 'gonadotropic', - 'gonadotropin', - 'gonadotropins', - 'gondoliers', - 'gonenesses', - 'gongoristic', - 'goniometer', - 'goniometers', - 'goniometric', - 'goniometries', - 'goniometry', - 'gonococcal', - 'gonococcus', - 'gonophores', - 'gonorrheal', - 'gonorrheas', - 'goodnesses', - 'goodwilled', - 'gooeynesses', - 'goofinesses', - 'googolplex', - 'googolplexes', - 'goosanders', - 'gooseberries', - 'gooseberry', - 'goosefishes', - 'gooseflesh', - 'goosefleshes', - 'goosefoots', - 'goosegrass', - 'goosegrasses', - 'goosenecked', - 'goosenecks', - 'gorbellies', - 'gorgeously', - 'gorgeousness', - 'gorgeousnesses', - 'gorgonians', - 'gorgonized', - 'gorgonizes', - 'gorgonizing', - 'gorinesses', - 'gormandise', - 'gormandised', - 'gormandises', - 'gormandising', - 'gormandize', - 'gormandized', - 'gormandizer', - 'gormandizers', - 'gormandizes', - 'gormandizing', - 'gospellers', - 'gossipmonger', - 'gossipmongers', - 'gossipping', - 'gossipries', - 'gothically', - 'gothicized', - 'gothicizes', - 'gothicizing', - 'gourmandise', - 'gourmandises', - 'gourmandism', - 'gourmandisms', - 'gourmandize', - 'gourmandized', - 'gourmandizes', - 'gourmandizing', - 'governable', - 'governance', - 'governances', - 'governesses', - 'governessy', - 'government', - 'governmental', - 'governmentalism', - 'governmentalisms', - 'governmentalist', - 'governmentalists', - 'governmentalize', - 'governmentalized', - 'governmentalizes', - 'governmentalizing', - 'governmentally', - 'governmentese', - 'governmenteses', - 'governments', - 'governorate', - 'governorates', - 'governorship', - 'governorships', - 'gracefuller', - 'gracefullest', - 'gracefully', - 'gracefulness', - 'gracefulnesses', - 'gracelessly', - 'gracelessness', - 'gracelessnesses', - 'gracileness', - 'gracilenesses', - 'gracilities', - 'graciously', - 'graciousness', - 'graciousnesses', - 'gradational', - 'gradationally', - 'gradations', - 'gradiometer', - 'gradiometers', - 'gradualism', - 'gradualisms', - 'gradualist', - 'gradualists', - 'gradualness', - 'gradualnesses', - 'graduating', - 'graduation', - 'graduations', - 'graduators', - 'graecizing', - 'graffitist', - 'graffitists', - 'grainfield', - 'grainfields', - 'graininess', - 'graininesses', - 'gramercies', - 'gramicidin', - 'gramicidins', - 'gramineous', - 'graminivorous', - 'grammarian', - 'grammarians', - 'grammatical', - 'grammaticalities', - 'grammaticality', - 'grammatically', - 'grammaticalness', - 'grammaticalnesses', - 'gramophone', - 'gramophones', - 'granadilla', - 'granadillas', - 'grandaddies', - 'grandaunts', - 'grandbabies', - 'grandchild', - 'grandchildren', - 'granddaddies', - 'granddaddy', - 'granddaughter', - 'granddaughters', - 'grandfather', - 'grandfathered', - 'grandfathering', - 'grandfatherly', - 'grandfathers', - 'grandiflora', - 'grandiflorae', - 'grandifloras', - 'grandiloquence', - 'grandiloquences', - 'grandiloquent', - 'grandiloquently', - 'grandiosely', - 'grandioseness', - 'grandiosenesses', - 'grandiosities', - 'grandiosity', - 'grandmaster', - 'grandmasters', - 'grandmother', - 'grandmotherly', - 'grandmothers', - 'grandnephew', - 'grandnephews', - 'grandnesses', - 'grandniece', - 'grandnieces', - 'grandparent', - 'grandparental', - 'grandparenthood', - 'grandparenthoods', - 'grandparents', - 'grandsires', - 'grandstand', - 'grandstanded', - 'grandstander', - 'grandstanders', - 'grandstanding', - 'grandstands', - 'granduncle', - 'granduncles', - 'grangerism', - 'grangerisms', - 'granitelike', - 'graniteware', - 'granitewares', - 'granivorous', - 'granodiorite', - 'granodiorites', - 'granodioritic', - 'granolithic', - 'granophyre', - 'granophyres', - 'granophyric', - 'grantsmanship', - 'grantsmanships', - 'granularities', - 'granularity', - 'granulated', - 'granulates', - 'granulating', - 'granulation', - 'granulations', - 'granulator', - 'granulators', - 'granulites', - 'granulitic', - 'granulocyte', - 'granulocytes', - 'granulocytic', - 'granulocytopoieses', - 'granulocytopoiesis', - 'granulomas', - 'granulomata', - 'granulomatous', - 'granuloses', - 'granulosis', - 'grapefruit', - 'grapefruits', - 'grapevines', - 'graphemically', - 'graphemics', - 'graphically', - 'graphicness', - 'graphicnesses', - 'graphitizable', - 'graphitization', - 'graphitizations', - 'graphitize', - 'graphitized', - 'graphitizes', - 'graphitizing', - 'grapholect', - 'grapholects', - 'graphological', - 'graphologies', - 'graphologist', - 'graphologists', - 'graphology', - 'grapinesses', - 'grapplings', - 'graptolite', - 'graptolites', - 'graspingly', - 'graspingness', - 'graspingnesses', - 'grasshopper', - 'grasshoppers', - 'grasslands', - 'grassroots', - 'gratefuller', - 'gratefullest', - 'gratefully', - 'gratefulness', - 'gratefulnesses', - 'graticules', - 'gratification', - 'gratifications', - 'gratifying', - 'gratifyingly', - 'gratineeing', - 'gratitudes', - 'gratuities', - 'gratuitous', - 'gratuitously', - 'gratuitousness', - 'gratuitousnesses', - 'gratulated', - 'gratulates', - 'gratulating', - 'gratulation', - 'gratulations', - 'gratulatory', - 'gravelling', - 'gravenesses', - 'gravesides', - 'gravestone', - 'gravestones', - 'graveyards', - 'gravidities', - 'gravimeter', - 'gravimeters', - 'gravimetric', - 'gravimetrically', - 'gravimetries', - 'gravimetry', - 'gravitases', - 'gravitated', - 'gravitates', - 'gravitating', - 'gravitation', - 'gravitational', - 'gravitationally', - 'gravitations', - 'gravitative', - 'graybeards', - 'grayfishes', - 'graynesses', - 'graywackes', - 'greaseball', - 'greaseballs', - 'greaseless', - 'greasepaint', - 'greasepaints', - 'greaseproof', - 'greaseproofs', - 'greasewood', - 'greasewoods', - 'greasiness', - 'greasinesses', - 'greatcoats', - 'greatening', - 'greathearted', - 'greatheartedly', - 'greatheartedness', - 'greatheartednesses', - 'greatnesses', - 'grecianize', - 'grecianized', - 'grecianizes', - 'grecianizing', - 'greediness', - 'greedinesses', - 'greenbacker', - 'greenbackers', - 'greenbackism', - 'greenbackisms', - 'greenbacks', - 'greenbelts', - 'greenbrier', - 'greenbriers', - 'greeneries', - 'greenfinch', - 'greenfinches', - 'greenflies', - 'greengages', - 'greengrocer', - 'greengroceries', - 'greengrocers', - 'greengrocery', - 'greenheads', - 'greenheart', - 'greenhearts', - 'greenhorns', - 'greenhouse', - 'greenhouses', - 'greenishness', - 'greenishnesses', - 'greenkeeper', - 'greenkeepers', - 'greenlings', - 'greenmailed', - 'greenmailer', - 'greenmailers', - 'greenmailing', - 'greenmails', - 'greennesses', - 'greenockite', - 'greenockites', - 'greenrooms', - 'greensands', - 'greenshank', - 'greenshanks', - 'greensickness', - 'greensicknesses', - 'greenskeeper', - 'greenskeepers', - 'greenstone', - 'greenstones', - 'greenstuff', - 'greenstuffs', - 'greensward', - 'greenswards', - 'greenwings', - 'greenwoods', - 'gregarines', - 'gregarious', - 'gregariously', - 'gregariousness', - 'gregariousnesses', - 'grenadiers', - 'grenadines', - 'grewsomest', - 'greyhounds', - 'greynesses', - 'griddlecake', - 'griddlecakes', - 'gridlocked', - 'gridlocking', - 'grievances', - 'grievously', - 'grievousness', - 'grievousnesses', - 'grillrooms', - 'grillworks', - 'grimalkins', - 'griminesses', - 'grimnesses', - 'grinderies', - 'grindingly', - 'grindstone', - 'grindstones', - 'grinningly', - 'grippingly', - 'grisailles', - 'griseofulvin', - 'griseofulvins', - 'grisliness', - 'grislinesses', - 'gristliest', - 'gristliness', - 'gristlinesses', - 'gristmills', - 'grittiness', - 'grittinesses', - 'grizzliest', - 'groggeries', - 'grogginess', - 'grogginesses', - 'grosgrains', - 'grossnesses', - 'grossularite', - 'grossularites', - 'grossulars', - 'grotesquely', - 'grotesqueness', - 'grotesquenesses', - 'grotesquerie', - 'grotesqueries', - 'grotesquery', - 'grotesques', - 'grouchiest', - 'grouchiness', - 'grouchinesses', - 'groundbreaker', - 'groundbreakers', - 'groundbreaking', - 'groundburst', - 'groundbursts', - 'groundfish', - 'groundfishes', - 'groundhogs', - 'groundings', - 'groundless', - 'groundlessly', - 'groundlessness', - 'groundlessnesses', - 'groundling', - 'groundlings', - 'groundmass', - 'groundmasses', - 'groundnuts', - 'groundouts', - 'groundsels', - 'groundsheet', - 'groundsheets', - 'groundskeeper', - 'groundskeepers', - 'groundsman', - 'groundsmen', - 'groundswell', - 'groundswells', - 'groundwater', - 'groundwaters', - 'groundwood', - 'groundwoods', - 'groundwork', - 'groundworks', - 'groupthink', - 'groupthinks', - 'groupuscule', - 'groupuscules', - 'grovelingly', - 'grovelling', - 'growliness', - 'growlinesses', - 'growlingly', - 'growthiest', - 'growthiness', - 'growthinesses', - 'grubbiness', - 'grubbinesses', - 'grubstaked', - 'grubstaker', - 'grubstakers', - 'grubstakes', - 'grubstaking', - 'grudgingly', - 'gruelingly', - 'gruellings', - 'gruesomely', - 'gruesomeness', - 'gruesomenesses', - 'gruesomest', - 'gruffnesses', - 'grumblingly', - 'grumpiness', - 'grumpinesses', - 'guacamoles', - 'guacharoes', - 'guanethidine', - 'guanethidines', - 'guanidines', - 'guanosines', - 'guaranteed', - 'guaranteeing', - 'guarantees', - 'guarantied', - 'guaranties', - 'guarantors', - 'guarantying', - 'guardedness', - 'guardednesses', - 'guardhouse', - 'guardhouses', - 'guardianship', - 'guardianships', - 'guardrails', - 'guardrooms', - 'guayaberas', - 'gubernatorial', - 'gudgeoning', - 'guerdoning', - 'guerrillas', - 'guesstimate', - 'guesstimated', - 'guesstimates', - 'guesstimating', - 'guessworks', - 'guesthouse', - 'guesthouses', - 'guidebooks', - 'guidelines', - 'guideposts', - 'guidwillie', - 'guildhalls', - 'guildships', - 'guilefully', - 'guilefulness', - 'guilefulnesses', - 'guilelessly', - 'guilelessness', - 'guilelessnesses', - 'guillemets', - 'guillemots', - 'guilloches', - 'guillotine', - 'guillotined', - 'guillotines', - 'guillotining', - 'guiltiness', - 'guiltinesses', - 'guiltlessly', - 'guiltlessness', - 'guiltlessnesses', - 'guitarfish', - 'guitarfishes', - 'guitarists', - 'gullibilities', - 'gullibility', - 'gulosities', - 'gumminesses', - 'gumshoeing', - 'guncottons', - 'gunfighter', - 'gunfighters', - 'gunfighting', - 'gunkholing', - 'gunnysacks', - 'gunpowders', - 'gunrunners', - 'gunrunning', - 'gunrunnings', - 'gunslinger', - 'gunslingers', - 'gunslinging', - 'gunslingings', - 'gunsmithing', - 'gunsmithings', - 'gushinesses', - 'gustations', - 'gustatorily', - 'gustinesses', - 'gutbuckets', - 'gutlessness', - 'gutlessnesses', - 'gutsinesses', - 'guttations', - 'gutterings', - 'guttersnipe', - 'guttersnipes', - 'guttersnipish', - 'gutturalism', - 'gutturalisms', - 'gymnasiums', - 'gymnastically', - 'gymnastics', - 'gymnosophist', - 'gymnosophists', - 'gymnosperm', - 'gymnospermies', - 'gymnospermous', - 'gymnosperms', - 'gymnospermy', - 'gynaecologies', - 'gynaecology', - 'gynandries', - 'gynandromorph', - 'gynandromorphic', - 'gynandromorphies', - 'gynandromorphism', - 'gynandromorphisms', - 'gynandromorphs', - 'gynandromorphy', - 'gynandrous', - 'gynarchies', - 'gynecocracies', - 'gynecocracy', - 'gynecocratic', - 'gynecologic', - 'gynecological', - 'gynecologies', - 'gynecologist', - 'gynecologists', - 'gynecology', - 'gynecomastia', - 'gynecomastias', - 'gyniatries', - 'gynogeneses', - 'gynogenesis', - 'gynogenetic', - 'gynophores', - 'gypsiferous', - 'gypsophila', - 'gypsophilas', - 'gyrational', - 'gyrfalcons', - 'gyrocompass', - 'gyrocompasses', - 'gyrofrequencies', - 'gyrofrequency', - 'gyromagnetic', - 'gyroplanes', - 'gyroscopes', - 'gyroscopic', - 'gyroscopically', - 'gyrostabilizer', - 'gyrostabilizers', - 'haberdasher', - 'haberdasheries', - 'haberdashers', - 'haberdashery', - 'habergeons', - 'habiliment', - 'habiliments', - 'habilitate', - 'habilitated', - 'habilitates', - 'habilitating', - 'habilitation', - 'habilitations', - 'habitabilities', - 'habitability', - 'habitableness', - 'habitablenesses', - 'habitation', - 'habitations', - 'habitually', - 'habitualness', - 'habitualnesses', - 'habituated', - 'habituates', - 'habituating', - 'habituation', - 'habituations', - 'hacendados', - 'haciendado', - 'haciendados', - 'hackamores', - 'hackberries', - 'hackmatack', - 'hackmatacks', - 'hackneying', - 'hadrosaurs', - 'haecceities', - 'haematites', - 'hagberries', - 'haggadistic', - 'haggadists', - 'haggardness', - 'haggardnesses', - 'hagiographer', - 'hagiographers', - 'hagiographic', - 'hagiographical', - 'hagiographies', - 'hagiography', - 'hagiologic', - 'hagiological', - 'hagiologies', - 'hagioscope', - 'hagioscopes', - 'hagioscopic', - 'hailstones', - 'hailstorms', - 'hairbreadth', - 'hairbreadths', - 'hairbrushes', - 'haircloths', - 'haircutter', - 'haircutters', - 'haircutting', - 'haircuttings', - 'hairdresser', - 'hairdressers', - 'hairdressing', - 'hairdressings', - 'hairinesses', - 'hairlessness', - 'hairlessnesses', - 'hairpieces', - 'hairsbreadth', - 'hairsbreadths', - 'hairsplitter', - 'hairsplitters', - 'hairsplitting', - 'hairsplittings', - 'hairspring', - 'hairsprings', - 'hairstreak', - 'hairstreaks', - 'hairstyles', - 'hairstyling', - 'hairstylings', - 'hairstylist', - 'hairstylists', - 'halenesses', - 'halfhearted', - 'halfheartedly', - 'halfheartedness', - 'halfheartednesses', - 'halfnesses', - 'halfpennies', - 'hallelujah', - 'hallelujahs', - 'hallmarked', - 'hallmarking', - 'hallucinate', - 'hallucinated', - 'hallucinates', - 'hallucinating', - 'hallucination', - 'hallucinations', - 'hallucinator', - 'hallucinators', - 'hallucinatory', - 'hallucinogen', - 'hallucinogenic', - 'hallucinogenics', - 'hallucinogens', - 'hallucinoses', - 'hallucinosis', - 'hallucinosises', - 'halocarbon', - 'halocarbons', - 'haloclines', - 'halogenate', - 'halogenated', - 'halogenates', - 'halogenating', - 'halogenation', - 'halogenations', - 'halogenous', - 'halogetons', - 'halomorphic', - 'haloperidol', - 'haloperidols', - 'halophiles', - 'halophilic', - 'halophytes', - 'halophytic', - 'halothanes', - 'halterbreak', - 'halterbreaking', - 'halterbreaks', - 'halterbroke', - 'halterbroken', - 'hamadryades', - 'hamadryads', - 'hamantasch', - 'hamantaschen', - 'hamburgers', - 'hammerhead', - 'hammerheads', - 'hammerless', - 'hammerlock', - 'hammerlocks', - 'hammertoes', - 'hamminesses', - 'hamstringing', - 'hamstrings', - 'handbarrow', - 'handbarrows', - 'handbasket', - 'handbaskets', - 'handbreadth', - 'handbreadths', - 'handclasps', - 'handcrafted', - 'handcrafting', - 'handcrafts', - 'handcraftsman', - 'handcraftsmanship', - 'handcraftsmanships', - 'handcraftsmen', - 'handcuffed', - 'handcuffing', - 'handedness', - 'handednesses', - 'handfasted', - 'handfasting', - 'handfastings', - 'handholding', - 'handholdings', - 'handicapped', - 'handicapper', - 'handicappers', - 'handicapping', - 'handicraft', - 'handicrafter', - 'handicrafters', - 'handicrafts', - 'handicraftsman', - 'handicraftsmen', - 'handinesses', - 'handiworks', - 'handkerchief', - 'handkerchiefs', - 'handkerchieves', - 'handleable', - 'handlebars', - 'handleless', - 'handmaiden', - 'handmaidens', - 'handpicked', - 'handpicking', - 'handpresses', - 'handprints', - 'handrailing', - 'handrailings', - 'handsbreadth', - 'handsbreadths', - 'handseling', - 'handselled', - 'handselling', - 'handshakes', - 'handsomely', - 'handsomeness', - 'handsomenesses', - 'handsomest', - 'handspikes', - 'handspring', - 'handsprings', - 'handstands', - 'handwheels', - 'handworker', - 'handworkers', - 'handwringer', - 'handwringers', - 'handwringing', - 'handwringings', - 'handwrites', - 'handwriting', - 'handwritings', - 'handwritten', - 'handwrought', - 'handyperson', - 'handypersons', - 'hanselling', - 'haphazardly', - 'haphazardness', - 'haphazardnesses', - 'haphazardries', - 'haphazardry', - 'haphazards', - 'haphtaroth', - 'haplessness', - 'haplessnesses', - 'haploidies', - 'haplologies', - 'haplotypes', - 'happenchance', - 'happenchances', - 'happenings', - 'happenstance', - 'happenstances', - 'happinesses', - 'haptoglobin', - 'haptoglobins', - 'haranguers', - 'haranguing', - 'harassment', - 'harassments', - 'harbingered', - 'harbingering', - 'harbingers', - 'harborages', - 'harborfuls', - 'harborless', - 'harbormaster', - 'harbormasters', - 'harborside', - 'harbouring', - 'hardboards', - 'hardcovers', - 'hardenings', - 'hardfisted', - 'hardhanded', - 'hardhandedness', - 'hardhandednesses', - 'hardheaded', - 'hardheadedly', - 'hardheadedness', - 'hardheadednesses', - 'hardhearted', - 'hardheartedness', - 'hardheartednesses', - 'hardihoods', - 'hardiments', - 'hardinesses', - 'hardinggrass', - 'hardinggrasses', - 'hardmouthed', - 'hardnesses', - 'hardscrabble', - 'hardstanding', - 'hardstandings', - 'hardstands', - 'hardwiring', - 'hardworking', - 'harebrained', - 'harlequinade', - 'harlequinades', - 'harlequins', - 'harlotries', - 'harmattans', - 'harmfulness', - 'harmfulnesses', - 'harmlessly', - 'harmlessness', - 'harmlessnesses', - 'harmonically', - 'harmonicas', - 'harmonicist', - 'harmonicists', - 'harmonious', - 'harmoniously', - 'harmoniousness', - 'harmoniousnesses', - 'harmonised', - 'harmonises', - 'harmonising', - 'harmoniums', - 'harmonization', - 'harmonizations', - 'harmonized', - 'harmonizer', - 'harmonizers', - 'harmonizes', - 'harmonizing', - 'harnessing', - 'harpooners', - 'harpooning', - 'harpsichord', - 'harpsichordist', - 'harpsichordists', - 'harpsichords', - 'harquebuses', - 'harquebusier', - 'harquebusiers', - 'harrumphed', - 'harrumphing', - 'harshening', - 'harshnesses', - 'hartebeest', - 'hartebeests', - 'hartshorns', - 'harumphing', - 'haruspication', - 'haruspications', - 'haruspices', - 'harvestable', - 'harvesters', - 'harvesting', - 'harvestman', - 'harvestmen', - 'harvesttime', - 'harvesttimes', - 'hasenpfeffer', - 'hasenpfeffers', - 'hasheeshes', - 'hastinesses', - 'hatchabilities', - 'hatchability', - 'hatchbacks', - 'hatcheling', - 'hatchelled', - 'hatchelling', - 'hatcheries', - 'hatchlings', - 'hatchments', - 'hatefulness', - 'hatefulnesses', - 'hatemonger', - 'hatemongers', - 'haughtiest', - 'haughtiness', - 'haughtinesses', - 'hauntingly', - 'hausfrauen', - 'haustellum', - 'haustorial', - 'haustorium', - 'haversacks', - 'hawfinches', - 'hawkishness', - 'hawkishnesses', - 'hawksbills', - 'hawseholes', - 'hazardously', - 'hazardousness', - 'hazardousnesses', - 'hazinesses', - 'headachier', - 'headachiest', - 'headboards', - 'headcheese', - 'headcheeses', - 'headdresses', - 'headfishes', - 'headforemost', - 'headhunted', - 'headhunter', - 'headhunters', - 'headhunting', - 'headinesses', - 'headlessness', - 'headlessnesses', - 'headlights', - 'headliners', - 'headlining', - 'headmaster', - 'headmasters', - 'headmastership', - 'headmasterships', - 'headmistress', - 'headmistresses', - 'headphones', - 'headpieces', - 'headquarter', - 'headquartered', - 'headquartering', - 'headquarters', - 'headshrinker', - 'headshrinkers', - 'headspaces', - 'headspring', - 'headsprings', - 'headstalls', - 'headstands', - 'headstocks', - 'headstones', - 'headstream', - 'headstreams', - 'headstrong', - 'headwaiter', - 'headwaiters', - 'headwaters', - 'healthfully', - 'healthfulness', - 'healthfulnesses', - 'healthiest', - 'healthiness', - 'healthinesses', - 'hearkening', - 'heartaches', - 'heartbeats', - 'heartbreak', - 'heartbreaker', - 'heartbreakers', - 'heartbreaking', - 'heartbreakingly', - 'heartbreaks', - 'heartbroken', - 'heartburning', - 'heartburnings', - 'heartburns', - 'heartening', - 'hearteningly', - 'hearthstone', - 'hearthstones', - 'heartiness', - 'heartinesses', - 'heartlands', - 'heartlessly', - 'heartlessness', - 'heartlessnesses', - 'heartrending', - 'heartrendingly', - 'heartsease', - 'heartseases', - 'heartsickness', - 'heartsicknesses', - 'heartsomely', - 'heartstring', - 'heartstrings', - 'heartthrob', - 'heartthrobs', - 'heartwarming', - 'heartwoods', - 'heartworms', - 'heathendom', - 'heathendoms', - 'heathenish', - 'heathenishly', - 'heathenism', - 'heathenisms', - 'heathenize', - 'heathenized', - 'heathenizes', - 'heathenizing', - 'heathlands', - 'heatstroke', - 'heatstrokes', - 'heavenlier', - 'heavenliest', - 'heavenliness', - 'heavenlinesses', - 'heavenward', - 'heavenwards', - 'heavinesses', - 'heavyhearted', - 'heavyheartedly', - 'heavyheartedness', - 'heavyheartednesses', - 'heavyweight', - 'heavyweights', - 'hebdomadal', - 'hebdomadally', - 'hebephrenia', - 'hebephrenias', - 'hebephrenic', - 'hebephrenics', - 'hebetating', - 'hebetation', - 'hebetations', - 'hebetudinous', - 'hebraization', - 'hebraizations', - 'hebraizing', - 'hectically', - 'hectograms', - 'hectograph', - 'hectographed', - 'hectographing', - 'hectographs', - 'hectoliter', - 'hectoliters', - 'hectometer', - 'hectometers', - 'hectoringly', - 'hedgehopped', - 'hedgehopper', - 'hedgehoppers', - 'hedgehopping', - 'hedonically', - 'hedonistic', - 'hedonistically', - 'heedfulness', - 'heedfulnesses', - 'heedlessly', - 'heedlessness', - 'heedlessnesses', - 'heelpieces', - 'heftinesses', - 'hegemonies', - 'hegumenies', - 'heightened', - 'heightening', - 'heinousness', - 'heinousnesses', - 'heldentenor', - 'heldentenors', - 'heliacally', - 'helicities', - 'helicoidal', - 'helicopted', - 'helicopter', - 'helicoptered', - 'helicoptering', - 'helicopters', - 'helicopting', - 'helilifted', - 'helilifting', - 'heliocentric', - 'heliograph', - 'heliographed', - 'heliographic', - 'heliographing', - 'heliographs', - 'heliolatries', - 'heliolatrous', - 'heliolatry', - 'heliometer', - 'heliometers', - 'heliometric', - 'heliometrically', - 'heliostats', - 'heliotrope', - 'heliotropes', - 'heliotropic', - 'heliotropism', - 'heliotropisms', - 'heliozoans', - 'hellacious', - 'hellaciously', - 'hellbender', - 'hellbenders', - 'hellbroths', - 'hellebores', - 'hellenization', - 'hellenizations', - 'hellenized', - 'hellenizes', - 'hellenizing', - 'hellgrammite', - 'hellgrammites', - 'hellhounds', - 'hellishness', - 'hellishnesses', - 'helmetlike', - 'helminthiases', - 'helminthiasis', - 'helminthic', - 'helminthologies', - 'helminthology', - 'helmsmanship', - 'helmsmanships', - 'helpfulness', - 'helpfulnesses', - 'helplessly', - 'helplessness', - 'helplessnesses', - 'hemacytometer', - 'hemacytometers', - 'hemagglutinate', - 'hemagglutinated', - 'hemagglutinates', - 'hemagglutinating', - 'hemagglutination', - 'hemagglutinations', - 'hemagglutinin', - 'hemagglutinins', - 'hemangioma', - 'hemangiomas', - 'hemangiomata', - 'hematinics', - 'hematocrit', - 'hematocrits', - 'hematogenous', - 'hematologic', - 'hematological', - 'hematologies', - 'hematologist', - 'hematologists', - 'hematology', - 'hematomata', - 'hematophagous', - 'hematopoieses', - 'hematopoiesis', - 'hematopoietic', - 'hematoporphyrin', - 'hematoporphyrins', - 'hematoxylin', - 'hematoxylins', - 'hematurias', - 'hemelytron', - 'hemerocallis', - 'hemerocallises', - 'hemerythrin', - 'hemerythrins', - 'hemiacetal', - 'hemiacetals', - 'hemicellulose', - 'hemicelluloses', - 'hemichordate', - 'hemichordates', - 'hemicycles', - 'hemidemisemiquaver', - 'hemidemisemiquavers', - 'hemihedral', - 'hemihydrate', - 'hemihydrated', - 'hemihydrates', - 'hemimetabolous', - 'hemimorphic', - 'hemimorphism', - 'hemimorphisms', - 'hemiplegia', - 'hemiplegias', - 'hemiplegic', - 'hemiplegics', - 'hemipteran', - 'hemipterans', - 'hemipterous', - 'hemisphere', - 'hemispheres', - 'hemispheric', - 'hemispherical', - 'hemistichs', - 'hemizygous', - 'hemochromatoses', - 'hemochromatosis', - 'hemochromatosises', - 'hemocyanin', - 'hemocyanins', - 'hemocytometer', - 'hemocytometers', - 'hemodialyses', - 'hemodialysis', - 'hemodilution', - 'hemodilutions', - 'hemodynamic', - 'hemodynamically', - 'hemodynamics', - 'hemoflagellate', - 'hemoflagellates', - 'hemoglobin', - 'hemoglobinopathies', - 'hemoglobinopathy', - 'hemoglobins', - 'hemoglobinuria', - 'hemoglobinurias', - 'hemoglobinuric', - 'hemolymphs', - 'hemolysins', - 'hemolyzing', - 'hemophilia', - 'hemophiliac', - 'hemophiliacs', - 'hemophilias', - 'hemophilic', - 'hemophilics', - 'hemopoieses', - 'hemopoiesis', - 'hemopoietic', - 'hemoprotein', - 'hemoproteins', - 'hemoptyses', - 'hemoptysis', - 'hemorrhage', - 'hemorrhaged', - 'hemorrhages', - 'hemorrhagic', - 'hemorrhaging', - 'hemorrhoid', - 'hemorrhoidal', - 'hemorrhoidals', - 'hemorrhoids', - 'hemosiderin', - 'hemosiderins', - 'hemostases', - 'hemostasis', - 'hemostatic', - 'hemostatics', - 'hemstitched', - 'hemstitcher', - 'hemstitchers', - 'hemstitches', - 'hemstitching', - 'henceforth', - 'henceforward', - 'hendecasyllabic', - 'hendecasyllabics', - 'hendecasyllable', - 'hendecasyllables', - 'hendiadyses', - 'henotheism', - 'henotheisms', - 'henotheist', - 'henotheistic', - 'henotheists', - 'henpecking', - 'heparinized', - 'hepatectomies', - 'hepatectomized', - 'hepatectomy', - 'hepatitides', - 'hepatizing', - 'hepatocellular', - 'hepatocyte', - 'hepatocytes', - 'hepatomata', - 'hepatomegalies', - 'hepatomegaly', - 'hepatopancreas', - 'hepatopancreases', - 'hepatotoxic', - 'hepatotoxicities', - 'hepatotoxicity', - 'heptachlor', - 'heptachlors', - 'heptagonal', - 'heptameter', - 'heptameters', - 'heptarchies', - 'heraldically', - 'heraldries', - 'herbaceous', - 'herbalists', - 'herbariums', - 'herbicidal', - 'herbicidally', - 'herbicides', - 'herbivores', - 'herbivories', - 'herbivorous', - 'herculeses', - 'hereabouts', - 'hereafters', - 'hereditament', - 'hereditaments', - 'hereditarian', - 'hereditarians', - 'hereditarily', - 'hereditary', - 'heredities', - 'hereinabove', - 'hereinafter', - 'hereinbefore', - 'hereinbelow', - 'heresiarch', - 'heresiarchs', - 'heretically', - 'heretofore', - 'heretrices', - 'heretrixes', - 'heritabilities', - 'heritability', - 'heritrices', - 'heritrixes', - 'hermaphrodite', - 'hermaphrodites', - 'hermaphroditic', - 'hermaphroditism', - 'hermaphroditisms', - 'hermatypic', - 'hermeneutic', - 'hermeneutical', - 'hermeneutically', - 'hermeneutics', - 'hermetical', - 'hermetically', - 'hermeticism', - 'hermeticisms', - 'hermetisms', - 'hermetists', - 'hermitages', - 'hermitisms', - 'hermitries', - 'herniating', - 'herniation', - 'herniations', - 'heroically', - 'heroicomic', - 'heroicomical', - 'heroinisms', - 'herpesvirus', - 'herpesviruses', - 'herpetological', - 'herpetologies', - 'herpetologist', - 'herpetologists', - 'herpetology', - 'herrenvolk', - 'herrenvolks', - 'herringbone', - 'herringboned', - 'herringbones', - 'herringboning', - 'herstories', - 'hesitances', - 'hesitancies', - 'hesitantly', - 'hesitaters', - 'hesitating', - 'hesitatingly', - 'hesitation', - 'hesitations', - 'hesperidia', - 'hesperidin', - 'hesperidins', - 'hesperidium', - 'hessonites', - 'heteroatom', - 'heteroatoms', - 'heteroauxin', - 'heteroauxins', - 'heterocercal', - 'heterochromatic', - 'heterochromatin', - 'heterochromatins', - 'heteroclite', - 'heteroclites', - 'heterocycle', - 'heterocycles', - 'heterocyclic', - 'heterocyclics', - 'heterocyst', - 'heterocystous', - 'heterocysts', - 'heterodoxies', - 'heterodoxy', - 'heteroduplex', - 'heteroduplexes', - 'heterodyne', - 'heterodyned', - 'heterodynes', - 'heterodyning', - 'heteroecious', - 'heteroecism', - 'heteroecisms', - 'heterogamete', - 'heterogametes', - 'heterogametic', - 'heterogameties', - 'heterogamety', - 'heterogamies', - 'heterogamous', - 'heterogamy', - 'heterogeneities', - 'heterogeneity', - 'heterogeneous', - 'heterogeneously', - 'heterogeneousness', - 'heterogeneousnesses', - 'heterogenies', - 'heterogenous', - 'heterogeny', - 'heterogonic', - 'heterogonies', - 'heterogony', - 'heterograft', - 'heterografts', - 'heterokaryon', - 'heterokaryons', - 'heterokaryoses', - 'heterokaryosis', - 'heterokaryosises', - 'heterokaryotic', - 'heterologous', - 'heterologously', - 'heterolyses', - 'heterolysis', - 'heterolytic', - 'heteromorphic', - 'heteromorphism', - 'heteromorphisms', - 'heteronomies', - 'heteronomous', - 'heteronomy', - 'heteronyms', - 'heterophil', - 'heterophile', - 'heterophonies', - 'heterophony', - 'heterophyllies', - 'heterophyllous', - 'heterophylly', - 'heteroploid', - 'heteroploidies', - 'heteroploids', - 'heteroploidy', - 'heteropterous', - 'heterosexual', - 'heterosexualities', - 'heterosexuality', - 'heterosexually', - 'heterosexuals', - 'heterospories', - 'heterosporous', - 'heterospory', - 'heterothallic', - 'heterothallism', - 'heterothallisms', - 'heterotopic', - 'heterotroph', - 'heterotrophic', - 'heterotrophically', - 'heterotrophies', - 'heterotrophs', - 'heterotrophy', - 'heterotypic', - 'heterozygoses', - 'heterozygosis', - 'heterozygosities', - 'heterozygosity', - 'heterozygote', - 'heterozygotes', - 'heterozygous', - 'heulandite', - 'heulandites', - 'heuristically', - 'heuristics', - 'hexachlorethane', - 'hexachlorethanes', - 'hexachloroethane', - 'hexachloroethanes', - 'hexachlorophene', - 'hexachlorophenes', - 'hexachords', - 'hexadecimal', - 'hexadecimals', - 'hexagonally', - 'hexahedron', - 'hexahedrons', - 'hexahydrate', - 'hexahydrates', - 'hexameters', - 'hexamethonium', - 'hexamethoniums', - 'hexamethylenetetramine', - 'hexamethylenetetramines', - 'hexaploidies', - 'hexaploids', - 'hexaploidy', - 'hexapodies', - 'hexarchies', - 'hexobarbital', - 'hexobarbitals', - 'hexokinase', - 'hexokinases', - 'hexosaminidase', - 'hexosaminidases', - 'hexylresorcinol', - 'hexylresorcinols', - 'hibernacula', - 'hibernaculum', - 'hibernated', - 'hibernates', - 'hibernating', - 'hibernation', - 'hibernations', - 'hibernator', - 'hibernators', - 'hibiscuses', - 'hiccoughed', - 'hiccoughing', - 'hiccupping', - 'hiddenites', - 'hiddenness', - 'hiddennesses', - 'hideosities', - 'hideousness', - 'hideousnesses', - 'hierarchal', - 'hierarchic', - 'hierarchical', - 'hierarchically', - 'hierarchies', - 'hierarchize', - 'hierarchized', - 'hierarchizes', - 'hierarchizing', - 'hieratically', - 'hierodules', - 'hieroglyph', - 'hieroglyphic', - 'hieroglyphical', - 'hieroglyphically', - 'hieroglyphics', - 'hieroglyphs', - 'hierophant', - 'hierophantic', - 'hierophants', - 'highballed', - 'highballing', - 'highbinder', - 'highbinders', - 'highbrowed', - 'highbrowism', - 'highbrowisms', - 'highchairs', - 'highfalutin', - 'highfliers', - 'highflyers', - 'highhanded', - 'highhandedly', - 'highhandedness', - 'highhandednesses', - 'highjacked', - 'highjacking', - 'highlander', - 'highlanders', - 'highlighted', - 'highlighter', - 'highlighters', - 'highlighting', - 'highlights', - 'highnesses', - 'hightailed', - 'hightailing', - 'highwayman', - 'highwaymen', - 'hijackings', - 'hilariously', - 'hilariousness', - 'hilariousnesses', - 'hilarities', - 'hillbillies', - 'hillcrests', - 'hindbrains', - 'hindquarter', - 'hindquarters', - 'hindrances', - 'hindsights', - 'hinterland', - 'hinterlands', - 'hippiedoms', - 'hippieness', - 'hippienesses', - 'hippinesses', - 'hippocampal', - 'hippocampi', - 'hippocampus', - 'hippocrases', - 'hippodrome', - 'hippodromes', - 'hippogriff', - 'hippogriffs', - 'hippopotami', - 'hippopotamus', - 'hippopotamuses', - 'hipsterism', - 'hipsterisms', - 'hirselling', - 'hirsuteness', - 'hirsutenesses', - 'hirsutisms', - 'hispanidad', - 'hispanidads', - 'hispanisms', - 'histaminase', - 'histaminases', - 'histaminergic', - 'histamines', - 'histidines', - 'histiocyte', - 'histiocytes', - 'histiocytic', - 'histochemical', - 'histochemically', - 'histochemistries', - 'histochemistry', - 'histocompatibilities', - 'histocompatibility', - 'histogeneses', - 'histogenesis', - 'histogenetic', - 'histograms', - 'histologic', - 'histological', - 'histologically', - 'histologies', - 'histologist', - 'histologists', - 'histolyses', - 'histolysis', - 'histopathologic', - 'histopathological', - 'histopathologically', - 'histopathologies', - 'histopathologist', - 'histopathologists', - 'histopathology', - 'histophysiologic', - 'histophysiological', - 'histophysiologies', - 'histophysiology', - 'histoplasmoses', - 'histoplasmosis', - 'histoplasmosises', - 'historians', - 'historical', - 'historically', - 'historicalness', - 'historicalnesses', - 'historicism', - 'historicisms', - 'historicist', - 'historicists', - 'historicities', - 'historicity', - 'historicize', - 'historicized', - 'historicizes', - 'historicizing', - 'historiographer', - 'historiographers', - 'historiographic', - 'historiographical', - 'historiographically', - 'historiographies', - 'historiography', - 'histrionic', - 'histrionically', - 'histrionics', - 'hitchhiked', - 'hitchhiker', - 'hitchhikers', - 'hitchhikes', - 'hitchhiking', - 'hithermost', - 'hitherward', - 'hoactzines', - 'hoarfrosts', - 'hoarinesses', - 'hoarseness', - 'hoarsenesses', - 'hoarsening', - 'hobblebush', - 'hobblebushes', - 'hobbledehoy', - 'hobbledehoys', - 'hobbyhorse', - 'hobbyhorses', - 'hobgoblins', - 'hobnailing', - 'hobnobbers', - 'hobnobbing', - 'hodgepodge', - 'hodgepodges', - 'hodoscopes', - 'hoggishness', - 'hoggishnesses', - 'hokeynesses', - 'hokeypokey', - 'hokeypokeys', - 'hokinesses', - 'hokypokies', - 'holidayers', - 'holidaying', - 'holidaymaker', - 'holidaymakers', - 'holinesses', - 'holistically', - 'hollandaise', - 'hollandaises', - 'hollowares', - 'hollowness', - 'hollownesses', - 'hollowware', - 'hollowwares', - 'hollyhocks', - 'holoblastic', - 'holocausts', - 'holoenzyme', - 'holoenzymes', - 'hologamies', - 'holographed', - 'holographer', - 'holographers', - 'holographic', - 'holographically', - 'holographies', - 'holographing', - 'holographs', - 'holography', - 'hologynies', - 'holohedral', - 'holometabolism', - 'holometabolisms', - 'holometabolous', - 'holophrastic', - 'holophytic', - 'holothurian', - 'holothurians', - 'holstering', - 'holystoned', - 'holystones', - 'holystoning', - 'homebodies', - 'homecoming', - 'homecomings', - 'homelessness', - 'homelessnesses', - 'homeliness', - 'homelinesses', - 'homemakers', - 'homemaking', - 'homemakings', - 'homeoboxes', - 'homeomorphic', - 'homeomorphism', - 'homeomorphisms', - 'homeopathic', - 'homeopathically', - 'homeopathies', - 'homeopaths', - 'homeopathy', - 'homeostases', - 'homeostasis', - 'homeostatic', - 'homeotherm', - 'homeothermic', - 'homeothermies', - 'homeotherms', - 'homeothermy', - 'homeowners', - 'homeported', - 'homeporting', - 'homeschool', - 'homeschooled', - 'homeschooler', - 'homeschoolers', - 'homeschooling', - 'homeschools', - 'homesickness', - 'homesicknesses', - 'homesteaded', - 'homesteader', - 'homesteaders', - 'homesteading', - 'homesteads', - 'homestretch', - 'homestretches', - 'homeynesses', - 'homicidally', - 'homiletical', - 'homiletics', - 'hominesses', - 'hominization', - 'hominizations', - 'hominizing', - 'homocercal', - 'homoerotic', - 'homoeroticism', - 'homoeroticisms', - 'homogametic', - 'homogamies', - 'homogamous', - 'homogenate', - 'homogenates', - 'homogeneities', - 'homogeneity', - 'homogeneous', - 'homogeneously', - 'homogeneousness', - 'homogeneousnesses', - 'homogenies', - 'homogenisation', - 'homogenisations', - 'homogenise', - 'homogenised', - 'homogenises', - 'homogenising', - 'homogenization', - 'homogenizations', - 'homogenize', - 'homogenized', - 'homogenizer', - 'homogenizers', - 'homogenizes', - 'homogenizing', - 'homogenous', - 'homogonies', - 'homografts', - 'homographic', - 'homographs', - 'homoiotherm', - 'homoiothermic', - 'homoiotherms', - 'homoiousian', - 'homoiousians', - 'homologate', - 'homologated', - 'homologates', - 'homologating', - 'homologation', - 'homologations', - 'homological', - 'homologically', - 'homologies', - 'homologize', - 'homologized', - 'homologizer', - 'homologizers', - 'homologizes', - 'homologizing', - 'homologous', - 'homologues', - 'homomorphic', - 'homomorphism', - 'homomorphisms', - 'homonuclear', - 'homonymies', - 'homonymous', - 'homonymously', - 'homoousian', - 'homoousians', - 'homophobes', - 'homophobia', - 'homophobias', - 'homophobic', - 'homophones', - 'homophonic', - 'homophonies', - 'homophonous', - 'homoplasies', - 'homoplastic', - 'homopolymer', - 'homopolymeric', - 'homopolymers', - 'homopteran', - 'homopterans', - 'homopterous', - 'homoscedastic', - 'homoscedasticities', - 'homoscedasticity', - 'homosexual', - 'homosexualities', - 'homosexuality', - 'homosexually', - 'homosexuals', - 'homospories', - 'homosporous', - 'homothallic', - 'homothallism', - 'homothallisms', - 'homotransplant', - 'homotransplantation', - 'homotransplantations', - 'homotransplants', - 'homozygoses', - 'homozygosis', - 'homozygosities', - 'homozygosity', - 'homozygote', - 'homozygotes', - 'homozygous', - 'homozygously', - 'homunculus', - 'honeybunch', - 'honeybunches', - 'honeycombed', - 'honeycombing', - 'honeycombs', - 'honeycreeper', - 'honeycreepers', - 'honeyeater', - 'honeyeaters', - 'honeyguide', - 'honeyguides', - 'honeymooned', - 'honeymooner', - 'honeymooners', - 'honeymooning', - 'honeymoons', - 'honeysuckle', - 'honeysuckles', - 'honorabilities', - 'honorability', - 'honorableness', - 'honorablenesses', - 'honoraries', - 'honorarily', - 'honorarium', - 'honorariums', - 'honorifically', - 'honorifics', - 'honourable', - 'hoodedness', - 'hoodednesses', - 'hoodlumish', - 'hoodlumism', - 'hoodlumisms', - 'hoodooisms', - 'hoodwinked', - 'hoodwinker', - 'hoodwinkers', - 'hoodwinking', - 'hoofprints', - 'hooliganism', - 'hooliganisms', - 'hoopskirts', - 'hootenannies', - 'hootenanny', - 'hopefulness', - 'hopefulnesses', - 'hopelessly', - 'hopelessness', - 'hopelessnesses', - 'hopsacking', - 'hopsackings', - 'hopscotched', - 'hopscotches', - 'hopscotching', - 'horehounds', - 'horizonless', - 'horizontal', - 'horizontalities', - 'horizontality', - 'horizontally', - 'horizontals', - 'hormogonia', - 'hormogonium', - 'hormonally', - 'hormonelike', - 'hornblende', - 'hornblendes', - 'hornblendic', - 'hornedness', - 'hornednesses', - 'horninesses', - 'hornlessness', - 'hornlessnesses', - 'hornstones', - 'hornswoggle', - 'hornswoggled', - 'hornswoggles', - 'hornswoggling', - 'horological', - 'horologies', - 'horologist', - 'horologists', - 'horoscopes', - 'horrendous', - 'horrendously', - 'horribleness', - 'horriblenesses', - 'horridness', - 'horridnesses', - 'horrifically', - 'horrifying', - 'horrifyingly', - 'horsebacks', - 'horsebeans', - 'horsefeathers', - 'horseflesh', - 'horsefleshes', - 'horseflies', - 'horsehairs', - 'horsehides', - 'horselaugh', - 'horselaughs', - 'horsemanship', - 'horsemanships', - 'horsemints', - 'horseplayer', - 'horseplayers', - 'horseplays', - 'horsepower', - 'horsepowers', - 'horsepoxes', - 'horseradish', - 'horseradishes', - 'horseshits', - 'horseshoed', - 'horseshoeing', - 'horseshoer', - 'horseshoers', - 'horseshoes', - 'horsetails', - 'horseweeds', - 'horsewhipped', - 'horsewhipper', - 'horsewhippers', - 'horsewhipping', - 'horsewhips', - 'horsewoman', - 'horsewomen', - 'horsinesses', - 'hortatively', - 'horticultural', - 'horticulturally', - 'horticulture', - 'horticultures', - 'horticulturist', - 'horticulturists', - 'hosannaing', - 'hospitable', - 'hospitably', - 'hospitalise', - 'hospitalised', - 'hospitalises', - 'hospitalising', - 'hospitalities', - 'hospitality', - 'hospitalization', - 'hospitalizations', - 'hospitalize', - 'hospitalized', - 'hospitalizes', - 'hospitalizing', - 'hostellers', - 'hostelling', - 'hostelries', - 'hostessing', - 'hostilities', - 'hotchpotch', - 'hotchpotches', - 'hotdoggers', - 'hotdogging', - 'hotfooting', - 'hotheadedly', - 'hotheadedness', - 'hotheadednesses', - 'hotpressed', - 'hotpresses', - 'hotpressing', - 'hourglasses', - 'houseboater', - 'houseboaters', - 'houseboats', - 'housebound', - 'housebreak', - 'housebreaker', - 'housebreakers', - 'housebreaking', - 'housebreakings', - 'housebreaks', - 'housebroke', - 'housebroken', - 'housecarls', - 'houseclean', - 'housecleaned', - 'housecleaning', - 'housecleanings', - 'housecleans', - 'housecoats', - 'housedress', - 'housedresses', - 'housefather', - 'housefathers', - 'houseflies', - 'housefront', - 'housefronts', - 'houseguest', - 'houseguests', - 'householder', - 'householders', - 'households', - 'househusband', - 'househusbands', - 'housekeeper', - 'housekeepers', - 'housekeeping', - 'housekeepings', - 'housekeeps', - 'houseleeks', - 'houselessness', - 'houselessnesses', - 'houselights', - 'houselling', - 'housemaids', - 'housemaster', - 'housemasters', - 'housemates', - 'housemother', - 'housemothers', - 'housepainter', - 'housepainters', - 'houseparent', - 'houseparents', - 'houseperson', - 'housepersons', - 'houseplant', - 'houseplants', - 'houserooms', - 'housesitting', - 'housewares', - 'housewarming', - 'housewarmings', - 'housewifeliness', - 'housewifelinesses', - 'housewifely', - 'housewiferies', - 'housewifery', - 'housewifey', - 'housewives', - 'houseworks', - 'hovercraft', - 'hovercrafts', - 'huckabacks', - 'huckleberries', - 'huckleberry', - 'huckstered', - 'huckstering', - 'hucksterism', - 'hucksterisms', - 'huffinesses', - 'hugenesses', - 'hullabaloo', - 'hullabaloos', - 'humaneness', - 'humanenesses', - 'humanising', - 'humanistic', - 'humanistically', - 'humanitarian', - 'humanitarianism', - 'humanitarianisms', - 'humanitarians', - 'humanities', - 'humanization', - 'humanizations', - 'humanizers', - 'humanizing', - 'humannesses', - 'humbleness', - 'humblenesses', - 'humblingly', - 'humbuggeries', - 'humbuggery', - 'humbugging', - 'humdingers', - 'humectants', - 'humidification', - 'humidifications', - 'humidified', - 'humidifier', - 'humidifiers', - 'humidifies', - 'humidifying', - 'humidistat', - 'humidistats', - 'humidities', - 'humification', - 'humifications', - 'humiliated', - 'humiliates', - 'humiliating', - 'humiliatingly', - 'humiliation', - 'humiliations', - 'humilities', - 'hummingbird', - 'hummingbirds', - 'hummocking', - 'humoresque', - 'humoresques', - 'humoristic', - 'humorlessly', - 'humorlessness', - 'humorlessnesses', - 'humorously', - 'humorousness', - 'humorousnesses', - 'humpbacked', - 'hunchbacked', - 'hunchbacks', - 'hundredfold', - 'hundredths', - 'hundredweight', - 'hundredweights', - 'hungriness', - 'hungrinesses', - 'huntresses', - 'hurricanes', - 'hurriedness', - 'hurriednesses', - 'hurtfulness', - 'hurtfulnesses', - 'husbanders', - 'husbanding', - 'husbandman', - 'husbandmen', - 'husbandries', - 'huskinesses', - 'hyacinthine', - 'hyaloplasm', - 'hyaloplasms', - 'hyaluronidase', - 'hyaluronidases', - 'hybridisms', - 'hybridities', - 'hybridization', - 'hybridizations', - 'hybridized', - 'hybridizer', - 'hybridizers', - 'hybridizes', - 'hybridizing', - 'hybridomas', - 'hydathodes', - 'hydralazine', - 'hydralazines', - 'hydrangeas', - 'hydrations', - 'hydraulically', - 'hydraulics', - 'hydrazides', - 'hydrazines', - 'hydrobiological', - 'hydrobiologies', - 'hydrobiologist', - 'hydrobiologists', - 'hydrobiology', - 'hydrocarbon', - 'hydrocarbons', - 'hydroceles', - 'hydrocephalic', - 'hydrocephalics', - 'hydrocephalies', - 'hydrocephalus', - 'hydrocephaluses', - 'hydrocephaly', - 'hydrochloride', - 'hydrochlorides', - 'hydrochlorothiazide', - 'hydrochlorothiazides', - 'hydrocolloid', - 'hydrocolloidal', - 'hydrocolloids', - 'hydrocortisone', - 'hydrocortisones', - 'hydrocrack', - 'hydrocracked', - 'hydrocracker', - 'hydrocrackers', - 'hydrocracking', - 'hydrocrackings', - 'hydrocracks', - 'hydrodynamic', - 'hydrodynamical', - 'hydrodynamically', - 'hydrodynamicist', - 'hydrodynamicists', - 'hydrodynamics', - 'hydroelectric', - 'hydroelectrically', - 'hydroelectricities', - 'hydroelectricity', - 'hydrofoils', - 'hydrogenase', - 'hydrogenases', - 'hydrogenate', - 'hydrogenated', - 'hydrogenates', - 'hydrogenating', - 'hydrogenation', - 'hydrogenations', - 'hydrogenous', - 'hydrographer', - 'hydrographers', - 'hydrographic', - 'hydrographies', - 'hydrography', - 'hydrokinetic', - 'hydrolases', - 'hydrologic', - 'hydrological', - 'hydrologically', - 'hydrologies', - 'hydrologist', - 'hydrologists', - 'hydrolysate', - 'hydrolysates', - 'hydrolyses', - 'hydrolysis', - 'hydrolytic', - 'hydrolytically', - 'hydrolyzable', - 'hydrolyzate', - 'hydrolyzates', - 'hydrolyzed', - 'hydrolyzes', - 'hydrolyzing', - 'hydromagnetic', - 'hydromancies', - 'hydromancy', - 'hydromechanical', - 'hydromechanics', - 'hydromedusa', - 'hydromedusae', - 'hydrometallurgical', - 'hydrometallurgies', - 'hydrometallurgist', - 'hydrometallurgists', - 'hydrometallurgy', - 'hydrometeor', - 'hydrometeorological', - 'hydrometeorologies', - 'hydrometeorologist', - 'hydrometeorologists', - 'hydrometeorology', - 'hydrometeors', - 'hydrometer', - 'hydrometers', - 'hydrometric', - 'hydromorphic', - 'hydronically', - 'hydroniums', - 'hydropathic', - 'hydropathies', - 'hydropathy', - 'hydroperoxide', - 'hydroperoxides', - 'hydrophane', - 'hydrophanes', - 'hydrophilic', - 'hydrophilicities', - 'hydrophilicity', - 'hydrophobia', - 'hydrophobias', - 'hydrophobic', - 'hydrophobicities', - 'hydrophobicity', - 'hydrophone', - 'hydrophones', - 'hydrophyte', - 'hydrophytes', - 'hydrophytic', - 'hydroplane', - 'hydroplaned', - 'hydroplanes', - 'hydroplaning', - 'hydroponic', - 'hydroponically', - 'hydroponics', - 'hydropower', - 'hydropowers', - 'hydropsies', - 'hydroquinone', - 'hydroquinones', - 'hydroseres', - 'hydrosolic', - 'hydrospace', - 'hydrospaces', - 'hydrosphere', - 'hydrospheres', - 'hydrospheric', - 'hydrostatic', - 'hydrostatically', - 'hydrostatics', - 'hydrotherapies', - 'hydrotherapy', - 'hydrothermal', - 'hydrothermally', - 'hydrothoraces', - 'hydrothorax', - 'hydrothoraxes', - 'hydrotropic', - 'hydrotropism', - 'hydrotropisms', - 'hydroxides', - 'hydroxyapatite', - 'hydroxyapatites', - 'hydroxylamine', - 'hydroxylamines', - 'hydroxylapatite', - 'hydroxylapatites', - 'hydroxylase', - 'hydroxylases', - 'hydroxylate', - 'hydroxylated', - 'hydroxylates', - 'hydroxylating', - 'hydroxylation', - 'hydroxylations', - 'hydroxylic', - 'hydroxyproline', - 'hydroxyprolines', - 'hydroxytryptamine', - 'hydroxytryptamines', - 'hydroxyurea', - 'hydroxyureas', - 'hydroxyzine', - 'hydroxyzines', - 'hydrozoans', - 'hygienically', - 'hygienists', - 'hygrograph', - 'hygrographs', - 'hygrometer', - 'hygrometers', - 'hygrometric', - 'hygrophilous', - 'hygrophyte', - 'hygrophytes', - 'hygrophytic', - 'hygroscopic', - 'hygroscopicities', - 'hygroscopicity', - 'hylozoisms', - 'hylozoistic', - 'hylozoists', - 'hymeneally', - 'hymenoptera', - 'hymenopteran', - 'hymenopterans', - 'hymenopteron', - 'hymenopterons', - 'hymenopterous', - 'hymnologies', - 'hyoscyamine', - 'hyoscyamines', - 'hypabyssal', - 'hypabyssally', - 'hypaethral', - 'hypallages', - 'hypanthium', - 'hyperacidities', - 'hyperacidity', - 'hyperactive', - 'hyperactives', - 'hyperactivities', - 'hyperactivity', - 'hyperacuities', - 'hyperacuity', - 'hyperacute', - 'hyperaesthesia', - 'hyperaesthesias', - 'hyperaesthetic', - 'hyperaggressive', - 'hyperalert', - 'hyperalimentation', - 'hyperalimentations', - 'hyperarousal', - 'hyperarousals', - 'hyperaware', - 'hyperawareness', - 'hyperawarenesses', - 'hyperbaric', - 'hyperbarically', - 'hyperbolae', - 'hyperbolas', - 'hyperboles', - 'hyperbolic', - 'hyperbolical', - 'hyperbolically', - 'hyperbolist', - 'hyperbolists', - 'hyperbolize', - 'hyperbolized', - 'hyperbolizes', - 'hyperbolizing', - 'hyperboloid', - 'hyperboloidal', - 'hyperboloids', - 'hyperborean', - 'hyperboreans', - 'hypercalcemia', - 'hypercalcemias', - 'hypercalcemic', - 'hypercapnia', - 'hypercapnias', - 'hypercapnic', - 'hypercatabolism', - 'hypercatabolisms', - 'hypercatalectic', - 'hypercatalexes', - 'hypercatalexis', - 'hypercautious', - 'hypercharge', - 'hypercharged', - 'hypercharges', - 'hypercholesterolemia', - 'hypercholesterolemias', - 'hypercholesterolemic', - 'hypercivilized', - 'hypercoagulabilities', - 'hypercoagulability', - 'hypercoagulable', - 'hypercompetitive', - 'hypercomplex', - 'hyperconcentration', - 'hyperconcentrations', - 'hyperconscious', - 'hyperconsciousness', - 'hyperconsciousnesses', - 'hypercorrect', - 'hypercorrection', - 'hypercorrections', - 'hypercorrectly', - 'hypercorrectness', - 'hypercorrectnesses', - 'hypercritic', - 'hypercritical', - 'hypercritically', - 'hypercriticism', - 'hypercriticisms', - 'hypercritics', - 'hypercubes', - 'hyperdevelopment', - 'hyperdevelopments', - 'hyperefficient', - 'hyperemias', - 'hyperemotional', - 'hyperemotionalities', - 'hyperemotionality', - 'hyperendemic', - 'hyperenergetic', - 'hyperesthesia', - 'hyperesthesias', - 'hyperesthetic', - 'hypereutectic', - 'hypereutectoid', - 'hyperexcitabilities', - 'hyperexcitability', - 'hyperexcitable', - 'hyperexcited', - 'hyperexcitement', - 'hyperexcitements', - 'hyperexcretion', - 'hyperexcretions', - 'hyperextend', - 'hyperextended', - 'hyperextending', - 'hyperextends', - 'hyperextension', - 'hyperextensions', - 'hyperfastidious', - 'hyperfunction', - 'hyperfunctional', - 'hyperfunctioning', - 'hyperfunctions', - 'hypergamies', - 'hyperglycemia', - 'hyperglycemias', - 'hyperglycemic', - 'hypergolic', - 'hypergolically', - 'hyperhidroses', - 'hyperhidrosis', - 'hyperimmune', - 'hyperimmunization', - 'hyperimmunizations', - 'hyperimmunize', - 'hyperimmunized', - 'hyperimmunizes', - 'hyperimmunizing', - 'hyperinflated', - 'hyperinflation', - 'hyperinflationary', - 'hyperinflations', - 'hyperinnervation', - 'hyperinnervations', - 'hyperinsulinism', - 'hyperinsulinisms', - 'hyperintellectual', - 'hyperintelligent', - 'hyperintense', - 'hyperinvolution', - 'hyperinvolutions', - 'hyperirritabilities', - 'hyperirritability', - 'hyperirritable', - 'hyperkeratoses', - 'hyperkeratosis', - 'hyperkeratotic', - 'hyperkineses', - 'hyperkinesia', - 'hyperkinesias', - 'hyperkinesis', - 'hyperkinetic', - 'hyperlipemia', - 'hyperlipemias', - 'hyperlipemic', - 'hyperlipidemia', - 'hyperlipidemias', - 'hypermania', - 'hypermanias', - 'hypermanic', - 'hypermarket', - 'hypermarkets', - 'hypermasculine', - 'hypermedia', - 'hypermetabolic', - 'hypermetabolism', - 'hypermetabolisms', - 'hypermeter', - 'hypermeters', - 'hypermetric', - 'hypermetrical', - 'hypermetropia', - 'hypermetropias', - 'hypermetropic', - 'hypermnesia', - 'hypermnesias', - 'hypermnesic', - 'hypermobilities', - 'hypermobility', - 'hypermodern', - 'hypermodernist', - 'hypermodernists', - 'hypermutabilities', - 'hypermutability', - 'hypermutable', - 'hypernationalistic', - 'hyperopias', - 'hyperostoses', - 'hyperostosis', - 'hyperostotic', - 'hyperparasite', - 'hyperparasites', - 'hyperparasitic', - 'hyperparasitism', - 'hyperparasitisms', - 'hyperparathyroidism', - 'hyperparathyroidisms', - 'hyperphagia', - 'hyperphagias', - 'hyperphagic', - 'hyperphysical', - 'hyperpigmentation', - 'hyperpigmentations', - 'hyperpigmented', - 'hyperpituitarism', - 'hyperpituitarisms', - 'hyperpituitary', - 'hyperplane', - 'hyperplanes', - 'hyperplasia', - 'hyperplasias', - 'hyperplastic', - 'hyperploid', - 'hyperploidies', - 'hyperploids', - 'hyperploidy', - 'hyperpneas', - 'hyperpneic', - 'hyperpolarization', - 'hyperpolarizations', - 'hyperpolarize', - 'hyperpolarized', - 'hyperpolarizes', - 'hyperpolarizing', - 'hyperproducer', - 'hyperproducers', - 'hyperproduction', - 'hyperproductions', - 'hyperpyrexia', - 'hyperpyrexias', - 'hyperrational', - 'hyperrationalities', - 'hyperrationality', - 'hyperreactive', - 'hyperreactivities', - 'hyperreactivity', - 'hyperreactor', - 'hyperreactors', - 'hyperrealism', - 'hyperrealisms', - 'hyperrealist', - 'hyperrealistic', - 'hyperresponsive', - 'hyperromantic', - 'hypersaline', - 'hypersalinities', - 'hypersalinity', - 'hypersalivation', - 'hypersalivations', - 'hypersecretion', - 'hypersecretions', - 'hypersensitive', - 'hypersensitiveness', - 'hypersensitivenesses', - 'hypersensitivities', - 'hypersensitivity', - 'hypersensitization', - 'hypersensitizations', - 'hypersensitize', - 'hypersensitized', - 'hypersensitizes', - 'hypersensitizing', - 'hypersexual', - 'hypersexualities', - 'hypersexuality', - 'hypersomnolence', - 'hypersomnolences', - 'hypersonic', - 'hypersonically', - 'hyperspace', - 'hyperspaces', - 'hyperstatic', - 'hypersthene', - 'hypersthenes', - 'hypersthenic', - 'hyperstimulate', - 'hyperstimulated', - 'hyperstimulates', - 'hyperstimulating', - 'hyperstimulation', - 'hyperstimulations', - 'hypersurface', - 'hypersurfaces', - 'hypersusceptibilities', - 'hypersusceptibility', - 'hypersusceptible', - 'hypertense', - 'hypertension', - 'hypertensions', - 'hypertensive', - 'hypertensives', - 'hypertexts', - 'hyperthermia', - 'hyperthermias', - 'hyperthermic', - 'hyperthyroid', - 'hyperthyroidism', - 'hyperthyroidisms', - 'hypertonia', - 'hypertonias', - 'hypertonic', - 'hypertonicities', - 'hypertonicity', - 'hypertrophic', - 'hypertrophied', - 'hypertrophies', - 'hypertrophy', - 'hypertrophying', - 'hypertypical', - 'hyperurbanism', - 'hyperurbanisms', - 'hyperuricemia', - 'hyperuricemias', - 'hypervelocities', - 'hypervelocity', - 'hyperventilate', - 'hyperventilated', - 'hyperventilates', - 'hyperventilating', - 'hyperventilation', - 'hyperventilations', - 'hypervigilance', - 'hypervigilances', - 'hypervigilant', - 'hypervirulent', - 'hyperviscosities', - 'hyperviscosity', - 'hypervitaminoses', - 'hypervitaminosis', - 'hyphenated', - 'hyphenates', - 'hyphenating', - 'hyphenation', - 'hyphenations', - 'hyphenless', - 'hypnagogic', - 'hypnogogic', - 'hypnopompic', - 'hypnotherapies', - 'hypnotherapist', - 'hypnotherapists', - 'hypnotherapy', - 'hypnotically', - 'hypnotisms', - 'hypnotists', - 'hypnotizabilities', - 'hypnotizability', - 'hypnotizable', - 'hypnotized', - 'hypnotizes', - 'hypnotizing', - 'hypoallergenic', - 'hypoblasts', - 'hypocalcemia', - 'hypocalcemias', - 'hypocalcemic', - 'hypocausts', - 'hypocenter', - 'hypocenters', - 'hypocentral', - 'hypochlorite', - 'hypochlorites', - 'hypochondria', - 'hypochondriac', - 'hypochondriacal', - 'hypochondriacally', - 'hypochondriacs', - 'hypochondrias', - 'hypochondriases', - 'hypochondriasis', - 'hypocorism', - 'hypocorisms', - 'hypocoristic', - 'hypocoristical', - 'hypocoristically', - 'hypocotyls', - 'hypocrisies', - 'hypocrites', - 'hypocritical', - 'hypocritically', - 'hypocycloid', - 'hypocycloids', - 'hypodermal', - 'hypodermic', - 'hypodermically', - 'hypodermics', - 'hypodermis', - 'hypodermises', - 'hypodiploid', - 'hypodiploidies', - 'hypodiploidy', - 'hypoeutectoid', - 'hypogastric', - 'hypoglossal', - 'hypoglossals', - 'hypoglycemia', - 'hypoglycemias', - 'hypoglycemic', - 'hypoglycemics', - 'hypogynies', - 'hypogynous', - 'hypokalemia', - 'hypokalemias', - 'hypokalemic', - 'hypolimnia', - 'hypolimnion', - 'hypolimnions', - 'hypomagnesemia', - 'hypomagnesemias', - 'hypomanias', - 'hypomorphic', - 'hypomorphs', - 'hypoparathyroidism', - 'hypoparathyroidisms', - 'hypopharynges', - 'hypopharynx', - 'hypopharynxes', - 'hypophyseal', - 'hypophysectomies', - 'hypophysectomize', - 'hypophysectomized', - 'hypophysectomizes', - 'hypophysectomizing', - 'hypophysectomy', - 'hypophyses', - 'hypophysial', - 'hypophysis', - 'hypopituitarism', - 'hypopituitarisms', - 'hypopituitary', - 'hypoplasia', - 'hypoplasias', - 'hypoplastic', - 'hypoploids', - 'hyposensitization', - 'hyposensitizations', - 'hyposensitize', - 'hyposensitized', - 'hyposensitizes', - 'hyposensitizing', - 'hypospadias', - 'hypospadiases', - 'hypostases', - 'hypostasis', - 'hypostatic', - 'hypostatically', - 'hypostatization', - 'hypostatizations', - 'hypostatize', - 'hypostatized', - 'hypostatizes', - 'hypostatizing', - 'hypostomes', - 'hypostyles', - 'hypotactic', - 'hypotension', - 'hypotensions', - 'hypotensive', - 'hypotensives', - 'hypotenuse', - 'hypotenuses', - 'hypothalami', - 'hypothalamic', - 'hypothalamus', - 'hypothecate', - 'hypothecated', - 'hypothecates', - 'hypothecating', - 'hypothecation', - 'hypothecations', - 'hypothecator', - 'hypothecators', - 'hypothenuse', - 'hypothenuses', - 'hypothermal', - 'hypothermia', - 'hypothermias', - 'hypothermic', - 'hypotheses', - 'hypothesis', - 'hypothesize', - 'hypothesized', - 'hypothesizes', - 'hypothesizing', - 'hypothetical', - 'hypothetically', - 'hypothyroid', - 'hypothyroidism', - 'hypothyroidisms', - 'hypotonias', - 'hypotonicities', - 'hypotonicity', - 'hypoxanthine', - 'hypoxanthines', - 'hypoxemias', - 'hypsometer', - 'hypsometers', - 'hypsometric', - 'hysterectomies', - 'hysterectomized', - 'hysterectomy', - 'hystereses', - 'hysteresis', - 'hysteretic', - 'hysterical', - 'hysterically', - 'hysterotomies', - 'hysterotomy', - 'iatrogenic', - 'iatrogenically', - 'ibuprofens', - 'iceboaters', - 'iceboating', - 'iceboatings', - 'icebreaker', - 'icebreakers', - 'ichneumons', - 'ichthyofauna', - 'ichthyofaunae', - 'ichthyofaunal', - 'ichthyofaunas', - 'ichthyological', - 'ichthyologically', - 'ichthyologies', - 'ichthyologist', - 'ichthyologists', - 'ichthyology', - 'ichthyophagous', - 'ichthyosaur', - 'ichthyosaurian', - 'ichthyosaurians', - 'ichthyosaurs', - 'ickinesses', - 'iconically', - 'iconicities', - 'iconoclasm', - 'iconoclasms', - 'iconoclast', - 'iconoclastic', - 'iconoclastically', - 'iconoclasts', - 'iconographer', - 'iconographers', - 'iconographic', - 'iconographical', - 'iconographically', - 'iconographies', - 'iconography', - 'iconolatries', - 'iconolatry', - 'iconological', - 'iconologies', - 'iconoscope', - 'iconoscopes', - 'iconostases', - 'iconostasis', - 'icosahedra', - 'icosahedral', - 'icosahedron', - 'icosahedrons', - 'idealising', - 'idealistic', - 'idealistically', - 'idealities', - 'idealization', - 'idealizations', - 'idealizers', - 'idealizing', - 'idealogies', - 'idealogues', - 'ideational', - 'ideationally', - 'idempotent', - 'idempotents', - 'identically', - 'identicalness', - 'identicalnesses', - 'identifiable', - 'identifiably', - 'identification', - 'identifications', - 'identified', - 'identifier', - 'identifiers', - 'identifies', - 'identifying', - 'identities', - 'ideogramic', - 'ideogrammatic', - 'ideogrammic', - 'ideographic', - 'ideographically', - 'ideographies', - 'ideographs', - 'ideography', - 'ideological', - 'ideologically', - 'ideologies', - 'ideologist', - 'ideologists', - 'ideologize', - 'ideologized', - 'ideologizes', - 'ideologizing', - 'ideologues', - 'idioblastic', - 'idioblasts', - 'idiographic', - 'idiolectal', - 'idiomatically', - 'idiomaticness', - 'idiomaticnesses', - 'idiomorphic', - 'idiopathic', - 'idiopathically', - 'idiosyncrasies', - 'idiosyncrasy', - 'idiosyncratic', - 'idiosyncratically', - 'idiotically', - 'idlenesses', - 'idolatries', - 'idolatrous', - 'idolatrously', - 'idolatrousness', - 'idolatrousnesses', - 'idolization', - 'idolizations', - 'idoneities', - 'idyllically', - 'iffinesses', - 'ignimbrite', - 'ignimbrites', - 'ignitabilities', - 'ignitability', - 'ignobilities', - 'ignobility', - 'ignobleness', - 'ignoblenesses', - 'ignominies', - 'ignominious', - 'ignominiously', - 'ignominiousness', - 'ignominiousnesses', - 'ignoramuses', - 'ignorances', - 'ignorantly', - 'ignorantness', - 'ignorantnesses', - 'iguanodons', - 'illatively', - 'illaudable', - 'illaudably', - 'illegalities', - 'illegality', - 'illegalization', - 'illegalizations', - 'illegalize', - 'illegalized', - 'illegalizes', - 'illegalizing', - 'illegibilities', - 'illegibility', - 'illegitimacies', - 'illegitimacy', - 'illegitimate', - 'illegitimately', - 'illiberalism', - 'illiberalisms', - 'illiberalities', - 'illiberality', - 'illiberally', - 'illiberalness', - 'illiberalnesses', - 'illimitabilities', - 'illimitability', - 'illimitable', - 'illimitableness', - 'illimitablenesses', - 'illimitably', - 'illiquidities', - 'illiquidity', - 'illiteracies', - 'illiteracy', - 'illiterate', - 'illiterately', - 'illiterateness', - 'illiteratenesses', - 'illiterates', - 'illocutionary', - 'illogicalities', - 'illogicality', - 'illogically', - 'illogicalness', - 'illogicalnesses', - 'illuminable', - 'illuminance', - 'illuminances', - 'illuminant', - 'illuminants', - 'illuminate', - 'illuminated', - 'illuminates', - 'illuminati', - 'illuminating', - 'illuminatingly', - 'illumination', - 'illuminations', - 'illuminative', - 'illuminator', - 'illuminators', - 'illumining', - 'illuminism', - 'illuminisms', - 'illuminist', - 'illuminists', - 'illusional', - 'illusionary', - 'illusionism', - 'illusionisms', - 'illusionist', - 'illusionistic', - 'illusionistically', - 'illusionists', - 'illusively', - 'illusiveness', - 'illusivenesses', - 'illusorily', - 'illusoriness', - 'illusorinesses', - 'illustrate', - 'illustrated', - 'illustrates', - 'illustrating', - 'illustration', - 'illustrational', - 'illustrations', - 'illustrative', - 'illustratively', - 'illustrator', - 'illustrators', - 'illustrious', - 'illustriously', - 'illustriousness', - 'illustriousnesses', - 'illuviated', - 'illuviation', - 'illuviations', - 'imaginable', - 'imaginableness', - 'imaginablenesses', - 'imaginably', - 'imaginaries', - 'imaginarily', - 'imaginariness', - 'imaginarinesses', - 'imagination', - 'imaginations', - 'imaginative', - 'imaginatively', - 'imaginativeness', - 'imaginativenesses', - 'imagistically', - 'imbalanced', - 'imbalances', - 'imbecilities', - 'imbecility', - 'imbibition', - 'imbibitional', - 'imbibitions', - 'imbittered', - 'imbittering', - 'imboldened', - 'imboldening', - 'imbosoming', - 'imbowering', - 'imbricated', - 'imbricates', - 'imbricating', - 'imbrication', - 'imbrications', - 'imbroglios', - 'imbrowning', - 'imidazoles', - 'imipramine', - 'imipramines', - 'imitations', - 'imitatively', - 'imitativeness', - 'imitativenesses', - 'immaculacies', - 'immaculacy', - 'immaculate', - 'immaculately', - 'immanences', - 'immanencies', - 'immanentism', - 'immanentisms', - 'immanentist', - 'immanentistic', - 'immanentists', - 'immanently', - 'immaterial', - 'immaterialism', - 'immaterialisms', - 'immaterialist', - 'immaterialists', - 'immaterialities', - 'immateriality', - 'immaterialize', - 'immaterialized', - 'immaterializes', - 'immaterializing', - 'immaturely', - 'immaturities', - 'immaturity', - 'immeasurable', - 'immeasurableness', - 'immeasurablenesses', - 'immeasurably', - 'immediacies', - 'immediately', - 'immediateness', - 'immediatenesses', - 'immedicable', - 'immedicably', - 'immemorial', - 'immemorially', - 'immenseness', - 'immensenesses', - 'immensities', - 'immensurable', - 'immersible', - 'immersions', - 'immethodical', - 'immethodically', - 'immigrants', - 'immigrated', - 'immigrates', - 'immigrating', - 'immigration', - 'immigrational', - 'immigrations', - 'imminences', - 'imminencies', - 'imminently', - 'immingling', - 'immiscibilities', - 'immiscibility', - 'immiscible', - 'immitigable', - 'immitigably', - 'immittance', - 'immittances', - 'immixtures', - 'immobilism', - 'immobilisms', - 'immobilities', - 'immobility', - 'immobilization', - 'immobilizations', - 'immobilize', - 'immobilized', - 'immobilizer', - 'immobilizers', - 'immobilizes', - 'immobilizing', - 'immoderacies', - 'immoderacy', - 'immoderate', - 'immoderately', - 'immoderateness', - 'immoderatenesses', - 'immoderation', - 'immoderations', - 'immodesties', - 'immodestly', - 'immolating', - 'immolation', - 'immolations', - 'immolators', - 'immoralism', - 'immoralisms', - 'immoralist', - 'immoralists', - 'immoralities', - 'immorality', - 'immortalise', - 'immortalised', - 'immortalises', - 'immortalising', - 'immortalities', - 'immortality', - 'immortalization', - 'immortalizations', - 'immortalize', - 'immortalized', - 'immortalizer', - 'immortalizers', - 'immortalizes', - 'immortalizing', - 'immortally', - 'immortelle', - 'immortelles', - 'immovabilities', - 'immovability', - 'immovableness', - 'immovablenesses', - 'immovables', - 'immunising', - 'immunities', - 'immunization', - 'immunizations', - 'immunizing', - 'immunoassay', - 'immunoassayable', - 'immunoassays', - 'immunoblot', - 'immunoblots', - 'immunoblotting', - 'immunoblottings', - 'immunochemical', - 'immunochemically', - 'immunochemist', - 'immunochemistries', - 'immunochemistry', - 'immunochemists', - 'immunocompetence', - 'immunocompetences', - 'immunocompetent', - 'immunocompromised', - 'immunocytochemical', - 'immunocytochemically', - 'immunocytochemistries', - 'immunocytochemistry', - 'immunodeficiencies', - 'immunodeficiency', - 'immunodeficient', - 'immunodiagnoses', - 'immunodiagnosis', - 'immunodiagnostic', - 'immunodiffusion', - 'immunodiffusions', - 'immunoelectrophoreses', - 'immunoelectrophoresis', - 'immunoelectrophoretic', - 'immunoelectrophoretically', - 'immunofluorescence', - 'immunofluorescences', - 'immunofluorescent', - 'immunogeneses', - 'immunogenesis', - 'immunogenetic', - 'immunogenetically', - 'immunogeneticist', - 'immunogeneticists', - 'immunogenetics', - 'immunogenic', - 'immunogenicities', - 'immunogenicity', - 'immunogens', - 'immunoglobulin', - 'immunoglobulins', - 'immunohematologic', - 'immunohematological', - 'immunohematologies', - 'immunohematologist', - 'immunohematologists', - 'immunohematology', - 'immunohistochemical', - 'immunohistochemistries', - 'immunohistochemistry', - 'immunologic', - 'immunological', - 'immunologically', - 'immunologies', - 'immunologist', - 'immunologists', - 'immunology', - 'immunomodulator', - 'immunomodulators', - 'immunomodulatory', - 'immunopathologic', - 'immunopathological', - 'immunopathologies', - 'immunopathologist', - 'immunopathologists', - 'immunopathology', - 'immunoprecipitate', - 'immunoprecipitated', - 'immunoprecipitates', - 'immunoprecipitating', - 'immunoprecipitation', - 'immunoprecipitations', - 'immunoreactive', - 'immunoreactivities', - 'immunoreactivity', - 'immunoregulation', - 'immunoregulations', - 'immunoregulatory', - 'immunosorbent', - 'immunosorbents', - 'immunosuppress', - 'immunosuppressant', - 'immunosuppressants', - 'immunosuppressed', - 'immunosuppresses', - 'immunosuppressing', - 'immunosuppression', - 'immunosuppressions', - 'immunosuppressive', - 'immunotherapeutic', - 'immunotherapies', - 'immunotherapy', - 'immurement', - 'immurements', - 'immutabilities', - 'immutability', - 'immutableness', - 'immutablenesses', - 'impactions', - 'impainting', - 'impairment', - 'impairments', - 'impalement', - 'impalements', - 'impalpabilities', - 'impalpability', - 'impalpable', - 'impalpably', - 'impaneling', - 'impanelled', - 'impanelling', - 'imparadise', - 'imparadised', - 'imparadises', - 'imparadising', - 'imparities', - 'impartation', - 'impartations', - 'impartialities', - 'impartiality', - 'impartially', - 'impartible', - 'impartibly', - 'impartment', - 'impartments', - 'impassabilities', - 'impassability', - 'impassable', - 'impassableness', - 'impassablenesses', - 'impassably', - 'impassibilities', - 'impassibility', - 'impassible', - 'impassibly', - 'impassioned', - 'impassioning', - 'impassions', - 'impassively', - 'impassiveness', - 'impassivenesses', - 'impassivities', - 'impassivity', - 'impatience', - 'impatiences', - 'impatiently', - 'impeachable', - 'impeaching', - 'impeachment', - 'impeachments', - 'impearling', - 'impeccabilities', - 'impeccability', - 'impeccable', - 'impeccably', - 'impecuniosities', - 'impecuniosity', - 'impecunious', - 'impecuniously', - 'impecuniousness', - 'impecuniousnesses', - 'impedances', - 'impediment', - 'impedimenta', - 'impediments', - 'impenetrabilities', - 'impenetrability', - 'impenetrable', - 'impenetrably', - 'impenitence', - 'impenitences', - 'impenitent', - 'impenitently', - 'imperative', - 'imperatively', - 'imperativeness', - 'imperativenesses', - 'imperatives', - 'imperatorial', - 'imperators', - 'imperceivable', - 'imperceptible', - 'imperceptibly', - 'imperceptive', - 'imperceptiveness', - 'imperceptivenesses', - 'impercipience', - 'impercipiences', - 'impercipient', - 'imperfection', - 'imperfections', - 'imperfective', - 'imperfectives', - 'imperfectly', - 'imperfectness', - 'imperfectnesses', - 'imperfects', - 'imperforate', - 'imperialism', - 'imperialisms', - 'imperialist', - 'imperialistic', - 'imperialistically', - 'imperialists', - 'imperially', - 'imperiling', - 'imperilled', - 'imperilling', - 'imperilment', - 'imperilments', - 'imperiously', - 'imperiousness', - 'imperiousnesses', - 'imperishabilities', - 'imperishability', - 'imperishable', - 'imperishableness', - 'imperishablenesses', - 'imperishables', - 'imperishably', - 'impermanence', - 'impermanences', - 'impermanencies', - 'impermanency', - 'impermanent', - 'impermanently', - 'impermeabilities', - 'impermeability', - 'impermeable', - 'impermissibilities', - 'impermissibility', - 'impermissible', - 'impermissibly', - 'impersonal', - 'impersonalities', - 'impersonality', - 'impersonalization', - 'impersonalizations', - 'impersonalize', - 'impersonalized', - 'impersonalizes', - 'impersonalizing', - 'impersonally', - 'impersonate', - 'impersonated', - 'impersonates', - 'impersonating', - 'impersonation', - 'impersonations', - 'impersonator', - 'impersonators', - 'impertinence', - 'impertinences', - 'impertinencies', - 'impertinency', - 'impertinent', - 'impertinently', - 'imperturbabilities', - 'imperturbability', - 'imperturbable', - 'imperturbably', - 'impervious', - 'imperviously', - 'imperviousness', - 'imperviousnesses', - 'impetiginous', - 'impetrated', - 'impetrates', - 'impetrating', - 'impetration', - 'impetrations', - 'impetuosities', - 'impetuosity', - 'impetuously', - 'impetuousness', - 'impetuousnesses', - 'impingement', - 'impingements', - 'impishness', - 'impishnesses', - 'implacabilities', - 'implacability', - 'implacable', - 'implacably', - 'implantable', - 'implantation', - 'implantations', - 'implanters', - 'implanting', - 'implausibilities', - 'implausibility', - 'implausible', - 'implausibly', - 'impleading', - 'impledging', - 'implementation', - 'implementations', - 'implemented', - 'implementer', - 'implementers', - 'implementing', - 'implementor', - 'implementors', - 'implements', - 'implicated', - 'implicates', - 'implicating', - 'implication', - 'implications', - 'implicative', - 'implicatively', - 'implicativeness', - 'implicativenesses', - 'implicitly', - 'implicitness', - 'implicitnesses', - 'imploringly', - 'implosions', - 'implosives', - 'impolicies', - 'impolitely', - 'impoliteness', - 'impolitenesses', - 'impolitical', - 'impolitically', - 'impoliticly', - 'imponderabilities', - 'imponderability', - 'imponderable', - 'imponderables', - 'imponderably', - 'importable', - 'importance', - 'importances', - 'importancies', - 'importancy', - 'importantly', - 'importation', - 'importations', - 'importunate', - 'importunately', - 'importunateness', - 'importunatenesses', - 'importuned', - 'importunely', - 'importuner', - 'importuners', - 'importunes', - 'importuning', - 'importunities', - 'importunity', - 'imposingly', - 'imposition', - 'impositions', - 'impossibilities', - 'impossibility', - 'impossible', - 'impossibleness', - 'impossiblenesses', - 'impossibly', - 'imposthume', - 'imposthumes', - 'impostumes', - 'impostures', - 'impotences', - 'impotencies', - 'impotently', - 'impounding', - 'impoundment', - 'impoundments', - 'impoverish', - 'impoverished', - 'impoverisher', - 'impoverishers', - 'impoverishes', - 'impoverishing', - 'impoverishment', - 'impoverishments', - 'impowering', - 'impracticabilities', - 'impracticability', - 'impracticable', - 'impracticably', - 'impractical', - 'impracticalities', - 'impracticality', - 'impractically', - 'imprecated', - 'imprecates', - 'imprecating', - 'imprecation', - 'imprecations', - 'imprecatory', - 'imprecisely', - 'impreciseness', - 'imprecisenesses', - 'imprecision', - 'imprecisions', - 'impregnabilities', - 'impregnability', - 'impregnable', - 'impregnableness', - 'impregnablenesses', - 'impregnably', - 'impregnant', - 'impregnants', - 'impregnate', - 'impregnated', - 'impregnates', - 'impregnating', - 'impregnation', - 'impregnations', - 'impregnator', - 'impregnators', - 'impregning', - 'impresario', - 'impresarios', - 'impressibilities', - 'impressibility', - 'impressible', - 'impressing', - 'impression', - 'impressionabilities', - 'impressionability', - 'impressionable', - 'impressionism', - 'impressionisms', - 'impressionist', - 'impressionistic', - 'impressionistically', - 'impressionists', - 'impressions', - 'impressive', - 'impressively', - 'impressiveness', - 'impressivenesses', - 'impressment', - 'impressments', - 'impressure', - 'impressures', - 'imprimatur', - 'imprimaturs', - 'imprinters', - 'imprinting', - 'imprintings', - 'imprisoned', - 'imprisoning', - 'imprisonment', - 'imprisonments', - 'improbabilities', - 'improbability', - 'improbable', - 'improbably', - 'impromptus', - 'improperly', - 'improperness', - 'impropernesses', - 'improprieties', - 'impropriety', - 'improvabilities', - 'improvability', - 'improvable', - 'improvement', - 'improvements', - 'improvidence', - 'improvidences', - 'improvident', - 'improvidently', - 'improvisation', - 'improvisational', - 'improvisationally', - 'improvisations', - 'improvisator', - 'improvisatore', - 'improvisatores', - 'improvisatori', - 'improvisatorial', - 'improvisators', - 'improvisatory', - 'improvised', - 'improviser', - 'improvisers', - 'improvises', - 'improvising', - 'improvisor', - 'improvisors', - 'imprudence', - 'imprudences', - 'imprudently', - 'impudences', - 'impudently', - 'impudicities', - 'impudicity', - 'impugnable', - 'impuissance', - 'impuissances', - 'impuissant', - 'impulsions', - 'impulsively', - 'impulsiveness', - 'impulsivenesses', - 'impulsivities', - 'impulsivity', - 'impunities', - 'impureness', - 'impurenesses', - 'impurities', - 'imputabilities', - 'imputability', - 'imputation', - 'imputations', - 'imputative', - 'imputatively', - 'inabilities', - 'inaccessibilities', - 'inaccessibility', - 'inaccessible', - 'inaccessibly', - 'inaccuracies', - 'inaccuracy', - 'inaccurate', - 'inaccurately', - 'inactivate', - 'inactivated', - 'inactivates', - 'inactivating', - 'inactivation', - 'inactivations', - 'inactively', - 'inactivities', - 'inactivity', - 'inadequacies', - 'inadequacy', - 'inadequate', - 'inadequately', - 'inadequateness', - 'inadequatenesses', - 'inadmissibilities', - 'inadmissibility', - 'inadmissible', - 'inadmissibly', - 'inadvertence', - 'inadvertences', - 'inadvertencies', - 'inadvertency', - 'inadvertent', - 'inadvertently', - 'inadvisabilities', - 'inadvisability', - 'inadvisable', - 'inalienabilities', - 'inalienability', - 'inalienable', - 'inalienably', - 'inalterabilities', - 'inalterability', - 'inalterable', - 'inalterableness', - 'inalterablenesses', - 'inalterably', - 'inamoratas', - 'inanenesses', - 'inanimately', - 'inanimateness', - 'inanimatenesses', - 'inanitions', - 'inapparent', - 'inapparently', - 'inappeasable', - 'inappetence', - 'inappetences', - 'inapplicabilities', - 'inapplicability', - 'inapplicable', - 'inapplicably', - 'inapposite', - 'inappositely', - 'inappositeness', - 'inappositenesses', - 'inappreciable', - 'inappreciably', - 'inappreciative', - 'inappreciatively', - 'inappreciativeness', - 'inappreciativenesses', - 'inapproachable', - 'inappropriate', - 'inappropriately', - 'inappropriateness', - 'inappropriatenesses', - 'inaptitude', - 'inaptitudes', - 'inaptnesses', - 'inarguable', - 'inarguably', - 'inarticulacies', - 'inarticulacy', - 'inarticulate', - 'inarticulately', - 'inarticulateness', - 'inarticulatenesses', - 'inarticulates', - 'inartistic', - 'inartistically', - 'inattention', - 'inattentions', - 'inattentive', - 'inattentively', - 'inattentiveness', - 'inattentivenesses', - 'inaudibilities', - 'inaudibility', - 'inaugurals', - 'inaugurate', - 'inaugurated', - 'inaugurates', - 'inaugurating', - 'inauguration', - 'inaugurations', - 'inaugurator', - 'inaugurators', - 'inauspicious', - 'inauspiciously', - 'inauspiciousness', - 'inauspiciousnesses', - 'inauthentic', - 'inauthenticities', - 'inauthenticity', - 'inbounding', - 'inbreathed', - 'inbreathes', - 'inbreathing', - 'inbreeding', - 'inbreedings', - 'incalculabilities', - 'incalculability', - 'incalculable', - 'incalculably', - 'incalescence', - 'incalescences', - 'incalescent', - 'incandesce', - 'incandesced', - 'incandescence', - 'incandescences', - 'incandescent', - 'incandescently', - 'incandescents', - 'incandesces', - 'incandescing', - 'incantation', - 'incantational', - 'incantations', - 'incantatory', - 'incapabilities', - 'incapability', - 'incapableness', - 'incapablenesses', - 'incapacitate', - 'incapacitated', - 'incapacitates', - 'incapacitating', - 'incapacitation', - 'incapacitations', - 'incapacities', - 'incapacity', - 'incarcerate', - 'incarcerated', - 'incarcerates', - 'incarcerating', - 'incarceration', - 'incarcerations', - 'incardination', - 'incardinations', - 'incarnadine', - 'incarnadined', - 'incarnadines', - 'incarnadining', - 'incarnated', - 'incarnates', - 'incarnating', - 'incarnation', - 'incarnations', - 'incautions', - 'incautious', - 'incautiously', - 'incautiousness', - 'incautiousnesses', - 'incendiaries', - 'incendiarism', - 'incendiarisms', - 'incendiary', - 'incentives', - 'inceptions', - 'inceptively', - 'inceptives', - 'incertitude', - 'incertitudes', - 'incessancies', - 'incessancy', - 'incessantly', - 'incestuous', - 'incestuously', - 'incestuousness', - 'incestuousnesses', - 'inchoately', - 'inchoateness', - 'inchoatenesses', - 'inchoative', - 'inchoatively', - 'inchoatives', - 'incidences', - 'incidental', - 'incidentally', - 'incidentals', - 'incinerate', - 'incinerated', - 'incinerates', - 'incinerating', - 'incineration', - 'incinerations', - 'incinerator', - 'incinerators', - 'incipience', - 'incipiences', - 'incipiencies', - 'incipiency', - 'incipiently', - 'incisively', - 'incisiveness', - 'incisivenesses', - 'incitation', - 'incitations', - 'incitement', - 'incitements', - 'incivilities', - 'incivility', - 'inclasping', - 'inclemencies', - 'inclemency', - 'inclemently', - 'inclinable', - 'inclination', - 'inclinational', - 'inclinations', - 'inclinings', - 'inclinometer', - 'inclinometers', - 'inclipping', - 'inclosures', - 'includable', - 'includible', - 'inclusions', - 'inclusively', - 'inclusiveness', - 'inclusivenesses', - 'incoercible', - 'incogitant', - 'incognitas', - 'incognitos', - 'incognizance', - 'incognizances', - 'incognizant', - 'incoherence', - 'incoherences', - 'incoherent', - 'incoherently', - 'incombustibilities', - 'incombustibility', - 'incombustible', - 'incombustibles', - 'incommensurabilities', - 'incommensurability', - 'incommensurable', - 'incommensurables', - 'incommensurably', - 'incommensurate', - 'incommoded', - 'incommodes', - 'incommoding', - 'incommodious', - 'incommodiously', - 'incommodiousness', - 'incommodiousnesses', - 'incommodities', - 'incommodity', - 'incommunicabilities', - 'incommunicability', - 'incommunicable', - 'incommunicably', - 'incommunicado', - 'incommunicative', - 'incommutable', - 'incommutably', - 'incomparabilities', - 'incomparability', - 'incomparable', - 'incomparably', - 'incompatibilities', - 'incompatibility', - 'incompatible', - 'incompatibles', - 'incompatibly', - 'incompetence', - 'incompetences', - 'incompetencies', - 'incompetency', - 'incompetent', - 'incompetently', - 'incompetents', - 'incomplete', - 'incompletely', - 'incompleteness', - 'incompletenesses', - 'incompliant', - 'incomprehensibilities', - 'incomprehensibility', - 'incomprehensible', - 'incomprehensibleness', - 'incomprehensiblenesses', - 'incomprehensibly', - 'incomprehension', - 'incomprehensions', - 'incompressible', - 'incomputable', - 'incomputably', - 'inconceivabilities', - 'inconceivability', - 'inconceivable', - 'inconceivableness', - 'inconceivablenesses', - 'inconceivably', - 'inconcinnities', - 'inconcinnity', - 'inconclusive', - 'inconclusively', - 'inconclusiveness', - 'inconclusivenesses', - 'inconformities', - 'inconformity', - 'incongruence', - 'incongruences', - 'incongruent', - 'incongruently', - 'incongruities', - 'incongruity', - 'incongruous', - 'incongruously', - 'incongruousness', - 'incongruousnesses', - 'inconscient', - 'inconsecutive', - 'inconsequence', - 'inconsequences', - 'inconsequent', - 'inconsequential', - 'inconsequentialities', - 'inconsequentiality', - 'inconsequentially', - 'inconsequently', - 'inconsiderable', - 'inconsiderableness', - 'inconsiderablenesses', - 'inconsiderably', - 'inconsiderate', - 'inconsiderately', - 'inconsiderateness', - 'inconsideratenesses', - 'inconsideration', - 'inconsiderations', - 'inconsistence', - 'inconsistences', - 'inconsistencies', - 'inconsistency', - 'inconsistent', - 'inconsistently', - 'inconsolable', - 'inconsolableness', - 'inconsolablenesses', - 'inconsolably', - 'inconsonance', - 'inconsonances', - 'inconsonant', - 'inconspicuous', - 'inconspicuously', - 'inconspicuousness', - 'inconspicuousnesses', - 'inconstancies', - 'inconstancy', - 'inconstant', - 'inconstantly', - 'inconsumable', - 'inconsumably', - 'incontestabilities', - 'incontestability', - 'incontestable', - 'incontestably', - 'incontinence', - 'incontinences', - 'incontinencies', - 'incontinency', - 'incontinent', - 'incontinently', - 'incontrollable', - 'incontrovertible', - 'incontrovertibly', - 'inconvenience', - 'inconvenienced', - 'inconveniences', - 'inconveniencies', - 'inconveniencing', - 'inconveniency', - 'inconvenient', - 'inconveniently', - 'inconvertibilities', - 'inconvertibility', - 'inconvertible', - 'inconvertibly', - 'inconvincible', - 'incoordination', - 'incoordinations', - 'incorporable', - 'incorporate', - 'incorporated', - 'incorporates', - 'incorporating', - 'incorporation', - 'incorporations', - 'incorporative', - 'incorporator', - 'incorporators', - 'incorporeal', - 'incorporeally', - 'incorporeities', - 'incorporeity', - 'incorpsing', - 'incorrectly', - 'incorrectness', - 'incorrectnesses', - 'incorrigibilities', - 'incorrigibility', - 'incorrigible', - 'incorrigibleness', - 'incorrigiblenesses', - 'incorrigibles', - 'incorrigibly', - 'incorrupted', - 'incorruptibilities', - 'incorruptibility', - 'incorruptible', - 'incorruptibles', - 'incorruptibly', - 'incorruption', - 'incorruptions', - 'incorruptly', - 'incorruptness', - 'incorruptnesses', - 'increasable', - 'increasers', - 'increasing', - 'increasingly', - 'incredibilities', - 'incredibility', - 'incredible', - 'incredibleness', - 'incrediblenesses', - 'incredibly', - 'incredulities', - 'incredulity', - 'incredulous', - 'incredulously', - 'incremental', - 'incrementalism', - 'incrementalisms', - 'incrementalist', - 'incrementalists', - 'incrementally', - 'incremented', - 'incrementing', - 'increments', - 'increscent', - 'incriminate', - 'incriminated', - 'incriminates', - 'incriminating', - 'incrimination', - 'incriminations', - 'incriminatory', - 'incrossing', - 'incrustation', - 'incrustations', - 'incrusting', - 'incubating', - 'incubation', - 'incubations', - 'incubative', - 'incubators', - 'incubatory', - 'inculcated', - 'inculcates', - 'inculcating', - 'inculcation', - 'inculcations', - 'inculcator', - 'inculcators', - 'inculpable', - 'inculpated', - 'inculpates', - 'inculpating', - 'inculpation', - 'inculpations', - 'inculpatory', - 'incumbencies', - 'incumbency', - 'incumbents', - 'incumbered', - 'incumbering', - 'incunables', - 'incunabula', - 'incunabulum', - 'incurables', - 'incuriosities', - 'incuriosity', - 'incuriously', - 'incuriousness', - 'incuriousnesses', - 'incurrence', - 'incurrences', - 'incursions', - 'incurvated', - 'incurvates', - 'incurvating', - 'incurvation', - 'incurvations', - 'incurvature', - 'incurvatures', - 'indagating', - 'indagation', - 'indagations', - 'indagators', - 'indebtedness', - 'indebtednesses', - 'indecencies', - 'indecenter', - 'indecentest', - 'indecently', - 'indecipherable', - 'indecision', - 'indecisions', - 'indecisive', - 'indecisively', - 'indecisiveness', - 'indecisivenesses', - 'indeclinable', - 'indecomposable', - 'indecorous', - 'indecorously', - 'indecorousness', - 'indecorousnesses', - 'indecorums', - 'indefatigabilities', - 'indefatigability', - 'indefatigable', - 'indefatigableness', - 'indefatigablenesses', - 'indefatigably', - 'indefeasibilities', - 'indefeasibility', - 'indefeasible', - 'indefeasibly', - 'indefectibilities', - 'indefectibility', - 'indefectible', - 'indefectibly', - 'indefensibilities', - 'indefensibility', - 'indefensible', - 'indefensibly', - 'indefinabilities', - 'indefinability', - 'indefinable', - 'indefinableness', - 'indefinablenesses', - 'indefinables', - 'indefinably', - 'indefinite', - 'indefinitely', - 'indefiniteness', - 'indefinitenesses', - 'indefinites', - 'indehiscence', - 'indehiscences', - 'indehiscent', - 'indelibilities', - 'indelibility', - 'indelicacies', - 'indelicacy', - 'indelicate', - 'indelicately', - 'indelicateness', - 'indelicatenesses', - 'indemnification', - 'indemnifications', - 'indemnified', - 'indemnifier', - 'indemnifiers', - 'indemnifies', - 'indemnifying', - 'indemnities', - 'indemonstrable', - 'indemonstrably', - 'indentation', - 'indentations', - 'indentions', - 'indentured', - 'indentures', - 'indenturing', - 'independence', - 'independences', - 'independencies', - 'independency', - 'independent', - 'independently', - 'independents', - 'indescribable', - 'indescribableness', - 'indescribablenesses', - 'indescribably', - 'indestructibilities', - 'indestructibility', - 'indestructible', - 'indestructibleness', - 'indestructiblenesses', - 'indestructibly', - 'indeterminable', - 'indeterminably', - 'indeterminacies', - 'indeterminacy', - 'indeterminate', - 'indeterminately', - 'indeterminateness', - 'indeterminatenesses', - 'indetermination', - 'indeterminations', - 'indeterminism', - 'indeterminisms', - 'indeterminist', - 'indeterministic', - 'indeterminists', - 'indexation', - 'indexations', - 'indexicals', - 'indicating', - 'indication', - 'indicational', - 'indications', - 'indicative', - 'indicatively', - 'indicatives', - 'indicators', - 'indicatory', - 'indictable', - 'indictions', - 'indictment', - 'indictments', - 'indifference', - 'indifferences', - 'indifferencies', - 'indifferency', - 'indifferent', - 'indifferentism', - 'indifferentisms', - 'indifferentist', - 'indifferentists', - 'indifferently', - 'indigences', - 'indigenization', - 'indigenizations', - 'indigenize', - 'indigenized', - 'indigenizes', - 'indigenizing', - 'indigenous', - 'indigenously', - 'indigenousness', - 'indigenousnesses', - 'indigested', - 'indigestibilities', - 'indigestibility', - 'indigestible', - 'indigestibles', - 'indigestion', - 'indigestions', - 'indignantly', - 'indignation', - 'indignations', - 'indignities', - 'indigotins', - 'indirection', - 'indirections', - 'indirectly', - 'indirectness', - 'indirectnesses', - 'indiscernible', - 'indisciplinable', - 'indiscipline', - 'indisciplined', - 'indisciplines', - 'indiscoverable', - 'indiscreet', - 'indiscreetly', - 'indiscreetness', - 'indiscreetnesses', - 'indiscretion', - 'indiscretions', - 'indiscriminate', - 'indiscriminately', - 'indiscriminateness', - 'indiscriminatenesses', - 'indiscriminating', - 'indiscriminatingly', - 'indiscrimination', - 'indiscriminations', - 'indispensabilities', - 'indispensability', - 'indispensable', - 'indispensableness', - 'indispensablenesses', - 'indispensables', - 'indispensably', - 'indisposed', - 'indisposes', - 'indisposing', - 'indisposition', - 'indispositions', - 'indisputable', - 'indisputableness', - 'indisputablenesses', - 'indisputably', - 'indissociable', - 'indissociably', - 'indissolubilities', - 'indissolubility', - 'indissoluble', - 'indissolubleness', - 'indissolublenesses', - 'indissolubly', - 'indistinct', - 'indistinctive', - 'indistinctly', - 'indistinctness', - 'indistinctnesses', - 'indistinguishabilities', - 'indistinguishability', - 'indistinguishable', - 'indistinguishableness', - 'indistinguishablenesses', - 'indistinguishably', - 'individual', - 'individualise', - 'individualised', - 'individualises', - 'individualising', - 'individualism', - 'individualisms', - 'individualist', - 'individualistic', - 'individualistically', - 'individualists', - 'individualities', - 'individuality', - 'individualization', - 'individualizations', - 'individualize', - 'individualized', - 'individualizes', - 'individualizing', - 'individually', - 'individuals', - 'individuate', - 'individuated', - 'individuates', - 'individuating', - 'individuation', - 'individuations', - 'indivisibilities', - 'indivisibility', - 'indivisible', - 'indivisibles', - 'indivisibly', - 'indocilities', - 'indocility', - 'indoctrinate', - 'indoctrinated', - 'indoctrinates', - 'indoctrinating', - 'indoctrination', - 'indoctrinations', - 'indoctrinator', - 'indoctrinators', - 'indolences', - 'indolently', - 'indomethacin', - 'indomethacins', - 'indomitabilities', - 'indomitability', - 'indomitable', - 'indomitableness', - 'indomitablenesses', - 'indomitably', - 'indophenol', - 'indophenols', - 'indorsement', - 'indorsements', - 'indubitabilities', - 'indubitability', - 'indubitable', - 'indubitableness', - 'indubitablenesses', - 'indubitably', - 'inducement', - 'inducements', - 'inducibilities', - 'inducibility', - 'inductance', - 'inductances', - 'inductions', - 'inductively', - 'indulgence', - 'indulgences', - 'indulgently', - 'indurating', - 'induration', - 'indurations', - 'indurative', - 'industrial', - 'industrialise', - 'industrialised', - 'industrialises', - 'industrialising', - 'industrialism', - 'industrialisms', - 'industrialist', - 'industrialists', - 'industrialization', - 'industrializations', - 'industrialize', - 'industrialized', - 'industrializes', - 'industrializing', - 'industrially', - 'industrials', - 'industries', - 'industrious', - 'industriously', - 'industriousness', - 'industriousnesses', - 'indwellers', - 'indwelling', - 'inearthing', - 'inebriants', - 'inebriated', - 'inebriates', - 'inebriating', - 'inebriation', - 'inebriations', - 'inebrieties', - 'ineducabilities', - 'ineducability', - 'ineducable', - 'ineffabilities', - 'ineffability', - 'ineffableness', - 'ineffablenesses', - 'ineffaceabilities', - 'ineffaceability', - 'ineffaceable', - 'ineffaceably', - 'ineffective', - 'ineffectively', - 'ineffectiveness', - 'ineffectivenesses', - 'ineffectual', - 'ineffectualities', - 'ineffectuality', - 'ineffectually', - 'ineffectualness', - 'ineffectualnesses', - 'inefficacies', - 'inefficacious', - 'inefficaciously', - 'inefficaciousness', - 'inefficaciousnesses', - 'inefficacy', - 'inefficiencies', - 'inefficiency', - 'inefficient', - 'inefficiently', - 'inefficients', - 'inegalitarian', - 'inelasticities', - 'inelasticity', - 'inelegance', - 'inelegances', - 'inelegantly', - 'ineligibilities', - 'ineligibility', - 'ineligible', - 'ineligibles', - 'ineloquent', - 'ineloquently', - 'ineluctabilities', - 'ineluctability', - 'ineluctable', - 'ineluctably', - 'ineludible', - 'inenarrable', - 'ineptitude', - 'ineptitudes', - 'ineptnesses', - 'inequalities', - 'inequality', - 'inequitable', - 'inequitably', - 'inequities', - 'inequivalve', - 'inequivalved', - 'ineradicabilities', - 'ineradicability', - 'ineradicable', - 'ineradicably', - 'inerrancies', - 'inertially', - 'inertnesses', - 'inescapable', - 'inescapably', - 'inessential', - 'inessentials', - 'inestimable', - 'inestimably', - 'inevitabilities', - 'inevitability', - 'inevitable', - 'inevitableness', - 'inevitablenesses', - 'inevitably', - 'inexactitude', - 'inexactitudes', - 'inexactness', - 'inexactnesses', - 'inexcusable', - 'inexcusableness', - 'inexcusablenesses', - 'inexcusably', - 'inexhaustibilities', - 'inexhaustibility', - 'inexhaustible', - 'inexhaustibleness', - 'inexhaustiblenesses', - 'inexhaustibly', - 'inexistence', - 'inexistences', - 'inexistent', - 'inexorabilities', - 'inexorability', - 'inexorable', - 'inexorableness', - 'inexorablenesses', - 'inexorably', - 'inexpedience', - 'inexpediences', - 'inexpediencies', - 'inexpediency', - 'inexpedient', - 'inexpediently', - 'inexpensive', - 'inexpensively', - 'inexpensiveness', - 'inexpensivenesses', - 'inexperience', - 'inexperienced', - 'inexperiences', - 'inexpertly', - 'inexpertness', - 'inexpertnesses', - 'inexpiable', - 'inexpiably', - 'inexplainable', - 'inexplicabilities', - 'inexplicability', - 'inexplicable', - 'inexplicableness', - 'inexplicablenesses', - 'inexplicably', - 'inexplicit', - 'inexpressibilities', - 'inexpressibility', - 'inexpressible', - 'inexpressibleness', - 'inexpressiblenesses', - 'inexpressibly', - 'inexpressive', - 'inexpressively', - 'inexpressiveness', - 'inexpressivenesses', - 'inexpugnable', - 'inexpugnableness', - 'inexpugnablenesses', - 'inexpugnably', - 'inexpungible', - 'inextinguishable', - 'inextinguishably', - 'inextricabilities', - 'inextricability', - 'inextricable', - 'inextricably', - 'infallibilities', - 'infallibility', - 'infallible', - 'infallibly', - 'infamously', - 'infanticidal', - 'infanticide', - 'infanticides', - 'infantilism', - 'infantilisms', - 'infantilities', - 'infantility', - 'infantilization', - 'infantilizations', - 'infantilize', - 'infantilized', - 'infantilizes', - 'infantilizing', - 'infantries', - 'infantryman', - 'infantrymen', - 'infarction', - 'infarctions', - 'infatuated', - 'infatuates', - 'infatuating', - 'infatuation', - 'infatuations', - 'infeasibilities', - 'infeasibility', - 'infeasible', - 'infections', - 'infectious', - 'infectiously', - 'infectiousness', - 'infectiousnesses', - 'infectivities', - 'infectivity', - 'infelicities', - 'infelicitous', - 'infelicitously', - 'infelicity', - 'infeoffing', - 'inferences', - 'inferential', - 'inferentially', - 'inferiorities', - 'inferiority', - 'inferiorly', - 'infernally', - 'inferrible', - 'infertilities', - 'infertility', - 'infestants', - 'infestation', - 'infestations', - 'infibulate', - 'infibulated', - 'infibulates', - 'infibulating', - 'infibulation', - 'infibulations', - 'infidelities', - 'infidelity', - 'infielders', - 'infighters', - 'infighting', - 'infightings', - 'infiltrate', - 'infiltrated', - 'infiltrates', - 'infiltrating', - 'infiltration', - 'infiltrations', - 'infiltrative', - 'infiltrator', - 'infiltrators', - 'infinitely', - 'infiniteness', - 'infinitenesses', - 'infinitesimal', - 'infinitesimally', - 'infinitesimals', - 'infinities', - 'infinitival', - 'infinitive', - 'infinitively', - 'infinitives', - 'infinitude', - 'infinitudes', - 'infirmaries', - 'infirmities', - 'infixation', - 'infixations', - 'inflammabilities', - 'inflammability', - 'inflammable', - 'inflammableness', - 'inflammablenesses', - 'inflammables', - 'inflammably', - 'inflammation', - 'inflammations', - 'inflammatorily', - 'inflammatory', - 'inflatable', - 'inflatables', - 'inflationary', - 'inflationism', - 'inflationisms', - 'inflationist', - 'inflationists', - 'inflations', - 'inflectable', - 'inflecting', - 'inflection', - 'inflectional', - 'inflectionally', - 'inflections', - 'inflective', - 'inflexibilities', - 'inflexibility', - 'inflexible', - 'inflexibleness', - 'inflexiblenesses', - 'inflexibly', - 'inflexions', - 'inflicters', - 'inflicting', - 'infliction', - 'inflictions', - 'inflictive', - 'inflictors', - 'inflorescence', - 'inflorescences', - 'influenceable', - 'influenced', - 'influences', - 'influencing', - 'influential', - 'influentially', - 'influentials', - 'influenzal', - 'influenzas', - 'infomercial', - 'infomercials', - 'informalities', - 'informality', - 'informally', - 'informants', - 'informatics', - 'information', - 'informational', - 'informationally', - 'informations', - 'informative', - 'informatively', - 'informativeness', - 'informativenesses', - 'informatorily', - 'informatory', - 'informedly', - 'infotainment', - 'infotainments', - 'infracting', - 'infraction', - 'infractions', - 'infrahuman', - 'infrahumans', - 'infrangibilities', - 'infrangibility', - 'infrangible', - 'infrangibly', - 'infrasonic', - 'infraspecific', - 'infrastructure', - 'infrastructures', - 'infrequence', - 'infrequences', - 'infrequencies', - 'infrequency', - 'infrequent', - 'infrequently', - 'infringement', - 'infringements', - 'infringers', - 'infringing', - 'infundibula', - 'infundibular', - 'infundibuliform', - 'infundibulum', - 'infuriated', - 'infuriates', - 'infuriating', - 'infuriatingly', - 'infuriation', - 'infuriations', - 'infusibilities', - 'infusibility', - 'infusibleness', - 'infusiblenesses', - 'infusorian', - 'infusorians', - 'ingathered', - 'ingathering', - 'ingatherings', - 'ingeniously', - 'ingeniousness', - 'ingeniousnesses', - 'ingenuities', - 'ingenuously', - 'ingenuousness', - 'ingenuousnesses', - 'ingestible', - 'ingestions', - 'inglenooks', - 'inglorious', - 'ingloriously', - 'ingloriousness', - 'ingloriousnesses', - 'ingrafting', - 'ingrainedly', - 'ingraining', - 'ingratiate', - 'ingratiated', - 'ingratiates', - 'ingratiating', - 'ingratiatingly', - 'ingratiation', - 'ingratiations', - 'ingratiatory', - 'ingratitude', - 'ingratitudes', - 'ingredient', - 'ingredients', - 'ingression', - 'ingressions', - 'ingressive', - 'ingressiveness', - 'ingressivenesses', - 'ingressives', - 'ingrownness', - 'ingrownnesses', - 'ingurgitate', - 'ingurgitated', - 'ingurgitates', - 'ingurgitating', - 'ingurgitation', - 'ingurgitations', - 'inhabitable', - 'inhabitancies', - 'inhabitancy', - 'inhabitant', - 'inhabitants', - 'inhabitation', - 'inhabitations', - 'inhabiters', - 'inhabiting', - 'inhalation', - 'inhalational', - 'inhalations', - 'inhalators', - 'inharmonic', - 'inharmonies', - 'inharmonious', - 'inharmoniously', - 'inharmoniousness', - 'inharmoniousnesses', - 'inherences', - 'inherently', - 'inheritabilities', - 'inheritability', - 'inheritable', - 'inheritableness', - 'inheritablenesses', - 'inheritance', - 'inheritances', - 'inheriting', - 'inheritors', - 'inheritress', - 'inheritresses', - 'inheritrices', - 'inheritrix', - 'inheritrixes', - 'inhibiting', - 'inhibition', - 'inhibitions', - 'inhibitive', - 'inhibitors', - 'inhibitory', - 'inholdings', - 'inhomogeneities', - 'inhomogeneity', - 'inhomogeneous', - 'inhospitable', - 'inhospitableness', - 'inhospitablenesses', - 'inhospitably', - 'inhospitalities', - 'inhospitality', - 'inhumanely', - 'inhumanities', - 'inhumanity', - 'inhumanness', - 'inhumannesses', - 'inhumation', - 'inhumations', - 'inimically', - 'inimitable', - 'inimitableness', - 'inimitablenesses', - 'inimitably', - 'iniquities', - 'iniquitous', - 'iniquitously', - 'iniquitousness', - 'iniquitousnesses', - 'initialing', - 'initialism', - 'initialisms', - 'initialization', - 'initializations', - 'initialize', - 'initialized', - 'initializes', - 'initializing', - 'initialled', - 'initialling', - 'initialness', - 'initialnesses', - 'initiating', - 'initiation', - 'initiations', - 'initiative', - 'initiatives', - 'initiators', - 'initiatory', - 'injectable', - 'injectables', - 'injectants', - 'injections', - 'injudicious', - 'injudiciously', - 'injudiciousness', - 'injudiciousnesses', - 'injunction', - 'injunctions', - 'injunctive', - 'injuriously', - 'injuriousness', - 'injuriousnesses', - 'injustices', - 'inkberries', - 'inkinesses', - 'innateness', - 'innatenesses', - 'innermosts', - 'innersoles', - 'innerspring', - 'innervated', - 'innervates', - 'innervating', - 'innervation', - 'innervations', - 'innkeepers', - 'innocences', - 'innocencies', - 'innocenter', - 'innocentest', - 'innocently', - 'innocuously', - 'innocuousness', - 'innocuousnesses', - 'innominate', - 'innovating', - 'innovation', - 'innovational', - 'innovations', - 'innovative', - 'innovatively', - 'innovativeness', - 'innovativenesses', - 'innovators', - 'innovatory', - 'innuendoed', - 'innuendoes', - 'innuendoing', - 'innumerable', - 'innumerably', - 'innumeracies', - 'innumeracy', - 'innumerate', - 'innumerates', - 'innumerous', - 'inobservance', - 'inobservances', - 'inobservant', - 'inoculants', - 'inoculated', - 'inoculates', - 'inoculating', - 'inoculation', - 'inoculations', - 'inoculative', - 'inoculator', - 'inoculators', - 'inoffensive', - 'inoffensively', - 'inoffensiveness', - 'inoffensivenesses', - 'inoperable', - 'inoperative', - 'inoperativeness', - 'inoperativenesses', - 'inoperculate', - 'inoperculates', - 'inopportune', - 'inopportunely', - 'inopportuneness', - 'inopportunenesses', - 'inordinate', - 'inordinately', - 'inordinateness', - 'inordinatenesses', - 'inorganically', - 'inosculate', - 'inosculated', - 'inosculates', - 'inosculating', - 'inosculation', - 'inosculations', - 'inpatients', - 'inpourings', - 'inquieting', - 'inquietude', - 'inquietudes', - 'inquilines', - 'inquiringly', - 'inquisition', - 'inquisitional', - 'inquisitions', - 'inquisitive', - 'inquisitively', - 'inquisitiveness', - 'inquisitivenesses', - 'inquisitor', - 'inquisitorial', - 'inquisitorially', - 'inquisitors', - 'insalubrious', - 'insalubrities', - 'insalubrity', - 'insaneness', - 'insanenesses', - 'insanitary', - 'insanitation', - 'insanitations', - 'insanities', - 'insatiabilities', - 'insatiability', - 'insatiable', - 'insatiableness', - 'insatiablenesses', - 'insatiably', - 'insatiately', - 'insatiateness', - 'insatiatenesses', - 'inscribers', - 'inscribing', - 'inscription', - 'inscriptional', - 'inscriptions', - 'inscriptive', - 'inscriptively', - 'inscrolled', - 'inscrolling', - 'inscrutabilities', - 'inscrutability', - 'inscrutable', - 'inscrutableness', - 'inscrutablenesses', - 'inscrutably', - 'insculping', - 'insectaries', - 'insecticidal', - 'insecticidally', - 'insecticide', - 'insecticides', - 'insectivore', - 'insectivores', - 'insectivorous', - 'insecurely', - 'insecureness', - 'insecurenesses', - 'insecurities', - 'insecurity', - 'inselberge', - 'inselbergs', - 'inseminate', - 'inseminated', - 'inseminates', - 'inseminating', - 'insemination', - 'inseminations', - 'inseminator', - 'inseminators', - 'insensately', - 'insensibilities', - 'insensibility', - 'insensible', - 'insensibleness', - 'insensiblenesses', - 'insensibly', - 'insensitive', - 'insensitively', - 'insensitiveness', - 'insensitivenesses', - 'insensitivities', - 'insensitivity', - 'insentience', - 'insentiences', - 'insentient', - 'inseparabilities', - 'inseparability', - 'inseparable', - 'inseparableness', - 'inseparablenesses', - 'inseparables', - 'inseparably', - 'insertional', - 'insertions', - 'insheathed', - 'insheathing', - 'inshrining', - 'insidiously', - 'insidiousness', - 'insidiousnesses', - 'insightful', - 'insightfully', - 'insignificance', - 'insignificances', - 'insignificancies', - 'insignificancy', - 'insignificant', - 'insignificantly', - 'insincerely', - 'insincerities', - 'insincerity', - 'insinuated', - 'insinuates', - 'insinuating', - 'insinuatingly', - 'insinuation', - 'insinuations', - 'insinuative', - 'insinuator', - 'insinuators', - 'insipidities', - 'insipidity', - 'insistence', - 'insistences', - 'insistencies', - 'insistency', - 'insistently', - 'insobrieties', - 'insobriety', - 'insociabilities', - 'insociability', - 'insociable', - 'insociably', - 'insolating', - 'insolation', - 'insolations', - 'insolences', - 'insolently', - 'insolubilities', - 'insolubility', - 'insolubilization', - 'insolubilizations', - 'insolubilize', - 'insolubilized', - 'insolubilizes', - 'insolubilizing', - 'insolubleness', - 'insolublenesses', - 'insolubles', - 'insolvable', - 'insolvably', - 'insolvencies', - 'insolvency', - 'insolvents', - 'insomniacs', - 'insouciance', - 'insouciances', - 'insouciant', - 'insouciantly', - 'inspanning', - 'inspecting', - 'inspection', - 'inspections', - 'inspective', - 'inspectorate', - 'inspectorates', - 'inspectors', - 'inspectorship', - 'inspectorships', - 'insphering', - 'inspiration', - 'inspirational', - 'inspirationally', - 'inspirations', - 'inspirator', - 'inspirators', - 'inspiratory', - 'inspiringly', - 'inspirited', - 'inspiriting', - 'inspiritingly', - 'inspissate', - 'inspissated', - 'inspissates', - 'inspissating', - 'inspissation', - 'inspissations', - 'inspissator', - 'inspissators', - 'instabilities', - 'instability', - 'installation', - 'installations', - 'installers', - 'installing', - 'installment', - 'installments', - 'instalment', - 'instalments', - 'instancies', - 'instancing', - 'instantaneities', - 'instantaneity', - 'instantaneous', - 'instantaneously', - 'instantaneousness', - 'instantaneousnesses', - 'instantiate', - 'instantiated', - 'instantiates', - 'instantiating', - 'instantiation', - 'instantiations', - 'instantness', - 'instantnesses', - 'instarring', - 'instauration', - 'instaurations', - 'instigated', - 'instigates', - 'instigating', - 'instigation', - 'instigations', - 'instigative', - 'instigator', - 'instigators', - 'instillation', - 'instillations', - 'instillers', - 'instilling', - 'instillment', - 'instillments', - 'instinctive', - 'instinctively', - 'instinctual', - 'instinctually', - 'instituted', - 'instituter', - 'instituters', - 'institutes', - 'instituting', - 'institution', - 'institutional', - 'institutionalise', - 'institutionalised', - 'institutionalises', - 'institutionalising', - 'institutionalism', - 'institutionalisms', - 'institutionalist', - 'institutionalists', - 'institutionalization', - 'institutionalizations', - 'institutionalize', - 'institutionalized', - 'institutionalizes', - 'institutionalizing', - 'institutionally', - 'institutions', - 'institutor', - 'institutors', - 'instructed', - 'instructing', - 'instruction', - 'instructional', - 'instructions', - 'instructive', - 'instructively', - 'instructiveness', - 'instructivenesses', - 'instructor', - 'instructors', - 'instructorship', - 'instructorships', - 'instructress', - 'instructresses', - 'instrument', - 'instrumental', - 'instrumentalism', - 'instrumentalisms', - 'instrumentalist', - 'instrumentalists', - 'instrumentalities', - 'instrumentality', - 'instrumentally', - 'instrumentals', - 'instrumentation', - 'instrumentations', - 'instrumented', - 'instrumenting', - 'instruments', - 'insubordinate', - 'insubordinately', - 'insubordinates', - 'insubordination', - 'insubordinations', - 'insubstantial', - 'insubstantialities', - 'insubstantiality', - 'insufferable', - 'insufferableness', - 'insufferablenesses', - 'insufferably', - 'insufficiencies', - 'insufficiency', - 'insufficient', - 'insufficiently', - 'insufflate', - 'insufflated', - 'insufflates', - 'insufflating', - 'insufflation', - 'insufflations', - 'insufflator', - 'insufflators', - 'insularism', - 'insularisms', - 'insularities', - 'insularity', - 'insulating', - 'insulation', - 'insulations', - 'insulators', - 'insultingly', - 'insuperable', - 'insuperably', - 'insupportable', - 'insupportably', - 'insuppressible', - 'insurabilities', - 'insurability', - 'insurances', - 'insurgence', - 'insurgences', - 'insurgencies', - 'insurgency', - 'insurgently', - 'insurgents', - 'insurmountable', - 'insurmountably', - 'insurrection', - 'insurrectional', - 'insurrectionaries', - 'insurrectionary', - 'insurrectionist', - 'insurrectionists', - 'insurrections', - 'insusceptibilities', - 'insusceptibility', - 'insusceptible', - 'insusceptibly', - 'inswathing', - 'intactness', - 'intactnesses', - 'intaglioed', - 'intaglioing', - 'intangibilities', - 'intangibility', - 'intangible', - 'intangibleness', - 'intangiblenesses', - 'intangibles', - 'intangibly', - 'integrabilities', - 'integrability', - 'integrable', - 'integralities', - 'integrality', - 'integrally', - 'integrands', - 'integrated', - 'integrates', - 'integrating', - 'integration', - 'integrationist', - 'integrationists', - 'integrations', - 'integrative', - 'integrator', - 'integrators', - 'integrities', - 'integument', - 'integumentary', - 'integuments', - 'intellection', - 'intellections', - 'intellective', - 'intellectively', - 'intellects', - 'intellectual', - 'intellectualism', - 'intellectualisms', - 'intellectualist', - 'intellectualistic', - 'intellectualists', - 'intellectualities', - 'intellectuality', - 'intellectualization', - 'intellectualizations', - 'intellectualize', - 'intellectualized', - 'intellectualizer', - 'intellectualizers', - 'intellectualizes', - 'intellectualizing', - 'intellectually', - 'intellectualness', - 'intellectualnesses', - 'intellectuals', - 'intelligence', - 'intelligencer', - 'intelligencers', - 'intelligences', - 'intelligent', - 'intelligential', - 'intelligently', - 'intelligentsia', - 'intelligentsias', - 'intelligibilities', - 'intelligibility', - 'intelligible', - 'intelligibleness', - 'intelligiblenesses', - 'intelligibly', - 'intemperance', - 'intemperances', - 'intemperate', - 'intemperately', - 'intemperateness', - 'intemperatenesses', - 'intendance', - 'intendances', - 'intendants', - 'intendedly', - 'intendment', - 'intendments', - 'intenerate', - 'intenerated', - 'intenerates', - 'intenerating', - 'inteneration', - 'intenerations', - 'intenseness', - 'intensenesses', - 'intensification', - 'intensifications', - 'intensified', - 'intensifier', - 'intensifiers', - 'intensifies', - 'intensifying', - 'intensional', - 'intensionalities', - 'intensionality', - 'intensionally', - 'intensions', - 'intensities', - 'intensively', - 'intensiveness', - 'intensivenesses', - 'intensives', - 'intentional', - 'intentionalities', - 'intentionality', - 'intentionally', - 'intentions', - 'intentness', - 'intentnesses', - 'interabang', - 'interabangs', - 'interactant', - 'interactants', - 'interacted', - 'interacting', - 'interaction', - 'interactional', - 'interactions', - 'interactive', - 'interactively', - 'interagency', - 'interallelic', - 'interallied', - 'interanimation', - 'interanimations', - 'interannual', - 'interassociation', - 'interassociations', - 'interatomic', - 'interavailabilities', - 'interavailability', - 'interbasin', - 'interbedded', - 'interbedding', - 'interbehavior', - 'interbehavioral', - 'interbehaviors', - 'interborough', - 'interboroughs', - 'interbranch', - 'interbreed', - 'interbreeding', - 'interbreeds', - 'intercalary', - 'intercalate', - 'intercalated', - 'intercalates', - 'intercalating', - 'intercalation', - 'intercalations', - 'intercalibration', - 'intercalibrations', - 'intercampus', - 'intercaste', - 'interceded', - 'interceder', - 'interceders', - 'intercedes', - 'interceding', - 'intercellular', - 'intercensal', - 'intercepted', - 'intercepter', - 'intercepters', - 'intercepting', - 'interception', - 'interceptions', - 'interceptor', - 'interceptors', - 'intercepts', - 'intercession', - 'intercessional', - 'intercessions', - 'intercessor', - 'intercessors', - 'intercessory', - 'interchain', - 'interchained', - 'interchaining', - 'interchains', - 'interchange', - 'interchangeabilities', - 'interchangeability', - 'interchangeable', - 'interchangeableness', - 'interchangeablenesses', - 'interchangeably', - 'interchanged', - 'interchanger', - 'interchangers', - 'interchanges', - 'interchanging', - 'interchannel', - 'interchromosomal', - 'interchurch', - 'interclass', - 'intercluster', - 'intercoastal', - 'intercollegiate', - 'intercolonial', - 'intercolumniation', - 'intercolumniations', - 'intercommunal', - 'intercommunicate', - 'intercommunicated', - 'intercommunicates', - 'intercommunicating', - 'intercommunication', - 'intercommunications', - 'intercommunion', - 'intercommunions', - 'intercommunities', - 'intercommunity', - 'intercompany', - 'intercompare', - 'intercompared', - 'intercompares', - 'intercomparing', - 'intercomparison', - 'intercomparisons', - 'intercomprehensibilities', - 'intercomprehensibility', - 'interconnect', - 'interconnected', - 'interconnectedness', - 'interconnectednesses', - 'interconnecting', - 'interconnection', - 'interconnections', - 'interconnects', - 'intercontinental', - 'interconversion', - 'interconversions', - 'interconvert', - 'interconverted', - 'interconvertibilities', - 'interconvertibility', - 'interconvertible', - 'interconverting', - 'interconverts', - 'intercooler', - 'intercoolers', - 'intercorporate', - 'intercorrelate', - 'intercorrelated', - 'intercorrelates', - 'intercorrelating', - 'intercorrelation', - 'intercorrelations', - 'intercortical', - 'intercostal', - 'intercostals', - 'intercountry', - 'intercounty', - 'intercouple', - 'intercourse', - 'intercourses', - 'intercrater', - 'intercropped', - 'intercropping', - 'intercrops', - 'intercross', - 'intercrossed', - 'intercrosses', - 'intercrossing', - 'intercrystalline', - 'intercultural', - 'interculturally', - 'interculture', - 'intercultures', - 'intercurrent', - 'intercutting', - 'interdealer', - 'interdealers', - 'interdenominational', - 'interdental', - 'interdentally', - 'interdepartmental', - 'interdepartmentally', - 'interdepend', - 'interdepended', - 'interdependence', - 'interdependences', - 'interdependencies', - 'interdependency', - 'interdependent', - 'interdependently', - 'interdepending', - 'interdepends', - 'interdialectal', - 'interdicted', - 'interdicting', - 'interdiction', - 'interdictions', - 'interdictive', - 'interdictor', - 'interdictors', - 'interdictory', - 'interdicts', - 'interdiffuse', - 'interdiffused', - 'interdiffuses', - 'interdiffusing', - 'interdiffusion', - 'interdiffusions', - 'interdigitate', - 'interdigitated', - 'interdigitates', - 'interdigitating', - 'interdigitation', - 'interdigitations', - 'interdisciplinary', - 'interdistrict', - 'interdivisional', - 'interdominion', - 'interelectrode', - 'interelectrodes', - 'interelectron', - 'interelectronic', - 'interepidemic', - 'interested', - 'interestedly', - 'interesting', - 'interestingly', - 'interestingness', - 'interestingnesses', - 'interethnic', - 'interfaced', - 'interfaces', - 'interfacial', - 'interfacing', - 'interfacings', - 'interfaculties', - 'interfaculty', - 'interfaith', - 'interfamilial', - 'interfamily', - 'interfered', - 'interference', - 'interferences', - 'interferential', - 'interferer', - 'interferers', - 'interferes', - 'interfering', - 'interferogram', - 'interferograms', - 'interferometer', - 'interferometers', - 'interferometric', - 'interferometrically', - 'interferometries', - 'interferometry', - 'interferon', - 'interferons', - 'interfertile', - 'interfertilities', - 'interfertility', - 'interfiber', - 'interfiled', - 'interfiles', - 'interfiling', - 'interfluve', - 'interfluves', - 'interfluvial', - 'interfolded', - 'interfolding', - 'interfolds', - 'interfraternity', - 'interfused', - 'interfuses', - 'interfusing', - 'interfusion', - 'interfusions', - 'intergalactic', - 'intergeneration', - 'intergenerational', - 'intergenerations', - 'intergeneric', - 'interglacial', - 'interglacials', - 'intergovernmental', - 'intergradation', - 'intergradational', - 'intergradations', - 'intergrade', - 'intergraded', - 'intergrades', - 'intergrading', - 'intergraft', - 'intergrafted', - 'intergrafting', - 'intergrafts', - 'intergranular', - 'intergroup', - 'intergrowth', - 'intergrowths', - 'interhemispheric', - 'interindividual', - 'interindustry', - 'interinfluence', - 'interinfluenced', - 'interinfluences', - 'interinfluencing', - 'interinstitutional', - 'interinvolve', - 'interinvolved', - 'interinvolves', - 'interinvolving', - 'interionic', - 'interiorise', - 'interiorised', - 'interiorises', - 'interiorising', - 'interiorities', - 'interiority', - 'interiorization', - 'interiorizations', - 'interiorize', - 'interiorized', - 'interiorizes', - 'interiorizing', - 'interiorly', - 'interisland', - 'interjected', - 'interjecting', - 'interjection', - 'interjectional', - 'interjectionally', - 'interjections', - 'interjector', - 'interjectors', - 'interjectory', - 'interjects', - 'interjurisdictional', - 'interknits', - 'interknitted', - 'interknitting', - 'interlaced', - 'interlacement', - 'interlacements', - 'interlaces', - 'interlacing', - 'interlacustrine', - 'interlaminar', - 'interlapped', - 'interlapping', - 'interlarded', - 'interlarding', - 'interlards', - 'interlayer', - 'interlayered', - 'interlayering', - 'interlayers', - 'interlaying', - 'interleave', - 'interleaved', - 'interleaves', - 'interleaving', - 'interlending', - 'interlends', - 'interleukin', - 'interleukins', - 'interlibrary', - 'interlinear', - 'interlinearly', - 'interlinears', - 'interlineation', - 'interlineations', - 'interlined', - 'interliner', - 'interliners', - 'interlines', - 'interlining', - 'interlinings', - 'interlinked', - 'interlinking', - 'interlinks', - 'interlobular', - 'interlocal', - 'interlocked', - 'interlocking', - 'interlocks', - 'interlocutor', - 'interlocutors', - 'interlocutory', - 'interloped', - 'interloper', - 'interlopers', - 'interlopes', - 'interloping', - 'interludes', - 'interlunar', - 'interlunary', - 'intermarginal', - 'intermarriage', - 'intermarriages', - 'intermarried', - 'intermarries', - 'intermarry', - 'intermarrying', - 'intermeddle', - 'intermeddled', - 'intermeddler', - 'intermeddlers', - 'intermeddles', - 'intermeddling', - 'intermediacies', - 'intermediacy', - 'intermediaries', - 'intermediary', - 'intermediate', - 'intermediated', - 'intermediately', - 'intermediateness', - 'intermediatenesses', - 'intermediates', - 'intermediating', - 'intermediation', - 'intermediations', - 'intermedin', - 'intermedins', - 'intermembrane', - 'intermenstrual', - 'interments', - 'intermeshed', - 'intermeshes', - 'intermeshing', - 'intermetallic', - 'intermetallics', - 'intermezzi', - 'intermezzo', - 'intermezzos', - 'interminable', - 'interminableness', - 'interminablenesses', - 'interminably', - 'intermingle', - 'intermingled', - 'intermingles', - 'intermingling', - 'interministerial', - 'intermission', - 'intermissionless', - 'intermissions', - 'intermitotic', - 'intermitted', - 'intermittence', - 'intermittences', - 'intermittencies', - 'intermittency', - 'intermittent', - 'intermittently', - 'intermitter', - 'intermitters', - 'intermitting', - 'intermixed', - 'intermixes', - 'intermixing', - 'intermixture', - 'intermixtures', - 'intermodal', - 'intermodulation', - 'intermodulations', - 'intermolecular', - 'intermolecularly', - 'intermontane', - 'intermountain', - 'intermural', - 'internalise', - 'internalised', - 'internalises', - 'internalising', - 'internalities', - 'internality', - 'internalization', - 'internalizations', - 'internalize', - 'internalized', - 'internalizes', - 'internalizing', - 'internally', - 'international', - 'internationalise', - 'internationalised', - 'internationalises', - 'internationalising', - 'internationalism', - 'internationalisms', - 'internationalist', - 'internationalists', - 'internationalities', - 'internationality', - 'internationalization', - 'internationalizations', - 'internationalize', - 'internationalized', - 'internationalizes', - 'internationalizing', - 'internationally', - 'internationals', - 'internecine', - 'interneuron', - 'interneuronal', - 'interneurons', - 'internists', - 'internment', - 'internments', - 'internodal', - 'internodes', - 'internship', - 'internships', - 'internuclear', - 'internucleon', - 'internucleonic', - 'internucleotide', - 'internuncial', - 'internuncio', - 'internuncios', - 'interobserver', - 'interobservers', - 'interocean', - 'interoceanic', - 'interoceptive', - 'interoceptor', - 'interoceptors', - 'interoffice', - 'interoperabilities', - 'interoperability', - 'interoperable', - 'interoperative', - 'interoperatives', - 'interorbital', - 'interorgan', - 'interorganizational', - 'interpandemic', - 'interparish', - 'interparochial', - 'interparoxysmal', - 'interparticle', - 'interparty', - 'interpellate', - 'interpellated', - 'interpellates', - 'interpellating', - 'interpellation', - 'interpellations', - 'interpellator', - 'interpellators', - 'interpenetrate', - 'interpenetrated', - 'interpenetrates', - 'interpenetrating', - 'interpenetration', - 'interpenetrations', - 'interperceptual', - 'interpermeate', - 'interpermeated', - 'interpermeates', - 'interpermeating', - 'interpersonal', - 'interpersonally', - 'interphalangeal', - 'interphase', - 'interphases', - 'interplanetary', - 'interplant', - 'interplanted', - 'interplanting', - 'interplants', - 'interplayed', - 'interplaying', - 'interplays', - 'interplead', - 'interpleaded', - 'interpleader', - 'interpleaders', - 'interpleading', - 'interpleads', - 'interpluvial', - 'interpoint', - 'interpoints', - 'interpolate', - 'interpolated', - 'interpolates', - 'interpolating', - 'interpolation', - 'interpolations', - 'interpolative', - 'interpolator', - 'interpolators', - 'interpopulation', - 'interpopulational', - 'interposed', - 'interposer', - 'interposers', - 'interposes', - 'interposing', - 'interposition', - 'interpositions', - 'interpretabilities', - 'interpretability', - 'interpretable', - 'interpretation', - 'interpretational', - 'interpretations', - 'interpretative', - 'interpretatively', - 'interpreted', - 'interpreter', - 'interpreters', - 'interpreting', - 'interpretive', - 'interpretively', - 'interprets', - 'interprofessional', - 'interprovincial', - 'interproximal', - 'interpsychic', - 'interpupillary', - 'interracial', - 'interracially', - 'interreges', - 'interregional', - 'interregna', - 'interregnum', - 'interregnums', - 'interrelate', - 'interrelated', - 'interrelatedly', - 'interrelatedness', - 'interrelatednesses', - 'interrelates', - 'interrelating', - 'interrelation', - 'interrelations', - 'interrelationship', - 'interrelationships', - 'interreligious', - 'interrenal', - 'interrobang', - 'interrobangs', - 'interrogate', - 'interrogated', - 'interrogatee', - 'interrogatees', - 'interrogates', - 'interrogating', - 'interrogation', - 'interrogational', - 'interrogations', - 'interrogative', - 'interrogatively', - 'interrogatives', - 'interrogator', - 'interrogatories', - 'interrogators', - 'interrogatory', - 'interrogee', - 'interrogees', - 'interrupted', - 'interrupter', - 'interrupters', - 'interruptible', - 'interrupting', - 'interruption', - 'interruptions', - 'interruptive', - 'interruptor', - 'interruptors', - 'interrupts', - 'interscholastic', - 'interschool', - 'interschools', - 'intersected', - 'intersecting', - 'intersection', - 'intersectional', - 'intersections', - 'intersects', - 'intersegment', - 'intersegmental', - 'intersegments', - 'intersensory', - 'interservice', - 'intersession', - 'intersessions', - 'intersexes', - 'intersexual', - 'intersexualities', - 'intersexuality', - 'intersexually', - 'intersocietal', - 'intersociety', - 'interspace', - 'interspaced', - 'interspaces', - 'interspacing', - 'interspecies', - 'interspecific', - 'intersperse', - 'interspersed', - 'intersperses', - 'interspersing', - 'interspersion', - 'interspersions', - 'interstadial', - 'interstadials', - 'interstage', - 'interstate', - 'interstates', - 'interstation', - 'interstellar', - 'intersterile', - 'intersterilities', - 'intersterility', - 'interstice', - 'interstices', - 'interstimulation', - 'interstimulations', - 'interstimuli', - 'interstimulus', - 'interstitial', - 'interstitially', - 'interstrain', - 'interstrains', - 'interstrand', - 'interstrands', - 'interstratification', - 'interstratifications', - 'interstratified', - 'interstratifies', - 'interstratify', - 'interstratifying', - 'intersubjective', - 'intersubjectively', - 'intersubjectivities', - 'intersubjectivity', - 'intersubstitutabilities', - 'intersubstitutability', - 'intersubstitutable', - 'intersystem', - 'interterminal', - 'interterritorial', - 'intertestamental', - 'intertidal', - 'intertidally', - 'intertillage', - 'intertillages', - 'intertilled', - 'intertilling', - 'intertills', - 'intertranslatable', - 'intertrial', - 'intertribal', - 'intertroop', - 'intertropical', - 'intertwine', - 'intertwined', - 'intertwinement', - 'intertwinements', - 'intertwines', - 'intertwining', - 'intertwist', - 'intertwisted', - 'intertwisting', - 'intertwists', - 'interunion', - 'interunions', - 'interuniversity', - 'interurban', - 'interurbans', - 'intervales', - 'intervalley', - 'intervalleys', - 'intervallic', - 'intervalometer', - 'intervalometers', - 'intervened', - 'intervener', - 'interveners', - 'intervenes', - 'intervening', - 'intervenor', - 'intervenors', - 'intervention', - 'interventionism', - 'interventionisms', - 'interventionist', - 'interventionists', - 'interventions', - 'interventricular', - 'intervertebral', - 'interviewed', - 'interviewee', - 'interviewees', - 'interviewer', - 'interviewers', - 'interviewing', - 'interviews', - 'intervillage', - 'intervisibilities', - 'intervisibility', - 'intervisible', - 'intervisitation', - 'intervisitations', - 'intervocalic', - 'intervocalically', - 'interweave', - 'interweaved', - 'interweaves', - 'interweaving', - 'interworked', - 'interworking', - 'interworkings', - 'interworks', - 'interwoven', - 'interwrought', - 'interzonal', - 'intestacies', - 'intestates', - 'intestinal', - 'intestinally', - 'intestines', - 'inthralled', - 'inthralling', - 'inthroning', - 'intimacies', - 'intimately', - 'intimateness', - 'intimatenesses', - 'intimaters', - 'intimating', - 'intimation', - 'intimations', - 'intimidate', - 'intimidated', - 'intimidates', - 'intimidating', - 'intimidatingly', - 'intimidation', - 'intimidations', - 'intimidator', - 'intimidators', - 'intimidatory', - 'intinction', - 'intinctions', - 'intituling', - 'intolerabilities', - 'intolerability', - 'intolerable', - 'intolerableness', - 'intolerablenesses', - 'intolerably', - 'intolerance', - 'intolerances', - 'intolerant', - 'intolerantly', - 'intolerantness', - 'intolerantnesses', - 'intonating', - 'intonation', - 'intonational', - 'intonations', - 'intoxicant', - 'intoxicants', - 'intoxicate', - 'intoxicated', - 'intoxicatedly', - 'intoxicates', - 'intoxicating', - 'intoxication', - 'intoxications', - 'intracardiac', - 'intracardial', - 'intracardially', - 'intracellular', - 'intracellularly', - 'intracerebral', - 'intracerebrally', - 'intracompany', - 'intracranial', - 'intracranially', - 'intractabilities', - 'intractability', - 'intractable', - 'intractably', - 'intracutaneous', - 'intracutaneously', - 'intradermal', - 'intradermally', - 'intradoses', - 'intragalactic', - 'intragenic', - 'intramolecular', - 'intramolecularly', - 'intramural', - 'intramurally', - 'intramuscular', - 'intramuscularly', - 'intranasal', - 'intranasally', - 'intransigeance', - 'intransigeances', - 'intransigeant', - 'intransigeantly', - 'intransigeants', - 'intransigence', - 'intransigences', - 'intransigent', - 'intransigently', - 'intransigents', - 'intransitive', - 'intransitively', - 'intransitiveness', - 'intransitivenesses', - 'intransitivities', - 'intransitivity', - 'intraocular', - 'intraocularly', - 'intraperitoneal', - 'intraperitoneally', - 'intrapersonal', - 'intraplate', - 'intrapopulation', - 'intrapreneur', - 'intrapreneurial', - 'intrapreneurs', - 'intrapsychic', - 'intrapsychically', - 'intraspecies', - 'intraspecific', - 'intrastate', - 'intrathecal', - 'intrathecally', - 'intrathoracic', - 'intrathoracically', - 'intrauterine', - 'intravascular', - 'intravascularly', - 'intravenous', - 'intravenouses', - 'intravenously', - 'intraventricular', - 'intraventricularly', - 'intravital', - 'intravitally', - 'intravitam', - 'intrazonal', - 'intreating', - 'intrenched', - 'intrenches', - 'intrenching', - 'intrepidities', - 'intrepidity', - 'intrepidly', - 'intrepidness', - 'intrepidnesses', - 'intricacies', - 'intricately', - 'intricateness', - 'intricatenesses', - 'intrigants', - 'intriguant', - 'intriguants', - 'intriguers', - 'intriguing', - 'intriguingly', - 'intrinsical', - 'intrinsically', - 'introduced', - 'introducer', - 'introducers', - 'introduces', - 'introducing', - 'introduction', - 'introductions', - 'introductorily', - 'introductory', - 'introfying', - 'introgressant', - 'introgressants', - 'introgression', - 'introgressions', - 'introgressive', - 'introjected', - 'introjecting', - 'introjection', - 'introjections', - 'introjects', - 'intromission', - 'intromissions', - 'intromitted', - 'intromittent', - 'intromitter', - 'intromitters', - 'intromitting', - 'introspect', - 'introspected', - 'introspecting', - 'introspection', - 'introspectional', - 'introspectionism', - 'introspectionisms', - 'introspectionist', - 'introspectionistic', - 'introspectionists', - 'introspections', - 'introspective', - 'introspectively', - 'introspectiveness', - 'introspectivenesses', - 'introspects', - 'introversion', - 'introversions', - 'introversive', - 'introversively', - 'introverted', - 'introverting', - 'introverts', - 'intrusions', - 'intrusively', - 'intrusiveness', - 'intrusivenesses', - 'intrusives', - 'intrusting', - 'intubating', - 'intubation', - 'intubations', - 'intuitable', - 'intuitional', - 'intuitionism', - 'intuitionisms', - 'intuitionist', - 'intuitionists', - 'intuitions', - 'intuitively', - 'intuitiveness', - 'intuitivenesses', - 'intumescence', - 'intumescences', - 'intumescent', - 'intussuscept', - 'intussuscepted', - 'intussuscepting', - 'intussusception', - 'intussusceptions', - 'intussusceptive', - 'intussuscepts', - 'intwisting', - 'inunctions', - 'inundating', - 'inundation', - 'inundations', - 'inundators', - 'inundatory', - 'inurements', - 'inutilities', - 'invaginate', - 'invaginated', - 'invaginates', - 'invaginating', - 'invagination', - 'invaginations', - 'invalidate', - 'invalidated', - 'invalidates', - 'invalidating', - 'invalidation', - 'invalidations', - 'invalidator', - 'invalidators', - 'invaliding', - 'invalidism', - 'invalidisms', - 'invalidities', - 'invalidity', - 'invaluable', - 'invaluableness', - 'invaluablenesses', - 'invaluably', - 'invariabilities', - 'invariability', - 'invariable', - 'invariables', - 'invariably', - 'invariance', - 'invariances', - 'invariants', - 'invasively', - 'invasiveness', - 'invasivenesses', - 'invectively', - 'invectiveness', - 'invectivenesses', - 'invectives', - 'inveighers', - 'inveighing', - 'inveiglement', - 'inveiglements', - 'inveiglers', - 'inveigling', - 'inventions', - 'inventively', - 'inventiveness', - 'inventivenesses', - 'inventorial', - 'inventorially', - 'inventoried', - 'inventories', - 'inventorying', - 'inventress', - 'inventresses', - 'inverities', - 'invernesses', - 'inversions', - 'invertases', - 'invertebrate', - 'invertebrates', - 'invertible', - 'investable', - 'investigate', - 'investigated', - 'investigates', - 'investigating', - 'investigation', - 'investigational', - 'investigations', - 'investigative', - 'investigator', - 'investigators', - 'investigatory', - 'investiture', - 'investitures', - 'investment', - 'investments', - 'inveteracies', - 'inveteracy', - 'inveterate', - 'inveterately', - 'inviabilities', - 'inviability', - 'invidiously', - 'invidiousness', - 'invidiousnesses', - 'invigilate', - 'invigilated', - 'invigilates', - 'invigilating', - 'invigilation', - 'invigilations', - 'invigilator', - 'invigilators', - 'invigorate', - 'invigorated', - 'invigorates', - 'invigorating', - 'invigoratingly', - 'invigoration', - 'invigorations', - 'invigorator', - 'invigorators', - 'invincibilities', - 'invincibility', - 'invincible', - 'invincibleness', - 'invinciblenesses', - 'invincibly', - 'inviolabilities', - 'inviolability', - 'inviolable', - 'inviolableness', - 'inviolablenesses', - 'inviolably', - 'inviolacies', - 'inviolately', - 'inviolateness', - 'inviolatenesses', - 'invisibilities', - 'invisibility', - 'invisibleness', - 'invisiblenesses', - 'invisibles', - 'invitation', - 'invitational', - 'invitationals', - 'invitations', - 'invitatories', - 'invitatory', - 'invitingly', - 'invocating', - 'invocation', - 'invocational', - 'invocations', - 'invocatory', - 'involucral', - 'involucrate', - 'involucres', - 'involucrum', - 'involuntarily', - 'involuntariness', - 'involuntarinesses', - 'involuntary', - 'involuting', - 'involution', - 'involutional', - 'involutions', - 'involvedly', - 'involvement', - 'involvements', - 'invulnerabilities', - 'invulnerability', - 'invulnerable', - 'invulnerableness', - 'invulnerablenesses', - 'invulnerably', - 'inwardness', - 'inwardnesses', - 'inwrapping', - 'iodinating', - 'iodination', - 'iodinations', - 'ionicities', - 'ionization', - 'ionizations', - 'ionophores', - 'ionosphere', - 'ionospheres', - 'ionospheric', - 'ionospherically', - 'iontophoreses', - 'iontophoresis', - 'iontophoretic', - 'iontophoretically', - 'ipecacuanha', - 'ipecacuanhas', - 'iproniazid', - 'iproniazids', - 'ipsilateral', - 'ipsilaterally', - 'irascibilities', - 'irascibility', - 'irascibleness', - 'irasciblenesses', - 'iratenesses', - 'irenically', - 'iridescence', - 'iridescences', - 'iridescent', - 'iridescently', - 'iridologies', - 'iridologist', - 'iridologists', - 'iridosmine', - 'iridosmines', - 'irksomeness', - 'irksomenesses', - 'ironfisted', - 'ironhanded', - 'ironhearted', - 'ironically', - 'ironicalness', - 'ironicalnesses', - 'ironmaster', - 'ironmasters', - 'ironmonger', - 'ironmongeries', - 'ironmongers', - 'ironmongery', - 'ironnesses', - 'ironstones', - 'ironworker', - 'ironworkers', - 'irradiance', - 'irradiances', - 'irradiated', - 'irradiates', - 'irradiating', - 'irradiation', - 'irradiations', - 'irradiative', - 'irradiator', - 'irradiators', - 'irradicable', - 'irradicably', - 'irrational', - 'irrationalism', - 'irrationalisms', - 'irrationalist', - 'irrationalistic', - 'irrationalists', - 'irrationalities', - 'irrationality', - 'irrationally', - 'irrationals', - 'irrealities', - 'irreclaimable', - 'irreclaimably', - 'irreconcilabilities', - 'irreconcilability', - 'irreconcilable', - 'irreconcilableness', - 'irreconcilablenesses', - 'irreconcilables', - 'irreconcilably', - 'irrecoverable', - 'irrecoverableness', - 'irrecoverablenesses', - 'irrecoverably', - 'irrecusable', - 'irrecusably', - 'irredeemable', - 'irredeemably', - 'irredentas', - 'irredentism', - 'irredentisms', - 'irredentist', - 'irredentists', - 'irreducibilities', - 'irreducibility', - 'irreducible', - 'irreducibly', - 'irreflexive', - 'irreformabilities', - 'irreformability', - 'irreformable', - 'irrefragabilities', - 'irrefragability', - 'irrefragable', - 'irrefragably', - 'irrefutabilities', - 'irrefutability', - 'irrefutable', - 'irrefutably', - 'irregardless', - 'irregularities', - 'irregularity', - 'irregularly', - 'irregulars', - 'irrelative', - 'irrelatively', - 'irrelevance', - 'irrelevances', - 'irrelevancies', - 'irrelevancy', - 'irrelevant', - 'irrelevantly', - 'irreligion', - 'irreligionist', - 'irreligionists', - 'irreligions', - 'irreligious', - 'irreligiously', - 'irremeable', - 'irremediable', - 'irremediableness', - 'irremediablenesses', - 'irremediably', - 'irremovabilities', - 'irremovability', - 'irremovable', - 'irremovably', - 'irreparable', - 'irreparableness', - 'irreparablenesses', - 'irreparably', - 'irrepealabilities', - 'irrepealability', - 'irrepealable', - 'irreplaceabilities', - 'irreplaceability', - 'irreplaceable', - 'irreplaceableness', - 'irreplaceablenesses', - 'irreplaceably', - 'irrepressibilities', - 'irrepressibility', - 'irrepressible', - 'irrepressibly', - 'irreproachabilities', - 'irreproachability', - 'irreproachable', - 'irreproachableness', - 'irreproachablenesses', - 'irreproachably', - 'irreproducibilities', - 'irreproducibility', - 'irreproducible', - 'irresistibilities', - 'irresistibility', - 'irresistible', - 'irresistibleness', - 'irresistiblenesses', - 'irresistibly', - 'irresoluble', - 'irresolute', - 'irresolutely', - 'irresoluteness', - 'irresolutenesses', - 'irresolution', - 'irresolutions', - 'irresolvable', - 'irrespective', - 'irresponsibilities', - 'irresponsibility', - 'irresponsible', - 'irresponsibleness', - 'irresponsiblenesses', - 'irresponsibles', - 'irresponsibly', - 'irresponsive', - 'irresponsiveness', - 'irresponsivenesses', - 'irretrievabilities', - 'irretrievability', - 'irretrievable', - 'irretrievably', - 'irreverence', - 'irreverences', - 'irreverent', - 'irreverently', - 'irreversibilities', - 'irreversibility', - 'irreversible', - 'irreversibly', - 'irrevocabilities', - 'irrevocability', - 'irrevocable', - 'irrevocableness', - 'irrevocablenesses', - 'irrevocably', - 'irridentas', - 'irrigating', - 'irrigation', - 'irrigations', - 'irrigators', - 'irritabilities', - 'irritability', - 'irritableness', - 'irritablenesses', - 'irritating', - 'irritatingly', - 'irritation', - 'irritations', - 'irritative', - 'irrotational', - 'irruptions', - 'irruptively', - 'isallobaric', - 'isallobars', - 'ischaemias', - 'isentropic', - 'isentropically', - 'isinglasses', - 'isoagglutinin', - 'isoagglutinins', - 'isoalloxazine', - 'isoalloxazines', - 'isoantibodies', - 'isoantibody', - 'isoantigen', - 'isoantigenic', - 'isoantigens', - 'isobutanes', - 'isobutylene', - 'isobutylenes', - 'isocaloric', - 'isocarboxazid', - 'isocarboxazids', - 'isochromosome', - 'isochromosomes', - 'isochronal', - 'isochronally', - 'isochrones', - 'isochronism', - 'isochronisms', - 'isochronous', - 'isochronously', - 'isocracies', - 'isocyanate', - 'isocyanates', - 'isodiametric', - 'isoelectric', - 'isoelectronic', - 'isoelectronically', - 'isoenzymatic', - 'isoenzymes', - 'isoenzymic', - 'isogametes', - 'isogametic', - 'isoglossal', - 'isoglosses', - 'isoglossic', - 'isografted', - 'isografting', - 'isolatable', - 'isolationism', - 'isolationisms', - 'isolationist', - 'isolationists', - 'isolations', - 'isoleucine', - 'isoleucines', - 'isomerases', - 'isomerisms', - 'isomerization', - 'isomerizations', - 'isomerized', - 'isomerizes', - 'isomerizing', - 'isometrically', - 'isometrics', - 'isometries', - 'isomorphic', - 'isomorphically', - 'isomorphism', - 'isomorphisms', - 'isomorphous', - 'isoniazids', - 'isooctanes', - 'isopiestic', - 'isoplethic', - 'isoprenaline', - 'isoprenalines', - 'isoprenoid', - 'isopropyls', - 'isoproterenol', - 'isoproterenols', - 'isosmotically', - 'isospories', - 'isostasies', - 'isostatically', - 'isothermal', - 'isothermally', - 'isotonically', - 'isotonicities', - 'isotonicity', - 'isotopically', - 'isotropies', - 'italianate', - 'italianated', - 'italianates', - 'italianating', - 'italianise', - 'italianised', - 'italianises', - 'italianising', - 'italianize', - 'italianized', - 'italianizes', - 'italianizing', - 'italicised', - 'italicises', - 'italicising', - 'italicization', - 'italicizations', - 'italicized', - 'italicizes', - 'italicizing', - 'itchinesses', - 'itemization', - 'itemizations', - 'iterations', - 'iteratively', - 'ithyphallic', - 'itinerancies', - 'itinerancy', - 'itinerantly', - 'itinerants', - 'itineraries', - 'itinerated', - 'itinerates', - 'itinerating', - 'itineration', - 'itinerations', - 'ivermectin', - 'ivermectins', - 'ivorybills', - 'jabberwockies', - 'jabberwocky', - 'jaborandis', - 'jaboticaba', - 'jaboticabas', - 'jacarandas', - 'jackanapes', - 'jackanapeses', - 'jackasseries', - 'jackassery', - 'jackbooted', - 'jacketless', - 'jackfishes', - 'jackfruits', - 'jackhammer', - 'jackhammered', - 'jackhammering', - 'jackhammers', - 'jackknifed', - 'jackknifes', - 'jackknifing', - 'jackknives', - 'jacklights', - 'jackrabbit', - 'jackrabbits', - 'jackrolled', - 'jackrolling', - 'jackscrews', - 'jacksmelts', - 'jackstraws', - 'jacqueries', - 'jactitation', - 'jactitations', - 'jaculating', - 'jadednesses', - 'jaggedness', - 'jaggednesses', - 'jaggheries', - 'jaguarondi', - 'jaguarondis', - 'jaguarundi', - 'jaguarundis', - 'jailbreaks', - 'jailhouses', - 'jambalayas', - 'janisaries', - 'janissaries', - 'janitorial', - 'janizaries', - 'japanizing', - 'japonaiserie', - 'japonaiseries', - 'jardiniere', - 'jardinieres', - 'jargonistic', - 'jargonized', - 'jargonizes', - 'jargonizing', - 'jarovizing', - 'jasperware', - 'jasperwares', - 'jaundicing', - 'jauntiness', - 'jauntinesses', - 'javelining', - 'jawbonings', - 'jawbreaker', - 'jawbreakers', - 'jayhawkers', - 'jaywalkers', - 'jaywalking', - 'jazzinesses', - 'jealousies', - 'jealousness', - 'jealousnesses', - 'jejuneness', - 'jejunenesses', - 'jejunities', - 'jellifying', - 'jellybeans', - 'jellyfishes', - 'jeopardies', - 'jeoparding', - 'jeopardise', - 'jeopardised', - 'jeopardises', - 'jeopardising', - 'jeopardize', - 'jeopardized', - 'jeopardizes', - 'jeopardizing', - 'jerkinesses', - 'jessamines', - 'jesuitical', - 'jesuitically', - 'jesuitisms', - 'jesuitries', - 'jettisonable', - 'jettisoned', - 'jettisoning', - 'jewelleries', - 'jewelweeds', - 'jimsonweed', - 'jimsonweeds', - 'jingoistic', - 'jingoistically', - 'jinricksha', - 'jinrickshas', - 'jinrikisha', - 'jinrikishas', - 'jitterbugged', - 'jitterbugging', - 'jitterbugs', - 'jitteriest', - 'jitteriness', - 'jitterinesses', - 'jobholders', - 'joblessness', - 'joblessnesses', - 'jockstraps', - 'jocoseness', - 'jocosenesses', - 'jocosities', - 'jocularities', - 'jocularity', - 'jocundities', - 'johnnycake', - 'johnnycakes', - 'johnsongrass', - 'johnsongrasses', - 'jointedness', - 'jointednesses', - 'jointresses', - 'jointuring', - 'jointworms', - 'jokinesses', - 'jollification', - 'jollifications', - 'jollifying', - 'journalese', - 'journaleses', - 'journalism', - 'journalisms', - 'journalist', - 'journalistic', - 'journalistically', - 'journalists', - 'journalize', - 'journalized', - 'journalizer', - 'journalizers', - 'journalizes', - 'journalizing', - 'journeyers', - 'journeying', - 'journeyman', - 'journeymen', - 'journeywork', - 'journeyworks', - 'jovialities', - 'jovialties', - 'joyfullest', - 'joyfulness', - 'joyfulnesses', - 'joylessness', - 'joylessnesses', - 'joyousness', - 'joyousnesses', - 'joypoppers', - 'joypopping', - 'joyridings', - 'jubilances', - 'jubilantly', - 'jubilarian', - 'jubilarians', - 'jubilating', - 'jubilation', - 'jubilations', - 'judgements', - 'judgeships', - 'judgmatical', - 'judgmatically', - 'judgmental', - 'judgmentally', - 'judicatories', - 'judicatory', - 'judicature', - 'judicatures', - 'judicially', - 'judiciaries', - 'judiciously', - 'judiciousness', - 'judiciousnesses', - 'juggernaut', - 'juggernauts', - 'juggleries', - 'jugulating', - 'juiceheads', - 'juicinesses', - 'julienning', - 'jumpinesses', - 'junctional', - 'junglelike', - 'juniorates', - 'junketeers', - 'juridically', - 'jurisconsult', - 'jurisconsults', - 'jurisdiction', - 'jurisdictional', - 'jurisdictionally', - 'jurisdictions', - 'jurisprudence', - 'jurisprudences', - 'jurisprudent', - 'jurisprudential', - 'jurisprudentially', - 'jurisprudents', - 'juristically', - 'justiciabilities', - 'justiciability', - 'justiciable', - 'justiciars', - 'justifiabilities', - 'justifiability', - 'justifiable', - 'justifiably', - 'justification', - 'justifications', - 'justificative', - 'justificatory', - 'justifiers', - 'justifying', - 'justnesses', - 'juvenescence', - 'juvenescences', - 'juvenescent', - 'juvenilities', - 'juvenility', - 'juxtaposed', - 'juxtaposes', - 'juxtaposing', - 'juxtaposition', - 'juxtapositional', - 'juxtapositions', - 'kaffeeklatsch', - 'kaffeeklatsches', - 'kaiserdoms', - 'kaiserisms', - 'kalanchoes', - 'kaleidoscope', - 'kaleidoscopes', - 'kaleidoscopic', - 'kaleidoscopically', - 'kallikrein', - 'kallikreins', - 'kanamycins', - 'kaolinites', - 'kaolinitic', - 'kapellmeister', - 'kapellmeisters', - 'karabiners', - 'karateists', - 'karyogamies', - 'karyokineses', - 'karyokinesis', - 'karyokinetic', - 'karyologic', - 'karyological', - 'karyologies', - 'karyolymph', - 'karyolymphs', - 'karyosomes', - 'karyotyped', - 'karyotypes', - 'karyotypic', - 'karyotypically', - 'karyotyping', - 'katzenjammer', - 'katzenjammers', - 'kazatskies', - 'keelhaling', - 'keelhauled', - 'keelhauling', - 'keennesses', - 'keeshonden', - 'kennelling', - 'kenspeckle', - 'kentledges', - 'keratinization', - 'keratinizations', - 'keratinize', - 'keratinized', - 'keratinizes', - 'keratinizing', - 'keratinophilic', - 'keratinous', - 'keratitides', - 'keratoconjunctivites', - 'keratoconjunctivitides', - 'keratoconjunctivitis', - 'keratoconjunctivitises', - 'keratomata', - 'keratoplasties', - 'keratoplasty', - 'keratotomies', - 'keratotomy', - 'kerchiefed', - 'kerchieves', - 'kerfuffles', - 'kernelling', - 'kerplunked', - 'kerplunking', - 'kerseymere', - 'kerseymeres', - 'kerygmatic', - 'ketogeneses', - 'ketogenesis', - 'ketosteroid', - 'ketosteroids', - 'kettledrum', - 'kettledrums', - 'keyboarded', - 'keyboarder', - 'keyboarders', - 'keyboarding', - 'keyboardist', - 'keyboardists', - 'keybuttons', - 'keypunched', - 'keypuncher', - 'keypunchers', - 'keypunches', - 'keypunching', - 'keystroked', - 'keystrokes', - 'keystroking', - 'kibbitzers', - 'kibbitzing', - 'kibbutznik', - 'kibbutzniks', - 'kickboards', - 'kickboxers', - 'kickboxing', - 'kickboxings', - 'kickstands', - 'kidnappees', - 'kidnappers', - 'kidnapping', - 'kieselguhr', - 'kieselguhrs', - 'kieserites', - 'kilderkins', - 'killifishes', - 'kilocalorie', - 'kilocalories', - 'kilocycles', - 'kilogausses', - 'kilojoules', - 'kiloliters', - 'kilometers', - 'kiloparsec', - 'kiloparsecs', - 'kilopascal', - 'kilopascals', - 'kimberlite', - 'kimberlites', - 'kindergarten', - 'kindergartener', - 'kindergarteners', - 'kindergartens', - 'kindergartner', - 'kindergartners', - 'kindhearted', - 'kindheartedly', - 'kindheartedness', - 'kindheartednesses', - 'kindlessly', - 'kindliness', - 'kindlinesses', - 'kindnesses', - 'kinematical', - 'kinematically', - 'kinematics', - 'kinescoped', - 'kinescopes', - 'kinescoping', - 'kinesiologies', - 'kinesiology', - 'kinestheses', - 'kinesthesia', - 'kinesthesias', - 'kinesthesis', - 'kinesthetic', - 'kinesthetically', - 'kinetically', - 'kineticist', - 'kineticists', - 'kinetochore', - 'kinetochores', - 'kinetoplast', - 'kinetoplasts', - 'kinetoscope', - 'kinetoscopes', - 'kinetosome', - 'kinetosomes', - 'kingcrafts', - 'kingfisher', - 'kingfishers', - 'kingfishes', - 'kingliness', - 'kinglinesses', - 'kingmakers', - 'kinkinesses', - 'kinnikinnick', - 'kinnikinnicks', - 'kitchenette', - 'kitchenettes', - 'kitchenware', - 'kitchenwares', - 'kittenishly', - 'kittenishness', - 'kittenishnesses', - 'kittiwakes', - 'kiwifruits', - 'klebsiella', - 'klebsiellas', - 'kleptomania', - 'kleptomaniac', - 'kleptomaniacs', - 'kleptomanias', - 'klutziness', - 'klutzinesses', - 'knackeries', - 'knackwurst', - 'knackwursts', - 'knapsacked', - 'kneecapped', - 'kneecapping', - 'kneecappings', - 'knickerbocker', - 'knickerbockers', - 'knickknacks', - 'knifepoint', - 'knifepoints', - 'knighthood', - 'knighthoods', - 'knightliness', - 'knightlinesses', - 'knobbliest', - 'knobkerrie', - 'knobkerries', - 'knockabout', - 'knockabouts', - 'knockdowns', - 'knockwurst', - 'knockwursts', - 'knotgrasses', - 'knottiness', - 'knottinesses', - 'knowingest', - 'knowingness', - 'knowingnesses', - 'knowledgeabilities', - 'knowledgeability', - 'knowledgeable', - 'knowledgeableness', - 'knowledgeablenesses', - 'knowledgeably', - 'knowledges', - 'knuckleball', - 'knuckleballer', - 'knuckleballers', - 'knuckleballs', - 'knucklebone', - 'knucklebones', - 'knucklehead', - 'knuckleheaded', - 'knuckleheads', - 'knuckliest', - 'kohlrabies', - 'kolinskies', - 'kolkhoznik', - 'kolkhozniki', - 'kolkhozniks', - 'komondorock', - 'komondorok', - 'kookaburra', - 'kookaburras', - 'kookinesses', - 'kremlinologies', - 'kremlinologist', - 'kremlinologists', - 'kremlinology', - 'krummhorns', - 'kundalinis', - 'kurbashing', - 'kurrajongs', - 'kurtosises', - 'kvetchiest', - 'kwashiorkor', - 'kwashiorkors', - 'kymographic', - 'kymographies', - 'kymographs', - 'kymography', - 'labanotation', - 'labanotations', - 'labialization', - 'labializations', - 'labialized', - 'labializes', - 'labializing', - 'labilities', - 'labiodental', - 'labiodentals', - 'labiovelar', - 'labiovelars', - 'laboratories', - 'laboratory', - 'laboriously', - 'laboriousness', - 'laboriousnesses', - 'laborsaving', - 'labradorite', - 'labradorites', - 'labyrinthian', - 'labyrinthine', - 'labyrinthodont', - 'labyrinthodonts', - 'labyrinths', - 'laccolithic', - 'laccoliths', - 'lacerating', - 'laceration', - 'lacerations', - 'lacerative', - 'lachrymator', - 'lachrymators', - 'lachrymose', - 'lachrymosely', - 'lachrymosities', - 'lachrymosity', - 'lacinesses', - 'laciniation', - 'laciniations', - 'lackadaisical', - 'lackadaisically', - 'lackluster', - 'lacklusters', - 'laconically', - 'lacquerers', - 'lacquering', - 'lacquerware', - 'lacquerwares', - 'lacquerwork', - 'lacquerworks', - 'lacqueying', - 'lacrimation', - 'lacrimations', - 'lacrimator', - 'lacrimators', - 'lactalbumin', - 'lactalbumins', - 'lactational', - 'lactations', - 'lactiferous', - 'lactobacilli', - 'lactobacillus', - 'lactogenic', - 'lactoglobulin', - 'lactoglobulins', - 'lacustrine', - 'ladderlike', - 'ladyfinger', - 'ladyfingers', - 'ladyfishes', - 'laggardness', - 'laggardnesses', - 'lagniappes', - 'lagomorphs', - 'laicization', - 'laicizations', - 'lakefronts', - 'lakeshores', - 'lallygagged', - 'lallygagging', - 'lamaseries', - 'lambasting', - 'lambencies', - 'lambrequin', - 'lambrequins', - 'lamebrained', - 'lamebrains', - 'lamellately', - 'lamellibranch', - 'lamellibranchs', - 'lamellicorn', - 'lamellicorns', - 'lamelliform', - 'lamenesses', - 'lamentable', - 'lamentableness', - 'lamentablenesses', - 'lamentably', - 'lamentation', - 'lamentations', - 'lamentedly', - 'laminarian', - 'laminarians', - 'laminarias', - 'laminarins', - 'laminating', - 'lamination', - 'laminations', - 'laminators', - 'laminitises', - 'lammergeier', - 'lammergeiers', - 'lammergeyer', - 'lammergeyers', - 'lampblacks', - 'lamplighter', - 'lamplighters', - 'lamplights', - 'lampooneries', - 'lampooners', - 'lampoonery', - 'lampooning', - 'lampshells', - 'lanceolate', - 'lancewoods', - 'lancinating', - 'landaulets', - 'landholder', - 'landholders', - 'landholding', - 'landholdings', - 'landladies', - 'landlessness', - 'landlessnesses', - 'landlocked', - 'landlordism', - 'landlordisms', - 'landlubber', - 'landlubberliness', - 'landlubberlinesses', - 'landlubberly', - 'landlubbers', - 'landlubbing', - 'landmasses', - 'landowners', - 'landownership', - 'landownerships', - 'landowning', - 'landownings', - 'landscaped', - 'landscaper', - 'landscapers', - 'landscapes', - 'landscaping', - 'landscapist', - 'landscapists', - 'landslides', - 'landsliding', - 'langbeinite', - 'langbeinites', - 'langlaufer', - 'langlaufers', - 'langostino', - 'langostinos', - 'langoustes', - 'langoustine', - 'langoustines', - 'languidness', - 'languidnesses', - 'languished', - 'languisher', - 'languishers', - 'languishes', - 'languishing', - 'languishingly', - 'languishment', - 'languishments', - 'languorous', - 'languorously', - 'lankinesses', - 'lanknesses', - 'lanosities', - 'lanthanide', - 'lanthanides', - 'lanthanums', - 'lanuginous', - 'laparoscope', - 'laparoscopes', - 'laparoscopic', - 'laparoscopies', - 'laparoscopist', - 'laparoscopists', - 'laparoscopy', - 'laparotomies', - 'laparotomy', - 'lapidarian', - 'lapidaries', - 'lapidating', - 'lapidified', - 'lapidifies', - 'lapidifying', - 'larcenists', - 'larcenously', - 'largehearted', - 'largeheartedness', - 'largeheartednesses', - 'largemouth', - 'largemouths', - 'largenesses', - 'larghettos', - 'larkinesses', - 'larvicidal', - 'larvicides', - 'laryngeals', - 'laryngectomee', - 'laryngectomees', - 'laryngectomies', - 'laryngectomized', - 'laryngectomy', - 'laryngites', - 'laryngitic', - 'laryngitides', - 'laryngitis', - 'laryngitises', - 'laryngologies', - 'laryngology', - 'laryngoscope', - 'laryngoscopes', - 'laryngoscopies', - 'laryngoscopy', - 'lascivious', - 'lasciviously', - 'lasciviousness', - 'lasciviousnesses', - 'lassitudes', - 'lastingness', - 'lastingnesses', - 'latchstring', - 'latchstrings', - 'latecomers', - 'latenesses', - 'latensification', - 'latensifications', - 'lateraling', - 'lateralization', - 'lateralizations', - 'lateralize', - 'lateralized', - 'lateralizes', - 'lateralizing', - 'laterization', - 'laterizations', - 'laterizing', - 'lathyrisms', - 'lathyritic', - 'laticifers', - 'latifundia', - 'latifundio', - 'latifundios', - 'latifundium', - 'latinities', - 'latinization', - 'latinizations', - 'latinizing', - 'latitudinal', - 'latitudinally', - 'latitudinarian', - 'latitudinarianism', - 'latitudinarianisms', - 'latitudinarians', - 'latticework', - 'latticeworks', - 'laudableness', - 'laudablenesses', - 'laudations', - 'laughableness', - 'laughablenesses', - 'laughingly', - 'laughingstock', - 'laughingstocks', - 'launchpads', - 'launderers', - 'launderette', - 'launderettes', - 'laundering', - 'laundresses', - 'laundrette', - 'laundrettes', - 'laundryman', - 'laundrymen', - 'laureateship', - 'laureateships', - 'laureating', - 'laureation', - 'laureations', - 'laurelling', - 'lavalieres', - 'lavalliere', - 'lavallieres', - 'lavatories', - 'lavendered', - 'lavendering', - 'lavishness', - 'lavishnesses', - 'lawbreaker', - 'lawbreakers', - 'lawbreaking', - 'lawbreakings', - 'lawfulness', - 'lawfulnesses', - 'lawlessness', - 'lawlessnesses', - 'lawmakings', - 'lawnmowers', - 'lawrencium', - 'lawrenciums', - 'lawyerings', - 'lawyerlike', - 'laypersons', - 'lazarettes', - 'lazarettos', - 'lazinesses', - 'leachabilities', - 'leachability', - 'leadenness', - 'leadennesses', - 'leaderless', - 'leadership', - 'leaderships', - 'leadplants', - 'leadscrews', - 'leafhopper', - 'leafhoppers', - 'leafleteer', - 'leafleteers', - 'leafleting', - 'leafletted', - 'leafletting', - 'leafstalks', - 'leaguering', - 'leakinesses', - 'leannesses', - 'leapfrogged', - 'leapfrogging', - 'learnedness', - 'learnednesses', - 'leasebacks', - 'leaseholder', - 'leaseholders', - 'leaseholds', - 'leatherback', - 'leatherbacks', - 'leatherette', - 'leatherettes', - 'leathering', - 'leatherleaf', - 'leatherleaves', - 'leatherlike', - 'leatherneck', - 'leathernecks', - 'leatherwood', - 'leatherwoods', - 'leavenings', - 'lebensraum', - 'lebensraums', - 'lecherously', - 'lecherousness', - 'lecherousnesses', - 'lecithinase', - 'lecithinases', - 'lectionaries', - 'lectionary', - 'lectotypes', - 'lectureship', - 'lectureships', - 'lederhosen', - 'legalising', - 'legalistic', - 'legalistically', - 'legalities', - 'legalization', - 'legalizations', - 'legalizers', - 'legalizing', - 'legateship', - 'legateships', - 'legendarily', - 'legendries', - 'legerdemain', - 'legerdemains', - 'legerities', - 'legginesses', - 'legibilities', - 'legibility', - 'legionaries', - 'legionnaire', - 'legionnaires', - 'legislated', - 'legislates', - 'legislating', - 'legislation', - 'legislations', - 'legislative', - 'legislatively', - 'legislatives', - 'legislator', - 'legislatorial', - 'legislators', - 'legislatorship', - 'legislatorships', - 'legislature', - 'legislatures', - 'legitimacies', - 'legitimacy', - 'legitimate', - 'legitimated', - 'legitimately', - 'legitimates', - 'legitimating', - 'legitimation', - 'legitimations', - 'legitimatize', - 'legitimatized', - 'legitimatizes', - 'legitimatizing', - 'legitimator', - 'legitimators', - 'legitimise', - 'legitimised', - 'legitimises', - 'legitimising', - 'legitimism', - 'legitimisms', - 'legitimist', - 'legitimists', - 'legitimization', - 'legitimizations', - 'legitimize', - 'legitimized', - 'legitimizer', - 'legitimizers', - 'legitimizes', - 'legitimizing', - 'leguminous', - 'leishmania', - 'leishmanial', - 'leishmanias', - 'leishmaniases', - 'leishmaniasis', - 'leistering', - 'leisureliness', - 'leisurelinesses', - 'leitmotifs', - 'leitmotivs', - 'lemminglike', - 'lemniscate', - 'lemniscates', - 'lemongrass', - 'lemongrasses', - 'lengthened', - 'lengthener', - 'lengtheners', - 'lengthening', - 'lengthiest', - 'lengthiness', - 'lengthinesses', - 'lengthways', - 'lengthwise', - 'leniencies', - 'lenitively', - 'lentamente', - 'lenticular', - 'lenticules', - 'lentigines', - 'lentissimo', - 'lentivirus', - 'lentiviruses', - 'leopardess', - 'leopardesses', - 'lepidolite', - 'lepidolites', - 'lepidoptera', - 'lepidopteran', - 'lepidopterans', - 'lepidopterist', - 'lepidopterists', - 'lepidopterological', - 'lepidopterologies', - 'lepidopterologist', - 'lepidopterologists', - 'lepidopterology', - 'lepidopterous', - 'leprechaun', - 'leprechaunish', - 'leprechauns', - 'lepromatous', - 'leprosaria', - 'leprosarium', - 'leprosariums', - 'leptocephali', - 'leptocephalus', - 'leptosomes', - 'leptospiral', - 'leptospire', - 'leptospires', - 'leptospiroses', - 'leptospirosis', - 'leptotenes', - 'lesbianism', - 'lesbianisms', - 'lespedezas', - 'lethalities', - 'lethargically', - 'lethargies', - 'letterboxed', - 'letterboxing', - 'letterboxings', - 'letterform', - 'letterforms', - 'letterhead', - 'letterheads', - 'letterings', - 'letterpress', - 'letterpresses', - 'letterspace', - 'letterspaces', - 'letterspacing', - 'letterspacings', - 'leucocidin', - 'leucocidins', - 'leucoplast', - 'leucoplasts', - 'leukaemias', - 'leukaemogeneses', - 'leukaemogenesis', - 'leukemogeneses', - 'leukemogenesis', - 'leukemogenic', - 'leukocytes', - 'leukocytic', - 'leukocytoses', - 'leukocytosis', - 'leukocytosises', - 'leukodystrophies', - 'leukodystrophy', - 'leukopenia', - 'leukopenias', - 'leukopenic', - 'leukoplakia', - 'leukoplakias', - 'leukoplakic', - 'leukopoieses', - 'leukopoiesis', - 'leukopoietic', - 'leukorrhea', - 'leukorrheal', - 'leukorrheas', - 'leukotomies', - 'leukotriene', - 'leukotrienes', - 'levelheaded', - 'levelheadedness', - 'levelheadednesses', - 'levelnesses', - 'leveraging', - 'leviathans', - 'levigating', - 'levigation', - 'levigations', - 'levitating', - 'levitation', - 'levitational', - 'levitations', - 'levorotary', - 'levorotatory', - 'lewdnesses', - 'lexicalisation', - 'lexicalisations', - 'lexicalities', - 'lexicality', - 'lexicalization', - 'lexicalizations', - 'lexicalize', - 'lexicalized', - 'lexicalizes', - 'lexicalizing', - 'lexicographer', - 'lexicographers', - 'lexicographic', - 'lexicographical', - 'lexicographically', - 'lexicographies', - 'lexicography', - 'lexicologies', - 'lexicologist', - 'lexicologists', - 'lexicology', - 'liabilities', - 'libationary', - 'libecchios', - 'libellants', - 'liberalise', - 'liberalised', - 'liberalises', - 'liberalising', - 'liberalism', - 'liberalisms', - 'liberalist', - 'liberalistic', - 'liberalists', - 'liberalities', - 'liberality', - 'liberalization', - 'liberalizations', - 'liberalize', - 'liberalized', - 'liberalizer', - 'liberalizers', - 'liberalizes', - 'liberalizing', - 'liberalness', - 'liberalnesses', - 'liberating', - 'liberation', - 'liberationist', - 'liberationists', - 'liberations', - 'liberators', - 'libertarian', - 'libertarianism', - 'libertarianisms', - 'libertarians', - 'libertinage', - 'libertinages', - 'libertines', - 'libertinism', - 'libertinisms', - 'libidinally', - 'libidinous', - 'libidinously', - 'libidinousness', - 'libidinousnesses', - 'librarians', - 'librarianship', - 'librarianships', - 'librational', - 'librations', - 'librettist', - 'librettists', - 'licensable', - 'licensures', - 'licentiate', - 'licentiates', - 'licentious', - 'licentiously', - 'licentiousness', - 'licentiousnesses', - 'lichenological', - 'lichenologies', - 'lichenologist', - 'lichenologists', - 'lichenology', - 'lickerishly', - 'lickerishness', - 'lickerishnesses', - 'lickspittle', - 'lickspittles', - 'lidocaines', - 'liebfraumilch', - 'liebfraumilchs', - 'lienteries', - 'lieutenancies', - 'lieutenancy', - 'lieutenant', - 'lieutenants', - 'lifebloods', - 'lifeguarded', - 'lifeguarding', - 'lifeguards', - 'lifelessly', - 'lifelessness', - 'lifelessnesses', - 'lifelikeness', - 'lifelikenesses', - 'lifemanship', - 'lifemanships', - 'lifesavers', - 'lifesaving', - 'lifesavings', - 'lifestyles', - 'ligamentous', - 'ligaturing', - 'lightbulbs', - 'lighteners', - 'lightening', - 'lighterage', - 'lighterages', - 'lightering', - 'lightfaced', - 'lightfaces', - 'lightfastness', - 'lightfastnesses', - 'lightheaded', - 'lighthearted', - 'lightheartedly', - 'lightheartedness', - 'lightheartednesses', - 'lighthouse', - 'lighthouses', - 'lightnesses', - 'lightninged', - 'lightnings', - 'lightplane', - 'lightplanes', - 'lightproof', - 'lightships', - 'lightsomely', - 'lightsomeness', - 'lightsomenesses', - 'lighttight', - 'lightweight', - 'lightweights', - 'lightwoods', - 'lignification', - 'lignifications', - 'lignifying', - 'lignocellulose', - 'lignocelluloses', - 'lignocellulosic', - 'lignosulfonate', - 'lignosulfonates', - 'likabilities', - 'likability', - 'likableness', - 'likablenesses', - 'likelihood', - 'likelihoods', - 'likenesses', - 'lilliputian', - 'lilliputians', - 'liltingness', - 'liltingnesses', - 'limberness', - 'limbernesses', - 'limelighted', - 'limelighting', - 'limelights', - 'limestones', - 'limewaters', - 'liminesses', - 'limitation', - 'limitational', - 'limitations', - 'limitative', - 'limitedness', - 'limitednesses', - 'limitingly', - 'limitlessly', - 'limitlessness', - 'limitlessnesses', - 'limitrophe', - 'limnologic', - 'limnological', - 'limnologies', - 'limnologist', - 'limnologists', - 'limousines', - 'limpidities', - 'limpidness', - 'limpidnesses', - 'limpnesses', - 'lincomycin', - 'lincomycins', - 'linealities', - 'lineamental', - 'lineaments', - 'linearised', - 'linearises', - 'linearising', - 'linearities', - 'linearization', - 'linearizations', - 'linearized', - 'linearizes', - 'linearizing', - 'lineations', - 'linebacker', - 'linebackers', - 'linebacking', - 'linebackings', - 'linebreeding', - 'linebreedings', - 'linecaster', - 'linecasters', - 'linecasting', - 'linecastings', - 'linerboard', - 'linerboards', - 'lingeringly', - 'lingonberries', - 'lingonberry', - 'linguistic', - 'linguistical', - 'linguistically', - 'linguistician', - 'linguisticians', - 'linguistics', - 'linoleates', - 'lintwhites', - 'lionfishes', - 'lionhearted', - 'lionization', - 'lionizations', - 'lipogeneses', - 'lipogenesis', - 'lipomatous', - 'lipophilic', - 'lipopolysaccharide', - 'lipopolysaccharides', - 'lipoprotein', - 'lipoproteins', - 'liposuction', - 'liposuctions', - 'lipotropic', - 'lipotropin', - 'lipotropins', - 'lipreading', - 'lipreadings', - 'lipsticked', - 'liquations', - 'liquefaction', - 'liquefactions', - 'liquefiers', - 'liquefying', - 'liquescent', - 'liquidambar', - 'liquidambars', - 'liquidated', - 'liquidates', - 'liquidating', - 'liquidation', - 'liquidations', - 'liquidator', - 'liquidators', - 'liquidities', - 'liquidized', - 'liquidizes', - 'liquidizing', - 'liquidness', - 'liquidnesses', - 'liquifying', - 'liquorices', - 'lissomeness', - 'lissomenesses', - 'listenable', - 'listenership', - 'listenerships', - 'listerioses', - 'listeriosis', - 'listlessly', - 'listlessness', - 'listlessnesses', - 'literacies', - 'literalism', - 'literalisms', - 'literalist', - 'literalistic', - 'literalists', - 'literalities', - 'literality', - 'literalization', - 'literalizations', - 'literalize', - 'literalized', - 'literalizes', - 'literalizing', - 'literalness', - 'literalnesses', - 'literarily', - 'literariness', - 'literarinesses', - 'literately', - 'literateness', - 'literatenesses', - 'literation', - 'literations', - 'literators', - 'literature', - 'literatures', - 'lithenesses', - 'lithification', - 'lithifications', - 'lithifying', - 'lithograph', - 'lithographed', - 'lithographer', - 'lithographers', - 'lithographic', - 'lithographically', - 'lithographies', - 'lithographing', - 'lithographs', - 'lithography', - 'lithologic', - 'lithological', - 'lithologically', - 'lithologies', - 'lithophane', - 'lithophanes', - 'lithophyte', - 'lithophytes', - 'lithopones', - 'lithosphere', - 'lithospheres', - 'lithospheric', - 'lithotomies', - 'lithotripsies', - 'lithotripsy', - 'lithotripter', - 'lithotripters', - 'lithotriptor', - 'lithotriptors', - 'litigating', - 'litigation', - 'litigations', - 'litigators', - 'litigiously', - 'litigiousness', - 'litigiousnesses', - 'litterateur', - 'litterateurs', - 'litterbags', - 'litterbugs', - 'littermate', - 'littermates', - 'littleneck', - 'littlenecks', - 'littleness', - 'littlenesses', - 'liturgical', - 'liturgically', - 'liturgiologies', - 'liturgiologist', - 'liturgiologists', - 'liturgiology', - 'liturgists', - 'livabilities', - 'livability', - 'livableness', - 'livablenesses', - 'liveabilities', - 'liveability', - 'livelihood', - 'livelihoods', - 'liveliness', - 'livelinesses', - 'livenesses', - 'liverishness', - 'liverishnesses', - 'liverworts', - 'liverwurst', - 'liverwursts', - 'livestocks', - 'livetrapped', - 'livetrapping', - 'lividities', - 'lividnesses', - 'livingness', - 'livingnesses', - 'lixiviated', - 'lixiviates', - 'lixiviating', - 'lixiviation', - 'lixiviations', - 'loadmaster', - 'loadmasters', - 'loadstones', - 'loathnesses', - 'loathsomely', - 'loathsomeness', - 'loathsomenesses', - 'lobectomies', - 'loblollies', - 'lobotomies', - 'lobotomise', - 'lobotomised', - 'lobotomises', - 'lobotomising', - 'lobotomize', - 'lobotomized', - 'lobotomizes', - 'lobotomizing', - 'lobscouses', - 'lobstering', - 'lobsterings', - 'lobsterlike', - 'lobsterman', - 'lobstermen', - 'lobulation', - 'lobulations', - 'localising', - 'localities', - 'localizabilities', - 'localizability', - 'localizable', - 'localization', - 'localizations', - 'localizing', - 'locational', - 'locationally', - 'lockkeeper', - 'lockkeepers', - 'locksmithing', - 'locksmithings', - 'locksmiths', - 'lockstitch', - 'lockstitched', - 'lockstitches', - 'lockstitching', - 'locomoting', - 'locomotion', - 'locomotions', - 'locomotive', - 'locomotives', - 'locomotory', - 'loculicidal', - 'locutories', - 'lodestones', - 'lodgements', - 'loftinesses', - 'loganberries', - 'loganberry', - 'logaoedics', - 'logarithmic', - 'logarithmically', - 'logarithms', - 'loggerhead', - 'loggerheads', - 'logicalities', - 'logicality', - 'logicalness', - 'logicalnesses', - 'logicising', - 'logicizing', - 'loginesses', - 'logistical', - 'logistically', - 'logistician', - 'logisticians', - 'lognormalities', - 'lognormality', - 'lognormally', - 'logogrammatic', - 'logographic', - 'logographically', - 'logographs', - 'logogriphs', - 'logomachies', - 'logorrheas', - 'logorrheic', - 'logotypies', - 'logrollers', - 'logrolling', - 'logrollings', - 'loincloths', - 'lollapalooza', - 'lollapaloozas', - 'lollygagged', - 'lollygagging', - 'loneliness', - 'lonelinesses', - 'lonenesses', - 'lonesomely', - 'lonesomeness', - 'lonesomenesses', - 'longanimities', - 'longanimity', - 'longbowman', - 'longbowmen', - 'longevities', - 'longhaired', - 'longheaded', - 'longheadedness', - 'longheadednesses', - 'longhouses', - 'longicorns', - 'longitudes', - 'longitudinal', - 'longitudinally', - 'longleaves', - 'longnesses', - 'longshoreman', - 'longshoremen', - 'longshoring', - 'longshorings', - 'longsighted', - 'longsightedness', - 'longsightednesses', - 'longsomely', - 'longsomeness', - 'longsomenesses', - 'lookalikes', - 'looninesses', - 'loopholing', - 'loosenesses', - 'loosestrife', - 'loosestrifes', - 'lophophore', - 'lophophores', - 'lopsidedly', - 'lopsidedness', - 'lopsidednesses', - 'loquacious', - 'loquaciously', - 'loquaciousness', - 'loquaciousnesses', - 'loquacities', - 'lordliness', - 'lordlinesses', - 'lorgnettes', - 'lornnesses', - 'losableness', - 'losablenesses', - 'lostnesses', - 'lotuslands', - 'loudmouthed', - 'loudmouths', - 'loudnesses', - 'loudspeaker', - 'loudspeakers', - 'loungewear', - 'louseworts', - 'lousinesses', - 'loutishness', - 'loutishnesses', - 'lovabilities', - 'lovability', - 'lovableness', - 'lovablenesses', - 'lovastatin', - 'lovastatins', - 'lovelessly', - 'lovelessness', - 'lovelessnesses', - 'loveliness', - 'lovelinesses', - 'lovelornness', - 'lovelornnesses', - 'lovemaking', - 'lovemakings', - 'lovesickness', - 'lovesicknesses', - 'lovingness', - 'lovingnesses', - 'lowballing', - 'lowercased', - 'lowercases', - 'lowercasing', - 'lowerclassman', - 'lowerclassmen', - 'lowlanders', - 'lowliheads', - 'lowlinesses', - 'loxodromes', - 'lubberliness', - 'lubberlinesses', - 'lubricants', - 'lubricated', - 'lubricates', - 'lubricating', - 'lubrication', - 'lubrications', - 'lubricative', - 'lubricator', - 'lubricators', - 'lubricious', - 'lubriciously', - 'lubricities', - 'lucidities', - 'lucidnesses', - 'luciferase', - 'luciferases', - 'luciferins', - 'luciferous', - 'luckinesses', - 'lucratively', - 'lucrativeness', - 'lucrativenesses', - 'lucubration', - 'lucubrations', - 'luculently', - 'ludicrously', - 'ludicrousness', - 'ludicrousnesses', - 'luftmensch', - 'luftmenschen', - 'lugubrious', - 'lugubriously', - 'lugubriousness', - 'lugubriousnesses', - 'lukewarmly', - 'lukewarmness', - 'lukewarmnesses', - 'lullabying', - 'lumberjack', - 'lumberjacks', - 'lumberyard', - 'lumberyards', - 'lumbosacral', - 'luminaires', - 'luminances', - 'luminarias', - 'luminaries', - 'luminesced', - 'luminescence', - 'luminescences', - 'luminescent', - 'luminesces', - 'luminescing', - 'luminiferous', - 'luminosities', - 'luminosity', - 'luminously', - 'luminousness', - 'luminousnesses', - 'lumpectomies', - 'lumpectomy', - 'lumpenproletariat', - 'lumpenproletariats', - 'lumpfishes', - 'lumpinesses', - 'lumpishness', - 'lumpishnesses', - 'luncheonette', - 'luncheonettes', - 'lunchmeats', - 'lunchrooms', - 'lunchtimes', - 'lungfishes', - 'lunkheaded', - 'luridnesses', - 'lusciously', - 'lusciousness', - 'lusciousnesses', - 'lushnesses', - 'lusterless', - 'lusterware', - 'lusterwares', - 'lustfulness', - 'lustfulnesses', - 'lustihoods', - 'lustinesses', - 'lustrating', - 'lustration', - 'lustrations', - 'lustrously', - 'lustrousness', - 'lustrousnesses', - 'luteinization', - 'luteinizations', - 'luteinized', - 'luteinizes', - 'luteinizing', - 'luteotrophic', - 'luteotrophin', - 'luteotrophins', - 'luteotropic', - 'luteotropin', - 'luteotropins', - 'lutestring', - 'lutestrings', - 'luxuriance', - 'luxuriances', - 'luxuriantly', - 'luxuriated', - 'luxuriates', - 'luxuriating', - 'luxuriously', - 'luxuriousness', - 'luxuriousnesses', - 'lycanthrope', - 'lycanthropes', - 'lycanthropic', - 'lycanthropies', - 'lycanthropy', - 'lycopodium', - 'lycopodiums', - 'lymphadenitis', - 'lymphadenitises', - 'lymphadenopathies', - 'lymphadenopathy', - 'lymphangiogram', - 'lymphangiograms', - 'lymphangiographic', - 'lymphangiographies', - 'lymphangiography', - 'lymphatically', - 'lymphatics', - 'lymphoblast', - 'lymphoblastic', - 'lymphoblasts', - 'lymphocyte', - 'lymphocytes', - 'lymphocytic', - 'lymphocytoses', - 'lymphocytosis', - 'lymphocytosises', - 'lymphogram', - 'lymphograms', - 'lymphogranuloma', - 'lymphogranulomas', - 'lymphogranulomata', - 'lymphogranulomatoses', - 'lymphogranulomatosis', - 'lymphographic', - 'lymphographies', - 'lymphography', - 'lymphokine', - 'lymphokines', - 'lymphomata', - 'lymphomatoses', - 'lymphomatosis', - 'lymphomatous', - 'lymphosarcoma', - 'lymphosarcomas', - 'lymphosarcomata', - 'lyophilise', - 'lyophilised', - 'lyophilises', - 'lyophilising', - 'lyophilization', - 'lyophilizations', - 'lyophilize', - 'lyophilized', - 'lyophilizer', - 'lyophilizers', - 'lyophilizes', - 'lyophilizing', - 'lyricalness', - 'lyricalnesses', - 'lyricising', - 'lyricizing', - 'lysimeters', - 'lysimetric', - 'lysogenicities', - 'lysogenicity', - 'lysogenies', - 'lysogenise', - 'lysogenised', - 'lysogenises', - 'lysogenising', - 'lysogenization', - 'lysogenizations', - 'lysogenize', - 'lysogenized', - 'lysogenizes', - 'lysogenizing', - 'lysolecithin', - 'lysolecithins', - 'macadamias', - 'macadamize', - 'macadamized', - 'macadamizes', - 'macadamizing', - 'macaronics', - 'macaronies', - 'macedoines', - 'macerating', - 'maceration', - 'macerations', - 'macerators', - 'machicolated', - 'machicolation', - 'machicolations', - 'machinabilities', - 'machinability', - 'machinable', - 'machinated', - 'machinates', - 'machinating', - 'machination', - 'machinations', - 'machinator', - 'machinators', - 'machineabilities', - 'machineability', - 'machineable', - 'machinelike', - 'machineries', - 'machinists', - 'macintoshes', - 'mackintosh', - 'mackintoshes', - 'macroaggregate', - 'macroaggregated', - 'macroaggregates', - 'macrobiotic', - 'macrocosmic', - 'macrocosmically', - 'macrocosms', - 'macrocyclic', - 'macrocytes', - 'macrocytic', - 'macrocytoses', - 'macrocytosis', - 'macroeconomic', - 'macroeconomics', - 'macroevolution', - 'macroevolutionary', - 'macroevolutions', - 'macrofossil', - 'macrofossils', - 'macrogamete', - 'macrogametes', - 'macroglobulin', - 'macroglobulinemia', - 'macroglobulinemias', - 'macroglobulinemic', - 'macroglobulins', - 'macroinstruction', - 'macroinstructions', - 'macrolepidoptera', - 'macromeres', - 'macromolecular', - 'macromolecule', - 'macromolecules', - 'macronuclear', - 'macronuclei', - 'macronucleus', - 'macronucleuses', - 'macronutrient', - 'macronutrients', - 'macrophage', - 'macrophages', - 'macrophagic', - 'macrophotograph', - 'macrophotographies', - 'macrophotographs', - 'macrophotography', - 'macrophyte', - 'macrophytes', - 'macrophytic', - 'macropterous', - 'macroscale', - 'macroscales', - 'macroscopic', - 'macroscopically', - 'macrostructural', - 'macrostructure', - 'macrostructures', - 'maculating', - 'maculation', - 'maculations', - 'maddeningly', - 'madeleines', - 'mademoiselle', - 'mademoiselles', - 'madrepores', - 'madreporian', - 'madreporians', - 'madreporic', - 'madreporite', - 'madreporites', - 'madrigalian', - 'madrigalist', - 'madrigalists', - 'madrilenes', - 'maelstroms', - 'mafficking', - 'magazinist', - 'magazinists', - 'magdalenes', - 'magisterial', - 'magisterially', - 'magisterium', - 'magisteriums', - 'magistracies', - 'magistracy', - 'magistrally', - 'magistrate', - 'magistrates', - 'magistratical', - 'magistratically', - 'magistrature', - 'magistratures', - 'magnanimities', - 'magnanimity', - 'magnanimous', - 'magnanimously', - 'magnanimousness', - 'magnanimousnesses', - 'magnesites', - 'magnesiums', - 'magnetically', - 'magnetised', - 'magnetises', - 'magnetising', - 'magnetisms', - 'magnetites', - 'magnetizable', - 'magnetization', - 'magnetizations', - 'magnetized', - 'magnetizer', - 'magnetizers', - 'magnetizes', - 'magnetizing', - 'magnetoelectric', - 'magnetofluiddynamics', - 'magnetograph', - 'magnetographs', - 'magnetohydrodynamic', - 'magnetohydrodynamics', - 'magnetometer', - 'magnetometers', - 'magnetometric', - 'magnetometries', - 'magnetometry', - 'magnetopause', - 'magnetopauses', - 'magnetoresistance', - 'magnetoresistances', - 'magnetosphere', - 'magnetospheres', - 'magnetospheric', - 'magnetostatic', - 'magnetostriction', - 'magnetostrictions', - 'magnetostrictive', - 'magnetostrictively', - 'magnetrons', - 'magnifical', - 'magnifically', - 'magnificat', - 'magnification', - 'magnifications', - 'magnificats', - 'magnificence', - 'magnificences', - 'magnificent', - 'magnificently', - 'magnificoes', - 'magnificos', - 'magnifiers', - 'magnifying', - 'magniloquence', - 'magniloquences', - 'magniloquent', - 'magniloquently', - 'magnitudes', - 'maharajahs', - 'maharanees', - 'maharishis', - 'mahlsticks', - 'mahoganies', - 'maidenhair', - 'maidenhairs', - 'maidenhead', - 'maidenheads', - 'maidenhood', - 'maidenhoods', - 'maidenliness', - 'maidenlinesses', - 'maidservant', - 'maidservants', - 'mailabilities', - 'mailability', - 'mainframes', - 'mainlander', - 'mainlanders', - 'mainlining', - 'mainsheets', - 'mainspring', - 'mainsprings', - 'mainstream', - 'mainstreamed', - 'mainstreaming', - 'mainstreams', - 'maintainabilities', - 'maintainability', - 'maintainable', - 'maintained', - 'maintainer', - 'maintainers', - 'maintaining', - 'maintenance', - 'maintenances', - 'maisonette', - 'maisonettes', - 'majestically', - 'majordomos', - 'majorettes', - 'majoritarian', - 'majoritarianism', - 'majoritarianisms', - 'majoritarians', - 'majorities', - 'majuscular', - 'majuscules', - 'makereadies', - 'makeshifts', - 'makeweight', - 'makeweights', - 'malabsorption', - 'malabsorptions', - 'malachites', - 'malacological', - 'malacologies', - 'malacologist', - 'malacologists', - 'malacology', - 'malacostracan', - 'malacostracans', - 'maladaptation', - 'maladaptations', - 'maladapted', - 'maladaptive', - 'maladjusted', - 'maladjustive', - 'maladjustment', - 'maladjustments', - 'maladminister', - 'maladministered', - 'maladministering', - 'maladministers', - 'maladministration', - 'maladministrations', - 'maladroitly', - 'maladroitness', - 'maladroitnesses', - 'malaguenas', - 'malapertly', - 'malapertness', - 'malapertnesses', - 'malapportioned', - 'malapportionment', - 'malapportionments', - 'malapropian', - 'malapropism', - 'malapropisms', - 'malapropist', - 'malapropists', - 'malapropos', - 'malariologies', - 'malariologist', - 'malariologists', - 'malariology', - 'malathions', - 'malcontent', - 'malcontented', - 'malcontentedly', - 'malcontentedness', - 'malcontentednesses', - 'malcontents', - 'maldistribution', - 'maldistributions', - 'maledicted', - 'maledicting', - 'malediction', - 'maledictions', - 'maledictory', - 'malefaction', - 'malefactions', - 'malefactor', - 'malefactors', - 'maleficence', - 'maleficences', - 'maleficent', - 'malenesses', - 'malevolence', - 'malevolences', - 'malevolent', - 'malevolently', - 'malfeasance', - 'malfeasances', - 'malformation', - 'malformations', - 'malfunction', - 'malfunctioned', - 'malfunctioning', - 'malfunctions', - 'maliciously', - 'maliciousness', - 'maliciousnesses', - 'malignance', - 'malignances', - 'malignancies', - 'malignancy', - 'malignantly', - 'malignities', - 'malingered', - 'malingerer', - 'malingerers', - 'malingering', - 'malleabilities', - 'malleability', - 'malnourished', - 'malnutrition', - 'malnutritions', - 'malocclusion', - 'malocclusions', - 'malodorous', - 'malodorously', - 'malodorousness', - 'malodorousnesses', - 'malolactic', - 'malposition', - 'malpositions', - 'malpractice', - 'malpractices', - 'malpractitioner', - 'malpractitioners', - 'maltreated', - 'maltreater', - 'maltreaters', - 'maltreating', - 'maltreatment', - 'maltreatments', - 'malversation', - 'malversations', - 'mammalians', - 'mammalogies', - 'mammalogist', - 'mammalogists', - 'mammillary', - 'mammillated', - 'mammitides', - 'mammocking', - 'mammograms', - 'mammographic', - 'mammographies', - 'mammography', - 'mammonisms', - 'mammonists', - 'manageabilities', - 'manageability', - 'manageable', - 'manageableness', - 'manageablenesses', - 'manageably', - 'management', - 'managemental', - 'managements', - 'manageress', - 'manageresses', - 'managerial', - 'managerially', - 'managership', - 'managerships', - 'manchineel', - 'manchineels', - 'mandamused', - 'mandamuses', - 'mandamusing', - 'mandarinate', - 'mandarinates', - 'mandarinic', - 'mandarinism', - 'mandarinisms', - 'mandataries', - 'mandatories', - 'mandatorily', - 'mandibular', - 'mandibulate', - 'mandolines', - 'mandolinist', - 'mandolinists', - 'mandragora', - 'mandragoras', - 'maneuverabilities', - 'maneuverability', - 'maneuverable', - 'maneuvered', - 'maneuverer', - 'maneuverers', - 'maneuvering', - 'manfulness', - 'manfulnesses', - 'manganates', - 'manganeses', - 'manganesian', - 'manganites', - 'manginesses', - 'mangosteen', - 'mangosteens', - 'manhandled', - 'manhandles', - 'manhandling', - 'manhattans', - 'maniacally', - 'manicuring', - 'manicurist', - 'manicurists', - 'manifestant', - 'manifestants', - 'manifestation', - 'manifestations', - 'manifested', - 'manifester', - 'manifesters', - 'manifesting', - 'manifestly', - 'manifestoed', - 'manifestoes', - 'manifestoing', - 'manifestos', - 'manifolded', - 'manifolding', - 'manifoldly', - 'manifoldness', - 'manifoldnesses', - 'manipulabilities', - 'manipulability', - 'manipulable', - 'manipulatable', - 'manipulate', - 'manipulated', - 'manipulates', - 'manipulating', - 'manipulation', - 'manipulations', - 'manipulative', - 'manipulatively', - 'manipulativeness', - 'manipulativenesses', - 'manipulator', - 'manipulators', - 'manipulatory', - 'manlinesses', - 'mannequins', - 'mannerisms', - 'manneristic', - 'mannerists', - 'mannerless', - 'mannerliness', - 'mannerlinesses', - 'mannishness', - 'mannishnesses', - 'manoeuvred', - 'manoeuvres', - 'manoeuvring', - 'manometers', - 'manometric', - 'manometrically', - 'manometries', - 'manorialism', - 'manorialisms', - 'manservant', - 'manslaughter', - 'manslaughters', - 'manslayers', - 'mansuetude', - 'mansuetudes', - 'mantelpiece', - 'mantelpieces', - 'mantelshelf', - 'mantelshelves', - 'manticores', - 'manubriums', - 'manufactories', - 'manufactory', - 'manufacture', - 'manufactured', - 'manufacturer', - 'manufacturers', - 'manufactures', - 'manufacturing', - 'manufacturings', - 'manumission', - 'manumissions', - 'manumitted', - 'manumitting', - 'manuscript', - 'manuscripts', - 'manzanitas', - 'mapmakings', - 'maquiladora', - 'maquiladoras', - 'maquillage', - 'maquillages', - 'maraschino', - 'maraschinos', - 'marasmuses', - 'marathoner', - 'marathoners', - 'marathoning', - 'marathonings', - 'marbleised', - 'marbleises', - 'marbleising', - 'marbleized', - 'marbleizes', - 'marbleizing', - 'marcasites', - 'marcelling', - 'marchioness', - 'marchionesses', - 'marchpanes', - 'margarines', - 'margaritas', - 'margarites', - 'margenting', - 'marginalia', - 'marginalities', - 'marginality', - 'marginalization', - 'marginalizations', - 'marginalize', - 'marginalized', - 'marginalizes', - 'marginalizing', - 'marginally', - 'marginated', - 'marginates', - 'marginating', - 'margination', - 'marginations', - 'margravate', - 'margravates', - 'margravial', - 'margraviate', - 'margraviates', - 'margravine', - 'margravines', - 'marguerite', - 'marguerites', - 'mariculture', - 'maricultures', - 'mariculturist', - 'mariculturists', - 'marihuanas', - 'marijuanas', - 'marimbists', - 'marinading', - 'marinating', - 'marination', - 'marinations', - 'marionette', - 'marionettes', - 'markedness', - 'markednesses', - 'marketabilities', - 'marketability', - 'marketable', - 'marketeers', - 'marketings', - 'marketplace', - 'marketplaces', - 'marksmanship', - 'marksmanships', - 'markswoman', - 'markswomen', - 'marlinespike', - 'marlinespikes', - 'marlinspike', - 'marlinspikes', - 'marlstones', - 'marmalades', - 'marmoreally', - 'marquessate', - 'marquessates', - 'marquesses', - 'marqueterie', - 'marqueteries', - 'marquetries', - 'marquisate', - 'marquisates', - 'marquisette', - 'marquisettes', - 'marriageabilities', - 'marriageability', - 'marriageable', - 'marrowbone', - 'marrowbones', - 'marrowfats', - 'marshalcies', - 'marshaling', - 'marshalled', - 'marshalling', - 'marshalship', - 'marshalships', - 'marshiness', - 'marshinesses', - 'marshlands', - 'marshmallow', - 'marshmallows', - 'marshmallowy', - 'marsupials', - 'martensite', - 'martensites', - 'martensitic', - 'martensitically', - 'martingale', - 'martingales', - 'martyrdoms', - 'martyrization', - 'martyrizations', - 'martyrized', - 'martyrizes', - 'martyrizing', - 'martyrologies', - 'martyrologist', - 'martyrologists', - 'martyrology', - 'marvelling', - 'marvellous', - 'marvelously', - 'marvelousness', - 'marvelousnesses', - 'mascaraing', - 'mascarpone', - 'mascarpones', - 'masculinely', - 'masculines', - 'masculinise', - 'masculinised', - 'masculinises', - 'masculinising', - 'masculinities', - 'masculinity', - 'masculinization', - 'masculinizations', - 'masculinize', - 'masculinized', - 'masculinizes', - 'masculinizing', - 'masochisms', - 'masochistic', - 'masochistically', - 'masochists', - 'masquerade', - 'masqueraded', - 'masquerader', - 'masqueraders', - 'masquerades', - 'masquerading', - 'massacrers', - 'massacring', - 'massasauga', - 'massasaugas', - 'masseteric', - 'massiveness', - 'massivenesses', - 'mastectomies', - 'mastectomy', - 'masterfully', - 'masterfulness', - 'masterfulnesses', - 'masterliness', - 'masterlinesses', - 'mastermind', - 'masterminded', - 'masterminding', - 'masterminds', - 'masterpiece', - 'masterpieces', - 'mastership', - 'masterships', - 'mastersinger', - 'mastersingers', - 'masterstroke', - 'masterstrokes', - 'masterwork', - 'masterworks', - 'mastheaded', - 'mastheading', - 'masticated', - 'masticates', - 'masticating', - 'mastication', - 'mastications', - 'masticator', - 'masticatories', - 'masticators', - 'masticatory', - 'mastigophoran', - 'mastigophorans', - 'mastitides', - 'mastodonic', - 'mastodonts', - 'mastoidectomies', - 'mastoidectomy', - 'mastoidites', - 'mastoiditides', - 'mastoiditis', - 'mastoiditises', - 'masturbate', - 'masturbated', - 'masturbates', - 'masturbating', - 'masturbation', - 'masturbations', - 'masturbator', - 'masturbators', - 'masturbatory', - 'matchboard', - 'matchboards', - 'matchbooks', - 'matchboxes', - 'matchlessly', - 'matchlocks', - 'matchmaker', - 'matchmakers', - 'matchmaking', - 'matchmakings', - 'matchstick', - 'matchsticks', - 'matchwoods', - 'materfamilias', - 'materfamiliases', - 'materialise', - 'materialised', - 'materialises', - 'materialising', - 'materialism', - 'materialisms', - 'materialist', - 'materialistic', - 'materialistically', - 'materialists', - 'materialities', - 'materiality', - 'materialization', - 'materializations', - 'materialize', - 'materialized', - 'materializer', - 'materializers', - 'materializes', - 'materializing', - 'materially', - 'materialness', - 'materialnesses', - 'maternalism', - 'maternalisms', - 'maternally', - 'maternities', - 'mateynesses', - 'mathematic', - 'mathematical', - 'mathematically', - 'mathematician', - 'mathematicians', - 'mathematics', - 'mathematization', - 'mathematizations', - 'mathematize', - 'mathematized', - 'mathematizes', - 'mathematizing', - 'matinesses', - 'matriarchal', - 'matriarchate', - 'matriarchates', - 'matriarchies', - 'matriarchs', - 'matriarchy', - 'matricidal', - 'matricides', - 'matriculant', - 'matriculants', - 'matriculate', - 'matriculated', - 'matriculates', - 'matriculating', - 'matriculation', - 'matriculations', - 'matrilineal', - 'matrilineally', - 'matrimonial', - 'matrimonially', - 'matrimonies', - 'matronymic', - 'matronymics', - 'mattrasses', - 'mattresses', - 'maturating', - 'maturation', - 'maturational', - 'maturations', - 'maturities', - 'matutinally', - 'maulsticks', - 'maumetries', - 'maunderers', - 'maundering', - 'mausoleums', - 'mavourneen', - 'mavourneens', - 'mawkishness', - 'mawkishnesses', - 'maxillaries', - 'maxilliped', - 'maxillipeds', - 'maxillofacial', - 'maximalist', - 'maximalists', - 'maximising', - 'maximization', - 'maximizations', - 'maximizers', - 'maximizing', - 'mayflowers', - 'mayonnaise', - 'mayonnaises', - 'mayoralties', - 'mayoresses', - 'mazinesses', - 'meadowland', - 'meadowlands', - 'meadowlark', - 'meadowlarks', - 'meadowsweet', - 'meadowsweets', - 'meagerness', - 'meagernesses', - 'mealymouthed', - 'meandering', - 'meaningful', - 'meaningfully', - 'meaningfulness', - 'meaningfulnesses', - 'meaningless', - 'meaninglessly', - 'meaninglessness', - 'meaninglessnesses', - 'meannesses', - 'meanwhiles', - 'measurabilities', - 'measurability', - 'measurable', - 'measurably', - 'measuredly', - 'measureless', - 'measurement', - 'measurements', - 'meatinesses', - 'meatloaves', - 'meatpacking', - 'meatpackings', - 'mecamylamine', - 'mecamylamines', - 'mechanical', - 'mechanically', - 'mechanicals', - 'mechanician', - 'mechanicians', - 'mechanisms', - 'mechanistic', - 'mechanistically', - 'mechanists', - 'mechanizable', - 'mechanization', - 'mechanizations', - 'mechanized', - 'mechanizer', - 'mechanizers', - 'mechanizes', - 'mechanizing', - 'mechanochemical', - 'mechanochemistries', - 'mechanochemistry', - 'mechanoreception', - 'mechanoreceptions', - 'mechanoreceptive', - 'mechanoreceptor', - 'mechanoreceptors', - 'meclizines', - 'medaillons', - 'medallions', - 'medallists', - 'meddlesome', - 'meddlesomeness', - 'meddlesomenesses', - 'medevacked', - 'medevacking', - 'mediaevals', - 'mediagenic', - 'mediastina', - 'mediastinal', - 'mediastinum', - 'mediational', - 'mediations', - 'mediatrices', - 'mediatrixes', - 'medicament', - 'medicamentous', - 'medicaments', - 'medicating', - 'medication', - 'medications', - 'medicinable', - 'medicinally', - 'medicinals', - 'medicining', - 'medicolegal', - 'medievalism', - 'medievalisms', - 'medievalist', - 'medievalists', - 'medievally', - 'mediocrities', - 'mediocrity', - 'meditating', - 'meditation', - 'meditations', - 'meditative', - 'meditatively', - 'meditativeness', - 'meditativenesses', - 'meditators', - 'mediterranean', - 'mediumistic', - 'mediumship', - 'mediumships', - 'medullated', - 'medulloblastoma', - 'medulloblastomas', - 'medulloblastomata', - 'meeknesses', - 'meerschaum', - 'meerschaums', - 'meetinghouse', - 'meetinghouses', - 'meetnesses', - 'megacities', - 'megacorporation', - 'megacorporations', - 'megacycles', - 'megadeaths', - 'megafaunae', - 'megafaunal', - 'megafaunas', - 'megagamete', - 'megagametes', - 'megagametophyte', - 'megagametophytes', - 'megakaryocyte', - 'megakaryocytes', - 'megakaryocytic', - 'megalithic', - 'megaloblast', - 'megaloblastic', - 'megaloblasts', - 'megalomania', - 'megalomaniac', - 'megalomaniacal', - 'megalomaniacally', - 'megalomaniacs', - 'megalomanias', - 'megalomanic', - 'megalopolis', - 'megalopolises', - 'megalopolitan', - 'megalopolitans', - 'megalopses', - 'megaparsec', - 'megaparsecs', - 'megaphoned', - 'megaphones', - 'megaphonic', - 'megaphoning', - 'megaproject', - 'megaprojects', - 'megascopic', - 'megascopically', - 'megasporangia', - 'megasporangium', - 'megaspores', - 'megasporic', - 'megasporogeneses', - 'megasporogenesis', - 'megasporophyll', - 'megasporophylls', - 'megatonnage', - 'megatonnages', - 'megavitamin', - 'megavitamins', - 'meiotically', - 'melancholia', - 'melancholiac', - 'melancholiacs', - 'melancholias', - 'melancholic', - 'melancholics', - 'melancholies', - 'melancholy', - 'melanistic', - 'melanization', - 'melanizations', - 'melanizing', - 'melanoblast', - 'melanoblasts', - 'melanocyte', - 'melanocytes', - 'melanogeneses', - 'melanogenesis', - 'melanomata', - 'melanophore', - 'melanophores', - 'melanosome', - 'melanosomes', - 'melatonins', - 'meliorated', - 'meliorates', - 'meliorating', - 'melioration', - 'meliorations', - 'meliorative', - 'meliorator', - 'meliorators', - 'meliorisms', - 'melioristic', - 'meliorists', - 'melismatic', - 'mellifluent', - 'mellifluently', - 'mellifluous', - 'mellifluously', - 'mellifluousness', - 'mellifluousnesses', - 'mellophone', - 'mellophones', - 'mellotrons', - 'mellowness', - 'mellownesses', - 'melodically', - 'melodiously', - 'melodiousness', - 'melodiousnesses', - 'melodising', - 'melodizers', - 'melodizing', - 'melodramas', - 'melodramatic', - 'melodramatically', - 'melodramatics', - 'melodramatise', - 'melodramatised', - 'melodramatises', - 'melodramatising', - 'melodramatist', - 'melodramatists', - 'melodramatization', - 'melodramatizations', - 'melodramatize', - 'melodramatized', - 'melodramatizes', - 'melodramatizing', - 'melphalans', - 'meltabilities', - 'meltability', - 'meltwaters', - 'membership', - 'memberships', - 'membranous', - 'membranously', - 'memoirists', - 'memorabilia', - 'memorabilities', - 'memorability', - 'memorableness', - 'memorablenesses', - 'memorandum', - 'memorandums', - 'memorialise', - 'memorialised', - 'memorialises', - 'memorialising', - 'memorialist', - 'memorialists', - 'memorialize', - 'memorialized', - 'memorializes', - 'memorializing', - 'memorially', - 'memorising', - 'memorizable', - 'memorization', - 'memorizations', - 'memorizers', - 'memorizing', - 'menacingly', - 'menadiones', - 'menageries', - 'menarcheal', - 'mendacious', - 'mendaciously', - 'mendaciousness', - 'mendaciousnesses', - 'mendacities', - 'mendelevium', - 'mendeleviums', - 'mendicancies', - 'mendicancy', - 'mendicants', - 'mendicities', - 'meningioma', - 'meningiomas', - 'meningiomata', - 'meningitic', - 'meningitides', - 'meningitis', - 'meningococcal', - 'meningococci', - 'meningococcic', - 'meningococcus', - 'meningoencephalitic', - 'meningoencephalitides', - 'meningoencephalitis', - 'meniscuses', - 'menologies', - 'menopausal', - 'menopauses', - 'menorrhagia', - 'menorrhagias', - 'menservants', - 'menstruate', - 'menstruated', - 'menstruates', - 'menstruating', - 'menstruation', - 'menstruations', - 'menstruums', - 'mensurabilities', - 'mensurability', - 'mensurable', - 'mensuration', - 'mensurations', - 'mentalisms', - 'mentalistic', - 'mentalists', - 'mentalities', - 'mentations', - 'mentholated', - 'mentionable', - 'mentioners', - 'mentioning', - 'mentorship', - 'mentorships', - 'meperidine', - 'meperidines', - 'mephitises', - 'meprobamate', - 'meprobamates', - 'merbromins', - 'mercantile', - 'mercantilism', - 'mercantilisms', - 'mercantilist', - 'mercantilistic', - 'mercantilists', - 'mercaptans', - 'mercaptopurine', - 'mercaptopurines', - 'mercenaries', - 'mercenarily', - 'mercenariness', - 'mercenarinesses', - 'mercerised', - 'mercerises', - 'mercerising', - 'mercerization', - 'mercerizations', - 'mercerized', - 'mercerizes', - 'mercerizing', - 'merchandise', - 'merchandised', - 'merchandiser', - 'merchandisers', - 'merchandises', - 'merchandising', - 'merchandisings', - 'merchandize', - 'merchandized', - 'merchandizes', - 'merchandizing', - 'merchandizings', - 'merchantabilities', - 'merchantability', - 'merchantable', - 'merchanted', - 'merchanting', - 'merchantman', - 'merchantmen', - 'mercifully', - 'mercifulness', - 'mercifulnesses', - 'mercilessly', - 'mercilessness', - 'mercilessnesses', - 'mercurated', - 'mercurates', - 'mercurating', - 'mercuration', - 'mercurations', - 'mercurially', - 'mercurialness', - 'mercurialnesses', - 'mercurials', - 'meretricious', - 'meretriciously', - 'meretriciousness', - 'meretriciousnesses', - 'mergansers', - 'meridional', - 'meridionally', - 'meridionals', - 'meristematic', - 'meristematically', - 'meristically', - 'meritocracies', - 'meritocracy', - 'meritocrat', - 'meritocratic', - 'meritocrats', - 'meritorious', - 'meritoriously', - 'meritoriousness', - 'meritoriousnesses', - 'meroblastic', - 'meroblastically', - 'meromorphic', - 'meromyosin', - 'meromyosins', - 'merozoites', - 'merriments', - 'merrinesses', - 'merrymaker', - 'merrymakers', - 'merrymaking', - 'merrymakings', - 'merrythought', - 'merrythoughts', - 'mesalliance', - 'mesalliances', - 'mescalines', - 'mesdemoiselles', - 'mesembryanthemum', - 'mesembryanthemums', - 'mesencephala', - 'mesencephalic', - 'mesencephalon', - 'mesenchymal', - 'mesenchyme', - 'mesenchymes', - 'mesenteric', - 'mesenteries', - 'mesenteron', - 'meshuggener', - 'meshuggeners', - 'mesmerically', - 'mesmerised', - 'mesmerises', - 'mesmerising', - 'mesmerisms', - 'mesmerists', - 'mesmerized', - 'mesmerizer', - 'mesmerizers', - 'mesmerizes', - 'mesmerizing', - 'mesnalties', - 'mesocyclone', - 'mesocyclones', - 'mesodermal', - 'mesogloeas', - 'mesomorphic', - 'mesomorphies', - 'mesomorphs', - 'mesomorphy', - 'mesonephric', - 'mesonephroi', - 'mesonephros', - 'mesopauses', - 'mesopelagic', - 'mesophyllic', - 'mesophyllous', - 'mesophylls', - 'mesophytes', - 'mesophytic', - 'mesosphere', - 'mesospheres', - 'mesospheric', - 'mesothelia', - 'mesothelial', - 'mesothelioma', - 'mesotheliomas', - 'mesotheliomata', - 'mesothelium', - 'mesothoraces', - 'mesothoracic', - 'mesothorax', - 'mesothoraxes', - 'mesotrophic', - 'messalines', - 'messeigneurs', - 'messengers', - 'messiahship', - 'messiahships', - 'messianism', - 'messianisms', - 'messinesses', - 'mestranols', - 'metabolically', - 'metabolism', - 'metabolisms', - 'metabolite', - 'metabolites', - 'metabolizable', - 'metabolize', - 'metabolized', - 'metabolizes', - 'metabolizing', - 'metacarpal', - 'metacarpals', - 'metacarpus', - 'metacenter', - 'metacenters', - 'metacentric', - 'metacentrics', - 'metacercaria', - 'metacercariae', - 'metacercarial', - 'metachromatic', - 'metaethical', - 'metaethics', - 'metafiction', - 'metafictional', - 'metafictionist', - 'metafictionists', - 'metafictions', - 'metagalactic', - 'metagalaxies', - 'metagalaxy', - 'metageneses', - 'metagenesis', - 'metagenetic', - 'metalanguage', - 'metalanguages', - 'metalinguistic', - 'metalinguistics', - 'metalising', - 'metalizing', - 'metallically', - 'metalliferous', - 'metallization', - 'metallizations', - 'metallized', - 'metallizes', - 'metallizing', - 'metallographer', - 'metallographers', - 'metallographic', - 'metallographically', - 'metallographies', - 'metallography', - 'metalloidal', - 'metalloids', - 'metallophone', - 'metallophones', - 'metallurgical', - 'metallurgically', - 'metallurgies', - 'metallurgist', - 'metallurgists', - 'metallurgy', - 'metalmarks', - 'metalsmith', - 'metalsmiths', - 'metalwares', - 'metalworker', - 'metalworkers', - 'metalworking', - 'metalworkings', - 'metalworks', - 'metamathematical', - 'metamathematics', - 'metamerically', - 'metamerism', - 'metamerisms', - 'metamorphic', - 'metamorphically', - 'metamorphism', - 'metamorphisms', - 'metamorphose', - 'metamorphosed', - 'metamorphoses', - 'metamorphosing', - 'metamorphosis', - 'metanalyses', - 'metanalysis', - 'metanephric', - 'metanephroi', - 'metanephros', - 'metaphases', - 'metaphoric', - 'metaphorical', - 'metaphorically', - 'metaphosphate', - 'metaphosphates', - 'metaphrase', - 'metaphrases', - 'metaphysic', - 'metaphysical', - 'metaphysically', - 'metaphysician', - 'metaphysicians', - 'metaphysics', - 'metaplasia', - 'metaplasias', - 'metaplastic', - 'metapsychological', - 'metapsychologies', - 'metapsychology', - 'metasequoia', - 'metasequoias', - 'metasomatic', - 'metasomatism', - 'metasomatisms', - 'metastabilities', - 'metastability', - 'metastable', - 'metastably', - 'metastases', - 'metastasis', - 'metastasize', - 'metastasized', - 'metastasizes', - 'metastasizing', - 'metastatic', - 'metastatically', - 'metatarsal', - 'metatarsals', - 'metatarsus', - 'metatheses', - 'metathesis', - 'metathetic', - 'metathetical', - 'metathetically', - 'metathoraces', - 'metathoracic', - 'metathorax', - 'metathoraxes', - 'metaxylems', - 'metempsychoses', - 'metempsychosis', - 'metencephala', - 'metencephalic', - 'metencephalon', - 'meteorically', - 'meteorites', - 'meteoritic', - 'meteoritical', - 'meteoriticist', - 'meteoriticists', - 'meteoritics', - 'meteoroidal', - 'meteoroids', - 'meteorologic', - 'meteorological', - 'meteorologically', - 'meteorologies', - 'meteorologist', - 'meteorologists', - 'meteorology', - 'meterstick', - 'metersticks', - 'metestruses', - 'methacrylate', - 'methacrylates', - 'methadones', - 'methamphetamine', - 'methamphetamines', - 'methanation', - 'methanations', - 'methaqualone', - 'methaqualones', - 'methedrine', - 'methedrines', - 'metheglins', - 'methemoglobin', - 'methemoglobinemia', - 'methemoglobinemias', - 'methemoglobins', - 'methenamine', - 'methenamines', - 'methicillin', - 'methicillins', - 'methionine', - 'methionines', - 'methodical', - 'methodically', - 'methodicalness', - 'methodicalnesses', - 'methodised', - 'methodises', - 'methodising', - 'methodisms', - 'methodistic', - 'methodists', - 'methodized', - 'methodizes', - 'methodizing', - 'methodological', - 'methodologically', - 'methodologies', - 'methodologist', - 'methodologists', - 'methodology', - 'methotrexate', - 'methotrexates', - 'methoxychlor', - 'methoxychlors', - 'methoxyflurane', - 'methoxyfluranes', - 'methylamine', - 'methylamines', - 'methylases', - 'methylated', - 'methylates', - 'methylating', - 'methylation', - 'methylations', - 'methylator', - 'methylators', - 'methylcellulose', - 'methylcelluloses', - 'methylcholanthrene', - 'methylcholanthrenes', - 'methyldopa', - 'methyldopas', - 'methylenes', - 'methylmercuries', - 'methylmercury', - 'methylnaphthalene', - 'methylnaphthalenes', - 'methylphenidate', - 'methylphenidates', - 'methylprednisolone', - 'methylprednisolones', - 'methylxanthine', - 'methylxanthines', - 'methysergide', - 'methysergides', - 'meticulosities', - 'meticulosity', - 'meticulous', - 'meticulously', - 'meticulousness', - 'meticulousnesses', - 'metonymical', - 'metonymies', - 'metrically', - 'metrication', - 'metrications', - 'metricized', - 'metricizes', - 'metricizing', - 'metrifying', - 'metritises', - 'metrological', - 'metrologies', - 'metrologist', - 'metrologists', - 'metronidazole', - 'metronidazoles', - 'metronomes', - 'metronomic', - 'metronomical', - 'metronomically', - 'metropolis', - 'metropolises', - 'metropolitan', - 'metropolitans', - 'metrorrhagia', - 'metrorrhagias', - 'mettlesome', - 'mezzanines', - 'mezzotints', - 'miasmically', - 'micrifying', - 'microampere', - 'microamperes', - 'microanalyses', - 'microanalysis', - 'microanalyst', - 'microanalysts', - 'microanalytic', - 'microanalytical', - 'microanatomical', - 'microanatomies', - 'microanatomy', - 'microbalance', - 'microbalances', - 'microbarograph', - 'microbarographs', - 'microbeams', - 'microbiologic', - 'microbiological', - 'microbiologically', - 'microbiologies', - 'microbiologist', - 'microbiologists', - 'microbiology', - 'microbrewer', - 'microbreweries', - 'microbrewers', - 'microbrewery', - 'microbrewing', - 'microbrewings', - 'microbrews', - 'microburst', - 'microbursts', - 'microbuses', - 'microbusses', - 'microcalorimeter', - 'microcalorimeters', - 'microcalorimetric', - 'microcalorimetries', - 'microcalorimetry', - 'microcapsule', - 'microcapsules', - 'microcassette', - 'microcassettes', - 'microcephalic', - 'microcephalics', - 'microcephalies', - 'microcephaly', - 'microchips', - 'microcircuit', - 'microcircuitries', - 'microcircuitry', - 'microcircuits', - 'microcirculation', - 'microcirculations', - 'microcirculatory', - 'microclimate', - 'microclimates', - 'microclimatic', - 'microcline', - 'microclines', - 'micrococcal', - 'micrococci', - 'micrococcus', - 'microcodes', - 'microcomputer', - 'microcomputers', - 'microcopies', - 'microcosmic', - 'microcosmically', - 'microcosmos', - 'microcosmoses', - 'microcosms', - 'microcrystal', - 'microcrystalline', - 'microcrystallinities', - 'microcrystallinity', - 'microcrystals', - 'microcultural', - 'microculture', - 'microcultures', - 'microcurie', - 'microcuries', - 'microcytes', - 'microcytic', - 'microdensitometer', - 'microdensitometers', - 'microdensitometric', - 'microdensitometries', - 'microdensitometry', - 'microdissection', - 'microdissections', - 'microearthquake', - 'microearthquakes', - 'microeconomic', - 'microeconomics', - 'microelectrode', - 'microelectrodes', - 'microelectronic', - 'microelectronically', - 'microelectronics', - 'microelectrophoreses', - 'microelectrophoresis', - 'microelectrophoretic', - 'microelectrophoretically', - 'microelement', - 'microelements', - 'microencapsulate', - 'microencapsulated', - 'microencapsulates', - 'microencapsulating', - 'microencapsulation', - 'microencapsulations', - 'microenvironment', - 'microenvironmental', - 'microenvironments', - 'microevolution', - 'microevolutionary', - 'microevolutions', - 'microfarad', - 'microfarads', - 'microfauna', - 'microfaunae', - 'microfaunal', - 'microfaunas', - 'microfibril', - 'microfibrillar', - 'microfibrils', - 'microfiche', - 'microfiches', - 'microfilament', - 'microfilaments', - 'microfilaria', - 'microfilariae', - 'microfilarial', - 'microfilmable', - 'microfilmed', - 'microfilmer', - 'microfilmers', - 'microfilming', - 'microfilms', - 'microflora', - 'microflorae', - 'microfloral', - 'microfloras', - 'microforms', - 'microfossil', - 'microfossils', - 'microfungi', - 'microfungus', - 'microfunguses', - 'microgamete', - 'microgametes', - 'microgametocyte', - 'microgametocytes', - 'micrograms', - 'micrograph', - 'micrographed', - 'micrographic', - 'micrographically', - 'micrographics', - 'micrographing', - 'micrographs', - 'microgravities', - 'microgravity', - 'microgroove', - 'microgrooves', - 'microhabitat', - 'microhabitats', - 'microimage', - 'microimages', - 'microinches', - 'microinject', - 'microinjected', - 'microinjecting', - 'microinjection', - 'microinjections', - 'microinjects', - 'microinstruction', - 'microinstructions', - 'microlepidoptera', - 'microlepidopterous', - 'microliter', - 'microliters', - 'microlithic', - 'microliths', - 'microluces', - 'microluxes', - 'micromanage', - 'micromanaged', - 'micromanagement', - 'micromanagements', - 'micromanager', - 'micromanagers', - 'micromanages', - 'micromanaging', - 'micromanipulation', - 'micromanipulations', - 'micromanipulator', - 'micromanipulators', - 'micromeres', - 'micrometeorite', - 'micrometeorites', - 'micrometeoritic', - 'micrometeoroid', - 'micrometeoroids', - 'micrometeorological', - 'micrometeorologies', - 'micrometeorologist', - 'micrometeorologists', - 'micrometeorology', - 'micrometer', - 'micrometers', - 'micromethod', - 'micromethods', - 'microminiature', - 'microminiaturization', - 'microminiaturizations', - 'microminiaturized', - 'microminis', - 'micromolar', - 'micromoles', - 'micromorphological', - 'micromorphologies', - 'micromorphology', - 'micronized', - 'micronizes', - 'micronizing', - 'micronuclei', - 'micronucleus', - 'micronucleuses', - 'micronutrient', - 'micronutrients', - 'microorganism', - 'microorganisms', - 'micropaleontologic', - 'micropaleontological', - 'micropaleontologies', - 'micropaleontologist', - 'micropaleontologists', - 'micropaleontology', - 'microparticle', - 'microparticles', - 'microphage', - 'microphages', - 'microphone', - 'microphones', - 'microphonic', - 'microphonics', - 'microphotograph', - 'microphotographer', - 'microphotographers', - 'microphotographic', - 'microphotographies', - 'microphotographs', - 'microphotography', - 'microphotometer', - 'microphotometers', - 'microphotometric', - 'microphotometrically', - 'microphotometries', - 'microphotometry', - 'microphyll', - 'microphyllous', - 'microphylls', - 'microphysical', - 'microphysically', - 'microphysics', - 'micropipet', - 'micropipets', - 'micropipette', - 'micropipettes', - 'microplankton', - 'microplanktons', - 'micropores', - 'microporosities', - 'microporosity', - 'microporous', - 'microprism', - 'microprisms', - 'microprobe', - 'microprobes', - 'microprocessor', - 'microprocessors', - 'microprogram', - 'microprogramming', - 'microprogrammings', - 'microprograms', - 'microprojection', - 'microprojections', - 'microprojector', - 'microprojectors', - 'micropublisher', - 'micropublishers', - 'micropublishing', - 'micropublishings', - 'micropulsation', - 'micropulsations', - 'micropuncture', - 'micropunctures', - 'micropylar', - 'micropyles', - 'microquake', - 'microquakes', - 'microradiograph', - 'microradiographic', - 'microradiographies', - 'microradiographs', - 'microradiography', - 'microreader', - 'microreaders', - 'microreproduction', - 'microreproductions', - 'microscale', - 'microscales', - 'microscope', - 'microscopes', - 'microscopic', - 'microscopical', - 'microscopically', - 'microscopies', - 'microscopist', - 'microscopists', - 'microscopy', - 'microsecond', - 'microseconds', - 'microseism', - 'microseismic', - 'microseismicities', - 'microseismicity', - 'microseisms', - 'microsomal', - 'microsomes', - 'microspectrophotometer', - 'microspectrophotometers', - 'microspectrophotometric', - 'microspectrophotometries', - 'microspectrophotometry', - 'microsphere', - 'microspheres', - 'microspherical', - 'microsporangia', - 'microsporangiate', - 'microsporangium', - 'microspore', - 'microspores', - 'microsporocyte', - 'microsporocytes', - 'microsporogeneses', - 'microsporogenesis', - 'microsporophyll', - 'microsporophylls', - 'microsporous', - 'microstate', - 'microstates', - 'microstructural', - 'microstructure', - 'microstructures', - 'microsurgeries', - 'microsurgery', - 'microsurgical', - 'microswitch', - 'microswitches', - 'microtechnic', - 'microtechnics', - 'microtechnique', - 'microtechniques', - 'microtomes', - 'microtonal', - 'microtonalities', - 'microtonality', - 'microtonally', - 'microtones', - 'microtubular', - 'microtubule', - 'microtubules', - 'microvascular', - 'microvasculature', - 'microvasculatures', - 'microvillar', - 'microvilli', - 'microvillous', - 'microvillus', - 'microvolts', - 'microwatts', - 'microwavable', - 'microwaveable', - 'microwaved', - 'microwaves', - 'microwaving', - 'microworld', - 'microworlds', - 'micrurgies', - 'micturated', - 'micturates', - 'micturating', - 'micturition', - 'micturitions', - 'middlebrow', - 'middlebrows', - 'middleweight', - 'middleweights', - 'middlingly', - 'midfielder', - 'midfielders', - 'midlatitude', - 'midlatitudes', - 'midnightly', - 'midrashoth', - 'midsagittal', - 'midsection', - 'midsections', - 'midshipman', - 'midshipmen', - 'midstories', - 'midstreams', - 'midsummers', - 'midwatches', - 'midwestern', - 'midwiferies', - 'midwinters', - 'mightiness', - 'mightinesses', - 'mignonette', - 'mignonettes', - 'migrainous', - 'migrational', - 'migrations', - 'mildnesses', - 'milestones', - 'militances', - 'militancies', - 'militantly', - 'militantness', - 'militantnesses', - 'militaries', - 'militarily', - 'militarise', - 'militarised', - 'militarises', - 'militarising', - 'militarism', - 'militarisms', - 'militarist', - 'militaristic', - 'militaristically', - 'militarists', - 'militarization', - 'militarizations', - 'militarize', - 'militarized', - 'militarizes', - 'militarizing', - 'militating', - 'militiaman', - 'militiamen', - 'milkfishes', - 'milkinesses', - 'millefiori', - 'millefioris', - 'millefleur', - 'millefleurs', - 'millenarian', - 'millenarianism', - 'millenarianisms', - 'millenarians', - 'millenaries', - 'millennial', - 'millennialism', - 'millennialisms', - 'millennialist', - 'millennialists', - 'millennium', - 'millenniums', - 'millerites', - 'millesimal', - 'millesimally', - 'millesimals', - 'milliampere', - 'milliamperes', - 'milliaries', - 'millicurie', - 'millicuries', - 'millidegree', - 'millidegrees', - 'milligrams', - 'millihenries', - 'millihenry', - 'millihenrys', - 'millilambert', - 'millilamberts', - 'milliliter', - 'milliliters', - 'milliluces', - 'milliluxes', - 'millimeter', - 'millimeters', - 'millimicron', - 'millimicrons', - 'millimolar', - 'millimoles', - 'millineries', - 'millionaire', - 'millionaires', - 'millionairess', - 'millionairesses', - 'millionfold', - 'millionths', - 'milliosmol', - 'milliosmols', - 'millipedes', - 'milliradian', - 'milliradians', - 'milliroentgen', - 'milliroentgens', - 'millisecond', - 'milliseconds', - 'millivolts', - 'milliwatts', - 'millstones', - 'millstream', - 'millstreams', - 'millwright', - 'millwrights', - 'milquetoast', - 'milquetoasts', - 'mimeograph', - 'mimeographed', - 'mimeographing', - 'mimeographs', - 'mimetically', - 'minacities', - 'minaudiere', - 'minaudieres', - 'mincemeats', - 'mindblower', - 'mindblowers', - 'mindedness', - 'mindednesses', - 'mindfulness', - 'mindfulnesses', - 'mindlessly', - 'mindlessness', - 'mindlessnesses', - 'minefields', - 'minelayers', - 'mineralise', - 'mineralised', - 'mineralises', - 'mineralising', - 'mineralizable', - 'mineralization', - 'mineralizations', - 'mineralize', - 'mineralized', - 'mineralizer', - 'mineralizers', - 'mineralizes', - 'mineralizing', - 'mineralocorticoid', - 'mineralocorticoids', - 'mineralogic', - 'mineralogical', - 'mineralogically', - 'mineralogies', - 'mineralogist', - 'mineralogists', - 'mineralogy', - 'minestrone', - 'minestrones', - 'minesweeper', - 'minesweepers', - 'minesweeping', - 'minesweepings', - 'miniatures', - 'miniaturist', - 'miniaturistic', - 'miniaturists', - 'miniaturization', - 'miniaturizations', - 'miniaturize', - 'miniaturized', - 'miniaturizes', - 'miniaturizing', - 'minibikers', - 'minibusses', - 'minicomputer', - 'minicomputers', - 'minicourse', - 'minicourses', - 'minimalism', - 'minimalisms', - 'minimalist', - 'minimalists', - 'minimising', - 'minimization', - 'minimizations', - 'minimizers', - 'minimizing', - 'minischool', - 'minischools', - 'miniscules', - 'miniseries', - 'miniskirted', - 'miniskirts', - 'ministates', - 'ministered', - 'ministerial', - 'ministerially', - 'ministering', - 'ministrant', - 'ministrants', - 'ministration', - 'ministrations', - 'ministries', - 'minnesinger', - 'minnesingers', - 'minorities', - 'minoxidils', - 'minstrelsies', - 'minstrelsy', - 'minuscules', - 'minuteness', - 'minutenesses', - 'miracidial', - 'miracidium', - 'miraculous', - 'miraculously', - 'miraculousness', - 'miraculousnesses', - 'mirinesses', - 'mirrorlike', - 'mirthfully', - 'mirthfulness', - 'mirthfulnesses', - 'mirthlessly', - 'misadapted', - 'misadapting', - 'misaddress', - 'misaddressed', - 'misaddresses', - 'misaddressing', - 'misadjusted', - 'misadjusting', - 'misadjusts', - 'misadministration', - 'misadministrations', - 'misadventure', - 'misadventures', - 'misadvised', - 'misadvises', - 'misadvising', - 'misaligned', - 'misaligning', - 'misalignment', - 'misalignments', - 'misalliance', - 'misalliances', - 'misallocate', - 'misallocated', - 'misallocates', - 'misallocating', - 'misallocation', - 'misallocations', - 'misallying', - 'misaltered', - 'misaltering', - 'misanalyses', - 'misanalysis', - 'misandries', - 'misanthrope', - 'misanthropes', - 'misanthropic', - 'misanthropically', - 'misanthropies', - 'misanthropy', - 'misapplication', - 'misapplications', - 'misapplied', - 'misapplies', - 'misapplying', - 'misappraisal', - 'misappraisals', - 'misapprehend', - 'misapprehended', - 'misapprehending', - 'misapprehends', - 'misapprehension', - 'misapprehensions', - 'misappropriate', - 'misappropriated', - 'misappropriates', - 'misappropriating', - 'misappropriation', - 'misappropriations', - 'misarticulate', - 'misarticulated', - 'misarticulates', - 'misarticulating', - 'misassayed', - 'misassaying', - 'misassemble', - 'misassembled', - 'misassembles', - 'misassembling', - 'misassumption', - 'misassumptions', - 'misatoning', - 'misattribute', - 'misattributed', - 'misattributes', - 'misattributing', - 'misattribution', - 'misattributions', - 'misaverred', - 'misaverring', - 'misawarded', - 'misawarding', - 'misbalance', - 'misbalanced', - 'misbalances', - 'misbalancing', - 'misbecomes', - 'misbecoming', - 'misbeginning', - 'misbegotten', - 'misbehaved', - 'misbehaver', - 'misbehavers', - 'misbehaves', - 'misbehaving', - 'misbehavior', - 'misbehaviors', - 'misbeliefs', - 'misbelieve', - 'misbelieved', - 'misbeliever', - 'misbelievers', - 'misbelieves', - 'misbelieving', - 'misbiasing', - 'misbiassed', - 'misbiasses', - 'misbiassing', - 'misbilling', - 'misbinding', - 'misbranded', - 'misbranding', - 'misbuilding', - 'misbuttoned', - 'misbuttoning', - 'misbuttons', - 'miscalculate', - 'miscalculated', - 'miscalculates', - 'miscalculating', - 'miscalculation', - 'miscalculations', - 'miscalling', - 'miscaption', - 'miscaptioned', - 'miscaptioning', - 'miscaptions', - 'miscarriage', - 'miscarriages', - 'miscarried', - 'miscarries', - 'miscarrying', - 'miscasting', - 'miscatalog', - 'miscataloged', - 'miscataloging', - 'miscatalogs', - 'miscegenation', - 'miscegenational', - 'miscegenations', - 'miscellanea', - 'miscellaneous', - 'miscellaneously', - 'miscellaneousness', - 'miscellaneousnesses', - 'miscellanies', - 'miscellanist', - 'miscellanists', - 'miscellany', - 'mischances', - 'mischannel', - 'mischanneled', - 'mischanneling', - 'mischannelled', - 'mischannelling', - 'mischannels', - 'mischaracterization', - 'mischaracterizations', - 'mischaracterize', - 'mischaracterized', - 'mischaracterizes', - 'mischaracterizing', - 'mischarged', - 'mischarges', - 'mischarging', - 'mischievous', - 'mischievously', - 'mischievousness', - 'mischievousnesses', - 'mischoices', - 'miscibilities', - 'miscibility', - 'miscitation', - 'miscitations', - 'misclaimed', - 'misclaiming', - 'misclassed', - 'misclasses', - 'misclassification', - 'misclassifications', - 'misclassified', - 'misclassifies', - 'misclassify', - 'misclassifying', - 'misclassing', - 'miscoining', - 'miscolored', - 'miscoloring', - 'miscommunication', - 'miscommunications', - 'miscomprehension', - 'miscomprehensions', - 'miscomputation', - 'miscomputations', - 'miscompute', - 'miscomputed', - 'miscomputes', - 'miscomputing', - 'misconceive', - 'misconceived', - 'misconceiver', - 'misconceivers', - 'misconceives', - 'misconceiving', - 'misconception', - 'misconceptions', - 'misconduct', - 'misconducted', - 'misconducting', - 'misconducts', - 'misconnect', - 'misconnected', - 'misconnecting', - 'misconnection', - 'misconnections', - 'misconnects', - 'misconstruction', - 'misconstructions', - 'misconstrue', - 'misconstrued', - 'misconstrues', - 'misconstruing', - 'miscooking', - 'miscopying', - 'miscorrelation', - 'miscorrelations', - 'miscounted', - 'miscounting', - 'miscreants', - 'miscreated', - 'miscreates', - 'miscreating', - 'miscreation', - 'miscreations', - 'miscutting', - 'misdealing', - 'misdeeming', - 'misdefined', - 'misdefines', - 'misdefining', - 'misdemeanant', - 'misdemeanants', - 'misdemeanor', - 'misdemeanors', - 'misdescribe', - 'misdescribed', - 'misdescribes', - 'misdescribing', - 'misdescription', - 'misdescriptions', - 'misdevelop', - 'misdeveloped', - 'misdeveloping', - 'misdevelops', - 'misdiagnose', - 'misdiagnosed', - 'misdiagnoses', - 'misdiagnosing', - 'misdiagnosis', - 'misdialing', - 'misdialled', - 'misdialling', - 'misdirected', - 'misdirecting', - 'misdirection', - 'misdirections', - 'misdirects', - 'misdistribution', - 'misdistributions', - 'misdivision', - 'misdivisions', - 'misdoubted', - 'misdoubting', - 'misdrawing', - 'misdriving', - 'misediting', - 'miseducate', - 'miseducated', - 'miseducates', - 'miseducating', - 'miseducation', - 'miseducations', - 'misemphases', - 'misemphasis', - 'misemphasize', - 'misemphasized', - 'misemphasizes', - 'misemphasizing', - 'misemployed', - 'misemploying', - 'misemployment', - 'misemployments', - 'misemploys', - 'misenrolled', - 'misenrolling', - 'misenrolls', - 'misentered', - 'misentering', - 'misentries', - 'miserableness', - 'miserablenesses', - 'miserables', - 'misericord', - 'misericorde', - 'misericordes', - 'misericords', - 'miserliness', - 'miserlinesses', - 'misesteemed', - 'misesteeming', - 'misesteems', - 'misestimate', - 'misestimated', - 'misestimates', - 'misestimating', - 'misestimation', - 'misestimations', - 'misevaluate', - 'misevaluated', - 'misevaluates', - 'misevaluating', - 'misevaluation', - 'misevaluations', - 'misfeasance', - 'misfeasances', - 'misfeasors', - 'misfielded', - 'misfielding', - 'misfitting', - 'misfocused', - 'misfocuses', - 'misfocusing', - 'misfocussed', - 'misfocusses', - 'misfocussing', - 'misforming', - 'misfortune', - 'misfortunes', - 'misframing', - 'misfunction', - 'misfunctioned', - 'misfunctioning', - 'misfunctions', - 'misgauging', - 'misgivings', - 'misgoverned', - 'misgoverning', - 'misgovernment', - 'misgovernments', - 'misgoverns', - 'misgrading', - 'misgrafted', - 'misgrafting', - 'misgrowing', - 'misguessed', - 'misguesses', - 'misguessing', - 'misguidance', - 'misguidances', - 'misguidedly', - 'misguidedness', - 'misguidednesses', - 'misguiders', - 'misguiding', - 'mishandled', - 'mishandles', - 'mishandling', - 'mishanters', - 'mishearing', - 'mishitting', - 'mishmashes', - 'mishmoshes', - 'misidentification', - 'misidentifications', - 'misidentified', - 'misidentifies', - 'misidentify', - 'misidentifying', - 'misimpression', - 'misimpressions', - 'misinferred', - 'misinferring', - 'misinformation', - 'misinformations', - 'misinformed', - 'misinforming', - 'misinforms', - 'misinterpret', - 'misinterpretation', - 'misinterpretations', - 'misinterpreted', - 'misinterpreting', - 'misinterprets', - 'misinterred', - 'misinterring', - 'misjoinder', - 'misjoinders', - 'misjoining', - 'misjudging', - 'misjudgment', - 'misjudgments', - 'miskeeping', - 'miskicking', - 'misknowing', - 'misknowledge', - 'misknowledges', - 'mislabeled', - 'mislabeling', - 'mislabelled', - 'mislabelling', - 'mislabored', - 'mislaboring', - 'misleaders', - 'misleading', - 'misleadingly', - 'mislearned', - 'mislearning', - 'mislighted', - 'mislighting', - 'mislocated', - 'mislocates', - 'mislocating', - 'mislocation', - 'mislocations', - 'mislodging', - 'mismanaged', - 'mismanagement', - 'mismanagements', - 'mismanages', - 'mismanaging', - 'mismarking', - 'mismarriage', - 'mismarriages', - 'mismatched', - 'mismatches', - 'mismatching', - 'mismeasurement', - 'mismeasurements', - 'mismeeting', - 'misnomered', - 'misogamies', - 'misogamist', - 'misogamists', - 'misogynies', - 'misogynist', - 'misogynistic', - 'misogynists', - 'misologies', - 'misoneisms', - 'misordered', - 'misordering', - 'misorientation', - 'misorientations', - 'misoriented', - 'misorienting', - 'misorients', - 'mispackage', - 'mispackaged', - 'mispackages', - 'mispackaging', - 'mispainted', - 'mispainting', - 'misparsing', - 'misparting', - 'mispatched', - 'mispatches', - 'mispatching', - 'mispenning', - 'misperceive', - 'misperceived', - 'misperceives', - 'misperceiving', - 'misperception', - 'misperceptions', - 'misplacement', - 'misplacements', - 'misplacing', - 'misplanned', - 'misplanning', - 'misplanted', - 'misplanting', - 'misplaying', - 'mispleaded', - 'mispleading', - 'mispointed', - 'mispointing', - 'mispoising', - 'misposition', - 'mispositioned', - 'mispositioning', - 'mispositions', - 'mispricing', - 'misprinted', - 'misprinting', - 'misprision', - 'misprisions', - 'misprizing', - 'misprogram', - 'misprogramed', - 'misprograming', - 'misprogrammed', - 'misprogramming', - 'misprograms', - 'mispronounce', - 'mispronounced', - 'mispronounces', - 'mispronouncing', - 'mispronunciation', - 'mispronunciations', - 'misquotation', - 'misquotations', - 'misquoting', - 'misraising', - 'misreading', - 'misreckoned', - 'misreckoning', - 'misreckons', - 'misrecollection', - 'misrecollections', - 'misrecorded', - 'misrecording', - 'misrecords', - 'misreference', - 'misreferences', - 'misreferred', - 'misreferring', - 'misregister', - 'misregistered', - 'misregistering', - 'misregisters', - 'misregistration', - 'misregistrations', - 'misrelated', - 'misrelates', - 'misrelating', - 'misrelying', - 'misremember', - 'misremembered', - 'misremembering', - 'misremembers', - 'misrendered', - 'misrendering', - 'misrenders', - 'misreported', - 'misreporting', - 'misreports', - 'misrepresent', - 'misrepresentation', - 'misrepresentations', - 'misrepresentative', - 'misrepresented', - 'misrepresenting', - 'misrepresents', - 'misrouting', - 'misseating', - 'missending', - 'missetting', - 'misshapenly', - 'misshaping', - 'missileers', - 'missileman', - 'missilemen', - 'missileries', - 'missilries', - 'missiologies', - 'missiology', - 'missionaries', - 'missionary', - 'missioners', - 'missioning', - 'missionization', - 'missionizations', - 'missionize', - 'missionized', - 'missionizer', - 'missionizers', - 'missionizes', - 'missionizing', - 'missorting', - 'missounded', - 'missounding', - 'misspacing', - 'misspeaking', - 'misspelled', - 'misspelling', - 'misspellings', - 'misspending', - 'misstarted', - 'misstarting', - 'misstatement', - 'misstatements', - 'misstating', - 'missteered', - 'missteering', - 'misstopped', - 'misstopping', - 'misstricken', - 'misstrikes', - 'misstriking', - 'misstyling', - 'missuiting', - 'mistakable', - 'mistakenly', - 'misteaches', - 'misteaching', - 'mistending', - 'misterming', - 'misthinking', - 'misthought', - 'misthrowing', - 'mistinesses', - 'mistitling', - 'mistletoes', - 'mistouched', - 'mistouches', - 'mistouching', - 'mistracing', - 'mistrained', - 'mistraining', - 'mistranscribe', - 'mistranscribed', - 'mistranscribes', - 'mistranscribing', - 'mistranscription', - 'mistranscriptions', - 'mistranslate', - 'mistranslated', - 'mistranslates', - 'mistranslating', - 'mistranslation', - 'mistranslations', - 'mistreated', - 'mistreating', - 'mistreatment', - 'mistreatments', - 'mistresses', - 'mistrusted', - 'mistrustful', - 'mistrustfully', - 'mistrustfulness', - 'mistrustfulnesses', - 'mistrusting', - 'mistrysted', - 'mistrysting', - 'mistutored', - 'mistutoring', - 'misunderstand', - 'misunderstanding', - 'misunderstandings', - 'misunderstands', - 'misunderstood', - 'misutilization', - 'misutilizations', - 'misvaluing', - 'misvocalization', - 'misvocalizations', - 'miswording', - 'miswriting', - 'miswritten', - 'miterworts', - 'mithridate', - 'mithridates', - 'mitigating', - 'mitigation', - 'mitigations', - 'mitigative', - 'mitigators', - 'mitigatory', - 'mitochondria', - 'mitochondrial', - 'mitochondrion', - 'mitogenicities', - 'mitogenicity', - 'mitomycins', - 'mitotically', - 'mitreworts', - 'mittimuses', - 'mixologies', - 'mixologist', - 'mixologists', - 'mizzenmast', - 'mizzenmasts', - 'mnemonically', - 'mobilising', - 'mobilities', - 'mobilization', - 'mobilizations', - 'mobilizing', - 'mobocracies', - 'mobocratic', - 'mockingbird', - 'mockingbirds', - 'modalities', - 'moderately', - 'moderateness', - 'moderatenesses', - 'moderating', - 'moderation', - 'moderations', - 'moderators', - 'moderatorship', - 'moderatorships', - 'modernisation', - 'modernisations', - 'modernised', - 'modernises', - 'modernising', - 'modernisms', - 'modernistic', - 'modernists', - 'modernities', - 'modernization', - 'modernizations', - 'modernized', - 'modernizer', - 'modernizers', - 'modernizes', - 'modernizing', - 'modernness', - 'modernnesses', - 'modifiabilities', - 'modifiability', - 'modifiable', - 'modification', - 'modifications', - 'modillions', - 'modishness', - 'modishnesses', - 'modulabilities', - 'modulability', - 'modularities', - 'modularity', - 'modularized', - 'modulating', - 'modulation', - 'modulations', - 'modulators', - 'modulatory', - 'moisteners', - 'moistening', - 'moistnesses', - 'moisturise', - 'moisturised', - 'moisturises', - 'moisturising', - 'moisturize', - 'moisturized', - 'moisturizer', - 'moisturizers', - 'moisturizes', - 'moisturizing', - 'molalities', - 'molarities', - 'molasseses', - 'moldboards', - 'moldinesses', - 'molecularly', - 'molestation', - 'molestations', - 'mollification', - 'mollifications', - 'mollifying', - 'molluscicidal', - 'molluscicide', - 'molluscicides', - 'mollycoddle', - 'mollycoddled', - 'mollycoddler', - 'mollycoddlers', - 'mollycoddles', - 'mollycoddling', - 'molybdates', - 'molybdenite', - 'molybdenites', - 'molybdenum', - 'molybdenums', - 'momentarily', - 'momentariness', - 'momentarinesses', - 'momentously', - 'momentousness', - 'momentousnesses', - 'monachisms', - 'monadelphous', - 'monadnocks', - 'monandries', - 'monarchial', - 'monarchical', - 'monarchically', - 'monarchies', - 'monarchism', - 'monarchisms', - 'monarchist', - 'monarchists', - 'monasteries', - 'monastically', - 'monasticism', - 'monasticisms', - 'monaurally', - 'monestrous', - 'monetarily', - 'monetarism', - 'monetarisms', - 'monetarist', - 'monetarists', - 'monetising', - 'monetization', - 'monetizations', - 'monetizing', - 'moneygrubbing', - 'moneygrubbings', - 'moneylender', - 'moneylenders', - 'moneymaker', - 'moneymakers', - 'moneymaking', - 'moneymakings', - 'moneyworts', - 'mongolisms', - 'mongoloids', - 'mongrelization', - 'mongrelizations', - 'mongrelize', - 'mongrelized', - 'mongrelizes', - 'mongrelizing', - 'moniliases', - 'moniliasis', - 'moniliform', - 'monitorial', - 'monitories', - 'monitoring', - 'monitorship', - 'monitorships', - 'monkeypods', - 'monkeyshine', - 'monkeyshines', - 'monkfishes', - 'monkshoods', - 'monoacidic', - 'monoaminergic', - 'monoamines', - 'monocarboxylic', - 'monocarpic', - 'monochasia', - 'monochasial', - 'monochasium', - 'monochords', - 'monochromat', - 'monochromatic', - 'monochromatically', - 'monochromaticities', - 'monochromaticity', - 'monochromatism', - 'monochromatisms', - 'monochromator', - 'monochromators', - 'monochromats', - 'monochrome', - 'monochromes', - 'monochromic', - 'monochromist', - 'monochromists', - 'monoclines', - 'monoclinic', - 'monoclonal', - 'monoclonals', - 'monocoques', - 'monocotyledon', - 'monocotyledonous', - 'monocotyledons', - 'monocracies', - 'monocratic', - 'monocrystal', - 'monocrystalline', - 'monocrystals', - 'monocularly', - 'monoculars', - 'monocultural', - 'monoculture', - 'monocultures', - 'monocyclic', - 'monodically', - 'monodisperse', - 'monodramas', - 'monodramatic', - 'monoecious', - 'monoecisms', - 'monoesters', - 'monofilament', - 'monofilaments', - 'monogamies', - 'monogamist', - 'monogamists', - 'monogamous', - 'monogamously', - 'monogastric', - 'monogenean', - 'monogeneans', - 'monogeneses', - 'monogenesis', - 'monogenetic', - 'monogenically', - 'monogenies', - 'monoglyceride', - 'monoglycerides', - 'monogramed', - 'monograming', - 'monogrammatic', - 'monogrammed', - 'monogrammer', - 'monogrammers', - 'monogramming', - 'monographed', - 'monographic', - 'monographing', - 'monographs', - 'monogynies', - 'monogynous', - 'monohybrid', - 'monohybrids', - 'monohydric', - 'monohydroxy', - 'monolayers', - 'monolingual', - 'monolinguals', - 'monolithic', - 'monolithically', - 'monologies', - 'monologist', - 'monologists', - 'monologues', - 'monologuist', - 'monologuists', - 'monomaniac', - 'monomaniacal', - 'monomaniacally', - 'monomaniacs', - 'monomanias', - 'monometallic', - 'monometallism', - 'monometallisms', - 'monometallist', - 'monometallists', - 'monometers', - 'monomolecular', - 'monomolecularly', - 'monomorphemic', - 'monomorphic', - 'monomorphism', - 'monomorphisms', - 'mononuclear', - 'mononuclears', - 'mononucleate', - 'mononucleated', - 'mononucleoses', - 'mononucleosis', - 'mononucleosises', - 'mononucleotide', - 'mononucleotides', - 'monophagies', - 'monophagous', - 'monophonic', - 'monophonically', - 'monophonies', - 'monophthong', - 'monophthongal', - 'monophthongs', - 'monophyletic', - 'monophylies', - 'monoplanes', - 'monoploids', - 'monopodial', - 'monopodially', - 'monopodies', - 'monopolies', - 'monopolise', - 'monopolised', - 'monopolises', - 'monopolising', - 'monopolist', - 'monopolistic', - 'monopolistically', - 'monopolists', - 'monopolization', - 'monopolizations', - 'monopolize', - 'monopolized', - 'monopolizer', - 'monopolizers', - 'monopolizes', - 'monopolizing', - 'monopropellant', - 'monopropellants', - 'monopsonies', - 'monopsonistic', - 'monorchidism', - 'monorchidisms', - 'monorchids', - 'monorhymed', - 'monorhymes', - 'monosaccharide', - 'monosaccharides', - 'monosomics', - 'monosomies', - 'monospecific', - 'monospecificities', - 'monospecificity', - 'monosteles', - 'monostelic', - 'monostelies', - 'monosyllabic', - 'monosyllabically', - 'monosyllabicities', - 'monosyllabicity', - 'monosyllable', - 'monosyllables', - 'monosynaptic', - 'monosynaptically', - 'monoterpene', - 'monoterpenes', - 'monotheism', - 'monotheisms', - 'monotheist', - 'monotheistic', - 'monotheistical', - 'monotheistically', - 'monotheists', - 'monotonically', - 'monotonicities', - 'monotonicity', - 'monotonies', - 'monotonous', - 'monotonously', - 'monotonousness', - 'monotonousnesses', - 'monotremes', - 'monounsaturate', - 'monounsaturated', - 'monounsaturates', - 'monovalent', - 'monozygotic', - 'monseigneur', - 'monsignori', - 'monsignorial', - 'monsignors', - 'monstrance', - 'monstrances', - 'monstrosities', - 'monstrosity', - 'monstrously', - 'monstrousness', - 'monstrousnesses', - 'montadales', - 'montagnard', - 'montagnards', - 'montmorillonite', - 'montmorillonites', - 'montmorillonitic', - 'monumental', - 'monumentalities', - 'monumentality', - 'monumentalize', - 'monumentalized', - 'monumentalizes', - 'monumentalizing', - 'monumentally', - 'monzonites', - 'moodinesses', - 'mooncalves', - 'moonfishes', - 'moonflower', - 'moonflowers', - 'moonlighted', - 'moonlighter', - 'moonlighters', - 'moonlighting', - 'moonlights', - 'moonquakes', - 'moonscapes', - 'moonshiner', - 'moonshiners', - 'moonshines', - 'moonstones', - 'moonstruck', - 'moralising', - 'moralistic', - 'moralistically', - 'moralities', - 'moralization', - 'moralizations', - 'moralizers', - 'moralizing', - 'moratorium', - 'moratoriums', - 'morbidities', - 'morbidness', - 'morbidnesses', - 'mordancies', - 'mordanting', - 'morganatic', - 'morganatically', - 'morganites', - 'moribundities', - 'moribundity', - 'moronically', - 'moronities', - 'moroseness', - 'morosenesses', - 'morosities', - 'morphactin', - 'morphactins', - 'morphallaxes', - 'morphallaxis', - 'morphemically', - 'morphemics', - 'morphinism', - 'morphinisms', - 'morphogeneses', - 'morphogenesis', - 'morphogenetic', - 'morphogenetically', - 'morphogenic', - 'morphogens', - 'morphologic', - 'morphological', - 'morphologically', - 'morphologies', - 'morphologist', - 'morphologists', - 'morphology', - 'morphometric', - 'morphometrically', - 'morphometries', - 'morphometry', - 'morphophonemics', - 'morselling', - 'mortadella', - 'mortadellas', - 'mortalities', - 'mortarboard', - 'mortarboards', - 'mortarless', - 'mortgagees', - 'mortgagers', - 'mortgaging', - 'mortgagors', - 'morticians', - 'mortification', - 'mortifications', - 'mortifying', - 'mortuaries', - 'morulation', - 'morulations', - 'mosaically', - 'mosaicisms', - 'mosaicists', - 'mosaicking', - 'mosaiclike', - 'mosquitoes', - 'mosquitoey', - 'mossbacked', - 'mothballed', - 'mothballing', - 'motherboard', - 'motherboards', - 'motherfucker', - 'motherfuckers', - 'motherfucking', - 'motherhood', - 'motherhoods', - 'motherhouse', - 'motherhouses', - 'motherland', - 'motherlands', - 'motherless', - 'motherlessness', - 'motherlessnesses', - 'motherliness', - 'motherlinesses', - 'mothproofed', - 'mothproofer', - 'mothproofers', - 'mothproofing', - 'mothproofs', - 'motilities', - 'motionless', - 'motionlessly', - 'motionlessness', - 'motionlessnesses', - 'motivating', - 'motivation', - 'motivational', - 'motivationally', - 'motivations', - 'motivative', - 'motivators', - 'motiveless', - 'motivelessly', - 'motivities', - 'motocrosses', - 'motoneuron', - 'motoneuronal', - 'motoneurons', - 'motorbiked', - 'motorbikes', - 'motorbiking', - 'motorboater', - 'motorboaters', - 'motorboating', - 'motorboatings', - 'motorboats', - 'motorbuses', - 'motorbusses', - 'motorcaded', - 'motorcades', - 'motorcading', - 'motorcycle', - 'motorcycled', - 'motorcycles', - 'motorcycling', - 'motorcyclist', - 'motorcyclists', - 'motorically', - 'motorising', - 'motorization', - 'motorizations', - 'motorizing', - 'motormouth', - 'motormouths', - 'motortruck', - 'motortrucks', - 'mouldering', - 'mountaineer', - 'mountaineering', - 'mountaineerings', - 'mountaineers', - 'mountainous', - 'mountainously', - 'mountainousness', - 'mountainousnesses', - 'mountainside', - 'mountainsides', - 'mountaintop', - 'mountaintops', - 'mountebank', - 'mountebanked', - 'mountebankeries', - 'mountebankery', - 'mountebanking', - 'mountebanks', - 'mournfuller', - 'mournfullest', - 'mournfully', - 'mournfulness', - 'mournfulnesses', - 'mourningly', - 'mousetrapped', - 'mousetrapping', - 'mousetraps', - 'mousinesses', - 'mousseline', - 'mousselines', - 'moustaches', - 'moustachio', - 'moustachios', - 'mouthbreeder', - 'mouthbreeders', - 'mouthparts', - 'mouthpiece', - 'mouthpieces', - 'mouthwashes', - 'mouthwatering', - 'mouthwateringly', - 'movabilities', - 'movability', - 'movableness', - 'movablenesses', - 'movelessly', - 'movelessness', - 'movelessnesses', - 'moviegoers', - 'moviegoing', - 'moviegoings', - 'moviemaker', - 'moviemakers', - 'moviemaking', - 'moviemakings', - 'mozzarella', - 'mozzarellas', - 'mridangams', - 'muchnesses', - 'mucidities', - 'mucilaginous', - 'mucilaginously', - 'muckamucks', - 'muckrakers', - 'muckraking', - 'mucocutaneous', - 'mucopeptide', - 'mucopeptides', - 'mucopolysaccharide', - 'mucopolysaccharides', - 'mucoprotein', - 'mucoproteins', - 'mucosities', - 'mudcapping', - 'muddinesses', - 'muddleheaded', - 'muddleheadedly', - 'muddleheadedness', - 'muddleheadednesses', - 'mudpuppies', - 'mudskipper', - 'mudskippers', - 'mudslinger', - 'mudslingers', - 'mudslinging', - 'mudslingings', - 'mugginesses', - 'mujahedeen', - 'mujahideen', - 'mulberries', - 'muliebrities', - 'muliebrity', - 'mulishness', - 'mulishnesses', - 'mullahisms', - 'mulligatawnies', - 'mulligatawny', - 'mullioning', - 'multiagency', - 'multiarmed', - 'multiauthor', - 'multiaxial', - 'multibarrel', - 'multibarreled', - 'multibillion', - 'multibillionaire', - 'multibillionaires', - 'multibillions', - 'multibladed', - 'multibranched', - 'multibuilding', - 'multicampus', - 'multicarbon', - 'multicausal', - 'multicelled', - 'multicellular', - 'multicellularities', - 'multicellularity', - 'multicenter', - 'multichain', - 'multichambered', - 'multichannel', - 'multichannels', - 'multicharacter', - 'multiclient', - 'multicoated', - 'multicolor', - 'multicolored', - 'multicolors', - 'multicolumn', - 'multicomponent', - 'multiconductor', - 'multicounty', - 'multicourse', - 'multicourses', - 'multicultural', - 'multiculturalism', - 'multiculturalisms', - 'multicurie', - 'multicurrency', - 'multidialectal', - 'multidimensional', - 'multidimensionalities', - 'multidimensionality', - 'multidirectional', - 'multidisciplinary', - 'multidiscipline', - 'multidisciplines', - 'multidivisional', - 'multidomain', - 'multielectrode', - 'multielement', - 'multiemployer', - 'multiengine', - 'multiengines', - 'multienzyme', - 'multiethnic', - 'multifaceted', - 'multifactor', - 'multifactorial', - 'multifactorially', - 'multifamily', - 'multifarious', - 'multifariousness', - 'multifariousnesses', - 'multifilament', - 'multifilaments', - 'multiflash', - 'multifocal', - 'multiformities', - 'multiformity', - 'multifrequency', - 'multifunction', - 'multifunctional', - 'multigenerational', - 'multigenic', - 'multigrade', - 'multigrain', - 'multigrains', - 'multigroup', - 'multihandicapped', - 'multiheaded', - 'multihospital', - 'multihulls', - 'multilateral', - 'multilateralism', - 'multilateralisms', - 'multilateralist', - 'multilateralists', - 'multilaterally', - 'multilayer', - 'multilayered', - 'multilevel', - 'multileveled', - 'multilingual', - 'multilingualism', - 'multilingualisms', - 'multilingually', - 'multilobed', - 'multimanned', - 'multimedia', - 'multimedias', - 'multimegaton', - 'multimegatons', - 'multimegawatt', - 'multimegawatts', - 'multimember', - 'multimetallic', - 'multimillennial', - 'multimillion', - 'multimillionaire', - 'multimillionaires', - 'multimillions', - 'multimodal', - 'multimolecular', - 'multination', - 'multinational', - 'multinationals', - 'multinomial', - 'multinomials', - 'multinuclear', - 'multinucleate', - 'multinucleated', - 'multiorgasmic', - 'multipaned', - 'multiparameter', - 'multiparous', - 'multiparticle', - 'multipartite', - 'multiparty', - 'multiphase', - 'multiphasic', - 'multiphoton', - 'multipicture', - 'multipiece', - 'multipiston', - 'multiplant', - 'multiplayer', - 'multiplets', - 'multiplexed', - 'multiplexer', - 'multiplexers', - 'multiplexes', - 'multiplexing', - 'multiplexor', - 'multiplexors', - 'multiplicand', - 'multiplicands', - 'multiplication', - 'multiplications', - 'multiplicative', - 'multiplicatively', - 'multiplicities', - 'multiplicity', - 'multiplied', - 'multiplier', - 'multipliers', - 'multiplies', - 'multiplying', - 'multipolar', - 'multipolarities', - 'multipolarity', - 'multipotential', - 'multipower', - 'multiproblem', - 'multiprocessing', - 'multiprocessings', - 'multiprocessor', - 'multiprocessors', - 'multiproduct', - 'multiprogramming', - 'multiprogrammings', - 'multipronged', - 'multipurpose', - 'multiracial', - 'multiracialism', - 'multiracialisms', - 'multirange', - 'multiregional', - 'multireligious', - 'multiscreen', - 'multisense', - 'multisensory', - 'multiservice', - 'multisided', - 'multiskilled', - 'multisource', - 'multispecies', - 'multispectral', - 'multispeed', - 'multisport', - 'multistage', - 'multistate', - 'multistemmed', - 'multistoried', - 'multistory', - 'multistranded', - 'multisyllabic', - 'multisystem', - 'multitalented', - 'multitasking', - 'multitaskings', - 'multiterminal', - 'multitiered', - 'multitowered', - 'multitrack', - 'multitracked', - 'multitracking', - 'multitracks', - 'multitrillion', - 'multitrillions', - 'multitudes', - 'multitudinous', - 'multitudinously', - 'multitudinousness', - 'multitudinousnesses', - 'multiunion', - 'multivalence', - 'multivalences', - 'multivalent', - 'multivalents', - 'multivariable', - 'multivariate', - 'multiversities', - 'multiversity', - 'multivitamin', - 'multivitamins', - 'multivoltine', - 'multivolume', - 'multiwarhead', - 'multiwavelength', - 'mummichogs', - 'mummification', - 'mummifications', - 'mummifying', - 'mundaneness', - 'mundanenesses', - 'mundanities', - 'mundunguses', - 'municipalities', - 'municipality', - 'municipalization', - 'municipalizations', - 'municipalize', - 'municipalized', - 'municipalizes', - 'municipalizing', - 'municipally', - 'municipals', - 'munificence', - 'munificences', - 'munificent', - 'munificently', - 'munitioned', - 'munitioning', - 'murderesses', - 'murderously', - 'murderousness', - 'murderousnesses', - 'murkinesses', - 'murmurously', - 'murthering', - 'muscadines', - 'muscarines', - 'muscarinic', - 'musclebound', - 'muscovites', - 'muscularities', - 'muscularity', - 'muscularly', - 'musculature', - 'musculatures', - 'musculoskeletal', - 'museological', - 'museologies', - 'museologist', - 'museologists', - 'mushinesses', - 'mushroomed', - 'mushrooming', - 'musicalise', - 'musicalised', - 'musicalises', - 'musicalising', - 'musicalities', - 'musicality', - 'musicalization', - 'musicalizations', - 'musicalize', - 'musicalized', - 'musicalizes', - 'musicalizing', - 'musicianly', - 'musicianship', - 'musicianships', - 'musicological', - 'musicologies', - 'musicologist', - 'musicologists', - 'musicology', - 'muskellunge', - 'musketeers', - 'musketries', - 'muskinesses', - 'muskmelons', - 'musquashes', - 'mussinesses', - 'mustachioed', - 'mustachios', - 'mustinesses', - 'mutabilities', - 'mutability', - 'mutageneses', - 'mutagenesis', - 'mutagenically', - 'mutagenicities', - 'mutagenicity', - 'mutational', - 'mutationally', - 'mutenesses', - 'mutilating', - 'mutilation', - 'mutilations', - 'mutilators', - 'mutineered', - 'mutineering', - 'mutinously', - 'mutinousness', - 'mutinousnesses', - 'muttonchops', - 'muttonfish', - 'muttonfishes', - 'mutualisms', - 'mutualistic', - 'mutualists', - 'mutualities', - 'mutualization', - 'mutualizations', - 'mutualized', - 'mutualizes', - 'mutualizing', - 'muzzinesses', - 'myasthenia', - 'myasthenias', - 'myasthenic', - 'myasthenics', - 'mycetomata', - 'mycetomatous', - 'mycetophagous', - 'mycetozoan', - 'mycetozoans', - 'mycobacteria', - 'mycobacterial', - 'mycobacterium', - 'mycoflorae', - 'mycofloras', - 'mycological', - 'mycologically', - 'mycologies', - 'mycologist', - 'mycologists', - 'mycophagies', - 'mycophagist', - 'mycophagists', - 'mycophagous', - 'mycophiles', - 'mycoplasma', - 'mycoplasmal', - 'mycoplasmas', - 'mycoplasmata', - 'mycorrhiza', - 'mycorrhizae', - 'mycorrhizal', - 'mycorrhizas', - 'mycotoxins', - 'mydriatics', - 'myelencephala', - 'myelencephalic', - 'myelencephalon', - 'myelinated', - 'myelitides', - 'myeloblast', - 'myeloblastic', - 'myeloblasts', - 'myelocytes', - 'myelocytic', - 'myelofibroses', - 'myelofibrosis', - 'myelofibrotic', - 'myelogenous', - 'myelomatous', - 'myelopathic', - 'myelopathies', - 'myelopathy', - 'myeloproliferative', - 'myocardial', - 'myocarditis', - 'myocarditises', - 'myocardium', - 'myoclonuses', - 'myoelectric', - 'myoelectrical', - 'myofibrillar', - 'myofibrils', - 'myofilament', - 'myofilaments', - 'myoglobins', - 'myoinositol', - 'myoinositols', - 'myopathies', - 'myopically', - 'myositises', - 'myosotises', - 'myrmecological', - 'myrmecologies', - 'myrmecologist', - 'myrmecologists', - 'myrmecology', - 'myrmecophile', - 'myrmecophiles', - 'myrmecophilous', - 'myrobalans', - 'mystagogies', - 'mystagogue', - 'mystagogues', - 'mysterious', - 'mysteriously', - 'mysteriousness', - 'mysteriousnesses', - 'mystically', - 'mysticisms', - 'mystification', - 'mystifications', - 'mystifiers', - 'mystifying', - 'mystifyingly', - 'mythically', - 'mythicized', - 'mythicizer', - 'mythicizers', - 'mythicizes', - 'mythicizing', - 'mythmakers', - 'mythmaking', - 'mythmakings', - 'mythographer', - 'mythographers', - 'mythographies', - 'mythography', - 'mythologer', - 'mythologers', - 'mythologic', - 'mythological', - 'mythologically', - 'mythologies', - 'mythologist', - 'mythologists', - 'mythologize', - 'mythologized', - 'mythologizer', - 'mythologizers', - 'mythologizes', - 'mythologizing', - 'mythomania', - 'mythomaniac', - 'mythomaniacs', - 'mythomanias', - 'mythopoeia', - 'mythopoeias', - 'mythopoeic', - 'mythopoetic', - 'mythopoetical', - 'myxedematous', - 'myxomatoses', - 'myxomatosis', - 'myxomatosises', - 'myxomatous', - 'myxomycete', - 'myxomycetes', - 'myxoviruses', - 'naboberies', - 'nabobesses', - 'nailbrushes', - 'naivenesses', - 'nakednesses', - 'nalorphine', - 'nalorphines', - 'naltrexone', - 'naltrexones', - 'namelessly', - 'namelessness', - 'namelessnesses', - 'nameplates', - 'nannoplankton', - 'nannoplanktons', - 'nanometers', - 'nanosecond', - 'nanoseconds', - 'nanotechnologies', - 'nanotechnology', - 'nanoteslas', - 'naphthalene', - 'naphthalenes', - 'naphthenes', - 'naphthenic', - 'naphthylamine', - 'naphthylamines', - 'naprapathies', - 'naprapathy', - 'narcissism', - 'narcissisms', - 'narcissist', - 'narcissistic', - 'narcissists', - 'narcissuses', - 'narcolepsies', - 'narcolepsy', - 'narcoleptic', - 'narcoleptics', - 'narcotically', - 'narcotized', - 'narcotizes', - 'narcotizing', - 'narrational', - 'narrations', - 'narratively', - 'narratives', - 'narratological', - 'narratologies', - 'narratologist', - 'narratologists', - 'narratology', - 'narrowband', - 'narrowcasting', - 'narrowcastings', - 'narrowness', - 'narrownesses', - 'nasalising', - 'nasalities', - 'nasalization', - 'nasalizations', - 'nasalizing', - 'nascencies', - 'nasogastric', - 'nasopharyngeal', - 'nasopharynges', - 'nasopharynx', - 'nasopharynxes', - 'nastinesses', - 'nasturtium', - 'nasturtiums', - 'natalities', - 'natatorial', - 'natatorium', - 'natatoriums', - 'nationalise', - 'nationalised', - 'nationalises', - 'nationalising', - 'nationalism', - 'nationalisms', - 'nationalist', - 'nationalistic', - 'nationalistically', - 'nationalists', - 'nationalities', - 'nationality', - 'nationalization', - 'nationalizations', - 'nationalize', - 'nationalized', - 'nationalizer', - 'nationalizers', - 'nationalizes', - 'nationalizing', - 'nationally', - 'nationhood', - 'nationhoods', - 'nationwide', - 'nativeness', - 'nativenesses', - 'nativistic', - 'nativities', - 'natriureses', - 'natriuresis', - 'natriuretic', - 'natriuretics', - 'natrolites', - 'nattinesses', - 'naturalise', - 'naturalised', - 'naturalises', - 'naturalising', - 'naturalism', - 'naturalisms', - 'naturalist', - 'naturalistic', - 'naturalistically', - 'naturalists', - 'naturalization', - 'naturalizations', - 'naturalize', - 'naturalized', - 'naturalizes', - 'naturalizing', - 'naturalness', - 'naturalnesses', - 'naturopath', - 'naturopathic', - 'naturopathies', - 'naturopaths', - 'naturopathy', - 'naughtiest', - 'naughtiness', - 'naughtinesses', - 'naumachiae', - 'naumachias', - 'naumachies', - 'nauseating', - 'nauseatingly', - 'nauseously', - 'nauseousness', - 'nauseousnesses', - 'nautically', - 'nautiloids', - 'nautiluses', - 'naviculars', - 'navigabilities', - 'navigability', - 'navigating', - 'navigation', - 'navigational', - 'navigationally', - 'navigations', - 'navigators', - 'nazification', - 'nazifications', - 'nearnesses', - 'nearsighted', - 'nearsightedly', - 'nearsightedness', - 'nearsightednesses', - 'neatnesses', - 'nebenkerns', - 'nebulising', - 'nebulization', - 'nebulizations', - 'nebulizers', - 'nebulizing', - 'nebulosities', - 'nebulosity', - 'nebulously', - 'nebulousness', - 'nebulousnesses', - 'necessaries', - 'necessarily', - 'necessitarian', - 'necessitarianism', - 'necessitarianisms', - 'necessitarians', - 'necessitate', - 'necessitated', - 'necessitates', - 'necessitating', - 'necessitation', - 'necessitations', - 'necessities', - 'necessitous', - 'necessitously', - 'necessitousness', - 'necessitousnesses', - 'neckerchief', - 'neckerchiefs', - 'neckerchieves', - 'necrological', - 'necrologies', - 'necrologist', - 'necrologists', - 'necromancer', - 'necromancers', - 'necromancies', - 'necromancy', - 'necromantic', - 'necromantically', - 'necrophagous', - 'necrophilia', - 'necrophiliac', - 'necrophiliacs', - 'necrophilias', - 'necrophilic', - 'necrophilism', - 'necrophilisms', - 'necropoleis', - 'necropoles', - 'necropolis', - 'necropolises', - 'necropsied', - 'necropsies', - 'necropsying', - 'necrotizing', - 'nectarines', - 'needfulness', - 'needfulnesses', - 'needinesses', - 'needlefish', - 'needlefishes', - 'needlelike', - 'needlepoint', - 'needlepoints', - 'needlessly', - 'needlessness', - 'needlessnesses', - 'needlewoman', - 'needlewomen', - 'needlework', - 'needleworker', - 'needleworkers', - 'needleworks', - 'nefariously', - 'negational', - 'negatively', - 'negativeness', - 'negativenesses', - 'negativing', - 'negativism', - 'negativisms', - 'negativist', - 'negativistic', - 'negativists', - 'negativities', - 'negativity', - 'neglecters', - 'neglectful', - 'neglectfully', - 'neglectfulness', - 'neglectfulnesses', - 'neglecting', - 'negligence', - 'negligences', - 'negligently', - 'negligibilities', - 'negligibility', - 'negligible', - 'negligibly', - 'negotiabilities', - 'negotiability', - 'negotiable', - 'negotiants', - 'negotiated', - 'negotiates', - 'negotiating', - 'negotiation', - 'negotiations', - 'negotiator', - 'negotiators', - 'negotiatory', - 'negritudes', - 'negrophobe', - 'negrophobes', - 'negrophobia', - 'negrophobias', - 'neighbored', - 'neighborhood', - 'neighborhoods', - 'neighboring', - 'neighborliness', - 'neighborlinesses', - 'neighborly', - 'neighboured', - 'neighbouring', - 'neighbours', - 'nematicidal', - 'nematicide', - 'nematicides', - 'nematocidal', - 'nematocide', - 'nematocides', - 'nematocyst', - 'nematocysts', - 'nematological', - 'nematologies', - 'nematologist', - 'nematologists', - 'nematology', - 'nemerteans', - 'nemertines', - 'nemophilas', - 'neoclassic', - 'neoclassical', - 'neoclassicism', - 'neoclassicisms', - 'neoclassicist', - 'neoclassicists', - 'neocolonial', - 'neocolonialism', - 'neocolonialisms', - 'neocolonialist', - 'neocolonialists', - 'neoconservatism', - 'neoconservatisms', - 'neoconservative', - 'neoconservatives', - 'neocortexes', - 'neocortical', - 'neocortices', - 'neodymiums', - 'neoliberal', - 'neoliberalism', - 'neoliberalisms', - 'neoliberals', - 'neologisms', - 'neologistic', - 'neonatally', - 'neonatologies', - 'neonatologist', - 'neonatologists', - 'neonatology', - 'neoorthodox', - 'neoorthodoxies', - 'neoorthodoxy', - 'neophiliac', - 'neophiliacs', - 'neophilias', - 'neoplasias', - 'neoplastic', - 'neoplasticism', - 'neoplasticisms', - 'neoplasticist', - 'neoplasticists', - 'neorealism', - 'neorealisms', - 'neorealist', - 'neorealistic', - 'neorealists', - 'neostigmine', - 'neostigmines', - 'neotropics', - 'nepenthean', - 'nephelines', - 'nephelinic', - 'nephelinite', - 'nephelinites', - 'nephelinitic', - 'nephelites', - 'nephelometer', - 'nephelometers', - 'nephelometric', - 'nephelometrically', - 'nephelometries', - 'nephelometry', - 'nephoscope', - 'nephoscopes', - 'nephrectomies', - 'nephrectomize', - 'nephrectomized', - 'nephrectomizes', - 'nephrectomizing', - 'nephrectomy', - 'nephridial', - 'nephridium', - 'nephritides', - 'nephrologies', - 'nephrologist', - 'nephrologists', - 'nephrology', - 'nephropathic', - 'nephropathies', - 'nephropathy', - 'nephrostome', - 'nephrostomes', - 'nephrotics', - 'nephrotoxic', - 'nephrotoxicities', - 'nephrotoxicity', - 'nepotistic', - 'neptuniums', - 'nervations', - 'nervelessly', - 'nervelessness', - 'nervelessnesses', - 'nervinesses', - 'nervosities', - 'nervousness', - 'nervousnesses', - 'nesciences', - 'nethermost', - 'netherworld', - 'netherworlds', - 'netminders', - 'nettlesome', - 'networking', - 'networkings', - 'neuralgias', - 'neuraminidase', - 'neuraminidases', - 'neurasthenia', - 'neurasthenias', - 'neurasthenic', - 'neurasthenically', - 'neurasthenics', - 'neurilemma', - 'neurilemmal', - 'neurilemmas', - 'neuritides', - 'neuritises', - 'neuroactive', - 'neuroanatomic', - 'neuroanatomical', - 'neuroanatomies', - 'neuroanatomist', - 'neuroanatomists', - 'neuroanatomy', - 'neurobiological', - 'neurobiologies', - 'neurobiologist', - 'neurobiologists', - 'neurobiology', - 'neuroblastoma', - 'neuroblastomas', - 'neuroblastomata', - 'neurochemical', - 'neurochemicals', - 'neurochemist', - 'neurochemistries', - 'neurochemistry', - 'neurochemists', - 'neurodegenerative', - 'neuroendocrine', - 'neuroendocrinological', - 'neuroendocrinologies', - 'neuroendocrinologist', - 'neuroendocrinologists', - 'neuroendocrinology', - 'neurofibril', - 'neurofibrillary', - 'neurofibrils', - 'neurofibroma', - 'neurofibromas', - 'neurofibromata', - 'neurofibromatoses', - 'neurofibromatosis', - 'neurofibromatosises', - 'neurogenic', - 'neurogenically', - 'neuroglial', - 'neuroglias', - 'neurohormonal', - 'neurohormone', - 'neurohormones', - 'neurohumor', - 'neurohumoral', - 'neurohumors', - 'neurohypophyseal', - 'neurohypophyses', - 'neurohypophysial', - 'neurohypophysis', - 'neuroleptic', - 'neuroleptics', - 'neurologic', - 'neurological', - 'neurologically', - 'neurologies', - 'neurologist', - 'neurologists', - 'neuromuscular', - 'neuropathic', - 'neuropathically', - 'neuropathies', - 'neuropathologic', - 'neuropathological', - 'neuropathologies', - 'neuropathologist', - 'neuropathologists', - 'neuropathology', - 'neuropathy', - 'neuropeptide', - 'neuropeptides', - 'neuropharmacologic', - 'neuropharmacological', - 'neuropharmacologies', - 'neuropharmacologist', - 'neuropharmacologists', - 'neuropharmacology', - 'neurophysiologic', - 'neurophysiological', - 'neurophysiologically', - 'neurophysiologies', - 'neurophysiologist', - 'neurophysiologists', - 'neurophysiology', - 'neuropsychiatric', - 'neuropsychiatrically', - 'neuropsychiatries', - 'neuropsychiatrist', - 'neuropsychiatrists', - 'neuropsychiatry', - 'neuropsychological', - 'neuropsychologies', - 'neuropsychologist', - 'neuropsychologists', - 'neuropsychology', - 'neuropteran', - 'neuropterans', - 'neuropterous', - 'neuroradiological', - 'neuroradiologies', - 'neuroradiologist', - 'neuroradiologists', - 'neuroradiology', - 'neuroscience', - 'neurosciences', - 'neuroscientific', - 'neuroscientist', - 'neuroscientists', - 'neurosecretion', - 'neurosecretions', - 'neurosecretory', - 'neurosensory', - 'neurospora', - 'neurosporas', - 'neurosurgeon', - 'neurosurgeons', - 'neurosurgeries', - 'neurosurgery', - 'neurosurgical', - 'neurotically', - 'neuroticism', - 'neuroticisms', - 'neurotoxic', - 'neurotoxicities', - 'neurotoxicity', - 'neurotoxin', - 'neurotoxins', - 'neurotransmission', - 'neurotransmissions', - 'neurotransmitter', - 'neurotransmitters', - 'neurotropic', - 'neurulation', - 'neurulations', - 'neutralise', - 'neutralised', - 'neutralises', - 'neutralising', - 'neutralism', - 'neutralisms', - 'neutralist', - 'neutralistic', - 'neutralists', - 'neutralities', - 'neutrality', - 'neutralization', - 'neutralizations', - 'neutralize', - 'neutralized', - 'neutralizer', - 'neutralizers', - 'neutralizes', - 'neutralizing', - 'neutralness', - 'neutralnesses', - 'neutrinoless', - 'neutrophil', - 'neutrophilic', - 'neutrophils', - 'nevertheless', - 'newfangled', - 'newfangledness', - 'newfanglednesses', - 'newmarkets', - 'newsagents', - 'newsbreaks', - 'newscaster', - 'newscasters', - 'newsdealer', - 'newsdealers', - 'newshounds', - 'newsinesses', - 'newsletter', - 'newsletters', - 'newsmagazine', - 'newsmagazines', - 'newsmonger', - 'newsmongers', - 'newspapered', - 'newspapering', - 'newspaperman', - 'newspapermen', - 'newspapers', - 'newspaperwoman', - 'newspaperwomen', - 'newspeople', - 'newsperson', - 'newspersons', - 'newsprints', - 'newsreader', - 'newsreaders', - 'newsstands', - 'newsweeklies', - 'newsweekly', - 'newsworthiness', - 'newsworthinesses', - 'newsworthy', - 'newswriting', - 'newswritings', - 'niacinamide', - 'niacinamides', - 'nialamides', - 'niccolites', - 'nicenesses', - 'nickeliferous', - 'nickelling', - 'nickelodeon', - 'nickelodeons', - 'nicknamers', - 'nicknaming', - 'nicotianas', - 'nicotinamide', - 'nicotinamides', - 'nictitated', - 'nictitates', - 'nictitating', - 'nidicolous', - 'nidification', - 'nidifications', - 'nidifugous', - 'nifedipine', - 'nifedipines', - 'niggarding', - 'niggardliness', - 'niggardlinesses', - 'nigglingly', - 'nighnesses', - 'nightclothes', - 'nightclubbed', - 'nightclubber', - 'nightclubbers', - 'nightclubbing', - 'nightclubs', - 'nightdress', - 'nightdresses', - 'nightfalls', - 'nightglows', - 'nightgowns', - 'nighthawks', - 'nightingale', - 'nightingales', - 'nightlifes', - 'nightmares', - 'nightmarish', - 'nightmarishly', - 'nightscope', - 'nightscopes', - 'nightshade', - 'nightshades', - 'nightshirt', - 'nightshirts', - 'nightsides', - 'nightspots', - 'nightstand', - 'nightstands', - 'nightstick', - 'nightsticks', - 'nighttimes', - 'nightwalker', - 'nightwalkers', - 'nigrifying', - 'nihilistic', - 'nihilities', - 'nimbleness', - 'nimblenesses', - 'nimbostrati', - 'nimbostratus', - 'nincompoop', - 'nincompooperies', - 'nincompoopery', - 'nincompoops', - 'nineteenth', - 'nineteenths', - 'ninetieths', - 'ninhydrins', - 'ninnyhammer', - 'ninnyhammers', - 'nippinesses', - 'nitpickers', - 'nitpickier', - 'nitpickiest', - 'nitpicking', - 'nitrations', - 'nitrification', - 'nitrifications', - 'nitrifiers', - 'nitrifying', - 'nitrobenzene', - 'nitrobenzenes', - 'nitrocellulose', - 'nitrocelluloses', - 'nitrofuran', - 'nitrofurans', - 'nitrogenase', - 'nitrogenases', - 'nitrogenous', - 'nitroglycerin', - 'nitroglycerine', - 'nitroglycerines', - 'nitroglycerins', - 'nitromethane', - 'nitromethanes', - 'nitroparaffin', - 'nitroparaffins', - 'nitrosamine', - 'nitrosamines', - 'nobilities', - 'noblenesses', - 'noblewoman', - 'noblewomen', - 'nociceptive', - 'noctambulist', - 'noctambulists', - 'nocturnally', - 'nodalities', - 'nodosities', - 'nodulation', - 'nodulations', - 'noiselessly', - 'noisemaker', - 'noisemakers', - 'noisemaking', - 'noisemakings', - 'noisinesses', - 'noisomeness', - 'noisomenesses', - 'nomarchies', - 'nomenclator', - 'nomenclatorial', - 'nomenclators', - 'nomenclatural', - 'nomenclature', - 'nomenclatures', - 'nominalism', - 'nominalisms', - 'nominalist', - 'nominalistic', - 'nominalists', - 'nominating', - 'nomination', - 'nominations', - 'nominative', - 'nominatives', - 'nominators', - 'nomographic', - 'nomographies', - 'nomographs', - 'nomography', - 'nomological', - 'nomologies', - 'nomothetic', - 'nonabrasive', - 'nonabsorbable', - 'nonabsorbent', - 'nonabsorbents', - 'nonabsorptive', - 'nonabstract', - 'nonacademic', - 'nonacademics', - 'nonacceptance', - 'nonacceptances', - 'nonaccountable', - 'nonaccredited', - 'nonaccrual', - 'nonachievement', - 'nonachievements', - 'nonacquisitive', - 'nonactions', - 'nonactivated', - 'nonadaptive', - 'nonaddictive', - 'nonaddicts', - 'nonadditive', - 'nonadditivities', - 'nonadditivity', - 'nonadhesive', - 'nonadiabatic', - 'nonadjacent', - 'nonadmirer', - 'nonadmirers', - 'nonadmission', - 'nonadmissions', - 'nonaesthetic', - 'nonaffiliated', - 'nonaffluent', - 'nonagenarian', - 'nonagenarians', - 'nonaggression', - 'nonaggressions', - 'nonaggressive', - 'nonagricultural', - 'nonalcoholic', - 'nonalcoholics', - 'nonaligned', - 'nonalignment', - 'nonalignments', - 'nonallelic', - 'nonallergenic', - 'nonallergic', - 'nonalphabetic', - 'nonaluminum', - 'nonambiguous', - 'nonanalytic', - 'nonanatomic', - 'nonanswers', - 'nonantagonistic', - 'nonanthropological', - 'nonanthropologist', - 'nonanthropologists', - 'nonantibiotic', - 'nonantibiotics', - 'nonantigenic', - 'nonappearance', - 'nonappearances', - 'nonaquatic', - 'nonaqueous', - 'nonarbitrariness', - 'nonarbitrarinesses', - 'nonarbitrary', - 'nonarchitect', - 'nonarchitects', - 'nonarchitecture', - 'nonarchitectures', - 'nonargument', - 'nonarguments', - 'nonaristocratic', - 'nonaromatic', - 'nonartistic', - 'nonartists', - 'nonascetic', - 'nonascetics', - 'nonaspirin', - 'nonaspirins', - 'nonassertive', - 'nonassociated', - 'nonastronomical', - 'nonathlete', - 'nonathletes', - 'nonathletic', - 'nonattached', - 'nonattachment', - 'nonattachments', - 'nonattendance', - 'nonattendances', - 'nonattender', - 'nonattenders', - 'nonauditory', - 'nonauthoritarian', - 'nonauthors', - 'nonautomated', - 'nonautomatic', - 'nonautomotive', - 'nonautonomous', - 'nonavailabilities', - 'nonavailability', - 'nonbacterial', - 'nonbanking', - 'nonbarbiturate', - 'nonbarbiturates', - 'nonbearing', - 'nonbehavioral', - 'nonbeliefs', - 'nonbeliever', - 'nonbelievers', - 'nonbelligerencies', - 'nonbelligerency', - 'nonbelligerent', - 'nonbelligerents', - 'nonbetting', - 'nonbibliographic', - 'nonbinding', - 'nonbiodegradable', - 'nonbiodegradables', - 'nonbiographical', - 'nonbiological', - 'nonbiologically', - 'nonbiologist', - 'nonbiologists', - 'nonbonding', - 'nonbotanist', - 'nonbotanists', - 'nonbreakable', - 'nonbreathing', - 'nonbreeder', - 'nonbreeders', - 'nonbreeding', - 'nonbreedings', - 'nonbroadcast', - 'nonbroadcasts', - 'nonbuilding', - 'nonbuildings', - 'nonburnable', - 'nonbusiness', - 'noncabinet', - 'noncabinets', - 'noncallable', - 'noncaloric', - 'noncancelable', - 'noncancerous', - 'noncandidacies', - 'noncandidacy', - 'noncandidate', - 'noncandidates', - 'noncannibalistic', - 'noncapital', - 'noncapitalist', - 'noncapitalists', - 'noncapitals', - 'noncarcinogen', - 'noncarcinogenic', - 'noncarcinogens', - 'noncardiac', - 'noncarrier', - 'noncarriers', - 'noncelebration', - 'noncelebrations', - 'noncelebrities', - 'noncelebrity', - 'noncellular', - 'noncellulosic', - 'noncentral', - 'noncertificated', - 'noncertified', - 'nonchalance', - 'nonchalances', - 'nonchalant', - 'nonchalantly', - 'noncharacter', - 'noncharacters', - 'noncharismatic', - 'nonchauvinist', - 'nonchauvinists', - 'nonchemical', - 'nonchemicals', - 'nonchromosomal', - 'nonchronological', - 'nonchurchgoer', - 'nonchurchgoers', - 'noncircular', - 'noncirculating', - 'noncitizen', - 'noncitizens', - 'nonclandestine', - 'nonclasses', - 'nonclassical', - 'nonclassified', - 'nonclassroom', - 'nonclassrooms', - 'nonclerical', - 'nonclericals', - 'nonclinical', - 'nonclogging', - 'noncoercive', - 'noncognitive', - 'noncoherent', - 'noncoincidence', - 'noncoincidences', - 'noncollector', - 'noncollectors', - 'noncollege', - 'noncolleges', - 'noncollegiate', - 'noncollinear', - 'noncolored', - 'noncolorfast', - 'noncombatant', - 'noncombatants', - 'noncombative', - 'noncombustible', - 'noncombustibles', - 'noncommercial', - 'noncommercials', - 'noncommitment', - 'noncommitments', - 'noncommittal', - 'noncommittally', - 'noncommitted', - 'noncommunicating', - 'noncommunication', - 'noncommunications', - 'noncommunicative', - 'noncommunist', - 'noncommunists', - 'noncommunities', - 'noncommunity', - 'noncommutative', - 'noncommutativities', - 'noncommutativity', - 'noncomparabilities', - 'noncomparability', - 'noncomparable', - 'noncompatible', - 'noncompetition', - 'noncompetitive', - 'noncompetitor', - 'noncompetitors', - 'noncomplementary', - 'noncomplex', - 'noncompliance', - 'noncompliances', - 'noncompliant', - 'noncomplicated', - 'noncomplying', - 'noncomplyings', - 'noncomposer', - 'noncomposers', - 'noncompound', - 'noncompounds', - 'noncomprehension', - 'noncomprehensions', - 'noncompressible', - 'noncomputer', - 'noncomputerized', - 'nonconceptual', - 'nonconcern', - 'nonconcerns', - 'nonconclusion', - 'nonconclusions', - 'nonconcurred', - 'nonconcurrence', - 'nonconcurrences', - 'nonconcurrent', - 'nonconcurring', - 'nonconcurs', - 'noncondensable', - 'nonconditioned', - 'nonconducting', - 'nonconduction', - 'nonconductions', - 'nonconductive', - 'nonconductor', - 'nonconductors', - 'nonconference', - 'nonconferences', - 'nonconfidence', - 'nonconfidences', - 'nonconfidential', - 'nonconflicting', - 'nonconform', - 'nonconformance', - 'nonconformances', - 'nonconformed', - 'nonconformer', - 'nonconformers', - 'nonconforming', - 'nonconformism', - 'nonconformisms', - 'nonconformist', - 'nonconformists', - 'nonconformities', - 'nonconformity', - 'nonconforms', - 'nonconfrontation', - 'nonconfrontational', - 'nonconfrontations', - 'noncongruent', - 'nonconjugated', - 'nonconnection', - 'nonconnections', - 'nonconscious', - 'nonconsecutive', - 'nonconsensual', - 'nonconservation', - 'nonconservations', - 'nonconservative', - 'nonconservatives', - 'nonconsolidated', - 'nonconstant', - 'nonconstants', - 'nonconstitutional', - 'nonconstruction', - 'nonconstructions', - 'nonconstructive', - 'nonconsumer', - 'nonconsumers', - 'nonconsuming', - 'nonconsumption', - 'nonconsumptions', - 'nonconsumptive', - 'noncontact', - 'noncontacts', - 'noncontagious', - 'noncontemporaries', - 'noncontemporary', - 'noncontiguous', - 'noncontingent', - 'noncontinuous', - 'noncontract', - 'noncontractual', - 'noncontradiction', - 'noncontradictions', - 'noncontradictory', - 'noncontributory', - 'noncontrollable', - 'noncontrolled', - 'noncontrolling', - 'noncontroversial', - 'nonconventional', - 'nonconvertible', - 'noncooperation', - 'noncooperationist', - 'noncooperationists', - 'noncooperations', - 'noncooperative', - 'noncooperator', - 'noncooperators', - 'noncoplanar', - 'noncorporate', - 'noncorrelation', - 'noncorrelations', - 'noncorrodible', - 'noncorroding', - 'noncorrodings', - 'noncorrosive', - 'noncountries', - 'noncountry', - 'noncoverage', - 'noncoverages', - 'noncreative', - 'noncreativities', - 'noncreativity', - 'noncredentialed', - 'noncriminal', - 'noncriminals', - 'noncritical', - 'noncrossover', - 'noncrushable', - 'noncrystalline', - 'nonculinary', - 'noncultivated', - 'noncultivation', - 'noncultivations', - 'noncultural', - 'noncumulative', - 'noncurrent', - 'noncustodial', - 'noncustomer', - 'noncustomers', - 'noncyclical', - 'nondancers', - 'nondeceptive', - 'nondecision', - 'nondecisions', - 'nondecreasing', - 'nondeductibilities', - 'nondeductibility', - 'nondeductible', - 'nondeductive', - 'nondefense', - 'nondeferrable', - 'nondeforming', - 'nondegenerate', - 'nondegenerates', - 'nondegradable', - 'nondegradables', - 'nondelegate', - 'nondelegates', - 'nondeliberate', - 'nondelinquent', - 'nondeliveries', - 'nondelivery', - 'nondemanding', - 'nondemocratic', - 'nondenominational', - 'nondenominationalism', - 'nondenominationalisms', - 'nondepartmental', - 'nondependent', - 'nondependents', - 'nondepletable', - 'nondepleting', - 'nondeposition', - 'nondepositions', - 'nondepressed', - 'nonderivative', - 'nonderivatives', - 'nondescript', - 'nondescriptive', - 'nondescripts', - 'nondestructive', - 'nondestructively', - 'nondestructiveness', - 'nondestructivenesses', - 'nondetachable', - 'nondeterministic', - 'nondevelopment', - 'nondevelopments', - 'nondeviant', - 'nondeviants', - 'nondiabetic', - 'nondiabetics', - 'nondialyzable', - 'nondiapausing', - 'nondidactic', - 'nondiffusible', - 'nondimensional', - 'nondiplomatic', - 'nondirected', - 'nondirectional', - 'nondirective', - 'nondisabled', - 'nondisableds', - 'nondisclosure', - 'nondisclosures', - 'nondiscount', - 'nondiscretionary', - 'nondiscrimination', - 'nondiscriminations', - 'nondiscriminatory', - 'nondiscursive', - 'nondisjunction', - 'nondisjunctional', - 'nondisjunctions', - 'nondispersive', - 'nondisruptive', - 'nondistinctive', - 'nondiversified', - 'nondividing', - 'nondoctors', - 'nondoctrinaire', - 'nondocumentaries', - 'nondocumentary', - 'nondogmatic', - 'nondomestic', - 'nondomestics', - 'nondominant', - 'nondominants', - 'nondormant', - 'nondramatic', - 'nondrinker', - 'nondrinkers', - 'nondrinking', - 'nondrivers', - 'nondurable', - 'nondurables', - 'nonearning', - 'nonearnings', - 'nonecclesiastical', - 'noneconomic', - 'noneconomist', - 'noneconomists', - 'noneditorial', - 'noneducation', - 'noneducational', - 'noneducations', - 'noneffective', - 'noneffectives', - 'nonelastic', - 'nonelected', - 'nonelection', - 'nonelections', - 'nonelective', - 'nonelectives', - 'nonelectric', - 'nonelectrical', - 'nonelectrics', - 'nonelectrolyte', - 'nonelectrolytes', - 'nonelectronic', - 'nonelectronics', - 'nonelementary', - 'nonemergencies', - 'nonemergency', - 'nonemotional', - 'nonemphatic', - 'nonempirical', - 'nonemployee', - 'nonemployees', - 'nonemployment', - 'nonemployments', - 'nonencapsulated', - 'nonenforceabilities', - 'nonenforceability', - 'nonenforcement', - 'nonenforcements', - 'nonengagement', - 'nonengagements', - 'nonengineering', - 'nonengineerings', - 'nonentertainment', - 'nonentertainments', - 'nonentities', - 'nonentries', - 'nonenzymatic', - 'nonenzymic', - 'nonequilibria', - 'nonequilibrium', - 'nonequilibriums', - 'nonequivalence', - 'nonequivalences', - 'nonequivalent', - 'nonequivalents', - 'nonessential', - 'nonessentials', - 'nonestablished', - 'nonestablishment', - 'nonestablishments', - 'nonesterified', - 'nonesuches', - 'nonetheless', - 'nonethical', - 'nonevaluative', - 'nonevidence', - 'nonevidences', - 'nonexclusive', - 'nonexecutive', - 'nonexecutives', - 'nonexistence', - 'nonexistences', - 'nonexistent', - 'nonexistential', - 'nonexpendable', - 'nonexperimental', - 'nonexperts', - 'nonexplanatory', - 'nonexploitation', - 'nonexploitations', - 'nonexploitative', - 'nonexploitive', - 'nonexplosive', - 'nonexplosives', - 'nonexposed', - 'nonfactors', - 'nonfactual', - 'nonfaculty', - 'nonfamilial', - 'nonfamilies', - 'nonfarmers', - 'nonfattening', - 'nonfeasance', - 'nonfeasances', - 'nonfederal', - 'nonfederated', - 'nonfeminist', - 'nonfeminists', - 'nonferrous', - 'nonfiction', - 'nonfictional', - 'nonfictions', - 'nonfigurative', - 'nonfilamentous', - 'nonfilterable', - 'nonfinancial', - 'nonfissionable', - 'nonflammability', - 'nonflammable', - 'nonflowering', - 'nonfluencies', - 'nonfluency', - 'nonfluorescent', - 'nonforfeitable', - 'nonforfeiture', - 'nonforfeitures', - 'nonfraternization', - 'nonfraternizations', - 'nonfreezing', - 'nonfrivolous', - 'nonfulfillment', - 'nonfulfillments', - 'nonfunctional', - 'nonfunctioning', - 'nongaseous', - 'nongenetic', - 'nongenital', - 'nongeometrical', - 'nonglamorous', - 'nongolfers', - 'nongonococcal', - 'nongovernment', - 'nongovernmental', - 'nongovernments', - 'nongraduate', - 'nongraduates', - 'nongrammatical', - 'nongranular', - 'nongravitational', - 'nongregarious', - 'nongrowing', - 'nonhalogenated', - 'nonhandicapped', - 'nonhappening', - 'nonhappenings', - 'nonharmonic', - 'nonhazardous', - 'nonhemolytic', - 'nonhereditary', - 'nonhierarchical', - 'nonhistone', - 'nonhistorical', - 'nonhomogeneous', - 'nonhomologous', - 'nonhomosexual', - 'nonhomosexuals', - 'nonhormonal', - 'nonhospital', - 'nonhospitalized', - 'nonhospitals', - 'nonhostile', - 'nonhousing', - 'nonhousings', - 'nonhunters', - 'nonhunting', - 'nonhygroscopic', - 'nonhysterical', - 'nonidentical', - 'nonidentities', - 'nonidentity', - 'nonideological', - 'nonillions', - 'nonimitative', - 'nonimmigrant', - 'nonimmigrants', - 'nonimplication', - 'nonimplications', - 'nonimportation', - 'nonimportations', - 'noninclusion', - 'noninclusions', - 'nonincreasing', - 'nonincumbent', - 'nonincumbents', - 'nonindependence', - 'nonindependences', - 'nonindigenous', - 'nonindividual', - 'noninductive', - 'nonindustrial', - 'nonindustrialized', - 'nonindustry', - 'noninfected', - 'noninfectious', - 'noninfective', - 'noninfested', - 'noninflammable', - 'noninflammatory', - 'noninflationary', - 'noninflectional', - 'noninfluence', - 'noninfluences', - 'noninformation', - 'noninformations', - 'noninitial', - 'noninitiate', - 'noninitiates', - 'noninsecticidal', - 'noninsects', - 'noninstallment', - 'noninstitutional', - 'noninstitutionalized', - 'noninstructional', - 'noninstrumental', - 'noninsurance', - 'noninsurances', - 'noninsured', - 'nonintegral', - 'nonintegrated', - 'nonintellectual', - 'nonintellectuals', - 'noninteracting', - 'noninteractive', - 'noninterchangeable', - 'nonintercourse', - 'nonintercourses', - 'noninterest', - 'noninterests', - 'noninterference', - 'noninterferences', - 'nonintersecting', - 'nonintervention', - 'noninterventionist', - 'noninterventionists', - 'noninterventions', - 'nonintimidating', - 'nonintoxicant', - 'nonintoxicating', - 'nonintrusive', - 'nonintuitive', - 'noninvasive', - 'noninvolved', - 'noninvolvement', - 'noninvolvements', - 'nonionizing', - 'nonirradiated', - 'nonirrigated', - 'nonirritant', - 'nonirritating', - 'nonjoinder', - 'nonjoinders', - 'nonjoiners', - 'nonjudgmental', - 'nonjudicial', - 'nonjusticiable', - 'nonlandowner', - 'nonlandowners', - 'nonlanguage', - 'nonlanguages', - 'nonlawyers', - 'nonlegumes', - 'nonleguminous', - 'nonlexical', - 'nonlibrarian', - 'nonlibrarians', - 'nonlibraries', - 'nonlibrary', - 'nonlinearities', - 'nonlinearity', - 'nonlinguistic', - 'nonliquids', - 'nonliteral', - 'nonliterary', - 'nonliterate', - 'nonliterates', - 'nonlogical', - 'nonluminous', - 'nonmagnetic', - 'nonmainstream', - 'nonmalignant', - 'nonmalleable', - 'nonmanagement', - 'nonmanagements', - 'nonmanagerial', - 'nonmanufacturing', - 'nonmanufacturings', - 'nonmarital', - 'nonmaterial', - 'nonmaterialistic', - 'nonmathematical', - 'nonmathematician', - 'nonmathematicians', - 'nonmatriculated', - 'nonmeaningful', - 'nonmeasurable', - 'nonmechanical', - 'nonmechanistic', - 'nonmedical', - 'nonmeeting', - 'nonmeetings', - 'nonmembers', - 'nonmembership', - 'nonmemberships', - 'nonmercurial', - 'nonmetallic', - 'nonmetameric', - 'nonmetaphorical', - 'nonmetrical', - 'nonmetropolitan', - 'nonmetropolitans', - 'nonmicrobial', - 'nonmigrant', - 'nonmigrants', - 'nonmigratory', - 'nonmilitant', - 'nonmilitants', - 'nonmilitary', - 'nonmimetic', - 'nonminority', - 'nonmolecular', - 'nonmonetarist', - 'nonmonetarists', - 'nonmonetary', - 'nonmonogamous', - 'nonmotilities', - 'nonmotility', - 'nonmotorized', - 'nonmunicipal', - 'nonmusical', - 'nonmusician', - 'nonmusicians', - 'nonmutants', - 'nonmyelinated', - 'nonmystical', - 'nonnarrative', - 'nonnarratives', - 'nonnational', - 'nonnationals', - 'nonnatives', - 'nonnatural', - 'nonnecessities', - 'nonnecessity', - 'nonnegative', - 'nonnegligent', - 'nonnegotiable', - 'nonnetwork', - 'nonnitrogenous', - 'nonnormative', - 'nonnuclear', - 'nonnucleated', - 'nonnumerical', - 'nonnumericals', - 'nonnutritious', - 'nonnutritive', - 'nonobjective', - 'nonobjectivism', - 'nonobjectivisms', - 'nonobjectivist', - 'nonobjectivists', - 'nonobjectivities', - 'nonobjectivity', - 'nonobscene', - 'nonobservance', - 'nonobservances', - 'nonobservant', - 'nonobvious', - 'nonoccupational', - 'nonoccurrence', - 'nonoccurrences', - 'nonofficial', - 'nonoperatic', - 'nonoperating', - 'nonoperational', - 'nonoperative', - 'nonoptimal', - 'nonorganic', - 'nonorgasmic', - 'nonorthodox', - 'nonoverlapping', - 'nonoverlappings', - 'nonoxidizing', - 'nonparallel', - 'nonparallels', - 'nonparametric', - 'nonparasitic', - 'nonpareils', - 'nonparticipant', - 'nonparticipants', - 'nonparticipating', - 'nonparticipation', - 'nonparticipations', - 'nonparticipatory', - 'nonpartisan', - 'nonpartisans', - 'nonpartisanship', - 'nonpartisanships', - 'nonpasserine', - 'nonpassive', - 'nonpathogenic', - 'nonpayment', - 'nonpayments', - 'nonperformance', - 'nonperformances', - 'nonperformer', - 'nonperformers', - 'nonperforming', - 'nonperishable', - 'nonperishables', - 'nonpermissive', - 'nonpersistent', - 'nonpersonal', - 'nonpersons', - 'nonpetroleum', - 'nonpetroleums', - 'nonphilosopher', - 'nonphilosophers', - 'nonphilosophical', - 'nonphonemic', - 'nonphonetic', - 'nonphosphate', - 'nonphosphates', - 'nonphotographic', - 'nonphysical', - 'nonphysician', - 'nonphysicians', - 'nonplastic', - 'nonplastics', - 'nonplaying', - 'nonplusing', - 'nonplussed', - 'nonplusses', - 'nonplussing', - 'nonpoisonous', - 'nonpolarizable', - 'nonpolitical', - 'nonpolitically', - 'nonpolitician', - 'nonpoliticians', - 'nonpolluting', - 'nonpossession', - 'nonpossessions', - 'nonpractical', - 'nonpracticing', - 'nonpregnant', - 'nonprescription', - 'nonproblem', - 'nonproblems', - 'nonproducing', - 'nonproductive', - 'nonproductiveness', - 'nonproductivenesses', - 'nonprofessional', - 'nonprofessionally', - 'nonprofessionals', - 'nonprofessorial', - 'nonprofits', - 'nonprogram', - 'nonprogrammer', - 'nonprogrammers', - 'nonprograms', - 'nonprogressive', - 'nonprogressives', - 'nonproliferation', - 'nonproliferations', - 'nonproprietaries', - 'nonproprietary', - 'nonprossed', - 'nonprosses', - 'nonprossing', - 'nonprotein', - 'nonpsychiatric', - 'nonpsychiatrist', - 'nonpsychiatrists', - 'nonpsychological', - 'nonpsychotic', - 'nonpunitive', - 'nonpurposive', - 'nonquantifiable', - 'nonquantitative', - 'nonracially', - 'nonradioactive', - 'nonrailroad', - 'nonrandomness', - 'nonrandomnesses', - 'nonrational', - 'nonreactive', - 'nonreactor', - 'nonreactors', - 'nonreaders', - 'nonreading', - 'nonrealistic', - 'nonreappointment', - 'nonreappointments', - 'nonreceipt', - 'nonreceipts', - 'nonreciprocal', - 'nonreciprocals', - 'nonrecognition', - 'nonrecognitions', - 'nonrecombinant', - 'nonrecombinants', - 'nonrecourse', - 'nonrecurrent', - 'nonrecurring', - 'nonrecyclable', - 'nonrecyclables', - 'nonreducing', - 'nonredundant', - 'nonrefillable', - 'nonreflecting', - 'nonrefundable', - 'nonregulated', - 'nonregulation', - 'nonregulations', - 'nonrelative', - 'nonrelatives', - 'nonrelativistic', - 'nonrelativistically', - 'nonrelevant', - 'nonreligious', - 'nonrenewable', - 'nonrenewal', - 'nonrenewals', - 'nonrepayable', - 'nonrepresentational', - 'nonrepresentationalism', - 'nonrepresentationalisms', - 'nonrepresentative', - 'nonrepresentatives', - 'nonreproducible', - 'nonreproductive', - 'nonresidence', - 'nonresidences', - 'nonresidencies', - 'nonresidency', - 'nonresident', - 'nonresidential', - 'nonresidents', - 'nonresistance', - 'nonresistances', - 'nonresistant', - 'nonresistants', - 'nonresonant', - 'nonrespondent', - 'nonrespondents', - 'nonresponder', - 'nonresponders', - 'nonresponse', - 'nonresponses', - 'nonresponsive', - 'nonrestricted', - 'nonrestrictive', - 'nonretractile', - 'nonretroactive', - 'nonreturnable', - 'nonreturnables', - 'nonreusable', - 'nonreusables', - 'nonreversible', - 'nonrevolutionaries', - 'nonrevolutionary', - 'nonrioters', - 'nonrioting', - 'nonrotating', - 'nonroutine', - 'nonroutines', - 'nonruminant', - 'nonruminants', - 'nonsalable', - 'nonsaponifiable', - 'nonscheduled', - 'nonschizophrenic', - 'nonscience', - 'nonsciences', - 'nonscientific', - 'nonscientist', - 'nonscientists', - 'nonseasonal', - 'nonsecretor', - 'nonsecretories', - 'nonsecretors', - 'nonsecretory', - 'nonsectarian', - 'nonsedimentable', - 'nonsegregated', - 'nonsegregation', - 'nonsegregations', - 'nonselected', - 'nonselective', - 'nonsensational', - 'nonsensical', - 'nonsensically', - 'nonsensicalness', - 'nonsensicalnesses', - 'nonsensitive', - 'nonsensuous', - 'nonsentence', - 'nonsentences', - 'nonseptate', - 'nonsequential', - 'nonserious', - 'nonshrinkable', - 'nonsigners', - 'nonsignificant', - 'nonsignificantly', - 'nonsimultaneous', - 'nonsinkable', - 'nonskaters', - 'nonskeletal', - 'nonsmokers', - 'nonsmoking', - 'nonsocialist', - 'nonsocialists', - 'nonsolution', - 'nonsolutions', - 'nonspatial', - 'nonspeaker', - 'nonspeakers', - 'nonspeaking', - 'nonspecialist', - 'nonspecialists', - 'nonspecific', - 'nonspecifically', - 'nonspectacular', - 'nonspeculative', - 'nonspherical', - 'nonsporting', - 'nonstandard', - 'nonstarter', - 'nonstarters', - 'nonstationaries', - 'nonstationary', - 'nonstatistical', - 'nonsteroid', - 'nonsteroidal', - 'nonsteroids', - 'nonstories', - 'nonstrategic', - 'nonstructural', - 'nonstructured', - 'nonstudent', - 'nonstudents', - 'nonsubject', - 'nonsubjective', - 'nonsubjects', - 'nonsubsidized', - 'nonsuccess', - 'nonsuccesses', - 'nonsuiting', - 'nonsuperimposable', - 'nonsupervisory', - 'nonsupport', - 'nonsupports', - 'nonsurgical', - 'nonswimmer', - 'nonswimmers', - 'nonsyllabic', - 'nonsymbolic', - 'nonsymmetric', - 'nonsymmetrical', - 'nonsynchronous', - 'nonsystematic', - 'nonsystemic', - 'nonsystems', - 'nontaxable', - 'nontaxables', - 'nonteaching', - 'nontechnical', - 'nontemporal', - 'nontemporals', - 'nontenured', - 'nonterminal', - 'nonterminating', - 'nontheatrical', - 'nontheistic', - 'nontheists', - 'nontheological', - 'nontheoretical', - 'nontherapeutic', - 'nonthermal', - 'nonthinking', - 'nonthinkings', - 'nonthreatening', - 'nontobacco', - 'nontobaccos', - 'nontotalitarian', - 'nontraditional', - 'nontransferable', - 'nontreatment', - 'nontreatments', - 'nontrivial', - 'nontropical', - 'nonturbulent', - 'nontypical', - 'nonunanimous', - 'nonuniform', - 'nonuniformities', - 'nonuniformity', - 'nonunionized', - 'nonuniqueness', - 'nonuniquenesses', - 'nonuniversal', - 'nonuniversals', - 'nonuniversities', - 'nonuniversity', - 'nonutilitarian', - 'nonutilitarians', - 'nonutilities', - 'nonutility', - 'nonutopian', - 'nonvalidities', - 'nonvalidity', - 'nonvanishing', - 'nonvascular', - 'nonvectors', - 'nonvegetarian', - 'nonvegetarians', - 'nonvenomous', - 'nonverbally', - 'nonveteran', - 'nonveterans', - 'nonviewers', - 'nonvintage', - 'nonviolence', - 'nonviolences', - 'nonviolent', - 'nonviolently', - 'nonvirgins', - 'nonviscous', - 'nonvocational', - 'nonvolatile', - 'nonvolcanic', - 'nonvoluntary', - 'nonwinning', - 'nonworkers', - 'nonworking', - 'nonwriters', - 'nonyellowing', - 'noospheres', - 'noradrenalin', - 'noradrenaline', - 'noradrenalines', - 'noradrenalins', - 'noradrenergic', - 'norepinephrine', - 'norepinephrines', - 'norethindrone', - 'norethindrones', - 'normalcies', - 'normalised', - 'normalises', - 'normalising', - 'normalities', - 'normalizable', - 'normalization', - 'normalizations', - 'normalized', - 'normalizer', - 'normalizers', - 'normalizes', - 'normalizing', - 'normatively', - 'normativeness', - 'normativenesses', - 'normotensive', - 'normotensives', - 'normothermia', - 'normothermias', - 'normothermic', - 'northbound', - 'northeaster', - 'northeasterly', - 'northeastern', - 'northeasternmost', - 'northeasters', - 'northeasts', - 'northeastward', - 'northeastwards', - 'northerlies', - 'northerner', - 'northerners', - 'northernmost', - 'northlands', - 'northwards', - 'northwester', - 'northwesterly', - 'northwestern', - 'northwesternmost', - 'northwesters', - 'northwests', - 'northwestward', - 'northwestwards', - 'nortriptyline', - 'nortriptylines', - 'nosebleeds', - 'noseguards', - 'nosepieces', - 'nosewheels', - 'nosinesses', - 'nosocomial', - 'nosological', - 'nosologically', - 'nosologies', - 'nostalgias', - 'nostalgically', - 'nostalgics', - 'nostalgist', - 'nostalgists', - 'notabilities', - 'notability', - 'notableness', - 'notablenesses', - 'notarially', - 'notarization', - 'notarizations', - 'notarizing', - 'notational', - 'notchbacks', - 'notednesses', - 'notepapers', - 'noteworthily', - 'noteworthiness', - 'noteworthinesses', - 'noteworthy', - 'nothingness', - 'nothingnesses', - 'noticeable', - 'noticeably', - 'notifiable', - 'notification', - 'notifications', - 'notionalities', - 'notionality', - 'notionally', - 'notochordal', - 'notochords', - 'notorieties', - 'notoriously', - 'notwithstanding', - 'nourishers', - 'nourishing', - 'nourishment', - 'nourishments', - 'novaculite', - 'novaculites', - 'novelettes', - 'novelettish', - 'novelising', - 'novelistic', - 'novelistically', - 'novelization', - 'novelizations', - 'novelizing', - 'novemdecillion', - 'novemdecillions', - 'novitiates', - 'novobiocin', - 'novobiocins', - 'novocaines', - 'noxiousness', - 'noxiousnesses', - 'nubilities', - 'nucleating', - 'nucleation', - 'nucleations', - 'nucleators', - 'nucleocapsid', - 'nucleocapsids', - 'nucleonics', - 'nucleophile', - 'nucleophiles', - 'nucleophilic', - 'nucleophilically', - 'nucleophilicities', - 'nucleophilicity', - 'nucleoplasm', - 'nucleoplasmic', - 'nucleoplasms', - 'nucleoprotein', - 'nucleoproteins', - 'nucleoside', - 'nucleosides', - 'nucleosomal', - 'nucleosome', - 'nucleosomes', - 'nucleosyntheses', - 'nucleosynthesis', - 'nucleosynthetic', - 'nucleotidase', - 'nucleotidases', - 'nucleotide', - 'nucleotides', - 'nudenesses', - 'nudibranch', - 'nudibranchs', - 'nullification', - 'nullificationist', - 'nullificationists', - 'nullifications', - 'nullifiers', - 'nullifying', - 'nulliparous', - 'numberable', - 'numberless', - 'numbfishes', - 'numbnesses', - 'numbskulls', - 'numeracies', - 'numerating', - 'numeration', - 'numerations', - 'numerators', - 'numerically', - 'numerological', - 'numerologies', - 'numerologist', - 'numerologists', - 'numerology', - 'numerously', - 'numerousness', - 'numerousnesses', - 'numinouses', - 'numinousness', - 'numinousnesses', - 'numismatic', - 'numismatically', - 'numismatics', - 'numismatist', - 'numismatists', - 'nunciature', - 'nunciatures', - 'nuncupative', - 'nuptialities', - 'nuptiality', - 'nursemaids', - 'nurseryman', - 'nurserymen', - 'nurturance', - 'nurturances', - 'nutational', - 'nutcracker', - 'nutcrackers', - 'nutgrasses', - 'nuthatches', - 'nutriments', - 'nutritional', - 'nutritionally', - 'nutritionist', - 'nutritionists', - 'nutritions', - 'nutritious', - 'nutritiously', - 'nutritiousness', - 'nutritiousnesses', - 'nutritively', - 'nuttinesses', - 'nyctalopia', - 'nyctalopias', - 'nymphalids', - 'nymphettes', - 'nympholepsies', - 'nympholepsy', - 'nympholept', - 'nympholeptic', - 'nympholepts', - 'nymphomania', - 'nymphomaniac', - 'nymphomaniacal', - 'nymphomaniacs', - 'nymphomanias', - 'nystagmuses', - 'oafishness', - 'oafishnesses', - 'oarsmanship', - 'oarsmanships', - 'oasthouses', - 'obbligatos', - 'obduracies', - 'obdurately', - 'obdurateness', - 'obduratenesses', - 'obediences', - 'obediently', - 'obeisances', - 'obeisantly', - 'obfuscated', - 'obfuscates', - 'obfuscating', - 'obfuscation', - 'obfuscations', - 'obfuscatory', - 'obituaries', - 'obituarist', - 'obituarists', - 'objectification', - 'objectifications', - 'objectified', - 'objectifies', - 'objectifying', - 'objectionable', - 'objectionableness', - 'objectionablenesses', - 'objectionably', - 'objections', - 'objectively', - 'objectiveness', - 'objectivenesses', - 'objectives', - 'objectivism', - 'objectivisms', - 'objectivist', - 'objectivistic', - 'objectivists', - 'objectivities', - 'objectivity', - 'objectless', - 'objectlessness', - 'objectlessnesses', - 'objurgated', - 'objurgates', - 'objurgating', - 'objurgation', - 'objurgations', - 'objurgatory', - 'oblanceolate', - 'oblateness', - 'oblatenesses', - 'obligately', - 'obligating', - 'obligation', - 'obligations', - 'obligatorily', - 'obligatory', - 'obligingly', - 'obligingness', - 'obligingnesses', - 'obliqueness', - 'obliquenesses', - 'obliquities', - 'obliterate', - 'obliterated', - 'obliterates', - 'obliterating', - 'obliteration', - 'obliterations', - 'obliterative', - 'obliterator', - 'obliterators', - 'obliviously', - 'obliviousness', - 'obliviousnesses', - 'obnoxiously', - 'obnoxiousness', - 'obnoxiousnesses', - 'obnubilate', - 'obnubilated', - 'obnubilates', - 'obnubilating', - 'obnubilation', - 'obnubilations', - 'obscenities', - 'obscurantic', - 'obscurantism', - 'obscurantisms', - 'obscurantist', - 'obscurantists', - 'obscurants', - 'obscuration', - 'obscurations', - 'obscureness', - 'obscurenesses', - 'obscurities', - 'obsequious', - 'obsequiously', - 'obsequiousness', - 'obsequiousnesses', - 'observabilities', - 'observability', - 'observable', - 'observables', - 'observably', - 'observance', - 'observances', - 'observantly', - 'observants', - 'observation', - 'observational', - 'observationally', - 'observations', - 'observatories', - 'observatory', - 'observingly', - 'obsessional', - 'obsessionally', - 'obsessions', - 'obsessively', - 'obsessiveness', - 'obsessivenesses', - 'obsessives', - 'obsolesced', - 'obsolescence', - 'obsolescences', - 'obsolescent', - 'obsolescently', - 'obsolesces', - 'obsolescing', - 'obsoletely', - 'obsoleteness', - 'obsoletenesses', - 'obsoleting', - 'obstetrical', - 'obstetrically', - 'obstetrician', - 'obstetricians', - 'obstetrics', - 'obstinacies', - 'obstinately', - 'obstinateness', - 'obstinatenesses', - 'obstreperous', - 'obstreperously', - 'obstreperousness', - 'obstreperousnesses', - 'obstructed', - 'obstructing', - 'obstruction', - 'obstructionism', - 'obstructionisms', - 'obstructionist', - 'obstructionistic', - 'obstructionists', - 'obstructions', - 'obstructive', - 'obstructively', - 'obstructiveness', - 'obstructivenesses', - 'obstructives', - 'obstructor', - 'obstructors', - 'obtainabilities', - 'obtainability', - 'obtainable', - 'obtainment', - 'obtainments', - 'obtrusions', - 'obtrusively', - 'obtrusiveness', - 'obtrusivenesses', - 'obturating', - 'obturation', - 'obturations', - 'obturators', - 'obtuseness', - 'obtusenesses', - 'obtusities', - 'obviations', - 'obviousness', - 'obviousnesses', - 'occasional', - 'occasionally', - 'occasioned', - 'occasioning', - 'occidental', - 'occidentalize', - 'occidentalized', - 'occidentalizes', - 'occidentalizing', - 'occidentally', - 'occipitally', - 'occipitals', - 'occlusions', - 'occultation', - 'occultations', - 'occultisms', - 'occultists', - 'occupancies', - 'occupation', - 'occupational', - 'occupationally', - 'occupations', - 'occurrence', - 'occurrences', - 'occurrents', - 'oceanarium', - 'oceanariums', - 'oceanfront', - 'oceanfronts', - 'oceangoing', - 'oceanographer', - 'oceanographers', - 'oceanographic', - 'oceanographical', - 'oceanographically', - 'oceanographies', - 'oceanography', - 'oceanologies', - 'oceanologist', - 'oceanologists', - 'oceanology', - 'ochlocracies', - 'ochlocracy', - 'ochlocratic', - 'ochlocratical', - 'ochlocrats', - 'octagonally', - 'octahedral', - 'octahedrally', - 'octahedron', - 'octahedrons', - 'octameters', - 'octapeptide', - 'octapeptides', - 'octarchies', - 'octillions', - 'octodecillion', - 'octodecillions', - 'octogenarian', - 'octogenarians', - 'octonaries', - 'octoploids', - 'octosyllabic', - 'octosyllabics', - 'octosyllable', - 'octosyllables', - 'octothorps', - 'ocularists', - 'oculomotor', - 'odalisques', - 'oddsmakers', - 'odiousness', - 'odiousnesses', - 'odometries', - 'odontoblast', - 'odontoblastic', - 'odontoblasts', - 'odontoglossum', - 'odontoglossums', - 'odoriferous', - 'odoriferously', - 'odoriferousness', - 'odoriferousnesses', - 'odorousness', - 'odorousnesses', - 'oecologies', - 'oecumenical', - 'oenologies', - 'oenophiles', - 'oesophagus', - 'offenseless', - 'offensively', - 'offensiveness', - 'offensivenesses', - 'offensives', - 'offertories', - 'offhandedly', - 'offhandedness', - 'offhandednesses', - 'officeholder', - 'officeholders', - 'officering', - 'officialdom', - 'officialdoms', - 'officialese', - 'officialeses', - 'officialism', - 'officialisms', - 'officially', - 'officiants', - 'officiaries', - 'officiated', - 'officiates', - 'officiating', - 'officiation', - 'officiations', - 'officiously', - 'officiousness', - 'officiousnesses', - 'offishness', - 'offishnesses', - 'offloading', - 'offprinted', - 'offprinting', - 'offscouring', - 'offscourings', - 'offsetting', - 'offsprings', - 'oftentimes', - 'oilinesses', - 'oinologies', - 'oldfangled', - 'oleaginous', - 'oleaginously', - 'oleaginousness', - 'oleaginousnesses', - 'oleandomycin', - 'oleandomycins', - 'olecranons', - 'oleographs', - 'oleomargarine', - 'oleomargarines', - 'oleoresinous', - 'oleoresins', - 'olfactions', - 'olfactometer', - 'olfactometers', - 'oligarchic', - 'oligarchical', - 'oligarchies', - 'oligochaete', - 'oligochaetes', - 'oligoclase', - 'oligoclases', - 'oligodendrocyte', - 'oligodendrocytes', - 'oligodendroglia', - 'oligodendroglial', - 'oligodendroglias', - 'oligomeric', - 'oligomerization', - 'oligomerizations', - 'oligonucleotide', - 'oligonucleotides', - 'oligophagies', - 'oligophagous', - 'oligophagy', - 'oligopolies', - 'oligopolistic', - 'oligopsonies', - 'oligopsonistic', - 'oligopsony', - 'oligosaccharide', - 'oligosaccharides', - 'oligotrophic', - 'olivaceous', - 'olivenites', - 'olivinitic', - 'ololiuquis', - 'ombudsmanship', - 'ombudsmanships', - 'ominousness', - 'ominousnesses', - 'ommatidial', - 'ommatidium', - 'omnicompetence', - 'omnicompetences', - 'omnicompetent', - 'omnidirectional', - 'omnifarious', - 'omnificent', - 'omnipotence', - 'omnipotences', - 'omnipotent', - 'omnipotently', - 'omnipotents', - 'omnipresence', - 'omnipresences', - 'omnipresent', - 'omniranges', - 'omniscience', - 'omnisciences', - 'omniscient', - 'omnisciently', - 'omnivorous', - 'omnivorously', - 'omophagies', - 'omphaloskepses', - 'omphaloskepsis', - 'onchocerciases', - 'onchocerciasis', - 'oncogeneses', - 'oncogenesis', - 'oncogenicities', - 'oncogenicity', - 'oncological', - 'oncologies', - 'oncologist', - 'oncologists', - 'oncornavirus', - 'oncornaviruses', - 'oneirically', - 'oneiromancies', - 'oneiromancy', - 'onerousness', - 'onerousnesses', - 'ongoingness', - 'ongoingnesses', - 'onionskins', - 'onomastically', - 'onomastician', - 'onomasticians', - 'onomastics', - 'onomatologies', - 'onomatologist', - 'onomatologists', - 'onomatology', - 'onomatopoeia', - 'onomatopoeias', - 'onomatopoeic', - 'onomatopoeically', - 'onomatopoetic', - 'onomatopoetically', - 'onslaughts', - 'ontogeneses', - 'ontogenesis', - 'ontogenetic', - 'ontogenetically', - 'ontogenies', - 'ontological', - 'ontologically', - 'ontologies', - 'ontologist', - 'ontologists', - 'onychophoran', - 'onychophorans', - 'oophorectomies', - 'oophorectomy', - 'oozinesses', - 'opacifying', - 'opalescence', - 'opalescences', - 'opalescent', - 'opalescently', - 'opalescing', - 'opaqueness', - 'opaquenesses', - 'openabilities', - 'openability', - 'openhanded', - 'openhandedly', - 'openhandedness', - 'openhandednesses', - 'openhearted', - 'openheartedly', - 'openheartedness', - 'openheartednesses', - 'openmouthed', - 'openmouthedly', - 'openmouthedness', - 'openmouthednesses', - 'opennesses', - 'operabilities', - 'operability', - 'operagoers', - 'operagoing', - 'operagoings', - 'operatically', - 'operational', - 'operationalism', - 'operationalisms', - 'operationalist', - 'operationalistic', - 'operationalists', - 'operationally', - 'operationism', - 'operationisms', - 'operationist', - 'operationists', - 'operations', - 'operatively', - 'operativeness', - 'operativenesses', - 'operatives', - 'operatorless', - 'operculars', - 'operculate', - 'operculated', - 'operculums', - 'operettist', - 'operettists', - 'operoseness', - 'operosenesses', - 'ophiuroids', - 'ophthalmia', - 'ophthalmias', - 'ophthalmic', - 'ophthalmologic', - 'ophthalmological', - 'ophthalmologically', - 'ophthalmologies', - 'ophthalmologist', - 'ophthalmologists', - 'ophthalmology', - 'ophthalmoscope', - 'ophthalmoscopes', - 'ophthalmoscopic', - 'ophthalmoscopies', - 'ophthalmoscopy', - 'opinionated', - 'opinionatedly', - 'opinionatedness', - 'opinionatednesses', - 'opinionative', - 'opinionatively', - 'opinionativeness', - 'opinionativenesses', - 'opisthobranch', - 'opisthobranchs', - 'oppilating', - 'opportunely', - 'opportuneness', - 'opportunenesses', - 'opportunism', - 'opportunisms', - 'opportunist', - 'opportunistic', - 'opportunistically', - 'opportunists', - 'opportunities', - 'opportunity', - 'opposabilities', - 'opposability', - 'opposeless', - 'oppositely', - 'oppositeness', - 'oppositenesses', - 'opposition', - 'oppositional', - 'oppositionist', - 'oppositionists', - 'oppositions', - 'oppressing', - 'oppression', - 'oppressions', - 'oppressive', - 'oppressively', - 'oppressiveness', - 'oppressivenesses', - 'oppressors', - 'opprobrious', - 'opprobriously', - 'opprobriousness', - 'opprobriousnesses', - 'opprobrium', - 'opprobriums', - 'opsonified', - 'opsonifies', - 'opsonifying', - 'opsonizing', - 'optatively', - 'optimalities', - 'optimality', - 'optimisation', - 'optimisations', - 'optimising', - 'optimistic', - 'optimistically', - 'optimization', - 'optimizations', - 'optimizers', - 'optimizing', - 'optionalities', - 'optionality', - 'optionally', - 'optoelectronic', - 'optoelectronics', - 'optokinetic', - 'optometric', - 'optometries', - 'optometrist', - 'optometrists', - 'opulencies', - 'oracularities', - 'oracularity', - 'oracularly', - 'orangeades', - 'orangeries', - 'orangewood', - 'orangewoods', - 'orangutans', - 'oratorical', - 'oratorically', - 'oratresses', - 'orbicularly', - 'orbiculate', - 'orchardist', - 'orchardists', - 'orchestral', - 'orchestrally', - 'orchestras', - 'orchestrate', - 'orchestrated', - 'orchestrater', - 'orchestraters', - 'orchestrates', - 'orchestrating', - 'orchestration', - 'orchestrational', - 'orchestrations', - 'orchestrator', - 'orchestrators', - 'orchidaceous', - 'orchidlike', - 'orchitises', - 'ordainment', - 'ordainments', - 'orderliness', - 'orderlinesses', - 'ordinances', - 'ordinarier', - 'ordinaries', - 'ordinariest', - 'ordinarily', - 'ordinariness', - 'ordinarinesses', - 'ordination', - 'ordinations', - 'ordonnance', - 'ordonnances', - 'organelles', - 'organically', - 'organicism', - 'organicisms', - 'organicist', - 'organicists', - 'organicities', - 'organicity', - 'organisation', - 'organisations', - 'organisers', - 'organising', - 'organismal', - 'organismic', - 'organismically', - 'organizable', - 'organization', - 'organizational', - 'organizationally', - 'organizations', - 'organizers', - 'organizing', - 'organochlorine', - 'organochlorines', - 'organogeneses', - 'organogenesis', - 'organogenetic', - 'organoleptic', - 'organoleptically', - 'organologies', - 'organology', - 'organomercurial', - 'organomercurials', - 'organometallic', - 'organometallics', - 'organophosphate', - 'organophosphates', - 'organophosphorous', - 'organophosphorus', - 'organophosphoruses', - 'organzines', - 'orgiastically', - 'orientalism', - 'orientalisms', - 'orientalist', - 'orientalists', - 'orientalize', - 'orientalized', - 'orientalizes', - 'orientalizing', - 'orientally', - 'orientated', - 'orientates', - 'orientating', - 'orientation', - 'orientational', - 'orientationally', - 'orientations', - 'orienteering', - 'orienteerings', - 'orienteers', - 'oriflammes', - 'originalities', - 'originality', - 'originally', - 'originated', - 'originates', - 'originating', - 'origination', - 'originations', - 'originative', - 'originatively', - 'originator', - 'originators', - 'orismological', - 'orismologies', - 'orismology', - 'ornamental', - 'ornamentally', - 'ornamentals', - 'ornamentation', - 'ornamentations', - 'ornamented', - 'ornamenting', - 'ornateness', - 'ornatenesses', - 'orneriness', - 'ornerinesses', - 'ornithines', - 'ornithischian', - 'ornithischians', - 'ornithologic', - 'ornithological', - 'ornithologically', - 'ornithologies', - 'ornithologist', - 'ornithologists', - 'ornithology', - 'ornithopod', - 'ornithopods', - 'ornithopter', - 'ornithopters', - 'ornithoses', - 'ornithosis', - 'orogeneses', - 'orogenesis', - 'orogenetic', - 'orographic', - 'orographical', - 'orographies', - 'oropharyngeal', - 'oropharynges', - 'oropharynx', - 'oropharynxes', - 'orotundities', - 'orotundity', - 'orphanages', - 'orphanhood', - 'orphanhoods', - 'orphically', - 'orrisroots', - 'orthocenter', - 'orthocenters', - 'orthochromatic', - 'orthoclase', - 'orthoclases', - 'orthodontia', - 'orthodontias', - 'orthodontic', - 'orthodontically', - 'orthodontics', - 'orthodontist', - 'orthodontists', - 'orthodoxes', - 'orthodoxies', - 'orthodoxly', - 'orthoepically', - 'orthoepies', - 'orthoepist', - 'orthoepists', - 'orthogeneses', - 'orthogenesis', - 'orthogenetic', - 'orthogenetically', - 'orthogonal', - 'orthogonalities', - 'orthogonality', - 'orthogonalization', - 'orthogonalizations', - 'orthogonalize', - 'orthogonalized', - 'orthogonalizes', - 'orthogonalizing', - 'orthogonally', - 'orthograde', - 'orthographic', - 'orthographical', - 'orthographically', - 'orthographies', - 'orthography', - 'orthomolecular', - 'orthonormal', - 'orthopaedic', - 'orthopaedics', - 'orthopedic', - 'orthopedically', - 'orthopedics', - 'orthopedist', - 'orthopedists', - 'orthophosphate', - 'orthophosphates', - 'orthopsychiatric', - 'orthopsychiatries', - 'orthopsychiatrist', - 'orthopsychiatrists', - 'orthopsychiatry', - 'orthoptera', - 'orthopteran', - 'orthopterans', - 'orthopterist', - 'orthopterists', - 'orthopteroid', - 'orthopteroids', - 'orthorhombic', - 'orthoscopic', - 'orthostatic', - 'orthotists', - 'orthotropous', - 'oscillated', - 'oscillates', - 'oscillating', - 'oscillation', - 'oscillational', - 'oscillations', - 'oscillator', - 'oscillators', - 'oscillatory', - 'oscillogram', - 'oscillograms', - 'oscillograph', - 'oscillographic', - 'oscillographically', - 'oscillographies', - 'oscillographs', - 'oscillography', - 'oscilloscope', - 'oscilloscopes', - 'oscilloscopic', - 'osculating', - 'osculation', - 'osculations', - 'osculatory', - 'osmeterium', - 'osmiridium', - 'osmiridiums', - 'osmolalities', - 'osmolality', - 'osmolarities', - 'osmolarity', - 'osmometers', - 'osmometric', - 'osmometries', - 'osmoregulation', - 'osmoregulations', - 'osmoregulatory', - 'osmotically', - 'ossification', - 'ossifications', - 'ossifrages', - 'osteitides', - 'ostensible', - 'ostensibly', - 'ostensively', - 'ostensoria', - 'ostensorium', - 'ostentation', - 'ostentations', - 'ostentatious', - 'ostentatiously', - 'ostentatiousness', - 'ostentatiousnesses', - 'osteoarthritic', - 'osteoarthritides', - 'osteoarthritis', - 'osteoblast', - 'osteoblastic', - 'osteoblasts', - 'osteoclast', - 'osteoclastic', - 'osteoclasts', - 'osteocytes', - 'osteogeneses', - 'osteogenesis', - 'osteogenic', - 'osteological', - 'osteologies', - 'osteologist', - 'osteologists', - 'osteomalacia', - 'osteomalacias', - 'osteomyelitides', - 'osteomyelitis', - 'osteopathic', - 'osteopathically', - 'osteopathies', - 'osteopaths', - 'osteopathy', - 'osteoplastic', - 'osteoplasties', - 'osteoplasty', - 'osteoporoses', - 'osteoporosis', - 'osteoporotic', - 'osteosarcoma', - 'osteosarcomas', - 'osteosarcomata', - 'osteosises', - 'ostracised', - 'ostracises', - 'ostracising', - 'ostracisms', - 'ostracized', - 'ostracizes', - 'ostracizing', - 'ostracoderm', - 'ostracoderms', - 'ostracodes', - 'ostrichlike', - 'otherguess', - 'othernesses', - 'otherwhere', - 'otherwhile', - 'otherwhiles', - 'otherworld', - 'otherworldliness', - 'otherworldlinesses', - 'otherworldly', - 'otherworlds', - 'otioseness', - 'otiosenesses', - 'otiosities', - 'otolaryngological', - 'otolaryngologies', - 'otolaryngologist', - 'otolaryngologists', - 'otolaryngology', - 'otorhinolaryngological', - 'otorhinolaryngologies', - 'otorhinolaryngologist', - 'otorhinolaryngologists', - 'otorhinolaryngology', - 'otoscleroses', - 'otosclerosis', - 'otoscopies', - 'ototoxicities', - 'ototoxicity', - 'oubliettes', - 'outachieve', - 'outachieved', - 'outachieves', - 'outachieving', - 'outarguing', - 'outbalance', - 'outbalanced', - 'outbalances', - 'outbalancing', - 'outbargain', - 'outbargained', - 'outbargaining', - 'outbargains', - 'outbarking', - 'outbawling', - 'outbeaming', - 'outbegging', - 'outbidding', - 'outbitched', - 'outbitches', - 'outbitching', - 'outblazing', - 'outbleated', - 'outbleating', - 'outblessed', - 'outblesses', - 'outblessing', - 'outbloomed', - 'outblooming', - 'outbluffed', - 'outbluffing', - 'outblushed', - 'outblushes', - 'outblushing', - 'outboasted', - 'outboasting', - 'outbragged', - 'outbragging', - 'outbraving', - 'outbrawled', - 'outbrawling', - 'outbreeding', - 'outbreedings', - 'outbribing', - 'outbuilding', - 'outbuildings', - 'outbulking', - 'outbullied', - 'outbullies', - 'outbullying', - 'outburning', - 'outcapered', - 'outcapering', - 'outcatches', - 'outcatching', - 'outcaviled', - 'outcaviling', - 'outcavilled', - 'outcavilling', - 'outcharged', - 'outcharges', - 'outcharging', - 'outcharmed', - 'outcharming', - 'outcheated', - 'outcheating', - 'outchidden', - 'outchiding', - 'outclassed', - 'outclasses', - 'outclassing', - 'outclimbed', - 'outclimbing', - 'outcoached', - 'outcoaches', - 'outcoaching', - 'outcompete', - 'outcompeted', - 'outcompetes', - 'outcompeting', - 'outcooking', - 'outcounted', - 'outcounting', - 'outcrawled', - 'outcrawling', - 'outcropped', - 'outcropping', - 'outcroppings', - 'outcrossed', - 'outcrosses', - 'outcrossing', - 'outcrowing', - 'outcursing', - 'outdancing', - 'outdatedly', - 'outdatedness', - 'outdatednesses', - 'outdazzled', - 'outdazzles', - 'outdazzling', - 'outdebated', - 'outdebates', - 'outdebating', - 'outdeliver', - 'outdelivered', - 'outdelivering', - 'outdelivers', - 'outdesigned', - 'outdesigning', - 'outdesigns', - 'outdistance', - 'outdistanced', - 'outdistances', - 'outdistancing', - 'outdodging', - 'outdoorsman', - 'outdoorsmanship', - 'outdoorsmanships', - 'outdoorsmen', - 'outdragged', - 'outdragging', - 'outdrawing', - 'outdreamed', - 'outdreaming', - 'outdressed', - 'outdresses', - 'outdressing', - 'outdrinking', - 'outdriving', - 'outdropped', - 'outdropping', - 'outdueling', - 'outduelled', - 'outduelling', - 'outearning', - 'outechoing', - 'outercoats', - 'outfabling', - 'outfasting', - 'outfawning', - 'outfeasted', - 'outfeasting', - 'outfeeling', - 'outfielder', - 'outfielders', - 'outfighting', - 'outfigured', - 'outfigures', - 'outfiguring', - 'outfinding', - 'outfishing', - 'outfitters', - 'outfitting', - 'outflanked', - 'outflanking', - 'outflowing', - 'outfooling', - 'outfooting', - 'outfrowned', - 'outfrowning', - 'outfumbled', - 'outfumbles', - 'outfumbling', - 'outgaining', - 'outgassing', - 'outgeneral', - 'outgeneraled', - 'outgeneraling', - 'outgenerals', - 'outgivings', - 'outglaring', - 'outglitter', - 'outglittered', - 'outglittering', - 'outglitters', - 'outglowing', - 'outgnawing', - 'outgoingness', - 'outgoingnesses', - 'outgrinned', - 'outgrinning', - 'outgrossed', - 'outgrosses', - 'outgrossing', - 'outgrowing', - 'outgrowths', - 'outguessed', - 'outguesses', - 'outguessing', - 'outguiding', - 'outgunning', - 'outhearing', - 'outhitting', - 'outhomered', - 'outhomering', - 'outhowling', - 'outhumored', - 'outhumoring', - 'outhunting', - 'outhustled', - 'outhustles', - 'outhustling', - 'outintrigue', - 'outintrigued', - 'outintrigues', - 'outintriguing', - 'outjinxing', - 'outjumping', - 'outjutting', - 'outkeeping', - 'outkicking', - 'outkilling', - 'outkissing', - 'outlanders', - 'outlandish', - 'outlandishly', - 'outlandishness', - 'outlandishnesses', - 'outlasting', - 'outlaughed', - 'outlaughing', - 'outlawries', - 'outleaping', - 'outlearned', - 'outlearning', - 'outmaneuver', - 'outmaneuvered', - 'outmaneuvering', - 'outmaneuvers', - 'outmanipulate', - 'outmanipulated', - 'outmanipulates', - 'outmanipulating', - 'outmanning', - 'outmarched', - 'outmarches', - 'outmarching', - 'outmatched', - 'outmatches', - 'outmatching', - 'outmuscled', - 'outmuscles', - 'outmuscling', - 'outnumbered', - 'outnumbering', - 'outnumbers', - 'outorganize', - 'outorganized', - 'outorganizes', - 'outorganizing', - 'outpainted', - 'outpainting', - 'outpassing', - 'outpatient', - 'outpatients', - 'outperform', - 'outperformed', - 'outperforming', - 'outperforms', - 'outpitched', - 'outpitches', - 'outpitching', - 'outpitying', - 'outplacement', - 'outplacements', - 'outplanned', - 'outplanning', - 'outplaying', - 'outplodded', - 'outplodding', - 'outplotted', - 'outplotting', - 'outpointed', - 'outpointing', - 'outpolitick', - 'outpoliticked', - 'outpoliticking', - 'outpoliticks', - 'outpolling', - 'outpopulate', - 'outpopulated', - 'outpopulates', - 'outpopulating', - 'outpouring', - 'outpourings', - 'outpowered', - 'outpowering', - 'outpraying', - 'outpreached', - 'outpreaches', - 'outpreaching', - 'outpreened', - 'outpreening', - 'outpressed', - 'outpresses', - 'outpressing', - 'outpricing', - 'outproduce', - 'outproduced', - 'outproduces', - 'outproducing', - 'outpromise', - 'outpromised', - 'outpromises', - 'outpromising', - 'outpulling', - 'outpunched', - 'outpunches', - 'outpunching', - 'outpushing', - 'outputting', - 'outquoting', - 'outrageous', - 'outrageously', - 'outrageousness', - 'outrageousnesses', - 'outraising', - 'outranging', - 'outranking', - 'outreached', - 'outreaches', - 'outreaching', - 'outreading', - 'outrebound', - 'outrebounded', - 'outrebounding', - 'outrebounds', - 'outreproduce', - 'outreproduced', - 'outreproduces', - 'outreproducing', - 'outriggers', - 'outrightly', - 'outringing', - 'outrivaled', - 'outrivaling', - 'outrivalled', - 'outrivalling', - 'outroaring', - 'outrocking', - 'outrolling', - 'outrooting', - 'outrunning', - 'outrushing', - 'outsailing', - 'outsavored', - 'outsavoring', - 'outschemed', - 'outschemes', - 'outscheming', - 'outscolded', - 'outscolding', - 'outscooped', - 'outscooping', - 'outscoring', - 'outscorned', - 'outscorning', - 'outselling', - 'outserving', - 'outshaming', - 'outshining', - 'outshooting', - 'outshouted', - 'outshouting', - 'outsiderness', - 'outsidernesses', - 'outsinging', - 'outsinning', - 'outsitting', - 'outskating', - 'outsleeping', - 'outslicked', - 'outslicking', - 'outsmarted', - 'outsmarting', - 'outsmiling', - 'outsmoking', - 'outsnoring', - 'outsoaring', - 'outsourcing', - 'outsourcings', - 'outspanned', - 'outspanning', - 'outsparkle', - 'outsparkled', - 'outsparkles', - 'outsparkling', - 'outspeaking', - 'outspeeded', - 'outspeeding', - 'outspelled', - 'outspelling', - 'outspending', - 'outspokenly', - 'outspokenness', - 'outspokennesses', - 'outspreading', - 'outspreads', - 'outsprinted', - 'outsprinting', - 'outsprints', - 'outstanding', - 'outstandingly', - 'outstaring', - 'outstarted', - 'outstarting', - 'outstating', - 'outstation', - 'outstations', - 'outstaying', - 'outsteered', - 'outsteering', - 'outstretch', - 'outstretched', - 'outstretches', - 'outstretching', - 'outstridden', - 'outstrides', - 'outstriding', - 'outstripped', - 'outstripping', - 'outstudied', - 'outstudies', - 'outstudying', - 'outstunted', - 'outstunting', - 'outsulking', - 'outswearing', - 'outswimming', - 'outtalking', - 'outtasking', - 'outtelling', - 'outthanked', - 'outthanking', - 'outthinking', - 'outthought', - 'outthrobbed', - 'outthrobbing', - 'outthrowing', - 'outthrusting', - 'outthrusts', - 'outtowered', - 'outtowering', - 'outtrading', - 'outtricked', - 'outtricking', - 'outtrotted', - 'outtrotting', - 'outtrumped', - 'outtrumping', - 'outvaluing', - 'outvaunted', - 'outvaunting', - 'outvoicing', - 'outwaiting', - 'outwalking', - 'outwardness', - 'outwardnesses', - 'outwarring', - 'outwasting', - 'outwatched', - 'outwatches', - 'outwatching', - 'outwearied', - 'outwearies', - 'outwearing', - 'outwearying', - 'outweeping', - 'outweighed', - 'outweighing', - 'outwhirled', - 'outwhirling', - 'outwilling', - 'outwinding', - 'outwishing', - 'outwitting', - 'outworkers', - 'outworking', - 'outwrestle', - 'outwrestled', - 'outwrestles', - 'outwrestling', - 'outwriting', - 'outwritten', - 'outwrought', - 'outyelling', - 'outyelping', - 'outyielded', - 'outyielding', - 'ovalbumins', - 'ovalnesses', - 'ovariectomies', - 'ovariectomized', - 'ovariectomy', - 'ovariotomies', - 'ovariotomy', - 'ovaritides', - 'overabstract', - 'overabstracted', - 'overabstracting', - 'overabstracts', - 'overabundance', - 'overabundances', - 'overabundant', - 'overaccentuate', - 'overaccentuated', - 'overaccentuates', - 'overaccentuating', - 'overachieve', - 'overachieved', - 'overachievement', - 'overachievements', - 'overachiever', - 'overachievers', - 'overachieves', - 'overachieving', - 'overacting', - 'overaction', - 'overactions', - 'overactive', - 'overactivities', - 'overactivity', - 'overadjustment', - 'overadjustments', - 'overadvertise', - 'overadvertised', - 'overadvertises', - 'overadvertising', - 'overaggressive', - 'overambitious', - 'overambitiousness', - 'overambitiousnesses', - 'overamplified', - 'overanalyses', - 'overanalysis', - 'overanalytical', - 'overanalyze', - 'overanalyzed', - 'overanalyzes', - 'overanalyzing', - 'overanxieties', - 'overanxiety', - 'overanxious', - 'overapplication', - 'overapplications', - 'overarched', - 'overarches', - 'overarching', - 'overarousal', - 'overarousals', - 'overarrange', - 'overarranged', - 'overarranges', - 'overarranging', - 'overarticulate', - 'overarticulated', - 'overarticulates', - 'overarticulating', - 'overassert', - 'overasserted', - 'overasserting', - 'overassertion', - 'overassertions', - 'overassertive', - 'overasserts', - 'overassessment', - 'overassessments', - 'overattention', - 'overattentions', - 'overbaking', - 'overbalance', - 'overbalanced', - 'overbalances', - 'overbalancing', - 'overbearing', - 'overbearingly', - 'overbeaten', - 'overbeating', - 'overbejeweled', - 'overbetted', - 'overbetting', - 'overbidden', - 'overbidding', - 'overbilled', - 'overbilling', - 'overbleach', - 'overbleached', - 'overbleaches', - 'overbleaching', - 'overblouse', - 'overblouses', - 'overblowing', - 'overboiled', - 'overboiling', - 'overbooked', - 'overbooking', - 'overborrow', - 'overborrowed', - 'overborrowing', - 'overborrows', - 'overbought', - 'overbreathing', - 'overbright', - 'overbrowse', - 'overbrowsed', - 'overbrowses', - 'overbrowsing', - 'overbrutal', - 'overbuilding', - 'overbuilds', - 'overburden', - 'overburdened', - 'overburdening', - 'overburdens', - 'overburned', - 'overburning', - 'overbuying', - 'overcalled', - 'overcalling', - 'overcapacities', - 'overcapacity', - 'overcapitalization', - 'overcapitalizations', - 'overcapitalize', - 'overcapitalized', - 'overcapitalizes', - 'overcapitalizing', - 'overcareful', - 'overcasted', - 'overcasting', - 'overcastings', - 'overcaution', - 'overcautioned', - 'overcautioning', - 'overcautions', - 'overcautious', - 'overcentralization', - 'overcentralizations', - 'overcentralize', - 'overcentralized', - 'overcentralizes', - 'overcentralizing', - 'overcharge', - 'overcharged', - 'overcharges', - 'overcharging', - 'overchilled', - 'overchilling', - 'overchills', - 'overcivilized', - 'overclaimed', - 'overclaiming', - 'overclaims', - 'overclassification', - 'overclassifications', - 'overclassified', - 'overclassifies', - 'overclassify', - 'overclassifying', - 'overcleaned', - 'overcleaning', - 'overcleans', - 'overcleared', - 'overclearing', - 'overclears', - 'overclouded', - 'overclouding', - 'overclouds', - 'overcoached', - 'overcoaches', - 'overcoaching', - 'overcomers', - 'overcoming', - 'overcommercialization', - 'overcommercializations', - 'overcommercialize', - 'overcommercialized', - 'overcommercializes', - 'overcommercializing', - 'overcommit', - 'overcommitment', - 'overcommitments', - 'overcommits', - 'overcommitted', - 'overcommitting', - 'overcommunicate', - 'overcommunicated', - 'overcommunicates', - 'overcommunicating', - 'overcommunication', - 'overcommunications', - 'overcompensate', - 'overcompensated', - 'overcompensates', - 'overcompensating', - 'overcompensation', - 'overcompensations', - 'overcompensatory', - 'overcomplex', - 'overcompliance', - 'overcompliances', - 'overcomplicate', - 'overcomplicated', - 'overcomplicates', - 'overcomplicating', - 'overcompress', - 'overcompressed', - 'overcompresses', - 'overcompressing', - 'overconcentration', - 'overconcentrations', - 'overconcern', - 'overconcerned', - 'overconcerning', - 'overconcerns', - 'overconfidence', - 'overconfidences', - 'overconfident', - 'overconfidently', - 'overconscientious', - 'overconscious', - 'overconservative', - 'overconstruct', - 'overconstructed', - 'overconstructing', - 'overconstructs', - 'overconsume', - 'overconsumed', - 'overconsumes', - 'overconsuming', - 'overconsumption', - 'overconsumptions', - 'overcontrol', - 'overcontrolled', - 'overcontrolling', - 'overcontrols', - 'overcooked', - 'overcooking', - 'overcooled', - 'overcooling', - 'overcorrect', - 'overcorrected', - 'overcorrecting', - 'overcorrection', - 'overcorrections', - 'overcorrects', - 'overcounted', - 'overcounting', - 'overcounts', - 'overcrammed', - 'overcramming', - 'overcredulous', - 'overcritical', - 'overcropped', - 'overcropping', - 'overcrowded', - 'overcrowding', - 'overcrowds', - 'overcultivation', - 'overcultivations', - 'overcuring', - 'overcutting', - 'overdaring', - 'overdecked', - 'overdecking', - 'overdecorate', - 'overdecorated', - 'overdecorates', - 'overdecorating', - 'overdecoration', - 'overdecorations', - 'overdemanding', - 'overdependence', - 'overdependences', - 'overdependent', - 'overdesign', - 'overdesigned', - 'overdesigning', - 'overdesigns', - 'overdetermined', - 'overdevelop', - 'overdeveloped', - 'overdeveloping', - 'overdevelopment', - 'overdevelopments', - 'overdevelops', - 'overdifferentiation', - 'overdifferentiations', - 'overdirect', - 'overdirected', - 'overdirecting', - 'overdirects', - 'overdiscount', - 'overdiscounted', - 'overdiscounting', - 'overdiscounts', - 'overdiversities', - 'overdiversity', - 'overdocument', - 'overdocumented', - 'overdocumenting', - 'overdocuments', - 'overdominance', - 'overdominances', - 'overdominant', - 'overdosage', - 'overdosages', - 'overdosing', - 'overdrafts', - 'overdramatic', - 'overdramatize', - 'overdramatized', - 'overdramatizes', - 'overdramatizing', - 'overdrawing', - 'overdressed', - 'overdresses', - 'overdressing', - 'overdrinking', - 'overdrinks', - 'overdriven', - 'overdrives', - 'overdriving', - 'overdrying', - 'overdubbed', - 'overdubbing', - 'overdyeing', - 'overeagerness', - 'overeagernesses', - 'overearnest', - 'overeaters', - 'overeating', - 'overedited', - 'overediting', - 'overeducate', - 'overeducated', - 'overeducates', - 'overeducating', - 'overeducation', - 'overeducations', - 'overelaborate', - 'overelaborated', - 'overelaborates', - 'overelaborating', - 'overelaboration', - 'overelaborations', - 'overembellish', - 'overembellished', - 'overembellishes', - 'overembellishing', - 'overembellishment', - 'overembellishments', - 'overemoted', - 'overemotes', - 'overemoting', - 'overemotional', - 'overemphases', - 'overemphasis', - 'overemphasize', - 'overemphasized', - 'overemphasizes', - 'overemphasizing', - 'overemphatic', - 'overenamored', - 'overencourage', - 'overencouraged', - 'overencourages', - 'overencouraging', - 'overenergetic', - 'overengineer', - 'overengineered', - 'overengineering', - 'overengineers', - 'overenrolled', - 'overentertained', - 'overenthusiasm', - 'overenthusiasms', - 'overenthusiastic', - 'overenthusiastically', - 'overequipped', - 'overestimate', - 'overestimated', - 'overestimates', - 'overestimating', - 'overestimation', - 'overestimations', - 'overevaluation', - 'overevaluations', - 'overexaggerate', - 'overexaggerated', - 'overexaggerates', - 'overexaggerating', - 'overexaggeration', - 'overexaggerations', - 'overexcite', - 'overexcited', - 'overexcites', - 'overexciting', - 'overexercise', - 'overexercised', - 'overexercises', - 'overexercising', - 'overexerted', - 'overexerting', - 'overexertion', - 'overexertions', - 'overexerts', - 'overexpand', - 'overexpanded', - 'overexpanding', - 'overexpands', - 'overexpansion', - 'overexpansions', - 'overexpectation', - 'overexpectations', - 'overexplain', - 'overexplained', - 'overexplaining', - 'overexplains', - 'overexplicit', - 'overexploit', - 'overexploitation', - 'overexploitations', - 'overexploited', - 'overexploiting', - 'overexploits', - 'overexpose', - 'overexposed', - 'overexposes', - 'overexposing', - 'overexposure', - 'overexposures', - 'overextend', - 'overextended', - 'overextending', - 'overextends', - 'overextension', - 'overextensions', - 'overextraction', - 'overextractions', - 'overextrapolation', - 'overextrapolations', - 'overextravagant', - 'overexuberant', - 'overfacile', - 'overfamiliar', - 'overfamiliarities', - 'overfamiliarity', - 'overfastidious', - 'overfatigue', - 'overfatigued', - 'overfatigues', - 'overfavored', - 'overfavoring', - 'overfavors', - 'overfeared', - 'overfearing', - 'overfeeding', - 'overfertilization', - 'overfertilizations', - 'overfertilize', - 'overfertilized', - 'overfertilizes', - 'overfertilizing', - 'overfilled', - 'overfilling', - 'overfished', - 'overfishes', - 'overfishing', - 'overflight', - 'overflights', - 'overflowed', - 'overflowing', - 'overflying', - 'overfocused', - 'overfocuses', - 'overfocusing', - 'overfocussed', - 'overfocusses', - 'overfocussing', - 'overfulfill', - 'overfulfilled', - 'overfulfilling', - 'overfulfills', - 'overfunded', - 'overfunding', - 'overgarment', - 'overgarments', - 'overgeneralization', - 'overgeneralizations', - 'overgeneralize', - 'overgeneralized', - 'overgeneralizes', - 'overgeneralizing', - 'overgenerosities', - 'overgenerosity', - 'overgenerous', - 'overgenerously', - 'overgilded', - 'overgilding', - 'overgirded', - 'overgirding', - 'overglamorize', - 'overglamorized', - 'overglamorizes', - 'overglamorizing', - 'overglazes', - 'overgoaded', - 'overgoading', - 'overgovern', - 'overgoverned', - 'overgoverning', - 'overgoverns', - 'overgrazed', - 'overgrazes', - 'overgrazing', - 'overgrowing', - 'overgrowth', - 'overgrowths', - 'overhanded', - 'overhanding', - 'overhandle', - 'overhandled', - 'overhandles', - 'overhandling', - 'overhanging', - 'overharvest', - 'overharvested', - 'overharvesting', - 'overharvests', - 'overhating', - 'overhauled', - 'overhauling', - 'overheaped', - 'overheaping', - 'overhearing', - 'overheated', - 'overheating', - 'overholding', - 'overhomogenize', - 'overhomogenized', - 'overhomogenizes', - 'overhomogenizing', - 'overhoping', - 'overhunted', - 'overhunting', - 'overhuntings', - 'overhyping', - 'overidealize', - 'overidealized', - 'overidealizes', - 'overidealizing', - 'overidentification', - 'overidentifications', - 'overidentified', - 'overidentifies', - 'overidentify', - 'overidentifying', - 'overimaginative', - 'overimpress', - 'overimpressed', - 'overimpresses', - 'overimpressing', - 'overindebtedness', - 'overindebtednesses', - 'overindulge', - 'overindulged', - 'overindulgence', - 'overindulgences', - 'overindulgent', - 'overindulges', - 'overindulging', - 'overindustrialize', - 'overindustrialized', - 'overindustrializes', - 'overindustrializing', - 'overinflate', - 'overinflated', - 'overinflates', - 'overinflating', - 'overinflation', - 'overinflations', - 'overinform', - 'overinformed', - 'overinforming', - 'overinforms', - 'overingenious', - 'overingenuities', - 'overingenuity', - 'overinsistent', - 'overinsure', - 'overinsured', - 'overinsures', - 'overinsuring', - 'overintellectualization', - 'overintellectualizations', - 'overintellectualize', - 'overintellectualized', - 'overintellectualizes', - 'overintellectualizing', - 'overintense', - 'overintensities', - 'overintensity', - 'overinterpretation', - 'overinterpretations', - 'overinvestment', - 'overinvestments', - 'overissuance', - 'overissuances', - 'overissued', - 'overissues', - 'overissuing', - 'overjoying', - 'overkilled', - 'overkilling', - 'overlabored', - 'overlaboring', - 'overlabors', - 'overlading', - 'overlapped', - 'overlapping', - 'overlavish', - 'overlaying', - 'overleaped', - 'overleaping', - 'overlearned', - 'overlearning', - 'overlearns', - 'overlending', - 'overlength', - 'overlengthen', - 'overlengthened', - 'overlengthening', - 'overlengthens', - 'overletting', - 'overlighted', - 'overlighting', - 'overlights', - 'overliteral', - 'overliterary', - 'overliving', - 'overloaded', - 'overloading', - 'overlooked', - 'overlooking', - 'overlorded', - 'overlording', - 'overlordship', - 'overlordships', - 'overloving', - 'overmanage', - 'overmanaged', - 'overmanages', - 'overmanaging', - 'overmanned', - 'overmannered', - 'overmanning', - 'overmantel', - 'overmantels', - 'overmaster', - 'overmastered', - 'overmastering', - 'overmasters', - 'overmatched', - 'overmatches', - 'overmatching', - 'overmature', - 'overmaturities', - 'overmaturity', - 'overmedicate', - 'overmedicated', - 'overmedicates', - 'overmedicating', - 'overmedication', - 'overmedications', - 'overmelted', - 'overmelting', - 'overmighty', - 'overmilked', - 'overmilking', - 'overmining', - 'overmixing', - 'overmodest', - 'overmodestly', - 'overmodulated', - 'overmuches', - 'overmuscled', - 'overnighted', - 'overnighter', - 'overnighters', - 'overnighting', - 'overnights', - 'overnourish', - 'overnourished', - 'overnourishes', - 'overnourishing', - 'overnutrition', - 'overnutritions', - 'overobvious', - 'overoperate', - 'overoperated', - 'overoperates', - 'overoperating', - 'overopinionated', - 'overoptimism', - 'overoptimisms', - 'overoptimist', - 'overoptimistic', - 'overoptimistically', - 'overoptimists', - 'overorchestrate', - 'overorchestrated', - 'overorchestrates', - 'overorchestrating', - 'overorganize', - 'overorganized', - 'overorganizes', - 'overorganizing', - 'overornament', - 'overornamented', - 'overornamenting', - 'overornaments', - 'overpackage', - 'overpackaged', - 'overpackages', - 'overpackaging', - 'overparticular', - 'overpassed', - 'overpasses', - 'overpassing', - 'overpaying', - 'overpayment', - 'overpayments', - 'overpedaled', - 'overpedaling', - 'overpedalled', - 'overpedalling', - 'overpedals', - 'overpeople', - 'overpeopled', - 'overpeoples', - 'overpeopling', - 'overpersuade', - 'overpersuaded', - 'overpersuades', - 'overpersuading', - 'overpersuasion', - 'overpersuasions', - 'overplaided', - 'overplaids', - 'overplanned', - 'overplanning', - 'overplanted', - 'overplanting', - 'overplants', - 'overplayed', - 'overplaying', - 'overplotted', - 'overplotting', - 'overpluses', - 'overplying', - 'overpopulate', - 'overpopulated', - 'overpopulates', - 'overpopulating', - 'overpopulation', - 'overpopulations', - 'overpotent', - 'overpowered', - 'overpowering', - 'overpoweringly', - 'overpowers', - 'overpraise', - 'overpraised', - 'overpraises', - 'overpraising', - 'overprecise', - 'overprescribe', - 'overprescribed', - 'overprescribes', - 'overprescribing', - 'overprescription', - 'overprescriptions', - 'overpressure', - 'overpressures', - 'overpriced', - 'overprices', - 'overpricing', - 'overprinted', - 'overprinting', - 'overprints', - 'overprivileged', - 'overprized', - 'overprizes', - 'overprizing', - 'overprocess', - 'overprocessed', - 'overprocesses', - 'overprocessing', - 'overproduce', - 'overproduced', - 'overproduces', - 'overproducing', - 'overproduction', - 'overproductions', - 'overprogram', - 'overprogramed', - 'overprograming', - 'overprogrammed', - 'overprogramming', - 'overprograms', - 'overpromise', - 'overpromised', - 'overpromises', - 'overpromising', - 'overpromote', - 'overpromoted', - 'overpromotes', - 'overpromoting', - 'overproportion', - 'overproportionate', - 'overproportionately', - 'overproportioned', - 'overproportioning', - 'overproportions', - 'overprotect', - 'overprotected', - 'overprotecting', - 'overprotection', - 'overprotections', - 'overprotective', - 'overprotectiveness', - 'overprotectivenesses', - 'overprotects', - 'overpumped', - 'overpumping', - 'overqualified', - 'overrating', - 'overreached', - 'overreacher', - 'overreachers', - 'overreaches', - 'overreaching', - 'overreacted', - 'overreacting', - 'overreaction', - 'overreactions', - 'overreacts', - 'overrefined', - 'overrefinement', - 'overrefinements', - 'overregulate', - 'overregulated', - 'overregulates', - 'overregulating', - 'overregulation', - 'overregulations', - 'overreliance', - 'overreliances', - 'overreport', - 'overreported', - 'overreporting', - 'overreports', - 'overrepresentation', - 'overrepresentations', - 'overrepresented', - 'overrespond', - 'overresponded', - 'overresponding', - 'overresponds', - 'overridden', - 'overriding', - 'overruffed', - 'overruffing', - 'overruling', - 'overrunning', - 'oversalted', - 'oversalting', - 'oversanguine', - 'oversaturate', - 'oversaturated', - 'oversaturates', - 'oversaturating', - 'oversaturation', - 'oversaturations', - 'oversauced', - 'oversauces', - 'oversaucing', - 'oversaving', - 'overscaled', - 'overscrupulous', - 'oversecretion', - 'oversecretions', - 'overseeded', - 'overseeding', - 'overseeing', - 'overselling', - 'oversensitive', - 'oversensitiveness', - 'oversensitivenesses', - 'oversensitivities', - 'oversensitivity', - 'overserious', - 'overseriously', - 'overservice', - 'overserviced', - 'overservices', - 'overservicing', - 'oversetting', - 'oversewing', - 'overshadow', - 'overshadowed', - 'overshadowing', - 'overshadows', - 'overshirts', - 'overshooting', - 'overshoots', - 'oversights', - 'oversimple', - 'oversimplification', - 'oversimplifications', - 'oversimplified', - 'oversimplifies', - 'oversimplify', - 'oversimplifying', - 'oversimplistic', - 'oversimply', - 'overskirts', - 'overslaugh', - 'overslaughed', - 'overslaughing', - 'overslaughs', - 'oversleeping', - 'oversleeps', - 'overslipped', - 'overslipping', - 'oversmoked', - 'oversmokes', - 'oversmoking', - 'oversoaked', - 'oversoaking', - 'oversolicitous', - 'oversophisticated', - 'overspecialization', - 'overspecializations', - 'overspecialize', - 'overspecialized', - 'overspecializes', - 'overspecializing', - 'overspeculate', - 'overspeculated', - 'overspeculates', - 'overspeculating', - 'overspeculation', - 'overspeculations', - 'overspender', - 'overspenders', - 'overspending', - 'overspends', - 'overspills', - 'overspread', - 'overspreading', - 'overspreads', - 'overstabilities', - 'overstability', - 'overstaffed', - 'overstaffing', - 'overstaffs', - 'overstated', - 'overstatement', - 'overstatements', - 'overstates', - 'overstating', - 'overstayed', - 'overstaying', - 'oversteers', - 'overstepped', - 'overstepping', - 'overstimulate', - 'overstimulated', - 'overstimulates', - 'overstimulating', - 'overstimulation', - 'overstimulations', - 'overstirred', - 'overstirring', - 'overstocked', - 'overstocking', - 'overstocks', - 'overstories', - 'overstrain', - 'overstrained', - 'overstraining', - 'overstrains', - 'overstress', - 'overstressed', - 'overstresses', - 'overstressing', - 'overstretch', - 'overstretched', - 'overstretches', - 'overstretching', - 'overstrewed', - 'overstrewing', - 'overstrewn', - 'overstrews', - 'overstridden', - 'overstride', - 'overstrides', - 'overstriding', - 'overstrike', - 'overstrikes', - 'overstriking', - 'overstrode', - 'overstruck', - 'overstructured', - 'overstrung', - 'overstuffed', - 'overstuffing', - 'overstuffs', - 'oversubscribe', - 'oversubscribed', - 'oversubscribes', - 'oversubscribing', - 'oversubscription', - 'oversubscriptions', - 'oversubtle', - 'oversudsed', - 'oversudses', - 'oversudsing', - 'oversupped', - 'oversupping', - 'oversupplied', - 'oversupplies', - 'oversupply', - 'oversupplying', - 'oversuspicious', - 'oversweeten', - 'oversweetened', - 'oversweetening', - 'oversweetens', - 'oversweetness', - 'oversweetnesses', - 'overswinging', - 'overswings', - 'overtaking', - 'overtalkative', - 'overtalked', - 'overtalking', - 'overtasked', - 'overtasking', - 'overtaxation', - 'overtaxations', - 'overtaxing', - 'overthinking', - 'overthinks', - 'overthought', - 'overthrowing', - 'overthrown', - 'overthrows', - 'overtighten', - 'overtightened', - 'overtightening', - 'overtightens', - 'overtiming', - 'overtipped', - 'overtipping', - 'overtiring', - 'overtnesses', - 'overtoiled', - 'overtoiling', - 'overtopped', - 'overtopping', - 'overtraded', - 'overtrades', - 'overtrading', - 'overtrained', - 'overtraining', - 'overtrains', - 'overtreated', - 'overtreating', - 'overtreatment', - 'overtreatments', - 'overtreats', - 'overtricks', - 'overtrimmed', - 'overtrimming', - 'overtrumped', - 'overtrumping', - 'overtrumps', - 'overturing', - 'overturned', - 'overturning', - 'overurging', - 'overutilization', - 'overutilizations', - 'overutilize', - 'overutilized', - 'overutilizes', - 'overutilizing', - 'overvaluation', - 'overvaluations', - 'overvalued', - 'overvalues', - 'overvaluing', - 'overviolent', - 'overvoltage', - 'overvoltages', - 'overvoting', - 'overwarmed', - 'overwarming', - 'overwatered', - 'overwatering', - 'overwaters', - 'overwearing', - 'overweened', - 'overweening', - 'overweeningly', - 'overweighed', - 'overweighing', - 'overweighs', - 'overweight', - 'overweighted', - 'overweighting', - 'overweights', - 'overwetted', - 'overwetting', - 'overwhelmed', - 'overwhelming', - 'overwhelmingly', - 'overwhelms', - 'overwinding', - 'overwinter', - 'overwintered', - 'overwintering', - 'overwinters', - 'overwithheld', - 'overwithhold', - 'overwithholding', - 'overwithholds', - 'overworked', - 'overworking', - 'overwrites', - 'overwriting', - 'overwritten', - 'overwrought', - 'overzealous', - 'overzealously', - 'overzealousness', - 'overzealousnesses', - 'oviposited', - 'ovipositing', - 'oviposition', - 'ovipositional', - 'ovipositions', - 'ovipositor', - 'ovipositors', - 'ovolactovegetarian', - 'ovolactovegetarians', - 'ovoviviparous', - 'ovoviviparously', - 'ovoviviparousness', - 'ovoviviparousnesses', - 'ovulations', - 'owlishness', - 'owlishnesses', - 'ownerships', - 'oxacillins', - 'oxalacetate', - 'oxalacetates', - 'oxaloacetate', - 'oxaloacetates', - 'oxidations', - 'oxidatively', - 'oxidizable', - 'oxidoreductase', - 'oxidoreductases', - 'oxyacetylene', - 'oxygenated', - 'oxygenates', - 'oxygenating', - 'oxygenation', - 'oxygenations', - 'oxygenator', - 'oxygenators', - 'oxygenless', - 'oxyhemoglobin', - 'oxyhemoglobins', - 'oxyhydrogen', - 'oxymoronic', - 'oxymoronically', - 'oxyphenbutazone', - 'oxyphenbutazones', - 'oxytetracycline', - 'oxytetracyclines', - 'oxyuriases', - 'oxyuriasis', - 'oystercatcher', - 'oystercatchers', - 'oysterings', - 'ozocerites', - 'ozokerites', - 'ozonations', - 'ozonization', - 'ozonizations', - 'ozonosphere', - 'ozonospheres', - 'pacemakers', - 'pacemaking', - 'pacemakings', - 'pacesetter', - 'pacesetters', - 'pacesetting', - 'pachydermatous', - 'pachyderms', - 'pachysandra', - 'pachysandras', - 'pachytenes', - 'pacifiable', - 'pacifically', - 'pacification', - 'pacifications', - 'pacificator', - 'pacificators', - 'pacificism', - 'pacificisms', - 'pacificist', - 'pacificists', - 'pacifistic', - 'pacifistically', - 'packabilities', - 'packability', - 'packboards', - 'packhorses', - 'packinghouse', - 'packinghouses', - 'packnesses', - 'packsaddle', - 'packsaddles', - 'packthread', - 'packthreads', - 'paddleball', - 'paddleballs', - 'paddleboard', - 'paddleboards', - 'paddleboat', - 'paddleboats', - 'paddlefish', - 'paddlefishes', - 'paddocking', - 'padlocking', - 'paediatric', - 'paediatrician', - 'paediatricians', - 'paediatrics', - 'paedogeneses', - 'paedogenesis', - 'paedogenetic', - 'paedogenetically', - 'paedogenic', - 'paedomorphic', - 'paedomorphism', - 'paedomorphisms', - 'paedomorphoses', - 'paedomorphosis', - 'paganising', - 'paganizers', - 'paganizing', - 'pageantries', - 'paginating', - 'pagination', - 'paginations', - 'paillettes', - 'painfuller', - 'painfullest', - 'painfulness', - 'painfulnesses', - 'painkiller', - 'painkillers', - 'painkilling', - 'painlessly', - 'painlessness', - 'painlessnesses', - 'painstaking', - 'painstakingly', - 'painstakings', - 'paintbrush', - 'paintbrushes', - 'painterliness', - 'painterlinesses', - 'paintworks', - 'palaestrae', - 'palanquins', - 'palatabilities', - 'palatability', - 'palatableness', - 'palatablenesses', - 'palatalization', - 'palatalizations', - 'palatalize', - 'palatalized', - 'palatalizes', - 'palatalizing', - 'palatially', - 'palatialness', - 'palatialnesses', - 'palatinate', - 'palatinates', - 'palavering', - 'palenesses', - 'paleoanthropological', - 'paleoanthropologies', - 'paleoanthropologist', - 'paleoanthropologists', - 'paleoanthropology', - 'paleobiologic', - 'paleobiological', - 'paleobiologies', - 'paleobiologist', - 'paleobiologists', - 'paleobiology', - 'paleobotanic', - 'paleobotanical', - 'paleobotanically', - 'paleobotanies', - 'paleobotanist', - 'paleobotanists', - 'paleobotany', - 'paleoclimatologies', - 'paleoclimatologist', - 'paleoclimatologists', - 'paleoclimatology', - 'paleoecologic', - 'paleoecological', - 'paleoecologies', - 'paleoecologist', - 'paleoecologists', - 'paleoecology', - 'paleogeographic', - 'paleogeographical', - 'paleogeographically', - 'paleogeographies', - 'paleogeography', - 'paleographer', - 'paleographers', - 'paleographic', - 'paleographical', - 'paleographically', - 'paleographies', - 'paleography', - 'paleomagnetic', - 'paleomagnetically', - 'paleomagnetism', - 'paleomagnetisms', - 'paleomagnetist', - 'paleomagnetists', - 'paleontologic', - 'paleontological', - 'paleontologies', - 'paleontologist', - 'paleontologists', - 'paleontology', - 'paleopathological', - 'paleopathologies', - 'paleopathologist', - 'paleopathologists', - 'paleopathology', - 'paleozoological', - 'paleozoologies', - 'paleozoologist', - 'paleozoologists', - 'paleozoology', - 'palimonies', - 'palimpsest', - 'palimpsests', - 'palindrome', - 'palindromes', - 'palindromic', - 'palindromist', - 'palindromists', - 'palingeneses', - 'palingenesis', - 'palingenetic', - 'palisading', - 'palladiums', - 'pallbearer', - 'pallbearers', - 'palletised', - 'palletises', - 'palletising', - 'palletization', - 'palletizations', - 'palletized', - 'palletizer', - 'palletizers', - 'palletizes', - 'palletizing', - 'palliasses', - 'palliating', - 'palliation', - 'palliations', - 'palliative', - 'palliatively', - 'palliatives', - 'palliators', - 'pallidness', - 'pallidnesses', - 'palmations', - 'palmerworm', - 'palmerworms', - 'palmettoes', - 'palmistries', - 'palmitates', - 'paloverdes', - 'palpabilities', - 'palpability', - 'palpations', - 'palpitated', - 'palpitates', - 'palpitating', - 'palpitation', - 'palpitations', - 'palsgraves', - 'paltriness', - 'paltrinesses', - 'palynologic', - 'palynological', - 'palynologically', - 'palynologies', - 'palynologist', - 'palynologists', - 'palynology', - 'pamphleteer', - 'pamphleteered', - 'pamphleteering', - 'pamphleteers', - 'panbroiled', - 'panbroiling', - 'panchromatic', - 'pancratium', - 'pancratiums', - 'pancreases', - 'pancreatectomies', - 'pancreatectomized', - 'pancreatectomy', - 'pancreatic', - 'pancreatin', - 'pancreatins', - 'pancreatitides', - 'pancreatitis', - 'pancreozymin', - 'pancreozymins', - 'pancytopenia', - 'pancytopenias', - 'pandanuses', - 'pandemonium', - 'pandemoniums', - 'pandowdies', - 'panegyrical', - 'panegyrically', - 'panegyrics', - 'panegyrist', - 'panegyrists', - 'panellings', - 'panettones', - 'pangeneses', - 'pangenesis', - 'pangenetic', - 'panhandled', - 'panhandler', - 'panhandlers', - 'panhandles', - 'panhandling', - 'panickiest', - 'paniculate', - 'panjandrum', - 'panjandrums', - 'panleukopenia', - 'panleukopenias', - 'panmixises', - 'panoramically', - 'pansexualities', - 'pansexuality', - 'pansophies', - 'pantalettes', - 'pantalones', - 'pantaloons', - 'pantdresses', - 'pantechnicon', - 'pantechnicons', - 'pantheisms', - 'pantheistic', - 'pantheistical', - 'pantheistically', - 'pantheists', - 'pantisocracies', - 'pantisocracy', - 'pantisocratic', - 'pantisocratical', - 'pantisocratist', - 'pantisocratists', - 'pantograph', - 'pantographic', - 'pantographs', - 'pantomimed', - 'pantomimes', - 'pantomimic', - 'pantomiming', - 'pantomimist', - 'pantomimists', - 'pantothenate', - 'pantothenates', - 'pantropical', - 'pantsuited', - 'pantywaist', - 'pantywaists', - 'papaverine', - 'papaverines', - 'paperbacked', - 'paperbacks', - 'paperboard', - 'paperboards', - 'paperbound', - 'paperbounds', - 'paperhanger', - 'paperhangers', - 'paperhanging', - 'paperhangings', - 'paperiness', - 'paperinesses', - 'papermaker', - 'papermakers', - 'papermaking', - 'papermakings', - 'paperweight', - 'paperweights', - 'paperworks', - 'papeteries', - 'papilionaceous', - 'papillomas', - 'papillomata', - 'papillomatous', - 'papillomavirus', - 'papillomaviruses', - 'papillotes', - 'papistries', - 'papovavirus', - 'papovaviruses', - 'papyrologies', - 'papyrologist', - 'papyrologists', - 'papyrology', - 'parabioses', - 'parabiosis', - 'parabiotic', - 'parabiotically', - 'parabolically', - 'paraboloid', - 'paraboloidal', - 'paraboloids', - 'parachuted', - 'parachutes', - 'parachutic', - 'parachuting', - 'parachutist', - 'parachutists', - 'paradichlorobenzene', - 'paradichlorobenzenes', - 'paradiddle', - 'paradiddles', - 'paradigmatic', - 'paradigmatically', - 'paradisaic', - 'paradisaical', - 'paradisaically', - 'paradisiac', - 'paradisiacal', - 'paradisiacally', - 'paradisial', - 'paradisical', - 'paradoxical', - 'paradoxicalities', - 'paradoxicality', - 'paradoxically', - 'paradoxicalness', - 'paradoxicalnesses', - 'paradropped', - 'paradropping', - 'paraesthesia', - 'paraesthesias', - 'paraffined', - 'paraffinic', - 'paraffining', - 'paraformaldehyde', - 'paraformaldehydes', - 'parageneses', - 'paragenesis', - 'paragenetic', - 'paragenetically', - 'paragoning', - 'paragraphed', - 'paragrapher', - 'paragraphers', - 'paragraphic', - 'paragraphing', - 'paragraphs', - 'parainfluenza', - 'parainfluenzas', - 'parajournalism', - 'parajournalisms', - 'paralanguage', - 'paralanguages', - 'paraldehyde', - 'paraldehydes', - 'paralegals', - 'paralinguistic', - 'paralinguistics', - 'parallactic', - 'parallaxes', - 'paralleled', - 'parallelepiped', - 'parallelepipeds', - 'paralleling', - 'parallelism', - 'parallelisms', - 'parallelled', - 'parallelling', - 'parallelogram', - 'parallelograms', - 'paralogism', - 'paralogisms', - 'paralysing', - 'paralytically', - 'paralytics', - 'paralyzation', - 'paralyzations', - 'paralyzers', - 'paralyzing', - 'paralyzingly', - 'paramagnet', - 'paramagnetic', - 'paramagnetically', - 'paramagnetism', - 'paramagnetisms', - 'paramagnets', - 'paramecium', - 'parameciums', - 'paramedical', - 'paramedicals', - 'paramedics', - 'parameterization', - 'parameterizations', - 'parameterize', - 'parameterized', - 'parameterizes', - 'parameterizing', - 'parameters', - 'parametric', - 'parametrically', - 'parametrization', - 'parametrizations', - 'parametrize', - 'parametrized', - 'parametrizes', - 'parametrizing', - 'paramilitary', - 'paramnesia', - 'paramnesias', - 'paramountcies', - 'paramountcy', - 'paramountly', - 'paramounts', - 'paramylums', - 'paramyxovirus', - 'paramyxoviruses', - 'paranoiacs', - 'paranoically', - 'paranoidal', - 'paranormal', - 'paranormalities', - 'paranormality', - 'paranormally', - 'paranormals', - 'paranymphs', - 'paraphernalia', - 'paraphrasable', - 'paraphrase', - 'paraphrased', - 'paraphraser', - 'paraphrasers', - 'paraphrases', - 'paraphrasing', - 'paraphrastic', - 'paraphrastically', - 'paraphyses', - 'paraphysis', - 'paraplegia', - 'paraplegias', - 'paraplegic', - 'paraplegics', - 'parapodial', - 'parapodium', - 'paraprofessional', - 'paraprofessionals', - 'parapsychological', - 'parapsychologies', - 'parapsychologist', - 'parapsychologists', - 'parapsychology', - 'pararosaniline', - 'pararosanilines', - 'parasailing', - 'parasailings', - 'parasexual', - 'parasexualities', - 'parasexuality', - 'parashioth', - 'parasitical', - 'parasitically', - 'parasiticidal', - 'parasiticide', - 'parasiticides', - 'parasitise', - 'parasitised', - 'parasitises', - 'parasitising', - 'parasitism', - 'parasitisms', - 'parasitization', - 'parasitizations', - 'parasitize', - 'parasitized', - 'parasitizes', - 'parasitizing', - 'parasitoid', - 'parasitoids', - 'parasitologic', - 'parasitological', - 'parasitologically', - 'parasitologies', - 'parasitologist', - 'parasitologists', - 'parasitology', - 'parasitoses', - 'parasitosis', - 'parasympathetic', - 'parasympathetics', - 'parasympathomimetic', - 'parasyntheses', - 'parasynthesis', - 'parasynthetic', - 'paratactic', - 'paratactical', - 'paratactically', - 'parathions', - 'parathormone', - 'parathormones', - 'parathyroid', - 'parathyroidectomies', - 'parathyroidectomized', - 'parathyroidectomy', - 'parathyroids', - 'paratrooper', - 'paratroopers', - 'paratroops', - 'paratyphoid', - 'paratyphoids', - 'parboiling', - 'parbuckled', - 'parbuckles', - 'parbuckling', - 'parcelling', - 'parcenaries', - 'parchments', - 'pardonable', - 'pardonableness', - 'pardonablenesses', - 'pardonably', - 'paregorics', - 'parenchyma', - 'parenchymal', - 'parenchymas', - 'parenchymata', - 'parenchymatous', - 'parentages', - 'parentally', - 'parenteral', - 'parenterally', - 'parentheses', - 'parenthesis', - 'parenthesize', - 'parenthesized', - 'parenthesizes', - 'parenthesizing', - 'parenthetic', - 'parenthetical', - 'parenthetically', - 'parenthood', - 'parenthoods', - 'parentings', - 'parentless', - 'paresthesia', - 'paresthesias', - 'paresthetic', - 'parfleches', - 'parfleshes', - 'parfocalities', - 'parfocality', - 'parfocalize', - 'parfocalized', - 'parfocalizes', - 'parfocalizing', - 'pargetting', - 'pargylines', - 'parimutuel', - 'parishioner', - 'parishioners', - 'parkinsonian', - 'parkinsonism', - 'parkinsonisms', - 'parliament', - 'parliamentarian', - 'parliamentarians', - 'parliamentary', - 'parliaments', - 'parmigiana', - 'parmigiano', - 'parochialism', - 'parochialisms', - 'parochially', - 'parodistic', - 'paronomasia', - 'paronomasias', - 'paronomastic', - 'paronymous', - 'parotitises', - 'paroxysmal', - 'parqueting', - 'parquetries', - 'parrakeets', - 'parricidal', - 'parricides', - 'parritches', - 'parsimonies', - 'parsimonious', - 'parsimoniously', - 'parsonages', - 'parthenocarpic', - 'parthenocarpies', - 'parthenocarpy', - 'parthenogeneses', - 'parthenogenesis', - 'parthenogenetic', - 'parthenogenetically', - 'partialities', - 'partiality', - 'partibilities', - 'partibility', - 'participant', - 'participants', - 'participate', - 'participated', - 'participates', - 'participating', - 'participation', - 'participational', - 'participations', - 'participative', - 'participator', - 'participators', - 'participatory', - 'participial', - 'participially', - 'participle', - 'participles', - 'particleboard', - 'particleboards', - 'particular', - 'particularise', - 'particularised', - 'particularises', - 'particularising', - 'particularism', - 'particularisms', - 'particularist', - 'particularistic', - 'particularists', - 'particularities', - 'particularity', - 'particularization', - 'particularizations', - 'particularize', - 'particularized', - 'particularizes', - 'particularizing', - 'particularly', - 'particulars', - 'particulate', - 'particulates', - 'partisanly', - 'partisanship', - 'partisanships', - 'partitioned', - 'partitioner', - 'partitioners', - 'partitioning', - 'partitionist', - 'partitionists', - 'partitions', - 'partitively', - 'partnering', - 'partnerless', - 'partnership', - 'partnerships', - 'partridgeberries', - 'partridgeberry', - 'partridges', - 'parturient', - 'parturients', - 'parturition', - 'parturitions', - 'parvovirus', - 'parvoviruses', - 'pasqueflower', - 'pasqueflowers', - 'pasquinade', - 'pasquinaded', - 'pasquinades', - 'pasquinading', - 'passacaglia', - 'passacaglias', - 'passageway', - 'passageways', - 'passagework', - 'passageworks', - 'passementerie', - 'passementeries', - 'passengers', - 'passerines', - 'passionate', - 'passionately', - 'passionateness', - 'passionatenesses', - 'passionflower', - 'passionflowers', - 'passionless', - 'passivated', - 'passivates', - 'passivating', - 'passivation', - 'passivations', - 'passiveness', - 'passivenesses', - 'passivisms', - 'passivists', - 'passivities', - 'pasteboard', - 'pasteboards', - 'pastedowns', - 'pastelists', - 'pastellist', - 'pastellists', - 'pasteurise', - 'pasteurised', - 'pasteurises', - 'pasteurising', - 'pasteurization', - 'pasteurizations', - 'pasteurize', - 'pasteurized', - 'pasteurizer', - 'pasteurizers', - 'pasteurizes', - 'pasteurizing', - 'pasticcios', - 'pasticheur', - 'pasticheurs', - 'pastinesses', - 'pastnesses', - 'pastorales', - 'pastoralism', - 'pastoralisms', - 'pastoralist', - 'pastoralists', - 'pastorally', - 'pastoralness', - 'pastoralnesses', - 'pastorates', - 'pastorship', - 'pastorships', - 'pasturages', - 'pastureland', - 'pasturelands', - 'patchboard', - 'patchboards', - 'patchiness', - 'patchinesses', - 'patchoulies', - 'patchoulis', - 'patchworks', - 'patelliform', - 'patentabilities', - 'patentability', - 'patentable', - 'paterfamilias', - 'paternalism', - 'paternalisms', - 'paternalist', - 'paternalistic', - 'paternalistically', - 'paternalists', - 'paternally', - 'paternities', - 'paternoster', - 'paternosters', - 'pathbreaking', - 'pathetical', - 'pathetically', - 'pathfinder', - 'pathfinders', - 'pathfinding', - 'pathfindings', - 'pathlessness', - 'pathlessnesses', - 'pathobiologies', - 'pathobiology', - 'pathogeneses', - 'pathogenesis', - 'pathogenetic', - 'pathogenic', - 'pathogenicities', - 'pathogenicity', - 'pathognomonic', - 'pathologic', - 'pathological', - 'pathologically', - 'pathologies', - 'pathologist', - 'pathologists', - 'pathophysiologic', - 'pathophysiological', - 'pathophysiologies', - 'pathophysiology', - 'patientest', - 'patinating', - 'patination', - 'patinations', - 'patinizing', - 'patisserie', - 'patisseries', - 'patissiers', - 'patresfamilias', - 'patriarchal', - 'patriarchate', - 'patriarchates', - 'patriarchies', - 'patriarchs', - 'patriarchy', - 'patricians', - 'patriciate', - 'patriciates', - 'patricidal', - 'patricides', - 'patrilineal', - 'patrimonial', - 'patrimonies', - 'patriotically', - 'patriotism', - 'patriotisms', - 'patristical', - 'patristics', - 'patrollers', - 'patrolling', - 'patronages', - 'patronesses', - 'patronised', - 'patronises', - 'patronising', - 'patronization', - 'patronizations', - 'patronized', - 'patronizes', - 'patronizing', - 'patronizingly', - 'patronymic', - 'patronymics', - 'patterning', - 'patternings', - 'patternless', - 'paulownias', - 'paunchiest', - 'paunchiness', - 'paunchinesses', - 'pauperisms', - 'pauperized', - 'pauperizes', - 'pauperizing', - 'paupiettes', - 'pavilioned', - 'pavilioning', - 'pawnbroker', - 'pawnbrokers', - 'pawnbroking', - 'pawnbrokings', - 'paymasters', - 'peaceableness', - 'peaceablenesses', - 'peacefuller', - 'peacefullest', - 'peacefully', - 'peacefulness', - 'peacefulnesses', - 'peacekeeper', - 'peacekeepers', - 'peacekeeping', - 'peacekeepings', - 'peacemaker', - 'peacemakers', - 'peacemaking', - 'peacemakings', - 'peacetimes', - 'peacockier', - 'peacockiest', - 'peacocking', - 'peacockish', - 'peakedness', - 'peakednesses', - 'pearlashes', - 'pearlescence', - 'pearlescences', - 'pearlescent', - 'peasantries', - 'peashooter', - 'peashooters', - 'peccadillo', - 'peccadilloes', - 'peccadillos', - 'peccancies', - 'peckerwood', - 'peckerwoods', - 'pectinaceous', - 'pectination', - 'pectinations', - 'pectinesterase', - 'pectinesterases', - 'peculating', - 'peculation', - 'peculations', - 'peculators', - 'peculiarities', - 'peculiarity', - 'peculiarly', - 'pecuniarily', - 'pedagogical', - 'pedagogically', - 'pedagogics', - 'pedagogies', - 'pedagogues', - 'pedantically', - 'pedantries', - 'peddleries', - 'pederastic', - 'pederasties', - 'pedestaled', - 'pedestaling', - 'pedestalled', - 'pedestalling', - 'pedestrian', - 'pedestrianism', - 'pedestrianisms', - 'pedestrians', - 'pediatrician', - 'pediatricians', - 'pediatrics', - 'pediatrist', - 'pediatrists', - 'pedicellate', - 'pediculate', - 'pediculates', - 'pediculoses', - 'pediculosis', - 'pediculosises', - 'pediculous', - 'pedicuring', - 'pedicurist', - 'pedicurists', - 'pedimental', - 'pedimented', - 'pedogeneses', - 'pedogenesis', - 'pedogenetic', - 'pedological', - 'pedologies', - 'pedologist', - 'pedologists', - 'pedometers', - 'pedophiles', - 'pedophilia', - 'pedophiliac', - 'pedophilias', - 'pedophilic', - 'peduncular', - 'pedunculate', - 'pedunculated', - 'peerlessly', - 'peevishness', - 'peevishnesses', - 'pegmatites', - 'pegmatitic', - 'pejorative', - 'pejoratively', - 'pejoratives', - 'pelargonium', - 'pelargoniums', - 'pelecypods', - 'pellagrins', - 'pellagrous', - 'pelletised', - 'pelletises', - 'pelletising', - 'pelletization', - 'pelletizations', - 'pelletized', - 'pelletizer', - 'pelletizers', - 'pelletizes', - 'pelletizing', - 'pellitories', - 'pellucidly', - 'pelycosaur', - 'pelycosaurs', - 'pemphiguses', - 'penalising', - 'penalities', - 'penalization', - 'penalizations', - 'penalizing', - 'pencilings', - 'pencilling', - 'pencillings', - 'pendencies', - 'pendentive', - 'pendentives', - 'pendulousness', - 'pendulousnesses', - 'peneplains', - 'peneplanes', - 'penetrabilities', - 'penetrability', - 'penetrable', - 'penetralia', - 'penetrance', - 'penetrances', - 'penetrants', - 'penetrated', - 'penetrates', - 'penetrating', - 'penetratingly', - 'penetration', - 'penetrations', - 'penetrative', - 'penetrometer', - 'penetrometers', - 'penholders', - 'penicillamine', - 'penicillamines', - 'penicillate', - 'penicillia', - 'penicillin', - 'penicillinase', - 'penicillinases', - 'penicillins', - 'penicillium', - 'peninsular', - 'peninsulas', - 'penitences', - 'penitential', - 'penitentially', - 'penitentiaries', - 'penitentiary', - 'penitently', - 'penmanship', - 'penmanships', - 'pennoncels', - 'pennycress', - 'pennycresses', - 'pennyroyal', - 'pennyroyals', - 'pennyweight', - 'pennyweights', - 'pennywhistle', - 'pennywhistles', - 'pennyworth', - 'pennyworths', - 'pennyworts', - 'penological', - 'penologies', - 'penologist', - 'penologists', - 'pensionable', - 'pensionaries', - 'pensionary', - 'pensioners', - 'pensioning', - 'pensionless', - 'pensiveness', - 'pensivenesses', - 'penstemons', - 'pentachlorophenol', - 'pentachlorophenols', - 'pentagonal', - 'pentagonally', - 'pentagonals', - 'pentagrams', - 'pentahedra', - 'pentahedral', - 'pentahedron', - 'pentahedrons', - 'pentamerous', - 'pentameter', - 'pentameters', - 'pentamidine', - 'pentamidines', - 'pentangles', - 'pentapeptide', - 'pentapeptides', - 'pentaploid', - 'pentaploidies', - 'pentaploids', - 'pentaploidy', - 'pentarchies', - 'pentathlete', - 'pentathletes', - 'pentathlon', - 'pentathlons', - 'pentatonic', - 'pentavalent', - 'pentazocine', - 'pentazocines', - 'penthouses', - 'pentlandite', - 'pentlandites', - 'pentobarbital', - 'pentobarbitals', - 'pentobarbitone', - 'pentobarbitones', - 'pentoxides', - 'pentstemon', - 'pentstemons', - 'pentylenetetrazol', - 'pentylenetetrazols', - 'penultimas', - 'penultimate', - 'penultimately', - 'penuriously', - 'penuriousness', - 'penuriousnesses', - 'peoplehood', - 'peoplehoods', - 'peopleless', - 'peperomias', - 'pepperboxes', - 'peppercorn', - 'peppercorns', - 'peppergrass', - 'peppergrasses', - 'pepperiness', - 'pepperinesses', - 'peppermint', - 'peppermints', - 'pepperminty', - 'pepperonis', - 'peppertree', - 'peppertrees', - 'peppinesses', - 'pepsinogen', - 'pepsinogens', - 'peptidases', - 'peptidoglycan', - 'peptidoglycans', - 'peradventure', - 'peradventures', - 'perambulate', - 'perambulated', - 'perambulates', - 'perambulating', - 'perambulation', - 'perambulations', - 'perambulator', - 'perambulators', - 'perambulatory', - 'perborates', - 'percalines', - 'perceivable', - 'perceivably', - 'perceivers', - 'perceiving', - 'percentage', - 'percentages', - 'percentile', - 'percentiles', - 'perceptibilities', - 'perceptibility', - 'perceptible', - 'perceptibly', - 'perception', - 'perceptional', - 'perceptions', - 'perceptive', - 'perceptively', - 'perceptiveness', - 'perceptivenesses', - 'perceptivities', - 'perceptivity', - 'perceptual', - 'perceptually', - 'perchlorate', - 'perchlorates', - 'perchloroethylene', - 'perchloroethylenes', - 'percipience', - 'percipiences', - 'percipient', - 'percipiently', - 'percipients', - 'percolated', - 'percolates', - 'percolating', - 'percolation', - 'percolations', - 'percolator', - 'percolators', - 'percussing', - 'percussion', - 'percussionist', - 'percussionists', - 'percussions', - 'percussive', - 'percussively', - 'percussiveness', - 'percussivenesses', - 'percutaneous', - 'percutaneously', - 'perditions', - 'perdurabilities', - 'perdurability', - 'perdurable', - 'perdurably', - 'peregrinate', - 'peregrinated', - 'peregrinates', - 'peregrinating', - 'peregrination', - 'peregrinations', - 'peregrines', - 'pereiopods', - 'peremptorily', - 'peremptoriness', - 'peremptorinesses', - 'peremptory', - 'perennated', - 'perennates', - 'perennating', - 'perennation', - 'perennations', - 'perennially', - 'perennials', - 'perestroika', - 'perestroikas', - 'perfecters', - 'perfectest', - 'perfectibilities', - 'perfectibility', - 'perfectible', - 'perfecting', - 'perfection', - 'perfectionism', - 'perfectionisms', - 'perfectionist', - 'perfectionistic', - 'perfectionists', - 'perfections', - 'perfective', - 'perfectively', - 'perfectiveness', - 'perfectivenesses', - 'perfectives', - 'perfectivities', - 'perfectivity', - 'perfectness', - 'perfectnesses', - 'perfidious', - 'perfidiously', - 'perfidiousness', - 'perfidiousnesses', - 'perfoliate', - 'perforated', - 'perforates', - 'perforating', - 'perforation', - 'perforations', - 'perforator', - 'perforators', - 'performabilities', - 'performability', - 'performable', - 'performance', - 'performances', - 'performative', - 'performatives', - 'performatory', - 'performers', - 'performing', - 'perfumeries', - 'perfunctorily', - 'perfunctoriness', - 'perfunctorinesses', - 'perfunctory', - 'perfusates', - 'perfusionist', - 'perfusionists', - 'perfusions', - 'pericardia', - 'pericardial', - 'pericarditides', - 'pericarditis', - 'pericardium', - 'perichondral', - 'perichondria', - 'perichondrium', - 'pericrania', - 'pericranial', - 'pericranium', - 'pericycles', - 'pericyclic', - 'peridotite', - 'peridotites', - 'peridotitic', - 'perigynies', - 'perigynous', - 'perihelial', - 'perihelion', - 'perikaryal', - 'perikaryon', - 'perilously', - 'perilousness', - 'perilousnesses', - 'perilymphs', - 'perimeters', - 'perimysium', - 'perinatally', - 'perineuria', - 'perineurium', - 'periodical', - 'periodically', - 'periodicals', - 'periodicities', - 'periodicity', - 'periodization', - 'periodizations', - 'periodontal', - 'periodontally', - 'periodontics', - 'periodontist', - 'periodontists', - 'periodontologies', - 'periodontology', - 'perionychia', - 'perionychium', - 'periosteal', - 'periosteum', - 'periostites', - 'periostitides', - 'periostitis', - 'periostitises', - 'peripatetic', - 'peripatetically', - 'peripatetics', - 'peripatuses', - 'peripeteia', - 'peripeteias', - 'peripeties', - 'peripheral', - 'peripherally', - 'peripherals', - 'peripheries', - 'periphrases', - 'periphrasis', - 'periphrastic', - 'periphrastically', - 'periphytic', - 'periphyton', - 'periphytons', - 'periplasts', - 'periscopes', - 'periscopic', - 'perishabilities', - 'perishability', - 'perishable', - 'perishables', - 'perissodactyl', - 'perissodactyls', - 'peristalses', - 'peristalsis', - 'peristaltic', - 'peristomes', - 'peristomial', - 'peristyles', - 'perithecia', - 'perithecial', - 'perithecium', - 'peritoneal', - 'peritoneally', - 'peritoneum', - 'peritoneums', - 'peritonites', - 'peritonitides', - 'peritonitis', - 'peritonitises', - 'peritrichous', - 'peritrichously', - 'periwigged', - 'periwinkle', - 'periwinkles', - 'perjurious', - 'perjuriously', - 'perkinesses', - 'permafrost', - 'permafrosts', - 'permanence', - 'permanences', - 'permanencies', - 'permanency', - 'permanently', - 'permanentness', - 'permanentnesses', - 'permanents', - 'permanganate', - 'permanganates', - 'permeabilities', - 'permeability', - 'permeating', - 'permeation', - 'permeations', - 'permeative', - 'permethrin', - 'permethrins', - 'permillage', - 'permillages', - 'permissibilities', - 'permissibility', - 'permissible', - 'permissibleness', - 'permissiblenesses', - 'permissibly', - 'permission', - 'permissions', - 'permissive', - 'permissively', - 'permissiveness', - 'permissivenesses', - 'permittees', - 'permitters', - 'permitting', - 'permittivities', - 'permittivity', - 'permutable', - 'permutation', - 'permutational', - 'permutations', - 'pernicious', - 'perniciously', - 'perniciousness', - 'perniciousnesses', - 'pernickety', - 'perorating', - 'peroration', - 'perorational', - 'perorations', - 'perovskite', - 'perovskites', - 'peroxidase', - 'peroxidases', - 'peroxiding', - 'peroxisomal', - 'peroxisome', - 'peroxisomes', - 'perpendicular', - 'perpendicularities', - 'perpendicularity', - 'perpendicularly', - 'perpendiculars', - 'perpending', - 'perpetrate', - 'perpetrated', - 'perpetrates', - 'perpetrating', - 'perpetration', - 'perpetrations', - 'perpetrator', - 'perpetrators', - 'perpetually', - 'perpetuate', - 'perpetuated', - 'perpetuates', - 'perpetuating', - 'perpetuation', - 'perpetuations', - 'perpetuator', - 'perpetuators', - 'perpetuities', - 'perpetuity', - 'perphenazine', - 'perphenazines', - 'perplexedly', - 'perplexing', - 'perplexities', - 'perplexity', - 'perquisite', - 'perquisites', - 'persecuted', - 'persecutee', - 'persecutees', - 'persecutes', - 'persecuting', - 'persecution', - 'persecutions', - 'persecutive', - 'persecutor', - 'persecutors', - 'persecutory', - 'perseverance', - 'perseverances', - 'perseverate', - 'perseverated', - 'perseverates', - 'perseverating', - 'perseveration', - 'perseverations', - 'persevered', - 'perseveres', - 'persevering', - 'perseveringly', - 'persiflage', - 'persiflages', - 'persimmons', - 'persistence', - 'persistences', - 'persistencies', - 'persistency', - 'persistent', - 'persistently', - 'persisters', - 'persisting', - 'persnicketiness', - 'persnicketinesses', - 'persnickety', - 'personable', - 'personableness', - 'personablenesses', - 'personages', - 'personalise', - 'personalised', - 'personalises', - 'personalising', - 'personalism', - 'personalisms', - 'personalist', - 'personalistic', - 'personalists', - 'personalities', - 'personality', - 'personalization', - 'personalizations', - 'personalize', - 'personalized', - 'personalizes', - 'personalizing', - 'personally', - 'personalties', - 'personalty', - 'personated', - 'personates', - 'personating', - 'personation', - 'personations', - 'personative', - 'personator', - 'personators', - 'personhood', - 'personhoods', - 'personification', - 'personifications', - 'personified', - 'personifier', - 'personifiers', - 'personifies', - 'personifying', - 'personnels', - 'perspectival', - 'perspective', - 'perspectively', - 'perspectives', - 'perspicacious', - 'perspicaciously', - 'perspicaciousness', - 'perspicaciousnesses', - 'perspicacities', - 'perspicacity', - 'perspicuities', - 'perspicuity', - 'perspicuous', - 'perspicuously', - 'perspicuousness', - 'perspicuousnesses', - 'perspiration', - 'perspirations', - 'perspiratory', - 'perspiring', - 'persuadable', - 'persuaders', - 'persuading', - 'persuasible', - 'persuasion', - 'persuasions', - 'persuasive', - 'persuasively', - 'persuasiveness', - 'persuasivenesses', - 'pertaining', - 'pertinacious', - 'pertinaciously', - 'pertinaciousness', - 'pertinaciousnesses', - 'pertinacities', - 'pertinacity', - 'pertinence', - 'pertinences', - 'pertinencies', - 'pertinency', - 'pertinently', - 'pertnesses', - 'perturbable', - 'perturbation', - 'perturbational', - 'perturbations', - 'perturbing', - 'pertussises', - 'pervasions', - 'pervasively', - 'pervasiveness', - 'pervasivenesses', - 'perversely', - 'perverseness', - 'perversenesses', - 'perversion', - 'perversions', - 'perversities', - 'perversity', - 'perversive', - 'pervertedly', - 'pervertedness', - 'pervertednesses', - 'perverters', - 'perverting', - 'perviousness', - 'perviousnesses', - 'pessimisms', - 'pessimistic', - 'pessimistically', - 'pessimists', - 'pesthouses', - 'pesticides', - 'pestiferous', - 'pestiferously', - 'pestiferousness', - 'pestiferousnesses', - 'pestilence', - 'pestilences', - 'pestilential', - 'pestilentially', - 'pestilently', - 'petalodies', - 'petiolules', - 'petiteness', - 'petitenesses', - 'petitionary', - 'petitioned', - 'petitioner', - 'petitioners', - 'petitioning', - 'petnapping', - 'petrifaction', - 'petrifactions', - 'petrification', - 'petrifications', - 'petrifying', - 'petrochemical', - 'petrochemicals', - 'petrochemistries', - 'petrochemistry', - 'petrodollar', - 'petrodollars', - 'petrogeneses', - 'petrogenesis', - 'petrogenetic', - 'petroglyph', - 'petroglyphs', - 'petrographer', - 'petrographers', - 'petrographic', - 'petrographical', - 'petrographically', - 'petrographies', - 'petrography', - 'petrolatum', - 'petrolatums', - 'petroleums', - 'petrologic', - 'petrological', - 'petrologically', - 'petrologies', - 'petrologist', - 'petrologists', - 'petticoated', - 'petticoats', - 'pettifogged', - 'pettifogger', - 'pettifoggeries', - 'pettifoggers', - 'pettifoggery', - 'pettifogging', - 'pettifoggings', - 'pettinesses', - 'pettishness', - 'pettishnesses', - 'petulances', - 'petulancies', - 'petulantly', - 'pewholders', - 'phagocytes', - 'phagocytic', - 'phagocytize', - 'phagocytized', - 'phagocytizes', - 'phagocytizing', - 'phagocytose', - 'phagocytosed', - 'phagocytoses', - 'phagocytosing', - 'phagocytosis', - 'phagocytotic', - 'phalangeal', - 'phalangers', - 'phalansteries', - 'phalanstery', - 'phalaropes', - 'phallically', - 'phallicism', - 'phallicisms', - 'phallocentric', - 'phanerogam', - 'phanerogams', - 'phanerophyte', - 'phanerophytes', - 'phantasied', - 'phantasies', - 'phantasmagoria', - 'phantasmagorias', - 'phantasmagoric', - 'phantasmagorical', - 'phantasmal', - 'phantasmata', - 'phantasmic', - 'phantasying', - 'phantomlike', - 'pharisaical', - 'pharisaically', - 'pharisaicalness', - 'pharisaicalnesses', - 'pharisaism', - 'pharisaisms', - 'pharmaceutical', - 'pharmaceutically', - 'pharmaceuticals', - 'pharmacies', - 'pharmacist', - 'pharmacists', - 'pharmacodynamic', - 'pharmacodynamically', - 'pharmacodynamics', - 'pharmacognosies', - 'pharmacognostic', - 'pharmacognostical', - 'pharmacognosy', - 'pharmacokinetic', - 'pharmacokinetics', - 'pharmacologic', - 'pharmacological', - 'pharmacologically', - 'pharmacologies', - 'pharmacologist', - 'pharmacologists', - 'pharmacology', - 'pharmacopeia', - 'pharmacopeial', - 'pharmacopeias', - 'pharmacopoeia', - 'pharmacopoeial', - 'pharmacopoeias', - 'pharmacotherapies', - 'pharmacotherapy', - 'pharyngeal', - 'pharyngitides', - 'pharyngitis', - 'phasedowns', - 'phatically', - 'phelloderm', - 'phelloderms', - 'phellogens', - 'phelonions', - 'phenacaine', - 'phenacaines', - 'phenacetin', - 'phenacetins', - 'phenacites', - 'phenakites', - 'phenanthrene', - 'phenanthrenes', - 'phenazines', - 'phencyclidine', - 'phencyclidines', - 'pheneticist', - 'pheneticists', - 'phenmetrazine', - 'phenmetrazines', - 'phenobarbital', - 'phenobarbitals', - 'phenobarbitone', - 'phenobarbitones', - 'phenocopies', - 'phenocryst', - 'phenocrystic', - 'phenocrysts', - 'phenolated', - 'phenolates', - 'phenological', - 'phenologically', - 'phenologies', - 'phenolphthalein', - 'phenolphthaleins', - 'phenomenal', - 'phenomenalism', - 'phenomenalisms', - 'phenomenalist', - 'phenomenalistic', - 'phenomenalistically', - 'phenomenalists', - 'phenomenally', - 'phenomenas', - 'phenomenological', - 'phenomenologically', - 'phenomenologies', - 'phenomenologist', - 'phenomenologists', - 'phenomenology', - 'phenomenon', - 'phenomenons', - 'phenothiazine', - 'phenothiazines', - 'phenotypes', - 'phenotypic', - 'phenotypical', - 'phenotypically', - 'phenoxides', - 'phentolamine', - 'phentolamines', - 'phenylalanine', - 'phenylalanines', - 'phenylbutazone', - 'phenylbutazones', - 'phenylephrine', - 'phenylephrines', - 'phenylethylamine', - 'phenylethylamines', - 'phenylketonuria', - 'phenylketonurias', - 'phenylketonuric', - 'phenylketonurics', - 'phenylpropanolamine', - 'phenylpropanolamines', - 'phenylthiocarbamide', - 'phenylthiocarbamides', - 'phenylthiourea', - 'phenylthioureas', - 'phenytoins', - 'pheochromocytoma', - 'pheochromocytomas', - 'pheochromocytomata', - 'pheromonal', - 'pheromones', - 'philadelphus', - 'philadelphuses', - 'philandered', - 'philanderer', - 'philanderers', - 'philandering', - 'philanders', - 'philanthropic', - 'philanthropical', - 'philanthropically', - 'philanthropies', - 'philanthropist', - 'philanthropists', - 'philanthropoid', - 'philanthropoids', - 'philanthropy', - 'philatelic', - 'philatelically', - 'philatelies', - 'philatelist', - 'philatelists', - 'philharmonic', - 'philharmonics', - 'philhellene', - 'philhellenes', - 'philhellenic', - 'philhellenism', - 'philhellenisms', - 'philhellenist', - 'philhellenists', - 'philippics', - 'philistine', - 'philistines', - 'philistinism', - 'philistinisms', - 'phillumenist', - 'phillumenists', - 'philodendra', - 'philodendron', - 'philodendrons', - 'philological', - 'philologically', - 'philologies', - 'philologist', - 'philologists', - 'philoprogenitive', - 'philoprogenitiveness', - 'philoprogenitivenesses', - 'philosophe', - 'philosopher', - 'philosophers', - 'philosophes', - 'philosophic', - 'philosophical', - 'philosophically', - 'philosophies', - 'philosophise', - 'philosophised', - 'philosophises', - 'philosophising', - 'philosophize', - 'philosophized', - 'philosophizer', - 'philosophizers', - 'philosophizes', - 'philosophizing', - 'philosophy', - 'philtering', - 'phlebitides', - 'phlebogram', - 'phlebograms', - 'phlebographic', - 'phlebographies', - 'phlebography', - 'phlebologies', - 'phlebology', - 'phlebotomies', - 'phlebotomist', - 'phlebotomists', - 'phlebotomy', - 'phlegmatic', - 'phlegmatically', - 'phlegmiest', - 'phlogistic', - 'phlogiston', - 'phlogistons', - 'phlogopite', - 'phlogopites', - 'phoenixlike', - 'phonations', - 'phonematic', - 'phonemically', - 'phonemicist', - 'phonemicists', - 'phonetically', - 'phonetician', - 'phoneticians', - 'phonically', - 'phoninesses', - 'phonocardiogram', - 'phonocardiograms', - 'phonocardiograph', - 'phonocardiographic', - 'phonocardiographies', - 'phonocardiographs', - 'phonocardiography', - 'phonogramic', - 'phonogramically', - 'phonogrammic', - 'phonogrammically', - 'phonograms', - 'phonograph', - 'phonographer', - 'phonographers', - 'phonographic', - 'phonographically', - 'phonographies', - 'phonographs', - 'phonography', - 'phonolites', - 'phonologic', - 'phonological', - 'phonologically', - 'phonologies', - 'phonologist', - 'phonologists', - 'phonotactic', - 'phonotactics', - 'phosphatase', - 'phosphatases', - 'phosphates', - 'phosphatic', - 'phosphatide', - 'phosphatides', - 'phosphatidic', - 'phosphatidyl', - 'phosphatidylcholine', - 'phosphatidylcholines', - 'phosphatidylethanolamine', - 'phosphatidylethanolamines', - 'phosphatidyls', - 'phosphatization', - 'phosphatizations', - 'phosphatize', - 'phosphatized', - 'phosphatizes', - 'phosphatizing', - 'phosphaturia', - 'phosphaturias', - 'phosphenes', - 'phosphides', - 'phosphines', - 'phosphites', - 'phosphocreatine', - 'phosphocreatines', - 'phosphodiesterase', - 'phosphodiesterases', - 'phosphoenolpyruvate', - 'phosphoenolpyruvates', - 'phosphofructokinase', - 'phosphofructokinases', - 'phosphoglucomutase', - 'phosphoglucomutases', - 'phosphoglyceraldehyde', - 'phosphoglyceraldehydes', - 'phosphoglycerate', - 'phosphoglycerates', - 'phosphokinase', - 'phosphokinases', - 'phospholipase', - 'phospholipases', - 'phospholipid', - 'phospholipids', - 'phosphomonoesterase', - 'phosphomonoesterases', - 'phosphonium', - 'phosphoniums', - 'phosphoprotein', - 'phosphoproteins', - 'phosphores', - 'phosphoresce', - 'phosphoresced', - 'phosphorescence', - 'phosphorescences', - 'phosphorescent', - 'phosphorescently', - 'phosphoresces', - 'phosphorescing', - 'phosphoric', - 'phosphorite', - 'phosphorites', - 'phosphoritic', - 'phosphorolyses', - 'phosphorolysis', - 'phosphorolytic', - 'phosphorous', - 'phosphorus', - 'phosphoruses', - 'phosphoryl', - 'phosphorylase', - 'phosphorylases', - 'phosphorylate', - 'phosphorylated', - 'phosphorylates', - 'phosphorylating', - 'phosphorylation', - 'phosphorylations', - 'phosphorylative', - 'phosphoryls', - 'photically', - 'photoautotroph', - 'photoautotrophic', - 'photoautotrophically', - 'photoautotrophs', - 'photobiologic', - 'photobiological', - 'photobiologies', - 'photobiologist', - 'photobiologists', - 'photobiology', - 'photocathode', - 'photocathodes', - 'photocells', - 'photochemical', - 'photochemically', - 'photochemist', - 'photochemistries', - 'photochemistry', - 'photochemists', - 'photochromic', - 'photochromism', - 'photochromisms', - 'photocoagulation', - 'photocoagulations', - 'photocompose', - 'photocomposed', - 'photocomposer', - 'photocomposers', - 'photocomposes', - 'photocomposing', - 'photocomposition', - 'photocompositions', - 'photoconductive', - 'photoconductivities', - 'photoconductivity', - 'photocopied', - 'photocopier', - 'photocopiers', - 'photocopies', - 'photocopying', - 'photocurrent', - 'photocurrents', - 'photodecomposition', - 'photodecompositions', - 'photodegradable', - 'photodetector', - 'photodetectors', - 'photodiode', - 'photodiodes', - 'photodisintegrate', - 'photodisintegrated', - 'photodisintegrates', - 'photodisintegrating', - 'photodisintegration', - 'photodisintegrations', - 'photodissociate', - 'photodissociated', - 'photodissociates', - 'photodissociating', - 'photodissociation', - 'photodissociations', - 'photoduplicate', - 'photoduplicated', - 'photoduplicates', - 'photoduplicating', - 'photoduplication', - 'photoduplications', - 'photodynamic', - 'photodynamically', - 'photoelectric', - 'photoelectrically', - 'photoelectron', - 'photoelectronic', - 'photoelectrons', - 'photoemission', - 'photoemissions', - 'photoemissive', - 'photoengrave', - 'photoengraved', - 'photoengraver', - 'photoengravers', - 'photoengraves', - 'photoengraving', - 'photoengravings', - 'photoexcitation', - 'photoexcitations', - 'photoexcited', - 'photofinisher', - 'photofinishers', - 'photofinishing', - 'photofinishings', - 'photoflash', - 'photoflashes', - 'photoflood', - 'photofloods', - 'photofluorographies', - 'photofluorography', - 'photogenic', - 'photogenically', - 'photogeologic', - 'photogeological', - 'photogeologies', - 'photogeologist', - 'photogeologists', - 'photogeology', - 'photogrammetric', - 'photogrammetries', - 'photogrammetrist', - 'photogrammetrists', - 'photogrammetry', - 'photograms', - 'photograph', - 'photographed', - 'photographer', - 'photographers', - 'photographic', - 'photographically', - 'photographies', - 'photographing', - 'photographs', - 'photography', - 'photogravure', - 'photogravures', - 'photoinduced', - 'photoinduction', - 'photoinductions', - 'photoinductive', - 'photointerpretation', - 'photointerpretations', - 'photointerpreter', - 'photointerpreters', - 'photoionization', - 'photoionizations', - 'photoionize', - 'photoionized', - 'photoionizes', - 'photoionizing', - 'photojournalism', - 'photojournalisms', - 'photojournalist', - 'photojournalistic', - 'photojournalists', - 'photokineses', - 'photokinesis', - 'photokinetic', - 'photolithograph', - 'photolithographed', - 'photolithographic', - 'photolithographically', - 'photolithographies', - 'photolithographing', - 'photolithographs', - 'photolithography', - 'photolyses', - 'photolysis', - 'photolytic', - 'photolytically', - 'photolyzable', - 'photolyzed', - 'photolyzes', - 'photolyzing', - 'photomapped', - 'photomapping', - 'photomasks', - 'photomechanical', - 'photomechanically', - 'photometer', - 'photometers', - 'photometric', - 'photometrically', - 'photometries', - 'photometry', - 'photomicrograph', - 'photomicrographic', - 'photomicrographies', - 'photomicrographs', - 'photomicrography', - 'photomontage', - 'photomontages', - 'photomorphogeneses', - 'photomorphogenesis', - 'photomorphogenic', - 'photomosaic', - 'photomosaics', - 'photomultiplier', - 'photomultipliers', - 'photomural', - 'photomurals', - 'photonegative', - 'photonuclear', - 'photooxidation', - 'photooxidations', - 'photooxidative', - 'photooxidize', - 'photooxidized', - 'photooxidizes', - 'photooxidizing', - 'photoperiod', - 'photoperiodic', - 'photoperiodically', - 'photoperiodism', - 'photoperiodisms', - 'photoperiods', - 'photophase', - 'photophases', - 'photophobia', - 'photophobias', - 'photophobic', - 'photophore', - 'photophores', - 'photophosphorylation', - 'photophosphorylations', - 'photoplays', - 'photopolarimeter', - 'photopolarimeters', - 'photopolymer', - 'photopolymers', - 'photopositive', - 'photoproduct', - 'photoproduction', - 'photoproductions', - 'photoproducts', - 'photoreaction', - 'photoreactions', - 'photoreactivating', - 'photoreactivation', - 'photoreactivations', - 'photoreception', - 'photoreceptions', - 'photoreceptive', - 'photoreceptor', - 'photoreceptors', - 'photoreconnaissance', - 'photoreconnaissances', - 'photoreduce', - 'photoreduced', - 'photoreduces', - 'photoreducing', - 'photoreduction', - 'photoreductions', - 'photoreproduction', - 'photoreproductions', - 'photoresist', - 'photoresists', - 'photorespiration', - 'photorespirations', - 'photosensitive', - 'photosensitivities', - 'photosensitivity', - 'photosensitization', - 'photosensitizations', - 'photosensitize', - 'photosensitized', - 'photosensitizer', - 'photosensitizers', - 'photosensitizes', - 'photosensitizing', - 'photosetter', - 'photosetters', - 'photosetting', - 'photosphere', - 'photospheres', - 'photospheric', - 'photostated', - 'photostatic', - 'photostating', - 'photostats', - 'photostatted', - 'photostatting', - 'photosynthate', - 'photosynthates', - 'photosyntheses', - 'photosynthesis', - 'photosynthesize', - 'photosynthesized', - 'photosynthesizes', - 'photosynthesizing', - 'photosynthetic', - 'photosynthetically', - 'photosystem', - 'photosystems', - 'phototactic', - 'phototactically', - 'phototaxes', - 'phototaxis', - 'phototelegraphies', - 'phototelegraphy', - 'phototoxic', - 'phototoxicities', - 'phototoxicity', - 'phototropic', - 'phototropically', - 'phototropism', - 'phototropisms', - 'phototubes', - 'phototypesetter', - 'phototypesetters', - 'phototypesetting', - 'phototypesettings', - 'photovoltaic', - 'photovoltaics', - 'phragmoplast', - 'phragmoplasts', - 'phrasemaker', - 'phrasemakers', - 'phrasemaking', - 'phrasemakings', - 'phrasemonger', - 'phrasemongering', - 'phrasemongerings', - 'phrasemongers', - 'phraseological', - 'phraseologies', - 'phraseologist', - 'phraseologists', - 'phraseology', - 'phreatophyte', - 'phreatophytes', - 'phreatophytic', - 'phrenological', - 'phrenologies', - 'phrenologist', - 'phrenologists', - 'phrenology', - 'phrensying', - 'phthalocyanine', - 'phthalocyanines', - 'phthisical', - 'phycocyanin', - 'phycocyanins', - 'phycoerythrin', - 'phycoerythrins', - 'phycological', - 'phycologies', - 'phycologist', - 'phycologists', - 'phycomycete', - 'phycomycetes', - 'phycomycetous', - 'phylacteries', - 'phylactery', - 'phylaxises', - 'phylesises', - 'phyletically', - 'phyllaries', - 'phylloclade', - 'phylloclades', - 'phyllodium', - 'phyllotactic', - 'phyllotaxes', - 'phyllotaxies', - 'phyllotaxis', - 'phyllotaxy', - 'phylloxera', - 'phylloxerae', - 'phylloxeras', - 'phylogenetic', - 'phylogenetically', - 'phylogenies', - 'physiatrist', - 'physiatrists', - 'physicalism', - 'physicalisms', - 'physicalist', - 'physicalistic', - 'physicalists', - 'physicalities', - 'physicality', - 'physically', - 'physicalness', - 'physicalnesses', - 'physicians', - 'physicists', - 'physicking', - 'physicochemical', - 'physicochemically', - 'physiocratic', - 'physiognomic', - 'physiognomical', - 'physiognomically', - 'physiognomies', - 'physiognomy', - 'physiographer', - 'physiographers', - 'physiographic', - 'physiographical', - 'physiographies', - 'physiography', - 'physiologic', - 'physiological', - 'physiologically', - 'physiologies', - 'physiologist', - 'physiologists', - 'physiology', - 'physiopathologic', - 'physiopathological', - 'physiopathologies', - 'physiopathology', - 'physiotherapies', - 'physiotherapist', - 'physiotherapists', - 'physiotherapy', - 'physostigmine', - 'physostigmines', - 'phytoalexin', - 'phytoalexins', - 'phytochemical', - 'phytochemically', - 'phytochemist', - 'phytochemistries', - 'phytochemistry', - 'phytochemists', - 'phytochrome', - 'phytochromes', - 'phytoflagellate', - 'phytoflagellates', - 'phytogeographer', - 'phytogeographers', - 'phytogeographic', - 'phytogeographical', - 'phytogeographically', - 'phytogeographies', - 'phytogeography', - 'phytohemagglutinin', - 'phytohemagglutinins', - 'phytohormone', - 'phytohormones', - 'phytopathogen', - 'phytopathogenic', - 'phytopathogens', - 'phytopathological', - 'phytopathologies', - 'phytopathology', - 'phytophagous', - 'phytoplankter', - 'phytoplankters', - 'phytoplankton', - 'phytoplanktonic', - 'phytoplanktons', - 'phytosociological', - 'phytosociologies', - 'phytosociology', - 'phytosterol', - 'phytosterols', - 'phytotoxic', - 'phytotoxicities', - 'phytotoxicity', - 'pianissimi', - 'pianissimo', - 'pianissimos', - 'pianistically', - 'pianoforte', - 'pianofortes', - 'picaninnies', - 'picaresque', - 'picaresques', - 'picarooned', - 'picarooning', - 'picayunish', - 'piccalilli', - 'piccalillis', - 'piccoloist', - 'piccoloists', - 'pickabacked', - 'pickabacking', - 'pickabacks', - 'pickaninnies', - 'pickaninny', - 'pickaroons', - 'pickeering', - 'pickerelweed', - 'pickerelweeds', - 'picketboat', - 'picketboats', - 'pickpocket', - 'pickpockets', - 'pickthanks', - 'picnickers', - 'picnicking', - 'picofarads', - 'picornavirus', - 'picornaviruses', - 'picosecond', - 'picoseconds', - 'picrotoxin', - 'picrotoxins', - 'pictograms', - 'pictograph', - 'pictographic', - 'pictographies', - 'pictographs', - 'pictography', - 'pictorialism', - 'pictorialisms', - 'pictorialist', - 'pictorialists', - 'pictorialization', - 'pictorializations', - 'pictorialize', - 'pictorialized', - 'pictorializes', - 'pictorializing', - 'pictorially', - 'pictorialness', - 'pictorialnesses', - 'pictorials', - 'picturephone', - 'picturephones', - 'picturesque', - 'picturesquely', - 'picturesqueness', - 'picturesquenesses', - 'picturization', - 'picturizations', - 'picturized', - 'picturizes', - 'picturizing', - 'pidginization', - 'pidginizations', - 'pidginized', - 'pidginizes', - 'pidginizing', - 'pieceworker', - 'pieceworkers', - 'pieceworks', - 'piercingly', - 'pietistically', - 'piezoelectric', - 'piezoelectrically', - 'piezoelectricities', - 'piezoelectricity', - 'piezometer', - 'piezometers', - 'piezometric', - 'pigeonhole', - 'pigeonholed', - 'pigeonholer', - 'pigeonholers', - 'pigeonholes', - 'pigeonholing', - 'pigeonites', - 'pigeonwing', - 'pigeonwings', - 'piggishness', - 'piggishnesses', - 'piggybacked', - 'piggybacking', - 'piggybacks', - 'pigheadedly', - 'pigheadedness', - 'pigheadednesses', - 'pigmentary', - 'pigmentation', - 'pigmentations', - 'pigmenting', - 'pigsticked', - 'pigsticker', - 'pigstickers', - 'pigsticking', - 'pikestaffs', - 'pikestaves', - 'pilferable', - 'pilferages', - 'pilferproof', - 'pilgarlics', - 'pilgrimage', - 'pilgrimaged', - 'pilgrimages', - 'pilgrimaging', - 'pillarless', - 'pillorying', - 'pillowcase', - 'pillowcases', - 'pilocarpine', - 'pilocarpines', - 'pilosities', - 'pilothouse', - 'pilothouses', - 'pimpernels', - 'pimpmobile', - 'pimpmobiles', - 'pincerlike', - 'pinchbecks', - 'pinchpenny', - 'pincushion', - 'pincushions', - 'pinealectomies', - 'pinealectomize', - 'pinealectomized', - 'pinealectomizes', - 'pinealectomizing', - 'pinealectomy', - 'pineapples', - 'pinfeather', - 'pinfeathers', - 'pinfolding', - 'pingrasses', - 'pinheadedness', - 'pinheadednesses', - 'pinkishness', - 'pinkishnesses', - 'pinknesses', - 'pinnacling', - 'pinnatifid', - 'pinocytoses', - 'pinocytosis', - 'pinocytotic', - 'pinocytotically', - 'pinpointed', - 'pinpointing', - 'pinpricked', - 'pinpricking', - 'pinsetters', - 'pinspotter', - 'pinspotters', - 'pinstriped', - 'pinstripes', - 'pinwheeled', - 'pinwheeling', - 'pioneering', - 'piousnesses', - 'pipefishes', - 'pipelining', - 'piperazine', - 'piperazines', - 'piperidine', - 'piperidines', - 'piperonals', - 'pipestones', - 'pipinesses', - 'pipsissewa', - 'pipsissewas', - 'pipsqueaks', - 'piquancies', - 'piquantness', - 'piquantnesses', - 'piratically', - 'piroplasma', - 'piroplasmata', - 'piroplasms', - 'pirouetted', - 'pirouettes', - 'pirouetting', - 'piscatorial', - 'pisciculture', - 'piscicultures', - 'piscivorous', - 'pistachios', - 'pistareens', - 'pistillate', - 'pistoleers', - 'pistolling', - 'pitapatted', - 'pitapatting', - 'pitchblende', - 'pitchblendes', - 'pitcherful', - 'pitcherfuls', - 'pitchersful', - 'pitchforked', - 'pitchforking', - 'pitchforks', - 'pitchpoled', - 'pitchpoles', - 'pitchpoling', - 'pitchwoman', - 'pitchwomen', - 'piteousness', - 'piteousnesses', - 'pithecanthropi', - 'pithecanthropine', - 'pithecanthropines', - 'pithecanthropus', - 'pithinesses', - 'pitiableness', - 'pitiablenesses', - 'pitifuller', - 'pitifullest', - 'pitifulness', - 'pitifulnesses', - 'pitilessly', - 'pitilessness', - 'pitilessnesses', - 'pittosporum', - 'pittosporums', - 'pituitaries', - 'pityriases', - 'pityriasis', - 'pixilation', - 'pixilations', - 'pixillated', - 'pixinesses', - 'placabilities', - 'placability', - 'placarding', - 'placatingly', - 'placations', - 'placeholder', - 'placeholders', - 'placekicked', - 'placekicker', - 'placekickers', - 'placekicking', - 'placekicks', - 'placelessly', - 'placements', - 'placentals', - 'placentation', - 'placentations', - 'placidities', - 'placidness', - 'placidnesses', - 'plagiaries', - 'plagiarise', - 'plagiarised', - 'plagiarises', - 'plagiarising', - 'plagiarism', - 'plagiarisms', - 'plagiarist', - 'plagiaristic', - 'plagiarists', - 'plagiarize', - 'plagiarized', - 'plagiarizer', - 'plagiarizers', - 'plagiarizes', - 'plagiarizing', - 'plagioclase', - 'plagioclases', - 'plagiotropic', - 'plainchant', - 'plainchants', - 'plainclothes', - 'plainclothesman', - 'plainclothesmen', - 'plainnesses', - 'plainsongs', - 'plainspoken', - 'plainspokenness', - 'plainspokennesses', - 'plaintexts', - 'plaintiffs', - 'plaintively', - 'plaintiveness', - 'plaintivenesses', - 'plaistered', - 'plaistering', - 'planarians', - 'planarities', - 'planations', - 'planchette', - 'planchettes', - 'planeloads', - 'planetaria', - 'planetarium', - 'planetariums', - 'planetesimal', - 'planetesimals', - 'planetlike', - 'planetoidal', - 'planetoids', - 'planetological', - 'planetologies', - 'planetologist', - 'planetologists', - 'planetology', - 'planetwide', - 'plangencies', - 'plangently', - 'planimeter', - 'planimeters', - 'planimetric', - 'planimetrically', - 'planishers', - 'planishing', - 'planisphere', - 'planispheres', - 'planispheric', - 'planktonic', - 'planlessly', - 'planlessness', - 'planlessnesses', - 'planographic', - 'planographies', - 'planography', - 'plantation', - 'plantations', - 'plantigrade', - 'plantigrades', - 'plantocracies', - 'plantocracy', - 'plasmagels', - 'plasmagene', - 'plasmagenes', - 'plasmalemma', - 'plasmalemmas', - 'plasmaphereses', - 'plasmapheresis', - 'plasmasols', - 'plasminogen', - 'plasminogens', - 'plasmodesm', - 'plasmodesma', - 'plasmodesmas', - 'plasmodesmata', - 'plasmodesms', - 'plasmodium', - 'plasmogamies', - 'plasmogamy', - 'plasmolyses', - 'plasmolysis', - 'plasmolytic', - 'plasmolyze', - 'plasmolyzed', - 'plasmolyzes', - 'plasmolyzing', - 'plasterboard', - 'plasterboards', - 'plasterers', - 'plastering', - 'plasterings', - 'plasterwork', - 'plasterworks', - 'plastically', - 'plasticene', - 'plasticenes', - 'plasticine', - 'plasticines', - 'plasticities', - 'plasticity', - 'plasticization', - 'plasticizations', - 'plasticize', - 'plasticized', - 'plasticizer', - 'plasticizers', - 'plasticizes', - 'plasticizing', - 'plastidial', - 'plastisols', - 'plastocyanin', - 'plastocyanins', - 'plastoquinone', - 'plastoquinones', - 'plateauing', - 'plateglass', - 'platemaker', - 'platemakers', - 'platemaking', - 'platemakings', - 'plateresque', - 'platinized', - 'platinizes', - 'platinizing', - 'platinocyanide', - 'platinocyanides', - 'platitudes', - 'platitudinal', - 'platitudinarian', - 'platitudinarians', - 'platitudinize', - 'platitudinized', - 'platitudinizes', - 'platitudinizing', - 'platitudinous', - 'platitudinously', - 'platonically', - 'platooning', - 'platterful', - 'platterfuls', - 'plattersful', - 'platyfishes', - 'platyhelminth', - 'platyhelminthic', - 'platyhelminths', - 'platypuses', - 'platyrrhine', - 'platyrrhines', - 'plausibilities', - 'plausibility', - 'plausibleness', - 'plausiblenesses', - 'playabilities', - 'playability', - 'playacting', - 'playactings', - 'playfellow', - 'playfellows', - 'playfields', - 'playfulness', - 'playfulnesses', - 'playground', - 'playgrounds', - 'playhouses', - 'playmakers', - 'playmaking', - 'playmakings', - 'playthings', - 'playwright', - 'playwrighting', - 'playwrightings', - 'playwrights', - 'playwriting', - 'playwritings', - 'pleadingly', - 'pleasances', - 'pleasanter', - 'pleasantest', - 'pleasantly', - 'pleasantness', - 'pleasantnesses', - 'pleasantries', - 'pleasantry', - 'pleasingly', - 'pleasingness', - 'pleasingnesses', - 'pleasurabilities', - 'pleasurability', - 'pleasurable', - 'pleasurableness', - 'pleasurablenesses', - 'pleasurably', - 'pleasureless', - 'pleasuring', - 'plebeianism', - 'plebeianisms', - 'plebeianly', - 'plebiscitary', - 'plebiscite', - 'plebiscites', - 'plecopteran', - 'plecopterans', - 'pleinairism', - 'pleinairisms', - 'pleinairist', - 'pleinairists', - 'pleiotropic', - 'pleiotropies', - 'pleiotropy', - 'plenipotent', - 'plenipotentiaries', - 'plenipotentiary', - 'plenishing', - 'plenitudes', - 'plenitudinous', - 'plenteously', - 'plenteousness', - 'plenteousnesses', - 'plentifully', - 'plentifulness', - 'plentifulnesses', - 'plentitude', - 'plentitudes', - 'pleochroic', - 'pleochroism', - 'pleochroisms', - 'pleomorphic', - 'pleomorphism', - 'pleomorphisms', - 'pleonastic', - 'pleonastically', - 'plerocercoid', - 'plerocercoids', - 'plesiosaur', - 'plesiosaurs', - 'plethysmogram', - 'plethysmograms', - 'plethysmograph', - 'plethysmographic', - 'plethysmographically', - 'plethysmographies', - 'plethysmographs', - 'plethysmography', - 'pleurisies', - 'pleuropneumonia', - 'pleuropneumonias', - 'pleustonic', - 'pliabilities', - 'pliability', - 'pliableness', - 'pliablenesses', - 'pliantness', - 'pliantnesses', - 'plications', - 'ploddingly', - 'plotlessness', - 'plotlessnesses', - 'plowshares', - 'pluckiness', - 'pluckinesses', - 'pluguglies', - 'plumberies', - 'plummeting', - 'plumpening', - 'plumpnesses', - 'plunderers', - 'plundering', - 'plunderous', - 'pluperfect', - 'pluperfects', - 'pluralisms', - 'pluralistic', - 'pluralistically', - 'pluralists', - 'pluralities', - 'pluralization', - 'pluralizations', - 'pluralized', - 'pluralizes', - 'pluralizing', - 'pluripotent', - 'plushiness', - 'plushinesses', - 'plushnesses', - 'plutocracies', - 'plutocracy', - 'plutocratic', - 'plutocratically', - 'plutocrats', - 'plutoniums', - 'pneumatically', - 'pneumaticities', - 'pneumaticity', - 'pneumatologies', - 'pneumatology', - 'pneumatolytic', - 'pneumatophore', - 'pneumatophores', - 'pneumococcal', - 'pneumococci', - 'pneumococcus', - 'pneumoconioses', - 'pneumoconiosis', - 'pneumograph', - 'pneumographs', - 'pneumonectomies', - 'pneumonectomy', - 'pneumonias', - 'pneumonites', - 'pneumonitides', - 'pneumonitis', - 'pneumonitises', - 'pneumothoraces', - 'pneumothorax', - 'pneumothoraxes', - 'pocketable', - 'pocketbook', - 'pocketbooks', - 'pocketfuls', - 'pocketknife', - 'pocketknives', - 'pocketsful', - 'pockmarked', - 'pockmarking', - 'pococurante', - 'pococurantism', - 'pococurantisms', - 'podiatries', - 'podiatrist', - 'podiatrists', - 'podophylli', - 'podophyllin', - 'podophyllins', - 'podophyllum', - 'podophyllums', - 'podsolization', - 'podsolizations', - 'podzolization', - 'podzolizations', - 'podzolized', - 'podzolizes', - 'podzolizing', - 'poetasters', - 'poetically', - 'poeticalness', - 'poeticalnesses', - 'poeticisms', - 'poeticized', - 'poeticizes', - 'poeticizing', - 'pogonophoran', - 'pogonophorans', - 'pogromists', - 'poignances', - 'poignancies', - 'poignantly', - 'poikilotherm', - 'poikilothermic', - 'poikilotherms', - 'poincianas', - 'poinsettia', - 'poinsettias', - 'pointedness', - 'pointednesses', - 'pointelles', - 'pointillism', - 'pointillisms', - 'pointillist', - 'pointillistic', - 'pointillists', - 'pointlessly', - 'pointlessness', - 'pointlessnesses', - 'pointtillist', - 'poisonings', - 'poisonously', - 'poisonwood', - 'poisonwoods', - 'pokeberries', - 'pokinesses', - 'polarimeter', - 'polarimeters', - 'polarimetric', - 'polarimetries', - 'polarimetry', - 'polariscope', - 'polariscopes', - 'polariscopic', - 'polarising', - 'polarities', - 'polarizabilities', - 'polarizability', - 'polarizable', - 'polarization', - 'polarizations', - 'polarizers', - 'polarizing', - 'polarographic', - 'polarographically', - 'polarographies', - 'polarography', - 'polemically', - 'polemicist', - 'polemicists', - 'polemicize', - 'polemicized', - 'polemicizes', - 'polemicizing', - 'polemizing', - 'polemonium', - 'polemoniums', - 'policewoman', - 'policewomen', - 'policyholder', - 'policyholders', - 'poliomyelitides', - 'poliomyelitis', - 'poliovirus', - 'polioviruses', - 'politburos', - 'politeness', - 'politenesses', - 'politesses', - 'politicalization', - 'politicalizations', - 'politicalize', - 'politicalized', - 'politicalizes', - 'politicalizing', - 'politically', - 'politician', - 'politicians', - 'politicise', - 'politicised', - 'politicises', - 'politicising', - 'politicization', - 'politicizations', - 'politicize', - 'politicized', - 'politicizes', - 'politicizing', - 'politicked', - 'politicker', - 'politickers', - 'politicking', - 'politicoes', - 'pollarding', - 'pollenizer', - 'pollenizers', - 'pollenoses', - 'pollenosis', - 'pollenosises', - 'pollinated', - 'pollinates', - 'pollinating', - 'pollination', - 'pollinations', - 'pollinator', - 'pollinators', - 'pollinizer', - 'pollinizers', - 'pollinoses', - 'pollinosis', - 'pollinosises', - 'pollutants', - 'pollutions', - 'polonaises', - 'poltergeist', - 'poltergeists', - 'poltrooneries', - 'poltroonery', - 'polyacrylamide', - 'polyacrylamides', - 'polyacrylonitrile', - 'polyacrylonitriles', - 'polyalcohol', - 'polyalcohols', - 'polyamides', - 'polyamines', - 'polyandries', - 'polyandrous', - 'polyanthas', - 'polyanthus', - 'polyanthuses', - 'polyatomic', - 'polybutadiene', - 'polybutadienes', - 'polycarbonate', - 'polycarbonates', - 'polycentric', - 'polycentrism', - 'polycentrisms', - 'polychaete', - 'polychaetes', - 'polychotomies', - 'polychotomous', - 'polychotomy', - 'polychromatic', - 'polychromatophilia', - 'polychromatophilias', - 'polychromatophilic', - 'polychrome', - 'polychromed', - 'polychromes', - 'polychromies', - 'polychroming', - 'polychromy', - 'polycistronic', - 'polyclinic', - 'polyclinics', - 'polyclonal', - 'polycondensation', - 'polycondensations', - 'polycrystal', - 'polycrystalline', - 'polycrystals', - 'polycyclic', - 'polycystic', - 'polycythemia', - 'polycythemias', - 'polycythemic', - 'polydactyl', - 'polydactylies', - 'polydactyly', - 'polydipsia', - 'polydipsias', - 'polydipsic', - 'polydisperse', - 'polydispersities', - 'polydispersity', - 'polyelectrolyte', - 'polyelectrolytes', - 'polyembryonic', - 'polyembryonies', - 'polyembryony', - 'polyesterification', - 'polyesterifications', - 'polyesters', - 'polyestrous', - 'polyethylene', - 'polyethylenes', - 'polygamies', - 'polygamist', - 'polygamists', - 'polygamize', - 'polygamized', - 'polygamizes', - 'polygamizing', - 'polygamous', - 'polygeneses', - 'polygenesis', - 'polygenetic', - 'polyglotism', - 'polyglotisms', - 'polyglottism', - 'polyglottisms', - 'polygonally', - 'polygonies', - 'polygonums', - 'polygrapher', - 'polygraphers', - 'polygraphic', - 'polygraphist', - 'polygraphists', - 'polygraphs', - 'polygynies', - 'polygynous', - 'polyhedral', - 'polyhedron', - 'polyhedrons', - 'polyhedroses', - 'polyhedrosis', - 'polyhistor', - 'polyhistoric', - 'polyhistors', - 'polyhydroxy', - 'polylysine', - 'polylysines', - 'polymathic', - 'polymathies', - 'polymerase', - 'polymerases', - 'polymerisation', - 'polymerisations', - 'polymerise', - 'polymerised', - 'polymerises', - 'polymerising', - 'polymerism', - 'polymerisms', - 'polymerization', - 'polymerizations', - 'polymerize', - 'polymerized', - 'polymerizes', - 'polymerizing', - 'polymorphic', - 'polymorphically', - 'polymorphism', - 'polymorphisms', - 'polymorphonuclear', - 'polymorphonuclears', - 'polymorphous', - 'polymorphously', - 'polymorphs', - 'polymyxins', - 'polyneuritides', - 'polyneuritis', - 'polyneuritises', - 'polynomial', - 'polynomials', - 'polynuclear', - 'polynucleotide', - 'polynucleotides', - 'polyolefin', - 'polyolefins', - 'polyonymous', - 'polyparies', - 'polypeptide', - 'polypeptides', - 'polypeptidic', - 'polypetalous', - 'polyphagia', - 'polyphagias', - 'polyphagies', - 'polyphagous', - 'polyphasic', - 'polyphenol', - 'polyphenolic', - 'polyphenols', - 'polyphiloprogenitive', - 'polyphones', - 'polyphonic', - 'polyphonically', - 'polyphonies', - 'polyphonous', - 'polyphonously', - 'polyphyletic', - 'polyphyletically', - 'polyploidies', - 'polyploids', - 'polyploidy', - 'polypodies', - 'polypropylene', - 'polypropylenes', - 'polyptychs', - 'polyrhythm', - 'polyrhythmic', - 'polyrhythmically', - 'polyrhythms', - 'polyribonucleotide', - 'polyribonucleotides', - 'polyribosomal', - 'polyribosome', - 'polyribosomes', - 'polysaccharide', - 'polysaccharides', - 'polysemies', - 'polysemous', - 'polysorbate', - 'polysorbates', - 'polystichous', - 'polystyrene', - 'polystyrenes', - 'polysulfide', - 'polysulfides', - 'polysyllabic', - 'polysyllabically', - 'polysyllable', - 'polysyllables', - 'polysynaptic', - 'polysynaptically', - 'polysyndeton', - 'polysyndetons', - 'polytechnic', - 'polytechnics', - 'polytenies', - 'polytheism', - 'polytheisms', - 'polytheist', - 'polytheistic', - 'polytheistical', - 'polytheists', - 'polythenes', - 'polytonalities', - 'polytonality', - 'polytonally', - 'polyunsaturated', - 'polyurethane', - 'polyurethanes', - 'polyvalence', - 'polyvalences', - 'polyvalent', - 'polywaters', - 'pomegranate', - 'pomegranates', - 'pommelling', - 'pomological', - 'pomologies', - 'pomologist', - 'pomologists', - 'pompadoured', - 'pompadours', - 'pomposities', - 'pompousness', - 'pompousnesses', - 'ponderable', - 'ponderosas', - 'ponderously', - 'ponderousness', - 'ponderousnesses', - 'poniarding', - 'pontifical', - 'pontifically', - 'pontificals', - 'pontificate', - 'pontificated', - 'pontificates', - 'pontificating', - 'pontification', - 'pontifications', - 'pontificator', - 'pontificators', - 'pontifices', - 'ponytailed', - 'poorhouses', - 'poornesses', - 'poppycocks', - 'poppyheads', - 'popularise', - 'popularised', - 'popularises', - 'popularising', - 'popularities', - 'popularity', - 'popularization', - 'popularizations', - 'popularize', - 'popularized', - 'popularizer', - 'popularizers', - 'popularizes', - 'popularizing', - 'populating', - 'population', - 'populational', - 'populations', - 'populistic', - 'populously', - 'populousness', - 'populousnesses', - 'porbeagles', - 'porcelainize', - 'porcelainized', - 'porcelainizes', - 'porcelainizing', - 'porcelainlike', - 'porcelains', - 'porcelaneous', - 'porcellaneous', - 'porcupines', - 'pornographer', - 'pornographers', - 'pornographic', - 'pornographically', - 'pornographies', - 'pornography', - 'porosities', - 'porousness', - 'porousnesses', - 'porphyrias', - 'porphyries', - 'porphyrins', - 'porphyritic', - 'porphyropsin', - 'porphyropsins', - 'porringers', - 'portabilities', - 'portability', - 'portamenti', - 'portamento', - 'portapacks', - 'portcullis', - 'portcullises', - 'portending', - 'portentous', - 'portentously', - 'portentousness', - 'portentousnesses', - 'porterages', - 'porterhouse', - 'porterhouses', - 'portfolios', - 'portioning', - 'portionless', - 'portliness', - 'portlinesses', - 'portmanteau', - 'portmanteaus', - 'portmanteaux', - 'portraitist', - 'portraitists', - 'portraiture', - 'portraitures', - 'portrayals', - 'portrayers', - 'portraying', - 'portresses', - 'portulacas', - 'poshnesses', - 'positional', - 'positionally', - 'positioned', - 'positioning', - 'positively', - 'positiveness', - 'positivenesses', - 'positivest', - 'positivism', - 'positivisms', - 'positivist', - 'positivistic', - 'positivistically', - 'positivists', - 'positivities', - 'positivity', - 'positronium', - 'positroniums', - 'posologies', - 'possessedly', - 'possessedness', - 'possessednesses', - 'possessing', - 'possession', - 'possessional', - 'possessionless', - 'possessions', - 'possessive', - 'possessively', - 'possessiveness', - 'possessivenesses', - 'possessives', - 'possessors', - 'possessory', - 'possibilities', - 'possibility', - 'possiblest', - 'postabortion', - 'postaccident', - 'postadolescent', - 'postadolescents', - 'postamputation', - 'postapocalyptic', - 'postarrest', - 'postatomic', - 'postattack', - 'postbaccalaureate', - 'postbellum', - 'postbiblical', - 'postbourgeois', - 'postcapitalist', - 'postcardlike', - 'postclassic', - 'postclassical', - 'postcoital', - 'postcollege', - 'postcolleges', - 'postcollegiate', - 'postcolonial', - 'postconception', - 'postconcert', - 'postconquest', - 'postconsonantal', - 'postconvention', - 'postcopulatory', - 'postcoronary', - 'postcranial', - 'postcranially', - 'postcrises', - 'postcrisis', - 'postdating', - 'postdeadline', - 'postdebate', - 'postdebutante', - 'postdebutantes', - 'postdelivery', - 'postdepositional', - 'postdepression', - 'postdevaluation', - 'postdiluvian', - 'postdiluvians', - 'postdivestiture', - 'postdivorce', - 'postdoctoral', - 'postdoctorate', - 'postediting', - 'posteditings', - 'postelection', - 'postembryonal', - 'postembryonic', - 'postemergence', - 'postemergency', - 'postencephalitic', - 'postepileptic', - 'posteriorities', - 'posteriority', - 'posteriorly', - 'posteriors', - 'posterities', - 'posterolateral', - 'posteruptive', - 'postexercise', - 'postexilic', - 'postexperience', - 'postexperimental', - 'postexposure', - 'postfeminist', - 'postfixing', - 'postflight', - 'postformed', - 'postforming', - 'postfracture', - 'postfractures', - 'postfreeze', - 'postganglionic', - 'postglacial', - 'postgraduate', - 'postgraduates', - 'postgraduation', - 'postharvest', - 'posthastes', - 'posthemorrhagic', - 'postholiday', - 'postholocaust', - 'posthospital', - 'posthumous', - 'posthumously', - 'posthumousness', - 'posthumousnesses', - 'posthypnotic', - 'postilions', - 'postillion', - 'postillions', - 'postimpact', - 'postimperial', - 'postinaugural', - 'postindependence', - 'postindustrial', - 'postinfection', - 'postinjection', - 'postinoculation', - 'postirradiation', - 'postischemic', - 'postisolation', - 'postlanding', - 'postlapsarian', - 'postlaunch', - 'postliberation', - 'postliterate', - 'postmarital', - 'postmarked', - 'postmarking', - 'postmastectomy', - 'postmaster', - 'postmasters', - 'postmastership', - 'postmasterships', - 'postmating', - 'postmedieval', - 'postmenopausal', - 'postmidnight', - 'postmillenarian', - 'postmillenarianism', - 'postmillenarianisms', - 'postmillenarians', - 'postmillennial', - 'postmillennialism', - 'postmillennialisms', - 'postmillennialist', - 'postmillennialists', - 'postmistress', - 'postmistresses', - 'postmodern', - 'postmodernism', - 'postmodernisms', - 'postmodernist', - 'postmodernists', - 'postmortem', - 'postmortems', - 'postnatally', - 'postneonatal', - 'postnuptial', - 'postoperative', - 'postoperatively', - 'postorbital', - 'postorgasmic', - 'postpartum', - 'postpollination', - 'postponable', - 'postponement', - 'postponements', - 'postponers', - 'postponing', - 'postposition', - 'postpositional', - 'postpositionally', - 'postpositions', - 'postpositive', - 'postpositively', - 'postprandial', - 'postpresidential', - 'postprimary', - 'postprison', - 'postproduction', - 'postproductions', - 'postpsychoanalytic', - 'postpuberty', - 'postpubescent', - 'postpubescents', - 'postrecession', - 'postresurrection', - 'postresurrections', - 'postretirement', - 'postrevolutionary', - 'postromantic', - 'postscript', - 'postscripts', - 'postseason', - 'postseasons', - 'postsecondary', - 'poststimulation', - 'poststimulatory', - 'poststimulus', - 'poststrike', - 'postsurgical', - 'postsynaptic', - 'postsynaptically', - 'postsynced', - 'postsyncing', - 'posttension', - 'posttensioned', - 'posttensioning', - 'posttensions', - 'posttranscriptional', - 'posttransfusion', - 'posttranslational', - 'posttraumatic', - 'posttreatment', - 'postulancies', - 'postulancy', - 'postulants', - 'postulated', - 'postulates', - 'postulating', - 'postulation', - 'postulational', - 'postulations', - 'postulator', - 'postulators', - 'posturings', - 'postvaccinal', - 'postvaccination', - 'postvagotomy', - 'postvasectomy', - 'postvocalic', - 'postweaning', - 'postworkshop', - 'potabilities', - 'potability', - 'potableness', - 'potablenesses', - 'potassiums', - 'potbellied', - 'potbellies', - 'potboilers', - 'potboiling', - 'potentates', - 'potentialities', - 'potentiality', - 'potentially', - 'potentials', - 'potentiate', - 'potentiated', - 'potentiates', - 'potentiating', - 'potentiation', - 'potentiations', - 'potentiator', - 'potentiators', - 'potentilla', - 'potentillas', - 'potentiometer', - 'potentiometers', - 'potentiometric', - 'potholders', - 'pothunters', - 'pothunting', - 'pothuntings', - 'potlatched', - 'potlatches', - 'potlatching', - 'potometers', - 'potpourris', - 'potshotting', - 'potteringly', - 'poulterers', - 'poulticing', - 'poultryman', - 'poultrymen', - 'pourboires', - 'pourparler', - 'pourparlers', - 'pourpoints', - 'poussetted', - 'poussettes', - 'poussetting', - 'powderless', - 'powderlike', - 'powerboats', - 'powerbroker', - 'powerbrokers', - 'powerfully', - 'powerhouse', - 'powerhouses', - 'powerlessly', - 'powerlessness', - 'powerlessnesses', - 'poxviruses', - 'pozzolanas', - 'pozzolanic', - 'practicabilities', - 'practicability', - 'practicable', - 'practicableness', - 'practicablenesses', - 'practicably', - 'practicalities', - 'practicality', - 'practically', - 'practicalness', - 'practicalnesses', - 'practicals', - 'practicers', - 'practicing', - 'practicums', - 'practising', - 'practitioner', - 'practitioners', - 'praelected', - 'praelecting', - 'praemunire', - 'praemunires', - 'praenomens', - 'praenomina', - 'praesidium', - 'praesidiums', - 'praetorial', - 'praetorian', - 'praetorians', - 'praetorship', - 'praetorships', - 'pragmatical', - 'pragmatically', - 'pragmaticism', - 'pragmaticisms', - 'pragmaticist', - 'pragmaticists', - 'pragmatics', - 'pragmatism', - 'pragmatisms', - 'pragmatist', - 'pragmatistic', - 'pragmatists', - 'praiseworthily', - 'praiseworthiness', - 'praiseworthinesses', - 'praiseworthy', - 'pralltriller', - 'pralltrillers', - 'prankishly', - 'prankishness', - 'prankishnesses', - 'pranksters', - 'praseodymium', - 'praseodymiums', - 'pratincole', - 'pratincoles', - 'prattlingly', - 'praxeological', - 'praxeologies', - 'praxeology', - 'prayerfully', - 'prayerfulness', - 'prayerfulnesses', - 'preachiest', - 'preachified', - 'preachifies', - 'preachifying', - 'preachiness', - 'preachinesses', - 'preachingly', - 'preachment', - 'preachments', - 'preadaptation', - 'preadaptations', - 'preadapted', - 'preadapting', - 'preadaptive', - 'preadmission', - 'preadmissions', - 'preadmitted', - 'preadmitting', - 'preadolescence', - 'preadolescences', - 'preadolescent', - 'preadolescents', - 'preadopted', - 'preadopting', - 'preagricultural', - 'preallotted', - 'preallotting', - 'preamplifier', - 'preamplifiers', - 'preanesthetic', - 'preanesthetics', - 'preannounce', - 'preannounced', - 'preannounces', - 'preannouncing', - 'preapprove', - 'preapproved', - 'preapproves', - 'preapproving', - 'prearrange', - 'prearranged', - 'prearrangement', - 'prearrangements', - 'prearranges', - 'prearranging', - 'preassembled', - 'preassigned', - 'preassigning', - 'preassigns', - 'preaverred', - 'preaverring', - 'prebendaries', - 'prebendary', - 'prebiblical', - 'prebilling', - 'prebinding', - 'prebiologic', - 'prebiological', - 'preblessed', - 'preblesses', - 'preblessing', - 'preboiling', - 'prebooking', - 'prebreakfast', - 'precalculi', - 'precalculus', - 'precalculuses', - 'precanceled', - 'precanceling', - 'precancellation', - 'precancellations', - 'precancelled', - 'precancelling', - 'precancels', - 'precancerous', - 'precapitalist', - 'precapitalists', - 'precarious', - 'precariously', - 'precariousness', - 'precariousnesses', - 'precasting', - 'precaution', - 'precautionary', - 'precautioned', - 'precautioning', - 'precautions', - 'precedence', - 'precedences', - 'precedencies', - 'precedency', - 'precedents', - 'precensored', - 'precensoring', - 'precensors', - 'precenting', - 'precentorial', - 'precentors', - 'precentorship', - 'precentorships', - 'preceptive', - 'preceptorial', - 'preceptorials', - 'preceptories', - 'preceptors', - 'preceptorship', - 'preceptorships', - 'preceptory', - 'precertification', - 'precertifications', - 'precertified', - 'precertifies', - 'precertify', - 'precertifying', - 'precessing', - 'precession', - 'precessional', - 'precessions', - 'prechecked', - 'prechecking', - 'prechilled', - 'prechilling', - 'preciosities', - 'preciosity', - 'preciouses', - 'preciously', - 'preciousness', - 'preciousnesses', - 'precipices', - 'precipitable', - 'precipitance', - 'precipitances', - 'precipitancies', - 'precipitancy', - 'precipitant', - 'precipitantly', - 'precipitantness', - 'precipitantnesses', - 'precipitants', - 'precipitate', - 'precipitated', - 'precipitately', - 'precipitateness', - 'precipitatenesses', - 'precipitates', - 'precipitating', - 'precipitation', - 'precipitations', - 'precipitative', - 'precipitator', - 'precipitators', - 'precipitin', - 'precipitinogen', - 'precipitinogens', - 'precipitins', - 'precipitous', - 'precipitously', - 'precipitousness', - 'precipitousnesses', - 'preciseness', - 'precisenesses', - 'precisians', - 'precisionist', - 'precisionists', - 'precisions', - 'precleaned', - 'precleaning', - 'preclearance', - 'preclearances', - 'precleared', - 'preclearing', - 'preclinical', - 'precluding', - 'preclusion', - 'preclusions', - 'preclusive', - 'preclusively', - 'precocious', - 'precociously', - 'precociousness', - 'precociousnesses', - 'precocities', - 'precognition', - 'precognitions', - 'precognitive', - 'precollege', - 'precolleges', - 'precollegiate', - 'precolonial', - 'precombustion', - 'precombustions', - 'precommitment', - 'precompute', - 'precomputed', - 'precomputer', - 'precomputers', - 'precomputes', - 'precomputing', - 'preconceive', - 'preconceived', - 'preconceives', - 'preconceiving', - 'preconception', - 'preconceptions', - 'preconcert', - 'preconcerted', - 'preconcerting', - 'preconcerts', - 'precondition', - 'preconditioned', - 'preconditioning', - 'preconditions', - 'preconquest', - 'preconscious', - 'preconsciouses', - 'preconsciously', - 'preconsonantal', - 'preconstructed', - 'precontact', - 'preconvention', - 'preconventions', - 'preconviction', - 'preconvictions', - 'precooking', - 'precooling', - 'precopulatory', - 'precreased', - 'precreases', - 'precreasing', - 'precritical', - 'precursors', - 'precursory', - 'precutting', - 'predaceous', - 'predaceousness', - 'predaceousnesses', - 'predacious', - 'predacities', - 'predations', - 'predecease', - 'predeceased', - 'predeceases', - 'predeceasing', - 'predecessor', - 'predecessors', - 'predefined', - 'predefines', - 'predefining', - 'predeliveries', - 'predelivery', - 'predeparture', - 'predepartures', - 'predesignate', - 'predesignated', - 'predesignates', - 'predesignating', - 'predestinarian', - 'predestinarianism', - 'predestinarianisms', - 'predestinarians', - 'predestinate', - 'predestinated', - 'predestinates', - 'predestinating', - 'predestination', - 'predestinations', - 'predestinator', - 'predestinators', - 'predestine', - 'predestined', - 'predestines', - 'predestining', - 'predetermination', - 'predeterminations', - 'predetermine', - 'predetermined', - 'predeterminer', - 'predeterminers', - 'predetermines', - 'predetermining', - 'predevaluation', - 'predevaluations', - 'predevelopment', - 'predevelopments', - 'prediabetes', - 'prediabeteses', - 'prediabetic', - 'prediabetics', - 'predicable', - 'predicables', - 'predicament', - 'predicaments', - 'predicated', - 'predicates', - 'predicating', - 'predication', - 'predications', - 'predicative', - 'predicatively', - 'predicatory', - 'predictabilities', - 'predictability', - 'predictable', - 'predictably', - 'predicting', - 'prediction', - 'predictions', - 'predictive', - 'predictively', - 'predictors', - 'predigested', - 'predigesting', - 'predigestion', - 'predigestions', - 'predigests', - 'predilection', - 'predilections', - 'predischarge', - 'predischarged', - 'predischarges', - 'predischarging', - 'prediscoveries', - 'prediscovery', - 'predispose', - 'predisposed', - 'predisposes', - 'predisposing', - 'predisposition', - 'predispositions', - 'prednisolone', - 'prednisolones', - 'prednisone', - 'prednisones', - 'predoctoral', - 'predominance', - 'predominances', - 'predominancies', - 'predominancy', - 'predominant', - 'predominantly', - 'predominate', - 'predominated', - 'predominately', - 'predominates', - 'predominating', - 'predomination', - 'predominations', - 'predrilled', - 'predrilling', - 'predynastic', - 'preeclampsia', - 'preeclampsias', - 'preeclamptic', - 'preediting', - 'preelected', - 'preelecting', - 'preelection', - 'preelections', - 'preelectric', - 'preembargo', - 'preemergence', - 'preemergent', - 'preeminence', - 'preeminences', - 'preeminent', - 'preeminently', - 'preemployment', - 'preemployments', - 'preempting', - 'preemption', - 'preemptions', - 'preemptive', - 'preemptively', - 'preemptors', - 'preemptory', - 'preenacted', - 'preenacting', - 'preenrollment', - 'preenrollments', - 'preerected', - 'preerecting', - 'preestablish', - 'preestablished', - 'preestablishes', - 'preestablishing', - 'preethical', - 'preexisted', - 'preexistence', - 'preexistences', - 'preexistent', - 'preexisting', - 'preexperiment', - 'preexperiments', - 'prefabbing', - 'prefabricate', - 'prefabricated', - 'prefabricates', - 'prefabricating', - 'prefabrication', - 'prefabrications', - 'prefascist', - 'prefascists', - 'prefectural', - 'prefecture', - 'prefectures', - 'preferabilities', - 'preferability', - 'preferable', - 'preferably', - 'preference', - 'preferences', - 'preferential', - 'preferentially', - 'preferment', - 'preferments', - 'preferrers', - 'preferring', - 'prefiguration', - 'prefigurations', - 'prefigurative', - 'prefiguratively', - 'prefigurativeness', - 'prefigurativenesses', - 'prefigured', - 'prefigurement', - 'prefigurements', - 'prefigures', - 'prefiguring', - 'prefinance', - 'prefinanced', - 'prefinances', - 'prefinancing', - 'prefocused', - 'prefocuses', - 'prefocusing', - 'prefocussed', - 'prefocusses', - 'prefocussing', - 'preformation', - 'preformationist', - 'preformationists', - 'preformations', - 'preformats', - 'preformatted', - 'preformatting', - 'preforming', - 'preformulate', - 'preformulated', - 'preformulates', - 'preformulating', - 'prefranked', - 'prefranking', - 'prefreezes', - 'prefreezing', - 'prefreshman', - 'prefreshmen', - 'prefrontal', - 'prefrontals', - 'preganglionic', - 'pregenital', - 'pregnabilities', - 'pregnability', - 'pregnancies', - 'pregnantly', - 'pregnenolone', - 'pregnenolones', - 'preharvest', - 'preharvests', - 'preheadache', - 'preheaters', - 'preheating', - 'prehensile', - 'prehensilities', - 'prehensility', - 'prehension', - 'prehensions', - 'prehistorian', - 'prehistorians', - 'prehistoric', - 'prehistorical', - 'prehistorically', - 'prehistories', - 'prehistory', - 'preholiday', - 'prehominid', - 'prehominids', - 'preignition', - 'preignitions', - 'preimplantation', - 'preinaugural', - 'preincorporation', - 'preincorporations', - 'preinduction', - 'preinductions', - 'preindustrial', - 'preinterview', - 'preinterviewed', - 'preinterviewing', - 'preinterviews', - 'preinvasion', - 'prejudgers', - 'prejudging', - 'prejudgment', - 'prejudgments', - 'prejudiced', - 'prejudices', - 'prejudicial', - 'prejudicially', - 'prejudicialness', - 'prejudicialnesses', - 'prejudicing', - 'prekindergarten', - 'prekindergartens', - 'prelapsarian', - 'prelatures', - 'prelecting', - 'prelection', - 'prelections', - 'prelibation', - 'prelibations', - 'preliminaries', - 'preliminarily', - 'preliminary', - 'prelimited', - 'prelimiting', - 'preliterary', - 'preliterate', - 'preliterates', - 'prelogical', - 'preluncheon', - 'prelusions', - 'prelusively', - 'premalignant', - 'premanufacture', - 'premanufactured', - 'premanufactures', - 'premanufacturing', - 'premarital', - 'premaritally', - 'premarketing', - 'premarketings', - 'premarriage', - 'premarriages', - 'prematurely', - 'prematureness', - 'prematurenesses', - 'prematures', - 'prematurities', - 'prematurity', - 'premaxilla', - 'premaxillae', - 'premaxillaries', - 'premaxillary', - 'premaxillas', - 'premeasure', - 'premeasured', - 'premeasures', - 'premeasuring', - 'premedical', - 'premedieval', - 'premeditate', - 'premeditated', - 'premeditatedly', - 'premeditates', - 'premeditating', - 'premeditation', - 'premeditations', - 'premeditative', - 'premeditator', - 'premeditators', - 'premeiotic', - 'premenopausal', - 'premenstrual', - 'premenstrually', - 'premiering', - 'premiership', - 'premierships', - 'premigration', - 'premillenarian', - 'premillenarianism', - 'premillenarianisms', - 'premillenarians', - 'premillennial', - 'premillennialism', - 'premillennialisms', - 'premillennialist', - 'premillennialists', - 'premillennially', - 'premodification', - 'premodifications', - 'premodified', - 'premodifies', - 'premodifying', - 'premoisten', - 'premoistened', - 'premoistening', - 'premoistens', - 'premolding', - 'premonished', - 'premonishes', - 'premonishing', - 'premonition', - 'premonitions', - 'premonitorily', - 'premonitory', - 'premunition', - 'premunitions', - 'premycotic', - 'prenatally', - 'prenominate', - 'prenominated', - 'prenominates', - 'prenominating', - 'prenomination', - 'prenominations', - 'prenotification', - 'prenotifications', - 'prenotified', - 'prenotifies', - 'prenotifying', - 'prenotions', - 'prenticing', - 'prenumbered', - 'prenumbering', - 'prenumbers', - 'prenuptial', - 'preoccupancies', - 'preoccupancy', - 'preoccupation', - 'preoccupations', - 'preoccupied', - 'preoccupies', - 'preoccupying', - 'preopening', - 'preoperational', - 'preoperative', - 'preoperatively', - 'preordained', - 'preordaining', - 'preordainment', - 'preordainments', - 'preordains', - 'preordered', - 'preordering', - 'preordination', - 'preordinations', - 'preovulatory', - 'prepackage', - 'prepackaged', - 'prepackages', - 'prepackaging', - 'prepacking', - 'preparation', - 'preparations', - 'preparative', - 'preparatively', - 'preparatives', - 'preparator', - 'preparatorily', - 'preparators', - 'preparatory', - 'preparedly', - 'preparedness', - 'preparednesses', - 'prepasting', - 'prepayment', - 'prepayments', - 'prepensely', - 'preperformance', - 'preperformances', - 'preplacing', - 'preplanned', - 'preplanning', - 'preplanting', - 'preponderance', - 'preponderances', - 'preponderancies', - 'preponderancy', - 'preponderant', - 'preponderantly', - 'preponderate', - 'preponderated', - 'preponderately', - 'preponderates', - 'preponderating', - 'preponderation', - 'preponderations', - 'preportion', - 'preportioned', - 'preportioning', - 'preportions', - 'preposition', - 'prepositional', - 'prepositionally', - 'prepositions', - 'prepositive', - 'prepositively', - 'prepossess', - 'prepossessed', - 'prepossesses', - 'prepossessing', - 'prepossession', - 'prepossessions', - 'preposterous', - 'preposterously', - 'preposterousness', - 'preposterousnesses', - 'prepotencies', - 'prepotency', - 'prepotently', - 'preppiness', - 'preppinesses', - 'preprandial', - 'preprepared', - 'prepresidential', - 'prepricing', - 'preprimary', - 'preprinted', - 'preprinting', - 'preprocess', - 'preprocessed', - 'preprocesses', - 'preprocessing', - 'preprocessor', - 'preprocessors', - 'preproduction', - 'preproductions', - 'preprofessional', - 'preprogram', - 'preprogramed', - 'preprograming', - 'preprogrammed', - 'preprogramming', - 'preprograms', - 'prepsychedelic', - 'prepuberal', - 'prepubertal', - 'prepuberties', - 'prepuberty', - 'prepubescence', - 'prepubescences', - 'prepubescent', - 'prepubescents', - 'prepublication', - 'prepublications', - 'prepunched', - 'prepunches', - 'prepunching', - 'prepurchase', - 'prepurchased', - 'prepurchases', - 'prepurchasing', - 'prequalification', - 'prequalifications', - 'prequalified', - 'prequalifies', - 'prequalify', - 'prequalifying', - 'prerecession', - 'prerecorded', - 'prerecording', - 'prerecords', - 'preregister', - 'preregistered', - 'preregistering', - 'preregisters', - 'preregistration', - 'preregistrations', - 'prerehearsal', - 'prerelease', - 'prereleases', - 'prerequire', - 'prerequired', - 'prerequires', - 'prerequiring', - 'prerequisite', - 'prerequisites', - 'preretirement', - 'preretirements', - 'prerevisionist', - 'prerevisionists', - 'prerevolution', - 'prerevolutionary', - 'prerogative', - 'prerogatived', - 'prerogatives', - 'preromantic', - 'presageful', - 'presanctified', - 'presbyopes', - 'presbyopia', - 'presbyopias', - 'presbyopic', - 'presbyopics', - 'presbyterate', - 'presbyterates', - 'presbyterial', - 'presbyterially', - 'presbyterials', - 'presbyterian', - 'presbyteries', - 'presbyters', - 'presbytery', - 'preschedule', - 'prescheduled', - 'preschedules', - 'prescheduling', - 'preschooler', - 'preschoolers', - 'preschools', - 'prescience', - 'presciences', - 'prescientific', - 'presciently', - 'prescinded', - 'prescinding', - 'prescoring', - 'prescreened', - 'prescreening', - 'prescreens', - 'prescribed', - 'prescriber', - 'prescribers', - 'prescribes', - 'prescribing', - 'prescription', - 'prescriptions', - 'prescriptive', - 'prescriptively', - 'prescripts', - 'preseasons', - 'preselected', - 'preselecting', - 'preselection', - 'preselections', - 'preselects', - 'preselling', - 'presentabilities', - 'presentability', - 'presentable', - 'presentableness', - 'presentablenesses', - 'presentably', - 'presentation', - 'presentational', - 'presentations', - 'presentative', - 'presentees', - 'presentence', - 'presentenced', - 'presentences', - 'presentencing', - 'presentencings', - 'presenters', - 'presentient', - 'presentiment', - 'presentimental', - 'presentiments', - 'presenting', - 'presentism', - 'presentisms', - 'presentist', - 'presentment', - 'presentments', - 'presentness', - 'presentnesses', - 'preservabilities', - 'preservability', - 'preservable', - 'preservation', - 'preservationist', - 'preservationists', - 'preservations', - 'preservative', - 'preservatives', - 'preservers', - 'preservice', - 'preserving', - 'presetting', - 'presettlement', - 'presettlements', - 'preshaping', - 'preshowing', - 'preshrinking', - 'preshrinks', - 'preshrunken', - 'presidencies', - 'presidency', - 'presidential', - 'presidentially', - 'presidents', - 'presidentship', - 'presidentships', - 'presidiary', - 'presidiums', - 'presifting', - 'presignified', - 'presignifies', - 'presignify', - 'presignifying', - 'preslaughter', - 'preslicing', - 'presoaking', - 'presorting', - 'prespecified', - 'prespecifies', - 'prespecify', - 'prespecifying', - 'pressboard', - 'pressboards', - 'pressingly', - 'pressmarks', - 'pressrooms', - 'pressureless', - 'pressuring', - 'pressurise', - 'pressurised', - 'pressurises', - 'pressurising', - 'pressurization', - 'pressurizations', - 'pressurize', - 'pressurized', - 'pressurizer', - 'pressurizers', - 'pressurizes', - 'pressurizing', - 'pressworks', - 'prestamped', - 'prestamping', - 'presterilize', - 'presterilized', - 'presterilizes', - 'presterilizing', - 'prestidigitation', - 'prestidigitations', - 'prestidigitator', - 'prestidigitators', - 'prestigeful', - 'prestigious', - 'prestigiously', - 'prestigiousness', - 'prestigiousnesses', - 'prestissimo', - 'prestorage', - 'prestorages', - 'prestressed', - 'prestresses', - 'prestressing', - 'prestructure', - 'prestructured', - 'prestructures', - 'prestructuring', - 'presumable', - 'presumably', - 'presumedly', - 'presumingly', - 'presumption', - 'presumptions', - 'presumptive', - 'presumptively', - 'presumptuous', - 'presumptuously', - 'presumptuousness', - 'presumptuousnesses', - 'presuppose', - 'presupposed', - 'presupposes', - 'presupposing', - 'presupposition', - 'presuppositional', - 'presuppositions', - 'presurgery', - 'presweeten', - 'presweetened', - 'presweetening', - 'presweetens', - 'presymptomatic', - 'presynaptic', - 'presynaptically', - 'pretasting', - 'pretechnological', - 'pretelevision', - 'pretendedly', - 'pretenders', - 'pretending', - 'pretension', - 'pretensioned', - 'pretensioning', - 'pretensionless', - 'pretensions', - 'pretentious', - 'pretentiously', - 'pretentiousness', - 'pretentiousnesses', - 'preterites', - 'preterminal', - 'pretermination', - 'preterminations', - 'pretermission', - 'pretermissions', - 'pretermits', - 'pretermitted', - 'pretermitting', - 'preternatural', - 'preternaturally', - 'preternaturalness', - 'preternaturalnesses', - 'pretesting', - 'pretexting', - 'pretheater', - 'pretorians', - 'pretournament', - 'pretournaments', - 'pretrained', - 'pretraining', - 'pretreated', - 'pretreating', - 'pretreatment', - 'pretreatments', - 'pretrimmed', - 'pretrimming', - 'prettification', - 'prettifications', - 'prettified', - 'prettifier', - 'prettifiers', - 'prettifies', - 'prettifying', - 'prettiness', - 'prettinesses', - 'preunification', - 'preuniting', - 'preuniversity', - 'prevailing', - 'prevalence', - 'prevalences', - 'prevalently', - 'prevalents', - 'prevaricate', - 'prevaricated', - 'prevaricates', - 'prevaricating', - 'prevarication', - 'prevarications', - 'prevaricator', - 'prevaricators', - 'prevenient', - 'preveniently', - 'preventabilities', - 'preventability', - 'preventable', - 'preventative', - 'preventatives', - 'preventers', - 'preventible', - 'preventing', - 'prevention', - 'preventions', - 'preventive', - 'preventively', - 'preventiveness', - 'preventivenesses', - 'preventives', - 'previewers', - 'previewing', - 'previously', - 'previousness', - 'previousnesses', - 'previsional', - 'previsionary', - 'previsioned', - 'previsioning', - 'previsions', - 'prevocalic', - 'prevocational', - 'prewarming', - 'prewarning', - 'prewashing', - 'preweaning', - 'prewrapped', - 'prewrapping', - 'prewriting', - 'prewritings', - 'pricelessly', - 'prickliest', - 'prickliness', - 'pricklinesses', - 'pridefully', - 'pridefulness', - 'pridefulnesses', - 'priestesses', - 'priesthood', - 'priesthoods', - 'priestlier', - 'priestliest', - 'priestliness', - 'priestlinesses', - 'priggeries', - 'priggishly', - 'priggishness', - 'priggishnesses', - 'primalities', - 'primateship', - 'primateships', - 'primatological', - 'primatologies', - 'primatologist', - 'primatologists', - 'primatology', - 'primenesses', - 'primevally', - 'primiparae', - 'primiparas', - 'primiparous', - 'primitively', - 'primitiveness', - 'primitivenesses', - 'primitives', - 'primitivism', - 'primitivisms', - 'primitivist', - 'primitivistic', - 'primitivists', - 'primitivities', - 'primitivity', - 'primnesses', - 'primogenitor', - 'primogenitors', - 'primogeniture', - 'primogenitures', - 'primordial', - 'primordially', - 'primordium', - 'princedoms', - 'princelets', - 'princelier', - 'princeliest', - 'princeliness', - 'princelinesses', - 'princeling', - 'princelings', - 'princeship', - 'princeships', - 'princesses', - 'principalities', - 'principality', - 'principally', - 'principals', - 'principalship', - 'principalships', - 'principium', - 'principled', - 'principles', - 'printabilities', - 'printability', - 'printeries', - 'printheads', - 'printmaker', - 'printmakers', - 'printmaking', - 'printmakings', - 'prioresses', - 'priorities', - 'prioritization', - 'prioritizations', - 'prioritize', - 'prioritized', - 'prioritizes', - 'prioritizing', - 'priorships', - 'prismatically', - 'prismatoid', - 'prismatoids', - 'prismoidal', - 'prissiness', - 'prissinesses', - 'pristinely', - 'privatdocent', - 'privatdocents', - 'privatdozent', - 'privatdozents', - 'privateered', - 'privateering', - 'privateers', - 'privateness', - 'privatenesses', - 'privations', - 'privatised', - 'privatises', - 'privatising', - 'privatisms', - 'privatively', - 'privatives', - 'privatization', - 'privatizations', - 'privatized', - 'privatizes', - 'privatizing', - 'privileged', - 'privileges', - 'privileging', - 'prizefight', - 'prizefighter', - 'prizefighters', - 'prizefighting', - 'prizefightings', - 'prizefights', - 'prizewinner', - 'prizewinners', - 'prizewinning', - 'proabortion', - 'probabilism', - 'probabilisms', - 'probabilist', - 'probabilistic', - 'probabilistically', - 'probabilists', - 'probabilities', - 'probability', - 'probational', - 'probationally', - 'probationary', - 'probationer', - 'probationers', - 'probations', - 'probenecid', - 'probenecids', - 'problematic', - 'problematical', - 'problematically', - 'problematics', - 'proboscidean', - 'proboscideans', - 'proboscides', - 'proboscidian', - 'proboscidians', - 'proboscises', - 'procambial', - 'procambium', - 'procambiums', - 'procarbazine', - 'procarbazines', - 'procaryote', - 'procaryotes', - 'procathedral', - 'procathedrals', - 'procedural', - 'procedurally', - 'procedurals', - 'procedures', - 'proceeding', - 'proceedings', - 'procephalic', - 'procercoid', - 'procercoids', - 'processabilities', - 'processability', - 'processable', - 'processibilities', - 'processibility', - 'processible', - 'processing', - 'procession', - 'processional', - 'processionally', - 'processionals', - 'processioned', - 'processioning', - 'processions', - 'processors', - 'proclaimed', - 'proclaimer', - 'proclaimers', - 'proclaiming', - 'proclamation', - 'proclamations', - 'proclitics', - 'proclivities', - 'proclivity', - 'proconsular', - 'proconsulate', - 'proconsulates', - 'proconsuls', - 'proconsulship', - 'proconsulships', - 'procrastinate', - 'procrastinated', - 'procrastinates', - 'procrastinating', - 'procrastination', - 'procrastinations', - 'procrastinator', - 'procrastinators', - 'procreated', - 'procreates', - 'procreating', - 'procreation', - 'procreations', - 'procreative', - 'procreator', - 'procreators', - 'procrustean', - 'procryptic', - 'proctodaea', - 'proctodaeum', - 'proctodaeums', - 'proctologic', - 'proctological', - 'proctologies', - 'proctologist', - 'proctologists', - 'proctology', - 'proctorial', - 'proctoring', - 'proctorship', - 'proctorships', - 'procumbent', - 'procurable', - 'procuration', - 'procurations', - 'procurator', - 'procuratorial', - 'procurators', - 'procurement', - 'procurements', - 'prodigalities', - 'prodigality', - 'prodigally', - 'prodigious', - 'prodigiously', - 'prodigiousness', - 'prodigiousnesses', - 'prodromata', - 'producible', - 'production', - 'productional', - 'productions', - 'productive', - 'productively', - 'productiveness', - 'productivenesses', - 'productivities', - 'productivity', - 'proenzymes', - 'proestruses', - 'profanation', - 'profanations', - 'profanatory', - 'profaneness', - 'profanenesses', - 'profanities', - 'professedly', - 'professing', - 'profession', - 'professional', - 'professionalism', - 'professionalisms', - 'professionalization', - 'professionalizations', - 'professionalize', - 'professionalized', - 'professionalizes', - 'professionalizing', - 'professionally', - 'professionals', - 'professions', - 'professorate', - 'professorates', - 'professorial', - 'professorially', - 'professoriat', - 'professoriate', - 'professoriates', - 'professoriats', - 'professors', - 'professorship', - 'professorships', - 'proffering', - 'proficiencies', - 'proficiency', - 'proficient', - 'proficiently', - 'proficients', - 'profitabilities', - 'profitability', - 'profitable', - 'profitableness', - 'profitablenesses', - 'profitably', - 'profiteered', - 'profiteering', - 'profiteers', - 'profiterole', - 'profiteroles', - 'profitless', - 'profitwise', - 'profligacies', - 'profligacy', - 'profligate', - 'profligately', - 'profligates', - 'profounder', - 'profoundest', - 'profoundly', - 'profoundness', - 'profoundnesses', - 'profundities', - 'profundity', - 'profuseness', - 'profusenesses', - 'profusions', - 'progenitor', - 'progenitors', - 'progestational', - 'progesterone', - 'progesterones', - 'progestins', - 'progestogen', - 'progestogenic', - 'progestogens', - 'proglottid', - 'proglottides', - 'proglottids', - 'proglottis', - 'prognathism', - 'prognathisms', - 'prognathous', - 'prognosing', - 'prognostic', - 'prognosticate', - 'prognosticated', - 'prognosticates', - 'prognosticating', - 'prognostication', - 'prognostications', - 'prognosticative', - 'prognosticator', - 'prognosticators', - 'prognostics', - 'programers', - 'programing', - 'programings', - 'programmabilities', - 'programmability', - 'programmable', - 'programmables', - 'programmatic', - 'programmatically', - 'programmed', - 'programmer', - 'programmers', - 'programmes', - 'programming', - 'programmings', - 'progressed', - 'progresses', - 'progressing', - 'progression', - 'progressional', - 'progressions', - 'progressive', - 'progressively', - 'progressiveness', - 'progressivenesses', - 'progressives', - 'progressivism', - 'progressivisms', - 'progressivist', - 'progressivistic', - 'progressivists', - 'progressivities', - 'progressivity', - 'prohibited', - 'prohibiting', - 'prohibition', - 'prohibitionist', - 'prohibitionists', - 'prohibitions', - 'prohibitive', - 'prohibitively', - 'prohibitiveness', - 'prohibitivenesses', - 'prohibitory', - 'proinsulin', - 'proinsulins', - 'projectable', - 'projectile', - 'projectiles', - 'projecting', - 'projection', - 'projectional', - 'projectionist', - 'projectionists', - 'projections', - 'projective', - 'projectively', - 'projectors', - 'prokaryote', - 'prokaryotes', - 'prokaryotic', - 'prolactins', - 'prolamines', - 'prolapsing', - 'prolegomena', - 'prolegomenon', - 'prolegomenous', - 'proleptically', - 'proletarian', - 'proletarianise', - 'proletarianised', - 'proletarianises', - 'proletarianising', - 'proletarianization', - 'proletarianizations', - 'proletarianize', - 'proletarianized', - 'proletarianizes', - 'proletarianizing', - 'proletarians', - 'proletariat', - 'proletariats', - 'proliferate', - 'proliferated', - 'proliferates', - 'proliferating', - 'proliferation', - 'proliferations', - 'proliferative', - 'prolificacies', - 'prolificacy', - 'prolifically', - 'prolificities', - 'prolificity', - 'prolificness', - 'prolificnesses', - 'prolixities', - 'prolocutor', - 'prolocutors', - 'prologized', - 'prologizes', - 'prologizing', - 'prologuing', - 'prologuize', - 'prologuized', - 'prologuizes', - 'prologuizing', - 'prolongation', - 'prolongations', - 'prolongers', - 'prolonging', - 'prolusions', - 'promenaded', - 'promenader', - 'promenaders', - 'promenades', - 'promenading', - 'promethium', - 'promethiums', - 'prominence', - 'prominences', - 'prominently', - 'promiscuities', - 'promiscuity', - 'promiscuous', - 'promiscuously', - 'promiscuousness', - 'promiscuousnesses', - 'promisingly', - 'promissory', - 'promontories', - 'promontory', - 'promotabilities', - 'promotability', - 'promotable', - 'promotional', - 'promotions', - 'promotiveness', - 'promotivenesses', - 'promptbook', - 'promptbooks', - 'promptitude', - 'promptitudes', - 'promptness', - 'promptnesses', - 'promulgate', - 'promulgated', - 'promulgates', - 'promulgating', - 'promulgation', - 'promulgations', - 'promulgator', - 'promulgators', - 'promulging', - 'pronations', - 'pronatores', - 'pronenesses', - 'pronephric', - 'pronephros', - 'pronephroses', - 'pronghorns', - 'pronominal', - 'pronominally', - 'pronounceabilities', - 'pronounceability', - 'pronounceable', - 'pronounced', - 'pronouncedly', - 'pronouncement', - 'pronouncements', - 'pronouncer', - 'pronouncers', - 'pronounces', - 'pronouncing', - 'pronuclear', - 'pronucleus', - 'pronucleuses', - 'pronunciamento', - 'pronunciamentoes', - 'pronunciamentos', - 'pronunciation', - 'pronunciational', - 'pronunciations', - 'proofreader', - 'proofreaders', - 'proofreading', - 'proofreads', - 'proofrooms', - 'propaedeutic', - 'propaedeutics', - 'propagable', - 'propaganda', - 'propagandas', - 'propagandist', - 'propagandistic', - 'propagandistically', - 'propagandists', - 'propagandize', - 'propagandized', - 'propagandizer', - 'propagandizers', - 'propagandizes', - 'propagandizing', - 'propagated', - 'propagates', - 'propagating', - 'propagation', - 'propagations', - 'propagative', - 'propagator', - 'propagators', - 'propagules', - 'propellant', - 'propellants', - 'propellent', - 'propellents', - 'propellers', - 'propelling', - 'propellors', - 'propending', - 'propensities', - 'propensity', - 'properdins', - 'properness', - 'propernesses', - 'propertied', - 'properties', - 'propertyless', - 'propertylessness', - 'propertylessnesses', - 'prophecies', - 'prophesied', - 'prophesier', - 'prophesiers', - 'prophesies', - 'prophesying', - 'prophetess', - 'prophetesses', - 'prophethood', - 'prophethoods', - 'prophetical', - 'prophetically', - 'prophylactic', - 'prophylactically', - 'prophylactics', - 'prophylaxes', - 'prophylaxis', - 'propinquities', - 'propinquity', - 'propionate', - 'propionates', - 'propitiate', - 'propitiated', - 'propitiates', - 'propitiating', - 'propitiation', - 'propitiations', - 'propitiator', - 'propitiators', - 'propitiatory', - 'propitious', - 'propitiously', - 'propitiousness', - 'propitiousnesses', - 'proplastid', - 'proplastids', - 'propolises', - 'proponents', - 'proportion', - 'proportionable', - 'proportionably', - 'proportional', - 'proportionalities', - 'proportionality', - 'proportionally', - 'proportionals', - 'proportionate', - 'proportionated', - 'proportionately', - 'proportionates', - 'proportionating', - 'proportioned', - 'proportioning', - 'proportions', - 'proposition', - 'propositional', - 'propositioned', - 'propositioning', - 'propositions', - 'propositus', - 'propounded', - 'propounder', - 'propounders', - 'propounding', - 'propoxyphene', - 'propoxyphenes', - 'propraetor', - 'propraetors', - 'propranolol', - 'propranolols', - 'propretors', - 'proprietaries', - 'proprietary', - 'proprieties', - 'proprietor', - 'proprietorial', - 'proprietors', - 'proprietorship', - 'proprietorships', - 'proprietress', - 'proprietresses', - 'proprioception', - 'proprioceptions', - 'proprioceptive', - 'proprioceptor', - 'proprioceptors', - 'propulsion', - 'propulsions', - 'propulsive', - 'propylaeum', - 'propylenes', - 'prorations', - 'prorogated', - 'prorogates', - 'prorogating', - 'prorogation', - 'prorogations', - 'proroguing', - 'prosaically', - 'prosateurs', - 'prosauropod', - 'prosauropods', - 'proscenium', - 'prosceniums', - 'prosciutti', - 'prosciutto', - 'prosciuttos', - 'proscribed', - 'proscriber', - 'proscribers', - 'proscribes', - 'proscribing', - 'proscription', - 'proscriptions', - 'proscriptive', - 'proscriptively', - 'prosecting', - 'prosectors', - 'prosecutable', - 'prosecuted', - 'prosecutes', - 'prosecuting', - 'prosecution', - 'prosecutions', - 'prosecutor', - 'prosecutorial', - 'prosecutors', - 'proselyted', - 'proselytes', - 'proselyting', - 'proselytise', - 'proselytised', - 'proselytises', - 'proselytising', - 'proselytism', - 'proselytisms', - 'proselytization', - 'proselytizations', - 'proselytize', - 'proselytized', - 'proselytizer', - 'proselytizers', - 'proselytizes', - 'proselytizing', - 'proseminar', - 'proseminars', - 'prosencephala', - 'prosencephalic', - 'prosencephalon', - 'prosimians', - 'prosinesses', - 'prosobranch', - 'prosobranchs', - 'prosodical', - 'prosodically', - 'prosodists', - 'prosopographical', - 'prosopographies', - 'prosopography', - 'prosopopoeia', - 'prosopopoeias', - 'prospected', - 'prospecting', - 'prospective', - 'prospectively', - 'prospector', - 'prospectors', - 'prospectus', - 'prospectuses', - 'prospering', - 'prosperities', - 'prosperity', - 'prosperous', - 'prosperously', - 'prosperousness', - 'prosperousnesses', - 'prostacyclin', - 'prostacyclins', - 'prostaglandin', - 'prostaglandins', - 'prostatectomies', - 'prostatectomy', - 'prostatism', - 'prostatisms', - 'prostatites', - 'prostatitides', - 'prostatitis', - 'prostatitises', - 'prostheses', - 'prosthesis', - 'prosthetic', - 'prosthetically', - 'prosthetics', - 'prosthetist', - 'prosthetists', - 'prosthodontics', - 'prosthodontist', - 'prosthodontists', - 'prostitute', - 'prostituted', - 'prostitutes', - 'prostituting', - 'prostitution', - 'prostitutions', - 'prostitutor', - 'prostitutors', - 'prostomial', - 'prostomium', - 'prostrated', - 'prostrates', - 'prostrating', - 'prostration', - 'prostrations', - 'protactinium', - 'protactiniums', - 'protagonist', - 'protagonists', - 'protamines', - 'protectant', - 'protectants', - 'protecting', - 'protection', - 'protectionism', - 'protectionisms', - 'protectionist', - 'protectionists', - 'protections', - 'protective', - 'protectively', - 'protectiveness', - 'protectivenesses', - 'protectoral', - 'protectorate', - 'protectorates', - 'protectories', - 'protectors', - 'protectorship', - 'protectorships', - 'protectory', - 'protectress', - 'protectresses', - 'proteinaceous', - 'proteinase', - 'proteinases', - 'proteinuria', - 'proteinurias', - 'protending', - 'protensive', - 'protensively', - 'proteoglycan', - 'proteoglycans', - 'proteolyses', - 'proteolysis', - 'proteolytic', - 'proteolytically', - 'protestant', - 'protestants', - 'protestation', - 'protestations', - 'protesters', - 'protesting', - 'protestors', - 'prothalamia', - 'prothalamion', - 'prothalamium', - 'prothallia', - 'prothallium', - 'prothallus', - 'prothalluses', - 'prothonotarial', - 'prothonotaries', - 'prothonotary', - 'prothoraces', - 'prothoracic', - 'prothoraxes', - 'prothrombin', - 'prothrombins', - 'protistans', - 'protocoled', - 'protocoling', - 'protocolled', - 'protocolling', - 'protoderms', - 'protogalaxies', - 'protogalaxy', - 'protohistorian', - 'protohistorians', - 'protohistoric', - 'protohistories', - 'protohistory', - 'protohuman', - 'protohumans', - 'protolanguage', - 'protolanguages', - 'protomartyr', - 'protomartyrs', - 'protonated', - 'protonates', - 'protonating', - 'protonation', - 'protonations', - 'protonemal', - 'protonemata', - 'protonematal', - 'protonotaries', - 'protonotary', - 'protopathic', - 'protophloem', - 'protophloems', - 'protoplanet', - 'protoplanetary', - 'protoplanets', - 'protoplasm', - 'protoplasmic', - 'protoplasms', - 'protoplast', - 'protoplasts', - 'protoporphyrin', - 'protoporphyrins', - 'protostars', - 'protostele', - 'protosteles', - 'protostelic', - 'protostome', - 'protostomes', - 'prototroph', - 'prototrophic', - 'prototrophies', - 'prototrophs', - 'prototrophy', - 'prototypal', - 'prototyped', - 'prototypes', - 'prototypic', - 'prototypical', - 'prototypically', - 'prototyping', - 'protoxylem', - 'protoxylems', - 'protozoans', - 'protozoologies', - 'protozoologist', - 'protozoologists', - 'protozoology', - 'protracted', - 'protractile', - 'protracting', - 'protraction', - 'protractions', - 'protractive', - 'protractor', - 'protractors', - 'protreptic', - 'protreptics', - 'protruding', - 'protrusible', - 'protrusion', - 'protrusions', - 'protrusive', - 'protrusively', - 'protrusiveness', - 'protrusivenesses', - 'protuberance', - 'protuberances', - 'protuberant', - 'protuberantly', - 'proudhearted', - 'proustites', - 'provableness', - 'provablenesses', - 'provascular', - 'provenance', - 'provenances', - 'provenders', - 'provenience', - 'proveniences', - 'proventriculi', - 'proventriculus', - 'proverbial', - 'proverbially', - 'proverbing', - 'providence', - 'providences', - 'providential', - 'providentially', - 'providently', - 'provincial', - 'provincialism', - 'provincialisms', - 'provincialist', - 'provincialists', - 'provincialities', - 'provinciality', - 'provincialization', - 'provincializations', - 'provincialize', - 'provincialized', - 'provincializes', - 'provincializing', - 'provincially', - 'provincials', - 'proviruses', - 'provisional', - 'provisionally', - 'provisionals', - 'provisionary', - 'provisioned', - 'provisioner', - 'provisioners', - 'provisioning', - 'provisions', - 'provitamin', - 'provitamins', - 'provocateur', - 'provocateurs', - 'provocation', - 'provocations', - 'provocative', - 'provocatively', - 'provocativeness', - 'provocativenesses', - 'provocatives', - 'provokingly', - 'provolones', - 'proximally', - 'proximately', - 'proximateness', - 'proximatenesses', - 'proximities', - 'prudential', - 'prudentially', - 'prudishness', - 'prudishnesses', - 'pruriences', - 'pruriencies', - 'pruriently', - 'prurituses', - 'prussianise', - 'prussianised', - 'prussianises', - 'prussianising', - 'prussianization', - 'prussianizations', - 'prussianize', - 'prussianized', - 'prussianizes', - 'prussianizing', - 'psalmbooks', - 'psalmodies', - 'psalteries', - 'psalterium', - 'psephological', - 'psephologies', - 'psephologist', - 'psephologists', - 'psephology', - 'pseudepigraph', - 'pseudepigrapha', - 'pseudepigraphies', - 'pseudepigraphon', - 'pseudepigraphs', - 'pseudepigraphy', - 'pseudoallele', - 'pseudoalleles', - 'pseudocholinesterase', - 'pseudocholinesterases', - 'pseudoclassic', - 'pseudoclassicism', - 'pseudoclassicisms', - 'pseudoclassics', - 'pseudocoel', - 'pseudocoelomate', - 'pseudocoelomates', - 'pseudocoels', - 'pseudocyeses', - 'pseudocyesis', - 'pseudomonad', - 'pseudomonades', - 'pseudomonads', - 'pseudomonas', - 'pseudomorph', - 'pseudomorphic', - 'pseudomorphism', - 'pseudomorphisms', - 'pseudomorphous', - 'pseudomorphs', - 'pseudonymities', - 'pseudonymity', - 'pseudonymous', - 'pseudonymously', - 'pseudonymousness', - 'pseudonymousnesses', - 'pseudonyms', - 'pseudoparenchyma', - 'pseudoparenchymas', - 'pseudoparenchymata', - 'pseudoparenchymatous', - 'pseudopodal', - 'pseudopodia', - 'pseudopodial', - 'pseudopodium', - 'pseudopods', - 'pseudopregnancies', - 'pseudopregnancy', - 'pseudopregnant', - 'pseudorandom', - 'pseudoscience', - 'pseudosciences', - 'pseudoscientific', - 'pseudoscientist', - 'pseudoscientists', - 'pseudoscorpion', - 'pseudoscorpions', - 'pseudosophisticated', - 'pseudosophistication', - 'pseudosophistications', - 'pseudotuberculoses', - 'pseudotuberculosis', - 'psilocybin', - 'psilocybins', - 'psilophyte', - 'psilophytes', - 'psilophytic', - 'psittacine', - 'psittacines', - 'psittacoses', - 'psittacosis', - 'psittacosises', - 'psittacotic', - 'psoriatics', - 'psychasthenia', - 'psychasthenias', - 'psychasthenic', - 'psychasthenics', - 'psychedelia', - 'psychedelias', - 'psychedelic', - 'psychedelically', - 'psychedelics', - 'psychiatric', - 'psychiatrically', - 'psychiatries', - 'psychiatrist', - 'psychiatrists', - 'psychiatry', - 'psychically', - 'psychoacoustic', - 'psychoacoustics', - 'psychoactive', - 'psychoanalyses', - 'psychoanalysis', - 'psychoanalyst', - 'psychoanalysts', - 'psychoanalytic', - 'psychoanalytical', - 'psychoanalytically', - 'psychoanalyze', - 'psychoanalyzed', - 'psychoanalyzes', - 'psychoanalyzing', - 'psychobabble', - 'psychobabbler', - 'psychobabblers', - 'psychobabbles', - 'psychobiographer', - 'psychobiographers', - 'psychobiographical', - 'psychobiographies', - 'psychobiography', - 'psychobiologic', - 'psychobiological', - 'psychobiologies', - 'psychobiologist', - 'psychobiologists', - 'psychobiology', - 'psychochemical', - 'psychochemicals', - 'psychodrama', - 'psychodramas', - 'psychodramatic', - 'psychodynamic', - 'psychodynamically', - 'psychodynamics', - 'psychogeneses', - 'psychogenesis', - 'psychogenetic', - 'psychogenic', - 'psychogenically', - 'psychograph', - 'psychographs', - 'psychohistorian', - 'psychohistorians', - 'psychohistorical', - 'psychohistories', - 'psychohistory', - 'psychokineses', - 'psychokinesis', - 'psychokinetic', - 'psycholinguist', - 'psycholinguistic', - 'psycholinguistics', - 'psycholinguists', - 'psychologic', - 'psychological', - 'psychologically', - 'psychologies', - 'psychologise', - 'psychologised', - 'psychologises', - 'psychologising', - 'psychologism', - 'psychologisms', - 'psychologist', - 'psychologists', - 'psychologize', - 'psychologized', - 'psychologizes', - 'psychologizing', - 'psychology', - 'psychometric', - 'psychometrically', - 'psychometrician', - 'psychometricians', - 'psychometrics', - 'psychometries', - 'psychometry', - 'psychomotor', - 'psychoneuroses', - 'psychoneurosis', - 'psychoneurotic', - 'psychoneurotics', - 'psychopath', - 'psychopathic', - 'psychopathically', - 'psychopathics', - 'psychopathies', - 'psychopathologic', - 'psychopathological', - 'psychopathologically', - 'psychopathologies', - 'psychopathologist', - 'psychopathologists', - 'psychopathology', - 'psychopaths', - 'psychopathy', - 'psychopharmacologic', - 'psychopharmacological', - 'psychopharmacologies', - 'psychopharmacologist', - 'psychopharmacologists', - 'psychopharmacology', - 'psychophysical', - 'psychophysically', - 'psychophysicist', - 'psychophysicists', - 'psychophysics', - 'psychophysiologic', - 'psychophysiological', - 'psychophysiologically', - 'psychophysiologies', - 'psychophysiologist', - 'psychophysiologists', - 'psychophysiology', - 'psychosexual', - 'psychosexualities', - 'psychosexuality', - 'psychosexually', - 'psychosocial', - 'psychosocially', - 'psychosomatic', - 'psychosomatically', - 'psychosomatics', - 'psychosurgeon', - 'psychosurgeons', - 'psychosurgeries', - 'psychosurgery', - 'psychosurgical', - 'psychosyntheses', - 'psychosynthesis', - 'psychotherapeutic', - 'psychotherapeutically', - 'psychotherapies', - 'psychotherapist', - 'psychotherapists', - 'psychotherapy', - 'psychotically', - 'psychotics', - 'psychotomimetic', - 'psychotomimetically', - 'psychotomimetics', - 'psychotropic', - 'psychotropics', - 'psychrometer', - 'psychrometers', - 'psychrometric', - 'psychrometries', - 'psychrometry', - 'psychrophilic', - 'ptarmigans', - 'pteranodon', - 'pteranodons', - 'pteridines', - 'pteridological', - 'pteridologies', - 'pteridologist', - 'pteridologists', - 'pteridology', - 'pteridophyte', - 'pteridophytes', - 'pteridosperm', - 'pteridosperms', - 'pterodactyl', - 'pterodactyls', - 'pterosaurs', - 'pterygiums', - 'pterygoids', - 'puberulent', - 'pubescence', - 'pubescences', - 'publically', - 'publication', - 'publications', - 'publicised', - 'publicises', - 'publicising', - 'publicists', - 'publicities', - 'publicized', - 'publicizes', - 'publicizing', - 'publicness', - 'publicnesses', - 'publishable', - 'publishers', - 'publishing', - 'publishings', - 'puckeriest', - 'puckishness', - 'puckishnesses', - 'pudginesses', - 'puerilisms', - 'puerilities', - 'puerperium', - 'puffinesses', - 'pugilistic', - 'pugnacious', - 'pugnaciously', - 'pugnaciousness', - 'pugnaciousnesses', - 'pugnacities', - 'puissances', - 'pulchritude', - 'pulchritudes', - 'pulchritudinous', - 'pullulated', - 'pullulates', - 'pullulating', - 'pullulation', - 'pullulations', - 'pulmonates', - 'pulpinesses', - 'pulsations', - 'pulverable', - 'pulverised', - 'pulverises', - 'pulverising', - 'pulverizable', - 'pulverization', - 'pulverizations', - 'pulverized', - 'pulverizer', - 'pulverizers', - 'pulverizes', - 'pulverizing', - 'pulverulent', - 'pummelling', - 'pumpernickel', - 'pumpernickels', - 'pumpkinseed', - 'pumpkinseeds', - 'punchballs', - 'punchboard', - 'punchboards', - 'punchinello', - 'punchinellos', - 'punctation', - 'punctations', - 'punctilios', - 'punctilious', - 'punctiliously', - 'punctiliousness', - 'punctiliousnesses', - 'punctualities', - 'punctuality', - 'punctually', - 'punctuated', - 'punctuates', - 'punctuating', - 'punctuation', - 'punctuations', - 'punctuator', - 'punctuators', - 'puncturing', - 'punditries', - 'pungencies', - 'puninesses', - 'punishabilities', - 'punishability', - 'punishable', - 'punishment', - 'punishments', - 'punitively', - 'punitiveness', - 'punitivenesses', - 'punkinesses', - 'pupillages', - 'puppeteers', - 'puppetlike', - 'puppetries', - 'puppyhoods', - 'purblindly', - 'purblindness', - 'purblindnesses', - 'purchasable', - 'purchasers', - 'purchasing', - 'purebloods', - 'purenesses', - 'purgations', - 'purgatives', - 'purgatorial', - 'purgatories', - 'purification', - 'purifications', - 'purificator', - 'purificators', - 'purificatory', - 'puristically', - 'puritanical', - 'puritanically', - 'puritanism', - 'puritanisms', - 'purloiners', - 'purloining', - 'puromycins', - 'purpleheart', - 'purplehearts', - 'purportedly', - 'purporting', - 'purposeful', - 'purposefully', - 'purposefulness', - 'purposefulnesses', - 'purposeless', - 'purposelessly', - 'purposelessness', - 'purposelessnesses', - 'purposively', - 'purposiveness', - 'purposivenesses', - 'pursinesses', - 'pursuances', - 'pursuivant', - 'pursuivants', - 'purtenance', - 'purtenances', - 'purulences', - 'purveyance', - 'purveyances', - 'pushchairs', - 'pushfulness', - 'pushfulnesses', - 'pushinesses', - 'pusillanimities', - 'pusillanimity', - 'pusillanimous', - 'pusillanimously', - 'pussyfooted', - 'pussyfooter', - 'pussyfooters', - 'pussyfooting', - 'pussyfoots', - 'pustulants', - 'pustulated', - 'pustulation', - 'pustulations', - 'putatively', - 'putrefaction', - 'putrefactions', - 'putrefactive', - 'putrefying', - 'putrescence', - 'putrescences', - 'putrescent', - 'putrescible', - 'putrescine', - 'putrescines', - 'putridities', - 'putschists', - 'puttyroots', - 'puzzleheaded', - 'puzzleheadedness', - 'puzzleheadednesses', - 'puzzlement', - 'puzzlements', - 'puzzlingly', - 'pycnogonid', - 'pycnogonids', - 'pycnometer', - 'pycnometers', - 'pyelitises', - 'pyelonephritic', - 'pyelonephritides', - 'pyelonephritis', - 'pyracantha', - 'pyracanthas', - 'pyramidally', - 'pyramidical', - 'pyramiding', - 'pyranoside', - 'pyranosides', - 'pyrargyrite', - 'pyrargyrites', - 'pyrethrins', - 'pyrethroid', - 'pyrethroids', - 'pyrethrums', - 'pyrheliometer', - 'pyrheliometers', - 'pyrheliometric', - 'pyridoxals', - 'pyridoxamine', - 'pyridoxamines', - 'pyridoxine', - 'pyridoxines', - 'pyrimethamine', - 'pyrimethamines', - 'pyrimidine', - 'pyrimidines', - 'pyrocatechol', - 'pyrocatechols', - 'pyroclastic', - 'pyroelectric', - 'pyroelectricities', - 'pyroelectricity', - 'pyrogallol', - 'pyrogallols', - 'pyrogenicities', - 'pyrogenicity', - 'pyrolizing', - 'pyrologies', - 'pyrolusite', - 'pyrolusites', - 'pyrolysate', - 'pyrolysates', - 'pyrolytically', - 'pyrolyzable', - 'pyrolyzate', - 'pyrolyzates', - 'pyrolyzers', - 'pyrolyzing', - 'pyromancies', - 'pyromaniac', - 'pyromaniacal', - 'pyromaniacs', - 'pyromanias', - 'pyrometallurgical', - 'pyrometallurgies', - 'pyrometallurgy', - 'pyrometers', - 'pyrometric', - 'pyrometrically', - 'pyrometries', - 'pyromorphite', - 'pyromorphites', - 'pyroninophilic', - 'pyrophoric', - 'pyrophosphate', - 'pyrophosphates', - 'pyrophyllite', - 'pyrophyllites', - 'pyrotechnic', - 'pyrotechnical', - 'pyrotechnically', - 'pyrotechnics', - 'pyrotechnist', - 'pyrotechnists', - 'pyroxenite', - 'pyroxenites', - 'pyroxenitic', - 'pyroxenoid', - 'pyroxenoids', - 'pyroxylins', - 'pyrrhotite', - 'pyrrhotites', - 'pythonesses', - 'quackeries', - 'quacksalver', - 'quacksalvers', - 'quadplexes', - 'quadrangle', - 'quadrangles', - 'quadrangular', - 'quadrantal', - 'quadrantes', - 'quadraphonic', - 'quadraphonics', - 'quadratically', - 'quadratics', - 'quadrating', - 'quadrature', - 'quadratures', - 'quadrennia', - 'quadrennial', - 'quadrennially', - 'quadrennials', - 'quadrennium', - 'quadrenniums', - 'quadricentennial', - 'quadricentennials', - 'quadriceps', - 'quadricepses', - 'quadrilateral', - 'quadrilaterals', - 'quadrilles', - 'quadrillion', - 'quadrillions', - 'quadrillionth', - 'quadrillionths', - 'quadripartite', - 'quadriphonic', - 'quadriphonics', - 'quadriplegia', - 'quadriplegias', - 'quadriplegic', - 'quadriplegics', - 'quadrivalent', - 'quadrivalents', - 'quadrivial', - 'quadrivium', - 'quadriviums', - 'quadrumanous', - 'quadrumvir', - 'quadrumvirate', - 'quadrumvirates', - 'quadrumvirs', - 'quadrupedal', - 'quadrupeds', - 'quadrupled', - 'quadruples', - 'quadruplet', - 'quadruplets', - 'quadruplicate', - 'quadruplicated', - 'quadruplicates', - 'quadruplicating', - 'quadruplication', - 'quadruplications', - 'quadruplicities', - 'quadruplicity', - 'quadrupling', - 'quadrupole', - 'quadrupoles', - 'quagmirier', - 'quagmiriest', - 'quaintness', - 'quaintnesses', - 'qualifiable', - 'qualification', - 'qualifications', - 'qualifiedly', - 'qualifiers', - 'qualifying', - 'qualitative', - 'qualitatively', - 'qualmishly', - 'qualmishness', - 'qualmishnesses', - 'quandaries', - 'quantifiable', - 'quantification', - 'quantificational', - 'quantificationally', - 'quantifications', - 'quantified', - 'quantifier', - 'quantifiers', - 'quantifies', - 'quantifying', - 'quantitate', - 'quantitated', - 'quantitates', - 'quantitating', - 'quantitation', - 'quantitations', - 'quantitative', - 'quantitatively', - 'quantitativeness', - 'quantitativenesses', - 'quantities', - 'quantization', - 'quantizations', - 'quantizers', - 'quantizing', - 'quarantine', - 'quarantined', - 'quarantines', - 'quarantining', - 'quarrelers', - 'quarreling', - 'quarrelled', - 'quarreller', - 'quarrellers', - 'quarrelling', - 'quarrelsome', - 'quarrelsomely', - 'quarrelsomeness', - 'quarrelsomenesses', - 'quarryings', - 'quarterage', - 'quarterages', - 'quarterback', - 'quarterbacked', - 'quarterbacking', - 'quarterbacks', - 'quarterdeck', - 'quarterdecks', - 'quarterfinal', - 'quarterfinalist', - 'quarterfinalists', - 'quarterfinals', - 'quartering', - 'quarterings', - 'quarterlies', - 'quartermaster', - 'quartermasters', - 'quartersawed', - 'quartersawn', - 'quarterstaff', - 'quarterstaves', - 'quartettes', - 'quartzites', - 'quartzitic', - 'quasiparticle', - 'quasiparticles', - 'quasiperiodic', - 'quasiperiodicities', - 'quasiperiodicity', - 'quatercentenaries', - 'quatercentenary', - 'quaternaries', - 'quaternary', - 'quaternion', - 'quaternions', - 'quaternities', - 'quaternity', - 'quatrefoil', - 'quatrefoils', - 'quattrocento', - 'quattrocentos', - 'quattuordecillion', - 'quattuordecillions', - 'quaveringly', - 'queasiness', - 'queasinesses', - 'quebrachos', - 'queenliest', - 'queenliness', - 'queenlinesses', - 'queenships', - 'queensides', - 'queernesses', - 'quenchable', - 'quenchless', - 'quercetins', - 'quercitron', - 'quercitrons', - 'querulously', - 'querulousness', - 'querulousnesses', - 'quesadilla', - 'quesadillas', - 'questionable', - 'questionableness', - 'questionablenesses', - 'questionably', - 'questionaries', - 'questionary', - 'questioned', - 'questioner', - 'questioners', - 'questioning', - 'questionless', - 'questionnaire', - 'questionnaires', - 'quickeners', - 'quickening', - 'quicklimes', - 'quicknesses', - 'quicksands', - 'quicksilver', - 'quicksilvers', - 'quicksteps', - 'quiddities', - 'quiescence', - 'quiescences', - 'quiescently', - 'quietening', - 'quietistic', - 'quietnesses', - 'quillbacks', - 'quillworks', - 'quinacrine', - 'quinacrines', - 'quincentenaries', - 'quincentenary', - 'quincentennial', - 'quincentennials', - 'quincuncial', - 'quincunxes', - 'quincunxial', - 'quindecillion', - 'quindecillions', - 'quinidines', - 'quinolines', - 'quinquennia', - 'quinquennial', - 'quinquennially', - 'quinquennials', - 'quinquennium', - 'quinquenniums', - 'quintessence', - 'quintessences', - 'quintessential', - 'quintessentially', - 'quintettes', - 'quintillion', - 'quintillions', - 'quintillionth', - 'quintillionths', - 'quintupled', - 'quintuples', - 'quintuplet', - 'quintuplets', - 'quintuplicate', - 'quintuplicated', - 'quintuplicates', - 'quintuplicating', - 'quintupling', - 'quirkiness', - 'quirkinesses', - 'quislingism', - 'quislingisms', - 'quitclaimed', - 'quitclaiming', - 'quitclaims', - 'quittances', - 'quiveringly', - 'quixotical', - 'quixotically', - 'quixotisms', - 'quixotries', - 'quizmaster', - 'quizmasters', - 'quizzicalities', - 'quizzicality', - 'quizzically', - 'quodlibets', - 'quotabilities', - 'quotability', - 'quotations', - 'quotidians', - 'rabbinates', - 'rabbinical', - 'rabbinically', - 'rabbinisms', - 'rabbitbrush', - 'rabbitbrushes', - 'rabbitries', - 'rabblement', - 'rabblements', - 'rabidities', - 'rabidnesses', - 'racecourse', - 'racecourses', - 'racehorses', - 'racemization', - 'racemizations', - 'racemizing', - 'racetracker', - 'racetrackers', - 'racetracks', - 'racewalker', - 'racewalkers', - 'racewalking', - 'racewalkings', - 'rachitides', - 'racialisms', - 'racialistic', - 'racialists', - 'racinesses', - 'racketeered', - 'racketeering', - 'racketeers', - 'racketiest', - 'raconteurs', - 'racquetball', - 'racquetballs', - 'radarscope', - 'radarscopes', - 'radiancies', - 'radiational', - 'radiationless', - 'radiations', - 'radicalise', - 'radicalised', - 'radicalises', - 'radicalising', - 'radicalism', - 'radicalisms', - 'radicalization', - 'radicalizations', - 'radicalize', - 'radicalized', - 'radicalizes', - 'radicalizing', - 'radicalness', - 'radicalnesses', - 'radicating', - 'radicchios', - 'radioactive', - 'radioactively', - 'radioactivities', - 'radioactivity', - 'radioallergosorbent', - 'radioautograph', - 'radioautographic', - 'radioautographies', - 'radioautographs', - 'radioautography', - 'radiobiologic', - 'radiobiological', - 'radiobiologically', - 'radiobiologies', - 'radiobiologist', - 'radiobiologists', - 'radiobiology', - 'radiocarbon', - 'radiocarbons', - 'radiochemical', - 'radiochemically', - 'radiochemist', - 'radiochemistries', - 'radiochemistry', - 'radiochemists', - 'radiochromatogram', - 'radiochromatograms', - 'radioecologies', - 'radioecology', - 'radioelement', - 'radioelements', - 'radiogenic', - 'radiograms', - 'radiograph', - 'radiographed', - 'radiographic', - 'radiographically', - 'radiographies', - 'radiographing', - 'radiographs', - 'radiography', - 'radioimmunoassay', - 'radioimmunoassayable', - 'radioimmunoassays', - 'radioisotope', - 'radioisotopes', - 'radioisotopic', - 'radioisotopically', - 'radiolabel', - 'radiolabeled', - 'radiolabeling', - 'radiolabelled', - 'radiolabelling', - 'radiolabels', - 'radiolarian', - 'radiolarians', - 'radiologic', - 'radiological', - 'radiologically', - 'radiologies', - 'radiologist', - 'radiologists', - 'radiolucencies', - 'radiolucency', - 'radiolucent', - 'radiolyses', - 'radiolysis', - 'radiolytic', - 'radiometer', - 'radiometers', - 'radiometric', - 'radiometrically', - 'radiometries', - 'radiometry', - 'radiomimetic', - 'radionuclide', - 'radionuclides', - 'radiopaque', - 'radiopharmaceutical', - 'radiopharmaceuticals', - 'radiophone', - 'radiophones', - 'radiophoto', - 'radiophotos', - 'radioprotection', - 'radioprotections', - 'radioprotective', - 'radiosensitive', - 'radiosensitivities', - 'radiosensitivity', - 'radiosonde', - 'radiosondes', - 'radiostrontium', - 'radiostrontiums', - 'radiotelegraph', - 'radiotelegraphies', - 'radiotelegraphs', - 'radiotelegraphy', - 'radiotelemetric', - 'radiotelemetries', - 'radiotelemetry', - 'radiotelephone', - 'radiotelephones', - 'radiotelephonies', - 'radiotelephony', - 'radiotherapies', - 'radiotherapist', - 'radiotherapists', - 'radiotherapy', - 'radiothorium', - 'radiothoriums', - 'radiotracer', - 'radiotracers', - 'raffinoses', - 'raffishness', - 'raffishnesses', - 'rafflesias', - 'ragamuffin', - 'ragamuffins', - 'raggedness', - 'raggednesses', - 'ragpickers', - 'railbusses', - 'railleries', - 'railroaded', - 'railroader', - 'railroaders', - 'railroading', - 'railroadings', - 'rainbowlike', - 'rainmakers', - 'rainmaking', - 'rainmakings', - 'rainspouts', - 'rainsquall', - 'rainsqualls', - 'rainstorms', - 'rainwashed', - 'rainwashes', - 'rainwashing', - 'rainwaters', - 'rakishness', - 'rakishnesses', - 'rallentando', - 'ramblingly', - 'rambouillet', - 'rambouillets', - 'rambunctious', - 'rambunctiously', - 'rambunctiousness', - 'rambunctiousnesses', - 'ramification', - 'ramifications', - 'ramosities', - 'rampageous', - 'rampageously', - 'rampageousness', - 'rampageousnesses', - 'rampancies', - 'ramparting', - 'ramrodding', - 'ramshackle', - 'rancidities', - 'rancidness', - 'rancidnesses', - 'rancorously', - 'randomization', - 'randomizations', - 'randomized', - 'randomizer', - 'randomizers', - 'randomizes', - 'randomizing', - 'randomness', - 'randomnesses', - 'rangelands', - 'ranginesses', - 'ranknesses', - 'ransackers', - 'ransacking', - 'ranunculus', - 'ranunculuses', - 'rapaciously', - 'rapaciousness', - 'rapaciousnesses', - 'rapacities', - 'rapidities', - 'rapidnesses', - 'rappelling', - 'rapporteur', - 'rapporteurs', - 'rapprochement', - 'rapprochements', - 'rapscallion', - 'rapscallions', - 'raptnesses', - 'rapturously', - 'rapturousness', - 'rapturousnesses', - 'rarefaction', - 'rarefactional', - 'rarefactions', - 'rarenesses', - 'rascalities', - 'rashnesses', - 'raspberries', - 'rataplanned', - 'rataplanning', - 'ratatouille', - 'ratatouilles', - 'ratcheting', - 'ratemeters', - 'ratepayers', - 'rathskeller', - 'rathskellers', - 'ratification', - 'ratifications', - 'ratiocinate', - 'ratiocinated', - 'ratiocinates', - 'ratiocinating', - 'ratiocination', - 'ratiocinations', - 'ratiocinative', - 'ratiocinator', - 'ratiocinators', - 'rationales', - 'rationalise', - 'rationalised', - 'rationalises', - 'rationalising', - 'rationalism', - 'rationalisms', - 'rationalist', - 'rationalistic', - 'rationalistically', - 'rationalists', - 'rationalities', - 'rationality', - 'rationalizable', - 'rationalization', - 'rationalizations', - 'rationalize', - 'rationalized', - 'rationalizer', - 'rationalizers', - 'rationalizes', - 'rationalizing', - 'rationally', - 'rationalness', - 'rationalnesses', - 'rattlebrain', - 'rattlebrained', - 'rattlebrains', - 'rattlesnake', - 'rattlesnakes', - 'rattletrap', - 'rattletraps', - 'rattlingly', - 'rattooning', - 'raucousness', - 'raucousnesses', - 'raunchiest', - 'raunchiness', - 'raunchinesses', - 'rauwolfias', - 'ravagement', - 'ravagements', - 'ravellings', - 'ravelments', - 'ravenously', - 'ravenousness', - 'ravenousnesses', - 'ravishingly', - 'ravishment', - 'ravishments', - 'rawinsonde', - 'rawinsondes', - 'raygrasses', - 'raylessness', - 'raylessnesses', - 'razorbacks', - 'razorbills', - 'razzamatazz', - 'razzamatazzes', - 'reabsorbed', - 'reabsorbing', - 'reacceding', - 'reaccelerate', - 'reaccelerated', - 'reaccelerates', - 'reaccelerating', - 'reaccented', - 'reaccenting', - 'reaccepted', - 'reaccepting', - 'reaccession', - 'reaccessions', - 'reacclimatize', - 'reacclimatized', - 'reacclimatizes', - 'reacclimatizing', - 'reaccredit', - 'reaccreditation', - 'reaccreditations', - 'reaccredited', - 'reaccrediting', - 'reaccredits', - 'reaccusing', - 'reacquaint', - 'reacquainted', - 'reacquainting', - 'reacquaints', - 'reacquired', - 'reacquires', - 'reacquiring', - 'reacquisition', - 'reacquisitions', - 'reactances', - 'reactionaries', - 'reactionary', - 'reactionaryism', - 'reactionaryisms', - 'reactivate', - 'reactivated', - 'reactivates', - 'reactivating', - 'reactivation', - 'reactivations', - 'reactively', - 'reactiveness', - 'reactivenesses', - 'reactivities', - 'reactivity', - 'readabilities', - 'readability', - 'readableness', - 'readablenesses', - 'readapting', - 'readdicted', - 'readdicting', - 'readdressed', - 'readdresses', - 'readdressing', - 'readership', - 'readerships', - 'readinesses', - 'readjustable', - 'readjusted', - 'readjusting', - 'readjustment', - 'readjustments', - 'readmission', - 'readmissions', - 'readmitted', - 'readmitting', - 'readopting', - 'readorning', - 'readymades', - 'reaffirmation', - 'reaffirmations', - 'reaffirmed', - 'reaffirming', - 'reaffixing', - 'reafforest', - 'reafforestation', - 'reafforestations', - 'reafforested', - 'reafforesting', - 'reafforests', - 'reaggregate', - 'reaggregated', - 'reaggregates', - 'reaggregating', - 'reaggregation', - 'reaggregations', - 'realigning', - 'realignment', - 'realignments', - 'realistically', - 'realizable', - 'realization', - 'realizations', - 'reallocate', - 'reallocated', - 'reallocates', - 'reallocating', - 'reallocation', - 'reallocations', - 'reallotted', - 'reallotting', - 'realnesses', - 'realpolitik', - 'realpolitiks', - 'realtering', - 'reanalyses', - 'reanalysis', - 'reanalyzed', - 'reanalyzes', - 'reanalyzing', - 'reanimated', - 'reanimates', - 'reanimating', - 'reanimation', - 'reanimations', - 'reannexation', - 'reannexations', - 'reannexing', - 'reanointed', - 'reanointing', - 'reappearance', - 'reappearances', - 'reappeared', - 'reappearing', - 'reapplication', - 'reapplications', - 'reapplying', - 'reappointed', - 'reappointing', - 'reappointment', - 'reappointments', - 'reappoints', - 'reapportion', - 'reapportioned', - 'reapportioning', - 'reapportionment', - 'reapportionments', - 'reapportions', - 'reappraisal', - 'reappraisals', - 'reappraise', - 'reappraised', - 'reappraises', - 'reappraising', - 'reappropriate', - 'reappropriated', - 'reappropriates', - 'reappropriating', - 'reapproved', - 'reapproves', - 'reapproving', - 'reargument', - 'rearguments', - 'rearmament', - 'rearmaments', - 'rearousals', - 'rearousing', - 'rearranged', - 'rearrangement', - 'rearrangements', - 'rearranges', - 'rearranging', - 'rearrested', - 'rearresting', - 'rearticulate', - 'rearticulated', - 'rearticulates', - 'rearticulating', - 'reascended', - 'reascending', - 'reasonabilities', - 'reasonability', - 'reasonable', - 'reasonableness', - 'reasonablenesses', - 'reasonably', - 'reasonings', - 'reasonless', - 'reasonlessly', - 'reassailed', - 'reassailing', - 'reassemblage', - 'reassemblages', - 'reassemble', - 'reassembled', - 'reassembles', - 'reassemblies', - 'reassembling', - 'reassembly', - 'reasserted', - 'reasserting', - 'reassertion', - 'reassertions', - 'reassessed', - 'reassesses', - 'reassessing', - 'reassessment', - 'reassessments', - 'reassigned', - 'reassigning', - 'reassignment', - 'reassignments', - 'reassorted', - 'reassorting', - 'reassuming', - 'reassumption', - 'reassumptions', - 'reassurance', - 'reassurances', - 'reassuring', - 'reassuringly', - 'reattached', - 'reattaches', - 'reattaching', - 'reattachment', - 'reattachments', - 'reattacked', - 'reattacking', - 'reattained', - 'reattaining', - 'reattempted', - 'reattempting', - 'reattempts', - 'reattribute', - 'reattributed', - 'reattributes', - 'reattributing', - 'reattribution', - 'reattributions', - 'reauthorization', - 'reauthorizations', - 'reauthorize', - 'reauthorized', - 'reauthorizes', - 'reauthorizing', - 'reavailing', - 'reawakened', - 'reawakening', - 'rebalanced', - 'rebalances', - 'rebalancing', - 'rebaptisms', - 'rebaptized', - 'rebaptizes', - 'rebaptizing', - 'rebarbative', - 'rebarbatively', - 'rebeginning', - 'rebellions', - 'rebellious', - 'rebelliously', - 'rebelliousness', - 'rebelliousnesses', - 'reblending', - 'reblooming', - 'reboarding', - 'rebottling', - 'rebounders', - 'rebounding', - 'rebranched', - 'rebranches', - 'rebranching', - 'rebreeding', - 'rebroadcast', - 'rebroadcasting', - 'rebroadcasts', - 'rebuilding', - 'rebuttable', - 'rebuttoned', - 'rebuttoning', - 'recalcitrance', - 'recalcitrances', - 'recalcitrancies', - 'recalcitrancy', - 'recalcitrant', - 'recalcitrants', - 'recalculate', - 'recalculated', - 'recalculates', - 'recalculating', - 'recalculation', - 'recalculations', - 'recalibrate', - 'recalibrated', - 'recalibrates', - 'recalibrating', - 'recalibration', - 'recalibrations', - 'recallabilities', - 'recallability', - 'recallable', - 'recanalization', - 'recanalizations', - 'recanalize', - 'recanalized', - 'recanalizes', - 'recanalizing', - 'recantation', - 'recantations', - 'recapitalization', - 'recapitalizations', - 'recapitalize', - 'recapitalized', - 'recapitalizes', - 'recapitalizing', - 'recapitulate', - 'recapitulated', - 'recapitulates', - 'recapitulating', - 'recapitulation', - 'recapitulations', - 'recappable', - 'recaptured', - 'recaptures', - 'recapturing', - 'recarrying', - 'receipting', - 'receivable', - 'receivables', - 'receivership', - 'receiverships', - 'recensions', - 'recentness', - 'recentnesses', - 'recentralization', - 'recentralizations', - 'recentrifuge', - 'recentrifuged', - 'recentrifuges', - 'recentrifuging', - 'receptacle', - 'receptacles', - 'receptionist', - 'receptionists', - 'receptions', - 'receptively', - 'receptiveness', - 'receptivenesses', - 'receptivities', - 'receptivity', - 'recertification', - 'recertifications', - 'recertified', - 'recertifies', - 'recertifying', - 'recessional', - 'recessionals', - 'recessionary', - 'recessions', - 'recessively', - 'recessiveness', - 'recessivenesses', - 'recessives', - 'rechallenge', - 'rechallenged', - 'rechallenges', - 'rechallenging', - 'rechanging', - 'rechanneled', - 'rechanneling', - 'rechannelled', - 'rechannelling', - 'rechannels', - 'rechargeable', - 'rechargers', - 'recharging', - 'rechartered', - 'rechartering', - 'recharters', - 'recharting', - 'rechauffes', - 'rechecking', - 'rechoosing', - 'rechoreograph', - 'rechoreographed', - 'rechoreographing', - 'rechoreographs', - 'rechristen', - 'rechristened', - 'rechristening', - 'rechristens', - 'rechromatograph', - 'rechromatographed', - 'rechromatographies', - 'rechromatographing', - 'rechromatographs', - 'rechromatography', - 'recidivism', - 'recidivisms', - 'recidivist', - 'recidivistic', - 'recidivists', - 'recipients', - 'reciprocal', - 'reciprocally', - 'reciprocals', - 'reciprocate', - 'reciprocated', - 'reciprocates', - 'reciprocating', - 'reciprocation', - 'reciprocations', - 'reciprocative', - 'reciprocator', - 'reciprocators', - 'reciprocities', - 'reciprocity', - 'recircling', - 'recirculate', - 'recirculated', - 'recirculates', - 'recirculating', - 'recirculation', - 'recirculations', - 'recitalist', - 'recitalists', - 'recitation', - 'recitations', - 'recitative', - 'recitatives', - 'recitativi', - 'recitativo', - 'recitativos', - 'recklessly', - 'recklessness', - 'recklessnesses', - 'reckonings', - 'reclaimable', - 'reclaiming', - 'reclamation', - 'reclamations', - 'reclasping', - 'reclassification', - 'reclassifications', - 'reclassified', - 'reclassifies', - 'reclassify', - 'reclassifying', - 'recleaning', - 'reclosable', - 'reclothing', - 'reclusions', - 'reclusively', - 'reclusiveness', - 'reclusivenesses', - 'recodification', - 'recodifications', - 'recodified', - 'recodifies', - 'recodifying', - 'recognised', - 'recognises', - 'recognising', - 'recognition', - 'recognitions', - 'recognizabilities', - 'recognizability', - 'recognizable', - 'recognizably', - 'recognizance', - 'recognizances', - 'recognized', - 'recognizer', - 'recognizers', - 'recognizes', - 'recognizing', - 'recoilless', - 'recoinages', - 'recollected', - 'recollecting', - 'recollection', - 'recollections', - 'recollects', - 'recolonization', - 'recolonizations', - 'recolonize', - 'recolonized', - 'recolonizes', - 'recolonizing', - 'recoloring', - 'recombinant', - 'recombinants', - 'recombination', - 'recombinational', - 'recombinations', - 'recombined', - 'recombines', - 'recombining', - 'recommence', - 'recommenced', - 'recommencement', - 'recommencements', - 'recommences', - 'recommencing', - 'recommendable', - 'recommendation', - 'recommendations', - 'recommendatory', - 'recommended', - 'recommending', - 'recommends', - 'recommission', - 'recommissioned', - 'recommissioning', - 'recommissions', - 'recommitment', - 'recommitments', - 'recommittal', - 'recommittals', - 'recommitted', - 'recommitting', - 'recompense', - 'recompensed', - 'recompenses', - 'recompensing', - 'recompilation', - 'recompilations', - 'recompiled', - 'recompiles', - 'recompiling', - 'recomposed', - 'recomposes', - 'recomposing', - 'recomposition', - 'recompositions', - 'recomputation', - 'recomputations', - 'recomputed', - 'recomputes', - 'recomputing', - 'reconceive', - 'reconceived', - 'reconceives', - 'reconceiving', - 'reconcentrate', - 'reconcentrated', - 'reconcentrates', - 'reconcentrating', - 'reconcentration', - 'reconcentrations', - 'reconception', - 'reconceptions', - 'reconceptualization', - 'reconceptualizations', - 'reconceptualize', - 'reconceptualized', - 'reconceptualizes', - 'reconceptualizing', - 'reconcilabilities', - 'reconcilability', - 'reconcilable', - 'reconciled', - 'reconcilement', - 'reconcilements', - 'reconciler', - 'reconcilers', - 'reconciles', - 'reconciliation', - 'reconciliations', - 'reconciliatory', - 'reconciling', - 'recondense', - 'recondensed', - 'recondenses', - 'recondensing', - 'reconditely', - 'reconditeness', - 'reconditenesses', - 'recondition', - 'reconditioned', - 'reconditioning', - 'reconditions', - 'reconfigurable', - 'reconfiguration', - 'reconfigurations', - 'reconfigure', - 'reconfigured', - 'reconfigures', - 'reconfiguring', - 'reconfirmation', - 'reconfirmations', - 'reconfirmed', - 'reconfirming', - 'reconfirms', - 'reconnaissance', - 'reconnaissances', - 'reconnected', - 'reconnecting', - 'reconnection', - 'reconnections', - 'reconnects', - 'reconnoiter', - 'reconnoitered', - 'reconnoitering', - 'reconnoiters', - 'reconnoitre', - 'reconnoitred', - 'reconnoitres', - 'reconnoitring', - 'reconquered', - 'reconquering', - 'reconquers', - 'reconquest', - 'reconquests', - 'reconsecrate', - 'reconsecrated', - 'reconsecrates', - 'reconsecrating', - 'reconsecration', - 'reconsecrations', - 'reconsider', - 'reconsideration', - 'reconsiderations', - 'reconsidered', - 'reconsidering', - 'reconsiders', - 'reconsolidate', - 'reconsolidated', - 'reconsolidates', - 'reconsolidating', - 'reconstitute', - 'reconstituted', - 'reconstitutes', - 'reconstituting', - 'reconstitution', - 'reconstitutions', - 'reconstruct', - 'reconstructed', - 'reconstructible', - 'reconstructing', - 'reconstruction', - 'reconstructionism', - 'reconstructionisms', - 'reconstructionist', - 'reconstructionists', - 'reconstructions', - 'reconstructive', - 'reconstructor', - 'reconstructors', - 'reconstructs', - 'recontacted', - 'recontacting', - 'recontacts', - 'recontaminate', - 'recontaminated', - 'recontaminates', - 'recontaminating', - 'recontamination', - 'recontaminations', - 'recontextualize', - 'recontextualized', - 'recontextualizes', - 'recontextualizing', - 'recontoured', - 'recontouring', - 'recontours', - 'reconvened', - 'reconvenes', - 'reconvening', - 'reconversion', - 'reconversions', - 'reconverted', - 'reconverting', - 'reconverts', - 'reconveyance', - 'reconveyances', - 'reconveyed', - 'reconveying', - 'reconvicted', - 'reconvicting', - 'reconviction', - 'reconvictions', - 'reconvicts', - 'reconvince', - 'reconvinced', - 'reconvinces', - 'reconvincing', - 'recordable', - 'recordation', - 'recordations', - 'recordings', - 'recordists', - 'recounters', - 'recounting', - 'recoupable', - 'recoupling', - 'recoupment', - 'recoupments', - 'recoverabilities', - 'recoverability', - 'recoverable', - 'recoverers', - 'recoveries', - 'recovering', - 'recreating', - 'recreation', - 'recreational', - 'recreationist', - 'recreationists', - 'recreations', - 'recreative', - 'recriminate', - 'recriminated', - 'recriminates', - 'recriminating', - 'recrimination', - 'recriminations', - 'recriminative', - 'recriminatory', - 'recrossing', - 'recrowning', - 'recrudesce', - 'recrudesced', - 'recrudescence', - 'recrudescences', - 'recrudescent', - 'recrudesces', - 'recrudescing', - 'recruiters', - 'recruiting', - 'recruitment', - 'recruitments', - 'recrystallization', - 'recrystallizations', - 'recrystallize', - 'recrystallized', - 'recrystallizes', - 'recrystallizing', - 'rectangles', - 'rectangular', - 'rectangularities', - 'rectangularity', - 'rectangularly', - 'rectifiabilities', - 'rectifiability', - 'rectifiable', - 'rectification', - 'rectifications', - 'rectifiers', - 'rectifying', - 'rectilinear', - 'rectilinearly', - 'rectitudes', - 'rectitudinous', - 'rectorates', - 'rectorship', - 'rectorships', - 'recultivate', - 'recultivated', - 'recultivates', - 'recultivating', - 'recumbencies', - 'recumbency', - 'recuperate', - 'recuperated', - 'recuperates', - 'recuperating', - 'recuperation', - 'recuperations', - 'recuperative', - 'recurrence', - 'recurrences', - 'recurrently', - 'recursions', - 'recursively', - 'recursiveness', - 'recursivenesses', - 'recusancies', - 'recyclable', - 'recyclables', - 'redactional', - 'redactions', - 'redamaging', - 'redarguing', - 'redbaiting', - 'redbreasts', - 'reddishness', - 'reddishnesses', - 'redeciding', - 'redecorate', - 'redecorated', - 'redecorates', - 'redecorating', - 'redecoration', - 'redecorations', - 'redecorator', - 'redecorators', - 'rededicate', - 'rededicated', - 'rededicates', - 'rededicating', - 'rededication', - 'rededications', - 'redeemable', - 'redefeated', - 'redefeating', - 'redefected', - 'redefecting', - 'redefining', - 'redefinition', - 'redefinitions', - 'redelivered', - 'redeliveries', - 'redelivering', - 'redelivers', - 'redelivery', - 'redemanded', - 'redemanding', - 'redemption', - 'redemptioner', - 'redemptioners', - 'redemptions', - 'redemptive', - 'redemptory', - 'redeployed', - 'redeploying', - 'redeployment', - 'redeployments', - 'redeposited', - 'redepositing', - 'redeposits', - 'redescribe', - 'redescribed', - 'redescribes', - 'redescribing', - 'redescription', - 'redescriptions', - 'redesigned', - 'redesigning', - 'redetermination', - 'redeterminations', - 'redetermine', - 'redetermined', - 'redetermines', - 'redetermining', - 'redeveloped', - 'redeveloper', - 'redevelopers', - 'redeveloping', - 'redevelopment', - 'redevelopments', - 'redevelops', - 'redialling', - 'redigested', - 'redigesting', - 'redigestion', - 'redigestions', - 'redingotes', - 'redintegrate', - 'redintegrated', - 'redintegrates', - 'redintegrating', - 'redintegration', - 'redintegrations', - 'redintegrative', - 'redirected', - 'redirecting', - 'redirection', - 'redirections', - 'rediscount', - 'rediscountable', - 'rediscounted', - 'rediscounting', - 'rediscounts', - 'rediscover', - 'rediscovered', - 'rediscoveries', - 'rediscovering', - 'rediscovers', - 'rediscovery', - 'rediscussed', - 'rediscusses', - 'rediscussing', - 'redisplayed', - 'redisplaying', - 'redisplays', - 'redisposed', - 'redisposes', - 'redisposing', - 'redisposition', - 'redispositions', - 'redissolve', - 'redissolved', - 'redissolves', - 'redissolving', - 'redistillation', - 'redistillations', - 'redistilled', - 'redistilling', - 'redistills', - 'redistribute', - 'redistributed', - 'redistributes', - 'redistributing', - 'redistribution', - 'redistributional', - 'redistributionist', - 'redistributionists', - 'redistributions', - 'redistributive', - 'redistrict', - 'redistricted', - 'redistricting', - 'redistricts', - 'redividing', - 'redivision', - 'redivisions', - 'redolences', - 'redolently', - 'redoubling', - 'redoubtable', - 'redoubtably', - 'redounding', - 'redrafting', - 'redreaming', - 'redressers', - 'redressing', - 'redrilling', - 'redshifted', - 'redshirted', - 'redshirting', - 'reducibilities', - 'reducibility', - 'reductants', - 'reductases', - 'reductional', - 'reductionism', - 'reductionisms', - 'reductionist', - 'reductionistic', - 'reductionists', - 'reductions', - 'reductively', - 'reductiveness', - 'reductivenesses', - 'redundancies', - 'redundancy', - 'redundantly', - 'reduplicate', - 'reduplicated', - 'reduplicates', - 'reduplicating', - 'reduplication', - 'reduplications', - 'reduplicative', - 'reduplicatively', - 'reedifying', - 'reedinesses', - 'reeditions', - 'reeducated', - 'reeducates', - 'reeducating', - 'reeducation', - 'reeducations', - 'reeducative', - 'reejecting', - 'reelecting', - 'reelection', - 'reelections', - 'reeligibilities', - 'reeligibility', - 'reeligible', - 'reembarked', - 'reembarking', - 'reembodied', - 'reembodies', - 'reembodying', - 'reembroider', - 'reembroidered', - 'reembroidering', - 'reembroiders', - 'reemergence', - 'reemergences', - 'reemerging', - 'reemission', - 'reemissions', - 'reemitting', - 'reemphases', - 'reemphasis', - 'reemphasize', - 'reemphasized', - 'reemphasizes', - 'reemphasizing', - 'reemployed', - 'reemploying', - 'reemployment', - 'reemployments', - 'reenacting', - 'reenactment', - 'reenactments', - 'reencounter', - 'reencountered', - 'reencountering', - 'reencounters', - 'reendowing', - 'reenergize', - 'reenergized', - 'reenergizes', - 'reenergizing', - 'reenforced', - 'reenforces', - 'reenforcing', - 'reengagement', - 'reengagements', - 'reengaging', - 'reengineer', - 'reengineered', - 'reengineering', - 'reengineers', - 'reengraved', - 'reengraves', - 'reengraving', - 'reenjoying', - 'reenlisted', - 'reenlisting', - 'reenlistment', - 'reenlistments', - 'reenrolled', - 'reenrolling', - 'reentering', - 'reenthrone', - 'reenthroned', - 'reenthrones', - 'reenthroning', - 'reentrance', - 'reentrances', - 'reentrants', - 'reequipment', - 'reequipments', - 'reequipped', - 'reequipping', - 'reerecting', - 'reescalate', - 'reescalated', - 'reescalates', - 'reescalating', - 'reescalation', - 'reescalations', - 'reestablish', - 'reestablished', - 'reestablishes', - 'reestablishing', - 'reestablishment', - 'reestablishments', - 'reestimate', - 'reestimated', - 'reestimates', - 'reestimating', - 'reevaluate', - 'reevaluated', - 'reevaluates', - 'reevaluating', - 'reevaluation', - 'reevaluations', - 'reexamination', - 'reexaminations', - 'reexamined', - 'reexamines', - 'reexamining', - 'reexpelled', - 'reexpelling', - 'reexperience', - 'reexperienced', - 'reexperiences', - 'reexperiencing', - 'reexplored', - 'reexplores', - 'reexploring', - 'reexportation', - 'reexportations', - 'reexported', - 'reexporting', - 'reexposing', - 'reexposure', - 'reexposures', - 'reexpressed', - 'reexpresses', - 'reexpressing', - 'refashioned', - 'refashioning', - 'refashions', - 'refastened', - 'refastening', - 'refections', - 'refectories', - 'refereeing', - 'referenced', - 'references', - 'referencing', - 'referendum', - 'referendums', - 'referential', - 'referentialities', - 'referentiality', - 'referentially', - 'refighting', - 'refiguring', - 'refillable', - 'refiltered', - 'refiltering', - 'refinanced', - 'refinances', - 'refinancing', - 'refinement', - 'refinements', - 'refineries', - 'refinished', - 'refinisher', - 'refinishers', - 'refinishes', - 'refinishing', - 'reflationary', - 'reflations', - 'reflectance', - 'reflectances', - 'reflecting', - 'reflection', - 'reflectional', - 'reflections', - 'reflective', - 'reflectively', - 'reflectiveness', - 'reflectivenesses', - 'reflectivities', - 'reflectivity', - 'reflectometer', - 'reflectometers', - 'reflectometries', - 'reflectometry', - 'reflectorize', - 'reflectorized', - 'reflectorizes', - 'reflectorizing', - 'reflectors', - 'reflexions', - 'reflexively', - 'reflexiveness', - 'reflexivenesses', - 'reflexives', - 'reflexivities', - 'reflexivity', - 'reflexologies', - 'reflexology', - 'refloating', - 'reflooding', - 'reflowered', - 'reflowering', - 'refluences', - 'refocusing', - 'refocussed', - 'refocusses', - 'refocussing', - 'reforestation', - 'reforestations', - 'reforested', - 'reforesting', - 'reformabilities', - 'reformability', - 'reformable', - 'reformates', - 'reformation', - 'reformational', - 'reformations', - 'reformative', - 'reformatories', - 'reformatory', - 'reformatted', - 'reformatting', - 'reformisms', - 'reformists', - 'reformulate', - 'reformulated', - 'reformulates', - 'reformulating', - 'reformulation', - 'reformulations', - 'refortification', - 'refortifications', - 'refortified', - 'refortifies', - 'refortifying', - 'refoundation', - 'refoundations', - 'refounding', - 'refractile', - 'refracting', - 'refraction', - 'refractions', - 'refractive', - 'refractively', - 'refractiveness', - 'refractivenesses', - 'refractivities', - 'refractivity', - 'refractometer', - 'refractometers', - 'refractometric', - 'refractometries', - 'refractometry', - 'refractories', - 'refractorily', - 'refractoriness', - 'refractorinesses', - 'refractors', - 'refractory', - 'refraining', - 'refrainment', - 'refrainments', - 'refrangibilities', - 'refrangibility', - 'refrangible', - 'refrangibleness', - 'refrangiblenesses', - 'refreezing', - 'refreshened', - 'refreshening', - 'refreshens', - 'refreshers', - 'refreshing', - 'refreshingly', - 'refreshment', - 'refreshments', - 'refrigerant', - 'refrigerants', - 'refrigerate', - 'refrigerated', - 'refrigerates', - 'refrigerating', - 'refrigeration', - 'refrigerations', - 'refrigerator', - 'refrigerators', - 'refronting', - 'refuelling', - 'refugeeism', - 'refugeeisms', - 'refulgence', - 'refulgences', - 'refundabilities', - 'refundability', - 'refundable', - 'refurbished', - 'refurbisher', - 'refurbishers', - 'refurbishes', - 'refurbishing', - 'refurbishment', - 'refurbishments', - 'refurnished', - 'refurnishes', - 'refurnishing', - 'refuseniks', - 'refutation', - 'refutations', - 'regalities', - 'regardfully', - 'regardfulness', - 'regardfulnesses', - 'regardless', - 'regardlessly', - 'regardlessness', - 'regardlessnesses', - 'regathered', - 'regathering', - 'regelating', - 'regenerable', - 'regeneracies', - 'regeneracy', - 'regenerate', - 'regenerated', - 'regenerately', - 'regenerateness', - 'regeneratenesses', - 'regenerates', - 'regenerating', - 'regeneration', - 'regenerations', - 'regenerative', - 'regenerator', - 'regenerators', - 'regimental', - 'regimentals', - 'regimentation', - 'regimentations', - 'regimented', - 'regimenting', - 'regionalism', - 'regionalisms', - 'regionalist', - 'regionalistic', - 'regionalists', - 'regionalization', - 'regionalizations', - 'regionalize', - 'regionalized', - 'regionalizes', - 'regionalizing', - 'regionally', - 'regisseurs', - 'registerable', - 'registered', - 'registering', - 'registrable', - 'registrant', - 'registrants', - 'registrars', - 'registration', - 'registrations', - 'registries', - 'reglossing', - 'regnancies', - 'regrafting', - 'regranting', - 'regreening', - 'regreeting', - 'regressing', - 'regression', - 'regressions', - 'regressive', - 'regressively', - 'regressiveness', - 'regressivenesses', - 'regressivities', - 'regressivity', - 'regressors', - 'regretfully', - 'regretfulness', - 'regretfulnesses', - 'regrettable', - 'regrettably', - 'regretters', - 'regretting', - 'regrinding', - 'regrooming', - 'regrooving', - 'regrouping', - 'regularities', - 'regularity', - 'regularization', - 'regularizations', - 'regularize', - 'regularized', - 'regularizes', - 'regularizing', - 'regulating', - 'regulation', - 'regulations', - 'regulative', - 'regulators', - 'regulatory', - 'regurgitate', - 'regurgitated', - 'regurgitates', - 'regurgitating', - 'regurgitation', - 'regurgitations', - 'rehabilitant', - 'rehabilitants', - 'rehabilitate', - 'rehabilitated', - 'rehabilitates', - 'rehabilitating', - 'rehabilitation', - 'rehabilitations', - 'rehabilitative', - 'rehabilitator', - 'rehabilitators', - 'rehammered', - 'rehammering', - 'rehandling', - 'rehardened', - 'rehardening', - 'rehearings', - 'rehearsals', - 'rehearsers', - 'rehearsing', - 'rehospitalization', - 'rehospitalizations', - 'rehospitalize', - 'rehospitalized', - 'rehospitalizes', - 'rehospitalizing', - 'rehumanize', - 'rehumanized', - 'rehumanizes', - 'rehumanizing', - 'rehydratable', - 'rehydrated', - 'rehydrates', - 'rehydrating', - 'rehydration', - 'rehydrations', - 'rehypnotize', - 'rehypnotized', - 'rehypnotizes', - 'rehypnotizing', - 'reichsmark', - 'reichsmarks', - 'reidentified', - 'reidentifies', - 'reidentify', - 'reidentifying', - 'reification', - 'reifications', - 'reigniting', - 'reignition', - 'reignitions', - 'reimagined', - 'reimagines', - 'reimagining', - 'reimbursable', - 'reimbursed', - 'reimbursement', - 'reimbursements', - 'reimburses', - 'reimbursing', - 'reimmersed', - 'reimmerses', - 'reimmersing', - 'reimplantation', - 'reimplantations', - 'reimplanted', - 'reimplanting', - 'reimplants', - 'reimportation', - 'reimportations', - 'reimported', - 'reimporting', - 'reimposing', - 'reimposition', - 'reimpositions', - 'reimpression', - 'reimpressions', - 'reincarnate', - 'reincarnated', - 'reincarnates', - 'reincarnating', - 'reincarnation', - 'reincarnations', - 'reinciting', - 'reincorporate', - 'reincorporated', - 'reincorporates', - 'reincorporating', - 'reincorporation', - 'reincorporations', - 'reincurred', - 'reincurring', - 'reindexing', - 'reindicted', - 'reindicting', - 'reindictment', - 'reindictments', - 'reinducing', - 'reinducted', - 'reinducting', - 'reindustrialization', - 'reindustrializations', - 'reindustrialize', - 'reindustrialized', - 'reindustrializes', - 'reindustrializing', - 'reinfected', - 'reinfecting', - 'reinfection', - 'reinfections', - 'reinfestation', - 'reinfestations', - 'reinflated', - 'reinflates', - 'reinflating', - 'reinflation', - 'reinflations', - 'reinforceable', - 'reinforced', - 'reinforcement', - 'reinforcements', - 'reinforcer', - 'reinforcers', - 'reinforces', - 'reinforcing', - 'reinformed', - 'reinforming', - 'reinfusing', - 'reinhabited', - 'reinhabiting', - 'reinhabits', - 'reinitiate', - 'reinitiated', - 'reinitiates', - 'reinitiating', - 'reinjected', - 'reinjecting', - 'reinjection', - 'reinjections', - 'reinjuries', - 'reinjuring', - 'reinnervate', - 'reinnervated', - 'reinnervates', - 'reinnervating', - 'reinnervation', - 'reinnervations', - 'reinoculate', - 'reinoculated', - 'reinoculates', - 'reinoculating', - 'reinoculation', - 'reinoculations', - 'reinserted', - 'reinserting', - 'reinsertion', - 'reinsertions', - 'reinspected', - 'reinspecting', - 'reinspection', - 'reinspections', - 'reinspects', - 'reinspired', - 'reinspires', - 'reinspiring', - 'reinstallation', - 'reinstallations', - 'reinstalled', - 'reinstalling', - 'reinstalls', - 'reinstated', - 'reinstatement', - 'reinstatements', - 'reinstates', - 'reinstating', - 'reinstitute', - 'reinstituted', - 'reinstitutes', - 'reinstituting', - 'reinstitutionalization', - 'reinstitutionalizations', - 'reinstitutionalize', - 'reinstitutionalized', - 'reinstitutionalizes', - 'reinstitutionalizing', - 'reinsurance', - 'reinsurances', - 'reinsurers', - 'reinsuring', - 'reintegrate', - 'reintegrated', - 'reintegrates', - 'reintegrating', - 'reintegration', - 'reintegrations', - 'reintegrative', - 'reinterpret', - 'reinterpretation', - 'reinterpretations', - 'reinterpreted', - 'reinterpreting', - 'reinterprets', - 'reinterred', - 'reinterring', - 'reinterview', - 'reinterviewed', - 'reinterviewing', - 'reinterviews', - 'reintroduce', - 'reintroduced', - 'reintroduces', - 'reintroducing', - 'reintroduction', - 'reintroductions', - 'reinvading', - 'reinvasion', - 'reinvasions', - 'reinvented', - 'reinventing', - 'reinvention', - 'reinventions', - 'reinvested', - 'reinvestigate', - 'reinvestigated', - 'reinvestigates', - 'reinvestigating', - 'reinvestigation', - 'reinvestigations', - 'reinvesting', - 'reinvestment', - 'reinvestments', - 'reinvigorate', - 'reinvigorated', - 'reinvigorates', - 'reinvigorating', - 'reinvigoration', - 'reinvigorations', - 'reinvigorator', - 'reinvigorators', - 'reinviting', - 'reinvoking', - 'reiterated', - 'reiterates', - 'reiterating', - 'reiteration', - 'reiterations', - 'reiterative', - 'reiteratively', - 'rejacketed', - 'rejacketing', - 'rejectingly', - 'rejections', - 'rejiggered', - 'rejiggering', - 'rejoicingly', - 'rejoicings', - 'rejoinders', - 'rejuggling', - 'rejuvenate', - 'rejuvenated', - 'rejuvenates', - 'rejuvenating', - 'rejuvenation', - 'rejuvenations', - 'rejuvenator', - 'rejuvenators', - 'rejuvenescence', - 'rejuvenescences', - 'rejuvenescent', - 'rekeyboard', - 'rekeyboarded', - 'rekeyboarding', - 'rekeyboards', - 'rekindling', - 'reknitting', - 'relabeling', - 'relabelled', - 'relabelling', - 'relacquered', - 'relacquering', - 'relacquers', - 'relandscape', - 'relandscaped', - 'relandscapes', - 'relandscaping', - 'relatedness', - 'relatednesses', - 'relational', - 'relationally', - 'relationship', - 'relationships', - 'relatively', - 'relativism', - 'relativisms', - 'relativist', - 'relativistic', - 'relativistically', - 'relativists', - 'relativities', - 'relativity', - 'relativize', - 'relativized', - 'relativizes', - 'relativizing', - 'relaunched', - 'relaunches', - 'relaunching', - 'relaxation', - 'relaxations', - 'relaxedness', - 'relaxednesses', - 'relearning', - 'releasable', - 'relegating', - 'relegation', - 'relegations', - 'relentless', - 'relentlessly', - 'relentlessness', - 'relentlessnesses', - 'relettered', - 'relettering', - 'relevances', - 'relevancies', - 'relevantly', - 'reliabilities', - 'reliability', - 'reliableness', - 'reliablenesses', - 'relicensed', - 'relicenses', - 'relicensing', - 'relicensure', - 'relicensures', - 'relictions', - 'relievable', - 'relievedly', - 'relighting', - 'religionist', - 'religionists', - 'religionless', - 'religiosities', - 'religiosity', - 'religiously', - 'religiousness', - 'religiousnesses', - 'relinquish', - 'relinquished', - 'relinquishes', - 'relinquishing', - 'relinquishment', - 'relinquishments', - 'reliquaries', - 'reliquefied', - 'reliquefies', - 'reliquefying', - 'relishable', - 'relocatable', - 'relocatees', - 'relocating', - 'relocation', - 'relocations', - 'relubricate', - 'relubricated', - 'relubricates', - 'relubricating', - 'relubrication', - 'relubrications', - 'reluctance', - 'reluctances', - 'reluctancies', - 'reluctancy', - 'reluctantly', - 'reluctated', - 'reluctates', - 'reluctating', - 'reluctation', - 'reluctations', - 'relumining', - 'remaindered', - 'remaindering', - 'remainders', - 'remanences', - 'remanufacture', - 'remanufactured', - 'remanufacturer', - 'remanufacturers', - 'remanufactures', - 'remanufacturing', - 'remarkable', - 'remarkableness', - 'remarkablenesses', - 'remarkably', - 'remarketed', - 'remarketing', - 'remarriage', - 'remarriages', - 'remarrying', - 'remastered', - 'remastering', - 'rematching', - 'rematerialize', - 'rematerialized', - 'rematerializes', - 'rematerializing', - 'remeasured', - 'remeasurement', - 'remeasurements', - 'remeasures', - 'remeasuring', - 'remediabilities', - 'remediability', - 'remediable', - 'remedially', - 'remediated', - 'remediates', - 'remediating', - 'remediation', - 'remediations', - 'remediless', - 'rememberabilities', - 'rememberability', - 'rememberable', - 'remembered', - 'rememberer', - 'rememberers', - 'remembering', - 'remembrance', - 'remembrancer', - 'remembrancers', - 'remembrances', - 'remigration', - 'remigrations', - 'remilitarization', - 'remilitarizations', - 'remilitarize', - 'remilitarized', - 'remilitarizes', - 'remilitarizing', - 'reminisced', - 'reminiscence', - 'reminiscences', - 'reminiscent', - 'reminiscential', - 'reminiscently', - 'reminiscer', - 'reminiscers', - 'reminisces', - 'reminiscing', - 'remissible', - 'remissibly', - 'remissions', - 'remissness', - 'remissnesses', - 'remitments', - 'remittable', - 'remittance', - 'remittances', - 'remobilization', - 'remobilizations', - 'remobilize', - 'remobilized', - 'remobilizes', - 'remobilizing', - 'remodeling', - 'remodelled', - 'remodelling', - 'remodified', - 'remodifies', - 'remodifying', - 'remoistened', - 'remoistening', - 'remoistens', - 'remonetization', - 'remonetizations', - 'remonetize', - 'remonetized', - 'remonetizes', - 'remonetizing', - 'remonstrance', - 'remonstrances', - 'remonstrant', - 'remonstrantly', - 'remonstrants', - 'remonstrate', - 'remonstrated', - 'remonstrates', - 'remonstrating', - 'remonstration', - 'remonstrations', - 'remonstrative', - 'remonstratively', - 'remonstrator', - 'remonstrators', - 'remorseful', - 'remorsefully', - 'remorsefulness', - 'remorsefulnesses', - 'remorseless', - 'remorselessly', - 'remorselessness', - 'remorselessnesses', - 'remortgage', - 'remortgaged', - 'remortgages', - 'remortgaging', - 'remoteness', - 'remotenesses', - 'remotivate', - 'remotivated', - 'remotivates', - 'remotivating', - 'remotivation', - 'remotivations', - 'remounting', - 'removabilities', - 'removability', - 'removableness', - 'removablenesses', - 'removeable', - 'remunerate', - 'remunerated', - 'remunerates', - 'remunerating', - 'remuneration', - 'remunerations', - 'remunerative', - 'remuneratively', - 'remunerativeness', - 'remunerativenesses', - 'remunerator', - 'remunerators', - 'remuneratory', - 'remythologize', - 'remythologized', - 'remythologizes', - 'remythologizing', - 'renaissance', - 'renaissances', - 'renascence', - 'renascences', - 'renationalization', - 'renationalizations', - 'renationalize', - 'renationalized', - 'renationalizes', - 'renationalizing', - 'renaturation', - 'renaturations', - 'renaturing', - 'rencontres', - 'rencounter', - 'rencountered', - 'rencountering', - 'rencounters', - 'renderable', - 'rendezvous', - 'rendezvoused', - 'rendezvouses', - 'rendezvousing', - 'renditions', - 'renegading', - 'renegadoes', - 'renegotiable', - 'renegotiate', - 'renegotiated', - 'renegotiates', - 'renegotiating', - 'renegotiation', - 'renegotiations', - 'renewabilities', - 'renewability', - 'renitencies', - 'renographic', - 'renographies', - 'renography', - 'renominate', - 'renominated', - 'renominates', - 'renominating', - 'renomination', - 'renominations', - 'renormalization', - 'renormalizations', - 'renormalize', - 'renormalized', - 'renormalizes', - 'renormalizing', - 'renotified', - 'renotifies', - 'renotifying', - 'renouncement', - 'renouncements', - 'renouncers', - 'renouncing', - 'renovascular', - 'renovating', - 'renovation', - 'renovations', - 'renovative', - 'renovators', - 'rentabilities', - 'rentability', - 'renumbered', - 'renumbering', - 'renunciate', - 'renunciates', - 'renunciation', - 'renunciations', - 'renunciative', - 'renunciatory', - 'reobjected', - 'reobjecting', - 'reobserved', - 'reobserves', - 'reobserving', - 'reobtained', - 'reobtaining', - 'reoccupation', - 'reoccupations', - 'reoccupied', - 'reoccupies', - 'reoccupying', - 'reoccurred', - 'reoccurrence', - 'reoccurrences', - 'reoccurring', - 'reoffering', - 'reopenings', - 'reoperated', - 'reoperates', - 'reoperating', - 'reoperation', - 'reoperations', - 'reopposing', - 'reorchestrate', - 'reorchestrated', - 'reorchestrates', - 'reorchestrating', - 'reorchestration', - 'reorchestrations', - 'reordained', - 'reordaining', - 'reordering', - 'reorganization', - 'reorganizational', - 'reorganizations', - 'reorganize', - 'reorganized', - 'reorganizer', - 'reorganizers', - 'reorganizes', - 'reorganizing', - 'reorientate', - 'reorientated', - 'reorientates', - 'reorientating', - 'reorientation', - 'reorientations', - 'reoriented', - 'reorienting', - 'reoutfitted', - 'reoutfitting', - 'reoviruses', - 'reoxidation', - 'reoxidations', - 'reoxidized', - 'reoxidizes', - 'reoxidizing', - 'repacified', - 'repacifies', - 'repacifying', - 'repackaged', - 'repackager', - 'repackagers', - 'repackages', - 'repackaging', - 'repainting', - 'repairabilities', - 'repairability', - 'repairable', - 'repaneling', - 'repanelled', - 'repanelling', - 'repapering', - 'reparation', - 'reparations', - 'reparative', - 'repartition', - 'repartitions', - 'repassages', - 'repatching', - 'repatriate', - 'repatriated', - 'repatriates', - 'repatriating', - 'repatriation', - 'repatriations', - 'repatterned', - 'repatterning', - 'repatterns', - 'repayments', - 'repealable', - 'repeatabilities', - 'repeatability', - 'repeatable', - 'repeatedly', - 'repechages', - 'repellants', - 'repellencies', - 'repellency', - 'repellently', - 'repellents', - 'repentance', - 'repentances', - 'repentantly', - 'repeopling', - 'repercussion', - 'repercussions', - 'repercussive', - 'repertoire', - 'repertoires', - 'repertories', - 'repetition', - 'repetitional', - 'repetitions', - 'repetitious', - 'repetitiously', - 'repetitiousness', - 'repetitiousnesses', - 'repetitive', - 'repetitively', - 'repetitiveness', - 'repetitivenesses', - 'rephotograph', - 'rephotographed', - 'rephotographing', - 'rephotographs', - 'rephrasing', - 'replaceable', - 'replacement', - 'replacements', - 'replanning', - 'replantation', - 'replantations', - 'replanting', - 'replastered', - 'replastering', - 'replasters', - 'repleaders', - 'repleading', - 'repledging', - 'replenishable', - 'replenished', - 'replenisher', - 'replenishers', - 'replenishes', - 'replenishing', - 'replenishment', - 'replenishments', - 'repleteness', - 'repletenesses', - 'repletions', - 'repleviable', - 'replevined', - 'replevining', - 'replevying', - 'replicabilities', - 'replicability', - 'replicable', - 'replicases', - 'replicated', - 'replicates', - 'replicating', - 'replication', - 'replications', - 'replicative', - 'replotting', - 'replumbing', - 'replunging', - 'repolarization', - 'repolarizations', - 'repolarize', - 'repolarized', - 'repolarizes', - 'repolarizing', - 'repolished', - 'repolishes', - 'repolishing', - 'repopularize', - 'repopularized', - 'repopularizes', - 'repopularizing', - 'repopulate', - 'repopulated', - 'repopulates', - 'repopulating', - 'repopulation', - 'repopulations', - 'reportable', - 'reportages', - 'reportedly', - 'reportorial', - 'reportorially', - 'reposefully', - 'reposefulness', - 'reposefulnesses', - 'repositing', - 'reposition', - 'repositioned', - 'repositioning', - 'repositions', - 'repositories', - 'repository', - 'repossessed', - 'repossesses', - 'repossessing', - 'repossession', - 'repossessions', - 'repossessor', - 'repossessors', - 'repowering', - 'reprehended', - 'reprehending', - 'reprehends', - 'reprehensibilities', - 'reprehensibility', - 'reprehensible', - 'reprehensibleness', - 'reprehensiblenesses', - 'reprehensibly', - 'reprehension', - 'reprehensions', - 'reprehensive', - 'representable', - 'representation', - 'representational', - 'representationalism', - 'representationalisms', - 'representationalist', - 'representationalists', - 'representationally', - 'representations', - 'representative', - 'representatively', - 'representativeness', - 'representativenesses', - 'representatives', - 'representativities', - 'representativity', - 'represented', - 'representer', - 'representers', - 'representing', - 'represents', - 'repressibilities', - 'repressibility', - 'repressible', - 'repressing', - 'repression', - 'repressionist', - 'repressions', - 'repressive', - 'repressively', - 'repressiveness', - 'repressivenesses', - 'repressors', - 'repressurize', - 'repressurized', - 'repressurizes', - 'repressurizing', - 'reprievals', - 'reprieving', - 'reprimanded', - 'reprimanding', - 'reprimands', - 'reprinters', - 'reprinting', - 'repristinate', - 'repristinated', - 'repristinates', - 'repristinating', - 'repristination', - 'repristinations', - 'reprivatization', - 'reprivatizations', - 'reprivatize', - 'reprivatized', - 'reprivatizes', - 'reprivatizing', - 'reproachable', - 'reproached', - 'reproacher', - 'reproachers', - 'reproaches', - 'reproachful', - 'reproachfully', - 'reproachfulness', - 'reproachfulnesses', - 'reproaching', - 'reproachingly', - 'reprobance', - 'reprobances', - 'reprobated', - 'reprobates', - 'reprobating', - 'reprobation', - 'reprobations', - 'reprobative', - 'reprobatory', - 'reprocessed', - 'reprocesses', - 'reprocessing', - 'reproduced', - 'reproducer', - 'reproducers', - 'reproduces', - 'reproducibilities', - 'reproducibility', - 'reproducible', - 'reproducibles', - 'reproducibly', - 'reproducing', - 'reproduction', - 'reproductions', - 'reproductive', - 'reproductively', - 'reproductives', - 'reprogramed', - 'reprograming', - 'reprogrammable', - 'reprogrammed', - 'reprogramming', - 'reprograms', - 'reprographer', - 'reprographers', - 'reprographic', - 'reprographics', - 'reprographies', - 'reprography', - 'reprovingly', - 'reprovision', - 'reprovisioned', - 'reprovisioning', - 'reprovisions', - 'reptilians', - 'republican', - 'republicanism', - 'republicanisms', - 'republicanize', - 'republicanized', - 'republicanizes', - 'republicanizing', - 'republicans', - 'republication', - 'republications', - 'republished', - 'republisher', - 'republishers', - 'republishes', - 'republishing', - 'repudiated', - 'repudiates', - 'repudiating', - 'repudiation', - 'repudiationist', - 'repudiationists', - 'repudiations', - 'repudiator', - 'repudiators', - 'repugnance', - 'repugnances', - 'repugnancies', - 'repugnancy', - 'repugnantly', - 'repulsions', - 'repulsively', - 'repulsiveness', - 'repulsivenesses', - 'repunctuation', - 'repunctuations', - 'repurchase', - 'repurchased', - 'repurchases', - 'repurchasing', - 'repurified', - 'repurifies', - 'repurifying', - 'repursuing', - 'reputabilities', - 'reputability', - 'reputation', - 'reputational', - 'reputations', - 'requalification', - 'requalifications', - 'requalified', - 'requalifies', - 'requalifying', - 'requesters', - 'requesting', - 'requestors', - 'requiescat', - 'requiescats', - 'requirement', - 'requirements', - 'requisiteness', - 'requisitenesses', - 'requisites', - 'requisition', - 'requisitioned', - 'requisitioning', - 'requisitions', - 'reradiated', - 'reradiates', - 'reradiating', - 'reradiation', - 'reradiations', - 'rereadings', - 'rerecorded', - 'rerecording', - 'reregister', - 'reregistered', - 'reregistering', - 'reregisters', - 'reregistration', - 'reregistrations', - 'reregulate', - 'reregulated', - 'reregulates', - 'reregulating', - 'reregulation', - 'reregulations', - 'rereleased', - 'rereleases', - 'rereleasing', - 'rereminded', - 'rereminding', - 'rerepeated', - 'rerepeating', - 'rereviewed', - 'rereviewing', - 'resaddling', - 'resaluting', - 'resampling', - 'reschedule', - 'rescheduled', - 'reschedules', - 'rescheduling', - 'reschooled', - 'reschooling', - 'rescinders', - 'rescinding', - 'rescindment', - 'rescindments', - 'rescission', - 'rescissions', - 'rescissory', - 'rescreened', - 'rescreening', - 'resculpted', - 'resculpting', - 'resealable', - 'researchable', - 'researched', - 'researcher', - 'researchers', - 'researches', - 'researching', - 'researchist', - 'researchists', - 'reseasoned', - 'reseasoning', - 'resectabilities', - 'resectability', - 'resectable', - 'resections', - 'resecuring', - 'resegregate', - 'resegregated', - 'resegregates', - 'resegregating', - 'resegregation', - 'resegregations', - 'resemblance', - 'resemblances', - 'resemblant', - 'resembling', - 'resensitize', - 'resensitized', - 'resensitizes', - 'resensitizing', - 'resentence', - 'resentenced', - 'resentences', - 'resentencing', - 'resentfully', - 'resentfulness', - 'resentfulnesses', - 'resentment', - 'resentments', - 'reserpines', - 'reservable', - 'reservation', - 'reservationist', - 'reservationists', - 'reservations', - 'reservedly', - 'reservedness', - 'reservednesses', - 'reserviced', - 'reservices', - 'reservicing', - 'reservists', - 'reservoirs', - 'resettable', - 'resettlement', - 'resettlements', - 'resettling', - 'reshingled', - 'reshingles', - 'reshingling', - 'reshipping', - 'reshooting', - 'reshuffled', - 'reshuffles', - 'reshuffling', - 'residences', - 'residencies', - 'residential', - 'residentially', - 'residually', - 'resighting', - 'resignation', - 'resignations', - 'resignedly', - 'resignedness', - 'resignednesses', - 'resilience', - 'resiliences', - 'resiliencies', - 'resiliency', - 'resiliently', - 'resilvered', - 'resilvering', - 'resinating', - 'resinified', - 'resinifies', - 'resinifying', - 'resistance', - 'resistances', - 'resistants', - 'resistibilities', - 'resistibility', - 'resistible', - 'resistively', - 'resistiveness', - 'resistivenesses', - 'resistivities', - 'resistivity', - 'resistless', - 'resistlessly', - 'resistlessness', - 'resistlessnesses', - 'resittings', - 'resketched', - 'resketches', - 'resketching', - 'resmelting', - 'resmoothed', - 'resmoothing', - 'resocialization', - 'resocializations', - 'resocialize', - 'resocialized', - 'resocializes', - 'resocializing', - 'resoldered', - 'resoldering', - 'resolidification', - 'resolidifications', - 'resolidified', - 'resolidifies', - 'resolidify', - 'resolidifying', - 'resolutely', - 'resoluteness', - 'resolutenesses', - 'resolutest', - 'resolution', - 'resolutions', - 'resolvable', - 'resolvents', - 'resonances', - 'resonantly', - 'resonating', - 'resonators', - 'resorcinol', - 'resorcinols', - 'resorption', - 'resorptions', - 'resorptive', - 'resounding', - 'resoundingly', - 'resourceful', - 'resourcefully', - 'resourcefulness', - 'resourcefulnesses', - 'respeaking', - 'respectabilities', - 'respectability', - 'respectable', - 'respectableness', - 'respectablenesses', - 'respectables', - 'respectably', - 'respecters', - 'respectful', - 'respectfully', - 'respectfulness', - 'respectfulnesses', - 'respecting', - 'respective', - 'respectively', - 'respectiveness', - 'respectivenesses', - 'respelling', - 'respellings', - 'respirable', - 'respiration', - 'respirations', - 'respirator', - 'respirators', - 'respiratory', - 'respiritualize', - 'respiritualized', - 'respiritualizes', - 'respiritualizing', - 'respirometer', - 'respirometers', - 'respirometric', - 'respirometries', - 'respirometry', - 'resplendence', - 'resplendences', - 'resplendencies', - 'resplendency', - 'resplendent', - 'resplendently', - 'resplicing', - 'resplitting', - 'respondent', - 'respondents', - 'responders', - 'responding', - 'responsibilities', - 'responsibility', - 'responsible', - 'responsibleness', - 'responsiblenesses', - 'responsibly', - 'responsions', - 'responsive', - 'responsively', - 'responsiveness', - 'responsivenesses', - 'responsories', - 'responsory', - 'respotting', - 'respraying', - 'respreading', - 'respringing', - 'resprouted', - 'resprouting', - 'ressentiment', - 'ressentiments', - 'restabilize', - 'restabilized', - 'restabilizes', - 'restabilizing', - 'restacking', - 'restaffing', - 'restamping', - 'restartable', - 'restarting', - 'restatement', - 'restatements', - 'restaurant', - 'restauranteur', - 'restauranteurs', - 'restaurants', - 'restaurateur', - 'restaurateurs', - 'restfuller', - 'restfullest', - 'restfulness', - 'restfulnesses', - 'restimulate', - 'restimulated', - 'restimulates', - 'restimulating', - 'restimulation', - 'restimulations', - 'restitched', - 'restitches', - 'restitching', - 'restituted', - 'restitutes', - 'restituting', - 'restitution', - 'restitutions', - 'restiveness', - 'restivenesses', - 'restlessly', - 'restlessness', - 'restlessnesses', - 'restocking', - 'restorable', - 'restoration', - 'restorations', - 'restorative', - 'restoratives', - 'restrainable', - 'restrained', - 'restrainedly', - 'restrainer', - 'restrainers', - 'restraining', - 'restraints', - 'restrengthen', - 'restrengthened', - 'restrengthening', - 'restrengthens', - 'restressed', - 'restresses', - 'restressing', - 'restricken', - 'restricted', - 'restrictedly', - 'restricting', - 'restriction', - 'restrictionism', - 'restrictionisms', - 'restrictionist', - 'restrictionists', - 'restrictions', - 'restrictive', - 'restrictively', - 'restrictiveness', - 'restrictivenesses', - 'restrictives', - 'restriking', - 'restringing', - 'restriving', - 'restructure', - 'restructured', - 'restructures', - 'restructuring', - 'restudying', - 'restuffing', - 'resubmission', - 'resubmissions', - 'resubmitted', - 'resubmitting', - 'resultantly', - 'resultants', - 'resultless', - 'resummoned', - 'resummoning', - 'resumption', - 'resumptions', - 'resupinate', - 'resupplied', - 'resupplies', - 'resupplying', - 'resurfaced', - 'resurfacer', - 'resurfacers', - 'resurfaces', - 'resurfacing', - 'resurgence', - 'resurgences', - 'resurrected', - 'resurrecting', - 'resurrection', - 'resurrectional', - 'resurrectionist', - 'resurrectionists', - 'resurrections', - 'resurrects', - 'resurveyed', - 'resurveying', - 'resuscitate', - 'resuscitated', - 'resuscitates', - 'resuscitating', - 'resuscitation', - 'resuscitations', - 'resuscitative', - 'resuscitator', - 'resuscitators', - 'resyntheses', - 'resynthesis', - 'resynthesize', - 'resynthesized', - 'resynthesizes', - 'resynthesizing', - 'resystematize', - 'resystematized', - 'resystematizes', - 'resystematizing', - 'retackling', - 'retailings', - 'retailored', - 'retailoring', - 'retaliated', - 'retaliates', - 'retaliating', - 'retaliation', - 'retaliations', - 'retaliative', - 'retaliatory', - 'retardants', - 'retardates', - 'retardation', - 'retardations', - 'retargeted', - 'retargeting', - 'reteaching', - 'retellings', - 'retempered', - 'retempering', - 'retentions', - 'retentively', - 'retentiveness', - 'retentivenesses', - 'retentivities', - 'retentivity', - 'retextured', - 'retextures', - 'retexturing', - 'rethinkers', - 'rethinking', - 'rethreaded', - 'rethreading', - 'reticences', - 'reticencies', - 'reticently', - 'reticulate', - 'reticulated', - 'reticulately', - 'reticulates', - 'reticulating', - 'reticulation', - 'reticulations', - 'reticulocyte', - 'reticulocytes', - 'reticuloendothelial', - 'retightened', - 'retightening', - 'retightens', - 'retinacula', - 'retinaculum', - 'retinitides', - 'retinoblastoma', - 'retinoblastomas', - 'retinoblastomata', - 'retinopathies', - 'retinopathy', - 'retinoscopies', - 'retinoscopy', - 'retinotectal', - 'retiredness', - 'retirednesses', - 'retirement', - 'retirements', - 'retiringly', - 'retiringness', - 'retiringnesses', - 'retouchers', - 'retouching', - 'retracking', - 'retractable', - 'retractile', - 'retractilities', - 'retractility', - 'retracting', - 'retraction', - 'retractions', - 'retractors', - 'retrainable', - 'retraining', - 'retransfer', - 'retransferred', - 'retransferring', - 'retransfers', - 'retransform', - 'retransformation', - 'retransformations', - 'retransformed', - 'retransforming', - 'retransforms', - 'retranslate', - 'retranslated', - 'retranslates', - 'retranslating', - 'retranslation', - 'retranslations', - 'retransmission', - 'retransmissions', - 'retransmit', - 'retransmits', - 'retransmitted', - 'retransmitting', - 'retreading', - 'retreatant', - 'retreatants', - 'retreaters', - 'retreating', - 'retrenched', - 'retrenches', - 'retrenching', - 'retrenchment', - 'retrenchments', - 'retribution', - 'retributions', - 'retributive', - 'retributively', - 'retributory', - 'retrievabilities', - 'retrievability', - 'retrievable', - 'retrievals', - 'retrievers', - 'retrieving', - 'retrimming', - 'retroacted', - 'retroacting', - 'retroaction', - 'retroactions', - 'retroactive', - 'retroactively', - 'retroactivities', - 'retroactivity', - 'retroceded', - 'retrocedes', - 'retroceding', - 'retrocession', - 'retrocessions', - 'retrodicted', - 'retrodicting', - 'retrodiction', - 'retrodictions', - 'retrodictive', - 'retrodicts', - 'retrofired', - 'retrofires', - 'retrofiring', - 'retrofitted', - 'retrofitting', - 'retroflection', - 'retroflections', - 'retroflexion', - 'retroflexions', - 'retrogradation', - 'retrogradations', - 'retrograde', - 'retrograded', - 'retrogradely', - 'retrogrades', - 'retrograding', - 'retrogress', - 'retrogressed', - 'retrogresses', - 'retrogressing', - 'retrogression', - 'retrogressions', - 'retrogressive', - 'retrogressively', - 'retropacks', - 'retroperitoneal', - 'retroperitoneally', - 'retroreflection', - 'retroreflections', - 'retroreflective', - 'retroreflector', - 'retroreflectors', - 'retrospect', - 'retrospected', - 'retrospecting', - 'retrospection', - 'retrospections', - 'retrospective', - 'retrospectively', - 'retrospectives', - 'retrospects', - 'retroversion', - 'retroversions', - 'retroviral', - 'retrovirus', - 'retroviruses', - 'returnable', - 'returnables', - 'retwisting', - 'reunification', - 'reunifications', - 'reunifying', - 'reunionist', - 'reunionistic', - 'reunionists', - 'reupholster', - 'reupholstered', - 'reupholstering', - 'reupholsters', - 'reusabilities', - 'reusability', - 'reutilization', - 'reutilizations', - 'reutilized', - 'reutilizes', - 'reutilizing', - 'reuttering', - 'revaccinate', - 'revaccinated', - 'revaccinates', - 'revaccinating', - 'revaccination', - 'revaccinations', - 'revalidate', - 'revalidated', - 'revalidates', - 'revalidating', - 'revalidation', - 'revalidations', - 'revalorization', - 'revalorizations', - 'revalorize', - 'revalorized', - 'revalorizes', - 'revalorizing', - 'revaluated', - 'revaluates', - 'revaluating', - 'revaluation', - 'revaluations', - 'revanchism', - 'revanchisms', - 'revanchist', - 'revanchists', - 'revascularization', - 'revascularizations', - 'revealable', - 'revealingly', - 'revealment', - 'revealments', - 'revegetate', - 'revegetated', - 'revegetates', - 'revegetating', - 'revegetation', - 'revegetations', - 'revelation', - 'revelations', - 'revelators', - 'revelatory', - 'revengeful', - 'revengefully', - 'revengefulness', - 'revengefulnesses', - 'reverberant', - 'reverberantly', - 'reverberate', - 'reverberated', - 'reverberates', - 'reverberating', - 'reverberation', - 'reverberations', - 'reverberative', - 'reverberatory', - 'reverenced', - 'reverencer', - 'reverencers', - 'reverences', - 'reverencing', - 'reverential', - 'reverentially', - 'reverently', - 'reverified', - 'reverifies', - 'reverifying', - 'reversibilities', - 'reversibility', - 'reversible', - 'reversibles', - 'reversibly', - 'reversional', - 'reversionary', - 'reversioner', - 'reversioners', - 'reversions', - 'revertants', - 'revertible', - 'revetments', - 'revictualed', - 'revictualing', - 'revictualled', - 'revictualling', - 'revictuals', - 'reviewable', - 'revilement', - 'revilements', - 'revisionary', - 'revisionism', - 'revisionisms', - 'revisionist', - 'revisionists', - 'revisiting', - 'revisualization', - 'revisualizations', - 'revitalise', - 'revitalised', - 'revitalises', - 'revitalising', - 'revitalization', - 'revitalizations', - 'revitalize', - 'revitalized', - 'revitalizes', - 'revitalizing', - 'revivalism', - 'revivalisms', - 'revivalist', - 'revivalistic', - 'revivalists', - 'revivification', - 'revivifications', - 'revivified', - 'revivifies', - 'revivifying', - 'reviviscence', - 'reviviscences', - 'reviviscent', - 'revocation', - 'revocations', - 'revoltingly', - 'revolution', - 'revolutionaries', - 'revolutionarily', - 'revolutionariness', - 'revolutionarinesses', - 'revolutionary', - 'revolutionise', - 'revolutionised', - 'revolutionises', - 'revolutionising', - 'revolutionist', - 'revolutionists', - 'revolutionize', - 'revolutionized', - 'revolutionizer', - 'revolutionizers', - 'revolutionizes', - 'revolutionizing', - 'revolutions', - 'revolvable', - 'revulsions', - 'rewakening', - 'rewardable', - 'rewardingly', - 'reweighing', - 'rewidening', - 'rewrapping', - 'rhabdocoele', - 'rhabdocoeles', - 'rhabdomancer', - 'rhabdomancers', - 'rhabdomancies', - 'rhabdomancy', - 'rhabdomere', - 'rhabdomeres', - 'rhabdomyosarcoma', - 'rhabdomyosarcomas', - 'rhabdomyosarcomata', - 'rhabdovirus', - 'rhabdoviruses', - 'rhadamanthine', - 'rhapsodical', - 'rhapsodically', - 'rhapsodies', - 'rhapsodist', - 'rhapsodists', - 'rhapsodize', - 'rhapsodized', - 'rhapsodizes', - 'rhapsodizing', - 'rheological', - 'rheologically', - 'rheologies', - 'rheologist', - 'rheologists', - 'rheometers', - 'rheostatic', - 'rhetorical', - 'rhetorically', - 'rhetorician', - 'rhetoricians', - 'rheumatically', - 'rheumatics', - 'rheumatism', - 'rheumatisms', - 'rheumatizes', - 'rheumatoid', - 'rheumatologies', - 'rheumatologist', - 'rheumatologists', - 'rheumatology', - 'rhinencephala', - 'rhinencephalic', - 'rhinencephalon', - 'rhinestone', - 'rhinestoned', - 'rhinestones', - 'rhinitides', - 'rhinoceros', - 'rhinoceroses', - 'rhinoplasties', - 'rhinoplasty', - 'rhinoscopies', - 'rhinoscopy', - 'rhinovirus', - 'rhinoviruses', - 'rhizoctonia', - 'rhizoctonias', - 'rhizomatous', - 'rhizoplane', - 'rhizoplanes', - 'rhizopuses', - 'rhizosphere', - 'rhizospheres', - 'rhizotomies', - 'rhodamines', - 'rhodochrosite', - 'rhodochrosites', - 'rhododendron', - 'rhododendrons', - 'rhodolites', - 'rhodomontade', - 'rhodomontades', - 'rhodonites', - 'rhodopsins', - 'rhombencephala', - 'rhombencephalon', - 'rhombohedra', - 'rhombohedral', - 'rhombohedron', - 'rhombohedrons', - 'rhomboidal', - 'rhomboidei', - 'rhomboideus', - 'rhymesters', - 'rhynchocephalian', - 'rhynchocephalians', - 'rhythmical', - 'rhythmically', - 'rhythmicities', - 'rhythmicity', - 'rhythmists', - 'rhythmization', - 'rhythmizations', - 'rhythmized', - 'rhythmizes', - 'rhythmizing', - 'rhytidomes', - 'ribaldries', - 'ribavirins', - 'ribbonfish', - 'ribbonfishes', - 'ribbonlike', - 'ribgrasses', - 'riboflavin', - 'riboflavins', - 'ribonuclease', - 'ribonucleases', - 'ribonucleoprotein', - 'ribonucleoproteins', - 'ribonucleoside', - 'ribonucleosides', - 'ribonucleotide', - 'ribonucleotides', - 'richnesses', - 'ricketiest', - 'rickettsia', - 'rickettsiae', - 'rickettsial', - 'rickettsias', - 'ricocheted', - 'ricocheting', - 'ricochetted', - 'ricochetting', - 'riderships', - 'ridgelines', - 'ridgelings', - 'ridgepoles', - 'ridiculers', - 'ridiculing', - 'ridiculous', - 'ridiculously', - 'ridiculousness', - 'ridiculousnesses', - 'rifampicin', - 'rifampicins', - 'rifenesses', - 'riflebirds', - 'rigamarole', - 'rigamaroles', - 'righteously', - 'righteousness', - 'righteousnesses', - 'rightfully', - 'rightfulness', - 'rightfulnesses', - 'rightnesses', - 'rigidification', - 'rigidifications', - 'rigidified', - 'rigidifies', - 'rigidifying', - 'rigidities', - 'rigidnesses', - 'rigmaroles', - 'rigoristic', - 'rigorously', - 'rigorousness', - 'rigorousnesses', - 'rijsttafel', - 'rijsttafels', - 'riminesses', - 'rimosities', - 'rinderpest', - 'rinderpests', - 'ringbarked', - 'ringbarking', - 'ringhalses', - 'ringleader', - 'ringleaders', - 'ringmaster', - 'ringmasters', - 'ringstraked', - 'ringtosses', - 'riotousness', - 'riotousnesses', - 'ripenesses', - 'riprapping', - 'ripsnorter', - 'ripsnorters', - 'ripsnorting', - 'risibilities', - 'risibility', - 'riskinesses', - 'risorgimento', - 'risorgimentos', - 'ritardando', - 'ritardandos', - 'ritornelli', - 'ritornello', - 'ritornellos', - 'ritualisms', - 'ritualistic', - 'ritualistically', - 'ritualists', - 'ritualization', - 'ritualizations', - 'ritualized', - 'ritualizes', - 'ritualizing', - 'ritzinesses', - 'riverbanks', - 'riverboats', - 'riverfront', - 'riverfronts', - 'riversides', - 'riverwards', - 'rivetingly', - 'roadabilities', - 'roadability', - 'roadblocked', - 'roadblocking', - 'roadblocks', - 'roadholding', - 'roadholdings', - 'roadhouses', - 'roadrunner', - 'roadrunners', - 'roadsteads', - 'roadworthiness', - 'roadworthinesses', - 'roadworthy', - 'robotically', - 'robotization', - 'robotizations', - 'robotizing', - 'robustious', - 'robustiously', - 'robustiousness', - 'robustiousnesses', - 'robustness', - 'robustnesses', - 'rockabillies', - 'rockabilly', - 'rocketeers', - 'rocketries', - 'rockfishes', - 'rockhopper', - 'rockhoppers', - 'rockhounding', - 'rockhoundings', - 'rockhounds', - 'rockinesses', - 'rockshafts', - 'rodenticide', - 'rodenticides', - 'rodomontade', - 'rodomontades', - 'roentgenogram', - 'roentgenograms', - 'roentgenographic', - 'roentgenographically', - 'roentgenographies', - 'roentgenography', - 'roentgenologic', - 'roentgenological', - 'roentgenologically', - 'roentgenologies', - 'roentgenologist', - 'roentgenologists', - 'roentgenology', - 'roguishness', - 'roguishnesses', - 'roisterers', - 'roistering', - 'roisterous', - 'roisterously', - 'rollicking', - 'romanising', - 'romanization', - 'romanizations', - 'romanizing', - 'romantically', - 'romanticise', - 'romanticised', - 'romanticises', - 'romanticising', - 'romanticism', - 'romanticisms', - 'romanticist', - 'romanticists', - 'romanticization', - 'romanticizations', - 'romanticize', - 'romanticized', - 'romanticizes', - 'romanticizing', - 'romeldales', - 'roominesses', - 'rootedness', - 'rootednesses', - 'rootlessness', - 'rootlessnesses', - 'rootstocks', - 'ropedancer', - 'ropedancers', - 'ropedancing', - 'ropedancings', - 'ropewalker', - 'ropewalkers', - 'ropinesses', - 'roquelaure', - 'roquelaures', - 'rosebushes', - 'rosefishes', - 'rosemaling', - 'rosemalings', - 'rosemaries', - 'rosinesses', - 'rosinweeds', - 'rostellums', - 'rotameters', - 'rotational', - 'rotatively', - 'rotaviruses', - 'rotisserie', - 'rotisseries', - 'rotogravure', - 'rotogravures', - 'rotorcraft', - 'rototilled', - 'rototiller', - 'rototillers', - 'rototilling', - 'rottenness', - 'rottennesses', - 'rottenstone', - 'rottenstones', - 'rottweiler', - 'rottweilers', - 'rotundities', - 'rotundness', - 'rotundnesses', - 'roughcasting', - 'roughcasts', - 'roughdried', - 'roughdries', - 'roughdrying', - 'roughening', - 'roughhewed', - 'roughhewing', - 'roughhouse', - 'roughhoused', - 'roughhouses', - 'roughhousing', - 'roughnecks', - 'roughnesses', - 'roughrider', - 'roughriders', - 'rouletting', - 'roundabout', - 'roundaboutness', - 'roundaboutnesses', - 'roundabouts', - 'roundedness', - 'roundednesses', - 'roundelays', - 'roundheaded', - 'roundheadedness', - 'roundheadednesses', - 'roundhouse', - 'roundhouses', - 'roundnesses', - 'roundtable', - 'roundtables', - 'roundwoods', - 'roundworms', - 'rouseabout', - 'rouseabouts', - 'rousements', - 'roustabout', - 'roustabouts', - 'routinization', - 'routinizations', - 'routinized', - 'routinizes', - 'routinizing', - 'rowanberries', - 'rowanberry', - 'rowdinesses', - 'roystering', - 'rubberized', - 'rubberlike', - 'rubberneck', - 'rubbernecked', - 'rubbernecker', - 'rubberneckers', - 'rubbernecking', - 'rubbernecks', - 'rubefacient', - 'rubefacients', - 'rubellites', - 'rubicundities', - 'rubicundity', - 'rubrically', - 'rubricated', - 'rubricates', - 'rubricating', - 'rubrication', - 'rubrications', - 'rubricator', - 'rubricators', - 'rubythroat', - 'rubythroats', - 'rudbeckias', - 'rudderless', - 'rudderpost', - 'rudderposts', - 'ruddinesses', - 'rudenesses', - 'rudimental', - 'rudimentarily', - 'rudimentariness', - 'rudimentarinesses', - 'rudimentary', - 'ruefulness', - 'ruefulnesses', - 'ruffianism', - 'ruffianisms', - 'ruggedization', - 'ruggedizations', - 'ruggedized', - 'ruggedizes', - 'ruggedizing', - 'ruggedness', - 'ruggednesses', - 'rugosities', - 'ruinations', - 'ruinousness', - 'ruinousnesses', - 'rulerships', - 'rumbustious', - 'rumbustiously', - 'rumbustiousness', - 'rumbustiousnesses', - 'ruminantly', - 'ruminating', - 'rumination', - 'ruminations', - 'ruminative', - 'ruminatively', - 'ruminators', - 'rumormonger', - 'rumormongering', - 'rumormongerings', - 'rumormongers', - 'rumrunners', - 'runarounds', - 'runtinesses', - 'ruralising', - 'ruralities', - 'ruralizing', - 'rushlights', - 'russetings', - 'russetting', - 'russettings', - 'russifying', - 'rustically', - 'rusticated', - 'rusticates', - 'rusticating', - 'rustication', - 'rustications', - 'rusticator', - 'rusticators', - 'rusticities', - 'rustinesses', - 'rustproofed', - 'rustproofing', - 'rustproofs', - 'rutheniums', - 'rutherfordium', - 'rutherfordiums', - 'ruthfulness', - 'ruthfulnesses', - 'ruthlessly', - 'ruthlessness', - 'ruthlessnesses', - 'ruttishness', - 'ruttishnesses', - 'ryegrasses', - 'sabadillas', - 'sabbatical', - 'sabbaticals', - 'sabermetrician', - 'sabermetricians', - 'sabermetrics', - 'sablefishes', - 'sabotaging', - 'sacahuista', - 'sacahuistas', - 'sacahuiste', - 'sacahuistes', - 'saccharase', - 'saccharases', - 'saccharide', - 'saccharides', - 'saccharification', - 'saccharifications', - 'saccharified', - 'saccharifies', - 'saccharify', - 'saccharifying', - 'saccharimeter', - 'saccharimeters', - 'saccharine', - 'saccharinities', - 'saccharinity', - 'saccharins', - 'saccharoidal', - 'saccharometer', - 'saccharometers', - 'saccharomyces', - 'sacculated', - 'sacculation', - 'sacculations', - 'sacerdotal', - 'sacerdotalism', - 'sacerdotalisms', - 'sacerdotalist', - 'sacerdotalists', - 'sacerdotally', - 'sackcloths', - 'sacramental', - 'sacramentalism', - 'sacramentalisms', - 'sacramentalist', - 'sacramentalists', - 'sacramentally', - 'sacramentals', - 'sacraments', - 'sacredness', - 'sacrednesses', - 'sacrificed', - 'sacrificer', - 'sacrificers', - 'sacrifices', - 'sacrificial', - 'sacrificially', - 'sacrificing', - 'sacrileges', - 'sacrilegious', - 'sacrilegiously', - 'sacrilegiousness', - 'sacrilegiousnesses', - 'sacristans', - 'sacristies', - 'sacroiliac', - 'sacroiliacs', - 'sacrosanct', - 'sacrosanctities', - 'sacrosanctity', - 'saddlebags', - 'saddlebows', - 'saddlebred', - 'saddlebreds', - 'saddlecloth', - 'saddlecloths', - 'saddleless', - 'saddleries', - 'saddletree', - 'saddletrees', - 'sadistically', - 'sadomasochism', - 'sadomasochisms', - 'sadomasochist', - 'sadomasochistic', - 'sadomasochists', - 'safecracker', - 'safecrackers', - 'safecracking', - 'safecrackings', - 'safeguarded', - 'safeguarding', - 'safeguards', - 'safekeeping', - 'safekeepings', - 'safelights', - 'safenesses', - 'safflowers', - 'safranines', - 'sagaciously', - 'sagaciousness', - 'sagaciousnesses', - 'sagacities', - 'saganashes', - 'sagebrushes', - 'sagenesses', - 'sagittally', - 'sailboarding', - 'sailboardings', - 'sailboards', - 'sailboater', - 'sailboaters', - 'sailboating', - 'sailboatings', - 'sailcloths', - 'sailfishes', - 'sailplaned', - 'sailplaner', - 'sailplaners', - 'sailplanes', - 'sailplaning', - 'sainthoods', - 'saintliest', - 'saintliness', - 'saintlinesses', - 'saintships', - 'salabilities', - 'salability', - 'salaciously', - 'salaciousness', - 'salaciousnesses', - 'salacities', - 'salamander', - 'salamanders', - 'salamandrine', - 'saleratuses', - 'salesclerk', - 'salesclerks', - 'salesgirls', - 'salesladies', - 'salesmanship', - 'salesmanships', - 'salespeople', - 'salesperson', - 'salespersons', - 'salesrooms', - 'saleswoman', - 'saleswomen', - 'salicylate', - 'salicylates', - 'saliencies', - 'salinities', - 'salinization', - 'salinizations', - 'salinizing', - 'salinometer', - 'salinometers', - 'salivating', - 'salivation', - 'salivations', - 'salivators', - 'sallowness', - 'sallownesses', - 'salmagundi', - 'salmagundis', - 'salmonberries', - 'salmonberry', - 'salmonella', - 'salmonellae', - 'salmonellas', - 'salmonelloses', - 'salmonellosis', - 'salmonoids', - 'salometers', - 'salpiglosses', - 'salpiglossis', - 'salpiglossises', - 'salpingites', - 'salpingitides', - 'salpingitis', - 'salpingitises', - 'saltarello', - 'saltarellos', - 'saltations', - 'saltatorial', - 'saltbushes', - 'saltcellar', - 'saltcellars', - 'saltimbocca', - 'saltimboccas', - 'saltinesses', - 'saltnesses', - 'saltpeters', - 'saltshaker', - 'saltshakers', - 'salubrious', - 'salubriously', - 'salubriousness', - 'salubriousnesses', - 'salubrities', - 'salutarily', - 'salutariness', - 'salutarinesses', - 'salutation', - 'salutational', - 'salutations', - 'salutatorian', - 'salutatorians', - 'salutatories', - 'salutatory', - 'salutiferous', - 'salvageabilities', - 'salvageability', - 'salvageable', - 'salvarsans', - 'salvational', - 'salvationism', - 'salvationisms', - 'salvationist', - 'salvations', - 'salverform', - 'samaritans', - 'samarskite', - 'samarskites', - 'samenesses', - 'sanatorium', - 'sanatoriums', - 'sanbenitos', - 'sanctification', - 'sanctifications', - 'sanctified', - 'sanctifier', - 'sanctifiers', - 'sanctifies', - 'sanctifying', - 'sanctimonies', - 'sanctimonious', - 'sanctimoniously', - 'sanctimoniousness', - 'sanctimoniousnesses', - 'sanctimony', - 'sanctionable', - 'sanctioned', - 'sanctioning', - 'sanctities', - 'sanctuaries', - 'sandalling', - 'sandalwood', - 'sandalwoods', - 'sandbagged', - 'sandbagger', - 'sandbaggers', - 'sandbagging', - 'sandblasted', - 'sandblaster', - 'sandblasters', - 'sandblasting', - 'sandblasts', - 'sanderling', - 'sanderlings', - 'sandfishes', - 'sandglasses', - 'sandgrouse', - 'sandgrouses', - 'sandinesses', - 'sandlotter', - 'sandlotters', - 'sandpainting', - 'sandpaintings', - 'sandpapered', - 'sandpapering', - 'sandpapers', - 'sandpapery', - 'sandpipers', - 'sandstones', - 'sandstorms', - 'sandwiched', - 'sandwiches', - 'sandwiching', - 'sanenesses', - 'sangfroids', - 'sanguinaria', - 'sanguinarias', - 'sanguinarily', - 'sanguinary', - 'sanguinely', - 'sanguineness', - 'sanguinenesses', - 'sanguineous', - 'sanguinities', - 'sanguinity', - 'sanitarian', - 'sanitarians', - 'sanitaries', - 'sanitarily', - 'sanitarium', - 'sanitariums', - 'sanitating', - 'sanitation', - 'sanitations', - 'sanitising', - 'sanitization', - 'sanitizations', - 'sanitizing', - 'sanitorium', - 'sanitoriums', - 'sannyasins', - 'sansculotte', - 'sansculottes', - 'sansculottic', - 'sansculottish', - 'sansculottism', - 'sansculottisms', - 'sansevieria', - 'sansevierias', - 'santolinas', - 'sapidities', - 'sapiencies', - 'saplessness', - 'saplessnesses', - 'sapodillas', - 'sapogenins', - 'saponaceous', - 'saponaceousness', - 'saponaceousnesses', - 'saponifiable', - 'saponification', - 'saponifications', - 'saponified', - 'saponifier', - 'saponifiers', - 'saponifies', - 'saponifying', - 'sapphirine', - 'sappinesses', - 'saprogenic', - 'saprogenicities', - 'saprogenicity', - 'saprolites', - 'saprophagous', - 'saprophyte', - 'saprophytes', - 'saprophytic', - 'saprophytically', - 'sapsuckers', - 'sarabandes', - 'sarcastically', - 'sarcoidoses', - 'sarcoidosis', - 'sarcolemma', - 'sarcolemmal', - 'sarcolemmas', - 'sarcomatoses', - 'sarcomatosis', - 'sarcomatous', - 'sarcomeres', - 'sarcophagi', - 'sarcophagus', - 'sarcophaguses', - 'sarcoplasm', - 'sarcoplasmic', - 'sarcoplasms', - 'sarcosomal', - 'sarcosomes', - 'sardonically', - 'sardonicism', - 'sardonicisms', - 'sardonyxes', - 'sargassums', - 'sarracenia', - 'sarracenias', - 'sarsaparilla', - 'sarsaparillas', - 'sartorially', - 'saskatoons', - 'sassafrases', - 'satanically', - 'satchelful', - 'satchelfuls', - 'satchelsful', - 'satellites', - 'satiations', - 'satinwoods', - 'satirically', - 'satirising', - 'satirizable', - 'satirizing', - 'satisfaction', - 'satisfactions', - 'satisfactorily', - 'satisfactoriness', - 'satisfactorinesses', - 'satisfactory', - 'satisfiable', - 'satisfying', - 'satisfyingly', - 'saturating', - 'saturation', - 'saturations', - 'saturators', - 'saturnalia', - 'saturnalian', - 'saturnalianly', - 'saturnalias', - 'saturniids', - 'saturnisms', - 'satyagraha', - 'satyagrahas', - 'satyriases', - 'satyriasis', - 'sauceboats', - 'sauceboxes', - 'saucerlike', - 'saucinesses', - 'sauerbraten', - 'sauerbratens', - 'sauerkraut', - 'sauerkrauts', - 'saunterers', - 'sauntering', - 'saurischian', - 'saurischians', - 'savageness', - 'savagenesses', - 'savageries', - 'savoriness', - 'savorinesses', - 'savouriest', - 'sawboneses', - 'sawtimbers', - 'saxicolous', - 'saxifrages', - 'saxitoxins', - 'saxophones', - 'saxophonic', - 'saxophonist', - 'saxophonists', - 'scabbarded', - 'scabbarding', - 'scabiouses', - 'scabrously', - 'scabrousness', - 'scabrousnesses', - 'scaffolded', - 'scaffolding', - 'scaffoldings', - 'scagliolas', - 'scalariform', - 'scalariformly', - 'scalinesses', - 'scallopers', - 'scalloping', - 'scallopini', - 'scallopinis', - 'scallywags', - 'scalograms', - 'scaloppine', - 'scaloppines', - 'scammonies', - 'scampering', - 'scandaling', - 'scandalise', - 'scandalised', - 'scandalises', - 'scandalising', - 'scandalize', - 'scandalized', - 'scandalizes', - 'scandalizing', - 'scandalled', - 'scandalling', - 'scandalmonger', - 'scandalmongering', - 'scandalmongerings', - 'scandalmongers', - 'scandalous', - 'scandalously', - 'scandalousness', - 'scandalousnesses', - 'scantiness', - 'scantinesses', - 'scantlings', - 'scantnesses', - 'scapegoated', - 'scapegoating', - 'scapegoatings', - 'scapegoatism', - 'scapegoatisms', - 'scapegoats', - 'scapegrace', - 'scapegraces', - 'scapolites', - 'scarabaeus', - 'scarabaeuses', - 'scaramouch', - 'scaramouche', - 'scaramouches', - 'scarceness', - 'scarcenesses', - 'scarcities', - 'scarecrows', - 'scareheads', - 'scaremonger', - 'scaremongers', - 'scarfskins', - 'scarification', - 'scarifications', - 'scarifiers', - 'scarifying', - 'scarifyingly', - 'scarlatina', - 'scarlatinal', - 'scarlatinas', - 'scarpering', - 'scatheless', - 'scathingly', - 'scatological', - 'scatologies', - 'scatteration', - 'scatterations', - 'scatterbrain', - 'scatterbrained', - 'scatterbrains', - 'scatterers', - 'scattergood', - 'scattergoods', - 'scattergram', - 'scattergrams', - 'scattergun', - 'scatterguns', - 'scattering', - 'scatteringly', - 'scatterings', - 'scattershot', - 'scavengers', - 'scavenging', - 'scenarists', - 'sceneshifter', - 'sceneshifters', - 'scenically', - 'scenographer', - 'scenographers', - 'scenographic', - 'scenographies', - 'scenography', - 'sceptering', - 'scepticism', - 'scepticisms', - 'schadenfreude', - 'schadenfreudes', - 'schedulers', - 'scheduling', - 'scheelites', - 'schematically', - 'schematics', - 'schematism', - 'schematisms', - 'schematization', - 'schematizations', - 'schematize', - 'schematized', - 'schematizes', - 'schematizing', - 'scherzando', - 'scherzandos', - 'schillings', - 'schipperke', - 'schipperkes', - 'schismatic', - 'schismatical', - 'schismatically', - 'schismatics', - 'schismatize', - 'schismatized', - 'schismatizes', - 'schismatizing', - 'schistosities', - 'schistosity', - 'schistosomal', - 'schistosome', - 'schistosomes', - 'schistosomiases', - 'schistosomiasis', - 'schizocarp', - 'schizocarps', - 'schizogonic', - 'schizogonies', - 'schizogonous', - 'schizogony', - 'schizophrene', - 'schizophrenes', - 'schizophrenia', - 'schizophrenias', - 'schizophrenic', - 'schizophrenically', - 'schizophrenics', - 'schizziest', - 'schlemiels', - 'schlepping', - 'schlockmeister', - 'schlockmeisters', - 'schlumping', - 'schmaltzes', - 'schmaltzier', - 'schmaltziest', - 'schmalzier', - 'schmalziest', - 'schmeering', - 'schmoosing', - 'schmoozing', - 'schnauzers', - 'schnitzels', - 'schnorkeled', - 'schnorkeling', - 'schnorkels', - 'schnorrers', - 'schnozzles', - 'scholarship', - 'scholarships', - 'scholastic', - 'scholastically', - 'scholasticate', - 'scholasticates', - 'scholasticism', - 'scholasticisms', - 'scholastics', - 'scholiastic', - 'scholiasts', - 'schoolbags', - 'schoolbook', - 'schoolbooks', - 'schoolboyish', - 'schoolboys', - 'schoolchild', - 'schoolchildren', - 'schoolfellow', - 'schoolfellows', - 'schoolgirl', - 'schoolgirls', - 'schoolhouse', - 'schoolhouses', - 'schoolings', - 'schoolkids', - 'schoolmarm', - 'schoolmarmish', - 'schoolmarms', - 'schoolmaster', - 'schoolmasterish', - 'schoolmasterly', - 'schoolmasters', - 'schoolmate', - 'schoolmates', - 'schoolmistress', - 'schoolmistresses', - 'schoolroom', - 'schoolrooms', - 'schoolteacher', - 'schoolteachers', - 'schooltime', - 'schooltimes', - 'schoolwork', - 'schoolworks', - 'schottische', - 'schottisches', - 'schussboomer', - 'schussboomers', - 'schwarmerei', - 'schwarmereis', - 'scientific', - 'scientifically', - 'scientisms', - 'scientists', - 'scientized', - 'scientizes', - 'scientizing', - 'scintigraphic', - 'scintigraphies', - 'scintigraphy', - 'scintillae', - 'scintillant', - 'scintillantly', - 'scintillas', - 'scintillate', - 'scintillated', - 'scintillates', - 'scintillating', - 'scintillation', - 'scintillations', - 'scintillator', - 'scintillators', - 'scintillometer', - 'scintillometers', - 'sciolistic', - 'scirrhuses', - 'scissoring', - 'scissortail', - 'scissortails', - 'sclerenchyma', - 'sclerenchymas', - 'sclerenchymata', - 'sclerenchymatous', - 'scleroderma', - 'sclerodermas', - 'sclerodermata', - 'scleromata', - 'sclerometer', - 'sclerometers', - 'scleroprotein', - 'scleroproteins', - 'sclerosing', - 'sclerotial', - 'sclerotics', - 'sclerotins', - 'sclerotium', - 'sclerotization', - 'sclerotizations', - 'sclerotized', - 'scolecites', - 'scolloping', - 'scolopendra', - 'scolopendras', - 'scombroids', - 'scopolamine', - 'scopolamines', - 'scorchingly', - 'scoreboard', - 'scoreboards', - 'scorecards', - 'scorekeeper', - 'scorekeepers', - 'scoriaceous', - 'scorifying', - 'scornfully', - 'scornfulness', - 'scornfulnesses', - 'scorpaenid', - 'scorpaenids', - 'scoundrelly', - 'scoundrels', - 'scoutcraft', - 'scoutcrafts', - 'scouthered', - 'scouthering', - 'scoutmaster', - 'scoutmasters', - 'scowdering', - 'scowlingly', - 'scrabblers', - 'scrabblier', - 'scrabbliest', - 'scrabbling', - 'scraggiest', - 'scragglier', - 'scraggliest', - 'scraiching', - 'scraighing', - 'scramblers', - 'scrambling', - 'scrapbooks', - 'scrapheaps', - 'scrappages', - 'scrappiest', - 'scrappiness', - 'scrappinesses', - 'scratchboard', - 'scratchboards', - 'scratchers', - 'scratchier', - 'scratchiest', - 'scratchily', - 'scratchiness', - 'scratchinesses', - 'scratching', - 'scrawliest', - 'scrawniest', - 'scrawniness', - 'scrawninesses', - 'screamingly', - 'screechers', - 'screechier', - 'screechiest', - 'screeching', - 'screenable', - 'screenings', - 'screenland', - 'screenlands', - 'screenplay', - 'screenplays', - 'screenwriter', - 'screenwriters', - 'screwballs', - 'screwbeans', - 'screwdriver', - 'screwdrivers', - 'screwiness', - 'screwinesses', - 'screwworms', - 'scribblers', - 'scribbling', - 'scribblings', - 'scrimmaged', - 'scrimmager', - 'scrimmagers', - 'scrimmages', - 'scrimmaging', - 'scrimpiest', - 'scrimshander', - 'scrimshanders', - 'scrimshawed', - 'scrimshawing', - 'scrimshaws', - 'scriptoria', - 'scriptorium', - 'scriptural', - 'scripturally', - 'scriptures', - 'scriptwriter', - 'scriptwriters', - 'scriveners', - 'scrofulous', - 'scroggiest', - 'scrollwork', - 'scrollworks', - 'scrooching', - 'scrootched', - 'scrootches', - 'scrootching', - 'scroungers', - 'scroungier', - 'scroungiest', - 'scrounging', - 'scrubbable', - 'scrubbiest', - 'scrublands', - 'scrubwoman', - 'scrubwomen', - 'scruffiest', - 'scruffiness', - 'scruffinesses', - 'scrummaged', - 'scrummages', - 'scrummaging', - 'scrumptious', - 'scrumptiously', - 'scrunching', - 'scrupulosities', - 'scrupulosity', - 'scrupulous', - 'scrupulously', - 'scrupulousness', - 'scrupulousnesses', - 'scrutineer', - 'scrutineers', - 'scrutinies', - 'scrutinise', - 'scrutinised', - 'scrutinises', - 'scrutinising', - 'scrutinize', - 'scrutinized', - 'scrutinizer', - 'scrutinizers', - 'scrutinizes', - 'scrutinizing', - 'sculleries', - 'sculptress', - 'sculptresses', - 'sculptural', - 'sculpturally', - 'sculptured', - 'sculptures', - 'sculpturesque', - 'sculpturesquely', - 'sculpturing', - 'scungillis', - 'scunnering', - 'scuppering', - 'scuppernong', - 'scuppernongs', - 'scurrilities', - 'scurrility', - 'scurrilous', - 'scurrilously', - 'scurrilousness', - 'scurrilousnesses', - 'scurviness', - 'scurvinesses', - 'scutcheons', - 'scutellate', - 'scutellated', - 'scuttering', - 'scuttlebutt', - 'scuttlebutts', - 'scyphistoma', - 'scyphistomae', - 'scyphistomas', - 'scyphozoan', - 'scyphozoans', - 'seabeaches', - 'seaborgium', - 'seaborgiums', - 'seafarings', - 'seamanlike', - 'seamanship', - 'seamanships', - 'seaminesses', - 'seamlessly', - 'seamlessness', - 'seamlessnesses', - 'seamstress', - 'seamstresses', - 'searchable', - 'searchingly', - 'searchless', - 'searchlight', - 'searchlights', - 'seasickness', - 'seasicknesses', - 'seasonable', - 'seasonableness', - 'seasonablenesses', - 'seasonably', - 'seasonalities', - 'seasonality', - 'seasonally', - 'seasonings', - 'seasonless', - 'seastrands', - 'seaworthiness', - 'seaworthinesses', - 'seborrheas', - 'seborrheic', - 'secessionism', - 'secessionisms', - 'secessionist', - 'secessionists', - 'secessions', - 'secludedly', - 'secludedness', - 'secludednesses', - 'seclusions', - 'seclusively', - 'seclusiveness', - 'seclusivenesses', - 'secobarbital', - 'secobarbitals', - 'secondaries', - 'secondarily', - 'secondariness', - 'secondarinesses', - 'secondhand', - 'secretagogue', - 'secretagogues', - 'secretarial', - 'secretariat', - 'secretariats', - 'secretaries', - 'secretaryship', - 'secretaryships', - 'secretionary', - 'secretions', - 'secretively', - 'secretiveness', - 'secretivenesses', - 'sectarianism', - 'sectarianisms', - 'sectarianize', - 'sectarianized', - 'sectarianizes', - 'sectarianizing', - 'sectarians', - 'sectilities', - 'sectionalism', - 'sectionalisms', - 'sectionally', - 'sectionals', - 'sectioning', - 'secularise', - 'secularised', - 'secularises', - 'secularising', - 'secularism', - 'secularisms', - 'secularist', - 'secularistic', - 'secularists', - 'secularities', - 'secularity', - 'secularization', - 'secularizations', - 'secularize', - 'secularized', - 'secularizer', - 'secularizers', - 'secularizes', - 'secularizing', - 'securement', - 'securements', - 'secureness', - 'securenesses', - 'securities', - 'securitization', - 'securitizations', - 'securitize', - 'securitized', - 'securitizes', - 'securitizing', - 'sedateness', - 'sedatenesses', - 'sedimentable', - 'sedimentary', - 'sedimentation', - 'sedimentations', - 'sedimented', - 'sedimenting', - 'sedimentologic', - 'sedimentological', - 'sedimentologically', - 'sedimentologies', - 'sedimentologist', - 'sedimentologists', - 'sedimentology', - 'seditiously', - 'seditiousness', - 'seditiousnesses', - 'seducement', - 'seducements', - 'seductions', - 'seductively', - 'seductiveness', - 'seductivenesses', - 'seductress', - 'seductresses', - 'sedulities', - 'sedulously', - 'sedulousness', - 'sedulousnesses', - 'seecatchie', - 'seedeaters', - 'seedinesses', - 'seemliness', - 'seemlinesses', - 'seersucker', - 'seersuckers', - 'segmentally', - 'segmentary', - 'segmentation', - 'segmentations', - 'segmenting', - 'segregants', - 'segregated', - 'segregates', - 'segregating', - 'segregation', - 'segregationist', - 'segregationists', - 'segregations', - 'segregative', - 'seguidilla', - 'seguidillas', - 'seigneurial', - 'seigneuries', - 'seigniorage', - 'seigniorages', - 'seigniories', - 'seignorage', - 'seignorages', - 'seignorial', - 'seignories', - 'seismically', - 'seismicities', - 'seismicity', - 'seismogram', - 'seismograms', - 'seismograph', - 'seismographer', - 'seismographers', - 'seismographic', - 'seismographies', - 'seismographs', - 'seismography', - 'seismological', - 'seismologies', - 'seismologist', - 'seismologists', - 'seismology', - 'seismometer', - 'seismometers', - 'seismometric', - 'seismometries', - 'seismometry', - 'selachians', - 'selaginella', - 'selaginellas', - 'selectable', - 'selectionist', - 'selectionists', - 'selections', - 'selectively', - 'selectiveness', - 'selectivenesses', - 'selectivities', - 'selectivity', - 'selectness', - 'selectnesses', - 'seleniferous', - 'selenocentric', - 'selenological', - 'selenologies', - 'selenologist', - 'selenologists', - 'selenology', - 'selfishness', - 'selfishnesses', - 'selflessly', - 'selflessness', - 'selflessnesses', - 'selfnesses', - 'selfsameness', - 'selfsamenesses', - 'semantical', - 'semantically', - 'semanticist', - 'semanticists', - 'semaphored', - 'semaphores', - 'semaphoring', - 'semasiological', - 'semasiologies', - 'semasiology', - 'semblables', - 'semblances', - 'semeiologies', - 'semeiology', - 'semeiotics', - 'semestrial', - 'semiabstract', - 'semiabstraction', - 'semiabstractions', - 'semiannual', - 'semiannually', - 'semiaquatic', - 'semiarboreal', - 'semiaridities', - 'semiaridity', - 'semiautobiographical', - 'semiautomatic', - 'semiautomatically', - 'semiautomatics', - 'semiautonomous', - 'semibreves', - 'semicentennial', - 'semicentennials', - 'semicircle', - 'semicircles', - 'semicircular', - 'semicivilized', - 'semiclassic', - 'semiclassical', - 'semiclassics', - 'semicolonial', - 'semicolonialism', - 'semicolonialisms', - 'semicolonies', - 'semicolons', - 'semicolony', - 'semicommercial', - 'semiconducting', - 'semiconductor', - 'semiconductors', - 'semiconscious', - 'semiconsciousness', - 'semiconsciousnesses', - 'semiconservative', - 'semiconservatively', - 'semicrystalline', - 'semicylindrical', - 'semidarkness', - 'semidarknesses', - 'semideified', - 'semideifies', - 'semideifying', - 'semidesert', - 'semideserts', - 'semidetached', - 'semidiameter', - 'semidiameters', - 'semidiurnal', - 'semidivine', - 'semidocumentaries', - 'semidocumentary', - 'semidomesticated', - 'semidomestication', - 'semidomestications', - 'semidominant', - 'semidrying', - 'semidwarfs', - 'semidwarves', - 'semiempirical', - 'semievergreen', - 'semifeudal', - 'semifinalist', - 'semifinalists', - 'semifinals', - 'semifinished', - 'semifitted', - 'semiflexible', - 'semifluids', - 'semiformal', - 'semigovernmental', - 'semigroups', - 'semihoboes', - 'semilegendary', - 'semilethal', - 'semilethals', - 'semiliquid', - 'semiliquids', - 'semiliterate', - 'semiliterates', - 'semilogarithmic', - 'semilustrous', - 'semimetallic', - 'semimetals', - 'semimonastic', - 'semimonthlies', - 'semimonthly', - 'semimystical', - 'seminarian', - 'seminarians', - 'seminaries', - 'seminarist', - 'seminarists', - 'seminatural', - 'seminiferous', - 'seminomadic', - 'seminomads', - 'seminudities', - 'seminudity', - 'semiofficial', - 'semiofficially', - 'semiological', - 'semiologically', - 'semiologies', - 'semiologist', - 'semiologists', - 'semiopaque', - 'semiotician', - 'semioticians', - 'semioticist', - 'semioticists', - 'semipalmated', - 'semiparasite', - 'semiparasites', - 'semiparasitic', - 'semipermanent', - 'semipermeabilities', - 'semipermeability', - 'semipermeable', - 'semipolitical', - 'semipopular', - 'semiporcelain', - 'semiporcelains', - 'semipornographic', - 'semipornographies', - 'semipornography', - 'semipostal', - 'semipostals', - 'semiprecious', - 'semiprivate', - 'semiprofessional', - 'semiprofessionally', - 'semiprofessionals', - 'semipublic', - 'semiquantitative', - 'semiquantitatively', - 'semiquaver', - 'semiquavers', - 'semireligious', - 'semiretired', - 'semiretirement', - 'semiretirements', - 'semisacred', - 'semisecret', - 'semisedentary', - 'semishrubby', - 'semiskilled', - 'semisolids', - 'semisubmersible', - 'semisubmersibles', - 'semisynthetic', - 'semiterrestrial', - 'semitonally', - 'semitonically', - 'semitrailer', - 'semitrailers', - 'semitranslucent', - 'semitransparent', - 'semitropic', - 'semitropical', - 'semitropics', - 'semivowels', - 'semiweeklies', - 'semiweekly', - 'semiyearly', - 'sempervivum', - 'sempervivums', - 'sempiternal', - 'sempiternally', - 'sempiternities', - 'sempiternity', - 'sempstress', - 'sempstresses', - 'senatorial', - 'senatorian', - 'senatorship', - 'senatorships', - 'senectitude', - 'senectitudes', - 'senescence', - 'senescences', - 'seneschals', - 'senhoritas', - 'senilities', - 'seniorities', - 'sensational', - 'sensationalise', - 'sensationalised', - 'sensationalises', - 'sensationalising', - 'sensationalism', - 'sensationalisms', - 'sensationalist', - 'sensationalistic', - 'sensationalists', - 'sensationalize', - 'sensationalized', - 'sensationalizes', - 'sensationalizing', - 'sensationally', - 'sensations', - 'senselessly', - 'senselessness', - 'senselessnesses', - 'sensibilia', - 'sensibilities', - 'sensibility', - 'sensibleness', - 'sensiblenesses', - 'sensiblest', - 'sensitisation', - 'sensitisations', - 'sensitised', - 'sensitises', - 'sensitising', - 'sensitively', - 'sensitiveness', - 'sensitivenesses', - 'sensitives', - 'sensitivities', - 'sensitivity', - 'sensitization', - 'sensitizations', - 'sensitized', - 'sensitizer', - 'sensitizers', - 'sensitizes', - 'sensitizing', - 'sensitometer', - 'sensitometers', - 'sensitometric', - 'sensitometries', - 'sensitometry', - 'sensorially', - 'sensorimotor', - 'sensorineural', - 'sensoriums', - 'sensualism', - 'sensualisms', - 'sensualist', - 'sensualistic', - 'sensualists', - 'sensualities', - 'sensuality', - 'sensualization', - 'sensualizations', - 'sensualize', - 'sensualized', - 'sensualizes', - 'sensualizing', - 'sensuosities', - 'sensuosity', - 'sensuously', - 'sensuousness', - 'sensuousnesses', - 'sentencing', - 'sententiae', - 'sentential', - 'sententious', - 'sententiously', - 'sententiousness', - 'sententiousnesses', - 'sentiences', - 'sentiently', - 'sentimental', - 'sentimentalise', - 'sentimentalised', - 'sentimentalises', - 'sentimentalising', - 'sentimentalism', - 'sentimentalisms', - 'sentimentalist', - 'sentimentalists', - 'sentimentalities', - 'sentimentality', - 'sentimentalization', - 'sentimentalizations', - 'sentimentalize', - 'sentimentalized', - 'sentimentalizes', - 'sentimentalizing', - 'sentimentally', - 'sentiments', - 'sentineled', - 'sentineling', - 'sentinelled', - 'sentinelling', - 'separabilities', - 'separability', - 'separableness', - 'separablenesses', - 'separately', - 'separateness', - 'separatenesses', - 'separating', - 'separation', - 'separationist', - 'separationists', - 'separations', - 'separatism', - 'separatisms', - 'separatist', - 'separatistic', - 'separatists', - 'separative', - 'separators', - 'sepiolites', - 'septenarii', - 'septenarius', - 'septendecillion', - 'septendecillions', - 'septennial', - 'septennially', - 'septentrion', - 'septentrional', - 'septentrions', - 'septicemia', - 'septicemias', - 'septicemic', - 'septicidal', - 'septillion', - 'septillions', - 'septuagenarian', - 'septuagenarians', - 'septupling', - 'sepulchered', - 'sepulchering', - 'sepulchers', - 'sepulchral', - 'sepulchrally', - 'sepulchred', - 'sepulchres', - 'sepulchring', - 'sepultures', - 'sequacious', - 'sequaciously', - 'sequacities', - 'sequencers', - 'sequencies', - 'sequencing', - 'sequential', - 'sequentially', - 'sequestered', - 'sequestering', - 'sequesters', - 'sequestrate', - 'sequestrated', - 'sequestrates', - 'sequestrating', - 'sequestration', - 'sequestrations', - 'sequestrum', - 'sequestrums', - 'seraphically', - 'serenaders', - 'serenading', - 'serendipities', - 'serendipitous', - 'serendipitously', - 'serendipity', - 'sereneness', - 'serenenesses', - 'serenities', - 'sergeancies', - 'sergeanties', - 'serialised', - 'serialises', - 'serialising', - 'serialisms', - 'serialists', - 'serialization', - 'serializations', - 'serialized', - 'serializes', - 'serializing', - 'sericultural', - 'sericulture', - 'sericultures', - 'sericulturist', - 'sericulturists', - 'serigrapher', - 'serigraphers', - 'serigraphies', - 'serigraphs', - 'serigraphy', - 'seriocomic', - 'seriocomically', - 'seriousness', - 'seriousnesses', - 'serjeanties', - 'sermonette', - 'sermonettes', - 'sermonized', - 'sermonizer', - 'sermonizers', - 'sermonizes', - 'sermonizing', - 'seroconversion', - 'seroconversions', - 'serodiagnoses', - 'serodiagnosis', - 'serodiagnostic', - 'serological', - 'serologically', - 'serologies', - 'serologist', - 'serologists', - 'seronegative', - 'seronegativities', - 'seronegativity', - 'seropositive', - 'seropositivities', - 'seropositivity', - 'seropurulent', - 'serosities', - 'serotinous', - 'serotonergic', - 'serotoninergic', - 'serotonins', - 'serpentine', - 'serpentinely', - 'serpentines', - 'serpigines', - 'serpiginous', - 'serpiginously', - 'serrations', - 'serriedness', - 'serriednesses', - 'servanthood', - 'servanthoods', - 'servantless', - 'serviceabilities', - 'serviceability', - 'serviceable', - 'serviceableness', - 'serviceablenesses', - 'serviceably', - 'serviceberries', - 'serviceberry', - 'serviceman', - 'servicemen', - 'servicewoman', - 'servicewomen', - 'serviettes', - 'servileness', - 'servilenesses', - 'servilities', - 'servitudes', - 'servomechanism', - 'servomechanisms', - 'servomotor', - 'servomotors', - 'sesquicarbonate', - 'sesquicarbonates', - 'sesquicentenaries', - 'sesquicentenary', - 'sesquicentennial', - 'sesquicentennials', - 'sesquipedalian', - 'sesquiterpene', - 'sesquiterpenes', - 'sestertium', - 'settleable', - 'settlement', - 'settlements', - 'seventeens', - 'seventeenth', - 'seventeenths', - 'seventieth', - 'seventieths', - 'severabilities', - 'severability', - 'severalfold', - 'severalties', - 'severances', - 'severeness', - 'severenesses', - 'severities', - 'sewabilities', - 'sewability', - 'sexagenarian', - 'sexagenarians', - 'sexagesimal', - 'sexagesimals', - 'sexdecillion', - 'sexdecillions', - 'sexinesses', - 'sexlessness', - 'sexlessnesses', - 'sexologies', - 'sexologist', - 'sexologists', - 'sexploitation', - 'sexploitations', - 'sextillion', - 'sextillions', - 'sextodecimo', - 'sextodecimos', - 'sextuplets', - 'sextuplicate', - 'sextuplicated', - 'sextuplicates', - 'sextuplicating', - 'sextupling', - 'sexualities', - 'sexualization', - 'sexualizations', - 'sexualized', - 'sexualizes', - 'sexualizing', - 'sforzandos', - 'shabbiness', - 'shabbinesses', - 'shacklebone', - 'shacklebones', - 'shadberries', - 'shadbushes', - 'shadchanim', - 'shadinesses', - 'shadowboxed', - 'shadowboxes', - 'shadowboxing', - 'shadowgraph', - 'shadowgraphies', - 'shadowgraphs', - 'shadowgraphy', - 'shadowiest', - 'shadowiness', - 'shadowinesses', - 'shadowless', - 'shadowlike', - 'shagginess', - 'shagginesses', - 'shaggymane', - 'shaggymanes', - 'shakedowns', - 'shakinesses', - 'shallowest', - 'shallowing', - 'shallowness', - 'shallownesses', - 'shamanisms', - 'shamanistic', - 'shamanists', - 'shamefaced', - 'shamefacedly', - 'shamefacedness', - 'shamefacednesses', - 'shamefully', - 'shamefulness', - 'shamefulnesses', - 'shamelessly', - 'shamelessness', - 'shamelessnesses', - 'shammashim', - 'shampooers', - 'shampooing', - 'shandygaff', - 'shandygaffs', - 'shanghaied', - 'shanghaier', - 'shanghaiers', - 'shanghaiing', - 'shankpiece', - 'shankpieces', - 'shantytown', - 'shantytowns', - 'shapelessly', - 'shapelessness', - 'shapelessnesses', - 'shapeliest', - 'shapeliness', - 'shapelinesses', - 'shareabilities', - 'shareability', - 'sharecropped', - 'sharecropper', - 'sharecroppers', - 'sharecropping', - 'sharecrops', - 'shareholder', - 'shareholders', - 'sharewares', - 'sharkskins', - 'sharpeners', - 'sharpening', - 'sharpnesses', - 'sharpshooter', - 'sharpshooters', - 'sharpshooting', - 'sharpshootings', - 'shashlicks', - 'shattering', - 'shatteringly', - 'shatterproof', - 'shavelings', - 'shavetails', - 'shearlings', - 'shearwater', - 'shearwaters', - 'sheathbill', - 'sheathbills', - 'sheathings', - 'sheepberries', - 'sheepberry', - 'sheepcotes', - 'sheepfolds', - 'sheepherder', - 'sheepherders', - 'sheepherding', - 'sheepherdings', - 'sheepishly', - 'sheepishness', - 'sheepishnesses', - 'sheepshank', - 'sheepshanks', - 'sheepshead', - 'sheepsheads', - 'sheepshearer', - 'sheepshearers', - 'sheepshearing', - 'sheepshearings', - 'sheepskins', - 'sheernesses', - 'sheikhdoms', - 'sheldrakes', - 'shellacked', - 'shellacking', - 'shellackings', - 'shellbacks', - 'shellcracker', - 'shellcrackers', - 'shellfires', - 'shellfisheries', - 'shellfishery', - 'shellfishes', - 'shellproof', - 'shellshocked', - 'shellworks', - 'shelterbelt', - 'shelterbelts', - 'shelterers', - 'sheltering', - 'shelterless', - 'shenanigan', - 'shenanigans', - 'shepherded', - 'shepherdess', - 'shepherdesses', - 'shepherding', - 'shergottite', - 'shergottites', - 'sheriffdom', - 'sheriffdoms', - 'shewbreads', - 'shibboleth', - 'shibboleths', - 'shiftiness', - 'shiftinesses', - 'shiftlessly', - 'shiftlessness', - 'shiftlessnesses', - 'shigelloses', - 'shigellosis', - 'shikarring', - 'shillalahs', - 'shillelagh', - 'shillelaghs', - 'shimmering', - 'shininesses', - 'shinleaves', - 'shinneries', - 'shinneying', - 'shinplaster', - 'shinplasters', - 'shinsplints', - 'shipboards', - 'shipbuilder', - 'shipbuilders', - 'shipbuilding', - 'shipbuildings', - 'shipfitter', - 'shipfitters', - 'shipmaster', - 'shipmasters', - 'shipowners', - 'shipwrecked', - 'shipwrecking', - 'shipwrecks', - 'shipwright', - 'shipwrights', - 'shirtdress', - 'shirtdresses', - 'shirtfront', - 'shirtfronts', - 'shirtmaker', - 'shirtmakers', - 'shirtsleeve', - 'shirtsleeved', - 'shirtsleeves', - 'shirttails', - 'shirtwaist', - 'shirtwaists', - 'shittimwood', - 'shittimwoods', - 'shivareeing', - 'shlemiehls', - 'shmaltzier', - 'shmaltziest', - 'shockingly', - 'shockproof', - 'shoddiness', - 'shoddinesses', - 'shoeblacks', - 'shoehorned', - 'shoehorning', - 'shoemakers', - 'shoeshines', - 'shoestring', - 'shoestrings', - 'shogunates', - 'shopkeeper', - 'shopkeepers', - 'shoplifted', - 'shoplifter', - 'shoplifters', - 'shoplifting', - 'shopwindow', - 'shopwindows', - 'shorebirds', - 'shorefront', - 'shorefronts', - 'shorelines', - 'shorewards', - 'shortbread', - 'shortbreads', - 'shortcakes', - 'shortchange', - 'shortchanged', - 'shortchanger', - 'shortchangers', - 'shortchanges', - 'shortchanging', - 'shortcoming', - 'shortcomings', - 'shortcutting', - 'shorteners', - 'shortening', - 'shortenings', - 'shortfalls', - 'shorthaired', - 'shorthairs', - 'shorthanded', - 'shorthands', - 'shorthorns', - 'shortlists', - 'shortnesses', - 'shortsighted', - 'shortsightedly', - 'shortsightedness', - 'shortsightednesses', - 'shortstops', - 'shortwaves', - 'shotgunned', - 'shotgunner', - 'shotgunners', - 'shotgunning', - 'shouldered', - 'shouldering', - 'shovelfuls', - 'shovellers', - 'shovelling', - 'shovelnose', - 'shovelnoses', - 'shovelsful', - 'showbizzes', - 'showboated', - 'showboating', - 'showbreads', - 'showcasing', - 'showerhead', - 'showerheads', - 'showerless', - 'showinesses', - 'showmanship', - 'showmanships', - 'showpieces', - 'showplaces', - 'showstopper', - 'showstoppers', - 'showstopping', - 'shrewdness', - 'shrewdnesses', - 'shrewishly', - 'shrewishness', - 'shrewishnesses', - 'shriekiest', - 'shrievalties', - 'shrievalty', - 'shrillness', - 'shrillnesses', - 'shrimpiest', - 'shrimplike', - 'shrinkable', - 'shrinkages', - 'shriveling', - 'shrivelled', - 'shrivelling', - 'shrubberies', - 'shrubbiest', - 'shuddering', - 'shuffleboard', - 'shuffleboards', - 'shunpikers', - 'shunpiking', - 'shunpikings', - 'shutterbug', - 'shutterbugs', - 'shuttering', - 'shutterless', - 'shuttlecock', - 'shuttlecocked', - 'shuttlecocking', - 'shuttlecocks', - 'shuttleless', - 'shylocking', - 'sialagogue', - 'sialagogues', - 'sibilances', - 'sibilantly', - 'sibilating', - 'sibilation', - 'sibilations', - 'sickeningly', - 'sickishness', - 'sickishnesses', - 'sicklemias', - 'sickliness', - 'sicklinesses', - 'sicknesses', - 'sideboards', - 'sideburned', - 'sidednesses', - 'sidedresses', - 'sidelights', - 'sideliners', - 'sidelining', - 'sidepieces', - 'siderolite', - 'siderolites', - 'sidesaddle', - 'sidesaddles', - 'sideslipped', - 'sideslipping', - 'sidesplitting', - 'sidesplittingly', - 'sidestepped', - 'sidestepper', - 'sidesteppers', - 'sidestepping', - 'sidestream', - 'sidestroke', - 'sidestrokes', - 'sideswiped', - 'sideswipes', - 'sideswiping', - 'sidetracked', - 'sidetracking', - 'sidetracks', - 'sidewinder', - 'sidewinders', - 'sightlessly', - 'sightlessness', - 'sightlessnesses', - 'sightliest', - 'sightliness', - 'sightlinesses', - 'sightseeing', - 'sightseers', - 'sigmoidally', - 'sigmoidoscopies', - 'sigmoidoscopy', - 'signalised', - 'signalises', - 'signalising', - 'signalization', - 'signalizations', - 'signalized', - 'signalizes', - 'signalizing', - 'signallers', - 'signalling', - 'signalment', - 'signalments', - 'signatories', - 'signatures', - 'signboards', - 'significance', - 'significances', - 'significancies', - 'significancy', - 'significant', - 'significantly', - 'signification', - 'significations', - 'significative', - 'signifieds', - 'signifiers', - 'signifying', - 'signifyings', - 'signiories', - 'signorinas', - 'signposted', - 'signposting', - 'silentness', - 'silentnesses', - 'silhouette', - 'silhouetted', - 'silhouettes', - 'silhouetting', - 'silhouettist', - 'silhouettists', - 'silicification', - 'silicifications', - 'silicified', - 'silicifies', - 'silicifying', - 'siliconized', - 'silicotics', - 'silkalines', - 'silkinesses', - 'silkolines', - 'sillimanite', - 'sillimanites', - 'sillinesses', - 'siltations', - 'siltstones', - 'silverback', - 'silverbacks', - 'silverberries', - 'silverberry', - 'silverfish', - 'silverfishes', - 'silveriness', - 'silverinesses', - 'silverpoint', - 'silverpoints', - 'silverside', - 'silversides', - 'silversmith', - 'silversmithing', - 'silversmithings', - 'silversmiths', - 'silverware', - 'silverwares', - 'silverweed', - 'silverweeds', - 'silvicultural', - 'silviculturally', - 'silviculture', - 'silvicultures', - 'silviculturist', - 'silviculturists', - 'similarities', - 'similarity', - 'similitude', - 'similitudes', - 'simoniacal', - 'simoniacally', - 'simonizing', - 'simpleminded', - 'simplemindedly', - 'simplemindedness', - 'simplemindednesses', - 'simpleness', - 'simplenesses', - 'simpletons', - 'simplicial', - 'simplicially', - 'simplicities', - 'simplicity', - 'simplification', - 'simplifications', - 'simplified', - 'simplifier', - 'simplifiers', - 'simplifies', - 'simplifying', - 'simplistic', - 'simplistically', - 'simulacres', - 'simulacrum', - 'simulacrums', - 'simulating', - 'simulation', - 'simulations', - 'simulative', - 'simulators', - 'simulcasted', - 'simulcasting', - 'simulcasts', - 'simultaneities', - 'simultaneity', - 'simultaneous', - 'simultaneously', - 'simultaneousness', - 'simultaneousnesses', - 'sincereness', - 'sincerenesses', - 'sincerities', - 'sincipital', - 'sinfonietta', - 'sinfoniettas', - 'sinfulness', - 'sinfulnesses', - 'singleness', - 'singlenesses', - 'singlestick', - 'singlesticks', - 'singletons', - 'singletree', - 'singletrees', - 'singspiels', - 'singularities', - 'singularity', - 'singularize', - 'singularized', - 'singularizes', - 'singularizing', - 'singularly', - 'sinicizing', - 'sinisterly', - 'sinisterness', - 'sinisternesses', - 'sinistrous', - 'sinlessness', - 'sinlessnesses', - 'sinoatrial', - 'sinological', - 'sinologies', - 'sinologist', - 'sinologists', - 'sinologues', - 'sinsemilla', - 'sinsemillas', - 'sinterabilities', - 'sinterability', - 'sinuosities', - 'sinuousness', - 'sinuousnesses', - 'sinusitises', - 'sinusoidal', - 'sinusoidally', - 'siphonophore', - 'siphonophores', - 'siphonostele', - 'siphonosteles', - 'sisterhood', - 'sisterhoods', - 'sitologies', - 'sitosterol', - 'sitosterols', - 'situational', - 'situationally', - 'situations', - 'sixteenmos', - 'sixteenths', - 'sizableness', - 'sizablenesses', - 'sizinesses', - 'sjamboking', - 'skateboard', - 'skateboarder', - 'skateboarders', - 'skateboarding', - 'skateboardings', - 'skateboards', - 'skedaddled', - 'skedaddler', - 'skedaddlers', - 'skedaddles', - 'skedaddling', - 'skeletally', - 'skeletonic', - 'skeletonise', - 'skeletonised', - 'skeletonises', - 'skeletonising', - 'skeletonize', - 'skeletonized', - 'skeletonizer', - 'skeletonizers', - 'skeletonizes', - 'skeletonizing', - 'skeltering', - 'skeptically', - 'skepticism', - 'skepticisms', - 'sketchbook', - 'sketchbooks', - 'sketchiest', - 'sketchiness', - 'sketchinesses', - 'skewnesses', - 'skibobbers', - 'skibobbing', - 'skibobbings', - 'skiddooing', - 'skijorings', - 'skillessness', - 'skillessnesses', - 'skillfully', - 'skillfulness', - 'skillfulnesses', - 'skimobiles', - 'skimpiness', - 'skimpinesses', - 'skinflints', - 'skinniness', - 'skinninesses', - 'skippering', - 'skirmished', - 'skirmisher', - 'skirmishers', - 'skirmishes', - 'skirmishing', - 'skitterier', - 'skitteriest', - 'skittering', - 'skittishly', - 'skittishness', - 'skittishnesses', - 'skreeghing', - 'skreighing', - 'skulduggeries', - 'skulduggery', - 'skullduggeries', - 'skullduggery', - 'skydivings', - 'skyjackers', - 'skyjacking', - 'skyjackings', - 'skylarkers', - 'skylarking', - 'skylighted', - 'skyrocketed', - 'skyrocketing', - 'skyrockets', - 'skyscraper', - 'skyscrapers', - 'skywriters', - 'skywriting', - 'skywritings', - 'skywritten', - 'slabbering', - 'slackening', - 'slacknesses', - 'slanderers', - 'slandering', - 'slanderous', - 'slanderously', - 'slanderousness', - 'slanderousnesses', - 'slanginess', - 'slanginesses', - 'slanguages', - 'slantingly', - 'slapdashes', - 'slaphappier', - 'slaphappiest', - 'slapsticks', - 'slashingly', - 'slathering', - 'slatternliness', - 'slatternlinesses', - 'slatternly', - 'slaughtered', - 'slaughterer', - 'slaughterers', - 'slaughterhouse', - 'slaughterhouses', - 'slaughtering', - 'slaughterous', - 'slaughterously', - 'slaughters', - 'slaveholder', - 'slaveholders', - 'slaveholding', - 'slaveholdings', - 'slavishness', - 'slavishnesses', - 'slavocracies', - 'slavocracy', - 'sleazebags', - 'sleazeball', - 'sleazeballs', - 'sleaziness', - 'sleazinesses', - 'sledgehammer', - 'sledgehammered', - 'sledgehammering', - 'sledgehammers', - 'sleekening', - 'sleeknesses', - 'sleepiness', - 'sleepinesses', - 'sleeplessly', - 'sleeplessness', - 'sleeplessnesses', - 'sleepovers', - 'sleepwalked', - 'sleepwalker', - 'sleepwalkers', - 'sleepwalking', - 'sleepwalks', - 'sleepyhead', - 'sleepyheads', - 'sleeveless', - 'sleevelets', - 'slenderest', - 'slenderize', - 'slenderized', - 'slenderizes', - 'slenderizing', - 'slenderness', - 'slendernesses', - 'sleuthhound', - 'sleuthhounds', - 'slickenside', - 'slickensides', - 'slicknesses', - 'slickrocks', - 'slightingly', - 'slightness', - 'slightnesses', - 'slimeballs', - 'sliminesses', - 'slimnastics', - 'slimnesses', - 'slimpsiest', - 'slingshots', - 'slinkiness', - 'slinkinesses', - 'slipcovers', - 'slipformed', - 'slipforming', - 'slipperier', - 'slipperiest', - 'slipperiness', - 'slipperinesses', - 'slipstream', - 'slipstreamed', - 'slipstreaming', - 'slipstreams', - 'slithering', - 'slivovices', - 'slivovitzes', - 'slobberers', - 'slobbering', - 'sloganeered', - 'sloganeering', - 'sloganeers', - 'sloganized', - 'sloganizes', - 'sloganizing', - 'sloppiness', - 'sloppinesses', - 'slothfully', - 'slothfulness', - 'slothfulnesses', - 'slouchiest', - 'slouchiness', - 'slouchinesses', - 'sloughiest', - 'slovenlier', - 'slovenliest', - 'slovenliness', - 'slovenlinesses', - 'slownesses', - 'slubbering', - 'sluggardly', - 'sluggardness', - 'sluggardnesses', - 'sluggishly', - 'sluggishness', - 'sluggishnesses', - 'sluiceways', - 'slumberers', - 'slumbering', - 'slumberous', - 'slumgullion', - 'slumgullions', - 'slumpflation', - 'slumpflations', - 'slungshots', - 'slushiness', - 'slushinesses', - 'sluttishly', - 'sluttishness', - 'sluttishnesses', - 'smallclothes', - 'smallholder', - 'smallholders', - 'smallholding', - 'smallholdings', - 'smallmouth', - 'smallmouths', - 'smallnesses', - 'smallpoxes', - 'smallsword', - 'smallswords', - 'smaragdine', - 'smaragdite', - 'smaragdites', - 'smarminess', - 'smarminesses', - 'smartasses', - 'smartening', - 'smartnesses', - 'smartweeds', - 'smashingly', - 'smatterers', - 'smattering', - 'smatterings', - 'smearcases', - 'smelteries', - 'smiercases', - 'smithereens', - 'smitheries', - 'smithsonite', - 'smithsonites', - 'smokehouse', - 'smokehouses', - 'smokejacks', - 'smokestack', - 'smokestacks', - 'smokinesses', - 'smoldering', - 'smoothbore', - 'smoothbores', - 'smoothened', - 'smoothening', - 'smoothness', - 'smoothnesses', - 'smorgasbord', - 'smorgasbords', - 'smothering', - 'smouldered', - 'smouldering', - 'smudginess', - 'smudginesses', - 'smugnesses', - 'smutchiest', - 'smuttiness', - 'smuttinesses', - 'snaggleteeth', - 'snaggletooth', - 'snaggletoothed', - 'snakebirds', - 'snakebites', - 'snakebitten', - 'snakeroots', - 'snakeskins', - 'snakeweeds', - 'snapdragon', - 'snapdragons', - 'snappiness', - 'snappinesses', - 'snappishly', - 'snappishness', - 'snappishnesses', - 'snapshooter', - 'snapshooters', - 'snapshotted', - 'snapshotting', - 'snatchiest', - 'sneakiness', - 'sneakinesses', - 'sneakingly', - 'sneezeweed', - 'sneezeweeds', - 'snickerers', - 'snickering', - 'snickersnee', - 'snickersnees', - 'snidenesses', - 'sniffiness', - 'sniffinesses', - 'sniffishly', - 'sniffishness', - 'sniffishnesses', - 'sniggerers', - 'sniggering', - 'sniperscope', - 'sniperscopes', - 'snippersnapper', - 'snippersnappers', - 'snippetier', - 'snippetiest', - 'snivelling', - 'snobberies', - 'snobbishly', - 'snobbishness', - 'snobbishnesses', - 'snollygoster', - 'snollygosters', - 'snookering', - 'snootiness', - 'snootinesses', - 'snorkelers', - 'snorkeling', - 'snottiness', - 'snottinesses', - 'snowballed', - 'snowballing', - 'snowberries', - 'snowblower', - 'snowblowers', - 'snowboarder', - 'snowboarders', - 'snowboarding', - 'snowboardings', - 'snowboards', - 'snowbrushes', - 'snowbushes', - 'snowcapped', - 'snowdrifts', - 'snowfields', - 'snowflakes', - 'snowinesses', - 'snowmakers', - 'snowmaking', - 'snowmobile', - 'snowmobiler', - 'snowmobilers', - 'snowmobiles', - 'snowmobiling', - 'snowmobilings', - 'snowmobilist', - 'snowmobilists', - 'snowplowed', - 'snowplowing', - 'snowscapes', - 'snowshoeing', - 'snowshoers', - 'snowslides', - 'snowstorms', - 'snubbiness', - 'snubbinesses', - 'snubnesses', - 'snuffboxes', - 'snuffliest', - 'snuggeries', - 'snugnesses', - 'soapberries', - 'soapinesses', - 'soapstones', - 'soberizing', - 'sobernesses', - 'sobersided', - 'sobersidedness', - 'sobersidednesses', - 'sobersides', - 'sobrieties', - 'sobriquets', - 'sociabilities', - 'sociability', - 'sociableness', - 'sociablenesses', - 'socialised', - 'socialises', - 'socialising', - 'socialisms', - 'socialistic', - 'socialistically', - 'socialists', - 'socialites', - 'socialities', - 'socialization', - 'socializations', - 'socialized', - 'socializer', - 'socializers', - 'socializes', - 'socializing', - 'societally', - 'sociobiological', - 'sociobiologies', - 'sociobiologist', - 'sociobiologists', - 'sociobiology', - 'sociocultural', - 'socioculturally', - 'socioeconomic', - 'socioeconomically', - 'sociograms', - 'sociohistorical', - 'sociolinguist', - 'sociolinguistic', - 'sociolinguistics', - 'sociolinguists', - 'sociologese', - 'sociologeses', - 'sociologic', - 'sociological', - 'sociologically', - 'sociologies', - 'sociologist', - 'sociologists', - 'sociometric', - 'sociometries', - 'sociometry', - 'sociopathic', - 'sociopaths', - 'sociopolitical', - 'sociopsychological', - 'socioreligious', - 'sociosexual', - 'sockdolager', - 'sockdolagers', - 'sockdologer', - 'sockdologers', - 'sodalities', - 'sodbusters', - 'soddenness', - 'soddennesses', - 'sodomitical', - 'sodomizing', - 'softballer', - 'softballers', - 'softcovers', - 'softheaded', - 'softheadedly', - 'softheadedness', - 'softheadednesses', - 'softhearted', - 'softheartedly', - 'softheartedness', - 'softheartednesses', - 'softnesses', - 'softshells', - 'sogginesses', - 'sojourners', - 'sojourning', - 'solacement', - 'solacements', - 'solanaceous', - 'solarising', - 'solarization', - 'solarizations', - 'solarizing', - 'solderabilities', - 'solderability', - 'soldieries', - 'soldiering', - 'soldierings', - 'soldiership', - 'soldierships', - 'solecising', - 'solecistic', - 'solecizing', - 'solemnified', - 'solemnifies', - 'solemnifying', - 'solemnities', - 'solemnization', - 'solemnizations', - 'solemnized', - 'solemnizes', - 'solemnizing', - 'solemnness', - 'solemnnesses', - 'solenesses', - 'solenoidal', - 'soleplates', - 'solfataras', - 'solfeggios', - 'solicitant', - 'solicitants', - 'solicitation', - 'solicitations', - 'soliciting', - 'solicitors', - 'solicitorship', - 'solicitorships', - 'solicitous', - 'solicitously', - 'solicitousness', - 'solicitousnesses', - 'solicitude', - 'solicitudes', - 'solidarism', - 'solidarisms', - 'solidarist', - 'solidaristic', - 'solidarists', - 'solidarities', - 'solidarity', - 'solidification', - 'solidifications', - 'solidified', - 'solidifies', - 'solidifying', - 'solidities', - 'solidnesses', - 'solifluction', - 'solifluctions', - 'soliloquies', - 'soliloquise', - 'soliloquised', - 'soliloquises', - 'soliloquising', - 'soliloquist', - 'soliloquists', - 'soliloquize', - 'soliloquized', - 'soliloquizer', - 'soliloquizers', - 'soliloquizes', - 'soliloquizing', - 'solipsisms', - 'solipsistic', - 'solipsistically', - 'solipsists', - 'solitaires', - 'solitaries', - 'solitarily', - 'solitariness', - 'solitarinesses', - 'solitudinarian', - 'solitudinarians', - 'solmization', - 'solmizations', - 'solonchaks', - 'solonetses', - 'solonetzes', - 'solonetzic', - 'solstitial', - 'solubilise', - 'solubilised', - 'solubilises', - 'solubilising', - 'solubilities', - 'solubility', - 'solubilization', - 'solubilizations', - 'solubilize', - 'solubilized', - 'solubilizes', - 'solubilizing', - 'solvabilities', - 'solvability', - 'solvations', - 'solvencies', - 'solventless', - 'solvolyses', - 'solvolysis', - 'solvolytic', - 'somatically', - 'somatological', - 'somatologies', - 'somatology', - 'somatomedin', - 'somatomedins', - 'somatopleure', - 'somatopleures', - 'somatosensory', - 'somatostatin', - 'somatostatins', - 'somatotrophin', - 'somatotrophins', - 'somatotropin', - 'somatotropins', - 'somatotype', - 'somatotypes', - 'somberness', - 'sombernesses', - 'somebodies', - 'somersault', - 'somersaulted', - 'somersaulting', - 'somersaults', - 'somerseted', - 'somerseting', - 'somersetted', - 'somersetting', - 'somewheres', - 'somewhither', - 'sommeliers', - 'somnambulant', - 'somnambulate', - 'somnambulated', - 'somnambulates', - 'somnambulating', - 'somnambulation', - 'somnambulations', - 'somnambulism', - 'somnambulisms', - 'somnambulist', - 'somnambulistic', - 'somnambulistically', - 'somnambulists', - 'somnifacient', - 'somnifacients', - 'somniferous', - 'somnolence', - 'somnolences', - 'somnolently', - 'songfulness', - 'songfulnesses', - 'songlessly', - 'songsmiths', - 'songstress', - 'songstresses', - 'songwriter', - 'songwriters', - 'songwriting', - 'songwritings', - 'sonicating', - 'sonication', - 'sonications', - 'sonneteering', - 'sonneteerings', - 'sonneteers', - 'sonnetting', - 'sonographer', - 'sonographers', - 'sonographies', - 'sonography', - 'sonorities', - 'sonorously', - 'sonorousness', - 'sonorousnesses', - 'soothingly', - 'soothingness', - 'soothingnesses', - 'soothsayer', - 'soothsayers', - 'soothsaying', - 'soothsayings', - 'sootinesses', - 'sopaipilla', - 'sopaipillas', - 'sopapillas', - 'sophistical', - 'sophistically', - 'sophisticate', - 'sophisticated', - 'sophisticatedly', - 'sophisticates', - 'sophisticating', - 'sophistication', - 'sophistications', - 'sophistries', - 'sophomores', - 'sophomoric', - 'soporiferous', - 'soporiferousness', - 'soporiferousnesses', - 'soporifics', - 'soppinesses', - 'sopraninos', - 'sorbabilities', - 'sorbability', - 'sorceresses', - 'sordidness', - 'sordidnesses', - 'soreheaded', - 'sorenesses', - 'sororities', - 'sorrinesses', - 'sorrowfully', - 'sorrowfulness', - 'sorrowfulnesses', - 'sortileges', - 'sortitions', - 'sostenutos', - 'soteriological', - 'soteriologies', - 'soteriology', - 'sottishness', - 'sottishnesses', - 'soubrettes', - 'soubriquet', - 'soubriquets', - 'soulfulness', - 'soulfulnesses', - 'soullessly', - 'soullessness', - 'soullessnesses', - 'soundalike', - 'soundalikes', - 'soundboard', - 'soundboards', - 'soundboxes', - 'soundingly', - 'soundlessly', - 'soundnesses', - 'soundproof', - 'soundproofed', - 'soundproofing', - 'soundproofs', - 'soundstage', - 'soundstages', - 'soundtrack', - 'soundtracks', - 'soupspoons', - 'sourcebook', - 'sourcebooks', - 'sourceless', - 'sourdoughs', - 'sournesses', - 'sourpusses', - 'sousaphone', - 'sousaphones', - 'southbound', - 'southeaster', - 'southeasterly', - 'southeastern', - 'southeasternmost', - 'southeasters', - 'southeasts', - 'southeastward', - 'southeastwards', - 'southerlies', - 'southerner', - 'southerners', - 'southernmost', - 'southernness', - 'southernnesses', - 'southernwood', - 'southernwoods', - 'southlands', - 'southwards', - 'southwester', - 'southwesterly', - 'southwestern', - 'southwesternmost', - 'southwesters', - 'southwests', - 'southwestward', - 'southwestwards', - 'souvlakias', - 'sovereignly', - 'sovereigns', - 'sovereignties', - 'sovereignty', - 'sovietisms', - 'sovietization', - 'sovietizations', - 'sovietized', - 'sovietizes', - 'sovietizing', - 'sovranties', - 'sowbellies', - 'spacebands', - 'spacecraft', - 'spacecrafts', - 'spaceflight', - 'spaceflights', - 'spaceports', - 'spaceships', - 'spacesuits', - 'spacewalked', - 'spacewalker', - 'spacewalkers', - 'spacewalking', - 'spacewalks', - 'spaciously', - 'spaciousness', - 'spaciousnesses', - 'spadefishes', - 'spadeworks', - 'spaghettilike', - 'spaghettini', - 'spaghettinis', - 'spaghettis', - 'spallation', - 'spallations', - 'spanakopita', - 'spanakopitas', - 'spanceling', - 'spancelled', - 'spancelling', - 'spangliest', - 'spanokopita', - 'spanokopitas', - 'sparenesses', - 'sparkliest', - 'sparkplugged', - 'sparkplugging', - 'sparkplugs', - 'sparrowlike', - 'sparseness', - 'sparsenesses', - 'sparsities', - 'sparteines', - 'spasmodically', - 'spasmolytic', - 'spasmolytics', - 'spastically', - 'spasticities', - 'spasticity', - 'spathulate', - 'spatialities', - 'spatiality', - 'spatiotemporal', - 'spatiotemporally', - 'spatterdock', - 'spatterdocks', - 'spattering', - 'speakeasies', - 'speakerphone', - 'speakerphones', - 'speakership', - 'speakerships', - 'spearfished', - 'spearfishes', - 'spearfishing', - 'spearheaded', - 'spearheading', - 'spearheads', - 'spearmints', - 'spearworts', - 'specialest', - 'specialisation', - 'specialisations', - 'specialise', - 'specialised', - 'specialises', - 'specialising', - 'specialism', - 'specialisms', - 'specialist', - 'specialistic', - 'specialists', - 'specialities', - 'speciality', - 'specialization', - 'specializations', - 'specialize', - 'specialized', - 'specializes', - 'specializing', - 'specialness', - 'specialnesses', - 'specialties', - 'speciating', - 'speciation', - 'speciational', - 'speciations', - 'speciesism', - 'speciesisms', - 'specifiable', - 'specifically', - 'specification', - 'specifications', - 'specificities', - 'specificity', - 'specifiers', - 'specifying', - 'speciosities', - 'speciosity', - 'speciously', - 'speciousness', - 'speciousnesses', - 'spectacled', - 'spectacles', - 'spectacular', - 'spectacularly', - 'spectaculars', - 'spectating', - 'spectatorial', - 'spectators', - 'spectatorship', - 'spectatorships', - 'spectinomycin', - 'spectinomycins', - 'spectrally', - 'spectrofluorimeter', - 'spectrofluorimeters', - 'spectrofluorometer', - 'spectrofluorometers', - 'spectrofluorometric', - 'spectrofluorometries', - 'spectrofluorometry', - 'spectrogram', - 'spectrograms', - 'spectrograph', - 'spectrographic', - 'spectrographically', - 'spectrographies', - 'spectrographs', - 'spectrography', - 'spectroheliogram', - 'spectroheliograms', - 'spectroheliograph', - 'spectroheliographies', - 'spectroheliographs', - 'spectroheliography', - 'spectrohelioscope', - 'spectrohelioscopes', - 'spectrometer', - 'spectrometers', - 'spectrometric', - 'spectrometries', - 'spectrometry', - 'spectrophotometer', - 'spectrophotometers', - 'spectrophotometric', - 'spectrophotometrical', - 'spectrophotometrically', - 'spectrophotometries', - 'spectrophotometry', - 'spectroscope', - 'spectroscopes', - 'spectroscopic', - 'spectroscopically', - 'spectroscopies', - 'spectroscopist', - 'spectroscopists', - 'spectroscopy', - 'specularities', - 'specularity', - 'specularly', - 'speculated', - 'speculates', - 'speculating', - 'speculation', - 'speculations', - 'speculative', - 'speculatively', - 'speculator', - 'speculators', - 'speechified', - 'speechifies', - 'speechifying', - 'speechless', - 'speechlessly', - 'speechlessness', - 'speechlessnesses', - 'speechwriter', - 'speechwriters', - 'speedballed', - 'speedballing', - 'speedballs', - 'speedboating', - 'speedboatings', - 'speedboats', - 'speediness', - 'speedinesses', - 'speedometer', - 'speedometers', - 'speedsters', - 'speedwells', - 'speleological', - 'speleologies', - 'speleologist', - 'speleologists', - 'speleology', - 'spellbinder', - 'spellbinders', - 'spellbinding', - 'spellbindingly', - 'spellbinds', - 'spellbound', - 'spelunkers', - 'spelunking', - 'spelunkings', - 'spendthrift', - 'spendthrifts', - 'spermaceti', - 'spermacetis', - 'spermagonia', - 'spermagonium', - 'spermaries', - 'spermatheca', - 'spermathecae', - 'spermathecas', - 'spermatial', - 'spermatids', - 'spermatium', - 'spermatocyte', - 'spermatocytes', - 'spermatogeneses', - 'spermatogenesis', - 'spermatogenic', - 'spermatogonia', - 'spermatogonial', - 'spermatogonium', - 'spermatophore', - 'spermatophores', - 'spermatophyte', - 'spermatophytes', - 'spermatophytic', - 'spermatozoa', - 'spermatozoal', - 'spermatozoan', - 'spermatozoans', - 'spermatozoid', - 'spermatozoids', - 'spermatozoon', - 'spermicidal', - 'spermicide', - 'spermicides', - 'spermiogeneses', - 'spermiogenesis', - 'spermophile', - 'spermophiles', - 'sperrylite', - 'sperrylites', - 'spessartine', - 'spessartines', - 'spessartite', - 'spessartites', - 'sphalerite', - 'sphalerites', - 'sphenodons', - 'sphenodont', - 'sphenoidal', - 'sphenopsid', - 'sphenopsids', - 'spherically', - 'sphericities', - 'sphericity', - 'spheroidal', - 'spheroidally', - 'spherometer', - 'spherometers', - 'spheroplast', - 'spheroplasts', - 'spherulite', - 'spherulites', - 'spherulitic', - 'sphincteric', - 'sphincters', - 'sphingosine', - 'sphingosines', - 'sphinxlike', - 'sphygmograph', - 'sphygmographs', - 'sphygmomanometer', - 'sphygmomanometers', - 'sphygmomanometries', - 'sphygmomanometry', - 'sphygmuses', - 'spicebushes', - 'spicinesses', - 'spiculation', - 'spiculations', - 'spideriest', - 'spiderlike', - 'spiderwebs', - 'spiderwort', - 'spiderworts', - 'spiegeleisen', - 'spiegeleisens', - 'spiffiness', - 'spiffinesses', - 'spikenards', - 'spikinesses', - 'spillikins', - 'spillovers', - 'spinachlike', - 'spindliest', - 'spindrifts', - 'spinelessly', - 'spinelessness', - 'spinelessnesses', - 'spinifexes', - 'spininesses', - 'spinnakers', - 'spinnerets', - 'spinnerette', - 'spinnerettes', - 'spinneries', - 'spinosities', - 'spinsterhood', - 'spinsterhoods', - 'spinsterish', - 'spinsterly', - 'spinthariscope', - 'spinthariscopes', - 'spiracular', - 'spiralling', - 'spiritedly', - 'spiritedness', - 'spiritednesses', - 'spiritisms', - 'spiritistic', - 'spiritists', - 'spiritless', - 'spiritlessly', - 'spiritlessness', - 'spiritlessnesses', - 'spiritualism', - 'spiritualisms', - 'spiritualist', - 'spiritualistic', - 'spiritualists', - 'spiritualities', - 'spirituality', - 'spiritualization', - 'spiritualizations', - 'spiritualize', - 'spiritualized', - 'spiritualizes', - 'spiritualizing', - 'spiritually', - 'spiritualness', - 'spiritualnesses', - 'spirituals', - 'spiritualties', - 'spiritualty', - 'spirituelle', - 'spirituous', - 'spirochaete', - 'spirochaetes', - 'spirochetal', - 'spirochete', - 'spirochetes', - 'spirochetoses', - 'spirochetosis', - 'spirogyras', - 'spirometer', - 'spirometers', - 'spirometric', - 'spirometries', - 'spirometry', - 'spitefuller', - 'spitefullest', - 'spitefully', - 'spitefulness', - 'spitefulnesses', - 'spittlebug', - 'spittlebugs', - 'splanchnic', - 'splashboard', - 'splashboards', - 'splashdown', - 'splashdowns', - 'splashiest', - 'splashiness', - 'splashinesses', - 'splattered', - 'splattering', - 'splayfooted', - 'spleeniest', - 'spleenwort', - 'spleenworts', - 'splendider', - 'splendidest', - 'splendidly', - 'splendidness', - 'splendidnesses', - 'splendiferous', - 'splendiferously', - 'splendiferousness', - 'splendiferousnesses', - 'splendorous', - 'splendours', - 'splendrous', - 'splenectomies', - 'splenectomize', - 'splenectomized', - 'splenectomizes', - 'splenectomizing', - 'splenectomy', - 'splenetically', - 'splenetics', - 'splenomegalies', - 'splenomegaly', - 'spleuchans', - 'splintered', - 'splintering', - 'splotchier', - 'splotchiest', - 'splotching', - 'splurgiest', - 'spluttered', - 'splutterer', - 'splutterers', - 'spluttering', - 'spodumenes', - 'spoilsport', - 'spoilsports', - 'spokeshave', - 'spokeshaves', - 'spokesmanship', - 'spokesmanships', - 'spokespeople', - 'spokesperson', - 'spokespersons', - 'spokeswoman', - 'spokeswomen', - 'spoliating', - 'spoliation', - 'spoliations', - 'spoliators', - 'spondylites', - 'spondylitides', - 'spondylitis', - 'spondylitises', - 'spongeware', - 'spongewares', - 'sponginess', - 'sponginesses', - 'sponsorial', - 'sponsoring', - 'sponsorship', - 'sponsorships', - 'spontaneities', - 'spontaneity', - 'spontaneous', - 'spontaneously', - 'spontaneousness', - 'spontaneousnesses', - 'spooferies', - 'spookeries', - 'spookiness', - 'spookinesses', - 'spoonbills', - 'spoonerism', - 'spoonerisms', - 'sporadically', - 'sporangial', - 'sporangiophore', - 'sporangiophores', - 'sporangium', - 'sporicidal', - 'sporicides', - 'sporocarps', - 'sporocysts', - 'sporogeneses', - 'sporogenesis', - 'sporogenic', - 'sporogenous', - 'sporogonia', - 'sporogonic', - 'sporogonies', - 'sporogonium', - 'sporophore', - 'sporophores', - 'sporophyll', - 'sporophylls', - 'sporophyte', - 'sporophytes', - 'sporophytic', - 'sporopollenin', - 'sporopollenins', - 'sporotrichoses', - 'sporotrichosis', - 'sporotrichosises', - 'sporozoans', - 'sporozoite', - 'sporozoites', - 'sportfisherman', - 'sportfishermen', - 'sportfishing', - 'sportfishings', - 'sportfully', - 'sportfulness', - 'sportfulnesses', - 'sportiness', - 'sportinesses', - 'sportingly', - 'sportively', - 'sportiveness', - 'sportivenesses', - 'sportscast', - 'sportscaster', - 'sportscasters', - 'sportscasting', - 'sportscastings', - 'sportscasts', - 'sportsmanlike', - 'sportsmanly', - 'sportsmanship', - 'sportsmanships', - 'sportswear', - 'sportswoman', - 'sportswomen', - 'sportswriter', - 'sportswriters', - 'sportswriting', - 'sportswritings', - 'sporulated', - 'sporulates', - 'sporulating', - 'sporulation', - 'sporulations', - 'sporulative', - 'spotlessly', - 'spotlessness', - 'spotlessnesses', - 'spotlighted', - 'spotlighting', - 'spotlights', - 'spottiness', - 'spottinesses', - 'sprachgefuhl', - 'sprachgefuhls', - 'spraddling', - 'sprattling', - 'sprawliest', - 'spreadabilities', - 'spreadability', - 'spreadable', - 'spreadsheet', - 'spreadsheets', - 'spriggiest', - 'sprightful', - 'sprightfully', - 'sprightfulness', - 'sprightfulnesses', - 'sprightlier', - 'sprightliest', - 'sprightliness', - 'sprightlinesses', - 'springalds', - 'springboard', - 'springboards', - 'springboks', - 'springeing', - 'springhead', - 'springheads', - 'springhouse', - 'springhouses', - 'springiest', - 'springiness', - 'springinesses', - 'springings', - 'springlike', - 'springtail', - 'springtails', - 'springtide', - 'springtides', - 'springtime', - 'springtimes', - 'springwater', - 'springwaters', - 'springwood', - 'springwoods', - 'sprinklered', - 'sprinklers', - 'sprinkling', - 'sprinklings', - 'spritsails', - 'spruceness', - 'sprucenesses', - 'sprynesses', - 'spunbonded', - 'spunkiness', - 'spunkinesses', - 'spurgalled', - 'spurgalling', - 'spuriously', - 'spuriousness', - 'spuriousnesses', - 'sputterers', - 'sputtering', - 'spyglasses', - 'spymasters', - 'squabbiest', - 'squabblers', - 'squabbling', - 'squadroned', - 'squadroning', - 'squalidest', - 'squalidness', - 'squalidnesses', - 'squalliest', - 'squamation', - 'squamations', - 'squamosals', - 'squamulose', - 'squandered', - 'squanderer', - 'squanderers', - 'squandering', - 'squareness', - 'squarenesses', - 'squarishly', - 'squarishness', - 'squarishnesses', - 'squashiest', - 'squashiness', - 'squashinesses', - 'squatnesses', - 'squattered', - 'squattering', - 'squattiest', - 'squawfishes', - 'squawroots', - 'squeakiest', - 'squeamishly', - 'squeamishness', - 'squeamishnesses', - 'squeegeeing', - 'squeezabilities', - 'squeezability', - 'squeezable', - 'squelchers', - 'squelchier', - 'squelchiest', - 'squelching', - 'squeteague', - 'squiffiest', - 'squigglier', - 'squiggliest', - 'squiggling', - 'squilgeeing', - 'squinching', - 'squinniest', - 'squinnying', - 'squintiest', - 'squintingly', - 'squirarchies', - 'squirarchy', - 'squirearchies', - 'squirearchy', - 'squirmiest', - 'squirreled', - 'squirreling', - 'squirrelled', - 'squirrelling', - 'squirrelly', - 'squishiest', - 'squishiness', - 'squishinesses', - 'squooshier', - 'squooshiest', - 'squooshing', - 'stabilities', - 'stabilization', - 'stabilizations', - 'stabilized', - 'stabilizer', - 'stabilizers', - 'stabilizes', - 'stabilizing', - 'stablemate', - 'stablemates', - 'stableness', - 'stablenesses', - 'stablished', - 'stablishes', - 'stablishing', - 'stablishment', - 'stablishments', - 'stadtholder', - 'stadtholderate', - 'stadtholderates', - 'stadtholders', - 'stadtholdership', - 'stadtholderships', - 'stagecoach', - 'stagecoaches', - 'stagecraft', - 'stagecrafts', - 'stagehands', - 'stagestruck', - 'stagflation', - 'stagflationary', - 'stagflations', - 'staggerbush', - 'staggerbushes', - 'staggerers', - 'staggering', - 'staggeringly', - 'staghounds', - 'staginesses', - 'stagnancies', - 'stagnantly', - 'stagnating', - 'stagnation', - 'stagnations', - 'staidnesses', - 'stainabilities', - 'stainability', - 'stainlesses', - 'stainlessly', - 'stainproof', - 'staircases', - 'stairwells', - 'stakeholder', - 'stakeholders', - 'stalactite', - 'stalactites', - 'stalactitic', - 'stalagmite', - 'stalagmites', - 'stalagmitic', - 'stalemated', - 'stalemates', - 'stalemating', - 'stalenesses', - 'stallholder', - 'stallholders', - 'stalwartly', - 'stalwartness', - 'stalwartnesses', - 'stalworths', - 'staminodia', - 'staminodium', - 'stammerers', - 'stammering', - 'stampeders', - 'stampeding', - 'stanchioned', - 'stanchions', - 'standardbred', - 'standardbreds', - 'standardise', - 'standardised', - 'standardises', - 'standardising', - 'standardization', - 'standardizations', - 'standardize', - 'standardized', - 'standardizes', - 'standardizing', - 'standardless', - 'standardly', - 'standishes', - 'standoffish', - 'standoffishly', - 'standoffishness', - 'standoffishnesses', - 'standpatter', - 'standpatters', - 'standpattism', - 'standpattisms', - 'standpipes', - 'standpoint', - 'standpoints', - 'standstill', - 'standstills', - 'stannaries', - 'stapedectomies', - 'stapedectomy', - 'staphylinid', - 'staphylinids', - 'staphylococcal', - 'staphylococci', - 'staphylococcic', - 'staphylococcus', - 'starboarded', - 'starboarding', - 'starboards', - 'starchiest', - 'starchiness', - 'starchinesses', - 'starfishes', - 'starflower', - 'starflowers', - 'starfruits', - 'stargazers', - 'stargazing', - 'stargazings', - 'starknesses', - 'starlights', - 'starstruck', - 'startlement', - 'startlements', - 'startlingly', - 'starvation', - 'starvations', - 'starveling', - 'starvelings', - 'statecraft', - 'statecrafts', - 'statehoods', - 'statehouse', - 'statehouses', - 'statelessness', - 'statelessnesses', - 'stateliest', - 'stateliness', - 'statelinesses', - 'statements', - 'staterooms', - 'statesmanlike', - 'statesmanly', - 'statesmanship', - 'statesmanships', - 'statically', - 'stationary', - 'stationeries', - 'stationers', - 'stationery', - 'stationing', - 'stationmaster', - 'stationmasters', - 'statistical', - 'statistically', - 'statistician', - 'statisticians', - 'statistics', - 'statoblast', - 'statoblasts', - 'statocysts', - 'statoliths', - 'statoscope', - 'statoscopes', - 'statuaries', - 'statuesque', - 'statuesquely', - 'statuettes', - 'statutable', - 'statutorily', - 'staunchest', - 'staunching', - 'staunchness', - 'staunchnesses', - 'staurolite', - 'staurolites', - 'staurolitic', - 'stavesacre', - 'stavesacres', - 'steadfastly', - 'steadfastness', - 'steadfastnesses', - 'steadiness', - 'steadinesses', - 'steakhouse', - 'steakhouses', - 'stealthier', - 'stealthiest', - 'stealthily', - 'stealthiness', - 'stealthinesses', - 'steamboats', - 'steamering', - 'steamfitter', - 'steamfitters', - 'steaminess', - 'steaminesses', - 'steamrolled', - 'steamroller', - 'steamrollered', - 'steamrollering', - 'steamrollers', - 'steamrolling', - 'steamrolls', - 'steamships', - 'steatopygia', - 'steatopygias', - 'steatopygic', - 'steatopygous', - 'steatorrhea', - 'steatorrheas', - 'steelheads', - 'steeliness', - 'steelinesses', - 'steelmaker', - 'steelmakers', - 'steelmaking', - 'steelmakings', - 'steelworker', - 'steelworkers', - 'steelworks', - 'steelyards', - 'steepening', - 'steeplebush', - 'steeplebushes', - 'steeplechase', - 'steeplechaser', - 'steeplechasers', - 'steeplechases', - 'steeplechasing', - 'steeplechasings', - 'steeplejack', - 'steeplejacks', - 'steepnesses', - 'steerageway', - 'steerageways', - 'stegosaurs', - 'stegosaurus', - 'stegosauruses', - 'stellified', - 'stellifies', - 'stellifying', - 'stemmeries', - 'stenchiest', - 'stencilers', - 'stenciling', - 'stencilled', - 'stenciller', - 'stencillers', - 'stencilling', - 'stenobathic', - 'stenographer', - 'stenographers', - 'stenographic', - 'stenographically', - 'stenographies', - 'stenography', - 'stenohaline', - 'stenotherm', - 'stenothermal', - 'stenotherms', - 'stenotopic', - 'stenotyped', - 'stenotypes', - 'stenotypies', - 'stenotyping', - 'stenotypist', - 'stenotypists', - 'stentorian', - 'stepbrother', - 'stepbrothers', - 'stepchildren', - 'stepdaughter', - 'stepdaughters', - 'stepfamilies', - 'stepfamily', - 'stepfather', - 'stepfathers', - 'stephanotis', - 'stephanotises', - 'stepladder', - 'stepladders', - 'stepmother', - 'stepmothers', - 'stepparent', - 'stepparenting', - 'stepparentings', - 'stepparents', - 'stepsister', - 'stepsisters', - 'stercoraceous', - 'stereochemical', - 'stereochemistries', - 'stereochemistry', - 'stereogram', - 'stereograms', - 'stereograph', - 'stereographed', - 'stereographic', - 'stereographies', - 'stereographing', - 'stereographs', - 'stereography', - 'stereoisomer', - 'stereoisomeric', - 'stereoisomerism', - 'stereoisomerisms', - 'stereoisomers', - 'stereological', - 'stereologically', - 'stereologies', - 'stereology', - 'stereomicroscope', - 'stereomicroscopes', - 'stereomicroscopic', - 'stereomicroscopically', - 'stereophonic', - 'stereophonically', - 'stereophonies', - 'stereophony', - 'stereophotographic', - 'stereophotographies', - 'stereophotography', - 'stereopses', - 'stereopsides', - 'stereopsis', - 'stereopticon', - 'stereopticons', - 'stereoregular', - 'stereoregularities', - 'stereoregularity', - 'stereoscope', - 'stereoscopes', - 'stereoscopic', - 'stereoscopically', - 'stereoscopies', - 'stereoscopy', - 'stereospecific', - 'stereospecifically', - 'stereospecificities', - 'stereospecificity', - 'stereotactic', - 'stereotaxic', - 'stereotaxically', - 'stereotype', - 'stereotyped', - 'stereotyper', - 'stereotypers', - 'stereotypes', - 'stereotypic', - 'stereotypical', - 'stereotypically', - 'stereotypies', - 'stereotyping', - 'stereotypy', - 'sterically', - 'sterigmata', - 'sterilants', - 'sterilities', - 'sterilization', - 'sterilizations', - 'sterilized', - 'sterilizer', - 'sterilizers', - 'sterilizes', - 'sterilizing', - 'sterlingly', - 'sterlingness', - 'sterlingnesses', - 'sternforemost', - 'sternnesses', - 'sternocostal', - 'sternposts', - 'sternutation', - 'sternutations', - 'sternutator', - 'sternutators', - 'sternwards', - 'steroidogeneses', - 'steroidogenesis', - 'steroidogenic', - 'stertorous', - 'stertorously', - 'stethoscope', - 'stethoscopes', - 'stethoscopic', - 'stevedored', - 'stevedores', - 'stevedoring', - 'stewardess', - 'stewardesses', - 'stewarding', - 'stewardship', - 'stewardships', - 'stichomythia', - 'stichomythias', - 'stichomythic', - 'stichomythies', - 'stichomythy', - 'stickballs', - 'stickhandle', - 'stickhandled', - 'stickhandler', - 'stickhandlers', - 'stickhandles', - 'stickhandling', - 'stickiness', - 'stickinesses', - 'stickleback', - 'sticklebacks', - 'stickseeds', - 'sticktight', - 'sticktights', - 'stickweeds', - 'stickworks', - 'stiffeners', - 'stiffening', - 'stiffnesses', - 'stiflingly', - 'stigmasterol', - 'stigmasterols', - 'stigmatically', - 'stigmatics', - 'stigmatist', - 'stigmatists', - 'stigmatization', - 'stigmatizations', - 'stigmatize', - 'stigmatized', - 'stigmatizes', - 'stigmatizing', - 'stilbestrol', - 'stilbestrols', - 'stilettoed', - 'stilettoes', - 'stilettoing', - 'stillbirth', - 'stillbirths', - 'stillborns', - 'stillnesses', - 'stillrooms', - 'stiltedness', - 'stiltednesses', - 'stimulants', - 'stimulated', - 'stimulates', - 'stimulating', - 'stimulation', - 'stimulations', - 'stimulative', - 'stimulator', - 'stimulators', - 'stimulatory', - 'stingarees', - 'stinginess', - 'stinginesses', - 'stingingly', - 'stinkhorns', - 'stinkingly', - 'stinkweeds', - 'stinkwoods', - 'stipendiaries', - 'stipendiary', - 'stipulated', - 'stipulates', - 'stipulating', - 'stipulation', - 'stipulations', - 'stipulator', - 'stipulators', - 'stipulatory', - 'stirabouts', - 'stirringly', - 'stitcheries', - 'stitchwort', - 'stitchworts', - 'stochastic', - 'stochastically', - 'stockading', - 'stockbreeder', - 'stockbreeders', - 'stockbroker', - 'stockbrokerage', - 'stockbrokerages', - 'stockbrokers', - 'stockbroking', - 'stockbrokings', - 'stockfishes', - 'stockholder', - 'stockholders', - 'stockiness', - 'stockinesses', - 'stockinets', - 'stockinette', - 'stockinettes', - 'stockinged', - 'stockjobber', - 'stockjobbers', - 'stockjobbing', - 'stockjobbings', - 'stockkeeper', - 'stockkeepers', - 'stockpiled', - 'stockpiler', - 'stockpilers', - 'stockpiles', - 'stockpiling', - 'stockrooms', - 'stocktaking', - 'stocktakings', - 'stockyards', - 'stodginess', - 'stodginesses', - 'stoichiometric', - 'stoichiometrically', - 'stoichiometries', - 'stoichiometry', - 'stokeholds', - 'stolidities', - 'stoloniferous', - 'stomachache', - 'stomachaches', - 'stomachers', - 'stomachics', - 'stomaching', - 'stomatitides', - 'stomatitis', - 'stomatitises', - 'stomatopod', - 'stomatopods', - 'stomodaeal', - 'stomodaeum', - 'stomodaeums', - 'stomodeums', - 'stoneboats', - 'stonechats', - 'stonecrops', - 'stonecutter', - 'stonecutters', - 'stonecutting', - 'stonecuttings', - 'stonefishes', - 'stoneflies', - 'stonemason', - 'stonemasonries', - 'stonemasonry', - 'stonemasons', - 'stonewalled', - 'stonewaller', - 'stonewallers', - 'stonewalling', - 'stonewalls', - 'stonewares', - 'stonewashed', - 'stoneworks', - 'stoneworts', - 'stoninesses', - 'stonishing', - 'stonyhearted', - 'stoopballs', - 'stoplights', - 'stoppering', - 'stopwatches', - 'storefront', - 'storefronts', - 'storehouse', - 'storehouses', - 'storekeeper', - 'storekeepers', - 'storerooms', - 'storeships', - 'storksbill', - 'storksbills', - 'stormbound', - 'storminess', - 'storminesses', - 'storyboard', - 'storyboarded', - 'storyboarding', - 'storyboards', - 'storybooks', - 'storyteller', - 'storytellers', - 'storytelling', - 'storytellings', - 'stoutening', - 'stouthearted', - 'stoutheartedly', - 'stoutheartedness', - 'stoutheartednesses', - 'stoutnesses', - 'stovepipes', - 'strabismic', - 'strabismus', - 'strabismuses', - 'straddlers', - 'straddling', - 'stragglers', - 'stragglier', - 'straggliest', - 'straggling', - 'straightaway', - 'straightaways', - 'straightbred', - 'straightbreds', - 'straighted', - 'straightedge', - 'straightedges', - 'straighten', - 'straightened', - 'straightener', - 'straighteners', - 'straightening', - 'straightens', - 'straighter', - 'straightest', - 'straightforward', - 'straightforwardly', - 'straightforwardness', - 'straightforwardnesses', - 'straightforwards', - 'straighting', - 'straightish', - 'straightjacket', - 'straightjacketed', - 'straightjacketing', - 'straightjackets', - 'straightlaced', - 'straightly', - 'straightness', - 'straightnesses', - 'straightway', - 'straitened', - 'straitening', - 'straitjacket', - 'straitjacketed', - 'straitjacketing', - 'straitjackets', - 'straitlaced', - 'straitlacedly', - 'straitlacedness', - 'straitlacednesses', - 'straitness', - 'straitnesses', - 'stramashes', - 'stramonies', - 'stramonium', - 'stramoniums', - 'strandedness', - 'strandednesses', - 'strandline', - 'strandlines', - 'strangeness', - 'strangenesses', - 'strangered', - 'strangering', - 'stranglehold', - 'strangleholds', - 'stranglers', - 'strangling', - 'strangulate', - 'strangulated', - 'strangulates', - 'strangulating', - 'strangulation', - 'strangulations', - 'stranguries', - 'straphanger', - 'straphangers', - 'straphanging', - 'straphangs', - 'straplesses', - 'strappadoes', - 'strappados', - 'strappings', - 'stratagems', - 'strategical', - 'strategically', - 'strategies', - 'strategist', - 'strategists', - 'strategize', - 'strategized', - 'strategizes', - 'strategizing', - 'strathspey', - 'strathspeys', - 'stratification', - 'stratifications', - 'stratified', - 'stratifies', - 'stratiform', - 'stratifying', - 'stratigraphic', - 'stratigraphies', - 'stratigraphy', - 'stratocracies', - 'stratocracy', - 'stratocumuli', - 'stratocumulus', - 'stratosphere', - 'stratospheres', - 'stratospheric', - 'stratovolcano', - 'stratovolcanoes', - 'stratovolcanos', - 'stravaging', - 'stravaiged', - 'stravaiging', - 'strawberries', - 'strawberry', - 'strawflower', - 'strawflowers', - 'streakiest', - 'streakiness', - 'streakinesses', - 'streakings', - 'streambeds', - 'streamiest', - 'streamings', - 'streamlets', - 'streamline', - 'streamlined', - 'streamliner', - 'streamliners', - 'streamlines', - 'streamlining', - 'streamside', - 'streamsides', - 'streetcars', - 'streetlamp', - 'streetlamps', - 'streetlight', - 'streetlights', - 'streetscape', - 'streetscapes', - 'streetwalker', - 'streetwalkers', - 'streetwalking', - 'streetwalkings', - 'streetwise', - 'strengthen', - 'strengthened', - 'strengthener', - 'strengtheners', - 'strengthening', - 'strengthens', - 'strenuosities', - 'strenuosity', - 'strenuously', - 'strenuousness', - 'strenuousnesses', - 'streptobacilli', - 'streptobacillus', - 'streptococcal', - 'streptococci', - 'streptococcic', - 'streptococcus', - 'streptokinase', - 'streptokinases', - 'streptolysin', - 'streptolysins', - 'streptomyces', - 'streptomycete', - 'streptomycetes', - 'streptomycin', - 'streptomycins', - 'streptothricin', - 'streptothricins', - 'stressfully', - 'stressless', - 'stresslessness', - 'stresslessnesses', - 'stretchabilities', - 'stretchability', - 'stretchable', - 'stretchers', - 'stretchier', - 'stretchiest', - 'stretching', - 'strewments', - 'striations', - 'strickling', - 'strictness', - 'strictnesses', - 'strictures', - 'stridences', - 'stridencies', - 'stridently', - 'stridulate', - 'stridulated', - 'stridulates', - 'stridulating', - 'stridulation', - 'stridulations', - 'stridulatory', - 'stridulous', - 'stridulously', - 'strifeless', - 'strikebound', - 'strikebreaker', - 'strikebreakers', - 'strikebreaking', - 'strikebreakings', - 'strikeouts', - 'strikeover', - 'strikeovers', - 'strikingly', - 'stringcourse', - 'stringcourses', - 'stringencies', - 'stringency', - 'stringendo', - 'stringently', - 'stringhalt', - 'stringhalted', - 'stringhalts', - 'stringiest', - 'stringiness', - 'stringinesses', - 'stringings', - 'stringless', - 'stringpiece', - 'stringpieces', - 'stringybark', - 'stringybarks', - 'stripeless', - 'striplings', - 'strippable', - 'striptease', - 'stripteaser', - 'stripteasers', - 'stripteases', - 'strobilation', - 'strobilations', - 'stroboscope', - 'stroboscopes', - 'stroboscopic', - 'stroboscopically', - 'strobotron', - 'strobotrons', - 'stroganoff', - 'stromatolite', - 'stromatolites', - 'stromatolitic', - 'strongboxes', - 'stronghold', - 'strongholds', - 'strongyles', - 'strongyloidiases', - 'strongyloidiasis', - 'strongyloidoses', - 'strongyloidosis', - 'strongyloidosises', - 'strontianite', - 'strontianites', - 'strontiums', - 'strophanthin', - 'strophanthins', - 'stroppiest', - 'stroudings', - 'structural', - 'structuralism', - 'structuralisms', - 'structuralist', - 'structuralists', - 'structuralization', - 'structuralizations', - 'structuralize', - 'structuralized', - 'structuralizes', - 'structuralizing', - 'structurally', - 'structuration', - 'structurations', - 'structured', - 'structureless', - 'structurelessness', - 'structurelessnesses', - 'structures', - 'structuring', - 'strugglers', - 'struggling', - 'struthious', - 'strychnine', - 'strychnines', - 'stubbliest', - 'stubborner', - 'stubbornest', - 'stubbornly', - 'stubbornness', - 'stubbornnesses', - 'stuccowork', - 'stuccoworks', - 'studentship', - 'studentships', - 'studfishes', - 'studhorses', - 'studiedness', - 'studiednesses', - 'studiously', - 'studiousness', - 'studiousnesses', - 'stuffiness', - 'stuffinesses', - 'stultification', - 'stultifications', - 'stultified', - 'stultifies', - 'stultifying', - 'stumblebum', - 'stumblebums', - 'stumblingly', - 'stunningly', - 'stuntedness', - 'stuntednesses', - 'stuntwoman', - 'stuntwomen', - 'stupefaction', - 'stupefactions', - 'stupefying', - 'stupefyingly', - 'stupendous', - 'stupendously', - 'stupendousness', - 'stupendousnesses', - 'stupidities', - 'stupidness', - 'stupidnesses', - 'sturdiness', - 'sturdinesses', - 'stutterers', - 'stuttering', - 'stylebooks', - 'stylelessness', - 'stylelessnesses', - 'stylishness', - 'stylishnesses', - 'stylistically', - 'stylistics', - 'stylization', - 'stylizations', - 'stylobates', - 'stylographies', - 'stylography', - 'stylopodia', - 'stylopodium', - 'suabilities', - 'suasiveness', - 'suasivenesses', - 'suavenesses', - 'subacidness', - 'subacidnesses', - 'subacutely', - 'subadolescent', - 'subadolescents', - 'subaerially', - 'subagencies', - 'suballocation', - 'suballocations', - 'subalterns', - 'subantarctic', - 'subaquatic', - 'subaqueous', - 'subarachnoid', - 'subarachnoidal', - 'subarctics', - 'subassemblies', - 'subassembly', - 'subatmospheric', - 'subaudible', - 'subaudition', - 'subauditions', - 'subaverage', - 'subbasement', - 'subbasements', - 'subbituminous', - 'subbranches', - 'subcabinet', - 'subcapsular', - 'subcategories', - 'subcategorization', - 'subcategorizations', - 'subcategorize', - 'subcategorized', - 'subcategorizes', - 'subcategorizing', - 'subcategory', - 'subceiling', - 'subceilings', - 'subcellars', - 'subcellular', - 'subcenters', - 'subcentral', - 'subcentrally', - 'subchapter', - 'subchapters', - 'subchasers', - 'subclassed', - 'subclasses', - 'subclassification', - 'subclassifications', - 'subclassified', - 'subclassifies', - 'subclassify', - 'subclassifying', - 'subclassing', - 'subclavian', - 'subclavians', - 'subclimaxes', - 'subclinical', - 'subclinically', - 'subcluster', - 'subclusters', - 'subcollection', - 'subcollections', - 'subcollege', - 'subcolleges', - 'subcollegiate', - 'subcolonies', - 'subcommission', - 'subcommissions', - 'subcommittee', - 'subcommittees', - 'subcommunities', - 'subcommunity', - 'subcompact', - 'subcompacts', - 'subcomponent', - 'subcomponents', - 'subconscious', - 'subconsciouses', - 'subconsciously', - 'subconsciousness', - 'subconsciousnesses', - 'subcontinent', - 'subcontinental', - 'subcontinents', - 'subcontract', - 'subcontracted', - 'subcontracting', - 'subcontractor', - 'subcontractors', - 'subcontracts', - 'subcontraoctave', - 'subcontraoctaves', - 'subcontraries', - 'subcontrary', - 'subcooling', - 'subcordate', - 'subcoriaceous', - 'subcortical', - 'subcounties', - 'subcritical', - 'subcrustal', - 'subcultural', - 'subculturally', - 'subculture', - 'subcultured', - 'subcultures', - 'subculturing', - 'subcurative', - 'subcuratives', - 'subcutaneous', - 'subcutaneously', - 'subcutises', - 'subdeacons', - 'subdebutante', - 'subdebutantes', - 'subdecision', - 'subdecisions', - 'subdepartment', - 'subdepartments', - 'subdermally', - 'subdevelopment', - 'subdevelopments', - 'subdialect', - 'subdialects', - 'subdirector', - 'subdirectors', - 'subdiscipline', - 'subdisciplines', - 'subdistrict', - 'subdistricted', - 'subdistricting', - 'subdistricts', - 'subdividable', - 'subdivided', - 'subdivider', - 'subdividers', - 'subdivides', - 'subdividing', - 'subdivision', - 'subdivisions', - 'subdominant', - 'subdominants', - 'subducting', - 'subduction', - 'subductions', - 'subeconomies', - 'subeconomy', - 'subediting', - 'subeditorial', - 'subeditors', - 'subemployed', - 'subemployment', - 'subemployments', - 'subentries', - 'subepidermal', - 'suberising', - 'suberization', - 'suberizations', - 'suberizing', - 'subfamilies', - 'subfossils', - 'subfreezing', - 'subgeneration', - 'subgenerations', - 'subgenuses', - 'subglacial', - 'subglacially', - 'subgovernment', - 'subgovernments', - 'subheading', - 'subheadings', - 'subindexes', - 'subindices', - 'subindustries', - 'subindustry', - 'subinfeudate', - 'subinfeudated', - 'subinfeudates', - 'subinfeudating', - 'subinfeudation', - 'subinfeudations', - 'subinhibitory', - 'subinterval', - 'subintervals', - 'subirrigate', - 'subirrigated', - 'subirrigates', - 'subirrigating', - 'subirrigation', - 'subirrigations', - 'subjacencies', - 'subjacency', - 'subjacently', - 'subjecting', - 'subjection', - 'subjections', - 'subjective', - 'subjectively', - 'subjectiveness', - 'subjectivenesses', - 'subjectives', - 'subjectivise', - 'subjectivised', - 'subjectivises', - 'subjectivising', - 'subjectivism', - 'subjectivisms', - 'subjectivist', - 'subjectivistic', - 'subjectivists', - 'subjectivities', - 'subjectivity', - 'subjectivization', - 'subjectivizations', - 'subjectivize', - 'subjectivized', - 'subjectivizes', - 'subjectivizing', - 'subjectless', - 'subjoining', - 'subjugated', - 'subjugates', - 'subjugating', - 'subjugation', - 'subjugations', - 'subjugator', - 'subjugators', - 'subjunction', - 'subjunctions', - 'subjunctive', - 'subjunctives', - 'subkingdom', - 'subkingdoms', - 'sublanguage', - 'sublanguages', - 'sublations', - 'subleasing', - 'sublethally', - 'subletting', - 'sublibrarian', - 'sublibrarians', - 'sublicense', - 'sublicensed', - 'sublicenses', - 'sublicensing', - 'sublieutenant', - 'sublieutenants', - 'sublimable', - 'sublimated', - 'sublimates', - 'sublimating', - 'sublimation', - 'sublimations', - 'sublimeness', - 'sublimenesses', - 'subliminal', - 'subliminally', - 'sublimities', - 'sublingual', - 'subliteracies', - 'subliteracy', - 'subliterary', - 'subliterate', - 'subliterature', - 'subliteratures', - 'sublittoral', - 'sublittorals', - 'subluxation', - 'subluxations', - 'submanager', - 'submanagers', - 'submandibular', - 'submandibulars', - 'submarginal', - 'submarined', - 'submariner', - 'submariners', - 'submarines', - 'submarining', - 'submarkets', - 'submaxillaries', - 'submaxillary', - 'submaximal', - 'submediant', - 'submediants', - 'submergence', - 'submergences', - 'submergible', - 'submerging', - 'submersible', - 'submersibles', - 'submersing', - 'submersion', - 'submersions', - 'submetacentric', - 'submetacentrics', - 'submicrogram', - 'submicroscopic', - 'submicroscopically', - 'submillimeter', - 'subminiature', - 'subminimal', - 'subminister', - 'subministers', - 'submission', - 'submissions', - 'submissive', - 'submissively', - 'submissiveness', - 'submissivenesses', - 'submitochondrial', - 'submittals', - 'submitting', - 'submucosae', - 'submucosal', - 'submucosas', - 'submultiple', - 'submultiples', - 'submunition', - 'submunitions', - 'subnational', - 'subnetwork', - 'subnetworks', - 'subnormalities', - 'subnormality', - 'subnormally', - 'subnuclear', - 'suboceanic', - 'suboptimal', - 'suboptimization', - 'suboptimizations', - 'suboptimize', - 'suboptimized', - 'suboptimizes', - 'suboptimizing', - 'suboptimum', - 'suborbicular', - 'suborbital', - 'subordinate', - 'subordinated', - 'subordinately', - 'subordinateness', - 'subordinatenesses', - 'subordinates', - 'subordinating', - 'subordination', - 'subordinations', - 'subordinative', - 'subordinator', - 'subordinators', - 'suborganization', - 'suborganizations', - 'subornation', - 'subornations', - 'subparagraph', - 'subparagraphs', - 'subparallel', - 'subpenaing', - 'subperiods', - 'subpoenaed', - 'subpoenaing', - 'subpopulation', - 'subpopulations', - 'subpotencies', - 'subpotency', - 'subprimate', - 'subprimates', - 'subprincipal', - 'subprincipals', - 'subproblem', - 'subproblems', - 'subprocess', - 'subprocesses', - 'subproduct', - 'subproducts', - 'subprofessional', - 'subprofessionals', - 'subprogram', - 'subprograms', - 'subproject', - 'subprojects', - 'subproletariat', - 'subproletariats', - 'subrational', - 'subregional', - 'subregions', - 'subreption', - 'subreptions', - 'subreptitious', - 'subreptitiously', - 'subrogated', - 'subrogates', - 'subrogating', - 'subrogation', - 'subrogations', - 'subroutine', - 'subroutines', - 'subsampled', - 'subsamples', - 'subsampling', - 'subsatellite', - 'subsatellites', - 'subsaturated', - 'subsaturation', - 'subsaturations', - 'subscience', - 'subsciences', - 'subscribed', - 'subscriber', - 'subscribers', - 'subscribes', - 'subscribing', - 'subscription', - 'subscriptions', - 'subscripts', - 'subsecretaries', - 'subsecretary', - 'subsection', - 'subsections', - 'subsectors', - 'subsegment', - 'subsegments', - 'subseizure', - 'subseizures', - 'subsentence', - 'subsentences', - 'subsequence', - 'subsequences', - 'subsequent', - 'subsequently', - 'subsequents', - 'subservience', - 'subserviences', - 'subserviencies', - 'subserviency', - 'subservient', - 'subserviently', - 'subserving', - 'subsidence', - 'subsidences', - 'subsidiaries', - 'subsidiarily', - 'subsidiarities', - 'subsidiarity', - 'subsidiary', - 'subsidised', - 'subsidises', - 'subsidising', - 'subsidization', - 'subsidizations', - 'subsidized', - 'subsidizer', - 'subsidizers', - 'subsidizes', - 'subsidizing', - 'subsistence', - 'subsistences', - 'subsistent', - 'subsisting', - 'subsocieties', - 'subsociety', - 'subsoilers', - 'subsoiling', - 'subsonically', - 'subspecialist', - 'subspecialists', - 'subspecialize', - 'subspecialized', - 'subspecializes', - 'subspecializing', - 'subspecialties', - 'subspecialty', - 'subspecies', - 'subspecific', - 'substanceless', - 'substances', - 'substandard', - 'substantial', - 'substantialities', - 'substantiality', - 'substantially', - 'substantialness', - 'substantialnesses', - 'substantials', - 'substantiate', - 'substantiated', - 'substantiates', - 'substantiating', - 'substantiation', - 'substantiations', - 'substantiative', - 'substantival', - 'substantivally', - 'substantive', - 'substantively', - 'substantiveness', - 'substantivenesses', - 'substantives', - 'substantivize', - 'substantivized', - 'substantivizes', - 'substantivizing', - 'substation', - 'substations', - 'substituent', - 'substituents', - 'substitutabilities', - 'substitutability', - 'substitutable', - 'substitute', - 'substituted', - 'substitutes', - 'substituting', - 'substitution', - 'substitutional', - 'substitutionally', - 'substitutionary', - 'substitutions', - 'substitutive', - 'substitutively', - 'substrates', - 'substratum', - 'substructural', - 'substructure', - 'substructures', - 'subsumable', - 'subsumption', - 'subsumptions', - 'subsurface', - 'subsurfaces', - 'subsystems', - 'subtemperate', - 'subtenancies', - 'subtenancy', - 'subtenants', - 'subtending', - 'subterfuge', - 'subterfuges', - 'subterminal', - 'subterranean', - 'subterraneanly', - 'subterraneous', - 'subterraneously', - 'subtextual', - 'subtherapeutic', - 'subthreshold', - 'subtileness', - 'subtilenesses', - 'subtilisin', - 'subtilisins', - 'subtilization', - 'subtilizations', - 'subtilized', - 'subtilizes', - 'subtilizing', - 'subtilties', - 'subtitling', - 'subtleness', - 'subtlenesses', - 'subtleties', - 'subtotaled', - 'subtotaling', - 'subtotalled', - 'subtotalling', - 'subtotally', - 'subtracted', - 'subtracter', - 'subtracters', - 'subtracting', - 'subtraction', - 'subtractions', - 'subtractive', - 'subtrahend', - 'subtrahends', - 'subtreasuries', - 'subtreasury', - 'subtropical', - 'subtropics', - 'subumbrella', - 'subumbrellas', - 'suburbanise', - 'suburbanised', - 'suburbanises', - 'suburbanising', - 'suburbanite', - 'suburbanites', - 'suburbanization', - 'suburbanizations', - 'suburbanize', - 'suburbanized', - 'suburbanizes', - 'suburbanizing', - 'subvarieties', - 'subvariety', - 'subvassals', - 'subvention', - 'subventionary', - 'subventions', - 'subversion', - 'subversionary', - 'subversions', - 'subversive', - 'subversively', - 'subversiveness', - 'subversivenesses', - 'subversives', - 'subverters', - 'subverting', - 'subvisible', - 'subvocalization', - 'subvocalizations', - 'subvocalize', - 'subvocalized', - 'subvocalizes', - 'subvocalizing', - 'subvocally', - 'subwriters', - 'succedanea', - 'succedaneous', - 'succedaneum', - 'succedaneums', - 'succeeders', - 'succeeding', - 'successful', - 'successfully', - 'successfulness', - 'successfulnesses', - 'succession', - 'successional', - 'successionally', - 'successions', - 'successive', - 'successively', - 'successiveness', - 'successivenesses', - 'successors', - 'succinates', - 'succincter', - 'succinctest', - 'succinctly', - 'succinctness', - 'succinctnesses', - 'succinylcholine', - 'succinylcholines', - 'succotashes', - 'succouring', - 'succubuses', - 'succulence', - 'succulences', - 'succulently', - 'succulents', - 'succumbing', - 'succussing', - 'suchnesses', - 'suckfishes', - 'suctioning', - 'suctorians', - 'sudatories', - 'sudatorium', - 'sudatoriums', - 'suddenness', - 'suddennesses', - 'sudoriferous', - 'sudorifics', - 'sufferable', - 'sufferableness', - 'sufferablenesses', - 'sufferably', - 'sufferance', - 'sufferances', - 'sufferings', - 'sufficiencies', - 'sufficiency', - 'sufficient', - 'sufficiently', - 'suffixation', - 'suffixations', - 'sufflating', - 'suffocated', - 'suffocates', - 'suffocating', - 'suffocatingly', - 'suffocation', - 'suffocations', - 'suffocative', - 'suffragans', - 'suffragette', - 'suffragettes', - 'suffragist', - 'suffragists', - 'suffusions', - 'sugarberries', - 'sugarberry', - 'sugarcanes', - 'sugarcoated', - 'sugarcoating', - 'sugarcoats', - 'sugarhouse', - 'sugarhouses', - 'sugarloaves', - 'sugarplums', - 'suggesters', - 'suggestibilities', - 'suggestibility', - 'suggestible', - 'suggesting', - 'suggestion', - 'suggestions', - 'suggestive', - 'suggestively', - 'suggestiveness', - 'suggestivenesses', - 'suicidally', - 'suitabilities', - 'suitability', - 'suitableness', - 'suitablenesses', - 'sulfadiazine', - 'sulfadiazines', - 'sulfanilamide', - 'sulfanilamides', - 'sulfatases', - 'sulfhydryl', - 'sulfhydryls', - 'sulfinpyrazone', - 'sulfinpyrazones', - 'sulfonamide', - 'sulfonamides', - 'sulfonated', - 'sulfonates', - 'sulfonating', - 'sulfonation', - 'sulfonations', - 'sulfoniums', - 'sulfonylurea', - 'sulfonylureas', - 'sulfoxides', - 'sulfureted', - 'sulfureting', - 'sulfuretted', - 'sulfuretting', - 'sulfurized', - 'sulfurizes', - 'sulfurizing', - 'sulfurously', - 'sulfurousness', - 'sulfurousnesses', - 'sulkinesses', - 'sullenness', - 'sullennesses', - 'sulphating', - 'sulphureous', - 'sulphuring', - 'sulphurise', - 'sulphurised', - 'sulphurises', - 'sulphurising', - 'sulphurous', - 'sultanates', - 'sultanesses', - 'sultriness', - 'sultrinesses', - 'summabilities', - 'summability', - 'summarised', - 'summarises', - 'summarising', - 'summarizable', - 'summarization', - 'summarizations', - 'summarized', - 'summarizer', - 'summarizers', - 'summarizes', - 'summarizing', - 'summational', - 'summations', - 'summerhouse', - 'summerhouses', - 'summeriest', - 'summerlike', - 'summerlong', - 'summersault', - 'summersaulted', - 'summersaulting', - 'summersaults', - 'summertime', - 'summertimes', - 'summerwood', - 'summerwoods', - 'summiteers', - 'summitries', - 'summonable', - 'summonsing', - 'sumptuously', - 'sumptuousness', - 'sumptuousnesses', - 'sunbathers', - 'sunbathing', - 'sunbonnets', - 'sunburning', - 'sundowners', - 'sundresses', - 'sunflowers', - 'sunglasses', - 'sunninesses', - 'sunporches', - 'sunscreening', - 'sunscreens', - 'sunseekers', - 'sunstrokes', - 'superableness', - 'superablenesses', - 'superabound', - 'superabounded', - 'superabounding', - 'superabounds', - 'superabsorbent', - 'superabsorbents', - 'superabundance', - 'superabundances', - 'superabundant', - 'superabundantly', - 'superachiever', - 'superachievers', - 'superactivities', - 'superactivity', - 'superadded', - 'superadding', - 'superaddition', - 'superadditions', - 'superadministrator', - 'superadministrators', - 'superagencies', - 'superagency', - 'superagent', - 'superagents', - 'superalloy', - 'superalloys', - 'superaltern', - 'superalterns', - 'superambitious', - 'superannuate', - 'superannuated', - 'superannuates', - 'superannuating', - 'superannuation', - 'superannuations', - 'superathlete', - 'superathletes', - 'superbanks', - 'superbillionaire', - 'superbillionaires', - 'superbitch', - 'superbitches', - 'superblock', - 'superblocks', - 'superbness', - 'superbnesses', - 'superboard', - 'superboards', - 'superbomber', - 'superbombers', - 'superbombs', - 'superbright', - 'superbureaucrat', - 'superbureaucrats', - 'supercabinet', - 'supercabinets', - 'supercalender', - 'supercalendered', - 'supercalendering', - 'supercalenders', - 'supercargo', - 'supercargoes', - 'supercargos', - 'supercarrier', - 'supercarriers', - 'supercautious', - 'superceded', - 'supercedes', - 'superceding', - 'supercenter', - 'supercenters', - 'supercharge', - 'supercharged', - 'supercharger', - 'superchargers', - 'supercharges', - 'supercharging', - 'superchurch', - 'superchurches', - 'superciliary', - 'supercilious', - 'superciliously', - 'superciliousness', - 'superciliousnesses', - 'supercities', - 'supercivilization', - 'supercivilizations', - 'supercivilized', - 'superclass', - 'superclasses', - 'superclean', - 'superclubs', - 'supercluster', - 'superclusters', - 'supercoiled', - 'supercoiling', - 'supercoils', - 'supercollider', - 'supercolliders', - 'supercolossal', - 'supercomfortable', - 'supercompetitive', - 'supercomputer', - 'supercomputers', - 'superconduct', - 'superconducted', - 'superconducting', - 'superconductive', - 'superconductivities', - 'superconductivity', - 'superconductor', - 'superconductors', - 'superconducts', - 'superconfident', - 'superconglomerate', - 'superconglomerates', - 'superconservative', - 'supercontinent', - 'supercontinents', - 'superconvenient', - 'supercooled', - 'supercooling', - 'supercools', - 'supercorporation', - 'supercorporations', - 'supercriminal', - 'supercriminals', - 'supercritical', - 'supercurrent', - 'supercurrents', - 'superdeluxe', - 'superdiplomat', - 'superdiplomats', - 'supereffective', - 'superefficiencies', - 'superefficiency', - 'superefficient', - 'superegoist', - 'superegoists', - 'superelevate', - 'superelevated', - 'superelevates', - 'superelevating', - 'superelevation', - 'superelevations', - 'superelite', - 'superelites', - 'supereminence', - 'supereminences', - 'supereminent', - 'supereminently', - 'superencipher', - 'superenciphered', - 'superenciphering', - 'superenciphers', - 'supererogation', - 'supererogations', - 'supererogatory', - 'superettes', - 'superexpensive', - 'superexpress', - 'superexpresses', - 'superfamilies', - 'superfamily', - 'superfarms', - 'superfatted', - 'superfecundation', - 'superfecundations', - 'superfetation', - 'superfetations', - 'superficial', - 'superficialities', - 'superficiality', - 'superficially', - 'superficies', - 'superfirms', - 'superfixes', - 'superflack', - 'superflacks', - 'superfluid', - 'superfluidities', - 'superfluidity', - 'superfluids', - 'superfluities', - 'superfluity', - 'superfluous', - 'superfluously', - 'superfluousness', - 'superfluousnesses', - 'superfunds', - 'supergenes', - 'supergiant', - 'supergiants', - 'superglues', - 'supergovernment', - 'supergovernments', - 'supergraphics', - 'supergravities', - 'supergravity', - 'supergroup', - 'supergroups', - 'supergrowth', - 'supergrowths', - 'superharden', - 'superhardened', - 'superhardening', - 'superhardens', - 'superheated', - 'superheater', - 'superheaters', - 'superheating', - 'superheats', - 'superheavy', - 'superheavyweight', - 'superheavyweights', - 'superhelical', - 'superhelices', - 'superhelix', - 'superhelixes', - 'superheroes', - 'superheroine', - 'superheroines', - 'superheterodyne', - 'superheterodynes', - 'superhighway', - 'superhighways', - 'superhuman', - 'superhumanities', - 'superhumanity', - 'superhumanly', - 'superhumanness', - 'superhumannesses', - 'superhyped', - 'superhypes', - 'superhyping', - 'superimposable', - 'superimpose', - 'superimposed', - 'superimposes', - 'superimposing', - 'superimposition', - 'superimpositions', - 'superincumbent', - 'superincumbently', - 'superindividual', - 'superinduce', - 'superinduced', - 'superinduces', - 'superinducing', - 'superinduction', - 'superinductions', - 'superinfect', - 'superinfected', - 'superinfecting', - 'superinfection', - 'superinfections', - 'superinfects', - 'superinsulated', - 'superintellectual', - 'superintellectuals', - 'superintelligence', - 'superintelligences', - 'superintelligent', - 'superintend', - 'superintended', - 'superintendence', - 'superintendences', - 'superintendencies', - 'superintendency', - 'superintendent', - 'superintendents', - 'superintending', - 'superintends', - 'superintensities', - 'superintensity', - 'superiorities', - 'superiority', - 'superiorly', - 'superjacent', - 'superjocks', - 'superjumbo', - 'superlarge', - 'superlative', - 'superlatively', - 'superlativeness', - 'superlativenesses', - 'superlatives', - 'superlawyer', - 'superlawyers', - 'superlight', - 'superliner', - 'superliners', - 'superlobbyist', - 'superlobbyists', - 'superloyalist', - 'superloyalists', - 'superlunar', - 'superlunary', - 'superluxuries', - 'superluxurious', - 'superluxury', - 'superlying', - 'supermacho', - 'supermachos', - 'supermajorities', - 'supermajority', - 'supermales', - 'supermarket', - 'supermarkets', - 'supermasculine', - 'supermassive', - 'supermicro', - 'supermicros', - 'supermilitant', - 'supermillionaire', - 'supermillionaires', - 'superminds', - 'superminicomputer', - 'superminicomputers', - 'superminis', - 'superminister', - 'superministers', - 'supermodel', - 'supermodels', - 'supermodern', - 'supernally', - 'supernatant', - 'supernatants', - 'supernation', - 'supernational', - 'supernations', - 'supernatural', - 'supernaturalism', - 'supernaturalisms', - 'supernaturalist', - 'supernaturalistic', - 'supernaturalists', - 'supernaturally', - 'supernaturalness', - 'supernaturalnesses', - 'supernaturals', - 'supernature', - 'supernatures', - 'supernormal', - 'supernormalities', - 'supernormality', - 'supernormally', - 'supernovae', - 'supernovas', - 'supernumeraries', - 'supernumerary', - 'supernutrition', - 'supernutritions', - 'superorder', - 'superorders', - 'superordinate', - 'superorganic', - 'superorganism', - 'superorganisms', - 'superorgasm', - 'superorgasms', - 'superovulate', - 'superovulated', - 'superovulates', - 'superovulating', - 'superovulation', - 'superovulations', - 'superoxide', - 'superoxides', - 'superparasitism', - 'superparasitisms', - 'superpatriot', - 'superpatriotic', - 'superpatriotism', - 'superpatriotisms', - 'superpatriots', - 'superperson', - 'superpersonal', - 'superpersons', - 'superphenomena', - 'superphenomenon', - 'superphosphate', - 'superphosphates', - 'superphysical', - 'superpimps', - 'superplane', - 'superplanes', - 'superplastic', - 'superplasticities', - 'superplasticity', - 'superplayer', - 'superplayers', - 'superpolite', - 'superports', - 'superposable', - 'superposed', - 'superposes', - 'superposing', - 'superposition', - 'superpositions', - 'superpower', - 'superpowered', - 'superpowerful', - 'superpowers', - 'superpremium', - 'superpremiums', - 'superprofit', - 'superprofits', - 'superqualities', - 'superquality', - 'superraces', - 'superrealism', - 'superrealisms', - 'superregenerative', - 'superregional', - 'superroads', - 'superromantic', - 'superromanticism', - 'superromanticisms', - 'supersales', - 'supersalesman', - 'supersalesmen', - 'supersaturate', - 'supersaturated', - 'supersaturates', - 'supersaturating', - 'supersaturation', - 'supersaturations', - 'superscale', - 'superscales', - 'superschool', - 'superschools', - 'superscout', - 'superscouts', - 'superscribe', - 'superscribed', - 'superscribes', - 'superscribing', - 'superscript', - 'superscription', - 'superscriptions', - 'superscripts', - 'supersecrecies', - 'supersecrecy', - 'supersecret', - 'supersecrets', - 'supersedeas', - 'superseded', - 'superseder', - 'superseders', - 'supersedes', - 'superseding', - 'supersedure', - 'supersedures', - 'superseller', - 'supersellers', - 'supersells', - 'supersensible', - 'supersensitive', - 'supersensitively', - 'supersensitivities', - 'supersensitivity', - 'supersensory', - 'superserviceable', - 'supersession', - 'supersessions', - 'supersexes', - 'supersexualities', - 'supersexuality', - 'supersharp', - 'supershows', - 'supersinger', - 'supersingers', - 'supersized', - 'supersleuth', - 'supersleuths', - 'superslick', - 'supersmart', - 'supersmooth', - 'supersonic', - 'supersonically', - 'supersonics', - 'supersophisticated', - 'superspecial', - 'superspecialist', - 'superspecialists', - 'superspecialization', - 'superspecializations', - 'superspecialized', - 'superspecials', - 'superspectacle', - 'superspectacles', - 'superspectacular', - 'superspectaculars', - 'superspeculation', - 'superspeculations', - 'superspies', - 'superstardom', - 'superstardoms', - 'superstars', - 'superstate', - 'superstates', - 'superstation', - 'superstations', - 'superstimulate', - 'superstimulated', - 'superstimulates', - 'superstimulating', - 'superstition', - 'superstitions', - 'superstitious', - 'superstitiously', - 'superstock', - 'superstocks', - 'superstore', - 'superstores', - 'superstrata', - 'superstratum', - 'superstrength', - 'superstrengths', - 'superstrike', - 'superstrikes', - 'superstring', - 'superstrings', - 'superstrong', - 'superstructural', - 'superstructure', - 'superstructures', - 'superstuds', - 'supersubstantial', - 'supersubtle', - 'supersubtleties', - 'supersubtlety', - 'supersurgeon', - 'supersurgeons', - 'supersweet', - 'supersymmetric', - 'supersymmetries', - 'supersymmetry', - 'supersystem', - 'supersystems', - 'supertanker', - 'supertankers', - 'supertaxes', - 'superterrific', - 'superthick', - 'superthriller', - 'superthrillers', - 'supertight', - 'supertonic', - 'supertonics', - 'supervened', - 'supervenes', - 'supervenient', - 'supervening', - 'supervention', - 'superventions', - 'supervirile', - 'supervirtuosi', - 'supervirtuoso', - 'supervirtuosos', - 'supervised', - 'supervises', - 'supervising', - 'supervision', - 'supervisions', - 'supervisor', - 'supervisors', - 'supervisory', - 'superwaves', - 'superweapon', - 'superweapons', - 'superwives', - 'superwoman', - 'superwomen', - 'supinating', - 'supination', - 'supinations', - 'supinators', - 'supineness', - 'supinenesses', - 'suppertime', - 'suppertimes', - 'supplantation', - 'supplantations', - 'supplanted', - 'supplanter', - 'supplanters', - 'supplanting', - 'supplejack', - 'supplejacks', - 'supplement', - 'supplemental', - 'supplementals', - 'supplementary', - 'supplementation', - 'supplementations', - 'supplemented', - 'supplementer', - 'supplementers', - 'supplementing', - 'supplements', - 'suppleness', - 'supplenesses', - 'suppletion', - 'suppletions', - 'suppletive', - 'suppletory', - 'suppliance', - 'suppliances', - 'suppliantly', - 'suppliants', - 'supplicant', - 'supplicants', - 'supplicate', - 'supplicated', - 'supplicates', - 'supplicating', - 'supplication', - 'supplications', - 'supplicatory', - 'supportabilities', - 'supportability', - 'supportable', - 'supporters', - 'supporting', - 'supportive', - 'supportiveness', - 'supportivenesses', - 'supposable', - 'supposably', - 'supposedly', - 'supposition', - 'suppositional', - 'suppositions', - 'suppositious', - 'supposititious', - 'supposititiously', - 'suppositories', - 'suppository', - 'suppressant', - 'suppressants', - 'suppressed', - 'suppresses', - 'suppressibilities', - 'suppressibility', - 'suppressible', - 'suppressing', - 'suppression', - 'suppressions', - 'suppressive', - 'suppressiveness', - 'suppressivenesses', - 'suppressor', - 'suppressors', - 'suppurated', - 'suppurates', - 'suppurating', - 'suppuration', - 'suppurations', - 'suppurative', - 'supraliminal', - 'supramolecular', - 'supranational', - 'supranationalism', - 'supranationalisms', - 'supranationalist', - 'supranationalists', - 'supranationalities', - 'supranationality', - 'supraoptic', - 'supraorbital', - 'suprarational', - 'suprarenal', - 'suprarenals', - 'suprasegmental', - 'supraventricular', - 'supravital', - 'supravitally', - 'supremacies', - 'supremacist', - 'supremacists', - 'suprematism', - 'suprematisms', - 'suprematist', - 'suprematists', - 'supremeness', - 'supremenesses', - 'surceasing', - 'surcharged', - 'surcharges', - 'surcharging', - 'surcingles', - 'surefooted', - 'surefootedly', - 'surefootedness', - 'surefootednesses', - 'surenesses', - 'suretyship', - 'suretyships', - 'surfacings', - 'surfactant', - 'surfactants', - 'surfboarded', - 'surfboarder', - 'surfboarders', - 'surfboarding', - 'surfboards', - 'surfeiters', - 'surfeiting', - 'surffishes', - 'surfperches', - 'surgeonfish', - 'surgeonfishes', - 'surgically', - 'surjection', - 'surjections', - 'surjective', - 'surlinesses', - 'surmountable', - 'surmounted', - 'surmounting', - 'surpassable', - 'surpassing', - 'surpassingly', - 'surplusage', - 'surplusages', - 'surprinted', - 'surprinting', - 'surprisals', - 'surprisers', - 'surprising', - 'surprisingly', - 'surprizing', - 'surrealism', - 'surrealisms', - 'surrealist', - 'surrealistic', - 'surrealistically', - 'surrealists', - 'surrebutter', - 'surrebutters', - 'surrejoinder', - 'surrejoinders', - 'surrendered', - 'surrendering', - 'surrenders', - 'surreptitious', - 'surreptitiously', - 'surrogacies', - 'surrogated', - 'surrogates', - 'surrogating', - 'surrounded', - 'surrounding', - 'surroundings', - 'surveillance', - 'surveillances', - 'surveillant', - 'surveillants', - 'surveilled', - 'surveilling', - 'surveyings', - 'survivabilities', - 'survivability', - 'survivable', - 'survivalist', - 'survivalists', - 'survivance', - 'survivances', - 'survivorship', - 'survivorships', - 'susceptibilities', - 'susceptibility', - 'susceptible', - 'susceptibleness', - 'susceptiblenesses', - 'susceptibly', - 'susceptive', - 'susceptiveness', - 'susceptivenesses', - 'susceptivities', - 'susceptivity', - 'suspecting', - 'suspendered', - 'suspenders', - 'suspending', - 'suspenseful', - 'suspensefully', - 'suspensefulness', - 'suspensefulnesses', - 'suspenseless', - 'suspensers', - 'suspension', - 'suspensions', - 'suspensive', - 'suspensively', - 'suspensories', - 'suspensors', - 'suspensory', - 'suspicioned', - 'suspicioning', - 'suspicions', - 'suspicious', - 'suspiciously', - 'suspiciousness', - 'suspiciousnesses', - 'suspiration', - 'suspirations', - 'sustainabilities', - 'sustainability', - 'sustainable', - 'sustainedly', - 'sustainers', - 'sustaining', - 'sustenance', - 'sustenances', - 'sustentation', - 'sustentations', - 'sustentative', - 'susurration', - 'susurrations', - 'susurruses', - 'suzerainties', - 'suzerainty', - 'svelteness', - 'sveltenesses', - 'swaggerers', - 'swaggering', - 'swaggeringly', - 'swainishness', - 'swainishnesses', - 'swallowable', - 'swallowers', - 'swallowing', - 'swallowtail', - 'swallowtails', - 'swampiness', - 'swampinesses', - 'swamplands', - 'swankiness', - 'swankinesses', - 'swanneries', - 'swansdowns', - 'swarajists', - 'swarthiest', - 'swarthiness', - 'swarthinesses', - 'swartnesses', - 'swashbuckle', - 'swashbuckled', - 'swashbuckler', - 'swashbucklers', - 'swashbuckles', - 'swashbuckling', - 'swaybacked', - 'swearwords', - 'sweatbands', - 'sweatboxes', - 'sweaterdress', - 'sweaterdresses', - 'sweatiness', - 'sweatinesses', - 'sweatpants', - 'sweatshirt', - 'sweatshirts', - 'sweatshops', - 'sweepbacks', - 'sweepingly', - 'sweepingness', - 'sweepingnesses', - 'sweepstakes', - 'sweetbread', - 'sweetbreads', - 'sweetbriar', - 'sweetbriars', - 'sweetbrier', - 'sweetbriers', - 'sweeteners', - 'sweetening', - 'sweetenings', - 'sweetheart', - 'sweethearts', - 'sweetishly', - 'sweetmeats', - 'sweetnesses', - 'sweetshops', - 'swellfishes', - 'swellheaded', - 'swellheadedness', - 'swellheadednesses', - 'swellheads', - 'sweltering', - 'swelteringly', - 'sweltriest', - 'swiftnesses', - 'swimmerets', - 'swimmingly', - 'swineherds', - 'swinepoxes', - 'swingingest', - 'swingingly', - 'swingletree', - 'swingletrees', - 'swinishness', - 'swinishnesses', - 'swirlingly', - 'swishingly', - 'switchable', - 'switchback', - 'switchbacked', - 'switchbacking', - 'switchbacks', - 'switchblade', - 'switchblades', - 'switchboard', - 'switchboards', - 'switcheroo', - 'switcheroos', - 'switchgrass', - 'switchgrasses', - 'switchyard', - 'switchyards', - 'swithering', - 'swivelling', - 'swooningly', - 'swoopstake', - 'swordfishes', - 'swordplayer', - 'swordplayers', - 'swordplays', - 'swordsmanship', - 'swordsmanships', - 'swordtails', - 'sybaritically', - 'sybaritism', - 'sybaritisms', - 'sycophancies', - 'sycophancy', - 'sycophantic', - 'sycophantically', - 'sycophantish', - 'sycophantishly', - 'sycophantism', - 'sycophantisms', - 'sycophantly', - 'sycophants', - 'syllabaries', - 'syllabically', - 'syllabicate', - 'syllabicated', - 'syllabicates', - 'syllabicating', - 'syllabication', - 'syllabications', - 'syllabicities', - 'syllabicity', - 'syllabification', - 'syllabifications', - 'syllabified', - 'syllabifies', - 'syllabifying', - 'syllabling', - 'syllabuses', - 'syllogisms', - 'syllogistic', - 'syllogistically', - 'syllogists', - 'syllogized', - 'syllogizes', - 'syllogizing', - 'sylvanites', - 'sylviculture', - 'sylvicultures', - 'symbiotically', - 'symbolical', - 'symbolically', - 'symbolised', - 'symbolises', - 'symbolising', - 'symbolisms', - 'symbolistic', - 'symbolists', - 'symbolization', - 'symbolizations', - 'symbolized', - 'symbolizer', - 'symbolizers', - 'symbolizes', - 'symbolizing', - 'symbolling', - 'symbologies', - 'symmetallism', - 'symmetallisms', - 'symmetrical', - 'symmetrically', - 'symmetricalness', - 'symmetricalnesses', - 'symmetries', - 'symmetrization', - 'symmetrizations', - 'symmetrize', - 'symmetrized', - 'symmetrizes', - 'symmetrizing', - 'sympathectomies', - 'sympathectomized', - 'sympathectomy', - 'sympathetic', - 'sympathetically', - 'sympathetics', - 'sympathies', - 'sympathins', - 'sympathise', - 'sympathised', - 'sympathises', - 'sympathising', - 'sympathize', - 'sympathized', - 'sympathizer', - 'sympathizers', - 'sympathizes', - 'sympathizing', - 'sympatholytic', - 'sympatholytics', - 'sympathomimetic', - 'sympathomimetics', - 'sympatrically', - 'sympatries', - 'sympetalies', - 'sympetalous', - 'symphonically', - 'symphonies', - 'symphonious', - 'symphoniously', - 'symphonist', - 'symphonists', - 'symphyseal', - 'symphysial', - 'symposiarch', - 'symposiarchs', - 'symposiast', - 'symposiasts', - 'symposiums', - 'symptomatic', - 'symptomatically', - 'symptomatologic', - 'symptomatological', - 'symptomatologically', - 'symptomatologies', - 'symptomatology', - 'symptomless', - 'synaereses', - 'synaeresis', - 'synaestheses', - 'synaesthesia', - 'synaesthesias', - 'synaesthesis', - 'synagogues', - 'synalephas', - 'synaloepha', - 'synaloephas', - 'synaptically', - 'synaptosomal', - 'synaptosome', - 'synaptosomes', - 'synarthrodial', - 'synarthroses', - 'synarthrosis', - 'syncarpies', - 'syncarpous', - 'syncategorematic', - 'syncategorematically', - 'synchrocyclotron', - 'synchrocyclotrons', - 'synchromesh', - 'synchromeshes', - 'synchronal', - 'synchroneities', - 'synchroneity', - 'synchronic', - 'synchronical', - 'synchronically', - 'synchronicities', - 'synchronicity', - 'synchronies', - 'synchronisation', - 'synchronisations', - 'synchronise', - 'synchronised', - 'synchronises', - 'synchronising', - 'synchronism', - 'synchronisms', - 'synchronistic', - 'synchronization', - 'synchronizations', - 'synchronize', - 'synchronized', - 'synchronizer', - 'synchronizers', - 'synchronizes', - 'synchronizing', - 'synchronous', - 'synchronously', - 'synchronousness', - 'synchronousnesses', - 'synchroscope', - 'synchroscopes', - 'synchrotron', - 'synchrotrons', - 'syncopated', - 'syncopates', - 'syncopating', - 'syncopation', - 'syncopations', - 'syncopative', - 'syncopator', - 'syncopators', - 'syncretise', - 'syncretised', - 'syncretises', - 'syncretising', - 'syncretism', - 'syncretisms', - 'syncretist', - 'syncretistic', - 'syncretists', - 'syncretize', - 'syncretized', - 'syncretizes', - 'syncretizing', - 'syndactylies', - 'syndactylism', - 'syndactylisms', - 'syndactyly', - 'syndesises', - 'syndesmoses', - 'syndesmosis', - 'syndetically', - 'syndicalism', - 'syndicalisms', - 'syndicalist', - 'syndicalists', - 'syndicated', - 'syndicates', - 'syndicating', - 'syndication', - 'syndications', - 'syndicator', - 'syndicators', - 'synecdoche', - 'synecdoches', - 'synecdochic', - 'synecdochical', - 'synecdochically', - 'synecological', - 'synecologies', - 'synecology', - 'synergetic', - 'synergically', - 'synergisms', - 'synergistic', - 'synergistically', - 'synergists', - 'synesthesia', - 'synesthesias', - 'synesthetic', - 'synkaryons', - 'synonymical', - 'synonymies', - 'synonymist', - 'synonymists', - 'synonymities', - 'synonymity', - 'synonymize', - 'synonymized', - 'synonymizes', - 'synonymizing', - 'synonymous', - 'synonymously', - 'synopsized', - 'synopsizes', - 'synopsizing', - 'synoptical', - 'synoptically', - 'synostoses', - 'synostosis', - 'synovitises', - 'syntactical', - 'syntactically', - 'syntactics', - 'syntagmata', - 'syntagmatic', - 'synthesist', - 'synthesists', - 'synthesize', - 'synthesized', - 'synthesizer', - 'synthesizers', - 'synthesizes', - 'synthesizing', - 'synthetase', - 'synthetases', - 'synthetically', - 'synthetics', - 'syphilises', - 'syphilitic', - 'syphilitics', - 'syringomyelia', - 'syringomyelias', - 'syringomyelic', - 'systematic', - 'systematically', - 'systematicness', - 'systematicnesses', - 'systematics', - 'systematise', - 'systematised', - 'systematises', - 'systematising', - 'systematism', - 'systematisms', - 'systematist', - 'systematists', - 'systematization', - 'systematizations', - 'systematize', - 'systematized', - 'systematizer', - 'systematizers', - 'systematizes', - 'systematizing', - 'systemically', - 'systemization', - 'systemizations', - 'systemized', - 'systemizes', - 'systemizing', - 'systemless', - 'tabboulehs', - 'tabernacle', - 'tabernacled', - 'tabernacles', - 'tabernacling', - 'tabernacular', - 'tablatures', - 'tablecloth', - 'tablecloths', - 'tablelands', - 'tablemates', - 'tablespoon', - 'tablespoonful', - 'tablespoonfuls', - 'tablespoons', - 'tablespoonsful', - 'tabletting', - 'tablewares', - 'tabulating', - 'tabulation', - 'tabulations', - 'tabulators', - 'tacamahacs', - 'tachistoscope', - 'tachistoscopes', - 'tachistoscopic', - 'tachistoscopically', - 'tachometer', - 'tachometers', - 'tachyarrhythmia', - 'tachyarrhythmias', - 'tachycardia', - 'tachycardias', - 'tacitnesses', - 'taciturnities', - 'taciturnity', - 'tackboards', - 'tackifiers', - 'tackifying', - 'tackinesses', - 'tactfulness', - 'tactfulnesses', - 'tactically', - 'tacticians', - 'tactilities', - 'tactlessly', - 'tactlessness', - 'tactlessnesses', - 'taffetized', - 'tagliatelle', - 'tagliatelles', - 'tailboards', - 'tailcoated', - 'tailenders', - 'tailgaters', - 'tailgating', - 'taillights', - 'tailorbird', - 'tailorbirds', - 'tailorings', - 'tailpieces', - 'tailplanes', - 'tailslides', - 'tailwaters', - 'talebearer', - 'talebearers', - 'talebearing', - 'talebearings', - 'talentless', - 'talismanic', - 'talismanically', - 'talkathons', - 'talkatively', - 'talkativeness', - 'talkativenesses', - 'talkinesses', - 'tallnesses', - 'tallyhoing', - 'talmudisms', - 'tamarillos', - 'tambourers', - 'tambourine', - 'tambourines', - 'tambouring', - 'tamenesses', - 'tamoxifens', - 'tamperproof', - 'tangencies', - 'tangential', - 'tangentially', - 'tangerines', - 'tangibilities', - 'tangibility', - 'tangibleness', - 'tangiblenesses', - 'tanglement', - 'tanglements', - 'tanistries', - 'tantalates', - 'tantalised', - 'tantalises', - 'tantalising', - 'tantalites', - 'tantalized', - 'tantalizer', - 'tantalizers', - 'tantalizes', - 'tantalizing', - 'tantalizingly', - 'tantaluses', - 'tantamount', - 'tanzanites', - 'taperstick', - 'tapersticks', - 'tapestried', - 'tapestries', - 'tapestrying', - 'taphonomic', - 'taphonomies', - 'taphonomist', - 'taphonomists', - 'taradiddle', - 'taradiddles', - 'tarantases', - 'tarantella', - 'tarantellas', - 'tarantisms', - 'tarantulae', - 'tarantulas', - 'tarbooshes', - 'tardigrade', - 'tardigrades', - 'tardinesses', - 'targetable', - 'tarmacadam', - 'tarmacadams', - 'tarnations', - 'tarnishable', - 'tarnishing', - 'tarpaulins', - 'tarradiddle', - 'tarradiddles', - 'tarriances', - 'tarsometatarsi', - 'tarsometatarsus', - 'tartnesses', - 'taskmaster', - 'taskmasters', - 'taskmistress', - 'taskmistresses', - 'tasselling', - 'tastefully', - 'tastefulness', - 'tastefulnesses', - 'tastelessly', - 'tastelessness', - 'tastelessnesses', - 'tastemaker', - 'tastemakers', - 'tastinesses', - 'tatterdemalion', - 'tatterdemalions', - 'tattersall', - 'tattersalls', - 'tattinesses', - 'tattletale', - 'tattletales', - 'tattooists', - 'tauntingly', - 'tautnesses', - 'tautological', - 'tautologically', - 'tautologies', - 'tautologous', - 'tautologously', - 'tautomeric', - 'tautomerism', - 'tautomerisms', - 'tautonymies', - 'tawdriness', - 'tawdrinesses', - 'tawninesses', - 'taxidermic', - 'taxidermies', - 'taxidermist', - 'taxidermists', - 'taximeters', - 'taxonomically', - 'taxonomies', - 'taxonomist', - 'taxonomists', - 'tchotchkes', - 'teaberries', - 'teachableness', - 'teachablenesses', - 'teacupfuls', - 'teacupsful', - 'teakettles', - 'tearfulness', - 'tearfulnesses', - 'teargassed', - 'teargasses', - 'teargassing', - 'tearjerker', - 'tearjerkers', - 'tearstained', - 'tearstains', - 'teaselling', - 'teaspoonful', - 'teaspoonfuls', - 'teaspoonsful', - 'teazelling', - 'technetium', - 'technetiums', - 'technetronic', - 'technicalities', - 'technicality', - 'technicalization', - 'technicalizations', - 'technicalize', - 'technicalized', - 'technicalizes', - 'technicalizing', - 'technically', - 'technicals', - 'technician', - 'technicians', - 'techniques', - 'technobabble', - 'technobabbles', - 'technocracies', - 'technocracy', - 'technocrat', - 'technocratic', - 'technocrats', - 'technologic', - 'technological', - 'technologically', - 'technologies', - 'technologist', - 'technologists', - 'technologize', - 'technologized', - 'technologizes', - 'technologizing', - 'technology', - 'technophile', - 'technophiles', - 'technophobe', - 'technophobes', - 'technophobia', - 'technophobias', - 'technophobic', - 'technostructure', - 'technostructures', - 'tectonically', - 'tectonisms', - 'tediousness', - 'tediousnesses', - 'teemingness', - 'teemingnesses', - 'teentsiest', - 'teenybopper', - 'teenyboppers', - 'teeterboard', - 'teeterboards', - 'teethridge', - 'teethridges', - 'teetotaled', - 'teetotaler', - 'teetotalers', - 'teetotaling', - 'teetotalism', - 'teetotalisms', - 'teetotalist', - 'teetotalists', - 'teetotalled', - 'teetotaller', - 'teetotallers', - 'teetotalling', - 'teetotally', - 'telangiectases', - 'telangiectasia', - 'telangiectasias', - 'telangiectasis', - 'telangiectatic', - 'telecasted', - 'telecaster', - 'telecasters', - 'telecasting', - 'telecommunication', - 'telecommunications', - 'telecommute', - 'telecommuted', - 'telecommuter', - 'telecommuters', - 'telecommutes', - 'telecommuting', - 'teleconference', - 'teleconferenced', - 'teleconferences', - 'teleconferencing', - 'teleconferencings', - 'telecourse', - 'telecourses', - 'telefacsimile', - 'telefacsimiles', - 'telegonies', - 'telegrammed', - 'telegramming', - 'telegraphed', - 'telegrapher', - 'telegraphers', - 'telegraphese', - 'telegrapheses', - 'telegraphic', - 'telegraphically', - 'telegraphies', - 'telegraphing', - 'telegraphist', - 'telegraphists', - 'telegraphs', - 'telegraphy', - 'telekineses', - 'telekinesis', - 'telekinetic', - 'telekinetically', - 'telemarketer', - 'telemarketers', - 'telemarketing', - 'telemarketings', - 'telemetered', - 'telemetering', - 'telemeters', - 'telemetric', - 'telemetrically', - 'telemetries', - 'telencephala', - 'telencephalic', - 'telencephalon', - 'telencephalons', - 'teleologic', - 'teleological', - 'teleologically', - 'teleologies', - 'teleologist', - 'teleologists', - 'teleonomic', - 'teleonomies', - 'teleostean', - 'telepathic', - 'telepathically', - 'telepathies', - 'telephoned', - 'telephoner', - 'telephoners', - 'telephones', - 'telephonic', - 'telephonically', - 'telephonies', - 'telephoning', - 'telephonist', - 'telephonists', - 'telephotographies', - 'telephotography', - 'telephotos', - 'teleportation', - 'teleportations', - 'teleported', - 'teleporting', - 'teleprinter', - 'teleprinters', - 'teleprocessing', - 'teleprocessings', - 'telescoped', - 'telescopes', - 'telescopic', - 'telescopically', - 'telescoping', - 'teletypewriter', - 'teletypewriters', - 'teleutospore', - 'teleutospores', - 'televangelism', - 'televangelisms', - 'televangelist', - 'televangelists', - 'televiewed', - 'televiewer', - 'televiewers', - 'televiewing', - 'televising', - 'television', - 'televisions', - 'televisual', - 'teliospore', - 'teliospores', - 'tellurides', - 'telluriums', - 'tellurometer', - 'tellurometers', - 'telocentric', - 'telocentrics', - 'telophases', - 'telphering', - 'temerarious', - 'temerariously', - 'temerariousness', - 'temerariousnesses', - 'temerities', - 'temperable', - 'temperament', - 'temperamental', - 'temperamentally', - 'temperaments', - 'temperance', - 'temperances', - 'temperately', - 'temperateness', - 'temperatenesses', - 'temperature', - 'temperatures', - 'tempesting', - 'tempestuous', - 'tempestuously', - 'tempestuousness', - 'tempestuousnesses', - 'temporalities', - 'temporality', - 'temporalize', - 'temporalized', - 'temporalizes', - 'temporalizing', - 'temporally', - 'temporaries', - 'temporarily', - 'temporariness', - 'temporarinesses', - 'temporised', - 'temporises', - 'temporising', - 'temporization', - 'temporizations', - 'temporized', - 'temporizer', - 'temporizers', - 'temporizes', - 'temporizing', - 'temporomandibular', - 'temptation', - 'temptations', - 'temptingly', - 'temptresses', - 'tenabilities', - 'tenability', - 'tenableness', - 'tenablenesses', - 'tenaciously', - 'tenaciousness', - 'tenaciousnesses', - 'tenacities', - 'tenaculums', - 'tenantable', - 'tenantless', - 'tenantries', - 'tendencies', - 'tendencious', - 'tendentious', - 'tendentiously', - 'tendentiousness', - 'tendentiousnesses', - 'tenderfeet', - 'tenderfoot', - 'tenderfoots', - 'tenderhearted', - 'tenderheartedly', - 'tenderheartedness', - 'tenderheartednesses', - 'tenderization', - 'tenderizations', - 'tenderized', - 'tenderizer', - 'tenderizers', - 'tenderizes', - 'tenderizing', - 'tenderloin', - 'tenderloins', - 'tenderness', - 'tendernesses', - 'tenderometer', - 'tenderometers', - 'tendinites', - 'tendinitides', - 'tendinitis', - 'tendinitises', - 'tendonites', - 'tendonitides', - 'tendonitis', - 'tendonitises', - 'tendresses', - 'tendrilled', - 'tendrilous', - 'tenebrific', - 'tenebrionid', - 'tenebrionids', - 'tenebrious', - 'tenebrisms', - 'tenebrists', - 'tenesmuses', - 'tenosynovitis', - 'tenosynovitises', - 'tenotomies', - 'tenpounder', - 'tenpounders', - 'tensenesses', - 'tensilities', - 'tensiometer', - 'tensiometers', - 'tensiometric', - 'tensiometries', - 'tensiometry', - 'tensioners', - 'tensioning', - 'tensionless', - 'tentacular', - 'tentatively', - 'tentativeness', - 'tentativenesses', - 'tentatives', - 'tenterhook', - 'tenterhooks', - 'tenuousness', - 'tenuousnesses', - 'tenurially', - 'tepidities', - 'tepidnesses', - 'teratocarcinoma', - 'teratocarcinomas', - 'teratocarcinomata', - 'teratogeneses', - 'teratogenesis', - 'teratogenic', - 'teratogenicities', - 'teratogenicity', - 'teratogens', - 'teratologic', - 'teratological', - 'teratologies', - 'teratologist', - 'teratologists', - 'teratology', - 'teratomata', - 'tercentenaries', - 'tercentenary', - 'tercentennial', - 'tercentennials', - 'terebinths', - 'terephthalate', - 'terephthalates', - 'tergiversate', - 'tergiversated', - 'tergiversates', - 'tergiversating', - 'tergiversation', - 'tergiversations', - 'tergiversator', - 'tergiversators', - 'termagants', - 'terminable', - 'terminableness', - 'terminablenesses', - 'terminably', - 'terminally', - 'terminated', - 'terminates', - 'terminating', - 'termination', - 'terminational', - 'terminations', - 'terminative', - 'terminatively', - 'terminator', - 'terminators', - 'terminological', - 'terminologically', - 'terminologies', - 'terminology', - 'terminuses', - 'termitaria', - 'termitaries', - 'termitarium', - 'terneplate', - 'terneplates', - 'terpeneless', - 'terpenoids', - 'terpineols', - 'terpolymer', - 'terpolymers', - 'terpsichorean', - 'terraformed', - 'terraforming', - 'terraforms', - 'terraqueous', - 'terrariums', - 'terreplein', - 'terrepleins', - 'terrestrial', - 'terrestrially', - 'terrestrials', - 'terribleness', - 'terriblenesses', - 'terricolous', - 'terrifically', - 'terrifying', - 'terrifyingly', - 'terrigenous', - 'territorial', - 'territorialism', - 'territorialisms', - 'territorialist', - 'territorialists', - 'territorialities', - 'territoriality', - 'territorialization', - 'territorializations', - 'territorialize', - 'territorialized', - 'territorializes', - 'territorializing', - 'territorially', - 'territorials', - 'territories', - 'terrorised', - 'terrorises', - 'terrorising', - 'terrorisms', - 'terroristic', - 'terrorists', - 'terrorization', - 'terrorizations', - 'terrorized', - 'terrorizes', - 'terrorizing', - 'terrorless', - 'tersenesses', - 'tertiaries', - 'tessellate', - 'tessellated', - 'tessellates', - 'tessellating', - 'tessellation', - 'tessellations', - 'tesseracts', - 'tessituras', - 'testabilities', - 'testability', - 'testaceous', - 'testamentary', - 'testaments', - 'testatrices', - 'testcrossed', - 'testcrosses', - 'testcrossing', - 'testicular', - 'testifiers', - 'testifying', - 'testimonial', - 'testimonials', - 'testimonies', - 'testinesses', - 'testosterone', - 'testosterones', - 'testudines', - 'tetanically', - 'tetanising', - 'tetanization', - 'tetanizations', - 'tetanizing', - 'tetartohedral', - 'tetchiness', - 'tetchinesses', - 'tetherball', - 'tetherballs', - 'tetracaine', - 'tetracaines', - 'tetrachloride', - 'tetrachlorides', - 'tetrachord', - 'tetrachords', - 'tetracycline', - 'tetracyclines', - 'tetradrachm', - 'tetradrachms', - 'tetradynamous', - 'tetrafluoride', - 'tetrafluorides', - 'tetragonal', - 'tetragonally', - 'tetragrammaton', - 'tetragrammatons', - 'tetrahedra', - 'tetrahedral', - 'tetrahedrally', - 'tetrahedrite', - 'tetrahedrites', - 'tetrahedron', - 'tetrahedrons', - 'tetrahydrocannabinol', - 'tetrahydrocannabinols', - 'tetrahydrofuran', - 'tetrahydrofurans', - 'tetrahymena', - 'tetrahymenas', - 'tetralogies', - 'tetrameric', - 'tetramerous', - 'tetrameter', - 'tetrameters', - 'tetramethyllead', - 'tetramethylleads', - 'tetraploid', - 'tetraploidies', - 'tetraploids', - 'tetraploidy', - 'tetrapyrrole', - 'tetrapyrroles', - 'tetrarchic', - 'tetrarchies', - 'tetraspore', - 'tetraspores', - 'tetrasporic', - 'tetravalent', - 'tetrazolium', - 'tetrazoliums', - 'tetrazzini', - 'tetrodotoxin', - 'tetrodotoxins', - 'tetroxides', - 'teutonized', - 'teutonizes', - 'teutonizing', - 'textbookish', - 'textuaries', - 'texturally', - 'textureless', - 'texturized', - 'texturizes', - 'texturizing', - 'thalassaemia', - 'thalassaemias', - 'thalassemia', - 'thalassemias', - 'thalassemic', - 'thalassemics', - 'thalassocracies', - 'thalassocracy', - 'thalassocrat', - 'thalassocrats', - 'thalidomide', - 'thalidomides', - 'thallophyte', - 'thallophytes', - 'thallophytic', - 'thanatological', - 'thanatologies', - 'thanatologist', - 'thanatologists', - 'thanatology', - 'thanatoses', - 'thaneships', - 'thankfuller', - 'thankfullest', - 'thankfully', - 'thankfulness', - 'thankfulnesses', - 'thanklessly', - 'thanklessness', - 'thanklessnesses', - 'thanksgiving', - 'thanksgivings', - 'thankworthy', - 'thatchiest', - 'thaumaturge', - 'thaumaturges', - 'thaumaturgic', - 'thaumaturgies', - 'thaumaturgist', - 'thaumaturgists', - 'thaumaturgy', - 'thearchies', - 'theatergoer', - 'theatergoers', - 'theatergoing', - 'theatergoings', - 'theatrical', - 'theatricalism', - 'theatricalisms', - 'theatricalities', - 'theatricality', - 'theatricalization', - 'theatricalizations', - 'theatricalize', - 'theatricalized', - 'theatricalizes', - 'theatricalizing', - 'theatrically', - 'theatricals', - 'thecodonts', - 'theirselves', - 'theistical', - 'theistically', - 'thelitises', - 'thematically', - 'themselves', - 'thenceforth', - 'thenceforward', - 'thenceforwards', - 'theobromine', - 'theobromines', - 'theocentric', - 'theocentricities', - 'theocentricity', - 'theocentrism', - 'theocentrisms', - 'theocracies', - 'theocratic', - 'theocratical', - 'theocratically', - 'theodicies', - 'theodolite', - 'theodolites', - 'theogonies', - 'theologian', - 'theologians', - 'theological', - 'theologically', - 'theologies', - 'theologise', - 'theologised', - 'theologises', - 'theologising', - 'theologize', - 'theologized', - 'theologizer', - 'theologizers', - 'theologizes', - 'theologizing', - 'theologues', - 'theonomies', - 'theonomous', - 'theophanic', - 'theophanies', - 'theophylline', - 'theophyllines', - 'theorematic', - 'theoretical', - 'theoretically', - 'theoretician', - 'theoreticians', - 'theorising', - 'theorization', - 'theorizations', - 'theorizers', - 'theorizing', - 'theosophical', - 'theosophically', - 'theosophies', - 'theosophist', - 'theosophists', - 'therapeuses', - 'therapeusis', - 'therapeutic', - 'therapeutically', - 'therapeutics', - 'therapists', - 'therapsids', - 'thereabout', - 'thereabouts', - 'thereafter', - 'thereinafter', - 'theretofore', - 'thereunder', - 'therewithal', - 'theriomorphic', - 'thermalization', - 'thermalizations', - 'thermalize', - 'thermalized', - 'thermalizes', - 'thermalizing', - 'thermically', - 'thermionic', - 'thermionics', - 'thermistor', - 'thermistors', - 'thermochemical', - 'thermochemist', - 'thermochemistries', - 'thermochemistry', - 'thermochemists', - 'thermocline', - 'thermoclines', - 'thermocouple', - 'thermocouples', - 'thermoduric', - 'thermodynamic', - 'thermodynamical', - 'thermodynamically', - 'thermodynamicist', - 'thermodynamicists', - 'thermodynamics', - 'thermoelectric', - 'thermoelectricities', - 'thermoelectricity', - 'thermoelement', - 'thermoelements', - 'thermoform', - 'thermoformable', - 'thermoformed', - 'thermoforming', - 'thermoforms', - 'thermogram', - 'thermograms', - 'thermograph', - 'thermographic', - 'thermographically', - 'thermographies', - 'thermographs', - 'thermography', - 'thermohaline', - 'thermojunction', - 'thermojunctions', - 'thermolabile', - 'thermolabilities', - 'thermolability', - 'thermoluminescence', - 'thermoluminescences', - 'thermoluminescent', - 'thermomagnetic', - 'thermometer', - 'thermometers', - 'thermometric', - 'thermometrically', - 'thermometries', - 'thermometry', - 'thermonuclear', - 'thermoperiodicities', - 'thermoperiodicity', - 'thermoperiodism', - 'thermoperiodisms', - 'thermophile', - 'thermophiles', - 'thermophilic', - 'thermophilous', - 'thermopile', - 'thermopiles', - 'thermoplastic', - 'thermoplasticities', - 'thermoplasticity', - 'thermoplastics', - 'thermoreceptor', - 'thermoreceptors', - 'thermoregulate', - 'thermoregulated', - 'thermoregulates', - 'thermoregulating', - 'thermoregulation', - 'thermoregulations', - 'thermoregulator', - 'thermoregulators', - 'thermoregulatory', - 'thermoremanence', - 'thermoremanences', - 'thermoremanent', - 'thermoscope', - 'thermoscopes', - 'thermosets', - 'thermosetting', - 'thermosphere', - 'thermospheres', - 'thermospheric', - 'thermostabilities', - 'thermostability', - 'thermostable', - 'thermostat', - 'thermostated', - 'thermostatic', - 'thermostatically', - 'thermostating', - 'thermostats', - 'thermostatted', - 'thermostatting', - 'thermotactic', - 'thermotaxes', - 'thermotaxis', - 'thermotropic', - 'thermotropism', - 'thermotropisms', - 'thesauruses', - 'thetically', - 'theurgical', - 'theurgists', - 'thiabendazole', - 'thiabendazoles', - 'thiaminase', - 'thiaminases', - 'thickeners', - 'thickening', - 'thickenings', - 'thickheaded', - 'thickheads', - 'thicknesses', - 'thieveries', - 'thievishly', - 'thievishness', - 'thievishnesses', - 'thighbones', - 'thigmotaxes', - 'thigmotaxis', - 'thigmotropism', - 'thigmotropisms', - 'thimbleberries', - 'thimbleberry', - 'thimbleful', - 'thimblefuls', - 'thimblerig', - 'thimblerigged', - 'thimblerigger', - 'thimbleriggers', - 'thimblerigging', - 'thimblerigs', - 'thimbleweed', - 'thimbleweeds', - 'thimerosal', - 'thimerosals', - 'thingamabob', - 'thingamabobs', - 'thingamajig', - 'thingamajigs', - 'thingnesses', - 'thingumajig', - 'thingumajigs', - 'thingummies', - 'thinkableness', - 'thinkablenesses', - 'thinkingly', - 'thinkingness', - 'thinkingnesses', - 'thinnesses', - 'thiocyanate', - 'thiocyanates', - 'thiopental', - 'thiopentals', - 'thiophenes', - 'thioridazine', - 'thioridazines', - 'thiosulfate', - 'thiosulfates', - 'thiouracil', - 'thiouracils', - 'thirstiest', - 'thirstiness', - 'thirstinesses', - 'thirteenth', - 'thirteenths', - 'thirtieths', - 'thistledown', - 'thistledowns', - 'thistliest', - 'thitherward', - 'thitherwards', - 'thixotropic', - 'thixotropies', - 'thixotropy', - 'tholeiites', - 'tholeiitic', - 'thoracically', - 'thoracotomies', - 'thoracotomy', - 'thorianite', - 'thorianites', - 'thornbacks', - 'thornbushes', - 'thorniness', - 'thorninesses', - 'thoroughbass', - 'thoroughbasses', - 'thoroughbrace', - 'thoroughbraces', - 'thoroughbred', - 'thoroughbreds', - 'thorougher', - 'thoroughest', - 'thoroughfare', - 'thoroughfares', - 'thoroughgoing', - 'thoroughly', - 'thoroughness', - 'thoroughnesses', - 'thoroughpin', - 'thoroughpins', - 'thoroughwort', - 'thoroughworts', - 'thoughtful', - 'thoughtfully', - 'thoughtfulness', - 'thoughtfulnesses', - 'thoughtless', - 'thoughtlessly', - 'thoughtlessness', - 'thoughtlessnesses', - 'thoughtway', - 'thoughtways', - 'thousandfold', - 'thousandth', - 'thousandths', - 'thralldoms', - 'thrashings', - 'thrasonical', - 'thrasonically', - 'threadbare', - 'threadbareness', - 'threadbarenesses', - 'threadfins', - 'threadiest', - 'threadiness', - 'threadinesses', - 'threadless', - 'threadlike', - 'threadworm', - 'threadworms', - 'threatened', - 'threatener', - 'threateners', - 'threatening', - 'threateningly', - 'threepence', - 'threepences', - 'threepenny', - 'threescore', - 'threesomes', - 'threnodies', - 'threnodist', - 'threnodists', - 'threonines', - 'thresholds', - 'thriftiest', - 'thriftiness', - 'thriftinesses', - 'thriftless', - 'thriftlessly', - 'thriftlessness', - 'thriftlessnesses', - 'thrillingly', - 'thrivingly', - 'throatiest', - 'throatiness', - 'throatinesses', - 'throatlatch', - 'throatlatches', - 'thrombocyte', - 'thrombocytes', - 'thrombocytic', - 'thrombocytopenia', - 'thrombocytopenias', - 'thrombocytopenic', - 'thromboembolic', - 'thromboembolism', - 'thromboembolisms', - 'thrombokinase', - 'thrombokinases', - 'thrombolytic', - 'thrombophlebitides', - 'thrombophlebitis', - 'thromboplastic', - 'thromboplastin', - 'thromboplastins', - 'thromboses', - 'thrombosis', - 'thrombotic', - 'thromboxane', - 'thromboxanes', - 'throttleable', - 'throttlehold', - 'throttleholds', - 'throttlers', - 'throttling', - 'throughither', - 'throughother', - 'throughout', - 'throughput', - 'throughputs', - 'throughway', - 'throughways', - 'throwaways', - 'throwbacks', - 'throwsters', - 'thrummiest', - 'thuggeries', - 'thumbholes', - 'thumbnails', - 'thumbprint', - 'thumbprints', - 'thumbscrew', - 'thumbscrews', - 'thumbtacked', - 'thumbtacking', - 'thumbtacks', - 'thumbwheel', - 'thumbwheels', - 'thunderbird', - 'thunderbirds', - 'thunderbolt', - 'thunderbolts', - 'thunderclap', - 'thunderclaps', - 'thundercloud', - 'thunderclouds', - 'thunderers', - 'thunderhead', - 'thunderheads', - 'thundering', - 'thunderingly', - 'thunderous', - 'thunderously', - 'thundershower', - 'thundershowers', - 'thunderstone', - 'thunderstones', - 'thunderstorm', - 'thunderstorms', - 'thunderstricken', - 'thunderstrike', - 'thunderstrikes', - 'thunderstriking', - 'thunderstroke', - 'thunderstrokes', - 'thunderstruck', - 'thwartwise', - 'thylacines', - 'thylakoids', - 'thymectomies', - 'thymectomize', - 'thymectomized', - 'thymectomizes', - 'thymectomizing', - 'thymectomy', - 'thymidines', - 'thymocytes', - 'thyratrons', - 'thyristors', - 'thyrocalcitonin', - 'thyrocalcitonins', - 'thyroglobulin', - 'thyroglobulins', - 'thyroidectomies', - 'thyroidectomized', - 'thyroidectomy', - 'thyroidites', - 'thyroiditides', - 'thyroiditis', - 'thyroiditises', - 'thyrotoxicoses', - 'thyrotoxicosis', - 'thyrotrophic', - 'thyrotrophin', - 'thyrotrophins', - 'thyrotropic', - 'thyrotropin', - 'thyrotropins', - 'thyroxines', - 'thysanuran', - 'thysanurans', - 'tibiofibula', - 'tibiofibulae', - 'tibiofibulas', - 'ticketless', - 'ticklishly', - 'ticklishness', - 'ticklishnesses', - 'ticktacked', - 'ticktacking', - 'ticktacktoe', - 'ticktacktoes', - 'ticktocked', - 'ticktocking', - 'tictacking', - 'tictocking', - 'tiddledywinks', - 'tiddlywinks', - 'tidewaters', - 'tidinesses', - 'tiebreaker', - 'tiebreakers', - 'tiemannite', - 'tiemannites', - 'tigerishly', - 'tigerishness', - 'tigerishnesses', - 'tighteners', - 'tightening', - 'tightfisted', - 'tightfistedness', - 'tightfistednesses', - 'tightnesses', - 'tightropes', - 'tightwires', - 'tilefishes', - 'tillandsia', - 'tillandsias', - 'tiltmeters', - 'timberdoodle', - 'timberdoodles', - 'timberhead', - 'timberheads', - 'timberings', - 'timberland', - 'timberlands', - 'timberline', - 'timberlines', - 'timberwork', - 'timberworks', - 'timbrelled', - 'timekeeper', - 'timekeepers', - 'timekeeping', - 'timekeepings', - 'timelessly', - 'timelessness', - 'timelessnesses', - 'timeliness', - 'timelinesses', - 'timepieces', - 'timepleaser', - 'timepleasers', - 'timesavers', - 'timesaving', - 'timescales', - 'timeserver', - 'timeservers', - 'timeserving', - 'timeservings', - 'timetables', - 'timeworker', - 'timeworkers', - 'timidities', - 'timidnesses', - 'timocracies', - 'timocratic', - 'timocratical', - 'timorously', - 'timorousness', - 'timorousnesses', - 'timpanists', - 'tinctorial', - 'tinctorially', - 'tincturing', - 'tinderboxes', - 'tinglingly', - 'tininesses', - 'tinninesses', - 'tinnituses', - 'tinselling', - 'tinsmithing', - 'tinsmithings', - 'tintinnabulary', - 'tintinnabulation', - 'tintinnabulations', - 'tippytoeing', - 'tipsinesses', - 'tirednesses', - 'tirelessly', - 'tirelessness', - 'tirelessnesses', - 'tiresomely', - 'tiresomeness', - 'tiresomenesses', - 'titanesses', - 'titanically', - 'titaniferous', - 'titillated', - 'titillates', - 'titillating', - 'titillatingly', - 'titillation', - 'titillations', - 'titillative', - 'titivating', - 'titivation', - 'titivations', - 'titleholder', - 'titleholders', - 'titratable', - 'titrations', - 'titrimetric', - 'tittivated', - 'tittivates', - 'tittivating', - 'tittupping', - 'titularies', - 'toadeaters', - 'toadfishes', - 'toadflaxes', - 'toadstones', - 'toadstools', - 'toastmaster', - 'toastmasters', - 'toastmistress', - 'toastmistresses', - 'tobacconist', - 'tobacconists', - 'tobogganed', - 'tobogganer', - 'tobogganers', - 'tobogganing', - 'tobogganings', - 'tobogganist', - 'tobogganists', - 'tocologies', - 'tocopherol', - 'tocopherols', - 'toddlerhood', - 'toddlerhoods', - 'toenailing', - 'togetherness', - 'togethernesses', - 'toiletries', - 'toilsomely', - 'toilsomeness', - 'toilsomenesses', - 'tokologies', - 'tolbutamide', - 'tolbutamides', - 'tolerabilities', - 'tolerability', - 'tolerances', - 'tolerantly', - 'tolerating', - 'toleration', - 'tolerations', - 'tolerative', - 'tolerators', - 'tollbooths', - 'tollhouses', - 'toluidines', - 'tomahawked', - 'tomahawking', - 'tomatillos', - 'tomboyishness', - 'tomboyishnesses', - 'tombstones', - 'tomcatting', - 'tomfooleries', - 'tomfoolery', - 'tomographic', - 'tomographies', - 'tomography', - 'tonalities', - 'tonelessly', - 'tonelessness', - 'tonelessnesses', - 'tonetically', - 'tongueless', - 'tonguelike', - 'tonicities', - 'tonometers', - 'tonometries', - 'tonoplasts', - 'tonsillectomies', - 'tonsillectomy', - 'tonsillites', - 'tonsillitides', - 'tonsillitis', - 'tonsillitises', - 'toolholder', - 'toolholders', - 'toolhouses', - 'toolmakers', - 'toolmaking', - 'toolmakings', - 'toothaches', - 'toothbrush', - 'toothbrushes', - 'toothbrushing', - 'toothbrushings', - 'toothpaste', - 'toothpastes', - 'toothpicks', - 'toothsomely', - 'toothsomeness', - 'toothsomenesses', - 'toothworts', - 'topcrosses', - 'topdressing', - 'topdressings', - 'topgallant', - 'topgallants', - 'topicalities', - 'topicality', - 'toplessness', - 'toplessnesses', - 'toploftical', - 'toploftier', - 'toploftiest', - 'toploftily', - 'toploftiness', - 'toploftinesses', - 'topminnows', - 'topnotcher', - 'topnotchers', - 'topocentric', - 'topographer', - 'topographers', - 'topographic', - 'topographical', - 'topographically', - 'topographies', - 'topography', - 'topological', - 'topologically', - 'topologies', - 'topologist', - 'topologists', - 'toponymical', - 'toponymies', - 'toponymist', - 'toponymists', - 'topsoiling', - 'topstitched', - 'topstitches', - 'topstitching', - 'topworking', - 'torchbearer', - 'torchbearers', - 'torchlight', - 'torchlights', - 'torchwoods', - 'tormenters', - 'tormentils', - 'tormenting', - 'tormentors', - 'toroidally', - 'torosities', - 'torpedoing', - 'torpidities', - 'torrefying', - 'torrential', - 'torrentially', - 'torridities', - 'torridness', - 'torridnesses', - 'torrifying', - 'torsionally', - 'tortellini', - 'tortellinis', - 'torticollis', - 'torticollises', - 'tortiously', - 'tortoiseshell', - 'tortoiseshells', - 'tortricids', - 'tortuosities', - 'tortuosity', - 'tortuously', - 'tortuousness', - 'tortuousnesses', - 'torturously', - 'totalisator', - 'totalisators', - 'totalising', - 'totalistic', - 'totalitarian', - 'totalitarianism', - 'totalitarianisms', - 'totalitarianize', - 'totalitarianized', - 'totalitarianizes', - 'totalitarianizing', - 'totalitarians', - 'totalities', - 'totalizator', - 'totalizators', - 'totalizers', - 'totalizing', - 'totemistic', - 'totipotencies', - 'totipotency', - 'totipotent', - 'totteringly', - 'touchbacks', - 'touchdowns', - 'touchholes', - 'touchiness', - 'touchinesses', - 'touchingly', - 'touchlines', - 'touchmarks', - 'touchstone', - 'touchstones', - 'touchwoods', - 'toughening', - 'toughnesses', - 'tourbillion', - 'tourbillions', - 'tourbillon', - 'tourbillons', - 'touristically', - 'tourmaline', - 'tourmalines', - 'tournament', - 'tournaments', - 'tourneying', - 'tourniquet', - 'tourniquets', - 'tovariches', - 'tovarishes', - 'towardliness', - 'towardlinesses', - 'towelettes', - 'towellings', - 'toweringly', - 'townhouses', - 'townscapes', - 'townspeople', - 'townswoman', - 'townswomen', - 'toxaphenes', - 'toxicities', - 'toxicologic', - 'toxicological', - 'toxicologically', - 'toxicologies', - 'toxicologist', - 'toxicologists', - 'toxicology', - 'toxigenicities', - 'toxigenicity', - 'toxophilies', - 'toxophilite', - 'toxophilites', - 'toxoplasma', - 'toxoplasmas', - 'toxoplasmic', - 'toxoplasmoses', - 'toxoplasmosis', - 'trabeation', - 'trabeations', - 'trabeculae', - 'trabecular', - 'trabeculas', - 'trabeculate', - 'traceabilities', - 'traceability', - 'tracheated', - 'tracheites', - 'tracheitides', - 'tracheitis', - 'tracheitises', - 'tracheobronchial', - 'tracheolar', - 'tracheoles', - 'tracheophyte', - 'tracheophytes', - 'tracheostomies', - 'tracheostomy', - 'tracheotomies', - 'tracheotomy', - 'trackballs', - 'tracklayer', - 'tracklayers', - 'tracklaying', - 'tracklayings', - 'tracksides', - 'tracksuits', - 'trackwalker', - 'trackwalkers', - 'tractabilities', - 'tractability', - 'tractableness', - 'tractablenesses', - 'tractional', - 'tradecraft', - 'tradecrafts', - 'trademarked', - 'trademarking', - 'trademarks', - 'tradescantia', - 'tradescantias', - 'tradespeople', - 'traditional', - 'traditionalism', - 'traditionalisms', - 'traditionalist', - 'traditionalistic', - 'traditionalists', - 'traditionalize', - 'traditionalized', - 'traditionalizes', - 'traditionalizing', - 'traditionally', - 'traditionary', - 'traditionless', - 'traditions', - 'traditores', - 'traducement', - 'traducements', - 'trafficabilities', - 'trafficability', - 'trafficable', - 'trafficked', - 'trafficker', - 'traffickers', - 'trafficking', - 'tragacanth', - 'tragacanths', - 'tragedians', - 'tragedienne', - 'tragediennes', - 'tragically', - 'tragicomedies', - 'tragicomedy', - 'tragicomic', - 'tragicomical', - 'trailblazer', - 'trailblazers', - 'trailblazing', - 'trailbreaker', - 'trailbreakers', - 'trailerable', - 'trailering', - 'trailerings', - 'trailerist', - 'trailerists', - 'trailerite', - 'trailerites', - 'trailheads', - 'trainabilities', - 'trainability', - 'trainbands', - 'trainbearer', - 'trainbearers', - 'traineeship', - 'traineeships', - 'trainloads', - 'traitoress', - 'traitoresses', - 'traitorous', - 'traitorously', - 'traitresses', - 'trajecting', - 'trajection', - 'trajections', - 'trajectories', - 'trajectory', - 'tramelling', - 'trammeling', - 'trammelled', - 'trammelling', - 'tramontane', - 'tramontanes', - 'trampoline', - 'trampoliner', - 'trampoliners', - 'trampolines', - 'trampolining', - 'trampolinings', - 'trampolinist', - 'trampolinists', - 'trancelike', - 'tranquiler', - 'tranquilest', - 'tranquilities', - 'tranquility', - 'tranquilize', - 'tranquilized', - 'tranquilizer', - 'tranquilizers', - 'tranquilizes', - 'tranquilizing', - 'tranquiller', - 'tranquillest', - 'tranquillities', - 'tranquillity', - 'tranquillize', - 'tranquillized', - 'tranquillizer', - 'tranquillizers', - 'tranquillizes', - 'tranquillizing', - 'tranquilly', - 'tranquilness', - 'tranquilnesses', - 'transacted', - 'transacting', - 'transactinide', - 'transaction', - 'transactional', - 'transactions', - 'transactor', - 'transactors', - 'transalpine', - 'transaminase', - 'transaminases', - 'transamination', - 'transaminations', - 'transatlantic', - 'transaxles', - 'transceiver', - 'transceivers', - 'transcended', - 'transcendence', - 'transcendences', - 'transcendencies', - 'transcendency', - 'transcendent', - 'transcendental', - 'transcendentalism', - 'transcendentalisms', - 'transcendentalist', - 'transcendentalists', - 'transcendentally', - 'transcendently', - 'transcending', - 'transcends', - 'transcontinental', - 'transcribe', - 'transcribed', - 'transcriber', - 'transcribers', - 'transcribes', - 'transcribing', - 'transcript', - 'transcriptase', - 'transcriptases', - 'transcription', - 'transcriptional', - 'transcriptionally', - 'transcriptionist', - 'transcriptionists', - 'transcriptions', - 'transcripts', - 'transcultural', - 'transcutaneous', - 'transdermal', - 'transdisciplinary', - 'transduced', - 'transducer', - 'transducers', - 'transduces', - 'transducing', - 'transductant', - 'transductants', - 'transduction', - 'transductional', - 'transductions', - 'transected', - 'transecting', - 'transection', - 'transections', - 'transeptal', - 'transfected', - 'transfecting', - 'transfection', - 'transfections', - 'transfects', - 'transferabilities', - 'transferability', - 'transferable', - 'transferal', - 'transferals', - 'transferase', - 'transferases', - 'transferee', - 'transferees', - 'transference', - 'transferences', - 'transferential', - 'transferor', - 'transferors', - 'transferrable', - 'transferred', - 'transferrer', - 'transferrers', - 'transferrin', - 'transferring', - 'transferrins', - 'transfiguration', - 'transfigurations', - 'transfigure', - 'transfigured', - 'transfigures', - 'transfiguring', - 'transfinite', - 'transfixed', - 'transfixes', - 'transfixing', - 'transfixion', - 'transfixions', - 'transformable', - 'transformation', - 'transformational', - 'transformationalist', - 'transformationalists', - 'transformationally', - 'transformations', - 'transformative', - 'transformed', - 'transformer', - 'transformers', - 'transforming', - 'transforms', - 'transfusable', - 'transfused', - 'transfuses', - 'transfusible', - 'transfusing', - 'transfusion', - 'transfusional', - 'transfusions', - 'transgenerational', - 'transgenic', - 'transgress', - 'transgressed', - 'transgresses', - 'transgressing', - 'transgression', - 'transgressions', - 'transgressive', - 'transgressor', - 'transgressors', - 'transhipped', - 'transhipping', - 'transhistorical', - 'transhumance', - 'transhumances', - 'transhumant', - 'transhumants', - 'transience', - 'transiences', - 'transiencies', - 'transiency', - 'transiently', - 'transients', - 'transilluminate', - 'transilluminated', - 'transilluminates', - 'transilluminating', - 'transillumination', - 'transilluminations', - 'transilluminator', - 'transilluminators', - 'transistor', - 'transistorise', - 'transistorised', - 'transistorises', - 'transistorising', - 'transistorization', - 'transistorizations', - 'transistorize', - 'transistorized', - 'transistorizes', - 'transistorizing', - 'transistors', - 'transiting', - 'transition', - 'transitional', - 'transitionally', - 'transitions', - 'transitive', - 'transitively', - 'transitiveness', - 'transitivenesses', - 'transitivities', - 'transitivity', - 'transitorily', - 'transitoriness', - 'transitorinesses', - 'transitory', - 'translatabilities', - 'translatability', - 'translatable', - 'translated', - 'translates', - 'translating', - 'translation', - 'translational', - 'translations', - 'translative', - 'translator', - 'translators', - 'translatory', - 'transliterate', - 'transliterated', - 'transliterates', - 'transliterating', - 'transliteration', - 'transliterations', - 'translocate', - 'translocated', - 'translocates', - 'translocating', - 'translocation', - 'translocations', - 'translucence', - 'translucences', - 'translucencies', - 'translucency', - 'translucent', - 'translucently', - 'transmarine', - 'transmembrane', - 'transmigrate', - 'transmigrated', - 'transmigrates', - 'transmigrating', - 'transmigration', - 'transmigrations', - 'transmigrator', - 'transmigrators', - 'transmigratory', - 'transmissibilities', - 'transmissibility', - 'transmissible', - 'transmission', - 'transmissions', - 'transmissive', - 'transmissivities', - 'transmissivity', - 'transmissometer', - 'transmissometers', - 'transmittable', - 'transmittal', - 'transmittals', - 'transmittance', - 'transmittances', - 'transmitted', - 'transmitter', - 'transmitters', - 'transmitting', - 'transmogrification', - 'transmogrifications', - 'transmogrified', - 'transmogrifies', - 'transmogrify', - 'transmogrifying', - 'transmontane', - 'transmountain', - 'transmutable', - 'transmutation', - 'transmutations', - 'transmutative', - 'transmuted', - 'transmutes', - 'transmuting', - 'transnational', - 'transnationalism', - 'transnationalisms', - 'transnatural', - 'transoceanic', - 'transpacific', - 'transparence', - 'transparences', - 'transparencies', - 'transparency', - 'transparent', - 'transparentize', - 'transparentized', - 'transparentizes', - 'transparentizing', - 'transparently', - 'transparentness', - 'transparentnesses', - 'transpersonal', - 'transpicuous', - 'transpierce', - 'transpierced', - 'transpierces', - 'transpiercing', - 'transpiration', - 'transpirational', - 'transpirations', - 'transpired', - 'transpires', - 'transpiring', - 'transplacental', - 'transplacentally', - 'transplant', - 'transplantabilities', - 'transplantability', - 'transplantable', - 'transplantation', - 'transplantations', - 'transplanted', - 'transplanter', - 'transplanters', - 'transplanting', - 'transplants', - 'transpolar', - 'transponder', - 'transponders', - 'transpontine', - 'transportabilities', - 'transportability', - 'transportable', - 'transportation', - 'transportational', - 'transportations', - 'transported', - 'transportee', - 'transportees', - 'transporter', - 'transporters', - 'transporting', - 'transports', - 'transposable', - 'transposed', - 'transposes', - 'transposing', - 'transposition', - 'transpositional', - 'transpositions', - 'transposon', - 'transposons', - 'transsexual', - 'transsexualism', - 'transsexualisms', - 'transsexualities', - 'transsexuality', - 'transsexuals', - 'transshape', - 'transshaped', - 'transshapes', - 'transshaping', - 'transshipment', - 'transshipments', - 'transshipped', - 'transshipping', - 'transships', - 'transsonic', - 'transthoracic', - 'transthoracically', - 'transubstantial', - 'transubstantiate', - 'transubstantiated', - 'transubstantiates', - 'transubstantiating', - 'transubstantiation', - 'transubstantiations', - 'transudate', - 'transudates', - 'transudation', - 'transudations', - 'transuding', - 'transuranic', - 'transuranics', - 'transuranium', - 'transvaluate', - 'transvaluated', - 'transvaluates', - 'transvaluating', - 'transvaluation', - 'transvaluations', - 'transvalue', - 'transvalued', - 'transvalues', - 'transvaluing', - 'transversal', - 'transversals', - 'transverse', - 'transversely', - 'transverses', - 'transvestism', - 'transvestisms', - 'transvestite', - 'transvestites', - 'trapanning', - 'trapezists', - 'trapeziuses', - 'trapezohedra', - 'trapezohedron', - 'trapezohedrons', - 'trapezoidal', - 'trapezoids', - 'trapnested', - 'trapnesting', - 'trapshooter', - 'trapshooters', - 'trapshooting', - 'trapshootings', - 'trashiness', - 'trashinesses', - 'trattorias', - 'trauchling', - 'traumatically', - 'traumatise', - 'traumatised', - 'traumatises', - 'traumatising', - 'traumatism', - 'traumatisms', - 'traumatization', - 'traumatizations', - 'traumatize', - 'traumatized', - 'traumatizes', - 'traumatizing', - 'travailing', - 'travellers', - 'travelling', - 'travelogue', - 'travelogues', - 'traversable', - 'traversals', - 'traversers', - 'traversing', - 'travertine', - 'travertines', - 'travestied', - 'travesties', - 'travestying', - 'trawlerman', - 'trawlermen', - 'treacheries', - 'treacherous', - 'treacherously', - 'treacherousness', - 'treacherousnesses', - 'treadmills', - 'treasonable', - 'treasonably', - 'treasonous', - 'treasurable', - 'treasurers', - 'treasurership', - 'treasurerships', - 'treasuries', - 'treasuring', - 'treatabilities', - 'treatability', - 'treatments', - 'trebuchets', - 'trebuckets', - 'tredecillion', - 'tredecillions', - 'treehopper', - 'treehoppers', - 'treenwares', - 'trehaloses', - 'treillages', - 'trellising', - 'trelliswork', - 'trellisworks', - 'trematodes', - 'trembliest', - 'tremendous', - 'tremendously', - 'tremendousness', - 'tremendousnesses', - 'tremolites', - 'tremolitic', - 'tremulously', - 'tremulousness', - 'tremulousnesses', - 'trenchancies', - 'trenchancy', - 'trenchantly', - 'trencherman', - 'trenchermen', - 'trendiness', - 'trendinesses', - 'trendsetter', - 'trendsetters', - 'trendsetting', - 'trepanation', - 'trepanations', - 'trepanning', - 'trephination', - 'trephinations', - 'trephining', - 'trepidation', - 'trepidations', - 'treponemal', - 'treponemas', - 'treponemata', - 'treponematoses', - 'treponematosis', - 'treponemes', - 'trespassed', - 'trespasser', - 'trespassers', - 'trespasses', - 'trespassing', - 'trestlework', - 'trestleworks', - 'tretinoins', - 'triacetate', - 'triacetates', - 'triadically', - 'trialogues', - 'triamcinolone', - 'triamcinolones', - 'triangular', - 'triangularities', - 'triangularity', - 'triangularly', - 'triangulate', - 'triangulated', - 'triangulates', - 'triangulating', - 'triangulation', - 'triangulations', - 'triarchies', - 'triathlete', - 'triathletes', - 'triathlons', - 'triaxialities', - 'triaxiality', - 'tribalisms', - 'tribespeople', - 'triboelectric', - 'triboelectricities', - 'triboelectricity', - 'tribological', - 'tribologies', - 'tribologist', - 'tribologists', - 'triboluminescence', - 'triboluminescences', - 'triboluminescent', - 'tribrachic', - 'tribulated', - 'tribulates', - 'tribulating', - 'tribulation', - 'tribulations', - 'tribunates', - 'tribuneship', - 'tribuneships', - 'tributaries', - 'tricarboxylic', - 'triceratops', - 'triceratopses', - 'trichiases', - 'trichiasis', - 'trichinize', - 'trichinized', - 'trichinizes', - 'trichinizing', - 'trichinoses', - 'trichinosis', - 'trichinosises', - 'trichinous', - 'trichlorfon', - 'trichlorfons', - 'trichloroethylene', - 'trichloroethylenes', - 'trichlorphon', - 'trichlorphons', - 'trichocyst', - 'trichocysts', - 'trichogyne', - 'trichogynes', - 'trichologies', - 'trichologist', - 'trichologists', - 'trichology', - 'trichomonacidal', - 'trichomonacide', - 'trichomonacides', - 'trichomonad', - 'trichomonads', - 'trichomonal', - 'trichomoniases', - 'trichomoniasis', - 'trichopteran', - 'trichopterans', - 'trichothecene', - 'trichothecenes', - 'trichotomies', - 'trichotomous', - 'trichotomously', - 'trichotomy', - 'trichromat', - 'trichromatic', - 'trichromatism', - 'trichromatisms', - 'trichromats', - 'trickeries', - 'trickiness', - 'trickinesses', - 'trickishly', - 'trickishness', - 'trickishnesses', - 'trickliest', - 'tricksiest', - 'tricksiness', - 'tricksinesses', - 'tricksters', - 'triclinium', - 'tricolette', - 'tricolettes', - 'tricolored', - 'tricornered', - 'tricotines', - 'tricuspids', - 'tricyclics', - 'tridimensional', - 'tridimensionalities', - 'tridimensionality', - 'triennially', - 'triennials', - 'trienniums', - 'trierarchies', - 'trierarchs', - 'trierarchy', - 'trifluoperazine', - 'trifluoperazines', - 'trifluralin', - 'trifluralins', - 'trifoliate', - 'trifoliolate', - 'trifoliums', - 'trifurcate', - 'trifurcated', - 'trifurcates', - 'trifurcating', - 'trifurcation', - 'trifurcations', - 'trigeminal', - 'trigeminals', - 'triggerfish', - 'triggerfishes', - 'triggering', - 'triggerman', - 'triggermen', - 'triglyceride', - 'triglycerides', - 'triglyphic', - 'triglyphical', - 'trignesses', - 'trigonally', - 'trigonometric', - 'trigonometrical', - 'trigonometrically', - 'trigonometries', - 'trigonometry', - 'trigraphic', - 'trihalomethane', - 'trihalomethanes', - 'trihedrals', - 'trihedrons', - 'trihybrids', - 'trihydroxy', - 'triiodothyronine', - 'triiodothyronines', - 'trilateral', - 'trilingual', - 'trilingually', - 'triliteral', - 'triliteralism', - 'triliteralisms', - 'triliterals', - 'trillionth', - 'trillionths', - 'trilobites', - 'trimesters', - 'trimethoprim', - 'trimethoprims', - 'trimetrogon', - 'trimetrogons', - 'trimnesses', - 'trimonthly', - 'trimorphic', - 'trinitarian', - 'trinitrotoluene', - 'trinitrotoluenes', - 'trinketers', - 'trinketing', - 'trinketries', - 'trinocular', - 'trinomials', - 'trinucleotide', - 'trinucleotides', - 'tripartite', - 'triphenylmethane', - 'triphenylmethanes', - 'triphosphate', - 'triphosphates', - 'triphthong', - 'triphthongal', - 'triphthongs', - 'tripinnate', - 'tripinnately', - 'tripletail', - 'tripletails', - 'triplicate', - 'triplicated', - 'triplicates', - 'triplicating', - 'triplication', - 'triplications', - 'triplicities', - 'triplicity', - 'triploblastic', - 'triploidies', - 'trippingly', - 'triquetrous', - 'triradiate', - 'trisaccharide', - 'trisaccharides', - 'trisecting', - 'trisection', - 'trisections', - 'trisectors', - 'triskaidekaphobia', - 'triskaidekaphobias', - 'triskelion', - 'triskelions', - 'trisoctahedra', - 'trisoctahedron', - 'trisoctahedrons', - 'tristearin', - 'tristearins', - 'tristfully', - 'tristfulness', - 'tristfulnesses', - 'tristimulus', - 'trisubstituted', - 'trisulfide', - 'trisulfides', - 'trisyllabic', - 'trisyllable', - 'trisyllables', - 'tritenesses', - 'tritheisms', - 'tritheistic', - 'tritheistical', - 'tritheists', - 'triticales', - 'triturable', - 'triturated', - 'triturates', - 'triturating', - 'trituration', - 'triturations', - 'triturator', - 'triturators', - 'triumphalism', - 'triumphalisms', - 'triumphalist', - 'triumphalists', - 'triumphant', - 'triumphantly', - 'triumphing', - 'triumvirate', - 'triumvirates', - 'triunities', - 'trivialise', - 'trivialised', - 'trivialises', - 'trivialising', - 'trivialist', - 'trivialists', - 'trivialities', - 'triviality', - 'trivialization', - 'trivializations', - 'trivialize', - 'trivialized', - 'trivializes', - 'trivializing', - 'triweeklies', - 'trochanter', - 'trochanteral', - 'trochanteric', - 'trochanters', - 'trochlears', - 'trochoidal', - 'trochophore', - 'trochophores', - 'troglodyte', - 'troglodytes', - 'troglodytic', - 'trolleybus', - 'trolleybuses', - 'trolleybusses', - 'trolleying', - 'trombonist', - 'trombonists', - 'troopships', - 'trophallaxes', - 'trophallaxis', - 'trophically', - 'trophoblast', - 'trophoblastic', - 'trophoblasts', - 'trophozoite', - 'trophozoites', - 'tropicalize', - 'tropicalized', - 'tropicalizes', - 'tropicalizing', - 'tropically', - 'tropocollagen', - 'tropocollagens', - 'tropologic', - 'tropological', - 'tropologically', - 'tropomyosin', - 'tropomyosins', - 'tropopause', - 'tropopauses', - 'troposphere', - 'tropospheres', - 'tropospheric', - 'tropotaxes', - 'tropotaxis', - 'trothplight', - 'trothplighted', - 'trothplighting', - 'trothplights', - 'troubadour', - 'troubadours', - 'troublemaker', - 'troublemakers', - 'troublemaking', - 'troublemakings', - 'troubleshoot', - 'troubleshooter', - 'troubleshooters', - 'troubleshooting', - 'troubleshoots', - 'troubleshot', - 'troublesome', - 'troublesomely', - 'troublesomeness', - 'troublesomenesses', - 'troublously', - 'troublousness', - 'troublousnesses', - 'trousseaus', - 'trousseaux', - 'trowelling', - 'truantries', - 'trucklines', - 'truckloads', - 'truckmaster', - 'truckmasters', - 'truculence', - 'truculences', - 'truculencies', - 'truculency', - 'truculently', - 'truehearted', - 'trueheartedness', - 'trueheartednesses', - 'truenesses', - 'truepennies', - 'trumperies', - 'trumpeters', - 'trumpeting', - 'trumpetlike', - 'truncating', - 'truncation', - 'truncations', - 'truncheoned', - 'truncheoning', - 'truncheons', - 'trunkfishes', - 'trustabilities', - 'trustability', - 'trustbuster', - 'trustbusters', - 'trusteeing', - 'trusteeship', - 'trusteeships', - 'trustfully', - 'trustfulness', - 'trustfulnesses', - 'trustiness', - 'trustinesses', - 'trustingly', - 'trustingness', - 'trustingnesses', - 'trustworthily', - 'trustworthiness', - 'trustworthinesses', - 'trustworthy', - 'truthfully', - 'truthfulness', - 'truthfulnesses', - 'trypanosome', - 'trypanosomes', - 'trypanosomiases', - 'trypanosomiasis', - 'trypsinogen', - 'trypsinogens', - 'tryptamine', - 'tryptamines', - 'tryptophan', - 'tryptophane', - 'tryptophanes', - 'tryptophans', - 'tsutsugamushi', - 'tubercular', - 'tuberculars', - 'tuberculate', - 'tuberculated', - 'tuberculin', - 'tuberculins', - 'tuberculoid', - 'tuberculoses', - 'tuberculosis', - 'tuberculous', - 'tuberosities', - 'tuberosity', - 'tubificids', - 'tubocurarine', - 'tubocurarines', - 'tubulating', - 'tuffaceous', - 'tularemias', - 'tulipwoods', - 'tumblebugs', - 'tumbledown', - 'tumblerful', - 'tumblerfuls', - 'tumbleweed', - 'tumbleweeds', - 'tumefaction', - 'tumefactions', - 'tumescence', - 'tumescences', - 'tumidities', - 'tumorigeneses', - 'tumorigenesis', - 'tumorigenic', - 'tumorigenicities', - 'tumorigenicity', - 'tumultuary', - 'tumultuous', - 'tumultuously', - 'tumultuousness', - 'tumultuousnesses', - 'tunabilities', - 'tunability', - 'tunableness', - 'tunablenesses', - 'tunefulness', - 'tunefulnesses', - 'tunelessly', - 'tunesmiths', - 'tungstates', - 'tunnellike', - 'tunnelling', - 'turbellarian', - 'turbellarians', - 'turbidimeter', - 'turbidimeters', - 'turbidimetric', - 'turbidimetrically', - 'turbidimetries', - 'turbidimetry', - 'turbidites', - 'turbidities', - 'turbidness', - 'turbidnesses', - 'turbinated', - 'turbinates', - 'turbocharged', - 'turbocharger', - 'turbochargers', - 'turboelectric', - 'turbogenerator', - 'turbogenerators', - 'turbomachineries', - 'turbomachinery', - 'turboprops', - 'turboshaft', - 'turboshafts', - 'turbulence', - 'turbulences', - 'turbulencies', - 'turbulency', - 'turbulently', - 'turfskiing', - 'turfskiings', - 'turgencies', - 'turgescence', - 'turgescences', - 'turgescent', - 'turgidities', - 'turgidness', - 'turgidnesses', - 'turmoiling', - 'turnabouts', - 'turnaround', - 'turnarounds', - 'turnbuckle', - 'turnbuckles', - 'turnstiles', - 'turnstones', - 'turntables', - 'turnverein', - 'turnvereins', - 'turophiles', - 'turpentine', - 'turpentined', - 'turpentines', - 'turpentining', - 'turpitudes', - 'turquoises', - 'turtleback', - 'turtlebacks', - 'turtledove', - 'turtledoves', - 'turtlehead', - 'turtleheads', - 'turtleneck', - 'turtlenecked', - 'turtlenecks', - 'tutelaries', - 'tutoresses', - 'tutorships', - 'tutoyering', - 'twayblades', - 'tweediness', - 'tweedinesses', - 'twelvemonth', - 'twelvemonths', - 'twentieths', - 'twiddliest', - 'twinberries', - 'twinflower', - 'twinflowers', - 'twinklings', - 'twitchiest', - 'twittering', - 'tympanists', - 'tympanites', - 'tympaniteses', - 'tympanitic', - 'typecasting', - 'typefounder', - 'typefounders', - 'typefounding', - 'typefoundings', - 'typescript', - 'typescripts', - 'typesetter', - 'typesetters', - 'typesetting', - 'typesettings', - 'typestyles', - 'typewriter', - 'typewriters', - 'typewrites', - 'typewriting', - 'typewritings', - 'typewritten', - 'typhlosole', - 'typhlosoles', - 'typicalities', - 'typicality', - 'typicalness', - 'typicalnesses', - 'typification', - 'typifications', - 'typographed', - 'typographer', - 'typographers', - 'typographic', - 'typographical', - 'typographically', - 'typographies', - 'typographing', - 'typographs', - 'typography', - 'typological', - 'typologically', - 'typologies', - 'typologist', - 'typologists', - 'tyrannical', - 'tyrannically', - 'tyrannicalness', - 'tyrannicalnesses', - 'tyrannicide', - 'tyrannicides', - 'tyrannised', - 'tyrannises', - 'tyrannising', - 'tyrannized', - 'tyrannizer', - 'tyrannizers', - 'tyrannizes', - 'tyrannizing', - 'tyrannosaur', - 'tyrannosaurs', - 'tyrannosaurus', - 'tyrannosauruses', - 'tyrannously', - 'tyrocidine', - 'tyrocidines', - 'tyrocidins', - 'tyrosinase', - 'tyrosinases', - 'tyrothricin', - 'tyrothricins', - 'ubiquinone', - 'ubiquinones', - 'ubiquities', - 'ubiquitous', - 'ubiquitously', - 'ubiquitousness', - 'ubiquitousnesses', - 'udometries', - 'ufological', - 'ufologists', - 'uglification', - 'uglifications', - 'uglinesses', - 'uintahites', - 'ulcerating', - 'ulceration', - 'ulcerations', - 'ulcerative', - 'ulcerogenic', - 'ulteriorly', - 'ultimacies', - 'ultimately', - 'ultimateness', - 'ultimatenesses', - 'ultimating', - 'ultimatums', - 'ultimogeniture', - 'ultimogenitures', - 'ultrabasic', - 'ultrabasics', - 'ultracareful', - 'ultracasual', - 'ultracautious', - 'ultracentrifugal', - 'ultracentrifugally', - 'ultracentrifugation', - 'ultracentrifugations', - 'ultracentrifuge', - 'ultracentrifuged', - 'ultracentrifuges', - 'ultracentrifuging', - 'ultracivilized', - 'ultraclean', - 'ultracommercial', - 'ultracompact', - 'ultracompetent', - 'ultraconservatism', - 'ultraconservatisms', - 'ultraconservative', - 'ultraconservatives', - 'ultracontemporaries', - 'ultracontemporary', - 'ultraconvenient', - 'ultracritical', - 'ultrademocratic', - 'ultradense', - 'ultradistance', - 'ultradistances', - 'ultradistant', - 'ultraefficient', - 'ultraenergetic', - 'ultraexclusive', - 'ultrafamiliar', - 'ultrafastidious', - 'ultrafeminine', - 'ultrafiche', - 'ultrafiches', - 'ultrafiltrate', - 'ultrafiltrates', - 'ultrafiltration', - 'ultrafiltrations', - 'ultraglamorous', - 'ultrahazardous', - 'ultraheated', - 'ultraheating', - 'ultraheats', - 'ultraheavy', - 'ultrahuman', - 'ultraistic', - 'ultraleftism', - 'ultraleftisms', - 'ultraleftist', - 'ultraleftists', - 'ultraliberal', - 'ultraliberalism', - 'ultraliberalisms', - 'ultraliberals', - 'ultralight', - 'ultralights', - 'ultralightweight', - 'ultramafic', - 'ultramarathon', - 'ultramarathoner', - 'ultramarathoners', - 'ultramarathons', - 'ultramarine', - 'ultramarines', - 'ultramasculine', - 'ultramicro', - 'ultramicroscope', - 'ultramicroscopes', - 'ultramicroscopic', - 'ultramicroscopical', - 'ultramicroscopically', - 'ultramicrotome', - 'ultramicrotomes', - 'ultramicrotomies', - 'ultramicrotomy', - 'ultramilitant', - 'ultraminiature', - 'ultraminiaturized', - 'ultramodern', - 'ultramodernist', - 'ultramodernists', - 'ultramontane', - 'ultramontanes', - 'ultramontanism', - 'ultramontanisms', - 'ultranationalism', - 'ultranationalisms', - 'ultranationalist', - 'ultranationalistic', - 'ultranationalists', - 'ultraorthodox', - 'ultraparadoxical', - 'ultrapatriotic', - 'ultraphysical', - 'ultrapowerful', - 'ultrapractical', - 'ultraprecise', - 'ultraprecision', - 'ultraprecisions', - 'ultraprofessional', - 'ultraprogressive', - 'ultraprogressives', - 'ultraquiet', - 'ultraradical', - 'ultraradicals', - 'ultrarapid', - 'ultrararefied', - 'ultrarational', - 'ultrarealism', - 'ultrarealisms', - 'ultrarealist', - 'ultrarealistic', - 'ultrarealists', - 'ultrarefined', - 'ultrareliable', - 'ultrarespectable', - 'ultrarevolutionaries', - 'ultrarevolutionary', - 'ultraright', - 'ultrarightist', - 'ultrarightists', - 'ultraromantic', - 'ultraroyalist', - 'ultraroyalists', - 'ultrasecret', - 'ultrasegregationist', - 'ultrasegregationists', - 'ultrasensitive', - 'ultraserious', - 'ultrasharp', - 'ultrashort', - 'ultrasimple', - 'ultraslick', - 'ultrasmall', - 'ultrasmart', - 'ultrasmooth', - 'ultrasonic', - 'ultrasonically', - 'ultrasonics', - 'ultrasonographer', - 'ultrasonographers', - 'ultrasonographic', - 'ultrasonographies', - 'ultrasonography', - 'ultrasophisticated', - 'ultrasound', - 'ultrasounds', - 'ultrastructural', - 'ultrastructurally', - 'ultrastructure', - 'ultrastructures', - 'ultravacua', - 'ultravacuum', - 'ultravacuums', - 'ultraviolence', - 'ultraviolences', - 'ultraviolent', - 'ultraviolet', - 'ultraviolets', - 'ultravirile', - 'ultravirilities', - 'ultravirility', - 'ululations', - 'umbellifer', - 'umbelliferous', - 'umbellifers', - 'umbilicals', - 'umbilicate', - 'umbilicated', - 'umbilication', - 'umbilications', - 'umbilicuses', - 'umbrageous', - 'umbrageously', - 'umbrageousness', - 'umbrageousnesses', - 'umbrellaed', - 'umbrellaing', - 'unabashedly', - 'unabatedly', - 'unabridged', - 'unabsorbed', - 'unabsorbent', - 'unacademic', - 'unacademically', - 'unaccented', - 'unacceptabilities', - 'unacceptability', - 'unacceptable', - 'unacceptably', - 'unaccepted', - 'unacclimated', - 'unacclimatized', - 'unaccommodated', - 'unaccommodating', - 'unaccompanied', - 'unaccountabilities', - 'unaccountability', - 'unaccountable', - 'unaccountably', - 'unaccounted', - 'unaccredited', - 'unacculturated', - 'unaccustomed', - 'unaccustomedly', - 'unachieved', - 'unacknowledged', - 'unacquainted', - 'unactorish', - 'unadaptable', - 'unaddressed', - 'unadjudicated', - 'unadjusted', - 'unadmitted', - 'unadoptable', - 'unadulterated', - 'unadulteratedly', - 'unadventurous', - 'unadvertised', - 'unadvisedly', - 'unaesthetic', - 'unaffected', - 'unaffectedly', - 'unaffectedness', - 'unaffectednesses', - 'unaffecting', - 'unaffectionate', - 'unaffectionately', - 'unaffiliated', - 'unaffluent', - 'unaffordable', - 'unaggressive', - 'unalienable', - 'unalienated', - 'unalleviated', - 'unallocated', - 'unalluring', - 'unalterabilities', - 'unalterability', - 'unalterable', - 'unalterableness', - 'unalterablenesses', - 'unalterably', - 'unambiguous', - 'unambiguously', - 'unambitious', - 'unambivalent', - 'unambivalently', - 'unamenable', - 'unamortized', - 'unamplified', - 'unanalyzable', - 'unanalyzed', - 'unanchored', - 'unanchoring', - 'unanesthetized', - 'unanimities', - 'unanimously', - 'unannotated', - 'unannounced', - 'unanswerabilities', - 'unanswerability', - 'unanswerable', - 'unanswerably', - 'unanswered', - 'unanticipated', - 'unanticipatedly', - 'unapologetic', - 'unapologetically', - 'unapologizing', - 'unapparent', - 'unappealable', - 'unappealing', - 'unappealingly', - 'unappeasable', - 'unappeasably', - 'unappeased', - 'unappetizing', - 'unappetizingly', - 'unappreciated', - 'unappreciation', - 'unappreciations', - 'unappreciative', - 'unapproachabilities', - 'unapproachability', - 'unapproachable', - 'unapproachably', - 'unappropriated', - 'unapproved', - 'unaptnesses', - 'unarguable', - 'unarguably', - 'unarrogant', - 'unarticulated', - 'unartistic', - 'unashamedly', - 'unaspirated', - 'unassailabilities', - 'unassailability', - 'unassailable', - 'unassailableness', - 'unassailablenesses', - 'unassailably', - 'unassailed', - 'unassembled', - 'unassertive', - 'unassertively', - 'unassigned', - 'unassimilable', - 'unassimilated', - 'unassisted', - 'unassociated', - 'unassuageable', - 'unassuaged', - 'unassuming', - 'unassumingness', - 'unassumingnesses', - 'unathletic', - 'unattached', - 'unattainable', - 'unattended', - 'unattenuated', - 'unattested', - 'unattractive', - 'unattractively', - 'unattractiveness', - 'unattractivenesses', - 'unattributable', - 'unattributed', - 'unauthentic', - 'unauthorized', - 'unautomated', - 'unavailabilities', - 'unavailability', - 'unavailable', - 'unavailing', - 'unavailingly', - 'unavailingness', - 'unavailingnesses', - 'unavoidable', - 'unavoidably', - 'unawakened', - 'unawareness', - 'unawarenesses', - 'unbalanced', - 'unbalances', - 'unbalancing', - 'unballasted', - 'unbandaged', - 'unbandages', - 'unbandaging', - 'unbaptized', - 'unbarbered', - 'unbarricaded', - 'unbearable', - 'unbearably', - 'unbeatable', - 'unbeatably', - 'unbeautiful', - 'unbeautifully', - 'unbecoming', - 'unbecomingly', - 'unbecomingness', - 'unbecomingnesses', - 'unbeholden', - 'unbeknownst', - 'unbelievable', - 'unbelievably', - 'unbeliever', - 'unbelievers', - 'unbelieving', - 'unbelievingly', - 'unbelligerent', - 'unbendable', - 'unbeseeming', - 'unbiasedness', - 'unbiasednesses', - 'unbiblical', - 'unbleached', - 'unblemished', - 'unblenched', - 'unblinking', - 'unblinkingly', - 'unblocking', - 'unbloodied', - 'unblushing', - 'unblushingly', - 'unbonneted', - 'unbonneting', - 'unbosoming', - 'unboundedness', - 'unboundednesses', - 'unbowdlerized', - 'unbracketed', - 'unbraiding', - 'unbranched', - 'unbreachable', - 'unbreakable', - 'unbreathable', - 'unbreeched', - 'unbreeches', - 'unbreeching', - 'unbridgeable', - 'unbridling', - 'unbrilliant', - 'unbuckling', - 'unbudgeable', - 'unbudgeably', - 'unbudgeted', - 'unbudgingly', - 'unbuffered', - 'unbuildable', - 'unbuilding', - 'unbundling', - 'unburdened', - 'unburdening', - 'unbureaucratic', - 'unburnable', - 'unbusinesslike', - 'unbuttered', - 'unbuttoned', - 'unbuttoning', - 'uncalcified', - 'uncalcined', - 'uncalculated', - 'uncalculating', - 'uncalibrated', - 'uncalloused', - 'uncanceled', - 'uncandidly', - 'uncanniest', - 'uncanniness', - 'uncanninesses', - 'uncanonical', - 'uncapitalized', - 'uncaptioned', - 'uncapturable', - 'uncarpeted', - 'uncastrated', - 'uncataloged', - 'uncatchable', - 'uncategorizable', - 'unceasingly', - 'uncelebrated', - 'uncensored', - 'uncensorious', - 'uncensured', - 'unceremonious', - 'unceremoniously', - 'unceremoniousness', - 'unceremoniousnesses', - 'uncertainly', - 'uncertainness', - 'uncertainnesses', - 'uncertainties', - 'uncertainty', - 'uncertified', - 'unchaining', - 'unchallengeable', - 'unchallenged', - 'unchallenging', - 'unchangeabilities', - 'unchangeability', - 'unchangeable', - 'unchangeableness', - 'unchangeablenesses', - 'unchangeably', - 'unchanging', - 'unchangingly', - 'unchangingness', - 'unchangingnesses', - 'unchanneled', - 'unchaperoned', - 'uncharacteristic', - 'uncharacteristically', - 'uncharging', - 'uncharismatic', - 'uncharitable', - 'uncharitableness', - 'uncharitablenesses', - 'uncharitably', - 'uncharming', - 'unchartered', - 'unchastely', - 'unchasteness', - 'unchastenesses', - 'unchastities', - 'unchastity', - 'unchauvinistic', - 'uncheckable', - 'unchewable', - 'unchildlike', - 'unchivalrous', - 'unchivalrously', - 'unchlorinated', - 'unchoreographed', - 'unchristened', - 'unchristian', - 'unchronicled', - 'unchronological', - 'unchurched', - 'unchurches', - 'unchurching', - 'unchurchly', - 'unciliated', - 'uncinariases', - 'uncinariasis', - 'uncinematic', - 'uncirculated', - 'uncircumcised', - 'uncircumcision', - 'uncircumcisions', - 'uncivilized', - 'unclamping', - 'unclarified', - 'unclarities', - 'unclasping', - 'unclassical', - 'unclassifiable', - 'unclassified', - 'uncleanest', - 'uncleanliness', - 'uncleanlinesses', - 'uncleanness', - 'uncleannesses', - 'unclearest', - 'unclenched', - 'unclenches', - 'unclenching', - 'unclimbable', - 'unclimbableness', - 'unclimbablenesses', - 'unclinched', - 'unclinches', - 'unclinching', - 'unclipping', - 'uncloaking', - 'unclogging', - 'unclothing', - 'uncloudedly', - 'unclouding', - 'unclubbable', - 'uncluttered', - 'uncluttering', - 'unclutters', - 'uncoalesce', - 'uncoalesced', - 'uncoalesces', - 'uncoalescing', - 'uncodified', - 'uncoercive', - 'uncoercively', - 'uncoffined', - 'uncoffining', - 'uncollected', - 'uncollectible', - 'uncollectibles', - 'uncombative', - 'uncombined', - 'uncomfortable', - 'uncomfortably', - 'uncommercial', - 'uncommercialized', - 'uncommitted', - 'uncommoner', - 'uncommonest', - 'uncommonly', - 'uncommonness', - 'uncommonnesses', - 'uncommunicable', - 'uncommunicative', - 'uncompassionate', - 'uncompelling', - 'uncompensated', - 'uncompetitive', - 'uncompetitiveness', - 'uncompetitivenesses', - 'uncomplacent', - 'uncomplaining', - 'uncomplainingly', - 'uncompleted', - 'uncomplicated', - 'uncomplimentary', - 'uncompounded', - 'uncomprehended', - 'uncomprehending', - 'uncomprehendingly', - 'uncompromisable', - 'uncompromising', - 'uncompromisingly', - 'uncompromisingness', - 'uncompromisingnesses', - 'uncomputerized', - 'unconcealed', - 'unconceivable', - 'unconcerned', - 'unconcernedly', - 'unconcernedness', - 'unconcernednesses', - 'unconcerns', - 'unconditional', - 'unconditionally', - 'unconditioned', - 'unconfessed', - 'unconfined', - 'unconfirmed', - 'unconformable', - 'unconformably', - 'unconformities', - 'unconformity', - 'unconfounded', - 'unconfused', - 'unconfuses', - 'unconfusing', - 'uncongenial', - 'uncongenialities', - 'uncongeniality', - 'unconjugated', - 'unconnected', - 'unconquerable', - 'unconquerably', - 'unconquered', - 'unconscionabilities', - 'unconscionability', - 'unconscionable', - 'unconscionableness', - 'unconscionablenesses', - 'unconscionably', - 'unconscious', - 'unconsciouses', - 'unconsciously', - 'unconsciousness', - 'unconsciousnesses', - 'unconsecrated', - 'unconsidered', - 'unconsolidated', - 'unconstitutional', - 'unconstitutionalities', - 'unconstitutionality', - 'unconstitutionally', - 'unconstrained', - 'unconstraint', - 'unconstraints', - 'unconstricted', - 'unconstructed', - 'unconstructive', - 'unconsumed', - 'unconsummated', - 'uncontainable', - 'uncontaminated', - 'uncontemplated', - 'uncontemporary', - 'uncontentious', - 'uncontested', - 'uncontracted', - 'uncontradicted', - 'uncontrived', - 'uncontrollabilities', - 'uncontrollability', - 'uncontrollable', - 'uncontrollably', - 'uncontrolled', - 'uncontroversial', - 'uncontroversially', - 'unconventional', - 'unconventionalities', - 'unconventionality', - 'unconventionally', - 'unconverted', - 'unconvinced', - 'unconvincing', - 'unconvincingly', - 'unconvincingness', - 'unconvincingnesses', - 'unconvoyed', - 'uncooperative', - 'uncoordinated', - 'uncopyrightable', - 'uncorrectable', - 'uncorrected', - 'uncorrelated', - 'uncorroborated', - 'uncorseted', - 'uncountable', - 'uncouplers', - 'uncoupling', - 'uncourageous', - 'uncouthness', - 'uncouthnesses', - 'uncovenanted', - 'uncovering', - 'uncreating', - 'uncreative', - 'uncredentialed', - 'uncredited', - 'uncrippled', - 'uncritical', - 'uncritically', - 'uncrossable', - 'uncrossing', - 'uncrowning', - 'uncrumpled', - 'uncrumples', - 'uncrumpling', - 'uncrushable', - 'uncrystallized', - 'unctuously', - 'unctuousness', - 'unctuousnesses', - 'uncultivable', - 'uncultivated', - 'uncultured', - 'uncurtained', - 'uncustomarily', - 'uncustomary', - 'uncynically', - 'undanceable', - 'undauntable', - 'undauntedly', - 'undebatable', - 'undebatably', - 'undecadent', - 'undeceived', - 'undeceives', - 'undeceiving', - 'undecidabilities', - 'undecidability', - 'undecidable', - 'undecideds', - 'undecillion', - 'undecillions', - 'undecipherable', - 'undeciphered', - 'undeclared', - 'undecomposed', - 'undecorated', - 'undedicated', - 'undefeated', - 'undefended', - 'undefinable', - 'undefoliated', - 'undeformed', - 'undelegated', - 'undeliverable', - 'undelivered', - 'undemanding', - 'undemocratic', - 'undemocratically', - 'undemonstrative', - 'undemonstratively', - 'undemonstrativeness', - 'undemonstrativenesses', - 'undeniable', - 'undeniableness', - 'undeniablenesses', - 'undeniably', - 'undenominational', - 'undependable', - 'underachieve', - 'underachieved', - 'underachievement', - 'underachievements', - 'underachiever', - 'underachievers', - 'underachieves', - 'underachieving', - 'underacted', - 'underacting', - 'underactive', - 'underactivities', - 'underactivity', - 'underappreciated', - 'underbellies', - 'underbelly', - 'underbidder', - 'underbidders', - 'underbidding', - 'underbodies', - 'underbosses', - 'underbought', - 'underbrims', - 'underbrush', - 'underbrushes', - 'underbudded', - 'underbudding', - 'underbudgeted', - 'underbuying', - 'undercapitalized', - 'undercards', - 'undercarriage', - 'undercarriages', - 'undercharge', - 'undercharged', - 'undercharges', - 'undercharging', - 'underclass', - 'underclasses', - 'underclassman', - 'underclassmen', - 'underclothes', - 'underclothing', - 'underclothings', - 'undercoating', - 'undercoatings', - 'undercoats', - 'undercooled', - 'undercooling', - 'undercools', - 'undercount', - 'undercounted', - 'undercounting', - 'undercounts', - 'undercover', - 'undercroft', - 'undercrofts', - 'undercurrent', - 'undercurrents', - 'undercutting', - 'underdeveloped', - 'underdevelopment', - 'underdevelopments', - 'underdoing', - 'underdrawers', - 'undereaten', - 'undereating', - 'undereducated', - 'underemphases', - 'underemphasis', - 'underemphasize', - 'underemphasized', - 'underemphasizes', - 'underemphasizing', - 'underemployed', - 'underemployment', - 'underemployments', - 'underestimate', - 'underestimated', - 'underestimates', - 'underestimating', - 'underestimation', - 'underestimations', - 'underexpose', - 'underexposed', - 'underexposes', - 'underexposing', - 'underexposure', - 'underexposures', - 'underfeeding', - 'underfeeds', - 'underfinanced', - 'underfunded', - 'underfunding', - 'underfunds', - 'undergarment', - 'undergarments', - 'undergirded', - 'undergirding', - 'undergirds', - 'underglaze', - 'underglazes', - 'undergoing', - 'undergrads', - 'undergraduate', - 'undergraduates', - 'underground', - 'undergrounder', - 'undergrounders', - 'undergrounds', - 'undergrowth', - 'undergrowths', - 'underhanded', - 'underhandedly', - 'underhandedness', - 'underhandednesses', - 'underinflated', - 'underinflation', - 'underinflations', - 'underinsured', - 'underinvestment', - 'underinvestments', - 'underlapped', - 'underlapping', - 'underlaying', - 'underlayment', - 'underlayments', - 'underletting', - 'underlined', - 'underlines', - 'underlings', - 'underlining', - 'underlying', - 'underlyingly', - 'undermanned', - 'undermined', - 'undermines', - 'undermining', - 'underneath', - 'undernourished', - 'undernourishment', - 'undernourishments', - 'undernutrition', - 'undernutritions', - 'underpainting', - 'underpaintings', - 'underpants', - 'underparts', - 'underpasses', - 'underpaying', - 'underpayment', - 'underpayments', - 'underpinned', - 'underpinning', - 'underpinnings', - 'underplayed', - 'underplaying', - 'underplays', - 'underplots', - 'underpopulated', - 'underpowered', - 'underprepared', - 'underprice', - 'underpriced', - 'underprices', - 'underpricing', - 'underprivileged', - 'underproduction', - 'underproductions', - 'underproof', - 'underpublicized', - 'underqualified', - 'underrated', - 'underrates', - 'underrating', - 'underreact', - 'underreacted', - 'underreacting', - 'underreacts', - 'underreport', - 'underreported', - 'underreporting', - 'underreports', - 'underrepresentation', - 'underrepresentations', - 'underrepresented', - 'underrunning', - 'undersaturated', - 'underscore', - 'underscored', - 'underscores', - 'underscoring', - 'undersecretaries', - 'undersecretary', - 'underselling', - 'undersells', - 'underserved', - 'undersexed', - 'undersheriff', - 'undersheriffs', - 'undershirt', - 'undershirted', - 'undershirts', - 'undershoot', - 'undershooting', - 'undershoots', - 'undershorts', - 'undershrub', - 'undershrubs', - 'undersides', - 'undersigned', - 'undersized', - 'underskirt', - 'underskirts', - 'underslung', - 'underspins', - 'understaffed', - 'understaffing', - 'understaffings', - 'understand', - 'understandabilities', - 'understandability', - 'understandable', - 'understandably', - 'understanding', - 'understandingly', - 'understandings', - 'understands', - 'understate', - 'understated', - 'understatedly', - 'understatement', - 'understatements', - 'understates', - 'understating', - 'understeer', - 'understeered', - 'understeering', - 'understeers', - 'understood', - 'understories', - 'understory', - 'understrapper', - 'understrappers', - 'understrength', - 'understudied', - 'understudies', - 'understudy', - 'understudying', - 'undersupplies', - 'undersupply', - 'undersurface', - 'undersurfaces', - 'undertaken', - 'undertaker', - 'undertakers', - 'undertakes', - 'undertaking', - 'undertakings', - 'undertaxed', - 'undertaxes', - 'undertaxing', - 'undertenant', - 'undertenants', - 'underthrust', - 'underthrusting', - 'underthrusts', - 'undertones', - 'undertrick', - 'undertricks', - 'underutilization', - 'underutilizations', - 'underutilize', - 'underutilized', - 'underutilizes', - 'underutilizing', - 'undervaluation', - 'undervaluations', - 'undervalue', - 'undervalued', - 'undervalues', - 'undervaluing', - 'underwater', - 'underweight', - 'underweights', - 'underwhelm', - 'underwhelmed', - 'underwhelming', - 'underwhelms', - 'underwings', - 'underwoods', - 'underwools', - 'underworld', - 'underworlds', - 'underwrite', - 'underwriter', - 'underwriters', - 'underwrites', - 'underwriting', - 'underwritten', - 'underwrote', - 'undescended', - 'undescribable', - 'undeserved', - 'undeserving', - 'undesignated', - 'undesigning', - 'undesirabilities', - 'undesirability', - 'undesirable', - 'undesirableness', - 'undesirablenesses', - 'undesirables', - 'undesirably', - 'undetectable', - 'undetected', - 'undeterminable', - 'undetermined', - 'undeterred', - 'undeveloped', - 'undeviating', - 'undeviatingly', - 'undiagnosable', - 'undiagnosed', - 'undialectical', - 'undidactic', - 'undifferentiated', - 'undigested', - 'undigestible', - 'undignified', - 'undiminished', - 'undiplomatic', - 'undiplomatically', - 'undirected', - 'undischarged', - 'undisciplined', - 'undisclosed', - 'undiscouraged', - 'undiscoverable', - 'undiscovered', - 'undiscriminating', - 'undiscussed', - 'undisguised', - 'undisguisedly', - 'undismayed', - 'undisputable', - 'undisputed', - 'undissociated', - 'undissolved', - 'undistinguished', - 'undistorted', - 'undistracted', - 'undistributed', - 'undisturbed', - 'undoctored', - 'undoctrinaire', - 'undocumented', - 'undogmatic', - 'undogmatically', - 'undomestic', - 'undomesticated', - 'undoubling', - 'undoubtable', - 'undoubtedly', - 'undoubting', - 'undramatic', - 'undramatically', - 'undramatized', - 'undressing', - 'undrinkable', - 'undulating', - 'undulation', - 'undulations', - 'undulatory', - 'unduplicated', - 'undutifully', - 'undutifulness', - 'undutifulnesses', - 'unearmarked', - 'unearthing', - 'unearthliness', - 'unearthlinesses', - 'uneasiness', - 'uneasinesses', - 'uneccentric', - 'unecological', - 'uneconomic', - 'uneconomical', - 'unedifying', - 'uneducable', - 'uneducated', - 'unelaborate', - 'unelectable', - 'unelectrified', - 'unembarrassed', - 'unembellished', - 'unembittered', - 'unemotional', - 'unemotionally', - 'unemphatic', - 'unemphatically', - 'unempirical', - 'unemployabilities', - 'unemployability', - 'unemployable', - 'unemployables', - 'unemployed', - 'unemployeds', - 'unemployment', - 'unemployments', - 'unenchanted', - 'unenclosed', - 'unencouraging', - 'unencumbered', - 'unendearing', - 'unendingly', - 'unendurable', - 'unendurableness', - 'unendurablenesses', - 'unendurably', - 'unenforceable', - 'unenforced', - 'unenlarged', - 'unenlightened', - 'unenlightening', - 'unenriched', - 'unenterprising', - 'unenthusiastic', - 'unenthusiastically', - 'unenviable', - 'unequalled', - 'unequipped', - 'unequivocably', - 'unequivocal', - 'unequivocally', - 'unerringly', - 'unescapable', - 'unessential', - 'unestablished', - 'unevaluated', - 'unevenness', - 'unevennesses', - 'uneventful', - 'uneventfully', - 'uneventfulness', - 'uneventfulnesses', - 'unexamined', - 'unexampled', - 'unexcelled', - 'unexceptionable', - 'unexceptionableness', - 'unexceptionablenesses', - 'unexceptionably', - 'unexceptional', - 'unexcitable', - 'unexciting', - 'unexercised', - 'unexpected', - 'unexpectedly', - 'unexpectedness', - 'unexpectednesses', - 'unexpended', - 'unexplainable', - 'unexplained', - 'unexploded', - 'unexploited', - 'unexplored', - 'unexpressed', - 'unexpressive', - 'unexpurgated', - 'unextraordinary', - 'unfadingly', - 'unfailingly', - 'unfairness', - 'unfairnesses', - 'unfaithful', - 'unfaithfully', - 'unfaithfulness', - 'unfaithfulnesses', - 'unfalsifiable', - 'unfaltering', - 'unfalteringly', - 'unfamiliar', - 'unfamiliarities', - 'unfamiliarity', - 'unfamiliarly', - 'unfashionable', - 'unfashionableness', - 'unfashionablenesses', - 'unfashionably', - 'unfastened', - 'unfastening', - 'unfastidious', - 'unfathered', - 'unfathomable', - 'unfavorable', - 'unfavorableness', - 'unfavorablenesses', - 'unfavorably', - 'unfavorite', - 'unfeasible', - 'unfeelingly', - 'unfeelingness', - 'unfeelingnesses', - 'unfeignedly', - 'unfeminine', - 'unfermented', - 'unfertilized', - 'unfettered', - 'unfettering', - 'unfilially', - 'unfiltered', - 'unfindable', - 'unfinished', - 'unfitnesses', - 'unflagging', - 'unflaggingly', - 'unflamboyant', - 'unflappabilities', - 'unflappability', - 'unflappable', - 'unflappably', - 'unflattering', - 'unflatteringly', - 'unflinching', - 'unflinchingly', - 'unfocussed', - 'unfoldment', - 'unfoldments', - 'unforeseeable', - 'unforeseen', - 'unforested', - 'unforgettable', - 'unforgettably', - 'unforgivable', - 'unforgiving', - 'unforgivingness', - 'unforgivingnesses', - 'unformulated', - 'unforthcoming', - 'unfortified', - 'unfortunate', - 'unfortunately', - 'unfortunates', - 'unfossiliferous', - 'unfreedoms', - 'unfreezing', - 'unfrequented', - 'unfriended', - 'unfriendlier', - 'unfriendliest', - 'unfriendliness', - 'unfriendlinesses', - 'unfriendly', - 'unfrivolous', - 'unfrocking', - 'unfruitful', - 'unfruitfully', - 'unfruitfulness', - 'unfruitfulnesses', - 'unfulfillable', - 'unfulfilled', - 'unfurnished', - 'ungainlier', - 'ungainliest', - 'ungainliness', - 'ungainlinesses', - 'ungallantly', - 'ungarnished', - 'ungenerosities', - 'ungenerosity', - 'ungenerous', - 'ungenerously', - 'ungentlemanly', - 'ungentrified', - 'ungerminated', - 'ungimmicky', - 'unglamorized', - 'unglamorous', - 'ungodliest', - 'ungodliness', - 'ungodlinesses', - 'ungovernable', - 'ungraceful', - 'ungracefully', - 'ungracious', - 'ungraciously', - 'ungraciousness', - 'ungraciousnesses', - 'ungrammatical', - 'ungrammaticalities', - 'ungrammaticality', - 'ungraspable', - 'ungrateful', - 'ungratefully', - 'ungratefulness', - 'ungratefulnesses', - 'ungrounded', - 'ungrudging', - 'unguardedly', - 'unguardedness', - 'unguardednesses', - 'unguarding', - 'unguessable', - 'unhackneyed', - 'unhallowed', - 'unhallowing', - 'unhampered', - 'unhandicapped', - 'unhandiest', - 'unhandiness', - 'unhandinesses', - 'unhandsome', - 'unhandsomely', - 'unhappiest', - 'unhappiness', - 'unhappinesses', - 'unharnessed', - 'unharnesses', - 'unharnessing', - 'unharvested', - 'unhealthful', - 'unhealthier', - 'unhealthiest', - 'unhealthily', - 'unhealthiness', - 'unhealthinesses', - 'unhelpfully', - 'unheralded', - 'unhesitating', - 'unhesitatingly', - 'unhindered', - 'unhistorical', - 'unhitching', - 'unholiness', - 'unholinesses', - 'unhomogenized', - 'unhouseled', - 'unhumorous', - 'unhurriedly', - 'unhydrolyzed', - 'unhygienic', - 'unhyphenated', - 'unhysterical', - 'unhysterically', - 'unicameral', - 'unicamerally', - 'unicellular', - 'unicyclist', - 'unicyclists', - 'unidentifiable', - 'unidentified', - 'unideological', - 'unidimensional', - 'unidimensionalities', - 'unidimensionality', - 'unidiomatic', - 'unidirectional', - 'unidirectionally', - 'unification', - 'unifications', - 'unifoliate', - 'unifoliolate', - 'uniformest', - 'uniforming', - 'uniformitarian', - 'uniformitarianism', - 'uniformitarianisms', - 'uniformitarians', - 'uniformities', - 'uniformity', - 'uniformness', - 'uniformnesses', - 'unignorable', - 'unilateral', - 'unilaterally', - 'unilingual', - 'unilluminating', - 'unillusioned', - 'unilocular', - 'unimaginable', - 'unimaginably', - 'unimaginative', - 'unimaginatively', - 'unimmunized', - 'unimpaired', - 'unimpassioned', - 'unimpeachable', - 'unimpeachably', - 'unimplemented', - 'unimportance', - 'unimportances', - 'unimportant', - 'unimposing', - 'unimpressed', - 'unimpressive', - 'unimproved', - 'unincorporated', - 'unindicted', - 'unindustrialized', - 'uninfected', - 'uninflated', - 'uninflected', - 'uninfluenced', - 'uninformative', - 'uninformatively', - 'uninformed', - 'uningratiating', - 'uninhabitable', - 'uninhabited', - 'uninhibited', - 'uninhibitedly', - 'uninhibitedness', - 'uninhibitednesses', - 'uninitiate', - 'uninitiated', - 'uninitiates', - 'uninoculated', - 'uninspected', - 'uninspired', - 'uninspiring', - 'uninstructed', - 'uninstructive', - 'uninsulated', - 'uninsurable', - 'unintegrated', - 'unintellectual', - 'unintelligent', - 'unintelligently', - 'unintelligibilities', - 'unintelligibility', - 'unintelligible', - 'unintelligibleness', - 'unintelligiblenesses', - 'unintelligibly', - 'unintended', - 'unintentional', - 'unintentionally', - 'uninterest', - 'uninterested', - 'uninteresting', - 'uninterests', - 'uninterrupted', - 'uninterruptedly', - 'unintimidated', - 'uninucleate', - 'uninventive', - 'uninviting', - 'uninvolved', - 'unionisation', - 'unionisations', - 'unionising', - 'unionization', - 'unionizations', - 'unionizing', - 'uniparental', - 'uniparentally', - 'uniqueness', - 'uniquenesses', - 'unironically', - 'unirradiated', - 'unirrigated', - 'unisexualities', - 'unisexuality', - 'unitarianism', - 'unitarianisms', - 'unitarians', - 'unitization', - 'unitizations', - 'univalents', - 'univariate', - 'universalism', - 'universalisms', - 'universalist', - 'universalistic', - 'universalists', - 'universalities', - 'universality', - 'universalization', - 'universalizations', - 'universalize', - 'universalized', - 'universalizes', - 'universalizing', - 'universally', - 'universalness', - 'universalnesses', - 'universals', - 'universities', - 'university', - 'univocally', - 'unjointing', - 'unjustifiable', - 'unjustifiably', - 'unjustified', - 'unjustness', - 'unjustnesses', - 'unkenneled', - 'unkenneling', - 'unkennelled', - 'unkennelling', - 'unkindlier', - 'unkindliest', - 'unkindliness', - 'unkindlinesses', - 'unkindness', - 'unkindnesses', - 'unknitting', - 'unknotting', - 'unknowabilities', - 'unknowability', - 'unknowable', - 'unknowingly', - 'unknowings', - 'unknowledgeable', - 'unladylike', - 'unlamented', - 'unlatching', - 'unlaundered', - 'unlawfully', - 'unlawfulness', - 'unlawfulnesses', - 'unlearnable', - 'unlearning', - 'unleashing', - 'unleavened', - 'unlettered', - 'unleveling', - 'unlevelled', - 'unlevelling', - 'unliberated', - 'unlicensed', - 'unlikelier', - 'unlikeliest', - 'unlikelihood', - 'unlikelihoods', - 'unlikeliness', - 'unlikelinesses', - 'unlikeness', - 'unlikenesses', - 'unlimbered', - 'unlimbering', - 'unlimitedly', - 'unlistenable', - 'unliterary', - 'unlocalized', - 'unloosened', - 'unloosening', - 'unlovelier', - 'unloveliest', - 'unloveliness', - 'unlovelinesses', - 'unluckiest', - 'unluckiness', - 'unluckinesses', - 'unmagnified', - 'unmalicious', - 'unmaliciously', - 'unmanageable', - 'unmanageably', - 'unmanipulated', - 'unmanliest', - 'unmanliness', - 'unmanlinesses', - 'unmannered', - 'unmanneredly', - 'unmannerliness', - 'unmannerlinesses', - 'unmannerly', - 'unmarketable', - 'unmarrieds', - 'unmasculine', - 'unmatchable', - 'unmeasurable', - 'unmeasured', - 'unmechanized', - 'unmediated', - 'unmedicated', - 'unmelodious', - 'unmelodiousness', - 'unmelodiousnesses', - 'unmemorable', - 'unmemorably', - 'unmentionable', - 'unmentionables', - 'unmentioned', - 'unmerciful', - 'unmercifully', - 'unmetabolized', - 'unmilitary', - 'unmingling', - 'unmistakable', - 'unmistakably', - 'unmitering', - 'unmitigated', - 'unmitigatedly', - 'unmitigatedness', - 'unmitigatednesses', - 'unmodernized', - 'unmodified', - 'unmolested', - 'unmonitored', - 'unmoralities', - 'unmorality', - 'unmotivated', - 'unmuffling', - 'unmuzzling', - 'unmyelinated', - 'unnameable', - 'unnaturally', - 'unnaturalness', - 'unnaturalnesses', - 'unnecessarily', - 'unnecessary', - 'unnegotiable', - 'unnervingly', - 'unneurotic', - 'unnewsworthy', - 'unnilhexium', - 'unnilhexiums', - 'unnilpentium', - 'unnilpentiums', - 'unnilquadium', - 'unnilquadiums', - 'unnoticeable', - 'unnourishing', - 'unnumbered', - 'unobjectionable', - 'unobservable', - 'unobservant', - 'unobserved', - 'unobstructed', - 'unobtainable', - 'unobtrusive', - 'unobtrusively', - 'unobtrusiveness', - 'unobtrusivenesses', - 'unoccupied', - 'unofficial', - 'unofficially', - 'unopenable', - 'unorganized', - 'unoriginal', - 'unornamented', - 'unorthodox', - 'unorthodoxies', - 'unorthodoxly', - 'unorthodoxy', - 'unostentatious', - 'unostentatiously', - 'unoxygenated', - 'unpalatabilities', - 'unpalatability', - 'unpalatable', - 'unparalleled', - 'unparasitized', - 'unpardonable', - 'unparented', - 'unparliamentary', - 'unpassable', - 'unpasteurized', - 'unpastoral', - 'unpatentable', - 'unpatriotic', - 'unpedantic', - 'unpeopling', - 'unperceived', - 'unperceptive', - 'unperformable', - 'unperformed', - 'unpersuaded', - 'unpersuasive', - 'unperturbed', - 'unpicturesque', - 'unplaiting', - 'unplausible', - 'unplayable', - 'unpleasant', - 'unpleasantly', - 'unpleasantness', - 'unpleasantnesses', - 'unpleasing', - 'unplugging', - 'unpolarized', - 'unpolished', - 'unpolitical', - 'unpolluted', - 'unpopularities', - 'unpopularity', - 'unpractical', - 'unprecedented', - 'unprecedentedly', - 'unpredictabilities', - 'unpredictability', - 'unpredictable', - 'unpredictables', - 'unpredictably', - 'unpregnant', - 'unprejudiced', - 'unpremeditated', - 'unprepared', - 'unpreparedness', - 'unpreparednesses', - 'unprepossessing', - 'unpressured', - 'unpressurized', - 'unpretending', - 'unpretentious', - 'unpretentiously', - 'unpretentiousness', - 'unpretentiousnesses', - 'unprincipled', - 'unprincipledness', - 'unprinciplednesses', - 'unprintable', - 'unprivileged', - 'unproblematic', - 'unprocessed', - 'unproduced', - 'unproductive', - 'unprofessed', - 'unprofessional', - 'unprofessionally', - 'unprofessionals', - 'unprofitable', - 'unprofitableness', - 'unprofitablenesses', - 'unprofitably', - 'unprogrammable', - 'unprogrammed', - 'unprogressive', - 'unpromising', - 'unpromisingly', - 'unprompted', - 'unpronounceable', - 'unpronounced', - 'unpropitious', - 'unprosperous', - 'unprotected', - 'unprovable', - 'unprovoked', - 'unpublicized', - 'unpublishable', - 'unpublished', - 'unpuckered', - 'unpuckering', - 'unpunctual', - 'unpunctualities', - 'unpunctuality', - 'unpunctuated', - 'unpunished', - 'unpuzzling', - 'unqualified', - 'unqualifiedly', - 'unquantifiable', - 'unquenchable', - 'unquestionable', - 'unquestionably', - 'unquestioned', - 'unquestioning', - 'unquestioningly', - 'unquietest', - 'unquietness', - 'unquietnesses', - 'unraveling', - 'unravelled', - 'unravelling', - 'unravished', - 'unreachable', - 'unreadable', - 'unreadiest', - 'unreadiness', - 'unreadinesses', - 'unrealistic', - 'unrealistically', - 'unrealities', - 'unrealizable', - 'unrealized', - 'unreasonable', - 'unreasonableness', - 'unreasonablenesses', - 'unreasonably', - 'unreasoned', - 'unreasoning', - 'unreasoningly', - 'unreceptive', - 'unreclaimable', - 'unreclaimed', - 'unrecognizable', - 'unrecognizably', - 'unrecognized', - 'unreconcilable', - 'unreconciled', - 'unreconstructed', - 'unrecorded', - 'unrecoverable', - 'unrecovered', - 'unrecyclable', - 'unredeemable', - 'unredeemed', - 'unredressed', - 'unreflective', - 'unreformed', - 'unrefrigerated', - 'unregenerate', - 'unregenerately', - 'unregistered', - 'unregulated', - 'unrehearsed', - 'unreinforced', - 'unrelenting', - 'unrelentingly', - 'unreliabilities', - 'unreliability', - 'unreliable', - 'unrelieved', - 'unrelievedly', - 'unreligious', - 'unreluctant', - 'unremarkable', - 'unremarkably', - 'unremarked', - 'unremembered', - 'unreminiscent', - 'unremitting', - 'unremittingly', - 'unremorseful', - 'unremovable', - 'unrepeatable', - 'unrepentant', - 'unrepentantly', - 'unreported', - 'unrepresentative', - 'unrepresentativeness', - 'unrepresentativenesses', - 'unrepresented', - 'unrepressed', - 'unrequited', - 'unreserved', - 'unreservedly', - 'unreservedness', - 'unreservednesses', - 'unreserves', - 'unresistant', - 'unresisting', - 'unresolvable', - 'unresolved', - 'unrespectable', - 'unresponsive', - 'unresponsively', - 'unresponsiveness', - 'unresponsivenesses', - 'unrestored', - 'unrestrained', - 'unrestrainedly', - 'unrestrainedness', - 'unrestrainednesses', - 'unrestraint', - 'unrestraints', - 'unrestricted', - 'unretouched', - 'unreturnable', - 'unrevealed', - 'unreviewable', - 'unreviewed', - 'unrevolutionary', - 'unrewarded', - 'unrewarding', - 'unrhetorical', - 'unrhythmic', - 'unriddling', - 'unrighteous', - 'unrighteously', - 'unrighteousness', - 'unrighteousnesses', - 'unripeness', - 'unripenesses', - 'unrivalled', - 'unromantic', - 'unromantically', - 'unromanticized', - 'unrounding', - 'unruliness', - 'unrulinesses', - 'unsaddling', - 'unsafeties', - 'unsalaried', - 'unsalvageable', - 'unsanctioned', - 'unsanitary', - 'unsatisfactorily', - 'unsatisfactoriness', - 'unsatisfactorinesses', - 'unsatisfactory', - 'unsatisfied', - 'unsatisfying', - 'unsaturate', - 'unsaturated', - 'unsaturates', - 'unscalable', - 'unscheduled', - 'unscholarly', - 'unschooled', - 'unscientific', - 'unscientifically', - 'unscramble', - 'unscrambled', - 'unscrambler', - 'unscramblers', - 'unscrambles', - 'unscrambling', - 'unscreened', - 'unscrewing', - 'unscripted', - 'unscriptural', - 'unscrupulous', - 'unscrupulously', - 'unscrupulousness', - 'unscrupulousnesses', - 'unsearchable', - 'unsearchably', - 'unseasonable', - 'unseasonableness', - 'unseasonablenesses', - 'unseasonably', - 'unseasoned', - 'unseaworthy', - 'unseemlier', - 'unseemliest', - 'unseemliness', - 'unseemlinesses', - 'unsegmented', - 'unsegregated', - 'unselected', - 'unselective', - 'unselectively', - 'unselfishly', - 'unselfishness', - 'unselfishnesses', - 'unsellable', - 'unsensational', - 'unsensitized', - 'unsentimental', - 'unseparated', - 'unseriousness', - 'unseriousnesses', - 'unserviceable', - 'unsettledness', - 'unsettlednesses', - 'unsettlement', - 'unsettlements', - 'unsettling', - 'unsettlingly', - 'unshackled', - 'unshackles', - 'unshackling', - 'unshakable', - 'unshakably', - 'unsheathed', - 'unsheathes', - 'unsheathing', - 'unshelling', - 'unshifting', - 'unshipping', - 'unshockable', - 'unsighting', - 'unsightlier', - 'unsightliest', - 'unsightliness', - 'unsightlinesses', - 'unsinkable', - 'unskillful', - 'unskillfully', - 'unskillfulness', - 'unskillfulnesses', - 'unslakable', - 'unslinging', - 'unsmoothed', - 'unsnapping', - 'unsnarling', - 'unsociabilities', - 'unsociability', - 'unsociable', - 'unsociableness', - 'unsociablenesses', - 'unsociably', - 'unsocialized', - 'unsocially', - 'unsoldered', - 'unsoldering', - 'unsoldierly', - 'unsolicited', - 'unsolvable', - 'unsophisticated', - 'unsophistication', - 'unsophistications', - 'unsoundest', - 'unsoundness', - 'unsoundnesses', - 'unsparingly', - 'unspeakable', - 'unspeakably', - 'unspeaking', - 'unspecialized', - 'unspecifiable', - 'unspecific', - 'unspecified', - 'unspectacular', - 'unsphering', - 'unspiritual', - 'unsportsmanlike', - 'unstableness', - 'unstablenesses', - 'unstablest', - 'unstacking', - 'unstandardized', - 'unstartling', - 'unsteadied', - 'unsteadier', - 'unsteadies', - 'unsteadiest', - 'unsteadily', - 'unsteadiness', - 'unsteadinesses', - 'unsteadying', - 'unsteeling', - 'unstepping', - 'unsterilized', - 'unsticking', - 'unstinting', - 'unstintingly', - 'unstitched', - 'unstitches', - 'unstitching', - 'unstoppable', - 'unstoppably', - 'unstoppered', - 'unstoppering', - 'unstoppers', - 'unstopping', - 'unstrained', - 'unstrapped', - 'unstrapping', - 'unstratified', - 'unstressed', - 'unstresses', - 'unstringing', - 'unstructured', - 'unsubsidized', - 'unsubstantial', - 'unsubstantialities', - 'unsubstantiality', - 'unsubstantially', - 'unsubstantiated', - 'unsuccesses', - 'unsuccessful', - 'unsuccessfully', - 'unsuitabilities', - 'unsuitability', - 'unsuitable', - 'unsuitably', - 'unsupervised', - 'unsupportable', - 'unsupported', - 'unsurpassable', - 'unsurpassed', - 'unsurprised', - 'unsurprising', - 'unsurprisingly', - 'unsusceptible', - 'unsuspected', - 'unsuspecting', - 'unsuspectingly', - 'unsuspicious', - 'unsustainable', - 'unswathing', - 'unswearing', - 'unsweetened', - 'unswerving', - 'unsymmetrical', - 'unsymmetrically', - 'unsympathetic', - 'unsympathetically', - 'unsymptomatic', - 'unsynchronized', - 'unsystematic', - 'unsystematically', - 'unsystematized', - 'untalented', - 'untangling', - 'untarnished', - 'unteachable', - 'unteaching', - 'untechnical', - 'untempered', - 'untenabilities', - 'untenability', - 'untenanted', - 'untestable', - 'untethered', - 'untethering', - 'untheoretical', - 'unthinkabilities', - 'unthinkability', - 'unthinkable', - 'unthinkably', - 'unthinking', - 'unthinkingly', - 'unthreaded', - 'unthreading', - 'unthreatening', - 'unthroning', - 'untidiness', - 'untidinesses', - 'untillable', - 'untimelier', - 'untimeliest', - 'untimeliness', - 'untimelinesses', - 'untiringly', - 'untogether', - 'untouchabilities', - 'untouchability', - 'untouchable', - 'untouchables', - 'untowardly', - 'untowardness', - 'untowardnesses', - 'untraceable', - 'untraditional', - 'untraditionally', - 'untrammeled', - 'untransformed', - 'untranslatabilities', - 'untranslatability', - 'untranslatable', - 'untranslated', - 'untraveled', - 'untraversed', - 'untreading', - 'untrimming', - 'untroubled', - 'untrussing', - 'untrusting', - 'untrustworthy', - 'untruthful', - 'untruthfully', - 'untruthfulness', - 'untruthfulnesses', - 'untwisting', - 'untypically', - 'ununderstandable', - 'unusualness', - 'unusualnesses', - 'unutilized', - 'unutterable', - 'unutterably', - 'unvaccinated', - 'unvanquished', - 'unvarnished', - 'unventilated', - 'unverbalized', - 'unverifiable', - 'unverified', - 'unwariness', - 'unwarinesses', - 'unwarrantable', - 'unwarrantably', - 'unwarranted', - 'unwashedness', - 'unwashednesses', - 'unwatchable', - 'unwavering', - 'unwaveringly', - 'unwearable', - 'unweariedly', - 'unweathered', - 'unweetingly', - 'unweighted', - 'unweighting', - 'unwholesome', - 'unwholesomely', - 'unwieldier', - 'unwieldiest', - 'unwieldily', - 'unwieldiness', - 'unwieldinesses', - 'unwillingly', - 'unwillingness', - 'unwillingnesses', - 'unwinnable', - 'unwittingly', - 'unwontedly', - 'unwontedness', - 'unwontednesses', - 'unworkabilities', - 'unworkability', - 'unworkable', - 'unworkables', - 'unworldliness', - 'unworldlinesses', - 'unworthier', - 'unworthies', - 'unworthiest', - 'unworthily', - 'unworthiness', - 'unworthinesses', - 'unwrapping', - 'unwreathed', - 'unwreathes', - 'unwreathing', - 'unyielding', - 'unyieldingly', - 'upbraiders', - 'upbraiding', - 'upbringing', - 'upbringings', - 'upbuilding', - 'upchucking', - 'upclimbing', - 'upflinging', - 'upgathered', - 'upgathering', - 'upgradabilities', - 'upgradability', - 'upgradable', - 'upgradeabilities', - 'upgradeability', - 'upgradeable', - 'uphoarding', - 'upholstered', - 'upholsterer', - 'upholsterers', - 'upholsteries', - 'upholstering', - 'upholsters', - 'upholstery', - 'uplighting', - 'upmanships', - 'uppercased', - 'uppercases', - 'uppercasing', - 'upperclassman', - 'upperclassmen', - 'uppercutting', - 'upperparts', - 'uppishness', - 'uppishnesses', - 'uppitiness', - 'uppitinesses', - 'uppityness', - 'uppitynesses', - 'uppropping', - 'upreaching', - 'uprighting', - 'uprightness', - 'uprightnesses', - 'uproarious', - 'uproariously', - 'uproariousness', - 'uproariousnesses', - 'uprootedness', - 'uprootednesses', - 'upshifting', - 'upshooting', - 'upspringing', - 'upstanding', - 'upstandingness', - 'upstandingnesses', - 'upstarting', - 'upstepping', - 'upstirring', - 'upsweeping', - 'upswelling', - 'upswinging', - 'upthrowing', - 'upthrusting', - 'uptightness', - 'uptightnesses', - 'upwardness', - 'upwardnesses', - 'upwellings', - 'uraninites', - 'uranographies', - 'uranography', - 'urbanisation', - 'urbanisations', - 'urbanising', - 'urbanistic', - 'urbanistically', - 'urbanities', - 'urbanization', - 'urbanizations', - 'urbanizing', - 'urbanologies', - 'urbanologist', - 'urbanologists', - 'urbanology', - 'urediniospore', - 'urediniospores', - 'urediospore', - 'urediospores', - 'uredospore', - 'uredospores', - 'ureotelism', - 'ureotelisms', - 'urethrites', - 'urethritides', - 'urethritis', - 'urethritises', - 'urethroscope', - 'urethroscopes', - 'uricosuric', - 'uricotelic', - 'uricotelism', - 'uricotelisms', - 'urinalyses', - 'urinalysis', - 'urinations', - 'urinogenital', - 'urinometer', - 'urinometers', - 'urochordate', - 'urochordates', - 'urochromes', - 'urogenital', - 'urokinases', - 'urolithiases', - 'urolithiasis', - 'urological', - 'urologists', - 'uropygiums', - 'uroscopies', - 'urticarial', - 'urticarias', - 'urticating', - 'urtication', - 'urtications', - 'usabilities', - 'usableness', - 'usablenesses', - 'usefulness', - 'usefulnesses', - 'uselessness', - 'uselessnesses', - 'usherettes', - 'usquebaugh', - 'usquebaughs', - 'usualnesses', - 'usufructuaries', - 'usufructuary', - 'usuriously', - 'usuriousness', - 'usuriousnesses', - 'usurpation', - 'usurpations', - 'utilitarian', - 'utilitarianism', - 'utilitarianisms', - 'utilitarians', - 'utilizable', - 'utilization', - 'utilizations', - 'utopianism', - 'utopianisms', - 'utterances', - 'uttermosts', - 'uvarovites', - 'uvulitises', - 'uxoricides', - 'uxoriously', - 'uxoriousness', - 'uxoriousnesses', - 'vacantness', - 'vacantnesses', - 'vacationed', - 'vacationer', - 'vacationers', - 'vacationing', - 'vacationist', - 'vacationists', - 'vacationland', - 'vacationlands', - 'vaccinated', - 'vaccinates', - 'vaccinating', - 'vaccination', - 'vaccinations', - 'vaccinator', - 'vaccinators', - 'vacillated', - 'vacillates', - 'vacillating', - 'vacillatingly', - 'vacillation', - 'vacillations', - 'vacillator', - 'vacillators', - 'vacuolated', - 'vacuolation', - 'vacuolations', - 'vacuousness', - 'vacuousnesses', - 'vagabondage', - 'vagabondages', - 'vagabonded', - 'vagabonding', - 'vagabondish', - 'vagabondism', - 'vagabondisms', - 'vagariously', - 'vagilities', - 'vaginismus', - 'vaginismuses', - 'vaginitises', - 'vagotomies', - 'vagotonias', - 'vagrancies', - 'vaguenesses', - 'vainglories', - 'vainglorious', - 'vaingloriously', - 'vaingloriousness', - 'vaingloriousnesses', - 'vainnesses', - 'valediction', - 'valedictions', - 'valedictorian', - 'valedictorians', - 'valedictories', - 'valedictory', - 'valentines', - 'valetudinarian', - 'valetudinarianism', - 'valetudinarianisms', - 'valetudinarians', - 'valetudinaries', - 'valetudinary', - 'valiancies', - 'valiantness', - 'valiantnesses', - 'validating', - 'validation', - 'validations', - 'validities', - 'valleculae', - 'vallecular', - 'valorising', - 'valorization', - 'valorizations', - 'valorizing', - 'valorously', - 'valpolicella', - 'valpolicellas', - 'valuableness', - 'valuablenesses', - 'valuational', - 'valuationally', - 'valuations', - 'valuelessness', - 'valuelessnesses', - 'valvulites', - 'valvulitides', - 'valvulitis', - 'valvulitises', - 'vampirisms', - 'vanaspatis', - 'vandalised', - 'vandalises', - 'vandalising', - 'vandalisms', - 'vandalistic', - 'vandalization', - 'vandalizations', - 'vandalized', - 'vandalizes', - 'vandalizing', - 'vanguardism', - 'vanguardisms', - 'vanguardist', - 'vanguardists', - 'vanishingly', - 'vanitories', - 'vanpooling', - 'vanpoolings', - 'vanquishable', - 'vanquished', - 'vanquisher', - 'vanquishers', - 'vanquishes', - 'vanquishing', - 'vapidities', - 'vapidnesses', - 'vaporettos', - 'vaporishness', - 'vaporishnesses', - 'vaporising', - 'vaporizable', - 'vaporization', - 'vaporizations', - 'vaporizers', - 'vaporizing', - 'vaporously', - 'vaporousness', - 'vaporousnesses', - 'vaporwares', - 'variabilities', - 'variability', - 'variableness', - 'variablenesses', - 'variational', - 'variationally', - 'variations', - 'varicellas', - 'varicocele', - 'varicoceles', - 'varicolored', - 'varicosities', - 'varicosity', - 'variegated', - 'variegates', - 'variegating', - 'variegation', - 'variegations', - 'variegator', - 'variegators', - 'variometer', - 'variometers', - 'variousness', - 'variousnesses', - 'varletries', - 'varnishers', - 'varnishing', - 'vascularities', - 'vascularity', - 'vascularization', - 'vascularizations', - 'vasculature', - 'vasculatures', - 'vasculitides', - 'vasculitis', - 'vasectomies', - 'vasectomize', - 'vasectomized', - 'vasectomizes', - 'vasectomizing', - 'vasoactive', - 'vasoactivities', - 'vasoactivity', - 'vasoconstriction', - 'vasoconstrictions', - 'vasoconstrictive', - 'vasoconstrictor', - 'vasoconstrictors', - 'vasodilatation', - 'vasodilatations', - 'vasodilation', - 'vasodilations', - 'vasodilator', - 'vasodilators', - 'vasopressin', - 'vasopressins', - 'vasopressor', - 'vasopressors', - 'vasospasms', - 'vasospastic', - 'vasotocins', - 'vasotomies', - 'vassalages', - 'vastitudes', - 'vastnesses', - 'vaticinate', - 'vaticinated', - 'vaticinates', - 'vaticinating', - 'vaticination', - 'vaticinations', - 'vaticinator', - 'vaticinators', - 'vaudeville', - 'vaudevilles', - 'vaudevillian', - 'vaudevillians', - 'vaultingly', - 'vauntingly', - 'vectorially', - 'vegetables', - 'vegetarian', - 'vegetarianism', - 'vegetarianisms', - 'vegetarians', - 'vegetating', - 'vegetation', - 'vegetational', - 'vegetations', - 'vegetative', - 'vegetatively', - 'vegetativeness', - 'vegetativenesses', - 'vehemences', - 'vehemently', - 'velarization', - 'velarizations', - 'velarizing', - 'velleities', - 'velocimeter', - 'velocimeters', - 'velocipede', - 'velocipedes', - 'velocities', - 'velodromes', - 'velveteens', - 'velvetlike', - 'venalities', - 'vendibilities', - 'vendibility', - 'veneerings', - 'venenating', - 'venerabilities', - 'venerability', - 'venerableness', - 'venerablenesses', - 'venerating', - 'veneration', - 'venerations', - 'venerators', - 'venesection', - 'venesections', - 'vengeances', - 'vengefully', - 'vengefulness', - 'vengefulnesses', - 'venialness', - 'venialnesses', - 'venipuncture', - 'venipunctures', - 'venographies', - 'venography', - 'venomously', - 'venomousness', - 'venomousnesses', - 'venosities', - 'ventifacts', - 'ventilated', - 'ventilates', - 'ventilating', - 'ventilation', - 'ventilations', - 'ventilator', - 'ventilators', - 'ventilatory', - 'ventricles', - 'ventricose', - 'ventricular', - 'ventriculi', - 'ventriculus', - 'ventriloquial', - 'ventriloquially', - 'ventriloquies', - 'ventriloquism', - 'ventriloquisms', - 'ventriloquist', - 'ventriloquistic', - 'ventriloquists', - 'ventriloquize', - 'ventriloquized', - 'ventriloquizes', - 'ventriloquizing', - 'ventriloquy', - 'ventrolateral', - 'ventromedial', - 'venturesome', - 'venturesomely', - 'venturesomeness', - 'venturesomenesses', - 'venturously', - 'venturousness', - 'venturousnesses', - 'veraciously', - 'veraciousness', - 'veraciousnesses', - 'veracities', - 'verandahed', - 'verapamils', - 'veratridine', - 'veratridines', - 'veratrines', - 'verbalisms', - 'verbalistic', - 'verbalists', - 'verbalization', - 'verbalizations', - 'verbalized', - 'verbalizer', - 'verbalizers', - 'verbalizes', - 'verbalizing', - 'verbicides', - 'verbifying', - 'verbigeration', - 'verbigerations', - 'verboseness', - 'verbosenesses', - 'verbosities', - 'verdancies', - 'verdigrises', - 'veridicalities', - 'veridicality', - 'veridically', - 'verifiabilities', - 'verifiability', - 'verifiable', - 'verifiableness', - 'verifiablenesses', - 'verification', - 'verifications', - 'verisimilar', - 'verisimilarly', - 'verisimilitude', - 'verisimilitudes', - 'verisimilitudinous', - 'veritableness', - 'veritablenesses', - 'vermicelli', - 'vermicellis', - 'vermicides', - 'vermicular', - 'vermiculate', - 'vermiculated', - 'vermiculation', - 'vermiculations', - 'vermiculite', - 'vermiculites', - 'vermifuges', - 'vermilions', - 'vermillion', - 'vermillions', - 'vernacular', - 'vernacularism', - 'vernacularisms', - 'vernacularly', - 'vernaculars', - 'vernalization', - 'vernalizations', - 'vernalized', - 'vernalizes', - 'vernalizing', - 'vernations', - 'vernissage', - 'vernissages', - 'versatilely', - 'versatileness', - 'versatilenesses', - 'versatilities', - 'versatility', - 'versicular', - 'versification', - 'versifications', - 'versifiers', - 'versifying', - 'vertebrate', - 'vertebrates', - 'verticalities', - 'verticality', - 'vertically', - 'verticalness', - 'verticalnesses', - 'verticillate', - 'vertigines', - 'vertiginous', - 'vertiginously', - 'vesicating', - 'vesicularities', - 'vesicularity', - 'vesiculate', - 'vesiculated', - 'vesiculates', - 'vesiculating', - 'vesiculation', - 'vesiculations', - 'vespertilian', - 'vespertine', - 'vespiaries', - 'vestiaries', - 'vestibular', - 'vestibuled', - 'vestibules', - 'vestigially', - 'vestmental', - 'vesuvianite', - 'vesuvianites', - 'vetchlings', - 'veterinarian', - 'veterinarians', - 'veterinaries', - 'veterinary', - 'vexatiously', - 'vexatiousness', - 'vexatiousnesses', - 'vexillologic', - 'vexillological', - 'vexillologies', - 'vexillologist', - 'vexillologists', - 'vexillology', - 'viabilities', - 'vibraharpist', - 'vibraharpists', - 'vibraharps', - 'vibrancies', - 'vibraphone', - 'vibraphones', - 'vibraphonist', - 'vibraphonists', - 'vibrational', - 'vibrationless', - 'vibrations', - 'vibratoless', - 'vicariance', - 'vicariances', - 'vicariants', - 'vicariates', - 'vicariously', - 'vicariousness', - 'vicariousnesses', - 'vicarships', - 'vicegerencies', - 'vicegerency', - 'vicegerent', - 'vicegerents', - 'viceregally', - 'vicereines', - 'viceroyalties', - 'viceroyalty', - 'viceroyship', - 'viceroyships', - 'vichyssoise', - 'vichyssoises', - 'vicinities', - 'viciousness', - 'viciousnesses', - 'vicissitude', - 'vicissitudes', - 'vicissitudinous', - 'victimhood', - 'victimhoods', - 'victimised', - 'victimises', - 'victimising', - 'victimization', - 'victimizations', - 'victimized', - 'victimizer', - 'victimizers', - 'victimizes', - 'victimizing', - 'victimless', - 'victimologies', - 'victimologist', - 'victimologists', - 'victimology', - 'victorious', - 'victoriously', - 'victoriousness', - 'victoriousnesses', - 'victresses', - 'victualers', - 'victualing', - 'victualled', - 'victualler', - 'victuallers', - 'victualling', - 'videocassette', - 'videocassettes', - 'videoconference', - 'videoconferences', - 'videoconferencing', - 'videoconferencings', - 'videodiscs', - 'videodisks', - 'videographer', - 'videographers', - 'videographies', - 'videography', - 'videolands', - 'videophile', - 'videophiles', - 'videophone', - 'videophones', - 'videotaped', - 'videotapes', - 'videotaping', - 'videotexes', - 'videotexts', - 'viewership', - 'viewerships', - 'viewfinder', - 'viewfinders', - 'viewlessly', - 'viewpoints', - 'vigilances', - 'vigilantes', - 'vigilantism', - 'vigilantisms', - 'vigilantly', - 'vigintillion', - 'vigintillions', - 'vignetters', - 'vignetting', - 'vignettist', - 'vignettists', - 'vigorishes', - 'vigorously', - 'vigorousness', - 'vigorousnesses', - 'vilenesses', - 'vilification', - 'vilifications', - 'vilipended', - 'vilipending', - 'villageries', - 'villainess', - 'villainesses', - 'villainies', - 'villainous', - 'villainously', - 'villainousness', - 'villainousnesses', - 'villanella', - 'villanelle', - 'villanelles', - 'villenages', - 'villosities', - 'vinaigrette', - 'vinaigrettes', - 'vinblastine', - 'vinblastines', - 'vincristine', - 'vincristines', - 'vindicable', - 'vindicated', - 'vindicates', - 'vindicating', - 'vindication', - 'vindications', - 'vindicative', - 'vindicator', - 'vindicators', - 'vindicatory', - 'vindictive', - 'vindictively', - 'vindictiveness', - 'vindictivenesses', - 'vinedresser', - 'vinedressers', - 'vinegarish', - 'vineyardist', - 'vineyardists', - 'viniculture', - 'vinicultures', - 'vinification', - 'vinifications', - 'vinosities', - 'vinylidene', - 'vinylidenes', - 'violabilities', - 'violability', - 'violableness', - 'violablenesses', - 'violaceous', - 'violations', - 'violinistic', - 'violinists', - 'violoncelli', - 'violoncellist', - 'violoncellists', - 'violoncello', - 'violoncellos', - 'viperously', - 'viraginous', - 'virescence', - 'virescences', - 'virginalist', - 'virginalists', - 'virginally', - 'virginities', - 'viridescent', - 'viridities', - 'virilities', - 'virological', - 'virologically', - 'virologies', - 'virologist', - 'virologists', - 'virtualities', - 'virtuality', - 'virtueless', - 'virtuosities', - 'virtuosity', - 'virtuously', - 'virtuousness', - 'virtuousnesses', - 'virulences', - 'virulencies', - 'virulently', - 'viruliferous', - 'viscerally', - 'viscidities', - 'viscoelastic', - 'viscoelasticities', - 'viscoelasticity', - 'viscometer', - 'viscometers', - 'viscometric', - 'viscometries', - 'viscometry', - 'viscosimeter', - 'viscosimeters', - 'viscosimetric', - 'viscosities', - 'viscountcies', - 'viscountcy', - 'viscountess', - 'viscountesses', - 'viscounties', - 'viscousness', - 'viscousnesses', - 'visibilities', - 'visibility', - 'visibleness', - 'visiblenesses', - 'visionally', - 'visionaries', - 'visionariness', - 'visionarinesses', - 'visionless', - 'visitation', - 'visitations', - 'visitatorial', - 'visualised', - 'visualises', - 'visualising', - 'visualization', - 'visualizations', - 'visualized', - 'visualizer', - 'visualizers', - 'visualizes', - 'visualizing', - 'vitalising', - 'vitalistic', - 'vitalities', - 'vitalization', - 'vitalizations', - 'vitalizing', - 'vitellogeneses', - 'vitellogenesis', - 'vitelluses', - 'vitiations', - 'viticultural', - 'viticulturally', - 'viticulture', - 'viticultures', - 'viticulturist', - 'viticulturists', - 'vitrectomies', - 'vitrectomy', - 'vitreouses', - 'vitrifiable', - 'vitrification', - 'vitrifications', - 'vitrifying', - 'vitrioling', - 'vitriolled', - 'vitriolling', - 'vituperate', - 'vituperated', - 'vituperates', - 'vituperating', - 'vituperation', - 'vituperations', - 'vituperative', - 'vituperatively', - 'vituperator', - 'vituperators', - 'vituperatory', - 'vivaciously', - 'vivaciousness', - 'vivaciousnesses', - 'vivacities', - 'vivandiere', - 'vivandieres', - 'vividnesses', - 'vivification', - 'vivifications', - 'viviparities', - 'viviparity', - 'viviparous', - 'viviparously', - 'vivisected', - 'vivisecting', - 'vivisection', - 'vivisectional', - 'vivisectionist', - 'vivisectionists', - 'vivisections', - 'vivisector', - 'vivisectors', - 'vizierates', - 'viziership', - 'vizierships', - 'vocabularies', - 'vocabulary', - 'vocalically', - 'vocalising', - 'vocalities', - 'vocalization', - 'vocalizations', - 'vocalizers', - 'vocalizing', - 'vocational', - 'vocationalism', - 'vocationalisms', - 'vocationalist', - 'vocationalists', - 'vocationally', - 'vocatively', - 'vociferant', - 'vociferate', - 'vociferated', - 'vociferates', - 'vociferating', - 'vociferation', - 'vociferations', - 'vociferator', - 'vociferators', - 'vociferous', - 'vociferously', - 'vociferousness', - 'vociferousnesses', - 'voguishness', - 'voguishnesses', - 'voicefulness', - 'voicefulnesses', - 'voicelessly', - 'voicelessness', - 'voicelessnesses', - 'voiceprint', - 'voiceprints', - 'voidableness', - 'voidablenesses', - 'voidnesses', - 'volatileness', - 'volatilenesses', - 'volatilise', - 'volatilised', - 'volatilises', - 'volatilising', - 'volatilities', - 'volatility', - 'volatilizable', - 'volatilization', - 'volatilizations', - 'volatilize', - 'volatilized', - 'volatilizes', - 'volatilizing', - 'volcanically', - 'volcanicities', - 'volcanicity', - 'volcanisms', - 'volcanologic', - 'volcanological', - 'volcanologies', - 'volcanologist', - 'volcanologists', - 'volcanology', - 'volitional', - 'volkslieder', - 'volleyball', - 'volleyballs', - 'volplaning', - 'voltmeters', - 'volubilities', - 'volubility', - 'volubleness', - 'volublenesses', - 'volumeters', - 'volumetric', - 'volumetrically', - 'voluminosities', - 'voluminosity', - 'voluminous', - 'voluminously', - 'voluminousness', - 'voluminousnesses', - 'voluntaries', - 'voluntarily', - 'voluntariness', - 'voluntarinesses', - 'voluntarism', - 'voluntarisms', - 'voluntarist', - 'voluntaristic', - 'voluntarists', - 'voluntaryism', - 'voluntaryisms', - 'voluntaryist', - 'voluntaryists', - 'volunteered', - 'volunteering', - 'volunteerism', - 'volunteerisms', - 'volunteers', - 'voluptuaries', - 'voluptuary', - 'voluptuous', - 'voluptuously', - 'voluptuousness', - 'voluptuousnesses', - 'volvuluses', - 'vomitories', - 'voodooisms', - 'voodooistic', - 'voodooists', - 'voraciously', - 'voraciousness', - 'voraciousnesses', - 'voracities', - 'vortically', - 'vorticella', - 'vorticellae', - 'vorticellas', - 'vorticisms', - 'vorticists', - 'vorticities', - 'votaresses', - 'votiveness', - 'votivenesses', - 'vouchering', - 'vouchsafed', - 'vouchsafement', - 'vouchsafements', - 'vouchsafes', - 'vouchsafing', - 'vowelizing', - 'voyeurisms', - 'voyeuristic', - 'voyeuristically', - 'vulcanicities', - 'vulcanicity', - 'vulcanisate', - 'vulcanisates', - 'vulcanisation', - 'vulcanisations', - 'vulcanised', - 'vulcanises', - 'vulcanising', - 'vulcanisms', - 'vulcanizate', - 'vulcanizates', - 'vulcanization', - 'vulcanizations', - 'vulcanized', - 'vulcanizer', - 'vulcanizers', - 'vulcanizes', - 'vulcanizing', - 'vulcanologies', - 'vulcanologist', - 'vulcanologists', - 'vulcanology', - 'vulgarians', - 'vulgarised', - 'vulgarises', - 'vulgarising', - 'vulgarisms', - 'vulgarities', - 'vulgarization', - 'vulgarizations', - 'vulgarized', - 'vulgarizer', - 'vulgarizers', - 'vulgarizes', - 'vulgarizing', - 'vulnerabilities', - 'vulnerability', - 'vulnerable', - 'vulnerableness', - 'vulnerablenesses', - 'vulnerably', - 'vulneraries', - 'vulvitises', - 'vulvovaginitis', - 'vulvovaginitises', - 'wackinesses', - 'wadsetting', - 'wafflestomper', - 'wafflestompers', - 'wageworker', - 'wageworkers', - 'waggishness', - 'waggishnesses', - 'wagonettes', - 'wainscoted', - 'wainscoting', - 'wainscotings', - 'wainscotted', - 'wainscotting', - 'wainscottings', - 'wainwright', - 'wainwrights', - 'waistbands', - 'waistcoated', - 'waistcoats', - 'waistlines', - 'waitperson', - 'waitpersons', - 'waitressed', - 'waitresses', - 'waitressing', - 'wakefulness', - 'wakefulnesses', - 'walkabouts', - 'walkathons', - 'walkingstick', - 'walkingsticks', - 'wallboards', - 'wallflower', - 'wallflowers', - 'wallpapered', - 'wallpapering', - 'wallpapers', - 'wallydraigle', - 'wallydraigles', - 'wampishing', - 'wampumpeag', - 'wampumpeags', - 'wanderings', - 'wanderlust', - 'wanderlusts', - 'wantonness', - 'wantonnesses', - 'wapentakes', - 'wappenschawing', - 'wappenschawings', - 'warbonnets', - 'wardenries', - 'wardenship', - 'wardenships', - 'wardresses', - 'warehoused', - 'warehouseman', - 'warehousemen', - 'warehouser', - 'warehousers', - 'warehouses', - 'warehousing', - 'warinesses', - 'warlordism', - 'warlordisms', - 'warmblooded', - 'warmhearted', - 'warmheartedness', - 'warmheartednesses', - 'warmnesses', - 'warmongering', - 'warmongerings', - 'warmongers', - 'warrantable', - 'warrantableness', - 'warrantablenesses', - 'warrantably', - 'warrantees', - 'warranters', - 'warranties', - 'warranting', - 'warrantless', - 'warrantors', - 'washabilities', - 'washability', - 'washateria', - 'washaterias', - 'washbasins', - 'washboards', - 'washcloths', - 'washerwoman', - 'washerwomen', - 'washeteria', - 'washeterias', - 'washhouses', - 'washstands', - 'waspishness', - 'waspishnesses', - 'wassailers', - 'wassailing', - 'wastebasket', - 'wastebaskets', - 'wastefully', - 'wastefulness', - 'wastefulnesses', - 'wastelands', - 'wastepaper', - 'wastepapers', - 'wastewater', - 'wastewaters', - 'watchables', - 'watchbands', - 'watchcases', - 'watchcries', - 'watchdogged', - 'watchdogging', - 'watchfully', - 'watchfulness', - 'watchfulnesses', - 'watchmaker', - 'watchmakers', - 'watchmaking', - 'watchmakings', - 'watchtower', - 'watchtowers', - 'watchwords', - 'waterbirds', - 'waterborne', - 'waterbucks', - 'watercolor', - 'watercolorist', - 'watercolorists', - 'watercolors', - 'watercooler', - 'watercoolers', - 'watercourse', - 'watercourses', - 'watercraft', - 'watercrafts', - 'watercress', - 'watercresses', - 'waterfalls', - 'waterflood', - 'waterflooded', - 'waterflooding', - 'waterfloods', - 'waterfowler', - 'waterfowlers', - 'waterfowling', - 'waterfowlings', - 'waterfowls', - 'waterfront', - 'waterfronts', - 'wateriness', - 'waterinesses', - 'waterishness', - 'waterishnesses', - 'waterleafs', - 'waterlessness', - 'waterlessnesses', - 'waterlines', - 'waterlogged', - 'waterlogging', - 'watermanship', - 'watermanships', - 'watermarked', - 'watermarking', - 'watermarks', - 'watermelon', - 'watermelons', - 'waterpower', - 'waterpowers', - 'waterproof', - 'waterproofed', - 'waterproofer', - 'waterproofers', - 'waterproofing', - 'waterproofings', - 'waterproofness', - 'waterproofnesses', - 'waterproofs', - 'waterscape', - 'waterscapes', - 'watersheds', - 'watersides', - 'waterskiing', - 'waterskiings', - 'waterspout', - 'waterspouts', - 'waterthrush', - 'waterthrushes', - 'watertight', - 'watertightness', - 'watertightnesses', - 'waterweeds', - 'waterwheel', - 'waterwheels', - 'waterworks', - 'waterzoois', - 'wattlebird', - 'wattlebirds', - 'wattmeters', - 'waveguides', - 'wavelength', - 'wavelengths', - 'wavelessly', - 'waveringly', - 'waveshapes', - 'wavinesses', - 'waxberries', - 'waxinesses', - 'waywardness', - 'waywardnesses', - 'weakfishes', - 'weakhearted', - 'weakliness', - 'weaklinesses', - 'weaknesses', - 'wealthiest', - 'wealthiness', - 'wealthinesses', - 'weaponless', - 'weaponries', - 'wearabilities', - 'wearability', - 'wearifully', - 'wearifulness', - 'wearifulnesses', - 'wearilessly', - 'wearinesses', - 'wearisomely', - 'wearisomeness', - 'wearisomenesses', - 'weaselling', - 'weatherabilities', - 'weatherability', - 'weatherboard', - 'weatherboarded', - 'weatherboarding', - 'weatherboardings', - 'weatherboards', - 'weathercast', - 'weathercaster', - 'weathercasters', - 'weathercasts', - 'weathercock', - 'weathercocks', - 'weatherglass', - 'weatherglasses', - 'weathering', - 'weatherings', - 'weatherization', - 'weatherizations', - 'weatherize', - 'weatherized', - 'weatherizes', - 'weatherizing', - 'weatherman', - 'weathermen', - 'weatherperson', - 'weatherpersons', - 'weatherproof', - 'weatherproofed', - 'weatherproofing', - 'weatherproofness', - 'weatherproofnesses', - 'weatherproofs', - 'weatherworn', - 'weaverbird', - 'weaverbirds', - 'weedinesses', - 'weekenders', - 'weekending', - 'weeknights', - 'weightiest', - 'weightiness', - 'weightinesses', - 'weightless', - 'weightlessly', - 'weightlessness', - 'weightlessnesses', - 'weightlifter', - 'weightlifters', - 'weightlifting', - 'weightliftings', - 'weimaraner', - 'weimaraners', - 'weirdnesses', - 'weisenheimer', - 'weisenheimers', - 'welcomeness', - 'welcomenesses', - 'welfarisms', - 'welfarists', - 'wellnesses', - 'wellspring', - 'wellsprings', - 'weltanschauung', - 'weltanschauungen', - 'weltanschauungs', - 'welterweight', - 'welterweights', - 'weltschmerz', - 'weltschmerzes', - 'wentletrap', - 'wentletraps', - 'werewolves', - 'westerlies', - 'westerners', - 'westernisation', - 'westernisations', - 'westernise', - 'westernised', - 'westernises', - 'westernising', - 'westernization', - 'westernizations', - 'westernize', - 'westernized', - 'westernizes', - 'westernizing', - 'westernmost', - 'wettabilities', - 'wettability', - 'whalebacks', - 'whaleboats', - 'whalebones', - 'wharfinger', - 'wharfingers', - 'wharfmaster', - 'wharfmasters', - 'whatchamacallit', - 'whatchamacallits', - 'whatnesses', - 'whatsoever', - 'wheelbarrow', - 'wheelbarrowed', - 'wheelbarrowing', - 'wheelbarrows', - 'wheelbases', - 'wheelchair', - 'wheelchairs', - 'wheelhorse', - 'wheelhorses', - 'wheelhouse', - 'wheelhouses', - 'wheelworks', - 'wheelwright', - 'wheelwrights', - 'wheeziness', - 'wheezinesses', - 'whencesoever', - 'whensoever', - 'whereabout', - 'whereabouts', - 'wherefores', - 'wheresoever', - 'wherethrough', - 'wherewithal', - 'wherewithals', - 'whetstones', - 'whichsoever', - 'whickering', - 'whiffletree', - 'whiffletrees', - 'whigmaleerie', - 'whigmaleeries', - 'whimpering', - 'whimsicalities', - 'whimsicality', - 'whimsically', - 'whimsicalness', - 'whimsicalnesses', - 'whinstones', - 'whiplashes', - 'whippersnapper', - 'whippersnappers', - 'whippletree', - 'whippletrees', - 'whippoorwill', - 'whippoorwills', - 'whipsawing', - 'whipstitch', - 'whipstitched', - 'whipstitches', - 'whipstitching', - 'whipstocks', - 'whirligigs', - 'whirlpools', - 'whirlwinds', - 'whirlybird', - 'whirlybirds', - 'whisperers', - 'whispering', - 'whisperingly', - 'whisperings', - 'whistleable', - 'whistleblower', - 'whistleblowers', - 'whistleblowing', - 'whistleblowings', - 'whistlings', - 'whitebaits', - 'whitebeard', - 'whitebeards', - 'whitefaces', - 'whitefishes', - 'whiteflies', - 'whiteheads', - 'whitenesses', - 'whitenings', - 'whitesmith', - 'whitesmiths', - 'whitetails', - 'whitethroat', - 'whitethroats', - 'whitewalls', - 'whitewashed', - 'whitewasher', - 'whitewashers', - 'whitewashes', - 'whitewashing', - 'whitewashings', - 'whitewings', - 'whitewoods', - 'whithersoever', - 'whitherward', - 'whittlings', - 'whizzbangs', - 'whodunnits', - 'wholehearted', - 'wholeheartedly', - 'wholenesses', - 'wholesaled', - 'wholesaler', - 'wholesalers', - 'wholesales', - 'wholesaling', - 'wholesomely', - 'wholesomeness', - 'wholesomenesses', - 'whomsoever', - 'whorehouse', - 'whorehouses', - 'whoremaster', - 'whoremasters', - 'whoremonger', - 'whoremongers', - 'whortleberries', - 'whortleberry', - 'whosesoever', - 'wickedness', - 'wickednesses', - 'wickerwork', - 'wickerworks', - 'widdershins', - 'wideawakes', - 'widemouthed', - 'widenesses', - 'widespread', - 'widowerhood', - 'widowerhoods', - 'widowhoods', - 'wienerwurst', - 'wienerwursts', - 'wifeliness', - 'wifelinesses', - 'wigwagging', - 'wildcatted', - 'wildcatter', - 'wildcatters', - 'wildcatting', - 'wildebeest', - 'wildebeests', - 'wilderment', - 'wilderments', - 'wilderness', - 'wildernesses', - 'wildflower', - 'wildflowers', - 'wildfowler', - 'wildfowlers', - 'wildfowling', - 'wildfowlings', - 'wildnesses', - 'wilinesses', - 'willemites', - 'willfulness', - 'willfulnesses', - 'willingest', - 'willingness', - 'willingnesses', - 'willowiest', - 'willowlike', - 'willowware', - 'willowwares', - 'willpowers', - 'wimpinesses', - 'wimpishness', - 'wimpishnesses', - 'windblasts', - 'windbreaker', - 'windbreakers', - 'windbreaks', - 'windburned', - 'windburning', - 'windchills', - 'windflower', - 'windflowers', - 'windhovers', - 'windinesses', - 'windjammer', - 'windjammers', - 'windjamming', - 'windjammings', - 'windlassed', - 'windlasses', - 'windlassing', - 'windlessly', - 'windlestraw', - 'windlestraws', - 'windmilled', - 'windmilling', - 'windowless', - 'windowpane', - 'windowpanes', - 'windowsill', - 'windowsills', - 'windrowing', - 'windscreen', - 'windscreens', - 'windshield', - 'windshields', - 'windstorms', - 'windsurfed', - 'windsurfing', - 'windsurfings', - 'windthrows', - 'wineglasses', - 'winegrower', - 'winegrowers', - 'winemakers', - 'winemaking', - 'winemakings', - 'winepresses', - 'winglessness', - 'winglessnesses', - 'wingspread', - 'wingspreads', - 'winsomeness', - 'winsomenesses', - 'winterberries', - 'winterberry', - 'wintergreen', - 'wintergreens', - 'winteriest', - 'winterization', - 'winterizations', - 'winterized', - 'winterizes', - 'winterizing', - 'winterkill', - 'winterkills', - 'wintertide', - 'wintertides', - 'wintertime', - 'wintertimes', - 'wintriness', - 'wintrinesses', - 'wiredrawer', - 'wiredrawers', - 'wiredrawing', - 'wirehaired', - 'wirelessed', - 'wirelesses', - 'wirelessing', - 'wirephotos', - 'wiretapped', - 'wiretapper', - 'wiretappers', - 'wiretapping', - 'wirinesses', - 'wisecracked', - 'wisecracker', - 'wisecrackers', - 'wisecracking', - 'wisecracks', - 'wisenesses', - 'wisenheimer', - 'wisenheimers', - 'wishfulness', - 'wishfulnesses', - 'wispinesses', - 'wistfulness', - 'wistfulnesses', - 'witchcraft', - 'witchcrafts', - 'witcheries', - 'witchgrass', - 'witchgrasses', - 'witchweeds', - 'witenagemot', - 'witenagemote', - 'witenagemotes', - 'witenagemots', - 'withdrawable', - 'withdrawal', - 'withdrawals', - 'withdrawing', - 'withdrawnness', - 'withdrawnnesses', - 'witheringly', - 'witherites', - 'withershins', - 'withholder', - 'withholders', - 'withholding', - 'withindoors', - 'withoutdoors', - 'withstanding', - 'withstands', - 'witlessness', - 'witlessnesses', - 'witnessing', - 'witticisms', - 'wittinesses', - 'wizardries', - 'wobbliness', - 'wobblinesses', - 'woebegoneness', - 'woebegonenesses', - 'woefullest', - 'woefulness', - 'woefulnesses', - 'wolfberries', - 'wolffishes', - 'wolfhounds', - 'wolfishness', - 'wolfishnesses', - 'wolframite', - 'wolframites', - 'wolfsbanes', - 'wollastonite', - 'wollastonites', - 'wolverines', - 'womanhoods', - 'womanishly', - 'womanishness', - 'womanishnesses', - 'womanising', - 'womanizers', - 'womanizing', - 'womanliest', - 'womanliness', - 'womanlinesses', - 'womanpower', - 'womanpowers', - 'womenfolks', - 'wonderfully', - 'wonderfulness', - 'wonderfulnesses', - 'wonderland', - 'wonderlands', - 'wonderment', - 'wonderments', - 'wonderwork', - 'wonderworks', - 'wondrously', - 'wondrousness', - 'wondrousnesses', - 'wontedness', - 'wontednesses', - 'woodblocks', - 'woodcarver', - 'woodcarvers', - 'woodcarving', - 'woodcarvings', - 'woodchopper', - 'woodchoppers', - 'woodchucks', - 'woodcrafts', - 'woodcutter', - 'woodcutters', - 'woodcutting', - 'woodcuttings', - 'woodenhead', - 'woodenheaded', - 'woodenheads', - 'woodenness', - 'woodennesses', - 'woodenware', - 'woodenwares', - 'woodinesses', - 'woodlander', - 'woodlanders', - 'woodpecker', - 'woodpeckers', - 'woodshedded', - 'woodshedding', - 'woodstoves', - 'woodworker', - 'woodworkers', - 'woodworking', - 'woodworkings', - 'woolgatherer', - 'woolgatherers', - 'woolgathering', - 'woolgatherings', - 'woolliness', - 'woollinesses', - 'woozinesses', - 'wordinesses', - 'wordlessly', - 'wordlessness', - 'wordlessnesses', - 'wordmonger', - 'wordmongers', - 'wordsmitheries', - 'wordsmithery', - 'wordsmiths', - 'workabilities', - 'workability', - 'workableness', - 'workablenesses', - 'workaholic', - 'workaholics', - 'workaholism', - 'workaholisms', - 'workbasket', - 'workbaskets', - 'workbenches', - 'workforces', - 'workhorses', - 'workhouses', - 'workingman', - 'workingmen', - 'workingwoman', - 'workingwomen', - 'worklessness', - 'worklessnesses', - 'workmanlike', - 'workmanship', - 'workmanships', - 'workpeople', - 'workpieces', - 'workplaces', - 'worksheets', - 'workstation', - 'workstations', - 'worktables', - 'worldliest', - 'worldliness', - 'worldlinesses', - 'worldlings', - 'worldviews', - 'wornnesses', - 'worriments', - 'worrisomely', - 'worrisomeness', - 'worrisomenesses', - 'worrywarts', - 'worshipers', - 'worshipful', - 'worshipfully', - 'worshipfulness', - 'worshipfulnesses', - 'worshiping', - 'worshipless', - 'worshipped', - 'worshipper', - 'worshippers', - 'worshipping', - 'worthiness', - 'worthinesses', - 'worthlessly', - 'worthlessness', - 'worthlessnesses', - 'worthwhile', - 'worthwhileness', - 'worthwhilenesses', - 'wraithlike', - 'wraparound', - 'wraparounds', - 'wrathfully', - 'wrathfulness', - 'wrathfulnesses', - 'wrenchingly', - 'wrestlings', - 'wretcheder', - 'wretchedest', - 'wretchedly', - 'wretchedness', - 'wretchednesses', - 'wriggliest', - 'wrinkliest', - 'wristbands', - 'wristlocks', - 'wristwatch', - 'wristwatches', - 'wrongdoers', - 'wrongdoing', - 'wrongdoings', - 'wrongfully', - 'wrongfulness', - 'wrongfulnesses', - 'wrongheaded', - 'wrongheadedly', - 'wrongheadedness', - 'wrongheadednesses', - 'wrongnesses', - 'wulfenites', - 'wunderkind', - 'wunderkinder', - 'wyandottes', - 'wyliecoats', - 'xanthomata', - 'xanthophyll', - 'xanthophylls', - 'xenobiotic', - 'xenobiotics', - 'xenodiagnoses', - 'xenodiagnosis', - 'xenodiagnostic', - 'xenogamies', - 'xenogeneic', - 'xenogenies', - 'xenografts', - 'xenolithic', - 'xenophiles', - 'xenophobes', - 'xenophobia', - 'xenophobias', - 'xenophobic', - 'xenophobically', - 'xenotropic', - 'xerographic', - 'xerographically', - 'xerographies', - 'xerography', - 'xerophilies', - 'xerophilous', - 'xerophthalmia', - 'xerophthalmias', - 'xerophthalmic', - 'xerophytes', - 'xerophytic', - 'xerophytism', - 'xerophytisms', - 'xeroradiographies', - 'xeroradiography', - 'xerothermic', - 'xiphisterna', - 'xiphisternum', - 'xylographer', - 'xylographers', - 'xylographic', - 'xylographical', - 'xylographies', - 'xylographs', - 'xylography', - 'xylophagous', - 'xylophones', - 'xylophonist', - 'xylophonists', - 'xylotomies', - 'yardmaster', - 'yardmasters', - 'yardsticks', - 'yearningly', - 'yeastiness', - 'yeastinesses', - 'yellowfins', - 'yellowhammer', - 'yellowhammers', - 'yellowlegs', - 'yellowtail', - 'yellowtails', - 'yellowthroat', - 'yellowthroats', - 'yellowware', - 'yellowwares', - 'yellowwood', - 'yellowwoods', - 'yeomanries', - 'yesterdays', - 'yesternight', - 'yesternights', - 'yesteryear', - 'yesteryears', - 'yohimbines', - 'yokefellow', - 'yokefellows', - 'youngberries', - 'youngberry', - 'younglings', - 'youngnesses', - 'youngsters', - 'yourselves', - 'youthening', - 'youthfully', - 'youthfulness', - 'youthfulnesses', - 'youthquake', - 'youthquakes', - 'ytterbiums', - 'zabaglione', - 'zabagliones', - 'zamindaris', - 'zaninesses', - 'zapateados', - 'zealotries', - 'zealousness', - 'zealousnesses', - 'zebrawoods', - 'zeitgebers', - 'zeitgeists', - 'zemindaries', - 'zestfulness', - 'zestfulnesses', - 'zibellines', - 'zidovudine', - 'zidovudines', - 'zigzagging', - 'zillionaire', - 'zillionaires', - 'zincifying', - 'zinfandels', - 'zinkifying', - 'zirconiums', - 'zitherists', - 'zoantharian', - 'zoantharians', - 'zombielike', - 'zombification', - 'zombifications', - 'zombifying', - 'zoogeographer', - 'zoogeographers', - 'zoogeographic', - 'zoogeographical', - 'zoogeographically', - 'zoogeographies', - 'zoogeography', - 'zookeepers', - 'zoolatries', - 'zoological', - 'zoologically', - 'zoologists', - 'zoometries', - 'zoomorphic', - 'zoophilies', - 'zoophilous', - 'zooplankter', - 'zooplankters', - 'zooplankton', - 'zooplanktonic', - 'zooplanktons', - 'zoosporangia', - 'zoosporangium', - 'zoosterols', - 'zootechnical', - 'zootechnics', - 'zooxanthella', - 'zooxanthellae', - 'zucchettos', - 'zwitterion', - 'zwitterionic', - 'zwitterions', - 'zygapophyses', - 'zygapophysis', - 'zygodactyl', - 'zygodactylous', - 'zygomorphic', - 'zygomorphies', - 'zygomorphy', - 'zygosities', - 'zygospores', - 'zymologies', -]; - -const len = scrabble_array.length; -let current_list: List = null; - -for (let i = len - 1; i >= 0; i -= 1) { - current_list = [scrabble_array[i], current_list]; -} - -/** - * `scrabble_list` is a list of strings, each representing - * an allowed word in Scrabble. - */ - -export const scrabble_list = current_list; - -export function charAt(s: string, i: number): any { - const result = s.charAt(i); - return result === '' ? undefined : result; -} - -export function arrayLength(x: any): number { - return x.length; -} +/** + * The `scrabble` Source Module provides the allowable + * words in Scrabble in a list and in an array, according to + * https://github.com/benjamincrom/scrabble/blob/master/scrabble/dictionary.json + * @module scrabble + */ + +import type { List } from './types'; + +/** + * `scrabble_array` is an array of strings, each representing + * an allowed word in Scrabble. + */ + +export const scrabble_array = [ + 'aardwolves', + 'abacterial', + 'abandoners', + 'abandoning', + 'abandonment', + 'abandonments', + 'abasements', + 'abashments', + 'abatements', + 'abbreviate', + 'abbreviated', + 'abbreviates', + 'abbreviating', + 'abbreviation', + 'abbreviations', + 'abbreviator', + 'abbreviators', + 'abdicating', + 'abdication', + 'abdications', + 'abdicators', + 'abdominally', + 'abducentes', + 'abductions', + 'abductores', + 'abecedarian', + 'abecedarians', + 'aberrances', + 'aberrancies', + 'aberrantly', + 'aberration', + 'aberrational', + 'aberrations', + 'abeyancies', + 'abhorrence', + 'abhorrences', + 'abhorrently', + 'abiogeneses', + 'abiogenesis', + 'abiogenically', + 'abiogenist', + 'abiogenists', + 'abiological', + 'abiotically', + 'abjections', + 'abjectness', + 'abjectnesses', + 'abjuration', + 'abjurations', + 'ablatively', + 'ablutionary', + 'abnegating', + 'abnegation', + 'abnegations', + 'abnegators', + 'abnormalities', + 'abnormality', + 'abnormally', + 'abolishable', + 'abolishers', + 'abolishing', + 'abolishment', + 'abolishments', + 'abolitionary', + 'abolitionism', + 'abolitionisms', + 'abolitionist', + 'abolitionists', + 'abolitions', + 'abominable', + 'abominably', + 'abominated', + 'abominates', + 'abominating', + 'abomination', + 'abominations', + 'abominator', + 'abominators', + 'aboriginal', + 'aboriginally', + 'aboriginals', + 'aborigines', + 'abortifacient', + 'abortifacients', + 'abortionist', + 'abortionists', + 'abortively', + 'abortiveness', + 'abortivenesses', + 'aboveboard', + 'aboveground', + 'abracadabra', + 'abracadabras', + 'abrasively', + 'abrasiveness', + 'abrasivenesses', + 'abreacting', + 'abreaction', + 'abreactions', + 'abridgement', + 'abridgements', + 'abridgment', + 'abridgments', + 'abrogating', + 'abrogation', + 'abrogations', + 'abruptions', + 'abruptness', + 'abruptnesses', + 'abscessing', + 'abscission', + 'abscissions', + 'absconders', + 'absconding', + 'absenteeism', + 'absenteeisms', + 'absentminded', + 'absentmindedly', + 'absentmindedness', + 'absentmindednesses', + 'absolutely', + 'absoluteness', + 'absolutenesses', + 'absolutest', + 'absolution', + 'absolutions', + 'absolutism', + 'absolutisms', + 'absolutist', + 'absolutistic', + 'absolutists', + 'absolutive', + 'absolutize', + 'absolutized', + 'absolutizes', + 'absolutizing', + 'absorbabilities', + 'absorbability', + 'absorbable', + 'absorbance', + 'absorbances', + 'absorbancies', + 'absorbancy', + 'absorbants', + 'absorbencies', + 'absorbency', + 'absorbents', + 'absorbingly', + 'absorptance', + 'absorptances', + 'absorption', + 'absorptions', + 'absorptive', + 'absorptivities', + 'absorptivity', + 'absquatulate', + 'absquatulated', + 'absquatulates', + 'absquatulating', + 'abstainers', + 'abstaining', + 'abstemious', + 'abstemiously', + 'abstemiousness', + 'abstemiousnesses', + 'abstention', + 'abstentions', + 'abstentious', + 'absterging', + 'abstinence', + 'abstinences', + 'abstinently', + 'abstractable', + 'abstracted', + 'abstractedly', + 'abstractedness', + 'abstractednesses', + 'abstracter', + 'abstracters', + 'abstractest', + 'abstracting', + 'abstraction', + 'abstractional', + 'abstractionism', + 'abstractionisms', + 'abstractionist', + 'abstractionists', + 'abstractions', + 'abstractive', + 'abstractly', + 'abstractness', + 'abstractnesses', + 'abstractor', + 'abstractors', + 'abstricted', + 'abstricting', + 'abstrusely', + 'abstruseness', + 'abstrusenesses', + 'abstrusest', + 'abstrusities', + 'abstrusity', + 'absurdisms', + 'absurdists', + 'absurdities', + 'absurdness', + 'absurdnesses', + 'abundances', + 'abundantly', + 'abusiveness', + 'abusivenesses', + 'academical', + 'academically', + 'academician', + 'academicians', + 'academicism', + 'academicisms', + 'academisms', + 'acanthocephalan', + 'acanthocephalans', + 'acanthuses', + 'acaricidal', + 'acaricides', + 'acatalectic', + 'acatalectics', + 'acaulescent', + 'accelerando', + 'accelerandos', + 'accelerant', + 'accelerants', + 'accelerate', + 'accelerated', + 'accelerates', + 'accelerating', + 'acceleratingly', + 'acceleration', + 'accelerations', + 'accelerative', + 'accelerator', + 'accelerators', + 'accelerometer', + 'accelerometers', + 'accentless', + 'accentually', + 'accentuate', + 'accentuated', + 'accentuates', + 'accentuating', + 'accentuation', + 'accentuations', + 'acceptabilities', + 'acceptability', + 'acceptable', + 'acceptableness', + 'acceptablenesses', + 'acceptably', + 'acceptance', + 'acceptances', + 'acceptation', + 'acceptations', + 'acceptedly', + 'acceptingly', + 'acceptingness', + 'acceptingnesses', + 'accessaries', + 'accessibilities', + 'accessibility', + 'accessible', + 'accessibleness', + 'accessiblenesses', + 'accessibly', + 'accessional', + 'accessioned', + 'accessioning', + 'accessions', + 'accessorial', + 'accessories', + 'accessorise', + 'accessorised', + 'accessorises', + 'accessorising', + 'accessorize', + 'accessorized', + 'accessorizes', + 'accessorizing', + 'acciaccatura', + 'acciaccaturas', + 'accidences', + 'accidental', + 'accidentally', + 'accidentalness', + 'accidentalnesses', + 'accidentals', + 'accidently', + 'accipiters', + 'accipitrine', + 'accipitrines', + 'acclaimers', + 'acclaiming', + 'acclamation', + 'acclamations', + 'acclimated', + 'acclimates', + 'acclimating', + 'acclimation', + 'acclimations', + 'acclimatise', + 'acclimatised', + 'acclimatises', + 'acclimatising', + 'acclimatization', + 'acclimatizations', + 'acclimatize', + 'acclimatized', + 'acclimatizer', + 'acclimatizers', + 'acclimatizes', + 'acclimatizing', + 'acclivities', + 'accommodate', + 'accommodated', + 'accommodates', + 'accommodating', + 'accommodatingly', + 'accommodation', + 'accommodational', + 'accommodationist', + 'accommodationists', + 'accommodations', + 'accommodative', + 'accommodativeness', + 'accommodativenesses', + 'accommodator', + 'accommodators', + 'accompanied', + 'accompanies', + 'accompaniment', + 'accompaniments', + 'accompanist', + 'accompanists', + 'accompanying', + 'accomplice', + 'accomplices', + 'accomplish', + 'accomplishable', + 'accomplished', + 'accomplisher', + 'accomplishers', + 'accomplishes', + 'accomplishing', + 'accomplishment', + 'accomplishments', + 'accordance', + 'accordances', + 'accordantly', + 'accordingly', + 'accordionist', + 'accordionists', + 'accordions', + 'accouchement', + 'accouchements', + 'accoucheur', + 'accoucheurs', + 'accountabilities', + 'accountability', + 'accountable', + 'accountableness', + 'accountablenesses', + 'accountably', + 'accountancies', + 'accountancy', + 'accountant', + 'accountants', + 'accountantship', + 'accountantships', + 'accounting', + 'accountings', + 'accoutered', + 'accoutering', + 'accouterment', + 'accouterments', + 'accoutrement', + 'accoutrements', + 'accoutring', + 'accreditable', + 'accreditation', + 'accreditations', + 'accredited', + 'accrediting', + 'accretionary', + 'accretions', + 'accruement', + 'accruements', + 'acculturate', + 'acculturated', + 'acculturates', + 'acculturating', + 'acculturation', + 'acculturational', + 'acculturations', + 'acculturative', + 'accumulate', + 'accumulated', + 'accumulates', + 'accumulating', + 'accumulation', + 'accumulations', + 'accumulative', + 'accumulatively', + 'accumulativeness', + 'accumulativenesses', + 'accumulator', + 'accumulators', + 'accuracies', + 'accurately', + 'accurateness', + 'accuratenesses', + 'accursedly', + 'accursedness', + 'accursednesses', + 'accusation', + 'accusations', + 'accusative', + 'accusatives', + 'accusatory', + 'accusingly', + 'accustomation', + 'accustomations', + 'accustomed', + 'accustomedness', + 'accustomednesses', + 'accustoming', + 'acephalous', + 'acerbating', + 'acerbically', + 'acerbities', + 'acetabular', + 'acetabulum', + 'acetabulums', + 'acetaldehyde', + 'acetaldehydes', + 'acetamides', + 'acetaminophen', + 'acetaminophens', + 'acetanilid', + 'acetanilide', + 'acetanilides', + 'acetanilids', + 'acetazolamide', + 'acetazolamides', + 'acetification', + 'acetifications', + 'acetifying', + 'acetonitrile', + 'acetonitriles', + 'acetophenetidin', + 'acetophenetidins', + 'acetylated', + 'acetylates', + 'acetylating', + 'acetylation', + 'acetylations', + 'acetylative', + 'acetylcholine', + 'acetylcholines', + 'acetylcholinesterase', + 'acetylcholinesterases', + 'acetylenes', + 'acetylenic', + 'acetylsalicylate', + 'acetylsalicylates', + 'achalasias', + 'achievable', + 'achievement', + 'achievements', + 'achinesses', + 'achlorhydria', + 'achlorhydrias', + 'achlorhydric', + 'achondrite', + 'achondrites', + 'achondritic', + 'achondroplasia', + 'achondroplasias', + 'achondroplastic', + 'achromatic', + 'achromatically', + 'achromatism', + 'achromatisms', + 'achromatize', + 'achromatized', + 'achromatizes', + 'achromatizing', + 'acidification', + 'acidifications', + 'acidifiers', + 'acidifying', + 'acidimeter', + 'acidimeters', + 'acidimetric', + 'acidimetries', + 'acidimetry', + 'acidnesses', + 'acidophile', + 'acidophiles', + 'acidophilic', + 'acidophils', + 'acidulated', + 'acidulates', + 'acidulating', + 'acidulation', + 'acidulations', + 'acierating', + 'acknowledge', + 'acknowledged', + 'acknowledgedly', + 'acknowledgement', + 'acknowledgements', + 'acknowledges', + 'acknowledging', + 'acknowledgment', + 'acknowledgments', + 'acoelomate', + 'acoelomates', + 'acoustical', + 'acoustically', + 'acoustician', + 'acousticians', + 'acquaintance', + 'acquaintances', + 'acquaintanceship', + 'acquaintanceships', + 'acquainted', + 'acquainting', + 'acquiesced', + 'acquiescence', + 'acquiescences', + 'acquiescent', + 'acquiescently', + 'acquiesces', + 'acquiescing', + 'acquirable', + 'acquirement', + 'acquirements', + 'acquisition', + 'acquisitional', + 'acquisitions', + 'acquisitive', + 'acquisitively', + 'acquisitiveness', + 'acquisitivenesses', + 'acquisitor', + 'acquisitors', + 'acquittals', + 'acquittance', + 'acquittances', + 'acquitters', + 'acquitting', + 'acridities', + 'acridnesses', + 'acriflavine', + 'acriflavines', + 'acrimonies', + 'acrimonious', + 'acrimoniously', + 'acrimoniousness', + 'acrimoniousnesses', + 'acritarchs', + 'acrobatically', + 'acrobatics', + 'acrocentric', + 'acrocentrics', + 'acromegalic', + 'acromegalics', + 'acromegalies', + 'acromegaly', + 'acronymically', + 'acropetally', + 'acrophobes', + 'acrophobia', + 'acrophobias', + 'acropolises', + 'acrostical', + 'acrostically', + 'acrylamide', + 'acrylamides', + 'acrylonitrile', + 'acrylonitriles', + 'actabilities', + 'actability', + 'actinically', + 'actinolite', + 'actinolites', + 'actinometer', + 'actinometers', + 'actinometric', + 'actinometries', + 'actinometry', + 'actinomorphic', + 'actinomorphies', + 'actinomorphy', + 'actinomyces', + 'actinomycete', + 'actinomycetes', + 'actinomycetous', + 'actinomycin', + 'actinomycins', + 'actinomycoses', + 'actinomycosis', + 'actinomycotic', + 'actionable', + 'actionably', + 'actionless', + 'activating', + 'activation', + 'activations', + 'activators', + 'activeness', + 'activenesses', + 'activistic', + 'activities', + 'activizing', + 'actomyosin', + 'actomyosins', + 'actualities', + 'actualization', + 'actualizations', + 'actualized', + 'actualizes', + 'actualizing', + 'actuarially', + 'actuations', + 'acupressure', + 'acupressures', + 'acupuncture', + 'acupunctures', + 'acupuncturist', + 'acupuncturists', + 'acutenesses', + 'acyclovirs', + 'acylations', + 'adamancies', + 'adamantine', + 'adaptabilities', + 'adaptability', + 'adaptation', + 'adaptational', + 'adaptationally', + 'adaptations', + 'adaptedness', + 'adaptednesses', + 'adaptively', + 'adaptiveness', + 'adaptivenesses', + 'adaptivities', + 'adaptivity', + 'addictions', + 'additional', + 'additionally', + 'additively', + 'additivities', + 'additivity', + 'addlepated', + 'addressabilities', + 'addressability', + 'addressable', + 'addressees', + 'addressers', + 'addressing', + 'adductions', + 'adenitises', + 'adenocarcinoma', + 'adenocarcinomas', + 'adenocarcinomata', + 'adenocarcinomatous', + 'adenohypophyseal', + 'adenohypophyses', + 'adenohypophysial', + 'adenohypophysis', + 'adenomatous', + 'adenosines', + 'adenoviral', + 'adenovirus', + 'adenoviruses', + 'adeptnesses', + 'adequacies', + 'adequately', + 'adequateness', + 'adequatenesses', + 'adherences', + 'adherently', + 'adhesional', + 'adhesively', + 'adhesiveness', + 'adhesivenesses', + 'adhibiting', + 'adiabatically', + 'adipocytes', + 'adiposities', + 'adjacencies', + 'adjacently', + 'adjectival', + 'adjectivally', + 'adjectively', + 'adjectives', + 'adjourning', + 'adjournment', + 'adjournments', + 'adjudicate', + 'adjudicated', + 'adjudicates', + 'adjudicating', + 'adjudication', + 'adjudications', + 'adjudicative', + 'adjudicator', + 'adjudicators', + 'adjudicatory', + 'adjunction', + 'adjunctions', + 'adjunctive', + 'adjuration', + 'adjurations', + 'adjuratory', + 'adjustabilities', + 'adjustability', + 'adjustable', + 'adjustment', + 'adjustmental', + 'adjustments', + 'adjutancies', + 'admeasured', + 'admeasurement', + 'admeasurements', + 'admeasures', + 'admeasuring', + 'administer', + 'administered', + 'administering', + 'administers', + 'administrable', + 'administrant', + 'administrants', + 'administrate', + 'administrated', + 'administrates', + 'administrating', + 'administration', + 'administrations', + 'administrative', + 'administratively', + 'administrator', + 'administrators', + 'administratrices', + 'administratrix', + 'admirabilities', + 'admirability', + 'admirableness', + 'admirablenesses', + 'admiralties', + 'admiration', + 'admirations', + 'admiringly', + 'admissibilities', + 'admissibility', + 'admissible', + 'admissions', + 'admittance', + 'admittances', + 'admittedly', + 'admixtures', + 'admonished', + 'admonisher', + 'admonishers', + 'admonishes', + 'admonishing', + 'admonishingly', + 'admonishment', + 'admonishments', + 'admonition', + 'admonitions', + 'admonitorily', + 'admonitory', + 'adolescence', + 'adolescences', + 'adolescent', + 'adolescently', + 'adolescents', + 'adoptabilities', + 'adoptability', + 'adoptianism', + 'adoptianisms', + 'adoptionism', + 'adoptionisms', + 'adoptionist', + 'adoptionists', + 'adoptively', + 'adorabilities', + 'adorability', + 'adorableness', + 'adorablenesses', + 'adorations', + 'adornments', + 'adrenalectomies', + 'adrenalectomized', + 'adrenalectomy', + 'adrenaline', + 'adrenalines', + 'adrenergic', + 'adrenergically', + 'adrenochrome', + 'adrenochromes', + 'adrenocortical', + 'adrenocorticosteroid', + 'adrenocorticosteroids', + 'adrenocorticotrophic', + 'adrenocorticotrophin', + 'adrenocorticotrophins', + 'adrenocorticotropic', + 'adrenocorticotropin', + 'adrenocorticotropins', + 'adroitness', + 'adroitnesses', + 'adscititious', + 'adsorbable', + 'adsorbates', + 'adsorbents', + 'adsorption', + 'adsorptions', + 'adsorptive', + 'adulations', + 'adulterant', + 'adulterants', + 'adulterate', + 'adulterated', + 'adulterates', + 'adulterating', + 'adulteration', + 'adulterations', + 'adulterator', + 'adulterators', + 'adulterers', + 'adulteress', + 'adulteresses', + 'adulteries', + 'adulterine', + 'adulterous', + 'adulterously', + 'adulthoods', + 'adultnesses', + 'adumbrated', + 'adumbrates', + 'adumbrating', + 'adumbration', + 'adumbrations', + 'adumbrative', + 'adumbratively', + 'advancement', + 'advancements', + 'advantaged', + 'advantageous', + 'advantageously', + 'advantageousness', + 'advantageousnesses', + 'advantages', + 'advantaging', + 'advections', + 'adventitia', + 'adventitial', + 'adventitias', + 'adventitious', + 'adventitiously', + 'adventives', + 'adventured', + 'adventurer', + 'adventurers', + 'adventures', + 'adventuresome', + 'adventuresomeness', + 'adventuresomenesses', + 'adventuress', + 'adventuresses', + 'adventuring', + 'adventurism', + 'adventurisms', + 'adventurist', + 'adventuristic', + 'adventurists', + 'adventurous', + 'adventurously', + 'adventurousness', + 'adventurousnesses', + 'adverbially', + 'adverbials', + 'adversarial', + 'adversaries', + 'adversariness', + 'adversarinesses', + 'adversative', + 'adversatively', + 'adversatives', + 'adverseness', + 'adversenesses', + 'adversities', + 'advertence', + 'advertences', + 'advertencies', + 'advertency', + 'advertently', + 'advertised', + 'advertisement', + 'advertisements', + 'advertiser', + 'advertisers', + 'advertises', + 'advertising', + 'advertisings', + 'advertized', + 'advertizement', + 'advertizements', + 'advertizes', + 'advertizing', + 'advertorial', + 'advertorials', + 'advisabilities', + 'advisability', + 'advisableness', + 'advisablenesses', + 'advisement', + 'advisements', + 'advisories', + 'advocacies', + 'advocating', + 'advocation', + 'advocations', + 'advocative', + 'advocators', + 'aeciospore', + 'aeciospores', + 'aepyornises', + 'aerenchyma', + 'aerenchymas', + 'aerenchymata', + 'aerialists', + 'aerobatics', + 'aerobically', + 'aerobiological', + 'aerobiologies', + 'aerobiology', + 'aerobioses', + 'aerobiosis', + 'aerobraked', + 'aerobrakes', + 'aerobraking', + 'aerodromes', + 'aerodynamic', + 'aerodynamical', + 'aerodynamically', + 'aerodynamicist', + 'aerodynamicists', + 'aerodynamics', + 'aeroelastic', + 'aeroelasticities', + 'aeroelasticity', + 'aeroembolism', + 'aeroembolisms', + 'aerogramme', + 'aerogrammes', + 'aerologies', + 'aeromagnetic', + 'aeromechanics', + 'aeromedical', + 'aeromedicine', + 'aeromedicines', + 'aerometers', + 'aeronautic', + 'aeronautical', + 'aeronautically', + 'aeronautics', + 'aeronomers', + 'aeronomical', + 'aeronomies', + 'aeronomist', + 'aeronomists', + 'aeroplanes', + 'aerosolization', + 'aerosolizations', + 'aerosolize', + 'aerosolized', + 'aerosolizes', + 'aerosolizing', + 'aerospaces', + 'aerostatics', + 'aerothermodynamic', + 'aerothermodynamics', + 'aesthetical', + 'aesthetically', + 'aesthetician', + 'aestheticians', + 'aestheticism', + 'aestheticisms', + 'aestheticize', + 'aestheticized', + 'aestheticizes', + 'aestheticizing', + 'aesthetics', + 'aestivated', + 'aestivates', + 'aestivating', + 'aestivation', + 'aestivations', + 'aetiologies', + 'affabilities', + 'affability', + 'affectabilities', + 'affectability', + 'affectable', + 'affectation', + 'affectations', + 'affectedly', + 'affectedness', + 'affectednesses', + 'affectingly', + 'affectional', + 'affectionally', + 'affectionate', + 'affectionately', + 'affectioned', + 'affectionless', + 'affections', + 'affectively', + 'affectivities', + 'affectivity', + 'affectless', + 'affectlessness', + 'affectlessnesses', + 'affenpinscher', + 'affenpinschers', + 'afferently', + 'affiancing', + 'afficionado', + 'afficionados', + 'affidavits', + 'affiliated', + 'affiliates', + 'affiliating', + 'affiliation', + 'affiliations', + 'affinities', + 'affirmable', + 'affirmance', + 'affirmances', + 'affirmation', + 'affirmations', + 'affirmative', + 'affirmatively', + 'affirmatives', + 'affixation', + 'affixations', + 'affixments', + 'afflatuses', + 'afflicting', + 'affliction', + 'afflictions', + 'afflictive', + 'afflictively', + 'affluences', + 'affluencies', + 'affluently', + 'affordabilities', + 'affordability', + 'affordable', + 'affordably', + 'afforestation', + 'afforestations', + 'afforested', + 'afforesting', + 'affricates', + 'affricative', + 'affricatives', + 'affrighted', + 'affrighting', + 'affronting', + 'aficionada', + 'aficionadas', + 'aficionado', + 'aficionados', + 'aflatoxins', + 'aforementioned', + 'aforethought', + 'afterbirth', + 'afterbirths', + 'afterburner', + 'afterburners', + 'aftercares', + 'afterclaps', + 'afterdecks', + 'aftereffect', + 'aftereffects', + 'afterglows', + 'afterimage', + 'afterimages', + 'afterlives', + 'aftermarket', + 'aftermarkets', + 'aftermaths', + 'afternoons', + 'afterpiece', + 'afterpieces', + 'aftershave', + 'aftershaves', + 'aftershock', + 'aftershocks', + 'aftertaste', + 'aftertastes', + 'afterthought', + 'afterthoughts', + 'aftertimes', + 'afterwards', + 'afterwords', + 'afterworld', + 'afterworlds', + 'agammaglobulinemia', + 'agammaglobulinemias', + 'agammaglobulinemic', + 'agamospermies', + 'agamospermy', + 'agapanthus', + 'agapanthuses', + 'agednesses', + 'agelessness', + 'agelessnesses', + 'agendaless', + 'aggiornamento', + 'aggiornamentos', + 'agglomerate', + 'agglomerated', + 'agglomerates', + 'agglomerating', + 'agglomeration', + 'agglomerations', + 'agglomerative', + 'agglutinabilities', + 'agglutinability', + 'agglutinable', + 'agglutinate', + 'agglutinated', + 'agglutinates', + 'agglutinating', + 'agglutination', + 'agglutinations', + 'agglutinative', + 'agglutinin', + 'agglutinins', + 'agglutinogen', + 'agglutinogenic', + 'agglutinogens', + 'aggradation', + 'aggradations', + 'aggrandise', + 'aggrandised', + 'aggrandises', + 'aggrandising', + 'aggrandize', + 'aggrandized', + 'aggrandizement', + 'aggrandizements', + 'aggrandizer', + 'aggrandizers', + 'aggrandizes', + 'aggrandizing', + 'aggravated', + 'aggravates', + 'aggravating', + 'aggravation', + 'aggravations', + 'aggregated', + 'aggregately', + 'aggregateness', + 'aggregatenesses', + 'aggregates', + 'aggregating', + 'aggregation', + 'aggregational', + 'aggregations', + 'aggregative', + 'aggregatively', + 'aggressing', + 'aggression', + 'aggressions', + 'aggressive', + 'aggressively', + 'aggressiveness', + 'aggressivenesses', + 'aggressivities', + 'aggressivity', + 'aggressors', + 'aggrievedly', + 'aggrievement', + 'aggrievements', + 'aggrieving', + 'agitatedly', + 'agitational', + 'agitations', + 'agnosticism', + 'agnosticisms', + 'agonistically', + 'agonizingly', + 'agoraphobe', + 'agoraphobes', + 'agoraphobia', + 'agoraphobias', + 'agoraphobic', + 'agoraphobics', + 'agranulocyte', + 'agranulocytes', + 'agranulocytoses', + 'agranulocytosis', + 'agrarianism', + 'agrarianisms', + 'agreeabilities', + 'agreeability', + 'agreeableness', + 'agreeablenesses', + 'agreements', + 'agribusiness', + 'agribusinesses', + 'agribusinessman', + 'agribusinessmen', + 'agrichemical', + 'agrichemicals', + 'agricultural', + 'agriculturalist', + 'agriculturalists', + 'agriculturally', + 'agriculture', + 'agricultures', + 'agriculturist', + 'agriculturists', + 'agrimonies', + 'agrochemical', + 'agrochemicals', + 'agroforester', + 'agroforesters', + 'agroforestries', + 'agroforestry', + 'agrologies', + 'agronomically', + 'agronomies', + 'agronomist', + 'agronomists', + 'ahistorical', + 'aiguillette', + 'aiguillettes', + 'ailanthuses', + 'ailurophile', + 'ailurophiles', + 'ailurophobe', + 'ailurophobes', + 'ailurophobia', + 'ailurophobias', + 'aimlessness', + 'aimlessnesses', + 'airbrushed', + 'airbrushes', + 'airbrushing', + 'aircoaches', + 'airdropped', + 'airdropping', + 'airfreight', + 'airfreighted', + 'airfreighting', + 'airfreights', + 'airinesses', + 'airlessness', + 'airlessnesses', + 'airlifting', + 'airmailing', + 'airmanship', + 'airmanships', + 'airproofed', + 'airproofing', + 'airsickness', + 'airsicknesses', + 'airstreams', + 'airtightness', + 'airtightnesses', + 'airworthier', + 'airworthiest', + 'airworthiness', + 'airworthinesses', + 'aitchbones', + 'alabasters', + 'alabastrine', + 'alacrities', + 'alacritous', + 'alarmingly', + 'albatrosses', + 'albinistic', + 'albuminous', + 'albuminuria', + 'albuminurias', + 'albuminuric', + 'alchemical', + 'alchemically', + 'alchemistic', + 'alchemistical', + 'alchemists', + 'alchemized', + 'alchemizes', + 'alchemizing', + 'alcoholically', + 'alcoholics', + 'alcoholism', + 'alcoholisms', + 'alcyonarian', + 'alcyonarians', + 'alderflies', + 'aldermanic', + 'alderwoman', + 'alderwomen', + 'aldolization', + 'aldolizations', + 'aldosterone', + 'aldosterones', + 'aldosteronism', + 'aldosteronisms', + 'alertnesses', + 'alexanders', + 'alexandrine', + 'alexandrines', + 'alexandrite', + 'alexandrites', + 'alfilarias', + 'algaecides', + 'algarrobas', + 'algebraically', + 'algebraist', + 'algebraists', + 'algidities', + 'algolagnia', + 'algolagniac', + 'algolagniacs', + 'algolagnias', + 'algological', + 'algologies', + 'algologist', + 'algologists', + 'algorithmic', + 'algorithmically', + 'algorithms', + 'alienabilities', + 'alienability', + 'alienating', + 'alienation', + 'alienations', + 'alienators', + 'aliennesses', + 'alightment', + 'alightments', + 'alignments', + 'alikenesses', + 'alimentary', + 'alimentation', + 'alimentations', + 'alimenting', + 'alinements', + 'aliteracies', + 'aliterates', + 'alivenesses', + 'alkahestic', + 'alkalified', + 'alkalifies', + 'alkalifying', + 'alkalimeter', + 'alkalimeters', + 'alkalimetries', + 'alkalimetry', + 'alkalinities', + 'alkalinity', + 'alkalinization', + 'alkalinizations', + 'alkalinize', + 'alkalinized', + 'alkalinizes', + 'alkalinizing', + 'alkalising', + 'alkalizing', + 'alkaloidal', + 'alkylating', + 'alkylation', + 'alkylations', + 'allantoides', + 'allantoins', + 'allargando', + 'allegation', + 'allegations', + 'allegiance', + 'allegiances', + 'allegorical', + 'allegorically', + 'allegoricalness', + 'allegoricalnesses', + 'allegories', + 'allegorise', + 'allegorised', + 'allegorises', + 'allegorising', + 'allegorist', + 'allegorists', + 'allegorization', + 'allegorizations', + 'allegorize', + 'allegorized', + 'allegorizer', + 'allegorizers', + 'allegorizes', + 'allegorizing', + 'allegretto', + 'allegrettos', + 'allelomorph', + 'allelomorphic', + 'allelomorphism', + 'allelomorphisms', + 'allelomorphs', + 'allelopathic', + 'allelopathies', + 'allelopathy', + 'allemandes', + 'allergenic', + 'allergenicities', + 'allergenicity', + 'allergists', + 'allethrins', + 'alleviated', + 'alleviates', + 'alleviating', + 'alleviation', + 'alleviations', + 'alleviator', + 'alleviators', + 'alliaceous', + 'alligators', + 'alliterate', + 'alliterated', + 'alliterates', + 'alliterating', + 'alliteration', + 'alliterations', + 'alliterative', + 'alliteratively', + 'alloantibodies', + 'alloantibody', + 'alloantigen', + 'alloantigens', + 'allocatable', + 'allocating', + 'allocation', + 'allocations', + 'allocators', + 'allocution', + 'allocutions', + 'allogamies', + 'allogamous', + 'allogeneic', + 'allografted', + 'allografting', + 'allografts', + 'allographic', + 'allographs', + 'allometric', + 'allometries', + 'allomorphic', + 'allomorphism', + 'allomorphisms', + 'allomorphs', + 'allopatric', + 'allopatrically', + 'allopatries', + 'allophanes', + 'allophones', + 'allophonic', + 'allopolyploid', + 'allopolyploidies', + 'allopolyploids', + 'allopolyploidy', + 'allopurinol', + 'allopurinols', + 'allosaurus', + 'allosauruses', + 'allosteric', + 'allosterically', + 'allosteries', + 'allotetraploid', + 'allotetraploidies', + 'allotetraploids', + 'allotetraploidy', + 'allotments', + 'allotropes', + 'allotropic', + 'allotropies', + 'allotypically', + 'allotypies', + 'allowanced', + 'allowances', + 'allowancing', + 'allurement', + 'allurements', + 'alluringly', + 'allusively', + 'allusiveness', + 'allusivenesses', + 'almandines', + 'almandites', + 'almightiness', + 'almightinesses', + 'almsgivers', + 'almsgiving', + 'almsgivings', + 'almshouses', + 'alogically', + 'alonenesses', + 'alongshore', + 'aloofnesses', + 'alpenglows', + 'alpenhorns', + 'alpenstock', + 'alpenstocks', + 'alphabeted', + 'alphabetic', + 'alphabetical', + 'alphabetically', + 'alphabeting', + 'alphabetization', + 'alphabetizations', + 'alphabetize', + 'alphabetized', + 'alphabetizer', + 'alphabetizers', + 'alphabetizes', + 'alphabetizing', + 'alphameric', + 'alphanumeric', + 'alphanumerical', + 'alphanumerically', + 'alphanumerics', + 'alphosises', + 'altarpiece', + 'altarpieces', + 'altazimuth', + 'altazimuths', + 'alterabilities', + 'alterability', + 'alteration', + 'alterations', + 'altercated', + 'altercates', + 'altercating', + 'altercation', + 'altercations', + 'alternated', + 'alternately', + 'alternates', + 'alternating', + 'alternation', + 'alternations', + 'alternative', + 'alternatively', + 'alternativeness', + 'alternativenesses', + 'alternatives', + 'alternator', + 'alternators', + 'altimeters', + 'altimetries', + 'altiplanos', + 'altitudinal', + 'altitudinous', + 'altocumuli', + 'altocumulus', + 'altogether', + 'altogethers', + 'altostrati', + 'altostratus', + 'altruistic', + 'altruistically', + 'aluminates', + 'aluminiums', + 'aluminized', + 'aluminizes', + 'aluminizing', + 'aluminosilicate', + 'aluminosilicates', + 'alveolarly', + 'amalgamate', + 'amalgamated', + 'amalgamates', + 'amalgamating', + 'amalgamation', + 'amalgamations', + 'amalgamator', + 'amalgamators', + 'amantadine', + 'amantadines', + 'amanuenses', + 'amanuensis', + 'amaranthine', + 'amaryllises', + 'amassments', + 'amateurish', + 'amateurishly', + 'amateurishness', + 'amateurishnesses', + 'amateurism', + 'amateurisms', + 'amativeness', + 'amativenesses', + 'amazements', + 'amazonites', + 'amazonstone', + 'amazonstones', + 'ambassador', + 'ambassadorial', + 'ambassadors', + 'ambassadorship', + 'ambassadorships', + 'ambassadress', + 'ambassadresses', + 'ambergrises', + 'amberjacks', + 'ambidexterities', + 'ambidexterity', + 'ambidextrous', + 'ambidextrously', + 'ambiguities', + 'ambiguously', + 'ambiguousness', + 'ambiguousnesses', + 'ambisexual', + 'ambisexualities', + 'ambisexuality', + 'ambisexuals', + 'ambitioned', + 'ambitioning', + 'ambitionless', + 'ambitiously', + 'ambitiousness', + 'ambitiousnesses', + 'ambivalence', + 'ambivalences', + 'ambivalent', + 'ambivalently', + 'ambiversion', + 'ambiversions', + 'amblygonite', + 'amblygonites', + 'amblyopias', + 'ambrosially', + 'ambrotypes', + 'ambulacral', + 'ambulacrum', + 'ambulances', + 'ambulating', + 'ambulation', + 'ambulations', + 'ambulatories', + 'ambulatorily', + 'ambulatory', + 'ambuscaded', + 'ambuscader', + 'ambuscaders', + 'ambuscades', + 'ambuscading', + 'ambushment', + 'ambushments', + 'amebocytes', + 'ameliorate', + 'ameliorated', + 'ameliorates', + 'ameliorating', + 'amelioration', + 'ameliorations', + 'ameliorative', + 'ameliorator', + 'ameliorators', + 'amelioratory', + 'ameloblast', + 'ameloblasts', + 'amenabilities', + 'amenability', + 'amendatory', + 'amendments', + 'amenorrhea', + 'amenorrheas', + 'amenorrheic', + 'amentiferous', + 'amercement', + 'amercements', + 'amerciable', + 'americiums', + 'amethystine', + 'ametropias', + 'amiabilities', + 'amiability', + 'amiableness', + 'amiablenesses', + 'amiantuses', + 'amicabilities', + 'amicability', + 'amicableness', + 'amicablenesses', + 'aminoaciduria', + 'aminoacidurias', + 'aminopeptidase', + 'aminopeptidases', + 'aminophylline', + 'aminophyllines', + 'aminopterin', + 'aminopterins', + 'aminopyrine', + 'aminopyrines', + 'aminotransferase', + 'aminotransferases', + 'amitotically', + 'amitriptyline', + 'amitriptylines', + 'ammoniacal', + 'ammoniated', + 'ammoniates', + 'ammoniating', + 'ammoniation', + 'ammoniations', + 'ammonification', + 'ammonifications', + 'ammonified', + 'ammonifies', + 'ammonifying', + 'ammunition', + 'ammunitions', + 'amnestying', + 'amniocenteses', + 'amniocentesis', + 'amobarbital', + 'amobarbitals', + 'amoebiases', + 'amoebiasis', + 'amoebocyte', + 'amoebocytes', + 'amontillado', + 'amontillados', + 'amoralisms', + 'amoralities', + 'amorousness', + 'amorousnesses', + 'amorphously', + 'amorphousness', + 'amorphousnesses', + 'amortising', + 'amortizable', + 'amortization', + 'amortizations', + 'amortizing', + 'amoxicillin', + 'amoxicillins', + 'amoxycillin', + 'amoxycillins', + 'amperometric', + 'ampersands', + 'amphetamine', + 'amphetamines', + 'amphibians', + 'amphibious', + 'amphibiously', + 'amphibiousness', + 'amphibiousnesses', + 'amphiboles', + 'amphibolies', + 'amphibolite', + 'amphibolites', + 'amphibologies', + 'amphibology', + 'amphibrach', + 'amphibrachic', + 'amphibrachs', + 'amphictyonic', + 'amphictyonies', + 'amphictyony', + 'amphidiploid', + 'amphidiploidies', + 'amphidiploids', + 'amphidiploidy', + 'amphimacer', + 'amphimacers', + 'amphimixes', + 'amphimixis', + 'amphioxuses', + 'amphipathic', + 'amphiphile', + 'amphiphiles', + 'amphiphilic', + 'amphiploid', + 'amphiploidies', + 'amphiploids', + 'amphiploidy', + 'amphiprostyle', + 'amphiprostyles', + 'amphisbaena', + 'amphisbaenas', + 'amphisbaenic', + 'amphitheater', + 'amphitheaters', + 'amphitheatric', + 'amphitheatrical', + 'amphitheatrically', + 'amphoteric', + 'ampicillin', + 'ampicillins', + 'amplenesses', + 'amplexuses', + 'amplidynes', + 'amplification', + 'amplifications', + 'amplifiers', + 'amplifying', + 'amplitudes', + 'amputating', + 'amputation', + 'amputations', + 'amusements', + 'amusingness', + 'amusingnesses', + 'amygdalins', + 'amygdaloid', + 'amygdaloidal', + 'amygdaloids', + 'amyloidoses', + 'amyloidosis', + 'amyloidosises', + 'amylolytic', + 'amylopectin', + 'amylopectins', + 'amyloplast', + 'amyloplasts', + 'amylopsins', + 'amyotonias', + 'anabaptism', + 'anabaptisms', + 'anablepses', + 'anabolisms', + 'anachronic', + 'anachronism', + 'anachronisms', + 'anachronistic', + 'anachronistically', + 'anachronous', + 'anachronously', + 'anacolutha', + 'anacoluthic', + 'anacoluthically', + 'anacoluthon', + 'anacoluthons', + 'anacreontic', + 'anacreontics', + 'anadiploses', + 'anadiplosis', + 'anadromous', + 'anaerobically', + 'anaerobioses', + 'anaerobiosis', + 'anaesthesia', + 'anaesthesias', + 'anaesthetic', + 'anaesthetics', + 'anageneses', + 'anagenesis', + 'anaglyphic', + 'anagnorises', + 'anagnorisis', + 'anagogical', + 'anagogically', + 'anagrammatic', + 'anagrammatical', + 'anagrammatically', + 'anagrammatization', + 'anagrammatizations', + 'anagrammatize', + 'anagrammatized', + 'anagrammatizes', + 'anagrammatizing', + 'anagrammed', + 'anagramming', + 'analemmata', + 'analemmatic', + 'analeptics', + 'analgesias', + 'analgesics', + 'analgetics', + 'analogical', + 'analogically', + 'analogists', + 'analogized', + 'analogizes', + 'analogizing', + 'analogously', + 'analogousness', + 'analogousnesses', + 'analphabet', + 'analphabetic', + 'analphabetics', + 'analphabetism', + 'analphabetisms', + 'analphabets', + 'analysands', + 'analytical', + 'analytically', + 'analyticities', + 'analyticity', + 'analyzabilities', + 'analyzability', + 'analyzable', + 'analyzation', + 'analyzations', + 'anamnestic', + 'anamorphic', + 'anapestics', + 'anaphorically', + 'anaphrodisiac', + 'anaphrodisiacs', + 'anaphylactic', + 'anaphylactically', + 'anaphylactoid', + 'anaphylaxes', + 'anaphylaxis', + 'anaplasias', + 'anaplasmoses', + 'anaplasmosis', + 'anaplastic', + 'anarchical', + 'anarchically', + 'anarchisms', + 'anarchistic', + 'anarchists', + 'anasarcous', + 'anastigmat', + 'anastigmatic', + 'anastigmats', + 'anastomose', + 'anastomosed', + 'anastomoses', + 'anastomosing', + 'anastomosis', + 'anastomotic', + 'anastrophe', + 'anastrophes', + 'anathemata', + 'anathematize', + 'anathematized', + 'anathematizes', + 'anathematizing', + 'anatomical', + 'anatomically', + 'anatomised', + 'anatomises', + 'anatomising', + 'anatomists', + 'anatomized', + 'anatomizes', + 'anatomizing', + 'anatropous', + 'ancestored', + 'ancestoring', + 'ancestrally', + 'ancestress', + 'ancestresses', + 'ancestries', + 'anchorages', + 'anchoresses', + 'anchorites', + 'anchoritic', + 'anchoritically', + 'anchorless', + 'anchorpeople', + 'anchorperson', + 'anchorpersons', + 'anchorwoman', + 'anchorwomen', + 'anchovetas', + 'anchovetta', + 'anchovettas', + 'ancientest', + 'ancientness', + 'ancientnesses', + 'ancientries', + 'ancillaries', + 'ancylostomiases', + 'ancylostomiasis', + 'andalusite', + 'andalusites', + 'andantinos', + 'andouilles', + 'andouillette', + 'andouillettes', + 'andradites', + 'androcentric', + 'androecium', + 'androgeneses', + 'androgenesis', + 'androgenetic', + 'androgenic', + 'androgynes', + 'androgynies', + 'androgynous', + 'andromedas', + 'androsterone', + 'androsterones', + 'anecdotage', + 'anecdotages', + 'anecdotalism', + 'anecdotalisms', + 'anecdotalist', + 'anecdotalists', + 'anecdotally', + 'anecdotical', + 'anecdotically', + 'anecdotist', + 'anecdotists', + 'anelasticities', + 'anelasticity', + 'anemically', + 'anemograph', + 'anemographs', + 'anemometer', + 'anemometers', + 'anemometries', + 'anemometry', + 'anemophilous', + 'anencephalic', + 'anencephalies', + 'anencephaly', + 'anesthesia', + 'anesthesias', + 'anesthesiologies', + 'anesthesiologist', + 'anesthesiologists', + 'anesthesiology', + 'anesthetic', + 'anesthetically', + 'anesthetics', + 'anesthetist', + 'anesthetists', + 'anesthetize', + 'anesthetized', + 'anesthetizes', + 'anesthetizing', + 'anestruses', + 'aneuploidies', + 'aneuploids', + 'aneuploidy', + 'aneurysmal', + 'anfractuosities', + 'anfractuosity', + 'anfractuous', + 'angelfishes', + 'angelically', + 'angelologies', + 'angelologist', + 'angelologists', + 'angelology', + 'angiocardiographic', + 'angiocardiographies', + 'angiocardiography', + 'angiogeneses', + 'angiogenesis', + 'angiogenic', + 'angiograms', + 'angiographic', + 'angiographies', + 'angiography', + 'angiomatous', + 'angioplasties', + 'angioplasty', + 'angiosperm', + 'angiospermous', + 'angiosperms', + 'angiotensin', + 'angiotensins', + 'anglerfish', + 'anglerfishes', + 'anglesites', + 'angleworms', + 'anglicised', + 'anglicises', + 'anglicising', + 'anglicisms', + 'anglicization', + 'anglicizations', + 'anglicized', + 'anglicizes', + 'anglicizing', + 'anglophone', + 'angrinesses', + 'anguishing', + 'angularities', + 'angularity', + 'angulating', + 'angulation', + 'angulations', + 'anhedonias', + 'anhydrides', + 'anhydrites', + 'anilinctus', + 'anilinctuses', + 'anilinguses', + 'animadversion', + 'animadversions', + 'animadvert', + 'animadverted', + 'animadverting', + 'animadverts', + 'animalcula', + 'animalcule', + 'animalcules', + 'animalculum', + 'animaliers', + 'animalisms', + 'animalistic', + 'animalities', + 'animalization', + 'animalizations', + 'animalized', + 'animalizes', + 'animalizing', + 'animallike', + 'animatedly', + 'animateness', + 'animatenesses', + 'animations', + 'animosities', + 'aniseikonia', + 'aniseikonias', + 'aniseikonic', + 'anisogamies', + 'anisogamous', + 'anisometropia', + 'anisometropias', + 'anisometropic', + 'anisotropic', + 'anisotropically', + 'anisotropies', + 'anisotropism', + 'anisotropisms', + 'anisotropy', + 'anklebones', + 'ankylosaur', + 'ankylosaurs', + 'ankylosaurus', + 'ankylosauruses', + 'ankylosing', + 'ankylostomiases', + 'ankylostomiasis', + 'annalistic', + 'annelidans', + 'annexation', + 'annexational', + 'annexationist', + 'annexationists', + 'annexations', + 'annihilate', + 'annihilated', + 'annihilates', + 'annihilating', + 'annihilation', + 'annihilations', + 'annihilator', + 'annihilators', + 'annihilatory', + 'anniversaries', + 'anniversary', + 'annotating', + 'annotation', + 'annotations', + 'annotative', + 'annotators', + 'announcement', + 'announcements', + 'announcers', + 'announcing', + 'annoyances', + 'annoyingly', + 'annualized', + 'annualizes', + 'annualizing', + 'annuitants', + 'annulation', + 'annulations', + 'annulments', + 'annunciate', + 'annunciated', + 'annunciates', + 'annunciating', + 'annunciation', + 'annunciations', + 'annunciator', + 'annunciators', + 'annunciatory', + 'anodically', + 'anodization', + 'anodizations', + 'anointment', + 'anointments', + 'anomalously', + 'anomalousness', + 'anomalousnesses', + 'anonymities', + 'anonymously', + 'anonymousness', + 'anonymousnesses', + 'anopheline', + 'anophelines', + 'anorectics', + 'anorexigenic', + 'anorthites', + 'anorthitic', + 'anorthosite', + 'anorthosites', + 'anorthositic', + 'anovulatory', + 'answerable', + 'antagonism', + 'antagonisms', + 'antagonist', + 'antagonistic', + 'antagonistically', + 'antagonists', + 'antagonize', + 'antagonized', + 'antagonizes', + 'antagonizing', + 'antebellum', + 'antecedence', + 'antecedences', + 'antecedent', + 'antecedently', + 'antecedents', + 'anteceding', + 'antecessor', + 'antecessors', + 'antechamber', + 'antechambers', + 'antechapel', + 'antechapels', + 'antechoirs', + 'antedating', + 'antediluvian', + 'antediluvians', + 'antemortem', + 'antenatally', + 'antennular', + 'antennules', + 'antenuptial', + 'antependia', + 'antependium', + 'antependiums', + 'antepenult', + 'antepenultima', + 'antepenultimas', + 'antepenultimate', + 'antepenultimates', + 'antepenults', + 'anteriorly', + 'anteverted', + 'anteverting', + 'anthelices', + 'anthelions', + 'anthelixes', + 'anthelmintic', + 'anthelmintics', + 'antheridia', + 'antheridial', + 'antheridium', + 'anthocyanin', + 'anthocyanins', + 'anthocyans', + 'anthological', + 'anthologies', + 'anthologist', + 'anthologists', + 'anthologize', + 'anthologized', + 'anthologizer', + 'anthologizers', + 'anthologizes', + 'anthologizing', + 'anthophilous', + 'anthophyllite', + 'anthophyllites', + 'anthozoans', + 'anthracene', + 'anthracenes', + 'anthracite', + 'anthracites', + 'anthracitic', + 'anthracnose', + 'anthracnoses', + 'anthranilate', + 'anthranilates', + 'anthraquinone', + 'anthraquinones', + 'anthropical', + 'anthropocentric', + 'anthropocentrically', + 'anthropocentricities', + 'anthropocentricity', + 'anthropocentrism', + 'anthropocentrisms', + 'anthropogenic', + 'anthropoid', + 'anthropoids', + 'anthropological', + 'anthropologically', + 'anthropologies', + 'anthropologist', + 'anthropologists', + 'anthropology', + 'anthropometric', + 'anthropometries', + 'anthropometry', + 'anthropomorph', + 'anthropomorphic', + 'anthropomorphically', + 'anthropomorphism', + 'anthropomorphisms', + 'anthropomorphist', + 'anthropomorphists', + 'anthropomorphization', + 'anthropomorphizations', + 'anthropomorphize', + 'anthropomorphized', + 'anthropomorphizes', + 'anthropomorphizing', + 'anthropomorphs', + 'anthropopathism', + 'anthropopathisms', + 'anthropophagi', + 'anthropophagies', + 'anthropophagous', + 'anthropophagus', + 'anthropophagy', + 'anthroposophies', + 'anthroposophy', + 'anthuriums', + 'antiabortion', + 'antiabortionist', + 'antiabortionists', + 'antiacademic', + 'antiacademics', + 'antiadministration', + 'antiaggression', + 'antiaircraft', + 'antiaircrafts', + 'antialcohol', + 'antialcoholism', + 'antialcoholisms', + 'antiallergenic', + 'antiallergenics', + 'antianemia', + 'antianxiety', + 'antiapartheid', + 'antiapartheids', + 'antiaphrodisiac', + 'antiaphrodisiacs', + 'antiaristocratic', + 'antiarrhythmic', + 'antiarrhythmics', + 'antiarthritic', + 'antiarthritics', + 'antiarthritis', + 'antiassimilation', + 'antiassimilations', + 'antiasthma', + 'antiauthoritarian', + 'antiauthoritarianism', + 'antiauthoritarianisms', + 'antiauthority', + 'antiauxins', + 'antibacklash', + 'antibacterial', + 'antibacterials', + 'antibaryon', + 'antibaryons', + 'antibillboard', + 'antibioses', + 'antibiosis', + 'antibiotic', + 'antibiotically', + 'antibiotics', + 'antiblackism', + 'antiblackisms', + 'antibodies', + 'antibourgeois', + 'antiboycott', + 'antiboycotts', + 'antibureaucratic', + 'antiburglar', + 'antiburglary', + 'antibusiness', + 'antibusing', + 'anticaking', + 'anticancer', + 'anticapitalism', + 'anticapitalisms', + 'anticapitalist', + 'anticapitalists', + 'anticarcinogen', + 'anticarcinogenic', + 'anticarcinogens', + 'anticaries', + 'anticatalyst', + 'anticatalysts', + 'anticathode', + 'anticathodes', + 'anticellulite', + 'anticensorship', + 'anticholesterol', + 'anticholinergic', + 'anticholinergics', + 'anticholinesterase', + 'anticholinesterases', + 'antichurch', + 'anticigarette', + 'anticipant', + 'anticipants', + 'anticipatable', + 'anticipate', + 'anticipated', + 'anticipates', + 'anticipating', + 'anticipation', + 'anticipations', + 'anticipator', + 'anticipators', + 'anticipatory', + 'anticlassical', + 'anticlerical', + 'anticlericalism', + 'anticlericalisms', + 'anticlericalist', + 'anticlericalists', + 'anticlericals', + 'anticlimactic', + 'anticlimactical', + 'anticlimactically', + 'anticlimax', + 'anticlimaxes', + 'anticlinal', + 'anticlines', + 'anticlockwise', + 'anticlotting', + 'anticoagulant', + 'anticoagulants', + 'anticodons', + 'anticollision', + 'anticolonial', + 'anticolonialism', + 'anticolonialisms', + 'anticolonialist', + 'anticolonialists', + 'anticolonials', + 'anticommercial', + 'anticommercialism', + 'anticommercialisms', + 'anticommunism', + 'anticommunisms', + 'anticommunist', + 'anticommunists', + 'anticompetitive', + 'anticonglomerate', + 'anticonservation', + 'anticonservationist', + 'anticonservationists', + 'anticonservations', + 'anticonsumer', + 'anticonsumers', + 'anticonventional', + 'anticonvulsant', + 'anticonvulsants', + 'anticonvulsive', + 'anticonvulsives', + 'anticorporate', + 'anticorrosion', + 'anticorrosive', + 'anticorrosives', + 'anticorruption', + 'anticorruptions', + 'anticounterfeiting', + 'anticreative', + 'anticruelty', + 'anticultural', + 'anticyclone', + 'anticyclones', + 'anticyclonic', + 'antidandruff', + 'antidefamation', + 'antidemocratic', + 'antidepressant', + 'antidepressants', + 'antidepression', + 'antidepressions', + 'antiderivative', + 'antiderivatives', + 'antidesegregation', + 'antidesertification', + 'antidesiccant', + 'antidesiccants', + 'antidevelopment', + 'antidiabetic', + 'antidiarrheal', + 'antidilution', + 'antidiscrimination', + 'antidogmatic', + 'antidotally', + 'antidoting', + 'antidromic', + 'antidromically', + 'antidumping', + 'antieconomic', + 'antieducational', + 'antiegalitarian', + 'antielectron', + 'antielectrons', + 'antielites', + 'antielitism', + 'antielitisms', + 'antielitist', + 'antielitists', + 'antiemetic', + 'antiemetics', + 'antientropic', + 'antiepilepsy', + 'antiepileptic', + 'antiepileptics', + 'antierotic', + 'antiestablishment', + 'antiestrogen', + 'antiestrogens', + 'antievolution', + 'antievolutionary', + 'antievolutionism', + 'antievolutionisms', + 'antievolutionist', + 'antievolutionists', + 'antifamily', + 'antifascism', + 'antifascisms', + 'antifascist', + 'antifascists', + 'antifashion', + 'antifashionable', + 'antifashions', + 'antifatigue', + 'antifederalist', + 'antifederalists', + 'antifemale', + 'antifeminine', + 'antifeminism', + 'antifeminisms', + 'antifeminist', + 'antifeminists', + 'antiferromagnet', + 'antiferromagnetic', + 'antiferromagnetically', + 'antiferromagnetism', + 'antiferromagnetisms', + 'antiferromagnets', + 'antifertility', + 'antifilibuster', + 'antifilibusters', + 'antifluoridationist', + 'antifluoridationists', + 'antifoaming', + 'antifogging', + 'antiforeclosure', + 'antiforeign', + 'antiforeigner', + 'antiformalist', + 'antiformalists', + 'antifouling', + 'antifreeze', + 'antifreezes', + 'antifriction', + 'antifrictions', + 'antifungal', + 'antifungals', + 'antigambling', + 'antigenically', + 'antigenicities', + 'antigenicity', + 'antiglobulin', + 'antiglobulins', + 'antigovernment', + 'antigravities', + 'antigravity', + 'antigrowth', + 'antiguerrilla', + 'antiguerrillas', + 'antiheroes', + 'antiheroic', + 'antiheroine', + 'antiheroines', + 'antiherpes', + 'antihierarchical', + 'antihijack', + 'antihistamine', + 'antihistamines', + 'antihistaminic', + 'antihistaminics', + 'antihistorical', + 'antihomosexual', + 'antihumanism', + 'antihumanisms', + 'antihumanistic', + 'antihumanitarian', + 'antihumanitarians', + 'antihunter', + 'antihunting', + 'antihuntings', + 'antihypertensive', + 'antihypertensives', + 'antihysteric', + 'antihysterics', + 'antijamming', + 'antikickback', + 'antiknocks', + 'antileprosy', + 'antilepton', + 'antileptons', + 'antileukemic', + 'antiliberal', + 'antiliberalism', + 'antiliberalisms', + 'antiliberals', + 'antilibertarian', + 'antilibertarians', + 'antiliterate', + 'antiliterates', + 'antilitter', + 'antilittering', + 'antilogarithm', + 'antilogarithmic', + 'antilogarithms', + 'antilogical', + 'antilogies', + 'antilynching', + 'antimacassar', + 'antimacassars', + 'antimagnetic', + 'antimalaria', + 'antimalarial', + 'antimalarials', + 'antimanagement', + 'antimanagements', + 'antimarijuana', + 'antimarket', + 'antimaterialism', + 'antimaterialisms', + 'antimaterialist', + 'antimaterialists', + 'antimatter', + 'antimatters', + 'antimechanist', + 'antimechanists', + 'antimerger', + 'antimetabolic', + 'antimetabolics', + 'antimetabolite', + 'antimetabolites', + 'antimetaphysical', + 'antimicrobial', + 'antimicrobials', + 'antimilitarism', + 'antimilitarisms', + 'antimilitarist', + 'antimilitarists', + 'antimilitary', + 'antimiscegenation', + 'antimissile', + 'antimissiles', + 'antimitotic', + 'antimitotics', + 'antimodern', + 'antimodernist', + 'antimodernists', + 'antimoderns', + 'antimonarchical', + 'antimonarchist', + 'antimonarchists', + 'antimonial', + 'antimonials', + 'antimonide', + 'antimonides', + 'antimonies', + 'antimonopolist', + 'antimonopolists', + 'antimonopoly', + 'antimosquito', + 'antimusical', + 'antimycins', + 'antinarrative', + 'antinational', + 'antinationalist', + 'antinationalists', + 'antinatural', + 'antinature', + 'antinatures', + 'antinausea', + 'antineoplastic', + 'antinepotism', + 'antinepotisms', + 'antineutrino', + 'antineutrinos', + 'antineutron', + 'antineutrons', + 'antinomian', + 'antinomianism', + 'antinomianisms', + 'antinomians', + 'antinomies', + 'antinovelist', + 'antinovelists', + 'antinovels', + 'antinuclear', + 'antinucleon', + 'antinucleons', + 'antiobesities', + 'antiobesity', + 'antiobscenities', + 'antiobscenity', + 'antiorganization', + 'antiorganizations', + 'antioxidant', + 'antioxidants', + 'antiozonant', + 'antiozonants', + 'antiparallel', + 'antiparasitic', + 'antiparasitics', + 'antiparticle', + 'antiparticles', + 'antipastos', + 'antipathetic', + 'antipathetically', + 'antipathies', + 'antiperiodic', + 'antipersonnel', + 'antiperspirant', + 'antiperspirants', + 'antipesticide', + 'antiphlogistic', + 'antiphonal', + 'antiphonally', + 'antiphonals', + 'antiphonaries', + 'antiphonary', + 'antiphonies', + 'antiphrases', + 'antiphrasis', + 'antipiracies', + 'antipiracy', + 'antiplague', + 'antiplagues', + 'antiplaque', + 'antipleasure', + 'antipleasures', + 'antipoaching', + 'antipodals', + 'antipodean', + 'antipodeans', + 'antipoetic', + 'antipolice', + 'antipolitical', + 'antipolitics', + 'antipollution', + 'antipollutions', + 'antipopular', + 'antipornographic', + 'antipornography', + 'antipoverty', + 'antipredator', + 'antipredators', + 'antiprofiteering', + 'antiprogressive', + 'antiprostitution', + 'antiproton', + 'antiprotons', + 'antipruritic', + 'antipruritics', + 'antipsychotic', + 'antipsychotics', + 'antipyreses', + 'antipyresis', + 'antipyretic', + 'antipyretics', + 'antipyrine', + 'antipyrines', + 'antiquarian', + 'antiquarianism', + 'antiquarianisms', + 'antiquarians', + 'antiquaries', + 'antiquarks', + 'antiquated', + 'antiquates', + 'antiquating', + 'antiquation', + 'antiquations', + 'antiquities', + 'antirabies', + 'antirachitic', + 'antiracism', + 'antiracisms', + 'antiracist', + 'antiracists', + 'antiracketeering', + 'antiradical', + 'antiradicalism', + 'antiradicalisms', + 'antirational', + 'antirationalism', + 'antirationalisms', + 'antirationalist', + 'antirationalists', + 'antirationalities', + 'antirationality', + 'antirealism', + 'antirealisms', + 'antirealist', + 'antirealists', + 'antirecession', + 'antirecessionary', + 'antirecessions', + 'antireductionism', + 'antireductionisms', + 'antireductionist', + 'antireductionists', + 'antireflection', + 'antireflective', + 'antireform', + 'antiregulatory', + 'antirejection', + 'antireligion', + 'antireligious', + 'antirevolutionaries', + 'antirevolutionary', + 'antirheumatic', + 'antirheumatics', + 'antiritualism', + 'antiritualisms', + 'antiromantic', + 'antiromanticism', + 'antiromanticisms', + 'antiromantics', + 'antiroyalist', + 'antiroyalists', + 'antirrhinum', + 'antirrhinums', + 'antisatellite', + 'antischizophrenia', + 'antischizophrenic', + 'antiscience', + 'antisciences', + 'antiscientific', + 'antiscorbutic', + 'antiscorbutics', + 'antisecrecy', + 'antisegregation', + 'antiseizure', + 'antisentimental', + 'antiseparatist', + 'antiseparatists', + 'antisepses', + 'antisepsis', + 'antiseptic', + 'antiseptically', + 'antiseptics', + 'antiserums', + 'antisexist', + 'antisexists', + 'antisexual', + 'antisexualities', + 'antisexuality', + 'antishoplifting', + 'antislaveries', + 'antislavery', + 'antismoker', + 'antismokers', + 'antismoking', + 'antismuggling', + 'antisocial', + 'antisocialist', + 'antisocialists', + 'antisocially', + 'antispasmodic', + 'antispasmodics', + 'antispeculation', + 'antispeculative', + 'antispending', + 'antistatic', + 'antistories', + 'antistress', + 'antistrike', + 'antistrophe', + 'antistrophes', + 'antistrophic', + 'antistrophically', + 'antistudent', + 'antisubmarine', + 'antisubsidy', + 'antisubversion', + 'antisubversions', + 'antisubversive', + 'antisubversives', + 'antisuicide', + 'antisymmetric', + 'antisyphilitic', + 'antisyphilitics', + 'antitakeover', + 'antitarnish', + 'antitechnological', + 'antitechnologies', + 'antitechnology', + 'antiterrorism', + 'antiterrorisms', + 'antiterrorist', + 'antiterrorists', + 'antitheoretical', + 'antitheses', + 'antithesis', + 'antithetic', + 'antithetical', + 'antithetically', + 'antithrombin', + 'antithrombins', + 'antithyroid', + 'antitobacco', + 'antitotalitarian', + 'antitoxins', + 'antitrades', + 'antitraditional', + 'antitruster', + 'antitrusters', + 'antitubercular', + 'antituberculosis', + 'antituberculous', + 'antitumoral', + 'antitussive', + 'antitussives', + 'antityphoid', + 'antiunemployment', + 'antiuniversities', + 'antiuniversity', + 'antivenins', + 'antiviolence', + 'antivitamin', + 'antivitamins', + 'antivivisection', + 'antivivisectionist', + 'antivivisectionists', + 'antiwelfare', + 'antiwhaling', + 'antiwrinkle', + 'antonomasia', + 'antonomasias', + 'antonymies', + 'antonymous', + 'anxiolytic', + 'anxiolytics', + 'anxiousness', + 'anxiousnesses', + 'aoristically', + 'aortographic', + 'aortographies', + 'aortography', + 'apartheids', + 'apartmental', + 'apartments', + 'apartnesses', + 'apathetically', + 'apatosaurus', + 'apatosauruses', + 'aperiodically', + 'aperiodicities', + 'aperiodicity', + 'aphaereses', + 'aphaeresis', + 'aphaeretic', + 'aphetically', + 'aphorising', + 'aphoristic', + 'aphoristically', + 'aphorizing', + 'aphrodisiac', + 'aphrodisiacal', + 'aphrodisiacs', + 'apicultural', + 'apiculture', + 'apicultures', + 'apiculturist', + 'apiculturists', + 'apiologies', + 'apishnesses', + 'apoapsides', + 'apocalypse', + 'apocalypses', + 'apocalyptic', + 'apocalyptical', + 'apocalyptically', + 'apocalypticism', + 'apocalypticisms', + 'apocalyptism', + 'apocalyptisms', + 'apocalyptist', + 'apocalyptists', + 'apocarpies', + 'apochromatic', + 'apocryphal', + 'apocryphally', + 'apocryphalness', + 'apocryphalnesses', + 'apodeictic', + 'apodictically', + 'apoenzymes', + 'apolipoprotein', + 'apolipoproteins', + 'apolitical', + 'apolitically', + 'apologetic', + 'apologetically', + 'apologetics', + 'apologised', + 'apologises', + 'apologising', + 'apologists', + 'apologized', + 'apologizer', + 'apologizers', + 'apologizes', + 'apologizing', + 'apomictically', + 'apomorphine', + 'apomorphines', + 'aponeuroses', + 'aponeurosis', + 'aponeurotic', + 'apophonies', + 'apophthegm', + 'apophthegms', + 'apophyllite', + 'apophyllites', + 'apophyseal', + 'apoplectic', + 'apoplectically', + 'apoplexies', + 'aposematic', + 'aposematically', + 'aposiopeses', + 'aposiopesis', + 'aposiopetic', + 'apospories', + 'aposporous', + 'apostacies', + 'apostasies', + 'apostatise', + 'apostatised', + 'apostatises', + 'apostatising', + 'apostatize', + 'apostatized', + 'apostatizes', + 'apostatizing', + 'apostleship', + 'apostleships', + 'apostolate', + 'apostolates', + 'apostolicities', + 'apostolicity', + 'apostrophe', + 'apostrophes', + 'apostrophic', + 'apostrophise', + 'apostrophised', + 'apostrophises', + 'apostrophising', + 'apostrophize', + 'apostrophized', + 'apostrophizes', + 'apostrophizing', + 'apothecaries', + 'apothecary', + 'apothecial', + 'apothecium', + 'apothegmatic', + 'apotheoses', + 'apotheosis', + 'apotheosize', + 'apotheosized', + 'apotheosizes', + 'apotheosizing', + 'apotropaic', + 'apotropaically', + 'appallingly', + 'apparatchik', + 'apparatchiki', + 'apparatchiks', + 'apparatuses', + 'appareling', + 'apparelled', + 'apparelling', + 'apparently', + 'apparentness', + 'apparentnesses', + 'apparition', + 'apparitional', + 'apparitions', + 'apparitors', + 'appealabilities', + 'appealability', + 'appealable', + 'appealingly', + 'appearance', + 'appearances', + 'appeasable', + 'appeasement', + 'appeasements', + 'appellants', + 'appellation', + 'appellations', + 'appellative', + 'appellatively', + 'appellatives', + 'appendages', + 'appendants', + 'appendectomies', + 'appendectomy', + 'appendicectomies', + 'appendicectomy', + 'appendices', + 'appendicites', + 'appendicitides', + 'appendicitis', + 'appendicitises', + 'appendicular', + 'appendixes', + 'apperceive', + 'apperceived', + 'apperceives', + 'apperceiving', + 'apperception', + 'apperceptions', + 'apperceptive', + 'appertained', + 'appertaining', + 'appertains', + 'appetences', + 'appetencies', + 'appetisers', + 'appetising', + 'appetitive', + 'appetizers', + 'appetizing', + 'appetizingly', + 'applaudable', + 'applaudably', + 'applauders', + 'applauding', + 'applecarts', + 'applejacks', + 'applesauce', + 'applesauces', + 'appliances', + 'applicabilities', + 'applicability', + 'applicable', + 'applicants', + 'application', + 'applications', + 'applicative', + 'applicatively', + 'applicator', + 'applicators', + 'applicatory', + 'appliqueing', + 'appoggiatura', + 'appoggiaturas', + 'appointees', + 'appointing', + 'appointive', + 'appointment', + 'appointments', + 'apportionable', + 'apportioned', + 'apportioning', + 'apportionment', + 'apportionments', + 'apportions', + 'appositely', + 'appositeness', + 'appositenesses', + 'apposition', + 'appositional', + 'appositions', + 'appositive', + 'appositively', + 'appositives', + 'appraisals', + 'appraisees', + 'appraisement', + 'appraisements', + 'appraisers', + 'appraising', + 'appraisingly', + 'appraisive', + 'appreciable', + 'appreciably', + 'appreciate', + 'appreciated', + 'appreciates', + 'appreciating', + 'appreciation', + 'appreciations', + 'appreciative', + 'appreciatively', + 'appreciativeness', + 'appreciativenesses', + 'appreciator', + 'appreciators', + 'appreciatory', + 'apprehended', + 'apprehending', + 'apprehends', + 'apprehensible', + 'apprehensibly', + 'apprehension', + 'apprehensions', + 'apprehensive', + 'apprehensively', + 'apprehensiveness', + 'apprehensivenesses', + 'apprentice', + 'apprenticed', + 'apprentices', + 'apprenticeship', + 'apprenticeships', + 'apprenticing', + 'appressoria', + 'appressorium', + 'approachabilities', + 'approachability', + 'approachable', + 'approached', + 'approaches', + 'approaching', + 'approbated', + 'approbates', + 'approbating', + 'approbation', + 'approbations', + 'approbatory', + 'appropriable', + 'appropriate', + 'appropriated', + 'appropriately', + 'appropriateness', + 'appropriatenesses', + 'appropriates', + 'appropriating', + 'appropriation', + 'appropriations', + 'appropriative', + 'appropriator', + 'appropriators', + 'approvable', + 'approvably', + 'approvingly', + 'approximate', + 'approximated', + 'approximately', + 'approximates', + 'approximating', + 'approximation', + 'approximations', + 'approximative', + 'appurtenance', + 'appurtenances', + 'appurtenant', + 'appurtenants', + 'apriorities', + 'aptitudinal', + 'aptitudinally', + 'aquacultural', + 'aquaculture', + 'aquacultures', + 'aquaculturist', + 'aquaculturists', + 'aquamarine', + 'aquamarines', + 'aquaplaned', + 'aquaplaner', + 'aquaplaners', + 'aquaplanes', + 'aquaplaning', + 'aquarelles', + 'aquarellist', + 'aquarellists', + 'aquatically', + 'aquatinted', + 'aquatinter', + 'aquatinters', + 'aquatinting', + 'aquatintist', + 'aquatintists', + 'aquiculture', + 'aquicultures', + 'aquiferous', + 'aquilegias', + 'aquilinities', + 'aquilinity', + 'arabesques', + 'arabicization', + 'arabicizations', + 'arabicized', + 'arabicizes', + 'arabicizing', + 'arabilities', + 'arabinoses', + 'arabinoside', + 'arabinosides', + 'arachnoids', + 'aragonites', + 'aragonitic', + 'araucarian', + 'araucarias', + 'arbitrable', + 'arbitraged', + 'arbitrager', + 'arbitragers', + 'arbitrages', + 'arbitrageur', + 'arbitrageurs', + 'arbitraging', + 'arbitrament', + 'arbitraments', + 'arbitrarily', + 'arbitrariness', + 'arbitrarinesses', + 'arbitrated', + 'arbitrates', + 'arbitrating', + 'arbitration', + 'arbitrational', + 'arbitrations', + 'arbitrative', + 'arbitrator', + 'arbitrators', + 'arboreally', + 'arborescence', + 'arborescences', + 'arborescent', + 'arboretums', + 'arboricultural', + 'arboriculture', + 'arboricultures', + 'arborization', + 'arborizations', + 'arborizing', + 'arborvitae', + 'arborvitaes', + 'arboviruses', + 'arccosines', + 'archaebacteria', + 'archaebacterium', + 'archaeoastronomies', + 'archaeoastronomy', + 'archaeological', + 'archaeologically', + 'archaeologies', + 'archaeologist', + 'archaeologists', + 'archaeology', + 'archaeopteryx', + 'archaeopteryxes', + 'archaically', + 'archaising', + 'archaistic', + 'archaizing', + 'archangelic', + 'archangels', + 'archbishop', + 'archbishopric', + 'archbishoprics', + 'archbishops', + 'archconservative', + 'archconservatives', + 'archdeacon', + 'archdeaconries', + 'archdeaconry', + 'archdeacons', + 'archdiocesan', + 'archdiocese', + 'archdioceses', + 'archduchess', + 'archduchesses', + 'archduchies', + 'archdukedom', + 'archdukedoms', + 'archegonia', + 'archegonial', + 'archegoniate', + 'archegoniates', + 'archegonium', + 'archenemies', + 'archenteron', + 'archenterons', + 'archeological', + 'archeologically', + 'archeologies', + 'archeologist', + 'archeologists', + 'archeology', + 'archerfish', + 'archerfishes', + 'archesporia', + 'archesporial', + 'archesporium', + 'archetypal', + 'archetypally', + 'archetypes', + 'archetypical', + 'archfiends', + 'archidiaconal', + 'archiepiscopal', + 'archiepiscopally', + 'archiepiscopate', + 'archiepiscopates', + 'archimandrite', + 'archimandrites', + 'archipelagic', + 'archipelago', + 'archipelagoes', + 'archipelagos', + 'architectonic', + 'architectonically', + 'architectonics', + 'architects', + 'architectural', + 'architecturally', + 'architecture', + 'architectures', + 'architrave', + 'architraves', + 'archivists', + 'archivolts', + 'archnesses', + 'archosaurian', + 'archosaurs', + 'archpriest', + 'archpriests', + 'arctangent', + 'arctangents', + 'arctically', + 'arduousness', + 'arduousnesses', + 'arecolines', + 'arenaceous', + 'arenicolous', + 'areocentric', + 'areologies', + 'argentiferous', + 'argentines', + 'argentites', + 'argillaceous', + 'argillites', + 'argumentation', + 'argumentations', + 'argumentative', + 'argumentatively', + 'argumentive', + 'argumentum', + 'arhatships', + 'ariboflavinoses', + 'ariboflavinosis', + 'ariboflavinosises', + 'aridnesses', + 'aristocracies', + 'aristocracy', + 'aristocrat', + 'aristocratic', + 'aristocratically', + 'aristocrats', + 'arithmetic', + 'arithmetical', + 'arithmetically', + 'arithmetician', + 'arithmeticians', + 'arithmetics', + 'armadillos', + 'armamentaria', + 'armamentarium', + 'armaturing', + 'armigerous', + 'armistices', + 'armorially', + 'aromatherapies', + 'aromatherapist', + 'aromatherapists', + 'aromatherapy', + 'aromatically', + 'aromaticities', + 'aromaticity', + 'aromatization', + 'aromatizations', + 'aromatized', + 'aromatizes', + 'aromatizing', + 'arpeggiate', + 'arpeggiated', + 'arpeggiates', + 'arpeggiating', + 'arquebuses', + 'arraigning', + 'arraignment', + 'arraignments', + 'arrangement', + 'arrangements', + 'arrearages', + 'arrestants', + 'arrestingly', + 'arrestment', + 'arrestments', + 'arrhythmia', + 'arrhythmias', + 'arrhythmic', + 'arrivistes', + 'arrogances', + 'arrogantly', + 'arrogating', + 'arrogation', + 'arrogations', + 'arrondissement', + 'arrondissements', + 'arrowheads', + 'arrowroots', + 'arrowwoods', + 'arrowworms', + 'arsenicals', + 'arsenopyrite', + 'arsenopyrites', + 'arsphenamine', + 'arsphenamines', + 'artemisias', + 'arterially', + 'arteriogram', + 'arteriograms', + 'arteriographic', + 'arteriographies', + 'arteriography', + 'arteriolar', + 'arterioles', + 'arterioscleroses', + 'arteriosclerosis', + 'arteriosclerotic', + 'arteriosclerotics', + 'arteriovenous', + 'arteritides', + 'artfulness', + 'artfulnesses', + 'arthralgia', + 'arthralgias', + 'arthralgic', + 'arthritically', + 'arthritics', + 'arthritides', + 'arthrodeses', + 'arthrodesis', + 'arthropathies', + 'arthropathy', + 'arthropodan', + 'arthropods', + 'arthroscope', + 'arthroscopes', + 'arthroscopic', + 'arthroscopies', + 'arthroscopy', + 'arthrospore', + 'arthrospores', + 'artichokes', + 'articulable', + 'articulacies', + 'articulacy', + 'articulate', + 'articulated', + 'articulately', + 'articulateness', + 'articulatenesses', + 'articulates', + 'articulating', + 'articulation', + 'articulations', + 'articulative', + 'articulator', + 'articulators', + 'articulatory', + 'artifactual', + 'artificers', + 'artificial', + 'artificialities', + 'artificiality', + 'artificially', + 'artificialness', + 'artificialnesses', + 'artilleries', + 'artillerist', + 'artillerists', + 'artilleryman', + 'artillerymen', + 'artinesses', + 'artiodactyl', + 'artiodactyls', + 'artisanship', + 'artisanships', + 'artistically', + 'artistries', + 'artlessness', + 'artlessnesses', + 'arytenoids', + 'asafetidas', + 'asafoetida', + 'asafoetidas', + 'asbestoses', + 'asbestosis', + 'asbestuses', + 'ascariases', + 'ascariasis', + 'ascendable', + 'ascendance', + 'ascendances', + 'ascendancies', + 'ascendancy', + 'ascendantly', + 'ascendants', + 'ascendence', + 'ascendences', + 'ascendencies', + 'ascendency', + 'ascendents', + 'ascendible', + 'ascensional', + 'ascensions', + 'ascertainable', + 'ascertained', + 'ascertaining', + 'ascertainment', + 'ascertainments', + 'ascertains', + 'ascetically', + 'asceticism', + 'asceticisms', + 'asclepiads', + 'ascocarpic', + 'ascogonium', + 'ascomycete', + 'ascomycetes', + 'ascomycetous', + 'ascorbates', + 'ascospores', + 'ascosporic', + 'ascribable', + 'ascription', + 'ascriptions', + 'ascriptive', + 'aseptically', + 'asexualities', + 'asexuality', + 'ashinesses', + 'asininities', + 'askewnesses', + 'asparagine', + 'asparagines', + 'aspartames', + 'aspartates', + 'asperating', + 'aspergilla', + 'aspergilli', + 'aspergilloses', + 'aspergillosis', + 'aspergillum', + 'aspergillums', + 'aspergillus', + 'asperities', + 'aspersions', + 'asphalting', + 'asphaltite', + 'asphaltites', + 'asphaltums', + 'aspherical', + 'asphyxiate', + 'asphyxiated', + 'asphyxiates', + 'asphyxiating', + 'asphyxiation', + 'asphyxiations', + 'aspidistra', + 'aspidistras', + 'aspirating', + 'aspiration', + 'aspirational', + 'aspirations', + 'aspirators', + 'assagaiing', + 'assailable', + 'assailants', + 'assassinate', + 'assassinated', + 'assassinates', + 'assassinating', + 'assassination', + 'assassinations', + 'assassinator', + 'assassinators', + 'assaulters', + 'assaulting', + 'assaultive', + 'assaultively', + 'assaultiveness', + 'assaultivenesses', + 'assegaiing', + 'assemblage', + 'assemblages', + 'assemblagist', + 'assemblagists', + 'assemblers', + 'assemblies', + 'assembling', + 'assemblyman', + 'assemblymen', + 'assemblywoman', + 'assemblywomen', + 'assentation', + 'assentations', + 'assertedly', + 'assertions', + 'assertively', + 'assertiveness', + 'assertivenesses', + 'assessable', + 'assessment', + 'assessments', + 'asseverate', + 'asseverated', + 'asseverates', + 'asseverating', + 'asseveration', + 'asseverations', + 'asseverative', + 'assiduities', + 'assiduously', + 'assiduousness', + 'assiduousnesses', + 'assignabilities', + 'assignability', + 'assignable', + 'assignation', + 'assignations', + 'assignment', + 'assignments', + 'assimilabilities', + 'assimilability', + 'assimilable', + 'assimilate', + 'assimilated', + 'assimilates', + 'assimilating', + 'assimilation', + 'assimilationism', + 'assimilationisms', + 'assimilationist', + 'assimilationists', + 'assimilations', + 'assimilative', + 'assimilator', + 'assimilators', + 'assimilatory', + 'assistance', + 'assistances', + 'assistants', + 'assistantship', + 'assistantships', + 'associated', + 'associates', + 'associateship', + 'associateships', + 'associating', + 'association', + 'associational', + 'associationism', + 'associationisms', + 'associationist', + 'associationistic', + 'associationists', + 'associations', + 'associative', + 'associatively', + 'associativities', + 'associativity', + 'assoilment', + 'assoilments', + 'assonances', + 'assonantal', + 'assortative', + 'assortatively', + 'assortment', + 'assortments', + 'assuagement', + 'assuagements', + 'assumabilities', + 'assumability', + 'assumpsits', + 'assumption', + 'assumptions', + 'assumptive', + 'assurances', + 'assuredness', + 'assurednesses', + 'astarboard', + 'asteriated', + 'asterisked', + 'asterisking', + 'asteriskless', + 'asteroidal', + 'asthenosphere', + 'asthenospheres', + 'asthenospheric', + 'asthmatically', + 'asthmatics', + 'astigmatic', + 'astigmatics', + 'astigmatism', + 'astigmatisms', + 'astonished', + 'astonishes', + 'astonishing', + 'astonishingly', + 'astonishment', + 'astonishments', + 'astounding', + 'astoundingly', + 'astrakhans', + 'astricting', + 'astringencies', + 'astringency', + 'astringent', + 'astringently', + 'astringents', + 'astringing', + 'astrobiologies', + 'astrobiologist', + 'astrobiologists', + 'astrobiology', + 'astrocytes', + 'astrocytic', + 'astrocytoma', + 'astrocytomas', + 'astrocytomata', + 'astrodomes', + 'astrolabes', + 'astrologer', + 'astrologers', + 'astrological', + 'astrologically', + 'astrologies', + 'astrometric', + 'astrometries', + 'astrometry', + 'astronautic', + 'astronautical', + 'astronautically', + 'astronautics', + 'astronauts', + 'astronomer', + 'astronomers', + 'astronomic', + 'astronomical', + 'astronomically', + 'astronomies', + 'astrophotograph', + 'astrophotographer', + 'astrophotographers', + 'astrophotographies', + 'astrophotographs', + 'astrophotography', + 'astrophysical', + 'astrophysically', + 'astrophysicist', + 'astrophysicists', + 'astrophysics', + 'astuteness', + 'astutenesses', + 'asymmetric', + 'asymmetrical', + 'asymmetrically', + 'asymmetries', + 'asymptomatic', + 'asymptomatically', + 'asymptotes', + 'asymptotic', + 'asymptotically', + 'asynchronies', + 'asynchronism', + 'asynchronisms', + 'asynchronous', + 'asynchronously', + 'asynchrony', + 'asyndetically', + 'asyndetons', + 'ataractics', + 'atavistically', + 'atelectases', + 'atelectasis', + 'athanasies', + 'atheistical', + 'atheistically', + 'athenaeums', + 'atheoretical', + 'atherogeneses', + 'atherogenesis', + 'atherogenic', + 'atheromata', + 'atheromatous', + 'atheroscleroses', + 'atherosclerosis', + 'atherosclerotic', + 'athletically', + 'athleticism', + 'athleticisms', + 'athrocytes', + 'athwartship', + 'athwartships', + 'atmometers', + 'atmosphere', + 'atmosphered', + 'atmospheres', + 'atmospheric', + 'atmospherically', + 'atmospherics', + 'atomically', + 'atomistically', + 'atomization', + 'atomizations', + 'atonalisms', + 'atonalists', + 'atonalities', + 'atonements', + 'atrabilious', + 'atrabiliousness', + 'atrabiliousnesses', + 'atrioventricular', + 'atrociously', + 'atrociousness', + 'atrociousnesses', + 'atrocities', + 'atrophying', + 'attachable', + 'attachment', + 'attachments', + 'attainabilities', + 'attainability', + 'attainable', + 'attainders', + 'attainment', + 'attainments', + 'attainting', + 'attempered', + 'attempering', + 'attemptable', + 'attempting', + 'attendance', + 'attendances', + 'attendants', + 'attentional', + 'attentions', + 'attentively', + 'attentiveness', + 'attentivenesses', + 'attenuated', + 'attenuates', + 'attenuating', + 'attenuation', + 'attenuations', + 'attenuator', + 'attenuators', + 'attestation', + 'attestations', + 'attitudinal', + 'attitudinally', + 'attitudinise', + 'attitudinised', + 'attitudinises', + 'attitudinising', + 'attitudinize', + 'attitudinized', + 'attitudinizes', + 'attitudinizing', + 'attorneyship', + 'attorneyships', + 'attornment', + 'attornments', + 'attractance', + 'attractances', + 'attractancies', + 'attractancy', + 'attractant', + 'attractants', + 'attracting', + 'attraction', + 'attractions', + 'attractive', + 'attractively', + 'attractiveness', + 'attractivenesses', + 'attractors', + 'attributable', + 'attributed', + 'attributes', + 'attributing', + 'attribution', + 'attributional', + 'attributions', + 'attributive', + 'attributively', + 'attributives', + 'attritional', + 'attritions', + 'attunement', + 'attunements', + 'atypicalities', + 'atypicality', + 'atypically', + 'aubergines', + 'auctioneer', + 'auctioneers', + 'auctioning', + 'audaciously', + 'audaciousness', + 'audaciousnesses', + 'audacities', + 'audibilities', + 'audibility', + 'audiocassette', + 'audiocassettes', + 'audiogenic', + 'audiograms', + 'audiologic', + 'audiological', + 'audiologies', + 'audiologist', + 'audiologists', + 'audiometer', + 'audiometers', + 'audiometric', + 'audiometries', + 'audiometry', + 'audiophile', + 'audiophiles', + 'audiotapes', + 'audiovisual', + 'audiovisuals', + 'auditioned', + 'auditioning', + 'auditories', + 'auditorily', + 'auditorium', + 'auditoriums', + 'augmentation', + 'augmentations', + 'augmentative', + 'augmentatives', + 'augmenters', + 'augmenting', + 'augmentors', + 'augustness', + 'augustnesses', + 'auriculate', + 'auriferous', + 'auscultate', + 'auscultated', + 'auscultates', + 'auscultating', + 'auscultation', + 'auscultations', + 'auscultatory', + 'ausforming', + 'auslanders', + 'auspicious', + 'auspiciously', + 'auspiciousness', + 'auspiciousnesses', + 'austenites', + 'austenitic', + 'austereness', + 'austerenesses', + 'austerities', + 'australopithecine', + 'australopithecines', + 'autarchical', + 'autarchies', + 'autarkical', + 'autecological', + 'autecologies', + 'autecology', + 'auteurists', + 'authentically', + 'authenticate', + 'authenticated', + 'authenticates', + 'authenticating', + 'authentication', + 'authentications', + 'authenticator', + 'authenticators', + 'authenticities', + 'authenticity', + 'authoresses', + 'authorised', + 'authorises', + 'authorising', + 'authoritarian', + 'authoritarianism', + 'authoritarianisms', + 'authoritarians', + 'authoritative', + 'authoritatively', + 'authoritativeness', + 'authoritativenesses', + 'authorities', + 'authorization', + 'authorizations', + 'authorized', + 'authorizer', + 'authorizers', + 'authorizes', + 'authorizing', + 'authorship', + 'authorships', + 'autistically', + 'autoantibodies', + 'autoantibody', + 'autobahnen', + 'autobiographer', + 'autobiographers', + 'autobiographic', + 'autobiographical', + 'autobiographically', + 'autobiographies', + 'autobiography', + 'autobusses', + 'autocatalyses', + 'autocatalysis', + 'autocatalytic', + 'autocatalytically', + 'autocephalies', + 'autocephalous', + 'autocephaly', + 'autochthon', + 'autochthones', + 'autochthonous', + 'autochthonously', + 'autochthons', + 'autoclaved', + 'autoclaves', + 'autoclaving', + 'autocorrelation', + 'autocorrelations', + 'autocracies', + 'autocratic', + 'autocratical', + 'autocratically', + 'autocrosses', + 'autodidact', + 'autodidactic', + 'autodidacts', + 'autoecious', + 'autoeciously', + 'autoecisms', + 'autoerotic', + 'autoeroticism', + 'autoeroticisms', + 'autoerotism', + 'autoerotisms', + 'autogamies', + 'autogamous', + 'autogenies', + 'autogenous', + 'autogenously', + 'autografted', + 'autografting', + 'autografts', + 'autographed', + 'autographic', + 'autographically', + 'autographies', + 'autographing', + 'autographs', + 'autography', + 'autohypnoses', + 'autohypnosis', + 'autohypnotic', + 'autoimmune', + 'autoimmunities', + 'autoimmunity', + 'autoimmunization', + 'autoimmunizations', + 'autoinfection', + 'autoinfections', + 'autointoxication', + 'autointoxications', + 'autoloading', + 'autologous', + 'autolysate', + 'autolysates', + 'autolysing', + 'autolyzate', + 'autolyzates', + 'autolyzing', + 'automakers', + 'automatable', + 'automatically', + 'automaticities', + 'automaticity', + 'automatics', + 'automating', + 'automation', + 'automations', + 'automatism', + 'automatisms', + 'automatist', + 'automatists', + 'automatization', + 'automatizations', + 'automatize', + 'automatized', + 'automatizes', + 'automatizing', + 'automatons', + 'automobile', + 'automobiled', + 'automobiles', + 'automobiling', + 'automobilist', + 'automobilists', + 'automobilities', + 'automobility', + 'automorphism', + 'automorphisms', + 'automotive', + 'autonomically', + 'autonomies', + 'autonomist', + 'autonomists', + 'autonomous', + 'autonomously', + 'autopilots', + 'autopolyploid', + 'autopolyploidies', + 'autopolyploids', + 'autopolyploidy', + 'autopsying', + 'autoradiogram', + 'autoradiograms', + 'autoradiograph', + 'autoradiographic', + 'autoradiographies', + 'autoradiographs', + 'autoradiography', + 'autorotate', + 'autorotated', + 'autorotates', + 'autorotating', + 'autorotation', + 'autorotations', + 'autoroutes', + 'autosexing', + 'autosomally', + 'autostrada', + 'autostradas', + 'autostrade', + 'autosuggest', + 'autosuggested', + 'autosuggesting', + 'autosuggestion', + 'autosuggestions', + 'autosuggests', + 'autotetraploid', + 'autotetraploidies', + 'autotetraploids', + 'autotetraploidy', + 'autotomies', + 'autotomize', + 'autotomized', + 'autotomizes', + 'autotomizing', + 'autotomous', + 'autotransformer', + 'autotransformers', + 'autotransfusion', + 'autotransfusions', + 'autotrophic', + 'autotrophically', + 'autotrophies', + 'autotrophs', + 'autotrophy', + 'autotypies', + 'autoworker', + 'autoworkers', + 'autoxidation', + 'autoxidations', + 'autumnally', + 'auxiliaries', + 'auxotrophic', + 'auxotrophies', + 'auxotrophs', + 'auxotrophy', + 'availabilities', + 'availability', + 'availableness', + 'availablenesses', + 'avalanched', + 'avalanches', + 'avalanching', + 'avaricious', + 'avariciously', + 'avariciousness', + 'avariciousnesses', + 'avascularities', + 'avascularity', + 'aventurine', + 'aventurines', + 'averageness', + 'averagenesses', + 'averseness', + 'aversenesses', + 'aversively', + 'aversiveness', + 'aversivenesses', + 'avgolemono', + 'avgolemonos', + 'avianizing', + 'aviatrices', + 'aviatrixes', + 'aviculture', + 'avicultures', + 'aviculturist', + 'aviculturists', + 'avidnesses', + 'avitaminoses', + 'avitaminosis', + 'avitaminotic', + 'avocational', + 'avocationally', + 'avocations', + 'avoidances', + 'avoirdupois', + 'avoirdupoises', + 'avouchment', + 'avouchments', + 'avuncularities', + 'avuncularity', + 'avuncularly', + 'awarenesses', + 'awaynesses', + 'awesomeness', + 'awesomenesses', + 'awestricken', + 'awfulnesses', + 'awkwardest', + 'awkwardness', + 'awkwardnesses', + 'axenically', + 'axialities', + 'axillaries', + 'axiological', + 'axiologically', + 'axiologies', + 'axiomatically', + 'axiomatisation', + 'axiomatisations', + 'axiomatization', + 'axiomatizations', + 'axiomatize', + 'axiomatized', + 'axiomatizes', + 'axiomatizing', + 'axisymmetric', + 'axisymmetrical', + 'axisymmetries', + 'axisymmetry', + 'axonometric', + 'axoplasmic', + 'ayahuascas', + 'ayatollahs', + 'azathioprine', + 'azathioprines', + 'azeotropes', + 'azidothymidine', + 'azidothymidines', + 'azimuthally', + 'azoospermia', + 'azoospermias', + 'azotobacter', + 'azotobacters', + 'babbitting', + 'babblement', + 'babblements', + 'babesioses', + 'babesiosis', + 'babesiosises', + 'babysitter', + 'babysitters', + 'baccalaureate', + 'baccalaureates', + 'bacchanalia', + 'bacchanalian', + 'bacchanalians', + 'bacchanals', + 'bacchantes', + 'bachelordom', + 'bachelordoms', + 'bachelorette', + 'bachelorettes', + 'bachelorhood', + 'bachelorhoods', + 'bacitracin', + 'bacitracins', + 'backbencher', + 'backbenchers', + 'backbenches', + 'backbiters', + 'backbiting', + 'backbitings', + 'backbitten', + 'backblocks', + 'backboards', + 'backbreaker', + 'backbreakers', + 'backbreaking', + 'backcloths', + 'backcountries', + 'backcountry', + 'backcourtman', + 'backcourtmen', + 'backcourts', + 'backcrossed', + 'backcrosses', + 'backcrossing', + 'backdating', + 'backdropped', + 'backdropping', + 'backfields', + 'backfilled', + 'backfilling', + 'backfiring', + 'backfitted', + 'backfitting', + 'backgammon', + 'backgammons', + 'background', + 'backgrounded', + 'backgrounder', + 'backgrounders', + 'backgrounding', + 'backgrounds', + 'backhanded', + 'backhandedly', + 'backhander', + 'backhanders', + 'backhanding', + 'backhauled', + 'backhauling', + 'backhouses', + 'backlashed', + 'backlasher', + 'backlashers', + 'backlashes', + 'backlashing', + 'backlighted', + 'backlighting', + 'backlights', + 'backlisted', + 'backlisting', + 'backlogged', + 'backlogging', + 'backpacked', + 'backpacker', + 'backpackers', + 'backpacking', + 'backpedaled', + 'backpedaling', + 'backpedalled', + 'backpedalling', + 'backpedals', + 'backrushes', + 'backscatter', + 'backscattered', + 'backscattering', + 'backscatterings', + 'backscatters', + 'backslapped', + 'backslapper', + 'backslappers', + 'backslapping', + 'backslashes', + 'backslidden', + 'backslider', + 'backsliders', + 'backslides', + 'backsliding', + 'backspaced', + 'backspaces', + 'backspacing', + 'backsplash', + 'backsplashes', + 'backstabbed', + 'backstabber', + 'backstabbers', + 'backstabbing', + 'backstabbings', + 'backstairs', + 'backstitch', + 'backstitched', + 'backstitches', + 'backstitching', + 'backstopped', + 'backstopping', + 'backstreet', + 'backstreets', + 'backstretch', + 'backstretches', + 'backstroke', + 'backstrokes', + 'backswings', + 'backswords', + 'backtracked', + 'backtracking', + 'backtracks', + 'backwardly', + 'backwardness', + 'backwardnesses', + 'backwashed', + 'backwashes', + 'backwashing', + 'backwaters', + 'backwoodsman', + 'backwoodsmen', + 'backwoodsy', + 'bacteremia', + 'bacteremias', + 'bacteremic', + 'bacterially', + 'bactericidal', + 'bactericidally', + 'bactericide', + 'bactericides', + 'bacteriochlorophyll', + 'bacteriochlorophylls', + 'bacteriocin', + 'bacteriocins', + 'bacteriologic', + 'bacteriological', + 'bacteriologically', + 'bacteriologies', + 'bacteriologist', + 'bacteriologists', + 'bacteriology', + 'bacteriolyses', + 'bacteriolysis', + 'bacteriolytic', + 'bacteriophage', + 'bacteriophages', + 'bacteriophagies', + 'bacteriophagy', + 'bacteriorhodopsin', + 'bacteriorhodopsins', + 'bacteriostases', + 'bacteriostasis', + 'bacteriostat', + 'bacteriostatic', + 'bacteriostats', + 'bacteriuria', + 'bacteriurias', + 'bacterization', + 'bacterizations', + 'bacterized', + 'bacterizes', + 'bacterizing', + 'bacteroids', + 'badinaging', + 'badmintons', + 'badmouthed', + 'badmouthing', + 'bafflegabs', + 'bafflement', + 'bafflements', + 'bafflingly', + 'bagatelles', + 'bagginesses', + 'bailiffship', + 'bailiffships', + 'bailiwicks', + 'bairnliest', + 'baksheeshes', + 'bakshished', + 'bakshishes', + 'bakshishing', + 'balaclavas', + 'balalaikas', + 'balbriggan', + 'balbriggans', + 'baldachino', + 'baldachinos', + 'baldachins', + 'balderdash', + 'balderdashes', + 'baldheaded', + 'baldnesses', + 'balefulness', + 'balefulnesses', + 'balkanization', + 'balkanizations', + 'balkanized', + 'balkanizes', + 'balkanizing', + 'balkinesses', + 'balladeers', + 'balladists', + 'balladries', + 'ballasting', + 'ballcarrier', + 'ballcarriers', + 'ballerinas', + 'balletomane', + 'balletomanes', + 'balletomania', + 'balletomanias', + 'ballhandling', + 'ballhandlings', + 'ballistically', + 'ballistics', + 'ballooning', + 'balloonings', + 'balloonist', + 'balloonists', + 'ballplayer', + 'ballplayers', + 'ballpoints', + 'ballyhooed', + 'ballyhooing', + 'ballyragged', + 'ballyragging', + 'balmacaans', + 'balminesses', + 'balneologies', + 'balneology', + 'balustrade', + 'balustraded', + 'balustrades', + 'bamboozled', + 'bamboozlement', + 'bamboozlements', + 'bamboozles', + 'bamboozling', + 'banalities', + 'banalizing', + 'banderilla', + 'banderillas', + 'banderillero', + 'banderilleros', + 'banderoles', + 'bandicoots', + 'banditries', + 'bandleader', + 'bandleaders', + 'bandmaster', + 'bandmasters', + 'bandoleers', + 'bandoliers', + 'bandstands', + 'bandwagons', + 'bandwidths', + 'baneberries', + 'banishment', + 'banishments', + 'banistered', + 'bankabilities', + 'bankability', + 'bankrolled', + 'bankroller', + 'bankrollers', + 'bankrolling', + 'bankruptcies', + 'bankruptcy', + 'bankrupted', + 'bankrupting', + 'bannerette', + 'bannerettes', + 'bannisters', + 'banqueters', + 'banqueting', + 'banquettes', + 'bantamweight', + 'bantamweights', + 'banteringly', + 'baptismally', + 'baptisteries', + 'baptistery', + 'baptistries', + 'barbarianism', + 'barbarianisms', + 'barbarians', + 'barbarically', + 'barbarisms', + 'barbarities', + 'barbarization', + 'barbarizations', + 'barbarized', + 'barbarizes', + 'barbarizing', + 'barbarously', + 'barbarousness', + 'barbarousnesses', + 'barbascoes', + 'barbecuers', + 'barbecuing', + 'barbequing', + 'barberries', + 'barbershop', + 'barbershops', + 'barbitones', + 'barbiturate', + 'barbiturates', + 'barcaroles', + 'barcarolle', + 'barcarolles', + 'bardolater', + 'bardolaters', + 'bardolatries', + 'bardolatry', + 'barebacked', + 'barefacedly', + 'barefacedness', + 'barefacednesses', + 'barefooted', + 'bareheaded', + 'barenesses', + 'bargainers', + 'bargaining', + 'bargeboard', + 'bargeboards', + 'barhopping', + 'barkeepers', + 'barkentine', + 'barkentines', + 'barleycorn', + 'barleycorns', + 'barnstormed', + 'barnstormer', + 'barnstormers', + 'barnstorming', + 'barnstorms', + 'baroceptor', + 'baroceptors', + 'barographic', + 'barographs', + 'barometers', + 'barometric', + 'barometrically', + 'barometries', + 'baronesses', + 'baronetage', + 'baronetages', + 'baronetcies', + 'baroreceptor', + 'baroreceptors', + 'barquentine', + 'barquentines', + 'barquettes', + 'barrackers', + 'barracking', + 'barracoons', + 'barracouta', + 'barracoutas', + 'barracudas', + 'barramunda', + 'barramundas', + 'barramundi', + 'barramundis', + 'barratries', + 'barrelages', + 'barrelfuls', + 'barrelhead', + 'barrelheads', + 'barrelhouse', + 'barrelhouses', + 'barrelling', + 'barrelsful', + 'barrenness', + 'barrennesses', + 'barretries', + 'barricaded', + 'barricades', + 'barricading', + 'barricadoed', + 'barricadoes', + 'barricadoing', + 'barristers', + 'bartenders', + 'bartending', + 'baseboards', + 'baseliners', + 'basementless', + 'basenesses', + 'baserunning', + 'baserunnings', + 'bashfulness', + 'bashfulnesses', + 'basicities', + 'basidiomycete', + 'basidiomycetes', + 'basidiomycetous', + 'basidiospore', + 'basidiospores', + 'basification', + 'basifications', + 'basipetally', + 'basketball', + 'basketballs', + 'basketfuls', + 'basketlike', + 'basketries', + 'basketsful', + 'basketwork', + 'basketworks', + 'basophiles', + 'basophilia', + 'basophilias', + 'basophilic', + 'bassetting', + 'bassnesses', + 'bassoonist', + 'bassoonists', + 'bastardies', + 'bastardise', + 'bastardised', + 'bastardises', + 'bastardising', + 'bastardization', + 'bastardizations', + 'bastardize', + 'bastardized', + 'bastardizes', + 'bastardizing', + 'bastinades', + 'bastinadoed', + 'bastinadoes', + 'bastinadoing', + 'batfowling', + 'bathetically', + 'bathhouses', + 'batholithic', + 'batholiths', + 'bathwaters', + 'bathymetric', + 'bathymetrical', + 'bathymetrically', + 'bathymetries', + 'bathymetry', + 'bathypelagic', + 'bathyscaph', + 'bathyscaphe', + 'bathyscaphes', + 'bathyscaphs', + 'bathysphere', + 'bathyspheres', + 'bathythermograph', + 'bathythermographs', + 'batrachian', + 'batrachians', + 'battailous', + 'battalions', + 'battements', + 'battinesses', + 'battlefield', + 'battlefields', + 'battlefront', + 'battlefronts', + 'battleground', + 'battlegrounds', + 'battlement', + 'battlemented', + 'battlements', + 'battleship', + 'battleships', + 'battlewagon', + 'battlewagons', + 'baudronses', + 'bawdinesses', + 'bawdyhouse', + 'bawdyhouses', + 'bayberries', + 'bayoneting', + 'bayonetted', + 'bayonetting', + 'beachcombed', + 'beachcomber', + 'beachcombers', + 'beachcombing', + 'beachcombs', + 'beachfront', + 'beachfronts', + 'beachgoers', + 'beachheads', + 'beanstalks', + 'bearabilities', + 'bearability', + 'bearbaiting', + 'bearbaitings', + 'bearberries', + 'beardedness', + 'beardednesses', + 'beardtongue', + 'beardtongues', + 'bearishness', + 'bearishnesses', + 'beastliest', + 'beastliness', + 'beastlinesses', + 'beatifically', + 'beatification', + 'beatifications', + 'beatifying', + 'beatitudes', + 'beauteously', + 'beauteousness', + 'beauteousnesses', + 'beautician', + 'beauticians', + 'beautification', + 'beautifications', + 'beautified', + 'beautifier', + 'beautifiers', + 'beautifies', + 'beautifuler', + 'beautifulest', + 'beautifully', + 'beautifulness', + 'beautifulnesses', + 'beautifying', + 'beaverboard', + 'beaverboards', + 'beblooding', + 'becarpeted', + 'becarpeting', + 'bechalking', + 'bechancing', + 'becharming', + 'beclamored', + 'beclamoring', + 'beclasping', + 'becloaking', + 'beclogging', + 'beclothing', + 'beclouding', + 'beclowning', + 'becomingly', + 'becowarded', + 'becowarding', + 'becrawling', + 'becrowding', + 'becrusting', + 'becudgeled', + 'becudgeling', + 'becudgelled', + 'becudgelling', + 'bedabbling', + 'bedarkened', + 'bedarkening', + 'bedazzlement', + 'bedazzlements', + 'bedazzling', + 'bedchamber', + 'bedchambers', + 'bedclothes', + 'bedcovering', + 'bedcoverings', + 'bedeafened', + 'bedeafening', + 'bedeviling', + 'bedevilled', + 'bedevilling', + 'bedevilment', + 'bedevilments', + 'bedfellows', + 'bediapered', + 'bediapering', + 'bedighting', + 'bedimpling', + 'bedirtying', + 'bedizening', + 'bedizenment', + 'bedizenments', + 'bedlamites', + 'bedraggled', + 'bedraggles', + 'bedraggling', + 'bedrenched', + 'bedrenches', + 'bedrenching', + 'bedriveled', + 'bedriveling', + 'bedrivelled', + 'bedrivelling', + 'bedrugging', + 'bedspreads', + 'bedsprings', + 'bedwarfing', + 'beechdrops', + 'beefeaters', + 'beefsteaks', + 'beekeepers', + 'beekeeping', + 'beekeepings', + 'befingered', + 'befingering', + 'befittingly', + 'beflagging', + 'beflecking', + 'beflowered', + 'beflowering', + 'beforehand', + 'beforetime', + 'befretting', + 'befriended', + 'befriending', + 'befringing', + 'befuddlement', + 'befuddlements', + 'befuddling', + 'beggarliness', + 'beggarlinesses', + 'beggarweed', + 'beggarweeds', + 'beginnings', + 'begirdling', + 'begladding', + 'beglamored', + 'beglamoring', + 'beglamoured', + 'beglamouring', + 'beglamours', + 'beglooming', + 'begrimming', + 'begroaning', + 'begrudging', + 'begrudgingly', + 'beguilement', + 'beguilements', + 'beguilingly', + 'behavioral', + 'behaviorally', + 'behaviorism', + 'behaviorisms', + 'behaviorist', + 'behavioristic', + 'behaviorists', + 'behaviours', + 'beheadings', + 'behindhand', + 'bejeweling', + 'bejewelled', + 'bejewelling', + 'bejumbling', + 'beknighted', + 'beknighting', + 'beknotting', + 'belaboring', + 'belaboured', + 'belabouring', + 'belatedness', + 'belatednesses', + 'beleaguered', + 'beleaguering', + 'beleaguerment', + 'beleaguerments', + 'beleaguers', + 'belemnites', + 'believabilities', + 'believability', + 'believable', + 'believably', + 'beliquored', + 'beliquoring', + 'belittlement', + 'belittlements', + 'belittlers', + 'belittling', + 'belladonna', + 'belladonnas', + 'belletrist', + 'belletristic', + 'belletrists', + 'bellflower', + 'bellflowers', + 'bellicosely', + 'bellicosities', + 'bellicosity', + 'belligerence', + 'belligerences', + 'belligerencies', + 'belligerency', + 'belligerent', + 'belligerently', + 'belligerents', + 'bellwether', + 'bellwethers', + 'bellyached', + 'bellyacher', + 'bellyachers', + 'bellyaches', + 'bellyaching', + 'bellybands', + 'bellybutton', + 'bellybuttons', + 'belongingness', + 'belongingnesses', + 'belongings', + 'belowdecks', + 'belowground', + 'belvederes', + 'bemadaming', + 'bemaddened', + 'bemaddening', + 'bemedalled', + 'bemingling', + 'bemuddling', + 'bemurmured', + 'bemurmuring', + 'bemusement', + 'bemusements', + 'bemuzzling', + 'benchlands', + 'benchmarks', + 'benchwarmer', + 'benchwarmers', + 'benediction', + 'benedictions', + 'benedictory', + 'benefaction', + 'benefactions', + 'benefactor', + 'benefactors', + 'benefactress', + 'benefactresses', + 'beneficence', + 'beneficences', + 'beneficent', + 'beneficently', + 'beneficial', + 'beneficially', + 'beneficialness', + 'beneficialnesses', + 'beneficiaries', + 'beneficiary', + 'beneficiate', + 'beneficiated', + 'beneficiates', + 'beneficiating', + 'beneficiation', + 'beneficiations', + 'beneficing', + 'benefiters', + 'benefiting', + 'benefitted', + 'benefitting', + 'benevolence', + 'benevolences', + 'benevolent', + 'benevolently', + 'benevolentness', + 'benevolentnesses', + 'bengalines', + 'benightedly', + 'benightedness', + 'benightednesses', + 'benignancies', + 'benignancy', + 'benignantly', + 'benignities', + 'bentonites', + 'bentonitic', + 'benzaldehyde', + 'benzaldehydes', + 'benzanthracene', + 'benzanthracenes', + 'benzidines', + 'benzimidazole', + 'benzimidazoles', + 'benzoapyrene', + 'benzoapyrenes', + 'benzocaine', + 'benzocaines', + 'benzodiazepine', + 'benzodiazepines', + 'benzofuran', + 'benzofurans', + 'benzophenone', + 'benzophenones', + 'bepainting', + 'bepimpling', + 'bequeathal', + 'bequeathals', + 'bequeathed', + 'bequeathing', + 'berascaled', + 'berascaling', + 'berberines', + 'berberises', + 'bereavement', + 'bereavements', + 'beribboned', + 'berkeliums', + 'berserkers', + 'berylliums', + 'bescorched', + 'bescorches', + 'bescorching', + 'bescouring', + 'bescreened', + 'bescreening', + 'beseeching', + 'beseechingly', + 'besetments', + 'beshadowed', + 'beshadowing', + 'beshivered', + 'beshivering', + 'beshouting', + 'beshrewing', + 'beshrouded', + 'beshrouding', + 'besmearing', + 'besmirched', + 'besmirches', + 'besmirching', + 'besmoothed', + 'besmoothing', + 'besmudging', + 'besmutting', + 'besoothing', + 'bespattered', + 'bespattering', + 'bespatters', + 'bespeaking', + 'bespectacled', + 'bespousing', + 'bespreading', + 'besprinkle', + 'besprinkled', + 'besprinkles', + 'besprinkling', + 'besteading', + 'bestialities', + 'bestiality', + 'bestialize', + 'bestialized', + 'bestializes', + 'bestializing', + 'bestiaries', + 'bestirring', + 'bestrewing', + 'bestridden', + 'bestriding', + 'bestrowing', + 'bestseller', + 'bestsellerdom', + 'bestsellerdoms', + 'bestsellers', + 'bestudding', + 'beswarming', + 'betattered', + 'betattering', + 'bethanking', + 'bethinking', + 'bethorning', + 'bethumping', + 'betokening', + 'betrothals', + 'betrotheds', + 'betrothing', + 'betterment', + 'betterments', + 'betweenbrain', + 'betweenbrains', + 'betweenness', + 'betweennesses', + 'betweentimes', + 'betweenwhiles', + 'bevomiting', + 'bewearying', + 'bewhiskered', + 'bewildered', + 'bewilderedly', + 'bewilderedness', + 'bewilderednesses', + 'bewildering', + 'bewilderingly', + 'bewilderment', + 'bewilderments', + 'bewitcheries', + 'bewitchery', + 'bewitching', + 'bewitchingly', + 'bewitchment', + 'bewitchments', + 'beworrying', + 'bewrapping', + 'biannually', + 'biasnesses', + 'biathletes', + 'biblically', + 'biblicisms', + 'biblicists', + 'bibliographer', + 'bibliographers', + 'bibliographic', + 'bibliographical', + 'bibliographically', + 'bibliographies', + 'bibliography', + 'bibliolater', + 'bibliolaters', + 'bibliolatries', + 'bibliolatrous', + 'bibliolatry', + 'bibliologies', + 'bibliology', + 'bibliomania', + 'bibliomaniac', + 'bibliomaniacal', + 'bibliomaniacs', + 'bibliomanias', + 'bibliopegic', + 'bibliopegies', + 'bibliopegist', + 'bibliopegists', + 'bibliopegy', + 'bibliophile', + 'bibliophiles', + 'bibliophilic', + 'bibliophilies', + 'bibliophilism', + 'bibliophilisms', + 'bibliophily', + 'bibliopole', + 'bibliopoles', + 'bibliopolist', + 'bibliopolists', + 'bibliotheca', + 'bibliothecae', + 'bibliothecal', + 'bibliothecas', + 'bibliotherapies', + 'bibliotherapy', + 'bibliotics', + 'bibliotist', + 'bibliotists', + 'bibulously', + 'bibulousness', + 'bibulousnesses', + 'bicameralism', + 'bicameralisms', + 'bicarbonate', + 'bicarbonates', + 'bicentenaries', + 'bicentenary', + 'bicentennial', + 'bicentennials', + 'bichromate', + 'bichromated', + 'bichromates', + 'bicomponent', + 'biconcavities', + 'biconcavity', + 'biconditional', + 'biconditionals', + 'biconvexities', + 'biconvexity', + 'bicultural', + 'biculturalism', + 'biculturalisms', + 'bicyclists', + 'biddabilities', + 'biddability', + 'bidialectal', + 'bidialectalism', + 'bidialectalisms', + 'bidirectional', + 'bidirectionally', + 'bidonville', + 'bidonvilles', + 'biennially', + 'bifacially', + 'bifidities', + 'biflagellate', + 'bifunctional', + 'bifurcated', + 'bifurcates', + 'bifurcating', + 'bifurcation', + 'bifurcations', + 'bigamously', + 'bigeminies', + 'bighearted', + 'bigheartedly', + 'bigheartedness', + 'bigheartednesses', + 'bigmouthed', + 'bijections', + 'bijouterie', + 'bijouteries', + 'bilateralism', + 'bilateralisms', + 'bilaterally', + 'bilberries', + 'bildungsroman', + 'bildungsromane', + 'bildungsromans', + 'bilgewater', + 'bilgewaters', + 'bilharzial', + 'bilharzias', + 'bilharziases', + 'bilharziasis', + 'bilingualism', + 'bilingualisms', + 'bilingually', + 'bilinguals', + 'biliousness', + 'biliousnesses', + 'bilirubins', + 'biliverdin', + 'biliverdins', + 'billabongs', + 'billboarded', + 'billboarding', + 'billboards', + 'billfishes', + 'billingsgate', + 'billingsgates', + 'billionaire', + 'billionaires', + 'billionths', + 'billowiest', + 'billycocks', + 'bilocation', + 'bilocations', + 'bimanually', + 'bimetallic', + 'bimetallics', + 'bimetallism', + 'bimetallisms', + 'bimetallist', + 'bimetallistic', + 'bimetallists', + 'bimillenaries', + 'bimillenary', + 'bimillennial', + 'bimillennials', + 'bimodalities', + 'bimodality', + 'bimolecular', + 'bimolecularly', + 'bimonthlies', + 'bimorphemic', + 'binational', + 'binaurally', + 'bindingness', + 'bindingnesses', + 'binocularities', + 'binocularity', + 'binocularly', + 'binoculars', + 'binomially', + 'binucleate', + 'binucleated', + 'bioacoustics', + 'bioactivities', + 'bioactivity', + 'bioassayed', + 'bioassaying', + 'bioavailabilities', + 'bioavailability', + 'bioavailable', + 'biocenoses', + 'biocenosis', + 'biochemical', + 'biochemically', + 'biochemicals', + 'biochemist', + 'biochemistries', + 'biochemistry', + 'biochemists', + 'bioclimatic', + 'biocoenoses', + 'biocoenosis', + 'biocompatibilities', + 'biocompatibility', + 'biocompatible', + 'biocontrol', + 'biocontrols', + 'bioconversion', + 'bioconversions', + 'biodegradabilities', + 'biodegradability', + 'biodegradable', + 'biodegradation', + 'biodegradations', + 'biodegrade', + 'biodegraded', + 'biodegrades', + 'biodegrading', + 'biodeterioration', + 'biodeteriorations', + 'biodiversities', + 'biodiversity', + 'biodynamic', + 'bioelectric', + 'bioelectrical', + 'bioelectricities', + 'bioelectricity', + 'bioenergetic', + 'bioenergetics', + 'bioengineer', + 'bioengineered', + 'bioengineering', + 'bioengineerings', + 'bioengineers', + 'bioethical', + 'bioethicist', + 'bioethicists', + 'biofeedback', + 'biofeedbacks', + 'biofouling', + 'biofoulings', + 'biogeneses', + 'biogenesis', + 'biogenetic', + 'biogenetically', + 'biogeochemical', + 'biogeochemicals', + 'biogeochemistries', + 'biogeochemistry', + 'biogeographer', + 'biogeographers', + 'biogeographic', + 'biogeographical', + 'biogeographies', + 'biogeography', + 'biographee', + 'biographees', + 'biographer', + 'biographers', + 'biographic', + 'biographical', + 'biographically', + 'biographies', + 'biohazards', + 'biological', + 'biologically', + 'biologicals', + 'biologisms', + 'biologistic', + 'biologists', + 'bioluminescence', + 'bioluminescences', + 'bioluminescent', + 'biomaterial', + 'biomaterials', + 'biomathematical', + 'biomathematician', + 'biomathematicians', + 'biomathematics', + 'biomechanical', + 'biomechanically', + 'biomechanics', + 'biomedical', + 'biomedicine', + 'biomedicines', + 'biometeorological', + 'biometeorologies', + 'biometeorology', + 'biometrical', + 'biometrician', + 'biometricians', + 'biometrics', + 'biometries', + 'biomolecular', + 'biomolecule', + 'biomolecules', + 'biomorphic', + 'biophysical', + 'biophysicist', + 'biophysicists', + 'biophysics', + 'biopolymer', + 'biopolymers', + 'bioreactor', + 'bioreactors', + 'biorhythmic', + 'biorhythms', + 'biosafeties', + 'bioscience', + 'biosciences', + 'bioscientific', + 'bioscientist', + 'bioscientists', + 'bioscopies', + 'biosensors', + 'biosocially', + 'biospheres', + 'biospheric', + 'biostatistical', + 'biostatistician', + 'biostatisticians', + 'biostatistics', + 'biostratigraphic', + 'biostratigraphies', + 'biostratigraphy', + 'biosyntheses', + 'biosynthesis', + 'biosynthetic', + 'biosynthetically', + 'biosystematic', + 'biosystematics', + 'biosystematist', + 'biosystematists', + 'biotechnical', + 'biotechnological', + 'biotechnologies', + 'biotechnologist', + 'biotechnologists', + 'biotechnology', + 'biotelemetric', + 'biotelemetries', + 'biotelemetry', + 'biotransformation', + 'biotransformations', + 'biparental', + 'biparentally', + 'bipartisan', + 'bipartisanism', + 'bipartisanisms', + 'bipartisanship', + 'bipartisanships', + 'bipartitely', + 'bipartition', + 'bipartitions', + 'bipedalism', + 'bipedalisms', + 'bipedalities', + 'bipedality', + 'bipinnately', + 'bipolarities', + 'bipolarity', + 'bipolarization', + 'bipolarizations', + 'bipolarize', + 'bipolarized', + 'bipolarizes', + 'bipolarizing', + 'bipropellant', + 'bipropellants', + 'bipyramidal', + 'bipyramids', + 'biquadratic', + 'biquadratics', + 'biracialism', + 'biracialisms', + 'birdbrained', + 'birdbrains', + 'birdhouses', + 'birdliming', + 'birdwatcher', + 'birdwatchers', + 'birefringence', + 'birefringences', + 'birefringent', + 'birthdates', + 'birthmarks', + 'birthplace', + 'birthplaces', + 'birthrates', + 'birthright', + 'birthrights', + 'birthroots', + 'birthstone', + 'birthstones', + 'birthworts', + 'bisectional', + 'bisectionally', + 'bisections', + 'bisexualities', + 'bisexuality', + 'bisexually', + 'bishoprics', + 'bistouries', + 'bisulfates', + 'bisulfides', + 'bisulfites', + 'bitartrate', + 'bitartrates', + 'bitcheries', + 'bitchiness', + 'bitchinesses', + 'bitterbrush', + 'bitterbrushes', + 'bitterness', + 'bitternesses', + 'bitterroot', + 'bitterroots', + 'bittersweet', + 'bittersweetly', + 'bittersweetness', + 'bittersweetnesses', + 'bittersweets', + 'bitterweed', + 'bitterweeds', + 'bituminization', + 'bituminizations', + 'bituminize', + 'bituminized', + 'bituminizes', + 'bituminizing', + 'bituminous', + 'biuniqueness', + 'biuniquenesses', + 'bivouacked', + 'bivouacking', + 'biweeklies', + 'bizarreness', + 'bizarrenesses', + 'bizarrerie', + 'bizarreries', + 'blabbering', + 'blabbermouth', + 'blabbermouths', + 'blackamoor', + 'blackamoors', + 'blackballed', + 'blackballing', + 'blackballs', + 'blackberries', + 'blackberry', + 'blackbirded', + 'blackbirder', + 'blackbirders', + 'blackbirding', + 'blackbirds', + 'blackboard', + 'blackboards', + 'blackbodies', + 'blackcocks', + 'blackeners', + 'blackening', + 'blackenings', + 'blackfaces', + 'blackfishes', + 'blackflies', + 'blackguard', + 'blackguarded', + 'blackguarding', + 'blackguardism', + 'blackguardisms', + 'blackguardly', + 'blackguards', + 'blackhander', + 'blackhanders', + 'blackheads', + 'blackheart', + 'blackhearts', + 'blackjacked', + 'blackjacking', + 'blackjacks', + 'blacklands', + 'blackleads', + 'blacklisted', + 'blacklister', + 'blacklisters', + 'blacklisting', + 'blacklists', + 'blackmailed', + 'blackmailer', + 'blackmailers', + 'blackmailing', + 'blackmails', + 'blacknesses', + 'blackpolls', + 'blacksmith', + 'blacksmithing', + 'blacksmithings', + 'blacksmiths', + 'blacksnake', + 'blacksnakes', + 'blacktails', + 'blackthorn', + 'blackthorns', + 'blacktopped', + 'blacktopping', + 'blackwater', + 'blackwaters', + 'blackwoods', + 'bladderlike', + 'bladdernut', + 'bladdernuts', + 'bladderwort', + 'bladderworts', + 'blaeberries', + 'blamefully', + 'blamelessly', + 'blamelessness', + 'blamelessnesses', + 'blameworthiness', + 'blameworthinesses', + 'blameworthy', + 'blancmange', + 'blancmanges', + 'blandished', + 'blandisher', + 'blandishers', + 'blandishes', + 'blandishing', + 'blandishment', + 'blandishments', + 'blandnesses', + 'blanketflower', + 'blanketflowers', + 'blanketing', + 'blanketlike', + 'blanknesses', + 'blanquette', + 'blanquettes', + 'blarneying', + 'blasphemed', + 'blasphemer', + 'blasphemers', + 'blasphemes', + 'blasphemies', + 'blaspheming', + 'blasphemous', + 'blasphemously', + 'blasphemousness', + 'blasphemousnesses', + 'blastemata', + 'blastematic', + 'blastments', + 'blastocoel', + 'blastocoele', + 'blastocoeles', + 'blastocoelic', + 'blastocoels', + 'blastocyst', + 'blastocysts', + 'blastoderm', + 'blastoderms', + 'blastodisc', + 'blastodiscs', + 'blastomata', + 'blastomere', + 'blastomeres', + 'blastomycoses', + 'blastomycosis', + 'blastopore', + 'blastopores', + 'blastoporic', + 'blastospore', + 'blastospores', + 'blastulation', + 'blastulations', + 'blatancies', + 'blatherers', + 'blathering', + 'blatherskite', + 'blatherskites', + 'blattering', + 'blaxploitation', + 'blaxploitations', + 'blazonings', + 'blazonries', + 'bleachable', + 'bleacherite', + 'bleacherites', + 'bleaknesses', + 'bleariness', + 'blearinesses', + 'blemishing', + 'blepharoplast', + 'blepharoplasties', + 'blepharoplasts', + 'blepharoplasty', + 'blepharospasm', + 'blepharospasms', + 'blessedest', + 'blessedness', + 'blessednesses', + 'blethering', + 'blimpishly', + 'blimpishness', + 'blimpishnesses', + 'blindfishes', + 'blindfolded', + 'blindfolding', + 'blindfolds', + 'blindingly', + 'blindnesses', + 'blindsided', + 'blindsides', + 'blindsiding', + 'blindworms', + 'blinkering', + 'blissfully', + 'blissfulness', + 'blissfulnesses', + 'blistering', + 'blisteringly', + 'blithering', + 'blithesome', + 'blithesomely', + 'blitzkrieg', + 'blitzkriegs', + 'blizzardly', + 'blockaders', + 'blockading', + 'blockbuster', + 'blockbusters', + 'blockbusting', + 'blockbustings', + 'blockheads', + 'blockhouse', + 'blockhouses', + 'bloodbaths', + 'bloodcurdling', + 'bloodguilt', + 'bloodguiltiness', + 'bloodguiltinesses', + 'bloodguilts', + 'bloodguilty', + 'bloodhound', + 'bloodhounds', + 'bloodiness', + 'bloodinesses', + 'bloodlessly', + 'bloodlessness', + 'bloodlessnesses', + 'bloodletting', + 'bloodlettings', + 'bloodlines', + 'bloodmobile', + 'bloodmobiles', + 'bloodroots', + 'bloodsheds', + 'bloodstain', + 'bloodstained', + 'bloodstains', + 'bloodstock', + 'bloodstocks', + 'bloodstone', + 'bloodstones', + 'bloodstream', + 'bloodstreams', + 'bloodsucker', + 'bloodsuckers', + 'bloodsucking', + 'bloodthirstily', + 'bloodthirstiness', + 'bloodthirstinesses', + 'bloodthirsty', + 'bloodworms', + 'bloomeries', + 'blossoming', + 'blotchiest', + 'bloviating', + 'blowfishes', + 'blowtorches', + 'blubbering', + 'bludgeoned', + 'bludgeoning', + 'bluebeards', + 'blueberries', + 'bluebonnet', + 'bluebonnets', + 'bluebottle', + 'bluebottles', + 'bluefishes', + 'bluegrasses', + 'bluejacket', + 'bluejackets', + 'bluenesses', + 'bluepoints', + 'blueprinted', + 'blueprinting', + 'blueprints', + 'blueshifted', + 'blueshifts', + 'bluestocking', + 'bluestockings', + 'bluestones', + 'bluetongue', + 'bluetongues', + 'bluffnesses', + 'bluishness', + 'bluishnesses', + 'blunderbuss', + 'blunderbusses', + 'blunderers', + 'blundering', + 'blunderingly', + 'bluntnesses', + 'blurriness', + 'blurrinesses', + 'blurringly', + 'blushingly', + 'blusterers', + 'blustering', + 'blusteringly', + 'blusterous', + 'boardinghouse', + 'boardinghouses', + 'boardrooms', + 'boardsailing', + 'boardsailings', + 'boardsailor', + 'boardsailors', + 'boardwalks', + 'boarfishes', + 'boastfully', + 'boastfulness', + 'boastfulnesses', + 'boatbuilder', + 'boatbuilders', + 'boatbuilding', + 'boatbuildings', + 'boathouses', + 'boatswains', + 'bobsledded', + 'bobsledder', + 'bobsledders', + 'bobsledding', + 'bobsleddings', + 'bobtailing', + 'bodaciously', + 'boddhisattva', + 'boddhisattvas', + 'bodhisattva', + 'bodhisattvas', + 'bodybuilder', + 'bodybuilders', + 'bodybuilding', + 'bodybuildings', + 'bodychecked', + 'bodychecking', + 'bodychecks', + 'bodyguards', + 'bodysurfed', + 'bodysurfer', + 'bodysurfers', + 'bodysurfing', + 'bohemianism', + 'bohemianisms', + 'boilermaker', + 'boilermakers', + 'boilerplate', + 'boilerplates', + 'boilersuit', + 'boilersuits', + 'boisterous', + 'boisterously', + 'boisterousness', + 'boisterousnesses', + 'boldfacing', + 'boldnesses', + 'bolivianos', + 'bolometers', + 'bolometric', + 'bolometrically', + 'bolshevism', + 'bolshevisms', + 'bolshevize', + 'bolshevized', + 'bolshevizes', + 'bolshevizing', + 'bolsterers', + 'bolstering', + 'bombardier', + 'bombardiers', + 'bombarding', + 'bombardment', + 'bombardments', + 'bombardons', + 'bombastically', + 'bombazines', + 'bombinated', + 'bombinates', + 'bombinating', + 'bombination', + 'bombinations', + 'bombshells', + 'bombsights', + 'bondholder', + 'bondholders', + 'bondstones', + 'bonefishes', + 'bonefishing', + 'bonefishings', + 'boneheaded', + 'boneheadedness', + 'boneheadednesses', + 'bonesetter', + 'bonesetters', + 'boninesses', + 'bonnyclabber', + 'bonnyclabbers', + 'booboisies', + 'bookbinder', + 'bookbinderies', + 'bookbinders', + 'bookbindery', + 'bookbinding', + 'bookbindings', + 'bookishness', + 'bookishnesses', + 'bookkeeper', + 'bookkeepers', + 'bookkeeping', + 'bookkeepings', + 'bookmakers', + 'bookmaking', + 'bookmakings', + 'bookmarker', + 'bookmarkers', + 'bookmobile', + 'bookmobiles', + 'bookplates', + 'bookseller', + 'booksellers', + 'bookselling', + 'booksellings', + 'bookshelves', + 'bookstalls', + 'bookstores', + 'boomeranged', + 'boomeranging', + 'boomerangs', + 'boondoggle', + 'boondoggled', + 'boondoggler', + 'boondogglers', + 'boondoggles', + 'boondoggling', + 'boorishness', + 'boorishnesses', + 'boosterism', + 'boosterisms', + 'bootblacks', + 'bootlegged', + 'bootlegger', + 'bootleggers', + 'bootlegging', + 'bootlessly', + 'bootlessness', + 'bootlessnesses', + 'bootlicked', + 'bootlicker', + 'bootlickers', + 'bootlicking', + 'bootstrapped', + 'bootstrapping', + 'bootstraps', + 'borborygmi', + 'borborygmus', + 'bordereaux', + 'borderland', + 'borderlands', + 'borderline', + 'borderlines', + 'borescopes', + 'boringness', + 'boringnesses', + 'borohydride', + 'borohydrides', + 'borosilicate', + 'borosilicates', + 'borrowings', + 'bossinesses', + 'botanically', + 'botanicals', + 'botanising', + 'botanizing', + 'botcheries', + 'botheration', + 'botherations', + 'bothersome', + 'botryoidal', + 'botrytises', + 'bottlebrush', + 'bottlebrushes', + 'bottlefuls', + 'bottleneck', + 'bottlenecked', + 'bottlenecking', + 'bottlenecks', + 'bottomland', + 'bottomlands', + 'bottomless', + 'bottomlessly', + 'bottomlessness', + 'bottomlessnesses', + 'bottommost', + 'bottomries', + 'botulinums', + 'botulinuses', + 'bougainvillaea', + 'bougainvillaeas', + 'bougainvillea', + 'bougainvilleas', + 'bouillabaisse', + 'bouillabaisses', + 'boulevardier', + 'boulevardiers', + 'boulevards', + 'bouleversement', + 'bouleversements', + 'bouncingly', + 'boundaries', + 'boundedness', + 'boundednesses', + 'bounderish', + 'boundlessly', + 'boundlessness', + 'boundlessnesses', + 'bounteously', + 'bounteousness', + 'bounteousnesses', + 'bountifully', + 'bountifulness', + 'bountifulnesses', + 'bourbonism', + 'bourbonisms', + 'bourgeoise', + 'bourgeoises', + 'bourgeoisie', + 'bourgeoisies', + 'bourgeoisification', + 'bourgeoisifications', + 'bourgeoisified', + 'bourgeoisifies', + 'bourgeoisify', + 'bourgeoisifying', + 'bourgeoned', + 'bourgeoning', + 'bourguignon', + 'bourguignonne', + 'boustrophedon', + 'boustrophedonic', + 'boustrophedons', + 'boutonniere', + 'boutonnieres', + 'bovinities', + 'bowdlerise', + 'bowdlerised', + 'bowdlerises', + 'bowdlerising', + 'bowdlerization', + 'bowdlerizations', + 'bowdlerize', + 'bowdlerized', + 'bowdlerizer', + 'bowdlerizers', + 'bowdlerizes', + 'bowdlerizing', + 'bowerbirds', + 'bowstrings', + 'boxberries', + 'boxhauling', + 'boxinesses', + 'boycotters', + 'boycotting', + 'boyfriends', + 'boyishness', + 'boyishnesses', + 'boysenberries', + 'boysenberry', + 'brachiated', + 'brachiates', + 'brachiating', + 'brachiation', + 'brachiations', + 'brachiator', + 'brachiators', + 'brachiopod', + 'brachiopods', + 'brachycephalic', + 'brachycephalies', + 'brachycephaly', + 'brachypterous', + 'bracketing', + 'brackishness', + 'brackishnesses', + 'bracteoles', + 'bradycardia', + 'bradycardias', + 'bradykinin', + 'bradykinins', + 'braggadocio', + 'braggadocios', + 'braillewriter', + 'braillewriters', + 'braillists', + 'braincases', + 'brainchild', + 'brainchildren', + 'braininess', + 'braininesses', + 'brainlessly', + 'brainlessness', + 'brainlessnesses', + 'brainpower', + 'brainpowers', + 'brainsickly', + 'brainstorm', + 'brainstormed', + 'brainstormer', + 'brainstormers', + 'brainstorming', + 'brainstormings', + 'brainstorms', + 'brainteaser', + 'brainteasers', + 'brainwashed', + 'brainwasher', + 'brainwashers', + 'brainwashes', + 'brainwashing', + 'brainwashings', + 'brambliest', + 'branchiest', + 'branchiopod', + 'branchiopods', + 'branchless', + 'branchlets', + 'branchline', + 'branchlines', + 'brandished', + 'brandishes', + 'brandishing', + 'brannigans', + 'brashnesses', + 'brassbound', + 'brasseries', + 'brassieres', + 'brassiness', + 'brassinesses', + 'bratticing', + 'brattiness', + 'brattinesses', + 'bratwursts', + 'braunschweiger', + 'braunschweigers', + 'brawniness', + 'brawninesses', + 'brazenness', + 'brazennesses', + 'brazilwood', + 'brazilwoods', + 'breadbasket', + 'breadbaskets', + 'breadboard', + 'breadboarded', + 'breadboarding', + 'breadboards', + 'breadboxes', + 'breadfruit', + 'breadfruits', + 'breadlines', + 'breadstuff', + 'breadstuffs', + 'breadthwise', + 'breadwinner', + 'breadwinners', + 'breadwinning', + 'breadwinnings', + 'breakables', + 'breakaways', + 'breakdowns', + 'breakevens', + 'breakfasted', + 'breakfaster', + 'breakfasters', + 'breakfasting', + 'breakfasts', + 'breakfront', + 'breakfronts', + 'breaksaway', + 'breakthrough', + 'breakthroughs', + 'breakwater', + 'breakwaters', + 'breastbone', + 'breastbones', + 'breastplate', + 'breastplates', + 'breaststroke', + 'breaststroker', + 'breaststrokers', + 'breaststrokes', + 'breastwork', + 'breastworks', + 'breathabilities', + 'breathability', + 'breathable', + 'breathiest', + 'breathiness', + 'breathinesses', + 'breathings', + 'breathless', + 'breathlessly', + 'breathlessness', + 'breathlessnesses', + 'breathtaking', + 'breathtakingly', + 'brecciated', + 'brecciates', + 'brecciating', + 'brecciation', + 'brecciations', + 'breechblock', + 'breechblocks', + 'breechcloth', + 'breechcloths', + 'breechclout', + 'breechclouts', + 'breechings', + 'breechloader', + 'breechloaders', + 'breezeless', + 'breezeways', + 'breeziness', + 'breezinesses', + 'bremsstrahlung', + 'bremsstrahlungs', + 'brevetcies', + 'brevetting', + 'breviaries', + 'brickfield', + 'brickfields', + 'bricklayer', + 'bricklayers', + 'bricklaying', + 'bricklayings', + 'brickworks', + 'brickyards', + 'bricolages', + 'bridegroom', + 'bridegrooms', + 'bridesmaid', + 'bridesmaids', + 'bridewells', + 'bridgeable', + 'bridgehead', + 'bridgeheads', + 'bridgeless', + 'bridgework', + 'bridgeworks', + 'briefcases', + 'briefnesses', + 'brigadiers', + 'brigandage', + 'brigandages', + 'brigandine', + 'brigandines', + 'brigantine', + 'brigantines', + 'brightened', + 'brightener', + 'brighteners', + 'brightening', + 'brightness', + 'brightnesses', + 'brightwork', + 'brightworks', + 'brilliance', + 'brilliances', + 'brilliancies', + 'brilliancy', + 'brilliantine', + 'brilliantines', + 'brilliantly', + 'brilliants', + 'brimstones', + 'bringdowns', + 'brininesses', + 'brinkmanship', + 'brinkmanships', + 'brinksmanship', + 'brinksmanships', + 'briolettes', + 'briquetted', + 'briquettes', + 'briquetting', + 'brisknesses', + 'bristlelike', + 'bristletail', + 'bristletails', + 'bristliest', + 'brittleness', + 'brittlenesses', + 'broadcasted', + 'broadcaster', + 'broadcasters', + 'broadcasting', + 'broadcasts', + 'broadcloth', + 'broadcloths', + 'broadening', + 'broadlooms', + 'broadnesses', + 'broadscale', + 'broadsheet', + 'broadsheets', + 'broadsided', + 'broadsides', + 'broadsiding', + 'broadsword', + 'broadswords', + 'broadtails', + 'brocatelle', + 'brocatelles', + 'brochettes', + 'brogueries', + 'broideries', + 'broidering', + 'brokenhearted', + 'brokenness', + 'brokennesses', + 'brokerages', + 'brokerings', + 'bromegrass', + 'bromegrasses', + 'bromelains', + 'bromeliads', + 'brominated', + 'brominates', + 'brominating', + 'bromination', + 'brominations', + 'bromocriptine', + 'bromocriptines', + 'bromouracil', + 'bromouracils', + 'bronchially', + 'bronchiectases', + 'bronchiectasis', + 'bronchiolar', + 'bronchiole', + 'bronchioles', + 'bronchites', + 'bronchitic', + 'bronchitides', + 'bronchitis', + 'bronchitises', + 'bronchodilator', + 'bronchodilators', + 'bronchogenic', + 'bronchopneumonia', + 'bronchopneumonias', + 'bronchoscope', + 'bronchoscopes', + 'bronchoscopic', + 'bronchoscopies', + 'bronchoscopist', + 'bronchoscopists', + 'bronchoscopy', + 'bronchospasm', + 'bronchospasms', + 'bronchospastic', + 'broncobuster', + 'broncobusters', + 'brontosaur', + 'brontosaurs', + 'brontosaurus', + 'brontosauruses', + 'broodiness', + 'broodinesses', + 'broodingly', + 'broodmares', + 'broomballer', + 'broomballers', + 'broomballs', + 'broomcorns', + 'broomrapes', + 'broomstick', + 'broomsticks', + 'brotherhood', + 'brotherhoods', + 'brothering', + 'brotherliness', + 'brotherlinesses', + 'browbeaten', + 'browbeating', + 'brownnosed', + 'brownnoser', + 'brownnosers', + 'brownnoses', + 'brownnosing', + 'brownshirt', + 'brownshirts', + 'brownstone', + 'brownstones', + 'browridges', + 'brucelloses', + 'brucellosis', + 'brummagems', + 'brushabilities', + 'brushability', + 'brushbacks', + 'brushlands', + 'brushwoods', + 'brushworks', + 'brusqueness', + 'brusquenesses', + 'brusquerie', + 'brusqueries', + 'brutalised', + 'brutalises', + 'brutalising', + 'brutalities', + 'brutalization', + 'brutalizations', + 'brutalized', + 'brutalizes', + 'brutalizing', + 'brutifying', + 'brutishness', + 'brutishnesses', + 'bryological', + 'bryologies', + 'bryologist', + 'bryologists', + 'bryophyllum', + 'bryophyllums', + 'bryophytes', + 'bryophytic', + 'bubblegums', + 'bubblehead', + 'bubbleheaded', + 'bubbleheads', + 'buccaneered', + 'buccaneering', + 'buccaneerish', + 'buccaneers', + 'buccinator', + 'buccinators', + 'buckboards', + 'bucketfuls', + 'bucketsful', + 'bucklering', + 'buckminsterfullerene', + 'buckminsterfullerenes', + 'buckraming', + 'buckskinned', + 'buckthorns', + 'bucktoothed', + 'buckwheats', + 'buckyballs', + 'bucolically', + 'budgerigar', + 'budgerigars', + 'budgeteers', + 'buffaloberries', + 'buffaloberry', + 'buffalofish', + 'buffalofishes', + 'buffaloing', + 'bufflehead', + 'buffleheads', + 'buffooneries', + 'buffoonery', + 'buffoonish', + 'bugleweeds', + 'buhrstones', + 'bulkinesses', + 'bullbaiting', + 'bullbaitings', + 'bulldogged', + 'bulldogger', + 'bulldoggers', + 'bulldogging', + 'bulldoggings', + 'bulldozers', + 'bulldozing', + 'bulletined', + 'bulletining', + 'bulletproof', + 'bullfighter', + 'bullfighters', + 'bullfighting', + 'bullfightings', + 'bullfights', + 'bullfinches', + 'bullheaded', + 'bullheadedly', + 'bullheadedness', + 'bullheadednesses', + 'bullishness', + 'bullishnesses', + 'bullmastiff', + 'bullmastiffs', + 'bullnecked', + 'bullrushes', + 'bullshitted', + 'bullshitting', + 'bullterrier', + 'bullterriers', + 'bullwhipped', + 'bullwhipping', + 'bullyragged', + 'bullyragging', + 'bulwarking', + 'bumbershoot', + 'bumbershoots', + 'bumblebees', + 'bumblingly', + 'bumpinesses', + 'bumpkinish', + 'bumptiously', + 'bumptiousness', + 'bumptiousnesses', + 'bunchberries', + 'bunchberry', + 'bunchgrass', + 'bunchgrasses', + 'bunglesome', + 'bunglingly', + 'bunkhouses', + 'buoyancies', + 'burdensome', + 'bureaucracies', + 'bureaucracy', + 'bureaucrat', + 'bureaucratese', + 'bureaucrateses', + 'bureaucratic', + 'bureaucratically', + 'bureaucratise', + 'bureaucratised', + 'bureaucratises', + 'bureaucratising', + 'bureaucratism', + 'bureaucratisms', + 'bureaucratization', + 'bureaucratizations', + 'bureaucratize', + 'bureaucratized', + 'bureaucratizes', + 'bureaucratizing', + 'bureaucrats', + 'burgeoning', + 'burglaries', + 'burglarious', + 'burglariously', + 'burglarize', + 'burglarized', + 'burglarizes', + 'burglarizing', + 'burglarproof', + 'burgomaster', + 'burgomasters', + 'burgundies', + 'burladeros', + 'burlesqued', + 'burlesquely', + 'burlesquer', + 'burlesquers', + 'burlesques', + 'burlesquing', + 'burlinesses', + 'burnishers', + 'burnishing', + 'burnishings', + 'burrstones', + 'bursitises', + 'burthening', + 'bushelling', + 'bushinesses', + 'bushmaster', + 'bushmasters', + 'bushranger', + 'bushrangers', + 'bushranging', + 'bushrangings', + 'bushwhacked', + 'bushwhacker', + 'bushwhackers', + 'bushwhacking', + 'bushwhacks', + 'businesses', + 'businesslike', + 'businessman', + 'businessmen', + 'businesspeople', + 'businessperson', + 'businesspersons', + 'businesswoman', + 'businesswomen', + 'bustlingly', + 'busybodies', + 'busynesses', + 'butadienes', + 'butcheries', + 'butchering', + 'butterball', + 'butterballs', + 'buttercups', + 'butterfats', + 'butterfingered', + 'butterfingers', + 'butterfish', + 'butterfishes', + 'butterflied', + 'butterflies', + 'butterflyer', + 'butterflyers', + 'butterflying', + 'butteriest', + 'butterless', + 'buttermilk', + 'buttermilks', + 'butternuts', + 'butterscotch', + 'butterscotches', + 'butterweed', + 'butterweeds', + 'butterwort', + 'butterworts', + 'buttinskies', + 'buttonball', + 'buttonballs', + 'buttonbush', + 'buttonbushes', + 'buttonhole', + 'buttonholed', + 'buttonholer', + 'buttonholers', + 'buttonholes', + 'buttonholing', + 'buttonhook', + 'buttonhooked', + 'buttonhooking', + 'buttonhooks', + 'buttonless', + 'buttonwood', + 'buttonwoods', + 'buttressed', + 'buttresses', + 'buttressing', + 'buttstocks', + 'butylating', + 'butylation', + 'butylations', + 'butyraldehyde', + 'butyraldehydes', + 'butyrophenone', + 'butyrophenones', + 'buxomnesses', + 'byproducts', + 'byssinoses', + 'byssinosis', + 'bystanders', + 'cabalettas', + 'cabalistic', + 'caballeros', + 'cabbageworm', + 'cabbageworms', + 'cabdrivers', + 'cabinetmaker', + 'cabinetmakers', + 'cabinetmaking', + 'cabinetmakings', + 'cabinetries', + 'cabinetwork', + 'cabinetworks', + 'cablegrams', + 'cabriolets', + 'cacciatore', + 'cachinnate', + 'cachinnated', + 'cachinnates', + 'cachinnating', + 'cachinnation', + 'cachinnations', + 'caciquisms', + 'cacodemonic', + 'cacodemons', + 'cacographical', + 'cacographies', + 'cacography', + 'cacomistle', + 'cacomistles', + 'cacophonies', + 'cacophonous', + 'cacophonously', + 'cadastrally', + 'cadaverine', + 'cadaverines', + 'cadaverous', + 'cadaverously', + 'caddishness', + 'caddishnesses', + 'caddisworm', + 'caddisworms', + 'cadetships', + 'caducities', + 'caecilians', + 'caesareans', + 'caesarians', + 'caespitose', + 'cafeterias', + 'cafetorium', + 'cafetoriums', + 'caffeinated', + 'cageynesses', + 'caginesses', + 'cairngorms', + 'cajolement', + 'cajolements', + 'cajoleries', + 'cakewalked', + 'cakewalker', + 'cakewalkers', + 'cakewalking', + 'calabashes', + 'calabooses', + 'calamander', + 'calamanders', + 'calamaries', + 'calamining', + 'calamities', + 'calamitous', + 'calamitously', + 'calamondin', + 'calamondins', + 'calcareous', + 'calcareously', + 'calcicoles', + 'calcicolous', + 'calciferol', + 'calciferols', + 'calciferous', + 'calcification', + 'calcifications', + 'calcifuges', + 'calcifugous', + 'calcifying', + 'calcimined', + 'calcimines', + 'calcimining', + 'calcination', + 'calcinations', + 'calcinoses', + 'calcinosis', + 'calcitonin', + 'calcitonins', + 'calculable', + 'calculated', + 'calculatedly', + 'calculatedness', + 'calculatednesses', + 'calculates', + 'calculating', + 'calculatingly', + 'calculation', + 'calculational', + 'calculations', + 'calculator', + 'calculators', + 'calculuses', + 'calefactories', + 'calefactory', + 'calendared', + 'calendaring', + 'calendered', + 'calenderer', + 'calenderers', + 'calendering', + 'calendrical', + 'calendulas', + 'calentures', + 'calibrated', + 'calibrates', + 'calibrating', + 'calibration', + 'calibrations', + 'calibrator', + 'calibrators', + 'californium', + 'californiums', + 'caliginous', + 'calipashes', + 'calipering', + 'caliphates', + 'calisthenic', + 'calisthenics', + 'calligrapher', + 'calligraphers', + 'calligraphic', + 'calligraphically', + 'calligraphies', + 'calligraphist', + 'calligraphists', + 'calligraphy', + 'callipered', + 'callipering', + 'callipygian', + 'callipygous', + 'callithump', + 'callithumpian', + 'callithumps', + 'callosities', + 'callousing', + 'callousness', + 'callousnesses', + 'callowness', + 'callownesses', + 'calmatives', + 'calmnesses', + 'calmodulin', + 'calmodulins', + 'calorically', + 'calorimeter', + 'calorimeters', + 'calorimetric', + 'calorimetrically', + 'calorimetries', + 'calorimetry', + 'calorizing', + 'calumniate', + 'calumniated', + 'calumniates', + 'calumniating', + 'calumniation', + 'calumniations', + 'calumniator', + 'calumniators', + 'calumnious', + 'calumniously', + 'calvadoses', + 'calypsonian', + 'calypsonians', + 'camaraderie', + 'camaraderies', + 'camarillas', + 'camcorders', + 'camelbacks', + 'camelopard', + 'camelopards', + 'cameraperson', + 'camerapersons', + 'camerawoman', + 'camerawomen', + 'camerlengo', + 'camerlengos', + 'camisadoes', + 'camorrista', + 'camorristi', + 'camouflage', + 'camouflageable', + 'camouflaged', + 'camouflages', + 'camouflagic', + 'camouflaging', + 'campaigned', + 'campaigner', + 'campaigners', + 'campaigning', + 'campaniles', + 'campanologies', + 'campanologist', + 'campanologists', + 'campanology', + 'campanulas', + 'campanulate', + 'campcrafts', + 'campesinos', + 'campestral', + 'campground', + 'campgrounds', + 'camphoraceous', + 'camphorate', + 'camphorated', + 'camphorates', + 'camphorating', + 'campinesses', + 'campylobacter', + 'campylobacters', + 'campylotropous', + 'canalicular', + 'canaliculi', + 'canaliculus', + 'canalising', + 'canalization', + 'canalizations', + 'canalizing', + 'cancelable', + 'cancelation', + 'cancelations', + 'cancellable', + 'cancellation', + 'cancellations', + 'cancellers', + 'cancelling', + 'cancellous', + 'cancerously', + 'candelabra', + 'candelabras', + 'candelabrum', + 'candelabrums', + 'candescence', + 'candescences', + 'candescent', + 'candidacies', + 'candidates', + 'candidature', + 'candidatures', + 'candidiases', + 'candidiasis', + 'candidness', + 'candidnesses', + 'candleberries', + 'candleberry', + 'candlefish', + 'candlefishes', + 'candleholder', + 'candleholders', + 'candlelight', + 'candlelighted', + 'candlelighter', + 'candlelighters', + 'candlelights', + 'candlenuts', + 'candlepins', + 'candlepower', + 'candlepowers', + 'candlesnuffer', + 'candlesnuffers', + 'candlestick', + 'candlesticks', + 'candlewick', + 'candlewicks', + 'candlewood', + 'candlewoods', + 'candyfloss', + 'candyflosses', + 'candytufts', + 'canebrakes', + 'caninities', + 'cankerworm', + 'cankerworms', + 'cannabinoid', + 'cannabinoids', + 'cannabinol', + 'cannabinols', + 'cannabises', + 'cannelloni', + 'cannibalise', + 'cannibalised', + 'cannibalises', + 'cannibalising', + 'cannibalism', + 'cannibalisms', + 'cannibalistic', + 'cannibalization', + 'cannibalizations', + 'cannibalize', + 'cannibalized', + 'cannibalizes', + 'cannibalizing', + 'canninesses', + 'cannisters', + 'cannonaded', + 'cannonades', + 'cannonading', + 'cannonball', + 'cannonballed', + 'cannonballing', + 'cannonballs', + 'cannoneers', + 'cannonries', + 'canonesses', + 'canonically', + 'canonicals', + 'canonicities', + 'canonicity', + 'canonising', + 'canonization', + 'canonizations', + 'canonizing', + 'canoodling', + 'canorously', + 'canorousness', + 'canorousnesses', + 'cantaloupe', + 'cantaloupes', + 'cantaloups', + 'cantankerous', + 'cantankerously', + 'cantankerousness', + 'cantankerousnesses', + 'cantatrice', + 'cantatrices', + 'cantatrici', + 'cantharides', + 'cantharidin', + 'cantharidins', + 'canthaxanthin', + 'canthaxanthins', + 'cantilenas', + 'cantilever', + 'cantilevered', + 'cantilevering', + 'cantilevers', + 'cantillate', + 'cantillated', + 'cantillates', + 'cantillating', + 'cantillation', + 'cantillations', + 'cantonment', + 'cantonments', + 'canulating', + 'canvasback', + 'canvasbacks', + 'canvaslike', + 'canvassers', + 'canvassing', + 'caoutchouc', + 'caoutchoucs', + 'capabilities', + 'capability', + 'capableness', + 'capablenesses', + 'capaciously', + 'capaciousness', + 'capaciousnesses', + 'capacitance', + 'capacitances', + 'capacitate', + 'capacitated', + 'capacitates', + 'capacitating', + 'capacitation', + 'capacitations', + 'capacities', + 'capacitive', + 'capacitively', + 'capacitors', + 'caparisoned', + 'caparisoning', + 'caparisons', + 'capercaillie', + 'capercaillies', + 'capercailzie', + 'capercailzies', + 'capillaries', + 'capillarities', + 'capillarity', + 'capitalise', + 'capitalised', + 'capitalises', + 'capitalising', + 'capitalism', + 'capitalisms', + 'capitalist', + 'capitalistic', + 'capitalistically', + 'capitalists', + 'capitalization', + 'capitalizations', + 'capitalize', + 'capitalized', + 'capitalizes', + 'capitalizing', + 'capitation', + 'capitations', + 'capitularies', + 'capitulary', + 'capitulate', + 'capitulated', + 'capitulates', + 'capitulating', + 'capitulation', + 'capitulations', + 'caponizing', + 'cappelletti', + 'cappuccino', + 'cappuccinos', + 'capriccios', + 'capricious', + 'capriciously', + 'capriciousness', + 'capriciousnesses', + 'caprification', + 'caprifications', + 'caprioling', + 'caprolactam', + 'caprolactams', + 'capsaicins', + 'capsulated', + 'capsulized', + 'capsulizes', + 'capsulizing', + 'captaincies', + 'captaining', + 'captainship', + 'captainships', + 'captioning', + 'captionless', + 'captiously', + 'captiousness', + 'captiousnesses', + 'captivated', + 'captivates', + 'captivating', + 'captivation', + 'captivations', + 'captivator', + 'captivators', + 'captivities', + 'captoprils', + 'carabineer', + 'carabineers', + 'carabinero', + 'carabineros', + 'carabiners', + 'carabinier', + 'carabiniere', + 'carabinieri', + 'carabiniers', + 'caracoling', + 'caracolled', + 'caracolling', + 'carambolas', + 'caramelise', + 'caramelised', + 'caramelises', + 'caramelising', + 'caramelize', + 'caramelized', + 'caramelizes', + 'caramelizing', + 'caravaners', + 'caravaning', + 'caravanned', + 'caravanner', + 'caravanners', + 'caravanning', + 'caravansaries', + 'caravansary', + 'caravanserai', + 'caravanserais', + 'carbachols', + 'carbamates', + 'carbamides', + 'carbanions', + 'carbazoles', + 'carbocyclic', + 'carbohydrase', + 'carbohydrases', + 'carbohydrate', + 'carbohydrates', + 'carbonaceous', + 'carbonades', + 'carbonadoed', + 'carbonadoes', + 'carbonadoing', + 'carbonados', + 'carbonaras', + 'carbonated', + 'carbonates', + 'carbonating', + 'carbonation', + 'carbonations', + 'carboniferous', + 'carbonization', + 'carbonizations', + 'carbonized', + 'carbonizes', + 'carbonizing', + 'carbonless', + 'carbonnade', + 'carbonnades', + 'carbonylation', + 'carbonylations', + 'carbonylic', + 'carboxylase', + 'carboxylases', + 'carboxylate', + 'carboxylated', + 'carboxylates', + 'carboxylating', + 'carboxylation', + 'carboxylations', + 'carboxylic', + 'carboxymethylcellulose', + 'carboxymethylcelluloses', + 'carboxypeptidase', + 'carboxypeptidases', + 'carbuncled', + 'carbuncles', + 'carbuncular', + 'carbureted', + 'carbureting', + 'carburetion', + 'carburetions', + 'carburetor', + 'carburetors', + 'carburetted', + 'carburetter', + 'carburetters', + 'carburetting', + 'carburettor', + 'carburettors', + 'carburised', + 'carburises', + 'carburising', + 'carburization', + 'carburizations', + 'carburized', + 'carburizes', + 'carburizing', + 'carcinogen', + 'carcinogeneses', + 'carcinogenesis', + 'carcinogenic', + 'carcinogenicities', + 'carcinogenicity', + 'carcinogens', + 'carcinoids', + 'carcinomas', + 'carcinomata', + 'carcinomatoses', + 'carcinomatosis', + 'carcinomatosises', + 'carcinomatous', + 'carcinosarcoma', + 'carcinosarcomas', + 'carcinosarcomata', + 'cardboards', + 'cardholder', + 'cardholders', + 'cardinalate', + 'cardinalates', + 'cardinalities', + 'cardinality', + 'cardinally', + 'cardinalship', + 'cardinalships', + 'cardiogenic', + 'cardiogram', + 'cardiograms', + 'cardiograph', + 'cardiographic', + 'cardiographies', + 'cardiographs', + 'cardiography', + 'cardiological', + 'cardiologies', + 'cardiologist', + 'cardiologists', + 'cardiology', + 'cardiomyopathies', + 'cardiomyopathy', + 'cardiopathies', + 'cardiopathy', + 'cardiopulmonary', + 'cardiorespiratory', + 'cardiothoracic', + 'cardiotonic', + 'cardiotonics', + 'cardiovascular', + 'carditises', + 'cardplayer', + 'cardplayers', + 'cardsharper', + 'cardsharpers', + 'cardsharps', + 'careerisms', + 'careerists', + 'carefuller', + 'carefullest', + 'carefulness', + 'carefulnesses', + 'caregivers', + 'caregiving', + 'caregivings', + 'carelessly', + 'carelessness', + 'carelessnesses', + 'caressingly', + 'caressively', + 'caretakers', + 'caretaking', + 'caretakings', + 'caricatural', + 'caricature', + 'caricatured', + 'caricatures', + 'caricaturing', + 'caricaturist', + 'caricaturists', + 'carillonned', + 'carillonneur', + 'carillonneurs', + 'carillonning', + 'cariogenic', + 'carjackers', + 'carjacking', + 'carjackings', + 'carmagnole', + 'carmagnoles', + 'carminative', + 'carminatives', + 'carnalities', + 'carnallite', + 'carnallites', + 'carnassial', + 'carnassials', + 'carnations', + 'carnelians', + 'carnifying', + 'carnitines', + 'carnivores', + 'carnivorous', + 'carnivorously', + 'carnivorousness', + 'carnivorousnesses', + 'carnotites', + 'carotenoid', + 'carotenoids', + 'carotinoid', + 'carotinoids', + 'carpaccios', + 'carpellary', + 'carpellate', + 'carpentered', + 'carpentering', + 'carpenters', + 'carpentries', + 'carpetbagger', + 'carpetbaggeries', + 'carpetbaggers', + 'carpetbaggery', + 'carpetbagging', + 'carpetbags', + 'carpetings', + 'carpetweed', + 'carpetweeds', + 'carpogonia', + 'carpogonial', + 'carpogonium', + 'carpoolers', + 'carpooling', + 'carpophore', + 'carpophores', + 'carpospore', + 'carpospores', + 'carrageenan', + 'carrageenans', + 'carrageenin', + 'carrageenins', + 'carrageens', + 'carragheen', + 'carragheens', + 'carrefours', + 'carriageway', + 'carriageways', + 'carritches', + 'carronades', + 'carrotiest', + 'carrottopped', + 'carrottops', + 'carrousels', + 'carrybacks', + 'carryforward', + 'carryforwards', + 'carryovers', + 'carsickness', + 'carsicknesses', + 'cartelised', + 'cartelises', + 'cartelising', + 'cartelization', + 'cartelizations', + 'cartelized', + 'cartelizes', + 'cartelizing', + 'cartilages', + 'cartilaginous', + 'cartographer', + 'cartographers', + 'cartographic', + 'cartographical', + 'cartographically', + 'cartographies', + 'cartography', + 'cartooning', + 'cartoonings', + 'cartoonish', + 'cartoonishly', + 'cartoonist', + 'cartoonists', + 'cartoonlike', + 'cartoppers', + 'cartouches', + 'cartridges', + 'cartularies', + 'cartwheeled', + 'cartwheeler', + 'cartwheelers', + 'cartwheeling', + 'cartwheels', + 'carvacrols', + 'caryatides', + 'caryopsides', + 'cascarilla', + 'cascarillas', + 'caseations', + 'casebearer', + 'casebearers', + 'caseinates', + 'caseworker', + 'caseworkers', + 'cashiering', + 'casseroles', + 'cassimeres', + 'cassiterite', + 'cassiterites', + 'cassoulets', + 'cassowaries', + 'castabilities', + 'castability', + 'castellans', + 'castellated', + 'castigated', + 'castigates', + 'castigating', + 'castigation', + 'castigations', + 'castigator', + 'castigators', + 'castoreums', + 'castrating', + 'castration', + 'castrations', + 'castrators', + 'castratory', + 'casualness', + 'casualnesses', + 'casualties', + 'casuarinas', + 'casuistical', + 'casuistries', + 'catabolically', + 'catabolism', + 'catabolisms', + 'catabolite', + 'catabolites', + 'catabolize', + 'catabolized', + 'catabolizes', + 'catabolizing', + 'catachreses', + 'catachresis', + 'catachrestic', + 'catachrestical', + 'catachrestically', + 'cataclysmal', + 'cataclysmic', + 'cataclysmically', + 'cataclysms', + 'catadioptric', + 'catadromous', + 'catafalque', + 'catafalques', + 'catalectic', + 'catalectics', + 'catalepsies', + 'cataleptic', + 'cataleptically', + 'cataleptics', + 'catalogers', + 'cataloging', + 'catalogued', + 'cataloguer', + 'cataloguers', + 'catalogues', + 'cataloguing', + 'catalytically', + 'catalyzers', + 'catalyzing', + 'catamarans', + 'catamenial', + 'catamounts', + 'cataphoras', + 'cataphoreses', + 'cataphoresis', + 'cataphoretic', + 'cataphoretically', + 'cataphoric', + 'cataplasms', + 'cataplexies', + 'catapulted', + 'catapulting', + 'cataractous', + 'catarrhally', + 'catarrhine', + 'catarrhines', + 'catastrophe', + 'catastrophes', + 'catastrophic', + 'catastrophically', + 'catastrophism', + 'catastrophisms', + 'catastrophist', + 'catastrophists', + 'catatonias', + 'catatonically', + 'catatonics', + 'catcalling', + 'catchflies', + 'catchments', + 'catchpenny', + 'catchphrase', + 'catchphrases', + 'catchpoles', + 'catchpolls', + 'catchwords', + 'catecheses', + 'catechesis', + 'catechetical', + 'catechismal', + 'catechisms', + 'catechistic', + 'catechists', + 'catechization', + 'catechizations', + 'catechized', + 'catechizer', + 'catechizers', + 'catechizes', + 'catechizing', + 'catecholamine', + 'catecholaminergic', + 'catecholamines', + 'catechumen', + 'catechumens', + 'categorical', + 'categorically', + 'categories', + 'categorise', + 'categorised', + 'categorises', + 'categorising', + 'categorization', + 'categorizations', + 'categorize', + 'categorized', + 'categorizes', + 'categorizing', + 'catenaries', + 'catenating', + 'catenation', + 'catenations', + 'catercorner', + 'catercornered', + 'cateresses', + 'caterpillar', + 'caterpillars', + 'caterwauled', + 'caterwauling', + 'caterwauls', + 'catfacings', + 'cathartics', + 'cathecting', + 'cathedrals', + 'cathepsins', + 'catheterization', + 'catheterizations', + 'catheterize', + 'catheterized', + 'catheterizes', + 'catheterizing', + 'cathodally', + 'cathodically', + 'catholically', + 'catholicate', + 'catholicates', + 'catholicities', + 'catholicity', + 'catholicize', + 'catholicized', + 'catholicizes', + 'catholicizing', + 'catholicoi', + 'catholicon', + 'catholicons', + 'catholicos', + 'catholicoses', + 'cationically', + 'catnappers', + 'catnapping', + 'cattinesses', + 'caucussing', + 'caudillismo', + 'caudillismos', + 'cauliflower', + 'caulifloweret', + 'cauliflowerets', + 'cauliflowers', + 'causalgias', + 'causalities', + 'causations', + 'causatively', + 'causatives', + 'causewayed', + 'causewaying', + 'caustically', + 'causticities', + 'causticity', + 'cauterization', + 'cauterizations', + 'cauterized', + 'cauterizes', + 'cauterizing', + 'cautionary', + 'cautioning', + 'cautiously', + 'cautiousness', + 'cautiousnesses', + 'cavalcades', + 'cavaliered', + 'cavaliering', + 'cavalierism', + 'cavalierisms', + 'cavalierly', + 'cavalletti', + 'cavalryman', + 'cavalrymen', + 'cavefishes', + 'cavernicolous', + 'cavernously', + 'cavitating', + 'cavitation', + 'cavitations', + 'ceanothuses', + 'ceaselessly', + 'ceaselessness', + 'ceaselessnesses', + 'cedarbirds', + 'cedarwoods', + 'ceilometer', + 'ceilometers', + 'celandines', + 'celebrants', + 'celebrated', + 'celebratedness', + 'celebratednesses', + 'celebrates', + 'celebrating', + 'celebration', + 'celebrations', + 'celebrator', + 'celebrators', + 'celebratory', + 'celebrities', + 'celerities', + 'celestially', + 'celestials', + 'celestites', + 'celibacies', + 'cellarages', + 'cellarette', + 'cellarettes', + 'cellblocks', + 'cellobiose', + 'cellobioses', + 'celloidins', + 'cellophane', + 'cellophanes', + 'cellularities', + 'cellularity', + 'cellulases', + 'cellulites', + 'cellulitides', + 'cellulitis', + 'cellulitises', + 'celluloids', + 'cellulolytic', + 'celluloses', + 'cellulosic', + 'cellulosics', + 'cementation', + 'cementations', + 'cementites', + 'cementitious', + 'cemeteries', + 'cenospecies', + 'censorious', + 'censoriously', + 'censoriousness', + 'censoriousnesses', + 'censorship', + 'censorships', + 'censurable', + 'centaureas', + 'centauries', + 'centenarian', + 'centenarians', + 'centenaries', + 'centennial', + 'centennially', + 'centennials', + 'centerboard', + 'centerboards', + 'centeredness', + 'centerednesses', + 'centerfold', + 'centerfolds', + 'centerless', + 'centerline', + 'centerlines', + 'centerpiece', + 'centerpieces', + 'centesimal', + 'centesimos', + 'centigrade', + 'centigrams', + 'centiliter', + 'centiliters', + 'centillion', + 'centillions', + 'centimeter', + 'centimeters', + 'centimorgan', + 'centimorgans', + 'centipedes', + 'centralest', + 'centralise', + 'centralised', + 'centralises', + 'centralising', + 'centralism', + 'centralisms', + 'centralist', + 'centralistic', + 'centralists', + 'centralities', + 'centrality', + 'centralization', + 'centralizations', + 'centralize', + 'centralized', + 'centralizer', + 'centralizers', + 'centralizes', + 'centralizing', + 'centrically', + 'centricities', + 'centricity', + 'centrifugal', + 'centrifugally', + 'centrifugals', + 'centrifugation', + 'centrifugations', + 'centrifuge', + 'centrifuged', + 'centrifuges', + 'centrifuging', + 'centrioles', + 'centripetal', + 'centripetally', + 'centromere', + 'centromeres', + 'centromeric', + 'centrosome', + 'centrosomes', + 'centrosymmetric', + 'centupling', + 'centurions', + 'cephalexin', + 'cephalexins', + 'cephalically', + 'cephalization', + 'cephalizations', + 'cephalometric', + 'cephalometries', + 'cephalometry', + 'cephalopod', + 'cephalopods', + 'cephaloridine', + 'cephaloridines', + 'cephalosporin', + 'cephalosporins', + 'cephalothin', + 'cephalothins', + 'cephalothoraces', + 'cephalothorax', + 'cephalothoraxes', + 'ceramicist', + 'ceramicists', + 'ceratopsian', + 'ceratopsians', + 'cerebellar', + 'cerebellum', + 'cerebellums', + 'cerebrally', + 'cerebrated', + 'cerebrates', + 'cerebrating', + 'cerebration', + 'cerebrations', + 'cerebroside', + 'cerebrosides', + 'cerebrospinal', + 'cerebrovascular', + 'cerecloths', + 'ceremonial', + 'ceremonialism', + 'ceremonialisms', + 'ceremonialist', + 'ceremonialists', + 'ceremonially', + 'ceremonials', + 'ceremonies', + 'ceremonious', + 'ceremoniously', + 'ceremoniousness', + 'ceremoniousnesses', + 'certainest', + 'certainties', + 'certifiable', + 'certifiably', + 'certificate', + 'certificated', + 'certificates', + 'certificating', + 'certification', + 'certifications', + 'certificatory', + 'certifiers', + 'certifying', + 'certiorari', + 'certioraris', + 'certitudes', + 'ceruloplasmin', + 'ceruloplasmins', + 'ceruminous', + 'cerussites', + 'cervelases', + 'cervicites', + 'cervicitides', + 'cervicitis', + 'cervicitises', + 'cessations', + 'cetologies', + 'cetologist', + 'cetologists', + 'chaetognath', + 'chaetognaths', + 'chafferers', + 'chaffering', + 'chaffinches', + 'chagrining', + 'chagrinned', + 'chagrinning', + 'chainsawed', + 'chainsawing', + 'chainwheel', + 'chainwheels', + 'chairlifts', + 'chairmaned', + 'chairmaning', + 'chairmanned', + 'chairmanning', + 'chairmanship', + 'chairmanships', + 'chairperson', + 'chairpersons', + 'chairwoman', + 'chairwomen', + 'chalazions', + 'chalcedonic', + 'chalcedonies', + 'chalcedony', + 'chalcocite', + 'chalcocites', + 'chalcogenide', + 'chalcogenides', + 'chalcogens', + 'chalcopyrite', + 'chalcopyrites', + 'chalkboard', + 'chalkboards', + 'challenged', + 'challenger', + 'challengers', + 'challenges', + 'challenging', + 'challengingly', + 'chalybeate', + 'chalybeates', + 'chamaephyte', + 'chamaephytes', + 'chambering', + 'chamberlain', + 'chamberlains', + 'chambermaid', + 'chambermaids', + 'chameleonic', + 'chameleonlike', + 'chameleons', + 'chamfering', + 'chamoising', + 'chamomiles', + 'champagnes', + 'champaigns', + 'champerties', + 'champertous', + 'champignon', + 'champignons', + 'championed', + 'championing', + 'championship', + 'championships', + 'champleves', + 'chancelleries', + 'chancellery', + 'chancellor', + 'chancellories', + 'chancellors', + 'chancellorship', + 'chancellorships', + 'chancellory', + 'chanceries', + 'chanciness', + 'chancinesses', + 'chancroidal', + 'chancroids', + 'chandelier', + 'chandeliered', + 'chandeliers', + 'chandelled', + 'chandelles', + 'chandelling', + 'chandleries', + 'changeabilities', + 'changeability', + 'changeable', + 'changeableness', + 'changeablenesses', + 'changeably', + 'changefully', + 'changefulness', + 'changefulnesses', + 'changeless', + 'changelessly', + 'changelessness', + 'changelessnesses', + 'changeling', + 'changelings', + 'changeover', + 'changeovers', + 'channelers', + 'channeling', + 'channelization', + 'channelizations', + 'channelize', + 'channelized', + 'channelizes', + 'channelizing', + 'channelled', + 'channelling', + 'chansonnier', + 'chansonniers', + 'chanterelle', + 'chanterelles', + 'chanteuses', + 'chanticleer', + 'chanticleers', + 'chaotically', + 'chaparajos', + 'chaparejos', + 'chaparrals', + 'chaperonage', + 'chaperonages', + 'chaperoned', + 'chaperones', + 'chaperoning', + 'chapfallen', + 'chaplaincies', + 'chaplaincy', + 'chaptering', + 'charabancs', + 'charactered', + 'characterful', + 'characteries', + 'charactering', + 'characteristic', + 'characteristically', + 'characteristics', + 'characterization', + 'characterizations', + 'characterize', + 'characterized', + 'characterizes', + 'characterizing', + 'characterless', + 'characterological', + 'characterologically', + 'characters', + 'charactery', + 'charbroiled', + 'charbroiler', + 'charbroilers', + 'charbroiling', + 'charbroils', + 'charcoaled', + 'charcoaling', + 'charcuterie', + 'charcuteries', + 'chardonnay', + 'chardonnays', + 'chargeable', + 'chargehand', + 'chargehands', + 'charinesses', + 'charioteer', + 'charioteers', + 'charioting', + 'charismata', + 'charismatic', + 'charismatics', + 'charitable', + 'charitableness', + 'charitablenesses', + 'charitably', + 'charivaris', + 'charladies', + 'charlatanism', + 'charlatanisms', + 'charlatanries', + 'charlatanry', + 'charlatans', + 'charlottes', + 'charmeuses', + 'charminger', + 'charmingest', + 'charmingly', + 'charterers', + 'chartering', + 'chartreuse', + 'chartreuses', + 'chartularies', + 'chartulary', + 'chassepots', + 'chasteners', + 'chasteness', + 'chastenesses', + 'chastening', + 'chastisement', + 'chastisements', + 'chastisers', + 'chastising', + 'chastities', + 'chateaubriand', + 'chateaubriands', + 'chatelaine', + 'chatelaines', + 'chatelains', + 'chatoyance', + 'chatoyances', + 'chatoyancies', + 'chatoyancy', + 'chatoyants', + 'chatterbox', + 'chatterboxes', + 'chatterers', + 'chattering', + 'chattiness', + 'chattinesses', + 'chauffeured', + 'chauffeuring', + 'chauffeurs', + 'chaulmoogra', + 'chaulmoogras', + 'chaussures', + 'chautauqua', + 'chautauquas', + 'chauvinism', + 'chauvinisms', + 'chauvinist', + 'chauvinistic', + 'chauvinistically', + 'chauvinists', + 'chawbacons', + 'cheapening', + 'cheapishly', + 'cheapjacks', + 'cheapnesses', + 'cheapskate', + 'cheapskates', + 'checkbooks', + 'checkerberries', + 'checkerberry', + 'checkerboard', + 'checkerboards', + 'checkering', + 'checklists', + 'checkmarked', + 'checkmarking', + 'checkmarks', + 'checkmated', + 'checkmates', + 'checkmating', + 'checkpoint', + 'checkpoints', + 'checkreins', + 'checkrooms', + 'checkrowed', + 'checkrowing', + 'cheechakos', + 'cheekbones', + 'cheekiness', + 'cheekinesses', + 'cheerfuller', + 'cheerfullest', + 'cheerfully', + 'cheerfulness', + 'cheerfulnesses', + 'cheeriness', + 'cheerinesses', + 'cheerleader', + 'cheerleaders', + 'cheerleading', + 'cheerleads', + 'cheerlessly', + 'cheerlessness', + 'cheerlessnesses', + 'cheeseburger', + 'cheeseburgers', + 'cheesecake', + 'cheesecakes', + 'cheesecloth', + 'cheesecloths', + 'cheeseparing', + 'cheeseparings', + 'cheesiness', + 'cheesinesses', + 'chelatable', + 'chelations', + 'chelicerae', + 'cheliceral', + 'chelonians', + 'chemically', + 'chemiluminescence', + 'chemiluminescences', + 'chemiluminescent', + 'chemiosmotic', + 'chemisette', + 'chemisettes', + 'chemisorbed', + 'chemisorbing', + 'chemisorbs', + 'chemisorption', + 'chemisorptions', + 'chemistries', + 'chemoautotrophic', + 'chemoautotrophies', + 'chemoautotrophy', + 'chemoprophylactic', + 'chemoprophylaxes', + 'chemoprophylaxis', + 'chemoreception', + 'chemoreceptions', + 'chemoreceptive', + 'chemoreceptor', + 'chemoreceptors', + 'chemosurgeries', + 'chemosurgery', + 'chemosurgical', + 'chemosyntheses', + 'chemosynthesis', + 'chemosynthetic', + 'chemotactic', + 'chemotactically', + 'chemotaxes', + 'chemotaxis', + 'chemotaxonomic', + 'chemotaxonomies', + 'chemotaxonomist', + 'chemotaxonomists', + 'chemotaxonomy', + 'chemotherapeutic', + 'chemotherapeutically', + 'chemotherapeutics', + 'chemotherapies', + 'chemotherapist', + 'chemotherapists', + 'chemotherapy', + 'chemotropism', + 'chemotropisms', + 'chemurgies', + 'cheongsams', + 'chequering', + 'cherimoyas', + 'cherishable', + 'cherishers', + 'cherishing', + 'chernozemic', + 'chernozems', + 'cherrylike', + 'cherrystone', + 'cherrystones', + 'cherubically', + 'cherublike', + 'chessboard', + 'chessboards', + 'chesterfield', + 'chesterfields', + 'chevaliers', + 'chevelures', + 'chiaroscurist', + 'chiaroscurists', + 'chiaroscuro', + 'chiaroscuros', + 'chiasmatic', + 'chibouques', + 'chicaneries', + 'chiccories', + 'chickadees', + 'chickarees', + 'chickenhearted', + 'chickening', + 'chickenpox', + 'chickenpoxes', + 'chickenshit', + 'chickenshits', + 'chickories', + 'chickweeds', + 'chicnesses', + 'chiefships', + 'chieftaincies', + 'chieftaincy', + 'chieftains', + 'chieftainship', + 'chieftainships', + 'chiffchaff', + 'chiffchaffs', + 'chiffonade', + 'chiffonades', + 'chiffonier', + 'chiffoniers', + 'chifforobe', + 'chifforobes', + 'chihuahuas', + 'chilblains', + 'childbearing', + 'childbearings', + 'childbirth', + 'childbirths', + 'childhoods', + 'childishly', + 'childishness', + 'childishnesses', + 'childlessness', + 'childlessnesses', + 'childliest', + 'childlikeness', + 'childlikenesses', + 'childproof', + 'childproofed', + 'childproofing', + 'childproofs', + 'chiliastic', + 'chilliness', + 'chillinesses', + 'chillingly', + 'chillnesses', + 'chimaerism', + 'chimaerisms', + 'chimerical', + 'chimerically', + 'chimerisms', + 'chimichanga', + 'chimichangas', + 'chimneylike', + 'chimneypiece', + 'chimneypieces', + 'chimpanzee', + 'chimpanzees', + 'chinaberries', + 'chinaberry', + 'chinawares', + 'chincherinchee', + 'chincherinchees', + 'chinchiest', + 'chinchilla', + 'chinchillas', + 'chinkapins', + 'chinoiserie', + 'chinoiseries', + 'chinquapin', + 'chinquapins', + 'chintziest', + 'chionodoxa', + 'chionodoxas', + 'chipboards', + 'chippering', + 'chiralities', + 'chirimoyas', + 'chirographer', + 'chirographers', + 'chirographic', + 'chirographical', + 'chirographies', + 'chirography', + 'chiromancer', + 'chiromancers', + 'chiromancies', + 'chiromancy', + 'chironomid', + 'chironomids', + 'chiropodies', + 'chiropodist', + 'chiropodists', + 'chiropractic', + 'chiropractics', + 'chiropractor', + 'chiropractors', + 'chiropteran', + 'chiropterans', + 'chirruping', + 'chirurgeon', + 'chirurgeons', + 'chisellers', + 'chiselling', + 'chitchatted', + 'chitchatting', + 'chittering', + 'chitterlings', + 'chivalries', + 'chivalrous', + 'chivalrously', + 'chivalrousness', + 'chivalrousnesses', + 'chivareeing', + 'chivariing', + 'chlamydiae', + 'chlamydial', + 'chlamydospore', + 'chlamydospores', + 'chloasmata', + 'chloracnes', + 'chloralose', + 'chloralosed', + 'chloraloses', + 'chloramine', + 'chloramines', + 'chloramphenicol', + 'chloramphenicols', + 'chlordanes', + 'chlordiazepoxide', + 'chlordiazepoxides', + 'chlorellas', + 'chlorenchyma', + 'chlorenchymas', + 'chlorenchymata', + 'chlorinate', + 'chlorinated', + 'chlorinates', + 'chlorinating', + 'chlorination', + 'chlorinations', + 'chlorinator', + 'chlorinators', + 'chlorinities', + 'chlorinity', + 'chlorobenzene', + 'chlorobenzenes', + 'chlorofluorocarbon', + 'chlorofluorocarbons', + 'chlorofluoromethane', + 'chlorofluoromethanes', + 'chloroform', + 'chloroformed', + 'chloroforming', + 'chloroforms', + 'chlorohydrin', + 'chlorohydrins', + 'chlorophyll', + 'chlorophyllous', + 'chlorophylls', + 'chloropicrin', + 'chloropicrins', + 'chloroplast', + 'chloroplastic', + 'chloroplasts', + 'chloroprene', + 'chloroprenes', + 'chloroquine', + 'chloroquines', + 'chlorothiazide', + 'chlorothiazides', + 'chlorpromazine', + 'chlorpromazines', + 'chlorpropamide', + 'chlorpropamides', + 'chlortetracycline', + 'chlortetracyclines', + 'choanocyte', + 'choanocytes', + 'chockablock', + 'chocoholic', + 'chocoholics', + 'chocolates', + 'chocolatey', + 'chocolatier', + 'chocolatiers', + 'choiceness', + 'choicenesses', + 'choirmaster', + 'choirmasters', + 'chokeberries', + 'chokeberry', + 'chokecherries', + 'chokecherry', + 'cholangiogram', + 'cholangiograms', + 'cholangiographic', + 'cholangiographies', + 'cholangiography', + 'cholecalciferol', + 'cholecalciferols', + 'cholecystectomies', + 'cholecystectomized', + 'cholecystectomy', + 'cholecystites', + 'cholecystitides', + 'cholecystitis', + 'cholecystitises', + 'cholecystokinin', + 'cholecystokinins', + 'cholelithiases', + 'cholelithiasis', + 'cholerically', + 'cholestases', + 'cholestasis', + 'cholestatic', + 'cholesteric', + 'cholesterol', + 'cholesterols', + 'cholestyramine', + 'cholestyramines', + 'cholinergic', + 'cholinergically', + 'cholinesterase', + 'cholinesterases', + 'chondriosome', + 'chondriosomes', + 'chondrites', + 'chondritic', + 'chondrocrania', + 'chondrocranium', + 'chondrocraniums', + 'chondroitin', + 'chondroitins', + 'chondrules', + 'chopfallen', + 'chophouses', + 'choplogics', + 'choppering', + 'choppiness', + 'choppinesses', + 'chopsticks', + 'choraguses', + 'chordamesoderm', + 'chordamesodermal', + 'chordamesoderms', + 'choreguses', + 'choreiform', + 'choreograph', + 'choreographed', + 'choreographer', + 'choreographers', + 'choreographic', + 'choreographically', + 'choreographies', + 'choreographing', + 'choreographs', + 'choreography', + 'chorioallantoic', + 'chorioallantoides', + 'chorioallantois', + 'choriocarcinoma', + 'choriocarcinomas', + 'choriocarcinomata', + 'choristers', + 'chorographer', + 'chorographers', + 'chorographic', + 'chorographies', + 'chorography', + 'chorussing', + 'chowderhead', + 'chowderheaded', + 'chowderheads', + 'chowdering', + 'chowhounds', + 'chrestomathies', + 'chrestomathy', + 'chrismation', + 'chrismations', + 'christened', + 'christening', + 'christenings', + 'christiania', + 'christianias', + 'chromaffin', + 'chromatically', + 'chromaticism', + 'chromaticisms', + 'chromaticities', + 'chromaticity', + 'chromatics', + 'chromatids', + 'chromatinic', + 'chromatins', + 'chromatogram', + 'chromatograms', + 'chromatograph', + 'chromatographed', + 'chromatographer', + 'chromatographers', + 'chromatographic', + 'chromatographically', + 'chromatographies', + 'chromatographing', + 'chromatographs', + 'chromatography', + 'chromatolyses', + 'chromatolysis', + 'chromatolytic', + 'chromatophore', + 'chromatophores', + 'chrominance', + 'chrominances', + 'chromizing', + 'chromocenter', + 'chromocenters', + 'chromodynamics', + 'chromogenic', + 'chromogens', + 'chromolithograph', + 'chromolithographed', + 'chromolithographer', + 'chromolithographers', + 'chromolithographic', + 'chromolithographies', + 'chromolithographing', + 'chromolithographs', + 'chromolithography', + 'chromomere', + 'chromomeres', + 'chromomeric', + 'chromonema', + 'chromonemata', + 'chromonematic', + 'chromophil', + 'chromophobe', + 'chromophore', + 'chromophores', + 'chromophoric', + 'chromoplast', + 'chromoplasts', + 'chromoprotein', + 'chromoproteins', + 'chromosomal', + 'chromosomally', + 'chromosome', + 'chromosomes', + 'chromosphere', + 'chromospheres', + 'chromospheric', + 'chronaxies', + 'chronically', + 'chronicities', + 'chronicity', + 'chronicled', + 'chronicler', + 'chroniclers', + 'chronicles', + 'chronicling', + 'chronobiologic', + 'chronobiological', + 'chronobiologies', + 'chronobiologist', + 'chronobiologists', + 'chronobiology', + 'chronogram', + 'chronograms', + 'chronograph', + 'chronographic', + 'chronographies', + 'chronographs', + 'chronography', + 'chronologer', + 'chronologers', + 'chronologic', + 'chronological', + 'chronologically', + 'chronologies', + 'chronologist', + 'chronologists', + 'chronology', + 'chronometer', + 'chronometers', + 'chronometric', + 'chronometrical', + 'chronometrically', + 'chronometries', + 'chronometry', + 'chronotherapies', + 'chronotherapy', + 'chrysalides', + 'chrysalids', + 'chrysalises', + 'chrysanthemum', + 'chrysanthemums', + 'chrysarobin', + 'chrysarobins', + 'chrysoberyl', + 'chrysoberyls', + 'chrysolite', + 'chrysolites', + 'chrysomelid', + 'chrysomelids', + 'chrysophyte', + 'chrysophytes', + 'chrysoprase', + 'chrysoprases', + 'chrysotile', + 'chrysotiles', + 'chubbiness', + 'chubbinesses', + 'chuckawalla', + 'chuckawallas', + 'chuckholes', + 'chucklehead', + 'chuckleheaded', + 'chuckleheads', + 'chucklesome', + 'chucklingly', + 'chuckwalla', + 'chuckwallas', + 'chugalugged', + 'chugalugging', + 'chumminess', + 'chumminesses', + 'chuntering', + 'churchgoer', + 'churchgoers', + 'churchgoing', + 'churchgoings', + 'churchianities', + 'churchianity', + 'churchiest', + 'churchings', + 'churchless', + 'churchlier', + 'churchliest', + 'churchliness', + 'churchlinesses', + 'churchmanship', + 'churchmanships', + 'churchwarden', + 'churchwardens', + 'churchwoman', + 'churchwomen', + 'churchyard', + 'churchyards', + 'churlishly', + 'churlishness', + 'churlishnesses', + 'churrigueresque', + 'chylomicron', + 'chylomicrons', + 'chymotrypsin', + 'chymotrypsinogen', + 'chymotrypsinogens', + 'chymotrypsins', + 'chymotryptic', + 'cicatrices', + 'cicatricial', + 'cicatrixes', + 'cicatrization', + 'cicatrizations', + 'cicatrized', + 'cicatrizes', + 'cicatrizing', + 'cicisbeism', + 'cicisbeisms', + 'cigarettes', + 'cigarillos', + 'ciguateras', + 'ciliations', + 'cimetidine', + 'cimetidines', + 'cinchonine', + 'cinchonines', + 'cinchonism', + 'cinchonisms', + 'cincturing', + 'cinemagoer', + 'cinemagoers', + 'cinematheque', + 'cinematheques', + 'cinematically', + 'cinematize', + 'cinematized', + 'cinematizes', + 'cinematizing', + 'cinematograph', + 'cinematographer', + 'cinematographers', + 'cinematographic', + 'cinematographically', + 'cinematographies', + 'cinematographs', + 'cinematography', + 'cinerarias', + 'cinerarium', + 'cinnabarine', + 'cinquecentist', + 'cinquecentisti', + 'cinquecentists', + 'cinquecento', + 'cinquecentos', + 'cinquefoil', + 'cinquefoils', + 'ciphertext', + 'ciphertexts', + 'circinately', + 'circuities', + 'circuiting', + 'circuitous', + 'circuitously', + 'circuitousness', + 'circuitousnesses', + 'circuitries', + 'circularise', + 'circularised', + 'circularises', + 'circularising', + 'circularities', + 'circularity', + 'circularization', + 'circularizations', + 'circularize', + 'circularized', + 'circularizes', + 'circularizing', + 'circularly', + 'circularness', + 'circularnesses', + 'circulatable', + 'circulated', + 'circulates', + 'circulating', + 'circulation', + 'circulations', + 'circulative', + 'circulator', + 'circulators', + 'circulatory', + 'circumambient', + 'circumambiently', + 'circumambulate', + 'circumambulated', + 'circumambulates', + 'circumambulating', + 'circumambulation', + 'circumambulations', + 'circumcenter', + 'circumcenters', + 'circumcircle', + 'circumcircles', + 'circumcise', + 'circumcised', + 'circumciser', + 'circumcisers', + 'circumcises', + 'circumcising', + 'circumcision', + 'circumcisions', + 'circumference', + 'circumferences', + 'circumferential', + 'circumflex', + 'circumflexes', + 'circumfluent', + 'circumfluous', + 'circumfuse', + 'circumfused', + 'circumfuses', + 'circumfusing', + 'circumfusion', + 'circumfusions', + 'circumjacent', + 'circumlocution', + 'circumlocutions', + 'circumlocutory', + 'circumlunar', + 'circumnavigate', + 'circumnavigated', + 'circumnavigates', + 'circumnavigating', + 'circumnavigation', + 'circumnavigations', + 'circumnavigator', + 'circumnavigators', + 'circumpolar', + 'circumscissile', + 'circumscribe', + 'circumscribed', + 'circumscribes', + 'circumscribing', + 'circumscription', + 'circumscriptions', + 'circumspect', + 'circumspection', + 'circumspections', + 'circumspectly', + 'circumstance', + 'circumstanced', + 'circumstances', + 'circumstantial', + 'circumstantialities', + 'circumstantiality', + 'circumstantially', + 'circumstantiate', + 'circumstantiated', + 'circumstantiates', + 'circumstantiating', + 'circumstellar', + 'circumvallate', + 'circumvallated', + 'circumvallates', + 'circumvallating', + 'circumvallation', + 'circumvallations', + 'circumvent', + 'circumvented', + 'circumventing', + 'circumvention', + 'circumventions', + 'circumvents', + 'circumvolution', + 'circumvolutions', + 'cirrhotics', + 'cirrocumuli', + 'cirrocumulus', + 'cirrostrati', + 'cirrostratus', + 'cisplatins', + 'citational', + 'citification', + 'citifications', + 'citizeness', + 'citizenesses', + 'citizenries', + 'citizenship', + 'citizenships', + 'citriculture', + 'citricultures', + 'citriculturist', + 'citriculturists', + 'citronella', + 'citronellal', + 'citronellals', + 'citronellas', + 'citronellol', + 'citronellols', + 'citrulline', + 'citrullines', + 'cityscapes', + 'civilianization', + 'civilianizations', + 'civilianize', + 'civilianized', + 'civilianizes', + 'civilianizing', + 'civilisation', + 'civilisations', + 'civilising', + 'civilities', + 'civilization', + 'civilizational', + 'civilizations', + 'civilizers', + 'civilizing', + 'clabbering', + 'cladistically', + 'cladistics', + 'cladoceran', + 'cladocerans', + 'cladogeneses', + 'cladogenesis', + 'cladogenetic', + 'cladogenetically', + 'cladograms', + 'cladophyll', + 'cladophylla', + 'cladophylls', + 'cladophyllum', + 'clairaudience', + 'clairaudiences', + 'clairaudient', + 'clairaudiently', + 'clairvoyance', + 'clairvoyances', + 'clairvoyant', + 'clairvoyantly', + 'clairvoyants', + 'clamberers', + 'clambering', + 'clamminess', + 'clamminesses', + 'clamorously', + 'clamorousness', + 'clamorousnesses', + 'clamouring', + 'clampdowns', + 'clamshells', + 'clandestine', + 'clandestinely', + 'clandestineness', + 'clandestinenesses', + 'clandestinities', + 'clandestinity', + 'clangoring', + 'clangorous', + 'clangorously', + 'clangoured', + 'clangouring', + 'clankingly', + 'clannishly', + 'clannishness', + 'clannishnesses', + 'clapboarded', + 'clapboarding', + 'clapboards', + 'clapperclaw', + 'clapperclawed', + 'clapperclawing', + 'clapperclaws', + 'clarification', + 'clarifications', + 'clarifiers', + 'clarifying', + 'clarinetist', + 'clarinetists', + 'clarinettist', + 'clarinettists', + 'clarioning', + 'classicalities', + 'classicality', + 'classically', + 'classicism', + 'classicisms', + 'classicist', + 'classicistic', + 'classicists', + 'classicize', + 'classicized', + 'classicizes', + 'classicizing', + 'classifiable', + 'classification', + 'classifications', + 'classificatory', + 'classified', + 'classifier', + 'classifiers', + 'classifies', + 'classifying', + 'classiness', + 'classinesses', + 'classlessness', + 'classlessnesses', + 'classmates', + 'classrooms', + 'clathrates', + 'clatterers', + 'clattering', + 'clatteringly', + 'claudication', + 'claudications', + 'claughting', + 'claustrophobe', + 'claustrophobes', + 'claustrophobia', + 'claustrophobias', + 'claustrophobic', + 'claustrophobically', + 'clavichord', + 'clavichordist', + 'clavichordists', + 'clavichords', + 'clavicular', + 'clavierist', + 'clavieristic', + 'clavierists', + 'clawhammer', + 'cleanabilities', + 'cleanability', + 'cleanhanded', + 'cleanliest', + 'cleanliness', + 'cleanlinesses', + 'cleannesses', + 'clearances', + 'clearheaded', + 'clearheadedly', + 'clearheadedness', + 'clearheadednesses', + 'clearinghouse', + 'clearinghouses', + 'clearnesses', + 'clearstories', + 'clearstory', + 'clearwings', + 'cleistogamic', + 'cleistogamies', + 'cleistogamous', + 'cleistogamously', + 'cleistogamy', + 'clematises', + 'clemencies', + 'clepsydrae', + 'clepsydras', + 'clerestories', + 'clerestory', + 'clergywoman', + 'clergywomen', + 'clericalism', + 'clericalisms', + 'clericalist', + 'clericalists', + 'clerically', + 'clerkliest', + 'clerkships', + 'cleverness', + 'clevernesses', + 'clientages', + 'clienteles', + 'clientless', + 'cliffhanger', + 'cliffhangers', + 'climacteric', + 'climacterics', + 'climactically', + 'climatically', + 'climatological', + 'climatologically', + 'climatologies', + 'climatologist', + 'climatologists', + 'climatology', + 'climaxless', + 'clinchingly', + 'clingstone', + 'clingstones', + 'clinically', + 'clinicians', + 'clinicopathologic', + 'clinicopathological', + 'clinicopathologically', + 'clinkering', + 'clinometer', + 'clinometers', + 'clinquants', + 'clintonias', + 'cliometric', + 'cliometrician', + 'cliometricians', + 'cliometrics', + 'clipboards', + 'clipsheets', + 'cliquishly', + 'cliquishness', + 'cliquishnesses', + 'clitorectomies', + 'clitorectomy', + 'clitoridectomies', + 'clitoridectomy', + 'clitorides', + 'clitorises', + 'cloakrooms', + 'clobbering', + 'clockworks', + 'cloddishness', + 'cloddishnesses', + 'clodhopper', + 'clodhoppers', + 'clodhopping', + 'clofibrate', + 'clofibrates', + 'cloisonnes', + 'cloistered', + 'cloistering', + 'cloistress', + 'cloistresses', + 'clomiphene', + 'clomiphenes', + 'clonicities', + 'clonidines', + 'closedowns', + 'closefisted', + 'closemouthed', + 'closenesses', + 'closestool', + 'closestools', + 'closetfuls', + 'clostridia', + 'clostridial', + 'clostridium', + 'clothbound', + 'clotheshorse', + 'clotheshorses', + 'clothesline', + 'clotheslined', + 'clotheslines', + 'clotheslining', + 'clothespin', + 'clothespins', + 'clothespress', + 'clothespresses', + 'cloudberries', + 'cloudberry', + 'cloudburst', + 'cloudbursts', + 'cloudiness', + 'cloudinesses', + 'cloudlands', + 'cloudlessly', + 'cloudlessness', + 'cloudlessnesses', + 'cloudscape', + 'cloudscapes', + 'cloverleaf', + 'cloverleafs', + 'cloverleaves', + 'clowneries', + 'clownishly', + 'clownishness', + 'clownishnesses', + 'cloxacillin', + 'cloxacillins', + 'clubbiness', + 'clubbinesses', + 'clubfooted', + 'clubhauled', + 'clubhauling', + 'clubhouses', + 'clumsiness', + 'clumsinesses', + 'clustering', + 'cluttering', + 'cnidarians', + 'coacervate', + 'coacervates', + 'coacervation', + 'coacervations', + 'coachworks', + 'coadaptation', + 'coadaptations', + 'coadjutors', + 'coadjutrices', + 'coadjutrix', + 'coadministration', + 'coadministrations', + 'coadmiring', + 'coadmitted', + 'coadmitting', + 'coagencies', + 'coagulabilities', + 'coagulability', + 'coagulable', + 'coagulants', + 'coagulases', + 'coagulated', + 'coagulates', + 'coagulating', + 'coagulation', + 'coagulations', + 'coalescence', + 'coalescences', + 'coalescent', + 'coalescing', + 'coalfields', + 'coalfishes', + 'coalification', + 'coalifications', + 'coalifying', + 'coalitionist', + 'coalitionists', + 'coalitions', + 'coanchored', + 'coanchoring', + 'coannexing', + 'coappeared', + 'coappearing', + 'coaptation', + 'coaptations', + 'coarctation', + 'coarctations', + 'coarseness', + 'coarsenesses', + 'coarsening', + 'coassisted', + 'coassisting', + 'coassuming', + 'coastguard', + 'coastguardman', + 'coastguardmen', + 'coastguards', + 'coastguardsman', + 'coastguardsmen', + 'coastlands', + 'coastlines', + 'coastwards', + 'coatdresses', + 'coatimundi', + 'coatimundis', + 'coattended', + 'coattending', + 'coattested', + 'coattesting', + 'coauthored', + 'coauthoring', + 'coauthorship', + 'coauthorships', + 'cobalamins', + 'cobaltines', + 'cobaltites', + 'cobblestone', + 'cobblestoned', + 'cobblestones', + 'cobelligerent', + 'cobelligerents', + 'cobwebbier', + 'cobwebbiest', + 'cobwebbing', + 'cocainization', + 'cocainizations', + 'cocainized', + 'cocainizes', + 'cocainizing', + 'cocaptained', + 'cocaptaining', + 'cocaptains', + 'cocarboxylase', + 'cocarboxylases', + 'cocarcinogen', + 'cocarcinogenic', + 'cocarcinogens', + 'cocatalyst', + 'cocatalysts', + 'coccidioidomycoses', + 'coccidioidomycosis', + 'coccidioses', + 'coccidiosis', + 'cochairing', + 'cochairman', + 'cochairmen', + 'cochairperson', + 'cochairpersons', + 'cochairwoman', + 'cochairwomen', + 'cochampion', + 'cochampions', + 'cochineals', + 'cockalorum', + 'cockalorums', + 'cockamamie', + 'cockatiels', + 'cockatrice', + 'cockatrices', + 'cockbilled', + 'cockbilling', + 'cockchafer', + 'cockchafers', + 'cockeyedly', + 'cockeyedness', + 'cockeyednesses', + 'cockfighting', + 'cockfightings', + 'cockfights', + 'cockhorses', + 'cockinesses', + 'cockleburs', + 'cockleshell', + 'cockleshells', + 'cockneyfied', + 'cockneyfies', + 'cockneyfying', + 'cockneyish', + 'cockneyism', + 'cockneyisms', + 'cockroaches', + 'cockscombs', + 'cocksfoots', + 'cocksucker', + 'cocksuckers', + 'cocksurely', + 'cocksureness', + 'cocksurenesses', + 'cocktailed', + 'cocktailing', + 'cocomposer', + 'cocomposers', + 'coconspirator', + 'coconspirators', + 'cocoonings', + 'cocounseled', + 'cocounseling', + 'cocounselled', + 'cocounselling', + 'cocounsels', + 'cocreating', + 'cocreators', + 'cocultivate', + 'cocultivated', + 'cocultivates', + 'cocultivating', + 'cocultivation', + 'cocultivations', + 'cocultured', + 'cocultures', + 'coculturing', + 'cocurators', + 'cocurricular', + 'codefendant', + 'codefendants', + 'codependence', + 'codependences', + 'codependencies', + 'codependency', + 'codependent', + 'codependents', + 'coderiving', + 'codesigned', + 'codesigning', + 'codetermination', + 'codeterminations', + 'codeveloped', + 'codeveloper', + 'codevelopers', + 'codeveloping', + 'codevelops', + 'codicillary', + 'codicological', + 'codicologies', + 'codicology', + 'codifiabilities', + 'codifiability', + 'codification', + 'codifications', + 'codirected', + 'codirecting', + 'codirection', + 'codirections', + 'codirector', + 'codirectors', + 'codiscover', + 'codiscovered', + 'codiscoverer', + 'codiscoverers', + 'codiscovering', + 'codiscovers', + 'codominant', + 'codominants', + 'codswallop', + 'codswallops', + 'coeducation', + 'coeducational', + 'coeducationally', + 'coeducations', + 'coefficient', + 'coefficients', + 'coelacanth', + 'coelacanths', + 'coelentera', + 'coelenterate', + 'coelenterates', + 'coelenteron', + 'coelomates', + 'coembodied', + 'coembodies', + 'coembodying', + 'coemployed', + 'coemploying', + 'coenacting', + 'coenamored', + 'coenamoring', + 'coenduring', + 'coenobites', + 'coenocytes', + 'coenocytic', + 'coenzymatic', + 'coenzymatically', + 'coequalities', + 'coequality', + 'coequating', + 'coercively', + 'coerciveness', + 'coercivenesses', + 'coercivities', + 'coercivity', + 'coerecting', + 'coetaneous', + 'coevalities', + 'coevolution', + 'coevolutionary', + 'coevolutions', + 'coevolving', + 'coexecutor', + 'coexecutors', + 'coexerting', + 'coexistence', + 'coexistences', + 'coexistent', + 'coexisting', + 'coextended', + 'coextending', + 'coextensive', + 'coextensively', + 'cofavorite', + 'cofavorites', + 'cofeatured', + 'cofeatures', + 'cofeaturing', + 'coffeecake', + 'coffeecakes', + 'coffeehouse', + 'coffeehouses', + 'coffeemaker', + 'coffeemakers', + 'coffeepots', + 'cofferdams', + 'cofinanced', + 'cofinances', + 'cofinancing', + 'cofounders', + 'cofounding', + 'cofunction', + 'cofunctions', + 'cogeneration', + 'cogenerations', + 'cogenerator', + 'cogenerators', + 'cogitating', + 'cogitation', + 'cogitations', + 'cogitative', + 'cognations', + 'cognitional', + 'cognitions', + 'cognitively', + 'cognizable', + 'cognizably', + 'cognizance', + 'cognizances', + 'cognominal', + 'cognoscente', + 'cognoscenti', + 'cognoscible', + 'cohabitant', + 'cohabitants', + 'cohabitation', + 'cohabitations', + 'cohabiting', + 'coheiresses', + 'coherences', + 'coherencies', + 'coherently', + 'cohesionless', + 'cohesively', + 'cohesiveness', + 'cohesivenesses', + 'cohobating', + 'cohomological', + 'cohomologies', + 'cohomology', + 'cohostessed', + 'cohostesses', + 'cohostessing', + 'coiffeuses', + 'coiffuring', + 'coilabilities', + 'coilability', + 'coincidence', + 'coincidences', + 'coincident', + 'coincidental', + 'coincidentally', + 'coincidently', + 'coinciding', + 'coinferred', + 'coinferring', + 'coinhering', + 'coinsurance', + 'coinsurances', + 'coinsurers', + 'coinsuring', + 'cointerred', + 'cointerring', + 'coinvented', + 'coinventing', + 'coinventor', + 'coinventors', + 'coinvestigator', + 'coinvestigators', + 'coinvestor', + 'coinvestors', + 'colatitude', + 'colatitudes', + 'colcannons', + 'colchicine', + 'colchicines', + 'colchicums', + 'coldcocked', + 'coldcocking', + 'coldhearted', + 'coldheartedly', + 'coldheartedness', + 'coldheartednesses', + 'coldnesses', + 'colemanite', + 'colemanites', + 'coleoptera', + 'coleopteran', + 'coleopterans', + 'coleopterist', + 'coleopterists', + 'coleopterous', + 'coleoptile', + 'coleoptiles', + 'coleorhiza', + 'coleorhizae', + 'colicroots', + 'colinearities', + 'colinearity', + 'coliphages', + 'collaborate', + 'collaborated', + 'collaborates', + 'collaborating', + 'collaboration', + 'collaborationism', + 'collaborationisms', + 'collaborationist', + 'collaborationists', + 'collaborations', + 'collaborative', + 'collaboratively', + 'collaboratives', + 'collaborator', + 'collaborators', + 'collagenase', + 'collagenases', + 'collagenous', + 'collagists', + 'collapsibilities', + 'collapsibility', + 'collapsible', + 'collapsing', + 'collarbone', + 'collarbones', + 'collarless', + 'collateral', + 'collateralities', + 'collaterality', + 'collateralize', + 'collateralized', + 'collateralizes', + 'collateralizing', + 'collaterally', + 'collaterals', + 'collations', + 'colleagues', + 'colleagueship', + 'colleagueships', + 'collectable', + 'collectables', + 'collectanea', + 'collectedly', + 'collectedness', + 'collectednesses', + 'collectible', + 'collectibles', + 'collecting', + 'collection', + 'collections', + 'collective', + 'collectively', + 'collectives', + 'collectivise', + 'collectivised', + 'collectivises', + 'collectivising', + 'collectivism', + 'collectivisms', + 'collectivist', + 'collectivistic', + 'collectivistically', + 'collectivists', + 'collectivities', + 'collectivity', + 'collectivization', + 'collectivizations', + 'collectivize', + 'collectivized', + 'collectivizes', + 'collectivizing', + 'collectors', + 'collectorship', + 'collectorships', + 'collegialities', + 'collegiality', + 'collegially', + 'collegians', + 'collegiate', + 'collegiately', + 'collegiums', + 'collembolan', + 'collembolans', + 'collembolous', + 'collenchyma', + 'collenchymas', + 'collenchymata', + 'collenchymatous', + 'collieries', + 'collieshangie', + 'collieshangies', + 'colligated', + 'colligates', + 'colligating', + 'colligation', + 'colligations', + 'colligative', + 'collimated', + 'collimates', + 'collimating', + 'collimation', + 'collimations', + 'collimator', + 'collimators', + 'collinearities', + 'collinearity', + 'collisional', + 'collisionally', + 'collisions', + 'collocated', + 'collocates', + 'collocating', + 'collocation', + 'collocational', + 'collocations', + 'collodions', + 'colloguing', + 'colloidally', + 'colloquial', + 'colloquialism', + 'colloquialisms', + 'colloquialities', + 'colloquiality', + 'colloquially', + 'colloquials', + 'colloquies', + 'colloquist', + 'colloquists', + 'colloquium', + 'colloquiums', + 'collotypes', + 'collusions', + 'collusively', + 'colluviums', + 'collyriums', + 'collywobbles', + 'colobomata', + 'colocating', + 'colocynths', + 'cologarithm', + 'cologarithms', + 'colonelcies', + 'colonialism', + 'colonialisms', + 'colonialist', + 'colonialistic', + 'colonialists', + 'colonialize', + 'colonialized', + 'colonializes', + 'colonializing', + 'colonially', + 'colonialness', + 'colonialnesses', + 'colonisation', + 'colonisations', + 'colonising', + 'colonization', + 'colonizationist', + 'colonizationists', + 'colonizations', + 'colonizers', + 'colonizing', + 'colonnaded', + 'colonnades', + 'colophonies', + 'coloration', + 'colorations', + 'coloratura', + 'coloraturas', + 'colorblind', + 'colorblindness', + 'colorblindnesses', + 'colorectal', + 'colorfastness', + 'colorfastnesses', + 'colorfully', + 'colorfulness', + 'colorfulnesses', + 'colorimeter', + 'colorimeters', + 'colorimetric', + 'colorimetrically', + 'colorimetries', + 'colorimetry', + 'coloristic', + 'coloristically', + 'colorization', + 'colorizations', + 'colorizing', + 'colorlessly', + 'colorlessness', + 'colorlessnesses', + 'colorpoint', + 'colorpoints', + 'colossally', + 'colosseums', + 'colossuses', + 'colostomies', + 'colostrums', + 'colotomies', + 'colpitises', + 'colportage', + 'colportages', + 'colporteur', + 'colporteurs', + 'coltishness', + 'coltishnesses', + 'coltsfoots', + 'columbaria', + 'columbarium', + 'columbines', + 'columbites', + 'columbiums', + 'columellae', + 'columellar', + 'columniation', + 'columniations', + 'columnistic', + 'columnists', + 'comanagement', + 'comanagements', + 'comanagers', + 'comanaging', + 'combatants', + 'combatively', + 'combativeness', + 'combativenesses', + 'combatting', + 'combinable', + 'combination', + 'combinational', + 'combinations', + 'combinative', + 'combinatorial', + 'combinatorially', + 'combinatorics', + 'combinatory', + 'combustibilities', + 'combustibility', + 'combustible', + 'combustibles', + 'combustibly', + 'combusting', + 'combustion', + 'combustions', + 'combustive', + 'combustors', + 'comedically', + 'comedienne', + 'comediennes', + 'comeliness', + 'comelinesses', + 'comestible', + 'comestibles', + 'comeuppance', + 'comeuppances', + 'comfortable', + 'comfortableness', + 'comfortablenesses', + 'comfortably', + 'comforters', + 'comforting', + 'comfortingly', + 'comfortless', + 'comicalities', + 'comicality', + 'comingling', + 'commandable', + 'commandant', + 'commandants', + 'commandeer', + 'commandeered', + 'commandeering', + 'commandeers', + 'commanderies', + 'commanders', + 'commandership', + 'commanderships', + 'commandery', + 'commanding', + 'commandingly', + 'commandment', + 'commandments', + 'commandoes', + 'commemorate', + 'commemorated', + 'commemorates', + 'commemorating', + 'commemoration', + 'commemorations', + 'commemorative', + 'commemoratively', + 'commemoratives', + 'commemorator', + 'commemorators', + 'commencement', + 'commencements', + 'commencers', + 'commencing', + 'commendable', + 'commendably', + 'commendation', + 'commendations', + 'commendatory', + 'commenders', + 'commending', + 'commensalism', + 'commensalisms', + 'commensally', + 'commensals', + 'commensurabilities', + 'commensurability', + 'commensurable', + 'commensurably', + 'commensurate', + 'commensurately', + 'commensuration', + 'commensurations', + 'commentaries', + 'commentary', + 'commentate', + 'commentated', + 'commentates', + 'commentating', + 'commentator', + 'commentators', + 'commenting', + 'commercial', + 'commercialise', + 'commercialised', + 'commercialises', + 'commercialising', + 'commercialism', + 'commercialisms', + 'commercialist', + 'commercialistic', + 'commercialists', + 'commercialities', + 'commerciality', + 'commercialization', + 'commercializations', + 'commercialize', + 'commercialized', + 'commercializes', + 'commercializing', + 'commercially', + 'commercials', + 'commercing', + 'commination', + 'comminations', + 'comminatory', + 'commingled', + 'commingles', + 'commingling', + 'comminuted', + 'comminutes', + 'comminuting', + 'comminution', + 'comminutions', + 'commiserate', + 'commiserated', + 'commiserates', + 'commiserating', + 'commiseratingly', + 'commiseration', + 'commiserations', + 'commiserative', + 'commissarial', + 'commissariat', + 'commissariats', + 'commissaries', + 'commissars', + 'commissary', + 'commission', + 'commissionaire', + 'commissionaires', + 'commissioned', + 'commissioner', + 'commissioners', + 'commissionership', + 'commissionerships', + 'commissioning', + 'commissions', + 'commissural', + 'commissure', + 'commissures', + 'commitment', + 'commitments', + 'committable', + 'committals', + 'committeeman', + 'committeemen', + 'committees', + 'committeewoman', + 'committeewomen', + 'committing', + 'commixture', + 'commixtures', + 'commodification', + 'commodifications', + 'commodified', + 'commodifies', + 'commodifying', + 'commodious', + 'commodiously', + 'commodiousness', + 'commodiousnesses', + 'commodities', + 'commodores', + 'commonages', + 'commonalities', + 'commonality', + 'commonalties', + 'commonalty', + 'commonness', + 'commonnesses', + 'commonplace', + 'commonplaceness', + 'commonplacenesses', + 'commonplaces', + 'commonsense', + 'commonsensible', + 'commonsensical', + 'commonsensically', + 'commonweal', + 'commonweals', + 'commonwealth', + 'commonwealths', + 'commotions', + 'communalism', + 'communalisms', + 'communalist', + 'communalists', + 'communalities', + 'communality', + 'communalize', + 'communalized', + 'communalizes', + 'communalizing', + 'communally', + 'communards', + 'communicabilities', + 'communicability', + 'communicable', + 'communicableness', + 'communicablenesses', + 'communicably', + 'communicant', + 'communicants', + 'communicate', + 'communicated', + 'communicatee', + 'communicatees', + 'communicates', + 'communicating', + 'communication', + 'communicational', + 'communications', + 'communicative', + 'communicatively', + 'communicativeness', + 'communicativenesses', + 'communicator', + 'communicators', + 'communicatory', + 'communions', + 'communique', + 'communiques', + 'communised', + 'communises', + 'communising', + 'communisms', + 'communistic', + 'communistically', + 'communists', + 'communitarian', + 'communitarianism', + 'communitarianisms', + 'communitarians', + 'communities', + 'communization', + 'communizations', + 'communized', + 'communizes', + 'communizing', + 'commutable', + 'commutated', + 'commutates', + 'commutating', + 'commutation', + 'commutations', + 'commutative', + 'commutativities', + 'commutativity', + 'commutator', + 'commutators', + 'comonomers', + 'compacters', + 'compactest', + 'compactible', + 'compacting', + 'compaction', + 'compactions', + 'compactness', + 'compactnesses', + 'compactors', + 'companionabilities', + 'companionability', + 'companionable', + 'companionableness', + 'companionablenesses', + 'companionably', + 'companionate', + 'companioned', + 'companioning', + 'companions', + 'companionship', + 'companionships', + 'companionway', + 'companionways', + 'companying', + 'comparabilities', + 'comparability', + 'comparable', + 'comparableness', + 'comparablenesses', + 'comparably', + 'comparatist', + 'comparatists', + 'comparative', + 'comparatively', + 'comparativeness', + 'comparativenesses', + 'comparatives', + 'comparativist', + 'comparativists', + 'comparator', + 'comparators', + 'comparison', + 'comparisons', + 'comparting', + 'compartment', + 'compartmental', + 'compartmentalise', + 'compartmentalised', + 'compartmentalises', + 'compartmentalising', + 'compartmentalization', + 'compartmentalizations', + 'compartmentalize', + 'compartmentalized', + 'compartmentalizes', + 'compartmentalizing', + 'compartmentation', + 'compartmentations', + 'compartmented', + 'compartmenting', + 'compartments', + 'compassable', + 'compassing', + 'compassion', + 'compassionate', + 'compassionated', + 'compassionately', + 'compassionateness', + 'compassionatenesses', + 'compassionates', + 'compassionating', + 'compassionless', + 'compassions', + 'compatibilities', + 'compatibility', + 'compatible', + 'compatibleness', + 'compatiblenesses', + 'compatibles', + 'compatibly', + 'compatriot', + 'compatriotic', + 'compatriots', + 'compeering', + 'compellable', + 'compellation', + 'compellations', + 'compelling', + 'compellingly', + 'compendious', + 'compendiously', + 'compendiousness', + 'compendiousnesses', + 'compendium', + 'compendiums', + 'compensabilities', + 'compensability', + 'compensable', + 'compensate', + 'compensated', + 'compensates', + 'compensating', + 'compensation', + 'compensational', + 'compensations', + 'compensative', + 'compensator', + 'compensators', + 'compensatory', + 'competence', + 'competences', + 'competencies', + 'competency', + 'competently', + 'competition', + 'competitions', + 'competitive', + 'competitively', + 'competitiveness', + 'competitivenesses', + 'competitor', + 'competitors', + 'compilation', + 'compilations', + 'complacence', + 'complacences', + 'complacencies', + 'complacency', + 'complacent', + 'complacently', + 'complainant', + 'complainants', + 'complained', + 'complainer', + 'complainers', + 'complaining', + 'complainingly', + 'complaints', + 'complaisance', + 'complaisances', + 'complaisant', + 'complaisantly', + 'complected', + 'complecting', + 'complement', + 'complemental', + 'complementaries', + 'complementarily', + 'complementariness', + 'complementarinesses', + 'complementarities', + 'complementarity', + 'complementary', + 'complementation', + 'complementations', + 'complemented', + 'complementing', + 'complementizer', + 'complementizers', + 'complements', + 'completely', + 'completeness', + 'completenesses', + 'completest', + 'completing', + 'completion', + 'completions', + 'completist', + 'completists', + 'completive', + 'complexation', + 'complexations', + 'complexest', + 'complexified', + 'complexifies', + 'complexify', + 'complexifying', + 'complexing', + 'complexion', + 'complexional', + 'complexioned', + 'complexions', + 'complexities', + 'complexity', + 'complexness', + 'complexnesses', + 'compliance', + 'compliances', + 'compliancies', + 'compliancy', + 'compliantly', + 'complicacies', + 'complicacy', + 'complicate', + 'complicated', + 'complicatedly', + 'complicatedness', + 'complicatednesses', + 'complicates', + 'complicating', + 'complication', + 'complications', + 'complicities', + 'complicitous', + 'complicity', + 'compliment', + 'complimentarily', + 'complimentary', + 'complimented', + 'complimenting', + 'compliments', + 'complotted', + 'complotting', + 'componential', + 'components', + 'comporting', + 'comportment', + 'comportments', + 'composedly', + 'composedness', + 'composednesses', + 'composited', + 'compositely', + 'composites', + 'compositing', + 'composition', + 'compositional', + 'compositionally', + 'compositions', + 'compositor', + 'compositors', + 'composting', + 'composures', + 'compoundable', + 'compounded', + 'compounder', + 'compounders', + 'compounding', + 'compradore', + 'compradores', + 'compradors', + 'comprehend', + 'comprehended', + 'comprehendible', + 'comprehending', + 'comprehends', + 'comprehensibilities', + 'comprehensibility', + 'comprehensible', + 'comprehensibleness', + 'comprehensiblenesses', + 'comprehensibly', + 'comprehension', + 'comprehensions', + 'comprehensive', + 'comprehensively', + 'comprehensiveness', + 'comprehensivenesses', + 'compressed', + 'compressedly', + 'compresses', + 'compressibilities', + 'compressibility', + 'compressible', + 'compressing', + 'compression', + 'compressional', + 'compressions', + 'compressive', + 'compressively', + 'compressor', + 'compressors', + 'comprising', + 'comprizing', + 'compromise', + 'compromised', + 'compromiser', + 'compromisers', + 'compromises', + 'compromising', + 'comptroller', + 'comptrollers', + 'comptrollership', + 'comptrollerships', + 'compulsion', + 'compulsions', + 'compulsive', + 'compulsively', + 'compulsiveness', + 'compulsivenesses', + 'compulsivities', + 'compulsivity', + 'compulsorily', + 'compulsory', + 'compunction', + 'compunctions', + 'compunctious', + 'compurgation', + 'compurgations', + 'compurgator', + 'compurgators', + 'computabilities', + 'computability', + 'computable', + 'computation', + 'computational', + 'computationally', + 'computations', + 'computerdom', + 'computerdoms', + 'computerese', + 'computereses', + 'computerise', + 'computerised', + 'computerises', + 'computerising', + 'computerist', + 'computerists', + 'computerizable', + 'computerization', + 'computerizations', + 'computerize', + 'computerized', + 'computerizes', + 'computerizing', + 'computerless', + 'computerlike', + 'computernik', + 'computerniks', + 'computerphobe', + 'computerphobes', + 'computerphobia', + 'computerphobias', + 'computerphobic', + 'comradeliness', + 'comradelinesses', + 'comraderies', + 'comradeship', + 'comradeships', + 'concanavalin', + 'concanavalins', + 'concatenate', + 'concatenated', + 'concatenates', + 'concatenating', + 'concatenation', + 'concatenations', + 'concavities', + 'concealable', + 'concealers', + 'concealing', + 'concealingly', + 'concealment', + 'concealments', + 'concededly', + 'conceitedly', + 'conceitedness', + 'conceitednesses', + 'conceiting', + 'conceivabilities', + 'conceivability', + 'conceivable', + 'conceivableness', + 'conceivablenesses', + 'conceivably', + 'conceivers', + 'conceiving', + 'concelebrant', + 'concelebrants', + 'concelebrate', + 'concelebrated', + 'concelebrates', + 'concelebrating', + 'concelebration', + 'concelebrations', + 'concentered', + 'concentering', + 'concenters', + 'concentrate', + 'concentrated', + 'concentratedly', + 'concentrates', + 'concentrating', + 'concentration', + 'concentrations', + 'concentrative', + 'concentrator', + 'concentrators', + 'concentric', + 'concentrically', + 'concentricities', + 'concentricity', + 'conceptacle', + 'conceptacles', + 'conception', + 'conceptional', + 'conceptions', + 'conceptive', + 'conceptual', + 'conceptualise', + 'conceptualised', + 'conceptualises', + 'conceptualising', + 'conceptualism', + 'conceptualisms', + 'conceptualist', + 'conceptualistic', + 'conceptualistically', + 'conceptualists', + 'conceptualities', + 'conceptuality', + 'conceptualization', + 'conceptualizations', + 'conceptualize', + 'conceptualized', + 'conceptualizer', + 'conceptualizers', + 'conceptualizes', + 'conceptualizing', + 'conceptually', + 'conceptuses', + 'concerning', + 'concernment', + 'concernments', + 'concertedly', + 'concertedness', + 'concertednesses', + 'concertgoer', + 'concertgoers', + 'concertgoing', + 'concertgoings', + 'concertina', + 'concertinas', + 'concerting', + 'concertino', + 'concertinos', + 'concertize', + 'concertized', + 'concertizes', + 'concertizing', + 'concertmaster', + 'concertmasters', + 'concertmeister', + 'concertmeisters', + 'concession', + 'concessionaire', + 'concessionaires', + 'concessional', + 'concessionary', + 'concessioner', + 'concessioners', + 'concessions', + 'concessive', + 'concessively', + 'conchoidal', + 'conchoidally', + 'conchologies', + 'conchologist', + 'conchologists', + 'conchology', + 'concierges', + 'conciliarly', + 'conciliate', + 'conciliated', + 'conciliates', + 'conciliating', + 'conciliation', + 'conciliations', + 'conciliative', + 'conciliator', + 'conciliators', + 'conciliatory', + 'concinnities', + 'concinnity', + 'conciseness', + 'concisenesses', + 'concisions', + 'concluders', + 'concluding', + 'conclusion', + 'conclusionary', + 'conclusions', + 'conclusive', + 'conclusively', + 'conclusiveness', + 'conclusivenesses', + 'conclusory', + 'concocters', + 'concocting', + 'concoction', + 'concoctions', + 'concoctive', + 'concomitance', + 'concomitances', + 'concomitant', + 'concomitantly', + 'concomitants', + 'concordance', + 'concordances', + 'concordant', + 'concordantly', + 'concordats', + 'concourses', + 'concrescence', + 'concrescences', + 'concrescent', + 'concretely', + 'concreteness', + 'concretenesses', + 'concreting', + 'concretion', + 'concretionary', + 'concretions', + 'concretism', + 'concretisms', + 'concretist', + 'concretists', + 'concretization', + 'concretizations', + 'concretize', + 'concretized', + 'concretizes', + 'concretizing', + 'concubinage', + 'concubinages', + 'concubines', + 'concupiscence', + 'concupiscences', + 'concupiscent', + 'concupiscible', + 'concurrence', + 'concurrences', + 'concurrencies', + 'concurrency', + 'concurrent', + 'concurrently', + 'concurrents', + 'concurring', + 'concussing', + 'concussion', + 'concussions', + 'concussive', + 'condemnable', + 'condemnation', + 'condemnations', + 'condemnatory', + 'condemners', + 'condemning', + 'condemnors', + 'condensable', + 'condensate', + 'condensates', + 'condensation', + 'condensational', + 'condensations', + 'condensers', + 'condensible', + 'condensing', + 'condescend', + 'condescended', + 'condescendence', + 'condescendences', + 'condescending', + 'condescendingly', + 'condescends', + 'condescension', + 'condescensions', + 'condimental', + 'condiments', + 'conditionable', + 'conditional', + 'conditionalities', + 'conditionality', + 'conditionally', + 'conditionals', + 'conditioned', + 'conditioner', + 'conditioners', + 'conditioning', + 'conditions', + 'condolatory', + 'condolence', + 'condolences', + 'condominium', + 'condominiums', + 'condonable', + 'condonation', + 'condonations', + 'condottiere', + 'condottieri', + 'conduciveness', + 'conducivenesses', + 'conductance', + 'conductances', + 'conductibilities', + 'conductibility', + 'conductible', + 'conductimetric', + 'conducting', + 'conduction', + 'conductions', + 'conductive', + 'conductivities', + 'conductivity', + 'conductometric', + 'conductorial', + 'conductors', + 'conductress', + 'conductresses', + 'conduplicate', + 'condylomas', + 'condylomata', + 'condylomatous', + 'coneflower', + 'coneflowers', + 'confabbing', + 'confabulate', + 'confabulated', + 'confabulates', + 'confabulating', + 'confabulation', + 'confabulations', + 'confabulator', + 'confabulators', + 'confabulatory', + 'confecting', + 'confection', + 'confectionaries', + 'confectionary', + 'confectioner', + 'confectioneries', + 'confectioners', + 'confectionery', + 'confections', + 'confederacies', + 'confederacy', + 'confederal', + 'confederate', + 'confederated', + 'confederates', + 'confederating', + 'confederation', + 'confederations', + 'confederative', + 'conference', + 'conferences', + 'conferencing', + 'conferencings', + 'conferential', + 'conferment', + 'conferments', + 'conferrable', + 'conferrals', + 'conferrence', + 'conferrences', + 'conferrers', + 'conferring', + 'confessable', + 'confessedly', + 'confessing', + 'confession', + 'confessional', + 'confessionalism', + 'confessionalisms', + 'confessionalist', + 'confessionalists', + 'confessionally', + 'confessionals', + 'confessions', + 'confessors', + 'confidante', + 'confidantes', + 'confidants', + 'confidence', + 'confidences', + 'confidential', + 'confidentialities', + 'confidentiality', + 'confidentially', + 'confidently', + 'confidingly', + 'confidingness', + 'confidingnesses', + 'configuration', + 'configurational', + 'configurationally', + 'configurations', + 'configurative', + 'configured', + 'configures', + 'configuring', + 'confinement', + 'confinements', + 'confirmabilities', + 'confirmability', + 'confirmable', + 'confirmand', + 'confirmands', + 'confirmation', + 'confirmational', + 'confirmations', + 'confirmatory', + 'confirmedly', + 'confirmedness', + 'confirmednesses', + 'confirming', + 'confiscable', + 'confiscatable', + 'confiscate', + 'confiscated', + 'confiscates', + 'confiscating', + 'confiscation', + 'confiscations', + 'confiscator', + 'confiscators', + 'confiscatory', + 'confiteors', + 'confitures', + 'conflagrant', + 'conflagration', + 'conflagrations', + 'conflating', + 'conflation', + 'conflations', + 'conflicted', + 'conflictful', + 'conflicting', + 'conflictingly', + 'confliction', + 'conflictions', + 'conflictive', + 'conflictual', + 'confluence', + 'confluences', + 'confluents', + 'confocally', + 'conformable', + 'conformably', + 'conformance', + 'conformances', + 'conformation', + 'conformational', + 'conformations', + 'conformers', + 'conforming', + 'conformism', + 'conformisms', + 'conformist', + 'conformists', + 'conformities', + 'conformity', + 'confounded', + 'confoundedly', + 'confounder', + 'confounders', + 'confounding', + 'confoundingly', + 'confraternities', + 'confraternity', + 'confrontal', + 'confrontals', + 'confrontation', + 'confrontational', + 'confrontationist', + 'confrontationists', + 'confrontations', + 'confronted', + 'confronter', + 'confronters', + 'confronting', + 'confusedly', + 'confusedness', + 'confusednesses', + 'confusingly', + 'confusional', + 'confusions', + 'confutation', + 'confutations', + 'confutative', + 'congealing', + 'congealment', + 'congealments', + 'congelation', + 'congelations', + 'congeneric', + 'congenerous', + 'congenialities', + 'congeniality', + 'congenially', + 'congenital', + 'congenitally', + 'congesting', + 'congestion', + 'congestions', + 'congestive', + 'conglobate', + 'conglobated', + 'conglobates', + 'conglobating', + 'conglobation', + 'conglobations', + 'conglobing', + 'conglomerate', + 'conglomerated', + 'conglomerates', + 'conglomerateur', + 'conglomerateurs', + 'conglomeratic', + 'conglomerating', + 'conglomeration', + 'conglomerations', + 'conglomerative', + 'conglomerator', + 'conglomerators', + 'conglutinate', + 'conglutinated', + 'conglutinates', + 'conglutinating', + 'conglutination', + 'conglutinations', + 'congratulate', + 'congratulated', + 'congratulates', + 'congratulating', + 'congratulation', + 'congratulations', + 'congratulator', + 'congratulators', + 'congratulatory', + 'congregant', + 'congregants', + 'congregate', + 'congregated', + 'congregates', + 'congregating', + 'congregation', + 'congregational', + 'congregationalism', + 'congregationalisms', + 'congregationalist', + 'congregationalists', + 'congregations', + 'congregator', + 'congregators', + 'congressed', + 'congresses', + 'congressing', + 'congressional', + 'congressionally', + 'congressman', + 'congressmen', + 'congresspeople', + 'congressperson', + 'congresspersons', + 'congresswoman', + 'congresswomen', + 'congruence', + 'congruences', + 'congruencies', + 'congruency', + 'congruently', + 'congruities', + 'congruously', + 'congruousness', + 'congruousnesses', + 'conicities', + 'conidiophore', + 'conidiophores', + 'coniferous', + 'conjectural', + 'conjecturally', + 'conjecture', + 'conjectured', + 'conjecturer', + 'conjecturers', + 'conjectures', + 'conjecturing', + 'conjoining', + 'conjointly', + 'conjugalities', + 'conjugality', + 'conjugally', + 'conjugants', + 'conjugated', + 'conjugately', + 'conjugateness', + 'conjugatenesses', + 'conjugates', + 'conjugating', + 'conjugation', + 'conjugational', + 'conjugationally', + 'conjugations', + 'conjunction', + 'conjunctional', + 'conjunctionally', + 'conjunctions', + 'conjunctiva', + 'conjunctivae', + 'conjunctival', + 'conjunctivas', + 'conjunctive', + 'conjunctively', + 'conjunctives', + 'conjunctivites', + 'conjunctivitides', + 'conjunctivitis', + 'conjunctivitises', + 'conjuncture', + 'conjunctures', + 'conjuration', + 'conjurations', + 'connatural', + 'connaturalities', + 'connaturality', + 'connaturally', + 'connectable', + 'connectedly', + 'connectedness', + 'connectednesses', + 'connecters', + 'connectible', + 'connecting', + 'connection', + 'connectional', + 'connections', + 'connective', + 'connectively', + 'connectives', + 'connectivities', + 'connectivity', + 'connectors', + 'connexions', + 'conniption', + 'conniptions', + 'connivance', + 'connivances', + 'connoisseur', + 'connoisseurs', + 'connoisseurship', + 'connoisseurships', + 'connotation', + 'connotational', + 'connotations', + 'connotative', + 'connotatively', + 'connubialism', + 'connubialisms', + 'connubialities', + 'connubiality', + 'connubially', + 'conominees', + 'conquering', + 'conquerors', + 'conquistador', + 'conquistadores', + 'conquistadors', + 'consanguine', + 'consanguineous', + 'consanguineously', + 'consanguinities', + 'consanguinity', + 'conscience', + 'conscienceless', + 'consciences', + 'conscientious', + 'conscientiously', + 'conscientiousness', + 'conscientiousnesses', + 'conscionable', + 'consciouses', + 'consciously', + 'consciousness', + 'consciousnesses', + 'conscribed', + 'conscribes', + 'conscribing', + 'conscripted', + 'conscripting', + 'conscription', + 'conscriptions', + 'conscripts', + 'consecrate', + 'consecrated', + 'consecrates', + 'consecrating', + 'consecration', + 'consecrations', + 'consecrative', + 'consecrator', + 'consecrators', + 'consecratory', + 'consecution', + 'consecutions', + 'consecutive', + 'consecutively', + 'consecutiveness', + 'consecutivenesses', + 'consensual', + 'consensually', + 'consensuses', + 'consentaneous', + 'consentaneously', + 'consenters', + 'consenting', + 'consentingly', + 'consequence', + 'consequences', + 'consequent', + 'consequential', + 'consequentialities', + 'consequentiality', + 'consequentially', + 'consequentialness', + 'consequentialnesses', + 'consequently', + 'consequents', + 'conservancies', + 'conservancy', + 'conservation', + 'conservational', + 'conservationist', + 'conservationists', + 'conservations', + 'conservatism', + 'conservatisms', + 'conservative', + 'conservatively', + 'conservativeness', + 'conservativenesses', + 'conservatives', + 'conservatize', + 'conservatized', + 'conservatizes', + 'conservatizing', + 'conservatoire', + 'conservatoires', + 'conservator', + 'conservatorial', + 'conservatories', + 'conservators', + 'conservatorship', + 'conservatorships', + 'conservatory', + 'conservers', + 'conserving', + 'considerable', + 'considerables', + 'considerably', + 'considerate', + 'considerately', + 'considerateness', + 'consideratenesses', + 'consideration', + 'considerations', + 'considered', + 'considering', + 'consigliere', + 'consiglieri', + 'consignable', + 'consignation', + 'consignations', + 'consignees', + 'consigning', + 'consignment', + 'consignments', + 'consignors', + 'consistence', + 'consistences', + 'consistencies', + 'consistency', + 'consistent', + 'consistently', + 'consisting', + 'consistorial', + 'consistories', + 'consistory', + 'consociate', + 'consociated', + 'consociates', + 'consociating', + 'consociation', + 'consociational', + 'consociations', + 'consolation', + 'consolations', + 'consolatory', + 'consolidate', + 'consolidated', + 'consolidates', + 'consolidating', + 'consolidation', + 'consolidations', + 'consolidator', + 'consolidators', + 'consolingly', + 'consonance', + 'consonances', + 'consonancies', + 'consonancy', + 'consonantal', + 'consonantly', + 'consonants', + 'consorting', + 'consortium', + 'consortiums', + 'conspecific', + 'conspecifics', + 'conspectus', + 'conspectuses', + 'conspicuities', + 'conspicuity', + 'conspicuous', + 'conspicuously', + 'conspicuousness', + 'conspicuousnesses', + 'conspiracies', + 'conspiracy', + 'conspiration', + 'conspirational', + 'conspirations', + 'conspirator', + 'conspiratorial', + 'conspiratorially', + 'conspirators', + 'conspiring', + 'constables', + 'constabularies', + 'constabulary', + 'constancies', + 'constantan', + 'constantans', + 'constantly', + 'constative', + 'constatives', + 'constellate', + 'constellated', + 'constellates', + 'constellating', + 'constellation', + 'constellations', + 'constellatory', + 'consternate', + 'consternated', + 'consternates', + 'consternating', + 'consternation', + 'consternations', + 'constipate', + 'constipated', + 'constipates', + 'constipating', + 'constipation', + 'constipations', + 'constituencies', + 'constituency', + 'constituent', + 'constituently', + 'constituents', + 'constitute', + 'constituted', + 'constitutes', + 'constituting', + 'constitution', + 'constitutional', + 'constitutionalism', + 'constitutionalisms', + 'constitutionalist', + 'constitutionalists', + 'constitutionalities', + 'constitutionality', + 'constitutionalization', + 'constitutionalizations', + 'constitutionalize', + 'constitutionalized', + 'constitutionalizes', + 'constitutionalizing', + 'constitutionally', + 'constitutionals', + 'constitutionless', + 'constitutions', + 'constitutive', + 'constitutively', + 'constrained', + 'constrainedly', + 'constraining', + 'constrains', + 'constraint', + 'constraints', + 'constricted', + 'constricting', + 'constriction', + 'constrictions', + 'constrictive', + 'constrictor', + 'constrictors', + 'constricts', + 'constringe', + 'constringed', + 'constringent', + 'constringes', + 'constringing', + 'construable', + 'constructed', + 'constructible', + 'constructing', + 'construction', + 'constructional', + 'constructionally', + 'constructionist', + 'constructionists', + 'constructions', + 'constructive', + 'constructively', + 'constructiveness', + 'constructivenesses', + 'constructivism', + 'constructivisms', + 'constructivist', + 'constructivists', + 'constructor', + 'constructors', + 'constructs', + 'construing', + 'consubstantial', + 'consubstantiation', + 'consubstantiations', + 'consuetude', + 'consuetudes', + 'consuetudinary', + 'consulates', + 'consulship', + 'consulships', + 'consultancies', + 'consultancy', + 'consultant', + 'consultants', + 'consultantship', + 'consultantships', + 'consultation', + 'consultations', + 'consultative', + 'consulters', + 'consulting', + 'consultive', + 'consultors', + 'consumable', + 'consumables', + 'consumedly', + 'consumerism', + 'consumerisms', + 'consumerist', + 'consumeristic', + 'consumerists', + 'consumership', + 'consumerships', + 'consummate', + 'consummated', + 'consummately', + 'consummates', + 'consummating', + 'consummation', + 'consummations', + 'consummative', + 'consummator', + 'consummators', + 'consummatory', + 'consumption', + 'consumptions', + 'consumptive', + 'consumptively', + 'consumptives', + 'contacting', + 'contagions', + 'contagious', + 'contagiously', + 'contagiousness', + 'contagiousnesses', + 'containable', + 'containerboard', + 'containerboards', + 'containerisation', + 'containerisations', + 'containerise', + 'containerised', + 'containerises', + 'containerising', + 'containerization', + 'containerizations', + 'containerize', + 'containerized', + 'containerizes', + 'containerizing', + 'containerless', + 'containerport', + 'containerports', + 'containers', + 'containership', + 'containerships', + 'containing', + 'containment', + 'containments', + 'contaminant', + 'contaminants', + 'contaminate', + 'contaminated', + 'contaminates', + 'contaminating', + 'contamination', + 'contaminations', + 'contaminative', + 'contaminator', + 'contaminators', + 'contemners', + 'contemning', + 'contemnors', + 'contemplate', + 'contemplated', + 'contemplates', + 'contemplating', + 'contemplation', + 'contemplations', + 'contemplative', + 'contemplatively', + 'contemplativeness', + 'contemplativenesses', + 'contemplatives', + 'contemplator', + 'contemplators', + 'contemporaneities', + 'contemporaneity', + 'contemporaneous', + 'contemporaneously', + 'contemporaneousness', + 'contemporaneousnesses', + 'contemporaries', + 'contemporarily', + 'contemporary', + 'contemporize', + 'contemporized', + 'contemporizes', + 'contemporizing', + 'contemptibilities', + 'contemptibility', + 'contemptible', + 'contemptibleness', + 'contemptiblenesses', + 'contemptibly', + 'contemptuous', + 'contemptuously', + 'contemptuousness', + 'contemptuousnesses', + 'contenders', + 'contending', + 'contentedly', + 'contentedness', + 'contentednesses', + 'contenting', + 'contention', + 'contentions', + 'contentious', + 'contentiously', + 'contentiousness', + 'contentiousnesses', + 'contentment', + 'contentments', + 'conterminous', + 'conterminously', + 'contestable', + 'contestant', + 'contestants', + 'contestation', + 'contestations', + 'contesters', + 'contesting', + 'contextless', + 'contextual', + 'contextualize', + 'contextualized', + 'contextualizes', + 'contextualizing', + 'contextually', + 'contexture', + 'contextures', + 'contiguities', + 'contiguity', + 'contiguous', + 'contiguously', + 'contiguousness', + 'contiguousnesses', + 'continence', + 'continences', + 'continental', + 'continentally', + 'continentals', + 'continently', + 'continents', + 'contingence', + 'contingences', + 'contingencies', + 'contingency', + 'contingent', + 'contingently', + 'contingents', + 'continually', + 'continuance', + 'continuances', + 'continuant', + 'continuants', + 'continuate', + 'continuation', + 'continuations', + 'continuative', + 'continuator', + 'continuators', + 'continuers', + 'continuing', + 'continuingly', + 'continuities', + 'continuity', + 'continuous', + 'continuously', + 'continuousness', + 'continuousnesses', + 'continuums', + 'contorting', + 'contortion', + 'contortionist', + 'contortionistic', + 'contortionists', + 'contortions', + 'contortive', + 'contouring', + 'contraband', + 'contrabandist', + 'contrabandists', + 'contrabands', + 'contrabass', + 'contrabasses', + 'contrabassist', + 'contrabassists', + 'contrabassoon', + 'contrabassoons', + 'contraception', + 'contraceptions', + 'contraceptive', + 'contraceptives', + 'contracted', + 'contractibilities', + 'contractibility', + 'contractible', + 'contractile', + 'contractilities', + 'contractility', + 'contracting', + 'contraction', + 'contractional', + 'contractionary', + 'contractions', + 'contractive', + 'contractor', + 'contractors', + 'contractual', + 'contractually', + 'contracture', + 'contractures', + 'contradict', + 'contradictable', + 'contradicted', + 'contradicting', + 'contradiction', + 'contradictions', + 'contradictious', + 'contradictor', + 'contradictories', + 'contradictorily', + 'contradictoriness', + 'contradictorinesses', + 'contradictors', + 'contradictory', + 'contradicts', + 'contradistinction', + 'contradistinctions', + 'contradistinctive', + 'contradistinctively', + 'contradistinguish', + 'contradistinguished', + 'contradistinguishes', + 'contradistinguishing', + 'contraindicate', + 'contraindicated', + 'contraindicates', + 'contraindicating', + 'contraindication', + 'contraindications', + 'contralateral', + 'contraltos', + 'contraoctave', + 'contraoctaves', + 'contraposition', + 'contrapositions', + 'contrapositive', + 'contrapositives', + 'contraption', + 'contraptions', + 'contrapuntal', + 'contrapuntally', + 'contrapuntist', + 'contrapuntists', + 'contrarian', + 'contrarians', + 'contraries', + 'contrarieties', + 'contrariety', + 'contrarily', + 'contrariness', + 'contrarinesses', + 'contrarious', + 'contrariwise', + 'contrastable', + 'contrasted', + 'contrasting', + 'contrastive', + 'contrastively', + 'contravene', + 'contravened', + 'contravener', + 'contraveners', + 'contravenes', + 'contravening', + 'contravention', + 'contraventions', + 'contredanse', + 'contredanses', + 'contretemps', + 'contribute', + 'contributed', + 'contributes', + 'contributing', + 'contribution', + 'contributions', + 'contributive', + 'contributively', + 'contributor', + 'contributors', + 'contributory', + 'contritely', + 'contriteness', + 'contritenesses', + 'contrition', + 'contritions', + 'contrivance', + 'contrivances', + 'contrivers', + 'contriving', + 'controllabilities', + 'controllability', + 'controllable', + 'controlled', + 'controller', + 'controllers', + 'controllership', + 'controllerships', + 'controlling', + 'controlment', + 'controlments', + 'controversial', + 'controversialism', + 'controversialisms', + 'controversialist', + 'controversialists', + 'controversially', + 'controversies', + 'controversy', + 'controvert', + 'controverted', + 'controverter', + 'controverters', + 'controvertible', + 'controverting', + 'controverts', + 'contumacies', + 'contumacious', + 'contumaciously', + 'contumelies', + 'contumelious', + 'contumeliously', + 'contusions', + 'conundrums', + 'conurbation', + 'conurbations', + 'convalesce', + 'convalesced', + 'convalescence', + 'convalescences', + 'convalescent', + 'convalescents', + 'convalesces', + 'convalescing', + 'convecting', + 'convection', + 'convectional', + 'convections', + 'convective', + 'convectors', + 'convenience', + 'conveniences', + 'conveniencies', + 'conveniency', + 'convenient', + 'conveniently', + 'conventicle', + 'conventicler', + 'conventiclers', + 'conventicles', + 'conventing', + 'convention', + 'conventional', + 'conventionalism', + 'conventionalisms', + 'conventionalist', + 'conventionalists', + 'conventionalities', + 'conventionality', + 'conventionalization', + 'conventionalizations', + 'conventionalize', + 'conventionalized', + 'conventionalizes', + 'conventionalizing', + 'conventionally', + 'conventioneer', + 'conventioneers', + 'conventions', + 'conventual', + 'conventually', + 'conventuals', + 'convergence', + 'convergences', + 'convergencies', + 'convergency', + 'convergent', + 'converging', + 'conversable', + 'conversance', + 'conversances', + 'conversancies', + 'conversancy', + 'conversant', + 'conversation', + 'conversational', + 'conversationalist', + 'conversationalists', + 'conversationally', + 'conversations', + 'conversazione', + 'conversaziones', + 'conversazioni', + 'conversely', + 'conversers', + 'conversing', + 'conversion', + 'conversional', + 'conversions', + 'convertaplane', + 'convertaplanes', + 'converters', + 'convertibilities', + 'convertibility', + 'convertible', + 'convertibleness', + 'convertiblenesses', + 'convertibles', + 'convertibly', + 'converting', + 'convertiplane', + 'convertiplanes', + 'convertors', + 'convexities', + 'conveyance', + 'conveyancer', + 'conveyancers', + 'conveyances', + 'conveyancing', + 'conveyancings', + 'conveyorise', + 'conveyorised', + 'conveyorises', + 'conveyorising', + 'conveyorization', + 'conveyorizations', + 'conveyorize', + 'conveyorized', + 'conveyorizes', + 'conveyorizing', + 'convicting', + 'conviction', + 'convictions', + 'convincers', + 'convincing', + 'convincingly', + 'convincingness', + 'convincingnesses', + 'convivialities', + 'conviviality', + 'convivially', + 'convocation', + 'convocational', + 'convocations', + 'convoluted', + 'convolutes', + 'convoluting', + 'convolution', + 'convolutions', + 'convolving', + 'convolvuli', + 'convolvulus', + 'convolvuluses', + 'convulsant', + 'convulsants', + 'convulsing', + 'convulsion', + 'convulsionary', + 'convulsions', + 'convulsive', + 'convulsively', + 'convulsiveness', + 'convulsivenesses', + 'cookhouses', + 'cookshacks', + 'cookstoves', + 'coolheaded', + 'coolnesses', + 'coonhounds', + 'cooperages', + 'cooperated', + 'cooperates', + 'cooperating', + 'cooperation', + 'cooperationist', + 'cooperationists', + 'cooperations', + 'cooperative', + 'cooperatively', + 'cooperativeness', + 'cooperativenesses', + 'cooperatives', + 'cooperator', + 'cooperators', + 'coordinate', + 'coordinated', + 'coordinately', + 'coordinateness', + 'coordinatenesses', + 'coordinates', + 'coordinating', + 'coordination', + 'coordinations', + 'coordinative', + 'coordinator', + 'coordinators', + 'coparcenaries', + 'coparcenary', + 'coparcener', + 'coparceners', + 'copartnered', + 'copartnering', + 'copartners', + 'copartnership', + 'copartnerships', + 'copayments', + 'copestones', + 'copingstone', + 'copingstones', + 'copiousness', + 'copiousnesses', + 'coplanarities', + 'coplanarity', + 'coplotting', + 'copolymeric', + 'copolymerization', + 'copolymerizations', + 'copolymerize', + 'copolymerized', + 'copolymerizes', + 'copolymerizing', + 'copolymers', + 'copperases', + 'copperhead', + 'copperheads', + 'copperplate', + 'copperplates', + 'coppersmith', + 'coppersmiths', + 'copresented', + 'copresenting', + 'copresents', + 'copresident', + 'copresidents', + 'coprincipal', + 'coprincipals', + 'coprisoner', + 'coprisoners', + 'coprocessing', + 'coprocessings', + 'coprocessor', + 'coprocessors', + 'coproduced', + 'coproducer', + 'coproducers', + 'coproduces', + 'coproducing', + 'coproduction', + 'coproductions', + 'coproducts', + 'coprolites', + 'coprolitic', + 'copromoter', + 'copromoters', + 'coprophagies', + 'coprophagous', + 'coprophagy', + 'coprophilia', + 'coprophiliac', + 'coprophiliacs', + 'coprophilias', + 'coprophilous', + 'coproprietor', + 'coproprietors', + 'coproprietorship', + 'coproprietorships', + 'coprosperities', + 'coprosperity', + 'copublished', + 'copublisher', + 'copublishers', + 'copublishes', + 'copublishing', + 'copulating', + 'copulation', + 'copulations', + 'copulative', + 'copulatives', + 'copulatory', + 'copurified', + 'copurifies', + 'copurifying', + 'copycatted', + 'copycatting', + 'copyedited', + 'copyediting', + 'copyholder', + 'copyholders', + 'copyreader', + 'copyreaders', + 'copyreading', + 'copyrightable', + 'copyrighted', + 'copyrighting', + 'copyrights', + 'copywriter', + 'copywriters', + 'coquetries', + 'coquetting', + 'coquettish', + 'coquettishly', + 'coquettishness', + 'coquettishnesses', + 'coralbells', + 'coralberries', + 'coralberry', + 'corallines', + 'corbeilles', + 'corbelings', + 'corbelling', + 'corbiculae', + 'cordelling', + 'cordgrasses', + 'cordialities', + 'cordiality', + 'cordialness', + 'cordialnesses', + 'cordierite', + 'cordierites', + 'cordillera', + 'cordilleran', + 'cordilleras', + 'corduroyed', + 'corduroying', + 'cordwainer', + 'cordwaineries', + 'cordwainers', + 'cordwainery', + 'corecipient', + 'corecipients', + 'coredeemed', + 'coredeeming', + 'corelating', + 'coreligionist', + 'coreligionists', + 'corepressor', + 'corepressors', + 'corequisite', + 'corequisites', + 'coresearcher', + 'coresearchers', + 'coresident', + 'coresidential', + 'coresidents', + 'corespondent', + 'corespondents', + 'coriaceous', + 'corianders', + 'corkboards', + 'corkinesses', + 'corkscrewed', + 'corkscrewing', + 'corkscrews', + 'cormorants', + 'cornbreads', + 'corncrakes', + 'cornelians', + 'cornerback', + 'cornerbacks', + 'cornerstone', + 'cornerstones', + 'cornerways', + 'cornerwise', + 'cornetcies', + 'cornetists', + 'cornettist', + 'cornettists', + 'cornfields', + 'cornflakes', + 'cornflower', + 'cornflowers', + 'cornhusker', + 'cornhuskers', + 'cornhusking', + 'cornhuskings', + 'cornification', + 'cornifications', + 'corninesses', + 'cornrowing', + 'cornstalks', + 'cornstarch', + 'cornstarches', + 'cornucopia', + 'cornucopian', + 'cornucopias', + 'corollaries', + 'coromandel', + 'coromandels', + 'coronagraph', + 'coronagraphs', + 'coronaries', + 'coronating', + 'coronation', + 'coronations', + 'coronograph', + 'coronographs', + 'corotating', + 'corotation', + 'corotations', + 'corporalities', + 'corporality', + 'corporally', + 'corporately', + 'corporation', + 'corporations', + 'corporatism', + 'corporatisms', + 'corporatist', + 'corporative', + 'corporativism', + 'corporativisms', + 'corporator', + 'corporators', + 'corporealities', + 'corporeality', + 'corporeally', + 'corporealness', + 'corporealnesses', + 'corporeities', + 'corporeity', + 'corposants', + 'corpulence', + 'corpulences', + 'corpulencies', + 'corpulency', + 'corpulently', + 'corpuscles', + 'corpuscular', + 'corralling', + 'corrasions', + 'correctable', + 'correctest', + 'correcting', + 'correction', + 'correctional', + 'corrections', + 'correctitude', + 'correctitudes', + 'corrective', + 'correctively', + 'correctives', + 'correctness', + 'correctnesses', + 'correctors', + 'correlatable', + 'correlated', + 'correlates', + 'correlating', + 'correlation', + 'correlational', + 'correlations', + 'correlative', + 'correlatively', + 'correlatives', + 'correlator', + 'correlators', + 'correspond', + 'corresponded', + 'correspondence', + 'correspondences', + 'correspondencies', + 'correspondency', + 'correspondent', + 'correspondents', + 'corresponding', + 'correspondingly', + 'corresponds', + 'corresponsive', + 'corrigenda', + 'corrigendum', + 'corrigibilities', + 'corrigibility', + 'corrigible', + 'corroborant', + 'corroborate', + 'corroborated', + 'corroborates', + 'corroborating', + 'corroboration', + 'corroborations', + 'corroborative', + 'corroborator', + 'corroborators', + 'corroboratory', + 'corroboree', + 'corroborees', + 'corrodible', + 'corrosions', + 'corrosively', + 'corrosiveness', + 'corrosivenesses', + 'corrosives', + 'corrugated', + 'corrugates', + 'corrugating', + 'corrugation', + 'corrugations', + 'corrupters', + 'corruptest', + 'corruptibilities', + 'corruptibility', + 'corruptible', + 'corruptibly', + 'corrupting', + 'corruption', + 'corruptionist', + 'corruptionists', + 'corruptions', + 'corruptive', + 'corruptively', + 'corruptness', + 'corruptnesses', + 'corruptors', + 'corselette', + 'corselettes', + 'corsetiere', + 'corsetieres', + 'corsetries', + 'cortically', + 'corticoids', + 'corticosteroid', + 'corticosteroids', + 'corticosterone', + 'corticosterones', + 'corticotrophin', + 'corticotrophins', + 'corticotropin', + 'corticotropins', + 'cortisones', + 'coruscated', + 'coruscates', + 'coruscating', + 'coruscation', + 'coruscations', + 'corybantes', + 'corybantic', + 'corydalises', + 'corymbosely', + 'corynebacteria', + 'corynebacterial', + 'corynebacterium', + 'coryneform', + 'coryphaeus', + 'coscripted', + 'coscripting', + 'cosignatories', + 'cosignatory', + 'cosinesses', + 'cosmetically', + 'cosmetician', + 'cosmeticians', + 'cosmeticize', + 'cosmeticized', + 'cosmeticizes', + 'cosmeticizing', + 'cosmetologies', + 'cosmetologist', + 'cosmetologists', + 'cosmetology', + 'cosmically', + 'cosmochemical', + 'cosmochemist', + 'cosmochemistries', + 'cosmochemistry', + 'cosmochemists', + 'cosmogenic', + 'cosmogonic', + 'cosmogonical', + 'cosmogonies', + 'cosmogonist', + 'cosmogonists', + 'cosmographer', + 'cosmographers', + 'cosmographic', + 'cosmographical', + 'cosmographies', + 'cosmography', + 'cosmological', + 'cosmologically', + 'cosmologies', + 'cosmologist', + 'cosmologists', + 'cosmonauts', + 'cosmopolis', + 'cosmopolises', + 'cosmopolitan', + 'cosmopolitanism', + 'cosmopolitanisms', + 'cosmopolitans', + 'cosmopolite', + 'cosmopolites', + 'cosmopolitism', + 'cosmopolitisms', + 'cosponsored', + 'cosponsoring', + 'cosponsors', + 'cosponsorship', + 'cosponsorships', + 'costarring', + 'costermonger', + 'costermongers', + 'costiveness', + 'costivenesses', + 'costlessly', + 'costliness', + 'costlinesses', + 'costmaries', + 'costumeries', + 'costumiers', + 'cosurfactant', + 'cosurfactants', + 'cotangents', + 'coterminous', + 'coterminously', + 'cotillions', + 'cotoneaster', + 'cotoneasters', + 'cotransduce', + 'cotransduced', + 'cotransduces', + 'cotransducing', + 'cotransduction', + 'cotransductions', + 'cotransfer', + 'cotransferred', + 'cotransferring', + 'cotransfers', + 'cotransport', + 'cotransported', + 'cotransporting', + 'cotransports', + 'cotrustees', + 'cotterless', + 'cottonmouth', + 'cottonmouths', + 'cottonseed', + 'cottonseeds', + 'cottontail', + 'cottontails', + 'cottonweed', + 'cottonweeds', + 'cottonwood', + 'cottonwoods', + 'cotyledonary', + 'cotyledons', + 'cotylosaur', + 'cotylosaurs', + 'coulometer', + 'coulometers', + 'coulometric', + 'coulometrically', + 'coulometries', + 'coulometry', + 'councillor', + 'councillors', + 'councillorship', + 'councillorships', + 'councilman', + 'councilmanic', + 'councilmen', + 'councilors', + 'councilwoman', + 'councilwomen', + 'counselees', + 'counseling', + 'counselings', + 'counselled', + 'counselling', + 'counsellings', + 'counsellor', + 'counsellors', + 'counselors', + 'counselorship', + 'counselorships', + 'countabilities', + 'countability', + 'countdowns', + 'countenance', + 'countenanced', + 'countenancer', + 'countenancers', + 'countenances', + 'countenancing', + 'counteraccusation', + 'counteraccusations', + 'counteract', + 'counteracted', + 'counteracting', + 'counteraction', + 'counteractions', + 'counteractive', + 'counteracts', + 'counteradaptation', + 'counteradaptations', + 'counteradvertising', + 'counteradvertisings', + 'counteragent', + 'counteragents', + 'counteraggression', + 'counteraggressions', + 'counterargue', + 'counterargued', + 'counterargues', + 'counterarguing', + 'counterargument', + 'counterarguments', + 'counterassault', + 'counterassaults', + 'counterattack', + 'counterattacked', + 'counterattacker', + 'counterattackers', + 'counterattacking', + 'counterattacks', + 'counterbade', + 'counterbalance', + 'counterbalanced', + 'counterbalances', + 'counterbalancing', + 'counterbid', + 'counterbidden', + 'counterbidding', + 'counterbids', + 'counterblast', + 'counterblasts', + 'counterblockade', + 'counterblockaded', + 'counterblockades', + 'counterblockading', + 'counterblow', + 'counterblows', + 'countercampaign', + 'countercampaigns', + 'counterchange', + 'counterchanged', + 'counterchanges', + 'counterchanging', + 'countercharge', + 'countercharged', + 'countercharges', + 'countercharging', + 'countercheck', + 'counterchecked', + 'counterchecking', + 'counterchecks', + 'counterclaim', + 'counterclaimed', + 'counterclaiming', + 'counterclaims', + 'counterclockwise', + 'countercommercial', + 'countercomplaint', + 'countercomplaints', + 'counterconditioning', + 'counterconditionings', + 'counterconspiracies', + 'counterconspiracy', + 'counterconvention', + 'counterconventions', + 'countercountermeasure', + 'countercountermeasures', + 'countercoup', + 'countercoups', + 'countercries', + 'countercriticism', + 'countercriticisms', + 'countercry', + 'countercultural', + 'counterculturalism', + 'counterculturalisms', + 'counterculture', + 'countercultures', + 'counterculturist', + 'counterculturists', + 'countercurrent', + 'countercurrently', + 'countercurrents', + 'countercyclical', + 'countercyclically', + 'counterdemand', + 'counterdemands', + 'counterdemonstrate', + 'counterdemonstrated', + 'counterdemonstrates', + 'counterdemonstrating', + 'counterdemonstration', + 'counterdemonstrations', + 'counterdemonstrator', + 'counterdemonstrators', + 'counterdeployment', + 'counterdeployments', + 'countereducational', + 'countereffort', + 'counterefforts', + 'counterespionage', + 'counterespionages', + 'counterevidence', + 'counterevidences', + 'counterexample', + 'counterexamples', + 'counterfactual', + 'counterfeit', + 'counterfeited', + 'counterfeiter', + 'counterfeiters', + 'counterfeiting', + 'counterfeits', + 'counterfire', + 'counterfired', + 'counterfires', + 'counterfiring', + 'counterflow', + 'counterflows', + 'counterfoil', + 'counterfoils', + 'counterforce', + 'counterforces', + 'countergovernment', + 'countergovernments', + 'counterguerilla', + 'counterguerillas', + 'counterguerrilla', + 'counterguerrillas', + 'counterhypotheses', + 'counterhypothesis', + 'counterimage', + 'counterimages', + 'counterincentive', + 'counterincentives', + 'counterinflation', + 'counterinflationary', + 'counterinfluence', + 'counterinfluenced', + 'counterinfluences', + 'counterinfluencing', + 'countering', + 'counterinstance', + 'counterinstances', + 'counterinstitution', + 'counterinstitutions', + 'counterinsurgencies', + 'counterinsurgency', + 'counterinsurgent', + 'counterinsurgents', + 'counterintelligence', + 'counterintelligences', + 'counterinterpretation', + 'counterinterpretations', + 'counterintuitive', + 'counterintuitively', + 'counterion', + 'counterions', + 'counterirritant', + 'counterirritants', + 'counterman', + 'countermand', + 'countermanded', + 'countermanding', + 'countermands', + 'countermarch', + 'countermarched', + 'countermarches', + 'countermarching', + 'countermeasure', + 'countermeasures', + 'countermelodies', + 'countermelody', + 'countermemo', + 'countermemos', + 'countermen', + 'countermine', + 'countermined', + 'countermines', + 'countermining', + 'countermobilization', + 'countermobilizations', + 'countermove', + 'countermoved', + 'countermovement', + 'countermovements', + 'countermoves', + 'countermoving', + 'countermyth', + 'countermyths', + 'counteroffensive', + 'counteroffensives', + 'counteroffer', + 'counteroffers', + 'counterorder', + 'counterordered', + 'counterordering', + 'counterorders', + 'counterpane', + 'counterpanes', + 'counterpart', + 'counterparts', + 'counterpetition', + 'counterpetitioned', + 'counterpetitioning', + 'counterpetitions', + 'counterpicket', + 'counterpicketed', + 'counterpicketing', + 'counterpickets', + 'counterplan', + 'counterplans', + 'counterplay', + 'counterplayer', + 'counterplayers', + 'counterplays', + 'counterplea', + 'counterpleas', + 'counterplot', + 'counterplots', + 'counterplotted', + 'counterplotting', + 'counterploy', + 'counterploys', + 'counterpoint', + 'counterpointed', + 'counterpointing', + 'counterpoints', + 'counterpoise', + 'counterpoised', + 'counterpoises', + 'counterpoising', + 'counterpose', + 'counterposed', + 'counterposes', + 'counterposing', + 'counterpower', + 'counterpowers', + 'counterpressure', + 'counterpressures', + 'counterproductive', + 'counterprogramming', + 'counterprogrammings', + 'counterproject', + 'counterprojects', + 'counterpropaganda', + 'counterpropagandas', + 'counterproposal', + 'counterproposals', + 'counterprotest', + 'counterprotests', + 'counterpunch', + 'counterpunched', + 'counterpuncher', + 'counterpunchers', + 'counterpunches', + 'counterpunching', + 'counterquestion', + 'counterquestioned', + 'counterquestioning', + 'counterquestions', + 'counterraid', + 'counterraided', + 'counterraiding', + 'counterraids', + 'counterrallied', + 'counterrallies', + 'counterrally', + 'counterrallying', + 'counterreaction', + 'counterreactions', + 'counterreform', + 'counterreformation', + 'counterreformations', + 'counterreformer', + 'counterreformers', + 'counterreforms', + 'counterresponse', + 'counterresponses', + 'counterretaliation', + 'counterretaliations', + 'counterrevolution', + 'counterrevolutionaries', + 'counterrevolutionary', + 'counterrevolutions', + 'counterscientific', + 'countershading', + 'countershadings', + 'countershot', + 'countershots', + 'countersign', + 'countersignature', + 'countersignatures', + 'countersigned', + 'countersigning', + 'countersigns', + 'countersink', + 'countersinking', + 'countersinks', + 'countersniper', + 'countersnipers', + 'counterspell', + 'counterspells', + 'counterspies', + 'counterspy', + 'counterstain', + 'counterstained', + 'counterstaining', + 'counterstains', + 'counterstate', + 'counterstated', + 'counterstatement', + 'counterstatements', + 'counterstates', + 'counterstating', + 'counterstep', + 'counterstepped', + 'counterstepping', + 'countersteps', + 'counterstrategies', + 'counterstrategist', + 'counterstrategists', + 'counterstrategy', + 'counterstream', + 'counterstreams', + 'counterstrike', + 'counterstrikes', + 'counterstroke', + 'counterstrokes', + 'counterstyle', + 'counterstyles', + 'countersue', + 'countersued', + 'countersues', + 'countersuggestion', + 'countersuggestions', + 'countersuing', + 'countersuit', + 'countersuits', + 'countersunk', + 'countersurveillance', + 'countersurveillances', + 'countertactics', + 'countertendencies', + 'countertendency', + 'countertenor', + 'countertenors', + 'counterterror', + 'counterterrorism', + 'counterterrorisms', + 'counterterrorist', + 'counterterrorists', + 'counterterrors', + 'counterthreat', + 'counterthreats', + 'counterthrust', + 'counterthrusts', + 'countertop', + 'countertops', + 'countertrade', + 'countertrades', + 'countertradition', + 'countertraditions', + 'countertransference', + 'countertransferences', + 'countertrend', + 'countertrends', + 'countervail', + 'countervailed', + 'countervailing', + 'countervails', + 'counterview', + 'counterviews', + 'counterviolence', + 'counterviolences', + 'counterweight', + 'counterweighted', + 'counterweighting', + 'counterweights', + 'counterworld', + 'counterworlds', + 'countesses', + 'countinghouse', + 'countinghouses', + 'countlessly', + 'countrified', + 'countryfied', + 'countryish', + 'countryman', + 'countrymen', + 'countryseat', + 'countryseats', + 'countryside', + 'countrysides', + 'countrywide', + 'countrywoman', + 'countrywomen', + 'couplement', + 'couplements', + 'couponings', + 'courageous', + 'courageously', + 'courageousness', + 'courageousnesses', + 'courantoes', + 'courgettes', + 'courseware', + 'coursewares', + 'courteously', + 'courteousness', + 'courteousnesses', + 'courtesans', + 'courtesied', + 'courtesies', + 'courtesying', + 'courthouse', + 'courthouses', + 'courtliest', + 'courtliness', + 'courtlinesses', + 'courtrooms', + 'courtships', + 'courtsides', + 'courtyards', + 'couscouses', + 'cousinages', + 'cousinhood', + 'cousinhoods', + 'cousinries', + 'cousinship', + 'cousinships', + 'couturiere', + 'couturieres', + 'couturiers', + 'covalences', + 'covalencies', + 'covalently', + 'covariance', + 'covariances', + 'covariation', + 'covariations', + 'covellines', + 'covellites', + 'covenantal', + 'covenanted', + 'covenantee', + 'covenantees', + 'covenanter', + 'covenanters', + 'covenanting', + 'covenantor', + 'covenantors', + 'coveralled', + 'coverslips', + 'covertness', + 'covertnesses', + 'covertures', + 'covetingly', + 'covetously', + 'covetousness', + 'covetousnesses', + 'cowardices', + 'cowardliness', + 'cowardlinesses', + 'cowberries', + 'cowcatcher', + 'cowcatchers', + 'cowlstaffs', + 'cowlstaves', + 'cowpuncher', + 'cowpunchers', + 'coxcombical', + 'coxcombries', + 'coxswained', + 'coxswaining', + 'coyotillos', + 'cozinesses', + 'crabbedness', + 'crabbednesses', + 'crabgrasses', + 'crabsticks', + 'crackajack', + 'crackajacks', + 'crackbacks', + 'crackbrain', + 'crackbrained', + 'crackbrains', + 'crackdowns', + 'crackerjack', + 'crackerjacks', + 'crackleware', + 'cracklewares', + 'crackliest', + 'cracklings', + 'cradlesong', + 'cradlesongs', + 'craftiness', + 'craftinesses', + 'craftsmanlike', + 'craftsmanly', + 'craftsmanship', + 'craftsmanships', + 'craftspeople', + 'craftsperson', + 'craftspersons', + 'craftswoman', + 'craftswomen', + 'cragginess', + 'cragginesses', + 'cramoisies', + 'cranberries', + 'cranesbill', + 'cranesbills', + 'craniocerebral', + 'craniofacial', + 'craniologies', + 'craniology', + 'craniometries', + 'craniometry', + 'craniosacral', + 'craniotomies', + 'craniotomy', + 'crankcases', + 'crankiness', + 'crankinesses', + 'crankshaft', + 'crankshafts', + 'cranreuchs', + 'crapshooter', + 'crapshooters', + 'crapshoots', + 'crashingly', + 'crashworthiness', + 'crashworthinesses', + 'crashworthy', + 'crassitude', + 'crassitudes', + 'crassnesses', + 'craterlets', + 'craterlike', + 'craunching', + 'cravenness', + 'cravennesses', + 'crawfished', + 'crawfishes', + 'crawfishing', + 'crawlspace', + 'crawlspaces', + 'crayfishes', + 'crayonists', + 'crazinesses', + 'crazyweeds', + 'creakiness', + 'creakinesses', + 'creameries', + 'creaminess', + 'creaminesses', + 'creampuffs', + 'creamwares', + 'creaseless', + 'creatinine', + 'creatinines', + 'creationism', + 'creationisms', + 'creationist', + 'creationists', + 'creatively', + 'creativeness', + 'creativenesses', + 'creativities', + 'creativity', + 'creaturehood', + 'creaturehoods', + 'creatureliness', + 'creaturelinesses', + 'creaturely', + 'credential', + 'credentialed', + 'credentialing', + 'credentialism', + 'credentialisms', + 'credentialled', + 'credentialling', + 'credentials', + 'credibilities', + 'credibility', + 'creditabilities', + 'creditability', + 'creditable', + 'creditableness', + 'creditablenesses', + 'creditably', + 'creditworthiness', + 'creditworthinesses', + 'creditworthy', + 'credulities', + 'credulously', + 'credulousness', + 'credulousnesses', + 'creepiness', + 'creepinesses', + 'cremations', + 'crematoria', + 'crematories', + 'crematorium', + 'crematoriums', + 'crenations', + 'crenelated', + 'crenelation', + 'crenelations', + 'crenellated', + 'crenellation', + 'crenellations', + 'crenelling', + 'crenulated', + 'crenulation', + 'crenulations', + 'creolising', + 'creolization', + 'creolizations', + 'creolizing', + 'creosoting', + 'crepitated', + 'crepitates', + 'crepitating', + 'crepitation', + 'crepitations', + 'crepuscles', + 'crepuscular', + 'crepuscule', + 'crepuscules', + 'crescendoed', + 'crescendoes', + 'crescendoing', + 'crescendos', + 'crescentic', + 'crescively', + 'crestfallen', + 'crestfallenly', + 'crestfallenness', + 'crestfallennesses', + 'cretinisms', + 'crevassing', + 'crewelwork', + 'crewelworks', + 'cribriform', + 'cricketers', + 'cricketing', + 'criminalistics', + 'criminalities', + 'criminality', + 'criminalization', + 'criminalizations', + 'criminalize', + 'criminalized', + 'criminalizes', + 'criminalizing', + 'criminally', + 'criminated', + 'criminates', + 'criminating', + 'crimination', + 'criminations', + 'criminological', + 'criminologically', + 'criminologies', + 'criminologist', + 'criminologists', + 'criminology', + 'crimsoning', + 'crinkliest', + 'crinolined', + 'crinolines', + 'cripplingly', + 'crispbread', + 'crispbreads', + 'crispening', + 'crispiness', + 'crispinesses', + 'crispnesses', + 'crisscross', + 'crisscrossed', + 'crisscrosses', + 'crisscrossing', + 'criterions', + 'criteriums', + 'criticalities', + 'criticality', + 'critically', + 'criticalness', + 'criticalnesses', + 'criticaster', + 'criticasters', + 'criticised', + 'criticises', + 'criticising', + 'criticisms', + 'criticizable', + 'criticized', + 'criticizer', + 'criticizers', + 'criticizes', + 'criticizing', + 'critiquing', + 'crocheters', + 'crocheting', + 'crocidolite', + 'crocidolites', + 'crockeries', + 'crocodiles', + 'crocodilian', + 'crocodilians', + 'croissants', + 'crookbacked', + 'crookbacks', + 'crookedest', + 'crookedness', + 'crookednesses', + 'crookeries', + 'crooknecks', + 'croqueting', + 'croquettes', + 'croquignole', + 'croquignoles', + 'crossabilities', + 'crossability', + 'crossbanded', + 'crossbanding', + 'crossbandings', + 'crossbarred', + 'crossbarring', + 'crossbeams', + 'crossbearer', + 'crossbearers', + 'crossbills', + 'crossbones', + 'crossbowman', + 'crossbowmen', + 'crossbreds', + 'crossbreed', + 'crossbreeding', + 'crossbreeds', + 'crosscourt', + 'crosscurrent', + 'crosscurrents', + 'crosscutting', + 'crosscuttings', + 'crossfires', + 'crosshairs', + 'crosshatch', + 'crosshatched', + 'crosshatches', + 'crosshatching', + 'crossheads', + 'crosslinguistic', + 'crosslinguistically', + 'crossnesses', + 'crossopterygian', + 'crossopterygians', + 'crossovers', + 'crosspatch', + 'crosspatches', + 'crosspiece', + 'crosspieces', + 'crossroads', + 'crossruffed', + 'crossruffing', + 'crossruffs', + 'crosstalks', + 'crosstrees', + 'crosswalks', + 'crosswinds', + 'crosswords', + 'crotchetiness', + 'crotchetinesses', + 'croustades', + 'crowbarred', + 'crowbarring', + 'crowberries', + 'crowdedness', + 'crowdednesses', + 'crowkeeper', + 'crowkeepers', + 'crowstepped', + 'cruciferous', + 'crucifixes', + 'crucifixion', + 'crucifixions', + 'cruciforms', + 'crucifying', + 'crudenesses', + 'cruelnesses', + 'cruiserweight', + 'cruiserweights', + 'crumbliest', + 'crumbliness', + 'crumblinesses', + 'crumblings', + 'crumminess', + 'crumminesses', + 'crumpliest', + 'crunchable', + 'crunchiest', + 'crunchiness', + 'crunchinesses', + 'crushingly', + 'crushproof', + 'crustacean', + 'crustaceans', + 'crustaceous', + 'crustiness', + 'crustinesses', + 'cryobiological', + 'cryobiologies', + 'cryobiologist', + 'cryobiologists', + 'cryobiology', + 'cryogenically', + 'cryogenics', + 'cryogenies', + 'cryophilic', + 'cryopreservation', + 'cryopreservations', + 'cryopreserve', + 'cryopreserved', + 'cryopreserves', + 'cryopreserving', + 'cryoprobes', + 'cryoprotectant', + 'cryoprotectants', + 'cryoprotective', + 'cryoscopes', + 'cryoscopic', + 'cryoscopies', + 'cryostatic', + 'cryosurgeon', + 'cryosurgeons', + 'cryosurgeries', + 'cryosurgery', + 'cryosurgical', + 'cryotherapies', + 'cryotherapy', + 'cryptanalyses', + 'cryptanalysis', + 'cryptanalyst', + 'cryptanalysts', + 'cryptanalytic', + 'cryptanalytical', + 'cryptarithm', + 'cryptarithms', + 'cryptically', + 'cryptococcal', + 'cryptococci', + 'cryptococcoses', + 'cryptococcosis', + 'cryptococcus', + 'cryptocrystalline', + 'cryptogamic', + 'cryptogamous', + 'cryptogams', + 'cryptogenic', + 'cryptogram', + 'cryptograms', + 'cryptograph', + 'cryptographer', + 'cryptographers', + 'cryptographic', + 'cryptographically', + 'cryptographies', + 'cryptographs', + 'cryptography', + 'cryptologic', + 'cryptological', + 'cryptologies', + 'cryptologist', + 'cryptologists', + 'cryptology', + 'cryptomeria', + 'cryptomerias', + 'cryptonyms', + 'cryptorchid', + 'cryptorchidism', + 'cryptorchidisms', + 'cryptorchids', + 'cryptorchism', + 'cryptorchisms', + 'cryptozoologies', + 'cryptozoologist', + 'cryptozoologists', + 'cryptozoology', + 'crystalize', + 'crystalized', + 'crystalizes', + 'crystalizing', + 'crystalline', + 'crystallinities', + 'crystallinity', + 'crystallise', + 'crystallised', + 'crystallises', + 'crystallising', + 'crystallite', + 'crystallites', + 'crystallizable', + 'crystallization', + 'crystallizations', + 'crystallize', + 'crystallized', + 'crystallizer', + 'crystallizers', + 'crystallizes', + 'crystallizing', + 'crystallographer', + 'crystallographers', + 'crystallographic', + 'crystallographically', + 'crystallographies', + 'crystallography', + 'crystalloid', + 'crystalloidal', + 'crystalloids', + 'ctenophoran', + 'ctenophorans', + 'ctenophore', + 'ctenophores', + 'cuadrillas', + 'cubbyholes', + 'cubicities', + 'cuckolding', + 'cuckoldries', + 'cuckooflower', + 'cuckooflowers', + 'cuckoopint', + 'cuckoopints', + 'cuddlesome', + 'cudgelling', + 'cuirassier', + 'cuirassiers', + 'cuirassing', + 'culinarian', + 'culinarians', + 'culinarily', + 'cullenders', + 'culminated', + 'culminates', + 'culminating', + 'culmination', + 'culminations', + 'culpabilities', + 'culpability', + 'culpableness', + 'culpablenesses', + 'cultishness', + 'cultishnesses', + 'cultivabilities', + 'cultivability', + 'cultivable', + 'cultivatable', + 'cultivated', + 'cultivates', + 'cultivating', + 'cultivation', + 'cultivations', + 'cultivator', + 'cultivators', + 'culturally', + 'cumberbund', + 'cumberbunds', + 'cumbersome', + 'cumbersomely', + 'cumbersomeness', + 'cumbersomenesses', + 'cumbrously', + 'cumbrousness', + 'cumbrousnesses', + 'cummerbund', + 'cummerbunds', + 'cumulating', + 'cumulation', + 'cumulations', + 'cumulative', + 'cumulatively', + 'cumulativeness', + 'cumulativenesses', + 'cumuliform', + 'cumulonimbi', + 'cumulonimbus', + 'cumulonimbuses', + 'cunctation', + 'cunctations', + 'cunctative', + 'cuneiforms', + 'cunnilinctus', + 'cunnilinctuses', + 'cunnilingus', + 'cunnilinguses', + 'cunningest', + 'cunningness', + 'cunningnesses', + 'cupbearers', + 'cupellation', + 'cupellations', + 'cupidities', + 'cupriferous', + 'cupronickel', + 'cupronickels', + 'curabilities', + 'curability', + 'curableness', + 'curablenesses', + 'curarization', + 'curarizations', + 'curarizing', + 'curatively', + 'curatorial', + 'curatorship', + 'curatorships', + 'curbstones', + 'curettages', + 'curettement', + 'curettements', + 'curiosities', + 'curiousest', + 'curiousness', + 'curiousnesses', + 'curlicuing', + 'curlinesses', + 'curlpapers', + 'curmudgeon', + 'curmudgeonliness', + 'curmudgeonlinesses', + 'curmudgeonly', + 'curmudgeons', + 'currencies', + 'currentness', + 'currentnesses', + 'curricular', + 'curriculum', + 'curriculums', + 'currieries', + 'currycombed', + 'currycombing', + 'currycombs', + 'cursedness', + 'cursednesses', + 'cursiveness', + 'cursivenesses', + 'cursoriness', + 'cursorinesses', + 'curtailers', + 'curtailing', + 'curtailment', + 'curtailments', + 'curtaining', + 'curtainless', + 'curtalaxes', + 'curtilages', + 'curtnesses', + 'curtseying', + 'curvaceous', + 'curvacious', + 'curvatures', + 'curveballed', + 'curveballing', + 'curveballs', + 'curvetting', + 'curvilinear', + 'curvilinearities', + 'curvilinearity', + 'cushioning', + 'cushionless', + 'cuspidation', + 'cuspidations', + 'cussedness', + 'cussednesses', + 'custodians', + 'custodianship', + 'custodianships', + 'customarily', + 'customariness', + 'customarinesses', + 'customhouse', + 'customhouses', + 'customised', + 'customises', + 'customising', + 'customization', + 'customizations', + 'customized', + 'customizer', + 'customizers', + 'customizes', + 'customizing', + 'customshouse', + 'customshouses', + 'cutabilities', + 'cutability', + 'cutaneously', + 'cutcheries', + 'cutenesses', + 'cutgrasses', + 'cutinising', + 'cutinizing', + 'cutthroats', + 'cuttlebone', + 'cuttlebones', + 'cuttlefish', + 'cuttlefishes', + 'cyanamides', + 'cyanoacrylate', + 'cyanoacrylates', + 'cyanobacteria', + 'cyanobacterium', + 'cyanocobalamin', + 'cyanocobalamine', + 'cyanocobalamines', + 'cyanocobalamins', + 'cyanoethylate', + 'cyanoethylated', + 'cyanoethylates', + 'cyanoethylating', + 'cyanoethylation', + 'cyanoethylations', + 'cyanogeneses', + 'cyanogenesis', + 'cyanogenetic', + 'cyanogenic', + 'cyanohydrin', + 'cyanohydrins', + 'cybernated', + 'cybernation', + 'cybernations', + 'cybernetic', + 'cybernetical', + 'cybernetically', + 'cybernetician', + 'cyberneticians', + 'cyberneticist', + 'cyberneticists', + 'cybernetics', + 'cyberpunks', + 'cyberspace', + 'cyberspaces', + 'cycadeoids', + 'cycadophyte', + 'cycadophytes', + 'cyclamates', + 'cyclazocine', + 'cyclazocines', + 'cyclicalities', + 'cyclicality', + 'cyclically', + 'cyclicities', + 'cyclization', + 'cyclizations', + 'cycloaddition', + 'cycloadditions', + 'cycloaliphatic', + 'cyclodextrin', + 'cyclodextrins', + 'cyclodiene', + 'cyclodienes', + 'cyclogeneses', + 'cyclogenesis', + 'cyclohexane', + 'cyclohexanes', + 'cyclohexanone', + 'cyclohexanones', + 'cycloheximide', + 'cycloheximides', + 'cyclohexylamine', + 'cyclohexylamines', + 'cyclometer', + 'cyclometers', + 'cyclonically', + 'cycloolefin', + 'cycloolefinic', + 'cycloolefins', + 'cyclopaedia', + 'cyclopaedias', + 'cycloparaffin', + 'cycloparaffins', + 'cyclopedia', + 'cyclopedias', + 'cyclopedic', + 'cyclophosphamide', + 'cyclophosphamides', + 'cyclopropane', + 'cyclopropanes', + 'cycloramas', + 'cycloramic', + 'cycloserine', + 'cycloserines', + 'cyclosporine', + 'cyclosporines', + 'cyclostome', + 'cyclostomes', + 'cyclostyle', + 'cyclostyled', + 'cyclostyles', + 'cyclostyling', + 'cyclothymia', + 'cyclothymias', + 'cyclothymic', + 'cyclotomic', + 'cyclotrons', + 'cylindered', + 'cylindering', + 'cylindrical', + 'cylindrically', + 'cymbalists', + 'cymbidiums', + 'cymophanes', + 'cypripedia', + 'cypripedium', + 'cypripediums', + 'cyproheptadine', + 'cyproheptadines', + 'cyproterone', + 'cyproterones', + 'cysteamine', + 'cysteamines', + 'cysticerci', + 'cysticercoid', + 'cysticercoids', + 'cysticercoses', + 'cysticercosis', + 'cysticercus', + 'cystinuria', + 'cystinurias', + 'cystitides', + 'cystocarps', + 'cystoliths', + 'cystoscope', + 'cystoscopes', + 'cystoscopic', + 'cystoscopies', + 'cystoscopy', + 'cytochalasin', + 'cytochalasins', + 'cytochemical', + 'cytochemistries', + 'cytochemistry', + 'cytochrome', + 'cytochromes', + 'cytodifferentiation', + 'cytodifferentiations', + 'cytogenetic', + 'cytogenetical', + 'cytogenetically', + 'cytogeneticist', + 'cytogeneticists', + 'cytogenetics', + 'cytogenies', + 'cytokineses', + 'cytokinesis', + 'cytokinetic', + 'cytokinins', + 'cytological', + 'cytologically', + 'cytologies', + 'cytologist', + 'cytologists', + 'cytolysins', + 'cytomegalic', + 'cytomegalovirus', + 'cytomegaloviruses', + 'cytomembrane', + 'cytomembranes', + 'cytopathic', + 'cytopathogenic', + 'cytopathogenicities', + 'cytopathogenicity', + 'cytophilic', + 'cytophotometric', + 'cytophotometries', + 'cytophotometry', + 'cytoplasmic', + 'cytoplasmically', + 'cytoplasms', + 'cytoskeletal', + 'cytoskeleton', + 'cytoskeletons', + 'cytostatic', + 'cytostatically', + 'cytostatics', + 'cytotaxonomic', + 'cytotaxonomically', + 'cytotaxonomies', + 'cytotaxonomy', + 'cytotechnologies', + 'cytotechnologist', + 'cytotechnologists', + 'cytotechnology', + 'cytotoxicities', + 'cytotoxicity', + 'cytotoxins', + 'czarevitch', + 'czarevitches', + 'dachshunds', + 'dactylologies', + 'dactylology', + 'daftnesses', + 'daggerlike', + 'daguerreotype', + 'daguerreotyped', + 'daguerreotypes', + 'daguerreotypies', + 'daguerreotyping', + 'daguerreotypist', + 'daguerreotypists', + 'daguerreotypy', + 'dailinesses', + 'daintiness', + 'daintinesses', + 'dairymaids', + 'dalliances', + 'dalmatians', + 'damageabilities', + 'damageability', + 'damagingly', + 'damascened', + 'damascenes', + 'damascening', + 'damnableness', + 'damnablenesses', + 'damnations', + 'damnedests', + 'damnifying', + 'dampnesses', + 'damselfish', + 'damselfishes', + 'damselflies', + 'dandelions', + 'dandification', + 'dandifications', + 'dandifying', + 'dandyishly', + 'dangerously', + 'dangerousness', + 'dangerousnesses', + 'danknesses', + 'dapperness', + 'dappernesses', + 'daredevilries', + 'daredevilry', + 'daredevils', + 'daredeviltries', + 'daredeviltry', + 'daringness', + 'daringnesses', + 'darknesses', + 'darlingness', + 'darlingnesses', + 'dartboards', + 'dashboards', + 'dastardliness', + 'dastardlinesses', + 'datednesses', + 'datelining', + 'daughterless', + 'daundering', + 'daunomycin', + 'daunomycins', + 'daunorubicin', + 'daunorubicins', + 'dauntingly', + 'dauntlessly', + 'dauntlessness', + 'dauntlessnesses', + 'davenports', + 'dawsonites', + 'daydreamed', + 'daydreamer', + 'daydreamers', + 'daydreaming', + 'daydreamlike', + 'dayflowers', + 'daylighted', + 'daylighting', + 'daylightings', + 'dazednesses', + 'dazzlingly', + 'deacidification', + 'deacidifications', + 'deacidified', + 'deacidifies', + 'deacidifying', + 'deaconesses', + 'deaconries', + 'deactivate', + 'deactivated', + 'deactivates', + 'deactivating', + 'deactivation', + 'deactivations', + 'deactivator', + 'deactivators', + 'deadeningly', + 'deadenings', + 'deadheaded', + 'deadheading', + 'deadlifted', + 'deadlifting', + 'deadlights', + 'deadliness', + 'deadlinesses', + 'deadlocked', + 'deadlocking', + 'deadnesses', + 'deadpanned', + 'deadpanner', + 'deadpanners', + 'deadpanning', + 'deadweight', + 'deadweights', + 'deaerating', + 'deaeration', + 'deaerations', + 'deaerators', + 'deafeningly', + 'deafnesses', + 'dealations', + 'dealership', + 'dealerships', + 'dealfishes', + 'deaminases', + 'deaminated', + 'deaminates', + 'deaminating', + 'deamination', + 'deaminations', + 'dearnesses', + 'deathblows', + 'deathlessly', + 'deathlessness', + 'deathlessnesses', + 'deathtraps', + 'deathwatch', + 'deathwatches', + 'debarkation', + 'debarkations', + 'debarments', + 'debasement', + 'debasements', + 'debatement', + 'debatements', + 'debauchees', + 'debaucheries', + 'debauchers', + 'debauchery', + 'debauching', + 'debentures', + 'debilitate', + 'debilitated', + 'debilitates', + 'debilitating', + 'debilitation', + 'debilitations', + 'debilities', + 'debonairly', + 'debonairness', + 'debonairnesses', + 'debouching', + 'debouchment', + 'debouchments', + 'debridement', + 'debridements', + 'debriefing', + 'debriefings', + 'debruising', + 'debutantes', + 'decadences', + 'decadencies', + 'decadently', + 'decaffeinate', + 'decaffeinated', + 'decaffeinates', + 'decaffeinating', + 'decaffeination', + 'decaffeinations', + 'decahedron', + 'decahedrons', + 'decalcification', + 'decalcifications', + 'decalcified', + 'decalcifies', + 'decalcifying', + 'decalcomania', + 'decalcomanias', + 'decaliters', + 'decalogues', + 'decameters', + 'decamethonium', + 'decamethoniums', + 'decametric', + 'decampment', + 'decampments', + 'decantation', + 'decantations', + 'decapitate', + 'decapitated', + 'decapitates', + 'decapitating', + 'decapitation', + 'decapitations', + 'decapitator', + 'decapitators', + 'decapodans', + 'decapodous', + 'decarbonate', + 'decarbonated', + 'decarbonates', + 'decarbonating', + 'decarbonation', + 'decarbonations', + 'decarbonize', + 'decarbonized', + 'decarbonizer', + 'decarbonizers', + 'decarbonizes', + 'decarbonizing', + 'decarboxylase', + 'decarboxylases', + 'decarboxylate', + 'decarboxylated', + 'decarboxylates', + 'decarboxylating', + 'decarboxylation', + 'decarboxylations', + 'decarburization', + 'decarburizations', + 'decarburize', + 'decarburized', + 'decarburizes', + 'decarburizing', + 'decasualization', + 'decasualizations', + 'decasyllabic', + 'decasyllabics', + 'decasyllable', + 'decasyllables', + 'decathlete', + 'decathletes', + 'decathlons', + 'deceitfully', + 'deceitfulness', + 'deceitfulnesses', + 'deceivable', + 'deceivingly', + 'decelerate', + 'decelerated', + 'decelerates', + 'decelerating', + 'deceleration', + 'decelerations', + 'decelerator', + 'decelerators', + 'decemviral', + 'decemvirate', + 'decemvirates', + 'decenaries', + 'decennially', + 'decennials', + 'decenniums', + 'decentered', + 'decentering', + 'decentralization', + 'decentralizations', + 'decentralize', + 'decentralized', + 'decentralizes', + 'decentralizing', + 'decentring', + 'deceptional', + 'deceptions', + 'deceptively', + 'deceptiveness', + 'deceptivenesses', + 'decerebrate', + 'decerebrated', + 'decerebrates', + 'decerebrating', + 'decerebration', + 'decerebrations', + 'decertification', + 'decertifications', + 'decertified', + 'decertifies', + 'decertifying', + 'dechlorinate', + 'dechlorinated', + 'dechlorinates', + 'dechlorinating', + 'dechlorination', + 'dechlorinations', + 'decidabilities', + 'decidability', + 'decidedness', + 'decidednesses', + 'deciduousness', + 'deciduousnesses', + 'deciliters', + 'decillions', + 'decimalization', + 'decimalizations', + 'decimalize', + 'decimalized', + 'decimalizes', + 'decimalizing', + 'decimating', + 'decimation', + 'decimations', + 'decimeters', + 'decipherable', + 'deciphered', + 'decipherer', + 'decipherers', + 'deciphering', + 'decipherment', + 'decipherments', + 'decisional', + 'decisioned', + 'decisioning', + 'decisively', + 'decisiveness', + 'decisivenesses', + 'deckhouses', + 'declaimers', + 'declaiming', + 'declamation', + 'declamations', + 'declamatory', + 'declarable', + 'declarants', + 'declaration', + 'declarations', + 'declarative', + 'declaratively', + 'declaratory', + 'declassification', + 'declassifications', + 'declassified', + 'declassifies', + 'declassify', + 'declassifying', + 'declassing', + 'declension', + 'declensional', + 'declensions', + 'declinable', + 'declination', + 'declinational', + 'declinations', + 'declivities', + 'declivitous', + 'decoctions', + 'decollated', + 'decollates', + 'decollating', + 'decollation', + 'decollations', + 'decolletage', + 'decolletages', + 'decolletes', + 'decolonization', + 'decolonizations', + 'decolonize', + 'decolonized', + 'decolonizes', + 'decolonizing', + 'decoloring', + 'decolorization', + 'decolorizations', + 'decolorize', + 'decolorized', + 'decolorizer', + 'decolorizers', + 'decolorizes', + 'decolorizing', + 'decoloured', + 'decolouring', + 'decommission', + 'decommissioned', + 'decommissioning', + 'decommissions', + 'decompensate', + 'decompensated', + 'decompensates', + 'decompensating', + 'decompensation', + 'decompensations', + 'decomposabilities', + 'decomposability', + 'decomposable', + 'decomposed', + 'decomposer', + 'decomposers', + 'decomposes', + 'decomposing', + 'decomposition', + 'decompositions', + 'decompound', + 'decompress', + 'decompressed', + 'decompresses', + 'decompressing', + 'decompression', + 'decompressions', + 'deconcentrate', + 'deconcentrated', + 'deconcentrates', + 'deconcentrating', + 'deconcentration', + 'deconcentrations', + 'decondition', + 'deconditioned', + 'deconditioning', + 'deconditions', + 'decongestant', + 'decongestants', + 'decongested', + 'decongesting', + 'decongestion', + 'decongestions', + 'decongestive', + 'decongests', + 'deconsecrate', + 'deconsecrated', + 'deconsecrates', + 'deconsecrating', + 'deconsecration', + 'deconsecrations', + 'deconstruct', + 'deconstructed', + 'deconstructing', + 'deconstruction', + 'deconstructionist', + 'deconstructionists', + 'deconstructions', + 'deconstructive', + 'deconstructor', + 'deconstructors', + 'deconstructs', + 'decontaminate', + 'decontaminated', + 'decontaminates', + 'decontaminating', + 'decontamination', + 'decontaminations', + 'decontaminator', + 'decontaminators', + 'decontrolled', + 'decontrolling', + 'decontrols', + 'decorating', + 'decoration', + 'decorations', + 'decorative', + 'decoratively', + 'decorativeness', + 'decorativenesses', + 'decorators', + 'decorously', + 'decorousness', + 'decorousnesses', + 'decorticate', + 'decorticated', + 'decorticates', + 'decorticating', + 'decortication', + 'decortications', + 'decorticator', + 'decorticators', + 'decoupaged', + 'decoupages', + 'decoupaging', + 'decoupling', + 'decreasing', + 'decreasingly', + 'decremental', + 'decremented', + 'decrementing', + 'decrements', + 'decrepitate', + 'decrepitated', + 'decrepitates', + 'decrepitating', + 'decrepitation', + 'decrepitations', + 'decrepitly', + 'decrepitude', + 'decrepitudes', + 'decrescendo', + 'decrescendos', + 'decrescent', + 'decriminalization', + 'decriminalizations', + 'decriminalize', + 'decriminalized', + 'decriminalizes', + 'decriminalizing', + 'decrowning', + 'decrypting', + 'decryption', + 'decryptions', + 'decussated', + 'decussates', + 'decussating', + 'decussation', + 'decussations', + 'dedicatedly', + 'dedicatees', + 'dedicating', + 'dedication', + 'dedications', + 'dedicators', + 'dedicatory', + 'dedifferentiate', + 'dedifferentiated', + 'dedifferentiates', + 'dedifferentiating', + 'dedifferentiation', + 'dedifferentiations', + 'deductibilities', + 'deductibility', + 'deductible', + 'deductibles', + 'deductions', + 'deductively', + 'deepnesses', + 'deerberries', + 'deerhounds', + 'deerstalker', + 'deerstalkers', + 'deescalate', + 'deescalated', + 'deescalates', + 'deescalating', + 'deescalation', + 'deescalations', + 'defacement', + 'defacements', + 'defalcated', + 'defalcates', + 'defalcating', + 'defalcation', + 'defalcations', + 'defalcator', + 'defalcators', + 'defamation', + 'defamations', + 'defamatory', + 'defaulters', + 'defaulting', + 'defeasance', + 'defeasances', + 'defeasibilities', + 'defeasibility', + 'defeasible', + 'defeatisms', + 'defeatists', + 'defeatures', + 'defecating', + 'defecation', + 'defecations', + 'defections', + 'defectively', + 'defectiveness', + 'defectivenesses', + 'defectives', + 'defeminization', + 'defeminizations', + 'defeminize', + 'defeminized', + 'defeminizes', + 'defeminizing', + 'defenceman', + 'defencemen', + 'defendable', + 'defendants', + 'defenestrate', + 'defenestrated', + 'defenestrates', + 'defenestrating', + 'defenestration', + 'defenestrations', + 'defenseless', + 'defenselessly', + 'defenselessness', + 'defenselessnesses', + 'defenseman', + 'defensemen', + 'defensibilities', + 'defensibility', + 'defensible', + 'defensibly', + 'defensively', + 'defensiveness', + 'defensivenesses', + 'defensives', + 'deferences', + 'deferential', + 'deferentially', + 'deferments', + 'deferrable', + 'deferrables', + 'defervescence', + 'defervescences', + 'defibrillate', + 'defibrillated', + 'defibrillates', + 'defibrillating', + 'defibrillation', + 'defibrillations', + 'defibrillator', + 'defibrillators', + 'defibrinate', + 'defibrinated', + 'defibrinates', + 'defibrinating', + 'defibrination', + 'defibrinations', + 'deficiencies', + 'deficiency', + 'deficiently', + 'deficients', + 'defilading', + 'defilement', + 'defilements', + 'definement', + 'definements', + 'definienda', + 'definiendum', + 'definientia', + 'definitely', + 'definiteness', + 'definitenesses', + 'definition', + 'definitional', + 'definitions', + 'definitive', + 'definitively', + 'definitiveness', + 'definitivenesses', + 'definitives', + 'definitize', + 'definitized', + 'definitizes', + 'definitizing', + 'definitude', + 'definitudes', + 'deflagrate', + 'deflagrated', + 'deflagrates', + 'deflagrating', + 'deflagration', + 'deflagrations', + 'deflationary', + 'deflations', + 'deflectable', + 'deflecting', + 'deflection', + 'deflections', + 'deflective', + 'deflectors', + 'defloration', + 'deflorations', + 'deflowered', + 'deflowerer', + 'deflowerers', + 'deflowering', + 'defocusing', + 'defocussed', + 'defocusses', + 'defocussing', + 'defoliants', + 'defoliated', + 'defoliates', + 'defoliating', + 'defoliation', + 'defoliations', + 'defoliator', + 'defoliators', + 'deforcement', + 'deforcements', + 'deforestation', + 'deforestations', + 'deforested', + 'deforesting', + 'deformable', + 'deformalize', + 'deformalized', + 'deformalizes', + 'deformalizing', + 'deformation', + 'deformational', + 'deformations', + 'deformative', + 'deformities', + 'defrauders', + 'defrauding', + 'defrayable', + 'defrocking', + 'defrosters', + 'defrosting', + 'deftnesses', + 'degaussers', + 'degaussing', + 'degeneracies', + 'degeneracy', + 'degenerate', + 'degenerated', + 'degenerately', + 'degenerateness', + 'degeneratenesses', + 'degenerates', + 'degenerating', + 'degeneration', + 'degenerations', + 'degenerative', + 'deglaciated', + 'deglaciation', + 'deglaciations', + 'deglamorization', + 'deglamorizations', + 'deglamorize', + 'deglamorized', + 'deglamorizes', + 'deglamorizing', + 'deglutition', + 'deglutitions', + 'degradable', + 'degradation', + 'degradations', + 'degradative', + 'degradedly', + 'degradingly', + 'degranulation', + 'degranulations', + 'degreasers', + 'degreasing', + 'degressive', + 'degressively', + 'degringolade', + 'degringolades', + 'degustation', + 'degustations', + 'dehiscence', + 'dehiscences', + 'dehumanization', + 'dehumanizations', + 'dehumanize', + 'dehumanized', + 'dehumanizes', + 'dehumanizing', + 'dehumidification', + 'dehumidifications', + 'dehumidified', + 'dehumidifier', + 'dehumidifiers', + 'dehumidifies', + 'dehumidify', + 'dehumidifying', + 'dehydrated', + 'dehydrates', + 'dehydrating', + 'dehydration', + 'dehydrations', + 'dehydrator', + 'dehydrators', + 'dehydrochlorinase', + 'dehydrochlorinases', + 'dehydrochlorinate', + 'dehydrochlorinated', + 'dehydrochlorinates', + 'dehydrochlorinating', + 'dehydrochlorination', + 'dehydrochlorinations', + 'dehydrogenase', + 'dehydrogenases', + 'dehydrogenate', + 'dehydrogenated', + 'dehydrogenates', + 'dehydrogenating', + 'dehydrogenation', + 'dehydrogenations', + 'deification', + 'deifications', + 'deindustrialization', + 'deindustrializations', + 'deindustrialize', + 'deindustrialized', + 'deindustrializes', + 'deindustrializing', + 'deinonychus', + 'deinonychuses', + 'deinstitutionalization', + 'deinstitutionalizations', + 'deinstitutionalize', + 'deinstitutionalized', + 'deinstitutionalizes', + 'deinstitutionalizing', + 'deionization', + 'deionizations', + 'deionizers', + 'deionizing', + 'deistically', + 'dejectedly', + 'dejectedness', + 'dejectednesses', + 'dejections', + 'dekaliters', + 'dekameters', + 'dekametric', + 'delaminate', + 'delaminated', + 'delaminates', + 'delaminating', + 'delamination', + 'delaminations', + 'delectabilities', + 'delectability', + 'delectable', + 'delectables', + 'delectably', + 'delectation', + 'delectations', + 'delegacies', + 'delegatees', + 'delegating', + 'delegation', + 'delegations', + 'delegators', + 'delegitimation', + 'delegitimations', + 'deleterious', + 'deleteriously', + 'deleteriousness', + 'deleteriousnesses', + 'delftwares', + 'deliberate', + 'deliberated', + 'deliberately', + 'deliberateness', + 'deliberatenesses', + 'deliberates', + 'deliberating', + 'deliberation', + 'deliberations', + 'deliberative', + 'deliberatively', + 'deliberativeness', + 'deliberativenesses', + 'delicacies', + 'delicately', + 'delicatessen', + 'delicatessens', + 'deliciously', + 'deliciousness', + 'deliciousnesses', + 'delightedly', + 'delightedness', + 'delightednesses', + 'delighters', + 'delightful', + 'delightfully', + 'delightfulness', + 'delightfulnesses', + 'delighting', + 'delightsome', + 'delimitation', + 'delimitations', + 'delimiters', + 'delimiting', + 'delineated', + 'delineates', + 'delineating', + 'delineation', + 'delineations', + 'delineative', + 'delineator', + 'delineators', + 'delinquencies', + 'delinquency', + 'delinquent', + 'delinquently', + 'delinquents', + 'deliquesce', + 'deliquesced', + 'deliquescence', + 'deliquescences', + 'deliquescent', + 'deliquesces', + 'deliquescing', + 'deliriously', + 'deliriousness', + 'deliriousnesses', + 'deliverabilities', + 'deliverability', + 'deliverable', + 'deliverance', + 'deliverances', + 'deliverers', + 'deliveries', + 'delivering', + 'deliveryman', + 'deliverymen', + 'delocalization', + 'delocalizations', + 'delocalize', + 'delocalized', + 'delocalizes', + 'delocalizing', + 'delphically', + 'delphinium', + 'delphiniums', + 'deltoideus', + 'delusional', + 'delusionary', + 'delusively', + 'delusiveness', + 'delusivenesses', + 'delustered', + 'delustering', + 'demagnetization', + 'demagnetizations', + 'demagnetize', + 'demagnetized', + 'demagnetizer', + 'demagnetizers', + 'demagnetizes', + 'demagnetizing', + 'demagogically', + 'demagogies', + 'demagoging', + 'demagogued', + 'demagogueries', + 'demagoguery', + 'demagogues', + 'demagoguing', + 'demandable', + 'demandants', + 'demandingly', + 'demandingness', + 'demandingnesses', + 'demantoids', + 'demarcated', + 'demarcates', + 'demarcating', + 'demarcation', + 'demarcations', + 'dematerialization', + 'dematerializations', + 'dematerialize', + 'dematerialized', + 'dematerializes', + 'dematerializing', + 'demeanours', + 'dementedly', + 'dementedness', + 'dementednesses', + 'demergered', + 'demergering', + 'demeriting', + 'demigoddess', + 'demigoddesses', + 'demilitarization', + 'demilitarizations', + 'demilitarize', + 'demilitarized', + 'demilitarizes', + 'demilitarizing', + 'demimondaine', + 'demimondaines', + 'demimondes', + 'demineralization', + 'demineralizations', + 'demineralize', + 'demineralized', + 'demineralizer', + 'demineralizers', + 'demineralizes', + 'demineralizing', + 'demisemiquaver', + 'demisemiquavers', + 'demissions', + 'demitasses', + 'demiurgical', + 'demiworlds', + 'demobilization', + 'demobilizations', + 'demobilize', + 'demobilized', + 'demobilizes', + 'demobilizing', + 'democracies', + 'democratic', + 'democratically', + 'democratization', + 'democratizations', + 'democratize', + 'democratized', + 'democratizer', + 'democratizers', + 'democratizes', + 'democratizing', + 'demodulate', + 'demodulated', + 'demodulates', + 'demodulating', + 'demodulation', + 'demodulations', + 'demodulator', + 'demodulators', + 'demographer', + 'demographers', + 'demographic', + 'demographical', + 'demographically', + 'demographics', + 'demographies', + 'demography', + 'demoiselle', + 'demoiselles', + 'demolished', + 'demolisher', + 'demolishers', + 'demolishes', + 'demolishing', + 'demolishment', + 'demolishments', + 'demolition', + 'demolitionist', + 'demolitionists', + 'demolitions', + 'demonesses', + 'demonetization', + 'demonetizations', + 'demonetize', + 'demonetized', + 'demonetizes', + 'demonetizing', + 'demoniacal', + 'demoniacally', + 'demonically', + 'demonising', + 'demonization', + 'demonizations', + 'demonizing', + 'demonological', + 'demonologies', + 'demonologist', + 'demonologists', + 'demonology', + 'demonstrabilities', + 'demonstrability', + 'demonstrable', + 'demonstrably', + 'demonstrate', + 'demonstrated', + 'demonstrates', + 'demonstrating', + 'demonstration', + 'demonstrational', + 'demonstrations', + 'demonstrative', + 'demonstratively', + 'demonstrativeness', + 'demonstrativenesses', + 'demonstratives', + 'demonstrator', + 'demonstrators', + 'demoralization', + 'demoralizations', + 'demoralize', + 'demoralized', + 'demoralizer', + 'demoralizers', + 'demoralizes', + 'demoralizing', + 'demoralizingly', + 'demountable', + 'demounting', + 'demulcents', + 'demultiplexer', + 'demultiplexers', + 'demureness', + 'demurenesses', + 'demurrages', + 'demyelinating', + 'demyelination', + 'demyelinations', + 'demystification', + 'demystifications', + 'demystified', + 'demystifies', + 'demystifying', + 'demythologization', + 'demythologizations', + 'demythologize', + 'demythologized', + 'demythologizer', + 'demythologizers', + 'demythologizes', + 'demythologizing', + 'denationalization', + 'denationalizations', + 'denationalize', + 'denationalized', + 'denationalizes', + 'denationalizing', + 'denaturalization', + 'denaturalizations', + 'denaturalize', + 'denaturalized', + 'denaturalizes', + 'denaturalizing', + 'denaturant', + 'denaturants', + 'denaturation', + 'denaturations', + 'denaturing', + 'denazification', + 'denazifications', + 'denazified', + 'denazifies', + 'denazifying', + 'dendriform', + 'dendrochronological', + 'dendrochronologically', + 'dendrochronologies', + 'dendrochronologist', + 'dendrochronologists', + 'dendrochronology', + 'dendrogram', + 'dendrograms', + 'dendrologic', + 'dendrological', + 'dendrologies', + 'dendrologist', + 'dendrologists', + 'dendrology', + 'denegation', + 'denegations', + 'denervated', + 'denervates', + 'denervating', + 'denervation', + 'denervations', + 'deniabilities', + 'deniability', + 'denigrated', + 'denigrates', + 'denigrating', + 'denigration', + 'denigrations', + 'denigrative', + 'denigrator', + 'denigrators', + 'denigratory', + 'denitrification', + 'denitrifications', + 'denitrified', + 'denitrifier', + 'denitrifiers', + 'denitrifies', + 'denitrifying', + 'denizening', + 'denominate', + 'denominated', + 'denominates', + 'denominating', + 'denomination', + 'denominational', + 'denominationalism', + 'denominationalisms', + 'denominations', + 'denominative', + 'denominatives', + 'denominator', + 'denominators', + 'denotation', + 'denotations', + 'denotative', + 'denotement', + 'denotements', + 'denouement', + 'denouements', + 'denouncement', + 'denouncements', + 'denouncers', + 'denouncing', + 'densenesses', + 'densification', + 'densifications', + 'densifying', + 'densitometer', + 'densitometers', + 'densitometric', + 'densitometries', + 'densitometry', + 'denticulate', + 'denticulated', + 'denticulation', + 'denticulations', + 'dentifrice', + 'dentifrices', + 'dentistries', + 'dentitions', + 'denturists', + 'denuclearization', + 'denuclearizations', + 'denuclearize', + 'denuclearized', + 'denuclearizes', + 'denuclearizing', + 'denudating', + 'denudation', + 'denudations', + 'denudement', + 'denudements', + 'denumerabilities', + 'denumerability', + 'denumerable', + 'denumerably', + 'denunciation', + 'denunciations', + 'denunciative', + 'denunciatory', + 'deodorants', + 'deodorization', + 'deodorizations', + 'deodorized', + 'deodorizer', + 'deodorizers', + 'deodorizes', + 'deodorizing', + 'deontological', + 'deontologies', + 'deontologist', + 'deontologists', + 'deontology', + 'deorbiting', + 'deoxidation', + 'deoxidations', + 'deoxidized', + 'deoxidizer', + 'deoxidizers', + 'deoxidizes', + 'deoxidizing', + 'deoxygenate', + 'deoxygenated', + 'deoxygenates', + 'deoxygenating', + 'deoxygenation', + 'deoxygenations', + 'deoxyribonuclease', + 'deoxyribonucleases', + 'deoxyribonucleotide', + 'deoxyribonucleotides', + 'deoxyribose', + 'deoxyriboses', + 'depainting', + 'department', + 'departmental', + 'departmentalization', + 'departmentalizations', + 'departmentalize', + 'departmentalized', + 'departmentalizes', + 'departmentalizing', + 'departmentally', + 'departments', + 'departures', + 'depauperate', + 'dependabilities', + 'dependability', + 'dependable', + 'dependableness', + 'dependablenesses', + 'dependably', + 'dependance', + 'dependances', + 'dependants', + 'dependence', + 'dependences', + 'dependencies', + 'dependency', + 'dependently', + 'dependents', + 'depersonalization', + 'depersonalizations', + 'depersonalize', + 'depersonalized', + 'depersonalizes', + 'depersonalizing', + 'dephosphorylate', + 'dephosphorylated', + 'dephosphorylates', + 'dephosphorylating', + 'dephosphorylation', + 'dephosphorylations', + 'depictions', + 'depigmentation', + 'depigmentations', + 'depilating', + 'depilation', + 'depilations', + 'depilatories', + 'depilatory', + 'depletable', + 'depletions', + 'deplorable', + 'deplorableness', + 'deplorablenesses', + 'deplorably', + 'deploringly', + 'deployable', + 'deployment', + 'deployments', + 'depolarization', + 'depolarizations', + 'depolarize', + 'depolarized', + 'depolarizer', + 'depolarizers', + 'depolarizes', + 'depolarizing', + 'depolished', + 'depolishes', + 'depolishing', + 'depoliticization', + 'depoliticizations', + 'depoliticize', + 'depoliticized', + 'depoliticizes', + 'depoliticizing', + 'depolymerization', + 'depolymerizations', + 'depolymerize', + 'depolymerized', + 'depolymerizes', + 'depolymerizing', + 'depopulate', + 'depopulated', + 'depopulates', + 'depopulating', + 'depopulation', + 'depopulations', + 'deportable', + 'deportation', + 'deportations', + 'deportment', + 'deportments', + 'depositaries', + 'depositary', + 'depositing', + 'deposition', + 'depositional', + 'depositions', + 'depositories', + 'depositors', + 'depository', + 'depravation', + 'depravations', + 'depravedly', + 'depravedness', + 'depravednesses', + 'depravement', + 'depravements', + 'depravities', + 'deprecated', + 'deprecates', + 'deprecating', + 'deprecatingly', + 'deprecation', + 'deprecations', + 'deprecatorily', + 'deprecatory', + 'depreciable', + 'depreciate', + 'depreciated', + 'depreciates', + 'depreciating', + 'depreciatingly', + 'depreciation', + 'depreciations', + 'depreciative', + 'depreciator', + 'depreciators', + 'depreciatory', + 'depredated', + 'depredates', + 'depredating', + 'depredation', + 'depredations', + 'depredator', + 'depredators', + 'depredatory', + 'depressant', + 'depressants', + 'depressible', + 'depressing', + 'depressingly', + 'depression', + 'depressions', + 'depressive', + 'depressively', + 'depressives', + 'depressors', + 'depressurization', + 'depressurizations', + 'depressurize', + 'depressurized', + 'depressurizes', + 'depressurizing', + 'deprivation', + 'deprivations', + 'deprogramed', + 'deprograming', + 'deprogrammed', + 'deprogrammer', + 'deprogrammers', + 'deprogramming', + 'deprograms', + 'depurating', + 'deputation', + 'deputations', + 'deputization', + 'deputizations', + 'deputizing', + 'deracinate', + 'deracinated', + 'deracinates', + 'deracinating', + 'deracination', + 'deracinations', + 'deraigning', + 'derailleur', + 'derailleurs', + 'derailment', + 'derailments', + 'derangement', + 'derangements', + 'derealization', + 'derealizations', + 'deregulate', + 'deregulated', + 'deregulates', + 'deregulating', + 'deregulation', + 'deregulations', + 'dereliction', + 'derelictions', + 'derepressed', + 'derepresses', + 'derepressing', + 'derepression', + 'derepressions', + 'deridingly', + 'derisively', + 'derisiveness', + 'derisivenesses', + 'derivation', + 'derivational', + 'derivations', + 'derivative', + 'derivatively', + 'derivativeness', + 'derivativenesses', + 'derivatives', + 'derivatization', + 'derivatizations', + 'derivatize', + 'derivatized', + 'derivatizes', + 'derivatizing', + 'dermabrasion', + 'dermabrasions', + 'dermatites', + 'dermatitides', + 'dermatitis', + 'dermatitises', + 'dermatogen', + 'dermatogens', + 'dermatoglyphic', + 'dermatoglyphics', + 'dermatologic', + 'dermatological', + 'dermatologies', + 'dermatologist', + 'dermatologists', + 'dermatology', + 'dermatomal', + 'dermatomes', + 'dermatophyte', + 'dermatophytes', + 'dermatoses', + 'dermatosis', + 'dermestids', + 'derogating', + 'derogation', + 'derogations', + 'derogative', + 'derogatively', + 'derogatorily', + 'derogatory', + 'derringers', + 'desacralization', + 'desacralizations', + 'desacralize', + 'desacralized', + 'desacralizes', + 'desacralizing', + 'desalinate', + 'desalinated', + 'desalinates', + 'desalinating', + 'desalination', + 'desalinations', + 'desalinator', + 'desalinators', + 'desalinization', + 'desalinizations', + 'desalinize', + 'desalinized', + 'desalinizes', + 'desalinizing', + 'descanting', + 'descendant', + 'descendants', + 'descendent', + 'descendents', + 'descenders', + 'descendible', + 'descending', + 'descension', + 'descensions', + 'describable', + 'describers', + 'describing', + 'description', + 'descriptions', + 'descriptive', + 'descriptively', + 'descriptiveness', + 'descriptivenesses', + 'descriptor', + 'descriptors', + 'desecrated', + 'desecrater', + 'desecraters', + 'desecrates', + 'desecrating', + 'desecration', + 'desecrations', + 'desecrator', + 'desecrators', + 'desegregate', + 'desegregated', + 'desegregates', + 'desegregating', + 'desegregation', + 'desegregations', + 'deselected', + 'deselecting', + 'desensitization', + 'desensitizations', + 'desensitize', + 'desensitized', + 'desensitizer', + 'desensitizers', + 'desensitizes', + 'desensitizing', + 'desertification', + 'desertifications', + 'desertions', + 'deservedly', + 'deservedness', + 'deservednesses', + 'deservings', + 'desexualization', + 'desexualizations', + 'desexualize', + 'desexualized', + 'desexualizes', + 'desexualizing', + 'deshabille', + 'deshabilles', + 'desiccants', + 'desiccated', + 'desiccates', + 'desiccating', + 'desiccation', + 'desiccations', + 'desiccative', + 'desiccator', + 'desiccators', + 'desiderata', + 'desiderate', + 'desiderated', + 'desiderates', + 'desiderating', + 'desideration', + 'desiderations', + 'desiderative', + 'desideratum', + 'designated', + 'designates', + 'designating', + 'designation', + 'designations', + 'designative', + 'designator', + 'designators', + 'designatory', + 'designedly', + 'designment', + 'designments', + 'desilvered', + 'desilvering', + 'desipramine', + 'desipramines', + 'desirabilities', + 'desirability', + 'desirableness', + 'desirablenesses', + 'desirables', + 'desirously', + 'desirousness', + 'desirousnesses', + 'desistance', + 'desistances', + 'desmosomal', + 'desmosomes', + 'desolately', + 'desolateness', + 'desolatenesses', + 'desolaters', + 'desolating', + 'desolatingly', + 'desolation', + 'desolations', + 'desolators', + 'desorption', + 'desorptions', + 'despairers', + 'despairing', + 'despairingly', + 'despatched', + 'despatches', + 'despatching', + 'desperadoes', + 'desperados', + 'desperately', + 'desperateness', + 'desperatenesses', + 'desperation', + 'desperations', + 'despicable', + 'despicableness', + 'despicablenesses', + 'despicably', + 'despiritualize', + 'despiritualized', + 'despiritualizes', + 'despiritualizing', + 'despisement', + 'despisements', + 'despiteful', + 'despitefully', + 'despitefulness', + 'despitefulnesses', + 'despiteous', + 'despiteously', + 'despoilers', + 'despoiling', + 'despoilment', + 'despoilments', + 'despoliation', + 'despoliations', + 'despondence', + 'despondences', + 'despondencies', + 'despondency', + 'despondent', + 'despondently', + 'desponding', + 'despotically', + 'despotisms', + 'desquamate', + 'desquamated', + 'desquamates', + 'desquamating', + 'desquamation', + 'desquamations', + 'dessertspoon', + 'dessertspoonful', + 'dessertspoonfuls', + 'dessertspoons', + 'dessertspoonsful', + 'destabilization', + 'destabilizations', + 'destabilize', + 'destabilized', + 'destabilizes', + 'destabilizing', + 'destaining', + 'destination', + 'destinations', + 'destituteness', + 'destitutenesses', + 'destitution', + 'destitutions', + 'destroyers', + 'destroying', + 'destructed', + 'destructibilities', + 'destructibility', + 'destructible', + 'destructing', + 'destruction', + 'destructionist', + 'destructionists', + 'destructions', + 'destructive', + 'destructively', + 'destructiveness', + 'destructivenesses', + 'destructivities', + 'destructivity', + 'desuetudes', + 'desugaring', + 'desulfured', + 'desulfuring', + 'desulfurization', + 'desulfurizations', + 'desulfurize', + 'desulfurized', + 'desulfurizes', + 'desulfurizing', + 'desultorily', + 'desultoriness', + 'desultorinesses', + 'detachabilities', + 'detachability', + 'detachable', + 'detachably', + 'detachedly', + 'detachedness', + 'detachednesses', + 'detachment', + 'detachments', + 'detailedly', + 'detailedness', + 'detailednesses', + 'detainment', + 'detainments', + 'detasseled', + 'detasseling', + 'detasselled', + 'detasselling', + 'detectabilities', + 'detectability', + 'detectable', + 'detections', + 'detectivelike', + 'detectives', + 'detentions', + 'detergencies', + 'detergency', + 'detergents', + 'deteriorate', + 'deteriorated', + 'deteriorates', + 'deteriorating', + 'deterioration', + 'deteriorations', + 'deteriorative', + 'determents', + 'determinable', + 'determinableness', + 'determinablenesses', + 'determinably', + 'determinacies', + 'determinacy', + 'determinant', + 'determinantal', + 'determinants', + 'determinate', + 'determinately', + 'determinateness', + 'determinatenesses', + 'determination', + 'determinations', + 'determinative', + 'determinatives', + 'determinator', + 'determinators', + 'determined', + 'determinedly', + 'determinedness', + 'determinednesses', + 'determiner', + 'determiners', + 'determines', + 'determining', + 'determinism', + 'determinisms', + 'determinist', + 'deterministic', + 'deterministically', + 'determinists', + 'deterrabilities', + 'deterrability', + 'deterrable', + 'deterrence', + 'deterrences', + 'deterrently', + 'deterrents', + 'detersives', + 'detestable', + 'detestableness', + 'detestablenesses', + 'detestably', + 'detestation', + 'detestations', + 'dethronement', + 'dethronements', + 'dethroners', + 'dethroning', + 'detonabilities', + 'detonability', + 'detonatable', + 'detonating', + 'detonation', + 'detonations', + 'detonative', + 'detonators', + 'detoxicant', + 'detoxicants', + 'detoxicate', + 'detoxicated', + 'detoxicates', + 'detoxicating', + 'detoxication', + 'detoxications', + 'detoxification', + 'detoxifications', + 'detoxified', + 'detoxifies', + 'detoxifying', + 'detracting', + 'detraction', + 'detractions', + 'detractive', + 'detractively', + 'detractors', + 'detraining', + 'detrainment', + 'detrainments', + 'detribalization', + 'detribalizations', + 'detribalize', + 'detribalized', + 'detribalizes', + 'detribalizing', + 'detrimental', + 'detrimentally', + 'detrimentals', + 'detriments', + 'detritions', + 'detumescence', + 'detumescences', + 'detumescent', + 'deuteragonist', + 'deuteragonists', + 'deuteranomalies', + 'deuteranomalous', + 'deuteranomaly', + 'deuteranope', + 'deuteranopes', + 'deuteranopia', + 'deuteranopias', + 'deuteranopic', + 'deuterated', + 'deuterates', + 'deuterating', + 'deuteration', + 'deuterations', + 'deuteriums', + 'deuterocanonical', + 'deuterostome', + 'deuterostomes', + 'deutoplasm', + 'deutoplasms', + 'devaluated', + 'devaluates', + 'devaluating', + 'devaluation', + 'devaluations', + 'devastated', + 'devastates', + 'devastating', + 'devastatingly', + 'devastation', + 'devastations', + 'devastative', + 'devastator', + 'devastators', + 'developable', + 'developers', + 'developing', + 'development', + 'developmental', + 'developmentally', + 'developments', + 'deverbative', + 'deverbatives', + 'deviancies', + 'deviationism', + 'deviationisms', + 'deviationist', + 'deviationists', + 'deviations', + 'devilfishes', + 'devilishly', + 'devilishness', + 'devilishnesses', + 'devilments', + 'deviltries', + 'devilwoods', + 'deviousness', + 'deviousnesses', + 'devitalize', + 'devitalized', + 'devitalizes', + 'devitalizing', + 'devitrification', + 'devitrifications', + 'devitrified', + 'devitrifies', + 'devitrifying', + 'devocalize', + 'devocalized', + 'devocalizes', + 'devocalizing', + 'devolution', + 'devolutionary', + 'devolutionist', + 'devolutionists', + 'devolutions', + 'devotedness', + 'devotednesses', + 'devotement', + 'devotements', + 'devotional', + 'devotionally', + 'devotionals', + 'devoutness', + 'devoutnesses', + 'dewaterers', + 'dewatering', + 'dewberries', + 'dewinesses', + 'dexamethasone', + 'dexamethasones', + 'dexterities', + 'dexterously', + 'dexterousness', + 'dexterousnesses', + 'dextranase', + 'dextranases', + 'dextroamphetamine', + 'dextroamphetamines', + 'dextrorotary', + 'dextrorotatory', + 'dezincking', + 'diabetogenic', + 'diabetologist', + 'diabetologists', + 'diableries', + 'diabolical', + 'diabolically', + 'diabolicalness', + 'diabolicalnesses', + 'diabolisms', + 'diabolists', + 'diabolized', + 'diabolizes', + 'diabolizing', + 'diachronic', + 'diachronically', + 'diachronies', + 'diaconates', + 'diacritical', + 'diacritics', + 'diadelphous', + 'diadromous', + 'diageneses', + 'diagenesis', + 'diagenetic', + 'diagenetically', + 'diageotropic', + 'diagnosable', + 'diagnoseable', + 'diagnosing', + 'diagnostic', + 'diagnostical', + 'diagnostically', + 'diagnostician', + 'diagnosticians', + 'diagnostics', + 'diagonalizable', + 'diagonalization', + 'diagonalizations', + 'diagonalize', + 'diagonalized', + 'diagonalizes', + 'diagonalizing', + 'diagonally', + 'diagraming', + 'diagrammable', + 'diagrammatic', + 'diagrammatical', + 'diagrammatically', + 'diagrammed', + 'diagramming', + 'diakineses', + 'diakinesis', + 'dialectally', + 'dialectical', + 'dialectically', + 'dialectician', + 'dialecticians', + 'dialectics', + 'dialectological', + 'dialectologically', + 'dialectologies', + 'dialectologist', + 'dialectologists', + 'dialectology', + 'dialogical', + 'dialogically', + 'dialogistic', + 'dialogists', + 'dialoguing', + 'dialysates', + 'dialyzable', + 'dialyzates', + 'diamagnetic', + 'diamagnetism', + 'diamagnetisms', + 'diametrical', + 'diametrically', + 'diamondback', + 'diamondbacks', + 'diamondiferous', + 'diamonding', + 'dianthuses', + 'diapausing', + 'diapedeses', + 'diapedesis', + 'diaphaneities', + 'diaphaneity', + 'diaphanous', + 'diaphanously', + 'diaphanousness', + 'diaphanousnesses', + 'diaphonies', + 'diaphorase', + 'diaphorases', + 'diaphoreses', + 'diaphoresis', + 'diaphoretic', + 'diaphoretics', + 'diaphragmatic', + 'diaphragmatically', + 'diaphragms', + 'diaphyseal', + 'diaphysial', + 'diapositive', + 'diapositives', + 'diarrhetic', + 'diarrhoeas', + 'diarthroses', + 'diarthrosis', + 'diastemata', + 'diastereoisomer', + 'diastereoisomeric', + 'diastereoisomerism', + 'diastereoisomerisms', + 'diastereoisomers', + 'diastereomer', + 'diastereomeric', + 'diastereomers', + 'diastrophic', + 'diastrophically', + 'diastrophism', + 'diastrophisms', + 'diatessaron', + 'diatessarons', + 'diathermanous', + 'diathermic', + 'diathermies', + 'diatomaceous', + 'diatomites', + 'diatonically', + 'diazoniums', + 'diazotization', + 'diazotizations', + 'diazotized', + 'diazotizes', + 'diazotizing', + 'dibenzofuran', + 'dibenzofurans', + 'dicarboxylic', + 'dicentrics', + 'dichlorobenzene', + 'dichlorobenzenes', + 'dichlorodifluoromethane', + 'dichlorodifluoromethanes', + 'dichloroethane', + 'dichloroethanes', + 'dichlorvos', + 'dichlorvoses', + 'dichogamies', + 'dichogamous', + 'dichondras', + 'dichotically', + 'dichotomies', + 'dichotomist', + 'dichotomists', + 'dichotomization', + 'dichotomizations', + 'dichotomize', + 'dichotomized', + 'dichotomizes', + 'dichotomizing', + 'dichotomous', + 'dichotomously', + 'dichotomousness', + 'dichotomousnesses', + 'dichroisms', + 'dichromate', + 'dichromates', + 'dichromatic', + 'dichromatism', + 'dichromatisms', + 'dichromats', + 'dichroscope', + 'dichroscopes', + 'dickcissel', + 'dickcissels', + 'dicotyledon', + 'dicotyledonous', + 'dicotyledons', + 'dicoumarin', + 'dicoumarins', + 'dicoumarol', + 'dicoumarols', + 'dicrotisms', + 'dictations', + 'dictatorial', + 'dictatorially', + 'dictatorialness', + 'dictatorialnesses', + 'dictatorship', + 'dictatorships', + 'dictionally', + 'dictionaries', + 'dictionary', + 'dictyosome', + 'dictyosomes', + 'dictyostele', + 'dictyosteles', + 'dicumarols', + 'dicynodont', + 'dicynodonts', + 'didactical', + 'didactically', + 'didacticism', + 'didacticisms', + 'diddlysquat', + 'didgeridoo', + 'didgeridoos', + 'didjeridoo', + 'didjeridoos', + 'didynamies', + 'dieffenbachia', + 'dieffenbachias', + 'dielectric', + 'dielectrics', + 'diencephala', + 'diencephalic', + 'diencephalon', + 'diencephalons', + 'dieselings', + 'dieselization', + 'dieselizations', + 'dieselized', + 'dieselizes', + 'dieselizing', + 'diestruses', + 'dietetically', + 'diethylcarbamazine', + 'diethylcarbamazines', + 'diethylstilbestrol', + 'diethylstilbestrols', + 'dieticians', + 'dietitians', + 'difference', + 'differenced', + 'differences', + 'differencing', + 'differentia', + 'differentiabilities', + 'differentiability', + 'differentiable', + 'differentiae', + 'differential', + 'differentially', + 'differentials', + 'differentiate', + 'differentiated', + 'differentiates', + 'differentiating', + 'differentiation', + 'differentiations', + 'differently', + 'differentness', + 'differentnesses', + 'difficulties', + 'difficultly', + 'difficulty', + 'diffidence', + 'diffidences', + 'diffidently', + 'diffracted', + 'diffracting', + 'diffraction', + 'diffractions', + 'diffractometer', + 'diffractometers', + 'diffractometric', + 'diffractometries', + 'diffractometry', + 'diffuseness', + 'diffusenesses', + 'diffusible', + 'diffusional', + 'diffusionism', + 'diffusionisms', + 'diffusionist', + 'diffusionists', + 'diffusions', + 'diffusively', + 'diffusiveness', + 'diffusivenesses', + 'diffusivities', + 'diffusivity', + 'difunctional', + 'digestibilities', + 'digestibility', + 'digestible', + 'digestions', + 'digestively', + 'digestives', + 'digitalins', + 'digitalises', + 'digitalization', + 'digitalizations', + 'digitalize', + 'digitalized', + 'digitalizes', + 'digitalizing', + 'digitately', + 'digitigrade', + 'digitization', + 'digitizations', + 'digitizers', + 'digitizing', + 'digitonins', + 'digitoxigenin', + 'digitoxigenins', + 'digitoxins', + 'diglyceride', + 'diglycerides', + 'dignifying', + 'dignitaries', + 'digraphically', + 'digressing', + 'digression', + 'digressional', + 'digressionary', + 'digressions', + 'digressive', + 'digressively', + 'digressiveness', + 'digressivenesses', + 'dihydroergotamine', + 'dihydroergotamines', + 'dihydroxyacetone', + 'dihydroxyacetones', + 'dilapidate', + 'dilapidated', + 'dilapidates', + 'dilapidating', + 'dilapidation', + 'dilapidations', + 'dilatabilities', + 'dilatability', + 'dilatancies', + 'dilatation', + 'dilatational', + 'dilatations', + 'dilatometer', + 'dilatometers', + 'dilatometric', + 'dilatometries', + 'dilatometry', + 'dilatorily', + 'dilatoriness', + 'dilatorinesses', + 'dilemmatic', + 'dilettante', + 'dilettantes', + 'dilettanti', + 'dilettantish', + 'dilettantism', + 'dilettantisms', + 'diligences', + 'diligently', + 'dillydallied', + 'dillydallies', + 'dillydally', + 'dillydallying', + 'diluteness', + 'dilutenesses', + 'dimenhydrinate', + 'dimenhydrinates', + 'dimensional', + 'dimensionalities', + 'dimensionality', + 'dimensionally', + 'dimensioned', + 'dimensioning', + 'dimensionless', + 'dimensions', + 'dimercaprol', + 'dimercaprols', + 'dimerization', + 'dimerizations', + 'dimerizing', + 'dimethoate', + 'dimethoates', + 'dimethylhydrazine', + 'dimethylhydrazines', + 'dimethylnitrosamine', + 'dimethylnitrosamines', + 'dimethyltryptamine', + 'dimethyltryptamines', + 'diminishable', + 'diminished', + 'diminishes', + 'diminishing', + 'diminishment', + 'diminishments', + 'diminuendo', + 'diminuendos', + 'diminution', + 'diminutions', + 'diminutive', + 'diminutively', + 'diminutiveness', + 'diminutivenesses', + 'diminutives', + 'dimorphism', + 'dimorphisms', + 'dimorphous', + 'dingdonged', + 'dingdonging', + 'dinginesses', + 'dingleberries', + 'dingleberry', + 'dinitrobenzene', + 'dinitrobenzenes', + 'dinitrophenol', + 'dinitrophenols', + 'dinnerless', + 'dinnertime', + 'dinnertimes', + 'dinnerware', + 'dinnerwares', + 'dinoflagellate', + 'dinoflagellates', + 'dinosaurian', + 'dinucleotide', + 'dinucleotides', + 'dipeptidase', + 'dipeptidases', + 'dipeptides', + 'diphenhydramine', + 'diphenhydramines', + 'diphenylamine', + 'diphenylamines', + 'diphenylhydantoin', + 'diphenylhydantoins', + 'diphosgene', + 'diphosgenes', + 'diphosphate', + 'diphosphates', + 'diphtheria', + 'diphtherial', + 'diphtherias', + 'diphtheritic', + 'diphtheroid', + 'diphtheroids', + 'diphthongal', + 'diphthongization', + 'diphthongizations', + 'diphthongize', + 'diphthongized', + 'diphthongizes', + 'diphthongizing', + 'diphthongs', + 'diphyletic', + 'diphyodont', + 'diploblastic', + 'diplococci', + 'diplococcus', + 'diplodocus', + 'diplodocuses', + 'diploidies', + 'diplomacies', + 'diplomaing', + 'diplomates', + 'diplomatic', + 'diplomatically', + 'diplomatist', + 'diplomatists', + 'diplophase', + 'diplophases', + 'diplotenes', + 'dipnetting', + 'dipperfuls', + 'dipsomania', + 'dipsomaniac', + 'dipsomaniacal', + 'dipsomaniacs', + 'dipsomanias', + 'dipterocarp', + 'dipterocarps', + 'directedness', + 'directednesses', + 'directional', + 'directionalities', + 'directionality', + 'directionless', + 'directionlessness', + 'directionlessnesses', + 'directions', + 'directives', + 'directivities', + 'directivity', + 'directness', + 'directnesses', + 'directorate', + 'directorates', + 'directorial', + 'directories', + 'directorship', + 'directorships', + 'directress', + 'directresses', + 'directrice', + 'directrices', + 'directrixes', + 'direnesses', + 'dirigibles', + 'dirigismes', + 'dirtinesses', + 'disabilities', + 'disability', + 'disablement', + 'disablements', + 'disabusing', + 'disaccharidase', + 'disaccharidases', + 'disaccharide', + 'disaccharides', + 'disaccorded', + 'disaccording', + 'disaccords', + 'disaccustom', + 'disaccustomed', + 'disaccustoming', + 'disaccustoms', + 'disadvantage', + 'disadvantaged', + 'disadvantagedness', + 'disadvantagednesses', + 'disadvantageous', + 'disadvantageously', + 'disadvantageousness', + 'disadvantageousnesses', + 'disadvantages', + 'disadvantaging', + 'disaffected', + 'disaffecting', + 'disaffection', + 'disaffections', + 'disaffects', + 'disaffiliate', + 'disaffiliated', + 'disaffiliates', + 'disaffiliating', + 'disaffiliation', + 'disaffiliations', + 'disaffirmance', + 'disaffirmances', + 'disaffirmed', + 'disaffirming', + 'disaffirms', + 'disaggregate', + 'disaggregated', + 'disaggregates', + 'disaggregating', + 'disaggregation', + 'disaggregations', + 'disaggregative', + 'disagreeable', + 'disagreeableness', + 'disagreeablenesses', + 'disagreeably', + 'disagreeing', + 'disagreement', + 'disagreements', + 'disallowance', + 'disallowances', + 'disallowed', + 'disallowing', + 'disambiguate', + 'disambiguated', + 'disambiguates', + 'disambiguating', + 'disambiguation', + 'disambiguations', + 'disannulled', + 'disannulling', + 'disappearance', + 'disappearances', + 'disappeared', + 'disappearing', + 'disappears', + 'disappoint', + 'disappointed', + 'disappointedly', + 'disappointing', + 'disappointingly', + 'disappointment', + 'disappointments', + 'disappoints', + 'disapprobation', + 'disapprobations', + 'disapproval', + 'disapprovals', + 'disapprove', + 'disapproved', + 'disapprover', + 'disapprovers', + 'disapproves', + 'disapproving', + 'disapprovingly', + 'disarmament', + 'disarmaments', + 'disarmingly', + 'disarrange', + 'disarranged', + 'disarrangement', + 'disarrangements', + 'disarranges', + 'disarranging', + 'disarrayed', + 'disarraying', + 'disarticulate', + 'disarticulated', + 'disarticulates', + 'disarticulating', + 'disarticulation', + 'disarticulations', + 'disassemble', + 'disassembled', + 'disassembles', + 'disassemblies', + 'disassembling', + 'disassembly', + 'disassociate', + 'disassociated', + 'disassociates', + 'disassociating', + 'disassociation', + 'disassociations', + 'disastrous', + 'disastrously', + 'disavowable', + 'disavowals', + 'disavowing', + 'disbanding', + 'disbandment', + 'disbandments', + 'disbarment', + 'disbarments', + 'disbarring', + 'disbeliefs', + 'disbelieve', + 'disbelieved', + 'disbeliever', + 'disbelievers', + 'disbelieves', + 'disbelieving', + 'disbenefit', + 'disbenefits', + 'disbosomed', + 'disbosoming', + 'disboweled', + 'disboweling', + 'disbowelled', + 'disbowelling', + 'disbudding', + 'disburdened', + 'disburdening', + 'disburdenment', + 'disburdenments', + 'disburdens', + 'disbursement', + 'disbursements', + 'disbursers', + 'disbursing', + 'discanting', + 'discardable', + 'discarders', + 'discarding', + 'discarnate', + 'discepting', + 'discernable', + 'discerners', + 'discernible', + 'discernibly', + 'discerning', + 'discerningly', + 'discernment', + 'discernments', + 'dischargeable', + 'discharged', + 'dischargee', + 'dischargees', + 'discharger', + 'dischargers', + 'discharges', + 'discharging', + 'discipleship', + 'discipleships', + 'disciplinable', + 'disciplinal', + 'disciplinarian', + 'disciplinarians', + 'disciplinarily', + 'disciplinarities', + 'disciplinarity', + 'disciplinary', + 'discipline', + 'disciplined', + 'discipliner', + 'discipliners', + 'disciplines', + 'discipling', + 'disciplining', + 'disclaimed', + 'disclaimer', + 'disclaimers', + 'disclaiming', + 'disclamation', + 'disclamations', + 'disclimaxes', + 'disclosers', + 'disclosing', + 'disclosure', + 'disclosures', + 'discographer', + 'discographers', + 'discographic', + 'discographical', + 'discographies', + 'discography', + 'discoloration', + 'discolorations', + 'discolored', + 'discoloring', + 'discombobulate', + 'discombobulated', + 'discombobulates', + 'discombobulating', + 'discombobulation', + 'discombobulations', + 'discomfited', + 'discomfiting', + 'discomfits', + 'discomfiture', + 'discomfitures', + 'discomfort', + 'discomfortable', + 'discomforted', + 'discomforting', + 'discomforts', + 'discommend', + 'discommended', + 'discommending', + 'discommends', + 'discommode', + 'discommoded', + 'discommodes', + 'discommoding', + 'discompose', + 'discomposed', + 'discomposes', + 'discomposing', + 'discomposure', + 'discomposures', + 'disconcert', + 'disconcerted', + 'disconcerting', + 'disconcertingly', + 'disconcertment', + 'disconcertments', + 'disconcerts', + 'disconfirm', + 'disconfirmed', + 'disconfirming', + 'disconfirms', + 'disconformities', + 'disconformity', + 'disconnect', + 'disconnected', + 'disconnectedly', + 'disconnectedness', + 'disconnectednesses', + 'disconnecting', + 'disconnection', + 'disconnections', + 'disconnects', + 'disconsolate', + 'disconsolately', + 'disconsolateness', + 'disconsolatenesses', + 'disconsolation', + 'disconsolations', + 'discontent', + 'discontented', + 'discontentedly', + 'discontentedness', + 'discontentednesses', + 'discontenting', + 'discontentment', + 'discontentments', + 'discontents', + 'discontinuance', + 'discontinuances', + 'discontinuation', + 'discontinuations', + 'discontinue', + 'discontinued', + 'discontinues', + 'discontinuing', + 'discontinuities', + 'discontinuity', + 'discontinuous', + 'discontinuously', + 'discophile', + 'discophiles', + 'discordance', + 'discordances', + 'discordancies', + 'discordancy', + 'discordant', + 'discordantly', + 'discording', + 'discotheque', + 'discotheques', + 'discountable', + 'discounted', + 'discountenance', + 'discountenanced', + 'discountenances', + 'discountenancing', + 'discounter', + 'discounters', + 'discounting', + 'discourage', + 'discourageable', + 'discouraged', + 'discouragement', + 'discouragements', + 'discourager', + 'discouragers', + 'discourages', + 'discouraging', + 'discouragingly', + 'discoursed', + 'discourser', + 'discoursers', + 'discourses', + 'discoursing', + 'discourteous', + 'discourteously', + 'discourteousness', + 'discourteousnesses', + 'discourtesies', + 'discourtesy', + 'discoverable', + 'discovered', + 'discoverer', + 'discoverers', + 'discoveries', + 'discovering', + 'discreditable', + 'discreditably', + 'discredited', + 'discrediting', + 'discredits', + 'discreeter', + 'discreetest', + 'discreetly', + 'discreetness', + 'discreetnesses', + 'discrepancies', + 'discrepancy', + 'discrepant', + 'discrepantly', + 'discretely', + 'discreteness', + 'discretenesses', + 'discretion', + 'discretionary', + 'discretions', + 'discriminabilities', + 'discriminability', + 'discriminable', + 'discriminably', + 'discriminant', + 'discriminants', + 'discriminate', + 'discriminated', + 'discriminates', + 'discriminating', + 'discriminatingly', + 'discrimination', + 'discriminational', + 'discriminations', + 'discriminative', + 'discriminator', + 'discriminatorily', + 'discriminators', + 'discriminatory', + 'discrowned', + 'discrowning', + 'discursive', + 'discursively', + 'discursiveness', + 'discursivenesses', + 'discussable', + 'discussant', + 'discussants', + 'discussers', + 'discussible', + 'discussing', + 'discussion', + 'discussions', + 'disdainful', + 'disdainfully', + 'disdainfulness', + 'disdainfulnesses', + 'disdaining', + 'diseconomies', + 'diseconomy', + 'disembarkation', + 'disembarkations', + 'disembarked', + 'disembarking', + 'disembarks', + 'disembarrass', + 'disembarrassed', + 'disembarrasses', + 'disembarrassing', + 'disembodied', + 'disembodies', + 'disembodying', + 'disembogue', + 'disembogued', + 'disembogues', + 'disemboguing', + 'disembowel', + 'disemboweled', + 'disemboweling', + 'disembowelled', + 'disembowelling', + 'disembowelment', + 'disembowelments', + 'disembowels', + 'disenchant', + 'disenchanted', + 'disenchanter', + 'disenchanters', + 'disenchanting', + 'disenchantingly', + 'disenchantment', + 'disenchantments', + 'disenchants', + 'disencumber', + 'disencumbered', + 'disencumbering', + 'disencumbers', + 'disendowed', + 'disendower', + 'disendowers', + 'disendowing', + 'disendowment', + 'disendowments', + 'disenfranchise', + 'disenfranchised', + 'disenfranchisement', + 'disenfranchisements', + 'disenfranchises', + 'disenfranchising', + 'disengaged', + 'disengagement', + 'disengagements', + 'disengages', + 'disengaging', + 'disentailed', + 'disentailing', + 'disentails', + 'disentangle', + 'disentangled', + 'disentanglement', + 'disentanglements', + 'disentangles', + 'disentangling', + 'disenthral', + 'disenthrall', + 'disenthralled', + 'disenthralling', + 'disenthralls', + 'disenthrals', + 'disentitle', + 'disentitled', + 'disentitles', + 'disentitling', + 'disequilibrate', + 'disequilibrated', + 'disequilibrates', + 'disequilibrating', + 'disequilibration', + 'disequilibrations', + 'disequilibria', + 'disequilibrium', + 'disequilibriums', + 'disestablish', + 'disestablished', + 'disestablishes', + 'disestablishing', + 'disestablishment', + 'disestablishmentarian', + 'disestablishmentarians', + 'disestablishments', + 'disesteemed', + 'disesteeming', + 'disesteems', + 'disfavored', + 'disfavoring', + 'disfigured', + 'disfigurement', + 'disfigurements', + 'disfigures', + 'disfiguring', + 'disfranchise', + 'disfranchised', + 'disfranchisement', + 'disfranchisements', + 'disfranchises', + 'disfranchising', + 'disfrocked', + 'disfrocking', + 'disfunction', + 'disfunctional', + 'disfunctions', + 'disfurnish', + 'disfurnished', + 'disfurnishes', + 'disfurnishing', + 'disfurnishment', + 'disfurnishments', + 'disgorging', + 'disgraceful', + 'disgracefully', + 'disgracefulness', + 'disgracefulnesses', + 'disgracers', + 'disgracing', + 'disgruntle', + 'disgruntled', + 'disgruntlement', + 'disgruntlements', + 'disgruntles', + 'disgruntling', + 'disguisedly', + 'disguisement', + 'disguisements', + 'disguisers', + 'disguising', + 'disgustedly', + 'disgustful', + 'disgustfully', + 'disgusting', + 'disgustingly', + 'dishabille', + 'dishabilles', + 'disharmonies', + 'disharmonious', + 'disharmonize', + 'disharmonized', + 'disharmonizes', + 'disharmonizing', + 'disharmony', + 'dishcloths', + 'dishclouts', + 'dishearten', + 'disheartened', + 'disheartening', + 'dishearteningly', + 'disheartenment', + 'disheartenments', + 'disheartens', + 'dishelming', + 'disherited', + 'disheriting', + 'disheveled', + 'disheveling', + 'dishevelled', + 'dishevelling', + 'dishonesties', + 'dishonestly', + 'dishonesty', + 'dishonorable', + 'dishonorableness', + 'dishonorablenesses', + 'dishonorably', + 'dishonored', + 'dishonorer', + 'dishonorers', + 'dishonoring', + 'dishtowels', + 'dishwasher', + 'dishwashers', + 'dishwaters', + 'disillusion', + 'disillusioned', + 'disillusioning', + 'disillusionment', + 'disillusionments', + 'disillusions', + 'disincentive', + 'disincentives', + 'disinclination', + 'disinclinations', + 'disincline', + 'disinclined', + 'disinclines', + 'disinclining', + 'disinfectant', + 'disinfectants', + 'disinfected', + 'disinfecting', + 'disinfection', + 'disinfections', + 'disinfects', + 'disinfestant', + 'disinfestants', + 'disinfestation', + 'disinfestations', + 'disinfested', + 'disinfesting', + 'disinfests', + 'disinflation', + 'disinflationary', + 'disinflations', + 'disinformation', + 'disinformations', + 'disingenuous', + 'disingenuously', + 'disingenuousness', + 'disingenuousnesses', + 'disinherit', + 'disinheritance', + 'disinheritances', + 'disinherited', + 'disinheriting', + 'disinherits', + 'disinhibit', + 'disinhibited', + 'disinhibiting', + 'disinhibition', + 'disinhibitions', + 'disinhibits', + 'disintegrate', + 'disintegrated', + 'disintegrates', + 'disintegrating', + 'disintegration', + 'disintegrations', + 'disintegrative', + 'disintegrator', + 'disintegrators', + 'disinterest', + 'disinterested', + 'disinterestedly', + 'disinterestedness', + 'disinterestednesses', + 'disinteresting', + 'disinterests', + 'disintermediation', + 'disintermediations', + 'disinterment', + 'disinterments', + 'disinterred', + 'disinterring', + 'disintoxicate', + 'disintoxicated', + 'disintoxicates', + 'disintoxicating', + 'disintoxication', + 'disintoxications', + 'disinvested', + 'disinvesting', + 'disinvestment', + 'disinvestments', + 'disinvests', + 'disinvited', + 'disinvites', + 'disinviting', + 'disjecting', + 'disjoining', + 'disjointed', + 'disjointedly', + 'disjointedness', + 'disjointednesses', + 'disjointing', + 'disjunction', + 'disjunctions', + 'disjunctive', + 'disjunctively', + 'disjunctives', + 'disjuncture', + 'disjunctures', + 'dislikable', + 'dislikeable', + 'dislimning', + 'dislocated', + 'dislocates', + 'dislocating', + 'dislocation', + 'dislocations', + 'dislodgement', + 'dislodgements', + 'dislodging', + 'dislodgment', + 'dislodgments', + 'disloyally', + 'disloyalties', + 'disloyalty', + 'dismalness', + 'dismalnesses', + 'dismantled', + 'dismantlement', + 'dismantlements', + 'dismantles', + 'dismantling', + 'dismasting', + 'dismayingly', + 'dismembered', + 'dismembering', + 'dismemberment', + 'dismemberments', + 'dismembers', + 'dismissals', + 'dismissing', + 'dismission', + 'dismissions', + 'dismissive', + 'dismissively', + 'dismounted', + 'dismounting', + 'disobedience', + 'disobediences', + 'disobedient', + 'disobediently', + 'disobeyers', + 'disobeying', + 'disobliged', + 'disobliges', + 'disobliging', + 'disordered', + 'disorderedly', + 'disorderedness', + 'disorderednesses', + 'disordering', + 'disorderliness', + 'disorderlinesses', + 'disorderly', + 'disorganization', + 'disorganizations', + 'disorganize', + 'disorganized', + 'disorganizes', + 'disorganizing', + 'disorientate', + 'disorientated', + 'disorientates', + 'disorientating', + 'disorientation', + 'disorientations', + 'disoriented', + 'disorienting', + 'disorients', + 'disownment', + 'disownments', + 'disparaged', + 'disparagement', + 'disparagements', + 'disparager', + 'disparagers', + 'disparages', + 'disparaging', + 'disparagingly', + 'disparately', + 'disparateness', + 'disparatenesses', + 'disparities', + 'disparting', + 'dispassion', + 'dispassionate', + 'dispassionately', + 'dispassionateness', + 'dispassionatenesses', + 'dispassions', + 'dispatched', + 'dispatcher', + 'dispatchers', + 'dispatches', + 'dispatching', + 'dispelling', + 'dispending', + 'dispensabilities', + 'dispensability', + 'dispensable', + 'dispensaries', + 'dispensary', + 'dispensation', + 'dispensational', + 'dispensations', + 'dispensatories', + 'dispensatory', + 'dispensers', + 'dispensing', + 'dispeopled', + 'dispeoples', + 'dispeopling', + 'dispersals', + 'dispersant', + 'dispersants', + 'dispersedly', + 'dispersers', + 'dispersible', + 'dispersing', + 'dispersion', + 'dispersions', + 'dispersive', + 'dispersively', + 'dispersiveness', + 'dispersivenesses', + 'dispersoid', + 'dispersoids', + 'dispirited', + 'dispiritedly', + 'dispiritedness', + 'dispiritednesses', + 'dispiriting', + 'dispiteous', + 'displaceable', + 'displacement', + 'displacements', + 'displacing', + 'displanted', + 'displanting', + 'displayable', + 'displaying', + 'displeased', + 'displeases', + 'displeasing', + 'displeasure', + 'displeasures', + 'disploding', + 'displosion', + 'displosions', + 'displuming', + 'disporting', + 'disportment', + 'disportments', + 'disposabilities', + 'disposability', + 'disposable', + 'disposables', + 'disposition', + 'dispositional', + 'dispositions', + 'dispositive', + 'dispossess', + 'dispossessed', + 'dispossesses', + 'dispossessing', + 'dispossession', + 'dispossessions', + 'dispossessor', + 'dispossessors', + 'disposures', + 'dispraised', + 'dispraiser', + 'dispraisers', + 'dispraises', + 'dispraising', + 'dispraisingly', + 'dispreading', + 'disprizing', + 'disproportion', + 'disproportional', + 'disproportionate', + 'disproportionated', + 'disproportionately', + 'disproportionates', + 'disproportionating', + 'disproportionation', + 'disproportionations', + 'disproportioned', + 'disproportioning', + 'disproportions', + 'disprovable', + 'disproving', + 'disputable', + 'disputably', + 'disputants', + 'disputation', + 'disputations', + 'disputatious', + 'disputatiously', + 'disputatiousness', + 'disputatiousnesses', + 'disqualification', + 'disqualifications', + 'disqualified', + 'disqualifies', + 'disqualify', + 'disqualifying', + 'disquantitied', + 'disquantities', + 'disquantity', + 'disquantitying', + 'disquieted', + 'disquieting', + 'disquietingly', + 'disquietly', + 'disquietude', + 'disquietudes', + 'disquisition', + 'disquisitions', + 'disregarded', + 'disregardful', + 'disregarding', + 'disregards', + 'disrelated', + 'disrelation', + 'disrelations', + 'disrelished', + 'disrelishes', + 'disrelishing', + 'disremember', + 'disremembered', + 'disremembering', + 'disremembers', + 'disrepairs', + 'disreputabilities', + 'disreputability', + 'disreputable', + 'disreputableness', + 'disreputablenesses', + 'disreputably', + 'disreputes', + 'disrespect', + 'disrespectabilities', + 'disrespectability', + 'disrespectable', + 'disrespected', + 'disrespectful', + 'disrespectfully', + 'disrespectfulness', + 'disrespectfulnesses', + 'disrespecting', + 'disrespects', + 'disrooting', + 'disrupters', + 'disrupting', + 'disruption', + 'disruptions', + 'disruptive', + 'disruptively', + 'disruptiveness', + 'disruptivenesses', + 'dissatisfaction', + 'dissatisfactions', + 'dissatisfactory', + 'dissatisfied', + 'dissatisfies', + 'dissatisfy', + 'dissatisfying', + 'disseating', + 'dissecting', + 'dissection', + 'dissections', + 'dissectors', + 'disseising', + 'disseisins', + 'disseisors', + 'disseizing', + 'disseizins', + 'dissembled', + 'dissembler', + 'dissemblers', + 'dissembles', + 'dissembling', + 'disseminate', + 'disseminated', + 'disseminates', + 'disseminating', + 'dissemination', + 'disseminations', + 'disseminator', + 'disseminators', + 'disseminule', + 'disseminules', + 'dissension', + 'dissensions', + 'dissensuses', + 'dissenters', + 'dissentient', + 'dissentients', + 'dissenting', + 'dissention', + 'dissentions', + 'dissentious', + 'dissepiment', + 'dissepiments', + 'dissertate', + 'dissertated', + 'dissertates', + 'dissertating', + 'dissertation', + 'dissertational', + 'dissertations', + 'dissertator', + 'dissertators', + 'disserting', + 'disservice', + 'disserviceable', + 'disservices', + 'disserving', + 'disseverance', + 'disseverances', + 'dissevered', + 'dissevering', + 'disseverment', + 'disseverments', + 'dissidence', + 'dissidences', + 'dissidents', + 'dissimilar', + 'dissimilarities', + 'dissimilarity', + 'dissimilarly', + 'dissimilars', + 'dissimilate', + 'dissimilated', + 'dissimilates', + 'dissimilating', + 'dissimilation', + 'dissimilations', + 'dissimilatory', + 'dissimilitude', + 'dissimilitudes', + 'dissimulate', + 'dissimulated', + 'dissimulates', + 'dissimulating', + 'dissimulation', + 'dissimulations', + 'dissimulator', + 'dissimulators', + 'dissipated', + 'dissipatedly', + 'dissipatedness', + 'dissipatednesses', + 'dissipater', + 'dissipaters', + 'dissipates', + 'dissipating', + 'dissipation', + 'dissipations', + 'dissipative', + 'dissociabilities', + 'dissociability', + 'dissociable', + 'dissociate', + 'dissociated', + 'dissociates', + 'dissociating', + 'dissociation', + 'dissociations', + 'dissociative', + 'dissoluble', + 'dissolutely', + 'dissoluteness', + 'dissolutenesses', + 'dissolution', + 'dissolutions', + 'dissolvable', + 'dissolvent', + 'dissolvents', + 'dissolvers', + 'dissolving', + 'dissonance', + 'dissonances', + 'dissonantly', + 'dissuaders', + 'dissuading', + 'dissuasion', + 'dissuasions', + 'dissuasive', + 'dissuasively', + 'dissuasiveness', + 'dissuasivenesses', + 'dissyllable', + 'dissyllables', + 'dissymmetric', + 'dissymmetries', + 'dissymmetry', + 'distaining', + 'distancing', + 'distantness', + 'distantnesses', + 'distasteful', + 'distastefully', + 'distastefulness', + 'distastefulnesses', + 'distasting', + 'distelfink', + 'distelfinks', + 'distemperate', + 'distemperature', + 'distemperatures', + 'distempered', + 'distempering', + 'distempers', + 'distending', + 'distensibilities', + 'distensibility', + 'distensible', + 'distension', + 'distensions', + 'distention', + 'distentions', + 'distichous', + 'distillate', + 'distillates', + 'distillation', + 'distillations', + 'distilleries', + 'distillers', + 'distillery', + 'distilling', + 'distincter', + 'distinctest', + 'distinction', + 'distinctions', + 'distinctive', + 'distinctively', + 'distinctiveness', + 'distinctivenesses', + 'distinctly', + 'distinctness', + 'distinctnesses', + 'distinguish', + 'distinguishabilities', + 'distinguishability', + 'distinguishable', + 'distinguishably', + 'distinguished', + 'distinguishes', + 'distinguishing', + 'distorters', + 'distorting', + 'distortion', + 'distortional', + 'distortions', + 'distractable', + 'distracted', + 'distractedly', + 'distractibilities', + 'distractibility', + 'distractible', + 'distracting', + 'distractingly', + 'distraction', + 'distractions', + 'distractive', + 'distrainable', + 'distrained', + 'distrainer', + 'distrainers', + 'distraining', + 'distrainor', + 'distrainors', + 'distraints', + 'distraught', + 'distraughtly', + 'distressed', + 'distresses', + 'distressful', + 'distressfully', + 'distressfulness', + 'distressfulnesses', + 'distressing', + 'distressingly', + 'distributaries', + 'distributary', + 'distribute', + 'distributed', + 'distributee', + 'distributees', + 'distributes', + 'distributing', + 'distribution', + 'distributional', + 'distributions', + 'distributive', + 'distributively', + 'distributivities', + 'distributivity', + 'distributor', + 'distributors', + 'distributorship', + 'distributorships', + 'districted', + 'districting', + 'distrusted', + 'distrustful', + 'distrustfully', + 'distrustfulness', + 'distrustfulnesses', + 'distrusting', + 'disturbance', + 'disturbances', + 'disturbers', + 'disturbing', + 'disturbingly', + 'disubstituted', + 'disulfides', + 'disulfiram', + 'disulfirams', + 'disulfoton', + 'disulfotons', + 'disunionist', + 'disunionists', + 'disunities', + 'disuniting', + 'disutilities', + 'disutility', + 'disvaluing', + 'disyllabic', + 'disyllable', + 'disyllables', + 'ditchdigger', + 'ditchdiggers', + 'dithiocarbamate', + 'dithiocarbamates', + 'dithyrambic', + 'dithyrambically', + 'dithyrambs', + 'ditransitive', + 'ditransitives', + 'diuretically', + 'divagating', + 'divagation', + 'divagations', + 'divaricate', + 'divaricated', + 'divaricates', + 'divaricating', + 'divarication', + 'divarications', + 'divebombed', + 'divebombing', + 'divergence', + 'divergences', + 'divergencies', + 'divergency', + 'divergently', + 'diverseness', + 'diversenesses', + 'diversification', + 'diversifications', + 'diversified', + 'diversifier', + 'diversifiers', + 'diversifies', + 'diversifying', + 'diversionary', + 'diversionist', + 'diversionists', + 'diversions', + 'diversities', + 'diverticula', + 'diverticular', + 'diverticulites', + 'diverticulitides', + 'diverticulitis', + 'diverticulitises', + 'diverticuloses', + 'diverticulosis', + 'diverticulosises', + 'diverticulum', + 'divertimenti', + 'divertimento', + 'divertimentos', + 'divertissement', + 'divertissements', + 'divestiture', + 'divestitures', + 'divestment', + 'divestments', + 'dividedness', + 'dividednesses', + 'dividendless', + 'divination', + 'divinations', + 'divinatory', + 'divinising', + 'divinities', + 'divinizing', + 'divisibilities', + 'divisibility', + 'divisional', + 'divisionism', + 'divisionisms', + 'divisionist', + 'divisionists', + 'divisively', + 'divisiveness', + 'divisivenesses', + 'divorcement', + 'divorcements', + 'divulgence', + 'divulgences', + 'dizzinesses', + 'dizzyingly', + 'djellabahs', + 'dobsonflies', + 'docilities', + 'dockmaster', + 'dockmasters', + 'dockworker', + 'dockworkers', + 'doctorates', + 'doctorless', + 'doctorship', + 'doctorships', + 'doctrinaire', + 'doctrinaires', + 'doctrinairism', + 'doctrinairisms', + 'doctrinally', + 'docudramas', + 'documentable', + 'documental', + 'documentalist', + 'documentalists', + 'documentarian', + 'documentarians', + 'documentaries', + 'documentarily', + 'documentarist', + 'documentarists', + 'documentary', + 'documentation', + 'documentational', + 'documentations', + 'documented', + 'documenter', + 'documenters', + 'documenting', + 'dodecagons', + 'dodecahedra', + 'dodecahedral', + 'dodecahedron', + 'dodecahedrons', + 'dodecaphonic', + 'dodecaphonically', + 'dodecaphonies', + 'dodecaphonist', + 'dodecaphonists', + 'dodecaphony', + 'dodgeballs', + 'dodginesses', + 'dogberries', + 'dogcatcher', + 'dogcatchers', + 'dogfighting', + 'doggedness', + 'doggednesses', + 'doggishness', + 'doggishnesses', + 'doggoneder', + 'doggonedest', + 'doglegging', + 'dogmatical', + 'dogmatically', + 'dogmaticalness', + 'dogmaticalnesses', + 'dogmatisms', + 'dogmatists', + 'dogmatization', + 'dogmatizations', + 'dogmatized', + 'dogmatizer', + 'dogmatizers', + 'dogmatizes', + 'dogmatizing', + 'dognappers', + 'dognapping', + 'dogsbodies', + 'dogsledded', + 'dogsledder', + 'dogsledders', + 'dogsledding', + 'dogtrotted', + 'dogtrotting', + 'dogwatches', + 'dolefuller', + 'dolefullest', + 'dolefulness', + 'dolefulnesses', + 'dolichocephalic', + 'dolichocephalies', + 'dolichocephaly', + 'dollhouses', + 'dollishness', + 'dollishnesses', + 'dolomitization', + 'dolomitizations', + 'dolomitize', + 'dolomitized', + 'dolomitizes', + 'dolomitizing', + 'dolorously', + 'dolorousness', + 'dolorousnesses', + 'dolphinfish', + 'dolphinfishes', + 'doltishness', + 'doltishnesses', + 'domestically', + 'domesticate', + 'domesticated', + 'domesticates', + 'domesticating', + 'domestication', + 'domestications', + 'domesticities', + 'domesticity', + 'domiciliary', + 'domiciliate', + 'domiciliated', + 'domiciliates', + 'domiciliating', + 'domiciliation', + 'domiciliations', + 'domiciling', + 'dominances', + 'dominantly', + 'dominating', + 'domination', + 'dominations', + 'dominative', + 'dominators', + 'dominatrices', + 'dominatrix', + 'dominatrixes', + 'domineered', + 'domineering', + 'domineeringly', + 'domineeringness', + 'domineeringnesses', + 'dominicker', + 'dominickers', + 'dominiques', + 'donenesses', + 'donkeywork', + 'donkeyworks', + 'donnickers', + 'donnishness', + 'donnishnesses', + 'donnybrook', + 'donnybrooks', + 'doodlebugs', + 'doohickeys', + 'doohickies', + 'doomsayers', + 'doomsaying', + 'doomsayings', + 'doomsdayer', + 'doomsdayers', + 'doorkeeper', + 'doorkeepers', + 'doorplates', + 'dopaminergic', + 'dopinesses', + 'doppelganger', + 'doppelgangers', + 'dormancies', + 'dormitories', + 'doronicums', + 'dorsiventral', + 'dorsiventralities', + 'dorsiventrality', + 'dorsiventrally', + 'dorsolateral', + 'dorsoventral', + 'dorsoventralities', + 'dorsoventrality', + 'dorsoventrally', + 'dosimeters', + 'dosimetric', + 'dosimetries', + 'dottinesses', + 'doubleheader', + 'doubleheaders', + 'doubleness', + 'doublenesses', + 'doublespeak', + 'doublespeaker', + 'doublespeakers', + 'doublespeaks', + 'doublethink', + 'doublethinks', + 'doubletons', + 'doubtfully', + 'doubtfulness', + 'doubtfulnesses', + 'doubtingly', + 'doubtlessly', + 'doubtlessness', + 'doubtlessnesses', + 'doughfaces', + 'doughnutlike', + 'doughtiest', + 'doughtiness', + 'doughtinesses', + 'dournesses', + 'douroucouli', + 'douroucoulis', + 'dovetailed', + 'dovetailing', + 'dovishness', + 'dovishnesses', + 'dowdinesses', + 'dowitchers', + 'downbursts', + 'downdrafts', + 'downfallen', + 'downgraded', + 'downgrades', + 'downgrading', + 'downhearted', + 'downheartedly', + 'downheartedness', + 'downheartednesses', + 'downhiller', + 'downhillers', + 'downloadable', + 'downloaded', + 'downloading', + 'downplayed', + 'downplaying', + 'downrightly', + 'downrightness', + 'downrightnesses', + 'downscaled', + 'downscales', + 'downscaling', + 'downshifted', + 'downshifting', + 'downshifts', + 'downsizing', + 'downslides', + 'downspouts', + 'downstages', + 'downstairs', + 'downstater', + 'downstaters', + 'downstates', + 'downstream', + 'downstroke', + 'downstrokes', + 'downswings', + 'downtowner', + 'downtowners', + 'downtrends', + 'downtrodden', + 'downwardly', + 'downwardness', + 'downwardnesses', + 'downwashes', + 'doxologies', + 'doxorubicin', + 'doxorubicins', + 'doxycycline', + 'doxycyclines', + 'dozinesses', + 'drabnesses', + 'draftiness', + 'draftinesses', + 'draftsmanship', + 'draftsmanships', + 'draftsperson', + 'draftspersons', + 'draggingly', + 'dragonflies', + 'dragonhead', + 'dragonheads', + 'dragooning', + 'drainpipes', + 'dramatically', + 'dramatisation', + 'dramatisations', + 'dramatised', + 'dramatises', + 'dramatising', + 'dramatists', + 'dramatizable', + 'dramatization', + 'dramatizations', + 'dramatized', + 'dramatizes', + 'dramatizing', + 'dramaturge', + 'dramaturges', + 'dramaturgic', + 'dramaturgical', + 'dramaturgically', + 'dramaturgies', + 'dramaturgs', + 'dramaturgy', + 'drapabilities', + 'drapability', + 'drapeabilities', + 'drapeability', + 'drastically', + 'draughtier', + 'draughtiest', + 'draughting', + 'draughtsman', + 'draughtsmen', + 'drawbridge', + 'drawbridges', + 'drawerfuls', + 'drawknives', + 'drawlingly', + 'drawnworks', + 'drawplates', + 'drawshaves', + 'drawstring', + 'drawstrings', + 'dreadfully', + 'dreadfulness', + 'dreadfulnesses', + 'dreadlocks', + 'dreadnought', + 'dreadnoughts', + 'dreamfully', + 'dreamfulness', + 'dreamfulnesses', + 'dreaminess', + 'dreaminesses', + 'dreamlands', + 'dreamlessly', + 'dreamlessness', + 'dreamlessnesses', + 'dreamtimes', + 'dreamworld', + 'dreamworlds', + 'dreariness', + 'drearinesses', + 'dressiness', + 'dressinesses', + 'dressmaker', + 'dressmakers', + 'dressmaking', + 'dressmakings', + 'driftingly', + 'driftwoods', + 'drillabilities', + 'drillability', + 'drillmaster', + 'drillmasters', + 'drinkabilities', + 'drinkability', + 'drinkables', + 'dripstones', + 'drivabilities', + 'drivability', + 'driveabilities', + 'driveability', + 'drivelines', + 'drivelling', + 'drivenness', + 'drivennesses', + 'driverless', + 'driveshaft', + 'driveshafts', + 'drivetrain', + 'drivetrains', + 'drizzliest', + 'drizzlingly', + 'drolleries', + 'drollnesses', + 'dromedaries', + 'droopingly', + 'dropcloths', + 'dropkicker', + 'dropkickers', + 'droplights', + 'dropperful', + 'dropperfuls', + 'droppersful', + 'drosophila', + 'drosophilas', + 'droughtier', + 'droughtiest', + 'droughtiness', + 'droughtinesses', + 'drouthiest', + 'drowsiness', + 'drowsinesses', + 'drudgeries', + 'drudgingly', + 'drugmakers', + 'drugstores', + 'druidesses', + 'drumbeater', + 'drumbeaters', + 'drumbeating', + 'drumbeatings', + 'drumfishes', + 'drumsticks', + 'drunkenness', + 'drunkennesses', + 'drupaceous', + 'dryasdusts', + 'dryopithecine', + 'dryopithecines', + 'drysalteries', + 'drysalters', + 'drysaltery', + 'dualistically', + 'dubiousness', + 'dubiousnesses', + 'dubitation', + 'dubitations', + 'duckboards', + 'duckwalked', + 'duckwalking', + 'ductilities', + 'duennaship', + 'duennaships', + 'dulcifying', + 'dulcimores', + 'dullnesses', + 'dullsville', + 'dullsvilles', + 'dumbfounded', + 'dumbfounder', + 'dumbfoundered', + 'dumbfoundering', + 'dumbfounders', + 'dumbfounding', + 'dumbfounds', + 'dumbnesses', + 'dumbstruck', + 'dumbwaiter', + 'dumbwaiters', + 'dumfounded', + 'dumfounding', + 'dumortierite', + 'dumortierites', + 'dumpinesses', + 'dunderhead', + 'dunderheaded', + 'dunderheads', + 'dundrearies', + 'dungeoning', + 'duodecillion', + 'duodecillions', + 'duodecimal', + 'duodecimals', + 'duodecimos', + 'duopolistic', + 'duopsonies', + 'duplicated', + 'duplicates', + 'duplicating', + 'duplication', + 'duplications', + 'duplicative', + 'duplicator', + 'duplicators', + 'duplicities', + 'duplicitous', + 'duplicitously', + 'durabilities', + 'durability', + 'durableness', + 'durablenesses', + 'duralumins', + 'durometers', + 'duskinesses', + 'dustcovers', + 'dustinesses', + 'dutifulness', + 'dutifulnesses', + 'duumvirate', + 'duumvirates', + 'dwarfishly', + 'dwarfishness', + 'dwarfishnesses', + 'dwarfnesses', + 'dyadically', + 'dyeabilities', + 'dyeability', + 'dynamically', + 'dynamistic', + 'dynamiters', + 'dynamiting', + 'dynamometer', + 'dynamometers', + 'dynamometric', + 'dynamometries', + 'dynamometry', + 'dynamotors', + 'dynastically', + 'dysarthria', + 'dysarthrias', + 'dyscrasias', + 'dysenteric', + 'dysenteries', + 'dysfunction', + 'dysfunctional', + 'dysfunctions', + 'dysgeneses', + 'dysgenesis', + 'dyskinesia', + 'dyskinesias', + 'dyskinetic', + 'dyslogistic', + 'dyslogistically', + 'dysmenorrhea', + 'dysmenorrheas', + 'dysmenorrheic', + 'dyspepsias', + 'dyspepsies', + 'dyspeptically', + 'dyspeptics', + 'dysphagias', + 'dysphasias', + 'dysphasics', + 'dysphemism', + 'dysphemisms', + 'dysphemistic', + 'dysphonias', + 'dysphorias', + 'dysplasias', + 'dysplastic', + 'dysprosium', + 'dysprosiums', + 'dysrhythmia', + 'dysrhythmias', + 'dysrhythmic', + 'dystrophic', + 'dystrophies', + 'eagernesses', + 'earlinesses', + 'earlywoods', + 'earmarking', + 'earnestness', + 'earnestnesses', + 'earsplitting', + 'earthbound', + 'earthenware', + 'earthenwares', + 'earthiness', + 'earthinesses', + 'earthliest', + 'earthlight', + 'earthlights', + 'earthliness', + 'earthlinesses', + 'earthlings', + 'earthmover', + 'earthmovers', + 'earthmoving', + 'earthmovings', + 'earthquake', + 'earthquakes', + 'earthrises', + 'earthshaker', + 'earthshakers', + 'earthshaking', + 'earthshakingly', + 'earthshine', + 'earthshines', + 'earthstars', + 'earthwards', + 'earthworks', + 'earthworms', + 'earwigging', + 'earwitness', + 'earwitnesses', + 'easinesses', + 'easterlies', + 'easterners', + 'easternmost', + 'easygoingness', + 'easygoingnesses', + 'eavesdropped', + 'eavesdropper', + 'eavesdroppers', + 'eavesdropping', + 'eavesdrops', + 'ebullience', + 'ebulliences', + 'ebulliencies', + 'ebulliency', + 'ebulliently', + 'ebullition', + 'ebullitions', + 'eccentrically', + 'eccentricities', + 'eccentricity', + 'eccentrics', + 'ecchymoses', + 'ecchymosis', + 'ecchymotic', + 'ecclesiastic', + 'ecclesiastical', + 'ecclesiastically', + 'ecclesiasticism', + 'ecclesiasticisms', + 'ecclesiastics', + 'ecclesiological', + 'ecclesiologies', + 'ecclesiologist', + 'ecclesiologists', + 'ecclesiology', + 'ecdysiasts', + 'echeloning', + 'echeverias', + 'echinococci', + 'echinococcoses', + 'echinococcosis', + 'echinococcus', + 'echinoderm', + 'echinodermatous', + 'echinoderms', + 'echiuroids', + 'echocardiogram', + 'echocardiograms', + 'echocardiographer', + 'echocardiographers', + 'echocardiographic', + 'echocardiographies', + 'echocardiography', + 'echolalias', + 'echolocation', + 'echolocations', + 'echoviruses', + 'eclaircissement', + 'eclaircissements', + 'eclampsias', + 'eclectically', + 'eclecticism', + 'eclecticisms', + 'eclipsises', + 'ecocatastrophe', + 'ecocatastrophes', + 'ecological', + 'ecologically', + 'ecologists', + 'econoboxes', + 'econometric', + 'econometrically', + 'econometrician', + 'econometricians', + 'econometrics', + 'econometrist', + 'econometrists', + 'economical', + 'economically', + 'economised', + 'economises', + 'economising', + 'economists', + 'economized', + 'economizer', + 'economizers', + 'economizes', + 'economizing', + 'ecophysiological', + 'ecophysiologies', + 'ecophysiology', + 'ecospecies', + 'ecospheres', + 'ecosystems', + 'ecotourism', + 'ecotourisms', + 'ecotourist', + 'ecotourists', + 'ecstatically', + 'ectodermal', + 'ectomorphic', + 'ectomorphs', + 'ectoparasite', + 'ectoparasites', + 'ectoparasitic', + 'ectopically', + 'ectoplasmic', + 'ectoplasms', + 'ectothermic', + 'ectotherms', + 'ectotrophic', + 'ecumenical', + 'ecumenicalism', + 'ecumenicalisms', + 'ecumenically', + 'ecumenicism', + 'ecumenicisms', + 'ecumenicist', + 'ecumenicists', + 'ecumenicities', + 'ecumenicity', + 'ecumenisms', + 'ecumenists', + 'eczematous', + 'edaphically', + 'edelweisses', + 'edentulous', + 'edginesses', + 'edibilities', + 'edibleness', + 'ediblenesses', + 'edification', + 'edifications', + 'editorialist', + 'editorialists', + 'editorialization', + 'editorializations', + 'editorialize', + 'editorialized', + 'editorializer', + 'editorializers', + 'editorializes', + 'editorializing', + 'editorially', + 'editorials', + 'editorship', + 'editorships', + 'editresses', + 'educabilities', + 'educability', + 'educatedness', + 'educatednesses', + 'educational', + 'educationalist', + 'educationalists', + 'educationally', + 'educationese', + 'educationeses', + 'educationist', + 'educationists', + 'educations', + 'edulcorate', + 'edulcorated', + 'edulcorates', + 'edulcorating', + 'edutainment', + 'edutainments', + 'eelgrasses', + 'eerinesses', + 'effaceable', + 'effacement', + 'effacements', + 'effectively', + 'effectiveness', + 'effectivenesses', + 'effectives', + 'effectivities', + 'effectivity', + 'effectualities', + 'effectuality', + 'effectually', + 'effectualness', + 'effectualnesses', + 'effectuate', + 'effectuated', + 'effectuates', + 'effectuating', + 'effectuation', + 'effectuations', + 'effeminacies', + 'effeminacy', + 'effeminate', + 'effeminately', + 'effeminates', + 'efferently', + 'effervesce', + 'effervesced', + 'effervescence', + 'effervescences', + 'effervescent', + 'effervescently', + 'effervesces', + 'effervescing', + 'effeteness', + 'effetenesses', + 'efficacies', + 'efficacious', + 'efficaciously', + 'efficaciousness', + 'efficaciousnesses', + 'efficacities', + 'efficacity', + 'efficiencies', + 'efficiency', + 'efficiently', + 'effloresce', + 'effloresced', + 'efflorescence', + 'efflorescences', + 'efflorescent', + 'effloresces', + 'efflorescing', + 'effluences', + 'effluviums', + 'effluxions', + 'effortfully', + 'effortfulness', + 'effortfulnesses', + 'effortless', + 'effortlessly', + 'effortlessness', + 'effortlessnesses', + 'effronteries', + 'effrontery', + 'effulgence', + 'effulgences', + 'effusively', + 'effusiveness', + 'effusivenesses', + 'egalitarian', + 'egalitarianism', + 'egalitarianisms', + 'egalitarians', + 'eggbeaters', + 'eggheadedness', + 'eggheadednesses', + 'eglantines', + 'egocentric', + 'egocentrically', + 'egocentricities', + 'egocentricity', + 'egocentrics', + 'egocentrism', + 'egocentrisms', + 'egoistical', + 'egoistically', + 'egomaniacal', + 'egomaniacally', + 'egomaniacs', + 'egotistical', + 'egotistically', + 'egregiously', + 'egregiousness', + 'egregiousnesses', + 'egressions', + 'eicosanoid', + 'eicosanoids', + 'eiderdowns', + 'eidetically', + 'eigenmodes', + 'eigenvalue', + 'eigenvalues', + 'eigenvector', + 'eigenvectors', + 'eighteenth', + 'eighteenths', + 'eightieths', + 'einsteinium', + 'einsteiniums', + 'eisteddfod', + 'eisteddfodau', + 'eisteddfodic', + 'eisteddfods', + 'ejaculated', + 'ejaculates', + 'ejaculating', + 'ejaculation', + 'ejaculations', + 'ejaculator', + 'ejaculators', + 'ejaculatory', + 'ejectments', + 'elaborated', + 'elaborately', + 'elaborateness', + 'elaboratenesses', + 'elaborates', + 'elaborating', + 'elaboration', + 'elaborations', + 'elaborative', + 'elasmobranch', + 'elasmobranchs', + 'elastically', + 'elasticities', + 'elasticity', + 'elasticized', + 'elastomeric', + 'elastomers', + 'elatedness', + 'elatednesses', + 'elaterites', + 'elbowrooms', + 'elderberries', + 'elderberry', + 'elderliness', + 'elderlinesses', + 'elderships', + 'elecampane', + 'elecampanes', + 'electabilities', + 'electability', + 'electioneer', + 'electioneered', + 'electioneerer', + 'electioneerers', + 'electioneering', + 'electioneers', + 'electively', + 'electiveness', + 'electivenesses', + 'electorally', + 'electorate', + 'electorates', + 'electresses', + 'electrical', + 'electrically', + 'electrician', + 'electricians', + 'electricities', + 'electricity', + 'electrification', + 'electrifications', + 'electrified', + 'electrifies', + 'electrifying', + 'electroacoustic', + 'electroacoustics', + 'electroanalyses', + 'electroanalysis', + 'electroanalytical', + 'electrocardiogram', + 'electrocardiograms', + 'electrocardiograph', + 'electrocardiographic', + 'electrocardiographically', + 'electrocardiographies', + 'electrocardiographs', + 'electrocardiography', + 'electrochemical', + 'electrochemically', + 'electrochemistries', + 'electrochemistry', + 'electroconvulsive', + 'electrocorticogram', + 'electrocorticograms', + 'electrocute', + 'electrocuted', + 'electrocutes', + 'electrocuting', + 'electrocution', + 'electrocutions', + 'electrodeposit', + 'electrodeposited', + 'electrodepositing', + 'electrodeposition', + 'electrodepositions', + 'electrodeposits', + 'electrodermal', + 'electrodes', + 'electrodesiccation', + 'electrodesiccations', + 'electrodialyses', + 'electrodialysis', + 'electrodialytic', + 'electrodynamic', + 'electrodynamics', + 'electrodynamometer', + 'electrodynamometers', + 'electroencephalogram', + 'electroencephalograms', + 'electroencephalograph', + 'electroencephalographer', + 'electroencephalographers', + 'electroencephalographic', + 'electroencephalographically', + 'electroencephalographies', + 'electroencephalographs', + 'electroencephalography', + 'electrofishing', + 'electrofishings', + 'electroform', + 'electroformed', + 'electroforming', + 'electroforms', + 'electrogeneses', + 'electrogenesis', + 'electrogenic', + 'electrogram', + 'electrograms', + 'electrohydraulic', + 'electroing', + 'electrojet', + 'electrojets', + 'electrokinetic', + 'electrokinetics', + 'electroless', + 'electrologies', + 'electrologist', + 'electrologists', + 'electrology', + 'electroluminescence', + 'electroluminescences', + 'electroluminescent', + 'electrolyses', + 'electrolysis', + 'electrolyte', + 'electrolytes', + 'electrolytic', + 'electrolytically', + 'electrolyze', + 'electrolyzed', + 'electrolyzes', + 'electrolyzing', + 'electromagnet', + 'electromagnetic', + 'electromagnetically', + 'electromagnetism', + 'electromagnetisms', + 'electromagnets', + 'electromechanical', + 'electromechanically', + 'electrometallurgies', + 'electrometallurgy', + 'electrometer', + 'electrometers', + 'electromyogram', + 'electromyograms', + 'electromyograph', + 'electromyographic', + 'electromyographically', + 'electromyographies', + 'electromyographs', + 'electromyography', + 'electronegative', + 'electronegativities', + 'electronegativity', + 'electronic', + 'electronically', + 'electronics', + 'electrooculogram', + 'electrooculograms', + 'electrooculographies', + 'electrooculography', + 'electroosmoses', + 'electroosmosis', + 'electroosmotic', + 'electropherogram', + 'electropherograms', + 'electrophile', + 'electrophiles', + 'electrophilic', + 'electrophilicities', + 'electrophilicity', + 'electrophorese', + 'electrophoresed', + 'electrophoreses', + 'electrophoresing', + 'electrophoresis', + 'electrophoretic', + 'electrophoretically', + 'electrophoretogram', + 'electrophoretograms', + 'electrophori', + 'electrophorus', + 'electrophotographic', + 'electrophotographies', + 'electrophotography', + 'electrophysiologic', + 'electrophysiological', + 'electrophysiologically', + 'electrophysiologies', + 'electrophysiologist', + 'electrophysiologists', + 'electrophysiology', + 'electroplate', + 'electroplated', + 'electroplates', + 'electroplating', + 'electropositive', + 'electroretinogram', + 'electroretinograms', + 'electroretinograph', + 'electroretinographic', + 'electroretinographies', + 'electroretinographs', + 'electroretinography', + 'electroscope', + 'electroscopes', + 'electroshock', + 'electroshocks', + 'electrostatic', + 'electrostatically', + 'electrostatics', + 'electrosurgeries', + 'electrosurgery', + 'electrosurgical', + 'electrotherapies', + 'electrotherapy', + 'electrothermal', + 'electrothermally', + 'electrotonic', + 'electrotonically', + 'electrotonus', + 'electrotonuses', + 'electrotype', + 'electrotyped', + 'electrotyper', + 'electrotypers', + 'electrotypes', + 'electrotyping', + 'electroweak', + 'electrowinning', + 'electrowinnings', + 'electuaries', + 'eledoisins', + 'eleemosynary', + 'elegancies', + 'elegiacally', + 'elementally', + 'elementals', + 'elementarily', + 'elementariness', + 'elementarinesses', + 'elementary', + 'elephantiases', + 'elephantiasis', + 'elephantine', + 'elevations', + 'elicitation', + 'elicitations', + 'eligibilities', + 'eligibility', + 'eliminated', + 'eliminates', + 'eliminating', + 'elimination', + 'eliminations', + 'eliminative', + 'eliminator', + 'eliminators', + 'ellipsoidal', + 'ellipsoids', + 'elliptical', + 'elliptically', + 'ellipticals', + 'ellipticities', + 'ellipticity', + 'elocutionary', + 'elocutionist', + 'elocutionists', + 'elocutions', + 'elongating', + 'elongation', + 'elongations', + 'elopements', + 'eloquences', + 'eloquently', + 'elucidated', + 'elucidates', + 'elucidating', + 'elucidation', + 'elucidations', + 'elucidative', + 'elucidator', + 'elucidators', + 'elucubrate', + 'elucubrated', + 'elucubrates', + 'elucubrating', + 'elucubration', + 'elucubrations', + 'elusiveness', + 'elusivenesses', + 'elutriated', + 'elutriates', + 'elutriating', + 'elutriation', + 'elutriations', + 'elutriator', + 'elutriators', + 'eluviating', + 'eluviation', + 'eluviations', + 'emaciating', + 'emaciation', + 'emaciations', + 'emalangeni', + 'emanations', + 'emancipate', + 'emancipated', + 'emancipates', + 'emancipating', + 'emancipation', + 'emancipationist', + 'emancipationists', + 'emancipations', + 'emancipator', + 'emancipators', + 'emarginate', + 'emargination', + 'emarginations', + 'emasculate', + 'emasculated', + 'emasculates', + 'emasculating', + 'emasculation', + 'emasculations', + 'emasculator', + 'emasculators', + 'embalmment', + 'embalmments', + 'embankment', + 'embankments', + 'embarcadero', + 'embarcaderos', + 'embargoing', + 'embarkation', + 'embarkations', + 'embarkment', + 'embarkments', + 'embarrassable', + 'embarrassed', + 'embarrassedly', + 'embarrasses', + 'embarrassing', + 'embarrassingly', + 'embarrassment', + 'embarrassments', + 'embassages', + 'embattlement', + 'embattlements', + 'embattling', + 'embayments', + 'embeddings', + 'embedments', + 'embellished', + 'embellisher', + 'embellishers', + 'embellishes', + 'embellishing', + 'embellishment', + 'embellishments', + 'embezzlement', + 'embezzlements', + 'embezzlers', + 'embezzling', + 'embittered', + 'embittering', + 'embitterment', + 'embitterments', + 'emblazoned', + 'emblazoner', + 'emblazoners', + 'emblazoning', + 'emblazonment', + 'emblazonments', + 'emblazonries', + 'emblazonry', + 'emblematic', + 'emblematical', + 'emblematically', + 'emblematize', + 'emblematized', + 'emblematizes', + 'emblematizing', + 'emblements', + 'embodiment', + 'embodiments', + 'emboldened', + 'emboldening', + 'embolectomies', + 'embolectomy', + 'embolismic', + 'embolization', + 'embolizations', + 'embonpoint', + 'embonpoints', + 'embordered', + 'embordering', + 'embosoming', + 'embossable', + 'embossment', + 'embossments', + 'embouchure', + 'embouchures', + 'embourgeoisement', + 'embourgeoisements', + 'emboweling', + 'embowelled', + 'embowelling', + 'embowering', + 'embraceable', + 'embracement', + 'embracements', + 'embraceors', + 'embraceries', + 'embracingly', + 'embrangled', + 'embranglement', + 'embranglements', + 'embrangles', + 'embrangling', + 'embrasures', + 'embrittled', + 'embrittlement', + 'embrittlements', + 'embrittles', + 'embrittling', + 'embrocation', + 'embrocations', + 'embroidered', + 'embroiderer', + 'embroiderers', + 'embroideries', + 'embroidering', + 'embroiders', + 'embroidery', + 'embroiling', + 'embroilment', + 'embroilments', + 'embrowning', + 'embryogeneses', + 'embryogenesis', + 'embryogenetic', + 'embryogenic', + 'embryogenies', + 'embryogeny', + 'embryological', + 'embryologically', + 'embryologies', + 'embryologist', + 'embryologists', + 'embryology', + 'embryonated', + 'embryonically', + 'embryophyte', + 'embryophytes', + 'emendating', + 'emendation', + 'emendations', + 'emergences', + 'emergencies', + 'emetically', + 'emigrating', + 'emigration', + 'emigrations', + 'eminencies', + 'emissaries', + 'emissivities', + 'emissivity', + 'emittances', + 'emmenagogue', + 'emmenagogues', + 'emollients', + 'emoluments', + 'emotionalism', + 'emotionalisms', + 'emotionalist', + 'emotionalistic', + 'emotionalists', + 'emotionalities', + 'emotionality', + 'emotionalize', + 'emotionalized', + 'emotionalizes', + 'emotionalizing', + 'emotionally', + 'emotionless', + 'emotionlessly', + 'emotionlessness', + 'emotionlessnesses', + 'emotivities', + 'empaneling', + 'empanelled', + 'empanelling', + 'empathetic', + 'empathetically', + 'empathically', + 'empathised', + 'empathises', + 'empathising', + 'empathized', + 'empathizes', + 'empathizing', + 'empennages', + 'emperorship', + 'emperorships', + 'emphasised', + 'emphasises', + 'emphasising', + 'emphasized', + 'emphasizes', + 'emphasizing', + 'emphatically', + 'emphysemas', + 'emphysematous', + 'emphysemic', + 'empirically', + 'empiricism', + 'empiricisms', + 'empiricist', + 'empiricists', + 'emplacement', + 'emplacements', + 'employabilities', + 'employability', + 'employable', + 'employables', + 'employment', + 'employments', + 'empoisoned', + 'empoisoning', + 'empoisonment', + 'empoisonments', + 'empowering', + 'empowerment', + 'empowerments', + 'empressement', + 'empressements', + 'emptinesses', + 'empurpling', + 'emulations', + 'emulatively', + 'emulousness', + 'emulousnesses', + 'emulsifiable', + 'emulsification', + 'emulsifications', + 'emulsified', + 'emulsifier', + 'emulsifiers', + 'emulsifies', + 'emulsifying', + 'emulsoidal', + 'enactments', + 'enamelists', + 'enamelling', + 'enamelware', + 'enamelwares', + 'enamoration', + 'enamorations', + 'enamouring', + 'enantiomer', + 'enantiomeric', + 'enantiomers', + 'enantiomorph', + 'enantiomorphic', + 'enantiomorphism', + 'enantiomorphisms', + 'enantiomorphous', + 'enantiomorphs', + 'encampment', + 'encampments', + 'encapsulate', + 'encapsulated', + 'encapsulates', + 'encapsulating', + 'encapsulation', + 'encapsulations', + 'encapsuled', + 'encapsules', + 'encapsuling', + 'encasement', + 'encasements', + 'encashable', + 'encashment', + 'encashments', + 'encaustics', + 'encephalitic', + 'encephalitides', + 'encephalitis', + 'encephalitogen', + 'encephalitogenic', + 'encephalitogens', + 'encephalogram', + 'encephalograms', + 'encephalograph', + 'encephalographies', + 'encephalographs', + 'encephalography', + 'encephalomyelitides', + 'encephalomyelitis', + 'encephalomyocarditis', + 'encephalomyocarditises', + 'encephalon', + 'encephalopathic', + 'encephalopathies', + 'encephalopathy', + 'enchaining', + 'enchainment', + 'enchainments', + 'enchanters', + 'enchanting', + 'enchantingly', + 'enchantment', + 'enchantments', + 'enchantress', + 'enchantresses', + 'enchiladas', + 'enchiridia', + 'enchiridion', + 'enchiridions', + 'enciphered', + 'encipherer', + 'encipherers', + 'enciphering', + 'encipherment', + 'encipherments', + 'encirclement', + 'encirclements', + 'encircling', + 'enclasping', + 'enclosures', + 'encomiastic', + 'encomiasts', + 'encompassed', + 'encompasses', + 'encompassing', + 'encompassment', + 'encompassments', + 'encountered', + 'encountering', + 'encounters', + 'encouraged', + 'encouragement', + 'encouragements', + 'encourager', + 'encouragers', + 'encourages', + 'encouraging', + 'encouragingly', + 'encrimsoned', + 'encrimsoning', + 'encrimsons', + 'encroached', + 'encroacher', + 'encroachers', + 'encroaches', + 'encroaching', + 'encroachment', + 'encroachments', + 'encrustation', + 'encrustations', + 'encrusting', + 'encrypting', + 'encryption', + 'encryptions', + 'encumbered', + 'encumbering', + 'encumbrance', + 'encumbrancer', + 'encumbrancers', + 'encumbrances', + 'encyclical', + 'encyclicals', + 'encyclopaedia', + 'encyclopaedias', + 'encyclopaedic', + 'encyclopedia', + 'encyclopedias', + 'encyclopedic', + 'encyclopedically', + 'encyclopedism', + 'encyclopedisms', + 'encyclopedist', + 'encyclopedists', + 'encystment', + 'encystments', + 'endamaging', + 'endamoebae', + 'endamoebas', + 'endangered', + 'endangering', + 'endangerment', + 'endangerments', + 'endarchies', + 'endarterectomies', + 'endarterectomy', + 'endearingly', + 'endearment', + 'endearments', + 'endeavored', + 'endeavoring', + 'endeavoured', + 'endeavouring', + 'endeavours', + 'endemically', + 'endemicities', + 'endemicity', + 'endergonic', + 'endlessness', + 'endlessnesses', + 'endobiotic', + 'endocardia', + 'endocardial', + 'endocarditis', + 'endocarditises', + 'endocardium', + 'endochondral', + 'endocrines', + 'endocrinologic', + 'endocrinological', + 'endocrinologies', + 'endocrinologist', + 'endocrinologists', + 'endocrinology', + 'endocytoses', + 'endocytosis', + 'endocytosises', + 'endocytotic', + 'endodermal', + 'endodermis', + 'endodermises', + 'endodontic', + 'endodontically', + 'endodontics', + 'endodontist', + 'endodontists', + 'endoenzyme', + 'endoenzymes', + 'endogamies', + 'endogamous', + 'endogenies', + 'endogenous', + 'endogenously', + 'endolithic', + 'endolymphatic', + 'endolymphs', + 'endometria', + 'endometrial', + 'endometrioses', + 'endometriosis', + 'endometriosises', + 'endometrites', + 'endometritides', + 'endometritis', + 'endometritises', + 'endometrium', + 'endomitoses', + 'endomitosis', + 'endomitotic', + 'endomixises', + 'endomorphic', + 'endomorphies', + 'endomorphism', + 'endomorphisms', + 'endomorphs', + 'endomorphy', + 'endonuclease', + 'endonucleases', + 'endonucleolytic', + 'endoparasite', + 'endoparasites', + 'endoparasitic', + 'endoparasitism', + 'endoparasitisms', + 'endopeptidase', + 'endopeptidases', + 'endoperoxide', + 'endoperoxides', + 'endophytes', + 'endophytic', + 'endoplasmic', + 'endoplasms', + 'endopodite', + 'endopodites', + 'endopolyploid', + 'endopolyploidies', + 'endopolyploidy', + 'endorphins', + 'endorsable', + 'endorsement', + 'endorsements', + 'endoscopes', + 'endoscopic', + 'endoscopically', + 'endoscopies', + 'endoskeletal', + 'endoskeleton', + 'endoskeletons', + 'endosmoses', + 'endosperms', + 'endospores', + 'endosteally', + 'endostyles', + 'endosulfan', + 'endosulfans', + 'endosymbiont', + 'endosymbionts', + 'endosymbioses', + 'endosymbiosis', + 'endosymbiotic', + 'endothecia', + 'endothecium', + 'endothelia', + 'endothelial', + 'endothelioma', + 'endotheliomas', + 'endotheliomata', + 'endothelium', + 'endothermic', + 'endothermies', + 'endotherms', + 'endothermy', + 'endotoxins', + 'endotracheal', + 'endotrophic', + 'endowments', + 'endurances', + 'enduringly', + 'enduringness', + 'enduringnesses', + 'energetically', + 'energetics', + 'energising', + 'energization', + 'energizations', + 'energizers', + 'energizing', + 'enervating', + 'enervation', + 'enervations', + 'enfeeblement', + 'enfeeblements', + 'enfeebling', + 'enfeoffing', + 'enfeoffment', + 'enfeoffments', + 'enfettered', + 'enfettering', + 'enfevering', + 'enfilading', + 'enfleurage', + 'enfleurages', + 'enforceabilities', + 'enforceability', + 'enforceable', + 'enforcement', + 'enforcements', + 'enframement', + 'enframements', + 'enfranchise', + 'enfranchised', + 'enfranchisement', + 'enfranchisements', + 'enfranchises', + 'enfranchising', + 'engagement', + 'engagements', + 'engagingly', + 'engarlanded', + 'engarlanding', + 'engarlands', + 'engendered', + 'engendering', + 'engineered', + 'engineering', + 'engineerings', + 'engineries', + 'engirdling', + 'englishing', + 'englutting', + 'engorgement', + 'engorgements', + 'engrafting', + 'engraftment', + 'engraftments', + 'engrailing', + 'engraining', + 'engravings', + 'engrossers', + 'engrossing', + 'engrossingly', + 'engrossment', + 'engrossments', + 'engulfment', + 'engulfments', + 'enhancement', + 'enhancements', + 'enharmonic', + 'enharmonically', + 'enigmatical', + 'enigmatically', + 'enjambement', + 'enjambements', + 'enjambment', + 'enjambments', + 'enjoyableness', + 'enjoyablenesses', + 'enjoyments', + 'enkephalin', + 'enkephalins', + 'enkindling', + 'enlacement', + 'enlacements', + 'enlargeable', + 'enlargement', + 'enlargements', + 'enlightened', + 'enlightening', + 'enlightenment', + 'enlightenments', + 'enlightens', + 'enlistment', + 'enlistments', + 'enlivening', + 'enmeshment', + 'enmeshments', + 'ennoblement', + 'ennoblements', + 'enokidakes', + 'enological', + 'enologists', + 'enormities', + 'enormously', + 'enormousness', + 'enormousnesses', + 'enraptured', + 'enraptures', + 'enrapturing', + 'enravished', + 'enravishes', + 'enravishing', + 'enregister', + 'enregistered', + 'enregistering', + 'enregisters', + 'enrichment', + 'enrichments', + 'enrollment', + 'enrollments', + 'ensanguine', + 'ensanguined', + 'ensanguines', + 'ensanguining', + 'ensconcing', + 'enscrolled', + 'enscrolling', + 'enserfment', + 'enserfments', + 'ensheathed', + 'ensheathes', + 'ensheathing', + 'enshrinees', + 'enshrinement', + 'enshrinements', + 'enshrining', + 'enshrouded', + 'enshrouding', + 'ensigncies', + 'ensilaging', + 'enslavement', + 'enslavements', + 'ensnarling', + 'ensorceled', + 'ensorceling', + 'ensorcelled', + 'ensorcelling', + 'ensorcellment', + 'ensorcellments', + 'ensorcells', + 'ensphering', + 'enswathing', + 'entablature', + 'entablatures', + 'entailment', + 'entailments', + 'entamoebae', + 'entamoebas', + 'entanglement', + 'entanglements', + 'entanglers', + 'entangling', + 'entelechies', + 'entelluses', + 'enteritides', + 'enteritises', + 'enterobacteria', + 'enterobacterial', + 'enterobacterium', + 'enterobiases', + 'enterobiasis', + 'enterochromaffin', + 'enterococcal', + 'enterococci', + 'enterococcus', + 'enterocoel', + 'enterocoele', + 'enterocoeles', + 'enterocoelic', + 'enterocoelous', + 'enterocoels', + 'enterocolitis', + 'enterocolitises', + 'enterogastrone', + 'enterogastrones', + 'enterokinase', + 'enterokinases', + 'enteropathies', + 'enteropathogenic', + 'enteropathy', + 'enterostomal', + 'enterostomies', + 'enterostomy', + 'enterotoxin', + 'enterotoxins', + 'enteroviral', + 'enterovirus', + 'enteroviruses', + 'enterprise', + 'enterpriser', + 'enterprisers', + 'enterprises', + 'enterprising', + 'entertained', + 'entertainer', + 'entertainers', + 'entertaining', + 'entertainingly', + 'entertainment', + 'entertainments', + 'entertains', + 'enthalpies', + 'enthralled', + 'enthralling', + 'enthrallment', + 'enthrallments', + 'enthronement', + 'enthronements', + 'enthroning', + 'enthusiasm', + 'enthusiasms', + 'enthusiast', + 'enthusiastic', + 'enthusiastically', + 'enthusiasts', + 'enthymemes', + 'enticement', + 'enticements', + 'enticingly', + 'entireness', + 'entirenesses', + 'entireties', + 'entitlement', + 'entitlements', + 'entodermal', + 'entodermic', + 'entombment', + 'entombments', + 'entomofauna', + 'entomofaunae', + 'entomofaunas', + 'entomological', + 'entomologically', + 'entomologies', + 'entomologist', + 'entomologists', + 'entomology', + 'entomophagous', + 'entomophilies', + 'entomophilous', + 'entomophily', + 'entoprocts', + 'entourages', + 'entrainers', + 'entraining', + 'entrainment', + 'entrainments', + 'entrancement', + 'entrancements', + 'entranceway', + 'entranceways', + 'entrancing', + 'entrapment', + 'entrapments', + 'entrapping', + 'entreaties', + 'entreating', + 'entreatingly', + 'entreatment', + 'entreatments', + 'entrechats', + 'entrecotes', + 'entrenched', + 'entrenches', + 'entrenching', + 'entrenchment', + 'entrenchments', + 'entrepreneur', + 'entrepreneurial', + 'entrepreneurialism', + 'entrepreneurialisms', + 'entrepreneurially', + 'entrepreneurs', + 'entrepreneurship', + 'entrepreneurships', + 'entropically', + 'entropions', + 'entrusting', + 'entrustment', + 'entrustments', + 'entwisting', + 'enucleated', + 'enucleates', + 'enucleating', + 'enucleation', + 'enucleations', + 'enumerabilities', + 'enumerability', + 'enumerable', + 'enumerated', + 'enumerates', + 'enumerating', + 'enumeration', + 'enumerations', + 'enumerative', + 'enumerator', + 'enumerators', + 'enunciable', + 'enunciated', + 'enunciates', + 'enunciating', + 'enunciation', + 'enunciations', + 'enunciator', + 'enunciators', + 'enuresises', + 'enveloping', + 'envelopment', + 'envelopments', + 'envenoming', + 'envenomization', + 'envenomizations', + 'enviableness', + 'enviablenesses', + 'enviousness', + 'enviousnesses', + 'environing', + 'environment', + 'environmental', + 'environmentalism', + 'environmentalisms', + 'environmentalist', + 'environmentalists', + 'environmentally', + 'environments', + 'envisaging', + 'envisioned', + 'envisioning', + 'enwheeling', + 'enwrapping', + 'enwreathed', + 'enwreathes', + 'enwreathing', + 'enzymatically', + 'enzymically', + 'enzymologies', + 'enzymologist', + 'enzymologists', + 'enzymology', + 'eohippuses', + 'eosinophil', + 'eosinophilia', + 'eosinophilias', + 'eosinophilic', + 'eosinophils', + 'epauletted', + 'epaulettes', + 'epeirogenic', + 'epeirogenically', + 'epeirogenies', + 'epeirogeny', + 'epentheses', + 'epenthesis', + 'epenthetic', + 'epexegeses', + 'epexegesis', + 'epexegetic', + 'epexegetical', + 'epexegetically', + 'ephedrines', + 'ephemeralities', + 'ephemerality', + 'ephemerally', + 'ephemerals', + 'ephemerides', + 'ephemerids', + 'epiblastic', + 'epicalyces', + 'epicalyxes', + 'epicardial', + 'epicardium', + 'epicenisms', + 'epicenters', + 'epicentral', + 'epichlorohydrin', + 'epichlorohydrins', + 'epicontinental', + 'epicureanism', + 'epicureanisms', + 'epicureans', + 'epicurisms', + 'epicuticle', + 'epicuticles', + 'epicuticular', + 'epicycloid', + 'epicycloidal', + 'epicycloids', + 'epidemical', + 'epidemically', + 'epidemicities', + 'epidemicity', + 'epidemiologic', + 'epidemiological', + 'epidemiologically', + 'epidemiologies', + 'epidemiologist', + 'epidemiologists', + 'epidemiology', + 'epidendrum', + 'epidendrums', + 'epidermises', + 'epidermoid', + 'epidiascope', + 'epidiascopes', + 'epididymal', + 'epididymides', + 'epididymis', + 'epididymites', + 'epididymitides', + 'epididymitis', + 'epididymitises', + 'epigastric', + 'epigeneses', + 'epigenesis', + 'epigenetic', + 'epigenetically', + 'epiglottal', + 'epiglottic', + 'epiglottides', + 'epiglottis', + 'epiglottises', + 'epigonisms', + 'epigrammatic', + 'epigrammatically', + 'epigrammatism', + 'epigrammatisms', + 'epigrammatist', + 'epigrammatists', + 'epigrammatize', + 'epigrammatized', + 'epigrammatizer', + 'epigrammatizers', + 'epigrammatizes', + 'epigrammatizing', + 'epigrapher', + 'epigraphers', + 'epigraphic', + 'epigraphical', + 'epigraphically', + 'epigraphies', + 'epigraphist', + 'epigraphists', + 'epilations', + 'epilepsies', + 'epileptically', + 'epileptics', + 'epileptiform', + 'epileptogenic', + 'epileptoid', + 'epilimnion', + 'epilimnions', + 'epiloguing', + 'epimerases', + 'epinasties', + 'epinephrin', + 'epinephrine', + 'epinephrines', + 'epinephrins', + 'epineurium', + 'epineuriums', + 'epipelagic', + 'epiphanies', + 'epiphanous', + 'epiphenomena', + 'epiphenomenal', + 'epiphenomenalism', + 'epiphenomenalisms', + 'epiphenomenally', + 'epiphenomenon', + 'epiphragms', + 'epiphyseal', + 'epiphysial', + 'epiphytically', + 'epiphytism', + 'epiphytisms', + 'epiphytologies', + 'epiphytology', + 'epiphytotic', + 'epiphytotics', + 'episcopacies', + 'episcopacy', + 'episcopally', + 'episcopate', + 'episcopates', + 'episiotomies', + 'episiotomy', + 'episodical', + 'episodically', + 'episomally', + 'epistasies', + 'epistemically', + 'epistemological', + 'epistemologically', + 'epistemologies', + 'epistemologist', + 'epistemologists', + 'epistemology', + 'epistolaries', + 'epistolary', + 'epistolers', + 'epistrophe', + 'epistrophes', + 'epitaphial', + 'epitaxially', + 'epithalamia', + 'epithalamic', + 'epithalamion', + 'epithalamium', + 'epithalamiums', + 'epithelial', + 'epithelialization', + 'epithelializations', + 'epithelialize', + 'epithelialized', + 'epithelializes', + 'epithelializing', + 'epithelioid', + 'epithelioma', + 'epitheliomas', + 'epitheliomata', + 'epitheliomatous', + 'epithelium', + 'epitheliums', + 'epithelization', + 'epithelizations', + 'epithelize', + 'epithelized', + 'epithelizes', + 'epithelizing', + 'epithetical', + 'epitomical', + 'epitomised', + 'epitomises', + 'epitomising', + 'epitomized', + 'epitomizes', + 'epitomizing', + 'epizootics', + 'epizooties', + 'epizootiologic', + 'epizootiological', + 'epizootiologies', + 'epizootiology', + 'epoxidation', + 'epoxidations', + 'epoxidized', + 'epoxidizes', + 'epoxidizing', + 'equabilities', + 'equability', + 'equableness', + 'equablenesses', + 'equalisers', + 'equalising', + 'equalitarian', + 'equalitarianism', + 'equalitarianisms', + 'equalitarians', + 'equalities', + 'equalization', + 'equalizations', + 'equalizers', + 'equalizing', + 'equanimities', + 'equanimity', + 'equational', + 'equationally', + 'equatorial', + 'equatorward', + 'equestrian', + 'equestrians', + 'equestrienne', + 'equestriennes', + 'equiangular', + 'equicaloric', + 'equidistant', + 'equidistantly', + 'equilateral', + 'equilibrant', + 'equilibrants', + 'equilibrate', + 'equilibrated', + 'equilibrates', + 'equilibrating', + 'equilibration', + 'equilibrations', + 'equilibrator', + 'equilibrators', + 'equilibratory', + 'equilibria', + 'equilibrist', + 'equilibristic', + 'equilibrists', + 'equilibrium', + 'equilibriums', + 'equinities', + 'equinoctial', + 'equinoctials', + 'equipments', + 'equipoised', + 'equipoises', + 'equipoising', + 'equipollence', + 'equipollences', + 'equipollent', + 'equipollently', + 'equipollents', + 'equiponderant', + 'equipotential', + 'equiprobable', + 'equisetums', + 'equitabilities', + 'equitability', + 'equitableness', + 'equitablenesses', + 'equitation', + 'equitations', + 'equivalence', + 'equivalences', + 'equivalencies', + 'equivalency', + 'equivalent', + 'equivalently', + 'equivalents', + 'equivocalities', + 'equivocality', + 'equivocally', + 'equivocalness', + 'equivocalnesses', + 'equivocate', + 'equivocated', + 'equivocates', + 'equivocating', + 'equivocation', + 'equivocations', + 'equivocator', + 'equivocators', + 'equivoques', + 'eradiating', + 'eradicable', + 'eradicated', + 'eradicates', + 'eradicating', + 'eradication', + 'eradications', + 'eradicator', + 'eradicators', + 'erasabilities', + 'erasability', + 'erectilities', + 'erectility', + 'erectnesses', + 'eremitical', + 'eremitisms', + 'ergastoplasm', + 'ergastoplasmic', + 'ergastoplasms', + 'ergodicities', + 'ergodicity', + 'ergographs', + 'ergometers', + 'ergometric', + 'ergonomically', + 'ergonomics', + 'ergonomist', + 'ergonomists', + 'ergonovine', + 'ergonovines', + 'ergosterol', + 'ergosterols', + 'ergotamine', + 'ergotamines', + 'ericaceous', + 'eriophyids', + 'eristically', + 'erodibilities', + 'erodibility', + 'erosionally', + 'erosiveness', + 'erosivenesses', + 'erosivities', + 'erotically', + 'eroticisms', + 'eroticists', + 'eroticization', + 'eroticizations', + 'eroticized', + 'eroticizes', + 'eroticizing', + 'erotization', + 'erotizations', + 'erotogenic', + 'errantries', + 'erratically', + 'erraticism', + 'erraticisms', + 'erroneously', + 'erroneousness', + 'erroneousnesses', + 'eructating', + 'eructation', + 'eructations', + 'eruditions', + 'eruptively', + 'erysipelas', + 'erysipelases', + 'erythematous', + 'erythorbate', + 'erythorbates', + 'erythremia', + 'erythremias', + 'erythrismal', + 'erythrisms', + 'erythristic', + 'erythrites', + 'erythroblast', + 'erythroblastic', + 'erythroblastoses', + 'erythroblastosis', + 'erythroblasts', + 'erythrocyte', + 'erythrocytes', + 'erythrocytic', + 'erythromycin', + 'erythromycins', + 'erythropoieses', + 'erythropoiesis', + 'erythropoietic', + 'erythropoietin', + 'erythropoietins', + 'erythrosin', + 'erythrosine', + 'erythrosines', + 'erythrosins', + 'escadrille', + 'escadrilles', + 'escaladers', + 'escalading', + 'escalating', + 'escalation', + 'escalations', + 'escalators', + 'escalatory', + 'escalloped', + 'escalloping', + 'escaloping', + 'escapement', + 'escapements', + 'escapologies', + 'escapologist', + 'escapologists', + 'escapology', + 'escarpment', + 'escarpments', + 'escharotic', + 'escharotics', + 'eschatological', + 'eschatologically', + 'eschatologies', + 'eschatology', + 'escheatable', + 'escheating', + 'escritoire', + 'escritoires', + 'escutcheon', + 'escutcheons', + 'esemplastic', + 'esophageal', + 'esoterically', + 'esotericism', + 'esotericisms', + 'espadrille', + 'espadrilles', + 'espaliered', + 'espaliering', + 'especially', + 'esperances', + 'espieglerie', + 'espiegleries', + 'espionages', + 'esplanades', + 'essayistic', + 'essentialism', + 'essentialisms', + 'essentialist', + 'essentialists', + 'essentialities', + 'essentiality', + 'essentialize', + 'essentialized', + 'essentializes', + 'essentializing', + 'essentially', + 'essentialness', + 'essentialnesses', + 'essentials', + 'establishable', + 'established', + 'establisher', + 'establishers', + 'establishes', + 'establishing', + 'establishment', + 'establishmentarian', + 'establishmentarianism', + 'establishmentarianisms', + 'establishmentarians', + 'establishments', + 'estaminets', + 'esterification', + 'esterifications', + 'esterified', + 'esterifies', + 'esterifying', + 'esthesises', + 'esthetician', + 'estheticians', + 'estheticism', + 'estheticisms', + 'estimableness', + 'estimablenesses', + 'estimating', + 'estimation', + 'estimations', + 'estimative', + 'estimators', + 'estivating', + 'estivation', + 'estivations', + 'estradiols', + 'estrangement', + 'estrangements', + 'estrangers', + 'estranging', + 'estreating', + 'estrogenic', + 'estrogenically', + 'esuriences', + 'esuriently', + 'eternalize', + 'eternalized', + 'eternalizes', + 'eternalizing', + 'eternalness', + 'eternalnesses', + 'eternising', + 'eternities', + 'eternization', + 'eternizations', + 'eternizing', + 'ethambutol', + 'ethambutols', + 'ethanolamine', + 'ethanolamines', + 'etherealities', + 'ethereality', + 'etherealization', + 'etherealizations', + 'etherealize', + 'etherealized', + 'etherealizes', + 'etherealizing', + 'ethereally', + 'etherealness', + 'etherealnesses', + 'etherified', + 'etherifies', + 'etherifying', + 'etherization', + 'etherizations', + 'etherizers', + 'etherizing', + 'ethicalities', + 'ethicality', + 'ethicalness', + 'ethicalnesses', + 'ethicizing', + 'ethionamide', + 'ethionamides', + 'ethionines', + 'ethnically', + 'ethnicities', + 'ethnobotanical', + 'ethnobotanies', + 'ethnobotanist', + 'ethnobotanists', + 'ethnobotany', + 'ethnocentric', + 'ethnocentricities', + 'ethnocentricity', + 'ethnocentrism', + 'ethnocentrisms', + 'ethnographer', + 'ethnographers', + 'ethnographic', + 'ethnographical', + 'ethnographically', + 'ethnographies', + 'ethnography', + 'ethnohistorian', + 'ethnohistorians', + 'ethnohistoric', + 'ethnohistorical', + 'ethnohistories', + 'ethnohistory', + 'ethnologic', + 'ethnological', + 'ethnologies', + 'ethnologist', + 'ethnologists', + 'ethnomethodologies', + 'ethnomethodologist', + 'ethnomethodologists', + 'ethnomethodology', + 'ethnomusicological', + 'ethnomusicologies', + 'ethnomusicologist', + 'ethnomusicologists', + 'ethnomusicology', + 'ethnoscience', + 'ethnosciences', + 'ethological', + 'ethologies', + 'ethologist', + 'ethologists', + 'ethylating', + 'ethylbenzene', + 'ethylbenzenes', + 'ethylenediaminetetraacetate', + 'ethylenediaminetetraacetates', + 'etiolating', + 'etiolation', + 'etiolations', + 'etiological', + 'etiologically', + 'etiologies', + 'etiquettes', + 'etymological', + 'etymologically', + 'etymologies', + 'etymologise', + 'etymologised', + 'etymologises', + 'etymologising', + 'etymologist', + 'etymologists', + 'etymologize', + 'etymologized', + 'etymologizes', + 'etymologizing', + 'eucalyptol', + 'eucalyptole', + 'eucalyptoles', + 'eucalyptols', + 'eucalyptus', + 'eucalyptuses', + 'eucaryotes', + 'eucharises', + 'eucharistic', + 'euchromatic', + 'euchromatin', + 'euchromatins', + 'eudaemonism', + 'eudaemonisms', + 'eudaemonist', + 'eudaemonistic', + 'eudaemonists', + 'eudaimonism', + 'eudaimonisms', + 'eudiometer', + 'eudiometers', + 'eudiometric', + 'eudiometrically', + 'eugenically', + 'eugenicist', + 'eugenicists', + 'eugeosynclinal', + 'eugeosyncline', + 'eugeosynclines', + 'euglenoids', + 'euglobulin', + 'euglobulins', + 'euhemerism', + 'euhemerisms', + 'euhemerist', + 'euhemeristic', + 'euhemerists', + 'eukaryotes', + 'eukaryotic', + 'eulogising', + 'eulogistic', + 'eulogistically', + 'eulogizers', + 'eulogizing', + 'eunuchisms', + 'eunuchoids', + 'euonymuses', + 'eupatridae', + 'euphausiid', + 'euphausiids', + 'euphemised', + 'euphemises', + 'euphemising', + 'euphemisms', + 'euphemistic', + 'euphemistically', + 'euphemists', + 'euphemized', + 'euphemizer', + 'euphemizers', + 'euphemizes', + 'euphemizing', + 'euphonically', + 'euphonious', + 'euphoniously', + 'euphoniousness', + 'euphoniousnesses', + 'euphoniums', + 'euphorbias', + 'euphoriant', + 'euphoriants', + 'euphorically', + 'euphrasies', + 'euphuistic', + 'euphuistically', + 'euploidies', + 'eurhythmic', + 'eurhythmics', + 'eurhythmies', + 'eurybathic', + 'euryhaline', + 'eurypterid', + 'eurypterids', + 'eurythermal', + 'eurythermic', + 'eurythermous', + 'eurythmics', + 'eurythmies', + 'eutectoids', + 'euthanasia', + 'euthanasias', + 'euthanasic', + 'euthanatize', + 'euthanatized', + 'euthanatizes', + 'euthanatizing', + 'euthanized', + 'euthanizes', + 'euthanizing', + 'euthenists', + 'eutherians', + 'eutrophication', + 'eutrophications', + 'eutrophies', + 'evacuating', + 'evacuation', + 'evacuations', + 'evacuative', + 'evagination', + 'evaginations', + 'evaluating', + 'evaluation', + 'evaluations', + 'evaluative', + 'evaluators', + 'evanescence', + 'evanescences', + 'evanescent', + 'evanescing', + 'evangelical', + 'evangelically', + 'evangelism', + 'evangelisms', + 'evangelist', + 'evangelistic', + 'evangelistically', + 'evangelists', + 'evangelization', + 'evangelizations', + 'evangelize', + 'evangelized', + 'evangelizes', + 'evangelizing', + 'evanishing', + 'evaporated', + 'evaporates', + 'evaporating', + 'evaporation', + 'evaporations', + 'evaporative', + 'evaporator', + 'evaporators', + 'evaporites', + 'evaporitic', + 'evapotranspiration', + 'evapotranspirations', + 'evasiveness', + 'evasivenesses', + 'evenhanded', + 'evenhandedly', + 'evenhandedness', + 'evenhandednesses', + 'evennesses', + 'eventfully', + 'eventfulness', + 'eventfulnesses', + 'eventualities', + 'eventuality', + 'eventually', + 'eventuated', + 'eventuates', + 'eventuating', + 'everblooming', + 'everduring', + 'everglades', + 'evergreens', + 'everlasting', + 'everlastingly', + 'everlastingness', + 'everlastingnesses', + 'everlastings', + 'everydayness', + 'everydaynesses', + 'everyplace', + 'everything', + 'everywhere', + 'everywoman', + 'everywomen', + 'evidencing', + 'evidential', + 'evidentially', + 'evidentiary', + 'evildoings', + 'evilnesses', + 'eviscerate', + 'eviscerated', + 'eviscerates', + 'eviscerating', + 'evisceration', + 'eviscerations', + 'evocations', + 'evocatively', + 'evocativeness', + 'evocativenesses', + 'evolutionarily', + 'evolutionary', + 'evolutionism', + 'evolutionisms', + 'evolutionist', + 'evolutionists', + 'evolutions', + 'evolvement', + 'evolvements', + 'evonymuses', + 'exacerbate', + 'exacerbated', + 'exacerbates', + 'exacerbating', + 'exacerbation', + 'exacerbations', + 'exactingly', + 'exactingness', + 'exactingnesses', + 'exactitude', + 'exactitudes', + 'exactnesses', + 'exaggerate', + 'exaggerated', + 'exaggeratedly', + 'exaggeratedness', + 'exaggeratednesses', + 'exaggerates', + 'exaggerating', + 'exaggeration', + 'exaggerations', + 'exaggerative', + 'exaggerator', + 'exaggerators', + 'exaggeratory', + 'exaltation', + 'exaltations', + 'examinable', + 'examinants', + 'examination', + 'examinational', + 'examinations', + 'exanthemas', + 'exanthemata', + 'exanthematic', + 'exanthematous', + 'exarchates', + 'exasperate', + 'exasperated', + 'exasperatedly', + 'exasperates', + 'exasperating', + 'exasperatingly', + 'exasperation', + 'exasperations', + 'excavating', + 'excavation', + 'excavational', + 'excavations', + 'excavators', + 'exceedingly', + 'excellence', + 'excellences', + 'excellencies', + 'excellency', + 'excellently', + 'excelsiors', + 'exceptionabilities', + 'exceptionability', + 'exceptionable', + 'exceptionably', + 'exceptional', + 'exceptionalism', + 'exceptionalisms', + 'exceptionalities', + 'exceptionality', + 'exceptionally', + 'exceptionalness', + 'exceptionalnesses', + 'exceptions', + 'excerpters', + 'excerpting', + 'excerption', + 'excerptions', + 'excerptors', + 'excessively', + 'excessiveness', + 'excessivenesses', + 'exchangeabilities', + 'exchangeability', + 'exchangeable', + 'exchangers', + 'exchanging', + 'exchequers', + 'excipients', + 'excisional', + 'excitabilities', + 'excitability', + 'excitableness', + 'excitablenesses', + 'excitation', + 'excitations', + 'excitative', + 'excitatory', + 'excitement', + 'excitements', + 'excitingly', + 'exclaimers', + 'exclaiming', + 'exclamation', + 'exclamations', + 'exclamatory', + 'excludabilities', + 'excludability', + 'excludable', + 'excludible', + 'exclusionary', + 'exclusionist', + 'exclusionists', + 'exclusions', + 'exclusively', + 'exclusiveness', + 'exclusivenesses', + 'exclusives', + 'exclusivism', + 'exclusivisms', + 'exclusivist', + 'exclusivists', + 'exclusivities', + 'exclusivity', + 'excogitate', + 'excogitated', + 'excogitates', + 'excogitating', + 'excogitation', + 'excogitations', + 'excogitative', + 'excommunicate', + 'excommunicated', + 'excommunicates', + 'excommunicating', + 'excommunication', + 'excommunications', + 'excommunicative', + 'excommunicator', + 'excommunicators', + 'excoriated', + 'excoriates', + 'excoriating', + 'excoriation', + 'excoriations', + 'excremental', + 'excrementitious', + 'excrements', + 'excrescence', + 'excrescences', + 'excrescencies', + 'excrescency', + 'excrescent', + 'excrescently', + 'excretions', + 'excruciate', + 'excruciated', + 'excruciates', + 'excruciating', + 'excruciatingly', + 'excruciation', + 'excruciations', + 'exculpated', + 'exculpates', + 'exculpating', + 'exculpation', + 'exculpations', + 'exculpatory', + 'excursionist', + 'excursionists', + 'excursions', + 'excursively', + 'excursiveness', + 'excursivenesses', + 'excursuses', + 'excusableness', + 'excusablenesses', + 'excusatory', + 'execrableness', + 'execrablenesses', + 'execrating', + 'execration', + 'execrations', + 'execrative', + 'execrators', + 'executable', + 'executables', + 'executants', + 'executioner', + 'executioners', + 'executions', + 'executives', + 'executorial', + 'executorship', + 'executorships', + 'executrices', + 'executrixes', + 'exegetical', + 'exegetists', + 'exemplarily', + 'exemplariness', + 'exemplarinesses', + 'exemplarities', + 'exemplarity', + 'exemplification', + 'exemplifications', + 'exemplified', + 'exemplifies', + 'exemplifying', + 'exemptions', + 'exenterate', + 'exenterated', + 'exenterates', + 'exenterating', + 'exenteration', + 'exenterations', + 'exercisable', + 'exercisers', + 'exercising', + 'exercitation', + 'exercitations', + 'exfoliated', + 'exfoliates', + 'exfoliating', + 'exfoliation', + 'exfoliations', + 'exfoliative', + 'exhalation', + 'exhalations', + 'exhausters', + 'exhaustibilities', + 'exhaustibility', + 'exhaustible', + 'exhausting', + 'exhaustion', + 'exhaustions', + 'exhaustive', + 'exhaustively', + 'exhaustiveness', + 'exhaustivenesses', + 'exhaustivities', + 'exhaustivity', + 'exhaustless', + 'exhaustlessly', + 'exhaustlessness', + 'exhaustlessnesses', + 'exhibiting', + 'exhibition', + 'exhibitioner', + 'exhibitioners', + 'exhibitionism', + 'exhibitionisms', + 'exhibitionist', + 'exhibitionistic', + 'exhibitionistically', + 'exhibitionists', + 'exhibitions', + 'exhibitive', + 'exhibitors', + 'exhibitory', + 'exhilarate', + 'exhilarated', + 'exhilarates', + 'exhilarating', + 'exhilaratingly', + 'exhilaration', + 'exhilarations', + 'exhilarative', + 'exhortation', + 'exhortations', + 'exhortative', + 'exhortatory', + 'exhumation', + 'exhumations', + 'exigencies', + 'exiguities', + 'exiguously', + 'exiguousness', + 'exiguousnesses', + 'existences', + 'existential', + 'existentialism', + 'existentialisms', + 'existentialist', + 'existentialistic', + 'existentialistically', + 'existentialists', + 'existentially', + 'exobiological', + 'exobiologies', + 'exobiologist', + 'exobiologists', + 'exobiology', + 'exocytoses', + 'exocytosis', + 'exocytotic', + 'exodermises', + 'exodontias', + 'exodontist', + 'exodontists', + 'exoenzymes', + 'exoerythrocytic', + 'exogenously', + 'exonerated', + 'exonerates', + 'exonerating', + 'exoneration', + 'exonerations', + 'exonerative', + 'exonuclease', + 'exonucleases', + 'exopeptidase', + 'exopeptidases', + 'exophthalmic', + 'exophthalmos', + 'exophthalmoses', + 'exophthalmus', + 'exophthalmuses', + 'exorbitance', + 'exorbitances', + 'exorbitant', + 'exorbitantly', + 'exorcisers', + 'exorcising', + 'exorcistic', + 'exorcistical', + 'exorcizing', + 'exoskeletal', + 'exoskeleton', + 'exoskeletons', + 'exospheres', + 'exospheric', + 'exoterically', + 'exothermal', + 'exothermally', + 'exothermic', + 'exothermically', + 'exothermicities', + 'exothermicity', + 'exotically', + 'exoticisms', + 'exoticness', + 'exoticnesses', + 'expandabilities', + 'expandability', + 'expandable', + 'expansibilities', + 'expansibility', + 'expansible', + 'expansional', + 'expansionary', + 'expansionism', + 'expansionisms', + 'expansionist', + 'expansionistic', + 'expansionists', + 'expansions', + 'expansively', + 'expansiveness', + 'expansivenesses', + 'expansivities', + 'expansivity', + 'expatiated', + 'expatiates', + 'expatiating', + 'expatiation', + 'expatiations', + 'expatriate', + 'expatriated', + 'expatriates', + 'expatriating', + 'expatriation', + 'expatriations', + 'expatriatism', + 'expatriatisms', + 'expectable', + 'expectably', + 'expectance', + 'expectances', + 'expectancies', + 'expectancy', + 'expectantly', + 'expectants', + 'expectation', + 'expectational', + 'expectations', + 'expectative', + 'expectedly', + 'expectedness', + 'expectednesses', + 'expectorant', + 'expectorants', + 'expectorate', + 'expectorated', + 'expectorates', + 'expectorating', + 'expectoration', + 'expectorations', + 'expedience', + 'expediences', + 'expediencies', + 'expediency', + 'expediential', + 'expediently', + 'expedients', + 'expediters', + 'expediting', + 'expedition', + 'expeditionary', + 'expeditions', + 'expeditious', + 'expeditiously', + 'expeditiousness', + 'expeditiousnesses', + 'expeditors', + 'expellable', + 'expendabilities', + 'expendability', + 'expendable', + 'expendables', + 'expenditure', + 'expenditures', + 'expensively', + 'expensiveness', + 'expensivenesses', + 'experience', + 'experienced', + 'experiences', + 'experiencing', + 'experiential', + 'experientially', + 'experiment', + 'experimental', + 'experimentalism', + 'experimentalisms', + 'experimentalist', + 'experimentalists', + 'experimentally', + 'experimentation', + 'experimentations', + 'experimented', + 'experimenter', + 'experimenters', + 'experimenting', + 'experiments', + 'expertises', + 'expertisms', + 'expertized', + 'expertizes', + 'expertizing', + 'expertness', + 'expertnesses', + 'expiations', + 'expiration', + 'expirations', + 'expiratory', + 'explainable', + 'explainers', + 'explaining', + 'explanation', + 'explanations', + 'explanative', + 'explanatively', + 'explanatorily', + 'explanatory', + 'explantation', + 'explantations', + 'explanting', + 'expletives', + 'explicable', + 'explicably', + 'explicated', + 'explicates', + 'explicating', + 'explication', + 'explications', + 'explicative', + 'explicatively', + 'explicator', + 'explicators', + 'explicatory', + 'explicitly', + 'explicitness', + 'explicitnesses', + 'exploitable', + 'exploitation', + 'exploitations', + 'exploitative', + 'exploitatively', + 'exploiters', + 'exploiting', + 'exploitive', + 'exploration', + 'explorational', + 'explorations', + 'explorative', + 'exploratively', + 'exploratory', + 'explosions', + 'explosively', + 'explosiveness', + 'explosivenesses', + 'explosives', + 'exponential', + 'exponentially', + 'exponentials', + 'exponentiation', + 'exponentiations', + 'exportabilities', + 'exportability', + 'exportable', + 'exportation', + 'exportations', + 'expositing', + 'exposition', + 'expositional', + 'expositions', + 'expositive', + 'expositors', + 'expository', + 'expostulate', + 'expostulated', + 'expostulates', + 'expostulating', + 'expostulation', + 'expostulations', + 'expostulatory', + 'expounders', + 'expounding', + 'expressage', + 'expressages', + 'expressers', + 'expressible', + 'expressing', + 'expression', + 'expressional', + 'expressionism', + 'expressionisms', + 'expressionist', + 'expressionistic', + 'expressionistically', + 'expressionists', + 'expressionless', + 'expressionlessly', + 'expressionlessness', + 'expressionlessnesses', + 'expressions', + 'expressive', + 'expressively', + 'expressiveness', + 'expressivenesses', + 'expressivities', + 'expressivity', + 'expressman', + 'expressmen', + 'expressway', + 'expressways', + 'expropriate', + 'expropriated', + 'expropriates', + 'expropriating', + 'expropriation', + 'expropriations', + 'expropriator', + 'expropriators', + 'expulsions', + 'expunction', + 'expunctions', + 'expurgated', + 'expurgates', + 'expurgating', + 'expurgation', + 'expurgations', + 'expurgator', + 'expurgatorial', + 'expurgators', + 'expurgatory', + 'exquisitely', + 'exquisiteness', + 'exquisitenesses', + 'exquisites', + 'exsanguinate', + 'exsanguinated', + 'exsanguinates', + 'exsanguinating', + 'exsanguination', + 'exsanguinations', + 'exscinding', + 'exsertions', + 'exsiccated', + 'exsiccates', + 'exsiccating', + 'exsiccation', + 'exsiccations', + 'exsolution', + 'exsolutions', + 'extemporal', + 'extemporally', + 'extemporaneities', + 'extemporaneity', + 'extemporaneous', + 'extemporaneously', + 'extemporaneousness', + 'extemporaneousnesses', + 'extemporarily', + 'extemporary', + 'extemporisation', + 'extemporisations', + 'extemporise', + 'extemporised', + 'extemporises', + 'extemporising', + 'extemporization', + 'extemporizations', + 'extemporize', + 'extemporized', + 'extemporizer', + 'extemporizers', + 'extemporizes', + 'extemporizing', + 'extendabilities', + 'extendability', + 'extendable', + 'extendedly', + 'extendedness', + 'extendednesses', + 'extendible', + 'extensibilities', + 'extensibility', + 'extensible', + 'extensional', + 'extensionalities', + 'extensionality', + 'extensionally', + 'extensions', + 'extensities', + 'extensively', + 'extensiveness', + 'extensivenesses', + 'extensometer', + 'extensometers', + 'extenuated', + 'extenuates', + 'extenuating', + 'extenuation', + 'extenuations', + 'extenuator', + 'extenuators', + 'extenuatory', + 'exteriorise', + 'exteriorised', + 'exteriorises', + 'exteriorising', + 'exteriorities', + 'exteriority', + 'exteriorization', + 'exteriorizations', + 'exteriorize', + 'exteriorized', + 'exteriorizes', + 'exteriorizing', + 'exteriorly', + 'exterminate', + 'exterminated', + 'exterminates', + 'exterminating', + 'extermination', + 'exterminations', + 'exterminator', + 'exterminators', + 'exterminatory', + 'extermined', + 'extermines', + 'extermining', + 'externalisation', + 'externalisations', + 'externalise', + 'externalised', + 'externalises', + 'externalising', + 'externalism', + 'externalisms', + 'externalities', + 'externality', + 'externalization', + 'externalizations', + 'externalize', + 'externalized', + 'externalizes', + 'externalizing', + 'externally', + 'externship', + 'externships', + 'exteroceptive', + 'exteroceptor', + 'exteroceptors', + 'exterritorial', + 'exterritorialities', + 'exterritoriality', + 'extincting', + 'extinction', + 'extinctions', + 'extinctive', + 'extinguish', + 'extinguishable', + 'extinguished', + 'extinguisher', + 'extinguishers', + 'extinguishes', + 'extinguishing', + 'extinguishment', + 'extinguishments', + 'extirpated', + 'extirpates', + 'extirpating', + 'extirpation', + 'extirpations', + 'extirpator', + 'extirpators', + 'extolments', + 'extortionary', + 'extortionate', + 'extortionately', + 'extortioner', + 'extortioners', + 'extortionist', + 'extortionists', + 'extortions', + 'extracellular', + 'extracellularly', + 'extrachromosomal', + 'extracorporeal', + 'extracorporeally', + 'extracranial', + 'extractabilities', + 'extractability', + 'extractable', + 'extracting', + 'extraction', + 'extractions', + 'extractive', + 'extractively', + 'extractives', + 'extractors', + 'extracurricular', + 'extracurriculars', + 'extraditable', + 'extradited', + 'extradites', + 'extraditing', + 'extradition', + 'extraditions', + 'extradoses', + 'extraembryonic', + 'extragalactic', + 'extrahepatic', + 'extrajudicial', + 'extrajudicially', + 'extralegal', + 'extralegally', + 'extralimital', + 'extralinguistic', + 'extralinguistically', + 'extraliterary', + 'extralities', + 'extralogical', + 'extramarital', + 'extramundane', + 'extramural', + 'extramurally', + 'extramusical', + 'extraneous', + 'extraneously', + 'extraneousness', + 'extraneousnesses', + 'extranuclear', + 'extraordinaire', + 'extraordinarily', + 'extraordinariness', + 'extraordinarinesses', + 'extraordinary', + 'extrapolate', + 'extrapolated', + 'extrapolates', + 'extrapolating', + 'extrapolation', + 'extrapolations', + 'extrapolative', + 'extrapolator', + 'extrapolators', + 'extrapyramidal', + 'extrasensory', + 'extrasystole', + 'extrasystoles', + 'extraterrestrial', + 'extraterrestrials', + 'extraterritorial', + 'extraterritorialities', + 'extraterritoriality', + 'extratextual', + 'extrauterine', + 'extravagance', + 'extravagances', + 'extravagancies', + 'extravagancy', + 'extravagant', + 'extravagantly', + 'extravaganza', + 'extravaganzas', + 'extravagate', + 'extravagated', + 'extravagates', + 'extravagating', + 'extravasate', + 'extravasated', + 'extravasates', + 'extravasating', + 'extravasation', + 'extravasations', + 'extravascular', + 'extravehicular', + 'extraversion', + 'extraversions', + 'extraverted', + 'extraverts', + 'extremeness', + 'extremenesses', + 'extremisms', + 'extremists', + 'extremities', + 'extricable', + 'extricated', + 'extricates', + 'extricating', + 'extrication', + 'extrications', + 'extrinsically', + 'extroversion', + 'extroversions', + 'extroverted', + 'extroverts', + 'extrudabilities', + 'extrudability', + 'extrudable', + 'extrusions', + 'extubating', + 'exuberance', + 'exuberances', + 'exuberantly', + 'exuberated', + 'exuberates', + 'exuberating', + 'exudations', + 'exultances', + 'exultancies', + 'exultantly', + 'exultation', + 'exultations', + 'exultingly', + 'exurbanite', + 'exurbanites', + 'exuviating', + 'exuviation', + 'exuviations', + 'eyeballing', + 'eyebrights', + 'eyednesses', + 'eyedropper', + 'eyedroppers', + 'eyeglasses', + 'eyeletting', + 'eyepoppers', + 'eyestrains', + 'eyestrings', + 'eyewitness', + 'eyewitnesses', + 'fabricants', + 'fabricated', + 'fabricates', + 'fabricating', + 'fabrication', + 'fabrications', + 'fabricator', + 'fabricators', + 'fabulistic', + 'fabulously', + 'fabulousness', + 'fabulousnesses', + 'facecloths', + 'facelessness', + 'facelessnesses', + 'faceplates', + 'facetiously', + 'facetiousness', + 'facetiousnesses', + 'facileness', + 'facilenesses', + 'facilitate', + 'facilitated', + 'facilitates', + 'facilitating', + 'facilitation', + 'facilitations', + 'facilitative', + 'facilitator', + 'facilitators', + 'facilitatory', + 'facilities', + 'facsimiles', + 'facticities', + 'factionalism', + 'factionalisms', + 'factionally', + 'factiously', + 'factiousness', + 'factiousnesses', + 'factitious', + 'factitiously', + 'factitiousness', + 'factitiousnesses', + 'factitively', + 'factorable', + 'factorages', + 'factorials', + 'factorization', + 'factorizations', + 'factorized', + 'factorizes', + 'factorizing', + 'factorship', + 'factorships', + 'factorylike', + 'factualism', + 'factualisms', + 'factualist', + 'factualists', + 'factualities', + 'factuality', + 'factualness', + 'factualnesses', + 'facultative', + 'facultatively', + 'faddishness', + 'faddishnesses', + 'faggotings', + 'faggotries', + 'fainthearted', + 'faintheartedly', + 'faintheartedness', + 'faintheartednesses', + 'faintishness', + 'faintishnesses', + 'faintnesses', + 'fairground', + 'fairgrounds', + 'fairleader', + 'fairleaders', + 'fairnesses', + 'fairylands', + 'faithfully', + 'faithfulness', + 'faithfulnesses', + 'faithlessly', + 'faithlessness', + 'faithlessnesses', + 'falconries', + 'faldstools', + 'fallacious', + 'fallaciously', + 'fallaciousness', + 'fallaciousnesses', + 'fallaleries', + 'fallfishes', + 'fallibilities', + 'fallibility', + 'fallowness', + 'fallownesses', + 'falsehoods', + 'falsenesses', + 'falseworks', + 'falsifiabilities', + 'falsifiability', + 'falsifiable', + 'falsification', + 'falsifications', + 'falsifiers', + 'falsifying', + 'falteringly', + 'familiarise', + 'familiarised', + 'familiarises', + 'familiarising', + 'familiarities', + 'familiarity', + 'familiarization', + 'familiarizations', + 'familiarize', + 'familiarized', + 'familiarizes', + 'familiarizing', + 'familiarly', + 'familiarness', + 'familiarnesses', + 'familistic', + 'famishment', + 'famishments', + 'famousness', + 'famousnesses', + 'fanatically', + 'fanaticalness', + 'fanaticalnesses', + 'fanaticism', + 'fanaticisms', + 'fanaticize', + 'fanaticized', + 'fanaticizes', + 'fanaticizing', + 'fancifully', + 'fancifulness', + 'fancifulnesses', + 'fancifying', + 'fancinesses', + 'fancyworks', + 'fanfaronade', + 'fanfaronades', + 'fanfolding', + 'fantabulous', + 'fantasised', + 'fantasises', + 'fantasising', + 'fantasists', + 'fantasized', + 'fantasizer', + 'fantasizers', + 'fantasizes', + 'fantasizing', + 'fantastical', + 'fantasticalities', + 'fantasticality', + 'fantastically', + 'fantasticalness', + 'fantasticalnesses', + 'fantasticate', + 'fantasticated', + 'fantasticates', + 'fantasticating', + 'fantastication', + 'fantastications', + 'fantastico', + 'fantasticoes', + 'fantastics', + 'fantasying', + 'fantasyland', + 'fantasylands', + 'fantoccini', + 'faradising', + 'faradizing', + 'farandoles', + 'farcicalities', + 'farcicality', + 'farcically', + 'farewelled', + 'farewelling', + 'farfetchedness', + 'farfetchednesses', + 'farinaceous', + 'farkleberries', + 'farkleberry', + 'farmerette', + 'farmerettes', + 'farmhouses', + 'farmsteads', + 'farmworker', + 'farmworkers', + 'farraginous', + 'farrieries', + 'farsighted', + 'farsightedly', + 'farsightedness', + 'farsightednesses', + 'farthermost', + 'farthingale', + 'farthingales', + 'fasciation', + 'fasciations', + 'fascicular', + 'fascicularly', + 'fasciculate', + 'fasciculated', + 'fasciculation', + 'fasciculations', + 'fascicules', + 'fasciculus', + 'fascinated', + 'fascinates', + 'fascinating', + 'fascinatingly', + 'fascination', + 'fascinations', + 'fascinator', + 'fascinators', + 'fascioliases', + 'fascioliasis', + 'fascistically', + 'fashionabilities', + 'fashionability', + 'fashionable', + 'fashionableness', + 'fashionablenesses', + 'fashionables', + 'fashionably', + 'fashioners', + 'fashioning', + 'fashionmonger', + 'fashionmongers', + 'fastballer', + 'fastballers', + 'fastenings', + 'fastidious', + 'fastidiously', + 'fastidiousness', + 'fastidiousnesses', + 'fastigiate', + 'fastnesses', + 'fatalistic', + 'fatalistically', + 'fatalities', + 'fatefulness', + 'fatefulnesses', + 'fatheadedly', + 'fatheadedness', + 'fatheadednesses', + 'fatherhood', + 'fatherhoods', + 'fatherland', + 'fatherlands', + 'fatherless', + 'fatherlike', + 'fatherliness', + 'fatherlinesses', + 'fathomable', + 'fathomless', + 'fathomlessly', + 'fathomlessness', + 'fathomlessnesses', + 'fatigabilities', + 'fatigability', + 'fatiguingly', + 'fatshedera', + 'fatshederas', + 'fattinesses', + 'fatuousness', + 'fatuousnesses', + 'faultfinder', + 'faultfinders', + 'faultfinding', + 'faultfindings', + 'faultiness', + 'faultinesses', + 'faultlessly', + 'faultlessness', + 'faultlessnesses', + 'faunistically', + 'favorableness', + 'favorablenesses', + 'favoritism', + 'favoritisms', + 'fearfuller', + 'fearfullest', + 'fearfulness', + 'fearfulnesses', + 'fearlessly', + 'fearlessness', + 'fearlessnesses', + 'fearsomely', + 'fearsomeness', + 'fearsomenesses', + 'feasibilities', + 'feasibility', + 'featherbed', + 'featherbedded', + 'featherbedding', + 'featherbeddings', + 'featherbeds', + 'featherbrain', + 'featherbrained', + 'featherbrains', + 'featheredge', + 'featheredged', + 'featheredges', + 'featheredging', + 'featherhead', + 'featherheaded', + 'featherheads', + 'featherier', + 'featheriest', + 'feathering', + 'featherings', + 'featherless', + 'featherlight', + 'featherstitch', + 'featherstitched', + 'featherstitches', + 'featherstitching', + 'featherweight', + 'featherweights', + 'featureless', + 'featurette', + 'featurettes', + 'febrifuges', + 'fecklessly', + 'fecklessness', + 'fecklessnesses', + 'feculences', + 'fecundated', + 'fecundates', + 'fecundating', + 'fecundation', + 'fecundations', + 'fecundities', + 'federacies', + 'federalese', + 'federaleses', + 'federalism', + 'federalisms', + 'federalist', + 'federalists', + 'federalization', + 'federalizations', + 'federalize', + 'federalized', + 'federalizes', + 'federalizing', + 'federating', + 'federation', + 'federations', + 'federative', + 'federatively', + 'feebleminded', + 'feeblemindedly', + 'feeblemindedness', + 'feeblemindednesses', + 'feebleness', + 'feeblenesses', + 'feedstocks', + 'feedstuffs', + 'feelingness', + 'feelingnesses', + 'feistiness', + 'feistinesses', + 'feldspathic', + 'felicitate', + 'felicitated', + 'felicitates', + 'felicitating', + 'felicitation', + 'felicitations', + 'felicitator', + 'felicitators', + 'felicities', + 'felicitous', + 'felicitously', + 'felicitousness', + 'felicitousnesses', + 'felinities', + 'fellations', + 'fellmonger', + 'fellmongered', + 'fellmongeries', + 'fellmongering', + 'fellmongerings', + 'fellmongers', + 'fellmongery', + 'fellnesses', + 'fellowship', + 'fellowshiped', + 'fellowshiping', + 'fellowshipped', + 'fellowshipping', + 'fellowships', + 'feloniously', + 'feloniousness', + 'feloniousnesses', + 'femaleness', + 'femalenesses', + 'feminacies', + 'femininely', + 'feminineness', + 'femininenesses', + 'femininities', + 'femininity', + 'feminising', + 'feministic', + 'feminities', + 'feminization', + 'feminizations', + 'feminizing', + 'femtosecond', + 'femtoseconds', + 'fencelessness', + 'fencelessnesses', + 'fenderless', + 'fenestrate', + 'fenestrated', + 'fenestration', + 'fenestrations', + 'fenugreeks', + 'feoffments', + 'feracities', + 'feretories', + 'fermentable', + 'fermentation', + 'fermentations', + 'fermentative', + 'fermenters', + 'fermenting', + 'fermentors', + 'ferociously', + 'ferociousness', + 'ferociousnesses', + 'ferocities', + 'ferredoxin', + 'ferredoxins', + 'ferrelling', + 'ferretings', + 'ferricyanide', + 'ferricyanides', + 'ferriferous', + 'ferrimagnet', + 'ferrimagnetic', + 'ferrimagnetically', + 'ferrimagnetism', + 'ferrimagnetisms', + 'ferrimagnets', + 'ferrocenes', + 'ferroconcrete', + 'ferroconcretes', + 'ferrocyanide', + 'ferrocyanides', + 'ferroelectric', + 'ferroelectricities', + 'ferroelectricity', + 'ferroelectrics', + 'ferromagnesian', + 'ferromagnet', + 'ferromagnetic', + 'ferromagnetism', + 'ferromagnetisms', + 'ferromagnets', + 'ferromanganese', + 'ferromanganeses', + 'ferrosilicon', + 'ferrosilicons', + 'ferrotypes', + 'ferruginous', + 'ferryboats', + 'fertileness', + 'fertilenesses', + 'fertilities', + 'fertilizable', + 'fertilization', + 'fertilizations', + 'fertilized', + 'fertilizer', + 'fertilizers', + 'fertilizes', + 'fertilizing', + 'fervencies', + 'fervidness', + 'fervidnesses', + 'fescennine', + 'festinated', + 'festinately', + 'festinates', + 'festinating', + 'festivalgoer', + 'festivalgoers', + 'festiveness', + 'festivenesses', + 'festivities', + 'festooneries', + 'festoonery', + 'festooning', + 'fetchingly', + 'fetichisms', + 'fetidnesses', + 'fetishisms', + 'fetishistic', + 'fetishistically', + 'fetishists', + 'fetologies', + 'fetologist', + 'fetologists', + 'fetoprotein', + 'fetoproteins', + 'fetoscopes', + 'fetoscopies', + 'fettuccine', + 'fettuccini', + 'feudalisms', + 'feudalistic', + 'feudalists', + 'feudalities', + 'feudalization', + 'feudalizations', + 'feudalized', + 'feudalizes', + 'feudalizing', + 'feudatories', + 'feuilleton', + 'feuilletonism', + 'feuilletonisms', + 'feuilletonist', + 'feuilletonists', + 'feuilletons', + 'feverishly', + 'feverishness', + 'feverishnesses', + 'feverworts', + 'fianchetti', + 'fianchetto', + 'fianchettoed', + 'fianchettoing', + 'fianchettos', + 'fiberboard', + 'fiberboards', + 'fiberfills', + 'fiberglass', + 'fiberglassed', + 'fiberglasses', + 'fiberglassing', + 'fiberization', + 'fiberizations', + 'fiberizing', + 'fiberscope', + 'fiberscopes', + 'fibreboard', + 'fibreboards', + 'fibrefills', + 'fibreglass', + 'fibreglasses', + 'fibrillate', + 'fibrillated', + 'fibrillates', + 'fibrillating', + 'fibrillation', + 'fibrillations', + 'fibrinogen', + 'fibrinogens', + 'fibrinoids', + 'fibrinolyses', + 'fibrinolysin', + 'fibrinolysins', + 'fibrinolysis', + 'fibrinolytic', + 'fibrinopeptide', + 'fibrinopeptides', + 'fibroblast', + 'fibroblastic', + 'fibroblasts', + 'fibrocystic', + 'fibromatous', + 'fibronectin', + 'fibronectins', + 'fibrosarcoma', + 'fibrosarcomas', + 'fibrosarcomata', + 'fibrosites', + 'fibrositides', + 'fibrositis', + 'fibrositises', + 'fibrovascular', + 'fickleness', + 'ficklenesses', + 'fictionalise', + 'fictionalised', + 'fictionalises', + 'fictionalising', + 'fictionalities', + 'fictionality', + 'fictionalization', + 'fictionalizations', + 'fictionalize', + 'fictionalized', + 'fictionalizes', + 'fictionalizing', + 'fictionally', + 'fictioneer', + 'fictioneering', + 'fictioneerings', + 'fictioneers', + 'fictionist', + 'fictionists', + 'fictionization', + 'fictionizations', + 'fictionize', + 'fictionized', + 'fictionizes', + 'fictionizing', + 'fictitious', + 'fictitiously', + 'fictitiousness', + 'fictitiousnesses', + 'fictiveness', + 'fictivenesses', + 'fiddleback', + 'fiddlebacks', + 'fiddlehead', + 'fiddleheads', + 'fiddlestick', + 'fiddlesticks', + 'fidelities', + 'fidgetiness', + 'fidgetinesses', + 'fiducially', + 'fiduciaries', + 'fieldfares', + 'fieldpiece', + 'fieldpieces', + 'fieldstone', + 'fieldstones', + 'fieldstrip', + 'fieldstripped', + 'fieldstripping', + 'fieldstrips', + 'fieldstript', + 'fieldworks', + 'fiendishly', + 'fiendishness', + 'fiendishnesses', + 'fierceness', + 'fiercenesses', + 'fierinesses', + 'fifteenths', + 'figuration', + 'figurations', + 'figurative', + 'figuratively', + 'figurativeness', + 'figurativenesses', + 'figurehead', + 'figureheads', + 'filagreeing', + 'filamentary', + 'filamentous', + 'filariases', + 'filariasis', + 'filefishes', + 'filiations', + 'filibuster', + 'filibustered', + 'filibusterer', + 'filibusterers', + 'filibustering', + 'filibusters', + 'filigreeing', + 'filiopietistic', + 'filmically', + 'filminesses', + 'filmmakers', + 'filmmaking', + 'filmmakings', + 'filmographies', + 'filmography', + 'filmsetter', + 'filmsetters', + 'filmsetting', + 'filmsettings', + 'filmstrips', + 'filterabilities', + 'filterability', + 'filterable', + 'filthiness', + 'filthinesses', + 'filtrating', + 'filtration', + 'filtrations', + 'fimbriated', + 'fimbriation', + 'fimbriations', + 'finalising', + 'finalities', + 'finalization', + 'finalizations', + 'finalizing', + 'financially', + 'financiers', + 'financings', + 'finenesses', + 'fingerboard', + 'fingerboards', + 'fingerhold', + 'fingerholds', + 'fingerings', + 'fingerlike', + 'fingerling', + 'fingerlings', + 'fingernail', + 'fingernails', + 'fingerpick', + 'fingerpicked', + 'fingerpicking', + 'fingerpickings', + 'fingerpicks', + 'fingerpost', + 'fingerposts', + 'fingerprint', + 'fingerprinted', + 'fingerprinting', + 'fingerprintings', + 'fingerprints', + 'fingertips', + 'finicalness', + 'finicalnesses', + 'finickiest', + 'finickiness', + 'finickinesses', + 'finiteness', + 'finitenesses', + 'finnickier', + 'finnickiest', + 'fireballer', + 'fireballers', + 'fireballing', + 'firebombed', + 'firebombing', + 'firebrands', + 'firebreaks', + 'firebricks', + 'firecracker', + 'firecrackers', + 'firedrakes', + 'firefanged', + 'firefanging', + 'firefighter', + 'firefighters', + 'firefights', + 'fireguards', + 'firehouses', + 'firelights', + 'fireplaced', + 'fireplaces', + 'firepowers', + 'fireproofed', + 'fireproofing', + 'fireproofs', + 'firestones', + 'firestorms', + 'firethorns', + 'firewaters', + 'firmamental', + 'firmaments', + 'firmnesses', + 'firstborns', + 'firstfruits', + 'firstlings', + 'fishabilities', + 'fishability', + 'fisherfolk', + 'fisherwoman', + 'fisherwomen', + 'fishmonger', + 'fishmongers', + 'fishplates', + 'fishtailed', + 'fishtailing', + 'fissilities', + 'fissionabilities', + 'fissionability', + 'fissionable', + 'fissionables', + 'fissioning', + 'fissiparous', + 'fissiparousness', + 'fissiparousnesses', + 'fistfights', + 'fisticuffs', + 'fitfulness', + 'fitfulnesses', + 'fittingness', + 'fittingnesses', + 'fixednesses', + 'flabbergast', + 'flabbergasted', + 'flabbergasting', + 'flabbergastingly', + 'flabbergasts', + 'flabbiness', + 'flabbinesses', + 'flabellate', + 'flabelliform', + 'flaccidities', + 'flaccidity', + 'flackeries', + 'flagellant', + 'flagellantism', + 'flagellantisms', + 'flagellants', + 'flagellate', + 'flagellated', + 'flagellates', + 'flagellating', + 'flagellation', + 'flagellations', + 'flagellins', + 'flagellums', + 'flageolets', + 'flaggingly', + 'flagitious', + 'flagitiously', + 'flagitiousness', + 'flagitiousnesses', + 'flagrances', + 'flagrancies', + 'flagrantly', + 'flagstaffs', + 'flagstaves', + 'flagsticks', + 'flagstones', + 'flakinesses', + 'flamboyance', + 'flamboyances', + 'flamboyancies', + 'flamboyancy', + 'flamboyant', + 'flamboyantly', + 'flamboyants', + 'flameproof', + 'flameproofed', + 'flameproofer', + 'flameproofers', + 'flameproofing', + 'flameproofs', + 'flamethrower', + 'flamethrowers', + 'flamingoes', + 'flammabilities', + 'flammability', + 'flammables', + 'flannelette', + 'flannelettes', + 'flanneling', + 'flannelled', + 'flannelling', + 'flannelmouthed', + 'flapdoodle', + 'flapdoodles', + 'flashbacks', + 'flashboard', + 'flashboards', + 'flashbulbs', + 'flashcards', + 'flashcubes', + 'flashiness', + 'flashinesses', + 'flashlamps', + 'flashlight', + 'flashlights', + 'flashovers', + 'flashtubes', + 'flatfishes', + 'flatfooted', + 'flatfooting', + 'flatlander', + 'flatlanders', + 'flatnesses', + 'flatteners', + 'flattening', + 'flatterers', + 'flatteries', + 'flattering', + 'flatteringly', + 'flatulence', + 'flatulences', + 'flatulencies', + 'flatulency', + 'flatulently', + 'flatwashes', + 'flauntiest', + 'flauntingly', + 'flavanones', + 'flavonoids', + 'flavoprotein', + 'flavoproteins', + 'flavorfully', + 'flavorings', + 'flavorists', + 'flavorless', + 'flavorsome', + 'flavouring', + 'flawlessly', + 'flawlessness', + 'flawlessnesses', + 'fleahopper', + 'fleahoppers', + 'flechettes', + 'fledglings', + 'fleeringly', + 'fleetingly', + 'fleetingness', + 'fleetingnesses', + 'fleetnesses', + 'flemishing', + 'fleshiness', + 'fleshinesses', + 'fleshliest', + 'fleshments', + 'fletchings', + 'flexibilities', + 'flexibility', + 'flexitimes', + 'flexographic', + 'flexographically', + 'flexographies', + 'flexography', + 'flibbertigibbet', + 'flibbertigibbets', + 'flibbertigibbety', + 'flichtered', + 'flichtering', + 'flickering', + 'flickeringly', + 'flightiest', + 'flightiness', + 'flightinesses', + 'flightless', + 'flimflammed', + 'flimflammer', + 'flimflammeries', + 'flimflammers', + 'flimflammery', + 'flimflamming', + 'flimsiness', + 'flimsinesses', + 'flintiness', + 'flintinesses', + 'flintlocks', + 'flippancies', + 'flippantly', + 'flirtation', + 'flirtations', + 'flirtatious', + 'flirtatiously', + 'flirtatiousness', + 'flirtatiousnesses', + 'flittering', + 'floatation', + 'floatations', + 'floatplane', + 'floatplanes', + 'flocculant', + 'flocculants', + 'flocculate', + 'flocculated', + 'flocculates', + 'flocculating', + 'flocculation', + 'flocculations', + 'flocculator', + 'flocculators', + 'flocculent', + 'floodgates', + 'floodlight', + 'floodlighted', + 'floodlighting', + 'floodlights', + 'floodplain', + 'floodplains', + 'floodwater', + 'floodwaters', + 'floorboard', + 'floorboards', + 'floorcloth', + 'floorcloths', + 'floorwalker', + 'floorwalkers', + 'flophouses', + 'floppiness', + 'floppinesses', + 'florescence', + 'florescences', + 'florescent', + 'floriation', + 'floriations', + 'floribunda', + 'floribundas', + 'floricultural', + 'floriculture', + 'floricultures', + 'floriculturist', + 'floriculturists', + 'floridities', + 'floridness', + 'floridnesses', + 'floriferous', + 'floriferousness', + 'floriferousnesses', + 'florigenic', + 'florilegia', + 'florilegium', + 'floristically', + 'floristries', + 'flotations', + 'flounciest', + 'flouncings', + 'floundered', + 'floundering', + 'flourished', + 'flourisher', + 'flourishers', + 'flourishes', + 'flourishing', + 'flourishingly', + 'flowcharting', + 'flowchartings', + 'flowcharts', + 'flowerages', + 'flowerette', + 'flowerettes', + 'floweriest', + 'floweriness', + 'flowerinesses', + 'flowerless', + 'flowerlike', + 'flowerpots', + 'flowmeters', + 'flowstones', + 'fluctuated', + 'fluctuates', + 'fluctuating', + 'fluctuation', + 'fluctuational', + 'fluctuations', + 'fluegelhorn', + 'fluegelhorns', + 'fluffiness', + 'fluffinesses', + 'flugelhorn', + 'flugelhornist', + 'flugelhornists', + 'flugelhorns', + 'fluidextract', + 'fluidextracts', + 'fluidising', + 'fluidities', + 'fluidization', + 'fluidizations', + 'fluidizers', + 'fluidizing', + 'fluidnesses', + 'flummeries', + 'flummoxing', + 'fluoresced', + 'fluorescein', + 'fluoresceins', + 'fluorescence', + 'fluorescences', + 'fluorescent', + 'fluorescents', + 'fluorescer', + 'fluorescers', + 'fluoresces', + 'fluorescing', + 'fluoridate', + 'fluoridated', + 'fluoridates', + 'fluoridating', + 'fluoridation', + 'fluoridations', + 'fluorimeter', + 'fluorimeters', + 'fluorimetric', + 'fluorimetries', + 'fluorimetry', + 'fluorinate', + 'fluorinated', + 'fluorinates', + 'fluorinating', + 'fluorination', + 'fluorinations', + 'fluorocarbon', + 'fluorocarbons', + 'fluorochrome', + 'fluorochromes', + 'fluorographic', + 'fluorographies', + 'fluorography', + 'fluorometer', + 'fluorometers', + 'fluorometric', + 'fluorometries', + 'fluorometry', + 'fluoroscope', + 'fluoroscoped', + 'fluoroscopes', + 'fluoroscopic', + 'fluoroscopically', + 'fluoroscopies', + 'fluoroscoping', + 'fluoroscopist', + 'fluoroscopists', + 'fluoroscopy', + 'fluorouracil', + 'fluorouracils', + 'fluorspars', + 'fluphenazine', + 'fluphenazines', + 'flushnesses', + 'flusteredly', + 'flustering', + 'flutterboard', + 'flutterboards', + 'flutterers', + 'fluttering', + 'fluviatile', + 'flyblowing', + 'flybridges', + 'flycatcher', + 'flycatchers', + 'flyspecked', + 'flyspecking', + 'flyswatter', + 'flyswatters', + 'flyweights', + 'foamflower', + 'foamflowers', + 'foaminesses', + 'focalising', + 'focalization', + 'focalizations', + 'focalizing', + 'fogginesses', + 'foliaceous', + 'foliations', + 'folkishness', + 'folkishnesses', + 'folklorish', + 'folklorist', + 'folkloristic', + 'folklorists', + 'folksiness', + 'folksinesses', + 'folksinger', + 'folksingers', + 'folksinging', + 'folksingings', + 'follicular', + 'folliculites', + 'folliculitides', + 'folliculitis', + 'folliculitises', + 'followership', + 'followerships', + 'followings', + 'fomentation', + 'fomentations', + 'fondnesses', + 'fontanelle', + 'fontanelles', + 'foodlessness', + 'foodlessnesses', + 'foodstuffs', + 'foolfishes', + 'foolhardier', + 'foolhardiest', + 'foolhardily', + 'foolhardiness', + 'foolhardinesses', + 'foolishest', + 'foolishness', + 'foolishnesses', + 'footballer', + 'footballers', + 'footboards', + 'footbridge', + 'footbridges', + 'footcloths', + 'footdragger', + 'footdraggers', + 'footfaulted', + 'footfaulting', + 'footfaults', + 'footlambert', + 'footlamberts', + 'footlessly', + 'footlessness', + 'footlessnesses', + 'footlights', + 'footlocker', + 'footlockers', + 'footnoting', + 'footprints', + 'footslogged', + 'footslogger', + 'footsloggers', + 'footslogging', + 'footsoreness', + 'footsorenesses', + 'footstones', + 'footstools', + 'foppishness', + 'foppishnesses', + 'foraminifer', + 'foraminifera', + 'foraminiferal', + 'foraminiferan', + 'foraminiferans', + 'foraminifers', + 'foraminous', + 'forbearance', + 'forbearances', + 'forbearers', + 'forbearing', + 'forbiddance', + 'forbiddances', + 'forbidders', + 'forbidding', + 'forbiddingly', + 'forcefully', + 'forcefulness', + 'forcefulnesses', + 'forcemeats', + 'forcepslike', + 'forcibleness', + 'forciblenesses', + 'forearming', + 'foreboders', + 'forebodies', + 'foreboding', + 'forebodingly', + 'forebodingness', + 'forebodingnesses', + 'forebodings', + 'forebrains', + 'forecaddie', + 'forecaddies', + 'forecastable', + 'forecasted', + 'forecaster', + 'forecasters', + 'forecasting', + 'forecastle', + 'forecastles', + 'forechecked', + 'forechecker', + 'forecheckers', + 'forechecking', + 'forechecks', + 'foreclosed', + 'forecloses', + 'foreclosing', + 'foreclosure', + 'foreclosures', + 'forecourts', + 'foredating', + 'foredoomed', + 'foredooming', + 'forefather', + 'forefathers', + 'forefeeling', + 'forefended', + 'forefending', + 'forefinger', + 'forefingers', + 'forefronts', + 'foregather', + 'foregathered', + 'foregathering', + 'foregathers', + 'foreground', + 'foregrounded', + 'foregrounding', + 'foregrounds', + 'forehanded', + 'forehandedly', + 'forehandedness', + 'forehandednesses', + 'forehooves', + 'foreigners', + 'foreignism', + 'foreignisms', + 'foreignness', + 'foreignnesses', + 'forejudged', + 'forejudges', + 'forejudging', + 'foreknowing', + 'foreknowledge', + 'foreknowledges', + 'foreladies', + 'forelocked', + 'forelocking', + 'foremanship', + 'foremanships', + 'foremother', + 'foremothers', + 'forensically', + 'foreordain', + 'foreordained', + 'foreordaining', + 'foreordains', + 'foreordination', + 'foreordinations', + 'forepassed', + 'forequarter', + 'forequarters', + 'forereached', + 'forereaches', + 'forereaching', + 'forerunner', + 'forerunners', + 'forerunning', + 'foreseeabilities', + 'foreseeability', + 'foreseeable', + 'foreseeing', + 'foreshadow', + 'foreshadowed', + 'foreshadower', + 'foreshadowers', + 'foreshadowing', + 'foreshadows', + 'foreshanks', + 'foresheets', + 'foreshocks', + 'foreshores', + 'foreshorten', + 'foreshortened', + 'foreshortening', + 'foreshortens', + 'foreshowed', + 'foreshowing', + 'foresighted', + 'foresightedly', + 'foresightedness', + 'foresightednesses', + 'foresightful', + 'foresights', + 'forespeaking', + 'forespeaks', + 'forespoken', + 'forestages', + 'forestalled', + 'forestaller', + 'forestallers', + 'forestalling', + 'forestallment', + 'forestallments', + 'forestalls', + 'forestation', + 'forestations', + 'forestaysail', + 'forestaysails', + 'forestland', + 'forestlands', + 'forestries', + 'foreswearing', + 'foreswears', + 'foretasted', + 'foretastes', + 'foretasting', + 'foreteller', + 'foretellers', + 'foretelling', + 'forethought', + 'forethoughtful', + 'forethoughtfully', + 'forethoughtfulness', + 'forethoughtfulnesses', + 'forethoughts', + 'foretokened', + 'foretokening', + 'foretokens', + 'foretopman', + 'foretopmen', + 'forevermore', + 'foreverness', + 'forevernesses', + 'forewarned', + 'forewarning', + 'forfeitable', + 'forfeiters', + 'forfeiting', + 'forfeiture', + 'forfeitures', + 'forfending', + 'forgathered', + 'forgathering', + 'forgathers', + 'forgeabilities', + 'forgeability', + 'forgetfully', + 'forgetfulness', + 'forgetfulnesses', + 'forgettable', + 'forgetters', + 'forgetting', + 'forgivable', + 'forgivably', + 'forgiveness', + 'forgivenesses', + 'forgivingly', + 'forgivingness', + 'forgivingnesses', + 'forjudging', + 'forklifted', + 'forklifting', + 'forlornest', + 'forlornness', + 'forlornnesses', + 'formabilities', + 'formability', + 'formaldehyde', + 'formaldehydes', + 'formalised', + 'formalises', + 'formalising', + 'formalisms', + 'formalistic', + 'formalists', + 'formalities', + 'formalizable', + 'formalization', + 'formalizations', + 'formalized', + 'formalizer', + 'formalizers', + 'formalizes', + 'formalizing', + 'formalness', + 'formalnesses', + 'formamides', + 'formations', + 'formatively', + 'formatives', + 'formatters', + 'formatting', + 'formfitting', + 'formicaries', + 'formidabilities', + 'formidability', + 'formidable', + 'formidableness', + 'formidablenesses', + 'formidably', + 'formlessly', + 'formlessness', + 'formlessnesses', + 'formulaically', + 'formularies', + 'formularization', + 'formularizations', + 'formularize', + 'formularized', + 'formularizer', + 'formularizers', + 'formularizes', + 'formularizing', + 'formulated', + 'formulates', + 'formulating', + 'formulation', + 'formulations', + 'formulator', + 'formulators', + 'formulized', + 'formulizes', + 'formulizing', + 'fornicated', + 'fornicates', + 'fornicating', + 'fornication', + 'fornications', + 'fornicator', + 'fornicators', + 'forswearing', + 'forsythias', + 'fortalices', + 'fortepiano', + 'fortepianos', + 'forthcoming', + 'forthright', + 'forthrightly', + 'forthrightness', + 'forthrightnesses', + 'forthrights', + 'fortification', + 'fortifications', + 'fortifiers', + 'fortifying', + 'fortissimi', + 'fortissimo', + 'fortissimos', + 'fortitudes', + 'fortnightlies', + 'fortnightly', + 'fortnights', + 'fortressed', + 'fortresses', + 'fortressing', + 'fortresslike', + 'fortuities', + 'fortuitous', + 'fortuitously', + 'fortuitousness', + 'fortuitousnesses', + 'fortunately', + 'fortunateness', + 'fortunatenesses', + 'fortuneteller', + 'fortunetellers', + 'fortunetelling', + 'fortunetellings', + 'forwarders', + 'forwardest', + 'forwarding', + 'forwardness', + 'forwardnesses', + 'fossickers', + 'fossicking', + 'fossiliferous', + 'fossilised', + 'fossilises', + 'fossilising', + 'fossilization', + 'fossilizations', + 'fossilized', + 'fossilizes', + 'fossilizing', + 'fosterages', + 'fosterling', + 'fosterlings', + 'foulbroods', + 'foulmouthed', + 'foulnesses', + 'foundation', + 'foundational', + 'foundationally', + 'foundationless', + 'foundations', + 'foundering', + 'foundlings', + 'fountained', + 'fountainhead', + 'fountainheads', + 'fountaining', + 'fourdrinier', + 'fourdriniers', + 'fourplexes', + 'fourragere', + 'fourrageres', + 'foursquare', + 'fourteener', + 'fourteeners', + 'fourteenth', + 'fourteenths', + 'foxhunters', + 'foxhunting', + 'foxhuntings', + 'foxinesses', + 'foxtrotted', + 'foxtrotting', + 'fozinesses', + 'fractional', + 'fractionalization', + 'fractionalizations', + 'fractionalize', + 'fractionalized', + 'fractionalizes', + 'fractionalizing', + 'fractionally', + 'fractionate', + 'fractionated', + 'fractionates', + 'fractionating', + 'fractionation', + 'fractionations', + 'fractionator', + 'fractionators', + 'fractioned', + 'fractioning', + 'fractiously', + 'fractiousness', + 'fractiousnesses', + 'fracturing', + 'fragilities', + 'fragmental', + 'fragmentally', + 'fragmentarily', + 'fragmentariness', + 'fragmentarinesses', + 'fragmentary', + 'fragmentate', + 'fragmentated', + 'fragmentates', + 'fragmentating', + 'fragmentation', + 'fragmentations', + 'fragmented', + 'fragmenting', + 'fragmentize', + 'fragmentized', + 'fragmentizes', + 'fragmentizing', + 'fragrances', + 'fragrancies', + 'fragrantly', + 'frailnesses', + 'frambesias', + 'framboises', + 'frameshift', + 'frameshifts', + 'frameworks', + 'franchised', + 'franchisee', + 'franchisees', + 'franchiser', + 'franchisers', + 'franchises', + 'franchising', + 'franchisor', + 'franchisors', + 'francolins', + 'francophone', + 'frangibilities', + 'frangibility', + 'frangipane', + 'frangipanes', + 'frangipani', + 'frangipanis', + 'frangipanni', + 'frankfurter', + 'frankfurters', + 'frankfurts', + 'frankincense', + 'frankincenses', + 'franklinite', + 'franklinites', + 'franknesses', + 'frankpledge', + 'frankpledges', + 'frantically', + 'franticness', + 'franticnesses', + 'fraternalism', + 'fraternalisms', + 'fraternally', + 'fraternities', + 'fraternity', + 'fraternization', + 'fraternizations', + 'fraternize', + 'fraternized', + 'fraternizer', + 'fraternizers', + 'fraternizes', + 'fraternizing', + 'fratricidal', + 'fratricide', + 'fratricides', + 'fraudulence', + 'fraudulences', + 'fraudulent', + 'fraudulently', + 'fraudulentness', + 'fraudulentnesses', + 'fraughting', + 'fraxinella', + 'fraxinellas', + 'freakiness', + 'freakinesses', + 'freakishly', + 'freakishness', + 'freakishnesses', + 'freckliest', + 'freebasers', + 'freebasing', + 'freeboards', + 'freebooted', + 'freebooter', + 'freebooters', + 'freebooting', + 'freedwoman', + 'freedwomen', + 'freehanded', + 'freehandedly', + 'freehandedness', + 'freehandednesses', + 'freehearted', + 'freeheartedly', + 'freeholder', + 'freeholders', + 'freelanced', + 'freelancer', + 'freelancers', + 'freelances', + 'freelancing', + 'freeloaded', + 'freeloader', + 'freeloaders', + 'freeloading', + 'freemartin', + 'freemartins', + 'freemasonries', + 'freemasonry', + 'freenesses', + 'freestanding', + 'freestones', + 'freestyler', + 'freestylers', + 'freestyles', + 'freethinker', + 'freethinkers', + 'freethinking', + 'freethinkings', + 'freewheeled', + 'freewheeler', + 'freewheelers', + 'freewheeling', + 'freewheelingly', + 'freewheels', + 'freewriting', + 'freewritings', + 'freezingly', + 'freightage', + 'freightages', + 'freighters', + 'freighting', + 'fremituses', + 'frenchification', + 'frenchifications', + 'frenchified', + 'frenchifies', + 'frenchifying', + 'frenetically', + 'freneticism', + 'freneticisms', + 'frenziedly', + 'frequences', + 'frequencies', + 'frequentation', + 'frequentations', + 'frequentative', + 'frequentatives', + 'frequented', + 'frequenter', + 'frequenters', + 'frequentest', + 'frequenting', + 'frequently', + 'frequentness', + 'frequentnesses', + 'fresheners', + 'freshening', + 'freshnesses', + 'freshwater', + 'freshwaters', + 'fretfulness', + 'fretfulnesses', + 'friabilities', + 'friability', + 'fricandeau', + 'fricandeaus', + 'fricandeaux', + 'fricandoes', + 'fricasseed', + 'fricasseeing', + 'fricassees', + 'fricatives', + 'frictional', + 'frictionally', + 'frictionless', + 'frictionlessly', + 'friedcakes', + 'friendless', + 'friendlessness', + 'friendlessnesses', + 'friendlier', + 'friendlies', + 'friendliest', + 'friendlily', + 'friendliness', + 'friendlinesses', + 'friendship', + 'friendships', + 'friezelike', + 'frightened', + 'frightening', + 'frighteningly', + 'frightfully', + 'frightfulness', + 'frightfulnesses', + 'frigidities', + 'frigidness', + 'frigidnesses', + 'frigorific', + 'fripperies', + 'friskiness', + 'friskinesses', + 'fritillaria', + 'fritillarias', + 'fritillaries', + 'fritillary', + 'fritterers', + 'frittering', + 'frivolities', + 'frivollers', + 'frivolling', + 'frivolously', + 'frivolousness', + 'frivolousnesses', + 'frizziness', + 'frizzinesses', + 'frizzliest', + 'frogfishes', + 'froghopper', + 'froghoppers', + 'frolicking', + 'frolicsome', + 'fromenties', + 'frontalities', + 'frontality', + 'frontcourt', + 'frontcourts', + 'frontiersman', + 'frontiersmen', + 'frontispiece', + 'frontispieces', + 'frontogeneses', + 'frontogenesis', + 'frontolyses', + 'frontolysis', + 'frontrunner', + 'frontrunners', + 'frontwards', + 'frostbites', + 'frostbiting', + 'frostbitings', + 'frostbitten', + 'frostiness', + 'frostinesses', + 'frostworks', + 'frothiness', + 'frothinesses', + 'frowardness', + 'frowardnesses', + 'frowningly', + 'frowstiest', + 'frozenness', + 'frozennesses', + 'fructification', + 'fructifications', + 'fructified', + 'fructifies', + 'fructifying', + 'frugalities', + 'frugivores', + 'frugivorous', + 'fruitarian', + 'fruitarians', + 'fruitcakes', + 'fruiterers', + 'fruitfuller', + 'fruitfullest', + 'fruitfully', + 'fruitfulness', + 'fruitfulnesses', + 'fruitiness', + 'fruitinesses', + 'fruitlessly', + 'fruitlessness', + 'fruitlessnesses', + 'fruitwoods', + 'frumenties', + 'frustrated', + 'frustrates', + 'frustrating', + 'frustratingly', + 'frustration', + 'frustrations', + 'frutescent', + 'fucoxanthin', + 'fucoxanthins', + 'fugacities', + 'fugitively', + 'fugitiveness', + 'fugitivenesses', + 'fulfillers', + 'fulfilling', + 'fulfillment', + 'fulfillments', + 'fulgurated', + 'fulgurates', + 'fulgurating', + 'fulguration', + 'fulgurations', + 'fulgurites', + 'fuliginous', + 'fuliginously', + 'fullerenes', + 'fullmouthed', + 'fullnesses', + 'fulminated', + 'fulminates', + 'fulminating', + 'fulmination', + 'fulminations', + 'fulsomeness', + 'fulsomenesses', + 'fumatories', + 'fumblingly', + 'fumigating', + 'fumigation', + 'fumigations', + 'fumigators', + 'fumitories', + 'funambulism', + 'funambulisms', + 'funambulist', + 'funambulists', + 'functional', + 'functionalism', + 'functionalisms', + 'functionalist', + 'functionalistic', + 'functionalists', + 'functionalities', + 'functionality', + 'functionally', + 'functionaries', + 'functionary', + 'functioned', + 'functioning', + 'functionless', + 'fundamental', + 'fundamentalism', + 'fundamentalisms', + 'fundamentalist', + 'fundamentalistic', + 'fundamentalists', + 'fundamentally', + 'fundamentals', + 'fundaments', + 'fundraiser', + 'fundraisers', + 'fundraising', + 'fundraisings', + 'funereally', + 'fungibilities', + 'fungibility', + 'fungicidal', + 'fungicidally', + 'fungicides', + 'fungistatic', + 'funiculars', + 'funkinesses', + 'funnelform', + 'funnelling', + 'funninesses', + 'furanoside', + 'furanosides', + 'furazolidone', + 'furazolidones', + 'furbearers', + 'furbelowed', + 'furbelowing', + 'furbishers', + 'furbishing', + 'furcations', + 'furloughed', + 'furloughing', + 'furmenties', + 'furnishers', + 'furnishing', + 'furnishings', + 'furnitures', + 'furosemide', + 'furosemides', + 'furrieries', + 'furtherance', + 'furtherances', + 'furtherers', + 'furthering', + 'furthermore', + 'furthermost', + 'furtiveness', + 'furtivenesses', + 'furunculoses', + 'furunculosis', + 'fusibilities', + 'fusibility', + 'fusillades', + 'fusionists', + 'fussbudget', + 'fussbudgets', + 'fussbudgety', + 'fussinesses', + 'fustigated', + 'fustigates', + 'fustigating', + 'fustigation', + 'fustigations', + 'fustinesses', + 'fusulinids', + 'futileness', + 'futilenesses', + 'futilitarian', + 'futilitarianism', + 'futilitarianisms', + 'futilitarians', + 'futilities', + 'futureless', + 'futurelessness', + 'futurelessnesses', + 'futuristic', + 'futuristically', + 'futuristics', + 'futurities', + 'futurological', + 'futurologies', + 'futurologist', + 'futurologists', + 'futurology', + 'fuzzinesses', + 'gabardines', + 'gaberdines', + 'gadgeteers', + 'gadgetries', + 'gadolinite', + 'gadolinites', + 'gadolinium', + 'gadoliniums', + 'gadrooning', + 'gadroonings', + 'gadzookeries', + 'gadzookery', + 'gaillardia', + 'gaillardias', + 'gainfulness', + 'gainfulnesses', + 'gaingiving', + 'gaingivings', + 'gainsayers', + 'gainsaying', + 'galactorrhea', + 'galactorrheas', + 'galactosamine', + 'galactosamines', + 'galactosemia', + 'galactosemias', + 'galactosemic', + 'galactoses', + 'galactosidase', + 'galactosidases', + 'galactoside', + 'galactosides', + 'galactosyl', + 'galactosyls', + 'galantines', + 'galavanted', + 'galavanting', + 'galenicals', + 'galingales', + 'galivanted', + 'galivanting', + 'gallamines', + 'gallanting', + 'gallantries', + 'gallbladder', + 'gallbladders', + 'galleasses', + 'gallerygoer', + 'gallerygoers', + 'gallerying', + 'galleryite', + 'galleryites', + 'galliasses', + 'gallicisms', + 'gallicization', + 'gallicizations', + 'gallicized', + 'gallicizes', + 'gallicizing', + 'galligaskins', + 'gallimaufries', + 'gallimaufry', + 'gallinaceous', + 'gallinipper', + 'gallinippers', + 'gallinules', + 'gallivanted', + 'gallivanting', + 'gallivants', + 'gallonages', + 'gallopades', + 'gallowglass', + 'gallowglasses', + 'gallstones', + 'galumphing', + 'galvanically', + 'galvanised', + 'galvanises', + 'galvanising', + 'galvanisms', + 'galvanization', + 'galvanizations', + 'galvanized', + 'galvanizer', + 'galvanizers', + 'galvanizes', + 'galvanizing', + 'galvanometer', + 'galvanometers', + 'galvanometric', + 'galvanoscope', + 'galvanoscopes', + 'gambolling', + 'gamekeeper', + 'gamekeepers', + 'gamenesses', + 'gamesmanship', + 'gamesmanships', + 'gamesomely', + 'gamesomeness', + 'gamesomenesses', + 'gametangia', + 'gametangium', + 'gametically', + 'gametocyte', + 'gametocytes', + 'gametogeneses', + 'gametogenesis', + 'gametogenic', + 'gametogenous', + 'gametophore', + 'gametophores', + 'gametophyte', + 'gametophytes', + 'gametophytic', + 'gaminesses', + 'gamopetalous', + 'gangbanger', + 'gangbangers', + 'gangbuster', + 'gangbusters', + 'ganglionated', + 'ganglionic', + 'ganglioside', + 'gangliosides', + 'gangplanks', + 'gangrening', + 'gangrenous', + 'gangsterdom', + 'gangsterdoms', + 'gangsterish', + 'gangsterism', + 'gangsterisms', + 'gannisters', + 'gantelopes', + 'gantleting', + 'garbageman', + 'garbagemen', + 'gardenfuls', + 'garderobes', + 'gargantuan', + 'garibaldis', + 'garishness', + 'garishnesses', + 'garlanding', + 'garmenting', + 'garnetiferous', + 'garnierite', + 'garnierites', + 'garnisheed', + 'garnisheeing', + 'garnishees', + 'garnishing', + 'garnishment', + 'garnishments', + 'garnitures', + 'garrisoned', + 'garrisoning', + 'garrotting', + 'garrulities', + 'garrulously', + 'garrulousness', + 'garrulousnesses', + 'gasconaded', + 'gasconader', + 'gasconaders', + 'gasconades', + 'gasconading', + 'gaseousness', + 'gaseousnesses', + 'gasholders', + 'gasification', + 'gasifications', + 'gasometers', + 'gassinesses', + 'gastightness', + 'gastightnesses', + 'gastnesses', + 'gastrectomies', + 'gastrectomy', + 'gastritides', + 'gastrocnemii', + 'gastrocnemius', + 'gastroduodenal', + 'gastroenteritides', + 'gastroenteritis', + 'gastroenteritises', + 'gastroenterological', + 'gastroenterologies', + 'gastroenterologist', + 'gastroenterologists', + 'gastroenterology', + 'gastroesophageal', + 'gastrointestinal', + 'gastrolith', + 'gastroliths', + 'gastronome', + 'gastronomes', + 'gastronomic', + 'gastronomical', + 'gastronomically', + 'gastronomies', + 'gastronomist', + 'gastronomists', + 'gastronomy', + 'gastropods', + 'gastroscope', + 'gastroscopes', + 'gastroscopic', + 'gastroscopies', + 'gastroscopist', + 'gastroscopists', + 'gastroscopy', + 'gastrotrich', + 'gastrotrichs', + 'gastrovascular', + 'gastrulate', + 'gastrulated', + 'gastrulates', + 'gastrulating', + 'gastrulation', + 'gastrulations', + 'gatehouses', + 'gatekeeper', + 'gatekeepers', + 'gatekeeping', + 'gatherings', + 'gaucheness', + 'gauchenesses', + 'gaucheries', + 'gaudinesses', + 'gauffering', + 'gauntleted', + 'gauntleting', + 'gauntnesses', + 'gavelkinds', + 'gawkinesses', + 'gawkishness', + 'gawkishnesses', + 'gazehounds', + 'gazetteers', + 'geanticline', + 'geanticlines', + 'gearchange', + 'gearchanges', + 'gearshifts', + 'gearwheels', + 'gedankenexperiment', + 'gedankenexperiments', + 'gegenschein', + 'gegenscheins', + 'gelandesprung', + 'gelandesprungs', + 'gelatinization', + 'gelatinizations', + 'gelatinize', + 'gelatinized', + 'gelatinizes', + 'gelatinizing', + 'gelatinous', + 'gelatinously', + 'gelatinousness', + 'gelatinousnesses', + 'gelidities', + 'gelignites', + 'gelsemiums', + 'gemeinschaft', + 'gemeinschaften', + 'gemeinschafts', + 'geminating', + 'gemination', + 'geminations', + 'gemmations', + 'gemmologies', + 'gemmologist', + 'gemmologists', + 'gemological', + 'gemologies', + 'gemologist', + 'gemologists', + 'gemutlichkeit', + 'gemutlichkeits', + 'gendarmerie', + 'gendarmeries', + 'gendarmery', + 'genealogical', + 'genealogically', + 'genealogies', + 'genealogist', + 'genealogists', + 'generalisation', + 'generalisations', + 'generalise', + 'generalised', + 'generalises', + 'generalising', + 'generalissimo', + 'generalissimos', + 'generalist', + 'generalists', + 'generalities', + 'generality', + 'generalizabilities', + 'generalizability', + 'generalizable', + 'generalization', + 'generalizations', + 'generalize', + 'generalized', + 'generalizer', + 'generalizers', + 'generalizes', + 'generalizing', + 'generalship', + 'generalships', + 'generating', + 'generation', + 'generational', + 'generationally', + 'generations', + 'generative', + 'generators', + 'generatrices', + 'generatrix', + 'generically', + 'genericness', + 'genericnesses', + 'generosities', + 'generosity', + 'generously', + 'generousness', + 'generousnesses', + 'genetically', + 'geneticist', + 'geneticists', + 'genialities', + 'geniculate', + 'geniculated', + 'genitivally', + 'genitourinary', + 'genotypical', + 'genotypically', + 'gentamicin', + 'gentamicins', + 'genteelest', + 'genteelism', + 'genteelisms', + 'genteelness', + 'genteelnesses', + 'gentilesse', + 'gentilesses', + 'gentilities', + 'gentlefolk', + 'gentlefolks', + 'gentlemanlike', + 'gentlemanlikeness', + 'gentlemanlikenesses', + 'gentlemanliness', + 'gentlemanlinesses', + 'gentlemanly', + 'gentleness', + 'gentlenesses', + 'gentleperson', + 'gentlepersons', + 'gentlewoman', + 'gentlewomen', + 'gentrification', + 'gentrifications', + 'gentrified', + 'gentrifier', + 'gentrifiers', + 'gentrifies', + 'gentrifying', + 'genuflected', + 'genuflecting', + 'genuflection', + 'genuflections', + 'genuflects', + 'genuineness', + 'genuinenesses', + 'geobotanic', + 'geobotanical', + 'geobotanies', + 'geobotanist', + 'geobotanists', + 'geocentric', + 'geocentrically', + 'geochemical', + 'geochemically', + 'geochemist', + 'geochemistries', + 'geochemistry', + 'geochemists', + 'geochronologic', + 'geochronological', + 'geochronologically', + 'geochronologies', + 'geochronologist', + 'geochronologists', + 'geochronology', + 'geodesists', + 'geodetical', + 'geognosies', + 'geographer', + 'geographers', + 'geographic', + 'geographical', + 'geographically', + 'geographies', + 'geohydrologic', + 'geohydrologies', + 'geohydrologist', + 'geohydrologists', + 'geohydrology', + 'geological', + 'geologically', + 'geologists', + 'geologized', + 'geologizes', + 'geologizing', + 'geomagnetic', + 'geomagnetically', + 'geomagnetism', + 'geomagnetisms', + 'geomancers', + 'geomancies', + 'geometrical', + 'geometrically', + 'geometrician', + 'geometricians', + 'geometrics', + 'geometrids', + 'geometries', + 'geometrise', + 'geometrised', + 'geometrises', + 'geometrising', + 'geometrization', + 'geometrizations', + 'geometrize', + 'geometrized', + 'geometrizes', + 'geometrizing', + 'geomorphic', + 'geomorphological', + 'geomorphologies', + 'geomorphologist', + 'geomorphologists', + 'geomorphology', + 'geophagies', + 'geophysical', + 'geophysically', + 'geophysicist', + 'geophysicists', + 'geophysics', + 'geopolitical', + 'geopolitically', + 'geopolitician', + 'geopoliticians', + 'geopolitics', + 'geopressured', + 'georgettes', + 'geoscience', + 'geosciences', + 'geoscientist', + 'geoscientists', + 'geostationary', + 'geostrategic', + 'geostrategies', + 'geostrategist', + 'geostrategists', + 'geostrategy', + 'geostrophic', + 'geostrophically', + 'geosynchronous', + 'geosynclinal', + 'geosyncline', + 'geosynclines', + 'geotechnical', + 'geotectonic', + 'geotectonically', + 'geothermal', + 'geothermally', + 'geotropically', + 'geotropism', + 'geotropisms', + 'gerfalcons', + 'geriatrician', + 'geriatricians', + 'geriatrics', + 'germanders', + 'germaniums', + 'germanization', + 'germanizations', + 'germanized', + 'germanizes', + 'germanizing', + 'germicidal', + 'germicides', + 'germinabilities', + 'germinability', + 'germinally', + 'germinated', + 'germinates', + 'germinating', + 'germination', + 'germinations', + 'germinative', + 'gerontocracies', + 'gerontocracy', + 'gerontocrat', + 'gerontocratic', + 'gerontocrats', + 'gerontologic', + 'gerontological', + 'gerontologies', + 'gerontologist', + 'gerontologists', + 'gerontology', + 'gerontomorphic', + 'gerrymander', + 'gerrymandered', + 'gerrymandering', + 'gerrymanders', + 'gerundives', + 'gesellschaft', + 'gesellschaften', + 'gesellschafts', + 'gesneriads', + 'gestaltist', + 'gestaltists', + 'gestational', + 'gestations', + 'gesticulant', + 'gesticulate', + 'gesticulated', + 'gesticulates', + 'gesticulating', + 'gesticulation', + 'gesticulations', + 'gesticulative', + 'gesticulator', + 'gesticulators', + 'gesticulatory', + 'gesturally', + 'gesundheit', + 'gewurztraminer', + 'gewurztraminers', + 'geyserites', + 'ghastfully', + 'ghastliest', + 'ghastliness', + 'ghastlinesses', + 'ghettoization', + 'ghettoizations', + 'ghettoized', + 'ghettoizes', + 'ghettoizing', + 'ghostliest', + 'ghostliness', + 'ghostlinesses', + 'ghostwrite', + 'ghostwriter', + 'ghostwriters', + 'ghostwrites', + 'ghostwriting', + 'ghostwritten', + 'ghostwrote', + 'ghoulishly', + 'ghoulishness', + 'ghoulishnesses', + 'giantesses', + 'giardiases', + 'giardiasis', + 'gibberellin', + 'gibberellins', + 'gibberishes', + 'gibbetting', + 'gibbosities', + 'giddinesses', + 'giftedness', + 'giftednesses', + 'gigantesque', + 'gigantically', + 'gigantisms', + 'gigglingly', + 'gillnetted', + 'gillnetter', + 'gillnetters', + 'gillnetting', + 'gillyflower', + 'gillyflowers', + 'gimballing', + 'gimcrackeries', + 'gimcrackery', + 'gimmicking', + 'gimmickries', + 'gingellies', + 'gingerbread', + 'gingerbreaded', + 'gingerbreads', + 'gingerbready', + 'gingerliness', + 'gingerlinesses', + 'gingerroot', + 'gingerroots', + 'gingersnap', + 'gingersnaps', + 'gingivectomies', + 'gingivectomy', + 'gingivites', + 'gingivitides', + 'gingivitis', + 'gingivitises', + 'girandoles', + 'girlfriend', + 'girlfriends', + 'girlishness', + 'girlishnesses', + 'glabrescent', + 'glaciating', + 'glaciation', + 'glaciations', + 'glaciological', + 'glaciologies', + 'glaciologist', + 'glaciologists', + 'glaciology', + 'gladdening', + 'gladiatorial', + 'gladiators', + 'gladioluses', + 'gladnesses', + 'gladsomely', + 'gladsomeness', + 'gladsomenesses', + 'gladsomest', + 'gladstones', + 'glamorised', + 'glamorises', + 'glamorising', + 'glamorization', + 'glamorizations', + 'glamorized', + 'glamorizer', + 'glamorizers', + 'glamorizes', + 'glamorizing', + 'glamorously', + 'glamorousness', + 'glamorousnesses', + 'glamouring', + 'glamourize', + 'glamourized', + 'glamourizes', + 'glamourizing', + 'glamourless', + 'glamourous', + 'glancingly', + 'glandularly', + 'glaringness', + 'glaringnesses', + 'glassblower', + 'glassblowers', + 'glassblowing', + 'glassblowings', + 'glasshouse', + 'glasshouses', + 'glassiness', + 'glassinesses', + 'glassmaker', + 'glassmakers', + 'glassmaking', + 'glassmakings', + 'glasspaper', + 'glasspapered', + 'glasspapering', + 'glasspapers', + 'glasswares', + 'glassworker', + 'glassworkers', + 'glassworks', + 'glassworts', + 'glauconite', + 'glauconites', + 'glauconitic', + 'glaucousness', + 'glaucousnesses', + 'glazieries', + 'gleefulness', + 'gleefulnesses', + 'glegnesses', + 'gleization', + 'gleizations', + 'glengarries', + 'glibnesses', + 'glimmering', + 'glimmerings', + 'glioblastoma', + 'glioblastomas', + 'glioblastomata', + 'glissaders', + 'glissading', + 'glissandos', + 'glistening', + 'glistering', + 'glitterati', + 'glittering', + 'glitteringly', + 'gloatingly', + 'globalised', + 'globalises', + 'globalising', + 'globalisms', + 'globalists', + 'globalization', + 'globalizations', + 'globalized', + 'globalizes', + 'globalizing', + 'globefishes', + 'globeflower', + 'globeflowers', + 'glochidium', + 'glockenspiel', + 'glockenspiels', + 'glomerular', + 'glomerules', + 'glomerulonephritides', + 'glomerulonephritis', + 'glomerulus', + 'gloominess', + 'gloominesses', + 'glorification', + 'glorifications', + 'glorifiers', + 'glorifying', + 'gloriously', + 'gloriousness', + 'gloriousnesses', + 'glossarial', + 'glossaries', + 'glossarist', + 'glossarists', + 'glossators', + 'glossiness', + 'glossinesses', + 'glossitises', + 'glossographer', + 'glossographers', + 'glossolalia', + 'glossolalias', + 'glossolalist', + 'glossolalists', + 'glossopharyngeal', + 'glossopharyngeals', + 'glottochronological', + 'glottochronologies', + 'glottochronology', + 'glucocorticoid', + 'glucocorticoids', + 'glucokinase', + 'glucokinases', + 'gluconates', + 'gluconeogeneses', + 'gluconeogenesis', + 'glucosamine', + 'glucosamines', + 'glucosidase', + 'glucosidases', + 'glucosides', + 'glucosidic', + 'glucuronidase', + 'glucuronidases', + 'glucuronide', + 'glucuronides', + 'glumnesses', + 'glutamates', + 'glutaminase', + 'glutaminases', + 'glutamines', + 'glutaraldehyde', + 'glutaraldehydes', + 'glutathione', + 'glutathiones', + 'glutethimide', + 'glutethimides', + 'glutinously', + 'gluttonies', + 'gluttonous', + 'gluttonously', + 'gluttonousness', + 'gluttonousnesses', + 'glyceraldehyde', + 'glyceraldehydes', + 'glycerides', + 'glyceridic', + 'glycerinate', + 'glycerinated', + 'glycerinates', + 'glycerinating', + 'glycerines', + 'glycogeneses', + 'glycogenesis', + 'glycogenolyses', + 'glycogenolysis', + 'glycogenolytic', + 'glycolipid', + 'glycolipids', + 'glycolyses', + 'glycolysis', + 'glycolytic', + 'glycopeptide', + 'glycopeptides', + 'glycoprotein', + 'glycoproteins', + 'glycosaminoglycan', + 'glycosaminoglycans', + 'glycosidase', + 'glycosidases', + 'glycosides', + 'glycosidic', + 'glycosidically', + 'glycosuria', + 'glycosurias', + 'glycosylate', + 'glycosylated', + 'glycosylates', + 'glycosylating', + 'glycosylation', + 'glycosylations', + 'gnatcatcher', + 'gnatcatchers', + 'gnosticism', + 'gnosticisms', + 'gnotobiotic', + 'gnotobiotically', + 'goalkeeper', + 'goalkeepers', + 'goalmouths', + 'goaltender', + 'goaltenders', + 'goaltending', + 'goaltendings', + 'goatfishes', + 'goatsucker', + 'goatsuckers', + 'gobbledegook', + 'gobbledegooks', + 'gobbledygook', + 'gobbledygooks', + 'godchildren', + 'goddamming', + 'goddamning', + 'goddaughter', + 'goddaughters', + 'godfathered', + 'godfathering', + 'godfathers', + 'godforsaken', + 'godlessness', + 'godlessnesses', + 'godlikeness', + 'godlikenesses', + 'godlinesses', + 'godmothers', + 'godparents', + 'goitrogenic', + 'goitrogenicities', + 'goitrogenicity', + 'goitrogens', + 'goldbricked', + 'goldbricking', + 'goldbricks', + 'goldeneyes', + 'goldenness', + 'goldennesses', + 'goldenrods', + 'goldenseal', + 'goldenseals', + 'goldfields', + 'goldfinches', + 'goldfishes', + 'goldsmiths', + 'goldstones', + 'golliwoggs', + 'gonadectomies', + 'gonadectomized', + 'gonadectomy', + 'gonadotrophic', + 'gonadotrophin', + 'gonadotrophins', + 'gonadotropic', + 'gonadotropin', + 'gonadotropins', + 'gondoliers', + 'gonenesses', + 'gongoristic', + 'goniometer', + 'goniometers', + 'goniometric', + 'goniometries', + 'goniometry', + 'gonococcal', + 'gonococcus', + 'gonophores', + 'gonorrheal', + 'gonorrheas', + 'goodnesses', + 'goodwilled', + 'gooeynesses', + 'goofinesses', + 'googolplex', + 'googolplexes', + 'goosanders', + 'gooseberries', + 'gooseberry', + 'goosefishes', + 'gooseflesh', + 'goosefleshes', + 'goosefoots', + 'goosegrass', + 'goosegrasses', + 'goosenecked', + 'goosenecks', + 'gorbellies', + 'gorgeously', + 'gorgeousness', + 'gorgeousnesses', + 'gorgonians', + 'gorgonized', + 'gorgonizes', + 'gorgonizing', + 'gorinesses', + 'gormandise', + 'gormandised', + 'gormandises', + 'gormandising', + 'gormandize', + 'gormandized', + 'gormandizer', + 'gormandizers', + 'gormandizes', + 'gormandizing', + 'gospellers', + 'gossipmonger', + 'gossipmongers', + 'gossipping', + 'gossipries', + 'gothically', + 'gothicized', + 'gothicizes', + 'gothicizing', + 'gourmandise', + 'gourmandises', + 'gourmandism', + 'gourmandisms', + 'gourmandize', + 'gourmandized', + 'gourmandizes', + 'gourmandizing', + 'governable', + 'governance', + 'governances', + 'governesses', + 'governessy', + 'government', + 'governmental', + 'governmentalism', + 'governmentalisms', + 'governmentalist', + 'governmentalists', + 'governmentalize', + 'governmentalized', + 'governmentalizes', + 'governmentalizing', + 'governmentally', + 'governmentese', + 'governmenteses', + 'governments', + 'governorate', + 'governorates', + 'governorship', + 'governorships', + 'gracefuller', + 'gracefullest', + 'gracefully', + 'gracefulness', + 'gracefulnesses', + 'gracelessly', + 'gracelessness', + 'gracelessnesses', + 'gracileness', + 'gracilenesses', + 'gracilities', + 'graciously', + 'graciousness', + 'graciousnesses', + 'gradational', + 'gradationally', + 'gradations', + 'gradiometer', + 'gradiometers', + 'gradualism', + 'gradualisms', + 'gradualist', + 'gradualists', + 'gradualness', + 'gradualnesses', + 'graduating', + 'graduation', + 'graduations', + 'graduators', + 'graecizing', + 'graffitist', + 'graffitists', + 'grainfield', + 'grainfields', + 'graininess', + 'graininesses', + 'gramercies', + 'gramicidin', + 'gramicidins', + 'gramineous', + 'graminivorous', + 'grammarian', + 'grammarians', + 'grammatical', + 'grammaticalities', + 'grammaticality', + 'grammatically', + 'grammaticalness', + 'grammaticalnesses', + 'gramophone', + 'gramophones', + 'granadilla', + 'granadillas', + 'grandaddies', + 'grandaunts', + 'grandbabies', + 'grandchild', + 'grandchildren', + 'granddaddies', + 'granddaddy', + 'granddaughter', + 'granddaughters', + 'grandfather', + 'grandfathered', + 'grandfathering', + 'grandfatherly', + 'grandfathers', + 'grandiflora', + 'grandiflorae', + 'grandifloras', + 'grandiloquence', + 'grandiloquences', + 'grandiloquent', + 'grandiloquently', + 'grandiosely', + 'grandioseness', + 'grandiosenesses', + 'grandiosities', + 'grandiosity', + 'grandmaster', + 'grandmasters', + 'grandmother', + 'grandmotherly', + 'grandmothers', + 'grandnephew', + 'grandnephews', + 'grandnesses', + 'grandniece', + 'grandnieces', + 'grandparent', + 'grandparental', + 'grandparenthood', + 'grandparenthoods', + 'grandparents', + 'grandsires', + 'grandstand', + 'grandstanded', + 'grandstander', + 'grandstanders', + 'grandstanding', + 'grandstands', + 'granduncle', + 'granduncles', + 'grangerism', + 'grangerisms', + 'granitelike', + 'graniteware', + 'granitewares', + 'granivorous', + 'granodiorite', + 'granodiorites', + 'granodioritic', + 'granolithic', + 'granophyre', + 'granophyres', + 'granophyric', + 'grantsmanship', + 'grantsmanships', + 'granularities', + 'granularity', + 'granulated', + 'granulates', + 'granulating', + 'granulation', + 'granulations', + 'granulator', + 'granulators', + 'granulites', + 'granulitic', + 'granulocyte', + 'granulocytes', + 'granulocytic', + 'granulocytopoieses', + 'granulocytopoiesis', + 'granulomas', + 'granulomata', + 'granulomatous', + 'granuloses', + 'granulosis', + 'grapefruit', + 'grapefruits', + 'grapevines', + 'graphemically', + 'graphemics', + 'graphically', + 'graphicness', + 'graphicnesses', + 'graphitizable', + 'graphitization', + 'graphitizations', + 'graphitize', + 'graphitized', + 'graphitizes', + 'graphitizing', + 'grapholect', + 'grapholects', + 'graphological', + 'graphologies', + 'graphologist', + 'graphologists', + 'graphology', + 'grapinesses', + 'grapplings', + 'graptolite', + 'graptolites', + 'graspingly', + 'graspingness', + 'graspingnesses', + 'grasshopper', + 'grasshoppers', + 'grasslands', + 'grassroots', + 'gratefuller', + 'gratefullest', + 'gratefully', + 'gratefulness', + 'gratefulnesses', + 'graticules', + 'gratification', + 'gratifications', + 'gratifying', + 'gratifyingly', + 'gratineeing', + 'gratitudes', + 'gratuities', + 'gratuitous', + 'gratuitously', + 'gratuitousness', + 'gratuitousnesses', + 'gratulated', + 'gratulates', + 'gratulating', + 'gratulation', + 'gratulations', + 'gratulatory', + 'gravelling', + 'gravenesses', + 'gravesides', + 'gravestone', + 'gravestones', + 'graveyards', + 'gravidities', + 'gravimeter', + 'gravimeters', + 'gravimetric', + 'gravimetrically', + 'gravimetries', + 'gravimetry', + 'gravitases', + 'gravitated', + 'gravitates', + 'gravitating', + 'gravitation', + 'gravitational', + 'gravitationally', + 'gravitations', + 'gravitative', + 'graybeards', + 'grayfishes', + 'graynesses', + 'graywackes', + 'greaseball', + 'greaseballs', + 'greaseless', + 'greasepaint', + 'greasepaints', + 'greaseproof', + 'greaseproofs', + 'greasewood', + 'greasewoods', + 'greasiness', + 'greasinesses', + 'greatcoats', + 'greatening', + 'greathearted', + 'greatheartedly', + 'greatheartedness', + 'greatheartednesses', + 'greatnesses', + 'grecianize', + 'grecianized', + 'grecianizes', + 'grecianizing', + 'greediness', + 'greedinesses', + 'greenbacker', + 'greenbackers', + 'greenbackism', + 'greenbackisms', + 'greenbacks', + 'greenbelts', + 'greenbrier', + 'greenbriers', + 'greeneries', + 'greenfinch', + 'greenfinches', + 'greenflies', + 'greengages', + 'greengrocer', + 'greengroceries', + 'greengrocers', + 'greengrocery', + 'greenheads', + 'greenheart', + 'greenhearts', + 'greenhorns', + 'greenhouse', + 'greenhouses', + 'greenishness', + 'greenishnesses', + 'greenkeeper', + 'greenkeepers', + 'greenlings', + 'greenmailed', + 'greenmailer', + 'greenmailers', + 'greenmailing', + 'greenmails', + 'greennesses', + 'greenockite', + 'greenockites', + 'greenrooms', + 'greensands', + 'greenshank', + 'greenshanks', + 'greensickness', + 'greensicknesses', + 'greenskeeper', + 'greenskeepers', + 'greenstone', + 'greenstones', + 'greenstuff', + 'greenstuffs', + 'greensward', + 'greenswards', + 'greenwings', + 'greenwoods', + 'gregarines', + 'gregarious', + 'gregariously', + 'gregariousness', + 'gregariousnesses', + 'grenadiers', + 'grenadines', + 'grewsomest', + 'greyhounds', + 'greynesses', + 'griddlecake', + 'griddlecakes', + 'gridlocked', + 'gridlocking', + 'grievances', + 'grievously', + 'grievousness', + 'grievousnesses', + 'grillrooms', + 'grillworks', + 'grimalkins', + 'griminesses', + 'grimnesses', + 'grinderies', + 'grindingly', + 'grindstone', + 'grindstones', + 'grinningly', + 'grippingly', + 'grisailles', + 'griseofulvin', + 'griseofulvins', + 'grisliness', + 'grislinesses', + 'gristliest', + 'gristliness', + 'gristlinesses', + 'gristmills', + 'grittiness', + 'grittinesses', + 'grizzliest', + 'groggeries', + 'grogginess', + 'grogginesses', + 'grosgrains', + 'grossnesses', + 'grossularite', + 'grossularites', + 'grossulars', + 'grotesquely', + 'grotesqueness', + 'grotesquenesses', + 'grotesquerie', + 'grotesqueries', + 'grotesquery', + 'grotesques', + 'grouchiest', + 'grouchiness', + 'grouchinesses', + 'groundbreaker', + 'groundbreakers', + 'groundbreaking', + 'groundburst', + 'groundbursts', + 'groundfish', + 'groundfishes', + 'groundhogs', + 'groundings', + 'groundless', + 'groundlessly', + 'groundlessness', + 'groundlessnesses', + 'groundling', + 'groundlings', + 'groundmass', + 'groundmasses', + 'groundnuts', + 'groundouts', + 'groundsels', + 'groundsheet', + 'groundsheets', + 'groundskeeper', + 'groundskeepers', + 'groundsman', + 'groundsmen', + 'groundswell', + 'groundswells', + 'groundwater', + 'groundwaters', + 'groundwood', + 'groundwoods', + 'groundwork', + 'groundworks', + 'groupthink', + 'groupthinks', + 'groupuscule', + 'groupuscules', + 'grovelingly', + 'grovelling', + 'growliness', + 'growlinesses', + 'growlingly', + 'growthiest', + 'growthiness', + 'growthinesses', + 'grubbiness', + 'grubbinesses', + 'grubstaked', + 'grubstaker', + 'grubstakers', + 'grubstakes', + 'grubstaking', + 'grudgingly', + 'gruelingly', + 'gruellings', + 'gruesomely', + 'gruesomeness', + 'gruesomenesses', + 'gruesomest', + 'gruffnesses', + 'grumblingly', + 'grumpiness', + 'grumpinesses', + 'guacamoles', + 'guacharoes', + 'guanethidine', + 'guanethidines', + 'guanidines', + 'guanosines', + 'guaranteed', + 'guaranteeing', + 'guarantees', + 'guarantied', + 'guaranties', + 'guarantors', + 'guarantying', + 'guardedness', + 'guardednesses', + 'guardhouse', + 'guardhouses', + 'guardianship', + 'guardianships', + 'guardrails', + 'guardrooms', + 'guayaberas', + 'gubernatorial', + 'gudgeoning', + 'guerdoning', + 'guerrillas', + 'guesstimate', + 'guesstimated', + 'guesstimates', + 'guesstimating', + 'guessworks', + 'guesthouse', + 'guesthouses', + 'guidebooks', + 'guidelines', + 'guideposts', + 'guidwillie', + 'guildhalls', + 'guildships', + 'guilefully', + 'guilefulness', + 'guilefulnesses', + 'guilelessly', + 'guilelessness', + 'guilelessnesses', + 'guillemets', + 'guillemots', + 'guilloches', + 'guillotine', + 'guillotined', + 'guillotines', + 'guillotining', + 'guiltiness', + 'guiltinesses', + 'guiltlessly', + 'guiltlessness', + 'guiltlessnesses', + 'guitarfish', + 'guitarfishes', + 'guitarists', + 'gullibilities', + 'gullibility', + 'gulosities', + 'gumminesses', + 'gumshoeing', + 'guncottons', + 'gunfighter', + 'gunfighters', + 'gunfighting', + 'gunkholing', + 'gunnysacks', + 'gunpowders', + 'gunrunners', + 'gunrunning', + 'gunrunnings', + 'gunslinger', + 'gunslingers', + 'gunslinging', + 'gunslingings', + 'gunsmithing', + 'gunsmithings', + 'gushinesses', + 'gustations', + 'gustatorily', + 'gustinesses', + 'gutbuckets', + 'gutlessness', + 'gutlessnesses', + 'gutsinesses', + 'guttations', + 'gutterings', + 'guttersnipe', + 'guttersnipes', + 'guttersnipish', + 'gutturalism', + 'gutturalisms', + 'gymnasiums', + 'gymnastically', + 'gymnastics', + 'gymnosophist', + 'gymnosophists', + 'gymnosperm', + 'gymnospermies', + 'gymnospermous', + 'gymnosperms', + 'gymnospermy', + 'gynaecologies', + 'gynaecology', + 'gynandries', + 'gynandromorph', + 'gynandromorphic', + 'gynandromorphies', + 'gynandromorphism', + 'gynandromorphisms', + 'gynandromorphs', + 'gynandromorphy', + 'gynandrous', + 'gynarchies', + 'gynecocracies', + 'gynecocracy', + 'gynecocratic', + 'gynecologic', + 'gynecological', + 'gynecologies', + 'gynecologist', + 'gynecologists', + 'gynecology', + 'gynecomastia', + 'gynecomastias', + 'gyniatries', + 'gynogeneses', + 'gynogenesis', + 'gynogenetic', + 'gynophores', + 'gypsiferous', + 'gypsophila', + 'gypsophilas', + 'gyrational', + 'gyrfalcons', + 'gyrocompass', + 'gyrocompasses', + 'gyrofrequencies', + 'gyrofrequency', + 'gyromagnetic', + 'gyroplanes', + 'gyroscopes', + 'gyroscopic', + 'gyroscopically', + 'gyrostabilizer', + 'gyrostabilizers', + 'haberdasher', + 'haberdasheries', + 'haberdashers', + 'haberdashery', + 'habergeons', + 'habiliment', + 'habiliments', + 'habilitate', + 'habilitated', + 'habilitates', + 'habilitating', + 'habilitation', + 'habilitations', + 'habitabilities', + 'habitability', + 'habitableness', + 'habitablenesses', + 'habitation', + 'habitations', + 'habitually', + 'habitualness', + 'habitualnesses', + 'habituated', + 'habituates', + 'habituating', + 'habituation', + 'habituations', + 'hacendados', + 'haciendado', + 'haciendados', + 'hackamores', + 'hackberries', + 'hackmatack', + 'hackmatacks', + 'hackneying', + 'hadrosaurs', + 'haecceities', + 'haematites', + 'hagberries', + 'haggadistic', + 'haggadists', + 'haggardness', + 'haggardnesses', + 'hagiographer', + 'hagiographers', + 'hagiographic', + 'hagiographical', + 'hagiographies', + 'hagiography', + 'hagiologic', + 'hagiological', + 'hagiologies', + 'hagioscope', + 'hagioscopes', + 'hagioscopic', + 'hailstones', + 'hailstorms', + 'hairbreadth', + 'hairbreadths', + 'hairbrushes', + 'haircloths', + 'haircutter', + 'haircutters', + 'haircutting', + 'haircuttings', + 'hairdresser', + 'hairdressers', + 'hairdressing', + 'hairdressings', + 'hairinesses', + 'hairlessness', + 'hairlessnesses', + 'hairpieces', + 'hairsbreadth', + 'hairsbreadths', + 'hairsplitter', + 'hairsplitters', + 'hairsplitting', + 'hairsplittings', + 'hairspring', + 'hairsprings', + 'hairstreak', + 'hairstreaks', + 'hairstyles', + 'hairstyling', + 'hairstylings', + 'hairstylist', + 'hairstylists', + 'halenesses', + 'halfhearted', + 'halfheartedly', + 'halfheartedness', + 'halfheartednesses', + 'halfnesses', + 'halfpennies', + 'hallelujah', + 'hallelujahs', + 'hallmarked', + 'hallmarking', + 'hallucinate', + 'hallucinated', + 'hallucinates', + 'hallucinating', + 'hallucination', + 'hallucinations', + 'hallucinator', + 'hallucinators', + 'hallucinatory', + 'hallucinogen', + 'hallucinogenic', + 'hallucinogenics', + 'hallucinogens', + 'hallucinoses', + 'hallucinosis', + 'hallucinosises', + 'halocarbon', + 'halocarbons', + 'haloclines', + 'halogenate', + 'halogenated', + 'halogenates', + 'halogenating', + 'halogenation', + 'halogenations', + 'halogenous', + 'halogetons', + 'halomorphic', + 'haloperidol', + 'haloperidols', + 'halophiles', + 'halophilic', + 'halophytes', + 'halophytic', + 'halothanes', + 'halterbreak', + 'halterbreaking', + 'halterbreaks', + 'halterbroke', + 'halterbroken', + 'hamadryades', + 'hamadryads', + 'hamantasch', + 'hamantaschen', + 'hamburgers', + 'hammerhead', + 'hammerheads', + 'hammerless', + 'hammerlock', + 'hammerlocks', + 'hammertoes', + 'hamminesses', + 'hamstringing', + 'hamstrings', + 'handbarrow', + 'handbarrows', + 'handbasket', + 'handbaskets', + 'handbreadth', + 'handbreadths', + 'handclasps', + 'handcrafted', + 'handcrafting', + 'handcrafts', + 'handcraftsman', + 'handcraftsmanship', + 'handcraftsmanships', + 'handcraftsmen', + 'handcuffed', + 'handcuffing', + 'handedness', + 'handednesses', + 'handfasted', + 'handfasting', + 'handfastings', + 'handholding', + 'handholdings', + 'handicapped', + 'handicapper', + 'handicappers', + 'handicapping', + 'handicraft', + 'handicrafter', + 'handicrafters', + 'handicrafts', + 'handicraftsman', + 'handicraftsmen', + 'handinesses', + 'handiworks', + 'handkerchief', + 'handkerchiefs', + 'handkerchieves', + 'handleable', + 'handlebars', + 'handleless', + 'handmaiden', + 'handmaidens', + 'handpicked', + 'handpicking', + 'handpresses', + 'handprints', + 'handrailing', + 'handrailings', + 'handsbreadth', + 'handsbreadths', + 'handseling', + 'handselled', + 'handselling', + 'handshakes', + 'handsomely', + 'handsomeness', + 'handsomenesses', + 'handsomest', + 'handspikes', + 'handspring', + 'handsprings', + 'handstands', + 'handwheels', + 'handworker', + 'handworkers', + 'handwringer', + 'handwringers', + 'handwringing', + 'handwringings', + 'handwrites', + 'handwriting', + 'handwritings', + 'handwritten', + 'handwrought', + 'handyperson', + 'handypersons', + 'hanselling', + 'haphazardly', + 'haphazardness', + 'haphazardnesses', + 'haphazardries', + 'haphazardry', + 'haphazards', + 'haphtaroth', + 'haplessness', + 'haplessnesses', + 'haploidies', + 'haplologies', + 'haplotypes', + 'happenchance', + 'happenchances', + 'happenings', + 'happenstance', + 'happenstances', + 'happinesses', + 'haptoglobin', + 'haptoglobins', + 'haranguers', + 'haranguing', + 'harassment', + 'harassments', + 'harbingered', + 'harbingering', + 'harbingers', + 'harborages', + 'harborfuls', + 'harborless', + 'harbormaster', + 'harbormasters', + 'harborside', + 'harbouring', + 'hardboards', + 'hardcovers', + 'hardenings', + 'hardfisted', + 'hardhanded', + 'hardhandedness', + 'hardhandednesses', + 'hardheaded', + 'hardheadedly', + 'hardheadedness', + 'hardheadednesses', + 'hardhearted', + 'hardheartedness', + 'hardheartednesses', + 'hardihoods', + 'hardiments', + 'hardinesses', + 'hardinggrass', + 'hardinggrasses', + 'hardmouthed', + 'hardnesses', + 'hardscrabble', + 'hardstanding', + 'hardstandings', + 'hardstands', + 'hardwiring', + 'hardworking', + 'harebrained', + 'harlequinade', + 'harlequinades', + 'harlequins', + 'harlotries', + 'harmattans', + 'harmfulness', + 'harmfulnesses', + 'harmlessly', + 'harmlessness', + 'harmlessnesses', + 'harmonically', + 'harmonicas', + 'harmonicist', + 'harmonicists', + 'harmonious', + 'harmoniously', + 'harmoniousness', + 'harmoniousnesses', + 'harmonised', + 'harmonises', + 'harmonising', + 'harmoniums', + 'harmonization', + 'harmonizations', + 'harmonized', + 'harmonizer', + 'harmonizers', + 'harmonizes', + 'harmonizing', + 'harnessing', + 'harpooners', + 'harpooning', + 'harpsichord', + 'harpsichordist', + 'harpsichordists', + 'harpsichords', + 'harquebuses', + 'harquebusier', + 'harquebusiers', + 'harrumphed', + 'harrumphing', + 'harshening', + 'harshnesses', + 'hartebeest', + 'hartebeests', + 'hartshorns', + 'harumphing', + 'haruspication', + 'haruspications', + 'haruspices', + 'harvestable', + 'harvesters', + 'harvesting', + 'harvestman', + 'harvestmen', + 'harvesttime', + 'harvesttimes', + 'hasenpfeffer', + 'hasenpfeffers', + 'hasheeshes', + 'hastinesses', + 'hatchabilities', + 'hatchability', + 'hatchbacks', + 'hatcheling', + 'hatchelled', + 'hatchelling', + 'hatcheries', + 'hatchlings', + 'hatchments', + 'hatefulness', + 'hatefulnesses', + 'hatemonger', + 'hatemongers', + 'haughtiest', + 'haughtiness', + 'haughtinesses', + 'hauntingly', + 'hausfrauen', + 'haustellum', + 'haustorial', + 'haustorium', + 'haversacks', + 'hawfinches', + 'hawkishness', + 'hawkishnesses', + 'hawksbills', + 'hawseholes', + 'hazardously', + 'hazardousness', + 'hazardousnesses', + 'hazinesses', + 'headachier', + 'headachiest', + 'headboards', + 'headcheese', + 'headcheeses', + 'headdresses', + 'headfishes', + 'headforemost', + 'headhunted', + 'headhunter', + 'headhunters', + 'headhunting', + 'headinesses', + 'headlessness', + 'headlessnesses', + 'headlights', + 'headliners', + 'headlining', + 'headmaster', + 'headmasters', + 'headmastership', + 'headmasterships', + 'headmistress', + 'headmistresses', + 'headphones', + 'headpieces', + 'headquarter', + 'headquartered', + 'headquartering', + 'headquarters', + 'headshrinker', + 'headshrinkers', + 'headspaces', + 'headspring', + 'headsprings', + 'headstalls', + 'headstands', + 'headstocks', + 'headstones', + 'headstream', + 'headstreams', + 'headstrong', + 'headwaiter', + 'headwaiters', + 'headwaters', + 'healthfully', + 'healthfulness', + 'healthfulnesses', + 'healthiest', + 'healthiness', + 'healthinesses', + 'hearkening', + 'heartaches', + 'heartbeats', + 'heartbreak', + 'heartbreaker', + 'heartbreakers', + 'heartbreaking', + 'heartbreakingly', + 'heartbreaks', + 'heartbroken', + 'heartburning', + 'heartburnings', + 'heartburns', + 'heartening', + 'hearteningly', + 'hearthstone', + 'hearthstones', + 'heartiness', + 'heartinesses', + 'heartlands', + 'heartlessly', + 'heartlessness', + 'heartlessnesses', + 'heartrending', + 'heartrendingly', + 'heartsease', + 'heartseases', + 'heartsickness', + 'heartsicknesses', + 'heartsomely', + 'heartstring', + 'heartstrings', + 'heartthrob', + 'heartthrobs', + 'heartwarming', + 'heartwoods', + 'heartworms', + 'heathendom', + 'heathendoms', + 'heathenish', + 'heathenishly', + 'heathenism', + 'heathenisms', + 'heathenize', + 'heathenized', + 'heathenizes', + 'heathenizing', + 'heathlands', + 'heatstroke', + 'heatstrokes', + 'heavenlier', + 'heavenliest', + 'heavenliness', + 'heavenlinesses', + 'heavenward', + 'heavenwards', + 'heavinesses', + 'heavyhearted', + 'heavyheartedly', + 'heavyheartedness', + 'heavyheartednesses', + 'heavyweight', + 'heavyweights', + 'hebdomadal', + 'hebdomadally', + 'hebephrenia', + 'hebephrenias', + 'hebephrenic', + 'hebephrenics', + 'hebetating', + 'hebetation', + 'hebetations', + 'hebetudinous', + 'hebraization', + 'hebraizations', + 'hebraizing', + 'hectically', + 'hectograms', + 'hectograph', + 'hectographed', + 'hectographing', + 'hectographs', + 'hectoliter', + 'hectoliters', + 'hectometer', + 'hectometers', + 'hectoringly', + 'hedgehopped', + 'hedgehopper', + 'hedgehoppers', + 'hedgehopping', + 'hedonically', + 'hedonistic', + 'hedonistically', + 'heedfulness', + 'heedfulnesses', + 'heedlessly', + 'heedlessness', + 'heedlessnesses', + 'heelpieces', + 'heftinesses', + 'hegemonies', + 'hegumenies', + 'heightened', + 'heightening', + 'heinousness', + 'heinousnesses', + 'heldentenor', + 'heldentenors', + 'heliacally', + 'helicities', + 'helicoidal', + 'helicopted', + 'helicopter', + 'helicoptered', + 'helicoptering', + 'helicopters', + 'helicopting', + 'helilifted', + 'helilifting', + 'heliocentric', + 'heliograph', + 'heliographed', + 'heliographic', + 'heliographing', + 'heliographs', + 'heliolatries', + 'heliolatrous', + 'heliolatry', + 'heliometer', + 'heliometers', + 'heliometric', + 'heliometrically', + 'heliostats', + 'heliotrope', + 'heliotropes', + 'heliotropic', + 'heliotropism', + 'heliotropisms', + 'heliozoans', + 'hellacious', + 'hellaciously', + 'hellbender', + 'hellbenders', + 'hellbroths', + 'hellebores', + 'hellenization', + 'hellenizations', + 'hellenized', + 'hellenizes', + 'hellenizing', + 'hellgrammite', + 'hellgrammites', + 'hellhounds', + 'hellishness', + 'hellishnesses', + 'helmetlike', + 'helminthiases', + 'helminthiasis', + 'helminthic', + 'helminthologies', + 'helminthology', + 'helmsmanship', + 'helmsmanships', + 'helpfulness', + 'helpfulnesses', + 'helplessly', + 'helplessness', + 'helplessnesses', + 'hemacytometer', + 'hemacytometers', + 'hemagglutinate', + 'hemagglutinated', + 'hemagglutinates', + 'hemagglutinating', + 'hemagglutination', + 'hemagglutinations', + 'hemagglutinin', + 'hemagglutinins', + 'hemangioma', + 'hemangiomas', + 'hemangiomata', + 'hematinics', + 'hematocrit', + 'hematocrits', + 'hematogenous', + 'hematologic', + 'hematological', + 'hematologies', + 'hematologist', + 'hematologists', + 'hematology', + 'hematomata', + 'hematophagous', + 'hematopoieses', + 'hematopoiesis', + 'hematopoietic', + 'hematoporphyrin', + 'hematoporphyrins', + 'hematoxylin', + 'hematoxylins', + 'hematurias', + 'hemelytron', + 'hemerocallis', + 'hemerocallises', + 'hemerythrin', + 'hemerythrins', + 'hemiacetal', + 'hemiacetals', + 'hemicellulose', + 'hemicelluloses', + 'hemichordate', + 'hemichordates', + 'hemicycles', + 'hemidemisemiquaver', + 'hemidemisemiquavers', + 'hemihedral', + 'hemihydrate', + 'hemihydrated', + 'hemihydrates', + 'hemimetabolous', + 'hemimorphic', + 'hemimorphism', + 'hemimorphisms', + 'hemiplegia', + 'hemiplegias', + 'hemiplegic', + 'hemiplegics', + 'hemipteran', + 'hemipterans', + 'hemipterous', + 'hemisphere', + 'hemispheres', + 'hemispheric', + 'hemispherical', + 'hemistichs', + 'hemizygous', + 'hemochromatoses', + 'hemochromatosis', + 'hemochromatosises', + 'hemocyanin', + 'hemocyanins', + 'hemocytometer', + 'hemocytometers', + 'hemodialyses', + 'hemodialysis', + 'hemodilution', + 'hemodilutions', + 'hemodynamic', + 'hemodynamically', + 'hemodynamics', + 'hemoflagellate', + 'hemoflagellates', + 'hemoglobin', + 'hemoglobinopathies', + 'hemoglobinopathy', + 'hemoglobins', + 'hemoglobinuria', + 'hemoglobinurias', + 'hemoglobinuric', + 'hemolymphs', + 'hemolysins', + 'hemolyzing', + 'hemophilia', + 'hemophiliac', + 'hemophiliacs', + 'hemophilias', + 'hemophilic', + 'hemophilics', + 'hemopoieses', + 'hemopoiesis', + 'hemopoietic', + 'hemoprotein', + 'hemoproteins', + 'hemoptyses', + 'hemoptysis', + 'hemorrhage', + 'hemorrhaged', + 'hemorrhages', + 'hemorrhagic', + 'hemorrhaging', + 'hemorrhoid', + 'hemorrhoidal', + 'hemorrhoidals', + 'hemorrhoids', + 'hemosiderin', + 'hemosiderins', + 'hemostases', + 'hemostasis', + 'hemostatic', + 'hemostatics', + 'hemstitched', + 'hemstitcher', + 'hemstitchers', + 'hemstitches', + 'hemstitching', + 'henceforth', + 'henceforward', + 'hendecasyllabic', + 'hendecasyllabics', + 'hendecasyllable', + 'hendecasyllables', + 'hendiadyses', + 'henotheism', + 'henotheisms', + 'henotheist', + 'henotheistic', + 'henotheists', + 'henpecking', + 'heparinized', + 'hepatectomies', + 'hepatectomized', + 'hepatectomy', + 'hepatitides', + 'hepatizing', + 'hepatocellular', + 'hepatocyte', + 'hepatocytes', + 'hepatomata', + 'hepatomegalies', + 'hepatomegaly', + 'hepatopancreas', + 'hepatopancreases', + 'hepatotoxic', + 'hepatotoxicities', + 'hepatotoxicity', + 'heptachlor', + 'heptachlors', + 'heptagonal', + 'heptameter', + 'heptameters', + 'heptarchies', + 'heraldically', + 'heraldries', + 'herbaceous', + 'herbalists', + 'herbariums', + 'herbicidal', + 'herbicidally', + 'herbicides', + 'herbivores', + 'herbivories', + 'herbivorous', + 'herculeses', + 'hereabouts', + 'hereafters', + 'hereditament', + 'hereditaments', + 'hereditarian', + 'hereditarians', + 'hereditarily', + 'hereditary', + 'heredities', + 'hereinabove', + 'hereinafter', + 'hereinbefore', + 'hereinbelow', + 'heresiarch', + 'heresiarchs', + 'heretically', + 'heretofore', + 'heretrices', + 'heretrixes', + 'heritabilities', + 'heritability', + 'heritrices', + 'heritrixes', + 'hermaphrodite', + 'hermaphrodites', + 'hermaphroditic', + 'hermaphroditism', + 'hermaphroditisms', + 'hermatypic', + 'hermeneutic', + 'hermeneutical', + 'hermeneutically', + 'hermeneutics', + 'hermetical', + 'hermetically', + 'hermeticism', + 'hermeticisms', + 'hermetisms', + 'hermetists', + 'hermitages', + 'hermitisms', + 'hermitries', + 'herniating', + 'herniation', + 'herniations', + 'heroically', + 'heroicomic', + 'heroicomical', + 'heroinisms', + 'herpesvirus', + 'herpesviruses', + 'herpetological', + 'herpetologies', + 'herpetologist', + 'herpetologists', + 'herpetology', + 'herrenvolk', + 'herrenvolks', + 'herringbone', + 'herringboned', + 'herringbones', + 'herringboning', + 'herstories', + 'hesitances', + 'hesitancies', + 'hesitantly', + 'hesitaters', + 'hesitating', + 'hesitatingly', + 'hesitation', + 'hesitations', + 'hesperidia', + 'hesperidin', + 'hesperidins', + 'hesperidium', + 'hessonites', + 'heteroatom', + 'heteroatoms', + 'heteroauxin', + 'heteroauxins', + 'heterocercal', + 'heterochromatic', + 'heterochromatin', + 'heterochromatins', + 'heteroclite', + 'heteroclites', + 'heterocycle', + 'heterocycles', + 'heterocyclic', + 'heterocyclics', + 'heterocyst', + 'heterocystous', + 'heterocysts', + 'heterodoxies', + 'heterodoxy', + 'heteroduplex', + 'heteroduplexes', + 'heterodyne', + 'heterodyned', + 'heterodynes', + 'heterodyning', + 'heteroecious', + 'heteroecism', + 'heteroecisms', + 'heterogamete', + 'heterogametes', + 'heterogametic', + 'heterogameties', + 'heterogamety', + 'heterogamies', + 'heterogamous', + 'heterogamy', + 'heterogeneities', + 'heterogeneity', + 'heterogeneous', + 'heterogeneously', + 'heterogeneousness', + 'heterogeneousnesses', + 'heterogenies', + 'heterogenous', + 'heterogeny', + 'heterogonic', + 'heterogonies', + 'heterogony', + 'heterograft', + 'heterografts', + 'heterokaryon', + 'heterokaryons', + 'heterokaryoses', + 'heterokaryosis', + 'heterokaryosises', + 'heterokaryotic', + 'heterologous', + 'heterologously', + 'heterolyses', + 'heterolysis', + 'heterolytic', + 'heteromorphic', + 'heteromorphism', + 'heteromorphisms', + 'heteronomies', + 'heteronomous', + 'heteronomy', + 'heteronyms', + 'heterophil', + 'heterophile', + 'heterophonies', + 'heterophony', + 'heterophyllies', + 'heterophyllous', + 'heterophylly', + 'heteroploid', + 'heteroploidies', + 'heteroploids', + 'heteroploidy', + 'heteropterous', + 'heterosexual', + 'heterosexualities', + 'heterosexuality', + 'heterosexually', + 'heterosexuals', + 'heterospories', + 'heterosporous', + 'heterospory', + 'heterothallic', + 'heterothallism', + 'heterothallisms', + 'heterotopic', + 'heterotroph', + 'heterotrophic', + 'heterotrophically', + 'heterotrophies', + 'heterotrophs', + 'heterotrophy', + 'heterotypic', + 'heterozygoses', + 'heterozygosis', + 'heterozygosities', + 'heterozygosity', + 'heterozygote', + 'heterozygotes', + 'heterozygous', + 'heulandite', + 'heulandites', + 'heuristically', + 'heuristics', + 'hexachlorethane', + 'hexachlorethanes', + 'hexachloroethane', + 'hexachloroethanes', + 'hexachlorophene', + 'hexachlorophenes', + 'hexachords', + 'hexadecimal', + 'hexadecimals', + 'hexagonally', + 'hexahedron', + 'hexahedrons', + 'hexahydrate', + 'hexahydrates', + 'hexameters', + 'hexamethonium', + 'hexamethoniums', + 'hexamethylenetetramine', + 'hexamethylenetetramines', + 'hexaploidies', + 'hexaploids', + 'hexaploidy', + 'hexapodies', + 'hexarchies', + 'hexobarbital', + 'hexobarbitals', + 'hexokinase', + 'hexokinases', + 'hexosaminidase', + 'hexosaminidases', + 'hexylresorcinol', + 'hexylresorcinols', + 'hibernacula', + 'hibernaculum', + 'hibernated', + 'hibernates', + 'hibernating', + 'hibernation', + 'hibernations', + 'hibernator', + 'hibernators', + 'hibiscuses', + 'hiccoughed', + 'hiccoughing', + 'hiccupping', + 'hiddenites', + 'hiddenness', + 'hiddennesses', + 'hideosities', + 'hideousness', + 'hideousnesses', + 'hierarchal', + 'hierarchic', + 'hierarchical', + 'hierarchically', + 'hierarchies', + 'hierarchize', + 'hierarchized', + 'hierarchizes', + 'hierarchizing', + 'hieratically', + 'hierodules', + 'hieroglyph', + 'hieroglyphic', + 'hieroglyphical', + 'hieroglyphically', + 'hieroglyphics', + 'hieroglyphs', + 'hierophant', + 'hierophantic', + 'hierophants', + 'highballed', + 'highballing', + 'highbinder', + 'highbinders', + 'highbrowed', + 'highbrowism', + 'highbrowisms', + 'highchairs', + 'highfalutin', + 'highfliers', + 'highflyers', + 'highhanded', + 'highhandedly', + 'highhandedness', + 'highhandednesses', + 'highjacked', + 'highjacking', + 'highlander', + 'highlanders', + 'highlighted', + 'highlighter', + 'highlighters', + 'highlighting', + 'highlights', + 'highnesses', + 'hightailed', + 'hightailing', + 'highwayman', + 'highwaymen', + 'hijackings', + 'hilariously', + 'hilariousness', + 'hilariousnesses', + 'hilarities', + 'hillbillies', + 'hillcrests', + 'hindbrains', + 'hindquarter', + 'hindquarters', + 'hindrances', + 'hindsights', + 'hinterland', + 'hinterlands', + 'hippiedoms', + 'hippieness', + 'hippienesses', + 'hippinesses', + 'hippocampal', + 'hippocampi', + 'hippocampus', + 'hippocrases', + 'hippodrome', + 'hippodromes', + 'hippogriff', + 'hippogriffs', + 'hippopotami', + 'hippopotamus', + 'hippopotamuses', + 'hipsterism', + 'hipsterisms', + 'hirselling', + 'hirsuteness', + 'hirsutenesses', + 'hirsutisms', + 'hispanidad', + 'hispanidads', + 'hispanisms', + 'histaminase', + 'histaminases', + 'histaminergic', + 'histamines', + 'histidines', + 'histiocyte', + 'histiocytes', + 'histiocytic', + 'histochemical', + 'histochemically', + 'histochemistries', + 'histochemistry', + 'histocompatibilities', + 'histocompatibility', + 'histogeneses', + 'histogenesis', + 'histogenetic', + 'histograms', + 'histologic', + 'histological', + 'histologically', + 'histologies', + 'histologist', + 'histologists', + 'histolyses', + 'histolysis', + 'histopathologic', + 'histopathological', + 'histopathologically', + 'histopathologies', + 'histopathologist', + 'histopathologists', + 'histopathology', + 'histophysiologic', + 'histophysiological', + 'histophysiologies', + 'histophysiology', + 'histoplasmoses', + 'histoplasmosis', + 'histoplasmosises', + 'historians', + 'historical', + 'historically', + 'historicalness', + 'historicalnesses', + 'historicism', + 'historicisms', + 'historicist', + 'historicists', + 'historicities', + 'historicity', + 'historicize', + 'historicized', + 'historicizes', + 'historicizing', + 'historiographer', + 'historiographers', + 'historiographic', + 'historiographical', + 'historiographically', + 'historiographies', + 'historiography', + 'histrionic', + 'histrionically', + 'histrionics', + 'hitchhiked', + 'hitchhiker', + 'hitchhikers', + 'hitchhikes', + 'hitchhiking', + 'hithermost', + 'hitherward', + 'hoactzines', + 'hoarfrosts', + 'hoarinesses', + 'hoarseness', + 'hoarsenesses', + 'hoarsening', + 'hobblebush', + 'hobblebushes', + 'hobbledehoy', + 'hobbledehoys', + 'hobbyhorse', + 'hobbyhorses', + 'hobgoblins', + 'hobnailing', + 'hobnobbers', + 'hobnobbing', + 'hodgepodge', + 'hodgepodges', + 'hodoscopes', + 'hoggishness', + 'hoggishnesses', + 'hokeynesses', + 'hokeypokey', + 'hokeypokeys', + 'hokinesses', + 'hokypokies', + 'holidayers', + 'holidaying', + 'holidaymaker', + 'holidaymakers', + 'holinesses', + 'holistically', + 'hollandaise', + 'hollandaises', + 'hollowares', + 'hollowness', + 'hollownesses', + 'hollowware', + 'hollowwares', + 'hollyhocks', + 'holoblastic', + 'holocausts', + 'holoenzyme', + 'holoenzymes', + 'hologamies', + 'holographed', + 'holographer', + 'holographers', + 'holographic', + 'holographically', + 'holographies', + 'holographing', + 'holographs', + 'holography', + 'hologynies', + 'holohedral', + 'holometabolism', + 'holometabolisms', + 'holometabolous', + 'holophrastic', + 'holophytic', + 'holothurian', + 'holothurians', + 'holstering', + 'holystoned', + 'holystones', + 'holystoning', + 'homebodies', + 'homecoming', + 'homecomings', + 'homelessness', + 'homelessnesses', + 'homeliness', + 'homelinesses', + 'homemakers', + 'homemaking', + 'homemakings', + 'homeoboxes', + 'homeomorphic', + 'homeomorphism', + 'homeomorphisms', + 'homeopathic', + 'homeopathically', + 'homeopathies', + 'homeopaths', + 'homeopathy', + 'homeostases', + 'homeostasis', + 'homeostatic', + 'homeotherm', + 'homeothermic', + 'homeothermies', + 'homeotherms', + 'homeothermy', + 'homeowners', + 'homeported', + 'homeporting', + 'homeschool', + 'homeschooled', + 'homeschooler', + 'homeschoolers', + 'homeschooling', + 'homeschools', + 'homesickness', + 'homesicknesses', + 'homesteaded', + 'homesteader', + 'homesteaders', + 'homesteading', + 'homesteads', + 'homestretch', + 'homestretches', + 'homeynesses', + 'homicidally', + 'homiletical', + 'homiletics', + 'hominesses', + 'hominization', + 'hominizations', + 'hominizing', + 'homocercal', + 'homoerotic', + 'homoeroticism', + 'homoeroticisms', + 'homogametic', + 'homogamies', + 'homogamous', + 'homogenate', + 'homogenates', + 'homogeneities', + 'homogeneity', + 'homogeneous', + 'homogeneously', + 'homogeneousness', + 'homogeneousnesses', + 'homogenies', + 'homogenisation', + 'homogenisations', + 'homogenise', + 'homogenised', + 'homogenises', + 'homogenising', + 'homogenization', + 'homogenizations', + 'homogenize', + 'homogenized', + 'homogenizer', + 'homogenizers', + 'homogenizes', + 'homogenizing', + 'homogenous', + 'homogonies', + 'homografts', + 'homographic', + 'homographs', + 'homoiotherm', + 'homoiothermic', + 'homoiotherms', + 'homoiousian', + 'homoiousians', + 'homologate', + 'homologated', + 'homologates', + 'homologating', + 'homologation', + 'homologations', + 'homological', + 'homologically', + 'homologies', + 'homologize', + 'homologized', + 'homologizer', + 'homologizers', + 'homologizes', + 'homologizing', + 'homologous', + 'homologues', + 'homomorphic', + 'homomorphism', + 'homomorphisms', + 'homonuclear', + 'homonymies', + 'homonymous', + 'homonymously', + 'homoousian', + 'homoousians', + 'homophobes', + 'homophobia', + 'homophobias', + 'homophobic', + 'homophones', + 'homophonic', + 'homophonies', + 'homophonous', + 'homoplasies', + 'homoplastic', + 'homopolymer', + 'homopolymeric', + 'homopolymers', + 'homopteran', + 'homopterans', + 'homopterous', + 'homoscedastic', + 'homoscedasticities', + 'homoscedasticity', + 'homosexual', + 'homosexualities', + 'homosexuality', + 'homosexually', + 'homosexuals', + 'homospories', + 'homosporous', + 'homothallic', + 'homothallism', + 'homothallisms', + 'homotransplant', + 'homotransplantation', + 'homotransplantations', + 'homotransplants', + 'homozygoses', + 'homozygosis', + 'homozygosities', + 'homozygosity', + 'homozygote', + 'homozygotes', + 'homozygous', + 'homozygously', + 'homunculus', + 'honeybunch', + 'honeybunches', + 'honeycombed', + 'honeycombing', + 'honeycombs', + 'honeycreeper', + 'honeycreepers', + 'honeyeater', + 'honeyeaters', + 'honeyguide', + 'honeyguides', + 'honeymooned', + 'honeymooner', + 'honeymooners', + 'honeymooning', + 'honeymoons', + 'honeysuckle', + 'honeysuckles', + 'honorabilities', + 'honorability', + 'honorableness', + 'honorablenesses', + 'honoraries', + 'honorarily', + 'honorarium', + 'honorariums', + 'honorifically', + 'honorifics', + 'honourable', + 'hoodedness', + 'hoodednesses', + 'hoodlumish', + 'hoodlumism', + 'hoodlumisms', + 'hoodooisms', + 'hoodwinked', + 'hoodwinker', + 'hoodwinkers', + 'hoodwinking', + 'hoofprints', + 'hooliganism', + 'hooliganisms', + 'hoopskirts', + 'hootenannies', + 'hootenanny', + 'hopefulness', + 'hopefulnesses', + 'hopelessly', + 'hopelessness', + 'hopelessnesses', + 'hopsacking', + 'hopsackings', + 'hopscotched', + 'hopscotches', + 'hopscotching', + 'horehounds', + 'horizonless', + 'horizontal', + 'horizontalities', + 'horizontality', + 'horizontally', + 'horizontals', + 'hormogonia', + 'hormogonium', + 'hormonally', + 'hormonelike', + 'hornblende', + 'hornblendes', + 'hornblendic', + 'hornedness', + 'hornednesses', + 'horninesses', + 'hornlessness', + 'hornlessnesses', + 'hornstones', + 'hornswoggle', + 'hornswoggled', + 'hornswoggles', + 'hornswoggling', + 'horological', + 'horologies', + 'horologist', + 'horologists', + 'horoscopes', + 'horrendous', + 'horrendously', + 'horribleness', + 'horriblenesses', + 'horridness', + 'horridnesses', + 'horrifically', + 'horrifying', + 'horrifyingly', + 'horsebacks', + 'horsebeans', + 'horsefeathers', + 'horseflesh', + 'horsefleshes', + 'horseflies', + 'horsehairs', + 'horsehides', + 'horselaugh', + 'horselaughs', + 'horsemanship', + 'horsemanships', + 'horsemints', + 'horseplayer', + 'horseplayers', + 'horseplays', + 'horsepower', + 'horsepowers', + 'horsepoxes', + 'horseradish', + 'horseradishes', + 'horseshits', + 'horseshoed', + 'horseshoeing', + 'horseshoer', + 'horseshoers', + 'horseshoes', + 'horsetails', + 'horseweeds', + 'horsewhipped', + 'horsewhipper', + 'horsewhippers', + 'horsewhipping', + 'horsewhips', + 'horsewoman', + 'horsewomen', + 'horsinesses', + 'hortatively', + 'horticultural', + 'horticulturally', + 'horticulture', + 'horticultures', + 'horticulturist', + 'horticulturists', + 'hosannaing', + 'hospitable', + 'hospitably', + 'hospitalise', + 'hospitalised', + 'hospitalises', + 'hospitalising', + 'hospitalities', + 'hospitality', + 'hospitalization', + 'hospitalizations', + 'hospitalize', + 'hospitalized', + 'hospitalizes', + 'hospitalizing', + 'hostellers', + 'hostelling', + 'hostelries', + 'hostessing', + 'hostilities', + 'hotchpotch', + 'hotchpotches', + 'hotdoggers', + 'hotdogging', + 'hotfooting', + 'hotheadedly', + 'hotheadedness', + 'hotheadednesses', + 'hotpressed', + 'hotpresses', + 'hotpressing', + 'hourglasses', + 'houseboater', + 'houseboaters', + 'houseboats', + 'housebound', + 'housebreak', + 'housebreaker', + 'housebreakers', + 'housebreaking', + 'housebreakings', + 'housebreaks', + 'housebroke', + 'housebroken', + 'housecarls', + 'houseclean', + 'housecleaned', + 'housecleaning', + 'housecleanings', + 'housecleans', + 'housecoats', + 'housedress', + 'housedresses', + 'housefather', + 'housefathers', + 'houseflies', + 'housefront', + 'housefronts', + 'houseguest', + 'houseguests', + 'householder', + 'householders', + 'households', + 'househusband', + 'househusbands', + 'housekeeper', + 'housekeepers', + 'housekeeping', + 'housekeepings', + 'housekeeps', + 'houseleeks', + 'houselessness', + 'houselessnesses', + 'houselights', + 'houselling', + 'housemaids', + 'housemaster', + 'housemasters', + 'housemates', + 'housemother', + 'housemothers', + 'housepainter', + 'housepainters', + 'houseparent', + 'houseparents', + 'houseperson', + 'housepersons', + 'houseplant', + 'houseplants', + 'houserooms', + 'housesitting', + 'housewares', + 'housewarming', + 'housewarmings', + 'housewifeliness', + 'housewifelinesses', + 'housewifely', + 'housewiferies', + 'housewifery', + 'housewifey', + 'housewives', + 'houseworks', + 'hovercraft', + 'hovercrafts', + 'huckabacks', + 'huckleberries', + 'huckleberry', + 'huckstered', + 'huckstering', + 'hucksterism', + 'hucksterisms', + 'huffinesses', + 'hugenesses', + 'hullabaloo', + 'hullabaloos', + 'humaneness', + 'humanenesses', + 'humanising', + 'humanistic', + 'humanistically', + 'humanitarian', + 'humanitarianism', + 'humanitarianisms', + 'humanitarians', + 'humanities', + 'humanization', + 'humanizations', + 'humanizers', + 'humanizing', + 'humannesses', + 'humbleness', + 'humblenesses', + 'humblingly', + 'humbuggeries', + 'humbuggery', + 'humbugging', + 'humdingers', + 'humectants', + 'humidification', + 'humidifications', + 'humidified', + 'humidifier', + 'humidifiers', + 'humidifies', + 'humidifying', + 'humidistat', + 'humidistats', + 'humidities', + 'humification', + 'humifications', + 'humiliated', + 'humiliates', + 'humiliating', + 'humiliatingly', + 'humiliation', + 'humiliations', + 'humilities', + 'hummingbird', + 'hummingbirds', + 'hummocking', + 'humoresque', + 'humoresques', + 'humoristic', + 'humorlessly', + 'humorlessness', + 'humorlessnesses', + 'humorously', + 'humorousness', + 'humorousnesses', + 'humpbacked', + 'hunchbacked', + 'hunchbacks', + 'hundredfold', + 'hundredths', + 'hundredweight', + 'hundredweights', + 'hungriness', + 'hungrinesses', + 'huntresses', + 'hurricanes', + 'hurriedness', + 'hurriednesses', + 'hurtfulness', + 'hurtfulnesses', + 'husbanders', + 'husbanding', + 'husbandman', + 'husbandmen', + 'husbandries', + 'huskinesses', + 'hyacinthine', + 'hyaloplasm', + 'hyaloplasms', + 'hyaluronidase', + 'hyaluronidases', + 'hybridisms', + 'hybridities', + 'hybridization', + 'hybridizations', + 'hybridized', + 'hybridizer', + 'hybridizers', + 'hybridizes', + 'hybridizing', + 'hybridomas', + 'hydathodes', + 'hydralazine', + 'hydralazines', + 'hydrangeas', + 'hydrations', + 'hydraulically', + 'hydraulics', + 'hydrazides', + 'hydrazines', + 'hydrobiological', + 'hydrobiologies', + 'hydrobiologist', + 'hydrobiologists', + 'hydrobiology', + 'hydrocarbon', + 'hydrocarbons', + 'hydroceles', + 'hydrocephalic', + 'hydrocephalics', + 'hydrocephalies', + 'hydrocephalus', + 'hydrocephaluses', + 'hydrocephaly', + 'hydrochloride', + 'hydrochlorides', + 'hydrochlorothiazide', + 'hydrochlorothiazides', + 'hydrocolloid', + 'hydrocolloidal', + 'hydrocolloids', + 'hydrocortisone', + 'hydrocortisones', + 'hydrocrack', + 'hydrocracked', + 'hydrocracker', + 'hydrocrackers', + 'hydrocracking', + 'hydrocrackings', + 'hydrocracks', + 'hydrodynamic', + 'hydrodynamical', + 'hydrodynamically', + 'hydrodynamicist', + 'hydrodynamicists', + 'hydrodynamics', + 'hydroelectric', + 'hydroelectrically', + 'hydroelectricities', + 'hydroelectricity', + 'hydrofoils', + 'hydrogenase', + 'hydrogenases', + 'hydrogenate', + 'hydrogenated', + 'hydrogenates', + 'hydrogenating', + 'hydrogenation', + 'hydrogenations', + 'hydrogenous', + 'hydrographer', + 'hydrographers', + 'hydrographic', + 'hydrographies', + 'hydrography', + 'hydrokinetic', + 'hydrolases', + 'hydrologic', + 'hydrological', + 'hydrologically', + 'hydrologies', + 'hydrologist', + 'hydrologists', + 'hydrolysate', + 'hydrolysates', + 'hydrolyses', + 'hydrolysis', + 'hydrolytic', + 'hydrolytically', + 'hydrolyzable', + 'hydrolyzate', + 'hydrolyzates', + 'hydrolyzed', + 'hydrolyzes', + 'hydrolyzing', + 'hydromagnetic', + 'hydromancies', + 'hydromancy', + 'hydromechanical', + 'hydromechanics', + 'hydromedusa', + 'hydromedusae', + 'hydrometallurgical', + 'hydrometallurgies', + 'hydrometallurgist', + 'hydrometallurgists', + 'hydrometallurgy', + 'hydrometeor', + 'hydrometeorological', + 'hydrometeorologies', + 'hydrometeorologist', + 'hydrometeorologists', + 'hydrometeorology', + 'hydrometeors', + 'hydrometer', + 'hydrometers', + 'hydrometric', + 'hydromorphic', + 'hydronically', + 'hydroniums', + 'hydropathic', + 'hydropathies', + 'hydropathy', + 'hydroperoxide', + 'hydroperoxides', + 'hydrophane', + 'hydrophanes', + 'hydrophilic', + 'hydrophilicities', + 'hydrophilicity', + 'hydrophobia', + 'hydrophobias', + 'hydrophobic', + 'hydrophobicities', + 'hydrophobicity', + 'hydrophone', + 'hydrophones', + 'hydrophyte', + 'hydrophytes', + 'hydrophytic', + 'hydroplane', + 'hydroplaned', + 'hydroplanes', + 'hydroplaning', + 'hydroponic', + 'hydroponically', + 'hydroponics', + 'hydropower', + 'hydropowers', + 'hydropsies', + 'hydroquinone', + 'hydroquinones', + 'hydroseres', + 'hydrosolic', + 'hydrospace', + 'hydrospaces', + 'hydrosphere', + 'hydrospheres', + 'hydrospheric', + 'hydrostatic', + 'hydrostatically', + 'hydrostatics', + 'hydrotherapies', + 'hydrotherapy', + 'hydrothermal', + 'hydrothermally', + 'hydrothoraces', + 'hydrothorax', + 'hydrothoraxes', + 'hydrotropic', + 'hydrotropism', + 'hydrotropisms', + 'hydroxides', + 'hydroxyapatite', + 'hydroxyapatites', + 'hydroxylamine', + 'hydroxylamines', + 'hydroxylapatite', + 'hydroxylapatites', + 'hydroxylase', + 'hydroxylases', + 'hydroxylate', + 'hydroxylated', + 'hydroxylates', + 'hydroxylating', + 'hydroxylation', + 'hydroxylations', + 'hydroxylic', + 'hydroxyproline', + 'hydroxyprolines', + 'hydroxytryptamine', + 'hydroxytryptamines', + 'hydroxyurea', + 'hydroxyureas', + 'hydroxyzine', + 'hydroxyzines', + 'hydrozoans', + 'hygienically', + 'hygienists', + 'hygrograph', + 'hygrographs', + 'hygrometer', + 'hygrometers', + 'hygrometric', + 'hygrophilous', + 'hygrophyte', + 'hygrophytes', + 'hygrophytic', + 'hygroscopic', + 'hygroscopicities', + 'hygroscopicity', + 'hylozoisms', + 'hylozoistic', + 'hylozoists', + 'hymeneally', + 'hymenoptera', + 'hymenopteran', + 'hymenopterans', + 'hymenopteron', + 'hymenopterons', + 'hymenopterous', + 'hymnologies', + 'hyoscyamine', + 'hyoscyamines', + 'hypabyssal', + 'hypabyssally', + 'hypaethral', + 'hypallages', + 'hypanthium', + 'hyperacidities', + 'hyperacidity', + 'hyperactive', + 'hyperactives', + 'hyperactivities', + 'hyperactivity', + 'hyperacuities', + 'hyperacuity', + 'hyperacute', + 'hyperaesthesia', + 'hyperaesthesias', + 'hyperaesthetic', + 'hyperaggressive', + 'hyperalert', + 'hyperalimentation', + 'hyperalimentations', + 'hyperarousal', + 'hyperarousals', + 'hyperaware', + 'hyperawareness', + 'hyperawarenesses', + 'hyperbaric', + 'hyperbarically', + 'hyperbolae', + 'hyperbolas', + 'hyperboles', + 'hyperbolic', + 'hyperbolical', + 'hyperbolically', + 'hyperbolist', + 'hyperbolists', + 'hyperbolize', + 'hyperbolized', + 'hyperbolizes', + 'hyperbolizing', + 'hyperboloid', + 'hyperboloidal', + 'hyperboloids', + 'hyperborean', + 'hyperboreans', + 'hypercalcemia', + 'hypercalcemias', + 'hypercalcemic', + 'hypercapnia', + 'hypercapnias', + 'hypercapnic', + 'hypercatabolism', + 'hypercatabolisms', + 'hypercatalectic', + 'hypercatalexes', + 'hypercatalexis', + 'hypercautious', + 'hypercharge', + 'hypercharged', + 'hypercharges', + 'hypercholesterolemia', + 'hypercholesterolemias', + 'hypercholesterolemic', + 'hypercivilized', + 'hypercoagulabilities', + 'hypercoagulability', + 'hypercoagulable', + 'hypercompetitive', + 'hypercomplex', + 'hyperconcentration', + 'hyperconcentrations', + 'hyperconscious', + 'hyperconsciousness', + 'hyperconsciousnesses', + 'hypercorrect', + 'hypercorrection', + 'hypercorrections', + 'hypercorrectly', + 'hypercorrectness', + 'hypercorrectnesses', + 'hypercritic', + 'hypercritical', + 'hypercritically', + 'hypercriticism', + 'hypercriticisms', + 'hypercritics', + 'hypercubes', + 'hyperdevelopment', + 'hyperdevelopments', + 'hyperefficient', + 'hyperemias', + 'hyperemotional', + 'hyperemotionalities', + 'hyperemotionality', + 'hyperendemic', + 'hyperenergetic', + 'hyperesthesia', + 'hyperesthesias', + 'hyperesthetic', + 'hypereutectic', + 'hypereutectoid', + 'hyperexcitabilities', + 'hyperexcitability', + 'hyperexcitable', + 'hyperexcited', + 'hyperexcitement', + 'hyperexcitements', + 'hyperexcretion', + 'hyperexcretions', + 'hyperextend', + 'hyperextended', + 'hyperextending', + 'hyperextends', + 'hyperextension', + 'hyperextensions', + 'hyperfastidious', + 'hyperfunction', + 'hyperfunctional', + 'hyperfunctioning', + 'hyperfunctions', + 'hypergamies', + 'hyperglycemia', + 'hyperglycemias', + 'hyperglycemic', + 'hypergolic', + 'hypergolically', + 'hyperhidroses', + 'hyperhidrosis', + 'hyperimmune', + 'hyperimmunization', + 'hyperimmunizations', + 'hyperimmunize', + 'hyperimmunized', + 'hyperimmunizes', + 'hyperimmunizing', + 'hyperinflated', + 'hyperinflation', + 'hyperinflationary', + 'hyperinflations', + 'hyperinnervation', + 'hyperinnervations', + 'hyperinsulinism', + 'hyperinsulinisms', + 'hyperintellectual', + 'hyperintelligent', + 'hyperintense', + 'hyperinvolution', + 'hyperinvolutions', + 'hyperirritabilities', + 'hyperirritability', + 'hyperirritable', + 'hyperkeratoses', + 'hyperkeratosis', + 'hyperkeratotic', + 'hyperkineses', + 'hyperkinesia', + 'hyperkinesias', + 'hyperkinesis', + 'hyperkinetic', + 'hyperlipemia', + 'hyperlipemias', + 'hyperlipemic', + 'hyperlipidemia', + 'hyperlipidemias', + 'hypermania', + 'hypermanias', + 'hypermanic', + 'hypermarket', + 'hypermarkets', + 'hypermasculine', + 'hypermedia', + 'hypermetabolic', + 'hypermetabolism', + 'hypermetabolisms', + 'hypermeter', + 'hypermeters', + 'hypermetric', + 'hypermetrical', + 'hypermetropia', + 'hypermetropias', + 'hypermetropic', + 'hypermnesia', + 'hypermnesias', + 'hypermnesic', + 'hypermobilities', + 'hypermobility', + 'hypermodern', + 'hypermodernist', + 'hypermodernists', + 'hypermutabilities', + 'hypermutability', + 'hypermutable', + 'hypernationalistic', + 'hyperopias', + 'hyperostoses', + 'hyperostosis', + 'hyperostotic', + 'hyperparasite', + 'hyperparasites', + 'hyperparasitic', + 'hyperparasitism', + 'hyperparasitisms', + 'hyperparathyroidism', + 'hyperparathyroidisms', + 'hyperphagia', + 'hyperphagias', + 'hyperphagic', + 'hyperphysical', + 'hyperpigmentation', + 'hyperpigmentations', + 'hyperpigmented', + 'hyperpituitarism', + 'hyperpituitarisms', + 'hyperpituitary', + 'hyperplane', + 'hyperplanes', + 'hyperplasia', + 'hyperplasias', + 'hyperplastic', + 'hyperploid', + 'hyperploidies', + 'hyperploids', + 'hyperploidy', + 'hyperpneas', + 'hyperpneic', + 'hyperpolarization', + 'hyperpolarizations', + 'hyperpolarize', + 'hyperpolarized', + 'hyperpolarizes', + 'hyperpolarizing', + 'hyperproducer', + 'hyperproducers', + 'hyperproduction', + 'hyperproductions', + 'hyperpyrexia', + 'hyperpyrexias', + 'hyperrational', + 'hyperrationalities', + 'hyperrationality', + 'hyperreactive', + 'hyperreactivities', + 'hyperreactivity', + 'hyperreactor', + 'hyperreactors', + 'hyperrealism', + 'hyperrealisms', + 'hyperrealist', + 'hyperrealistic', + 'hyperresponsive', + 'hyperromantic', + 'hypersaline', + 'hypersalinities', + 'hypersalinity', + 'hypersalivation', + 'hypersalivations', + 'hypersecretion', + 'hypersecretions', + 'hypersensitive', + 'hypersensitiveness', + 'hypersensitivenesses', + 'hypersensitivities', + 'hypersensitivity', + 'hypersensitization', + 'hypersensitizations', + 'hypersensitize', + 'hypersensitized', + 'hypersensitizes', + 'hypersensitizing', + 'hypersexual', + 'hypersexualities', + 'hypersexuality', + 'hypersomnolence', + 'hypersomnolences', + 'hypersonic', + 'hypersonically', + 'hyperspace', + 'hyperspaces', + 'hyperstatic', + 'hypersthene', + 'hypersthenes', + 'hypersthenic', + 'hyperstimulate', + 'hyperstimulated', + 'hyperstimulates', + 'hyperstimulating', + 'hyperstimulation', + 'hyperstimulations', + 'hypersurface', + 'hypersurfaces', + 'hypersusceptibilities', + 'hypersusceptibility', + 'hypersusceptible', + 'hypertense', + 'hypertension', + 'hypertensions', + 'hypertensive', + 'hypertensives', + 'hypertexts', + 'hyperthermia', + 'hyperthermias', + 'hyperthermic', + 'hyperthyroid', + 'hyperthyroidism', + 'hyperthyroidisms', + 'hypertonia', + 'hypertonias', + 'hypertonic', + 'hypertonicities', + 'hypertonicity', + 'hypertrophic', + 'hypertrophied', + 'hypertrophies', + 'hypertrophy', + 'hypertrophying', + 'hypertypical', + 'hyperurbanism', + 'hyperurbanisms', + 'hyperuricemia', + 'hyperuricemias', + 'hypervelocities', + 'hypervelocity', + 'hyperventilate', + 'hyperventilated', + 'hyperventilates', + 'hyperventilating', + 'hyperventilation', + 'hyperventilations', + 'hypervigilance', + 'hypervigilances', + 'hypervigilant', + 'hypervirulent', + 'hyperviscosities', + 'hyperviscosity', + 'hypervitaminoses', + 'hypervitaminosis', + 'hyphenated', + 'hyphenates', + 'hyphenating', + 'hyphenation', + 'hyphenations', + 'hyphenless', + 'hypnagogic', + 'hypnogogic', + 'hypnopompic', + 'hypnotherapies', + 'hypnotherapist', + 'hypnotherapists', + 'hypnotherapy', + 'hypnotically', + 'hypnotisms', + 'hypnotists', + 'hypnotizabilities', + 'hypnotizability', + 'hypnotizable', + 'hypnotized', + 'hypnotizes', + 'hypnotizing', + 'hypoallergenic', + 'hypoblasts', + 'hypocalcemia', + 'hypocalcemias', + 'hypocalcemic', + 'hypocausts', + 'hypocenter', + 'hypocenters', + 'hypocentral', + 'hypochlorite', + 'hypochlorites', + 'hypochondria', + 'hypochondriac', + 'hypochondriacal', + 'hypochondriacally', + 'hypochondriacs', + 'hypochondrias', + 'hypochondriases', + 'hypochondriasis', + 'hypocorism', + 'hypocorisms', + 'hypocoristic', + 'hypocoristical', + 'hypocoristically', + 'hypocotyls', + 'hypocrisies', + 'hypocrites', + 'hypocritical', + 'hypocritically', + 'hypocycloid', + 'hypocycloids', + 'hypodermal', + 'hypodermic', + 'hypodermically', + 'hypodermics', + 'hypodermis', + 'hypodermises', + 'hypodiploid', + 'hypodiploidies', + 'hypodiploidy', + 'hypoeutectoid', + 'hypogastric', + 'hypoglossal', + 'hypoglossals', + 'hypoglycemia', + 'hypoglycemias', + 'hypoglycemic', + 'hypoglycemics', + 'hypogynies', + 'hypogynous', + 'hypokalemia', + 'hypokalemias', + 'hypokalemic', + 'hypolimnia', + 'hypolimnion', + 'hypolimnions', + 'hypomagnesemia', + 'hypomagnesemias', + 'hypomanias', + 'hypomorphic', + 'hypomorphs', + 'hypoparathyroidism', + 'hypoparathyroidisms', + 'hypopharynges', + 'hypopharynx', + 'hypopharynxes', + 'hypophyseal', + 'hypophysectomies', + 'hypophysectomize', + 'hypophysectomized', + 'hypophysectomizes', + 'hypophysectomizing', + 'hypophysectomy', + 'hypophyses', + 'hypophysial', + 'hypophysis', + 'hypopituitarism', + 'hypopituitarisms', + 'hypopituitary', + 'hypoplasia', + 'hypoplasias', + 'hypoplastic', + 'hypoploids', + 'hyposensitization', + 'hyposensitizations', + 'hyposensitize', + 'hyposensitized', + 'hyposensitizes', + 'hyposensitizing', + 'hypospadias', + 'hypospadiases', + 'hypostases', + 'hypostasis', + 'hypostatic', + 'hypostatically', + 'hypostatization', + 'hypostatizations', + 'hypostatize', + 'hypostatized', + 'hypostatizes', + 'hypostatizing', + 'hypostomes', + 'hypostyles', + 'hypotactic', + 'hypotension', + 'hypotensions', + 'hypotensive', + 'hypotensives', + 'hypotenuse', + 'hypotenuses', + 'hypothalami', + 'hypothalamic', + 'hypothalamus', + 'hypothecate', + 'hypothecated', + 'hypothecates', + 'hypothecating', + 'hypothecation', + 'hypothecations', + 'hypothecator', + 'hypothecators', + 'hypothenuse', + 'hypothenuses', + 'hypothermal', + 'hypothermia', + 'hypothermias', + 'hypothermic', + 'hypotheses', + 'hypothesis', + 'hypothesize', + 'hypothesized', + 'hypothesizes', + 'hypothesizing', + 'hypothetical', + 'hypothetically', + 'hypothyroid', + 'hypothyroidism', + 'hypothyroidisms', + 'hypotonias', + 'hypotonicities', + 'hypotonicity', + 'hypoxanthine', + 'hypoxanthines', + 'hypoxemias', + 'hypsometer', + 'hypsometers', + 'hypsometric', + 'hysterectomies', + 'hysterectomized', + 'hysterectomy', + 'hystereses', + 'hysteresis', + 'hysteretic', + 'hysterical', + 'hysterically', + 'hysterotomies', + 'hysterotomy', + 'iatrogenic', + 'iatrogenically', + 'ibuprofens', + 'iceboaters', + 'iceboating', + 'iceboatings', + 'icebreaker', + 'icebreakers', + 'ichneumons', + 'ichthyofauna', + 'ichthyofaunae', + 'ichthyofaunal', + 'ichthyofaunas', + 'ichthyological', + 'ichthyologically', + 'ichthyologies', + 'ichthyologist', + 'ichthyologists', + 'ichthyology', + 'ichthyophagous', + 'ichthyosaur', + 'ichthyosaurian', + 'ichthyosaurians', + 'ichthyosaurs', + 'ickinesses', + 'iconically', + 'iconicities', + 'iconoclasm', + 'iconoclasms', + 'iconoclast', + 'iconoclastic', + 'iconoclastically', + 'iconoclasts', + 'iconographer', + 'iconographers', + 'iconographic', + 'iconographical', + 'iconographically', + 'iconographies', + 'iconography', + 'iconolatries', + 'iconolatry', + 'iconological', + 'iconologies', + 'iconoscope', + 'iconoscopes', + 'iconostases', + 'iconostasis', + 'icosahedra', + 'icosahedral', + 'icosahedron', + 'icosahedrons', + 'idealising', + 'idealistic', + 'idealistically', + 'idealities', + 'idealization', + 'idealizations', + 'idealizers', + 'idealizing', + 'idealogies', + 'idealogues', + 'ideational', + 'ideationally', + 'idempotent', + 'idempotents', + 'identically', + 'identicalness', + 'identicalnesses', + 'identifiable', + 'identifiably', + 'identification', + 'identifications', + 'identified', + 'identifier', + 'identifiers', + 'identifies', + 'identifying', + 'identities', + 'ideogramic', + 'ideogrammatic', + 'ideogrammic', + 'ideographic', + 'ideographically', + 'ideographies', + 'ideographs', + 'ideography', + 'ideological', + 'ideologically', + 'ideologies', + 'ideologist', + 'ideologists', + 'ideologize', + 'ideologized', + 'ideologizes', + 'ideologizing', + 'ideologues', + 'idioblastic', + 'idioblasts', + 'idiographic', + 'idiolectal', + 'idiomatically', + 'idiomaticness', + 'idiomaticnesses', + 'idiomorphic', + 'idiopathic', + 'idiopathically', + 'idiosyncrasies', + 'idiosyncrasy', + 'idiosyncratic', + 'idiosyncratically', + 'idiotically', + 'idlenesses', + 'idolatries', + 'idolatrous', + 'idolatrously', + 'idolatrousness', + 'idolatrousnesses', + 'idolization', + 'idolizations', + 'idoneities', + 'idyllically', + 'iffinesses', + 'ignimbrite', + 'ignimbrites', + 'ignitabilities', + 'ignitability', + 'ignobilities', + 'ignobility', + 'ignobleness', + 'ignoblenesses', + 'ignominies', + 'ignominious', + 'ignominiously', + 'ignominiousness', + 'ignominiousnesses', + 'ignoramuses', + 'ignorances', + 'ignorantly', + 'ignorantness', + 'ignorantnesses', + 'iguanodons', + 'illatively', + 'illaudable', + 'illaudably', + 'illegalities', + 'illegality', + 'illegalization', + 'illegalizations', + 'illegalize', + 'illegalized', + 'illegalizes', + 'illegalizing', + 'illegibilities', + 'illegibility', + 'illegitimacies', + 'illegitimacy', + 'illegitimate', + 'illegitimately', + 'illiberalism', + 'illiberalisms', + 'illiberalities', + 'illiberality', + 'illiberally', + 'illiberalness', + 'illiberalnesses', + 'illimitabilities', + 'illimitability', + 'illimitable', + 'illimitableness', + 'illimitablenesses', + 'illimitably', + 'illiquidities', + 'illiquidity', + 'illiteracies', + 'illiteracy', + 'illiterate', + 'illiterately', + 'illiterateness', + 'illiteratenesses', + 'illiterates', + 'illocutionary', + 'illogicalities', + 'illogicality', + 'illogically', + 'illogicalness', + 'illogicalnesses', + 'illuminable', + 'illuminance', + 'illuminances', + 'illuminant', + 'illuminants', + 'illuminate', + 'illuminated', + 'illuminates', + 'illuminati', + 'illuminating', + 'illuminatingly', + 'illumination', + 'illuminations', + 'illuminative', + 'illuminator', + 'illuminators', + 'illumining', + 'illuminism', + 'illuminisms', + 'illuminist', + 'illuminists', + 'illusional', + 'illusionary', + 'illusionism', + 'illusionisms', + 'illusionist', + 'illusionistic', + 'illusionistically', + 'illusionists', + 'illusively', + 'illusiveness', + 'illusivenesses', + 'illusorily', + 'illusoriness', + 'illusorinesses', + 'illustrate', + 'illustrated', + 'illustrates', + 'illustrating', + 'illustration', + 'illustrational', + 'illustrations', + 'illustrative', + 'illustratively', + 'illustrator', + 'illustrators', + 'illustrious', + 'illustriously', + 'illustriousness', + 'illustriousnesses', + 'illuviated', + 'illuviation', + 'illuviations', + 'imaginable', + 'imaginableness', + 'imaginablenesses', + 'imaginably', + 'imaginaries', + 'imaginarily', + 'imaginariness', + 'imaginarinesses', + 'imagination', + 'imaginations', + 'imaginative', + 'imaginatively', + 'imaginativeness', + 'imaginativenesses', + 'imagistically', + 'imbalanced', + 'imbalances', + 'imbecilities', + 'imbecility', + 'imbibition', + 'imbibitional', + 'imbibitions', + 'imbittered', + 'imbittering', + 'imboldened', + 'imboldening', + 'imbosoming', + 'imbowering', + 'imbricated', + 'imbricates', + 'imbricating', + 'imbrication', + 'imbrications', + 'imbroglios', + 'imbrowning', + 'imidazoles', + 'imipramine', + 'imipramines', + 'imitations', + 'imitatively', + 'imitativeness', + 'imitativenesses', + 'immaculacies', + 'immaculacy', + 'immaculate', + 'immaculately', + 'immanences', + 'immanencies', + 'immanentism', + 'immanentisms', + 'immanentist', + 'immanentistic', + 'immanentists', + 'immanently', + 'immaterial', + 'immaterialism', + 'immaterialisms', + 'immaterialist', + 'immaterialists', + 'immaterialities', + 'immateriality', + 'immaterialize', + 'immaterialized', + 'immaterializes', + 'immaterializing', + 'immaturely', + 'immaturities', + 'immaturity', + 'immeasurable', + 'immeasurableness', + 'immeasurablenesses', + 'immeasurably', + 'immediacies', + 'immediately', + 'immediateness', + 'immediatenesses', + 'immedicable', + 'immedicably', + 'immemorial', + 'immemorially', + 'immenseness', + 'immensenesses', + 'immensities', + 'immensurable', + 'immersible', + 'immersions', + 'immethodical', + 'immethodically', + 'immigrants', + 'immigrated', + 'immigrates', + 'immigrating', + 'immigration', + 'immigrational', + 'immigrations', + 'imminences', + 'imminencies', + 'imminently', + 'immingling', + 'immiscibilities', + 'immiscibility', + 'immiscible', + 'immitigable', + 'immitigably', + 'immittance', + 'immittances', + 'immixtures', + 'immobilism', + 'immobilisms', + 'immobilities', + 'immobility', + 'immobilization', + 'immobilizations', + 'immobilize', + 'immobilized', + 'immobilizer', + 'immobilizers', + 'immobilizes', + 'immobilizing', + 'immoderacies', + 'immoderacy', + 'immoderate', + 'immoderately', + 'immoderateness', + 'immoderatenesses', + 'immoderation', + 'immoderations', + 'immodesties', + 'immodestly', + 'immolating', + 'immolation', + 'immolations', + 'immolators', + 'immoralism', + 'immoralisms', + 'immoralist', + 'immoralists', + 'immoralities', + 'immorality', + 'immortalise', + 'immortalised', + 'immortalises', + 'immortalising', + 'immortalities', + 'immortality', + 'immortalization', + 'immortalizations', + 'immortalize', + 'immortalized', + 'immortalizer', + 'immortalizers', + 'immortalizes', + 'immortalizing', + 'immortally', + 'immortelle', + 'immortelles', + 'immovabilities', + 'immovability', + 'immovableness', + 'immovablenesses', + 'immovables', + 'immunising', + 'immunities', + 'immunization', + 'immunizations', + 'immunizing', + 'immunoassay', + 'immunoassayable', + 'immunoassays', + 'immunoblot', + 'immunoblots', + 'immunoblotting', + 'immunoblottings', + 'immunochemical', + 'immunochemically', + 'immunochemist', + 'immunochemistries', + 'immunochemistry', + 'immunochemists', + 'immunocompetence', + 'immunocompetences', + 'immunocompetent', + 'immunocompromised', + 'immunocytochemical', + 'immunocytochemically', + 'immunocytochemistries', + 'immunocytochemistry', + 'immunodeficiencies', + 'immunodeficiency', + 'immunodeficient', + 'immunodiagnoses', + 'immunodiagnosis', + 'immunodiagnostic', + 'immunodiffusion', + 'immunodiffusions', + 'immunoelectrophoreses', + 'immunoelectrophoresis', + 'immunoelectrophoretic', + 'immunoelectrophoretically', + 'immunofluorescence', + 'immunofluorescences', + 'immunofluorescent', + 'immunogeneses', + 'immunogenesis', + 'immunogenetic', + 'immunogenetically', + 'immunogeneticist', + 'immunogeneticists', + 'immunogenetics', + 'immunogenic', + 'immunogenicities', + 'immunogenicity', + 'immunogens', + 'immunoglobulin', + 'immunoglobulins', + 'immunohematologic', + 'immunohematological', + 'immunohematologies', + 'immunohematologist', + 'immunohematologists', + 'immunohematology', + 'immunohistochemical', + 'immunohistochemistries', + 'immunohistochemistry', + 'immunologic', + 'immunological', + 'immunologically', + 'immunologies', + 'immunologist', + 'immunologists', + 'immunology', + 'immunomodulator', + 'immunomodulators', + 'immunomodulatory', + 'immunopathologic', + 'immunopathological', + 'immunopathologies', + 'immunopathologist', + 'immunopathologists', + 'immunopathology', + 'immunoprecipitate', + 'immunoprecipitated', + 'immunoprecipitates', + 'immunoprecipitating', + 'immunoprecipitation', + 'immunoprecipitations', + 'immunoreactive', + 'immunoreactivities', + 'immunoreactivity', + 'immunoregulation', + 'immunoregulations', + 'immunoregulatory', + 'immunosorbent', + 'immunosorbents', + 'immunosuppress', + 'immunosuppressant', + 'immunosuppressants', + 'immunosuppressed', + 'immunosuppresses', + 'immunosuppressing', + 'immunosuppression', + 'immunosuppressions', + 'immunosuppressive', + 'immunotherapeutic', + 'immunotherapies', + 'immunotherapy', + 'immurement', + 'immurements', + 'immutabilities', + 'immutability', + 'immutableness', + 'immutablenesses', + 'impactions', + 'impainting', + 'impairment', + 'impairments', + 'impalement', + 'impalements', + 'impalpabilities', + 'impalpability', + 'impalpable', + 'impalpably', + 'impaneling', + 'impanelled', + 'impanelling', + 'imparadise', + 'imparadised', + 'imparadises', + 'imparadising', + 'imparities', + 'impartation', + 'impartations', + 'impartialities', + 'impartiality', + 'impartially', + 'impartible', + 'impartibly', + 'impartment', + 'impartments', + 'impassabilities', + 'impassability', + 'impassable', + 'impassableness', + 'impassablenesses', + 'impassably', + 'impassibilities', + 'impassibility', + 'impassible', + 'impassibly', + 'impassioned', + 'impassioning', + 'impassions', + 'impassively', + 'impassiveness', + 'impassivenesses', + 'impassivities', + 'impassivity', + 'impatience', + 'impatiences', + 'impatiently', + 'impeachable', + 'impeaching', + 'impeachment', + 'impeachments', + 'impearling', + 'impeccabilities', + 'impeccability', + 'impeccable', + 'impeccably', + 'impecuniosities', + 'impecuniosity', + 'impecunious', + 'impecuniously', + 'impecuniousness', + 'impecuniousnesses', + 'impedances', + 'impediment', + 'impedimenta', + 'impediments', + 'impenetrabilities', + 'impenetrability', + 'impenetrable', + 'impenetrably', + 'impenitence', + 'impenitences', + 'impenitent', + 'impenitently', + 'imperative', + 'imperatively', + 'imperativeness', + 'imperativenesses', + 'imperatives', + 'imperatorial', + 'imperators', + 'imperceivable', + 'imperceptible', + 'imperceptibly', + 'imperceptive', + 'imperceptiveness', + 'imperceptivenesses', + 'impercipience', + 'impercipiences', + 'impercipient', + 'imperfection', + 'imperfections', + 'imperfective', + 'imperfectives', + 'imperfectly', + 'imperfectness', + 'imperfectnesses', + 'imperfects', + 'imperforate', + 'imperialism', + 'imperialisms', + 'imperialist', + 'imperialistic', + 'imperialistically', + 'imperialists', + 'imperially', + 'imperiling', + 'imperilled', + 'imperilling', + 'imperilment', + 'imperilments', + 'imperiously', + 'imperiousness', + 'imperiousnesses', + 'imperishabilities', + 'imperishability', + 'imperishable', + 'imperishableness', + 'imperishablenesses', + 'imperishables', + 'imperishably', + 'impermanence', + 'impermanences', + 'impermanencies', + 'impermanency', + 'impermanent', + 'impermanently', + 'impermeabilities', + 'impermeability', + 'impermeable', + 'impermissibilities', + 'impermissibility', + 'impermissible', + 'impermissibly', + 'impersonal', + 'impersonalities', + 'impersonality', + 'impersonalization', + 'impersonalizations', + 'impersonalize', + 'impersonalized', + 'impersonalizes', + 'impersonalizing', + 'impersonally', + 'impersonate', + 'impersonated', + 'impersonates', + 'impersonating', + 'impersonation', + 'impersonations', + 'impersonator', + 'impersonators', + 'impertinence', + 'impertinences', + 'impertinencies', + 'impertinency', + 'impertinent', + 'impertinently', + 'imperturbabilities', + 'imperturbability', + 'imperturbable', + 'imperturbably', + 'impervious', + 'imperviously', + 'imperviousness', + 'imperviousnesses', + 'impetiginous', + 'impetrated', + 'impetrates', + 'impetrating', + 'impetration', + 'impetrations', + 'impetuosities', + 'impetuosity', + 'impetuously', + 'impetuousness', + 'impetuousnesses', + 'impingement', + 'impingements', + 'impishness', + 'impishnesses', + 'implacabilities', + 'implacability', + 'implacable', + 'implacably', + 'implantable', + 'implantation', + 'implantations', + 'implanters', + 'implanting', + 'implausibilities', + 'implausibility', + 'implausible', + 'implausibly', + 'impleading', + 'impledging', + 'implementation', + 'implementations', + 'implemented', + 'implementer', + 'implementers', + 'implementing', + 'implementor', + 'implementors', + 'implements', + 'implicated', + 'implicates', + 'implicating', + 'implication', + 'implications', + 'implicative', + 'implicatively', + 'implicativeness', + 'implicativenesses', + 'implicitly', + 'implicitness', + 'implicitnesses', + 'imploringly', + 'implosions', + 'implosives', + 'impolicies', + 'impolitely', + 'impoliteness', + 'impolitenesses', + 'impolitical', + 'impolitically', + 'impoliticly', + 'imponderabilities', + 'imponderability', + 'imponderable', + 'imponderables', + 'imponderably', + 'importable', + 'importance', + 'importances', + 'importancies', + 'importancy', + 'importantly', + 'importation', + 'importations', + 'importunate', + 'importunately', + 'importunateness', + 'importunatenesses', + 'importuned', + 'importunely', + 'importuner', + 'importuners', + 'importunes', + 'importuning', + 'importunities', + 'importunity', + 'imposingly', + 'imposition', + 'impositions', + 'impossibilities', + 'impossibility', + 'impossible', + 'impossibleness', + 'impossiblenesses', + 'impossibly', + 'imposthume', + 'imposthumes', + 'impostumes', + 'impostures', + 'impotences', + 'impotencies', + 'impotently', + 'impounding', + 'impoundment', + 'impoundments', + 'impoverish', + 'impoverished', + 'impoverisher', + 'impoverishers', + 'impoverishes', + 'impoverishing', + 'impoverishment', + 'impoverishments', + 'impowering', + 'impracticabilities', + 'impracticability', + 'impracticable', + 'impracticably', + 'impractical', + 'impracticalities', + 'impracticality', + 'impractically', + 'imprecated', + 'imprecates', + 'imprecating', + 'imprecation', + 'imprecations', + 'imprecatory', + 'imprecisely', + 'impreciseness', + 'imprecisenesses', + 'imprecision', + 'imprecisions', + 'impregnabilities', + 'impregnability', + 'impregnable', + 'impregnableness', + 'impregnablenesses', + 'impregnably', + 'impregnant', + 'impregnants', + 'impregnate', + 'impregnated', + 'impregnates', + 'impregnating', + 'impregnation', + 'impregnations', + 'impregnator', + 'impregnators', + 'impregning', + 'impresario', + 'impresarios', + 'impressibilities', + 'impressibility', + 'impressible', + 'impressing', + 'impression', + 'impressionabilities', + 'impressionability', + 'impressionable', + 'impressionism', + 'impressionisms', + 'impressionist', + 'impressionistic', + 'impressionistically', + 'impressionists', + 'impressions', + 'impressive', + 'impressively', + 'impressiveness', + 'impressivenesses', + 'impressment', + 'impressments', + 'impressure', + 'impressures', + 'imprimatur', + 'imprimaturs', + 'imprinters', + 'imprinting', + 'imprintings', + 'imprisoned', + 'imprisoning', + 'imprisonment', + 'imprisonments', + 'improbabilities', + 'improbability', + 'improbable', + 'improbably', + 'impromptus', + 'improperly', + 'improperness', + 'impropernesses', + 'improprieties', + 'impropriety', + 'improvabilities', + 'improvability', + 'improvable', + 'improvement', + 'improvements', + 'improvidence', + 'improvidences', + 'improvident', + 'improvidently', + 'improvisation', + 'improvisational', + 'improvisationally', + 'improvisations', + 'improvisator', + 'improvisatore', + 'improvisatores', + 'improvisatori', + 'improvisatorial', + 'improvisators', + 'improvisatory', + 'improvised', + 'improviser', + 'improvisers', + 'improvises', + 'improvising', + 'improvisor', + 'improvisors', + 'imprudence', + 'imprudences', + 'imprudently', + 'impudences', + 'impudently', + 'impudicities', + 'impudicity', + 'impugnable', + 'impuissance', + 'impuissances', + 'impuissant', + 'impulsions', + 'impulsively', + 'impulsiveness', + 'impulsivenesses', + 'impulsivities', + 'impulsivity', + 'impunities', + 'impureness', + 'impurenesses', + 'impurities', + 'imputabilities', + 'imputability', + 'imputation', + 'imputations', + 'imputative', + 'imputatively', + 'inabilities', + 'inaccessibilities', + 'inaccessibility', + 'inaccessible', + 'inaccessibly', + 'inaccuracies', + 'inaccuracy', + 'inaccurate', + 'inaccurately', + 'inactivate', + 'inactivated', + 'inactivates', + 'inactivating', + 'inactivation', + 'inactivations', + 'inactively', + 'inactivities', + 'inactivity', + 'inadequacies', + 'inadequacy', + 'inadequate', + 'inadequately', + 'inadequateness', + 'inadequatenesses', + 'inadmissibilities', + 'inadmissibility', + 'inadmissible', + 'inadmissibly', + 'inadvertence', + 'inadvertences', + 'inadvertencies', + 'inadvertency', + 'inadvertent', + 'inadvertently', + 'inadvisabilities', + 'inadvisability', + 'inadvisable', + 'inalienabilities', + 'inalienability', + 'inalienable', + 'inalienably', + 'inalterabilities', + 'inalterability', + 'inalterable', + 'inalterableness', + 'inalterablenesses', + 'inalterably', + 'inamoratas', + 'inanenesses', + 'inanimately', + 'inanimateness', + 'inanimatenesses', + 'inanitions', + 'inapparent', + 'inapparently', + 'inappeasable', + 'inappetence', + 'inappetences', + 'inapplicabilities', + 'inapplicability', + 'inapplicable', + 'inapplicably', + 'inapposite', + 'inappositely', + 'inappositeness', + 'inappositenesses', + 'inappreciable', + 'inappreciably', + 'inappreciative', + 'inappreciatively', + 'inappreciativeness', + 'inappreciativenesses', + 'inapproachable', + 'inappropriate', + 'inappropriately', + 'inappropriateness', + 'inappropriatenesses', + 'inaptitude', + 'inaptitudes', + 'inaptnesses', + 'inarguable', + 'inarguably', + 'inarticulacies', + 'inarticulacy', + 'inarticulate', + 'inarticulately', + 'inarticulateness', + 'inarticulatenesses', + 'inarticulates', + 'inartistic', + 'inartistically', + 'inattention', + 'inattentions', + 'inattentive', + 'inattentively', + 'inattentiveness', + 'inattentivenesses', + 'inaudibilities', + 'inaudibility', + 'inaugurals', + 'inaugurate', + 'inaugurated', + 'inaugurates', + 'inaugurating', + 'inauguration', + 'inaugurations', + 'inaugurator', + 'inaugurators', + 'inauspicious', + 'inauspiciously', + 'inauspiciousness', + 'inauspiciousnesses', + 'inauthentic', + 'inauthenticities', + 'inauthenticity', + 'inbounding', + 'inbreathed', + 'inbreathes', + 'inbreathing', + 'inbreeding', + 'inbreedings', + 'incalculabilities', + 'incalculability', + 'incalculable', + 'incalculably', + 'incalescence', + 'incalescences', + 'incalescent', + 'incandesce', + 'incandesced', + 'incandescence', + 'incandescences', + 'incandescent', + 'incandescently', + 'incandescents', + 'incandesces', + 'incandescing', + 'incantation', + 'incantational', + 'incantations', + 'incantatory', + 'incapabilities', + 'incapability', + 'incapableness', + 'incapablenesses', + 'incapacitate', + 'incapacitated', + 'incapacitates', + 'incapacitating', + 'incapacitation', + 'incapacitations', + 'incapacities', + 'incapacity', + 'incarcerate', + 'incarcerated', + 'incarcerates', + 'incarcerating', + 'incarceration', + 'incarcerations', + 'incardination', + 'incardinations', + 'incarnadine', + 'incarnadined', + 'incarnadines', + 'incarnadining', + 'incarnated', + 'incarnates', + 'incarnating', + 'incarnation', + 'incarnations', + 'incautions', + 'incautious', + 'incautiously', + 'incautiousness', + 'incautiousnesses', + 'incendiaries', + 'incendiarism', + 'incendiarisms', + 'incendiary', + 'incentives', + 'inceptions', + 'inceptively', + 'inceptives', + 'incertitude', + 'incertitudes', + 'incessancies', + 'incessancy', + 'incessantly', + 'incestuous', + 'incestuously', + 'incestuousness', + 'incestuousnesses', + 'inchoately', + 'inchoateness', + 'inchoatenesses', + 'inchoative', + 'inchoatively', + 'inchoatives', + 'incidences', + 'incidental', + 'incidentally', + 'incidentals', + 'incinerate', + 'incinerated', + 'incinerates', + 'incinerating', + 'incineration', + 'incinerations', + 'incinerator', + 'incinerators', + 'incipience', + 'incipiences', + 'incipiencies', + 'incipiency', + 'incipiently', + 'incisively', + 'incisiveness', + 'incisivenesses', + 'incitation', + 'incitations', + 'incitement', + 'incitements', + 'incivilities', + 'incivility', + 'inclasping', + 'inclemencies', + 'inclemency', + 'inclemently', + 'inclinable', + 'inclination', + 'inclinational', + 'inclinations', + 'inclinings', + 'inclinometer', + 'inclinometers', + 'inclipping', + 'inclosures', + 'includable', + 'includible', + 'inclusions', + 'inclusively', + 'inclusiveness', + 'inclusivenesses', + 'incoercible', + 'incogitant', + 'incognitas', + 'incognitos', + 'incognizance', + 'incognizances', + 'incognizant', + 'incoherence', + 'incoherences', + 'incoherent', + 'incoherently', + 'incombustibilities', + 'incombustibility', + 'incombustible', + 'incombustibles', + 'incommensurabilities', + 'incommensurability', + 'incommensurable', + 'incommensurables', + 'incommensurably', + 'incommensurate', + 'incommoded', + 'incommodes', + 'incommoding', + 'incommodious', + 'incommodiously', + 'incommodiousness', + 'incommodiousnesses', + 'incommodities', + 'incommodity', + 'incommunicabilities', + 'incommunicability', + 'incommunicable', + 'incommunicably', + 'incommunicado', + 'incommunicative', + 'incommutable', + 'incommutably', + 'incomparabilities', + 'incomparability', + 'incomparable', + 'incomparably', + 'incompatibilities', + 'incompatibility', + 'incompatible', + 'incompatibles', + 'incompatibly', + 'incompetence', + 'incompetences', + 'incompetencies', + 'incompetency', + 'incompetent', + 'incompetently', + 'incompetents', + 'incomplete', + 'incompletely', + 'incompleteness', + 'incompletenesses', + 'incompliant', + 'incomprehensibilities', + 'incomprehensibility', + 'incomprehensible', + 'incomprehensibleness', + 'incomprehensiblenesses', + 'incomprehensibly', + 'incomprehension', + 'incomprehensions', + 'incompressible', + 'incomputable', + 'incomputably', + 'inconceivabilities', + 'inconceivability', + 'inconceivable', + 'inconceivableness', + 'inconceivablenesses', + 'inconceivably', + 'inconcinnities', + 'inconcinnity', + 'inconclusive', + 'inconclusively', + 'inconclusiveness', + 'inconclusivenesses', + 'inconformities', + 'inconformity', + 'incongruence', + 'incongruences', + 'incongruent', + 'incongruently', + 'incongruities', + 'incongruity', + 'incongruous', + 'incongruously', + 'incongruousness', + 'incongruousnesses', + 'inconscient', + 'inconsecutive', + 'inconsequence', + 'inconsequences', + 'inconsequent', + 'inconsequential', + 'inconsequentialities', + 'inconsequentiality', + 'inconsequentially', + 'inconsequently', + 'inconsiderable', + 'inconsiderableness', + 'inconsiderablenesses', + 'inconsiderably', + 'inconsiderate', + 'inconsiderately', + 'inconsiderateness', + 'inconsideratenesses', + 'inconsideration', + 'inconsiderations', + 'inconsistence', + 'inconsistences', + 'inconsistencies', + 'inconsistency', + 'inconsistent', + 'inconsistently', + 'inconsolable', + 'inconsolableness', + 'inconsolablenesses', + 'inconsolably', + 'inconsonance', + 'inconsonances', + 'inconsonant', + 'inconspicuous', + 'inconspicuously', + 'inconspicuousness', + 'inconspicuousnesses', + 'inconstancies', + 'inconstancy', + 'inconstant', + 'inconstantly', + 'inconsumable', + 'inconsumably', + 'incontestabilities', + 'incontestability', + 'incontestable', + 'incontestably', + 'incontinence', + 'incontinences', + 'incontinencies', + 'incontinency', + 'incontinent', + 'incontinently', + 'incontrollable', + 'incontrovertible', + 'incontrovertibly', + 'inconvenience', + 'inconvenienced', + 'inconveniences', + 'inconveniencies', + 'inconveniencing', + 'inconveniency', + 'inconvenient', + 'inconveniently', + 'inconvertibilities', + 'inconvertibility', + 'inconvertible', + 'inconvertibly', + 'inconvincible', + 'incoordination', + 'incoordinations', + 'incorporable', + 'incorporate', + 'incorporated', + 'incorporates', + 'incorporating', + 'incorporation', + 'incorporations', + 'incorporative', + 'incorporator', + 'incorporators', + 'incorporeal', + 'incorporeally', + 'incorporeities', + 'incorporeity', + 'incorpsing', + 'incorrectly', + 'incorrectness', + 'incorrectnesses', + 'incorrigibilities', + 'incorrigibility', + 'incorrigible', + 'incorrigibleness', + 'incorrigiblenesses', + 'incorrigibles', + 'incorrigibly', + 'incorrupted', + 'incorruptibilities', + 'incorruptibility', + 'incorruptible', + 'incorruptibles', + 'incorruptibly', + 'incorruption', + 'incorruptions', + 'incorruptly', + 'incorruptness', + 'incorruptnesses', + 'increasable', + 'increasers', + 'increasing', + 'increasingly', + 'incredibilities', + 'incredibility', + 'incredible', + 'incredibleness', + 'incrediblenesses', + 'incredibly', + 'incredulities', + 'incredulity', + 'incredulous', + 'incredulously', + 'incremental', + 'incrementalism', + 'incrementalisms', + 'incrementalist', + 'incrementalists', + 'incrementally', + 'incremented', + 'incrementing', + 'increments', + 'increscent', + 'incriminate', + 'incriminated', + 'incriminates', + 'incriminating', + 'incrimination', + 'incriminations', + 'incriminatory', + 'incrossing', + 'incrustation', + 'incrustations', + 'incrusting', + 'incubating', + 'incubation', + 'incubations', + 'incubative', + 'incubators', + 'incubatory', + 'inculcated', + 'inculcates', + 'inculcating', + 'inculcation', + 'inculcations', + 'inculcator', + 'inculcators', + 'inculpable', + 'inculpated', + 'inculpates', + 'inculpating', + 'inculpation', + 'inculpations', + 'inculpatory', + 'incumbencies', + 'incumbency', + 'incumbents', + 'incumbered', + 'incumbering', + 'incunables', + 'incunabula', + 'incunabulum', + 'incurables', + 'incuriosities', + 'incuriosity', + 'incuriously', + 'incuriousness', + 'incuriousnesses', + 'incurrence', + 'incurrences', + 'incursions', + 'incurvated', + 'incurvates', + 'incurvating', + 'incurvation', + 'incurvations', + 'incurvature', + 'incurvatures', + 'indagating', + 'indagation', + 'indagations', + 'indagators', + 'indebtedness', + 'indebtednesses', + 'indecencies', + 'indecenter', + 'indecentest', + 'indecently', + 'indecipherable', + 'indecision', + 'indecisions', + 'indecisive', + 'indecisively', + 'indecisiveness', + 'indecisivenesses', + 'indeclinable', + 'indecomposable', + 'indecorous', + 'indecorously', + 'indecorousness', + 'indecorousnesses', + 'indecorums', + 'indefatigabilities', + 'indefatigability', + 'indefatigable', + 'indefatigableness', + 'indefatigablenesses', + 'indefatigably', + 'indefeasibilities', + 'indefeasibility', + 'indefeasible', + 'indefeasibly', + 'indefectibilities', + 'indefectibility', + 'indefectible', + 'indefectibly', + 'indefensibilities', + 'indefensibility', + 'indefensible', + 'indefensibly', + 'indefinabilities', + 'indefinability', + 'indefinable', + 'indefinableness', + 'indefinablenesses', + 'indefinables', + 'indefinably', + 'indefinite', + 'indefinitely', + 'indefiniteness', + 'indefinitenesses', + 'indefinites', + 'indehiscence', + 'indehiscences', + 'indehiscent', + 'indelibilities', + 'indelibility', + 'indelicacies', + 'indelicacy', + 'indelicate', + 'indelicately', + 'indelicateness', + 'indelicatenesses', + 'indemnification', + 'indemnifications', + 'indemnified', + 'indemnifier', + 'indemnifiers', + 'indemnifies', + 'indemnifying', + 'indemnities', + 'indemonstrable', + 'indemonstrably', + 'indentation', + 'indentations', + 'indentions', + 'indentured', + 'indentures', + 'indenturing', + 'independence', + 'independences', + 'independencies', + 'independency', + 'independent', + 'independently', + 'independents', + 'indescribable', + 'indescribableness', + 'indescribablenesses', + 'indescribably', + 'indestructibilities', + 'indestructibility', + 'indestructible', + 'indestructibleness', + 'indestructiblenesses', + 'indestructibly', + 'indeterminable', + 'indeterminably', + 'indeterminacies', + 'indeterminacy', + 'indeterminate', + 'indeterminately', + 'indeterminateness', + 'indeterminatenesses', + 'indetermination', + 'indeterminations', + 'indeterminism', + 'indeterminisms', + 'indeterminist', + 'indeterministic', + 'indeterminists', + 'indexation', + 'indexations', + 'indexicals', + 'indicating', + 'indication', + 'indicational', + 'indications', + 'indicative', + 'indicatively', + 'indicatives', + 'indicators', + 'indicatory', + 'indictable', + 'indictions', + 'indictment', + 'indictments', + 'indifference', + 'indifferences', + 'indifferencies', + 'indifferency', + 'indifferent', + 'indifferentism', + 'indifferentisms', + 'indifferentist', + 'indifferentists', + 'indifferently', + 'indigences', + 'indigenization', + 'indigenizations', + 'indigenize', + 'indigenized', + 'indigenizes', + 'indigenizing', + 'indigenous', + 'indigenously', + 'indigenousness', + 'indigenousnesses', + 'indigested', + 'indigestibilities', + 'indigestibility', + 'indigestible', + 'indigestibles', + 'indigestion', + 'indigestions', + 'indignantly', + 'indignation', + 'indignations', + 'indignities', + 'indigotins', + 'indirection', + 'indirections', + 'indirectly', + 'indirectness', + 'indirectnesses', + 'indiscernible', + 'indisciplinable', + 'indiscipline', + 'indisciplined', + 'indisciplines', + 'indiscoverable', + 'indiscreet', + 'indiscreetly', + 'indiscreetness', + 'indiscreetnesses', + 'indiscretion', + 'indiscretions', + 'indiscriminate', + 'indiscriminately', + 'indiscriminateness', + 'indiscriminatenesses', + 'indiscriminating', + 'indiscriminatingly', + 'indiscrimination', + 'indiscriminations', + 'indispensabilities', + 'indispensability', + 'indispensable', + 'indispensableness', + 'indispensablenesses', + 'indispensables', + 'indispensably', + 'indisposed', + 'indisposes', + 'indisposing', + 'indisposition', + 'indispositions', + 'indisputable', + 'indisputableness', + 'indisputablenesses', + 'indisputably', + 'indissociable', + 'indissociably', + 'indissolubilities', + 'indissolubility', + 'indissoluble', + 'indissolubleness', + 'indissolublenesses', + 'indissolubly', + 'indistinct', + 'indistinctive', + 'indistinctly', + 'indistinctness', + 'indistinctnesses', + 'indistinguishabilities', + 'indistinguishability', + 'indistinguishable', + 'indistinguishableness', + 'indistinguishablenesses', + 'indistinguishably', + 'individual', + 'individualise', + 'individualised', + 'individualises', + 'individualising', + 'individualism', + 'individualisms', + 'individualist', + 'individualistic', + 'individualistically', + 'individualists', + 'individualities', + 'individuality', + 'individualization', + 'individualizations', + 'individualize', + 'individualized', + 'individualizes', + 'individualizing', + 'individually', + 'individuals', + 'individuate', + 'individuated', + 'individuates', + 'individuating', + 'individuation', + 'individuations', + 'indivisibilities', + 'indivisibility', + 'indivisible', + 'indivisibles', + 'indivisibly', + 'indocilities', + 'indocility', + 'indoctrinate', + 'indoctrinated', + 'indoctrinates', + 'indoctrinating', + 'indoctrination', + 'indoctrinations', + 'indoctrinator', + 'indoctrinators', + 'indolences', + 'indolently', + 'indomethacin', + 'indomethacins', + 'indomitabilities', + 'indomitability', + 'indomitable', + 'indomitableness', + 'indomitablenesses', + 'indomitably', + 'indophenol', + 'indophenols', + 'indorsement', + 'indorsements', + 'indubitabilities', + 'indubitability', + 'indubitable', + 'indubitableness', + 'indubitablenesses', + 'indubitably', + 'inducement', + 'inducements', + 'inducibilities', + 'inducibility', + 'inductance', + 'inductances', + 'inductions', + 'inductively', + 'indulgence', + 'indulgences', + 'indulgently', + 'indurating', + 'induration', + 'indurations', + 'indurative', + 'industrial', + 'industrialise', + 'industrialised', + 'industrialises', + 'industrialising', + 'industrialism', + 'industrialisms', + 'industrialist', + 'industrialists', + 'industrialization', + 'industrializations', + 'industrialize', + 'industrialized', + 'industrializes', + 'industrializing', + 'industrially', + 'industrials', + 'industries', + 'industrious', + 'industriously', + 'industriousness', + 'industriousnesses', + 'indwellers', + 'indwelling', + 'inearthing', + 'inebriants', + 'inebriated', + 'inebriates', + 'inebriating', + 'inebriation', + 'inebriations', + 'inebrieties', + 'ineducabilities', + 'ineducability', + 'ineducable', + 'ineffabilities', + 'ineffability', + 'ineffableness', + 'ineffablenesses', + 'ineffaceabilities', + 'ineffaceability', + 'ineffaceable', + 'ineffaceably', + 'ineffective', + 'ineffectively', + 'ineffectiveness', + 'ineffectivenesses', + 'ineffectual', + 'ineffectualities', + 'ineffectuality', + 'ineffectually', + 'ineffectualness', + 'ineffectualnesses', + 'inefficacies', + 'inefficacious', + 'inefficaciously', + 'inefficaciousness', + 'inefficaciousnesses', + 'inefficacy', + 'inefficiencies', + 'inefficiency', + 'inefficient', + 'inefficiently', + 'inefficients', + 'inegalitarian', + 'inelasticities', + 'inelasticity', + 'inelegance', + 'inelegances', + 'inelegantly', + 'ineligibilities', + 'ineligibility', + 'ineligible', + 'ineligibles', + 'ineloquent', + 'ineloquently', + 'ineluctabilities', + 'ineluctability', + 'ineluctable', + 'ineluctably', + 'ineludible', + 'inenarrable', + 'ineptitude', + 'ineptitudes', + 'ineptnesses', + 'inequalities', + 'inequality', + 'inequitable', + 'inequitably', + 'inequities', + 'inequivalve', + 'inequivalved', + 'ineradicabilities', + 'ineradicability', + 'ineradicable', + 'ineradicably', + 'inerrancies', + 'inertially', + 'inertnesses', + 'inescapable', + 'inescapably', + 'inessential', + 'inessentials', + 'inestimable', + 'inestimably', + 'inevitabilities', + 'inevitability', + 'inevitable', + 'inevitableness', + 'inevitablenesses', + 'inevitably', + 'inexactitude', + 'inexactitudes', + 'inexactness', + 'inexactnesses', + 'inexcusable', + 'inexcusableness', + 'inexcusablenesses', + 'inexcusably', + 'inexhaustibilities', + 'inexhaustibility', + 'inexhaustible', + 'inexhaustibleness', + 'inexhaustiblenesses', + 'inexhaustibly', + 'inexistence', + 'inexistences', + 'inexistent', + 'inexorabilities', + 'inexorability', + 'inexorable', + 'inexorableness', + 'inexorablenesses', + 'inexorably', + 'inexpedience', + 'inexpediences', + 'inexpediencies', + 'inexpediency', + 'inexpedient', + 'inexpediently', + 'inexpensive', + 'inexpensively', + 'inexpensiveness', + 'inexpensivenesses', + 'inexperience', + 'inexperienced', + 'inexperiences', + 'inexpertly', + 'inexpertness', + 'inexpertnesses', + 'inexpiable', + 'inexpiably', + 'inexplainable', + 'inexplicabilities', + 'inexplicability', + 'inexplicable', + 'inexplicableness', + 'inexplicablenesses', + 'inexplicably', + 'inexplicit', + 'inexpressibilities', + 'inexpressibility', + 'inexpressible', + 'inexpressibleness', + 'inexpressiblenesses', + 'inexpressibly', + 'inexpressive', + 'inexpressively', + 'inexpressiveness', + 'inexpressivenesses', + 'inexpugnable', + 'inexpugnableness', + 'inexpugnablenesses', + 'inexpugnably', + 'inexpungible', + 'inextinguishable', + 'inextinguishably', + 'inextricabilities', + 'inextricability', + 'inextricable', + 'inextricably', + 'infallibilities', + 'infallibility', + 'infallible', + 'infallibly', + 'infamously', + 'infanticidal', + 'infanticide', + 'infanticides', + 'infantilism', + 'infantilisms', + 'infantilities', + 'infantility', + 'infantilization', + 'infantilizations', + 'infantilize', + 'infantilized', + 'infantilizes', + 'infantilizing', + 'infantries', + 'infantryman', + 'infantrymen', + 'infarction', + 'infarctions', + 'infatuated', + 'infatuates', + 'infatuating', + 'infatuation', + 'infatuations', + 'infeasibilities', + 'infeasibility', + 'infeasible', + 'infections', + 'infectious', + 'infectiously', + 'infectiousness', + 'infectiousnesses', + 'infectivities', + 'infectivity', + 'infelicities', + 'infelicitous', + 'infelicitously', + 'infelicity', + 'infeoffing', + 'inferences', + 'inferential', + 'inferentially', + 'inferiorities', + 'inferiority', + 'inferiorly', + 'infernally', + 'inferrible', + 'infertilities', + 'infertility', + 'infestants', + 'infestation', + 'infestations', + 'infibulate', + 'infibulated', + 'infibulates', + 'infibulating', + 'infibulation', + 'infibulations', + 'infidelities', + 'infidelity', + 'infielders', + 'infighters', + 'infighting', + 'infightings', + 'infiltrate', + 'infiltrated', + 'infiltrates', + 'infiltrating', + 'infiltration', + 'infiltrations', + 'infiltrative', + 'infiltrator', + 'infiltrators', + 'infinitely', + 'infiniteness', + 'infinitenesses', + 'infinitesimal', + 'infinitesimally', + 'infinitesimals', + 'infinities', + 'infinitival', + 'infinitive', + 'infinitively', + 'infinitives', + 'infinitude', + 'infinitudes', + 'infirmaries', + 'infirmities', + 'infixation', + 'infixations', + 'inflammabilities', + 'inflammability', + 'inflammable', + 'inflammableness', + 'inflammablenesses', + 'inflammables', + 'inflammably', + 'inflammation', + 'inflammations', + 'inflammatorily', + 'inflammatory', + 'inflatable', + 'inflatables', + 'inflationary', + 'inflationism', + 'inflationisms', + 'inflationist', + 'inflationists', + 'inflations', + 'inflectable', + 'inflecting', + 'inflection', + 'inflectional', + 'inflectionally', + 'inflections', + 'inflective', + 'inflexibilities', + 'inflexibility', + 'inflexible', + 'inflexibleness', + 'inflexiblenesses', + 'inflexibly', + 'inflexions', + 'inflicters', + 'inflicting', + 'infliction', + 'inflictions', + 'inflictive', + 'inflictors', + 'inflorescence', + 'inflorescences', + 'influenceable', + 'influenced', + 'influences', + 'influencing', + 'influential', + 'influentially', + 'influentials', + 'influenzal', + 'influenzas', + 'infomercial', + 'infomercials', + 'informalities', + 'informality', + 'informally', + 'informants', + 'informatics', + 'information', + 'informational', + 'informationally', + 'informations', + 'informative', + 'informatively', + 'informativeness', + 'informativenesses', + 'informatorily', + 'informatory', + 'informedly', + 'infotainment', + 'infotainments', + 'infracting', + 'infraction', + 'infractions', + 'infrahuman', + 'infrahumans', + 'infrangibilities', + 'infrangibility', + 'infrangible', + 'infrangibly', + 'infrasonic', + 'infraspecific', + 'infrastructure', + 'infrastructures', + 'infrequence', + 'infrequences', + 'infrequencies', + 'infrequency', + 'infrequent', + 'infrequently', + 'infringement', + 'infringements', + 'infringers', + 'infringing', + 'infundibula', + 'infundibular', + 'infundibuliform', + 'infundibulum', + 'infuriated', + 'infuriates', + 'infuriating', + 'infuriatingly', + 'infuriation', + 'infuriations', + 'infusibilities', + 'infusibility', + 'infusibleness', + 'infusiblenesses', + 'infusorian', + 'infusorians', + 'ingathered', + 'ingathering', + 'ingatherings', + 'ingeniously', + 'ingeniousness', + 'ingeniousnesses', + 'ingenuities', + 'ingenuously', + 'ingenuousness', + 'ingenuousnesses', + 'ingestible', + 'ingestions', + 'inglenooks', + 'inglorious', + 'ingloriously', + 'ingloriousness', + 'ingloriousnesses', + 'ingrafting', + 'ingrainedly', + 'ingraining', + 'ingratiate', + 'ingratiated', + 'ingratiates', + 'ingratiating', + 'ingratiatingly', + 'ingratiation', + 'ingratiations', + 'ingratiatory', + 'ingratitude', + 'ingratitudes', + 'ingredient', + 'ingredients', + 'ingression', + 'ingressions', + 'ingressive', + 'ingressiveness', + 'ingressivenesses', + 'ingressives', + 'ingrownness', + 'ingrownnesses', + 'ingurgitate', + 'ingurgitated', + 'ingurgitates', + 'ingurgitating', + 'ingurgitation', + 'ingurgitations', + 'inhabitable', + 'inhabitancies', + 'inhabitancy', + 'inhabitant', + 'inhabitants', + 'inhabitation', + 'inhabitations', + 'inhabiters', + 'inhabiting', + 'inhalation', + 'inhalational', + 'inhalations', + 'inhalators', + 'inharmonic', + 'inharmonies', + 'inharmonious', + 'inharmoniously', + 'inharmoniousness', + 'inharmoniousnesses', + 'inherences', + 'inherently', + 'inheritabilities', + 'inheritability', + 'inheritable', + 'inheritableness', + 'inheritablenesses', + 'inheritance', + 'inheritances', + 'inheriting', + 'inheritors', + 'inheritress', + 'inheritresses', + 'inheritrices', + 'inheritrix', + 'inheritrixes', + 'inhibiting', + 'inhibition', + 'inhibitions', + 'inhibitive', + 'inhibitors', + 'inhibitory', + 'inholdings', + 'inhomogeneities', + 'inhomogeneity', + 'inhomogeneous', + 'inhospitable', + 'inhospitableness', + 'inhospitablenesses', + 'inhospitably', + 'inhospitalities', + 'inhospitality', + 'inhumanely', + 'inhumanities', + 'inhumanity', + 'inhumanness', + 'inhumannesses', + 'inhumation', + 'inhumations', + 'inimically', + 'inimitable', + 'inimitableness', + 'inimitablenesses', + 'inimitably', + 'iniquities', + 'iniquitous', + 'iniquitously', + 'iniquitousness', + 'iniquitousnesses', + 'initialing', + 'initialism', + 'initialisms', + 'initialization', + 'initializations', + 'initialize', + 'initialized', + 'initializes', + 'initializing', + 'initialled', + 'initialling', + 'initialness', + 'initialnesses', + 'initiating', + 'initiation', + 'initiations', + 'initiative', + 'initiatives', + 'initiators', + 'initiatory', + 'injectable', + 'injectables', + 'injectants', + 'injections', + 'injudicious', + 'injudiciously', + 'injudiciousness', + 'injudiciousnesses', + 'injunction', + 'injunctions', + 'injunctive', + 'injuriously', + 'injuriousness', + 'injuriousnesses', + 'injustices', + 'inkberries', + 'inkinesses', + 'innateness', + 'innatenesses', + 'innermosts', + 'innersoles', + 'innerspring', + 'innervated', + 'innervates', + 'innervating', + 'innervation', + 'innervations', + 'innkeepers', + 'innocences', + 'innocencies', + 'innocenter', + 'innocentest', + 'innocently', + 'innocuously', + 'innocuousness', + 'innocuousnesses', + 'innominate', + 'innovating', + 'innovation', + 'innovational', + 'innovations', + 'innovative', + 'innovatively', + 'innovativeness', + 'innovativenesses', + 'innovators', + 'innovatory', + 'innuendoed', + 'innuendoes', + 'innuendoing', + 'innumerable', + 'innumerably', + 'innumeracies', + 'innumeracy', + 'innumerate', + 'innumerates', + 'innumerous', + 'inobservance', + 'inobservances', + 'inobservant', + 'inoculants', + 'inoculated', + 'inoculates', + 'inoculating', + 'inoculation', + 'inoculations', + 'inoculative', + 'inoculator', + 'inoculators', + 'inoffensive', + 'inoffensively', + 'inoffensiveness', + 'inoffensivenesses', + 'inoperable', + 'inoperative', + 'inoperativeness', + 'inoperativenesses', + 'inoperculate', + 'inoperculates', + 'inopportune', + 'inopportunely', + 'inopportuneness', + 'inopportunenesses', + 'inordinate', + 'inordinately', + 'inordinateness', + 'inordinatenesses', + 'inorganically', + 'inosculate', + 'inosculated', + 'inosculates', + 'inosculating', + 'inosculation', + 'inosculations', + 'inpatients', + 'inpourings', + 'inquieting', + 'inquietude', + 'inquietudes', + 'inquilines', + 'inquiringly', + 'inquisition', + 'inquisitional', + 'inquisitions', + 'inquisitive', + 'inquisitively', + 'inquisitiveness', + 'inquisitivenesses', + 'inquisitor', + 'inquisitorial', + 'inquisitorially', + 'inquisitors', + 'insalubrious', + 'insalubrities', + 'insalubrity', + 'insaneness', + 'insanenesses', + 'insanitary', + 'insanitation', + 'insanitations', + 'insanities', + 'insatiabilities', + 'insatiability', + 'insatiable', + 'insatiableness', + 'insatiablenesses', + 'insatiably', + 'insatiately', + 'insatiateness', + 'insatiatenesses', + 'inscribers', + 'inscribing', + 'inscription', + 'inscriptional', + 'inscriptions', + 'inscriptive', + 'inscriptively', + 'inscrolled', + 'inscrolling', + 'inscrutabilities', + 'inscrutability', + 'inscrutable', + 'inscrutableness', + 'inscrutablenesses', + 'inscrutably', + 'insculping', + 'insectaries', + 'insecticidal', + 'insecticidally', + 'insecticide', + 'insecticides', + 'insectivore', + 'insectivores', + 'insectivorous', + 'insecurely', + 'insecureness', + 'insecurenesses', + 'insecurities', + 'insecurity', + 'inselberge', + 'inselbergs', + 'inseminate', + 'inseminated', + 'inseminates', + 'inseminating', + 'insemination', + 'inseminations', + 'inseminator', + 'inseminators', + 'insensately', + 'insensibilities', + 'insensibility', + 'insensible', + 'insensibleness', + 'insensiblenesses', + 'insensibly', + 'insensitive', + 'insensitively', + 'insensitiveness', + 'insensitivenesses', + 'insensitivities', + 'insensitivity', + 'insentience', + 'insentiences', + 'insentient', + 'inseparabilities', + 'inseparability', + 'inseparable', + 'inseparableness', + 'inseparablenesses', + 'inseparables', + 'inseparably', + 'insertional', + 'insertions', + 'insheathed', + 'insheathing', + 'inshrining', + 'insidiously', + 'insidiousness', + 'insidiousnesses', + 'insightful', + 'insightfully', + 'insignificance', + 'insignificances', + 'insignificancies', + 'insignificancy', + 'insignificant', + 'insignificantly', + 'insincerely', + 'insincerities', + 'insincerity', + 'insinuated', + 'insinuates', + 'insinuating', + 'insinuatingly', + 'insinuation', + 'insinuations', + 'insinuative', + 'insinuator', + 'insinuators', + 'insipidities', + 'insipidity', + 'insistence', + 'insistences', + 'insistencies', + 'insistency', + 'insistently', + 'insobrieties', + 'insobriety', + 'insociabilities', + 'insociability', + 'insociable', + 'insociably', + 'insolating', + 'insolation', + 'insolations', + 'insolences', + 'insolently', + 'insolubilities', + 'insolubility', + 'insolubilization', + 'insolubilizations', + 'insolubilize', + 'insolubilized', + 'insolubilizes', + 'insolubilizing', + 'insolubleness', + 'insolublenesses', + 'insolubles', + 'insolvable', + 'insolvably', + 'insolvencies', + 'insolvency', + 'insolvents', + 'insomniacs', + 'insouciance', + 'insouciances', + 'insouciant', + 'insouciantly', + 'inspanning', + 'inspecting', + 'inspection', + 'inspections', + 'inspective', + 'inspectorate', + 'inspectorates', + 'inspectors', + 'inspectorship', + 'inspectorships', + 'insphering', + 'inspiration', + 'inspirational', + 'inspirationally', + 'inspirations', + 'inspirator', + 'inspirators', + 'inspiratory', + 'inspiringly', + 'inspirited', + 'inspiriting', + 'inspiritingly', + 'inspissate', + 'inspissated', + 'inspissates', + 'inspissating', + 'inspissation', + 'inspissations', + 'inspissator', + 'inspissators', + 'instabilities', + 'instability', + 'installation', + 'installations', + 'installers', + 'installing', + 'installment', + 'installments', + 'instalment', + 'instalments', + 'instancies', + 'instancing', + 'instantaneities', + 'instantaneity', + 'instantaneous', + 'instantaneously', + 'instantaneousness', + 'instantaneousnesses', + 'instantiate', + 'instantiated', + 'instantiates', + 'instantiating', + 'instantiation', + 'instantiations', + 'instantness', + 'instantnesses', + 'instarring', + 'instauration', + 'instaurations', + 'instigated', + 'instigates', + 'instigating', + 'instigation', + 'instigations', + 'instigative', + 'instigator', + 'instigators', + 'instillation', + 'instillations', + 'instillers', + 'instilling', + 'instillment', + 'instillments', + 'instinctive', + 'instinctively', + 'instinctual', + 'instinctually', + 'instituted', + 'instituter', + 'instituters', + 'institutes', + 'instituting', + 'institution', + 'institutional', + 'institutionalise', + 'institutionalised', + 'institutionalises', + 'institutionalising', + 'institutionalism', + 'institutionalisms', + 'institutionalist', + 'institutionalists', + 'institutionalization', + 'institutionalizations', + 'institutionalize', + 'institutionalized', + 'institutionalizes', + 'institutionalizing', + 'institutionally', + 'institutions', + 'institutor', + 'institutors', + 'instructed', + 'instructing', + 'instruction', + 'instructional', + 'instructions', + 'instructive', + 'instructively', + 'instructiveness', + 'instructivenesses', + 'instructor', + 'instructors', + 'instructorship', + 'instructorships', + 'instructress', + 'instructresses', + 'instrument', + 'instrumental', + 'instrumentalism', + 'instrumentalisms', + 'instrumentalist', + 'instrumentalists', + 'instrumentalities', + 'instrumentality', + 'instrumentally', + 'instrumentals', + 'instrumentation', + 'instrumentations', + 'instrumented', + 'instrumenting', + 'instruments', + 'insubordinate', + 'insubordinately', + 'insubordinates', + 'insubordination', + 'insubordinations', + 'insubstantial', + 'insubstantialities', + 'insubstantiality', + 'insufferable', + 'insufferableness', + 'insufferablenesses', + 'insufferably', + 'insufficiencies', + 'insufficiency', + 'insufficient', + 'insufficiently', + 'insufflate', + 'insufflated', + 'insufflates', + 'insufflating', + 'insufflation', + 'insufflations', + 'insufflator', + 'insufflators', + 'insularism', + 'insularisms', + 'insularities', + 'insularity', + 'insulating', + 'insulation', + 'insulations', + 'insulators', + 'insultingly', + 'insuperable', + 'insuperably', + 'insupportable', + 'insupportably', + 'insuppressible', + 'insurabilities', + 'insurability', + 'insurances', + 'insurgence', + 'insurgences', + 'insurgencies', + 'insurgency', + 'insurgently', + 'insurgents', + 'insurmountable', + 'insurmountably', + 'insurrection', + 'insurrectional', + 'insurrectionaries', + 'insurrectionary', + 'insurrectionist', + 'insurrectionists', + 'insurrections', + 'insusceptibilities', + 'insusceptibility', + 'insusceptible', + 'insusceptibly', + 'inswathing', + 'intactness', + 'intactnesses', + 'intaglioed', + 'intaglioing', + 'intangibilities', + 'intangibility', + 'intangible', + 'intangibleness', + 'intangiblenesses', + 'intangibles', + 'intangibly', + 'integrabilities', + 'integrability', + 'integrable', + 'integralities', + 'integrality', + 'integrally', + 'integrands', + 'integrated', + 'integrates', + 'integrating', + 'integration', + 'integrationist', + 'integrationists', + 'integrations', + 'integrative', + 'integrator', + 'integrators', + 'integrities', + 'integument', + 'integumentary', + 'integuments', + 'intellection', + 'intellections', + 'intellective', + 'intellectively', + 'intellects', + 'intellectual', + 'intellectualism', + 'intellectualisms', + 'intellectualist', + 'intellectualistic', + 'intellectualists', + 'intellectualities', + 'intellectuality', + 'intellectualization', + 'intellectualizations', + 'intellectualize', + 'intellectualized', + 'intellectualizer', + 'intellectualizers', + 'intellectualizes', + 'intellectualizing', + 'intellectually', + 'intellectualness', + 'intellectualnesses', + 'intellectuals', + 'intelligence', + 'intelligencer', + 'intelligencers', + 'intelligences', + 'intelligent', + 'intelligential', + 'intelligently', + 'intelligentsia', + 'intelligentsias', + 'intelligibilities', + 'intelligibility', + 'intelligible', + 'intelligibleness', + 'intelligiblenesses', + 'intelligibly', + 'intemperance', + 'intemperances', + 'intemperate', + 'intemperately', + 'intemperateness', + 'intemperatenesses', + 'intendance', + 'intendances', + 'intendants', + 'intendedly', + 'intendment', + 'intendments', + 'intenerate', + 'intenerated', + 'intenerates', + 'intenerating', + 'inteneration', + 'intenerations', + 'intenseness', + 'intensenesses', + 'intensification', + 'intensifications', + 'intensified', + 'intensifier', + 'intensifiers', + 'intensifies', + 'intensifying', + 'intensional', + 'intensionalities', + 'intensionality', + 'intensionally', + 'intensions', + 'intensities', + 'intensively', + 'intensiveness', + 'intensivenesses', + 'intensives', + 'intentional', + 'intentionalities', + 'intentionality', + 'intentionally', + 'intentions', + 'intentness', + 'intentnesses', + 'interabang', + 'interabangs', + 'interactant', + 'interactants', + 'interacted', + 'interacting', + 'interaction', + 'interactional', + 'interactions', + 'interactive', + 'interactively', + 'interagency', + 'interallelic', + 'interallied', + 'interanimation', + 'interanimations', + 'interannual', + 'interassociation', + 'interassociations', + 'interatomic', + 'interavailabilities', + 'interavailability', + 'interbasin', + 'interbedded', + 'interbedding', + 'interbehavior', + 'interbehavioral', + 'interbehaviors', + 'interborough', + 'interboroughs', + 'interbranch', + 'interbreed', + 'interbreeding', + 'interbreeds', + 'intercalary', + 'intercalate', + 'intercalated', + 'intercalates', + 'intercalating', + 'intercalation', + 'intercalations', + 'intercalibration', + 'intercalibrations', + 'intercampus', + 'intercaste', + 'interceded', + 'interceder', + 'interceders', + 'intercedes', + 'interceding', + 'intercellular', + 'intercensal', + 'intercepted', + 'intercepter', + 'intercepters', + 'intercepting', + 'interception', + 'interceptions', + 'interceptor', + 'interceptors', + 'intercepts', + 'intercession', + 'intercessional', + 'intercessions', + 'intercessor', + 'intercessors', + 'intercessory', + 'interchain', + 'interchained', + 'interchaining', + 'interchains', + 'interchange', + 'interchangeabilities', + 'interchangeability', + 'interchangeable', + 'interchangeableness', + 'interchangeablenesses', + 'interchangeably', + 'interchanged', + 'interchanger', + 'interchangers', + 'interchanges', + 'interchanging', + 'interchannel', + 'interchromosomal', + 'interchurch', + 'interclass', + 'intercluster', + 'intercoastal', + 'intercollegiate', + 'intercolonial', + 'intercolumniation', + 'intercolumniations', + 'intercommunal', + 'intercommunicate', + 'intercommunicated', + 'intercommunicates', + 'intercommunicating', + 'intercommunication', + 'intercommunications', + 'intercommunion', + 'intercommunions', + 'intercommunities', + 'intercommunity', + 'intercompany', + 'intercompare', + 'intercompared', + 'intercompares', + 'intercomparing', + 'intercomparison', + 'intercomparisons', + 'intercomprehensibilities', + 'intercomprehensibility', + 'interconnect', + 'interconnected', + 'interconnectedness', + 'interconnectednesses', + 'interconnecting', + 'interconnection', + 'interconnections', + 'interconnects', + 'intercontinental', + 'interconversion', + 'interconversions', + 'interconvert', + 'interconverted', + 'interconvertibilities', + 'interconvertibility', + 'interconvertible', + 'interconverting', + 'interconverts', + 'intercooler', + 'intercoolers', + 'intercorporate', + 'intercorrelate', + 'intercorrelated', + 'intercorrelates', + 'intercorrelating', + 'intercorrelation', + 'intercorrelations', + 'intercortical', + 'intercostal', + 'intercostals', + 'intercountry', + 'intercounty', + 'intercouple', + 'intercourse', + 'intercourses', + 'intercrater', + 'intercropped', + 'intercropping', + 'intercrops', + 'intercross', + 'intercrossed', + 'intercrosses', + 'intercrossing', + 'intercrystalline', + 'intercultural', + 'interculturally', + 'interculture', + 'intercultures', + 'intercurrent', + 'intercutting', + 'interdealer', + 'interdealers', + 'interdenominational', + 'interdental', + 'interdentally', + 'interdepartmental', + 'interdepartmentally', + 'interdepend', + 'interdepended', + 'interdependence', + 'interdependences', + 'interdependencies', + 'interdependency', + 'interdependent', + 'interdependently', + 'interdepending', + 'interdepends', + 'interdialectal', + 'interdicted', + 'interdicting', + 'interdiction', + 'interdictions', + 'interdictive', + 'interdictor', + 'interdictors', + 'interdictory', + 'interdicts', + 'interdiffuse', + 'interdiffused', + 'interdiffuses', + 'interdiffusing', + 'interdiffusion', + 'interdiffusions', + 'interdigitate', + 'interdigitated', + 'interdigitates', + 'interdigitating', + 'interdigitation', + 'interdigitations', + 'interdisciplinary', + 'interdistrict', + 'interdivisional', + 'interdominion', + 'interelectrode', + 'interelectrodes', + 'interelectron', + 'interelectronic', + 'interepidemic', + 'interested', + 'interestedly', + 'interesting', + 'interestingly', + 'interestingness', + 'interestingnesses', + 'interethnic', + 'interfaced', + 'interfaces', + 'interfacial', + 'interfacing', + 'interfacings', + 'interfaculties', + 'interfaculty', + 'interfaith', + 'interfamilial', + 'interfamily', + 'interfered', + 'interference', + 'interferences', + 'interferential', + 'interferer', + 'interferers', + 'interferes', + 'interfering', + 'interferogram', + 'interferograms', + 'interferometer', + 'interferometers', + 'interferometric', + 'interferometrically', + 'interferometries', + 'interferometry', + 'interferon', + 'interferons', + 'interfertile', + 'interfertilities', + 'interfertility', + 'interfiber', + 'interfiled', + 'interfiles', + 'interfiling', + 'interfluve', + 'interfluves', + 'interfluvial', + 'interfolded', + 'interfolding', + 'interfolds', + 'interfraternity', + 'interfused', + 'interfuses', + 'interfusing', + 'interfusion', + 'interfusions', + 'intergalactic', + 'intergeneration', + 'intergenerational', + 'intergenerations', + 'intergeneric', + 'interglacial', + 'interglacials', + 'intergovernmental', + 'intergradation', + 'intergradational', + 'intergradations', + 'intergrade', + 'intergraded', + 'intergrades', + 'intergrading', + 'intergraft', + 'intergrafted', + 'intergrafting', + 'intergrafts', + 'intergranular', + 'intergroup', + 'intergrowth', + 'intergrowths', + 'interhemispheric', + 'interindividual', + 'interindustry', + 'interinfluence', + 'interinfluenced', + 'interinfluences', + 'interinfluencing', + 'interinstitutional', + 'interinvolve', + 'interinvolved', + 'interinvolves', + 'interinvolving', + 'interionic', + 'interiorise', + 'interiorised', + 'interiorises', + 'interiorising', + 'interiorities', + 'interiority', + 'interiorization', + 'interiorizations', + 'interiorize', + 'interiorized', + 'interiorizes', + 'interiorizing', + 'interiorly', + 'interisland', + 'interjected', + 'interjecting', + 'interjection', + 'interjectional', + 'interjectionally', + 'interjections', + 'interjector', + 'interjectors', + 'interjectory', + 'interjects', + 'interjurisdictional', + 'interknits', + 'interknitted', + 'interknitting', + 'interlaced', + 'interlacement', + 'interlacements', + 'interlaces', + 'interlacing', + 'interlacustrine', + 'interlaminar', + 'interlapped', + 'interlapping', + 'interlarded', + 'interlarding', + 'interlards', + 'interlayer', + 'interlayered', + 'interlayering', + 'interlayers', + 'interlaying', + 'interleave', + 'interleaved', + 'interleaves', + 'interleaving', + 'interlending', + 'interlends', + 'interleukin', + 'interleukins', + 'interlibrary', + 'interlinear', + 'interlinearly', + 'interlinears', + 'interlineation', + 'interlineations', + 'interlined', + 'interliner', + 'interliners', + 'interlines', + 'interlining', + 'interlinings', + 'interlinked', + 'interlinking', + 'interlinks', + 'interlobular', + 'interlocal', + 'interlocked', + 'interlocking', + 'interlocks', + 'interlocutor', + 'interlocutors', + 'interlocutory', + 'interloped', + 'interloper', + 'interlopers', + 'interlopes', + 'interloping', + 'interludes', + 'interlunar', + 'interlunary', + 'intermarginal', + 'intermarriage', + 'intermarriages', + 'intermarried', + 'intermarries', + 'intermarry', + 'intermarrying', + 'intermeddle', + 'intermeddled', + 'intermeddler', + 'intermeddlers', + 'intermeddles', + 'intermeddling', + 'intermediacies', + 'intermediacy', + 'intermediaries', + 'intermediary', + 'intermediate', + 'intermediated', + 'intermediately', + 'intermediateness', + 'intermediatenesses', + 'intermediates', + 'intermediating', + 'intermediation', + 'intermediations', + 'intermedin', + 'intermedins', + 'intermembrane', + 'intermenstrual', + 'interments', + 'intermeshed', + 'intermeshes', + 'intermeshing', + 'intermetallic', + 'intermetallics', + 'intermezzi', + 'intermezzo', + 'intermezzos', + 'interminable', + 'interminableness', + 'interminablenesses', + 'interminably', + 'intermingle', + 'intermingled', + 'intermingles', + 'intermingling', + 'interministerial', + 'intermission', + 'intermissionless', + 'intermissions', + 'intermitotic', + 'intermitted', + 'intermittence', + 'intermittences', + 'intermittencies', + 'intermittency', + 'intermittent', + 'intermittently', + 'intermitter', + 'intermitters', + 'intermitting', + 'intermixed', + 'intermixes', + 'intermixing', + 'intermixture', + 'intermixtures', + 'intermodal', + 'intermodulation', + 'intermodulations', + 'intermolecular', + 'intermolecularly', + 'intermontane', + 'intermountain', + 'intermural', + 'internalise', + 'internalised', + 'internalises', + 'internalising', + 'internalities', + 'internality', + 'internalization', + 'internalizations', + 'internalize', + 'internalized', + 'internalizes', + 'internalizing', + 'internally', + 'international', + 'internationalise', + 'internationalised', + 'internationalises', + 'internationalising', + 'internationalism', + 'internationalisms', + 'internationalist', + 'internationalists', + 'internationalities', + 'internationality', + 'internationalization', + 'internationalizations', + 'internationalize', + 'internationalized', + 'internationalizes', + 'internationalizing', + 'internationally', + 'internationals', + 'internecine', + 'interneuron', + 'interneuronal', + 'interneurons', + 'internists', + 'internment', + 'internments', + 'internodal', + 'internodes', + 'internship', + 'internships', + 'internuclear', + 'internucleon', + 'internucleonic', + 'internucleotide', + 'internuncial', + 'internuncio', + 'internuncios', + 'interobserver', + 'interobservers', + 'interocean', + 'interoceanic', + 'interoceptive', + 'interoceptor', + 'interoceptors', + 'interoffice', + 'interoperabilities', + 'interoperability', + 'interoperable', + 'interoperative', + 'interoperatives', + 'interorbital', + 'interorgan', + 'interorganizational', + 'interpandemic', + 'interparish', + 'interparochial', + 'interparoxysmal', + 'interparticle', + 'interparty', + 'interpellate', + 'interpellated', + 'interpellates', + 'interpellating', + 'interpellation', + 'interpellations', + 'interpellator', + 'interpellators', + 'interpenetrate', + 'interpenetrated', + 'interpenetrates', + 'interpenetrating', + 'interpenetration', + 'interpenetrations', + 'interperceptual', + 'interpermeate', + 'interpermeated', + 'interpermeates', + 'interpermeating', + 'interpersonal', + 'interpersonally', + 'interphalangeal', + 'interphase', + 'interphases', + 'interplanetary', + 'interplant', + 'interplanted', + 'interplanting', + 'interplants', + 'interplayed', + 'interplaying', + 'interplays', + 'interplead', + 'interpleaded', + 'interpleader', + 'interpleaders', + 'interpleading', + 'interpleads', + 'interpluvial', + 'interpoint', + 'interpoints', + 'interpolate', + 'interpolated', + 'interpolates', + 'interpolating', + 'interpolation', + 'interpolations', + 'interpolative', + 'interpolator', + 'interpolators', + 'interpopulation', + 'interpopulational', + 'interposed', + 'interposer', + 'interposers', + 'interposes', + 'interposing', + 'interposition', + 'interpositions', + 'interpretabilities', + 'interpretability', + 'interpretable', + 'interpretation', + 'interpretational', + 'interpretations', + 'interpretative', + 'interpretatively', + 'interpreted', + 'interpreter', + 'interpreters', + 'interpreting', + 'interpretive', + 'interpretively', + 'interprets', + 'interprofessional', + 'interprovincial', + 'interproximal', + 'interpsychic', + 'interpupillary', + 'interracial', + 'interracially', + 'interreges', + 'interregional', + 'interregna', + 'interregnum', + 'interregnums', + 'interrelate', + 'interrelated', + 'interrelatedly', + 'interrelatedness', + 'interrelatednesses', + 'interrelates', + 'interrelating', + 'interrelation', + 'interrelations', + 'interrelationship', + 'interrelationships', + 'interreligious', + 'interrenal', + 'interrobang', + 'interrobangs', + 'interrogate', + 'interrogated', + 'interrogatee', + 'interrogatees', + 'interrogates', + 'interrogating', + 'interrogation', + 'interrogational', + 'interrogations', + 'interrogative', + 'interrogatively', + 'interrogatives', + 'interrogator', + 'interrogatories', + 'interrogators', + 'interrogatory', + 'interrogee', + 'interrogees', + 'interrupted', + 'interrupter', + 'interrupters', + 'interruptible', + 'interrupting', + 'interruption', + 'interruptions', + 'interruptive', + 'interruptor', + 'interruptors', + 'interrupts', + 'interscholastic', + 'interschool', + 'interschools', + 'intersected', + 'intersecting', + 'intersection', + 'intersectional', + 'intersections', + 'intersects', + 'intersegment', + 'intersegmental', + 'intersegments', + 'intersensory', + 'interservice', + 'intersession', + 'intersessions', + 'intersexes', + 'intersexual', + 'intersexualities', + 'intersexuality', + 'intersexually', + 'intersocietal', + 'intersociety', + 'interspace', + 'interspaced', + 'interspaces', + 'interspacing', + 'interspecies', + 'interspecific', + 'intersperse', + 'interspersed', + 'intersperses', + 'interspersing', + 'interspersion', + 'interspersions', + 'interstadial', + 'interstadials', + 'interstage', + 'interstate', + 'interstates', + 'interstation', + 'interstellar', + 'intersterile', + 'intersterilities', + 'intersterility', + 'interstice', + 'interstices', + 'interstimulation', + 'interstimulations', + 'interstimuli', + 'interstimulus', + 'interstitial', + 'interstitially', + 'interstrain', + 'interstrains', + 'interstrand', + 'interstrands', + 'interstratification', + 'interstratifications', + 'interstratified', + 'interstratifies', + 'interstratify', + 'interstratifying', + 'intersubjective', + 'intersubjectively', + 'intersubjectivities', + 'intersubjectivity', + 'intersubstitutabilities', + 'intersubstitutability', + 'intersubstitutable', + 'intersystem', + 'interterminal', + 'interterritorial', + 'intertestamental', + 'intertidal', + 'intertidally', + 'intertillage', + 'intertillages', + 'intertilled', + 'intertilling', + 'intertills', + 'intertranslatable', + 'intertrial', + 'intertribal', + 'intertroop', + 'intertropical', + 'intertwine', + 'intertwined', + 'intertwinement', + 'intertwinements', + 'intertwines', + 'intertwining', + 'intertwist', + 'intertwisted', + 'intertwisting', + 'intertwists', + 'interunion', + 'interunions', + 'interuniversity', + 'interurban', + 'interurbans', + 'intervales', + 'intervalley', + 'intervalleys', + 'intervallic', + 'intervalometer', + 'intervalometers', + 'intervened', + 'intervener', + 'interveners', + 'intervenes', + 'intervening', + 'intervenor', + 'intervenors', + 'intervention', + 'interventionism', + 'interventionisms', + 'interventionist', + 'interventionists', + 'interventions', + 'interventricular', + 'intervertebral', + 'interviewed', + 'interviewee', + 'interviewees', + 'interviewer', + 'interviewers', + 'interviewing', + 'interviews', + 'intervillage', + 'intervisibilities', + 'intervisibility', + 'intervisible', + 'intervisitation', + 'intervisitations', + 'intervocalic', + 'intervocalically', + 'interweave', + 'interweaved', + 'interweaves', + 'interweaving', + 'interworked', + 'interworking', + 'interworkings', + 'interworks', + 'interwoven', + 'interwrought', + 'interzonal', + 'intestacies', + 'intestates', + 'intestinal', + 'intestinally', + 'intestines', + 'inthralled', + 'inthralling', + 'inthroning', + 'intimacies', + 'intimately', + 'intimateness', + 'intimatenesses', + 'intimaters', + 'intimating', + 'intimation', + 'intimations', + 'intimidate', + 'intimidated', + 'intimidates', + 'intimidating', + 'intimidatingly', + 'intimidation', + 'intimidations', + 'intimidator', + 'intimidators', + 'intimidatory', + 'intinction', + 'intinctions', + 'intituling', + 'intolerabilities', + 'intolerability', + 'intolerable', + 'intolerableness', + 'intolerablenesses', + 'intolerably', + 'intolerance', + 'intolerances', + 'intolerant', + 'intolerantly', + 'intolerantness', + 'intolerantnesses', + 'intonating', + 'intonation', + 'intonational', + 'intonations', + 'intoxicant', + 'intoxicants', + 'intoxicate', + 'intoxicated', + 'intoxicatedly', + 'intoxicates', + 'intoxicating', + 'intoxication', + 'intoxications', + 'intracardiac', + 'intracardial', + 'intracardially', + 'intracellular', + 'intracellularly', + 'intracerebral', + 'intracerebrally', + 'intracompany', + 'intracranial', + 'intracranially', + 'intractabilities', + 'intractability', + 'intractable', + 'intractably', + 'intracutaneous', + 'intracutaneously', + 'intradermal', + 'intradermally', + 'intradoses', + 'intragalactic', + 'intragenic', + 'intramolecular', + 'intramolecularly', + 'intramural', + 'intramurally', + 'intramuscular', + 'intramuscularly', + 'intranasal', + 'intranasally', + 'intransigeance', + 'intransigeances', + 'intransigeant', + 'intransigeantly', + 'intransigeants', + 'intransigence', + 'intransigences', + 'intransigent', + 'intransigently', + 'intransigents', + 'intransitive', + 'intransitively', + 'intransitiveness', + 'intransitivenesses', + 'intransitivities', + 'intransitivity', + 'intraocular', + 'intraocularly', + 'intraperitoneal', + 'intraperitoneally', + 'intrapersonal', + 'intraplate', + 'intrapopulation', + 'intrapreneur', + 'intrapreneurial', + 'intrapreneurs', + 'intrapsychic', + 'intrapsychically', + 'intraspecies', + 'intraspecific', + 'intrastate', + 'intrathecal', + 'intrathecally', + 'intrathoracic', + 'intrathoracically', + 'intrauterine', + 'intravascular', + 'intravascularly', + 'intravenous', + 'intravenouses', + 'intravenously', + 'intraventricular', + 'intraventricularly', + 'intravital', + 'intravitally', + 'intravitam', + 'intrazonal', + 'intreating', + 'intrenched', + 'intrenches', + 'intrenching', + 'intrepidities', + 'intrepidity', + 'intrepidly', + 'intrepidness', + 'intrepidnesses', + 'intricacies', + 'intricately', + 'intricateness', + 'intricatenesses', + 'intrigants', + 'intriguant', + 'intriguants', + 'intriguers', + 'intriguing', + 'intriguingly', + 'intrinsical', + 'intrinsically', + 'introduced', + 'introducer', + 'introducers', + 'introduces', + 'introducing', + 'introduction', + 'introductions', + 'introductorily', + 'introductory', + 'introfying', + 'introgressant', + 'introgressants', + 'introgression', + 'introgressions', + 'introgressive', + 'introjected', + 'introjecting', + 'introjection', + 'introjections', + 'introjects', + 'intromission', + 'intromissions', + 'intromitted', + 'intromittent', + 'intromitter', + 'intromitters', + 'intromitting', + 'introspect', + 'introspected', + 'introspecting', + 'introspection', + 'introspectional', + 'introspectionism', + 'introspectionisms', + 'introspectionist', + 'introspectionistic', + 'introspectionists', + 'introspections', + 'introspective', + 'introspectively', + 'introspectiveness', + 'introspectivenesses', + 'introspects', + 'introversion', + 'introversions', + 'introversive', + 'introversively', + 'introverted', + 'introverting', + 'introverts', + 'intrusions', + 'intrusively', + 'intrusiveness', + 'intrusivenesses', + 'intrusives', + 'intrusting', + 'intubating', + 'intubation', + 'intubations', + 'intuitable', + 'intuitional', + 'intuitionism', + 'intuitionisms', + 'intuitionist', + 'intuitionists', + 'intuitions', + 'intuitively', + 'intuitiveness', + 'intuitivenesses', + 'intumescence', + 'intumescences', + 'intumescent', + 'intussuscept', + 'intussuscepted', + 'intussuscepting', + 'intussusception', + 'intussusceptions', + 'intussusceptive', + 'intussuscepts', + 'intwisting', + 'inunctions', + 'inundating', + 'inundation', + 'inundations', + 'inundators', + 'inundatory', + 'inurements', + 'inutilities', + 'invaginate', + 'invaginated', + 'invaginates', + 'invaginating', + 'invagination', + 'invaginations', + 'invalidate', + 'invalidated', + 'invalidates', + 'invalidating', + 'invalidation', + 'invalidations', + 'invalidator', + 'invalidators', + 'invaliding', + 'invalidism', + 'invalidisms', + 'invalidities', + 'invalidity', + 'invaluable', + 'invaluableness', + 'invaluablenesses', + 'invaluably', + 'invariabilities', + 'invariability', + 'invariable', + 'invariables', + 'invariably', + 'invariance', + 'invariances', + 'invariants', + 'invasively', + 'invasiveness', + 'invasivenesses', + 'invectively', + 'invectiveness', + 'invectivenesses', + 'invectives', + 'inveighers', + 'inveighing', + 'inveiglement', + 'inveiglements', + 'inveiglers', + 'inveigling', + 'inventions', + 'inventively', + 'inventiveness', + 'inventivenesses', + 'inventorial', + 'inventorially', + 'inventoried', + 'inventories', + 'inventorying', + 'inventress', + 'inventresses', + 'inverities', + 'invernesses', + 'inversions', + 'invertases', + 'invertebrate', + 'invertebrates', + 'invertible', + 'investable', + 'investigate', + 'investigated', + 'investigates', + 'investigating', + 'investigation', + 'investigational', + 'investigations', + 'investigative', + 'investigator', + 'investigators', + 'investigatory', + 'investiture', + 'investitures', + 'investment', + 'investments', + 'inveteracies', + 'inveteracy', + 'inveterate', + 'inveterately', + 'inviabilities', + 'inviability', + 'invidiously', + 'invidiousness', + 'invidiousnesses', + 'invigilate', + 'invigilated', + 'invigilates', + 'invigilating', + 'invigilation', + 'invigilations', + 'invigilator', + 'invigilators', + 'invigorate', + 'invigorated', + 'invigorates', + 'invigorating', + 'invigoratingly', + 'invigoration', + 'invigorations', + 'invigorator', + 'invigorators', + 'invincibilities', + 'invincibility', + 'invincible', + 'invincibleness', + 'invinciblenesses', + 'invincibly', + 'inviolabilities', + 'inviolability', + 'inviolable', + 'inviolableness', + 'inviolablenesses', + 'inviolably', + 'inviolacies', + 'inviolately', + 'inviolateness', + 'inviolatenesses', + 'invisibilities', + 'invisibility', + 'invisibleness', + 'invisiblenesses', + 'invisibles', + 'invitation', + 'invitational', + 'invitationals', + 'invitations', + 'invitatories', + 'invitatory', + 'invitingly', + 'invocating', + 'invocation', + 'invocational', + 'invocations', + 'invocatory', + 'involucral', + 'involucrate', + 'involucres', + 'involucrum', + 'involuntarily', + 'involuntariness', + 'involuntarinesses', + 'involuntary', + 'involuting', + 'involution', + 'involutional', + 'involutions', + 'involvedly', + 'involvement', + 'involvements', + 'invulnerabilities', + 'invulnerability', + 'invulnerable', + 'invulnerableness', + 'invulnerablenesses', + 'invulnerably', + 'inwardness', + 'inwardnesses', + 'inwrapping', + 'iodinating', + 'iodination', + 'iodinations', + 'ionicities', + 'ionization', + 'ionizations', + 'ionophores', + 'ionosphere', + 'ionospheres', + 'ionospheric', + 'ionospherically', + 'iontophoreses', + 'iontophoresis', + 'iontophoretic', + 'iontophoretically', + 'ipecacuanha', + 'ipecacuanhas', + 'iproniazid', + 'iproniazids', + 'ipsilateral', + 'ipsilaterally', + 'irascibilities', + 'irascibility', + 'irascibleness', + 'irasciblenesses', + 'iratenesses', + 'irenically', + 'iridescence', + 'iridescences', + 'iridescent', + 'iridescently', + 'iridologies', + 'iridologist', + 'iridologists', + 'iridosmine', + 'iridosmines', + 'irksomeness', + 'irksomenesses', + 'ironfisted', + 'ironhanded', + 'ironhearted', + 'ironically', + 'ironicalness', + 'ironicalnesses', + 'ironmaster', + 'ironmasters', + 'ironmonger', + 'ironmongeries', + 'ironmongers', + 'ironmongery', + 'ironnesses', + 'ironstones', + 'ironworker', + 'ironworkers', + 'irradiance', + 'irradiances', + 'irradiated', + 'irradiates', + 'irradiating', + 'irradiation', + 'irradiations', + 'irradiative', + 'irradiator', + 'irradiators', + 'irradicable', + 'irradicably', + 'irrational', + 'irrationalism', + 'irrationalisms', + 'irrationalist', + 'irrationalistic', + 'irrationalists', + 'irrationalities', + 'irrationality', + 'irrationally', + 'irrationals', + 'irrealities', + 'irreclaimable', + 'irreclaimably', + 'irreconcilabilities', + 'irreconcilability', + 'irreconcilable', + 'irreconcilableness', + 'irreconcilablenesses', + 'irreconcilables', + 'irreconcilably', + 'irrecoverable', + 'irrecoverableness', + 'irrecoverablenesses', + 'irrecoverably', + 'irrecusable', + 'irrecusably', + 'irredeemable', + 'irredeemably', + 'irredentas', + 'irredentism', + 'irredentisms', + 'irredentist', + 'irredentists', + 'irreducibilities', + 'irreducibility', + 'irreducible', + 'irreducibly', + 'irreflexive', + 'irreformabilities', + 'irreformability', + 'irreformable', + 'irrefragabilities', + 'irrefragability', + 'irrefragable', + 'irrefragably', + 'irrefutabilities', + 'irrefutability', + 'irrefutable', + 'irrefutably', + 'irregardless', + 'irregularities', + 'irregularity', + 'irregularly', + 'irregulars', + 'irrelative', + 'irrelatively', + 'irrelevance', + 'irrelevances', + 'irrelevancies', + 'irrelevancy', + 'irrelevant', + 'irrelevantly', + 'irreligion', + 'irreligionist', + 'irreligionists', + 'irreligions', + 'irreligious', + 'irreligiously', + 'irremeable', + 'irremediable', + 'irremediableness', + 'irremediablenesses', + 'irremediably', + 'irremovabilities', + 'irremovability', + 'irremovable', + 'irremovably', + 'irreparable', + 'irreparableness', + 'irreparablenesses', + 'irreparably', + 'irrepealabilities', + 'irrepealability', + 'irrepealable', + 'irreplaceabilities', + 'irreplaceability', + 'irreplaceable', + 'irreplaceableness', + 'irreplaceablenesses', + 'irreplaceably', + 'irrepressibilities', + 'irrepressibility', + 'irrepressible', + 'irrepressibly', + 'irreproachabilities', + 'irreproachability', + 'irreproachable', + 'irreproachableness', + 'irreproachablenesses', + 'irreproachably', + 'irreproducibilities', + 'irreproducibility', + 'irreproducible', + 'irresistibilities', + 'irresistibility', + 'irresistible', + 'irresistibleness', + 'irresistiblenesses', + 'irresistibly', + 'irresoluble', + 'irresolute', + 'irresolutely', + 'irresoluteness', + 'irresolutenesses', + 'irresolution', + 'irresolutions', + 'irresolvable', + 'irrespective', + 'irresponsibilities', + 'irresponsibility', + 'irresponsible', + 'irresponsibleness', + 'irresponsiblenesses', + 'irresponsibles', + 'irresponsibly', + 'irresponsive', + 'irresponsiveness', + 'irresponsivenesses', + 'irretrievabilities', + 'irretrievability', + 'irretrievable', + 'irretrievably', + 'irreverence', + 'irreverences', + 'irreverent', + 'irreverently', + 'irreversibilities', + 'irreversibility', + 'irreversible', + 'irreversibly', + 'irrevocabilities', + 'irrevocability', + 'irrevocable', + 'irrevocableness', + 'irrevocablenesses', + 'irrevocably', + 'irridentas', + 'irrigating', + 'irrigation', + 'irrigations', + 'irrigators', + 'irritabilities', + 'irritability', + 'irritableness', + 'irritablenesses', + 'irritating', + 'irritatingly', + 'irritation', + 'irritations', + 'irritative', + 'irrotational', + 'irruptions', + 'irruptively', + 'isallobaric', + 'isallobars', + 'ischaemias', + 'isentropic', + 'isentropically', + 'isinglasses', + 'isoagglutinin', + 'isoagglutinins', + 'isoalloxazine', + 'isoalloxazines', + 'isoantibodies', + 'isoantibody', + 'isoantigen', + 'isoantigenic', + 'isoantigens', + 'isobutanes', + 'isobutylene', + 'isobutylenes', + 'isocaloric', + 'isocarboxazid', + 'isocarboxazids', + 'isochromosome', + 'isochromosomes', + 'isochronal', + 'isochronally', + 'isochrones', + 'isochronism', + 'isochronisms', + 'isochronous', + 'isochronously', + 'isocracies', + 'isocyanate', + 'isocyanates', + 'isodiametric', + 'isoelectric', + 'isoelectronic', + 'isoelectronically', + 'isoenzymatic', + 'isoenzymes', + 'isoenzymic', + 'isogametes', + 'isogametic', + 'isoglossal', + 'isoglosses', + 'isoglossic', + 'isografted', + 'isografting', + 'isolatable', + 'isolationism', + 'isolationisms', + 'isolationist', + 'isolationists', + 'isolations', + 'isoleucine', + 'isoleucines', + 'isomerases', + 'isomerisms', + 'isomerization', + 'isomerizations', + 'isomerized', + 'isomerizes', + 'isomerizing', + 'isometrically', + 'isometrics', + 'isometries', + 'isomorphic', + 'isomorphically', + 'isomorphism', + 'isomorphisms', + 'isomorphous', + 'isoniazids', + 'isooctanes', + 'isopiestic', + 'isoplethic', + 'isoprenaline', + 'isoprenalines', + 'isoprenoid', + 'isopropyls', + 'isoproterenol', + 'isoproterenols', + 'isosmotically', + 'isospories', + 'isostasies', + 'isostatically', + 'isothermal', + 'isothermally', + 'isotonically', + 'isotonicities', + 'isotonicity', + 'isotopically', + 'isotropies', + 'italianate', + 'italianated', + 'italianates', + 'italianating', + 'italianise', + 'italianised', + 'italianises', + 'italianising', + 'italianize', + 'italianized', + 'italianizes', + 'italianizing', + 'italicised', + 'italicises', + 'italicising', + 'italicization', + 'italicizations', + 'italicized', + 'italicizes', + 'italicizing', + 'itchinesses', + 'itemization', + 'itemizations', + 'iterations', + 'iteratively', + 'ithyphallic', + 'itinerancies', + 'itinerancy', + 'itinerantly', + 'itinerants', + 'itineraries', + 'itinerated', + 'itinerates', + 'itinerating', + 'itineration', + 'itinerations', + 'ivermectin', + 'ivermectins', + 'ivorybills', + 'jabberwockies', + 'jabberwocky', + 'jaborandis', + 'jaboticaba', + 'jaboticabas', + 'jacarandas', + 'jackanapes', + 'jackanapeses', + 'jackasseries', + 'jackassery', + 'jackbooted', + 'jacketless', + 'jackfishes', + 'jackfruits', + 'jackhammer', + 'jackhammered', + 'jackhammering', + 'jackhammers', + 'jackknifed', + 'jackknifes', + 'jackknifing', + 'jackknives', + 'jacklights', + 'jackrabbit', + 'jackrabbits', + 'jackrolled', + 'jackrolling', + 'jackscrews', + 'jacksmelts', + 'jackstraws', + 'jacqueries', + 'jactitation', + 'jactitations', + 'jaculating', + 'jadednesses', + 'jaggedness', + 'jaggednesses', + 'jaggheries', + 'jaguarondi', + 'jaguarondis', + 'jaguarundi', + 'jaguarundis', + 'jailbreaks', + 'jailhouses', + 'jambalayas', + 'janisaries', + 'janissaries', + 'janitorial', + 'janizaries', + 'japanizing', + 'japonaiserie', + 'japonaiseries', + 'jardiniere', + 'jardinieres', + 'jargonistic', + 'jargonized', + 'jargonizes', + 'jargonizing', + 'jarovizing', + 'jasperware', + 'jasperwares', + 'jaundicing', + 'jauntiness', + 'jauntinesses', + 'javelining', + 'jawbonings', + 'jawbreaker', + 'jawbreakers', + 'jayhawkers', + 'jaywalkers', + 'jaywalking', + 'jazzinesses', + 'jealousies', + 'jealousness', + 'jealousnesses', + 'jejuneness', + 'jejunenesses', + 'jejunities', + 'jellifying', + 'jellybeans', + 'jellyfishes', + 'jeopardies', + 'jeoparding', + 'jeopardise', + 'jeopardised', + 'jeopardises', + 'jeopardising', + 'jeopardize', + 'jeopardized', + 'jeopardizes', + 'jeopardizing', + 'jerkinesses', + 'jessamines', + 'jesuitical', + 'jesuitically', + 'jesuitisms', + 'jesuitries', + 'jettisonable', + 'jettisoned', + 'jettisoning', + 'jewelleries', + 'jewelweeds', + 'jimsonweed', + 'jimsonweeds', + 'jingoistic', + 'jingoistically', + 'jinricksha', + 'jinrickshas', + 'jinrikisha', + 'jinrikishas', + 'jitterbugged', + 'jitterbugging', + 'jitterbugs', + 'jitteriest', + 'jitteriness', + 'jitterinesses', + 'jobholders', + 'joblessness', + 'joblessnesses', + 'jockstraps', + 'jocoseness', + 'jocosenesses', + 'jocosities', + 'jocularities', + 'jocularity', + 'jocundities', + 'johnnycake', + 'johnnycakes', + 'johnsongrass', + 'johnsongrasses', + 'jointedness', + 'jointednesses', + 'jointresses', + 'jointuring', + 'jointworms', + 'jokinesses', + 'jollification', + 'jollifications', + 'jollifying', + 'journalese', + 'journaleses', + 'journalism', + 'journalisms', + 'journalist', + 'journalistic', + 'journalistically', + 'journalists', + 'journalize', + 'journalized', + 'journalizer', + 'journalizers', + 'journalizes', + 'journalizing', + 'journeyers', + 'journeying', + 'journeyman', + 'journeymen', + 'journeywork', + 'journeyworks', + 'jovialities', + 'jovialties', + 'joyfullest', + 'joyfulness', + 'joyfulnesses', + 'joylessness', + 'joylessnesses', + 'joyousness', + 'joyousnesses', + 'joypoppers', + 'joypopping', + 'joyridings', + 'jubilances', + 'jubilantly', + 'jubilarian', + 'jubilarians', + 'jubilating', + 'jubilation', + 'jubilations', + 'judgements', + 'judgeships', + 'judgmatical', + 'judgmatically', + 'judgmental', + 'judgmentally', + 'judicatories', + 'judicatory', + 'judicature', + 'judicatures', + 'judicially', + 'judiciaries', + 'judiciously', + 'judiciousness', + 'judiciousnesses', + 'juggernaut', + 'juggernauts', + 'juggleries', + 'jugulating', + 'juiceheads', + 'juicinesses', + 'julienning', + 'jumpinesses', + 'junctional', + 'junglelike', + 'juniorates', + 'junketeers', + 'juridically', + 'jurisconsult', + 'jurisconsults', + 'jurisdiction', + 'jurisdictional', + 'jurisdictionally', + 'jurisdictions', + 'jurisprudence', + 'jurisprudences', + 'jurisprudent', + 'jurisprudential', + 'jurisprudentially', + 'jurisprudents', + 'juristically', + 'justiciabilities', + 'justiciability', + 'justiciable', + 'justiciars', + 'justifiabilities', + 'justifiability', + 'justifiable', + 'justifiably', + 'justification', + 'justifications', + 'justificative', + 'justificatory', + 'justifiers', + 'justifying', + 'justnesses', + 'juvenescence', + 'juvenescences', + 'juvenescent', + 'juvenilities', + 'juvenility', + 'juxtaposed', + 'juxtaposes', + 'juxtaposing', + 'juxtaposition', + 'juxtapositional', + 'juxtapositions', + 'kaffeeklatsch', + 'kaffeeklatsches', + 'kaiserdoms', + 'kaiserisms', + 'kalanchoes', + 'kaleidoscope', + 'kaleidoscopes', + 'kaleidoscopic', + 'kaleidoscopically', + 'kallikrein', + 'kallikreins', + 'kanamycins', + 'kaolinites', + 'kaolinitic', + 'kapellmeister', + 'kapellmeisters', + 'karabiners', + 'karateists', + 'karyogamies', + 'karyokineses', + 'karyokinesis', + 'karyokinetic', + 'karyologic', + 'karyological', + 'karyologies', + 'karyolymph', + 'karyolymphs', + 'karyosomes', + 'karyotyped', + 'karyotypes', + 'karyotypic', + 'karyotypically', + 'karyotyping', + 'katzenjammer', + 'katzenjammers', + 'kazatskies', + 'keelhaling', + 'keelhauled', + 'keelhauling', + 'keennesses', + 'keeshonden', + 'kennelling', + 'kenspeckle', + 'kentledges', + 'keratinization', + 'keratinizations', + 'keratinize', + 'keratinized', + 'keratinizes', + 'keratinizing', + 'keratinophilic', + 'keratinous', + 'keratitides', + 'keratoconjunctivites', + 'keratoconjunctivitides', + 'keratoconjunctivitis', + 'keratoconjunctivitises', + 'keratomata', + 'keratoplasties', + 'keratoplasty', + 'keratotomies', + 'keratotomy', + 'kerchiefed', + 'kerchieves', + 'kerfuffles', + 'kernelling', + 'kerplunked', + 'kerplunking', + 'kerseymere', + 'kerseymeres', + 'kerygmatic', + 'ketogeneses', + 'ketogenesis', + 'ketosteroid', + 'ketosteroids', + 'kettledrum', + 'kettledrums', + 'keyboarded', + 'keyboarder', + 'keyboarders', + 'keyboarding', + 'keyboardist', + 'keyboardists', + 'keybuttons', + 'keypunched', + 'keypuncher', + 'keypunchers', + 'keypunches', + 'keypunching', + 'keystroked', + 'keystrokes', + 'keystroking', + 'kibbitzers', + 'kibbitzing', + 'kibbutznik', + 'kibbutzniks', + 'kickboards', + 'kickboxers', + 'kickboxing', + 'kickboxings', + 'kickstands', + 'kidnappees', + 'kidnappers', + 'kidnapping', + 'kieselguhr', + 'kieselguhrs', + 'kieserites', + 'kilderkins', + 'killifishes', + 'kilocalorie', + 'kilocalories', + 'kilocycles', + 'kilogausses', + 'kilojoules', + 'kiloliters', + 'kilometers', + 'kiloparsec', + 'kiloparsecs', + 'kilopascal', + 'kilopascals', + 'kimberlite', + 'kimberlites', + 'kindergarten', + 'kindergartener', + 'kindergarteners', + 'kindergartens', + 'kindergartner', + 'kindergartners', + 'kindhearted', + 'kindheartedly', + 'kindheartedness', + 'kindheartednesses', + 'kindlessly', + 'kindliness', + 'kindlinesses', + 'kindnesses', + 'kinematical', + 'kinematically', + 'kinematics', + 'kinescoped', + 'kinescopes', + 'kinescoping', + 'kinesiologies', + 'kinesiology', + 'kinestheses', + 'kinesthesia', + 'kinesthesias', + 'kinesthesis', + 'kinesthetic', + 'kinesthetically', + 'kinetically', + 'kineticist', + 'kineticists', + 'kinetochore', + 'kinetochores', + 'kinetoplast', + 'kinetoplasts', + 'kinetoscope', + 'kinetoscopes', + 'kinetosome', + 'kinetosomes', + 'kingcrafts', + 'kingfisher', + 'kingfishers', + 'kingfishes', + 'kingliness', + 'kinglinesses', + 'kingmakers', + 'kinkinesses', + 'kinnikinnick', + 'kinnikinnicks', + 'kitchenette', + 'kitchenettes', + 'kitchenware', + 'kitchenwares', + 'kittenishly', + 'kittenishness', + 'kittenishnesses', + 'kittiwakes', + 'kiwifruits', + 'klebsiella', + 'klebsiellas', + 'kleptomania', + 'kleptomaniac', + 'kleptomaniacs', + 'kleptomanias', + 'klutziness', + 'klutzinesses', + 'knackeries', + 'knackwurst', + 'knackwursts', + 'knapsacked', + 'kneecapped', + 'kneecapping', + 'kneecappings', + 'knickerbocker', + 'knickerbockers', + 'knickknacks', + 'knifepoint', + 'knifepoints', + 'knighthood', + 'knighthoods', + 'knightliness', + 'knightlinesses', + 'knobbliest', + 'knobkerrie', + 'knobkerries', + 'knockabout', + 'knockabouts', + 'knockdowns', + 'knockwurst', + 'knockwursts', + 'knotgrasses', + 'knottiness', + 'knottinesses', + 'knowingest', + 'knowingness', + 'knowingnesses', + 'knowledgeabilities', + 'knowledgeability', + 'knowledgeable', + 'knowledgeableness', + 'knowledgeablenesses', + 'knowledgeably', + 'knowledges', + 'knuckleball', + 'knuckleballer', + 'knuckleballers', + 'knuckleballs', + 'knucklebone', + 'knucklebones', + 'knucklehead', + 'knuckleheaded', + 'knuckleheads', + 'knuckliest', + 'kohlrabies', + 'kolinskies', + 'kolkhoznik', + 'kolkhozniki', + 'kolkhozniks', + 'komondorock', + 'komondorok', + 'kookaburra', + 'kookaburras', + 'kookinesses', + 'kremlinologies', + 'kremlinologist', + 'kremlinologists', + 'kremlinology', + 'krummhorns', + 'kundalinis', + 'kurbashing', + 'kurrajongs', + 'kurtosises', + 'kvetchiest', + 'kwashiorkor', + 'kwashiorkors', + 'kymographic', + 'kymographies', + 'kymographs', + 'kymography', + 'labanotation', + 'labanotations', + 'labialization', + 'labializations', + 'labialized', + 'labializes', + 'labializing', + 'labilities', + 'labiodental', + 'labiodentals', + 'labiovelar', + 'labiovelars', + 'laboratories', + 'laboratory', + 'laboriously', + 'laboriousness', + 'laboriousnesses', + 'laborsaving', + 'labradorite', + 'labradorites', + 'labyrinthian', + 'labyrinthine', + 'labyrinthodont', + 'labyrinthodonts', + 'labyrinths', + 'laccolithic', + 'laccoliths', + 'lacerating', + 'laceration', + 'lacerations', + 'lacerative', + 'lachrymator', + 'lachrymators', + 'lachrymose', + 'lachrymosely', + 'lachrymosities', + 'lachrymosity', + 'lacinesses', + 'laciniation', + 'laciniations', + 'lackadaisical', + 'lackadaisically', + 'lackluster', + 'lacklusters', + 'laconically', + 'lacquerers', + 'lacquering', + 'lacquerware', + 'lacquerwares', + 'lacquerwork', + 'lacquerworks', + 'lacqueying', + 'lacrimation', + 'lacrimations', + 'lacrimator', + 'lacrimators', + 'lactalbumin', + 'lactalbumins', + 'lactational', + 'lactations', + 'lactiferous', + 'lactobacilli', + 'lactobacillus', + 'lactogenic', + 'lactoglobulin', + 'lactoglobulins', + 'lacustrine', + 'ladderlike', + 'ladyfinger', + 'ladyfingers', + 'ladyfishes', + 'laggardness', + 'laggardnesses', + 'lagniappes', + 'lagomorphs', + 'laicization', + 'laicizations', + 'lakefronts', + 'lakeshores', + 'lallygagged', + 'lallygagging', + 'lamaseries', + 'lambasting', + 'lambencies', + 'lambrequin', + 'lambrequins', + 'lamebrained', + 'lamebrains', + 'lamellately', + 'lamellibranch', + 'lamellibranchs', + 'lamellicorn', + 'lamellicorns', + 'lamelliform', + 'lamenesses', + 'lamentable', + 'lamentableness', + 'lamentablenesses', + 'lamentably', + 'lamentation', + 'lamentations', + 'lamentedly', + 'laminarian', + 'laminarians', + 'laminarias', + 'laminarins', + 'laminating', + 'lamination', + 'laminations', + 'laminators', + 'laminitises', + 'lammergeier', + 'lammergeiers', + 'lammergeyer', + 'lammergeyers', + 'lampblacks', + 'lamplighter', + 'lamplighters', + 'lamplights', + 'lampooneries', + 'lampooners', + 'lampoonery', + 'lampooning', + 'lampshells', + 'lanceolate', + 'lancewoods', + 'lancinating', + 'landaulets', + 'landholder', + 'landholders', + 'landholding', + 'landholdings', + 'landladies', + 'landlessness', + 'landlessnesses', + 'landlocked', + 'landlordism', + 'landlordisms', + 'landlubber', + 'landlubberliness', + 'landlubberlinesses', + 'landlubberly', + 'landlubbers', + 'landlubbing', + 'landmasses', + 'landowners', + 'landownership', + 'landownerships', + 'landowning', + 'landownings', + 'landscaped', + 'landscaper', + 'landscapers', + 'landscapes', + 'landscaping', + 'landscapist', + 'landscapists', + 'landslides', + 'landsliding', + 'langbeinite', + 'langbeinites', + 'langlaufer', + 'langlaufers', + 'langostino', + 'langostinos', + 'langoustes', + 'langoustine', + 'langoustines', + 'languidness', + 'languidnesses', + 'languished', + 'languisher', + 'languishers', + 'languishes', + 'languishing', + 'languishingly', + 'languishment', + 'languishments', + 'languorous', + 'languorously', + 'lankinesses', + 'lanknesses', + 'lanosities', + 'lanthanide', + 'lanthanides', + 'lanthanums', + 'lanuginous', + 'laparoscope', + 'laparoscopes', + 'laparoscopic', + 'laparoscopies', + 'laparoscopist', + 'laparoscopists', + 'laparoscopy', + 'laparotomies', + 'laparotomy', + 'lapidarian', + 'lapidaries', + 'lapidating', + 'lapidified', + 'lapidifies', + 'lapidifying', + 'larcenists', + 'larcenously', + 'largehearted', + 'largeheartedness', + 'largeheartednesses', + 'largemouth', + 'largemouths', + 'largenesses', + 'larghettos', + 'larkinesses', + 'larvicidal', + 'larvicides', + 'laryngeals', + 'laryngectomee', + 'laryngectomees', + 'laryngectomies', + 'laryngectomized', + 'laryngectomy', + 'laryngites', + 'laryngitic', + 'laryngitides', + 'laryngitis', + 'laryngitises', + 'laryngologies', + 'laryngology', + 'laryngoscope', + 'laryngoscopes', + 'laryngoscopies', + 'laryngoscopy', + 'lascivious', + 'lasciviously', + 'lasciviousness', + 'lasciviousnesses', + 'lassitudes', + 'lastingness', + 'lastingnesses', + 'latchstring', + 'latchstrings', + 'latecomers', + 'latenesses', + 'latensification', + 'latensifications', + 'lateraling', + 'lateralization', + 'lateralizations', + 'lateralize', + 'lateralized', + 'lateralizes', + 'lateralizing', + 'laterization', + 'laterizations', + 'laterizing', + 'lathyrisms', + 'lathyritic', + 'laticifers', + 'latifundia', + 'latifundio', + 'latifundios', + 'latifundium', + 'latinities', + 'latinization', + 'latinizations', + 'latinizing', + 'latitudinal', + 'latitudinally', + 'latitudinarian', + 'latitudinarianism', + 'latitudinarianisms', + 'latitudinarians', + 'latticework', + 'latticeworks', + 'laudableness', + 'laudablenesses', + 'laudations', + 'laughableness', + 'laughablenesses', + 'laughingly', + 'laughingstock', + 'laughingstocks', + 'launchpads', + 'launderers', + 'launderette', + 'launderettes', + 'laundering', + 'laundresses', + 'laundrette', + 'laundrettes', + 'laundryman', + 'laundrymen', + 'laureateship', + 'laureateships', + 'laureating', + 'laureation', + 'laureations', + 'laurelling', + 'lavalieres', + 'lavalliere', + 'lavallieres', + 'lavatories', + 'lavendered', + 'lavendering', + 'lavishness', + 'lavishnesses', + 'lawbreaker', + 'lawbreakers', + 'lawbreaking', + 'lawbreakings', + 'lawfulness', + 'lawfulnesses', + 'lawlessness', + 'lawlessnesses', + 'lawmakings', + 'lawnmowers', + 'lawrencium', + 'lawrenciums', + 'lawyerings', + 'lawyerlike', + 'laypersons', + 'lazarettes', + 'lazarettos', + 'lazinesses', + 'leachabilities', + 'leachability', + 'leadenness', + 'leadennesses', + 'leaderless', + 'leadership', + 'leaderships', + 'leadplants', + 'leadscrews', + 'leafhopper', + 'leafhoppers', + 'leafleteer', + 'leafleteers', + 'leafleting', + 'leafletted', + 'leafletting', + 'leafstalks', + 'leaguering', + 'leakinesses', + 'leannesses', + 'leapfrogged', + 'leapfrogging', + 'learnedness', + 'learnednesses', + 'leasebacks', + 'leaseholder', + 'leaseholders', + 'leaseholds', + 'leatherback', + 'leatherbacks', + 'leatherette', + 'leatherettes', + 'leathering', + 'leatherleaf', + 'leatherleaves', + 'leatherlike', + 'leatherneck', + 'leathernecks', + 'leatherwood', + 'leatherwoods', + 'leavenings', + 'lebensraum', + 'lebensraums', + 'lecherously', + 'lecherousness', + 'lecherousnesses', + 'lecithinase', + 'lecithinases', + 'lectionaries', + 'lectionary', + 'lectotypes', + 'lectureship', + 'lectureships', + 'lederhosen', + 'legalising', + 'legalistic', + 'legalistically', + 'legalities', + 'legalization', + 'legalizations', + 'legalizers', + 'legalizing', + 'legateship', + 'legateships', + 'legendarily', + 'legendries', + 'legerdemain', + 'legerdemains', + 'legerities', + 'legginesses', + 'legibilities', + 'legibility', + 'legionaries', + 'legionnaire', + 'legionnaires', + 'legislated', + 'legislates', + 'legislating', + 'legislation', + 'legislations', + 'legislative', + 'legislatively', + 'legislatives', + 'legislator', + 'legislatorial', + 'legislators', + 'legislatorship', + 'legislatorships', + 'legislature', + 'legislatures', + 'legitimacies', + 'legitimacy', + 'legitimate', + 'legitimated', + 'legitimately', + 'legitimates', + 'legitimating', + 'legitimation', + 'legitimations', + 'legitimatize', + 'legitimatized', + 'legitimatizes', + 'legitimatizing', + 'legitimator', + 'legitimators', + 'legitimise', + 'legitimised', + 'legitimises', + 'legitimising', + 'legitimism', + 'legitimisms', + 'legitimist', + 'legitimists', + 'legitimization', + 'legitimizations', + 'legitimize', + 'legitimized', + 'legitimizer', + 'legitimizers', + 'legitimizes', + 'legitimizing', + 'leguminous', + 'leishmania', + 'leishmanial', + 'leishmanias', + 'leishmaniases', + 'leishmaniasis', + 'leistering', + 'leisureliness', + 'leisurelinesses', + 'leitmotifs', + 'leitmotivs', + 'lemminglike', + 'lemniscate', + 'lemniscates', + 'lemongrass', + 'lemongrasses', + 'lengthened', + 'lengthener', + 'lengtheners', + 'lengthening', + 'lengthiest', + 'lengthiness', + 'lengthinesses', + 'lengthways', + 'lengthwise', + 'leniencies', + 'lenitively', + 'lentamente', + 'lenticular', + 'lenticules', + 'lentigines', + 'lentissimo', + 'lentivirus', + 'lentiviruses', + 'leopardess', + 'leopardesses', + 'lepidolite', + 'lepidolites', + 'lepidoptera', + 'lepidopteran', + 'lepidopterans', + 'lepidopterist', + 'lepidopterists', + 'lepidopterological', + 'lepidopterologies', + 'lepidopterologist', + 'lepidopterologists', + 'lepidopterology', + 'lepidopterous', + 'leprechaun', + 'leprechaunish', + 'leprechauns', + 'lepromatous', + 'leprosaria', + 'leprosarium', + 'leprosariums', + 'leptocephali', + 'leptocephalus', + 'leptosomes', + 'leptospiral', + 'leptospire', + 'leptospires', + 'leptospiroses', + 'leptospirosis', + 'leptotenes', + 'lesbianism', + 'lesbianisms', + 'lespedezas', + 'lethalities', + 'lethargically', + 'lethargies', + 'letterboxed', + 'letterboxing', + 'letterboxings', + 'letterform', + 'letterforms', + 'letterhead', + 'letterheads', + 'letterings', + 'letterpress', + 'letterpresses', + 'letterspace', + 'letterspaces', + 'letterspacing', + 'letterspacings', + 'leucocidin', + 'leucocidins', + 'leucoplast', + 'leucoplasts', + 'leukaemias', + 'leukaemogeneses', + 'leukaemogenesis', + 'leukemogeneses', + 'leukemogenesis', + 'leukemogenic', + 'leukocytes', + 'leukocytic', + 'leukocytoses', + 'leukocytosis', + 'leukocytosises', + 'leukodystrophies', + 'leukodystrophy', + 'leukopenia', + 'leukopenias', + 'leukopenic', + 'leukoplakia', + 'leukoplakias', + 'leukoplakic', + 'leukopoieses', + 'leukopoiesis', + 'leukopoietic', + 'leukorrhea', + 'leukorrheal', + 'leukorrheas', + 'leukotomies', + 'leukotriene', + 'leukotrienes', + 'levelheaded', + 'levelheadedness', + 'levelheadednesses', + 'levelnesses', + 'leveraging', + 'leviathans', + 'levigating', + 'levigation', + 'levigations', + 'levitating', + 'levitation', + 'levitational', + 'levitations', + 'levorotary', + 'levorotatory', + 'lewdnesses', + 'lexicalisation', + 'lexicalisations', + 'lexicalities', + 'lexicality', + 'lexicalization', + 'lexicalizations', + 'lexicalize', + 'lexicalized', + 'lexicalizes', + 'lexicalizing', + 'lexicographer', + 'lexicographers', + 'lexicographic', + 'lexicographical', + 'lexicographically', + 'lexicographies', + 'lexicography', + 'lexicologies', + 'lexicologist', + 'lexicologists', + 'lexicology', + 'liabilities', + 'libationary', + 'libecchios', + 'libellants', + 'liberalise', + 'liberalised', + 'liberalises', + 'liberalising', + 'liberalism', + 'liberalisms', + 'liberalist', + 'liberalistic', + 'liberalists', + 'liberalities', + 'liberality', + 'liberalization', + 'liberalizations', + 'liberalize', + 'liberalized', + 'liberalizer', + 'liberalizers', + 'liberalizes', + 'liberalizing', + 'liberalness', + 'liberalnesses', + 'liberating', + 'liberation', + 'liberationist', + 'liberationists', + 'liberations', + 'liberators', + 'libertarian', + 'libertarianism', + 'libertarianisms', + 'libertarians', + 'libertinage', + 'libertinages', + 'libertines', + 'libertinism', + 'libertinisms', + 'libidinally', + 'libidinous', + 'libidinously', + 'libidinousness', + 'libidinousnesses', + 'librarians', + 'librarianship', + 'librarianships', + 'librational', + 'librations', + 'librettist', + 'librettists', + 'licensable', + 'licensures', + 'licentiate', + 'licentiates', + 'licentious', + 'licentiously', + 'licentiousness', + 'licentiousnesses', + 'lichenological', + 'lichenologies', + 'lichenologist', + 'lichenologists', + 'lichenology', + 'lickerishly', + 'lickerishness', + 'lickerishnesses', + 'lickspittle', + 'lickspittles', + 'lidocaines', + 'liebfraumilch', + 'liebfraumilchs', + 'lienteries', + 'lieutenancies', + 'lieutenancy', + 'lieutenant', + 'lieutenants', + 'lifebloods', + 'lifeguarded', + 'lifeguarding', + 'lifeguards', + 'lifelessly', + 'lifelessness', + 'lifelessnesses', + 'lifelikeness', + 'lifelikenesses', + 'lifemanship', + 'lifemanships', + 'lifesavers', + 'lifesaving', + 'lifesavings', + 'lifestyles', + 'ligamentous', + 'ligaturing', + 'lightbulbs', + 'lighteners', + 'lightening', + 'lighterage', + 'lighterages', + 'lightering', + 'lightfaced', + 'lightfaces', + 'lightfastness', + 'lightfastnesses', + 'lightheaded', + 'lighthearted', + 'lightheartedly', + 'lightheartedness', + 'lightheartednesses', + 'lighthouse', + 'lighthouses', + 'lightnesses', + 'lightninged', + 'lightnings', + 'lightplane', + 'lightplanes', + 'lightproof', + 'lightships', + 'lightsomely', + 'lightsomeness', + 'lightsomenesses', + 'lighttight', + 'lightweight', + 'lightweights', + 'lightwoods', + 'lignification', + 'lignifications', + 'lignifying', + 'lignocellulose', + 'lignocelluloses', + 'lignocellulosic', + 'lignosulfonate', + 'lignosulfonates', + 'likabilities', + 'likability', + 'likableness', + 'likablenesses', + 'likelihood', + 'likelihoods', + 'likenesses', + 'lilliputian', + 'lilliputians', + 'liltingness', + 'liltingnesses', + 'limberness', + 'limbernesses', + 'limelighted', + 'limelighting', + 'limelights', + 'limestones', + 'limewaters', + 'liminesses', + 'limitation', + 'limitational', + 'limitations', + 'limitative', + 'limitedness', + 'limitednesses', + 'limitingly', + 'limitlessly', + 'limitlessness', + 'limitlessnesses', + 'limitrophe', + 'limnologic', + 'limnological', + 'limnologies', + 'limnologist', + 'limnologists', + 'limousines', + 'limpidities', + 'limpidness', + 'limpidnesses', + 'limpnesses', + 'lincomycin', + 'lincomycins', + 'linealities', + 'lineamental', + 'lineaments', + 'linearised', + 'linearises', + 'linearising', + 'linearities', + 'linearization', + 'linearizations', + 'linearized', + 'linearizes', + 'linearizing', + 'lineations', + 'linebacker', + 'linebackers', + 'linebacking', + 'linebackings', + 'linebreeding', + 'linebreedings', + 'linecaster', + 'linecasters', + 'linecasting', + 'linecastings', + 'linerboard', + 'linerboards', + 'lingeringly', + 'lingonberries', + 'lingonberry', + 'linguistic', + 'linguistical', + 'linguistically', + 'linguistician', + 'linguisticians', + 'linguistics', + 'linoleates', + 'lintwhites', + 'lionfishes', + 'lionhearted', + 'lionization', + 'lionizations', + 'lipogeneses', + 'lipogenesis', + 'lipomatous', + 'lipophilic', + 'lipopolysaccharide', + 'lipopolysaccharides', + 'lipoprotein', + 'lipoproteins', + 'liposuction', + 'liposuctions', + 'lipotropic', + 'lipotropin', + 'lipotropins', + 'lipreading', + 'lipreadings', + 'lipsticked', + 'liquations', + 'liquefaction', + 'liquefactions', + 'liquefiers', + 'liquefying', + 'liquescent', + 'liquidambar', + 'liquidambars', + 'liquidated', + 'liquidates', + 'liquidating', + 'liquidation', + 'liquidations', + 'liquidator', + 'liquidators', + 'liquidities', + 'liquidized', + 'liquidizes', + 'liquidizing', + 'liquidness', + 'liquidnesses', + 'liquifying', + 'liquorices', + 'lissomeness', + 'lissomenesses', + 'listenable', + 'listenership', + 'listenerships', + 'listerioses', + 'listeriosis', + 'listlessly', + 'listlessness', + 'listlessnesses', + 'literacies', + 'literalism', + 'literalisms', + 'literalist', + 'literalistic', + 'literalists', + 'literalities', + 'literality', + 'literalization', + 'literalizations', + 'literalize', + 'literalized', + 'literalizes', + 'literalizing', + 'literalness', + 'literalnesses', + 'literarily', + 'literariness', + 'literarinesses', + 'literately', + 'literateness', + 'literatenesses', + 'literation', + 'literations', + 'literators', + 'literature', + 'literatures', + 'lithenesses', + 'lithification', + 'lithifications', + 'lithifying', + 'lithograph', + 'lithographed', + 'lithographer', + 'lithographers', + 'lithographic', + 'lithographically', + 'lithographies', + 'lithographing', + 'lithographs', + 'lithography', + 'lithologic', + 'lithological', + 'lithologically', + 'lithologies', + 'lithophane', + 'lithophanes', + 'lithophyte', + 'lithophytes', + 'lithopones', + 'lithosphere', + 'lithospheres', + 'lithospheric', + 'lithotomies', + 'lithotripsies', + 'lithotripsy', + 'lithotripter', + 'lithotripters', + 'lithotriptor', + 'lithotriptors', + 'litigating', + 'litigation', + 'litigations', + 'litigators', + 'litigiously', + 'litigiousness', + 'litigiousnesses', + 'litterateur', + 'litterateurs', + 'litterbags', + 'litterbugs', + 'littermate', + 'littermates', + 'littleneck', + 'littlenecks', + 'littleness', + 'littlenesses', + 'liturgical', + 'liturgically', + 'liturgiologies', + 'liturgiologist', + 'liturgiologists', + 'liturgiology', + 'liturgists', + 'livabilities', + 'livability', + 'livableness', + 'livablenesses', + 'liveabilities', + 'liveability', + 'livelihood', + 'livelihoods', + 'liveliness', + 'livelinesses', + 'livenesses', + 'liverishness', + 'liverishnesses', + 'liverworts', + 'liverwurst', + 'liverwursts', + 'livestocks', + 'livetrapped', + 'livetrapping', + 'lividities', + 'lividnesses', + 'livingness', + 'livingnesses', + 'lixiviated', + 'lixiviates', + 'lixiviating', + 'lixiviation', + 'lixiviations', + 'loadmaster', + 'loadmasters', + 'loadstones', + 'loathnesses', + 'loathsomely', + 'loathsomeness', + 'loathsomenesses', + 'lobectomies', + 'loblollies', + 'lobotomies', + 'lobotomise', + 'lobotomised', + 'lobotomises', + 'lobotomising', + 'lobotomize', + 'lobotomized', + 'lobotomizes', + 'lobotomizing', + 'lobscouses', + 'lobstering', + 'lobsterings', + 'lobsterlike', + 'lobsterman', + 'lobstermen', + 'lobulation', + 'lobulations', + 'localising', + 'localities', + 'localizabilities', + 'localizability', + 'localizable', + 'localization', + 'localizations', + 'localizing', + 'locational', + 'locationally', + 'lockkeeper', + 'lockkeepers', + 'locksmithing', + 'locksmithings', + 'locksmiths', + 'lockstitch', + 'lockstitched', + 'lockstitches', + 'lockstitching', + 'locomoting', + 'locomotion', + 'locomotions', + 'locomotive', + 'locomotives', + 'locomotory', + 'loculicidal', + 'locutories', + 'lodestones', + 'lodgements', + 'loftinesses', + 'loganberries', + 'loganberry', + 'logaoedics', + 'logarithmic', + 'logarithmically', + 'logarithms', + 'loggerhead', + 'loggerheads', + 'logicalities', + 'logicality', + 'logicalness', + 'logicalnesses', + 'logicising', + 'logicizing', + 'loginesses', + 'logistical', + 'logistically', + 'logistician', + 'logisticians', + 'lognormalities', + 'lognormality', + 'lognormally', + 'logogrammatic', + 'logographic', + 'logographically', + 'logographs', + 'logogriphs', + 'logomachies', + 'logorrheas', + 'logorrheic', + 'logotypies', + 'logrollers', + 'logrolling', + 'logrollings', + 'loincloths', + 'lollapalooza', + 'lollapaloozas', + 'lollygagged', + 'lollygagging', + 'loneliness', + 'lonelinesses', + 'lonenesses', + 'lonesomely', + 'lonesomeness', + 'lonesomenesses', + 'longanimities', + 'longanimity', + 'longbowman', + 'longbowmen', + 'longevities', + 'longhaired', + 'longheaded', + 'longheadedness', + 'longheadednesses', + 'longhouses', + 'longicorns', + 'longitudes', + 'longitudinal', + 'longitudinally', + 'longleaves', + 'longnesses', + 'longshoreman', + 'longshoremen', + 'longshoring', + 'longshorings', + 'longsighted', + 'longsightedness', + 'longsightednesses', + 'longsomely', + 'longsomeness', + 'longsomenesses', + 'lookalikes', + 'looninesses', + 'loopholing', + 'loosenesses', + 'loosestrife', + 'loosestrifes', + 'lophophore', + 'lophophores', + 'lopsidedly', + 'lopsidedness', + 'lopsidednesses', + 'loquacious', + 'loquaciously', + 'loquaciousness', + 'loquaciousnesses', + 'loquacities', + 'lordliness', + 'lordlinesses', + 'lorgnettes', + 'lornnesses', + 'losableness', + 'losablenesses', + 'lostnesses', + 'lotuslands', + 'loudmouthed', + 'loudmouths', + 'loudnesses', + 'loudspeaker', + 'loudspeakers', + 'loungewear', + 'louseworts', + 'lousinesses', + 'loutishness', + 'loutishnesses', + 'lovabilities', + 'lovability', + 'lovableness', + 'lovablenesses', + 'lovastatin', + 'lovastatins', + 'lovelessly', + 'lovelessness', + 'lovelessnesses', + 'loveliness', + 'lovelinesses', + 'lovelornness', + 'lovelornnesses', + 'lovemaking', + 'lovemakings', + 'lovesickness', + 'lovesicknesses', + 'lovingness', + 'lovingnesses', + 'lowballing', + 'lowercased', + 'lowercases', + 'lowercasing', + 'lowerclassman', + 'lowerclassmen', + 'lowlanders', + 'lowliheads', + 'lowlinesses', + 'loxodromes', + 'lubberliness', + 'lubberlinesses', + 'lubricants', + 'lubricated', + 'lubricates', + 'lubricating', + 'lubrication', + 'lubrications', + 'lubricative', + 'lubricator', + 'lubricators', + 'lubricious', + 'lubriciously', + 'lubricities', + 'lucidities', + 'lucidnesses', + 'luciferase', + 'luciferases', + 'luciferins', + 'luciferous', + 'luckinesses', + 'lucratively', + 'lucrativeness', + 'lucrativenesses', + 'lucubration', + 'lucubrations', + 'luculently', + 'ludicrously', + 'ludicrousness', + 'ludicrousnesses', + 'luftmensch', + 'luftmenschen', + 'lugubrious', + 'lugubriously', + 'lugubriousness', + 'lugubriousnesses', + 'lukewarmly', + 'lukewarmness', + 'lukewarmnesses', + 'lullabying', + 'lumberjack', + 'lumberjacks', + 'lumberyard', + 'lumberyards', + 'lumbosacral', + 'luminaires', + 'luminances', + 'luminarias', + 'luminaries', + 'luminesced', + 'luminescence', + 'luminescences', + 'luminescent', + 'luminesces', + 'luminescing', + 'luminiferous', + 'luminosities', + 'luminosity', + 'luminously', + 'luminousness', + 'luminousnesses', + 'lumpectomies', + 'lumpectomy', + 'lumpenproletariat', + 'lumpenproletariats', + 'lumpfishes', + 'lumpinesses', + 'lumpishness', + 'lumpishnesses', + 'luncheonette', + 'luncheonettes', + 'lunchmeats', + 'lunchrooms', + 'lunchtimes', + 'lungfishes', + 'lunkheaded', + 'luridnesses', + 'lusciously', + 'lusciousness', + 'lusciousnesses', + 'lushnesses', + 'lusterless', + 'lusterware', + 'lusterwares', + 'lustfulness', + 'lustfulnesses', + 'lustihoods', + 'lustinesses', + 'lustrating', + 'lustration', + 'lustrations', + 'lustrously', + 'lustrousness', + 'lustrousnesses', + 'luteinization', + 'luteinizations', + 'luteinized', + 'luteinizes', + 'luteinizing', + 'luteotrophic', + 'luteotrophin', + 'luteotrophins', + 'luteotropic', + 'luteotropin', + 'luteotropins', + 'lutestring', + 'lutestrings', + 'luxuriance', + 'luxuriances', + 'luxuriantly', + 'luxuriated', + 'luxuriates', + 'luxuriating', + 'luxuriously', + 'luxuriousness', + 'luxuriousnesses', + 'lycanthrope', + 'lycanthropes', + 'lycanthropic', + 'lycanthropies', + 'lycanthropy', + 'lycopodium', + 'lycopodiums', + 'lymphadenitis', + 'lymphadenitises', + 'lymphadenopathies', + 'lymphadenopathy', + 'lymphangiogram', + 'lymphangiograms', + 'lymphangiographic', + 'lymphangiographies', + 'lymphangiography', + 'lymphatically', + 'lymphatics', + 'lymphoblast', + 'lymphoblastic', + 'lymphoblasts', + 'lymphocyte', + 'lymphocytes', + 'lymphocytic', + 'lymphocytoses', + 'lymphocytosis', + 'lymphocytosises', + 'lymphogram', + 'lymphograms', + 'lymphogranuloma', + 'lymphogranulomas', + 'lymphogranulomata', + 'lymphogranulomatoses', + 'lymphogranulomatosis', + 'lymphographic', + 'lymphographies', + 'lymphography', + 'lymphokine', + 'lymphokines', + 'lymphomata', + 'lymphomatoses', + 'lymphomatosis', + 'lymphomatous', + 'lymphosarcoma', + 'lymphosarcomas', + 'lymphosarcomata', + 'lyophilise', + 'lyophilised', + 'lyophilises', + 'lyophilising', + 'lyophilization', + 'lyophilizations', + 'lyophilize', + 'lyophilized', + 'lyophilizer', + 'lyophilizers', + 'lyophilizes', + 'lyophilizing', + 'lyricalness', + 'lyricalnesses', + 'lyricising', + 'lyricizing', + 'lysimeters', + 'lysimetric', + 'lysogenicities', + 'lysogenicity', + 'lysogenies', + 'lysogenise', + 'lysogenised', + 'lysogenises', + 'lysogenising', + 'lysogenization', + 'lysogenizations', + 'lysogenize', + 'lysogenized', + 'lysogenizes', + 'lysogenizing', + 'lysolecithin', + 'lysolecithins', + 'macadamias', + 'macadamize', + 'macadamized', + 'macadamizes', + 'macadamizing', + 'macaronics', + 'macaronies', + 'macedoines', + 'macerating', + 'maceration', + 'macerations', + 'macerators', + 'machicolated', + 'machicolation', + 'machicolations', + 'machinabilities', + 'machinability', + 'machinable', + 'machinated', + 'machinates', + 'machinating', + 'machination', + 'machinations', + 'machinator', + 'machinators', + 'machineabilities', + 'machineability', + 'machineable', + 'machinelike', + 'machineries', + 'machinists', + 'macintoshes', + 'mackintosh', + 'mackintoshes', + 'macroaggregate', + 'macroaggregated', + 'macroaggregates', + 'macrobiotic', + 'macrocosmic', + 'macrocosmically', + 'macrocosms', + 'macrocyclic', + 'macrocytes', + 'macrocytic', + 'macrocytoses', + 'macrocytosis', + 'macroeconomic', + 'macroeconomics', + 'macroevolution', + 'macroevolutionary', + 'macroevolutions', + 'macrofossil', + 'macrofossils', + 'macrogamete', + 'macrogametes', + 'macroglobulin', + 'macroglobulinemia', + 'macroglobulinemias', + 'macroglobulinemic', + 'macroglobulins', + 'macroinstruction', + 'macroinstructions', + 'macrolepidoptera', + 'macromeres', + 'macromolecular', + 'macromolecule', + 'macromolecules', + 'macronuclear', + 'macronuclei', + 'macronucleus', + 'macronucleuses', + 'macronutrient', + 'macronutrients', + 'macrophage', + 'macrophages', + 'macrophagic', + 'macrophotograph', + 'macrophotographies', + 'macrophotographs', + 'macrophotography', + 'macrophyte', + 'macrophytes', + 'macrophytic', + 'macropterous', + 'macroscale', + 'macroscales', + 'macroscopic', + 'macroscopically', + 'macrostructural', + 'macrostructure', + 'macrostructures', + 'maculating', + 'maculation', + 'maculations', + 'maddeningly', + 'madeleines', + 'mademoiselle', + 'mademoiselles', + 'madrepores', + 'madreporian', + 'madreporians', + 'madreporic', + 'madreporite', + 'madreporites', + 'madrigalian', + 'madrigalist', + 'madrigalists', + 'madrilenes', + 'maelstroms', + 'mafficking', + 'magazinist', + 'magazinists', + 'magdalenes', + 'magisterial', + 'magisterially', + 'magisterium', + 'magisteriums', + 'magistracies', + 'magistracy', + 'magistrally', + 'magistrate', + 'magistrates', + 'magistratical', + 'magistratically', + 'magistrature', + 'magistratures', + 'magnanimities', + 'magnanimity', + 'magnanimous', + 'magnanimously', + 'magnanimousness', + 'magnanimousnesses', + 'magnesites', + 'magnesiums', + 'magnetically', + 'magnetised', + 'magnetises', + 'magnetising', + 'magnetisms', + 'magnetites', + 'magnetizable', + 'magnetization', + 'magnetizations', + 'magnetized', + 'magnetizer', + 'magnetizers', + 'magnetizes', + 'magnetizing', + 'magnetoelectric', + 'magnetofluiddynamics', + 'magnetograph', + 'magnetographs', + 'magnetohydrodynamic', + 'magnetohydrodynamics', + 'magnetometer', + 'magnetometers', + 'magnetometric', + 'magnetometries', + 'magnetometry', + 'magnetopause', + 'magnetopauses', + 'magnetoresistance', + 'magnetoresistances', + 'magnetosphere', + 'magnetospheres', + 'magnetospheric', + 'magnetostatic', + 'magnetostriction', + 'magnetostrictions', + 'magnetostrictive', + 'magnetostrictively', + 'magnetrons', + 'magnifical', + 'magnifically', + 'magnificat', + 'magnification', + 'magnifications', + 'magnificats', + 'magnificence', + 'magnificences', + 'magnificent', + 'magnificently', + 'magnificoes', + 'magnificos', + 'magnifiers', + 'magnifying', + 'magniloquence', + 'magniloquences', + 'magniloquent', + 'magniloquently', + 'magnitudes', + 'maharajahs', + 'maharanees', + 'maharishis', + 'mahlsticks', + 'mahoganies', + 'maidenhair', + 'maidenhairs', + 'maidenhead', + 'maidenheads', + 'maidenhood', + 'maidenhoods', + 'maidenliness', + 'maidenlinesses', + 'maidservant', + 'maidservants', + 'mailabilities', + 'mailability', + 'mainframes', + 'mainlander', + 'mainlanders', + 'mainlining', + 'mainsheets', + 'mainspring', + 'mainsprings', + 'mainstream', + 'mainstreamed', + 'mainstreaming', + 'mainstreams', + 'maintainabilities', + 'maintainability', + 'maintainable', + 'maintained', + 'maintainer', + 'maintainers', + 'maintaining', + 'maintenance', + 'maintenances', + 'maisonette', + 'maisonettes', + 'majestically', + 'majordomos', + 'majorettes', + 'majoritarian', + 'majoritarianism', + 'majoritarianisms', + 'majoritarians', + 'majorities', + 'majuscular', + 'majuscules', + 'makereadies', + 'makeshifts', + 'makeweight', + 'makeweights', + 'malabsorption', + 'malabsorptions', + 'malachites', + 'malacological', + 'malacologies', + 'malacologist', + 'malacologists', + 'malacology', + 'malacostracan', + 'malacostracans', + 'maladaptation', + 'maladaptations', + 'maladapted', + 'maladaptive', + 'maladjusted', + 'maladjustive', + 'maladjustment', + 'maladjustments', + 'maladminister', + 'maladministered', + 'maladministering', + 'maladministers', + 'maladministration', + 'maladministrations', + 'maladroitly', + 'maladroitness', + 'maladroitnesses', + 'malaguenas', + 'malapertly', + 'malapertness', + 'malapertnesses', + 'malapportioned', + 'malapportionment', + 'malapportionments', + 'malapropian', + 'malapropism', + 'malapropisms', + 'malapropist', + 'malapropists', + 'malapropos', + 'malariologies', + 'malariologist', + 'malariologists', + 'malariology', + 'malathions', + 'malcontent', + 'malcontented', + 'malcontentedly', + 'malcontentedness', + 'malcontentednesses', + 'malcontents', + 'maldistribution', + 'maldistributions', + 'maledicted', + 'maledicting', + 'malediction', + 'maledictions', + 'maledictory', + 'malefaction', + 'malefactions', + 'malefactor', + 'malefactors', + 'maleficence', + 'maleficences', + 'maleficent', + 'malenesses', + 'malevolence', + 'malevolences', + 'malevolent', + 'malevolently', + 'malfeasance', + 'malfeasances', + 'malformation', + 'malformations', + 'malfunction', + 'malfunctioned', + 'malfunctioning', + 'malfunctions', + 'maliciously', + 'maliciousness', + 'maliciousnesses', + 'malignance', + 'malignances', + 'malignancies', + 'malignancy', + 'malignantly', + 'malignities', + 'malingered', + 'malingerer', + 'malingerers', + 'malingering', + 'malleabilities', + 'malleability', + 'malnourished', + 'malnutrition', + 'malnutritions', + 'malocclusion', + 'malocclusions', + 'malodorous', + 'malodorously', + 'malodorousness', + 'malodorousnesses', + 'malolactic', + 'malposition', + 'malpositions', + 'malpractice', + 'malpractices', + 'malpractitioner', + 'malpractitioners', + 'maltreated', + 'maltreater', + 'maltreaters', + 'maltreating', + 'maltreatment', + 'maltreatments', + 'malversation', + 'malversations', + 'mammalians', + 'mammalogies', + 'mammalogist', + 'mammalogists', + 'mammillary', + 'mammillated', + 'mammitides', + 'mammocking', + 'mammograms', + 'mammographic', + 'mammographies', + 'mammography', + 'mammonisms', + 'mammonists', + 'manageabilities', + 'manageability', + 'manageable', + 'manageableness', + 'manageablenesses', + 'manageably', + 'management', + 'managemental', + 'managements', + 'manageress', + 'manageresses', + 'managerial', + 'managerially', + 'managership', + 'managerships', + 'manchineel', + 'manchineels', + 'mandamused', + 'mandamuses', + 'mandamusing', + 'mandarinate', + 'mandarinates', + 'mandarinic', + 'mandarinism', + 'mandarinisms', + 'mandataries', + 'mandatories', + 'mandatorily', + 'mandibular', + 'mandibulate', + 'mandolines', + 'mandolinist', + 'mandolinists', + 'mandragora', + 'mandragoras', + 'maneuverabilities', + 'maneuverability', + 'maneuverable', + 'maneuvered', + 'maneuverer', + 'maneuverers', + 'maneuvering', + 'manfulness', + 'manfulnesses', + 'manganates', + 'manganeses', + 'manganesian', + 'manganites', + 'manginesses', + 'mangosteen', + 'mangosteens', + 'manhandled', + 'manhandles', + 'manhandling', + 'manhattans', + 'maniacally', + 'manicuring', + 'manicurist', + 'manicurists', + 'manifestant', + 'manifestants', + 'manifestation', + 'manifestations', + 'manifested', + 'manifester', + 'manifesters', + 'manifesting', + 'manifestly', + 'manifestoed', + 'manifestoes', + 'manifestoing', + 'manifestos', + 'manifolded', + 'manifolding', + 'manifoldly', + 'manifoldness', + 'manifoldnesses', + 'manipulabilities', + 'manipulability', + 'manipulable', + 'manipulatable', + 'manipulate', + 'manipulated', + 'manipulates', + 'manipulating', + 'manipulation', + 'manipulations', + 'manipulative', + 'manipulatively', + 'manipulativeness', + 'manipulativenesses', + 'manipulator', + 'manipulators', + 'manipulatory', + 'manlinesses', + 'mannequins', + 'mannerisms', + 'manneristic', + 'mannerists', + 'mannerless', + 'mannerliness', + 'mannerlinesses', + 'mannishness', + 'mannishnesses', + 'manoeuvred', + 'manoeuvres', + 'manoeuvring', + 'manometers', + 'manometric', + 'manometrically', + 'manometries', + 'manorialism', + 'manorialisms', + 'manservant', + 'manslaughter', + 'manslaughters', + 'manslayers', + 'mansuetude', + 'mansuetudes', + 'mantelpiece', + 'mantelpieces', + 'mantelshelf', + 'mantelshelves', + 'manticores', + 'manubriums', + 'manufactories', + 'manufactory', + 'manufacture', + 'manufactured', + 'manufacturer', + 'manufacturers', + 'manufactures', + 'manufacturing', + 'manufacturings', + 'manumission', + 'manumissions', + 'manumitted', + 'manumitting', + 'manuscript', + 'manuscripts', + 'manzanitas', + 'mapmakings', + 'maquiladora', + 'maquiladoras', + 'maquillage', + 'maquillages', + 'maraschino', + 'maraschinos', + 'marasmuses', + 'marathoner', + 'marathoners', + 'marathoning', + 'marathonings', + 'marbleised', + 'marbleises', + 'marbleising', + 'marbleized', + 'marbleizes', + 'marbleizing', + 'marcasites', + 'marcelling', + 'marchioness', + 'marchionesses', + 'marchpanes', + 'margarines', + 'margaritas', + 'margarites', + 'margenting', + 'marginalia', + 'marginalities', + 'marginality', + 'marginalization', + 'marginalizations', + 'marginalize', + 'marginalized', + 'marginalizes', + 'marginalizing', + 'marginally', + 'marginated', + 'marginates', + 'marginating', + 'margination', + 'marginations', + 'margravate', + 'margravates', + 'margravial', + 'margraviate', + 'margraviates', + 'margravine', + 'margravines', + 'marguerite', + 'marguerites', + 'mariculture', + 'maricultures', + 'mariculturist', + 'mariculturists', + 'marihuanas', + 'marijuanas', + 'marimbists', + 'marinading', + 'marinating', + 'marination', + 'marinations', + 'marionette', + 'marionettes', + 'markedness', + 'markednesses', + 'marketabilities', + 'marketability', + 'marketable', + 'marketeers', + 'marketings', + 'marketplace', + 'marketplaces', + 'marksmanship', + 'marksmanships', + 'markswoman', + 'markswomen', + 'marlinespike', + 'marlinespikes', + 'marlinspike', + 'marlinspikes', + 'marlstones', + 'marmalades', + 'marmoreally', + 'marquessate', + 'marquessates', + 'marquesses', + 'marqueterie', + 'marqueteries', + 'marquetries', + 'marquisate', + 'marquisates', + 'marquisette', + 'marquisettes', + 'marriageabilities', + 'marriageability', + 'marriageable', + 'marrowbone', + 'marrowbones', + 'marrowfats', + 'marshalcies', + 'marshaling', + 'marshalled', + 'marshalling', + 'marshalship', + 'marshalships', + 'marshiness', + 'marshinesses', + 'marshlands', + 'marshmallow', + 'marshmallows', + 'marshmallowy', + 'marsupials', + 'martensite', + 'martensites', + 'martensitic', + 'martensitically', + 'martingale', + 'martingales', + 'martyrdoms', + 'martyrization', + 'martyrizations', + 'martyrized', + 'martyrizes', + 'martyrizing', + 'martyrologies', + 'martyrologist', + 'martyrologists', + 'martyrology', + 'marvelling', + 'marvellous', + 'marvelously', + 'marvelousness', + 'marvelousnesses', + 'mascaraing', + 'mascarpone', + 'mascarpones', + 'masculinely', + 'masculines', + 'masculinise', + 'masculinised', + 'masculinises', + 'masculinising', + 'masculinities', + 'masculinity', + 'masculinization', + 'masculinizations', + 'masculinize', + 'masculinized', + 'masculinizes', + 'masculinizing', + 'masochisms', + 'masochistic', + 'masochistically', + 'masochists', + 'masquerade', + 'masqueraded', + 'masquerader', + 'masqueraders', + 'masquerades', + 'masquerading', + 'massacrers', + 'massacring', + 'massasauga', + 'massasaugas', + 'masseteric', + 'massiveness', + 'massivenesses', + 'mastectomies', + 'mastectomy', + 'masterfully', + 'masterfulness', + 'masterfulnesses', + 'masterliness', + 'masterlinesses', + 'mastermind', + 'masterminded', + 'masterminding', + 'masterminds', + 'masterpiece', + 'masterpieces', + 'mastership', + 'masterships', + 'mastersinger', + 'mastersingers', + 'masterstroke', + 'masterstrokes', + 'masterwork', + 'masterworks', + 'mastheaded', + 'mastheading', + 'masticated', + 'masticates', + 'masticating', + 'mastication', + 'mastications', + 'masticator', + 'masticatories', + 'masticators', + 'masticatory', + 'mastigophoran', + 'mastigophorans', + 'mastitides', + 'mastodonic', + 'mastodonts', + 'mastoidectomies', + 'mastoidectomy', + 'mastoidites', + 'mastoiditides', + 'mastoiditis', + 'mastoiditises', + 'masturbate', + 'masturbated', + 'masturbates', + 'masturbating', + 'masturbation', + 'masturbations', + 'masturbator', + 'masturbators', + 'masturbatory', + 'matchboard', + 'matchboards', + 'matchbooks', + 'matchboxes', + 'matchlessly', + 'matchlocks', + 'matchmaker', + 'matchmakers', + 'matchmaking', + 'matchmakings', + 'matchstick', + 'matchsticks', + 'matchwoods', + 'materfamilias', + 'materfamiliases', + 'materialise', + 'materialised', + 'materialises', + 'materialising', + 'materialism', + 'materialisms', + 'materialist', + 'materialistic', + 'materialistically', + 'materialists', + 'materialities', + 'materiality', + 'materialization', + 'materializations', + 'materialize', + 'materialized', + 'materializer', + 'materializers', + 'materializes', + 'materializing', + 'materially', + 'materialness', + 'materialnesses', + 'maternalism', + 'maternalisms', + 'maternally', + 'maternities', + 'mateynesses', + 'mathematic', + 'mathematical', + 'mathematically', + 'mathematician', + 'mathematicians', + 'mathematics', + 'mathematization', + 'mathematizations', + 'mathematize', + 'mathematized', + 'mathematizes', + 'mathematizing', + 'matinesses', + 'matriarchal', + 'matriarchate', + 'matriarchates', + 'matriarchies', + 'matriarchs', + 'matriarchy', + 'matricidal', + 'matricides', + 'matriculant', + 'matriculants', + 'matriculate', + 'matriculated', + 'matriculates', + 'matriculating', + 'matriculation', + 'matriculations', + 'matrilineal', + 'matrilineally', + 'matrimonial', + 'matrimonially', + 'matrimonies', + 'matronymic', + 'matronymics', + 'mattrasses', + 'mattresses', + 'maturating', + 'maturation', + 'maturational', + 'maturations', + 'maturities', + 'matutinally', + 'maulsticks', + 'maumetries', + 'maunderers', + 'maundering', + 'mausoleums', + 'mavourneen', + 'mavourneens', + 'mawkishness', + 'mawkishnesses', + 'maxillaries', + 'maxilliped', + 'maxillipeds', + 'maxillofacial', + 'maximalist', + 'maximalists', + 'maximising', + 'maximization', + 'maximizations', + 'maximizers', + 'maximizing', + 'mayflowers', + 'mayonnaise', + 'mayonnaises', + 'mayoralties', + 'mayoresses', + 'mazinesses', + 'meadowland', + 'meadowlands', + 'meadowlark', + 'meadowlarks', + 'meadowsweet', + 'meadowsweets', + 'meagerness', + 'meagernesses', + 'mealymouthed', + 'meandering', + 'meaningful', + 'meaningfully', + 'meaningfulness', + 'meaningfulnesses', + 'meaningless', + 'meaninglessly', + 'meaninglessness', + 'meaninglessnesses', + 'meannesses', + 'meanwhiles', + 'measurabilities', + 'measurability', + 'measurable', + 'measurably', + 'measuredly', + 'measureless', + 'measurement', + 'measurements', + 'meatinesses', + 'meatloaves', + 'meatpacking', + 'meatpackings', + 'mecamylamine', + 'mecamylamines', + 'mechanical', + 'mechanically', + 'mechanicals', + 'mechanician', + 'mechanicians', + 'mechanisms', + 'mechanistic', + 'mechanistically', + 'mechanists', + 'mechanizable', + 'mechanization', + 'mechanizations', + 'mechanized', + 'mechanizer', + 'mechanizers', + 'mechanizes', + 'mechanizing', + 'mechanochemical', + 'mechanochemistries', + 'mechanochemistry', + 'mechanoreception', + 'mechanoreceptions', + 'mechanoreceptive', + 'mechanoreceptor', + 'mechanoreceptors', + 'meclizines', + 'medaillons', + 'medallions', + 'medallists', + 'meddlesome', + 'meddlesomeness', + 'meddlesomenesses', + 'medevacked', + 'medevacking', + 'mediaevals', + 'mediagenic', + 'mediastina', + 'mediastinal', + 'mediastinum', + 'mediational', + 'mediations', + 'mediatrices', + 'mediatrixes', + 'medicament', + 'medicamentous', + 'medicaments', + 'medicating', + 'medication', + 'medications', + 'medicinable', + 'medicinally', + 'medicinals', + 'medicining', + 'medicolegal', + 'medievalism', + 'medievalisms', + 'medievalist', + 'medievalists', + 'medievally', + 'mediocrities', + 'mediocrity', + 'meditating', + 'meditation', + 'meditations', + 'meditative', + 'meditatively', + 'meditativeness', + 'meditativenesses', + 'meditators', + 'mediterranean', + 'mediumistic', + 'mediumship', + 'mediumships', + 'medullated', + 'medulloblastoma', + 'medulloblastomas', + 'medulloblastomata', + 'meeknesses', + 'meerschaum', + 'meerschaums', + 'meetinghouse', + 'meetinghouses', + 'meetnesses', + 'megacities', + 'megacorporation', + 'megacorporations', + 'megacycles', + 'megadeaths', + 'megafaunae', + 'megafaunal', + 'megafaunas', + 'megagamete', + 'megagametes', + 'megagametophyte', + 'megagametophytes', + 'megakaryocyte', + 'megakaryocytes', + 'megakaryocytic', + 'megalithic', + 'megaloblast', + 'megaloblastic', + 'megaloblasts', + 'megalomania', + 'megalomaniac', + 'megalomaniacal', + 'megalomaniacally', + 'megalomaniacs', + 'megalomanias', + 'megalomanic', + 'megalopolis', + 'megalopolises', + 'megalopolitan', + 'megalopolitans', + 'megalopses', + 'megaparsec', + 'megaparsecs', + 'megaphoned', + 'megaphones', + 'megaphonic', + 'megaphoning', + 'megaproject', + 'megaprojects', + 'megascopic', + 'megascopically', + 'megasporangia', + 'megasporangium', + 'megaspores', + 'megasporic', + 'megasporogeneses', + 'megasporogenesis', + 'megasporophyll', + 'megasporophylls', + 'megatonnage', + 'megatonnages', + 'megavitamin', + 'megavitamins', + 'meiotically', + 'melancholia', + 'melancholiac', + 'melancholiacs', + 'melancholias', + 'melancholic', + 'melancholics', + 'melancholies', + 'melancholy', + 'melanistic', + 'melanization', + 'melanizations', + 'melanizing', + 'melanoblast', + 'melanoblasts', + 'melanocyte', + 'melanocytes', + 'melanogeneses', + 'melanogenesis', + 'melanomata', + 'melanophore', + 'melanophores', + 'melanosome', + 'melanosomes', + 'melatonins', + 'meliorated', + 'meliorates', + 'meliorating', + 'melioration', + 'meliorations', + 'meliorative', + 'meliorator', + 'meliorators', + 'meliorisms', + 'melioristic', + 'meliorists', + 'melismatic', + 'mellifluent', + 'mellifluently', + 'mellifluous', + 'mellifluously', + 'mellifluousness', + 'mellifluousnesses', + 'mellophone', + 'mellophones', + 'mellotrons', + 'mellowness', + 'mellownesses', + 'melodically', + 'melodiously', + 'melodiousness', + 'melodiousnesses', + 'melodising', + 'melodizers', + 'melodizing', + 'melodramas', + 'melodramatic', + 'melodramatically', + 'melodramatics', + 'melodramatise', + 'melodramatised', + 'melodramatises', + 'melodramatising', + 'melodramatist', + 'melodramatists', + 'melodramatization', + 'melodramatizations', + 'melodramatize', + 'melodramatized', + 'melodramatizes', + 'melodramatizing', + 'melphalans', + 'meltabilities', + 'meltability', + 'meltwaters', + 'membership', + 'memberships', + 'membranous', + 'membranously', + 'memoirists', + 'memorabilia', + 'memorabilities', + 'memorability', + 'memorableness', + 'memorablenesses', + 'memorandum', + 'memorandums', + 'memorialise', + 'memorialised', + 'memorialises', + 'memorialising', + 'memorialist', + 'memorialists', + 'memorialize', + 'memorialized', + 'memorializes', + 'memorializing', + 'memorially', + 'memorising', + 'memorizable', + 'memorization', + 'memorizations', + 'memorizers', + 'memorizing', + 'menacingly', + 'menadiones', + 'menageries', + 'menarcheal', + 'mendacious', + 'mendaciously', + 'mendaciousness', + 'mendaciousnesses', + 'mendacities', + 'mendelevium', + 'mendeleviums', + 'mendicancies', + 'mendicancy', + 'mendicants', + 'mendicities', + 'meningioma', + 'meningiomas', + 'meningiomata', + 'meningitic', + 'meningitides', + 'meningitis', + 'meningococcal', + 'meningococci', + 'meningococcic', + 'meningococcus', + 'meningoencephalitic', + 'meningoencephalitides', + 'meningoencephalitis', + 'meniscuses', + 'menologies', + 'menopausal', + 'menopauses', + 'menorrhagia', + 'menorrhagias', + 'menservants', + 'menstruate', + 'menstruated', + 'menstruates', + 'menstruating', + 'menstruation', + 'menstruations', + 'menstruums', + 'mensurabilities', + 'mensurability', + 'mensurable', + 'mensuration', + 'mensurations', + 'mentalisms', + 'mentalistic', + 'mentalists', + 'mentalities', + 'mentations', + 'mentholated', + 'mentionable', + 'mentioners', + 'mentioning', + 'mentorship', + 'mentorships', + 'meperidine', + 'meperidines', + 'mephitises', + 'meprobamate', + 'meprobamates', + 'merbromins', + 'mercantile', + 'mercantilism', + 'mercantilisms', + 'mercantilist', + 'mercantilistic', + 'mercantilists', + 'mercaptans', + 'mercaptopurine', + 'mercaptopurines', + 'mercenaries', + 'mercenarily', + 'mercenariness', + 'mercenarinesses', + 'mercerised', + 'mercerises', + 'mercerising', + 'mercerization', + 'mercerizations', + 'mercerized', + 'mercerizes', + 'mercerizing', + 'merchandise', + 'merchandised', + 'merchandiser', + 'merchandisers', + 'merchandises', + 'merchandising', + 'merchandisings', + 'merchandize', + 'merchandized', + 'merchandizes', + 'merchandizing', + 'merchandizings', + 'merchantabilities', + 'merchantability', + 'merchantable', + 'merchanted', + 'merchanting', + 'merchantman', + 'merchantmen', + 'mercifully', + 'mercifulness', + 'mercifulnesses', + 'mercilessly', + 'mercilessness', + 'mercilessnesses', + 'mercurated', + 'mercurates', + 'mercurating', + 'mercuration', + 'mercurations', + 'mercurially', + 'mercurialness', + 'mercurialnesses', + 'mercurials', + 'meretricious', + 'meretriciously', + 'meretriciousness', + 'meretriciousnesses', + 'mergansers', + 'meridional', + 'meridionally', + 'meridionals', + 'meristematic', + 'meristematically', + 'meristically', + 'meritocracies', + 'meritocracy', + 'meritocrat', + 'meritocratic', + 'meritocrats', + 'meritorious', + 'meritoriously', + 'meritoriousness', + 'meritoriousnesses', + 'meroblastic', + 'meroblastically', + 'meromorphic', + 'meromyosin', + 'meromyosins', + 'merozoites', + 'merriments', + 'merrinesses', + 'merrymaker', + 'merrymakers', + 'merrymaking', + 'merrymakings', + 'merrythought', + 'merrythoughts', + 'mesalliance', + 'mesalliances', + 'mescalines', + 'mesdemoiselles', + 'mesembryanthemum', + 'mesembryanthemums', + 'mesencephala', + 'mesencephalic', + 'mesencephalon', + 'mesenchymal', + 'mesenchyme', + 'mesenchymes', + 'mesenteric', + 'mesenteries', + 'mesenteron', + 'meshuggener', + 'meshuggeners', + 'mesmerically', + 'mesmerised', + 'mesmerises', + 'mesmerising', + 'mesmerisms', + 'mesmerists', + 'mesmerized', + 'mesmerizer', + 'mesmerizers', + 'mesmerizes', + 'mesmerizing', + 'mesnalties', + 'mesocyclone', + 'mesocyclones', + 'mesodermal', + 'mesogloeas', + 'mesomorphic', + 'mesomorphies', + 'mesomorphs', + 'mesomorphy', + 'mesonephric', + 'mesonephroi', + 'mesonephros', + 'mesopauses', + 'mesopelagic', + 'mesophyllic', + 'mesophyllous', + 'mesophylls', + 'mesophytes', + 'mesophytic', + 'mesosphere', + 'mesospheres', + 'mesospheric', + 'mesothelia', + 'mesothelial', + 'mesothelioma', + 'mesotheliomas', + 'mesotheliomata', + 'mesothelium', + 'mesothoraces', + 'mesothoracic', + 'mesothorax', + 'mesothoraxes', + 'mesotrophic', + 'messalines', + 'messeigneurs', + 'messengers', + 'messiahship', + 'messiahships', + 'messianism', + 'messianisms', + 'messinesses', + 'mestranols', + 'metabolically', + 'metabolism', + 'metabolisms', + 'metabolite', + 'metabolites', + 'metabolizable', + 'metabolize', + 'metabolized', + 'metabolizes', + 'metabolizing', + 'metacarpal', + 'metacarpals', + 'metacarpus', + 'metacenter', + 'metacenters', + 'metacentric', + 'metacentrics', + 'metacercaria', + 'metacercariae', + 'metacercarial', + 'metachromatic', + 'metaethical', + 'metaethics', + 'metafiction', + 'metafictional', + 'metafictionist', + 'metafictionists', + 'metafictions', + 'metagalactic', + 'metagalaxies', + 'metagalaxy', + 'metageneses', + 'metagenesis', + 'metagenetic', + 'metalanguage', + 'metalanguages', + 'metalinguistic', + 'metalinguistics', + 'metalising', + 'metalizing', + 'metallically', + 'metalliferous', + 'metallization', + 'metallizations', + 'metallized', + 'metallizes', + 'metallizing', + 'metallographer', + 'metallographers', + 'metallographic', + 'metallographically', + 'metallographies', + 'metallography', + 'metalloidal', + 'metalloids', + 'metallophone', + 'metallophones', + 'metallurgical', + 'metallurgically', + 'metallurgies', + 'metallurgist', + 'metallurgists', + 'metallurgy', + 'metalmarks', + 'metalsmith', + 'metalsmiths', + 'metalwares', + 'metalworker', + 'metalworkers', + 'metalworking', + 'metalworkings', + 'metalworks', + 'metamathematical', + 'metamathematics', + 'metamerically', + 'metamerism', + 'metamerisms', + 'metamorphic', + 'metamorphically', + 'metamorphism', + 'metamorphisms', + 'metamorphose', + 'metamorphosed', + 'metamorphoses', + 'metamorphosing', + 'metamorphosis', + 'metanalyses', + 'metanalysis', + 'metanephric', + 'metanephroi', + 'metanephros', + 'metaphases', + 'metaphoric', + 'metaphorical', + 'metaphorically', + 'metaphosphate', + 'metaphosphates', + 'metaphrase', + 'metaphrases', + 'metaphysic', + 'metaphysical', + 'metaphysically', + 'metaphysician', + 'metaphysicians', + 'metaphysics', + 'metaplasia', + 'metaplasias', + 'metaplastic', + 'metapsychological', + 'metapsychologies', + 'metapsychology', + 'metasequoia', + 'metasequoias', + 'metasomatic', + 'metasomatism', + 'metasomatisms', + 'metastabilities', + 'metastability', + 'metastable', + 'metastably', + 'metastases', + 'metastasis', + 'metastasize', + 'metastasized', + 'metastasizes', + 'metastasizing', + 'metastatic', + 'metastatically', + 'metatarsal', + 'metatarsals', + 'metatarsus', + 'metatheses', + 'metathesis', + 'metathetic', + 'metathetical', + 'metathetically', + 'metathoraces', + 'metathoracic', + 'metathorax', + 'metathoraxes', + 'metaxylems', + 'metempsychoses', + 'metempsychosis', + 'metencephala', + 'metencephalic', + 'metencephalon', + 'meteorically', + 'meteorites', + 'meteoritic', + 'meteoritical', + 'meteoriticist', + 'meteoriticists', + 'meteoritics', + 'meteoroidal', + 'meteoroids', + 'meteorologic', + 'meteorological', + 'meteorologically', + 'meteorologies', + 'meteorologist', + 'meteorologists', + 'meteorology', + 'meterstick', + 'metersticks', + 'metestruses', + 'methacrylate', + 'methacrylates', + 'methadones', + 'methamphetamine', + 'methamphetamines', + 'methanation', + 'methanations', + 'methaqualone', + 'methaqualones', + 'methedrine', + 'methedrines', + 'metheglins', + 'methemoglobin', + 'methemoglobinemia', + 'methemoglobinemias', + 'methemoglobins', + 'methenamine', + 'methenamines', + 'methicillin', + 'methicillins', + 'methionine', + 'methionines', + 'methodical', + 'methodically', + 'methodicalness', + 'methodicalnesses', + 'methodised', + 'methodises', + 'methodising', + 'methodisms', + 'methodistic', + 'methodists', + 'methodized', + 'methodizes', + 'methodizing', + 'methodological', + 'methodologically', + 'methodologies', + 'methodologist', + 'methodologists', + 'methodology', + 'methotrexate', + 'methotrexates', + 'methoxychlor', + 'methoxychlors', + 'methoxyflurane', + 'methoxyfluranes', + 'methylamine', + 'methylamines', + 'methylases', + 'methylated', + 'methylates', + 'methylating', + 'methylation', + 'methylations', + 'methylator', + 'methylators', + 'methylcellulose', + 'methylcelluloses', + 'methylcholanthrene', + 'methylcholanthrenes', + 'methyldopa', + 'methyldopas', + 'methylenes', + 'methylmercuries', + 'methylmercury', + 'methylnaphthalene', + 'methylnaphthalenes', + 'methylphenidate', + 'methylphenidates', + 'methylprednisolone', + 'methylprednisolones', + 'methylxanthine', + 'methylxanthines', + 'methysergide', + 'methysergides', + 'meticulosities', + 'meticulosity', + 'meticulous', + 'meticulously', + 'meticulousness', + 'meticulousnesses', + 'metonymical', + 'metonymies', + 'metrically', + 'metrication', + 'metrications', + 'metricized', + 'metricizes', + 'metricizing', + 'metrifying', + 'metritises', + 'metrological', + 'metrologies', + 'metrologist', + 'metrologists', + 'metronidazole', + 'metronidazoles', + 'metronomes', + 'metronomic', + 'metronomical', + 'metronomically', + 'metropolis', + 'metropolises', + 'metropolitan', + 'metropolitans', + 'metrorrhagia', + 'metrorrhagias', + 'mettlesome', + 'mezzanines', + 'mezzotints', + 'miasmically', + 'micrifying', + 'microampere', + 'microamperes', + 'microanalyses', + 'microanalysis', + 'microanalyst', + 'microanalysts', + 'microanalytic', + 'microanalytical', + 'microanatomical', + 'microanatomies', + 'microanatomy', + 'microbalance', + 'microbalances', + 'microbarograph', + 'microbarographs', + 'microbeams', + 'microbiologic', + 'microbiological', + 'microbiologically', + 'microbiologies', + 'microbiologist', + 'microbiologists', + 'microbiology', + 'microbrewer', + 'microbreweries', + 'microbrewers', + 'microbrewery', + 'microbrewing', + 'microbrewings', + 'microbrews', + 'microburst', + 'microbursts', + 'microbuses', + 'microbusses', + 'microcalorimeter', + 'microcalorimeters', + 'microcalorimetric', + 'microcalorimetries', + 'microcalorimetry', + 'microcapsule', + 'microcapsules', + 'microcassette', + 'microcassettes', + 'microcephalic', + 'microcephalics', + 'microcephalies', + 'microcephaly', + 'microchips', + 'microcircuit', + 'microcircuitries', + 'microcircuitry', + 'microcircuits', + 'microcirculation', + 'microcirculations', + 'microcirculatory', + 'microclimate', + 'microclimates', + 'microclimatic', + 'microcline', + 'microclines', + 'micrococcal', + 'micrococci', + 'micrococcus', + 'microcodes', + 'microcomputer', + 'microcomputers', + 'microcopies', + 'microcosmic', + 'microcosmically', + 'microcosmos', + 'microcosmoses', + 'microcosms', + 'microcrystal', + 'microcrystalline', + 'microcrystallinities', + 'microcrystallinity', + 'microcrystals', + 'microcultural', + 'microculture', + 'microcultures', + 'microcurie', + 'microcuries', + 'microcytes', + 'microcytic', + 'microdensitometer', + 'microdensitometers', + 'microdensitometric', + 'microdensitometries', + 'microdensitometry', + 'microdissection', + 'microdissections', + 'microearthquake', + 'microearthquakes', + 'microeconomic', + 'microeconomics', + 'microelectrode', + 'microelectrodes', + 'microelectronic', + 'microelectronically', + 'microelectronics', + 'microelectrophoreses', + 'microelectrophoresis', + 'microelectrophoretic', + 'microelectrophoretically', + 'microelement', + 'microelements', + 'microencapsulate', + 'microencapsulated', + 'microencapsulates', + 'microencapsulating', + 'microencapsulation', + 'microencapsulations', + 'microenvironment', + 'microenvironmental', + 'microenvironments', + 'microevolution', + 'microevolutionary', + 'microevolutions', + 'microfarad', + 'microfarads', + 'microfauna', + 'microfaunae', + 'microfaunal', + 'microfaunas', + 'microfibril', + 'microfibrillar', + 'microfibrils', + 'microfiche', + 'microfiches', + 'microfilament', + 'microfilaments', + 'microfilaria', + 'microfilariae', + 'microfilarial', + 'microfilmable', + 'microfilmed', + 'microfilmer', + 'microfilmers', + 'microfilming', + 'microfilms', + 'microflora', + 'microflorae', + 'microfloral', + 'microfloras', + 'microforms', + 'microfossil', + 'microfossils', + 'microfungi', + 'microfungus', + 'microfunguses', + 'microgamete', + 'microgametes', + 'microgametocyte', + 'microgametocytes', + 'micrograms', + 'micrograph', + 'micrographed', + 'micrographic', + 'micrographically', + 'micrographics', + 'micrographing', + 'micrographs', + 'microgravities', + 'microgravity', + 'microgroove', + 'microgrooves', + 'microhabitat', + 'microhabitats', + 'microimage', + 'microimages', + 'microinches', + 'microinject', + 'microinjected', + 'microinjecting', + 'microinjection', + 'microinjections', + 'microinjects', + 'microinstruction', + 'microinstructions', + 'microlepidoptera', + 'microlepidopterous', + 'microliter', + 'microliters', + 'microlithic', + 'microliths', + 'microluces', + 'microluxes', + 'micromanage', + 'micromanaged', + 'micromanagement', + 'micromanagements', + 'micromanager', + 'micromanagers', + 'micromanages', + 'micromanaging', + 'micromanipulation', + 'micromanipulations', + 'micromanipulator', + 'micromanipulators', + 'micromeres', + 'micrometeorite', + 'micrometeorites', + 'micrometeoritic', + 'micrometeoroid', + 'micrometeoroids', + 'micrometeorological', + 'micrometeorologies', + 'micrometeorologist', + 'micrometeorologists', + 'micrometeorology', + 'micrometer', + 'micrometers', + 'micromethod', + 'micromethods', + 'microminiature', + 'microminiaturization', + 'microminiaturizations', + 'microminiaturized', + 'microminis', + 'micromolar', + 'micromoles', + 'micromorphological', + 'micromorphologies', + 'micromorphology', + 'micronized', + 'micronizes', + 'micronizing', + 'micronuclei', + 'micronucleus', + 'micronucleuses', + 'micronutrient', + 'micronutrients', + 'microorganism', + 'microorganisms', + 'micropaleontologic', + 'micropaleontological', + 'micropaleontologies', + 'micropaleontologist', + 'micropaleontologists', + 'micropaleontology', + 'microparticle', + 'microparticles', + 'microphage', + 'microphages', + 'microphone', + 'microphones', + 'microphonic', + 'microphonics', + 'microphotograph', + 'microphotographer', + 'microphotographers', + 'microphotographic', + 'microphotographies', + 'microphotographs', + 'microphotography', + 'microphotometer', + 'microphotometers', + 'microphotometric', + 'microphotometrically', + 'microphotometries', + 'microphotometry', + 'microphyll', + 'microphyllous', + 'microphylls', + 'microphysical', + 'microphysically', + 'microphysics', + 'micropipet', + 'micropipets', + 'micropipette', + 'micropipettes', + 'microplankton', + 'microplanktons', + 'micropores', + 'microporosities', + 'microporosity', + 'microporous', + 'microprism', + 'microprisms', + 'microprobe', + 'microprobes', + 'microprocessor', + 'microprocessors', + 'microprogram', + 'microprogramming', + 'microprogrammings', + 'microprograms', + 'microprojection', + 'microprojections', + 'microprojector', + 'microprojectors', + 'micropublisher', + 'micropublishers', + 'micropublishing', + 'micropublishings', + 'micropulsation', + 'micropulsations', + 'micropuncture', + 'micropunctures', + 'micropylar', + 'micropyles', + 'microquake', + 'microquakes', + 'microradiograph', + 'microradiographic', + 'microradiographies', + 'microradiographs', + 'microradiography', + 'microreader', + 'microreaders', + 'microreproduction', + 'microreproductions', + 'microscale', + 'microscales', + 'microscope', + 'microscopes', + 'microscopic', + 'microscopical', + 'microscopically', + 'microscopies', + 'microscopist', + 'microscopists', + 'microscopy', + 'microsecond', + 'microseconds', + 'microseism', + 'microseismic', + 'microseismicities', + 'microseismicity', + 'microseisms', + 'microsomal', + 'microsomes', + 'microspectrophotometer', + 'microspectrophotometers', + 'microspectrophotometric', + 'microspectrophotometries', + 'microspectrophotometry', + 'microsphere', + 'microspheres', + 'microspherical', + 'microsporangia', + 'microsporangiate', + 'microsporangium', + 'microspore', + 'microspores', + 'microsporocyte', + 'microsporocytes', + 'microsporogeneses', + 'microsporogenesis', + 'microsporophyll', + 'microsporophylls', + 'microsporous', + 'microstate', + 'microstates', + 'microstructural', + 'microstructure', + 'microstructures', + 'microsurgeries', + 'microsurgery', + 'microsurgical', + 'microswitch', + 'microswitches', + 'microtechnic', + 'microtechnics', + 'microtechnique', + 'microtechniques', + 'microtomes', + 'microtonal', + 'microtonalities', + 'microtonality', + 'microtonally', + 'microtones', + 'microtubular', + 'microtubule', + 'microtubules', + 'microvascular', + 'microvasculature', + 'microvasculatures', + 'microvillar', + 'microvilli', + 'microvillous', + 'microvillus', + 'microvolts', + 'microwatts', + 'microwavable', + 'microwaveable', + 'microwaved', + 'microwaves', + 'microwaving', + 'microworld', + 'microworlds', + 'micrurgies', + 'micturated', + 'micturates', + 'micturating', + 'micturition', + 'micturitions', + 'middlebrow', + 'middlebrows', + 'middleweight', + 'middleweights', + 'middlingly', + 'midfielder', + 'midfielders', + 'midlatitude', + 'midlatitudes', + 'midnightly', + 'midrashoth', + 'midsagittal', + 'midsection', + 'midsections', + 'midshipman', + 'midshipmen', + 'midstories', + 'midstreams', + 'midsummers', + 'midwatches', + 'midwestern', + 'midwiferies', + 'midwinters', + 'mightiness', + 'mightinesses', + 'mignonette', + 'mignonettes', + 'migrainous', + 'migrational', + 'migrations', + 'mildnesses', + 'milestones', + 'militances', + 'militancies', + 'militantly', + 'militantness', + 'militantnesses', + 'militaries', + 'militarily', + 'militarise', + 'militarised', + 'militarises', + 'militarising', + 'militarism', + 'militarisms', + 'militarist', + 'militaristic', + 'militaristically', + 'militarists', + 'militarization', + 'militarizations', + 'militarize', + 'militarized', + 'militarizes', + 'militarizing', + 'militating', + 'militiaman', + 'militiamen', + 'milkfishes', + 'milkinesses', + 'millefiori', + 'millefioris', + 'millefleur', + 'millefleurs', + 'millenarian', + 'millenarianism', + 'millenarianisms', + 'millenarians', + 'millenaries', + 'millennial', + 'millennialism', + 'millennialisms', + 'millennialist', + 'millennialists', + 'millennium', + 'millenniums', + 'millerites', + 'millesimal', + 'millesimally', + 'millesimals', + 'milliampere', + 'milliamperes', + 'milliaries', + 'millicurie', + 'millicuries', + 'millidegree', + 'millidegrees', + 'milligrams', + 'millihenries', + 'millihenry', + 'millihenrys', + 'millilambert', + 'millilamberts', + 'milliliter', + 'milliliters', + 'milliluces', + 'milliluxes', + 'millimeter', + 'millimeters', + 'millimicron', + 'millimicrons', + 'millimolar', + 'millimoles', + 'millineries', + 'millionaire', + 'millionaires', + 'millionairess', + 'millionairesses', + 'millionfold', + 'millionths', + 'milliosmol', + 'milliosmols', + 'millipedes', + 'milliradian', + 'milliradians', + 'milliroentgen', + 'milliroentgens', + 'millisecond', + 'milliseconds', + 'millivolts', + 'milliwatts', + 'millstones', + 'millstream', + 'millstreams', + 'millwright', + 'millwrights', + 'milquetoast', + 'milquetoasts', + 'mimeograph', + 'mimeographed', + 'mimeographing', + 'mimeographs', + 'mimetically', + 'minacities', + 'minaudiere', + 'minaudieres', + 'mincemeats', + 'mindblower', + 'mindblowers', + 'mindedness', + 'mindednesses', + 'mindfulness', + 'mindfulnesses', + 'mindlessly', + 'mindlessness', + 'mindlessnesses', + 'minefields', + 'minelayers', + 'mineralise', + 'mineralised', + 'mineralises', + 'mineralising', + 'mineralizable', + 'mineralization', + 'mineralizations', + 'mineralize', + 'mineralized', + 'mineralizer', + 'mineralizers', + 'mineralizes', + 'mineralizing', + 'mineralocorticoid', + 'mineralocorticoids', + 'mineralogic', + 'mineralogical', + 'mineralogically', + 'mineralogies', + 'mineralogist', + 'mineralogists', + 'mineralogy', + 'minestrone', + 'minestrones', + 'minesweeper', + 'minesweepers', + 'minesweeping', + 'minesweepings', + 'miniatures', + 'miniaturist', + 'miniaturistic', + 'miniaturists', + 'miniaturization', + 'miniaturizations', + 'miniaturize', + 'miniaturized', + 'miniaturizes', + 'miniaturizing', + 'minibikers', + 'minibusses', + 'minicomputer', + 'minicomputers', + 'minicourse', + 'minicourses', + 'minimalism', + 'minimalisms', + 'minimalist', + 'minimalists', + 'minimising', + 'minimization', + 'minimizations', + 'minimizers', + 'minimizing', + 'minischool', + 'minischools', + 'miniscules', + 'miniseries', + 'miniskirted', + 'miniskirts', + 'ministates', + 'ministered', + 'ministerial', + 'ministerially', + 'ministering', + 'ministrant', + 'ministrants', + 'ministration', + 'ministrations', + 'ministries', + 'minnesinger', + 'minnesingers', + 'minorities', + 'minoxidils', + 'minstrelsies', + 'minstrelsy', + 'minuscules', + 'minuteness', + 'minutenesses', + 'miracidial', + 'miracidium', + 'miraculous', + 'miraculously', + 'miraculousness', + 'miraculousnesses', + 'mirinesses', + 'mirrorlike', + 'mirthfully', + 'mirthfulness', + 'mirthfulnesses', + 'mirthlessly', + 'misadapted', + 'misadapting', + 'misaddress', + 'misaddressed', + 'misaddresses', + 'misaddressing', + 'misadjusted', + 'misadjusting', + 'misadjusts', + 'misadministration', + 'misadministrations', + 'misadventure', + 'misadventures', + 'misadvised', + 'misadvises', + 'misadvising', + 'misaligned', + 'misaligning', + 'misalignment', + 'misalignments', + 'misalliance', + 'misalliances', + 'misallocate', + 'misallocated', + 'misallocates', + 'misallocating', + 'misallocation', + 'misallocations', + 'misallying', + 'misaltered', + 'misaltering', + 'misanalyses', + 'misanalysis', + 'misandries', + 'misanthrope', + 'misanthropes', + 'misanthropic', + 'misanthropically', + 'misanthropies', + 'misanthropy', + 'misapplication', + 'misapplications', + 'misapplied', + 'misapplies', + 'misapplying', + 'misappraisal', + 'misappraisals', + 'misapprehend', + 'misapprehended', + 'misapprehending', + 'misapprehends', + 'misapprehension', + 'misapprehensions', + 'misappropriate', + 'misappropriated', + 'misappropriates', + 'misappropriating', + 'misappropriation', + 'misappropriations', + 'misarticulate', + 'misarticulated', + 'misarticulates', + 'misarticulating', + 'misassayed', + 'misassaying', + 'misassemble', + 'misassembled', + 'misassembles', + 'misassembling', + 'misassumption', + 'misassumptions', + 'misatoning', + 'misattribute', + 'misattributed', + 'misattributes', + 'misattributing', + 'misattribution', + 'misattributions', + 'misaverred', + 'misaverring', + 'misawarded', + 'misawarding', + 'misbalance', + 'misbalanced', + 'misbalances', + 'misbalancing', + 'misbecomes', + 'misbecoming', + 'misbeginning', + 'misbegotten', + 'misbehaved', + 'misbehaver', + 'misbehavers', + 'misbehaves', + 'misbehaving', + 'misbehavior', + 'misbehaviors', + 'misbeliefs', + 'misbelieve', + 'misbelieved', + 'misbeliever', + 'misbelievers', + 'misbelieves', + 'misbelieving', + 'misbiasing', + 'misbiassed', + 'misbiasses', + 'misbiassing', + 'misbilling', + 'misbinding', + 'misbranded', + 'misbranding', + 'misbuilding', + 'misbuttoned', + 'misbuttoning', + 'misbuttons', + 'miscalculate', + 'miscalculated', + 'miscalculates', + 'miscalculating', + 'miscalculation', + 'miscalculations', + 'miscalling', + 'miscaption', + 'miscaptioned', + 'miscaptioning', + 'miscaptions', + 'miscarriage', + 'miscarriages', + 'miscarried', + 'miscarries', + 'miscarrying', + 'miscasting', + 'miscatalog', + 'miscataloged', + 'miscataloging', + 'miscatalogs', + 'miscegenation', + 'miscegenational', + 'miscegenations', + 'miscellanea', + 'miscellaneous', + 'miscellaneously', + 'miscellaneousness', + 'miscellaneousnesses', + 'miscellanies', + 'miscellanist', + 'miscellanists', + 'miscellany', + 'mischances', + 'mischannel', + 'mischanneled', + 'mischanneling', + 'mischannelled', + 'mischannelling', + 'mischannels', + 'mischaracterization', + 'mischaracterizations', + 'mischaracterize', + 'mischaracterized', + 'mischaracterizes', + 'mischaracterizing', + 'mischarged', + 'mischarges', + 'mischarging', + 'mischievous', + 'mischievously', + 'mischievousness', + 'mischievousnesses', + 'mischoices', + 'miscibilities', + 'miscibility', + 'miscitation', + 'miscitations', + 'misclaimed', + 'misclaiming', + 'misclassed', + 'misclasses', + 'misclassification', + 'misclassifications', + 'misclassified', + 'misclassifies', + 'misclassify', + 'misclassifying', + 'misclassing', + 'miscoining', + 'miscolored', + 'miscoloring', + 'miscommunication', + 'miscommunications', + 'miscomprehension', + 'miscomprehensions', + 'miscomputation', + 'miscomputations', + 'miscompute', + 'miscomputed', + 'miscomputes', + 'miscomputing', + 'misconceive', + 'misconceived', + 'misconceiver', + 'misconceivers', + 'misconceives', + 'misconceiving', + 'misconception', + 'misconceptions', + 'misconduct', + 'misconducted', + 'misconducting', + 'misconducts', + 'misconnect', + 'misconnected', + 'misconnecting', + 'misconnection', + 'misconnections', + 'misconnects', + 'misconstruction', + 'misconstructions', + 'misconstrue', + 'misconstrued', + 'misconstrues', + 'misconstruing', + 'miscooking', + 'miscopying', + 'miscorrelation', + 'miscorrelations', + 'miscounted', + 'miscounting', + 'miscreants', + 'miscreated', + 'miscreates', + 'miscreating', + 'miscreation', + 'miscreations', + 'miscutting', + 'misdealing', + 'misdeeming', + 'misdefined', + 'misdefines', + 'misdefining', + 'misdemeanant', + 'misdemeanants', + 'misdemeanor', + 'misdemeanors', + 'misdescribe', + 'misdescribed', + 'misdescribes', + 'misdescribing', + 'misdescription', + 'misdescriptions', + 'misdevelop', + 'misdeveloped', + 'misdeveloping', + 'misdevelops', + 'misdiagnose', + 'misdiagnosed', + 'misdiagnoses', + 'misdiagnosing', + 'misdiagnosis', + 'misdialing', + 'misdialled', + 'misdialling', + 'misdirected', + 'misdirecting', + 'misdirection', + 'misdirections', + 'misdirects', + 'misdistribution', + 'misdistributions', + 'misdivision', + 'misdivisions', + 'misdoubted', + 'misdoubting', + 'misdrawing', + 'misdriving', + 'misediting', + 'miseducate', + 'miseducated', + 'miseducates', + 'miseducating', + 'miseducation', + 'miseducations', + 'misemphases', + 'misemphasis', + 'misemphasize', + 'misemphasized', + 'misemphasizes', + 'misemphasizing', + 'misemployed', + 'misemploying', + 'misemployment', + 'misemployments', + 'misemploys', + 'misenrolled', + 'misenrolling', + 'misenrolls', + 'misentered', + 'misentering', + 'misentries', + 'miserableness', + 'miserablenesses', + 'miserables', + 'misericord', + 'misericorde', + 'misericordes', + 'misericords', + 'miserliness', + 'miserlinesses', + 'misesteemed', + 'misesteeming', + 'misesteems', + 'misestimate', + 'misestimated', + 'misestimates', + 'misestimating', + 'misestimation', + 'misestimations', + 'misevaluate', + 'misevaluated', + 'misevaluates', + 'misevaluating', + 'misevaluation', + 'misevaluations', + 'misfeasance', + 'misfeasances', + 'misfeasors', + 'misfielded', + 'misfielding', + 'misfitting', + 'misfocused', + 'misfocuses', + 'misfocusing', + 'misfocussed', + 'misfocusses', + 'misfocussing', + 'misforming', + 'misfortune', + 'misfortunes', + 'misframing', + 'misfunction', + 'misfunctioned', + 'misfunctioning', + 'misfunctions', + 'misgauging', + 'misgivings', + 'misgoverned', + 'misgoverning', + 'misgovernment', + 'misgovernments', + 'misgoverns', + 'misgrading', + 'misgrafted', + 'misgrafting', + 'misgrowing', + 'misguessed', + 'misguesses', + 'misguessing', + 'misguidance', + 'misguidances', + 'misguidedly', + 'misguidedness', + 'misguidednesses', + 'misguiders', + 'misguiding', + 'mishandled', + 'mishandles', + 'mishandling', + 'mishanters', + 'mishearing', + 'mishitting', + 'mishmashes', + 'mishmoshes', + 'misidentification', + 'misidentifications', + 'misidentified', + 'misidentifies', + 'misidentify', + 'misidentifying', + 'misimpression', + 'misimpressions', + 'misinferred', + 'misinferring', + 'misinformation', + 'misinformations', + 'misinformed', + 'misinforming', + 'misinforms', + 'misinterpret', + 'misinterpretation', + 'misinterpretations', + 'misinterpreted', + 'misinterpreting', + 'misinterprets', + 'misinterred', + 'misinterring', + 'misjoinder', + 'misjoinders', + 'misjoining', + 'misjudging', + 'misjudgment', + 'misjudgments', + 'miskeeping', + 'miskicking', + 'misknowing', + 'misknowledge', + 'misknowledges', + 'mislabeled', + 'mislabeling', + 'mislabelled', + 'mislabelling', + 'mislabored', + 'mislaboring', + 'misleaders', + 'misleading', + 'misleadingly', + 'mislearned', + 'mislearning', + 'mislighted', + 'mislighting', + 'mislocated', + 'mislocates', + 'mislocating', + 'mislocation', + 'mislocations', + 'mislodging', + 'mismanaged', + 'mismanagement', + 'mismanagements', + 'mismanages', + 'mismanaging', + 'mismarking', + 'mismarriage', + 'mismarriages', + 'mismatched', + 'mismatches', + 'mismatching', + 'mismeasurement', + 'mismeasurements', + 'mismeeting', + 'misnomered', + 'misogamies', + 'misogamist', + 'misogamists', + 'misogynies', + 'misogynist', + 'misogynistic', + 'misogynists', + 'misologies', + 'misoneisms', + 'misordered', + 'misordering', + 'misorientation', + 'misorientations', + 'misoriented', + 'misorienting', + 'misorients', + 'mispackage', + 'mispackaged', + 'mispackages', + 'mispackaging', + 'mispainted', + 'mispainting', + 'misparsing', + 'misparting', + 'mispatched', + 'mispatches', + 'mispatching', + 'mispenning', + 'misperceive', + 'misperceived', + 'misperceives', + 'misperceiving', + 'misperception', + 'misperceptions', + 'misplacement', + 'misplacements', + 'misplacing', + 'misplanned', + 'misplanning', + 'misplanted', + 'misplanting', + 'misplaying', + 'mispleaded', + 'mispleading', + 'mispointed', + 'mispointing', + 'mispoising', + 'misposition', + 'mispositioned', + 'mispositioning', + 'mispositions', + 'mispricing', + 'misprinted', + 'misprinting', + 'misprision', + 'misprisions', + 'misprizing', + 'misprogram', + 'misprogramed', + 'misprograming', + 'misprogrammed', + 'misprogramming', + 'misprograms', + 'mispronounce', + 'mispronounced', + 'mispronounces', + 'mispronouncing', + 'mispronunciation', + 'mispronunciations', + 'misquotation', + 'misquotations', + 'misquoting', + 'misraising', + 'misreading', + 'misreckoned', + 'misreckoning', + 'misreckons', + 'misrecollection', + 'misrecollections', + 'misrecorded', + 'misrecording', + 'misrecords', + 'misreference', + 'misreferences', + 'misreferred', + 'misreferring', + 'misregister', + 'misregistered', + 'misregistering', + 'misregisters', + 'misregistration', + 'misregistrations', + 'misrelated', + 'misrelates', + 'misrelating', + 'misrelying', + 'misremember', + 'misremembered', + 'misremembering', + 'misremembers', + 'misrendered', + 'misrendering', + 'misrenders', + 'misreported', + 'misreporting', + 'misreports', + 'misrepresent', + 'misrepresentation', + 'misrepresentations', + 'misrepresentative', + 'misrepresented', + 'misrepresenting', + 'misrepresents', + 'misrouting', + 'misseating', + 'missending', + 'missetting', + 'misshapenly', + 'misshaping', + 'missileers', + 'missileman', + 'missilemen', + 'missileries', + 'missilries', + 'missiologies', + 'missiology', + 'missionaries', + 'missionary', + 'missioners', + 'missioning', + 'missionization', + 'missionizations', + 'missionize', + 'missionized', + 'missionizer', + 'missionizers', + 'missionizes', + 'missionizing', + 'missorting', + 'missounded', + 'missounding', + 'misspacing', + 'misspeaking', + 'misspelled', + 'misspelling', + 'misspellings', + 'misspending', + 'misstarted', + 'misstarting', + 'misstatement', + 'misstatements', + 'misstating', + 'missteered', + 'missteering', + 'misstopped', + 'misstopping', + 'misstricken', + 'misstrikes', + 'misstriking', + 'misstyling', + 'missuiting', + 'mistakable', + 'mistakenly', + 'misteaches', + 'misteaching', + 'mistending', + 'misterming', + 'misthinking', + 'misthought', + 'misthrowing', + 'mistinesses', + 'mistitling', + 'mistletoes', + 'mistouched', + 'mistouches', + 'mistouching', + 'mistracing', + 'mistrained', + 'mistraining', + 'mistranscribe', + 'mistranscribed', + 'mistranscribes', + 'mistranscribing', + 'mistranscription', + 'mistranscriptions', + 'mistranslate', + 'mistranslated', + 'mistranslates', + 'mistranslating', + 'mistranslation', + 'mistranslations', + 'mistreated', + 'mistreating', + 'mistreatment', + 'mistreatments', + 'mistresses', + 'mistrusted', + 'mistrustful', + 'mistrustfully', + 'mistrustfulness', + 'mistrustfulnesses', + 'mistrusting', + 'mistrysted', + 'mistrysting', + 'mistutored', + 'mistutoring', + 'misunderstand', + 'misunderstanding', + 'misunderstandings', + 'misunderstands', + 'misunderstood', + 'misutilization', + 'misutilizations', + 'misvaluing', + 'misvocalization', + 'misvocalizations', + 'miswording', + 'miswriting', + 'miswritten', + 'miterworts', + 'mithridate', + 'mithridates', + 'mitigating', + 'mitigation', + 'mitigations', + 'mitigative', + 'mitigators', + 'mitigatory', + 'mitochondria', + 'mitochondrial', + 'mitochondrion', + 'mitogenicities', + 'mitogenicity', + 'mitomycins', + 'mitotically', + 'mitreworts', + 'mittimuses', + 'mixologies', + 'mixologist', + 'mixologists', + 'mizzenmast', + 'mizzenmasts', + 'mnemonically', + 'mobilising', + 'mobilities', + 'mobilization', + 'mobilizations', + 'mobilizing', + 'mobocracies', + 'mobocratic', + 'mockingbird', + 'mockingbirds', + 'modalities', + 'moderately', + 'moderateness', + 'moderatenesses', + 'moderating', + 'moderation', + 'moderations', + 'moderators', + 'moderatorship', + 'moderatorships', + 'modernisation', + 'modernisations', + 'modernised', + 'modernises', + 'modernising', + 'modernisms', + 'modernistic', + 'modernists', + 'modernities', + 'modernization', + 'modernizations', + 'modernized', + 'modernizer', + 'modernizers', + 'modernizes', + 'modernizing', + 'modernness', + 'modernnesses', + 'modifiabilities', + 'modifiability', + 'modifiable', + 'modification', + 'modifications', + 'modillions', + 'modishness', + 'modishnesses', + 'modulabilities', + 'modulability', + 'modularities', + 'modularity', + 'modularized', + 'modulating', + 'modulation', + 'modulations', + 'modulators', + 'modulatory', + 'moisteners', + 'moistening', + 'moistnesses', + 'moisturise', + 'moisturised', + 'moisturises', + 'moisturising', + 'moisturize', + 'moisturized', + 'moisturizer', + 'moisturizers', + 'moisturizes', + 'moisturizing', + 'molalities', + 'molarities', + 'molasseses', + 'moldboards', + 'moldinesses', + 'molecularly', + 'molestation', + 'molestations', + 'mollification', + 'mollifications', + 'mollifying', + 'molluscicidal', + 'molluscicide', + 'molluscicides', + 'mollycoddle', + 'mollycoddled', + 'mollycoddler', + 'mollycoddlers', + 'mollycoddles', + 'mollycoddling', + 'molybdates', + 'molybdenite', + 'molybdenites', + 'molybdenum', + 'molybdenums', + 'momentarily', + 'momentariness', + 'momentarinesses', + 'momentously', + 'momentousness', + 'momentousnesses', + 'monachisms', + 'monadelphous', + 'monadnocks', + 'monandries', + 'monarchial', + 'monarchical', + 'monarchically', + 'monarchies', + 'monarchism', + 'monarchisms', + 'monarchist', + 'monarchists', + 'monasteries', + 'monastically', + 'monasticism', + 'monasticisms', + 'monaurally', + 'monestrous', + 'monetarily', + 'monetarism', + 'monetarisms', + 'monetarist', + 'monetarists', + 'monetising', + 'monetization', + 'monetizations', + 'monetizing', + 'moneygrubbing', + 'moneygrubbings', + 'moneylender', + 'moneylenders', + 'moneymaker', + 'moneymakers', + 'moneymaking', + 'moneymakings', + 'moneyworts', + 'mongolisms', + 'mongoloids', + 'mongrelization', + 'mongrelizations', + 'mongrelize', + 'mongrelized', + 'mongrelizes', + 'mongrelizing', + 'moniliases', + 'moniliasis', + 'moniliform', + 'monitorial', + 'monitories', + 'monitoring', + 'monitorship', + 'monitorships', + 'monkeypods', + 'monkeyshine', + 'monkeyshines', + 'monkfishes', + 'monkshoods', + 'monoacidic', + 'monoaminergic', + 'monoamines', + 'monocarboxylic', + 'monocarpic', + 'monochasia', + 'monochasial', + 'monochasium', + 'monochords', + 'monochromat', + 'monochromatic', + 'monochromatically', + 'monochromaticities', + 'monochromaticity', + 'monochromatism', + 'monochromatisms', + 'monochromator', + 'monochromators', + 'monochromats', + 'monochrome', + 'monochromes', + 'monochromic', + 'monochromist', + 'monochromists', + 'monoclines', + 'monoclinic', + 'monoclonal', + 'monoclonals', + 'monocoques', + 'monocotyledon', + 'monocotyledonous', + 'monocotyledons', + 'monocracies', + 'monocratic', + 'monocrystal', + 'monocrystalline', + 'monocrystals', + 'monocularly', + 'monoculars', + 'monocultural', + 'monoculture', + 'monocultures', + 'monocyclic', + 'monodically', + 'monodisperse', + 'monodramas', + 'monodramatic', + 'monoecious', + 'monoecisms', + 'monoesters', + 'monofilament', + 'monofilaments', + 'monogamies', + 'monogamist', + 'monogamists', + 'monogamous', + 'monogamously', + 'monogastric', + 'monogenean', + 'monogeneans', + 'monogeneses', + 'monogenesis', + 'monogenetic', + 'monogenically', + 'monogenies', + 'monoglyceride', + 'monoglycerides', + 'monogramed', + 'monograming', + 'monogrammatic', + 'monogrammed', + 'monogrammer', + 'monogrammers', + 'monogramming', + 'monographed', + 'monographic', + 'monographing', + 'monographs', + 'monogynies', + 'monogynous', + 'monohybrid', + 'monohybrids', + 'monohydric', + 'monohydroxy', + 'monolayers', + 'monolingual', + 'monolinguals', + 'monolithic', + 'monolithically', + 'monologies', + 'monologist', + 'monologists', + 'monologues', + 'monologuist', + 'monologuists', + 'monomaniac', + 'monomaniacal', + 'monomaniacally', + 'monomaniacs', + 'monomanias', + 'monometallic', + 'monometallism', + 'monometallisms', + 'monometallist', + 'monometallists', + 'monometers', + 'monomolecular', + 'monomolecularly', + 'monomorphemic', + 'monomorphic', + 'monomorphism', + 'monomorphisms', + 'mononuclear', + 'mononuclears', + 'mononucleate', + 'mononucleated', + 'mononucleoses', + 'mononucleosis', + 'mononucleosises', + 'mononucleotide', + 'mononucleotides', + 'monophagies', + 'monophagous', + 'monophonic', + 'monophonically', + 'monophonies', + 'monophthong', + 'monophthongal', + 'monophthongs', + 'monophyletic', + 'monophylies', + 'monoplanes', + 'monoploids', + 'monopodial', + 'monopodially', + 'monopodies', + 'monopolies', + 'monopolise', + 'monopolised', + 'monopolises', + 'monopolising', + 'monopolist', + 'monopolistic', + 'monopolistically', + 'monopolists', + 'monopolization', + 'monopolizations', + 'monopolize', + 'monopolized', + 'monopolizer', + 'monopolizers', + 'monopolizes', + 'monopolizing', + 'monopropellant', + 'monopropellants', + 'monopsonies', + 'monopsonistic', + 'monorchidism', + 'monorchidisms', + 'monorchids', + 'monorhymed', + 'monorhymes', + 'monosaccharide', + 'monosaccharides', + 'monosomics', + 'monosomies', + 'monospecific', + 'monospecificities', + 'monospecificity', + 'monosteles', + 'monostelic', + 'monostelies', + 'monosyllabic', + 'monosyllabically', + 'monosyllabicities', + 'monosyllabicity', + 'monosyllable', + 'monosyllables', + 'monosynaptic', + 'monosynaptically', + 'monoterpene', + 'monoterpenes', + 'monotheism', + 'monotheisms', + 'monotheist', + 'monotheistic', + 'monotheistical', + 'monotheistically', + 'monotheists', + 'monotonically', + 'monotonicities', + 'monotonicity', + 'monotonies', + 'monotonous', + 'monotonously', + 'monotonousness', + 'monotonousnesses', + 'monotremes', + 'monounsaturate', + 'monounsaturated', + 'monounsaturates', + 'monovalent', + 'monozygotic', + 'monseigneur', + 'monsignori', + 'monsignorial', + 'monsignors', + 'monstrance', + 'monstrances', + 'monstrosities', + 'monstrosity', + 'monstrously', + 'monstrousness', + 'monstrousnesses', + 'montadales', + 'montagnard', + 'montagnards', + 'montmorillonite', + 'montmorillonites', + 'montmorillonitic', + 'monumental', + 'monumentalities', + 'monumentality', + 'monumentalize', + 'monumentalized', + 'monumentalizes', + 'monumentalizing', + 'monumentally', + 'monzonites', + 'moodinesses', + 'mooncalves', + 'moonfishes', + 'moonflower', + 'moonflowers', + 'moonlighted', + 'moonlighter', + 'moonlighters', + 'moonlighting', + 'moonlights', + 'moonquakes', + 'moonscapes', + 'moonshiner', + 'moonshiners', + 'moonshines', + 'moonstones', + 'moonstruck', + 'moralising', + 'moralistic', + 'moralistically', + 'moralities', + 'moralization', + 'moralizations', + 'moralizers', + 'moralizing', + 'moratorium', + 'moratoriums', + 'morbidities', + 'morbidness', + 'morbidnesses', + 'mordancies', + 'mordanting', + 'morganatic', + 'morganatically', + 'morganites', + 'moribundities', + 'moribundity', + 'moronically', + 'moronities', + 'moroseness', + 'morosenesses', + 'morosities', + 'morphactin', + 'morphactins', + 'morphallaxes', + 'morphallaxis', + 'morphemically', + 'morphemics', + 'morphinism', + 'morphinisms', + 'morphogeneses', + 'morphogenesis', + 'morphogenetic', + 'morphogenetically', + 'morphogenic', + 'morphogens', + 'morphologic', + 'morphological', + 'morphologically', + 'morphologies', + 'morphologist', + 'morphologists', + 'morphology', + 'morphometric', + 'morphometrically', + 'morphometries', + 'morphometry', + 'morphophonemics', + 'morselling', + 'mortadella', + 'mortadellas', + 'mortalities', + 'mortarboard', + 'mortarboards', + 'mortarless', + 'mortgagees', + 'mortgagers', + 'mortgaging', + 'mortgagors', + 'morticians', + 'mortification', + 'mortifications', + 'mortifying', + 'mortuaries', + 'morulation', + 'morulations', + 'mosaically', + 'mosaicisms', + 'mosaicists', + 'mosaicking', + 'mosaiclike', + 'mosquitoes', + 'mosquitoey', + 'mossbacked', + 'mothballed', + 'mothballing', + 'motherboard', + 'motherboards', + 'motherfucker', + 'motherfuckers', + 'motherfucking', + 'motherhood', + 'motherhoods', + 'motherhouse', + 'motherhouses', + 'motherland', + 'motherlands', + 'motherless', + 'motherlessness', + 'motherlessnesses', + 'motherliness', + 'motherlinesses', + 'mothproofed', + 'mothproofer', + 'mothproofers', + 'mothproofing', + 'mothproofs', + 'motilities', + 'motionless', + 'motionlessly', + 'motionlessness', + 'motionlessnesses', + 'motivating', + 'motivation', + 'motivational', + 'motivationally', + 'motivations', + 'motivative', + 'motivators', + 'motiveless', + 'motivelessly', + 'motivities', + 'motocrosses', + 'motoneuron', + 'motoneuronal', + 'motoneurons', + 'motorbiked', + 'motorbikes', + 'motorbiking', + 'motorboater', + 'motorboaters', + 'motorboating', + 'motorboatings', + 'motorboats', + 'motorbuses', + 'motorbusses', + 'motorcaded', + 'motorcades', + 'motorcading', + 'motorcycle', + 'motorcycled', + 'motorcycles', + 'motorcycling', + 'motorcyclist', + 'motorcyclists', + 'motorically', + 'motorising', + 'motorization', + 'motorizations', + 'motorizing', + 'motormouth', + 'motormouths', + 'motortruck', + 'motortrucks', + 'mouldering', + 'mountaineer', + 'mountaineering', + 'mountaineerings', + 'mountaineers', + 'mountainous', + 'mountainously', + 'mountainousness', + 'mountainousnesses', + 'mountainside', + 'mountainsides', + 'mountaintop', + 'mountaintops', + 'mountebank', + 'mountebanked', + 'mountebankeries', + 'mountebankery', + 'mountebanking', + 'mountebanks', + 'mournfuller', + 'mournfullest', + 'mournfully', + 'mournfulness', + 'mournfulnesses', + 'mourningly', + 'mousetrapped', + 'mousetrapping', + 'mousetraps', + 'mousinesses', + 'mousseline', + 'mousselines', + 'moustaches', + 'moustachio', + 'moustachios', + 'mouthbreeder', + 'mouthbreeders', + 'mouthparts', + 'mouthpiece', + 'mouthpieces', + 'mouthwashes', + 'mouthwatering', + 'mouthwateringly', + 'movabilities', + 'movability', + 'movableness', + 'movablenesses', + 'movelessly', + 'movelessness', + 'movelessnesses', + 'moviegoers', + 'moviegoing', + 'moviegoings', + 'moviemaker', + 'moviemakers', + 'moviemaking', + 'moviemakings', + 'mozzarella', + 'mozzarellas', + 'mridangams', + 'muchnesses', + 'mucidities', + 'mucilaginous', + 'mucilaginously', + 'muckamucks', + 'muckrakers', + 'muckraking', + 'mucocutaneous', + 'mucopeptide', + 'mucopeptides', + 'mucopolysaccharide', + 'mucopolysaccharides', + 'mucoprotein', + 'mucoproteins', + 'mucosities', + 'mudcapping', + 'muddinesses', + 'muddleheaded', + 'muddleheadedly', + 'muddleheadedness', + 'muddleheadednesses', + 'mudpuppies', + 'mudskipper', + 'mudskippers', + 'mudslinger', + 'mudslingers', + 'mudslinging', + 'mudslingings', + 'mugginesses', + 'mujahedeen', + 'mujahideen', + 'mulberries', + 'muliebrities', + 'muliebrity', + 'mulishness', + 'mulishnesses', + 'mullahisms', + 'mulligatawnies', + 'mulligatawny', + 'mullioning', + 'multiagency', + 'multiarmed', + 'multiauthor', + 'multiaxial', + 'multibarrel', + 'multibarreled', + 'multibillion', + 'multibillionaire', + 'multibillionaires', + 'multibillions', + 'multibladed', + 'multibranched', + 'multibuilding', + 'multicampus', + 'multicarbon', + 'multicausal', + 'multicelled', + 'multicellular', + 'multicellularities', + 'multicellularity', + 'multicenter', + 'multichain', + 'multichambered', + 'multichannel', + 'multichannels', + 'multicharacter', + 'multiclient', + 'multicoated', + 'multicolor', + 'multicolored', + 'multicolors', + 'multicolumn', + 'multicomponent', + 'multiconductor', + 'multicounty', + 'multicourse', + 'multicourses', + 'multicultural', + 'multiculturalism', + 'multiculturalisms', + 'multicurie', + 'multicurrency', + 'multidialectal', + 'multidimensional', + 'multidimensionalities', + 'multidimensionality', + 'multidirectional', + 'multidisciplinary', + 'multidiscipline', + 'multidisciplines', + 'multidivisional', + 'multidomain', + 'multielectrode', + 'multielement', + 'multiemployer', + 'multiengine', + 'multiengines', + 'multienzyme', + 'multiethnic', + 'multifaceted', + 'multifactor', + 'multifactorial', + 'multifactorially', + 'multifamily', + 'multifarious', + 'multifariousness', + 'multifariousnesses', + 'multifilament', + 'multifilaments', + 'multiflash', + 'multifocal', + 'multiformities', + 'multiformity', + 'multifrequency', + 'multifunction', + 'multifunctional', + 'multigenerational', + 'multigenic', + 'multigrade', + 'multigrain', + 'multigrains', + 'multigroup', + 'multihandicapped', + 'multiheaded', + 'multihospital', + 'multihulls', + 'multilateral', + 'multilateralism', + 'multilateralisms', + 'multilateralist', + 'multilateralists', + 'multilaterally', + 'multilayer', + 'multilayered', + 'multilevel', + 'multileveled', + 'multilingual', + 'multilingualism', + 'multilingualisms', + 'multilingually', + 'multilobed', + 'multimanned', + 'multimedia', + 'multimedias', + 'multimegaton', + 'multimegatons', + 'multimegawatt', + 'multimegawatts', + 'multimember', + 'multimetallic', + 'multimillennial', + 'multimillion', + 'multimillionaire', + 'multimillionaires', + 'multimillions', + 'multimodal', + 'multimolecular', + 'multination', + 'multinational', + 'multinationals', + 'multinomial', + 'multinomials', + 'multinuclear', + 'multinucleate', + 'multinucleated', + 'multiorgasmic', + 'multipaned', + 'multiparameter', + 'multiparous', + 'multiparticle', + 'multipartite', + 'multiparty', + 'multiphase', + 'multiphasic', + 'multiphoton', + 'multipicture', + 'multipiece', + 'multipiston', + 'multiplant', + 'multiplayer', + 'multiplets', + 'multiplexed', + 'multiplexer', + 'multiplexers', + 'multiplexes', + 'multiplexing', + 'multiplexor', + 'multiplexors', + 'multiplicand', + 'multiplicands', + 'multiplication', + 'multiplications', + 'multiplicative', + 'multiplicatively', + 'multiplicities', + 'multiplicity', + 'multiplied', + 'multiplier', + 'multipliers', + 'multiplies', + 'multiplying', + 'multipolar', + 'multipolarities', + 'multipolarity', + 'multipotential', + 'multipower', + 'multiproblem', + 'multiprocessing', + 'multiprocessings', + 'multiprocessor', + 'multiprocessors', + 'multiproduct', + 'multiprogramming', + 'multiprogrammings', + 'multipronged', + 'multipurpose', + 'multiracial', + 'multiracialism', + 'multiracialisms', + 'multirange', + 'multiregional', + 'multireligious', + 'multiscreen', + 'multisense', + 'multisensory', + 'multiservice', + 'multisided', + 'multiskilled', + 'multisource', + 'multispecies', + 'multispectral', + 'multispeed', + 'multisport', + 'multistage', + 'multistate', + 'multistemmed', + 'multistoried', + 'multistory', + 'multistranded', + 'multisyllabic', + 'multisystem', + 'multitalented', + 'multitasking', + 'multitaskings', + 'multiterminal', + 'multitiered', + 'multitowered', + 'multitrack', + 'multitracked', + 'multitracking', + 'multitracks', + 'multitrillion', + 'multitrillions', + 'multitudes', + 'multitudinous', + 'multitudinously', + 'multitudinousness', + 'multitudinousnesses', + 'multiunion', + 'multivalence', + 'multivalences', + 'multivalent', + 'multivalents', + 'multivariable', + 'multivariate', + 'multiversities', + 'multiversity', + 'multivitamin', + 'multivitamins', + 'multivoltine', + 'multivolume', + 'multiwarhead', + 'multiwavelength', + 'mummichogs', + 'mummification', + 'mummifications', + 'mummifying', + 'mundaneness', + 'mundanenesses', + 'mundanities', + 'mundunguses', + 'municipalities', + 'municipality', + 'municipalization', + 'municipalizations', + 'municipalize', + 'municipalized', + 'municipalizes', + 'municipalizing', + 'municipally', + 'municipals', + 'munificence', + 'munificences', + 'munificent', + 'munificently', + 'munitioned', + 'munitioning', + 'murderesses', + 'murderously', + 'murderousness', + 'murderousnesses', + 'murkinesses', + 'murmurously', + 'murthering', + 'muscadines', + 'muscarines', + 'muscarinic', + 'musclebound', + 'muscovites', + 'muscularities', + 'muscularity', + 'muscularly', + 'musculature', + 'musculatures', + 'musculoskeletal', + 'museological', + 'museologies', + 'museologist', + 'museologists', + 'mushinesses', + 'mushroomed', + 'mushrooming', + 'musicalise', + 'musicalised', + 'musicalises', + 'musicalising', + 'musicalities', + 'musicality', + 'musicalization', + 'musicalizations', + 'musicalize', + 'musicalized', + 'musicalizes', + 'musicalizing', + 'musicianly', + 'musicianship', + 'musicianships', + 'musicological', + 'musicologies', + 'musicologist', + 'musicologists', + 'musicology', + 'muskellunge', + 'musketeers', + 'musketries', + 'muskinesses', + 'muskmelons', + 'musquashes', + 'mussinesses', + 'mustachioed', + 'mustachios', + 'mustinesses', + 'mutabilities', + 'mutability', + 'mutageneses', + 'mutagenesis', + 'mutagenically', + 'mutagenicities', + 'mutagenicity', + 'mutational', + 'mutationally', + 'mutenesses', + 'mutilating', + 'mutilation', + 'mutilations', + 'mutilators', + 'mutineered', + 'mutineering', + 'mutinously', + 'mutinousness', + 'mutinousnesses', + 'muttonchops', + 'muttonfish', + 'muttonfishes', + 'mutualisms', + 'mutualistic', + 'mutualists', + 'mutualities', + 'mutualization', + 'mutualizations', + 'mutualized', + 'mutualizes', + 'mutualizing', + 'muzzinesses', + 'myasthenia', + 'myasthenias', + 'myasthenic', + 'myasthenics', + 'mycetomata', + 'mycetomatous', + 'mycetophagous', + 'mycetozoan', + 'mycetozoans', + 'mycobacteria', + 'mycobacterial', + 'mycobacterium', + 'mycoflorae', + 'mycofloras', + 'mycological', + 'mycologically', + 'mycologies', + 'mycologist', + 'mycologists', + 'mycophagies', + 'mycophagist', + 'mycophagists', + 'mycophagous', + 'mycophiles', + 'mycoplasma', + 'mycoplasmal', + 'mycoplasmas', + 'mycoplasmata', + 'mycorrhiza', + 'mycorrhizae', + 'mycorrhizal', + 'mycorrhizas', + 'mycotoxins', + 'mydriatics', + 'myelencephala', + 'myelencephalic', + 'myelencephalon', + 'myelinated', + 'myelitides', + 'myeloblast', + 'myeloblastic', + 'myeloblasts', + 'myelocytes', + 'myelocytic', + 'myelofibroses', + 'myelofibrosis', + 'myelofibrotic', + 'myelogenous', + 'myelomatous', + 'myelopathic', + 'myelopathies', + 'myelopathy', + 'myeloproliferative', + 'myocardial', + 'myocarditis', + 'myocarditises', + 'myocardium', + 'myoclonuses', + 'myoelectric', + 'myoelectrical', + 'myofibrillar', + 'myofibrils', + 'myofilament', + 'myofilaments', + 'myoglobins', + 'myoinositol', + 'myoinositols', + 'myopathies', + 'myopically', + 'myositises', + 'myosotises', + 'myrmecological', + 'myrmecologies', + 'myrmecologist', + 'myrmecologists', + 'myrmecology', + 'myrmecophile', + 'myrmecophiles', + 'myrmecophilous', + 'myrobalans', + 'mystagogies', + 'mystagogue', + 'mystagogues', + 'mysterious', + 'mysteriously', + 'mysteriousness', + 'mysteriousnesses', + 'mystically', + 'mysticisms', + 'mystification', + 'mystifications', + 'mystifiers', + 'mystifying', + 'mystifyingly', + 'mythically', + 'mythicized', + 'mythicizer', + 'mythicizers', + 'mythicizes', + 'mythicizing', + 'mythmakers', + 'mythmaking', + 'mythmakings', + 'mythographer', + 'mythographers', + 'mythographies', + 'mythography', + 'mythologer', + 'mythologers', + 'mythologic', + 'mythological', + 'mythologically', + 'mythologies', + 'mythologist', + 'mythologists', + 'mythologize', + 'mythologized', + 'mythologizer', + 'mythologizers', + 'mythologizes', + 'mythologizing', + 'mythomania', + 'mythomaniac', + 'mythomaniacs', + 'mythomanias', + 'mythopoeia', + 'mythopoeias', + 'mythopoeic', + 'mythopoetic', + 'mythopoetical', + 'myxedematous', + 'myxomatoses', + 'myxomatosis', + 'myxomatosises', + 'myxomatous', + 'myxomycete', + 'myxomycetes', + 'myxoviruses', + 'naboberies', + 'nabobesses', + 'nailbrushes', + 'naivenesses', + 'nakednesses', + 'nalorphine', + 'nalorphines', + 'naltrexone', + 'naltrexones', + 'namelessly', + 'namelessness', + 'namelessnesses', + 'nameplates', + 'nannoplankton', + 'nannoplanktons', + 'nanometers', + 'nanosecond', + 'nanoseconds', + 'nanotechnologies', + 'nanotechnology', + 'nanoteslas', + 'naphthalene', + 'naphthalenes', + 'naphthenes', + 'naphthenic', + 'naphthylamine', + 'naphthylamines', + 'naprapathies', + 'naprapathy', + 'narcissism', + 'narcissisms', + 'narcissist', + 'narcissistic', + 'narcissists', + 'narcissuses', + 'narcolepsies', + 'narcolepsy', + 'narcoleptic', + 'narcoleptics', + 'narcotically', + 'narcotized', + 'narcotizes', + 'narcotizing', + 'narrational', + 'narrations', + 'narratively', + 'narratives', + 'narratological', + 'narratologies', + 'narratologist', + 'narratologists', + 'narratology', + 'narrowband', + 'narrowcasting', + 'narrowcastings', + 'narrowness', + 'narrownesses', + 'nasalising', + 'nasalities', + 'nasalization', + 'nasalizations', + 'nasalizing', + 'nascencies', + 'nasogastric', + 'nasopharyngeal', + 'nasopharynges', + 'nasopharynx', + 'nasopharynxes', + 'nastinesses', + 'nasturtium', + 'nasturtiums', + 'natalities', + 'natatorial', + 'natatorium', + 'natatoriums', + 'nationalise', + 'nationalised', + 'nationalises', + 'nationalising', + 'nationalism', + 'nationalisms', + 'nationalist', + 'nationalistic', + 'nationalistically', + 'nationalists', + 'nationalities', + 'nationality', + 'nationalization', + 'nationalizations', + 'nationalize', + 'nationalized', + 'nationalizer', + 'nationalizers', + 'nationalizes', + 'nationalizing', + 'nationally', + 'nationhood', + 'nationhoods', + 'nationwide', + 'nativeness', + 'nativenesses', + 'nativistic', + 'nativities', + 'natriureses', + 'natriuresis', + 'natriuretic', + 'natriuretics', + 'natrolites', + 'nattinesses', + 'naturalise', + 'naturalised', + 'naturalises', + 'naturalising', + 'naturalism', + 'naturalisms', + 'naturalist', + 'naturalistic', + 'naturalistically', + 'naturalists', + 'naturalization', + 'naturalizations', + 'naturalize', + 'naturalized', + 'naturalizes', + 'naturalizing', + 'naturalness', + 'naturalnesses', + 'naturopath', + 'naturopathic', + 'naturopathies', + 'naturopaths', + 'naturopathy', + 'naughtiest', + 'naughtiness', + 'naughtinesses', + 'naumachiae', + 'naumachias', + 'naumachies', + 'nauseating', + 'nauseatingly', + 'nauseously', + 'nauseousness', + 'nauseousnesses', + 'nautically', + 'nautiloids', + 'nautiluses', + 'naviculars', + 'navigabilities', + 'navigability', + 'navigating', + 'navigation', + 'navigational', + 'navigationally', + 'navigations', + 'navigators', + 'nazification', + 'nazifications', + 'nearnesses', + 'nearsighted', + 'nearsightedly', + 'nearsightedness', + 'nearsightednesses', + 'neatnesses', + 'nebenkerns', + 'nebulising', + 'nebulization', + 'nebulizations', + 'nebulizers', + 'nebulizing', + 'nebulosities', + 'nebulosity', + 'nebulously', + 'nebulousness', + 'nebulousnesses', + 'necessaries', + 'necessarily', + 'necessitarian', + 'necessitarianism', + 'necessitarianisms', + 'necessitarians', + 'necessitate', + 'necessitated', + 'necessitates', + 'necessitating', + 'necessitation', + 'necessitations', + 'necessities', + 'necessitous', + 'necessitously', + 'necessitousness', + 'necessitousnesses', + 'neckerchief', + 'neckerchiefs', + 'neckerchieves', + 'necrological', + 'necrologies', + 'necrologist', + 'necrologists', + 'necromancer', + 'necromancers', + 'necromancies', + 'necromancy', + 'necromantic', + 'necromantically', + 'necrophagous', + 'necrophilia', + 'necrophiliac', + 'necrophiliacs', + 'necrophilias', + 'necrophilic', + 'necrophilism', + 'necrophilisms', + 'necropoleis', + 'necropoles', + 'necropolis', + 'necropolises', + 'necropsied', + 'necropsies', + 'necropsying', + 'necrotizing', + 'nectarines', + 'needfulness', + 'needfulnesses', + 'needinesses', + 'needlefish', + 'needlefishes', + 'needlelike', + 'needlepoint', + 'needlepoints', + 'needlessly', + 'needlessness', + 'needlessnesses', + 'needlewoman', + 'needlewomen', + 'needlework', + 'needleworker', + 'needleworkers', + 'needleworks', + 'nefariously', + 'negational', + 'negatively', + 'negativeness', + 'negativenesses', + 'negativing', + 'negativism', + 'negativisms', + 'negativist', + 'negativistic', + 'negativists', + 'negativities', + 'negativity', + 'neglecters', + 'neglectful', + 'neglectfully', + 'neglectfulness', + 'neglectfulnesses', + 'neglecting', + 'negligence', + 'negligences', + 'negligently', + 'negligibilities', + 'negligibility', + 'negligible', + 'negligibly', + 'negotiabilities', + 'negotiability', + 'negotiable', + 'negotiants', + 'negotiated', + 'negotiates', + 'negotiating', + 'negotiation', + 'negotiations', + 'negotiator', + 'negotiators', + 'negotiatory', + 'negritudes', + 'negrophobe', + 'negrophobes', + 'negrophobia', + 'negrophobias', + 'neighbored', + 'neighborhood', + 'neighborhoods', + 'neighboring', + 'neighborliness', + 'neighborlinesses', + 'neighborly', + 'neighboured', + 'neighbouring', + 'neighbours', + 'nematicidal', + 'nematicide', + 'nematicides', + 'nematocidal', + 'nematocide', + 'nematocides', + 'nematocyst', + 'nematocysts', + 'nematological', + 'nematologies', + 'nematologist', + 'nematologists', + 'nematology', + 'nemerteans', + 'nemertines', + 'nemophilas', + 'neoclassic', + 'neoclassical', + 'neoclassicism', + 'neoclassicisms', + 'neoclassicist', + 'neoclassicists', + 'neocolonial', + 'neocolonialism', + 'neocolonialisms', + 'neocolonialist', + 'neocolonialists', + 'neoconservatism', + 'neoconservatisms', + 'neoconservative', + 'neoconservatives', + 'neocortexes', + 'neocortical', + 'neocortices', + 'neodymiums', + 'neoliberal', + 'neoliberalism', + 'neoliberalisms', + 'neoliberals', + 'neologisms', + 'neologistic', + 'neonatally', + 'neonatologies', + 'neonatologist', + 'neonatologists', + 'neonatology', + 'neoorthodox', + 'neoorthodoxies', + 'neoorthodoxy', + 'neophiliac', + 'neophiliacs', + 'neophilias', + 'neoplasias', + 'neoplastic', + 'neoplasticism', + 'neoplasticisms', + 'neoplasticist', + 'neoplasticists', + 'neorealism', + 'neorealisms', + 'neorealist', + 'neorealistic', + 'neorealists', + 'neostigmine', + 'neostigmines', + 'neotropics', + 'nepenthean', + 'nephelines', + 'nephelinic', + 'nephelinite', + 'nephelinites', + 'nephelinitic', + 'nephelites', + 'nephelometer', + 'nephelometers', + 'nephelometric', + 'nephelometrically', + 'nephelometries', + 'nephelometry', + 'nephoscope', + 'nephoscopes', + 'nephrectomies', + 'nephrectomize', + 'nephrectomized', + 'nephrectomizes', + 'nephrectomizing', + 'nephrectomy', + 'nephridial', + 'nephridium', + 'nephritides', + 'nephrologies', + 'nephrologist', + 'nephrologists', + 'nephrology', + 'nephropathic', + 'nephropathies', + 'nephropathy', + 'nephrostome', + 'nephrostomes', + 'nephrotics', + 'nephrotoxic', + 'nephrotoxicities', + 'nephrotoxicity', + 'nepotistic', + 'neptuniums', + 'nervations', + 'nervelessly', + 'nervelessness', + 'nervelessnesses', + 'nervinesses', + 'nervosities', + 'nervousness', + 'nervousnesses', + 'nesciences', + 'nethermost', + 'netherworld', + 'netherworlds', + 'netminders', + 'nettlesome', + 'networking', + 'networkings', + 'neuralgias', + 'neuraminidase', + 'neuraminidases', + 'neurasthenia', + 'neurasthenias', + 'neurasthenic', + 'neurasthenically', + 'neurasthenics', + 'neurilemma', + 'neurilemmal', + 'neurilemmas', + 'neuritides', + 'neuritises', + 'neuroactive', + 'neuroanatomic', + 'neuroanatomical', + 'neuroanatomies', + 'neuroanatomist', + 'neuroanatomists', + 'neuroanatomy', + 'neurobiological', + 'neurobiologies', + 'neurobiologist', + 'neurobiologists', + 'neurobiology', + 'neuroblastoma', + 'neuroblastomas', + 'neuroblastomata', + 'neurochemical', + 'neurochemicals', + 'neurochemist', + 'neurochemistries', + 'neurochemistry', + 'neurochemists', + 'neurodegenerative', + 'neuroendocrine', + 'neuroendocrinological', + 'neuroendocrinologies', + 'neuroendocrinologist', + 'neuroendocrinologists', + 'neuroendocrinology', + 'neurofibril', + 'neurofibrillary', + 'neurofibrils', + 'neurofibroma', + 'neurofibromas', + 'neurofibromata', + 'neurofibromatoses', + 'neurofibromatosis', + 'neurofibromatosises', + 'neurogenic', + 'neurogenically', + 'neuroglial', + 'neuroglias', + 'neurohormonal', + 'neurohormone', + 'neurohormones', + 'neurohumor', + 'neurohumoral', + 'neurohumors', + 'neurohypophyseal', + 'neurohypophyses', + 'neurohypophysial', + 'neurohypophysis', + 'neuroleptic', + 'neuroleptics', + 'neurologic', + 'neurological', + 'neurologically', + 'neurologies', + 'neurologist', + 'neurologists', + 'neuromuscular', + 'neuropathic', + 'neuropathically', + 'neuropathies', + 'neuropathologic', + 'neuropathological', + 'neuropathologies', + 'neuropathologist', + 'neuropathologists', + 'neuropathology', + 'neuropathy', + 'neuropeptide', + 'neuropeptides', + 'neuropharmacologic', + 'neuropharmacological', + 'neuropharmacologies', + 'neuropharmacologist', + 'neuropharmacologists', + 'neuropharmacology', + 'neurophysiologic', + 'neurophysiological', + 'neurophysiologically', + 'neurophysiologies', + 'neurophysiologist', + 'neurophysiologists', + 'neurophysiology', + 'neuropsychiatric', + 'neuropsychiatrically', + 'neuropsychiatries', + 'neuropsychiatrist', + 'neuropsychiatrists', + 'neuropsychiatry', + 'neuropsychological', + 'neuropsychologies', + 'neuropsychologist', + 'neuropsychologists', + 'neuropsychology', + 'neuropteran', + 'neuropterans', + 'neuropterous', + 'neuroradiological', + 'neuroradiologies', + 'neuroradiologist', + 'neuroradiologists', + 'neuroradiology', + 'neuroscience', + 'neurosciences', + 'neuroscientific', + 'neuroscientist', + 'neuroscientists', + 'neurosecretion', + 'neurosecretions', + 'neurosecretory', + 'neurosensory', + 'neurospora', + 'neurosporas', + 'neurosurgeon', + 'neurosurgeons', + 'neurosurgeries', + 'neurosurgery', + 'neurosurgical', + 'neurotically', + 'neuroticism', + 'neuroticisms', + 'neurotoxic', + 'neurotoxicities', + 'neurotoxicity', + 'neurotoxin', + 'neurotoxins', + 'neurotransmission', + 'neurotransmissions', + 'neurotransmitter', + 'neurotransmitters', + 'neurotropic', + 'neurulation', + 'neurulations', + 'neutralise', + 'neutralised', + 'neutralises', + 'neutralising', + 'neutralism', + 'neutralisms', + 'neutralist', + 'neutralistic', + 'neutralists', + 'neutralities', + 'neutrality', + 'neutralization', + 'neutralizations', + 'neutralize', + 'neutralized', + 'neutralizer', + 'neutralizers', + 'neutralizes', + 'neutralizing', + 'neutralness', + 'neutralnesses', + 'neutrinoless', + 'neutrophil', + 'neutrophilic', + 'neutrophils', + 'nevertheless', + 'newfangled', + 'newfangledness', + 'newfanglednesses', + 'newmarkets', + 'newsagents', + 'newsbreaks', + 'newscaster', + 'newscasters', + 'newsdealer', + 'newsdealers', + 'newshounds', + 'newsinesses', + 'newsletter', + 'newsletters', + 'newsmagazine', + 'newsmagazines', + 'newsmonger', + 'newsmongers', + 'newspapered', + 'newspapering', + 'newspaperman', + 'newspapermen', + 'newspapers', + 'newspaperwoman', + 'newspaperwomen', + 'newspeople', + 'newsperson', + 'newspersons', + 'newsprints', + 'newsreader', + 'newsreaders', + 'newsstands', + 'newsweeklies', + 'newsweekly', + 'newsworthiness', + 'newsworthinesses', + 'newsworthy', + 'newswriting', + 'newswritings', + 'niacinamide', + 'niacinamides', + 'nialamides', + 'niccolites', + 'nicenesses', + 'nickeliferous', + 'nickelling', + 'nickelodeon', + 'nickelodeons', + 'nicknamers', + 'nicknaming', + 'nicotianas', + 'nicotinamide', + 'nicotinamides', + 'nictitated', + 'nictitates', + 'nictitating', + 'nidicolous', + 'nidification', + 'nidifications', + 'nidifugous', + 'nifedipine', + 'nifedipines', + 'niggarding', + 'niggardliness', + 'niggardlinesses', + 'nigglingly', + 'nighnesses', + 'nightclothes', + 'nightclubbed', + 'nightclubber', + 'nightclubbers', + 'nightclubbing', + 'nightclubs', + 'nightdress', + 'nightdresses', + 'nightfalls', + 'nightglows', + 'nightgowns', + 'nighthawks', + 'nightingale', + 'nightingales', + 'nightlifes', + 'nightmares', + 'nightmarish', + 'nightmarishly', + 'nightscope', + 'nightscopes', + 'nightshade', + 'nightshades', + 'nightshirt', + 'nightshirts', + 'nightsides', + 'nightspots', + 'nightstand', + 'nightstands', + 'nightstick', + 'nightsticks', + 'nighttimes', + 'nightwalker', + 'nightwalkers', + 'nigrifying', + 'nihilistic', + 'nihilities', + 'nimbleness', + 'nimblenesses', + 'nimbostrati', + 'nimbostratus', + 'nincompoop', + 'nincompooperies', + 'nincompoopery', + 'nincompoops', + 'nineteenth', + 'nineteenths', + 'ninetieths', + 'ninhydrins', + 'ninnyhammer', + 'ninnyhammers', + 'nippinesses', + 'nitpickers', + 'nitpickier', + 'nitpickiest', + 'nitpicking', + 'nitrations', + 'nitrification', + 'nitrifications', + 'nitrifiers', + 'nitrifying', + 'nitrobenzene', + 'nitrobenzenes', + 'nitrocellulose', + 'nitrocelluloses', + 'nitrofuran', + 'nitrofurans', + 'nitrogenase', + 'nitrogenases', + 'nitrogenous', + 'nitroglycerin', + 'nitroglycerine', + 'nitroglycerines', + 'nitroglycerins', + 'nitromethane', + 'nitromethanes', + 'nitroparaffin', + 'nitroparaffins', + 'nitrosamine', + 'nitrosamines', + 'nobilities', + 'noblenesses', + 'noblewoman', + 'noblewomen', + 'nociceptive', + 'noctambulist', + 'noctambulists', + 'nocturnally', + 'nodalities', + 'nodosities', + 'nodulation', + 'nodulations', + 'noiselessly', + 'noisemaker', + 'noisemakers', + 'noisemaking', + 'noisemakings', + 'noisinesses', + 'noisomeness', + 'noisomenesses', + 'nomarchies', + 'nomenclator', + 'nomenclatorial', + 'nomenclators', + 'nomenclatural', + 'nomenclature', + 'nomenclatures', + 'nominalism', + 'nominalisms', + 'nominalist', + 'nominalistic', + 'nominalists', + 'nominating', + 'nomination', + 'nominations', + 'nominative', + 'nominatives', + 'nominators', + 'nomographic', + 'nomographies', + 'nomographs', + 'nomography', + 'nomological', + 'nomologies', + 'nomothetic', + 'nonabrasive', + 'nonabsorbable', + 'nonabsorbent', + 'nonabsorbents', + 'nonabsorptive', + 'nonabstract', + 'nonacademic', + 'nonacademics', + 'nonacceptance', + 'nonacceptances', + 'nonaccountable', + 'nonaccredited', + 'nonaccrual', + 'nonachievement', + 'nonachievements', + 'nonacquisitive', + 'nonactions', + 'nonactivated', + 'nonadaptive', + 'nonaddictive', + 'nonaddicts', + 'nonadditive', + 'nonadditivities', + 'nonadditivity', + 'nonadhesive', + 'nonadiabatic', + 'nonadjacent', + 'nonadmirer', + 'nonadmirers', + 'nonadmission', + 'nonadmissions', + 'nonaesthetic', + 'nonaffiliated', + 'nonaffluent', + 'nonagenarian', + 'nonagenarians', + 'nonaggression', + 'nonaggressions', + 'nonaggressive', + 'nonagricultural', + 'nonalcoholic', + 'nonalcoholics', + 'nonaligned', + 'nonalignment', + 'nonalignments', + 'nonallelic', + 'nonallergenic', + 'nonallergic', + 'nonalphabetic', + 'nonaluminum', + 'nonambiguous', + 'nonanalytic', + 'nonanatomic', + 'nonanswers', + 'nonantagonistic', + 'nonanthropological', + 'nonanthropologist', + 'nonanthropologists', + 'nonantibiotic', + 'nonantibiotics', + 'nonantigenic', + 'nonappearance', + 'nonappearances', + 'nonaquatic', + 'nonaqueous', + 'nonarbitrariness', + 'nonarbitrarinesses', + 'nonarbitrary', + 'nonarchitect', + 'nonarchitects', + 'nonarchitecture', + 'nonarchitectures', + 'nonargument', + 'nonarguments', + 'nonaristocratic', + 'nonaromatic', + 'nonartistic', + 'nonartists', + 'nonascetic', + 'nonascetics', + 'nonaspirin', + 'nonaspirins', + 'nonassertive', + 'nonassociated', + 'nonastronomical', + 'nonathlete', + 'nonathletes', + 'nonathletic', + 'nonattached', + 'nonattachment', + 'nonattachments', + 'nonattendance', + 'nonattendances', + 'nonattender', + 'nonattenders', + 'nonauditory', + 'nonauthoritarian', + 'nonauthors', + 'nonautomated', + 'nonautomatic', + 'nonautomotive', + 'nonautonomous', + 'nonavailabilities', + 'nonavailability', + 'nonbacterial', + 'nonbanking', + 'nonbarbiturate', + 'nonbarbiturates', + 'nonbearing', + 'nonbehavioral', + 'nonbeliefs', + 'nonbeliever', + 'nonbelievers', + 'nonbelligerencies', + 'nonbelligerency', + 'nonbelligerent', + 'nonbelligerents', + 'nonbetting', + 'nonbibliographic', + 'nonbinding', + 'nonbiodegradable', + 'nonbiodegradables', + 'nonbiographical', + 'nonbiological', + 'nonbiologically', + 'nonbiologist', + 'nonbiologists', + 'nonbonding', + 'nonbotanist', + 'nonbotanists', + 'nonbreakable', + 'nonbreathing', + 'nonbreeder', + 'nonbreeders', + 'nonbreeding', + 'nonbreedings', + 'nonbroadcast', + 'nonbroadcasts', + 'nonbuilding', + 'nonbuildings', + 'nonburnable', + 'nonbusiness', + 'noncabinet', + 'noncabinets', + 'noncallable', + 'noncaloric', + 'noncancelable', + 'noncancerous', + 'noncandidacies', + 'noncandidacy', + 'noncandidate', + 'noncandidates', + 'noncannibalistic', + 'noncapital', + 'noncapitalist', + 'noncapitalists', + 'noncapitals', + 'noncarcinogen', + 'noncarcinogenic', + 'noncarcinogens', + 'noncardiac', + 'noncarrier', + 'noncarriers', + 'noncelebration', + 'noncelebrations', + 'noncelebrities', + 'noncelebrity', + 'noncellular', + 'noncellulosic', + 'noncentral', + 'noncertificated', + 'noncertified', + 'nonchalance', + 'nonchalances', + 'nonchalant', + 'nonchalantly', + 'noncharacter', + 'noncharacters', + 'noncharismatic', + 'nonchauvinist', + 'nonchauvinists', + 'nonchemical', + 'nonchemicals', + 'nonchromosomal', + 'nonchronological', + 'nonchurchgoer', + 'nonchurchgoers', + 'noncircular', + 'noncirculating', + 'noncitizen', + 'noncitizens', + 'nonclandestine', + 'nonclasses', + 'nonclassical', + 'nonclassified', + 'nonclassroom', + 'nonclassrooms', + 'nonclerical', + 'nonclericals', + 'nonclinical', + 'nonclogging', + 'noncoercive', + 'noncognitive', + 'noncoherent', + 'noncoincidence', + 'noncoincidences', + 'noncollector', + 'noncollectors', + 'noncollege', + 'noncolleges', + 'noncollegiate', + 'noncollinear', + 'noncolored', + 'noncolorfast', + 'noncombatant', + 'noncombatants', + 'noncombative', + 'noncombustible', + 'noncombustibles', + 'noncommercial', + 'noncommercials', + 'noncommitment', + 'noncommitments', + 'noncommittal', + 'noncommittally', + 'noncommitted', + 'noncommunicating', + 'noncommunication', + 'noncommunications', + 'noncommunicative', + 'noncommunist', + 'noncommunists', + 'noncommunities', + 'noncommunity', + 'noncommutative', + 'noncommutativities', + 'noncommutativity', + 'noncomparabilities', + 'noncomparability', + 'noncomparable', + 'noncompatible', + 'noncompetition', + 'noncompetitive', + 'noncompetitor', + 'noncompetitors', + 'noncomplementary', + 'noncomplex', + 'noncompliance', + 'noncompliances', + 'noncompliant', + 'noncomplicated', + 'noncomplying', + 'noncomplyings', + 'noncomposer', + 'noncomposers', + 'noncompound', + 'noncompounds', + 'noncomprehension', + 'noncomprehensions', + 'noncompressible', + 'noncomputer', + 'noncomputerized', + 'nonconceptual', + 'nonconcern', + 'nonconcerns', + 'nonconclusion', + 'nonconclusions', + 'nonconcurred', + 'nonconcurrence', + 'nonconcurrences', + 'nonconcurrent', + 'nonconcurring', + 'nonconcurs', + 'noncondensable', + 'nonconditioned', + 'nonconducting', + 'nonconduction', + 'nonconductions', + 'nonconductive', + 'nonconductor', + 'nonconductors', + 'nonconference', + 'nonconferences', + 'nonconfidence', + 'nonconfidences', + 'nonconfidential', + 'nonconflicting', + 'nonconform', + 'nonconformance', + 'nonconformances', + 'nonconformed', + 'nonconformer', + 'nonconformers', + 'nonconforming', + 'nonconformism', + 'nonconformisms', + 'nonconformist', + 'nonconformists', + 'nonconformities', + 'nonconformity', + 'nonconforms', + 'nonconfrontation', + 'nonconfrontational', + 'nonconfrontations', + 'noncongruent', + 'nonconjugated', + 'nonconnection', + 'nonconnections', + 'nonconscious', + 'nonconsecutive', + 'nonconsensual', + 'nonconservation', + 'nonconservations', + 'nonconservative', + 'nonconservatives', + 'nonconsolidated', + 'nonconstant', + 'nonconstants', + 'nonconstitutional', + 'nonconstruction', + 'nonconstructions', + 'nonconstructive', + 'nonconsumer', + 'nonconsumers', + 'nonconsuming', + 'nonconsumption', + 'nonconsumptions', + 'nonconsumptive', + 'noncontact', + 'noncontacts', + 'noncontagious', + 'noncontemporaries', + 'noncontemporary', + 'noncontiguous', + 'noncontingent', + 'noncontinuous', + 'noncontract', + 'noncontractual', + 'noncontradiction', + 'noncontradictions', + 'noncontradictory', + 'noncontributory', + 'noncontrollable', + 'noncontrolled', + 'noncontrolling', + 'noncontroversial', + 'nonconventional', + 'nonconvertible', + 'noncooperation', + 'noncooperationist', + 'noncooperationists', + 'noncooperations', + 'noncooperative', + 'noncooperator', + 'noncooperators', + 'noncoplanar', + 'noncorporate', + 'noncorrelation', + 'noncorrelations', + 'noncorrodible', + 'noncorroding', + 'noncorrodings', + 'noncorrosive', + 'noncountries', + 'noncountry', + 'noncoverage', + 'noncoverages', + 'noncreative', + 'noncreativities', + 'noncreativity', + 'noncredentialed', + 'noncriminal', + 'noncriminals', + 'noncritical', + 'noncrossover', + 'noncrushable', + 'noncrystalline', + 'nonculinary', + 'noncultivated', + 'noncultivation', + 'noncultivations', + 'noncultural', + 'noncumulative', + 'noncurrent', + 'noncustodial', + 'noncustomer', + 'noncustomers', + 'noncyclical', + 'nondancers', + 'nondeceptive', + 'nondecision', + 'nondecisions', + 'nondecreasing', + 'nondeductibilities', + 'nondeductibility', + 'nondeductible', + 'nondeductive', + 'nondefense', + 'nondeferrable', + 'nondeforming', + 'nondegenerate', + 'nondegenerates', + 'nondegradable', + 'nondegradables', + 'nondelegate', + 'nondelegates', + 'nondeliberate', + 'nondelinquent', + 'nondeliveries', + 'nondelivery', + 'nondemanding', + 'nondemocratic', + 'nondenominational', + 'nondenominationalism', + 'nondenominationalisms', + 'nondepartmental', + 'nondependent', + 'nondependents', + 'nondepletable', + 'nondepleting', + 'nondeposition', + 'nondepositions', + 'nondepressed', + 'nonderivative', + 'nonderivatives', + 'nondescript', + 'nondescriptive', + 'nondescripts', + 'nondestructive', + 'nondestructively', + 'nondestructiveness', + 'nondestructivenesses', + 'nondetachable', + 'nondeterministic', + 'nondevelopment', + 'nondevelopments', + 'nondeviant', + 'nondeviants', + 'nondiabetic', + 'nondiabetics', + 'nondialyzable', + 'nondiapausing', + 'nondidactic', + 'nondiffusible', + 'nondimensional', + 'nondiplomatic', + 'nondirected', + 'nondirectional', + 'nondirective', + 'nondisabled', + 'nondisableds', + 'nondisclosure', + 'nondisclosures', + 'nondiscount', + 'nondiscretionary', + 'nondiscrimination', + 'nondiscriminations', + 'nondiscriminatory', + 'nondiscursive', + 'nondisjunction', + 'nondisjunctional', + 'nondisjunctions', + 'nondispersive', + 'nondisruptive', + 'nondistinctive', + 'nondiversified', + 'nondividing', + 'nondoctors', + 'nondoctrinaire', + 'nondocumentaries', + 'nondocumentary', + 'nondogmatic', + 'nondomestic', + 'nondomestics', + 'nondominant', + 'nondominants', + 'nondormant', + 'nondramatic', + 'nondrinker', + 'nondrinkers', + 'nondrinking', + 'nondrivers', + 'nondurable', + 'nondurables', + 'nonearning', + 'nonearnings', + 'nonecclesiastical', + 'noneconomic', + 'noneconomist', + 'noneconomists', + 'noneditorial', + 'noneducation', + 'noneducational', + 'noneducations', + 'noneffective', + 'noneffectives', + 'nonelastic', + 'nonelected', + 'nonelection', + 'nonelections', + 'nonelective', + 'nonelectives', + 'nonelectric', + 'nonelectrical', + 'nonelectrics', + 'nonelectrolyte', + 'nonelectrolytes', + 'nonelectronic', + 'nonelectronics', + 'nonelementary', + 'nonemergencies', + 'nonemergency', + 'nonemotional', + 'nonemphatic', + 'nonempirical', + 'nonemployee', + 'nonemployees', + 'nonemployment', + 'nonemployments', + 'nonencapsulated', + 'nonenforceabilities', + 'nonenforceability', + 'nonenforcement', + 'nonenforcements', + 'nonengagement', + 'nonengagements', + 'nonengineering', + 'nonengineerings', + 'nonentertainment', + 'nonentertainments', + 'nonentities', + 'nonentries', + 'nonenzymatic', + 'nonenzymic', + 'nonequilibria', + 'nonequilibrium', + 'nonequilibriums', + 'nonequivalence', + 'nonequivalences', + 'nonequivalent', + 'nonequivalents', + 'nonessential', + 'nonessentials', + 'nonestablished', + 'nonestablishment', + 'nonestablishments', + 'nonesterified', + 'nonesuches', + 'nonetheless', + 'nonethical', + 'nonevaluative', + 'nonevidence', + 'nonevidences', + 'nonexclusive', + 'nonexecutive', + 'nonexecutives', + 'nonexistence', + 'nonexistences', + 'nonexistent', + 'nonexistential', + 'nonexpendable', + 'nonexperimental', + 'nonexperts', + 'nonexplanatory', + 'nonexploitation', + 'nonexploitations', + 'nonexploitative', + 'nonexploitive', + 'nonexplosive', + 'nonexplosives', + 'nonexposed', + 'nonfactors', + 'nonfactual', + 'nonfaculty', + 'nonfamilial', + 'nonfamilies', + 'nonfarmers', + 'nonfattening', + 'nonfeasance', + 'nonfeasances', + 'nonfederal', + 'nonfederated', + 'nonfeminist', + 'nonfeminists', + 'nonferrous', + 'nonfiction', + 'nonfictional', + 'nonfictions', + 'nonfigurative', + 'nonfilamentous', + 'nonfilterable', + 'nonfinancial', + 'nonfissionable', + 'nonflammability', + 'nonflammable', + 'nonflowering', + 'nonfluencies', + 'nonfluency', + 'nonfluorescent', + 'nonforfeitable', + 'nonforfeiture', + 'nonforfeitures', + 'nonfraternization', + 'nonfraternizations', + 'nonfreezing', + 'nonfrivolous', + 'nonfulfillment', + 'nonfulfillments', + 'nonfunctional', + 'nonfunctioning', + 'nongaseous', + 'nongenetic', + 'nongenital', + 'nongeometrical', + 'nonglamorous', + 'nongolfers', + 'nongonococcal', + 'nongovernment', + 'nongovernmental', + 'nongovernments', + 'nongraduate', + 'nongraduates', + 'nongrammatical', + 'nongranular', + 'nongravitational', + 'nongregarious', + 'nongrowing', + 'nonhalogenated', + 'nonhandicapped', + 'nonhappening', + 'nonhappenings', + 'nonharmonic', + 'nonhazardous', + 'nonhemolytic', + 'nonhereditary', + 'nonhierarchical', + 'nonhistone', + 'nonhistorical', + 'nonhomogeneous', + 'nonhomologous', + 'nonhomosexual', + 'nonhomosexuals', + 'nonhormonal', + 'nonhospital', + 'nonhospitalized', + 'nonhospitals', + 'nonhostile', + 'nonhousing', + 'nonhousings', + 'nonhunters', + 'nonhunting', + 'nonhygroscopic', + 'nonhysterical', + 'nonidentical', + 'nonidentities', + 'nonidentity', + 'nonideological', + 'nonillions', + 'nonimitative', + 'nonimmigrant', + 'nonimmigrants', + 'nonimplication', + 'nonimplications', + 'nonimportation', + 'nonimportations', + 'noninclusion', + 'noninclusions', + 'nonincreasing', + 'nonincumbent', + 'nonincumbents', + 'nonindependence', + 'nonindependences', + 'nonindigenous', + 'nonindividual', + 'noninductive', + 'nonindustrial', + 'nonindustrialized', + 'nonindustry', + 'noninfected', + 'noninfectious', + 'noninfective', + 'noninfested', + 'noninflammable', + 'noninflammatory', + 'noninflationary', + 'noninflectional', + 'noninfluence', + 'noninfluences', + 'noninformation', + 'noninformations', + 'noninitial', + 'noninitiate', + 'noninitiates', + 'noninsecticidal', + 'noninsects', + 'noninstallment', + 'noninstitutional', + 'noninstitutionalized', + 'noninstructional', + 'noninstrumental', + 'noninsurance', + 'noninsurances', + 'noninsured', + 'nonintegral', + 'nonintegrated', + 'nonintellectual', + 'nonintellectuals', + 'noninteracting', + 'noninteractive', + 'noninterchangeable', + 'nonintercourse', + 'nonintercourses', + 'noninterest', + 'noninterests', + 'noninterference', + 'noninterferences', + 'nonintersecting', + 'nonintervention', + 'noninterventionist', + 'noninterventionists', + 'noninterventions', + 'nonintimidating', + 'nonintoxicant', + 'nonintoxicating', + 'nonintrusive', + 'nonintuitive', + 'noninvasive', + 'noninvolved', + 'noninvolvement', + 'noninvolvements', + 'nonionizing', + 'nonirradiated', + 'nonirrigated', + 'nonirritant', + 'nonirritating', + 'nonjoinder', + 'nonjoinders', + 'nonjoiners', + 'nonjudgmental', + 'nonjudicial', + 'nonjusticiable', + 'nonlandowner', + 'nonlandowners', + 'nonlanguage', + 'nonlanguages', + 'nonlawyers', + 'nonlegumes', + 'nonleguminous', + 'nonlexical', + 'nonlibrarian', + 'nonlibrarians', + 'nonlibraries', + 'nonlibrary', + 'nonlinearities', + 'nonlinearity', + 'nonlinguistic', + 'nonliquids', + 'nonliteral', + 'nonliterary', + 'nonliterate', + 'nonliterates', + 'nonlogical', + 'nonluminous', + 'nonmagnetic', + 'nonmainstream', + 'nonmalignant', + 'nonmalleable', + 'nonmanagement', + 'nonmanagements', + 'nonmanagerial', + 'nonmanufacturing', + 'nonmanufacturings', + 'nonmarital', + 'nonmaterial', + 'nonmaterialistic', + 'nonmathematical', + 'nonmathematician', + 'nonmathematicians', + 'nonmatriculated', + 'nonmeaningful', + 'nonmeasurable', + 'nonmechanical', + 'nonmechanistic', + 'nonmedical', + 'nonmeeting', + 'nonmeetings', + 'nonmembers', + 'nonmembership', + 'nonmemberships', + 'nonmercurial', + 'nonmetallic', + 'nonmetameric', + 'nonmetaphorical', + 'nonmetrical', + 'nonmetropolitan', + 'nonmetropolitans', + 'nonmicrobial', + 'nonmigrant', + 'nonmigrants', + 'nonmigratory', + 'nonmilitant', + 'nonmilitants', + 'nonmilitary', + 'nonmimetic', + 'nonminority', + 'nonmolecular', + 'nonmonetarist', + 'nonmonetarists', + 'nonmonetary', + 'nonmonogamous', + 'nonmotilities', + 'nonmotility', + 'nonmotorized', + 'nonmunicipal', + 'nonmusical', + 'nonmusician', + 'nonmusicians', + 'nonmutants', + 'nonmyelinated', + 'nonmystical', + 'nonnarrative', + 'nonnarratives', + 'nonnational', + 'nonnationals', + 'nonnatives', + 'nonnatural', + 'nonnecessities', + 'nonnecessity', + 'nonnegative', + 'nonnegligent', + 'nonnegotiable', + 'nonnetwork', + 'nonnitrogenous', + 'nonnormative', + 'nonnuclear', + 'nonnucleated', + 'nonnumerical', + 'nonnumericals', + 'nonnutritious', + 'nonnutritive', + 'nonobjective', + 'nonobjectivism', + 'nonobjectivisms', + 'nonobjectivist', + 'nonobjectivists', + 'nonobjectivities', + 'nonobjectivity', + 'nonobscene', + 'nonobservance', + 'nonobservances', + 'nonobservant', + 'nonobvious', + 'nonoccupational', + 'nonoccurrence', + 'nonoccurrences', + 'nonofficial', + 'nonoperatic', + 'nonoperating', + 'nonoperational', + 'nonoperative', + 'nonoptimal', + 'nonorganic', + 'nonorgasmic', + 'nonorthodox', + 'nonoverlapping', + 'nonoverlappings', + 'nonoxidizing', + 'nonparallel', + 'nonparallels', + 'nonparametric', + 'nonparasitic', + 'nonpareils', + 'nonparticipant', + 'nonparticipants', + 'nonparticipating', + 'nonparticipation', + 'nonparticipations', + 'nonparticipatory', + 'nonpartisan', + 'nonpartisans', + 'nonpartisanship', + 'nonpartisanships', + 'nonpasserine', + 'nonpassive', + 'nonpathogenic', + 'nonpayment', + 'nonpayments', + 'nonperformance', + 'nonperformances', + 'nonperformer', + 'nonperformers', + 'nonperforming', + 'nonperishable', + 'nonperishables', + 'nonpermissive', + 'nonpersistent', + 'nonpersonal', + 'nonpersons', + 'nonpetroleum', + 'nonpetroleums', + 'nonphilosopher', + 'nonphilosophers', + 'nonphilosophical', + 'nonphonemic', + 'nonphonetic', + 'nonphosphate', + 'nonphosphates', + 'nonphotographic', + 'nonphysical', + 'nonphysician', + 'nonphysicians', + 'nonplastic', + 'nonplastics', + 'nonplaying', + 'nonplusing', + 'nonplussed', + 'nonplusses', + 'nonplussing', + 'nonpoisonous', + 'nonpolarizable', + 'nonpolitical', + 'nonpolitically', + 'nonpolitician', + 'nonpoliticians', + 'nonpolluting', + 'nonpossession', + 'nonpossessions', + 'nonpractical', + 'nonpracticing', + 'nonpregnant', + 'nonprescription', + 'nonproblem', + 'nonproblems', + 'nonproducing', + 'nonproductive', + 'nonproductiveness', + 'nonproductivenesses', + 'nonprofessional', + 'nonprofessionally', + 'nonprofessionals', + 'nonprofessorial', + 'nonprofits', + 'nonprogram', + 'nonprogrammer', + 'nonprogrammers', + 'nonprograms', + 'nonprogressive', + 'nonprogressives', + 'nonproliferation', + 'nonproliferations', + 'nonproprietaries', + 'nonproprietary', + 'nonprossed', + 'nonprosses', + 'nonprossing', + 'nonprotein', + 'nonpsychiatric', + 'nonpsychiatrist', + 'nonpsychiatrists', + 'nonpsychological', + 'nonpsychotic', + 'nonpunitive', + 'nonpurposive', + 'nonquantifiable', + 'nonquantitative', + 'nonracially', + 'nonradioactive', + 'nonrailroad', + 'nonrandomness', + 'nonrandomnesses', + 'nonrational', + 'nonreactive', + 'nonreactor', + 'nonreactors', + 'nonreaders', + 'nonreading', + 'nonrealistic', + 'nonreappointment', + 'nonreappointments', + 'nonreceipt', + 'nonreceipts', + 'nonreciprocal', + 'nonreciprocals', + 'nonrecognition', + 'nonrecognitions', + 'nonrecombinant', + 'nonrecombinants', + 'nonrecourse', + 'nonrecurrent', + 'nonrecurring', + 'nonrecyclable', + 'nonrecyclables', + 'nonreducing', + 'nonredundant', + 'nonrefillable', + 'nonreflecting', + 'nonrefundable', + 'nonregulated', + 'nonregulation', + 'nonregulations', + 'nonrelative', + 'nonrelatives', + 'nonrelativistic', + 'nonrelativistically', + 'nonrelevant', + 'nonreligious', + 'nonrenewable', + 'nonrenewal', + 'nonrenewals', + 'nonrepayable', + 'nonrepresentational', + 'nonrepresentationalism', + 'nonrepresentationalisms', + 'nonrepresentative', + 'nonrepresentatives', + 'nonreproducible', + 'nonreproductive', + 'nonresidence', + 'nonresidences', + 'nonresidencies', + 'nonresidency', + 'nonresident', + 'nonresidential', + 'nonresidents', + 'nonresistance', + 'nonresistances', + 'nonresistant', + 'nonresistants', + 'nonresonant', + 'nonrespondent', + 'nonrespondents', + 'nonresponder', + 'nonresponders', + 'nonresponse', + 'nonresponses', + 'nonresponsive', + 'nonrestricted', + 'nonrestrictive', + 'nonretractile', + 'nonretroactive', + 'nonreturnable', + 'nonreturnables', + 'nonreusable', + 'nonreusables', + 'nonreversible', + 'nonrevolutionaries', + 'nonrevolutionary', + 'nonrioters', + 'nonrioting', + 'nonrotating', + 'nonroutine', + 'nonroutines', + 'nonruminant', + 'nonruminants', + 'nonsalable', + 'nonsaponifiable', + 'nonscheduled', + 'nonschizophrenic', + 'nonscience', + 'nonsciences', + 'nonscientific', + 'nonscientist', + 'nonscientists', + 'nonseasonal', + 'nonsecretor', + 'nonsecretories', + 'nonsecretors', + 'nonsecretory', + 'nonsectarian', + 'nonsedimentable', + 'nonsegregated', + 'nonsegregation', + 'nonsegregations', + 'nonselected', + 'nonselective', + 'nonsensational', + 'nonsensical', + 'nonsensically', + 'nonsensicalness', + 'nonsensicalnesses', + 'nonsensitive', + 'nonsensuous', + 'nonsentence', + 'nonsentences', + 'nonseptate', + 'nonsequential', + 'nonserious', + 'nonshrinkable', + 'nonsigners', + 'nonsignificant', + 'nonsignificantly', + 'nonsimultaneous', + 'nonsinkable', + 'nonskaters', + 'nonskeletal', + 'nonsmokers', + 'nonsmoking', + 'nonsocialist', + 'nonsocialists', + 'nonsolution', + 'nonsolutions', + 'nonspatial', + 'nonspeaker', + 'nonspeakers', + 'nonspeaking', + 'nonspecialist', + 'nonspecialists', + 'nonspecific', + 'nonspecifically', + 'nonspectacular', + 'nonspeculative', + 'nonspherical', + 'nonsporting', + 'nonstandard', + 'nonstarter', + 'nonstarters', + 'nonstationaries', + 'nonstationary', + 'nonstatistical', + 'nonsteroid', + 'nonsteroidal', + 'nonsteroids', + 'nonstories', + 'nonstrategic', + 'nonstructural', + 'nonstructured', + 'nonstudent', + 'nonstudents', + 'nonsubject', + 'nonsubjective', + 'nonsubjects', + 'nonsubsidized', + 'nonsuccess', + 'nonsuccesses', + 'nonsuiting', + 'nonsuperimposable', + 'nonsupervisory', + 'nonsupport', + 'nonsupports', + 'nonsurgical', + 'nonswimmer', + 'nonswimmers', + 'nonsyllabic', + 'nonsymbolic', + 'nonsymmetric', + 'nonsymmetrical', + 'nonsynchronous', + 'nonsystematic', + 'nonsystemic', + 'nonsystems', + 'nontaxable', + 'nontaxables', + 'nonteaching', + 'nontechnical', + 'nontemporal', + 'nontemporals', + 'nontenured', + 'nonterminal', + 'nonterminating', + 'nontheatrical', + 'nontheistic', + 'nontheists', + 'nontheological', + 'nontheoretical', + 'nontherapeutic', + 'nonthermal', + 'nonthinking', + 'nonthinkings', + 'nonthreatening', + 'nontobacco', + 'nontobaccos', + 'nontotalitarian', + 'nontraditional', + 'nontransferable', + 'nontreatment', + 'nontreatments', + 'nontrivial', + 'nontropical', + 'nonturbulent', + 'nontypical', + 'nonunanimous', + 'nonuniform', + 'nonuniformities', + 'nonuniformity', + 'nonunionized', + 'nonuniqueness', + 'nonuniquenesses', + 'nonuniversal', + 'nonuniversals', + 'nonuniversities', + 'nonuniversity', + 'nonutilitarian', + 'nonutilitarians', + 'nonutilities', + 'nonutility', + 'nonutopian', + 'nonvalidities', + 'nonvalidity', + 'nonvanishing', + 'nonvascular', + 'nonvectors', + 'nonvegetarian', + 'nonvegetarians', + 'nonvenomous', + 'nonverbally', + 'nonveteran', + 'nonveterans', + 'nonviewers', + 'nonvintage', + 'nonviolence', + 'nonviolences', + 'nonviolent', + 'nonviolently', + 'nonvirgins', + 'nonviscous', + 'nonvocational', + 'nonvolatile', + 'nonvolcanic', + 'nonvoluntary', + 'nonwinning', + 'nonworkers', + 'nonworking', + 'nonwriters', + 'nonyellowing', + 'noospheres', + 'noradrenalin', + 'noradrenaline', + 'noradrenalines', + 'noradrenalins', + 'noradrenergic', + 'norepinephrine', + 'norepinephrines', + 'norethindrone', + 'norethindrones', + 'normalcies', + 'normalised', + 'normalises', + 'normalising', + 'normalities', + 'normalizable', + 'normalization', + 'normalizations', + 'normalized', + 'normalizer', + 'normalizers', + 'normalizes', + 'normalizing', + 'normatively', + 'normativeness', + 'normativenesses', + 'normotensive', + 'normotensives', + 'normothermia', + 'normothermias', + 'normothermic', + 'northbound', + 'northeaster', + 'northeasterly', + 'northeastern', + 'northeasternmost', + 'northeasters', + 'northeasts', + 'northeastward', + 'northeastwards', + 'northerlies', + 'northerner', + 'northerners', + 'northernmost', + 'northlands', + 'northwards', + 'northwester', + 'northwesterly', + 'northwestern', + 'northwesternmost', + 'northwesters', + 'northwests', + 'northwestward', + 'northwestwards', + 'nortriptyline', + 'nortriptylines', + 'nosebleeds', + 'noseguards', + 'nosepieces', + 'nosewheels', + 'nosinesses', + 'nosocomial', + 'nosological', + 'nosologically', + 'nosologies', + 'nostalgias', + 'nostalgically', + 'nostalgics', + 'nostalgist', + 'nostalgists', + 'notabilities', + 'notability', + 'notableness', + 'notablenesses', + 'notarially', + 'notarization', + 'notarizations', + 'notarizing', + 'notational', + 'notchbacks', + 'notednesses', + 'notepapers', + 'noteworthily', + 'noteworthiness', + 'noteworthinesses', + 'noteworthy', + 'nothingness', + 'nothingnesses', + 'noticeable', + 'noticeably', + 'notifiable', + 'notification', + 'notifications', + 'notionalities', + 'notionality', + 'notionally', + 'notochordal', + 'notochords', + 'notorieties', + 'notoriously', + 'notwithstanding', + 'nourishers', + 'nourishing', + 'nourishment', + 'nourishments', + 'novaculite', + 'novaculites', + 'novelettes', + 'novelettish', + 'novelising', + 'novelistic', + 'novelistically', + 'novelization', + 'novelizations', + 'novelizing', + 'novemdecillion', + 'novemdecillions', + 'novitiates', + 'novobiocin', + 'novobiocins', + 'novocaines', + 'noxiousness', + 'noxiousnesses', + 'nubilities', + 'nucleating', + 'nucleation', + 'nucleations', + 'nucleators', + 'nucleocapsid', + 'nucleocapsids', + 'nucleonics', + 'nucleophile', + 'nucleophiles', + 'nucleophilic', + 'nucleophilically', + 'nucleophilicities', + 'nucleophilicity', + 'nucleoplasm', + 'nucleoplasmic', + 'nucleoplasms', + 'nucleoprotein', + 'nucleoproteins', + 'nucleoside', + 'nucleosides', + 'nucleosomal', + 'nucleosome', + 'nucleosomes', + 'nucleosyntheses', + 'nucleosynthesis', + 'nucleosynthetic', + 'nucleotidase', + 'nucleotidases', + 'nucleotide', + 'nucleotides', + 'nudenesses', + 'nudibranch', + 'nudibranchs', + 'nullification', + 'nullificationist', + 'nullificationists', + 'nullifications', + 'nullifiers', + 'nullifying', + 'nulliparous', + 'numberable', + 'numberless', + 'numbfishes', + 'numbnesses', + 'numbskulls', + 'numeracies', + 'numerating', + 'numeration', + 'numerations', + 'numerators', + 'numerically', + 'numerological', + 'numerologies', + 'numerologist', + 'numerologists', + 'numerology', + 'numerously', + 'numerousness', + 'numerousnesses', + 'numinouses', + 'numinousness', + 'numinousnesses', + 'numismatic', + 'numismatically', + 'numismatics', + 'numismatist', + 'numismatists', + 'nunciature', + 'nunciatures', + 'nuncupative', + 'nuptialities', + 'nuptiality', + 'nursemaids', + 'nurseryman', + 'nurserymen', + 'nurturance', + 'nurturances', + 'nutational', + 'nutcracker', + 'nutcrackers', + 'nutgrasses', + 'nuthatches', + 'nutriments', + 'nutritional', + 'nutritionally', + 'nutritionist', + 'nutritionists', + 'nutritions', + 'nutritious', + 'nutritiously', + 'nutritiousness', + 'nutritiousnesses', + 'nutritively', + 'nuttinesses', + 'nyctalopia', + 'nyctalopias', + 'nymphalids', + 'nymphettes', + 'nympholepsies', + 'nympholepsy', + 'nympholept', + 'nympholeptic', + 'nympholepts', + 'nymphomania', + 'nymphomaniac', + 'nymphomaniacal', + 'nymphomaniacs', + 'nymphomanias', + 'nystagmuses', + 'oafishness', + 'oafishnesses', + 'oarsmanship', + 'oarsmanships', + 'oasthouses', + 'obbligatos', + 'obduracies', + 'obdurately', + 'obdurateness', + 'obduratenesses', + 'obediences', + 'obediently', + 'obeisances', + 'obeisantly', + 'obfuscated', + 'obfuscates', + 'obfuscating', + 'obfuscation', + 'obfuscations', + 'obfuscatory', + 'obituaries', + 'obituarist', + 'obituarists', + 'objectification', + 'objectifications', + 'objectified', + 'objectifies', + 'objectifying', + 'objectionable', + 'objectionableness', + 'objectionablenesses', + 'objectionably', + 'objections', + 'objectively', + 'objectiveness', + 'objectivenesses', + 'objectives', + 'objectivism', + 'objectivisms', + 'objectivist', + 'objectivistic', + 'objectivists', + 'objectivities', + 'objectivity', + 'objectless', + 'objectlessness', + 'objectlessnesses', + 'objurgated', + 'objurgates', + 'objurgating', + 'objurgation', + 'objurgations', + 'objurgatory', + 'oblanceolate', + 'oblateness', + 'oblatenesses', + 'obligately', + 'obligating', + 'obligation', + 'obligations', + 'obligatorily', + 'obligatory', + 'obligingly', + 'obligingness', + 'obligingnesses', + 'obliqueness', + 'obliquenesses', + 'obliquities', + 'obliterate', + 'obliterated', + 'obliterates', + 'obliterating', + 'obliteration', + 'obliterations', + 'obliterative', + 'obliterator', + 'obliterators', + 'obliviously', + 'obliviousness', + 'obliviousnesses', + 'obnoxiously', + 'obnoxiousness', + 'obnoxiousnesses', + 'obnubilate', + 'obnubilated', + 'obnubilates', + 'obnubilating', + 'obnubilation', + 'obnubilations', + 'obscenities', + 'obscurantic', + 'obscurantism', + 'obscurantisms', + 'obscurantist', + 'obscurantists', + 'obscurants', + 'obscuration', + 'obscurations', + 'obscureness', + 'obscurenesses', + 'obscurities', + 'obsequious', + 'obsequiously', + 'obsequiousness', + 'obsequiousnesses', + 'observabilities', + 'observability', + 'observable', + 'observables', + 'observably', + 'observance', + 'observances', + 'observantly', + 'observants', + 'observation', + 'observational', + 'observationally', + 'observations', + 'observatories', + 'observatory', + 'observingly', + 'obsessional', + 'obsessionally', + 'obsessions', + 'obsessively', + 'obsessiveness', + 'obsessivenesses', + 'obsessives', + 'obsolesced', + 'obsolescence', + 'obsolescences', + 'obsolescent', + 'obsolescently', + 'obsolesces', + 'obsolescing', + 'obsoletely', + 'obsoleteness', + 'obsoletenesses', + 'obsoleting', + 'obstetrical', + 'obstetrically', + 'obstetrician', + 'obstetricians', + 'obstetrics', + 'obstinacies', + 'obstinately', + 'obstinateness', + 'obstinatenesses', + 'obstreperous', + 'obstreperously', + 'obstreperousness', + 'obstreperousnesses', + 'obstructed', + 'obstructing', + 'obstruction', + 'obstructionism', + 'obstructionisms', + 'obstructionist', + 'obstructionistic', + 'obstructionists', + 'obstructions', + 'obstructive', + 'obstructively', + 'obstructiveness', + 'obstructivenesses', + 'obstructives', + 'obstructor', + 'obstructors', + 'obtainabilities', + 'obtainability', + 'obtainable', + 'obtainment', + 'obtainments', + 'obtrusions', + 'obtrusively', + 'obtrusiveness', + 'obtrusivenesses', + 'obturating', + 'obturation', + 'obturations', + 'obturators', + 'obtuseness', + 'obtusenesses', + 'obtusities', + 'obviations', + 'obviousness', + 'obviousnesses', + 'occasional', + 'occasionally', + 'occasioned', + 'occasioning', + 'occidental', + 'occidentalize', + 'occidentalized', + 'occidentalizes', + 'occidentalizing', + 'occidentally', + 'occipitally', + 'occipitals', + 'occlusions', + 'occultation', + 'occultations', + 'occultisms', + 'occultists', + 'occupancies', + 'occupation', + 'occupational', + 'occupationally', + 'occupations', + 'occurrence', + 'occurrences', + 'occurrents', + 'oceanarium', + 'oceanariums', + 'oceanfront', + 'oceanfronts', + 'oceangoing', + 'oceanographer', + 'oceanographers', + 'oceanographic', + 'oceanographical', + 'oceanographically', + 'oceanographies', + 'oceanography', + 'oceanologies', + 'oceanologist', + 'oceanologists', + 'oceanology', + 'ochlocracies', + 'ochlocracy', + 'ochlocratic', + 'ochlocratical', + 'ochlocrats', + 'octagonally', + 'octahedral', + 'octahedrally', + 'octahedron', + 'octahedrons', + 'octameters', + 'octapeptide', + 'octapeptides', + 'octarchies', + 'octillions', + 'octodecillion', + 'octodecillions', + 'octogenarian', + 'octogenarians', + 'octonaries', + 'octoploids', + 'octosyllabic', + 'octosyllabics', + 'octosyllable', + 'octosyllables', + 'octothorps', + 'ocularists', + 'oculomotor', + 'odalisques', + 'oddsmakers', + 'odiousness', + 'odiousnesses', + 'odometries', + 'odontoblast', + 'odontoblastic', + 'odontoblasts', + 'odontoglossum', + 'odontoglossums', + 'odoriferous', + 'odoriferously', + 'odoriferousness', + 'odoriferousnesses', + 'odorousness', + 'odorousnesses', + 'oecologies', + 'oecumenical', + 'oenologies', + 'oenophiles', + 'oesophagus', + 'offenseless', + 'offensively', + 'offensiveness', + 'offensivenesses', + 'offensives', + 'offertories', + 'offhandedly', + 'offhandedness', + 'offhandednesses', + 'officeholder', + 'officeholders', + 'officering', + 'officialdom', + 'officialdoms', + 'officialese', + 'officialeses', + 'officialism', + 'officialisms', + 'officially', + 'officiants', + 'officiaries', + 'officiated', + 'officiates', + 'officiating', + 'officiation', + 'officiations', + 'officiously', + 'officiousness', + 'officiousnesses', + 'offishness', + 'offishnesses', + 'offloading', + 'offprinted', + 'offprinting', + 'offscouring', + 'offscourings', + 'offsetting', + 'offsprings', + 'oftentimes', + 'oilinesses', + 'oinologies', + 'oldfangled', + 'oleaginous', + 'oleaginously', + 'oleaginousness', + 'oleaginousnesses', + 'oleandomycin', + 'oleandomycins', + 'olecranons', + 'oleographs', + 'oleomargarine', + 'oleomargarines', + 'oleoresinous', + 'oleoresins', + 'olfactions', + 'olfactometer', + 'olfactometers', + 'oligarchic', + 'oligarchical', + 'oligarchies', + 'oligochaete', + 'oligochaetes', + 'oligoclase', + 'oligoclases', + 'oligodendrocyte', + 'oligodendrocytes', + 'oligodendroglia', + 'oligodendroglial', + 'oligodendroglias', + 'oligomeric', + 'oligomerization', + 'oligomerizations', + 'oligonucleotide', + 'oligonucleotides', + 'oligophagies', + 'oligophagous', + 'oligophagy', + 'oligopolies', + 'oligopolistic', + 'oligopsonies', + 'oligopsonistic', + 'oligopsony', + 'oligosaccharide', + 'oligosaccharides', + 'oligotrophic', + 'olivaceous', + 'olivenites', + 'olivinitic', + 'ololiuquis', + 'ombudsmanship', + 'ombudsmanships', + 'ominousness', + 'ominousnesses', + 'ommatidial', + 'ommatidium', + 'omnicompetence', + 'omnicompetences', + 'omnicompetent', + 'omnidirectional', + 'omnifarious', + 'omnificent', + 'omnipotence', + 'omnipotences', + 'omnipotent', + 'omnipotently', + 'omnipotents', + 'omnipresence', + 'omnipresences', + 'omnipresent', + 'omniranges', + 'omniscience', + 'omnisciences', + 'omniscient', + 'omnisciently', + 'omnivorous', + 'omnivorously', + 'omophagies', + 'omphaloskepses', + 'omphaloskepsis', + 'onchocerciases', + 'onchocerciasis', + 'oncogeneses', + 'oncogenesis', + 'oncogenicities', + 'oncogenicity', + 'oncological', + 'oncologies', + 'oncologist', + 'oncologists', + 'oncornavirus', + 'oncornaviruses', + 'oneirically', + 'oneiromancies', + 'oneiromancy', + 'onerousness', + 'onerousnesses', + 'ongoingness', + 'ongoingnesses', + 'onionskins', + 'onomastically', + 'onomastician', + 'onomasticians', + 'onomastics', + 'onomatologies', + 'onomatologist', + 'onomatologists', + 'onomatology', + 'onomatopoeia', + 'onomatopoeias', + 'onomatopoeic', + 'onomatopoeically', + 'onomatopoetic', + 'onomatopoetically', + 'onslaughts', + 'ontogeneses', + 'ontogenesis', + 'ontogenetic', + 'ontogenetically', + 'ontogenies', + 'ontological', + 'ontologically', + 'ontologies', + 'ontologist', + 'ontologists', + 'onychophoran', + 'onychophorans', + 'oophorectomies', + 'oophorectomy', + 'oozinesses', + 'opacifying', + 'opalescence', + 'opalescences', + 'opalescent', + 'opalescently', + 'opalescing', + 'opaqueness', + 'opaquenesses', + 'openabilities', + 'openability', + 'openhanded', + 'openhandedly', + 'openhandedness', + 'openhandednesses', + 'openhearted', + 'openheartedly', + 'openheartedness', + 'openheartednesses', + 'openmouthed', + 'openmouthedly', + 'openmouthedness', + 'openmouthednesses', + 'opennesses', + 'operabilities', + 'operability', + 'operagoers', + 'operagoing', + 'operagoings', + 'operatically', + 'operational', + 'operationalism', + 'operationalisms', + 'operationalist', + 'operationalistic', + 'operationalists', + 'operationally', + 'operationism', + 'operationisms', + 'operationist', + 'operationists', + 'operations', + 'operatively', + 'operativeness', + 'operativenesses', + 'operatives', + 'operatorless', + 'operculars', + 'operculate', + 'operculated', + 'operculums', + 'operettist', + 'operettists', + 'operoseness', + 'operosenesses', + 'ophiuroids', + 'ophthalmia', + 'ophthalmias', + 'ophthalmic', + 'ophthalmologic', + 'ophthalmological', + 'ophthalmologically', + 'ophthalmologies', + 'ophthalmologist', + 'ophthalmologists', + 'ophthalmology', + 'ophthalmoscope', + 'ophthalmoscopes', + 'ophthalmoscopic', + 'ophthalmoscopies', + 'ophthalmoscopy', + 'opinionated', + 'opinionatedly', + 'opinionatedness', + 'opinionatednesses', + 'opinionative', + 'opinionatively', + 'opinionativeness', + 'opinionativenesses', + 'opisthobranch', + 'opisthobranchs', + 'oppilating', + 'opportunely', + 'opportuneness', + 'opportunenesses', + 'opportunism', + 'opportunisms', + 'opportunist', + 'opportunistic', + 'opportunistically', + 'opportunists', + 'opportunities', + 'opportunity', + 'opposabilities', + 'opposability', + 'opposeless', + 'oppositely', + 'oppositeness', + 'oppositenesses', + 'opposition', + 'oppositional', + 'oppositionist', + 'oppositionists', + 'oppositions', + 'oppressing', + 'oppression', + 'oppressions', + 'oppressive', + 'oppressively', + 'oppressiveness', + 'oppressivenesses', + 'oppressors', + 'opprobrious', + 'opprobriously', + 'opprobriousness', + 'opprobriousnesses', + 'opprobrium', + 'opprobriums', + 'opsonified', + 'opsonifies', + 'opsonifying', + 'opsonizing', + 'optatively', + 'optimalities', + 'optimality', + 'optimisation', + 'optimisations', + 'optimising', + 'optimistic', + 'optimistically', + 'optimization', + 'optimizations', + 'optimizers', + 'optimizing', + 'optionalities', + 'optionality', + 'optionally', + 'optoelectronic', + 'optoelectronics', + 'optokinetic', + 'optometric', + 'optometries', + 'optometrist', + 'optometrists', + 'opulencies', + 'oracularities', + 'oracularity', + 'oracularly', + 'orangeades', + 'orangeries', + 'orangewood', + 'orangewoods', + 'orangutans', + 'oratorical', + 'oratorically', + 'oratresses', + 'orbicularly', + 'orbiculate', + 'orchardist', + 'orchardists', + 'orchestral', + 'orchestrally', + 'orchestras', + 'orchestrate', + 'orchestrated', + 'orchestrater', + 'orchestraters', + 'orchestrates', + 'orchestrating', + 'orchestration', + 'orchestrational', + 'orchestrations', + 'orchestrator', + 'orchestrators', + 'orchidaceous', + 'orchidlike', + 'orchitises', + 'ordainment', + 'ordainments', + 'orderliness', + 'orderlinesses', + 'ordinances', + 'ordinarier', + 'ordinaries', + 'ordinariest', + 'ordinarily', + 'ordinariness', + 'ordinarinesses', + 'ordination', + 'ordinations', + 'ordonnance', + 'ordonnances', + 'organelles', + 'organically', + 'organicism', + 'organicisms', + 'organicist', + 'organicists', + 'organicities', + 'organicity', + 'organisation', + 'organisations', + 'organisers', + 'organising', + 'organismal', + 'organismic', + 'organismically', + 'organizable', + 'organization', + 'organizational', + 'organizationally', + 'organizations', + 'organizers', + 'organizing', + 'organochlorine', + 'organochlorines', + 'organogeneses', + 'organogenesis', + 'organogenetic', + 'organoleptic', + 'organoleptically', + 'organologies', + 'organology', + 'organomercurial', + 'organomercurials', + 'organometallic', + 'organometallics', + 'organophosphate', + 'organophosphates', + 'organophosphorous', + 'organophosphorus', + 'organophosphoruses', + 'organzines', + 'orgiastically', + 'orientalism', + 'orientalisms', + 'orientalist', + 'orientalists', + 'orientalize', + 'orientalized', + 'orientalizes', + 'orientalizing', + 'orientally', + 'orientated', + 'orientates', + 'orientating', + 'orientation', + 'orientational', + 'orientationally', + 'orientations', + 'orienteering', + 'orienteerings', + 'orienteers', + 'oriflammes', + 'originalities', + 'originality', + 'originally', + 'originated', + 'originates', + 'originating', + 'origination', + 'originations', + 'originative', + 'originatively', + 'originator', + 'originators', + 'orismological', + 'orismologies', + 'orismology', + 'ornamental', + 'ornamentally', + 'ornamentals', + 'ornamentation', + 'ornamentations', + 'ornamented', + 'ornamenting', + 'ornateness', + 'ornatenesses', + 'orneriness', + 'ornerinesses', + 'ornithines', + 'ornithischian', + 'ornithischians', + 'ornithologic', + 'ornithological', + 'ornithologically', + 'ornithologies', + 'ornithologist', + 'ornithologists', + 'ornithology', + 'ornithopod', + 'ornithopods', + 'ornithopter', + 'ornithopters', + 'ornithoses', + 'ornithosis', + 'orogeneses', + 'orogenesis', + 'orogenetic', + 'orographic', + 'orographical', + 'orographies', + 'oropharyngeal', + 'oropharynges', + 'oropharynx', + 'oropharynxes', + 'orotundities', + 'orotundity', + 'orphanages', + 'orphanhood', + 'orphanhoods', + 'orphically', + 'orrisroots', + 'orthocenter', + 'orthocenters', + 'orthochromatic', + 'orthoclase', + 'orthoclases', + 'orthodontia', + 'orthodontias', + 'orthodontic', + 'orthodontically', + 'orthodontics', + 'orthodontist', + 'orthodontists', + 'orthodoxes', + 'orthodoxies', + 'orthodoxly', + 'orthoepically', + 'orthoepies', + 'orthoepist', + 'orthoepists', + 'orthogeneses', + 'orthogenesis', + 'orthogenetic', + 'orthogenetically', + 'orthogonal', + 'orthogonalities', + 'orthogonality', + 'orthogonalization', + 'orthogonalizations', + 'orthogonalize', + 'orthogonalized', + 'orthogonalizes', + 'orthogonalizing', + 'orthogonally', + 'orthograde', + 'orthographic', + 'orthographical', + 'orthographically', + 'orthographies', + 'orthography', + 'orthomolecular', + 'orthonormal', + 'orthopaedic', + 'orthopaedics', + 'orthopedic', + 'orthopedically', + 'orthopedics', + 'orthopedist', + 'orthopedists', + 'orthophosphate', + 'orthophosphates', + 'orthopsychiatric', + 'orthopsychiatries', + 'orthopsychiatrist', + 'orthopsychiatrists', + 'orthopsychiatry', + 'orthoptera', + 'orthopteran', + 'orthopterans', + 'orthopterist', + 'orthopterists', + 'orthopteroid', + 'orthopteroids', + 'orthorhombic', + 'orthoscopic', + 'orthostatic', + 'orthotists', + 'orthotropous', + 'oscillated', + 'oscillates', + 'oscillating', + 'oscillation', + 'oscillational', + 'oscillations', + 'oscillator', + 'oscillators', + 'oscillatory', + 'oscillogram', + 'oscillograms', + 'oscillograph', + 'oscillographic', + 'oscillographically', + 'oscillographies', + 'oscillographs', + 'oscillography', + 'oscilloscope', + 'oscilloscopes', + 'oscilloscopic', + 'osculating', + 'osculation', + 'osculations', + 'osculatory', + 'osmeterium', + 'osmiridium', + 'osmiridiums', + 'osmolalities', + 'osmolality', + 'osmolarities', + 'osmolarity', + 'osmometers', + 'osmometric', + 'osmometries', + 'osmoregulation', + 'osmoregulations', + 'osmoregulatory', + 'osmotically', + 'ossification', + 'ossifications', + 'ossifrages', + 'osteitides', + 'ostensible', + 'ostensibly', + 'ostensively', + 'ostensoria', + 'ostensorium', + 'ostentation', + 'ostentations', + 'ostentatious', + 'ostentatiously', + 'ostentatiousness', + 'ostentatiousnesses', + 'osteoarthritic', + 'osteoarthritides', + 'osteoarthritis', + 'osteoblast', + 'osteoblastic', + 'osteoblasts', + 'osteoclast', + 'osteoclastic', + 'osteoclasts', + 'osteocytes', + 'osteogeneses', + 'osteogenesis', + 'osteogenic', + 'osteological', + 'osteologies', + 'osteologist', + 'osteologists', + 'osteomalacia', + 'osteomalacias', + 'osteomyelitides', + 'osteomyelitis', + 'osteopathic', + 'osteopathically', + 'osteopathies', + 'osteopaths', + 'osteopathy', + 'osteoplastic', + 'osteoplasties', + 'osteoplasty', + 'osteoporoses', + 'osteoporosis', + 'osteoporotic', + 'osteosarcoma', + 'osteosarcomas', + 'osteosarcomata', + 'osteosises', + 'ostracised', + 'ostracises', + 'ostracising', + 'ostracisms', + 'ostracized', + 'ostracizes', + 'ostracizing', + 'ostracoderm', + 'ostracoderms', + 'ostracodes', + 'ostrichlike', + 'otherguess', + 'othernesses', + 'otherwhere', + 'otherwhile', + 'otherwhiles', + 'otherworld', + 'otherworldliness', + 'otherworldlinesses', + 'otherworldly', + 'otherworlds', + 'otioseness', + 'otiosenesses', + 'otiosities', + 'otolaryngological', + 'otolaryngologies', + 'otolaryngologist', + 'otolaryngologists', + 'otolaryngology', + 'otorhinolaryngological', + 'otorhinolaryngologies', + 'otorhinolaryngologist', + 'otorhinolaryngologists', + 'otorhinolaryngology', + 'otoscleroses', + 'otosclerosis', + 'otoscopies', + 'ototoxicities', + 'ototoxicity', + 'oubliettes', + 'outachieve', + 'outachieved', + 'outachieves', + 'outachieving', + 'outarguing', + 'outbalance', + 'outbalanced', + 'outbalances', + 'outbalancing', + 'outbargain', + 'outbargained', + 'outbargaining', + 'outbargains', + 'outbarking', + 'outbawling', + 'outbeaming', + 'outbegging', + 'outbidding', + 'outbitched', + 'outbitches', + 'outbitching', + 'outblazing', + 'outbleated', + 'outbleating', + 'outblessed', + 'outblesses', + 'outblessing', + 'outbloomed', + 'outblooming', + 'outbluffed', + 'outbluffing', + 'outblushed', + 'outblushes', + 'outblushing', + 'outboasted', + 'outboasting', + 'outbragged', + 'outbragging', + 'outbraving', + 'outbrawled', + 'outbrawling', + 'outbreeding', + 'outbreedings', + 'outbribing', + 'outbuilding', + 'outbuildings', + 'outbulking', + 'outbullied', + 'outbullies', + 'outbullying', + 'outburning', + 'outcapered', + 'outcapering', + 'outcatches', + 'outcatching', + 'outcaviled', + 'outcaviling', + 'outcavilled', + 'outcavilling', + 'outcharged', + 'outcharges', + 'outcharging', + 'outcharmed', + 'outcharming', + 'outcheated', + 'outcheating', + 'outchidden', + 'outchiding', + 'outclassed', + 'outclasses', + 'outclassing', + 'outclimbed', + 'outclimbing', + 'outcoached', + 'outcoaches', + 'outcoaching', + 'outcompete', + 'outcompeted', + 'outcompetes', + 'outcompeting', + 'outcooking', + 'outcounted', + 'outcounting', + 'outcrawled', + 'outcrawling', + 'outcropped', + 'outcropping', + 'outcroppings', + 'outcrossed', + 'outcrosses', + 'outcrossing', + 'outcrowing', + 'outcursing', + 'outdancing', + 'outdatedly', + 'outdatedness', + 'outdatednesses', + 'outdazzled', + 'outdazzles', + 'outdazzling', + 'outdebated', + 'outdebates', + 'outdebating', + 'outdeliver', + 'outdelivered', + 'outdelivering', + 'outdelivers', + 'outdesigned', + 'outdesigning', + 'outdesigns', + 'outdistance', + 'outdistanced', + 'outdistances', + 'outdistancing', + 'outdodging', + 'outdoorsman', + 'outdoorsmanship', + 'outdoorsmanships', + 'outdoorsmen', + 'outdragged', + 'outdragging', + 'outdrawing', + 'outdreamed', + 'outdreaming', + 'outdressed', + 'outdresses', + 'outdressing', + 'outdrinking', + 'outdriving', + 'outdropped', + 'outdropping', + 'outdueling', + 'outduelled', + 'outduelling', + 'outearning', + 'outechoing', + 'outercoats', + 'outfabling', + 'outfasting', + 'outfawning', + 'outfeasted', + 'outfeasting', + 'outfeeling', + 'outfielder', + 'outfielders', + 'outfighting', + 'outfigured', + 'outfigures', + 'outfiguring', + 'outfinding', + 'outfishing', + 'outfitters', + 'outfitting', + 'outflanked', + 'outflanking', + 'outflowing', + 'outfooling', + 'outfooting', + 'outfrowned', + 'outfrowning', + 'outfumbled', + 'outfumbles', + 'outfumbling', + 'outgaining', + 'outgassing', + 'outgeneral', + 'outgeneraled', + 'outgeneraling', + 'outgenerals', + 'outgivings', + 'outglaring', + 'outglitter', + 'outglittered', + 'outglittering', + 'outglitters', + 'outglowing', + 'outgnawing', + 'outgoingness', + 'outgoingnesses', + 'outgrinned', + 'outgrinning', + 'outgrossed', + 'outgrosses', + 'outgrossing', + 'outgrowing', + 'outgrowths', + 'outguessed', + 'outguesses', + 'outguessing', + 'outguiding', + 'outgunning', + 'outhearing', + 'outhitting', + 'outhomered', + 'outhomering', + 'outhowling', + 'outhumored', + 'outhumoring', + 'outhunting', + 'outhustled', + 'outhustles', + 'outhustling', + 'outintrigue', + 'outintrigued', + 'outintrigues', + 'outintriguing', + 'outjinxing', + 'outjumping', + 'outjutting', + 'outkeeping', + 'outkicking', + 'outkilling', + 'outkissing', + 'outlanders', + 'outlandish', + 'outlandishly', + 'outlandishness', + 'outlandishnesses', + 'outlasting', + 'outlaughed', + 'outlaughing', + 'outlawries', + 'outleaping', + 'outlearned', + 'outlearning', + 'outmaneuver', + 'outmaneuvered', + 'outmaneuvering', + 'outmaneuvers', + 'outmanipulate', + 'outmanipulated', + 'outmanipulates', + 'outmanipulating', + 'outmanning', + 'outmarched', + 'outmarches', + 'outmarching', + 'outmatched', + 'outmatches', + 'outmatching', + 'outmuscled', + 'outmuscles', + 'outmuscling', + 'outnumbered', + 'outnumbering', + 'outnumbers', + 'outorganize', + 'outorganized', + 'outorganizes', + 'outorganizing', + 'outpainted', + 'outpainting', + 'outpassing', + 'outpatient', + 'outpatients', + 'outperform', + 'outperformed', + 'outperforming', + 'outperforms', + 'outpitched', + 'outpitches', + 'outpitching', + 'outpitying', + 'outplacement', + 'outplacements', + 'outplanned', + 'outplanning', + 'outplaying', + 'outplodded', + 'outplodding', + 'outplotted', + 'outplotting', + 'outpointed', + 'outpointing', + 'outpolitick', + 'outpoliticked', + 'outpoliticking', + 'outpoliticks', + 'outpolling', + 'outpopulate', + 'outpopulated', + 'outpopulates', + 'outpopulating', + 'outpouring', + 'outpourings', + 'outpowered', + 'outpowering', + 'outpraying', + 'outpreached', + 'outpreaches', + 'outpreaching', + 'outpreened', + 'outpreening', + 'outpressed', + 'outpresses', + 'outpressing', + 'outpricing', + 'outproduce', + 'outproduced', + 'outproduces', + 'outproducing', + 'outpromise', + 'outpromised', + 'outpromises', + 'outpromising', + 'outpulling', + 'outpunched', + 'outpunches', + 'outpunching', + 'outpushing', + 'outputting', + 'outquoting', + 'outrageous', + 'outrageously', + 'outrageousness', + 'outrageousnesses', + 'outraising', + 'outranging', + 'outranking', + 'outreached', + 'outreaches', + 'outreaching', + 'outreading', + 'outrebound', + 'outrebounded', + 'outrebounding', + 'outrebounds', + 'outreproduce', + 'outreproduced', + 'outreproduces', + 'outreproducing', + 'outriggers', + 'outrightly', + 'outringing', + 'outrivaled', + 'outrivaling', + 'outrivalled', + 'outrivalling', + 'outroaring', + 'outrocking', + 'outrolling', + 'outrooting', + 'outrunning', + 'outrushing', + 'outsailing', + 'outsavored', + 'outsavoring', + 'outschemed', + 'outschemes', + 'outscheming', + 'outscolded', + 'outscolding', + 'outscooped', + 'outscooping', + 'outscoring', + 'outscorned', + 'outscorning', + 'outselling', + 'outserving', + 'outshaming', + 'outshining', + 'outshooting', + 'outshouted', + 'outshouting', + 'outsiderness', + 'outsidernesses', + 'outsinging', + 'outsinning', + 'outsitting', + 'outskating', + 'outsleeping', + 'outslicked', + 'outslicking', + 'outsmarted', + 'outsmarting', + 'outsmiling', + 'outsmoking', + 'outsnoring', + 'outsoaring', + 'outsourcing', + 'outsourcings', + 'outspanned', + 'outspanning', + 'outsparkle', + 'outsparkled', + 'outsparkles', + 'outsparkling', + 'outspeaking', + 'outspeeded', + 'outspeeding', + 'outspelled', + 'outspelling', + 'outspending', + 'outspokenly', + 'outspokenness', + 'outspokennesses', + 'outspreading', + 'outspreads', + 'outsprinted', + 'outsprinting', + 'outsprints', + 'outstanding', + 'outstandingly', + 'outstaring', + 'outstarted', + 'outstarting', + 'outstating', + 'outstation', + 'outstations', + 'outstaying', + 'outsteered', + 'outsteering', + 'outstretch', + 'outstretched', + 'outstretches', + 'outstretching', + 'outstridden', + 'outstrides', + 'outstriding', + 'outstripped', + 'outstripping', + 'outstudied', + 'outstudies', + 'outstudying', + 'outstunted', + 'outstunting', + 'outsulking', + 'outswearing', + 'outswimming', + 'outtalking', + 'outtasking', + 'outtelling', + 'outthanked', + 'outthanking', + 'outthinking', + 'outthought', + 'outthrobbed', + 'outthrobbing', + 'outthrowing', + 'outthrusting', + 'outthrusts', + 'outtowered', + 'outtowering', + 'outtrading', + 'outtricked', + 'outtricking', + 'outtrotted', + 'outtrotting', + 'outtrumped', + 'outtrumping', + 'outvaluing', + 'outvaunted', + 'outvaunting', + 'outvoicing', + 'outwaiting', + 'outwalking', + 'outwardness', + 'outwardnesses', + 'outwarring', + 'outwasting', + 'outwatched', + 'outwatches', + 'outwatching', + 'outwearied', + 'outwearies', + 'outwearing', + 'outwearying', + 'outweeping', + 'outweighed', + 'outweighing', + 'outwhirled', + 'outwhirling', + 'outwilling', + 'outwinding', + 'outwishing', + 'outwitting', + 'outworkers', + 'outworking', + 'outwrestle', + 'outwrestled', + 'outwrestles', + 'outwrestling', + 'outwriting', + 'outwritten', + 'outwrought', + 'outyelling', + 'outyelping', + 'outyielded', + 'outyielding', + 'ovalbumins', + 'ovalnesses', + 'ovariectomies', + 'ovariectomized', + 'ovariectomy', + 'ovariotomies', + 'ovariotomy', + 'ovaritides', + 'overabstract', + 'overabstracted', + 'overabstracting', + 'overabstracts', + 'overabundance', + 'overabundances', + 'overabundant', + 'overaccentuate', + 'overaccentuated', + 'overaccentuates', + 'overaccentuating', + 'overachieve', + 'overachieved', + 'overachievement', + 'overachievements', + 'overachiever', + 'overachievers', + 'overachieves', + 'overachieving', + 'overacting', + 'overaction', + 'overactions', + 'overactive', + 'overactivities', + 'overactivity', + 'overadjustment', + 'overadjustments', + 'overadvertise', + 'overadvertised', + 'overadvertises', + 'overadvertising', + 'overaggressive', + 'overambitious', + 'overambitiousness', + 'overambitiousnesses', + 'overamplified', + 'overanalyses', + 'overanalysis', + 'overanalytical', + 'overanalyze', + 'overanalyzed', + 'overanalyzes', + 'overanalyzing', + 'overanxieties', + 'overanxiety', + 'overanxious', + 'overapplication', + 'overapplications', + 'overarched', + 'overarches', + 'overarching', + 'overarousal', + 'overarousals', + 'overarrange', + 'overarranged', + 'overarranges', + 'overarranging', + 'overarticulate', + 'overarticulated', + 'overarticulates', + 'overarticulating', + 'overassert', + 'overasserted', + 'overasserting', + 'overassertion', + 'overassertions', + 'overassertive', + 'overasserts', + 'overassessment', + 'overassessments', + 'overattention', + 'overattentions', + 'overbaking', + 'overbalance', + 'overbalanced', + 'overbalances', + 'overbalancing', + 'overbearing', + 'overbearingly', + 'overbeaten', + 'overbeating', + 'overbejeweled', + 'overbetted', + 'overbetting', + 'overbidden', + 'overbidding', + 'overbilled', + 'overbilling', + 'overbleach', + 'overbleached', + 'overbleaches', + 'overbleaching', + 'overblouse', + 'overblouses', + 'overblowing', + 'overboiled', + 'overboiling', + 'overbooked', + 'overbooking', + 'overborrow', + 'overborrowed', + 'overborrowing', + 'overborrows', + 'overbought', + 'overbreathing', + 'overbright', + 'overbrowse', + 'overbrowsed', + 'overbrowses', + 'overbrowsing', + 'overbrutal', + 'overbuilding', + 'overbuilds', + 'overburden', + 'overburdened', + 'overburdening', + 'overburdens', + 'overburned', + 'overburning', + 'overbuying', + 'overcalled', + 'overcalling', + 'overcapacities', + 'overcapacity', + 'overcapitalization', + 'overcapitalizations', + 'overcapitalize', + 'overcapitalized', + 'overcapitalizes', + 'overcapitalizing', + 'overcareful', + 'overcasted', + 'overcasting', + 'overcastings', + 'overcaution', + 'overcautioned', + 'overcautioning', + 'overcautions', + 'overcautious', + 'overcentralization', + 'overcentralizations', + 'overcentralize', + 'overcentralized', + 'overcentralizes', + 'overcentralizing', + 'overcharge', + 'overcharged', + 'overcharges', + 'overcharging', + 'overchilled', + 'overchilling', + 'overchills', + 'overcivilized', + 'overclaimed', + 'overclaiming', + 'overclaims', + 'overclassification', + 'overclassifications', + 'overclassified', + 'overclassifies', + 'overclassify', + 'overclassifying', + 'overcleaned', + 'overcleaning', + 'overcleans', + 'overcleared', + 'overclearing', + 'overclears', + 'overclouded', + 'overclouding', + 'overclouds', + 'overcoached', + 'overcoaches', + 'overcoaching', + 'overcomers', + 'overcoming', + 'overcommercialization', + 'overcommercializations', + 'overcommercialize', + 'overcommercialized', + 'overcommercializes', + 'overcommercializing', + 'overcommit', + 'overcommitment', + 'overcommitments', + 'overcommits', + 'overcommitted', + 'overcommitting', + 'overcommunicate', + 'overcommunicated', + 'overcommunicates', + 'overcommunicating', + 'overcommunication', + 'overcommunications', + 'overcompensate', + 'overcompensated', + 'overcompensates', + 'overcompensating', + 'overcompensation', + 'overcompensations', + 'overcompensatory', + 'overcomplex', + 'overcompliance', + 'overcompliances', + 'overcomplicate', + 'overcomplicated', + 'overcomplicates', + 'overcomplicating', + 'overcompress', + 'overcompressed', + 'overcompresses', + 'overcompressing', + 'overconcentration', + 'overconcentrations', + 'overconcern', + 'overconcerned', + 'overconcerning', + 'overconcerns', + 'overconfidence', + 'overconfidences', + 'overconfident', + 'overconfidently', + 'overconscientious', + 'overconscious', + 'overconservative', + 'overconstruct', + 'overconstructed', + 'overconstructing', + 'overconstructs', + 'overconsume', + 'overconsumed', + 'overconsumes', + 'overconsuming', + 'overconsumption', + 'overconsumptions', + 'overcontrol', + 'overcontrolled', + 'overcontrolling', + 'overcontrols', + 'overcooked', + 'overcooking', + 'overcooled', + 'overcooling', + 'overcorrect', + 'overcorrected', + 'overcorrecting', + 'overcorrection', + 'overcorrections', + 'overcorrects', + 'overcounted', + 'overcounting', + 'overcounts', + 'overcrammed', + 'overcramming', + 'overcredulous', + 'overcritical', + 'overcropped', + 'overcropping', + 'overcrowded', + 'overcrowding', + 'overcrowds', + 'overcultivation', + 'overcultivations', + 'overcuring', + 'overcutting', + 'overdaring', + 'overdecked', + 'overdecking', + 'overdecorate', + 'overdecorated', + 'overdecorates', + 'overdecorating', + 'overdecoration', + 'overdecorations', + 'overdemanding', + 'overdependence', + 'overdependences', + 'overdependent', + 'overdesign', + 'overdesigned', + 'overdesigning', + 'overdesigns', + 'overdetermined', + 'overdevelop', + 'overdeveloped', + 'overdeveloping', + 'overdevelopment', + 'overdevelopments', + 'overdevelops', + 'overdifferentiation', + 'overdifferentiations', + 'overdirect', + 'overdirected', + 'overdirecting', + 'overdirects', + 'overdiscount', + 'overdiscounted', + 'overdiscounting', + 'overdiscounts', + 'overdiversities', + 'overdiversity', + 'overdocument', + 'overdocumented', + 'overdocumenting', + 'overdocuments', + 'overdominance', + 'overdominances', + 'overdominant', + 'overdosage', + 'overdosages', + 'overdosing', + 'overdrafts', + 'overdramatic', + 'overdramatize', + 'overdramatized', + 'overdramatizes', + 'overdramatizing', + 'overdrawing', + 'overdressed', + 'overdresses', + 'overdressing', + 'overdrinking', + 'overdrinks', + 'overdriven', + 'overdrives', + 'overdriving', + 'overdrying', + 'overdubbed', + 'overdubbing', + 'overdyeing', + 'overeagerness', + 'overeagernesses', + 'overearnest', + 'overeaters', + 'overeating', + 'overedited', + 'overediting', + 'overeducate', + 'overeducated', + 'overeducates', + 'overeducating', + 'overeducation', + 'overeducations', + 'overelaborate', + 'overelaborated', + 'overelaborates', + 'overelaborating', + 'overelaboration', + 'overelaborations', + 'overembellish', + 'overembellished', + 'overembellishes', + 'overembellishing', + 'overembellishment', + 'overembellishments', + 'overemoted', + 'overemotes', + 'overemoting', + 'overemotional', + 'overemphases', + 'overemphasis', + 'overemphasize', + 'overemphasized', + 'overemphasizes', + 'overemphasizing', + 'overemphatic', + 'overenamored', + 'overencourage', + 'overencouraged', + 'overencourages', + 'overencouraging', + 'overenergetic', + 'overengineer', + 'overengineered', + 'overengineering', + 'overengineers', + 'overenrolled', + 'overentertained', + 'overenthusiasm', + 'overenthusiasms', + 'overenthusiastic', + 'overenthusiastically', + 'overequipped', + 'overestimate', + 'overestimated', + 'overestimates', + 'overestimating', + 'overestimation', + 'overestimations', + 'overevaluation', + 'overevaluations', + 'overexaggerate', + 'overexaggerated', + 'overexaggerates', + 'overexaggerating', + 'overexaggeration', + 'overexaggerations', + 'overexcite', + 'overexcited', + 'overexcites', + 'overexciting', + 'overexercise', + 'overexercised', + 'overexercises', + 'overexercising', + 'overexerted', + 'overexerting', + 'overexertion', + 'overexertions', + 'overexerts', + 'overexpand', + 'overexpanded', + 'overexpanding', + 'overexpands', + 'overexpansion', + 'overexpansions', + 'overexpectation', + 'overexpectations', + 'overexplain', + 'overexplained', + 'overexplaining', + 'overexplains', + 'overexplicit', + 'overexploit', + 'overexploitation', + 'overexploitations', + 'overexploited', + 'overexploiting', + 'overexploits', + 'overexpose', + 'overexposed', + 'overexposes', + 'overexposing', + 'overexposure', + 'overexposures', + 'overextend', + 'overextended', + 'overextending', + 'overextends', + 'overextension', + 'overextensions', + 'overextraction', + 'overextractions', + 'overextrapolation', + 'overextrapolations', + 'overextravagant', + 'overexuberant', + 'overfacile', + 'overfamiliar', + 'overfamiliarities', + 'overfamiliarity', + 'overfastidious', + 'overfatigue', + 'overfatigued', + 'overfatigues', + 'overfavored', + 'overfavoring', + 'overfavors', + 'overfeared', + 'overfearing', + 'overfeeding', + 'overfertilization', + 'overfertilizations', + 'overfertilize', + 'overfertilized', + 'overfertilizes', + 'overfertilizing', + 'overfilled', + 'overfilling', + 'overfished', + 'overfishes', + 'overfishing', + 'overflight', + 'overflights', + 'overflowed', + 'overflowing', + 'overflying', + 'overfocused', + 'overfocuses', + 'overfocusing', + 'overfocussed', + 'overfocusses', + 'overfocussing', + 'overfulfill', + 'overfulfilled', + 'overfulfilling', + 'overfulfills', + 'overfunded', + 'overfunding', + 'overgarment', + 'overgarments', + 'overgeneralization', + 'overgeneralizations', + 'overgeneralize', + 'overgeneralized', + 'overgeneralizes', + 'overgeneralizing', + 'overgenerosities', + 'overgenerosity', + 'overgenerous', + 'overgenerously', + 'overgilded', + 'overgilding', + 'overgirded', + 'overgirding', + 'overglamorize', + 'overglamorized', + 'overglamorizes', + 'overglamorizing', + 'overglazes', + 'overgoaded', + 'overgoading', + 'overgovern', + 'overgoverned', + 'overgoverning', + 'overgoverns', + 'overgrazed', + 'overgrazes', + 'overgrazing', + 'overgrowing', + 'overgrowth', + 'overgrowths', + 'overhanded', + 'overhanding', + 'overhandle', + 'overhandled', + 'overhandles', + 'overhandling', + 'overhanging', + 'overharvest', + 'overharvested', + 'overharvesting', + 'overharvests', + 'overhating', + 'overhauled', + 'overhauling', + 'overheaped', + 'overheaping', + 'overhearing', + 'overheated', + 'overheating', + 'overholding', + 'overhomogenize', + 'overhomogenized', + 'overhomogenizes', + 'overhomogenizing', + 'overhoping', + 'overhunted', + 'overhunting', + 'overhuntings', + 'overhyping', + 'overidealize', + 'overidealized', + 'overidealizes', + 'overidealizing', + 'overidentification', + 'overidentifications', + 'overidentified', + 'overidentifies', + 'overidentify', + 'overidentifying', + 'overimaginative', + 'overimpress', + 'overimpressed', + 'overimpresses', + 'overimpressing', + 'overindebtedness', + 'overindebtednesses', + 'overindulge', + 'overindulged', + 'overindulgence', + 'overindulgences', + 'overindulgent', + 'overindulges', + 'overindulging', + 'overindustrialize', + 'overindustrialized', + 'overindustrializes', + 'overindustrializing', + 'overinflate', + 'overinflated', + 'overinflates', + 'overinflating', + 'overinflation', + 'overinflations', + 'overinform', + 'overinformed', + 'overinforming', + 'overinforms', + 'overingenious', + 'overingenuities', + 'overingenuity', + 'overinsistent', + 'overinsure', + 'overinsured', + 'overinsures', + 'overinsuring', + 'overintellectualization', + 'overintellectualizations', + 'overintellectualize', + 'overintellectualized', + 'overintellectualizes', + 'overintellectualizing', + 'overintense', + 'overintensities', + 'overintensity', + 'overinterpretation', + 'overinterpretations', + 'overinvestment', + 'overinvestments', + 'overissuance', + 'overissuances', + 'overissued', + 'overissues', + 'overissuing', + 'overjoying', + 'overkilled', + 'overkilling', + 'overlabored', + 'overlaboring', + 'overlabors', + 'overlading', + 'overlapped', + 'overlapping', + 'overlavish', + 'overlaying', + 'overleaped', + 'overleaping', + 'overlearned', + 'overlearning', + 'overlearns', + 'overlending', + 'overlength', + 'overlengthen', + 'overlengthened', + 'overlengthening', + 'overlengthens', + 'overletting', + 'overlighted', + 'overlighting', + 'overlights', + 'overliteral', + 'overliterary', + 'overliving', + 'overloaded', + 'overloading', + 'overlooked', + 'overlooking', + 'overlorded', + 'overlording', + 'overlordship', + 'overlordships', + 'overloving', + 'overmanage', + 'overmanaged', + 'overmanages', + 'overmanaging', + 'overmanned', + 'overmannered', + 'overmanning', + 'overmantel', + 'overmantels', + 'overmaster', + 'overmastered', + 'overmastering', + 'overmasters', + 'overmatched', + 'overmatches', + 'overmatching', + 'overmature', + 'overmaturities', + 'overmaturity', + 'overmedicate', + 'overmedicated', + 'overmedicates', + 'overmedicating', + 'overmedication', + 'overmedications', + 'overmelted', + 'overmelting', + 'overmighty', + 'overmilked', + 'overmilking', + 'overmining', + 'overmixing', + 'overmodest', + 'overmodestly', + 'overmodulated', + 'overmuches', + 'overmuscled', + 'overnighted', + 'overnighter', + 'overnighters', + 'overnighting', + 'overnights', + 'overnourish', + 'overnourished', + 'overnourishes', + 'overnourishing', + 'overnutrition', + 'overnutritions', + 'overobvious', + 'overoperate', + 'overoperated', + 'overoperates', + 'overoperating', + 'overopinionated', + 'overoptimism', + 'overoptimisms', + 'overoptimist', + 'overoptimistic', + 'overoptimistically', + 'overoptimists', + 'overorchestrate', + 'overorchestrated', + 'overorchestrates', + 'overorchestrating', + 'overorganize', + 'overorganized', + 'overorganizes', + 'overorganizing', + 'overornament', + 'overornamented', + 'overornamenting', + 'overornaments', + 'overpackage', + 'overpackaged', + 'overpackages', + 'overpackaging', + 'overparticular', + 'overpassed', + 'overpasses', + 'overpassing', + 'overpaying', + 'overpayment', + 'overpayments', + 'overpedaled', + 'overpedaling', + 'overpedalled', + 'overpedalling', + 'overpedals', + 'overpeople', + 'overpeopled', + 'overpeoples', + 'overpeopling', + 'overpersuade', + 'overpersuaded', + 'overpersuades', + 'overpersuading', + 'overpersuasion', + 'overpersuasions', + 'overplaided', + 'overplaids', + 'overplanned', + 'overplanning', + 'overplanted', + 'overplanting', + 'overplants', + 'overplayed', + 'overplaying', + 'overplotted', + 'overplotting', + 'overpluses', + 'overplying', + 'overpopulate', + 'overpopulated', + 'overpopulates', + 'overpopulating', + 'overpopulation', + 'overpopulations', + 'overpotent', + 'overpowered', + 'overpowering', + 'overpoweringly', + 'overpowers', + 'overpraise', + 'overpraised', + 'overpraises', + 'overpraising', + 'overprecise', + 'overprescribe', + 'overprescribed', + 'overprescribes', + 'overprescribing', + 'overprescription', + 'overprescriptions', + 'overpressure', + 'overpressures', + 'overpriced', + 'overprices', + 'overpricing', + 'overprinted', + 'overprinting', + 'overprints', + 'overprivileged', + 'overprized', + 'overprizes', + 'overprizing', + 'overprocess', + 'overprocessed', + 'overprocesses', + 'overprocessing', + 'overproduce', + 'overproduced', + 'overproduces', + 'overproducing', + 'overproduction', + 'overproductions', + 'overprogram', + 'overprogramed', + 'overprograming', + 'overprogrammed', + 'overprogramming', + 'overprograms', + 'overpromise', + 'overpromised', + 'overpromises', + 'overpromising', + 'overpromote', + 'overpromoted', + 'overpromotes', + 'overpromoting', + 'overproportion', + 'overproportionate', + 'overproportionately', + 'overproportioned', + 'overproportioning', + 'overproportions', + 'overprotect', + 'overprotected', + 'overprotecting', + 'overprotection', + 'overprotections', + 'overprotective', + 'overprotectiveness', + 'overprotectivenesses', + 'overprotects', + 'overpumped', + 'overpumping', + 'overqualified', + 'overrating', + 'overreached', + 'overreacher', + 'overreachers', + 'overreaches', + 'overreaching', + 'overreacted', + 'overreacting', + 'overreaction', + 'overreactions', + 'overreacts', + 'overrefined', + 'overrefinement', + 'overrefinements', + 'overregulate', + 'overregulated', + 'overregulates', + 'overregulating', + 'overregulation', + 'overregulations', + 'overreliance', + 'overreliances', + 'overreport', + 'overreported', + 'overreporting', + 'overreports', + 'overrepresentation', + 'overrepresentations', + 'overrepresented', + 'overrespond', + 'overresponded', + 'overresponding', + 'overresponds', + 'overridden', + 'overriding', + 'overruffed', + 'overruffing', + 'overruling', + 'overrunning', + 'oversalted', + 'oversalting', + 'oversanguine', + 'oversaturate', + 'oversaturated', + 'oversaturates', + 'oversaturating', + 'oversaturation', + 'oversaturations', + 'oversauced', + 'oversauces', + 'oversaucing', + 'oversaving', + 'overscaled', + 'overscrupulous', + 'oversecretion', + 'oversecretions', + 'overseeded', + 'overseeding', + 'overseeing', + 'overselling', + 'oversensitive', + 'oversensitiveness', + 'oversensitivenesses', + 'oversensitivities', + 'oversensitivity', + 'overserious', + 'overseriously', + 'overservice', + 'overserviced', + 'overservices', + 'overservicing', + 'oversetting', + 'oversewing', + 'overshadow', + 'overshadowed', + 'overshadowing', + 'overshadows', + 'overshirts', + 'overshooting', + 'overshoots', + 'oversights', + 'oversimple', + 'oversimplification', + 'oversimplifications', + 'oversimplified', + 'oversimplifies', + 'oversimplify', + 'oversimplifying', + 'oversimplistic', + 'oversimply', + 'overskirts', + 'overslaugh', + 'overslaughed', + 'overslaughing', + 'overslaughs', + 'oversleeping', + 'oversleeps', + 'overslipped', + 'overslipping', + 'oversmoked', + 'oversmokes', + 'oversmoking', + 'oversoaked', + 'oversoaking', + 'oversolicitous', + 'oversophisticated', + 'overspecialization', + 'overspecializations', + 'overspecialize', + 'overspecialized', + 'overspecializes', + 'overspecializing', + 'overspeculate', + 'overspeculated', + 'overspeculates', + 'overspeculating', + 'overspeculation', + 'overspeculations', + 'overspender', + 'overspenders', + 'overspending', + 'overspends', + 'overspills', + 'overspread', + 'overspreading', + 'overspreads', + 'overstabilities', + 'overstability', + 'overstaffed', + 'overstaffing', + 'overstaffs', + 'overstated', + 'overstatement', + 'overstatements', + 'overstates', + 'overstating', + 'overstayed', + 'overstaying', + 'oversteers', + 'overstepped', + 'overstepping', + 'overstimulate', + 'overstimulated', + 'overstimulates', + 'overstimulating', + 'overstimulation', + 'overstimulations', + 'overstirred', + 'overstirring', + 'overstocked', + 'overstocking', + 'overstocks', + 'overstories', + 'overstrain', + 'overstrained', + 'overstraining', + 'overstrains', + 'overstress', + 'overstressed', + 'overstresses', + 'overstressing', + 'overstretch', + 'overstretched', + 'overstretches', + 'overstretching', + 'overstrewed', + 'overstrewing', + 'overstrewn', + 'overstrews', + 'overstridden', + 'overstride', + 'overstrides', + 'overstriding', + 'overstrike', + 'overstrikes', + 'overstriking', + 'overstrode', + 'overstruck', + 'overstructured', + 'overstrung', + 'overstuffed', + 'overstuffing', + 'overstuffs', + 'oversubscribe', + 'oversubscribed', + 'oversubscribes', + 'oversubscribing', + 'oversubscription', + 'oversubscriptions', + 'oversubtle', + 'oversudsed', + 'oversudses', + 'oversudsing', + 'oversupped', + 'oversupping', + 'oversupplied', + 'oversupplies', + 'oversupply', + 'oversupplying', + 'oversuspicious', + 'oversweeten', + 'oversweetened', + 'oversweetening', + 'oversweetens', + 'oversweetness', + 'oversweetnesses', + 'overswinging', + 'overswings', + 'overtaking', + 'overtalkative', + 'overtalked', + 'overtalking', + 'overtasked', + 'overtasking', + 'overtaxation', + 'overtaxations', + 'overtaxing', + 'overthinking', + 'overthinks', + 'overthought', + 'overthrowing', + 'overthrown', + 'overthrows', + 'overtighten', + 'overtightened', + 'overtightening', + 'overtightens', + 'overtiming', + 'overtipped', + 'overtipping', + 'overtiring', + 'overtnesses', + 'overtoiled', + 'overtoiling', + 'overtopped', + 'overtopping', + 'overtraded', + 'overtrades', + 'overtrading', + 'overtrained', + 'overtraining', + 'overtrains', + 'overtreated', + 'overtreating', + 'overtreatment', + 'overtreatments', + 'overtreats', + 'overtricks', + 'overtrimmed', + 'overtrimming', + 'overtrumped', + 'overtrumping', + 'overtrumps', + 'overturing', + 'overturned', + 'overturning', + 'overurging', + 'overutilization', + 'overutilizations', + 'overutilize', + 'overutilized', + 'overutilizes', + 'overutilizing', + 'overvaluation', + 'overvaluations', + 'overvalued', + 'overvalues', + 'overvaluing', + 'overviolent', + 'overvoltage', + 'overvoltages', + 'overvoting', + 'overwarmed', + 'overwarming', + 'overwatered', + 'overwatering', + 'overwaters', + 'overwearing', + 'overweened', + 'overweening', + 'overweeningly', + 'overweighed', + 'overweighing', + 'overweighs', + 'overweight', + 'overweighted', + 'overweighting', + 'overweights', + 'overwetted', + 'overwetting', + 'overwhelmed', + 'overwhelming', + 'overwhelmingly', + 'overwhelms', + 'overwinding', + 'overwinter', + 'overwintered', + 'overwintering', + 'overwinters', + 'overwithheld', + 'overwithhold', + 'overwithholding', + 'overwithholds', + 'overworked', + 'overworking', + 'overwrites', + 'overwriting', + 'overwritten', + 'overwrought', + 'overzealous', + 'overzealously', + 'overzealousness', + 'overzealousnesses', + 'oviposited', + 'ovipositing', + 'oviposition', + 'ovipositional', + 'ovipositions', + 'ovipositor', + 'ovipositors', + 'ovolactovegetarian', + 'ovolactovegetarians', + 'ovoviviparous', + 'ovoviviparously', + 'ovoviviparousness', + 'ovoviviparousnesses', + 'ovulations', + 'owlishness', + 'owlishnesses', + 'ownerships', + 'oxacillins', + 'oxalacetate', + 'oxalacetates', + 'oxaloacetate', + 'oxaloacetates', + 'oxidations', + 'oxidatively', + 'oxidizable', + 'oxidoreductase', + 'oxidoreductases', + 'oxyacetylene', + 'oxygenated', + 'oxygenates', + 'oxygenating', + 'oxygenation', + 'oxygenations', + 'oxygenator', + 'oxygenators', + 'oxygenless', + 'oxyhemoglobin', + 'oxyhemoglobins', + 'oxyhydrogen', + 'oxymoronic', + 'oxymoronically', + 'oxyphenbutazone', + 'oxyphenbutazones', + 'oxytetracycline', + 'oxytetracyclines', + 'oxyuriases', + 'oxyuriasis', + 'oystercatcher', + 'oystercatchers', + 'oysterings', + 'ozocerites', + 'ozokerites', + 'ozonations', + 'ozonization', + 'ozonizations', + 'ozonosphere', + 'ozonospheres', + 'pacemakers', + 'pacemaking', + 'pacemakings', + 'pacesetter', + 'pacesetters', + 'pacesetting', + 'pachydermatous', + 'pachyderms', + 'pachysandra', + 'pachysandras', + 'pachytenes', + 'pacifiable', + 'pacifically', + 'pacification', + 'pacifications', + 'pacificator', + 'pacificators', + 'pacificism', + 'pacificisms', + 'pacificist', + 'pacificists', + 'pacifistic', + 'pacifistically', + 'packabilities', + 'packability', + 'packboards', + 'packhorses', + 'packinghouse', + 'packinghouses', + 'packnesses', + 'packsaddle', + 'packsaddles', + 'packthread', + 'packthreads', + 'paddleball', + 'paddleballs', + 'paddleboard', + 'paddleboards', + 'paddleboat', + 'paddleboats', + 'paddlefish', + 'paddlefishes', + 'paddocking', + 'padlocking', + 'paediatric', + 'paediatrician', + 'paediatricians', + 'paediatrics', + 'paedogeneses', + 'paedogenesis', + 'paedogenetic', + 'paedogenetically', + 'paedogenic', + 'paedomorphic', + 'paedomorphism', + 'paedomorphisms', + 'paedomorphoses', + 'paedomorphosis', + 'paganising', + 'paganizers', + 'paganizing', + 'pageantries', + 'paginating', + 'pagination', + 'paginations', + 'paillettes', + 'painfuller', + 'painfullest', + 'painfulness', + 'painfulnesses', + 'painkiller', + 'painkillers', + 'painkilling', + 'painlessly', + 'painlessness', + 'painlessnesses', + 'painstaking', + 'painstakingly', + 'painstakings', + 'paintbrush', + 'paintbrushes', + 'painterliness', + 'painterlinesses', + 'paintworks', + 'palaestrae', + 'palanquins', + 'palatabilities', + 'palatability', + 'palatableness', + 'palatablenesses', + 'palatalization', + 'palatalizations', + 'palatalize', + 'palatalized', + 'palatalizes', + 'palatalizing', + 'palatially', + 'palatialness', + 'palatialnesses', + 'palatinate', + 'palatinates', + 'palavering', + 'palenesses', + 'paleoanthropological', + 'paleoanthropologies', + 'paleoanthropologist', + 'paleoanthropologists', + 'paleoanthropology', + 'paleobiologic', + 'paleobiological', + 'paleobiologies', + 'paleobiologist', + 'paleobiologists', + 'paleobiology', + 'paleobotanic', + 'paleobotanical', + 'paleobotanically', + 'paleobotanies', + 'paleobotanist', + 'paleobotanists', + 'paleobotany', + 'paleoclimatologies', + 'paleoclimatologist', + 'paleoclimatologists', + 'paleoclimatology', + 'paleoecologic', + 'paleoecological', + 'paleoecologies', + 'paleoecologist', + 'paleoecologists', + 'paleoecology', + 'paleogeographic', + 'paleogeographical', + 'paleogeographically', + 'paleogeographies', + 'paleogeography', + 'paleographer', + 'paleographers', + 'paleographic', + 'paleographical', + 'paleographically', + 'paleographies', + 'paleography', + 'paleomagnetic', + 'paleomagnetically', + 'paleomagnetism', + 'paleomagnetisms', + 'paleomagnetist', + 'paleomagnetists', + 'paleontologic', + 'paleontological', + 'paleontologies', + 'paleontologist', + 'paleontologists', + 'paleontology', + 'paleopathological', + 'paleopathologies', + 'paleopathologist', + 'paleopathologists', + 'paleopathology', + 'paleozoological', + 'paleozoologies', + 'paleozoologist', + 'paleozoologists', + 'paleozoology', + 'palimonies', + 'palimpsest', + 'palimpsests', + 'palindrome', + 'palindromes', + 'palindromic', + 'palindromist', + 'palindromists', + 'palingeneses', + 'palingenesis', + 'palingenetic', + 'palisading', + 'palladiums', + 'pallbearer', + 'pallbearers', + 'palletised', + 'palletises', + 'palletising', + 'palletization', + 'palletizations', + 'palletized', + 'palletizer', + 'palletizers', + 'palletizes', + 'palletizing', + 'palliasses', + 'palliating', + 'palliation', + 'palliations', + 'palliative', + 'palliatively', + 'palliatives', + 'palliators', + 'pallidness', + 'pallidnesses', + 'palmations', + 'palmerworm', + 'palmerworms', + 'palmettoes', + 'palmistries', + 'palmitates', + 'paloverdes', + 'palpabilities', + 'palpability', + 'palpations', + 'palpitated', + 'palpitates', + 'palpitating', + 'palpitation', + 'palpitations', + 'palsgraves', + 'paltriness', + 'paltrinesses', + 'palynologic', + 'palynological', + 'palynologically', + 'palynologies', + 'palynologist', + 'palynologists', + 'palynology', + 'pamphleteer', + 'pamphleteered', + 'pamphleteering', + 'pamphleteers', + 'panbroiled', + 'panbroiling', + 'panchromatic', + 'pancratium', + 'pancratiums', + 'pancreases', + 'pancreatectomies', + 'pancreatectomized', + 'pancreatectomy', + 'pancreatic', + 'pancreatin', + 'pancreatins', + 'pancreatitides', + 'pancreatitis', + 'pancreozymin', + 'pancreozymins', + 'pancytopenia', + 'pancytopenias', + 'pandanuses', + 'pandemonium', + 'pandemoniums', + 'pandowdies', + 'panegyrical', + 'panegyrically', + 'panegyrics', + 'panegyrist', + 'panegyrists', + 'panellings', + 'panettones', + 'pangeneses', + 'pangenesis', + 'pangenetic', + 'panhandled', + 'panhandler', + 'panhandlers', + 'panhandles', + 'panhandling', + 'panickiest', + 'paniculate', + 'panjandrum', + 'panjandrums', + 'panleukopenia', + 'panleukopenias', + 'panmixises', + 'panoramically', + 'pansexualities', + 'pansexuality', + 'pansophies', + 'pantalettes', + 'pantalones', + 'pantaloons', + 'pantdresses', + 'pantechnicon', + 'pantechnicons', + 'pantheisms', + 'pantheistic', + 'pantheistical', + 'pantheistically', + 'pantheists', + 'pantisocracies', + 'pantisocracy', + 'pantisocratic', + 'pantisocratical', + 'pantisocratist', + 'pantisocratists', + 'pantograph', + 'pantographic', + 'pantographs', + 'pantomimed', + 'pantomimes', + 'pantomimic', + 'pantomiming', + 'pantomimist', + 'pantomimists', + 'pantothenate', + 'pantothenates', + 'pantropical', + 'pantsuited', + 'pantywaist', + 'pantywaists', + 'papaverine', + 'papaverines', + 'paperbacked', + 'paperbacks', + 'paperboard', + 'paperboards', + 'paperbound', + 'paperbounds', + 'paperhanger', + 'paperhangers', + 'paperhanging', + 'paperhangings', + 'paperiness', + 'paperinesses', + 'papermaker', + 'papermakers', + 'papermaking', + 'papermakings', + 'paperweight', + 'paperweights', + 'paperworks', + 'papeteries', + 'papilionaceous', + 'papillomas', + 'papillomata', + 'papillomatous', + 'papillomavirus', + 'papillomaviruses', + 'papillotes', + 'papistries', + 'papovavirus', + 'papovaviruses', + 'papyrologies', + 'papyrologist', + 'papyrologists', + 'papyrology', + 'parabioses', + 'parabiosis', + 'parabiotic', + 'parabiotically', + 'parabolically', + 'paraboloid', + 'paraboloidal', + 'paraboloids', + 'parachuted', + 'parachutes', + 'parachutic', + 'parachuting', + 'parachutist', + 'parachutists', + 'paradichlorobenzene', + 'paradichlorobenzenes', + 'paradiddle', + 'paradiddles', + 'paradigmatic', + 'paradigmatically', + 'paradisaic', + 'paradisaical', + 'paradisaically', + 'paradisiac', + 'paradisiacal', + 'paradisiacally', + 'paradisial', + 'paradisical', + 'paradoxical', + 'paradoxicalities', + 'paradoxicality', + 'paradoxically', + 'paradoxicalness', + 'paradoxicalnesses', + 'paradropped', + 'paradropping', + 'paraesthesia', + 'paraesthesias', + 'paraffined', + 'paraffinic', + 'paraffining', + 'paraformaldehyde', + 'paraformaldehydes', + 'parageneses', + 'paragenesis', + 'paragenetic', + 'paragenetically', + 'paragoning', + 'paragraphed', + 'paragrapher', + 'paragraphers', + 'paragraphic', + 'paragraphing', + 'paragraphs', + 'parainfluenza', + 'parainfluenzas', + 'parajournalism', + 'parajournalisms', + 'paralanguage', + 'paralanguages', + 'paraldehyde', + 'paraldehydes', + 'paralegals', + 'paralinguistic', + 'paralinguistics', + 'parallactic', + 'parallaxes', + 'paralleled', + 'parallelepiped', + 'parallelepipeds', + 'paralleling', + 'parallelism', + 'parallelisms', + 'parallelled', + 'parallelling', + 'parallelogram', + 'parallelograms', + 'paralogism', + 'paralogisms', + 'paralysing', + 'paralytically', + 'paralytics', + 'paralyzation', + 'paralyzations', + 'paralyzers', + 'paralyzing', + 'paralyzingly', + 'paramagnet', + 'paramagnetic', + 'paramagnetically', + 'paramagnetism', + 'paramagnetisms', + 'paramagnets', + 'paramecium', + 'parameciums', + 'paramedical', + 'paramedicals', + 'paramedics', + 'parameterization', + 'parameterizations', + 'parameterize', + 'parameterized', + 'parameterizes', + 'parameterizing', + 'parameters', + 'parametric', + 'parametrically', + 'parametrization', + 'parametrizations', + 'parametrize', + 'parametrized', + 'parametrizes', + 'parametrizing', + 'paramilitary', + 'paramnesia', + 'paramnesias', + 'paramountcies', + 'paramountcy', + 'paramountly', + 'paramounts', + 'paramylums', + 'paramyxovirus', + 'paramyxoviruses', + 'paranoiacs', + 'paranoically', + 'paranoidal', + 'paranormal', + 'paranormalities', + 'paranormality', + 'paranormally', + 'paranormals', + 'paranymphs', + 'paraphernalia', + 'paraphrasable', + 'paraphrase', + 'paraphrased', + 'paraphraser', + 'paraphrasers', + 'paraphrases', + 'paraphrasing', + 'paraphrastic', + 'paraphrastically', + 'paraphyses', + 'paraphysis', + 'paraplegia', + 'paraplegias', + 'paraplegic', + 'paraplegics', + 'parapodial', + 'parapodium', + 'paraprofessional', + 'paraprofessionals', + 'parapsychological', + 'parapsychologies', + 'parapsychologist', + 'parapsychologists', + 'parapsychology', + 'pararosaniline', + 'pararosanilines', + 'parasailing', + 'parasailings', + 'parasexual', + 'parasexualities', + 'parasexuality', + 'parashioth', + 'parasitical', + 'parasitically', + 'parasiticidal', + 'parasiticide', + 'parasiticides', + 'parasitise', + 'parasitised', + 'parasitises', + 'parasitising', + 'parasitism', + 'parasitisms', + 'parasitization', + 'parasitizations', + 'parasitize', + 'parasitized', + 'parasitizes', + 'parasitizing', + 'parasitoid', + 'parasitoids', + 'parasitologic', + 'parasitological', + 'parasitologically', + 'parasitologies', + 'parasitologist', + 'parasitologists', + 'parasitology', + 'parasitoses', + 'parasitosis', + 'parasympathetic', + 'parasympathetics', + 'parasympathomimetic', + 'parasyntheses', + 'parasynthesis', + 'parasynthetic', + 'paratactic', + 'paratactical', + 'paratactically', + 'parathions', + 'parathormone', + 'parathormones', + 'parathyroid', + 'parathyroidectomies', + 'parathyroidectomized', + 'parathyroidectomy', + 'parathyroids', + 'paratrooper', + 'paratroopers', + 'paratroops', + 'paratyphoid', + 'paratyphoids', + 'parboiling', + 'parbuckled', + 'parbuckles', + 'parbuckling', + 'parcelling', + 'parcenaries', + 'parchments', + 'pardonable', + 'pardonableness', + 'pardonablenesses', + 'pardonably', + 'paregorics', + 'parenchyma', + 'parenchymal', + 'parenchymas', + 'parenchymata', + 'parenchymatous', + 'parentages', + 'parentally', + 'parenteral', + 'parenterally', + 'parentheses', + 'parenthesis', + 'parenthesize', + 'parenthesized', + 'parenthesizes', + 'parenthesizing', + 'parenthetic', + 'parenthetical', + 'parenthetically', + 'parenthood', + 'parenthoods', + 'parentings', + 'parentless', + 'paresthesia', + 'paresthesias', + 'paresthetic', + 'parfleches', + 'parfleshes', + 'parfocalities', + 'parfocality', + 'parfocalize', + 'parfocalized', + 'parfocalizes', + 'parfocalizing', + 'pargetting', + 'pargylines', + 'parimutuel', + 'parishioner', + 'parishioners', + 'parkinsonian', + 'parkinsonism', + 'parkinsonisms', + 'parliament', + 'parliamentarian', + 'parliamentarians', + 'parliamentary', + 'parliaments', + 'parmigiana', + 'parmigiano', + 'parochialism', + 'parochialisms', + 'parochially', + 'parodistic', + 'paronomasia', + 'paronomasias', + 'paronomastic', + 'paronymous', + 'parotitises', + 'paroxysmal', + 'parqueting', + 'parquetries', + 'parrakeets', + 'parricidal', + 'parricides', + 'parritches', + 'parsimonies', + 'parsimonious', + 'parsimoniously', + 'parsonages', + 'parthenocarpic', + 'parthenocarpies', + 'parthenocarpy', + 'parthenogeneses', + 'parthenogenesis', + 'parthenogenetic', + 'parthenogenetically', + 'partialities', + 'partiality', + 'partibilities', + 'partibility', + 'participant', + 'participants', + 'participate', + 'participated', + 'participates', + 'participating', + 'participation', + 'participational', + 'participations', + 'participative', + 'participator', + 'participators', + 'participatory', + 'participial', + 'participially', + 'participle', + 'participles', + 'particleboard', + 'particleboards', + 'particular', + 'particularise', + 'particularised', + 'particularises', + 'particularising', + 'particularism', + 'particularisms', + 'particularist', + 'particularistic', + 'particularists', + 'particularities', + 'particularity', + 'particularization', + 'particularizations', + 'particularize', + 'particularized', + 'particularizes', + 'particularizing', + 'particularly', + 'particulars', + 'particulate', + 'particulates', + 'partisanly', + 'partisanship', + 'partisanships', + 'partitioned', + 'partitioner', + 'partitioners', + 'partitioning', + 'partitionist', + 'partitionists', + 'partitions', + 'partitively', + 'partnering', + 'partnerless', + 'partnership', + 'partnerships', + 'partridgeberries', + 'partridgeberry', + 'partridges', + 'parturient', + 'parturients', + 'parturition', + 'parturitions', + 'parvovirus', + 'parvoviruses', + 'pasqueflower', + 'pasqueflowers', + 'pasquinade', + 'pasquinaded', + 'pasquinades', + 'pasquinading', + 'passacaglia', + 'passacaglias', + 'passageway', + 'passageways', + 'passagework', + 'passageworks', + 'passementerie', + 'passementeries', + 'passengers', + 'passerines', + 'passionate', + 'passionately', + 'passionateness', + 'passionatenesses', + 'passionflower', + 'passionflowers', + 'passionless', + 'passivated', + 'passivates', + 'passivating', + 'passivation', + 'passivations', + 'passiveness', + 'passivenesses', + 'passivisms', + 'passivists', + 'passivities', + 'pasteboard', + 'pasteboards', + 'pastedowns', + 'pastelists', + 'pastellist', + 'pastellists', + 'pasteurise', + 'pasteurised', + 'pasteurises', + 'pasteurising', + 'pasteurization', + 'pasteurizations', + 'pasteurize', + 'pasteurized', + 'pasteurizer', + 'pasteurizers', + 'pasteurizes', + 'pasteurizing', + 'pasticcios', + 'pasticheur', + 'pasticheurs', + 'pastinesses', + 'pastnesses', + 'pastorales', + 'pastoralism', + 'pastoralisms', + 'pastoralist', + 'pastoralists', + 'pastorally', + 'pastoralness', + 'pastoralnesses', + 'pastorates', + 'pastorship', + 'pastorships', + 'pasturages', + 'pastureland', + 'pasturelands', + 'patchboard', + 'patchboards', + 'patchiness', + 'patchinesses', + 'patchoulies', + 'patchoulis', + 'patchworks', + 'patelliform', + 'patentabilities', + 'patentability', + 'patentable', + 'paterfamilias', + 'paternalism', + 'paternalisms', + 'paternalist', + 'paternalistic', + 'paternalistically', + 'paternalists', + 'paternally', + 'paternities', + 'paternoster', + 'paternosters', + 'pathbreaking', + 'pathetical', + 'pathetically', + 'pathfinder', + 'pathfinders', + 'pathfinding', + 'pathfindings', + 'pathlessness', + 'pathlessnesses', + 'pathobiologies', + 'pathobiology', + 'pathogeneses', + 'pathogenesis', + 'pathogenetic', + 'pathogenic', + 'pathogenicities', + 'pathogenicity', + 'pathognomonic', + 'pathologic', + 'pathological', + 'pathologically', + 'pathologies', + 'pathologist', + 'pathologists', + 'pathophysiologic', + 'pathophysiological', + 'pathophysiologies', + 'pathophysiology', + 'patientest', + 'patinating', + 'patination', + 'patinations', + 'patinizing', + 'patisserie', + 'patisseries', + 'patissiers', + 'patresfamilias', + 'patriarchal', + 'patriarchate', + 'patriarchates', + 'patriarchies', + 'patriarchs', + 'patriarchy', + 'patricians', + 'patriciate', + 'patriciates', + 'patricidal', + 'patricides', + 'patrilineal', + 'patrimonial', + 'patrimonies', + 'patriotically', + 'patriotism', + 'patriotisms', + 'patristical', + 'patristics', + 'patrollers', + 'patrolling', + 'patronages', + 'patronesses', + 'patronised', + 'patronises', + 'patronising', + 'patronization', + 'patronizations', + 'patronized', + 'patronizes', + 'patronizing', + 'patronizingly', + 'patronymic', + 'patronymics', + 'patterning', + 'patternings', + 'patternless', + 'paulownias', + 'paunchiest', + 'paunchiness', + 'paunchinesses', + 'pauperisms', + 'pauperized', + 'pauperizes', + 'pauperizing', + 'paupiettes', + 'pavilioned', + 'pavilioning', + 'pawnbroker', + 'pawnbrokers', + 'pawnbroking', + 'pawnbrokings', + 'paymasters', + 'peaceableness', + 'peaceablenesses', + 'peacefuller', + 'peacefullest', + 'peacefully', + 'peacefulness', + 'peacefulnesses', + 'peacekeeper', + 'peacekeepers', + 'peacekeeping', + 'peacekeepings', + 'peacemaker', + 'peacemakers', + 'peacemaking', + 'peacemakings', + 'peacetimes', + 'peacockier', + 'peacockiest', + 'peacocking', + 'peacockish', + 'peakedness', + 'peakednesses', + 'pearlashes', + 'pearlescence', + 'pearlescences', + 'pearlescent', + 'peasantries', + 'peashooter', + 'peashooters', + 'peccadillo', + 'peccadilloes', + 'peccadillos', + 'peccancies', + 'peckerwood', + 'peckerwoods', + 'pectinaceous', + 'pectination', + 'pectinations', + 'pectinesterase', + 'pectinesterases', + 'peculating', + 'peculation', + 'peculations', + 'peculators', + 'peculiarities', + 'peculiarity', + 'peculiarly', + 'pecuniarily', + 'pedagogical', + 'pedagogically', + 'pedagogics', + 'pedagogies', + 'pedagogues', + 'pedantically', + 'pedantries', + 'peddleries', + 'pederastic', + 'pederasties', + 'pedestaled', + 'pedestaling', + 'pedestalled', + 'pedestalling', + 'pedestrian', + 'pedestrianism', + 'pedestrianisms', + 'pedestrians', + 'pediatrician', + 'pediatricians', + 'pediatrics', + 'pediatrist', + 'pediatrists', + 'pedicellate', + 'pediculate', + 'pediculates', + 'pediculoses', + 'pediculosis', + 'pediculosises', + 'pediculous', + 'pedicuring', + 'pedicurist', + 'pedicurists', + 'pedimental', + 'pedimented', + 'pedogeneses', + 'pedogenesis', + 'pedogenetic', + 'pedological', + 'pedologies', + 'pedologist', + 'pedologists', + 'pedometers', + 'pedophiles', + 'pedophilia', + 'pedophiliac', + 'pedophilias', + 'pedophilic', + 'peduncular', + 'pedunculate', + 'pedunculated', + 'peerlessly', + 'peevishness', + 'peevishnesses', + 'pegmatites', + 'pegmatitic', + 'pejorative', + 'pejoratively', + 'pejoratives', + 'pelargonium', + 'pelargoniums', + 'pelecypods', + 'pellagrins', + 'pellagrous', + 'pelletised', + 'pelletises', + 'pelletising', + 'pelletization', + 'pelletizations', + 'pelletized', + 'pelletizer', + 'pelletizers', + 'pelletizes', + 'pelletizing', + 'pellitories', + 'pellucidly', + 'pelycosaur', + 'pelycosaurs', + 'pemphiguses', + 'penalising', + 'penalities', + 'penalization', + 'penalizations', + 'penalizing', + 'pencilings', + 'pencilling', + 'pencillings', + 'pendencies', + 'pendentive', + 'pendentives', + 'pendulousness', + 'pendulousnesses', + 'peneplains', + 'peneplanes', + 'penetrabilities', + 'penetrability', + 'penetrable', + 'penetralia', + 'penetrance', + 'penetrances', + 'penetrants', + 'penetrated', + 'penetrates', + 'penetrating', + 'penetratingly', + 'penetration', + 'penetrations', + 'penetrative', + 'penetrometer', + 'penetrometers', + 'penholders', + 'penicillamine', + 'penicillamines', + 'penicillate', + 'penicillia', + 'penicillin', + 'penicillinase', + 'penicillinases', + 'penicillins', + 'penicillium', + 'peninsular', + 'peninsulas', + 'penitences', + 'penitential', + 'penitentially', + 'penitentiaries', + 'penitentiary', + 'penitently', + 'penmanship', + 'penmanships', + 'pennoncels', + 'pennycress', + 'pennycresses', + 'pennyroyal', + 'pennyroyals', + 'pennyweight', + 'pennyweights', + 'pennywhistle', + 'pennywhistles', + 'pennyworth', + 'pennyworths', + 'pennyworts', + 'penological', + 'penologies', + 'penologist', + 'penologists', + 'pensionable', + 'pensionaries', + 'pensionary', + 'pensioners', + 'pensioning', + 'pensionless', + 'pensiveness', + 'pensivenesses', + 'penstemons', + 'pentachlorophenol', + 'pentachlorophenols', + 'pentagonal', + 'pentagonally', + 'pentagonals', + 'pentagrams', + 'pentahedra', + 'pentahedral', + 'pentahedron', + 'pentahedrons', + 'pentamerous', + 'pentameter', + 'pentameters', + 'pentamidine', + 'pentamidines', + 'pentangles', + 'pentapeptide', + 'pentapeptides', + 'pentaploid', + 'pentaploidies', + 'pentaploids', + 'pentaploidy', + 'pentarchies', + 'pentathlete', + 'pentathletes', + 'pentathlon', + 'pentathlons', + 'pentatonic', + 'pentavalent', + 'pentazocine', + 'pentazocines', + 'penthouses', + 'pentlandite', + 'pentlandites', + 'pentobarbital', + 'pentobarbitals', + 'pentobarbitone', + 'pentobarbitones', + 'pentoxides', + 'pentstemon', + 'pentstemons', + 'pentylenetetrazol', + 'pentylenetetrazols', + 'penultimas', + 'penultimate', + 'penultimately', + 'penuriously', + 'penuriousness', + 'penuriousnesses', + 'peoplehood', + 'peoplehoods', + 'peopleless', + 'peperomias', + 'pepperboxes', + 'peppercorn', + 'peppercorns', + 'peppergrass', + 'peppergrasses', + 'pepperiness', + 'pepperinesses', + 'peppermint', + 'peppermints', + 'pepperminty', + 'pepperonis', + 'peppertree', + 'peppertrees', + 'peppinesses', + 'pepsinogen', + 'pepsinogens', + 'peptidases', + 'peptidoglycan', + 'peptidoglycans', + 'peradventure', + 'peradventures', + 'perambulate', + 'perambulated', + 'perambulates', + 'perambulating', + 'perambulation', + 'perambulations', + 'perambulator', + 'perambulators', + 'perambulatory', + 'perborates', + 'percalines', + 'perceivable', + 'perceivably', + 'perceivers', + 'perceiving', + 'percentage', + 'percentages', + 'percentile', + 'percentiles', + 'perceptibilities', + 'perceptibility', + 'perceptible', + 'perceptibly', + 'perception', + 'perceptional', + 'perceptions', + 'perceptive', + 'perceptively', + 'perceptiveness', + 'perceptivenesses', + 'perceptivities', + 'perceptivity', + 'perceptual', + 'perceptually', + 'perchlorate', + 'perchlorates', + 'perchloroethylene', + 'perchloroethylenes', + 'percipience', + 'percipiences', + 'percipient', + 'percipiently', + 'percipients', + 'percolated', + 'percolates', + 'percolating', + 'percolation', + 'percolations', + 'percolator', + 'percolators', + 'percussing', + 'percussion', + 'percussionist', + 'percussionists', + 'percussions', + 'percussive', + 'percussively', + 'percussiveness', + 'percussivenesses', + 'percutaneous', + 'percutaneously', + 'perditions', + 'perdurabilities', + 'perdurability', + 'perdurable', + 'perdurably', + 'peregrinate', + 'peregrinated', + 'peregrinates', + 'peregrinating', + 'peregrination', + 'peregrinations', + 'peregrines', + 'pereiopods', + 'peremptorily', + 'peremptoriness', + 'peremptorinesses', + 'peremptory', + 'perennated', + 'perennates', + 'perennating', + 'perennation', + 'perennations', + 'perennially', + 'perennials', + 'perestroika', + 'perestroikas', + 'perfecters', + 'perfectest', + 'perfectibilities', + 'perfectibility', + 'perfectible', + 'perfecting', + 'perfection', + 'perfectionism', + 'perfectionisms', + 'perfectionist', + 'perfectionistic', + 'perfectionists', + 'perfections', + 'perfective', + 'perfectively', + 'perfectiveness', + 'perfectivenesses', + 'perfectives', + 'perfectivities', + 'perfectivity', + 'perfectness', + 'perfectnesses', + 'perfidious', + 'perfidiously', + 'perfidiousness', + 'perfidiousnesses', + 'perfoliate', + 'perforated', + 'perforates', + 'perforating', + 'perforation', + 'perforations', + 'perforator', + 'perforators', + 'performabilities', + 'performability', + 'performable', + 'performance', + 'performances', + 'performative', + 'performatives', + 'performatory', + 'performers', + 'performing', + 'perfumeries', + 'perfunctorily', + 'perfunctoriness', + 'perfunctorinesses', + 'perfunctory', + 'perfusates', + 'perfusionist', + 'perfusionists', + 'perfusions', + 'pericardia', + 'pericardial', + 'pericarditides', + 'pericarditis', + 'pericardium', + 'perichondral', + 'perichondria', + 'perichondrium', + 'pericrania', + 'pericranial', + 'pericranium', + 'pericycles', + 'pericyclic', + 'peridotite', + 'peridotites', + 'peridotitic', + 'perigynies', + 'perigynous', + 'perihelial', + 'perihelion', + 'perikaryal', + 'perikaryon', + 'perilously', + 'perilousness', + 'perilousnesses', + 'perilymphs', + 'perimeters', + 'perimysium', + 'perinatally', + 'perineuria', + 'perineurium', + 'periodical', + 'periodically', + 'periodicals', + 'periodicities', + 'periodicity', + 'periodization', + 'periodizations', + 'periodontal', + 'periodontally', + 'periodontics', + 'periodontist', + 'periodontists', + 'periodontologies', + 'periodontology', + 'perionychia', + 'perionychium', + 'periosteal', + 'periosteum', + 'periostites', + 'periostitides', + 'periostitis', + 'periostitises', + 'peripatetic', + 'peripatetically', + 'peripatetics', + 'peripatuses', + 'peripeteia', + 'peripeteias', + 'peripeties', + 'peripheral', + 'peripherally', + 'peripherals', + 'peripheries', + 'periphrases', + 'periphrasis', + 'periphrastic', + 'periphrastically', + 'periphytic', + 'periphyton', + 'periphytons', + 'periplasts', + 'periscopes', + 'periscopic', + 'perishabilities', + 'perishability', + 'perishable', + 'perishables', + 'perissodactyl', + 'perissodactyls', + 'peristalses', + 'peristalsis', + 'peristaltic', + 'peristomes', + 'peristomial', + 'peristyles', + 'perithecia', + 'perithecial', + 'perithecium', + 'peritoneal', + 'peritoneally', + 'peritoneum', + 'peritoneums', + 'peritonites', + 'peritonitides', + 'peritonitis', + 'peritonitises', + 'peritrichous', + 'peritrichously', + 'periwigged', + 'periwinkle', + 'periwinkles', + 'perjurious', + 'perjuriously', + 'perkinesses', + 'permafrost', + 'permafrosts', + 'permanence', + 'permanences', + 'permanencies', + 'permanency', + 'permanently', + 'permanentness', + 'permanentnesses', + 'permanents', + 'permanganate', + 'permanganates', + 'permeabilities', + 'permeability', + 'permeating', + 'permeation', + 'permeations', + 'permeative', + 'permethrin', + 'permethrins', + 'permillage', + 'permillages', + 'permissibilities', + 'permissibility', + 'permissible', + 'permissibleness', + 'permissiblenesses', + 'permissibly', + 'permission', + 'permissions', + 'permissive', + 'permissively', + 'permissiveness', + 'permissivenesses', + 'permittees', + 'permitters', + 'permitting', + 'permittivities', + 'permittivity', + 'permutable', + 'permutation', + 'permutational', + 'permutations', + 'pernicious', + 'perniciously', + 'perniciousness', + 'perniciousnesses', + 'pernickety', + 'perorating', + 'peroration', + 'perorational', + 'perorations', + 'perovskite', + 'perovskites', + 'peroxidase', + 'peroxidases', + 'peroxiding', + 'peroxisomal', + 'peroxisome', + 'peroxisomes', + 'perpendicular', + 'perpendicularities', + 'perpendicularity', + 'perpendicularly', + 'perpendiculars', + 'perpending', + 'perpetrate', + 'perpetrated', + 'perpetrates', + 'perpetrating', + 'perpetration', + 'perpetrations', + 'perpetrator', + 'perpetrators', + 'perpetually', + 'perpetuate', + 'perpetuated', + 'perpetuates', + 'perpetuating', + 'perpetuation', + 'perpetuations', + 'perpetuator', + 'perpetuators', + 'perpetuities', + 'perpetuity', + 'perphenazine', + 'perphenazines', + 'perplexedly', + 'perplexing', + 'perplexities', + 'perplexity', + 'perquisite', + 'perquisites', + 'persecuted', + 'persecutee', + 'persecutees', + 'persecutes', + 'persecuting', + 'persecution', + 'persecutions', + 'persecutive', + 'persecutor', + 'persecutors', + 'persecutory', + 'perseverance', + 'perseverances', + 'perseverate', + 'perseverated', + 'perseverates', + 'perseverating', + 'perseveration', + 'perseverations', + 'persevered', + 'perseveres', + 'persevering', + 'perseveringly', + 'persiflage', + 'persiflages', + 'persimmons', + 'persistence', + 'persistences', + 'persistencies', + 'persistency', + 'persistent', + 'persistently', + 'persisters', + 'persisting', + 'persnicketiness', + 'persnicketinesses', + 'persnickety', + 'personable', + 'personableness', + 'personablenesses', + 'personages', + 'personalise', + 'personalised', + 'personalises', + 'personalising', + 'personalism', + 'personalisms', + 'personalist', + 'personalistic', + 'personalists', + 'personalities', + 'personality', + 'personalization', + 'personalizations', + 'personalize', + 'personalized', + 'personalizes', + 'personalizing', + 'personally', + 'personalties', + 'personalty', + 'personated', + 'personates', + 'personating', + 'personation', + 'personations', + 'personative', + 'personator', + 'personators', + 'personhood', + 'personhoods', + 'personification', + 'personifications', + 'personified', + 'personifier', + 'personifiers', + 'personifies', + 'personifying', + 'personnels', + 'perspectival', + 'perspective', + 'perspectively', + 'perspectives', + 'perspicacious', + 'perspicaciously', + 'perspicaciousness', + 'perspicaciousnesses', + 'perspicacities', + 'perspicacity', + 'perspicuities', + 'perspicuity', + 'perspicuous', + 'perspicuously', + 'perspicuousness', + 'perspicuousnesses', + 'perspiration', + 'perspirations', + 'perspiratory', + 'perspiring', + 'persuadable', + 'persuaders', + 'persuading', + 'persuasible', + 'persuasion', + 'persuasions', + 'persuasive', + 'persuasively', + 'persuasiveness', + 'persuasivenesses', + 'pertaining', + 'pertinacious', + 'pertinaciously', + 'pertinaciousness', + 'pertinaciousnesses', + 'pertinacities', + 'pertinacity', + 'pertinence', + 'pertinences', + 'pertinencies', + 'pertinency', + 'pertinently', + 'pertnesses', + 'perturbable', + 'perturbation', + 'perturbational', + 'perturbations', + 'perturbing', + 'pertussises', + 'pervasions', + 'pervasively', + 'pervasiveness', + 'pervasivenesses', + 'perversely', + 'perverseness', + 'perversenesses', + 'perversion', + 'perversions', + 'perversities', + 'perversity', + 'perversive', + 'pervertedly', + 'pervertedness', + 'pervertednesses', + 'perverters', + 'perverting', + 'perviousness', + 'perviousnesses', + 'pessimisms', + 'pessimistic', + 'pessimistically', + 'pessimists', + 'pesthouses', + 'pesticides', + 'pestiferous', + 'pestiferously', + 'pestiferousness', + 'pestiferousnesses', + 'pestilence', + 'pestilences', + 'pestilential', + 'pestilentially', + 'pestilently', + 'petalodies', + 'petiolules', + 'petiteness', + 'petitenesses', + 'petitionary', + 'petitioned', + 'petitioner', + 'petitioners', + 'petitioning', + 'petnapping', + 'petrifaction', + 'petrifactions', + 'petrification', + 'petrifications', + 'petrifying', + 'petrochemical', + 'petrochemicals', + 'petrochemistries', + 'petrochemistry', + 'petrodollar', + 'petrodollars', + 'petrogeneses', + 'petrogenesis', + 'petrogenetic', + 'petroglyph', + 'petroglyphs', + 'petrographer', + 'petrographers', + 'petrographic', + 'petrographical', + 'petrographically', + 'petrographies', + 'petrography', + 'petrolatum', + 'petrolatums', + 'petroleums', + 'petrologic', + 'petrological', + 'petrologically', + 'petrologies', + 'petrologist', + 'petrologists', + 'petticoated', + 'petticoats', + 'pettifogged', + 'pettifogger', + 'pettifoggeries', + 'pettifoggers', + 'pettifoggery', + 'pettifogging', + 'pettifoggings', + 'pettinesses', + 'pettishness', + 'pettishnesses', + 'petulances', + 'petulancies', + 'petulantly', + 'pewholders', + 'phagocytes', + 'phagocytic', + 'phagocytize', + 'phagocytized', + 'phagocytizes', + 'phagocytizing', + 'phagocytose', + 'phagocytosed', + 'phagocytoses', + 'phagocytosing', + 'phagocytosis', + 'phagocytotic', + 'phalangeal', + 'phalangers', + 'phalansteries', + 'phalanstery', + 'phalaropes', + 'phallically', + 'phallicism', + 'phallicisms', + 'phallocentric', + 'phanerogam', + 'phanerogams', + 'phanerophyte', + 'phanerophytes', + 'phantasied', + 'phantasies', + 'phantasmagoria', + 'phantasmagorias', + 'phantasmagoric', + 'phantasmagorical', + 'phantasmal', + 'phantasmata', + 'phantasmic', + 'phantasying', + 'phantomlike', + 'pharisaical', + 'pharisaically', + 'pharisaicalness', + 'pharisaicalnesses', + 'pharisaism', + 'pharisaisms', + 'pharmaceutical', + 'pharmaceutically', + 'pharmaceuticals', + 'pharmacies', + 'pharmacist', + 'pharmacists', + 'pharmacodynamic', + 'pharmacodynamically', + 'pharmacodynamics', + 'pharmacognosies', + 'pharmacognostic', + 'pharmacognostical', + 'pharmacognosy', + 'pharmacokinetic', + 'pharmacokinetics', + 'pharmacologic', + 'pharmacological', + 'pharmacologically', + 'pharmacologies', + 'pharmacologist', + 'pharmacologists', + 'pharmacology', + 'pharmacopeia', + 'pharmacopeial', + 'pharmacopeias', + 'pharmacopoeia', + 'pharmacopoeial', + 'pharmacopoeias', + 'pharmacotherapies', + 'pharmacotherapy', + 'pharyngeal', + 'pharyngitides', + 'pharyngitis', + 'phasedowns', + 'phatically', + 'phelloderm', + 'phelloderms', + 'phellogens', + 'phelonions', + 'phenacaine', + 'phenacaines', + 'phenacetin', + 'phenacetins', + 'phenacites', + 'phenakites', + 'phenanthrene', + 'phenanthrenes', + 'phenazines', + 'phencyclidine', + 'phencyclidines', + 'pheneticist', + 'pheneticists', + 'phenmetrazine', + 'phenmetrazines', + 'phenobarbital', + 'phenobarbitals', + 'phenobarbitone', + 'phenobarbitones', + 'phenocopies', + 'phenocryst', + 'phenocrystic', + 'phenocrysts', + 'phenolated', + 'phenolates', + 'phenological', + 'phenologically', + 'phenologies', + 'phenolphthalein', + 'phenolphthaleins', + 'phenomenal', + 'phenomenalism', + 'phenomenalisms', + 'phenomenalist', + 'phenomenalistic', + 'phenomenalistically', + 'phenomenalists', + 'phenomenally', + 'phenomenas', + 'phenomenological', + 'phenomenologically', + 'phenomenologies', + 'phenomenologist', + 'phenomenologists', + 'phenomenology', + 'phenomenon', + 'phenomenons', + 'phenothiazine', + 'phenothiazines', + 'phenotypes', + 'phenotypic', + 'phenotypical', + 'phenotypically', + 'phenoxides', + 'phentolamine', + 'phentolamines', + 'phenylalanine', + 'phenylalanines', + 'phenylbutazone', + 'phenylbutazones', + 'phenylephrine', + 'phenylephrines', + 'phenylethylamine', + 'phenylethylamines', + 'phenylketonuria', + 'phenylketonurias', + 'phenylketonuric', + 'phenylketonurics', + 'phenylpropanolamine', + 'phenylpropanolamines', + 'phenylthiocarbamide', + 'phenylthiocarbamides', + 'phenylthiourea', + 'phenylthioureas', + 'phenytoins', + 'pheochromocytoma', + 'pheochromocytomas', + 'pheochromocytomata', + 'pheromonal', + 'pheromones', + 'philadelphus', + 'philadelphuses', + 'philandered', + 'philanderer', + 'philanderers', + 'philandering', + 'philanders', + 'philanthropic', + 'philanthropical', + 'philanthropically', + 'philanthropies', + 'philanthropist', + 'philanthropists', + 'philanthropoid', + 'philanthropoids', + 'philanthropy', + 'philatelic', + 'philatelically', + 'philatelies', + 'philatelist', + 'philatelists', + 'philharmonic', + 'philharmonics', + 'philhellene', + 'philhellenes', + 'philhellenic', + 'philhellenism', + 'philhellenisms', + 'philhellenist', + 'philhellenists', + 'philippics', + 'philistine', + 'philistines', + 'philistinism', + 'philistinisms', + 'phillumenist', + 'phillumenists', + 'philodendra', + 'philodendron', + 'philodendrons', + 'philological', + 'philologically', + 'philologies', + 'philologist', + 'philologists', + 'philoprogenitive', + 'philoprogenitiveness', + 'philoprogenitivenesses', + 'philosophe', + 'philosopher', + 'philosophers', + 'philosophes', + 'philosophic', + 'philosophical', + 'philosophically', + 'philosophies', + 'philosophise', + 'philosophised', + 'philosophises', + 'philosophising', + 'philosophize', + 'philosophized', + 'philosophizer', + 'philosophizers', + 'philosophizes', + 'philosophizing', + 'philosophy', + 'philtering', + 'phlebitides', + 'phlebogram', + 'phlebograms', + 'phlebographic', + 'phlebographies', + 'phlebography', + 'phlebologies', + 'phlebology', + 'phlebotomies', + 'phlebotomist', + 'phlebotomists', + 'phlebotomy', + 'phlegmatic', + 'phlegmatically', + 'phlegmiest', + 'phlogistic', + 'phlogiston', + 'phlogistons', + 'phlogopite', + 'phlogopites', + 'phoenixlike', + 'phonations', + 'phonematic', + 'phonemically', + 'phonemicist', + 'phonemicists', + 'phonetically', + 'phonetician', + 'phoneticians', + 'phonically', + 'phoninesses', + 'phonocardiogram', + 'phonocardiograms', + 'phonocardiograph', + 'phonocardiographic', + 'phonocardiographies', + 'phonocardiographs', + 'phonocardiography', + 'phonogramic', + 'phonogramically', + 'phonogrammic', + 'phonogrammically', + 'phonograms', + 'phonograph', + 'phonographer', + 'phonographers', + 'phonographic', + 'phonographically', + 'phonographies', + 'phonographs', + 'phonography', + 'phonolites', + 'phonologic', + 'phonological', + 'phonologically', + 'phonologies', + 'phonologist', + 'phonologists', + 'phonotactic', + 'phonotactics', + 'phosphatase', + 'phosphatases', + 'phosphates', + 'phosphatic', + 'phosphatide', + 'phosphatides', + 'phosphatidic', + 'phosphatidyl', + 'phosphatidylcholine', + 'phosphatidylcholines', + 'phosphatidylethanolamine', + 'phosphatidylethanolamines', + 'phosphatidyls', + 'phosphatization', + 'phosphatizations', + 'phosphatize', + 'phosphatized', + 'phosphatizes', + 'phosphatizing', + 'phosphaturia', + 'phosphaturias', + 'phosphenes', + 'phosphides', + 'phosphines', + 'phosphites', + 'phosphocreatine', + 'phosphocreatines', + 'phosphodiesterase', + 'phosphodiesterases', + 'phosphoenolpyruvate', + 'phosphoenolpyruvates', + 'phosphofructokinase', + 'phosphofructokinases', + 'phosphoglucomutase', + 'phosphoglucomutases', + 'phosphoglyceraldehyde', + 'phosphoglyceraldehydes', + 'phosphoglycerate', + 'phosphoglycerates', + 'phosphokinase', + 'phosphokinases', + 'phospholipase', + 'phospholipases', + 'phospholipid', + 'phospholipids', + 'phosphomonoesterase', + 'phosphomonoesterases', + 'phosphonium', + 'phosphoniums', + 'phosphoprotein', + 'phosphoproteins', + 'phosphores', + 'phosphoresce', + 'phosphoresced', + 'phosphorescence', + 'phosphorescences', + 'phosphorescent', + 'phosphorescently', + 'phosphoresces', + 'phosphorescing', + 'phosphoric', + 'phosphorite', + 'phosphorites', + 'phosphoritic', + 'phosphorolyses', + 'phosphorolysis', + 'phosphorolytic', + 'phosphorous', + 'phosphorus', + 'phosphoruses', + 'phosphoryl', + 'phosphorylase', + 'phosphorylases', + 'phosphorylate', + 'phosphorylated', + 'phosphorylates', + 'phosphorylating', + 'phosphorylation', + 'phosphorylations', + 'phosphorylative', + 'phosphoryls', + 'photically', + 'photoautotroph', + 'photoautotrophic', + 'photoautotrophically', + 'photoautotrophs', + 'photobiologic', + 'photobiological', + 'photobiologies', + 'photobiologist', + 'photobiologists', + 'photobiology', + 'photocathode', + 'photocathodes', + 'photocells', + 'photochemical', + 'photochemically', + 'photochemist', + 'photochemistries', + 'photochemistry', + 'photochemists', + 'photochromic', + 'photochromism', + 'photochromisms', + 'photocoagulation', + 'photocoagulations', + 'photocompose', + 'photocomposed', + 'photocomposer', + 'photocomposers', + 'photocomposes', + 'photocomposing', + 'photocomposition', + 'photocompositions', + 'photoconductive', + 'photoconductivities', + 'photoconductivity', + 'photocopied', + 'photocopier', + 'photocopiers', + 'photocopies', + 'photocopying', + 'photocurrent', + 'photocurrents', + 'photodecomposition', + 'photodecompositions', + 'photodegradable', + 'photodetector', + 'photodetectors', + 'photodiode', + 'photodiodes', + 'photodisintegrate', + 'photodisintegrated', + 'photodisintegrates', + 'photodisintegrating', + 'photodisintegration', + 'photodisintegrations', + 'photodissociate', + 'photodissociated', + 'photodissociates', + 'photodissociating', + 'photodissociation', + 'photodissociations', + 'photoduplicate', + 'photoduplicated', + 'photoduplicates', + 'photoduplicating', + 'photoduplication', + 'photoduplications', + 'photodynamic', + 'photodynamically', + 'photoelectric', + 'photoelectrically', + 'photoelectron', + 'photoelectronic', + 'photoelectrons', + 'photoemission', + 'photoemissions', + 'photoemissive', + 'photoengrave', + 'photoengraved', + 'photoengraver', + 'photoengravers', + 'photoengraves', + 'photoengraving', + 'photoengravings', + 'photoexcitation', + 'photoexcitations', + 'photoexcited', + 'photofinisher', + 'photofinishers', + 'photofinishing', + 'photofinishings', + 'photoflash', + 'photoflashes', + 'photoflood', + 'photofloods', + 'photofluorographies', + 'photofluorography', + 'photogenic', + 'photogenically', + 'photogeologic', + 'photogeological', + 'photogeologies', + 'photogeologist', + 'photogeologists', + 'photogeology', + 'photogrammetric', + 'photogrammetries', + 'photogrammetrist', + 'photogrammetrists', + 'photogrammetry', + 'photograms', + 'photograph', + 'photographed', + 'photographer', + 'photographers', + 'photographic', + 'photographically', + 'photographies', + 'photographing', + 'photographs', + 'photography', + 'photogravure', + 'photogravures', + 'photoinduced', + 'photoinduction', + 'photoinductions', + 'photoinductive', + 'photointerpretation', + 'photointerpretations', + 'photointerpreter', + 'photointerpreters', + 'photoionization', + 'photoionizations', + 'photoionize', + 'photoionized', + 'photoionizes', + 'photoionizing', + 'photojournalism', + 'photojournalisms', + 'photojournalist', + 'photojournalistic', + 'photojournalists', + 'photokineses', + 'photokinesis', + 'photokinetic', + 'photolithograph', + 'photolithographed', + 'photolithographic', + 'photolithographically', + 'photolithographies', + 'photolithographing', + 'photolithographs', + 'photolithography', + 'photolyses', + 'photolysis', + 'photolytic', + 'photolytically', + 'photolyzable', + 'photolyzed', + 'photolyzes', + 'photolyzing', + 'photomapped', + 'photomapping', + 'photomasks', + 'photomechanical', + 'photomechanically', + 'photometer', + 'photometers', + 'photometric', + 'photometrically', + 'photometries', + 'photometry', + 'photomicrograph', + 'photomicrographic', + 'photomicrographies', + 'photomicrographs', + 'photomicrography', + 'photomontage', + 'photomontages', + 'photomorphogeneses', + 'photomorphogenesis', + 'photomorphogenic', + 'photomosaic', + 'photomosaics', + 'photomultiplier', + 'photomultipliers', + 'photomural', + 'photomurals', + 'photonegative', + 'photonuclear', + 'photooxidation', + 'photooxidations', + 'photooxidative', + 'photooxidize', + 'photooxidized', + 'photooxidizes', + 'photooxidizing', + 'photoperiod', + 'photoperiodic', + 'photoperiodically', + 'photoperiodism', + 'photoperiodisms', + 'photoperiods', + 'photophase', + 'photophases', + 'photophobia', + 'photophobias', + 'photophobic', + 'photophore', + 'photophores', + 'photophosphorylation', + 'photophosphorylations', + 'photoplays', + 'photopolarimeter', + 'photopolarimeters', + 'photopolymer', + 'photopolymers', + 'photopositive', + 'photoproduct', + 'photoproduction', + 'photoproductions', + 'photoproducts', + 'photoreaction', + 'photoreactions', + 'photoreactivating', + 'photoreactivation', + 'photoreactivations', + 'photoreception', + 'photoreceptions', + 'photoreceptive', + 'photoreceptor', + 'photoreceptors', + 'photoreconnaissance', + 'photoreconnaissances', + 'photoreduce', + 'photoreduced', + 'photoreduces', + 'photoreducing', + 'photoreduction', + 'photoreductions', + 'photoreproduction', + 'photoreproductions', + 'photoresist', + 'photoresists', + 'photorespiration', + 'photorespirations', + 'photosensitive', + 'photosensitivities', + 'photosensitivity', + 'photosensitization', + 'photosensitizations', + 'photosensitize', + 'photosensitized', + 'photosensitizer', + 'photosensitizers', + 'photosensitizes', + 'photosensitizing', + 'photosetter', + 'photosetters', + 'photosetting', + 'photosphere', + 'photospheres', + 'photospheric', + 'photostated', + 'photostatic', + 'photostating', + 'photostats', + 'photostatted', + 'photostatting', + 'photosynthate', + 'photosynthates', + 'photosyntheses', + 'photosynthesis', + 'photosynthesize', + 'photosynthesized', + 'photosynthesizes', + 'photosynthesizing', + 'photosynthetic', + 'photosynthetically', + 'photosystem', + 'photosystems', + 'phototactic', + 'phototactically', + 'phototaxes', + 'phototaxis', + 'phototelegraphies', + 'phototelegraphy', + 'phototoxic', + 'phototoxicities', + 'phototoxicity', + 'phototropic', + 'phototropically', + 'phototropism', + 'phototropisms', + 'phototubes', + 'phototypesetter', + 'phototypesetters', + 'phototypesetting', + 'phototypesettings', + 'photovoltaic', + 'photovoltaics', + 'phragmoplast', + 'phragmoplasts', + 'phrasemaker', + 'phrasemakers', + 'phrasemaking', + 'phrasemakings', + 'phrasemonger', + 'phrasemongering', + 'phrasemongerings', + 'phrasemongers', + 'phraseological', + 'phraseologies', + 'phraseologist', + 'phraseologists', + 'phraseology', + 'phreatophyte', + 'phreatophytes', + 'phreatophytic', + 'phrenological', + 'phrenologies', + 'phrenologist', + 'phrenologists', + 'phrenology', + 'phrensying', + 'phthalocyanine', + 'phthalocyanines', + 'phthisical', + 'phycocyanin', + 'phycocyanins', + 'phycoerythrin', + 'phycoerythrins', + 'phycological', + 'phycologies', + 'phycologist', + 'phycologists', + 'phycomycete', + 'phycomycetes', + 'phycomycetous', + 'phylacteries', + 'phylactery', + 'phylaxises', + 'phylesises', + 'phyletically', + 'phyllaries', + 'phylloclade', + 'phylloclades', + 'phyllodium', + 'phyllotactic', + 'phyllotaxes', + 'phyllotaxies', + 'phyllotaxis', + 'phyllotaxy', + 'phylloxera', + 'phylloxerae', + 'phylloxeras', + 'phylogenetic', + 'phylogenetically', + 'phylogenies', + 'physiatrist', + 'physiatrists', + 'physicalism', + 'physicalisms', + 'physicalist', + 'physicalistic', + 'physicalists', + 'physicalities', + 'physicality', + 'physically', + 'physicalness', + 'physicalnesses', + 'physicians', + 'physicists', + 'physicking', + 'physicochemical', + 'physicochemically', + 'physiocratic', + 'physiognomic', + 'physiognomical', + 'physiognomically', + 'physiognomies', + 'physiognomy', + 'physiographer', + 'physiographers', + 'physiographic', + 'physiographical', + 'physiographies', + 'physiography', + 'physiologic', + 'physiological', + 'physiologically', + 'physiologies', + 'physiologist', + 'physiologists', + 'physiology', + 'physiopathologic', + 'physiopathological', + 'physiopathologies', + 'physiopathology', + 'physiotherapies', + 'physiotherapist', + 'physiotherapists', + 'physiotherapy', + 'physostigmine', + 'physostigmines', + 'phytoalexin', + 'phytoalexins', + 'phytochemical', + 'phytochemically', + 'phytochemist', + 'phytochemistries', + 'phytochemistry', + 'phytochemists', + 'phytochrome', + 'phytochromes', + 'phytoflagellate', + 'phytoflagellates', + 'phytogeographer', + 'phytogeographers', + 'phytogeographic', + 'phytogeographical', + 'phytogeographically', + 'phytogeographies', + 'phytogeography', + 'phytohemagglutinin', + 'phytohemagglutinins', + 'phytohormone', + 'phytohormones', + 'phytopathogen', + 'phytopathogenic', + 'phytopathogens', + 'phytopathological', + 'phytopathologies', + 'phytopathology', + 'phytophagous', + 'phytoplankter', + 'phytoplankters', + 'phytoplankton', + 'phytoplanktonic', + 'phytoplanktons', + 'phytosociological', + 'phytosociologies', + 'phytosociology', + 'phytosterol', + 'phytosterols', + 'phytotoxic', + 'phytotoxicities', + 'phytotoxicity', + 'pianissimi', + 'pianissimo', + 'pianissimos', + 'pianistically', + 'pianoforte', + 'pianofortes', + 'picaninnies', + 'picaresque', + 'picaresques', + 'picarooned', + 'picarooning', + 'picayunish', + 'piccalilli', + 'piccalillis', + 'piccoloist', + 'piccoloists', + 'pickabacked', + 'pickabacking', + 'pickabacks', + 'pickaninnies', + 'pickaninny', + 'pickaroons', + 'pickeering', + 'pickerelweed', + 'pickerelweeds', + 'picketboat', + 'picketboats', + 'pickpocket', + 'pickpockets', + 'pickthanks', + 'picnickers', + 'picnicking', + 'picofarads', + 'picornavirus', + 'picornaviruses', + 'picosecond', + 'picoseconds', + 'picrotoxin', + 'picrotoxins', + 'pictograms', + 'pictograph', + 'pictographic', + 'pictographies', + 'pictographs', + 'pictography', + 'pictorialism', + 'pictorialisms', + 'pictorialist', + 'pictorialists', + 'pictorialization', + 'pictorializations', + 'pictorialize', + 'pictorialized', + 'pictorializes', + 'pictorializing', + 'pictorially', + 'pictorialness', + 'pictorialnesses', + 'pictorials', + 'picturephone', + 'picturephones', + 'picturesque', + 'picturesquely', + 'picturesqueness', + 'picturesquenesses', + 'picturization', + 'picturizations', + 'picturized', + 'picturizes', + 'picturizing', + 'pidginization', + 'pidginizations', + 'pidginized', + 'pidginizes', + 'pidginizing', + 'pieceworker', + 'pieceworkers', + 'pieceworks', + 'piercingly', + 'pietistically', + 'piezoelectric', + 'piezoelectrically', + 'piezoelectricities', + 'piezoelectricity', + 'piezometer', + 'piezometers', + 'piezometric', + 'pigeonhole', + 'pigeonholed', + 'pigeonholer', + 'pigeonholers', + 'pigeonholes', + 'pigeonholing', + 'pigeonites', + 'pigeonwing', + 'pigeonwings', + 'piggishness', + 'piggishnesses', + 'piggybacked', + 'piggybacking', + 'piggybacks', + 'pigheadedly', + 'pigheadedness', + 'pigheadednesses', + 'pigmentary', + 'pigmentation', + 'pigmentations', + 'pigmenting', + 'pigsticked', + 'pigsticker', + 'pigstickers', + 'pigsticking', + 'pikestaffs', + 'pikestaves', + 'pilferable', + 'pilferages', + 'pilferproof', + 'pilgarlics', + 'pilgrimage', + 'pilgrimaged', + 'pilgrimages', + 'pilgrimaging', + 'pillarless', + 'pillorying', + 'pillowcase', + 'pillowcases', + 'pilocarpine', + 'pilocarpines', + 'pilosities', + 'pilothouse', + 'pilothouses', + 'pimpernels', + 'pimpmobile', + 'pimpmobiles', + 'pincerlike', + 'pinchbecks', + 'pinchpenny', + 'pincushion', + 'pincushions', + 'pinealectomies', + 'pinealectomize', + 'pinealectomized', + 'pinealectomizes', + 'pinealectomizing', + 'pinealectomy', + 'pineapples', + 'pinfeather', + 'pinfeathers', + 'pinfolding', + 'pingrasses', + 'pinheadedness', + 'pinheadednesses', + 'pinkishness', + 'pinkishnesses', + 'pinknesses', + 'pinnacling', + 'pinnatifid', + 'pinocytoses', + 'pinocytosis', + 'pinocytotic', + 'pinocytotically', + 'pinpointed', + 'pinpointing', + 'pinpricked', + 'pinpricking', + 'pinsetters', + 'pinspotter', + 'pinspotters', + 'pinstriped', + 'pinstripes', + 'pinwheeled', + 'pinwheeling', + 'pioneering', + 'piousnesses', + 'pipefishes', + 'pipelining', + 'piperazine', + 'piperazines', + 'piperidine', + 'piperidines', + 'piperonals', + 'pipestones', + 'pipinesses', + 'pipsissewa', + 'pipsissewas', + 'pipsqueaks', + 'piquancies', + 'piquantness', + 'piquantnesses', + 'piratically', + 'piroplasma', + 'piroplasmata', + 'piroplasms', + 'pirouetted', + 'pirouettes', + 'pirouetting', + 'piscatorial', + 'pisciculture', + 'piscicultures', + 'piscivorous', + 'pistachios', + 'pistareens', + 'pistillate', + 'pistoleers', + 'pistolling', + 'pitapatted', + 'pitapatting', + 'pitchblende', + 'pitchblendes', + 'pitcherful', + 'pitcherfuls', + 'pitchersful', + 'pitchforked', + 'pitchforking', + 'pitchforks', + 'pitchpoled', + 'pitchpoles', + 'pitchpoling', + 'pitchwoman', + 'pitchwomen', + 'piteousness', + 'piteousnesses', + 'pithecanthropi', + 'pithecanthropine', + 'pithecanthropines', + 'pithecanthropus', + 'pithinesses', + 'pitiableness', + 'pitiablenesses', + 'pitifuller', + 'pitifullest', + 'pitifulness', + 'pitifulnesses', + 'pitilessly', + 'pitilessness', + 'pitilessnesses', + 'pittosporum', + 'pittosporums', + 'pituitaries', + 'pityriases', + 'pityriasis', + 'pixilation', + 'pixilations', + 'pixillated', + 'pixinesses', + 'placabilities', + 'placability', + 'placarding', + 'placatingly', + 'placations', + 'placeholder', + 'placeholders', + 'placekicked', + 'placekicker', + 'placekickers', + 'placekicking', + 'placekicks', + 'placelessly', + 'placements', + 'placentals', + 'placentation', + 'placentations', + 'placidities', + 'placidness', + 'placidnesses', + 'plagiaries', + 'plagiarise', + 'plagiarised', + 'plagiarises', + 'plagiarising', + 'plagiarism', + 'plagiarisms', + 'plagiarist', + 'plagiaristic', + 'plagiarists', + 'plagiarize', + 'plagiarized', + 'plagiarizer', + 'plagiarizers', + 'plagiarizes', + 'plagiarizing', + 'plagioclase', + 'plagioclases', + 'plagiotropic', + 'plainchant', + 'plainchants', + 'plainclothes', + 'plainclothesman', + 'plainclothesmen', + 'plainnesses', + 'plainsongs', + 'plainspoken', + 'plainspokenness', + 'plainspokennesses', + 'plaintexts', + 'plaintiffs', + 'plaintively', + 'plaintiveness', + 'plaintivenesses', + 'plaistered', + 'plaistering', + 'planarians', + 'planarities', + 'planations', + 'planchette', + 'planchettes', + 'planeloads', + 'planetaria', + 'planetarium', + 'planetariums', + 'planetesimal', + 'planetesimals', + 'planetlike', + 'planetoidal', + 'planetoids', + 'planetological', + 'planetologies', + 'planetologist', + 'planetologists', + 'planetology', + 'planetwide', + 'plangencies', + 'plangently', + 'planimeter', + 'planimeters', + 'planimetric', + 'planimetrically', + 'planishers', + 'planishing', + 'planisphere', + 'planispheres', + 'planispheric', + 'planktonic', + 'planlessly', + 'planlessness', + 'planlessnesses', + 'planographic', + 'planographies', + 'planography', + 'plantation', + 'plantations', + 'plantigrade', + 'plantigrades', + 'plantocracies', + 'plantocracy', + 'plasmagels', + 'plasmagene', + 'plasmagenes', + 'plasmalemma', + 'plasmalemmas', + 'plasmaphereses', + 'plasmapheresis', + 'plasmasols', + 'plasminogen', + 'plasminogens', + 'plasmodesm', + 'plasmodesma', + 'plasmodesmas', + 'plasmodesmata', + 'plasmodesms', + 'plasmodium', + 'plasmogamies', + 'plasmogamy', + 'plasmolyses', + 'plasmolysis', + 'plasmolytic', + 'plasmolyze', + 'plasmolyzed', + 'plasmolyzes', + 'plasmolyzing', + 'plasterboard', + 'plasterboards', + 'plasterers', + 'plastering', + 'plasterings', + 'plasterwork', + 'plasterworks', + 'plastically', + 'plasticene', + 'plasticenes', + 'plasticine', + 'plasticines', + 'plasticities', + 'plasticity', + 'plasticization', + 'plasticizations', + 'plasticize', + 'plasticized', + 'plasticizer', + 'plasticizers', + 'plasticizes', + 'plasticizing', + 'plastidial', + 'plastisols', + 'plastocyanin', + 'plastocyanins', + 'plastoquinone', + 'plastoquinones', + 'plateauing', + 'plateglass', + 'platemaker', + 'platemakers', + 'platemaking', + 'platemakings', + 'plateresque', + 'platinized', + 'platinizes', + 'platinizing', + 'platinocyanide', + 'platinocyanides', + 'platitudes', + 'platitudinal', + 'platitudinarian', + 'platitudinarians', + 'platitudinize', + 'platitudinized', + 'platitudinizes', + 'platitudinizing', + 'platitudinous', + 'platitudinously', + 'platonically', + 'platooning', + 'platterful', + 'platterfuls', + 'plattersful', + 'platyfishes', + 'platyhelminth', + 'platyhelminthic', + 'platyhelminths', + 'platypuses', + 'platyrrhine', + 'platyrrhines', + 'plausibilities', + 'plausibility', + 'plausibleness', + 'plausiblenesses', + 'playabilities', + 'playability', + 'playacting', + 'playactings', + 'playfellow', + 'playfellows', + 'playfields', + 'playfulness', + 'playfulnesses', + 'playground', + 'playgrounds', + 'playhouses', + 'playmakers', + 'playmaking', + 'playmakings', + 'playthings', + 'playwright', + 'playwrighting', + 'playwrightings', + 'playwrights', + 'playwriting', + 'playwritings', + 'pleadingly', + 'pleasances', + 'pleasanter', + 'pleasantest', + 'pleasantly', + 'pleasantness', + 'pleasantnesses', + 'pleasantries', + 'pleasantry', + 'pleasingly', + 'pleasingness', + 'pleasingnesses', + 'pleasurabilities', + 'pleasurability', + 'pleasurable', + 'pleasurableness', + 'pleasurablenesses', + 'pleasurably', + 'pleasureless', + 'pleasuring', + 'plebeianism', + 'plebeianisms', + 'plebeianly', + 'plebiscitary', + 'plebiscite', + 'plebiscites', + 'plecopteran', + 'plecopterans', + 'pleinairism', + 'pleinairisms', + 'pleinairist', + 'pleinairists', + 'pleiotropic', + 'pleiotropies', + 'pleiotropy', + 'plenipotent', + 'plenipotentiaries', + 'plenipotentiary', + 'plenishing', + 'plenitudes', + 'plenitudinous', + 'plenteously', + 'plenteousness', + 'plenteousnesses', + 'plentifully', + 'plentifulness', + 'plentifulnesses', + 'plentitude', + 'plentitudes', + 'pleochroic', + 'pleochroism', + 'pleochroisms', + 'pleomorphic', + 'pleomorphism', + 'pleomorphisms', + 'pleonastic', + 'pleonastically', + 'plerocercoid', + 'plerocercoids', + 'plesiosaur', + 'plesiosaurs', + 'plethysmogram', + 'plethysmograms', + 'plethysmograph', + 'plethysmographic', + 'plethysmographically', + 'plethysmographies', + 'plethysmographs', + 'plethysmography', + 'pleurisies', + 'pleuropneumonia', + 'pleuropneumonias', + 'pleustonic', + 'pliabilities', + 'pliability', + 'pliableness', + 'pliablenesses', + 'pliantness', + 'pliantnesses', + 'plications', + 'ploddingly', + 'plotlessness', + 'plotlessnesses', + 'plowshares', + 'pluckiness', + 'pluckinesses', + 'pluguglies', + 'plumberies', + 'plummeting', + 'plumpening', + 'plumpnesses', + 'plunderers', + 'plundering', + 'plunderous', + 'pluperfect', + 'pluperfects', + 'pluralisms', + 'pluralistic', + 'pluralistically', + 'pluralists', + 'pluralities', + 'pluralization', + 'pluralizations', + 'pluralized', + 'pluralizes', + 'pluralizing', + 'pluripotent', + 'plushiness', + 'plushinesses', + 'plushnesses', + 'plutocracies', + 'plutocracy', + 'plutocratic', + 'plutocratically', + 'plutocrats', + 'plutoniums', + 'pneumatically', + 'pneumaticities', + 'pneumaticity', + 'pneumatologies', + 'pneumatology', + 'pneumatolytic', + 'pneumatophore', + 'pneumatophores', + 'pneumococcal', + 'pneumococci', + 'pneumococcus', + 'pneumoconioses', + 'pneumoconiosis', + 'pneumograph', + 'pneumographs', + 'pneumonectomies', + 'pneumonectomy', + 'pneumonias', + 'pneumonites', + 'pneumonitides', + 'pneumonitis', + 'pneumonitises', + 'pneumothoraces', + 'pneumothorax', + 'pneumothoraxes', + 'pocketable', + 'pocketbook', + 'pocketbooks', + 'pocketfuls', + 'pocketknife', + 'pocketknives', + 'pocketsful', + 'pockmarked', + 'pockmarking', + 'pococurante', + 'pococurantism', + 'pococurantisms', + 'podiatries', + 'podiatrist', + 'podiatrists', + 'podophylli', + 'podophyllin', + 'podophyllins', + 'podophyllum', + 'podophyllums', + 'podsolization', + 'podsolizations', + 'podzolization', + 'podzolizations', + 'podzolized', + 'podzolizes', + 'podzolizing', + 'poetasters', + 'poetically', + 'poeticalness', + 'poeticalnesses', + 'poeticisms', + 'poeticized', + 'poeticizes', + 'poeticizing', + 'pogonophoran', + 'pogonophorans', + 'pogromists', + 'poignances', + 'poignancies', + 'poignantly', + 'poikilotherm', + 'poikilothermic', + 'poikilotherms', + 'poincianas', + 'poinsettia', + 'poinsettias', + 'pointedness', + 'pointednesses', + 'pointelles', + 'pointillism', + 'pointillisms', + 'pointillist', + 'pointillistic', + 'pointillists', + 'pointlessly', + 'pointlessness', + 'pointlessnesses', + 'pointtillist', + 'poisonings', + 'poisonously', + 'poisonwood', + 'poisonwoods', + 'pokeberries', + 'pokinesses', + 'polarimeter', + 'polarimeters', + 'polarimetric', + 'polarimetries', + 'polarimetry', + 'polariscope', + 'polariscopes', + 'polariscopic', + 'polarising', + 'polarities', + 'polarizabilities', + 'polarizability', + 'polarizable', + 'polarization', + 'polarizations', + 'polarizers', + 'polarizing', + 'polarographic', + 'polarographically', + 'polarographies', + 'polarography', + 'polemically', + 'polemicist', + 'polemicists', + 'polemicize', + 'polemicized', + 'polemicizes', + 'polemicizing', + 'polemizing', + 'polemonium', + 'polemoniums', + 'policewoman', + 'policewomen', + 'policyholder', + 'policyholders', + 'poliomyelitides', + 'poliomyelitis', + 'poliovirus', + 'polioviruses', + 'politburos', + 'politeness', + 'politenesses', + 'politesses', + 'politicalization', + 'politicalizations', + 'politicalize', + 'politicalized', + 'politicalizes', + 'politicalizing', + 'politically', + 'politician', + 'politicians', + 'politicise', + 'politicised', + 'politicises', + 'politicising', + 'politicization', + 'politicizations', + 'politicize', + 'politicized', + 'politicizes', + 'politicizing', + 'politicked', + 'politicker', + 'politickers', + 'politicking', + 'politicoes', + 'pollarding', + 'pollenizer', + 'pollenizers', + 'pollenoses', + 'pollenosis', + 'pollenosises', + 'pollinated', + 'pollinates', + 'pollinating', + 'pollination', + 'pollinations', + 'pollinator', + 'pollinators', + 'pollinizer', + 'pollinizers', + 'pollinoses', + 'pollinosis', + 'pollinosises', + 'pollutants', + 'pollutions', + 'polonaises', + 'poltergeist', + 'poltergeists', + 'poltrooneries', + 'poltroonery', + 'polyacrylamide', + 'polyacrylamides', + 'polyacrylonitrile', + 'polyacrylonitriles', + 'polyalcohol', + 'polyalcohols', + 'polyamides', + 'polyamines', + 'polyandries', + 'polyandrous', + 'polyanthas', + 'polyanthus', + 'polyanthuses', + 'polyatomic', + 'polybutadiene', + 'polybutadienes', + 'polycarbonate', + 'polycarbonates', + 'polycentric', + 'polycentrism', + 'polycentrisms', + 'polychaete', + 'polychaetes', + 'polychotomies', + 'polychotomous', + 'polychotomy', + 'polychromatic', + 'polychromatophilia', + 'polychromatophilias', + 'polychromatophilic', + 'polychrome', + 'polychromed', + 'polychromes', + 'polychromies', + 'polychroming', + 'polychromy', + 'polycistronic', + 'polyclinic', + 'polyclinics', + 'polyclonal', + 'polycondensation', + 'polycondensations', + 'polycrystal', + 'polycrystalline', + 'polycrystals', + 'polycyclic', + 'polycystic', + 'polycythemia', + 'polycythemias', + 'polycythemic', + 'polydactyl', + 'polydactylies', + 'polydactyly', + 'polydipsia', + 'polydipsias', + 'polydipsic', + 'polydisperse', + 'polydispersities', + 'polydispersity', + 'polyelectrolyte', + 'polyelectrolytes', + 'polyembryonic', + 'polyembryonies', + 'polyembryony', + 'polyesterification', + 'polyesterifications', + 'polyesters', + 'polyestrous', + 'polyethylene', + 'polyethylenes', + 'polygamies', + 'polygamist', + 'polygamists', + 'polygamize', + 'polygamized', + 'polygamizes', + 'polygamizing', + 'polygamous', + 'polygeneses', + 'polygenesis', + 'polygenetic', + 'polyglotism', + 'polyglotisms', + 'polyglottism', + 'polyglottisms', + 'polygonally', + 'polygonies', + 'polygonums', + 'polygrapher', + 'polygraphers', + 'polygraphic', + 'polygraphist', + 'polygraphists', + 'polygraphs', + 'polygynies', + 'polygynous', + 'polyhedral', + 'polyhedron', + 'polyhedrons', + 'polyhedroses', + 'polyhedrosis', + 'polyhistor', + 'polyhistoric', + 'polyhistors', + 'polyhydroxy', + 'polylysine', + 'polylysines', + 'polymathic', + 'polymathies', + 'polymerase', + 'polymerases', + 'polymerisation', + 'polymerisations', + 'polymerise', + 'polymerised', + 'polymerises', + 'polymerising', + 'polymerism', + 'polymerisms', + 'polymerization', + 'polymerizations', + 'polymerize', + 'polymerized', + 'polymerizes', + 'polymerizing', + 'polymorphic', + 'polymorphically', + 'polymorphism', + 'polymorphisms', + 'polymorphonuclear', + 'polymorphonuclears', + 'polymorphous', + 'polymorphously', + 'polymorphs', + 'polymyxins', + 'polyneuritides', + 'polyneuritis', + 'polyneuritises', + 'polynomial', + 'polynomials', + 'polynuclear', + 'polynucleotide', + 'polynucleotides', + 'polyolefin', + 'polyolefins', + 'polyonymous', + 'polyparies', + 'polypeptide', + 'polypeptides', + 'polypeptidic', + 'polypetalous', + 'polyphagia', + 'polyphagias', + 'polyphagies', + 'polyphagous', + 'polyphasic', + 'polyphenol', + 'polyphenolic', + 'polyphenols', + 'polyphiloprogenitive', + 'polyphones', + 'polyphonic', + 'polyphonically', + 'polyphonies', + 'polyphonous', + 'polyphonously', + 'polyphyletic', + 'polyphyletically', + 'polyploidies', + 'polyploids', + 'polyploidy', + 'polypodies', + 'polypropylene', + 'polypropylenes', + 'polyptychs', + 'polyrhythm', + 'polyrhythmic', + 'polyrhythmically', + 'polyrhythms', + 'polyribonucleotide', + 'polyribonucleotides', + 'polyribosomal', + 'polyribosome', + 'polyribosomes', + 'polysaccharide', + 'polysaccharides', + 'polysemies', + 'polysemous', + 'polysorbate', + 'polysorbates', + 'polystichous', + 'polystyrene', + 'polystyrenes', + 'polysulfide', + 'polysulfides', + 'polysyllabic', + 'polysyllabically', + 'polysyllable', + 'polysyllables', + 'polysynaptic', + 'polysynaptically', + 'polysyndeton', + 'polysyndetons', + 'polytechnic', + 'polytechnics', + 'polytenies', + 'polytheism', + 'polytheisms', + 'polytheist', + 'polytheistic', + 'polytheistical', + 'polytheists', + 'polythenes', + 'polytonalities', + 'polytonality', + 'polytonally', + 'polyunsaturated', + 'polyurethane', + 'polyurethanes', + 'polyvalence', + 'polyvalences', + 'polyvalent', + 'polywaters', + 'pomegranate', + 'pomegranates', + 'pommelling', + 'pomological', + 'pomologies', + 'pomologist', + 'pomologists', + 'pompadoured', + 'pompadours', + 'pomposities', + 'pompousness', + 'pompousnesses', + 'ponderable', + 'ponderosas', + 'ponderously', + 'ponderousness', + 'ponderousnesses', + 'poniarding', + 'pontifical', + 'pontifically', + 'pontificals', + 'pontificate', + 'pontificated', + 'pontificates', + 'pontificating', + 'pontification', + 'pontifications', + 'pontificator', + 'pontificators', + 'pontifices', + 'ponytailed', + 'poorhouses', + 'poornesses', + 'poppycocks', + 'poppyheads', + 'popularise', + 'popularised', + 'popularises', + 'popularising', + 'popularities', + 'popularity', + 'popularization', + 'popularizations', + 'popularize', + 'popularized', + 'popularizer', + 'popularizers', + 'popularizes', + 'popularizing', + 'populating', + 'population', + 'populational', + 'populations', + 'populistic', + 'populously', + 'populousness', + 'populousnesses', + 'porbeagles', + 'porcelainize', + 'porcelainized', + 'porcelainizes', + 'porcelainizing', + 'porcelainlike', + 'porcelains', + 'porcelaneous', + 'porcellaneous', + 'porcupines', + 'pornographer', + 'pornographers', + 'pornographic', + 'pornographically', + 'pornographies', + 'pornography', + 'porosities', + 'porousness', + 'porousnesses', + 'porphyrias', + 'porphyries', + 'porphyrins', + 'porphyritic', + 'porphyropsin', + 'porphyropsins', + 'porringers', + 'portabilities', + 'portability', + 'portamenti', + 'portamento', + 'portapacks', + 'portcullis', + 'portcullises', + 'portending', + 'portentous', + 'portentously', + 'portentousness', + 'portentousnesses', + 'porterages', + 'porterhouse', + 'porterhouses', + 'portfolios', + 'portioning', + 'portionless', + 'portliness', + 'portlinesses', + 'portmanteau', + 'portmanteaus', + 'portmanteaux', + 'portraitist', + 'portraitists', + 'portraiture', + 'portraitures', + 'portrayals', + 'portrayers', + 'portraying', + 'portresses', + 'portulacas', + 'poshnesses', + 'positional', + 'positionally', + 'positioned', + 'positioning', + 'positively', + 'positiveness', + 'positivenesses', + 'positivest', + 'positivism', + 'positivisms', + 'positivist', + 'positivistic', + 'positivistically', + 'positivists', + 'positivities', + 'positivity', + 'positronium', + 'positroniums', + 'posologies', + 'possessedly', + 'possessedness', + 'possessednesses', + 'possessing', + 'possession', + 'possessional', + 'possessionless', + 'possessions', + 'possessive', + 'possessively', + 'possessiveness', + 'possessivenesses', + 'possessives', + 'possessors', + 'possessory', + 'possibilities', + 'possibility', + 'possiblest', + 'postabortion', + 'postaccident', + 'postadolescent', + 'postadolescents', + 'postamputation', + 'postapocalyptic', + 'postarrest', + 'postatomic', + 'postattack', + 'postbaccalaureate', + 'postbellum', + 'postbiblical', + 'postbourgeois', + 'postcapitalist', + 'postcardlike', + 'postclassic', + 'postclassical', + 'postcoital', + 'postcollege', + 'postcolleges', + 'postcollegiate', + 'postcolonial', + 'postconception', + 'postconcert', + 'postconquest', + 'postconsonantal', + 'postconvention', + 'postcopulatory', + 'postcoronary', + 'postcranial', + 'postcranially', + 'postcrises', + 'postcrisis', + 'postdating', + 'postdeadline', + 'postdebate', + 'postdebutante', + 'postdebutantes', + 'postdelivery', + 'postdepositional', + 'postdepression', + 'postdevaluation', + 'postdiluvian', + 'postdiluvians', + 'postdivestiture', + 'postdivorce', + 'postdoctoral', + 'postdoctorate', + 'postediting', + 'posteditings', + 'postelection', + 'postembryonal', + 'postembryonic', + 'postemergence', + 'postemergency', + 'postencephalitic', + 'postepileptic', + 'posteriorities', + 'posteriority', + 'posteriorly', + 'posteriors', + 'posterities', + 'posterolateral', + 'posteruptive', + 'postexercise', + 'postexilic', + 'postexperience', + 'postexperimental', + 'postexposure', + 'postfeminist', + 'postfixing', + 'postflight', + 'postformed', + 'postforming', + 'postfracture', + 'postfractures', + 'postfreeze', + 'postganglionic', + 'postglacial', + 'postgraduate', + 'postgraduates', + 'postgraduation', + 'postharvest', + 'posthastes', + 'posthemorrhagic', + 'postholiday', + 'postholocaust', + 'posthospital', + 'posthumous', + 'posthumously', + 'posthumousness', + 'posthumousnesses', + 'posthypnotic', + 'postilions', + 'postillion', + 'postillions', + 'postimpact', + 'postimperial', + 'postinaugural', + 'postindependence', + 'postindustrial', + 'postinfection', + 'postinjection', + 'postinoculation', + 'postirradiation', + 'postischemic', + 'postisolation', + 'postlanding', + 'postlapsarian', + 'postlaunch', + 'postliberation', + 'postliterate', + 'postmarital', + 'postmarked', + 'postmarking', + 'postmastectomy', + 'postmaster', + 'postmasters', + 'postmastership', + 'postmasterships', + 'postmating', + 'postmedieval', + 'postmenopausal', + 'postmidnight', + 'postmillenarian', + 'postmillenarianism', + 'postmillenarianisms', + 'postmillenarians', + 'postmillennial', + 'postmillennialism', + 'postmillennialisms', + 'postmillennialist', + 'postmillennialists', + 'postmistress', + 'postmistresses', + 'postmodern', + 'postmodernism', + 'postmodernisms', + 'postmodernist', + 'postmodernists', + 'postmortem', + 'postmortems', + 'postnatally', + 'postneonatal', + 'postnuptial', + 'postoperative', + 'postoperatively', + 'postorbital', + 'postorgasmic', + 'postpartum', + 'postpollination', + 'postponable', + 'postponement', + 'postponements', + 'postponers', + 'postponing', + 'postposition', + 'postpositional', + 'postpositionally', + 'postpositions', + 'postpositive', + 'postpositively', + 'postprandial', + 'postpresidential', + 'postprimary', + 'postprison', + 'postproduction', + 'postproductions', + 'postpsychoanalytic', + 'postpuberty', + 'postpubescent', + 'postpubescents', + 'postrecession', + 'postresurrection', + 'postresurrections', + 'postretirement', + 'postrevolutionary', + 'postromantic', + 'postscript', + 'postscripts', + 'postseason', + 'postseasons', + 'postsecondary', + 'poststimulation', + 'poststimulatory', + 'poststimulus', + 'poststrike', + 'postsurgical', + 'postsynaptic', + 'postsynaptically', + 'postsynced', + 'postsyncing', + 'posttension', + 'posttensioned', + 'posttensioning', + 'posttensions', + 'posttranscriptional', + 'posttransfusion', + 'posttranslational', + 'posttraumatic', + 'posttreatment', + 'postulancies', + 'postulancy', + 'postulants', + 'postulated', + 'postulates', + 'postulating', + 'postulation', + 'postulational', + 'postulations', + 'postulator', + 'postulators', + 'posturings', + 'postvaccinal', + 'postvaccination', + 'postvagotomy', + 'postvasectomy', + 'postvocalic', + 'postweaning', + 'postworkshop', + 'potabilities', + 'potability', + 'potableness', + 'potablenesses', + 'potassiums', + 'potbellied', + 'potbellies', + 'potboilers', + 'potboiling', + 'potentates', + 'potentialities', + 'potentiality', + 'potentially', + 'potentials', + 'potentiate', + 'potentiated', + 'potentiates', + 'potentiating', + 'potentiation', + 'potentiations', + 'potentiator', + 'potentiators', + 'potentilla', + 'potentillas', + 'potentiometer', + 'potentiometers', + 'potentiometric', + 'potholders', + 'pothunters', + 'pothunting', + 'pothuntings', + 'potlatched', + 'potlatches', + 'potlatching', + 'potometers', + 'potpourris', + 'potshotting', + 'potteringly', + 'poulterers', + 'poulticing', + 'poultryman', + 'poultrymen', + 'pourboires', + 'pourparler', + 'pourparlers', + 'pourpoints', + 'poussetted', + 'poussettes', + 'poussetting', + 'powderless', + 'powderlike', + 'powerboats', + 'powerbroker', + 'powerbrokers', + 'powerfully', + 'powerhouse', + 'powerhouses', + 'powerlessly', + 'powerlessness', + 'powerlessnesses', + 'poxviruses', + 'pozzolanas', + 'pozzolanic', + 'practicabilities', + 'practicability', + 'practicable', + 'practicableness', + 'practicablenesses', + 'practicably', + 'practicalities', + 'practicality', + 'practically', + 'practicalness', + 'practicalnesses', + 'practicals', + 'practicers', + 'practicing', + 'practicums', + 'practising', + 'practitioner', + 'practitioners', + 'praelected', + 'praelecting', + 'praemunire', + 'praemunires', + 'praenomens', + 'praenomina', + 'praesidium', + 'praesidiums', + 'praetorial', + 'praetorian', + 'praetorians', + 'praetorship', + 'praetorships', + 'pragmatical', + 'pragmatically', + 'pragmaticism', + 'pragmaticisms', + 'pragmaticist', + 'pragmaticists', + 'pragmatics', + 'pragmatism', + 'pragmatisms', + 'pragmatist', + 'pragmatistic', + 'pragmatists', + 'praiseworthily', + 'praiseworthiness', + 'praiseworthinesses', + 'praiseworthy', + 'pralltriller', + 'pralltrillers', + 'prankishly', + 'prankishness', + 'prankishnesses', + 'pranksters', + 'praseodymium', + 'praseodymiums', + 'pratincole', + 'pratincoles', + 'prattlingly', + 'praxeological', + 'praxeologies', + 'praxeology', + 'prayerfully', + 'prayerfulness', + 'prayerfulnesses', + 'preachiest', + 'preachified', + 'preachifies', + 'preachifying', + 'preachiness', + 'preachinesses', + 'preachingly', + 'preachment', + 'preachments', + 'preadaptation', + 'preadaptations', + 'preadapted', + 'preadapting', + 'preadaptive', + 'preadmission', + 'preadmissions', + 'preadmitted', + 'preadmitting', + 'preadolescence', + 'preadolescences', + 'preadolescent', + 'preadolescents', + 'preadopted', + 'preadopting', + 'preagricultural', + 'preallotted', + 'preallotting', + 'preamplifier', + 'preamplifiers', + 'preanesthetic', + 'preanesthetics', + 'preannounce', + 'preannounced', + 'preannounces', + 'preannouncing', + 'preapprove', + 'preapproved', + 'preapproves', + 'preapproving', + 'prearrange', + 'prearranged', + 'prearrangement', + 'prearrangements', + 'prearranges', + 'prearranging', + 'preassembled', + 'preassigned', + 'preassigning', + 'preassigns', + 'preaverred', + 'preaverring', + 'prebendaries', + 'prebendary', + 'prebiblical', + 'prebilling', + 'prebinding', + 'prebiologic', + 'prebiological', + 'preblessed', + 'preblesses', + 'preblessing', + 'preboiling', + 'prebooking', + 'prebreakfast', + 'precalculi', + 'precalculus', + 'precalculuses', + 'precanceled', + 'precanceling', + 'precancellation', + 'precancellations', + 'precancelled', + 'precancelling', + 'precancels', + 'precancerous', + 'precapitalist', + 'precapitalists', + 'precarious', + 'precariously', + 'precariousness', + 'precariousnesses', + 'precasting', + 'precaution', + 'precautionary', + 'precautioned', + 'precautioning', + 'precautions', + 'precedence', + 'precedences', + 'precedencies', + 'precedency', + 'precedents', + 'precensored', + 'precensoring', + 'precensors', + 'precenting', + 'precentorial', + 'precentors', + 'precentorship', + 'precentorships', + 'preceptive', + 'preceptorial', + 'preceptorials', + 'preceptories', + 'preceptors', + 'preceptorship', + 'preceptorships', + 'preceptory', + 'precertification', + 'precertifications', + 'precertified', + 'precertifies', + 'precertify', + 'precertifying', + 'precessing', + 'precession', + 'precessional', + 'precessions', + 'prechecked', + 'prechecking', + 'prechilled', + 'prechilling', + 'preciosities', + 'preciosity', + 'preciouses', + 'preciously', + 'preciousness', + 'preciousnesses', + 'precipices', + 'precipitable', + 'precipitance', + 'precipitances', + 'precipitancies', + 'precipitancy', + 'precipitant', + 'precipitantly', + 'precipitantness', + 'precipitantnesses', + 'precipitants', + 'precipitate', + 'precipitated', + 'precipitately', + 'precipitateness', + 'precipitatenesses', + 'precipitates', + 'precipitating', + 'precipitation', + 'precipitations', + 'precipitative', + 'precipitator', + 'precipitators', + 'precipitin', + 'precipitinogen', + 'precipitinogens', + 'precipitins', + 'precipitous', + 'precipitously', + 'precipitousness', + 'precipitousnesses', + 'preciseness', + 'precisenesses', + 'precisians', + 'precisionist', + 'precisionists', + 'precisions', + 'precleaned', + 'precleaning', + 'preclearance', + 'preclearances', + 'precleared', + 'preclearing', + 'preclinical', + 'precluding', + 'preclusion', + 'preclusions', + 'preclusive', + 'preclusively', + 'precocious', + 'precociously', + 'precociousness', + 'precociousnesses', + 'precocities', + 'precognition', + 'precognitions', + 'precognitive', + 'precollege', + 'precolleges', + 'precollegiate', + 'precolonial', + 'precombustion', + 'precombustions', + 'precommitment', + 'precompute', + 'precomputed', + 'precomputer', + 'precomputers', + 'precomputes', + 'precomputing', + 'preconceive', + 'preconceived', + 'preconceives', + 'preconceiving', + 'preconception', + 'preconceptions', + 'preconcert', + 'preconcerted', + 'preconcerting', + 'preconcerts', + 'precondition', + 'preconditioned', + 'preconditioning', + 'preconditions', + 'preconquest', + 'preconscious', + 'preconsciouses', + 'preconsciously', + 'preconsonantal', + 'preconstructed', + 'precontact', + 'preconvention', + 'preconventions', + 'preconviction', + 'preconvictions', + 'precooking', + 'precooling', + 'precopulatory', + 'precreased', + 'precreases', + 'precreasing', + 'precritical', + 'precursors', + 'precursory', + 'precutting', + 'predaceous', + 'predaceousness', + 'predaceousnesses', + 'predacious', + 'predacities', + 'predations', + 'predecease', + 'predeceased', + 'predeceases', + 'predeceasing', + 'predecessor', + 'predecessors', + 'predefined', + 'predefines', + 'predefining', + 'predeliveries', + 'predelivery', + 'predeparture', + 'predepartures', + 'predesignate', + 'predesignated', + 'predesignates', + 'predesignating', + 'predestinarian', + 'predestinarianism', + 'predestinarianisms', + 'predestinarians', + 'predestinate', + 'predestinated', + 'predestinates', + 'predestinating', + 'predestination', + 'predestinations', + 'predestinator', + 'predestinators', + 'predestine', + 'predestined', + 'predestines', + 'predestining', + 'predetermination', + 'predeterminations', + 'predetermine', + 'predetermined', + 'predeterminer', + 'predeterminers', + 'predetermines', + 'predetermining', + 'predevaluation', + 'predevaluations', + 'predevelopment', + 'predevelopments', + 'prediabetes', + 'prediabeteses', + 'prediabetic', + 'prediabetics', + 'predicable', + 'predicables', + 'predicament', + 'predicaments', + 'predicated', + 'predicates', + 'predicating', + 'predication', + 'predications', + 'predicative', + 'predicatively', + 'predicatory', + 'predictabilities', + 'predictability', + 'predictable', + 'predictably', + 'predicting', + 'prediction', + 'predictions', + 'predictive', + 'predictively', + 'predictors', + 'predigested', + 'predigesting', + 'predigestion', + 'predigestions', + 'predigests', + 'predilection', + 'predilections', + 'predischarge', + 'predischarged', + 'predischarges', + 'predischarging', + 'prediscoveries', + 'prediscovery', + 'predispose', + 'predisposed', + 'predisposes', + 'predisposing', + 'predisposition', + 'predispositions', + 'prednisolone', + 'prednisolones', + 'prednisone', + 'prednisones', + 'predoctoral', + 'predominance', + 'predominances', + 'predominancies', + 'predominancy', + 'predominant', + 'predominantly', + 'predominate', + 'predominated', + 'predominately', + 'predominates', + 'predominating', + 'predomination', + 'predominations', + 'predrilled', + 'predrilling', + 'predynastic', + 'preeclampsia', + 'preeclampsias', + 'preeclamptic', + 'preediting', + 'preelected', + 'preelecting', + 'preelection', + 'preelections', + 'preelectric', + 'preembargo', + 'preemergence', + 'preemergent', + 'preeminence', + 'preeminences', + 'preeminent', + 'preeminently', + 'preemployment', + 'preemployments', + 'preempting', + 'preemption', + 'preemptions', + 'preemptive', + 'preemptively', + 'preemptors', + 'preemptory', + 'preenacted', + 'preenacting', + 'preenrollment', + 'preenrollments', + 'preerected', + 'preerecting', + 'preestablish', + 'preestablished', + 'preestablishes', + 'preestablishing', + 'preethical', + 'preexisted', + 'preexistence', + 'preexistences', + 'preexistent', + 'preexisting', + 'preexperiment', + 'preexperiments', + 'prefabbing', + 'prefabricate', + 'prefabricated', + 'prefabricates', + 'prefabricating', + 'prefabrication', + 'prefabrications', + 'prefascist', + 'prefascists', + 'prefectural', + 'prefecture', + 'prefectures', + 'preferabilities', + 'preferability', + 'preferable', + 'preferably', + 'preference', + 'preferences', + 'preferential', + 'preferentially', + 'preferment', + 'preferments', + 'preferrers', + 'preferring', + 'prefiguration', + 'prefigurations', + 'prefigurative', + 'prefiguratively', + 'prefigurativeness', + 'prefigurativenesses', + 'prefigured', + 'prefigurement', + 'prefigurements', + 'prefigures', + 'prefiguring', + 'prefinance', + 'prefinanced', + 'prefinances', + 'prefinancing', + 'prefocused', + 'prefocuses', + 'prefocusing', + 'prefocussed', + 'prefocusses', + 'prefocussing', + 'preformation', + 'preformationist', + 'preformationists', + 'preformations', + 'preformats', + 'preformatted', + 'preformatting', + 'preforming', + 'preformulate', + 'preformulated', + 'preformulates', + 'preformulating', + 'prefranked', + 'prefranking', + 'prefreezes', + 'prefreezing', + 'prefreshman', + 'prefreshmen', + 'prefrontal', + 'prefrontals', + 'preganglionic', + 'pregenital', + 'pregnabilities', + 'pregnability', + 'pregnancies', + 'pregnantly', + 'pregnenolone', + 'pregnenolones', + 'preharvest', + 'preharvests', + 'preheadache', + 'preheaters', + 'preheating', + 'prehensile', + 'prehensilities', + 'prehensility', + 'prehension', + 'prehensions', + 'prehistorian', + 'prehistorians', + 'prehistoric', + 'prehistorical', + 'prehistorically', + 'prehistories', + 'prehistory', + 'preholiday', + 'prehominid', + 'prehominids', + 'preignition', + 'preignitions', + 'preimplantation', + 'preinaugural', + 'preincorporation', + 'preincorporations', + 'preinduction', + 'preinductions', + 'preindustrial', + 'preinterview', + 'preinterviewed', + 'preinterviewing', + 'preinterviews', + 'preinvasion', + 'prejudgers', + 'prejudging', + 'prejudgment', + 'prejudgments', + 'prejudiced', + 'prejudices', + 'prejudicial', + 'prejudicially', + 'prejudicialness', + 'prejudicialnesses', + 'prejudicing', + 'prekindergarten', + 'prekindergartens', + 'prelapsarian', + 'prelatures', + 'prelecting', + 'prelection', + 'prelections', + 'prelibation', + 'prelibations', + 'preliminaries', + 'preliminarily', + 'preliminary', + 'prelimited', + 'prelimiting', + 'preliterary', + 'preliterate', + 'preliterates', + 'prelogical', + 'preluncheon', + 'prelusions', + 'prelusively', + 'premalignant', + 'premanufacture', + 'premanufactured', + 'premanufactures', + 'premanufacturing', + 'premarital', + 'premaritally', + 'premarketing', + 'premarketings', + 'premarriage', + 'premarriages', + 'prematurely', + 'prematureness', + 'prematurenesses', + 'prematures', + 'prematurities', + 'prematurity', + 'premaxilla', + 'premaxillae', + 'premaxillaries', + 'premaxillary', + 'premaxillas', + 'premeasure', + 'premeasured', + 'premeasures', + 'premeasuring', + 'premedical', + 'premedieval', + 'premeditate', + 'premeditated', + 'premeditatedly', + 'premeditates', + 'premeditating', + 'premeditation', + 'premeditations', + 'premeditative', + 'premeditator', + 'premeditators', + 'premeiotic', + 'premenopausal', + 'premenstrual', + 'premenstrually', + 'premiering', + 'premiership', + 'premierships', + 'premigration', + 'premillenarian', + 'premillenarianism', + 'premillenarianisms', + 'premillenarians', + 'premillennial', + 'premillennialism', + 'premillennialisms', + 'premillennialist', + 'premillennialists', + 'premillennially', + 'premodification', + 'premodifications', + 'premodified', + 'premodifies', + 'premodifying', + 'premoisten', + 'premoistened', + 'premoistening', + 'premoistens', + 'premolding', + 'premonished', + 'premonishes', + 'premonishing', + 'premonition', + 'premonitions', + 'premonitorily', + 'premonitory', + 'premunition', + 'premunitions', + 'premycotic', + 'prenatally', + 'prenominate', + 'prenominated', + 'prenominates', + 'prenominating', + 'prenomination', + 'prenominations', + 'prenotification', + 'prenotifications', + 'prenotified', + 'prenotifies', + 'prenotifying', + 'prenotions', + 'prenticing', + 'prenumbered', + 'prenumbering', + 'prenumbers', + 'prenuptial', + 'preoccupancies', + 'preoccupancy', + 'preoccupation', + 'preoccupations', + 'preoccupied', + 'preoccupies', + 'preoccupying', + 'preopening', + 'preoperational', + 'preoperative', + 'preoperatively', + 'preordained', + 'preordaining', + 'preordainment', + 'preordainments', + 'preordains', + 'preordered', + 'preordering', + 'preordination', + 'preordinations', + 'preovulatory', + 'prepackage', + 'prepackaged', + 'prepackages', + 'prepackaging', + 'prepacking', + 'preparation', + 'preparations', + 'preparative', + 'preparatively', + 'preparatives', + 'preparator', + 'preparatorily', + 'preparators', + 'preparatory', + 'preparedly', + 'preparedness', + 'preparednesses', + 'prepasting', + 'prepayment', + 'prepayments', + 'prepensely', + 'preperformance', + 'preperformances', + 'preplacing', + 'preplanned', + 'preplanning', + 'preplanting', + 'preponderance', + 'preponderances', + 'preponderancies', + 'preponderancy', + 'preponderant', + 'preponderantly', + 'preponderate', + 'preponderated', + 'preponderately', + 'preponderates', + 'preponderating', + 'preponderation', + 'preponderations', + 'preportion', + 'preportioned', + 'preportioning', + 'preportions', + 'preposition', + 'prepositional', + 'prepositionally', + 'prepositions', + 'prepositive', + 'prepositively', + 'prepossess', + 'prepossessed', + 'prepossesses', + 'prepossessing', + 'prepossession', + 'prepossessions', + 'preposterous', + 'preposterously', + 'preposterousness', + 'preposterousnesses', + 'prepotencies', + 'prepotency', + 'prepotently', + 'preppiness', + 'preppinesses', + 'preprandial', + 'preprepared', + 'prepresidential', + 'prepricing', + 'preprimary', + 'preprinted', + 'preprinting', + 'preprocess', + 'preprocessed', + 'preprocesses', + 'preprocessing', + 'preprocessor', + 'preprocessors', + 'preproduction', + 'preproductions', + 'preprofessional', + 'preprogram', + 'preprogramed', + 'preprograming', + 'preprogrammed', + 'preprogramming', + 'preprograms', + 'prepsychedelic', + 'prepuberal', + 'prepubertal', + 'prepuberties', + 'prepuberty', + 'prepubescence', + 'prepubescences', + 'prepubescent', + 'prepubescents', + 'prepublication', + 'prepublications', + 'prepunched', + 'prepunches', + 'prepunching', + 'prepurchase', + 'prepurchased', + 'prepurchases', + 'prepurchasing', + 'prequalification', + 'prequalifications', + 'prequalified', + 'prequalifies', + 'prequalify', + 'prequalifying', + 'prerecession', + 'prerecorded', + 'prerecording', + 'prerecords', + 'preregister', + 'preregistered', + 'preregistering', + 'preregisters', + 'preregistration', + 'preregistrations', + 'prerehearsal', + 'prerelease', + 'prereleases', + 'prerequire', + 'prerequired', + 'prerequires', + 'prerequiring', + 'prerequisite', + 'prerequisites', + 'preretirement', + 'preretirements', + 'prerevisionist', + 'prerevisionists', + 'prerevolution', + 'prerevolutionary', + 'prerogative', + 'prerogatived', + 'prerogatives', + 'preromantic', + 'presageful', + 'presanctified', + 'presbyopes', + 'presbyopia', + 'presbyopias', + 'presbyopic', + 'presbyopics', + 'presbyterate', + 'presbyterates', + 'presbyterial', + 'presbyterially', + 'presbyterials', + 'presbyterian', + 'presbyteries', + 'presbyters', + 'presbytery', + 'preschedule', + 'prescheduled', + 'preschedules', + 'prescheduling', + 'preschooler', + 'preschoolers', + 'preschools', + 'prescience', + 'presciences', + 'prescientific', + 'presciently', + 'prescinded', + 'prescinding', + 'prescoring', + 'prescreened', + 'prescreening', + 'prescreens', + 'prescribed', + 'prescriber', + 'prescribers', + 'prescribes', + 'prescribing', + 'prescription', + 'prescriptions', + 'prescriptive', + 'prescriptively', + 'prescripts', + 'preseasons', + 'preselected', + 'preselecting', + 'preselection', + 'preselections', + 'preselects', + 'preselling', + 'presentabilities', + 'presentability', + 'presentable', + 'presentableness', + 'presentablenesses', + 'presentably', + 'presentation', + 'presentational', + 'presentations', + 'presentative', + 'presentees', + 'presentence', + 'presentenced', + 'presentences', + 'presentencing', + 'presentencings', + 'presenters', + 'presentient', + 'presentiment', + 'presentimental', + 'presentiments', + 'presenting', + 'presentism', + 'presentisms', + 'presentist', + 'presentment', + 'presentments', + 'presentness', + 'presentnesses', + 'preservabilities', + 'preservability', + 'preservable', + 'preservation', + 'preservationist', + 'preservationists', + 'preservations', + 'preservative', + 'preservatives', + 'preservers', + 'preservice', + 'preserving', + 'presetting', + 'presettlement', + 'presettlements', + 'preshaping', + 'preshowing', + 'preshrinking', + 'preshrinks', + 'preshrunken', + 'presidencies', + 'presidency', + 'presidential', + 'presidentially', + 'presidents', + 'presidentship', + 'presidentships', + 'presidiary', + 'presidiums', + 'presifting', + 'presignified', + 'presignifies', + 'presignify', + 'presignifying', + 'preslaughter', + 'preslicing', + 'presoaking', + 'presorting', + 'prespecified', + 'prespecifies', + 'prespecify', + 'prespecifying', + 'pressboard', + 'pressboards', + 'pressingly', + 'pressmarks', + 'pressrooms', + 'pressureless', + 'pressuring', + 'pressurise', + 'pressurised', + 'pressurises', + 'pressurising', + 'pressurization', + 'pressurizations', + 'pressurize', + 'pressurized', + 'pressurizer', + 'pressurizers', + 'pressurizes', + 'pressurizing', + 'pressworks', + 'prestamped', + 'prestamping', + 'presterilize', + 'presterilized', + 'presterilizes', + 'presterilizing', + 'prestidigitation', + 'prestidigitations', + 'prestidigitator', + 'prestidigitators', + 'prestigeful', + 'prestigious', + 'prestigiously', + 'prestigiousness', + 'prestigiousnesses', + 'prestissimo', + 'prestorage', + 'prestorages', + 'prestressed', + 'prestresses', + 'prestressing', + 'prestructure', + 'prestructured', + 'prestructures', + 'prestructuring', + 'presumable', + 'presumably', + 'presumedly', + 'presumingly', + 'presumption', + 'presumptions', + 'presumptive', + 'presumptively', + 'presumptuous', + 'presumptuously', + 'presumptuousness', + 'presumptuousnesses', + 'presuppose', + 'presupposed', + 'presupposes', + 'presupposing', + 'presupposition', + 'presuppositional', + 'presuppositions', + 'presurgery', + 'presweeten', + 'presweetened', + 'presweetening', + 'presweetens', + 'presymptomatic', + 'presynaptic', + 'presynaptically', + 'pretasting', + 'pretechnological', + 'pretelevision', + 'pretendedly', + 'pretenders', + 'pretending', + 'pretension', + 'pretensioned', + 'pretensioning', + 'pretensionless', + 'pretensions', + 'pretentious', + 'pretentiously', + 'pretentiousness', + 'pretentiousnesses', + 'preterites', + 'preterminal', + 'pretermination', + 'preterminations', + 'pretermission', + 'pretermissions', + 'pretermits', + 'pretermitted', + 'pretermitting', + 'preternatural', + 'preternaturally', + 'preternaturalness', + 'preternaturalnesses', + 'pretesting', + 'pretexting', + 'pretheater', + 'pretorians', + 'pretournament', + 'pretournaments', + 'pretrained', + 'pretraining', + 'pretreated', + 'pretreating', + 'pretreatment', + 'pretreatments', + 'pretrimmed', + 'pretrimming', + 'prettification', + 'prettifications', + 'prettified', + 'prettifier', + 'prettifiers', + 'prettifies', + 'prettifying', + 'prettiness', + 'prettinesses', + 'preunification', + 'preuniting', + 'preuniversity', + 'prevailing', + 'prevalence', + 'prevalences', + 'prevalently', + 'prevalents', + 'prevaricate', + 'prevaricated', + 'prevaricates', + 'prevaricating', + 'prevarication', + 'prevarications', + 'prevaricator', + 'prevaricators', + 'prevenient', + 'preveniently', + 'preventabilities', + 'preventability', + 'preventable', + 'preventative', + 'preventatives', + 'preventers', + 'preventible', + 'preventing', + 'prevention', + 'preventions', + 'preventive', + 'preventively', + 'preventiveness', + 'preventivenesses', + 'preventives', + 'previewers', + 'previewing', + 'previously', + 'previousness', + 'previousnesses', + 'previsional', + 'previsionary', + 'previsioned', + 'previsioning', + 'previsions', + 'prevocalic', + 'prevocational', + 'prewarming', + 'prewarning', + 'prewashing', + 'preweaning', + 'prewrapped', + 'prewrapping', + 'prewriting', + 'prewritings', + 'pricelessly', + 'prickliest', + 'prickliness', + 'pricklinesses', + 'pridefully', + 'pridefulness', + 'pridefulnesses', + 'priestesses', + 'priesthood', + 'priesthoods', + 'priestlier', + 'priestliest', + 'priestliness', + 'priestlinesses', + 'priggeries', + 'priggishly', + 'priggishness', + 'priggishnesses', + 'primalities', + 'primateship', + 'primateships', + 'primatological', + 'primatologies', + 'primatologist', + 'primatologists', + 'primatology', + 'primenesses', + 'primevally', + 'primiparae', + 'primiparas', + 'primiparous', + 'primitively', + 'primitiveness', + 'primitivenesses', + 'primitives', + 'primitivism', + 'primitivisms', + 'primitivist', + 'primitivistic', + 'primitivists', + 'primitivities', + 'primitivity', + 'primnesses', + 'primogenitor', + 'primogenitors', + 'primogeniture', + 'primogenitures', + 'primordial', + 'primordially', + 'primordium', + 'princedoms', + 'princelets', + 'princelier', + 'princeliest', + 'princeliness', + 'princelinesses', + 'princeling', + 'princelings', + 'princeship', + 'princeships', + 'princesses', + 'principalities', + 'principality', + 'principally', + 'principals', + 'principalship', + 'principalships', + 'principium', + 'principled', + 'principles', + 'printabilities', + 'printability', + 'printeries', + 'printheads', + 'printmaker', + 'printmakers', + 'printmaking', + 'printmakings', + 'prioresses', + 'priorities', + 'prioritization', + 'prioritizations', + 'prioritize', + 'prioritized', + 'prioritizes', + 'prioritizing', + 'priorships', + 'prismatically', + 'prismatoid', + 'prismatoids', + 'prismoidal', + 'prissiness', + 'prissinesses', + 'pristinely', + 'privatdocent', + 'privatdocents', + 'privatdozent', + 'privatdozents', + 'privateered', + 'privateering', + 'privateers', + 'privateness', + 'privatenesses', + 'privations', + 'privatised', + 'privatises', + 'privatising', + 'privatisms', + 'privatively', + 'privatives', + 'privatization', + 'privatizations', + 'privatized', + 'privatizes', + 'privatizing', + 'privileged', + 'privileges', + 'privileging', + 'prizefight', + 'prizefighter', + 'prizefighters', + 'prizefighting', + 'prizefightings', + 'prizefights', + 'prizewinner', + 'prizewinners', + 'prizewinning', + 'proabortion', + 'probabilism', + 'probabilisms', + 'probabilist', + 'probabilistic', + 'probabilistically', + 'probabilists', + 'probabilities', + 'probability', + 'probational', + 'probationally', + 'probationary', + 'probationer', + 'probationers', + 'probations', + 'probenecid', + 'probenecids', + 'problematic', + 'problematical', + 'problematically', + 'problematics', + 'proboscidean', + 'proboscideans', + 'proboscides', + 'proboscidian', + 'proboscidians', + 'proboscises', + 'procambial', + 'procambium', + 'procambiums', + 'procarbazine', + 'procarbazines', + 'procaryote', + 'procaryotes', + 'procathedral', + 'procathedrals', + 'procedural', + 'procedurally', + 'procedurals', + 'procedures', + 'proceeding', + 'proceedings', + 'procephalic', + 'procercoid', + 'procercoids', + 'processabilities', + 'processability', + 'processable', + 'processibilities', + 'processibility', + 'processible', + 'processing', + 'procession', + 'processional', + 'processionally', + 'processionals', + 'processioned', + 'processioning', + 'processions', + 'processors', + 'proclaimed', + 'proclaimer', + 'proclaimers', + 'proclaiming', + 'proclamation', + 'proclamations', + 'proclitics', + 'proclivities', + 'proclivity', + 'proconsular', + 'proconsulate', + 'proconsulates', + 'proconsuls', + 'proconsulship', + 'proconsulships', + 'procrastinate', + 'procrastinated', + 'procrastinates', + 'procrastinating', + 'procrastination', + 'procrastinations', + 'procrastinator', + 'procrastinators', + 'procreated', + 'procreates', + 'procreating', + 'procreation', + 'procreations', + 'procreative', + 'procreator', + 'procreators', + 'procrustean', + 'procryptic', + 'proctodaea', + 'proctodaeum', + 'proctodaeums', + 'proctologic', + 'proctological', + 'proctologies', + 'proctologist', + 'proctologists', + 'proctology', + 'proctorial', + 'proctoring', + 'proctorship', + 'proctorships', + 'procumbent', + 'procurable', + 'procuration', + 'procurations', + 'procurator', + 'procuratorial', + 'procurators', + 'procurement', + 'procurements', + 'prodigalities', + 'prodigality', + 'prodigally', + 'prodigious', + 'prodigiously', + 'prodigiousness', + 'prodigiousnesses', + 'prodromata', + 'producible', + 'production', + 'productional', + 'productions', + 'productive', + 'productively', + 'productiveness', + 'productivenesses', + 'productivities', + 'productivity', + 'proenzymes', + 'proestruses', + 'profanation', + 'profanations', + 'profanatory', + 'profaneness', + 'profanenesses', + 'profanities', + 'professedly', + 'professing', + 'profession', + 'professional', + 'professionalism', + 'professionalisms', + 'professionalization', + 'professionalizations', + 'professionalize', + 'professionalized', + 'professionalizes', + 'professionalizing', + 'professionally', + 'professionals', + 'professions', + 'professorate', + 'professorates', + 'professorial', + 'professorially', + 'professoriat', + 'professoriate', + 'professoriates', + 'professoriats', + 'professors', + 'professorship', + 'professorships', + 'proffering', + 'proficiencies', + 'proficiency', + 'proficient', + 'proficiently', + 'proficients', + 'profitabilities', + 'profitability', + 'profitable', + 'profitableness', + 'profitablenesses', + 'profitably', + 'profiteered', + 'profiteering', + 'profiteers', + 'profiterole', + 'profiteroles', + 'profitless', + 'profitwise', + 'profligacies', + 'profligacy', + 'profligate', + 'profligately', + 'profligates', + 'profounder', + 'profoundest', + 'profoundly', + 'profoundness', + 'profoundnesses', + 'profundities', + 'profundity', + 'profuseness', + 'profusenesses', + 'profusions', + 'progenitor', + 'progenitors', + 'progestational', + 'progesterone', + 'progesterones', + 'progestins', + 'progestogen', + 'progestogenic', + 'progestogens', + 'proglottid', + 'proglottides', + 'proglottids', + 'proglottis', + 'prognathism', + 'prognathisms', + 'prognathous', + 'prognosing', + 'prognostic', + 'prognosticate', + 'prognosticated', + 'prognosticates', + 'prognosticating', + 'prognostication', + 'prognostications', + 'prognosticative', + 'prognosticator', + 'prognosticators', + 'prognostics', + 'programers', + 'programing', + 'programings', + 'programmabilities', + 'programmability', + 'programmable', + 'programmables', + 'programmatic', + 'programmatically', + 'programmed', + 'programmer', + 'programmers', + 'programmes', + 'programming', + 'programmings', + 'progressed', + 'progresses', + 'progressing', + 'progression', + 'progressional', + 'progressions', + 'progressive', + 'progressively', + 'progressiveness', + 'progressivenesses', + 'progressives', + 'progressivism', + 'progressivisms', + 'progressivist', + 'progressivistic', + 'progressivists', + 'progressivities', + 'progressivity', + 'prohibited', + 'prohibiting', + 'prohibition', + 'prohibitionist', + 'prohibitionists', + 'prohibitions', + 'prohibitive', + 'prohibitively', + 'prohibitiveness', + 'prohibitivenesses', + 'prohibitory', + 'proinsulin', + 'proinsulins', + 'projectable', + 'projectile', + 'projectiles', + 'projecting', + 'projection', + 'projectional', + 'projectionist', + 'projectionists', + 'projections', + 'projective', + 'projectively', + 'projectors', + 'prokaryote', + 'prokaryotes', + 'prokaryotic', + 'prolactins', + 'prolamines', + 'prolapsing', + 'prolegomena', + 'prolegomenon', + 'prolegomenous', + 'proleptically', + 'proletarian', + 'proletarianise', + 'proletarianised', + 'proletarianises', + 'proletarianising', + 'proletarianization', + 'proletarianizations', + 'proletarianize', + 'proletarianized', + 'proletarianizes', + 'proletarianizing', + 'proletarians', + 'proletariat', + 'proletariats', + 'proliferate', + 'proliferated', + 'proliferates', + 'proliferating', + 'proliferation', + 'proliferations', + 'proliferative', + 'prolificacies', + 'prolificacy', + 'prolifically', + 'prolificities', + 'prolificity', + 'prolificness', + 'prolificnesses', + 'prolixities', + 'prolocutor', + 'prolocutors', + 'prologized', + 'prologizes', + 'prologizing', + 'prologuing', + 'prologuize', + 'prologuized', + 'prologuizes', + 'prologuizing', + 'prolongation', + 'prolongations', + 'prolongers', + 'prolonging', + 'prolusions', + 'promenaded', + 'promenader', + 'promenaders', + 'promenades', + 'promenading', + 'promethium', + 'promethiums', + 'prominence', + 'prominences', + 'prominently', + 'promiscuities', + 'promiscuity', + 'promiscuous', + 'promiscuously', + 'promiscuousness', + 'promiscuousnesses', + 'promisingly', + 'promissory', + 'promontories', + 'promontory', + 'promotabilities', + 'promotability', + 'promotable', + 'promotional', + 'promotions', + 'promotiveness', + 'promotivenesses', + 'promptbook', + 'promptbooks', + 'promptitude', + 'promptitudes', + 'promptness', + 'promptnesses', + 'promulgate', + 'promulgated', + 'promulgates', + 'promulgating', + 'promulgation', + 'promulgations', + 'promulgator', + 'promulgators', + 'promulging', + 'pronations', + 'pronatores', + 'pronenesses', + 'pronephric', + 'pronephros', + 'pronephroses', + 'pronghorns', + 'pronominal', + 'pronominally', + 'pronounceabilities', + 'pronounceability', + 'pronounceable', + 'pronounced', + 'pronouncedly', + 'pronouncement', + 'pronouncements', + 'pronouncer', + 'pronouncers', + 'pronounces', + 'pronouncing', + 'pronuclear', + 'pronucleus', + 'pronucleuses', + 'pronunciamento', + 'pronunciamentoes', + 'pronunciamentos', + 'pronunciation', + 'pronunciational', + 'pronunciations', + 'proofreader', + 'proofreaders', + 'proofreading', + 'proofreads', + 'proofrooms', + 'propaedeutic', + 'propaedeutics', + 'propagable', + 'propaganda', + 'propagandas', + 'propagandist', + 'propagandistic', + 'propagandistically', + 'propagandists', + 'propagandize', + 'propagandized', + 'propagandizer', + 'propagandizers', + 'propagandizes', + 'propagandizing', + 'propagated', + 'propagates', + 'propagating', + 'propagation', + 'propagations', + 'propagative', + 'propagator', + 'propagators', + 'propagules', + 'propellant', + 'propellants', + 'propellent', + 'propellents', + 'propellers', + 'propelling', + 'propellors', + 'propending', + 'propensities', + 'propensity', + 'properdins', + 'properness', + 'propernesses', + 'propertied', + 'properties', + 'propertyless', + 'propertylessness', + 'propertylessnesses', + 'prophecies', + 'prophesied', + 'prophesier', + 'prophesiers', + 'prophesies', + 'prophesying', + 'prophetess', + 'prophetesses', + 'prophethood', + 'prophethoods', + 'prophetical', + 'prophetically', + 'prophylactic', + 'prophylactically', + 'prophylactics', + 'prophylaxes', + 'prophylaxis', + 'propinquities', + 'propinquity', + 'propionate', + 'propionates', + 'propitiate', + 'propitiated', + 'propitiates', + 'propitiating', + 'propitiation', + 'propitiations', + 'propitiator', + 'propitiators', + 'propitiatory', + 'propitious', + 'propitiously', + 'propitiousness', + 'propitiousnesses', + 'proplastid', + 'proplastids', + 'propolises', + 'proponents', + 'proportion', + 'proportionable', + 'proportionably', + 'proportional', + 'proportionalities', + 'proportionality', + 'proportionally', + 'proportionals', + 'proportionate', + 'proportionated', + 'proportionately', + 'proportionates', + 'proportionating', + 'proportioned', + 'proportioning', + 'proportions', + 'proposition', + 'propositional', + 'propositioned', + 'propositioning', + 'propositions', + 'propositus', + 'propounded', + 'propounder', + 'propounders', + 'propounding', + 'propoxyphene', + 'propoxyphenes', + 'propraetor', + 'propraetors', + 'propranolol', + 'propranolols', + 'propretors', + 'proprietaries', + 'proprietary', + 'proprieties', + 'proprietor', + 'proprietorial', + 'proprietors', + 'proprietorship', + 'proprietorships', + 'proprietress', + 'proprietresses', + 'proprioception', + 'proprioceptions', + 'proprioceptive', + 'proprioceptor', + 'proprioceptors', + 'propulsion', + 'propulsions', + 'propulsive', + 'propylaeum', + 'propylenes', + 'prorations', + 'prorogated', + 'prorogates', + 'prorogating', + 'prorogation', + 'prorogations', + 'proroguing', + 'prosaically', + 'prosateurs', + 'prosauropod', + 'prosauropods', + 'proscenium', + 'prosceniums', + 'prosciutti', + 'prosciutto', + 'prosciuttos', + 'proscribed', + 'proscriber', + 'proscribers', + 'proscribes', + 'proscribing', + 'proscription', + 'proscriptions', + 'proscriptive', + 'proscriptively', + 'prosecting', + 'prosectors', + 'prosecutable', + 'prosecuted', + 'prosecutes', + 'prosecuting', + 'prosecution', + 'prosecutions', + 'prosecutor', + 'prosecutorial', + 'prosecutors', + 'proselyted', + 'proselytes', + 'proselyting', + 'proselytise', + 'proselytised', + 'proselytises', + 'proselytising', + 'proselytism', + 'proselytisms', + 'proselytization', + 'proselytizations', + 'proselytize', + 'proselytized', + 'proselytizer', + 'proselytizers', + 'proselytizes', + 'proselytizing', + 'proseminar', + 'proseminars', + 'prosencephala', + 'prosencephalic', + 'prosencephalon', + 'prosimians', + 'prosinesses', + 'prosobranch', + 'prosobranchs', + 'prosodical', + 'prosodically', + 'prosodists', + 'prosopographical', + 'prosopographies', + 'prosopography', + 'prosopopoeia', + 'prosopopoeias', + 'prospected', + 'prospecting', + 'prospective', + 'prospectively', + 'prospector', + 'prospectors', + 'prospectus', + 'prospectuses', + 'prospering', + 'prosperities', + 'prosperity', + 'prosperous', + 'prosperously', + 'prosperousness', + 'prosperousnesses', + 'prostacyclin', + 'prostacyclins', + 'prostaglandin', + 'prostaglandins', + 'prostatectomies', + 'prostatectomy', + 'prostatism', + 'prostatisms', + 'prostatites', + 'prostatitides', + 'prostatitis', + 'prostatitises', + 'prostheses', + 'prosthesis', + 'prosthetic', + 'prosthetically', + 'prosthetics', + 'prosthetist', + 'prosthetists', + 'prosthodontics', + 'prosthodontist', + 'prosthodontists', + 'prostitute', + 'prostituted', + 'prostitutes', + 'prostituting', + 'prostitution', + 'prostitutions', + 'prostitutor', + 'prostitutors', + 'prostomial', + 'prostomium', + 'prostrated', + 'prostrates', + 'prostrating', + 'prostration', + 'prostrations', + 'protactinium', + 'protactiniums', + 'protagonist', + 'protagonists', + 'protamines', + 'protectant', + 'protectants', + 'protecting', + 'protection', + 'protectionism', + 'protectionisms', + 'protectionist', + 'protectionists', + 'protections', + 'protective', + 'protectively', + 'protectiveness', + 'protectivenesses', + 'protectoral', + 'protectorate', + 'protectorates', + 'protectories', + 'protectors', + 'protectorship', + 'protectorships', + 'protectory', + 'protectress', + 'protectresses', + 'proteinaceous', + 'proteinase', + 'proteinases', + 'proteinuria', + 'proteinurias', + 'protending', + 'protensive', + 'protensively', + 'proteoglycan', + 'proteoglycans', + 'proteolyses', + 'proteolysis', + 'proteolytic', + 'proteolytically', + 'protestant', + 'protestants', + 'protestation', + 'protestations', + 'protesters', + 'protesting', + 'protestors', + 'prothalamia', + 'prothalamion', + 'prothalamium', + 'prothallia', + 'prothallium', + 'prothallus', + 'prothalluses', + 'prothonotarial', + 'prothonotaries', + 'prothonotary', + 'prothoraces', + 'prothoracic', + 'prothoraxes', + 'prothrombin', + 'prothrombins', + 'protistans', + 'protocoled', + 'protocoling', + 'protocolled', + 'protocolling', + 'protoderms', + 'protogalaxies', + 'protogalaxy', + 'protohistorian', + 'protohistorians', + 'protohistoric', + 'protohistories', + 'protohistory', + 'protohuman', + 'protohumans', + 'protolanguage', + 'protolanguages', + 'protomartyr', + 'protomartyrs', + 'protonated', + 'protonates', + 'protonating', + 'protonation', + 'protonations', + 'protonemal', + 'protonemata', + 'protonematal', + 'protonotaries', + 'protonotary', + 'protopathic', + 'protophloem', + 'protophloems', + 'protoplanet', + 'protoplanetary', + 'protoplanets', + 'protoplasm', + 'protoplasmic', + 'protoplasms', + 'protoplast', + 'protoplasts', + 'protoporphyrin', + 'protoporphyrins', + 'protostars', + 'protostele', + 'protosteles', + 'protostelic', + 'protostome', + 'protostomes', + 'prototroph', + 'prototrophic', + 'prototrophies', + 'prototrophs', + 'prototrophy', + 'prototypal', + 'prototyped', + 'prototypes', + 'prototypic', + 'prototypical', + 'prototypically', + 'prototyping', + 'protoxylem', + 'protoxylems', + 'protozoans', + 'protozoologies', + 'protozoologist', + 'protozoologists', + 'protozoology', + 'protracted', + 'protractile', + 'protracting', + 'protraction', + 'protractions', + 'protractive', + 'protractor', + 'protractors', + 'protreptic', + 'protreptics', + 'protruding', + 'protrusible', + 'protrusion', + 'protrusions', + 'protrusive', + 'protrusively', + 'protrusiveness', + 'protrusivenesses', + 'protuberance', + 'protuberances', + 'protuberant', + 'protuberantly', + 'proudhearted', + 'proustites', + 'provableness', + 'provablenesses', + 'provascular', + 'provenance', + 'provenances', + 'provenders', + 'provenience', + 'proveniences', + 'proventriculi', + 'proventriculus', + 'proverbial', + 'proverbially', + 'proverbing', + 'providence', + 'providences', + 'providential', + 'providentially', + 'providently', + 'provincial', + 'provincialism', + 'provincialisms', + 'provincialist', + 'provincialists', + 'provincialities', + 'provinciality', + 'provincialization', + 'provincializations', + 'provincialize', + 'provincialized', + 'provincializes', + 'provincializing', + 'provincially', + 'provincials', + 'proviruses', + 'provisional', + 'provisionally', + 'provisionals', + 'provisionary', + 'provisioned', + 'provisioner', + 'provisioners', + 'provisioning', + 'provisions', + 'provitamin', + 'provitamins', + 'provocateur', + 'provocateurs', + 'provocation', + 'provocations', + 'provocative', + 'provocatively', + 'provocativeness', + 'provocativenesses', + 'provocatives', + 'provokingly', + 'provolones', + 'proximally', + 'proximately', + 'proximateness', + 'proximatenesses', + 'proximities', + 'prudential', + 'prudentially', + 'prudishness', + 'prudishnesses', + 'pruriences', + 'pruriencies', + 'pruriently', + 'prurituses', + 'prussianise', + 'prussianised', + 'prussianises', + 'prussianising', + 'prussianization', + 'prussianizations', + 'prussianize', + 'prussianized', + 'prussianizes', + 'prussianizing', + 'psalmbooks', + 'psalmodies', + 'psalteries', + 'psalterium', + 'psephological', + 'psephologies', + 'psephologist', + 'psephologists', + 'psephology', + 'pseudepigraph', + 'pseudepigrapha', + 'pseudepigraphies', + 'pseudepigraphon', + 'pseudepigraphs', + 'pseudepigraphy', + 'pseudoallele', + 'pseudoalleles', + 'pseudocholinesterase', + 'pseudocholinesterases', + 'pseudoclassic', + 'pseudoclassicism', + 'pseudoclassicisms', + 'pseudoclassics', + 'pseudocoel', + 'pseudocoelomate', + 'pseudocoelomates', + 'pseudocoels', + 'pseudocyeses', + 'pseudocyesis', + 'pseudomonad', + 'pseudomonades', + 'pseudomonads', + 'pseudomonas', + 'pseudomorph', + 'pseudomorphic', + 'pseudomorphism', + 'pseudomorphisms', + 'pseudomorphous', + 'pseudomorphs', + 'pseudonymities', + 'pseudonymity', + 'pseudonymous', + 'pseudonymously', + 'pseudonymousness', + 'pseudonymousnesses', + 'pseudonyms', + 'pseudoparenchyma', + 'pseudoparenchymas', + 'pseudoparenchymata', + 'pseudoparenchymatous', + 'pseudopodal', + 'pseudopodia', + 'pseudopodial', + 'pseudopodium', + 'pseudopods', + 'pseudopregnancies', + 'pseudopregnancy', + 'pseudopregnant', + 'pseudorandom', + 'pseudoscience', + 'pseudosciences', + 'pseudoscientific', + 'pseudoscientist', + 'pseudoscientists', + 'pseudoscorpion', + 'pseudoscorpions', + 'pseudosophisticated', + 'pseudosophistication', + 'pseudosophistications', + 'pseudotuberculoses', + 'pseudotuberculosis', + 'psilocybin', + 'psilocybins', + 'psilophyte', + 'psilophytes', + 'psilophytic', + 'psittacine', + 'psittacines', + 'psittacoses', + 'psittacosis', + 'psittacosises', + 'psittacotic', + 'psoriatics', + 'psychasthenia', + 'psychasthenias', + 'psychasthenic', + 'psychasthenics', + 'psychedelia', + 'psychedelias', + 'psychedelic', + 'psychedelically', + 'psychedelics', + 'psychiatric', + 'psychiatrically', + 'psychiatries', + 'psychiatrist', + 'psychiatrists', + 'psychiatry', + 'psychically', + 'psychoacoustic', + 'psychoacoustics', + 'psychoactive', + 'psychoanalyses', + 'psychoanalysis', + 'psychoanalyst', + 'psychoanalysts', + 'psychoanalytic', + 'psychoanalytical', + 'psychoanalytically', + 'psychoanalyze', + 'psychoanalyzed', + 'psychoanalyzes', + 'psychoanalyzing', + 'psychobabble', + 'psychobabbler', + 'psychobabblers', + 'psychobabbles', + 'psychobiographer', + 'psychobiographers', + 'psychobiographical', + 'psychobiographies', + 'psychobiography', + 'psychobiologic', + 'psychobiological', + 'psychobiologies', + 'psychobiologist', + 'psychobiologists', + 'psychobiology', + 'psychochemical', + 'psychochemicals', + 'psychodrama', + 'psychodramas', + 'psychodramatic', + 'psychodynamic', + 'psychodynamically', + 'psychodynamics', + 'psychogeneses', + 'psychogenesis', + 'psychogenetic', + 'psychogenic', + 'psychogenically', + 'psychograph', + 'psychographs', + 'psychohistorian', + 'psychohistorians', + 'psychohistorical', + 'psychohistories', + 'psychohistory', + 'psychokineses', + 'psychokinesis', + 'psychokinetic', + 'psycholinguist', + 'psycholinguistic', + 'psycholinguistics', + 'psycholinguists', + 'psychologic', + 'psychological', + 'psychologically', + 'psychologies', + 'psychologise', + 'psychologised', + 'psychologises', + 'psychologising', + 'psychologism', + 'psychologisms', + 'psychologist', + 'psychologists', + 'psychologize', + 'psychologized', + 'psychologizes', + 'psychologizing', + 'psychology', + 'psychometric', + 'psychometrically', + 'psychometrician', + 'psychometricians', + 'psychometrics', + 'psychometries', + 'psychometry', + 'psychomotor', + 'psychoneuroses', + 'psychoneurosis', + 'psychoneurotic', + 'psychoneurotics', + 'psychopath', + 'psychopathic', + 'psychopathically', + 'psychopathics', + 'psychopathies', + 'psychopathologic', + 'psychopathological', + 'psychopathologically', + 'psychopathologies', + 'psychopathologist', + 'psychopathologists', + 'psychopathology', + 'psychopaths', + 'psychopathy', + 'psychopharmacologic', + 'psychopharmacological', + 'psychopharmacologies', + 'psychopharmacologist', + 'psychopharmacologists', + 'psychopharmacology', + 'psychophysical', + 'psychophysically', + 'psychophysicist', + 'psychophysicists', + 'psychophysics', + 'psychophysiologic', + 'psychophysiological', + 'psychophysiologically', + 'psychophysiologies', + 'psychophysiologist', + 'psychophysiologists', + 'psychophysiology', + 'psychosexual', + 'psychosexualities', + 'psychosexuality', + 'psychosexually', + 'psychosocial', + 'psychosocially', + 'psychosomatic', + 'psychosomatically', + 'psychosomatics', + 'psychosurgeon', + 'psychosurgeons', + 'psychosurgeries', + 'psychosurgery', + 'psychosurgical', + 'psychosyntheses', + 'psychosynthesis', + 'psychotherapeutic', + 'psychotherapeutically', + 'psychotherapies', + 'psychotherapist', + 'psychotherapists', + 'psychotherapy', + 'psychotically', + 'psychotics', + 'psychotomimetic', + 'psychotomimetically', + 'psychotomimetics', + 'psychotropic', + 'psychotropics', + 'psychrometer', + 'psychrometers', + 'psychrometric', + 'psychrometries', + 'psychrometry', + 'psychrophilic', + 'ptarmigans', + 'pteranodon', + 'pteranodons', + 'pteridines', + 'pteridological', + 'pteridologies', + 'pteridologist', + 'pteridologists', + 'pteridology', + 'pteridophyte', + 'pteridophytes', + 'pteridosperm', + 'pteridosperms', + 'pterodactyl', + 'pterodactyls', + 'pterosaurs', + 'pterygiums', + 'pterygoids', + 'puberulent', + 'pubescence', + 'pubescences', + 'publically', + 'publication', + 'publications', + 'publicised', + 'publicises', + 'publicising', + 'publicists', + 'publicities', + 'publicized', + 'publicizes', + 'publicizing', + 'publicness', + 'publicnesses', + 'publishable', + 'publishers', + 'publishing', + 'publishings', + 'puckeriest', + 'puckishness', + 'puckishnesses', + 'pudginesses', + 'puerilisms', + 'puerilities', + 'puerperium', + 'puffinesses', + 'pugilistic', + 'pugnacious', + 'pugnaciously', + 'pugnaciousness', + 'pugnaciousnesses', + 'pugnacities', + 'puissances', + 'pulchritude', + 'pulchritudes', + 'pulchritudinous', + 'pullulated', + 'pullulates', + 'pullulating', + 'pullulation', + 'pullulations', + 'pulmonates', + 'pulpinesses', + 'pulsations', + 'pulverable', + 'pulverised', + 'pulverises', + 'pulverising', + 'pulverizable', + 'pulverization', + 'pulverizations', + 'pulverized', + 'pulverizer', + 'pulverizers', + 'pulverizes', + 'pulverizing', + 'pulverulent', + 'pummelling', + 'pumpernickel', + 'pumpernickels', + 'pumpkinseed', + 'pumpkinseeds', + 'punchballs', + 'punchboard', + 'punchboards', + 'punchinello', + 'punchinellos', + 'punctation', + 'punctations', + 'punctilios', + 'punctilious', + 'punctiliously', + 'punctiliousness', + 'punctiliousnesses', + 'punctualities', + 'punctuality', + 'punctually', + 'punctuated', + 'punctuates', + 'punctuating', + 'punctuation', + 'punctuations', + 'punctuator', + 'punctuators', + 'puncturing', + 'punditries', + 'pungencies', + 'puninesses', + 'punishabilities', + 'punishability', + 'punishable', + 'punishment', + 'punishments', + 'punitively', + 'punitiveness', + 'punitivenesses', + 'punkinesses', + 'pupillages', + 'puppeteers', + 'puppetlike', + 'puppetries', + 'puppyhoods', + 'purblindly', + 'purblindness', + 'purblindnesses', + 'purchasable', + 'purchasers', + 'purchasing', + 'purebloods', + 'purenesses', + 'purgations', + 'purgatives', + 'purgatorial', + 'purgatories', + 'purification', + 'purifications', + 'purificator', + 'purificators', + 'purificatory', + 'puristically', + 'puritanical', + 'puritanically', + 'puritanism', + 'puritanisms', + 'purloiners', + 'purloining', + 'puromycins', + 'purpleheart', + 'purplehearts', + 'purportedly', + 'purporting', + 'purposeful', + 'purposefully', + 'purposefulness', + 'purposefulnesses', + 'purposeless', + 'purposelessly', + 'purposelessness', + 'purposelessnesses', + 'purposively', + 'purposiveness', + 'purposivenesses', + 'pursinesses', + 'pursuances', + 'pursuivant', + 'pursuivants', + 'purtenance', + 'purtenances', + 'purulences', + 'purveyance', + 'purveyances', + 'pushchairs', + 'pushfulness', + 'pushfulnesses', + 'pushinesses', + 'pusillanimities', + 'pusillanimity', + 'pusillanimous', + 'pusillanimously', + 'pussyfooted', + 'pussyfooter', + 'pussyfooters', + 'pussyfooting', + 'pussyfoots', + 'pustulants', + 'pustulated', + 'pustulation', + 'pustulations', + 'putatively', + 'putrefaction', + 'putrefactions', + 'putrefactive', + 'putrefying', + 'putrescence', + 'putrescences', + 'putrescent', + 'putrescible', + 'putrescine', + 'putrescines', + 'putridities', + 'putschists', + 'puttyroots', + 'puzzleheaded', + 'puzzleheadedness', + 'puzzleheadednesses', + 'puzzlement', + 'puzzlements', + 'puzzlingly', + 'pycnogonid', + 'pycnogonids', + 'pycnometer', + 'pycnometers', + 'pyelitises', + 'pyelonephritic', + 'pyelonephritides', + 'pyelonephritis', + 'pyracantha', + 'pyracanthas', + 'pyramidally', + 'pyramidical', + 'pyramiding', + 'pyranoside', + 'pyranosides', + 'pyrargyrite', + 'pyrargyrites', + 'pyrethrins', + 'pyrethroid', + 'pyrethroids', + 'pyrethrums', + 'pyrheliometer', + 'pyrheliometers', + 'pyrheliometric', + 'pyridoxals', + 'pyridoxamine', + 'pyridoxamines', + 'pyridoxine', + 'pyridoxines', + 'pyrimethamine', + 'pyrimethamines', + 'pyrimidine', + 'pyrimidines', + 'pyrocatechol', + 'pyrocatechols', + 'pyroclastic', + 'pyroelectric', + 'pyroelectricities', + 'pyroelectricity', + 'pyrogallol', + 'pyrogallols', + 'pyrogenicities', + 'pyrogenicity', + 'pyrolizing', + 'pyrologies', + 'pyrolusite', + 'pyrolusites', + 'pyrolysate', + 'pyrolysates', + 'pyrolytically', + 'pyrolyzable', + 'pyrolyzate', + 'pyrolyzates', + 'pyrolyzers', + 'pyrolyzing', + 'pyromancies', + 'pyromaniac', + 'pyromaniacal', + 'pyromaniacs', + 'pyromanias', + 'pyrometallurgical', + 'pyrometallurgies', + 'pyrometallurgy', + 'pyrometers', + 'pyrometric', + 'pyrometrically', + 'pyrometries', + 'pyromorphite', + 'pyromorphites', + 'pyroninophilic', + 'pyrophoric', + 'pyrophosphate', + 'pyrophosphates', + 'pyrophyllite', + 'pyrophyllites', + 'pyrotechnic', + 'pyrotechnical', + 'pyrotechnically', + 'pyrotechnics', + 'pyrotechnist', + 'pyrotechnists', + 'pyroxenite', + 'pyroxenites', + 'pyroxenitic', + 'pyroxenoid', + 'pyroxenoids', + 'pyroxylins', + 'pyrrhotite', + 'pyrrhotites', + 'pythonesses', + 'quackeries', + 'quacksalver', + 'quacksalvers', + 'quadplexes', + 'quadrangle', + 'quadrangles', + 'quadrangular', + 'quadrantal', + 'quadrantes', + 'quadraphonic', + 'quadraphonics', + 'quadratically', + 'quadratics', + 'quadrating', + 'quadrature', + 'quadratures', + 'quadrennia', + 'quadrennial', + 'quadrennially', + 'quadrennials', + 'quadrennium', + 'quadrenniums', + 'quadricentennial', + 'quadricentennials', + 'quadriceps', + 'quadricepses', + 'quadrilateral', + 'quadrilaterals', + 'quadrilles', + 'quadrillion', + 'quadrillions', + 'quadrillionth', + 'quadrillionths', + 'quadripartite', + 'quadriphonic', + 'quadriphonics', + 'quadriplegia', + 'quadriplegias', + 'quadriplegic', + 'quadriplegics', + 'quadrivalent', + 'quadrivalents', + 'quadrivial', + 'quadrivium', + 'quadriviums', + 'quadrumanous', + 'quadrumvir', + 'quadrumvirate', + 'quadrumvirates', + 'quadrumvirs', + 'quadrupedal', + 'quadrupeds', + 'quadrupled', + 'quadruples', + 'quadruplet', + 'quadruplets', + 'quadruplicate', + 'quadruplicated', + 'quadruplicates', + 'quadruplicating', + 'quadruplication', + 'quadruplications', + 'quadruplicities', + 'quadruplicity', + 'quadrupling', + 'quadrupole', + 'quadrupoles', + 'quagmirier', + 'quagmiriest', + 'quaintness', + 'quaintnesses', + 'qualifiable', + 'qualification', + 'qualifications', + 'qualifiedly', + 'qualifiers', + 'qualifying', + 'qualitative', + 'qualitatively', + 'qualmishly', + 'qualmishness', + 'qualmishnesses', + 'quandaries', + 'quantifiable', + 'quantification', + 'quantificational', + 'quantificationally', + 'quantifications', + 'quantified', + 'quantifier', + 'quantifiers', + 'quantifies', + 'quantifying', + 'quantitate', + 'quantitated', + 'quantitates', + 'quantitating', + 'quantitation', + 'quantitations', + 'quantitative', + 'quantitatively', + 'quantitativeness', + 'quantitativenesses', + 'quantities', + 'quantization', + 'quantizations', + 'quantizers', + 'quantizing', + 'quarantine', + 'quarantined', + 'quarantines', + 'quarantining', + 'quarrelers', + 'quarreling', + 'quarrelled', + 'quarreller', + 'quarrellers', + 'quarrelling', + 'quarrelsome', + 'quarrelsomely', + 'quarrelsomeness', + 'quarrelsomenesses', + 'quarryings', + 'quarterage', + 'quarterages', + 'quarterback', + 'quarterbacked', + 'quarterbacking', + 'quarterbacks', + 'quarterdeck', + 'quarterdecks', + 'quarterfinal', + 'quarterfinalist', + 'quarterfinalists', + 'quarterfinals', + 'quartering', + 'quarterings', + 'quarterlies', + 'quartermaster', + 'quartermasters', + 'quartersawed', + 'quartersawn', + 'quarterstaff', + 'quarterstaves', + 'quartettes', + 'quartzites', + 'quartzitic', + 'quasiparticle', + 'quasiparticles', + 'quasiperiodic', + 'quasiperiodicities', + 'quasiperiodicity', + 'quatercentenaries', + 'quatercentenary', + 'quaternaries', + 'quaternary', + 'quaternion', + 'quaternions', + 'quaternities', + 'quaternity', + 'quatrefoil', + 'quatrefoils', + 'quattrocento', + 'quattrocentos', + 'quattuordecillion', + 'quattuordecillions', + 'quaveringly', + 'queasiness', + 'queasinesses', + 'quebrachos', + 'queenliest', + 'queenliness', + 'queenlinesses', + 'queenships', + 'queensides', + 'queernesses', + 'quenchable', + 'quenchless', + 'quercetins', + 'quercitron', + 'quercitrons', + 'querulously', + 'querulousness', + 'querulousnesses', + 'quesadilla', + 'quesadillas', + 'questionable', + 'questionableness', + 'questionablenesses', + 'questionably', + 'questionaries', + 'questionary', + 'questioned', + 'questioner', + 'questioners', + 'questioning', + 'questionless', + 'questionnaire', + 'questionnaires', + 'quickeners', + 'quickening', + 'quicklimes', + 'quicknesses', + 'quicksands', + 'quicksilver', + 'quicksilvers', + 'quicksteps', + 'quiddities', + 'quiescence', + 'quiescences', + 'quiescently', + 'quietening', + 'quietistic', + 'quietnesses', + 'quillbacks', + 'quillworks', + 'quinacrine', + 'quinacrines', + 'quincentenaries', + 'quincentenary', + 'quincentennial', + 'quincentennials', + 'quincuncial', + 'quincunxes', + 'quincunxial', + 'quindecillion', + 'quindecillions', + 'quinidines', + 'quinolines', + 'quinquennia', + 'quinquennial', + 'quinquennially', + 'quinquennials', + 'quinquennium', + 'quinquenniums', + 'quintessence', + 'quintessences', + 'quintessential', + 'quintessentially', + 'quintettes', + 'quintillion', + 'quintillions', + 'quintillionth', + 'quintillionths', + 'quintupled', + 'quintuples', + 'quintuplet', + 'quintuplets', + 'quintuplicate', + 'quintuplicated', + 'quintuplicates', + 'quintuplicating', + 'quintupling', + 'quirkiness', + 'quirkinesses', + 'quislingism', + 'quislingisms', + 'quitclaimed', + 'quitclaiming', + 'quitclaims', + 'quittances', + 'quiveringly', + 'quixotical', + 'quixotically', + 'quixotisms', + 'quixotries', + 'quizmaster', + 'quizmasters', + 'quizzicalities', + 'quizzicality', + 'quizzically', + 'quodlibets', + 'quotabilities', + 'quotability', + 'quotations', + 'quotidians', + 'rabbinates', + 'rabbinical', + 'rabbinically', + 'rabbinisms', + 'rabbitbrush', + 'rabbitbrushes', + 'rabbitries', + 'rabblement', + 'rabblements', + 'rabidities', + 'rabidnesses', + 'racecourse', + 'racecourses', + 'racehorses', + 'racemization', + 'racemizations', + 'racemizing', + 'racetracker', + 'racetrackers', + 'racetracks', + 'racewalker', + 'racewalkers', + 'racewalking', + 'racewalkings', + 'rachitides', + 'racialisms', + 'racialistic', + 'racialists', + 'racinesses', + 'racketeered', + 'racketeering', + 'racketeers', + 'racketiest', + 'raconteurs', + 'racquetball', + 'racquetballs', + 'radarscope', + 'radarscopes', + 'radiancies', + 'radiational', + 'radiationless', + 'radiations', + 'radicalise', + 'radicalised', + 'radicalises', + 'radicalising', + 'radicalism', + 'radicalisms', + 'radicalization', + 'radicalizations', + 'radicalize', + 'radicalized', + 'radicalizes', + 'radicalizing', + 'radicalness', + 'radicalnesses', + 'radicating', + 'radicchios', + 'radioactive', + 'radioactively', + 'radioactivities', + 'radioactivity', + 'radioallergosorbent', + 'radioautograph', + 'radioautographic', + 'radioautographies', + 'radioautographs', + 'radioautography', + 'radiobiologic', + 'radiobiological', + 'radiobiologically', + 'radiobiologies', + 'radiobiologist', + 'radiobiologists', + 'radiobiology', + 'radiocarbon', + 'radiocarbons', + 'radiochemical', + 'radiochemically', + 'radiochemist', + 'radiochemistries', + 'radiochemistry', + 'radiochemists', + 'radiochromatogram', + 'radiochromatograms', + 'radioecologies', + 'radioecology', + 'radioelement', + 'radioelements', + 'radiogenic', + 'radiograms', + 'radiograph', + 'radiographed', + 'radiographic', + 'radiographically', + 'radiographies', + 'radiographing', + 'radiographs', + 'radiography', + 'radioimmunoassay', + 'radioimmunoassayable', + 'radioimmunoassays', + 'radioisotope', + 'radioisotopes', + 'radioisotopic', + 'radioisotopically', + 'radiolabel', + 'radiolabeled', + 'radiolabeling', + 'radiolabelled', + 'radiolabelling', + 'radiolabels', + 'radiolarian', + 'radiolarians', + 'radiologic', + 'radiological', + 'radiologically', + 'radiologies', + 'radiologist', + 'radiologists', + 'radiolucencies', + 'radiolucency', + 'radiolucent', + 'radiolyses', + 'radiolysis', + 'radiolytic', + 'radiometer', + 'radiometers', + 'radiometric', + 'radiometrically', + 'radiometries', + 'radiometry', + 'radiomimetic', + 'radionuclide', + 'radionuclides', + 'radiopaque', + 'radiopharmaceutical', + 'radiopharmaceuticals', + 'radiophone', + 'radiophones', + 'radiophoto', + 'radiophotos', + 'radioprotection', + 'radioprotections', + 'radioprotective', + 'radiosensitive', + 'radiosensitivities', + 'radiosensitivity', + 'radiosonde', + 'radiosondes', + 'radiostrontium', + 'radiostrontiums', + 'radiotelegraph', + 'radiotelegraphies', + 'radiotelegraphs', + 'radiotelegraphy', + 'radiotelemetric', + 'radiotelemetries', + 'radiotelemetry', + 'radiotelephone', + 'radiotelephones', + 'radiotelephonies', + 'radiotelephony', + 'radiotherapies', + 'radiotherapist', + 'radiotherapists', + 'radiotherapy', + 'radiothorium', + 'radiothoriums', + 'radiotracer', + 'radiotracers', + 'raffinoses', + 'raffishness', + 'raffishnesses', + 'rafflesias', + 'ragamuffin', + 'ragamuffins', + 'raggedness', + 'raggednesses', + 'ragpickers', + 'railbusses', + 'railleries', + 'railroaded', + 'railroader', + 'railroaders', + 'railroading', + 'railroadings', + 'rainbowlike', + 'rainmakers', + 'rainmaking', + 'rainmakings', + 'rainspouts', + 'rainsquall', + 'rainsqualls', + 'rainstorms', + 'rainwashed', + 'rainwashes', + 'rainwashing', + 'rainwaters', + 'rakishness', + 'rakishnesses', + 'rallentando', + 'ramblingly', + 'rambouillet', + 'rambouillets', + 'rambunctious', + 'rambunctiously', + 'rambunctiousness', + 'rambunctiousnesses', + 'ramification', + 'ramifications', + 'ramosities', + 'rampageous', + 'rampageously', + 'rampageousness', + 'rampageousnesses', + 'rampancies', + 'ramparting', + 'ramrodding', + 'ramshackle', + 'rancidities', + 'rancidness', + 'rancidnesses', + 'rancorously', + 'randomization', + 'randomizations', + 'randomized', + 'randomizer', + 'randomizers', + 'randomizes', + 'randomizing', + 'randomness', + 'randomnesses', + 'rangelands', + 'ranginesses', + 'ranknesses', + 'ransackers', + 'ransacking', + 'ranunculus', + 'ranunculuses', + 'rapaciously', + 'rapaciousness', + 'rapaciousnesses', + 'rapacities', + 'rapidities', + 'rapidnesses', + 'rappelling', + 'rapporteur', + 'rapporteurs', + 'rapprochement', + 'rapprochements', + 'rapscallion', + 'rapscallions', + 'raptnesses', + 'rapturously', + 'rapturousness', + 'rapturousnesses', + 'rarefaction', + 'rarefactional', + 'rarefactions', + 'rarenesses', + 'rascalities', + 'rashnesses', + 'raspberries', + 'rataplanned', + 'rataplanning', + 'ratatouille', + 'ratatouilles', + 'ratcheting', + 'ratemeters', + 'ratepayers', + 'rathskeller', + 'rathskellers', + 'ratification', + 'ratifications', + 'ratiocinate', + 'ratiocinated', + 'ratiocinates', + 'ratiocinating', + 'ratiocination', + 'ratiocinations', + 'ratiocinative', + 'ratiocinator', + 'ratiocinators', + 'rationales', + 'rationalise', + 'rationalised', + 'rationalises', + 'rationalising', + 'rationalism', + 'rationalisms', + 'rationalist', + 'rationalistic', + 'rationalistically', + 'rationalists', + 'rationalities', + 'rationality', + 'rationalizable', + 'rationalization', + 'rationalizations', + 'rationalize', + 'rationalized', + 'rationalizer', + 'rationalizers', + 'rationalizes', + 'rationalizing', + 'rationally', + 'rationalness', + 'rationalnesses', + 'rattlebrain', + 'rattlebrained', + 'rattlebrains', + 'rattlesnake', + 'rattlesnakes', + 'rattletrap', + 'rattletraps', + 'rattlingly', + 'rattooning', + 'raucousness', + 'raucousnesses', + 'raunchiest', + 'raunchiness', + 'raunchinesses', + 'rauwolfias', + 'ravagement', + 'ravagements', + 'ravellings', + 'ravelments', + 'ravenously', + 'ravenousness', + 'ravenousnesses', + 'ravishingly', + 'ravishment', + 'ravishments', + 'rawinsonde', + 'rawinsondes', + 'raygrasses', + 'raylessness', + 'raylessnesses', + 'razorbacks', + 'razorbills', + 'razzamatazz', + 'razzamatazzes', + 'reabsorbed', + 'reabsorbing', + 'reacceding', + 'reaccelerate', + 'reaccelerated', + 'reaccelerates', + 'reaccelerating', + 'reaccented', + 'reaccenting', + 'reaccepted', + 'reaccepting', + 'reaccession', + 'reaccessions', + 'reacclimatize', + 'reacclimatized', + 'reacclimatizes', + 'reacclimatizing', + 'reaccredit', + 'reaccreditation', + 'reaccreditations', + 'reaccredited', + 'reaccrediting', + 'reaccredits', + 'reaccusing', + 'reacquaint', + 'reacquainted', + 'reacquainting', + 'reacquaints', + 'reacquired', + 'reacquires', + 'reacquiring', + 'reacquisition', + 'reacquisitions', + 'reactances', + 'reactionaries', + 'reactionary', + 'reactionaryism', + 'reactionaryisms', + 'reactivate', + 'reactivated', + 'reactivates', + 'reactivating', + 'reactivation', + 'reactivations', + 'reactively', + 'reactiveness', + 'reactivenesses', + 'reactivities', + 'reactivity', + 'readabilities', + 'readability', + 'readableness', + 'readablenesses', + 'readapting', + 'readdicted', + 'readdicting', + 'readdressed', + 'readdresses', + 'readdressing', + 'readership', + 'readerships', + 'readinesses', + 'readjustable', + 'readjusted', + 'readjusting', + 'readjustment', + 'readjustments', + 'readmission', + 'readmissions', + 'readmitted', + 'readmitting', + 'readopting', + 'readorning', + 'readymades', + 'reaffirmation', + 'reaffirmations', + 'reaffirmed', + 'reaffirming', + 'reaffixing', + 'reafforest', + 'reafforestation', + 'reafforestations', + 'reafforested', + 'reafforesting', + 'reafforests', + 'reaggregate', + 'reaggregated', + 'reaggregates', + 'reaggregating', + 'reaggregation', + 'reaggregations', + 'realigning', + 'realignment', + 'realignments', + 'realistically', + 'realizable', + 'realization', + 'realizations', + 'reallocate', + 'reallocated', + 'reallocates', + 'reallocating', + 'reallocation', + 'reallocations', + 'reallotted', + 'reallotting', + 'realnesses', + 'realpolitik', + 'realpolitiks', + 'realtering', + 'reanalyses', + 'reanalysis', + 'reanalyzed', + 'reanalyzes', + 'reanalyzing', + 'reanimated', + 'reanimates', + 'reanimating', + 'reanimation', + 'reanimations', + 'reannexation', + 'reannexations', + 'reannexing', + 'reanointed', + 'reanointing', + 'reappearance', + 'reappearances', + 'reappeared', + 'reappearing', + 'reapplication', + 'reapplications', + 'reapplying', + 'reappointed', + 'reappointing', + 'reappointment', + 'reappointments', + 'reappoints', + 'reapportion', + 'reapportioned', + 'reapportioning', + 'reapportionment', + 'reapportionments', + 'reapportions', + 'reappraisal', + 'reappraisals', + 'reappraise', + 'reappraised', + 'reappraises', + 'reappraising', + 'reappropriate', + 'reappropriated', + 'reappropriates', + 'reappropriating', + 'reapproved', + 'reapproves', + 'reapproving', + 'reargument', + 'rearguments', + 'rearmament', + 'rearmaments', + 'rearousals', + 'rearousing', + 'rearranged', + 'rearrangement', + 'rearrangements', + 'rearranges', + 'rearranging', + 'rearrested', + 'rearresting', + 'rearticulate', + 'rearticulated', + 'rearticulates', + 'rearticulating', + 'reascended', + 'reascending', + 'reasonabilities', + 'reasonability', + 'reasonable', + 'reasonableness', + 'reasonablenesses', + 'reasonably', + 'reasonings', + 'reasonless', + 'reasonlessly', + 'reassailed', + 'reassailing', + 'reassemblage', + 'reassemblages', + 'reassemble', + 'reassembled', + 'reassembles', + 'reassemblies', + 'reassembling', + 'reassembly', + 'reasserted', + 'reasserting', + 'reassertion', + 'reassertions', + 'reassessed', + 'reassesses', + 'reassessing', + 'reassessment', + 'reassessments', + 'reassigned', + 'reassigning', + 'reassignment', + 'reassignments', + 'reassorted', + 'reassorting', + 'reassuming', + 'reassumption', + 'reassumptions', + 'reassurance', + 'reassurances', + 'reassuring', + 'reassuringly', + 'reattached', + 'reattaches', + 'reattaching', + 'reattachment', + 'reattachments', + 'reattacked', + 'reattacking', + 'reattained', + 'reattaining', + 'reattempted', + 'reattempting', + 'reattempts', + 'reattribute', + 'reattributed', + 'reattributes', + 'reattributing', + 'reattribution', + 'reattributions', + 'reauthorization', + 'reauthorizations', + 'reauthorize', + 'reauthorized', + 'reauthorizes', + 'reauthorizing', + 'reavailing', + 'reawakened', + 'reawakening', + 'rebalanced', + 'rebalances', + 'rebalancing', + 'rebaptisms', + 'rebaptized', + 'rebaptizes', + 'rebaptizing', + 'rebarbative', + 'rebarbatively', + 'rebeginning', + 'rebellions', + 'rebellious', + 'rebelliously', + 'rebelliousness', + 'rebelliousnesses', + 'reblending', + 'reblooming', + 'reboarding', + 'rebottling', + 'rebounders', + 'rebounding', + 'rebranched', + 'rebranches', + 'rebranching', + 'rebreeding', + 'rebroadcast', + 'rebroadcasting', + 'rebroadcasts', + 'rebuilding', + 'rebuttable', + 'rebuttoned', + 'rebuttoning', + 'recalcitrance', + 'recalcitrances', + 'recalcitrancies', + 'recalcitrancy', + 'recalcitrant', + 'recalcitrants', + 'recalculate', + 'recalculated', + 'recalculates', + 'recalculating', + 'recalculation', + 'recalculations', + 'recalibrate', + 'recalibrated', + 'recalibrates', + 'recalibrating', + 'recalibration', + 'recalibrations', + 'recallabilities', + 'recallability', + 'recallable', + 'recanalization', + 'recanalizations', + 'recanalize', + 'recanalized', + 'recanalizes', + 'recanalizing', + 'recantation', + 'recantations', + 'recapitalization', + 'recapitalizations', + 'recapitalize', + 'recapitalized', + 'recapitalizes', + 'recapitalizing', + 'recapitulate', + 'recapitulated', + 'recapitulates', + 'recapitulating', + 'recapitulation', + 'recapitulations', + 'recappable', + 'recaptured', + 'recaptures', + 'recapturing', + 'recarrying', + 'receipting', + 'receivable', + 'receivables', + 'receivership', + 'receiverships', + 'recensions', + 'recentness', + 'recentnesses', + 'recentralization', + 'recentralizations', + 'recentrifuge', + 'recentrifuged', + 'recentrifuges', + 'recentrifuging', + 'receptacle', + 'receptacles', + 'receptionist', + 'receptionists', + 'receptions', + 'receptively', + 'receptiveness', + 'receptivenesses', + 'receptivities', + 'receptivity', + 'recertification', + 'recertifications', + 'recertified', + 'recertifies', + 'recertifying', + 'recessional', + 'recessionals', + 'recessionary', + 'recessions', + 'recessively', + 'recessiveness', + 'recessivenesses', + 'recessives', + 'rechallenge', + 'rechallenged', + 'rechallenges', + 'rechallenging', + 'rechanging', + 'rechanneled', + 'rechanneling', + 'rechannelled', + 'rechannelling', + 'rechannels', + 'rechargeable', + 'rechargers', + 'recharging', + 'rechartered', + 'rechartering', + 'recharters', + 'recharting', + 'rechauffes', + 'rechecking', + 'rechoosing', + 'rechoreograph', + 'rechoreographed', + 'rechoreographing', + 'rechoreographs', + 'rechristen', + 'rechristened', + 'rechristening', + 'rechristens', + 'rechromatograph', + 'rechromatographed', + 'rechromatographies', + 'rechromatographing', + 'rechromatographs', + 'rechromatography', + 'recidivism', + 'recidivisms', + 'recidivist', + 'recidivistic', + 'recidivists', + 'recipients', + 'reciprocal', + 'reciprocally', + 'reciprocals', + 'reciprocate', + 'reciprocated', + 'reciprocates', + 'reciprocating', + 'reciprocation', + 'reciprocations', + 'reciprocative', + 'reciprocator', + 'reciprocators', + 'reciprocities', + 'reciprocity', + 'recircling', + 'recirculate', + 'recirculated', + 'recirculates', + 'recirculating', + 'recirculation', + 'recirculations', + 'recitalist', + 'recitalists', + 'recitation', + 'recitations', + 'recitative', + 'recitatives', + 'recitativi', + 'recitativo', + 'recitativos', + 'recklessly', + 'recklessness', + 'recklessnesses', + 'reckonings', + 'reclaimable', + 'reclaiming', + 'reclamation', + 'reclamations', + 'reclasping', + 'reclassification', + 'reclassifications', + 'reclassified', + 'reclassifies', + 'reclassify', + 'reclassifying', + 'recleaning', + 'reclosable', + 'reclothing', + 'reclusions', + 'reclusively', + 'reclusiveness', + 'reclusivenesses', + 'recodification', + 'recodifications', + 'recodified', + 'recodifies', + 'recodifying', + 'recognised', + 'recognises', + 'recognising', + 'recognition', + 'recognitions', + 'recognizabilities', + 'recognizability', + 'recognizable', + 'recognizably', + 'recognizance', + 'recognizances', + 'recognized', + 'recognizer', + 'recognizers', + 'recognizes', + 'recognizing', + 'recoilless', + 'recoinages', + 'recollected', + 'recollecting', + 'recollection', + 'recollections', + 'recollects', + 'recolonization', + 'recolonizations', + 'recolonize', + 'recolonized', + 'recolonizes', + 'recolonizing', + 'recoloring', + 'recombinant', + 'recombinants', + 'recombination', + 'recombinational', + 'recombinations', + 'recombined', + 'recombines', + 'recombining', + 'recommence', + 'recommenced', + 'recommencement', + 'recommencements', + 'recommences', + 'recommencing', + 'recommendable', + 'recommendation', + 'recommendations', + 'recommendatory', + 'recommended', + 'recommending', + 'recommends', + 'recommission', + 'recommissioned', + 'recommissioning', + 'recommissions', + 'recommitment', + 'recommitments', + 'recommittal', + 'recommittals', + 'recommitted', + 'recommitting', + 'recompense', + 'recompensed', + 'recompenses', + 'recompensing', + 'recompilation', + 'recompilations', + 'recompiled', + 'recompiles', + 'recompiling', + 'recomposed', + 'recomposes', + 'recomposing', + 'recomposition', + 'recompositions', + 'recomputation', + 'recomputations', + 'recomputed', + 'recomputes', + 'recomputing', + 'reconceive', + 'reconceived', + 'reconceives', + 'reconceiving', + 'reconcentrate', + 'reconcentrated', + 'reconcentrates', + 'reconcentrating', + 'reconcentration', + 'reconcentrations', + 'reconception', + 'reconceptions', + 'reconceptualization', + 'reconceptualizations', + 'reconceptualize', + 'reconceptualized', + 'reconceptualizes', + 'reconceptualizing', + 'reconcilabilities', + 'reconcilability', + 'reconcilable', + 'reconciled', + 'reconcilement', + 'reconcilements', + 'reconciler', + 'reconcilers', + 'reconciles', + 'reconciliation', + 'reconciliations', + 'reconciliatory', + 'reconciling', + 'recondense', + 'recondensed', + 'recondenses', + 'recondensing', + 'reconditely', + 'reconditeness', + 'reconditenesses', + 'recondition', + 'reconditioned', + 'reconditioning', + 'reconditions', + 'reconfigurable', + 'reconfiguration', + 'reconfigurations', + 'reconfigure', + 'reconfigured', + 'reconfigures', + 'reconfiguring', + 'reconfirmation', + 'reconfirmations', + 'reconfirmed', + 'reconfirming', + 'reconfirms', + 'reconnaissance', + 'reconnaissances', + 'reconnected', + 'reconnecting', + 'reconnection', + 'reconnections', + 'reconnects', + 'reconnoiter', + 'reconnoitered', + 'reconnoitering', + 'reconnoiters', + 'reconnoitre', + 'reconnoitred', + 'reconnoitres', + 'reconnoitring', + 'reconquered', + 'reconquering', + 'reconquers', + 'reconquest', + 'reconquests', + 'reconsecrate', + 'reconsecrated', + 'reconsecrates', + 'reconsecrating', + 'reconsecration', + 'reconsecrations', + 'reconsider', + 'reconsideration', + 'reconsiderations', + 'reconsidered', + 'reconsidering', + 'reconsiders', + 'reconsolidate', + 'reconsolidated', + 'reconsolidates', + 'reconsolidating', + 'reconstitute', + 'reconstituted', + 'reconstitutes', + 'reconstituting', + 'reconstitution', + 'reconstitutions', + 'reconstruct', + 'reconstructed', + 'reconstructible', + 'reconstructing', + 'reconstruction', + 'reconstructionism', + 'reconstructionisms', + 'reconstructionist', + 'reconstructionists', + 'reconstructions', + 'reconstructive', + 'reconstructor', + 'reconstructors', + 'reconstructs', + 'recontacted', + 'recontacting', + 'recontacts', + 'recontaminate', + 'recontaminated', + 'recontaminates', + 'recontaminating', + 'recontamination', + 'recontaminations', + 'recontextualize', + 'recontextualized', + 'recontextualizes', + 'recontextualizing', + 'recontoured', + 'recontouring', + 'recontours', + 'reconvened', + 'reconvenes', + 'reconvening', + 'reconversion', + 'reconversions', + 'reconverted', + 'reconverting', + 'reconverts', + 'reconveyance', + 'reconveyances', + 'reconveyed', + 'reconveying', + 'reconvicted', + 'reconvicting', + 'reconviction', + 'reconvictions', + 'reconvicts', + 'reconvince', + 'reconvinced', + 'reconvinces', + 'reconvincing', + 'recordable', + 'recordation', + 'recordations', + 'recordings', + 'recordists', + 'recounters', + 'recounting', + 'recoupable', + 'recoupling', + 'recoupment', + 'recoupments', + 'recoverabilities', + 'recoverability', + 'recoverable', + 'recoverers', + 'recoveries', + 'recovering', + 'recreating', + 'recreation', + 'recreational', + 'recreationist', + 'recreationists', + 'recreations', + 'recreative', + 'recriminate', + 'recriminated', + 'recriminates', + 'recriminating', + 'recrimination', + 'recriminations', + 'recriminative', + 'recriminatory', + 'recrossing', + 'recrowning', + 'recrudesce', + 'recrudesced', + 'recrudescence', + 'recrudescences', + 'recrudescent', + 'recrudesces', + 'recrudescing', + 'recruiters', + 'recruiting', + 'recruitment', + 'recruitments', + 'recrystallization', + 'recrystallizations', + 'recrystallize', + 'recrystallized', + 'recrystallizes', + 'recrystallizing', + 'rectangles', + 'rectangular', + 'rectangularities', + 'rectangularity', + 'rectangularly', + 'rectifiabilities', + 'rectifiability', + 'rectifiable', + 'rectification', + 'rectifications', + 'rectifiers', + 'rectifying', + 'rectilinear', + 'rectilinearly', + 'rectitudes', + 'rectitudinous', + 'rectorates', + 'rectorship', + 'rectorships', + 'recultivate', + 'recultivated', + 'recultivates', + 'recultivating', + 'recumbencies', + 'recumbency', + 'recuperate', + 'recuperated', + 'recuperates', + 'recuperating', + 'recuperation', + 'recuperations', + 'recuperative', + 'recurrence', + 'recurrences', + 'recurrently', + 'recursions', + 'recursively', + 'recursiveness', + 'recursivenesses', + 'recusancies', + 'recyclable', + 'recyclables', + 'redactional', + 'redactions', + 'redamaging', + 'redarguing', + 'redbaiting', + 'redbreasts', + 'reddishness', + 'reddishnesses', + 'redeciding', + 'redecorate', + 'redecorated', + 'redecorates', + 'redecorating', + 'redecoration', + 'redecorations', + 'redecorator', + 'redecorators', + 'rededicate', + 'rededicated', + 'rededicates', + 'rededicating', + 'rededication', + 'rededications', + 'redeemable', + 'redefeated', + 'redefeating', + 'redefected', + 'redefecting', + 'redefining', + 'redefinition', + 'redefinitions', + 'redelivered', + 'redeliveries', + 'redelivering', + 'redelivers', + 'redelivery', + 'redemanded', + 'redemanding', + 'redemption', + 'redemptioner', + 'redemptioners', + 'redemptions', + 'redemptive', + 'redemptory', + 'redeployed', + 'redeploying', + 'redeployment', + 'redeployments', + 'redeposited', + 'redepositing', + 'redeposits', + 'redescribe', + 'redescribed', + 'redescribes', + 'redescribing', + 'redescription', + 'redescriptions', + 'redesigned', + 'redesigning', + 'redetermination', + 'redeterminations', + 'redetermine', + 'redetermined', + 'redetermines', + 'redetermining', + 'redeveloped', + 'redeveloper', + 'redevelopers', + 'redeveloping', + 'redevelopment', + 'redevelopments', + 'redevelops', + 'redialling', + 'redigested', + 'redigesting', + 'redigestion', + 'redigestions', + 'redingotes', + 'redintegrate', + 'redintegrated', + 'redintegrates', + 'redintegrating', + 'redintegration', + 'redintegrations', + 'redintegrative', + 'redirected', + 'redirecting', + 'redirection', + 'redirections', + 'rediscount', + 'rediscountable', + 'rediscounted', + 'rediscounting', + 'rediscounts', + 'rediscover', + 'rediscovered', + 'rediscoveries', + 'rediscovering', + 'rediscovers', + 'rediscovery', + 'rediscussed', + 'rediscusses', + 'rediscussing', + 'redisplayed', + 'redisplaying', + 'redisplays', + 'redisposed', + 'redisposes', + 'redisposing', + 'redisposition', + 'redispositions', + 'redissolve', + 'redissolved', + 'redissolves', + 'redissolving', + 'redistillation', + 'redistillations', + 'redistilled', + 'redistilling', + 'redistills', + 'redistribute', + 'redistributed', + 'redistributes', + 'redistributing', + 'redistribution', + 'redistributional', + 'redistributionist', + 'redistributionists', + 'redistributions', + 'redistributive', + 'redistrict', + 'redistricted', + 'redistricting', + 'redistricts', + 'redividing', + 'redivision', + 'redivisions', + 'redolences', + 'redolently', + 'redoubling', + 'redoubtable', + 'redoubtably', + 'redounding', + 'redrafting', + 'redreaming', + 'redressers', + 'redressing', + 'redrilling', + 'redshifted', + 'redshirted', + 'redshirting', + 'reducibilities', + 'reducibility', + 'reductants', + 'reductases', + 'reductional', + 'reductionism', + 'reductionisms', + 'reductionist', + 'reductionistic', + 'reductionists', + 'reductions', + 'reductively', + 'reductiveness', + 'reductivenesses', + 'redundancies', + 'redundancy', + 'redundantly', + 'reduplicate', + 'reduplicated', + 'reduplicates', + 'reduplicating', + 'reduplication', + 'reduplications', + 'reduplicative', + 'reduplicatively', + 'reedifying', + 'reedinesses', + 'reeditions', + 'reeducated', + 'reeducates', + 'reeducating', + 'reeducation', + 'reeducations', + 'reeducative', + 'reejecting', + 'reelecting', + 'reelection', + 'reelections', + 'reeligibilities', + 'reeligibility', + 'reeligible', + 'reembarked', + 'reembarking', + 'reembodied', + 'reembodies', + 'reembodying', + 'reembroider', + 'reembroidered', + 'reembroidering', + 'reembroiders', + 'reemergence', + 'reemergences', + 'reemerging', + 'reemission', + 'reemissions', + 'reemitting', + 'reemphases', + 'reemphasis', + 'reemphasize', + 'reemphasized', + 'reemphasizes', + 'reemphasizing', + 'reemployed', + 'reemploying', + 'reemployment', + 'reemployments', + 'reenacting', + 'reenactment', + 'reenactments', + 'reencounter', + 'reencountered', + 'reencountering', + 'reencounters', + 'reendowing', + 'reenergize', + 'reenergized', + 'reenergizes', + 'reenergizing', + 'reenforced', + 'reenforces', + 'reenforcing', + 'reengagement', + 'reengagements', + 'reengaging', + 'reengineer', + 'reengineered', + 'reengineering', + 'reengineers', + 'reengraved', + 'reengraves', + 'reengraving', + 'reenjoying', + 'reenlisted', + 'reenlisting', + 'reenlistment', + 'reenlistments', + 'reenrolled', + 'reenrolling', + 'reentering', + 'reenthrone', + 'reenthroned', + 'reenthrones', + 'reenthroning', + 'reentrance', + 'reentrances', + 'reentrants', + 'reequipment', + 'reequipments', + 'reequipped', + 'reequipping', + 'reerecting', + 'reescalate', + 'reescalated', + 'reescalates', + 'reescalating', + 'reescalation', + 'reescalations', + 'reestablish', + 'reestablished', + 'reestablishes', + 'reestablishing', + 'reestablishment', + 'reestablishments', + 'reestimate', + 'reestimated', + 'reestimates', + 'reestimating', + 'reevaluate', + 'reevaluated', + 'reevaluates', + 'reevaluating', + 'reevaluation', + 'reevaluations', + 'reexamination', + 'reexaminations', + 'reexamined', + 'reexamines', + 'reexamining', + 'reexpelled', + 'reexpelling', + 'reexperience', + 'reexperienced', + 'reexperiences', + 'reexperiencing', + 'reexplored', + 'reexplores', + 'reexploring', + 'reexportation', + 'reexportations', + 'reexported', + 'reexporting', + 'reexposing', + 'reexposure', + 'reexposures', + 'reexpressed', + 'reexpresses', + 'reexpressing', + 'refashioned', + 'refashioning', + 'refashions', + 'refastened', + 'refastening', + 'refections', + 'refectories', + 'refereeing', + 'referenced', + 'references', + 'referencing', + 'referendum', + 'referendums', + 'referential', + 'referentialities', + 'referentiality', + 'referentially', + 'refighting', + 'refiguring', + 'refillable', + 'refiltered', + 'refiltering', + 'refinanced', + 'refinances', + 'refinancing', + 'refinement', + 'refinements', + 'refineries', + 'refinished', + 'refinisher', + 'refinishers', + 'refinishes', + 'refinishing', + 'reflationary', + 'reflations', + 'reflectance', + 'reflectances', + 'reflecting', + 'reflection', + 'reflectional', + 'reflections', + 'reflective', + 'reflectively', + 'reflectiveness', + 'reflectivenesses', + 'reflectivities', + 'reflectivity', + 'reflectometer', + 'reflectometers', + 'reflectometries', + 'reflectometry', + 'reflectorize', + 'reflectorized', + 'reflectorizes', + 'reflectorizing', + 'reflectors', + 'reflexions', + 'reflexively', + 'reflexiveness', + 'reflexivenesses', + 'reflexives', + 'reflexivities', + 'reflexivity', + 'reflexologies', + 'reflexology', + 'refloating', + 'reflooding', + 'reflowered', + 'reflowering', + 'refluences', + 'refocusing', + 'refocussed', + 'refocusses', + 'refocussing', + 'reforestation', + 'reforestations', + 'reforested', + 'reforesting', + 'reformabilities', + 'reformability', + 'reformable', + 'reformates', + 'reformation', + 'reformational', + 'reformations', + 'reformative', + 'reformatories', + 'reformatory', + 'reformatted', + 'reformatting', + 'reformisms', + 'reformists', + 'reformulate', + 'reformulated', + 'reformulates', + 'reformulating', + 'reformulation', + 'reformulations', + 'refortification', + 'refortifications', + 'refortified', + 'refortifies', + 'refortifying', + 'refoundation', + 'refoundations', + 'refounding', + 'refractile', + 'refracting', + 'refraction', + 'refractions', + 'refractive', + 'refractively', + 'refractiveness', + 'refractivenesses', + 'refractivities', + 'refractivity', + 'refractometer', + 'refractometers', + 'refractometric', + 'refractometries', + 'refractometry', + 'refractories', + 'refractorily', + 'refractoriness', + 'refractorinesses', + 'refractors', + 'refractory', + 'refraining', + 'refrainment', + 'refrainments', + 'refrangibilities', + 'refrangibility', + 'refrangible', + 'refrangibleness', + 'refrangiblenesses', + 'refreezing', + 'refreshened', + 'refreshening', + 'refreshens', + 'refreshers', + 'refreshing', + 'refreshingly', + 'refreshment', + 'refreshments', + 'refrigerant', + 'refrigerants', + 'refrigerate', + 'refrigerated', + 'refrigerates', + 'refrigerating', + 'refrigeration', + 'refrigerations', + 'refrigerator', + 'refrigerators', + 'refronting', + 'refuelling', + 'refugeeism', + 'refugeeisms', + 'refulgence', + 'refulgences', + 'refundabilities', + 'refundability', + 'refundable', + 'refurbished', + 'refurbisher', + 'refurbishers', + 'refurbishes', + 'refurbishing', + 'refurbishment', + 'refurbishments', + 'refurnished', + 'refurnishes', + 'refurnishing', + 'refuseniks', + 'refutation', + 'refutations', + 'regalities', + 'regardfully', + 'regardfulness', + 'regardfulnesses', + 'regardless', + 'regardlessly', + 'regardlessness', + 'regardlessnesses', + 'regathered', + 'regathering', + 'regelating', + 'regenerable', + 'regeneracies', + 'regeneracy', + 'regenerate', + 'regenerated', + 'regenerately', + 'regenerateness', + 'regeneratenesses', + 'regenerates', + 'regenerating', + 'regeneration', + 'regenerations', + 'regenerative', + 'regenerator', + 'regenerators', + 'regimental', + 'regimentals', + 'regimentation', + 'regimentations', + 'regimented', + 'regimenting', + 'regionalism', + 'regionalisms', + 'regionalist', + 'regionalistic', + 'regionalists', + 'regionalization', + 'regionalizations', + 'regionalize', + 'regionalized', + 'regionalizes', + 'regionalizing', + 'regionally', + 'regisseurs', + 'registerable', + 'registered', + 'registering', + 'registrable', + 'registrant', + 'registrants', + 'registrars', + 'registration', + 'registrations', + 'registries', + 'reglossing', + 'regnancies', + 'regrafting', + 'regranting', + 'regreening', + 'regreeting', + 'regressing', + 'regression', + 'regressions', + 'regressive', + 'regressively', + 'regressiveness', + 'regressivenesses', + 'regressivities', + 'regressivity', + 'regressors', + 'regretfully', + 'regretfulness', + 'regretfulnesses', + 'regrettable', + 'regrettably', + 'regretters', + 'regretting', + 'regrinding', + 'regrooming', + 'regrooving', + 'regrouping', + 'regularities', + 'regularity', + 'regularization', + 'regularizations', + 'regularize', + 'regularized', + 'regularizes', + 'regularizing', + 'regulating', + 'regulation', + 'regulations', + 'regulative', + 'regulators', + 'regulatory', + 'regurgitate', + 'regurgitated', + 'regurgitates', + 'regurgitating', + 'regurgitation', + 'regurgitations', + 'rehabilitant', + 'rehabilitants', + 'rehabilitate', + 'rehabilitated', + 'rehabilitates', + 'rehabilitating', + 'rehabilitation', + 'rehabilitations', + 'rehabilitative', + 'rehabilitator', + 'rehabilitators', + 'rehammered', + 'rehammering', + 'rehandling', + 'rehardened', + 'rehardening', + 'rehearings', + 'rehearsals', + 'rehearsers', + 'rehearsing', + 'rehospitalization', + 'rehospitalizations', + 'rehospitalize', + 'rehospitalized', + 'rehospitalizes', + 'rehospitalizing', + 'rehumanize', + 'rehumanized', + 'rehumanizes', + 'rehumanizing', + 'rehydratable', + 'rehydrated', + 'rehydrates', + 'rehydrating', + 'rehydration', + 'rehydrations', + 'rehypnotize', + 'rehypnotized', + 'rehypnotizes', + 'rehypnotizing', + 'reichsmark', + 'reichsmarks', + 'reidentified', + 'reidentifies', + 'reidentify', + 'reidentifying', + 'reification', + 'reifications', + 'reigniting', + 'reignition', + 'reignitions', + 'reimagined', + 'reimagines', + 'reimagining', + 'reimbursable', + 'reimbursed', + 'reimbursement', + 'reimbursements', + 'reimburses', + 'reimbursing', + 'reimmersed', + 'reimmerses', + 'reimmersing', + 'reimplantation', + 'reimplantations', + 'reimplanted', + 'reimplanting', + 'reimplants', + 'reimportation', + 'reimportations', + 'reimported', + 'reimporting', + 'reimposing', + 'reimposition', + 'reimpositions', + 'reimpression', + 'reimpressions', + 'reincarnate', + 'reincarnated', + 'reincarnates', + 'reincarnating', + 'reincarnation', + 'reincarnations', + 'reinciting', + 'reincorporate', + 'reincorporated', + 'reincorporates', + 'reincorporating', + 'reincorporation', + 'reincorporations', + 'reincurred', + 'reincurring', + 'reindexing', + 'reindicted', + 'reindicting', + 'reindictment', + 'reindictments', + 'reinducing', + 'reinducted', + 'reinducting', + 'reindustrialization', + 'reindustrializations', + 'reindustrialize', + 'reindustrialized', + 'reindustrializes', + 'reindustrializing', + 'reinfected', + 'reinfecting', + 'reinfection', + 'reinfections', + 'reinfestation', + 'reinfestations', + 'reinflated', + 'reinflates', + 'reinflating', + 'reinflation', + 'reinflations', + 'reinforceable', + 'reinforced', + 'reinforcement', + 'reinforcements', + 'reinforcer', + 'reinforcers', + 'reinforces', + 'reinforcing', + 'reinformed', + 'reinforming', + 'reinfusing', + 'reinhabited', + 'reinhabiting', + 'reinhabits', + 'reinitiate', + 'reinitiated', + 'reinitiates', + 'reinitiating', + 'reinjected', + 'reinjecting', + 'reinjection', + 'reinjections', + 'reinjuries', + 'reinjuring', + 'reinnervate', + 'reinnervated', + 'reinnervates', + 'reinnervating', + 'reinnervation', + 'reinnervations', + 'reinoculate', + 'reinoculated', + 'reinoculates', + 'reinoculating', + 'reinoculation', + 'reinoculations', + 'reinserted', + 'reinserting', + 'reinsertion', + 'reinsertions', + 'reinspected', + 'reinspecting', + 'reinspection', + 'reinspections', + 'reinspects', + 'reinspired', + 'reinspires', + 'reinspiring', + 'reinstallation', + 'reinstallations', + 'reinstalled', + 'reinstalling', + 'reinstalls', + 'reinstated', + 'reinstatement', + 'reinstatements', + 'reinstates', + 'reinstating', + 'reinstitute', + 'reinstituted', + 'reinstitutes', + 'reinstituting', + 'reinstitutionalization', + 'reinstitutionalizations', + 'reinstitutionalize', + 'reinstitutionalized', + 'reinstitutionalizes', + 'reinstitutionalizing', + 'reinsurance', + 'reinsurances', + 'reinsurers', + 'reinsuring', + 'reintegrate', + 'reintegrated', + 'reintegrates', + 'reintegrating', + 'reintegration', + 'reintegrations', + 'reintegrative', + 'reinterpret', + 'reinterpretation', + 'reinterpretations', + 'reinterpreted', + 'reinterpreting', + 'reinterprets', + 'reinterred', + 'reinterring', + 'reinterview', + 'reinterviewed', + 'reinterviewing', + 'reinterviews', + 'reintroduce', + 'reintroduced', + 'reintroduces', + 'reintroducing', + 'reintroduction', + 'reintroductions', + 'reinvading', + 'reinvasion', + 'reinvasions', + 'reinvented', + 'reinventing', + 'reinvention', + 'reinventions', + 'reinvested', + 'reinvestigate', + 'reinvestigated', + 'reinvestigates', + 'reinvestigating', + 'reinvestigation', + 'reinvestigations', + 'reinvesting', + 'reinvestment', + 'reinvestments', + 'reinvigorate', + 'reinvigorated', + 'reinvigorates', + 'reinvigorating', + 'reinvigoration', + 'reinvigorations', + 'reinvigorator', + 'reinvigorators', + 'reinviting', + 'reinvoking', + 'reiterated', + 'reiterates', + 'reiterating', + 'reiteration', + 'reiterations', + 'reiterative', + 'reiteratively', + 'rejacketed', + 'rejacketing', + 'rejectingly', + 'rejections', + 'rejiggered', + 'rejiggering', + 'rejoicingly', + 'rejoicings', + 'rejoinders', + 'rejuggling', + 'rejuvenate', + 'rejuvenated', + 'rejuvenates', + 'rejuvenating', + 'rejuvenation', + 'rejuvenations', + 'rejuvenator', + 'rejuvenators', + 'rejuvenescence', + 'rejuvenescences', + 'rejuvenescent', + 'rekeyboard', + 'rekeyboarded', + 'rekeyboarding', + 'rekeyboards', + 'rekindling', + 'reknitting', + 'relabeling', + 'relabelled', + 'relabelling', + 'relacquered', + 'relacquering', + 'relacquers', + 'relandscape', + 'relandscaped', + 'relandscapes', + 'relandscaping', + 'relatedness', + 'relatednesses', + 'relational', + 'relationally', + 'relationship', + 'relationships', + 'relatively', + 'relativism', + 'relativisms', + 'relativist', + 'relativistic', + 'relativistically', + 'relativists', + 'relativities', + 'relativity', + 'relativize', + 'relativized', + 'relativizes', + 'relativizing', + 'relaunched', + 'relaunches', + 'relaunching', + 'relaxation', + 'relaxations', + 'relaxedness', + 'relaxednesses', + 'relearning', + 'releasable', + 'relegating', + 'relegation', + 'relegations', + 'relentless', + 'relentlessly', + 'relentlessness', + 'relentlessnesses', + 'relettered', + 'relettering', + 'relevances', + 'relevancies', + 'relevantly', + 'reliabilities', + 'reliability', + 'reliableness', + 'reliablenesses', + 'relicensed', + 'relicenses', + 'relicensing', + 'relicensure', + 'relicensures', + 'relictions', + 'relievable', + 'relievedly', + 'relighting', + 'religionist', + 'religionists', + 'religionless', + 'religiosities', + 'religiosity', + 'religiously', + 'religiousness', + 'religiousnesses', + 'relinquish', + 'relinquished', + 'relinquishes', + 'relinquishing', + 'relinquishment', + 'relinquishments', + 'reliquaries', + 'reliquefied', + 'reliquefies', + 'reliquefying', + 'relishable', + 'relocatable', + 'relocatees', + 'relocating', + 'relocation', + 'relocations', + 'relubricate', + 'relubricated', + 'relubricates', + 'relubricating', + 'relubrication', + 'relubrications', + 'reluctance', + 'reluctances', + 'reluctancies', + 'reluctancy', + 'reluctantly', + 'reluctated', + 'reluctates', + 'reluctating', + 'reluctation', + 'reluctations', + 'relumining', + 'remaindered', + 'remaindering', + 'remainders', + 'remanences', + 'remanufacture', + 'remanufactured', + 'remanufacturer', + 'remanufacturers', + 'remanufactures', + 'remanufacturing', + 'remarkable', + 'remarkableness', + 'remarkablenesses', + 'remarkably', + 'remarketed', + 'remarketing', + 'remarriage', + 'remarriages', + 'remarrying', + 'remastered', + 'remastering', + 'rematching', + 'rematerialize', + 'rematerialized', + 'rematerializes', + 'rematerializing', + 'remeasured', + 'remeasurement', + 'remeasurements', + 'remeasures', + 'remeasuring', + 'remediabilities', + 'remediability', + 'remediable', + 'remedially', + 'remediated', + 'remediates', + 'remediating', + 'remediation', + 'remediations', + 'remediless', + 'rememberabilities', + 'rememberability', + 'rememberable', + 'remembered', + 'rememberer', + 'rememberers', + 'remembering', + 'remembrance', + 'remembrancer', + 'remembrancers', + 'remembrances', + 'remigration', + 'remigrations', + 'remilitarization', + 'remilitarizations', + 'remilitarize', + 'remilitarized', + 'remilitarizes', + 'remilitarizing', + 'reminisced', + 'reminiscence', + 'reminiscences', + 'reminiscent', + 'reminiscential', + 'reminiscently', + 'reminiscer', + 'reminiscers', + 'reminisces', + 'reminiscing', + 'remissible', + 'remissibly', + 'remissions', + 'remissness', + 'remissnesses', + 'remitments', + 'remittable', + 'remittance', + 'remittances', + 'remobilization', + 'remobilizations', + 'remobilize', + 'remobilized', + 'remobilizes', + 'remobilizing', + 'remodeling', + 'remodelled', + 'remodelling', + 'remodified', + 'remodifies', + 'remodifying', + 'remoistened', + 'remoistening', + 'remoistens', + 'remonetization', + 'remonetizations', + 'remonetize', + 'remonetized', + 'remonetizes', + 'remonetizing', + 'remonstrance', + 'remonstrances', + 'remonstrant', + 'remonstrantly', + 'remonstrants', + 'remonstrate', + 'remonstrated', + 'remonstrates', + 'remonstrating', + 'remonstration', + 'remonstrations', + 'remonstrative', + 'remonstratively', + 'remonstrator', + 'remonstrators', + 'remorseful', + 'remorsefully', + 'remorsefulness', + 'remorsefulnesses', + 'remorseless', + 'remorselessly', + 'remorselessness', + 'remorselessnesses', + 'remortgage', + 'remortgaged', + 'remortgages', + 'remortgaging', + 'remoteness', + 'remotenesses', + 'remotivate', + 'remotivated', + 'remotivates', + 'remotivating', + 'remotivation', + 'remotivations', + 'remounting', + 'removabilities', + 'removability', + 'removableness', + 'removablenesses', + 'removeable', + 'remunerate', + 'remunerated', + 'remunerates', + 'remunerating', + 'remuneration', + 'remunerations', + 'remunerative', + 'remuneratively', + 'remunerativeness', + 'remunerativenesses', + 'remunerator', + 'remunerators', + 'remuneratory', + 'remythologize', + 'remythologized', + 'remythologizes', + 'remythologizing', + 'renaissance', + 'renaissances', + 'renascence', + 'renascences', + 'renationalization', + 'renationalizations', + 'renationalize', + 'renationalized', + 'renationalizes', + 'renationalizing', + 'renaturation', + 'renaturations', + 'renaturing', + 'rencontres', + 'rencounter', + 'rencountered', + 'rencountering', + 'rencounters', + 'renderable', + 'rendezvous', + 'rendezvoused', + 'rendezvouses', + 'rendezvousing', + 'renditions', + 'renegading', + 'renegadoes', + 'renegotiable', + 'renegotiate', + 'renegotiated', + 'renegotiates', + 'renegotiating', + 'renegotiation', + 'renegotiations', + 'renewabilities', + 'renewability', + 'renitencies', + 'renographic', + 'renographies', + 'renography', + 'renominate', + 'renominated', + 'renominates', + 'renominating', + 'renomination', + 'renominations', + 'renormalization', + 'renormalizations', + 'renormalize', + 'renormalized', + 'renormalizes', + 'renormalizing', + 'renotified', + 'renotifies', + 'renotifying', + 'renouncement', + 'renouncements', + 'renouncers', + 'renouncing', + 'renovascular', + 'renovating', + 'renovation', + 'renovations', + 'renovative', + 'renovators', + 'rentabilities', + 'rentability', + 'renumbered', + 'renumbering', + 'renunciate', + 'renunciates', + 'renunciation', + 'renunciations', + 'renunciative', + 'renunciatory', + 'reobjected', + 'reobjecting', + 'reobserved', + 'reobserves', + 'reobserving', + 'reobtained', + 'reobtaining', + 'reoccupation', + 'reoccupations', + 'reoccupied', + 'reoccupies', + 'reoccupying', + 'reoccurred', + 'reoccurrence', + 'reoccurrences', + 'reoccurring', + 'reoffering', + 'reopenings', + 'reoperated', + 'reoperates', + 'reoperating', + 'reoperation', + 'reoperations', + 'reopposing', + 'reorchestrate', + 'reorchestrated', + 'reorchestrates', + 'reorchestrating', + 'reorchestration', + 'reorchestrations', + 'reordained', + 'reordaining', + 'reordering', + 'reorganization', + 'reorganizational', + 'reorganizations', + 'reorganize', + 'reorganized', + 'reorganizer', + 'reorganizers', + 'reorganizes', + 'reorganizing', + 'reorientate', + 'reorientated', + 'reorientates', + 'reorientating', + 'reorientation', + 'reorientations', + 'reoriented', + 'reorienting', + 'reoutfitted', + 'reoutfitting', + 'reoviruses', + 'reoxidation', + 'reoxidations', + 'reoxidized', + 'reoxidizes', + 'reoxidizing', + 'repacified', + 'repacifies', + 'repacifying', + 'repackaged', + 'repackager', + 'repackagers', + 'repackages', + 'repackaging', + 'repainting', + 'repairabilities', + 'repairability', + 'repairable', + 'repaneling', + 'repanelled', + 'repanelling', + 'repapering', + 'reparation', + 'reparations', + 'reparative', + 'repartition', + 'repartitions', + 'repassages', + 'repatching', + 'repatriate', + 'repatriated', + 'repatriates', + 'repatriating', + 'repatriation', + 'repatriations', + 'repatterned', + 'repatterning', + 'repatterns', + 'repayments', + 'repealable', + 'repeatabilities', + 'repeatability', + 'repeatable', + 'repeatedly', + 'repechages', + 'repellants', + 'repellencies', + 'repellency', + 'repellently', + 'repellents', + 'repentance', + 'repentances', + 'repentantly', + 'repeopling', + 'repercussion', + 'repercussions', + 'repercussive', + 'repertoire', + 'repertoires', + 'repertories', + 'repetition', + 'repetitional', + 'repetitions', + 'repetitious', + 'repetitiously', + 'repetitiousness', + 'repetitiousnesses', + 'repetitive', + 'repetitively', + 'repetitiveness', + 'repetitivenesses', + 'rephotograph', + 'rephotographed', + 'rephotographing', + 'rephotographs', + 'rephrasing', + 'replaceable', + 'replacement', + 'replacements', + 'replanning', + 'replantation', + 'replantations', + 'replanting', + 'replastered', + 'replastering', + 'replasters', + 'repleaders', + 'repleading', + 'repledging', + 'replenishable', + 'replenished', + 'replenisher', + 'replenishers', + 'replenishes', + 'replenishing', + 'replenishment', + 'replenishments', + 'repleteness', + 'repletenesses', + 'repletions', + 'repleviable', + 'replevined', + 'replevining', + 'replevying', + 'replicabilities', + 'replicability', + 'replicable', + 'replicases', + 'replicated', + 'replicates', + 'replicating', + 'replication', + 'replications', + 'replicative', + 'replotting', + 'replumbing', + 'replunging', + 'repolarization', + 'repolarizations', + 'repolarize', + 'repolarized', + 'repolarizes', + 'repolarizing', + 'repolished', + 'repolishes', + 'repolishing', + 'repopularize', + 'repopularized', + 'repopularizes', + 'repopularizing', + 'repopulate', + 'repopulated', + 'repopulates', + 'repopulating', + 'repopulation', + 'repopulations', + 'reportable', + 'reportages', + 'reportedly', + 'reportorial', + 'reportorially', + 'reposefully', + 'reposefulness', + 'reposefulnesses', + 'repositing', + 'reposition', + 'repositioned', + 'repositioning', + 'repositions', + 'repositories', + 'repository', + 'repossessed', + 'repossesses', + 'repossessing', + 'repossession', + 'repossessions', + 'repossessor', + 'repossessors', + 'repowering', + 'reprehended', + 'reprehending', + 'reprehends', + 'reprehensibilities', + 'reprehensibility', + 'reprehensible', + 'reprehensibleness', + 'reprehensiblenesses', + 'reprehensibly', + 'reprehension', + 'reprehensions', + 'reprehensive', + 'representable', + 'representation', + 'representational', + 'representationalism', + 'representationalisms', + 'representationalist', + 'representationalists', + 'representationally', + 'representations', + 'representative', + 'representatively', + 'representativeness', + 'representativenesses', + 'representatives', + 'representativities', + 'representativity', + 'represented', + 'representer', + 'representers', + 'representing', + 'represents', + 'repressibilities', + 'repressibility', + 'repressible', + 'repressing', + 'repression', + 'repressionist', + 'repressions', + 'repressive', + 'repressively', + 'repressiveness', + 'repressivenesses', + 'repressors', + 'repressurize', + 'repressurized', + 'repressurizes', + 'repressurizing', + 'reprievals', + 'reprieving', + 'reprimanded', + 'reprimanding', + 'reprimands', + 'reprinters', + 'reprinting', + 'repristinate', + 'repristinated', + 'repristinates', + 'repristinating', + 'repristination', + 'repristinations', + 'reprivatization', + 'reprivatizations', + 'reprivatize', + 'reprivatized', + 'reprivatizes', + 'reprivatizing', + 'reproachable', + 'reproached', + 'reproacher', + 'reproachers', + 'reproaches', + 'reproachful', + 'reproachfully', + 'reproachfulness', + 'reproachfulnesses', + 'reproaching', + 'reproachingly', + 'reprobance', + 'reprobances', + 'reprobated', + 'reprobates', + 'reprobating', + 'reprobation', + 'reprobations', + 'reprobative', + 'reprobatory', + 'reprocessed', + 'reprocesses', + 'reprocessing', + 'reproduced', + 'reproducer', + 'reproducers', + 'reproduces', + 'reproducibilities', + 'reproducibility', + 'reproducible', + 'reproducibles', + 'reproducibly', + 'reproducing', + 'reproduction', + 'reproductions', + 'reproductive', + 'reproductively', + 'reproductives', + 'reprogramed', + 'reprograming', + 'reprogrammable', + 'reprogrammed', + 'reprogramming', + 'reprograms', + 'reprographer', + 'reprographers', + 'reprographic', + 'reprographics', + 'reprographies', + 'reprography', + 'reprovingly', + 'reprovision', + 'reprovisioned', + 'reprovisioning', + 'reprovisions', + 'reptilians', + 'republican', + 'republicanism', + 'republicanisms', + 'republicanize', + 'republicanized', + 'republicanizes', + 'republicanizing', + 'republicans', + 'republication', + 'republications', + 'republished', + 'republisher', + 'republishers', + 'republishes', + 'republishing', + 'repudiated', + 'repudiates', + 'repudiating', + 'repudiation', + 'repudiationist', + 'repudiationists', + 'repudiations', + 'repudiator', + 'repudiators', + 'repugnance', + 'repugnances', + 'repugnancies', + 'repugnancy', + 'repugnantly', + 'repulsions', + 'repulsively', + 'repulsiveness', + 'repulsivenesses', + 'repunctuation', + 'repunctuations', + 'repurchase', + 'repurchased', + 'repurchases', + 'repurchasing', + 'repurified', + 'repurifies', + 'repurifying', + 'repursuing', + 'reputabilities', + 'reputability', + 'reputation', + 'reputational', + 'reputations', + 'requalification', + 'requalifications', + 'requalified', + 'requalifies', + 'requalifying', + 'requesters', + 'requesting', + 'requestors', + 'requiescat', + 'requiescats', + 'requirement', + 'requirements', + 'requisiteness', + 'requisitenesses', + 'requisites', + 'requisition', + 'requisitioned', + 'requisitioning', + 'requisitions', + 'reradiated', + 'reradiates', + 'reradiating', + 'reradiation', + 'reradiations', + 'rereadings', + 'rerecorded', + 'rerecording', + 'reregister', + 'reregistered', + 'reregistering', + 'reregisters', + 'reregistration', + 'reregistrations', + 'reregulate', + 'reregulated', + 'reregulates', + 'reregulating', + 'reregulation', + 'reregulations', + 'rereleased', + 'rereleases', + 'rereleasing', + 'rereminded', + 'rereminding', + 'rerepeated', + 'rerepeating', + 'rereviewed', + 'rereviewing', + 'resaddling', + 'resaluting', + 'resampling', + 'reschedule', + 'rescheduled', + 'reschedules', + 'rescheduling', + 'reschooled', + 'reschooling', + 'rescinders', + 'rescinding', + 'rescindment', + 'rescindments', + 'rescission', + 'rescissions', + 'rescissory', + 'rescreened', + 'rescreening', + 'resculpted', + 'resculpting', + 'resealable', + 'researchable', + 'researched', + 'researcher', + 'researchers', + 'researches', + 'researching', + 'researchist', + 'researchists', + 'reseasoned', + 'reseasoning', + 'resectabilities', + 'resectability', + 'resectable', + 'resections', + 'resecuring', + 'resegregate', + 'resegregated', + 'resegregates', + 'resegregating', + 'resegregation', + 'resegregations', + 'resemblance', + 'resemblances', + 'resemblant', + 'resembling', + 'resensitize', + 'resensitized', + 'resensitizes', + 'resensitizing', + 'resentence', + 'resentenced', + 'resentences', + 'resentencing', + 'resentfully', + 'resentfulness', + 'resentfulnesses', + 'resentment', + 'resentments', + 'reserpines', + 'reservable', + 'reservation', + 'reservationist', + 'reservationists', + 'reservations', + 'reservedly', + 'reservedness', + 'reservednesses', + 'reserviced', + 'reservices', + 'reservicing', + 'reservists', + 'reservoirs', + 'resettable', + 'resettlement', + 'resettlements', + 'resettling', + 'reshingled', + 'reshingles', + 'reshingling', + 'reshipping', + 'reshooting', + 'reshuffled', + 'reshuffles', + 'reshuffling', + 'residences', + 'residencies', + 'residential', + 'residentially', + 'residually', + 'resighting', + 'resignation', + 'resignations', + 'resignedly', + 'resignedness', + 'resignednesses', + 'resilience', + 'resiliences', + 'resiliencies', + 'resiliency', + 'resiliently', + 'resilvered', + 'resilvering', + 'resinating', + 'resinified', + 'resinifies', + 'resinifying', + 'resistance', + 'resistances', + 'resistants', + 'resistibilities', + 'resistibility', + 'resistible', + 'resistively', + 'resistiveness', + 'resistivenesses', + 'resistivities', + 'resistivity', + 'resistless', + 'resistlessly', + 'resistlessness', + 'resistlessnesses', + 'resittings', + 'resketched', + 'resketches', + 'resketching', + 'resmelting', + 'resmoothed', + 'resmoothing', + 'resocialization', + 'resocializations', + 'resocialize', + 'resocialized', + 'resocializes', + 'resocializing', + 'resoldered', + 'resoldering', + 'resolidification', + 'resolidifications', + 'resolidified', + 'resolidifies', + 'resolidify', + 'resolidifying', + 'resolutely', + 'resoluteness', + 'resolutenesses', + 'resolutest', + 'resolution', + 'resolutions', + 'resolvable', + 'resolvents', + 'resonances', + 'resonantly', + 'resonating', + 'resonators', + 'resorcinol', + 'resorcinols', + 'resorption', + 'resorptions', + 'resorptive', + 'resounding', + 'resoundingly', + 'resourceful', + 'resourcefully', + 'resourcefulness', + 'resourcefulnesses', + 'respeaking', + 'respectabilities', + 'respectability', + 'respectable', + 'respectableness', + 'respectablenesses', + 'respectables', + 'respectably', + 'respecters', + 'respectful', + 'respectfully', + 'respectfulness', + 'respectfulnesses', + 'respecting', + 'respective', + 'respectively', + 'respectiveness', + 'respectivenesses', + 'respelling', + 'respellings', + 'respirable', + 'respiration', + 'respirations', + 'respirator', + 'respirators', + 'respiratory', + 'respiritualize', + 'respiritualized', + 'respiritualizes', + 'respiritualizing', + 'respirometer', + 'respirometers', + 'respirometric', + 'respirometries', + 'respirometry', + 'resplendence', + 'resplendences', + 'resplendencies', + 'resplendency', + 'resplendent', + 'resplendently', + 'resplicing', + 'resplitting', + 'respondent', + 'respondents', + 'responders', + 'responding', + 'responsibilities', + 'responsibility', + 'responsible', + 'responsibleness', + 'responsiblenesses', + 'responsibly', + 'responsions', + 'responsive', + 'responsively', + 'responsiveness', + 'responsivenesses', + 'responsories', + 'responsory', + 'respotting', + 'respraying', + 'respreading', + 'respringing', + 'resprouted', + 'resprouting', + 'ressentiment', + 'ressentiments', + 'restabilize', + 'restabilized', + 'restabilizes', + 'restabilizing', + 'restacking', + 'restaffing', + 'restamping', + 'restartable', + 'restarting', + 'restatement', + 'restatements', + 'restaurant', + 'restauranteur', + 'restauranteurs', + 'restaurants', + 'restaurateur', + 'restaurateurs', + 'restfuller', + 'restfullest', + 'restfulness', + 'restfulnesses', + 'restimulate', + 'restimulated', + 'restimulates', + 'restimulating', + 'restimulation', + 'restimulations', + 'restitched', + 'restitches', + 'restitching', + 'restituted', + 'restitutes', + 'restituting', + 'restitution', + 'restitutions', + 'restiveness', + 'restivenesses', + 'restlessly', + 'restlessness', + 'restlessnesses', + 'restocking', + 'restorable', + 'restoration', + 'restorations', + 'restorative', + 'restoratives', + 'restrainable', + 'restrained', + 'restrainedly', + 'restrainer', + 'restrainers', + 'restraining', + 'restraints', + 'restrengthen', + 'restrengthened', + 'restrengthening', + 'restrengthens', + 'restressed', + 'restresses', + 'restressing', + 'restricken', + 'restricted', + 'restrictedly', + 'restricting', + 'restriction', + 'restrictionism', + 'restrictionisms', + 'restrictionist', + 'restrictionists', + 'restrictions', + 'restrictive', + 'restrictively', + 'restrictiveness', + 'restrictivenesses', + 'restrictives', + 'restriking', + 'restringing', + 'restriving', + 'restructure', + 'restructured', + 'restructures', + 'restructuring', + 'restudying', + 'restuffing', + 'resubmission', + 'resubmissions', + 'resubmitted', + 'resubmitting', + 'resultantly', + 'resultants', + 'resultless', + 'resummoned', + 'resummoning', + 'resumption', + 'resumptions', + 'resupinate', + 'resupplied', + 'resupplies', + 'resupplying', + 'resurfaced', + 'resurfacer', + 'resurfacers', + 'resurfaces', + 'resurfacing', + 'resurgence', + 'resurgences', + 'resurrected', + 'resurrecting', + 'resurrection', + 'resurrectional', + 'resurrectionist', + 'resurrectionists', + 'resurrections', + 'resurrects', + 'resurveyed', + 'resurveying', + 'resuscitate', + 'resuscitated', + 'resuscitates', + 'resuscitating', + 'resuscitation', + 'resuscitations', + 'resuscitative', + 'resuscitator', + 'resuscitators', + 'resyntheses', + 'resynthesis', + 'resynthesize', + 'resynthesized', + 'resynthesizes', + 'resynthesizing', + 'resystematize', + 'resystematized', + 'resystematizes', + 'resystematizing', + 'retackling', + 'retailings', + 'retailored', + 'retailoring', + 'retaliated', + 'retaliates', + 'retaliating', + 'retaliation', + 'retaliations', + 'retaliative', + 'retaliatory', + 'retardants', + 'retardates', + 'retardation', + 'retardations', + 'retargeted', + 'retargeting', + 'reteaching', + 'retellings', + 'retempered', + 'retempering', + 'retentions', + 'retentively', + 'retentiveness', + 'retentivenesses', + 'retentivities', + 'retentivity', + 'retextured', + 'retextures', + 'retexturing', + 'rethinkers', + 'rethinking', + 'rethreaded', + 'rethreading', + 'reticences', + 'reticencies', + 'reticently', + 'reticulate', + 'reticulated', + 'reticulately', + 'reticulates', + 'reticulating', + 'reticulation', + 'reticulations', + 'reticulocyte', + 'reticulocytes', + 'reticuloendothelial', + 'retightened', + 'retightening', + 'retightens', + 'retinacula', + 'retinaculum', + 'retinitides', + 'retinoblastoma', + 'retinoblastomas', + 'retinoblastomata', + 'retinopathies', + 'retinopathy', + 'retinoscopies', + 'retinoscopy', + 'retinotectal', + 'retiredness', + 'retirednesses', + 'retirement', + 'retirements', + 'retiringly', + 'retiringness', + 'retiringnesses', + 'retouchers', + 'retouching', + 'retracking', + 'retractable', + 'retractile', + 'retractilities', + 'retractility', + 'retracting', + 'retraction', + 'retractions', + 'retractors', + 'retrainable', + 'retraining', + 'retransfer', + 'retransferred', + 'retransferring', + 'retransfers', + 'retransform', + 'retransformation', + 'retransformations', + 'retransformed', + 'retransforming', + 'retransforms', + 'retranslate', + 'retranslated', + 'retranslates', + 'retranslating', + 'retranslation', + 'retranslations', + 'retransmission', + 'retransmissions', + 'retransmit', + 'retransmits', + 'retransmitted', + 'retransmitting', + 'retreading', + 'retreatant', + 'retreatants', + 'retreaters', + 'retreating', + 'retrenched', + 'retrenches', + 'retrenching', + 'retrenchment', + 'retrenchments', + 'retribution', + 'retributions', + 'retributive', + 'retributively', + 'retributory', + 'retrievabilities', + 'retrievability', + 'retrievable', + 'retrievals', + 'retrievers', + 'retrieving', + 'retrimming', + 'retroacted', + 'retroacting', + 'retroaction', + 'retroactions', + 'retroactive', + 'retroactively', + 'retroactivities', + 'retroactivity', + 'retroceded', + 'retrocedes', + 'retroceding', + 'retrocession', + 'retrocessions', + 'retrodicted', + 'retrodicting', + 'retrodiction', + 'retrodictions', + 'retrodictive', + 'retrodicts', + 'retrofired', + 'retrofires', + 'retrofiring', + 'retrofitted', + 'retrofitting', + 'retroflection', + 'retroflections', + 'retroflexion', + 'retroflexions', + 'retrogradation', + 'retrogradations', + 'retrograde', + 'retrograded', + 'retrogradely', + 'retrogrades', + 'retrograding', + 'retrogress', + 'retrogressed', + 'retrogresses', + 'retrogressing', + 'retrogression', + 'retrogressions', + 'retrogressive', + 'retrogressively', + 'retropacks', + 'retroperitoneal', + 'retroperitoneally', + 'retroreflection', + 'retroreflections', + 'retroreflective', + 'retroreflector', + 'retroreflectors', + 'retrospect', + 'retrospected', + 'retrospecting', + 'retrospection', + 'retrospections', + 'retrospective', + 'retrospectively', + 'retrospectives', + 'retrospects', + 'retroversion', + 'retroversions', + 'retroviral', + 'retrovirus', + 'retroviruses', + 'returnable', + 'returnables', + 'retwisting', + 'reunification', + 'reunifications', + 'reunifying', + 'reunionist', + 'reunionistic', + 'reunionists', + 'reupholster', + 'reupholstered', + 'reupholstering', + 'reupholsters', + 'reusabilities', + 'reusability', + 'reutilization', + 'reutilizations', + 'reutilized', + 'reutilizes', + 'reutilizing', + 'reuttering', + 'revaccinate', + 'revaccinated', + 'revaccinates', + 'revaccinating', + 'revaccination', + 'revaccinations', + 'revalidate', + 'revalidated', + 'revalidates', + 'revalidating', + 'revalidation', + 'revalidations', + 'revalorization', + 'revalorizations', + 'revalorize', + 'revalorized', + 'revalorizes', + 'revalorizing', + 'revaluated', + 'revaluates', + 'revaluating', + 'revaluation', + 'revaluations', + 'revanchism', + 'revanchisms', + 'revanchist', + 'revanchists', + 'revascularization', + 'revascularizations', + 'revealable', + 'revealingly', + 'revealment', + 'revealments', + 'revegetate', + 'revegetated', + 'revegetates', + 'revegetating', + 'revegetation', + 'revegetations', + 'revelation', + 'revelations', + 'revelators', + 'revelatory', + 'revengeful', + 'revengefully', + 'revengefulness', + 'revengefulnesses', + 'reverberant', + 'reverberantly', + 'reverberate', + 'reverberated', + 'reverberates', + 'reverberating', + 'reverberation', + 'reverberations', + 'reverberative', + 'reverberatory', + 'reverenced', + 'reverencer', + 'reverencers', + 'reverences', + 'reverencing', + 'reverential', + 'reverentially', + 'reverently', + 'reverified', + 'reverifies', + 'reverifying', + 'reversibilities', + 'reversibility', + 'reversible', + 'reversibles', + 'reversibly', + 'reversional', + 'reversionary', + 'reversioner', + 'reversioners', + 'reversions', + 'revertants', + 'revertible', + 'revetments', + 'revictualed', + 'revictualing', + 'revictualled', + 'revictualling', + 'revictuals', + 'reviewable', + 'revilement', + 'revilements', + 'revisionary', + 'revisionism', + 'revisionisms', + 'revisionist', + 'revisionists', + 'revisiting', + 'revisualization', + 'revisualizations', + 'revitalise', + 'revitalised', + 'revitalises', + 'revitalising', + 'revitalization', + 'revitalizations', + 'revitalize', + 'revitalized', + 'revitalizes', + 'revitalizing', + 'revivalism', + 'revivalisms', + 'revivalist', + 'revivalistic', + 'revivalists', + 'revivification', + 'revivifications', + 'revivified', + 'revivifies', + 'revivifying', + 'reviviscence', + 'reviviscences', + 'reviviscent', + 'revocation', + 'revocations', + 'revoltingly', + 'revolution', + 'revolutionaries', + 'revolutionarily', + 'revolutionariness', + 'revolutionarinesses', + 'revolutionary', + 'revolutionise', + 'revolutionised', + 'revolutionises', + 'revolutionising', + 'revolutionist', + 'revolutionists', + 'revolutionize', + 'revolutionized', + 'revolutionizer', + 'revolutionizers', + 'revolutionizes', + 'revolutionizing', + 'revolutions', + 'revolvable', + 'revulsions', + 'rewakening', + 'rewardable', + 'rewardingly', + 'reweighing', + 'rewidening', + 'rewrapping', + 'rhabdocoele', + 'rhabdocoeles', + 'rhabdomancer', + 'rhabdomancers', + 'rhabdomancies', + 'rhabdomancy', + 'rhabdomere', + 'rhabdomeres', + 'rhabdomyosarcoma', + 'rhabdomyosarcomas', + 'rhabdomyosarcomata', + 'rhabdovirus', + 'rhabdoviruses', + 'rhadamanthine', + 'rhapsodical', + 'rhapsodically', + 'rhapsodies', + 'rhapsodist', + 'rhapsodists', + 'rhapsodize', + 'rhapsodized', + 'rhapsodizes', + 'rhapsodizing', + 'rheological', + 'rheologically', + 'rheologies', + 'rheologist', + 'rheologists', + 'rheometers', + 'rheostatic', + 'rhetorical', + 'rhetorically', + 'rhetorician', + 'rhetoricians', + 'rheumatically', + 'rheumatics', + 'rheumatism', + 'rheumatisms', + 'rheumatizes', + 'rheumatoid', + 'rheumatologies', + 'rheumatologist', + 'rheumatologists', + 'rheumatology', + 'rhinencephala', + 'rhinencephalic', + 'rhinencephalon', + 'rhinestone', + 'rhinestoned', + 'rhinestones', + 'rhinitides', + 'rhinoceros', + 'rhinoceroses', + 'rhinoplasties', + 'rhinoplasty', + 'rhinoscopies', + 'rhinoscopy', + 'rhinovirus', + 'rhinoviruses', + 'rhizoctonia', + 'rhizoctonias', + 'rhizomatous', + 'rhizoplane', + 'rhizoplanes', + 'rhizopuses', + 'rhizosphere', + 'rhizospheres', + 'rhizotomies', + 'rhodamines', + 'rhodochrosite', + 'rhodochrosites', + 'rhododendron', + 'rhododendrons', + 'rhodolites', + 'rhodomontade', + 'rhodomontades', + 'rhodonites', + 'rhodopsins', + 'rhombencephala', + 'rhombencephalon', + 'rhombohedra', + 'rhombohedral', + 'rhombohedron', + 'rhombohedrons', + 'rhomboidal', + 'rhomboidei', + 'rhomboideus', + 'rhymesters', + 'rhynchocephalian', + 'rhynchocephalians', + 'rhythmical', + 'rhythmically', + 'rhythmicities', + 'rhythmicity', + 'rhythmists', + 'rhythmization', + 'rhythmizations', + 'rhythmized', + 'rhythmizes', + 'rhythmizing', + 'rhytidomes', + 'ribaldries', + 'ribavirins', + 'ribbonfish', + 'ribbonfishes', + 'ribbonlike', + 'ribgrasses', + 'riboflavin', + 'riboflavins', + 'ribonuclease', + 'ribonucleases', + 'ribonucleoprotein', + 'ribonucleoproteins', + 'ribonucleoside', + 'ribonucleosides', + 'ribonucleotide', + 'ribonucleotides', + 'richnesses', + 'ricketiest', + 'rickettsia', + 'rickettsiae', + 'rickettsial', + 'rickettsias', + 'ricocheted', + 'ricocheting', + 'ricochetted', + 'ricochetting', + 'riderships', + 'ridgelines', + 'ridgelings', + 'ridgepoles', + 'ridiculers', + 'ridiculing', + 'ridiculous', + 'ridiculously', + 'ridiculousness', + 'ridiculousnesses', + 'rifampicin', + 'rifampicins', + 'rifenesses', + 'riflebirds', + 'rigamarole', + 'rigamaroles', + 'righteously', + 'righteousness', + 'righteousnesses', + 'rightfully', + 'rightfulness', + 'rightfulnesses', + 'rightnesses', + 'rigidification', + 'rigidifications', + 'rigidified', + 'rigidifies', + 'rigidifying', + 'rigidities', + 'rigidnesses', + 'rigmaroles', + 'rigoristic', + 'rigorously', + 'rigorousness', + 'rigorousnesses', + 'rijsttafel', + 'rijsttafels', + 'riminesses', + 'rimosities', + 'rinderpest', + 'rinderpests', + 'ringbarked', + 'ringbarking', + 'ringhalses', + 'ringleader', + 'ringleaders', + 'ringmaster', + 'ringmasters', + 'ringstraked', + 'ringtosses', + 'riotousness', + 'riotousnesses', + 'ripenesses', + 'riprapping', + 'ripsnorter', + 'ripsnorters', + 'ripsnorting', + 'risibilities', + 'risibility', + 'riskinesses', + 'risorgimento', + 'risorgimentos', + 'ritardando', + 'ritardandos', + 'ritornelli', + 'ritornello', + 'ritornellos', + 'ritualisms', + 'ritualistic', + 'ritualistically', + 'ritualists', + 'ritualization', + 'ritualizations', + 'ritualized', + 'ritualizes', + 'ritualizing', + 'ritzinesses', + 'riverbanks', + 'riverboats', + 'riverfront', + 'riverfronts', + 'riversides', + 'riverwards', + 'rivetingly', + 'roadabilities', + 'roadability', + 'roadblocked', + 'roadblocking', + 'roadblocks', + 'roadholding', + 'roadholdings', + 'roadhouses', + 'roadrunner', + 'roadrunners', + 'roadsteads', + 'roadworthiness', + 'roadworthinesses', + 'roadworthy', + 'robotically', + 'robotization', + 'robotizations', + 'robotizing', + 'robustious', + 'robustiously', + 'robustiousness', + 'robustiousnesses', + 'robustness', + 'robustnesses', + 'rockabillies', + 'rockabilly', + 'rocketeers', + 'rocketries', + 'rockfishes', + 'rockhopper', + 'rockhoppers', + 'rockhounding', + 'rockhoundings', + 'rockhounds', + 'rockinesses', + 'rockshafts', + 'rodenticide', + 'rodenticides', + 'rodomontade', + 'rodomontades', + 'roentgenogram', + 'roentgenograms', + 'roentgenographic', + 'roentgenographically', + 'roentgenographies', + 'roentgenography', + 'roentgenologic', + 'roentgenological', + 'roentgenologically', + 'roentgenologies', + 'roentgenologist', + 'roentgenologists', + 'roentgenology', + 'roguishness', + 'roguishnesses', + 'roisterers', + 'roistering', + 'roisterous', + 'roisterously', + 'rollicking', + 'romanising', + 'romanization', + 'romanizations', + 'romanizing', + 'romantically', + 'romanticise', + 'romanticised', + 'romanticises', + 'romanticising', + 'romanticism', + 'romanticisms', + 'romanticist', + 'romanticists', + 'romanticization', + 'romanticizations', + 'romanticize', + 'romanticized', + 'romanticizes', + 'romanticizing', + 'romeldales', + 'roominesses', + 'rootedness', + 'rootednesses', + 'rootlessness', + 'rootlessnesses', + 'rootstocks', + 'ropedancer', + 'ropedancers', + 'ropedancing', + 'ropedancings', + 'ropewalker', + 'ropewalkers', + 'ropinesses', + 'roquelaure', + 'roquelaures', + 'rosebushes', + 'rosefishes', + 'rosemaling', + 'rosemalings', + 'rosemaries', + 'rosinesses', + 'rosinweeds', + 'rostellums', + 'rotameters', + 'rotational', + 'rotatively', + 'rotaviruses', + 'rotisserie', + 'rotisseries', + 'rotogravure', + 'rotogravures', + 'rotorcraft', + 'rototilled', + 'rototiller', + 'rototillers', + 'rototilling', + 'rottenness', + 'rottennesses', + 'rottenstone', + 'rottenstones', + 'rottweiler', + 'rottweilers', + 'rotundities', + 'rotundness', + 'rotundnesses', + 'roughcasting', + 'roughcasts', + 'roughdried', + 'roughdries', + 'roughdrying', + 'roughening', + 'roughhewed', + 'roughhewing', + 'roughhouse', + 'roughhoused', + 'roughhouses', + 'roughhousing', + 'roughnecks', + 'roughnesses', + 'roughrider', + 'roughriders', + 'rouletting', + 'roundabout', + 'roundaboutness', + 'roundaboutnesses', + 'roundabouts', + 'roundedness', + 'roundednesses', + 'roundelays', + 'roundheaded', + 'roundheadedness', + 'roundheadednesses', + 'roundhouse', + 'roundhouses', + 'roundnesses', + 'roundtable', + 'roundtables', + 'roundwoods', + 'roundworms', + 'rouseabout', + 'rouseabouts', + 'rousements', + 'roustabout', + 'roustabouts', + 'routinization', + 'routinizations', + 'routinized', + 'routinizes', + 'routinizing', + 'rowanberries', + 'rowanberry', + 'rowdinesses', + 'roystering', + 'rubberized', + 'rubberlike', + 'rubberneck', + 'rubbernecked', + 'rubbernecker', + 'rubberneckers', + 'rubbernecking', + 'rubbernecks', + 'rubefacient', + 'rubefacients', + 'rubellites', + 'rubicundities', + 'rubicundity', + 'rubrically', + 'rubricated', + 'rubricates', + 'rubricating', + 'rubrication', + 'rubrications', + 'rubricator', + 'rubricators', + 'rubythroat', + 'rubythroats', + 'rudbeckias', + 'rudderless', + 'rudderpost', + 'rudderposts', + 'ruddinesses', + 'rudenesses', + 'rudimental', + 'rudimentarily', + 'rudimentariness', + 'rudimentarinesses', + 'rudimentary', + 'ruefulness', + 'ruefulnesses', + 'ruffianism', + 'ruffianisms', + 'ruggedization', + 'ruggedizations', + 'ruggedized', + 'ruggedizes', + 'ruggedizing', + 'ruggedness', + 'ruggednesses', + 'rugosities', + 'ruinations', + 'ruinousness', + 'ruinousnesses', + 'rulerships', + 'rumbustious', + 'rumbustiously', + 'rumbustiousness', + 'rumbustiousnesses', + 'ruminantly', + 'ruminating', + 'rumination', + 'ruminations', + 'ruminative', + 'ruminatively', + 'ruminators', + 'rumormonger', + 'rumormongering', + 'rumormongerings', + 'rumormongers', + 'rumrunners', + 'runarounds', + 'runtinesses', + 'ruralising', + 'ruralities', + 'ruralizing', + 'rushlights', + 'russetings', + 'russetting', + 'russettings', + 'russifying', + 'rustically', + 'rusticated', + 'rusticates', + 'rusticating', + 'rustication', + 'rustications', + 'rusticator', + 'rusticators', + 'rusticities', + 'rustinesses', + 'rustproofed', + 'rustproofing', + 'rustproofs', + 'rutheniums', + 'rutherfordium', + 'rutherfordiums', + 'ruthfulness', + 'ruthfulnesses', + 'ruthlessly', + 'ruthlessness', + 'ruthlessnesses', + 'ruttishness', + 'ruttishnesses', + 'ryegrasses', + 'sabadillas', + 'sabbatical', + 'sabbaticals', + 'sabermetrician', + 'sabermetricians', + 'sabermetrics', + 'sablefishes', + 'sabotaging', + 'sacahuista', + 'sacahuistas', + 'sacahuiste', + 'sacahuistes', + 'saccharase', + 'saccharases', + 'saccharide', + 'saccharides', + 'saccharification', + 'saccharifications', + 'saccharified', + 'saccharifies', + 'saccharify', + 'saccharifying', + 'saccharimeter', + 'saccharimeters', + 'saccharine', + 'saccharinities', + 'saccharinity', + 'saccharins', + 'saccharoidal', + 'saccharometer', + 'saccharometers', + 'saccharomyces', + 'sacculated', + 'sacculation', + 'sacculations', + 'sacerdotal', + 'sacerdotalism', + 'sacerdotalisms', + 'sacerdotalist', + 'sacerdotalists', + 'sacerdotally', + 'sackcloths', + 'sacramental', + 'sacramentalism', + 'sacramentalisms', + 'sacramentalist', + 'sacramentalists', + 'sacramentally', + 'sacramentals', + 'sacraments', + 'sacredness', + 'sacrednesses', + 'sacrificed', + 'sacrificer', + 'sacrificers', + 'sacrifices', + 'sacrificial', + 'sacrificially', + 'sacrificing', + 'sacrileges', + 'sacrilegious', + 'sacrilegiously', + 'sacrilegiousness', + 'sacrilegiousnesses', + 'sacristans', + 'sacristies', + 'sacroiliac', + 'sacroiliacs', + 'sacrosanct', + 'sacrosanctities', + 'sacrosanctity', + 'saddlebags', + 'saddlebows', + 'saddlebred', + 'saddlebreds', + 'saddlecloth', + 'saddlecloths', + 'saddleless', + 'saddleries', + 'saddletree', + 'saddletrees', + 'sadistically', + 'sadomasochism', + 'sadomasochisms', + 'sadomasochist', + 'sadomasochistic', + 'sadomasochists', + 'safecracker', + 'safecrackers', + 'safecracking', + 'safecrackings', + 'safeguarded', + 'safeguarding', + 'safeguards', + 'safekeeping', + 'safekeepings', + 'safelights', + 'safenesses', + 'safflowers', + 'safranines', + 'sagaciously', + 'sagaciousness', + 'sagaciousnesses', + 'sagacities', + 'saganashes', + 'sagebrushes', + 'sagenesses', + 'sagittally', + 'sailboarding', + 'sailboardings', + 'sailboards', + 'sailboater', + 'sailboaters', + 'sailboating', + 'sailboatings', + 'sailcloths', + 'sailfishes', + 'sailplaned', + 'sailplaner', + 'sailplaners', + 'sailplanes', + 'sailplaning', + 'sainthoods', + 'saintliest', + 'saintliness', + 'saintlinesses', + 'saintships', + 'salabilities', + 'salability', + 'salaciously', + 'salaciousness', + 'salaciousnesses', + 'salacities', + 'salamander', + 'salamanders', + 'salamandrine', + 'saleratuses', + 'salesclerk', + 'salesclerks', + 'salesgirls', + 'salesladies', + 'salesmanship', + 'salesmanships', + 'salespeople', + 'salesperson', + 'salespersons', + 'salesrooms', + 'saleswoman', + 'saleswomen', + 'salicylate', + 'salicylates', + 'saliencies', + 'salinities', + 'salinization', + 'salinizations', + 'salinizing', + 'salinometer', + 'salinometers', + 'salivating', + 'salivation', + 'salivations', + 'salivators', + 'sallowness', + 'sallownesses', + 'salmagundi', + 'salmagundis', + 'salmonberries', + 'salmonberry', + 'salmonella', + 'salmonellae', + 'salmonellas', + 'salmonelloses', + 'salmonellosis', + 'salmonoids', + 'salometers', + 'salpiglosses', + 'salpiglossis', + 'salpiglossises', + 'salpingites', + 'salpingitides', + 'salpingitis', + 'salpingitises', + 'saltarello', + 'saltarellos', + 'saltations', + 'saltatorial', + 'saltbushes', + 'saltcellar', + 'saltcellars', + 'saltimbocca', + 'saltimboccas', + 'saltinesses', + 'saltnesses', + 'saltpeters', + 'saltshaker', + 'saltshakers', + 'salubrious', + 'salubriously', + 'salubriousness', + 'salubriousnesses', + 'salubrities', + 'salutarily', + 'salutariness', + 'salutarinesses', + 'salutation', + 'salutational', + 'salutations', + 'salutatorian', + 'salutatorians', + 'salutatories', + 'salutatory', + 'salutiferous', + 'salvageabilities', + 'salvageability', + 'salvageable', + 'salvarsans', + 'salvational', + 'salvationism', + 'salvationisms', + 'salvationist', + 'salvations', + 'salverform', + 'samaritans', + 'samarskite', + 'samarskites', + 'samenesses', + 'sanatorium', + 'sanatoriums', + 'sanbenitos', + 'sanctification', + 'sanctifications', + 'sanctified', + 'sanctifier', + 'sanctifiers', + 'sanctifies', + 'sanctifying', + 'sanctimonies', + 'sanctimonious', + 'sanctimoniously', + 'sanctimoniousness', + 'sanctimoniousnesses', + 'sanctimony', + 'sanctionable', + 'sanctioned', + 'sanctioning', + 'sanctities', + 'sanctuaries', + 'sandalling', + 'sandalwood', + 'sandalwoods', + 'sandbagged', + 'sandbagger', + 'sandbaggers', + 'sandbagging', + 'sandblasted', + 'sandblaster', + 'sandblasters', + 'sandblasting', + 'sandblasts', + 'sanderling', + 'sanderlings', + 'sandfishes', + 'sandglasses', + 'sandgrouse', + 'sandgrouses', + 'sandinesses', + 'sandlotter', + 'sandlotters', + 'sandpainting', + 'sandpaintings', + 'sandpapered', + 'sandpapering', + 'sandpapers', + 'sandpapery', + 'sandpipers', + 'sandstones', + 'sandstorms', + 'sandwiched', + 'sandwiches', + 'sandwiching', + 'sanenesses', + 'sangfroids', + 'sanguinaria', + 'sanguinarias', + 'sanguinarily', + 'sanguinary', + 'sanguinely', + 'sanguineness', + 'sanguinenesses', + 'sanguineous', + 'sanguinities', + 'sanguinity', + 'sanitarian', + 'sanitarians', + 'sanitaries', + 'sanitarily', + 'sanitarium', + 'sanitariums', + 'sanitating', + 'sanitation', + 'sanitations', + 'sanitising', + 'sanitization', + 'sanitizations', + 'sanitizing', + 'sanitorium', + 'sanitoriums', + 'sannyasins', + 'sansculotte', + 'sansculottes', + 'sansculottic', + 'sansculottish', + 'sansculottism', + 'sansculottisms', + 'sansevieria', + 'sansevierias', + 'santolinas', + 'sapidities', + 'sapiencies', + 'saplessness', + 'saplessnesses', + 'sapodillas', + 'sapogenins', + 'saponaceous', + 'saponaceousness', + 'saponaceousnesses', + 'saponifiable', + 'saponification', + 'saponifications', + 'saponified', + 'saponifier', + 'saponifiers', + 'saponifies', + 'saponifying', + 'sapphirine', + 'sappinesses', + 'saprogenic', + 'saprogenicities', + 'saprogenicity', + 'saprolites', + 'saprophagous', + 'saprophyte', + 'saprophytes', + 'saprophytic', + 'saprophytically', + 'sapsuckers', + 'sarabandes', + 'sarcastically', + 'sarcoidoses', + 'sarcoidosis', + 'sarcolemma', + 'sarcolemmal', + 'sarcolemmas', + 'sarcomatoses', + 'sarcomatosis', + 'sarcomatous', + 'sarcomeres', + 'sarcophagi', + 'sarcophagus', + 'sarcophaguses', + 'sarcoplasm', + 'sarcoplasmic', + 'sarcoplasms', + 'sarcosomal', + 'sarcosomes', + 'sardonically', + 'sardonicism', + 'sardonicisms', + 'sardonyxes', + 'sargassums', + 'sarracenia', + 'sarracenias', + 'sarsaparilla', + 'sarsaparillas', + 'sartorially', + 'saskatoons', + 'sassafrases', + 'satanically', + 'satchelful', + 'satchelfuls', + 'satchelsful', + 'satellites', + 'satiations', + 'satinwoods', + 'satirically', + 'satirising', + 'satirizable', + 'satirizing', + 'satisfaction', + 'satisfactions', + 'satisfactorily', + 'satisfactoriness', + 'satisfactorinesses', + 'satisfactory', + 'satisfiable', + 'satisfying', + 'satisfyingly', + 'saturating', + 'saturation', + 'saturations', + 'saturators', + 'saturnalia', + 'saturnalian', + 'saturnalianly', + 'saturnalias', + 'saturniids', + 'saturnisms', + 'satyagraha', + 'satyagrahas', + 'satyriases', + 'satyriasis', + 'sauceboats', + 'sauceboxes', + 'saucerlike', + 'saucinesses', + 'sauerbraten', + 'sauerbratens', + 'sauerkraut', + 'sauerkrauts', + 'saunterers', + 'sauntering', + 'saurischian', + 'saurischians', + 'savageness', + 'savagenesses', + 'savageries', + 'savoriness', + 'savorinesses', + 'savouriest', + 'sawboneses', + 'sawtimbers', + 'saxicolous', + 'saxifrages', + 'saxitoxins', + 'saxophones', + 'saxophonic', + 'saxophonist', + 'saxophonists', + 'scabbarded', + 'scabbarding', + 'scabiouses', + 'scabrously', + 'scabrousness', + 'scabrousnesses', + 'scaffolded', + 'scaffolding', + 'scaffoldings', + 'scagliolas', + 'scalariform', + 'scalariformly', + 'scalinesses', + 'scallopers', + 'scalloping', + 'scallopini', + 'scallopinis', + 'scallywags', + 'scalograms', + 'scaloppine', + 'scaloppines', + 'scammonies', + 'scampering', + 'scandaling', + 'scandalise', + 'scandalised', + 'scandalises', + 'scandalising', + 'scandalize', + 'scandalized', + 'scandalizes', + 'scandalizing', + 'scandalled', + 'scandalling', + 'scandalmonger', + 'scandalmongering', + 'scandalmongerings', + 'scandalmongers', + 'scandalous', + 'scandalously', + 'scandalousness', + 'scandalousnesses', + 'scantiness', + 'scantinesses', + 'scantlings', + 'scantnesses', + 'scapegoated', + 'scapegoating', + 'scapegoatings', + 'scapegoatism', + 'scapegoatisms', + 'scapegoats', + 'scapegrace', + 'scapegraces', + 'scapolites', + 'scarabaeus', + 'scarabaeuses', + 'scaramouch', + 'scaramouche', + 'scaramouches', + 'scarceness', + 'scarcenesses', + 'scarcities', + 'scarecrows', + 'scareheads', + 'scaremonger', + 'scaremongers', + 'scarfskins', + 'scarification', + 'scarifications', + 'scarifiers', + 'scarifying', + 'scarifyingly', + 'scarlatina', + 'scarlatinal', + 'scarlatinas', + 'scarpering', + 'scatheless', + 'scathingly', + 'scatological', + 'scatologies', + 'scatteration', + 'scatterations', + 'scatterbrain', + 'scatterbrained', + 'scatterbrains', + 'scatterers', + 'scattergood', + 'scattergoods', + 'scattergram', + 'scattergrams', + 'scattergun', + 'scatterguns', + 'scattering', + 'scatteringly', + 'scatterings', + 'scattershot', + 'scavengers', + 'scavenging', + 'scenarists', + 'sceneshifter', + 'sceneshifters', + 'scenically', + 'scenographer', + 'scenographers', + 'scenographic', + 'scenographies', + 'scenography', + 'sceptering', + 'scepticism', + 'scepticisms', + 'schadenfreude', + 'schadenfreudes', + 'schedulers', + 'scheduling', + 'scheelites', + 'schematically', + 'schematics', + 'schematism', + 'schematisms', + 'schematization', + 'schematizations', + 'schematize', + 'schematized', + 'schematizes', + 'schematizing', + 'scherzando', + 'scherzandos', + 'schillings', + 'schipperke', + 'schipperkes', + 'schismatic', + 'schismatical', + 'schismatically', + 'schismatics', + 'schismatize', + 'schismatized', + 'schismatizes', + 'schismatizing', + 'schistosities', + 'schistosity', + 'schistosomal', + 'schistosome', + 'schistosomes', + 'schistosomiases', + 'schistosomiasis', + 'schizocarp', + 'schizocarps', + 'schizogonic', + 'schizogonies', + 'schizogonous', + 'schizogony', + 'schizophrene', + 'schizophrenes', + 'schizophrenia', + 'schizophrenias', + 'schizophrenic', + 'schizophrenically', + 'schizophrenics', + 'schizziest', + 'schlemiels', + 'schlepping', + 'schlockmeister', + 'schlockmeisters', + 'schlumping', + 'schmaltzes', + 'schmaltzier', + 'schmaltziest', + 'schmalzier', + 'schmalziest', + 'schmeering', + 'schmoosing', + 'schmoozing', + 'schnauzers', + 'schnitzels', + 'schnorkeled', + 'schnorkeling', + 'schnorkels', + 'schnorrers', + 'schnozzles', + 'scholarship', + 'scholarships', + 'scholastic', + 'scholastically', + 'scholasticate', + 'scholasticates', + 'scholasticism', + 'scholasticisms', + 'scholastics', + 'scholiastic', + 'scholiasts', + 'schoolbags', + 'schoolbook', + 'schoolbooks', + 'schoolboyish', + 'schoolboys', + 'schoolchild', + 'schoolchildren', + 'schoolfellow', + 'schoolfellows', + 'schoolgirl', + 'schoolgirls', + 'schoolhouse', + 'schoolhouses', + 'schoolings', + 'schoolkids', + 'schoolmarm', + 'schoolmarmish', + 'schoolmarms', + 'schoolmaster', + 'schoolmasterish', + 'schoolmasterly', + 'schoolmasters', + 'schoolmate', + 'schoolmates', + 'schoolmistress', + 'schoolmistresses', + 'schoolroom', + 'schoolrooms', + 'schoolteacher', + 'schoolteachers', + 'schooltime', + 'schooltimes', + 'schoolwork', + 'schoolworks', + 'schottische', + 'schottisches', + 'schussboomer', + 'schussboomers', + 'schwarmerei', + 'schwarmereis', + 'scientific', + 'scientifically', + 'scientisms', + 'scientists', + 'scientized', + 'scientizes', + 'scientizing', + 'scintigraphic', + 'scintigraphies', + 'scintigraphy', + 'scintillae', + 'scintillant', + 'scintillantly', + 'scintillas', + 'scintillate', + 'scintillated', + 'scintillates', + 'scintillating', + 'scintillation', + 'scintillations', + 'scintillator', + 'scintillators', + 'scintillometer', + 'scintillometers', + 'sciolistic', + 'scirrhuses', + 'scissoring', + 'scissortail', + 'scissortails', + 'sclerenchyma', + 'sclerenchymas', + 'sclerenchymata', + 'sclerenchymatous', + 'scleroderma', + 'sclerodermas', + 'sclerodermata', + 'scleromata', + 'sclerometer', + 'sclerometers', + 'scleroprotein', + 'scleroproteins', + 'sclerosing', + 'sclerotial', + 'sclerotics', + 'sclerotins', + 'sclerotium', + 'sclerotization', + 'sclerotizations', + 'sclerotized', + 'scolecites', + 'scolloping', + 'scolopendra', + 'scolopendras', + 'scombroids', + 'scopolamine', + 'scopolamines', + 'scorchingly', + 'scoreboard', + 'scoreboards', + 'scorecards', + 'scorekeeper', + 'scorekeepers', + 'scoriaceous', + 'scorifying', + 'scornfully', + 'scornfulness', + 'scornfulnesses', + 'scorpaenid', + 'scorpaenids', + 'scoundrelly', + 'scoundrels', + 'scoutcraft', + 'scoutcrafts', + 'scouthered', + 'scouthering', + 'scoutmaster', + 'scoutmasters', + 'scowdering', + 'scowlingly', + 'scrabblers', + 'scrabblier', + 'scrabbliest', + 'scrabbling', + 'scraggiest', + 'scragglier', + 'scraggliest', + 'scraiching', + 'scraighing', + 'scramblers', + 'scrambling', + 'scrapbooks', + 'scrapheaps', + 'scrappages', + 'scrappiest', + 'scrappiness', + 'scrappinesses', + 'scratchboard', + 'scratchboards', + 'scratchers', + 'scratchier', + 'scratchiest', + 'scratchily', + 'scratchiness', + 'scratchinesses', + 'scratching', + 'scrawliest', + 'scrawniest', + 'scrawniness', + 'scrawninesses', + 'screamingly', + 'screechers', + 'screechier', + 'screechiest', + 'screeching', + 'screenable', + 'screenings', + 'screenland', + 'screenlands', + 'screenplay', + 'screenplays', + 'screenwriter', + 'screenwriters', + 'screwballs', + 'screwbeans', + 'screwdriver', + 'screwdrivers', + 'screwiness', + 'screwinesses', + 'screwworms', + 'scribblers', + 'scribbling', + 'scribblings', + 'scrimmaged', + 'scrimmager', + 'scrimmagers', + 'scrimmages', + 'scrimmaging', + 'scrimpiest', + 'scrimshander', + 'scrimshanders', + 'scrimshawed', + 'scrimshawing', + 'scrimshaws', + 'scriptoria', + 'scriptorium', + 'scriptural', + 'scripturally', + 'scriptures', + 'scriptwriter', + 'scriptwriters', + 'scriveners', + 'scrofulous', + 'scroggiest', + 'scrollwork', + 'scrollworks', + 'scrooching', + 'scrootched', + 'scrootches', + 'scrootching', + 'scroungers', + 'scroungier', + 'scroungiest', + 'scrounging', + 'scrubbable', + 'scrubbiest', + 'scrublands', + 'scrubwoman', + 'scrubwomen', + 'scruffiest', + 'scruffiness', + 'scruffinesses', + 'scrummaged', + 'scrummages', + 'scrummaging', + 'scrumptious', + 'scrumptiously', + 'scrunching', + 'scrupulosities', + 'scrupulosity', + 'scrupulous', + 'scrupulously', + 'scrupulousness', + 'scrupulousnesses', + 'scrutineer', + 'scrutineers', + 'scrutinies', + 'scrutinise', + 'scrutinised', + 'scrutinises', + 'scrutinising', + 'scrutinize', + 'scrutinized', + 'scrutinizer', + 'scrutinizers', + 'scrutinizes', + 'scrutinizing', + 'sculleries', + 'sculptress', + 'sculptresses', + 'sculptural', + 'sculpturally', + 'sculptured', + 'sculptures', + 'sculpturesque', + 'sculpturesquely', + 'sculpturing', + 'scungillis', + 'scunnering', + 'scuppering', + 'scuppernong', + 'scuppernongs', + 'scurrilities', + 'scurrility', + 'scurrilous', + 'scurrilously', + 'scurrilousness', + 'scurrilousnesses', + 'scurviness', + 'scurvinesses', + 'scutcheons', + 'scutellate', + 'scutellated', + 'scuttering', + 'scuttlebutt', + 'scuttlebutts', + 'scyphistoma', + 'scyphistomae', + 'scyphistomas', + 'scyphozoan', + 'scyphozoans', + 'seabeaches', + 'seaborgium', + 'seaborgiums', + 'seafarings', + 'seamanlike', + 'seamanship', + 'seamanships', + 'seaminesses', + 'seamlessly', + 'seamlessness', + 'seamlessnesses', + 'seamstress', + 'seamstresses', + 'searchable', + 'searchingly', + 'searchless', + 'searchlight', + 'searchlights', + 'seasickness', + 'seasicknesses', + 'seasonable', + 'seasonableness', + 'seasonablenesses', + 'seasonably', + 'seasonalities', + 'seasonality', + 'seasonally', + 'seasonings', + 'seasonless', + 'seastrands', + 'seaworthiness', + 'seaworthinesses', + 'seborrheas', + 'seborrheic', + 'secessionism', + 'secessionisms', + 'secessionist', + 'secessionists', + 'secessions', + 'secludedly', + 'secludedness', + 'secludednesses', + 'seclusions', + 'seclusively', + 'seclusiveness', + 'seclusivenesses', + 'secobarbital', + 'secobarbitals', + 'secondaries', + 'secondarily', + 'secondariness', + 'secondarinesses', + 'secondhand', + 'secretagogue', + 'secretagogues', + 'secretarial', + 'secretariat', + 'secretariats', + 'secretaries', + 'secretaryship', + 'secretaryships', + 'secretionary', + 'secretions', + 'secretively', + 'secretiveness', + 'secretivenesses', + 'sectarianism', + 'sectarianisms', + 'sectarianize', + 'sectarianized', + 'sectarianizes', + 'sectarianizing', + 'sectarians', + 'sectilities', + 'sectionalism', + 'sectionalisms', + 'sectionally', + 'sectionals', + 'sectioning', + 'secularise', + 'secularised', + 'secularises', + 'secularising', + 'secularism', + 'secularisms', + 'secularist', + 'secularistic', + 'secularists', + 'secularities', + 'secularity', + 'secularization', + 'secularizations', + 'secularize', + 'secularized', + 'secularizer', + 'secularizers', + 'secularizes', + 'secularizing', + 'securement', + 'securements', + 'secureness', + 'securenesses', + 'securities', + 'securitization', + 'securitizations', + 'securitize', + 'securitized', + 'securitizes', + 'securitizing', + 'sedateness', + 'sedatenesses', + 'sedimentable', + 'sedimentary', + 'sedimentation', + 'sedimentations', + 'sedimented', + 'sedimenting', + 'sedimentologic', + 'sedimentological', + 'sedimentologically', + 'sedimentologies', + 'sedimentologist', + 'sedimentologists', + 'sedimentology', + 'seditiously', + 'seditiousness', + 'seditiousnesses', + 'seducement', + 'seducements', + 'seductions', + 'seductively', + 'seductiveness', + 'seductivenesses', + 'seductress', + 'seductresses', + 'sedulities', + 'sedulously', + 'sedulousness', + 'sedulousnesses', + 'seecatchie', + 'seedeaters', + 'seedinesses', + 'seemliness', + 'seemlinesses', + 'seersucker', + 'seersuckers', + 'segmentally', + 'segmentary', + 'segmentation', + 'segmentations', + 'segmenting', + 'segregants', + 'segregated', + 'segregates', + 'segregating', + 'segregation', + 'segregationist', + 'segregationists', + 'segregations', + 'segregative', + 'seguidilla', + 'seguidillas', + 'seigneurial', + 'seigneuries', + 'seigniorage', + 'seigniorages', + 'seigniories', + 'seignorage', + 'seignorages', + 'seignorial', + 'seignories', + 'seismically', + 'seismicities', + 'seismicity', + 'seismogram', + 'seismograms', + 'seismograph', + 'seismographer', + 'seismographers', + 'seismographic', + 'seismographies', + 'seismographs', + 'seismography', + 'seismological', + 'seismologies', + 'seismologist', + 'seismologists', + 'seismology', + 'seismometer', + 'seismometers', + 'seismometric', + 'seismometries', + 'seismometry', + 'selachians', + 'selaginella', + 'selaginellas', + 'selectable', + 'selectionist', + 'selectionists', + 'selections', + 'selectively', + 'selectiveness', + 'selectivenesses', + 'selectivities', + 'selectivity', + 'selectness', + 'selectnesses', + 'seleniferous', + 'selenocentric', + 'selenological', + 'selenologies', + 'selenologist', + 'selenologists', + 'selenology', + 'selfishness', + 'selfishnesses', + 'selflessly', + 'selflessness', + 'selflessnesses', + 'selfnesses', + 'selfsameness', + 'selfsamenesses', + 'semantical', + 'semantically', + 'semanticist', + 'semanticists', + 'semaphored', + 'semaphores', + 'semaphoring', + 'semasiological', + 'semasiologies', + 'semasiology', + 'semblables', + 'semblances', + 'semeiologies', + 'semeiology', + 'semeiotics', + 'semestrial', + 'semiabstract', + 'semiabstraction', + 'semiabstractions', + 'semiannual', + 'semiannually', + 'semiaquatic', + 'semiarboreal', + 'semiaridities', + 'semiaridity', + 'semiautobiographical', + 'semiautomatic', + 'semiautomatically', + 'semiautomatics', + 'semiautonomous', + 'semibreves', + 'semicentennial', + 'semicentennials', + 'semicircle', + 'semicircles', + 'semicircular', + 'semicivilized', + 'semiclassic', + 'semiclassical', + 'semiclassics', + 'semicolonial', + 'semicolonialism', + 'semicolonialisms', + 'semicolonies', + 'semicolons', + 'semicolony', + 'semicommercial', + 'semiconducting', + 'semiconductor', + 'semiconductors', + 'semiconscious', + 'semiconsciousness', + 'semiconsciousnesses', + 'semiconservative', + 'semiconservatively', + 'semicrystalline', + 'semicylindrical', + 'semidarkness', + 'semidarknesses', + 'semideified', + 'semideifies', + 'semideifying', + 'semidesert', + 'semideserts', + 'semidetached', + 'semidiameter', + 'semidiameters', + 'semidiurnal', + 'semidivine', + 'semidocumentaries', + 'semidocumentary', + 'semidomesticated', + 'semidomestication', + 'semidomestications', + 'semidominant', + 'semidrying', + 'semidwarfs', + 'semidwarves', + 'semiempirical', + 'semievergreen', + 'semifeudal', + 'semifinalist', + 'semifinalists', + 'semifinals', + 'semifinished', + 'semifitted', + 'semiflexible', + 'semifluids', + 'semiformal', + 'semigovernmental', + 'semigroups', + 'semihoboes', + 'semilegendary', + 'semilethal', + 'semilethals', + 'semiliquid', + 'semiliquids', + 'semiliterate', + 'semiliterates', + 'semilogarithmic', + 'semilustrous', + 'semimetallic', + 'semimetals', + 'semimonastic', + 'semimonthlies', + 'semimonthly', + 'semimystical', + 'seminarian', + 'seminarians', + 'seminaries', + 'seminarist', + 'seminarists', + 'seminatural', + 'seminiferous', + 'seminomadic', + 'seminomads', + 'seminudities', + 'seminudity', + 'semiofficial', + 'semiofficially', + 'semiological', + 'semiologically', + 'semiologies', + 'semiologist', + 'semiologists', + 'semiopaque', + 'semiotician', + 'semioticians', + 'semioticist', + 'semioticists', + 'semipalmated', + 'semiparasite', + 'semiparasites', + 'semiparasitic', + 'semipermanent', + 'semipermeabilities', + 'semipermeability', + 'semipermeable', + 'semipolitical', + 'semipopular', + 'semiporcelain', + 'semiporcelains', + 'semipornographic', + 'semipornographies', + 'semipornography', + 'semipostal', + 'semipostals', + 'semiprecious', + 'semiprivate', + 'semiprofessional', + 'semiprofessionally', + 'semiprofessionals', + 'semipublic', + 'semiquantitative', + 'semiquantitatively', + 'semiquaver', + 'semiquavers', + 'semireligious', + 'semiretired', + 'semiretirement', + 'semiretirements', + 'semisacred', + 'semisecret', + 'semisedentary', + 'semishrubby', + 'semiskilled', + 'semisolids', + 'semisubmersible', + 'semisubmersibles', + 'semisynthetic', + 'semiterrestrial', + 'semitonally', + 'semitonically', + 'semitrailer', + 'semitrailers', + 'semitranslucent', + 'semitransparent', + 'semitropic', + 'semitropical', + 'semitropics', + 'semivowels', + 'semiweeklies', + 'semiweekly', + 'semiyearly', + 'sempervivum', + 'sempervivums', + 'sempiternal', + 'sempiternally', + 'sempiternities', + 'sempiternity', + 'sempstress', + 'sempstresses', + 'senatorial', + 'senatorian', + 'senatorship', + 'senatorships', + 'senectitude', + 'senectitudes', + 'senescence', + 'senescences', + 'seneschals', + 'senhoritas', + 'senilities', + 'seniorities', + 'sensational', + 'sensationalise', + 'sensationalised', + 'sensationalises', + 'sensationalising', + 'sensationalism', + 'sensationalisms', + 'sensationalist', + 'sensationalistic', + 'sensationalists', + 'sensationalize', + 'sensationalized', + 'sensationalizes', + 'sensationalizing', + 'sensationally', + 'sensations', + 'senselessly', + 'senselessness', + 'senselessnesses', + 'sensibilia', + 'sensibilities', + 'sensibility', + 'sensibleness', + 'sensiblenesses', + 'sensiblest', + 'sensitisation', + 'sensitisations', + 'sensitised', + 'sensitises', + 'sensitising', + 'sensitively', + 'sensitiveness', + 'sensitivenesses', + 'sensitives', + 'sensitivities', + 'sensitivity', + 'sensitization', + 'sensitizations', + 'sensitized', + 'sensitizer', + 'sensitizers', + 'sensitizes', + 'sensitizing', + 'sensitometer', + 'sensitometers', + 'sensitometric', + 'sensitometries', + 'sensitometry', + 'sensorially', + 'sensorimotor', + 'sensorineural', + 'sensoriums', + 'sensualism', + 'sensualisms', + 'sensualist', + 'sensualistic', + 'sensualists', + 'sensualities', + 'sensuality', + 'sensualization', + 'sensualizations', + 'sensualize', + 'sensualized', + 'sensualizes', + 'sensualizing', + 'sensuosities', + 'sensuosity', + 'sensuously', + 'sensuousness', + 'sensuousnesses', + 'sentencing', + 'sententiae', + 'sentential', + 'sententious', + 'sententiously', + 'sententiousness', + 'sententiousnesses', + 'sentiences', + 'sentiently', + 'sentimental', + 'sentimentalise', + 'sentimentalised', + 'sentimentalises', + 'sentimentalising', + 'sentimentalism', + 'sentimentalisms', + 'sentimentalist', + 'sentimentalists', + 'sentimentalities', + 'sentimentality', + 'sentimentalization', + 'sentimentalizations', + 'sentimentalize', + 'sentimentalized', + 'sentimentalizes', + 'sentimentalizing', + 'sentimentally', + 'sentiments', + 'sentineled', + 'sentineling', + 'sentinelled', + 'sentinelling', + 'separabilities', + 'separability', + 'separableness', + 'separablenesses', + 'separately', + 'separateness', + 'separatenesses', + 'separating', + 'separation', + 'separationist', + 'separationists', + 'separations', + 'separatism', + 'separatisms', + 'separatist', + 'separatistic', + 'separatists', + 'separative', + 'separators', + 'sepiolites', + 'septenarii', + 'septenarius', + 'septendecillion', + 'septendecillions', + 'septennial', + 'septennially', + 'septentrion', + 'septentrional', + 'septentrions', + 'septicemia', + 'septicemias', + 'septicemic', + 'septicidal', + 'septillion', + 'septillions', + 'septuagenarian', + 'septuagenarians', + 'septupling', + 'sepulchered', + 'sepulchering', + 'sepulchers', + 'sepulchral', + 'sepulchrally', + 'sepulchred', + 'sepulchres', + 'sepulchring', + 'sepultures', + 'sequacious', + 'sequaciously', + 'sequacities', + 'sequencers', + 'sequencies', + 'sequencing', + 'sequential', + 'sequentially', + 'sequestered', + 'sequestering', + 'sequesters', + 'sequestrate', + 'sequestrated', + 'sequestrates', + 'sequestrating', + 'sequestration', + 'sequestrations', + 'sequestrum', + 'sequestrums', + 'seraphically', + 'serenaders', + 'serenading', + 'serendipities', + 'serendipitous', + 'serendipitously', + 'serendipity', + 'sereneness', + 'serenenesses', + 'serenities', + 'sergeancies', + 'sergeanties', + 'serialised', + 'serialises', + 'serialising', + 'serialisms', + 'serialists', + 'serialization', + 'serializations', + 'serialized', + 'serializes', + 'serializing', + 'sericultural', + 'sericulture', + 'sericultures', + 'sericulturist', + 'sericulturists', + 'serigrapher', + 'serigraphers', + 'serigraphies', + 'serigraphs', + 'serigraphy', + 'seriocomic', + 'seriocomically', + 'seriousness', + 'seriousnesses', + 'serjeanties', + 'sermonette', + 'sermonettes', + 'sermonized', + 'sermonizer', + 'sermonizers', + 'sermonizes', + 'sermonizing', + 'seroconversion', + 'seroconversions', + 'serodiagnoses', + 'serodiagnosis', + 'serodiagnostic', + 'serological', + 'serologically', + 'serologies', + 'serologist', + 'serologists', + 'seronegative', + 'seronegativities', + 'seronegativity', + 'seropositive', + 'seropositivities', + 'seropositivity', + 'seropurulent', + 'serosities', + 'serotinous', + 'serotonergic', + 'serotoninergic', + 'serotonins', + 'serpentine', + 'serpentinely', + 'serpentines', + 'serpigines', + 'serpiginous', + 'serpiginously', + 'serrations', + 'serriedness', + 'serriednesses', + 'servanthood', + 'servanthoods', + 'servantless', + 'serviceabilities', + 'serviceability', + 'serviceable', + 'serviceableness', + 'serviceablenesses', + 'serviceably', + 'serviceberries', + 'serviceberry', + 'serviceman', + 'servicemen', + 'servicewoman', + 'servicewomen', + 'serviettes', + 'servileness', + 'servilenesses', + 'servilities', + 'servitudes', + 'servomechanism', + 'servomechanisms', + 'servomotor', + 'servomotors', + 'sesquicarbonate', + 'sesquicarbonates', + 'sesquicentenaries', + 'sesquicentenary', + 'sesquicentennial', + 'sesquicentennials', + 'sesquipedalian', + 'sesquiterpene', + 'sesquiterpenes', + 'sestertium', + 'settleable', + 'settlement', + 'settlements', + 'seventeens', + 'seventeenth', + 'seventeenths', + 'seventieth', + 'seventieths', + 'severabilities', + 'severability', + 'severalfold', + 'severalties', + 'severances', + 'severeness', + 'severenesses', + 'severities', + 'sewabilities', + 'sewability', + 'sexagenarian', + 'sexagenarians', + 'sexagesimal', + 'sexagesimals', + 'sexdecillion', + 'sexdecillions', + 'sexinesses', + 'sexlessness', + 'sexlessnesses', + 'sexologies', + 'sexologist', + 'sexologists', + 'sexploitation', + 'sexploitations', + 'sextillion', + 'sextillions', + 'sextodecimo', + 'sextodecimos', + 'sextuplets', + 'sextuplicate', + 'sextuplicated', + 'sextuplicates', + 'sextuplicating', + 'sextupling', + 'sexualities', + 'sexualization', + 'sexualizations', + 'sexualized', + 'sexualizes', + 'sexualizing', + 'sforzandos', + 'shabbiness', + 'shabbinesses', + 'shacklebone', + 'shacklebones', + 'shadberries', + 'shadbushes', + 'shadchanim', + 'shadinesses', + 'shadowboxed', + 'shadowboxes', + 'shadowboxing', + 'shadowgraph', + 'shadowgraphies', + 'shadowgraphs', + 'shadowgraphy', + 'shadowiest', + 'shadowiness', + 'shadowinesses', + 'shadowless', + 'shadowlike', + 'shagginess', + 'shagginesses', + 'shaggymane', + 'shaggymanes', + 'shakedowns', + 'shakinesses', + 'shallowest', + 'shallowing', + 'shallowness', + 'shallownesses', + 'shamanisms', + 'shamanistic', + 'shamanists', + 'shamefaced', + 'shamefacedly', + 'shamefacedness', + 'shamefacednesses', + 'shamefully', + 'shamefulness', + 'shamefulnesses', + 'shamelessly', + 'shamelessness', + 'shamelessnesses', + 'shammashim', + 'shampooers', + 'shampooing', + 'shandygaff', + 'shandygaffs', + 'shanghaied', + 'shanghaier', + 'shanghaiers', + 'shanghaiing', + 'shankpiece', + 'shankpieces', + 'shantytown', + 'shantytowns', + 'shapelessly', + 'shapelessness', + 'shapelessnesses', + 'shapeliest', + 'shapeliness', + 'shapelinesses', + 'shareabilities', + 'shareability', + 'sharecropped', + 'sharecropper', + 'sharecroppers', + 'sharecropping', + 'sharecrops', + 'shareholder', + 'shareholders', + 'sharewares', + 'sharkskins', + 'sharpeners', + 'sharpening', + 'sharpnesses', + 'sharpshooter', + 'sharpshooters', + 'sharpshooting', + 'sharpshootings', + 'shashlicks', + 'shattering', + 'shatteringly', + 'shatterproof', + 'shavelings', + 'shavetails', + 'shearlings', + 'shearwater', + 'shearwaters', + 'sheathbill', + 'sheathbills', + 'sheathings', + 'sheepberries', + 'sheepberry', + 'sheepcotes', + 'sheepfolds', + 'sheepherder', + 'sheepherders', + 'sheepherding', + 'sheepherdings', + 'sheepishly', + 'sheepishness', + 'sheepishnesses', + 'sheepshank', + 'sheepshanks', + 'sheepshead', + 'sheepsheads', + 'sheepshearer', + 'sheepshearers', + 'sheepshearing', + 'sheepshearings', + 'sheepskins', + 'sheernesses', + 'sheikhdoms', + 'sheldrakes', + 'shellacked', + 'shellacking', + 'shellackings', + 'shellbacks', + 'shellcracker', + 'shellcrackers', + 'shellfires', + 'shellfisheries', + 'shellfishery', + 'shellfishes', + 'shellproof', + 'shellshocked', + 'shellworks', + 'shelterbelt', + 'shelterbelts', + 'shelterers', + 'sheltering', + 'shelterless', + 'shenanigan', + 'shenanigans', + 'shepherded', + 'shepherdess', + 'shepherdesses', + 'shepherding', + 'shergottite', + 'shergottites', + 'sheriffdom', + 'sheriffdoms', + 'shewbreads', + 'shibboleth', + 'shibboleths', + 'shiftiness', + 'shiftinesses', + 'shiftlessly', + 'shiftlessness', + 'shiftlessnesses', + 'shigelloses', + 'shigellosis', + 'shikarring', + 'shillalahs', + 'shillelagh', + 'shillelaghs', + 'shimmering', + 'shininesses', + 'shinleaves', + 'shinneries', + 'shinneying', + 'shinplaster', + 'shinplasters', + 'shinsplints', + 'shipboards', + 'shipbuilder', + 'shipbuilders', + 'shipbuilding', + 'shipbuildings', + 'shipfitter', + 'shipfitters', + 'shipmaster', + 'shipmasters', + 'shipowners', + 'shipwrecked', + 'shipwrecking', + 'shipwrecks', + 'shipwright', + 'shipwrights', + 'shirtdress', + 'shirtdresses', + 'shirtfront', + 'shirtfronts', + 'shirtmaker', + 'shirtmakers', + 'shirtsleeve', + 'shirtsleeved', + 'shirtsleeves', + 'shirttails', + 'shirtwaist', + 'shirtwaists', + 'shittimwood', + 'shittimwoods', + 'shivareeing', + 'shlemiehls', + 'shmaltzier', + 'shmaltziest', + 'shockingly', + 'shockproof', + 'shoddiness', + 'shoddinesses', + 'shoeblacks', + 'shoehorned', + 'shoehorning', + 'shoemakers', + 'shoeshines', + 'shoestring', + 'shoestrings', + 'shogunates', + 'shopkeeper', + 'shopkeepers', + 'shoplifted', + 'shoplifter', + 'shoplifters', + 'shoplifting', + 'shopwindow', + 'shopwindows', + 'shorebirds', + 'shorefront', + 'shorefronts', + 'shorelines', + 'shorewards', + 'shortbread', + 'shortbreads', + 'shortcakes', + 'shortchange', + 'shortchanged', + 'shortchanger', + 'shortchangers', + 'shortchanges', + 'shortchanging', + 'shortcoming', + 'shortcomings', + 'shortcutting', + 'shorteners', + 'shortening', + 'shortenings', + 'shortfalls', + 'shorthaired', + 'shorthairs', + 'shorthanded', + 'shorthands', + 'shorthorns', + 'shortlists', + 'shortnesses', + 'shortsighted', + 'shortsightedly', + 'shortsightedness', + 'shortsightednesses', + 'shortstops', + 'shortwaves', + 'shotgunned', + 'shotgunner', + 'shotgunners', + 'shotgunning', + 'shouldered', + 'shouldering', + 'shovelfuls', + 'shovellers', + 'shovelling', + 'shovelnose', + 'shovelnoses', + 'shovelsful', + 'showbizzes', + 'showboated', + 'showboating', + 'showbreads', + 'showcasing', + 'showerhead', + 'showerheads', + 'showerless', + 'showinesses', + 'showmanship', + 'showmanships', + 'showpieces', + 'showplaces', + 'showstopper', + 'showstoppers', + 'showstopping', + 'shrewdness', + 'shrewdnesses', + 'shrewishly', + 'shrewishness', + 'shrewishnesses', + 'shriekiest', + 'shrievalties', + 'shrievalty', + 'shrillness', + 'shrillnesses', + 'shrimpiest', + 'shrimplike', + 'shrinkable', + 'shrinkages', + 'shriveling', + 'shrivelled', + 'shrivelling', + 'shrubberies', + 'shrubbiest', + 'shuddering', + 'shuffleboard', + 'shuffleboards', + 'shunpikers', + 'shunpiking', + 'shunpikings', + 'shutterbug', + 'shutterbugs', + 'shuttering', + 'shutterless', + 'shuttlecock', + 'shuttlecocked', + 'shuttlecocking', + 'shuttlecocks', + 'shuttleless', + 'shylocking', + 'sialagogue', + 'sialagogues', + 'sibilances', + 'sibilantly', + 'sibilating', + 'sibilation', + 'sibilations', + 'sickeningly', + 'sickishness', + 'sickishnesses', + 'sicklemias', + 'sickliness', + 'sicklinesses', + 'sicknesses', + 'sideboards', + 'sideburned', + 'sidednesses', + 'sidedresses', + 'sidelights', + 'sideliners', + 'sidelining', + 'sidepieces', + 'siderolite', + 'siderolites', + 'sidesaddle', + 'sidesaddles', + 'sideslipped', + 'sideslipping', + 'sidesplitting', + 'sidesplittingly', + 'sidestepped', + 'sidestepper', + 'sidesteppers', + 'sidestepping', + 'sidestream', + 'sidestroke', + 'sidestrokes', + 'sideswiped', + 'sideswipes', + 'sideswiping', + 'sidetracked', + 'sidetracking', + 'sidetracks', + 'sidewinder', + 'sidewinders', + 'sightlessly', + 'sightlessness', + 'sightlessnesses', + 'sightliest', + 'sightliness', + 'sightlinesses', + 'sightseeing', + 'sightseers', + 'sigmoidally', + 'sigmoidoscopies', + 'sigmoidoscopy', + 'signalised', + 'signalises', + 'signalising', + 'signalization', + 'signalizations', + 'signalized', + 'signalizes', + 'signalizing', + 'signallers', + 'signalling', + 'signalment', + 'signalments', + 'signatories', + 'signatures', + 'signboards', + 'significance', + 'significances', + 'significancies', + 'significancy', + 'significant', + 'significantly', + 'signification', + 'significations', + 'significative', + 'signifieds', + 'signifiers', + 'signifying', + 'signifyings', + 'signiories', + 'signorinas', + 'signposted', + 'signposting', + 'silentness', + 'silentnesses', + 'silhouette', + 'silhouetted', + 'silhouettes', + 'silhouetting', + 'silhouettist', + 'silhouettists', + 'silicification', + 'silicifications', + 'silicified', + 'silicifies', + 'silicifying', + 'siliconized', + 'silicotics', + 'silkalines', + 'silkinesses', + 'silkolines', + 'sillimanite', + 'sillimanites', + 'sillinesses', + 'siltations', + 'siltstones', + 'silverback', + 'silverbacks', + 'silverberries', + 'silverberry', + 'silverfish', + 'silverfishes', + 'silveriness', + 'silverinesses', + 'silverpoint', + 'silverpoints', + 'silverside', + 'silversides', + 'silversmith', + 'silversmithing', + 'silversmithings', + 'silversmiths', + 'silverware', + 'silverwares', + 'silverweed', + 'silverweeds', + 'silvicultural', + 'silviculturally', + 'silviculture', + 'silvicultures', + 'silviculturist', + 'silviculturists', + 'similarities', + 'similarity', + 'similitude', + 'similitudes', + 'simoniacal', + 'simoniacally', + 'simonizing', + 'simpleminded', + 'simplemindedly', + 'simplemindedness', + 'simplemindednesses', + 'simpleness', + 'simplenesses', + 'simpletons', + 'simplicial', + 'simplicially', + 'simplicities', + 'simplicity', + 'simplification', + 'simplifications', + 'simplified', + 'simplifier', + 'simplifiers', + 'simplifies', + 'simplifying', + 'simplistic', + 'simplistically', + 'simulacres', + 'simulacrum', + 'simulacrums', + 'simulating', + 'simulation', + 'simulations', + 'simulative', + 'simulators', + 'simulcasted', + 'simulcasting', + 'simulcasts', + 'simultaneities', + 'simultaneity', + 'simultaneous', + 'simultaneously', + 'simultaneousness', + 'simultaneousnesses', + 'sincereness', + 'sincerenesses', + 'sincerities', + 'sincipital', + 'sinfonietta', + 'sinfoniettas', + 'sinfulness', + 'sinfulnesses', + 'singleness', + 'singlenesses', + 'singlestick', + 'singlesticks', + 'singletons', + 'singletree', + 'singletrees', + 'singspiels', + 'singularities', + 'singularity', + 'singularize', + 'singularized', + 'singularizes', + 'singularizing', + 'singularly', + 'sinicizing', + 'sinisterly', + 'sinisterness', + 'sinisternesses', + 'sinistrous', + 'sinlessness', + 'sinlessnesses', + 'sinoatrial', + 'sinological', + 'sinologies', + 'sinologist', + 'sinologists', + 'sinologues', + 'sinsemilla', + 'sinsemillas', + 'sinterabilities', + 'sinterability', + 'sinuosities', + 'sinuousness', + 'sinuousnesses', + 'sinusitises', + 'sinusoidal', + 'sinusoidally', + 'siphonophore', + 'siphonophores', + 'siphonostele', + 'siphonosteles', + 'sisterhood', + 'sisterhoods', + 'sitologies', + 'sitosterol', + 'sitosterols', + 'situational', + 'situationally', + 'situations', + 'sixteenmos', + 'sixteenths', + 'sizableness', + 'sizablenesses', + 'sizinesses', + 'sjamboking', + 'skateboard', + 'skateboarder', + 'skateboarders', + 'skateboarding', + 'skateboardings', + 'skateboards', + 'skedaddled', + 'skedaddler', + 'skedaddlers', + 'skedaddles', + 'skedaddling', + 'skeletally', + 'skeletonic', + 'skeletonise', + 'skeletonised', + 'skeletonises', + 'skeletonising', + 'skeletonize', + 'skeletonized', + 'skeletonizer', + 'skeletonizers', + 'skeletonizes', + 'skeletonizing', + 'skeltering', + 'skeptically', + 'skepticism', + 'skepticisms', + 'sketchbook', + 'sketchbooks', + 'sketchiest', + 'sketchiness', + 'sketchinesses', + 'skewnesses', + 'skibobbers', + 'skibobbing', + 'skibobbings', + 'skiddooing', + 'skijorings', + 'skillessness', + 'skillessnesses', + 'skillfully', + 'skillfulness', + 'skillfulnesses', + 'skimobiles', + 'skimpiness', + 'skimpinesses', + 'skinflints', + 'skinniness', + 'skinninesses', + 'skippering', + 'skirmished', + 'skirmisher', + 'skirmishers', + 'skirmishes', + 'skirmishing', + 'skitterier', + 'skitteriest', + 'skittering', + 'skittishly', + 'skittishness', + 'skittishnesses', + 'skreeghing', + 'skreighing', + 'skulduggeries', + 'skulduggery', + 'skullduggeries', + 'skullduggery', + 'skydivings', + 'skyjackers', + 'skyjacking', + 'skyjackings', + 'skylarkers', + 'skylarking', + 'skylighted', + 'skyrocketed', + 'skyrocketing', + 'skyrockets', + 'skyscraper', + 'skyscrapers', + 'skywriters', + 'skywriting', + 'skywritings', + 'skywritten', + 'slabbering', + 'slackening', + 'slacknesses', + 'slanderers', + 'slandering', + 'slanderous', + 'slanderously', + 'slanderousness', + 'slanderousnesses', + 'slanginess', + 'slanginesses', + 'slanguages', + 'slantingly', + 'slapdashes', + 'slaphappier', + 'slaphappiest', + 'slapsticks', + 'slashingly', + 'slathering', + 'slatternliness', + 'slatternlinesses', + 'slatternly', + 'slaughtered', + 'slaughterer', + 'slaughterers', + 'slaughterhouse', + 'slaughterhouses', + 'slaughtering', + 'slaughterous', + 'slaughterously', + 'slaughters', + 'slaveholder', + 'slaveholders', + 'slaveholding', + 'slaveholdings', + 'slavishness', + 'slavishnesses', + 'slavocracies', + 'slavocracy', + 'sleazebags', + 'sleazeball', + 'sleazeballs', + 'sleaziness', + 'sleazinesses', + 'sledgehammer', + 'sledgehammered', + 'sledgehammering', + 'sledgehammers', + 'sleekening', + 'sleeknesses', + 'sleepiness', + 'sleepinesses', + 'sleeplessly', + 'sleeplessness', + 'sleeplessnesses', + 'sleepovers', + 'sleepwalked', + 'sleepwalker', + 'sleepwalkers', + 'sleepwalking', + 'sleepwalks', + 'sleepyhead', + 'sleepyheads', + 'sleeveless', + 'sleevelets', + 'slenderest', + 'slenderize', + 'slenderized', + 'slenderizes', + 'slenderizing', + 'slenderness', + 'slendernesses', + 'sleuthhound', + 'sleuthhounds', + 'slickenside', + 'slickensides', + 'slicknesses', + 'slickrocks', + 'slightingly', + 'slightness', + 'slightnesses', + 'slimeballs', + 'sliminesses', + 'slimnastics', + 'slimnesses', + 'slimpsiest', + 'slingshots', + 'slinkiness', + 'slinkinesses', + 'slipcovers', + 'slipformed', + 'slipforming', + 'slipperier', + 'slipperiest', + 'slipperiness', + 'slipperinesses', + 'slipstream', + 'slipstreamed', + 'slipstreaming', + 'slipstreams', + 'slithering', + 'slivovices', + 'slivovitzes', + 'slobberers', + 'slobbering', + 'sloganeered', + 'sloganeering', + 'sloganeers', + 'sloganized', + 'sloganizes', + 'sloganizing', + 'sloppiness', + 'sloppinesses', + 'slothfully', + 'slothfulness', + 'slothfulnesses', + 'slouchiest', + 'slouchiness', + 'slouchinesses', + 'sloughiest', + 'slovenlier', + 'slovenliest', + 'slovenliness', + 'slovenlinesses', + 'slownesses', + 'slubbering', + 'sluggardly', + 'sluggardness', + 'sluggardnesses', + 'sluggishly', + 'sluggishness', + 'sluggishnesses', + 'sluiceways', + 'slumberers', + 'slumbering', + 'slumberous', + 'slumgullion', + 'slumgullions', + 'slumpflation', + 'slumpflations', + 'slungshots', + 'slushiness', + 'slushinesses', + 'sluttishly', + 'sluttishness', + 'sluttishnesses', + 'smallclothes', + 'smallholder', + 'smallholders', + 'smallholding', + 'smallholdings', + 'smallmouth', + 'smallmouths', + 'smallnesses', + 'smallpoxes', + 'smallsword', + 'smallswords', + 'smaragdine', + 'smaragdite', + 'smaragdites', + 'smarminess', + 'smarminesses', + 'smartasses', + 'smartening', + 'smartnesses', + 'smartweeds', + 'smashingly', + 'smatterers', + 'smattering', + 'smatterings', + 'smearcases', + 'smelteries', + 'smiercases', + 'smithereens', + 'smitheries', + 'smithsonite', + 'smithsonites', + 'smokehouse', + 'smokehouses', + 'smokejacks', + 'smokestack', + 'smokestacks', + 'smokinesses', + 'smoldering', + 'smoothbore', + 'smoothbores', + 'smoothened', + 'smoothening', + 'smoothness', + 'smoothnesses', + 'smorgasbord', + 'smorgasbords', + 'smothering', + 'smouldered', + 'smouldering', + 'smudginess', + 'smudginesses', + 'smugnesses', + 'smutchiest', + 'smuttiness', + 'smuttinesses', + 'snaggleteeth', + 'snaggletooth', + 'snaggletoothed', + 'snakebirds', + 'snakebites', + 'snakebitten', + 'snakeroots', + 'snakeskins', + 'snakeweeds', + 'snapdragon', + 'snapdragons', + 'snappiness', + 'snappinesses', + 'snappishly', + 'snappishness', + 'snappishnesses', + 'snapshooter', + 'snapshooters', + 'snapshotted', + 'snapshotting', + 'snatchiest', + 'sneakiness', + 'sneakinesses', + 'sneakingly', + 'sneezeweed', + 'sneezeweeds', + 'snickerers', + 'snickering', + 'snickersnee', + 'snickersnees', + 'snidenesses', + 'sniffiness', + 'sniffinesses', + 'sniffishly', + 'sniffishness', + 'sniffishnesses', + 'sniggerers', + 'sniggering', + 'sniperscope', + 'sniperscopes', + 'snippersnapper', + 'snippersnappers', + 'snippetier', + 'snippetiest', + 'snivelling', + 'snobberies', + 'snobbishly', + 'snobbishness', + 'snobbishnesses', + 'snollygoster', + 'snollygosters', + 'snookering', + 'snootiness', + 'snootinesses', + 'snorkelers', + 'snorkeling', + 'snottiness', + 'snottinesses', + 'snowballed', + 'snowballing', + 'snowberries', + 'snowblower', + 'snowblowers', + 'snowboarder', + 'snowboarders', + 'snowboarding', + 'snowboardings', + 'snowboards', + 'snowbrushes', + 'snowbushes', + 'snowcapped', + 'snowdrifts', + 'snowfields', + 'snowflakes', + 'snowinesses', + 'snowmakers', + 'snowmaking', + 'snowmobile', + 'snowmobiler', + 'snowmobilers', + 'snowmobiles', + 'snowmobiling', + 'snowmobilings', + 'snowmobilist', + 'snowmobilists', + 'snowplowed', + 'snowplowing', + 'snowscapes', + 'snowshoeing', + 'snowshoers', + 'snowslides', + 'snowstorms', + 'snubbiness', + 'snubbinesses', + 'snubnesses', + 'snuffboxes', + 'snuffliest', + 'snuggeries', + 'snugnesses', + 'soapberries', + 'soapinesses', + 'soapstones', + 'soberizing', + 'sobernesses', + 'sobersided', + 'sobersidedness', + 'sobersidednesses', + 'sobersides', + 'sobrieties', + 'sobriquets', + 'sociabilities', + 'sociability', + 'sociableness', + 'sociablenesses', + 'socialised', + 'socialises', + 'socialising', + 'socialisms', + 'socialistic', + 'socialistically', + 'socialists', + 'socialites', + 'socialities', + 'socialization', + 'socializations', + 'socialized', + 'socializer', + 'socializers', + 'socializes', + 'socializing', + 'societally', + 'sociobiological', + 'sociobiologies', + 'sociobiologist', + 'sociobiologists', + 'sociobiology', + 'sociocultural', + 'socioculturally', + 'socioeconomic', + 'socioeconomically', + 'sociograms', + 'sociohistorical', + 'sociolinguist', + 'sociolinguistic', + 'sociolinguistics', + 'sociolinguists', + 'sociologese', + 'sociologeses', + 'sociologic', + 'sociological', + 'sociologically', + 'sociologies', + 'sociologist', + 'sociologists', + 'sociometric', + 'sociometries', + 'sociometry', + 'sociopathic', + 'sociopaths', + 'sociopolitical', + 'sociopsychological', + 'socioreligious', + 'sociosexual', + 'sockdolager', + 'sockdolagers', + 'sockdologer', + 'sockdologers', + 'sodalities', + 'sodbusters', + 'soddenness', + 'soddennesses', + 'sodomitical', + 'sodomizing', + 'softballer', + 'softballers', + 'softcovers', + 'softheaded', + 'softheadedly', + 'softheadedness', + 'softheadednesses', + 'softhearted', + 'softheartedly', + 'softheartedness', + 'softheartednesses', + 'softnesses', + 'softshells', + 'sogginesses', + 'sojourners', + 'sojourning', + 'solacement', + 'solacements', + 'solanaceous', + 'solarising', + 'solarization', + 'solarizations', + 'solarizing', + 'solderabilities', + 'solderability', + 'soldieries', + 'soldiering', + 'soldierings', + 'soldiership', + 'soldierships', + 'solecising', + 'solecistic', + 'solecizing', + 'solemnified', + 'solemnifies', + 'solemnifying', + 'solemnities', + 'solemnization', + 'solemnizations', + 'solemnized', + 'solemnizes', + 'solemnizing', + 'solemnness', + 'solemnnesses', + 'solenesses', + 'solenoidal', + 'soleplates', + 'solfataras', + 'solfeggios', + 'solicitant', + 'solicitants', + 'solicitation', + 'solicitations', + 'soliciting', + 'solicitors', + 'solicitorship', + 'solicitorships', + 'solicitous', + 'solicitously', + 'solicitousness', + 'solicitousnesses', + 'solicitude', + 'solicitudes', + 'solidarism', + 'solidarisms', + 'solidarist', + 'solidaristic', + 'solidarists', + 'solidarities', + 'solidarity', + 'solidification', + 'solidifications', + 'solidified', + 'solidifies', + 'solidifying', + 'solidities', + 'solidnesses', + 'solifluction', + 'solifluctions', + 'soliloquies', + 'soliloquise', + 'soliloquised', + 'soliloquises', + 'soliloquising', + 'soliloquist', + 'soliloquists', + 'soliloquize', + 'soliloquized', + 'soliloquizer', + 'soliloquizers', + 'soliloquizes', + 'soliloquizing', + 'solipsisms', + 'solipsistic', + 'solipsistically', + 'solipsists', + 'solitaires', + 'solitaries', + 'solitarily', + 'solitariness', + 'solitarinesses', + 'solitudinarian', + 'solitudinarians', + 'solmization', + 'solmizations', + 'solonchaks', + 'solonetses', + 'solonetzes', + 'solonetzic', + 'solstitial', + 'solubilise', + 'solubilised', + 'solubilises', + 'solubilising', + 'solubilities', + 'solubility', + 'solubilization', + 'solubilizations', + 'solubilize', + 'solubilized', + 'solubilizes', + 'solubilizing', + 'solvabilities', + 'solvability', + 'solvations', + 'solvencies', + 'solventless', + 'solvolyses', + 'solvolysis', + 'solvolytic', + 'somatically', + 'somatological', + 'somatologies', + 'somatology', + 'somatomedin', + 'somatomedins', + 'somatopleure', + 'somatopleures', + 'somatosensory', + 'somatostatin', + 'somatostatins', + 'somatotrophin', + 'somatotrophins', + 'somatotropin', + 'somatotropins', + 'somatotype', + 'somatotypes', + 'somberness', + 'sombernesses', + 'somebodies', + 'somersault', + 'somersaulted', + 'somersaulting', + 'somersaults', + 'somerseted', + 'somerseting', + 'somersetted', + 'somersetting', + 'somewheres', + 'somewhither', + 'sommeliers', + 'somnambulant', + 'somnambulate', + 'somnambulated', + 'somnambulates', + 'somnambulating', + 'somnambulation', + 'somnambulations', + 'somnambulism', + 'somnambulisms', + 'somnambulist', + 'somnambulistic', + 'somnambulistically', + 'somnambulists', + 'somnifacient', + 'somnifacients', + 'somniferous', + 'somnolence', + 'somnolences', + 'somnolently', + 'songfulness', + 'songfulnesses', + 'songlessly', + 'songsmiths', + 'songstress', + 'songstresses', + 'songwriter', + 'songwriters', + 'songwriting', + 'songwritings', + 'sonicating', + 'sonication', + 'sonications', + 'sonneteering', + 'sonneteerings', + 'sonneteers', + 'sonnetting', + 'sonographer', + 'sonographers', + 'sonographies', + 'sonography', + 'sonorities', + 'sonorously', + 'sonorousness', + 'sonorousnesses', + 'soothingly', + 'soothingness', + 'soothingnesses', + 'soothsayer', + 'soothsayers', + 'soothsaying', + 'soothsayings', + 'sootinesses', + 'sopaipilla', + 'sopaipillas', + 'sopapillas', + 'sophistical', + 'sophistically', + 'sophisticate', + 'sophisticated', + 'sophisticatedly', + 'sophisticates', + 'sophisticating', + 'sophistication', + 'sophistications', + 'sophistries', + 'sophomores', + 'sophomoric', + 'soporiferous', + 'soporiferousness', + 'soporiferousnesses', + 'soporifics', + 'soppinesses', + 'sopraninos', + 'sorbabilities', + 'sorbability', + 'sorceresses', + 'sordidness', + 'sordidnesses', + 'soreheaded', + 'sorenesses', + 'sororities', + 'sorrinesses', + 'sorrowfully', + 'sorrowfulness', + 'sorrowfulnesses', + 'sortileges', + 'sortitions', + 'sostenutos', + 'soteriological', + 'soteriologies', + 'soteriology', + 'sottishness', + 'sottishnesses', + 'soubrettes', + 'soubriquet', + 'soubriquets', + 'soulfulness', + 'soulfulnesses', + 'soullessly', + 'soullessness', + 'soullessnesses', + 'soundalike', + 'soundalikes', + 'soundboard', + 'soundboards', + 'soundboxes', + 'soundingly', + 'soundlessly', + 'soundnesses', + 'soundproof', + 'soundproofed', + 'soundproofing', + 'soundproofs', + 'soundstage', + 'soundstages', + 'soundtrack', + 'soundtracks', + 'soupspoons', + 'sourcebook', + 'sourcebooks', + 'sourceless', + 'sourdoughs', + 'sournesses', + 'sourpusses', + 'sousaphone', + 'sousaphones', + 'southbound', + 'southeaster', + 'southeasterly', + 'southeastern', + 'southeasternmost', + 'southeasters', + 'southeasts', + 'southeastward', + 'southeastwards', + 'southerlies', + 'southerner', + 'southerners', + 'southernmost', + 'southernness', + 'southernnesses', + 'southernwood', + 'southernwoods', + 'southlands', + 'southwards', + 'southwester', + 'southwesterly', + 'southwestern', + 'southwesternmost', + 'southwesters', + 'southwests', + 'southwestward', + 'southwestwards', + 'souvlakias', + 'sovereignly', + 'sovereigns', + 'sovereignties', + 'sovereignty', + 'sovietisms', + 'sovietization', + 'sovietizations', + 'sovietized', + 'sovietizes', + 'sovietizing', + 'sovranties', + 'sowbellies', + 'spacebands', + 'spacecraft', + 'spacecrafts', + 'spaceflight', + 'spaceflights', + 'spaceports', + 'spaceships', + 'spacesuits', + 'spacewalked', + 'spacewalker', + 'spacewalkers', + 'spacewalking', + 'spacewalks', + 'spaciously', + 'spaciousness', + 'spaciousnesses', + 'spadefishes', + 'spadeworks', + 'spaghettilike', + 'spaghettini', + 'spaghettinis', + 'spaghettis', + 'spallation', + 'spallations', + 'spanakopita', + 'spanakopitas', + 'spanceling', + 'spancelled', + 'spancelling', + 'spangliest', + 'spanokopita', + 'spanokopitas', + 'sparenesses', + 'sparkliest', + 'sparkplugged', + 'sparkplugging', + 'sparkplugs', + 'sparrowlike', + 'sparseness', + 'sparsenesses', + 'sparsities', + 'sparteines', + 'spasmodically', + 'spasmolytic', + 'spasmolytics', + 'spastically', + 'spasticities', + 'spasticity', + 'spathulate', + 'spatialities', + 'spatiality', + 'spatiotemporal', + 'spatiotemporally', + 'spatterdock', + 'spatterdocks', + 'spattering', + 'speakeasies', + 'speakerphone', + 'speakerphones', + 'speakership', + 'speakerships', + 'spearfished', + 'spearfishes', + 'spearfishing', + 'spearheaded', + 'spearheading', + 'spearheads', + 'spearmints', + 'spearworts', + 'specialest', + 'specialisation', + 'specialisations', + 'specialise', + 'specialised', + 'specialises', + 'specialising', + 'specialism', + 'specialisms', + 'specialist', + 'specialistic', + 'specialists', + 'specialities', + 'speciality', + 'specialization', + 'specializations', + 'specialize', + 'specialized', + 'specializes', + 'specializing', + 'specialness', + 'specialnesses', + 'specialties', + 'speciating', + 'speciation', + 'speciational', + 'speciations', + 'speciesism', + 'speciesisms', + 'specifiable', + 'specifically', + 'specification', + 'specifications', + 'specificities', + 'specificity', + 'specifiers', + 'specifying', + 'speciosities', + 'speciosity', + 'speciously', + 'speciousness', + 'speciousnesses', + 'spectacled', + 'spectacles', + 'spectacular', + 'spectacularly', + 'spectaculars', + 'spectating', + 'spectatorial', + 'spectators', + 'spectatorship', + 'spectatorships', + 'spectinomycin', + 'spectinomycins', + 'spectrally', + 'spectrofluorimeter', + 'spectrofluorimeters', + 'spectrofluorometer', + 'spectrofluorometers', + 'spectrofluorometric', + 'spectrofluorometries', + 'spectrofluorometry', + 'spectrogram', + 'spectrograms', + 'spectrograph', + 'spectrographic', + 'spectrographically', + 'spectrographies', + 'spectrographs', + 'spectrography', + 'spectroheliogram', + 'spectroheliograms', + 'spectroheliograph', + 'spectroheliographies', + 'spectroheliographs', + 'spectroheliography', + 'spectrohelioscope', + 'spectrohelioscopes', + 'spectrometer', + 'spectrometers', + 'spectrometric', + 'spectrometries', + 'spectrometry', + 'spectrophotometer', + 'spectrophotometers', + 'spectrophotometric', + 'spectrophotometrical', + 'spectrophotometrically', + 'spectrophotometries', + 'spectrophotometry', + 'spectroscope', + 'spectroscopes', + 'spectroscopic', + 'spectroscopically', + 'spectroscopies', + 'spectroscopist', + 'spectroscopists', + 'spectroscopy', + 'specularities', + 'specularity', + 'specularly', + 'speculated', + 'speculates', + 'speculating', + 'speculation', + 'speculations', + 'speculative', + 'speculatively', + 'speculator', + 'speculators', + 'speechified', + 'speechifies', + 'speechifying', + 'speechless', + 'speechlessly', + 'speechlessness', + 'speechlessnesses', + 'speechwriter', + 'speechwriters', + 'speedballed', + 'speedballing', + 'speedballs', + 'speedboating', + 'speedboatings', + 'speedboats', + 'speediness', + 'speedinesses', + 'speedometer', + 'speedometers', + 'speedsters', + 'speedwells', + 'speleological', + 'speleologies', + 'speleologist', + 'speleologists', + 'speleology', + 'spellbinder', + 'spellbinders', + 'spellbinding', + 'spellbindingly', + 'spellbinds', + 'spellbound', + 'spelunkers', + 'spelunking', + 'spelunkings', + 'spendthrift', + 'spendthrifts', + 'spermaceti', + 'spermacetis', + 'spermagonia', + 'spermagonium', + 'spermaries', + 'spermatheca', + 'spermathecae', + 'spermathecas', + 'spermatial', + 'spermatids', + 'spermatium', + 'spermatocyte', + 'spermatocytes', + 'spermatogeneses', + 'spermatogenesis', + 'spermatogenic', + 'spermatogonia', + 'spermatogonial', + 'spermatogonium', + 'spermatophore', + 'spermatophores', + 'spermatophyte', + 'spermatophytes', + 'spermatophytic', + 'spermatozoa', + 'spermatozoal', + 'spermatozoan', + 'spermatozoans', + 'spermatozoid', + 'spermatozoids', + 'spermatozoon', + 'spermicidal', + 'spermicide', + 'spermicides', + 'spermiogeneses', + 'spermiogenesis', + 'spermophile', + 'spermophiles', + 'sperrylite', + 'sperrylites', + 'spessartine', + 'spessartines', + 'spessartite', + 'spessartites', + 'sphalerite', + 'sphalerites', + 'sphenodons', + 'sphenodont', + 'sphenoidal', + 'sphenopsid', + 'sphenopsids', + 'spherically', + 'sphericities', + 'sphericity', + 'spheroidal', + 'spheroidally', + 'spherometer', + 'spherometers', + 'spheroplast', + 'spheroplasts', + 'spherulite', + 'spherulites', + 'spherulitic', + 'sphincteric', + 'sphincters', + 'sphingosine', + 'sphingosines', + 'sphinxlike', + 'sphygmograph', + 'sphygmographs', + 'sphygmomanometer', + 'sphygmomanometers', + 'sphygmomanometries', + 'sphygmomanometry', + 'sphygmuses', + 'spicebushes', + 'spicinesses', + 'spiculation', + 'spiculations', + 'spideriest', + 'spiderlike', + 'spiderwebs', + 'spiderwort', + 'spiderworts', + 'spiegeleisen', + 'spiegeleisens', + 'spiffiness', + 'spiffinesses', + 'spikenards', + 'spikinesses', + 'spillikins', + 'spillovers', + 'spinachlike', + 'spindliest', + 'spindrifts', + 'spinelessly', + 'spinelessness', + 'spinelessnesses', + 'spinifexes', + 'spininesses', + 'spinnakers', + 'spinnerets', + 'spinnerette', + 'spinnerettes', + 'spinneries', + 'spinosities', + 'spinsterhood', + 'spinsterhoods', + 'spinsterish', + 'spinsterly', + 'spinthariscope', + 'spinthariscopes', + 'spiracular', + 'spiralling', + 'spiritedly', + 'spiritedness', + 'spiritednesses', + 'spiritisms', + 'spiritistic', + 'spiritists', + 'spiritless', + 'spiritlessly', + 'spiritlessness', + 'spiritlessnesses', + 'spiritualism', + 'spiritualisms', + 'spiritualist', + 'spiritualistic', + 'spiritualists', + 'spiritualities', + 'spirituality', + 'spiritualization', + 'spiritualizations', + 'spiritualize', + 'spiritualized', + 'spiritualizes', + 'spiritualizing', + 'spiritually', + 'spiritualness', + 'spiritualnesses', + 'spirituals', + 'spiritualties', + 'spiritualty', + 'spirituelle', + 'spirituous', + 'spirochaete', + 'spirochaetes', + 'spirochetal', + 'spirochete', + 'spirochetes', + 'spirochetoses', + 'spirochetosis', + 'spirogyras', + 'spirometer', + 'spirometers', + 'spirometric', + 'spirometries', + 'spirometry', + 'spitefuller', + 'spitefullest', + 'spitefully', + 'spitefulness', + 'spitefulnesses', + 'spittlebug', + 'spittlebugs', + 'splanchnic', + 'splashboard', + 'splashboards', + 'splashdown', + 'splashdowns', + 'splashiest', + 'splashiness', + 'splashinesses', + 'splattered', + 'splattering', + 'splayfooted', + 'spleeniest', + 'spleenwort', + 'spleenworts', + 'splendider', + 'splendidest', + 'splendidly', + 'splendidness', + 'splendidnesses', + 'splendiferous', + 'splendiferously', + 'splendiferousness', + 'splendiferousnesses', + 'splendorous', + 'splendours', + 'splendrous', + 'splenectomies', + 'splenectomize', + 'splenectomized', + 'splenectomizes', + 'splenectomizing', + 'splenectomy', + 'splenetically', + 'splenetics', + 'splenomegalies', + 'splenomegaly', + 'spleuchans', + 'splintered', + 'splintering', + 'splotchier', + 'splotchiest', + 'splotching', + 'splurgiest', + 'spluttered', + 'splutterer', + 'splutterers', + 'spluttering', + 'spodumenes', + 'spoilsport', + 'spoilsports', + 'spokeshave', + 'spokeshaves', + 'spokesmanship', + 'spokesmanships', + 'spokespeople', + 'spokesperson', + 'spokespersons', + 'spokeswoman', + 'spokeswomen', + 'spoliating', + 'spoliation', + 'spoliations', + 'spoliators', + 'spondylites', + 'spondylitides', + 'spondylitis', + 'spondylitises', + 'spongeware', + 'spongewares', + 'sponginess', + 'sponginesses', + 'sponsorial', + 'sponsoring', + 'sponsorship', + 'sponsorships', + 'spontaneities', + 'spontaneity', + 'spontaneous', + 'spontaneously', + 'spontaneousness', + 'spontaneousnesses', + 'spooferies', + 'spookeries', + 'spookiness', + 'spookinesses', + 'spoonbills', + 'spoonerism', + 'spoonerisms', + 'sporadically', + 'sporangial', + 'sporangiophore', + 'sporangiophores', + 'sporangium', + 'sporicidal', + 'sporicides', + 'sporocarps', + 'sporocysts', + 'sporogeneses', + 'sporogenesis', + 'sporogenic', + 'sporogenous', + 'sporogonia', + 'sporogonic', + 'sporogonies', + 'sporogonium', + 'sporophore', + 'sporophores', + 'sporophyll', + 'sporophylls', + 'sporophyte', + 'sporophytes', + 'sporophytic', + 'sporopollenin', + 'sporopollenins', + 'sporotrichoses', + 'sporotrichosis', + 'sporotrichosises', + 'sporozoans', + 'sporozoite', + 'sporozoites', + 'sportfisherman', + 'sportfishermen', + 'sportfishing', + 'sportfishings', + 'sportfully', + 'sportfulness', + 'sportfulnesses', + 'sportiness', + 'sportinesses', + 'sportingly', + 'sportively', + 'sportiveness', + 'sportivenesses', + 'sportscast', + 'sportscaster', + 'sportscasters', + 'sportscasting', + 'sportscastings', + 'sportscasts', + 'sportsmanlike', + 'sportsmanly', + 'sportsmanship', + 'sportsmanships', + 'sportswear', + 'sportswoman', + 'sportswomen', + 'sportswriter', + 'sportswriters', + 'sportswriting', + 'sportswritings', + 'sporulated', + 'sporulates', + 'sporulating', + 'sporulation', + 'sporulations', + 'sporulative', + 'spotlessly', + 'spotlessness', + 'spotlessnesses', + 'spotlighted', + 'spotlighting', + 'spotlights', + 'spottiness', + 'spottinesses', + 'sprachgefuhl', + 'sprachgefuhls', + 'spraddling', + 'sprattling', + 'sprawliest', + 'spreadabilities', + 'spreadability', + 'spreadable', + 'spreadsheet', + 'spreadsheets', + 'spriggiest', + 'sprightful', + 'sprightfully', + 'sprightfulness', + 'sprightfulnesses', + 'sprightlier', + 'sprightliest', + 'sprightliness', + 'sprightlinesses', + 'springalds', + 'springboard', + 'springboards', + 'springboks', + 'springeing', + 'springhead', + 'springheads', + 'springhouse', + 'springhouses', + 'springiest', + 'springiness', + 'springinesses', + 'springings', + 'springlike', + 'springtail', + 'springtails', + 'springtide', + 'springtides', + 'springtime', + 'springtimes', + 'springwater', + 'springwaters', + 'springwood', + 'springwoods', + 'sprinklered', + 'sprinklers', + 'sprinkling', + 'sprinklings', + 'spritsails', + 'spruceness', + 'sprucenesses', + 'sprynesses', + 'spunbonded', + 'spunkiness', + 'spunkinesses', + 'spurgalled', + 'spurgalling', + 'spuriously', + 'spuriousness', + 'spuriousnesses', + 'sputterers', + 'sputtering', + 'spyglasses', + 'spymasters', + 'squabbiest', + 'squabblers', + 'squabbling', + 'squadroned', + 'squadroning', + 'squalidest', + 'squalidness', + 'squalidnesses', + 'squalliest', + 'squamation', + 'squamations', + 'squamosals', + 'squamulose', + 'squandered', + 'squanderer', + 'squanderers', + 'squandering', + 'squareness', + 'squarenesses', + 'squarishly', + 'squarishness', + 'squarishnesses', + 'squashiest', + 'squashiness', + 'squashinesses', + 'squatnesses', + 'squattered', + 'squattering', + 'squattiest', + 'squawfishes', + 'squawroots', + 'squeakiest', + 'squeamishly', + 'squeamishness', + 'squeamishnesses', + 'squeegeeing', + 'squeezabilities', + 'squeezability', + 'squeezable', + 'squelchers', + 'squelchier', + 'squelchiest', + 'squelching', + 'squeteague', + 'squiffiest', + 'squigglier', + 'squiggliest', + 'squiggling', + 'squilgeeing', + 'squinching', + 'squinniest', + 'squinnying', + 'squintiest', + 'squintingly', + 'squirarchies', + 'squirarchy', + 'squirearchies', + 'squirearchy', + 'squirmiest', + 'squirreled', + 'squirreling', + 'squirrelled', + 'squirrelling', + 'squirrelly', + 'squishiest', + 'squishiness', + 'squishinesses', + 'squooshier', + 'squooshiest', + 'squooshing', + 'stabilities', + 'stabilization', + 'stabilizations', + 'stabilized', + 'stabilizer', + 'stabilizers', + 'stabilizes', + 'stabilizing', + 'stablemate', + 'stablemates', + 'stableness', + 'stablenesses', + 'stablished', + 'stablishes', + 'stablishing', + 'stablishment', + 'stablishments', + 'stadtholder', + 'stadtholderate', + 'stadtholderates', + 'stadtholders', + 'stadtholdership', + 'stadtholderships', + 'stagecoach', + 'stagecoaches', + 'stagecraft', + 'stagecrafts', + 'stagehands', + 'stagestruck', + 'stagflation', + 'stagflationary', + 'stagflations', + 'staggerbush', + 'staggerbushes', + 'staggerers', + 'staggering', + 'staggeringly', + 'staghounds', + 'staginesses', + 'stagnancies', + 'stagnantly', + 'stagnating', + 'stagnation', + 'stagnations', + 'staidnesses', + 'stainabilities', + 'stainability', + 'stainlesses', + 'stainlessly', + 'stainproof', + 'staircases', + 'stairwells', + 'stakeholder', + 'stakeholders', + 'stalactite', + 'stalactites', + 'stalactitic', + 'stalagmite', + 'stalagmites', + 'stalagmitic', + 'stalemated', + 'stalemates', + 'stalemating', + 'stalenesses', + 'stallholder', + 'stallholders', + 'stalwartly', + 'stalwartness', + 'stalwartnesses', + 'stalworths', + 'staminodia', + 'staminodium', + 'stammerers', + 'stammering', + 'stampeders', + 'stampeding', + 'stanchioned', + 'stanchions', + 'standardbred', + 'standardbreds', + 'standardise', + 'standardised', + 'standardises', + 'standardising', + 'standardization', + 'standardizations', + 'standardize', + 'standardized', + 'standardizes', + 'standardizing', + 'standardless', + 'standardly', + 'standishes', + 'standoffish', + 'standoffishly', + 'standoffishness', + 'standoffishnesses', + 'standpatter', + 'standpatters', + 'standpattism', + 'standpattisms', + 'standpipes', + 'standpoint', + 'standpoints', + 'standstill', + 'standstills', + 'stannaries', + 'stapedectomies', + 'stapedectomy', + 'staphylinid', + 'staphylinids', + 'staphylococcal', + 'staphylococci', + 'staphylococcic', + 'staphylococcus', + 'starboarded', + 'starboarding', + 'starboards', + 'starchiest', + 'starchiness', + 'starchinesses', + 'starfishes', + 'starflower', + 'starflowers', + 'starfruits', + 'stargazers', + 'stargazing', + 'stargazings', + 'starknesses', + 'starlights', + 'starstruck', + 'startlement', + 'startlements', + 'startlingly', + 'starvation', + 'starvations', + 'starveling', + 'starvelings', + 'statecraft', + 'statecrafts', + 'statehoods', + 'statehouse', + 'statehouses', + 'statelessness', + 'statelessnesses', + 'stateliest', + 'stateliness', + 'statelinesses', + 'statements', + 'staterooms', + 'statesmanlike', + 'statesmanly', + 'statesmanship', + 'statesmanships', + 'statically', + 'stationary', + 'stationeries', + 'stationers', + 'stationery', + 'stationing', + 'stationmaster', + 'stationmasters', + 'statistical', + 'statistically', + 'statistician', + 'statisticians', + 'statistics', + 'statoblast', + 'statoblasts', + 'statocysts', + 'statoliths', + 'statoscope', + 'statoscopes', + 'statuaries', + 'statuesque', + 'statuesquely', + 'statuettes', + 'statutable', + 'statutorily', + 'staunchest', + 'staunching', + 'staunchness', + 'staunchnesses', + 'staurolite', + 'staurolites', + 'staurolitic', + 'stavesacre', + 'stavesacres', + 'steadfastly', + 'steadfastness', + 'steadfastnesses', + 'steadiness', + 'steadinesses', + 'steakhouse', + 'steakhouses', + 'stealthier', + 'stealthiest', + 'stealthily', + 'stealthiness', + 'stealthinesses', + 'steamboats', + 'steamering', + 'steamfitter', + 'steamfitters', + 'steaminess', + 'steaminesses', + 'steamrolled', + 'steamroller', + 'steamrollered', + 'steamrollering', + 'steamrollers', + 'steamrolling', + 'steamrolls', + 'steamships', + 'steatopygia', + 'steatopygias', + 'steatopygic', + 'steatopygous', + 'steatorrhea', + 'steatorrheas', + 'steelheads', + 'steeliness', + 'steelinesses', + 'steelmaker', + 'steelmakers', + 'steelmaking', + 'steelmakings', + 'steelworker', + 'steelworkers', + 'steelworks', + 'steelyards', + 'steepening', + 'steeplebush', + 'steeplebushes', + 'steeplechase', + 'steeplechaser', + 'steeplechasers', + 'steeplechases', + 'steeplechasing', + 'steeplechasings', + 'steeplejack', + 'steeplejacks', + 'steepnesses', + 'steerageway', + 'steerageways', + 'stegosaurs', + 'stegosaurus', + 'stegosauruses', + 'stellified', + 'stellifies', + 'stellifying', + 'stemmeries', + 'stenchiest', + 'stencilers', + 'stenciling', + 'stencilled', + 'stenciller', + 'stencillers', + 'stencilling', + 'stenobathic', + 'stenographer', + 'stenographers', + 'stenographic', + 'stenographically', + 'stenographies', + 'stenography', + 'stenohaline', + 'stenotherm', + 'stenothermal', + 'stenotherms', + 'stenotopic', + 'stenotyped', + 'stenotypes', + 'stenotypies', + 'stenotyping', + 'stenotypist', + 'stenotypists', + 'stentorian', + 'stepbrother', + 'stepbrothers', + 'stepchildren', + 'stepdaughter', + 'stepdaughters', + 'stepfamilies', + 'stepfamily', + 'stepfather', + 'stepfathers', + 'stephanotis', + 'stephanotises', + 'stepladder', + 'stepladders', + 'stepmother', + 'stepmothers', + 'stepparent', + 'stepparenting', + 'stepparentings', + 'stepparents', + 'stepsister', + 'stepsisters', + 'stercoraceous', + 'stereochemical', + 'stereochemistries', + 'stereochemistry', + 'stereogram', + 'stereograms', + 'stereograph', + 'stereographed', + 'stereographic', + 'stereographies', + 'stereographing', + 'stereographs', + 'stereography', + 'stereoisomer', + 'stereoisomeric', + 'stereoisomerism', + 'stereoisomerisms', + 'stereoisomers', + 'stereological', + 'stereologically', + 'stereologies', + 'stereology', + 'stereomicroscope', + 'stereomicroscopes', + 'stereomicroscopic', + 'stereomicroscopically', + 'stereophonic', + 'stereophonically', + 'stereophonies', + 'stereophony', + 'stereophotographic', + 'stereophotographies', + 'stereophotography', + 'stereopses', + 'stereopsides', + 'stereopsis', + 'stereopticon', + 'stereopticons', + 'stereoregular', + 'stereoregularities', + 'stereoregularity', + 'stereoscope', + 'stereoscopes', + 'stereoscopic', + 'stereoscopically', + 'stereoscopies', + 'stereoscopy', + 'stereospecific', + 'stereospecifically', + 'stereospecificities', + 'stereospecificity', + 'stereotactic', + 'stereotaxic', + 'stereotaxically', + 'stereotype', + 'stereotyped', + 'stereotyper', + 'stereotypers', + 'stereotypes', + 'stereotypic', + 'stereotypical', + 'stereotypically', + 'stereotypies', + 'stereotyping', + 'stereotypy', + 'sterically', + 'sterigmata', + 'sterilants', + 'sterilities', + 'sterilization', + 'sterilizations', + 'sterilized', + 'sterilizer', + 'sterilizers', + 'sterilizes', + 'sterilizing', + 'sterlingly', + 'sterlingness', + 'sterlingnesses', + 'sternforemost', + 'sternnesses', + 'sternocostal', + 'sternposts', + 'sternutation', + 'sternutations', + 'sternutator', + 'sternutators', + 'sternwards', + 'steroidogeneses', + 'steroidogenesis', + 'steroidogenic', + 'stertorous', + 'stertorously', + 'stethoscope', + 'stethoscopes', + 'stethoscopic', + 'stevedored', + 'stevedores', + 'stevedoring', + 'stewardess', + 'stewardesses', + 'stewarding', + 'stewardship', + 'stewardships', + 'stichomythia', + 'stichomythias', + 'stichomythic', + 'stichomythies', + 'stichomythy', + 'stickballs', + 'stickhandle', + 'stickhandled', + 'stickhandler', + 'stickhandlers', + 'stickhandles', + 'stickhandling', + 'stickiness', + 'stickinesses', + 'stickleback', + 'sticklebacks', + 'stickseeds', + 'sticktight', + 'sticktights', + 'stickweeds', + 'stickworks', + 'stiffeners', + 'stiffening', + 'stiffnesses', + 'stiflingly', + 'stigmasterol', + 'stigmasterols', + 'stigmatically', + 'stigmatics', + 'stigmatist', + 'stigmatists', + 'stigmatization', + 'stigmatizations', + 'stigmatize', + 'stigmatized', + 'stigmatizes', + 'stigmatizing', + 'stilbestrol', + 'stilbestrols', + 'stilettoed', + 'stilettoes', + 'stilettoing', + 'stillbirth', + 'stillbirths', + 'stillborns', + 'stillnesses', + 'stillrooms', + 'stiltedness', + 'stiltednesses', + 'stimulants', + 'stimulated', + 'stimulates', + 'stimulating', + 'stimulation', + 'stimulations', + 'stimulative', + 'stimulator', + 'stimulators', + 'stimulatory', + 'stingarees', + 'stinginess', + 'stinginesses', + 'stingingly', + 'stinkhorns', + 'stinkingly', + 'stinkweeds', + 'stinkwoods', + 'stipendiaries', + 'stipendiary', + 'stipulated', + 'stipulates', + 'stipulating', + 'stipulation', + 'stipulations', + 'stipulator', + 'stipulators', + 'stipulatory', + 'stirabouts', + 'stirringly', + 'stitcheries', + 'stitchwort', + 'stitchworts', + 'stochastic', + 'stochastically', + 'stockading', + 'stockbreeder', + 'stockbreeders', + 'stockbroker', + 'stockbrokerage', + 'stockbrokerages', + 'stockbrokers', + 'stockbroking', + 'stockbrokings', + 'stockfishes', + 'stockholder', + 'stockholders', + 'stockiness', + 'stockinesses', + 'stockinets', + 'stockinette', + 'stockinettes', + 'stockinged', + 'stockjobber', + 'stockjobbers', + 'stockjobbing', + 'stockjobbings', + 'stockkeeper', + 'stockkeepers', + 'stockpiled', + 'stockpiler', + 'stockpilers', + 'stockpiles', + 'stockpiling', + 'stockrooms', + 'stocktaking', + 'stocktakings', + 'stockyards', + 'stodginess', + 'stodginesses', + 'stoichiometric', + 'stoichiometrically', + 'stoichiometries', + 'stoichiometry', + 'stokeholds', + 'stolidities', + 'stoloniferous', + 'stomachache', + 'stomachaches', + 'stomachers', + 'stomachics', + 'stomaching', + 'stomatitides', + 'stomatitis', + 'stomatitises', + 'stomatopod', + 'stomatopods', + 'stomodaeal', + 'stomodaeum', + 'stomodaeums', + 'stomodeums', + 'stoneboats', + 'stonechats', + 'stonecrops', + 'stonecutter', + 'stonecutters', + 'stonecutting', + 'stonecuttings', + 'stonefishes', + 'stoneflies', + 'stonemason', + 'stonemasonries', + 'stonemasonry', + 'stonemasons', + 'stonewalled', + 'stonewaller', + 'stonewallers', + 'stonewalling', + 'stonewalls', + 'stonewares', + 'stonewashed', + 'stoneworks', + 'stoneworts', + 'stoninesses', + 'stonishing', + 'stonyhearted', + 'stoopballs', + 'stoplights', + 'stoppering', + 'stopwatches', + 'storefront', + 'storefronts', + 'storehouse', + 'storehouses', + 'storekeeper', + 'storekeepers', + 'storerooms', + 'storeships', + 'storksbill', + 'storksbills', + 'stormbound', + 'storminess', + 'storminesses', + 'storyboard', + 'storyboarded', + 'storyboarding', + 'storyboards', + 'storybooks', + 'storyteller', + 'storytellers', + 'storytelling', + 'storytellings', + 'stoutening', + 'stouthearted', + 'stoutheartedly', + 'stoutheartedness', + 'stoutheartednesses', + 'stoutnesses', + 'stovepipes', + 'strabismic', + 'strabismus', + 'strabismuses', + 'straddlers', + 'straddling', + 'stragglers', + 'stragglier', + 'straggliest', + 'straggling', + 'straightaway', + 'straightaways', + 'straightbred', + 'straightbreds', + 'straighted', + 'straightedge', + 'straightedges', + 'straighten', + 'straightened', + 'straightener', + 'straighteners', + 'straightening', + 'straightens', + 'straighter', + 'straightest', + 'straightforward', + 'straightforwardly', + 'straightforwardness', + 'straightforwardnesses', + 'straightforwards', + 'straighting', + 'straightish', + 'straightjacket', + 'straightjacketed', + 'straightjacketing', + 'straightjackets', + 'straightlaced', + 'straightly', + 'straightness', + 'straightnesses', + 'straightway', + 'straitened', + 'straitening', + 'straitjacket', + 'straitjacketed', + 'straitjacketing', + 'straitjackets', + 'straitlaced', + 'straitlacedly', + 'straitlacedness', + 'straitlacednesses', + 'straitness', + 'straitnesses', + 'stramashes', + 'stramonies', + 'stramonium', + 'stramoniums', + 'strandedness', + 'strandednesses', + 'strandline', + 'strandlines', + 'strangeness', + 'strangenesses', + 'strangered', + 'strangering', + 'stranglehold', + 'strangleholds', + 'stranglers', + 'strangling', + 'strangulate', + 'strangulated', + 'strangulates', + 'strangulating', + 'strangulation', + 'strangulations', + 'stranguries', + 'straphanger', + 'straphangers', + 'straphanging', + 'straphangs', + 'straplesses', + 'strappadoes', + 'strappados', + 'strappings', + 'stratagems', + 'strategical', + 'strategically', + 'strategies', + 'strategist', + 'strategists', + 'strategize', + 'strategized', + 'strategizes', + 'strategizing', + 'strathspey', + 'strathspeys', + 'stratification', + 'stratifications', + 'stratified', + 'stratifies', + 'stratiform', + 'stratifying', + 'stratigraphic', + 'stratigraphies', + 'stratigraphy', + 'stratocracies', + 'stratocracy', + 'stratocumuli', + 'stratocumulus', + 'stratosphere', + 'stratospheres', + 'stratospheric', + 'stratovolcano', + 'stratovolcanoes', + 'stratovolcanos', + 'stravaging', + 'stravaiged', + 'stravaiging', + 'strawberries', + 'strawberry', + 'strawflower', + 'strawflowers', + 'streakiest', + 'streakiness', + 'streakinesses', + 'streakings', + 'streambeds', + 'streamiest', + 'streamings', + 'streamlets', + 'streamline', + 'streamlined', + 'streamliner', + 'streamliners', + 'streamlines', + 'streamlining', + 'streamside', + 'streamsides', + 'streetcars', + 'streetlamp', + 'streetlamps', + 'streetlight', + 'streetlights', + 'streetscape', + 'streetscapes', + 'streetwalker', + 'streetwalkers', + 'streetwalking', + 'streetwalkings', + 'streetwise', + 'strengthen', + 'strengthened', + 'strengthener', + 'strengtheners', + 'strengthening', + 'strengthens', + 'strenuosities', + 'strenuosity', + 'strenuously', + 'strenuousness', + 'strenuousnesses', + 'streptobacilli', + 'streptobacillus', + 'streptococcal', + 'streptococci', + 'streptococcic', + 'streptococcus', + 'streptokinase', + 'streptokinases', + 'streptolysin', + 'streptolysins', + 'streptomyces', + 'streptomycete', + 'streptomycetes', + 'streptomycin', + 'streptomycins', + 'streptothricin', + 'streptothricins', + 'stressfully', + 'stressless', + 'stresslessness', + 'stresslessnesses', + 'stretchabilities', + 'stretchability', + 'stretchable', + 'stretchers', + 'stretchier', + 'stretchiest', + 'stretching', + 'strewments', + 'striations', + 'strickling', + 'strictness', + 'strictnesses', + 'strictures', + 'stridences', + 'stridencies', + 'stridently', + 'stridulate', + 'stridulated', + 'stridulates', + 'stridulating', + 'stridulation', + 'stridulations', + 'stridulatory', + 'stridulous', + 'stridulously', + 'strifeless', + 'strikebound', + 'strikebreaker', + 'strikebreakers', + 'strikebreaking', + 'strikebreakings', + 'strikeouts', + 'strikeover', + 'strikeovers', + 'strikingly', + 'stringcourse', + 'stringcourses', + 'stringencies', + 'stringency', + 'stringendo', + 'stringently', + 'stringhalt', + 'stringhalted', + 'stringhalts', + 'stringiest', + 'stringiness', + 'stringinesses', + 'stringings', + 'stringless', + 'stringpiece', + 'stringpieces', + 'stringybark', + 'stringybarks', + 'stripeless', + 'striplings', + 'strippable', + 'striptease', + 'stripteaser', + 'stripteasers', + 'stripteases', + 'strobilation', + 'strobilations', + 'stroboscope', + 'stroboscopes', + 'stroboscopic', + 'stroboscopically', + 'strobotron', + 'strobotrons', + 'stroganoff', + 'stromatolite', + 'stromatolites', + 'stromatolitic', + 'strongboxes', + 'stronghold', + 'strongholds', + 'strongyles', + 'strongyloidiases', + 'strongyloidiasis', + 'strongyloidoses', + 'strongyloidosis', + 'strongyloidosises', + 'strontianite', + 'strontianites', + 'strontiums', + 'strophanthin', + 'strophanthins', + 'stroppiest', + 'stroudings', + 'structural', + 'structuralism', + 'structuralisms', + 'structuralist', + 'structuralists', + 'structuralization', + 'structuralizations', + 'structuralize', + 'structuralized', + 'structuralizes', + 'structuralizing', + 'structurally', + 'structuration', + 'structurations', + 'structured', + 'structureless', + 'structurelessness', + 'structurelessnesses', + 'structures', + 'structuring', + 'strugglers', + 'struggling', + 'struthious', + 'strychnine', + 'strychnines', + 'stubbliest', + 'stubborner', + 'stubbornest', + 'stubbornly', + 'stubbornness', + 'stubbornnesses', + 'stuccowork', + 'stuccoworks', + 'studentship', + 'studentships', + 'studfishes', + 'studhorses', + 'studiedness', + 'studiednesses', + 'studiously', + 'studiousness', + 'studiousnesses', + 'stuffiness', + 'stuffinesses', + 'stultification', + 'stultifications', + 'stultified', + 'stultifies', + 'stultifying', + 'stumblebum', + 'stumblebums', + 'stumblingly', + 'stunningly', + 'stuntedness', + 'stuntednesses', + 'stuntwoman', + 'stuntwomen', + 'stupefaction', + 'stupefactions', + 'stupefying', + 'stupefyingly', + 'stupendous', + 'stupendously', + 'stupendousness', + 'stupendousnesses', + 'stupidities', + 'stupidness', + 'stupidnesses', + 'sturdiness', + 'sturdinesses', + 'stutterers', + 'stuttering', + 'stylebooks', + 'stylelessness', + 'stylelessnesses', + 'stylishness', + 'stylishnesses', + 'stylistically', + 'stylistics', + 'stylization', + 'stylizations', + 'stylobates', + 'stylographies', + 'stylography', + 'stylopodia', + 'stylopodium', + 'suabilities', + 'suasiveness', + 'suasivenesses', + 'suavenesses', + 'subacidness', + 'subacidnesses', + 'subacutely', + 'subadolescent', + 'subadolescents', + 'subaerially', + 'subagencies', + 'suballocation', + 'suballocations', + 'subalterns', + 'subantarctic', + 'subaquatic', + 'subaqueous', + 'subarachnoid', + 'subarachnoidal', + 'subarctics', + 'subassemblies', + 'subassembly', + 'subatmospheric', + 'subaudible', + 'subaudition', + 'subauditions', + 'subaverage', + 'subbasement', + 'subbasements', + 'subbituminous', + 'subbranches', + 'subcabinet', + 'subcapsular', + 'subcategories', + 'subcategorization', + 'subcategorizations', + 'subcategorize', + 'subcategorized', + 'subcategorizes', + 'subcategorizing', + 'subcategory', + 'subceiling', + 'subceilings', + 'subcellars', + 'subcellular', + 'subcenters', + 'subcentral', + 'subcentrally', + 'subchapter', + 'subchapters', + 'subchasers', + 'subclassed', + 'subclasses', + 'subclassification', + 'subclassifications', + 'subclassified', + 'subclassifies', + 'subclassify', + 'subclassifying', + 'subclassing', + 'subclavian', + 'subclavians', + 'subclimaxes', + 'subclinical', + 'subclinically', + 'subcluster', + 'subclusters', + 'subcollection', + 'subcollections', + 'subcollege', + 'subcolleges', + 'subcollegiate', + 'subcolonies', + 'subcommission', + 'subcommissions', + 'subcommittee', + 'subcommittees', + 'subcommunities', + 'subcommunity', + 'subcompact', + 'subcompacts', + 'subcomponent', + 'subcomponents', + 'subconscious', + 'subconsciouses', + 'subconsciously', + 'subconsciousness', + 'subconsciousnesses', + 'subcontinent', + 'subcontinental', + 'subcontinents', + 'subcontract', + 'subcontracted', + 'subcontracting', + 'subcontractor', + 'subcontractors', + 'subcontracts', + 'subcontraoctave', + 'subcontraoctaves', + 'subcontraries', + 'subcontrary', + 'subcooling', + 'subcordate', + 'subcoriaceous', + 'subcortical', + 'subcounties', + 'subcritical', + 'subcrustal', + 'subcultural', + 'subculturally', + 'subculture', + 'subcultured', + 'subcultures', + 'subculturing', + 'subcurative', + 'subcuratives', + 'subcutaneous', + 'subcutaneously', + 'subcutises', + 'subdeacons', + 'subdebutante', + 'subdebutantes', + 'subdecision', + 'subdecisions', + 'subdepartment', + 'subdepartments', + 'subdermally', + 'subdevelopment', + 'subdevelopments', + 'subdialect', + 'subdialects', + 'subdirector', + 'subdirectors', + 'subdiscipline', + 'subdisciplines', + 'subdistrict', + 'subdistricted', + 'subdistricting', + 'subdistricts', + 'subdividable', + 'subdivided', + 'subdivider', + 'subdividers', + 'subdivides', + 'subdividing', + 'subdivision', + 'subdivisions', + 'subdominant', + 'subdominants', + 'subducting', + 'subduction', + 'subductions', + 'subeconomies', + 'subeconomy', + 'subediting', + 'subeditorial', + 'subeditors', + 'subemployed', + 'subemployment', + 'subemployments', + 'subentries', + 'subepidermal', + 'suberising', + 'suberization', + 'suberizations', + 'suberizing', + 'subfamilies', + 'subfossils', + 'subfreezing', + 'subgeneration', + 'subgenerations', + 'subgenuses', + 'subglacial', + 'subglacially', + 'subgovernment', + 'subgovernments', + 'subheading', + 'subheadings', + 'subindexes', + 'subindices', + 'subindustries', + 'subindustry', + 'subinfeudate', + 'subinfeudated', + 'subinfeudates', + 'subinfeudating', + 'subinfeudation', + 'subinfeudations', + 'subinhibitory', + 'subinterval', + 'subintervals', + 'subirrigate', + 'subirrigated', + 'subirrigates', + 'subirrigating', + 'subirrigation', + 'subirrigations', + 'subjacencies', + 'subjacency', + 'subjacently', + 'subjecting', + 'subjection', + 'subjections', + 'subjective', + 'subjectively', + 'subjectiveness', + 'subjectivenesses', + 'subjectives', + 'subjectivise', + 'subjectivised', + 'subjectivises', + 'subjectivising', + 'subjectivism', + 'subjectivisms', + 'subjectivist', + 'subjectivistic', + 'subjectivists', + 'subjectivities', + 'subjectivity', + 'subjectivization', + 'subjectivizations', + 'subjectivize', + 'subjectivized', + 'subjectivizes', + 'subjectivizing', + 'subjectless', + 'subjoining', + 'subjugated', + 'subjugates', + 'subjugating', + 'subjugation', + 'subjugations', + 'subjugator', + 'subjugators', + 'subjunction', + 'subjunctions', + 'subjunctive', + 'subjunctives', + 'subkingdom', + 'subkingdoms', + 'sublanguage', + 'sublanguages', + 'sublations', + 'subleasing', + 'sublethally', + 'subletting', + 'sublibrarian', + 'sublibrarians', + 'sublicense', + 'sublicensed', + 'sublicenses', + 'sublicensing', + 'sublieutenant', + 'sublieutenants', + 'sublimable', + 'sublimated', + 'sublimates', + 'sublimating', + 'sublimation', + 'sublimations', + 'sublimeness', + 'sublimenesses', + 'subliminal', + 'subliminally', + 'sublimities', + 'sublingual', + 'subliteracies', + 'subliteracy', + 'subliterary', + 'subliterate', + 'subliterature', + 'subliteratures', + 'sublittoral', + 'sublittorals', + 'subluxation', + 'subluxations', + 'submanager', + 'submanagers', + 'submandibular', + 'submandibulars', + 'submarginal', + 'submarined', + 'submariner', + 'submariners', + 'submarines', + 'submarining', + 'submarkets', + 'submaxillaries', + 'submaxillary', + 'submaximal', + 'submediant', + 'submediants', + 'submergence', + 'submergences', + 'submergible', + 'submerging', + 'submersible', + 'submersibles', + 'submersing', + 'submersion', + 'submersions', + 'submetacentric', + 'submetacentrics', + 'submicrogram', + 'submicroscopic', + 'submicroscopically', + 'submillimeter', + 'subminiature', + 'subminimal', + 'subminister', + 'subministers', + 'submission', + 'submissions', + 'submissive', + 'submissively', + 'submissiveness', + 'submissivenesses', + 'submitochondrial', + 'submittals', + 'submitting', + 'submucosae', + 'submucosal', + 'submucosas', + 'submultiple', + 'submultiples', + 'submunition', + 'submunitions', + 'subnational', + 'subnetwork', + 'subnetworks', + 'subnormalities', + 'subnormality', + 'subnormally', + 'subnuclear', + 'suboceanic', + 'suboptimal', + 'suboptimization', + 'suboptimizations', + 'suboptimize', + 'suboptimized', + 'suboptimizes', + 'suboptimizing', + 'suboptimum', + 'suborbicular', + 'suborbital', + 'subordinate', + 'subordinated', + 'subordinately', + 'subordinateness', + 'subordinatenesses', + 'subordinates', + 'subordinating', + 'subordination', + 'subordinations', + 'subordinative', + 'subordinator', + 'subordinators', + 'suborganization', + 'suborganizations', + 'subornation', + 'subornations', + 'subparagraph', + 'subparagraphs', + 'subparallel', + 'subpenaing', + 'subperiods', + 'subpoenaed', + 'subpoenaing', + 'subpopulation', + 'subpopulations', + 'subpotencies', + 'subpotency', + 'subprimate', + 'subprimates', + 'subprincipal', + 'subprincipals', + 'subproblem', + 'subproblems', + 'subprocess', + 'subprocesses', + 'subproduct', + 'subproducts', + 'subprofessional', + 'subprofessionals', + 'subprogram', + 'subprograms', + 'subproject', + 'subprojects', + 'subproletariat', + 'subproletariats', + 'subrational', + 'subregional', + 'subregions', + 'subreption', + 'subreptions', + 'subreptitious', + 'subreptitiously', + 'subrogated', + 'subrogates', + 'subrogating', + 'subrogation', + 'subrogations', + 'subroutine', + 'subroutines', + 'subsampled', + 'subsamples', + 'subsampling', + 'subsatellite', + 'subsatellites', + 'subsaturated', + 'subsaturation', + 'subsaturations', + 'subscience', + 'subsciences', + 'subscribed', + 'subscriber', + 'subscribers', + 'subscribes', + 'subscribing', + 'subscription', + 'subscriptions', + 'subscripts', + 'subsecretaries', + 'subsecretary', + 'subsection', + 'subsections', + 'subsectors', + 'subsegment', + 'subsegments', + 'subseizure', + 'subseizures', + 'subsentence', + 'subsentences', + 'subsequence', + 'subsequences', + 'subsequent', + 'subsequently', + 'subsequents', + 'subservience', + 'subserviences', + 'subserviencies', + 'subserviency', + 'subservient', + 'subserviently', + 'subserving', + 'subsidence', + 'subsidences', + 'subsidiaries', + 'subsidiarily', + 'subsidiarities', + 'subsidiarity', + 'subsidiary', + 'subsidised', + 'subsidises', + 'subsidising', + 'subsidization', + 'subsidizations', + 'subsidized', + 'subsidizer', + 'subsidizers', + 'subsidizes', + 'subsidizing', + 'subsistence', + 'subsistences', + 'subsistent', + 'subsisting', + 'subsocieties', + 'subsociety', + 'subsoilers', + 'subsoiling', + 'subsonically', + 'subspecialist', + 'subspecialists', + 'subspecialize', + 'subspecialized', + 'subspecializes', + 'subspecializing', + 'subspecialties', + 'subspecialty', + 'subspecies', + 'subspecific', + 'substanceless', + 'substances', + 'substandard', + 'substantial', + 'substantialities', + 'substantiality', + 'substantially', + 'substantialness', + 'substantialnesses', + 'substantials', + 'substantiate', + 'substantiated', + 'substantiates', + 'substantiating', + 'substantiation', + 'substantiations', + 'substantiative', + 'substantival', + 'substantivally', + 'substantive', + 'substantively', + 'substantiveness', + 'substantivenesses', + 'substantives', + 'substantivize', + 'substantivized', + 'substantivizes', + 'substantivizing', + 'substation', + 'substations', + 'substituent', + 'substituents', + 'substitutabilities', + 'substitutability', + 'substitutable', + 'substitute', + 'substituted', + 'substitutes', + 'substituting', + 'substitution', + 'substitutional', + 'substitutionally', + 'substitutionary', + 'substitutions', + 'substitutive', + 'substitutively', + 'substrates', + 'substratum', + 'substructural', + 'substructure', + 'substructures', + 'subsumable', + 'subsumption', + 'subsumptions', + 'subsurface', + 'subsurfaces', + 'subsystems', + 'subtemperate', + 'subtenancies', + 'subtenancy', + 'subtenants', + 'subtending', + 'subterfuge', + 'subterfuges', + 'subterminal', + 'subterranean', + 'subterraneanly', + 'subterraneous', + 'subterraneously', + 'subtextual', + 'subtherapeutic', + 'subthreshold', + 'subtileness', + 'subtilenesses', + 'subtilisin', + 'subtilisins', + 'subtilization', + 'subtilizations', + 'subtilized', + 'subtilizes', + 'subtilizing', + 'subtilties', + 'subtitling', + 'subtleness', + 'subtlenesses', + 'subtleties', + 'subtotaled', + 'subtotaling', + 'subtotalled', + 'subtotalling', + 'subtotally', + 'subtracted', + 'subtracter', + 'subtracters', + 'subtracting', + 'subtraction', + 'subtractions', + 'subtractive', + 'subtrahend', + 'subtrahends', + 'subtreasuries', + 'subtreasury', + 'subtropical', + 'subtropics', + 'subumbrella', + 'subumbrellas', + 'suburbanise', + 'suburbanised', + 'suburbanises', + 'suburbanising', + 'suburbanite', + 'suburbanites', + 'suburbanization', + 'suburbanizations', + 'suburbanize', + 'suburbanized', + 'suburbanizes', + 'suburbanizing', + 'subvarieties', + 'subvariety', + 'subvassals', + 'subvention', + 'subventionary', + 'subventions', + 'subversion', + 'subversionary', + 'subversions', + 'subversive', + 'subversively', + 'subversiveness', + 'subversivenesses', + 'subversives', + 'subverters', + 'subverting', + 'subvisible', + 'subvocalization', + 'subvocalizations', + 'subvocalize', + 'subvocalized', + 'subvocalizes', + 'subvocalizing', + 'subvocally', + 'subwriters', + 'succedanea', + 'succedaneous', + 'succedaneum', + 'succedaneums', + 'succeeders', + 'succeeding', + 'successful', + 'successfully', + 'successfulness', + 'successfulnesses', + 'succession', + 'successional', + 'successionally', + 'successions', + 'successive', + 'successively', + 'successiveness', + 'successivenesses', + 'successors', + 'succinates', + 'succincter', + 'succinctest', + 'succinctly', + 'succinctness', + 'succinctnesses', + 'succinylcholine', + 'succinylcholines', + 'succotashes', + 'succouring', + 'succubuses', + 'succulence', + 'succulences', + 'succulently', + 'succulents', + 'succumbing', + 'succussing', + 'suchnesses', + 'suckfishes', + 'suctioning', + 'suctorians', + 'sudatories', + 'sudatorium', + 'sudatoriums', + 'suddenness', + 'suddennesses', + 'sudoriferous', + 'sudorifics', + 'sufferable', + 'sufferableness', + 'sufferablenesses', + 'sufferably', + 'sufferance', + 'sufferances', + 'sufferings', + 'sufficiencies', + 'sufficiency', + 'sufficient', + 'sufficiently', + 'suffixation', + 'suffixations', + 'sufflating', + 'suffocated', + 'suffocates', + 'suffocating', + 'suffocatingly', + 'suffocation', + 'suffocations', + 'suffocative', + 'suffragans', + 'suffragette', + 'suffragettes', + 'suffragist', + 'suffragists', + 'suffusions', + 'sugarberries', + 'sugarberry', + 'sugarcanes', + 'sugarcoated', + 'sugarcoating', + 'sugarcoats', + 'sugarhouse', + 'sugarhouses', + 'sugarloaves', + 'sugarplums', + 'suggesters', + 'suggestibilities', + 'suggestibility', + 'suggestible', + 'suggesting', + 'suggestion', + 'suggestions', + 'suggestive', + 'suggestively', + 'suggestiveness', + 'suggestivenesses', + 'suicidally', + 'suitabilities', + 'suitability', + 'suitableness', + 'suitablenesses', + 'sulfadiazine', + 'sulfadiazines', + 'sulfanilamide', + 'sulfanilamides', + 'sulfatases', + 'sulfhydryl', + 'sulfhydryls', + 'sulfinpyrazone', + 'sulfinpyrazones', + 'sulfonamide', + 'sulfonamides', + 'sulfonated', + 'sulfonates', + 'sulfonating', + 'sulfonation', + 'sulfonations', + 'sulfoniums', + 'sulfonylurea', + 'sulfonylureas', + 'sulfoxides', + 'sulfureted', + 'sulfureting', + 'sulfuretted', + 'sulfuretting', + 'sulfurized', + 'sulfurizes', + 'sulfurizing', + 'sulfurously', + 'sulfurousness', + 'sulfurousnesses', + 'sulkinesses', + 'sullenness', + 'sullennesses', + 'sulphating', + 'sulphureous', + 'sulphuring', + 'sulphurise', + 'sulphurised', + 'sulphurises', + 'sulphurising', + 'sulphurous', + 'sultanates', + 'sultanesses', + 'sultriness', + 'sultrinesses', + 'summabilities', + 'summability', + 'summarised', + 'summarises', + 'summarising', + 'summarizable', + 'summarization', + 'summarizations', + 'summarized', + 'summarizer', + 'summarizers', + 'summarizes', + 'summarizing', + 'summational', + 'summations', + 'summerhouse', + 'summerhouses', + 'summeriest', + 'summerlike', + 'summerlong', + 'summersault', + 'summersaulted', + 'summersaulting', + 'summersaults', + 'summertime', + 'summertimes', + 'summerwood', + 'summerwoods', + 'summiteers', + 'summitries', + 'summonable', + 'summonsing', + 'sumptuously', + 'sumptuousness', + 'sumptuousnesses', + 'sunbathers', + 'sunbathing', + 'sunbonnets', + 'sunburning', + 'sundowners', + 'sundresses', + 'sunflowers', + 'sunglasses', + 'sunninesses', + 'sunporches', + 'sunscreening', + 'sunscreens', + 'sunseekers', + 'sunstrokes', + 'superableness', + 'superablenesses', + 'superabound', + 'superabounded', + 'superabounding', + 'superabounds', + 'superabsorbent', + 'superabsorbents', + 'superabundance', + 'superabundances', + 'superabundant', + 'superabundantly', + 'superachiever', + 'superachievers', + 'superactivities', + 'superactivity', + 'superadded', + 'superadding', + 'superaddition', + 'superadditions', + 'superadministrator', + 'superadministrators', + 'superagencies', + 'superagency', + 'superagent', + 'superagents', + 'superalloy', + 'superalloys', + 'superaltern', + 'superalterns', + 'superambitious', + 'superannuate', + 'superannuated', + 'superannuates', + 'superannuating', + 'superannuation', + 'superannuations', + 'superathlete', + 'superathletes', + 'superbanks', + 'superbillionaire', + 'superbillionaires', + 'superbitch', + 'superbitches', + 'superblock', + 'superblocks', + 'superbness', + 'superbnesses', + 'superboard', + 'superboards', + 'superbomber', + 'superbombers', + 'superbombs', + 'superbright', + 'superbureaucrat', + 'superbureaucrats', + 'supercabinet', + 'supercabinets', + 'supercalender', + 'supercalendered', + 'supercalendering', + 'supercalenders', + 'supercargo', + 'supercargoes', + 'supercargos', + 'supercarrier', + 'supercarriers', + 'supercautious', + 'superceded', + 'supercedes', + 'superceding', + 'supercenter', + 'supercenters', + 'supercharge', + 'supercharged', + 'supercharger', + 'superchargers', + 'supercharges', + 'supercharging', + 'superchurch', + 'superchurches', + 'superciliary', + 'supercilious', + 'superciliously', + 'superciliousness', + 'superciliousnesses', + 'supercities', + 'supercivilization', + 'supercivilizations', + 'supercivilized', + 'superclass', + 'superclasses', + 'superclean', + 'superclubs', + 'supercluster', + 'superclusters', + 'supercoiled', + 'supercoiling', + 'supercoils', + 'supercollider', + 'supercolliders', + 'supercolossal', + 'supercomfortable', + 'supercompetitive', + 'supercomputer', + 'supercomputers', + 'superconduct', + 'superconducted', + 'superconducting', + 'superconductive', + 'superconductivities', + 'superconductivity', + 'superconductor', + 'superconductors', + 'superconducts', + 'superconfident', + 'superconglomerate', + 'superconglomerates', + 'superconservative', + 'supercontinent', + 'supercontinents', + 'superconvenient', + 'supercooled', + 'supercooling', + 'supercools', + 'supercorporation', + 'supercorporations', + 'supercriminal', + 'supercriminals', + 'supercritical', + 'supercurrent', + 'supercurrents', + 'superdeluxe', + 'superdiplomat', + 'superdiplomats', + 'supereffective', + 'superefficiencies', + 'superefficiency', + 'superefficient', + 'superegoist', + 'superegoists', + 'superelevate', + 'superelevated', + 'superelevates', + 'superelevating', + 'superelevation', + 'superelevations', + 'superelite', + 'superelites', + 'supereminence', + 'supereminences', + 'supereminent', + 'supereminently', + 'superencipher', + 'superenciphered', + 'superenciphering', + 'superenciphers', + 'supererogation', + 'supererogations', + 'supererogatory', + 'superettes', + 'superexpensive', + 'superexpress', + 'superexpresses', + 'superfamilies', + 'superfamily', + 'superfarms', + 'superfatted', + 'superfecundation', + 'superfecundations', + 'superfetation', + 'superfetations', + 'superficial', + 'superficialities', + 'superficiality', + 'superficially', + 'superficies', + 'superfirms', + 'superfixes', + 'superflack', + 'superflacks', + 'superfluid', + 'superfluidities', + 'superfluidity', + 'superfluids', + 'superfluities', + 'superfluity', + 'superfluous', + 'superfluously', + 'superfluousness', + 'superfluousnesses', + 'superfunds', + 'supergenes', + 'supergiant', + 'supergiants', + 'superglues', + 'supergovernment', + 'supergovernments', + 'supergraphics', + 'supergravities', + 'supergravity', + 'supergroup', + 'supergroups', + 'supergrowth', + 'supergrowths', + 'superharden', + 'superhardened', + 'superhardening', + 'superhardens', + 'superheated', + 'superheater', + 'superheaters', + 'superheating', + 'superheats', + 'superheavy', + 'superheavyweight', + 'superheavyweights', + 'superhelical', + 'superhelices', + 'superhelix', + 'superhelixes', + 'superheroes', + 'superheroine', + 'superheroines', + 'superheterodyne', + 'superheterodynes', + 'superhighway', + 'superhighways', + 'superhuman', + 'superhumanities', + 'superhumanity', + 'superhumanly', + 'superhumanness', + 'superhumannesses', + 'superhyped', + 'superhypes', + 'superhyping', + 'superimposable', + 'superimpose', + 'superimposed', + 'superimposes', + 'superimposing', + 'superimposition', + 'superimpositions', + 'superincumbent', + 'superincumbently', + 'superindividual', + 'superinduce', + 'superinduced', + 'superinduces', + 'superinducing', + 'superinduction', + 'superinductions', + 'superinfect', + 'superinfected', + 'superinfecting', + 'superinfection', + 'superinfections', + 'superinfects', + 'superinsulated', + 'superintellectual', + 'superintellectuals', + 'superintelligence', + 'superintelligences', + 'superintelligent', + 'superintend', + 'superintended', + 'superintendence', + 'superintendences', + 'superintendencies', + 'superintendency', + 'superintendent', + 'superintendents', + 'superintending', + 'superintends', + 'superintensities', + 'superintensity', + 'superiorities', + 'superiority', + 'superiorly', + 'superjacent', + 'superjocks', + 'superjumbo', + 'superlarge', + 'superlative', + 'superlatively', + 'superlativeness', + 'superlativenesses', + 'superlatives', + 'superlawyer', + 'superlawyers', + 'superlight', + 'superliner', + 'superliners', + 'superlobbyist', + 'superlobbyists', + 'superloyalist', + 'superloyalists', + 'superlunar', + 'superlunary', + 'superluxuries', + 'superluxurious', + 'superluxury', + 'superlying', + 'supermacho', + 'supermachos', + 'supermajorities', + 'supermajority', + 'supermales', + 'supermarket', + 'supermarkets', + 'supermasculine', + 'supermassive', + 'supermicro', + 'supermicros', + 'supermilitant', + 'supermillionaire', + 'supermillionaires', + 'superminds', + 'superminicomputer', + 'superminicomputers', + 'superminis', + 'superminister', + 'superministers', + 'supermodel', + 'supermodels', + 'supermodern', + 'supernally', + 'supernatant', + 'supernatants', + 'supernation', + 'supernational', + 'supernations', + 'supernatural', + 'supernaturalism', + 'supernaturalisms', + 'supernaturalist', + 'supernaturalistic', + 'supernaturalists', + 'supernaturally', + 'supernaturalness', + 'supernaturalnesses', + 'supernaturals', + 'supernature', + 'supernatures', + 'supernormal', + 'supernormalities', + 'supernormality', + 'supernormally', + 'supernovae', + 'supernovas', + 'supernumeraries', + 'supernumerary', + 'supernutrition', + 'supernutritions', + 'superorder', + 'superorders', + 'superordinate', + 'superorganic', + 'superorganism', + 'superorganisms', + 'superorgasm', + 'superorgasms', + 'superovulate', + 'superovulated', + 'superovulates', + 'superovulating', + 'superovulation', + 'superovulations', + 'superoxide', + 'superoxides', + 'superparasitism', + 'superparasitisms', + 'superpatriot', + 'superpatriotic', + 'superpatriotism', + 'superpatriotisms', + 'superpatriots', + 'superperson', + 'superpersonal', + 'superpersons', + 'superphenomena', + 'superphenomenon', + 'superphosphate', + 'superphosphates', + 'superphysical', + 'superpimps', + 'superplane', + 'superplanes', + 'superplastic', + 'superplasticities', + 'superplasticity', + 'superplayer', + 'superplayers', + 'superpolite', + 'superports', + 'superposable', + 'superposed', + 'superposes', + 'superposing', + 'superposition', + 'superpositions', + 'superpower', + 'superpowered', + 'superpowerful', + 'superpowers', + 'superpremium', + 'superpremiums', + 'superprofit', + 'superprofits', + 'superqualities', + 'superquality', + 'superraces', + 'superrealism', + 'superrealisms', + 'superregenerative', + 'superregional', + 'superroads', + 'superromantic', + 'superromanticism', + 'superromanticisms', + 'supersales', + 'supersalesman', + 'supersalesmen', + 'supersaturate', + 'supersaturated', + 'supersaturates', + 'supersaturating', + 'supersaturation', + 'supersaturations', + 'superscale', + 'superscales', + 'superschool', + 'superschools', + 'superscout', + 'superscouts', + 'superscribe', + 'superscribed', + 'superscribes', + 'superscribing', + 'superscript', + 'superscription', + 'superscriptions', + 'superscripts', + 'supersecrecies', + 'supersecrecy', + 'supersecret', + 'supersecrets', + 'supersedeas', + 'superseded', + 'superseder', + 'superseders', + 'supersedes', + 'superseding', + 'supersedure', + 'supersedures', + 'superseller', + 'supersellers', + 'supersells', + 'supersensible', + 'supersensitive', + 'supersensitively', + 'supersensitivities', + 'supersensitivity', + 'supersensory', + 'superserviceable', + 'supersession', + 'supersessions', + 'supersexes', + 'supersexualities', + 'supersexuality', + 'supersharp', + 'supershows', + 'supersinger', + 'supersingers', + 'supersized', + 'supersleuth', + 'supersleuths', + 'superslick', + 'supersmart', + 'supersmooth', + 'supersonic', + 'supersonically', + 'supersonics', + 'supersophisticated', + 'superspecial', + 'superspecialist', + 'superspecialists', + 'superspecialization', + 'superspecializations', + 'superspecialized', + 'superspecials', + 'superspectacle', + 'superspectacles', + 'superspectacular', + 'superspectaculars', + 'superspeculation', + 'superspeculations', + 'superspies', + 'superstardom', + 'superstardoms', + 'superstars', + 'superstate', + 'superstates', + 'superstation', + 'superstations', + 'superstimulate', + 'superstimulated', + 'superstimulates', + 'superstimulating', + 'superstition', + 'superstitions', + 'superstitious', + 'superstitiously', + 'superstock', + 'superstocks', + 'superstore', + 'superstores', + 'superstrata', + 'superstratum', + 'superstrength', + 'superstrengths', + 'superstrike', + 'superstrikes', + 'superstring', + 'superstrings', + 'superstrong', + 'superstructural', + 'superstructure', + 'superstructures', + 'superstuds', + 'supersubstantial', + 'supersubtle', + 'supersubtleties', + 'supersubtlety', + 'supersurgeon', + 'supersurgeons', + 'supersweet', + 'supersymmetric', + 'supersymmetries', + 'supersymmetry', + 'supersystem', + 'supersystems', + 'supertanker', + 'supertankers', + 'supertaxes', + 'superterrific', + 'superthick', + 'superthriller', + 'superthrillers', + 'supertight', + 'supertonic', + 'supertonics', + 'supervened', + 'supervenes', + 'supervenient', + 'supervening', + 'supervention', + 'superventions', + 'supervirile', + 'supervirtuosi', + 'supervirtuoso', + 'supervirtuosos', + 'supervised', + 'supervises', + 'supervising', + 'supervision', + 'supervisions', + 'supervisor', + 'supervisors', + 'supervisory', + 'superwaves', + 'superweapon', + 'superweapons', + 'superwives', + 'superwoman', + 'superwomen', + 'supinating', + 'supination', + 'supinations', + 'supinators', + 'supineness', + 'supinenesses', + 'suppertime', + 'suppertimes', + 'supplantation', + 'supplantations', + 'supplanted', + 'supplanter', + 'supplanters', + 'supplanting', + 'supplejack', + 'supplejacks', + 'supplement', + 'supplemental', + 'supplementals', + 'supplementary', + 'supplementation', + 'supplementations', + 'supplemented', + 'supplementer', + 'supplementers', + 'supplementing', + 'supplements', + 'suppleness', + 'supplenesses', + 'suppletion', + 'suppletions', + 'suppletive', + 'suppletory', + 'suppliance', + 'suppliances', + 'suppliantly', + 'suppliants', + 'supplicant', + 'supplicants', + 'supplicate', + 'supplicated', + 'supplicates', + 'supplicating', + 'supplication', + 'supplications', + 'supplicatory', + 'supportabilities', + 'supportability', + 'supportable', + 'supporters', + 'supporting', + 'supportive', + 'supportiveness', + 'supportivenesses', + 'supposable', + 'supposably', + 'supposedly', + 'supposition', + 'suppositional', + 'suppositions', + 'suppositious', + 'supposititious', + 'supposititiously', + 'suppositories', + 'suppository', + 'suppressant', + 'suppressants', + 'suppressed', + 'suppresses', + 'suppressibilities', + 'suppressibility', + 'suppressible', + 'suppressing', + 'suppression', + 'suppressions', + 'suppressive', + 'suppressiveness', + 'suppressivenesses', + 'suppressor', + 'suppressors', + 'suppurated', + 'suppurates', + 'suppurating', + 'suppuration', + 'suppurations', + 'suppurative', + 'supraliminal', + 'supramolecular', + 'supranational', + 'supranationalism', + 'supranationalisms', + 'supranationalist', + 'supranationalists', + 'supranationalities', + 'supranationality', + 'supraoptic', + 'supraorbital', + 'suprarational', + 'suprarenal', + 'suprarenals', + 'suprasegmental', + 'supraventricular', + 'supravital', + 'supravitally', + 'supremacies', + 'supremacist', + 'supremacists', + 'suprematism', + 'suprematisms', + 'suprematist', + 'suprematists', + 'supremeness', + 'supremenesses', + 'surceasing', + 'surcharged', + 'surcharges', + 'surcharging', + 'surcingles', + 'surefooted', + 'surefootedly', + 'surefootedness', + 'surefootednesses', + 'surenesses', + 'suretyship', + 'suretyships', + 'surfacings', + 'surfactant', + 'surfactants', + 'surfboarded', + 'surfboarder', + 'surfboarders', + 'surfboarding', + 'surfboards', + 'surfeiters', + 'surfeiting', + 'surffishes', + 'surfperches', + 'surgeonfish', + 'surgeonfishes', + 'surgically', + 'surjection', + 'surjections', + 'surjective', + 'surlinesses', + 'surmountable', + 'surmounted', + 'surmounting', + 'surpassable', + 'surpassing', + 'surpassingly', + 'surplusage', + 'surplusages', + 'surprinted', + 'surprinting', + 'surprisals', + 'surprisers', + 'surprising', + 'surprisingly', + 'surprizing', + 'surrealism', + 'surrealisms', + 'surrealist', + 'surrealistic', + 'surrealistically', + 'surrealists', + 'surrebutter', + 'surrebutters', + 'surrejoinder', + 'surrejoinders', + 'surrendered', + 'surrendering', + 'surrenders', + 'surreptitious', + 'surreptitiously', + 'surrogacies', + 'surrogated', + 'surrogates', + 'surrogating', + 'surrounded', + 'surrounding', + 'surroundings', + 'surveillance', + 'surveillances', + 'surveillant', + 'surveillants', + 'surveilled', + 'surveilling', + 'surveyings', + 'survivabilities', + 'survivability', + 'survivable', + 'survivalist', + 'survivalists', + 'survivance', + 'survivances', + 'survivorship', + 'survivorships', + 'susceptibilities', + 'susceptibility', + 'susceptible', + 'susceptibleness', + 'susceptiblenesses', + 'susceptibly', + 'susceptive', + 'susceptiveness', + 'susceptivenesses', + 'susceptivities', + 'susceptivity', + 'suspecting', + 'suspendered', + 'suspenders', + 'suspending', + 'suspenseful', + 'suspensefully', + 'suspensefulness', + 'suspensefulnesses', + 'suspenseless', + 'suspensers', + 'suspension', + 'suspensions', + 'suspensive', + 'suspensively', + 'suspensories', + 'suspensors', + 'suspensory', + 'suspicioned', + 'suspicioning', + 'suspicions', + 'suspicious', + 'suspiciously', + 'suspiciousness', + 'suspiciousnesses', + 'suspiration', + 'suspirations', + 'sustainabilities', + 'sustainability', + 'sustainable', + 'sustainedly', + 'sustainers', + 'sustaining', + 'sustenance', + 'sustenances', + 'sustentation', + 'sustentations', + 'sustentative', + 'susurration', + 'susurrations', + 'susurruses', + 'suzerainties', + 'suzerainty', + 'svelteness', + 'sveltenesses', + 'swaggerers', + 'swaggering', + 'swaggeringly', + 'swainishness', + 'swainishnesses', + 'swallowable', + 'swallowers', + 'swallowing', + 'swallowtail', + 'swallowtails', + 'swampiness', + 'swampinesses', + 'swamplands', + 'swankiness', + 'swankinesses', + 'swanneries', + 'swansdowns', + 'swarajists', + 'swarthiest', + 'swarthiness', + 'swarthinesses', + 'swartnesses', + 'swashbuckle', + 'swashbuckled', + 'swashbuckler', + 'swashbucklers', + 'swashbuckles', + 'swashbuckling', + 'swaybacked', + 'swearwords', + 'sweatbands', + 'sweatboxes', + 'sweaterdress', + 'sweaterdresses', + 'sweatiness', + 'sweatinesses', + 'sweatpants', + 'sweatshirt', + 'sweatshirts', + 'sweatshops', + 'sweepbacks', + 'sweepingly', + 'sweepingness', + 'sweepingnesses', + 'sweepstakes', + 'sweetbread', + 'sweetbreads', + 'sweetbriar', + 'sweetbriars', + 'sweetbrier', + 'sweetbriers', + 'sweeteners', + 'sweetening', + 'sweetenings', + 'sweetheart', + 'sweethearts', + 'sweetishly', + 'sweetmeats', + 'sweetnesses', + 'sweetshops', + 'swellfishes', + 'swellheaded', + 'swellheadedness', + 'swellheadednesses', + 'swellheads', + 'sweltering', + 'swelteringly', + 'sweltriest', + 'swiftnesses', + 'swimmerets', + 'swimmingly', + 'swineherds', + 'swinepoxes', + 'swingingest', + 'swingingly', + 'swingletree', + 'swingletrees', + 'swinishness', + 'swinishnesses', + 'swirlingly', + 'swishingly', + 'switchable', + 'switchback', + 'switchbacked', + 'switchbacking', + 'switchbacks', + 'switchblade', + 'switchblades', + 'switchboard', + 'switchboards', + 'switcheroo', + 'switcheroos', + 'switchgrass', + 'switchgrasses', + 'switchyard', + 'switchyards', + 'swithering', + 'swivelling', + 'swooningly', + 'swoopstake', + 'swordfishes', + 'swordplayer', + 'swordplayers', + 'swordplays', + 'swordsmanship', + 'swordsmanships', + 'swordtails', + 'sybaritically', + 'sybaritism', + 'sybaritisms', + 'sycophancies', + 'sycophancy', + 'sycophantic', + 'sycophantically', + 'sycophantish', + 'sycophantishly', + 'sycophantism', + 'sycophantisms', + 'sycophantly', + 'sycophants', + 'syllabaries', + 'syllabically', + 'syllabicate', + 'syllabicated', + 'syllabicates', + 'syllabicating', + 'syllabication', + 'syllabications', + 'syllabicities', + 'syllabicity', + 'syllabification', + 'syllabifications', + 'syllabified', + 'syllabifies', + 'syllabifying', + 'syllabling', + 'syllabuses', + 'syllogisms', + 'syllogistic', + 'syllogistically', + 'syllogists', + 'syllogized', + 'syllogizes', + 'syllogizing', + 'sylvanites', + 'sylviculture', + 'sylvicultures', + 'symbiotically', + 'symbolical', + 'symbolically', + 'symbolised', + 'symbolises', + 'symbolising', + 'symbolisms', + 'symbolistic', + 'symbolists', + 'symbolization', + 'symbolizations', + 'symbolized', + 'symbolizer', + 'symbolizers', + 'symbolizes', + 'symbolizing', + 'symbolling', + 'symbologies', + 'symmetallism', + 'symmetallisms', + 'symmetrical', + 'symmetrically', + 'symmetricalness', + 'symmetricalnesses', + 'symmetries', + 'symmetrization', + 'symmetrizations', + 'symmetrize', + 'symmetrized', + 'symmetrizes', + 'symmetrizing', + 'sympathectomies', + 'sympathectomized', + 'sympathectomy', + 'sympathetic', + 'sympathetically', + 'sympathetics', + 'sympathies', + 'sympathins', + 'sympathise', + 'sympathised', + 'sympathises', + 'sympathising', + 'sympathize', + 'sympathized', + 'sympathizer', + 'sympathizers', + 'sympathizes', + 'sympathizing', + 'sympatholytic', + 'sympatholytics', + 'sympathomimetic', + 'sympathomimetics', + 'sympatrically', + 'sympatries', + 'sympetalies', + 'sympetalous', + 'symphonically', + 'symphonies', + 'symphonious', + 'symphoniously', + 'symphonist', + 'symphonists', + 'symphyseal', + 'symphysial', + 'symposiarch', + 'symposiarchs', + 'symposiast', + 'symposiasts', + 'symposiums', + 'symptomatic', + 'symptomatically', + 'symptomatologic', + 'symptomatological', + 'symptomatologically', + 'symptomatologies', + 'symptomatology', + 'symptomless', + 'synaereses', + 'synaeresis', + 'synaestheses', + 'synaesthesia', + 'synaesthesias', + 'synaesthesis', + 'synagogues', + 'synalephas', + 'synaloepha', + 'synaloephas', + 'synaptically', + 'synaptosomal', + 'synaptosome', + 'synaptosomes', + 'synarthrodial', + 'synarthroses', + 'synarthrosis', + 'syncarpies', + 'syncarpous', + 'syncategorematic', + 'syncategorematically', + 'synchrocyclotron', + 'synchrocyclotrons', + 'synchromesh', + 'synchromeshes', + 'synchronal', + 'synchroneities', + 'synchroneity', + 'synchronic', + 'synchronical', + 'synchronically', + 'synchronicities', + 'synchronicity', + 'synchronies', + 'synchronisation', + 'synchronisations', + 'synchronise', + 'synchronised', + 'synchronises', + 'synchronising', + 'synchronism', + 'synchronisms', + 'synchronistic', + 'synchronization', + 'synchronizations', + 'synchronize', + 'synchronized', + 'synchronizer', + 'synchronizers', + 'synchronizes', + 'synchronizing', + 'synchronous', + 'synchronously', + 'synchronousness', + 'synchronousnesses', + 'synchroscope', + 'synchroscopes', + 'synchrotron', + 'synchrotrons', + 'syncopated', + 'syncopates', + 'syncopating', + 'syncopation', + 'syncopations', + 'syncopative', + 'syncopator', + 'syncopators', + 'syncretise', + 'syncretised', + 'syncretises', + 'syncretising', + 'syncretism', + 'syncretisms', + 'syncretist', + 'syncretistic', + 'syncretists', + 'syncretize', + 'syncretized', + 'syncretizes', + 'syncretizing', + 'syndactylies', + 'syndactylism', + 'syndactylisms', + 'syndactyly', + 'syndesises', + 'syndesmoses', + 'syndesmosis', + 'syndetically', + 'syndicalism', + 'syndicalisms', + 'syndicalist', + 'syndicalists', + 'syndicated', + 'syndicates', + 'syndicating', + 'syndication', + 'syndications', + 'syndicator', + 'syndicators', + 'synecdoche', + 'synecdoches', + 'synecdochic', + 'synecdochical', + 'synecdochically', + 'synecological', + 'synecologies', + 'synecology', + 'synergetic', + 'synergically', + 'synergisms', + 'synergistic', + 'synergistically', + 'synergists', + 'synesthesia', + 'synesthesias', + 'synesthetic', + 'synkaryons', + 'synonymical', + 'synonymies', + 'synonymist', + 'synonymists', + 'synonymities', + 'synonymity', + 'synonymize', + 'synonymized', + 'synonymizes', + 'synonymizing', + 'synonymous', + 'synonymously', + 'synopsized', + 'synopsizes', + 'synopsizing', + 'synoptical', + 'synoptically', + 'synostoses', + 'synostosis', + 'synovitises', + 'syntactical', + 'syntactically', + 'syntactics', + 'syntagmata', + 'syntagmatic', + 'synthesist', + 'synthesists', + 'synthesize', + 'synthesized', + 'synthesizer', + 'synthesizers', + 'synthesizes', + 'synthesizing', + 'synthetase', + 'synthetases', + 'synthetically', + 'synthetics', + 'syphilises', + 'syphilitic', + 'syphilitics', + 'syringomyelia', + 'syringomyelias', + 'syringomyelic', + 'systematic', + 'systematically', + 'systematicness', + 'systematicnesses', + 'systematics', + 'systematise', + 'systematised', + 'systematises', + 'systematising', + 'systematism', + 'systematisms', + 'systematist', + 'systematists', + 'systematization', + 'systematizations', + 'systematize', + 'systematized', + 'systematizer', + 'systematizers', + 'systematizes', + 'systematizing', + 'systemically', + 'systemization', + 'systemizations', + 'systemized', + 'systemizes', + 'systemizing', + 'systemless', + 'tabboulehs', + 'tabernacle', + 'tabernacled', + 'tabernacles', + 'tabernacling', + 'tabernacular', + 'tablatures', + 'tablecloth', + 'tablecloths', + 'tablelands', + 'tablemates', + 'tablespoon', + 'tablespoonful', + 'tablespoonfuls', + 'tablespoons', + 'tablespoonsful', + 'tabletting', + 'tablewares', + 'tabulating', + 'tabulation', + 'tabulations', + 'tabulators', + 'tacamahacs', + 'tachistoscope', + 'tachistoscopes', + 'tachistoscopic', + 'tachistoscopically', + 'tachometer', + 'tachometers', + 'tachyarrhythmia', + 'tachyarrhythmias', + 'tachycardia', + 'tachycardias', + 'tacitnesses', + 'taciturnities', + 'taciturnity', + 'tackboards', + 'tackifiers', + 'tackifying', + 'tackinesses', + 'tactfulness', + 'tactfulnesses', + 'tactically', + 'tacticians', + 'tactilities', + 'tactlessly', + 'tactlessness', + 'tactlessnesses', + 'taffetized', + 'tagliatelle', + 'tagliatelles', + 'tailboards', + 'tailcoated', + 'tailenders', + 'tailgaters', + 'tailgating', + 'taillights', + 'tailorbird', + 'tailorbirds', + 'tailorings', + 'tailpieces', + 'tailplanes', + 'tailslides', + 'tailwaters', + 'talebearer', + 'talebearers', + 'talebearing', + 'talebearings', + 'talentless', + 'talismanic', + 'talismanically', + 'talkathons', + 'talkatively', + 'talkativeness', + 'talkativenesses', + 'talkinesses', + 'tallnesses', + 'tallyhoing', + 'talmudisms', + 'tamarillos', + 'tambourers', + 'tambourine', + 'tambourines', + 'tambouring', + 'tamenesses', + 'tamoxifens', + 'tamperproof', + 'tangencies', + 'tangential', + 'tangentially', + 'tangerines', + 'tangibilities', + 'tangibility', + 'tangibleness', + 'tangiblenesses', + 'tanglement', + 'tanglements', + 'tanistries', + 'tantalates', + 'tantalised', + 'tantalises', + 'tantalising', + 'tantalites', + 'tantalized', + 'tantalizer', + 'tantalizers', + 'tantalizes', + 'tantalizing', + 'tantalizingly', + 'tantaluses', + 'tantamount', + 'tanzanites', + 'taperstick', + 'tapersticks', + 'tapestried', + 'tapestries', + 'tapestrying', + 'taphonomic', + 'taphonomies', + 'taphonomist', + 'taphonomists', + 'taradiddle', + 'taradiddles', + 'tarantases', + 'tarantella', + 'tarantellas', + 'tarantisms', + 'tarantulae', + 'tarantulas', + 'tarbooshes', + 'tardigrade', + 'tardigrades', + 'tardinesses', + 'targetable', + 'tarmacadam', + 'tarmacadams', + 'tarnations', + 'tarnishable', + 'tarnishing', + 'tarpaulins', + 'tarradiddle', + 'tarradiddles', + 'tarriances', + 'tarsometatarsi', + 'tarsometatarsus', + 'tartnesses', + 'taskmaster', + 'taskmasters', + 'taskmistress', + 'taskmistresses', + 'tasselling', + 'tastefully', + 'tastefulness', + 'tastefulnesses', + 'tastelessly', + 'tastelessness', + 'tastelessnesses', + 'tastemaker', + 'tastemakers', + 'tastinesses', + 'tatterdemalion', + 'tatterdemalions', + 'tattersall', + 'tattersalls', + 'tattinesses', + 'tattletale', + 'tattletales', + 'tattooists', + 'tauntingly', + 'tautnesses', + 'tautological', + 'tautologically', + 'tautologies', + 'tautologous', + 'tautologously', + 'tautomeric', + 'tautomerism', + 'tautomerisms', + 'tautonymies', + 'tawdriness', + 'tawdrinesses', + 'tawninesses', + 'taxidermic', + 'taxidermies', + 'taxidermist', + 'taxidermists', + 'taximeters', + 'taxonomically', + 'taxonomies', + 'taxonomist', + 'taxonomists', + 'tchotchkes', + 'teaberries', + 'teachableness', + 'teachablenesses', + 'teacupfuls', + 'teacupsful', + 'teakettles', + 'tearfulness', + 'tearfulnesses', + 'teargassed', + 'teargasses', + 'teargassing', + 'tearjerker', + 'tearjerkers', + 'tearstained', + 'tearstains', + 'teaselling', + 'teaspoonful', + 'teaspoonfuls', + 'teaspoonsful', + 'teazelling', + 'technetium', + 'technetiums', + 'technetronic', + 'technicalities', + 'technicality', + 'technicalization', + 'technicalizations', + 'technicalize', + 'technicalized', + 'technicalizes', + 'technicalizing', + 'technically', + 'technicals', + 'technician', + 'technicians', + 'techniques', + 'technobabble', + 'technobabbles', + 'technocracies', + 'technocracy', + 'technocrat', + 'technocratic', + 'technocrats', + 'technologic', + 'technological', + 'technologically', + 'technologies', + 'technologist', + 'technologists', + 'technologize', + 'technologized', + 'technologizes', + 'technologizing', + 'technology', + 'technophile', + 'technophiles', + 'technophobe', + 'technophobes', + 'technophobia', + 'technophobias', + 'technophobic', + 'technostructure', + 'technostructures', + 'tectonically', + 'tectonisms', + 'tediousness', + 'tediousnesses', + 'teemingness', + 'teemingnesses', + 'teentsiest', + 'teenybopper', + 'teenyboppers', + 'teeterboard', + 'teeterboards', + 'teethridge', + 'teethridges', + 'teetotaled', + 'teetotaler', + 'teetotalers', + 'teetotaling', + 'teetotalism', + 'teetotalisms', + 'teetotalist', + 'teetotalists', + 'teetotalled', + 'teetotaller', + 'teetotallers', + 'teetotalling', + 'teetotally', + 'telangiectases', + 'telangiectasia', + 'telangiectasias', + 'telangiectasis', + 'telangiectatic', + 'telecasted', + 'telecaster', + 'telecasters', + 'telecasting', + 'telecommunication', + 'telecommunications', + 'telecommute', + 'telecommuted', + 'telecommuter', + 'telecommuters', + 'telecommutes', + 'telecommuting', + 'teleconference', + 'teleconferenced', + 'teleconferences', + 'teleconferencing', + 'teleconferencings', + 'telecourse', + 'telecourses', + 'telefacsimile', + 'telefacsimiles', + 'telegonies', + 'telegrammed', + 'telegramming', + 'telegraphed', + 'telegrapher', + 'telegraphers', + 'telegraphese', + 'telegrapheses', + 'telegraphic', + 'telegraphically', + 'telegraphies', + 'telegraphing', + 'telegraphist', + 'telegraphists', + 'telegraphs', + 'telegraphy', + 'telekineses', + 'telekinesis', + 'telekinetic', + 'telekinetically', + 'telemarketer', + 'telemarketers', + 'telemarketing', + 'telemarketings', + 'telemetered', + 'telemetering', + 'telemeters', + 'telemetric', + 'telemetrically', + 'telemetries', + 'telencephala', + 'telencephalic', + 'telencephalon', + 'telencephalons', + 'teleologic', + 'teleological', + 'teleologically', + 'teleologies', + 'teleologist', + 'teleologists', + 'teleonomic', + 'teleonomies', + 'teleostean', + 'telepathic', + 'telepathically', + 'telepathies', + 'telephoned', + 'telephoner', + 'telephoners', + 'telephones', + 'telephonic', + 'telephonically', + 'telephonies', + 'telephoning', + 'telephonist', + 'telephonists', + 'telephotographies', + 'telephotography', + 'telephotos', + 'teleportation', + 'teleportations', + 'teleported', + 'teleporting', + 'teleprinter', + 'teleprinters', + 'teleprocessing', + 'teleprocessings', + 'telescoped', + 'telescopes', + 'telescopic', + 'telescopically', + 'telescoping', + 'teletypewriter', + 'teletypewriters', + 'teleutospore', + 'teleutospores', + 'televangelism', + 'televangelisms', + 'televangelist', + 'televangelists', + 'televiewed', + 'televiewer', + 'televiewers', + 'televiewing', + 'televising', + 'television', + 'televisions', + 'televisual', + 'teliospore', + 'teliospores', + 'tellurides', + 'telluriums', + 'tellurometer', + 'tellurometers', + 'telocentric', + 'telocentrics', + 'telophases', + 'telphering', + 'temerarious', + 'temerariously', + 'temerariousness', + 'temerariousnesses', + 'temerities', + 'temperable', + 'temperament', + 'temperamental', + 'temperamentally', + 'temperaments', + 'temperance', + 'temperances', + 'temperately', + 'temperateness', + 'temperatenesses', + 'temperature', + 'temperatures', + 'tempesting', + 'tempestuous', + 'tempestuously', + 'tempestuousness', + 'tempestuousnesses', + 'temporalities', + 'temporality', + 'temporalize', + 'temporalized', + 'temporalizes', + 'temporalizing', + 'temporally', + 'temporaries', + 'temporarily', + 'temporariness', + 'temporarinesses', + 'temporised', + 'temporises', + 'temporising', + 'temporization', + 'temporizations', + 'temporized', + 'temporizer', + 'temporizers', + 'temporizes', + 'temporizing', + 'temporomandibular', + 'temptation', + 'temptations', + 'temptingly', + 'temptresses', + 'tenabilities', + 'tenability', + 'tenableness', + 'tenablenesses', + 'tenaciously', + 'tenaciousness', + 'tenaciousnesses', + 'tenacities', + 'tenaculums', + 'tenantable', + 'tenantless', + 'tenantries', + 'tendencies', + 'tendencious', + 'tendentious', + 'tendentiously', + 'tendentiousness', + 'tendentiousnesses', + 'tenderfeet', + 'tenderfoot', + 'tenderfoots', + 'tenderhearted', + 'tenderheartedly', + 'tenderheartedness', + 'tenderheartednesses', + 'tenderization', + 'tenderizations', + 'tenderized', + 'tenderizer', + 'tenderizers', + 'tenderizes', + 'tenderizing', + 'tenderloin', + 'tenderloins', + 'tenderness', + 'tendernesses', + 'tenderometer', + 'tenderometers', + 'tendinites', + 'tendinitides', + 'tendinitis', + 'tendinitises', + 'tendonites', + 'tendonitides', + 'tendonitis', + 'tendonitises', + 'tendresses', + 'tendrilled', + 'tendrilous', + 'tenebrific', + 'tenebrionid', + 'tenebrionids', + 'tenebrious', + 'tenebrisms', + 'tenebrists', + 'tenesmuses', + 'tenosynovitis', + 'tenosynovitises', + 'tenotomies', + 'tenpounder', + 'tenpounders', + 'tensenesses', + 'tensilities', + 'tensiometer', + 'tensiometers', + 'tensiometric', + 'tensiometries', + 'tensiometry', + 'tensioners', + 'tensioning', + 'tensionless', + 'tentacular', + 'tentatively', + 'tentativeness', + 'tentativenesses', + 'tentatives', + 'tenterhook', + 'tenterhooks', + 'tenuousness', + 'tenuousnesses', + 'tenurially', + 'tepidities', + 'tepidnesses', + 'teratocarcinoma', + 'teratocarcinomas', + 'teratocarcinomata', + 'teratogeneses', + 'teratogenesis', + 'teratogenic', + 'teratogenicities', + 'teratogenicity', + 'teratogens', + 'teratologic', + 'teratological', + 'teratologies', + 'teratologist', + 'teratologists', + 'teratology', + 'teratomata', + 'tercentenaries', + 'tercentenary', + 'tercentennial', + 'tercentennials', + 'terebinths', + 'terephthalate', + 'terephthalates', + 'tergiversate', + 'tergiversated', + 'tergiversates', + 'tergiversating', + 'tergiversation', + 'tergiversations', + 'tergiversator', + 'tergiversators', + 'termagants', + 'terminable', + 'terminableness', + 'terminablenesses', + 'terminably', + 'terminally', + 'terminated', + 'terminates', + 'terminating', + 'termination', + 'terminational', + 'terminations', + 'terminative', + 'terminatively', + 'terminator', + 'terminators', + 'terminological', + 'terminologically', + 'terminologies', + 'terminology', + 'terminuses', + 'termitaria', + 'termitaries', + 'termitarium', + 'terneplate', + 'terneplates', + 'terpeneless', + 'terpenoids', + 'terpineols', + 'terpolymer', + 'terpolymers', + 'terpsichorean', + 'terraformed', + 'terraforming', + 'terraforms', + 'terraqueous', + 'terrariums', + 'terreplein', + 'terrepleins', + 'terrestrial', + 'terrestrially', + 'terrestrials', + 'terribleness', + 'terriblenesses', + 'terricolous', + 'terrifically', + 'terrifying', + 'terrifyingly', + 'terrigenous', + 'territorial', + 'territorialism', + 'territorialisms', + 'territorialist', + 'territorialists', + 'territorialities', + 'territoriality', + 'territorialization', + 'territorializations', + 'territorialize', + 'territorialized', + 'territorializes', + 'territorializing', + 'territorially', + 'territorials', + 'territories', + 'terrorised', + 'terrorises', + 'terrorising', + 'terrorisms', + 'terroristic', + 'terrorists', + 'terrorization', + 'terrorizations', + 'terrorized', + 'terrorizes', + 'terrorizing', + 'terrorless', + 'tersenesses', + 'tertiaries', + 'tessellate', + 'tessellated', + 'tessellates', + 'tessellating', + 'tessellation', + 'tessellations', + 'tesseracts', + 'tessituras', + 'testabilities', + 'testability', + 'testaceous', + 'testamentary', + 'testaments', + 'testatrices', + 'testcrossed', + 'testcrosses', + 'testcrossing', + 'testicular', + 'testifiers', + 'testifying', + 'testimonial', + 'testimonials', + 'testimonies', + 'testinesses', + 'testosterone', + 'testosterones', + 'testudines', + 'tetanically', + 'tetanising', + 'tetanization', + 'tetanizations', + 'tetanizing', + 'tetartohedral', + 'tetchiness', + 'tetchinesses', + 'tetherball', + 'tetherballs', + 'tetracaine', + 'tetracaines', + 'tetrachloride', + 'tetrachlorides', + 'tetrachord', + 'tetrachords', + 'tetracycline', + 'tetracyclines', + 'tetradrachm', + 'tetradrachms', + 'tetradynamous', + 'tetrafluoride', + 'tetrafluorides', + 'tetragonal', + 'tetragonally', + 'tetragrammaton', + 'tetragrammatons', + 'tetrahedra', + 'tetrahedral', + 'tetrahedrally', + 'tetrahedrite', + 'tetrahedrites', + 'tetrahedron', + 'tetrahedrons', + 'tetrahydrocannabinol', + 'tetrahydrocannabinols', + 'tetrahydrofuran', + 'tetrahydrofurans', + 'tetrahymena', + 'tetrahymenas', + 'tetralogies', + 'tetrameric', + 'tetramerous', + 'tetrameter', + 'tetrameters', + 'tetramethyllead', + 'tetramethylleads', + 'tetraploid', + 'tetraploidies', + 'tetraploids', + 'tetraploidy', + 'tetrapyrrole', + 'tetrapyrroles', + 'tetrarchic', + 'tetrarchies', + 'tetraspore', + 'tetraspores', + 'tetrasporic', + 'tetravalent', + 'tetrazolium', + 'tetrazoliums', + 'tetrazzini', + 'tetrodotoxin', + 'tetrodotoxins', + 'tetroxides', + 'teutonized', + 'teutonizes', + 'teutonizing', + 'textbookish', + 'textuaries', + 'texturally', + 'textureless', + 'texturized', + 'texturizes', + 'texturizing', + 'thalassaemia', + 'thalassaemias', + 'thalassemia', + 'thalassemias', + 'thalassemic', + 'thalassemics', + 'thalassocracies', + 'thalassocracy', + 'thalassocrat', + 'thalassocrats', + 'thalidomide', + 'thalidomides', + 'thallophyte', + 'thallophytes', + 'thallophytic', + 'thanatological', + 'thanatologies', + 'thanatologist', + 'thanatologists', + 'thanatology', + 'thanatoses', + 'thaneships', + 'thankfuller', + 'thankfullest', + 'thankfully', + 'thankfulness', + 'thankfulnesses', + 'thanklessly', + 'thanklessness', + 'thanklessnesses', + 'thanksgiving', + 'thanksgivings', + 'thankworthy', + 'thatchiest', + 'thaumaturge', + 'thaumaturges', + 'thaumaturgic', + 'thaumaturgies', + 'thaumaturgist', + 'thaumaturgists', + 'thaumaturgy', + 'thearchies', + 'theatergoer', + 'theatergoers', + 'theatergoing', + 'theatergoings', + 'theatrical', + 'theatricalism', + 'theatricalisms', + 'theatricalities', + 'theatricality', + 'theatricalization', + 'theatricalizations', + 'theatricalize', + 'theatricalized', + 'theatricalizes', + 'theatricalizing', + 'theatrically', + 'theatricals', + 'thecodonts', + 'theirselves', + 'theistical', + 'theistically', + 'thelitises', + 'thematically', + 'themselves', + 'thenceforth', + 'thenceforward', + 'thenceforwards', + 'theobromine', + 'theobromines', + 'theocentric', + 'theocentricities', + 'theocentricity', + 'theocentrism', + 'theocentrisms', + 'theocracies', + 'theocratic', + 'theocratical', + 'theocratically', + 'theodicies', + 'theodolite', + 'theodolites', + 'theogonies', + 'theologian', + 'theologians', + 'theological', + 'theologically', + 'theologies', + 'theologise', + 'theologised', + 'theologises', + 'theologising', + 'theologize', + 'theologized', + 'theologizer', + 'theologizers', + 'theologizes', + 'theologizing', + 'theologues', + 'theonomies', + 'theonomous', + 'theophanic', + 'theophanies', + 'theophylline', + 'theophyllines', + 'theorematic', + 'theoretical', + 'theoretically', + 'theoretician', + 'theoreticians', + 'theorising', + 'theorization', + 'theorizations', + 'theorizers', + 'theorizing', + 'theosophical', + 'theosophically', + 'theosophies', + 'theosophist', + 'theosophists', + 'therapeuses', + 'therapeusis', + 'therapeutic', + 'therapeutically', + 'therapeutics', + 'therapists', + 'therapsids', + 'thereabout', + 'thereabouts', + 'thereafter', + 'thereinafter', + 'theretofore', + 'thereunder', + 'therewithal', + 'theriomorphic', + 'thermalization', + 'thermalizations', + 'thermalize', + 'thermalized', + 'thermalizes', + 'thermalizing', + 'thermically', + 'thermionic', + 'thermionics', + 'thermistor', + 'thermistors', + 'thermochemical', + 'thermochemist', + 'thermochemistries', + 'thermochemistry', + 'thermochemists', + 'thermocline', + 'thermoclines', + 'thermocouple', + 'thermocouples', + 'thermoduric', + 'thermodynamic', + 'thermodynamical', + 'thermodynamically', + 'thermodynamicist', + 'thermodynamicists', + 'thermodynamics', + 'thermoelectric', + 'thermoelectricities', + 'thermoelectricity', + 'thermoelement', + 'thermoelements', + 'thermoform', + 'thermoformable', + 'thermoformed', + 'thermoforming', + 'thermoforms', + 'thermogram', + 'thermograms', + 'thermograph', + 'thermographic', + 'thermographically', + 'thermographies', + 'thermographs', + 'thermography', + 'thermohaline', + 'thermojunction', + 'thermojunctions', + 'thermolabile', + 'thermolabilities', + 'thermolability', + 'thermoluminescence', + 'thermoluminescences', + 'thermoluminescent', + 'thermomagnetic', + 'thermometer', + 'thermometers', + 'thermometric', + 'thermometrically', + 'thermometries', + 'thermometry', + 'thermonuclear', + 'thermoperiodicities', + 'thermoperiodicity', + 'thermoperiodism', + 'thermoperiodisms', + 'thermophile', + 'thermophiles', + 'thermophilic', + 'thermophilous', + 'thermopile', + 'thermopiles', + 'thermoplastic', + 'thermoplasticities', + 'thermoplasticity', + 'thermoplastics', + 'thermoreceptor', + 'thermoreceptors', + 'thermoregulate', + 'thermoregulated', + 'thermoregulates', + 'thermoregulating', + 'thermoregulation', + 'thermoregulations', + 'thermoregulator', + 'thermoregulators', + 'thermoregulatory', + 'thermoremanence', + 'thermoremanences', + 'thermoremanent', + 'thermoscope', + 'thermoscopes', + 'thermosets', + 'thermosetting', + 'thermosphere', + 'thermospheres', + 'thermospheric', + 'thermostabilities', + 'thermostability', + 'thermostable', + 'thermostat', + 'thermostated', + 'thermostatic', + 'thermostatically', + 'thermostating', + 'thermostats', + 'thermostatted', + 'thermostatting', + 'thermotactic', + 'thermotaxes', + 'thermotaxis', + 'thermotropic', + 'thermotropism', + 'thermotropisms', + 'thesauruses', + 'thetically', + 'theurgical', + 'theurgists', + 'thiabendazole', + 'thiabendazoles', + 'thiaminase', + 'thiaminases', + 'thickeners', + 'thickening', + 'thickenings', + 'thickheaded', + 'thickheads', + 'thicknesses', + 'thieveries', + 'thievishly', + 'thievishness', + 'thievishnesses', + 'thighbones', + 'thigmotaxes', + 'thigmotaxis', + 'thigmotropism', + 'thigmotropisms', + 'thimbleberries', + 'thimbleberry', + 'thimbleful', + 'thimblefuls', + 'thimblerig', + 'thimblerigged', + 'thimblerigger', + 'thimbleriggers', + 'thimblerigging', + 'thimblerigs', + 'thimbleweed', + 'thimbleweeds', + 'thimerosal', + 'thimerosals', + 'thingamabob', + 'thingamabobs', + 'thingamajig', + 'thingamajigs', + 'thingnesses', + 'thingumajig', + 'thingumajigs', + 'thingummies', + 'thinkableness', + 'thinkablenesses', + 'thinkingly', + 'thinkingness', + 'thinkingnesses', + 'thinnesses', + 'thiocyanate', + 'thiocyanates', + 'thiopental', + 'thiopentals', + 'thiophenes', + 'thioridazine', + 'thioridazines', + 'thiosulfate', + 'thiosulfates', + 'thiouracil', + 'thiouracils', + 'thirstiest', + 'thirstiness', + 'thirstinesses', + 'thirteenth', + 'thirteenths', + 'thirtieths', + 'thistledown', + 'thistledowns', + 'thistliest', + 'thitherward', + 'thitherwards', + 'thixotropic', + 'thixotropies', + 'thixotropy', + 'tholeiites', + 'tholeiitic', + 'thoracically', + 'thoracotomies', + 'thoracotomy', + 'thorianite', + 'thorianites', + 'thornbacks', + 'thornbushes', + 'thorniness', + 'thorninesses', + 'thoroughbass', + 'thoroughbasses', + 'thoroughbrace', + 'thoroughbraces', + 'thoroughbred', + 'thoroughbreds', + 'thorougher', + 'thoroughest', + 'thoroughfare', + 'thoroughfares', + 'thoroughgoing', + 'thoroughly', + 'thoroughness', + 'thoroughnesses', + 'thoroughpin', + 'thoroughpins', + 'thoroughwort', + 'thoroughworts', + 'thoughtful', + 'thoughtfully', + 'thoughtfulness', + 'thoughtfulnesses', + 'thoughtless', + 'thoughtlessly', + 'thoughtlessness', + 'thoughtlessnesses', + 'thoughtway', + 'thoughtways', + 'thousandfold', + 'thousandth', + 'thousandths', + 'thralldoms', + 'thrashings', + 'thrasonical', + 'thrasonically', + 'threadbare', + 'threadbareness', + 'threadbarenesses', + 'threadfins', + 'threadiest', + 'threadiness', + 'threadinesses', + 'threadless', + 'threadlike', + 'threadworm', + 'threadworms', + 'threatened', + 'threatener', + 'threateners', + 'threatening', + 'threateningly', + 'threepence', + 'threepences', + 'threepenny', + 'threescore', + 'threesomes', + 'threnodies', + 'threnodist', + 'threnodists', + 'threonines', + 'thresholds', + 'thriftiest', + 'thriftiness', + 'thriftinesses', + 'thriftless', + 'thriftlessly', + 'thriftlessness', + 'thriftlessnesses', + 'thrillingly', + 'thrivingly', + 'throatiest', + 'throatiness', + 'throatinesses', + 'throatlatch', + 'throatlatches', + 'thrombocyte', + 'thrombocytes', + 'thrombocytic', + 'thrombocytopenia', + 'thrombocytopenias', + 'thrombocytopenic', + 'thromboembolic', + 'thromboembolism', + 'thromboembolisms', + 'thrombokinase', + 'thrombokinases', + 'thrombolytic', + 'thrombophlebitides', + 'thrombophlebitis', + 'thromboplastic', + 'thromboplastin', + 'thromboplastins', + 'thromboses', + 'thrombosis', + 'thrombotic', + 'thromboxane', + 'thromboxanes', + 'throttleable', + 'throttlehold', + 'throttleholds', + 'throttlers', + 'throttling', + 'throughither', + 'throughother', + 'throughout', + 'throughput', + 'throughputs', + 'throughway', + 'throughways', + 'throwaways', + 'throwbacks', + 'throwsters', + 'thrummiest', + 'thuggeries', + 'thumbholes', + 'thumbnails', + 'thumbprint', + 'thumbprints', + 'thumbscrew', + 'thumbscrews', + 'thumbtacked', + 'thumbtacking', + 'thumbtacks', + 'thumbwheel', + 'thumbwheels', + 'thunderbird', + 'thunderbirds', + 'thunderbolt', + 'thunderbolts', + 'thunderclap', + 'thunderclaps', + 'thundercloud', + 'thunderclouds', + 'thunderers', + 'thunderhead', + 'thunderheads', + 'thundering', + 'thunderingly', + 'thunderous', + 'thunderously', + 'thundershower', + 'thundershowers', + 'thunderstone', + 'thunderstones', + 'thunderstorm', + 'thunderstorms', + 'thunderstricken', + 'thunderstrike', + 'thunderstrikes', + 'thunderstriking', + 'thunderstroke', + 'thunderstrokes', + 'thunderstruck', + 'thwartwise', + 'thylacines', + 'thylakoids', + 'thymectomies', + 'thymectomize', + 'thymectomized', + 'thymectomizes', + 'thymectomizing', + 'thymectomy', + 'thymidines', + 'thymocytes', + 'thyratrons', + 'thyristors', + 'thyrocalcitonin', + 'thyrocalcitonins', + 'thyroglobulin', + 'thyroglobulins', + 'thyroidectomies', + 'thyroidectomized', + 'thyroidectomy', + 'thyroidites', + 'thyroiditides', + 'thyroiditis', + 'thyroiditises', + 'thyrotoxicoses', + 'thyrotoxicosis', + 'thyrotrophic', + 'thyrotrophin', + 'thyrotrophins', + 'thyrotropic', + 'thyrotropin', + 'thyrotropins', + 'thyroxines', + 'thysanuran', + 'thysanurans', + 'tibiofibula', + 'tibiofibulae', + 'tibiofibulas', + 'ticketless', + 'ticklishly', + 'ticklishness', + 'ticklishnesses', + 'ticktacked', + 'ticktacking', + 'ticktacktoe', + 'ticktacktoes', + 'ticktocked', + 'ticktocking', + 'tictacking', + 'tictocking', + 'tiddledywinks', + 'tiddlywinks', + 'tidewaters', + 'tidinesses', + 'tiebreaker', + 'tiebreakers', + 'tiemannite', + 'tiemannites', + 'tigerishly', + 'tigerishness', + 'tigerishnesses', + 'tighteners', + 'tightening', + 'tightfisted', + 'tightfistedness', + 'tightfistednesses', + 'tightnesses', + 'tightropes', + 'tightwires', + 'tilefishes', + 'tillandsia', + 'tillandsias', + 'tiltmeters', + 'timberdoodle', + 'timberdoodles', + 'timberhead', + 'timberheads', + 'timberings', + 'timberland', + 'timberlands', + 'timberline', + 'timberlines', + 'timberwork', + 'timberworks', + 'timbrelled', + 'timekeeper', + 'timekeepers', + 'timekeeping', + 'timekeepings', + 'timelessly', + 'timelessness', + 'timelessnesses', + 'timeliness', + 'timelinesses', + 'timepieces', + 'timepleaser', + 'timepleasers', + 'timesavers', + 'timesaving', + 'timescales', + 'timeserver', + 'timeservers', + 'timeserving', + 'timeservings', + 'timetables', + 'timeworker', + 'timeworkers', + 'timidities', + 'timidnesses', + 'timocracies', + 'timocratic', + 'timocratical', + 'timorously', + 'timorousness', + 'timorousnesses', + 'timpanists', + 'tinctorial', + 'tinctorially', + 'tincturing', + 'tinderboxes', + 'tinglingly', + 'tininesses', + 'tinninesses', + 'tinnituses', + 'tinselling', + 'tinsmithing', + 'tinsmithings', + 'tintinnabulary', + 'tintinnabulation', + 'tintinnabulations', + 'tippytoeing', + 'tipsinesses', + 'tirednesses', + 'tirelessly', + 'tirelessness', + 'tirelessnesses', + 'tiresomely', + 'tiresomeness', + 'tiresomenesses', + 'titanesses', + 'titanically', + 'titaniferous', + 'titillated', + 'titillates', + 'titillating', + 'titillatingly', + 'titillation', + 'titillations', + 'titillative', + 'titivating', + 'titivation', + 'titivations', + 'titleholder', + 'titleholders', + 'titratable', + 'titrations', + 'titrimetric', + 'tittivated', + 'tittivates', + 'tittivating', + 'tittupping', + 'titularies', + 'toadeaters', + 'toadfishes', + 'toadflaxes', + 'toadstones', + 'toadstools', + 'toastmaster', + 'toastmasters', + 'toastmistress', + 'toastmistresses', + 'tobacconist', + 'tobacconists', + 'tobogganed', + 'tobogganer', + 'tobogganers', + 'tobogganing', + 'tobogganings', + 'tobogganist', + 'tobogganists', + 'tocologies', + 'tocopherol', + 'tocopherols', + 'toddlerhood', + 'toddlerhoods', + 'toenailing', + 'togetherness', + 'togethernesses', + 'toiletries', + 'toilsomely', + 'toilsomeness', + 'toilsomenesses', + 'tokologies', + 'tolbutamide', + 'tolbutamides', + 'tolerabilities', + 'tolerability', + 'tolerances', + 'tolerantly', + 'tolerating', + 'toleration', + 'tolerations', + 'tolerative', + 'tolerators', + 'tollbooths', + 'tollhouses', + 'toluidines', + 'tomahawked', + 'tomahawking', + 'tomatillos', + 'tomboyishness', + 'tomboyishnesses', + 'tombstones', + 'tomcatting', + 'tomfooleries', + 'tomfoolery', + 'tomographic', + 'tomographies', + 'tomography', + 'tonalities', + 'tonelessly', + 'tonelessness', + 'tonelessnesses', + 'tonetically', + 'tongueless', + 'tonguelike', + 'tonicities', + 'tonometers', + 'tonometries', + 'tonoplasts', + 'tonsillectomies', + 'tonsillectomy', + 'tonsillites', + 'tonsillitides', + 'tonsillitis', + 'tonsillitises', + 'toolholder', + 'toolholders', + 'toolhouses', + 'toolmakers', + 'toolmaking', + 'toolmakings', + 'toothaches', + 'toothbrush', + 'toothbrushes', + 'toothbrushing', + 'toothbrushings', + 'toothpaste', + 'toothpastes', + 'toothpicks', + 'toothsomely', + 'toothsomeness', + 'toothsomenesses', + 'toothworts', + 'topcrosses', + 'topdressing', + 'topdressings', + 'topgallant', + 'topgallants', + 'topicalities', + 'topicality', + 'toplessness', + 'toplessnesses', + 'toploftical', + 'toploftier', + 'toploftiest', + 'toploftily', + 'toploftiness', + 'toploftinesses', + 'topminnows', + 'topnotcher', + 'topnotchers', + 'topocentric', + 'topographer', + 'topographers', + 'topographic', + 'topographical', + 'topographically', + 'topographies', + 'topography', + 'topological', + 'topologically', + 'topologies', + 'topologist', + 'topologists', + 'toponymical', + 'toponymies', + 'toponymist', + 'toponymists', + 'topsoiling', + 'topstitched', + 'topstitches', + 'topstitching', + 'topworking', + 'torchbearer', + 'torchbearers', + 'torchlight', + 'torchlights', + 'torchwoods', + 'tormenters', + 'tormentils', + 'tormenting', + 'tormentors', + 'toroidally', + 'torosities', + 'torpedoing', + 'torpidities', + 'torrefying', + 'torrential', + 'torrentially', + 'torridities', + 'torridness', + 'torridnesses', + 'torrifying', + 'torsionally', + 'tortellini', + 'tortellinis', + 'torticollis', + 'torticollises', + 'tortiously', + 'tortoiseshell', + 'tortoiseshells', + 'tortricids', + 'tortuosities', + 'tortuosity', + 'tortuously', + 'tortuousness', + 'tortuousnesses', + 'torturously', + 'totalisator', + 'totalisators', + 'totalising', + 'totalistic', + 'totalitarian', + 'totalitarianism', + 'totalitarianisms', + 'totalitarianize', + 'totalitarianized', + 'totalitarianizes', + 'totalitarianizing', + 'totalitarians', + 'totalities', + 'totalizator', + 'totalizators', + 'totalizers', + 'totalizing', + 'totemistic', + 'totipotencies', + 'totipotency', + 'totipotent', + 'totteringly', + 'touchbacks', + 'touchdowns', + 'touchholes', + 'touchiness', + 'touchinesses', + 'touchingly', + 'touchlines', + 'touchmarks', + 'touchstone', + 'touchstones', + 'touchwoods', + 'toughening', + 'toughnesses', + 'tourbillion', + 'tourbillions', + 'tourbillon', + 'tourbillons', + 'touristically', + 'tourmaline', + 'tourmalines', + 'tournament', + 'tournaments', + 'tourneying', + 'tourniquet', + 'tourniquets', + 'tovariches', + 'tovarishes', + 'towardliness', + 'towardlinesses', + 'towelettes', + 'towellings', + 'toweringly', + 'townhouses', + 'townscapes', + 'townspeople', + 'townswoman', + 'townswomen', + 'toxaphenes', + 'toxicities', + 'toxicologic', + 'toxicological', + 'toxicologically', + 'toxicologies', + 'toxicologist', + 'toxicologists', + 'toxicology', + 'toxigenicities', + 'toxigenicity', + 'toxophilies', + 'toxophilite', + 'toxophilites', + 'toxoplasma', + 'toxoplasmas', + 'toxoplasmic', + 'toxoplasmoses', + 'toxoplasmosis', + 'trabeation', + 'trabeations', + 'trabeculae', + 'trabecular', + 'trabeculas', + 'trabeculate', + 'traceabilities', + 'traceability', + 'tracheated', + 'tracheites', + 'tracheitides', + 'tracheitis', + 'tracheitises', + 'tracheobronchial', + 'tracheolar', + 'tracheoles', + 'tracheophyte', + 'tracheophytes', + 'tracheostomies', + 'tracheostomy', + 'tracheotomies', + 'tracheotomy', + 'trackballs', + 'tracklayer', + 'tracklayers', + 'tracklaying', + 'tracklayings', + 'tracksides', + 'tracksuits', + 'trackwalker', + 'trackwalkers', + 'tractabilities', + 'tractability', + 'tractableness', + 'tractablenesses', + 'tractional', + 'tradecraft', + 'tradecrafts', + 'trademarked', + 'trademarking', + 'trademarks', + 'tradescantia', + 'tradescantias', + 'tradespeople', + 'traditional', + 'traditionalism', + 'traditionalisms', + 'traditionalist', + 'traditionalistic', + 'traditionalists', + 'traditionalize', + 'traditionalized', + 'traditionalizes', + 'traditionalizing', + 'traditionally', + 'traditionary', + 'traditionless', + 'traditions', + 'traditores', + 'traducement', + 'traducements', + 'trafficabilities', + 'trafficability', + 'trafficable', + 'trafficked', + 'trafficker', + 'traffickers', + 'trafficking', + 'tragacanth', + 'tragacanths', + 'tragedians', + 'tragedienne', + 'tragediennes', + 'tragically', + 'tragicomedies', + 'tragicomedy', + 'tragicomic', + 'tragicomical', + 'trailblazer', + 'trailblazers', + 'trailblazing', + 'trailbreaker', + 'trailbreakers', + 'trailerable', + 'trailering', + 'trailerings', + 'trailerist', + 'trailerists', + 'trailerite', + 'trailerites', + 'trailheads', + 'trainabilities', + 'trainability', + 'trainbands', + 'trainbearer', + 'trainbearers', + 'traineeship', + 'traineeships', + 'trainloads', + 'traitoress', + 'traitoresses', + 'traitorous', + 'traitorously', + 'traitresses', + 'trajecting', + 'trajection', + 'trajections', + 'trajectories', + 'trajectory', + 'tramelling', + 'trammeling', + 'trammelled', + 'trammelling', + 'tramontane', + 'tramontanes', + 'trampoline', + 'trampoliner', + 'trampoliners', + 'trampolines', + 'trampolining', + 'trampolinings', + 'trampolinist', + 'trampolinists', + 'trancelike', + 'tranquiler', + 'tranquilest', + 'tranquilities', + 'tranquility', + 'tranquilize', + 'tranquilized', + 'tranquilizer', + 'tranquilizers', + 'tranquilizes', + 'tranquilizing', + 'tranquiller', + 'tranquillest', + 'tranquillities', + 'tranquillity', + 'tranquillize', + 'tranquillized', + 'tranquillizer', + 'tranquillizers', + 'tranquillizes', + 'tranquillizing', + 'tranquilly', + 'tranquilness', + 'tranquilnesses', + 'transacted', + 'transacting', + 'transactinide', + 'transaction', + 'transactional', + 'transactions', + 'transactor', + 'transactors', + 'transalpine', + 'transaminase', + 'transaminases', + 'transamination', + 'transaminations', + 'transatlantic', + 'transaxles', + 'transceiver', + 'transceivers', + 'transcended', + 'transcendence', + 'transcendences', + 'transcendencies', + 'transcendency', + 'transcendent', + 'transcendental', + 'transcendentalism', + 'transcendentalisms', + 'transcendentalist', + 'transcendentalists', + 'transcendentally', + 'transcendently', + 'transcending', + 'transcends', + 'transcontinental', + 'transcribe', + 'transcribed', + 'transcriber', + 'transcribers', + 'transcribes', + 'transcribing', + 'transcript', + 'transcriptase', + 'transcriptases', + 'transcription', + 'transcriptional', + 'transcriptionally', + 'transcriptionist', + 'transcriptionists', + 'transcriptions', + 'transcripts', + 'transcultural', + 'transcutaneous', + 'transdermal', + 'transdisciplinary', + 'transduced', + 'transducer', + 'transducers', + 'transduces', + 'transducing', + 'transductant', + 'transductants', + 'transduction', + 'transductional', + 'transductions', + 'transected', + 'transecting', + 'transection', + 'transections', + 'transeptal', + 'transfected', + 'transfecting', + 'transfection', + 'transfections', + 'transfects', + 'transferabilities', + 'transferability', + 'transferable', + 'transferal', + 'transferals', + 'transferase', + 'transferases', + 'transferee', + 'transferees', + 'transference', + 'transferences', + 'transferential', + 'transferor', + 'transferors', + 'transferrable', + 'transferred', + 'transferrer', + 'transferrers', + 'transferrin', + 'transferring', + 'transferrins', + 'transfiguration', + 'transfigurations', + 'transfigure', + 'transfigured', + 'transfigures', + 'transfiguring', + 'transfinite', + 'transfixed', + 'transfixes', + 'transfixing', + 'transfixion', + 'transfixions', + 'transformable', + 'transformation', + 'transformational', + 'transformationalist', + 'transformationalists', + 'transformationally', + 'transformations', + 'transformative', + 'transformed', + 'transformer', + 'transformers', + 'transforming', + 'transforms', + 'transfusable', + 'transfused', + 'transfuses', + 'transfusible', + 'transfusing', + 'transfusion', + 'transfusional', + 'transfusions', + 'transgenerational', + 'transgenic', + 'transgress', + 'transgressed', + 'transgresses', + 'transgressing', + 'transgression', + 'transgressions', + 'transgressive', + 'transgressor', + 'transgressors', + 'transhipped', + 'transhipping', + 'transhistorical', + 'transhumance', + 'transhumances', + 'transhumant', + 'transhumants', + 'transience', + 'transiences', + 'transiencies', + 'transiency', + 'transiently', + 'transients', + 'transilluminate', + 'transilluminated', + 'transilluminates', + 'transilluminating', + 'transillumination', + 'transilluminations', + 'transilluminator', + 'transilluminators', + 'transistor', + 'transistorise', + 'transistorised', + 'transistorises', + 'transistorising', + 'transistorization', + 'transistorizations', + 'transistorize', + 'transistorized', + 'transistorizes', + 'transistorizing', + 'transistors', + 'transiting', + 'transition', + 'transitional', + 'transitionally', + 'transitions', + 'transitive', + 'transitively', + 'transitiveness', + 'transitivenesses', + 'transitivities', + 'transitivity', + 'transitorily', + 'transitoriness', + 'transitorinesses', + 'transitory', + 'translatabilities', + 'translatability', + 'translatable', + 'translated', + 'translates', + 'translating', + 'translation', + 'translational', + 'translations', + 'translative', + 'translator', + 'translators', + 'translatory', + 'transliterate', + 'transliterated', + 'transliterates', + 'transliterating', + 'transliteration', + 'transliterations', + 'translocate', + 'translocated', + 'translocates', + 'translocating', + 'translocation', + 'translocations', + 'translucence', + 'translucences', + 'translucencies', + 'translucency', + 'translucent', + 'translucently', + 'transmarine', + 'transmembrane', + 'transmigrate', + 'transmigrated', + 'transmigrates', + 'transmigrating', + 'transmigration', + 'transmigrations', + 'transmigrator', + 'transmigrators', + 'transmigratory', + 'transmissibilities', + 'transmissibility', + 'transmissible', + 'transmission', + 'transmissions', + 'transmissive', + 'transmissivities', + 'transmissivity', + 'transmissometer', + 'transmissometers', + 'transmittable', + 'transmittal', + 'transmittals', + 'transmittance', + 'transmittances', + 'transmitted', + 'transmitter', + 'transmitters', + 'transmitting', + 'transmogrification', + 'transmogrifications', + 'transmogrified', + 'transmogrifies', + 'transmogrify', + 'transmogrifying', + 'transmontane', + 'transmountain', + 'transmutable', + 'transmutation', + 'transmutations', + 'transmutative', + 'transmuted', + 'transmutes', + 'transmuting', + 'transnational', + 'transnationalism', + 'transnationalisms', + 'transnatural', + 'transoceanic', + 'transpacific', + 'transparence', + 'transparences', + 'transparencies', + 'transparency', + 'transparent', + 'transparentize', + 'transparentized', + 'transparentizes', + 'transparentizing', + 'transparently', + 'transparentness', + 'transparentnesses', + 'transpersonal', + 'transpicuous', + 'transpierce', + 'transpierced', + 'transpierces', + 'transpiercing', + 'transpiration', + 'transpirational', + 'transpirations', + 'transpired', + 'transpires', + 'transpiring', + 'transplacental', + 'transplacentally', + 'transplant', + 'transplantabilities', + 'transplantability', + 'transplantable', + 'transplantation', + 'transplantations', + 'transplanted', + 'transplanter', + 'transplanters', + 'transplanting', + 'transplants', + 'transpolar', + 'transponder', + 'transponders', + 'transpontine', + 'transportabilities', + 'transportability', + 'transportable', + 'transportation', + 'transportational', + 'transportations', + 'transported', + 'transportee', + 'transportees', + 'transporter', + 'transporters', + 'transporting', + 'transports', + 'transposable', + 'transposed', + 'transposes', + 'transposing', + 'transposition', + 'transpositional', + 'transpositions', + 'transposon', + 'transposons', + 'transsexual', + 'transsexualism', + 'transsexualisms', + 'transsexualities', + 'transsexuality', + 'transsexuals', + 'transshape', + 'transshaped', + 'transshapes', + 'transshaping', + 'transshipment', + 'transshipments', + 'transshipped', + 'transshipping', + 'transships', + 'transsonic', + 'transthoracic', + 'transthoracically', + 'transubstantial', + 'transubstantiate', + 'transubstantiated', + 'transubstantiates', + 'transubstantiating', + 'transubstantiation', + 'transubstantiations', + 'transudate', + 'transudates', + 'transudation', + 'transudations', + 'transuding', + 'transuranic', + 'transuranics', + 'transuranium', + 'transvaluate', + 'transvaluated', + 'transvaluates', + 'transvaluating', + 'transvaluation', + 'transvaluations', + 'transvalue', + 'transvalued', + 'transvalues', + 'transvaluing', + 'transversal', + 'transversals', + 'transverse', + 'transversely', + 'transverses', + 'transvestism', + 'transvestisms', + 'transvestite', + 'transvestites', + 'trapanning', + 'trapezists', + 'trapeziuses', + 'trapezohedra', + 'trapezohedron', + 'trapezohedrons', + 'trapezoidal', + 'trapezoids', + 'trapnested', + 'trapnesting', + 'trapshooter', + 'trapshooters', + 'trapshooting', + 'trapshootings', + 'trashiness', + 'trashinesses', + 'trattorias', + 'trauchling', + 'traumatically', + 'traumatise', + 'traumatised', + 'traumatises', + 'traumatising', + 'traumatism', + 'traumatisms', + 'traumatization', + 'traumatizations', + 'traumatize', + 'traumatized', + 'traumatizes', + 'traumatizing', + 'travailing', + 'travellers', + 'travelling', + 'travelogue', + 'travelogues', + 'traversable', + 'traversals', + 'traversers', + 'traversing', + 'travertine', + 'travertines', + 'travestied', + 'travesties', + 'travestying', + 'trawlerman', + 'trawlermen', + 'treacheries', + 'treacherous', + 'treacherously', + 'treacherousness', + 'treacherousnesses', + 'treadmills', + 'treasonable', + 'treasonably', + 'treasonous', + 'treasurable', + 'treasurers', + 'treasurership', + 'treasurerships', + 'treasuries', + 'treasuring', + 'treatabilities', + 'treatability', + 'treatments', + 'trebuchets', + 'trebuckets', + 'tredecillion', + 'tredecillions', + 'treehopper', + 'treehoppers', + 'treenwares', + 'trehaloses', + 'treillages', + 'trellising', + 'trelliswork', + 'trellisworks', + 'trematodes', + 'trembliest', + 'tremendous', + 'tremendously', + 'tremendousness', + 'tremendousnesses', + 'tremolites', + 'tremolitic', + 'tremulously', + 'tremulousness', + 'tremulousnesses', + 'trenchancies', + 'trenchancy', + 'trenchantly', + 'trencherman', + 'trenchermen', + 'trendiness', + 'trendinesses', + 'trendsetter', + 'trendsetters', + 'trendsetting', + 'trepanation', + 'trepanations', + 'trepanning', + 'trephination', + 'trephinations', + 'trephining', + 'trepidation', + 'trepidations', + 'treponemal', + 'treponemas', + 'treponemata', + 'treponematoses', + 'treponematosis', + 'treponemes', + 'trespassed', + 'trespasser', + 'trespassers', + 'trespasses', + 'trespassing', + 'trestlework', + 'trestleworks', + 'tretinoins', + 'triacetate', + 'triacetates', + 'triadically', + 'trialogues', + 'triamcinolone', + 'triamcinolones', + 'triangular', + 'triangularities', + 'triangularity', + 'triangularly', + 'triangulate', + 'triangulated', + 'triangulates', + 'triangulating', + 'triangulation', + 'triangulations', + 'triarchies', + 'triathlete', + 'triathletes', + 'triathlons', + 'triaxialities', + 'triaxiality', + 'tribalisms', + 'tribespeople', + 'triboelectric', + 'triboelectricities', + 'triboelectricity', + 'tribological', + 'tribologies', + 'tribologist', + 'tribologists', + 'triboluminescence', + 'triboluminescences', + 'triboluminescent', + 'tribrachic', + 'tribulated', + 'tribulates', + 'tribulating', + 'tribulation', + 'tribulations', + 'tribunates', + 'tribuneship', + 'tribuneships', + 'tributaries', + 'tricarboxylic', + 'triceratops', + 'triceratopses', + 'trichiases', + 'trichiasis', + 'trichinize', + 'trichinized', + 'trichinizes', + 'trichinizing', + 'trichinoses', + 'trichinosis', + 'trichinosises', + 'trichinous', + 'trichlorfon', + 'trichlorfons', + 'trichloroethylene', + 'trichloroethylenes', + 'trichlorphon', + 'trichlorphons', + 'trichocyst', + 'trichocysts', + 'trichogyne', + 'trichogynes', + 'trichologies', + 'trichologist', + 'trichologists', + 'trichology', + 'trichomonacidal', + 'trichomonacide', + 'trichomonacides', + 'trichomonad', + 'trichomonads', + 'trichomonal', + 'trichomoniases', + 'trichomoniasis', + 'trichopteran', + 'trichopterans', + 'trichothecene', + 'trichothecenes', + 'trichotomies', + 'trichotomous', + 'trichotomously', + 'trichotomy', + 'trichromat', + 'trichromatic', + 'trichromatism', + 'trichromatisms', + 'trichromats', + 'trickeries', + 'trickiness', + 'trickinesses', + 'trickishly', + 'trickishness', + 'trickishnesses', + 'trickliest', + 'tricksiest', + 'tricksiness', + 'tricksinesses', + 'tricksters', + 'triclinium', + 'tricolette', + 'tricolettes', + 'tricolored', + 'tricornered', + 'tricotines', + 'tricuspids', + 'tricyclics', + 'tridimensional', + 'tridimensionalities', + 'tridimensionality', + 'triennially', + 'triennials', + 'trienniums', + 'trierarchies', + 'trierarchs', + 'trierarchy', + 'trifluoperazine', + 'trifluoperazines', + 'trifluralin', + 'trifluralins', + 'trifoliate', + 'trifoliolate', + 'trifoliums', + 'trifurcate', + 'trifurcated', + 'trifurcates', + 'trifurcating', + 'trifurcation', + 'trifurcations', + 'trigeminal', + 'trigeminals', + 'triggerfish', + 'triggerfishes', + 'triggering', + 'triggerman', + 'triggermen', + 'triglyceride', + 'triglycerides', + 'triglyphic', + 'triglyphical', + 'trignesses', + 'trigonally', + 'trigonometric', + 'trigonometrical', + 'trigonometrically', + 'trigonometries', + 'trigonometry', + 'trigraphic', + 'trihalomethane', + 'trihalomethanes', + 'trihedrals', + 'trihedrons', + 'trihybrids', + 'trihydroxy', + 'triiodothyronine', + 'triiodothyronines', + 'trilateral', + 'trilingual', + 'trilingually', + 'triliteral', + 'triliteralism', + 'triliteralisms', + 'triliterals', + 'trillionth', + 'trillionths', + 'trilobites', + 'trimesters', + 'trimethoprim', + 'trimethoprims', + 'trimetrogon', + 'trimetrogons', + 'trimnesses', + 'trimonthly', + 'trimorphic', + 'trinitarian', + 'trinitrotoluene', + 'trinitrotoluenes', + 'trinketers', + 'trinketing', + 'trinketries', + 'trinocular', + 'trinomials', + 'trinucleotide', + 'trinucleotides', + 'tripartite', + 'triphenylmethane', + 'triphenylmethanes', + 'triphosphate', + 'triphosphates', + 'triphthong', + 'triphthongal', + 'triphthongs', + 'tripinnate', + 'tripinnately', + 'tripletail', + 'tripletails', + 'triplicate', + 'triplicated', + 'triplicates', + 'triplicating', + 'triplication', + 'triplications', + 'triplicities', + 'triplicity', + 'triploblastic', + 'triploidies', + 'trippingly', + 'triquetrous', + 'triradiate', + 'trisaccharide', + 'trisaccharides', + 'trisecting', + 'trisection', + 'trisections', + 'trisectors', + 'triskaidekaphobia', + 'triskaidekaphobias', + 'triskelion', + 'triskelions', + 'trisoctahedra', + 'trisoctahedron', + 'trisoctahedrons', + 'tristearin', + 'tristearins', + 'tristfully', + 'tristfulness', + 'tristfulnesses', + 'tristimulus', + 'trisubstituted', + 'trisulfide', + 'trisulfides', + 'trisyllabic', + 'trisyllable', + 'trisyllables', + 'tritenesses', + 'tritheisms', + 'tritheistic', + 'tritheistical', + 'tritheists', + 'triticales', + 'triturable', + 'triturated', + 'triturates', + 'triturating', + 'trituration', + 'triturations', + 'triturator', + 'triturators', + 'triumphalism', + 'triumphalisms', + 'triumphalist', + 'triumphalists', + 'triumphant', + 'triumphantly', + 'triumphing', + 'triumvirate', + 'triumvirates', + 'triunities', + 'trivialise', + 'trivialised', + 'trivialises', + 'trivialising', + 'trivialist', + 'trivialists', + 'trivialities', + 'triviality', + 'trivialization', + 'trivializations', + 'trivialize', + 'trivialized', + 'trivializes', + 'trivializing', + 'triweeklies', + 'trochanter', + 'trochanteral', + 'trochanteric', + 'trochanters', + 'trochlears', + 'trochoidal', + 'trochophore', + 'trochophores', + 'troglodyte', + 'troglodytes', + 'troglodytic', + 'trolleybus', + 'trolleybuses', + 'trolleybusses', + 'trolleying', + 'trombonist', + 'trombonists', + 'troopships', + 'trophallaxes', + 'trophallaxis', + 'trophically', + 'trophoblast', + 'trophoblastic', + 'trophoblasts', + 'trophozoite', + 'trophozoites', + 'tropicalize', + 'tropicalized', + 'tropicalizes', + 'tropicalizing', + 'tropically', + 'tropocollagen', + 'tropocollagens', + 'tropologic', + 'tropological', + 'tropologically', + 'tropomyosin', + 'tropomyosins', + 'tropopause', + 'tropopauses', + 'troposphere', + 'tropospheres', + 'tropospheric', + 'tropotaxes', + 'tropotaxis', + 'trothplight', + 'trothplighted', + 'trothplighting', + 'trothplights', + 'troubadour', + 'troubadours', + 'troublemaker', + 'troublemakers', + 'troublemaking', + 'troublemakings', + 'troubleshoot', + 'troubleshooter', + 'troubleshooters', + 'troubleshooting', + 'troubleshoots', + 'troubleshot', + 'troublesome', + 'troublesomely', + 'troublesomeness', + 'troublesomenesses', + 'troublously', + 'troublousness', + 'troublousnesses', + 'trousseaus', + 'trousseaux', + 'trowelling', + 'truantries', + 'trucklines', + 'truckloads', + 'truckmaster', + 'truckmasters', + 'truculence', + 'truculences', + 'truculencies', + 'truculency', + 'truculently', + 'truehearted', + 'trueheartedness', + 'trueheartednesses', + 'truenesses', + 'truepennies', + 'trumperies', + 'trumpeters', + 'trumpeting', + 'trumpetlike', + 'truncating', + 'truncation', + 'truncations', + 'truncheoned', + 'truncheoning', + 'truncheons', + 'trunkfishes', + 'trustabilities', + 'trustability', + 'trustbuster', + 'trustbusters', + 'trusteeing', + 'trusteeship', + 'trusteeships', + 'trustfully', + 'trustfulness', + 'trustfulnesses', + 'trustiness', + 'trustinesses', + 'trustingly', + 'trustingness', + 'trustingnesses', + 'trustworthily', + 'trustworthiness', + 'trustworthinesses', + 'trustworthy', + 'truthfully', + 'truthfulness', + 'truthfulnesses', + 'trypanosome', + 'trypanosomes', + 'trypanosomiases', + 'trypanosomiasis', + 'trypsinogen', + 'trypsinogens', + 'tryptamine', + 'tryptamines', + 'tryptophan', + 'tryptophane', + 'tryptophanes', + 'tryptophans', + 'tsutsugamushi', + 'tubercular', + 'tuberculars', + 'tuberculate', + 'tuberculated', + 'tuberculin', + 'tuberculins', + 'tuberculoid', + 'tuberculoses', + 'tuberculosis', + 'tuberculous', + 'tuberosities', + 'tuberosity', + 'tubificids', + 'tubocurarine', + 'tubocurarines', + 'tubulating', + 'tuffaceous', + 'tularemias', + 'tulipwoods', + 'tumblebugs', + 'tumbledown', + 'tumblerful', + 'tumblerfuls', + 'tumbleweed', + 'tumbleweeds', + 'tumefaction', + 'tumefactions', + 'tumescence', + 'tumescences', + 'tumidities', + 'tumorigeneses', + 'tumorigenesis', + 'tumorigenic', + 'tumorigenicities', + 'tumorigenicity', + 'tumultuary', + 'tumultuous', + 'tumultuously', + 'tumultuousness', + 'tumultuousnesses', + 'tunabilities', + 'tunability', + 'tunableness', + 'tunablenesses', + 'tunefulness', + 'tunefulnesses', + 'tunelessly', + 'tunesmiths', + 'tungstates', + 'tunnellike', + 'tunnelling', + 'turbellarian', + 'turbellarians', + 'turbidimeter', + 'turbidimeters', + 'turbidimetric', + 'turbidimetrically', + 'turbidimetries', + 'turbidimetry', + 'turbidites', + 'turbidities', + 'turbidness', + 'turbidnesses', + 'turbinated', + 'turbinates', + 'turbocharged', + 'turbocharger', + 'turbochargers', + 'turboelectric', + 'turbogenerator', + 'turbogenerators', + 'turbomachineries', + 'turbomachinery', + 'turboprops', + 'turboshaft', + 'turboshafts', + 'turbulence', + 'turbulences', + 'turbulencies', + 'turbulency', + 'turbulently', + 'turfskiing', + 'turfskiings', + 'turgencies', + 'turgescence', + 'turgescences', + 'turgescent', + 'turgidities', + 'turgidness', + 'turgidnesses', + 'turmoiling', + 'turnabouts', + 'turnaround', + 'turnarounds', + 'turnbuckle', + 'turnbuckles', + 'turnstiles', + 'turnstones', + 'turntables', + 'turnverein', + 'turnvereins', + 'turophiles', + 'turpentine', + 'turpentined', + 'turpentines', + 'turpentining', + 'turpitudes', + 'turquoises', + 'turtleback', + 'turtlebacks', + 'turtledove', + 'turtledoves', + 'turtlehead', + 'turtleheads', + 'turtleneck', + 'turtlenecked', + 'turtlenecks', + 'tutelaries', + 'tutoresses', + 'tutorships', + 'tutoyering', + 'twayblades', + 'tweediness', + 'tweedinesses', + 'twelvemonth', + 'twelvemonths', + 'twentieths', + 'twiddliest', + 'twinberries', + 'twinflower', + 'twinflowers', + 'twinklings', + 'twitchiest', + 'twittering', + 'tympanists', + 'tympanites', + 'tympaniteses', + 'tympanitic', + 'typecasting', + 'typefounder', + 'typefounders', + 'typefounding', + 'typefoundings', + 'typescript', + 'typescripts', + 'typesetter', + 'typesetters', + 'typesetting', + 'typesettings', + 'typestyles', + 'typewriter', + 'typewriters', + 'typewrites', + 'typewriting', + 'typewritings', + 'typewritten', + 'typhlosole', + 'typhlosoles', + 'typicalities', + 'typicality', + 'typicalness', + 'typicalnesses', + 'typification', + 'typifications', + 'typographed', + 'typographer', + 'typographers', + 'typographic', + 'typographical', + 'typographically', + 'typographies', + 'typographing', + 'typographs', + 'typography', + 'typological', + 'typologically', + 'typologies', + 'typologist', + 'typologists', + 'tyrannical', + 'tyrannically', + 'tyrannicalness', + 'tyrannicalnesses', + 'tyrannicide', + 'tyrannicides', + 'tyrannised', + 'tyrannises', + 'tyrannising', + 'tyrannized', + 'tyrannizer', + 'tyrannizers', + 'tyrannizes', + 'tyrannizing', + 'tyrannosaur', + 'tyrannosaurs', + 'tyrannosaurus', + 'tyrannosauruses', + 'tyrannously', + 'tyrocidine', + 'tyrocidines', + 'tyrocidins', + 'tyrosinase', + 'tyrosinases', + 'tyrothricin', + 'tyrothricins', + 'ubiquinone', + 'ubiquinones', + 'ubiquities', + 'ubiquitous', + 'ubiquitously', + 'ubiquitousness', + 'ubiquitousnesses', + 'udometries', + 'ufological', + 'ufologists', + 'uglification', + 'uglifications', + 'uglinesses', + 'uintahites', + 'ulcerating', + 'ulceration', + 'ulcerations', + 'ulcerative', + 'ulcerogenic', + 'ulteriorly', + 'ultimacies', + 'ultimately', + 'ultimateness', + 'ultimatenesses', + 'ultimating', + 'ultimatums', + 'ultimogeniture', + 'ultimogenitures', + 'ultrabasic', + 'ultrabasics', + 'ultracareful', + 'ultracasual', + 'ultracautious', + 'ultracentrifugal', + 'ultracentrifugally', + 'ultracentrifugation', + 'ultracentrifugations', + 'ultracentrifuge', + 'ultracentrifuged', + 'ultracentrifuges', + 'ultracentrifuging', + 'ultracivilized', + 'ultraclean', + 'ultracommercial', + 'ultracompact', + 'ultracompetent', + 'ultraconservatism', + 'ultraconservatisms', + 'ultraconservative', + 'ultraconservatives', + 'ultracontemporaries', + 'ultracontemporary', + 'ultraconvenient', + 'ultracritical', + 'ultrademocratic', + 'ultradense', + 'ultradistance', + 'ultradistances', + 'ultradistant', + 'ultraefficient', + 'ultraenergetic', + 'ultraexclusive', + 'ultrafamiliar', + 'ultrafastidious', + 'ultrafeminine', + 'ultrafiche', + 'ultrafiches', + 'ultrafiltrate', + 'ultrafiltrates', + 'ultrafiltration', + 'ultrafiltrations', + 'ultraglamorous', + 'ultrahazardous', + 'ultraheated', + 'ultraheating', + 'ultraheats', + 'ultraheavy', + 'ultrahuman', + 'ultraistic', + 'ultraleftism', + 'ultraleftisms', + 'ultraleftist', + 'ultraleftists', + 'ultraliberal', + 'ultraliberalism', + 'ultraliberalisms', + 'ultraliberals', + 'ultralight', + 'ultralights', + 'ultralightweight', + 'ultramafic', + 'ultramarathon', + 'ultramarathoner', + 'ultramarathoners', + 'ultramarathons', + 'ultramarine', + 'ultramarines', + 'ultramasculine', + 'ultramicro', + 'ultramicroscope', + 'ultramicroscopes', + 'ultramicroscopic', + 'ultramicroscopical', + 'ultramicroscopically', + 'ultramicrotome', + 'ultramicrotomes', + 'ultramicrotomies', + 'ultramicrotomy', + 'ultramilitant', + 'ultraminiature', + 'ultraminiaturized', + 'ultramodern', + 'ultramodernist', + 'ultramodernists', + 'ultramontane', + 'ultramontanes', + 'ultramontanism', + 'ultramontanisms', + 'ultranationalism', + 'ultranationalisms', + 'ultranationalist', + 'ultranationalistic', + 'ultranationalists', + 'ultraorthodox', + 'ultraparadoxical', + 'ultrapatriotic', + 'ultraphysical', + 'ultrapowerful', + 'ultrapractical', + 'ultraprecise', + 'ultraprecision', + 'ultraprecisions', + 'ultraprofessional', + 'ultraprogressive', + 'ultraprogressives', + 'ultraquiet', + 'ultraradical', + 'ultraradicals', + 'ultrarapid', + 'ultrararefied', + 'ultrarational', + 'ultrarealism', + 'ultrarealisms', + 'ultrarealist', + 'ultrarealistic', + 'ultrarealists', + 'ultrarefined', + 'ultrareliable', + 'ultrarespectable', + 'ultrarevolutionaries', + 'ultrarevolutionary', + 'ultraright', + 'ultrarightist', + 'ultrarightists', + 'ultraromantic', + 'ultraroyalist', + 'ultraroyalists', + 'ultrasecret', + 'ultrasegregationist', + 'ultrasegregationists', + 'ultrasensitive', + 'ultraserious', + 'ultrasharp', + 'ultrashort', + 'ultrasimple', + 'ultraslick', + 'ultrasmall', + 'ultrasmart', + 'ultrasmooth', + 'ultrasonic', + 'ultrasonically', + 'ultrasonics', + 'ultrasonographer', + 'ultrasonographers', + 'ultrasonographic', + 'ultrasonographies', + 'ultrasonography', + 'ultrasophisticated', + 'ultrasound', + 'ultrasounds', + 'ultrastructural', + 'ultrastructurally', + 'ultrastructure', + 'ultrastructures', + 'ultravacua', + 'ultravacuum', + 'ultravacuums', + 'ultraviolence', + 'ultraviolences', + 'ultraviolent', + 'ultraviolet', + 'ultraviolets', + 'ultravirile', + 'ultravirilities', + 'ultravirility', + 'ululations', + 'umbellifer', + 'umbelliferous', + 'umbellifers', + 'umbilicals', + 'umbilicate', + 'umbilicated', + 'umbilication', + 'umbilications', + 'umbilicuses', + 'umbrageous', + 'umbrageously', + 'umbrageousness', + 'umbrageousnesses', + 'umbrellaed', + 'umbrellaing', + 'unabashedly', + 'unabatedly', + 'unabridged', + 'unabsorbed', + 'unabsorbent', + 'unacademic', + 'unacademically', + 'unaccented', + 'unacceptabilities', + 'unacceptability', + 'unacceptable', + 'unacceptably', + 'unaccepted', + 'unacclimated', + 'unacclimatized', + 'unaccommodated', + 'unaccommodating', + 'unaccompanied', + 'unaccountabilities', + 'unaccountability', + 'unaccountable', + 'unaccountably', + 'unaccounted', + 'unaccredited', + 'unacculturated', + 'unaccustomed', + 'unaccustomedly', + 'unachieved', + 'unacknowledged', + 'unacquainted', + 'unactorish', + 'unadaptable', + 'unaddressed', + 'unadjudicated', + 'unadjusted', + 'unadmitted', + 'unadoptable', + 'unadulterated', + 'unadulteratedly', + 'unadventurous', + 'unadvertised', + 'unadvisedly', + 'unaesthetic', + 'unaffected', + 'unaffectedly', + 'unaffectedness', + 'unaffectednesses', + 'unaffecting', + 'unaffectionate', + 'unaffectionately', + 'unaffiliated', + 'unaffluent', + 'unaffordable', + 'unaggressive', + 'unalienable', + 'unalienated', + 'unalleviated', + 'unallocated', + 'unalluring', + 'unalterabilities', + 'unalterability', + 'unalterable', + 'unalterableness', + 'unalterablenesses', + 'unalterably', + 'unambiguous', + 'unambiguously', + 'unambitious', + 'unambivalent', + 'unambivalently', + 'unamenable', + 'unamortized', + 'unamplified', + 'unanalyzable', + 'unanalyzed', + 'unanchored', + 'unanchoring', + 'unanesthetized', + 'unanimities', + 'unanimously', + 'unannotated', + 'unannounced', + 'unanswerabilities', + 'unanswerability', + 'unanswerable', + 'unanswerably', + 'unanswered', + 'unanticipated', + 'unanticipatedly', + 'unapologetic', + 'unapologetically', + 'unapologizing', + 'unapparent', + 'unappealable', + 'unappealing', + 'unappealingly', + 'unappeasable', + 'unappeasably', + 'unappeased', + 'unappetizing', + 'unappetizingly', + 'unappreciated', + 'unappreciation', + 'unappreciations', + 'unappreciative', + 'unapproachabilities', + 'unapproachability', + 'unapproachable', + 'unapproachably', + 'unappropriated', + 'unapproved', + 'unaptnesses', + 'unarguable', + 'unarguably', + 'unarrogant', + 'unarticulated', + 'unartistic', + 'unashamedly', + 'unaspirated', + 'unassailabilities', + 'unassailability', + 'unassailable', + 'unassailableness', + 'unassailablenesses', + 'unassailably', + 'unassailed', + 'unassembled', + 'unassertive', + 'unassertively', + 'unassigned', + 'unassimilable', + 'unassimilated', + 'unassisted', + 'unassociated', + 'unassuageable', + 'unassuaged', + 'unassuming', + 'unassumingness', + 'unassumingnesses', + 'unathletic', + 'unattached', + 'unattainable', + 'unattended', + 'unattenuated', + 'unattested', + 'unattractive', + 'unattractively', + 'unattractiveness', + 'unattractivenesses', + 'unattributable', + 'unattributed', + 'unauthentic', + 'unauthorized', + 'unautomated', + 'unavailabilities', + 'unavailability', + 'unavailable', + 'unavailing', + 'unavailingly', + 'unavailingness', + 'unavailingnesses', + 'unavoidable', + 'unavoidably', + 'unawakened', + 'unawareness', + 'unawarenesses', + 'unbalanced', + 'unbalances', + 'unbalancing', + 'unballasted', + 'unbandaged', + 'unbandages', + 'unbandaging', + 'unbaptized', + 'unbarbered', + 'unbarricaded', + 'unbearable', + 'unbearably', + 'unbeatable', + 'unbeatably', + 'unbeautiful', + 'unbeautifully', + 'unbecoming', + 'unbecomingly', + 'unbecomingness', + 'unbecomingnesses', + 'unbeholden', + 'unbeknownst', + 'unbelievable', + 'unbelievably', + 'unbeliever', + 'unbelievers', + 'unbelieving', + 'unbelievingly', + 'unbelligerent', + 'unbendable', + 'unbeseeming', + 'unbiasedness', + 'unbiasednesses', + 'unbiblical', + 'unbleached', + 'unblemished', + 'unblenched', + 'unblinking', + 'unblinkingly', + 'unblocking', + 'unbloodied', + 'unblushing', + 'unblushingly', + 'unbonneted', + 'unbonneting', + 'unbosoming', + 'unboundedness', + 'unboundednesses', + 'unbowdlerized', + 'unbracketed', + 'unbraiding', + 'unbranched', + 'unbreachable', + 'unbreakable', + 'unbreathable', + 'unbreeched', + 'unbreeches', + 'unbreeching', + 'unbridgeable', + 'unbridling', + 'unbrilliant', + 'unbuckling', + 'unbudgeable', + 'unbudgeably', + 'unbudgeted', + 'unbudgingly', + 'unbuffered', + 'unbuildable', + 'unbuilding', + 'unbundling', + 'unburdened', + 'unburdening', + 'unbureaucratic', + 'unburnable', + 'unbusinesslike', + 'unbuttered', + 'unbuttoned', + 'unbuttoning', + 'uncalcified', + 'uncalcined', + 'uncalculated', + 'uncalculating', + 'uncalibrated', + 'uncalloused', + 'uncanceled', + 'uncandidly', + 'uncanniest', + 'uncanniness', + 'uncanninesses', + 'uncanonical', + 'uncapitalized', + 'uncaptioned', + 'uncapturable', + 'uncarpeted', + 'uncastrated', + 'uncataloged', + 'uncatchable', + 'uncategorizable', + 'unceasingly', + 'uncelebrated', + 'uncensored', + 'uncensorious', + 'uncensured', + 'unceremonious', + 'unceremoniously', + 'unceremoniousness', + 'unceremoniousnesses', + 'uncertainly', + 'uncertainness', + 'uncertainnesses', + 'uncertainties', + 'uncertainty', + 'uncertified', + 'unchaining', + 'unchallengeable', + 'unchallenged', + 'unchallenging', + 'unchangeabilities', + 'unchangeability', + 'unchangeable', + 'unchangeableness', + 'unchangeablenesses', + 'unchangeably', + 'unchanging', + 'unchangingly', + 'unchangingness', + 'unchangingnesses', + 'unchanneled', + 'unchaperoned', + 'uncharacteristic', + 'uncharacteristically', + 'uncharging', + 'uncharismatic', + 'uncharitable', + 'uncharitableness', + 'uncharitablenesses', + 'uncharitably', + 'uncharming', + 'unchartered', + 'unchastely', + 'unchasteness', + 'unchastenesses', + 'unchastities', + 'unchastity', + 'unchauvinistic', + 'uncheckable', + 'unchewable', + 'unchildlike', + 'unchivalrous', + 'unchivalrously', + 'unchlorinated', + 'unchoreographed', + 'unchristened', + 'unchristian', + 'unchronicled', + 'unchronological', + 'unchurched', + 'unchurches', + 'unchurching', + 'unchurchly', + 'unciliated', + 'uncinariases', + 'uncinariasis', + 'uncinematic', + 'uncirculated', + 'uncircumcised', + 'uncircumcision', + 'uncircumcisions', + 'uncivilized', + 'unclamping', + 'unclarified', + 'unclarities', + 'unclasping', + 'unclassical', + 'unclassifiable', + 'unclassified', + 'uncleanest', + 'uncleanliness', + 'uncleanlinesses', + 'uncleanness', + 'uncleannesses', + 'unclearest', + 'unclenched', + 'unclenches', + 'unclenching', + 'unclimbable', + 'unclimbableness', + 'unclimbablenesses', + 'unclinched', + 'unclinches', + 'unclinching', + 'unclipping', + 'uncloaking', + 'unclogging', + 'unclothing', + 'uncloudedly', + 'unclouding', + 'unclubbable', + 'uncluttered', + 'uncluttering', + 'unclutters', + 'uncoalesce', + 'uncoalesced', + 'uncoalesces', + 'uncoalescing', + 'uncodified', + 'uncoercive', + 'uncoercively', + 'uncoffined', + 'uncoffining', + 'uncollected', + 'uncollectible', + 'uncollectibles', + 'uncombative', + 'uncombined', + 'uncomfortable', + 'uncomfortably', + 'uncommercial', + 'uncommercialized', + 'uncommitted', + 'uncommoner', + 'uncommonest', + 'uncommonly', + 'uncommonness', + 'uncommonnesses', + 'uncommunicable', + 'uncommunicative', + 'uncompassionate', + 'uncompelling', + 'uncompensated', + 'uncompetitive', + 'uncompetitiveness', + 'uncompetitivenesses', + 'uncomplacent', + 'uncomplaining', + 'uncomplainingly', + 'uncompleted', + 'uncomplicated', + 'uncomplimentary', + 'uncompounded', + 'uncomprehended', + 'uncomprehending', + 'uncomprehendingly', + 'uncompromisable', + 'uncompromising', + 'uncompromisingly', + 'uncompromisingness', + 'uncompromisingnesses', + 'uncomputerized', + 'unconcealed', + 'unconceivable', + 'unconcerned', + 'unconcernedly', + 'unconcernedness', + 'unconcernednesses', + 'unconcerns', + 'unconditional', + 'unconditionally', + 'unconditioned', + 'unconfessed', + 'unconfined', + 'unconfirmed', + 'unconformable', + 'unconformably', + 'unconformities', + 'unconformity', + 'unconfounded', + 'unconfused', + 'unconfuses', + 'unconfusing', + 'uncongenial', + 'uncongenialities', + 'uncongeniality', + 'unconjugated', + 'unconnected', + 'unconquerable', + 'unconquerably', + 'unconquered', + 'unconscionabilities', + 'unconscionability', + 'unconscionable', + 'unconscionableness', + 'unconscionablenesses', + 'unconscionably', + 'unconscious', + 'unconsciouses', + 'unconsciously', + 'unconsciousness', + 'unconsciousnesses', + 'unconsecrated', + 'unconsidered', + 'unconsolidated', + 'unconstitutional', + 'unconstitutionalities', + 'unconstitutionality', + 'unconstitutionally', + 'unconstrained', + 'unconstraint', + 'unconstraints', + 'unconstricted', + 'unconstructed', + 'unconstructive', + 'unconsumed', + 'unconsummated', + 'uncontainable', + 'uncontaminated', + 'uncontemplated', + 'uncontemporary', + 'uncontentious', + 'uncontested', + 'uncontracted', + 'uncontradicted', + 'uncontrived', + 'uncontrollabilities', + 'uncontrollability', + 'uncontrollable', + 'uncontrollably', + 'uncontrolled', + 'uncontroversial', + 'uncontroversially', + 'unconventional', + 'unconventionalities', + 'unconventionality', + 'unconventionally', + 'unconverted', + 'unconvinced', + 'unconvincing', + 'unconvincingly', + 'unconvincingness', + 'unconvincingnesses', + 'unconvoyed', + 'uncooperative', + 'uncoordinated', + 'uncopyrightable', + 'uncorrectable', + 'uncorrected', + 'uncorrelated', + 'uncorroborated', + 'uncorseted', + 'uncountable', + 'uncouplers', + 'uncoupling', + 'uncourageous', + 'uncouthness', + 'uncouthnesses', + 'uncovenanted', + 'uncovering', + 'uncreating', + 'uncreative', + 'uncredentialed', + 'uncredited', + 'uncrippled', + 'uncritical', + 'uncritically', + 'uncrossable', + 'uncrossing', + 'uncrowning', + 'uncrumpled', + 'uncrumples', + 'uncrumpling', + 'uncrushable', + 'uncrystallized', + 'unctuously', + 'unctuousness', + 'unctuousnesses', + 'uncultivable', + 'uncultivated', + 'uncultured', + 'uncurtained', + 'uncustomarily', + 'uncustomary', + 'uncynically', + 'undanceable', + 'undauntable', + 'undauntedly', + 'undebatable', + 'undebatably', + 'undecadent', + 'undeceived', + 'undeceives', + 'undeceiving', + 'undecidabilities', + 'undecidability', + 'undecidable', + 'undecideds', + 'undecillion', + 'undecillions', + 'undecipherable', + 'undeciphered', + 'undeclared', + 'undecomposed', + 'undecorated', + 'undedicated', + 'undefeated', + 'undefended', + 'undefinable', + 'undefoliated', + 'undeformed', + 'undelegated', + 'undeliverable', + 'undelivered', + 'undemanding', + 'undemocratic', + 'undemocratically', + 'undemonstrative', + 'undemonstratively', + 'undemonstrativeness', + 'undemonstrativenesses', + 'undeniable', + 'undeniableness', + 'undeniablenesses', + 'undeniably', + 'undenominational', + 'undependable', + 'underachieve', + 'underachieved', + 'underachievement', + 'underachievements', + 'underachiever', + 'underachievers', + 'underachieves', + 'underachieving', + 'underacted', + 'underacting', + 'underactive', + 'underactivities', + 'underactivity', + 'underappreciated', + 'underbellies', + 'underbelly', + 'underbidder', + 'underbidders', + 'underbidding', + 'underbodies', + 'underbosses', + 'underbought', + 'underbrims', + 'underbrush', + 'underbrushes', + 'underbudded', + 'underbudding', + 'underbudgeted', + 'underbuying', + 'undercapitalized', + 'undercards', + 'undercarriage', + 'undercarriages', + 'undercharge', + 'undercharged', + 'undercharges', + 'undercharging', + 'underclass', + 'underclasses', + 'underclassman', + 'underclassmen', + 'underclothes', + 'underclothing', + 'underclothings', + 'undercoating', + 'undercoatings', + 'undercoats', + 'undercooled', + 'undercooling', + 'undercools', + 'undercount', + 'undercounted', + 'undercounting', + 'undercounts', + 'undercover', + 'undercroft', + 'undercrofts', + 'undercurrent', + 'undercurrents', + 'undercutting', + 'underdeveloped', + 'underdevelopment', + 'underdevelopments', + 'underdoing', + 'underdrawers', + 'undereaten', + 'undereating', + 'undereducated', + 'underemphases', + 'underemphasis', + 'underemphasize', + 'underemphasized', + 'underemphasizes', + 'underemphasizing', + 'underemployed', + 'underemployment', + 'underemployments', + 'underestimate', + 'underestimated', + 'underestimates', + 'underestimating', + 'underestimation', + 'underestimations', + 'underexpose', + 'underexposed', + 'underexposes', + 'underexposing', + 'underexposure', + 'underexposures', + 'underfeeding', + 'underfeeds', + 'underfinanced', + 'underfunded', + 'underfunding', + 'underfunds', + 'undergarment', + 'undergarments', + 'undergirded', + 'undergirding', + 'undergirds', + 'underglaze', + 'underglazes', + 'undergoing', + 'undergrads', + 'undergraduate', + 'undergraduates', + 'underground', + 'undergrounder', + 'undergrounders', + 'undergrounds', + 'undergrowth', + 'undergrowths', + 'underhanded', + 'underhandedly', + 'underhandedness', + 'underhandednesses', + 'underinflated', + 'underinflation', + 'underinflations', + 'underinsured', + 'underinvestment', + 'underinvestments', + 'underlapped', + 'underlapping', + 'underlaying', + 'underlayment', + 'underlayments', + 'underletting', + 'underlined', + 'underlines', + 'underlings', + 'underlining', + 'underlying', + 'underlyingly', + 'undermanned', + 'undermined', + 'undermines', + 'undermining', + 'underneath', + 'undernourished', + 'undernourishment', + 'undernourishments', + 'undernutrition', + 'undernutritions', + 'underpainting', + 'underpaintings', + 'underpants', + 'underparts', + 'underpasses', + 'underpaying', + 'underpayment', + 'underpayments', + 'underpinned', + 'underpinning', + 'underpinnings', + 'underplayed', + 'underplaying', + 'underplays', + 'underplots', + 'underpopulated', + 'underpowered', + 'underprepared', + 'underprice', + 'underpriced', + 'underprices', + 'underpricing', + 'underprivileged', + 'underproduction', + 'underproductions', + 'underproof', + 'underpublicized', + 'underqualified', + 'underrated', + 'underrates', + 'underrating', + 'underreact', + 'underreacted', + 'underreacting', + 'underreacts', + 'underreport', + 'underreported', + 'underreporting', + 'underreports', + 'underrepresentation', + 'underrepresentations', + 'underrepresented', + 'underrunning', + 'undersaturated', + 'underscore', + 'underscored', + 'underscores', + 'underscoring', + 'undersecretaries', + 'undersecretary', + 'underselling', + 'undersells', + 'underserved', + 'undersexed', + 'undersheriff', + 'undersheriffs', + 'undershirt', + 'undershirted', + 'undershirts', + 'undershoot', + 'undershooting', + 'undershoots', + 'undershorts', + 'undershrub', + 'undershrubs', + 'undersides', + 'undersigned', + 'undersized', + 'underskirt', + 'underskirts', + 'underslung', + 'underspins', + 'understaffed', + 'understaffing', + 'understaffings', + 'understand', + 'understandabilities', + 'understandability', + 'understandable', + 'understandably', + 'understanding', + 'understandingly', + 'understandings', + 'understands', + 'understate', + 'understated', + 'understatedly', + 'understatement', + 'understatements', + 'understates', + 'understating', + 'understeer', + 'understeered', + 'understeering', + 'understeers', + 'understood', + 'understories', + 'understory', + 'understrapper', + 'understrappers', + 'understrength', + 'understudied', + 'understudies', + 'understudy', + 'understudying', + 'undersupplies', + 'undersupply', + 'undersurface', + 'undersurfaces', + 'undertaken', + 'undertaker', + 'undertakers', + 'undertakes', + 'undertaking', + 'undertakings', + 'undertaxed', + 'undertaxes', + 'undertaxing', + 'undertenant', + 'undertenants', + 'underthrust', + 'underthrusting', + 'underthrusts', + 'undertones', + 'undertrick', + 'undertricks', + 'underutilization', + 'underutilizations', + 'underutilize', + 'underutilized', + 'underutilizes', + 'underutilizing', + 'undervaluation', + 'undervaluations', + 'undervalue', + 'undervalued', + 'undervalues', + 'undervaluing', + 'underwater', + 'underweight', + 'underweights', + 'underwhelm', + 'underwhelmed', + 'underwhelming', + 'underwhelms', + 'underwings', + 'underwoods', + 'underwools', + 'underworld', + 'underworlds', + 'underwrite', + 'underwriter', + 'underwriters', + 'underwrites', + 'underwriting', + 'underwritten', + 'underwrote', + 'undescended', + 'undescribable', + 'undeserved', + 'undeserving', + 'undesignated', + 'undesigning', + 'undesirabilities', + 'undesirability', + 'undesirable', + 'undesirableness', + 'undesirablenesses', + 'undesirables', + 'undesirably', + 'undetectable', + 'undetected', + 'undeterminable', + 'undetermined', + 'undeterred', + 'undeveloped', + 'undeviating', + 'undeviatingly', + 'undiagnosable', + 'undiagnosed', + 'undialectical', + 'undidactic', + 'undifferentiated', + 'undigested', + 'undigestible', + 'undignified', + 'undiminished', + 'undiplomatic', + 'undiplomatically', + 'undirected', + 'undischarged', + 'undisciplined', + 'undisclosed', + 'undiscouraged', + 'undiscoverable', + 'undiscovered', + 'undiscriminating', + 'undiscussed', + 'undisguised', + 'undisguisedly', + 'undismayed', + 'undisputable', + 'undisputed', + 'undissociated', + 'undissolved', + 'undistinguished', + 'undistorted', + 'undistracted', + 'undistributed', + 'undisturbed', + 'undoctored', + 'undoctrinaire', + 'undocumented', + 'undogmatic', + 'undogmatically', + 'undomestic', + 'undomesticated', + 'undoubling', + 'undoubtable', + 'undoubtedly', + 'undoubting', + 'undramatic', + 'undramatically', + 'undramatized', + 'undressing', + 'undrinkable', + 'undulating', + 'undulation', + 'undulations', + 'undulatory', + 'unduplicated', + 'undutifully', + 'undutifulness', + 'undutifulnesses', + 'unearmarked', + 'unearthing', + 'unearthliness', + 'unearthlinesses', + 'uneasiness', + 'uneasinesses', + 'uneccentric', + 'unecological', + 'uneconomic', + 'uneconomical', + 'unedifying', + 'uneducable', + 'uneducated', + 'unelaborate', + 'unelectable', + 'unelectrified', + 'unembarrassed', + 'unembellished', + 'unembittered', + 'unemotional', + 'unemotionally', + 'unemphatic', + 'unemphatically', + 'unempirical', + 'unemployabilities', + 'unemployability', + 'unemployable', + 'unemployables', + 'unemployed', + 'unemployeds', + 'unemployment', + 'unemployments', + 'unenchanted', + 'unenclosed', + 'unencouraging', + 'unencumbered', + 'unendearing', + 'unendingly', + 'unendurable', + 'unendurableness', + 'unendurablenesses', + 'unendurably', + 'unenforceable', + 'unenforced', + 'unenlarged', + 'unenlightened', + 'unenlightening', + 'unenriched', + 'unenterprising', + 'unenthusiastic', + 'unenthusiastically', + 'unenviable', + 'unequalled', + 'unequipped', + 'unequivocably', + 'unequivocal', + 'unequivocally', + 'unerringly', + 'unescapable', + 'unessential', + 'unestablished', + 'unevaluated', + 'unevenness', + 'unevennesses', + 'uneventful', + 'uneventfully', + 'uneventfulness', + 'uneventfulnesses', + 'unexamined', + 'unexampled', + 'unexcelled', + 'unexceptionable', + 'unexceptionableness', + 'unexceptionablenesses', + 'unexceptionably', + 'unexceptional', + 'unexcitable', + 'unexciting', + 'unexercised', + 'unexpected', + 'unexpectedly', + 'unexpectedness', + 'unexpectednesses', + 'unexpended', + 'unexplainable', + 'unexplained', + 'unexploded', + 'unexploited', + 'unexplored', + 'unexpressed', + 'unexpressive', + 'unexpurgated', + 'unextraordinary', + 'unfadingly', + 'unfailingly', + 'unfairness', + 'unfairnesses', + 'unfaithful', + 'unfaithfully', + 'unfaithfulness', + 'unfaithfulnesses', + 'unfalsifiable', + 'unfaltering', + 'unfalteringly', + 'unfamiliar', + 'unfamiliarities', + 'unfamiliarity', + 'unfamiliarly', + 'unfashionable', + 'unfashionableness', + 'unfashionablenesses', + 'unfashionably', + 'unfastened', + 'unfastening', + 'unfastidious', + 'unfathered', + 'unfathomable', + 'unfavorable', + 'unfavorableness', + 'unfavorablenesses', + 'unfavorably', + 'unfavorite', + 'unfeasible', + 'unfeelingly', + 'unfeelingness', + 'unfeelingnesses', + 'unfeignedly', + 'unfeminine', + 'unfermented', + 'unfertilized', + 'unfettered', + 'unfettering', + 'unfilially', + 'unfiltered', + 'unfindable', + 'unfinished', + 'unfitnesses', + 'unflagging', + 'unflaggingly', + 'unflamboyant', + 'unflappabilities', + 'unflappability', + 'unflappable', + 'unflappably', + 'unflattering', + 'unflatteringly', + 'unflinching', + 'unflinchingly', + 'unfocussed', + 'unfoldment', + 'unfoldments', + 'unforeseeable', + 'unforeseen', + 'unforested', + 'unforgettable', + 'unforgettably', + 'unforgivable', + 'unforgiving', + 'unforgivingness', + 'unforgivingnesses', + 'unformulated', + 'unforthcoming', + 'unfortified', + 'unfortunate', + 'unfortunately', + 'unfortunates', + 'unfossiliferous', + 'unfreedoms', + 'unfreezing', + 'unfrequented', + 'unfriended', + 'unfriendlier', + 'unfriendliest', + 'unfriendliness', + 'unfriendlinesses', + 'unfriendly', + 'unfrivolous', + 'unfrocking', + 'unfruitful', + 'unfruitfully', + 'unfruitfulness', + 'unfruitfulnesses', + 'unfulfillable', + 'unfulfilled', + 'unfurnished', + 'ungainlier', + 'ungainliest', + 'ungainliness', + 'ungainlinesses', + 'ungallantly', + 'ungarnished', + 'ungenerosities', + 'ungenerosity', + 'ungenerous', + 'ungenerously', + 'ungentlemanly', + 'ungentrified', + 'ungerminated', + 'ungimmicky', + 'unglamorized', + 'unglamorous', + 'ungodliest', + 'ungodliness', + 'ungodlinesses', + 'ungovernable', + 'ungraceful', + 'ungracefully', + 'ungracious', + 'ungraciously', + 'ungraciousness', + 'ungraciousnesses', + 'ungrammatical', + 'ungrammaticalities', + 'ungrammaticality', + 'ungraspable', + 'ungrateful', + 'ungratefully', + 'ungratefulness', + 'ungratefulnesses', + 'ungrounded', + 'ungrudging', + 'unguardedly', + 'unguardedness', + 'unguardednesses', + 'unguarding', + 'unguessable', + 'unhackneyed', + 'unhallowed', + 'unhallowing', + 'unhampered', + 'unhandicapped', + 'unhandiest', + 'unhandiness', + 'unhandinesses', + 'unhandsome', + 'unhandsomely', + 'unhappiest', + 'unhappiness', + 'unhappinesses', + 'unharnessed', + 'unharnesses', + 'unharnessing', + 'unharvested', + 'unhealthful', + 'unhealthier', + 'unhealthiest', + 'unhealthily', + 'unhealthiness', + 'unhealthinesses', + 'unhelpfully', + 'unheralded', + 'unhesitating', + 'unhesitatingly', + 'unhindered', + 'unhistorical', + 'unhitching', + 'unholiness', + 'unholinesses', + 'unhomogenized', + 'unhouseled', + 'unhumorous', + 'unhurriedly', + 'unhydrolyzed', + 'unhygienic', + 'unhyphenated', + 'unhysterical', + 'unhysterically', + 'unicameral', + 'unicamerally', + 'unicellular', + 'unicyclist', + 'unicyclists', + 'unidentifiable', + 'unidentified', + 'unideological', + 'unidimensional', + 'unidimensionalities', + 'unidimensionality', + 'unidiomatic', + 'unidirectional', + 'unidirectionally', + 'unification', + 'unifications', + 'unifoliate', + 'unifoliolate', + 'uniformest', + 'uniforming', + 'uniformitarian', + 'uniformitarianism', + 'uniformitarianisms', + 'uniformitarians', + 'uniformities', + 'uniformity', + 'uniformness', + 'uniformnesses', + 'unignorable', + 'unilateral', + 'unilaterally', + 'unilingual', + 'unilluminating', + 'unillusioned', + 'unilocular', + 'unimaginable', + 'unimaginably', + 'unimaginative', + 'unimaginatively', + 'unimmunized', + 'unimpaired', + 'unimpassioned', + 'unimpeachable', + 'unimpeachably', + 'unimplemented', + 'unimportance', + 'unimportances', + 'unimportant', + 'unimposing', + 'unimpressed', + 'unimpressive', + 'unimproved', + 'unincorporated', + 'unindicted', + 'unindustrialized', + 'uninfected', + 'uninflated', + 'uninflected', + 'uninfluenced', + 'uninformative', + 'uninformatively', + 'uninformed', + 'uningratiating', + 'uninhabitable', + 'uninhabited', + 'uninhibited', + 'uninhibitedly', + 'uninhibitedness', + 'uninhibitednesses', + 'uninitiate', + 'uninitiated', + 'uninitiates', + 'uninoculated', + 'uninspected', + 'uninspired', + 'uninspiring', + 'uninstructed', + 'uninstructive', + 'uninsulated', + 'uninsurable', + 'unintegrated', + 'unintellectual', + 'unintelligent', + 'unintelligently', + 'unintelligibilities', + 'unintelligibility', + 'unintelligible', + 'unintelligibleness', + 'unintelligiblenesses', + 'unintelligibly', + 'unintended', + 'unintentional', + 'unintentionally', + 'uninterest', + 'uninterested', + 'uninteresting', + 'uninterests', + 'uninterrupted', + 'uninterruptedly', + 'unintimidated', + 'uninucleate', + 'uninventive', + 'uninviting', + 'uninvolved', + 'unionisation', + 'unionisations', + 'unionising', + 'unionization', + 'unionizations', + 'unionizing', + 'uniparental', + 'uniparentally', + 'uniqueness', + 'uniquenesses', + 'unironically', + 'unirradiated', + 'unirrigated', + 'unisexualities', + 'unisexuality', + 'unitarianism', + 'unitarianisms', + 'unitarians', + 'unitization', + 'unitizations', + 'univalents', + 'univariate', + 'universalism', + 'universalisms', + 'universalist', + 'universalistic', + 'universalists', + 'universalities', + 'universality', + 'universalization', + 'universalizations', + 'universalize', + 'universalized', + 'universalizes', + 'universalizing', + 'universally', + 'universalness', + 'universalnesses', + 'universals', + 'universities', + 'university', + 'univocally', + 'unjointing', + 'unjustifiable', + 'unjustifiably', + 'unjustified', + 'unjustness', + 'unjustnesses', + 'unkenneled', + 'unkenneling', + 'unkennelled', + 'unkennelling', + 'unkindlier', + 'unkindliest', + 'unkindliness', + 'unkindlinesses', + 'unkindness', + 'unkindnesses', + 'unknitting', + 'unknotting', + 'unknowabilities', + 'unknowability', + 'unknowable', + 'unknowingly', + 'unknowings', + 'unknowledgeable', + 'unladylike', + 'unlamented', + 'unlatching', + 'unlaundered', + 'unlawfully', + 'unlawfulness', + 'unlawfulnesses', + 'unlearnable', + 'unlearning', + 'unleashing', + 'unleavened', + 'unlettered', + 'unleveling', + 'unlevelled', + 'unlevelling', + 'unliberated', + 'unlicensed', + 'unlikelier', + 'unlikeliest', + 'unlikelihood', + 'unlikelihoods', + 'unlikeliness', + 'unlikelinesses', + 'unlikeness', + 'unlikenesses', + 'unlimbered', + 'unlimbering', + 'unlimitedly', + 'unlistenable', + 'unliterary', + 'unlocalized', + 'unloosened', + 'unloosening', + 'unlovelier', + 'unloveliest', + 'unloveliness', + 'unlovelinesses', + 'unluckiest', + 'unluckiness', + 'unluckinesses', + 'unmagnified', + 'unmalicious', + 'unmaliciously', + 'unmanageable', + 'unmanageably', + 'unmanipulated', + 'unmanliest', + 'unmanliness', + 'unmanlinesses', + 'unmannered', + 'unmanneredly', + 'unmannerliness', + 'unmannerlinesses', + 'unmannerly', + 'unmarketable', + 'unmarrieds', + 'unmasculine', + 'unmatchable', + 'unmeasurable', + 'unmeasured', + 'unmechanized', + 'unmediated', + 'unmedicated', + 'unmelodious', + 'unmelodiousness', + 'unmelodiousnesses', + 'unmemorable', + 'unmemorably', + 'unmentionable', + 'unmentionables', + 'unmentioned', + 'unmerciful', + 'unmercifully', + 'unmetabolized', + 'unmilitary', + 'unmingling', + 'unmistakable', + 'unmistakably', + 'unmitering', + 'unmitigated', + 'unmitigatedly', + 'unmitigatedness', + 'unmitigatednesses', + 'unmodernized', + 'unmodified', + 'unmolested', + 'unmonitored', + 'unmoralities', + 'unmorality', + 'unmotivated', + 'unmuffling', + 'unmuzzling', + 'unmyelinated', + 'unnameable', + 'unnaturally', + 'unnaturalness', + 'unnaturalnesses', + 'unnecessarily', + 'unnecessary', + 'unnegotiable', + 'unnervingly', + 'unneurotic', + 'unnewsworthy', + 'unnilhexium', + 'unnilhexiums', + 'unnilpentium', + 'unnilpentiums', + 'unnilquadium', + 'unnilquadiums', + 'unnoticeable', + 'unnourishing', + 'unnumbered', + 'unobjectionable', + 'unobservable', + 'unobservant', + 'unobserved', + 'unobstructed', + 'unobtainable', + 'unobtrusive', + 'unobtrusively', + 'unobtrusiveness', + 'unobtrusivenesses', + 'unoccupied', + 'unofficial', + 'unofficially', + 'unopenable', + 'unorganized', + 'unoriginal', + 'unornamented', + 'unorthodox', + 'unorthodoxies', + 'unorthodoxly', + 'unorthodoxy', + 'unostentatious', + 'unostentatiously', + 'unoxygenated', + 'unpalatabilities', + 'unpalatability', + 'unpalatable', + 'unparalleled', + 'unparasitized', + 'unpardonable', + 'unparented', + 'unparliamentary', + 'unpassable', + 'unpasteurized', + 'unpastoral', + 'unpatentable', + 'unpatriotic', + 'unpedantic', + 'unpeopling', + 'unperceived', + 'unperceptive', + 'unperformable', + 'unperformed', + 'unpersuaded', + 'unpersuasive', + 'unperturbed', + 'unpicturesque', + 'unplaiting', + 'unplausible', + 'unplayable', + 'unpleasant', + 'unpleasantly', + 'unpleasantness', + 'unpleasantnesses', + 'unpleasing', + 'unplugging', + 'unpolarized', + 'unpolished', + 'unpolitical', + 'unpolluted', + 'unpopularities', + 'unpopularity', + 'unpractical', + 'unprecedented', + 'unprecedentedly', + 'unpredictabilities', + 'unpredictability', + 'unpredictable', + 'unpredictables', + 'unpredictably', + 'unpregnant', + 'unprejudiced', + 'unpremeditated', + 'unprepared', + 'unpreparedness', + 'unpreparednesses', + 'unprepossessing', + 'unpressured', + 'unpressurized', + 'unpretending', + 'unpretentious', + 'unpretentiously', + 'unpretentiousness', + 'unpretentiousnesses', + 'unprincipled', + 'unprincipledness', + 'unprinciplednesses', + 'unprintable', + 'unprivileged', + 'unproblematic', + 'unprocessed', + 'unproduced', + 'unproductive', + 'unprofessed', + 'unprofessional', + 'unprofessionally', + 'unprofessionals', + 'unprofitable', + 'unprofitableness', + 'unprofitablenesses', + 'unprofitably', + 'unprogrammable', + 'unprogrammed', + 'unprogressive', + 'unpromising', + 'unpromisingly', + 'unprompted', + 'unpronounceable', + 'unpronounced', + 'unpropitious', + 'unprosperous', + 'unprotected', + 'unprovable', + 'unprovoked', + 'unpublicized', + 'unpublishable', + 'unpublished', + 'unpuckered', + 'unpuckering', + 'unpunctual', + 'unpunctualities', + 'unpunctuality', + 'unpunctuated', + 'unpunished', + 'unpuzzling', + 'unqualified', + 'unqualifiedly', + 'unquantifiable', + 'unquenchable', + 'unquestionable', + 'unquestionably', + 'unquestioned', + 'unquestioning', + 'unquestioningly', + 'unquietest', + 'unquietness', + 'unquietnesses', + 'unraveling', + 'unravelled', + 'unravelling', + 'unravished', + 'unreachable', + 'unreadable', + 'unreadiest', + 'unreadiness', + 'unreadinesses', + 'unrealistic', + 'unrealistically', + 'unrealities', + 'unrealizable', + 'unrealized', + 'unreasonable', + 'unreasonableness', + 'unreasonablenesses', + 'unreasonably', + 'unreasoned', + 'unreasoning', + 'unreasoningly', + 'unreceptive', + 'unreclaimable', + 'unreclaimed', + 'unrecognizable', + 'unrecognizably', + 'unrecognized', + 'unreconcilable', + 'unreconciled', + 'unreconstructed', + 'unrecorded', + 'unrecoverable', + 'unrecovered', + 'unrecyclable', + 'unredeemable', + 'unredeemed', + 'unredressed', + 'unreflective', + 'unreformed', + 'unrefrigerated', + 'unregenerate', + 'unregenerately', + 'unregistered', + 'unregulated', + 'unrehearsed', + 'unreinforced', + 'unrelenting', + 'unrelentingly', + 'unreliabilities', + 'unreliability', + 'unreliable', + 'unrelieved', + 'unrelievedly', + 'unreligious', + 'unreluctant', + 'unremarkable', + 'unremarkably', + 'unremarked', + 'unremembered', + 'unreminiscent', + 'unremitting', + 'unremittingly', + 'unremorseful', + 'unremovable', + 'unrepeatable', + 'unrepentant', + 'unrepentantly', + 'unreported', + 'unrepresentative', + 'unrepresentativeness', + 'unrepresentativenesses', + 'unrepresented', + 'unrepressed', + 'unrequited', + 'unreserved', + 'unreservedly', + 'unreservedness', + 'unreservednesses', + 'unreserves', + 'unresistant', + 'unresisting', + 'unresolvable', + 'unresolved', + 'unrespectable', + 'unresponsive', + 'unresponsively', + 'unresponsiveness', + 'unresponsivenesses', + 'unrestored', + 'unrestrained', + 'unrestrainedly', + 'unrestrainedness', + 'unrestrainednesses', + 'unrestraint', + 'unrestraints', + 'unrestricted', + 'unretouched', + 'unreturnable', + 'unrevealed', + 'unreviewable', + 'unreviewed', + 'unrevolutionary', + 'unrewarded', + 'unrewarding', + 'unrhetorical', + 'unrhythmic', + 'unriddling', + 'unrighteous', + 'unrighteously', + 'unrighteousness', + 'unrighteousnesses', + 'unripeness', + 'unripenesses', + 'unrivalled', + 'unromantic', + 'unromantically', + 'unromanticized', + 'unrounding', + 'unruliness', + 'unrulinesses', + 'unsaddling', + 'unsafeties', + 'unsalaried', + 'unsalvageable', + 'unsanctioned', + 'unsanitary', + 'unsatisfactorily', + 'unsatisfactoriness', + 'unsatisfactorinesses', + 'unsatisfactory', + 'unsatisfied', + 'unsatisfying', + 'unsaturate', + 'unsaturated', + 'unsaturates', + 'unscalable', + 'unscheduled', + 'unscholarly', + 'unschooled', + 'unscientific', + 'unscientifically', + 'unscramble', + 'unscrambled', + 'unscrambler', + 'unscramblers', + 'unscrambles', + 'unscrambling', + 'unscreened', + 'unscrewing', + 'unscripted', + 'unscriptural', + 'unscrupulous', + 'unscrupulously', + 'unscrupulousness', + 'unscrupulousnesses', + 'unsearchable', + 'unsearchably', + 'unseasonable', + 'unseasonableness', + 'unseasonablenesses', + 'unseasonably', + 'unseasoned', + 'unseaworthy', + 'unseemlier', + 'unseemliest', + 'unseemliness', + 'unseemlinesses', + 'unsegmented', + 'unsegregated', + 'unselected', + 'unselective', + 'unselectively', + 'unselfishly', + 'unselfishness', + 'unselfishnesses', + 'unsellable', + 'unsensational', + 'unsensitized', + 'unsentimental', + 'unseparated', + 'unseriousness', + 'unseriousnesses', + 'unserviceable', + 'unsettledness', + 'unsettlednesses', + 'unsettlement', + 'unsettlements', + 'unsettling', + 'unsettlingly', + 'unshackled', + 'unshackles', + 'unshackling', + 'unshakable', + 'unshakably', + 'unsheathed', + 'unsheathes', + 'unsheathing', + 'unshelling', + 'unshifting', + 'unshipping', + 'unshockable', + 'unsighting', + 'unsightlier', + 'unsightliest', + 'unsightliness', + 'unsightlinesses', + 'unsinkable', + 'unskillful', + 'unskillfully', + 'unskillfulness', + 'unskillfulnesses', + 'unslakable', + 'unslinging', + 'unsmoothed', + 'unsnapping', + 'unsnarling', + 'unsociabilities', + 'unsociability', + 'unsociable', + 'unsociableness', + 'unsociablenesses', + 'unsociably', + 'unsocialized', + 'unsocially', + 'unsoldered', + 'unsoldering', + 'unsoldierly', + 'unsolicited', + 'unsolvable', + 'unsophisticated', + 'unsophistication', + 'unsophistications', + 'unsoundest', + 'unsoundness', + 'unsoundnesses', + 'unsparingly', + 'unspeakable', + 'unspeakably', + 'unspeaking', + 'unspecialized', + 'unspecifiable', + 'unspecific', + 'unspecified', + 'unspectacular', + 'unsphering', + 'unspiritual', + 'unsportsmanlike', + 'unstableness', + 'unstablenesses', + 'unstablest', + 'unstacking', + 'unstandardized', + 'unstartling', + 'unsteadied', + 'unsteadier', + 'unsteadies', + 'unsteadiest', + 'unsteadily', + 'unsteadiness', + 'unsteadinesses', + 'unsteadying', + 'unsteeling', + 'unstepping', + 'unsterilized', + 'unsticking', + 'unstinting', + 'unstintingly', + 'unstitched', + 'unstitches', + 'unstitching', + 'unstoppable', + 'unstoppably', + 'unstoppered', + 'unstoppering', + 'unstoppers', + 'unstopping', + 'unstrained', + 'unstrapped', + 'unstrapping', + 'unstratified', + 'unstressed', + 'unstresses', + 'unstringing', + 'unstructured', + 'unsubsidized', + 'unsubstantial', + 'unsubstantialities', + 'unsubstantiality', + 'unsubstantially', + 'unsubstantiated', + 'unsuccesses', + 'unsuccessful', + 'unsuccessfully', + 'unsuitabilities', + 'unsuitability', + 'unsuitable', + 'unsuitably', + 'unsupervised', + 'unsupportable', + 'unsupported', + 'unsurpassable', + 'unsurpassed', + 'unsurprised', + 'unsurprising', + 'unsurprisingly', + 'unsusceptible', + 'unsuspected', + 'unsuspecting', + 'unsuspectingly', + 'unsuspicious', + 'unsustainable', + 'unswathing', + 'unswearing', + 'unsweetened', + 'unswerving', + 'unsymmetrical', + 'unsymmetrically', + 'unsympathetic', + 'unsympathetically', + 'unsymptomatic', + 'unsynchronized', + 'unsystematic', + 'unsystematically', + 'unsystematized', + 'untalented', + 'untangling', + 'untarnished', + 'unteachable', + 'unteaching', + 'untechnical', + 'untempered', + 'untenabilities', + 'untenability', + 'untenanted', + 'untestable', + 'untethered', + 'untethering', + 'untheoretical', + 'unthinkabilities', + 'unthinkability', + 'unthinkable', + 'unthinkably', + 'unthinking', + 'unthinkingly', + 'unthreaded', + 'unthreading', + 'unthreatening', + 'unthroning', + 'untidiness', + 'untidinesses', + 'untillable', + 'untimelier', + 'untimeliest', + 'untimeliness', + 'untimelinesses', + 'untiringly', + 'untogether', + 'untouchabilities', + 'untouchability', + 'untouchable', + 'untouchables', + 'untowardly', + 'untowardness', + 'untowardnesses', + 'untraceable', + 'untraditional', + 'untraditionally', + 'untrammeled', + 'untransformed', + 'untranslatabilities', + 'untranslatability', + 'untranslatable', + 'untranslated', + 'untraveled', + 'untraversed', + 'untreading', + 'untrimming', + 'untroubled', + 'untrussing', + 'untrusting', + 'untrustworthy', + 'untruthful', + 'untruthfully', + 'untruthfulness', + 'untruthfulnesses', + 'untwisting', + 'untypically', + 'ununderstandable', + 'unusualness', + 'unusualnesses', + 'unutilized', + 'unutterable', + 'unutterably', + 'unvaccinated', + 'unvanquished', + 'unvarnished', + 'unventilated', + 'unverbalized', + 'unverifiable', + 'unverified', + 'unwariness', + 'unwarinesses', + 'unwarrantable', + 'unwarrantably', + 'unwarranted', + 'unwashedness', + 'unwashednesses', + 'unwatchable', + 'unwavering', + 'unwaveringly', + 'unwearable', + 'unweariedly', + 'unweathered', + 'unweetingly', + 'unweighted', + 'unweighting', + 'unwholesome', + 'unwholesomely', + 'unwieldier', + 'unwieldiest', + 'unwieldily', + 'unwieldiness', + 'unwieldinesses', + 'unwillingly', + 'unwillingness', + 'unwillingnesses', + 'unwinnable', + 'unwittingly', + 'unwontedly', + 'unwontedness', + 'unwontednesses', + 'unworkabilities', + 'unworkability', + 'unworkable', + 'unworkables', + 'unworldliness', + 'unworldlinesses', + 'unworthier', + 'unworthies', + 'unworthiest', + 'unworthily', + 'unworthiness', + 'unworthinesses', + 'unwrapping', + 'unwreathed', + 'unwreathes', + 'unwreathing', + 'unyielding', + 'unyieldingly', + 'upbraiders', + 'upbraiding', + 'upbringing', + 'upbringings', + 'upbuilding', + 'upchucking', + 'upclimbing', + 'upflinging', + 'upgathered', + 'upgathering', + 'upgradabilities', + 'upgradability', + 'upgradable', + 'upgradeabilities', + 'upgradeability', + 'upgradeable', + 'uphoarding', + 'upholstered', + 'upholsterer', + 'upholsterers', + 'upholsteries', + 'upholstering', + 'upholsters', + 'upholstery', + 'uplighting', + 'upmanships', + 'uppercased', + 'uppercases', + 'uppercasing', + 'upperclassman', + 'upperclassmen', + 'uppercutting', + 'upperparts', + 'uppishness', + 'uppishnesses', + 'uppitiness', + 'uppitinesses', + 'uppityness', + 'uppitynesses', + 'uppropping', + 'upreaching', + 'uprighting', + 'uprightness', + 'uprightnesses', + 'uproarious', + 'uproariously', + 'uproariousness', + 'uproariousnesses', + 'uprootedness', + 'uprootednesses', + 'upshifting', + 'upshooting', + 'upspringing', + 'upstanding', + 'upstandingness', + 'upstandingnesses', + 'upstarting', + 'upstepping', + 'upstirring', + 'upsweeping', + 'upswelling', + 'upswinging', + 'upthrowing', + 'upthrusting', + 'uptightness', + 'uptightnesses', + 'upwardness', + 'upwardnesses', + 'upwellings', + 'uraninites', + 'uranographies', + 'uranography', + 'urbanisation', + 'urbanisations', + 'urbanising', + 'urbanistic', + 'urbanistically', + 'urbanities', + 'urbanization', + 'urbanizations', + 'urbanizing', + 'urbanologies', + 'urbanologist', + 'urbanologists', + 'urbanology', + 'urediniospore', + 'urediniospores', + 'urediospore', + 'urediospores', + 'uredospore', + 'uredospores', + 'ureotelism', + 'ureotelisms', + 'urethrites', + 'urethritides', + 'urethritis', + 'urethritises', + 'urethroscope', + 'urethroscopes', + 'uricosuric', + 'uricotelic', + 'uricotelism', + 'uricotelisms', + 'urinalyses', + 'urinalysis', + 'urinations', + 'urinogenital', + 'urinometer', + 'urinometers', + 'urochordate', + 'urochordates', + 'urochromes', + 'urogenital', + 'urokinases', + 'urolithiases', + 'urolithiasis', + 'urological', + 'urologists', + 'uropygiums', + 'uroscopies', + 'urticarial', + 'urticarias', + 'urticating', + 'urtication', + 'urtications', + 'usabilities', + 'usableness', + 'usablenesses', + 'usefulness', + 'usefulnesses', + 'uselessness', + 'uselessnesses', + 'usherettes', + 'usquebaugh', + 'usquebaughs', + 'usualnesses', + 'usufructuaries', + 'usufructuary', + 'usuriously', + 'usuriousness', + 'usuriousnesses', + 'usurpation', + 'usurpations', + 'utilitarian', + 'utilitarianism', + 'utilitarianisms', + 'utilitarians', + 'utilizable', + 'utilization', + 'utilizations', + 'utopianism', + 'utopianisms', + 'utterances', + 'uttermosts', + 'uvarovites', + 'uvulitises', + 'uxoricides', + 'uxoriously', + 'uxoriousness', + 'uxoriousnesses', + 'vacantness', + 'vacantnesses', + 'vacationed', + 'vacationer', + 'vacationers', + 'vacationing', + 'vacationist', + 'vacationists', + 'vacationland', + 'vacationlands', + 'vaccinated', + 'vaccinates', + 'vaccinating', + 'vaccination', + 'vaccinations', + 'vaccinator', + 'vaccinators', + 'vacillated', + 'vacillates', + 'vacillating', + 'vacillatingly', + 'vacillation', + 'vacillations', + 'vacillator', + 'vacillators', + 'vacuolated', + 'vacuolation', + 'vacuolations', + 'vacuousness', + 'vacuousnesses', + 'vagabondage', + 'vagabondages', + 'vagabonded', + 'vagabonding', + 'vagabondish', + 'vagabondism', + 'vagabondisms', + 'vagariously', + 'vagilities', + 'vaginismus', + 'vaginismuses', + 'vaginitises', + 'vagotomies', + 'vagotonias', + 'vagrancies', + 'vaguenesses', + 'vainglories', + 'vainglorious', + 'vaingloriously', + 'vaingloriousness', + 'vaingloriousnesses', + 'vainnesses', + 'valediction', + 'valedictions', + 'valedictorian', + 'valedictorians', + 'valedictories', + 'valedictory', + 'valentines', + 'valetudinarian', + 'valetudinarianism', + 'valetudinarianisms', + 'valetudinarians', + 'valetudinaries', + 'valetudinary', + 'valiancies', + 'valiantness', + 'valiantnesses', + 'validating', + 'validation', + 'validations', + 'validities', + 'valleculae', + 'vallecular', + 'valorising', + 'valorization', + 'valorizations', + 'valorizing', + 'valorously', + 'valpolicella', + 'valpolicellas', + 'valuableness', + 'valuablenesses', + 'valuational', + 'valuationally', + 'valuations', + 'valuelessness', + 'valuelessnesses', + 'valvulites', + 'valvulitides', + 'valvulitis', + 'valvulitises', + 'vampirisms', + 'vanaspatis', + 'vandalised', + 'vandalises', + 'vandalising', + 'vandalisms', + 'vandalistic', + 'vandalization', + 'vandalizations', + 'vandalized', + 'vandalizes', + 'vandalizing', + 'vanguardism', + 'vanguardisms', + 'vanguardist', + 'vanguardists', + 'vanishingly', + 'vanitories', + 'vanpooling', + 'vanpoolings', + 'vanquishable', + 'vanquished', + 'vanquisher', + 'vanquishers', + 'vanquishes', + 'vanquishing', + 'vapidities', + 'vapidnesses', + 'vaporettos', + 'vaporishness', + 'vaporishnesses', + 'vaporising', + 'vaporizable', + 'vaporization', + 'vaporizations', + 'vaporizers', + 'vaporizing', + 'vaporously', + 'vaporousness', + 'vaporousnesses', + 'vaporwares', + 'variabilities', + 'variability', + 'variableness', + 'variablenesses', + 'variational', + 'variationally', + 'variations', + 'varicellas', + 'varicocele', + 'varicoceles', + 'varicolored', + 'varicosities', + 'varicosity', + 'variegated', + 'variegates', + 'variegating', + 'variegation', + 'variegations', + 'variegator', + 'variegators', + 'variometer', + 'variometers', + 'variousness', + 'variousnesses', + 'varletries', + 'varnishers', + 'varnishing', + 'vascularities', + 'vascularity', + 'vascularization', + 'vascularizations', + 'vasculature', + 'vasculatures', + 'vasculitides', + 'vasculitis', + 'vasectomies', + 'vasectomize', + 'vasectomized', + 'vasectomizes', + 'vasectomizing', + 'vasoactive', + 'vasoactivities', + 'vasoactivity', + 'vasoconstriction', + 'vasoconstrictions', + 'vasoconstrictive', + 'vasoconstrictor', + 'vasoconstrictors', + 'vasodilatation', + 'vasodilatations', + 'vasodilation', + 'vasodilations', + 'vasodilator', + 'vasodilators', + 'vasopressin', + 'vasopressins', + 'vasopressor', + 'vasopressors', + 'vasospasms', + 'vasospastic', + 'vasotocins', + 'vasotomies', + 'vassalages', + 'vastitudes', + 'vastnesses', + 'vaticinate', + 'vaticinated', + 'vaticinates', + 'vaticinating', + 'vaticination', + 'vaticinations', + 'vaticinator', + 'vaticinators', + 'vaudeville', + 'vaudevilles', + 'vaudevillian', + 'vaudevillians', + 'vaultingly', + 'vauntingly', + 'vectorially', + 'vegetables', + 'vegetarian', + 'vegetarianism', + 'vegetarianisms', + 'vegetarians', + 'vegetating', + 'vegetation', + 'vegetational', + 'vegetations', + 'vegetative', + 'vegetatively', + 'vegetativeness', + 'vegetativenesses', + 'vehemences', + 'vehemently', + 'velarization', + 'velarizations', + 'velarizing', + 'velleities', + 'velocimeter', + 'velocimeters', + 'velocipede', + 'velocipedes', + 'velocities', + 'velodromes', + 'velveteens', + 'velvetlike', + 'venalities', + 'vendibilities', + 'vendibility', + 'veneerings', + 'venenating', + 'venerabilities', + 'venerability', + 'venerableness', + 'venerablenesses', + 'venerating', + 'veneration', + 'venerations', + 'venerators', + 'venesection', + 'venesections', + 'vengeances', + 'vengefully', + 'vengefulness', + 'vengefulnesses', + 'venialness', + 'venialnesses', + 'venipuncture', + 'venipunctures', + 'venographies', + 'venography', + 'venomously', + 'venomousness', + 'venomousnesses', + 'venosities', + 'ventifacts', + 'ventilated', + 'ventilates', + 'ventilating', + 'ventilation', + 'ventilations', + 'ventilator', + 'ventilators', + 'ventilatory', + 'ventricles', + 'ventricose', + 'ventricular', + 'ventriculi', + 'ventriculus', + 'ventriloquial', + 'ventriloquially', + 'ventriloquies', + 'ventriloquism', + 'ventriloquisms', + 'ventriloquist', + 'ventriloquistic', + 'ventriloquists', + 'ventriloquize', + 'ventriloquized', + 'ventriloquizes', + 'ventriloquizing', + 'ventriloquy', + 'ventrolateral', + 'ventromedial', + 'venturesome', + 'venturesomely', + 'venturesomeness', + 'venturesomenesses', + 'venturously', + 'venturousness', + 'venturousnesses', + 'veraciously', + 'veraciousness', + 'veraciousnesses', + 'veracities', + 'verandahed', + 'verapamils', + 'veratridine', + 'veratridines', + 'veratrines', + 'verbalisms', + 'verbalistic', + 'verbalists', + 'verbalization', + 'verbalizations', + 'verbalized', + 'verbalizer', + 'verbalizers', + 'verbalizes', + 'verbalizing', + 'verbicides', + 'verbifying', + 'verbigeration', + 'verbigerations', + 'verboseness', + 'verbosenesses', + 'verbosities', + 'verdancies', + 'verdigrises', + 'veridicalities', + 'veridicality', + 'veridically', + 'verifiabilities', + 'verifiability', + 'verifiable', + 'verifiableness', + 'verifiablenesses', + 'verification', + 'verifications', + 'verisimilar', + 'verisimilarly', + 'verisimilitude', + 'verisimilitudes', + 'verisimilitudinous', + 'veritableness', + 'veritablenesses', + 'vermicelli', + 'vermicellis', + 'vermicides', + 'vermicular', + 'vermiculate', + 'vermiculated', + 'vermiculation', + 'vermiculations', + 'vermiculite', + 'vermiculites', + 'vermifuges', + 'vermilions', + 'vermillion', + 'vermillions', + 'vernacular', + 'vernacularism', + 'vernacularisms', + 'vernacularly', + 'vernaculars', + 'vernalization', + 'vernalizations', + 'vernalized', + 'vernalizes', + 'vernalizing', + 'vernations', + 'vernissage', + 'vernissages', + 'versatilely', + 'versatileness', + 'versatilenesses', + 'versatilities', + 'versatility', + 'versicular', + 'versification', + 'versifications', + 'versifiers', + 'versifying', + 'vertebrate', + 'vertebrates', + 'verticalities', + 'verticality', + 'vertically', + 'verticalness', + 'verticalnesses', + 'verticillate', + 'vertigines', + 'vertiginous', + 'vertiginously', + 'vesicating', + 'vesicularities', + 'vesicularity', + 'vesiculate', + 'vesiculated', + 'vesiculates', + 'vesiculating', + 'vesiculation', + 'vesiculations', + 'vespertilian', + 'vespertine', + 'vespiaries', + 'vestiaries', + 'vestibular', + 'vestibuled', + 'vestibules', + 'vestigially', + 'vestmental', + 'vesuvianite', + 'vesuvianites', + 'vetchlings', + 'veterinarian', + 'veterinarians', + 'veterinaries', + 'veterinary', + 'vexatiously', + 'vexatiousness', + 'vexatiousnesses', + 'vexillologic', + 'vexillological', + 'vexillologies', + 'vexillologist', + 'vexillologists', + 'vexillology', + 'viabilities', + 'vibraharpist', + 'vibraharpists', + 'vibraharps', + 'vibrancies', + 'vibraphone', + 'vibraphones', + 'vibraphonist', + 'vibraphonists', + 'vibrational', + 'vibrationless', + 'vibrations', + 'vibratoless', + 'vicariance', + 'vicariances', + 'vicariants', + 'vicariates', + 'vicariously', + 'vicariousness', + 'vicariousnesses', + 'vicarships', + 'vicegerencies', + 'vicegerency', + 'vicegerent', + 'vicegerents', + 'viceregally', + 'vicereines', + 'viceroyalties', + 'viceroyalty', + 'viceroyship', + 'viceroyships', + 'vichyssoise', + 'vichyssoises', + 'vicinities', + 'viciousness', + 'viciousnesses', + 'vicissitude', + 'vicissitudes', + 'vicissitudinous', + 'victimhood', + 'victimhoods', + 'victimised', + 'victimises', + 'victimising', + 'victimization', + 'victimizations', + 'victimized', + 'victimizer', + 'victimizers', + 'victimizes', + 'victimizing', + 'victimless', + 'victimologies', + 'victimologist', + 'victimologists', + 'victimology', + 'victorious', + 'victoriously', + 'victoriousness', + 'victoriousnesses', + 'victresses', + 'victualers', + 'victualing', + 'victualled', + 'victualler', + 'victuallers', + 'victualling', + 'videocassette', + 'videocassettes', + 'videoconference', + 'videoconferences', + 'videoconferencing', + 'videoconferencings', + 'videodiscs', + 'videodisks', + 'videographer', + 'videographers', + 'videographies', + 'videography', + 'videolands', + 'videophile', + 'videophiles', + 'videophone', + 'videophones', + 'videotaped', + 'videotapes', + 'videotaping', + 'videotexes', + 'videotexts', + 'viewership', + 'viewerships', + 'viewfinder', + 'viewfinders', + 'viewlessly', + 'viewpoints', + 'vigilances', + 'vigilantes', + 'vigilantism', + 'vigilantisms', + 'vigilantly', + 'vigintillion', + 'vigintillions', + 'vignetters', + 'vignetting', + 'vignettist', + 'vignettists', + 'vigorishes', + 'vigorously', + 'vigorousness', + 'vigorousnesses', + 'vilenesses', + 'vilification', + 'vilifications', + 'vilipended', + 'vilipending', + 'villageries', + 'villainess', + 'villainesses', + 'villainies', + 'villainous', + 'villainously', + 'villainousness', + 'villainousnesses', + 'villanella', + 'villanelle', + 'villanelles', + 'villenages', + 'villosities', + 'vinaigrette', + 'vinaigrettes', + 'vinblastine', + 'vinblastines', + 'vincristine', + 'vincristines', + 'vindicable', + 'vindicated', + 'vindicates', + 'vindicating', + 'vindication', + 'vindications', + 'vindicative', + 'vindicator', + 'vindicators', + 'vindicatory', + 'vindictive', + 'vindictively', + 'vindictiveness', + 'vindictivenesses', + 'vinedresser', + 'vinedressers', + 'vinegarish', + 'vineyardist', + 'vineyardists', + 'viniculture', + 'vinicultures', + 'vinification', + 'vinifications', + 'vinosities', + 'vinylidene', + 'vinylidenes', + 'violabilities', + 'violability', + 'violableness', + 'violablenesses', + 'violaceous', + 'violations', + 'violinistic', + 'violinists', + 'violoncelli', + 'violoncellist', + 'violoncellists', + 'violoncello', + 'violoncellos', + 'viperously', + 'viraginous', + 'virescence', + 'virescences', + 'virginalist', + 'virginalists', + 'virginally', + 'virginities', + 'viridescent', + 'viridities', + 'virilities', + 'virological', + 'virologically', + 'virologies', + 'virologist', + 'virologists', + 'virtualities', + 'virtuality', + 'virtueless', + 'virtuosities', + 'virtuosity', + 'virtuously', + 'virtuousness', + 'virtuousnesses', + 'virulences', + 'virulencies', + 'virulently', + 'viruliferous', + 'viscerally', + 'viscidities', + 'viscoelastic', + 'viscoelasticities', + 'viscoelasticity', + 'viscometer', + 'viscometers', + 'viscometric', + 'viscometries', + 'viscometry', + 'viscosimeter', + 'viscosimeters', + 'viscosimetric', + 'viscosities', + 'viscountcies', + 'viscountcy', + 'viscountess', + 'viscountesses', + 'viscounties', + 'viscousness', + 'viscousnesses', + 'visibilities', + 'visibility', + 'visibleness', + 'visiblenesses', + 'visionally', + 'visionaries', + 'visionariness', + 'visionarinesses', + 'visionless', + 'visitation', + 'visitations', + 'visitatorial', + 'visualised', + 'visualises', + 'visualising', + 'visualization', + 'visualizations', + 'visualized', + 'visualizer', + 'visualizers', + 'visualizes', + 'visualizing', + 'vitalising', + 'vitalistic', + 'vitalities', + 'vitalization', + 'vitalizations', + 'vitalizing', + 'vitellogeneses', + 'vitellogenesis', + 'vitelluses', + 'vitiations', + 'viticultural', + 'viticulturally', + 'viticulture', + 'viticultures', + 'viticulturist', + 'viticulturists', + 'vitrectomies', + 'vitrectomy', + 'vitreouses', + 'vitrifiable', + 'vitrification', + 'vitrifications', + 'vitrifying', + 'vitrioling', + 'vitriolled', + 'vitriolling', + 'vituperate', + 'vituperated', + 'vituperates', + 'vituperating', + 'vituperation', + 'vituperations', + 'vituperative', + 'vituperatively', + 'vituperator', + 'vituperators', + 'vituperatory', + 'vivaciously', + 'vivaciousness', + 'vivaciousnesses', + 'vivacities', + 'vivandiere', + 'vivandieres', + 'vividnesses', + 'vivification', + 'vivifications', + 'viviparities', + 'viviparity', + 'viviparous', + 'viviparously', + 'vivisected', + 'vivisecting', + 'vivisection', + 'vivisectional', + 'vivisectionist', + 'vivisectionists', + 'vivisections', + 'vivisector', + 'vivisectors', + 'vizierates', + 'viziership', + 'vizierships', + 'vocabularies', + 'vocabulary', + 'vocalically', + 'vocalising', + 'vocalities', + 'vocalization', + 'vocalizations', + 'vocalizers', + 'vocalizing', + 'vocational', + 'vocationalism', + 'vocationalisms', + 'vocationalist', + 'vocationalists', + 'vocationally', + 'vocatively', + 'vociferant', + 'vociferate', + 'vociferated', + 'vociferates', + 'vociferating', + 'vociferation', + 'vociferations', + 'vociferator', + 'vociferators', + 'vociferous', + 'vociferously', + 'vociferousness', + 'vociferousnesses', + 'voguishness', + 'voguishnesses', + 'voicefulness', + 'voicefulnesses', + 'voicelessly', + 'voicelessness', + 'voicelessnesses', + 'voiceprint', + 'voiceprints', + 'voidableness', + 'voidablenesses', + 'voidnesses', + 'volatileness', + 'volatilenesses', + 'volatilise', + 'volatilised', + 'volatilises', + 'volatilising', + 'volatilities', + 'volatility', + 'volatilizable', + 'volatilization', + 'volatilizations', + 'volatilize', + 'volatilized', + 'volatilizes', + 'volatilizing', + 'volcanically', + 'volcanicities', + 'volcanicity', + 'volcanisms', + 'volcanologic', + 'volcanological', + 'volcanologies', + 'volcanologist', + 'volcanologists', + 'volcanology', + 'volitional', + 'volkslieder', + 'volleyball', + 'volleyballs', + 'volplaning', + 'voltmeters', + 'volubilities', + 'volubility', + 'volubleness', + 'volublenesses', + 'volumeters', + 'volumetric', + 'volumetrically', + 'voluminosities', + 'voluminosity', + 'voluminous', + 'voluminously', + 'voluminousness', + 'voluminousnesses', + 'voluntaries', + 'voluntarily', + 'voluntariness', + 'voluntarinesses', + 'voluntarism', + 'voluntarisms', + 'voluntarist', + 'voluntaristic', + 'voluntarists', + 'voluntaryism', + 'voluntaryisms', + 'voluntaryist', + 'voluntaryists', + 'volunteered', + 'volunteering', + 'volunteerism', + 'volunteerisms', + 'volunteers', + 'voluptuaries', + 'voluptuary', + 'voluptuous', + 'voluptuously', + 'voluptuousness', + 'voluptuousnesses', + 'volvuluses', + 'vomitories', + 'voodooisms', + 'voodooistic', + 'voodooists', + 'voraciously', + 'voraciousness', + 'voraciousnesses', + 'voracities', + 'vortically', + 'vorticella', + 'vorticellae', + 'vorticellas', + 'vorticisms', + 'vorticists', + 'vorticities', + 'votaresses', + 'votiveness', + 'votivenesses', + 'vouchering', + 'vouchsafed', + 'vouchsafement', + 'vouchsafements', + 'vouchsafes', + 'vouchsafing', + 'vowelizing', + 'voyeurisms', + 'voyeuristic', + 'voyeuristically', + 'vulcanicities', + 'vulcanicity', + 'vulcanisate', + 'vulcanisates', + 'vulcanisation', + 'vulcanisations', + 'vulcanised', + 'vulcanises', + 'vulcanising', + 'vulcanisms', + 'vulcanizate', + 'vulcanizates', + 'vulcanization', + 'vulcanizations', + 'vulcanized', + 'vulcanizer', + 'vulcanizers', + 'vulcanizes', + 'vulcanizing', + 'vulcanologies', + 'vulcanologist', + 'vulcanologists', + 'vulcanology', + 'vulgarians', + 'vulgarised', + 'vulgarises', + 'vulgarising', + 'vulgarisms', + 'vulgarities', + 'vulgarization', + 'vulgarizations', + 'vulgarized', + 'vulgarizer', + 'vulgarizers', + 'vulgarizes', + 'vulgarizing', + 'vulnerabilities', + 'vulnerability', + 'vulnerable', + 'vulnerableness', + 'vulnerablenesses', + 'vulnerably', + 'vulneraries', + 'vulvitises', + 'vulvovaginitis', + 'vulvovaginitises', + 'wackinesses', + 'wadsetting', + 'wafflestomper', + 'wafflestompers', + 'wageworker', + 'wageworkers', + 'waggishness', + 'waggishnesses', + 'wagonettes', + 'wainscoted', + 'wainscoting', + 'wainscotings', + 'wainscotted', + 'wainscotting', + 'wainscottings', + 'wainwright', + 'wainwrights', + 'waistbands', + 'waistcoated', + 'waistcoats', + 'waistlines', + 'waitperson', + 'waitpersons', + 'waitressed', + 'waitresses', + 'waitressing', + 'wakefulness', + 'wakefulnesses', + 'walkabouts', + 'walkathons', + 'walkingstick', + 'walkingsticks', + 'wallboards', + 'wallflower', + 'wallflowers', + 'wallpapered', + 'wallpapering', + 'wallpapers', + 'wallydraigle', + 'wallydraigles', + 'wampishing', + 'wampumpeag', + 'wampumpeags', + 'wanderings', + 'wanderlust', + 'wanderlusts', + 'wantonness', + 'wantonnesses', + 'wapentakes', + 'wappenschawing', + 'wappenschawings', + 'warbonnets', + 'wardenries', + 'wardenship', + 'wardenships', + 'wardresses', + 'warehoused', + 'warehouseman', + 'warehousemen', + 'warehouser', + 'warehousers', + 'warehouses', + 'warehousing', + 'warinesses', + 'warlordism', + 'warlordisms', + 'warmblooded', + 'warmhearted', + 'warmheartedness', + 'warmheartednesses', + 'warmnesses', + 'warmongering', + 'warmongerings', + 'warmongers', + 'warrantable', + 'warrantableness', + 'warrantablenesses', + 'warrantably', + 'warrantees', + 'warranters', + 'warranties', + 'warranting', + 'warrantless', + 'warrantors', + 'washabilities', + 'washability', + 'washateria', + 'washaterias', + 'washbasins', + 'washboards', + 'washcloths', + 'washerwoman', + 'washerwomen', + 'washeteria', + 'washeterias', + 'washhouses', + 'washstands', + 'waspishness', + 'waspishnesses', + 'wassailers', + 'wassailing', + 'wastebasket', + 'wastebaskets', + 'wastefully', + 'wastefulness', + 'wastefulnesses', + 'wastelands', + 'wastepaper', + 'wastepapers', + 'wastewater', + 'wastewaters', + 'watchables', + 'watchbands', + 'watchcases', + 'watchcries', + 'watchdogged', + 'watchdogging', + 'watchfully', + 'watchfulness', + 'watchfulnesses', + 'watchmaker', + 'watchmakers', + 'watchmaking', + 'watchmakings', + 'watchtower', + 'watchtowers', + 'watchwords', + 'waterbirds', + 'waterborne', + 'waterbucks', + 'watercolor', + 'watercolorist', + 'watercolorists', + 'watercolors', + 'watercooler', + 'watercoolers', + 'watercourse', + 'watercourses', + 'watercraft', + 'watercrafts', + 'watercress', + 'watercresses', + 'waterfalls', + 'waterflood', + 'waterflooded', + 'waterflooding', + 'waterfloods', + 'waterfowler', + 'waterfowlers', + 'waterfowling', + 'waterfowlings', + 'waterfowls', + 'waterfront', + 'waterfronts', + 'wateriness', + 'waterinesses', + 'waterishness', + 'waterishnesses', + 'waterleafs', + 'waterlessness', + 'waterlessnesses', + 'waterlines', + 'waterlogged', + 'waterlogging', + 'watermanship', + 'watermanships', + 'watermarked', + 'watermarking', + 'watermarks', + 'watermelon', + 'watermelons', + 'waterpower', + 'waterpowers', + 'waterproof', + 'waterproofed', + 'waterproofer', + 'waterproofers', + 'waterproofing', + 'waterproofings', + 'waterproofness', + 'waterproofnesses', + 'waterproofs', + 'waterscape', + 'waterscapes', + 'watersheds', + 'watersides', + 'waterskiing', + 'waterskiings', + 'waterspout', + 'waterspouts', + 'waterthrush', + 'waterthrushes', + 'watertight', + 'watertightness', + 'watertightnesses', + 'waterweeds', + 'waterwheel', + 'waterwheels', + 'waterworks', + 'waterzoois', + 'wattlebird', + 'wattlebirds', + 'wattmeters', + 'waveguides', + 'wavelength', + 'wavelengths', + 'wavelessly', + 'waveringly', + 'waveshapes', + 'wavinesses', + 'waxberries', + 'waxinesses', + 'waywardness', + 'waywardnesses', + 'weakfishes', + 'weakhearted', + 'weakliness', + 'weaklinesses', + 'weaknesses', + 'wealthiest', + 'wealthiness', + 'wealthinesses', + 'weaponless', + 'weaponries', + 'wearabilities', + 'wearability', + 'wearifully', + 'wearifulness', + 'wearifulnesses', + 'wearilessly', + 'wearinesses', + 'wearisomely', + 'wearisomeness', + 'wearisomenesses', + 'weaselling', + 'weatherabilities', + 'weatherability', + 'weatherboard', + 'weatherboarded', + 'weatherboarding', + 'weatherboardings', + 'weatherboards', + 'weathercast', + 'weathercaster', + 'weathercasters', + 'weathercasts', + 'weathercock', + 'weathercocks', + 'weatherglass', + 'weatherglasses', + 'weathering', + 'weatherings', + 'weatherization', + 'weatherizations', + 'weatherize', + 'weatherized', + 'weatherizes', + 'weatherizing', + 'weatherman', + 'weathermen', + 'weatherperson', + 'weatherpersons', + 'weatherproof', + 'weatherproofed', + 'weatherproofing', + 'weatherproofness', + 'weatherproofnesses', + 'weatherproofs', + 'weatherworn', + 'weaverbird', + 'weaverbirds', + 'weedinesses', + 'weekenders', + 'weekending', + 'weeknights', + 'weightiest', + 'weightiness', + 'weightinesses', + 'weightless', + 'weightlessly', + 'weightlessness', + 'weightlessnesses', + 'weightlifter', + 'weightlifters', + 'weightlifting', + 'weightliftings', + 'weimaraner', + 'weimaraners', + 'weirdnesses', + 'weisenheimer', + 'weisenheimers', + 'welcomeness', + 'welcomenesses', + 'welfarisms', + 'welfarists', + 'wellnesses', + 'wellspring', + 'wellsprings', + 'weltanschauung', + 'weltanschauungen', + 'weltanschauungs', + 'welterweight', + 'welterweights', + 'weltschmerz', + 'weltschmerzes', + 'wentletrap', + 'wentletraps', + 'werewolves', + 'westerlies', + 'westerners', + 'westernisation', + 'westernisations', + 'westernise', + 'westernised', + 'westernises', + 'westernising', + 'westernization', + 'westernizations', + 'westernize', + 'westernized', + 'westernizes', + 'westernizing', + 'westernmost', + 'wettabilities', + 'wettability', + 'whalebacks', + 'whaleboats', + 'whalebones', + 'wharfinger', + 'wharfingers', + 'wharfmaster', + 'wharfmasters', + 'whatchamacallit', + 'whatchamacallits', + 'whatnesses', + 'whatsoever', + 'wheelbarrow', + 'wheelbarrowed', + 'wheelbarrowing', + 'wheelbarrows', + 'wheelbases', + 'wheelchair', + 'wheelchairs', + 'wheelhorse', + 'wheelhorses', + 'wheelhouse', + 'wheelhouses', + 'wheelworks', + 'wheelwright', + 'wheelwrights', + 'wheeziness', + 'wheezinesses', + 'whencesoever', + 'whensoever', + 'whereabout', + 'whereabouts', + 'wherefores', + 'wheresoever', + 'wherethrough', + 'wherewithal', + 'wherewithals', + 'whetstones', + 'whichsoever', + 'whickering', + 'whiffletree', + 'whiffletrees', + 'whigmaleerie', + 'whigmaleeries', + 'whimpering', + 'whimsicalities', + 'whimsicality', + 'whimsically', + 'whimsicalness', + 'whimsicalnesses', + 'whinstones', + 'whiplashes', + 'whippersnapper', + 'whippersnappers', + 'whippletree', + 'whippletrees', + 'whippoorwill', + 'whippoorwills', + 'whipsawing', + 'whipstitch', + 'whipstitched', + 'whipstitches', + 'whipstitching', + 'whipstocks', + 'whirligigs', + 'whirlpools', + 'whirlwinds', + 'whirlybird', + 'whirlybirds', + 'whisperers', + 'whispering', + 'whisperingly', + 'whisperings', + 'whistleable', + 'whistleblower', + 'whistleblowers', + 'whistleblowing', + 'whistleblowings', + 'whistlings', + 'whitebaits', + 'whitebeard', + 'whitebeards', + 'whitefaces', + 'whitefishes', + 'whiteflies', + 'whiteheads', + 'whitenesses', + 'whitenings', + 'whitesmith', + 'whitesmiths', + 'whitetails', + 'whitethroat', + 'whitethroats', + 'whitewalls', + 'whitewashed', + 'whitewasher', + 'whitewashers', + 'whitewashes', + 'whitewashing', + 'whitewashings', + 'whitewings', + 'whitewoods', + 'whithersoever', + 'whitherward', + 'whittlings', + 'whizzbangs', + 'whodunnits', + 'wholehearted', + 'wholeheartedly', + 'wholenesses', + 'wholesaled', + 'wholesaler', + 'wholesalers', + 'wholesales', + 'wholesaling', + 'wholesomely', + 'wholesomeness', + 'wholesomenesses', + 'whomsoever', + 'whorehouse', + 'whorehouses', + 'whoremaster', + 'whoremasters', + 'whoremonger', + 'whoremongers', + 'whortleberries', + 'whortleberry', + 'whosesoever', + 'wickedness', + 'wickednesses', + 'wickerwork', + 'wickerworks', + 'widdershins', + 'wideawakes', + 'widemouthed', + 'widenesses', + 'widespread', + 'widowerhood', + 'widowerhoods', + 'widowhoods', + 'wienerwurst', + 'wienerwursts', + 'wifeliness', + 'wifelinesses', + 'wigwagging', + 'wildcatted', + 'wildcatter', + 'wildcatters', + 'wildcatting', + 'wildebeest', + 'wildebeests', + 'wilderment', + 'wilderments', + 'wilderness', + 'wildernesses', + 'wildflower', + 'wildflowers', + 'wildfowler', + 'wildfowlers', + 'wildfowling', + 'wildfowlings', + 'wildnesses', + 'wilinesses', + 'willemites', + 'willfulness', + 'willfulnesses', + 'willingest', + 'willingness', + 'willingnesses', + 'willowiest', + 'willowlike', + 'willowware', + 'willowwares', + 'willpowers', + 'wimpinesses', + 'wimpishness', + 'wimpishnesses', + 'windblasts', + 'windbreaker', + 'windbreakers', + 'windbreaks', + 'windburned', + 'windburning', + 'windchills', + 'windflower', + 'windflowers', + 'windhovers', + 'windinesses', + 'windjammer', + 'windjammers', + 'windjamming', + 'windjammings', + 'windlassed', + 'windlasses', + 'windlassing', + 'windlessly', + 'windlestraw', + 'windlestraws', + 'windmilled', + 'windmilling', + 'windowless', + 'windowpane', + 'windowpanes', + 'windowsill', + 'windowsills', + 'windrowing', + 'windscreen', + 'windscreens', + 'windshield', + 'windshields', + 'windstorms', + 'windsurfed', + 'windsurfing', + 'windsurfings', + 'windthrows', + 'wineglasses', + 'winegrower', + 'winegrowers', + 'winemakers', + 'winemaking', + 'winemakings', + 'winepresses', + 'winglessness', + 'winglessnesses', + 'wingspread', + 'wingspreads', + 'winsomeness', + 'winsomenesses', + 'winterberries', + 'winterberry', + 'wintergreen', + 'wintergreens', + 'winteriest', + 'winterization', + 'winterizations', + 'winterized', + 'winterizes', + 'winterizing', + 'winterkill', + 'winterkills', + 'wintertide', + 'wintertides', + 'wintertime', + 'wintertimes', + 'wintriness', + 'wintrinesses', + 'wiredrawer', + 'wiredrawers', + 'wiredrawing', + 'wirehaired', + 'wirelessed', + 'wirelesses', + 'wirelessing', + 'wirephotos', + 'wiretapped', + 'wiretapper', + 'wiretappers', + 'wiretapping', + 'wirinesses', + 'wisecracked', + 'wisecracker', + 'wisecrackers', + 'wisecracking', + 'wisecracks', + 'wisenesses', + 'wisenheimer', + 'wisenheimers', + 'wishfulness', + 'wishfulnesses', + 'wispinesses', + 'wistfulness', + 'wistfulnesses', + 'witchcraft', + 'witchcrafts', + 'witcheries', + 'witchgrass', + 'witchgrasses', + 'witchweeds', + 'witenagemot', + 'witenagemote', + 'witenagemotes', + 'witenagemots', + 'withdrawable', + 'withdrawal', + 'withdrawals', + 'withdrawing', + 'withdrawnness', + 'withdrawnnesses', + 'witheringly', + 'witherites', + 'withershins', + 'withholder', + 'withholders', + 'withholding', + 'withindoors', + 'withoutdoors', + 'withstanding', + 'withstands', + 'witlessness', + 'witlessnesses', + 'witnessing', + 'witticisms', + 'wittinesses', + 'wizardries', + 'wobbliness', + 'wobblinesses', + 'woebegoneness', + 'woebegonenesses', + 'woefullest', + 'woefulness', + 'woefulnesses', + 'wolfberries', + 'wolffishes', + 'wolfhounds', + 'wolfishness', + 'wolfishnesses', + 'wolframite', + 'wolframites', + 'wolfsbanes', + 'wollastonite', + 'wollastonites', + 'wolverines', + 'womanhoods', + 'womanishly', + 'womanishness', + 'womanishnesses', + 'womanising', + 'womanizers', + 'womanizing', + 'womanliest', + 'womanliness', + 'womanlinesses', + 'womanpower', + 'womanpowers', + 'womenfolks', + 'wonderfully', + 'wonderfulness', + 'wonderfulnesses', + 'wonderland', + 'wonderlands', + 'wonderment', + 'wonderments', + 'wonderwork', + 'wonderworks', + 'wondrously', + 'wondrousness', + 'wondrousnesses', + 'wontedness', + 'wontednesses', + 'woodblocks', + 'woodcarver', + 'woodcarvers', + 'woodcarving', + 'woodcarvings', + 'woodchopper', + 'woodchoppers', + 'woodchucks', + 'woodcrafts', + 'woodcutter', + 'woodcutters', + 'woodcutting', + 'woodcuttings', + 'woodenhead', + 'woodenheaded', + 'woodenheads', + 'woodenness', + 'woodennesses', + 'woodenware', + 'woodenwares', + 'woodinesses', + 'woodlander', + 'woodlanders', + 'woodpecker', + 'woodpeckers', + 'woodshedded', + 'woodshedding', + 'woodstoves', + 'woodworker', + 'woodworkers', + 'woodworking', + 'woodworkings', + 'woolgatherer', + 'woolgatherers', + 'woolgathering', + 'woolgatherings', + 'woolliness', + 'woollinesses', + 'woozinesses', + 'wordinesses', + 'wordlessly', + 'wordlessness', + 'wordlessnesses', + 'wordmonger', + 'wordmongers', + 'wordsmitheries', + 'wordsmithery', + 'wordsmiths', + 'workabilities', + 'workability', + 'workableness', + 'workablenesses', + 'workaholic', + 'workaholics', + 'workaholism', + 'workaholisms', + 'workbasket', + 'workbaskets', + 'workbenches', + 'workforces', + 'workhorses', + 'workhouses', + 'workingman', + 'workingmen', + 'workingwoman', + 'workingwomen', + 'worklessness', + 'worklessnesses', + 'workmanlike', + 'workmanship', + 'workmanships', + 'workpeople', + 'workpieces', + 'workplaces', + 'worksheets', + 'workstation', + 'workstations', + 'worktables', + 'worldliest', + 'worldliness', + 'worldlinesses', + 'worldlings', + 'worldviews', + 'wornnesses', + 'worriments', + 'worrisomely', + 'worrisomeness', + 'worrisomenesses', + 'worrywarts', + 'worshipers', + 'worshipful', + 'worshipfully', + 'worshipfulness', + 'worshipfulnesses', + 'worshiping', + 'worshipless', + 'worshipped', + 'worshipper', + 'worshippers', + 'worshipping', + 'worthiness', + 'worthinesses', + 'worthlessly', + 'worthlessness', + 'worthlessnesses', + 'worthwhile', + 'worthwhileness', + 'worthwhilenesses', + 'wraithlike', + 'wraparound', + 'wraparounds', + 'wrathfully', + 'wrathfulness', + 'wrathfulnesses', + 'wrenchingly', + 'wrestlings', + 'wretcheder', + 'wretchedest', + 'wretchedly', + 'wretchedness', + 'wretchednesses', + 'wriggliest', + 'wrinkliest', + 'wristbands', + 'wristlocks', + 'wristwatch', + 'wristwatches', + 'wrongdoers', + 'wrongdoing', + 'wrongdoings', + 'wrongfully', + 'wrongfulness', + 'wrongfulnesses', + 'wrongheaded', + 'wrongheadedly', + 'wrongheadedness', + 'wrongheadednesses', + 'wrongnesses', + 'wulfenites', + 'wunderkind', + 'wunderkinder', + 'wyandottes', + 'wyliecoats', + 'xanthomata', + 'xanthophyll', + 'xanthophylls', + 'xenobiotic', + 'xenobiotics', + 'xenodiagnoses', + 'xenodiagnosis', + 'xenodiagnostic', + 'xenogamies', + 'xenogeneic', + 'xenogenies', + 'xenografts', + 'xenolithic', + 'xenophiles', + 'xenophobes', + 'xenophobia', + 'xenophobias', + 'xenophobic', + 'xenophobically', + 'xenotropic', + 'xerographic', + 'xerographically', + 'xerographies', + 'xerography', + 'xerophilies', + 'xerophilous', + 'xerophthalmia', + 'xerophthalmias', + 'xerophthalmic', + 'xerophytes', + 'xerophytic', + 'xerophytism', + 'xerophytisms', + 'xeroradiographies', + 'xeroradiography', + 'xerothermic', + 'xiphisterna', + 'xiphisternum', + 'xylographer', + 'xylographers', + 'xylographic', + 'xylographical', + 'xylographies', + 'xylographs', + 'xylography', + 'xylophagous', + 'xylophones', + 'xylophonist', + 'xylophonists', + 'xylotomies', + 'yardmaster', + 'yardmasters', + 'yardsticks', + 'yearningly', + 'yeastiness', + 'yeastinesses', + 'yellowfins', + 'yellowhammer', + 'yellowhammers', + 'yellowlegs', + 'yellowtail', + 'yellowtails', + 'yellowthroat', + 'yellowthroats', + 'yellowware', + 'yellowwares', + 'yellowwood', + 'yellowwoods', + 'yeomanries', + 'yesterdays', + 'yesternight', + 'yesternights', + 'yesteryear', + 'yesteryears', + 'yohimbines', + 'yokefellow', + 'yokefellows', + 'youngberries', + 'youngberry', + 'younglings', + 'youngnesses', + 'youngsters', + 'yourselves', + 'youthening', + 'youthfully', + 'youthfulness', + 'youthfulnesses', + 'youthquake', + 'youthquakes', + 'ytterbiums', + 'zabaglione', + 'zabagliones', + 'zamindaris', + 'zaninesses', + 'zapateados', + 'zealotries', + 'zealousness', + 'zealousnesses', + 'zebrawoods', + 'zeitgebers', + 'zeitgeists', + 'zemindaries', + 'zestfulness', + 'zestfulnesses', + 'zibellines', + 'zidovudine', + 'zidovudines', + 'zigzagging', + 'zillionaire', + 'zillionaires', + 'zincifying', + 'zinfandels', + 'zinkifying', + 'zirconiums', + 'zitherists', + 'zoantharian', + 'zoantharians', + 'zombielike', + 'zombification', + 'zombifications', + 'zombifying', + 'zoogeographer', + 'zoogeographers', + 'zoogeographic', + 'zoogeographical', + 'zoogeographically', + 'zoogeographies', + 'zoogeography', + 'zookeepers', + 'zoolatries', + 'zoological', + 'zoologically', + 'zoologists', + 'zoometries', + 'zoomorphic', + 'zoophilies', + 'zoophilous', + 'zooplankter', + 'zooplankters', + 'zooplankton', + 'zooplanktonic', + 'zooplanktons', + 'zoosporangia', + 'zoosporangium', + 'zoosterols', + 'zootechnical', + 'zootechnics', + 'zooxanthella', + 'zooxanthellae', + 'zucchettos', + 'zwitterion', + 'zwitterionic', + 'zwitterions', + 'zygapophyses', + 'zygapophysis', + 'zygodactyl', + 'zygodactylous', + 'zygomorphic', + 'zygomorphies', + 'zygomorphy', + 'zygosities', + 'zygospores', + 'zymologies', +]; + +const len = scrabble_array.length; +let current_list: List = null; + +for (let i = len - 1; i >= 0; i -= 1) { + current_list = [scrabble_array[i], current_list]; +} + +/** + * `scrabble_list` is a list of strings, each representing + * an allowed word in Scrabble. + */ + +export const scrabble_list = current_list; + +export function charAt(s: string, i: number): any { + const result = s.charAt(i); + return result === '' ? undefined : result; +} + +export function arrayLength(x: any): number { + return x.length; +} diff --git a/src/bundles/scrabble/index.ts b/src/bundles/scrabble/index.ts index 26fe78813..d46ca8233 100644 --- a/src/bundles/scrabble/index.ts +++ b/src/bundles/scrabble/index.ts @@ -1,10 +1,10 @@ -/** - * Scrabble words for Source Academy - * @author Martin Henz - */ -export { - scrabble_array, - scrabble_list, - charAt, - arrayLength, -} from './functions'; +/** + * Scrabble words for Source Academy + * @author Martin Henz + */ +export { + scrabble_array, + scrabble_list, + charAt, + arrayLength, +} from './functions'; diff --git a/src/bundles/scrabble/types.ts b/src/bundles/scrabble/types.ts index 386563b79..771c27b3a 100644 --- a/src/bundles/scrabble/types.ts +++ b/src/bundles/scrabble/types.ts @@ -1,4 +1,4 @@ -export type Pair = [H, T]; -export type EmptyList = null; -export type NonEmptyList = Pair; -export type List = EmptyList | NonEmptyList; +export type Pair = [H, T]; +export type EmptyList = null; +export type NonEmptyList = Pair; +export type List = EmptyList | NonEmptyList; diff --git a/src/bundles/sound/functions.ts b/src/bundles/sound/functions.ts index 52c66f5ae..05969a8cb 100644 --- a/src/bundles/sound/functions.ts +++ b/src/bundles/sound/functions.ts @@ -1,940 +1,940 @@ -/** - * The sounds library provides functions for constructing and playing sounds. - * - * A wave is a function that takes in a number `t` and returns - * a number representing the amplitude at time `t`. - * The amplitude should fall within the range of [-1, 1]. - * - * A Sound is a pair(wave, duration) where duration is the length of the sound in seconds. - * The constructor make_sound and accessors get_wave and get_duration are provided. - * - * Sound Discipline: - * For all sounds, the wave function applied to and time `t` beyond its duration returns 0, that is: - * `(get_wave(sound))(get_duration(sound) + x) === 0` for any x >= 0. - * - * Two functions which combine Sounds, `consecutively` and `simultaneously` are given. - * Additionally, we provide sound transformation functions `adsr` and `phase_mod` - * which take in a Sound and return a Sound. - * - * Finally, the provided `play` function takes in a Sound and plays it using your - * computer's sound system. - * - * @module sound - * @author Koh Shang Hui - * @author Samyukta Sounderraman - */ - -/* eslint-disable new-cap, @typescript-eslint/naming-convention */ -import type { - Wave, - Sound, - SoundProducer, - SoundTransformer, - AudioPlayed, -} from './types'; -import { - pair, - head, - tail, - list, - length, - is_null, - is_pair, - accumulate, - type List, -} from 'js-slang/dist/stdlib/list'; -import { RIFFWAVE } from './riffwave'; -import context from 'js-slang/context'; - -// Global Constants and Variables -const FS: number = 44100; // Output sample rate -const fourier_expansion_level: number = 5; // fourier expansion level - -const audioPlayed: AudioPlayed[] = []; -context.moduleContexts.sound.state = { - audioPlayed, -}; - -// Singular audio context for all playback functions -let audioplayer: AudioContext; - -// Track if a sound is currently playing -let isPlaying: boolean; - -// Instantiates new audio context -function init_audioCtx(): void { - audioplayer = new window.AudioContext(); - // audioplayer = new (window.AudioContext || window.webkitAudioContext)(); -} - -// linear decay from 1 to 0 over decay_period -function linear_decay(decay_period: number): (t: number) => number { - return (t) => { - if (t > decay_period || t < 0) { - return 0; - } - return 1 - t / decay_period; - }; -} - -// // --------------------------------------------- -// // Microphone Functionality -// // --------------------------------------------- - -// permission initially undefined -// set to true by granting microphone permission -// set to false by denying microphone permission -let permission: boolean | undefined; - -let recorded_sound: Sound | undefined; - -// check_permission is called whenever we try -// to record a sound -function check_permission() { - if (permission === undefined) { - throw new Error( - 'Call init_record(); to obtain permission to use microphone', - ); - } else if (permission === false) { - throw new Error(`Permission has been denied.\n - Re-start browser and call init_record();\n - to obtain permission to use microphone.`); - } // (permission === true): do nothing -} - -let globalStream: any; - -function rememberStream(stream: any) { - permission = true; - globalStream = stream; -} - -function setPermissionToFalse() { - permission = false; -} - -function start_recording(mediaRecorder: MediaRecorder) { - const data: any[] = []; - mediaRecorder.ondataavailable = (e) => e.data.size && data.push(e.data); - mediaRecorder.start(); - mediaRecorder.onstop = () => process(data); -} - -// duration of recording signal in milliseconds -const recording_signal_ms = 100; - -// duration of pause after "run" before recording signal is played -const pre_recording_signal_pause_ms = 200; - -function play_recording_signal() { - play(sine_sound(1200, recording_signal_ms / 1000)); -} - -// eslint-disable-next-line @typescript-eslint/no-shadow -function process(data) { - const audioContext = new AudioContext(); - const blob = new Blob(data); - - convertToArrayBuffer(blob) - .then((arrayBuffer) => audioContext.decodeAudioData(arrayBuffer)) - .then(save); -} - -// Converts input microphone sound (blob) into array format. -function convertToArrayBuffer(blob: Blob): Promise { - const url = URL.createObjectURL(blob); - return fetch(url) - .then((response) => response.arrayBuffer()); -} - -function save(audioBuffer: AudioBuffer) { - const array = audioBuffer.getChannelData(0); - const duration = array.length / FS; - recorded_sound = make_sound((t) => { - const index = t * FS; - const lowerIndex = Math.floor(index); - const upperIndex = lowerIndex + 1; - const ratio = index - lowerIndex; - const upper = array[upperIndex] ? array[upperIndex] : 0; - const lower = array[lowerIndex] ? array[lowerIndex] : 0; - return lower * (1 - ratio) + upper * ratio; - }, duration); -} - -/** - * Initialize recording by obtaining permission - * to use the default device microphone - * - * @returns string "obtaining recording permission" - */ -export function init_record(): string { - navigator.mediaDevices - .getUserMedia({ audio: true }) - .then(rememberStream, setPermissionToFalse); - return 'obtaining recording permission'; -} - -/** - * takes a buffer duration (in seconds) as argument, and - * returns a nullary stop function stop. A call - * stop() returns a sound promise: a nullary function - * that returns a sound. Example:
init_record();
- * const stop = record(0.5);
- * // record after 0.5 seconds. Then in next query:
- * const promise = stop();
- * // In next query, you can play the promised sound, by
- * // applying the promise:
- * play(promise());
- * @param buffer - pause before recording, in seconds - * @returns nullary stop function; - * stop() stops the recording and - * returns a sound promise: a nullary function that returns the recorded sound - */ -export function record(buffer: number): () => () => Sound { - check_permission(); - const mediaRecorder = new MediaRecorder(globalStream); - setTimeout(() => { - play_recording_signal(); - start_recording(mediaRecorder); - }, recording_signal_ms + buffer * 1000); - return () => { - mediaRecorder.stop(); - play_recording_signal(); - return () => { - if (recorded_sound === undefined) { - throw new Error('recording still being processed'); - } else { - return recorded_sound; - } - }; - }; -} - -/** - * Records a sound of given duration in seconds, after - * a buffer also in seconds, and - * returns a sound promise: a nullary function - * that returns a sound. Example:
init_record();
- * const promise = record_for(2, 0.5);
- * // In next query, you can play the promised sound, by
- * // applying the promise:
- * play(promise());
- * @param duration duration in seconds - * @param buffer pause before recording, in seconds - * @return promise: nullary function which returns recorded sound - */ -export function record_for(duration: number, buffer: number): () => Sound { - recorded_sound = undefined; - const recording_ms = duration * 1000; - const pre_recording_pause_ms = buffer * 1000; - check_permission(); - const mediaRecorder = new MediaRecorder(globalStream); - - // order of events for record_for: - // pre-recording-signal pause | recording signal | - // pre-recording pause | recording | recording signal - - setTimeout(() => { - play_recording_signal(); - setTimeout(() => { - start_recording(mediaRecorder); - setTimeout(() => { - mediaRecorder.stop(); - play_recording_signal(); - }, recording_ms); - }, recording_signal_ms + pre_recording_pause_ms); - }, pre_recording_signal_pause_ms); - - return () => { - if (recorded_sound === undefined) { - throw new Error('recording still being processed'); - } else { - return recorded_sound; - } - }; -} - -// ============================================================================= -// Module's Exposed Functions -// -// This file only includes the implementation and documentation of exposed -// functions of the module. For private functions dealing with the browser's -// graphics library context, see './webGL_curves.ts'. -// ============================================================================= - -// Core functions - -/** - * Makes a Sound with given wave function and duration. - * The wave function is a function: number -> number - * that takes in a non-negative input time and returns an amplitude - * between -1 and 1. - * - * @param wave wave function of the sound - * @param duration duration of the sound - * @return with wave as wave function and duration as duration - * @example const s = make_sound(t => Math_sin(2 * Math_PI * 440 * t), 5); - */ -export function make_sound(wave: Wave, duration: number): Sound { - return pair((t: number) => (t >= duration ? 0 : wave(t)), duration); -} - -/** - * Accesses the wave function of a given Sound. - * - * @param sound given Sound - * @return the wave function of the Sound - * @example get_wave(make_sound(t => Math_sin(2 * Math_PI * 440 * t), 5)); // Returns t => Math_sin(2 * Math_PI * 440 * t) - */ -export function get_wave(sound: Sound): Wave { - return head(sound); -} - -/** - * Accesses the duration of a given Sound. - * - * @param sound given Sound - * @return the duration of the Sound - * @example get_duration(make_sound(t => Math_sin(2 * Math_PI * 440 * t), 5)); // Returns 5 - */ -export function get_duration(sound: Sound): number { - return tail(sound); -} - -/** - * Checks if the argument is a Sound - * - * @param x input to be checked - * @return true if x is a Sound, false otherwise - * @example is_sound(make_sound(t => 0, 2)); // Returns true - */ -export function is_sound(x: any): x is Sound { - return ( - is_pair(x) - && typeof get_wave(x) === 'function' - && typeof get_duration(x) === 'number' - ); -} - -/** - * Plays the given Wave using the computer’s sound device, for the duration - * given in seconds. - * The sound is only played if no other sounds are currently being played. - * - * @param wave the wave function to play, starting at 0 - * @return the given sound - * @example play_wave(t => math_sin(t * 3000), 5); - */ -export function play_wave(wave: Wave, duration: number): AudioPlayed { - return play(make_sound(wave, duration)); -} - -/** - * Plays the given Sound using the computer’s sound device. - * The sound is only played if no other sounds are currently being played. - * - * @param sound the sound to play - * @return the given sound - * @example play(sine_sound(440, 5)); - */ -export function play(sound: Sound): AudioPlayed { - // Type-check sound - if (!is_sound(sound)) { - throw new Error(`play is expecting sound, but encountered ${sound}`); - // If a sound is already playing, terminate execution. - } else if (isPlaying) { - throw new Error('play: audio system still playing previous sound'); - } else if (get_duration(sound) < 0) { - throw new Error('play: duration of sound is negative'); - } else { - // Instantiate audio context if it has not been instantiated. - if (!audioplayer) { - init_audioCtx(); - } - - // Create mono buffer - const channel: number[] = []; - const len = Math.ceil(FS * get_duration(sound)); - - let temp: number; - let prev_value = 0; - - const wave = get_wave(sound); - for (let i = 0; i < len; i += 1) { - temp = wave(i / FS); - // clip amplitude - // channel[i] = temp > 1 ? 1 : temp < -1 ? -1 : temp; - if (temp > 1) { - channel[i] = 1; - } else if (temp < -1) { - channel[i] = -1; - } else { - channel[i] = temp; - } - - // smoothen out sudden cut-outs - if (channel[i] === 0 && Math.abs(channel[i] - prev_value) > 0.01) { - channel[i] = prev_value * 0.999; - } - - prev_value = channel[i]; - } - - // quantize - for (let i = 0; i < channel.length; i += 1) { - channel[i] = Math.floor(channel[i] * 32767.999); - } - - const riffwave = new RIFFWAVE([]); - riffwave.header.sampleRate = FS; - riffwave.header.numChannels = 1; - riffwave.header.bitsPerSample = 16; - riffwave.Make(channel); - - /* - const audio = new Audio(riffwave.dataURI); - const source2 = audioplayer.createMediaElementSource(audio); - source2.connect(audioplayer.destination); - - // Connect data to output destination - isPlaying = true; - audio.play(); - audio.onended = () => { - source2.disconnect(audioplayer.destination); - isPlaying = false; - }; */ - - const soundToPlay = { - toReplString: () => '', - dataUri: riffwave.dataURI, - }; - audioPlayed.push(soundToPlay); - return soundToPlay; - } -} - -/** - * Plays the given Sound using the computer’s sound device - * on top of any sounds that are currently playing. - * - * @param sound the sound to play - * @example play_concurrently(sine_sound(440, 5)); - */ -export function play_concurrently(sound: Sound): void { - // Type-check sound - if (!is_sound(sound)) { - throw new Error( - `play_concurrently is expecting sound, but encountered ${sound}`, - ); - } else if (get_duration(sound) <= 0) { - // Do nothing - } else { - // Instantiate audio context if it has not been instantiated. - if (!audioplayer) { - init_audioCtx(); - } - - // Create mono buffer - const theBuffer = audioplayer.createBuffer( - 1, - Math.ceil(FS * get_duration(sound)), - FS, - ); - const channel = theBuffer.getChannelData(0); - - let temp: number; - let prev_value = 0; - - const wave = get_wave(sound); - for (let i = 0; i < channel.length; i += 1) { - temp = wave(i / FS); - // clip amplitude - if (temp > 1) { - channel[i] = 1; - } else if (temp < -1) { - channel[i] = -1; - } else { - channel[i] = temp; - } - - // smoothen out sudden cut-outs - if (channel[i] === 0 && Math.abs(channel[i] - prev_value) > 0.01) { - channel[i] = prev_value * 0.999; - } - - prev_value = channel[i]; - } - - // Connect data to output destination - const source = audioplayer.createBufferSource(); - source.buffer = theBuffer; - source.connect(audioplayer.destination); - isPlaying = true; - source.start(); - source.onended = () => { - source.disconnect(audioplayer.destination); - isPlaying = false; - }; - } -} - -/** - * Stops all currently playing sounds. - */ -export function stop(): void { - audioplayer.close(); - isPlaying = false; -} - -// Primitive sounds - -/** - * Makes a noise sound with given duration - * - * @param duration the duration of the noise sound - * @return resulting noise sound - * @example noise_sound(5); - */ -export function noise_sound(duration: number): Sound { - return make_sound((_t) => Math.random() * 2 - 1, duration); -} - -/** - * Makes a silence sound with given duration - * - * @param duration the duration of the silence sound - * @return resulting silence sound - * @example silence_sound(5); - */ -export function silence_sound(duration: number): Sound { - return make_sound((_t) => 0, duration); -} - -/** - * Makes a sine wave sound with given frequency and duration - * - * @param freq the frequency of the sine wave sound - * @param duration the duration of the sine wave sound - * @return resulting sine wave sound - * @example sine_sound(440, 5); - */ -export function sine_sound(freq: number, duration: number): Sound { - return make_sound((t) => Math.sin(2 * Math.PI * t * freq), duration); -} - -/** - * Makes a square wave sound with given frequency and duration - * - * @param freq the frequency of the square wave sound - * @param duration the duration of the square wave sound - * @return resulting square wave sound - * @example square_sound(440, 5); - */ -export function square_sound(f: number, duration: number): Sound { - function fourier_expansion_square(t: number) { - let answer = 0; - for (let i = 1; i <= fourier_expansion_level; i += 1) { - answer += Math.sin(2 * Math.PI * (2 * i - 1) * f * t) / (2 * i - 1); - } - return answer; - } - return make_sound( - (t) => (4 / Math.PI) * fourier_expansion_square(t), - duration, - ); -} - -/** - * Makes a triangle wave sound with given frequency and duration - * - * @param freq the frequency of the triangle wave sound - * @param duration the duration of the triangle wave sound - * @return resulting triangle wave sound - * @example triangle_sound(440, 5); - */ -export function triangle_sound(freq: number, duration: number): Sound { - function fourier_expansion_triangle(t: number) { - let answer = 0; - for (let i = 0; i < fourier_expansion_level; i += 1) { - answer - += ((-1) ** i * Math.sin((2 * i + 1) * t * freq * Math.PI * 2)) - / (2 * i + 1) ** 2; - } - return answer; - } - return make_sound( - (t) => (8 / Math.PI / Math.PI) * fourier_expansion_triangle(t), - duration, - ); -} - -/** - * Makes a sawtooth wave sound with given frequency and duration - * - * @param freq the frequency of the sawtooth wave sound - * @param duration the duration of the sawtooth wave sound - * @return resulting sawtooth wave sound - * @example sawtooth_sound(440, 5); - */ -export function sawtooth_sound(freq: number, duration: number): Sound { - function fourier_expansion_sawtooth(t: number) { - let answer = 0; - for (let i = 1; i <= fourier_expansion_level; i += 1) { - answer += Math.sin(2 * Math.PI * i * freq * t) / i; - } - return answer; - } - return make_sound( - (t) => 1 / 2 - (1 / Math.PI) * fourier_expansion_sawtooth(t), - duration, - ); -} - -// Composition Operators - -/** - * Makes a new Sound by combining the sounds in a given list - * where the second sound is appended to the end of the first sound, - * the third sound is appended to the end of the second sound, and - * so on. The effect is that the sounds in the list are joined end-to-end - * - * @param list_of_sounds given list of sounds - * @return the combined Sound - * @example consecutively(list(sine_sound(200, 2), sine_sound(400, 3))); - */ -export function consecutively(list_of_sounds: List): Sound { - function consec_two(ss1: Sound, ss2: Sound) { - const wave1 = get_wave(ss1); - const wave2 = get_wave(ss2); - const dur1 = get_duration(ss1); - const dur2 = get_duration(ss2); - const new_wave = (t: number) => (t < dur1 ? wave1(t) : wave2(t - dur1)); - return make_sound(new_wave, dur1 + dur2); - } - return accumulate(consec_two, silence_sound(0), list_of_sounds); -} - -/** - * Makes a new Sound by combining the sounds in a given list - * where all the sounds are overlapped on top of each other. - * - * @param list_of_sounds given list of sounds - * @return the combined Sound - * @example simultaneously(list(sine_sound(200, 2), sine_sound(400, 3))) - */ -export function simultaneously(list_of_sounds: List): Sound { - function simul_two(ss1: Sound, ss2: Sound) { - const wave1 = get_wave(ss1); - const wave2 = get_wave(ss2); - const dur1 = get_duration(ss1); - const dur2 = get_duration(ss2); - // new_wave assumes sound discipline (ie, wave(t) = 0 after t > dur) - const new_wave = (t: number) => wave1(t) + wave2(t); - // new_dur is higher of the two dur - const new_dur = dur1 < dur2 ? dur2 : dur1; - return make_sound(new_wave, new_dur); - } - - const mushed_sounds = accumulate(simul_two, silence_sound(0), list_of_sounds); - const normalised_wave = (t: number) => head(mushed_sounds)(t) / length(list_of_sounds); - const highest_duration = tail(mushed_sounds); - return make_sound(normalised_wave, highest_duration); -} - -/** - * Returns an envelope: a function from Sound to Sound. - * When the adsr envelope is applied to a Sound, it returns - * a new Sound with its amplitude modified according to parameters - * The relative amplitude increases from 0 to 1 linearly over the - * attack proportion, then decreases from 1 to sustain level over the - * decay proportion, and remains at that level until the release - * proportion when it decays back to 0. - * @param attack_ratio proportion of Sound in attack phase - * @param decay_ratio proportion of Sound decay phase - * @param sustain_level sustain level between 0 and 1 - * @param release_ratio proportion of Sound in release phase - * @return Envelope a function from Sound to Sound - * @example adsr(0.2, 0.3, 0.3, 0.1)(sound); - */ -export function adsr( - attack_ratio: number, - decay_ratio: number, - sustain_level: number, - release_ratio: number, -): SoundTransformer { - return (sound) => { - const wave = get_wave(sound); - const duration = get_duration(sound); - const attack_time = duration * attack_ratio; - const decay_time = duration * decay_ratio; - const release_time = duration * release_ratio; - return make_sound((x) => { - if (x < attack_time) { - return wave(x) * (x / attack_time); - } - if (x < attack_time + decay_time) { - return ( - ((1 - sustain_level) * linear_decay(decay_time)(x - attack_time) - + sustain_level) - * wave(x) - ); - } - if (x < duration - release_time) { - return wave(x) * sustain_level; - } - return ( - wave(x) - * sustain_level - * linear_decay(release_time)(x - (duration - release_time)) - ); - }, duration); - }; -} - -/** - * Returns a Sound that results from applying a list of envelopes - * to a given wave form. The wave form is a Sound generator that - * takes a frequency and a duration as arguments and produces a - * Sound with the given frequency and duration. Each envelope is - * applied to a harmonic: the first harmonic has the given frequency, - * the second has twice the frequency, the third three times the - * frequency etc. The harmonics are then layered simultaneously to - * produce the resulting Sound. - * @param waveform function from pair(frequency, duration) to Sound - * @param base_frequency frequency of the first harmonic - * @param duration duration of the produced Sound, in seconds - * @param envelopes – list of envelopes, which are functions from Sound to Sound - * @return Sound resulting Sound - * @example stacking_adsr(sine_sound, 300, 5, list(adsr(0.1, 0.3, 0.2, 0.5), adsr(0.2, 0.5, 0.6, 0.1), adsr(0.3, 0.1, 0.7, 0.3))); - */ -export function stacking_adsr( - waveform: SoundProducer, - base_frequency: number, - duration: number, - envelopes: List, -): Sound { - function zip(lst: List, n: number) { - if (is_null(lst)) { - return lst; - } - return pair(pair(n, head(lst)), zip(tail(lst), n + 1)); - } - - return simultaneously( - accumulate( - (x: any, y: any) => pair(tail(x)(waveform(base_frequency * head(x), duration)), y), - null, - zip(envelopes, 1), - ), - ); -} - -/** - * Returns a SoundTransformer which uses its argument - * to modulate the phase of a (carrier) sine wave - * of given frequency and duration with a given Sound. - * Modulating with a low frequency Sound results in a vibrato effect. - * Modulating with a Sound with frequencies comparable to - * the sine wave frequency results in more complex wave forms. - * - * @param freq the frequency of the sine wave to be modulated - * @param duration the duration of the output soud - * @param amount the amount of modulation to apply to the carrier sine wave - * @return function which takes in a Sound and returns a Sound - * @example phase_mod(440, 5, 1)(sine_sound(220, 5)); - */ -export function phase_mod( - freq: number, - duration: number, - amount: number, -): SoundTransformer { - return (modulator: Sound) => make_sound( - (t) => Math.sin(2 * Math.PI * t * freq + amount * get_wave(modulator)(t)), - duration, - ); -} - -// MIDI conversion functions - -/** - * Converts a letter name to its corresponding MIDI note. - * The letter name is represented in standard pitch notation. - * Examples are "A5", "Db3", "C#7". - * Refer to this mapping from - * letter name to midi notes. - * - * @param letter_name given letter name - * @return the corresponding midi note - * @example letter_name_to_midi_note("C4"); // Returns 60 - */ -export function letter_name_to_midi_note(note: string): number { - let res = 12; // C0 is midi note 12 - const n = note[0].toUpperCase(); - switch (n) { - case 'D': - res += 2; - break; - - case 'E': - res += 4; - break; - - case 'F': - res += 5; - break; - - case 'G': - res += 7; - break; - - case 'A': - res += 9; - break; - - case 'B': - res += 11; - break; - - default: - break; - } - - if (note.length === 2) { - res += parseInt(note[1]) * 12; - } else if (note.length === 3) { - switch (note[1]) { - case '#': - res += 1; - break; - - case 'b': - res -= 1; - break; - - default: - break; - } - res += parseInt(note[2]) * 12; - } - return res; -} - -/** - * Converts a MIDI note to its corresponding frequency. - * - * @param note given MIDI note - * @return the frequency of the MIDI note - * @example midi_note_to_frequency(69); // Returns 440 - */ -export function midi_note_to_frequency(note: number): number { - // A4 = 440Hz = midi note 69 - return 440 * 2 ** ((note - 69) / 12); -} - -/** - * Converts a letter name to its corresponding frequency. - * - * @param letter_name given letter name - * @return the corresponding frequency - * @example letter_name_to_frequency("A4"); // Returns 440 - */ -export function letter_name_to_frequency(note: string): number { - return midi_note_to_frequency(letter_name_to_midi_note(note)); -} - -// Instruments - -/** - * returns a Sound reminiscent of a bell, playing - * a given note for a given duration - * @param note MIDI note - * @param duration duration in seconds - * @return Sound resulting bell Sound with given pitch and duration - * @example bell(40, 1); - */ -export function bell(note: number, duration: number): Sound { - return stacking_adsr( - square_sound, - midi_note_to_frequency(note), - duration, - list( - adsr(0, 0.6, 0, 0.05), - adsr(0, 0.6618, 0, 0.05), - adsr(0, 0.7618, 0, 0.05), - adsr(0, 0.9071, 0, 0.05), - ), - ); -} - -/** - * returns a Sound reminiscent of a cello, playing - * a given note for a given duration - * @param note MIDI note - * @param duration duration in seconds - * @return Sound resulting cello Sound with given pitch and duration - * @example cello(36, 5); - */ -export function cello(note: number, duration: number): Sound { - return stacking_adsr( - square_sound, - midi_note_to_frequency(note), - duration, - list(adsr(0.05, 0, 1, 0.1), adsr(0.05, 0, 1, 0.15), adsr(0, 0, 0.2, 0.15)), - ); -} - -/** - * returns a Sound reminiscent of a piano, playing - * a given note for a given duration - * @param note MIDI note - * @param duration duration in seconds - * @return Sound resulting piano Sound with given pitch and duration - * @example piano(48, 5); - */ -export function piano(note: number, duration: number): Sound { - return stacking_adsr( - triangle_sound, - midi_note_to_frequency(note), - duration, - list(adsr(0, 0.515, 0, 0.05), adsr(0, 0.32, 0, 0.05), adsr(0, 0.2, 0, 0.05)), - ); -} - -/** - * returns a Sound reminiscent of a trombone, playing - * a given note for a given duration - * @param note MIDI note - * @param duration duration in seconds - * @return Sound resulting trombone Sound with given pitch and duration - * @example trombone(60, 2); - */ -export function trombone(note: number, duration: number): Sound { - return stacking_adsr( - square_sound, - midi_note_to_frequency(note), - duration, - list(adsr(0.2, 0, 1, 0.1), adsr(0.3236, 0.6, 0, 0.1)), - ); -} - -/** - * returns a Sound reminiscent of a violin, playing - * a given note for a given duration - * @param note MIDI note - * @param duration duration in seconds - * @return Sound resulting violin Sound with given pitch and duration - * @example violin(53, 4); - */ -export function violin(note: number, duration: number): Sound { - return stacking_adsr( - sawtooth_sound, - midi_note_to_frequency(note), - duration, - list( - adsr(0.35, 0, 1, 0.15), - adsr(0.35, 0, 1, 0.15), - adsr(0.45, 0, 1, 0.15), - adsr(0.45, 0, 1, 0.15), - ), - ); -} +/** + * The sounds library provides functions for constructing and playing sounds. + * + * A wave is a function that takes in a number `t` and returns + * a number representing the amplitude at time `t`. + * The amplitude should fall within the range of [-1, 1]. + * + * A Sound is a pair(wave, duration) where duration is the length of the sound in seconds. + * The constructor make_sound and accessors get_wave and get_duration are provided. + * + * Sound Discipline: + * For all sounds, the wave function applied to and time `t` beyond its duration returns 0, that is: + * `(get_wave(sound))(get_duration(sound) + x) === 0` for any x >= 0. + * + * Two functions which combine Sounds, `consecutively` and `simultaneously` are given. + * Additionally, we provide sound transformation functions `adsr` and `phase_mod` + * which take in a Sound and return a Sound. + * + * Finally, the provided `play` function takes in a Sound and plays it using your + * computer's sound system. + * + * @module sound + * @author Koh Shang Hui + * @author Samyukta Sounderraman + */ + +/* eslint-disable new-cap, @typescript-eslint/naming-convention */ +import type { + Wave, + Sound, + SoundProducer, + SoundTransformer, + AudioPlayed, +} from './types'; +import { + pair, + head, + tail, + list, + length, + is_null, + is_pair, + accumulate, + type List, +} from 'js-slang/dist/stdlib/list'; +import { RIFFWAVE } from './riffwave'; +import context from 'js-slang/context'; + +// Global Constants and Variables +const FS: number = 44100; // Output sample rate +const fourier_expansion_level: number = 5; // fourier expansion level + +const audioPlayed: AudioPlayed[] = []; +context.moduleContexts.sound.state = { + audioPlayed, +}; + +// Singular audio context for all playback functions +let audioplayer: AudioContext; + +// Track if a sound is currently playing +let isPlaying: boolean; + +// Instantiates new audio context +function init_audioCtx(): void { + audioplayer = new window.AudioContext(); + // audioplayer = new (window.AudioContext || window.webkitAudioContext)(); +} + +// linear decay from 1 to 0 over decay_period +function linear_decay(decay_period: number): (t: number) => number { + return (t) => { + if (t > decay_period || t < 0) { + return 0; + } + return 1 - t / decay_period; + }; +} + +// // --------------------------------------------- +// // Microphone Functionality +// // --------------------------------------------- + +// permission initially undefined +// set to true by granting microphone permission +// set to false by denying microphone permission +let permission: boolean | undefined; + +let recorded_sound: Sound | undefined; + +// check_permission is called whenever we try +// to record a sound +function check_permission() { + if (permission === undefined) { + throw new Error( + 'Call init_record(); to obtain permission to use microphone', + ); + } else if (permission === false) { + throw new Error(`Permission has been denied.\n + Re-start browser and call init_record();\n + to obtain permission to use microphone.`); + } // (permission === true): do nothing +} + +let globalStream: any; + +function rememberStream(stream: any) { + permission = true; + globalStream = stream; +} + +function setPermissionToFalse() { + permission = false; +} + +function start_recording(mediaRecorder: MediaRecorder) { + const data: any[] = []; + mediaRecorder.ondataavailable = (e) => e.data.size && data.push(e.data); + mediaRecorder.start(); + mediaRecorder.onstop = () => process(data); +} + +// duration of recording signal in milliseconds +const recording_signal_ms = 100; + +// duration of pause after "run" before recording signal is played +const pre_recording_signal_pause_ms = 200; + +function play_recording_signal() { + play(sine_sound(1200, recording_signal_ms / 1000)); +} + +// eslint-disable-next-line @typescript-eslint/no-shadow +function process(data) { + const audioContext = new AudioContext(); + const blob = new Blob(data); + + convertToArrayBuffer(blob) + .then((arrayBuffer) => audioContext.decodeAudioData(arrayBuffer)) + .then(save); +} + +// Converts input microphone sound (blob) into array format. +function convertToArrayBuffer(blob: Blob): Promise { + const url = URL.createObjectURL(blob); + return fetch(url) + .then((response) => response.arrayBuffer()); +} + +function save(audioBuffer: AudioBuffer) { + const array = audioBuffer.getChannelData(0); + const duration = array.length / FS; + recorded_sound = make_sound((t) => { + const index = t * FS; + const lowerIndex = Math.floor(index); + const upperIndex = lowerIndex + 1; + const ratio = index - lowerIndex; + const upper = array[upperIndex] ? array[upperIndex] : 0; + const lower = array[lowerIndex] ? array[lowerIndex] : 0; + return lower * (1 - ratio) + upper * ratio; + }, duration); +} + +/** + * Initialize recording by obtaining permission + * to use the default device microphone + * + * @returns string "obtaining recording permission" + */ +export function init_record(): string { + navigator.mediaDevices + .getUserMedia({ audio: true }) + .then(rememberStream, setPermissionToFalse); + return 'obtaining recording permission'; +} + +/** + * takes a buffer duration (in seconds) as argument, and + * returns a nullary stop function stop. A call + * stop() returns a sound promise: a nullary function + * that returns a sound. Example:
init_record();
+ * const stop = record(0.5);
+ * // record after 0.5 seconds. Then in next query:
+ * const promise = stop();
+ * // In next query, you can play the promised sound, by
+ * // applying the promise:
+ * play(promise());
+ * @param buffer - pause before recording, in seconds + * @returns nullary stop function; + * stop() stops the recording and + * returns a sound promise: a nullary function that returns the recorded sound + */ +export function record(buffer: number): () => () => Sound { + check_permission(); + const mediaRecorder = new MediaRecorder(globalStream); + setTimeout(() => { + play_recording_signal(); + start_recording(mediaRecorder); + }, recording_signal_ms + buffer * 1000); + return () => { + mediaRecorder.stop(); + play_recording_signal(); + return () => { + if (recorded_sound === undefined) { + throw new Error('recording still being processed'); + } else { + return recorded_sound; + } + }; + }; +} + +/** + * Records a sound of given duration in seconds, after + * a buffer also in seconds, and + * returns a sound promise: a nullary function + * that returns a sound. Example:
init_record();
+ * const promise = record_for(2, 0.5);
+ * // In next query, you can play the promised sound, by
+ * // applying the promise:
+ * play(promise());
+ * @param duration duration in seconds + * @param buffer pause before recording, in seconds + * @return promise: nullary function which returns recorded sound + */ +export function record_for(duration: number, buffer: number): () => Sound { + recorded_sound = undefined; + const recording_ms = duration * 1000; + const pre_recording_pause_ms = buffer * 1000; + check_permission(); + const mediaRecorder = new MediaRecorder(globalStream); + + // order of events for record_for: + // pre-recording-signal pause | recording signal | + // pre-recording pause | recording | recording signal + + setTimeout(() => { + play_recording_signal(); + setTimeout(() => { + start_recording(mediaRecorder); + setTimeout(() => { + mediaRecorder.stop(); + play_recording_signal(); + }, recording_ms); + }, recording_signal_ms + pre_recording_pause_ms); + }, pre_recording_signal_pause_ms); + + return () => { + if (recorded_sound === undefined) { + throw new Error('recording still being processed'); + } else { + return recorded_sound; + } + }; +} + +// ============================================================================= +// Module's Exposed Functions +// +// This file only includes the implementation and documentation of exposed +// functions of the module. For private functions dealing with the browser's +// graphics library context, see './webGL_curves.ts'. +// ============================================================================= + +// Core functions + +/** + * Makes a Sound with given wave function and duration. + * The wave function is a function: number -> number + * that takes in a non-negative input time and returns an amplitude + * between -1 and 1. + * + * @param wave wave function of the sound + * @param duration duration of the sound + * @return with wave as wave function and duration as duration + * @example const s = make_sound(t => Math_sin(2 * Math_PI * 440 * t), 5); + */ +export function make_sound(wave: Wave, duration: number): Sound { + return pair((t: number) => (t >= duration ? 0 : wave(t)), duration); +} + +/** + * Accesses the wave function of a given Sound. + * + * @param sound given Sound + * @return the wave function of the Sound + * @example get_wave(make_sound(t => Math_sin(2 * Math_PI * 440 * t), 5)); // Returns t => Math_sin(2 * Math_PI * 440 * t) + */ +export function get_wave(sound: Sound): Wave { + return head(sound); +} + +/** + * Accesses the duration of a given Sound. + * + * @param sound given Sound + * @return the duration of the Sound + * @example get_duration(make_sound(t => Math_sin(2 * Math_PI * 440 * t), 5)); // Returns 5 + */ +export function get_duration(sound: Sound): number { + return tail(sound); +} + +/** + * Checks if the argument is a Sound + * + * @param x input to be checked + * @return true if x is a Sound, false otherwise + * @example is_sound(make_sound(t => 0, 2)); // Returns true + */ +export function is_sound(x: any): x is Sound { + return ( + is_pair(x) + && typeof get_wave(x) === 'function' + && typeof get_duration(x) === 'number' + ); +} + +/** + * Plays the given Wave using the computer’s sound device, for the duration + * given in seconds. + * The sound is only played if no other sounds are currently being played. + * + * @param wave the wave function to play, starting at 0 + * @return the given sound + * @example play_wave(t => math_sin(t * 3000), 5); + */ +export function play_wave(wave: Wave, duration: number): AudioPlayed { + return play(make_sound(wave, duration)); +} + +/** + * Plays the given Sound using the computer’s sound device. + * The sound is only played if no other sounds are currently being played. + * + * @param sound the sound to play + * @return the given sound + * @example play(sine_sound(440, 5)); + */ +export function play(sound: Sound): AudioPlayed { + // Type-check sound + if (!is_sound(sound)) { + throw new Error(`play is expecting sound, but encountered ${sound}`); + // If a sound is already playing, terminate execution. + } else if (isPlaying) { + throw new Error('play: audio system still playing previous sound'); + } else if (get_duration(sound) < 0) { + throw new Error('play: duration of sound is negative'); + } else { + // Instantiate audio context if it has not been instantiated. + if (!audioplayer) { + init_audioCtx(); + } + + // Create mono buffer + const channel: number[] = []; + const len = Math.ceil(FS * get_duration(sound)); + + let temp: number; + let prev_value = 0; + + const wave = get_wave(sound); + for (let i = 0; i < len; i += 1) { + temp = wave(i / FS); + // clip amplitude + // channel[i] = temp > 1 ? 1 : temp < -1 ? -1 : temp; + if (temp > 1) { + channel[i] = 1; + } else if (temp < -1) { + channel[i] = -1; + } else { + channel[i] = temp; + } + + // smoothen out sudden cut-outs + if (channel[i] === 0 && Math.abs(channel[i] - prev_value) > 0.01) { + channel[i] = prev_value * 0.999; + } + + prev_value = channel[i]; + } + + // quantize + for (let i = 0; i < channel.length; i += 1) { + channel[i] = Math.floor(channel[i] * 32767.999); + } + + const riffwave = new RIFFWAVE([]); + riffwave.header.sampleRate = FS; + riffwave.header.numChannels = 1; + riffwave.header.bitsPerSample = 16; + riffwave.Make(channel); + + /* + const audio = new Audio(riffwave.dataURI); + const source2 = audioplayer.createMediaElementSource(audio); + source2.connect(audioplayer.destination); + + // Connect data to output destination + isPlaying = true; + audio.play(); + audio.onended = () => { + source2.disconnect(audioplayer.destination); + isPlaying = false; + }; */ + + const soundToPlay = { + toReplString: () => '', + dataUri: riffwave.dataURI, + }; + audioPlayed.push(soundToPlay); + return soundToPlay; + } +} + +/** + * Plays the given Sound using the computer’s sound device + * on top of any sounds that are currently playing. + * + * @param sound the sound to play + * @example play_concurrently(sine_sound(440, 5)); + */ +export function play_concurrently(sound: Sound): void { + // Type-check sound + if (!is_sound(sound)) { + throw new Error( + `play_concurrently is expecting sound, but encountered ${sound}`, + ); + } else if (get_duration(sound) <= 0) { + // Do nothing + } else { + // Instantiate audio context if it has not been instantiated. + if (!audioplayer) { + init_audioCtx(); + } + + // Create mono buffer + const theBuffer = audioplayer.createBuffer( + 1, + Math.ceil(FS * get_duration(sound)), + FS, + ); + const channel = theBuffer.getChannelData(0); + + let temp: number; + let prev_value = 0; + + const wave = get_wave(sound); + for (let i = 0; i < channel.length; i += 1) { + temp = wave(i / FS); + // clip amplitude + if (temp > 1) { + channel[i] = 1; + } else if (temp < -1) { + channel[i] = -1; + } else { + channel[i] = temp; + } + + // smoothen out sudden cut-outs + if (channel[i] === 0 && Math.abs(channel[i] - prev_value) > 0.01) { + channel[i] = prev_value * 0.999; + } + + prev_value = channel[i]; + } + + // Connect data to output destination + const source = audioplayer.createBufferSource(); + source.buffer = theBuffer; + source.connect(audioplayer.destination); + isPlaying = true; + source.start(); + source.onended = () => { + source.disconnect(audioplayer.destination); + isPlaying = false; + }; + } +} + +/** + * Stops all currently playing sounds. + */ +export function stop(): void { + audioplayer.close(); + isPlaying = false; +} + +// Primitive sounds + +/** + * Makes a noise sound with given duration + * + * @param duration the duration of the noise sound + * @return resulting noise sound + * @example noise_sound(5); + */ +export function noise_sound(duration: number): Sound { + return make_sound((_t) => Math.random() * 2 - 1, duration); +} + +/** + * Makes a silence sound with given duration + * + * @param duration the duration of the silence sound + * @return resulting silence sound + * @example silence_sound(5); + */ +export function silence_sound(duration: number): Sound { + return make_sound((_t) => 0, duration); +} + +/** + * Makes a sine wave sound with given frequency and duration + * + * @param freq the frequency of the sine wave sound + * @param duration the duration of the sine wave sound + * @return resulting sine wave sound + * @example sine_sound(440, 5); + */ +export function sine_sound(freq: number, duration: number): Sound { + return make_sound((t) => Math.sin(2 * Math.PI * t * freq), duration); +} + +/** + * Makes a square wave sound with given frequency and duration + * + * @param freq the frequency of the square wave sound + * @param duration the duration of the square wave sound + * @return resulting square wave sound + * @example square_sound(440, 5); + */ +export function square_sound(f: number, duration: number): Sound { + function fourier_expansion_square(t: number) { + let answer = 0; + for (let i = 1; i <= fourier_expansion_level; i += 1) { + answer += Math.sin(2 * Math.PI * (2 * i - 1) * f * t) / (2 * i - 1); + } + return answer; + } + return make_sound( + (t) => (4 / Math.PI) * fourier_expansion_square(t), + duration, + ); +} + +/** + * Makes a triangle wave sound with given frequency and duration + * + * @param freq the frequency of the triangle wave sound + * @param duration the duration of the triangle wave sound + * @return resulting triangle wave sound + * @example triangle_sound(440, 5); + */ +export function triangle_sound(freq: number, duration: number): Sound { + function fourier_expansion_triangle(t: number) { + let answer = 0; + for (let i = 0; i < fourier_expansion_level; i += 1) { + answer + += ((-1) ** i * Math.sin((2 * i + 1) * t * freq * Math.PI * 2)) + / (2 * i + 1) ** 2; + } + return answer; + } + return make_sound( + (t) => (8 / Math.PI / Math.PI) * fourier_expansion_triangle(t), + duration, + ); +} + +/** + * Makes a sawtooth wave sound with given frequency and duration + * + * @param freq the frequency of the sawtooth wave sound + * @param duration the duration of the sawtooth wave sound + * @return resulting sawtooth wave sound + * @example sawtooth_sound(440, 5); + */ +export function sawtooth_sound(freq: number, duration: number): Sound { + function fourier_expansion_sawtooth(t: number) { + let answer = 0; + for (let i = 1; i <= fourier_expansion_level; i += 1) { + answer += Math.sin(2 * Math.PI * i * freq * t) / i; + } + return answer; + } + return make_sound( + (t) => 1 / 2 - (1 / Math.PI) * fourier_expansion_sawtooth(t), + duration, + ); +} + +// Composition Operators + +/** + * Makes a new Sound by combining the sounds in a given list + * where the second sound is appended to the end of the first sound, + * the third sound is appended to the end of the second sound, and + * so on. The effect is that the sounds in the list are joined end-to-end + * + * @param list_of_sounds given list of sounds + * @return the combined Sound + * @example consecutively(list(sine_sound(200, 2), sine_sound(400, 3))); + */ +export function consecutively(list_of_sounds: List): Sound { + function consec_two(ss1: Sound, ss2: Sound) { + const wave1 = get_wave(ss1); + const wave2 = get_wave(ss2); + const dur1 = get_duration(ss1); + const dur2 = get_duration(ss2); + const new_wave = (t: number) => (t < dur1 ? wave1(t) : wave2(t - dur1)); + return make_sound(new_wave, dur1 + dur2); + } + return accumulate(consec_two, silence_sound(0), list_of_sounds); +} + +/** + * Makes a new Sound by combining the sounds in a given list + * where all the sounds are overlapped on top of each other. + * + * @param list_of_sounds given list of sounds + * @return the combined Sound + * @example simultaneously(list(sine_sound(200, 2), sine_sound(400, 3))) + */ +export function simultaneously(list_of_sounds: List): Sound { + function simul_two(ss1: Sound, ss2: Sound) { + const wave1 = get_wave(ss1); + const wave2 = get_wave(ss2); + const dur1 = get_duration(ss1); + const dur2 = get_duration(ss2); + // new_wave assumes sound discipline (ie, wave(t) = 0 after t > dur) + const new_wave = (t: number) => wave1(t) + wave2(t); + // new_dur is higher of the two dur + const new_dur = dur1 < dur2 ? dur2 : dur1; + return make_sound(new_wave, new_dur); + } + + const mushed_sounds = accumulate(simul_two, silence_sound(0), list_of_sounds); + const normalised_wave = (t: number) => head(mushed_sounds)(t) / length(list_of_sounds); + const highest_duration = tail(mushed_sounds); + return make_sound(normalised_wave, highest_duration); +} + +/** + * Returns an envelope: a function from Sound to Sound. + * When the adsr envelope is applied to a Sound, it returns + * a new Sound with its amplitude modified according to parameters + * The relative amplitude increases from 0 to 1 linearly over the + * attack proportion, then decreases from 1 to sustain level over the + * decay proportion, and remains at that level until the release + * proportion when it decays back to 0. + * @param attack_ratio proportion of Sound in attack phase + * @param decay_ratio proportion of Sound decay phase + * @param sustain_level sustain level between 0 and 1 + * @param release_ratio proportion of Sound in release phase + * @return Envelope a function from Sound to Sound + * @example adsr(0.2, 0.3, 0.3, 0.1)(sound); + */ +export function adsr( + attack_ratio: number, + decay_ratio: number, + sustain_level: number, + release_ratio: number, +): SoundTransformer { + return (sound) => { + const wave = get_wave(sound); + const duration = get_duration(sound); + const attack_time = duration * attack_ratio; + const decay_time = duration * decay_ratio; + const release_time = duration * release_ratio; + return make_sound((x) => { + if (x < attack_time) { + return wave(x) * (x / attack_time); + } + if (x < attack_time + decay_time) { + return ( + ((1 - sustain_level) * linear_decay(decay_time)(x - attack_time) + + sustain_level) + * wave(x) + ); + } + if (x < duration - release_time) { + return wave(x) * sustain_level; + } + return ( + wave(x) + * sustain_level + * linear_decay(release_time)(x - (duration - release_time)) + ); + }, duration); + }; +} + +/** + * Returns a Sound that results from applying a list of envelopes + * to a given wave form. The wave form is a Sound generator that + * takes a frequency and a duration as arguments and produces a + * Sound with the given frequency and duration. Each envelope is + * applied to a harmonic: the first harmonic has the given frequency, + * the second has twice the frequency, the third three times the + * frequency etc. The harmonics are then layered simultaneously to + * produce the resulting Sound. + * @param waveform function from pair(frequency, duration) to Sound + * @param base_frequency frequency of the first harmonic + * @param duration duration of the produced Sound, in seconds + * @param envelopes – list of envelopes, which are functions from Sound to Sound + * @return Sound resulting Sound + * @example stacking_adsr(sine_sound, 300, 5, list(adsr(0.1, 0.3, 0.2, 0.5), adsr(0.2, 0.5, 0.6, 0.1), adsr(0.3, 0.1, 0.7, 0.3))); + */ +export function stacking_adsr( + waveform: SoundProducer, + base_frequency: number, + duration: number, + envelopes: List, +): Sound { + function zip(lst: List, n: number) { + if (is_null(lst)) { + return lst; + } + return pair(pair(n, head(lst)), zip(tail(lst), n + 1)); + } + + return simultaneously( + accumulate( + (x: any, y: any) => pair(tail(x)(waveform(base_frequency * head(x), duration)), y), + null, + zip(envelopes, 1), + ), + ); +} + +/** + * Returns a SoundTransformer which uses its argument + * to modulate the phase of a (carrier) sine wave + * of given frequency and duration with a given Sound. + * Modulating with a low frequency Sound results in a vibrato effect. + * Modulating with a Sound with frequencies comparable to + * the sine wave frequency results in more complex wave forms. + * + * @param freq the frequency of the sine wave to be modulated + * @param duration the duration of the output soud + * @param amount the amount of modulation to apply to the carrier sine wave + * @return function which takes in a Sound and returns a Sound + * @example phase_mod(440, 5, 1)(sine_sound(220, 5)); + */ +export function phase_mod( + freq: number, + duration: number, + amount: number, +): SoundTransformer { + return (modulator: Sound) => make_sound( + (t) => Math.sin(2 * Math.PI * t * freq + amount * get_wave(modulator)(t)), + duration, + ); +} + +// MIDI conversion functions + +/** + * Converts a letter name to its corresponding MIDI note. + * The letter name is represented in standard pitch notation. + * Examples are "A5", "Db3", "C#7". + * Refer to
this mapping from + * letter name to midi notes. + * + * @param letter_name given letter name + * @return the corresponding midi note + * @example letter_name_to_midi_note("C4"); // Returns 60 + */ +export function letter_name_to_midi_note(note: string): number { + let res = 12; // C0 is midi note 12 + const n = note[0].toUpperCase(); + switch (n) { + case 'D': + res += 2; + break; + + case 'E': + res += 4; + break; + + case 'F': + res += 5; + break; + + case 'G': + res += 7; + break; + + case 'A': + res += 9; + break; + + case 'B': + res += 11; + break; + + default: + break; + } + + if (note.length === 2) { + res += parseInt(note[1]) * 12; + } else if (note.length === 3) { + switch (note[1]) { + case '#': + res += 1; + break; + + case 'b': + res -= 1; + break; + + default: + break; + } + res += parseInt(note[2]) * 12; + } + return res; +} + +/** + * Converts a MIDI note to its corresponding frequency. + * + * @param note given MIDI note + * @return the frequency of the MIDI note + * @example midi_note_to_frequency(69); // Returns 440 + */ +export function midi_note_to_frequency(note: number): number { + // A4 = 440Hz = midi note 69 + return 440 * 2 ** ((note - 69) / 12); +} + +/** + * Converts a letter name to its corresponding frequency. + * + * @param letter_name given letter name + * @return the corresponding frequency + * @example letter_name_to_frequency("A4"); // Returns 440 + */ +export function letter_name_to_frequency(note: string): number { + return midi_note_to_frequency(letter_name_to_midi_note(note)); +} + +// Instruments + +/** + * returns a Sound reminiscent of a bell, playing + * a given note for a given duration + * @param note MIDI note + * @param duration duration in seconds + * @return Sound resulting bell Sound with given pitch and duration + * @example bell(40, 1); + */ +export function bell(note: number, duration: number): Sound { + return stacking_adsr( + square_sound, + midi_note_to_frequency(note), + duration, + list( + adsr(0, 0.6, 0, 0.05), + adsr(0, 0.6618, 0, 0.05), + adsr(0, 0.7618, 0, 0.05), + adsr(0, 0.9071, 0, 0.05), + ), + ); +} + +/** + * returns a Sound reminiscent of a cello, playing + * a given note for a given duration + * @param note MIDI note + * @param duration duration in seconds + * @return Sound resulting cello Sound with given pitch and duration + * @example cello(36, 5); + */ +export function cello(note: number, duration: number): Sound { + return stacking_adsr( + square_sound, + midi_note_to_frequency(note), + duration, + list(adsr(0.05, 0, 1, 0.1), adsr(0.05, 0, 1, 0.15), adsr(0, 0, 0.2, 0.15)), + ); +} + +/** + * returns a Sound reminiscent of a piano, playing + * a given note for a given duration + * @param note MIDI note + * @param duration duration in seconds + * @return Sound resulting piano Sound with given pitch and duration + * @example piano(48, 5); + */ +export function piano(note: number, duration: number): Sound { + return stacking_adsr( + triangle_sound, + midi_note_to_frequency(note), + duration, + list(adsr(0, 0.515, 0, 0.05), adsr(0, 0.32, 0, 0.05), adsr(0, 0.2, 0, 0.05)), + ); +} + +/** + * returns a Sound reminiscent of a trombone, playing + * a given note for a given duration + * @param note MIDI note + * @param duration duration in seconds + * @return Sound resulting trombone Sound with given pitch and duration + * @example trombone(60, 2); + */ +export function trombone(note: number, duration: number): Sound { + return stacking_adsr( + square_sound, + midi_note_to_frequency(note), + duration, + list(adsr(0.2, 0, 1, 0.1), adsr(0.3236, 0.6, 0, 0.1)), + ); +} + +/** + * returns a Sound reminiscent of a violin, playing + * a given note for a given duration + * @param note MIDI note + * @param duration duration in seconds + * @return Sound resulting violin Sound with given pitch and duration + * @example violin(53, 4); + */ +export function violin(note: number, duration: number): Sound { + return stacking_adsr( + sawtooth_sound, + midi_note_to_frequency(note), + duration, + list( + adsr(0.35, 0, 1, 0.15), + adsr(0.35, 0, 1, 0.15), + adsr(0.45, 0, 1, 0.15), + adsr(0.45, 0, 1, 0.15), + ), + ); +} diff --git a/src/bundles/sound/index.ts b/src/bundles/sound/index.ts index 7b128739f..937599d07 100644 --- a/src/bundles/sound/index.ts +++ b/src/bundles/sound/index.ts @@ -1,39 +1,39 @@ -export { - adsr, - // Instruments - bell, - cello, - // Composition and Envelopes - consecutively, - get_duration, - get_wave, - // Recording - init_record, - is_sound, - letter_name_to_frequency, - // MIDI - letter_name_to_midi_note, - // Constructor/Accessors/Typecheck - make_sound, - midi_note_to_frequency, - // Basic waveforms - noise_sound, - phase_mod, - piano, - // Play-related - play, - play_concurrently, - play_wave, - record, - record_for, - sawtooth_sound, - silence_sound, - simultaneously, - sine_sound, - square_sound, - stacking_adsr, - stop, - triangle_sound, - trombone, - violin, -} from './functions'; +export { + adsr, + // Instruments + bell, + cello, + // Composition and Envelopes + consecutively, + get_duration, + get_wave, + // Recording + init_record, + is_sound, + letter_name_to_frequency, + // MIDI + letter_name_to_midi_note, + // Constructor/Accessors/Typecheck + make_sound, + midi_note_to_frequency, + // Basic waveforms + noise_sound, + phase_mod, + piano, + // Play-related + play, + play_concurrently, + play_wave, + record, + record_for, + sawtooth_sound, + silence_sound, + simultaneously, + sine_sound, + square_sound, + stacking_adsr, + stop, + triangle_sound, + trombone, + violin, +} from './functions'; diff --git a/src/bundles/sound/riffwave.ts b/src/bundles/sound/riffwave.ts index 478588146..70a1af751 100644 --- a/src/bundles/sound/riffwave.ts +++ b/src/bundles/sound/riffwave.ts @@ -1,22 +1,22 @@ -/* - * RIFFWAVE.js v0.03 - Audio encoder for HTML5 this mapping from - * letter name to midi notes. - * - * @param letter_name given letter name - * @return the corresponding midi note - * @example letter_name_to_midi_note("C4"); // Returns 60 - */ -export function letter_name_to_midi_note(note: string): number { - let res = 12; // C0 is midi note 12 - const n = note[0].toUpperCase(); - switch (n) { - case 'D': - res += 2; - break; - - case 'E': - res += 4; - break; - - case 'F': - res += 5; - break; - - case 'G': - res += 7; - break; - - case 'A': - res += 9; - break; - - case 'B': - res += 11; - break; - - default: - break; - } - - if (note.length === 2) { - res += parseInt(note[1]) * 12; - } else if (note.length === 3) { - switch (note[1]) { - case '#': - res += 1; - break; - - case 'b': - res -= 1; - break; - - default: - break; - } - res += parseInt(note[2]) * 12; - } - return res; -} - -/** - * Converts a MIDI note to its corresponding frequency. - * - * @param note given MIDI note - * @return the frequency of the MIDI note - * @example midi_note_to_frequency(69); // Returns 440 - */ -export function midi_note_to_frequency(note: number): number { - // A4 = 440Hz = midi note 69 - return 440 * 2 ** ((note - 69) / 12); -} - -/** - * Converts a letter name to its corresponding frequency. - * - * @param letter_name given letter name - * @return the corresponding frequency - * @example letter_name_to_frequency("A4"); // Returns 440 - */ -export function letter_name_to_frequency(note: string): number { - return midi_note_to_frequency(letter_name_to_midi_note(note)); -} - -// Instruments - -/** - * returns a Sound reminiscent of a bell, playing - * a given note for a given duration - * @param note MIDI note - * @param duration duration in seconds - * @return Sound resulting bell Sound with given pitch and duration - * @example bell(40, 1); - */ -export function bell(note: number, duration: number): Sound { - return stacking_adsr( - square_sound, - midi_note_to_frequency(note), - duration, - list( - adsr(0, 0.6, 0, 0.05), - adsr(0, 0.6618, 0, 0.05), - adsr(0, 0.7618, 0, 0.05), - adsr(0, 0.9071, 0, 0.05), - ), - ); -} - -/** - * returns a Sound reminiscent of a cello, playing - * a given note for a given duration - * @param note MIDI note - * @param duration duration in seconds - * @return Sound resulting cello Sound with given pitch and duration - * @example cello(36, 5); - */ -export function cello(note: number, duration: number): Sound { - return stacking_adsr( - square_sound, - midi_note_to_frequency(note), - duration, - list(adsr(0.05, 0, 1, 0.1), adsr(0.05, 0, 1, 0.15), adsr(0, 0, 0.2, 0.15)), - ); -} - -/** - * returns a Sound reminiscent of a piano, playing - * a given note for a given duration - * @param note MIDI note - * @param duration duration in seconds - * @return Sound resulting piano Sound with given pitch and duration - * @example piano(48, 5); - */ -export function piano(note: number, duration: number): Sound { - return stacking_adsr( - triangle_sound, - midi_note_to_frequency(note), - duration, - list(adsr(0, 0.515, 0, 0.05), adsr(0, 0.32, 0, 0.05), adsr(0, 0.2, 0, 0.05)), - ); -} - -/** - * returns a Sound reminiscent of a trombone, playing - * a given note for a given duration - * @param note MIDI note - * @param duration duration in seconds - * @return Sound resulting trombone Sound with given pitch and duration - * @example trombone(60, 2); - */ -export function trombone(note: number, duration: number): Sound { - return stacking_adsr( - square_sound, - midi_note_to_frequency(note), - duration, - list(adsr(0.2, 0, 1, 0.1), adsr(0.3236, 0.6, 0, 0.1)), - ); -} - -/** - * returns a Sound reminiscent of a violin, playing - * a given note for a given duration - * @param note MIDI note - * @param duration duration in seconds - * @return Sound resulting violin Sound with given pitch and duration - * @example violin(53, 4); - */ -export function violin(note: number, duration: number): Sound { - return stacking_adsr( - sawtooth_sound, - midi_note_to_frequency(note), - duration, - list( - adsr(0.35, 0, 1, 0.15), - adsr(0.35, 0, 1, 0.15), - adsr(0.45, 0, 1, 0.15), - adsr(0.45, 0, 1, 0.15), - ), - ); -} +/** + * + * The stereo sounds library build on the sounds library by accommodating stereo sounds. + * Within this library, all sounds are represented in stereo, with two waves, left and right. + * + * A Stereo Sound is a `pair(pair(left_wave, right_wave), duration)` where duration is the length of the sound in seconds. + * The constructor `make_stereo_sound` and accessors `get_left_wave`, `get_right_wave`, and `get_duration` are provided. + * The `make_sound` constructor from sounds is syntatic sugar for `make_stereo_sounds` with equal waves. + * + * @module stereo_sound + * @author Koh Shang Hui + * @author Samyukta Sounderraman + */ + +/* eslint-disable new-cap, @typescript-eslint/naming-convention */ +import { + accumulate, + head, + is_null, + is_pair, + length, + list, + pair, + tail, + type List, +} from 'js-slang/dist/stdlib/list'; +import { RIFFWAVE } from './riffwave'; +import type { + AudioPlayed, + Sound, + SoundProducer, + SoundTransformer, + Wave, +} from './types'; +import context from 'js-slang/context'; + +// Global Constants and Variables + +const FS: number = 44100; // Output sample rate +const fourier_expansion_level: number = 5; // fourier expansion level + +const audioPlayed: AudioPlayed[] = []; +context.moduleContexts.stereo_sound.state = { + audioPlayed, +}; + +// Singular audio context for all playback functions +let audioplayer: AudioContext; + +// Track if a sound is currently playing +let isPlaying: boolean; + +// Instantiates new audio context +function init_audioCtx(): void { + audioplayer = new window.AudioContext(); + // audioplayer = new (window.AudioContext || window.webkitAudioContext)(); +} + +// linear decay from 1 to 0 over decay_period +function linear_decay(decay_period: number): (t: number) => number { + return (t) => { + if (t > decay_period || t < 0) { + return 0; + } + return 1 - t / decay_period; + }; +} + +// // --------------------------------------------- +// // Microphone Functionality +// // --------------------------------------------- + +// permission initially undefined +// set to true by granting microphone permission +// set to false by denying microphone permission +let permission: boolean | undefined; + +let recorded_sound: Sound | undefined; + +// check_permission is called whenever we try +// to record a sound +function check_permission() { + if (permission === undefined) { + throw new Error( + 'Call init_record(); to obtain permission to use microphone', + ); + } else if (permission === false) { + throw new Error(`Permission has been denied.\n + Re-start browser and call init_record();\n + to obtain permission to use microphone.`); + } // (permission === true): do nothing +} + +let globalStream: any; + +function rememberStream(stream: any) { + permission = true; + globalStream = stream; +} + +function setPermissionToFalse() { + permission = false; +} + +function start_recording(mediaRecorder: MediaRecorder) { + const data: any[] = []; + mediaRecorder.ondataavailable = (e) => e.data.size && data.push(e.data); + mediaRecorder.start(); + mediaRecorder.onstop = () => process(data); +} + +// there is a beep signal at the beginning and end +// of each recording +const recording_signal_duration_ms = 100; + +function play_recording_signal() { + play(sine_sound(1200, recording_signal_duration_ms / 1000)); +} + +// eslint-disable-next-line @typescript-eslint/no-shadow +function process(data: any[] | undefined) { + const audioContext = new AudioContext(); + const blob = new Blob(data); + + convertToArrayBuffer(blob) + .then((arrayBuffer) => audioContext.decodeAudioData(arrayBuffer)) + .then(save); +} + +// Converts input microphone sound (blob) into array format. +function convertToArrayBuffer(blob: Blob): Promise { + const url = URL.createObjectURL(blob); + return fetch(url) + .then((response) => response.arrayBuffer()); +} + +function save(audioBuffer: AudioBuffer) { + const array = audioBuffer.getChannelData(0); + const duration = array.length / FS; + recorded_sound = make_sound((t) => { + const index = t * FS; + const lowerIndex = Math.floor(index); + const upperIndex = lowerIndex + 1; + const ratio = index - lowerIndex; + const upper = array[upperIndex] ? array[upperIndex] : 0; + const lower = array[lowerIndex] ? array[lowerIndex] : 0; + return lower * (1 - ratio) + upper * ratio; + }, duration); +} + +/** + * Initialize recording by obtaining permission + * to use the default device microphone + * + * @returns string "obtaining recording permission" + */ +export function init_record(): string { + navigator.mediaDevices + .getUserMedia({ audio: true }) + .then(rememberStream, setPermissionToFalse); + return 'obtaining recording permission'; +} + +/** + * takes a buffer duration (in seconds) as argument, and + * returns a nullary stop function stop. A call + * stop() returns a sound promise: a nullary function + * that returns a sound. Example:
init_record();
+ * const stop = record(0.5);
+ * // record after 0.5 seconds. Then in next query:
+ * const promise = stop();
+ * // In next query, you can play the promised sound, by
+ * // applying the promise:
+ * play(promise());
+ * @param buffer - pause before recording, in seconds + * @returns nullary stop function; + * stop() stops the recording and + * returns a sound promise: a nullary function that returns the recorded sound + */ +export function record(buffer: number): () => () => Sound { + check_permission(); + const mediaRecorder = new MediaRecorder(globalStream); + setTimeout(() => { + play_recording_signal(); + start_recording(mediaRecorder); + }, recording_signal_duration_ms + buffer * 1000); + return () => { + mediaRecorder.stop(); + play_recording_signal(); + return () => { + if (recorded_sound === undefined) { + throw new Error('recording still being processed'); + } else { + return recorded_sound; + } + }; + }; +} + +/** + * Records a sound of given duration in seconds, after + * a buffer also in seconds, and + * returns a sound promise: a nullary function + * that returns a sound. Example:
init_record();
+ * const promise = record_for(2, 0.5);
+ * // In next query, you can play the promised sound, by
+ * // applying the promise:
+ * play(promise());
+ * @param duration duration in seconds + * @param buffer pause before recording, in seconds + * @return promise: nullary function which returns the recorded sound + */ +export function record_for(duration: number, buffer: number): () => Sound { + recorded_sound = undefined; + const duration_ms = duration * 1000; + check_permission(); + const mediaRecorder = new MediaRecorder(globalStream); + setTimeout(() => { + play_recording_signal(); + start_recording(mediaRecorder); + setTimeout(() => { + mediaRecorder.stop(); + play_recording_signal(); + }, duration_ms); + }, recording_signal_duration_ms + buffer * 1000); + return () => { + if (recorded_sound === undefined) { + throw new Error('recording still being processed'); + } else { + return recorded_sound; + } + }; +} + +// ============================================================================= +// Module's Exposed Functions +// +// This file only includes the implementation and documentation of exposed +// functions of the module. For private functions dealing with the browser's +// graphics library context, see './webGL_curves.ts'. +// ============================================================================= + +// Core functions + +/** + * Makes a Stereo Sound with given wave function and duration. + * The wave function is a function: number -> number + * that takes in a non-negative input time and returns an amplitude + * between -1 and 1. + * + * @param left_wave wave function of the left channel of the sound + * @param right_wave wave function of the right channel of the sound + * @param duration duration of the sound + * @return resulting stereo sound + * @example const s = make_stereo_sound(t => Math_sin(2 * Math_PI * 440 * t), t => Math_sin(2 * Math_PI * 300 * t), 5); + */ +export function make_stereo_sound( + left_wave: Wave, + right_wave: Wave, + duration: number, +): Sound { + return pair( + pair( + (t: number) => (t >= duration ? 0 : left_wave(t)), + (t: number) => (t >= duration ? 0 : right_wave(t)), + ), + duration, + ); +} + +/** + * Makes a Sound with given wave function and duration. + * The wave function is a function: number -> number + * that takes in a non-negative input time and returns an amplitude + * between -1 and 1. + * + * @param wave wave function of the sound + * @param duration duration of the sound + * @return with wave as wave function and duration as duration + * @example const s = make_sound(t => Math_sin(2 * Math_PI * 440 * t), 5); + */ +export function make_sound(wave: Wave, duration: number): Sound { + return make_stereo_sound(wave, wave, duration); +} + +/** + * Accesses the left wave function of a given Sound. + * + * @param sound given Sound + * @return the wave function of the Sound + * @example get_wave(make_sound(t => Math_sin(2 * Math_PI * 440 * t), 5)); // Returns t => Math_sin(2 * Math_PI * 440 * t) + */ +export function get_left_wave(sound: Sound): Wave { + return head(head(sound)); +} + +/** + * Accesses the left wave function of a given Sound. + * + * @param sound given Sound + * @return the wave function of the Sound + * @example get_wave(make_sound(t => Math_sin(2 * Math_PI * 440 * t), 5)); // Returns t => Math_sin(2 * Math_PI * 440 * t) + */ +export function get_right_wave(sound: Sound): Wave { + return tail(head(sound)); +} + +/** + * Accesses the duration of a given Sound. + * + * @param sound given Sound + * @return the duration of the Sound + * @example get_duration(make_sound(t => Math_sin(2 * Math_PI * 440 * t), 5)); // Returns 5 + */ +export function get_duration(sound: Sound): number { + return tail(sound); +} + +/** + * Checks if the argument is a Sound + * + * @param x input to be checked + * @return true if x is a Sound, false otherwise + * @example is_sound(make_sound(t => 0, 2)); // Returns true + */ +export function is_sound(x: any): boolean { + return ( + is_pair(x) + && typeof get_left_wave(x) === 'function' + && typeof get_right_wave(x) === 'function' + && typeof get_duration(x) === 'number' + ); +} + +/** + * Plays the given Wave using the computer’s sound device, for the duration + * given in seconds. + * The sound is only played if no other sounds are currently being played. + * + * @param wave the wave function to play, starting at 0 + * @return the given sound + * @example play_wave(t => math_sin(t * 3000), 5); + */ +export function play_wave(wave: Wave, duration: number): AudioPlayed { + return play(make_sound(wave, duration)); +} + +/** + * Plays the given two Waves using the computer’s sound device, for the duration + * given in seconds. The first Wave is for the left channel, the second for the + * right channel. + * The sound is only played if no other sounds are currently being played. + * + * @param wave1 the wave function to play on the left channel, starting at 0 + * @param wave2 the wave function to play on the right channel, starting at 0 + * @return the given sound + * @example play_waves(t => math_sin(t * 3000), t => math_sin(t * 6000), 5); + */ +export function play_waves( + wave1: Wave, + wave2: Wave, + duration: number, +): AudioPlayed { + return play(make_stereo_sound(wave1, wave2, duration)); +} + +/** + * Plays the given Sound using the computer’s sound device. + * The sound is only played if no other sounds are currently being played. + * + * @param sound the sound to play + * @return the given sound + * @example play(sine_sound(440, 5)); + */ +export function play(sound: Sound): AudioPlayed { + // Type-check sound + if (!is_sound(sound)) { + throw new Error(`play is expecting sound, but encountered ${sound}`); + // If a sound is already playing, terminate execution. + } else if (isPlaying) { + throw new Error('play: audio system still playing previous sound'); + } else if (get_duration(sound) < 0) { + throw new Error('play: duration of sound is negative'); + } else { + // Instantiate audio context if it has not been instantiated. + if (!audioplayer) { + init_audioCtx(); + } + + const channel: number[] = []; + const len = Math.ceil(FS * get_duration(sound)); + + let Ltemp: number; + let Rtemp: number; + let Lprev_value = 0; + let Rprev_value = 0; + + const left_wave = get_left_wave(sound); + const right_wave = get_right_wave(sound); + for (let i = 0; i < len; i += 1) { + Ltemp = left_wave(i / FS); + // clip amplitude + if (Ltemp > 1) { + channel[2 * i] = 1; + } else if (Ltemp < -1) { + channel[2 * i] = -1; + } else { + channel[2 * i] = Ltemp; + } + + // smoothen out sudden cut-outs + if ( + channel[2 * i] === 0 + && Math.abs(channel[2 * i] - Lprev_value) > 0.01 + ) { + channel[2 * i] = Lprev_value * 0.999; + } + + Lprev_value = channel[2 * i]; + + Rtemp = right_wave(i / FS); + // clip amplitude + if (Rtemp > 1) { + channel[2 * i + 1] = 1; + } else if (Rtemp < -1) { + channel[2 * i + 1] = -1; + } else { + channel[2 * i + 1] = Rtemp; + } + + // smoothen out sudden cut-outs + if ( + channel[2 * i + 1] === 0 + && Math.abs(channel[2 * i] - Rprev_value) > 0.01 + ) { + channel[2 * i + 1] = Rprev_value * 0.999; + } + + Rprev_value = channel[2 * i + 1]; + } + + // quantize + for (let i = 0; i < channel.length; i += 1) { + channel[i] = Math.floor(channel[i] * 32767.999); + } + + const riffwave = new RIFFWAVE([]); + riffwave.header.sampleRate = FS; + riffwave.header.numChannels = 2; + riffwave.header.bitsPerSample = 16; + riffwave.Make(channel); + + /* + const audio = new Audio(riffwave.dataURI); + const source2 = audioplayer.createMediaElementSource(audio); + source2.connect(audioplayer.destination); + + // Connect data to output destination + isPlaying = true; + audio.play(); + audio.onended = () => { + source2.disconnect(audioplayer.destination); + isPlaying = false; + }; */ + + const audio = { + toReplString: () => '', + dataUri: riffwave.dataURI, + }; + + audioPlayed.push(audio); + return audio; + } +} + +/** + * Plays the given Sound using the computer’s sound device + * on top of any sounds that are currently playing. + * + * @param sound the sound to play + * @example play_concurrently(sine_sound(440, 5)); + */ +export function play_concurrently(sound: Sound): void { + // Type-check sound + if (!is_sound(sound)) { + throw new Error( + `play_concurrently is expecting sound, but encountered ${sound}`, + ); + } else if (get_duration(sound) <= 0) { + // Do nothing + } else { + // Instantiate audio context if it has not been instantiated. + if (!audioplayer) { + init_audioCtx(); + } + + const channel: number[] = Array[2 * Math.ceil(FS * get_duration(sound))]; + + let Ltemp: number; + let Rtemp: number; + let prev_value = 0; + + const left_wave = get_left_wave(sound); + + for (let i = 0; i < channel.length; i += 2) { + Ltemp = left_wave(i / FS); + // clip amplitude + if (Ltemp > 1) { + channel[i] = 1; + } else if (Ltemp < -1) { + channel[i] = -1; + } else { + channel[i] = Ltemp; + } + + // smoothen out sudden cut-outs + if (channel[i] === 0 && Math.abs(channel[i] - prev_value) > 0.01) { + channel[i] = prev_value * 0.999; + } + + prev_value = channel[i]; + } + + prev_value = 0; + const right_wave = get_right_wave(sound); + for (let i = 1; i < channel.length; i += 2) { + Rtemp = right_wave(i / FS); + // clip amplitude + if (Rtemp > 1) { + channel[i] = 1; + } else if (Rtemp < -1) { + channel[i] = -1; + } else { + channel[i] = Rtemp; + } + + // smoothen out sudden cut-outs + if (channel[i] === 0 && Math.abs(channel[i] - prev_value) > 0.01) { + channel[i] = prev_value * 0.999; + } + + prev_value = channel[i]; + } + + // quantize + for (let i = 0; i < channel.length; i += 1) { + channel[i] = Math.floor(channel[i] * 32767.999); + } + + const riffwave = new RIFFWAVE([]); + riffwave.header.sampleRate = FS; + riffwave.header.numChannels = 2; + riffwave.header.bitsPerSample = 16; + riffwave.Make(channel); + const audio = new Audio(riffwave.dataURI); + const source2 = audioplayer.createMediaElementSource(audio); + source2.connect(audioplayer.destination); + + // Connect data to output destination + audio.play(); + isPlaying = true; + audio.onended = () => { + source2.disconnect(audioplayer.destination); + isPlaying = false; + }; + } +} + +/** + * Stops all currently playing sounds. + */ +export function stop(): void { + audioplayer.close(); + isPlaying = false; +} + +// Stereo only functions + +/** + * Centers a Sound by averaging its left and right channels, + * resulting in an effectively mono sound. + * + * @param sound the sound to be squashed + * @return a new sound with the left and right channels averaged + */ +export function squash(sound: Sound): Sound { + const left = get_left_wave(sound); + const right = get_right_wave(sound); + return make_sound((t) => 0.5 * (left(t) + right(t)), get_duration(sound)); +} + +/** + * Returns a Sound Transformer that pans a sound based on the pan amount. + * The input sound is first squashed to mono. + * An amount of `-1` is a hard left pan, `0` is balanced, `1` is hard right pan. + * + * @param amount the pan amount, from -1 to 1 + * @return a Sound Transformer that pans a Sound + */ +export function pan(amount: number): SoundTransformer { + return (sound) => { + if (amount > 1) { + amount = 1; + } + if (amount < -1) { + amount = -1; + } + sound = squash(sound); + return make_stereo_sound( + (t) => ((1 - amount) / 2) * get_left_wave(sound)(t), + (t) => ((1 + amount) / 2) * get_right_wave(sound)(t), + get_duration(sound), + ); + }; +} + +/** + * Returns a Sound Transformer that uses a Sound to pan another Sound. + * The modulator is treated as a mono sound and its output is used to pan + * an input Sound. + * `-1` is a hard left pan, `0` is balanced, `1` is hard right pan. + * + * @param modulator the Sound used to modulate the pan of another sound + * @return a Sound Transformer that pans a Sound + */ +export function pan_mod(modulator: Sound): SoundTransformer { + const amount = (t: number) => { + let output = get_left_wave(modulator)(t) + get_right_wave(modulator)(t); + if (output > 1) { + output = 1; + } + if (output < -1) { + output = -1; + } + return output; + }; + return (sound) => { + sound = squash(sound); + return make_stereo_sound( + (t) => ((1 - amount(t)) / 2) * get_left_wave(sound)(t), + (t) => ((1 + amount(t)) / 2) * get_right_wave(sound)(t), + get_duration(sound), + ); + }; +} + +// Primitive sounds + +/** + * Makes a noise sound with given duration + * + * @param duration the duration of the noise sound + * @return resulting noise sound + * @example noise_sound(5); + */ +export function noise_sound(duration: number): Sound { + return make_sound((_t) => Math.random() * 2 - 1, duration); +} + +/** + * Makes a silence sound with given duration + * + * @param duration the duration of the silence sound + * @return resulting silence sound + * @example silence_sound(5); + */ +export function silence_sound(duration: number): Sound { + return make_sound((_t) => 0, duration); +} + +/** + * Makes a sine wave sound with given frequency and duration + * + * @param freq the frequency of the sine wave sound + * @param duration the duration of the sine wave sound + * @return resulting sine wave sound + * @example sine_sound(440, 5); + */ +export function sine_sound(freq: number, duration: number): Sound { + return make_sound((t) => Math.sin(2 * Math.PI * t * freq), duration); +} + +/** + * Makes a square wave sound with given frequency and duration + * + * @param freq the frequency of the square wave sound + * @param duration the duration of the square wave sound + * @return resulting square wave sound + * @example square_sound(440, 5); + */ +export function square_sound(f: number, duration: number): Sound { + function fourier_expansion_square(t: number) { + let answer = 0; + for (let i = 1; i <= fourier_expansion_level; i += 1) { + answer += Math.sin(2 * Math.PI * (2 * i - 1) * f * t) / (2 * i - 1); + } + return answer; + } + return make_sound( + (t) => (4 / Math.PI) * fourier_expansion_square(t), + duration, + ); +} + +/** + * Makes a triangle wave sound with given frequency and duration + * + * @param freq the frequency of the triangle wave sound + * @param duration the duration of the triangle wave sound + * @return resulting triangle wave sound + * @example triangle_sound(440, 5); + */ +export function triangle_sound(freq: number, duration: number): Sound { + function fourier_expansion_triangle(t: number) { + let answer = 0; + for (let i = 0; i < fourier_expansion_level; i += 1) { + answer + += ((-1) ** i * Math.sin((2 * i + 1) * t * freq * Math.PI * 2)) + / (2 * i + 1) ** 2; + } + return answer; + } + return make_sound( + (t) => (8 / Math.PI / Math.PI) * fourier_expansion_triangle(t), + duration, + ); +} + +/** + * Makes a sawtooth wave sound with given frequency and duration + * + * @param freq the frequency of the sawtooth wave sound + * @param duration the duration of the sawtooth wave sound + * @return resulting sawtooth wave sound + * @example sawtooth_sound(440, 5); + */ +export function sawtooth_sound(freq: number, duration: number): Sound { + function fourier_expansion_sawtooth(t: number) { + let answer = 0; + for (let i = 1; i <= fourier_expansion_level; i += 1) { + answer += Math.sin(2 * Math.PI * i * freq * t) / i; + } + return answer; + } + return make_sound( + (t) => 1 / 2 - (1 / Math.PI) * fourier_expansion_sawtooth(t), + duration, + ); +} + +// Composition Operators + +/** + * Makes a new Sound by combining the sounds in a given list + * where the second sound is appended to the end of the first sound, + * the third sound is appended to the end of the second sound, and + * so on. The effect is that the sounds in the list are joined end-to-end + * + * @param list_of_sounds given list of sounds + * @return the combined Sound + * @example consecutively(list(sine_sound(200, 2), sine_sound(400, 3))); + */ +export function consecutively(list_of_sounds: List): Sound { + function stereo_cons_two(sound1: Sound, sound2: Sound) { + const Lwave1 = get_left_wave(sound1); + const Rwave1 = get_right_wave(sound1); + const Lwave2 = get_left_wave(sound2); + const Rwave2 = get_right_wave(sound2); + const dur1 = get_duration(sound1); + const dur2 = get_duration(sound2); + const new_left = (t: number) => (t < dur1 ? Lwave1(t) : Lwave2(t - dur1)); + const new_right = (t: number) => (t < dur1 ? Rwave1(t) : Rwave2(t - dur1)); + return make_stereo_sound(new_left, new_right, dur1 + dur2); + } + return accumulate(stereo_cons_two, silence_sound(0), list_of_sounds); +} + +/** + * Makes a new Sound by combining the sounds in a given list + * where all the sounds are overlapped on top of each other. + * + * @param list_of_sounds given list of sounds + * @return the combined Sound + * @example simultaneously(list(sine_sound(200, 2), sine_sound(400, 3))) + */ +export function simultaneously(list_of_sounds: List): Sound { + function stereo_simul_two(sound1: Sound, sound2: Sound) { + const Lwave1 = get_left_wave(sound1); + const Rwave1 = get_right_wave(sound1); + const Lwave2 = get_left_wave(sound2); + const Rwave2 = get_right_wave(sound2); + const dur1 = get_duration(sound1); + const dur2 = get_duration(sound2); + const new_left = (t: number) => Lwave1(t) + Lwave2(t); + const new_right = (t: number) => Rwave1(t) + Rwave2(t); + const new_dur = dur1 < dur2 ? dur2 : dur1; + return make_stereo_sound(new_left, new_right, new_dur); + } + + const unnormed = accumulate( + stereo_simul_two, + silence_sound(0), + list_of_sounds, + ); + const sounds_length = length(list_of_sounds); + const normalised_left = (t: number) => head(head(unnormed))(t) / sounds_length; + const normalised_right = (t: number) => tail(head(unnormed))(t) / sounds_length; + const highest_duration = tail(unnormed); + return make_stereo_sound(normalised_left, normalised_right, highest_duration); +} + +/** + * Returns an envelope: a function from Sound to Sound. + * When the adsr envelope is applied to a Sound, it returns + * a new Sound with its amplitude modified according to parameters + * The relative amplitude increases from 0 to 1 linearly over the + * attack proportion, then decreases from 1 to sustain level over the + * decay proportion, and remains at that level until the release + * proportion when it decays back to 0. + * @param attack_ratio proportion of Sound in attack phase + * @param decay_ratio proportion of Sound decay phase + * @param sustain_level sustain level between 0 and 1 + * @param release_ratio proportion of Sound in release phase + * @return Envelope a function from Sound to Sound + * @example adsr(0.2, 0.3, 0.3, 0.1)(sound); + */ +export function adsr( + attack_ratio: number, + decay_ratio: number, + sustain_level: number, + release_ratio: number, +): SoundTransformer { + return (sound) => { + const Lwave = get_left_wave(sound); + const Rwave = get_right_wave(sound); + const duration = get_duration(sound); + const attack_time = duration * attack_ratio; + const decay_time = duration * decay_ratio; + const release_time = duration * release_ratio; + + function adsrHelper(wave: Wave) { + return (x: number) => { + if (x < attack_time) { + return wave(x) * (x / attack_time); + } + if (x < attack_time + decay_time) { + return ( + ((1 - sustain_level) * linear_decay(decay_time)(x - attack_time) + + sustain_level) + * wave(x) + ); + } + if (x < duration - release_time) { + return wave(x) * sustain_level; + } + return ( + wave(x) + * sustain_level + * linear_decay(release_time)(x - (duration - release_time)) + ); + }; + } + return make_stereo_sound(adsrHelper(Lwave), adsrHelper(Rwave), duration); + }; +} + +/** + * Returns a Sound that results from applying a list of envelopes + * to a given wave form. The wave form is a Sound generator that + * takes a frequency and a duration as arguments and produces a + * Sound with the given frequency and duration. Each envelope is + * applied to a harmonic: the first harmonic has the given frequency, + * the second has twice the frequency, the third three times the + * frequency etc. The harmonics are then layered simultaneously to + * produce the resulting Sound. + * @param waveform function from pair(frequency, duration) to Sound + * @param base_frequency frequency of the first harmonic + * @param duration duration of the produced Sound, in seconds + * @param envelopes – list of envelopes, which are functions from Sound to Sound + * @return Sound resulting Sound + * @example stacking_adsr(sine_sound, 300, 5, list(adsr(0.1, 0.3, 0.2, 0.5), adsr(0.2, 0.5, 0.6, 0.1), adsr(0.3, 0.1, 0.7, 0.3))); + */ +export function stacking_adsr( + waveform: SoundProducer, + base_frequency: number, + duration: number, + envelopes: List, +): Sound { + function zip(lst: List, n: number) { + if (is_null(lst)) { + return lst; + } + return pair(pair(n, head(lst)), zip(tail(lst), n + 1)); + } + + return simultaneously( + accumulate( + (x: any, y: any) => pair(tail(x)(waveform(base_frequency * head(x), duration)), y), + null, + zip(envelopes, 1), + ), + ); +} + +/** + * Returns a SoundTransformer which uses its argument + * to modulate the phase of a (carrier) sine wave + * of given frequency and duration with a given Sound. + * Modulating with a low frequency Sound results in a vibrato effect. + * Modulating with a Sound with frequencies comparable to + * the sine wave frequency results in more complex wave forms. + * + * @param freq the frequency of the sine wave to be modulated + * @param duration the duration of the output soud + * @param amount the amount of modulation to apply to the carrier sine wave + * @return function which takes in a Sound and returns a Sound + * @example phase_mod(440, 5, 1)(sine_sound(220, 5)); + */ +export function phase_mod( + freq: number, + duration: number, + amount: number, +): SoundTransformer { + return (modulator: Sound) => make_stereo_sound( + (t) => Math.sin(2 * Math.PI * t * freq + amount * get_left_wave(modulator)(t)), + (t) => Math.sin( + 2 * Math.PI * t * freq + amount * get_right_wave(modulator)(t), + ), + duration, + ); +} + +// MIDI conversion functions + +/** + * Converts a letter name to its corresponding MIDI note. + * The letter name is represented in standard pitch notation. + * Examples are "A5", "Db3", "C#7". + * Refer to
this mapping from + * letter name to midi notes. + * + * @param letter_name given letter name + * @return the corresponding midi note + * @example letter_name_to_midi_note("C4"); // Returns 60 + */ +export function letter_name_to_midi_note(note: string): number { + let res = 12; // C0 is midi note 12 + const n = note[0].toUpperCase(); + switch (n) { + case 'D': + res += 2; + break; + + case 'E': + res += 4; + break; + + case 'F': + res += 5; + break; + + case 'G': + res += 7; + break; + + case 'A': + res += 9; + break; + + case 'B': + res += 11; + break; + + default: + break; + } + + if (note.length === 2) { + res += parseInt(note[1]) * 12; + } else if (note.length === 3) { + switch (note[1]) { + case '#': + res += 1; + break; + + case 'b': + res -= 1; + break; + + default: + break; + } + res += parseInt(note[2]) * 12; + } + return res; +} + +/** + * Converts a MIDI note to its corresponding frequency. + * + * @param note given MIDI note + * @return the frequency of the MIDI note + * @example midi_note_to_frequency(69); // Returns 440 + */ +export function midi_note_to_frequency(note: number): number { + // A4 = 440Hz = midi note 69 + return 440 * 2 ** ((note - 69) / 12); +} + +/** + * Converts a letter name to its corresponding frequency. + * + * @param letter_name given letter name + * @return the corresponding frequency + * @example letter_name_to_frequency("A4"); // Returns 440 + */ +export function letter_name_to_frequency(note: string): number { + return midi_note_to_frequency(letter_name_to_midi_note(note)); +} + +// Instruments + +/** + * returns a Sound reminiscent of a bell, playing + * a given note for a given duration + * @param note MIDI note + * @param duration duration in seconds + * @return Sound resulting bell Sound with given pitch and duration + * @example bell(40, 1); + */ +export function bell(note: number, duration: number): Sound { + return stacking_adsr( + square_sound, + midi_note_to_frequency(note), + duration, + list( + adsr(0, 0.6, 0, 0.05), + adsr(0, 0.6618, 0, 0.05), + adsr(0, 0.7618, 0, 0.05), + adsr(0, 0.9071, 0, 0.05), + ), + ); +} + +/** + * returns a Sound reminiscent of a cello, playing + * a given note for a given duration + * @param note MIDI note + * @param duration duration in seconds + * @return Sound resulting cello Sound with given pitch and duration + * @example cello(36, 5); + */ +export function cello(note: number, duration: number): Sound { + return stacking_adsr( + square_sound, + midi_note_to_frequency(note), + duration, + list(adsr(0.05, 0, 1, 0.1), adsr(0.05, 0, 1, 0.15), adsr(0, 0, 0.2, 0.15)), + ); +} + +/** + * returns a Sound reminiscent of a piano, playing + * a given note for a given duration + * @param note MIDI note + * @param duration duration in seconds + * @return Sound resulting piano Sound with given pitch and duration + * @example piano(48, 5); + */ +export function piano(note: number, duration: number): Sound { + return stacking_adsr( + triangle_sound, + midi_note_to_frequency(note), + duration, + list(adsr(0, 0.515, 0, 0.05), adsr(0, 0.32, 0, 0.05), adsr(0, 0.2, 0, 0.05)), + ); +} + +/** + * returns a Sound reminiscent of a trombone, playing + * a given note for a given duration + * @param note MIDI note + * @param duration duration in seconds + * @return Sound resulting trombone Sound with given pitch and duration + * @example trombone(60, 2); + */ +export function trombone(note: number, duration: number): Sound { + return stacking_adsr( + square_sound, + midi_note_to_frequency(note), + duration, + list(adsr(0.2, 0, 1, 0.1), adsr(0.3236, 0.6, 0, 0.1)), + ); +} + +/** + * returns a Sound reminiscent of a violin, playing + * a given note for a given duration + * @param note MIDI note + * @param duration duration in seconds + * @return Sound resulting violin Sound with given pitch and duration + * @example violin(53, 4); + */ +export function violin(note: number, duration: number): Sound { + return stacking_adsr( + sawtooth_sound, + midi_note_to_frequency(note), + duration, + list( + adsr(0.35, 0, 1, 0.15), + adsr(0.35, 0, 1, 0.15), + adsr(0.45, 0, 1, 0.15), + adsr(0.45, 0, 1, 0.15), + ), + ); +} diff --git a/src/bundles/stereo_sound/index.ts b/src/bundles/stereo_sound/index.ts index abd2dd07b..02523683a 100644 --- a/src/bundles/stereo_sound/index.ts +++ b/src/bundles/stereo_sound/index.ts @@ -1,45 +1,45 @@ -export { - // Constructor/Accessors/Typecheck - make_stereo_sound, - make_sound, - get_left_wave, - get_right_wave, - get_duration, - is_sound, - squash, - pan, - pan_mod, - // Play-related - play, - play_wave, - play_waves, - play_concurrently, - stop, - // Recording - init_record, - record, - record_for, - // Composition and Envelopes - consecutively, - simultaneously, - phase_mod, - adsr, - stacking_adsr, - // Basic waveforms - noise_sound, - silence_sound, - sine_sound, - sawtooth_sound, - triangle_sound, - square_sound, - // MIDI - letter_name_to_midi_note, - midi_note_to_frequency, - letter_name_to_frequency, - // Instruments - bell, - cello, - piano, - trombone, - violin, -} from './functions'; +export { + // Constructor/Accessors/Typecheck + make_stereo_sound, + make_sound, + get_left_wave, + get_right_wave, + get_duration, + is_sound, + squash, + pan, + pan_mod, + // Play-related + play, + play_wave, + play_waves, + play_concurrently, + stop, + // Recording + init_record, + record, + record_for, + // Composition and Envelopes + consecutively, + simultaneously, + phase_mod, + adsr, + stacking_adsr, + // Basic waveforms + noise_sound, + silence_sound, + sine_sound, + sawtooth_sound, + triangle_sound, + square_sound, + // MIDI + letter_name_to_midi_note, + midi_note_to_frequency, + letter_name_to_frequency, + // Instruments + bell, + cello, + piano, + trombone, + violin, +} from './functions'; diff --git a/src/bundles/stereo_sound/riffwave.ts b/src/bundles/stereo_sound/riffwave.ts index 478588146..70a1af751 100644 --- a/src/bundles/stereo_sound/riffwave.ts +++ b/src/bundles/stereo_sound/riffwave.ts @@ -1,22 +1,22 @@ -/* - * RIFFWAVE.js v0.03 - Audio encoder for HTML5
-
-
-

Preparing to load Unity Academy...

-
-
- -
-
- ); - } - - componentDidMount() { - getInstance() - .firstTimeLoadUnityApplication(); - } -} - - - -const UNITY_CONFIG = { - loaderUrl: `${UNITY_ACADEMY_BACKEND_URL}frontend/${BUILD_NAME}.loader.js`, - dataUrl: `${UNITY_ACADEMY_BACKEND_URL}frontend/${BUILD_NAME}.data.gz`, - frameworkUrl: `${UNITY_ACADEMY_BACKEND_URL}frontend/${BUILD_NAME}.framework.js.gz`, - codeUrl: `${UNITY_ACADEMY_BACKEND_URL}frontend/${BUILD_NAME}.wasm.gz`, - streamingAssetsUrl: `${UNITY_ACADEMY_BACKEND_URL}webgl_assetbundles`, - companyName: 'Wang Zihan @ NUS SoC 2026', - productName: 'Unity Academy (Source Academy Embedding Version)', - productVersion: 'prod-2023.4', -}; - - -class UnityAcademyJsInteropContext { - // private unityConfig : any; - public unityInstance : any; - private unityContainerElement : HTMLElement | null; - private studentGameObjectStorage : { [gameObjectIdentifier : string] : StudentGameObject }; // [get by interop] - private prefabInfo: any; - private gameObjectIdentifierSerialCounter = 0; - private studentActionQueue : any; // [get / clear by interop] - private deltaTime = 0; // [set by interop] - private input : InputData; // [set by interop] 0 = key idle, 1 = on key down, 2 = holding key, 3 = on key up - public gameObjectIdentifierWrapperClass : any; // [get by interop] For interop to create the class instance with the correct type when calling users' Start and Update functions. Only the object with this class type can pass checkGameObjectIdentifierParameter in functions.ts - private targetFrameRate : number; - private unityInstanceState; // [set by interop] - private guiData : any[]; // [get / clear by interop] - public dimensionMode; - private isShowingUnityAcademy : boolean; // [get by interop] - private latestUserAgreementVersion : string; - - constructor() { - this.unityInstance = null; - this.unityContainerElement = document.getElementById('unity_container'); - if (this.unityContainerElement === undefined || this.unityContainerElement === null) { - this.unityContainerElement = document.createElement('div'); - this.unityContainerElement.id = 'unity_container'; - } - - this.loadPrefabInfo(); - this.studentActionQueue = []; - this.studentGameObjectStorage = {}; - this.guiData = []; - this.input = { - keyboardInputInfo: {}, - }; - this.targetFrameRate = 30; - - this.latestUserAgreementVersion = 'unknown'; - this.getLatestUserAgreementVersion(); - - // [ Why I don't put this into my module's own context? ] - // Since Unity Academy application needs to access this from the WASM side, and the Unity Academy WASM side can not access the module context under the js-slang evaluation scope since Unity Academy app is running totally separated from js-slang in the WASM virtual machine. - // It means Unity Academy WASM app has no access to 'context.moduleContexts.unity3d.state' or anything in js-slang scope. - // So I put the context under the global window variable and this would be the easiest and most efficient way for Unity Academy WASM app to access it. - (window as any).unityAcademyContext = this; - - // Load Unity Academy App - document.body.appendChild(this.unityContainerElement); - ReactDOM.render(, this.unityContainerElement); - this.setShowUnityComponent(0); - this.isShowingUnityAcademy = false; - - this.gameObjectIdentifierWrapperClass = GameObjectIdentifier; - - // Create javascript side data storage for primitive GameObjects - this.makeGameObjectDataStorage('MainCameraFollowingTarget'); - } - - private loadPrefabInfo() { - const jsonUrl = `${UNITY_ACADEMY_BACKEND_URL}webgl_assetbundles/prefab_info.json`; - const xhr = new XMLHttpRequest(); - // Here I use sync request because this json file is very small in size and more importantly, this file must be loaded before continue evaluating students' code - // because it's used for check the availability of prefab name when students call 'instantiate' in their code. - xhr.open('GET', jsonUrl, false); - xhr.send(); - if (xhr.status !== 200) { - throw new Error(`Unable to get prefab list. Error code = ${xhr.status}`); - } - this.prefabInfo = JSON.parse(xhr.responseText); - } - - private createUnityAcademyInstance() { - this.unityInstanceState = 'LoadingInstance'; - const canvas = document.querySelector('#unity-canvas'); - const unity_load_info = document.querySelector('#unity_load_info'); - createUnityInstance(canvas, UNITY_CONFIG, (progress) => { - unity_load_info!.innerHTML = `Loading Unity Academy ( ${Math.floor(progress * 100)}% )`; - }) - .then((unityInstance) => { - this.unityInstance = unityInstance; - unity_load_info!.innerHTML = ''; - }) - .catch((message) => { - alert(message); - }); - } - - firstTimeLoadUnityApplication() { - const script = document.createElement('script'); - script.src = UNITY_CONFIG.loaderUrl; - script.onload = () => { - this.createUnityAcademyInstance(); - }; - document.body.appendChild(script); - } - - reloadUnityAcademyInstanceAfterTermination() { - this.createUnityAcademyInstance(); - } - - - setShowUnityComponent(resolution: number) { - const toShow = resolution > 0; - this.isShowingUnityAcademy = toShow; - const sendMessageFunctionName = 'SendMessage'; - if (toShow) { - (this.unityContainerElement as any).style.visibility = 'visible'; - if (this.unityInstance !== null) { - this.unityInstance[sendMessageFunctionName]('GameManager', 'WakeUpApplication'); - } - } else { - (this.unityContainerElement as any).style.visibility = 'hidden'; - // Make Unity Academy Application sleep to conserve resources (pause rendering, etc) - if (this.unityInstance !== null) { - this.unityInstance[sendMessageFunctionName]('GameManager', 'DoApplicationSleep'); - } - } - const unityCanvas = document.getElementById('unity-canvas') as any; - if (unityCanvas !== null) { - unityCanvas.style.width = `${resolution.toString()}%`; - unityCanvas.style.height = `${resolution.toString()}%`; - unityCanvas.style.left = `${((100 - resolution) / 2).toString()}%`; - unityCanvas.style.top = `${((100 - resolution) / 2).toString()}%`; - } - } - - terminate() { - if (this.unityInstance === null) return; - if (!confirm('Do you really hope to terminate the current Unity Academy instance? If so, everything need to reload when you use Unity Academy again.')) { - return; - } - const quitFunctionName = 'Quit'; - this.unityInstance[quitFunctionName](); - this.unityInstance = null; - this.resetModuleData(); - this.setShowUnityComponent(0); - const canvasContext = (document.querySelector('#unity-canvas') as HTMLCanvasElement)!.getContext('webgl2'); - canvasContext!.clearColor(0, 0, 0, 0); - canvasContext!.clear(canvasContext!.COLOR_BUFFER_BIT); - document.querySelector('#unity_load_info')!.innerHTML = 'Unity Academy app has been terminated. Please rerun your program with init_unity_academy_3d or init_unity_academy_2d for re-initialization.'; - } - - reset() { - this.resetModuleData(); - if (this.unityInstance !== null) { - const sendMessageFunctionName = 'SendMessage'; - // Reset Unity Academy app - this.unityInstance[sendMessageFunctionName]('GameManager', 'ResetSession'); - } - } - - private resetModuleData() { - this.studentActionQueue = []; - this.studentGameObjectStorage = {}; - this.gameObjectIdentifierSerialCounter = 0; - this.input.keyboardInputInfo = {}; - this.guiData = []; - // Make primitive game objects - this.makeGameObjectDataStorage('MainCameraFollowingTarget'); - } - - isUnityInstanceReady() { - return this.unityInstanceState === 'Ready'; - } - - private getLatestUserAgreementVersion() : void { - const jsonUrl = `${UNITY_ACADEMY_BACKEND_URL}user_agreement.json`; - const xhr = new XMLHttpRequest(); - xhr.onreadystatechange = () => { - if (xhr.readyState === 4 && xhr.status === 200) { - this.latestUserAgreementVersion = JSON.parse(xhr.responseText).version; - } - }; - xhr.open('GET', jsonUrl, true); - xhr.send(); - } - - getUserAgreementStatus() : string { - const agreedUserAgreementVersion = localStorage.getItem('unity_academy_agreed_user_agreement_version'); - if (agreedUserAgreementVersion === null || agreedUserAgreementVersion === 'unagreed' || agreedUserAgreementVersion === 'unknown') { - return 'unagreed'; - } - if (this.latestUserAgreementVersion === 'unknown') { - return 'unagreed'; - } - if (agreedUserAgreementVersion !== this.latestUserAgreementVersion) { - return 'new_user_agreement'; - } - return 'agreed'; - } - - setUserAgreementStatus(agree : boolean) : void { - if (agree) { - localStorage.setItem('unity_academy_agreed_user_agreement_version', this.latestUserAgreementVersion); - } else { - localStorage.setItem('unity_academy_agreed_user_agreement_version', 'unagreed'); - } - } - - instantiateInternal(prefabName : string) : GameObjectIdentifier { - let prefabExists = false; - const len = this.prefabInfo.prefab_info.length; - for (let i = 0; i < len; i++) { - if (this.prefabInfo.prefab_info[i].name === prefabName) { - prefabExists = true; - break; - } - } - if (!prefabExists) { - throw new Error(`Unknown prefab name: '${prefabName}'. Please refer to this prefab list at [ ${UNITY_ACADEMY_BACKEND_URL}webgl_assetbundles/prefab_info.html ] for all available prefab names.`); - } - const gameObjectIdentifier = `${prefabName}_${this.gameObjectIdentifierSerialCounter}`; - this.gameObjectIdentifierSerialCounter++; - this.makeGameObjectDataStorage(gameObjectIdentifier); - this.dispatchStudentAction(`instantiate|${prefabName}|${gameObjectIdentifier}`); - return new GameObjectIdentifier(gameObjectIdentifier); - } - - instantiate2DSpriteUrlInternal(sourceImageUrl : string) : GameObjectIdentifier { - const gameObjectIdentifier = `2DSprite_${this.gameObjectIdentifierSerialCounter}`; - this.gameObjectIdentifierSerialCounter++; - this.makeGameObjectDataStorage(gameObjectIdentifier); - this.dispatchStudentAction(`instantiate2DSpriteUrl|${sourceImageUrl}|${gameObjectIdentifier}`); - return new GameObjectIdentifier(gameObjectIdentifier); - } - - instantiateEmptyGameObjectInternal() : GameObjectIdentifier { - const gameObjectIdentifier = `EmptyGameObject_${this.gameObjectIdentifierSerialCounter}`; - this.gameObjectIdentifierSerialCounter++; - this.makeGameObjectDataStorage(gameObjectIdentifier); - this.dispatchStudentAction(`instantiateEmptyGameObject|${gameObjectIdentifier}`); - return new GameObjectIdentifier(gameObjectIdentifier); - } - - destroyGameObjectInternal(gameObjectIdentifier : GameObjectIdentifier) : void { - this.dispatchStudentAction(`destroyGameObject|${gameObjectIdentifier.gameObjectIdentifier}`); - } - - private makeGameObjectDataStorage(gameObjectIdentifier : string) { - this.studentGameObjectStorage[gameObjectIdentifier] = { - startMethod: null, - updateMethod: null, - onCollisionEnterMethod: null, - onCollisionStayMethod: null, - onCollisionExitMethod: null, - transform: { - position: zeroVector(), - rotation: zeroVector(), - scale: new Vector3(1, 1, 1), - }, - rigidbody: null, - customProperties: {}, - isDestroyed: false, - }; - } - - getStudentGameObject(gameObjectIdentifier : GameObjectIdentifier) : StudentGameObject { - const retVal = this.studentGameObjectStorage[gameObjectIdentifier.gameObjectIdentifier]; - if (retVal === undefined) { - throw new Error(`Could not find GameObject with identifier ${gameObjectIdentifier}`); - } - return retVal; - } - - setStartInternal(gameObjectIdentifier : GameObjectIdentifier, startFunction : Function) : void { - const gameObject = this.getStudentGameObject(gameObjectIdentifier); - gameObject.startMethod = startFunction; - } - - setUpdateInternal(gameObjectIdentifier : GameObjectIdentifier, updateFunction : Function) : void { - const gameObject = this.getStudentGameObject(gameObjectIdentifier); - gameObject.updateMethod = updateFunction; - } - - private dispatchStudentAction(action) : void { - this.studentActionQueue[this.studentActionQueue.length] = action; - } - - getGameObjectIdentifierForPrimitiveGameObject(name : string) : GameObjectIdentifier { - const propName = 'gameObjectIdentifierWrapperClass'; - return new this[propName](name); - } - - getGameObjectTransformProp(propName : string, gameObjectIdentifier : GameObjectIdentifier) : Array { - const gameObject = this.getStudentGameObject(gameObjectIdentifier); - return [gameObject.transform[propName].x, gameObject.transform[propName].y, gameObject.transform[propName].z]; - } - - setGameObjectTransformProp(propName : string, gameObjectIdentifier : GameObjectIdentifier, x : number, y : number, z : number) : void { - const gameObject = this.getStudentGameObject(gameObjectIdentifier); - gameObject.transform[propName].x = x; - gameObject.transform[propName].y = y; - gameObject.transform[propName].z = z; - } - - getDeltaTime() : number { - return this.deltaTime; - } - - translateWorldInternal(gameObjectIdentifier : GameObjectIdentifier, x : number, y : number, z : number) : void { - const gameObject = this.getStudentGameObject(gameObjectIdentifier); - gameObject.transform.position.x += x; - gameObject.transform.position.y += y; - gameObject.transform.position.z += z; - } - - - translateLocalInternal(gameObjectIdentifier : GameObjectIdentifier, x : number, y : number, z : number) : void { - const gameObject = this.getStudentGameObject(gameObjectIdentifier); - const rotation = gameObject.transform.rotation; - - // Some methematical stuff here for calcuating the actual world position displacement from local translate vector and current Euler rotation. - const rx = rotation.x * Math.PI / 180; - const ry = rotation.y * Math.PI / 180; - const rz = rotation.z * Math.PI / 180; - const cos = Math.cos; - const sin = Math.sin; - const rotationMatrix - = [[cos(ry) * cos(rz), -cos(ry) * sin(rz), sin(ry)], - [cos(rx) * sin(rz) + sin(rx) * sin(ry) * cos(rz), cos(rx) * cos(rz) - sin(rx) * sin(ry) * sin(rz), -sin(rx) * cos(ry)], - [sin(rx) * sin(rz) - cos(rx) * sin(ry) * cos(rz), cos(rx) * sin(ry) * sin(rz) + sin(rx) * cos(rz), cos(rx) * cos(ry)]]; - const finalWorldTranslateVector = [ - rotationMatrix[0][0] * x + rotationMatrix[0][1] * y + rotationMatrix[0][2] * z, - rotationMatrix[1][0] * x + rotationMatrix[1][1] * y + rotationMatrix[1][2] * z, - rotationMatrix[2][0] * x + rotationMatrix[2][1] * y + rotationMatrix[2][2] * z, - ]; - gameObject.transform.position.x += finalWorldTranslateVector[0]; - gameObject.transform.position.y += finalWorldTranslateVector[1]; - gameObject.transform.position.z += finalWorldTranslateVector[2]; - } - - lookAtPositionInternal(gameObjectIdentifier : GameObjectIdentifier, x : number, y : number, z : number) : void { - const gameObject = this.getStudentGameObject(gameObjectIdentifier); - const deltaVector = normalizeVector(new Vector3(x - gameObject.transform.position.x, y - gameObject.transform.position.y, z - gameObject.transform.position.z)); - const eulerX = Math.asin(-deltaVector.y); - const eulerY = Math.atan2(deltaVector.x, deltaVector.z); - gameObject.transform.rotation.x = eulerX * 180 / Math.PI; - gameObject.transform.rotation.y = eulerY * 180 / Math.PI; - gameObject.transform.rotation.z = 0; - } - - gameObjectDistanceInternal(gameObjectIdentifier_A : GameObjectIdentifier, gameObjectIdentifier_B : GameObjectIdentifier) : number { - const gameObjectA = this.getStudentGameObject(gameObjectIdentifier_A); - const gameObjectB = this.getStudentGameObject(gameObjectIdentifier_B); - return pointDistance(gameObjectA.transform.position, gameObjectB.transform.position); - } - - rotateWorldInternal(gameObjectIdentifier : GameObjectIdentifier, x : number, y : number, z : number) : void { - const gameObject = this.getStudentGameObject(gameObjectIdentifier); - gameObject.transform.rotation.x += x; - gameObject.transform.rotation.y += y; - gameObject.transform.rotation.z += z; - } - - copyTransformPropertiesInternal(propName : string, from : GameObjectIdentifier, to : GameObjectIdentifier, delta_x : number, delta_y : number, delta_z : number) : void { - const fromGameObject = this.getStudentGameObject(from); - const toGameObject = this.getStudentGameObject(to); - if (Math.abs(delta_x) !== Infinity) toGameObject.transform[propName].x = fromGameObject.transform[propName].x + delta_x; - if (Math.abs(delta_y) !== Infinity) toGameObject.transform[propName].y = fromGameObject.transform[propName].y + delta_y; - if (Math.abs(delta_z) !== Infinity) toGameObject.transform[propName].z = fromGameObject.transform[propName].z + delta_z; - } - - getKeyState(keyCode : string) : number { - return this.input.keyboardInputInfo[keyCode]; - } - - playAnimatorStateInternal(gameObjectIdentifier : GameObjectIdentifier, animatorStateName : string) { - this.getStudentGameObject(gameObjectIdentifier); // Just to check whether the game object identifier is valid or not. - this.dispatchStudentAction(`playAnimatorState|${gameObjectIdentifier.gameObjectIdentifier}|${animatorStateName}`); - } - - applyRigidbodyInternal(gameObjectIdentifier : GameObjectIdentifier) { - console.log(`Applying rigidbody to GameObject ${gameObjectIdentifier.gameObjectIdentifier}`); - const gameObject = this.getStudentGameObject(gameObjectIdentifier); - if (gameObject.rigidbody !== null) { - throw new Error(`Trying to duplicately apply rigidbody on GameObject ${gameObjectIdentifier.gameObjectIdentifier}`); - } - gameObject.rigidbody = { - velocity: zeroVector(), - angularVelocity: zeroVector(), - mass: 1, - useGravity: true, - drag: 0, - angularDrag: 0.05, - }; - this.dispatchStudentAction(`applyRigidbody|${gameObjectIdentifier.gameObjectIdentifier}`); - } - - private getRigidbody(gameObject: StudentGameObject) : RigidbodyData { - if (gameObject.rigidbody === null) throw new Error('You must call apply_rigidbody on the game object before using this physics function!'); - return gameObject.rigidbody; - } - - getRigidbodyVelocityVector3Prop(propName : string, gameObjectIdentifier : GameObjectIdentifier) : Array { - const gameObject = this.getStudentGameObject(gameObjectIdentifier); - const rigidbody = this.getRigidbody(gameObject); - return [rigidbody[propName].x, rigidbody[propName].y, rigidbody[propName].z]; - } - - setRigidbodyVelocityVector3Prop(propName : string, gameObjectIdentifier : GameObjectIdentifier, x : number, y : number, z : number) : void { - const gameObject = this.getStudentGameObject(gameObjectIdentifier); - const rigidbody = this.getRigidbody(gameObject); - rigidbody[propName].x = x; - rigidbody[propName].y = y; - rigidbody[propName].z = z; - } - - getRigidbodyNumericalProp(propName : string, gameObjectIdentifier : GameObjectIdentifier) : number { - const gameObject = this.getStudentGameObject(gameObjectIdentifier); - const rigidbody = this.getRigidbody(gameObject); - return rigidbody[propName]; - } - - setRigidbodyNumericalProp(propName : string, gameObjectIdentifier : GameObjectIdentifier, value : number) : void { - const gameObject = this.getStudentGameObject(gameObjectIdentifier); - const rigidbody = this.getRigidbody(gameObject); - rigidbody[propName] = value; - } - - setUseGravityInternal(gameObjectIdentifier : GameObjectIdentifier, useGravity : boolean) : void { - const gameObject = this.getStudentGameObject(gameObjectIdentifier); - const rigidbody = this.getRigidbody(gameObject); - rigidbody.useGravity = useGravity; - } - - addImpulseForceInternal(gameObjectIdentifier : GameObjectIdentifier, x : number, y : number, z : number) : void { - this.dispatchStudentAction(`addImpulseForce|${gameObjectIdentifier.gameObjectIdentifier}|${x.toString()}|${y.toString()}|${z.toString()}`); - } - - removeColliderComponentsInternal(gameObjectIdentifier : GameObjectIdentifier) : void { - this.dispatchStudentAction(`removeColliderComponents|${gameObjectIdentifier.gameObjectIdentifier}`); - } - - setOnCollisionEnterInternal(gameObjectIdentifier : GameObjectIdentifier, eventFunction : Function) { - const gameObject = this.getStudentGameObject(gameObjectIdentifier); - gameObject.onCollisionEnterMethod = eventFunction; - } - - setOnCollisionStayInternal(gameObjectIdentifier : GameObjectIdentifier, eventFunction : Function) { - const gameObject = this.getStudentGameObject(gameObjectIdentifier); - gameObject.onCollisionStayMethod = eventFunction; - } - - setOnCollisionExitInternal(gameObjectIdentifier : GameObjectIdentifier, eventFunction : Function) { - const gameObject = this.getStudentGameObject(gameObjectIdentifier); - gameObject.onCollisionExitMethod = eventFunction; - } - - requestForMainCameraControlInternal() : GameObjectIdentifier { - const name = 'MainCamera'; - if (this.studentGameObjectStorage[name] !== undefined) { - return this.getGameObjectIdentifierForPrimitiveGameObject('MainCamera'); - } - this.makeGameObjectDataStorage(name); - this.dispatchStudentAction('requestMainCameraControl'); - return this.getGameObjectIdentifierForPrimitiveGameObject('MainCamera'); - } - - onGUI_Label(content : string, x : number, y : number, fontSize : number) : void { - content = content.replaceAll('|', ''); // operator '|' is reserved as gui data separator in Unity Academy - const newLabel = { - type: 'label', - content, - x, - y, - fontSize, - }; - this.guiData.push(newLabel); - } - - onGUI_Button(text : string, x: number, y : number, fontSize : number, onClick : Function) : void { - text = text.replaceAll('|', ''); // operator '|' is reserved as gui data separator in Unity Academy - const newButton = { - type: 'button', - text, - x, - y, - fontSize, - onClick, - }; - this.guiData.push(newButton); - } - - setTargetFrameRate(newTargetFrameRate : number) : void { - newTargetFrameRate = Math.floor(newTargetFrameRate); - if (newTargetFrameRate < 15) return; - if (newTargetFrameRate > 120) return; - this.targetFrameRate = newTargetFrameRate; - } - - setCustomPropertyInternal(gameObjectIdentifier : GameObjectIdentifier, propName : string, value : any) : void { - const gameObject = this.getStudentGameObject(gameObjectIdentifier); - gameObject.customProperties[propName] = value; - } - - getCustomPropertyInternal(gameObjectIdentifier : GameObjectIdentifier, propName : string) : any { - const gameObject = this.getStudentGameObject(gameObjectIdentifier); - return gameObject.customProperties[propName]; - } - - getTargetFrameRate() { - return this.targetFrameRate; - } -} - -export function initializeModule(dimensionMode : string) { - let instance = getInstance(); - if (instance !== undefined) { - if (!instance.isUnityInstanceReady()) { - throw new Error('Unity instance is not ready to accept a new Source program now. Please try again later.'); - } - if (instance.unityInstance === null) { - instance.reloadUnityAcademyInstanceAfterTermination(); - } - instance.dimensionMode = dimensionMode; - instance.reset(); - return; - } - - instance = new UnityAcademyJsInteropContext(); - instance.dimensionMode = dimensionMode; -} +/** + * Source Academy's Unity Academy module + * This module needs to use together with Unity Academy, an external project outside Source Academy organization that is also made by myself + * @module unity_academy + * @author Wang Zihan + */ + +import { UNITY_ACADEMY_BACKEND_URL, BUILD_NAME } from './config'; +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Button } from '@blueprintjs/core'; +import { IconNames } from '@blueprintjs/icons'; +import { Vector3, normalizeVector, zeroVector, pointDistance } from './UnityAcademyMaths'; + +type Transform = { + position : Vector3; + rotation : Vector3; + scale : Vector3; +}; + +type StudentGameObject = { + startMethod : Function | null; + updateMethod : Function | null; + onCollisionEnterMethod : Function | null; + onCollisionStayMethod : Function | null; + onCollisionExitMethod : Function | null; + transform : Transform; + rigidbody : RigidbodyData | null; + customProperties : any; + isDestroyed : boolean; // [set by interop] +}; + +type InputData = { + keyboardInputInfo : { [key : string] : number }; +}; + +type RigidbodyData = { + velocity : Vector3; + angularVelocity : Vector3; + mass : number; + useGravity : boolean; + drag : number; + angularDrag : number; +}; + +declare const createUnityInstance : Function; // This function comes from {BUILD_NAME}.loader.js in Unity Academy Application (For Example: ua-frontend-prod.loader.js) + +export function getInstance() : UnityAcademyJsInteropContext { + return (window as any).unityAcademyContext as UnityAcademyJsInteropContext; +} + +export class GameObjectIdentifier { // A wrapper class to store identifier string and prevent users from using arbitrary string for idenfitier + gameObjectIdentifier : string; + constructor(gameObjectIdentifier : string) { + this.gameObjectIdentifier = gameObjectIdentifier; + } +} + +// Information of the special React component for this module: +// I can not simply put Unity component into the module's tab, and here are the reasons: +// This is because Unity Academy instance runs in the background once it's loaded until user refreshes or closes the web page. +// Also, unlike loading most other SA modules, loading Unity Academy app and prefab asset bundles requires more network traffic. +// Since it may take some time to load if the network situation is not good, I can't make it just simply reload the Unity instance everytime students rerun their program. +// But when put in tab, every time the tab component is recreated, the current Unity Academy WASM app instance will lost its canvas to draw and causing errors. +// So I need the Unity app instance, Unity canvas and its container, this Unity React component, to always exist in the current HTML content until user refreshes or closes the web page. +// Also, the display space in the Tab area is relatively small for holding a game window. +// Another reason of using separated React component is to let Unity Academy be able to fill the whole page to give students higher resolution graphics and more fancy visual effects. +class UnityComponent extends React.Component { + render() { + const moduleInstance = getInstance(); + return ( + //
+
+
+

Preparing to load Unity Academy...

+
+
+ +
+
+ ); + } + + componentDidMount() { + getInstance() + .firstTimeLoadUnityApplication(); + } +} + + + +const UNITY_CONFIG = { + loaderUrl: `${UNITY_ACADEMY_BACKEND_URL}frontend/${BUILD_NAME}.loader.js`, + dataUrl: `${UNITY_ACADEMY_BACKEND_URL}frontend/${BUILD_NAME}.data.gz`, + frameworkUrl: `${UNITY_ACADEMY_BACKEND_URL}frontend/${BUILD_NAME}.framework.js.gz`, + codeUrl: `${UNITY_ACADEMY_BACKEND_URL}frontend/${BUILD_NAME}.wasm.gz`, + streamingAssetsUrl: `${UNITY_ACADEMY_BACKEND_URL}webgl_assetbundles`, + companyName: 'Wang Zihan @ NUS SoC 2026', + productName: 'Unity Academy (Source Academy Embedding Version)', + productVersion: 'prod-2023.4', +}; + + +class UnityAcademyJsInteropContext { + // private unityConfig : any; + public unityInstance : any; + private unityContainerElement : HTMLElement | null; + private studentGameObjectStorage : { [gameObjectIdentifier : string] : StudentGameObject }; // [get by interop] + private prefabInfo: any; + private gameObjectIdentifierSerialCounter = 0; + private studentActionQueue : any; // [get / clear by interop] + private deltaTime = 0; // [set by interop] + private input : InputData; // [set by interop] 0 = key idle, 1 = on key down, 2 = holding key, 3 = on key up + public gameObjectIdentifierWrapperClass : any; // [get by interop] For interop to create the class instance with the correct type when calling users' Start and Update functions. Only the object with this class type can pass checkGameObjectIdentifierParameter in functions.ts + private targetFrameRate : number; + private unityInstanceState; // [set by interop] + private guiData : any[]; // [get / clear by interop] + public dimensionMode; + private isShowingUnityAcademy : boolean; // [get by interop] + private latestUserAgreementVersion : string; + + constructor() { + this.unityInstance = null; + this.unityContainerElement = document.getElementById('unity_container'); + if (this.unityContainerElement === undefined || this.unityContainerElement === null) { + this.unityContainerElement = document.createElement('div'); + this.unityContainerElement.id = 'unity_container'; + } + + this.loadPrefabInfo(); + this.studentActionQueue = []; + this.studentGameObjectStorage = {}; + this.guiData = []; + this.input = { + keyboardInputInfo: {}, + }; + this.targetFrameRate = 30; + + this.latestUserAgreementVersion = 'unknown'; + this.getLatestUserAgreementVersion(); + + // [ Why I don't put this into my module's own context? ] + // Since Unity Academy application needs to access this from the WASM side, and the Unity Academy WASM side can not access the module context under the js-slang evaluation scope since Unity Academy app is running totally separated from js-slang in the WASM virtual machine. + // It means Unity Academy WASM app has no access to 'context.moduleContexts.unity3d.state' or anything in js-slang scope. + // So I put the context under the global window variable and this would be the easiest and most efficient way for Unity Academy WASM app to access it. + (window as any).unityAcademyContext = this; + + // Load Unity Academy App + document.body.appendChild(this.unityContainerElement); + ReactDOM.render(, this.unityContainerElement); + this.setShowUnityComponent(0); + this.isShowingUnityAcademy = false; + + this.gameObjectIdentifierWrapperClass = GameObjectIdentifier; + + // Create javascript side data storage for primitive GameObjects + this.makeGameObjectDataStorage('MainCameraFollowingTarget'); + } + + private loadPrefabInfo() { + const jsonUrl = `${UNITY_ACADEMY_BACKEND_URL}webgl_assetbundles/prefab_info.json`; + const xhr = new XMLHttpRequest(); + // Here I use sync request because this json file is very small in size and more importantly, this file must be loaded before continue evaluating students' code + // because it's used for check the availability of prefab name when students call 'instantiate' in their code. + xhr.open('GET', jsonUrl, false); + xhr.send(); + if (xhr.status !== 200) { + throw new Error(`Unable to get prefab list. Error code = ${xhr.status}`); + } + this.prefabInfo = JSON.parse(xhr.responseText); + } + + private createUnityAcademyInstance() { + this.unityInstanceState = 'LoadingInstance'; + const canvas = document.querySelector('#unity-canvas'); + const unity_load_info = document.querySelector('#unity_load_info'); + createUnityInstance(canvas, UNITY_CONFIG, (progress) => { + unity_load_info!.innerHTML = `Loading Unity Academy ( ${Math.floor(progress * 100)}% )`; + }) + .then((unityInstance) => { + this.unityInstance = unityInstance; + unity_load_info!.innerHTML = ''; + }) + .catch((message) => { + alert(message); + }); + } + + firstTimeLoadUnityApplication() { + const script = document.createElement('script'); + script.src = UNITY_CONFIG.loaderUrl; + script.onload = () => { + this.createUnityAcademyInstance(); + }; + document.body.appendChild(script); + } + + reloadUnityAcademyInstanceAfterTermination() { + this.createUnityAcademyInstance(); + } + + + setShowUnityComponent(resolution: number) { + const toShow = resolution > 0; + this.isShowingUnityAcademy = toShow; + const sendMessageFunctionName = 'SendMessage'; + if (toShow) { + (this.unityContainerElement as any).style.visibility = 'visible'; + if (this.unityInstance !== null) { + this.unityInstance[sendMessageFunctionName]('GameManager', 'WakeUpApplication'); + } + } else { + (this.unityContainerElement as any).style.visibility = 'hidden'; + // Make Unity Academy Application sleep to conserve resources (pause rendering, etc) + if (this.unityInstance !== null) { + this.unityInstance[sendMessageFunctionName]('GameManager', 'DoApplicationSleep'); + } + } + const unityCanvas = document.getElementById('unity-canvas') as any; + if (unityCanvas !== null) { + unityCanvas.style.width = `${resolution.toString()}%`; + unityCanvas.style.height = `${resolution.toString()}%`; + unityCanvas.style.left = `${((100 - resolution) / 2).toString()}%`; + unityCanvas.style.top = `${((100 - resolution) / 2).toString()}%`; + } + } + + terminate() { + if (this.unityInstance === null) return; + if (!confirm('Do you really hope to terminate the current Unity Academy instance? If so, everything need to reload when you use Unity Academy again.')) { + return; + } + const quitFunctionName = 'Quit'; + this.unityInstance[quitFunctionName](); + this.unityInstance = null; + this.resetModuleData(); + this.setShowUnityComponent(0); + const canvasContext = (document.querySelector('#unity-canvas') as HTMLCanvasElement)!.getContext('webgl2'); + canvasContext!.clearColor(0, 0, 0, 0); + canvasContext!.clear(canvasContext!.COLOR_BUFFER_BIT); + document.querySelector('#unity_load_info')!.innerHTML = 'Unity Academy app has been terminated. Please rerun your program with init_unity_academy_3d or init_unity_academy_2d for re-initialization.'; + } + + reset() { + this.resetModuleData(); + if (this.unityInstance !== null) { + const sendMessageFunctionName = 'SendMessage'; + // Reset Unity Academy app + this.unityInstance[sendMessageFunctionName]('GameManager', 'ResetSession'); + } + } + + private resetModuleData() { + this.studentActionQueue = []; + this.studentGameObjectStorage = {}; + this.gameObjectIdentifierSerialCounter = 0; + this.input.keyboardInputInfo = {}; + this.guiData = []; + // Make primitive game objects + this.makeGameObjectDataStorage('MainCameraFollowingTarget'); + } + + isUnityInstanceReady() { + return this.unityInstanceState === 'Ready'; + } + + private getLatestUserAgreementVersion() : void { + const jsonUrl = `${UNITY_ACADEMY_BACKEND_URL}user_agreement.json`; + const xhr = new XMLHttpRequest(); + xhr.onreadystatechange = () => { + if (xhr.readyState === 4 && xhr.status === 200) { + this.latestUserAgreementVersion = JSON.parse(xhr.responseText).version; + } + }; + xhr.open('GET', jsonUrl, true); + xhr.send(); + } + + getUserAgreementStatus() : string { + const agreedUserAgreementVersion = localStorage.getItem('unity_academy_agreed_user_agreement_version'); + if (agreedUserAgreementVersion === null || agreedUserAgreementVersion === 'unagreed' || agreedUserAgreementVersion === 'unknown') { + return 'unagreed'; + } + if (this.latestUserAgreementVersion === 'unknown') { + return 'unagreed'; + } + if (agreedUserAgreementVersion !== this.latestUserAgreementVersion) { + return 'new_user_agreement'; + } + return 'agreed'; + } + + setUserAgreementStatus(agree : boolean) : void { + if (agree) { + localStorage.setItem('unity_academy_agreed_user_agreement_version', this.latestUserAgreementVersion); + } else { + localStorage.setItem('unity_academy_agreed_user_agreement_version', 'unagreed'); + } + } + + instantiateInternal(prefabName : string) : GameObjectIdentifier { + let prefabExists = false; + const len = this.prefabInfo.prefab_info.length; + for (let i = 0; i < len; i++) { + if (this.prefabInfo.prefab_info[i].name === prefabName) { + prefabExists = true; + break; + } + } + if (!prefabExists) { + throw new Error(`Unknown prefab name: '${prefabName}'. Please refer to this prefab list at [ ${UNITY_ACADEMY_BACKEND_URL}webgl_assetbundles/prefab_info.html ] for all available prefab names.`); + } + const gameObjectIdentifier = `${prefabName}_${this.gameObjectIdentifierSerialCounter}`; + this.gameObjectIdentifierSerialCounter++; + this.makeGameObjectDataStorage(gameObjectIdentifier); + this.dispatchStudentAction(`instantiate|${prefabName}|${gameObjectIdentifier}`); + return new GameObjectIdentifier(gameObjectIdentifier); + } + + instantiate2DSpriteUrlInternal(sourceImageUrl : string) : GameObjectIdentifier { + const gameObjectIdentifier = `2DSprite_${this.gameObjectIdentifierSerialCounter}`; + this.gameObjectIdentifierSerialCounter++; + this.makeGameObjectDataStorage(gameObjectIdentifier); + this.dispatchStudentAction(`instantiate2DSpriteUrl|${sourceImageUrl}|${gameObjectIdentifier}`); + return new GameObjectIdentifier(gameObjectIdentifier); + } + + instantiateEmptyGameObjectInternal() : GameObjectIdentifier { + const gameObjectIdentifier = `EmptyGameObject_${this.gameObjectIdentifierSerialCounter}`; + this.gameObjectIdentifierSerialCounter++; + this.makeGameObjectDataStorage(gameObjectIdentifier); + this.dispatchStudentAction(`instantiateEmptyGameObject|${gameObjectIdentifier}`); + return new GameObjectIdentifier(gameObjectIdentifier); + } + + destroyGameObjectInternal(gameObjectIdentifier : GameObjectIdentifier) : void { + this.dispatchStudentAction(`destroyGameObject|${gameObjectIdentifier.gameObjectIdentifier}`); + } + + private makeGameObjectDataStorage(gameObjectIdentifier : string) { + this.studentGameObjectStorage[gameObjectIdentifier] = { + startMethod: null, + updateMethod: null, + onCollisionEnterMethod: null, + onCollisionStayMethod: null, + onCollisionExitMethod: null, + transform: { + position: zeroVector(), + rotation: zeroVector(), + scale: new Vector3(1, 1, 1), + }, + rigidbody: null, + customProperties: {}, + isDestroyed: false, + }; + } + + getStudentGameObject(gameObjectIdentifier : GameObjectIdentifier) : StudentGameObject { + const retVal = this.studentGameObjectStorage[gameObjectIdentifier.gameObjectIdentifier]; + if (retVal === undefined) { + throw new Error(`Could not find GameObject with identifier ${gameObjectIdentifier}`); + } + return retVal; + } + + setStartInternal(gameObjectIdentifier : GameObjectIdentifier, startFunction : Function) : void { + const gameObject = this.getStudentGameObject(gameObjectIdentifier); + gameObject.startMethod = startFunction; + } + + setUpdateInternal(gameObjectIdentifier : GameObjectIdentifier, updateFunction : Function) : void { + const gameObject = this.getStudentGameObject(gameObjectIdentifier); + gameObject.updateMethod = updateFunction; + } + + private dispatchStudentAction(action) : void { + this.studentActionQueue[this.studentActionQueue.length] = action; + } + + getGameObjectIdentifierForPrimitiveGameObject(name : string) : GameObjectIdentifier { + const propName = 'gameObjectIdentifierWrapperClass'; + return new this[propName](name); + } + + getGameObjectTransformProp(propName : string, gameObjectIdentifier : GameObjectIdentifier) : Array { + const gameObject = this.getStudentGameObject(gameObjectIdentifier); + return [gameObject.transform[propName].x, gameObject.transform[propName].y, gameObject.transform[propName].z]; + } + + setGameObjectTransformProp(propName : string, gameObjectIdentifier : GameObjectIdentifier, x : number, y : number, z : number) : void { + const gameObject = this.getStudentGameObject(gameObjectIdentifier); + gameObject.transform[propName].x = x; + gameObject.transform[propName].y = y; + gameObject.transform[propName].z = z; + } + + getDeltaTime() : number { + return this.deltaTime; + } + + translateWorldInternal(gameObjectIdentifier : GameObjectIdentifier, x : number, y : number, z : number) : void { + const gameObject = this.getStudentGameObject(gameObjectIdentifier); + gameObject.transform.position.x += x; + gameObject.transform.position.y += y; + gameObject.transform.position.z += z; + } + + + translateLocalInternal(gameObjectIdentifier : GameObjectIdentifier, x : number, y : number, z : number) : void { + const gameObject = this.getStudentGameObject(gameObjectIdentifier); + const rotation = gameObject.transform.rotation; + + // Some methematical stuff here for calcuating the actual world position displacement from local translate vector and current Euler rotation. + const rx = rotation.x * Math.PI / 180; + const ry = rotation.y * Math.PI / 180; + const rz = rotation.z * Math.PI / 180; + const cos = Math.cos; + const sin = Math.sin; + const rotationMatrix + = [[cos(ry) * cos(rz), -cos(ry) * sin(rz), sin(ry)], + [cos(rx) * sin(rz) + sin(rx) * sin(ry) * cos(rz), cos(rx) * cos(rz) - sin(rx) * sin(ry) * sin(rz), -sin(rx) * cos(ry)], + [sin(rx) * sin(rz) - cos(rx) * sin(ry) * cos(rz), cos(rx) * sin(ry) * sin(rz) + sin(rx) * cos(rz), cos(rx) * cos(ry)]]; + const finalWorldTranslateVector = [ + rotationMatrix[0][0] * x + rotationMatrix[0][1] * y + rotationMatrix[0][2] * z, + rotationMatrix[1][0] * x + rotationMatrix[1][1] * y + rotationMatrix[1][2] * z, + rotationMatrix[2][0] * x + rotationMatrix[2][1] * y + rotationMatrix[2][2] * z, + ]; + gameObject.transform.position.x += finalWorldTranslateVector[0]; + gameObject.transform.position.y += finalWorldTranslateVector[1]; + gameObject.transform.position.z += finalWorldTranslateVector[2]; + } + + lookAtPositionInternal(gameObjectIdentifier : GameObjectIdentifier, x : number, y : number, z : number) : void { + const gameObject = this.getStudentGameObject(gameObjectIdentifier); + const deltaVector = normalizeVector(new Vector3(x - gameObject.transform.position.x, y - gameObject.transform.position.y, z - gameObject.transform.position.z)); + const eulerX = Math.asin(-deltaVector.y); + const eulerY = Math.atan2(deltaVector.x, deltaVector.z); + gameObject.transform.rotation.x = eulerX * 180 / Math.PI; + gameObject.transform.rotation.y = eulerY * 180 / Math.PI; + gameObject.transform.rotation.z = 0; + } + + gameObjectDistanceInternal(gameObjectIdentifier_A : GameObjectIdentifier, gameObjectIdentifier_B : GameObjectIdentifier) : number { + const gameObjectA = this.getStudentGameObject(gameObjectIdentifier_A); + const gameObjectB = this.getStudentGameObject(gameObjectIdentifier_B); + return pointDistance(gameObjectA.transform.position, gameObjectB.transform.position); + } + + rotateWorldInternal(gameObjectIdentifier : GameObjectIdentifier, x : number, y : number, z : number) : void { + const gameObject = this.getStudentGameObject(gameObjectIdentifier); + gameObject.transform.rotation.x += x; + gameObject.transform.rotation.y += y; + gameObject.transform.rotation.z += z; + } + + copyTransformPropertiesInternal(propName : string, from : GameObjectIdentifier, to : GameObjectIdentifier, delta_x : number, delta_y : number, delta_z : number) : void { + const fromGameObject = this.getStudentGameObject(from); + const toGameObject = this.getStudentGameObject(to); + if (Math.abs(delta_x) !== Infinity) toGameObject.transform[propName].x = fromGameObject.transform[propName].x + delta_x; + if (Math.abs(delta_y) !== Infinity) toGameObject.transform[propName].y = fromGameObject.transform[propName].y + delta_y; + if (Math.abs(delta_z) !== Infinity) toGameObject.transform[propName].z = fromGameObject.transform[propName].z + delta_z; + } + + getKeyState(keyCode : string) : number { + return this.input.keyboardInputInfo[keyCode]; + } + + playAnimatorStateInternal(gameObjectIdentifier : GameObjectIdentifier, animatorStateName : string) { + this.getStudentGameObject(gameObjectIdentifier); // Just to check whether the game object identifier is valid or not. + this.dispatchStudentAction(`playAnimatorState|${gameObjectIdentifier.gameObjectIdentifier}|${animatorStateName}`); + } + + applyRigidbodyInternal(gameObjectIdentifier : GameObjectIdentifier) { + console.log(`Applying rigidbody to GameObject ${gameObjectIdentifier.gameObjectIdentifier}`); + const gameObject = this.getStudentGameObject(gameObjectIdentifier); + if (gameObject.rigidbody !== null) { + throw new Error(`Trying to duplicately apply rigidbody on GameObject ${gameObjectIdentifier.gameObjectIdentifier}`); + } + gameObject.rigidbody = { + velocity: zeroVector(), + angularVelocity: zeroVector(), + mass: 1, + useGravity: true, + drag: 0, + angularDrag: 0.05, + }; + this.dispatchStudentAction(`applyRigidbody|${gameObjectIdentifier.gameObjectIdentifier}`); + } + + private getRigidbody(gameObject: StudentGameObject) : RigidbodyData { + if (gameObject.rigidbody === null) throw new Error('You must call apply_rigidbody on the game object before using this physics function!'); + return gameObject.rigidbody; + } + + getRigidbodyVelocityVector3Prop(propName : string, gameObjectIdentifier : GameObjectIdentifier) : Array { + const gameObject = this.getStudentGameObject(gameObjectIdentifier); + const rigidbody = this.getRigidbody(gameObject); + return [rigidbody[propName].x, rigidbody[propName].y, rigidbody[propName].z]; + } + + setRigidbodyVelocityVector3Prop(propName : string, gameObjectIdentifier : GameObjectIdentifier, x : number, y : number, z : number) : void { + const gameObject = this.getStudentGameObject(gameObjectIdentifier); + const rigidbody = this.getRigidbody(gameObject); + rigidbody[propName].x = x; + rigidbody[propName].y = y; + rigidbody[propName].z = z; + } + + getRigidbodyNumericalProp(propName : string, gameObjectIdentifier : GameObjectIdentifier) : number { + const gameObject = this.getStudentGameObject(gameObjectIdentifier); + const rigidbody = this.getRigidbody(gameObject); + return rigidbody[propName]; + } + + setRigidbodyNumericalProp(propName : string, gameObjectIdentifier : GameObjectIdentifier, value : number) : void { + const gameObject = this.getStudentGameObject(gameObjectIdentifier); + const rigidbody = this.getRigidbody(gameObject); + rigidbody[propName] = value; + } + + setUseGravityInternal(gameObjectIdentifier : GameObjectIdentifier, useGravity : boolean) : void { + const gameObject = this.getStudentGameObject(gameObjectIdentifier); + const rigidbody = this.getRigidbody(gameObject); + rigidbody.useGravity = useGravity; + } + + addImpulseForceInternal(gameObjectIdentifier : GameObjectIdentifier, x : number, y : number, z : number) : void { + this.dispatchStudentAction(`addImpulseForce|${gameObjectIdentifier.gameObjectIdentifier}|${x.toString()}|${y.toString()}|${z.toString()}`); + } + + removeColliderComponentsInternal(gameObjectIdentifier : GameObjectIdentifier) : void { + this.dispatchStudentAction(`removeColliderComponents|${gameObjectIdentifier.gameObjectIdentifier}`); + } + + setOnCollisionEnterInternal(gameObjectIdentifier : GameObjectIdentifier, eventFunction : Function) { + const gameObject = this.getStudentGameObject(gameObjectIdentifier); + gameObject.onCollisionEnterMethod = eventFunction; + } + + setOnCollisionStayInternal(gameObjectIdentifier : GameObjectIdentifier, eventFunction : Function) { + const gameObject = this.getStudentGameObject(gameObjectIdentifier); + gameObject.onCollisionStayMethod = eventFunction; + } + + setOnCollisionExitInternal(gameObjectIdentifier : GameObjectIdentifier, eventFunction : Function) { + const gameObject = this.getStudentGameObject(gameObjectIdentifier); + gameObject.onCollisionExitMethod = eventFunction; + } + + requestForMainCameraControlInternal() : GameObjectIdentifier { + const name = 'MainCamera'; + if (this.studentGameObjectStorage[name] !== undefined) { + return this.getGameObjectIdentifierForPrimitiveGameObject('MainCamera'); + } + this.makeGameObjectDataStorage(name); + this.dispatchStudentAction('requestMainCameraControl'); + return this.getGameObjectIdentifierForPrimitiveGameObject('MainCamera'); + } + + onGUI_Label(content : string, x : number, y : number, fontSize : number) : void { + content = content.replaceAll('|', ''); // operator '|' is reserved as gui data separator in Unity Academy + const newLabel = { + type: 'label', + content, + x, + y, + fontSize, + }; + this.guiData.push(newLabel); + } + + onGUI_Button(text : string, x: number, y : number, fontSize : number, onClick : Function) : void { + text = text.replaceAll('|', ''); // operator '|' is reserved as gui data separator in Unity Academy + const newButton = { + type: 'button', + text, + x, + y, + fontSize, + onClick, + }; + this.guiData.push(newButton); + } + + setTargetFrameRate(newTargetFrameRate : number) : void { + newTargetFrameRate = Math.floor(newTargetFrameRate); + if (newTargetFrameRate < 15) return; + if (newTargetFrameRate > 120) return; + this.targetFrameRate = newTargetFrameRate; + } + + setCustomPropertyInternal(gameObjectIdentifier : GameObjectIdentifier, propName : string, value : any) : void { + const gameObject = this.getStudentGameObject(gameObjectIdentifier); + gameObject.customProperties[propName] = value; + } + + getCustomPropertyInternal(gameObjectIdentifier : GameObjectIdentifier, propName : string) : any { + const gameObject = this.getStudentGameObject(gameObjectIdentifier); + return gameObject.customProperties[propName]; + } + + getTargetFrameRate() { + return this.targetFrameRate; + } +} + +export function initializeModule(dimensionMode : string) { + let instance = getInstance(); + if (instance !== undefined) { + if (!instance.isUnityInstanceReady()) { + throw new Error('Unity instance is not ready to accept a new Source program now. Please try again later.'); + } + if (instance.unityInstance === null) { + instance.reloadUnityAcademyInstanceAfterTermination(); + } + instance.dimensionMode = dimensionMode; + instance.reset(); + return; + } + + instance = new UnityAcademyJsInteropContext(); + instance.dimensionMode = dimensionMode; +} diff --git a/src/bundles/unity_academy/UnityAcademyMaths.ts b/src/bundles/unity_academy/UnityAcademyMaths.ts index ba57f74a9..ba6b41160 100644 --- a/src/bundles/unity_academy/UnityAcademyMaths.ts +++ b/src/bundles/unity_academy/UnityAcademyMaths.ts @@ -1,67 +1,67 @@ -/** - * Maths functions for Source Academy's Unity Academy module - * @module unity_academy - * @author Wang Zihan - */ - -export class Vector3 { - x = 0; - y = 0; - z = 0; - constructor(x, y, z) { - this.x = x; - this.y = y; - this.z = z; - } - - toString() { - return `(${this.x}, ${this.y}, ${this.z})`; - } -} - -export function checkVector3Parameter(parameter : any) : void { - if (typeof (parameter) !== 'object') { - throw new Error(`The given parameter is not a valid 3D vector! Wrong parameter type: ${typeof (parameter)}`); - } - if (typeof (parameter.x) !== 'number' || typeof (parameter.y) !== 'number' || typeof (parameter.z) !== 'number') { - throw new Error('The given parameter is not a valid 3D vector!'); - } -} - -export function makeVector3D(x : number, y : number, z : number) : Vector3 { - return new Vector3(x, y, z); -} - -export function scaleVector(vector : Vector3, factor : number) : Vector3 { - return new Vector3(vector.x * factor, vector.y * factor, vector.z * factor); -} - -export function addVector(vectorA : Vector3, vectorB : Vector3) : Vector3 { - return new Vector3(vectorA.x + vectorB.x, vectorA.y + vectorB.y, vectorA.z + vectorB.z); -} - -export function dotProduct(vectorA : Vector3, vectorB : Vector3) : number { - return vectorA.x * vectorB.x + vectorA.y * vectorB.y + vectorA.z * vectorB.z; -} - -export function crossProduct(vectorA : Vector3, vectorB : Vector3) : Vector3 { - return new Vector3(vectorA.y * vectorB.z - vectorB.y * vectorA.z, vectorB.x * vectorA.z - vectorA.x * vectorB.z, vectorA.x * vectorB.y - vectorB.x * vectorA.y); -} - -export function vectorMagnitude(vector : Vector3) : number { - return Math.sqrt(vector.x * vector.x + vector.y * vector.y + vector.z * vector.z); -} - -export function normalizeVector(vector : Vector3) : Vector3 { - const magnitude = vectorMagnitude(vector); - if (magnitude === 0) return new Vector3(0, 0, 0); // If the parameter is a zero vector, then return a new zero vector. - return new Vector3(vector.x / magnitude, vector.y / magnitude, vector.z / magnitude); -} - -export function zeroVector() : Vector3 { - return new Vector3(0, 0, 0); -} - -export function pointDistance(pointA : Vector3, pointB : Vector3) : number { - return Math.sqrt((pointB.x - pointA.x) ** 2 + (pointB.y - pointA.y) ** 2 + (pointB.z - pointA.z) ** 2); -} +/** + * Maths functions for Source Academy's Unity Academy module + * @module unity_academy + * @author Wang Zihan + */ + +export class Vector3 { + x = 0; + y = 0; + z = 0; + constructor(x, y, z) { + this.x = x; + this.y = y; + this.z = z; + } + + toString() { + return `(${this.x}, ${this.y}, ${this.z})`; + } +} + +export function checkVector3Parameter(parameter : any) : void { + if (typeof (parameter) !== 'object') { + throw new Error(`The given parameter is not a valid 3D vector! Wrong parameter type: ${typeof (parameter)}`); + } + if (typeof (parameter.x) !== 'number' || typeof (parameter.y) !== 'number' || typeof (parameter.z) !== 'number') { + throw new Error('The given parameter is not a valid 3D vector!'); + } +} + +export function makeVector3D(x : number, y : number, z : number) : Vector3 { + return new Vector3(x, y, z); +} + +export function scaleVector(vector : Vector3, factor : number) : Vector3 { + return new Vector3(vector.x * factor, vector.y * factor, vector.z * factor); +} + +export function addVector(vectorA : Vector3, vectorB : Vector3) : Vector3 { + return new Vector3(vectorA.x + vectorB.x, vectorA.y + vectorB.y, vectorA.z + vectorB.z); +} + +export function dotProduct(vectorA : Vector3, vectorB : Vector3) : number { + return vectorA.x * vectorB.x + vectorA.y * vectorB.y + vectorA.z * vectorB.z; +} + +export function crossProduct(vectorA : Vector3, vectorB : Vector3) : Vector3 { + return new Vector3(vectorA.y * vectorB.z - vectorB.y * vectorA.z, vectorB.x * vectorA.z - vectorA.x * vectorB.z, vectorA.x * vectorB.y - vectorB.x * vectorA.y); +} + +export function vectorMagnitude(vector : Vector3) : number { + return Math.sqrt(vector.x * vector.x + vector.y * vector.y + vector.z * vector.z); +} + +export function normalizeVector(vector : Vector3) : Vector3 { + const magnitude = vectorMagnitude(vector); + if (magnitude === 0) return new Vector3(0, 0, 0); // If the parameter is a zero vector, then return a new zero vector. + return new Vector3(vector.x / magnitude, vector.y / magnitude, vector.z / magnitude); +} + +export function zeroVector() : Vector3 { + return new Vector3(0, 0, 0); +} + +export function pointDistance(pointA : Vector3, pointB : Vector3) : number { + return Math.sqrt((pointB.x - pointA.x) ** 2 + (pointB.y - pointA.y) ** 2 + (pointB.z - pointA.z) ** 2); +} diff --git a/src/bundles/unity_academy/config.ts b/src/bundles/unity_academy/config.ts index 94d76e885..12e4a2a2b 100644 --- a/src/bundles/unity_academy/config.ts +++ b/src/bundles/unity_academy/config.ts @@ -1,2 +1,2 @@ -export const UNITY_ACADEMY_BACKEND_URL = 'https://unity-academy.s3.ap-southeast-1.amazonaws.com/'; -export const BUILD_NAME = 'ua-frontend-prod'; +export const UNITY_ACADEMY_BACKEND_URL = 'https://unity-academy.s3.ap-southeast-1.amazonaws.com/'; +export const BUILD_NAME = 'ua-frontend-prod'; diff --git a/src/bundles/unity_academy/functions.ts b/src/bundles/unity_academy/functions.ts index 14d8f236b..7041a3e08 100644 --- a/src/bundles/unity_academy/functions.ts +++ b/src/bundles/unity_academy/functions.ts @@ -1,1185 +1,1185 @@ -/** - * Functions for Source Academy's Unity Academy module - * @module unity_academy - * @author Wang Zihan - */ - - -import { initializeModule, getInstance, type GameObjectIdentifier } from './UnityAcademy'; -import { - type Vector3, checkVector3Parameter, makeVector3D, scaleVector, addVector, dotProduct, crossProduct, - normalizeVector, vectorMagnitude, zeroVector, pointDistance, -} from './UnityAcademyMaths'; - - -/** - * Load and initialize Unity Academy WebGL player and set it to 2D mode. All other functions (except Maths functions) in this module requires calling this function or init_unity_academy_3d first.
- * I recommand you just call this function at the beginning of your Source Unity program under the 'import' statements. - * - * @category Application Initialization - * @category Outside Lifecycle - */ -export function init_unity_academy_2d() : void { - initializeModule('2d'); -} - -/** - * Load and initialize Unity Academy WebGL player and set it to 3D mode. All other functions (except Maths functions) in this module requires calling this function or init_unity_academy_2d first.
- * I recommand you just call this function at the beginning of your Source Unity program under the 'import' statements. - * - * @category Application Initialization - * @category Outside Lifecycle - */ -export function init_unity_academy_3d() : void { - initializeModule('3d'); -} - -function checkUnityAcademyExistence() { - if (getInstance() === undefined) { - throw new Error('Unity module is not initialized, please call init_unity_academy_3d / init_unity_academy_2d first before calling this function'); - } -} - -function checkIs2DMode() : void { - if (getInstance().dimensionMode !== '2d') throw new Error('You are calling a "2D mode only" function in non-2d mode.'); -} - -function checkIs3DMode() : void { - if (getInstance().dimensionMode !== '3d') throw new Error('You are calling a "3D mode only" function in non-3d mode.'); -} - -function checkGameObjectIdentifierParameter(gameObjectIdentifier : any) { - // Here I can not just do "gameObjectIdentifier instanceof GameObjectIdentifier". - // Because if I do that, when students re-run their code on the same Unity instance, (gameObjectIdentifier instanceof GameObjectIdentifier) will always evaluate to false - // even when students provide the parameter with the correct type. - const instance = getInstance(); - if (!(gameObjectIdentifier instanceof instance.gameObjectIdentifierWrapperClass)) { - throw new Error(`Type "${(typeof (gameObjectIdentifier)).toString()}" can not be used as game object identifier!`); - } - if (instance.getStudentGameObject(gameObjectIdentifier).isDestroyed) { - throw new Error('Trying to use a GameObject that is already destroyed.'); - } -} - -function checkParameterType(parameter : any, expectedType : string, numberAllowInfinity = false) { - const actualType = typeof (parameter); - if (actualType !== expectedType) { - throw new Error(`Wrong parameter type: expected ${expectedType}, but got ${actualType}`); - } - if (actualType.toString() === 'number') { - if (!numberAllowInfinity && (parameter === Infinity || parameter === -Infinity)) { - throw new Error('Wrong parameter type: expected a finite number, but got Infinity or -Infinity'); - } - } -} - -/** - * Determines whether two GameObject identifiers refers to the same GameObject. - * - * @param first The first GameObject identifier to compare with. - * @param second The second GameObject identifier to compare with. - * @return Returns true if the two GameObject identifiers refers to the same GameObject and false otherwise. - * @category Common - */ -export function same_gameobject(first : GameObjectIdentifier, second : GameObjectIdentifier) : boolean { - checkUnityAcademyExistence(); - const instance = getInstance(); - if (!(first instanceof instance.gameObjectIdentifierWrapperClass) || !(second instanceof instance.gameObjectIdentifierWrapperClass)) { - return false; - } - return first.gameObjectIdentifier === second.gameObjectIdentifier; -} - -/** - * Sets the Start function of a given GameObject - * @param gameObjectIdentifier The identifier for the GameObject that you want to bind the Start function on. - * @param startFunction The Start function you want to assign to this GameObject. The Start function should contain one parameter, that Unity will pass the owner GameObject's identifier to this parameter. - * - * @category Common - * @category Outside Lifecycle - */ -export function set_start(gameObjectIdentifier : GameObjectIdentifier, startFunction : Function) : void { - checkUnityAcademyExistence(); - checkGameObjectIdentifierParameter(gameObjectIdentifier); - checkParameterType(startFunction, 'function'); - getInstance() - .setStartInternal(gameObjectIdentifier, startFunction); -} - -/** - * Sets the Update function of a given GameObject - * - * @param gameObjectIdentifier The identifier for the GameObject that you want to bind the Update function on. - * @param updateFunction The Update function you want to assign to this GameObject. The Update function should contain one parameter, that Unity will pass the owner GameObject's identifier to this parameter. - * - * @category Common - * @category Outside Lifecycle - */ -export function set_update(gameObjectIdentifier : GameObjectIdentifier, updateFunction : Function) : void { - checkUnityAcademyExistence(); - checkGameObjectIdentifierParameter(gameObjectIdentifier); - checkParameterType(updateFunction, 'function'); - getInstance() - .setUpdateInternal(gameObjectIdentifier, updateFunction); -} - - -/** - * Creates a new GameObject from an existing Prefab
- *
- * 3D mode only
- *
- * Available Prefab Information:
Click Here - * - * @param prefab_name The prefab name - * @return the identifier of the newly created GameObject - * - * @category Common - * @category Outside Lifecycle - */ -export function instantiate(prefab_name : string) : GameObjectIdentifier { - checkUnityAcademyExistence(); - checkIs3DMode(); - checkParameterType(prefab_name, 'string'); - return getInstance() - .instantiateInternal(prefab_name); -} - -/** - * Creates a new 2D Sprite GameObject from an online image.
- * The Sprite GameObject has a BoxCollider2D that matches its size by default. You may use `remove_collider_components` function to remove the default collider.

- * Note that Unity Academy will use a HTTP GET request to download the image, which means that the HTTP response from the URL must allows CORS.

- *
2D mode only - * - * @param sourceImageUrl The image url for the sprite. - * @return the identifier of the newly created GameObject - * - * @category Common - * @category Outside Lifecycle - */ -export function instantiate_sprite(sourceImageUrl : string) { - checkUnityAcademyExistence(); - checkIs2DMode(); - checkParameterType(sourceImageUrl, 'string'); - return getInstance() - .instantiate2DSpriteUrlInternal(sourceImageUrl); -} - -/** - * Creates a new empty GameObject.
- *
- * An empty GameObject is invisible and only have transform properties by default.
- * You may use the empty GameObject to run some general game management code or use the position of the empty GameObject to represent a point in the scene that the rest of your codes can access and utilize. - * - * @return the identifier of the newly created GameObject - * - * @category Common - * @category Outside Lifecycle - */ -export function instantiate_empty() : GameObjectIdentifier { - checkUnityAcademyExistence(); - checkIs3DMode(); - return getInstance() - .instantiateEmptyGameObjectInternal(); -} - -/** - * Returns the value of Time.deltaTime in Unity ( roughly saying it's about `1 / instant frame rate` )
- * This should be useful when implementing timers or constant speed control in Update function.
- * For example: - * ``` - * function update(gameObject){ - * const move_speed = 3; - * translate_world(gameObject, 0, 0, move_speed * delta_time()); - * } - * ``` - * By assigning the above code to a GameObject with `set_update`, that GameObject will move in a constant speed of 3 units along world +Z axis, ignoring the affect of unstable instant frame rate. - *
- *
- * For more information, see https://docs.unity3d.com/ScriptReference/Time-deltaTime.html - * @return the delta time value in decimal - * - * @category Common - */ -export function delta_time() { - checkUnityAcademyExistence(); - return getInstance() - .getDeltaTime(); -} - -/** - * Remove a GameObject
- * Note that this won't remove the GameObject immediately, the actual removal will happen at the end of the current main cycle loop.
- *
- * For more information, see https://docs.unity3d.com/ScriptReference/Object.Destroy.html - * - * @param gameObjectIdentifier The identifier for the GameObject that you want to destroy. - * @category Common - */ -export function destroy(gameObjectIdentifier : GameObjectIdentifier) : void { - checkUnityAcademyExistence(); - checkGameObjectIdentifierParameter(gameObjectIdentifier); - getInstance() - .destroyGameObjectInternal(gameObjectIdentifier); -} - - -/** - * Set the target frame rate of Unity Academy. The frame rate should be an integer between 1 and 30. The default value is 30. - * - * @category Basics - */ -/* export function set_target_fps(frameRate : number) { - checkUnityEngineStatus(); - return getInstance() - .setTargetFrameRate(frameRate); -}*/ - -/** - * Returns the world position of a given GameObject - * @param gameObjectIdentifier The identifier for the GameObject that you want to get position for. - * @return the position represented in an array with three elements: [x, y, z] - * - * @category Transform - */ -export function get_position(gameObjectIdentifier : GameObjectIdentifier) : Array { - checkUnityAcademyExistence(); - checkGameObjectIdentifierParameter(gameObjectIdentifier); - return getInstance() - .getGameObjectTransformProp('position', gameObjectIdentifier); -} - -/** - * Set the world position of a given GameObject - * @param gameObjectIdentifier The identifier for the GameObject that you want to change position for. - * @param x The x component for the position. - * @param y The y component for the position. - * @param z The z component for the position. - * - * @category Transform - */ -export function set_position(gameObjectIdentifier : GameObjectIdentifier, x : number, y : number, z : number) : void { - checkUnityAcademyExistence(); - checkGameObjectIdentifierParameter(gameObjectIdentifier); - checkParameterType(x, 'number'); - checkParameterType(y, 'number'); - checkParameterType(z, 'number'); - return getInstance() - .setGameObjectTransformProp('position', gameObjectIdentifier, x, y, z); -} - -/** - * Returns the world Euler angle rotation of a given GameObject - * @param gameObjectIdentifier The identifier for the GameObject that you want to get rotation for. - * @return the Euler angle rotation represented in an array with three elements: [x, y, z] - * - * @category Transform - */ -export function get_rotation_euler(gameObjectIdentifier : GameObjectIdentifier) : Array { - checkUnityAcademyExistence(); - checkGameObjectIdentifierParameter(gameObjectIdentifier); - return getInstance() - .getGameObjectTransformProp('rotation', gameObjectIdentifier); -} - -/** - * Set the world rotation of a given GameObject with given Euler angle rotation. - * @param gameObjectIdentifier The identifier for the GameObject that you want to change rotation for. - * @param x The x component (Euler angle) for the rotation. - * @param y The y component (Euler angle) for the rotation. - * @param z The z component (Euler angle) for the rotation. - * - * @category Transform - */ -export function set_rotation_euler(gameObjectIdentifier : GameObjectIdentifier, x : number, y : number, z : number) : void { - checkUnityAcademyExistence(); - checkGameObjectIdentifierParameter(gameObjectIdentifier); - checkParameterType(x, 'number'); - checkParameterType(y, 'number'); - checkParameterType(z, 'number'); - return getInstance() - .setGameObjectTransformProp('rotation', gameObjectIdentifier, x, y, z); -} - -/** - * Returns the scale (size factor) of a given GameObject - *
- * By default the scale of a GameObject is (1, 1, 1) - * @param gameObjectIdentifier The identifier for the GameObject that you want to get scale for. - * @return the scale represented in an array with three elements: [x, y, z] - * - * @category Transform - */ -export function get_scale(gameObjectIdentifier : GameObjectIdentifier) : Array { - checkUnityAcademyExistence(); - checkGameObjectIdentifierParameter(gameObjectIdentifier); - return getInstance() - .getGameObjectTransformProp('scale', gameObjectIdentifier); -} - -/** - * Set the scale (size) of a given GameObject - *
- * By default the scale of a GameObject is (1, 1, 1). Changing the scale of a GameObject along one axis will lead to a stretch or squeeze of the GameObject along that axis. - * - * @param gameObjectIdentifier The identifier for the GameObject that you want to change scale for. - * @param x The x component for the scale. - * @param y The y component for the scale. - * @param z The z component for the scale. - * - * @category Transform - */ -export function set_scale(gameObjectIdentifier : GameObjectIdentifier, x : number, y : number, z : number) : void { - checkUnityAcademyExistence(); - checkGameObjectIdentifierParameter(gameObjectIdentifier); - checkParameterType(x, 'number'); - checkParameterType(y, 'number'); - checkParameterType(z, 'number'); - return getInstance() - .setGameObjectTransformProp('scale', gameObjectIdentifier, x, y, z); -} - -/** - * Moves a GameObject with given x, y and z values - * - * @param gameObjectIdentifier The identifier for the GameObject that you want to translate. - * @param x The value you want to move along X-axis in the world space - * @param y The value you want to move along Y-axis in the world space - * @param z The value you want to move along Z-axis in the world space - * - * @category Transform - */ -export function translate_world(gameObjectIdentifier : GameObjectIdentifier, x: number, y : number, z : number) : void { - checkUnityAcademyExistence(); - checkGameObjectIdentifierParameter(gameObjectIdentifier); - checkParameterType(x, 'number'); - checkParameterType(y, 'number'); - checkParameterType(z, 'number'); - return getInstance() - .translateWorldInternal(gameObjectIdentifier, x, y, z); -} - -/** - * Moves a GameObject with given x, y and z values, with respect to its local space.
- * The current rotation of the GameObject will affect the real direction of movement.
- * In Unity, usually, the direction of +Z axis denotes forward. - * - * @param gameObjectIdentifier The identifier for the GameObject that you want to translate. - * @param x The value you want to move along X-axis in the local space - * @param y The value you want to move along Y-axis in the local space - * @param z The value you want to move along Z-axis in the local space - * - * @category Transform - */ -export function translate_local(gameObjectIdentifier : GameObjectIdentifier, x: number, y : number, z : number) : void { - checkUnityAcademyExistence(); - checkGameObjectIdentifierParameter(gameObjectIdentifier); - checkParameterType(x, 'number'); - checkParameterType(y, 'number'); - checkParameterType(z, 'number'); - return getInstance() - .translateLocalInternal(gameObjectIdentifier, x, y, z); -} - -/** - * Rotates a GameObject with given x, y and z values (Euler angle) - * - * @param gameObjectIdentifier The identifier for the GameObject that you want to rotate. - * @param x The value you want to rotate along X-axis in the world space - * @param y The value you want to rotate along Y-axis in the world space - * @param z The value you want to rotate along Z-axis in the world space - * - * @category Transform - */ -export function rotate_world(gameObjectIdentifier : GameObjectIdentifier, x: number, y : number, z : number) : void { - checkUnityAcademyExistence(); - checkGameObjectIdentifierParameter(gameObjectIdentifier); - checkParameterType(x, 'number'); - checkParameterType(y, 'number'); - checkParameterType(z, 'number'); - return getInstance() - .rotateWorldInternal(gameObjectIdentifier, x, y, z); -} - -/** - * Copy the position values from one GameObject to another GameObject along with delta values.

- * Set the delta parameters to `Infinity` or `-Infinity` to remain the position of the destination GameObject on the corresponding axis unaffected.
- * - * @param from The identifier for the GameObject that you want to copy position from. - * @param to The identifier for the GameObject that you want to copy position to. - * @param delta_x This value will be added to the copied value when coping the X-coordinate position value to the destination GameObject - * @param delta_y This value will be added to the copied value when coping the Y-coordinate position value to the destination GameObject - * @param delta_z This value will be added to the copied value when coping the Z-coordinate position value to the destination GameObject - * - * @category Transform - */ -export function copy_position(from : GameObjectIdentifier, to : GameObjectIdentifier, delta_x : number, delta_y : number, delta_z : number) : void { - checkUnityAcademyExistence(); - checkGameObjectIdentifierParameter(from); - checkGameObjectIdentifierParameter(to); - checkParameterType(delta_x, 'number', true); - checkParameterType(delta_y, 'number', true); - checkParameterType(delta_z, 'number', true); - return getInstance() - .copyTransformPropertiesInternal('position', from, to, delta_x, delta_y, delta_z); -} - -/** - * Copy the rotation values (Euler angles) from one GameObject to another GameObject along with delta values.

- * Set the delta parameters to `Infinity` or `-Infinity` to remain the rotation of the destination GameObject on the corresponding axis unaffected.
- * - * @param from The identifier for the GameObject that you want to copy rotation from. - * @param to The identifier for the GameObject that you want to copy rotation to. - * @param delta_x This value will be added to the copied value when coping the X-coordinate rotation value to the destination GameObject - * @param delta_y This value will be added to the copied value when coping the Y-coordinate rotation value to the destination GameObject - * @param delta_z This value will be added to the copied value when coping the Z-coordinate rotation value to the destination GameObject - * - * @category Transform - */ -export function copy_rotation(from : GameObjectIdentifier, to : GameObjectIdentifier, delta_x : number, delta_y : number, delta_z : number) : void { - checkUnityAcademyExistence(); - checkGameObjectIdentifierParameter(from); - checkGameObjectIdentifierParameter(to); - checkParameterType(delta_x, 'number', true); - checkParameterType(delta_y, 'number', true); - checkParameterType(delta_z, 'number', true); - return getInstance() - .copyTransformPropertiesInternal('rotation', from, to, delta_x, delta_y, delta_z); -} - -/** - * Copy the scale values from one GameObject to another GameObject along with delta values.

- * Set the delta parameters to `Infinity` or `-Infinity` to remain the scale of the destination GameObject on the corresponding axis unaffected.
- * - * @param from The identifier for the GameObject that you want to copy scale from. - * @param to The identifier for the GameObject that you want to copy scale to. - * @param delta_x This value will be added to the copied value when coping the X-coordinate scale value to the destination GameObject - * @param delta_y This value will be added to the copied value when coping the Y-coordinate scale value to the destination GameObject - * @param delta_z This value will be added to the copied value when coping the Z-coordinate scale value to the destination GameObject - * - * @category Transform - */ -export function copy_scale(from : GameObjectIdentifier, to : GameObjectIdentifier, delta_x : number, delta_y : number, delta_z : number) : void { - checkUnityAcademyExistence(); - checkGameObjectIdentifierParameter(from); - checkGameObjectIdentifierParameter(to); - checkParameterType(delta_x, 'number', true); - checkParameterType(delta_y, 'number', true); - checkParameterType(delta_z, 'number', true); - return getInstance() - .copyTransformPropertiesInternal('scale', from, to, delta_x, delta_y, delta_z); -} - -/** - * Makes the GameObject "Look At" a given position.
- * 3D mode only
- *
- * The +Z direction of the GameObject (which denotes forward in Unity's conventions) will pointing to the given position.
- *
- * For more information, see https://docs.unity3d.com/ScriptReference/Transform.LookAt.html
- * - * @param gameObjectIdentifier The identifier for the GameObject that you need to make it "look at" a position - * @param x The X value of the "look at" position - * @param y The Y value of the "look at" position - * @param z The Z value of the "look at" position - * - * @category Transform - */ -export function look_at(gameObjectIdentifier : GameObjectIdentifier, x : number, y : number, z : number) : void { - checkUnityAcademyExistence(); - checkIs3DMode(); - checkGameObjectIdentifierParameter(gameObjectIdentifier); - checkParameterType(x, 'number'); - checkParameterType(y, 'number'); - checkParameterType(z, 'number'); - getInstance() - .lookAtPositionInternal(gameObjectIdentifier, x, y, z); -} - -/** - * Calcuate the distance between two GameObjects, based on each other's position - * @param gameObjectIdentifier_A The identifier for the first GameObject - * @param gameObjectIdentifier_B The identifier for the second GameObject - * - * - * @return The value of the distance between these two GameObjects - * @category Transform - */ -export function gameobject_distance(gameObjectIdentifier_A : GameObjectIdentifier, gameObjectIdentifier_B : GameObjectIdentifier) : number { - checkUnityAcademyExistence(); - checkGameObjectIdentifierParameter(gameObjectIdentifier_A); - checkGameObjectIdentifierParameter(gameObjectIdentifier_B); - return getInstance() - .gameObjectDistanceInternal(gameObjectIdentifier_A, gameObjectIdentifier_B); -} - -function checkKeyCodeValidityAndToLowerCase(keyCode : string) : string { - if (typeof (keyCode) !== 'string') throw new Error(`Key code must be a string! Given type: ${typeof (keyCode)}`); - if (keyCode === 'LeftMouseBtn' || keyCode === 'RightMouseBtn' || keyCode === 'MiddleMouseBtn' || keyCode === 'LeftShift' || keyCode === 'RightShift') return keyCode; - keyCode = keyCode.toLowerCase(); - if (keyCode.length !== 1) throw new Error(`Key code must be either a string of length 1 or one among 'LeftMouseBtn', 'RightMouseBtn', 'MiddleMouseBtn', 'LeftShift' or 'RightShift'! Given length: ${keyCode.length}`); - const char = keyCode.charAt(0); - if (!((char >= 'a' && char <= 'z') || (char >= '0' && char <= '9'))) { - throw new Error(`Key code must be either a letter between A-Z or a-z or 0-9 or one among 'LeftMouseBtn', 'RightMouseBtn', 'MiddleMouseBtn', 'LeftShift' or 'RightShift'! Given: ${keyCode}`); - } - return keyCode; -} - -/** - * When user presses a key on the keyboard or mouse button, this function will return true only at the frame when the key is just pressed down and return false afterwards. - *
- *
- * For more information, see https://docs.unity3d.com/ScriptReference/Input.GetKeyDown.html - * @return A boolean value equivalent to Input.GetKeyDown(keyCode) in Unity. - * - * @param keyCode The key to detact input for. - * @category Input - */ -export function get_key_down(keyCode : string) : boolean { - checkUnityAcademyExistence(); - keyCode = checkKeyCodeValidityAndToLowerCase(keyCode); - return getInstance() - .getKeyState(keyCode) === 1; -} - -/** - * When user presses a key on the keyboard or mouse button, this function will return true in every frame that the key is still being pressed and false otherwise. - *
- *
- * For more information, see https://docs.unity3d.com/ScriptReference/Input.GetKey.html - * @return A boolean value equivalent to Input.GetKey(keyCode) in Unity. - * - * @param keyCode The key to detact input for. - * @category Input - */ -export function get_key(keyCode : string) : boolean { - checkUnityAcademyExistence(); - keyCode = checkKeyCodeValidityAndToLowerCase(keyCode); - const keyState = getInstance() - .getKeyState(keyCode); - return keyState === 1 || keyState === 2 || keyState === 3; -} - - -/** - * When user releases a pressed key on the keyboard or mouse button, this function will return true only at the frame when the key is just released up and return false otherwise. - *
- *
- * For more information, see https://docs.unity3d.com/ScriptReference/Input.GetKeyUp.html - * @return A boolean value equivalent to Input.GetKeyUp(keyCode) in Unity. - * - * @param keyCode The key to detact input for. - * @category Input - */ -export function get_key_up(keyCode : string) : boolean { - checkUnityAcademyExistence(); - keyCode = checkKeyCodeValidityAndToLowerCase(keyCode); - return getInstance() - .getKeyState(keyCode) === 3; -} - -/** - * Plays an Unity animation state with given name on the GameObject's animator. Note that not all game objects have Unity animations. You should ask the people who provided you the prefab asset bundle for available animation names assigned to the prefab.

- * If you provide an invalid animator state name, this function will not take effect.

- * 3D mode only

- * [For Prefab Authors] Please follow these conventions if you are making humanoid prefabs (for example: any human-like characters): Name the standing animation state as "Idle" and name the walking animation state as "Walk" in Unity Animator.
- * - * @param gameObjectIdentifier The identifier for the GameObject that you want to play the animation on. - * @param animatorStateName The name for the animator state to play. - * @category Common - */ -export function play_animator_state(gameObjectIdentifier : GameObjectIdentifier, animatorStateName : string) : void { - checkUnityAcademyExistence(); - checkIs3DMode(); - checkGameObjectIdentifierParameter(gameObjectIdentifier); - checkParameterType(animatorStateName, 'string'); - getInstance() - .playAnimatorStateInternal(gameObjectIdentifier, animatorStateName); -} - -/** - * Apply rigidbody (2D or 3D based on the current dimension mode) to the given game object to use Unity's physics engine
- *

All other functions under the Physics - Rigidbody category require calling this function first on the applied game objects. - *
- *
- * For more information, see - *
https://docs.unity3d.com/ScriptReference/Rigidbody.html (For 3D Mode) or - *
https://docs.unity3d.com/ScriptReference/Rigidbody2D.html (For 2D Mode) - * - * @param gameObjectIdentifier The identifier for the GameObject that you want to apply rigidbody on. - * @category Physics - Rigidbody - */ -export function apply_rigidbody(gameObjectIdentifier : GameObjectIdentifier) : void { - checkUnityAcademyExistence(); - checkGameObjectIdentifierParameter(gameObjectIdentifier); - getInstance() - .applyRigidbodyInternal(gameObjectIdentifier); -} - -/** - * Returns the mass of the rigidbody attached on the game object. - *

Usage of all physics functions under the Physics - Rigidbody category requires calling `apply_rigidbody` first on the applied game objects. - * - * @param gameObjectIdentifier The identifier for the GameObject that you want to get mass for. - * @return The mass of the rigidbody attached on the GameObject - * @category Physics - Rigidbody - */ -export function get_mass(gameObjectIdentifier : GameObjectIdentifier) : number { - checkUnityAcademyExistence(); - checkGameObjectIdentifierParameter(gameObjectIdentifier); - return getInstance() - .getRigidbodyNumericalProp('mass', gameObjectIdentifier); -} - -/** - * Set the mass of the rigidbody attached on the game object. - *

Usage of all physics functions under the Physics - Rigidbody category requires calling `apply_rigidbody` first on the applied game objects. - * - * @param gameObjectIdentifier The identifier for the GameObject that you want to change mass for. - * @param mass The value for the new mass. - * @category Physics - Rigidbody - */ -export function set_mass(gameObjectIdentifier : GameObjectIdentifier, mass : number) : void { - checkUnityAcademyExistence(); - checkGameObjectIdentifierParameter(gameObjectIdentifier); - checkParameterType(mass, 'number'); - getInstance() - .setRigidbodyNumericalProp('mass', gameObjectIdentifier, mass); -} - -/** - * Returns the velocity of the rigidbody attached on the game object. - *

Usage of all physics functions under the Physics - Rigidbody category requires calling `apply_rigidbody` first on the applied game objects. - * - * @param gameObjectIdentifier The identifier for the GameObject that you want to get velocity for. - * @return the velocity at this moment represented in an array with three elements: [x, y, z] - * @category Physics - Rigidbody - */ -export function get_velocity(gameObjectIdentifier : GameObjectIdentifier) : Array { - checkUnityAcademyExistence(); - checkGameObjectIdentifierParameter(gameObjectIdentifier); - return getInstance() - .getRigidbodyVelocityVector3Prop('velocity', gameObjectIdentifier); -} - -/** - * Set the (linear) velocity of the rigidbody attached on the game object. - *

Usage of all physics functions under the Physics - Rigidbody category requires calling `apply_rigidbody` first on the applied game objects. - * - * @param gameObjectIdentifier The identifier for the GameObject that you want to change velocity for. - * @param x The x component of the velocity vector. - * @param y The y component of the velocity vector. - * @param z The z component of the velocity vector. - * @category Physics - Rigidbody - */ -export function set_velocity(gameObjectIdentifier : GameObjectIdentifier, x: number, y: number, z: number) : void { - checkUnityAcademyExistence(); - checkGameObjectIdentifierParameter(gameObjectIdentifier); - checkParameterType(x, 'number'); - checkParameterType(y, 'number'); - checkParameterType(z, 'number'); - getInstance() - .setRigidbodyVelocityVector3Prop('velocity', gameObjectIdentifier, x, y, z); -} - -/** - * Returns the angular velocity of the rigidbody attached on the game object. - *

Usage of all physics functions under the Physics - Rigidbody category requires calling `apply_rigidbody` first on the applied game objects. - *

2D Mode Special: In 2D mode there is no angular velocity on X nor Y axis, so in the first two elements for the returned array will always be zero. - * - * @param gameObjectIdentifier The identifier for the GameObject that you want to get angular velocity for. - * @return the angular velocity at this moment represented in an array with three elements: [x, y, z] - * @category Physics - Rigidbody - */ -export function get_angular_velocity(gameObjectIdentifier : GameObjectIdentifier) : Array { - checkUnityAcademyExistence(); - checkGameObjectIdentifierParameter(gameObjectIdentifier); - return getInstance() - .getRigidbodyVelocityVector3Prop('angularVelocity', gameObjectIdentifier); -} - -/** - * Set the angular velocity of the rigidbody attached on the game object. - *

Usage of all physics functions under the Physics - Rigidbody category requires calling `apply_rigidbody` first on the applied game objects. - *

2D Mode Special: In 2D mode there is no angular velocity on X nor Y axis, so the value of the first two parameters for this function is ignored. - * - * @param gameObjectIdentifier The identifier for the GameObject that you want to change angular velocity for. - * @param x The x component of the angular velocity vector. - * @param y The y component of the angular velocity vector. - * @param z The z component of the angular velocity vector. - * @category Physics - Rigidbody - */ -export function set_angular_velocity(gameObjectIdentifier : GameObjectIdentifier, x: number, y: number, z: number) : void { - checkUnityAcademyExistence(); - checkGameObjectIdentifierParameter(gameObjectIdentifier); - checkParameterType(x, 'number'); - checkParameterType(y, 'number'); - checkParameterType(z, 'number'); - getInstance() - .setRigidbodyVelocityVector3Prop('angularVelocity', gameObjectIdentifier, x, y, z); -} - -/** - * Set the drag (similar to air resistance) the rigidbody attached on the game object.
- * By default the drag is zero - *

Usage of all physics functions under the Physics - Rigidbody category requires calling `apply_rigidbody` first on the applied game objects. - * - * @param gameObjectIdentifier The identifier for the GameObject that you want to change drag for. - * @param value The value of the new drag. - * @category Physics - Rigidbody - */ -export function set_drag(gameObjectIdentifier : GameObjectIdentifier, value: number) : void { - checkUnityAcademyExistence(); - checkGameObjectIdentifierParameter(gameObjectIdentifier); - checkParameterType(value, 'number'); - getInstance() - .setRigidbodyNumericalProp('drag', gameObjectIdentifier, value); -} - -/** - * Set the angular drag (similar to an air resistance that affects angular velocity) the rigidbody attached on the game object.
- * By default the angular drag is 0.05 - *

Usage of all physics functions under the Physics - Rigidbody category requires calling `apply_rigidbody` first on the applied game objects. - * - * @param gameObjectIdentifier The identifier for the GameObject that you want to change angular drag for. - * @param value The value of the new angular drag. - * @category Physics - Rigidbody - */ -export function set_angular_drag(gameObjectIdentifier : GameObjectIdentifier, value: number) : void { - checkUnityAcademyExistence(); - checkGameObjectIdentifierParameter(gameObjectIdentifier); - checkParameterType(value, 'number'); - getInstance() - .setRigidbodyNumericalProp('angularDrag', gameObjectIdentifier, value); -} - -/** - * Set whether the rigidbody attached on the game object should calculate for gravity. - *

Usage of all physics functions under the Physics - Rigidbody category requires calling `apply_rigidbody` first on the applied game objects. - * - * @param gameObjectIdentifier The identifier for the GameObject that you want to enable/disable gravity on its rigidbody. - * @param {useGravity} Set to true if you want gravity to be applied on this rigidbody, false otherwise. - * @category Physics - Rigidbody - */ -export function set_use_gravity(gameObjectIdentifier : GameObjectIdentifier, useGravity : boolean) : void { - checkUnityAcademyExistence(); - checkGameObjectIdentifierParameter(gameObjectIdentifier); - checkParameterType(useGravity, 'boolean'); - getInstance() - .setUseGravityInternal(gameObjectIdentifier, useGravity); -} - - -/** - * Add an impulse force on the Rigidbody attached on the GameObject, using its mass. - *

Usage of all physics functions under the Physics category requires calling `apply_rigidbody` first on the applied game objects. - * - * @param gameObjectIdentifier The identifier for the GameObject that you want to add the force. - * @param x The x component of the force vector. - * @param y The y component of the force vector. - * @param z The z component of the force vector. - * @category Physics - Rigidbody - */ -export function add_impulse_force(gameObjectIdentifier : GameObjectIdentifier, x: number, y: number, z: number) : void { - checkUnityAcademyExistence(); - checkGameObjectIdentifierParameter(gameObjectIdentifier); - checkParameterType(x, 'number'); - checkParameterType(y, 'number'); - checkParameterType(z, 'number'); - getInstance() - .addImpulseForceInternal(gameObjectIdentifier, x, y, z); -} - -/** - * Removes all collider components directly attached on the given GameObject by default.
- *
- * You can use this function on GameObjects those you don't want them to collide with other GameObjects.
- * For example, you may use this on the background image sprite GameObject in 2D scene. - * - * @param gameObjectIdentifier The identifier for the GameObject that you want to remove colliders for. - * @category Physics - Collision - */ -export function remove_collider_components(gameObjectIdentifier : GameObjectIdentifier) : void { - checkUnityAcademyExistence(); - checkGameObjectIdentifierParameter(gameObjectIdentifier); - getInstance() - .removeColliderComponentsInternal(gameObjectIdentifier); -} - -/** - * Set the lifecycle event function that will be called when the collider on this GameObject just starting colliding with another collider.
- *
- * The given function should contain two parameters. The first parameter refers to the binded GameObject and the second parameter refers to the other GameObject that collides with the binded GameObject (both parameters are GameObject identifiers).
- * For example: `const myFunction = (self, other) => {...};` - *
- * Note that for collision detaction to happen, for the two colliding GameObjects, at least one GameObject should have a Rigidbody / Rigidbody2D component (called `apply_rigidbody` on the GameObject). - *
- *
- * For more information, see - *
https://docs.unity3d.com/ScriptReference/Collider.OnCollisionEnter.html (For 3D Mode) or - *
https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnCollisionEnter2D.html (For 2D Mode) - * - * @param gameObjectIdentifier The identifier for the GameObject that you want to bind the lifecycle event function on. - * @param eventFunction The lifecycle event function for handling this event. - * @category Physics - Collision - * @category Outside Lifecycle - */ -export function on_collision_enter(gameObjectIdentifier : GameObjectIdentifier, eventFunction : Function) : void { - checkUnityAcademyExistence(); - checkGameObjectIdentifierParameter(gameObjectIdentifier); - checkParameterType(eventFunction, 'function'); - getInstance() - .setOnCollisionEnterInternal(gameObjectIdentifier, eventFunction); -} - -/** - * Set the lifecycle event function that will be called per frame when the collider on this GameObject is colliding with another collider.
- *
- * The given function should contain two parameters. The first parameter refers to the binded GameObject and the second parameter refers to the other GameObject that collides with the binded GameObject (both parameters are GameObject identifiers).
- * For example: `const myFunction = (self, other) => {...};` - *
- * Note that for collision detaction to happen, for the two colliding GameObjects, at least one GameObject should have a Rigidbody / Rigidbody2D component (called `apply_rigidbody` on the GameObject). - *
- *
- * For more information, see - *
https://docs.unity3d.com/ScriptReference/Collider.OnCollisionStay.html (For 3D Mode) or - *
https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnCollisionStay2D.html (For 2D Mode) - * - * @param gameObjectIdentifier The identifier for the GameObject that you want to bind the lifecycle event function on. - * @param eventFunction The lifecycle event function for handling this event. - * @category Physics - Collision - * @category Outside Lifecycle - */ -export function on_collision_stay(gameObjectIdentifier : GameObjectIdentifier, eventFunction : Function) : void { - checkUnityAcademyExistence(); - checkGameObjectIdentifierParameter(gameObjectIdentifier); - checkParameterType(eventFunction, 'function'); - getInstance() - .setOnCollisionStayInternal(gameObjectIdentifier, eventFunction); -} - -/** - * Set the lifecycle event function that will be called when the collider on this GameObject just stops colliding with another collider.
- *
- * The given function should contain two parameters. The first parameter refers to the binded GameObject and the second parameter refers to the other GameObject that collides with the binded GameObject (both parameters are GameObject identifiers).
- * For example: `const myFunction = (self, other) => {...};` - *
- * Note that for collision detaction to happen, for the two colliding GameObjects, at least one GameObject should have a Rigidbody / Rigidbody2D component (called `apply_rigidbody` on the GameObject). - *
- *
- * For more information, see - *
https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnCollisionExit.html (For 3D Mode) or - *
https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnCollisionExit2D.html (For 2D Mode) - * - * @param gameObjectIdentifier The identifier for the GameObject that you want to bind the lifecycle event function on. - * @param eventFunction The lifecycle event function for handling this event. - * @category Physics - Collision - * @category Outside Lifecycle - */ -export function on_collision_exit(gameObjectIdentifier : GameObjectIdentifier, eventFunction : Function) : void { - checkUnityAcademyExistence(); - checkGameObjectIdentifierParameter(gameObjectIdentifier); - checkParameterType(eventFunction, 'function'); - getInstance() - .setOnCollisionExitInternal(gameObjectIdentifier, eventFunction); -} - - -/** - * Draw a text (string) on the screen with given screen space position in the current frame.
- * The origin of screen space is upper-left corner and the positive Y direction is downward.
- * The drawn text will only last for one frame. You should put this under the `Update` function (or a function that is called by the `Update` function) to keep the text stays in every frame.
- * - * @param content The string you want to display on screen. - * @param x The x coordinate of the text (in screen position). - * @param y The y coordinate of the text (in screen position). - * @param fontSize The size of the text - * @category Graphical User Interface - */ -export function gui_label(content : string, x : number, y : number, fontSize : number) : void { - checkUnityAcademyExistence(); - checkParameterType(content, 'string'); - checkParameterType(x, 'number'); - checkParameterType(y, 'number'); - checkParameterType(fontSize, 'number'); - getInstance() - .onGUI_Label(content, x, y, fontSize); -} - - -/** - * Make a button on the screen with given screen space position in the current frame. When user clicks the button, the `onClick` function will be called.
- * The origin of screen space is upper-left corner and the positive Y direction is downward.
- * The drawn button will only last for one frame. You should put this under the `Update` function (or a function that is called by the `Update` function) to keep the button stays in every frame. - *
- *
- * If this function is called by a lifecycle event function, then the `onClick` function in the fourth parameter could also be considered as a lifecycle event function.
- * This means that you can use other functions from this module inside the `onClick` function, even though the functions are not under the `Outside Lifecycle` category.
- * For example, the code piece below - * ``` - * import {init_unity_academy_3d, set_start, set_update, instantiate, gui_button, set_position } - * from "unity_academy"; - * init_unity_academy_3d(); - * - * const cube = instantiate("cube"); - * - * const cube_update = (gameObject) => { - * gui_button("Button", 1000, 300, ()=> - * set_position(gameObject, 0, 10, 6) // calling set_position inside the onClick function - * ); - * }; - - * set_update(cube, cube_update); - * ``` - * is correct.
- * - * @param text The text you want to display on the button. - * @param x The x coordinate of the button (in screen position). - * @param y The y coordinate of the button (in screen position). - * @param onClick The function that will be called when user clicks the button on screen. - * @param fontSize The size of the text inside the button. - * @category Graphical User Interface - */ -export function gui_button(text : string, x: number, y : number, fontSize : number, onClick : Function) : void { - checkUnityAcademyExistence(); - checkParameterType(text, 'string'); - checkParameterType(x, 'number'); - checkParameterType(y, 'number'); - checkParameterType(fontSize, 'number'); - checkParameterType(onClick, 'function'); - getInstance() - .onGUI_Button(text, x, y, fontSize, onClick); -} - -/** - * Get the main camera following target GameObject (an invisible GameObject) to use it to control the position of the main camera with the default camera controller.

- * In 3D mode, the default camera controller behaves as third-person camera controller, and the center to follow is the following target GameObject. Also, Unity Academy will automatically set the rotation of this "following target" to the same rotation as the current main camera's rotation to let you get the main camera's rotation.
- * In 2D mode, the default camera controller will follow the target GameObject to move, along with a position delta value that you can adjust with the arrow keys on your keyboard.

- * The main camera following target GameObject is a primitive GameObject. This means that you are not allowed to destroy it and/or instantiate it during runtime. Multiple calls to this function will return GameObject identifiers that refer to the same primitive GameObject.
- *
- *
If default main camera controllers are disabled (you have called `request_for_main_camera_control`), then the following target GameObject is useless. - * - * @return The GameObject idenfitier for the main camera following target GameObject. - * @category Camera - * @category Outside Lifecycle - */ -export function get_main_camera_following_target() : GameObjectIdentifier { - checkUnityAcademyExistence(); - return getInstance() - .getGameObjectIdentifierForPrimitiveGameObject('MainCameraFollowingTarget'); -} - - -/** - * Request for main camera control and get a GameObject identifier that can directly be used to control the main camera's position and rotation.
- *
- * When you request for the direct control over main camera with this function, the default camera controllers will be disabled, thus the GameObject identifier returned by `get_main_camera_following_target` will become useless, as you can no longer use the default main camera controllers.
- *
- * This function is for totally customizing the position and rotation of the main camera. If you'd like to simplify the camera controlling with the help of the default camera controllers in Unity Academy, please consider use `get_main_camera_following_target` function.
- * - * @return The GameObject identifier that can directly be used to control the main camera's position and rotation - * @category Camera - * @category Outside Lifecycle - */ -export function request_for_main_camera_control() : GameObjectIdentifier { - checkUnityAcademyExistence(); - return getInstance() - .requestForMainCameraControlInternal(); -} - -/** - * Set a custom property with name and value on a GameObject - * - * @param gameObjectIdentifier The identifier for the GameObject that you want to set the custom property on. - * @param propName The name (a string) of the custom property - * @param value The value of the custom property, can be anything you want - * - * @category Common - */ -export function set_custom_prop(gameObjectIdentifier : GameObjectIdentifier, propName : string, value : any) : void { - checkUnityAcademyExistence(); - checkGameObjectIdentifierParameter(gameObjectIdentifier); - checkParameterType(propName, 'string'); - getInstance() - .setCustomPropertyInternal(gameObjectIdentifier, propName, value); -} - -/** - * Get the value of a custom property with its name on a GameObject - * - * @param gameObjectIdentifier The identifier for the GameObject that you want to get the custom property on. - * @param propName The name (a string) of the custom property - * - * @return The value of the custom property with the given name on the given GameObject. If the property value is not set, this function will return `undefined`. - * - * @category Common - */ -export function get_custom_prop(gameObjectIdentifier : GameObjectIdentifier, propName : string) : any { - checkUnityAcademyExistence(); - checkGameObjectIdentifierParameter(gameObjectIdentifier); - checkParameterType(propName, 'string'); - return getInstance() - .getCustomPropertyInternal(gameObjectIdentifier, propName); -} - -/** - * Create a 3D vector - * @param x The x component of the new vector - * @param y The y component of the new vector - * @param z The z component of the new vector - * - * @return The 3D vector (x, y, z) - * - * @category Maths - */ -export function vector3(x : number, y : number, z : number) : Vector3 { - checkParameterType(x, 'number'); - checkParameterType(y, 'number'); - checkParameterType(z, 'number'); - return makeVector3D(x, y, z); -} - -/** - * Get the X component of a 3D vector - * @param vector The 3D vector - * - * @return The X component of the given vector - * - * @category Maths - */ -export function get_x(vector : Vector3) : number { - checkVector3Parameter(vector); - return vector.x; -} - -/** - * Get the Y component of a 3D vector - * @param vector The 3D vector - * - * @return The Y component of the given vector - * - * @category Maths - */ -export function get_y(vector : Vector3) : number { - checkVector3Parameter(vector); - return vector.y; -} - -/** - * Get the Z component of a 3D vector - * @param vector The 3D vector - * - * @return The Z component of the given vector - * - * @category Maths - */ -export function get_z(vector : Vector3) : number { - checkVector3Parameter(vector); - return vector.z; -} - -/** - * Scales a 3D vector with the given factor. - * @param vector The original vector - * @param factor The scaling factor. - * @return The scaled vector - * - * @category Maths - */ -export function scale_vector(vector : Vector3, factor : number) : Vector3 { - checkVector3Parameter(vector); - checkParameterType(factor, 'number'); - return scaleVector(vector, factor); -} - -/** - * Add two 3D vectors together. - * @param vectorA The first vector - * @param vectorB The second vector. - * @return The sum of the two vectors - * - * @category Maths - */ -export function add_vector(vectorA : Vector3, vectorB : Vector3) : Vector3 { - checkVector3Parameter(vectorA); - checkVector3Parameter(vectorB); - return addVector(vectorA, vectorB); -} - -/** - * Calcuate the dot product of two 3D vectors. - * @param vectorA The first vector - * @param vectorB The second vector. - * @return The dot product - * - * @category Maths - */ -export function dot(vectorA : Vector3, vectorB : Vector3) : number { - checkVector3Parameter(vectorA); - checkVector3Parameter(vectorB); - return dotProduct(vectorA, vectorB); -} - -/** - * Calcuate the cross product of two 3D vectors. - * @param vectorA The first vector - * @param vectorB The second vector. - * @return The cross product - * - * @category Maths - */ -export function cross(vectorA : Vector3, vectorB : Vector3) : Vector3 { - checkVector3Parameter(vectorA); - checkVector3Parameter(vectorB); - return crossProduct(vectorA, vectorB); -} - -/** - * Normalize a vector. The returned vector will have the same direction as the original vector but have a magnitude of 1. - * @param vector The original vector - * @return The normalized vector. This function will return a zero vector if the original vector is a zero vector. - * - * @category Maths - */ -export function normalize(vector : Vector3) : Vector3 { - checkVector3Parameter(vector); - return normalizeVector(vector); -} - -/** - * Calcuate the magnitude of a vector - * @param vector The vector - * @return The magnitude of the vector - * - * @category Maths - */ -export function magnitude(vector : Vector3) : number { - checkVector3Parameter(vector); - return vectorMagnitude(vector); -} - -/** - * Get the zero vector - * @return The zero vector - * - * @category Maths - */ -export function zero_vector() : Vector3 { - return zeroVector(); -} - -/** - * Calcuate the distance between two 3D points - * - * @param pointA The first point - * @param pointB The second point - * - * @return The value of the distance between the two points - * - * @category Maths - */ -export function point_distance(pointA : Vector3, pointB : Vector3) : number { - checkVector3Parameter(pointA); - checkVector3Parameter(pointB); - return pointDistance(pointA, pointB); -} +/** + * Functions for Source Academy's Unity Academy module + * @module unity_academy + * @author Wang Zihan + */ + + +import { initializeModule, getInstance, type GameObjectIdentifier } from './UnityAcademy'; +import { + type Vector3, checkVector3Parameter, makeVector3D, scaleVector, addVector, dotProduct, crossProduct, + normalizeVector, vectorMagnitude, zeroVector, pointDistance, +} from './UnityAcademyMaths'; + + +/** + * Load and initialize Unity Academy WebGL player and set it to 2D mode. All other functions (except Maths functions) in this module requires calling this function or init_unity_academy_3d first.
+ * I recommand you just call this function at the beginning of your Source Unity program under the 'import' statements. + * + * @category Application Initialization + * @category Outside Lifecycle + */ +export function init_unity_academy_2d() : void { + initializeModule('2d'); +} + +/** + * Load and initialize Unity Academy WebGL player and set it to 3D mode. All other functions (except Maths functions) in this module requires calling this function or init_unity_academy_2d first.
+ * I recommand you just call this function at the beginning of your Source Unity program under the 'import' statements. + * + * @category Application Initialization + * @category Outside Lifecycle + */ +export function init_unity_academy_3d() : void { + initializeModule('3d'); +} + +function checkUnityAcademyExistence() { + if (getInstance() === undefined) { + throw new Error('Unity module is not initialized, please call init_unity_academy_3d / init_unity_academy_2d first before calling this function'); + } +} + +function checkIs2DMode() : void { + if (getInstance().dimensionMode !== '2d') throw new Error('You are calling a "2D mode only" function in non-2d mode.'); +} + +function checkIs3DMode() : void { + if (getInstance().dimensionMode !== '3d') throw new Error('You are calling a "3D mode only" function in non-3d mode.'); +} + +function checkGameObjectIdentifierParameter(gameObjectIdentifier : any) { + // Here I can not just do "gameObjectIdentifier instanceof GameObjectIdentifier". + // Because if I do that, when students re-run their code on the same Unity instance, (gameObjectIdentifier instanceof GameObjectIdentifier) will always evaluate to false + // even when students provide the parameter with the correct type. + const instance = getInstance(); + if (!(gameObjectIdentifier instanceof instance.gameObjectIdentifierWrapperClass)) { + throw new Error(`Type "${(typeof (gameObjectIdentifier)).toString()}" can not be used as game object identifier!`); + } + if (instance.getStudentGameObject(gameObjectIdentifier).isDestroyed) { + throw new Error('Trying to use a GameObject that is already destroyed.'); + } +} + +function checkParameterType(parameter : any, expectedType : string, numberAllowInfinity = false) { + const actualType = typeof (parameter); + if (actualType !== expectedType) { + throw new Error(`Wrong parameter type: expected ${expectedType}, but got ${actualType}`); + } + if (actualType.toString() === 'number') { + if (!numberAllowInfinity && (parameter === Infinity || parameter === -Infinity)) { + throw new Error('Wrong parameter type: expected a finite number, but got Infinity or -Infinity'); + } + } +} + +/** + * Determines whether two GameObject identifiers refers to the same GameObject. + * + * @param first The first GameObject identifier to compare with. + * @param second The second GameObject identifier to compare with. + * @return Returns true if the two GameObject identifiers refers to the same GameObject and false otherwise. + * @category Common + */ +export function same_gameobject(first : GameObjectIdentifier, second : GameObjectIdentifier) : boolean { + checkUnityAcademyExistence(); + const instance = getInstance(); + if (!(first instanceof instance.gameObjectIdentifierWrapperClass) || !(second instanceof instance.gameObjectIdentifierWrapperClass)) { + return false; + } + return first.gameObjectIdentifier === second.gameObjectIdentifier; +} + +/** + * Sets the Start function of a given GameObject + * @param gameObjectIdentifier The identifier for the GameObject that you want to bind the Start function on. + * @param startFunction The Start function you want to assign to this GameObject. The Start function should contain one parameter, that Unity will pass the owner GameObject's identifier to this parameter. + * + * @category Common + * @category Outside Lifecycle + */ +export function set_start(gameObjectIdentifier : GameObjectIdentifier, startFunction : Function) : void { + checkUnityAcademyExistence(); + checkGameObjectIdentifierParameter(gameObjectIdentifier); + checkParameterType(startFunction, 'function'); + getInstance() + .setStartInternal(gameObjectIdentifier, startFunction); +} + +/** + * Sets the Update function of a given GameObject + * + * @param gameObjectIdentifier The identifier for the GameObject that you want to bind the Update function on. + * @param updateFunction The Update function you want to assign to this GameObject. The Update function should contain one parameter, that Unity will pass the owner GameObject's identifier to this parameter. + * + * @category Common + * @category Outside Lifecycle + */ +export function set_update(gameObjectIdentifier : GameObjectIdentifier, updateFunction : Function) : void { + checkUnityAcademyExistence(); + checkGameObjectIdentifierParameter(gameObjectIdentifier); + checkParameterType(updateFunction, 'function'); + getInstance() + .setUpdateInternal(gameObjectIdentifier, updateFunction); +} + + +/** + * Creates a new GameObject from an existing Prefab
+ *
+ * 3D mode only
+ *
+ * Available Prefab Information: Click Here + * + * @param prefab_name The prefab name + * @return the identifier of the newly created GameObject + * + * @category Common + * @category Outside Lifecycle + */ +export function instantiate(prefab_name : string) : GameObjectIdentifier { + checkUnityAcademyExistence(); + checkIs3DMode(); + checkParameterType(prefab_name, 'string'); + return getInstance() + .instantiateInternal(prefab_name); +} + +/** + * Creates a new 2D Sprite GameObject from an online image.
+ * The Sprite GameObject has a BoxCollider2D that matches its size by default. You may use `remove_collider_components` function to remove the default collider.

+ * Note that Unity Academy will use a HTTP GET request to download the image, which means that the HTTP response from the URL must allows CORS.

+ *
2D mode only + * + * @param sourceImageUrl The image url for the sprite. + * @return the identifier of the newly created GameObject + * + * @category Common + * @category Outside Lifecycle + */ +export function instantiate_sprite(sourceImageUrl : string) { + checkUnityAcademyExistence(); + checkIs2DMode(); + checkParameterType(sourceImageUrl, 'string'); + return getInstance() + .instantiate2DSpriteUrlInternal(sourceImageUrl); +} + +/** + * Creates a new empty GameObject.
+ *
+ * An empty GameObject is invisible and only have transform properties by default.
+ * You may use the empty GameObject to run some general game management code or use the position of the empty GameObject to represent a point in the scene that the rest of your codes can access and utilize. + * + * @return the identifier of the newly created GameObject + * + * @category Common + * @category Outside Lifecycle + */ +export function instantiate_empty() : GameObjectIdentifier { + checkUnityAcademyExistence(); + checkIs3DMode(); + return getInstance() + .instantiateEmptyGameObjectInternal(); +} + +/** + * Returns the value of Time.deltaTime in Unity ( roughly saying it's about `1 / instant frame rate` )
+ * This should be useful when implementing timers or constant speed control in Update function.
+ * For example: + * ``` + * function update(gameObject){ + * const move_speed = 3; + * translate_world(gameObject, 0, 0, move_speed * delta_time()); + * } + * ``` + * By assigning the above code to a GameObject with `set_update`, that GameObject will move in a constant speed of 3 units along world +Z axis, ignoring the affect of unstable instant frame rate. + *
+ *
+ * For more information, see https://docs.unity3d.com/ScriptReference/Time-deltaTime.html + * @return the delta time value in decimal + * + * @category Common + */ +export function delta_time() { + checkUnityAcademyExistence(); + return getInstance() + .getDeltaTime(); +} + +/** + * Remove a GameObject
+ * Note that this won't remove the GameObject immediately, the actual removal will happen at the end of the current main cycle loop.
+ *
+ * For more information, see https://docs.unity3d.com/ScriptReference/Object.Destroy.html + * + * @param gameObjectIdentifier The identifier for the GameObject that you want to destroy. + * @category Common + */ +export function destroy(gameObjectIdentifier : GameObjectIdentifier) : void { + checkUnityAcademyExistence(); + checkGameObjectIdentifierParameter(gameObjectIdentifier); + getInstance() + .destroyGameObjectInternal(gameObjectIdentifier); +} + + +/** + * Set the target frame rate of Unity Academy. The frame rate should be an integer between 1 and 30. The default value is 30. + * + * @category Basics + */ +/* export function set_target_fps(frameRate : number) { + checkUnityEngineStatus(); + return getInstance() + .setTargetFrameRate(frameRate); +}*/ + +/** + * Returns the world position of a given GameObject + * @param gameObjectIdentifier The identifier for the GameObject that you want to get position for. + * @return the position represented in an array with three elements: [x, y, z] + * + * @category Transform + */ +export function get_position(gameObjectIdentifier : GameObjectIdentifier) : Array { + checkUnityAcademyExistence(); + checkGameObjectIdentifierParameter(gameObjectIdentifier); + return getInstance() + .getGameObjectTransformProp('position', gameObjectIdentifier); +} + +/** + * Set the world position of a given GameObject + * @param gameObjectIdentifier The identifier for the GameObject that you want to change position for. + * @param x The x component for the position. + * @param y The y component for the position. + * @param z The z component for the position. + * + * @category Transform + */ +export function set_position(gameObjectIdentifier : GameObjectIdentifier, x : number, y : number, z : number) : void { + checkUnityAcademyExistence(); + checkGameObjectIdentifierParameter(gameObjectIdentifier); + checkParameterType(x, 'number'); + checkParameterType(y, 'number'); + checkParameterType(z, 'number'); + return getInstance() + .setGameObjectTransformProp('position', gameObjectIdentifier, x, y, z); +} + +/** + * Returns the world Euler angle rotation of a given GameObject + * @param gameObjectIdentifier The identifier for the GameObject that you want to get rotation for. + * @return the Euler angle rotation represented in an array with three elements: [x, y, z] + * + * @category Transform + */ +export function get_rotation_euler(gameObjectIdentifier : GameObjectIdentifier) : Array { + checkUnityAcademyExistence(); + checkGameObjectIdentifierParameter(gameObjectIdentifier); + return getInstance() + .getGameObjectTransformProp('rotation', gameObjectIdentifier); +} + +/** + * Set the world rotation of a given GameObject with given Euler angle rotation. + * @param gameObjectIdentifier The identifier for the GameObject that you want to change rotation for. + * @param x The x component (Euler angle) for the rotation. + * @param y The y component (Euler angle) for the rotation. + * @param z The z component (Euler angle) for the rotation. + * + * @category Transform + */ +export function set_rotation_euler(gameObjectIdentifier : GameObjectIdentifier, x : number, y : number, z : number) : void { + checkUnityAcademyExistence(); + checkGameObjectIdentifierParameter(gameObjectIdentifier); + checkParameterType(x, 'number'); + checkParameterType(y, 'number'); + checkParameterType(z, 'number'); + return getInstance() + .setGameObjectTransformProp('rotation', gameObjectIdentifier, x, y, z); +} + +/** + * Returns the scale (size factor) of a given GameObject + *
+ * By default the scale of a GameObject is (1, 1, 1) + * @param gameObjectIdentifier The identifier for the GameObject that you want to get scale for. + * @return the scale represented in an array with three elements: [x, y, z] + * + * @category Transform + */ +export function get_scale(gameObjectIdentifier : GameObjectIdentifier) : Array { + checkUnityAcademyExistence(); + checkGameObjectIdentifierParameter(gameObjectIdentifier); + return getInstance() + .getGameObjectTransformProp('scale', gameObjectIdentifier); +} + +/** + * Set the scale (size) of a given GameObject + *
+ * By default the scale of a GameObject is (1, 1, 1). Changing the scale of a GameObject along one axis will lead to a stretch or squeeze of the GameObject along that axis. + * + * @param gameObjectIdentifier The identifier for the GameObject that you want to change scale for. + * @param x The x component for the scale. + * @param y The y component for the scale. + * @param z The z component for the scale. + * + * @category Transform + */ +export function set_scale(gameObjectIdentifier : GameObjectIdentifier, x : number, y : number, z : number) : void { + checkUnityAcademyExistence(); + checkGameObjectIdentifierParameter(gameObjectIdentifier); + checkParameterType(x, 'number'); + checkParameterType(y, 'number'); + checkParameterType(z, 'number'); + return getInstance() + .setGameObjectTransformProp('scale', gameObjectIdentifier, x, y, z); +} + +/** + * Moves a GameObject with given x, y and z values + * + * @param gameObjectIdentifier The identifier for the GameObject that you want to translate. + * @param x The value you want to move along X-axis in the world space + * @param y The value you want to move along Y-axis in the world space + * @param z The value you want to move along Z-axis in the world space + * + * @category Transform + */ +export function translate_world(gameObjectIdentifier : GameObjectIdentifier, x: number, y : number, z : number) : void { + checkUnityAcademyExistence(); + checkGameObjectIdentifierParameter(gameObjectIdentifier); + checkParameterType(x, 'number'); + checkParameterType(y, 'number'); + checkParameterType(z, 'number'); + return getInstance() + .translateWorldInternal(gameObjectIdentifier, x, y, z); +} + +/** + * Moves a GameObject with given x, y and z values, with respect to its local space.
+ * The current rotation of the GameObject will affect the real direction of movement.
+ * In Unity, usually, the direction of +Z axis denotes forward. + * + * @param gameObjectIdentifier The identifier for the GameObject that you want to translate. + * @param x The value you want to move along X-axis in the local space + * @param y The value you want to move along Y-axis in the local space + * @param z The value you want to move along Z-axis in the local space + * + * @category Transform + */ +export function translate_local(gameObjectIdentifier : GameObjectIdentifier, x: number, y : number, z : number) : void { + checkUnityAcademyExistence(); + checkGameObjectIdentifierParameter(gameObjectIdentifier); + checkParameterType(x, 'number'); + checkParameterType(y, 'number'); + checkParameterType(z, 'number'); + return getInstance() + .translateLocalInternal(gameObjectIdentifier, x, y, z); +} + +/** + * Rotates a GameObject with given x, y and z values (Euler angle) + * + * @param gameObjectIdentifier The identifier for the GameObject that you want to rotate. + * @param x The value you want to rotate along X-axis in the world space + * @param y The value you want to rotate along Y-axis in the world space + * @param z The value you want to rotate along Z-axis in the world space + * + * @category Transform + */ +export function rotate_world(gameObjectIdentifier : GameObjectIdentifier, x: number, y : number, z : number) : void { + checkUnityAcademyExistence(); + checkGameObjectIdentifierParameter(gameObjectIdentifier); + checkParameterType(x, 'number'); + checkParameterType(y, 'number'); + checkParameterType(z, 'number'); + return getInstance() + .rotateWorldInternal(gameObjectIdentifier, x, y, z); +} + +/** + * Copy the position values from one GameObject to another GameObject along with delta values.

+ * Set the delta parameters to `Infinity` or `-Infinity` to remain the position of the destination GameObject on the corresponding axis unaffected.
+ * + * @param from The identifier for the GameObject that you want to copy position from. + * @param to The identifier for the GameObject that you want to copy position to. + * @param delta_x This value will be added to the copied value when coping the X-coordinate position value to the destination GameObject + * @param delta_y This value will be added to the copied value when coping the Y-coordinate position value to the destination GameObject + * @param delta_z This value will be added to the copied value when coping the Z-coordinate position value to the destination GameObject + * + * @category Transform + */ +export function copy_position(from : GameObjectIdentifier, to : GameObjectIdentifier, delta_x : number, delta_y : number, delta_z : number) : void { + checkUnityAcademyExistence(); + checkGameObjectIdentifierParameter(from); + checkGameObjectIdentifierParameter(to); + checkParameterType(delta_x, 'number', true); + checkParameterType(delta_y, 'number', true); + checkParameterType(delta_z, 'number', true); + return getInstance() + .copyTransformPropertiesInternal('position', from, to, delta_x, delta_y, delta_z); +} + +/** + * Copy the rotation values (Euler angles) from one GameObject to another GameObject along with delta values.

+ * Set the delta parameters to `Infinity` or `-Infinity` to remain the rotation of the destination GameObject on the corresponding axis unaffected.
+ * + * @param from The identifier for the GameObject that you want to copy rotation from. + * @param to The identifier for the GameObject that you want to copy rotation to. + * @param delta_x This value will be added to the copied value when coping the X-coordinate rotation value to the destination GameObject + * @param delta_y This value will be added to the copied value when coping the Y-coordinate rotation value to the destination GameObject + * @param delta_z This value will be added to the copied value when coping the Z-coordinate rotation value to the destination GameObject + * + * @category Transform + */ +export function copy_rotation(from : GameObjectIdentifier, to : GameObjectIdentifier, delta_x : number, delta_y : number, delta_z : number) : void { + checkUnityAcademyExistence(); + checkGameObjectIdentifierParameter(from); + checkGameObjectIdentifierParameter(to); + checkParameterType(delta_x, 'number', true); + checkParameterType(delta_y, 'number', true); + checkParameterType(delta_z, 'number', true); + return getInstance() + .copyTransformPropertiesInternal('rotation', from, to, delta_x, delta_y, delta_z); +} + +/** + * Copy the scale values from one GameObject to another GameObject along with delta values.

+ * Set the delta parameters to `Infinity` or `-Infinity` to remain the scale of the destination GameObject on the corresponding axis unaffected.
+ * + * @param from The identifier for the GameObject that you want to copy scale from. + * @param to The identifier for the GameObject that you want to copy scale to. + * @param delta_x This value will be added to the copied value when coping the X-coordinate scale value to the destination GameObject + * @param delta_y This value will be added to the copied value when coping the Y-coordinate scale value to the destination GameObject + * @param delta_z This value will be added to the copied value when coping the Z-coordinate scale value to the destination GameObject + * + * @category Transform + */ +export function copy_scale(from : GameObjectIdentifier, to : GameObjectIdentifier, delta_x : number, delta_y : number, delta_z : number) : void { + checkUnityAcademyExistence(); + checkGameObjectIdentifierParameter(from); + checkGameObjectIdentifierParameter(to); + checkParameterType(delta_x, 'number', true); + checkParameterType(delta_y, 'number', true); + checkParameterType(delta_z, 'number', true); + return getInstance() + .copyTransformPropertiesInternal('scale', from, to, delta_x, delta_y, delta_z); +} + +/** + * Makes the GameObject "Look At" a given position.
+ * 3D mode only
+ *
+ * The +Z direction of the GameObject (which denotes forward in Unity's conventions) will pointing to the given position.
+ *
+ * For more information, see https://docs.unity3d.com/ScriptReference/Transform.LookAt.html
+ * + * @param gameObjectIdentifier The identifier for the GameObject that you need to make it "look at" a position + * @param x The X value of the "look at" position + * @param y The Y value of the "look at" position + * @param z The Z value of the "look at" position + * + * @category Transform + */ +export function look_at(gameObjectIdentifier : GameObjectIdentifier, x : number, y : number, z : number) : void { + checkUnityAcademyExistence(); + checkIs3DMode(); + checkGameObjectIdentifierParameter(gameObjectIdentifier); + checkParameterType(x, 'number'); + checkParameterType(y, 'number'); + checkParameterType(z, 'number'); + getInstance() + .lookAtPositionInternal(gameObjectIdentifier, x, y, z); +} + +/** + * Calcuate the distance between two GameObjects, based on each other's position + * @param gameObjectIdentifier_A The identifier for the first GameObject + * @param gameObjectIdentifier_B The identifier for the second GameObject + * + * + * @return The value of the distance between these two GameObjects + * @category Transform + */ +export function gameobject_distance(gameObjectIdentifier_A : GameObjectIdentifier, gameObjectIdentifier_B : GameObjectIdentifier) : number { + checkUnityAcademyExistence(); + checkGameObjectIdentifierParameter(gameObjectIdentifier_A); + checkGameObjectIdentifierParameter(gameObjectIdentifier_B); + return getInstance() + .gameObjectDistanceInternal(gameObjectIdentifier_A, gameObjectIdentifier_B); +} + +function checkKeyCodeValidityAndToLowerCase(keyCode : string) : string { + if (typeof (keyCode) !== 'string') throw new Error(`Key code must be a string! Given type: ${typeof (keyCode)}`); + if (keyCode === 'LeftMouseBtn' || keyCode === 'RightMouseBtn' || keyCode === 'MiddleMouseBtn' || keyCode === 'LeftShift' || keyCode === 'RightShift') return keyCode; + keyCode = keyCode.toLowerCase(); + if (keyCode.length !== 1) throw new Error(`Key code must be either a string of length 1 or one among 'LeftMouseBtn', 'RightMouseBtn', 'MiddleMouseBtn', 'LeftShift' or 'RightShift'! Given length: ${keyCode.length}`); + const char = keyCode.charAt(0); + if (!((char >= 'a' && char <= 'z') || (char >= '0' && char <= '9'))) { + throw new Error(`Key code must be either a letter between A-Z or a-z or 0-9 or one among 'LeftMouseBtn', 'RightMouseBtn', 'MiddleMouseBtn', 'LeftShift' or 'RightShift'! Given: ${keyCode}`); + } + return keyCode; +} + +/** + * When user presses a key on the keyboard or mouse button, this function will return true only at the frame when the key is just pressed down and return false afterwards. + *
+ *
+ * For more information, see https://docs.unity3d.com/ScriptReference/Input.GetKeyDown.html + * @return A boolean value equivalent to Input.GetKeyDown(keyCode) in Unity. + * + * @param keyCode The key to detact input for. + * @category Input + */ +export function get_key_down(keyCode : string) : boolean { + checkUnityAcademyExistence(); + keyCode = checkKeyCodeValidityAndToLowerCase(keyCode); + return getInstance() + .getKeyState(keyCode) === 1; +} + +/** + * When user presses a key on the keyboard or mouse button, this function will return true in every frame that the key is still being pressed and false otherwise. + *
+ *
+ * For more information, see https://docs.unity3d.com/ScriptReference/Input.GetKey.html + * @return A boolean value equivalent to Input.GetKey(keyCode) in Unity. + * + * @param keyCode The key to detact input for. + * @category Input + */ +export function get_key(keyCode : string) : boolean { + checkUnityAcademyExistence(); + keyCode = checkKeyCodeValidityAndToLowerCase(keyCode); + const keyState = getInstance() + .getKeyState(keyCode); + return keyState === 1 || keyState === 2 || keyState === 3; +} + + +/** + * When user releases a pressed key on the keyboard or mouse button, this function will return true only at the frame when the key is just released up and return false otherwise. + *
+ *
+ * For more information, see https://docs.unity3d.com/ScriptReference/Input.GetKeyUp.html + * @return A boolean value equivalent to Input.GetKeyUp(keyCode) in Unity. + * + * @param keyCode The key to detact input for. + * @category Input + */ +export function get_key_up(keyCode : string) : boolean { + checkUnityAcademyExistence(); + keyCode = checkKeyCodeValidityAndToLowerCase(keyCode); + return getInstance() + .getKeyState(keyCode) === 3; +} + +/** + * Plays an Unity animation state with given name on the GameObject's animator. Note that not all game objects have Unity animations. You should ask the people who provided you the prefab asset bundle for available animation names assigned to the prefab.

+ * If you provide an invalid animator state name, this function will not take effect.

+ * 3D mode only

+ * [For Prefab Authors] Please follow these conventions if you are making humanoid prefabs (for example: any human-like characters): Name the standing animation state as "Idle" and name the walking animation state as "Walk" in Unity Animator.
+ * + * @param gameObjectIdentifier The identifier for the GameObject that you want to play the animation on. + * @param animatorStateName The name for the animator state to play. + * @category Common + */ +export function play_animator_state(gameObjectIdentifier : GameObjectIdentifier, animatorStateName : string) : void { + checkUnityAcademyExistence(); + checkIs3DMode(); + checkGameObjectIdentifierParameter(gameObjectIdentifier); + checkParameterType(animatorStateName, 'string'); + getInstance() + .playAnimatorStateInternal(gameObjectIdentifier, animatorStateName); +} + +/** + * Apply rigidbody (2D or 3D based on the current dimension mode) to the given game object to use Unity's physics engine
+ *

All other functions under the Physics - Rigidbody category require calling this function first on the applied game objects. + *
+ *
+ * For more information, see + *
https://docs.unity3d.com/ScriptReference/Rigidbody.html (For 3D Mode) or + *
https://docs.unity3d.com/ScriptReference/Rigidbody2D.html (For 2D Mode) + * + * @param gameObjectIdentifier The identifier for the GameObject that you want to apply rigidbody on. + * @category Physics - Rigidbody + */ +export function apply_rigidbody(gameObjectIdentifier : GameObjectIdentifier) : void { + checkUnityAcademyExistence(); + checkGameObjectIdentifierParameter(gameObjectIdentifier); + getInstance() + .applyRigidbodyInternal(gameObjectIdentifier); +} + +/** + * Returns the mass of the rigidbody attached on the game object. + *

Usage of all physics functions under the Physics - Rigidbody category requires calling `apply_rigidbody` first on the applied game objects. + * + * @param gameObjectIdentifier The identifier for the GameObject that you want to get mass for. + * @return The mass of the rigidbody attached on the GameObject + * @category Physics - Rigidbody + */ +export function get_mass(gameObjectIdentifier : GameObjectIdentifier) : number { + checkUnityAcademyExistence(); + checkGameObjectIdentifierParameter(gameObjectIdentifier); + return getInstance() + .getRigidbodyNumericalProp('mass', gameObjectIdentifier); +} + +/** + * Set the mass of the rigidbody attached on the game object. + *

Usage of all physics functions under the Physics - Rigidbody category requires calling `apply_rigidbody` first on the applied game objects. + * + * @param gameObjectIdentifier The identifier for the GameObject that you want to change mass for. + * @param mass The value for the new mass. + * @category Physics - Rigidbody + */ +export function set_mass(gameObjectIdentifier : GameObjectIdentifier, mass : number) : void { + checkUnityAcademyExistence(); + checkGameObjectIdentifierParameter(gameObjectIdentifier); + checkParameterType(mass, 'number'); + getInstance() + .setRigidbodyNumericalProp('mass', gameObjectIdentifier, mass); +} + +/** + * Returns the velocity of the rigidbody attached on the game object. + *

Usage of all physics functions under the Physics - Rigidbody category requires calling `apply_rigidbody` first on the applied game objects. + * + * @param gameObjectIdentifier The identifier for the GameObject that you want to get velocity for. + * @return the velocity at this moment represented in an array with three elements: [x, y, z] + * @category Physics - Rigidbody + */ +export function get_velocity(gameObjectIdentifier : GameObjectIdentifier) : Array { + checkUnityAcademyExistence(); + checkGameObjectIdentifierParameter(gameObjectIdentifier); + return getInstance() + .getRigidbodyVelocityVector3Prop('velocity', gameObjectIdentifier); +} + +/** + * Set the (linear) velocity of the rigidbody attached on the game object. + *

Usage of all physics functions under the Physics - Rigidbody category requires calling `apply_rigidbody` first on the applied game objects. + * + * @param gameObjectIdentifier The identifier for the GameObject that you want to change velocity for. + * @param x The x component of the velocity vector. + * @param y The y component of the velocity vector. + * @param z The z component of the velocity vector. + * @category Physics - Rigidbody + */ +export function set_velocity(gameObjectIdentifier : GameObjectIdentifier, x: number, y: number, z: number) : void { + checkUnityAcademyExistence(); + checkGameObjectIdentifierParameter(gameObjectIdentifier); + checkParameterType(x, 'number'); + checkParameterType(y, 'number'); + checkParameterType(z, 'number'); + getInstance() + .setRigidbodyVelocityVector3Prop('velocity', gameObjectIdentifier, x, y, z); +} + +/** + * Returns the angular velocity of the rigidbody attached on the game object. + *

Usage of all physics functions under the Physics - Rigidbody category requires calling `apply_rigidbody` first on the applied game objects. + *

2D Mode Special: In 2D mode there is no angular velocity on X nor Y axis, so in the first two elements for the returned array will always be zero. + * + * @param gameObjectIdentifier The identifier for the GameObject that you want to get angular velocity for. + * @return the angular velocity at this moment represented in an array with three elements: [x, y, z] + * @category Physics - Rigidbody + */ +export function get_angular_velocity(gameObjectIdentifier : GameObjectIdentifier) : Array { + checkUnityAcademyExistence(); + checkGameObjectIdentifierParameter(gameObjectIdentifier); + return getInstance() + .getRigidbodyVelocityVector3Prop('angularVelocity', gameObjectIdentifier); +} + +/** + * Set the angular velocity of the rigidbody attached on the game object. + *

Usage of all physics functions under the Physics - Rigidbody category requires calling `apply_rigidbody` first on the applied game objects. + *

2D Mode Special: In 2D mode there is no angular velocity on X nor Y axis, so the value of the first two parameters for this function is ignored. + * + * @param gameObjectIdentifier The identifier for the GameObject that you want to change angular velocity for. + * @param x The x component of the angular velocity vector. + * @param y The y component of the angular velocity vector. + * @param z The z component of the angular velocity vector. + * @category Physics - Rigidbody + */ +export function set_angular_velocity(gameObjectIdentifier : GameObjectIdentifier, x: number, y: number, z: number) : void { + checkUnityAcademyExistence(); + checkGameObjectIdentifierParameter(gameObjectIdentifier); + checkParameterType(x, 'number'); + checkParameterType(y, 'number'); + checkParameterType(z, 'number'); + getInstance() + .setRigidbodyVelocityVector3Prop('angularVelocity', gameObjectIdentifier, x, y, z); +} + +/** + * Set the drag (similar to air resistance) the rigidbody attached on the game object.
+ * By default the drag is zero + *

Usage of all physics functions under the Physics - Rigidbody category requires calling `apply_rigidbody` first on the applied game objects. + * + * @param gameObjectIdentifier The identifier for the GameObject that you want to change drag for. + * @param value The value of the new drag. + * @category Physics - Rigidbody + */ +export function set_drag(gameObjectIdentifier : GameObjectIdentifier, value: number) : void { + checkUnityAcademyExistence(); + checkGameObjectIdentifierParameter(gameObjectIdentifier); + checkParameterType(value, 'number'); + getInstance() + .setRigidbodyNumericalProp('drag', gameObjectIdentifier, value); +} + +/** + * Set the angular drag (similar to an air resistance that affects angular velocity) the rigidbody attached on the game object.
+ * By default the angular drag is 0.05 + *

Usage of all physics functions under the Physics - Rigidbody category requires calling `apply_rigidbody` first on the applied game objects. + * + * @param gameObjectIdentifier The identifier for the GameObject that you want to change angular drag for. + * @param value The value of the new angular drag. + * @category Physics - Rigidbody + */ +export function set_angular_drag(gameObjectIdentifier : GameObjectIdentifier, value: number) : void { + checkUnityAcademyExistence(); + checkGameObjectIdentifierParameter(gameObjectIdentifier); + checkParameterType(value, 'number'); + getInstance() + .setRigidbodyNumericalProp('angularDrag', gameObjectIdentifier, value); +} + +/** + * Set whether the rigidbody attached on the game object should calculate for gravity. + *

Usage of all physics functions under the Physics - Rigidbody category requires calling `apply_rigidbody` first on the applied game objects. + * + * @param gameObjectIdentifier The identifier for the GameObject that you want to enable/disable gravity on its rigidbody. + * @param {useGravity} Set to true if you want gravity to be applied on this rigidbody, false otherwise. + * @category Physics - Rigidbody + */ +export function set_use_gravity(gameObjectIdentifier : GameObjectIdentifier, useGravity : boolean) : void { + checkUnityAcademyExistence(); + checkGameObjectIdentifierParameter(gameObjectIdentifier); + checkParameterType(useGravity, 'boolean'); + getInstance() + .setUseGravityInternal(gameObjectIdentifier, useGravity); +} + + +/** + * Add an impulse force on the Rigidbody attached on the GameObject, using its mass. + *

Usage of all physics functions under the Physics category requires calling `apply_rigidbody` first on the applied game objects. + * + * @param gameObjectIdentifier The identifier for the GameObject that you want to add the force. + * @param x The x component of the force vector. + * @param y The y component of the force vector. + * @param z The z component of the force vector. + * @category Physics - Rigidbody + */ +export function add_impulse_force(gameObjectIdentifier : GameObjectIdentifier, x: number, y: number, z: number) : void { + checkUnityAcademyExistence(); + checkGameObjectIdentifierParameter(gameObjectIdentifier); + checkParameterType(x, 'number'); + checkParameterType(y, 'number'); + checkParameterType(z, 'number'); + getInstance() + .addImpulseForceInternal(gameObjectIdentifier, x, y, z); +} + +/** + * Removes all collider components directly attached on the given GameObject by default.
+ *
+ * You can use this function on GameObjects those you don't want them to collide with other GameObjects.
+ * For example, you may use this on the background image sprite GameObject in 2D scene. + * + * @param gameObjectIdentifier The identifier for the GameObject that you want to remove colliders for. + * @category Physics - Collision + */ +export function remove_collider_components(gameObjectIdentifier : GameObjectIdentifier) : void { + checkUnityAcademyExistence(); + checkGameObjectIdentifierParameter(gameObjectIdentifier); + getInstance() + .removeColliderComponentsInternal(gameObjectIdentifier); +} + +/** + * Set the lifecycle event function that will be called when the collider on this GameObject just starting colliding with another collider.
+ *
+ * The given function should contain two parameters. The first parameter refers to the binded GameObject and the second parameter refers to the other GameObject that collides with the binded GameObject (both parameters are GameObject identifiers).
+ * For example: `const myFunction = (self, other) => {...};` + *
+ * Note that for collision detaction to happen, for the two colliding GameObjects, at least one GameObject should have a Rigidbody / Rigidbody2D component (called `apply_rigidbody` on the GameObject). + *
+ *
+ * For more information, see + *
https://docs.unity3d.com/ScriptReference/Collider.OnCollisionEnter.html (For 3D Mode) or + *
https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnCollisionEnter2D.html (For 2D Mode) + * + * @param gameObjectIdentifier The identifier for the GameObject that you want to bind the lifecycle event function on. + * @param eventFunction The lifecycle event function for handling this event. + * @category Physics - Collision + * @category Outside Lifecycle + */ +export function on_collision_enter(gameObjectIdentifier : GameObjectIdentifier, eventFunction : Function) : void { + checkUnityAcademyExistence(); + checkGameObjectIdentifierParameter(gameObjectIdentifier); + checkParameterType(eventFunction, 'function'); + getInstance() + .setOnCollisionEnterInternal(gameObjectIdentifier, eventFunction); +} + +/** + * Set the lifecycle event function that will be called per frame when the collider on this GameObject is colliding with another collider.
+ *
+ * The given function should contain two parameters. The first parameter refers to the binded GameObject and the second parameter refers to the other GameObject that collides with the binded GameObject (both parameters are GameObject identifiers).
+ * For example: `const myFunction = (self, other) => {...};` + *
+ * Note that for collision detaction to happen, for the two colliding GameObjects, at least one GameObject should have a Rigidbody / Rigidbody2D component (called `apply_rigidbody` on the GameObject). + *
+ *
+ * For more information, see + *
https://docs.unity3d.com/ScriptReference/Collider.OnCollisionStay.html (For 3D Mode) or + *
https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnCollisionStay2D.html (For 2D Mode) + * + * @param gameObjectIdentifier The identifier for the GameObject that you want to bind the lifecycle event function on. + * @param eventFunction The lifecycle event function for handling this event. + * @category Physics - Collision + * @category Outside Lifecycle + */ +export function on_collision_stay(gameObjectIdentifier : GameObjectIdentifier, eventFunction : Function) : void { + checkUnityAcademyExistence(); + checkGameObjectIdentifierParameter(gameObjectIdentifier); + checkParameterType(eventFunction, 'function'); + getInstance() + .setOnCollisionStayInternal(gameObjectIdentifier, eventFunction); +} + +/** + * Set the lifecycle event function that will be called when the collider on this GameObject just stops colliding with another collider.
+ *
+ * The given function should contain two parameters. The first parameter refers to the binded GameObject and the second parameter refers to the other GameObject that collides with the binded GameObject (both parameters are GameObject identifiers).
+ * For example: `const myFunction = (self, other) => {...};` + *
+ * Note that for collision detaction to happen, for the two colliding GameObjects, at least one GameObject should have a Rigidbody / Rigidbody2D component (called `apply_rigidbody` on the GameObject). + *
+ *
+ * For more information, see + *
https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnCollisionExit.html (For 3D Mode) or + *
https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnCollisionExit2D.html (For 2D Mode) + * + * @param gameObjectIdentifier The identifier for the GameObject that you want to bind the lifecycle event function on. + * @param eventFunction The lifecycle event function for handling this event. + * @category Physics - Collision + * @category Outside Lifecycle + */ +export function on_collision_exit(gameObjectIdentifier : GameObjectIdentifier, eventFunction : Function) : void { + checkUnityAcademyExistence(); + checkGameObjectIdentifierParameter(gameObjectIdentifier); + checkParameterType(eventFunction, 'function'); + getInstance() + .setOnCollisionExitInternal(gameObjectIdentifier, eventFunction); +} + + +/** + * Draw a text (string) on the screen with given screen space position in the current frame.
+ * The origin of screen space is upper-left corner and the positive Y direction is downward.
+ * The drawn text will only last for one frame. You should put this under the `Update` function (or a function that is called by the `Update` function) to keep the text stays in every frame.
+ * + * @param content The string you want to display on screen. + * @param x The x coordinate of the text (in screen position). + * @param y The y coordinate of the text (in screen position). + * @param fontSize The size of the text + * @category Graphical User Interface + */ +export function gui_label(content : string, x : number, y : number, fontSize : number) : void { + checkUnityAcademyExistence(); + checkParameterType(content, 'string'); + checkParameterType(x, 'number'); + checkParameterType(y, 'number'); + checkParameterType(fontSize, 'number'); + getInstance() + .onGUI_Label(content, x, y, fontSize); +} + + +/** + * Make a button on the screen with given screen space position in the current frame. When user clicks the button, the `onClick` function will be called.
+ * The origin of screen space is upper-left corner and the positive Y direction is downward.
+ * The drawn button will only last for one frame. You should put this under the `Update` function (or a function that is called by the `Update` function) to keep the button stays in every frame. + *
+ *
+ * If this function is called by a lifecycle event function, then the `onClick` function in the fourth parameter could also be considered as a lifecycle event function.
+ * This means that you can use other functions from this module inside the `onClick` function, even though the functions are not under the `Outside Lifecycle` category.
+ * For example, the code piece below + * ``` + * import {init_unity_academy_3d, set_start, set_update, instantiate, gui_button, set_position } + * from "unity_academy"; + * init_unity_academy_3d(); + * + * const cube = instantiate("cube"); + * + * const cube_update = (gameObject) => { + * gui_button("Button", 1000, 300, ()=> + * set_position(gameObject, 0, 10, 6) // calling set_position inside the onClick function + * ); + * }; + + * set_update(cube, cube_update); + * ``` + * is correct.
+ * + * @param text The text you want to display on the button. + * @param x The x coordinate of the button (in screen position). + * @param y The y coordinate of the button (in screen position). + * @param onClick The function that will be called when user clicks the button on screen. + * @param fontSize The size of the text inside the button. + * @category Graphical User Interface + */ +export function gui_button(text : string, x: number, y : number, fontSize : number, onClick : Function) : void { + checkUnityAcademyExistence(); + checkParameterType(text, 'string'); + checkParameterType(x, 'number'); + checkParameterType(y, 'number'); + checkParameterType(fontSize, 'number'); + checkParameterType(onClick, 'function'); + getInstance() + .onGUI_Button(text, x, y, fontSize, onClick); +} + +/** + * Get the main camera following target GameObject (an invisible GameObject) to use it to control the position of the main camera with the default camera controller.

+ * In 3D mode, the default camera controller behaves as third-person camera controller, and the center to follow is the following target GameObject. Also, Unity Academy will automatically set the rotation of this "following target" to the same rotation as the current main camera's rotation to let you get the main camera's rotation.
+ * In 2D mode, the default camera controller will follow the target GameObject to move, along with a position delta value that you can adjust with the arrow keys on your keyboard.

+ * The main camera following target GameObject is a primitive GameObject. This means that you are not allowed to destroy it and/or instantiate it during runtime. Multiple calls to this function will return GameObject identifiers that refer to the same primitive GameObject.
+ *
+ *
If default main camera controllers are disabled (you have called `request_for_main_camera_control`), then the following target GameObject is useless. + * + * @return The GameObject idenfitier for the main camera following target GameObject. + * @category Camera + * @category Outside Lifecycle + */ +export function get_main_camera_following_target() : GameObjectIdentifier { + checkUnityAcademyExistence(); + return getInstance() + .getGameObjectIdentifierForPrimitiveGameObject('MainCameraFollowingTarget'); +} + + +/** + * Request for main camera control and get a GameObject identifier that can directly be used to control the main camera's position and rotation.
+ *
+ * When you request for the direct control over main camera with this function, the default camera controllers will be disabled, thus the GameObject identifier returned by `get_main_camera_following_target` will become useless, as you can no longer use the default main camera controllers.
+ *
+ * This function is for totally customizing the position and rotation of the main camera. If you'd like to simplify the camera controlling with the help of the default camera controllers in Unity Academy, please consider use `get_main_camera_following_target` function.
+ * + * @return The GameObject identifier that can directly be used to control the main camera's position and rotation + * @category Camera + * @category Outside Lifecycle + */ +export function request_for_main_camera_control() : GameObjectIdentifier { + checkUnityAcademyExistence(); + return getInstance() + .requestForMainCameraControlInternal(); +} + +/** + * Set a custom property with name and value on a GameObject + * + * @param gameObjectIdentifier The identifier for the GameObject that you want to set the custom property on. + * @param propName The name (a string) of the custom property + * @param value The value of the custom property, can be anything you want + * + * @category Common + */ +export function set_custom_prop(gameObjectIdentifier : GameObjectIdentifier, propName : string, value : any) : void { + checkUnityAcademyExistence(); + checkGameObjectIdentifierParameter(gameObjectIdentifier); + checkParameterType(propName, 'string'); + getInstance() + .setCustomPropertyInternal(gameObjectIdentifier, propName, value); +} + +/** + * Get the value of a custom property with its name on a GameObject + * + * @param gameObjectIdentifier The identifier for the GameObject that you want to get the custom property on. + * @param propName The name (a string) of the custom property + * + * @return The value of the custom property with the given name on the given GameObject. If the property value is not set, this function will return `undefined`. + * + * @category Common + */ +export function get_custom_prop(gameObjectIdentifier : GameObjectIdentifier, propName : string) : any { + checkUnityAcademyExistence(); + checkGameObjectIdentifierParameter(gameObjectIdentifier); + checkParameterType(propName, 'string'); + return getInstance() + .getCustomPropertyInternal(gameObjectIdentifier, propName); +} + +/** + * Create a 3D vector + * @param x The x component of the new vector + * @param y The y component of the new vector + * @param z The z component of the new vector + * + * @return The 3D vector (x, y, z) + * + * @category Maths + */ +export function vector3(x : number, y : number, z : number) : Vector3 { + checkParameterType(x, 'number'); + checkParameterType(y, 'number'); + checkParameterType(z, 'number'); + return makeVector3D(x, y, z); +} + +/** + * Get the X component of a 3D vector + * @param vector The 3D vector + * + * @return The X component of the given vector + * + * @category Maths + */ +export function get_x(vector : Vector3) : number { + checkVector3Parameter(vector); + return vector.x; +} + +/** + * Get the Y component of a 3D vector + * @param vector The 3D vector + * + * @return The Y component of the given vector + * + * @category Maths + */ +export function get_y(vector : Vector3) : number { + checkVector3Parameter(vector); + return vector.y; +} + +/** + * Get the Z component of a 3D vector + * @param vector The 3D vector + * + * @return The Z component of the given vector + * + * @category Maths + */ +export function get_z(vector : Vector3) : number { + checkVector3Parameter(vector); + return vector.z; +} + +/** + * Scales a 3D vector with the given factor. + * @param vector The original vector + * @param factor The scaling factor. + * @return The scaled vector + * + * @category Maths + */ +export function scale_vector(vector : Vector3, factor : number) : Vector3 { + checkVector3Parameter(vector); + checkParameterType(factor, 'number'); + return scaleVector(vector, factor); +} + +/** + * Add two 3D vectors together. + * @param vectorA The first vector + * @param vectorB The second vector. + * @return The sum of the two vectors + * + * @category Maths + */ +export function add_vector(vectorA : Vector3, vectorB : Vector3) : Vector3 { + checkVector3Parameter(vectorA); + checkVector3Parameter(vectorB); + return addVector(vectorA, vectorB); +} + +/** + * Calcuate the dot product of two 3D vectors. + * @param vectorA The first vector + * @param vectorB The second vector. + * @return The dot product + * + * @category Maths + */ +export function dot(vectorA : Vector3, vectorB : Vector3) : number { + checkVector3Parameter(vectorA); + checkVector3Parameter(vectorB); + return dotProduct(vectorA, vectorB); +} + +/** + * Calcuate the cross product of two 3D vectors. + * @param vectorA The first vector + * @param vectorB The second vector. + * @return The cross product + * + * @category Maths + */ +export function cross(vectorA : Vector3, vectorB : Vector3) : Vector3 { + checkVector3Parameter(vectorA); + checkVector3Parameter(vectorB); + return crossProduct(vectorA, vectorB); +} + +/** + * Normalize a vector. The returned vector will have the same direction as the original vector but have a magnitude of 1. + * @param vector The original vector + * @return The normalized vector. This function will return a zero vector if the original vector is a zero vector. + * + * @category Maths + */ +export function normalize(vector : Vector3) : Vector3 { + checkVector3Parameter(vector); + return normalizeVector(vector); +} + +/** + * Calcuate the magnitude of a vector + * @param vector The vector + * @return The magnitude of the vector + * + * @category Maths + */ +export function magnitude(vector : Vector3) : number { + checkVector3Parameter(vector); + return vectorMagnitude(vector); +} + +/** + * Get the zero vector + * @return The zero vector + * + * @category Maths + */ +export function zero_vector() : Vector3 { + return zeroVector(); +} + +/** + * Calcuate the distance between two 3D points + * + * @param pointA The first point + * @param pointB The second point + * + * @return The value of the distance between the two points + * + * @category Maths + */ +export function point_distance(pointA : Vector3, pointB : Vector3) : number { + checkVector3Parameter(pointA); + checkVector3Parameter(pointB); + return pointDistance(pointA, pointB); +} diff --git a/src/bundles/unity_academy/index.ts b/src/bundles/unity_academy/index.ts index 146e9ef85..f348c7d75 100644 --- a/src/bundles/unity_academy/index.ts +++ b/src/bundles/unity_academy/index.ts @@ -1,139 +1,139 @@ -/** - * A module that allows students to program with Unity Engine in either 2-D or 3-D scene in Source Academy. - *
- * Makes use of "Unity Academy Embedded WebGL Frontend" (also made by me) to work together.
- *
- * Code Examples: Click Here
- * Prefab Information: Click Here
- * User Agreement: Click Here
- *
- * Note that you need to use this module with a 'Native' variant of Source language, otherwise you may get strange errors. - *
- *
- * Lifecycle Event Functions
- * ● Unity Academy has its own internal loop on students' GameObject lifecycle.
- * ● Lifecycle event functions are functions that are not supposed to be called by Source Academy's default evaluator, instead they are called by Unity Academy at certain time in the GameObject's lifecycle.
- * ● Currently there are five types of Unity Academy lifecycle event function: `Start`, `Update` and three collision detaction functions.
- * ● Both `Start` and `Update` functions should be a student-side function object with only one parameter, which automatically refers to the GameObject that is binded with the function when Unity Academy calls the function. So different GameObject instances can share the same lifecycle event function together.
- * For example: - * ``` - * function my_start(gameObject){...}; - * const my_update = (gameObject) => {...}; - * ``` - * ● The functions `set_start` and `set_update` in this module can be used to set one GameObject's `Start` and `Update` functions
- * ● ===>`Start` is called only for one time after the GameObject is created (instantiated) and before its first `Update` call.
- * ● ===>`Update` is called on every GameObject once in every frame after `Start` have been called.
- * ● For the three collision detaction lifecycle event functions, please refer to `on_collision_enter`, `on_collision_stay` and `on_collision_exit` functions under the `Physics - Collision` category.
- * ● You can not bind multiple lifecycle functions of the same type to the same GameObject. For example, you can't bind two `Update` functions to the same GameObject. In this case, previously binded `Update` functions will be overwritten by the latest binded `Update` function.

- * [IMPORTANT] All functions in this module that is NOT under the "Outside Lifecycle" or "Maths" category need to call by Unity Academy lifecycle event functions (directly or intermediately) to work correctly. Failure to follow this rule may lead to noneffective or incorrect behaviors of the functions and may crash the Unity Academy instance.
- * For example: - * ``` - * import {init_unity_academy_3d, instantiate, set_start, set_update, set_position, set_rotation_euler} from 'unity_academy'; - * init_unity_academy_3d(); // Correct, since this function is under the "Outside Lifecycle" category and it can be called outside lifecycle event functions. - * const cube = instantiate("cube"); // Correct - * set_position(cube, 1, 2, 3); // WRONG, since set_position should ONLY be called inside a lifecycle event function - * function my_start(gameObject){ // A sample Start event function which will be binded to cube by my_start later. - * set_position(gameObject, 1, 2, 3); // Correct, since the call to set_position is inside a lifecycle event function - * something_else(gameObject); - * } - * function something_else(obj){ - * set_rotation_euler(obj, 0, 45, 45); // Correct, since the function "set_rotation_euler" is intermediately called by the lifecycle event function "my_start" through "something_else" - * } - * set_start(cube, my_start); // Correct - * ``` - *
- * When any runtime errors happen in lifecycle event functions, they will be displayed in Unity Academy's information page and the lifecycle event function that caused the errors will automatically unbind from the GameObject. - *
- *
- * Input Function Key Codes Accepts A-Z, a-z and "LeftMouseBtn" / "RightMouseBtn" / "MiddleMouseBtn" / "LeftShift" / "RightShift" - *
- *
- * Key differences between 2D and 3D mode
- * ● In 2D mode the main camera renders the scene in orthographic mode (Z position is used to determine sequence when sprites overlapping), whereas in 3D mode the camera renders the scene in perspective mode. Moreover, 3D mode and 2D mode have different kinds of default camera controller.
- * ● In 2D mode, due to the loss of one dimension, for some values and axis in 3D coordinate system, they sometimes behaves differently with 3D mode. For example, some coordinate values is ignored in 2D mode. Whereas in 3D mode you can use the fully-supported 3D coordinate system. (Actually, in general, Unity Academy just simply uses 3D space and an orthographic camera to simulate 2D space.)
- * ● In 2D mode you need to use instantiate_sprite to create new GameObjects, whereas in 3D mode you need to use instantiate to create new GameObjects.
- * ● In 2D mode Unity Academy will use Rigidbody2D and 2D colliders like BoxCollider2D for physics engine (certain values for 3D physics engine in 2D physics engine is ignored and will always be zero), whereas in 3D mode Unity Academy use regular 3D rigidbody and 3D colliders to simulate 3D physics.
- * ● In 2D mode playing frame animations for sprite GameObjects is currently unavailable, whereas in 3D mode you need to use play_animator_state to play 3D animations.
- *
- *
- * Space and Coordinates
- * ● 3D: Uses left-hand coordinate system: +X denotes rightward, +Y denotes upward, +Z denotes forward.
- * ● 2D: +X denotes rightward, +Y denotes upward, Z value actually still exists and usually used for determining sequence of overlapping 2D GameObjects like sprites. - *
- *
- * Unity Academy Camera Control (only available when the default camera controllers are being used)
- * ● In 2D mode:
- * ● 'W'/'A'/'S'/'D' : Moves the main camera around
- * ● '=' (equals key) : Resets the main camera to its initial position
- * ● In 3D mode:
- * ● '=' (equals key) : Resets the main camera to its initial position and rotation
- * ● Left Mouse Button : Hold to rotate the main camera in a faster speed
- * ● Mouse Scrollwheel : Zoom in / out - * @module unity_academy - * @author Wang Zihan - */ - - -export { - init_unity_academy_2d, - init_unity_academy_3d, - same_gameobject, - set_start, - set_update, - instantiate, - instantiate_sprite, - instantiate_empty, - destroy, - delta_time, - get_position, - set_position, - get_rotation_euler, - set_rotation_euler, - get_scale, - set_scale, - translate_world, - translate_local, - rotate_world, - copy_position, - copy_rotation, - copy_scale, - look_at, - gameobject_distance, - get_key_down, - get_key, - get_key_up, - play_animator_state, - apply_rigidbody, - get_mass, - set_mass, - set_drag, - set_angular_drag, - get_velocity, - set_velocity, - get_angular_velocity, - set_angular_velocity, - add_impulse_force, - set_use_gravity, - remove_collider_components, - on_collision_enter, - on_collision_stay, - on_collision_exit, - gui_label, - gui_button, - get_main_camera_following_target, - request_for_main_camera_control, - set_custom_prop, - get_custom_prop, - vector3, - get_x, - get_y, - get_z, - scale_vector, - add_vector, - dot, - cross, - normalize, - magnitude, - zero_vector, - point_distance, -} from './functions'; +/** + * A module that allows students to program with Unity Engine in either 2-D or 3-D scene in Source Academy. + *
+ * Makes use of "Unity Academy Embedded WebGL Frontend" (also made by me) to work together.
+ *
+ * Code Examples: Click Here
+ * Prefab Information: Click Here
+ * User Agreement: Click Here
+ *
+ * Note that you need to use this module with a 'Native' variant of Source language, otherwise you may get strange errors. + *
+ *
+ * Lifecycle Event Functions
+ * ● Unity Academy has its own internal loop on students' GameObject lifecycle.
+ * ● Lifecycle event functions are functions that are not supposed to be called by Source Academy's default evaluator, instead they are called by Unity Academy at certain time in the GameObject's lifecycle.
+ * ● Currently there are five types of Unity Academy lifecycle event function: `Start`, `Update` and three collision detaction functions.
+ * ● Both `Start` and `Update` functions should be a student-side function object with only one parameter, which automatically refers to the GameObject that is binded with the function when Unity Academy calls the function. So different GameObject instances can share the same lifecycle event function together.
+ * For example: + * ``` + * function my_start(gameObject){...}; + * const my_update = (gameObject) => {...}; + * ``` + * ● The functions `set_start` and `set_update` in this module can be used to set one GameObject's `Start` and `Update` functions
+ * ● ===>`Start` is called only for one time after the GameObject is created (instantiated) and before its first `Update` call.
+ * ● ===>`Update` is called on every GameObject once in every frame after `Start` have been called.
+ * ● For the three collision detaction lifecycle event functions, please refer to `on_collision_enter`, `on_collision_stay` and `on_collision_exit` functions under the `Physics - Collision` category.
+ * ● You can not bind multiple lifecycle functions of the same type to the same GameObject. For example, you can't bind two `Update` functions to the same GameObject. In this case, previously binded `Update` functions will be overwritten by the latest binded `Update` function.

+ * [IMPORTANT] All functions in this module that is NOT under the "Outside Lifecycle" or "Maths" category need to call by Unity Academy lifecycle event functions (directly or intermediately) to work correctly. Failure to follow this rule may lead to noneffective or incorrect behaviors of the functions and may crash the Unity Academy instance.
+ * For example: + * ``` + * import {init_unity_academy_3d, instantiate, set_start, set_update, set_position, set_rotation_euler} from 'unity_academy'; + * init_unity_academy_3d(); // Correct, since this function is under the "Outside Lifecycle" category and it can be called outside lifecycle event functions. + * const cube = instantiate("cube"); // Correct + * set_position(cube, 1, 2, 3); // WRONG, since set_position should ONLY be called inside a lifecycle event function + * function my_start(gameObject){ // A sample Start event function which will be binded to cube by my_start later. + * set_position(gameObject, 1, 2, 3); // Correct, since the call to set_position is inside a lifecycle event function + * something_else(gameObject); + * } + * function something_else(obj){ + * set_rotation_euler(obj, 0, 45, 45); // Correct, since the function "set_rotation_euler" is intermediately called by the lifecycle event function "my_start" through "something_else" + * } + * set_start(cube, my_start); // Correct + * ``` + *
+ * When any runtime errors happen in lifecycle event functions, they will be displayed in Unity Academy's information page and the lifecycle event function that caused the errors will automatically unbind from the GameObject. + *
+ *
+ * Input Function Key Codes Accepts A-Z, a-z and "LeftMouseBtn" / "RightMouseBtn" / "MiddleMouseBtn" / "LeftShift" / "RightShift" + *
+ *
+ * Key differences between 2D and 3D mode
+ * ● In 2D mode the main camera renders the scene in orthographic mode (Z position is used to determine sequence when sprites overlapping), whereas in 3D mode the camera renders the scene in perspective mode. Moreover, 3D mode and 2D mode have different kinds of default camera controller.
+ * ● In 2D mode, due to the loss of one dimension, for some values and axis in 3D coordinate system, they sometimes behaves differently with 3D mode. For example, some coordinate values is ignored in 2D mode. Whereas in 3D mode you can use the fully-supported 3D coordinate system. (Actually, in general, Unity Academy just simply uses 3D space and an orthographic camera to simulate 2D space.)
+ * ● In 2D mode you need to use instantiate_sprite to create new GameObjects, whereas in 3D mode you need to use instantiate to create new GameObjects.
+ * ● In 2D mode Unity Academy will use Rigidbody2D and 2D colliders like BoxCollider2D for physics engine (certain values for 3D physics engine in 2D physics engine is ignored and will always be zero), whereas in 3D mode Unity Academy use regular 3D rigidbody and 3D colliders to simulate 3D physics.
+ * ● In 2D mode playing frame animations for sprite GameObjects is currently unavailable, whereas in 3D mode you need to use play_animator_state to play 3D animations.
+ *
+ *
+ * Space and Coordinates
+ * ● 3D: Uses left-hand coordinate system: +X denotes rightward, +Y denotes upward, +Z denotes forward.
+ * ● 2D: +X denotes rightward, +Y denotes upward, Z value actually still exists and usually used for determining sequence of overlapping 2D GameObjects like sprites. + *
+ *
+ * Unity Academy Camera Control (only available when the default camera controllers are being used)
+ * ● In 2D mode:
+ * ● 'W'/'A'/'S'/'D' : Moves the main camera around
+ * ● '=' (equals key) : Resets the main camera to its initial position
+ * ● In 3D mode:
+ * ● '=' (equals key) : Resets the main camera to its initial position and rotation
+ * ● Left Mouse Button : Hold to rotate the main camera in a faster speed
+ * ● Mouse Scrollwheel : Zoom in / out + * @module unity_academy + * @author Wang Zihan + */ + + +export { + init_unity_academy_2d, + init_unity_academy_3d, + same_gameobject, + set_start, + set_update, + instantiate, + instantiate_sprite, + instantiate_empty, + destroy, + delta_time, + get_position, + set_position, + get_rotation_euler, + set_rotation_euler, + get_scale, + set_scale, + translate_world, + translate_local, + rotate_world, + copy_position, + copy_rotation, + copy_scale, + look_at, + gameobject_distance, + get_key_down, + get_key, + get_key_up, + play_animator_state, + apply_rigidbody, + get_mass, + set_mass, + set_drag, + set_angular_drag, + get_velocity, + set_velocity, + get_angular_velocity, + set_angular_velocity, + add_impulse_force, + set_use_gravity, + remove_collider_components, + on_collision_enter, + on_collision_stay, + on_collision_exit, + gui_label, + gui_button, + get_main_camera_following_target, + request_for_main_camera_control, + set_custom_prop, + get_custom_prop, + vector3, + get_x, + get_y, + get_z, + scale_vector, + add_vector, + dot, + cross, + normalize, + magnitude, + zero_vector, + point_distance, +} from './functions'; diff --git a/src/bundles/wasm/index.ts b/src/bundles/wasm/index.ts index 89cbef8e9..3ba88ac3f 100644 --- a/src/bundles/wasm/index.ts +++ b/src/bundles/wasm/index.ts @@ -1,87 +1,87 @@ -/** - * WebAssembly Module for Source Academy, for developing with WebAssembly Text and Binaries. - * - * Examples: - * Simple 'add' library: - * ```wat - * import {wcompile, wrun} from "wasm"; - * - * const program = ` - * (module - * (func (param f64) (param f64) (result f64) - * local.get 0 - * local.get 1 - * f64.add) - * (export "add" (func 0)) - * ) - * `; - * - * - * const binary = wcompile(program); - * const exports = wrun(binary); - * - * display(binary); - * display_list(exports); - * - * const add_fn = head(tail(exports)); - * - * display(add_fn(10, 35)); - * ``` - * - * 'Calculator Language': - * ```wat - * // Type your program in here! - * import {wcompile, wrun} from "wasm"; - * - * const program = ` - * (module - * (func (param f64) (param f64) (result f64) - * local.get 0 - * local.get 1 - * f64.add) - * (func (param f64) (param f64) (result f64) - * local.get 0 - * local.get 1 - * f64.sub) - * (func (param f64) (param f64) (result f64) - * local.get 0 - * local.get 1 - * f64.mul) - * (func (param f64) (param f64) (result f64) - * local.get 0 - * local.get 1 - * f64.div) - * (export "add" (func 0)) - * (export "sub" (func 1)) - * (export "mul" (func 2)) - * (export "div" (func 3)) - * )`; - * - * - * const encoding = wcompile(program); - * let exports = wrun(encoding); - * - * display_list(exports); - * - * const div = head(tail(exports)); - * exports = tail(tail(exports)); - * const mul = head(tail(exports)); - * exports = tail(tail(exports)); - * const sub = head(tail(exports)); - * exports = tail(tail(exports)); - * const add = head(tail(exports)); - * - * display(div(10, -35)); - * display(mul(10, 12347)); - * display(sub(12347, 12347)); - * display(add(10, 0)); - * ``` - * - * - * @module wasm - * @author Kim Yongbeom - */ -export { - wcompile, - wrun, -} from './wabt'; +/** + * WebAssembly Module for Source Academy, for developing with WebAssembly Text and Binaries. + * + * Examples: + * Simple 'add' library: + * ```wat + * import {wcompile, wrun} from "wasm"; + * + * const program = ` + * (module + * (func (param f64) (param f64) (result f64) + * local.get 0 + * local.get 1 + * f64.add) + * (export "add" (func 0)) + * ) + * `; + * + * + * const binary = wcompile(program); + * const exports = wrun(binary); + * + * display(binary); + * display_list(exports); + * + * const add_fn = head(tail(exports)); + * + * display(add_fn(10, 35)); + * ``` + * + * 'Calculator Language': + * ```wat + * // Type your program in here! + * import {wcompile, wrun} from "wasm"; + * + * const program = ` + * (module + * (func (param f64) (param f64) (result f64) + * local.get 0 + * local.get 1 + * f64.add) + * (func (param f64) (param f64) (result f64) + * local.get 0 + * local.get 1 + * f64.sub) + * (func (param f64) (param f64) (result f64) + * local.get 0 + * local.get 1 + * f64.mul) + * (func (param f64) (param f64) (result f64) + * local.get 0 + * local.get 1 + * f64.div) + * (export "add" (func 0)) + * (export "sub" (func 1)) + * (export "mul" (func 2)) + * (export "div" (func 3)) + * )`; + * + * + * const encoding = wcompile(program); + * let exports = wrun(encoding); + * + * display_list(exports); + * + * const div = head(tail(exports)); + * exports = tail(tail(exports)); + * const mul = head(tail(exports)); + * exports = tail(tail(exports)); + * const sub = head(tail(exports)); + * exports = tail(tail(exports)); + * const add = head(tail(exports)); + * + * display(div(10, -35)); + * display(mul(10, 12347)); + * display(sub(12347, 12347)); + * display(add(10, 0)); + * ``` + * + * + * @module wasm + * @author Kim Yongbeom + */ +export { + wcompile, + wrun, +} from './wabt'; diff --git a/src/bundles/wasm/wabt.ts b/src/bundles/wasm/wabt.ts index bdf5d5a0f..a108fd1cf 100644 --- a/src/bundles/wasm/wabt.ts +++ b/src/bundles/wasm/wabt.ts @@ -1,23 +1,23 @@ -import { compile } from 'source-academy-wabt'; -import { objectToLinkedList } from 'source-academy-utils'; - -/** - * Compile a (hopefully valid) WebAssembly Text module to binary. - * @param program program to compile - * @returns an array of 8-bit unsigned integers. - */ -export const wcompile = (program: string) => Array.from(compile(program)); - -/** - * Run a compiled WebAssembly Binary Buffer. - * @param buffer an array of 8-bit unsigned integers to run - * @returns a linked list of exports that the relevant WebAssembly Module exports - */ -export const wrun = (buffer: number[] | Uint8Array) => { - if (buffer instanceof Array) { - buffer = new Uint8Array(buffer); - } - - const exps = new WebAssembly.Instance(new WebAssembly.Module(buffer)).exports; - return objectToLinkedList(exps); -}; +import { compile } from 'source-academy-wabt'; +import { objectToLinkedList } from 'source-academy-utils'; + +/** + * Compile a (hopefully valid) WebAssembly Text module to binary. + * @param program program to compile + * @returns an array of 8-bit unsigned integers. + */ +export const wcompile = (program: string) => Array.from(compile(program)); + +/** + * Run a compiled WebAssembly Binary Buffer. + * @param buffer an array of 8-bit unsigned integers to run + * @returns a linked list of exports that the relevant WebAssembly Module exports + */ +export const wrun = (buffer: number[] | Uint8Array) => { + if (buffer instanceof Array) { + buffer = new Uint8Array(buffer); + } + + const exps = new WebAssembly.Instance(new WebAssembly.Module(buffer)).exports; + return objectToLinkedList(exps); +}; diff --git a/src/jest.config.js b/src/jest.config.js index cc226a53a..e5dfb1514 100644 --- a/src/jest.config.js +++ b/src/jest.config.js @@ -1,17 +1,17 @@ -export default { - displayName: 'Modules', - preset: 'ts-jest', - testEnvironment: 'jsdom', - modulePaths: [ - '', - ], - // Module Name settings required to make chalk work with jest - moduleNameMapper: { - '#(.*)': '/node_modules/$1', - // 'lowdb': '/node_modules/lowdb/lib', - // 'steno': '/node_modules/steno/lib', - }, - transformIgnorePatterns: [ - 'node_modules/(?!=chalk)/', - ], -}; +export default { + displayName: 'Modules', + preset: 'ts-jest', + testEnvironment: 'jsdom', + modulePaths: [ + '', + ], + // Module Name settings required to make chalk work with jest + moduleNameMapper: { + '#(.*)': '/node_modules/$1', + // 'lowdb': '/node_modules/lowdb/lib', + // 'steno': '/node_modules/steno/lib', + }, + transformIgnorePatterns: [ + 'node_modules/(?!=chalk)/', + ], +}; diff --git a/src/tabs/ArcadeTwod/index.tsx b/src/tabs/ArcadeTwod/index.tsx index 8c012be50..ebf476d16 100644 --- a/src/tabs/ArcadeTwod/index.tsx +++ b/src/tabs/ArcadeTwod/index.tsx @@ -1,180 +1,180 @@ -import React from 'react'; -import Phaser from 'phaser'; -import { type DebuggerContext } from '../../typings/type_helpers'; -import { Button, ButtonGroup } from '@blueprintjs/core'; -import { IconNames } from '@blueprintjs/icons'; - -/** - * Game display tab for user-created games made with the Arcade2D module. - * - * @module arcade_2d - * @author Titus Chew Xuan Jun - * @author Xenos Fiorenzo Anong - */ - -/** - * React Component props for the Tab. - */ -type Props = { - children?: never; - className?: never; - context?: any; -}; - -/** - * React Component state for the Game. - */ -type GameState = { - game?: Phaser.Game; -}; - -/** - * React component state for the UI buttons. - */ -type UiState = { - isPaused: boolean; -}; - -/** - * React component props for the UI buttons. - */ -type UiProps = { - children?: never; - className?: never; - context?: any; - onClick: (b: boolean) => void; -}; - -/** - * Component for UI buttons within tab e.g play/pause. - */ -class A2dUiButtons extends React.Component { - constructor(props) { - super(props); - this.state = { - isPaused: false, - }; - } - - toggleGamePause(): void { - const currentState = this.state.isPaused; - this.props.onClick(!currentState); - this.setState({ isPaused: !currentState }); - } - - public render() { - return ( - - - -
- - - -
- ); - - const sliders = ( -
- - -
- -
-
-
- ); - - return ( - <> -
- { - this.canvas = r; - }} - /> -
-
- {buttons} - {sliders} - -
- - ); - } -} +import { Button, Icon, Slider, Switch } from '@blueprintjs/core'; +import { IconNames } from '@blueprintjs/icons'; +import { Tooltip2 } from '@blueprintjs/popover2'; +import React from 'react'; +import { type AnimatedCurve } from '../../bundles/curve/types'; +import WebGLCanvas from '../common/webgl_canvas'; + +type Props = { + animation: AnimatedCurve; +}; + +type State = { + /** Timestamp of the animation */ + animTimestamp: number; + + /** Boolean value indicating if the animation is playing */ + isPlaying: boolean; + + /** Previous value of `isPlaying` */ + wasPlaying: boolean; + + /** Boolean value indicating if auto play is selected */ + autoPlay: boolean; + + /** Curve Angle */ + curveAngle: number; +}; + +export default class Curve3DAnimationCanvas extends React.Component< +Props, +State +> { + private canvas: HTMLCanvasElement | null; + + /** + * The duration of one frame in milliseconds + */ + private readonly frameDuration: number; + + /** + * The duration of the entire animation + */ + private readonly animationDuration: number; + + /** + * Last timestamp since the previous `requestAnimationFrame` call + */ + private callbackTimestamp: number | null; + + constructor(props: Props | Readonly) { + super(props); + + this.state = { + animTimestamp: 0, + isPlaying: false, + wasPlaying: false, + autoPlay: true, + curveAngle: 0, + }; + + this.canvas = null; + this.frameDuration = 1000 / props.animation.fps; + this.animationDuration = Math.round(props.animation.duration * 1000); + this.callbackTimestamp = null; + } + + public componentDidMount() { + this.drawFrame(); + } + + /** + * Call this to actually draw a frame onto the canvas + */ + private drawFrame = () => { + if (this.canvas) { + const frame = this.props.animation.getFrame( + this.state.animTimestamp / 1000, + ); + frame.draw(this.canvas); + } + }; + + private reqFrame = () => requestAnimationFrame(this.animationCallback); + + /** + * Callback to use with `requestAnimationFrame` + */ + private animationCallback = (timeInMs: number) => { + if (!this.canvas || !this.state.isPlaying) return; + + if (!this.callbackTimestamp) { + this.callbackTimestamp = timeInMs; + this.drawFrame(); + this.reqFrame(); + return; + } + + const currentFrame = timeInMs - this.callbackTimestamp; + + if (currentFrame < this.frameDuration) { + // Not time to draw a new frame yet + this.reqFrame(); + return; + } + + this.callbackTimestamp = timeInMs; + if (this.state.animTimestamp >= this.animationDuration) { + // Animation has ended + if (this.state.autoPlay) { + // If autoplay is active, reset the animation + this.setState( + { + animTimestamp: 0, + }, + this.reqFrame, + ); + } else { + // Otherwise, stop the animation + this.setState( + { + isPlaying: false, + }, + () => { + this.callbackTimestamp = null; + }, + ); + } + } else { + // Animation hasn't ended, so just draw the next frame + this.drawFrame(); + this.setState( + (prev) => ({ + animTimestamp: prev.animTimestamp + currentFrame, + }), + this.reqFrame, + ); + } + }; + + /** + * Play button click handler + */ + private onPlayButtonClick = () => { + if (this.state.isPlaying) { + this.setState( + { + isPlaying: false, + }, + () => { + this.callbackTimestamp = null; + }, + ); + } else { + this.setState( + { + isPlaying: true, + }, + this.reqFrame, + ); + } + }; + + /** + * Reset button click handler + */ + private onResetButtonClick = () => { + this.setState( + { + animTimestamp: 0, + }, + () => { + if (this.state.isPlaying) this.reqFrame(); + else this.drawFrame(); + }, + ); + }; + + /** + * Slider value change handler + * @param newValue New value of the slider + */ + private onTimeSliderChange = (newValue: number) => { + this.callbackTimestamp = null; + this.setState( + (prev) => ({ + wasPlaying: prev.isPlaying, + isPlaying: false, + animTimestamp: newValue, + }), + this.drawFrame, + ); + }; + + /** + * Handler triggered when the slider is clicked off + */ + private onTimeSliderRelease = () => { + this.setState( + (prev) => ({ + isPlaying: prev.wasPlaying, + }), + () => { + if (!this.state.isPlaying) { + this.callbackTimestamp = null; + } else { + this.reqFrame(); + } + }, + ); + }; + + private onAngleSliderChange = (newAngle: number) => { + this.setState( + { + curveAngle: newAngle, + }, + () => { + this.props.animation.angle = newAngle; + if (this.state.isPlaying) this.reqFrame(); + else this.drawFrame(); + }, + ); + }; + + /** + * Auto play switch handler + */ + private autoPlaySwitchChanged = () => { + this.setState((prev) => ({ + autoPlay: !prev.autoPlay, + })); + }; + + public render() { + const buttons = ( +
+
+ + + +
+ + + +
+ ); + + const sliders = ( +
+ + +
+ +
+
+
+ ); + + return ( + <> +
+ { + this.canvas = r; + }} + /> +
+
+ {buttons} + {sliders} + +
+ + ); + } +} diff --git a/src/tabs/Curve/curve_canvas3d.tsx b/src/tabs/Curve/curve_canvas3d.tsx index cae10ae36..8f68b961d 100644 --- a/src/tabs/Curve/curve_canvas3d.tsx +++ b/src/tabs/Curve/curve_canvas3d.tsx @@ -1,183 +1,183 @@ -import { Slider, Button, Icon } from '@blueprintjs/core'; -import { IconNames } from '@blueprintjs/icons'; -import React from 'react'; -import type { CurveDrawn } from '../../bundles/curve/curves_webgl'; -import WebGLCanvas from '../common/webgl_canvas'; - -type State = { - /** - * Slider component reflects this value. This value is also passed in as - * argument to render curves. - */ - rotationAngle: number; - - /** - * Set to true by default. Slider updates this value to false when interacted - * with. Recursive `autoRotate()` checks for this value to decide whether to - * stop recursion. Button checks for this value to decide whether clicking the - * button takes effect, for countering spam-clicking. - */ - isRotating: boolean; - - displayAngle: boolean; -}; - -type Props = { - curve: CurveDrawn; -}; - -/** - * 3D Version of the CurveCanvas to include the rotation angle slider - * and play button - */ -export default class CurveCanvas3D extends React.Component { - private $canvas: HTMLCanvasElement | null; - - constructor(props) { - super(props); - - this.$canvas = null; - this.state = { - rotationAngle: 0, - isRotating: false, - displayAngle: false, - }; - } - - public componentDidMount() { - if (this.$canvas) { - this.props.curve.init(this.$canvas); - this.props.curve.redraw((this.state.rotationAngle / 180) * Math.PI); - } - } - - /** - * Event handler for slider component. Updates the canvas for any change in - * rotation. - * - * @param newValue new rotation angle - */ - private onSliderChangeHandler = (newValue: number) => { - this.setState( - { - rotationAngle: newValue, - isRotating: false, - displayAngle: true, - }, - () => { - if (this.$canvas) { - this.props.curve.redraw((newValue / 180) * Math.PI); - } - }, - ); - }; - - /** - * Event handler for play button. Starts automated rotation by calling - * `autoRotate()`. - */ - private onClickHandler = () => { - if (!this.$canvas) return; - - this.setState( - (prevState) => ({ - isRotating: !prevState.isRotating, - }), - () => { - if (this.state.isRotating) { - this.autoRotate(); - } - }, - ); - }; - - /** - * Environment where `requestAnimationFrame` is called. - */ - private autoRotate = () => { - if (this.$canvas && this.state.isRotating) { - this.setState( - (prevState) => ({ - ...prevState, - rotationAngle: - prevState.rotationAngle >= 360 ? 0 : prevState.rotationAngle + 2, - }), - () => { - this.props.curve.redraw((this.state.rotationAngle / 180) * Math.PI); - window.requestAnimationFrame(this.autoRotate); - }, - ); - } - }; - - private onTextBoxChange = (event) => { - const angle = parseFloat(event.target.value); - this.setState( - () => ({ rotationAngle: angle }), - () => { - if (this.$canvas) { - this.props.curve.redraw((angle / 180) * Math.PI); - } - }, - ); - }; - - public render() { - return ( -
- { - this.$canvas = r; - }} - /> -
- - - -
-
- ); - } -} +import { Slider, Button, Icon } from '@blueprintjs/core'; +import { IconNames } from '@blueprintjs/icons'; +import React from 'react'; +import type { CurveDrawn } from '../../bundles/curve/curves_webgl'; +import WebGLCanvas from '../common/webgl_canvas'; + +type State = { + /** + * Slider component reflects this value. This value is also passed in as + * argument to render curves. + */ + rotationAngle: number; + + /** + * Set to true by default. Slider updates this value to false when interacted + * with. Recursive `autoRotate()` checks for this value to decide whether to + * stop recursion. Button checks for this value to decide whether clicking the + * button takes effect, for countering spam-clicking. + */ + isRotating: boolean; + + displayAngle: boolean; +}; + +type Props = { + curve: CurveDrawn; +}; + +/** + * 3D Version of the CurveCanvas to include the rotation angle slider + * and play button + */ +export default class CurveCanvas3D extends React.Component { + private $canvas: HTMLCanvasElement | null; + + constructor(props) { + super(props); + + this.$canvas = null; + this.state = { + rotationAngle: 0, + isRotating: false, + displayAngle: false, + }; + } + + public componentDidMount() { + if (this.$canvas) { + this.props.curve.init(this.$canvas); + this.props.curve.redraw((this.state.rotationAngle / 180) * Math.PI); + } + } + + /** + * Event handler for slider component. Updates the canvas for any change in + * rotation. + * + * @param newValue new rotation angle + */ + private onSliderChangeHandler = (newValue: number) => { + this.setState( + { + rotationAngle: newValue, + isRotating: false, + displayAngle: true, + }, + () => { + if (this.$canvas) { + this.props.curve.redraw((newValue / 180) * Math.PI); + } + }, + ); + }; + + /** + * Event handler for play button. Starts automated rotation by calling + * `autoRotate()`. + */ + private onClickHandler = () => { + if (!this.$canvas) return; + + this.setState( + (prevState) => ({ + isRotating: !prevState.isRotating, + }), + () => { + if (this.state.isRotating) { + this.autoRotate(); + } + }, + ); + }; + + /** + * Environment where `requestAnimationFrame` is called. + */ + private autoRotate = () => { + if (this.$canvas && this.state.isRotating) { + this.setState( + (prevState) => ({ + ...prevState, + rotationAngle: + prevState.rotationAngle >= 360 ? 0 : prevState.rotationAngle + 2, + }), + () => { + this.props.curve.redraw((this.state.rotationAngle / 180) * Math.PI); + window.requestAnimationFrame(this.autoRotate); + }, + ); + } + }; + + private onTextBoxChange = (event) => { + const angle = parseFloat(event.target.value); + this.setState( + () => ({ rotationAngle: angle }), + () => { + if (this.$canvas) { + this.props.curve.redraw((angle / 180) * Math.PI); + } + }, + ); + }; + + public render() { + return ( +
+ { + this.$canvas = r; + }} + /> +
+ + + +
+
+ ); + } +} diff --git a/src/tabs/Curve/index.tsx b/src/tabs/Curve/index.tsx index c5ff94d2f..f237b5a49 100644 --- a/src/tabs/Curve/index.tsx +++ b/src/tabs/Curve/index.tsx @@ -1,55 +1,55 @@ -import React from 'react'; -import type { CurveDrawn } from '../../bundles/curve/curves_webgl'; -import type { AnimatedCurve } from '../../bundles/curve/types'; -import { glAnimation } from '../../typings/anim_types'; -import MultiItemDisplay from '../common/multi_item_display'; -import type { DebuggerContext } from '../../typings/type_helpers'; -import Curve3DAnimationCanvas from './3Dcurve_anim_canvas'; -import CurveCanvas3D from './curve_canvas3d'; -import AnimationCanvas from '../common/animation_canvas'; -import WebGLCanvas from '../common/webgl_canvas'; - -export default { - toSpawn(context: DebuggerContext) { - const drawnCurves = context.context?.moduleContexts?.curve?.state?.drawnCurves; - return drawnCurves.length > 0; - }, - body(context: DebuggerContext) { - const { context: { moduleContexts: { curve: { state: { drawnCurves } } } } } = context; - - const canvases = drawnCurves.map((curve, i) => { - const elemKey = i.toString(); - - if (glAnimation.isAnimation(curve)) { - const anim = curve as AnimatedCurve; - return anim.is3D - ? ( - - ) - : ( - - ); - } - const curveDrawn = curve as CurveDrawn; - return curveDrawn.is3D() - ? ( - - ) - : ( - { - if (r) { - curveDrawn.init(r); - curveDrawn.redraw(0); - } - }} - key={elemKey} - /> - ); - }); - - return ; - }, - label: 'Curves Tab', - iconName: 'media', // See https://blueprintjs.com/docs/#icons for more options -}; +import React from 'react'; +import type { CurveDrawn } from '../../bundles/curve/curves_webgl'; +import type { AnimatedCurve } from '../../bundles/curve/types'; +import { glAnimation } from '../../typings/anim_types'; +import MultiItemDisplay from '../common/multi_item_display'; +import type { DebuggerContext } from '../../typings/type_helpers'; +import Curve3DAnimationCanvas from './3Dcurve_anim_canvas'; +import CurveCanvas3D from './curve_canvas3d'; +import AnimationCanvas from '../common/animation_canvas'; +import WebGLCanvas from '../common/webgl_canvas'; + +export default { + toSpawn(context: DebuggerContext) { + const drawnCurves = context.context?.moduleContexts?.curve?.state?.drawnCurves; + return drawnCurves.length > 0; + }, + body(context: DebuggerContext) { + const { context: { moduleContexts: { curve: { state: { drawnCurves } } } } } = context; + + const canvases = drawnCurves.map((curve, i) => { + const elemKey = i.toString(); + + if (glAnimation.isAnimation(curve)) { + const anim = curve as AnimatedCurve; + return anim.is3D + ? ( + + ) + : ( + + ); + } + const curveDrawn = curve as CurveDrawn; + return curveDrawn.is3D() + ? ( + + ) + : ( + { + if (r) { + curveDrawn.init(r); + curveDrawn.redraw(0); + } + }} + key={elemKey} + /> + ); + }); + + return ; + }, + label: 'Curves Tab', + iconName: 'media', // See https://blueprintjs.com/docs/#icons for more options +}; diff --git a/src/tabs/Game/constants.ts b/src/tabs/Game/constants.ts index b079b6ade..a6afdeac5 100644 --- a/src/tabs/Game/constants.ts +++ b/src/tabs/Game/constants.ts @@ -1,5 +1,5 @@ -export enum Links { - gameUserGuide = 'https://github.com/source-academy/modules/wiki/%5Bgame%5D-User-Guide', - gameDeveloperDocumentation = 'https://github.com/source-academy/modules/wiki/%5Bgame%5D-Developer-Documentation', - gameAPIDocumentation = 'https://source-academy.github.io/modules/documentation/modules/game.html', -} +export enum Links { + gameUserGuide = 'https://github.com/source-academy/modules/wiki/%5Bgame%5D-User-Guide', + gameDeveloperDocumentation = 'https://github.com/source-academy/modules/wiki/%5Bgame%5D-Developer-Documentation', + gameAPIDocumentation = 'https://source-academy.github.io/modules/documentation/modules/game.html', +} diff --git a/src/tabs/Game/index.tsx b/src/tabs/Game/index.tsx index 1e9132a04..fcaa4f154 100644 --- a/src/tabs/Game/index.tsx +++ b/src/tabs/Game/index.tsx @@ -1,41 +1,41 @@ -import React from 'react'; -import { Links } from './constants'; - -type Props = { - children?: never; - className?: string; - debuggerContext?: any; -}; - -class Game extends React.PureComponent { - public render() { - return ( -
- Info: You need to visit the game to see the effect of your program. - Remember to save your work first! -
-
- You may find the game module{' '} - - documentation{' '} - - and{' '} - - user guide{' '} - - useful. -
- ); - } -} - -export default { - toSpawn: () => true, - body: (debuggerContext: any) => , - label: 'Game Info Tab', - iconName: 'info-sign', -}; +import React from 'react'; +import { Links } from './constants'; + +type Props = { + children?: never; + className?: string; + debuggerContext?: any; +}; + +class Game extends React.PureComponent { + public render() { + return ( +
+ Info: You need to visit the game to see the effect of your program. + Remember to save your work first! +
+
+ You may find the game module{' '} + + documentation{' '} + + and{' '} + + user guide{' '} + + useful. +
+ ); + } +} + +export default { + toSpawn: () => true, + body: (debuggerContext: any) => , + label: 'Game Info Tab', + iconName: 'info-sign', +}; diff --git a/src/tabs/MarkSweep/index.tsx b/src/tabs/MarkSweep/index.tsx index c9af72ed5..db803a7f9 100644 --- a/src/tabs/MarkSweep/index.tsx +++ b/src/tabs/MarkSweep/index.tsx @@ -1,473 +1,473 @@ -import React from 'react'; -import { Slider, Icon } from '@blueprintjs/core'; -import { ThemeColor } from './style'; - -type Props = { - children?: never; - className?: string; - debuggerContext: any; -}; - -type State = { - value: number; - column: number; - tags: number[]; - heap: number[]; - commandHeap: any[]; - command: String; - flips: number[]; - memoryMatrix: number[][]; - firstChild: number; - lastChild: number; - description: String; - leftDesc: String; - rightDesc: String; - unmarked: number; - marked: number; - queue: number[]; - running: boolean; -}; - -const MARK_SLOT = 1; -class MarkSweep extends React.Component { - constructor(props: any) { - super(props); - - this.state = { - value: 0, - column: 0, - tags: [], - heap: [], - commandHeap: [], - flips: [0], - memoryMatrix: [], - firstChild: -1, - lastChild: -1, - command: '', - description: '', - rightDesc: '', - leftDesc: '', - unmarked: 0, - marked: 1, - queue: [], - running: false, - }; - } - - componentDidMount() { - const { debuggerContext } = this.props; - if ( - debuggerContext - && debuggerContext.result - && debuggerContext.result.value - ) { - this.initialize_state(); - } - } - - private initialize_state = () => { - const { debuggerContext } = this.props; - const functions = debuggerContext.result.value; - const column = functions.get_column_size(); - const tags = functions.get_tags(); - const commandHeap = functions.get_command(); - const unmarked = functions.get_unmarked(); - const marked = functions.get_marked(); - let heap = []; - let command = ''; - let firstChild = -1; - let lastChild = -1; - let description = ''; - let leftDesc = ''; - let rightDesc = ''; - let queue = []; - if (commandHeap[0]) { - const currentHeap = commandHeap[0]; - heap = currentHeap.heap; - command = currentHeap.type; - firstChild = currentHeap.left; - lastChild = currentHeap.right; - description = currentHeap.desc; - leftDesc = currentHeap.leftDesc; - rightDesc = currentHeap.rightDesc; - queue = currentHeap.queue; - } - - const memoryMatrix = functions.get_memory_matrix(); - const flips = functions.get_flips(); - - this.setState(() => ({ - column, - tags, - heap, - memoryMatrix, - flips, - commandHeap, - command, - firstChild, - lastChild, - description, - leftDesc, - rightDesc, - unmarked, - marked, - queue, - running: true, - })); - }; - - private handlePlus = () => { - let { value } = this.state; - const lengthOfFunction = this.getlengthFunction(); - if (value < lengthOfFunction - 1) { - value += 1; - this.setState(() => { - const { commandHeap } = this.state; - return { - value, - heap: commandHeap[value].heap, - command: commandHeap[value].type, - firstChild: commandHeap[value].left, - lastChild: commandHeap[value].right, - description: commandHeap[value].desc, - leftDesc: commandHeap[value].leftDesc, - rightDesc: commandHeap[value].rightDesc, - queue: commandHeap[value].queue, - }; - }); - } - }; - - private handleMinus = () => { - let { value } = this.state; - if (value > 0) { - value -= 1; - this.setState(() => { - const { commandHeap } = this.state; - return { - value, - heap: commandHeap[value].heap, - command: commandHeap[value].type, - firstChild: commandHeap[value].left, - lastChild: commandHeap[value].right, - description: commandHeap[value].desc, - leftDesc: commandHeap[value].leftDesc, - rightDesc: commandHeap[value].rightDesc, - queue: commandHeap[value].queue, - }; - }); - } - }; - - private sliderShift = (newValue: number) => { - this.setState(() => { - const { commandHeap } = this.state; - return { - value: newValue, - heap: commandHeap[newValue].heap, - command: commandHeap[newValue].type, - firstChild: commandHeap[newValue].left, - lastChild: commandHeap[newValue].right, - description: commandHeap[newValue].desc, - leftDesc: commandHeap[newValue].leftDesc, - rightDesc: commandHeap[newValue].rightDesc, - queue: commandHeap[newValue].queue, - }; - }); - }; - - private getlengthFunction = () => { - const { debuggerContext } = this.props; - const commandHeap - = debuggerContext && debuggerContext.result.value - ? debuggerContext.result.value.get_command() - : []; - return commandHeap.length; - }; - - private isTag = (tag) => { - const { tags } = this.state; - return tags ? tags.includes(tag) : false; - }; - - private getMemoryColor = (indexValue) => { - const { heap, marked, unmarked, command } = this.state; - const { debuggerContext } = this.props; - const roots = debuggerContext.result.value - ? debuggerContext.result.value.get_roots() - : []; - const value = heap ? heap[indexValue] : 0; - let color = ''; - - if (command === 'Showing Roots' && roots.includes(indexValue)) { - color = 'magenta'; - } else if (this.isTag(heap[indexValue - MARK_SLOT])) { - if (value === marked) { - color = ThemeColor.RED; - } else if (value === unmarked) { - color = ThemeColor.BLACK; - } - } else if (!value) { - color = ThemeColor.GREY; - } else if (this.isTag(value)) { - // is a tag - color = ThemeColor.PINK; - } else { - color = ThemeColor.BLUE; - } - - return color; - }; - - private getBackgroundColor = (indexValue) => { - const { firstChild } = this.state; - const { lastChild } = this.state; - const { commandHeap, value, command } = this.state; - const { debuggerContext } = this.props; - const roots = debuggerContext.result.value - ? debuggerContext.result.value.get_roots() - : []; - const size1 = commandHeap[value].sizeLeft; - const size2 = commandHeap[value].sizeRight; - let color = ''; - - if (command === 'Showing Roots' && roots.includes(indexValue)) { - color = ThemeColor.GREEN; - } else if (indexValue >= firstChild && indexValue < firstChild + size1) { - color = ThemeColor.GREEN; - } else if (indexValue >= lastChild && indexValue < lastChild + size2) { - color = ThemeColor.YELLOW; - } - - return color; - }; - - private renderLabel = (val: number) => { - const { flips } = this.state; - return flips.includes(val) ? '^' : `${val}`; - }; - - public render() { - const { state } = this; - - if (state.running) { - const { memoryMatrix } = this.state; - const lengthOfFunction = this.getlengthFunction(); - return ( -
-
-

- This is a visualiser for mark and sweep garbage collector. Check - the guide{' '} - - here - - . -

-

{state.command}

-

{state.description}

-
- {state.leftDesc && ( -
- - {state.leftDesc} -
- )} - {state.rightDesc - ? ( -
- - {state.rightDesc} -
- ) - : ( - false - )} -
-
-

- Current step: - {' '} - - {' '} - {state.value} - {' '} - -

-
- 0 ? lengthOfFunction - 1 : 0} - onChange={this.sliderShift} - value={state.value <= lengthOfFunction ? state.value : 0} - labelValues={state.flips} - labelRenderer={this.renderLabel} - /> -
-
-
-
-
- {memoryMatrix - && memoryMatrix.length > 0 - && memoryMatrix.map((item, row) => ( -
- {row * state.column} - {item - && item.length > 0 - && item.map((content) => { - const color = this.getMemoryColor(content); - const bgColor = this.getBackgroundColor(content); - return ( -
- -
- ); - })} -
- ))} -
-
- {state.queue && state.queue.length && ( -
-
- Queue: [ - {state.queue.map((child) => ( - {child}, - ))} - ] -
- )} -
-
-
-
- - defined -
-
- - tag -
-
- - empty or undefined -
-
-
-
- MARK_SLOT: -
-
- - marked -
-
- - unmarked -
-
-
-
- ); - } - - return ( -
-

- This is a visualiser for mark and sweep garbage collector. Check the - guide{' '} - - here - - . -

-

Calls the function init() at the end of your code to start.

-
- ); - } -} - -export default { - toSpawn: () => true, - body: (debuggerContext: any) => ( - - ), - label: 'Mark Sweep Garbage Collector', - iconName: 'heat-grid', -}; +import React from 'react'; +import { Slider, Icon } from '@blueprintjs/core'; +import { ThemeColor } from './style'; + +type Props = { + children?: never; + className?: string; + debuggerContext: any; +}; + +type State = { + value: number; + column: number; + tags: number[]; + heap: number[]; + commandHeap: any[]; + command: String; + flips: number[]; + memoryMatrix: number[][]; + firstChild: number; + lastChild: number; + description: String; + leftDesc: String; + rightDesc: String; + unmarked: number; + marked: number; + queue: number[]; + running: boolean; +}; + +const MARK_SLOT = 1; +class MarkSweep extends React.Component { + constructor(props: any) { + super(props); + + this.state = { + value: 0, + column: 0, + tags: [], + heap: [], + commandHeap: [], + flips: [0], + memoryMatrix: [], + firstChild: -1, + lastChild: -1, + command: '', + description: '', + rightDesc: '', + leftDesc: '', + unmarked: 0, + marked: 1, + queue: [], + running: false, + }; + } + + componentDidMount() { + const { debuggerContext } = this.props; + if ( + debuggerContext + && debuggerContext.result + && debuggerContext.result.value + ) { + this.initialize_state(); + } + } + + private initialize_state = () => { + const { debuggerContext } = this.props; + const functions = debuggerContext.result.value; + const column = functions.get_column_size(); + const tags = functions.get_tags(); + const commandHeap = functions.get_command(); + const unmarked = functions.get_unmarked(); + const marked = functions.get_marked(); + let heap = []; + let command = ''; + let firstChild = -1; + let lastChild = -1; + let description = ''; + let leftDesc = ''; + let rightDesc = ''; + let queue = []; + if (commandHeap[0]) { + const currentHeap = commandHeap[0]; + heap = currentHeap.heap; + command = currentHeap.type; + firstChild = currentHeap.left; + lastChild = currentHeap.right; + description = currentHeap.desc; + leftDesc = currentHeap.leftDesc; + rightDesc = currentHeap.rightDesc; + queue = currentHeap.queue; + } + + const memoryMatrix = functions.get_memory_matrix(); + const flips = functions.get_flips(); + + this.setState(() => ({ + column, + tags, + heap, + memoryMatrix, + flips, + commandHeap, + command, + firstChild, + lastChild, + description, + leftDesc, + rightDesc, + unmarked, + marked, + queue, + running: true, + })); + }; + + private handlePlus = () => { + let { value } = this.state; + const lengthOfFunction = this.getlengthFunction(); + if (value < lengthOfFunction - 1) { + value += 1; + this.setState(() => { + const { commandHeap } = this.state; + return { + value, + heap: commandHeap[value].heap, + command: commandHeap[value].type, + firstChild: commandHeap[value].left, + lastChild: commandHeap[value].right, + description: commandHeap[value].desc, + leftDesc: commandHeap[value].leftDesc, + rightDesc: commandHeap[value].rightDesc, + queue: commandHeap[value].queue, + }; + }); + } + }; + + private handleMinus = () => { + let { value } = this.state; + if (value > 0) { + value -= 1; + this.setState(() => { + const { commandHeap } = this.state; + return { + value, + heap: commandHeap[value].heap, + command: commandHeap[value].type, + firstChild: commandHeap[value].left, + lastChild: commandHeap[value].right, + description: commandHeap[value].desc, + leftDesc: commandHeap[value].leftDesc, + rightDesc: commandHeap[value].rightDesc, + queue: commandHeap[value].queue, + }; + }); + } + }; + + private sliderShift = (newValue: number) => { + this.setState(() => { + const { commandHeap } = this.state; + return { + value: newValue, + heap: commandHeap[newValue].heap, + command: commandHeap[newValue].type, + firstChild: commandHeap[newValue].left, + lastChild: commandHeap[newValue].right, + description: commandHeap[newValue].desc, + leftDesc: commandHeap[newValue].leftDesc, + rightDesc: commandHeap[newValue].rightDesc, + queue: commandHeap[newValue].queue, + }; + }); + }; + + private getlengthFunction = () => { + const { debuggerContext } = this.props; + const commandHeap + = debuggerContext && debuggerContext.result.value + ? debuggerContext.result.value.get_command() + : []; + return commandHeap.length; + }; + + private isTag = (tag) => { + const { tags } = this.state; + return tags ? tags.includes(tag) : false; + }; + + private getMemoryColor = (indexValue) => { + const { heap, marked, unmarked, command } = this.state; + const { debuggerContext } = this.props; + const roots = debuggerContext.result.value + ? debuggerContext.result.value.get_roots() + : []; + const value = heap ? heap[indexValue] : 0; + let color = ''; + + if (command === 'Showing Roots' && roots.includes(indexValue)) { + color = 'magenta'; + } else if (this.isTag(heap[indexValue - MARK_SLOT])) { + if (value === marked) { + color = ThemeColor.RED; + } else if (value === unmarked) { + color = ThemeColor.BLACK; + } + } else if (!value) { + color = ThemeColor.GREY; + } else if (this.isTag(value)) { + // is a tag + color = ThemeColor.PINK; + } else { + color = ThemeColor.BLUE; + } + + return color; + }; + + private getBackgroundColor = (indexValue) => { + const { firstChild } = this.state; + const { lastChild } = this.state; + const { commandHeap, value, command } = this.state; + const { debuggerContext } = this.props; + const roots = debuggerContext.result.value + ? debuggerContext.result.value.get_roots() + : []; + const size1 = commandHeap[value].sizeLeft; + const size2 = commandHeap[value].sizeRight; + let color = ''; + + if (command === 'Showing Roots' && roots.includes(indexValue)) { + color = ThemeColor.GREEN; + } else if (indexValue >= firstChild && indexValue < firstChild + size1) { + color = ThemeColor.GREEN; + } else if (indexValue >= lastChild && indexValue < lastChild + size2) { + color = ThemeColor.YELLOW; + } + + return color; + }; + + private renderLabel = (val: number) => { + const { flips } = this.state; + return flips.includes(val) ? '^' : `${val}`; + }; + + public render() { + const { state } = this; + + if (state.running) { + const { memoryMatrix } = this.state; + const lengthOfFunction = this.getlengthFunction(); + return ( +
+
+

+ This is a visualiser for mark and sweep garbage collector. Check + the guide{' '} + + here + + . +

+

{state.command}

+

{state.description}

+
+ {state.leftDesc && ( +
+ + {state.leftDesc} +
+ )} + {state.rightDesc + ? ( +
+ + {state.rightDesc} +
+ ) + : ( + false + )} +
+
+

+ Current step: + {' '} + + {' '} + {state.value} + {' '} + +

+
+ 0 ? lengthOfFunction - 1 : 0} + onChange={this.sliderShift} + value={state.value <= lengthOfFunction ? state.value : 0} + labelValues={state.flips} + labelRenderer={this.renderLabel} + /> +
+
+
+
+
+ {memoryMatrix + && memoryMatrix.length > 0 + && memoryMatrix.map((item, row) => ( +
+ {row * state.column} + {item + && item.length > 0 + && item.map((content) => { + const color = this.getMemoryColor(content); + const bgColor = this.getBackgroundColor(content); + return ( +
+ +
+ ); + })} +
+ ))} +
+
+ {state.queue && state.queue.length && ( +
+
+ Queue: [ + {state.queue.map((child) => ( + {child}, + ))} + ] +
+ )} +
+
+
+
+ + defined +
+
+ + tag +
+
+ + empty or undefined +
+
+
+
+ MARK_SLOT: +
+
+ + marked +
+
+ + unmarked +
+
+
+
+ ); + } + + return ( +
+

+ This is a visualiser for mark and sweep garbage collector. Check the + guide{' '} + + here + + . +

+

Calls the function init() at the end of your code to start.

+
+ ); + } +} + +export default { + toSpawn: () => true, + body: (debuggerContext: any) => ( + + ), + label: 'Mark Sweep Garbage Collector', + iconName: 'heat-grid', +}; diff --git a/src/tabs/MarkSweep/style.tsx b/src/tabs/MarkSweep/style.tsx index 454735823..aa890ff50 100644 --- a/src/tabs/MarkSweep/style.tsx +++ b/src/tabs/MarkSweep/style.tsx @@ -1,13 +1,13 @@ -export enum ThemeColor { - BLUE = 'lightblue', - PINK = 'salmon', - GREY = '#707070', - GREEN = '#42a870', - YELLOW = '#f0d60e', - RED = 'red', - BLACK = 'black', -} - -export const FONT = { - SMALL: 10, -}; +export enum ThemeColor { + BLUE = 'lightblue', + PINK = 'salmon', + GREY = '#707070', + GREEN = '#42a870', + YELLOW = '#f0d60e', + RED = 'red', + BLACK = 'black', +} + +export const FONT = { + SMALL: 10, +}; diff --git a/src/tabs/Painter/index.tsx b/src/tabs/Painter/index.tsx index 01b2829e6..c3180cc36 100644 --- a/src/tabs/Painter/index.tsx +++ b/src/tabs/Painter/index.tsx @@ -1,89 +1,89 @@ -import React from 'react'; -import type { LinePlot } from '../../bundles/painter/painter'; -import type { DebuggerContext } from '../../typings/type_helpers'; -import Modal from '../common/modal_div'; - -type Props = { - children?: never - className?: string - debuggerContext: any -}; - -type State = { - modalOpen: boolean - selectedPainter: any | null -}; - -class Painter extends React.Component { - constructor(props: Props) { - super(props); - this.state = { - modalOpen: false, - selectedPainter: null, - }; - } - - handleOpen = (selectedPainter: LinePlot) => { - this.setState({ - modalOpen: true, - selectedPainter, - }); - }; - - public render() { - const { context: { moduleContexts: { painter: { state: { drawnPainters } } } } } = this.props.debuggerContext; - - return ( -
- this.setState({ modalOpen: false })} - > -
{ - if (this.state.selectedPainter) { - this.state.selectedPainter.draw('modalDiv'); - } - }} - style={{ - height: '20rem', - width: '20rem', - }} - >
-
- { - drawnPainters.map((drawnPainter: any, id:number) => { - const divId = `plotDiv${id}`; - return ( - <> -
this.handleOpen(drawnPainter)}>Click here to open Modal
-
{ - console.log(drawnPainter); - drawnPainter.draw(divId); - }} - >
- - ); - }) - } - -
- ); - } -} - -export default { - toSpawn(context: DebuggerContext) { - const drawnPainters = context.context?.moduleContexts?.painter.state.drawnPainters; - console.log(drawnPainters); - return drawnPainters.length > 0; - }, - body: (debuggerContext: any) => , - label: 'Painter Test Tab', - iconName: 'scatter-plot', -}; +import React from 'react'; +import type { LinePlot } from '../../bundles/painter/painter'; +import type { DebuggerContext } from '../../typings/type_helpers'; +import Modal from '../common/modal_div'; + +type Props = { + children?: never + className?: string + debuggerContext: any +}; + +type State = { + modalOpen: boolean + selectedPainter: any | null +}; + +class Painter extends React.Component { + constructor(props: Props) { + super(props); + this.state = { + modalOpen: false, + selectedPainter: null, + }; + } + + handleOpen = (selectedPainter: LinePlot) => { + this.setState({ + modalOpen: true, + selectedPainter, + }); + }; + + public render() { + const { context: { moduleContexts: { painter: { state: { drawnPainters } } } } } = this.props.debuggerContext; + + return ( +
+ this.setState({ modalOpen: false })} + > +
{ + if (this.state.selectedPainter) { + this.state.selectedPainter.draw('modalDiv'); + } + }} + style={{ + height: '20rem', + width: '20rem', + }} + >
+
+ { + drawnPainters.map((drawnPainter: any, id:number) => { + const divId = `plotDiv${id}`; + return ( + <> +
this.handleOpen(drawnPainter)}>Click here to open Modal
+
{ + console.log(drawnPainter); + drawnPainter.draw(divId); + }} + >
+ + ); + }) + } + +
+ ); + } +} + +export default { + toSpawn(context: DebuggerContext) { + const drawnPainters = context.context?.moduleContexts?.painter.state.drawnPainters; + console.log(drawnPainters); + return drawnPainters.length > 0; + }, + body: (debuggerContext: any) => , + label: 'Painter Test Tab', + iconName: 'scatter-plot', +}; diff --git a/src/tabs/Pixnflix/index.tsx b/src/tabs/Pixnflix/index.tsx index efe439379..366275928 100644 --- a/src/tabs/Pixnflix/index.tsx +++ b/src/tabs/Pixnflix/index.tsx @@ -1,428 +1,428 @@ -import { Button, ButtonGroup, Divider, NumericInput } from '@blueprintjs/core'; -import { IconNames } from '@blueprintjs/icons'; -// eslint-disable-next-line @typescript-eslint/no-shadow -import React, { type ChangeEvent, type DragEvent } from 'react'; -import { - DEFAULT_FPS, - DEFAULT_HEIGHT, - DEFAULT_VOLUME, - DEFAULT_WIDTH, - MAX_FPS, - MAX_HEIGHT, - MAX_WIDTH, - MIN_FPS, - MIN_HEIGHT, - MIN_WIDTH, -} from '../../bundles/pix_n_flix/constants'; -import { - type BundlePacket, - type ErrorLogger, - InputFeed, - type TabsPacket, -} from '../../bundles/pix_n_flix/types'; - -type Props = { - children?: never; - className?: string; - debuggerContext: any; -}; - -enum VideoMode { - Video, - Still, - Accepting, - Image, -} - -type State = { - width: number; - height: number; - FPS: number; - volume: number; - hasAudio: boolean; - mode: VideoMode; -}; - -type Video = { - toReplString: () => string; - init: ( - image: HTMLImageElement | null, - video: HTMLVideoElement | null, - canvas: HTMLCanvasElement | null, - errorLogger: ErrorLogger, - tabsPackage: TabsPacket - ) => BundlePacket; - deinit: () => void; - startVideo: () => void; - stopVideo: () => void; - updateFPS: (fps: number) => void; - updateDimensions: (width: number, height: number) => void; - updateVolume: (v: number) => void; -}; - -class PixNFlix extends React.Component { - private $video: HTMLVideoElement | null = null; - - private $image: HTMLImageElement | null = null; - - private $canvas: HTMLCanvasElement | null = null; - - private pixNFlix: Video; - - constructor(props: Props) { - super(props); - this.state = { - width: DEFAULT_WIDTH, - height: DEFAULT_HEIGHT, - FPS: DEFAULT_FPS, - volume: DEFAULT_VOLUME, - hasAudio: false, - mode: VideoMode.Video, - }; - const { debuggerContext } = this.props; - this.pixNFlix = debuggerContext.result.value; - } - - public componentDidMount() { - if (this.isPixNFlix()) { - this.setupVideoService(); - window.addEventListener('beforeunload', this.pixNFlix.deinit); - } - } - - public componentWillUnmount() { - if (this.isPixNFlix()) { - this.closeVideo(); - window.removeEventListener('beforeunload', this.pixNFlix.deinit); - } - } - - public setupVideoService = () => { - if (this.$video && this.$canvas && this.isPixNFlix()) { - const { debuggerContext } = this.props; - this.pixNFlix = debuggerContext.result.value; - // get the properties of the video in an object - const { HEIGHT, WIDTH, FPS, VOLUME, inputFeed } = this.pixNFlix.init( - this.$image, - this.$video, - this.$canvas, - this.printError, - { - onClickStill: this.onClickStill, - }, - ); - let mode: VideoMode = VideoMode.Video; - if (inputFeed === InputFeed.Local) { - mode = VideoMode.Accepting; - } else if (inputFeed === InputFeed.ImageURL) { - mode = VideoMode.Image; - } - this.setState({ - height: HEIGHT, - width: WIDTH, - FPS, - volume: VOLUME, - hasAudio: inputFeed === InputFeed.VideoURL, - mode, - }); - } - }; - - public closeVideo = () => { - if (this.isPixNFlix()) { - this.pixNFlix.deinit(); - } - }; - - public handleStartVideo = () => { - if (this.isPixNFlix()) { - this.pixNFlix.startVideo(); - } - }; - - public handleStopVideo = () => { - if (this.isPixNFlix()) { - this.pixNFlix.stopVideo(); - } - }; - - public onClickStill = () => { - const { mode } = this.state; - if (mode === VideoMode.Still) { - this.handleStopVideo(); - } else if (mode === VideoMode.Video) { - this.setState( - () => ({ - mode: VideoMode.Still, - }), - this.handleStopVideo, - ); - } - }; - - public onClickVideo = () => { - const { mode } = this.state; - if (mode === VideoMode.Still) { - this.setState( - () => ({ - mode: VideoMode.Video, - }), - this.handleStartVideo, - ); - } - }; - - public handleWidthChange = (width: number) => { - const { height } = this.state; - this.handleUpdateDimensions(width, height); - }; - - public handleHeightChange = (height: number) => { - const { width } = this.state; - this.handleUpdateDimensions(width, height); - }; - - public handleFPSChange = (fps: number) => { - if (fps >= MIN_FPS && fps <= MAX_FPS) { - this.setState({ - FPS: fps, - }); - if (this.isPixNFlix()) { - this.pixNFlix.updateFPS(fps); - } - } - }; - - public handleUpdateDimensions = (w: number, h: number) => { - if ( - w >= MIN_WIDTH - && w <= MAX_WIDTH - && h >= MIN_HEIGHT - && h <= MAX_HEIGHT - ) { - this.setState({ - width: w, - height: h, - }); - if (this.isPixNFlix()) { - this.pixNFlix.updateDimensions(w, h); - } - } - }; - - public loadFileToVideo = (file: File) => { - const { mode } = this.state; - if (file.type.match('video.*')) { - if (this.$video && mode === VideoMode.Accepting) { - this.$video.src = URL.createObjectURL(file); - this.setState({ - hasAudio: true, - mode: VideoMode.Video, - }); - this.handleStartVideo(); - } - } else if (file.type.match('image.*')) { - if (this.$image && mode === VideoMode.Accepting) { - this.$image.src = URL.createObjectURL(file); - this.setState({ - mode: VideoMode.Image, - }); - } - } - }; - - public handleDrop = (e: DragEvent) => { - e.preventDefault(); - this.loadFileToVideo(e.dataTransfer.files[0]); - }; - - public handleDragOver = (e: DragEvent) => { - e.preventDefault(); - }; - - public handleFileUpload = (e: ChangeEvent) => { - e.preventDefault(); - if (e.target && e.target.files) { - this.loadFileToVideo(e.target.files[0]); - } - }; - - public handleVolumeChange = (e: ChangeEvent) => { - e.preventDefault(); - const volume = parseFloat(e.target.value); - this.setState({ - volume, - }); - this.pixNFlix.updateVolume(volume); - }; - - public printError: ErrorLogger = () => {}; - - /** - * Checks if pixNFlix is initialised as the last line (ie. REPL output is '[Pix N Flix]') - * @returns Boolean if pixNFlix is intialised - */ - private isPixNFlix() { - return ( - this.pixNFlix - && this.pixNFlix.toReplString - && this.pixNFlix.toReplString() === '[Pix N Flix]' - ); - } - - public render() { - const { mode, width, height, FPS, volume, hasAudio } = this.state; - const displayOptions = mode === VideoMode.Still || mode === VideoMode.Video; - const videoIsActive = mode === VideoMode.Video; - const isAccepting = mode === VideoMode.Accepting; - return ( -
-
-
- -
- -
-
- {/* */} - - {/* */} -
-
- {/* */} - - {/* */} -
-
- {/* */} - - {/* */} -
-
-
-
- { - this.$image = r; - }} - width={DEFAULT_WIDTH} - height={DEFAULT_HEIGHT} - style={{ display: 'none' }} - /> -
-
- ); - } -} - -export default { - toSpawn: () => true, - body: (debuggerContext: any) => ( - - ), - label: 'PixNFlix Live Feed', - iconName: 'mobile-video', -}; +import { Button, ButtonGroup, Divider, NumericInput } from '@blueprintjs/core'; +import { IconNames } from '@blueprintjs/icons'; +// eslint-disable-next-line @typescript-eslint/no-shadow +import React, { type ChangeEvent, type DragEvent } from 'react'; +import { + DEFAULT_FPS, + DEFAULT_HEIGHT, + DEFAULT_VOLUME, + DEFAULT_WIDTH, + MAX_FPS, + MAX_HEIGHT, + MAX_WIDTH, + MIN_FPS, + MIN_HEIGHT, + MIN_WIDTH, +} from '../../bundles/pix_n_flix/constants'; +import { + type BundlePacket, + type ErrorLogger, + InputFeed, + type TabsPacket, +} from '../../bundles/pix_n_flix/types'; + +type Props = { + children?: never; + className?: string; + debuggerContext: any; +}; + +enum VideoMode { + Video, + Still, + Accepting, + Image, +} + +type State = { + width: number; + height: number; + FPS: number; + volume: number; + hasAudio: boolean; + mode: VideoMode; +}; + +type Video = { + toReplString: () => string; + init: ( + image: HTMLImageElement | null, + video: HTMLVideoElement | null, + canvas: HTMLCanvasElement | null, + errorLogger: ErrorLogger, + tabsPackage: TabsPacket + ) => BundlePacket; + deinit: () => void; + startVideo: () => void; + stopVideo: () => void; + updateFPS: (fps: number) => void; + updateDimensions: (width: number, height: number) => void; + updateVolume: (v: number) => void; +}; + +class PixNFlix extends React.Component { + private $video: HTMLVideoElement | null = null; + + private $image: HTMLImageElement | null = null; + + private $canvas: HTMLCanvasElement | null = null; + + private pixNFlix: Video; + + constructor(props: Props) { + super(props); + this.state = { + width: DEFAULT_WIDTH, + height: DEFAULT_HEIGHT, + FPS: DEFAULT_FPS, + volume: DEFAULT_VOLUME, + hasAudio: false, + mode: VideoMode.Video, + }; + const { debuggerContext } = this.props; + this.pixNFlix = debuggerContext.result.value; + } + + public componentDidMount() { + if (this.isPixNFlix()) { + this.setupVideoService(); + window.addEventListener('beforeunload', this.pixNFlix.deinit); + } + } + + public componentWillUnmount() { + if (this.isPixNFlix()) { + this.closeVideo(); + window.removeEventListener('beforeunload', this.pixNFlix.deinit); + } + } + + public setupVideoService = () => { + if (this.$video && this.$canvas && this.isPixNFlix()) { + const { debuggerContext } = this.props; + this.pixNFlix = debuggerContext.result.value; + // get the properties of the video in an object + const { HEIGHT, WIDTH, FPS, VOLUME, inputFeed } = this.pixNFlix.init( + this.$image, + this.$video, + this.$canvas, + this.printError, + { + onClickStill: this.onClickStill, + }, + ); + let mode: VideoMode = VideoMode.Video; + if (inputFeed === InputFeed.Local) { + mode = VideoMode.Accepting; + } else if (inputFeed === InputFeed.ImageURL) { + mode = VideoMode.Image; + } + this.setState({ + height: HEIGHT, + width: WIDTH, + FPS, + volume: VOLUME, + hasAudio: inputFeed === InputFeed.VideoURL, + mode, + }); + } + }; + + public closeVideo = () => { + if (this.isPixNFlix()) { + this.pixNFlix.deinit(); + } + }; + + public handleStartVideo = () => { + if (this.isPixNFlix()) { + this.pixNFlix.startVideo(); + } + }; + + public handleStopVideo = () => { + if (this.isPixNFlix()) { + this.pixNFlix.stopVideo(); + } + }; + + public onClickStill = () => { + const { mode } = this.state; + if (mode === VideoMode.Still) { + this.handleStopVideo(); + } else if (mode === VideoMode.Video) { + this.setState( + () => ({ + mode: VideoMode.Still, + }), + this.handleStopVideo, + ); + } + }; + + public onClickVideo = () => { + const { mode } = this.state; + if (mode === VideoMode.Still) { + this.setState( + () => ({ + mode: VideoMode.Video, + }), + this.handleStartVideo, + ); + } + }; + + public handleWidthChange = (width: number) => { + const { height } = this.state; + this.handleUpdateDimensions(width, height); + }; + + public handleHeightChange = (height: number) => { + const { width } = this.state; + this.handleUpdateDimensions(width, height); + }; + + public handleFPSChange = (fps: number) => { + if (fps >= MIN_FPS && fps <= MAX_FPS) { + this.setState({ + FPS: fps, + }); + if (this.isPixNFlix()) { + this.pixNFlix.updateFPS(fps); + } + } + }; + + public handleUpdateDimensions = (w: number, h: number) => { + if ( + w >= MIN_WIDTH + && w <= MAX_WIDTH + && h >= MIN_HEIGHT + && h <= MAX_HEIGHT + ) { + this.setState({ + width: w, + height: h, + }); + if (this.isPixNFlix()) { + this.pixNFlix.updateDimensions(w, h); + } + } + }; + + public loadFileToVideo = (file: File) => { + const { mode } = this.state; + if (file.type.match('video.*')) { + if (this.$video && mode === VideoMode.Accepting) { + this.$video.src = URL.createObjectURL(file); + this.setState({ + hasAudio: true, + mode: VideoMode.Video, + }); + this.handleStartVideo(); + } + } else if (file.type.match('image.*')) { + if (this.$image && mode === VideoMode.Accepting) { + this.$image.src = URL.createObjectURL(file); + this.setState({ + mode: VideoMode.Image, + }); + } + } + }; + + public handleDrop = (e: DragEvent) => { + e.preventDefault(); + this.loadFileToVideo(e.dataTransfer.files[0]); + }; + + public handleDragOver = (e: DragEvent) => { + e.preventDefault(); + }; + + public handleFileUpload = (e: ChangeEvent) => { + e.preventDefault(); + if (e.target && e.target.files) { + this.loadFileToVideo(e.target.files[0]); + } + }; + + public handleVolumeChange = (e: ChangeEvent) => { + e.preventDefault(); + const volume = parseFloat(e.target.value); + this.setState({ + volume, + }); + this.pixNFlix.updateVolume(volume); + }; + + public printError: ErrorLogger = () => {}; + + /** + * Checks if pixNFlix is initialised as the last line (ie. REPL output is '[Pix N Flix]') + * @returns Boolean if pixNFlix is intialised + */ + private isPixNFlix() { + return ( + this.pixNFlix + && this.pixNFlix.toReplString + && this.pixNFlix.toReplString() === '[Pix N Flix]' + ); + } + + public render() { + const { mode, width, height, FPS, volume, hasAudio } = this.state; + const displayOptions = mode === VideoMode.Still || mode === VideoMode.Video; + const videoIsActive = mode === VideoMode.Video; + const isAccepting = mode === VideoMode.Accepting; + return ( +
+
+
+ +
+ +
+
+ {/* */} + + {/* */} +
+
+ {/* */} + + {/* */} +
+
+ {/* */} + + {/* */} +
+
+
+
+ { + this.$image = r; + }} + width={DEFAULT_WIDTH} + height={DEFAULT_HEIGHT} + style={{ display: 'none' }} + /> +
+
+ ); + } +} + +export default { + toSpawn: () => true, + body: (debuggerContext: any) => ( + + ), + label: 'PixNFlix Live Feed', + iconName: 'mobile-video', +}; diff --git a/src/tabs/Plotly/index.tsx b/src/tabs/Plotly/index.tsx index cd8424efc..3906c9b91 100644 --- a/src/tabs/Plotly/index.tsx +++ b/src/tabs/Plotly/index.tsx @@ -1,85 +1,85 @@ -import React from 'react'; -import { type DrawnPlot } from '../../bundles/plotly/plotly'; -import { type DebuggerContext } from '../../typings/type_helpers'; -import Modal from '../common/modal_div'; - -type Props = { - children?: never - className?: string - debuggerContext: any -}; - -type State = { - modalOpen: boolean - selectedPlot: any | null -}; - -class Plotly extends React.Component { - constructor(props: Props) { - super(props); - this.state = { - modalOpen: false, - selectedPlot: null, - }; - } - - handleOpen = (selectedPlot: DrawnPlot) => { - this.setState({ - modalOpen: true, - selectedPlot, - }); - }; - - public render() { - const { context: { moduleContexts: { plotly: { state: { drawnPlots } } } } } = this.props.debuggerContext; - - return ( -
- this.setState({ modalOpen: false })} - > -
{ - if (this.state.selectedPlot) { - this.state.selectedPlot.draw('modalDiv'); - } - }} - style={{ height: '80vh' }} - >
-
- { - drawnPlots.map((drawnPlot: any, id:number) => { - const divId = `plotDiv${id}`; - return ( -
-
this.handleOpen(drawnPlot)}>Click here to open Modal
-
{ - drawnPlot.draw(divId); - }} - >
-
- ); - }) - } - -
- ); - } -} - -export default { - toSpawn(context: DebuggerContext) { - const drawnPlots = context.context?.moduleContexts?.plotly.state.drawnPlots; - return drawnPlots.length > 0; - }, - body: (debuggerContext: any) => , - label: 'Plotly Test Tab', - iconName: 'scatter-plot', -}; +import React from 'react'; +import { type DrawnPlot } from '../../bundles/plotly/plotly'; +import { type DebuggerContext } from '../../typings/type_helpers'; +import Modal from '../common/modal_div'; + +type Props = { + children?: never + className?: string + debuggerContext: any +}; + +type State = { + modalOpen: boolean + selectedPlot: any | null +}; + +class Plotly extends React.Component { + constructor(props: Props) { + super(props); + this.state = { + modalOpen: false, + selectedPlot: null, + }; + } + + handleOpen = (selectedPlot: DrawnPlot) => { + this.setState({ + modalOpen: true, + selectedPlot, + }); + }; + + public render() { + const { context: { moduleContexts: { plotly: { state: { drawnPlots } } } } } = this.props.debuggerContext; + + return ( +
+ this.setState({ modalOpen: false })} + > +
{ + if (this.state.selectedPlot) { + this.state.selectedPlot.draw('modalDiv'); + } + }} + style={{ height: '80vh' }} + >
+
+ { + drawnPlots.map((drawnPlot: any, id:number) => { + const divId = `plotDiv${id}`; + return ( +
+
this.handleOpen(drawnPlot)}>Click here to open Modal
+
{ + drawnPlot.draw(divId); + }} + >
+
+ ); + }) + } + +
+ ); + } +} + +export default { + toSpawn(context: DebuggerContext) { + const drawnPlots = context.context?.moduleContexts?.plotly.state.drawnPlots; + return drawnPlots.length > 0; + }, + body: (debuggerContext: any) => , + label: 'Plotly Test Tab', + iconName: 'scatter-plot', +}; diff --git a/src/tabs/Repeat/index.tsx b/src/tabs/Repeat/index.tsx index 8f07deb38..6159a0994 100644 --- a/src/tabs/Repeat/index.tsx +++ b/src/tabs/Repeat/index.tsx @@ -1,20 +1,20 @@ -import React from 'react'; - -type Props = { - children?: never; - className?: string; - debuggerContext?: any; -}; - -class Repeat extends React.PureComponent { - public render() { - return
This is spawned from the repeat package
; - } -} - -export default { - toSpawn: () => true, - body: (debuggerContext: any) => , - label: 'Repeat Test Tab', - iconName: 'build', -}; +import React from 'react'; + +type Props = { + children?: never; + className?: string; + debuggerContext?: any; +}; + +class Repeat extends React.PureComponent { + public render() { + return
This is spawned from the repeat package
; + } +} + +export default { + toSpawn: () => true, + body: (debuggerContext: any) => , + label: 'Repeat Test Tab', + iconName: 'build', +}; diff --git a/src/tabs/Repl/index.tsx b/src/tabs/Repl/index.tsx index d3814df18..064a4dc58 100644 --- a/src/tabs/Repl/index.tsx +++ b/src/tabs/Repl/index.tsx @@ -1,118 +1,118 @@ -/** - * Tab for Source Academy Programmable REPL module - * @module repl - * @author Wang Zihan - */ - -import React from 'react'; -import { type DebuggerContext } from '../../typings/type_helpers'; -import { Button } from '@blueprintjs/core'; -import { IconNames } from '@blueprintjs/icons'; -import { type ProgrammableRepl } from '../../bundles/repl/programmable_repl'; -// If I use import for AceEditor it will cause runtime error and crash Source Academy when spawning tab in the new module building system. -// import AceEditor from 'react-ace'; -const AceEditor = require('react-ace').default; -import 'ace-builds/src-noconflict/mode-javascript'; -import 'ace-builds/src-noconflict/theme-twilight'; -import 'ace-builds/src-noconflict/ext-language_tools'; - - -type Props = { - programmableReplInstance: ProgrammableRepl; -}; - -class ProgrammableReplGUI extends React.Component { - public replInstance : ProgrammableRepl; - constructor(data: Props) { - super(data); - this.replInstance = data.programmableReplInstance; - this.replInstance.setTabReactComponentInstance(this); - } - public render() { - const outputDivs : JSX.Element[] = []; - const outputStringCount = this.replInstance.outputStrings.length; - for (let i = 0; i < outputStringCount; i++) { - const str = this.replInstance.outputStrings[i]; - if (str.outputMethod === 'richtext') { - if (str.color === '') { - outputDivs.push(
); - } else { - outputDivs.push(
); - } - } else if (str.color === '') { - outputDivs.push(
{ str.content }
); - } else { - outputDivs.push(
{ str.content }
); - } - } - return ( -
-
- ); - } -} - - -export default { - /** - * This function will be called to determine if the component will be - * rendered. - * @param {DebuggerContext} context - * @returns {boolean} - */ - toSpawn(_context: DebuggerContext) { - return true; - }, - - /** - * This function will be called to render the module tab in the side contents - * on Source Academy frontend. - * @param {DebuggerContext} context - */ - body(context: DebuggerContext) { - return ; - }, - - /** - * The Tab's icon tooltip in the side contents on Source Academy frontend. - */ - label: 'Programmable Repl Tab', - - /** - * BlueprintJS IconName element's name, used to render the icon which will be - * displayed in the side contents panel. - * @see https://blueprintjs.com/docs/#icons - */ - iconName: 'code', -}; +/** + * Tab for Source Academy Programmable REPL module + * @module repl + * @author Wang Zihan + */ + +import React from 'react'; +import { type DebuggerContext } from '../../typings/type_helpers'; +import { Button } from '@blueprintjs/core'; +import { IconNames } from '@blueprintjs/icons'; +import { type ProgrammableRepl } from '../../bundles/repl/programmable_repl'; +// If I use import for AceEditor it will cause runtime error and crash Source Academy when spawning tab in the new module building system. +// import AceEditor from 'react-ace'; +const AceEditor = require('react-ace').default; +import 'ace-builds/src-noconflict/mode-javascript'; +import 'ace-builds/src-noconflict/theme-twilight'; +import 'ace-builds/src-noconflict/ext-language_tools'; + + +type Props = { + programmableReplInstance: ProgrammableRepl; +}; + +class ProgrammableReplGUI extends React.Component { + public replInstance : ProgrammableRepl; + constructor(data: Props) { + super(data); + this.replInstance = data.programmableReplInstance; + this.replInstance.setTabReactComponentInstance(this); + } + public render() { + const outputDivs : JSX.Element[] = []; + const outputStringCount = this.replInstance.outputStrings.length; + for (let i = 0; i < outputStringCount; i++) { + const str = this.replInstance.outputStrings[i]; + if (str.outputMethod === 'richtext') { + if (str.color === '') { + outputDivs.push(
); + } else { + outputDivs.push(
); + } + } else if (str.color === '') { + outputDivs.push(
{ str.content }
); + } else { + outputDivs.push(
{ str.content }
); + } + } + return ( +
+
+ ); + } +} + + +export default { + /** + * This function will be called to determine if the component will be + * rendered. + * @param {DebuggerContext} context + * @returns {boolean} + */ + toSpawn(_context: DebuggerContext) { + return true; + }, + + /** + * This function will be called to render the module tab in the side contents + * on Source Academy frontend. + * @param {DebuggerContext} context + */ + body(context: DebuggerContext) { + return ; + }, + + /** + * The Tab's icon tooltip in the side contents on Source Academy frontend. + */ + label: 'Programmable Repl Tab', + + /** + * BlueprintJS IconName element's name, used to render the icon which will be + * displayed in the side contents panel. + * @see https://blueprintjs.com/docs/#icons + */ + iconName: 'code', +}; diff --git a/src/tabs/Rune/hollusion_canvas.tsx b/src/tabs/Rune/hollusion_canvas.tsx index 1b6e7b9af..5d7e52cad 100644 --- a/src/tabs/Rune/hollusion_canvas.tsx +++ b/src/tabs/Rune/hollusion_canvas.tsx @@ -1,34 +1,34 @@ -import React from 'react'; -import type { HollusionRune } from '../../bundles/rune/functions'; -import WebGLCanvas from '../common/webgl_canvas'; - -/** - * Canvas used to display Hollusion runes - */ -export default function HollusionCanvas({ rune }: { rune: HollusionRune }) { - const canvasRef = React.useRef(null); - const renderFuncRef = React.useRef<(time: number) => void>(); - const animId = React.useRef(null); - - const animCallback = (timeInMs: number) => { - renderFuncRef.current!(timeInMs); - animId.current = requestAnimationFrame(animCallback); - }; - - React.useEffect(() => { - if (canvasRef.current) { - renderFuncRef.current = rune.draw(canvasRef.current!); - animCallback(0); - - return () => { - if (animId.current) { - cancelAnimationFrame(animId.current!); - } - }; - } - - return undefined; - }, []); - - return ; -} +import React from 'react'; +import type { HollusionRune } from '../../bundles/rune/functions'; +import WebGLCanvas from '../common/webgl_canvas'; + +/** + * Canvas used to display Hollusion runes + */ +export default function HollusionCanvas({ rune }: { rune: HollusionRune }) { + const canvasRef = React.useRef(null); + const renderFuncRef = React.useRef<(time: number) => void>(); + const animId = React.useRef(null); + + const animCallback = (timeInMs: number) => { + renderFuncRef.current!(timeInMs); + animId.current = requestAnimationFrame(animCallback); + }; + + React.useEffect(() => { + if (canvasRef.current) { + renderFuncRef.current = rune.draw(canvasRef.current!); + animCallback(0); + + return () => { + if (animId.current) { + cancelAnimationFrame(animId.current!); + } + }; + } + + return undefined; + }, []); + + return ; +} diff --git a/src/tabs/Rune/index.tsx b/src/tabs/Rune/index.tsx index 9141a841b..76dc93f74 100644 --- a/src/tabs/Rune/index.tsx +++ b/src/tabs/Rune/index.tsx @@ -1,77 +1,77 @@ -import React from 'react'; -import { type HollusionRune } from '../../bundles/rune/functions'; -import type { - AnimatedRune, - DrawnRune, -} from '../../bundles/rune/rune'; -import { glAnimation } from '../../typings/anim_types'; -import MultiItemDisplay from '../common/multi_item_display'; -import { type DebuggerContext } from '../../typings/type_helpers'; -import AnimationCanvas from '../common/animation_canvas'; -import HollusionCanvas from './hollusion_canvas'; -import WebGLCanvas from '../common/webgl_canvas'; - -export default { - /** - * This function will be called to determine if the component will be - * rendered. Currently spawns when there is at least one rune to be - * displayed - * @param {DebuggerContext} context - * @returns {boolean} - */ - toSpawn(context: DebuggerContext) { - const drawnRunes = context.context?.moduleContexts?.rune?.state?.drawnRunes; - return drawnRunes.length > 0; - }, - - /** - * This function will be called to render the module tab in the side contents - * on Source Academy frontend. - * @param {DebuggerContext} context - */ - body(context: DebuggerContext) { - const { context: { moduleContexts: { rune: { state: { drawnRunes } } } } } = context; - - // Based on the toSpawn conditions, it should be safe to assume - // that neither moduleContext or moduleState are null - const runeCanvases = drawnRunes.map((rune, i) => { - const elemKey = i.toString(); - - if (glAnimation.isAnimation(rune)) { - return ( - - ); - } - const drawnRune = rune as DrawnRune; - if (drawnRune.isHollusion) { - return ( - - ); - } - return ( - { - if (r) { - drawnRune.draw(r); - } - }} - key={elemKey} - /> - ); - }); - - return ; - }, - - /** - * The Tab's icon tooltip in the side contents on Source Academy frontend. - */ - label: 'Runes Tab', - - /** - * BlueprintJS IconName element's name, used to render the icon which will be - * displayed in the side contents panel. - * @see https://blueprintjs.com/docs/#icons - */ - iconName: 'group-objects', -}; +import React from 'react'; +import { type HollusionRune } from '../../bundles/rune/functions'; +import type { + AnimatedRune, + DrawnRune, +} from '../../bundles/rune/rune'; +import { glAnimation } from '../../typings/anim_types'; +import MultiItemDisplay from '../common/multi_item_display'; +import { type DebuggerContext } from '../../typings/type_helpers'; +import AnimationCanvas from '../common/animation_canvas'; +import HollusionCanvas from './hollusion_canvas'; +import WebGLCanvas from '../common/webgl_canvas'; + +export default { + /** + * This function will be called to determine if the component will be + * rendered. Currently spawns when there is at least one rune to be + * displayed + * @param {DebuggerContext} context + * @returns {boolean} + */ + toSpawn(context: DebuggerContext) { + const drawnRunes = context.context?.moduleContexts?.rune?.state?.drawnRunes; + return drawnRunes.length > 0; + }, + + /** + * This function will be called to render the module tab in the side contents + * on Source Academy frontend. + * @param {DebuggerContext} context + */ + body(context: DebuggerContext) { + const { context: { moduleContexts: { rune: { state: { drawnRunes } } } } } = context; + + // Based on the toSpawn conditions, it should be safe to assume + // that neither moduleContext or moduleState are null + const runeCanvases = drawnRunes.map((rune, i) => { + const elemKey = i.toString(); + + if (glAnimation.isAnimation(rune)) { + return ( + + ); + } + const drawnRune = rune as DrawnRune; + if (drawnRune.isHollusion) { + return ( + + ); + } + return ( + { + if (r) { + drawnRune.draw(r); + } + }} + key={elemKey} + /> + ); + }); + + return ; + }, + + /** + * The Tab's icon tooltip in the side contents on Source Academy frontend. + */ + label: 'Runes Tab', + + /** + * BlueprintJS IconName element's name, used to render the icon which will be + * displayed in the side contents panel. + * @see https://blueprintjs.com/docs/#icons + */ + iconName: 'group-objects', +}; diff --git a/src/tabs/Sound/index.tsx b/src/tabs/Sound/index.tsx index 4ed5007fe..9c4d29f25 100644 --- a/src/tabs/Sound/index.tsx +++ b/src/tabs/Sound/index.tsx @@ -1,62 +1,62 @@ -import React from 'react'; -import type { DebuggerContext } from '../../typings/type_helpers'; -import MultiItemDisplay from '../common/multi_item_display'; - -/** - * Tab for Source Academy Sounds Module - * @author Koh Shang Hui - * @author Samyukta Sounderraman - */ - -export default { - /** - * This function will be called to determine if the component will be - * rendered. - * @returns {boolean} - */ - toSpawn(context: DebuggerContext) { - const audioPlayed = context.context?.moduleContexts?.sound?.state?.audioPlayed; - return audioPlayed.length > 0; - }, - /** - * This function will be called to render the module tab in the side contents - * on Source Academy frontend. - * @param {DebuggerContext} context - */ - body(context: DebuggerContext) { - const audioPlayed = context.context.moduleContexts.sound.state.audioPlayed; - const elements = audioPlayed.map((audio) => ( -